@dbx-tools/cli-service 0.9.51 → 0.9.58

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/index.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/cli-service";
6
- export const PACKAGE_VERSION = "0.9.51";
6
+ export const PACKAGE_VERSION = "0.9.58";
7
7
  export * as cli from "./src/cli.ts";
8
8
  export * as definition from "./src/definition.ts";
9
9
  export * as icon from "./src/icon.ts";
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/cli-service";
2
- export declare const PACKAGE_VERSION = "0.9.51";
2
+ export declare const PACKAGE_VERSION = "0.9.58";
3
3
  export * as cli from "./src/cli.ts";
4
4
  export * as definition from "./src/definition.ts";
5
5
  export * as icon from "./src/icon.ts";
package/lib/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/cli-service";
5
- export const PACKAGE_VERSION = "0.9.51";
5
+ export const PACKAGE_VERSION = "0.9.58";
6
6
  export * as cli from "./src/cli.js";
7
7
  export * as definition from "./src/definition.js";
8
8
  export * as icon from "./src/icon.js";
@@ -10,4 +10,4 @@ export * as service from "./src/service.js";
10
10
  export { CliServiceInstallOptionsSchema } from "./src/cli.js";
11
11
  export { CliServiceCommandSchema, CliServiceMenuItemSchema, CliServicePythonPackageSchema, CliServiceDefinitionSchema } from "./src/definition.js";
12
12
  export { CliService } from "./src/service.js";
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyx3QkFBd0IsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHdCQUF3QixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkosT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9jbGktc2VydmljZVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjUxXCI7XG5leHBvcnQgKiBhcyBjbGkgZnJvbSBcIi4vc3JjL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgZGVmaW5pdGlvbiBmcm9tIFwiLi9zcmMvZGVmaW5pdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgaWNvbiBmcm9tIFwiLi9zcmMvaWNvbi50c1wiO1xuZXhwb3J0ICogYXMgc2VydmljZSBmcm9tIFwiLi9zcmMvc2VydmljZS50c1wiO1xuZXhwb3J0IHsgQ2xpU2VydmljZUluc3RhbGxPcHRpb25zU2NoZW1hIH0gZnJvbSBcIi4vc3JjL2NsaS50c1wiO1xuZXhwb3J0IHR5cGUgeyBDbGlTZXJ2aWNlRGVmaW5pdGlvblNvdXJjZSwgQ2xpU2VydmljZUNsaURlcGVuZGVuY2llcyB9IGZyb20gXCIuL3NyYy9jbGkudHNcIjtcbmV4cG9ydCB7IENsaVNlcnZpY2VDb21tYW5kU2NoZW1hLCBDbGlTZXJ2aWNlTWVudUl0ZW1TY2hlbWEsIENsaVNlcnZpY2VQeXRob25QYWNrYWdlU2NoZW1hLCBDbGlTZXJ2aWNlRGVmaW5pdGlvblNjaGVtYSB9IGZyb20gXCIuL3NyYy9kZWZpbml0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IENsaVNlcnZpY2VDb21tYW5kLCBDbGlTZXJ2aWNlQ29tbWFuZElucHV0LCBDbGlTZXJ2aWNlTWVudUl0ZW0sIENsaVNlcnZpY2VQeXRob25QYWNrYWdlLCBDbGlTZXJ2aWNlUHl0aG9uUGFja2FnZUlucHV0LCBDbGlTZXJ2aWNlRGVmaW5pdGlvbiwgQ2xpU2VydmljZURlZmluaXRpb25PcHRpb25zIH0gZnJvbSBcIi4vc3JjL2RlZmluaXRpb24udHNcIjtcbmV4cG9ydCB7IENsaVNlcnZpY2UgfSBmcm9tIFwiLi9zcmMvc2VydmljZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBDbGlTZXJ2aWNlQ29tcGlsZXIsIENsaVNlcnZpY2VSdW50aW1lSW5zdGFsbGVyLCBDbGlTZXJ2aWNlUHl0aG9uSW5zdGFsbGVyLCBDbGlTZXJ2aWNlUnVudGltZU9wdGlvbnMsIENsaVNlcnZpY2VTdGF0dXMsIENsaVNlcnZpY2VMaWZlY3ljbGUgfSBmcm9tIFwiLi9zcmMvc2VydmljZS50c1wiO1xuIl19
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyx3QkFBd0IsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHdCQUF3QixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkosT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9jbGktc2VydmljZVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjU4XCI7XG5leHBvcnQgKiBhcyBjbGkgZnJvbSBcIi4vc3JjL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgZGVmaW5pdGlvbiBmcm9tIFwiLi9zcmMvZGVmaW5pdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgaWNvbiBmcm9tIFwiLi9zcmMvaWNvbi50c1wiO1xuZXhwb3J0ICogYXMgc2VydmljZSBmcm9tIFwiLi9zcmMvc2VydmljZS50c1wiO1xuZXhwb3J0IHsgQ2xpU2VydmljZUluc3RhbGxPcHRpb25zU2NoZW1hIH0gZnJvbSBcIi4vc3JjL2NsaS50c1wiO1xuZXhwb3J0IHR5cGUgeyBDbGlTZXJ2aWNlRGVmaW5pdGlvblNvdXJjZSwgQ2xpU2VydmljZUNsaURlcGVuZGVuY2llcyB9IGZyb20gXCIuL3NyYy9jbGkudHNcIjtcbmV4cG9ydCB7IENsaVNlcnZpY2VDb21tYW5kU2NoZW1hLCBDbGlTZXJ2aWNlTWVudUl0ZW1TY2hlbWEsIENsaVNlcnZpY2VQeXRob25QYWNrYWdlU2NoZW1hLCBDbGlTZXJ2aWNlRGVmaW5pdGlvblNjaGVtYSB9IGZyb20gXCIuL3NyYy9kZWZpbml0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IENsaVNlcnZpY2VDb21tYW5kLCBDbGlTZXJ2aWNlQ29tbWFuZElucHV0LCBDbGlTZXJ2aWNlTWVudUl0ZW0sIENsaVNlcnZpY2VQeXRob25QYWNrYWdlLCBDbGlTZXJ2aWNlUHl0aG9uUGFja2FnZUlucHV0LCBDbGlTZXJ2aWNlRGVmaW5pdGlvbiwgQ2xpU2VydmljZURlZmluaXRpb25PcHRpb25zIH0gZnJvbSBcIi4vc3JjL2RlZmluaXRpb24udHNcIjtcbmV4cG9ydCB7IENsaVNlcnZpY2UgfSBmcm9tIFwiLi9zcmMvc2VydmljZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBDbGlTZXJ2aWNlQ29tcGlsZXIsIENsaVNlcnZpY2VSdW50aW1lSW5zdGFsbGVyLCBDbGlTZXJ2aWNlUHl0aG9uSW5zdGFsbGVyLCBDbGlTZXJ2aWNlUnVudGltZU9wdGlvbnMsIENsaVNlcnZpY2VTdGF0dXMsIENsaVNlcnZpY2VMaWZlY3ljbGUgfSBmcm9tIFwiLi9zcmMvc2VydmljZS50c1wiO1xuIl19
@@ -0,0 +1,2 @@
1
+ /** Compile an entrypoint while containing Bun's intermediate executables. */
2
+ export declare function compileWithBun(bunExecutable: string, entrypoint: string, output: string, workingDirectory: string, external?: readonly string[], temporaryDirectory?: string): Promise<void>;
@@ -0,0 +1,49 @@
1
+ import { mkdtemp, readdir, rm } from "node:fs/promises";
2
+ import { tmpdir } from "node:os";
3
+ import { join, resolve } from "node:path";
4
+ import * as exec from "@dbx-tools/core/exec";
5
+ /** Compile an entrypoint while containing Bun's intermediate executables. */
6
+ export async function compileWithBun(bunExecutable, entrypoint, output, workingDirectory, external = [], temporaryDirectory = tmpdir()) {
7
+ const absoluteEntrypoint = resolve(workingDirectory, entrypoint);
8
+ const absoluteOutput = resolve(workingDirectory, output);
9
+ const before = await bunBuildArtifacts(workingDirectory);
10
+ const compileDirectory = await mkdtemp(join(temporaryDirectory, "dbx-tools-bun-compile-"));
11
+ try {
12
+ await exec.spawn(bunExecutable, [
13
+ "build",
14
+ absoluteEntrypoint,
15
+ "--compile",
16
+ "--compile-autoload-package-json",
17
+ "--outfile",
18
+ absoluteOutput,
19
+ ...external.flatMap((dependency) => ["--external", dependency]),
20
+ ], {
21
+ check: true,
22
+ cwd: compileDirectory,
23
+ stdin: "ignore",
24
+ stdout: "capture",
25
+ stderr: "capture",
26
+ });
27
+ }
28
+ finally {
29
+ try {
30
+ for (const artifact of await bunBuildArtifacts(workingDirectory)) {
31
+ if (!before.has(artifact)) {
32
+ await rm(join(workingDirectory, artifact), {
33
+ recursive: true,
34
+ force: true,
35
+ });
36
+ }
37
+ }
38
+ }
39
+ finally {
40
+ await rm(compileDirectory, { recursive: true, force: true });
41
+ }
42
+ }
43
+ }
44
+ async function bunBuildArtifacts(directory) {
45
+ return new Set((await readdir(directory))
46
+ .filter((name) => name.startsWith(".") && name.endsWith(".bun-build"))
47
+ .sort());
48
+ }
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2NvbXBpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvX2NvbXBpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNqQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUUxQyxPQUFPLEtBQUssSUFBSSxNQUFNLHNCQUFzQixDQUFDO0FBRTdDLDZFQUE2RTtBQUM3RSxNQUFNLENBQUMsS0FBSyxVQUFVLGNBQWMsQ0FDbEMsYUFBcUIsRUFDckIsVUFBa0IsRUFDbEIsTUFBYyxFQUNkLGdCQUF3QixFQUN4QixXQUE4QixFQUFFLEVBQ2hDLHFCQUE2QixNQUFNLEVBQUU7SUFFckMsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDakUsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELE1BQU0sTUFBTSxHQUFHLE1BQU0saUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN6RCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7SUFDM0YsSUFBSSxDQUFDO1FBQ0gsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUNkLGFBQWEsRUFDYjtZQUNFLE9BQU87WUFDUCxrQkFBa0I7WUFDbEIsV0FBVztZQUNYLGlDQUFpQztZQUNqQyxXQUFXO1lBQ1gsY0FBYztZQUNkLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDaEUsRUFDRDtZQUNFLEtBQUssRUFBRSxJQUFJO1lBQ1gsR0FBRyxFQUFFLGdCQUFnQjtZQUNyQixLQUFLLEVBQUUsUUFBUTtZQUNmLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLE1BQU0sRUFBRSxTQUFTO1NBQ2xCLENBQ0YsQ0FBQztJQUNKLENBQUM7WUFBUyxDQUFDO1FBQ1QsSUFBSSxDQUFDO1lBQ0gsS0FBSyxNQUFNLFFBQVEsSUFBSSxNQUFNLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztnQkFDakUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDMUIsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxFQUFFO3dCQUN6QyxTQUFTLEVBQUUsSUFBSTt3QkFDZixLQUFLLEVBQUUsSUFBSTtxQkFDWixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2dCQUFTLENBQUM7WUFDVCxNQUFNLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0QsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsS0FBSyxVQUFVLGlCQUFpQixDQUFDLFNBQWlCO0lBQ2hELE9BQU8sSUFBSSxHQUFHLENBQ1osQ0FBQyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN2QixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNyRSxJQUFJLEVBQUUsQ0FDVixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1rZHRlbXAsIHJlYWRkaXIsIHJtIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBqb2luLCByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuXG5pbXBvcnQgKiBhcyBleGVjIGZyb20gXCJAZGJ4LXRvb2xzL2NvcmUvZXhlY1wiO1xuXG4vKiogQ29tcGlsZSBhbiBlbnRyeXBvaW50IHdoaWxlIGNvbnRhaW5pbmcgQnVuJ3MgaW50ZXJtZWRpYXRlIGV4ZWN1dGFibGVzLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbXBpbGVXaXRoQnVuKFxuICBidW5FeGVjdXRhYmxlOiBzdHJpbmcsXG4gIGVudHJ5cG9pbnQ6IHN0cmluZyxcbiAgb3V0cHV0OiBzdHJpbmcsXG4gIHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZyxcbiAgZXh0ZXJuYWw6IHJlYWRvbmx5IHN0cmluZ1tdID0gW10sXG4gIHRlbXBvcmFyeURpcmVjdG9yeTogc3RyaW5nID0gdG1wZGlyKCksXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYWJzb2x1dGVFbnRyeXBvaW50ID0gcmVzb2x2ZSh3b3JraW5nRGlyZWN0b3J5LCBlbnRyeXBvaW50KTtcbiAgY29uc3QgYWJzb2x1dGVPdXRwdXQgPSByZXNvbHZlKHdvcmtpbmdEaXJlY3RvcnksIG91dHB1dCk7XG4gIGNvbnN0IGJlZm9yZSA9IGF3YWl0IGJ1bkJ1aWxkQXJ0aWZhY3RzKHdvcmtpbmdEaXJlY3RvcnkpO1xuICBjb25zdCBjb21waWxlRGlyZWN0b3J5ID0gYXdhaXQgbWtkdGVtcChqb2luKHRlbXBvcmFyeURpcmVjdG9yeSwgXCJkYngtdG9vbHMtYnVuLWNvbXBpbGUtXCIpKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjLnNwYXduKFxuICAgICAgYnVuRXhlY3V0YWJsZSxcbiAgICAgIFtcbiAgICAgICAgXCJidWlsZFwiLFxuICAgICAgICBhYnNvbHV0ZUVudHJ5cG9pbnQsXG4gICAgICAgIFwiLS1jb21waWxlXCIsXG4gICAgICAgIFwiLS1jb21waWxlLWF1dG9sb2FkLXBhY2thZ2UtanNvblwiLFxuICAgICAgICBcIi0tb3V0ZmlsZVwiLFxuICAgICAgICBhYnNvbHV0ZU91dHB1dCxcbiAgICAgICAgLi4uZXh0ZXJuYWwuZmxhdE1hcCgoZGVwZW5kZW5jeSkgPT4gW1wiLS1leHRlcm5hbFwiLCBkZXBlbmRlbmN5XSksXG4gICAgICBdLFxuICAgICAge1xuICAgICAgICBjaGVjazogdHJ1ZSxcbiAgICAgICAgY3dkOiBjb21waWxlRGlyZWN0b3J5LFxuICAgICAgICBzdGRpbjogXCJpZ25vcmVcIixcbiAgICAgICAgc3Rkb3V0OiBcImNhcHR1cmVcIixcbiAgICAgICAgc3RkZXJyOiBcImNhcHR1cmVcIixcbiAgICAgIH0sXG4gICAgKTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiBhd2FpdCBidW5CdWlsZEFydGlmYWN0cyh3b3JraW5nRGlyZWN0b3J5KSkge1xuICAgICAgICBpZiAoIWJlZm9yZS5oYXMoYXJ0aWZhY3QpKSB7XG4gICAgICAgICAgYXdhaXQgcm0oam9pbih3b3JraW5nRGlyZWN0b3J5LCBhcnRpZmFjdCksIHtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIGZvcmNlOiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHJtKGNvbXBpbGVEaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gYnVuQnVpbGRBcnRpZmFjdHMoZGlyZWN0b3J5OiBzdHJpbmcpOiBQcm9taXNlPFNldDxzdHJpbmc+PiB7XG4gIHJldHVybiBuZXcgU2V0KFxuICAgIChhd2FpdCByZWFkZGlyKGRpcmVjdG9yeSkpXG4gICAgICAuZmlsdGVyKChuYW1lKSA9PiBuYW1lLnN0YXJ0c1dpdGgoXCIuXCIpICYmIG5hbWUuZW5kc1dpdGgoXCIuYnVuLWJ1aWxkXCIpKVxuICAgICAgLnNvcnQoKSxcbiAgKTtcbn1cbiJdfQ==
@@ -10,12 +10,12 @@
10
10
  */
11
11
  import { spawn } from "node:child_process";
12
12
  import { existsSync } from "node:fs";
13
- import { readdir, rm } from "node:fs/promises";
13
+ import { rm } from "node:fs/promises";
14
14
  import { createRequire } from "node:module";
15
15
  import { dirname, extname, join, resolve } from "node:path";
