@dbx-tools/tunnel 0.6.161 → 0.6.168
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 +1 -1
- package/lib/src/plugin.d.ts +3 -3
- package/lib/src/plugin.js +4 -4
- package/package.json +9 -9
- package/src/plugin.ts +3 -3
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# @dbx-tools/tunnel
|
|
2
2
|
|
|
3
3
|
Front an app with a public Portr and/or FRP tunnel and the passwordless
|
|
4
|
-
[`@dbx-tools/auth`](../auth) gate, in-process.
|
|
4
|
+
[`@dbx-tools/auth-gate`](../auth-gate) gate, in-process.
|
|
5
5
|
|
|
6
6
|
Supports the [SSE-enabled Portr fork](https://github.com/reggie-db/portr/releases/tag/v1.0.15-sse.2),
|
|
7
7
|
based on [upstream Portr](https://github.com/amalshaji/portr), plus
|
package/lib/src/plugin.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `authGate()` - the AppKit adapter around `@dbx-tools/auth`.
|
|
2
|
+
* `authGate()` - the AppKit adapter around `@dbx-tools/auth-gate`.
|
|
3
3
|
*
|
|
4
4
|
* It has NO routes of its own: the tunnel PROXY (not an HTTP server) calls the
|
|
5
5
|
* handlers this plugin exposes via {@link AuthGatePlugin.exports}. The plugin
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* @module
|
|
16
16
|
*/
|
|
17
17
|
import { Plugin, type BasePluginConfig, type ResourceRequirement, ResourceType } from "@databricks/appkit";
|
|
18
|
-
import { type AuthorizeIdentity, type AuthStorageConfig, type AuthStorageMode } from "@dbx-tools/auth";
|
|
18
|
+
import { type AuthorizeIdentity, type AuthStorageConfig, type AuthStorageMode } from "@dbx-tools/auth-gate";
|
|
19
19
|
import type { AuthStatus } from "@dbx-tools/shared-auth";
|
|
20
20
|
import type { RequestHandler } from "express";
|
|
21
21
|
import { type GateOptions } from "./gate.ts";
|
|
@@ -181,7 +181,7 @@ export interface AuthGateApi {
|
|
|
181
181
|
close(): Promise<void>;
|
|
182
182
|
}
|
|
183
183
|
/**
|
|
184
|
-
* AppKit plugin adapting `@dbx-tools/auth` to tunnel traffic. On `setup()` it registers the login
|
|
184
|
+
* AppKit plugin adapting `@dbx-tools/auth-gate` to tunnel traffic. On `setup()` it registers the login
|
|
185
185
|
* routes (`/api/email/auth/*`) and a gating middleware on the app's OWN Express
|
|
186
186
|
* server via `this.context`, so a public portr caller must prove an email before
|
|
187
187
|
* reaching the app's `/api/*` - see `./gate`. Front-door (platform) traffic and
|
package/lib/src/plugin.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `authGate()` - the AppKit adapter around `@dbx-tools/auth`.
|
|
2
|
+
* `authGate()` - the AppKit adapter around `@dbx-tools/auth-gate`.
|
|
3
3
|
*
|
|
4
4
|
* It has NO routes of its own: the tunnel PROXY (not an HTTP server) calls the
|
|
5
5
|
* handlers this plugin exposes via {@link AuthGatePlugin.exports}. The plugin
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { lakebase, Plugin, toPlugin, ResourceType, } from "@databricks/appkit";
|
|
18
18
|
import { plugin as appkitPlugin, brand as appkitBrand } from "@dbx-tools/appkit";
|
|
19
|
-
import { auth as passwordlessAuth, storage as authStorage, } from "@dbx-tools/auth";
|
|
19
|
+
import { auth as passwordlessAuth, storage as authStorage, } from "@dbx-tools/auth-gate";
|
|
20
20
|
import { config as coreConfig } from "@dbx-tools/core";
|
|
21
21
|
import { brand, log, string } from "@dbx-tools/shared-core";
|
|
22
22
|
import { TUNNEL_CONFIG } from "./_config.js";
|
|
@@ -103,7 +103,7 @@ export function resolveAuthGateConfig(config) {
|
|
|
103
103
|
};
|
|
104
104
|
}
|
|
105
105
|
/**
|
|
106
|
-
* AppKit plugin adapting `@dbx-tools/auth` to tunnel traffic. On `setup()` it registers the login
|
|
106
|
+
* AppKit plugin adapting `@dbx-tools/auth-gate` to tunnel traffic. On `setup()` it registers the login
|
|
107
107
|
* routes (`/api/email/auth/*`) and a gating middleware on the app's OWN Express
|
|
108
108
|
* server via `this.context`, so a public portr caller must prove an email before
|
|
109
109
|
* reaching the app's `/api/*` - see `./gate`. Front-door (platform) traffic and
|
|
@@ -271,4 +271,4 @@ function authOrigin(publicDomain) {
|
|
|
271
271
|
}
|
|
272
272
|
/** Factory: `authGate({ allow, subject, ... })` for an AppKit `plugins` array. */
|
|
273
273
|
export const authGate = toPlugin(AuthGatePlugin);
|
|
274
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixRQUFRLEVBSVIsWUFBWSxHQUNiLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLE1BQU0sSUFBSSxZQUFZLEVBQUUsS0FBSyxJQUFJLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pGLE9BQU8sRUFDTCxJQUFJLElBQUksZ0JBQWdCLEVBQ3hCLE9BQU8sSUFBSSxXQUFXLEdBS3ZCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLE1BQU0sSUFBSSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsU0FBUyxFQUFvQixNQUFNLFdBQVcsQ0FBQztBQUN4RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxJQUFJLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFckYsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQWN6QyxTQUFTLGlCQUFpQixDQUFDLE9BQXlCO0lBQ2xELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUNvQixDQUFDO0lBQ3JFLE1B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Q2xGLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGBhdXRoR2F0ZSgpYCAtIHRoZSBBcHBLaXQgYWRhcHRlciBhcm91bmQgYEBkYngtdG9vbHMvYXV0aGAuXG4gKlxuICogSXQgaGFzIE5PIHJvdXRlcyBvZiBpdHMgb3duOiB0aGUgdHVubmVsIFBST1hZIChub3QgYW4gSFRUUCBzZXJ2ZXIpIGNhbGxzIHRoZVxuICogaGFuZGxlcnMgdGhpcyBwbHVnaW4gZXhwb3NlcyB2aWEge0BsaW5rIEF1dGhHYXRlUGx1Z2luLmV4cG9ydHN9LiBUaGUgcGx1Z2luXG4gKiBvd25zIHR1bm5lbCBhdXRob3JpemF0aW9uLCBBcHBLaXQgTGFrZWJhc2UgZGlzY292ZXJ5LCBlbWFpbCBkZWxpdmVyeSwgYW5kXG4gKiB0cmFuc3BvcnQgbW91bnRpbmcuIEJldHRlciBBdXRoIG93bnMgdXNlcnMsIE9UUHMsIHNlc3Npb25zLCByYXRlIGxpbWl0cywgYW5kXG4gKiBwYXNza2V5cy4gYGNyZWF0ZUFwcGAgY2FuIHJ1biB0aGlzIHBsdWdpbiB3aXRoIG9yIHdpdGhvdXQgYHNlcnZlcigpYC5cbiAqXG4gKiBPcHRpb25zIGNvbWUgZnJvbSBDTEkgZmxhZ3MgT1IgZW52LCB3aXRoIHNlbnNpYmxlIGRlZmF1bHRzIC0gc2VlXG4gKiB7QGxpbmsgcmVzb2x2ZUF1dGhHYXRlQ29uZmlnfS4gVGhlIG9uZSBydW50aW1lIGRlcGVuZGVuY3kgdGhlIHBsdWdpbiBjYW4ndFxuICogcmVzb2x2ZSBpdHNlbGYgaXMgSE9XIHRvIGVtYWlsIHRoZSBjb2RlLCBzbyBpdCB0YWtlcyBhIGBzZW5kQ29kZWAgY2FsbGJhY2sgdGhlXG4gKiBhcHAgd2lyZXMgdG8gdGhlIGVtYWlsIHBsdWdpbi5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHtcbiAgbGFrZWJhc2UsXG4gIFBsdWdpbixcbiAgdG9QbHVnaW4sXG4gIHR5cGUgQmFzZVBsdWdpbkNvbmZpZyxcbiAgdHlwZSBQbHVnaW5NYW5pZmVzdCxcbiAgdHlwZSBSZXNvdXJjZVJlcXVpcmVtZW50LFxuICBSZXNvdXJjZVR5cGUsXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IHBsdWdpbiBhcyBhcHBraXRQbHVnaW4sIGJyYW5kIGFzIGFwcGtpdEJyYW5kIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQge1xuICBhdXRoIGFzIHBhc3N3b3JkbGVzc0F1dGgsXG4gIHN0b3JhZ2UgYXMgYXV0aFN0b3JhZ2UsXG4gIHR5cGUgQXV0aG9yaXplSWRlbnRpdHksXG4gIHR5cGUgQXV0aFN0b3JhZ2VDb25maWcsXG4gIHR5cGUgQXV0aFN0b3JhZ2VNb2RlLFxuICB0eXBlIFBhc3N3b3JkbGVzc0F1dGhSdW50aW1lLFxufSBmcm9tIFwiQGRieC10b29scy9hdXRoXCI7XG5pbXBvcnQgeyBjb25maWcgYXMgY29yZUNvbmZpZyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmVcIjtcbmltcG9ydCB0eXBlIHsgQXV0aFN0YXR1cyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1hdXRoXCI7XG5pbXBvcnQgeyBicmFuZCwgbG9nLCBzdHJpbmcgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0SGFuZGxlciB9IGZyb20gXCJleHByZXNzXCI7XG5pbXBvcnQgeyBUVU5ORUxfQ09ORklHIH0gZnJvbSBcIi4vX2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgbG9va3NMaWtlRW1haWwsIG1hdGNoZXNBbGxvd2xpc3QgfSBmcm9tIFwiLi9hbGxvd2xpc3QudHNcIjtcbmltcG9ydCB7IG1vdW50R2F0ZSwgdHlwZSBHYXRlT3B0aW9ucyB9IGZyb20gXCIuL2dhdGUudHNcIjtcbmltcG9ydCB7IGVuc3VyZUVtYWlsQXZhaWxhYmxlLCBzZW5kQ29kZSBhcyBkZWZhdWx0U2VuZENvZGUgfSBmcm9tIFwiLi9zZW5kLWNvZGUudHNcIjtcbmltcG9ydCB7IEtFWV9UVExfU0VDT05EUywgcmVzb2x2ZVNlc3Npb25DdXRvZmYsIHNpZ25pbmdLZXkgfSBmcm9tIFwiLi9zaWduaW5nLWtleS50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwidHVubmVsOmF1dGhcIik7XG5cbmludGVyZmFjZSBHYXRlU2VydmVyQXBwbGljYXRpb24ge1xuICBnZXQocGF0aDogc3RyaW5nLCBoYW5kbGVyOiBSZXF1ZXN0SGFuZGxlcik6IHVua25vd247XG4gIHBvc3QocGF0aDogc3RyaW5nLCBoYW5kbGVyOiBSZXF1ZXN0SGFuZGxlcik6IHVua25vd247XG4gIHVzZShwYXRoOiBzdHJpbmcsIGhhbmRsZXI6IFJlcXVlc3RIYW5kbGVyKTogdW5rbm93bjtcbn1cblxuaW50ZXJmYWNlIEdhdGVNb3VudENvbnRleHQge1xuICBhZGRSb3V0ZShtZXRob2Q6IHN0cmluZywgcGF0aDogc3RyaW5nLCBoYW5kbGVyOiBSZXF1ZXN0SGFuZGxlcik6IHZvaWQ7XG4gIGFkZE1pZGRsZXdhcmUocGF0aDogc3RyaW5nLCBoYW5kbGVyOiBSZXF1ZXN0SGFuZGxlcik6IHZvaWQ7XG4gIGdldFBsdWdpbnMoKTogUmVhZG9ubHlNYXA8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuZnVuY3Rpb24gc2VydmVyQXBwbGljYXRpb24oY29udGV4dDogR2F0ZU1vdW50Q29udGV4dCk6IEdhdGVTZXJ2ZXJBcHBsaWNhdGlvbiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcnZlciA9IGNvbnRleHQuZ2V0UGx1Z2lucygpLmdldChcInNlcnZlclwiKSBhc1xuICAgIHsgc2VydmVyQXBwbGljYXRpb24/OiBQYXJ0aWFsPEdhdGVTZXJ2ZXJBcHBsaWNhdGlvbj4gfSB8IHVuZGVmaW5lZDtcbiAgY29uc3QgYXBwbGljYXRpb24gPSBzZXJ2ZXI/LnNlcnZlckFwcGxpY2F0aW9uO1xuICByZXR1cm4gYXBwbGljYXRpb24gJiZcbiAgICB0eXBlb2YgYXBwbGljYXRpb24uZ2V0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2YgYXBwbGljYXRpb24ucG9zdCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIGFwcGxpY2F0aW9uLnVzZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgPyAoYXBwbGljYXRpb24gYXMgR2F0ZVNlcnZlckFwcGxpY2F0aW9uKVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW91bnRHYXRlT25Db250ZXh0KGNvbnRleHQ6IEdhdGVNb3VudENvbnRleHQsIG9wdGlvbnM6IEdhdGVPcHRpb25zKTogdm9pZCB7XG4gIGNvbnN0IGFwcGxpY2F0aW9uID0gc2VydmVyQXBwbGljYXRpb24oY29udGV4dCk7XG4gIGlmIChhcHBsaWNhdGlvbikge1xuICAgIG1vdW50R2F0ZShcbiAgICAgIG9wdGlvbnMsXG4gICAgICAobWV0aG9kLCBwYXRoLCBoYW5kbGVyKSA9PiBhcHBsaWNhdGlvblttZXRob2RdKHBhdGgsIGhhbmRsZXIpLFxuICAgICAgKHBhdGgsIGhhbmRsZXIpID0+IGFwcGxpY2F0aW9uLnVzZShwYXRoLCBoYW5kbGVyKSxcbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuICBtb3VudEdhdGUoXG4gICAgb3B0aW9ucyxcbiAgICAobWV0aG9kLCBwYXRoLCBoYW5kbGVyKSA9PiBjb250ZXh0LmFkZFJvdXRlKG1ldGhvZCwgcGF0aCwgaGFuZGxlciksXG4gICAgKHBhdGgsIGhhbmRsZXIpID0+IGNvbnRleHQuYWRkTWlkZGxld2FyZShwYXRoLCBoYW5kbGVyKSxcbiAgKTtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIHRoZSB7QGxpbmsgYXV0aEdhdGV9IHBsdWdpbiAoYWxsIHJlc29sdmFibGUgZnJvbSBlbnYgLSBzZWUgYmVsb3cpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRoR2F0ZUNvbmZpZyBleHRlbmRzIEJhc2VQbHVnaW5Db25maWcsIEF1dGhTdG9yYWdlQ29uZmlnIHtcbiAgLyoqIEFsbG93LWxpc3QgcGF0dGVybnMgKGRvbWFpbiAvIGdsb2IgLyBgL3JlZ2V4L2ApLiBFbXB0eSA9IGFsbG93IG5vYm9keS4gRW52IFRVTk5FTF9BVVRIX0FMTE9XLiAqL1xuICBhbGxvdz86IHN0cmluZyB8IHN0cmluZ1tdO1xuICAvKipcbiAgICogU3ViamVjdCBsaW5lIGZvciB0aGUgY29kZSBlbWFpbC4gRW52IFRVTk5FTF9BVVRIX1NVQkpFQ1QuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIFwiWW91ciB2ZXJpZmljYXRpb24gY29kZVwiLiBUaGUgd29yZGluZyBvZiB0aGUgc3ViamVjdCBhbmRcbiAgICoge0BsaW5rIG1lc3NhZ2V9IGlzIGRlbGliZXJhdGVseSB0aGUgY29udmVudGlvbmFsIHBocmFzaW5nIHJhdGhlciB0aGFuXG4gICAqIGFueXRoaW5nIGJyYW5kZWQ6IGlPUywgR21haWwsIE91dGxvb2ssIGFuZCBBbmRyb2lkIGFsbCBkZXRlY3QgYSBvbmUtdGltZVxuICAgKiBjb2RlIGZyb20gdGhpcyBzaGFwZSBhbmQgb2ZmZXIgdG8gYXV0b2ZpbGwgaXQsIGFuZCBhIG5vdmVsIHBocmFzaW5nIGlzIHdoYXRcbiAgICogYnJlYWtzIHRoYXQgZGV0ZWN0aW9uLlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBzdWJqZWN0IFRFTVBMQVRFLCBub3QgdGhlIGxpdGVyYWwgbGluZSBzZW50OiB0aGUgY29kZSBpcyBzcGxpY2VkXG4gICAqIGludG8gaXQgKGBcIjEyMzQ1NiBpcyB5b3VyIHZlcmlmaWNhdGlvbiBjb2RlXCJgKSBiZWNhdXNlIGEgcHVzaCBub3RpZmljYXRpb25cbiAgICogc2hvd3Mgb25seSB0aGUgc3ViamVjdCBhbmQgcHJlaGVhZGVyLCBhbmQgdGhhdCBub3RpZmljYXRpb24gaXMgd2hhdCBtb2JpbGVcbiAgICogYXV0b2ZpbGwgcmVhZHMuIFNlZSBgY29kZUVtYWlsU3ViamVjdGAgaW4gYC4vY29kZS1lbWFpbC50c2AuXG4gICAqL1xuICBzdWJqZWN0Pzogc3RyaW5nO1xuICAvKipcbiAgICogRGlzcGxheSBuYW1lIHVzZWQgaW4gdGhlIGNvZGUgZW1haWwgY29weS4gRW52IFRVTk5FTF9BVVRIX0JSQU5EX05BTUUuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRoZSBicmFuZCBjb250ZXh0J3MgYG5hbWVgIC0gdGhlIGFwcCdzIG93biBgYnJhbmRpbmcvYnJhbmQueWFtbGBcbiAgICogd2hlbiBpdCBoYXMgb25lLCBlbHNlIHRoZSBkYngtdG9vbHMgZGVmYXVsdC4gU2V0IHRoaXMgb25seSB0byBvdmVycmlkZSB0aGVcbiAgICogYnJhbmQgZm9yIHRoaXMgZ2F0ZS5cbiAgICovXG4gIGJyYW5kTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIExpbmUgc2hvd24gaW1tZWRpYXRlbHkgYWJvdmUgdGhlIGNvZGUgaW4gdGhlIGVtYWlsLiBFbnYgVFVOTkVMX0FVVEhfTUVTU0FHRS5cbiAgICpcbiAgICogS2VlcCB0aGUgY29kZSBvbiBpdHMgT1dOIGxpbmUgZGlyZWN0bHkgYWZ0ZXIgdGhpcyB0ZXh0IC0gdGhhdCBhZGphY2VuY3kgaXNcbiAgICogd2hhdCB0aGUgcGxhdGZvcm0gY29kZS1kZXRlY3Rpb24gaGV1cmlzdGljcyBrZXkgb24uXG4gICAqL1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICAvKipcbiAgICogU2Vzc2lvbiBsaWZldGltZSAoc2Vjb25kcykuIEVudiBUVU5ORUxfQVVUSF9TRVNTSU9OX1RUTC4gRGVmYXVsdCAyNTkyMDAwICgzMGQpLlxuICAgKlxuICAgKiBNYXRjaGVkIHRvIHRoZSBjYWNoZS1iYWNrZWQgc2lnbmluZyBrZXkncyBvd24gMzAtZGF5IFRUTCAoc2VlXG4gICAqIGAuL3NpZ25pbmcta2V5LnRzYCk6IHRoZSBjb29raWUgYW5kIHRoZSBrZXkgdGhhdCB2YWxpZGF0ZXMgaXQgc2hvdWxkIGV4cGlyZVxuICAgKiB0b2dldGhlciwgb3Igb25lIHNpbGVudGx5IG91dGxpdmVzIHRoZSBvdGhlci5cbiAgICovXG4gIHNlc3Npb25UdGxTZWNvbmRzPzogbnVtYmVyO1xuICAvKiogT25lLXRpbWUtY29kZSBsaWZldGltZSAoc2Vjb25kcykuIEVudiBUVU5ORUxfQVVUSF9DT0RFX1RUTC4gRGVmYXVsdCA2MDAgKDEwbSkuICovXG4gIGNvZGVUdGxTZWNvbmRzPzogbnVtYmVyO1xuICAvKiogTWF4IHZlcmlmeSBhdHRlbXB0cyBwZXIgaXNzdWVkIGNvZGUuIERlZmF1bHQgNS4gKi9cbiAgbWF4QXR0ZW1wdHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBGb3JjZS1jbGVhciBjdXRvZmY6IGV2ZXJ5IHNlc3Npb24gaXNzdWVkIEJFRk9SRSBpdCBzdG9wcyB2ZXJpZnlpbmcsIHNvIG1vdmluZ1xuICAgKiBpdCBmb3J3YXJkIHNpZ25zIGV2ZXJ5b25lIG91dC4gRW52IFRVTk5FTF9BVVRIX1NFU1NJT05fQ1VUT0ZGLlxuICAgKlxuICAgKiBBbnl0aGluZyBgb2JqZWN0LnRvRGF0ZWAgYWNjZXB0czogYSBgRGF0ZWAsIGAyMDI2LTA4LTAyYCwgYW4gSVNPIGluc3RhbnQsXG4gICAqIGVwb2NoIHNlY29uZHMvbWlsbGlzLCBvciBhIHJlbGF0aXZlIGR1cmF0aW9uIChgLTMwZGAsIGA3IGRheXMgYWdvYCkuIFVuc2V0XG4gICAqIG1lYW5zIG5vIGN1dG9mZi5cbiAgICovXG4gIHNlc3Npb25DdXRvZmY/OiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlO1xuICAvKipcbiAgICogU2FtZS1vcmlnaW4gcGF0aCByZXR1cm5lZCBhZnRlciBhIHN1Y2Nlc3NmdWwgbG9nb3V0LiBFbnZcbiAgICogYFRVTk5FTF9BVVRIX0xPR09VVF9SRURJUkVDVGAuIERlZmF1bHRzIHRvIGAvYCwgd2hlcmUgdGhlIEF1dGhHYXRlIHByZXNlbnRzXG4gICAqIGxvZ2luIGFnYWluLlxuICAgKi9cbiAgbG9nb3V0UmVkaXJlY3RQYXRoPzogc3RyaW5nO1xuICAvKipcbiAgICogRGVsaXZlciBhIGNvZGUgdG8gYW4gYWRkcmVzcy4gRGVmYXVsdHMgdG8gc2VuZGluZyB0aHJvdWdoIHRoZSBob3N0IGFwcCdzXG4gICAqIHNoYXJlZCBgQGRieC10b29scy9lbWFpbGAgdHJhbnNwb3J0IChzZWUgYC4vc2VuZC1jb2RlYCk7IG92ZXJyaWRlIHRvIHdpcmUgYVxuICAgKiBkaWZmZXJlbnQgZGVsaXZlcnkgcGF0aC5cbiAgICovXG4gIHNlbmRDb2RlPzogKGVtYWlsOiBzdHJpbmcsIGNvZGU6IHN0cmluZywgb3B0czogU2VuZENvZGVPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogSWRlbnRpdHkgYXV0aG9yaXphdGlvbiBpbmRlcGVuZGVudCBvZiBhdXRoZW50aWNhdGlvbi4gRGVmYXVsdHMgdG8gdGhlXG4gICAqIGNvbmZpZ3VyZWQgYWxsb3ctbGlzdCBhbmQgaXMgcmUtZXZhbHVhdGVkIGZvciBldmVyeSBhY2NlcHRlZCBzZXNzaW9uLlxuICAgKi9cbiAgYXV0aG9yaXplSWRlbnRpdHk/OiBBdXRob3JpemVJZGVudGl0eTtcbiAgLyoqXG4gICAqIFRoZSBwdWJsaWMgYDxzdWJkb21haW4+LjxzZXJ2ZXI+YCB0aGF0IGlkZW50aWZpZXMgcG9ydHIgdHJhZmZpYyBieSBpdHMgYEhvc3RgXG4gICAqIGhlYWRlci4gT25seSByZXF1ZXN0cyB3aG9zZSBgSG9zdGAgbWF0Y2hlcyB0aGlzIGFyZSBnYXRlZDsgZXZlcnl0aGluZyBlbHNlXG4gICAqICh0aGUgcGxhdGZvcm0gZnJvbnQgZG9vciwgb3RoZXIgbG9jYWwgY2FsbGVycykgcGFzc2VzIHRocm91Z2guIEVudlxuICAgKiBgVFVOTkVMX1BVQkxJQ19ET01BSU5gLiBXaGVuIGFic2VudCwgdGhlIGdhdGUgaXMgaW5lcnQgKG5vdGhpbmcgaXMgdHVubmVsXG4gICAqIHRyYWZmaWMpLlxuICAgKi9cbiAgcHVibGljRG9tYWluPzogc3RyaW5nO1xuICAvKiogQWRkaXRpb25hbCBwdWJsaWMgdHVubmVsIGRvbWFpbnMgYWNjZXB0ZWQgYnkgdGhlIGdhdGUuICovXG4gIHB1YmxpY0RvbWFpbnM/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIEV4dHJhIGB4LWAgcmVxdWVzdCBoZWFkZXJzIHR1bm5lbCB0cmFmZmljIG1heSBmb3J3YXJkIChsaXRlcmFsIC8gZ2xvYiAvXG4gICAqIGAvcmVnZXgvYCksIHVuaW9uZWQgd2l0aCB0aGUgYnVpbHQtaW4gYWxsb3ctbGlzdC4gRW52IGBUVU5ORUxfRk9SV0FSRF9IRUFERVJTYC5cbiAgICovXG4gIGZvcndhcmRIZWFkZXJzPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIC8qKlxuICAgKiBQYXRoIHByZWZpeGVzIHRvIGdhdGUgYmV5b25kIHRoZSBidWlsdC1pbiBgL2FwaS9gIChsaXRlcmFsIHByZWZpeGVzLCBjb21tYS1cbiAgICogb3Igc3BhY2Utc2VwYXJhdGVkIGFzIGEgc3RyaW5nKS4gRm9yIGFuIGFwcCB3aG9zZSBwcml2aWxlZ2VkIHN1cmZhY2UgaXMgbm90XG4gICAqIHVuZGVyIGAvYXBpL2Ag4oCUIGUuZy4gYSBXZWJTb2NrZXQgYXQgYC93c2Ag4oCUIGxpc3QgdGhvc2UgcHJlZml4ZXMgc28gdGhleVxuICAgKiByZXF1aXJlIGEgc2Vzc2lvbiB0b28uIEVudiBgVFVOTkVMX0dBVEVfUEFUSFNgLlxuICAgKi9cbiAgZ2F0ZVBhdGhzPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIC8qKlxuICAgKiBSdW4gT1BFTiB3aXRoIG5vIGdhdGUgKGVudiBgVFVOTkVMX0lOU0VDVVJFPXRydWVgKS4gVGhlIGxvZ2luIHJvdXRlcyBhbmQgZ2F0ZVxuICAgKiBtaWRkbGV3YXJlIGFyZSBub3QgbW91bnRlZCwgYW5kIHRoZSBTTVRQIGZhaWwtZmFzdCBpcyBza2lwcGVkLiBVc2Ugb25seSB3aGVuXG4gICAqIHRoZSB0dW5uZWwgaXMgZGVsaWJlcmF0ZWx5IHB1YmxpYy5cbiAgICovXG4gIGluc2VjdXJlPzogYm9vbGVhbjtcbn1cblxuLyoqIEJyYW5kaW5nL21lc3NhZ2luZyBwYXNzZWQgdG8ge0BsaW5rIEF1dGhHYXRlQ29uZmlnLnNlbmRDb2RlfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VuZENvZGVPcHRpb25zIHtcbiAgc3ViamVjdDogc3RyaW5nO1xuICBicmFuZE5hbWU6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICAvKipcbiAgICogTGlmZXRpbWUgb2YgdGhlIGNvZGUgYmVpbmcgc2VudCwgaW4gc2Vjb25kcyAtIHRoZSBSRVNPTFZFRFxuICAgKiB7QGxpbmsgQXV0aEdhdGVDb25maWcuY29kZVR0bFNlY29uZHN9LCBzbyB0aGUgZW1haWwgY2FuIHN0YXRlIHRoZSByZWFsXG4gICAqIGV4cGlyeSAoXCJUaGlzIGNvZGUgZXhwaXJlcyBpbiAxMCBtaW51dGVzXCIpIGluc3RlYWQgb2YgYSB2YWd1ZSBcInNob3J0bHlcIlxuICAgKiB0aGF0IGRyaWZ0cyBmcm9tIHRoZSBjb25maWd1cmVkIFRUTC5cbiAgICovXG4gIGNvZGVUdGxTZWNvbmRzOiBudW1iZXI7XG59XG5cbi8qKiBSZXNvbHZlZCBnYXRlIGNvbmZpZyB3aXRoIGVudiBmYWxsYmFja3MgKyBkZWZhdWx0cyBhcHBsaWVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZEF1dGhHYXRlQ29uZmlnIHtcbiAgYWxsb3c6IHN0cmluZ1tdO1xuICBzdWJqZWN0OiBzdHJpbmc7XG4gIGJyYW5kTmFtZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHNlc3Npb25UdGxTZWNvbmRzOiBudW1iZXI7XG4gIGNvZGVUdGxTZWNvbmRzOiBudW1iZXI7XG4gIG1heEF0dGVtcHRzOiBudW1iZXI7XG4gIC8qKiBGb3JjZS1jbGVhciBjdXRvZmYgaW4gZXBvY2ggbXM7IGAwYCB3aGVuIHVuc2V0LiAqL1xuICBzZXNzaW9uQ3V0b2ZmTXM6IG51bWJlcjtcbiAgLyoqIFNhbWUtb3JpZ2luIHBhdGggcmV0dXJuZWQgYWZ0ZXIgbG9nb3V0LiAqL1xuICBsb2dvdXRSZWRpcmVjdFBhdGg6IHN0cmluZztcbiAgLyoqIFByaW1hcnkgcHVibGljIGRvbWFpbjsgYHVuZGVmaW5lZGAgd2hlbiBQb3J0ciBpcyBub3QgY29uZmlndXJlZC4gKi9cbiAgcHVibGljRG9tYWluPzogc3RyaW5nO1xuICAvKiogQWxsIHB1YmxpYyB0dW5uZWwgZG9tYWlucyBhY2NlcHRlZCBieSB0aGUgZ2F0ZS4gKi9cbiAgcHVibGljRG9tYWluczogc3RyaW5nW107XG4gIC8qKiBFeHRyYSBgeC1gIGhlYWRlcnMgdHVubmVsIHRyYWZmaWMgbWF5IGZvcndhcmQgKHVuaW9uZWQgd2l0aCB0aGUgZGVmYXVsdHMpLiAqL1xuICBmb3J3YXJkSGVhZGVyczogc3RyaW5nW107XG4gIC8qKiBQYXRoIHByZWZpeGVzIHRvIGdhdGUgYmV5b25kIGAvYXBpL2AgKGUuZy4gYC93c2ApLiAqL1xuICBnYXRlUGF0aHM6IHN0cmluZ1tdO1xuICAvKiogUnVuIE9QRU4gd2l0aCBubyBnYXRlLiAqL1xuICBpbnNlY3VyZTogYm9vbGVhbjtcbiAgc3RvcmFnZTogQXV0aFN0b3JhZ2VNb2RlO1xuICBzcWxpdGVQYXRoPzogc3RyaW5nO1xufVxuXG5jb25zdCBERUZBVUxUUyA9IHtcbiAgc3ViamVjdDogXCJZb3VyIHZlcmlmaWNhdGlvbiBjb2RlXCIsXG4gIC8vIFRoZSByZXBvLXdpZGUgYnJhbmQgY29udGV4dCdzIGRpc3BsYXkgbmFtZSwgTk9UIGEgaGFyZGNvZGVkIHByb2R1Y3Qgc3RyaW5nOlxuICAvLyB0aGlzIG5hbWUgaXMgd2hhdCB0aGUgcmVjaXBpZW50IHJlYWRzIGluIHRoZSBjb2RlIGVtYWlsLCBzbyBpdCBoYXMgdG8gYmUgdGhlXG4gIC8vIHNhbWUgaWRlbnRpdHkgdGhlIHJlc3Qgb2YgdGhlIGFwcCBwcmVzZW50cy4gQSBob3N0IHdpdGggaXRzIG93blxuICAvLyBgYnJhbmRpbmcvYnJhbmQueWFtbGAgb3ZlcnJpZGVzIGl0IGJ5IHBhc3NpbmcgYGJyYW5kTmFtZWA7IHRoZSBzaGFyZWQgZGVmYXVsdFxuICAvLyBpcyB0aGUgZmFsbGJhY2sgd2hlbiBub3RoaW5nIGlzIGNvbmZpZ3VyZWQuXG4gIGJyYW5kTmFtZTogYnJhbmQuZGVmYXVsdEJyYW5kQ29udGV4dC5uYW1lLFxuICBtZXNzYWdlOiBcIllvdXIgdmVyaWZpY2F0aW9uIGNvZGUgaXM6XCIsXG4gIC8vIDMwIGRheXMsIHRoZSBzYW1lIHdpbmRvdyB0aGUgY2FjaGUtYmFja2VkIHNpZ25pbmcga2V5IGlzIHN0b3JlZCBmb3IuXG4gIHNlc3Npb25UdGxTZWNvbmRzOiBLRVlfVFRMX1NFQ09ORFMsXG4gIGNvZGVUdGxTZWNvbmRzOiA2MDAsXG4gIG1heEF0dGVtcHRzOiA1LFxuICBsb2dvdXRSZWRpcmVjdFBhdGg6IFwiL1wiLFxufTtcblxuLyoqIE1lcmdlIHtAbGluayBBdXRoR2F0ZUNvbmZpZ30gb3ZlciBlbnYgb3ZlciBkZWZhdWx0cyBpbnRvIGEgcmVzb2x2ZWQgY29uZmlnLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVBdXRoR2F0ZUNvbmZpZyhjb25maWc6IEF1dGhHYXRlQ29uZmlnKTogUmVzb2x2ZWRBdXRoR2F0ZUNvbmZpZyB7XG4gIGNvbnN0IHN0b3JhZ2UgPSBhdXRoU3RvcmFnZS5yZXNvbHZlQXV0aFN0b3JhZ2VDb25maWcoe1xuICAgIHN0b3JhZ2U6XG4gICAgICBjb25maWcuc3RvcmFnZSA/P1xuICAgICAgKGNvcmVDb25maWcudGV4dChcIkFVVEhfU1RPUkFHRVwiLCBUVU5ORUxfQ09ORklHKSBhcyBBdXRoU3RvcmFnZU1vZGUgfCB1bmRlZmluZWQpLFxuICAgIHNxbGl0ZVBhdGg6IGNvbmZpZy5zcWxpdGVQYXRoID8/IGNvcmVDb25maWcudGV4dChcIkFVVEhfU1FMSVRFX1BBVEhcIiwgVFVOTkVMX0NPTkZJRyksXG4gIH0pO1xuICBjb25zdCBwdWJsaWNEb21haW4gPSBjb3JlQ29uZmlnLnN0cmluZyhjb25maWcucHVibGljRG9tYWluLCBcIlBVQkxJQ19ET01BSU5cIiwgVFVOTkVMX0NPTkZJRyk7XG4gIGNvbnN0IGZycFB1YmxpY0RvbWFpbiA9IGNvcmVDb25maWcudGV4dChcIkZSUF9QVUJMSUNfRE9NQUlOXCIsIFRVTk5FTF9DT05GSUcpO1xuICByZXR1cm4ge1xuICAgIC8vIEJvdGggc291cmNlcyBhcmUgdW5pb25lZCByYXRoZXIgdGhhbiBvbmUgb3ZlcnJpZGluZzogYSBkZXBsb3ltZW50LXdpZGVcbiAgICAvLyBUVU5ORUxfQVVUSF9BTExPVyBhbmQgYSBwZXItaW52b2NhdGlvbiBgLS1hbGxvd2Agc2hvdWxkIGJvdGggZ3JhbnQgYWNjZXNzLlxuICAgIC8vIEhlbmNlIGBwYXJzZUxpc3RgIG9uIGVhY2ggcmF0aGVyIHRoYW4gYGNvbmZpZy5saXN0YCwgd2hpY2ggc3RvcHMgYXQgdGhlXG4gICAgLy8gZmlyc3Qgc291cmNlIHRoYXQgeWllbGRzIGFueXRoaW5nLlxuICAgIGFsbG93OiBbXG4gICAgICAuLi5zdHJpbmcucGFyc2VMaXN0KGNvbmZpZy5hbGxvdyksXG4gICAgICAuLi5zdHJpbmcucGFyc2VMaXN0KGNvcmVDb25maWcudGV4dChbXCJBVVRIX0FMTE9XXCIsIFwiRU1BSUxfQVVUSF9BTExPV1wiXSwgVFVOTkVMX0NPTkZJRykpLFxuICAgIF0sXG4gICAgc3ViamVjdDogY29yZUNvbmZpZy5zdHJpbmcoY29uZmlnLnN1YmplY3QsIFwiQVVUSF9TVUJKRUNUXCIsIFRVTk5FTF9DT05GSUcpID8/IERFRkFVTFRTLnN1YmplY3QsXG4gICAgYnJhbmROYW1lOlxuICAgICAgY29yZUNvbmZpZy5zdHJpbmcoY29uZmlnLmJyYW5kTmFtZSwgXCJBVVRIX0JSQU5EX05BTUVcIiwgVFVOTkVMX0NPTkZJRykgPz8gREVGQVVMVFMuYnJhbmROYW1lLFxuICAgIG1lc3NhZ2U6IGNvcmVDb25maWcuc3RyaW5nKGNvbmZpZy5tZXNzYWdlLCBcIkFVVEhfTUVTU0FHRVwiLCBUVU5ORUxfQ09ORklHKSA/PyBERUZBVUxUUy5tZXNzYWdlLFxuICAgIHNlc3Npb25UdGxTZWNvbmRzOiBjb3JlQ29uZmlnLnBvc2l0aXZlSW50KFxuICAgICAgY29uZmlnLnNlc3Npb25UdGxTZWNvbmRzLFxuICAgICAgXCJBVVRIX1NFU1NJT05fVFRMXCIsXG4gICAgICBERUZBVUxUUy5zZXNzaW9uVHRsU2Vjb25kcyxcbiAgICAgIFRVTk5FTF9DT05GSUcsXG4gICAgKSxcbiAgICBjb2RlVHRsU2Vjb25kczogY29yZUNvbmZpZy5wb3NpdGl2ZUludChcbiAgICAgIGNvbmZpZy5jb2RlVHRsU2Vjb25kcyxcbiAgICAgIFwiQVVUSF9DT0RFX1RUTFwiLFxuICAgICAgREVGQVVMVFMuY29kZVR0bFNlY29uZHMsXG4gICAgICBUVU5ORUxfQ09ORklHLFxuICAgICksXG4gICAgbWF4QXR0ZW1wdHM6IGNvbmZpZy5tYXhBdHRlbXB0cyA/PyBERUZBVUxUUy5tYXhBdHRlbXB0cyxcbiAgICBzZXNzaW9uQ3V0b2ZmTXM6IHJlc29sdmVTZXNzaW9uQ3V0b2ZmKGNvbmZpZy5zZXNzaW9uQ3V0b2ZmKSxcbiAgICBsb2dvdXRSZWRpcmVjdFBhdGg6IHBhc3N3b3JkbGVzc0F1dGgubm9ybWFsaXplTG9nb3V0UmVkaXJlY3RQYXRoKFxuICAgICAgY29yZUNvbmZpZy5zdHJpbmcoY29uZmlnLmxvZ291dFJlZGlyZWN0UGF0aCwgXCJBVVRIX0xPR09VVF9SRURJUkVDVFwiLCBUVU5ORUxfQ09ORklHKSA/P1xuICAgICAgICBERUZBVUxUUy5sb2dvdXRSZWRpcmVjdFBhdGgsXG4gICAgKSxcbiAgICBwdWJsaWNEb21haW4sXG4gICAgcHVibGljRG9tYWluczogW1xuICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgW3B1YmxpY0RvbWFpbiwgZnJwUHVibGljRG9tYWluLCAuLi5zdHJpbmcucGFyc2VMaXN0KGNvbmZpZy5wdWJsaWNEb21haW5zKV0uZmlsdGVyKFxuICAgICAgICAgICh2YWx1ZSk6IHZhbHVlIGlzIHN0cmluZyA9PiAhIXZhbHVlLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICBdLFxuICAgIGZvcndhcmRIZWFkZXJzOiBbXG4gICAgICAuLi5zdHJpbmcucGFyc2VMaXN0KGNvbmZpZy5mb3J3YXJkSGVhZGVycyksXG4gICAgICAuLi5zdHJpbmcucGFyc2VMaXN0KGNvcmVDb25maWcudGV4dChcIkZPUldBUkRfSEVBREVSU1wiLCBUVU5ORUxfQ09ORklHKSksXG4gICAgXSxcbiAgICBnYXRlUGF0aHM6IFtcbiAgICAgIC4uLnN0cmluZy5wYXJzZUxpc3QoY29uZmlnLmdhdGVQYXRocyksXG4gICAgICAuLi5zdHJpbmcucGFyc2VMaXN0KGNvcmVDb25maWcudGV4dChcIkdBVEVfUEFUSFNcIiwgVFVOTkVMX0NPTkZJRykpLFxuICAgIF0sXG4gICAgaW5zZWN1cmU6IGNvcmVDb25maWcuYm9vbGVhbihjb25maWcuaW5zZWN1cmUsIFwiSU5TRUNVUkVcIiwgVFVOTkVMX0NPTkZJRykgPz8gZmFsc2UsXG4gICAgc3RvcmFnZTogc3RvcmFnZS5tb2RlLFxuICAgIHNxbGl0ZVBhdGg6IHN0b3JhZ2Uuc3FsaXRlUGF0aCxcbiAgfTtcbn1cblxuLyoqIFRoZSBoYW5kbGVycyB0aGUgZ2F0ZSBtaWRkbGV3YXJlIGNhbGxzIGluLXByb2Nlc3MgKHJldHVybmVkIGJ5IHtAbGluayBBdXRoR2F0ZVBsdWdpbi5leHBvcnRzfSkuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhHYXRlQXBpIHtcbiAgLyoqIEJldHRlciBBdXRoIGFuZCBjb21wYXRpYmlsaXR5IHJvdXRlcyB1bmRlciBgL2FwaS9lbWFpbC9hdXRoLypgLiAqL1xuICBoYW5kbGVyKHJlcXVlc3Q6IFJlcXVlc3QpOiBQcm9taXNlPFJlc3BvbnNlPjtcbiAgLyoqIFJlc29sdmUgdGhlIGF1dGhvcml6ZWQgZW1haWwgZm9yIHJlcXVlc3QgaGVhZGVycywgb3IgdW5kZWZpbmVkLiAqL1xuICBzZXNzaW9uKGhlYWRlcnM6IEhlYWRlcnMpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG4gIC8qKiBUaGUgZ2F0ZSBzdGF0dXMgcGF5bG9hZC4gKi9cbiAgc3RhdHVzKGhlYWRlcnM6IEhlYWRlcnMpOiBQcm9taXNlPEF1dGhTdGF0dXM+O1xuICAvKiogV2hldGhlciB0aGUgcnVudGltZSBleHBvc2VzIHBhc3NrZXkgZW5yb2xsbWVudCBhbmQgYXV0aGVudGljYXRpb24uICovXG4gIHJlYWRvbmx5IHBhc3NrZXlzRW5hYmxlZDogYm9vbGVhbjtcbiAgLyoqIENsb3NlIGF1dGggc3RvcmFnZSBvd25lZCBieSB0aGlzIHJ1bnRpbWUuICovXG4gIGNsb3NlKCk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQXBwS2l0IHBsdWdpbiBhZGFwdGluZyBgQGRieC10b29scy9hdXRoYCB0byB0dW5uZWwgdHJhZmZpYy4gT24gYHNldHVwKClgIGl0IHJlZ2lzdGVycyB0aGUgbG9naW5cbiAqIHJvdXRlcyAoYC9hcGkvZW1haWwvYXV0aC8qYCkgYW5kIGEgZ2F0aW5nIG1pZGRsZXdhcmUgb24gdGhlIGFwcCdzIE9XTiBFeHByZXNzXG4gKiBzZXJ2ZXIgdmlhIGB0aGlzLmNvbnRleHRgLCBzbyBhIHB1YmxpYyBwb3J0ciBjYWxsZXIgbXVzdCBwcm92ZSBhbiBlbWFpbCBiZWZvcmVcbiAqIHJlYWNoaW5nIHRoZSBhcHAncyBgL2FwaS8qYCAtIHNlZSBgLi9nYXRlYC4gRnJvbnQtZG9vciAocGxhdGZvcm0pIHRyYWZmaWMgYW5kXG4gKiBvdGhlciBsb2NhbCBjYWxsZXJzIHBhc3MgdGhyb3VnaCB1bnRvdWNoZWQgKHRoZSBnYXRlIGtleXMgb24gdGhlIGBIb3N0YCBoZWFkZXIpLlxuICovXG5leHBvcnQgY2xhc3MgQXV0aEdhdGVQbHVnaW4gZXh0ZW5kcyBQbHVnaW48QXV0aEdhdGVDb25maWc+IHtcbiAgc3RhdGljIG1hbmlmZXN0ID0ge1xuICAgIG5hbWU6IFwiYXV0aEdhdGVcIixcbiAgICBkaXNwbGF5TmFtZTogXCJBdXRoIEdhdGVcIixcbiAgICBkZXNjcmlwdGlvbjogXCJCZXR0ZXIgQXV0aCBlbWFpbCBPVFAgYW5kIHBhc3NrZXkgYWNjZXNzIGdhdGUgZm9yIGEgcHVibGljIHR1bm5lbC5cIixcbiAgICBzdGFiaWxpdHk6IFwiYmV0YVwiLFxuICAgIHJlc291cmNlczoge1xuICAgICAgcmVxdWlyZWQ6IFtdLFxuICAgICAgb3B0aW9uYWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFJlc291cmNlVHlwZS5QT1NUR1JFUyxcbiAgICAgICAgICBhbGlhczogXCJhdXRoXCIsXG4gICAgICAgICAgcmVzb3VyY2VLZXk6IFwiYXV0aC1kYXRhYmFzZVwiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkR1cmFibGUgdXNlcnMsIHNlc3Npb25zLCBPVFAgcmVjb3JkcywgYW5kIHBhc3NrZXlzLlwiLFxuICAgICAgICAgIHBlcm1pc3Npb246IFwiQ0FOX0NPTk5FQ1RfQU5EX0NSRUFURVwiLFxuICAgICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgaW5zdGFuY2VfbmFtZTogeyBlbnY6IFwiTEFLRUJBU0VfSU5TVEFOQ0VfTkFNRVwiIH0sXG4gICAgICAgICAgICBkYXRhYmFzZV9uYW1lOiB7IGVudjogXCJQR0RBVEFCQVNFXCIgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9IHNhdGlzZmllcyBQbHVnaW5NYW5pZmVzdDxcImF1dGhHYXRlXCI+O1xuXG4gIHByaXZhdGUgcmVzb2x2ZWQhOiBSZXNvbHZlZEF1dGhHYXRlQ29uZmlnO1xuICBwcml2YXRlIHJlYWRvbmx5IHJ1bnRpbWVzID0gbmV3IE1hcDxzdHJpbmcsIFBhc3N3b3JkbGVzc0F1dGhSdW50aW1lPigpO1xuXG4gIHN0YXRpYyBnZXRSZXNvdXJjZVJlcXVpcmVtZW50cyhjb25maWc6IEF1dGhHYXRlQ29uZmlnKTogUmVzb3VyY2VSZXF1aXJlbWVudFtdIHtcbiAgICBpZiAoYXV0aFN0b3JhZ2UucmVzb2x2ZUF1dGhTdG9yYWdlQ29uZmlnKGNvbmZpZykubW9kZSAhPT0gXCJsYWtlYmFzZVwiKSByZXR1cm4gW107XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogUmVzb3VyY2VUeXBlLlBPU1RHUkVTLFxuICAgICAgICBhbGlhczogXCJhdXRoXCIsXG4gICAgICAgIHJlc291cmNlS2V5OiBcImF1dGgtZGF0YWJhc2VcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiRHVyYWJsZSB1c2Vycywgc2Vzc2lvbnMsIE9UUCByZWNvcmRzLCBhbmQgcGFzc2tleXMuXCIsXG4gICAgICAgIHBlcm1pc3Npb246IFwiQ0FOX0NPTk5FQ1RfQU5EX0NSRUFURVwiLFxuICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICBpbnN0YW5jZV9uYW1lOiB7IGVudjogXCJMQUtFQkFTRV9JTlNUQU5DRV9OQU1FXCIgfSxcbiAgICAgICAgICBkYXRhYmFzZV9uYW1lOiB7IGVudjogXCJQR0RBVEFCQVNFXCIgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBzZXR1cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnJlc29sdmVkID0gcmVzb2x2ZUF1dGhHYXRlQ29uZmlnKHRoaXMuY29uZmlnKTtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmJyYW5kTmFtZSAmJiAhY29yZUNvbmZpZy50ZXh0KFwiQVVUSF9CUkFORF9OQU1FXCIsIFRVTk5FTF9DT05GSUcpKSB7XG4gICAgICB0aGlzLnJlc29sdmVkLmJyYW5kTmFtZSA9IGFwcGtpdEJyYW5kLmdldEJyYW5kQ29udGV4dCgpLm5hbWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzb2x2ZWQuaW5zZWN1cmUpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiaW5zZWN1cmUgbW9kZSAtIHRoZSB0dW5uZWwgcnVucyBPUEVOIHdpdGggbm8gYXV0aCBnYXRlXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsYWtlYmFzZVBsdWdpbiA9IGFwcGtpdFBsdWdpbi5pbnN0YW5jZSh0aGlzLmNvbnRleHQsIGxha2ViYXNlKTtcbiAgICAgIGNvbnN0IHsga2V5IH0gPSBhd2FpdCBzaWduaW5nS2V5KHRoaXMucmVzb2x2ZWQuc2Vzc2lvbkN1dG9mZk1zKTtcbiAgICAgIGNvbnN0IG9yaWdpbnMgPSB0aGlzLnJlc29sdmVkLnB1YmxpY0RvbWFpbnMubGVuZ3RoXG4gICAgICAgID8gdGhpcy5yZXNvbHZlZC5wdWJsaWNEb21haW5zLm1hcChhdXRoT3JpZ2luKVxuICAgICAgICA6IFthdXRoT3JpZ2luKHRoaXMucmVzb2x2ZWQucHVibGljRG9tYWluKV07XG4gICAgICBmb3IgKGNvbnN0IG9yaWdpbiBvZiBuZXcgU2V0KG9yaWdpbnMpKSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSBhd2FpdCBhdXRoU3RvcmFnZS5jcmVhdGVBdXRoU3RvcmFnZShcbiAgICAgICAgICB0aGlzLnJlc29sdmVkLFxuICAgICAgICAgIGxha2ViYXNlUGx1Z2luPy5leHBvcnRzKCkucG9vbCxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5ydW50aW1lcy5zZXQoXG4gICAgICAgICAgbmV3IFVSTChvcmlnaW4pLmhvc3QudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICBhd2FpdCBwYXNzd29yZGxlc3NBdXRoLmNyZWF0ZVBhc3N3b3JkbGVzc0F1dGgoe1xuICAgICAgICAgICAgc3RvcmFnZSxcbiAgICAgICAgICAgIGJhc2VVUkw6IG9yaWdpbixcbiAgICAgICAgICAgIGJhc2VQYXRoOiBcIi9hcGkvZW1haWwvYXV0aFwiLFxuICAgICAgICAgICAgYXBwTmFtZTogdGhpcy5yZXNvbHZlZC5icmFuZE5hbWUsXG4gICAgICAgICAgICBzZWNyZXQ6IEJ1ZmZlci5mcm9tKGtleSkudG9TdHJpbmcoXCJiYXNlNjR1cmxcIiksXG4gICAgICAgICAgICBzZXNzaW9uVHRsU2Vjb25kczogdGhpcy5yZXNvbHZlZC5zZXNzaW9uVHRsU2Vjb25kcyxcbiAgICAgICAgICAgIHNlc3Npb25DdXRvZmZNczogdGhpcy5yZXNvbHZlZC5zZXNzaW9uQ3V0b2ZmTXMsXG4gICAgICAgICAgICBsb2dvdXRSZWRpcmVjdFBhdGg6IHRoaXMucmVzb2x2ZWQubG9nb3V0UmVkaXJlY3RQYXRoLFxuICAgICAgICAgICAgY29kZVR0bFNlY29uZHM6IHRoaXMucmVzb2x2ZWQuY29kZVR0bFNlY29uZHMsXG4gICAgICAgICAgICBtYXhBdHRlbXB0czogdGhpcy5yZXNvbHZlZC5tYXhBdHRlbXB0cyxcbiAgICAgICAgICAgIGF1dGhvcml6ZUlkZW50aXR5OiAoZW1haWwpID0+IHRoaXMuYXV0aG9yaXplSWRlbnRpdHkoZW1haWwpLFxuICAgICAgICAgICAgc2VuZENvZGU6IChlbWFpbCwgY29kZSwgb3B0aW9ucykgPT4gdGhpcy5zZW5kQ29kZShlbWFpbCwgY29kZSwgb3B0aW9ucyksXG4gICAgICAgICAgICBzdWJqZWN0OiB0aGlzLnJlc29sdmVkLnN1YmplY3QsXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnJlc29sdmVkLm1lc3NhZ2UsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAvLyBgc2VydmVyKClgIGlzIGRlZmVycmVkLCBzbyBpdCBkb2VzIG5vdCBleGlzdCBkdXJpbmcgdGhpcyBwbHVnaW4ncyBzZXR1cC5cbiAgICAgIC8vIEF0IGBzZXR1cDpjb21wbGV0ZWAgdGhlIEV4cHJlc3MgYXBwIGV4aXN0cyBidXQgaGFzIG5vdCBpbmplY3RlZCBwbHVnaW5cbiAgICAgIC8vIHJvdXRlcyBvciBzdGF0aWMgaGFuZGxpbmcgeWV0LCB3aGljaCBpcyB0aGUgb25lIHBvaW50IHRoZSBnYXRlIGNhbiBtb3VudFxuICAgICAgLy8gYWhlYWQgb2YgZXZlcnkgcHJvdGVjdGVkIHJvdXRlLlxuICAgICAgdGhpcy5jb250ZXh0Py5vbkxpZmVjeWNsZShcInNldHVwOmNvbXBsZXRlXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy5tb3VudEdhdGVSb3V0ZXMoKTtcbiAgICAgICAgLy8gRmFpbCBmYXN0IG9uY2UgdGhlIHNpYmxpbmcgZW1haWwgcGx1Z2luIGhhcyBwcmltZWQgaXRzIHRyYW5zcG9ydDogYVxuICAgICAgICAvLyBnYXRlIHRoYXQgY2Fubm90IGVtYWlsIGEgY29kZSBsZXRzIG5vYm9keSBpbi5cbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5zZW5kQ29kZSkgYXdhaXQgZW5zdXJlRW1haWxBdmFpbGFibGUoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvZ2dlci5pbmZvKFwicmVhZHlcIiwge1xuICAgICAgcGF0dGVybnM6IHRoaXMucmVzb2x2ZWQuYWxsb3cubGVuZ3RoLFxuICAgICAgc2Vzc2lvblR0bFNlY29uZHM6IHRoaXMucmVzb2x2ZWQuc2Vzc2lvblR0bFNlY29uZHMsXG4gICAgICBwdWJsaWNEb21haW5zOiB0aGlzLnJlc29sdmVkLnB1YmxpY0RvbWFpbnMsXG4gICAgICBpbnNlY3VyZTogdGhpcy5yZXNvbHZlZC5pbnNlY3VyZSxcbiAgICAgIHN0b3JhZ2U6IHRoaXMucmVzb2x2ZWQuc3RvcmFnZSxcbiAgICAgIGxvZ291dFJlZGlyZWN0UGF0aDogdGhpcy5yZXNvbHZlZC5sb2dvdXRSZWRpcmVjdFBhdGgsXG4gICAgICBzZXNzaW9uQ3V0b2ZmOlxuICAgICAgICB0aGlzLnJlc29sdmVkLnNlc3Npb25DdXRvZmZNcyA+IDBcbiAgICAgICAgICA/IG5ldyBEYXRlKHRoaXMucmVzb2x2ZWQuc2Vzc2lvbkN1dG9mZk1zKS50b0lTT1N0cmluZygpXG4gICAgICAgICAgOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoWy4uLnRoaXMucnVudGltZXMudmFsdWVzKCldLm1hcCgocnVudGltZSkgPT4gcnVudGltZS5jbG9zZSgpKSk7XG4gICAgdGhpcy5ydW50aW1lcy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHRoZSBsb2dpbiByb3V0ZXMgKGAvYXBpL2VtYWlsL2F1dGgvKmApIGFuZCB0aGUgZ2F0aW5nIG1pZGRsZXdhcmUgb25cbiAgICogdGhlIGFwcCdzIE9XTiBFeHByZXNzIHNlcnZlci4gQXQgYHNldHVwOmNvbXBsZXRlYCwgdGhlIGRlZmVycmVkIHNlcnZlciBwbHVnaW5cbiAgICogaGFzIGNvbnN0cnVjdGVkIGl0cyBFeHByZXNzIGFwcCBidXQgaGFzIG5vdCBpbmplY3RlZCBwbHVnaW4gcm91dGVzIG9yIHN0YXRpY1xuICAgKiBoYW5kbGluZywgc28gZGlyZWN0IHJlZ2lzdHJhdGlvbiBwdXRzIHRoZSBnYXRlIGZpcnN0LiBUaGUgY29udGV4dCdzIGJ1ZmZlcmVkXG4gICAqIHJvdXRlIEFQSSByZW1haW5zIGEgZmFsbGJhY2sgZm9yIGNvbXBhdGlibGUgbm9uLXN0YW5kYXJkIHNlcnZlciBwbHVnaW5zLlxuICAgKi9cbiAgcHJpdmF0ZSBtb3VudEdhdGVSb3V0ZXMoKTogdm9pZCB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwibm8gcGx1Z2luIGNvbnRleHQgLSB0aGUgYXV0aCBnYXRlIGNhbm5vdCBtb3VudCBpdHMgcm91dGVzXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBtb3VudEdhdGVPbkNvbnRleHQoY29udGV4dCwge1xuICAgICAgZ2F0ZTogdGhpcy5leHBvcnRzKCksXG4gICAgICBwdWJsaWNEb21haW46IHRoaXMucmVzb2x2ZWQucHVibGljRG9tYWlucyxcbiAgICAgIGZvcndhcmRIZWFkZXJzOiB0aGlzLnJlc29sdmVkLmZvcndhcmRIZWFkZXJzLFxuICAgICAgZ2F0ZVBhdGhzOiB0aGlzLnJlc29sdmVkLmdhdGVQYXRocyxcbiAgICAgIGJyYW5kTmFtZTogdGhpcy5yZXNvbHZlZC5icmFuZE5hbWUsXG4gICAgfSk7XG4gIH1cblxuICAvKiogVGhlIGNvZGUgc2VuZGVyOiB0aGUgY29uZmlndXJlZCBgc2VuZENvZGVgLCBlbHNlIHRoZSBzaGFyZWQtdHJhbnNwb3J0IGRlZmF1bHQuICovXG4gIHByaXZhdGUgZ2V0IHNlbmRDb2RlKCk6IE5vbk51bGxhYmxlPEF1dGhHYXRlQ29uZmlnW1wic2VuZENvZGVcIl0+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuc2VuZENvZGUgPz8gZGVmYXVsdFNlbmRDb2RlO1xuICB9XG5cbiAgcHJpdmF0ZSBhdXRob3JpemVJZGVudGl0eShlbWFpbDogc3RyaW5nKTogYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmNvbmZpZy5hdXRob3JpemVJZGVudGl0eSkgcmV0dXJuIHRoaXMuY29uZmlnLmF1dGhvcml6ZUlkZW50aXR5KGVtYWlsKTtcbiAgICByZXR1cm4gbG9va3NMaWtlRW1haWwoZW1haWwpICYmIG1hdGNoZXNBbGxvd2xpc3QoZW1haWwsIHRoaXMucmVzb2x2ZWQuYWxsb3cpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZXhwb3J0cygpOiBBdXRoR2F0ZUFwaSB7XG4gICAgY29uc3QgcnVudGltZSA9IChoZWFkZXJzPzogSGVhZGVycywgcmVxdWVzdD86IFJlcXVlc3QpID0+IHtcbiAgICAgIGNvbnN0IGhvc3QgPSAoXG4gICAgICAgIGhlYWRlcnM/LmdldChcImhvc3RcIikgPz8gKHJlcXVlc3QgPyBuZXcgVVJMKHJlcXVlc3QudXJsKS5ob3N0IDogXCJcIilcbiAgICAgICkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiB0aGlzLnJ1bnRpbWVzLmdldChob3N0KSA/PyB0aGlzLnJ1bnRpbWVzLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwYXNza2V5c0VuYWJsZWQ6IFsuLi50aGlzLnJ1bnRpbWVzLnZhbHVlcygpXS5zb21lKChlbnRyeSkgPT4gZW50cnkucGFzc2tleXNFbmFibGVkKSxcbiAgICAgIGhhbmRsZXI6IChyZXF1ZXN0KSA9PlxuICAgICAgICBydW50aW1lKHJlcXVlc3QuaGVhZGVycywgcmVxdWVzdCk/LmhhbmRsZXIocmVxdWVzdCkgPz9cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKG5ldyBSZXNwb25zZShcIk5vdCBGb3VuZFwiLCB7IHN0YXR1czogNDA0IH0pKSxcbiAgICAgIHNlc3Npb246IChoZWFkZXJzKSA9PiBydW50aW1lKGhlYWRlcnMpPy5zZXNzaW9uKGhlYWRlcnMpID8/IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpLFxuICAgICAgc3RhdHVzOiAoaGVhZGVycykgPT5cbiAgICAgICAgcnVudGltZShoZWFkZXJzKT8uc3RhdHVzKGhlYWRlcnMpID8/XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSh7IGF1dGhlbnRpY2F0ZWQ6IGZhbHNlLCBlbmFibGVkOiBmYWxzZSwgcGFzc2tleXNFbmFibGVkOiBmYWxzZSB9KSxcbiAgICAgIGNsb3NlOiAoKSA9PiB0aGlzLnNodXRkb3duKCksXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhdXRoT3JpZ2luKHB1YmxpY0RvbWFpbj86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHZhbHVlID0gc3RyaW5nLnRyaW1Ub051bGwocHVibGljRG9tYWluKTtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiaHR0cDovL2xvY2FsaG9zdFwiO1xuICBpZiAoL15odHRwcz86XFwvXFwvL2kudGVzdCh2YWx1ZSkpIHJldHVybiBuZXcgVVJMKHZhbHVlKS5vcmlnaW47XG4gIGNvbnN0IGhvc3QgPSB2YWx1ZS5zcGxpdChcIi9cIilbMF0hO1xuICBjb25zdCBsb2NhbCA9IGhvc3QgPT09IFwibG9jYWxob3N0XCIgfHwgaG9zdC5zdGFydHNXaXRoKFwibG9jYWxob3N0OlwiKTtcbiAgcmV0dXJuIGAke2xvY2FsID8gXCJodHRwXCIgOiBcImh0dHBzXCJ9Oi8vJHtob3N0fWA7XG59XG5cbi8qKiBGYWN0b3J5OiBgYXV0aEdhdGUoeyBhbGxvdywgc3ViamVjdCwgLi4uIH0pYCBmb3IgYW4gQXBwS2l0IGBwbHVnaW5zYCBhcnJheS4gKi9cbmV4cG9ydCBjb25zdCBhdXRoR2F0ZSA9IHRvUGx1Z2luKEF1dGhHYXRlUGx1Z2luKTtcbiJdfQ==
|
|
274
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixRQUFRLEVBSVIsWUFBWSxHQUNiLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLE1BQU0sSUFBSSxZQUFZLEVBQUUsS0FBSyxJQUFJLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pGLE9BQU8sRUFDTCxJQUFJLElBQUksZ0JBQWdCLEVBQ3hCLE9BQU8sSUFBSSxXQUFXLEdBS3ZCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLE1BQU0sSUFBSSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsU0FBUyxFQUFvQixNQUFNLFdBQVcsQ0FBQztBQUN4RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxJQUFJLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFckYsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQWN6QyxTQUFTLGlCQUFpQixDQUFDLE9BQXlCO0lBQ2xELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUNvQixDQUFDO0lBQ3JFLE1B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Q2xGLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGBhdXRoR2F0ZSgpYCAtIHRoZSBBcHBLaXQgYWRhcHRlciBhcm91bmQgYEBkYngtdG9vbHMvYXV0aC1nYXRlYC5cbiAqXG4gKiBJdCBoYXMgTk8gcm91dGVzIG9mIGl0cyBvd246IHRoZSB0dW5uZWwgUFJPWFkgKG5vdCBhbiBIVFRQIHNlcnZlcikgY2FsbHMgdGhlXG4gKiBoYW5kbGVycyB0aGlzIHBsdWdpbiBleHBvc2VzIHZpYSB7QGxpbmsgQXV0aEdhdGVQbHVnaW4uZXhwb3J0c30uIFRoZSBwbHVnaW5cbiAqIG93bnMgdHVubmVsIGF1dGhvcml6YXRpb24sIEFwcEtpdCBMYWtlYmFzZSBkaXNjb3ZlcnksIGVtYWlsIGRlbGl2ZXJ5LCBhbmRcbiAqIHRyYW5zcG9ydCBtb3VudGluZy4gQmV0dGVyIEF1dGggb3ducyB1c2VycywgT1RQcywgc2Vzc2lvbnMsIHJhdGUgbGltaXRzLCBhbmRcbiAqIHBhc3NrZXlzLiBgY3JlYXRlQXBwYCBjYW4gcnVuIHRoaXMgcGx1Z2luIHdpdGggb3Igd2l0aG91dCBgc2VydmVyKClgLlxuICpcbiAqIE9wdGlvbnMgY29tZSBmcm9tIENMSSBmbGFncyBPUiBlbnYsIHdpdGggc2Vuc2libGUgZGVmYXVsdHMgLSBzZWVcbiAqIHtAbGluayByZXNvbHZlQXV0aEdhdGVDb25maWd9LiBUaGUgb25lIHJ1bnRpbWUgZGVwZW5kZW5jeSB0aGUgcGx1Z2luIGNhbid0XG4gKiByZXNvbHZlIGl0c2VsZiBpcyBIT1cgdG8gZW1haWwgdGhlIGNvZGUsIHNvIGl0IHRha2VzIGEgYHNlbmRDb2RlYCBjYWxsYmFjayB0aGVcbiAqIGFwcCB3aXJlcyB0byB0aGUgZW1haWwgcGx1Z2luLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQge1xuICBsYWtlYmFzZSxcbiAgUGx1Z2luLFxuICB0b1BsdWdpbixcbiAgdHlwZSBCYXNlUGx1Z2luQ29uZmlnLFxuICB0eXBlIFBsdWdpbk1hbmlmZXN0LFxuICB0eXBlIFJlc291cmNlUmVxdWlyZW1lbnQsXG4gIFJlc291cmNlVHlwZSxcbn0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgcGx1Z2luIGFzIGFwcGtpdFBsdWdpbiwgYnJhbmQgYXMgYXBwa2l0QnJhbmQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbmltcG9ydCB7XG4gIGF1dGggYXMgcGFzc3dvcmRsZXNzQXV0aCxcbiAgc3RvcmFnZSBhcyBhdXRoU3RvcmFnZSxcbiAgdHlwZSBBdXRob3JpemVJZGVudGl0eSxcbiAgdHlwZSBBdXRoU3RvcmFnZUNvbmZpZyxcbiAgdHlwZSBBdXRoU3RvcmFnZU1vZGUsXG4gIHR5cGUgUGFzc3dvcmRsZXNzQXV0aFJ1bnRpbWUsXG59IGZyb20gXCJAZGJ4LXRvb2xzL2F1dGgtZ2F0ZVwiO1xuaW1wb3J0IHsgY29uZmlnIGFzIGNvcmVDb25maWcgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEF1dGhTdGF0dXMgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtYXV0aFwiO1xuaW1wb3J0IHsgYnJhbmQsIGxvZywgc3RyaW5nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgUmVxdWVzdEhhbmRsZXIgfSBmcm9tIFwiZXhwcmVzc1wiO1xuaW1wb3J0IHsgVFVOTkVMX0NPTkZJRyB9IGZyb20gXCIuL19jb25maWcudHNcIjtcbmltcG9ydCB7IGxvb2tzTGlrZUVtYWlsLCBtYXRjaGVzQWxsb3dsaXN0IH0gZnJvbSBcIi4vYWxsb3dsaXN0LnRzXCI7XG5pbXBvcnQgeyBtb3VudEdhdGUsIHR5cGUgR2F0ZU9wdGlvbnMgfSBmcm9tIFwiLi9nYXRlLnRzXCI7XG5pbXBvcnQgeyBlbnN1cmVFbWFpbEF2YWlsYWJsZSwgc2VuZENvZGUgYXMgZGVmYXVsdFNlbmRDb2RlIH0gZnJvbSBcIi4vc2VuZC1jb2RlLnRzXCI7XG5pbXBvcnQgeyBLRVlfVFRMX1NFQ09ORFMsIHJlc29sdmVTZXNzaW9uQ3V0b2ZmLCBzaWduaW5nS2V5IH0gZnJvbSBcIi4vc2lnbmluZy1rZXkudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcInR1bm5lbDphdXRoXCIpO1xuXG5pbnRlcmZhY2UgR2F0ZVNlcnZlckFwcGxpY2F0aW9uIHtcbiAgZ2V0KHBhdGg6IHN0cmluZywgaGFuZGxlcjogUmVxdWVzdEhhbmRsZXIpOiB1bmtub3duO1xuICBwb3N0KHBhdGg6IHN0cmluZywgaGFuZGxlcjogUmVxdWVzdEhhbmRsZXIpOiB1bmtub3duO1xuICB1c2UocGF0aDogc3RyaW5nLCBoYW5kbGVyOiBSZXF1ZXN0SGFuZGxlcik6IHVua25vd247XG59XG5cbmludGVyZmFjZSBHYXRlTW91bnRDb250ZXh0IHtcbiAgYWRkUm91dGUobWV0aG9kOiBzdHJpbmcsIHBhdGg6IHN0cmluZywgaGFuZGxlcjogUmVxdWVzdEhhbmRsZXIpOiB2b2lkO1xuICBhZGRNaWRkbGV3YXJlKHBhdGg6IHN0cmluZywgaGFuZGxlcjogUmVxdWVzdEhhbmRsZXIpOiB2b2lkO1xuICBnZXRQbHVnaW5zKCk6IFJlYWRvbmx5TWFwPHN0cmluZywgdW5rbm93bj47XG59XG5cbmZ1bmN0aW9uIHNlcnZlckFwcGxpY2F0aW9uKGNvbnRleHQ6IEdhdGVNb3VudENvbnRleHQpOiBHYXRlU2VydmVyQXBwbGljYXRpb24gfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJ2ZXIgPSBjb250ZXh0LmdldFBsdWdpbnMoKS5nZXQoXCJzZXJ2ZXJcIikgYXNcbiAgICB7IHNlcnZlckFwcGxpY2F0aW9uPzogUGFydGlhbDxHYXRlU2VydmVyQXBwbGljYXRpb24+IH0gfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGFwcGxpY2F0aW9uID0gc2VydmVyPy5zZXJ2ZXJBcHBsaWNhdGlvbjtcbiAgcmV0dXJuIGFwcGxpY2F0aW9uICYmXG4gICAgdHlwZW9mIGFwcGxpY2F0aW9uLmdldCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIGFwcGxpY2F0aW9uLnBvc3QgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiBhcHBsaWNhdGlvbi51c2UgPT09IFwiZnVuY3Rpb25cIlxuICAgID8gKGFwcGxpY2F0aW9uIGFzIEdhdGVTZXJ2ZXJBcHBsaWNhdGlvbilcbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vdW50R2F0ZU9uQ29udGV4dChjb250ZXh0OiBHYXRlTW91bnRDb250ZXh0LCBvcHRpb25zOiBHYXRlT3B0aW9ucyk6IHZvaWQge1xuICBjb25zdCBhcHBsaWNhdGlvbiA9IHNlcnZlckFwcGxpY2F0aW9uKGNvbnRleHQpO1xuICBpZiAoYXBwbGljYXRpb24pIHtcbiAgICBtb3VudEdhdGUoXG4gICAgICBvcHRpb25zLFxuICAgICAgKG1ldGhvZCwgcGF0aCwgaGFuZGxlcikgPT4gYXBwbGljYXRpb25bbWV0aG9kXShwYXRoLCBoYW5kbGVyKSxcbiAgICAgIChwYXRoLCBoYW5kbGVyKSA9PiBhcHBsaWNhdGlvbi51c2UocGF0aCwgaGFuZGxlciksXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbW91bnRHYXRlKFxuICAgIG9wdGlvbnMsXG4gICAgKG1ldGhvZCwgcGF0aCwgaGFuZGxlcikgPT4gY29udGV4dC5hZGRSb3V0ZShtZXRob2QsIHBhdGgsIGhhbmRsZXIpLFxuICAgIChwYXRoLCBoYW5kbGVyKSA9PiBjb250ZXh0LmFkZE1pZGRsZXdhcmUocGF0aCwgaGFuZGxlciksXG4gICk7XG59XG5cbi8qKiBPcHRpb25zIGZvciB0aGUge0BsaW5rIGF1dGhHYXRlfSBwbHVnaW4gKGFsbCByZXNvbHZhYmxlIGZyb20gZW52IC0gc2VlIGJlbG93KS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aEdhdGVDb25maWcgZXh0ZW5kcyBCYXNlUGx1Z2luQ29uZmlnLCBBdXRoU3RvcmFnZUNvbmZpZyB7XG4gIC8qKiBBbGxvdy1saXN0IHBhdHRlcm5zIChkb21haW4gLyBnbG9iIC8gYC9yZWdleC9gKS4gRW1wdHkgPSBhbGxvdyBub2JvZHkuIEVudiBUVU5ORUxfQVVUSF9BTExPVy4gKi9cbiAgYWxsb3c/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFN1YmplY3QgbGluZSBmb3IgdGhlIGNvZGUgZW1haWwuIEVudiBUVU5ORUxfQVVUSF9TVUJKRUNULlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byBcIllvdXIgdmVyaWZpY2F0aW9uIGNvZGVcIi4gVGhlIHdvcmRpbmcgb2YgdGhlIHN1YmplY3QgYW5kXG4gICAqIHtAbGluayBtZXNzYWdlfSBpcyBkZWxpYmVyYXRlbHkgdGhlIGNvbnZlbnRpb25hbCBwaHJhc2luZyByYXRoZXIgdGhhblxuICAgKiBhbnl0aGluZyBicmFuZGVkOiBpT1MsIEdtYWlsLCBPdXRsb29rLCBhbmQgQW5kcm9pZCBhbGwgZGV0ZWN0IGEgb25lLXRpbWVcbiAgICogY29kZSBmcm9tIHRoaXMgc2hhcGUgYW5kIG9mZmVyIHRvIGF1dG9maWxsIGl0LCBhbmQgYSBub3ZlbCBwaHJhc2luZyBpcyB3aGF0XG4gICAqIGJyZWFrcyB0aGF0IGRldGVjdGlvbi5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgc3ViamVjdCBURU1QTEFURSwgbm90IHRoZSBsaXRlcmFsIGxpbmUgc2VudDogdGhlIGNvZGUgaXMgc3BsaWNlZFxuICAgKiBpbnRvIGl0IChgXCIxMjM0NTYgaXMgeW91ciB2ZXJpZmljYXRpb24gY29kZVwiYCkgYmVjYXVzZSBhIHB1c2ggbm90aWZpY2F0aW9uXG4gICAqIHNob3dzIG9ubHkgdGhlIHN1YmplY3QgYW5kIHByZWhlYWRlciwgYW5kIHRoYXQgbm90aWZpY2F0aW9uIGlzIHdoYXQgbW9iaWxlXG4gICAqIGF1dG9maWxsIHJlYWRzLiBTZWUgYGNvZGVFbWFpbFN1YmplY3RgIGluIGAuL2NvZGUtZW1haWwudHNgLlxuICAgKi9cbiAgc3ViamVjdD86IHN0cmluZztcbiAgLyoqXG4gICAqIERpc3BsYXkgbmFtZSB1c2VkIGluIHRoZSBjb2RlIGVtYWlsIGNvcHkuIEVudiBUVU5ORUxfQVVUSF9CUkFORF9OQU1FLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0aGUgYnJhbmQgY29udGV4dCdzIGBuYW1lYCAtIHRoZSBhcHAncyBvd24gYGJyYW5kaW5nL2JyYW5kLnlhbWxgXG4gICAqIHdoZW4gaXQgaGFzIG9uZSwgZWxzZSB0aGUgZGJ4LXRvb2xzIGRlZmF1bHQuIFNldCB0aGlzIG9ubHkgdG8gb3ZlcnJpZGUgdGhlXG4gICAqIGJyYW5kIGZvciB0aGlzIGdhdGUuXG4gICAqL1xuICBicmFuZE5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBMaW5lIHNob3duIGltbWVkaWF0ZWx5IGFib3ZlIHRoZSBjb2RlIGluIHRoZSBlbWFpbC4gRW52IFRVTk5FTF9BVVRIX01FU1NBR0UuXG4gICAqXG4gICAqIEtlZXAgdGhlIGNvZGUgb24gaXRzIE9XTiBsaW5lIGRpcmVjdGx5IGFmdGVyIHRoaXMgdGV4dCAtIHRoYXQgYWRqYWNlbmN5IGlzXG4gICAqIHdoYXQgdGhlIHBsYXRmb3JtIGNvZGUtZGV0ZWN0aW9uIGhldXJpc3RpY3Mga2V5IG9uLlxuICAgKi9cbiAgbWVzc2FnZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFNlc3Npb24gbGlmZXRpbWUgKHNlY29uZHMpLiBFbnYgVFVOTkVMX0FVVEhfU0VTU0lPTl9UVEwuIERlZmF1bHQgMjU5MjAwMCAoMzBkKS5cbiAgICpcbiAgICogTWF0Y2hlZCB0byB0aGUgY2FjaGUtYmFja2VkIHNpZ25pbmcga2V5J3Mgb3duIDMwLWRheSBUVEwgKHNlZVxuICAgKiBgLi9zaWduaW5nLWtleS50c2ApOiB0aGUgY29va2llIGFuZCB0aGUga2V5IHRoYXQgdmFsaWRhdGVzIGl0IHNob3VsZCBleHBpcmVcbiAgICogdG9nZXRoZXIsIG9yIG9uZSBzaWxlbnRseSBvdXRsaXZlcyB0aGUgb3RoZXIuXG4gICAqL1xuICBzZXNzaW9uVHRsU2Vjb25kcz86IG51bWJlcjtcbiAgLyoqIE9uZS10aW1lLWNvZGUgbGlmZXRpbWUgKHNlY29uZHMpLiBFbnYgVFVOTkVMX0FVVEhfQ09ERV9UVEwuIERlZmF1bHQgNjAwICgxMG0pLiAqL1xuICBjb2RlVHRsU2Vjb25kcz86IG51bWJlcjtcbiAgLyoqIE1heCB2ZXJpZnkgYXR0ZW1wdHMgcGVyIGlzc3VlZCBjb2RlLiBEZWZhdWx0IDUuICovXG4gIG1heEF0dGVtcHRzPzogbnVtYmVyO1xuICAvKipcbiAgICogRm9yY2UtY2xlYXIgY3V0b2ZmOiBldmVyeSBzZXNzaW9uIGlzc3VlZCBCRUZPUkUgaXQgc3RvcHMgdmVyaWZ5aW5nLCBzbyBtb3ZpbmdcbiAgICogaXQgZm9yd2FyZCBzaWducyBldmVyeW9uZSBvdXQuIEVudiBUVU5ORUxfQVVUSF9TRVNTSU9OX0NVVE9GRi5cbiAgICpcbiAgICogQW55dGhpbmcgYG9iamVjdC50b0RhdGVgIGFjY2VwdHM6IGEgYERhdGVgLCBgMjAyNi0wOC0wMmAsIGFuIElTTyBpbnN0YW50LFxuICAgKiBlcG9jaCBzZWNvbmRzL21pbGxpcywgb3IgYSByZWxhdGl2ZSBkdXJhdGlvbiAoYC0zMGRgLCBgNyBkYXlzIGFnb2ApLiBVbnNldFxuICAgKiBtZWFucyBubyBjdXRvZmYuXG4gICAqL1xuICBzZXNzaW9uQ3V0b2ZmPzogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZTtcbiAgLyoqXG4gICAqIFNhbWUtb3JpZ2luIHBhdGggcmV0dXJuZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIGxvZ291dC4gRW52XG4gICAqIGBUVU5ORUxfQVVUSF9MT0dPVVRfUkVESVJFQ1RgLiBEZWZhdWx0cyB0byBgL2AsIHdoZXJlIHRoZSBBdXRoR2F0ZSBwcmVzZW50c1xuICAgKiBsb2dpbiBhZ2Fpbi5cbiAgICovXG4gIGxvZ291dFJlZGlyZWN0UGF0aD86IHN0cmluZztcbiAgLyoqXG4gICAqIERlbGl2ZXIgYSBjb2RlIHRvIGFuIGFkZHJlc3MuIERlZmF1bHRzIHRvIHNlbmRpbmcgdGhyb3VnaCB0aGUgaG9zdCBhcHAnc1xuICAgKiBzaGFyZWQgYEBkYngtdG9vbHMvZW1haWxgIHRyYW5zcG9ydCAoc2VlIGAuL3NlbmQtY29kZWApOyBvdmVycmlkZSB0byB3aXJlIGFcbiAgICogZGlmZmVyZW50IGRlbGl2ZXJ5IHBhdGguXG4gICAqL1xuICBzZW5kQ29kZT86IChlbWFpbDogc3RyaW5nLCBjb2RlOiBzdHJpbmcsIG9wdHM6IFNlbmRDb2RlT3B0aW9ucykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIElkZW50aXR5IGF1dGhvcml6YXRpb24gaW5kZXBlbmRlbnQgb2YgYXV0aGVudGljYXRpb24uIERlZmF1bHRzIHRvIHRoZVxuICAgKiBjb25maWd1cmVkIGFsbG93LWxpc3QgYW5kIGlzIHJlLWV2YWx1YXRlZCBmb3IgZXZlcnkgYWNjZXB0ZWQgc2Vzc2lvbi5cbiAgICovXG4gIGF1dGhvcml6ZUlkZW50aXR5PzogQXV0aG9yaXplSWRlbnRpdHk7XG4gIC8qKlxuICAgKiBUaGUgcHVibGljIGA8c3ViZG9tYWluPi48c2VydmVyPmAgdGhhdCBpZGVudGlmaWVzIHBvcnRyIHRyYWZmaWMgYnkgaXRzIGBIb3N0YFxuICAgKiBoZWFkZXIuIE9ubHkgcmVxdWVzdHMgd2hvc2UgYEhvc3RgIG1hdGNoZXMgdGhpcyBhcmUgZ2F0ZWQ7IGV2ZXJ5dGhpbmcgZWxzZVxuICAgKiAodGhlIHBsYXRmb3JtIGZyb250IGRvb3IsIG90aGVyIGxvY2FsIGNhbGxlcnMpIHBhc3NlcyB0aHJvdWdoLiBFbnZcbiAgICogYFRVTk5FTF9QVUJMSUNfRE9NQUlOYC4gV2hlbiBhYnNlbnQsIHRoZSBnYXRlIGlzIGluZXJ0IChub3RoaW5nIGlzIHR1bm5lbFxuICAgKiB0cmFmZmljKS5cbiAgICovXG4gIHB1YmxpY0RvbWFpbj86IHN0cmluZztcbiAgLyoqIEFkZGl0aW9uYWwgcHVibGljIHR1bm5lbCBkb21haW5zIGFjY2VwdGVkIGJ5IHRoZSBnYXRlLiAqL1xuICBwdWJsaWNEb21haW5zPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIC8qKlxuICAgKiBFeHRyYSBgeC1gIHJlcXVlc3QgaGVhZGVycyB0dW5uZWwgdHJhZmZpYyBtYXkgZm9yd2FyZCAobGl0ZXJhbCAvIGdsb2IgL1xuICAgKiBgL3JlZ2V4L2ApLCB1bmlvbmVkIHdpdGggdGhlIGJ1aWx0LWluIGFsbG93LWxpc3QuIEVudiBgVFVOTkVMX0ZPUldBUkRfSEVBREVSU2AuXG4gICAqL1xuICBmb3J3YXJkSGVhZGVycz86IHN0cmluZyB8IHN0cmluZ1tdO1xuICAvKipcbiAgICogUGF0aCBwcmVmaXhlcyB0byBnYXRlIGJleW9uZCB0aGUgYnVpbHQtaW4gYC9hcGkvYCAobGl0ZXJhbCBwcmVmaXhlcywgY29tbWEtXG4gICAqIG9yIHNwYWNlLXNlcGFyYXRlZCBhcyBhIHN0cmluZykuIEZvciBhbiBhcHAgd2hvc2UgcHJpdmlsZWdlZCBzdXJmYWNlIGlzIG5vdFxuICAgKiB1bmRlciBgL2FwaS9gIOKAlCBlLmcuIGEgV2ViU29ja2V0IGF0IGAvd3NgIOKAlCBsaXN0IHRob3NlIHByZWZpeGVzIHNvIHRoZXlcbiAgICogcmVxdWlyZSBhIHNlc3Npb24gdG9vLiBFbnYgYFRVTk5FTF9HQVRFX1BBVEhTYC5cbiAgICovXG4gIGdhdGVQYXRocz86IHN0cmluZyB8IHN0cmluZ1tdO1xuICAvKipcbiAgICogUnVuIE9QRU4gd2l0aCBubyBnYXRlIChlbnYgYFRVTk5FTF9JTlNFQ1VSRT10cnVlYCkuIFRoZSBsb2dpbiByb3V0ZXMgYW5kIGdhdGVcbiAgICogbWlkZGxld2FyZSBhcmUgbm90IG1vdW50ZWQsIGFuZCB0aGUgU01UUCBmYWlsLWZhc3QgaXMgc2tpcHBlZC4gVXNlIG9ubHkgd2hlblxuICAgKiB0aGUgdHVubmVsIGlzIGRlbGliZXJhdGVseSBwdWJsaWMuXG4gICAqL1xuICBpbnNlY3VyZT86IGJvb2xlYW47XG59XG5cbi8qKiBCcmFuZGluZy9tZXNzYWdpbmcgcGFzc2VkIHRvIHtAbGluayBBdXRoR2F0ZUNvbmZpZy5zZW5kQ29kZX0uICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbmRDb2RlT3B0aW9ucyB7XG4gIHN1YmplY3Q6IHN0cmluZztcbiAgYnJhbmROYW1lOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgLyoqXG4gICAqIExpZmV0aW1lIG9mIHRoZSBjb2RlIGJlaW5nIHNlbnQsIGluIHNlY29uZHMgLSB0aGUgUkVTT0xWRURcbiAgICoge0BsaW5rIEF1dGhHYXRlQ29uZmlnLmNvZGVUdGxTZWNvbmRzfSwgc28gdGhlIGVtYWlsIGNhbiBzdGF0ZSB0aGUgcmVhbFxuICAgKiBleHBpcnkgKFwiVGhpcyBjb2RlIGV4cGlyZXMgaW4gMTAgbWludXRlc1wiKSBpbnN0ZWFkIG9mIGEgdmFndWUgXCJzaG9ydGx5XCJcbiAgICogdGhhdCBkcmlmdHMgZnJvbSB0aGUgY29uZmlndXJlZCBUVEwuXG4gICAqL1xuICBjb2RlVHRsU2Vjb25kczogbnVtYmVyO1xufVxuXG4vKiogUmVzb2x2ZWQgZ2F0ZSBjb25maWcgd2l0aCBlbnYgZmFsbGJhY2tzICsgZGVmYXVsdHMgYXBwbGllZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRBdXRoR2F0ZUNvbmZpZyB7XG4gIGFsbG93OiBzdHJpbmdbXTtcbiAgc3ViamVjdDogc3RyaW5nO1xuICBicmFuZE5hbWU6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzZXNzaW9uVHRsU2Vjb25kczogbnVtYmVyO1xuICBjb2RlVHRsU2Vjb25kczogbnVtYmVyO1xuICBtYXhBdHRlbXB0czogbnVtYmVyO1xuICAvKiogRm9yY2UtY2xlYXIgY3V0b2ZmIGluIGVwb2NoIG1zOyBgMGAgd2hlbiB1bnNldC4gKi9cbiAgc2Vzc2lvbkN1dG9mZk1zOiBudW1iZXI7XG4gIC8qKiBTYW1lLW9yaWdpbiBwYXRoIHJldHVybmVkIGFmdGVyIGxvZ291dC4gKi9cbiAgbG9nb3V0UmVkaXJlY3RQYXRoOiBzdHJpbmc7XG4gIC8qKiBQcmltYXJ5IHB1YmxpYyBkb21haW47IGB1bmRlZmluZWRgIHdoZW4gUG9ydHIgaXMgbm90IGNvbmZpZ3VyZWQuICovXG4gIHB1YmxpY0RvbWFpbj86IHN0cmluZztcbiAgLyoqIEFsbCBwdWJsaWMgdHVubmVsIGRvbWFpbnMgYWNjZXB0ZWQgYnkgdGhlIGdhdGUuICovXG4gIHB1YmxpY0RvbWFpbnM6IHN0cmluZ1tdO1xuICAvKiogRXh0cmEgYHgtYCBoZWFkZXJzIHR1bm5lbCB0cmFmZmljIG1heSBmb3J3YXJkICh1bmlvbmVkIHdpdGggdGhlIGRlZmF1bHRzKS4gKi9cbiAgZm9yd2FyZEhlYWRlcnM6IHN0cmluZ1tdO1xuICAvKiogUGF0aCBwcmVmaXhlcyB0byBnYXRlIGJleW9uZCBgL2FwaS9gIChlLmcuIGAvd3NgKS4gKi9cbiAgZ2F0ZVBhdGhzOiBzdHJpbmdbXTtcbiAgLyoqIFJ1biBPUEVOIHdpdGggbm8gZ2F0ZS4gKi9cbiAgaW5zZWN1cmU6IGJvb2xlYW47XG4gIHN0b3JhZ2U6IEF1dGhTdG9yYWdlTW9kZTtcbiAgc3FsaXRlUGF0aD86IHN0cmluZztcbn1cblxuY29uc3QgREVGQVVMVFMgPSB7XG4gIHN1YmplY3Q6IFwiWW91ciB2ZXJpZmljYXRpb24gY29kZVwiLFxuICAvLyBUaGUgcmVwby13aWRlIGJyYW5kIGNvbnRleHQncyBkaXNwbGF5IG5hbWUsIE5PVCBhIGhhcmRjb2RlZCBwcm9kdWN0IHN0cmluZzpcbiAgLy8gdGhpcyBuYW1lIGlzIHdoYXQgdGhlIHJlY2lwaWVudCByZWFkcyBpbiB0aGUgY29kZSBlbWFpbCwgc28gaXQgaGFzIHRvIGJlIHRoZVxuICAvLyBzYW1lIGlkZW50aXR5IHRoZSByZXN0IG9mIHRoZSBhcHAgcHJlc2VudHMuIEEgaG9zdCB3aXRoIGl0cyBvd25cbiAgLy8gYGJyYW5kaW5nL2JyYW5kLnlhbWxgIG92ZXJyaWRlcyBpdCBieSBwYXNzaW5nIGBicmFuZE5hbWVgOyB0aGUgc2hhcmVkIGRlZmF1bHRcbiAgLy8gaXMgdGhlIGZhbGxiYWNrIHdoZW4gbm90aGluZyBpcyBjb25maWd1cmVkLlxuICBicmFuZE5hbWU6IGJyYW5kLmRlZmF1bHRCcmFuZENvbnRleHQubmFtZSxcbiAgbWVzc2FnZTogXCJZb3VyIHZlcmlmaWNhdGlvbiBjb2RlIGlzOlwiLFxuICAvLyAzMCBkYXlzLCB0aGUgc2FtZSB3aW5kb3cgdGhlIGNhY2hlLWJhY2tlZCBzaWduaW5nIGtleSBpcyBzdG9yZWQgZm9yLlxuICBzZXNzaW9uVHRsU2Vjb25kczogS0VZX1RUTF9TRUNPTkRTLFxuICBjb2RlVHRsU2Vjb25kczogNjAwLFxuICBtYXhBdHRlbXB0czogNSxcbiAgbG9nb3V0UmVkaXJlY3RQYXRoOiBcIi9cIixcbn07XG5cbi8qKiBNZXJnZSB7QGxpbmsgQXV0aEdhdGVDb25maWd9IG92ZXIgZW52IG92ZXIgZGVmYXVsdHMgaW50byBhIHJlc29sdmVkIGNvbmZpZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQXV0aEdhdGVDb25maWcoY29uZmlnOiBBdXRoR2F0ZUNvbmZpZyk6IFJlc29sdmVkQXV0aEdhdGVDb25maWcge1xuICBjb25zdCBzdG9yYWdlID0gYXV0aFN0b3JhZ2UucmVzb2x2ZUF1dGhTdG9yYWdlQ29uZmlnKHtcbiAgICBzdG9yYWdlOlxuICAgICAgY29uZmlnLnN0b3JhZ2UgPz9cbiAgICAgIChjb3JlQ29uZmlnLnRleHQoXCJBVVRIX1NUT1JBR0VcIiwgVFVOTkVMX0NPTkZJRykgYXMgQXV0aFN0b3JhZ2VNb2RlIHwgdW5kZWZpbmVkKSxcbiAgICBzcWxpdGVQYXRoOiBjb25maWcuc3FsaXRlUGF0aCA/PyBjb3JlQ29uZmlnLnRleHQoXCJBVVRIX1NRTElURV9QQVRIXCIsIFRVTk5FTF9DT05GSUcpLFxuICB9KTtcbiAgY29uc3QgcHVibGljRG9tYWluID0gY29yZUNvbmZpZy5zdHJpbmcoY29uZmlnLnB1YmxpY0RvbWFpbiwgXCJQVUJMSUNfRE9NQUlOXCIsIFRVTk5FTF9DT05GSUcpO1xuICBjb25zdCBmcnBQdWJsaWNEb21haW4gPSBjb3JlQ29uZmlnLnRleHQoXCJGUlBfUFVCTElDX0RPTUFJTlwiLCBUVU5ORUxfQ09ORklHKTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCb3RoIHNvdXJjZXMgYXJlIHVuaW9uZWQgcmF0aGVyIHRoYW4gb25lIG92ZXJyaWRpbmc6IGEgZGVwbG95bWVudC13aWRlXG4gICAgLy8gVFVOTkVMX0FVVEhfQUxMT1cgYW5kIGEgcGVyLWludm9jYXRpb24gYC0tYWxsb3dgIHNob3VsZCBib3RoIGdyYW50IGFjY2Vzcy5cbiAgICAvLyBIZW5jZSBgcGFyc2VMaXN0YCBvbiBlYWNoIHJhdGhlciB0aGFuIGBjb25maWcubGlzdGAsIHdoaWNoIHN0b3BzIGF0IHRoZVxuICAgIC8vIGZpcnN0IHNvdXJjZSB0aGF0IHlpZWxkcyBhbnl0aGluZy5cbiAgICBhbGxvdzogW1xuICAgICAgLi4uc3RyaW5nLnBhcnNlTGlzdChjb25maWcuYWxsb3cpLFxuICAgICAgLi4uc3RyaW5nLnBhcnNlTGlzdChjb3JlQ29uZmlnLnRleHQoW1wiQVVUSF9BTExPV1wiLCBcIkVNQUlMX0FVVEhfQUxMT1dcIl0sIFRVTk5FTF9DT05GSUcpKSxcbiAgICBdLFxuICAgIHN1YmplY3Q6IGNvcmVDb25maWcuc3RyaW5nKGNvbmZpZy5zdWJqZWN0LCBcIkFVVEhfU1VCSkVDVFwiLCBUVU5ORUxfQ09ORklHKSA/PyBERUZBVUxUUy5zdWJqZWN0LFxuICAgIGJyYW5kTmFtZTpcbiAgICAgIGNvcmVDb25maWcuc3RyaW5nKGNvbmZpZy5icmFuZE5hbWUsIFwiQVVUSF9CUkFORF9OQU1FXCIsIFRVTk5FTF9DT05GSUcpID8/IERFRkFVTFRTLmJyYW5kTmFtZSxcbiAgICBtZXNzYWdlOiBjb3JlQ29uZmlnLnN0cmluZyhjb25maWcubWVzc2FnZSwgXCJBVVRIX01FU1NBR0VcIiwgVFVOTkVMX0NPTkZJRykgPz8gREVGQVVMVFMubWVzc2FnZSxcbiAgICBzZXNzaW9uVHRsU2Vjb25kczogY29yZUNvbmZpZy5wb3NpdGl2ZUludChcbiAgICAgIGNvbmZpZy5zZXNzaW9uVHRsU2Vjb25kcyxcbiAgICAgIFwiQVVUSF9TRVNTSU9OX1RUTFwiLFxuICAgICAgREVGQVVMVFMuc2Vzc2lvblR0bFNlY29uZHMsXG4gICAgICBUVU5ORUxfQ09ORklHLFxuICAgICksXG4gICAgY29kZVR0bFNlY29uZHM6IGNvcmVDb25maWcucG9zaXRpdmVJbnQoXG4gICAgICBjb25maWcuY29kZVR0bFNlY29uZHMsXG4gICAgICBcIkFVVEhfQ09ERV9UVExcIixcbiAgICAgIERFRkFVTFRTLmNvZGVUdGxTZWNvbmRzLFxuICAgICAgVFVOTkVMX0NPTkZJRyxcbiAgICApLFxuICAgIG1heEF0dGVtcHRzOiBjb25maWcubWF4QXR0ZW1wdHMgPz8gREVGQVVMVFMubWF4QXR0ZW1wdHMsXG4gICAgc2Vzc2lvbkN1dG9mZk1zOiByZXNvbHZlU2Vzc2lvbkN1dG9mZihjb25maWcuc2Vzc2lvbkN1dG9mZiksXG4gICAgbG9nb3V0UmVkaXJlY3RQYXRoOiBwYXNzd29yZGxlc3NBdXRoLm5vcm1hbGl6ZUxvZ291dFJlZGlyZWN0UGF0aChcbiAgICAgIGNvcmVDb25maWcuc3RyaW5nKGNvbmZpZy5sb2dvdXRSZWRpcmVjdFBhdGgsIFwiQVVUSF9MT0dPVVRfUkVESVJFQ1RcIiwgVFVOTkVMX0NPTkZJRykgPz9cbiAgICAgICAgREVGQVVMVFMubG9nb3V0UmVkaXJlY3RQYXRoLFxuICAgICksXG4gICAgcHVibGljRG9tYWluLFxuICAgIHB1YmxpY0RvbWFpbnM6IFtcbiAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgIFtwdWJsaWNEb21haW4sIGZycFB1YmxpY0RvbWFpbiwgLi4uc3RyaW5nLnBhcnNlTGlzdChjb25maWcucHVibGljRG9tYWlucyldLmZpbHRlcihcbiAgICAgICAgICAodmFsdWUpOiB2YWx1ZSBpcyBzdHJpbmcgPT4gISF2YWx1ZSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgXSxcbiAgICBmb3J3YXJkSGVhZGVyczogW1xuICAgICAgLi4uc3RyaW5nLnBhcnNlTGlzdChjb25maWcuZm9yd2FyZEhlYWRlcnMpLFxuICAgICAgLi4uc3RyaW5nLnBhcnNlTGlzdChjb3JlQ29uZmlnLnRleHQoXCJGT1JXQVJEX0hFQURFUlNcIiwgVFVOTkVMX0NPTkZJRykpLFxuICAgIF0sXG4gICAgZ2F0ZVBhdGhzOiBbXG4gICAgICAuLi5zdHJpbmcucGFyc2VMaXN0KGNvbmZpZy5nYXRlUGF0aHMpLFxuICAgICAgLi4uc3RyaW5nLnBhcnNlTGlzdChjb3JlQ29uZmlnLnRleHQoXCJHQVRFX1BBVEhTXCIsIFRVTk5FTF9DT05GSUcpKSxcbiAgICBdLFxuICAgIGluc2VjdXJlOiBjb3JlQ29uZmlnLmJvb2xlYW4oY29uZmlnLmluc2VjdXJlLCBcIklOU0VDVVJFXCIsIFRVTk5FTF9DT05GSUcpID8/IGZhbHNlLFxuICAgIHN0b3JhZ2U6IHN0b3JhZ2UubW9kZSxcbiAgICBzcWxpdGVQYXRoOiBzdG9yYWdlLnNxbGl0ZVBhdGgsXG4gIH07XG59XG5cbi8qKiBUaGUgaGFuZGxlcnMgdGhlIGdhdGUgbWlkZGxld2FyZSBjYWxscyBpbi1wcm9jZXNzIChyZXR1cm5lZCBieSB7QGxpbmsgQXV0aEdhdGVQbHVnaW4uZXhwb3J0c30pLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRoR2F0ZUFwaSB7XG4gIC8qKiBCZXR0ZXIgQXV0aCBhbmQgY29tcGF0aWJpbGl0eSByb3V0ZXMgdW5kZXIgYC9hcGkvZW1haWwvYXV0aC8qYC4gKi9cbiAgaGFuZGxlcihyZXF1ZXN0OiBSZXF1ZXN0KTogUHJvbWlzZTxSZXNwb25zZT47XG4gIC8qKiBSZXNvbHZlIHRoZSBhdXRob3JpemVkIGVtYWlsIGZvciByZXF1ZXN0IGhlYWRlcnMsIG9yIHVuZGVmaW5lZC4gKi9cbiAgc2Vzc2lvbihoZWFkZXJzOiBIZWFkZXJzKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICAvKiogVGhlIGdhdGUgc3RhdHVzIHBheWxvYWQuICovXG4gIHN0YXR1cyhoZWFkZXJzOiBIZWFkZXJzKTogUHJvbWlzZTxBdXRoU3RhdHVzPjtcbiAgLyoqIFdoZXRoZXIgdGhlIHJ1bnRpbWUgZXhwb3NlcyBwYXNza2V5IGVucm9sbG1lbnQgYW5kIGF1dGhlbnRpY2F0aW9uLiAqL1xuICByZWFkb25seSBwYXNza2V5c0VuYWJsZWQ6IGJvb2xlYW47XG4gIC8qKiBDbG9zZSBhdXRoIHN0b3JhZ2Ugb3duZWQgYnkgdGhpcyBydW50aW1lLiAqL1xuICBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIEFwcEtpdCBwbHVnaW4gYWRhcHRpbmcgYEBkYngtdG9vbHMvYXV0aC1nYXRlYCB0byB0dW5uZWwgdHJhZmZpYy4gT24gYHNldHVwKClgIGl0IHJlZ2lzdGVycyB0aGUgbG9naW5cbiAqIHJvdXRlcyAoYC9hcGkvZW1haWwvYXV0aC8qYCkgYW5kIGEgZ2F0aW5nIG1pZGRsZXdhcmUgb24gdGhlIGFwcCdzIE9XTiBFeHByZXNzXG4gKiBzZXJ2ZXIgdmlhIGB0aGlzLmNvbnRleHRgLCBzbyBhIHB1YmxpYyBwb3J0ciBjYWxsZXIgbXVzdCBwcm92ZSBhbiBlbWFpbCBiZWZvcmVcbiAqIHJlYWNoaW5nIHRoZSBhcHAncyBgL2FwaS8qYCAtIHNlZSBgLi9nYXRlYC4gRnJvbnQtZG9vciAocGxhdGZvcm0pIHRyYWZmaWMgYW5kXG4gKiBvdGhlciBsb2NhbCBjYWxsZXJzIHBhc3MgdGhyb3VnaCB1bnRvdWNoZWQgKHRoZSBnYXRlIGtleXMgb24gdGhlIGBIb3N0YCBoZWFkZXIpLlxuICovXG5leHBvcnQgY2xhc3MgQXV0aEdhdGVQbHVnaW4gZXh0ZW5kcyBQbHVnaW48QXV0aEdhdGVDb25maWc+IHtcbiAgc3RhdGljIG1hbmlmZXN0ID0ge1xuICAgIG5hbWU6IFwiYXV0aEdhdGVcIixcbiAgICBkaXNwbGF5TmFtZTogXCJBdXRoIEdhdGVcIixcbiAgICBkZXNjcmlwdGlvbjogXCJCZXR0ZXIgQXV0aCBlbWFpbCBPVFAgYW5kIHBhc3NrZXkgYWNjZXNzIGdhdGUgZm9yIGEgcHVibGljIHR1bm5lbC5cIixcbiAgICBzdGFiaWxpdHk6IFwiYmV0YVwiLFxuICAgIHJlc291cmNlczoge1xuICAgICAgcmVxdWlyZWQ6IFtdLFxuICAgICAgb3B0aW9uYWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFJlc291cmNlVHlwZS5QT1NUR1JFUyxcbiAgICAgICAgICBhbGlhczogXCJhdXRoXCIsXG4gICAgICAgICAgcmVzb3VyY2VLZXk6IFwiYXV0aC1kYXRhYmFzZVwiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkR1cmFibGUgdXNlcnMsIHNlc3Npb25zLCBPVFAgcmVjb3JkcywgYW5kIHBhc3NrZXlzLlwiLFxuICAgICAgICAgIHBlcm1pc3Npb246IFwiQ0FOX0NPTk5FQ1RfQU5EX0NSRUFURVwiLFxuICAgICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgaW5zdGFuY2VfbmFtZTogeyBlbnY6IFwiTEFLRUJBU0VfSU5TVEFOQ0VfTkFNRVwiIH0sXG4gICAgICAgICAgICBkYXRhYmFzZV9uYW1lOiB7IGVudjogXCJQR0RBVEFCQVNFXCIgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9IHNhdGlzZmllcyBQbHVnaW5NYW5pZmVzdDxcImF1dGhHYXRlXCI+O1xuXG4gIHByaXZhdGUgcmVzb2x2ZWQhOiBSZXNvbHZlZEF1dGhHYXRlQ29uZmlnO1xuICBwcml2YXRlIHJlYWRvbmx5IHJ1bnRpbWVzID0gbmV3IE1hcDxzdHJpbmcsIFBhc3N3b3JkbGVzc0F1dGhSdW50aW1lPigpO1xuXG4gIHN0YXRpYyBnZXRSZXNvdXJjZVJlcXVpcmVtZW50cyhjb25maWc6IEF1dGhHYXRlQ29uZmlnKTogUmVzb3VyY2VSZXF1aXJlbWVudFtdIHtcbiAgICBpZiAoYXV0aFN0b3JhZ2UucmVzb2x2ZUF1dGhTdG9yYWdlQ29uZmlnKGNvbmZpZykubW9kZSAhPT0gXCJsYWtlYmFzZVwiKSByZXR1cm4gW107XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogUmVzb3VyY2VUeXBlLlBPU1RHUkVTLFxuICAgICAgICBhbGlhczogXCJhdXRoXCIsXG4gICAgICAgIHJlc291cmNlS2V5OiBcImF1dGgtZGF0YWJhc2VcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiRHVyYWJsZSB1c2Vycywgc2Vzc2lvbnMsIE9UUCByZWNvcmRzLCBhbmQgcGFzc2tleXMuXCIsXG4gICAgICAgIHBlcm1pc3Npb246IFwiQ0FOX0NPTk5FQ1RfQU5EX0NSRUFURVwiLFxuICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICBpbnN0YW5jZV9uYW1lOiB7IGVudjogXCJMQUtFQkFTRV9JTlNUQU5DRV9OQU1FXCIgfSxcbiAgICAgICAgICBkYXRhYmFzZV9uYW1lOiB7IGVudjogXCJQR0RBVEFCQVNFXCIgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBzZXR1cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnJlc29sdmVkID0gcmVzb2x2ZUF1dGhHYXRlQ29uZmlnKHRoaXMuY29uZmlnKTtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmJyYW5kTmFtZSAmJiAhY29yZUNvbmZpZy50ZXh0KFwiQVVUSF9CUkFORF9OQU1FXCIsIFRVTk5FTF9DT05GSUcpKSB7XG4gICAgICB0aGlzLnJlc29sdmVkLmJyYW5kTmFtZSA9IGFwcGtpdEJyYW5kLmdldEJyYW5kQ29udGV4dCgpLm5hbWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzb2x2ZWQuaW5zZWN1cmUpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiaW5zZWN1cmUgbW9kZSAtIHRoZSB0dW5uZWwgcnVucyBPUEVOIHdpdGggbm8gYXV0aCBnYXRlXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsYWtlYmFzZVBsdWdpbiA9IGFwcGtpdFBsdWdpbi5pbnN0YW5jZSh0aGlzLmNvbnRleHQsIGxha2ViYXNlKTtcbiAgICAgIGNvbnN0IHsga2V5IH0gPSBhd2FpdCBzaWduaW5nS2V5KHRoaXMucmVzb2x2ZWQuc2Vzc2lvbkN1dG9mZk1zKTtcbiAgICAgIGNvbnN0IG9yaWdpbnMgPSB0aGlzLnJlc29sdmVkLnB1YmxpY0RvbWFpbnMubGVuZ3RoXG4gICAgICAgID8gdGhpcy5yZXNvbHZlZC5wdWJsaWNEb21haW5zLm1hcChhdXRoT3JpZ2luKVxuICAgICAgICA6IFthdXRoT3JpZ2luKHRoaXMucmVzb2x2ZWQucHVibGljRG9tYWluKV07XG4gICAgICBmb3IgKGNvbnN0IG9yaWdpbiBvZiBuZXcgU2V0KG9yaWdpbnMpKSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSBhd2FpdCBhdXRoU3RvcmFnZS5jcmVhdGVBdXRoU3RvcmFnZShcbiAgICAgICAgICB0aGlzLnJlc29sdmVkLFxuICAgICAgICAgIGxha2ViYXNlUGx1Z2luPy5leHBvcnRzKCkucG9vbCxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5ydW50aW1lcy5zZXQoXG4gICAgICAgICAgbmV3IFVSTChvcmlnaW4pLmhvc3QudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICBhd2FpdCBwYXNzd29yZGxlc3NBdXRoLmNyZWF0ZVBhc3N3b3JkbGVzc0F1dGgoe1xuICAgICAgICAgICAgc3RvcmFnZSxcbiAgICAgICAgICAgIGJhc2VVUkw6IG9yaWdpbixcbiAgICAgICAgICAgIGJhc2VQYXRoOiBcIi9hcGkvZW1haWwvYXV0aFwiLFxuICAgICAgICAgICAgYXBwTmFtZTogdGhpcy5yZXNvbHZlZC5icmFuZE5hbWUsXG4gICAgICAgICAgICBzZWNyZXQ6IEJ1ZmZlci5mcm9tKGtleSkudG9TdHJpbmcoXCJiYXNlNjR1cmxcIiksXG4gICAgICAgICAgICBzZXNzaW9uVHRsU2Vjb25kczogdGhpcy5yZXNvbHZlZC5zZXNzaW9uVHRsU2Vjb25kcyxcbiAgICAgICAgICAgIHNlc3Npb25DdXRvZmZNczogdGhpcy5yZXNvbHZlZC5zZXNzaW9uQ3V0b2ZmTXMsXG4gICAgICAgICAgICBsb2dvdXRSZWRpcmVjdFBhdGg6IHRoaXMucmVzb2x2ZWQubG9nb3V0UmVkaXJlY3RQYXRoLFxuICAgICAgICAgICAgY29kZVR0bFNlY29uZHM6IHRoaXMucmVzb2x2ZWQuY29kZVR0bFNlY29uZHMsXG4gICAgICAgICAgICBtYXhBdHRlbXB0czogdGhpcy5yZXNvbHZlZC5tYXhBdHRlbXB0cyxcbiAgICAgICAgICAgIGF1dGhvcml6ZUlkZW50aXR5OiAoZW1haWwpID0+IHRoaXMuYXV0aG9yaXplSWRlbnRpdHkoZW1haWwpLFxuICAgICAgICAgICAgc2VuZENvZGU6IChlbWFpbCwgY29kZSwgb3B0aW9ucykgPT4gdGhpcy5zZW5kQ29kZShlbWFpbCwgY29kZSwgb3B0aW9ucyksXG4gICAgICAgICAgICBzdWJqZWN0OiB0aGlzLnJlc29sdmVkLnN1YmplY3QsXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnJlc29sdmVkLm1lc3NhZ2UsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAvLyBgc2VydmVyKClgIGlzIGRlZmVycmVkLCBzbyBpdCBkb2VzIG5vdCBleGlzdCBkdXJpbmcgdGhpcyBwbHVnaW4ncyBzZXR1cC5cbiAgICAgIC8vIEF0IGBzZXR1cDpjb21wbGV0ZWAgdGhlIEV4cHJlc3MgYXBwIGV4aXN0cyBidXQgaGFzIG5vdCBpbmplY3RlZCBwbHVnaW5cbiAgICAgIC8vIHJvdXRlcyBvciBzdGF0aWMgaGFuZGxpbmcgeWV0LCB3aGljaCBpcyB0aGUgb25lIHBvaW50IHRoZSBnYXRlIGNhbiBtb3VudFxuICAgICAgLy8gYWhlYWQgb2YgZXZlcnkgcHJvdGVjdGVkIHJvdXRlLlxuICAgICAgdGhpcy5jb250ZXh0Py5vbkxpZmVjeWNsZShcInNldHVwOmNvbXBsZXRlXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy5tb3VudEdhdGVSb3V0ZXMoKTtcbiAgICAgICAgLy8gRmFpbCBmYXN0IG9uY2UgdGhlIHNpYmxpbmcgZW1haWwgcGx1Z2luIGhhcyBwcmltZWQgaXRzIHRyYW5zcG9ydDogYVxuICAgICAgICAvLyBnYXRlIHRoYXQgY2Fubm90IGVtYWlsIGEgY29kZSBsZXRzIG5vYm9keSBpbi5cbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5zZW5kQ29kZSkgYXdhaXQgZW5zdXJlRW1haWxBdmFpbGFibGUoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvZ2dlci5pbmZvKFwicmVhZHlcIiwge1xuICAgICAgcGF0dGVybnM6IHRoaXMucmVzb2x2ZWQuYWxsb3cubGVuZ3RoLFxuICAgICAgc2Vzc2lvblR0bFNlY29uZHM6IHRoaXMucmVzb2x2ZWQuc2Vzc2lvblR0bFNlY29uZHMsXG4gICAgICBwdWJsaWNEb21haW5zOiB0aGlzLnJlc29sdmVkLnB1YmxpY0RvbWFpbnMsXG4gICAgICBpbnNlY3VyZTogdGhpcy5yZXNvbHZlZC5pbnNlY3VyZSxcbiAgICAgIHN0b3JhZ2U6IHRoaXMucmVzb2x2ZWQuc3RvcmFnZSxcbiAgICAgIGxvZ291dFJlZGlyZWN0UGF0aDogdGhpcy5yZXNvbHZlZC5sb2dvdXRSZWRpcmVjdFBhdGgsXG4gICAgICBzZXNzaW9uQ3V0b2ZmOlxuICAgICAgICB0aGlzLnJlc29sdmVkLnNlc3Npb25DdXRvZmZNcyA+IDBcbiAgICAgICAgICA/IG5ldyBEYXRlKHRoaXMucmVzb2x2ZWQuc2Vzc2lvbkN1dG9mZk1zKS50b0lTT1N0cmluZygpXG4gICAgICAgICAgOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoWy4uLnRoaXMucnVudGltZXMudmFsdWVzKCldLm1hcCgocnVudGltZSkgPT4gcnVudGltZS5jbG9zZSgpKSk7XG4gICAgdGhpcy5ydW50aW1lcy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHRoZSBsb2dpbiByb3V0ZXMgKGAvYXBpL2VtYWlsL2F1dGgvKmApIGFuZCB0aGUgZ2F0aW5nIG1pZGRsZXdhcmUgb25cbiAgICogdGhlIGFwcCdzIE9XTiBFeHByZXNzIHNlcnZlci4gQXQgYHNldHVwOmNvbXBsZXRlYCwgdGhlIGRlZmVycmVkIHNlcnZlciBwbHVnaW5cbiAgICogaGFzIGNvbnN0cnVjdGVkIGl0cyBFeHByZXNzIGFwcCBidXQgaGFzIG5vdCBpbmplY3RlZCBwbHVnaW4gcm91dGVzIG9yIHN0YXRpY1xuICAgKiBoYW5kbGluZywgc28gZGlyZWN0IHJlZ2lzdHJhdGlvbiBwdXRzIHRoZSBnYXRlIGZpcnN0LiBUaGUgY29udGV4dCdzIGJ1ZmZlcmVkXG4gICAqIHJvdXRlIEFQSSByZW1haW5zIGEgZmFsbGJhY2sgZm9yIGNvbXBhdGlibGUgbm9uLXN0YW5kYXJkIHNlcnZlciBwbHVnaW5zLlxuICAgKi9cbiAgcHJpdmF0ZSBtb3VudEdhdGVSb3V0ZXMoKTogdm9pZCB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwibm8gcGx1Z2luIGNvbnRleHQgLSB0aGUgYXV0aCBnYXRlIGNhbm5vdCBtb3VudCBpdHMgcm91dGVzXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBtb3VudEdhdGVPbkNvbnRleHQoY29udGV4dCwge1xuICAgICAgZ2F0ZTogdGhpcy5leHBvcnRzKCksXG4gICAgICBwdWJsaWNEb21haW46IHRoaXMucmVzb2x2ZWQucHVibGljRG9tYWlucyxcbiAgICAgIGZvcndhcmRIZWFkZXJzOiB0aGlzLnJlc29sdmVkLmZvcndhcmRIZWFkZXJzLFxuICAgICAgZ2F0ZVBhdGhzOiB0aGlzLnJlc29sdmVkLmdhdGVQYXRocyxcbiAgICAgIGJyYW5kTmFtZTogdGhpcy5yZXNvbHZlZC5icmFuZE5hbWUsXG4gICAgfSk7XG4gIH1cblxuICAvKiogVGhlIGNvZGUgc2VuZGVyOiB0aGUgY29uZmlndXJlZCBgc2VuZENvZGVgLCBlbHNlIHRoZSBzaGFyZWQtdHJhbnNwb3J0IGRlZmF1bHQuICovXG4gIHByaXZhdGUgZ2V0IHNlbmRDb2RlKCk6IE5vbk51bGxhYmxlPEF1dGhHYXRlQ29uZmlnW1wic2VuZENvZGVcIl0+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuc2VuZENvZGUgPz8gZGVmYXVsdFNlbmRDb2RlO1xuICB9XG5cbiAgcHJpdmF0ZSBhdXRob3JpemVJZGVudGl0eShlbWFpbDogc3RyaW5nKTogYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmNvbmZpZy5hdXRob3JpemVJZGVudGl0eSkgcmV0dXJuIHRoaXMuY29uZmlnLmF1dGhvcml6ZUlkZW50aXR5KGVtYWlsKTtcbiAgICByZXR1cm4gbG9va3NMaWtlRW1haWwoZW1haWwpICYmIG1hdGNoZXNBbGxvd2xpc3QoZW1haWwsIHRoaXMucmVzb2x2ZWQuYWxsb3cpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZXhwb3J0cygpOiBBdXRoR2F0ZUFwaSB7XG4gICAgY29uc3QgcnVudGltZSA9IChoZWFkZXJzPzogSGVhZGVycywgcmVxdWVzdD86IFJlcXVlc3QpID0+IHtcbiAgICAgIGNvbnN0IGhvc3QgPSAoXG4gICAgICAgIGhlYWRlcnM/LmdldChcImhvc3RcIikgPz8gKHJlcXVlc3QgPyBuZXcgVVJMKHJlcXVlc3QudXJsKS5ob3N0IDogXCJcIilcbiAgICAgICkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiB0aGlzLnJ1bnRpbWVzLmdldChob3N0KSA/PyB0aGlzLnJ1bnRpbWVzLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwYXNza2V5c0VuYWJsZWQ6IFsuLi50aGlzLnJ1bnRpbWVzLnZhbHVlcygpXS5zb21lKChlbnRyeSkgPT4gZW50cnkucGFzc2tleXNFbmFibGVkKSxcbiAgICAgIGhhbmRsZXI6IChyZXF1ZXN0KSA9PlxuICAgICAgICBydW50aW1lKHJlcXVlc3QuaGVhZGVycywgcmVxdWVzdCk/LmhhbmRsZXIocmVxdWVzdCkgPz9cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKG5ldyBSZXNwb25zZShcIk5vdCBGb3VuZFwiLCB7IHN0YXR1czogNDA0IH0pKSxcbiAgICAgIHNlc3Npb246IChoZWFkZXJzKSA9PiBydW50aW1lKGhlYWRlcnMpPy5zZXNzaW9uKGhlYWRlcnMpID8/IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpLFxuICAgICAgc3RhdHVzOiAoaGVhZGVycykgPT5cbiAgICAgICAgcnVudGltZShoZWFkZXJzKT8uc3RhdHVzKGhlYWRlcnMpID8/XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSh7IGF1dGhlbnRpY2F0ZWQ6IGZhbHNlLCBlbmFibGVkOiBmYWxzZSwgcGFzc2tleXNFbmFibGVkOiBmYWxzZSB9KSxcbiAgICAgIGNsb3NlOiAoKSA9PiB0aGlzLnNodXRkb3duKCksXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhdXRoT3JpZ2luKHB1YmxpY0RvbWFpbj86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHZhbHVlID0gc3RyaW5nLnRyaW1Ub051bGwocHVibGljRG9tYWluKTtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiaHR0cDovL2xvY2FsaG9zdFwiO1xuICBpZiAoL15odHRwcz86XFwvXFwvL2kudGVzdCh2YWx1ZSkpIHJldHVybiBuZXcgVVJMKHZhbHVlKS5vcmlnaW47XG4gIGNvbnN0IGhvc3QgPSB2YWx1ZS5zcGxpdChcIi9cIilbMF0hO1xuICBjb25zdCBsb2NhbCA9IGhvc3QgPT09IFwibG9jYWxob3N0XCIgfHwgaG9zdC5zdGFydHNXaXRoKFwibG9jYWxob3N0OlwiKTtcbiAgcmV0dXJuIGAke2xvY2FsID8gXCJodHRwXCIgOiBcImh0dHBzXCJ9Oi8vJHtob3N0fWA7XG59XG5cbi8qKiBGYWN0b3J5OiBgYXV0aEdhdGUoeyBhbGxvdywgc3ViamVjdCwgLi4uIH0pYCBmb3IgYW4gQXBwS2l0IGBwbHVnaW5zYCBhcnJheS4gKi9cbmV4cG9ydCBjb25zdCBhdXRoR2F0ZSA9IHRvUGx1Z2luKEF1dGhHYXRlUGx1Z2luKTtcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -18,21 +18,21 @@
|
|
|
18
18
|
"projen": "projen"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
|
-
"@dbx-tools/email": "0.6.
|
|
22
|
-
"@types/bun": "
|
|
21
|
+
"@dbx-tools/email": "0.6.168",
|
|
22
|
+
"@types/bun": "1.3.14",
|
|
23
23
|
"@types/node": "^24.6.0",
|
|
24
24
|
"typescript": "^5.9.3"
|
|
25
25
|
},
|
|
26
26
|
"peerDependencies": {
|
|
27
|
-
"@dbx-tools/email": "0.6.
|
|
27
|
+
"@dbx-tools/email": "0.6.168"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@databricks/appkit": "^0.60.0",
|
|
31
|
-
"@dbx-tools/appkit": "0.6.
|
|
32
|
-
"@dbx-tools/auth": "0.6.
|
|
33
|
-
"@dbx-tools/core": "0.6.
|
|
34
|
-
"@dbx-tools/shared-auth": "0.6.
|
|
35
|
-
"@dbx-tools/shared-core": "0.6.
|
|
31
|
+
"@dbx-tools/appkit": "0.6.168",
|
|
32
|
+
"@dbx-tools/auth-gate": "0.6.168",
|
|
33
|
+
"@dbx-tools/core": "0.6.168",
|
|
34
|
+
"@dbx-tools/shared-auth": "0.6.168",
|
|
35
|
+
"@dbx-tools/shared-core": "0.6.168",
|
|
36
36
|
"http-proxy-3": "^1.23.1"
|
|
37
37
|
},
|
|
38
38
|
"main": "./lib/index.js",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"./package.json": "./package.json"
|
|
50
50
|
}
|
|
51
51
|
},
|
|
52
|
-
"version": "0.6.
|
|
52
|
+
"version": "0.6.168",
|
|
53
53
|
"types": "./lib/index.d.ts",
|
|
54
54
|
"type": "module",
|
|
55
55
|
"exports": {
|
package/src/plugin.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `authGate()` - the AppKit adapter around `@dbx-tools/auth`.
|
|
2
|
+
* `authGate()` - the AppKit adapter around `@dbx-tools/auth-gate`.
|
|
3
3
|
*
|
|
4
4
|
* It has NO routes of its own: the tunnel PROXY (not an HTTP server) calls the
|
|
5
5
|
* handlers this plugin exposes via {@link AuthGatePlugin.exports}. The plugin
|
|
@@ -32,7 +32,7 @@ import {
|
|
|
32
32
|
type AuthStorageConfig,
|
|
33
33
|
type AuthStorageMode,
|
|
34
34
|
type PasswordlessAuthRuntime,
|
|
35
|
-
} from "@dbx-tools/auth";
|
|
35
|
+
} from "@dbx-tools/auth-gate";
|
|
36
36
|
import { config as coreConfig } from "@dbx-tools/core";
|
|
37
37
|
import type { AuthStatus } from "@dbx-tools/shared-auth";
|
|
38
38
|
import { brand, log, string } from "@dbx-tools/shared-core";
|
|
@@ -323,7 +323,7 @@ export interface AuthGateApi {
|
|
|
323
323
|
}
|
|
324
324
|
|
|
325
325
|
/**
|
|
326
|
-
* AppKit plugin adapting `@dbx-tools/auth` to tunnel traffic. On `setup()` it registers the login
|
|
326
|
+
* AppKit plugin adapting `@dbx-tools/auth-gate` to tunnel traffic. On `setup()` it registers the login
|
|
327
327
|
* routes (`/api/email/auth/*`) and a gating middleware on the app's OWN Express
|
|
328
328
|
* server via `this.context`, so a public portr caller must prove an email before
|
|
329
329
|
* reaching the app's `/api/*` - see `./gate`. Front-door (platform) traffic and
|