@dbx-tools/appkit-mastra 0.6.216 → 0.6.217
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/README.md +96 -4
- package/index.ts +9 -3
- package/lib/index.d.ts +9 -3
- package/lib/index.js +6 -2
- package/lib/src/agents.d.ts +4 -3
- package/lib/src/agents.js +10 -5
- package/lib/src/config.d.ts +8 -0
- package/lib/src/config.js +5 -1
- package/lib/src/model.d.ts +2 -0
- package/lib/src/model.js +21 -22
- package/lib/src/monty-sandbox.d.ts +51 -0
- package/lib/src/monty-sandbox.js +331 -0
- package/lib/src/plugin.d.ts +1 -1
- package/lib/src/sandbox.d.ts +100 -0
- package/lib/src/sandbox.js +418 -0
- package/lib/src/serving-sanitize.d.ts +18 -1
- package/lib/src/serving-sanitize.js +41 -3
- package/lib/src/workspaces.d.ts +19 -6
- package/lib/src/workspaces.js +70 -7
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +23 -22
- package/src/agents.ts +13 -5
- package/src/config.ts +13 -0
- package/src/model.ts +21 -23
- package/src/monty-sandbox.ts +406 -0
- package/src/sandbox.ts +515 -0
- package/src/serving-sanitize.ts +50 -2
- package/src/workspaces.ts +105 -6
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* Outbound ({@link rewriteServingBody}), because the transcript Mastra
|
|
6
6
|
* persists is not always a transcript the provider will accept back:
|
|
7
7
|
* Databricks-hosted Claude rejects replayed extended-thinking blocks and reads
|
|
8
|
-
* a trailing assistant message as a prefill request
|
|
8
|
+
* a trailing assistant message as a prefill request, while GPT Astra requires
|
|
9
|
+
* `reasoning_effort: "none"` when Chat Completions carries function tools.
|
|
9
10
|
*
|
|
10
11
|
* Inbound ({@link rewriteServingResponseBody} and
|
|
11
12
|
* {@link rewriteServingResponseStream}), because Databricks-hosted Gemini and
|
|
@@ -35,7 +36,8 @@ export function rewriteServingBody(body) {
|
|
|
35
36
|
return body;
|
|
36
37
|
// Runs regardless of `messages`: Databricks refuses to parse a body carrying
|
|
37
38
|
// an unknown top-level field, so this failure is not specific to a transcript.
|
|
38
|
-
|
|
39
|
+
const astraTools = applyAstraToolCompatibility(parsed);
|
|
40
|
+
let changed = openaiChat.stripUnsupportedChatFields(parsed).length > 0 || astraTools;
|
|
39
41
|
if (Array.isArray(parsed.messages)) {
|
|
40
42
|
const messages = parsed.messages;
|
|
41
43
|
// Evaluated eagerly, not short-circuited: one transcript can need both
|
|
@@ -46,6 +48,42 @@ export function rewriteServingBody(body) {
|
|
|
46
48
|
}
|
|
47
49
|
return changed ? JSON.stringify(parsed) : body;
|
|
48
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Read and rewrite a serving POST whether its JSON body lives on `init` or on
|
|
53
|
+
* a `Request`. A changed Request is rebuilt without stale byte headers.
|
|
54
|
+
*/
|
|
55
|
+
export async function rewriteServingRequest(input, init) {
|
|
56
|
+
const request = new Request(input, init);
|
|
57
|
+
const body = await request.clone().text();
|
|
58
|
+
const rewritten = rewriteServingBody(body);
|
|
59
|
+
if (rewritten === body)
|
|
60
|
+
return { input, init, body };
|
|
61
|
+
const headers = new Headers(request.headers);
|
|
62
|
+
headers.delete("content-length");
|
|
63
|
+
headers.delete("content-encoding");
|
|
64
|
+
return {
|
|
65
|
+
input: new Request(request, { body: rewritten, headers }),
|
|
66
|
+
init: undefined,
|
|
67
|
+
body: rewritten,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Add the Chat Completions option Databricks-hosted GPT Astra requires when
|
|
72
|
+
* function tools are present. An explicit caller value always wins.
|
|
73
|
+
*/
|
|
74
|
+
export function applyAstraToolCompatibility(body) {
|
|
75
|
+
if ("reasoning_effort" in body || !Array.isArray(body.tools) || body.tools.length === 0) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
const model = string.trimToNull(body.model);
|
|
79
|
+
if (!model)
|
|
80
|
+
return false;
|
|
81
|
+
const tokens = new Set(string.tokenizeWithOptions({ lowerCase: true }, model));
|
|
82
|
+
if (!tokens.has("gpt") || !tokens.has("astra"))
|
|
83
|
+
return false;
|
|
84
|
+
body.reasoning_effort = "none";
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
49
87
|
/**
|
|
50
88
|
* Drop extended-thinking / reasoning blocks from a replayed transcript.
|
|
51
89
|
*
|
|
@@ -280,4 +318,4 @@ function flattenChoiceContent(payload, field) {
|
|
|
280
318
|
}
|
|
281
319
|
return changed;
|
|
282
320
|
}
|
|
283
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmluZy1zYW5pdGl6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aW5nLXNhbml0aXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUVILE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUdMLFVBQVUsRUFDVixlQUFlLEdBQ2hCLE1BQU0seUJBQXlCLENBQUM7QUFlakMsOEVBQThFO0FBQzlFLHNDQUFzQztBQUN0QyxNQUFNLG9CQUFvQixHQUFHLGVBQWUsQ0FBQyxlQUFlLENBQUM7QUFFN0Q7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxJQUFZO0lBQzdDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPLElBQUksQ0FBQztJQUV6Qiw2RUFBNkU7SUFDN0UsK0VBQStFO0lBQy9FLElBQUksT0FBTyxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRXZFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBZ0MsQ0FBQztRQUN6RCx1RUFBdUU7UUFDdkUsMEVBQTBFO1FBQzFFLE1BQU0sUUFBUSxHQUFHLGlDQUFpQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdELE1BQU0sUUFBUSxHQUFHLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sR0FBRyxPQUFPLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQztJQUM1QyxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNqRCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGlDQUFpQyxDQUFDLFFBQThCO0lBQzlFLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNwQixLQUFLLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM5QyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLEdBQUc7WUFBRSxTQUFTO1FBQ25CLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUM3QixRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0QixPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ2YsU0FBUztRQUNYLENBQUM7UUFDRCxJQUFJLEdBQUcsQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEMsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDO1lBQ3JCLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDakIsQ0FBQztRQUNELElBQUksR0FBRyxDQUFDLGlCQUFpQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sR0FBRyxDQUFDLGlCQUFpQixDQUFDO1lBQzdCLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDakIsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLEtBQUs7WUFBRSxTQUFTO1FBQ3JCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUFDO1lBQ3hCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUMvRCxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNmLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDaEYsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLFlBQVksSUFBSSxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNwRixRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0QixPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsUUFBOEI7SUFDbkUsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN0QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzFGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxLQUFLLE1BQU07UUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDeEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLElBQ0UsQ0FBQyxNQUFNO1FBQ1AsTUFBTSxDQUFDLElBQUksS0FBSyxXQUFXO1FBQzNCLENBQUMsTUFBTSxDQUFDLFVBQVU7UUFDbEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUM5QixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUc7UUFDYixNQUFNLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6RCxNQUFNLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUN4RDtTQUNFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBZSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQztTQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDeEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2YsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxPQUFzQztJQUNwRSxPQUFPLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2RixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMscUJBQXFCLENBQUMsT0FBc0M7SUFDbkUsSUFBSSxPQUFPLEtBQUssU0FBUztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3ZDLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUTtRQUFFLE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDcEUsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDeEIsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDMUIsSUFBSSxJQUFJLEVBQUUsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzFCLE9BQU8sT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsSUFBWTtJQUNyRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDekIsT0FBTywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzdFLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSw0QkFBNEIsQ0FDMUMsSUFBZ0M7SUFFaEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUVoQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQ3JCLElBQUksZUFBZSxDQUF5QjtRQUMxQyxTQUFTLENBQUMsS0FBSyxFQUFFLFVBQVU7WUFDekIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDbEQsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQyxPQUFPLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ25DLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNFLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDO1FBQ0QsS0FBSyxDQUFDLFVBQVU7WUFDZCxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLElBQUksTUFBTTtnQkFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0NBQWdDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNGLENBQUM7S0FDRixDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUM7QUFFRCxtRkFBbUY7QUFDbkYsU0FBUyxnQ0FBZ0MsQ0FBQyxJQUFZO0lBQ3BELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDcEYsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3RFLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFakQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDL0QsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDO0FBQzdELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBTSxVQUFVLDJCQUEyQixDQUFDLE9BQWdDO0lBQzFFLE9BQU8sb0JBQW9CLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUFDLE9BQWdDO0lBQ3hFLE9BQU8sb0JBQW9CLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCxrRkFBa0Y7QUFDbEYsU0FBUyxvQkFBb0IsQ0FDM0IsT0FBZ0MsRUFDaEMsS0FBMEI7SUFFMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ2xELElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNwQixLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVE7WUFBRSxTQUFTO1FBQ3BELE1BQU0sU0FBUyxHQUFJLE1BQWtDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFNBQVMsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRO1lBQUUsU0FBUztRQUMxRCxNQUFNLE1BQU0sR0FBRyxTQUFrQyxDQUFDO1FBQ2xELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLEtBQUs7WUFBRSxTQUFTO1FBQ3JCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxRSxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXBhaXJzIHRyYWZmaWMgYmV0d2VlbiBNYXN0cmEgLyB0aGUgQUkgU0RLIGFuZCBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcnc1xuICogT3BlbkFJLWNvbXBhdGlibGUgYC9jaGF0L2NvbXBsZXRpb25zYCByb3V0ZSwgaW4gYm90aCBkaXJlY3Rpb25zLlxuICpcbiAqIE91dGJvdW5kICh7QGxpbmsgcmV3cml0ZVNlcnZpbmdCb2R5fSksIGJlY2F1c2UgdGhlIHRyYW5zY3JpcHQgTWFzdHJhXG4gKiBwZXJzaXN0cyBpcyBub3QgYWx3YXlzIGEgdHJhbnNjcmlwdCB0aGUgcHJvdmlkZXIgd2lsbCBhY2NlcHQgYmFjazpcbiAqIERhdGFicmlja3MtaG9zdGVkIENsYXVkZSByZWplY3RzIHJlcGxheWVkIGV4dGVuZGVkLXRoaW5raW5nIGJsb2NrcyBhbmQgcmVhZHNcbiAqIGEgdHJhaWxpbmcgYXNzaXN0YW50IG1lc3NhZ2UgYXMgYSBwcmVmaWxsIHJlcXVlc3QuXG4gKlxuICogSW5ib3VuZCAoe0BsaW5rIHJld3JpdGVTZXJ2aW5nUmVzcG9uc2VCb2R5fSBhbmRcbiAqIHtAbGluayByZXdyaXRlU2VydmluZ1Jlc3BvbnNlU3RyZWFtfSksIGJlY2F1c2UgRGF0YWJyaWNrcy1ob3N0ZWQgR2VtaW5pIGFuZFxuICogQ2xhdWRlIGNhbiBhbnN3ZXIgd2l0aCBuYXRpdmUgY29udGVudC1wYXJ0cyBhcnJheXMgd2hlcmUgdGhlIE9wZW5BSSBjb250cmFjdFxuICogKGFuZCB0aGVyZWZvcmUgdGhlIEFJIFNESydzIHJlc3BvbnNlIHNjaGVtYSkgcmVxdWlyZXMgYSBwbGFpbiBzdHJpbmcuXG4gKlxuICogRXZlcnkgcmVwYWlyIGhlcmUgaXMgYSBwcm92aWRlciBxdWlyayByYXRoZXIgdGhhbiBhIHNjaGVtYSB2aW9sYXRpb24sIHNvIGFsbFxuICogb2YgdGhlbSBhcmUgYXBwbGllZCBvbiB0aGUgd2lyZSAoc2VlIHRoZSBgZ2xvYmFsVGhpcy5mZXRjaGAgd3JhcHBlciBpblxuICogYG1vZGVsLnRzYCkgcmF0aGVyIHRoYW4gYnkgY2hhbmdpbmcgd2hhdCB0aGUgYWdlbnQgc3RvcmVzIG9yIHdoYXQgdGhlIFVJXG4gKiBzaG93cy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsganNvbiwgc3RyaW5nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7XG4gIHR5cGUgQ2hhdE1lc3NhZ2UsXG4gIHR5cGUgQ2hhdFJvbGUsXG4gIG9wZW5haUNoYXQsXG4gIG9wZW5haVJlc3BvbnNlcyxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsXCI7XG5cbi8qKlxuICogQSBjaGF0IG1lc3NhZ2UgYXMgaXQgYXJyaXZlcyBvbiB0aGUgc2VydmluZyB3aXJlLCBwbHVzIHRoZSBleHRlbmRlZC10aGlua2luZ1xuICogZmllbGRzIERhdGFicmlja3MtaG9zdGVkIENsYXVkZSBhZGRzLiBUaGUgT3BlbkFJLXN0YW5kYXJkIHBhcnQgb2YgdGhlIHNoYXBlXG4gKiBpcyB7QGxpbmsgQ2hhdE1lc3NhZ2V9IGZyb20gYEBkYngtdG9vbHMvc2hhcmVkLW1vZGVsYDsgb25seSB0aGUgcHJvdmlkZXJcbiAqIGV4dGVuc2lvbnMgdGhpcyBtb2R1bGUgc3RyaXBzIGFyZSBkZWNsYXJlZCBoZXJlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpbmdDaGF0TWVzc2FnZSBleHRlbmRzIENoYXRNZXNzYWdlIHtcbiAgLyoqIE5hcnJvd2VkIHRvIHRoZSByb2xlcyB0aGlzIHJlcGFpciBwYXNzIHJlYXNvbnMgYWJvdXQsIHBsdXMgQ2xhdWRlJ3MgYHJlYXNvbmluZ2AgdHVybi4gKi9cbiAgcm9sZTogQ2hhdFJvbGUgfCBcInJlYXNvbmluZ1wiO1xuICByZWFzb25pbmc/OiB1bmtub3duO1xuICByZWFzb25pbmdfY29udGVudD86IHVua25vd247XG59XG5cbi8vIFNoYXJlZCB3aXRoIHRoZSBSZXNwb25zZXMgc2FuaXRpemUgcGF0aCBzbyBib3RoIHdpcmUgc3VyZmFjZXMgYWdyZWUgb24gd2hhdFxuLy8gY291bnRzIGFzIGEgc2lnbmVkIHJlYXNvbmluZyBibG9jay5cbmNvbnN0IFJFQVNPTklOR19QQVJUX1RZUEVTID0gb3BlbmFpUmVzcG9uc2VzLlJFQVNPTklOR19UWVBFUztcblxuLyoqXG4gKiBQYXJzZSwgc2FuaXRpemUsIGFuZCByZS1zZXJpYWxpemUgYSBgL3NlcnZpbmctZW5kcG9pbnRzLy4uLmAgUE9TVFxuICogYm9keS4gUmV0dXJucyB0aGUgb3JpZ2luYWwgc3RyaW5nIHZlcmJhdGltIHdoZW4gdGhlIGJvZHkgaXMgbm90XG4gKiBKU09OIG9yIG5vIHJld3JpdGUgd2FzIG5lZWRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVTZXJ2aW5nQm9keShib2R5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJzZWQgPSBqc29uLnBhcnNlUmVjb3JkKGJvZHkpO1xuICBpZiAoIXBhcnNlZCkgcmV0dXJuIGJvZHk7XG5cbiAgLy8gUnVucyByZWdhcmRsZXNzIG9mIGBtZXNzYWdlc2A6IERhdGFicmlja3MgcmVmdXNlcyB0byBwYXJzZSBhIGJvZHkgY2FycnlpbmdcbiAgLy8gYW4gdW5rbm93biB0b3AtbGV2ZWwgZmllbGQsIHNvIHRoaXMgZmFpbHVyZSBpcyBub3Qgc3BlY2lmaWMgdG8gYSB0cmFuc2NyaXB0LlxuICBsZXQgY2hhbmdlZCA9IG9wZW5haUNoYXQuc3RyaXBVbnN1cHBvcnRlZENoYXRGaWVsZHMocGFyc2VkKS5sZW5ndGggPiAwO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHBhcnNlZC5tZXNzYWdlcykpIHtcbiAgICBjb25zdCBtZXNzYWdlcyA9IHBhcnNlZC5tZXNzYWdlcyBhcyBTZXJ2aW5nQ2hhdE1lc3NhZ2VbXTtcbiAgICAvLyBFdmFsdWF0ZWQgZWFnZXJseSwgbm90IHNob3J0LWNpcmN1aXRlZDogb25lIHRyYW5zY3JpcHQgY2FuIG5lZWQgYm90aFxuICAgIC8vIHJlYXNvbmluZyBibG9ja3Mgc3RyaXBwZWQgQU5EIGEgdHJhaWxpbmcgYXNzaXN0YW50IHByZWZpbGwgZm9sZGVkIGJhY2suXG4gICAgY29uc3Qgc3RyaXBwZWQgPSBzdHJpcFJlYXNvbmluZ0Zyb21TZXJ2aW5nTWVzc2FnZXMobWVzc2FnZXMpO1xuICAgIGNvbnN0IHJlcGFpcmVkID0gcmVwYWlyQXNzaXN0YW50UHJlZmlsbChtZXNzYWdlcyk7XG4gICAgY2hhbmdlZCA9IGNoYW5nZWQgfHwgc3RyaXBwZWQgfHwgcmVwYWlyZWQ7XG4gIH1cblxuICByZXR1cm4gY2hhbmdlZCA/IEpTT04uc3RyaW5naWZ5KHBhcnNlZCkgOiBib2R5O1xufVxuXG4vKipcbiAqIERyb3AgZXh0ZW5kZWQtdGhpbmtpbmcgLyByZWFzb25pbmcgYmxvY2tzIGZyb20gYSByZXBsYXllZCB0cmFuc2NyaXB0LlxuICpcbiAqIEh5YnJpZCBDbGF1ZGUgZW5kcG9pbnRzIChlLmcuIFNvbm5ldCA0LjUrKSBtYXkgZW1pdCBgcmVhc29uaW5nYCBjb250ZW50XG4gKiBwYXJ0cyBvbiB0aGUgZmlyc3QgdHVybi4gTWFzdHJhIHBlcnNpc3RzIGFuZCByZXBsYXlzIHRoZW0gb24gdGhlIG5leHRcbiAqIGFnZW50IHN0ZXAsIGJ1dCBEYXRhYnJpY2tzLWhvc3RlZCBDbGF1ZGUgcmVqZWN0cyB0aG9zZSBibG9ja3Mgb25cbiAqIG11bHRpLXR1cm4gdG9vbCBjb250aW51YXRpb25zLiBUaGUgVUkgYWxyZWFkeSBjYXB0dXJlZCByZWFzb25pbmcgZm9yXG4gKiBkaXNwbGF5OyBzdHJpcHBpbmcgaGVyZSBrZWVwcyBwcm92aWRlciByZXBsYXkgY29tcGF0aWJsZSB3aXRob3V0XG4gKiBjaGFuZ2luZyB3aGF0IHVzZXJzIHNlZSBpbiB0aGUgY2hhdCBidWJibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcFJlYXNvbmluZ0Zyb21TZXJ2aW5nTWVzc2FnZXMobWVzc2FnZXM6IFNlcnZpbmdDaGF0TWVzc2FnZVtdKTogYm9vbGVhbiB7XG4gIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSBtZXNzYWdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IG1zZyA9IG1lc3NhZ2VzW2ldO1xuICAgIGlmICghbXNnKSBjb250aW51ZTtcbiAgICBpZiAobXNnLnJvbGUgPT09IFwicmVhc29uaW5nXCIpIHtcbiAgICAgIG1lc3NhZ2VzLnNwbGljZShpLCAxKTtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChtc2cucmVhc29uaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlbGV0ZSBtc2cucmVhc29uaW5nO1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChtc2cucmVhc29uaW5nX2NvbnRlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVsZXRlIG1zZy5yZWFzb25pbmdfY29udGVudDtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBwYXJ0cyA9IG9wZW5haUNoYXQuY2hhdENvbnRlbnRQYXJ0cyhtc2cuY29udGVudCk7XG4gICAgaWYgKCFwYXJ0cykgY29udGludWU7XG4gICAgY29uc3QgZmlsdGVyZWQgPSBwYXJ0cy5maWx0ZXIoKHBhcnQpID0+IHtcbiAgICAgIGNvbnN0IHR5cGUgPSBwYXJ0Py50eXBlO1xuICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSBcInN0cmluZ1wiICYmIFJFQVNPTklOR19QQVJUX1RZUEVTLmhhcyh0eXBlKSkge1xuICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gICAgaWYgKGZpbHRlcmVkLmxlbmd0aCAhPT0gcGFydHMubGVuZ3RoKSB7XG4gICAgICBtc2cuY29udGVudCA9IGZpbHRlcmVkO1xuICAgIH1cbiAgICBjb25zdCBoYXNUb29sQ2FsbHMgPSBBcnJheS5pc0FycmF5KG1zZy50b29sX2NhbGxzKSAmJiBtc2cudG9vbF9jYWxscy5sZW5ndGggPiAwO1xuICAgIGlmIChtc2cucm9sZSA9PT0gXCJhc3Npc3RhbnRcIiAmJiAhaGFzVG9vbENhbGxzICYmIGlzRW1wdHlTZXJ2aW5nQ29udGVudChtc2cuY29udGVudCkpIHtcbiAgICAgIG1lc3NhZ2VzLnNwbGljZShpLCAxKTtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2hhbmdlZDtcbn1cblxuLyoqXG4gKiBSZXBhaXIgYSBNYXN0cmEvQUkgU0RLIG1lc3NhZ2UgcmVwbGF5IHRoYXQgRGF0YWJyaWNrcy1ob3N0ZWQgQ2xhdWRlXG4gKiByZWplY3RzIHdpdGggYFwiVGhpcyBtb2RlbCBkb2VzIG5vdCBzdXBwb3J0IGFzc2lzdGFudCBtZXNzYWdlXG4gKiBwcmVmaWxsLiBUaGUgY29udmVyc2F0aW9uIG11c3QgZW5kIHdpdGggYSB1c2VyIG1lc3NhZ2UuXCJgLlxuICpcbiAqIFRoZSBidWcgcGF0dGVybjogd2hlbiBhbiBhc3Npc3RhbnQgdHVybiBzdHJlYW1zIHRleHQgKmFuZCogYVxuICogYHRvb2xfY2FsbGAsIHRoZSBBSSBTREsgcGVyc2lzdHMgdGhlbSBhcyB0d28gc2VwYXJhdGUgYXNzaXN0YW50XG4gKiBlbnRyaWVzICh0ZXh0LW9ubHkgYW5kIHRvb2wtY2FsbC1vbmx5KS4gT24gdGhlIG5leHQgYWdlbnQgc3RlcCB0aGVcbiAqIHRvb2wtY2FsbCBlbnRyeSBpcyByZXBsYXllZCAqYmVmb3JlKiB0aGUgdG9vbCByZXN1bHQgYW5kIHRoZVxuICogdGV4dCBlbnRyeSBpcyByZXBsYXllZCAqYWZ0ZXIqIGl0LCBzbyB0aGUgY29udmVyc2F0aW9uIGVuZHMgd2l0aCBhXG4gKiB0cmFpbGluZyBhc3Npc3RhbnQgdGV4dCBtZXNzYWdlLiBBbnRocm9waWMgaW50ZXJwcmV0cyB0aGF0IGFzIGFcbiAqIHByZWZpbGwgcmVxdWVzdCBhbmQgcmVqZWN0cyBpdCBvbiBEYXRhYnJpY2tzICh0aGUgdXBzdHJlYW0gQmVkcm9ja1xuICogcm91dGUgZGlzYWxsb3dzIHByZWZpbGwpLlxuICpcbiAqIEZpeDogd2hlbiB0aGUgbGFzdCBtZXNzYWdlIGlzIGFuIGFzc2lzdGFudCB0ZXh0IHdpdGggbm8gYHRvb2xfY2FsbHNgXG4gKiBhbmQgdGhlIGNoYWluIGltbWVkaWF0ZWx5IGJlZm9yZSBpdCBpcyBgYXNzaXN0YW50KHRvb2xfY2FsbHM9Li4uKWBcbiAqIGZvbGxvd2VkIG9ubHkgYnkgYHRvb2woLi4uKWAgcmVzdWx0cywgZm9sZCB0aGUgdHJhaWxpbmcgdGV4dCBiYWNrXG4gKiBpbnRvIHRoZSBgY29udGVudGAgb2YgdGhhdCBvcGVuaW5nIGFzc2lzdGFudCBhbmQgZHJvcCB0aGUgZHVwbGljYXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwYWlyQXNzaXN0YW50UHJlZmlsbChtZXNzYWdlczogU2VydmluZ0NoYXRNZXNzYWdlW10pOiBib29sZWFuIHtcbiAgaWYgKG1lc3NhZ2VzLmxlbmd0aCA8IDIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgbGFzdCA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdO1xuICBpZiAoIWxhc3QgfHwgbGFzdC5yb2xlICE9PSBcImFzc2lzdGFudFwiIHx8IChsYXN0LnRvb2xfY2FsbHMgJiYgbGFzdC50b29sX2NhbGxzLmxlbmd0aCA+IDApKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbGV0IGkgPSBtZXNzYWdlcy5sZW5ndGggLSAyO1xuICB3aGlsZSAoaSA+PSAwICYmIG1lc3NhZ2VzW2ldPy5yb2xlID09PSBcInRvb2xcIikgaS0tO1xuICBpZiAoaSA8IDApIHJldHVybiBmYWxzZTtcbiAgY29uc3Qgb3BlbmVyID0gbWVzc2FnZXNbaV07XG4gIGlmIChcbiAgICAhb3BlbmVyIHx8XG4gICAgb3BlbmVyLnJvbGUgIT09IFwiYXNzaXN0YW50XCIgfHxcbiAgICAhb3BlbmVyLnRvb2xfY2FsbHMgfHxcbiAgICBvcGVuZXIudG9vbF9jYWxscy5sZW5ndGggPT09IDBcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgbWVyZ2VkID0gW1xuICAgIHN0cmluZy50cmltVG9OdWxsKHRleHRGcm9tU2VydmluZ0NvbnRlbnQob3BlbmVyLmNvbnRlbnQpKSxcbiAgICBzdHJpbmcudHJpbVRvTnVsbCh0ZXh0RnJvbVNlcnZpbmdDb250ZW50KGxhc3QuY29udGVudCkpLFxuICBdXG4gICAgLmZpbHRlcigocyk6IHMgaXMgc3RyaW5nID0+IHMgIT09IG51bGwpXG4gICAgLmpvaW4oXCJcXG5cXG5cIik7XG4gIG9wZW5lci5jb250ZW50ID0gbWVyZ2VkO1xuICBtZXNzYWdlcy5wb3AoKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogRmxhdHRlbiBjb250ZW50IHRvIHRoZSBwcm9zZSBhIGh1bWFuIHdvdWxkIHJlYWQ6IHRleHQgcGFydHMgb25seSwgc2VwYXJhdGVkXG4gKiBieSBibGFuayBsaW5lcywgc2luY2UgdGhlIHJlc3VsdCBpcyBzcGxpY2VkIGludG8gYW5vdGhlciB0dXJuJ3MgbWVzc2FnZSBib2R5LlxuICovXG5mdW5jdGlvbiB0ZXh0RnJvbVNlcnZpbmdDb250ZW50KGNvbnRlbnQ6IFNlcnZpbmdDaGF0TWVzc2FnZVtcImNvbnRlbnRcIl0pOiBzdHJpbmcge1xuICByZXR1cm4gb3BlbmFpQ2hhdC5jaGF0Q29udGVudFRvVGV4dChjb250ZW50LCB7IHNlcGFyYXRvcjogXCJcXG5cXG5cIiwgdHlwZXM6IFtcInRleHRcIl0gfSk7XG59XG5cbi8qKlxuICogV2hldGhlciBhIHR1cm4gY2FycmllcyBub3RoaW5nIHdvcnRoIHJlcGxheWluZy4gRGVsaWJlcmF0ZWx5IHN0cmljdGVyIHRoYW5cbiAqIFwiaGFzIG5vIHRleHRcIjogYSBwYXJ0IG9mIGFueSBvdGhlciB0eXBlIChhbiBpbWFnZSwgYSBjYWNoZSBtYXJrZXIpIGNvdW50cyBhc1xuICogY29udGVudCwgc28gYSBtZXNzYWdlIGhvbGRpbmcgb25lIGlzIGtlcHQgZXZlbiB0aG91Z2ggaXQgaGFzIG5vIHByb3NlLlxuICovXG5mdW5jdGlvbiBpc0VtcHR5U2VydmluZ0NvbnRlbnQoY29udGVudDogU2VydmluZ0NoYXRNZXNzYWdlW1wiY29udGVudFwiXSk6IGJvb2xlYW4ge1xuICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSByZXR1cm4gY29udGVudC50cmltKCkubGVuZ3RoID09PSAwO1xuICBjb25zdCBwYXJ0cyA9IG9wZW5haUNoYXQuY2hhdENvbnRlbnRQYXJ0cyhjb250ZW50KTtcbiAgaWYgKCFwYXJ0cykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBwYXJ0cy5ldmVyeSgocGFydCkgPT4ge1xuICAgIGlmIChwYXJ0Py50eXBlID09PSBcInRleHRcIikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBwYXJ0LnRleHQgIT09IFwic3RyaW5nXCIgfHwgcGFydC50ZXh0LnRyaW0oKS5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59XG5cbi8qKlxuICogUGFyc2UsIHNhbml0aXplLCBhbmQgcmUtc2VyaWFsaXplIGEgYC9zZXJ2aW5nLWVuZHBvaW50cy8uLi5gIG5vbi1zdHJlYW1pbmdcbiAqIEpTT04gUkVTUE9OU0UgYm9keS4gUmV0dXJucyB0aGUgb3JpZ2luYWwgc3RyaW5nIHZlcmJhdGltIHdoZW4gdGhlIGJvZHkgaXNcbiAqIG5vdCBKU09OIG9yIG5vIHJld3JpdGUgd2FzIG5lZWRlZCwgbWlycm9yaW5nXG4gKiB7QGxpbmsgcmV3cml0ZVNlcnZpbmdCb2R5fSBvbiB0aGUgcmVxdWVzdCBzaWRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZVNlcnZpbmdSZXNwb25zZUJvZHkoYm9keTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFyc2VkID0ganNvbi5wYXJzZVJlY29yZChib2R5KTtcbiAgaWYgKCFwYXJzZWQpIHJldHVybiBib2R5O1xuICByZXR1cm4gZmxhdHRlbkNob2ljZU1lc3NhZ2VDb250ZW50KHBhcnNlZCkgPyBKU09OLnN0cmluZ2lmeShwYXJzZWQpIDogYm9keTtcbn1cblxuLyoqXG4gKiBSZXBhaXIgYXJyYXktdmFsdWVkIGBjaG9pY2VzW10uZGVsdGEuY29udGVudGAgaW5zaWRlIGFuIE9wZW5BSSBTU0Ugc3RyZWFtXG4gKiB3aXRob3V0IGJ1ZmZlcmluZyB0aGUgcmVzcG9uc2UuIFRoZSBkZWNvZGVyIHJldGFpbnMgcGFydGlhbCBsaW5lcyBhY3Jvc3NcbiAqIGFyYml0cmFyeSBuZXR3b3JrIGNodW5rIGJvdW5kYXJpZXM7IGVhY2ggY29tcGxldGUgYGRhdGE6YCBsaW5lIGlzIHBhcnNlZCBhbmRcbiAqIHJlLWVuY29kZWQgb25seSB3aGVuIGl0cyBjb250ZW50IG5lZWRzIG5vcm1hbGl6YXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlU2VydmluZ1Jlc3BvbnNlU3RyZWFtKFxuICBib2R5OiBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5Pixcbik6IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+IHtcbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gIGxldCBidWZmZXIgPSBcIlwiO1xuXG4gIHJldHVybiBib2R5LnBpcGVUaHJvdWdoKFxuICAgIG5ldyBUcmFuc2Zvcm1TdHJlYW08VWludDhBcnJheSwgVWludDhBcnJheT4oe1xuICAgICAgdHJhbnNmb3JtKGNodW5rLCBjb250cm9sbGVyKSB7XG4gICAgICAgIGJ1ZmZlciArPSBkZWNvZGVyLmRlY29kZShjaHVuaywgeyBzdHJlYW06IHRydWUgfSk7XG4gICAgICAgIGxldCBuZXdsaW5lID0gYnVmZmVyLmluZGV4T2YoXCJcXG5cIik7XG4gICAgICAgIHdoaWxlIChuZXdsaW5lID49IDApIHtcbiAgICAgICAgICBjb25zdCBsaW5lID0gYnVmZmVyLnNsaWNlKDAsIG5ld2xpbmUgKyAxKTtcbiAgICAgICAgICBidWZmZXIgPSBidWZmZXIuc2xpY2UobmV3bGluZSArIDEpO1xuICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShlbmNvZGVyLmVuY29kZShyZXdyaXRlU2VydmluZ1Jlc3BvbnNlU3RyZWFtTGluZShsaW5lKSkpO1xuICAgICAgICAgIG5ld2xpbmUgPSBidWZmZXIuaW5kZXhPZihcIlxcblwiKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGZsdXNoKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKCk7XG4gICAgICAgIGlmIChidWZmZXIpIGNvbnRyb2xsZXIuZW5xdWV1ZShlbmNvZGVyLmVuY29kZShyZXdyaXRlU2VydmluZ1Jlc3BvbnNlU3RyZWFtTGluZShidWZmZXIpKSk7XG4gICAgICB9LFxuICAgIH0pLFxuICApO1xufVxuXG4vKiogTm9ybWFsaXplIG9uZSBTU0UgbGluZSB3aGlsZSBwcmVzZXJ2aW5nIGl0cyBgZGF0YTpgIHNwYWNpbmcgYW5kIGxpbmUgZW5kaW5nLiAqL1xuZnVuY3Rpb24gcmV3cml0ZVNlcnZpbmdSZXNwb25zZVN0cmVhbUxpbmUobGluZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbGluZUVuZGluZyA9IGxpbmUuZW5kc1dpdGgoXCJcXHJcXG5cIikgPyBcIlxcclxcblwiIDogbGluZS5lbmRzV2l0aChcIlxcblwiKSA/IFwiXFxuXCIgOiBcIlwiO1xuICBjb25zdCBjb250ZW50ID0gbGluZUVuZGluZyA/IGxpbmUuc2xpY2UoMCwgLWxpbmVFbmRpbmcubGVuZ3RoKSA6IGxpbmU7XG4gIGNvbnN0IG1hdGNoID0gL14oZGF0YTpcXHMqKSguKikkLy5leGVjKGNvbnRlbnQpO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzJdID09PSBcIltET05FXVwiKSByZXR1cm4gbGluZTtcblxuICBjb25zdCBwYXJzZWQgPSBqc29uLnBhcnNlUmVjb3JkKG1hdGNoWzJdKTtcbiAgaWYgKCFwYXJzZWQgfHwgIWZsYXR0ZW5DaG9pY2VEZWx0YUNvbnRlbnQocGFyc2VkKSkgcmV0dXJuIGxpbmU7XG4gIHJldHVybiBgJHttYXRjaFsxXX0ke0pTT04uc3RyaW5naWZ5KHBhcnNlZCl9JHtsaW5lRW5kaW5nfWA7XG59XG5cbi8qKlxuICogQ29sbGFwc2UgYSBzdHJ1Y3R1cmVkIGBjaG9pY2VzW10ubWVzc2FnZS5jb250ZW50YCBhcnJheSB0byB0aGUgcGxhaW4gc3RyaW5nXG4gKiB0aGUgT3BlbkFJIENoYXQgQ29tcGxldGlvbnMgY29udHJhY3Qgc3BlY2lmaWVzLlxuICpcbiAqIERhdGFicmlja3MtaG9zdGVkIEdlbWluaSBhbnN3ZXJzIGEgbm9uLXN0cmVhbWluZyBgL2NoYXQvY29tcGxldGlvbnNgIGNhbGxcbiAqIHdpdGggdGhlIEdlbWluaS1uYXRpdmUgcGFydHMgc2hhcGU6XG4gKlxuICogYGBganNvblxuICogXCJjb250ZW50XCI6IFt7IFwidHlwZVwiOiBcInRleHRcIiwgXCJ0ZXh0XCI6IFwiLi4uXCIsIFwidGhvdWdodFNpZ25hdHVyZVwiOiBcIi4uLlwiIH1dXG4gKiBgYGBcbiAqXG4gKiBgQGFpLXNkay9vcGVuYWktY29tcGF0aWJsZWAgdmFsaWRhdGVzIHRoZSByZXNwb25zZSBhZ2FpbnN0IHRoZSBPcGVuQUlcbiAqIHNjaGVtYSwgd2hlcmUgYGNvbnRlbnRgIGlzIGEgbnVsbGFibGUgc3RyaW5nLCBzbyBpdCB0aHJvd3NcbiAqIGBUeXBlIHZhbGlkYXRpb24gZmFpbGVkOiAuLi4gZXhwZWN0ZWQgc3RyaW5nLCByZWNlaXZlZCBhcnJheWAgYW5kIHRoZSB3aG9sZVxuICogY2FsbCBmYWlscyAoYEFJX0FQSUNhbGxFcnJvcjogSW52YWxpZCBKU09OIHJlc3BvbnNlYCBvbiBhbiBIVFRQIDIwMCkuIE1hc3RyYVxuICogdXNlcyBgZG9HZW5lcmF0ZWAgZm9yIGl0cyBzaWRlIGNhbGxzLCBzbyB0aGUgdmlzaWJsZSBzeW1wdG9tIGlzXG4gKiBgRXJyb3IgZ2VuZXJhdGluZyB0aXRsZWAgLSBldmVyeSB0aHJlYWQga2VlcHMgaXRzIHBsYWNlaG9sZGVyIG5hbWUuXG4gKlxuICogRmxhdHRlbmluZyBvbiB0aGUgd2lyZSBrZWVwcyB0aGUgcmVwYWlyIGluIG9uZSBwbGFjZTogbmVpdGhlciB0aGUgYWdlbnQnc1xuICogc3RvcmVkIHRyYW5zY3JpcHQgbm9yIHRoZSBVSSBoYXMgdG8ga25vdyB0aGUgcHJvdmlkZXIgZW1pdHRlZCBwYXJ0cy4gQW55XG4gKiBub24tdGV4dCBwYXJ0IChhIHJlYXNvbmluZyBibG9jaywgYHRob3VnaHRTaWduYXR1cmVgLW9ubHkgZW50cnksIG9yIGlubGluZVxuICogaW1hZ2UpIGNvbnRyaWJ1dGVzIG5vdGhpbmcsIG1hdGNoaW5nIHtAbGluayBvcGVuYWlDaGF0LmNoYXRDb250ZW50VG9UZXh0fSxcbiAqIGFuZCBhbiBhbGwtcGFydHMtZW1wdHkgbWVzc2FnZSBmbGF0dGVucyB0byBgXCJcImAgcmF0aGVyIHRoYW4gYmVpbmcgZHJvcHBlZCwgc29cbiAqIGBmaW5pc2hfcmVhc29uYCBhbmQgYHVzYWdlYCBzdGlsbCByb3VuZC10cmlwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbkNob2ljZU1lc3NhZ2VDb250ZW50KHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiB7XG4gIHJldHVybiBmbGF0dGVuQ2hvaWNlQ29udGVudChwYXlsb2FkLCBcIm1lc3NhZ2VcIik7XG59XG5cbi8qKlxuICogQ29sbGFwc2Ugc3RydWN0dXJlZCBzdHJlYW1pbmcgYGNob2ljZXNbXS5kZWx0YS5jb250ZW50YCBhcnJheXMgdG8gc3RyaW5ncy5cbiAqIENsYXVkZSByZWFzb25pbmctb25seSBjaHVua3MgYmVjb21lIGFuIGVtcHR5IGNvbnRlbnQgZGVsdGEgd2hpbGUgdGV4dCBwYXJ0c1xuICogYXJlIGNvbmNhdGVuYXRlZCBpbiBvcmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5DaG9pY2VEZWx0YUNvbnRlbnQocGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuIHtcbiAgcmV0dXJuIGZsYXR0ZW5DaG9pY2VDb250ZW50KHBheWxvYWQsIFwiZGVsdGFcIik7XG59XG5cbi8qKiBTaGFyZWQgY2hvaWNlIHdhbGtlciBmb3IgYnVmZmVyZWQgYG1lc3NhZ2VgIGFuZCBzdHJlYW1pbmcgYGRlbHRhYCBwYXlsb2Fkcy4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW5DaG9pY2VDb250ZW50KFxuICBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZmllbGQ6IFwibWVzc2FnZVwiIHwgXCJkZWx0YVwiLFxuKTogYm9vbGVhbiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShwYXlsb2FkLmNob2ljZXMpKSByZXR1cm4gZmFsc2U7XG4gIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gIGZvciAoY29uc3QgY2hvaWNlIG9mIHBheWxvYWQuY2hvaWNlcykge1xuICAgIGlmICghY2hvaWNlIHx8IHR5cGVvZiBjaG9pY2UgIT09IFwib2JqZWN0XCIpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IChjaG9pY2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2ZpZWxkXTtcbiAgICBpZiAoIWNvbnRhaW5lciB8fCB0eXBlb2YgY29udGFpbmVyICE9PSBcIm9iamVjdFwiKSBjb250aW51ZTtcbiAgICBjb25zdCB0YXJnZXQgPSBjb250YWluZXIgYXMgeyBjb250ZW50PzogdW5rbm93biB9O1xuICAgIGNvbnN0IHBhcnRzID0gb3BlbmFpQ2hhdC5jaGF0Q29udGVudFBhcnRzKHRhcmdldC5jb250ZW50KTtcbiAgICBpZiAoIXBhcnRzKSBjb250aW51ZTtcbiAgICB0YXJnZXQuY29udGVudCA9IG9wZW5haUNoYXQuY2hhdENvbnRlbnRUb1RleHQocGFydHMsIHsgdHlwZXM6IFtcInRleHRcIl0gfSk7XG4gICAgY2hhbmdlZCA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGNoYW5nZWQ7XG59XG4iXX0=
|
|
321
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmluZy1zYW5pdGl6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aW5nLXNhbml0aXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFFSCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFHTCxVQUFVLEVBQ1YsZUFBZSxHQUNoQixNQUFNLHlCQUF5QixDQUFDO0FBZWpDLDhFQUE4RTtBQUM5RSxzQ0FBc0M7QUFDdEMsTUFBTSxvQkFBb0IsR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDO0FBRTdEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsSUFBWTtJQUM3QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFekIsNkVBQTZFO0lBQzdFLCtFQUErRTtJQUMvRSxNQUFNLFVBQVUsR0FBRywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2RCxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsMEJBQTBCLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUM7SUFFckYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFnQyxDQUFDO1FBQ3pELHVFQUF1RTtRQUN2RSwwRUFBMEU7UUFDMUUsTUFBTSxRQUFRLEdBQUcsaUNBQWlDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0QsTUFBTSxRQUFRLEdBQUcsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEQsT0FBTyxHQUFHLE9BQU8sSUFBSSxRQUFRLElBQUksUUFB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QUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDakIsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlcGFpcnMgdHJhZmZpYyBiZXR3ZWVuIE1hc3RyYSAvIHRoZSBBSSBTREsgYW5kIERhdGFicmlja3MgTW9kZWwgU2VydmluZydzXG4gKiBPcGVuQUktY29tcGF0aWJsZSBgL2NoYXQvY29tcGxldGlvbnNgIHJvdXRlLCBpbiBib3RoIGRpcmVjdGlvbnMuXG4gKlxuICogT3V0Ym91bmQgKHtAbGluayByZXdyaXRlU2VydmluZ0JvZHl9KSwgYmVjYXVzZSB0aGUgdHJhbnNjcmlwdCBNYXN0cmFcbiAqIHBlcnNpc3RzIGlzIG5vdCBhbHdheXMgYSB0cmFuc2NyaXB0IHRoZSBwcm92aWRlciB3aWxsIGFjY2VwdCBiYWNrOlxuICogRGF0YWJyaWNrcy1ob3N0ZWQgQ2xhdWRlIHJlamVjdHMgcmVwbGF5ZWQgZXh0ZW5kZWQtdGhpbmtpbmcgYmxvY2tzIGFuZCByZWFkc1xuICogYSB0cmFpbGluZyBhc3Npc3RhbnQgbWVzc2FnZSBhcyBhIHByZWZpbGwgcmVxdWVzdCwgd2hpbGUgR1BUIEFzdHJhIHJlcXVpcmVzXG4gKiBgcmVhc29uaW5nX2VmZm9ydDogXCJub25lXCJgIHdoZW4gQ2hhdCBDb21wbGV0aW9ucyBjYXJyaWVzIGZ1bmN0aW9uIHRvb2xzLlxuICpcbiAqIEluYm91bmQgKHtAbGluayByZXdyaXRlU2VydmluZ1Jlc3BvbnNlQm9keX0gYW5kXG4gKiB7QGxpbmsgcmV3cml0ZVNlcnZpbmdSZXNwb25zZVN0cmVhbX0pLCBiZWNhdXNlIERhdGFicmlja3MtaG9zdGVkIEdlbWluaSBhbmRcbiAqIENsYXVkZSBjYW4gYW5zd2VyIHdpdGggbmF0aXZlIGNvbnRlbnQtcGFydHMgYXJyYXlzIHdoZXJlIHRoZSBPcGVuQUkgY29udHJhY3RcbiAqIChhbmQgdGhlcmVmb3JlIHRoZSBBSSBTREsncyByZXNwb25zZSBzY2hlbWEpIHJlcXVpcmVzIGEgcGxhaW4gc3RyaW5nLlxuICpcbiAqIEV2ZXJ5IHJlcGFpciBoZXJlIGlzIGEgcHJvdmlkZXIgcXVpcmsgcmF0aGVyIHRoYW4gYSBzY2hlbWEgdmlvbGF0aW9uLCBzbyBhbGxcbiAqIG9mIHRoZW0gYXJlIGFwcGxpZWQgb24gdGhlIHdpcmUgKHNlZSB0aGUgYGdsb2JhbFRoaXMuZmV0Y2hgIHdyYXBwZXIgaW5cbiAqIGBtb2RlbC50c2ApIHJhdGhlciB0aGFuIGJ5IGNoYW5naW5nIHdoYXQgdGhlIGFnZW50IHN0b3JlcyBvciB3aGF0IHRoZSBVSVxuICogc2hvd3MuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGpzb24sIHN0cmluZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQge1xuICB0eXBlIENoYXRNZXNzYWdlLFxuICB0eXBlIENoYXRSb2xlLFxuICBvcGVuYWlDaGF0LFxuICBvcGVuYWlSZXNwb25zZXMsXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbFwiO1xuXG4vKipcbiAqIEEgY2hhdCBtZXNzYWdlIGFzIGl0IGFycml2ZXMgb24gdGhlIHNlcnZpbmcgd2lyZSwgcGx1cyB0aGUgZXh0ZW5kZWQtdGhpbmtpbmdcbiAqIGZpZWxkcyBEYXRhYnJpY2tzLWhvc3RlZCBDbGF1ZGUgYWRkcy4gVGhlIE9wZW5BSS1zdGFuZGFyZCBwYXJ0IG9mIHRoZSBzaGFwZVxuICogaXMge0BsaW5rIENoYXRNZXNzYWdlfSBmcm9tIGBAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbGA7IG9ubHkgdGhlIHByb3ZpZGVyXG4gKiBleHRlbnNpb25zIHRoaXMgbW9kdWxlIHN0cmlwcyBhcmUgZGVjbGFyZWQgaGVyZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aW5nQ2hhdE1lc3NhZ2UgZXh0ZW5kcyBDaGF0TWVzc2FnZSB7XG4gIC8qKiBOYXJyb3dlZCB0byB0aGUgcm9sZXMgdGhpcyByZXBhaXIgcGFzcyByZWFzb25zIGFib3V0LCBwbHVzIENsYXVkZSdzIGByZWFzb25pbmdgIHR1cm4uICovXG4gIHJvbGU6IENoYXRSb2xlIHwgXCJyZWFzb25pbmdcIjtcbiAgcmVhc29uaW5nPzogdW5rbm93bjtcbiAgcmVhc29uaW5nX2NvbnRlbnQ/OiB1bmtub3duO1xufVxuXG4vLyBTaGFyZWQgd2l0aCB0aGUgUmVzcG9uc2VzIHNhbml0aXplIHBhdGggc28gYm90aCB3aXJlIHN1cmZhY2VzIGFncmVlIG9uIHdoYXRcbi8vIGNvdW50cyBhcyBhIHNpZ25lZCByZWFzb25pbmcgYmxvY2suXG5jb25zdCBSRUFTT05JTkdfUEFSVF9UWVBFUyA9IG9wZW5haVJlc3BvbnNlcy5SRUFTT05JTkdfVFlQRVM7XG5cbi8qKlxuICogUGFyc2UsIHNhbml0aXplLCBhbmQgcmUtc2VyaWFsaXplIGEgYC9zZXJ2aW5nLWVuZHBvaW50cy8uLi5gIFBPU1RcbiAqIGJvZHkuIFJldHVybnMgdGhlIG9yaWdpbmFsIHN0cmluZyB2ZXJiYXRpbSB3aGVuIHRoZSBib2R5IGlzIG5vdFxuICogSlNPTiBvciBubyByZXdyaXRlIHdhcyBuZWVkZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlU2VydmluZ0JvZHkoYm9keTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFyc2VkID0ganNvbi5wYXJzZVJlY29yZChib2R5KTtcbiAgaWYgKCFwYXJzZWQpIHJldHVybiBib2R5O1xuXG4gIC8vIFJ1bnMgcmVnYXJkbGVzcyBvZiBgbWVzc2FnZXNgOiBEYXRhYnJpY2tzIHJlZnVzZXMgdG8gcGFyc2UgYSBib2R5IGNhcnJ5aW5nXG4gIC8vIGFuIHVua25vd24gdG9wLWxldmVsIGZpZWxkLCBzbyB0aGlzIGZhaWx1cmUgaXMgbm90IHNwZWNpZmljIHRvIGEgdHJhbnNjcmlwdC5cbiAgY29uc3QgYXN0cmFUb29scyA9IGFwcGx5QXN0cmFUb29sQ29tcGF0aWJpbGl0eShwYXJzZWQpO1xuICBsZXQgY2hhbmdlZCA9IG9wZW5haUNoYXQuc3RyaXBVbnN1cHBvcnRlZENoYXRGaWVsZHMocGFyc2VkKS5sZW5ndGggPiAwIHx8IGFzdHJhVG9vbHM7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkocGFyc2VkLm1lc3NhZ2VzKSkge1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gcGFyc2VkLm1lc3NhZ2VzIGFzIFNlcnZpbmdDaGF0TWVzc2FnZVtdO1xuICAgIC8vIEV2YWx1YXRlZCBlYWdlcmx5LCBub3Qgc2hvcnQtY2lyY3VpdGVkOiBvbmUgdHJhbnNjcmlwdCBjYW4gbmVlZCBib3RoXG4gICAgLy8gcmVhc29uaW5nIGJsb2NrcyBzdHJpcHBlZCBBTkQgYSB0cmFpbGluZyBhc3Npc3RhbnQgcHJlZmlsbCBmb2xkZWQgYmFjay5cbiAgICBjb25zdCBzdHJpcHBlZCA9IHN0cmlwUmVhc29uaW5nRnJvbVNlcnZpbmdNZXNzYWdlcyhtZXNzYWdlcyk7XG4gICAgY29uc3QgcmVwYWlyZWQgPSByZXBhaXJBc3Npc3RhbnRQcmVmaWxsKG1lc3NhZ2VzKTtcbiAgICBjaGFuZ2VkID0gY2hhbmdlZCB8fCBzdHJpcHBlZCB8fCByZXBhaXJlZDtcbiAgfVxuXG4gIHJldHVybiBjaGFuZ2VkID8gSlNPTi5zdHJpbmdpZnkocGFyc2VkKSA6IGJvZHk7XG59XG5cbi8qKiBQcmVwYXJlZCBmZXRjaCBhcmd1bWVudHMgcGx1cyB0aGUgcG9zdC1zYW5pdGl6ZSBib2R5IHVzZWQgZm9yIGRpYWdub3N0aWNzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXdyaXR0ZW5TZXJ2aW5nUmVxdWVzdCB7XG4gIGlucHV0OiBQYXJhbWV0ZXJzPHR5cGVvZiBmZXRjaD5bMF07XG4gIGluaXQ6IFBhcmFtZXRlcnM8dHlwZW9mIGZldGNoPlsxXTtcbiAgYm9keTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlYWQgYW5kIHJld3JpdGUgYSBzZXJ2aW5nIFBPU1Qgd2hldGhlciBpdHMgSlNPTiBib2R5IGxpdmVzIG9uIGBpbml0YCBvciBvblxuICogYSBgUmVxdWVzdGAuIEEgY2hhbmdlZCBSZXF1ZXN0IGlzIHJlYnVpbHQgd2l0aG91dCBzdGFsZSBieXRlIGhlYWRlcnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXdyaXRlU2VydmluZ1JlcXVlc3QoXG4gIGlucHV0OiBQYXJhbWV0ZXJzPHR5cGVvZiBmZXRjaD5bMF0sXG4gIGluaXQ/OiBQYXJhbWV0ZXJzPHR5cGVvZiBmZXRjaD5bMV0sXG4pOiBQcm9taXNlPFJld3JpdHRlblNlcnZpbmdSZXF1ZXN0PiB7XG4gIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdCk7XG4gIGNvbnN0IGJvZHkgPSBhd2FpdCByZXF1ZXN0LmNsb25lKCkudGV4dCgpO1xuICBjb25zdCByZXdyaXR0ZW4gPSByZXdyaXRlU2VydmluZ0JvZHkoYm9keSk7XG4gIGlmIChyZXdyaXR0ZW4gPT09IGJvZHkpIHJldHVybiB7IGlucHV0LCBpbml0LCBib2R5IH07XG5cbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHJlcXVlc3QuaGVhZGVycyk7XG4gIGhlYWRlcnMuZGVsZXRlKFwiY29udGVudC1sZW5ndGhcIik7XG4gIGhlYWRlcnMuZGVsZXRlKFwiY29udGVudC1lbmNvZGluZ1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpbnB1dDogbmV3IFJlcXVlc3QocmVxdWVzdCwgeyBib2R5OiByZXdyaXR0ZW4sIGhlYWRlcnMgfSksXG4gICAgaW5pdDogdW5kZWZpbmVkLFxuICAgIGJvZHk6IHJld3JpdHRlbixcbiAgfTtcbn1cblxuLyoqXG4gKiBBZGQgdGhlIENoYXQgQ29tcGxldGlvbnMgb3B0aW9uIERhdGFicmlja3MtaG9zdGVkIEdQVCBBc3RyYSByZXF1aXJlcyB3aGVuXG4gKiBmdW5jdGlvbiB0b29scyBhcmUgcHJlc2VudC4gQW4gZXhwbGljaXQgY2FsbGVyIHZhbHVlIGFsd2F5cyB3aW5zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlBc3RyYVRvb2xDb21wYXRpYmlsaXR5KGJvZHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiB7XG4gIGlmIChcInJlYXNvbmluZ19lZmZvcnRcIiBpbiBib2R5IHx8ICFBcnJheS5pc0FycmF5KGJvZHkudG9vbHMpIHx8IGJvZHkudG9vbHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IG1vZGVsID0gc3RyaW5nLnRyaW1Ub051bGwoYm9keS5tb2RlbCk7XG4gIGlmICghbW9kZWwpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgdG9rZW5zID0gbmV3IFNldChzdHJpbmcudG9rZW5pemVXaXRoT3B0aW9ucyh7IGxvd2VyQ2FzZTogdHJ1ZSB9LCBtb2RlbCkpO1xuICBpZiAoIXRva2Vucy5oYXMoXCJncHRcIikgfHwgIXRva2Vucy5oYXMoXCJhc3RyYVwiKSkgcmV0dXJuIGZhbHNlO1xuICBib2R5LnJlYXNvbmluZ19lZmZvcnQgPSBcIm5vbmVcIjtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogRHJvcCBleHRlbmRlZC10aGlua2luZyAvIHJlYXNvbmluZyBibG9ja3MgZnJvbSBhIHJlcGxheWVkIHRyYW5zY3JpcHQuXG4gKlxuICogSHlicmlkIENsYXVkZSBlbmRwb2ludHMgKGUuZy4gU29ubmV0IDQuNSspIG1heSBlbWl0IGByZWFzb25pbmdgIGNvbnRlbnRcbiAqIHBhcnRzIG9uIHRoZSBmaXJzdCB0dXJuLiBNYXN0cmEgcGVyc2lzdHMgYW5kIHJlcGxheXMgdGhlbSBvbiB0aGUgbmV4dFxuICogYWdlbnQgc3RlcCwgYnV0IERhdGFicmlja3MtaG9zdGVkIENsYXVkZSByZWplY3RzIHRob3NlIGJsb2NrcyBvblxuICogbXVsdGktdHVybiB0b29sIGNvbnRpbnVhdGlvbnMuIFRoZSBVSSBhbHJlYWR5IGNhcHR1cmVkIHJlYXNvbmluZyBmb3JcbiAqIGRpc3BsYXk7IHN0cmlwcGluZyBoZXJlIGtlZXBzIHByb3ZpZGVyIHJlcGxheSBjb21wYXRpYmxlIHdpdGhvdXRcbiAqIGNoYW5naW5nIHdoYXQgdXNlcnMgc2VlIGluIHRoZSBjaGF0IGJ1YmJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwUmVhc29uaW5nRnJvbVNlcnZpbmdNZXNzYWdlcyhtZXNzYWdlczogU2VydmluZ0NoYXRNZXNzYWdlW10pOiBib29sZWFuIHtcbiAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IG1lc3NhZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgbXNnID0gbWVzc2FnZXNbaV07XG4gICAgaWYgKCFtc2cpIGNvbnRpbnVlO1xuICAgIGlmIChtc2cucm9sZSA9PT0gXCJyZWFzb25pbmdcIikge1xuICAgICAgbWVzc2FnZXMuc3BsaWNlKGksIDEpO1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKG1zZy5yZWFzb25pbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVsZXRlIG1zZy5yZWFzb25pbmc7XG4gICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG1zZy5yZWFzb25pbmdfY29udGVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgbXNnLnJlYXNvbmluZ19jb250ZW50O1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHBhcnRzID0gb3BlbmFpQ2hhdC5jaGF0Q29udGVudFBhcnRzKG1zZy5jb250ZW50KTtcbiAgICBpZiAoIXBhcnRzKSBjb250aW51ZTtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IHBhcnRzLmZpbHRlcigocGFydCkgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IHBhcnQ/LnR5cGU7XG4gICAgICBpZiAodHlwZW9mIHR5cGUgPT09IFwic3RyaW5nXCIgJiYgUkVBU09OSU5HX1BBUlRfVFlQRVMuaGFzKHR5cGUpKSB7XG4gICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICBpZiAoZmlsdGVyZWQubGVuZ3RoICE9PSBwYXJ0cy5sZW5ndGgpIHtcbiAgICAgIG1zZy5jb250ZW50ID0gZmlsdGVyZWQ7XG4gICAgfVxuICAgIGNvbnN0IGhhc1Rvb2xDYWxscyA9IEFycmF5LmlzQXJyYXkobXNnLnRvb2xfY2FsbHMpICYmIG1zZy50b29sX2NhbGxzLmxlbmd0aCA+IDA7XG4gICAgaWYgKG1zZy5yb2xlID09PSBcImFzc2lzdGFudFwiICYmICFoYXNUb29sQ2FsbHMgJiYgaXNFbXB0eVNlcnZpbmdDb250ZW50KG1zZy5jb250ZW50KSkge1xuICAgICAgbWVzc2FnZXMuc3BsaWNlKGksIDEpO1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBjaGFuZ2VkO1xufVxuXG4vKipcbiAqIFJlcGFpciBhIE1hc3RyYS9BSSBTREsgbWVzc2FnZSByZXBsYXkgdGhhdCBEYXRhYnJpY2tzLWhvc3RlZCBDbGF1ZGVcbiAqIHJlamVjdHMgd2l0aCBgXCJUaGlzIG1vZGVsIGRvZXMgbm90IHN1cHBvcnQgYXNzaXN0YW50IG1lc3NhZ2VcbiAqIHByZWZpbGwuIFRoZSBjb252ZXJzYXRpb24gbXVzdCBlbmQgd2l0aCBhIHVzZXIgbWVzc2FnZS5cImAuXG4gKlxuICogVGhlIGJ1ZyBwYXR0ZXJuOiB3aGVuIGFuIGFzc2lzdGFudCB0dXJuIHN0cmVhbXMgdGV4dCAqYW5kKiBhXG4gKiBgdG9vbF9jYWxsYCwgdGhlIEFJIFNESyBwZXJzaXN0cyB0aGVtIGFzIHR3byBzZXBhcmF0ZSBhc3Npc3RhbnRcbiAqIGVudHJpZXMgKHRleHQtb25seSBhbmQgdG9vbC1jYWxsLW9ubHkpLiBPbiB0aGUgbmV4dCBhZ2VudCBzdGVwIHRoZVxuICogdG9vbC1jYWxsIGVudHJ5IGlzIHJlcGxheWVkICpiZWZvcmUqIHRoZSB0b29sIHJlc3VsdCBhbmQgdGhlXG4gKiB0ZXh0IGVudHJ5IGlzIHJlcGxheWVkICphZnRlciogaXQsIHNvIHRoZSBjb252ZXJzYXRpb24gZW5kcyB3aXRoIGFcbiAqIHRyYWlsaW5nIGFzc2lzdGFudCB0ZXh0IG1lc3NhZ2UuIEFudGhyb3BpYyBpbnRlcnByZXRzIHRoYXQgYXMgYVxuICogcHJlZmlsbCByZXF1ZXN0IGFuZCByZWplY3RzIGl0IG9uIERhdGFicmlja3MgKHRoZSB1cHN0cmVhbSBCZWRyb2NrXG4gKiByb3V0ZSBkaXNhbGxvd3MgcHJlZmlsbCkuXG4gKlxuICogRml4OiB3aGVuIHRoZSBsYXN0IG1lc3NhZ2UgaXMgYW4gYXNzaXN0YW50IHRleHQgd2l0aCBubyBgdG9vbF9jYWxsc2BcbiAqIGFuZCB0aGUgY2hhaW4gaW1tZWRpYXRlbHkgYmVmb3JlIGl0IGlzIGBhc3Npc3RhbnQodG9vbF9jYWxscz0uLi4pYFxuICogZm9sbG93ZWQgb25seSBieSBgdG9vbCguLi4pYCByZXN1bHRzLCBmb2xkIHRoZSB0cmFpbGluZyB0ZXh0IGJhY2tcbiAqIGludG8gdGhlIGBjb250ZW50YCBvZiB0aGF0IG9wZW5pbmcgYXNzaXN0YW50IGFuZCBkcm9wIHRoZSBkdXBsaWNhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBhaXJBc3Npc3RhbnRQcmVmaWxsKG1lc3NhZ2VzOiBTZXJ2aW5nQ2hhdE1lc3NhZ2VbXSk6IGJvb2xlYW4ge1xuICBpZiAobWVzc2FnZXMubGVuZ3RoIDwgMikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBsYXN0ID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV07XG4gIGlmICghbGFzdCB8fCBsYXN0LnJvbGUgIT09IFwiYXNzaXN0YW50XCIgfHwgKGxhc3QudG9vbF9jYWxscyAmJiBsYXN0LnRvb2xfY2FsbHMubGVuZ3RoID4gMCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgaSA9IG1lc3NhZ2VzLmxlbmd0aCAtIDI7XG4gIHdoaWxlIChpID49IDAgJiYgbWVzc2FnZXNbaV0/LnJvbGUgPT09IFwidG9vbFwiKSBpLS07XG4gIGlmIChpIDwgMCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBvcGVuZXIgPSBtZXNzYWdlc1tpXTtcbiAgaWYgKFxuICAgICFvcGVuZXIgfHxcbiAgICBvcGVuZXIucm9sZSAhPT0gXCJhc3Npc3RhbnRcIiB8fFxuICAgICFvcGVuZXIudG9vbF9jYWxscyB8fFxuICAgIG9wZW5lci50b29sX2NhbGxzLmxlbmd0aCA9PT0gMFxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBtZXJnZWQgPSBbXG4gICAgc3RyaW5nLnRyaW1Ub051bGwodGV4dEZyb21TZXJ2aW5nQ29udGVudChvcGVuZXIuY29udGVudCkpLFxuICAgIHN0cmluZy50cmltVG9OdWxsKHRleHRGcm9tU2VydmluZ0NvbnRlbnQobGFzdC5jb250ZW50KSksXG4gIF1cbiAgICAuZmlsdGVyKChzKTogcyBpcyBzdHJpbmcgPT4gcyAhPT0gbnVsbClcbiAgICAuam9pbihcIlxcblxcblwiKTtcbiAgb3BlbmVyLmNvbnRlbnQgPSBtZXJnZWQ7XG4gIG1lc3NhZ2VzLnBvcCgpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBGbGF0dGVuIGNvbnRlbnQgdG8gdGhlIHByb3NlIGEgaHVtYW4gd291bGQgcmVhZDogdGV4dCBwYXJ0cyBvbmx5LCBzZXBhcmF0ZWRcbiAqIGJ5IGJsYW5rIGxpbmVzLCBzaW5jZSB0aGUgcmVzdWx0IGlzIHNwbGljZWQgaW50byBhbm90aGVyIHR1cm4ncyBtZXNzYWdlIGJvZHkuXG4gKi9cbmZ1bmN0aW9uIHRleHRGcm9tU2VydmluZ0NvbnRlbnQoY29udGVudDogU2VydmluZ0NoYXRNZXNzYWdlW1wiY29udGVudFwiXSk6IHN0cmluZyB7XG4gIHJldHVybiBvcGVuYWlDaGF0LmNoYXRDb250ZW50VG9UZXh0KGNvbnRlbnQsIHsgc2VwYXJhdG9yOiBcIlxcblxcblwiLCB0eXBlczogW1widGV4dFwiXSB9KTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGEgdHVybiBjYXJyaWVzIG5vdGhpbmcgd29ydGggcmVwbGF5aW5nLiBEZWxpYmVyYXRlbHkgc3RyaWN0ZXIgdGhhblxuICogXCJoYXMgbm8gdGV4dFwiOiBhIHBhcnQgb2YgYW55IG90aGVyIHR5cGUgKGFuIGltYWdlLCBhIGNhY2hlIG1hcmtlcikgY291bnRzIGFzXG4gKiBjb250ZW50LCBzbyBhIG1lc3NhZ2UgaG9sZGluZyBvbmUgaXMga2VwdCBldmVuIHRob3VnaCBpdCBoYXMgbm8gcHJvc2UuXG4gKi9cbmZ1bmN0aW9uIGlzRW1wdHlTZXJ2aW5nQ29udGVudChjb250ZW50OiBTZXJ2aW5nQ2hhdE1lc3NhZ2VbXCJjb250ZW50XCJdKTogYm9vbGVhbiB7XG4gIGlmIChjb250ZW50ID09PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuICBpZiAodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHJldHVybiBjb250ZW50LnRyaW0oKS5sZW5ndGggPT09IDA7XG4gIGNvbnN0IHBhcnRzID0gb3BlbmFpQ2hhdC5jaGF0Q29udGVudFBhcnRzKGNvbnRlbnQpO1xuICBpZiAoIXBhcnRzKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIHBhcnRzLmV2ZXJ5KChwYXJ0KSA9PiB7XG4gICAgaWYgKHBhcnQ/LnR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHBhcnQudGV4dCAhPT0gXCJzdHJpbmdcIiB8fCBwYXJ0LnRleHQudHJpbSgpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbn1cblxuLyoqXG4gKiBQYXJzZSwgc2FuaXRpemUsIGFuZCByZS1zZXJpYWxpemUgYSBgL3NlcnZpbmctZW5kcG9pbnRzLy4uLmAgbm9uLXN0cmVhbWluZ1xuICogSlNPTiBSRVNQT05TRSBib2R5LiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzdHJpbmcgdmVyYmF0aW0gd2hlbiB0aGUgYm9keSBpc1xuICogbm90IEpTT04gb3Igbm8gcmV3cml0ZSB3YXMgbmVlZGVkLCBtaXJyb3JpbmdcbiAqIHtAbGluayByZXdyaXRlU2VydmluZ0JvZHl9IG9uIHRoZSByZXF1ZXN0IHNpZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlU2VydmluZ1Jlc3BvbnNlQm9keShib2R5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJzZWQgPSBqc29uLnBhcnNlUmVjb3JkKGJvZHkpO1xuICBpZiAoIXBhcnNlZCkgcmV0dXJuIGJvZHk7XG4gIHJldHVybiBmbGF0dGVuQ2hvaWNlTWVzc2FnZUNvbnRlbnQocGFyc2VkKSA/IEpTT04uc3RyaW5naWZ5KHBhcnNlZCkgOiBib2R5O1xufVxuXG4vKipcbiAqIFJlcGFpciBhcnJheS12YWx1ZWQgYGNob2ljZXNbXS5kZWx0YS5jb250ZW50YCBpbnNpZGUgYW4gT3BlbkFJIFNTRSBzdHJlYW1cbiAqIHdpdGhvdXQgYnVmZmVyaW5nIHRoZSByZXNwb25zZS4gVGhlIGRlY29kZXIgcmV0YWlucyBwYXJ0aWFsIGxpbmVzIGFjcm9zc1xuICogYXJiaXRyYXJ5IG5ldHdvcmsgY2h1bmsgYm91bmRhcmllczsgZWFjaCBjb21wbGV0ZSBgZGF0YTpgIGxpbmUgaXMgcGFyc2VkIGFuZFxuICogcmUtZW5jb2RlZCBvbmx5IHdoZW4gaXRzIGNvbnRlbnQgbmVlZHMgbm9ybWFsaXphdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVTZXJ2aW5nUmVzcG9uc2VTdHJlYW0oXG4gIGJvZHk6IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+LFxuKTogUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4ge1xuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgbGV0IGJ1ZmZlciA9IFwiXCI7XG5cbiAgcmV0dXJuIGJvZHkucGlwZVRocm91Z2goXG4gICAgbmV3IFRyYW5zZm9ybVN0cmVhbTxVaW50OEFycmF5LCBVaW50OEFycmF5Pih7XG4gICAgICB0cmFuc2Zvcm0oY2h1bmssIGNvbnRyb2xsZXIpIHtcbiAgICAgICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKGNodW5rLCB7IHN0cmVhbTogdHJ1ZSB9KTtcbiAgICAgICAgbGV0IG5ld2xpbmUgPSBidWZmZXIuaW5kZXhPZihcIlxcblwiKTtcbiAgICAgICAgd2hpbGUgKG5ld2xpbmUgPj0gMCkge1xuICAgICAgICAgIGNvbnN0IGxpbmUgPSBidWZmZXIuc2xpY2UoMCwgbmV3bGluZSArIDEpO1xuICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zbGljZShuZXdsaW5lICsgMSk7XG4gICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGVuY29kZXIuZW5jb2RlKHJld3JpdGVTZXJ2aW5nUmVzcG9uc2VTdHJlYW1MaW5lKGxpbmUpKSk7XG4gICAgICAgICAgbmV3bGluZSA9IGJ1ZmZlci5pbmRleE9mKFwiXFxuXCIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZmx1c2goY29udHJvbGxlcikge1xuICAgICAgICBidWZmZXIgKz0gZGVjb2Rlci5kZWNvZGUoKTtcbiAgICAgICAgaWYgKGJ1ZmZlcikgY29udHJvbGxlci5lbnF1ZXVlKGVuY29kZXIuZW5jb2RlKHJld3JpdGVTZXJ2aW5nUmVzcG9uc2VTdHJlYW1MaW5lKGJ1ZmZlcikpKTtcbiAgICAgIH0sXG4gICAgfSksXG4gICk7XG59XG5cbi8qKiBOb3JtYWxpemUgb25lIFNTRSBsaW5lIHdoaWxlIHByZXNlcnZpbmcgaXRzIGBkYXRhOmAgc3BhY2luZyBhbmQgbGluZSBlbmRpbmcuICovXG5mdW5jdGlvbiByZXdyaXRlU2VydmluZ1Jlc3BvbnNlU3RyZWFtTGluZShsaW5lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBsaW5lRW5kaW5nID0gbGluZS5lbmRzV2l0aChcIlxcclxcblwiKSA/IFwiXFxyXFxuXCIgOiBsaW5lLmVuZHNXaXRoKFwiXFxuXCIpID8gXCJcXG5cIiA6IFwiXCI7XG4gIGNvbnN0IGNvbnRlbnQgPSBsaW5lRW5kaW5nID8gbGluZS5zbGljZSgwLCAtbGluZUVuZGluZy5sZW5ndGgpIDogbGluZTtcbiAgY29uc3QgbWF0Y2ggPSAvXihkYXRhOlxccyopKC4qKSQvLmV4ZWMoY29udGVudCk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMl0gPT09IFwiW0RPTkVdXCIpIHJldHVybiBsaW5lO1xuXG4gIGNvbnN0IHBhcnNlZCA9IGpzb24ucGFyc2VSZWNvcmQobWF0Y2hbMl0pO1xuICBpZiAoIXBhcnNlZCB8fCAhZmxhdHRlbkNob2ljZURlbHRhQ29udGVudChwYXJzZWQpKSByZXR1cm4gbGluZTtcbiAgcmV0dXJuIGAke21hdGNoWzFdfSR7SlNPTi5zdHJpbmdpZnkocGFyc2VkKX0ke2xpbmVFbmRpbmd9YDtcbn1cblxuLyoqXG4gKiBDb2xsYXBzZSBhIHN0cnVjdHVyZWQgYGNob2ljZXNbXS5tZXNzYWdlLmNvbnRlbnRgIGFycmF5IHRvIHRoZSBwbGFpbiBzdHJpbmdcbiAqIHRoZSBPcGVuQUkgQ2hhdCBDb21wbGV0aW9ucyBjb250cmFjdCBzcGVjaWZpZXMuXG4gKlxuICogRGF0YWJyaWNrcy1ob3N0ZWQgR2VtaW5pIGFuc3dlcnMgYSBub24tc3RyZWFtaW5nIGAvY2hhdC9jb21wbGV0aW9uc2AgY2FsbFxuICogd2l0aCB0aGUgR2VtaW5pLW5hdGl2ZSBwYXJ0cyBzaGFwZTpcbiAqXG4gKiBgYGBqc29uXG4gKiBcImNvbnRlbnRcIjogW3sgXCJ0eXBlXCI6IFwidGV4dFwiLCBcInRleHRcIjogXCIuLi5cIiwgXCJ0aG91Z2h0U2lnbmF0dXJlXCI6IFwiLi4uXCIgfV1cbiAqIGBgYFxuICpcbiAqIGBAYWktc2RrL29wZW5haS1jb21wYXRpYmxlYCB2YWxpZGF0ZXMgdGhlIHJlc3BvbnNlIGFnYWluc3QgdGhlIE9wZW5BSVxuICogc2NoZW1hLCB3aGVyZSBgY29udGVudGAgaXMgYSBudWxsYWJsZSBzdHJpbmcsIHNvIGl0IHRocm93c1xuICogYFR5cGUgdmFsaWRhdGlvbiBmYWlsZWQ6IC4uLiBleHBlY3RlZCBzdHJpbmcsIHJlY2VpdmVkIGFycmF5YCBhbmQgdGhlIHdob2xlXG4gKiBjYWxsIGZhaWxzIChgQUlfQVBJQ2FsbEVycm9yOiBJbnZhbGlkIEpTT04gcmVzcG9uc2VgIG9uIGFuIEhUVFAgMjAwKS4gTWFzdHJhXG4gKiB1c2VzIGBkb0dlbmVyYXRlYCBmb3IgaXRzIHNpZGUgY2FsbHMsIHNvIHRoZSB2aXNpYmxlIHN5bXB0b20gaXNcbiAqIGBFcnJvciBnZW5lcmF0aW5nIHRpdGxlYCAtIGV2ZXJ5IHRocmVhZCBrZWVwcyBpdHMgcGxhY2Vob2xkZXIgbmFtZS5cbiAqXG4gKiBGbGF0dGVuaW5nIG9uIHRoZSB3aXJlIGtlZXBzIHRoZSByZXBhaXIgaW4gb25lIHBsYWNlOiBuZWl0aGVyIHRoZSBhZ2VudCdzXG4gKiBzdG9yZWQgdHJhbnNjcmlwdCBub3IgdGhlIFVJIGhhcyB0byBrbm93IHRoZSBwcm92aWRlciBlbWl0dGVkIHBhcnRzLiBBbnlcbiAqIG5vbi10ZXh0IHBhcnQgKGEgcmVhc29uaW5nIGJsb2NrLCBgdGhvdWdodFNpZ25hdHVyZWAtb25seSBlbnRyeSwgb3IgaW5saW5lXG4gKiBpbWFnZSkgY29udHJpYnV0ZXMgbm90aGluZywgbWF0Y2hpbmcge0BsaW5rIG9wZW5haUNoYXQuY2hhdENvbnRlbnRUb1RleHR9LFxuICogYW5kIGFuIGFsbC1wYXJ0cy1lbXB0eSBtZXNzYWdlIGZsYXR0ZW5zIHRvIGBcIlwiYCByYXRoZXIgdGhhbiBiZWluZyBkcm9wcGVkLCBzb1xuICogYGZpbmlzaF9yZWFzb25gIGFuZCBgdXNhZ2VgIHN0aWxsIHJvdW5kLXRyaXAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuQ2hvaWNlTWVzc2FnZUNvbnRlbnQocGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuIHtcbiAgcmV0dXJuIGZsYXR0ZW5DaG9pY2VDb250ZW50KHBheWxvYWQsIFwibWVzc2FnZVwiKTtcbn1cblxuLyoqXG4gKiBDb2xsYXBzZSBzdHJ1Y3R1cmVkIHN0cmVhbWluZyBgY2hvaWNlc1tdLmRlbHRhLmNvbnRlbnRgIGFycmF5cyB0byBzdHJpbmdzLlxuICogQ2xhdWRlIHJlYXNvbmluZy1vbmx5IGNodW5rcyBiZWNvbWUgYW4gZW1wdHkgY29udGVudCBkZWx0YSB3aGlsZSB0ZXh0IHBhcnRzXG4gKiBhcmUgY29uY2F0ZW5hdGVkIGluIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbkNob2ljZURlbHRhQ29udGVudChwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IGJvb2xlYW4ge1xuICByZXR1cm4gZmxhdHRlbkNob2ljZUNvbnRlbnQocGF5bG9hZCwgXCJkZWx0YVwiKTtcbn1cblxuLyoqIFNoYXJlZCBjaG9pY2Ugd2Fsa2VyIGZvciBidWZmZXJlZCBgbWVzc2FnZWAgYW5kIHN0cmVhbWluZyBgZGVsdGFgIHBheWxvYWRzLiAqL1xuZnVuY3Rpb24gZmxhdHRlbkNob2ljZUNvbnRlbnQoXG4gIHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBmaWVsZDogXCJtZXNzYWdlXCIgfCBcImRlbHRhXCIsXG4pOiBib29sZWFuIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHBheWxvYWQuY2hvaWNlcykpIHJldHVybiBmYWxzZTtcbiAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgZm9yIChjb25zdCBjaG9pY2Ugb2YgcGF5bG9hZC5jaG9pY2VzKSB7XG4gICAgaWYgKCFjaG9pY2UgfHwgdHlwZW9mIGNob2ljZSAhPT0gXCJvYmplY3RcIikgY29udGludWU7XG4gICAgY29uc3QgY29udGFpbmVyID0gKGNob2ljZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbZmllbGRdO1xuICAgIGlmICghY29udGFpbmVyIHx8IHR5cGVvZiBjb250YWluZXIgIT09IFwib2JqZWN0XCIpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHRhcmdldCA9IGNvbnRhaW5lciBhcyB7IGNvbnRlbnQ/OiB1bmtub3duIH07XG4gICAgY29uc3QgcGFydHMgPSBvcGVuYWlDaGF0LmNoYXRDb250ZW50UGFydHModGFyZ2V0LmNvbnRlbnQpO1xuICAgIGlmICghcGFydHMpIGNvbnRpbnVlO1xuICAgIHRhcmdldC5jb250ZW50ID0gb3BlbmFpQ2hhdC5jaGF0Q29udGVudFRvVGV4dChwYXJ0cywgeyB0eXBlczogW1widGV4dFwiXSB9KTtcbiAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gY2hhbmdlZDtcbn1cbiJdfQ==
|
package/lib/src/workspaces.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Mastra workspace factory for Databricks Apps.
|
|
3
3
|
*
|
|
4
|
-
* Builds a per-request {@link Workspace}
|
|
5
|
-
* {@link CompositeFilesystem} over the NAMED skill folders
|
|
6
|
-
* request. A skill folder maps a name to a location plus its
|
|
7
|
-
* writable policy: a Databricks path mounted through the OBO client
|
|
8
|
-
* {@link MASTRA_USER_KEY}, or any {@link WorkspaceFilesystem} a consuming
|
|
4
|
+
* Builds a per-request {@link Workspace} with Databricks Sandbox command
|
|
5
|
+
* execution plus a {@link CompositeFilesystem} over the NAMED skill folders
|
|
6
|
+
* resolved for that request. A skill folder maps a name to a location plus its
|
|
7
|
+
* readable / writable policy: a Databricks path mounted through the OBO client
|
|
8
|
+
* on {@link MASTRA_USER_KEY}, or any {@link WorkspaceFilesystem} a consuming
|
|
9
9
|
* library already owns. {@link DEFAULT_SKILL_FOLDERS} supplies the Assistant
|
|
10
10
|
* trees, and `skillFolders` merges over it - same name overrides, `false`
|
|
11
11
|
* disables, a new name adds. Optional mount resolvers contribute further
|
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
* @module
|
|
19
19
|
*/
|
|
20
20
|
import type { RequestContext } from "@mastra/core/request-context";
|
|
21
|
-
import { Workspace, type SkillsResolver, type WorkspaceFilesystem } from "@mastra/core/workspace";
|
|
21
|
+
import { Workspace, type SkillsResolver, type WorkspaceFilesystem, type WorkspaceSandbox, type WorkspaceSandboxResolver } from "@mastra/core/workspace";
|
|
22
|
+
import { type DatabricksWorkspaceSandboxOptions } from "./sandbox.ts";
|
|
22
23
|
/** Per-request context for mount and skill-folder resolvers. */
|
|
23
24
|
export interface WorkspaceMountContext {
|
|
24
25
|
requestContext?: RequestContext;
|
|
@@ -64,6 +65,12 @@ export interface WorkspaceMountContribution {
|
|
|
64
65
|
export type WorkspaceMountResolver = (context: WorkspaceMountContext) => WorkspaceMountContribution | Promise<WorkspaceMountContribution>;
|
|
65
66
|
/** Names carried by {@link DEFAULT_SKILL_FOLDERS}. */
|
|
66
67
|
export type DefaultSkillFolderName = "workspace-team" | "workspace-team-app";
|
|
68
|
+
/**
|
|
69
|
+
* Sandbox selection for {@link createWorkspace}. Databricks is the default;
|
|
70
|
+
* `false` disables command execution, and a Mastra provider or resolver is an
|
|
71
|
+
* explicit replacement.
|
|
72
|
+
*/
|
|
73
|
+
export type WorkspaceSandboxSelection = false | "databricks" | "monty" | DatabricksWorkspaceSandboxOptions | WorkspaceSandbox | WorkspaceSandboxResolver;
|
|
67
74
|
/** Options for {@link createWorkspace}. */
|
|
68
75
|
export interface CreateWorkspaceOptions {
|
|
69
76
|
/** Workspace id; derived from `name` or `"workspace"` when omitted. */
|
|
@@ -89,6 +96,12 @@ export interface CreateWorkspaceOptions {
|
|
|
89
96
|
checkSkillFileMtime?: boolean;
|
|
90
97
|
/** Enable BM25 keyword search over indexed workspace content. */
|
|
91
98
|
bm25?: boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Command sandbox. Defaults to Databricks Sandbox. Pass `false` to disable
|
|
101
|
+
* command execution, or an explicit Mastra sandbox/provider resolver to
|
|
102
|
+
* replace Databricks for this workspace.
|
|
103
|
+
*/
|
|
104
|
+
sandbox?: WorkspaceSandboxSelection;
|
|
92
105
|
/**
|
|
93
106
|
* Extra LOCAL skill scan paths added to every request's skill discovery.
|
|
94
107
|
* Used by the plugin to surface remote skills provisioned to a local temp
|
package/lib/src/workspaces.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Mastra workspace factory for Databricks Apps.
|
|
3
3
|
*
|
|
4
|
-
* Builds a per-request {@link Workspace}
|
|
5
|
-
* {@link CompositeFilesystem} over the NAMED skill folders
|
|
6
|
-
* request. A skill folder maps a name to a location plus its
|
|
7
|
-
* writable policy: a Databricks path mounted through the OBO client
|
|
8
|
-
* {@link MASTRA_USER_KEY}, or any {@link WorkspaceFilesystem} a consuming
|
|
4
|
+
* Builds a per-request {@link Workspace} with Databricks Sandbox command
|
|
5
|
+
* execution plus a {@link CompositeFilesystem} over the NAMED skill folders
|
|
6
|
+
* resolved for that request. A skill folder maps a name to a location plus its
|
|
7
|
+
* readable / writable policy: a Databricks path mounted through the OBO client
|
|
8
|
+
* on {@link MASTRA_USER_KEY}, or any {@link WorkspaceFilesystem} a consuming
|
|
9
9
|
* library already owns. {@link DEFAULT_SKILL_FOLDERS} supplies the Assistant
|
|
10
10
|
* trees, and `skillFolders` merges over it - same name overrides, `false`
|
|
11
11
|
* disables, a new name adds. Optional mount resolvers contribute further
|
|
@@ -17,11 +17,15 @@
|
|
|
17
17
|
*
|
|
18
18
|
* @module
|
|
19
19
|
*/
|
|
20
|
+
import { createHash } from "node:crypto";
|
|
21
|
+
import { ConfigurationError, createWorkspaceClient } from "@databricks/appkit";
|
|
20
22
|
import { DatabricksFileSystem, workspace as databricksWorkspace } from "@dbx-tools/databricks";
|
|
21
|
-
import { error, log, string, token } from "@dbx-tools/shared-core";
|
|
23
|
+
import { error, log, object, string, token } from "@dbx-tools/shared-core";
|
|
22
24
|
import { CompositeFilesystem, Workspace, } from "@mastra/core/workspace";
|
|
23
25
|
import { MASTRA_SCOPES_KEY, MASTRA_USER_EMAIL_KEY, MASTRA_USER_KEY } from "./config.js";
|
|
24
26
|
import { scratchFilesystem, filesystems } from "./filesystems.js";
|
|
27
|
+
import { MontySandbox } from "./monty-sandbox.js";
|
|
28
|
+
import { DatabricksSandbox } from "./sandbox.js";
|
|
25
29
|
import { ASSISTANT_SHARED_SKILLS_PATH, userAssistantSkillsPath } from "./skill-paths.js";
|
|
26
30
|
/* ------------------------------ constants ------------------------------ */
|
|
27
31
|
/** OAuth scopes that gate Databricks workspace file mounts. */
|
|
@@ -96,6 +100,7 @@ export function createWorkspace(options = {}) {
|
|
|
96
100
|
: undefined);
|
|
97
101
|
const checkSkillFileMtime = options.checkSkillFileMtime ?? folderNames.length > 0;
|
|
98
102
|
const bm25 = options.bm25 !== false;
|
|
103
|
+
const sandbox = resolveWorkspaceSandbox(options.sandbox, id, name);
|
|
99
104
|
logger.debug("workspace:create", {
|
|
100
105
|
id,
|
|
101
106
|
name,
|
|
@@ -106,6 +111,7 @@ export function createWorkspace(options = {}) {
|
|
|
106
111
|
checkSkillFileMtime,
|
|
107
112
|
bm25,
|
|
108
113
|
extraSkillPaths: extraSkillPaths.length,
|
|
114
|
+
sandbox: sandbox ? sandboxName(options.sandbox) : "disabled",
|
|
109
115
|
});
|
|
110
116
|
return new Workspace({
|
|
111
117
|
id,
|
|
@@ -117,6 +123,12 @@ export function createWorkspace(options = {}) {
|
|
|
117
123
|
checkSkillFileMtime,
|
|
118
124
|
}
|
|
119
125
|
: {}),
|
|
126
|
+
...(sandbox
|
|
127
|
+
? {
|
|
128
|
+
sandbox,
|
|
129
|
+
instructions: { dynamicSandbox: "resolve" },
|
|
130
|
+
}
|
|
131
|
+
: {}),
|
|
120
132
|
bm25,
|
|
121
133
|
});
|
|
122
134
|
}
|
|
@@ -139,6 +151,57 @@ export function resolveSkillFolders(options = {}) {
|
|
|
139
151
|
return merged;
|
|
140
152
|
}
|
|
141
153
|
/* ---------------------------- private helpers ---------------------------- */
|
|
154
|
+
function resolveWorkspaceSandbox(selection, workspaceId, workspaceName) {
|
|
155
|
+
const configured = selection ?? "databricks";
|
|
156
|
+
if (configured === false)
|
|
157
|
+
return undefined;
|
|
158
|
+
if (configured === "monty")
|
|
159
|
+
return new MontySandbox();
|
|
160
|
+
if (typeof configured === "function" || isSandbox(configured))
|
|
161
|
+
return configured;
|
|
162
|
+
const options = configured === "databricks" ? { provider: "databricks" } : configured;
|
|
163
|
+
return ({ requestContext }) => {
|
|
164
|
+
const user = requestContext.get(MASTRA_USER_KEY);
|
|
165
|
+
if (!user) {
|
|
166
|
+
throw ConfigurationError.resourceNotFound("Databricks sandbox user context", "Invoke command tools from an agent turn served by the Mastra plugin.");
|
|
167
|
+
}
|
|
168
|
+
const configuredId = typeof options.sandboxId === "function"
|
|
169
|
+
? options.sandboxId({ requestContext })
|
|
170
|
+
: options.sandboxId;
|
|
171
|
+
const sandboxId = configuredId ?? defaultSandboxId(workspaceId, user.id);
|
|
172
|
+
const client = typeof options.client === "function"
|
|
173
|
+
? options.client({ requestContext })
|
|
174
|
+
: (options.client ?? createWorkspaceClient());
|
|
175
|
+
const { provider: _provider, sandboxId: _sandboxId, client: _client, ...sandboxOptions } = options;
|
|
176
|
+
return new DatabricksSandbox({
|
|
177
|
+
...sandboxOptions,
|
|
178
|
+
client,
|
|
179
|
+
sandboxId,
|
|
180
|
+
displayName: options.displayName ?? `Mastra ${workspaceName}`,
|
|
181
|
+
});
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
function defaultSandboxId(workspaceId, userId) {
|
|
185
|
+
const digest = createHash("sha256")
|
|
186
|
+
.update(object.toStableKey({ workspaceId, userId }))
|
|
187
|
+
.digest("hex")
|
|
188
|
+
.slice(0, 32);
|
|
189
|
+
return `mastra-${digest}`;
|
|
190
|
+
}
|
|
191
|
+
function isSandbox(value) {
|
|
192
|
+
return Boolean(value && typeof value === "object" && "id" in value && "provider" in value && "status" in value);
|
|
193
|
+
}
|
|
194
|
+
function sandboxName(selection) {
|
|
195
|
+
if (selection === undefined || selection === "databricks")
|
|
196
|
+
return "databricks";
|
|
197
|
+
if (selection === "monty")
|
|
198
|
+
return "monty";
|
|
199
|
+
if (selection === false)
|
|
200
|
+
return "disabled";
|
|
201
|
+
if (typeof selection === "function")
|
|
202
|
+
return "resolver";
|
|
203
|
+
return isSandbox(selection) ? selection.provider : (selection.provider ?? "databricks");
|
|
204
|
+
}
|
|
142
205
|
/**
|
|
143
206
|
* Return whether the request token carries a scope that allows workspace
|
|
144
207
|
* file API access (`workspace` or `all-apis` on {@link MASTRA_SCOPES_KEY}).
|
|
@@ -337,4 +400,4 @@ function buildWorkspaceSkillsResolver(resolvers, extraSkillPaths = []) {
|
|
|
337
400
|
return merged;
|
|
338
401
|
};
|
|
339
402
|
}
|
|
340
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3Jrc3BhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFHSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxJQUFJLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0YsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRW5FLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsU0FBUyxHQUlWLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBYSxNQUFNLGFBQWEsQ0FBQztBQUNuRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFekYsNkVBQTZFO0FBRTdFLCtEQUErRDtBQUMvRCxNQUFNLHFCQUFxQixHQUFHLENBQUMsV0FBVyxFQUFFLHFCQUFxQixFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBRXhGLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQTZGL0MsOEVBQThFO0FBRTlFOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQWlFO0lBQ2pHLGdCQUFnQixFQUFFO1FBQ2hCLElBQUksRUFBRSw0QkFBNEI7UUFDbEMsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsS0FBSztLQUNoQjtJQUNELG9CQUFvQixFQUFFO1FBQ3BCLElBQUksRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRTtZQUMzQixNQUFNLEtBQUssR0FBRyxr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LEVBQUU7UUFDdEMsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sNEJBQTRCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlFLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDO1FBQzNELE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNqRSxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNYXN0cmEgd29ya3NwYWNlIGZhY3RvcnkgZm9yIERhdGFicmlja3MgQXBwcy5cbiAqXG4gKiBCdWlsZHMgYSBwZXItcmVxdWVzdCB7QGxpbmsgV29ya3NwYWNlfSB3aG9zZSBmaWxlc3lzdGVtIGlzIGFcbiAqIHtAbGluayBDb21wb3NpdGVGaWxlc3lzdGVtfSBvdmVyIHRoZSBOQU1FRCBza2lsbCBmb2xkZXJzIHJlc29sdmVkIGZvciB0aGF0XG4gKiByZXF1ZXN0LiBBIHNraWxsIGZvbGRlciBtYXBzIGEgbmFtZSB0byBhIGxvY2F0aW9uIHBsdXMgaXRzIHJlYWRhYmxlIC9cbiAqIHdyaXRhYmxlIHBvbGljeTogYSBEYXRhYnJpY2tzIHBhdGggbW91bnRlZCB0aHJvdWdoIHRoZSBPQk8gY2xpZW50IG9uXG4gKiB7QGxpbmsgTUFTVFJBX1VTRVJfS0VZfSwgb3IgYW55IHtAbGluayBXb3Jrc3BhY2VGaWxlc3lzdGVtfSBhIGNvbnN1bWluZ1xuICogbGlicmFyeSBhbHJlYWR5IG93bnMuIHtAbGluayBERUZBVUxUX1NLSUxMX0ZPTERFUlN9IHN1cHBsaWVzIHRoZSBBc3Npc3RhbnRcbiAqIHRyZWVzLCBhbmQgYHNraWxsRm9sZGVyc2AgbWVyZ2VzIG92ZXIgaXQgLSBzYW1lIG5hbWUgb3ZlcnJpZGVzLCBgZmFsc2VgXG4gKiBkaXNhYmxlcywgYSBuZXcgbmFtZSBhZGRzLiBPcHRpb25hbCBtb3VudCByZXNvbHZlcnMgY29udHJpYnV0ZSBmdXJ0aGVyXG4gKiBmaWxlc3lzdGVtcyBhbmQgc2tpbGwgc2NhbiByb290cyBvbiB0b3AuXG4gKlxuICogRGF0YWJyaWNrcyBtb3VudHMgdXNlIGBAZGJ4LXRvb2xzL2RhdGFicmlja3NgIHtAbGluayBEYXRhYnJpY2tzRmlsZVN5c3RlbX1cbiAqIHdyYXBwZWQgYnkge0BsaW5rIGZpbGVzeXN0ZW1zfTsgbWlzc2luZyByb290cyBmYWxsIGJhY2sgdG9cbiAqIHtAbGluayBzY3JhdGNoRmlsZXN5c3RlbX0uXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgRGF0YWJyaWNrc0ZpbGVTeXN0ZW0sIHdvcmtzcGFjZSBhcyBkYXRhYnJpY2tzV29ya3NwYWNlIH0gZnJvbSBcIkBkYngtdG9vbHMvZGF0YWJyaWNrc1wiO1xuaW1wb3J0IHsgZXJyb3IsIGxvZywgc3RyaW5nLCB0b2tlbiB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIkBtYXN0cmEvY29yZS9yZXF1ZXN0LWNvbnRleHRcIjtcbmltcG9ydCB7XG4gIENvbXBvc2l0ZUZpbGVzeXN0ZW0sXG4gIFdvcmtzcGFjZSxcbiAgdHlwZSBTa2lsbHNDb250ZXh0LFxuICB0eXBlIFNraWxsc1Jlc29sdmVyLFxuICB0eXBlIFdvcmtzcGFjZUZpbGVzeXN0ZW0sXG59IGZyb20gXCJAbWFzdHJhL2NvcmUvd29ya3NwYWNlXCI7XG5cbmltcG9ydCB7IE1BU1RSQV9TQ09QRVNfS0VZLCBNQVNUUkFfVVNFUl9FTUFJTF9LRVksIE1BU1RSQV9VU0VSX0tFWSwgdHlwZSBVc2VyIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQgeyBzY3JhdGNoRmlsZXN5c3RlbSwgZmlsZXN5c3RlbXMgfSBmcm9tIFwiLi9maWxlc3lzdGVtcy50c1wiO1xuaW1wb3J0IHsgQVNTSVNUQU5UX1NIQVJFRF9TS0lMTFNfUEFUSCwgdXNlckFzc2lzdGFudFNraWxsc1BhdGggfSBmcm9tIFwiLi9za2lsbC1wYXRocy50c1wiO1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKiogT0F1dGggc2NvcGVzIHRoYXQgZ2F0ZSBEYXRhYnJpY2tzIHdvcmtzcGFjZSBmaWxlIG1vdW50cy4gKi9cbmNvbnN0IFdPUktTUEFDRV9GSUxFX1NDT1BFUyA9IFtcIndvcmtzcGFjZVwiLCBcIndvcmtzcGFjZS53b3Jrc3BhY2VcIiwgXCJhbGwtYXBpc1wiXSBhcyBjb25zdDtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIm1hc3RyYS93b3Jrc3BhY2VzXCIpO1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKiogUGVyLXJlcXVlc3QgY29udGV4dCBmb3IgbW91bnQgYW5kIHNraWxsLWZvbGRlciByZXNvbHZlcnMuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZU1vdW50Q29udGV4dCB7XG4gIHJlcXVlc3RDb250ZXh0PzogUmVxdWVzdENvbnRleHQ7XG59XG5cbi8qKlxuICogQSBza2lsbC1mb2xkZXIgZmllbGQgZ2l2ZW4gZWl0aGVyIGRpcmVjdGx5IG9yIGFzIGEgcGVyLXJlcXVlc3QgcmVzb2x2ZXIuXG4gKiBBIHJlc29sdmVyIHJldHVybmluZyBgdW5kZWZpbmVkYCBza2lwcyB0aGUgZm9sZGVyIGZvciB0aGF0IHJlcXVlc3QuXG4gKi9cbmV4cG9ydCB0eXBlIFNraWxsRm9sZGVyVmFsdWU8VD4gPVxuICBUIHwgKChjb250ZXh0OiBXb3Jrc3BhY2VNb3VudENvbnRleHQpID0+IFQgfCB1bmRlZmluZWQgfCBQcm9taXNlPFQgfCB1bmRlZmluZWQ+KTtcblxuLyoqXG4gKiBPbmUgbmFtZWQgc2tpbGwtZm9sZGVyIGxvY2F0aW9uIGFuZCBpdHMgcmVhZCAvIHdyaXRlIHBvbGljeS5cbiAqXG4gKiBHaXZlIHtAbGluayBwYXRofSBmb3IgYSBEYXRhYnJpY2tzIHdvcmtzcGFjZSB0cmVlIChtb3VudGVkIHRocm91Z2ggdGhlXG4gKiByZXF1ZXN0J3MgT0JPIGNsaWVudCksIG9yIHtAbGluayBmaWxlc3lzdGVtfSBmb3IgYSBtb3VudCB0aGUgY29uc3VtZXIgYnVpbGRzXG4gKiBpdHNlbGYuIHtAbGluayBmaWxlc3lzdGVtfSB3aW5zIHdoZW4gYm90aCBhcmUgc2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNraWxsRm9sZGVyT3B0aW9ucyB7XG4gIC8qKiBBYnNvbHV0ZSBEYXRhYnJpY2tzIHdvcmtzcGFjZSBwYXRoIGZvciB0aGlzIGZvbGRlci4gKi9cbiAgcGF0aD86IFNraWxsRm9sZGVyVmFsdWU8c3RyaW5nPjtcbiAgLyoqIFJlYWR5LW1hZGUgbW91bnQsIGZvciBsb2NhdGlvbnMgdGhlIE9CTyBjbGllbnQgY2Fubm90IHJlYWNoLiAqL1xuICBmaWxlc3lzdGVtPzogU2tpbGxGb2xkZXJWYWx1ZTxXb3Jrc3BhY2VGaWxlc3lzdGVtPjtcbiAgLyoqXG4gICAqIFNjYW4gdGhpcyBtb3VudCBmb3IgYFNLSUxMLm1kYCBmaWxlcy4gRGVmYXVsdHMgdG8gYHRydWVgOyBgZmFsc2VgIG1vdW50c1xuICAgKiB0aGUgbG9jYXRpb24gZm9yIGZpbGUgdG9vbHMgd2l0aG91dCBhZGRpbmcgaXQgdG8gc2tpbGwgZGlzY292ZXJ5LlxuICAgKi9cbiAgcmVhZGFibGU/OiBib29sZWFuO1xuICAvKipcbiAgICogQWxsb3cgd3JpdGVzIHRvIGEge0BsaW5rIHBhdGh9IG1vdW50IChhbmQgY3JlYXRlIHRoZSByb290IHdoZW4gbWlzc2luZykuXG4gICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuIEEgc3VwcGxpZWQge0BsaW5rIGZpbGVzeXN0ZW19IGNhcnJpZXMgaXRzIG93blxuICAgKiByZWFkLW9ubHkgZmxhZyBpbnN0ZWFkLlxuICAgKi9cbiAgd3JpdGFibGU/OiBib29sZWFuO1xuICAvKiogTW91bnQgcG9pbnQgaW4gdGhlIGNvbXBvc2l0ZSBuYW1lc3BhY2UuIERlZmF1bHRzIHRvIGAvPG5hbWU+YC4gKi9cbiAgbW91bnQ/OiBzdHJpbmc7XG59XG5cbi8qKiBNb3VudCBtYXAgcGx1cyBvcHRpb25hbCBNYXN0cmEgc2tpbGwgc2NhbiByb290cyBmb3Igb25lIHJlc29sdmVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbiB7XG4gIG1vdW50czogUmVjb3JkPHN0cmluZywgV29ya3NwYWNlRmlsZXN5c3RlbT47XG4gIC8qKiBQYXRocyB3aXRoaW4gdGhlIGNvbXBvc2l0ZSBuYW1lc3BhY2Ugd2hlcmUgYFNLSUxMLm1kYCBmaWxlcyBhcmUgc2Nhbm5lZC4gKi9cbiAgc2tpbGxQYXRocz86IHN0cmluZ1tdO1xufVxuXG4vKiogQ29udHJpYnV0ZXMgZmlsZXN5c3RlbSBtb3VudHMgKGFuZCBvcHRpb25hbCBza2lsbCBwYXRocykgZm9yIG9uZSByZXF1ZXN0LiAqL1xuZXhwb3J0IHR5cGUgV29ya3NwYWNlTW91bnRSZXNvbHZlciA9IChcbiAgY29udGV4dDogV29ya3NwYWNlTW91bnRDb250ZXh0LFxuKSA9PiBXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbiB8IFByb21pc2U8V29ya3NwYWNlTW91bnRDb250cmlidXRpb24+O1xuXG4vKiogTmFtZXMgY2FycmllZCBieSB7QGxpbmsgREVGQVVMVF9TS0lMTF9GT0xERVJTfS4gKi9cbmV4cG9ydCB0eXBlIERlZmF1bHRTa2lsbEZvbGRlck5hbWUgPSBcIndvcmtzcGFjZS10ZWFtXCIgfCBcIndvcmtzcGFjZS10ZWFtLWFwcFwiO1xuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIGNyZWF0ZVdvcmtzcGFjZX0uICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVdvcmtzcGFjZU9wdGlvbnMge1xuICAvKiogV29ya3NwYWNlIGlkOyBkZXJpdmVkIGZyb20gYG5hbWVgIG9yIGBcIndvcmtzcGFjZVwiYCB3aGVuIG9taXR0ZWQuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogRGlzcGxheSBuYW1lOyBkZXJpdmVkIGZyb20gYGlkYCB3aGVuIG9taXR0ZWQuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTdGFydCBmcm9tIHtAbGluayBERUZBVUxUX1NLSUxMX0ZPTERFUlN9LiBEZWZhdWx0cyB0byBgdHJ1ZWA7IGBmYWxzZWBcbiAgICogc3RhcnRzIGZyb20gYW4gZW1wdHkgbWFwLCBsZWF2aW5nIG9ubHkgdGhlIHtAbGluayBza2lsbEZvbGRlcnN9IGdpdmVuIGhlcmUuXG4gICAqL1xuICBhc3Npc3RhbnRTa2lsbHM/OiBib29sZWFuO1xuICAvKipcbiAgICogTmFtZWQgc2tpbGwgZm9sZGVycyBtZXJnZWQgb3ZlciB7QGxpbmsgREVGQVVMVF9TS0lMTF9GT0xERVJTfTogYSBtYXRjaGluZ1xuICAgKiBuYW1lIG92ZXJyaWRlcyB0aGF0IGRlZmF1bHQsIGBmYWxzZWAgZGlzYWJsZXMgaXQsIGFuZCBhbnkgb3RoZXIgbmFtZSBhZGRzXG4gICAqIGEgZm9sZGVyLlxuICAgKi9cbiAgc2tpbGxGb2xkZXJzPzogUmVjb3JkPHN0cmluZywgU2tpbGxGb2xkZXJPcHRpb25zIHwgZmFsc2U+O1xuICAvKiogRXh0cmEgcGVyLXJlcXVlc3QgbW91bnQgcmVzb2x2ZXJzIChydW4gYWZ0ZXIgdGhlIHNraWxsLWZvbGRlciBtb3VudHMpLiAqL1xuICBtb3VudHM/OiBXb3Jrc3BhY2VNb3VudFJlc29sdmVyW107XG4gIC8qKiBSZXBsYWNlIHRoZSBhdXRvLWJ1aWx0IGR5bmFtaWMgc2tpbGxzIHJlc29sdmVyLiAqL1xuICBza2lsbHM/OiBTa2lsbHNSZXNvbHZlcjtcbiAgLyoqIEZvcndhcmRlZCB0byBNYXN0cmEgd2hlbiBza2lsbCBkaXNjb3ZlcnkgaXMgZW5hYmxlZC4gKi9cbiAgY2hlY2tTa2lsbEZpbGVNdGltZT86IGJvb2xlYW47XG4gIC8qKiBFbmFibGUgQk0yNSBrZXl3b3JkIHNlYXJjaCBvdmVyIGluZGV4ZWQgd29ya3NwYWNlIGNvbnRlbnQuICovXG4gIGJtMjU/OiBib29sZWFuO1xuICAvKipcbiAgICogRXh0cmEgTE9DQUwgc2tpbGwgc2NhbiBwYXRocyBhZGRlZCB0byBldmVyeSByZXF1ZXN0J3Mgc2tpbGwgZGlzY292ZXJ5LlxuICAgKiBVc2VkIGJ5IHRoZSBwbHVnaW4gdG8gc3VyZmFjZSByZW1vdGUgc2tpbGxzIHByb3Zpc2lvbmVkIHRvIGEgbG9jYWwgdGVtcFxuICAgKiBkaXIgYXQgc3RhcnR1cCAoc2VlIGByZW1vdGUtc2tpbGxzLnRzYCkuIERhdGFicmlja3MtaG9zdGVkIHJlbW90ZSBza2lsbHNcbiAgICogbmVlZCBubyBlbnRyeSBoZXJlIC0gdGhleSBsYW5kIGluIHRoZSBBc3Npc3RhbnQgdHJlZSB0aGUgYnVpbHQtaW4gbW91bnRcbiAgICogYWxyZWFkeSBzY2Fucy5cbiAgICovXG4gIGV4dHJhU2tpbGxQYXRocz86IHN0cmluZ1tdO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGRlZmF1bHRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBUaGUgc2tpbGwgZm9sZGVycyBldmVyeSB3b3Jrc3BhY2Ugc3RhcnRzIHdpdGguXG4gKlxuICogLSBgd29ya3NwYWNlLXRlYW1gIC0gdGhlIHNoYXJlZCB3b3Jrc3BhY2UgQXNzaXN0YW50IHRyZWUsIHJlYWQtb25seSBiZWNhdXNlXG4gKiAgIHdyaXRpbmcgaXQgaXMgYSB3b3Jrc3BhY2UtYWRtaW4gYWN0aW9uLlxuICogLSBgd29ya3NwYWNlLXRlYW0tYXBwYCAtIHRoZSByZXF1ZXN0aW5nIHVzZXIncyBvd24gQXNzaXN0YW50IHRyZWUsIHdyaXRhYmxlXG4gKiAgIHNvIHRoZSBhcHAgY2FuIHNhdmUgc2tpbGxzIGJhY2sgdG8gaXQuIFNraXBwZWQgd2hlbiB0aGUgcmVxdWVzdCBjYXJyaWVzIG5vXG4gKiAgIHVzZXIgZW1haWwuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NLSUxMX0ZPTERFUlM6IFJlYWRvbmx5PFJlY29yZDxEZWZhdWx0U2tpbGxGb2xkZXJOYW1lLCBTa2lsbEZvbGRlck9wdGlvbnM+PiA9IHtcbiAgXCJ3b3Jrc3BhY2UtdGVhbVwiOiB7XG4gICAgcGF0aDogQVNTSVNUQU5UX1NIQVJFRF9TS0lMTFNfUEFUSCxcbiAgICByZWFkYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0sXG4gIFwid29ya3NwYWNlLXRlYW0tYXBwXCI6IHtcbiAgICBwYXRoOiAoeyByZXF1ZXN0Q29udGV4dCB9KSA9PiB7XG4gICAgICBjb25zdCBlbWFpbCA9IHJlc29sdmVTY29wZWRFbWFpbChyZXF1ZXN0Q29udGV4dCk7XG4gICAgICByZXR1cm4gZW1haWwgPyB1c2VyQXNzaXN0YW50U2tpbGxzUGF0aChlbWFpbCkgOiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICByZWFkYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgfSxcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgTWFzdHJhIHtAbGluayBXb3Jrc3BhY2V9IHdpdGggcGVyLXJlcXVlc3QgRGF0YWJyaWNrcyBtb3VudHMuXG4gKlxuICogQGV4YW1wbGUgRGVmYXVsdCBza2lsbCBmb2xkZXJzIG9ubHlcbiAqIGBgYHRzXG4gKiBjcmVhdGVXb3Jrc3BhY2UoKVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgT3ZlcnJpZGUgYSBkZWZhdWx0LCBkcm9wIGFub3RoZXIsIGFuZCBhZGQgYSBsb2NhdGlvbiBvZiB5b3VyIG93blxuICogYGBgdHNcbiAqIGNyZWF0ZVdvcmtzcGFjZSh7XG4gKiAgIHNraWxsRm9sZGVyczoge1xuICogICAgIFwid29ya3NwYWNlLXRlYW1cIjogeyBwYXRoOiBcIi9Xb3Jrc3BhY2UvU2hhcmVkL3RlYW0tc2tpbGxzXCIgfSxcbiAqICAgICBcIndvcmtzcGFjZS10ZWFtLWFwcFwiOiBmYWxzZSxcbiAqICAgICBydW5ib29rczogeyBwYXRoOiBcIi9Xb3Jrc3BhY2UvU2hhcmVkL3J1bmJvb2tzL3NraWxsc1wiLCB3cml0YWJsZTogdHJ1ZSB9LFxuICogICAgIHZvbHVtZTogeyBmaWxlc3lzdGVtOiBteVZvbHVtZUZpbGVzeXN0ZW0gfSxcbiAqICAgfSxcbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBTa2lsbCBmb2xkZXJzIHBsdXMgYSBjdXN0b20gbW91bnQgcmVzb2x2ZXJcbiAqIGBgYHRzXG4gKiBjcmVhdGVXb3Jrc3BhY2Uoe1xuICogICBtb3VudHM6IFtcbiAqICAgICBhc3luYyAoeyByZXF1ZXN0Q29udGV4dCB9KSA9PiAoe1xuICogICAgICAgbW91bnRzOiB7IFwiL2RhdGFcIjogbXlGaWxlc3lzdGVtIH0sXG4gKiAgICAgICBza2lsbFBhdGhzOiBbXSxcbiAqICAgICB9KSxcbiAqICAgXSxcbiAqIH0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdvcmtzcGFjZShvcHRpb25zOiBDcmVhdGVXb3Jrc3BhY2VPcHRpb25zID0ge30pOiBXb3Jrc3BhY2Uge1xuICBjb25zdCB7IGlkLCBuYW1lIH0gPSByZXNvbHZlV29ya3NwYWNlSWRlbnRpdHkob3B0aW9ucyk7XG4gIGNvbnN0IHNraWxsRm9sZGVycyA9IHJlc29sdmVTa2lsbEZvbGRlcnMob3B0aW9ucyk7XG4gIGNvbnN0IGZvbGRlck5hbWVzID0gT2JqZWN0LmtleXMoc2tpbGxGb2xkZXJzKTtcbiAgY29uc3QgcmVzb2x2ZXJzID0gYnVpbGRNb3VudFJlc29sdmVycyhza2lsbEZvbGRlcnMsIG9wdGlvbnMubW91bnRzKTtcbiAgY29uc3QgZXh0cmFTa2lsbFBhdGhzID0gb3B0aW9ucy5leHRyYVNraWxsUGF0aHMgPz8gW107XG4gIGNvbnN0IHNraWxscyA9XG4gICAgb3B0aW9ucy5za2lsbHMgPz9cbiAgICAocmVzb2x2ZXJzLmxlbmd0aCA+IDAgfHwgZXh0cmFTa2lsbFBhdGhzLmxlbmd0aCA+IDBcbiAgICAgID8gYnVpbGRXb3Jrc3BhY2VTa2lsbHNSZXNvbHZlcihyZXNvbHZlcnMsIGV4dHJhU2tpbGxQYXRocylcbiAgICAgIDogdW5kZWZpbmVkKTtcbiAgY29uc3QgY2hlY2tTa2lsbEZpbGVNdGltZSA9IG9wdGlvbnMuY2hlY2tTa2lsbEZpbGVNdGltZSA/PyBmb2xkZXJOYW1lcy5sZW5ndGggPiAwO1xuICBjb25zdCBibTI1ID0gb3B0aW9ucy5ibTI1ICE9PSBmYWxzZTtcbiAgbG9nZ2VyLmRlYnVnKFwid29ya3NwYWNlOmNyZWF0ZVwiLCB7XG4gICAgaWQsXG4gICAgbmFtZSxcbiAgICByZXNvbHZlckNvdW50OiByZXNvbHZlcnMubGVuZ3RoLFxuICAgIHNraWxsRm9sZGVyczogZm9sZGVyTmFtZXMsXG4gICAgY3VzdG9tTW91bnRSZXNvbHZlcnM6IG9wdGlvbnMubW91bnRzPy5sZW5ndGggPz8gMCxcbiAgICBjdXN0b21Ta2lsbHNSZXNvbHZlcjogQm9vbGVhbihvcHRpb25zLnNraWxscyksXG4gICAgY2hlY2tTa2lsbEZpbGVNdGltZSxcbiAgICBibTI1LFxuICAgIGV4dHJhU2tpbGxQYXRoczogZXh0cmFTa2lsbFBhdGhzLmxlbmd0aCxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBXb3Jrc3BhY2Uoe1xuICAgIGlkLFxuICAgIG5hbWUsXG4gICAgZmlsZXN5c3RlbTogKGNvbnRleHQpID0+IHJlc29sdmVXb3Jrc3BhY2VGaWxlc3lzdGVtKHJlc29sdmVycywgY29udGV4dCksXG4gICAgLi4uKHNraWxsc1xuICAgICAgPyB7XG4gICAgICAgICAgc2tpbGxzLFxuICAgICAgICAgIGNoZWNrU2tpbGxGaWxlTXRpbWUsXG4gICAgICAgIH1cbiAgICAgIDoge30pLFxuICAgIGJtMjUsXG4gIH0pO1xufVxuXG4vKipcbiAqIE1lcmdlIHRoZSBjb25maWd1cmVkIHNraWxsIGZvbGRlcnMgb3ZlciB7QGxpbmsgREVGQVVMVF9TS0lMTF9GT0xERVJTfS5cbiAqXG4gKiBgYXNzaXN0YW50U2tpbGxzOiBmYWxzZWAgZHJvcHMgdGhlIGRlZmF1bHRzLCBhbmQgYSBgZmFsc2VgIHZhbHVlIHJlbW92ZXMgb25lXG4gKiBlbnRyeSBieSBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNraWxsRm9sZGVycyhcbiAgb3B0aW9uczogUGljazxDcmVhdGVXb3Jrc3BhY2VPcHRpb25zLCBcImFzc2lzdGFudFNraWxsc1wiIHwgXCJza2lsbEZvbGRlcnNcIj4gPSB7fSxcbik6IFJlY29yZDxzdHJpbmcsIFNraWxsRm9sZGVyT3B0aW9ucz4ge1xuICBjb25zdCBtZXJnZWQ6IFJlY29yZDxzdHJpbmcsIFNraWxsRm9sZGVyT3B0aW9ucz4gPVxuICAgIG9wdGlvbnMuYXNzaXN0YW50U2tpbGxzID09PSBmYWxzZSA/IHt9IDogeyAuLi5ERUZBVUxUX1NLSUxMX0ZPTERFUlMgfTtcbiAgZm9yIChjb25zdCBbbmFtZSwgZm9sZGVyXSBvZiBPYmplY3QuZW50cmllcyhvcHRpb25zLnNraWxsRm9sZGVycyA/PyB7fSkpIHtcbiAgICBpZiAoZm9sZGVyID09PSBmYWxzZSkge1xuICAgICAgZGVsZXRlIG1lcmdlZFtuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVyZ2VkW25hbWVdID0gZm9sZGVyO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWVyZ2VkO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHByaXZhdGUgaGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgdGhlIHJlcXVlc3QgdG9rZW4gY2FycmllcyBhIHNjb3BlIHRoYXQgYWxsb3dzIHdvcmtzcGFjZVxuICogZmlsZSBBUEkgYWNjZXNzIChgd29ya3NwYWNlYCBvciBgYWxsLWFwaXNgIG9uIHtAbGluayBNQVNUUkFfU0NPUEVTX0tFWX0pLlxuICovXG5mdW5jdGlvbiBoYXNXb3Jrc3BhY2VGaWxlU2NvcGUocmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiB0b2tlbi5pbmNsdWRlc0FjY2Vzc1Rva2VuU2NvcGUoXG4gICAgcmVxdWVzdENvbnRleHQ/LmdldChNQVNUUkFfU0NPUEVTX0tFWSksXG4gICAgV09SS1NQQUNFX0ZJTEVfU0NPUEVTLFxuICApO1xufVxuXG4vKipcbiAqIE1vdW50IHJlc29sdmVyIGZvciB0aGUgbmFtZWQgc2tpbGwgZm9sZGVycy5cbiAqXG4gKiBHYXRlcyBvbiB3b3Jrc3BhY2UgZmlsZSBzY29wZSAob3IgZGV2ZWxvcG1lbnQgbW9kZSksIHRoZW4gbW91bnRzIGV2ZXJ5XG4gKiBmb2xkZXIgd2hvc2UgbG9jYXRpb24gcmVzb2x2ZXMgZm9yIHRoaXMgcmVxdWVzdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNraWxsRm9sZGVyTW91bnRzKFxuICBza2lsbEZvbGRlcnM6IFJlY29yZDxzdHJpbmcsIFNraWxsRm9sZGVyT3B0aW9ucz4sXG4gIGNvbnRleHQ6IFdvcmtzcGFjZU1vdW50Q29udGV4dCxcbik6IFByb21pc2U8V29ya3NwYWNlTW91bnRDb250cmlidXRpb24+IHtcbiAgY29uc3QgbW91bnRzOiBSZWNvcmQ8c3RyaW5nLCBXb3Jrc3BhY2VGaWxlc3lzdGVtPiA9IHt9O1xuICBjb25zdCBza2lsbFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCByZXF1ZXN0Q29udGV4dCA9IGNvbnRleHQucmVxdWVzdENvbnRleHQ7XG5cbiAgaWYgKCFyZXF1ZXN0Q29udGV4dCB8fCAhc2hvdWxkTW91bnRTa2lsbEZvbGRlcnMocmVxdWVzdENvbnRleHQpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwic2tpbGwtZm9sZGVyczpza2lwcGVkXCIsIHtcbiAgICAgIHJlYXNvbjogIXJlcXVlc3RDb250ZXh0ID8gXCJuby1yZXF1ZXN0LWNvbnRleHRcIiA6IFwibWlzc2luZy13b3Jrc3BhY2Utc2NvcGVcIixcbiAgICAgIG5vZGVFbnY6IHByb2Nlc3MuZW52Lk5PREVfRU5WLFxuICAgICAgc2NvcGVzOiByZXF1ZXN0Q29udGV4dD8uZ2V0KE1BU1RSQV9TQ09QRVNfS0VZKSxcbiAgICB9KTtcbiAgICByZXR1cm4geyBtb3VudHMsIHNraWxsUGF0aHMgfTtcbiAgfVxuXG4gIGNvbnN0IHVzZXIgPSByZXF1ZXN0Q29udGV4dC5nZXQoTUFTVFJBX1VTRVJfS0VZKSBhcyBVc2VyIHwgdW5kZWZpbmVkO1xuICBjb25zdCBjbGllbnQgPSB1c2VyPy5leGVjdXRpb25Db250ZXh0LmNsaWVudCBhcyBXb3Jrc3BhY2VDbGllbnQgfCB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCBbbmFtZSwgZm9sZGVyXSBvZiBPYmplY3QuZW50cmllcyhza2lsbEZvbGRlcnMpKSB7XG4gICAgY29uc3QgZmlsZXN5c3RlbSA9IGF3YWl0IHJlc29sdmVTa2lsbEZvbGRlckZpbGVzeXN0ZW0obmFtZSwgZm9sZGVyLCBjb250ZXh0LCBjbGllbnQpO1xuICAgIGlmICghZmlsZXN5c3RlbSkgY29udGludWU7XG4gICAgY29uc3QgbW91bnQgPSBmb2xkZXIubW91bnQgPz8gYC8ke25hbWV9YDtcbiAgICBtb3VudHNbbW91bnRdID0gZmlsZXN5c3RlbTtcbiAgICBpZiAoZm9sZGVyLnJlYWRhYmxlICE9PSBmYWxzZSkgc2tpbGxQYXRocy5wdXNoKG1vdW50KTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhcInNraWxsLWZvbGRlcnM6bW91bnRlZFwiLCB7XG4gICAgbW91bnRLZXlzOiBPYmplY3Qua2V5cyhtb3VudHMpLFxuICAgIHNraWxsUGF0aHMsXG4gIH0pO1xuXG4gIHJldHVybiB7IG1vdW50cywgc2tpbGxQYXRocyB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgb25lIHNraWxsIGZvbGRlciB0byBhIE1hc3RyYSBmaWxlc3lzdGVtLCBvciBgdW5kZWZpbmVkYCB0byBza2lwIGl0XG4gKiBmb3IgdGhpcyByZXF1ZXN0LlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlU2tpbGxGb2xkZXJGaWxlc3lzdGVtKFxuICBuYW1lOiBzdHJpbmcsXG4gIGZvbGRlcjogU2tpbGxGb2xkZXJPcHRpb25zLFxuICBjb250ZXh0OiBXb3Jrc3BhY2VNb3VudENvbnRleHQsXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50IHwgdW5kZWZpbmVkLFxuKTogUHJvbWlzZTxXb3Jrc3BhY2VGaWxlc3lzdGVtIHwgdW5kZWZpbmVkPiB7XG4gIGlmIChmb2xkZXIuZmlsZXN5c3RlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHJlc29sdmVTa2lsbEZvbGRlclZhbHVlKGZvbGRlci5maWxlc3lzdGVtLCBjb250ZXh0KTtcbiAgfVxuICAvLyBBIHBhdGggbW91bnQgbmVlZHMgdGhlIHJlcXVlc3QncyBPQk8gY2xpZW50IHRvIHJlYWNoIHRoZSB3b3Jrc3BhY2UuXG4gIGlmIChmb2xkZXIucGF0aCA9PT0gdW5kZWZpbmVkIHx8ICFjbGllbnQpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJza2lsbC1mb2xkZXI6c2tpcHBlZFwiLCB7XG4gICAgICBuYW1lLFxuICAgICAgcmVhc29uOiBmb2xkZXIucGF0aCA9PT0gdW5kZWZpbmVkID8gXCJuby1sb2NhdGlvblwiIDogXCJtaXNzaW5nLW9iby1jbGllbnRcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJvb3QgPSBzdHJpbmcudHJpbVRvTnVsbChhd2FpdCByZXNvbHZlU2tpbGxGb2xkZXJWYWx1ZShmb2xkZXIucGF0aCwgY29udGV4dCkpO1xuICBpZiAoIXJvb3QpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBkYXRhYnJpY2tzRmlsZXN5c3RlbShjbGllbnQsIHJvb3QsIGZvbGRlci53cml0YWJsZSAhPT0gdHJ1ZSk7XG59XG5cbi8qKiBSZWFkIGEge0BsaW5rIFNraWxsRm9sZGVyVmFsdWV9LCBjYWxsaW5nIGl0IHdoZW4gaXQgaXMgYSBwZXItcmVxdWVzdCByZXNvbHZlci4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTa2lsbEZvbGRlclZhbHVlPFQ+KFxuICB2YWx1ZTogU2tpbGxGb2xkZXJWYWx1ZTxUPixcbiAgY29udGV4dDogV29ya3NwYWNlTW91bnRDb250ZXh0LFxuKTogVCB8IHVuZGVmaW5lZCB8IFByb21pc2U8VCB8IHVuZGVmaW5lZD4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICA/ICh2YWx1ZSBhcyAoY29udGV4dDogV29ya3NwYWNlTW91bnRDb250ZXh0KSA9PiBUIHwgdW5kZWZpbmVkIHwgUHJvbWlzZTxUIHwgdW5kZWZpbmVkPikoY29udGV4dClcbiAgICA6IHZhbHVlO1xufVxuXG4vKipcbiAqIEZpbGwgaW4gYGlkYCBhbmQgYG5hbWVgIHdoZW4gZWl0aGVyIGlzIG9taXR0ZWQgb24ge0BsaW5rIENyZWF0ZVdvcmtzcGFjZU9wdGlvbnN9LlxuICogU2x1Z2lmaWVzIGBuYW1lYCBpbnRvIGBpZGA7IHRva2VuaXplcyBgaWRgIGludG8gYSBkaXNwbGF5IGBuYW1lYC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVdvcmtzcGFjZUlkZW50aXR5KG9wdGlvbnM6IENyZWF0ZVdvcmtzcGFjZU9wdGlvbnMpOiB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbn0ge1xuICBsZXQgaWQgPSBvcHRpb25zLmlkO1xuICBsZXQgbmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgaWYgKCFpZCkge1xuICAgIGlkID0gbmFtZSA/IHN0cmluZy50b1NsdWcobmFtZSkgOiBcIndvcmtzcGFjZVwiO1xuICB9XG4gIGlmICghbmFtZSkge1xuICAgIG5hbWUgPSBBcnJheS5mcm9tKHN0cmluZy50b2tlbml6ZShpZCkpLmpvaW4oXCIgXCIpO1xuICB9XG4gIHJldHVybiB7IGlkLCBuYW1lIH07XG59XG5cbi8qKiBDb2xsZWN0IHRoZSBza2lsbC1mb2xkZXIgcmVzb2x2ZXIgYW5kIGFueSBjYWxsZXItc3VwcGxpZWQgb25lcy4gKi9cbmZ1bmN0aW9uIGJ1aWxkTW91bnRSZXNvbHZlcnMoXG4gIHNraWxsRm9sZGVyczogUmVjb3JkPHN0cmluZywgU2tpbGxGb2xkZXJPcHRpb25zPixcbiAgbW91bnRzOiBXb3Jrc3BhY2VNb3VudFJlc29sdmVyW10gfCB1bmRlZmluZWQsXG4pOiBXb3Jrc3BhY2VNb3VudFJlc29sdmVyW10ge1xuICBjb25zdCByZXNvbHZlcnM6IFdvcmtzcGFjZU1vdW50UmVzb2x2ZXJbXSA9IFtdO1xuICBjb25zdCBmb2xkZXJDb3VudCA9IE9iamVjdC5rZXlzKHNraWxsRm9sZGVycykubGVuZ3RoO1xuICBpZiAoZm9sZGVyQ291bnQgPiAwKSB7XG4gICAgcmVzb2x2ZXJzLnB1c2goKGNvbnRleHQpID0+IHJlc29sdmVTa2lsbEZvbGRlck1vdW50cyhza2lsbEZvbGRlcnMsIGNvbnRleHQpKTtcbiAgfVxuICBpZiAobW91bnRzPy5sZW5ndGgpIHtcbiAgICByZXNvbHZlcnMucHVzaCguLi5tb3VudHMpO1xuICB9XG4gIGxvZ2dlci5kZWJ1ZyhcIm1vdW50czpyZXNvbHZlcnNcIiwge1xuICAgIHNraWxsRm9sZGVyQ291bnQ6IGZvbGRlckNvdW50LFxuICAgIGN1c3RvbVJlc29sdmVyQ291bnQ6IG1vdW50cz8ubGVuZ3RoID8/IDAsXG4gICAgdG90YWxSZXNvbHZlckNvdW50OiByZXNvbHZlcnMubGVuZ3RoLFxuICB9KTtcbiAgcmV0dXJuIHJlc29sdmVycztcbn1cblxuLyoqXG4gKiBHYXRlIHNraWxsLWZvbGRlciBtb3VudHMgb24gdGhlIHJlcXVlc3QncyB0b2tlbi5cbiAqXG4gKiBBbHdheXMgYWxsb3dzIG1vdW50cyBpbiBkZXZlbG9wbWVudDsgaW4gb3RoZXIgZW52aXJvbm1lbnRzIHJlcXVpcmVzXG4gKiB7QGxpbmsgaGFzV29ya3NwYWNlRmlsZVNjb3BlfS5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkTW91bnRTa2lsbEZvbGRlcnMocmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0KTogYm9vbGVhbiB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGhhc1dvcmtzcGFjZUZpbGVTY29wZShyZXF1ZXN0Q29udGV4dCk7XG59XG5cbi8qKiBSZWFkIHRoZSB0cmltbWVkIE9CTyB1c2VyIGVtYWlsIHN0YW1wZWQgb24ge0BsaW5rIE1BU1RSQV9VU0VSX0VNQUlMX0tFWX0uICovXG5mdW5jdGlvbiByZXNvbHZlU2NvcGVkRW1haWwocmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0IHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHN0cmluZy50cmltVG9OdWxsKHJlcXVlc3RDb250ZXh0Py5nZXQoTUFTVFJBX1VTRVJfRU1BSUxfS0VZKSkgPz8gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFdyYXAgYSB7QGxpbmsgRGF0YWJyaWNrc0ZpbGVTeXN0ZW19IGFzIGEgTWFzdHJhIGZpbGVzeXN0ZW0uIFdoZW4gdGhlIHJvb3QgaXNcbiAqIG1pc3NpbmcgKGFuZCB7QGxpbmsgcmVhZE9ubHl9IHNvIHdlIHdpbGwgbm90IGNyZWF0ZSBpdCksIGZhbGwgYmFjayB0b1xuICoge0BsaW5rIHNjcmF0Y2hGaWxlc3lzdGVtfSBzbyBza2lsbCBzY2FucyBzdGlsbCBoYXZlIGEgd3JpdGFibGUgbG9jYWwgbW91bnQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRhdGFicmlja3NGaWxlc3lzdGVtKFxuICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCxcbiAgcm9vdDogc3RyaW5nLFxuICByZWFkT25seTogYm9vbGVhbiA9IHRydWUsXG4pOiBQcm9taXNlPFdvcmtzcGFjZUZpbGVzeXN0ZW0+IHtcbiAgY29uc3QgZnMgPSBuZXcgRGF0YWJyaWNrc0ZpbGVTeXN0ZW0oe1xuICAgIGNsaWVudDogZGF0YWJyaWNrc1dvcmtzcGFjZS50b0xlZ2FjeVdvcmtzcGFjZUNsaWVudChjbGllbnQpLFxuICAgIHJvb3QsXG4gICAgcmVhZE9ubHksXG4gICAgY3JlYXRlUm9vdDogIXJlYWRPbmx5LFxuICB9KTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5pbml0KCk7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhcIi5cIikpIHtcbiAgICAgIHJldHVybiBmaWxlc3lzdGVtcyhmcywgeyByZWFkT25seSB9KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImRhdGFicmlja3MtbW91bnQ6c2NyYXRjaC1mYWxsYmFja1wiLCB7XG4gICAgICByb290LFxuICAgICAgcmVhZE9ubHksXG4gICAgICBlcnJvcjogZXJyb3IuZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHNjcmF0Y2hGaWxlc3lzdGVtKCk7XG59XG5cbi8qKlxuICogUnVuIGV2ZXJ5IG1vdW50IHJlc29sdmVyIGZvciBvbmUgcmVxdWVzdCBhbmQgbWVyZ2UgbW91bnRzIHBsdXMgc2tpbGwgcGF0aHMuXG4gKiBMYXRlciByZXNvbHZlcnMgb3ZlcndyaXRlIG1vdW50IGtleXMgZnJvbSBlYXJsaWVyIG9uZXMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVXb3Jrc3BhY2VDb250cmlidXRpb24oXG4gIHJlc29sdmVyczogV29ya3NwYWNlTW91bnRSZXNvbHZlcltdLFxuICBjb250ZXh0OiBXb3Jrc3BhY2VNb3VudENvbnRleHQsXG4pOiBQcm9taXNlPFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uPiB7XG4gIGNvbnN0IG1vdW50czogUmVjb3JkPHN0cmluZywgV29ya3NwYWNlRmlsZXN5c3RlbT4gPSB7fTtcbiAgY29uc3Qgc2tpbGxQYXRoczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgcmVzb2x2ZXJdIG9mIHJlc29sdmVycy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBjb250cmlidXRpb24gPSBhd2FpdCByZXNvbHZlcihjb250ZXh0KTtcbiAgICBsb2dnZXIuZGVidWcoXCJtb3VudHM6cmVzb2x2ZXJcIiwge1xuICAgICAgaW5kZXgsXG4gICAgICBtb3VudEtleXM6IE9iamVjdC5rZXlzKGNvbnRyaWJ1dGlvbi5tb3VudHMpLFxuICAgICAgc2tpbGxQYXRoczogY29udHJpYnV0aW9uLnNraWxsUGF0aHMgPz8gW10sXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihtb3VudHMsIGNvbnRyaWJ1dGlvbi5tb3VudHMpO1xuICAgIGlmIChjb250cmlidXRpb24uc2tpbGxQYXRocz8ubGVuZ3RoKSB7XG4gICAgICBza2lsbFBhdGhzLnB1c2goLi4uY29udHJpYnV0aW9uLnNraWxsUGF0aHMpO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhcIm1vdW50czptZXJnZWRcIiwge1xuICAgIG1vdW50S2V5czogT2JqZWN0LmtleXMobW91bnRzKSxcbiAgICBza2lsbFBhdGhzLFxuICB9KTtcblxuICByZXR1cm4geyBtb3VudHMsIHNraWxsUGF0aHMgfTtcbn1cblxuLyoqXG4gKiBEeW5hbWljIGZpbGVzeXN0ZW0gcmVzb2x2ZXIgcGFzc2VkIHRvIE1hc3RyYSB7QGxpbmsgV29ya3NwYWNlfS5cbiAqXG4gKiBSZXR1cm5zIGEge0BsaW5rIENvbXBvc2l0ZUZpbGVzeXN0ZW19IHdoZW4gYW55IG1vdW50IHJlc29sdmVkOyBvdGhlcndpc2UgYVxuICogZnJlc2gge0BsaW5rIHNjcmF0Y2hGaWxlc3lzdGVtfSBzbyBNYXN0cmEgYWx3YXlzIGhhcyBhIHdyaXRhYmxlIGxvY2FsIHJvb3QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVXb3Jrc3BhY2VGaWxlc3lzdGVtKFxuICByZXNvbHZlcnM6IFdvcmtzcGFjZU1vdW50UmVzb2x2ZXJbXSxcbiAgY29udGV4dDogV29ya3NwYWNlTW91bnRDb250ZXh0LFxuKTogUHJvbWlzZTxXb3Jrc3BhY2VGaWxlc3lzdGVtPiB7XG4gIGNvbnN0IHsgbW91bnRzIH0gPSBhd2FpdCByZXNvbHZlV29ya3NwYWNlQ29udHJpYnV0aW9uKHJlc29sdmVycywgY29udGV4dCk7XG4gIGNvbnN0IG1vdW50S2V5cyA9IE9iamVjdC5rZXlzKG1vdW50cyk7XG4gIGlmIChtb3VudEtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiZmlsZXN5c3RlbTpzY3JhdGNoXCIsIHtcbiAgICAgIGhhc1JlcXVlc3RDb250ZXh0OiBCb29sZWFuKGNvbnRleHQucmVxdWVzdENvbnRleHQpLFxuICAgIH0pO1xuICAgIHJldHVybiBzY3JhdGNoRmlsZXN5c3RlbSgpO1xuICB9XG4gIGxvZ2dlci5kZWJ1ZyhcImZpbGVzeXN0ZW06Y29tcG9zaXRlXCIsIHsgbW91bnRLZXlzIH0pO1xuICByZXR1cm4gbmV3IENvbXBvc2l0ZUZpbGVzeXN0ZW0oeyBtb3VudHMgfSk7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGR5bmFtaWMge0BsaW5rIFNraWxsc1Jlc29sdmVyfSB0aGF0IGNvbGxlY3RzIGBza2lsbFBhdGhzYCBmcm9tXG4gKiBldmVyeSBtb3VudCByZXNvbHZlciBvbiBlYWNoIHJlcXVlc3QuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkV29ya3NwYWNlU2tpbGxzUmVzb2x2ZXIoXG4gIHJlc29sdmVyczogV29ya3NwYWNlTW91bnRSZXNvbHZlcltdLFxuICBleHRyYVNraWxsUGF0aHM6IHN0cmluZ1tdID0gW10sXG4pOiBTa2lsbHNSZXNvbHZlciB7XG4gIHJldHVybiBhc3luYyAoY29udGV4dDogU2tpbGxzQ29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHsgc2tpbGxQYXRocyB9ID0gYXdhaXQgcmVzb2x2ZVdvcmtzcGFjZUNvbnRyaWJ1dGlvbihyZXNvbHZlcnMsIGNvbnRleHQpO1xuICAgIGNvbnN0IG1lcmdlZCA9IFsuLi4oc2tpbGxQYXRocyA/PyBbXSksIC4uLmV4dHJhU2tpbGxQYXRoc107XG4gICAgbG9nZ2VyLmRlYnVnKFwic2tpbGxzOnJlc29sdmVkXCIsIHsgc2tpbGxQYXRocywgZXh0cmFTa2lsbFBhdGhzIH0pO1xuICAgIHJldHVybiBtZXJnZWQ7XG4gIH07XG59XG4iXX0=
|
|
403
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3Jrc3BhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRS9FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLElBQUksbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRixPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTNFLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsU0FBUyxHQU1WLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBYSxNQUFNLGFBQWEsQ0FBQztBQUNuRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBMEMsTUFBTSxjQUFjLENBQUM7QUFDekYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFekYsNkVBQTZFO0FBRTdFLCtEQUErRDtBQUMvRCxNQUFNLHFCQUFxQixHQUFHLENBQUMsV0FBVyxFQUFFLHFCQUFxQixFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBRXhGLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQWdIL0MsOEVBQThFO0FBRTlFOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxD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LGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDakUsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWFzdHJhIHdvcmtzcGFjZSBmYWN0b3J5IGZvciBEYXRhYnJpY2tzIEFwcHMuXG4gKlxuICogQnVpbGRzIGEgcGVyLXJlcXVlc3Qge0BsaW5rIFdvcmtzcGFjZX0gd2l0aCBEYXRhYnJpY2tzIFNhbmRib3ggY29tbWFuZFxuICogZXhlY3V0aW9uIHBsdXMgYSB7QGxpbmsgQ29tcG9zaXRlRmlsZXN5c3RlbX0gb3ZlciB0aGUgTkFNRUQgc2tpbGwgZm9sZGVyc1xuICogcmVzb2x2ZWQgZm9yIHRoYXQgcmVxdWVzdC4gQSBza2lsbCBmb2xkZXIgbWFwcyBhIG5hbWUgdG8gYSBsb2NhdGlvbiBwbHVzIGl0c1xuICogcmVhZGFibGUgLyB3cml0YWJsZSBwb2xpY3k6IGEgRGF0YWJyaWNrcyBwYXRoIG1vdW50ZWQgdGhyb3VnaCB0aGUgT0JPIGNsaWVudFxuICogb24ge0BsaW5rIE1BU1RSQV9VU0VSX0tFWX0sIG9yIGFueSB7QGxpbmsgV29ya3NwYWNlRmlsZXN5c3RlbX0gYSBjb25zdW1pbmdcbiAqIGxpYnJhcnkgYWxyZWFkeSBvd25zLiB7QGxpbmsgREVGQVVMVF9TS0lMTF9GT0xERVJTfSBzdXBwbGllcyB0aGUgQXNzaXN0YW50XG4gKiB0cmVlcywgYW5kIGBza2lsbEZvbGRlcnNgIG1lcmdlcyBvdmVyIGl0IC0gc2FtZSBuYW1lIG92ZXJyaWRlcywgYGZhbHNlYFxuICogZGlzYWJsZXMsIGEgbmV3IG5hbWUgYWRkcy4gT3B0aW9uYWwgbW91bnQgcmVzb2x2ZXJzIGNvbnRyaWJ1dGUgZnVydGhlclxuICogZmlsZXN5c3RlbXMgYW5kIHNraWxsIHNjYW4gcm9vdHMgb24gdG9wLlxuICpcbiAqIERhdGFicmlja3MgbW91bnRzIHVzZSBgQGRieC10b29scy9kYXRhYnJpY2tzYCB7QGxpbmsgRGF0YWJyaWNrc0ZpbGVTeXN0ZW19XG4gKiB3cmFwcGVkIGJ5IHtAbGluayBmaWxlc3lzdGVtc307IG1pc3Npbmcgcm9vdHMgZmFsbCBiYWNrIHRvXG4gKiB7QGxpbmsgc2NyYXRjaEZpbGVzeXN0ZW19LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRXJyb3IsIGNyZWF0ZVdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgRGF0YWJyaWNrc0ZpbGVTeXN0ZW0sIHdvcmtzcGFjZSBhcyBkYXRhYnJpY2tzV29ya3NwYWNlIH0gZnJvbSBcIkBkYngtdG9vbHMvZGF0YWJyaWNrc1wiO1xuaW1wb3J0IHsgZXJyb3IsIGxvZywgb2JqZWN0LCBzdHJpbmcsIHRva2VuIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgUmVxdWVzdENvbnRleHQgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3JlcXVlc3QtY29udGV4dFwiO1xuaW1wb3J0IHtcbiAgQ29tcG9zaXRlRmlsZXN5c3RlbSxcbiAgV29ya3NwYWNlLFxuICB0eXBlIFNraWxsc0NvbnRleHQsXG4gIHR5cGUgU2tpbGxzUmVzb2x2ZXIsXG4gIHR5cGUgV29ya3NwYWNlRmlsZXN5c3RlbSxcbiAgdHlwZSBXb3Jrc3BhY2VTYW5kYm94LFxuICB0eXBlIFdvcmtzcGFjZVNhbmRib3hSZXNvbHZlcixcbn0gZnJvbSBcIkBtYXN0cmEvY29yZS93b3Jrc3BhY2VcIjtcblxuaW1wb3J0IHsgTUFTVFJBX1NDT1BFU19LRVksIE1BU1RSQV9VU0VSX0VNQUlMX0tFWSwgTUFTVFJBX1VTRVJfS0VZLCB0eXBlIFVzZXIgfSBmcm9tIFwiLi9jb25maWcudHNcIjtcbmltcG9ydCB7IHNjcmF0Y2hGaWxlc3lzdGVtLCBmaWxlc3lzdGVtcyB9IGZyb20gXCIuL2ZpbGVzeXN0ZW1zLnRzXCI7XG5pbXBvcnQgeyBNb250eVNhbmRib3ggfSBmcm9tIFwiLi9tb250eS1zYW5kYm94LnRzXCI7XG5pbXBvcnQgeyBEYXRhYnJpY2tzU2FuZGJveCwgdHlwZSBEYXRhYnJpY2tzV29ya3NwYWNlU2FuZGJveE9wdGlvbnMgfSBmcm9tIFwiLi9zYW5kYm94LnRzXCI7XG5pbXBvcnQgeyBBU1NJU1RBTlRfU0hBUkVEX1NLSUxMU19QQVRILCB1c2VyQXNzaXN0YW50U2tpbGxzUGF0aCB9IGZyb20gXCIuL3NraWxsLXBhdGhzLnRzXCI7XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKiBPQXV0aCBzY29wZXMgdGhhdCBnYXRlIERhdGFicmlja3Mgd29ya3NwYWNlIGZpbGUgbW91bnRzLiAqL1xuY29uc3QgV09SS1NQQUNFX0ZJTEVfU0NPUEVTID0gW1wid29ya3NwYWNlXCIsIFwid29ya3NwYWNlLndvcmtzcGFjZVwiLCBcImFsbC1hcGlzXCJdIGFzIGNvbnN0O1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwibWFzdHJhL3dvcmtzcGFjZXNcIik7XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKiBQZXItcmVxdWVzdCBjb250ZXh0IGZvciBtb3VudCBhbmQgc2tpbGwtZm9sZGVyIHJlc29sdmVycy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya3NwYWNlTW91bnRDb250ZXh0IHtcbiAgcmVxdWVzdENvbnRleHQ/OiBSZXF1ZXN0Q29udGV4dDtcbn1cblxuLyoqXG4gKiBBIHNraWxsLWZvbGRlciBmaWVsZCBnaXZlbiBlaXRoZXIgZGlyZWN0bHkgb3IgYXMgYSBwZXItcmVxdWVzdCByZXNvbHZlci5cbiAqIEEgcmVzb2x2ZXIgcmV0dXJuaW5nIGB1bmRlZmluZWRgIHNraXBzIHRoZSBmb2xkZXIgZm9yIHRoYXQgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IHR5cGUgU2tpbGxGb2xkZXJWYWx1ZTxUPiA9XG4gIFQgfCAoKGNvbnRleHQ6IFdvcmtzcGFjZU1vdW50Q29udGV4dCkgPT4gVCB8IHVuZGVmaW5lZCB8IFByb21pc2U8VCB8IHVuZGVmaW5lZD4pO1xuXG4vKipcbiAqIE9uZSBuYW1lZCBza2lsbC1mb2xkZXIgbG9jYXRpb24gYW5kIGl0cyByZWFkIC8gd3JpdGUgcG9saWN5LlxuICpcbiAqIEdpdmUge0BsaW5rIHBhdGh9IGZvciBhIERhdGFicmlja3Mgd29ya3NwYWNlIHRyZWUgKG1vdW50ZWQgdGhyb3VnaCB0aGVcbiAqIHJlcXVlc3QncyBPQk8gY2xpZW50KSwgb3Ige0BsaW5rIGZpbGVzeXN0ZW19IGZvciBhIG1vdW50IHRoZSBjb25zdW1lciBidWlsZHNcbiAqIGl0c2VsZi4ge0BsaW5rIGZpbGVzeXN0ZW19IHdpbnMgd2hlbiBib3RoIGFyZSBzZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2tpbGxGb2xkZXJPcHRpb25zIHtcbiAgLyoqIEFic29sdXRlIERhdGFicmlja3Mgd29ya3NwYWNlIHBhdGggZm9yIHRoaXMgZm9sZGVyLiAqL1xuICBwYXRoPzogU2tpbGxGb2xkZXJWYWx1ZTxzdHJpbmc+O1xuICAvKiogUmVhZHktbWFkZSBtb3VudCwgZm9yIGxvY2F0aW9ucyB0aGUgT0JPIGNsaWVudCBjYW5ub3QgcmVhY2guICovXG4gIGZpbGVzeXN0ZW0/OiBTa2lsbEZvbGRlclZhbHVlPFdvcmtzcGFjZUZpbGVzeXN0ZW0+O1xuICAvKipcbiAgICogU2NhbiB0aGlzIG1vdW50IGZvciBgU0tJTEwubWRgIGZpbGVzLiBEZWZhdWx0cyB0byBgdHJ1ZWA7IGBmYWxzZWAgbW91bnRzXG4gICAqIHRoZSBsb2NhdGlvbiBmb3IgZmlsZSB0b29scyB3aXRob3V0IGFkZGluZyBpdCB0byBza2lsbCBkaXNjb3ZlcnkuXG4gICAqL1xuICByZWFkYWJsZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBbGxvdyB3cml0ZXMgdG8gYSB7QGxpbmsgcGF0aH0gbW91bnQgKGFuZCBjcmVhdGUgdGhlIHJvb3Qgd2hlbiBtaXNzaW5nKS5cbiAgICogRGVmYXVsdHMgdG8gYGZhbHNlYC4gQSBzdXBwbGllZCB7QGxpbmsgZmlsZXN5c3RlbX0gY2FycmllcyBpdHMgb3duXG4gICAqIHJlYWQtb25seSBmbGFnIGluc3RlYWQuXG4gICAqL1xuICB3cml0YWJsZT86IGJvb2xlYW47XG4gIC8qKiBNb3VudCBwb2ludCBpbiB0aGUgY29tcG9zaXRlIG5hbWVzcGFjZS4gRGVmYXVsdHMgdG8gYC88bmFtZT5gLiAqL1xuICBtb3VudD86IHN0cmluZztcbn1cblxuLyoqIE1vdW50IG1hcCBwbHVzIG9wdGlvbmFsIE1hc3RyYSBza2lsbCBzY2FuIHJvb3RzIGZvciBvbmUgcmVzb2x2ZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uIHtcbiAgbW91bnRzOiBSZWNvcmQ8c3RyaW5nLCBXb3Jrc3BhY2VGaWxlc3lzdGVtPjtcbiAgLyoqIFBhdGhzIHdpdGhpbiB0aGUgY29tcG9zaXRlIG5hbWVzcGFjZSB3aGVyZSBgU0tJTEwubWRgIGZpbGVzIGFyZSBzY2FubmVkLiAqL1xuICBza2lsbFBhdGhzPzogc3RyaW5nW107XG59XG5cbi8qKiBDb250cmlidXRlcyBmaWxlc3lzdGVtIG1vdW50cyAoYW5kIG9wdGlvbmFsIHNraWxsIHBhdGhzKSBmb3Igb25lIHJlcXVlc3QuICovXG5leHBvcnQgdHlwZSBXb3Jrc3BhY2VNb3VudFJlc29sdmVyID0gKFxuICBjb250ZXh0OiBXb3Jrc3BhY2VNb3VudENvbnRleHQsXG4pID0+IFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uIHwgUHJvbWlzZTxXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbj47XG5cbi8qKiBOYW1lcyBjYXJyaWVkIGJ5IHtAbGluayBERUZBVUxUX1NLSUxMX0ZPTERFUlN9LiAqL1xuZXhwb3J0IHR5cGUgRGVmYXVsdFNraWxsRm9sZGVyTmFtZSA9IFwid29ya3NwYWNlLXRlYW1cIiB8IFwid29ya3NwYWNlLXRlYW0tYXBwXCI7XG5cbi8qKlxuICogU2FuZGJveCBzZWxlY3Rpb24gZm9yIHtAbGluayBjcmVhdGVXb3Jrc3BhY2V9LiBEYXRhYnJpY2tzIGlzIHRoZSBkZWZhdWx0O1xuICogYGZhbHNlYCBkaXNhYmxlcyBjb21tYW5kIGV4ZWN1dGlvbiwgYW5kIGEgTWFzdHJhIHByb3ZpZGVyIG9yIHJlc29sdmVyIGlzIGFuXG4gKiBleHBsaWNpdCByZXBsYWNlbWVudC5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya3NwYWNlU2FuZGJveFNlbGVjdGlvbiA9XG4gIHwgZmFsc2VcbiAgfCBcImRhdGFicmlja3NcIlxuICB8IFwibW9udHlcIlxuICB8IERhdGFicmlja3NXb3Jrc3BhY2VTYW5kYm94T3B0aW9uc1xuICB8IFdvcmtzcGFjZVNhbmRib3hcbiAgfCBXb3Jrc3BhY2VTYW5kYm94UmVzb2x2ZXI7XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgY3JlYXRlV29ya3NwYWNlfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlV29ya3NwYWNlT3B0aW9ucyB7XG4gIC8qKiBXb3Jrc3BhY2UgaWQ7IGRlcml2ZWQgZnJvbSBgbmFtZWAgb3IgYFwid29ya3NwYWNlXCJgIHdoZW4gb21pdHRlZC4gKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IG5hbWU7IGRlcml2ZWQgZnJvbSBgaWRgIHdoZW4gb21pdHRlZC4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFN0YXJ0IGZyb20ge0BsaW5rIERFRkFVTFRfU0tJTExfRk9MREVSU30uIERlZmF1bHRzIHRvIGB0cnVlYDsgYGZhbHNlYFxuICAgKiBzdGFydHMgZnJvbSBhbiBlbXB0eSBtYXAsIGxlYXZpbmcgb25seSB0aGUge0BsaW5rIHNraWxsRm9sZGVyc30gZ2l2ZW4gaGVyZS5cbiAgICovXG4gIGFzc2lzdGFudFNraWxscz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBOYW1lZCBza2lsbCBmb2xkZXJzIG1lcmdlZCBvdmVyIHtAbGluayBERUZBVUxUX1NLSUxMX0ZPTERFUlN9OiBhIG1hdGNoaW5nXG4gICAqIG5hbWUgb3ZlcnJpZGVzIHRoYXQgZGVmYXVsdCwgYGZhbHNlYCBkaXNhYmxlcyBpdCwgYW5kIGFueSBvdGhlciBuYW1lIGFkZHNcbiAgICogYSBmb2xkZXIuXG4gICAqL1xuICBza2lsbEZvbGRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBTa2lsbEZvbGRlck9wdGlvbnMgfCBmYWxzZT47XG4gIC8qKiBFeHRyYSBwZXItcmVxdWVzdCBtb3VudCByZXNvbHZlcnMgKHJ1biBhZnRlciB0aGUgc2tpbGwtZm9sZGVyIG1vdW50cykuICovXG4gIG1vdW50cz86IFdvcmtzcGFjZU1vdW50UmVzb2x2ZXJbXTtcbiAgLyoqIFJlcGxhY2UgdGhlIGF1dG8tYnVpbHQgZHluYW1pYyBza2lsbHMgcmVzb2x2ZXIuICovXG4gIHNraWxscz86IFNraWxsc1Jlc29sdmVyO1xuICAvKiogRm9yd2FyZGVkIHRvIE1hc3RyYSB3aGVuIHNraWxsIGRpc2NvdmVyeSBpcyBlbmFibGVkLiAqL1xuICBjaGVja1NraWxsRmlsZU10aW1lPzogYm9vbGVhbjtcbiAgLyoqIEVuYWJsZSBCTTI1IGtleXdvcmQgc2VhcmNoIG92ZXIgaW5kZXhlZCB3b3Jrc3BhY2UgY29udGVudC4gKi9cbiAgYm0yNT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDb21tYW5kIHNhbmRib3guIERlZmF1bHRzIHRvIERhdGFicmlja3MgU2FuZGJveC4gUGFzcyBgZmFsc2VgIHRvIGRpc2FibGVcbiAgICogY29tbWFuZCBleGVjdXRpb24sIG9yIGFuIGV4cGxpY2l0IE1hc3RyYSBzYW5kYm94L3Byb3ZpZGVyIHJlc29sdmVyIHRvXG4gICAqIHJlcGxhY2UgRGF0YWJyaWNrcyBmb3IgdGhpcyB3b3Jrc3BhY2UuXG4gICAqL1xuICBzYW5kYm94PzogV29ya3NwYWNlU2FuZGJveFNlbGVjdGlvbjtcbiAgLyoqXG4gICAqIEV4dHJhIExPQ0FMIHNraWxsIHNjYW4gcGF0aHMgYWRkZWQgdG8gZXZlcnkgcmVxdWVzdCdzIHNraWxsIGRpc2NvdmVyeS5cbiAgICogVXNlZCBieSB0aGUgcGx1Z2luIHRvIHN1cmZhY2UgcmVtb3RlIHNraWxscyBwcm92aXNpb25lZCB0byBhIGxvY2FsIHRlbXBcbiAgICogZGlyIGF0IHN0YXJ0dXAgKHNlZSBgcmVtb3RlLXNraWxscy50c2ApLiBEYXRhYnJpY2tzLWhvc3RlZCByZW1vdGUgc2tpbGxzXG4gICAqIG5lZWQgbm8gZW50cnkgaGVyZSAtIHRoZXkgbGFuZCBpbiB0aGUgQXNzaXN0YW50IHRyZWUgdGhlIGJ1aWx0LWluIG1vdW50XG4gICAqIGFscmVhZHkgc2NhbnMuXG4gICAqL1xuICBleHRyYVNraWxsUGF0aHM/OiBzdHJpbmdbXTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBkZWZhdWx0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogVGhlIHNraWxsIGZvbGRlcnMgZXZlcnkgd29ya3NwYWNlIHN0YXJ0cyB3aXRoLlxuICpcbiAqIC0gYHdvcmtzcGFjZS10ZWFtYCAtIHRoZSBzaGFyZWQgd29ya3NwYWNlIEFzc2lzdGFudCB0cmVlLCByZWFkLW9ubHkgYmVjYXVzZVxuICogICB3cml0aW5nIGl0IGlzIGEgd29ya3NwYWNlLWFkbWluIGFjdGlvbi5cbiAqIC0gYHdvcmtzcGFjZS10ZWFtLWFwcGAgLSB0aGUgcmVxdWVzdGluZyB1c2VyJ3Mgb3duIEFzc2lzdGFudCB0cmVlLCB3cml0YWJsZVxuICogICBzbyB0aGUgYXBwIGNhbiBzYXZlIHNraWxscyBiYWNrIHRvIGl0LiBTa2lwcGVkIHdoZW4gdGhlIHJlcXVlc3QgY2FycmllcyBub1xuICogICB1c2VyIGVtYWlsLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9TS0lMTF9GT0xERVJTOiBSZWFkb25seTxSZWNvcmQ8RGVmYXVsdFNraWxsRm9sZGVyTmFtZSwgU2tpbGxGb2xkZXJPcHRpb25zPj4gPSB7XG4gIFwid29ya3NwYWNlLXRlYW1cIjoge1xuICAgIHBhdGg6IEFTU0lTVEFOVF9TSEFSRURfU0tJTExTX1BBVEgsXG4gICAgcmVhZGFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICB9LFxuICBcIndvcmtzcGFjZS10ZWFtLWFwcFwiOiB7XG4gICAgcGF0aDogKHsgcmVxdWVzdENvbnRleHQgfSkgPT4ge1xuICAgICAgY29uc3QgZW1haWwgPSByZXNvbHZlU2NvcGVkRW1haWwocmVxdWVzdENvbnRleHQpO1xuICAgICAgcmV0dXJuIGVtYWlsID8gdXNlckFzc2lzdGFudFNraWxsc1BhdGgoZW1haWwpIDogdW5kZWZpbmVkO1xuICAgIH0sXG4gICAgcmVhZGFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gIH0sXG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIE1hc3RyYSB7QGxpbmsgV29ya3NwYWNlfSB3aXRoIHBlci1yZXF1ZXN0IERhdGFicmlja3MgbW91bnRzLlxuICpcbiAqIEBleGFtcGxlIERlZmF1bHQgc2tpbGwgZm9sZGVycyBvbmx5XG4gKiBgYGB0c1xuICogY3JlYXRlV29ya3NwYWNlKClcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIE92ZXJyaWRlIGEgZGVmYXVsdCwgZHJvcCBhbm90aGVyLCBhbmQgYWRkIGEgbG9jYXRpb24gb2YgeW91ciBvd25cbiAqIGBgYHRzXG4gKiBjcmVhdGVXb3Jrc3BhY2Uoe1xuICogICBza2lsbEZvbGRlcnM6IHtcbiAqICAgICBcIndvcmtzcGFjZS10ZWFtXCI6IHsgcGF0aDogXCIvV29ya3NwYWNlL1NoYXJlZC90ZWFtLXNraWxsc1wiIH0sXG4gKiAgICAgXCJ3b3Jrc3BhY2UtdGVhbS1hcHBcIjogZmFsc2UsXG4gKiAgICAgcnVuYm9va3M6IHsgcGF0aDogXCIvV29ya3NwYWNlL1NoYXJlZC9ydW5ib29rcy9za2lsbHNcIiwgd3JpdGFibGU6IHRydWUgfSxcbiAqICAgICB2b2x1bWU6IHsgZmlsZXN5c3RlbTogbXlWb2x1bWVGaWxlc3lzdGVtIH0sXG4gKiAgIH0sXG4gKiB9KVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgU2tpbGwgZm9sZGVycyBwbHVzIGEgY3VzdG9tIG1vdW50IHJlc29sdmVyXG4gKiBgYGB0c1xuICogY3JlYXRlV29ya3NwYWNlKHtcbiAqICAgbW91bnRzOiBbXG4gKiAgICAgYXN5bmMgKHsgcmVxdWVzdENvbnRleHQgfSkgPT4gKHtcbiAqICAgICAgIG1vdW50czogeyBcIi9kYXRhXCI6IG15RmlsZXN5c3RlbSB9LFxuICogICAgICAgc2tpbGxQYXRoczogW10sXG4gKiAgICAgfSksXG4gKiAgIF0sXG4gKiB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3Jrc3BhY2Uob3B0aW9uczogQ3JlYXRlV29ya3NwYWNlT3B0aW9ucyA9IHt9KTogV29ya3NwYWNlIHtcbiAgY29uc3QgeyBpZCwgbmFtZSB9ID0gcmVzb2x2ZVdvcmtzcGFjZUlkZW50aXR5KG9wdGlvbnMpO1xuICBjb25zdCBza2lsbEZvbGRlcnMgPSByZXNvbHZlU2tpbGxGb2xkZXJzKG9wdGlvbnMpO1xuICBjb25zdCBmb2xkZXJOYW1lcyA9IE9iamVjdC5rZXlzKHNraWxsRm9sZGVycyk7XG4gIGNvbnN0IHJlc29sdmVycyA9IGJ1aWxkTW91bnRSZXNvbHZlcnMoc2tpbGxGb2xkZXJzLCBvcHRpb25zLm1vdW50cyk7XG4gIGNvbnN0IGV4dHJhU2tpbGxQYXRocyA9IG9wdGlvbnMuZXh0cmFTa2lsbFBhdGhzID8/IFtdO1xuICBjb25zdCBza2lsbHMgPVxuICAgIG9wdGlvbnMuc2tpbGxzID8/XG4gICAgKHJlc29sdmVycy5sZW5ndGggPiAwIHx8IGV4dHJhU2tpbGxQYXRocy5sZW5ndGggPiAwXG4gICAgICA/IGJ1aWxkV29ya3NwYWNlU2tpbGxzUmVzb2x2ZXIocmVzb2x2ZXJzLCBleHRyYVNraWxsUGF0aHMpXG4gICAgICA6IHVuZGVmaW5lZCk7XG4gIGNvbnN0IGNoZWNrU2tpbGxGaWxlTXRpbWUgPSBvcHRpb25zLmNoZWNrU2tpbGxGaWxlTXRpbWUgPz8gZm9sZGVyTmFtZXMubGVuZ3RoID4gMDtcbiAgY29uc3QgYm0yNSA9IG9wdGlvbnMuYm0yNSAhPT0gZmFsc2U7XG4gIGNvbnN0IHNhbmRib3ggPSByZXNvbHZlV29ya3NwYWNlU2FuZGJveChvcHRpb25zLnNhbmRib3gsIGlkLCBuYW1lKTtcbiAgbG9nZ2VyLmRlYnVnKFwid29ya3NwYWNlOmNyZWF0ZVwiLCB7XG4gICAgaWQsXG4gICAgbmFtZSxcbiAgICByZXNvbHZlckNvdW50OiByZXNvbHZlcnMubGVuZ3RoLFxuICAgIHNraWxsRm9sZGVyczogZm9sZGVyTmFtZXMsXG4gICAgY3VzdG9tTW91bnRSZXNvbHZlcnM6IG9wdGlvbnMubW91bnRzPy5sZW5ndGggPz8gMCxcbiAgICBjdXN0b21Ta2lsbHNSZXNvbHZlcjogQm9vbGVhbihvcHRpb25zLnNraWxscyksXG4gICAgY2hlY2tTa2lsbEZpbGVNdGltZSxcbiAgICBibTI1LFxuICAgIGV4dHJhU2tpbGxQYXRoczogZXh0cmFTa2lsbFBhdGhzLmxlbmd0aCxcbiAgICBzYW5kYm94OiBzYW5kYm94ID8gc2FuZGJveE5hbWUob3B0aW9ucy5zYW5kYm94KSA6IFwiZGlzYWJsZWRcIixcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBXb3Jrc3BhY2Uoe1xuICAgIGlkLFxuICAgIG5hbWUsXG4gICAgZmlsZXN5c3RlbTogKGNvbnRleHQpID0+IHJlc29sdmVXb3Jrc3BhY2VGaWxlc3lzdGVtKHJlc29sdmVycywgY29udGV4dCksXG4gICAgLi4uKHNraWxsc1xuICAgICAgPyB7XG4gICAgICAgICAgc2tpbGxzLFxuICAgICAgICAgIGNoZWNrU2tpbGxGaWxlTXRpbWUsXG4gICAgICAgIH1cbiAgICAgIDoge30pLFxuICAgIC4uLihzYW5kYm94XG4gICAgICA/IHtcbiAgICAgICAgICBzYW5kYm94LFxuICAgICAgICAgIGluc3RydWN0aW9uczogeyBkeW5hbWljU2FuZGJveDogXCJyZXNvbHZlXCIgYXMgY29uc3QgfSxcbiAgICAgICAgfVxuICAgICAgOiB7fSksXG4gICAgYm0yNSxcbiAgfSk7XG59XG5cbi8qKlxuICogTWVyZ2UgdGhlIGNvbmZpZ3VyZWQgc2tpbGwgZm9sZGVycyBvdmVyIHtAbGluayBERUZBVUxUX1NLSUxMX0ZPTERFUlN9LlxuICpcbiAqIGBhc3Npc3RhbnRTa2lsbHM6IGZhbHNlYCBkcm9wcyB0aGUgZGVmYXVsdHMsIGFuZCBhIGBmYWxzZWAgdmFsdWUgcmVtb3ZlcyBvbmVcbiAqIGVudHJ5IGJ5IG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU2tpbGxGb2xkZXJzKFxuICBvcHRpb25zOiBQaWNrPENyZWF0ZVdvcmtzcGFjZU9wdGlvbnMsIFwiYXNzaXN0YW50U2tpbGxzXCIgfCBcInNraWxsRm9sZGVyc1wiPiA9IHt9LFxuKTogUmVjb3JkPHN0cmluZywgU2tpbGxGb2xkZXJPcHRpb25zPiB7XG4gIGNvbnN0IG1lcmdlZDogUmVjb3JkPHN0cmluZywgU2tpbGxGb2xkZXJPcHRpb25zPiA9XG4gICAgb3B0aW9ucy5hc3Npc3RhbnRTa2lsbHMgPT09IGZhbHNlID8ge30gOiB7IC4uLkRFRkFVTFRfU0tJTExfRk9MREVSUyB9O1xuICBmb3IgKGNvbnN0IFtuYW1lLCBmb2xkZXJdIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMuc2tpbGxGb2xkZXJzID8/IHt9KSkge1xuICAgIGlmIChmb2xkZXIgPT09IGZhbHNlKSB7XG4gICAgICBkZWxldGUgbWVyZ2VkW25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXJnZWRbbmFtZV0gPSBmb2xkZXI7XG4gICAgfVxuICB9XG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcHJpdmF0ZSBoZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuZnVuY3Rpb24gcmVzb2x2ZVdvcmtzcGFjZVNhbmRib3goXG4gIHNlbGVjdGlvbjogV29ya3NwYWNlU2FuZGJveFNlbGVjdGlvbiB8IHVuZGVmaW5lZCxcbiAgd29ya3NwYWNlSWQ6IHN0cmluZyxcbiAgd29ya3NwYWNlTmFtZTogc3RyaW5nLFxuKTogV29ya3NwYWNlU2FuZGJveCB8IFdvcmtzcGFjZVNhbmRib3hSZXNvbHZlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvbmZpZ3VyZWQgPSBzZWxlY3Rpb24gPz8gXCJkYXRhYnJpY2tzXCI7XG4gIGlmIChjb25maWd1cmVkID09PSBmYWxzZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGNvbmZpZ3VyZWQgPT09IFwibW9udHlcIikgcmV0dXJuIG5ldyBNb250eVNhbmRib3goKTtcbiAgaWYgKHR5cGVvZiBjb25maWd1cmVkID09PSBcImZ1bmN0aW9uXCIgfHwgaXNTYW5kYm94KGNvbmZpZ3VyZWQpKSByZXR1cm4gY29uZmlndXJlZDtcblxuICBjb25zdCBvcHRpb25zOiBEYXRhYnJpY2tzV29ya3NwYWNlU2FuZGJveE9wdGlvbnMgPVxuICAgIGNvbmZpZ3VyZWQgPT09IFwiZGF0YWJyaWNrc1wiID8geyBwcm92aWRlcjogXCJkYXRhYnJpY2tzXCIgfSA6IGNvbmZpZ3VyZWQ7XG4gIHJldHVybiAoeyByZXF1ZXN0Q29udGV4dCB9KSA9PiB7XG4gICAgY29uc3QgdXNlciA9IHJlcXVlc3RDb250ZXh0LmdldChNQVNUUkFfVVNFUl9LRVkpIGFzIFVzZXIgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IucmVzb3VyY2VOb3RGb3VuZChcbiAgICAgICAgXCJEYXRhYnJpY2tzIHNhbmRib3ggdXNlciBjb250ZXh0XCIsXG4gICAgICAgIFwiSW52b2tlIGNvbW1hbmQgdG9vbHMgZnJvbSBhbiBhZ2VudCB0dXJuIHNlcnZlZCBieSB0aGUgTWFzdHJhIHBsdWdpbi5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ3VyZWRJZCA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5zYW5kYm94SWQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICA/IG9wdGlvbnMuc2FuZGJveElkKHsgcmVxdWVzdENvbnRleHQgfSlcbiAgICAgICAgOiBvcHRpb25zLnNhbmRib3hJZDtcbiAgICBjb25zdCBzYW5kYm94SWQgPSBjb25maWd1cmVkSWQgPz8gZGVmYXVsdFNhbmRib3hJZCh3b3Jrc3BhY2VJZCwgdXNlci5pZCk7XG4gICAgY29uc3QgY2xpZW50ID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLmNsaWVudCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgID8gb3B0aW9ucy5jbGllbnQoeyByZXF1ZXN0Q29udGV4dCB9KVxuICAgICAgICA6IChvcHRpb25zLmNsaWVudCA/PyBjcmVhdGVXb3Jrc3BhY2VDbGllbnQoKSk7XG4gICAgY29uc3Qge1xuICAgICAgcHJvdmlkZXI6IF9wcm92aWRlcixcbiAgICAgIHNhbmRib3hJZDogX3NhbmRib3hJZCxcbiAgICAgIGNsaWVudDogX2NsaWVudCxcbiAgICAgIC4uLnNhbmRib3hPcHRpb25zXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgcmV0dXJuIG5ldyBEYXRhYnJpY2tzU2FuZGJveCh7XG4gICAgICAuLi5zYW5kYm94T3B0aW9ucyxcbiAgICAgIGNsaWVudCxcbiAgICAgIHNhbmRib3hJZCxcbiAgICAgIGRpc3BsYXlOYW1lOiBvcHRpb25zLmRpc3BsYXlOYW1lID8/IGBNYXN0cmEgJHt3b3Jrc3BhY2VOYW1lfWAsXG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRTYW5kYm94SWQod29ya3NwYWNlSWQ6IHN0cmluZywgdXNlcklkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBkaWdlc3QgPSBjcmVhdGVIYXNoKFwic2hhMjU2XCIpXG4gICAgLnVwZGF0ZShvYmplY3QudG9TdGFibGVLZXkoeyB3b3Jrc3BhY2VJZCwgdXNlcklkIH0pKVxuICAgIC5kaWdlc3QoXCJoZXhcIilcbiAgICAuc2xpY2UoMCwgMzIpO1xuICByZXR1cm4gYG1hc3RyYS0ke2RpZ2VzdH1gO1xufVxuXG5mdW5jdGlvbiBpc1NhbmRib3godmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBXb3Jrc3BhY2VTYW5kYm94IHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIFwiaWRcIiBpbiB2YWx1ZSAmJiBcInByb3ZpZGVyXCIgaW4gdmFsdWUgJiYgXCJzdGF0dXNcIiBpbiB2YWx1ZSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gc2FuZGJveE5hbWUoc2VsZWN0aW9uOiBXb3Jrc3BhY2VTYW5kYm94U2VsZWN0aW9uIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgaWYgKHNlbGVjdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHNlbGVjdGlvbiA9PT0gXCJkYXRhYnJpY2tzXCIpIHJldHVybiBcImRhdGFicmlja3NcIjtcbiAgaWYgKHNlbGVjdGlvbiA9PT0gXCJtb250eVwiKSByZXR1cm4gXCJtb250eVwiO1xuICBpZiAoc2VsZWN0aW9uID09PSBmYWxzZSkgcmV0dXJuIFwiZGlzYWJsZWRcIjtcbiAgaWYgKHR5cGVvZiBzZWxlY3Rpb24gPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFwicmVzb2x2ZXJcIjtcbiAgcmV0dXJuIGlzU2FuZGJveChzZWxlY3Rpb24pID8gc2VsZWN0aW9uLnByb3ZpZGVyIDogKHNlbGVjdGlvbi5wcm92aWRlciA/PyBcImRhdGFicmlja3NcIik7XG59XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgdGhlIHJlcXVlc3QgdG9rZW4gY2FycmllcyBhIHNjb3BlIHRoYXQgYWxsb3dzIHdvcmtzcGFjZVxuICogZmlsZSBBUEkgYWNjZXNzIChgd29ya3NwYWNlYCBvciBgYWxsLWFwaXNgIG9uIHtAbGluayBNQVNUUkFfU0NPUEVTX0tFWX0pLlxuICovXG5mdW5jdGlvbiBoYXNXb3Jrc3BhY2VGaWxlU2NvcGUocmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiB0b2tlbi5pbmNsdWRlc0FjY2Vzc1Rva2VuU2NvcGUoXG4gICAgcmVxdWVzdENvbnRleHQ/LmdldChNQVNUUkFfU0NPUEVTX0tFWSksXG4gICAgV09SS1NQQUNFX0ZJTEVfU0NPUEVTLFxuICApO1xufVxuXG4vKipcbiAqIE1vdW50IHJlc29sdmVyIGZvciB0aGUgbmFtZWQgc2tpbGwgZm9sZGVycy5cbiAqXG4gKiBHYXRlcyBvbiB3b3Jrc3BhY2UgZmlsZSBzY29wZSAob3IgZGV2ZWxvcG1lbnQgbW9kZSksIHRoZW4gbW91bnRzIGV2ZXJ5XG4gKiBmb2xkZXIgd2hvc2UgbG9jYXRpb24gcmVzb2x2ZXMgZm9yIHRoaXMgcmVxdWVzdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNraWxsRm9sZGVyTW91bnRzKFxuICBza2lsbEZvbGRlcnM6IFJlY29yZDxzdHJpbmcsIFNraWxsRm9sZGVyT3B0aW9ucz4sXG4gIGNvbnRleHQ6IFdvcmtzcGFjZU1vdW50Q29udGV4dCxcbik6IFByb21pc2U8V29ya3NwYWNlTW91bnRDb250cmlidXRpb24+IHtcbiAgY29uc3QgbW91bnRzOiBSZWNvcmQ8c3RyaW5nLCBXb3Jrc3BhY2VGaWxlc3lzdGVtPiA9IHt9O1xuICBjb25zdCBza2lsbFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCByZXF1ZXN0Q29udGV4dCA9IGNvbnRleHQucmVxdWVzdENvbnRleHQ7XG5cbiAgaWYgKCFyZXF1ZXN0Q29udGV4dCB8fCAhc2hvdWxkTW91bnRTa2lsbEZvbGRlcnMocmVxdWVzdENvbnRleHQpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwic2tpbGwtZm9sZGVyczpza2lwcGVkXCIsIHtcbiAgICAgIHJlYXNvbjogIXJlcXVlc3RDb250ZXh0ID8gXCJuby1yZXF1ZXN0LWNvbnRleHRcIiA6IFwibWlzc2luZy13b3Jrc3BhY2Utc2NvcGVcIixcbiAgICAgIG5vZGVFbnY6IHByb2Nlc3MuZW52Lk5PREVfRU5WLFxuICAgICAgc2NvcGVzOiByZXF1ZXN0Q29udGV4dD8uZ2V0KE1BU1RSQV9TQ09QRVNfS0VZKSxcbiAgICB9KTtcbiAgICByZXR1cm4geyBtb3VudHMsIHNraWxsUGF0aHMgfTtcbiAgfVxuXG4gIGNvbnN0IHVzZXIgPSByZXF1ZXN0Q29udGV4dC5nZXQoTUFTVFJBX1VTRVJfS0VZKSBhcyBVc2VyIHwgdW5kZWZpbmVkO1xuICBjb25zdCBjbGllbnQgPSB1c2VyPy5leGVjdXRpb25Db250ZXh0LmNsaWVudCBhcyBXb3Jrc3BhY2VDbGllbnQgfCB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCBbbmFtZSwgZm9sZGVyXSBvZiBPYmplY3QuZW50cmllcyhza2lsbEZvbGRlcnMpKSB7XG4gICAgY29uc3QgZmlsZXN5c3RlbSA9IGF3YWl0IHJlc29sdmVTa2lsbEZvbGRlckZpbGVzeXN0ZW0obmFtZSwgZm9sZGVyLCBjb250ZXh0LCBjbGllbnQpO1xuICAgIGlmICghZmlsZXN5c3RlbSkgY29udGludWU7XG4gICAgY29uc3QgbW91bnQgPSBmb2xkZXIubW91bnQgPz8gYC8ke25hbWV9YDtcbiAgICBtb3VudHNbbW91bnRdID0gZmlsZXN5c3RlbTtcbiAgICBpZiAoZm9sZGVyLnJlYWRhYmxlICE9PSBmYWxzZSkgc2tpbGxQYXRocy5wdXNoKG1vdW50KTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhcInNraWxsLWZvbGRlcnM6bW91bnRlZFwiLCB7XG4gICAgbW91bnRLZXlzOiBPYmplY3Qua2V5cyhtb3VudHMpLFxuICAgIHNraWxsUGF0aHMsXG4gIH0pO1xuXG4gIHJldHVybiB7IG1vdW50cywgc2tpbGxQYXRocyB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgb25lIHNraWxsIGZvbGRlciB0byBhIE1hc3RyYSBmaWxlc3lzdGVtLCBvciBgdW5kZWZpbmVkYCB0byBza2lwIGl0XG4gKiBmb3IgdGhpcyByZXF1ZXN0LlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlU2tpbGxGb2xkZXJGaWxlc3lzdGVtKFxuICBuYW1lOiBzdHJpbmcsXG4gIGZvbGRlcjogU2tpbGxGb2xkZXJPcHRpb25zLFxuICBjb250ZXh0OiBXb3Jrc3BhY2VNb3VudENvbnRleHQsXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50IHwgdW5kZWZpbmVkLFxuKTogUHJvbWlzZTxXb3Jrc3BhY2VGaWxlc3lzdGVtIHwgdW5kZWZpbmVkPiB7XG4gIGlmIChmb2xkZXIuZmlsZXN5c3RlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHJlc29sdmVTa2lsbEZvbGRlclZhbHVlKGZvbGRlci5maWxlc3lzdGVtLCBjb250ZXh0KTtcbiAgfVxuICAvLyBBIHBhdGggbW91bnQgbmVlZHMgdGhlIHJlcXVlc3QncyBPQk8gY2xpZW50IHRvIHJlYWNoIHRoZSB3b3Jrc3BhY2UuXG4gIGlmIChmb2xkZXIucGF0aCA9PT0gdW5kZWZpbmVkIHx8ICFjbGllbnQpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJza2lsbC1mb2xkZXI6c2tpcHBlZFwiLCB7XG4gICAgICBuYW1lLFxuICAgICAgcmVhc29uOiBmb2xkZXIucGF0aCA9PT0gdW5kZWZpbmVkID8gXCJuby1sb2NhdGlvblwiIDogXCJtaXNzaW5nLW9iby1jbGllbnRcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJvb3QgPSBzdHJpbmcudHJpbVRvTnVsbChhd2FpdCByZXNvbHZlU2tpbGxGb2xkZXJWYWx1ZShmb2xkZXIucGF0aCwgY29udGV4dCkpO1xuICBpZiAoIXJvb3QpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBkYXRhYnJpY2tzRmlsZXN5c3RlbShjbGllbnQsIHJvb3QsIGZvbGRlci53cml0YWJsZSAhPT0gdHJ1ZSk7XG59XG5cbi8qKiBSZWFkIGEge0BsaW5rIFNraWxsRm9sZGVyVmFsdWV9LCBjYWxsaW5nIGl0IHdoZW4gaXQgaXMgYSBwZXItcmVxdWVzdCByZXNvbHZlci4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTa2lsbEZvbGRlclZhbHVlPFQ+KFxuICB2YWx1ZTogU2tpbGxGb2xkZXJWYWx1ZTxUPixcbiAgY29udGV4dDogV29ya3NwYWNlTW91bnRDb250ZXh0LFxuKTogVCB8IHVuZGVmaW5lZCB8IFByb21pc2U8VCB8IHVuZGVmaW5lZD4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICA/ICh2YWx1ZSBhcyAoY29udGV4dDogV29ya3NwYWNlTW91bnRDb250ZXh0KSA9PiBUIHwgdW5kZWZpbmVkIHwgUHJvbWlzZTxUIHwgdW5kZWZpbmVkPikoY29udGV4dClcbiAgICA6IHZhbHVlO1xufVxuXG4vKipcbiAqIEZpbGwgaW4gYGlkYCBhbmQgYG5hbWVgIHdoZW4gZWl0aGVyIGlzIG9taXR0ZWQgb24ge0BsaW5rIENyZWF0ZVdvcmtzcGFjZU9wdGlvbnN9LlxuICogU2x1Z2lmaWVzIGBuYW1lYCBpbnRvIGBpZGA7IHRva2VuaXplcyBgaWRgIGludG8gYSBkaXNwbGF5IGBuYW1lYC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVdvcmtzcGFjZUlkZW50aXR5KG9wdGlvbnM6IENyZWF0ZVdvcmtzcGFjZU9wdGlvbnMpOiB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbn0ge1xuICBsZXQgaWQgPSBvcHRpb25zLmlkO1xuICBsZXQgbmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgaWYgKCFpZCkge1xuICAgIGlkID0gbmFtZSA/IHN0cmluZy50b1NsdWcobmFtZSkgOiBcIndvcmtzcGFjZVwiO1xuICB9XG4gIGlmICghbmFtZSkge1xuICAgIG5hbWUgPSBBcnJheS5mcm9tKHN0cmluZy50b2tlbml6ZShpZCkpLmpvaW4oXCIgXCIpO1xuICB9XG4gIHJldHVybiB7IGlkLCBuYW1lIH07XG59XG5cbi8qKiBDb2xsZWN0IHRoZSBza2lsbC1mb2xkZXIgcmVzb2x2ZXIgYW5kIGFueSBjYWxsZXItc3VwcGxpZWQgb25lcy4gKi9cbmZ1bmN0aW9uIGJ1aWxkTW91bnRSZXNvbHZlcnMoXG4gIHNraWxsRm9sZGVyczogUmVjb3JkPHN0cmluZywgU2tpbGxGb2xkZXJPcHRpb25zPixcbiAgbW91bnRzOiBXb3Jrc3BhY2VNb3VudFJlc29sdmVyW10gfCB1bmRlZmluZWQsXG4pOiBXb3Jrc3BhY2VNb3VudFJlc29sdmVyW10ge1xuICBjb25zdCByZXNvbHZlcnM6IFdvcmtzcGFjZU1vdW50UmVzb2x2ZXJbXSA9IFtdO1xuICBjb25zdCBmb2xkZXJDb3VudCA9IE9iamVjdC5rZXlzKHNraWxsRm9sZGVycykubGVuZ3RoO1xuICBpZiAoZm9sZGVyQ291bnQgPiAwKSB7XG4gICAgcmVzb2x2ZXJzLnB1c2goKGNvbnRleHQpID0+IHJlc29sdmVTa2lsbEZvbGRlck1vdW50cyhza2lsbEZvbGRlcnMsIGNvbnRleHQpKTtcbiAgfVxuICBpZiAobW91bnRzPy5sZW5ndGgpIHtcbiAgICByZXNvbHZlcnMucHVzaCguLi5tb3VudHMpO1xuICB9XG4gIGxvZ2dlci5kZWJ1ZyhcIm1vdW50czpyZXNvbHZlcnNcIiwge1xuICAgIHNraWxsRm9sZGVyQ291bnQ6IGZvbGRlckNvdW50LFxuICAgIGN1c3RvbVJlc29sdmVyQ291bnQ6IG1vdW50cz8ubGVuZ3RoID8/IDAsXG4gICAgdG90YWxSZXNvbHZlckNvdW50OiByZXNvbHZlcnMubGVuZ3RoLFxuICB9KTtcbiAgcmV0dXJuIHJlc29sdmVycztcbn1cblxuLyoqXG4gKiBHYXRlIHNraWxsLWZvbGRlciBtb3VudHMgb24gdGhlIHJlcXVlc3QncyB0b2tlbi5cbiAqXG4gKiBBbHdheXMgYWxsb3dzIG1vdW50cyBpbiBkZXZlbG9wbWVudDsgaW4gb3RoZXIgZW52aXJvbm1lbnRzIHJlcXVpcmVzXG4gKiB7QGxpbmsgaGFzV29ya3NwYWNlRmlsZVNjb3BlfS5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkTW91bnRTa2lsbEZvbGRlcnMocmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0KTogYm9vbGVhbiB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGhhc1dvcmtzcGFjZUZpbGVTY29wZShyZXF1ZXN0Q29udGV4dCk7XG59XG5cbi8qKiBSZWFkIHRoZSB0cmltbWVkIE9CTyB1c2VyIGVtYWlsIHN0YW1wZWQgb24ge0BsaW5rIE1BU1RSQV9VU0VSX0VNQUlMX0tFWX0uICovXG5mdW5jdGlvbiByZXNvbHZlU2NvcGVkRW1haWwocmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0IHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHN0cmluZy50cmltVG9OdWxsKHJlcXVlc3RDb250ZXh0Py5nZXQoTUFTVFJBX1VTRVJfRU1BSUxfS0VZKSkgPz8gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFdyYXAgYSB7QGxpbmsgRGF0YWJyaWNrc0ZpbGVTeXN0ZW19IGFzIGEgTWFzdHJhIGZpbGVzeXN0ZW0uIFdoZW4gdGhlIHJvb3QgaXNcbiAqIG1pc3NpbmcgKGFuZCB7QGxpbmsgcmVhZE9ubHl9IHNvIHdlIHdpbGwgbm90IGNyZWF0ZSBpdCksIGZhbGwgYmFjayB0b1xuICoge0BsaW5rIHNjcmF0Y2hGaWxlc3lzdGVtfSBzbyBza2lsbCBzY2FucyBzdGlsbCBoYXZlIGEgd3JpdGFibGUgbG9jYWwgbW91bnQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRhdGFicmlja3NGaWxlc3lzdGVtKFxuICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCxcbiAgcm9vdDogc3RyaW5nLFxuICByZWFkT25seTogYm9vbGVhbiA9IHRydWUsXG4pOiBQcm9taXNlPFdvcmtzcGFjZUZpbGVzeXN0ZW0+IHtcbiAgY29uc3QgZnMgPSBuZXcgRGF0YWJyaWNrc0ZpbGVTeXN0ZW0oe1xuICAgIGNsaWVudDogZGF0YWJyaWNrc1dvcmtzcGFjZS50b0xlZ2FjeVdvcmtzcGFjZUNsaWVudChjbGllbnQpLFxuICAgIHJvb3QsXG4gICAgcmVhZE9ubHksXG4gICAgY3JlYXRlUm9vdDogIXJlYWRPbmx5LFxuICB9KTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5pbml0KCk7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhcIi5cIikpIHtcbiAgICAgIHJldHVybiBmaWxlc3lzdGVtcyhmcywgeyByZWFkT25seSB9KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImRhdGFicmlja3MtbW91bnQ6c2NyYXRjaC1mYWxsYmFja1wiLCB7XG4gICAgICByb290LFxuICAgICAgcmVhZE9ubHksXG4gICAgICBlcnJvcjogZXJyb3IuZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHNjcmF0Y2hGaWxlc3lzdGVtKCk7XG59XG5cbi8qKlxuICogUnVuIGV2ZXJ5IG1vdW50IHJlc29sdmVyIGZvciBvbmUgcmVxdWVzdCBhbmQgbWVyZ2UgbW91bnRzIHBsdXMgc2tpbGwgcGF0aHMuXG4gKiBMYXRlciByZXNvbHZlcnMgb3ZlcndyaXRlIG1vdW50IGtleXMgZnJvbSBlYXJsaWVyIG9uZXMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVXb3Jrc3BhY2VDb250cmlidXRpb24oXG4gIHJlc29sdmVyczogV29ya3NwYWNlTW91bnRSZXNvbHZlcltdLFxuICBjb250ZXh0OiBXb3Jrc3BhY2VNb3VudENvbnRleHQsXG4pOiBQcm9taXNlPFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uPiB7XG4gIGNvbnN0IG1vdW50czogUmVjb3JkPHN0cmluZywgV29ya3NwYWNlRmlsZXN5c3RlbT4gPSB7fTtcbiAgY29uc3Qgc2tpbGxQYXRoczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgcmVzb2x2ZXJdIG9mIHJlc29sdmVycy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBjb250cmlidXRpb24gPSBhd2FpdCByZXNvbHZlcihjb250ZXh0KTtcbiAgICBsb2dnZXIuZGVidWcoXCJtb3VudHM6cmVzb2x2ZXJcIiwge1xuICAgICAgaW5kZXgsXG4gICAgICBtb3VudEtleXM6IE9iamVjdC5rZXlzKGNvbnRyaWJ1dGlvbi5tb3VudHMpLFxuICAgICAgc2tpbGxQYXRoczogY29udHJpYnV0aW9uLnNraWxsUGF0aHMgPz8gW10sXG4gICAgfSk7XG4gICAgT2JqZWN0LmFzc2lnbihtb3VudHMsIGNvbnRyaWJ1dGlvbi5tb3VudHMpO1xuICAgIGlmIChjb250cmlidXRpb24uc2tpbGxQYXRocz8ubGVuZ3RoKSB7XG4gICAgICBza2lsbFBhdGhzLnB1c2goLi4uY29udHJpYnV0aW9uLnNraWxsUGF0aHMpO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhcIm1vdW50czptZXJnZWRcIiwge1xuICAgIG1vdW50S2V5czogT2JqZWN0LmtleXMobW91bnRzKSxcbiAgICBza2lsbFBhdGhzLFxuICB9KTtcblxuICByZXR1cm4geyBtb3VudHMsIHNraWxsUGF0aHMgfTtcbn1cblxuLyoqXG4gKiBEeW5hbWljIGZpbGVzeXN0ZW0gcmVzb2x2ZXIgcGFzc2VkIHRvIE1hc3RyYSB7QGxpbmsgV29ya3NwYWNlfS5cbiAqXG4gKiBSZXR1cm5zIGEge0BsaW5rIENvbXBvc2l0ZUZpbGVzeXN0ZW19IHdoZW4gYW55IG1vdW50IHJlc29sdmVkOyBvdGhlcndpc2UgYVxuICogZnJlc2gge0BsaW5rIHNjcmF0Y2hGaWxlc3lzdGVtfSBzbyBNYXN0cmEgYWx3YXlzIGhhcyBhIHdyaXRhYmxlIGxvY2FsIHJvb3QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVXb3Jrc3BhY2VGaWxlc3lzdGVtKFxuICByZXNvbHZlcnM6IFdvcmtzcGFjZU1vdW50UmVzb2x2ZXJbXSxcbiAgY29udGV4dDogV29ya3NwYWNlTW91bnRDb250ZXh0LFxuKTogUHJvbWlzZTxXb3Jrc3BhY2VGaWxlc3lzdGVtPiB7XG4gIGNvbnN0IHsgbW91bnRzIH0gPSBhd2FpdCByZXNvbHZlV29ya3NwYWNlQ29udHJpYnV0aW9uKHJlc29sdmVycywgY29udGV4dCk7XG4gIGNvbnN0IG1vdW50S2V5cyA9IE9iamVjdC5rZXlzKG1vdW50cyk7XG4gIGlmIChtb3VudEtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiZmlsZXN5c3RlbTpzY3JhdGNoXCIsIHtcbiAgICAgIGhhc1JlcXVlc3RDb250ZXh0OiBCb29sZWFuKGNvbnRleHQucmVxdWVzdENvbnRleHQpLFxuICAgIH0pO1xuICAgIHJldHVybiBzY3JhdGNoRmlsZXN5c3RlbSgpO1xuICB9XG4gIGxvZ2dlci5kZWJ1ZyhcImZpbGVzeXN0ZW06Y29tcG9zaXRlXCIsIHsgbW91bnRLZXlzIH0pO1xuICByZXR1cm4gbmV3IENvbXBvc2l0ZUZpbGVzeXN0ZW0oeyBtb3VudHMgfSk7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGR5bmFtaWMge0BsaW5rIFNraWxsc1Jlc29sdmVyfSB0aGF0IGNvbGxlY3RzIGBza2lsbFBhdGhzYCBmcm9tXG4gKiBldmVyeSBtb3VudCByZXNvbHZlciBvbiBlYWNoIHJlcXVlc3QuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkV29ya3NwYWNlU2tpbGxzUmVzb2x2ZXIoXG4gIHJlc29sdmVyczogV29ya3NwYWNlTW91bnRSZXNvbHZlcltdLFxuICBleHRyYVNraWxsUGF0aHM6IHN0cmluZ1tdID0gW10sXG4pOiBTa2lsbHNSZXNvbHZlciB7XG4gIHJldHVybiBhc3luYyAoY29udGV4dDogU2tpbGxzQ29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHsgc2tpbGxQYXRocyB9ID0gYXdhaXQgcmVzb2x2ZVdvcmtzcGFjZUNvbnRyaWJ1dGlvbihyZXNvbHZlcnMsIGNvbnRleHQpO1xuICAgIGNvbnN0IG1lcmdlZCA9IFsuLi4oc2tpbGxQYXRocyA/PyBbXSksIC4uLmV4dHJhU2tpbGxQYXRoc107XG4gICAgbG9nZ2VyLmRlYnVnKFwic2tpbGxzOnJlc29sdmVkXCIsIHsgc2tpbGxQYXRocywgZXh0cmFTa2lsbFBhdGhzIH0pO1xuICAgIHJldHVybiBtZXJnZWQ7XG4gIH07XG59XG4iXX0=
|
package/lib/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/_agent-route-context.ts","../src/agents.ts","../src/chart.ts","../src/config.ts","../src/defaults.ts","../src/filesystems.ts","../src/genie.ts","../src/history.ts","../src/identity.ts","../src/mcp.ts","../src/memory.ts","../src/mlflow.ts","../src/model.ts","../src/observability.ts","../src/pagination.ts","../src/plugin.ts","../src/processors.ts","../src/remote-skills.ts","../src/rest.ts","../src/server.ts","../src/serving-sanitize.ts","../src/serving.ts","../src/skill-paths.ts","../src/statement.ts","../src/storage-schema.ts","../src/style.ts","../src/summarize.ts","../src/threads.ts","../src/trace-io.ts","../src/validation.ts","../src/workspaces.ts","../src/writer.ts","../index.ts"],"version":"5.9.3"}
|
|
1
|
+
{"root":["../src/_agent-route-context.ts","../src/agents.ts","../src/chart.ts","../src/config.ts","../src/defaults.ts","../src/filesystems.ts","../src/genie.ts","../src/history.ts","../src/identity.ts","../src/mcp.ts","../src/memory.ts","../src/mlflow.ts","../src/model.ts","../src/monty-sandbox.ts","../src/observability.ts","../src/pagination.ts","../src/plugin.ts","../src/processors.ts","../src/remote-skills.ts","../src/rest.ts","../src/sandbox.ts","../src/server.ts","../src/serving-sanitize.ts","../src/serving.ts","../src/skill-paths.ts","../src/statement.ts","../src/storage-schema.ts","../src/style.ts","../src/summarize.ts","../src/threads.ts","../src/trace-io.ts","../src/validation.ts","../src/workspaces.ts","../src/writer.ts","../index.ts"],"version":"5.9.3"}
|
package/package.json
CHANGED
|
@@ -31,29 +31,30 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@databricks/appkit": "^0.60.0",
|
|
34
|
-
"@dbx-tools/appkit": "0.6.
|
|
35
|
-
"@dbx-tools/core": "0.6.
|
|
36
|
-
"@dbx-tools/databricks": "0.6.
|
|
37
|
-
"@dbx-tools/fs": "0.6.
|
|
38
|
-
"@dbx-tools/genie": "0.6.
|
|
39
|
-
"@dbx-tools/model": "0.6.
|
|
40
|
-
"@dbx-tools/path": "0.6.
|
|
41
|
-
"@dbx-tools/shared-core": "0.6.
|
|
42
|
-
"@dbx-tools/shared-fs": "0.6.
|
|
43
|
-
"@dbx-tools/shared-genie": "0.6.
|
|
44
|
-
"@dbx-tools/shared-mastra": "0.6.
|
|
45
|
-
"@dbx-tools/shared-model": "0.6.
|
|
46
|
-
"@mastra/ai-sdk": "1.
|
|
47
|
-
"@mastra/core": "1.
|
|
48
|
-
"@mastra/express": "1.
|
|
49
|
-
"@mastra/fastembed": "1.
|
|
50
|
-
"@mastra/mcp": "1.
|
|
51
|
-
"@mastra/memory": "1.
|
|
52
|
-
"@mastra/observability": "1.
|
|
53
|
-
"@mastra/otel-bridge": "1.
|
|
54
|
-
"@mastra/pg": "1.
|
|
34
|
+
"@dbx-tools/appkit": "0.6.217",
|
|
35
|
+
"@dbx-tools/core": "0.6.217",
|
|
36
|
+
"@dbx-tools/databricks": "0.6.217",
|
|
37
|
+
"@dbx-tools/fs": "0.6.217",
|
|
38
|
+
"@dbx-tools/genie": "0.6.217",
|
|
39
|
+
"@dbx-tools/model": "0.6.217",
|
|
40
|
+
"@dbx-tools/path": "0.6.217",
|
|
41
|
+
"@dbx-tools/shared-core": "0.6.217",
|
|
42
|
+
"@dbx-tools/shared-fs": "0.6.217",
|
|
43
|
+
"@dbx-tools/shared-genie": "0.6.217",
|
|
44
|
+
"@dbx-tools/shared-mastra": "0.6.217",
|
|
45
|
+
"@dbx-tools/shared-model": "0.6.217",
|
|
46
|
+
"@mastra/ai-sdk": "1.10.3",
|
|
47
|
+
"@mastra/core": "1.67.0",
|
|
48
|
+
"@mastra/express": "1.5.11",
|
|
49
|
+
"@mastra/fastembed": "1.3.1",
|
|
50
|
+
"@mastra/mcp": "1.18.0",
|
|
51
|
+
"@mastra/memory": "1.30.0",
|
|
52
|
+
"@mastra/observability": "1.17.8",
|
|
53
|
+
"@mastra/otel-bridge": "1.5.8",
|
|
54
|
+
"@mastra/pg": "1.25.0",
|
|
55
55
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
56
56
|
"@opentelemetry/api": "^1.9.1",
|
|
57
|
+
"@pydantic/monty": "0.0.23",
|
|
57
58
|
"express": "^5.1.0",
|
|
58
59
|
"pg": "^8.22.0",
|
|
59
60
|
"zod": "4.3.6"
|
|
@@ -72,7 +73,7 @@
|
|
|
72
73
|
"./package.json": "./package.json"
|
|
73
74
|
}
|
|
74
75
|
},
|
|
75
|
-
"version": "0.6.
|
|
76
|
+
"version": "0.6.217",
|
|
76
77
|
"types": "./lib/index.d.ts",
|
|
77
78
|
"type": "module",
|
|
78
79
|
"exports": {
|