16
16
  import { fileURLToPath, pathToFileURL } from "node:url";
17
17
  import * as bin from "@dbx-tools/core/bin";
18
- import * as exec from "@dbx-tools/core/exec";
18
+ import { compileWithBun } from "./_compile.js";
19
19
  import { readServiceDefinition, writeServiceDefinition } from "./_config.js";
20
20
  import { requestServiceControl } from "./_control.js";
21
21
  import { resolveServicePackage } from "./_package.js";
@@ -271,46 +271,6 @@ function safeToken(value) {
271
271
  throw new TypeError(`invalid binary version: ${value}`);
272
272
  return token;
273
273
  }
274
- async function compileWithBun(bunExecutable, entrypoint, output, workingDirectory, external = []) {
275
- const before = await bunBuildArtifacts(workingDirectory);
276
- try {
277
- await exec.spawn(bunExecutable, [
278
- "build",
279
- entrypoint,
280
- "--compile",
281
- "--compile-autoload-package-json",
282
- "--outfile",
283
- output,
284
- ...external.flatMap((dependency) => ["--external", dependency]),
285
- ], {
286
- check: true,
287
- cwd: workingDirectory,
288
- env: {
289
- ...process.env,
290
- BUN_TMPDIR: dirname(output),
291
- TMPDIR: dirname(output),
292
- },
293
- stdin: "ignore",
294
- stdout: "capture",
295
- stderr: "capture",
296
- });
297
- }
298
- finally {
299
- for (const artifact of await bunBuildArtifacts(workingDirectory)) {
300
- if (!before.has(artifact)) {
301
- await rm(join(workingDirectory, artifact), {
302
- recursive: true,
303
- force: true,
304
- });
305
- }
306
- }
307
- }
308
- }
309
- async function bunBuildArtifacts(directory) {
310
- return new Set((await readdir(directory))
311
- .filter((name) => name.startsWith(".") && name.endsWith(".bun-build"))
312
- .sort());
313
- }
314
274
  async function waitForState(read, expected, timeoutMilliseconds, message) {
315
275
  const deadline = Date.now() + timeoutMilliseconds;
316
276
  while (Date.now() < deadline) {
@@ -320,4 +280,4 @@ async function waitForState(read, expected, timeoutMilliseconds, message) {
320
280
  }
321
281
  throw new Error(message);
322
282
  }
323
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXhELE9BQU8sS0FBSyxHQUFHLE1BQU0scUJBQXFCLENBQUM7QUFDM0MsT0FBTyxLQUFLLElBQUksTUFBTSxzQkFBc0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixtQkFBbUIsR0FFcEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLHVCQUF1QixFQUN2QiwyQkFBMkIsRUFDM0IscUJBQXFCLEdBQ3RCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFzQixNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQ0wsMEJBQTBCLEdBSTNCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsTUFBTSxrQ0FBa0MsR0FBRyxNQUFNLENBQUM7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QUFRLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDckUsSUFBSSxFQUFFLENBQ1YsQ0FBQztBQUNKLENBQUM7QUFFRCxLQUFLLFVBQVUsWUFBWSxDQUN6QixJQUE0QixFQUM1QixRQUFpQixFQUNqQixtQkFBMkIsRUFDM0IsT0FBZTtJQUVmLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQztJQUNsRCxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxLQUFLLFFBQVE7WUFBRSxPQUFPO1FBQ3hDLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEluc3RhbGwsIHN0YXJ0LCBzdG9wLCBhbmQgaW5zcGVjdCBhIHN5c3RlbS10cmF5IHVzZXIgc2VydmljZS5cbiAqXG4gKiBUaGlzIG1vZHVsZSBvd25zIGN1cnJlbnQtdXNlciBzZXJ2aWNlIGNvbXBpbGF0aW9uIGFuZCBsaWZlY3ljbGUgYWNyb3NzXG4gKiBjb25zdW1pbmcgQ0xJcy4gUmV1c2Uge0BsaW5rIENsaVNlcnZpY2V9IHJhdGhlciB0aGFuIGFkZGluZyBwcm9kdWN0LXNwZWNpZmljXG4gKiBpbnN0YWxsZXJzLCB1diBQeXRob24gZW52aXJvbm1lbnRzLCBzdGFydHVwIHJlZ2lzdHJhdGlvbiwgcnVudGltZVxuICogZGlyZWN0b3JpZXMsIG9yIGNvbnRyb2wgc29ja2V0cy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHJlYWRkaXIsIHJtIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGV4dG5hbWUsIGpvaW4sIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoLCBwYXRoVG9GaWxlVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5cbmltcG9ydCAqIGFzIGJpbiBmcm9tIFwiQGRieC10b29scy9jb3JlL2JpblwiO1xuaW1wb3J0ICogYXMgZXhlYyBmcm9tIFwiQGRieC10b29scy9jb3JlL2V4ZWNcIjtcblxuaW1wb3J0IHsgcmVhZFNlcnZpY2VEZWZpbml0aW9uLCB3cml0ZVNlcnZpY2VEZWZpbml0aW9uIH0gZnJvbSBcIi4vX2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgcmVxdWVzdFNlcnZpY2VDb250cm9sIH0gZnJvbSBcIi4vX2NvbnRyb2wudHNcIjtcbmltcG9ydCB7IHJlc29sdmVTZXJ2aWNlUGFja2FnZSwgdHlwZSBTZXJ2aWNlUGFja2FnZSB9IGZyb20gXCIuL19wYWNrYWdlLnRzXCI7XG5pbXBvcnQge1xuICBkZWZhdWx0UnVudGltZUNvbnRleHQsXG4gIHJlc29sdmVTZXJ2aWNlUGF0aHMsXG4gIHR5cGUgU2VydmljZVJ1bnRpbWVDb250ZXh0LFxufSBmcm9tIFwiLi9fcGF0aHMudHNcIjtcbmltcG9ydCB7XG4gIGV4dGVybmFsUnVudGltZVBhY2thZ2VzLFxuICBpbnN0YWxsU2VydmljZVB5dGhvblBhY2thZ2UsXG4gIGluc3RhbGxTZXJ2aWNlUnVudGltZSxcbn0gZnJvbSBcIi4vX3J1bnRpbWUudHNcIjtcbmltcG9ydCB7IGluc3RhbGxTdGFydHVwLCByZW1vdmVTdGFydHVwLCB0eXBlIFNlcnZpY2VMYXVuY2ggfSBmcm9tIFwiLi9fc3RhcnR1cC50c1wiO1xuaW1wb3J0IHtcbiAgQ2xpU2VydmljZURlZmluaXRpb25TY2hlbWEsXG4gIHR5cGUgQ2xpU2VydmljZUNvbW1hbmQsXG4gIHR5cGUgQ2xpU2VydmljZURlZmluaXRpb24sXG4gIHR5cGUgQ2xpU2VydmljZU1lbnVJdGVtLFxufSBmcm9tIFwiLi9kZWZpbml0aW9uLnRzXCI7XG5cbmNvbnN0IERFRkFVTFRfU1RBUlRfVElNRU9VVF9NSUxMSVNFQ09ORFMgPSAxNV8wMDA7XG5jb25zdCBERUZBVUxUX1NUT1BfVElNRU9VVF9NSUxMSVNFQ09ORFMgPSAxMF8wMDA7XG5jb25zdCBQT0xMX0lOVEVSVkFMX01JTExJU0VDT05EUyA9IDEwMDtcblxuLyoqIENvbXBpbGUgb25lIFR5cGVTY3JpcHQgb3IgSmF2YVNjcmlwdCBlbnRyeXBvaW50IGludG8gYSBzdGFuZGFsb25lIGV4ZWN1dGFibGUuICovXG5leHBvcnQgdHlwZSBDbGlTZXJ2aWNlQ29tcGlsZXIgPSAoXG4gIGVudHJ5cG9pbnQ6IHN0cmluZyxcbiAgb3V0cHV0OiBzdHJpbmcsXG4gIHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZyxcbiAgZXh0ZXJuYWw/OiByZWFkb25seSBzdHJpbmdbXSxcbikgPT4gUHJvbWlzZTx2b2lkPjtcblxuLyoqIEluc3RhbGwgZXhhY3QgZXh0ZXJuYWwgcnVudGltZSBkZXBlbmRlbmNpZXMgaW50byB0aGUgZGJ4LXRvb2xzIGhvbWUuICovXG5leHBvcnQgdHlwZSBDbGlTZXJ2aWNlUnVudGltZUluc3RhbGxlciA9IChcbiAgYnVuRXhlY3V0YWJsZTogc3RyaW5nLFxuICBkaXJlY3Rvcnk6IHN0cmluZyxcbiAgZGVwZW5kZW5jaWVzOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PixcbikgPT4gUHJvbWlzZTx2b2lkPjtcblxuLyoqIEluc3RhbGwgYSBQeXRob24gcGFja2FnZSBpbnRvIGEgc2VydmljZS1vd25lZCB1diBlbnZpcm9ubWVudC4gKi9cbmV4cG9ydCB0eXBlIENsaVNlcnZpY2VQeXRob25JbnN0YWxsZXIgPSAoXG4gIHV2RXhlY3V0YWJsZTogc3RyaW5nLFxuICBkaXJlY3Rvcnk6IHN0cmluZyxcbiAgcGFja2FnZVNwZWNpZmllcnM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBweXRob246IHN0cmluZyxcbiAgcGxhdGZvcm06IE5vZGVKUy5QbGF0Zm9ybSxcbikgPT4gUHJvbWlzZTxzdHJpbmc+O1xuXG4vKiogSG9zdCBydW50aW1lIG92ZXJyaWRlcyBmb3IgdGVzdHMsIGVtYmVkZGVkIGRpc3RyaWJ1dGlvbnMsIGFuZCBub25zdGFuZGFyZCBob21lcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpU2VydmljZVJ1bnRpbWVPcHRpb25zIHtcbiAgLyoqIE9wZXJhdGluZyBzeXN0ZW0gdXNlZCBmb3IgY29uZmlndXJhdGlvbiBhbmQgc3RhcnR1cCByZWdpc3RyYXRpb24uICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtPzogTm9kZUpTLlBsYXRmb3JtO1xuICAvKiogRW52aXJvbm1lbnQgdXNlZCB0byBsb2NhdGUgcGxhdGZvcm0gY29uZmlndXJhdGlvbiBkaXJlY3Rvcmllcy4gKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiBSZWFkb25seTxOb2RlSlMuUHJvY2Vzc0Vudj47XG4gIC8qKiBIb21lIGRpcmVjdG9yeSB1c2VkIHdoZW4gcGxhdGZvcm0gZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBhYnNlbnQuICovXG4gIHJlYWRvbmx5IGhvbWVEaXJlY3Rvcnk/OiBzdHJpbmc7XG4gIC8qKiBUZW1wb3JhcnkgZGlyZWN0b3J5IHVzZWQgZm9yIHRoZSBsb2NhbCBjb250cm9sIHNvY2tldC4gKi9cbiAgcmVhZG9ubHkgdGVtcG9yYXJ5RGlyZWN0b3J5Pzogc3RyaW5nO1xuICAvKiogU2hhcmVkIGRieC10b29scyBob21lIGNvbnRhaW5pbmcgaW5zdGFsbGVkIHNlcnZpY2UgYmluYXJpZXMuICovXG4gIHJlYWRvbmx5IGdsb2JhbEhvbWVEaXJlY3Rvcnk/OiBzdHJpbmc7XG4gIC8qKiBQYWNrYWdlLXByb3ZpZGVkIEJ1biBleGVjdXRhYmxlIG92ZXJyaWRlLiAqL1xuICByZWFkb25seSBidW5FeGVjdXRhYmxlPzogc3RyaW5nO1xuICAvKiogdXYgZXhlY3V0YWJsZSB1c2VkIGZvciBtYW5hZ2VkIFB5dGhvbiBwYWNrYWdlIGVudmlyb25tZW50cy4gKi9cbiAgcmVhZG9ubHkgdXZFeGVjdXRhYmxlPzogc3RyaW5nO1xuICAvKiogU3RhbmRhbG9uZSBjb21waWxlciBvdmVycmlkZS4gKi9cbiAgcmVhZG9ubHkgY29tcGlsZT86IENsaVNlcnZpY2VDb21waWxlcjtcbiAgLyoqIEV4dGVybmFsIHJ1bnRpbWUgZGVwZW5kZW5jeSBpbnN0YWxsZXIgb3ZlcnJpZGUuICovXG4gIHJlYWRvbmx5IGluc3RhbGxSdW50aW1lPzogQ2xpU2VydmljZVJ1bnRpbWVJbnN0YWxsZXI7XG4gIC8qKiBQeXRob24gcGFja2FnZSBpbnN0YWxsZXIgb3ZlcnJpZGUuICovXG4gIHJlYWRvbmx5IGluc3RhbGxQeXRob24/OiBDbGlTZXJ2aWNlUHl0aG9uSW5zdGFsbGVyO1xuICAvKiogU3lzdGVtLXRyYXkgaG9zdCBzb3VyY2UgZW50cnlwb2ludCBvdmVycmlkZS4gKi9cbiAgcmVhZG9ubHkgaG9zdEVudHJ5cG9pbnQ/OiBzdHJpbmc7XG4gIC8qKiBzeXN0cmF5MiBuYXRpdmUgZXhlY3V0YWJsZSBvdmVycmlkZS4gKi9cbiAgcmVhZG9ubHkgdHJheUV4ZWN1dGFibGU/OiBzdHJpbmc7XG59XG5cbi8qKiBPcHRpb25zIGNvbnRyb2xsaW5nIHNlcnZpY2UgaW5zdGFsbGF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGlTZXJ2aWNlSW5zdGFsbE9wdGlvbnMge1xuICAvKiogU3RhcnQgdGhlIHNlcnZpY2UgaW1tZWRpYXRlbHkgYWZ0ZXIgd3JpdGluZyBpdHMgY29uZmlndXJhdGlvbiBhbmQgbG9naW4gZW50cnkuICovXG4gIHJlYWRvbmx5IHN0YXJ0PzogYm9vbGVhbjtcbn1cblxuLyoqIEN1cnJlbnQgaW5zdGFsbGF0aW9uIGFuZCBwcm9jZXNzIHN0YXRlIGZvciBhIHN5c3RlbS10cmF5IHNlcnZpY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIENsaVNlcnZpY2VTdGF0dXMge1xuICAvKiogV2hldGhlciB0aGUgc2VyaWFsaXplZCBzZXJ2aWNlIGRlZmluaXRpb24gZXhpc3RzLiAqL1xuICByZWFkb25seSBpbnN0YWxsZWQ6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSB0cmF5IGhvc3QgYW5zd2VyZWQgaXRzIGxvY2FsIGNvbnRyb2wgc29ja2V0LiAqL1xuICByZWFkb25seSBydW5uaW5nOiBib29sZWFuO1xuICAvKiogVHJheSBob3N0IHByb2Nlc3MgSUQgd2hlbiBydW5uaW5nLiAqL1xuICByZWFkb25seSBwaWQ/OiBudW1iZXI7XG4gIC8qKiBNYW5hZ2VkIGNoaWxkIHByb2Nlc3MgSUQgd2hlbiB0aGUgZGVmaW5pdGlvbiBpbmNsdWRlcyBhIGNvbW1hbmQuICovXG4gIHJlYWRvbmx5IHNlcnZpY2VQaWQ/OiBudW1iZXI7XG59XG5cbi8qKiBMaWZlY3ljbGUgY29udHJhY3QgY29uc3VtZWQgYnkgQ0xJIGNvbW1hbmQgYnVpbGRlcnMuICovXG5leHBvcnQgaW50ZXJmYWNlIENsaVNlcnZpY2VMaWZlY3ljbGUge1xuICAvKiogSW5zdGFsbCB0aGUgbG9naW4gZW50cnkgYW5kIG9wdGlvbmFsbHkgc3RhcnQgdGhlIHNlcnZpY2UuICovXG4gIGluc3RhbGwob3B0aW9ucz86IENsaVNlcnZpY2VJbnN0YWxsT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBTdGFydCB0aGUgaW5zdGFsbGVkIHNlcnZpY2Ugd2hlbiBpdCBpcyBub3QgYWxyZWFkeSBydW5uaW5nLiAqL1xuICBzdGFydCgpOiBQcm9taXNlPHZvaWQ+O1xuICAvKiogU3RvcCB0aGUgcnVubmluZyB0cmF5IGhvc3QgYW5kIGl0cyBtYW5hZ2VkIGNoaWxkIHByb2Nlc3MuICovXG4gIHN0b3AoKTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqIFN0b3AgYW5kIHN0YXJ0IHRoZSBpbnN0YWxsZWQgc2VydmljZS4gKi9cbiAgcmVzdGFydCgpOiBQcm9taXNlPHZvaWQ+O1xuICAvKiogU3RvcCB0aGUgc2VydmljZSBhbmQgcmVtb3ZlIGl0cyBsb2dpbiBlbnRyeSBhbmQgcGFja2FnZS1vd25lZCBzdGF0ZS4gKi9cbiAgdW5pbnN0YWxsKCk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBSZWFkIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBhbmQgcHJvY2VzcyBzdGF0ZS4gKi9cbiAgc3RhdHVzKCk6IFByb21pc2U8Q2xpU2VydmljZVN0YXR1cz47XG59XG5cbi8qKiBDcm9zcy1wbGF0Zm9ybSBsaWZlY3ljbGUgbWFuYWdlciBmb3Igb25lIHN5c3RlbS10cmF5IHVzZXIgc2VydmljZS4gKi9cbmV4cG9ydCBjbGFzcyBDbGlTZXJ2aWNlIGltcGxlbWVudHMgQ2xpU2VydmljZUxpZmVjeWNsZSB7XG4gIHJlYWRvbmx5IGRlZmluaXRpb246IENsaVNlcnZpY2VEZWZpbml0aW9uO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcnVudGltZTogU2VydmljZVJ1bnRpbWVDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEhvbWVEaXJlY3Rvcnk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBidW5FeGVjdXRhYmxlOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgdXZFeGVjdXRhYmxlOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tcGlsZXI6IENsaVNlcnZpY2VDb21waWxlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBydW50aW1lSW5zdGFsbGVyOiBDbGlTZXJ2aWNlUnVudGltZUluc3RhbGxlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBweXRob25JbnN0YWxsZXI6IENsaVNlcnZpY2VQeXRob25JbnN0YWxsZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgaG9zdEVudHJ5cG9pbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB0cmF5RXhlY3V0YWJsZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBsaWZlY3ljbGUgbWFuYWdlciBmcm9tIGEgc2VyaWFsaXphYmxlIGRlZmluaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBkZWZpbml0aW9uIFByb2R1Y3Qtb3duZWQgc2VydmljZSBtZXRhZGF0YSwgcHJvY2VzcywgYW5kIG1lbnUuXG4gICAqIEBwYXJhbSBvcHRpb25zIEhvc3QgcnVudGltZSBvdmVycmlkZXMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihkZWZpbml0aW9uOiBDbGlTZXJ2aWNlRGVmaW5pdGlvbiwgb3B0aW9uczogQ2xpU2VydmljZVJ1bnRpbWVPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmRlZmluaXRpb24gPSBDbGlTZXJ2aWNlRGVmaW5pdGlvblNjaGVtYS5wYXJzZShkZWZpbml0aW9uKTtcbiAgICBjb25zdCBkZWZhdWx0cyA9IGRlZmF1bHRSdW50aW1lQ29udGV4dCgpO1xuICAgIHRoaXMucnVudGltZSA9IHtcbiAgICAgIHBsYXRmb3JtOiBvcHRpb25zLnBsYXRmb3JtID8/IGRlZmF1bHRzLnBsYXRmb3JtLFxuICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQgPz8gZGVmYXVsdHMuZW52aXJvbm1lbnQsXG4gICAgICBob21lRGlyZWN0b3J5OiBvcHRpb25zLmhvbWVEaXJlY3RvcnkgPz8gZGVmYXVsdHMuaG9tZURpcmVjdG9yeSxcbiAgICAgIHRlbXBvcmFyeURpcmVjdG9yeTogb3B0aW9ucy50ZW1wb3JhcnlEaXJlY3RvcnkgPz8gZGVmYXVsdHMudGVtcG9yYXJ5RGlyZWN0b3J5LFxuICAgIH07XG4gICAgdGhpcy5nbG9iYWxIb21lRGlyZWN0b3J5ID1cbiAgICAgIG9wdGlvbnMuZ2xvYmFsSG9tZURpcmVjdG9yeSA/PyBqb2luKHRoaXMucnVudGltZS5ob21lRGlyZWN0b3J5LCBcIi5kYngtdG9vbHNcIik7XG4gICAgdGhpcy5idW5FeGVjdXRhYmxlID0gb3B0aW9ucy5idW5FeGVjdXRhYmxlID8/IHJlc29sdmVCdW5FeGVjdXRhYmxlKCk7XG4gICAgdGhpcy51dkV4ZWN1dGFibGUgPSBvcHRpb25zLnV2RXhlY3V0YWJsZSA/PyBcInV2XCI7XG4gICAgdGhpcy5jb21waWxlciA9XG4gICAgICBvcHRpb25zLmNvbXBpbGUgPz9cbiAgICAgICgoZW50cnlwb2ludCwgb3V0cHV0LCB3b3JraW5nRGlyZWN0b3J5LCBleHRlcm5hbCkgPT5cbiAgICAgICAgY29tcGlsZVdpdGhCdW4odGhpcy5idW5FeGVjdXRhYmxlLCBlbnRyeXBvaW50LCBvdXRwdXQsIHdvcmtpbmdEaXJlY3RvcnksIGV4dGVybmFsKSk7XG4gICAgdGhpcy5ydW50aW1lSW5zdGFsbGVyID0gb3B0aW9ucy5pbnN0YWxsUnVudGltZSA/PyBpbnN0YWxsU2VydmljZVJ1bnRpbWU7XG4gICAgdGhpcy5weXRob25JbnN0YWxsZXIgPSBvcHRpb25zLmluc3RhbGxQeXRob24gPz8gaW5zdGFsbFNlcnZpY2VQeXRob25QYWNrYWdlO1xuICAgIHRoaXMuaG9zdEVudHJ5cG9pbnQgPSBvcHRpb25zLmhvc3RFbnRyeXBvaW50ID8/IHJlc29sdmVIb3N0RW50cnlwb2ludCgpO1xuICAgIHRoaXMudHJheUV4ZWN1dGFibGUgPSBvcHRpb25zLnRyYXlFeGVjdXRhYmxlID8/IHJlc29sdmVUcmF5RXhlY3V0YWJsZSh0aGlzLnJ1bnRpbWUucGxhdGZvcm0pO1xuICB9XG5cbiAgLyoqIEluc3RhbGwgdGhlIGxvZ2luIGVudHJ5IGFuZCBvcHRpb25hbGx5IHN0YXJ0IHRoZSBzZXJ2aWNlLiAqL1xuICBhc3luYyBpbnN0YWxsKG9wdGlvbnM6IENsaVNlcnZpY2VJbnN0YWxsT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgb3duZXIgPSByZXNvbHZlU2VydmljZVBhY2thZ2UodGhpcy5kZWZpbml0aW9uLnBhY2thZ2VOYW1lKTtcbiAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBvd25lci5kZXBlbmRlbmNpZXMoKTtcbiAgICBjb25zdCBleHRlcm5hbCA9IG5ldyBTZXQoZXh0ZXJuYWxSdW50aW1lUGFja2FnZXMoZGVwZW5kZW5jaWVzKSk7XG4gICAgYXdhaXQgdGhpcy5ydW50aW1lSW5zdGFsbGVyKFxuICAgICAgdGhpcy5idW5FeGVjdXRhYmxlLFxuICAgICAgdGhpcy5nbG9iYWxIb21lRGlyZWN0b3J5LFxuICAgICAgT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGRlcGVuZGVuY2llcykuZmlsdGVyKChbbmFtZV0pID0+IGV4dGVybmFsLmhhcyhuYW1lKSkpLFxuICAgICk7XG4gICAgY29uc3QgcGF0aHMgPSByZXNvbHZlU2VydmljZVBhdGhzKHRoaXMuZGVmaW5pdGlvbiwgdGhpcy5ydW50aW1lKTtcbiAgICBjb25zdCBpbnN0YWxsZWREZWZpbml0aW9uID0gYXdhaXQgdGhpcy5pbnN0YWxsRGVmaW5pdGlvbihvd25lciwgcGF0aHMuZGlyZWN0b3J5KTtcbiAgICBjb25zdCBob3N0ID0gYXdhaXQgdGhpcy5lbnN1cmVDb21waWxlZEJpbmFyeShcbiAgICAgIHRoaXMuYmluYXJ5TmFtZShpbnN0YWxsZWREZWZpbml0aW9uLCBcInNlcnZpY2VcIiksXG4gICAgICB0aGlzLmhvc3RFbnRyeXBvaW50LFxuICAgICAgcmVzb2x2ZShkaXJuYW1lKHRoaXMuaG9zdEVudHJ5cG9pbnQpLCBcIi4uXCIpLFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVUcmF5QmluYXJ5KCk7XG4gICAgYXdhaXQgdGhpcy5zdG9wKCk7XG4gICAgYXdhaXQgd3JpdGVTZXJ2aWNlRGVmaW5pdGlvbihwYXRocy5jb25maWdGaWxlLCBpbnN0YWxsZWREZWZpbml0aW9uKTtcbiAgICBhd2FpdCBpbnN0YWxsU3RhcnR1cChcbiAgICAgIGluc3RhbGxlZERlZmluaXRpb24sXG4gICAgICBwYXRocyxcbiAgICAgIHRoaXMucnVudGltZSxcbiAgICAgIHRoaXMubGF1bmNoKGhvc3QucGF0aCwgcGF0aHMuY29uZmlnRmlsZSksXG4gICAgKTtcbiAgICBpZiAob3B0aW9ucy5zdGFydCA/PyB0cnVlKSBhd2FpdCB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICAvKiogU3RhcnQgdGhlIGluc3RhbGxlZCBzZXJ2aWNlIHdoZW4gaXQgaXMgbm90IGFscmVhZHkgcnVubmluZy4gKi9cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGF0aHMgPSByZXNvbHZlU2VydmljZVBhdGhzKHRoaXMuZGVmaW5pdGlvbiwgdGhpcy5ydW50aW1lKTtcbiAgICBpZiAoIShhd2FpdCB0aGlzLnN0YXR1cygpKS5pbnN0YWxsZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmRlZmluaXRpb24ubmFtZX0gaXMgbm90IGluc3RhbGxlZGApO1xuICAgIH1cbiAgICBpZiAoKGF3YWl0IHJlcXVlc3RTZXJ2aWNlQ29udHJvbChwYXRocy5jb250cm9sQWRkcmVzcywgXCJzdGF0dXNcIikpICE9PSB1bmRlZmluZWQpIHJldHVybjtcblxuICAgIGNvbnN0IGluc3RhbGxlZERlZmluaXRpb24gPSBhd2FpdCByZWFkU2VydmljZURlZmluaXRpb24ocGF0aHMuY29uZmlnRmlsZSk7XG4gICAgY29uc3QgbGF1bmNoID0gdGhpcy5sYXVuY2goXG4gICAgICB0aGlzLmJpbmFyeUNvbnRleHQodGhpcy5iaW5hcnlOYW1lKGluc3RhbGxlZERlZmluaXRpb24sIFwic2VydmljZVwiKSkucGF0aCxcbiAgICAgIHBhdGhzLmNvbmZpZ0ZpbGUsXG4gICAgKTtcbiAgICBjb25zdCBjaGlsZCA9IHNwYXduKGxhdW5jaC5leGVjdXRhYmxlLCBsYXVuY2guYXJndW1lbnRzLCB7XG4gICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICAgIHN0ZGlvOiBcImlnbm9yZVwiLFxuICAgIH0pO1xuICAgIGNoaWxkLnVucmVmKCk7XG5cbiAgICBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgd2FpdEZvclN0YXRlKFxuICAgICAgICBhc3luYyAoKSA9PiAoYXdhaXQgcmVxdWVzdFNlcnZpY2VDb250cm9sKHBhdGhzLmNvbnRyb2xBZGRyZXNzLCBcInN0YXR1c1wiKSkgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgREVGQVVMVF9TVEFSVF9USU1FT1VUX01JTExJU0VDT05EUyxcbiAgICAgICAgYCR7dGhpcy5kZWZpbml0aW9uLm5hbWV9IGRpZCBub3Qgc3RhcnRgLFxuICAgICAgKSxcbiAgICAgIG5ldyBQcm9taXNlPG5ldmVyPigoX3Jlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjaGlsZC5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICAgICAgY2hpbGQub25jZShcImV4aXRcIiwgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYCR7dGhpcy5kZWZpbml0aW9uLm5hbWV9IGhvc3QgZXhpdGVkIGJlZm9yZSBzdGFydHVwICgke3NpZ25hbCA/PyBTdHJpbmcoY29kZSl9KWAsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgXSk7XG4gIH1cblxuICAvKiogU3RvcCB0aGUgcnVubmluZyB0cmF5IGhvc3QgYW5kIGl0cyBtYW5hZ2VkIGNoaWxkIHByb2Nlc3MuICovXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGF0aHMgPSByZXNvbHZlU2VydmljZVBhdGhzKHRoaXMuZGVmaW5pdGlvbiwgdGhpcy5ydW50aW1lKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RTZXJ2aWNlQ29udHJvbChwYXRocy5jb250cm9sQWRkcmVzcywgXCJzdG9wXCIpO1xuICAgIGlmICghcmVzcG9uc2UpIHJldHVybjtcbiAgICBhd2FpdCB3YWl0Rm9yU3RhdGUoXG4gICAgICBhc3luYyAoKSA9PiAoYXdhaXQgcmVxdWVzdFNlcnZpY2VDb250cm9sKHBhdGhzLmNvbnRyb2xBZGRyZXNzLCBcInN0YXR1c1wiKSkgIT09IHVuZGVmaW5lZCxcbiAgICAgIGZhbHNlLFxuICAgICAgREVGQVVMVF9TVE9QX1RJTUVPVVRfTUlMTElTRUNPTkRTLFxuICAgICAgYCR7dGhpcy5kZWZpbml0aW9uLm5hbWV9IGRpZCBub3Qgc3RvcGAsXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBTdG9wIGFuZCBzdGFydCB0aGUgaW5zdGFsbGVkIHNlcnZpY2UuICovXG4gIGFzeW5jIHJlc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zdG9wKCk7XG4gICAgYXdhaXQgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgLyoqIFN0b3AgdGhlIHNlcnZpY2UgYW5kIHJlbW92ZSBpdHMgbG9naW4gZW50cnkgYW5kIHBhY2thZ2Utb3duZWQgc3RhdGUuICovXG4gIGFzeW5jIHVuaW5zdGFsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYXRocyA9IHJlc29sdmVTZXJ2aWNlUGF0aHModGhpcy5kZWZpbml0aW9uLCB0aGlzLnJ1bnRpbWUpO1xuICAgIGF3YWl0IHRoaXMuc3RvcCgpO1xuICAgIGF3YWl0IHJlbW92ZVN0YXJ0dXAocGF0aHMpO1xuICAgIGF3YWl0IHJtKHBhdGhzLmRpcmVjdG9yeSwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqIFJlYWQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIGFuZCBwcm9jZXNzIHN0YXRlLiAqL1xuICBhc3luYyBzdGF0dXMoKTogUHJvbWlzZTxDbGlTZXJ2aWNlU3RhdHVzPiB7XG4gICAgY29uc3QgcGF0aHMgPSByZXNvbHZlU2VydmljZVBhdGhzKHRoaXMuZGVmaW5pdGlvbiwgdGhpcy5ydW50aW1lKTtcbiAgICBjb25zdCBpbnN0YWxsZWQgPSBleGlzdHNTeW5jKHBhdGhzLmNvbmZpZ0ZpbGUpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFNlcnZpY2VDb250cm9sKHBhdGhzLmNvbnRyb2xBZGRyZXNzLCBcInN0YXR1c1wiKTtcbiAgICByZXR1cm4ge1xuICAgICAgaW5zdGFsbGVkLFxuICAgICAgcnVubmluZzogcmVzcG9uc2UgIT09IHVuZGVmaW5lZCxcbiAgICAgIC4uLihyZXNwb25zZVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHBpZDogcmVzcG9uc2UucGlkLFxuICAgICAgICAgICAgLi4uKHJlc3BvbnNlLnNlcnZpY2VQaWQgPyB7IHNlcnZpY2VQaWQ6IHJlc3BvbnNlLnNlcnZpY2VQaWQgfSA6IHt9KSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGxhdW5jaChleGVjdXRhYmxlOiBzdHJpbmcsIGNvbmZpZ0ZpbGU6IHN0cmluZyk6IFNlcnZpY2VMYXVuY2gge1xuICAgIHJldHVybiB7XG4gICAgICBleGVjdXRhYmxlLFxuICAgICAgYXJndW1lbnRzOiBbXCItLXNlcnZpY2UtY29uZmlnXCIsIGNvbmZpZ0ZpbGVdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluc3RhbGxEZWZpbml0aW9uKFxuICAgIG93bmVyOiBTZXJ2aWNlUGFja2FnZSxcbiAgICBkaXJlY3Rvcnk6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxDbGlTZXJ2aWNlRGVmaW5pdGlvbj4ge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBDbGlTZXJ2aWNlRGVmaW5pdGlvblNjaGVtYS5wYXJzZSh7XG4gICAgICAuLi50aGlzLmRlZmluaXRpb24sXG4gICAgICB2ZXJzaW9uOiB0aGlzLmRlZmluaXRpb24udmVyc2lvbiA/PyBvd25lci52ZXJzaW9uLFxuICAgIH0pO1xuICAgIGlmICghZGVmaW5pdGlvbi52ZXJzaW9uKSB0aHJvdyBuZXcgRXJyb3IoYCR7ZGVmaW5pdGlvbi5uYW1lfSBoYXMgbm8gaW5zdGFsbGFibGUgdmVyc2lvbmApO1xuICAgIGNvbnN0IHB5dGhvblBhY2thZ2UgPSBkZWZpbml0aW9uLnB5dGhvblBhY2thZ2VcbiAgICAgID8ge1xuICAgICAgICAgIC4uLmRlZmluaXRpb24ucHl0aG9uUGFja2FnZSxcbiAgICAgICAgICB2ZXJzaW9uOiBkZWZpbml0aW9uLnB5dGhvblBhY2thZ2UudmVyc2lvbiA/PyBkZWZpbml0aW9uLnZlcnNpb24sXG4gICAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHB5dGhvbkVudmlyb25tZW50OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgaWYgKHB5dGhvblBhY2thZ2UpIHtcbiAgICAgIHB5dGhvbkVudmlyb25tZW50LlBZVEhPTiA9IGF3YWl0IHRoaXMucHl0aG9uSW5zdGFsbGVyKFxuICAgICAgICB0aGlzLnV2RXhlY3V0YWJsZSxcbiAgICAgICAgam9pbihkaXJlY3RvcnksIFwicHl0aG9uXCIpLFxuICAgICAgICBbYCR7cHl0aG9uUGFja2FnZS5uYW1lfT09JHtweXRob25QYWNrYWdlLnZlcnNpb259YCwgLi4ucHl0aG9uUGFja2FnZS5kZXBlbmRlbmNpZXNdLFxuICAgICAgICBweXRob25QYWNrYWdlLnB5dGhvbixcbiAgICAgICAgdGhpcy5ydW50aW1lLnBsYXRmb3JtLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgY29tbWFuZCA9IGRlZmluaXRpb24uY29tbWFuZFxuICAgICAgPyBhd2FpdCB0aGlzLmluc3RhbGxDb21tYW5kKFxuICAgICAgICAgIGRlZmluaXRpb24sXG4gICAgICAgICAgb3duZXIsXG4gICAgICAgICAgZGVmaW5pdGlvbi5jb21tYW5kLFxuICAgICAgICAgIFwiY29tbWFuZFwiLFxuICAgICAgICAgIHB5dGhvbkVudmlyb25tZW50LFxuICAgICAgICApXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBtZW51OiBDbGlTZXJ2aWNlTWVudUl0ZW1bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW2luZGV4LCBpdGVtXSBvZiAoZGVmaW5pdGlvbi5tZW51ID8/IFtdKS5lbnRyaWVzKCkpIHtcbiAgICAgIG1lbnUucHVzaChcbiAgICAgICAgaXRlbS50eXBlID09PSBcImNvbW1hbmRcIlxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICBjb21tYW5kOiBhd2FpdCB0aGlzLmluc3RhbGxDb21tYW5kKFxuICAgICAgICAgICAgICAgIGRlZmluaXRpb24sXG4gICAgICAgICAgICAgICAgb3duZXIsXG4gICAgICAgICAgICAgICAgaXRlbS5jb21tYW5kLFxuICAgICAgICAgICAgICAgIGBtZW51LSR7aW5kZXggKyAxfWAsXG4gICAgICAgICAgICAgICAgcHl0aG9uRW52aXJvbm1lbnQsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBpdGVtLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIENsaVNlcnZpY2VEZWZpbml0aW9uU2NoZW1hLnBhcnNlKHtcbiAgICAgIC4uLmRlZmluaXRpb24sXG4gICAgICAuLi4ocHl0aG9uUGFja2FnZSA/IHsgcHl0aG9uUGFja2FnZSB9IDoge30pLFxuICAgICAgLi4uKGNvbW1hbmQgPyB7IGNvbW1hbmQgfSA6IHt9KSxcbiAgICAgIC4uLihtZW51Lmxlbmd0aCA+IDAgPyB7IG1lbnUgfSA6IHt9KSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5zdGFsbENvbW1hbmQoXG4gICAgZGVmaW5pdGlvbjogQ2xpU2VydmljZURlZmluaXRpb24sXG4gICAgb3duZXI6IFNlcnZpY2VQYWNrYWdlLFxuICAgIGNvbW1hbmQ6IENsaVNlcnZpY2VDb21tYW5kLFxuICAgIHB1cnBvc2U6IHN0cmluZyxcbiAgICBydW50aW1lRW52aXJvbm1lbnQ6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+LFxuICApOiBQcm9taXNlPENsaVNlcnZpY2VDb21tYW5kPiB7XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSB7IC4uLmNvbW1hbmQuZW52aXJvbm1lbnQsIC4uLnJ1bnRpbWVFbnZpcm9ubWVudCB9O1xuICAgIGlmIChjb21tYW5kLmV4ZWN1dGFibGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmNvbW1hbmQsXG4gICAgICAgIC4uLihPYmplY3Qua2V5cyhlbnZpcm9ubWVudCkubGVuZ3RoID4gMCA/IHsgZW52aXJvbm1lbnQgfSA6IHt9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGVudHJ5cG9pbnQgPSBjb21tYW5kLmVudHJ5cG9pbnQgPz8gb3duZXIuYmluKGNvbW1hbmQuYmluTmFtZSk7XG4gICAgY29uc3QgaW5zdGFsbGVkID0gYXdhaXQgdGhpcy5lbnN1cmVDb21waWxlZEJpbmFyeShcbiAgICAgIHRoaXMuYmluYXJ5TmFtZShkZWZpbml0aW9uLCBwdXJwb3NlKSxcbiAgICAgIHJlc29sdmUoZW50cnlwb2ludCksXG4gICAgICBvd25lci5kaXJlY3RvcnksXG4gICAgICBleHRlcm5hbFJ1bnRpbWVQYWNrYWdlcyhvd25lci5kZXBlbmRlbmNpZXMoKSksXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgZXhlY3V0YWJsZTogaW5zdGFsbGVkLnBhdGgsXG4gICAgICAuLi4oY29tbWFuZC5hcmd1bWVudHMgPyB7IGFyZ3VtZW50czogY29tbWFuZC5hcmd1bWVudHMgfSA6IHt9KSxcbiAgICAgIC4uLihPYmplY3Qua2V5cyhlbnZpcm9ubWVudCkubGVuZ3RoID4gMCA/IHsgZW52aXJvbm1lbnQgfSA6IHt9KSxcbiAgICAgIGN3ZDogY29tbWFuZC5jd2QgPz8gdGhpcy5nbG9iYWxIb21lRGlyZWN0b3J5LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZUNvbXBpbGVkQmluYXJ5KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBlbnRyeXBvaW50OiBzdHJpbmcsXG4gICAgd29ya2luZ0RpcmVjdG9yeTogc3RyaW5nLFxuICAgIGV4dGVybmFsOiByZWFkb25seSBzdHJpbmdbXSA9IFtdLFxuICApOiBQcm9taXNlPGJpbi5CaW5Db250ZXh0PiB7XG4gICAgcmV0dXJuIGJpbi5lbnN1cmUoXG4gICAgICBuYW1lLFxuICAgICAgYXN5bmMgKHsgdGVtcERpciB9KSA9PiB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IGpvaW4odGVtcERpciwgZXhlY3V0YWJsZU5hbWUobmFtZSwgdGhpcy5ydW50aW1lLnBsYXRmb3JtKSk7XG4gICAgICAgIGF3YWl0IHRoaXMuY29tcGlsZXIoZW50cnlwb2ludCwgb3V0cHV0LCB3b3JraW5nRGlyZWN0b3J5LCBleHRlcm5hbCk7XG4gICAgICAgIHJldHVybiBwYXRoVG9GaWxlVVJMKG91dHB1dCkuaHJlZjtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRlc3RpbmF0aW9uOiB0aGlzLmJpbmFyeUNvbnRleHQobmFtZSksXG4gICAgICAgIHNraXBWZXJzaW9uQ2hlY2s6IHRydWUsXG4gICAgICAgIGZvcmNlOiB0cnVlLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVUcmF5QmluYXJ5KCk6IFByb21pc2U8YmluLkJpbkNvbnRleHQ+IHtcbiAgICBjb25zdCBuYW1lID0gdHJheUV4ZWN1dGFibGVOYW1lKHRoaXMucnVudGltZS5wbGF0Zm9ybSk7XG4gICAgY29uc3QgYmluRGlyID0gam9pbih0aGlzLmdsb2JhbEhvbWVEaXJlY3RvcnksIFwiYmluXCIsIFwidHJheWJpblwiKTtcbiAgICByZXR1cm4gYmluLmVuc3VyZShuYW1lLCBwYXRoVG9GaWxlVVJMKHRoaXMudHJheUV4ZWN1dGFibGUpLmhyZWYsIHtcbiAgICAgIGRlc3RpbmF0aW9uOiB7XG4gICAgICAgIHJvb3Q6IHRoaXMuZ2xvYmFsSG9tZURpcmVjdG9yeSxcbiAgICAgICAgYmluRGlyLFxuICAgICAgICBwYXRoOiBqb2luKGJpbkRpciwgbmFtZSksXG4gICAgICB9LFxuICAgICAgc2tpcFZlcnNpb25DaGVjazogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYmluYXJ5Q29udGV4dChuYW1lOiBzdHJpbmcpOiBiaW4uQmluQ29udGV4dCB7XG4gICAgY29uc3QgYmluRGlyID0gam9pbih0aGlzLmdsb2JhbEhvbWVEaXJlY3RvcnksIFwiYmluXCIpO1xuICAgIHJldHVybiB7XG4gICAgICByb290OiB0aGlzLmdsb2JhbEhvbWVEaXJlY3RvcnksXG4gICAgICBiaW5EaXIsXG4gICAgICBwYXRoOiBqb2luKGJpbkRpciwgZXhlY3V0YWJsZU5hbWUobmFtZSwgdGhpcy5ydW50aW1lLnBsYXRmb3JtKSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYmluYXJ5TmFtZShkZWZpbml0aW9uOiBDbGlTZXJ2aWNlRGVmaW5pdGlvbiwgcHVycG9zZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBuYW1lID0gc2FmZVRva2VuKGRlZmluaXRpb24ubmFtZS50b0xvd2VyQ2FzZSgpKS5yZXBsYWNlKC9bLl9dKy9nLCBcIi1cIik7XG4gICAgcmV0dXJuIHB1cnBvc2UgPT09IFwic2VydmljZVwiID8gbmFtZSA6IGAke25hbWV9LSR7cHVycG9zZX1gO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVIb3N0RW50cnlwb2ludCgpOiBzdHJpbmcge1xuICBjb25zdCBjdXJyZW50ID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpO1xuICBjb25zdCBzb3VyY2UgPVxuICAgIGV4dG5hbWUoY3VycmVudCkgPT09IFwiLnRzXCJcbiAgICAgID8gam9pbihkaXJuYW1lKGN1cnJlbnQpLCBcIl9ob3N0LnRzXCIpXG4gICAgICA6IHJlc29sdmUoZGlybmFtZShjdXJyZW50KSwgXCIuLlwiLCBcIi4uXCIsIFwic3JjXCIsIFwiX2hvc3QudHNcIik7XG4gIGlmIChleGlzdHNTeW5jKHNvdXJjZSkpIHJldHVybiBzb3VyY2U7XG4gIHRocm93IG5ldyBFcnJvcihgY291bGQgbm90IHJlc29sdmUgY2xpLXNlcnZpY2UgaG9zdCBzb3VyY2U6ICR7c291cmNlfWApO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQnVuRXhlY3V0YWJsZSgpOiBzdHJpbmcge1xuICByZXR1cm4gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpLnJlc29sdmUoXCJidW4vYmluL2J1bi5leGVcIik7XG59XG5cbmZ1bmN0aW9uIHRyYXlFeGVjdXRhYmxlTmFtZShwbGF0Zm9ybTogTm9kZUpTLlBsYXRmb3JtKTogc3RyaW5nIHtcbiAgaWYgKHBsYXRmb3JtID09PSBcImRhcndpblwiKSByZXR1cm4gXCJ0cmF5X2Rhcndpbl9yZWxlYXNlXCI7XG4gIGlmIChwbGF0Zm9ybSA9PT0gXCJsaW51eFwiKSByZXR1cm4gXCJ0cmF5X2xpbnV4X3JlbGVhc2VcIjtcbiAgaWYgKHBsYXRmb3JtID09PSBcIndpbjMyXCIpIHJldHVybiBcInRyYXlfd2luZG93c19yZWxlYXNlLmV4ZVwiO1xuICB0aHJvdyBuZXcgRXJyb3IoYHN5c3RyYXkyIGRvZXMgbm90IHN1cHBvcnQgJHtwbGF0Zm9ybX1gKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVRyYXlFeGVjdXRhYmxlKHBsYXRmb3JtOiBOb2RlSlMuUGxhdGZvcm0pOiBzdHJpbmcge1xuICBjb25zdCBtYW5pZmVzdCA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKS5yZXNvbHZlKFwic3lzdHJheTIvcGFja2FnZS5qc29uXCIpO1xuICByZXR1cm4gam9pbihkaXJuYW1lKG1hbmlmZXN0KSwgXCJ0cmF5YmluXCIsIHRyYXlFeGVjdXRhYmxlTmFtZShwbGF0Zm9ybSkpO1xufVxuXG5mdW5jdGlvbiBleGVjdXRhYmxlTmFtZShuYW1lOiBzdHJpbmcsIHBsYXRmb3JtOiBOb2RlSlMuUGxhdGZvcm0pOiBzdHJpbmcge1xuICByZXR1cm4gcGxhdGZvcm0gPT09IFwid2luMzJcIiA/IGAke25hbWV9LmV4ZWAgOiBuYW1lO1xufVxuXG5mdW5jdGlvbiBzYWZlVG9rZW4odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHRva2VuID0gdmFsdWUucmVwbGFjZSgvW15hLXowLTkuXy1dKy9naSwgXCItXCIpLnJlcGxhY2UoL14tK3wtKyQvZywgXCJcIik7XG4gIGlmICghdG9rZW4pIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgYmluYXJ5IHZlcnNpb246ICR7dmFsdWV9YCk7XG4gIHJldHVybiB0b2tlbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29tcGlsZVdpdGhCdW4oXG4gIGJ1bkV4ZWN1dGFibGU6IHN0cmluZyxcbiAgZW50cnlwb2ludDogc3RyaW5nLFxuICBvdXRwdXQ6IHN0cmluZyxcbiAgd29ya2luZ0RpcmVjdG9yeTogc3RyaW5nLFxuICBleHRlcm5hbDogcmVhZG9ubHkgc3RyaW5nW10gPSBbXSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBiZWZvcmUgPSBhd2FpdCBidW5CdWlsZEFydGlmYWN0cyh3b3JraW5nRGlyZWN0b3J5KTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjLnNwYXduKFxuICAgICAgYnVuRXhlY3V0YWJsZSxcbiAgICAgIFtcbiAgICAgICAgXCJidWlsZFwiLFxuICAgICAgICBlbnRyeXBvaW50LFxuICAgICAgICBcIi0tY29tcGlsZVwiLFxuICAgICAgICBcIi0tY29tcGlsZS1hdXRvbG9hZC1wYWNrYWdlLWpzb25cIixcbiAgICAgICAgXCItLW91dGZpbGVcIixcbiAgICAgICAgb3V0cHV0LFxuICAgICAgICAuLi5leHRlcm5hbC5mbGF0TWFwKChkZXBlbmRlbmN5KSA9PiBbXCItLWV4dGVybmFsXCIsIGRlcGVuZGVuY3ldKSxcbiAgICAgIF0sXG4gICAgICB7XG4gICAgICAgIGNoZWNrOiB0cnVlLFxuICAgICAgICBjd2Q6IHdvcmtpbmdEaXJlY3RvcnksXG4gICAgICAgIGVudjoge1xuICAgICAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgICAgIEJVTl9UTVBESVI6IGRpcm5hbWUob3V0cHV0KSxcbiAgICAgICAgICBUTVBESVI6IGRpcm5hbWUob3V0cHV0KSxcbiAgICAgICAgfSxcbiAgICAgICAgc3RkaW46IFwiaWdub3JlXCIsXG4gICAgICAgIHN0ZG91dDogXCJjYXB0dXJlXCIsXG4gICAgICAgIHN0ZGVycjogXCJjYXB0dXJlXCIsXG4gICAgICB9LFxuICAgICk7XG4gIH0gZmluYWxseSB7XG4gICAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiBhd2FpdCBidW5CdWlsZEFydGlmYWN0cyh3b3JraW5nRGlyZWN0b3J5KSkge1xuICAgICAgaWYgKCFiZWZvcmUuaGFzKGFydGlmYWN0KSkge1xuICAgICAgICBhd2FpdCBybShqb2luKHdvcmtpbmdEaXJlY3RvcnksIGFydGlmYWN0KSwge1xuICAgICAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICAgICAgICBmb3JjZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1bkJ1aWxkQXJ0aWZhY3RzKGRpcmVjdG9yeTogc3RyaW5nKTogUHJvbWlzZTxTZXQ8c3RyaW5nPj4ge1xuICByZXR1cm4gbmV3IFNldChcbiAgICAoYXdhaXQgcmVhZGRpcihkaXJlY3RvcnkpKVxuICAgICAgLmZpbHRlcigobmFtZSkgPT4gbmFtZS5zdGFydHNXaXRoKFwiLlwiKSAmJiBuYW1lLmVuZHNXaXRoKFwiLmJ1bi1idWlsZFwiKSlcbiAgICAgIC5zb3J0KCksXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JTdGF0ZShcbiAgcmVhZDogKCkgPT4gUHJvbWlzZTxib29sZWFuPixcbiAgZXhwZWN0ZWQ6IGJvb2xlYW4sXG4gIHRpbWVvdXRNaWxsaXNlY29uZHM6IG51bWJlcixcbiAgbWVzc2FnZTogc3RyaW5nLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIHRpbWVvdXRNaWxsaXNlY29uZHM7XG4gIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICBpZiAoKGF3YWl0IHJlYWQoKSkgPT09IGV4cGVjdGVkKSByZXR1cm47XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgUE9MTF9JTlRFUlZBTF9NSUxMSVNFQ09ORFMpKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iXX0=
283
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFeEQsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLHFCQUFxQixFQUF1QixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLG1CQUFtQixHQUVwQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDJCQUEyQixFQUMzQixxQkFBcUIsR0FDdEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQXNCLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFDTCwwQkFBMEIsR0FJM0IsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixNQUFNLGtDQUFrQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxNQUFNLGlDQUFpQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQztBQXdGdkMseUVBQXlFO0FBQ3pFLE1BQU0sT0FBTyxVQUFVO0lBQ1osVUFBVSxDQUF1QjtJQUV6QixPQUFPLENBQXdCO0lBQy9CLG1CQUFtQixDQUFTO0lBQzVCLGFBQWEsQ0FBUztJQUN0QixZQUFZLENBQVM7SUFDckIsUUFBUSxDQUFxQjtJQUM3QixnQkFBZ0IsQ0FBNkI7SUFDN0MsZUFBZSxDQUE0QjtJQUMzQyxjQUFjLENBQVM7SUFDdkIsY0FBYyxDQUFTO0lBRXhDOzs7OztPQUtHO0lBQ0gsWUFBWSxVQUFnQyxFQUFFLFVBQW9DLEVBQUU7UUFDbEYsSUFBSSxDQUFDLFVBQVUsR0FBRywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0QsTUFBTSxRQUFRLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ2IsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVE7WUFDL0MsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLFdBQVc7WUFDeEQsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhLElBQUksUUFBUSxDQUFDLGFBQWE7WUFDOUQsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixJQUFJLFFBQVEsQ0FBQyxrQkFBa0I7U0FDOUUsQ0FBQztRQUNGLElBQUksQ0FBQyxtQkFBbUI7WUFDdEIsT0FBTyxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUNyRSxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDO1FBQ2pELElBQUksQ0FBQyxRQUFRO1lBQ1gsT0FBTyxDQUFDLE9BQU87Z0JBQ2YsQ0FBQyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FDbEQsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsY0FBYyxJQUFJLHFCQUFxQixDQUFDO1FBQ3hFLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSwyQkFBMkIsQ0FBQztRQUM1RSxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxjQUFjLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUN4RSxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxjQUFjLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQsZ0VBQWdFO0lBQ2hFLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBb0MsRUFBRTtRQUNsRCxNQUFNLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMxQyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUN6QixJQUFJLENBQUMsYUFBYSxFQUNsQixJQUFJLENBQUMsbUJBQW1CLEVBQ3hCLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDeEYsQ0FBQztRQUNGLE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqRixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxTQUFTLENBQUMsRUFDL0MsSUFBSSxDQUFDLGNBQWMsRUFDbkIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQzVDLENBQUM7UUFDRixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sc0JBQXNCLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sY0FBYyxDQUNsQixtQkFBbUIsRUFDbkIsS0FBSyxFQUNMLElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FDekMsQ0FBQztRQUNGLElBQUksT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJO1lBQUUsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVELGtFQUFrRTtJQUNsRSxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssU0FBUztZQUFFLE9BQU87UUFFeEYsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQ3hFLEtBQUssQ0FBQyxVQUFVLENBQ2pCLENBQUM7UUFDRixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ3ZELFFBQVEsRUFBRSxJQUFJO1lBQ2QsS0FBSyxFQUFFLFFBQVE7U0FDaEIsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRWQsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2pCLFlBQVksQ0FDVixLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUN2RixJQUFJLEVBQ0osa0NBQWtDLEVBQ2xDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLGdCQUFnQixDQUN4QztZQUNELElBQUksT0FBTyxDQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUN0QyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDNUIsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUU7b0JBQ2xDLE1BQU0sQ0FDSixJQUFJLEtBQUssQ0FDUCxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxnQ0FBZ0MsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNqRixDQUNGLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0VBQWdFO0lBQ2hFLEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakUsTUFBTSxRQUFRLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUN0QixNQUFNLFlBQVksQ0FDaEIsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0scUJBQXFCLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFDdkYsS0FBSyxFQUNMLGlDQUFpQyxFQUNqQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxlQUFlLENBQ3ZDLENBQUM7SUFDSixDQUFDO0lBRUQsNENBQTRDO0lBQzVDLEtBQUssQ0FBQyxPQUFPO1FBQ1gsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSxLQUFLLENBQUMsU0FBUztRQUNiLE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCx1REFBdUQ7SUFDdkQsS0FBSyxDQUFDLE1BQU07UUFDVixNQUFNLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRSxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sUUFBUSxHQUFHLE1BQU0scUJBQXFCLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM3RSxPQUFPO1lBQ0wsU0FBUztZQUNULE9BQU8sRUFBRSxRQUFRLEtBQUssU0FBUztZQUMvQixHQUFHLENBQUMsUUFBUTtnQkFDVixDQUFDLENBQUM7b0JBQ0UsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHO29CQUNqQixHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7aUJBQ3BFO2dCQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDUixDQUFDO0lBQ0osQ0FBQztJQUVPLE1BQU0sQ0FBQyxVQUFrQixFQUFFLFVBQWtCO1FBQ25ELE9BQU87WUFDTCxVQUFVO1lBQ1YsU0FBUyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxDQUFDO1NBQzVDLENBQUM7SUFDSixDQUFDO0lBRU8sS0FBSyxDQUFDLGlCQUFpQixDQUM3QixLQUFxQixFQUNyQixTQUFpQjtRQUVqQixNQUFNLFVBQVUsR0FBRywwQkFBMEIsQ0FBQyxLQUFLLENBQUM7WUFDbEQsR0FBRyxJQUFJLENBQUMsVUFBVTtZQUNsQixPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU87U0FDbEQsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLDZCQUE2QixDQUFDLENBQUM7UUFDMUYsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLGFBQWE7WUFDNUMsQ0FBQyxDQUFDO2dCQUNFLEdBQUcsVUFBVSxDQUFDLGFBQWE7Z0JBQzNCLE9BQU8sRUFBRSxVQUFVLENBQUMsYUFBYSxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTzthQUNoRTtZQUNILENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDZCxNQUFNLGlCQUFpQixHQUEyQixFQUFFLENBQUM7UUFDckQsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUNuRCxJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUN6QixDQUFDLEdBQUcsYUFBYSxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQ2xGLGFBQWEsQ0FBQyxNQUFNLEVBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUN0QixDQUFDO1FBQ0osQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPO1lBQ2hDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQ3ZCLFVBQVUsRUFDVixLQUFLLEVBQ0wsVUFBVSxDQUFDLE9BQU8sRUFDbEIsU0FBUyxFQUNULGlCQUFpQixDQUNsQjtZQUNILENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDZCxNQUFNLElBQUksR0FBeUIsRUFBRSxDQUFDO1FBQ3RDLEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUztnQkFDckIsQ0FBQyxDQUFDO29CQUNFLEdBQUcsSUFBSTtvQkFDUCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUNoQyxVQUFVLEVBQ1YsS0FBSyxFQUNMLElBQUksQ0FBQyxPQUFPLEVBQ1osUUFBUSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQ25CLGlCQUFpQixDQUNsQjtpQkFDRjtnQkFDSCxDQUFDLENBQUMsSUFBSSxDQUNULENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTywwQkFBMEIsQ0FBQyxLQUFLLENBQUM7WUFDdEMsR0FBRyxVQUFVO1lBQ2IsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNyQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLGNBQWMsQ0FDMUIsVUFBZ0MsRUFDaEMsS0FBcUIsRUFDckIsT0FBMEIsRUFDMUIsT0FBZSxFQUNmLGtCQUFvRDtRQUVwRCxNQUFNLFdBQVcsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLGtCQUFrQixFQUFFLENBQUM7UUFDdEUsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdkIsT0FBTztnQkFDTCxHQUFHLE9BQU87Z0JBQ1YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ2hFLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRSxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FDL0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQ3BDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFDbkIsS0FBSyxDQUFDLFNBQVMsRUFDZix1QkFBdUIsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FDOUMsQ0FBQztRQUNGLE9BQU87WUFDTCxVQUFVLEVBQUUsU0FBUyxDQUFDLElBQUk7WUFDMUIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlELEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvRCxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsbUJBQW1CO1NBQzdDLENBQUM7SUFDSixDQUFDO0lBRU8sS0FBSyxDQUFDLG9CQUFvQixDQUNoQyxJQUFZLEVBQ1osVUFBa0IsRUFDbEIsZ0JBQXdCLEVBQ3hCLFdBQThCLEVBQUU7UUFFaEMsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUNmLElBQUksRUFDSixLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFO1lBQ3BCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDMUUsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDcEUsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3BDLENBQUMsRUFDRDtZQUNFLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztZQUNyQyxnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxnQkFBZ0I7UUFDNUIsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNoRSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQy9ELFdBQVcsRUFBRTtnQkFDWCxJQUFJLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtnQkFDOUIsTUFBTTtnQkFDTixJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7YUFDekI7WUFDRCxnQkFBZ0IsRUFBRSxJQUFJO1NBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxhQUFhLENBQUMsSUFBWTtRQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JELE9BQU87WUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtZQUM5QixNQUFNO1lBQ04sSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2hFLENBQUM7SUFDSixDQUFDO0lBRU8sVUFBVSxDQUFDLFVBQWdDLEVBQUUsT0FBZTtRQUNsRSxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDN0UsT0FBTyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzdELENBQUM7Q0FDRjtBQUVELFNBQVMscUJBQXFCO0lBQzVCLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sTUFBTSxHQUNWLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLO1FBQ3hCLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsQ0FBQztRQUNwQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMvRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFFRCxTQUFTLG9CQUFvQjtJQUMzQixPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLFFBQXlCO0lBQ25ELElBQUksUUFBUSxLQUFLLFFBQVE7UUFBRSxPQUFPLHFCQUFxQixDQUFDO0lBQ3hELElBQUksUUFBUSxLQUFLLE9BQU87UUFBRSxPQUFPLG9CQUFvQixDQUFDO0lBQ3RELElBQUksUUFBUSxLQUFLLE9BQU87UUFBRSxPQUFPLDBCQUEwQixDQUFDO0lBQzVELE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQUMsUUFBeUI7SUFDdEQsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDakYsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxJQUFZLEVBQUUsUUFBeUI7SUFDN0QsT0FBTyxRQUFRLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDckQsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEtBQWE7SUFDOUIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLElBQUksQ0FBQyxLQUFLO1FBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQywyQkFBMkIsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNwRSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxLQUFLLFVBQVUsWUFBWSxDQUN6QixJQUE0QixFQUM1QixRQUFpQixFQUNqQixtQkFBMkIsRUFDM0IsT0FBZTtJQUVmLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQztJQUNsRCxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxLQUFLLFFBQVE7WUFBRSxPQUFPO1FBQ3hDLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEluc3RhbGwsIHN0YXJ0LCBzdG9wLCBhbmQgaW5zcGVjdCBhIHN5c3RlbS10cmF5IHVzZXIgc2VydmljZS5cbiAqXG4gKiBUaGlzIG1vZHVsZSBvd25zIGN1cnJlbnQtdXNlciBzZXJ2aWNlIGNvbXBpbGF0aW9uIGFuZCBsaWZlY3ljbGUgYWNyb3NzXG4gKiBjb25zdW1pbmcgQ0xJcy4gUmV1c2Uge0BsaW5rIENsaVNlcnZpY2V9IHJhdGhlciB0aGFuIGFkZGluZyBwcm9kdWN0LXNwZWNpZmljXG4gKiBpbnN0YWxsZXJzLCB1diBQeXRob24gZW52aXJvbm1lbnRzLCBzdGFydHVwIHJlZ2lzdHJhdGlvbiwgcnVudGltZVxuICogZGlyZWN0b3JpZXMsIG9yIGNvbnRyb2wgc29ja2V0cy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHJtIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGV4dG5hbWUsIGpvaW4sIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoLCBwYXRoVG9GaWxlVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5cbmltcG9ydCAqIGFzIGJpbiBmcm9tIFwiQGRieC10b29scy9jb3JlL2JpblwiO1xuaW1wb3J0IHsgY29tcGlsZVdpdGhCdW4gfSBmcm9tIFwiLi9fY29tcGlsZS50c1wiO1xuaW1wb3J0IHsgcmVhZFNlcnZpY2VEZWZpbml0aW9uLCB3cml0ZVNlcnZpY2VEZWZpbml0aW9uIH0gZnJvbSBcIi4vX2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgcmVxdWVzdFNlcnZpY2VDb250cm9sIH0gZnJvbSBcIi4vX2NvbnRyb2wudHNcIjtcbmltcG9ydCB7IHJlc29sdmVTZXJ2aWNlUGFja2FnZSwgdHlwZSBTZXJ2aWNlUGFja2FnZSB9IGZyb20gXCIuL19wYWNrYWdlLnRzXCI7XG5pbXBvcnQge1xuICBkZWZhdWx0UnVudGltZUNvbnRleHQsXG4gIHJlc29sdmVTZXJ2aWNlUGF0aHMsXG4gIHR5cGUgU2VydmljZVJ1bnRpbWVDb250ZXh0LFxufSBmcm9tIFwiLi9fcGF0aHMudHNcIjtcbmltcG9ydCB7XG4gIGV4dGVybmFsUnVudGltZVBhY2thZ2VzLFxuICBpbnN0YWxsU2VydmljZVB5dGhvblBhY2thZ2UsXG4gIGluc3RhbGxTZXJ2aWNlUnVudGltZSxcbn0gZnJvbSBcIi4vX3J1bnRpbWUudHNcIjtcbmltcG9ydCB7IGluc3RhbGxTdGFydHVwLCByZW1vdmVTdGFydHVwLCB0eXBlIFNlcnZpY2VMYXVuY2ggfSBmcm9tIFwiLi9fc3RhcnR1cC50c1wiO1xuaW1wb3J0IHtcbiAgQ2xpU2VydmljZURlZmluaXRpb25TY2hlbWEsXG4gIHR5cGUgQ2xpU2VydmljZUNvbW1hbmQsXG4gIHR5cGUgQ2xpU2VydmljZURlZmluaXRpb24sXG4gIHR5cGUgQ2xpU2VydmljZU1lbnVJdGVtLFxufSBmcm9tIFwiLi9kZWZpbml0aW9uLnRzXCI7XG5cbmNvbnN0IERFRkFVTFRfU1RBUlRfVElNRU9VVF9NSUxMSVNFQ09ORFMgPSAxNV8wMDA7XG5jb25zdCBERUZBVUxUX1NUT1BfVElNRU9VVF9NSUxMSVNFQ09ORFMgPSAxMF8wMDA7XG5jb25zdCBQT0xMX0lOVEVSVkFMX01JTExJU0VDT05EUyA9IDEwMDtcblxuLyoqIENvbXBpbGUgb25lIFR5cGVTY3JpcHQgb3IgSmF2YVNjcmlwdCBlbnRyeXBvaW50IGludG8gYSBzdGFuZGFsb25lIGV4ZWN1dGFibGUuICovXG5leHBvcnQgdHlwZSBDbGlTZXJ2aWNlQ29tcGlsZXIgPSAoXG4gIGVudHJ5cG9pbnQ6IHN0cmluZyxcbiAgb3V0cHV0OiBzdHJpbmcsXG4gIHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZyxcbiAgZXh0ZXJuYWw/OiByZWFkb25seSBzdHJpbmdbXSxcbikgPT4gUHJvbWlzZTx2b2lkPjtcblxuLyoqIEluc3RhbGwgZXhhY3QgZXh0ZXJuYWwgcnVudGltZSBkZXBlbmRlbmNpZXMgaW50byB0aGUgZGJ4LXRvb2xzIGhvbWUuICovXG5leHBvcnQgdHlwZSBDbGlTZXJ2aWNlUnVudGltZUluc3RhbGxlciA9IChcbiAgYnVuRXhlY3V0YWJsZTogc3RyaW5nLFxuICBkaXJlY3Rvcnk6IHN0cmluZyxcbiAgZGVwZW5kZW5jaWVzOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PixcbikgPT4gUHJvbWlzZTx2b2lkPjtcblxuLyoqIEluc3RhbGwgYSBQeXRob24gcGFja2FnZSBpbnRvIGEgc2VydmljZS1vd25lZCB1diBlbnZpcm9ubWVudC4gKi9cbmV4cG9ydCB0eXBlIENsaVNlcnZpY2VQeXRob25JbnN0YWxsZXIgPSAoXG4gIHV2RXhlY3V0YWJsZTogc3RyaW5nLFxuICBkaXJlY3Rvcnk6IHN0cmluZyxcbiAgcGFja2FnZVNwZWNpZmllcnM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBweXRob246IHN0cmluZyxcbiAgcGxhdGZvcm06IE5vZGVKUy5QbGF0Zm9ybSxcbikgPT4gUHJvbWlzZTxzdHJpbmc+O1xuXG4vKiogSG9zdCBydW50aW1lIG92ZXJyaWRlcyBmb3IgdGVzdHMsIGVtYmVkZGVkIGRpc3RyaWJ1dGlvbnMsIGFuZCBub25zdGFuZGFyZCBob21lcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpU2VydmljZVJ1bnRpbWVPcHRpb25zIHtcbiAgLyoqIE9wZXJhdGluZyBzeXN0ZW0gdXNlZCBmb3IgY29uZmlndXJhdGlvbiBhbmQgc3RhcnR1cCByZWdpc3RyYXRpb24uICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtPzogTm9kZUpTLlBsYXRmb3JtO1xuICAvKiogRW52aXJvbm1lbnQgdXNlZCB0byBsb2NhdGUgcGxhdGZvcm0gY29uZmlndXJhdGlvbiBkaXJlY3Rvcmllcy4gKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiBSZWFkb25seTxOb2RlSlMuUHJvY2Vzc0Vudj47XG4gIC8qKiBIb21lIGRpcmVjdG9yeSB1c2VkIHdoZW4gcGxhdGZvcm0gZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBhYnNlbnQuICovXG4gIHJlYWRvbmx5IGhvbWVEaXJlY3Rvcnk/OiBzdHJpbmc7XG4gIC8qKiBUZW1wb3JhcnkgZGlyZWN0b3J5IHVzZWQgZm9yIHRoZSBsb2NhbCBjb250cm9sIHNvY2tldC4gKi9cbiAgcmVhZG9ubHkgdGVtcG9yYXJ5RGlyZWN0b3J5Pzogc3RyaW5nO1xuICAvKiogU2hhcmVkIGRieC10b29scyBob21lIGNvbnRhaW5pbmcgaW5zdGFsbGVkIHNlcnZpY2UgYmluYXJpZXMuICovXG4gIHJlYWRvbmx5IGdsb2JhbEhvbWVEaXJlY3Rvcnk/OiBzdHJpbmc7XG4gIC8qKiBQYWNrYWdlLXByb3ZpZGVkIEJ1biBleGVjdXRhYmxlIG92ZXJyaWRlLiAqL1xuICByZWFkb25seSBidW5FeGVjdXRhYmxlPzogc3RyaW5nO1xuICAvKiogdXYgZXhlY3V0YWJsZSB1c2VkIGZvciBtYW5hZ2VkIFB5dGhvbiBwYWNrYWdlIGVudmlyb25tZW50cy4gKi9cbiAgcmVhZG9ubHkgdXZFeGVjdXRhYmxlPzogc3RyaW5nO1xuICAvKiogU3RhbmRhbG9uZSBjb21waWxlciBvdmVycmlkZS4gKi9cbiAgcmVhZG9ubHkgY29tcGlsZT86IENsaVNlcnZpY2VDb21waWxlcjtcbiAgLyoqIEV4dGVybmFsIHJ1bnRpbWUgZGVwZW5kZW5jeSBpbnN0YWxsZXIgb3ZlcnJpZGUuICovXG4gIHJlYWRvbmx5IGluc3RhbGxSdW50aW1lPzogQ2xpU2VydmljZVJ1bnRpbWVJbnN0YWxsZXI7XG4gIC8qKiBQeXRob24gcGFja2FnZSBpbnN0YWxsZXIgb3ZlcnJpZGUuICovXG4gIHJlYWRvbmx5IGluc3RhbGxQeXRob24/OiBDbGlTZXJ2aWNlUHl0aG9uSW5zdGFsbGVyO1xuICAvKiogU3lzdGVtLXRyYXkgaG9zdCBzb3VyY2UgZW50cnlwb2ludCBvdmVycmlkZS4gKi9cbiAgcmVhZG9ubHkgaG9zdEVudHJ5cG9pbnQ/OiBzdHJpbmc7XG4gIC8qKiBzeXN0cmF5MiBuYXRpdmUgZXhlY3V0YWJsZSBvdmVycmlkZS4gKi9cbiAgcmVhZG9ubHkgdHJheUV4ZWN1dGFibGU/OiBzdHJpbmc7XG59XG5cbi8qKiBPcHRpb25zIGNvbnRyb2xsaW5nIHNlcnZpY2UgaW5zdGFsbGF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGlTZXJ2aWNlSW5zdGFsbE9wdGlvbnMge1xuICAvKiogU3RhcnQgdGhlIHNlcnZpY2UgaW1tZWRpYXRlbHkgYWZ0ZXIgd3JpdGluZyBpdHMgY29uZmlndXJhdGlvbiBhbmQgbG9naW4gZW50cnkuICovXG4gIHJlYWRvbmx5IHN0YXJ0PzogYm9vbGVhbjtcbn1cblxuLyoqIEN1cnJlbnQgaW5zdGFsbGF0aW9uIGFuZCBwcm9jZXNzIHN0YXRlIGZvciBhIHN5c3RlbS10cmF5IHNlcnZpY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIENsaVNlcnZpY2VTdGF0dXMge1xuICAvKiogV2hldGhlciB0aGUgc2VyaWFsaXplZCBzZXJ2aWNlIGRlZmluaXRpb24gZXhpc3RzLiAqL1xuICByZWFkb25seSBpbnN0YWxsZWQ6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSB0cmF5IGhvc3QgYW5zd2VyZWQgaXRzIGxvY2FsIGNvbnRyb2wgc29ja2V0LiAqL1xuICByZWFkb25seSBydW5uaW5nOiBib29sZWFuO1xuICAvKiogVHJheSBob3N0IHByb2Nlc3MgSUQgd2hlbiBydW5uaW5nLiAqL1xuICByZWFkb25seSBwaWQ/OiBudW1iZXI7XG4gIC8qKiBNYW5hZ2VkIGNoaWxkIHByb2Nlc3MgSUQgd2hlbiB0aGUgZGVmaW5pdGlvbiBpbmNsdWRlcyBhIGNvbW1hbmQuICovXG4gIHJlYWRvbmx5IHNlcnZpY2VQaWQ/OiBudW1iZXI7XG59XG5cbi8qKiBMaWZlY3ljbGUgY29udHJhY3QgY29uc3VtZWQgYnkgQ0xJIGNvbW1hbmQgYnVpbGRlcnMuICovXG5leHBvcnQgaW50ZXJmYWNlIENsaVNlcnZpY2VMaWZlY3ljbGUge1xuICAvKiogSW5zdGFsbCB0aGUgbG9naW4gZW50cnkgYW5kIG9wdGlvbmFsbHkgc3RhcnQgdGhlIHNlcnZpY2UuICovXG4gIGluc3RhbGwob3B0aW9ucz86IENsaVNlcnZpY2VJbnN0YWxsT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBTdGFydCB0aGUgaW5zdGFsbGVkIHNlcnZpY2Ugd2hlbiBpdCBpcyBub3QgYWxyZWFkeSBydW5uaW5nLiAqL1xuICBzdGFydCgpOiBQcm9taXNlPHZvaWQ+O1xuICAvKiogU3RvcCB0aGUgcnVubmluZyB0cmF5IGhvc3QgYW5kIGl0cyBtYW5hZ2VkIGNoaWxkIHByb2Nlc3MuICovXG4gIHN0b3AoKTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqIFN0b3AgYW5kIHN0YXJ0IHRoZSBpbnN0YWxsZWQgc2VydmljZS4gKi9cbiAgcmVzdGFydCgpOiBQcm9taXNlPHZvaWQ+O1xuICAvKiogU3RvcCB0aGUgc2VydmljZSBhbmQgcmVtb3ZlIGl0cyBsb2dpbiBlbnRyeSBhbmQgcGFja2FnZS1vd25lZCBzdGF0ZS4gKi9cbiAgdW5pbnN0YWxsKCk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBSZWFkIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBhbmQgcHJvY2VzcyBzdGF0ZS4gKi9cbiAgc3RhdHVzKCk6IFByb21pc2U8Q2xpU2VydmljZVN0YXR1cz47XG59XG5cbi8qKiBDcm9zcy1wbGF0Zm9ybSBsaWZlY3ljbGUgbWFuYWdlciBmb3Igb25lIHN5c3RlbS10cmF5IHVzZXIgc2VydmljZS4gKi9cbmV4cG9ydCBjbGFzcyBDbGlTZXJ2aWNlIGltcGxlbWVudHMgQ2xpU2VydmljZUxpZmVjeWNsZSB7XG4gIHJlYWRvbmx5IGRlZmluaXRpb246IENsaVNlcnZpY2VEZWZpbml0aW9uO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcnVudGltZTogU2VydmljZVJ1bnRpbWVDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEhvbWVEaXJlY3Rvcnk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBidW5FeGVjdXRhYmxlOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgdXZFeGVjdXRhYmxlOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tcGlsZXI6IENsaVNlcnZpY2VDb21waWxlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBydW50aW1lSW5zdGFsbGVyOiBDbGlTZXJ2aWNlUnVudGltZUluc3RhbGxlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBweXRob25JbnN0YWxsZXI6IENsaVNlcnZpY2VQeXRob25JbnN0YWxsZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgaG9zdEVudHJ5cG9pbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB0cmF5RXhlY3V0YWJsZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBsaWZlY3ljbGUgbWFuYWdlciBmcm9tIGEgc2VyaWFsaXphYmxlIGRlZmluaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBkZWZpbml0aW9uIFByb2R1Y3Qtb3duZWQgc2VydmljZSBtZXRhZGF0YSwgcHJvY2VzcywgYW5kIG1lbnUuXG4gICAqIEBwYXJhbSBvcHRpb25zIEhvc3QgcnVudGltZSBvdmVycmlkZXMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihkZWZpbml0aW9uOiBDbGlTZXJ2aWNlRGVmaW5pdGlvbiwgb3B0aW9uczogQ2xpU2VydmljZVJ1bnRpbWVPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmRlZmluaXRpb24gPSBDbGlTZXJ2aWNlRGVmaW5pdGlvblNjaGVtYS5wYXJzZShkZWZpbml0aW9uKTtcbiAgICBjb25zdCBkZWZhdWx0cyA9IGRlZmF1bHRSdW50aW1lQ29udGV4dCgpO1xuICAgIHRoaXMucnVudGltZSA9IHtcbiAgICAgIHBsYXRmb3JtOiBvcHRpb25zLnBsYXRmb3JtID8/IGRlZmF1bHRzLnBsYXRmb3JtLFxuICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQgPz8gZGVmYXVsdHMuZW52aXJvbm1lbnQsXG4gICAgICBob21lRGlyZWN0b3J5OiBvcHRpb25zLmhvbWVEaXJlY3RvcnkgPz8gZGVmYXVsdHMuaG9tZURpcmVjdG9yeSxcbiAgICAgIHRlbXBvcmFyeURpcmVjdG9yeTogb3B0aW9ucy50ZW1wb3JhcnlEaXJlY3RvcnkgPz8gZGVmYXVsdHMudGVtcG9yYXJ5RGlyZWN0b3J5LFxuICAgIH07XG4gICAgdGhpcy5nbG9iYWxIb21lRGlyZWN0b3J5ID1cbiAgICAgIG9wdGlvbnMuZ2xvYmFsSG9tZURpcmVjdG9yeSA/PyBqb2luKHRoaXMucnVudGltZS5ob21lRGlyZWN0b3J5LCBcIi5kYngtdG9vbHNcIik7XG4gICAgdGhpcy5idW5FeGVjdXRhYmxlID0gb3B0aW9ucy5idW5FeGVjdXRhYmxlID8/IHJlc29sdmVCdW5FeGVjdXRhYmxlKCk7XG4gICAgdGhpcy51dkV4ZWN1dGFibGUgPSBvcHRpb25zLnV2RXhlY3V0YWJsZSA/PyBcInV2XCI7XG4gICAgdGhpcy5jb21waWxlciA9XG4gICAgICBvcHRpb25zLmNvbXBpbGUgPz9cbiAgICAgICgoZW50cnlwb2ludCwgb3V0cHV0LCB3b3JraW5nRGlyZWN0b3J5LCBleHRlcm5hbCkgPT5cbiAgICAgICAgY29tcGlsZVdpdGhCdW4odGhpcy5idW5FeGVjdXRhYmxlLCBlbnRyeXBvaW50LCBvdXRwdXQsIHdvcmtpbmdEaXJlY3RvcnksIGV4dGVybmFsKSk7XG4gICAgdGhpcy5ydW50aW1lSW5zdGFsbGVyID0gb3B0aW9ucy5pbnN0YWxsUnVudGltZSA/PyBpbnN0YWxsU2VydmljZVJ1bnRpbWU7XG4gICAgdGhpcy5weXRob25JbnN0YWxsZXIgPSBvcHRpb25zLmluc3RhbGxQeXRob24gPz8gaW5zdGFsbFNlcnZpY2VQeXRob25QYWNrYWdlO1xuICAgIHRoaXMuaG9zdEVudHJ5cG9pbnQgPSBvcHRpb25zLmhvc3RFbnRyeXBvaW50ID8/IHJlc29sdmVIb3N0RW50cnlwb2ludCgpO1xuICAgIHRoaXMudHJheUV4ZWN1dGFibGUgPSBvcHRpb25zLnRyYXlFeGVjdXRhYmxlID8/IHJlc29sdmVUcmF5RXhlY3V0YWJsZSh0aGlzLnJ1bnRpbWUucGxhdGZvcm0pO1xuICB9XG5cbiAgLyoqIEluc3RhbGwgdGhlIGxvZ2luIGVudHJ5IGFuZCBvcHRpb25hbGx5IHN0YXJ0IHRoZSBzZXJ2aWNlLiAqL1xuICBhc3luYyBpbnN0YWxsKG9wdGlvbnM6IENsaVNlcnZpY2VJbnN0YWxsT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgb3duZXIgPSByZXNvbHZlU2VydmljZVBhY2thZ2UodGhpcy5kZWZpbml0aW9uLnBhY2thZ2VOYW1lKTtcbiAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBvd25lci5kZXBlbmRlbmNpZXMoKTtcbiAgICBjb25zdCBleHRlcm5hbCA9IG5ldyBTZXQoZXh0ZXJuYWxSdW50aW1lUGFja2FnZXMoZGVwZW5kZW5jaWVzKSk7XG4gICAgYXdhaXQgdGhpcy5ydW50aW1lSW5zdGFsbGVyKFxuICAgICAgdGhpcy5idW5FeGVjdXRhYmxlLFxuICAgICAgdGhpcy5nbG9iYWxIb21lRGlyZWN0b3J5LFxuICAgICAgT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGRlcGVuZGVuY2llcykuZmlsdGVyKChbbmFtZV0pID0+IGV4dGVybmFsLmhhcyhuYW1lKSkpLFxuICAgICk7XG4gICAgY29uc3QgcGF0aHMgPSByZXNvbHZlU2VydmljZVBhdGhzKHRoaXMuZGVmaW5pdGlvbiwgdGhpcy5ydW50aW1lKTtcbiAgICBjb25zdCBpbnN0YWxsZWREZWZpbml0aW9uID0gYXdhaXQgdGhpcy5pbnN0YWxsRGVmaW5pdGlvbihvd25lciwgcGF0aHMuZGlyZWN0b3J5KTtcbiAgICBjb25zdCBob3N0ID0gYXdhaXQgdGhpcy5lbnN1cmVDb21waWxlZEJpbmFyeShcbiAgICAgIHRoaXMuYmluYXJ5TmFtZShpbnN0YWxsZWREZWZpbml0aW9uLCBcInNlcnZpY2VcIiksXG4gICAgICB0aGlzLmhvc3RFbnRyeXBvaW50LFxuICAgICAgcmVzb2x2ZShkaXJuYW1lKHRoaXMuaG9zdEVudHJ5cG9pbnQpLCBcIi4uXCIpLFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVUcmF5QmluYXJ5KCk7XG4gICAgYXdhaXQgdGhpcy5zdG9wKCk7XG4gICAgYXdhaXQgd3JpdGVTZXJ2aWNlRGVmaW5pdGlvbihwYXRocy5jb25maWdGaWxlLCBpbnN0YWxsZWREZWZpbml0aW9uKTtcbiAgICBhd2FpdCBpbnN0YWxsU3RhcnR1cChcbiAgICAgIGluc3RhbGxlZERlZmluaXRpb24sXG4gICAgICBwYXRocyxcbiAgICAgIHRoaXMucnVudGltZSxcbiAgICAgIHRoaXMubGF1bmNoKGhvc3QucGF0aCwgcGF0aHMuY29uZmlnRmlsZSksXG4gICAgKTtcbiAgICBpZiAob3B0aW9ucy5zdGFydCA/PyB0cnVlKSBhd2FpdCB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICAvKiogU3RhcnQgdGhlIGluc3RhbGxlZCBzZXJ2aWNlIHdoZW4gaXQgaXMgbm90IGFscmVhZHkgcnVubmluZy4gKi9cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGF0aHMgPSByZXNvbHZlU2VydmljZVBhdGhzKHRoaXMuZGVmaW5pdGlvbiwgdGhpcy5ydW50aW1lKTtcbiAgICBpZiAoIShhd2FpdCB0aGlzLnN0YXR1cygpKS5pbnN0YWxsZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmRlZmluaXRpb24ubmFtZX0gaXMgbm90IGluc3RhbGxlZGApO1xuICAgIH1cbiAgICBpZiAoKGF3YWl0IHJlcXVlc3RTZXJ2aWNlQ29udHJvbChwYXRocy5jb250cm9sQWRkcmVzcywgXCJzdGF0dXNcIikpICE9PSB1bmRlZmluZWQpIHJldHVybjtcblxuICAgIGNvbnN0IGluc3RhbGxlZERlZmluaXRpb24gPSBhd2FpdCByZWFkU2VydmljZURlZmluaXRpb24ocGF0aHMuY29uZmlnRmlsZSk7XG4gICAgY29uc3QgbGF1bmNoID0gdGhpcy5sYXVuY2goXG4gICAgICB0aGlzLmJpbmFyeUNvbnRleHQodGhpcy5iaW5hcnlOYW1lKGluc3RhbGxlZERlZmluaXRpb24sIFwic2VydmljZVwiKSkucGF0aCxcbiAgICAgIHBhdGhzLmNvbmZpZ0ZpbGUsXG4gICAgKTtcbiAgICBjb25zdCBjaGlsZCA9IHNwYXduKGxhdW5jaC5leGVjdXRhYmxlLCBsYXVuY2guYXJndW1lbnRzLCB7XG4gICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICAgIHN0ZGlvOiBcImlnbm9yZVwiLFxuICAgIH0pO1xuICAgIGNoaWxkLnVucmVmKCk7XG5cbiAgICBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgd2FpdEZvclN0YXRlKFxuICAgICAgICBhc3luYyAoKSA9PiAoYXdhaXQgcmVxdWVzdFNlcnZpY2VDb250cm9sKHBhdGhzLmNvbnRyb2xBZGRyZXNzLCBcInN0YXR1c1wiKSkgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgREVGQVVMVF9TVEFSVF9USU1FT1VUX01JTExJU0VDT05EUyxcbiAgICAgICAgYCR7dGhpcy5kZWZpbml0aW9uLm5hbWV9IGRpZCBub3Qgc3RhcnRgLFxuICAgICAgKSxcbiAgICAgIG5ldyBQcm9taXNlPG5ldmVyPigoX3Jlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjaGlsZC5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICAgICAgY2hpbGQub25jZShcImV4aXRcIiwgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYCR7dGhpcy5kZWZpbml0aW9uLm5hbWV9IGhvc3QgZXhpdGVkIGJlZm9yZSBzdGFydHVwICgke3NpZ25hbCA/PyBTdHJpbmcoY29kZSl9KWAsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgXSk7XG4gIH1cblxuICAvKiogU3RvcCB0aGUgcnVubmluZyB0cmF5IGhvc3QgYW5kIGl0cyBtYW5hZ2VkIGNoaWxkIHByb2Nlc3MuICovXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGF0aHMgPSByZXNvbHZlU2VydmljZVBhdGhzKHRoaXMuZGVmaW5pdGlvbiwgdGhpcy5ydW50aW1lKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RTZXJ2aWNlQ29udHJvbChwYXRocy5jb250cm9sQWRkcmVzcywgXCJzdG9wXCIpO1xuICAgIGlmICghcmVzcG9uc2UpIHJldHVybjtcbiAgICBhd2FpdCB3YWl0Rm9yU3RhdGUoXG4gICAgICBhc3luYyAoKSA9PiAoYXdhaXQgcmVxdWVzdFNlcnZpY2VDb250cm9sKHBhdGhzLmNvbnRyb2xBZGRyZXNzLCBcInN0YXR1c1wiKSkgIT09IHVuZGVmaW5lZCxcbiAgICAgIGZhbHNlLFxuICAgICAgREVGQVVMVF9TVE9QX1RJTUVPVVRfTUlMTElTRUNPTkRTLFxuICAgICAgYCR7dGhpcy5kZWZpbml0aW9uLm5hbWV9IGRpZCBub3Qgc3RvcGAsXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBTdG9wIGFuZCBzdGFydCB0aGUgaW5zdGFsbGVkIHNlcnZpY2UuICovXG4gIGFzeW5jIHJlc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zdG9wKCk7XG4gICAgYXdhaXQgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgLyoqIFN0b3AgdGhlIHNlcnZpY2UgYW5kIHJlbW92ZSBpdHMgbG9naW4gZW50cnkgYW5kIHBhY2thZ2Utb3duZWQgc3RhdGUuICovXG4gIGFzeW5jIHVuaW5zdGFsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYXRocyA9IHJlc29sdmVTZXJ2aWNlUGF0aHModGhpcy5kZWZpbml0aW9uLCB0aGlzLnJ1bnRpbWUpO1xuICAgIGF3YWl0IHRoaXMuc3RvcCgpO1xuICAgIGF3YWl0IHJlbW92ZVN0YXJ0dXAocGF0aHMpO1xuICAgIGF3YWl0IHJtKHBhdGhzLmRpcmVjdG9yeSwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqIFJlYWQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIGFuZCBwcm9jZXNzIHN0YXRlLiAqL1xuICBhc3luYyBzdGF0dXMoKTogUHJvbWlzZTxDbGlTZXJ2aWNlU3RhdHVzPiB7XG4gICAgY29uc3QgcGF0aHMgPSByZXNvbHZlU2VydmljZVBhdGhzKHRoaXMuZGVmaW5pdGlvbiwgdGhpcy5ydW50aW1lKTtcbiAgICBjb25zdCBpbnN0YWxsZWQgPSBleGlzdHNTeW5jKHBhdGhzLmNvbmZpZ0ZpbGUpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFNlcnZpY2VDb250cm9sKHBhdGhzLmNvbnRyb2xBZGRyZXNzLCBcInN0YXR1c1wiKTtcbiAgICByZXR1cm4ge1xuICAgICAgaW5zdGFsbGVkLFxuICAgICAgcnVubmluZzogcmVzcG9uc2UgIT09IHVuZGVmaW5lZCxcbiAgICAgIC4uLihyZXNwb25zZVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHBpZDogcmVzcG9uc2UucGlkLFxuICAgICAgICAgICAgLi4uKHJlc3BvbnNlLnNlcnZpY2VQaWQgPyB7IHNlcnZpY2VQaWQ6IHJlc3BvbnNlLnNlcnZpY2VQaWQgfSA6IHt9KSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGxhdW5jaChleGVjdXRhYmxlOiBzdHJpbmcsIGNvbmZpZ0ZpbGU6IHN0cmluZyk6IFNlcnZpY2VMYXVuY2gge1xuICAgIHJldHVybiB7XG4gICAgICBleGVjdXRhYmxlLFxuICAgICAgYXJndW1lbnRzOiBbXCItLXNlcnZpY2UtY29uZmlnXCIsIGNvbmZpZ0ZpbGVdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluc3RhbGxEZWZpbml0aW9uKFxuICAgIG93bmVyOiBTZXJ2aWNlUGFja2FnZSxcbiAgICBkaXJlY3Rvcnk6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxDbGlTZXJ2aWNlRGVmaW5pdGlvbj4ge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBDbGlTZXJ2aWNlRGVmaW5pdGlvblNjaGVtYS5wYXJzZSh7XG4gICAgICAuLi50aGlzLmRlZmluaXRpb24sXG4gICAgICB2ZXJzaW9uOiB0aGlzLmRlZmluaXRpb24udmVyc2lvbiA/PyBvd25lci52ZXJzaW9uLFxuICAgIH0pO1xuICAgIGlmICghZGVmaW5pdGlvbi52ZXJzaW9uKSB0aHJvdyBuZXcgRXJyb3IoYCR7ZGVmaW5pdGlvbi5uYW1lfSBoYXMgbm8gaW5zdGFsbGFibGUgdmVyc2lvbmApO1xuICAgIGNvbnN0IHB5dGhvblBhY2thZ2UgPSBkZWZpbml0aW9uLnB5dGhvblBhY2thZ2VcbiAgICAgID8ge1xuICAgICAgICAgIC4uLmRlZmluaXRpb24ucHl0aG9uUGFja2FnZSxcbiAgICAgICAgICB2ZXJzaW9uOiBkZWZpbml0aW9uLnB5dGhvblBhY2thZ2UudmVyc2lvbiA/PyBkZWZpbml0aW9uLnZlcnNpb24sXG4gICAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHB5dGhvbkVudmlyb25tZW50OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgaWYgKHB5dGhvblBhY2thZ2UpIHtcbiAgICAgIHB5dGhvbkVudmlyb25tZW50LlBZVEhPTiA9IGF3YWl0IHRoaXMucHl0aG9uSW5zdGFsbGVyKFxuICAgICAgICB0aGlzLnV2RXhlY3V0YWJsZSxcbiAgICAgICAgam9pbihkaXJlY3RvcnksIFwicHl0aG9uXCIpLFxuICAgICAgICBbYCR7cHl0aG9uUGFja2FnZS5uYW1lfT09JHtweXRob25QYWNrYWdlLnZlcnNpb259YCwgLi4ucHl0aG9uUGFja2FnZS5kZXBlbmRlbmNpZXNdLFxuICAgICAgICBweXRob25QYWNrYWdlLnB5dGhvbixcbiAgICAgICAgdGhpcy5ydW50aW1lLnBsYXRmb3JtLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgY29tbWFuZCA9IGRlZmluaXRpb24uY29tbWFuZFxuICAgICAgPyBhd2FpdCB0aGlzLmluc3RhbGxDb21tYW5kKFxuICAgICAgICAgIGRlZmluaXRpb24sXG4gICAgICAgICAgb3duZXIsXG4gICAgICAgICAgZGVmaW5pdGlvbi5jb21tYW5kLFxuICAgICAgICAgIFwiY29tbWFuZFwiLFxuICAgICAgICAgIHB5dGhvbkVudmlyb25tZW50LFxuICAgICAgICApXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBtZW51OiBDbGlTZXJ2aWNlTWVudUl0ZW1bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW2luZGV4LCBpdGVtXSBvZiAoZGVmaW5pdGlvbi5tZW51ID8/IFtdKS5lbnRyaWVzKCkpIHtcbiAgICAgIG1lbnUucHVzaChcbiAgICAgICAgaXRlbS50eXBlID09PSBcImNvbW1hbmRcIlxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICBjb21tYW5kOiBhd2FpdCB0aGlzLmluc3RhbGxDb21tYW5kKFxuICAgICAgICAgICAgICAgIGRlZmluaXRpb24sXG4gICAgICAgICAgICAgICAgb3duZXIsXG4gICAgICAgICAgICAgICAgaXRlbS5jb21tYW5kLFxuICAgICAgICAgICAgICAgIGBtZW51LSR7aW5kZXggKyAxfWAsXG4gICAgICAgICAgICAgICAgcHl0aG9uRW52aXJvbm1lbnQsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBpdGVtLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIENsaVNlcnZpY2VEZWZpbml0aW9uU2NoZW1hLnBhcnNlKHtcbiAgICAgIC4uLmRlZmluaXRpb24sXG4gICAgICAuLi4ocHl0aG9uUGFja2FnZSA/IHsgcHl0aG9uUGFja2FnZSB9IDoge30pLFxuICAgICAgLi4uKGNvbW1hbmQgPyB7IGNvbW1hbmQgfSA6IHt9KSxcbiAgICAgIC4uLihtZW51Lmxlbmd0aCA+IDAgPyB7IG1lbnUgfSA6IHt9KSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5zdGFsbENvbW1hbmQoXG4gICAgZGVmaW5pdGlvbjogQ2xpU2VydmljZURlZmluaXRpb24sXG4gICAgb3duZXI6IFNlcnZpY2VQYWNrYWdlLFxuICAgIGNvbW1hbmQ6IENsaVNlcnZpY2VDb21tYW5kLFxuICAgIHB1cnBvc2U6IHN0cmluZyxcbiAgICBydW50aW1lRW52aXJvbm1lbnQ6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+LFxuICApOiBQcm9taXNlPENsaVNlcnZpY2VDb21tYW5kPiB7XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSB7IC4uLmNvbW1hbmQuZW52aXJvbm1lbnQsIC4uLnJ1bnRpbWVFbnZpcm9ubWVudCB9O1xuICAgIGlmIChjb21tYW5kLmV4ZWN1dGFibGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmNvbW1hbmQsXG4gICAgICAgIC4uLihPYmplY3Qua2V5cyhlbnZpcm9ubWVudCkubGVuZ3RoID4gMCA/IHsgZW52aXJvbm1lbnQgfSA6IHt9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGVudHJ5cG9pbnQgPSBjb21tYW5kLmVudHJ5cG9pbnQgPz8gb3duZXIuYmluKGNvbW1hbmQuYmluTmFtZSk7XG4gICAgY29uc3QgaW5zdGFsbGVkID0gYXdhaXQgdGhpcy5lbnN1cmVDb21waWxlZEJpbmFyeShcbiAgICAgIHRoaXMuYmluYXJ5TmFtZShkZWZpbml0aW9uLCBwdXJwb3NlKSxcbiAgICAgIHJlc29sdmUoZW50cnlwb2ludCksXG4gICAgICBvd25lci5kaXJlY3RvcnksXG4gICAgICBleHRlcm5hbFJ1bnRpbWVQYWNrYWdlcyhvd25lci5kZXBlbmRlbmNpZXMoKSksXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgZXhlY3V0YWJsZTogaW5zdGFsbGVkLnBhdGgsXG4gICAgICAuLi4oY29tbWFuZC5hcmd1bWVudHMgPyB7IGFyZ3VtZW50czogY29tbWFuZC5hcmd1bWVudHMgfSA6IHt9KSxcbiAgICAgIC4uLihPYmplY3Qua2V5cyhlbnZpcm9ubWVudCkubGVuZ3RoID4gMCA/IHsgZW52aXJvbm1lbnQgfSA6IHt9KSxcbiAgICAgIGN3ZDogY29tbWFuZC5jd2QgPz8gdGhpcy5nbG9iYWxIb21lRGlyZWN0b3J5LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZUNvbXBpbGVkQmluYXJ5KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBlbnRyeXBvaW50OiBzdHJpbmcsXG4gICAgd29ya2luZ0RpcmVjdG9yeTogc3RyaW5nLFxuICAgIGV4dGVybmFsOiByZWFkb25seSBzdHJpbmdbXSA9IFtdLFxuICApOiBQcm9taXNlPGJpbi5CaW5Db250ZXh0PiB7XG4gICAgcmV0dXJuIGJpbi5lbnN1cmUoXG4gICAgICBuYW1lLFxuICAgICAgYXN5bmMgKHsgdGVtcERpciB9KSA9PiB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IGpvaW4odGVtcERpciwgZXhlY3V0YWJsZU5hbWUobmFtZSwgdGhpcy5ydW50aW1lLnBsYXRmb3JtKSk7XG4gICAgICAgIGF3YWl0IHRoaXMuY29tcGlsZXIoZW50cnlwb2ludCwgb3V0cHV0LCB3b3JraW5nRGlyZWN0b3J5LCBleHRlcm5hbCk7XG4gICAgICAgIHJldHVybiBwYXRoVG9GaWxlVVJMKG91dHB1dCkuaHJlZjtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRlc3RpbmF0aW9uOiB0aGlzLmJpbmFyeUNvbnRleHQobmFtZSksXG4gICAgICAgIHNraXBWZXJzaW9uQ2hlY2s6IHRydWUsXG4gICAgICAgIGZvcmNlOiB0cnVlLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVUcmF5QmluYXJ5KCk6IFByb21pc2U8YmluLkJpbkNvbnRleHQ+IHtcbiAgICBjb25zdCBuYW1lID0gdHJheUV4ZWN1dGFibGVOYW1lKHRoaXMucnVudGltZS5wbGF0Zm9ybSk7XG4gICAgY29uc3QgYmluRGlyID0gam9pbih0aGlzLmdsb2JhbEhvbWVEaXJlY3RvcnksIFwiYmluXCIsIFwidHJheWJpblwiKTtcbiAgICByZXR1cm4gYmluLmVuc3VyZShuYW1lLCBwYXRoVG9GaWxlVVJMKHRoaXMudHJheUV4ZWN1dGFibGUpLmhyZWYsIHtcbiAgICAgIGRlc3RpbmF0aW9uOiB7XG4gICAgICAgIHJvb3Q6IHRoaXMuZ2xvYmFsSG9tZURpcmVjdG9yeSxcbiAgICAgICAgYmluRGlyLFxuICAgICAgICBwYXRoOiBqb2luKGJpbkRpciwgbmFtZSksXG4gICAgICB9LFxuICAgICAgc2tpcFZlcnNpb25DaGVjazogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYmluYXJ5Q29udGV4dChuYW1lOiBzdHJpbmcpOiBiaW4uQmluQ29udGV4dCB7XG4gICAgY29uc3QgYmluRGlyID0gam9pbih0aGlzLmdsb2JhbEhvbWVEaXJlY3RvcnksIFwiYmluXCIpO1xuICAgIHJldHVybiB7XG4gICAgICByb290OiB0aGlzLmdsb2JhbEhvbWVEaXJlY3RvcnksXG4gICAgICBiaW5EaXIsXG4gICAgICBwYXRoOiBqb2luKGJpbkRpciwgZXhlY3V0YWJsZU5hbWUobmFtZSwgdGhpcy5ydW50aW1lLnBsYXRmb3JtKSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYmluYXJ5TmFtZShkZWZpbml0aW9uOiBDbGlTZXJ2aWNlRGVmaW5pdGlvbiwgcHVycG9zZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBuYW1lID0gc2FmZVRva2VuKGRlZmluaXRpb24ubmFtZS50b0xvd2VyQ2FzZSgpKS5yZXBsYWNlKC9bLl9dKy9nLCBcIi1cIik7XG4gICAgcmV0dXJuIHB1cnBvc2UgPT09IFwic2VydmljZVwiID8gbmFtZSA6IGAke25hbWV9LSR7cHVycG9zZX1gO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVIb3N0RW50cnlwb2ludCgpOiBzdHJpbmcge1xuICBjb25zdCBjdXJyZW50ID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpO1xuICBjb25zdCBzb3VyY2UgPVxuICAgIGV4dG5hbWUoY3VycmVudCkgPT09IFwiLnRzXCJcbiAgICAgID8gam9pbihkaXJuYW1lKGN1cnJlbnQpLCBcIl9ob3N0LnRzXCIpXG4gICAgICA6IHJlc29sdmUoZGlybmFtZShjdXJyZW50KSwgXCIuLlwiLCBcIi4uXCIsIFwic3JjXCIsIFwiX2hvc3QudHNcIik7XG4gIGlmIChleGlzdHNTeW5jKHNvdXJjZSkpIHJldHVybiBzb3VyY2U7XG4gIHRocm93IG5ldyBFcnJvcihgY291bGQgbm90IHJlc29sdmUgY2xpLXNlcnZpY2UgaG9zdCBzb3VyY2U6ICR7c291cmNlfWApO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQnVuRXhlY3V0YWJsZSgpOiBzdHJpbmcge1xuICByZXR1cm4gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpLnJlc29sdmUoXCJidW4vYmluL2J1bi5leGVcIik7XG59XG5cbmZ1bmN0aW9uIHRyYXlFeGVjdXRhYmxlTmFtZShwbGF0Zm9ybTogTm9kZUpTLlBsYXRmb3JtKTogc3RyaW5nIHtcbiAgaWYgKHBsYXRmb3JtID09PSBcImRhcndpblwiKSByZXR1cm4gXCJ0cmF5X2Rhcndpbl9yZWxlYXNlXCI7XG4gIGlmIChwbGF0Zm9ybSA9PT0gXCJsaW51eFwiKSByZXR1cm4gXCJ0cmF5X2xpbnV4X3JlbGVhc2VcIjtcbiAgaWYgKHBsYXRmb3JtID09PSBcIndpbjMyXCIpIHJldHVybiBcInRyYXlfd2luZG93c19yZWxlYXNlLmV4ZVwiO1xuICB0aHJvdyBuZXcgRXJyb3IoYHN5c3RyYXkyIGRvZXMgbm90IHN1cHBvcnQgJHtwbGF0Zm9ybX1gKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVRyYXlFeGVjdXRhYmxlKHBsYXRmb3JtOiBOb2RlSlMuUGxhdGZvcm0pOiBzdHJpbmcge1xuICBjb25zdCBtYW5pZmVzdCA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKS5yZXNvbHZlKFwic3lzdHJheTIvcGFja2FnZS5qc29uXCIpO1xuICByZXR1cm4gam9pbihkaXJuYW1lKG1hbmlmZXN0KSwgXCJ0cmF5YmluXCIsIHRyYXlFeGVjdXRhYmxlTmFtZShwbGF0Zm9ybSkpO1xufVxuXG5mdW5jdGlvbiBleGVjdXRhYmxlTmFtZShuYW1lOiBzdHJpbmcsIHBsYXRmb3JtOiBOb2RlSlMuUGxhdGZvcm0pOiBzdHJpbmcge1xuICByZXR1cm4gcGxhdGZvcm0gPT09IFwid2luMzJcIiA/IGAke25hbWV9LmV4ZWAgOiBuYW1lO1xufVxuXG5mdW5jdGlvbiBzYWZlVG9rZW4odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHRva2VuID0gdmFsdWUucmVwbGFjZSgvW15hLXowLTkuXy1dKy9naSwgXCItXCIpLnJlcGxhY2UoL14tK3wtKyQvZywgXCJcIik7XG4gIGlmICghdG9rZW4pIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgYmluYXJ5IHZlcnNpb246ICR7dmFsdWV9YCk7XG4gIHJldHVybiB0b2tlbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvclN0YXRlKFxuICByZWFkOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+LFxuICBleHBlY3RlZDogYm9vbGVhbixcbiAgdGltZW91dE1pbGxpc2Vjb25kczogbnVtYmVyLFxuICBtZXNzYWdlOiBzdHJpbmcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgdGltZW91dE1pbGxpc2Vjb25kcztcbiAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgIGlmICgoYXdhaXQgcmVhZCgpKSA9PT0gZXhwZWN0ZWQpIHJldHVybjtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBQT0xMX0lOVEVSVkFMX01JTExJU0VDT05EUykpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"root":["../src/_config.ts","../src/_control.ts","../src/_host.ts","../src/_package.ts","../src/_paths.ts","../src/_runtime.ts","../src/_startup.ts","../src/cli.ts","../src/definition.ts","../src/icon.ts","../src/service.ts","../index.ts"],"version":"5.9.3"}
1
+ {"root":["../src/_compile.ts","../src/_config.ts","../src/_control.ts","../src/_host.ts","../src/_package.ts","../src/_paths.ts","../src/_runtime.ts","../src/_startup.ts","../src/cli.ts","../src/definition.ts","../src/icon.ts","../src/service.ts","../index.ts"],"version":"5.9.3"}
package/package.json CHANGED
@@ -23,8 +23,8 @@
23
23
  "typescript": "^5.9.3"
