@restatedev/restate-cdk 1.1.0-rc.2 → 1.1.1-pre.6
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/.github/workflows/pr-checks.yaml +1 -3
- package/.github/workflows/publish.yml +41 -5
- package/.github/workflows/test.yml +5 -9
- package/LICENSE +1 -1
- package/README.md +13 -9
- package/dist/deployments-common.js +3 -3
- package/dist/fargate-restate-deployment.js +26 -14
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4 -3
- package/dist/register-service-handler/index.d.ts +0 -2
- package/dist/register-service-handler/index.js +24 -13
- package/dist/restate-cloud-environment.d.ts +14 -4
- package/dist/restate-cloud-environment.js +33 -19
- package/dist/restate-environment.d.ts +0 -2
- package/dist/restate-environment.js +3 -3
- package/dist/service-deployer.d.ts +2 -1
- package/dist/service-deployer.js +34 -18
- package/dist/single-node-restate-deployment.d.ts +6 -0
- package/dist/single-node-restate-deployment.js +29 -12
- package/jest.config.base.js +6 -0
- package/jest.config.e2e.js +8 -0
- package/jest.config.js +6 -5
- package/package.json +9 -7
- package/test/__snapshots__/restate-constructs.test.ts.snap +441 -20
- package/test/e2e/README.md +11 -0
- package/test/handlers/build.mts +19 -0
- package/test/handlers/handler.js +2 -2
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
name: PR Checks (npm)
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
|
-
push:
|
|
5
|
-
branches: [main]
|
|
6
4
|
pull_request:
|
|
7
5
|
types: [opened, synchronize, reopened, ready_for_review]
|
|
8
6
|
workflow_dispatch:
|
|
@@ -14,7 +12,7 @@ jobs:
|
|
|
14
12
|
- uses: actions/checkout@v4
|
|
15
13
|
- uses: actions/setup-node@v4
|
|
16
14
|
with:
|
|
17
|
-
node-version: "
|
|
15
|
+
node-version: "22"
|
|
18
16
|
- run: npm ci
|
|
19
17
|
- run: npm run lint
|
|
20
18
|
- run: npm run build
|
|
@@ -1,23 +1,59 @@
|
|
|
1
|
-
name: Publish
|
|
1
|
+
name: Publish release to NPM
|
|
2
|
+
|
|
2
3
|
on:
|
|
3
4
|
release:
|
|
4
5
|
types: [published]
|
|
6
|
+
|
|
5
7
|
jobs:
|
|
6
8
|
build:
|
|
9
|
+
# prevent from running on forks
|
|
10
|
+
if: github.repository_owner == 'restatedev'
|
|
7
11
|
runs-on: ubuntu-latest
|
|
12
|
+
|
|
8
13
|
permissions:
|
|
9
|
-
contents:
|
|
14
|
+
contents: write
|
|
10
15
|
packages: write
|
|
16
|
+
|
|
11
17
|
steps:
|
|
12
18
|
- uses: actions/checkout@v4
|
|
13
|
-
# Setup .npmrc file to publish to NPM
|
|
14
19
|
- uses: actions/setup-node@v4
|
|
15
20
|
with:
|
|
16
|
-
node-version: "
|
|
21
|
+
node-version: "22.x"
|
|
17
22
|
registry-url: "https://registry.npmjs.org"
|
|
23
|
+
|
|
18
24
|
- run: npm ci
|
|
25
|
+
|
|
26
|
+
- name: Extract tag version
|
|
27
|
+
# expected tag format is vX.Y.Z
|
|
28
|
+
run: |
|
|
29
|
+
echo "Full GITHUB_REF: ${GITHUB_REF}"
|
|
30
|
+
TAG_VERSION=${GITHUB_REF#refs/tags/v}
|
|
31
|
+
if [ -z "$TAG_VERSION" ]; then
|
|
32
|
+
echo "Error: TAG_VERSION is empty. Exiting."
|
|
33
|
+
exit 1
|
|
34
|
+
fi
|
|
35
|
+
echo "Extracted TAG_VERSION: $TAG_VERSION"
|
|
36
|
+
echo "TAG_VERSION=$TAG_VERSION" >> $GITHUB_ENV
|
|
37
|
+
|
|
38
|
+
- name: Update package version
|
|
39
|
+
run: npm version $TAG_VERSION --no-git-tag-version
|
|
40
|
+
|
|
41
|
+
- name: Commit and push
|
|
42
|
+
run: |
|
|
43
|
+
git config --global user.name "github-actions[bot]"
|
|
44
|
+
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
|
45
|
+
git commit -am "Release ${TAG_VERSION}"
|
|
46
|
+
git push origin HEAD:main
|
|
47
|
+
env:
|
|
48
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
49
|
+
|
|
19
50
|
- run: npm run build
|
|
20
51
|
- run: npm run test
|
|
21
|
-
- run:
|
|
52
|
+
- run: |
|
|
53
|
+
if [[ ${{ github.event.release.prerelease }} == true ]]; then
|
|
54
|
+
npm publish --tag next --access public
|
|
55
|
+
else
|
|
56
|
+
npm publish --tag latest --access public
|
|
57
|
+
fi
|
|
22
58
|
env:
|
|
23
59
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
name:
|
|
1
|
+
name: Publish snapshot to NPM
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
@@ -9,22 +9,18 @@ jobs:
|
|
|
9
9
|
# prevent from running on forks
|
|
10
10
|
if: github.repository_owner == 'restatedev'
|
|
11
11
|
runs-on: ubuntu-latest
|
|
12
|
-
strategy:
|
|
13
|
-
matrix:
|
|
14
|
-
node-version: [20.x]
|
|
15
12
|
|
|
16
13
|
steps:
|
|
17
14
|
- uses: actions/checkout@v4
|
|
18
|
-
-
|
|
19
|
-
uses: actions/setup-node@v4
|
|
15
|
+
- uses: actions/setup-node@v4
|
|
20
16
|
with:
|
|
21
|
-
node-version:
|
|
17
|
+
node-version: "22.x"
|
|
22
18
|
registry-url: "https://registry.npmjs.org"
|
|
23
19
|
- run: npm ci
|
|
24
20
|
- run: npm run build
|
|
25
21
|
- run: npm run test
|
|
26
22
|
- run: mv $(npm pack) restatedev-restate-cdk.tgz
|
|
27
|
-
- uses: actions/upload-artifact@
|
|
23
|
+
- uses: actions/upload-artifact@v4
|
|
28
24
|
with:
|
|
29
25
|
name: restatedev-restate-cdk
|
|
30
26
|
path: restatedev-restate-cdk.tgz
|
|
@@ -37,7 +33,7 @@ jobs:
|
|
|
37
33
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
38
34
|
run: |
|
|
39
35
|
# We're using 0.0.0 to avoid this version to be higher than released versions.
|
|
40
|
-
# To use it:
|
|
36
|
+
# To use it:
|
|
41
37
|
# "@restatedev/restate-cdk": "^0.0.0-SNAPSHOT"
|
|
42
38
|
npm version 0.0.0-SNAPSHOT-$(date '+%Y%m%d%H%M%S') --git-tag-version false
|
|
43
39
|
# We use dist-tag dev for the snapshot releases, see https://docs.npmjs.com/cli/v9/commands/npm-dist-tag for more info
|
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2023 - Restate Software, Inc., Restate GmbH
|
|
3
|
+
Copyright (c) 2023-2025 - Restate Software, Inc., Restate GmbH
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
package/README.md
CHANGED
|
@@ -3,13 +3,18 @@
|
|
|
3
3
|
[](https://discord.gg/skW3AZ6uGd)
|
|
4
4
|
[](https://twitter.com/intent/follow?screen_name=restatedev)
|
|
5
5
|
|
|
6
|
-
# Restate CDK
|
|
6
|
+
# Restate CDK Construct Library
|
|
7
7
|
|
|
8
|
-
AWS Cloud Development Kit (CDK) construct library for deploying [Restate](https://restate.dev) and
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
AWS Cloud Development Kit (CDK) construct library for deploying [Restate](https://restate.dev) and
|
|
9
|
+
Restate services on AWS.
|
|
10
|
+
|
|
11
|
+
[Restate](https://github.com/restatedev/restate) is the platform for building resilient applications
|
|
12
|
+
that tolerate all infrastructure faults w/o the need for a PhD. For more information on CDK, please
|
|
11
13
|
see [Getting started with the AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html).
|
|
12
14
|
|
|
15
|
+
This library helps you manage registering AWS Lambda-based Restate services in Restate environments.
|
|
16
|
+
It also offers basic support for creating self-hosted Restate deployments on your own AWS infrastructure.
|
|
17
|
+
|
|
13
18
|
## Installation
|
|
14
19
|
|
|
15
20
|
Inside an existing CDK project, add the library from [npm](https://www.npmjs.com/package/@restatedev/restate-cdk):
|
|
@@ -23,17 +28,16 @@ npm i @restatedev/restate-cdk
|
|
|
23
28
|
- [`RestateCloudEnvironment`](./lib/restate-constructs/restate-cloud-environment.ts) - Supports deploying Restate
|
|
24
29
|
services to an existing [Restate Cloud](https://cloud.restate.dev) environment.
|
|
25
30
|
- [`SingleNodeRestateDeployment`](./lib/restate-constructs/single-node-restate-deployment.ts) - Deploys a self-hosted
|
|
26
|
-
Restate server running on Amazon EC2; this provides a basic single-node deployment targeted at
|
|
31
|
+
Restate server running on Amazon EC2; this provides a basic single-node deployment targeted at
|
|
32
|
+
development and testing
|
|
27
33
|
- [`ServiceDeployer`](./lib/restate-constructs/service-deployer.ts) - facilitates registration of Lambda-based service
|
|
28
34
|
handlers with a Restate environment, such as a self-hosted EC2 environment
|
|
29
35
|
|
|
30
|
-
For a more detailed
|
|
31
|
-
the [Restate CDK documentation](https://docs.restate.dev/deploy/lambda/cdk).
|
|
36
|
+
For a more detailed look, please refer to the [Restate CDK documentation](https://docs.restate.dev/deploy/lambda/cdk).
|
|
32
37
|
|
|
33
38
|
### Examples
|
|
34
39
|
|
|
35
40
|
You can use the following templates to bootstrap your own CDK projects:
|
|
36
41
|
|
|
37
42
|
- [e2e tests in this repository](test/e2e)
|
|
38
|
-
- [
|
|
39
|
-
- [kotlin-gradle-lambda-cdk](https://github.com/restatedev/examples/tree/main/templates/kotlin-gradle-lambda-cdk)
|
|
43
|
+
- the official [Restate examples](https://github.com/restatedev/examples) repository
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
* Copyright (c)
|
|
3
|
+
* Copyright (c) 2023-2025 - Restate Software, Inc., Restate GmbH
|
|
4
4
|
*
|
|
5
|
-
* This file is part of the Restate
|
|
5
|
+
* This file is part of the Restate CDK Construct Library,
|
|
6
6
|
* which is released under the MIT license.
|
|
7
7
|
*
|
|
8
8
|
* You can find a copy of the license in file LICENSE in the root
|
|
@@ -16,4 +16,4 @@ var TracingMode;
|
|
|
16
16
|
TracingMode["DISABLED"] = "DISABLED";
|
|
17
17
|
TracingMode["AWS_XRAY"] = "AWS_XRAY";
|
|
18
18
|
})(TracingMode || (exports.TracingMode = TracingMode = {}));
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95bWVudHMtY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL3Jlc3RhdGUtY29uc3RydWN0cy9kZXBsb3ltZW50cy1jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7R0FTRzs7O0FBRUgsSUFBWSxXQUdYO0FBSEQsV0FBWSxXQUFXO0lBQ3JCLG9DQUFxQixDQUFBO0lBQ3JCLG9DQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFIVyxXQUFXLDJCQUFYLFdBQVcsUUFHdEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIzLTIwMjUgLSBSZXN0YXRlIFNvZnR3YXJlLCBJbmMuLCBSZXN0YXRlIEdtYkhcbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUmVzdGF0ZSBDREsgQ29uc3RydWN0IExpYnJhcnksXG4gKiB3aGljaCBpcyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKlxuICogWW91IGNhbiBmaW5kIGEgY29weSBvZiB0aGUgbGljZW5zZSBpbiBmaWxlIExJQ0VOU0UgaW4gdGhlIHJvb3RcbiAqIGRpcmVjdG9yeSBvZiB0aGlzIHJlcG9zaXRvcnkgb3IgcGFja2FnZSwgb3IgYXRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXN0YXRlZGV2L3Nkay10eXBlc2NyaXB0L2Jsb2IvbWFpbi9MSUNFTlNFXG4gKi9cblxuZXhwb3J0IGVudW0gVHJhY2luZ01vZGUge1xuICBESVNBQkxFRCA9IFwiRElTQUJMRURcIixcbiAgQVdTX1hSQVkgPSBcIkFXU19YUkFZXCIsXG59XG4iXX0=
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
* Copyright (c) 2023 - Restate Software, Inc., Restate GmbH
|
|
3
|
+
* Copyright (c) 2023-2025 - Restate Software, Inc., Restate GmbH
|
|
4
4
|
*
|
|
5
|
-
* This file is part of the Restate
|
|
5
|
+
* This file is part of the Restate CDK Construct Library,
|
|
6
6
|
* which is released under the MIT license.
|
|
7
7
|
*
|
|
8
8
|
* You can find a copy of the license in file LICENSE in the root
|
|
@@ -25,13 +25,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
25
25
|
}) : function(o, v) {
|
|
26
26
|
o["default"] = v;
|
|
27
27
|
});
|
|
28
|
-
var __importStar = (this && this.__importStar) || function (
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
};
|
|
28
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
29
|
+
var ownKeys = function(o) {
|
|
30
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
31
|
+
var ar = [];
|
|
32
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
33
|
+
return ar;
|
|
34
|
+
};
|
|
35
|
+
return ownKeys(o);
|
|
36
|
+
};
|
|
37
|
+
return function (mod) {
|
|
38
|
+
if (mod && mod.__esModule) return mod;
|
|
39
|
+
var result = {};
|
|
40
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
41
|
+
__setModuleDefault(result, mod);
|
|
42
|
+
return result;
|
|
43
|
+
};
|
|
44
|
+
})();
|
|
35
45
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
46
|
exports.FargateRestateDeployment = void 0;
|
|
37
47
|
const constructs_1 = require("constructs");
|
|
@@ -138,15 +148,15 @@ class FargateRestateDeployment extends constructs_1.Construct {
|
|
|
138
148
|
streamPrefix: "restate",
|
|
139
149
|
}),
|
|
140
150
|
environment: {
|
|
141
|
-
|
|
142
|
-
|
|
151
|
+
RESTATE_LOG_FORMAT: "json",
|
|
152
|
+
RESTATE_NODE_NAME: "fargate",
|
|
143
153
|
},
|
|
144
154
|
command: props.command,
|
|
145
155
|
startTimeout: cdk.Duration.seconds(20),
|
|
146
156
|
stopTimeout: cdk.Duration.seconds(20),
|
|
147
157
|
});
|
|
148
158
|
restate.addMountPoints({
|
|
149
|
-
containerPath: "/
|
|
159
|
+
containerPath: "/restate-data",
|
|
150
160
|
readOnly: false,
|
|
151
161
|
sourceVolume: "restateStore",
|
|
152
162
|
});
|
|
@@ -191,9 +201,10 @@ class FargateRestateDeployment extends constructs_1.Construct {
|
|
|
191
201
|
containerPort: RESTATE_INGRESS_PORT,
|
|
192
202
|
}),
|
|
193
203
|
],
|
|
204
|
+
port: RESTATE_INGRESS_PORT,
|
|
194
205
|
protocol: elb2.ApplicationProtocol.HTTP,
|
|
195
206
|
healthCheck: {
|
|
196
|
-
path: "/
|
|
207
|
+
path: "/restate/health",
|
|
197
208
|
interval: cdk.Duration.seconds(5),
|
|
198
209
|
healthyThresholdCount: 3,
|
|
199
210
|
unhealthyThresholdCount: 3,
|
|
@@ -214,6 +225,7 @@ class FargateRestateDeployment extends constructs_1.Construct {
|
|
|
214
225
|
containerPort: RESTATE_ADMIN_PORT,
|
|
215
226
|
}),
|
|
216
227
|
],
|
|
228
|
+
port: RESTATE_ADMIN_PORT,
|
|
217
229
|
protocol: elb2.ApplicationProtocol.HTTP,
|
|
218
230
|
healthCheck: {
|
|
219
231
|
path: "/health",
|
|
@@ -236,4 +248,4 @@ class FargateRestateDeployment extends constructs_1.Construct {
|
|
|
236
248
|
}
|
|
237
249
|
}
|
|
238
250
|
exports.FargateRestateDeployment = FargateRestateDeployment;
|
|
239
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFyZ2F0ZS1yZXN0YXRlLWRlcGxveW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvcmVzdGF0ZS1jb25zdHJ1Y3RzL2ZhcmdhdGUtcmVzdGF0ZS1kZXBsb3ltZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7O0dBU0c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsMkNBQXVDO0FBQ3ZDLGlEQUFtQztBQUNuQyx3RUFBMEQ7QUFDMUQsMkRBQTZDO0FBQzdDLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MseURBQTJDO0FBQzNDLHlEQUEyQztBQUMzQyw2RUFBK0Q7QUFDL0QsNkRBQStDO0FBQy9DLHlFQUEyRDtBQUkzRCxNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQztBQUNoQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUMvQixNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQztBQUNsQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUNoQyxNQUFNLHFCQUFxQixHQUFHLDhCQUE4QixDQUFDO0FBQzdELE1BQU0sMEJBQTBCLEdBQUcsUUFBUSxDQUFDO0FBQzVDLE1BQU0sdUJBQXVCLEdBQUcsUUFBUSxDQUFDO0FBb0V6Qzs7OztHQUlHO0FBQ0gsTUFBYSx3QkFBeUIsU0FBUSxzQkFBUztJQVdyRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTBCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUU3RSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLHFCQUFxQixDQUFDO1FBQ2pFLE1BQU0sVUFB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QUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLG1CQUFtQixFQUFFLEVBQUUsQ0FBQztRQUMzRyxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsS0FBSyxDQUFDLE9BQU8sSUFBSSxpQkFBaUIsRUFBRSxDQUFDO0lBQ2xFLENBQUM7Q0FDRjtBQWpORCw0REFpTkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIzIC0gUmVzdGF0ZSBTb2Z0d2FyZSwgSW5jLiwgUmVzdGF0ZSBHbWJIXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFJlc3RhdGUgU0RLIGZvciBOb2RlLmpzL1R5cGVTY3JpcHQsXG4gKiB3aGljaCBpcyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKlxuICogWW91IGNhbiBmaW5kIGEgY29weSBvZiB0aGUgbGljZW5zZSBpbiBmaWxlIExJQ0VOU0UgaW4gdGhlIHJvb3RcbiAqIGRpcmVjdG9yeSBvZiB0aGlzIHJlcG9zaXRvcnkgb3IgcGFja2FnZSwgb3IgYXRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXN0YXRlZGV2L3Nkay10eXBlc2NyaXB0L2Jsb2IvbWFpbi9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGFjbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBlY3MgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3NcIjtcbmltcG9ydCAqIGFzIGVmcyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVmc1wiO1xuaW1wb3J0ICogYXMgZWxiMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjJcIjtcbmltcG9ydCAqIGFzIHI1MyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjtcbmltcG9ydCAqIGFzIHRhcmdldHMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzLXRhcmdldHNcIjtcbmltcG9ydCB7IElSZXN0YXRlRW52aXJvbm1lbnQgfSBmcm9tIFwiLi9yZXN0YXRlLWVudmlyb25tZW50XCI7XG5pbXBvcnQgeyBUcmFjaW5nTW9kZSB9IGZyb20gXCIuL2RlcGxveW1lbnRzLWNvbW1vblwiO1xuXG5jb25zdCBQVUJMSUNfSU5HUkVTU19QT1JUID0gNDQzO1xuY29uc3QgUFVCTElDX0FETUlOX1BPUlQgPSA5MDcwO1xuY29uc3QgUkVTVEFURV9JTkdSRVNTX1BPUlQgPSA4MDgwO1xuY29uc3QgUkVTVEFURV9BRE1JTl9QT1JUID0gOTA3MDtcbmNvbnN0IFJFU1RBVEVfSU1BR0VfREVGQVVMVCA9IFwiZG9ja2VyLmlvL3Jlc3RhdGVkZXYvcmVzdGF0ZVwiO1xuY29uc3QgUkVTVEFURV9ET0NLRVJfREVGQVVMVF9UQUcgPSBcImxhdGVzdFwiO1xuY29uc3QgQURPVF9ET0NLRVJfREVGQVVMVF9UQUcgPSBcImxhdGVzdFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RhdGVGYXJnYXRlUHJvcHMge1xuICAvKiogVGhlIFZQQyBpbiB3aGljaCB0byBsYXVuY2ggdGhlIFJlc3RhdGUgaG9zdC4gKi9cbiAgdnBjPzogZWMyLklWcGM7XG5cbiAgLyoqIExvZyBncm91cCBmb3IgUmVzdGF0ZSBzZXJ2aWNlIGxvZ3MuICovXG4gIGxvZ0dyb3VwPzogbG9ncy5Mb2dHcm91cDtcblxuICAvKiogVHJhY2luZyBtb2RlIGZvciBSZXN0YXRlIHNlcnZpY2VzLiBEZWZhdWx0cyB0byB7QGxpbmsgVHJhY2luZ01vZGUuRElTQUJMRUR9LiAqL1xuICB0cmFjaW5nPzogVHJhY2luZ01vZGU7XG5cbiAgLyoqIFByZWZpeCBmb3IgcmVzb3VyY2VzIGNyZWF0ZWQgYnkgdGhpcyBjb25zdHJ1Y3QgdGhhdCByZXF1aXJlIHVuaXF1ZSBuYW1lcy4gKi9cbiAgcHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKiBFQ1MgY2x1c3RlciBuYW1lLiAqL1xuICBjbHVzdGVyTmFtZT86IHN0cmluZztcblxuICAvKiogUmVzdGF0ZSBEb2NrZXIgaW1hZ2UgbmFtZS4gRGVmYXVsdHMgdG8gYGxhdGVzdGAuICovXG4gIHJlc3RhdGVJbWFnZT86IHN0cmluZztcblxuICAvKiogUmVzdGF0ZSBEb2NrZXIgaW1hZ2UgdGFnLiBEZWZhdWx0cyB0byBgbGF0ZXN0YC4gKi9cbiAgcmVzdGF0ZVRhZz86IHN0cmluZztcblxuICAvKiogQW1hem9uIERpc3RybyBmb3IgT3BlbiBUZWxlbWV0cnkgRG9ja2VyIGltYWdlIHRhZy4gRGVmYXVsdHMgdG8gYGxhdGVzdGAuICovXG4gIGFkb3RUYWc/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IGZvciBSZXN0YXRlIGNvbnRhaW5lci4gVXNlIGl0IHRvIGNvbmZpZ3VyZSBsb2dnaW5nIGFuZCBvdGhlciBwcm9jZXNzLWxldmVsIHNldHRpbmdzLlxuICAgKi9cbiAgZW52aXJvbm1lbnQ/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBSZXN0YXRlIGNvbnRhaW5lciBleHRyYSBhcmd1bWVudHMuXG4gICAqL1xuICBjb21tYW5kPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBmdWxsIG5hbWUgZm9yIHRoZSBwdWJsaWMgZW5kcG9pbnQuXG4gICAqL1xuICBkbnNOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEROUyB6b25lIGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgcHVibGljIGVuZHBvaW50LlxuICAgKi9cbiAgaG9zdGVkWm9uZTogcjUzLklIb3N0ZWRab25lO1xuXG4gIC8qKlxuICAgKiBSZW1vdmFsIHBvbGljeSBmb3IgbG9uZy1saXZlZCByZXNvdXJjZXMgKHN0b3JhZ2UsIGxvZ3MpLiBEZWZhdWx0OiBgY2RrLlJlbW92YWxQb2xpY3kuREVTVFJPWWAuXG4gICAqL1xuICByZW1vdmFsUG9saWN5PzogY2RrLlJlbW92YWxQb2xpY3k7XG5cbiAgLyoqXG4gICAqIExvYWQgYmFsYW5jZXIgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGxvYWRCYWxhbmNlcj86IHtcbiAgICAvKiogQHNlZSBCYXNlTG9hZEJhbGFuY2VyUHJvcHMuaW50ZXJuZXRGYWNpbmcgKi9cbiAgICBpbnRlcm5ldEZhY2luZz86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBJZiB5b3Ugc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSBjYW4gY3VzdG9taXplIHRoZSBhY2Nlc3MgdG8gdGhlIHBhaXIgb2YgQUxCIGxpc3RlbmVycyB2aWFcbiAgICAgKiB7QGxpbmsgRmFyZ2F0ZVJlc3RhdGVEZXBsb3ltZW50LmluZ3Jlc3NMaXN0ZW5lcn0gYW5kIHtAbGluayBGYXJnYXRlUmVzdGF0ZURlcGxveW1lbnQuYWRtaW5MaXN0ZW5lcn0uXG4gICAgICpcbiAgICAgKiBAc2VlIEJhc2VBcHBsaWNhdGlvbkxpc3RlbmVyUHJvcHMub3BlbiAqL1xuICAgIG9wZW4/OiBib29sZWFuO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBSZXN0YXRlIHNlcnZpY2UgZGVwbG95bWVudCBydW5uaW5nIGFzIGEgRmFyZ2F0ZSB0YXNrIGFuZCBiYWNrZWQgYnkgRUZTLlxuICpcbiAqIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBjb25zdHJ1Y3QgaXMgc3RpbGwgZXhwZXJpbWVudGFsISBVc2Ugd2l0aCBjYXV0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgRmFyZ2F0ZVJlc3RhdGVEZXBsb3ltZW50IGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSVJlc3RhdGVFbnZpcm9ubWVudCB7XG4gIHJlYWRvbmx5IGludm9rZXJSb2xlOiBpYW0uSVJvbGU7XG4gIHJlYWRvbmx5IHZwYzogZWMyLklWcGM7XG5cbiAgcmVhZG9ubHkgaW5ncmVzc1VybDogc3RyaW5nO1xuICByZWFkb25seSBhZG1pblVybDogc3RyaW5nO1xuICByZWFkb25seSBzZWN1cml0eUdyb3VwOiBlYzIuU2VjdXJpdHlHcm91cDtcbiAgcmVhZG9ubHkgZGF0YVN0b3JlOiBlZnMuRmlsZVN5c3RlbTtcbiAgcmVhZG9ubHkgaW5ncmVzc0xpc3RlbmVyOiBlbGIyLkFwcGxpY2F0aW9uTGlzdGVuZXI7XG4gIHJlYWRvbmx5IGFkbWluTGlzdGVuZXI6IGVsYjIuQXBwbGljYXRpb25MaXN0ZW5lcjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmVzdGF0ZUZhcmdhdGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnZwYyA9IHByb3BzLnZwYyA/PyBlYzIuVnBjLmZyb21Mb29rdXAodGhpcywgXCJWcGNcIiwgeyBpc0RlZmF1bHQ6IHRydWUgfSk7XG5cbiAgICBjb25zdCByZXN0YXRlSW1hZ2UgPSBwcm9wcy5yZXN0YXRlSW1hZ2UgPz8gUkVTVEFURV9JTUFHRV9ERUZBVUxUO1xuICAgIGNvbnN0IHJlc3RhdGVUYWcgPSBwcm9wcy5yZXN0YXRlVGFnID8/IFJFU1RBVEVfRE9DS0VSX0RFRkFVTFRfVEFHO1xuICAgIGNvbnN0IGFkb3RUYWcgPSBwcm9wcy5hZG90VGFnID8/IEFET1RfRE9DS0VSX0RFRkFVTFRfVEFHOyAvLyBUT0RPOiBhZGQgWC1SYXkgc3VwcG9ydCBsaWtlIHdlIGhhdmUgZm9yIEVDMlxuXG4gICAgY29uc3QgZnMgPSBuZXcgZWZzLkZpbGVTeXN0ZW0odGhpcywgXCJEYXRhU3RvcmVcIiwge1xuICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgIGxpZmVjeWNsZVBvbGljeTogZWZzLkxpZmVjeWNsZVBvbGljeS5BRlRFUl8zMF9EQVlTLFxuICAgICAgcGVyZm9ybWFuY2VNb2RlOiBlZnMuUGVyZm9ybWFuY2VNb2RlLkdFTkVSQUxfUFVSUE9TRSxcbiAgICAgIHRocm91Z2hwdXRNb2RlOiBlZnMuVGhyb3VnaHB1dE1vZGUuQlVSU1RJTkcsXG4gICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5yZW1vdmFsUG9saWN5ID8/IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgfSk7XG4gICAgZnMuYWRkVG9SZXNvdXJjZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgc2lkOiBcIkFsbG93RWZzTW91bnRcIixcbiAgICAgICAgYWN0aW9uczogW1wiZWxhc3RpY2ZpbGVzeXN0ZW06Q2xpZW50TW91bnRcIl0sXG4gICAgICAgIC8vIFJlc3RyaWN0aW5nIHRvIHRoZSBFQ1MgZXhlY3V0aW9uIHJvbGUgZG9lcyBub3Qgd29yazsgcHJvYmFibHkgZG9lc24ndCBtYXR0ZXIgLSBFRlMgYWNjZXNzIGlzIHNlY3VyZWQgYnkgYSBzZWN1cml0eSBncm91cFxuICAgICAgICBwcmluY2lwYWxzOiBbbmV3IGlhbS5BbnlQcmluY2lwYWwoKV0sXG4gICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICBCb29sOiB7XG4gICAgICAgICAgICBcImVsYXN0aWNmaWxlc3lzdGVtOkFjY2Vzc2VkVmlhTW91bnRUYXJnZXRcIjogXCJ0cnVlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgdGhpcy5kYXRhU3RvcmUgPSBmcztcblxuICAgIGNvbnN0IGNsdXN0ZXIgPSBuZXcgZWNzLkNsdXN0ZXIodGhpcywgXCJDbHVzdGVyXCIsIHtcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICBjbHVzdGVyTmFtZTogcHJvcHMuY2x1c3Rlck5hbWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN0YXRlVGFzayA9IG5ldyBlY3MuRmFyZ2F0ZVRhc2tEZWZpbml0aW9uKHRoaXMsIFwiUmVzdGF0ZVRhc2tcIiwge1xuICAgICAgY3B1OiA0MDk2LFxuICAgICAgbWVtb3J5TGltaXRNaUI6IDgxOTIsXG4gICAgICBydW50aW1lUGxhdGZvcm06IHtcbiAgICAgICAgY3B1QXJjaGl0ZWN0dXJlOiBlY3MuQ3B1QXJjaGl0ZWN0dXJlLkFSTTY0LFxuICAgICAgICBvcGVyYXRpbmdTeXN0ZW1GYW1pbHk6IGVjcy5PcGVyYXRpbmdTeXN0ZW1GYW1pbHkuTElOVVgsXG4gICAgICB9LFxuICAgICAgdm9sdW1lczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJyZXN0YXRlU3RvcmVcIixcbiAgICAgICAgICBlZnNWb2x1bWVDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICBmaWxlU3lzdGVtSWQ6IGZzLmZpbGVTeXN0ZW1JZCxcbiAgICAgICAgICAgIGF1dGhvcml6YXRpb25Db25maWc6IHt9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gVE9ETzogU3RhcnQgYW4gQURPVCBjb250YWluZXIgYW5kIGhvb2sgaXQgdXAgdG8gUmVzdGF0ZSBhbmQgQVdTIFgtUmF5IG9yIGFub3RoZXIgT1RlbCBzaW5rXG4gICAgLy8gaWYgKHByb3BzLnRyYWNpbmcgPT09IFRyYWNpbmdNb2RlLkFXU19YUkFZKSB7XG4gICAgLy8gICByZXN0YXRlVGFzay50YXNrUm9sZS5hZGRNYW5hZ2VkUG9saWN5KGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcIkFXU1hyYXlXcml0ZU9ubHlBY2Nlc3NcIikpO1xuICAgIC8vIH1cblxuICAgIG5ldyBpYW0uUG9saWN5KHRoaXMsIFwiVGFza1BvbGljeVwiLCB7XG4gICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBzaWQ6IFwiQWxsb3dBc3N1bWVBbnlSb2xlXCIsXG4gICAgICAgICAgYWN0aW9uczogW1wic3RzOkFzc3VtZVJvbGVcIl0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLCAvLyB3ZSBkb24ndCBrbm93IHVwZnJvbnQgd2hhdCBpbnZva2VyIHJvbGVzIHdlIG1heSBiZSBhc2tlZCB0byBhc3N1bWUgYXQgcnVudGltZVxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSkuYXR0YWNoVG9Sb2xlKHJlc3RhdGVUYXNrLnRhc2tSb2xlKTtcblxuICAgIGNvbnN0IGludm9rZXJSb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsIFwiSW52b2tlclJvbGVcIiwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLkFyblByaW5jaXBhbChyZXN0YXRlVGFzay50YXNrUm9sZS5yb2xlQXJuKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFzc3VtZWQgYnkgUmVzdGF0ZSBkZXBsb3ltZW50IHRvIGludm9rZSBMYW1iZGEtYmFzZWQgc2VydmljZXNcIixcbiAgICB9KTtcbiAgICBpbnZva2VyUm9sZS5ncmFudEFzc3VtZVJvbGUocmVzdGF0ZVRhc2sudGFza1JvbGUpO1xuICAgIHRoaXMuaW52b2tlclJvbGUgPSBpbnZva2VyUm9sZTtcblxuICAgIGNvbnN0IGxvZ0dyb3VwID1cbiAgICAgIHByb3BzLmxvZ0dyb3VwID8/XG4gICAgICBuZXcgbG9ncy5Mb2dHcm91cCh0aGlzLCBcIkxvZ3NcIiwge1xuICAgICAgICBsb2dHcm91cE5hbWU6IGAvcmVzdGF0ZS8ke2lkfWAsXG4gICAgICAgIHJldGVudGlvbjogbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9NT05USCxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeSA/PyBjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgfSk7XG5cbiAgICBjb25zdCByZXN0YXRlID0gcmVzdGF0ZVRhc2suYWRkQ29udGFpbmVyKFwiUmVzdGF0ZVwiLCB7XG4gICAgICBjb250YWluZXJOYW1lOiBcInJlc3RhdGUtcnVudGltZVwiLFxuICAgICAgaW1hZ2U6IGVjcy5Db250YWluZXJJbWFnZS5mcm9tUmVnaXN0cnkoYCR7cmVzdGF0ZUltYWdlfToke3Jlc3RhdGVUYWd9YCksXG4gICAgICBwb3J0TWFwcGluZ3M6IFt7IGNvbnRhaW5lclBvcnQ6IFJFU1RBVEVfSU5HUkVTU19QT1JUIH0sIHsgY29udGFpbmVyUG9ydDogUkVTVEFURV9BRE1JTl9QT1JUIH1dLFxuICAgICAgbG9nZ2luZzogZWNzLkxvZ0RyaXZlci5hd3NMb2dzKHtcbiAgICAgICAgbG9nR3JvdXAsXG4gICAgICAgIHN0cmVhbVByZWZpeDogXCJyZXN0YXRlXCIsXG4gICAgICB9KSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFJFU1RBVEVfT0JTRVJWQUJJTElUWV9fTE9HX19GT1JNQVQ6IFwiSnNvblwiLFxuICAgICAgICAvLyBSVVNUX0xPRzogXCJ3YXJuLHJlc3RhdGU9aW5mb1wiLFxuICAgICAgfSxcbiAgICAgIGNvbW1hbmQ6IHByb3BzLmNvbW1hbmQsXG4gICAgICBzdGFydFRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDIwKSxcbiAgICAgIHN0b3BUaW1lb3V0OiBjZGsuRHVyYXRpb24uc2Vjb25kcygyMCksXG4gICAgfSk7XG4gICAgcmVzdGF0ZS5hZGRNb3VudFBvaW50cyh7XG4gICAgICBjb250YWluZXJQYXRoOiBcIi90YXJnZXRcIixcbiAgICAgIHJlYWRPbmx5OiBmYWxzZSxcbiAgICAgIHNvdXJjZVZvbHVtZTogXCJyZXN0YXRlU3RvcmVcIixcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3RhdGVTZWN1cml0eUdyb3VwID0gbmV3IGVjMi5TZWN1cml0eUdyb3VwKHRoaXMsIFwiU2VjdXJpdHlHcm91cFwiLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLnNlY3VyaXR5R3JvdXAgPSByZXN0YXRlU2VjdXJpdHlHcm91cDtcblxuICAgIGNvbnN0IHJlc3RhdGVGYXJnYXRlU2VydmljZSA9IG5ldyBlY3MuRmFyZ2F0ZVNlcnZpY2UodGhpcywgXCJTZXJ2aWNlXCIsIHtcbiAgICAgIGNsdXN0ZXIsXG4gICAgICB0YXNrRGVmaW5pdGlvbjogcmVzdGF0ZVRhc2ssXG4gICAgICBhc3NpZ25QdWJsaWNJcDogdHJ1ZSxcbiAgICAgIGNpcmN1aXRCcmVha2VyOiB7XG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcbiAgICAgICAgcm9sbGJhY2s6IHRydWUsXG4gICAgICB9LFxuICAgICAgbWluSGVhbHRoeVBlcmNlbnQ6IDAsIC8vIGFsbG93IHNjYWxlIGRvd24gdG8gemVybyBkdXJpbmcgZGVwbG95bWVudHMgKHJlcXVpcmVkIGZvciBhdC1tb3N0LTEgbWF4IHNldHRpbmcpXG4gICAgICBtYXhIZWFsdGh5UGVyY2VudDogMTAwLCAvLyBkb24ndCBzdGFydCBtb3JlIHRoYW4gb25lIGNvcHlcbiAgICAgIHNlY3VyaXR5R3JvdXBzOiBbcmVzdGF0ZVNlY3VyaXR5R3JvdXBdLFxuICAgIH0pO1xuXG4gICAgZnMuY29ubmVjdGlvbnMuYWxsb3dEZWZhdWx0UG9ydEZyb20ocmVzdGF0ZVNlY3VyaXR5R3JvdXApO1xuICAgIGZzLmNvbm5lY3Rpb25zLmFsbG93RGVmYXVsdFBvcnRUbyhyZXN0YXRlU2VjdXJpdHlHcm91cCk7XG4gICAgZnMuZ3JhbnRSb290QWNjZXNzKHJlc3RhdGVGYXJnYXRlU2VydmljZS50YXNrRGVmaW5pdGlvbi50YXNrUm9sZS5ncmFudFByaW5jaXBhbCk7XG5cbiAgICBjb25zdCBhbGIgPSBuZXcgZWxiMi5BcHBsaWNhdGlvbkxvYWRCYWxhbmNlcih0aGlzLCBcIkFsYlwiLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgaW50ZXJuZXRGYWNpbmc6IHByb3BzLmxvYWRCYWxhbmNlcj8uaW50ZXJuZXRGYWNpbmcsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwdWJsaWNBcGlDZXJ0aWZpY2F0ZSA9IG5ldyBhY20uQ2VydGlmaWNhdGUodGhpcywgXCJDZXJ0aWZpY2F0ZVwiLCB7XG4gICAgICBkb21haW5OYW1lOiBwcm9wcy5kbnNOYW1lLFxuICAgICAgdmFsaWRhdGlvbjogYWNtLkNlcnRpZmljYXRlVmFsaWRhdGlvbi5mcm9tRG5zKHByb3BzLmhvc3RlZFpvbmUpLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaW5ncmVzc0xpc3RlbmVyID0gYWxiLmFkZExpc3RlbmVyKFwiSW5ncmVzc0xpc3RlbmVyXCIsIHtcbiAgICAgIHBvcnQ6IFBVQkxJQ19JTkdSRVNTX1BPUlQsXG4gICAgICBwcm90b2NvbDogZWxiMi5BcHBsaWNhdGlvblByb3RvY29sLkhUVFBTLFxuICAgICAgY2VydGlmaWNhdGVzOiBbcHVibGljQXBpQ2VydGlmaWNhdGVdLFxuICAgICAgb3BlbjogcHJvcHMubG9hZEJhbGFuY2VyPy5vcGVuLFxuICAgIH0pO1xuICAgIGluZ3Jlc3NMaXN0ZW5lci5hZGRUYXJnZXRzKFwiRmFyZ2F0ZUluZ3Jlc3NUYXJnZXRcIiwge1xuICAgICAgdGFyZ2V0czogW1xuICAgICAgICByZXN0YXRlRmFyZ2F0ZVNlcnZpY2UubG9hZEJhbGFuY2VyVGFyZ2V0KHtcbiAgICAgICAgICBjb250YWluZXJOYW1lOiByZXN0YXRlLmNvbnRhaW5lck5hbWUsXG4gICAgICAgICAgY29udGFpbmVyUG9ydDogUkVTVEFURV9JTkdSRVNTX1BPUlQsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICAgIHByb3RvY29sOiBlbGIyLkFwcGxpY2F0aW9uUHJvdG9jb2wuSFRUUCxcbiAgICAgIGhlYWx0aENoZWNrOiB7XG4gICAgICAgIHBhdGg6IFwiL2dycGMuaGVhbHRoLnYxLkhlYWx0aC9DaGVja1wiLFxuICAgICAgICBpbnRlcnZhbDogY2RrLkR1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgICAgIGhlYWx0aHlUaHJlc2hvbGRDb3VudDogMyxcbiAgICAgICAgdW5oZWFsdGh5VGhyZXNob2xkQ291bnQ6IDMsXG4gICAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDIpLFxuICAgICAgfSxcbiAgICAgIGRlcmVnaXN0cmF0aW9uRGVsYXk6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDUpLFxuICAgIH0pO1xuICAgIHRoaXMuaW5ncmVzc0xpc3RlbmVyID0gaW5ncmVzc0xpc3RlbmVyO1xuXG4gICAgY29uc3QgYWRtaW5MaXN0ZW5lciA9IGFsYi5hZGRMaXN0ZW5lcihcIkFkbWluTGlzdGVuZXJcIiwge1xuICAgICAgcG9ydDogUFVCTElDX0FETUlOX1BPUlQsXG4gICAgICBwcm90b2NvbDogZWxiMi5BcHBsaWNhdGlvblByb3RvY29sLkhUVFBTLFxuICAgICAgY2VydGlmaWNhdGVzOiBbcHVibGljQXBpQ2VydGlmaWNhdGVdLFxuICAgIH0pO1xuICAgIGFkbWluTGlzdGVuZXIuYWRkVGFyZ2V0cyhcIkZhcmdhdGVBZG1pblRhcmdldFwiLCB7XG4gICAgICB0YXJnZXRzOiBbXG4gICAgICAgIHJlc3RhdGVGYXJnYXRlU2VydmljZS5sb2FkQmFsYW5jZXJUYXJnZXQoe1xuICAgICAgICAgIGNvbnRhaW5lck5hbWU6IHJlc3RhdGUuY29udGFpbmVyTmFtZSxcbiAgICAgICAgICBjb250YWluZXJQb3J0OiBSRVNUQVRFX0FETUlOX1BPUlQsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICAgIHByb3RvY29sOiBlbGIyLkFwcGxpY2F0aW9uUHJvdG9jb2wuSFRUUCxcbiAgICAgIGhlYWx0aENoZWNrOiB7XG4gICAgICAgIHBhdGg6IFwiL2hlYWx0aFwiLFxuICAgICAgICBpbnRlcnZhbDogY2RrLkR1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgICAgIGhlYWx0aHlUaHJlc2hvbGRDb3VudDogMyxcbiAgICAgICAgdW5oZWFsdGh5VGhyZXNob2xkQ291bnQ6IDMsXG4gICAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDIpLFxuICAgICAgfSxcbiAgICAgIGRlcmVnaXN0cmF0aW9uRGVsYXk6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDUpLFxuICAgIH0pO1xuICAgIHRoaXMuYWRtaW5MaXN0ZW5lciA9IGFkbWluTGlzdGVuZXI7XG5cbiAgICBuZXcgcjUzLkFSZWNvcmQodGhpcywgXCJBbGJBbGlhc1wiLCB7XG4gICAgICB6b25lOiBwcm9wcy5ob3N0ZWRab25lLFxuICAgICAgcmVjb3JkTmFtZTogcHJvcHMuZG5zTmFtZS5zcGxpdChcIi5cIilbMF0sXG4gICAgICB0YXJnZXQ6IHI1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKG5ldyB0YXJnZXRzLkxvYWRCYWxhbmNlclRhcmdldChhbGIpKSxcbiAgICAgIC8vIG90aGVyIEFSZWNvcmQgY29uZmlndXJhdGlvbi4uLlxuICAgIH0pO1xuXG4gICAgdGhpcy5pbmdyZXNzVXJsID0gYGh0dHBzOi8vJHtwcm9wcy5kbnNOYW1lfSR7UFVCTElDX0lOR1JFU1NfUE9SVCA9PSA0NDMgPyBcIlwiIDogYDoke1BVQkxJQ19JTkdSRVNTX1BPUlR9YH1gO1xuICAgIHRoaXMuYWRtaW5VcmwgPSBgaHR0cHM6Ly8ke3Byb3BzLmRuc05hbWV9OiR7UFVCTElDX0FETUlOX1BPUlR9YDtcbiAgfVxufVxuIl19
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFyZ2F0ZS1yZXN0YXRlLWRlcGxveW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvcmVzdGF0ZS1jb25zdHJ1Y3RzL2ZhcmdhdGUtcmVzdGF0ZS1kZXBsb3ltZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7O0dBU0c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILDJDQUF1QztBQUN2QyxpREFBbUM7QUFDbkMsd0VBQTBEO0FBQzFELDJEQUE2QztBQUM3Qyx5REFBMkM7QUFDM0MseURBQTJDO0FBQzNDLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MsNkVBQStEO0FBQy9ELDZEQUErQztBQUMvQyx5RUFBMkQ7QUFJM0QsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUM7QUFDaEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDL0IsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUM7QUFDbEMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDaEMsTUFBTSxxQkFBcUIsR0FBRyw4QkFBOEIsQ0FBQztBQUM3RCxNQUFNLDBCQUEwQixHQUFHLFFBQVEsQ0FBQztBQUM1QyxNQUFNLHVCQUF1QixHQUFHLFFBQVEsQ0FBQztBQW9FekM7Ozs7R0FJRztBQUNILE1BQWEsd0JBQXlCLFNBQVEsc0JBQVM7SUFXckQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjtRQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFN0UsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSSxxQkFBcUIsQ0FBQztRQUNq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QyxVQUFVLEdBQUcsV0FBVyxLQUFLLENBQUMsT0FBTyxHQUFHLG1CQUFtQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLG1CQUFtQixFQUFFLEVBQUUsQ0FBQztRQUMzRyxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsS0FBSyxDQUFDLE9BQU8sSUFBSSxpQkFBaUIsRUFBRSxDQUFDO0lBQ2xFLENBQUM7Q0FDRjtBQW5ORCw0REFtTkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIzLTIwMjUgLSBSZXN0YXRlIFNvZnR3YXJlLCBJbmMuLCBSZXN0YXRlIEdtYkhcbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUmVzdGF0ZSBDREsgQ29uc3RydWN0IExpYnJhcnksXG4gKiB3aGljaCBpcyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKlxuICogWW91IGNhbiBmaW5kIGEgY29weSBvZiB0aGUgbGljZW5zZSBpbiBmaWxlIExJQ0VOU0UgaW4gdGhlIHJvb3RcbiAqIGRpcmVjdG9yeSBvZiB0aGlzIHJlcG9zaXRvcnkgb3IgcGFja2FnZSwgb3IgYXRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXN0YXRlZGV2L3Nkay10eXBlc2NyaXB0L2Jsb2IvbWFpbi9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGFjbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBlY3MgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3NcIjtcbmltcG9ydCAqIGFzIGVmcyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVmc1wiO1xuaW1wb3J0ICogYXMgZWxiMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjJcIjtcbmltcG9ydCAqIGFzIHI1MyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjtcbmltcG9ydCAqIGFzIHRhcmdldHMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzLXRhcmdldHNcIjtcbmltcG9ydCB7IElSZXN0YXRlRW52aXJvbm1lbnQgfSBmcm9tIFwiLi9yZXN0YXRlLWVudmlyb25tZW50XCI7XG5pbXBvcnQgeyBUcmFjaW5nTW9kZSB9IGZyb20gXCIuL2RlcGxveW1lbnRzLWNvbW1vblwiO1xuXG5jb25zdCBQVUJMSUNfSU5HUkVTU19QT1JUID0gNDQzO1xuY29uc3QgUFVCTElDX0FETUlOX1BPUlQgPSA5MDcwO1xuY29uc3QgUkVTVEFURV9JTkdSRVNTX1BPUlQgPSA4MDgwO1xuY29uc3QgUkVTVEFURV9BRE1JTl9QT1JUID0gOTA3MDtcbmNvbnN0IFJFU1RBVEVfSU1BR0VfREVGQVVMVCA9IFwiZG9ja2VyLmlvL3Jlc3RhdGVkZXYvcmVzdGF0ZVwiO1xuY29uc3QgUkVTVEFURV9ET0NLRVJfREVGQVVMVF9UQUcgPSBcImxhdGVzdFwiO1xuY29uc3QgQURPVF9ET0NLRVJfREVGQVVMVF9UQUcgPSBcImxhdGVzdFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RhdGVGYXJnYXRlUHJvcHMge1xuICAvKiogVGhlIFZQQyBpbiB3aGljaCB0byBsYXVuY2ggdGhlIFJlc3RhdGUgaG9zdC4gKi9cbiAgdnBjPzogZWMyLklWcGM7XG5cbiAgLyoqIExvZyBncm91cCBmb3IgUmVzdGF0ZSBzZXJ2aWNlIGxvZ3MuICovXG4gIGxvZ0dyb3VwPzogbG9ncy5Mb2dHcm91cDtcblxuICAvKiogVHJhY2luZyBtb2RlIGZvciBSZXN0YXRlIHNlcnZpY2VzLiBEZWZhdWx0cyB0byB7QGxpbmsgVHJhY2luZ01vZGUuRElTQUJMRUR9LiAqL1xuICB0cmFjaW5nPzogVHJhY2luZ01vZGU7XG5cbiAgLyoqIFByZWZpeCBmb3IgcmVzb3VyY2VzIGNyZWF0ZWQgYnkgdGhpcyBjb25zdHJ1Y3QgdGhhdCByZXF1aXJlIHVuaXF1ZSBuYW1lcy4gKi9cbiAgcHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKiBFQ1MgY2x1c3RlciBuYW1lLiAqL1xuICBjbHVzdGVyTmFtZT86IHN0cmluZztcblxuICAvKiogUmVzdGF0ZSBEb2NrZXIgaW1hZ2UgbmFtZS4gRGVmYXVsdHMgdG8gYGxhdGVzdGAuICovXG4gIHJlc3RhdGVJbWFnZT86IHN0cmluZztcblxuICAvKiogUmVzdGF0ZSBEb2NrZXIgaW1hZ2UgdGFnLiBEZWZhdWx0cyB0byBgbGF0ZXN0YC4gKi9cbiAgcmVzdGF0ZVRhZz86IHN0cmluZztcblxuICAvKiogQW1hem9uIERpc3RybyBmb3IgT3BlbiBUZWxlbWV0cnkgRG9ja2VyIGltYWdlIHRhZy4gRGVmYXVsdHMgdG8gYGxhdGVzdGAuICovXG4gIGFkb3RUYWc/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IGZvciBSZXN0YXRlIGNvbnRhaW5lci4gVXNlIGl0IHRvIGNvbmZpZ3VyZSBsb2dnaW5nIGFuZCBvdGhlciBwcm9jZXNzLWxldmVsIHNldHRpbmdzLlxuICAgKi9cbiAgZW52aXJvbm1lbnQ/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBSZXN0YXRlIGNvbnRhaW5lciBleHRyYSBhcmd1bWVudHMuXG4gICAqL1xuICBjb21tYW5kPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBmdWxsIG5hbWUgZm9yIHRoZSBwdWJsaWMgZW5kcG9pbnQuXG4gICAqL1xuICBkbnNOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEROUyB6b25lIGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgcHVibGljIGVuZHBvaW50LlxuICAgKi9cbiAgaG9zdGVkWm9uZTogcjUzLklIb3N0ZWRab25lO1xuXG4gIC8qKlxuICAgKiBSZW1vdmFsIHBvbGljeSBmb3IgbG9uZy1saXZlZCByZXNvdXJjZXMgKHN0b3JhZ2UsIGxvZ3MpLiBEZWZhdWx0OiBgY2RrLlJlbW92YWxQb2xpY3kuREVTVFJPWWAuXG4gICAqL1xuICByZW1vdmFsUG9saWN5PzogY2RrLlJlbW92YWxQb2xpY3k7XG5cbiAgLyoqXG4gICAqIExvYWQgYmFsYW5jZXIgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGxvYWRCYWxhbmNlcj86IHtcbiAgICAvKiogQHNlZSBCYXNlTG9hZEJhbGFuY2VyUHJvcHMuaW50ZXJuZXRGYWNpbmcgKi9cbiAgICBpbnRlcm5ldEZhY2luZz86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBJZiB5b3Ugc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSBjYW4gY3VzdG9taXplIHRoZSBhY2Nlc3MgdG8gdGhlIHBhaXIgb2YgQUxCIGxpc3RlbmVycyB2aWFcbiAgICAgKiB7QGxpbmsgRmFyZ2F0ZVJlc3RhdGVEZXBsb3ltZW50LmluZ3Jlc3NMaXN0ZW5lcn0gYW5kIHtAbGluayBGYXJnYXRlUmVzdGF0ZURlcGxveW1lbnQuYWRtaW5MaXN0ZW5lcn0uXG4gICAgICpcbiAgICAgKiBAc2VlIEJhc2VBcHBsaWNhdGlvbkxpc3RlbmVyUHJvcHMub3BlbiAqL1xuICAgIG9wZW4/OiBib29sZWFuO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBSZXN0YXRlIHNlcnZpY2UgZGVwbG95bWVudCBydW5uaW5nIGFzIGEgRmFyZ2F0ZSB0YXNrIGFuZCBiYWNrZWQgYnkgRUZTLlxuICpcbiAqIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBjb25zdHJ1Y3QgaXMgc3RpbGwgZXhwZXJpbWVudGFsISBVc2Ugd2l0aCBjYXV0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgRmFyZ2F0ZVJlc3RhdGVEZXBsb3ltZW50IGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSVJlc3RhdGVFbnZpcm9ubWVudCB7XG4gIHJlYWRvbmx5IGludm9rZXJSb2xlOiBpYW0uSVJvbGU7XG4gIHJlYWRvbmx5IHZwYzogZWMyLklWcGM7XG5cbiAgcmVhZG9ubHkgaW5ncmVzc1VybDogc3RyaW5nO1xuICByZWFkb25seSBhZG1pblVybDogc3RyaW5nO1xuICByZWFkb25seSBzZWN1cml0eUdyb3VwOiBlYzIuU2VjdXJpdHlHcm91cDtcbiAgcmVhZG9ubHkgZGF0YVN0b3JlOiBlZnMuRmlsZVN5c3RlbTtcbiAgcmVhZG9ubHkgaW5ncmVzc0xpc3RlbmVyOiBlbGIyLkFwcGxpY2F0aW9uTGlzdGVuZXI7XG4gIHJlYWRvbmx5IGFkbWluTGlzdGVuZXI6IGVsYjIuQXBwbGljYXRpb25MaXN0ZW5lcjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmVzdGF0ZUZhcmdhdGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnZwYyA9IHByb3BzLnZwYyA/PyBlYzIuVnBjLmZyb21Mb29rdXAodGhpcywgXCJWcGNcIiwgeyBpc0RlZmF1bHQ6IHRydWUgfSk7XG5cbiAgICBjb25zdCByZXN0YXRlSW1hZ2UgPSBwcm9wcy5yZXN0YXRlSW1hZ2UgPz8gUkVTVEFURV9JTUFHRV9ERUZBVUxUO1xuICAgIGNvbnN0IHJlc3RhdGVUYWcgPSBwcm9wcy5yZXN0YXRlVGFnID8/IFJFU1RBVEVfRE9DS0VSX0RFRkFVTFRfVEFHO1xuICAgIGNvbnN0IGFkb3RUYWcgPSBwcm9wcy5hZG90VGFnID8/IEFET1RfRE9DS0VSX0RFRkFVTFRfVEFHOyAvLyBUT0RPOiBhZGQgWC1SYXkgc3VwcG9ydCBsaWtlIHdlIGhhdmUgZm9yIEVDMlxuXG4gICAgY29uc3QgZnMgPSBuZXcgZWZzLkZpbGVTeXN0ZW0odGhpcywgXCJEYXRhU3RvcmVcIiwge1xuICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgIGxpZmVjeWNsZVBvbGljeTogZWZzLkxpZmVjeWNsZVBvbGljeS5BRlRFUl8zMF9EQVlTLFxuICAgICAgcGVyZm9ybWFuY2VNb2RlOiBlZnMuUGVyZm9ybWFuY2VNb2RlLkdFTkVSQUxfUFVSUE9TRSxcbiAgICAgIHRocm91Z2hwdXRNb2RlOiBlZnMuVGhyb3VnaHB1dE1vZGUuQlVSU1RJTkcsXG4gICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5yZW1vdmFsUG9saWN5ID8/IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgfSk7XG4gICAgZnMuYWRkVG9SZXNvdXJjZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgc2lkOiBcIkFsbG93RWZzTW91bnRcIixcbiAgICAgICAgYWN0aW9uczogW1wiZWxhc3RpY2ZpbGVzeXN0ZW06Q2xpZW50TW91bnRcIl0sXG4gICAgICAgIC8vIFJlc3RyaWN0aW5nIHRvIHRoZSBFQ1MgZXhlY3V0aW9uIHJvbGUgZG9lcyBub3Qgd29yazsgcHJvYmFibHkgZG9lc24ndCBtYXR0ZXIgLSBFRlMgYWNjZXNzIGlzIHNlY3VyZWQgYnkgYSBzZWN1cml0eSBncm91cFxuICAgICAgICBwcmluY2lwYWxzOiBbbmV3IGlhbS5BbnlQcmluY2lwYWwoKV0sXG4gICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICBCb29sOiB7XG4gICAgICAgICAgICBcImVsYXN0aWNmaWxlc3lzdGVtOkFjY2Vzc2VkVmlhTW91bnRUYXJnZXRcIjogXCJ0cnVlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgdGhpcy5kYXRhU3RvcmUgPSBmcztcblxuICAgIGNvbnN0IGNsdXN0ZXIgPSBuZXcgZWNzLkNsdXN0ZXIodGhpcywgXCJDbHVzdGVyXCIsIHtcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICBjbHVzdGVyTmFtZTogcHJvcHMuY2x1c3Rlck5hbWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN0YXRlVGFzayA9IG5ldyBlY3MuRmFyZ2F0ZVRhc2tEZWZpbml0aW9uKHRoaXMsIFwiUmVzdGF0ZVRhc2tcIiwge1xuICAgICAgY3B1OiA0MDk2LFxuICAgICAgbWVtb3J5TGltaXRNaUI6IDgxOTIsXG4gICAgICBydW50aW1lUGxhdGZvcm06IHtcbiAgICAgICAgY3B1QXJjaGl0ZWN0dXJlOiBlY3MuQ3B1QXJjaGl0ZWN0dXJlLkFSTTY0LFxuICAgICAgICBvcGVyYXRpbmdTeXN0ZW1GYW1pbHk6IGVjcy5PcGVyYXRpbmdTeXN0ZW1GYW1pbHkuTElOVVgsXG4gICAgICB9LFxuICAgICAgdm9sdW1lczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJyZXN0YXRlU3RvcmVcIixcbiAgICAgICAgICBlZnNWb2x1bWVDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICBmaWxlU3lzdGVtSWQ6IGZzLmZpbGVTeXN0ZW1JZCxcbiAgICAgICAgICAgIGF1dGhvcml6YXRpb25Db25maWc6IHt9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gVE9ETzogU3RhcnQgYW4gQURPVCBjb250YWluZXIgYW5kIGhvb2sgaXQgdXAgdG8gUmVzdGF0ZSBhbmQgQVdTIFgtUmF5IG9yIGFub3RoZXIgT1RlbCBzaW5rXG4gICAgLy8gaWYgKHByb3BzLnRyYWNpbmcgPT09IFRyYWNpbmdNb2RlLkFXU19YUkFZKSB7XG4gICAgLy8gICByZXN0YXRlVGFzay50YXNrUm9sZS5hZGRNYW5hZ2VkUG9saWN5KGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcIkFXU1hyYXlXcml0ZU9ubHlBY2Nlc3NcIikpO1xuICAgIC8vIH1cblxuICAgIG5ldyBpYW0uUG9saWN5KHRoaXMsIFwiVGFza1BvbGljeVwiLCB7XG4gICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBzaWQ6IFwiQWxsb3dBc3N1bWVBbnlSb2xlXCIsXG4gICAgICAgICAgYWN0aW9uczogW1wic3RzOkFzc3VtZVJvbGVcIl0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLCAvLyB3ZSBkb24ndCBrbm93IHVwZnJvbnQgd2hhdCBpbnZva2VyIHJvbGVzIHdlIG1heSBiZSBhc2tlZCB0byBhc3N1bWUgYXQgcnVudGltZVxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSkuYXR0YWNoVG9Sb2xlKHJlc3RhdGVUYXNrLnRhc2tSb2xlKTtcblxuICAgIGNvbnN0IGludm9rZXJSb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsIFwiSW52b2tlclJvbGVcIiwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLkFyblByaW5jaXBhbChyZXN0YXRlVGFzay50YXNrUm9sZS5yb2xlQXJuKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFzc3VtZWQgYnkgUmVzdGF0ZSBkZXBsb3ltZW50IHRvIGludm9rZSBMYW1iZGEtYmFzZWQgc2VydmljZXNcIixcbiAgICB9KTtcbiAgICBpbnZva2VyUm9sZS5ncmFudEFzc3VtZVJvbGUocmVzdGF0ZVRhc2sudGFza1JvbGUpO1xuICAgIHRoaXMuaW52b2tlclJvbGUgPSBpbnZva2VyUm9sZTtcblxuICAgIGNvbnN0IGxvZ0dyb3VwID1cbiAgICAgIHByb3BzLmxvZ0dyb3VwID8/XG4gICAgICBuZXcgbG9ncy5Mb2dHcm91cCh0aGlzLCBcIkxvZ3NcIiwge1xuICAgICAgICBsb2dHcm91cE5hbWU6IGAvcmVzdGF0ZS8ke2lkfWAsXG4gICAgICAgIHJldGVudGlvbjogbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9NT05USCxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeSA/PyBjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgfSk7XG5cbiAgICBjb25zdCByZXN0YXRlID0gcmVzdGF0ZVRhc2suYWRkQ29udGFpbmVyKFwiUmVzdGF0ZVwiLCB7XG4gICAgICBjb250YWluZXJOYW1lOiBcInJlc3RhdGUtcnVudGltZVwiLFxuICAgICAgaW1hZ2U6IGVjcy5Db250YWluZXJJbWFnZS5mcm9tUmVnaXN0cnkoYCR7cmVzdGF0ZUltYWdlfToke3Jlc3RhdGVUYWd9YCksXG4gICAgICBwb3J0TWFwcGluZ3M6IFt7IGNvbnRhaW5lclBvcnQ6IFJFU1RBVEVfSU5HUkVTU19QT1JUIH0sIHsgY29udGFpbmVyUG9ydDogUkVTVEFURV9BRE1JTl9QT1JUIH1dLFxuICAgICAgbG9nZ2luZzogZWNzLkxvZ0RyaXZlci5hd3NMb2dzKHtcbiAgICAgICAgbG9nR3JvdXAsXG4gICAgICAgIHN0cmVhbVByZWZpeDogXCJyZXN0YXRlXCIsXG4gICAgICB9KSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFJFU1RBVEVfTE9HX0ZPUk1BVDogXCJqc29uXCIsXG4gICAgICAgIFJFU1RBVEVfTk9ERV9OQU1FOiBcImZhcmdhdGVcIixcbiAgICAgIH0sXG4gICAgICBjb21tYW5kOiBwcm9wcy5jb21tYW5kLFxuICAgICAgc3RhcnRUaW1lb3V0OiBjZGsuRHVyYXRpb24uc2Vjb25kcygyMCksXG4gICAgICBzdG9wVGltZW91dDogY2RrLkR1cmF0aW9uLnNlY29uZHMoMjApLFxuICAgIH0pO1xuICAgIHJlc3RhdGUuYWRkTW91bnRQb2ludHMoe1xuICAgICAgY29udGFpbmVyUGF0aDogXCIvcmVzdGF0ZS1kYXRhXCIsXG4gICAgICByZWFkT25seTogZmFsc2UsXG4gICAgICBzb3VyY2VWb2x1bWU6IFwicmVzdGF0ZVN0b3JlXCIsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN0YXRlU2VjdXJpdHlHcm91cCA9IG5ldyBlYzIuU2VjdXJpdHlHcm91cCh0aGlzLCBcIlNlY3VyaXR5R3JvdXBcIiwge1xuICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gICAgfSk7XG4gICAgdGhpcy5zZWN1cml0eUdyb3VwID0gcmVzdGF0ZVNlY3VyaXR5R3JvdXA7XG5cbiAgICBjb25zdCByZXN0YXRlRmFyZ2F0ZVNlcnZpY2UgPSBuZXcgZWNzLkZhcmdhdGVTZXJ2aWNlKHRoaXMsIFwiU2VydmljZVwiLCB7XG4gICAgICBjbHVzdGVyLFxuICAgICAgdGFza0RlZmluaXRpb246IHJlc3RhdGVUYXNrLFxuICAgICAgYXNzaWduUHVibGljSXA6IHRydWUsXG4gICAgICBjaXJjdWl0QnJlYWtlcjoge1xuICAgICAgICBlbmFibGU6IHRydWUsXG4gICAgICAgIHJvbGxiYWNrOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIG1pbkhlYWx0aHlQZXJjZW50OiAwLCAvLyBhbGxvdyBzY2FsZSBkb3duIHRvIHplcm8gZHVyaW5nIGRlcGxveW1lbnRzIChyZXF1aXJlZCBmb3IgYXQtbW9zdC0xIG1heCBzZXR0aW5nKVxuICAgICAgbWF4SGVhbHRoeVBlcmNlbnQ6IDEwMCwgLy8gZG9uJ3Qgc3RhcnQgbW9yZSB0aGFuIG9uZSBjb3B5XG4gICAgICBzZWN1cml0eUdyb3VwczogW3Jlc3RhdGVTZWN1cml0eUdyb3VwXSxcbiAgICB9KTtcblxuICAgIGZzLmNvbm5lY3Rpb25zLmFsbG93RGVmYXVsdFBvcnRGcm9tKHJlc3RhdGVTZWN1cml0eUdyb3VwKTtcbiAgICBmcy5jb25uZWN0aW9ucy5hbGxvd0RlZmF1bHRQb3J0VG8ocmVzdGF0ZVNlY3VyaXR5R3JvdXApO1xuICAgIGZzLmdyYW50Um9vdEFjY2VzcyhyZXN0YXRlRmFyZ2F0ZVNlcnZpY2UudGFza0RlZmluaXRpb24udGFza1JvbGUuZ3JhbnRQcmluY2lwYWwpO1xuXG4gICAgY29uc3QgYWxiID0gbmV3IGVsYjIuQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIodGhpcywgXCJBbGJcIiwge1xuICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgIGludGVybmV0RmFjaW5nOiBwcm9wcy5sb2FkQmFsYW5jZXI/LmludGVybmV0RmFjaW5nLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcHVibGljQXBpQ2VydGlmaWNhdGUgPSBuZXcgYWNtLkNlcnRpZmljYXRlKHRoaXMsIFwiQ2VydGlmaWNhdGVcIiwge1xuICAgICAgZG9tYWluTmFtZTogcHJvcHMuZG5zTmFtZSxcbiAgICAgIHZhbGlkYXRpb246IGFjbS5DZXJ0aWZpY2F0ZVZhbGlkYXRpb24uZnJvbURucyhwcm9wcy5ob3N0ZWRab25lKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGluZ3Jlc3NMaXN0ZW5lciA9IGFsYi5hZGRMaXN0ZW5lcihcIkluZ3Jlc3NMaXN0ZW5lclwiLCB7XG4gICAgICBwb3J0OiBQVUJMSUNfSU5HUkVTU19QT1JULFxuICAgICAgcHJvdG9jb2w6IGVsYjIuQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQUyxcbiAgICAgIGNlcnRpZmljYXRlczogW3B1YmxpY0FwaUNlcnRpZmljYXRlXSxcbiAgICAgIG9wZW46IHByb3BzLmxvYWRCYWxhbmNlcj8ub3BlbixcbiAgICB9KTtcbiAgICBpbmdyZXNzTGlzdGVuZXIuYWRkVGFyZ2V0cyhcIkZhcmdhdGVJbmdyZXNzVGFyZ2V0XCIsIHtcbiAgICAgIHRhcmdldHM6IFtcbiAgICAgICAgcmVzdGF0ZUZhcmdhdGVTZXJ2aWNlLmxvYWRCYWxhbmNlclRhcmdldCh7XG4gICAgICAgICAgY29udGFpbmVyTmFtZTogcmVzdGF0ZS5jb250YWluZXJOYW1lLFxuICAgICAgICAgIGNvbnRhaW5lclBvcnQ6IFJFU1RBVEVfSU5HUkVTU19QT1JULFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgICBwb3J0OiBSRVNUQVRFX0lOR1JFU1NfUE9SVCxcbiAgICAgIHByb3RvY29sOiBlbGIyLkFwcGxpY2F0aW9uUHJvdG9jb2wuSFRUUCxcbiAgICAgIGhlYWx0aENoZWNrOiB7XG4gICAgICAgIHBhdGg6IFwiL3Jlc3RhdGUvaGVhbHRoXCIsXG4gICAgICAgIGludGVydmFsOiBjZGsuRHVyYXRpb24uc2Vjb25kcyg1KSxcbiAgICAgICAgaGVhbHRoeVRocmVzaG9sZENvdW50OiAzLFxuICAgICAgICB1bmhlYWx0aHlUaHJlc2hvbGRDb3VudDogMyxcbiAgICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLnNlY29uZHMoMiksXG4gICAgICB9LFxuICAgICAgZGVyZWdpc3RyYXRpb25EZWxheTogY2RrLkR1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgfSk7XG4gICAgdGhpcy5pbmdyZXNzTGlzdGVuZXIgPSBpbmdyZXNzTGlzdGVuZXI7XG5cbiAgICBjb25zdCBhZG1pbkxpc3RlbmVyID0gYWxiLmFkZExpc3RlbmVyKFwiQWRtaW5MaXN0ZW5lclwiLCB7XG4gICAgICBwb3J0OiBQVUJMSUNfQURNSU5fUE9SVCxcbiAgICAgIHByb3RvY29sOiBlbGIyLkFwcGxpY2F0aW9uUHJvdG9jb2wuSFRUUFMsXG4gICAgICBjZXJ0aWZpY2F0ZXM6IFtwdWJsaWNBcGlDZXJ0aWZpY2F0ZV0sXG4gICAgfSk7XG4gICAgYWRtaW5MaXN0ZW5lci5hZGRUYXJnZXRzKFwiRmFyZ2F0ZUFkbWluVGFyZ2V0XCIsIHtcbiAgICAgIHRhcmdldHM6IFtcbiAgICAgICAgcmVzdGF0ZUZhcmdhdGVTZXJ2aWNlLmxvYWRCYWxhbmNlclRhcmdldCh7XG4gICAgICAgICAgY29udGFpbmVyTmFtZTogcmVzdGF0ZS5jb250YWluZXJOYW1lLFxuICAgICAgICAgIGNvbnRhaW5lclBvcnQ6IFJFU1RBVEVfQURNSU5fUE9SVCxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgICAgcG9ydDogUkVTVEFURV9BRE1JTl9QT1JULFxuICAgICAgcHJvdG9jb2w6IGVsYjIuQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQLFxuICAgICAgaGVhbHRoQ2hlY2s6IHtcbiAgICAgICAgcGF0aDogXCIvaGVhbHRoXCIsXG4gICAgICAgIGludGVydmFsOiBjZGsuRHVyYXRpb24uc2Vjb25kcyg1KSxcbiAgICAgICAgaGVhbHRoeVRocmVzaG9sZENvdW50OiAzLFxuICAgICAgICB1bmhlYWx0aHlUaHJlc2hvbGRDb3VudDogMyxcbiAgICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLnNlY29uZHMoMiksXG4gICAgICB9LFxuICAgICAgZGVyZWdpc3RyYXRpb25EZWxheTogY2RrLkR1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgfSk7XG4gICAgdGhpcy5hZG1pbkxpc3RlbmVyID0gYWRtaW5MaXN0ZW5lcjtcblxuICAgIG5ldyByNTMuQVJlY29yZCh0aGlzLCBcIkFsYkFsaWFzXCIsIHtcbiAgICAgIHpvbmU6IHByb3BzLmhvc3RlZFpvbmUsXG4gICAgICByZWNvcmROYW1lOiBwcm9wcy5kbnNOYW1lLnNwbGl0KFwiLlwiKVswXSxcbiAgICAgIHRhcmdldDogcjUzLlJlY29yZFRhcmdldC5mcm9tQWxpYXMobmV3IHRhcmdldHMuTG9hZEJhbGFuY2VyVGFyZ2V0KGFsYikpLFxuICAgICAgLy8gb3RoZXIgQVJlY29yZCBjb25maWd1cmF0aW9uLi4uXG4gICAgfSk7XG5cbiAgICB0aGlzLmluZ3Jlc3NVcmwgPSBgaHR0cHM6Ly8ke3Byb3BzLmRuc05hbWV9JHtQVUJMSUNfSU5HUkVTU19QT1JUID09IDQ0MyA/IFwiXCIgOiBgOiR7UFVCTElDX0lOR1JFU1NfUE9SVH1gfWA7XG4gICAgdGhpcy5hZG1pblVybCA9IGBodHRwczovLyR7cHJvcHMuZG5zTmFtZX06JHtQVUJMSUNfQURNSU5fUE9SVH1gO1xuICB9XG59XG4iXX0=
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
* Copyright (c) 2023 - Restate Software, Inc., Restate GmbH
|
|
3
|
+
* Copyright (c) 2023-2025 - Restate Software, Inc., Restate GmbH
|
|
4
4
|
*
|
|
5
|
-
* This file is part of the Restate
|
|
5
|
+
* This file is part of the Restate CDK Construct Library,
|
|
6
6
|
* which is released under the MIT license.
|
|
7
7
|
*
|
|
8
8
|
* You can find a copy of the license in file LICENSE in the root
|
|
@@ -25,8 +25,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
25
25
|
};
|
|
26
26
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
27
|
__exportStar(require("./service-deployer"), exports);
|
|
28
|
+
__exportStar(require("./fargate-restate-deployment"), exports);
|
|
28
29
|
__exportStar(require("./restate-environment"), exports);
|
|
29
30
|
__exportStar(require("./restate-cloud-environment"), exports);
|
|
30
31
|
__exportStar(require("./deployments-common"), exports);
|
|
31
32
|
__exportStar(require("./single-node-restate-deployment"), exports);
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvcmVzdGF0ZS1jb25zdHJ1Y3RzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7O0dBU0c7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCxxREFBbUM7QUFDbkMsK0RBQTZDO0FBQzdDLHdEQUFzQztBQUN0Qyw4REFBNEM7QUFDNUMsdURBQXFDO0FBQ3JDLG1FQUFpRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjMtMjAyNSAtIFJlc3RhdGUgU29mdHdhcmUsIEluYy4sIFJlc3RhdGUgR21iSFxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBSZXN0YXRlIENESyBDb25zdHJ1Y3QgTGlicmFyeSxcbiAqIHdoaWNoIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqXG4gKiBZb3UgY2FuIGZpbmQgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGluIGZpbGUgTElDRU5TRSBpbiB0aGUgcm9vdFxuICogZGlyZWN0b3J5IG9mIHRoaXMgcmVwb3NpdG9yeSBvciBwYWNrYWdlLCBvciBhdFxuICogaHR0cHM6Ly9naXRodWIuY29tL3Jlc3RhdGVkZXYvc2RrLXR5cGVzY3JpcHQvYmxvYi9tYWluL0xJQ0VOU0VcbiAqL1xuXG5leHBvcnQgKiBmcm9tIFwiLi9zZXJ2aWNlLWRlcGxveWVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9mYXJnYXRlLXJlc3RhdGUtZGVwbG95bWVudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmVzdGF0ZS1lbnZpcm9ubWVudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmVzdGF0ZS1jbG91ZC1lbnZpcm9ubWVudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVwbG95bWVudHMtY29tbW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zaW5nbGUtbm9kZS1yZXN0YXRlLWRlcGxveW1lbnRcIjtcbiJdfQ==
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Handler } from "aws-lambda/handler";
|
|
2
2
|
import { CloudFormationCustomResourceEvent } from "aws-lambda/trigger/cloudformation-custom-resource";
|
|
3
|
-
import * as cdk from "aws-cdk-lib";
|
|
4
3
|
/**
|
|
5
4
|
* Custom Resource event shape for registering Restate Lambda service handlers with a Restate environment.
|
|
6
5
|
*/
|
|
@@ -27,7 +26,6 @@ export interface RegistrationProperties {
|
|
|
27
26
|
private?: "true" | "false";
|
|
28
27
|
/** Whether to trust any certificate when connecting to the admin endpoint. */
|
|
29
28
|
insecure?: "true" | "false";
|
|
30
|
-
removalPolicy?: cdk.RemovalPolicy;
|
|
31
29
|
}
|
|
32
30
|
/**
|
|
33
31
|
* Custom Resource event handler for Restate service registration. This handler backs the custom resources created by
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
* Copyright (c) 2023-
|
|
3
|
+
* Copyright (c) 2023-2025 - Restate Software, Inc., Restate GmbH
|
|
4
4
|
*
|
|
5
|
-
* This file is part of the Restate
|
|
5
|
+
* This file is part of the Restate CDK Construct Library,
|
|
6
6
|
* which is released under the MIT license.
|
|
7
7
|
*
|
|
8
8
|
* You can find a copy of the license in file LICENSE in the root
|
|
@@ -25,13 +25,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
25
25
|
}) : function(o, v) {
|
|
26
26
|
o["default"] = v;
|
|
27
27
|
});
|
|
28
|
-
var __importStar = (this && this.__importStar) || function (
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
};
|
|
28
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
29
|
+
var ownKeys = function(o) {
|
|
30
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
31
|
+
var ar = [];
|
|
32
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
33
|
+
return ar;
|
|
34
|
+
};
|
|
35
|
+
return ownKeys(o);
|
|
36
|
+
};
|
|
37
|
+
return function (mod) {
|
|
38
|
+
if (mod && mod.__esModule) return mod;
|
|
39
|
+
var result = {};
|
|
40
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
41
|
+
__setModuleDefault(result, mod);
|
|
42
|
+
return result;
|
|
43
|
+
};
|
|
44
|
+
})();
|
|
35
45
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
46
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
47
|
};
|
|
@@ -156,9 +166,10 @@ const handler = async function (event) {
|
|
|
156
166
|
const response = (await registerDeploymentResponse.json());
|
|
157
167
|
if (props.servicePath && !response.services.find((s) => s.name === props.servicePath)) {
|
|
158
168
|
failureReason =
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
169
|
+
"Registration succeeded, but none of the service names in the deployment match the specified name. " +
|
|
170
|
+
`Expected "${props.servicePath}", got back: [` +
|
|
171
|
+
response.services.map((svc) => svc?.name).join(", ") +
|
|
172
|
+
"]";
|
|
162
173
|
attempt = MAX_REGISTRATION_ATTEMPTS; // don't retry this
|
|
163
174
|
break;
|
|
164
175
|
}
|
|
@@ -235,4 +246,4 @@ async function createAuthHeader(props) {
|
|
|
235
246
|
async function sleep(millis) {
|
|
236
247
|
return new Promise((resolve) => setTimeout(resolve, millis));
|
|
237
248
|
}
|
|
238
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcmVzdGF0ZS1jb25zdHJ1Y3RzL3JlZ2lzdGVyLXNlcnZpY2UtaGFuZGxlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7OztHQVNHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUlILDREQUErQjtBQUUvQiw0RUFBOEY7QUFDOUYsbUNBQW1DO0FBQ25DLGtEQUFvQztBQUNwQyxnREFBa0M7QUE0Q2xDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsMkZBQTJGO0FBQ2hJLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0FBRXBDLE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDO0FBQ3ZDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQztBQUVqQzs7O0dBR0c7QUFDSSxNQUFNLE9BQU8sR0FBcUQsS0FBSyxXQUFXLEtBQUs7SUFDNUYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFdkIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLGtCQUE0QyxDQUFDO0lBRWpFLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMvQixTQUFTLEVBQUUsSUFBSTtLQUNoQixDQUFDLENBQUM7SUFDSCxNQUFNLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDakMsU0FBUyxFQUFFLElBQUk7UUFDZixrQkFBa0IsRUFBRSxLQUFLLENBQUMsUUFBUSxLQUFLLE1BQU07S0FDOUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFRLEVBQUUsRUFBRTtRQUNqQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLElBQUksT0FBTyxFQUFFLENBQUM7WUFDNUIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ25DLGlIQUFpSDtRQUNqSCwyR0FBMkc7UUFDM0csK0dBQStHO1FBQy9HLHVCQUF1QjtRQUV2QixvRUFBb0U7UUFDcEUsMkRBQTJEO1FBQzNELHFFQUFxRTtRQUNyRSw4Q0FBOEM7UUFDOUMsbUdBQW1HO1FBQ25HLG9GQUFvRjtRQUNwRixtR0FBbUc7UUFDbkcsaUNBQWlDO1FBQ2pDLHdCQUF3QjtRQUN4Qiw0QkFBNEI7UUFDNUIsdURBQXVEO1FBQ3ZELEVBQUU7UUFDRix1RUFBdUU7UUFDdkUsd0NBQXdDO1FBQ3hDLHNIQUFzSDtRQUN0SCxNQUFNO1FBQ04sSUFBSTtRQUVKLE9BQU8sQ0FBQyxJQUFJLENBQUMsOEZBQThGLENBQUMsQ0FBQztRQUM3RyxPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFakQsSUFBSSxPQUFPLENBQUM7SUFFWixNQUFNLGNBQWMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLFNBQVMsQ0FBQztJQUVsRCxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNsRSxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsT0FBTyxLQUFLLENBQUMsQ0FBQztRQUMxRCxNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSyxDQUFDLENBQUM7UUFDaEYsSUFBSSxjQUFjLEdBQUcsU0FBUyxDQUFDO1FBQy9CLElBQUksWUFBWSxHQUFHLFNBQVMsQ0FBQztRQUM3QixJQUFJLENBQUM7WUFDSCxjQUFjLEdBQUcsTUFBTSxJQUFBLG9CQUFLLEVBQUMsY0FBYyxFQUFFO2dCQUMzQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07Z0JBQ3pCLE9BQU8sRUFBRSxVQUFVO2dCQUNuQixLQUFLLEVBQUUsYUFBYTthQUNyQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7WUFFbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDeEUsSUFBSSxjQUFjLENBQUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNoRSxNQUFNO1lBQ1IsQ0FBQztZQUNELE9BQU8sQ0FBQyxLQUFLLENBQ1gsZ0NBQWdDLGNBQWMsQ0FBQyxVQUFVLEtBQUssY0FBYyxDQUFDLE1BQU0sYUFBYSxPQUFPLEdBQUcsQ0FDM0csQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsWUFBWSxHQUFJLENBQVcsRUFBRSxPQUFPLENBQUM7WUFDckMsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsWUFBWSxjQUFjLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDdkYsQ0FBQztRQUVELElBQUksT0FBTyxJQUFJLHlCQUF5QixFQUFFLENBQUM7WUFDekMsT0FBTyxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsT0FBTyxZQUFZLENBQUMsQ0FBQztZQUMvRSxNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksSUFBSSxHQUFHLGNBQWMsRUFBRSxVQUFVLEtBQUssY0FBYyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDL0YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLENBQUM7UUFFYixNQUFNLGNBQWMsR0FBRyxJQUFBLGtCQUFTLEVBQUMsSUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sR0FBRyxJQUFLLENBQUMsQ0FBQyxnQ0FBZ0M7UUFDaEcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsY0FBYyxRQUFRLENBQUMsQ0FBQztRQUN0RCxNQUFNLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsTUFBTSxjQUFjLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLGdCQUFnQixFQUFFLENBQUM7SUFDL0QsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3pDLEdBQUcsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO1FBQzNCLGVBQWUsRUFBRSxLQUFLLENBQUMsYUFBYTtLQUNyQyxDQUFDLENBQUM7SUFFSCxJQUFJLGFBQWEsQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsY0FBYyxLQUFLLG1CQUFtQixFQUFFLENBQUMsQ0FBQztJQUVqRix1QkFBdUIsRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQztZQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLE9BQU8sS0FBSyxDQUFDLENBQUM7WUFDMUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUN6QyxNQUFNLG1CQUFtQixHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQU0sQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sMEJBQTBCLEdBQUcsTUFBTSxJQUFBLG9CQUFLLEVBQUMsY0FBYyxFQUFFO2dCQUM3RCxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07Z0JBQ3pCLE1BQU0sRUFBRSxNQUFNO2dCQUNkLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLE9BQU8sRUFBRTtvQkFDUCxjQUFjLEVBQUUsa0JBQWtCO29CQUNsQyxHQUFHLFVBQVU7aUJBQ2Q7Z0JBQ0QsS0FBSyxFQUFFLGFBQWE7YUFDckIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBRXBELElBQUksMEJBQTBCLENBQUMsTUFBTSxJQUFJLEdBQUcsSUFBSSwwQkFBMEIsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7Z0JBQ3hGLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSwwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsQ0FBK0IsQ0FBQztnQkFFekYsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7b0JBQ3RGLGFBQWE7d0JBQ1g7MEJBQ2MsS0FBSyxDQUFDLFdBQVcsa0JBQWtCLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzNHLEdBQUcsQ0FBQztvQkFFSixPQUFPLEdBQUcseUJBQXlCLENBQUMsQ0FBQyxtQkFBbUI7b0JBQ3hELE1BQU07Z0JBQ1IsQ0FBQztnQkFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLHFDQUFxQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBRXRGLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxPQUFPLENBQUM7Z0JBRXhELEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FBQztvQkFDOUMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsT0FBTyxDQUFDLElBQUksT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQzt3QkFDOUUsU0FBUztvQkFDWCxDQUFDO29CQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLE9BQU8sQ0FBQyxJQUFJLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUM7b0JBQ3hGLE1BQU0sVUFBVSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQ3pDLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBTSxDQUFDLENBQUM7b0JBQ2pGLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBQSxvQkFBSyxFQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxhQUFhLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFO3dCQUN0RixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07d0JBQ3pCLE1BQU0sRUFBRSxPQUFPO3dCQUNmLE9BQU8sRUFBRTs0QkFDUCxjQUFjLEVBQUUsa0JBQWtCOzRCQUNsQyxHQUFHLFVBQVU7eUJBQ2Q7d0JBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUM7d0JBQzFDLEtBQUssRUFBRSxhQUFhO3FCQUNyQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7b0JBRW5ELE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO29CQUNoRSxJQUFJLGFBQWEsQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7d0JBQ2hDLGFBQWEsR0FBRyxzQkFBc0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLFlBQVksYUFBYSxDQUFDLFVBQVUsS0FBSyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUM7d0JBQzNJLE1BQU0sdUJBQXVCLENBQUMsQ0FBQyxxRUFBcUU7b0JBQ3RHLENBQUM7b0JBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BGLENBQUM7Z0JBRUQsT0FBTyxDQUFDLG1CQUFtQjtZQUM3QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxTQUFTLEdBQUcsTUFBTSwwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDMUQsYUFBYSxHQUFHLHdCQUF3QiwwQkFBMEIsQ0FBQyxNQUFNLE1BQU0sU0FBUyxFQUFFLENBQUM7Z0JBQzNGLE9BQU8sQ0FBQyxHQUFHLENBQUM7b0JBQ1YsT0FBTyxFQUFFLGtDQUFrQztvQkFDM0MsSUFBSSxFQUFFLDBCQUEwQixDQUFDLE1BQU07b0JBQ3ZDLElBQUksRUFBRSxTQUFTO2lCQUNoQixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF5QixDQUFXLEVBQUUsT0FBTyxhQUFhLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDcEYsYUFBYSxHQUFJLENBQVcsRUFBRSxPQUFPLENBQUM7UUFDeEMsQ0FBQztRQUVELElBQUksT0FBTyxJQUFJLHlCQUF5QixFQUFFLENBQUM7WUFDekMsYUFBYSxHQUFHLG1CQUFtQixPQUFPLDBCQUEwQixhQUFhLEVBQUUsQ0FBQztZQUNwRixNQUFNO1FBQ1IsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLENBQUM7UUFDYixNQUFNLGNBQWMsR0FBRyxJQUFBLGtCQUFTLEVBQUMsSUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sR0FBRyxJQUFLLENBQUMsQ0FBQyxrQkFBa0I7UUFDbEYsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsY0FBYyxRQUFRLENBQUMsQ0FBQztRQUNuRSxNQUFNLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsSUFBSSxtRUFBbUUsQ0FBQyxDQUFDO0FBQ3hHLENBQUMsQ0FBQztBQS9MVyxRQUFBLE9BQU8sV0ErTGxCO0FBRUYsS0FBSyxVQUFVLGdCQUFnQixDQUFDLEtBQTZCO0lBQzNELElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM5QixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLGlEQUFpRCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ3pGLE1BQU0sR0FBRyxHQUFHLElBQUksNkNBQW9CLEVBQUUsQ0FBQztJQUN2QyxNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQzdCLElBQUksOENBQXFCLENBQUM7UUFDeEIsUUFBUSxFQUFFLEtBQUssQ0FBQyxrQkFBa0I7S0FDbkMsQ0FBQyxDQUNILENBQUM7SUFFRixPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxRQUFRLENBQUMsSUFBSSxhQUFhLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzlGLE9BQU87UUFDTCxhQUFhLEVBQUUsVUFBVSxRQUFRLENBQUMsWUFBWSxFQUFFO0tBQ2pELENBQUM7QUFDSixDQUFDO0FBRUQsS0FBSyxVQUFVLEtBQUssQ0FBQyxNQUFjO0lBQ2pDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUMvRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMy0yMDI0IC0gUmVzdGF0ZSBTb2Z0d2FyZSwgSW5jLiwgUmVzdGF0ZSBHbWJIXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFJlc3RhdGUgU0RLIGZvciBOb2RlLmpzL1R5cGVTY3JpcHQsXG4gKiB3aGljaCBpcyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKlxuICogWW91IGNhbiBmaW5kIGEgY29weSBvZiB0aGUgbGljZW5zZSBpbiBmaWxlIExJQ0VOU0UgaW4gdGhlIHJvb3RcbiAqIGRpcmVjdG9yeSBvZiB0aGlzIHJlcG9zaXRvcnkgb3IgcGFja2FnZSwgb3IgYXRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXN0YXRlZGV2L3Nkay10eXBlc2NyaXB0L2Jsb2IvbWFpbi9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgSGFuZGxlciB9IGZyb20gXCJhd3MtbGFtYmRhL2hhbmRsZXJcIjtcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCB9IGZyb20gXCJhd3MtbGFtYmRhL3RyaWdnZXIvY2xvdWRmb3JtYXRpb24tY3VzdG9tLXJlc291cmNlXCI7XG5pbXBvcnQgZmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIjtcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IEdldFNlY3JldFZhbHVlQ29tbWFuZCwgU2VjcmV0c01hbmFnZXJDbGllbnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlclwiO1xuaW1wb3J0IHsgcmFuZG9tSW50IH0gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0ICogYXMgaHR0cHMgZnJvbSBcIm5vZGU6aHR0cHNcIjtcbmltcG9ydCAqIGFzIGh0dHAgZnJvbSBcIm5vZGU6aHR0cFwiO1xuXG4vKipcbiAqIEN1c3RvbSBSZXNvdXJjZSBldmVudCBzaGFwZSBmb3IgcmVnaXN0ZXJpbmcgUmVzdGF0ZSBMYW1iZGEgc2VydmljZSBoYW5kbGVycyB3aXRoIGEgUmVzdGF0ZSBlbnZpcm9ubWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25Qcm9wZXJ0aWVzIHtcbiAgLyoqIFdoZXJlIHRvIGZpbmQgdGhlIFJlc3RhdGUgYWRtaW4gZW5kcG9pbnQuICovXG4gIGFkbWluVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBzZXJ2aWNlIG5hbWUgdG8gbG9vayBmb3IgaW4gdGhlIGRlcGxveW1lbnQuIElmIG1vcmUgdGhhbiBvbmUgc2VydmljZSBpcyBiZWhpbmQgdGhlIHNhbWUgZW5kcG9pbnQsIGFueSBvbmVcbiAgICogc2hvdWxkIG1hdGNoLiBMZWF2ZSB1bnNldCB0byBza2lwIHRoZSBjaGVjay5cbiAgICovXG4gIHNlcnZpY2VQYXRoPzogc3RyaW5nO1xuXG4gIHNlcnZpY2VMYW1iZGFBcm4/OiBzdHJpbmc7XG5cbiAgaW52b2tlUm9sZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogQXV0aGVudGljYXRpb24gdG9rZW4gQVJOIHRvIHVzZSB3aXRoIHRoZSBhZG1pbiBlbmRwb2ludC4gVGhlIHNlY3JldCB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgYSBiZWFyZXIgdG9rZW4sIGlmIHNldC5cbiAgICovXG4gIGF1dGhUb2tlblNlY3JldEFybj86IHN0cmluZztcblxuICAvKiogTm90IHVzZWQgYnkgdGhlIGhhbmRsZXIsIHB1cmVseSB1c2VkIHRvIHRyaWNrIENsb3VkRm9ybWF0aW9uIHRvIHBlcmZvcm0gYW4gdXBkYXRlIHdoZW4gaXQgb3RoZXJ3aXNlIHdvdWxkIG5vdC4gKi9cbiAgY29uZmlndXJhdGlvblZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gbWFyayB0aGUgc2VydmljZSBhcyBwcml2YXRlLCBhbmQgbWFrZSBpdCB1bmF2YWlsYWJsZSB0byBiZSBjYWxsZWQgdmlhIFJlc3RhdGUgaW5ncmVzcy4gSWYgdGhlcmUgYXJlXG4gICAqIG11bHRpcGxlIHNlcnZpY2VzIHByb3ZpZGVkIGJ5IHRoZSBlbmRwb2ludCwgdGhleSB3aWxsIGFsbCBiZSBtYXJrZWQgYXMgc3BlY2lmaWVkLlxuICAgKi9cbiAgcHJpdmF0ZT86IFwidHJ1ZVwiIHwgXCJmYWxzZVwiO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHRydXN0IGFueSBjZXJ0aWZpY2F0ZSB3aGVuIGNvbm5lY3RpbmcgdG8gdGhlIGFkbWluIGVuZHBvaW50LiAqL1xuICBpbnNlY3VyZT86IFwidHJ1ZVwiIHwgXCJmYWxzZVwiO1xuXG4gIHJlbW92YWxQb2xpY3k/OiBjZGsuUmVtb3ZhbFBvbGljeTtcbn1cblxudHlwZSBSZWdpc3RlckRlcGxveW1lbnRSZXNwb25zZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgc2VydmljZXM6IHsgbmFtZTogc3RyaW5nOyByZXZpc2lvbjogbnVtYmVyOyBwdWJsaWM6IGJvb2xlYW4gfVtdO1xufTtcblxuY29uc3QgTUFYX0hFQUxUSF9DSEVDS19BVFRFTVBUUyA9IDU7IC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBxdWl0ZSBsb25nIHRvIGFsbG93IHNvbWUgdGltZSBmb3IgZmlyc3QtcnVuIEVDMiBhbmQgRG9ja2VyIGJvb3QgdXBcbmNvbnN0IE1BWF9SRUdJU1RSQVRJT05fQVRURU1QVFMgPSAzO1xuXG5jb25zdCBERVBMT1lNRU5UU19QQVRIID0gXCJkZXBsb3ltZW50c1wiO1xuY29uc3QgU0VSVklDRVNfUEFUSCA9IFwic2VydmljZXNcIjtcblxuLyoqXG4gKiBDdXN0b20gUmVzb3VyY2UgZXZlbnQgaGFuZGxlciBmb3IgUmVzdGF0ZSBzZXJ2aWNlIHJlZ2lzdHJhdGlvbi4gVGhpcyBoYW5kbGVyIGJhY2tzIHRoZSBjdXN0b20gcmVzb3VyY2VzIGNyZWF0ZWQgYnlcbiAqIHtAbGluayBTZXJ2aWNlRGVwbG95ZXJ9IHRvIGZhY2lsaXRhdGUgTGFtYmRhIHNlcnZpY2UgaGFuZGxlciBkaXNjb3ZlcnkuXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVyOiBIYW5kbGVyPENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCwgdm9pZD4gPSBhc3luYyBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc29sZS5sb2coeyBldmVudCB9KTtcblxuICBjb25zdCBwcm9wcyA9IGV2ZW50LlJlc291cmNlUHJvcGVydGllcyBhcyBSZWdpc3RyYXRpb25Qcm9wZXJ0aWVzO1xuXG4gIGNvbnN0IGh0dHBBZ2VudCA9IG5ldyBodHRwLkFnZW50KHtcbiAgICBrZWVwQWxpdmU6IHRydWUsXG4gIH0pO1xuICBjb25zdCBodHRwc0FnZW50ID0gbmV3IGh0dHBzLkFnZW50KHtcbiAgICBrZWVwQWxpdmU6IHRydWUsXG4gICAgcmVqZWN0VW5hdXRob3JpemVkOiBwcm9wcy5pbnNlY3VyZSAhPT0gXCJ0cnVlXCIsXG4gIH0pO1xuICBjb25zdCBhZ2VudFNlbGVjdG9yID0gKHVybDogVVJMKSA9PiB7XG4gICAgaWYgKHVybC5wcm90b2NvbCA9PSBcImh0dHA6XCIpIHtcbiAgICAgIHJldHVybiBodHRwQWdlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBodHRwc0FnZW50O1xuICAgIH1cbiAgfTtcblxuICBpZiAoZXZlbnQuUmVxdWVzdFR5cGUgPT09IFwiRGVsZXRlXCIpIHtcbiAgICAvLyBTaW5jZSB3ZSByZXRhaW4gb2xkZXIgTGFtYmRhIGhhbmRsZXIgdmVyc2lvbnMgb24gdXBkYXRlLCB3ZSBhbHNvIGxlYXZlIHRoZSByZWdpc3RlcmVkIHNlcnZpY2UgYWxvbmUuIFRoZXJlIG1heVxuICAgIC8vIGJlIHVuZmluaXNoZWQgaW52b2NhdGlvbnMgdGhhdCByZXF1aXJlIGl0OyBpbiB0aGUgZnV0dXJlIHdlIHdvdWxkIHdhbnQgdG8gaW5mb3JtIFJlc3RhdGUgdGhhdCB3ZSB3YW50IHRvXG4gICAgLy8gZGUtcmVnaXN0ZXIgdGhlIHNlcnZpY2UsIGFuZCB3YWl0IGZvciBSZXN0YXRlIHRvIGxldCB1cyBrbm93IHRoYXQgaXQgaXMgc2FmZSB0byBkZWxldGUgdGhlIGRlcGxveWVkIEZ1bmN0aW9uXG4gICAgLy8gdmVyc2lvbiBmcm9tIExhbWJkYS5cblxuICAgIC8vIGNvbnN0IHByb3BzID0gZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzIGFzIFJlZ2lzdHJhdGlvblByb3BlcnRpZXM7XG4gICAgLy8gaWYgKHByb3BzLnJlbW92YWxQb2xpY3kgPT09IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1kpIHtcbiAgICAvLyAgIGNvbnNvbGUubG9nKGBEZS1yZWdpc3RlcmluZyBzZXJ2aWNlICR7cHJvcHMuc2VydmljZUxhbWJkYUFybn1gKTtcbiAgICAvLyAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgLy8gICBjb25zdCBpZCA9IGJ0b2EocHJvcHMuc2VydmljZUxhbWJkYUFybiEpOyAvLyBUT0RPOiB3ZSBzaG91bGQgYmUgdHJlYXRpbmcgc2VydmljZSBpZHMgYXMgb3BhcXVlXG4gICAgLy8gICBjb25zdCBkZWxldGVDYWxsVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydChcInRpbWVvdXRcIiksIDVfMDAwKTtcbiAgICAvLyAgIGNvbnN0IGRlbGV0ZVJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7cHJvcHMuYWRtaW5Vcmx9LyR7REVQTE9ZTUVOVFNfUEFUSH0vJHtpZH0/Zm9yY2U9dHJ1ZWAsIHtcbiAgICAvLyAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAvLyAgICAgbWV0aG9kOiBcIkRFTEVURVwiLFxuICAgIC8vICAgICBhZ2VudDogYWdlbnRTZWxlY3RvcixcbiAgICAvLyAgIH0pLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KGRlbGV0ZUNhbGxUaW1lb3V0KSk7XG4gICAgLy9cbiAgICAvLyAgIGNvbnNvbGUubG9nKGBHb3QgZGVsZXRlIHJlc3BvbnNlIGJhY2s6ICR7ZGVsZXRlUmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgIC8vICAgaWYgKGRlbGV0ZVJlc3BvbnNlLnN0YXR1cyAhPSAyMDIpIHtcbiAgICAvLyAgICAgdGhyb3cgbmV3IEVycm9yKGBSZW1vdmluZyBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbGVkOiAke2RlbGV0ZVJlc3BvbnNlLnN0YXR1c1RleHR9ICgke2RlbGV0ZVJlc3BvbnNlLnN0YXR1c30pYCk7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgY29uc29sZS53YXJuKFwiRGUtcmVnaXN0ZXJpbmcgc2VydmljZXMgaXMgbm90IHN1cHBvcnRlZCBjdXJyZW50bHkuIFByZXZpb3VzIHZlcnNpb24gd2lsbCByZW1haW4gcmVnaXN0ZXJlZC5cIik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYXV0aEhlYWRlciA9IGF3YWl0IGNyZWF0ZUF1dGhIZWFkZXIocHJvcHMpO1xuXG4gIGxldCBhdHRlbXB0O1xuXG4gIGNvbnN0IGhlYWx0aENoZWNrVXJsID0gYCR7cHJvcHMuYWRtaW5Vcmx9L2hlYWx0aGA7XG5cbiAgYXR0ZW1wdCA9IDE7XG4gIGNvbnNvbGUubG9nKGBQZXJmb3JtaW5nIGhlYWx0aCBjaGVjayBhZ2FpbnN0OiAke2hlYWx0aENoZWNrVXJsfWApO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnNvbGUubG9nKGBNYWtpbmcgaGVhbHRoIGNoZWNrIHJlcXVlc3QgIyR7YXR0ZW1wdH0uLi5gKTtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IGhlYWx0aENoZWNrVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydChcInRpbWVvdXRcIiksIDVfMDAwKTtcbiAgICBsZXQgaGVhbHRoUmVzcG9uc2UgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGVycm9yTWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgaGVhbHRoUmVzcG9uc2UgPSBhd2FpdCBmZXRjaChoZWFsdGhDaGVja1VybCwge1xuICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICBoZWFkZXJzOiBhdXRoSGVhZGVyLFxuICAgICAgICBhZ2VudDogYWdlbnRTZWxlY3RvcixcbiAgICAgIH0pLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KGhlYWx0aENoZWNrVGltZW91dCkpO1xuXG4gICAgICBjb25zb2xlLmxvZyhgR290IGhlYWx0aCBjaGVjayByZXNwb25zZSBiYWNrOiAke2hlYWx0aFJlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgIGlmIChoZWFsdGhSZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmIGhlYWx0aFJlc3BvbnNlLnN0YXR1cyA8IDMwMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBSZXN0YXRlIGhlYWx0aCBjaGVjayBmYWlsZWQ6ICR7aGVhbHRoUmVzcG9uc2Uuc3RhdHVzVGV4dH0gKCR7aGVhbHRoUmVzcG9uc2Uuc3RhdHVzfTsgYXR0ZW1wdCAke2F0dGVtcHR9KWAsXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yTWVzc2FnZSA9IChlIGFzIEVycm9yKT8ubWVzc2FnZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFJlc3RhdGUgaGVhbHRoIGNoZWNrIGZhaWxlZDogXCIke2Vycm9yTWVzc2FnZX1cIiAoYXR0ZW1wdCAke2F0dGVtcHR9KWApO1xuICAgIH1cblxuICAgIGlmIChhdHRlbXB0ID49IE1BWF9IRUFMVEhfQ0hFQ0tfQVRURU1QVFMpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFkbWluIHNlcnZpY2UgaGVhbHRoIGNoZWNrIGZhaWxpbmcgYWZ0ZXIgJHthdHRlbXB0fSBhdHRlbXB0cy5gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UgPz8gYCR7aGVhbHRoUmVzcG9uc2U/LnN0YXR1c1RleHR9ICgke2hlYWx0aFJlc3BvbnNlPy5zdGF0dXN9KWApO1xuICAgIH1cbiAgICBhdHRlbXB0ICs9IDE7XG5cbiAgICBjb25zdCB3YWl0VGltZU1pbGxpcyA9IHJhbmRvbUludCgyXzAwMCkgKyAyICoqIGF0dGVtcHQgKiAxXzAwMDsgLy8gM3MgLT4gNnMgLT4gMTBzIC0+IDE4cyAtPiAzNHNcbiAgICBjb25zb2xlLmxvZyhgUmV0cnlpbmcgYWZ0ZXIgJHt3YWl0VGltZU1pbGxpc30gbXMuLi5gKTtcbiAgICBhd2FpdCBzbGVlcCh3YWl0VGltZU1pbGxpcyk7XG4gIH1cblxuICBjb25zdCBkZXBsb3ltZW50c1VybCA9IGAke3Byb3BzLmFkbWluVXJsfS8ke0RFUExPWU1FTlRTX1BBVEh9YDtcbiAgY29uc3QgcmVnaXN0cmF0aW9uUmVxdWVzdCA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICBhcm46IHByb3BzLnNlcnZpY2VMYW1iZGFBcm4sXG4gICAgYXNzdW1lX3JvbGVfYXJuOiBwcm9wcy5pbnZva2VSb2xlQXJuLFxuICB9KTtcblxuICBsZXQgZmFpbHVyZVJlYXNvbjtcbiAgYXR0ZW1wdCA9IDE7XG4gIGNvbnNvbGUubG9nKGBSZWdpc3RlcmluZyBzZXJ2aWNlcyBhdCAke2RlcGxveW1lbnRzVXJsfTogJHtyZWdpc3RyYXRpb25SZXF1ZXN0fWApO1xuXG4gIHJlZ2lzdHJhdGlvbl9yZXRyeV9sb29wOiB3aGlsZSAodHJ1ZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmxvZyhgTWFraW5nIHJlZ2lzdHJhdGlvbiByZXF1ZXN0ICMke2F0dGVtcHR9Li4uYCk7XG4gICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgY29uc3QgcmVnaXN0ZXJDYWxsVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydChcInRpbWVvdXRcIiksIDEwXzAwMCk7XG4gICAgICBjb25zdCByZWdpc3RlckRlcGxveW1lbnRSZXNwb25zZSA9IGF3YWl0IGZldGNoKGRlcGxveW1lbnRzVXJsLCB7XG4gICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGJvZHk6IHJlZ2lzdHJhdGlvblJlcXVlc3QsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAuLi5hdXRoSGVhZGVyLFxuICAgICAgICB9LFxuICAgICAgICBhZ2VudDogYWdlbnRTZWxlY3RvcixcbiAgICAgIH0pLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KHJlZ2lzdGVyQ2FsbFRpbWVvdXQpKTtcblxuICAgICAgaWYgKHJlZ2lzdGVyRGVwbG95bWVudFJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiYgcmVnaXN0ZXJEZXBsb3ltZW50UmVzcG9uc2Uuc3RhdHVzIDwgMzAwKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IHJlZ2lzdGVyRGVwbG95bWVudFJlc3BvbnNlLmpzb24oKSkgYXMgUmVnaXN0ZXJEZXBsb3ltZW50UmVzcG9uc2U7XG5cbiAgICAgICAgaWYgKHByb3BzLnNlcnZpY2VQYXRoICYmICFyZXNwb25zZS5zZXJ2aWNlcy5maW5kKChzKSA9PiBzLm5hbWUgPT09IHByb3BzLnNlcnZpY2VQYXRoKSkge1xuICAgICAgICAgIGZhaWx1cmVSZWFzb24gPVxuICAgICAgICAgICAgYFwiUmVnaXN0cmF0aW9uIHN1Y2NlZWRlZCwgYnV0IG5vbmUgdGhlIHNlcnZpY2VzIG5hbWVzIGluIHRoZSBkZXBsb3ltZW50IG1hdGNoZWQgdGhlIHNwZWNpZmllZCBuYW1lLiBcIiArIFxuICAgICAgICAgICAgXCJFeHBlY3RlZCBcXFwiJHtwcm9wcy5zZXJ2aWNlUGF0aH1cXFwiXCIsIGdvdCBiYWNrOiBbYCArIHJlc3BvbnNlLnNlcnZpY2VzLm1hcCgoc3ZjKSA9PiBzdmM/Lm5hbWUpLmpvaW4oXCIsIFwiKTtcbiAgICAgICAgICBgXWA7XG5cbiAgICAgICAgICBhdHRlbXB0ID0gTUFYX1JFR0lTVFJBVElPTl9BVFRFTVBUUzsgLy8gZG9uJ3QgcmV0cnkgdGhpc1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coXCJTdWNjZXNzZnVsIHJlZ2lzdHJhdGlvbiEgU2VydmljZXM6IFwiLCBKU09OLnN0cmluZ2lmeShyZXNwb25zZS5zZXJ2aWNlcykpO1xuXG4gICAgICAgIGNvbnN0IGlzUHVibGljID0gKHByb3BzLnByaXZhdGUgPz8gXCJmYWxzZVwiKSA9PT0gXCJmYWxzZVwiO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc2VydmljZSBvZiByZXNwb25zZS5zZXJ2aWNlcyA/PyBbXSkge1xuICAgICAgICAgIGlmIChzZXJ2aWNlLnB1YmxpYyA9PT0gaXNQdWJsaWMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTZXJ2aWNlICR7c2VydmljZS5uYW1lfSBpcyAke2lzUHVibGljID8gXCJwdWJsaWNcIiA6IFwicHJpdmF0ZVwifS5gKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnNvbGUubG9nKGBNYXJraW5nIHNlcnZpY2UgJHtzZXJ2aWNlLm5hbWV9IGFzICR7aXNQdWJsaWMgPyBcInB1YmxpY1wiIDogXCJwcml2YXRlXCJ9Li4uYCk7XG4gICAgICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgICBjb25zdCBwcml2YXRlQ2FsbFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoXCJ0aW1lb3V0XCIpLCAxMF8wMDApO1xuICAgICAgICAgIGNvbnN0IHBhdGNoUmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtwcm9wcy5hZG1pblVybH0vJHtTRVJWSUNFU19QQVRIfS8ke3NlcnZpY2UubmFtZX1gLCB7XG4gICAgICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICAgICAgbWV0aG9kOiBcIlBBVENIXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAuLi5hdXRoSGVhZGVyLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgcHVibGljOiBpc1B1YmxpYyB9KSxcbiAgICAgICAgICAgIGFnZW50OiBhZ2VudFNlbGVjdG9yLFxuICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KHByaXZhdGVDYWxsVGltZW91dCkpO1xuXG4gICAgICAgICAgY29uc29sZS5sb2coYEdvdCBwYXRjaCByZXNwb25zZSBiYWNrOiAke3BhdGNoUmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgICAgICAgIGlmIChwYXRjaFJlc3BvbnNlLnN0YXR1cyAhPSAyMDApIHtcbiAgICAgICAgICAgIGZhaWx1cmVSZWFzb24gPSBgTWFya2luZyBzZXJ2aWNlIGFzICR7cHJvcHMucHJpdmF0ZSA/IFwicHJpdmF0ZVwiIDogXCJwdWJsaWNcIn0gZmFpbGVkOiAke3BhdGNoUmVzcG9uc2Uuc3RhdHVzVGV4dH0gKCR7cGF0Y2hSZXNwb25zZS5zdGF0dXN9KWA7XG4gICAgICAgICAgICBicmVhayByZWdpc3RyYXRpb25fcmV0cnlfbG9vcDsgLy8gZG9uJ3QgdGhyb3cgaW1tZWRpYXRlbHkgLSBsZXQgcmV0cnkgbG9vcCBkZWNpZGUgd2hldGhlciB0byBhYm9ydCBzXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc29sZS5sb2coYFN1Y2Nlc3NmdWxseSBtYXJrZWQgc2VydmljZSBhcyAke2lzUHVibGljID8gXCJwdWJsaWNcIiA6IFwicHJpdmF0ZVwifS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjsgLy8gT3ZlcmFsbCBzdWNjZXNzIVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyb3JCb2R5ID0gYXdhaXQgcmVnaXN0ZXJEZXBsb3ltZW50UmVzcG9uc2UudGV4dCgpO1xuICAgICAgICBmYWlsdXJlUmVhc29uID0gYFJlZ2lzdHJhdGlvbiBmYWlsZWQgKCR7cmVnaXN0ZXJEZXBsb3ltZW50UmVzcG9uc2Uuc3RhdHVzfSk6ICR7ZXJyb3JCb2R5fWA7XG4gICAgICAgIGNvbnNvbGUubG9nKHtcbiAgICAgICAgICBtZXNzYWdlOiBgR290IGVycm9yIHJlc3BvbnNlIGZyb20gUmVzdGF0ZS5gLFxuICAgICAgICAgIGNvZGU6IHJlZ2lzdGVyRGVwbG95bWVudFJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICBib2R5OiBlcnJvckJvZHksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpPy5tZXNzYWdlfSAoYXR0ZW1wdCAke2F0dGVtcHR9KWApO1xuICAgICAgZmFpbHVyZVJlYXNvbiA9IChlIGFzIEVycm9yKT8ubWVzc2FnZTtcbiAgICB9XG5cbiAgICBpZiAoYXR0ZW1wdCA+PSBNQVhfUkVHSVNUUkFUSU9OX0FUVEVNUFRTKSB7XG4gICAgICBmYWlsdXJlUmVhc29uID0gYEdpdmluZyB1cCBhZnRlciAke2F0dGVtcHR9IGF0dGVtcHRzLiBMYXN0IGVycm9yOiAke2ZhaWx1cmVSZWFzb259YDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBhdHRlbXB0ICs9IDE7XG4gICAgY29uc3Qgd2FpdFRpbWVNaWxsaXMgPSByYW5kb21JbnQoMl8wMDApICsgMiAqKiBhdHRlbXB0ICogMV8wMDA7IC8vIDNzIC0+IDZzIC0+IDEwc1xuICAgIGNvbnNvbGUubG9nKGBSZXRyeWluZyByZWdpc3RyYXRpb24gYWZ0ZXIgJHt3YWl0VGltZU1pbGxpc30gbXMuLi5gKTtcbiAgICBhd2FpdCBzbGVlcCh3YWl0VGltZU1pbGxpcyk7XG4gIH1cblxuICBjb25zb2xlLmVycm9yKGZhaWx1cmVSZWFzb24pO1xuICB0aHJvdyBuZXcgRXJyb3IoZmFpbHVyZVJlYXNvbiA/PyBcIlJlc3RhdGUgc2VydmljZSByZWdpc3RyYXRpb24gZmFpbGVkLiBQbGVhc2Ugc2VlIGxvZ3MgZm9yIGRldGFpbHMuXCIpO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXV0aEhlYWRlcihwcm9wczogUmVnaXN0cmF0aW9uUHJvcGVydGllcyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBpZiAoIXByb3BzLmF1dGhUb2tlblNlY3JldEFybikge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKGBVc2luZyBiZWFyZXIgYXV0aGVudGljYXRpb24gdG9rZW4gZnJvbSBzZWNyZXQgJHtwcm9wcy5hdXRoVG9rZW5TZWNyZXRBcm59YCk7XG4gIGNvbnN0IHNzbSA9IG5ldyBTZWNyZXRzTWFuYWdlckNsaWVudCgpO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNzbS5zZW5kKFxuICAgIG5ldyBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQoe1xuICAgICAgU2VjcmV0SWQ6IHByb3BzLmF1dGhUb2tlblNlY3JldEFybixcbiAgICB9KSxcbiAgKTtcblxuICBjb25zb2xlLmxvZyhgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCBzZWNyZXQgXCIke3Jlc3BvbnNlLk5hbWV9XCIgdmVyc2lvbiAke3Jlc3BvbnNlLlZlcnNpb25JZH1gKTtcbiAgcmV0dXJuIHtcbiAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7cmVzcG9uc2UuU2VjcmV0U3RyaW5nfWAsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNsZWVwKG1pbGxpczogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtaWxsaXMpKTtcbn1cbiJdfQ==
|
|
249
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcmVzdGF0ZS1jb25zdHJ1Y3RzL3JlZ2lzdGVyLXNlcnZpY2UtaGFuZGxlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7OztHQVNHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJSCw0REFBK0I7QUFDL0IsNEVBQThGO0FBQzlGLG1DQUFtQztBQUNuQyxrREFBb0M7QUFDcEMsZ0RBQWtDO0FBNENsQyxNQUFNLHlCQUF5QixHQUFHLENBQUMsQ0FBQyxDQUFDLDJGQUEyRjtBQUNoSSxNQUFNLHlCQUF5QixHQUFHLENBQUMsQ0FBQztBQUVwQyxNQUFNLGdCQUFnQixHQUFHLGFBQWEsQ0FBQztBQUN2QyxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUM7QUFFakM7OztHQUdHO0FBQ0ksTUFBTSxPQUFPLEdBQXFELEtBQUssV0FBVyxLQUFLO0lBQzVGLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRXZCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxrQkFBNEMsQ0FBQztJQUVqRSxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDL0IsU0FBUyxFQUFFLElBQUk7S0FDaEIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ2pDLFNBQVMsRUFBRSxJQUFJO1FBQ2Ysa0JBQWtCLEVBQUUsS0FBSyxDQUFDLFFBQVEsS0FBSyxNQUFNO0tBQzlDLENBQUMsQ0FBQztJQUNILE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBUSxFQUFFLEVBQUU7UUFDakMsSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzVCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxV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QUErQixjQUFjLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxJQUFJLG1FQUFtRSxDQUFDLENBQUM7QUFDeEcsQ0FBQyxDQUFDO0FBaE1XLFFBQUEsT0FBTyxXQWdNbEI7QUFFRixLQUFLLFVBQVUsZ0JBQWdCLENBQUMsS0FBNkI7SUFDM0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzlCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsaURBQWlELEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7SUFDekYsTUFBTSxHQUFHLEdBQUcsSUFBSSw2Q0FBb0IsRUFBRSxDQUFDO0lBQ3ZDLE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FDN0IsSUFBSSw4Q0FBcUIsQ0FBQztRQUN4QixRQUFRLEVBQUUsS0FBSyxDQUFDLGtCQUFrQjtLQUNuQyxDQUFDLENBQ0gsQ0FBQztJQUVGLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLFFBQVEsQ0FBQyxJQUFJLGFBQWEsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDOUYsT0FBTztRQUNMLGFBQWEsRUFBRSxVQUFVLFFBQVEsQ0FBQyxZQUFZLEVBQUU7S0FDakQsQ0FBQztBQUNKLENBQUM7QUFFRCxLQUFLLFVBQVUsS0FBSyxDQUFDLE1BQWM7SUFDakMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQy9ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIzLTIwMjUgLSBSZXN0YXRlIFNvZnR3YXJlLCBJbmMuLCBSZXN0YXRlIEdtYkhcbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUmVzdGF0ZSBDREsgQ29uc3RydWN0IExpYnJhcnksXG4gKiB3aGljaCBpcyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKlxuICogWW91IGNhbiBmaW5kIGEgY29weSBvZiB0aGUgbGljZW5zZSBpbiBmaWxlIExJQ0VOU0UgaW4gdGhlIHJvb3RcbiAqIGRpcmVjdG9yeSBvZiB0aGlzIHJlcG9zaXRvcnkgb3IgcGFja2FnZSwgb3IgYXRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXN0YXRlZGV2L3Nkay10eXBlc2NyaXB0L2Jsb2IvbWFpbi9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgSGFuZGxlciB9IGZyb20gXCJhd3MtbGFtYmRhL2hhbmRsZXJcIjtcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCB9IGZyb20gXCJhd3MtbGFtYmRhL3RyaWdnZXIvY2xvdWRmb3JtYXRpb24tY3VzdG9tLXJlc291cmNlXCI7XG5pbXBvcnQgZmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIjtcbmltcG9ydCB7IEdldFNlY3JldFZhbHVlQ29tbWFuZCwgU2VjcmV0c01hbmFnZXJDbGllbnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlclwiO1xuaW1wb3J0IHsgcmFuZG9tSW50IH0gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0ICogYXMgaHR0cHMgZnJvbSBcIm5vZGU6aHR0cHNcIjtcbmltcG9ydCAqIGFzIGh0dHAgZnJvbSBcIm5vZGU6aHR0cFwiO1xuXG4vKipcbiAqIEN1c3RvbSBSZXNvdXJjZSBldmVudCBzaGFwZSBmb3IgcmVnaXN0ZXJpbmcgUmVzdGF0ZSBMYW1iZGEgc2VydmljZSBoYW5kbGVycyB3aXRoIGEgUmVzdGF0ZSBlbnZpcm9ubWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25Qcm9wZXJ0aWVzIHtcbiAgLyoqIFdoZXJlIHRvIGZpbmQgdGhlIFJlc3RhdGUgYWRtaW4gZW5kcG9pbnQuICovXG4gIGFkbWluVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBzZXJ2aWNlIG5hbWUgdG8gbG9vayBmb3IgaW4gdGhlIGRlcGxveW1lbnQuIElmIG1vcmUgdGhhbiBvbmUgc2VydmljZSBpcyBiZWhpbmQgdGhlIHNhbWUgZW5kcG9pbnQsIGFueSBvbmVcbiAgICogc2hvdWxkIG1hdGNoLiBMZWF2ZSB1bnNldCB0byBza2lwIHRoZSBjaGVjay5cbiAgICovXG4gIHNlcnZpY2VQYXRoPzogc3RyaW5nO1xuXG4gIHNlcnZpY2VMYW1iZGFBcm4/OiBzdHJpbmc7XG5cbiAgaW52b2tlUm9sZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogQXV0aGVudGljYXRpb24gdG9rZW4gQVJOIHRvIHVzZSB3aXRoIHRoZSBhZG1pbiBlbmRwb2ludC4gVGhlIHNlY3JldCB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgYSBiZWFyZXIgdG9rZW4sIGlmIHNldC5cbiAgICovXG4gIGF1dGhUb2tlblNlY3JldEFybj86IHN0cmluZztcblxuICAvKiogTm90IHVzZWQgYnkgdGhlIGhhbmRsZXIsIHB1cmVseSB1c2VkIHRvIHRyaWNrIENsb3VkRm9ybWF0aW9uIHRvIHBlcmZvcm0gYW4gdXBkYXRlIHdoZW4gaXQgb3RoZXJ3aXNlIHdvdWxkIG5vdC4gKi9cbiAgY29uZmlndXJhdGlvblZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gbWFyayB0aGUgc2VydmljZSBhcyBwcml2YXRlLCBhbmQgbWFrZSBpdCB1bmF2YWlsYWJsZSB0byBiZSBjYWxsZWQgdmlhIFJlc3RhdGUgaW5ncmVzcy4gSWYgdGhlcmUgYXJlXG4gICAqIG11bHRpcGxlIHNlcnZpY2VzIHByb3ZpZGVkIGJ5IHRoZSBlbmRwb2ludCwgdGhleSB3aWxsIGFsbCBiZSBtYXJrZWQgYXMgc3BlY2lmaWVkLlxuICAgKi9cbiAgcHJpdmF0ZT86IFwidHJ1ZVwiIHwgXCJmYWxzZVwiO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHRydXN0IGFueSBjZXJ0aWZpY2F0ZSB3aGVuIGNvbm5lY3RpbmcgdG8gdGhlIGFkbWluIGVuZHBvaW50LiAqL1xuICBpbnNlY3VyZT86IFwidHJ1ZVwiIHwgXCJmYWxzZVwiO1xuXG4gIC8vIHJlbW92YWxQb2xpY3k/OiBzdHJpbmc7XG59XG5cbnR5cGUgUmVnaXN0ZXJEZXBsb3ltZW50UmVzcG9uc2UgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHNlcnZpY2VzOiB7IG5hbWU6IHN0cmluZzsgcmV2aXNpb246IG51bWJlcjsgcHVibGljOiBib29sZWFuIH1bXTtcbn07XG5cbmNvbnN0IE1BWF9IRUFMVEhfQ0hFQ0tfQVRURU1QVFMgPSA1OyAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgcXVpdGUgbG9uZyB0byBhbGxvdyBzb21lIHRpbWUgZm9yIGZpcnN0LXJ1biBFQzIgYW5kIERvY2tlciBib290IHVwXG5jb25zdCBNQVhfUkVHSVNUUkFUSU9OX0FUVEVNUFRTID0gMztcblxuY29uc3QgREVQTE9ZTUVOVFNfUEFUSCA9IFwiZGVwbG95bWVudHNcIjtcbmNvbnN0IFNFUlZJQ0VTX1BBVEggPSBcInNlcnZpY2VzXCI7XG5cbi8qKlxuICogQ3VzdG9tIFJlc291cmNlIGV2ZW50IGhhbmRsZXIgZm9yIFJlc3RhdGUgc2VydmljZSByZWdpc3RyYXRpb24uIFRoaXMgaGFuZGxlciBiYWNrcyB0aGUgY3VzdG9tIHJlc291cmNlcyBjcmVhdGVkIGJ5XG4gKiB7QGxpbmsgU2VydmljZURlcGxveWVyfSB0byBmYWNpbGl0YXRlIExhbWJkYSBzZXJ2aWNlIGhhbmRsZXIgZGlzY292ZXJ5LlxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlcjogSGFuZGxlcjxDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQsIHZvaWQ+ID0gYXN5bmMgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGNvbnNvbGUubG9nKHsgZXZlbnQgfSk7XG5cbiAgY29uc3QgcHJvcHMgPSBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMgYXMgUmVnaXN0cmF0aW9uUHJvcGVydGllcztcblxuICBjb25zdCBodHRwQWdlbnQgPSBuZXcgaHR0cC5BZ2VudCh7XG4gICAga2VlcEFsaXZlOiB0cnVlLFxuICB9KTtcbiAgY29uc3QgaHR0cHNBZ2VudCA9IG5ldyBodHRwcy5BZ2VudCh7XG4gICAga2VlcEFsaXZlOiB0cnVlLFxuICAgIHJlamVjdFVuYXV0aG9yaXplZDogcHJvcHMuaW5zZWN1cmUgIT09IFwidHJ1ZVwiLFxuICB9KTtcbiAgY29uc3QgYWdlbnRTZWxlY3RvciA9ICh1cmw6IFVSTCkgPT4ge1xuICAgIGlmICh1cmwucHJvdG9jb2wgPT0gXCJodHRwOlwiKSB7XG4gICAgICByZXR1cm4gaHR0cEFnZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaHR0cHNBZ2VudDtcbiAgICB9XG4gIH07XG5cbiAgaWYgKGV2ZW50LlJlcXVlc3RUeXBlID09PSBcIkRlbGV0ZVwiKSB7XG4gICAgLy8gU2luY2Ugd2UgcmV0YWluIG9sZGVyIExhbWJkYSBoYW5kbGVyIHZlcnNpb25zIG9uIHVwZGF0ZSwgd2UgYWxzbyBsZWF2ZSB0aGUgcmVnaXN0ZXJlZCBzZXJ2aWNlIGFsb25lLiBUaGVyZSBtYXlcbiAgICAvLyBiZSB1bmZpbmlzaGVkIGludm9jYXRpb25zIHRoYXQgcmVxdWlyZSBpdDsgaW4gdGhlIGZ1dHVyZSB3ZSB3b3VsZCB3YW50IHRvIGluZm9ybSBSZXN0YXRlIHRoYXQgd2Ugd2FudCB0b1xuICAgIC8vIGRlLXJlZ2lzdGVyIHRoZSBzZXJ2aWNlLCBhbmQgd2FpdCBmb3IgUmVzdGF0ZSB0byBsZXQgdXMga25vdyB0aGF0IGl0IGlzIHNhZmUgdG8gZGVsZXRlIHRoZSBkZXBsb3llZCBGdW5jdGlvblxuICAgIC8vIHZlcnNpb24gZnJvbSBMYW1iZGEuXG5cbiAgICAvLyBjb25zdCBwcm9wcyA9IGV2ZW50LlJlc291cmNlUHJvcGVydGllcyBhcyBSZWdpc3RyYXRpb25Qcm9wZXJ0aWVzO1xuICAgIC8vIGlmIChwcm9wcy5yZW1vdmFsUG9saWN5ID09PSBjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKSB7XG4gICAgLy8gICBjb25zb2xlLmxvZyhgRGUtcmVnaXN0ZXJpbmcgc2VydmljZSAke3Byb3BzLnNlcnZpY2VMYW1iZGFBcm59YCk7XG4gICAgLy8gICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIC8vICAgY29uc3QgaWQgPSBidG9hKHByb3BzLnNlcnZpY2VMYW1iZGFBcm4hKTsgLy8gVE9ETzogd2Ugc2hvdWxkIGJlIHRyZWF0aW5nIHNlcnZpY2UgaWRzIGFzIG9wYXF1ZVxuICAgIC8vICAgY29uc3QgZGVsZXRlQ2FsbFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoXCJ0aW1lb3V0XCIpLCA1XzAwMCk7XG4gICAgLy8gICBjb25zdCBkZWxldGVSZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke3Byb3BzLmFkbWluVXJsfS8ke0RFUExPWU1FTlRTX1BBVEh9LyR7aWR9P2ZvcmNlPXRydWVgLCB7XG4gICAgLy8gICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgLy8gICAgIG1ldGhvZDogXCJERUxFVEVcIixcbiAgICAvLyAgICAgYWdlbnQ6IGFnZW50U2VsZWN0b3IsXG4gICAgLy8gICB9KS5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dChkZWxldGVDYWxsVGltZW91dCkpO1xuICAgIC8vXG4gICAgLy8gICBjb25zb2xlLmxvZyhgR290IGRlbGV0ZSByZXNwb25zZSBiYWNrOiAke2RlbGV0ZVJlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAvLyAgIGlmIChkZWxldGVSZXNwb25zZS5zdGF0dXMgIT0gMjAyKSB7XG4gICAgLy8gICAgIHRocm93IG5ldyBFcnJvcihgUmVtb3Zpbmcgc2VydmljZSBkZXBsb3ltZW50IGZhaWxlZDogJHtkZWxldGVSZXNwb25zZS5zdGF0dXNUZXh0fSAoJHtkZWxldGVSZXNwb25zZS5zdGF0dXN9KWApO1xuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGNvbnNvbGUud2FybihcIkRlLXJlZ2lzdGVyaW5nIHNlcnZpY2VzIGlzIG5vdCBzdXBwb3J0ZWQgY3VycmVudGx5LiBQcmV2aW91cyB2ZXJzaW9uIHdpbGwgcmVtYWluIHJlZ2lzdGVyZWQuXCIpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGF1dGhIZWFkZXIgPSBhd2FpdCBjcmVhdGVBdXRoSGVhZGVyKHByb3BzKTtcblxuICBsZXQgYXR0ZW1wdDtcblxuICBjb25zdCBoZWFsdGhDaGVja1VybCA9IGAke3Byb3BzLmFkbWluVXJsfS9oZWFsdGhgO1xuXG4gIGF0dGVtcHQgPSAxO1xuICBjb25zb2xlLmxvZyhgUGVyZm9ybWluZyBoZWFsdGggY2hlY2sgYWdhaW5zdDogJHtoZWFsdGhDaGVja1VybH1gKTtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zb2xlLmxvZyhgTWFraW5nIGhlYWx0aCBjaGVjayByZXF1ZXN0ICMke2F0dGVtcHR9Li4uYCk7XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCBoZWFsdGhDaGVja1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoXCJ0aW1lb3V0XCIpLCA1XzAwMCk7XG4gICAgbGV0IGhlYWx0aFJlc3BvbnNlID0gdW5kZWZpbmVkO1xuICAgIGxldCBlcnJvck1lc3NhZ2UgPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGhlYWx0aFJlc3BvbnNlID0gYXdhaXQgZmV0Y2goaGVhbHRoQ2hlY2tVcmwsIHtcbiAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgaGVhZGVyczogYXV0aEhlYWRlcixcbiAgICAgICAgYWdlbnQ6IGFnZW50U2VsZWN0b3IsXG4gICAgICB9KS5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dChoZWFsdGhDaGVja1RpbWVvdXQpKTtcblxuICAgICAgY29uc29sZS5sb2coYEdvdCBoZWFsdGggY2hlY2sgcmVzcG9uc2UgYmFjazogJHtoZWFsdGhSZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgICBpZiAoaGVhbHRoUmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJiBoZWFsdGhSZXNwb25zZS5zdGF0dXMgPCAzMDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgUmVzdGF0ZSBoZWFsdGggY2hlY2sgZmFpbGVkOiAke2hlYWx0aFJlc3BvbnNlLnN0YXR1c1RleHR9ICgke2hlYWx0aFJlc3BvbnNlLnN0YXR1c307IGF0dGVtcHQgJHthdHRlbXB0fSlgLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSAoZSBhcyBFcnJvcik/Lm1lc3NhZ2U7XG4gICAgICBjb25zb2xlLmVycm9yKGBSZXN0YXRlIGhlYWx0aCBjaGVjayBmYWlsZWQ6IFwiJHtlcnJvck1lc3NhZ2V9XCIgKGF0dGVtcHQgJHthdHRlbXB0fSlgKTtcbiAgICB9XG5cbiAgICBpZiAoYXR0ZW1wdCA+PSBNQVhfSEVBTFRIX0NIRUNLX0FUVEVNUFRTKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBBZG1pbiBzZXJ2aWNlIGhlYWx0aCBjaGVjayBmYWlsaW5nIGFmdGVyICR7YXR0ZW1wdH0gYXR0ZW1wdHMuYCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlID8/IGAke2hlYWx0aFJlc3BvbnNlPy5zdGF0dXNUZXh0fSAoJHtoZWFsdGhSZXNwb25zZT8uc3RhdHVzfSlgKTtcbiAgICB9XG4gICAgYXR0ZW1wdCArPSAxO1xuXG4gICAgY29uc3Qgd2FpdFRpbWVNaWxsaXMgPSByYW5kb21JbnQoMl8wMDApICsgMiAqKiBhdHRlbXB0ICogMV8wMDA7IC8vIDNzIC0+IDZzIC0+IDEwcyAtPiAxOHMgLT4gMzRzXG4gICAgY29uc29sZS5sb2coYFJldHJ5aW5nIGFmdGVyICR7d2FpdFRpbWVNaWxsaXN9IG1zLi4uYCk7XG4gICAgYXdhaXQgc2xlZXAod2FpdFRpbWVNaWxsaXMpO1xuICB9XG5cbiAgY29uc3QgZGVwbG95bWVudHNVcmwgPSBgJHtwcm9wcy5hZG1pblVybH0vJHtERVBMT1lNRU5UU19QQVRIfWA7XG4gIGNvbnN0IHJlZ2lzdHJhdGlvblJlcXVlc3QgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgYXJuOiBwcm9wcy5zZXJ2aWNlTGFtYmRhQXJuLFxuICAgIGFzc3VtZV9yb2xlX2FybjogcHJvcHMuaW52b2tlUm9sZUFybixcbiAgfSk7XG5cbiAgbGV0IGZhaWx1cmVSZWFzb247XG4gIGF0dGVtcHQgPSAxO1xuICBjb25zb2xlLmxvZyhgUmVnaXN0ZXJpbmcgc2VydmljZXMgYXQgJHtkZXBsb3ltZW50c1VybH06ICR7cmVnaXN0cmF0aW9uUmVxdWVzdH1gKTtcblxuICByZWdpc3RyYXRpb25fcmV0cnlfbG9vcDogd2hpbGUgKHRydWUpIHtcbiAgICB0cnkge1xuICAgICAgY29uc29sZS5sb2coYE1ha2luZyByZWdpc3RyYXRpb24gcmVxdWVzdCAjJHthdHRlbXB0fS4uLmApO1xuICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyQ2FsbFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoXCJ0aW1lb3V0XCIpLCAxMF8wMDApO1xuICAgICAgY29uc3QgcmVnaXN0ZXJEZXBsb3ltZW50UmVzcG9uc2UgPSBhd2FpdCBmZXRjaChkZXBsb3ltZW50c1VybCwge1xuICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBib2R5OiByZWdpc3RyYXRpb25SZXF1ZXN0LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgLi4uYXV0aEhlYWRlcixcbiAgICAgICAgfSxcbiAgICAgICAgYWdlbnQ6IGFnZW50U2VsZWN0b3IsXG4gICAgICB9KS5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dChyZWdpc3RlckNhbGxUaW1lb3V0KSk7XG5cbiAgICAgIGlmIChyZWdpc3RlckRlcGxveW1lbnRSZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmIHJlZ2lzdGVyRGVwbG95bWVudFJlc3BvbnNlLnN0YXR1cyA8IDMwMCkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IChhd2FpdCByZWdpc3RlckRlcGxveW1lbnRSZXNwb25zZS5qc29uKCkpIGFzIFJlZ2lzdGVyRGVwbG95bWVudFJlc3BvbnNlO1xuXG4gICAgICAgIGlmIChwcm9wcy5zZXJ2aWNlUGF0aCAmJiAhcmVzcG9uc2Uuc2VydmljZXMuZmluZCgocykgPT4gcy5uYW1lID09PSBwcm9wcy5zZXJ2aWNlUGF0aCkpIHtcbiAgICAgICAgICBmYWlsdXJlUmVhc29uID1cbiAgICAgICAgICAgIFwiUmVnaXN0cmF0aW9uIHN1Y2NlZWRlZCwgYnV0IG5vbmUgb2YgdGhlIHNlcnZpY2UgbmFtZXMgaW4gdGhlIGRlcGxveW1lbnQgbWF0Y2ggdGhlIHNwZWNpZmllZCBuYW1lLiBcIiArXG4gICAgICAgICAgICBgRXhwZWN0ZWQgXCIke3Byb3BzLnNlcnZpY2VQYXRofVwiLCBnb3QgYmFjazogW2AgK1xuICAgICAgICAgICAgcmVzcG9uc2Uuc2VydmljZXMubWFwKChzdmMpID0+IHN2Yz8ubmFtZSkuam9pbihcIiwgXCIpICtcbiAgICAgICAgICAgIFwiXVwiO1xuXG4gICAgICAgICAgYXR0ZW1wdCA9IE1BWF9SRUdJU1RSQVRJT05fQVRURU1QVFM7IC8vIGRvbid0IHJldHJ5IHRoaXNcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiU3VjY2Vzc2Z1bCByZWdpc3RyYXRpb24hIFNlcnZpY2VzOiBcIiwgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2Uuc2VydmljZXMpKTtcblxuICAgICAgICBjb25zdCBpc1B1YmxpYyA9IChwcm9wcy5wcml2YXRlID8/IFwiZmFsc2VcIikgPT09IFwiZmFsc2VcIjtcblxuICAgICAgICBmb3IgKGNvbnN0IHNlcnZpY2Ugb2YgcmVzcG9uc2Uuc2VydmljZXMgPz8gW10pIHtcbiAgICAgICAgICBpZiAoc2VydmljZS5wdWJsaWMgPT09IGlzUHVibGljKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgU2VydmljZSAke3NlcnZpY2UubmFtZX0gaXMgJHtpc1B1YmxpYyA/IFwicHVibGljXCIgOiBcInByaXZhdGVcIn0uYCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zb2xlLmxvZyhgTWFya2luZyBzZXJ2aWNlICR7c2VydmljZS5uYW1lfSBhcyAke2lzUHVibGljID8gXCJwdWJsaWNcIiA6IFwicHJpdmF0ZVwifS4uLmApO1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgICAgY29uc3QgcHJpdmF0ZUNhbGxUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KFwidGltZW91dFwiKSwgMTBfMDAwKTtcbiAgICAgICAgICBjb25zdCBwYXRjaFJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7cHJvcHMuYWRtaW5Vcmx9LyR7U0VSVklDRVNfUEFUSH0vJHtzZXJ2aWNlLm5hbWV9YCwge1xuICAgICAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgICAgIG1ldGhvZDogXCJQQVRDSFwiLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgLi4uYXV0aEhlYWRlcixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHB1YmxpYzogaXNQdWJsaWMgfSksXG4gICAgICAgICAgICBhZ2VudDogYWdlbnRTZWxlY3RvcixcbiAgICAgICAgICB9KS5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dChwcml2YXRlQ2FsbFRpbWVvdXQpKTtcblxuICAgICAgICAgIGNvbnNvbGUubG9nKGBHb3QgcGF0Y2ggcmVzcG9uc2UgYmFjazogJHtwYXRjaFJlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgICAgICBpZiAocGF0Y2hSZXNwb25zZS5zdGF0dXMgIT0gMjAwKSB7XG4gICAgICAgICAgICBmYWlsdXJlUmVhc29uID0gYE1hcmtpbmcgc2VydmljZSBhcyAke3Byb3BzLnByaXZhdGUgPyBcInByaXZhdGVcIiA6IFwicHVibGljXCJ9IGZhaWxlZDogJHtwYXRjaFJlc3BvbnNlLnN0YXR1c1RleHR9ICgke3BhdGNoUmVzcG9uc2Uuc3RhdHVzfSlgO1xuICAgICAgICAgICAgYnJlYWsgcmVnaXN0cmF0aW9uX3JldHJ5X2xvb3A7IC8vIGRvbid0IHRocm93IGltbWVkaWF0ZWx5IC0gbGV0IHJldHJ5IGxvb3AgZGVjaWRlIHdoZXRoZXIgdG8gYWJvcnQgc1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnNvbGUubG9nKGBTdWNjZXNzZnVsbHkgbWFya2VkIHNlcnZpY2UgYXMgJHtpc1B1YmxpYyA/IFwicHVibGljXCIgOiBcInByaXZhdGVcIn0uYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47IC8vIE92ZXJhbGwgc3VjY2VzcyFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yQm9keSA9IGF3YWl0IHJlZ2lzdGVyRGVwbG95bWVudFJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgZmFpbHVyZVJlYXNvbiA9IGBSZWdpc3RyYXRpb24gZmFpbGVkICgke3JlZ2lzdGVyRGVwbG95bWVudFJlc3BvbnNlLnN0YXR1c30pOiAke2Vycm9yQm9keX1gO1xuICAgICAgICBjb25zb2xlLmxvZyh7XG4gICAgICAgICAgbWVzc2FnZTogYEdvdCBlcnJvciByZXNwb25zZSBmcm9tIFJlc3RhdGUuYCxcbiAgICAgICAgICBjb2RlOiByZWdpc3RlckRlcGxveW1lbnRSZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgYm9keTogZXJyb3JCb2R5LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBSZWdpc3RyYXRpb24gZmFpbGVkOiAkeyhlIGFzIEVycm9yKT8ubWVzc2FnZX0gKGF0dGVtcHQgJHthdHRlbXB0fSlgKTtcbiAgICAgIGZhaWx1cmVSZWFzb24gPSAoZSBhcyBFcnJvcik/Lm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgaWYgKGF0dGVtcHQgPj0gTUFYX1JFR0lTVFJBVElPTl9BVFRFTVBUUykge1xuICAgICAgZmFpbHVyZVJlYXNvbiA9IGBHaXZpbmcgdXAgYWZ0ZXIgJHthdHRlbXB0fSBhdHRlbXB0cy4gTGFzdCBlcnJvcjogJHtmYWlsdXJlUmVhc29ufWA7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgYXR0ZW1wdCArPSAxO1xuICAgIGNvbnN0IHdhaXRUaW1lTWlsbGlzID0gcmFuZG9tSW50KDJfMDAwKSArIDIgKiogYXR0ZW1wdCAqIDFfMDAwOyAvLyAzcyAtPiA2cyAtPiAxMHNcbiAgICBjb25zb2xlLmxvZyhgUmV0cnlpbmcgcmVnaXN0cmF0aW9uIGFmdGVyICR7d2FpdFRpbWVNaWxsaXN9IG1zLi4uYCk7XG4gICAgYXdhaXQgc2xlZXAod2FpdFRpbWVNaWxsaXMpO1xuICB9XG5cbiAgY29uc29sZS5lcnJvcihmYWlsdXJlUmVhc29uKTtcbiAgdGhyb3cgbmV3IEVycm9yKGZhaWx1cmVSZWFzb24gPz8gXCJSZXN0YXRlIHNlcnZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZC4gUGxlYXNlIHNlZSBsb2dzIGZvciBkZXRhaWxzLlwiKTtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUF1dGhIZWFkZXIocHJvcHM6IFJlZ2lzdHJhdGlvblByb3BlcnRpZXMpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgaWYgKCFwcm9wcy5hdXRoVG9rZW5TZWNyZXRBcm4pIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zb2xlLmxvZyhgVXNpbmcgYmVhcmVyIGF1dGhlbnRpY2F0aW9uIHRva2VuIGZyb20gc2VjcmV0ICR7cHJvcHMuYXV0aFRva2VuU2VjcmV0QXJufWApO1xuICBjb25zdCBzc20gPSBuZXcgU2VjcmV0c01hbmFnZXJDbGllbnQoKTtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzc20uc2VuZChcbiAgICBuZXcgR2V0U2VjcmV0VmFsdWVDb21tYW5kKHtcbiAgICAgIFNlY3JldElkOiBwcm9wcy5hdXRoVG9rZW5TZWNyZXRBcm4sXG4gICAgfSksXG4gICk7XG5cbiAgY29uc29sZS5sb2coYFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgc2VjcmV0IFwiJHtyZXNwb25zZS5OYW1lfVwiIHZlcnNpb24gJHtyZXNwb25zZS5WZXJzaW9uSWR9YCk7XG4gIHJldHVybiB7XG4gICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Jlc3BvbnNlLlNlY3JldFN0cmluZ31gLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBzbGVlcChtaWxsaXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbWlsbGlzKSk7XG59XG4iXX0=
|