24
24
  },
25
25
  "dependencies": {
26
- "@dbx-tools/cli-args": "^0.9.51",
27
- "@dbx-tools/core": "^0.9.51",
26
+ "@dbx-tools/cli-args": "^0.9.58",
27
+ "@dbx-tools/core": "^0.9.58",
28
28
  "bun": "1.3.14",
29
29
  "commander": "^15.0.0",
30
30
  "systray2": "^2.1.4",
@@ -60,7 +60,7 @@
60
60
  "./package.json": "./package.json"
61
61
  }
62
62
  },
63
- "version": "0.9.51",
63
+ "version": "0.9.58",
64
64
  "types": "./lib/index.d.ts",
65
65
  "dbxToolsConfig": {
66
66
  "tags": [
@@ -0,0 +1,62 @@
1
+ import { mkdtemp, readdir, rm } from "node:fs/promises";
2
+ import { tmpdir } from "node:os";
3
+ import { join, resolve } from "node:path";
4
+
5
+ import * as exec from "@dbx-tools/core/exec";
6
+
7
+ /** Compile an entrypoint while containing Bun's intermediate executables. */
8
+ export async function compileWithBun(
9
+ bunExecutable: string,
10
+ entrypoint: string,
11
+ output: string,
12
+ workingDirectory: string,
13
+ external: readonly string[] = [],
14
+ temporaryDirectory: string = tmpdir(),
15
+ ): Promise<void> {
16
+ const absoluteEntrypoint = resolve(workingDirectory, entrypoint);
17
+ const absoluteOutput = resolve(workingDirectory, output);
18
+ const before = await bunBuildArtifacts(workingDirectory);
19
+ const compileDirectory = await mkdtemp(join(temporaryDirectory, "dbx-tools-bun-compile-"));
20
+ try {
21
+ await exec.spawn(
22
+ bunExecutable,
23
+ [
24
+ "build",
25
+ absoluteEntrypoint,
26
+ "--compile",
27
+ "--compile-autoload-package-json",
28
+ "--outfile",
29
+ absoluteOutput,
30
+ ...external.flatMap((dependency) => ["--external", dependency]),
31
+ ],
32
+ {
33
+ check: true,
34
+ cwd: compileDirectory,
35
+ stdin: "ignore",
36
+ stdout: "capture",
37
+ stderr: "capture",
38
+ },
39
+ );
40
+ } finally {
41
+ try {
42
+ for (const artifact of await bunBuildArtifacts(workingDirectory)) {
43
+ if (!before.has(artifact)) {
44
+ await rm(join(workingDirectory, artifact), {
45
+ recursive: true,
46
+ force: true,
47
+ });
48
+ }
49
+ }
50
+ } finally {
51
+ await rm(compileDirectory, { recursive: true, force: true });
52
+ }
53
+ }
54
+ }
55
+
56
+ async function bunBuildArtifacts(directory: string): Promise<Set<string>> {
57
+ return new Set(
58
+ (await readdir(directory))
59
+ .filter((name) => name.startsWith(".") && name.endsWith(".bun-build"))
60
+ .sort(),
61
+ );
62
+ }
package/src/service.ts CHANGED
@@ -11,14 +11,13 @@
11
11
 
12
12
  import { spawn } from "node:child_process";
13
13
  import { existsSync } from "node:fs";
14
- import { readdir, rm } from "node:fs/promises";
14
+ import { rm } from "node:fs/promises";
15
15
  import { createRequire } from "node:module";
16
16
  import { dirname, extname, join, resolve } from "node:path";
17
17
  import { fileURLToPath, pathToFileURL } from "node:url";
18
18
 
19
19
  import * as bin from "@dbx-tools/core/bin";
20
- import * as exec from "@dbx-tools/core/exec";
21
-
20
+ import { compileWithBun } from "./_compile.ts";
22
21
  import { readServiceDefinition, writeServiceDefinition } from "./_config.ts";
23
22
  import { requestServiceControl } from "./_control.ts";
24
23
  import { resolveServicePackage, type ServicePackage } from "./_package.ts";
@@ -465,59 +464,6 @@ function safeToken(value: string): string {
465
464
  return token;
466
465
  }
467
466
 
468
- async function compileWithBun(
469
- bunExecutable: string,
470
- entrypoint: string,
471
- output: string,
472
- workingDirectory: string,
473
- external: readonly string[] = [],
474
- ): Promise<void> {
475
- const before = await bunBuildArtifacts(workingDirectory);
476
- try {
477
- await exec.spawn(
478
- bunExecutable,
479
- [
480
- "build",
481
- entrypoint,
482
- "--compile",
483
- "--compile-autoload-package-json",
484
- "--outfile",
485
- output,
486
- ...external.flatMap((dependency) => ["--external", dependency]),
487
- ],
488
- {
489
- check: true,
490
- cwd: workingDirectory,
491
- env: {
492
- ...process.env,
493
- BUN_TMPDIR: dirname(output),
494
- TMPDIR: dirname(output),
495
- },
496
- stdin: "ignore",
497
- stdout: "capture",
498
- stderr: "capture",
499
- },
500
- );
501
- } finally {
502
- for (const artifact of await bunBuildArtifacts(workingDirectory)) {
503
- if (!before.has(artifact)) {
504
- await rm(join(workingDirectory, artifact), {
505
- recursive: true,
506
- force: true,
507
- });
508
- }
509
- }
510
- }
511
- }
512
-
513
- async function bunBuildArtifacts(directory: string): Promise<Set<string>> {
514
- return new Set(
515
- (await readdir(directory))
516
- .filter((name) => name.startsWith(".") && name.endsWith(".bun-build"))
517
- .sort(),
518
- );
519
- }
520
-
521
467
  async function waitForState(
522
468
  read: () => Promise<boolean>,
523
469
  expected: boolean,