cdk-nextjs 0.7.13 → 0.7.15
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/.jsii +132 -42
- package/.jsii.tabl.json +1 -1
- package/API.md +56 -0
- package/docs/harness-coverage.md +16 -6
- package/docs/next-build-output-guide.md +1 -1
- package/lib/adapter/adapter.mjs +1 -1
- package/lib/generated-structs/OptionalNextjsApiProps.d.ts +6 -0
- package/lib/generated-structs/OptionalNextjsApiProps.js +1 -1
- package/lib/generated-structs/OptionalNextjsDistributionProps.d.ts +6 -0
- package/lib/generated-structs/OptionalNextjsDistributionProps.js +1 -1
- package/lib/nextjs-api.d.ts +11 -0
- package/lib/nextjs-api.js +63 -9
- package/lib/nextjs-api.test.js +127 -1
- package/lib/nextjs-build/nextjs-build.js +1 -1
- package/lib/nextjs-cache.js +1 -1
- package/lib/nextjs-compute/nextjs-containers.js +1 -1
- package/lib/nextjs-compute/nextjs-functions.js +1 -1
- package/lib/nextjs-distribution.d.ts +21 -0
- package/lib/nextjs-distribution.js +69 -4
- package/lib/nextjs-distribution.test.js +132 -1
- package/lib/nextjs-post-deploy.js +1 -1
- package/lib/nextjs-static-assets.js +1 -1
- package/lib/root-constructs/nextjs-base-construct.d.ts +7 -0
- package/lib/root-constructs/nextjs-base-construct.js +14 -2
- package/lib/root-constructs/nextjs-global-containers.js +3 -2
- package/lib/root-constructs/nextjs-global-functions.js +3 -2
- package/lib/root-constructs/nextjs-regional-containers.js +1 -1
- package/lib/root-constructs/nextjs-regional-functions.js +3 -2
- package/lib/runtime/core.js +4 -6
- package/lib/runtime/http/response.d.ts +0 -6
- package/lib/runtime/http/response.js +1 -7
- package/lib/runtime/http/sink.js +10 -6
- package/lib/runtime/http/sink.test.js +45 -13
- package/lib/runtime/lambda.mjs +2 -10
- package/lib/runtime/server.mjs +2 -10
- package/package.json +1 -1
- package/scripts/e2e-harness/README.md +10 -8
|
@@ -74,6 +74,137 @@ describe("NextjsDistribution function group behaviors", () => {
|
|
|
74
74
|
new nextjs_distribution_1.NextjsDistribution(stack, "Distribution", distributionProps);
|
|
75
75
|
expect(pathPatterns(stack)).toEqual(["_next/static*", "_next/image*"]);
|
|
76
76
|
});
|
|
77
|
+
describe("service workers", () => {
|
|
78
|
+
const serviceWorkerPolicy = (stack) => {
|
|
79
|
+
const config = Object.values(assertions_1.Template.fromStack(stack).findResources("AWS::CloudFront::Distribution"))[0].Properties.DistributionConfig;
|
|
80
|
+
const behavior = config.CacheBehaviors.find(({ PathPattern }) => PathPattern.includes("service-worker"));
|
|
81
|
+
const policies = assertions_1.Template.fromStack(stack).findResources("AWS::CloudFront::ResponseHeadersPolicy");
|
|
82
|
+
return policies[behavior.ResponseHeadersPolicyId.Ref].Properties
|
|
83
|
+
.ResponseHeadersPolicyConfig;
|
|
84
|
+
};
|
|
85
|
+
it("sends Service-Worker-Allowed from a behavior ahead of _next/static*", () => {
|
|
86
|
+
// CloudFront stops at the first match, so after `_next/static*` it would
|
|
87
|
+
// never be reached.
|
|
88
|
+
const { stack, distributionProps } = setup([]);
|
|
89
|
+
new nextjs_distribution_1.NextjsDistribution(stack, "Distribution", {
|
|
90
|
+
...distributionProps,
|
|
91
|
+
serviceWorkerAllowed: "/",
|
|
92
|
+
});
|
|
93
|
+
expect(pathPatterns(stack)).toEqual([
|
|
94
|
+
"_next/static/service-worker/*",
|
|
95
|
+
"_next/static*",
|
|
96
|
+
"_next/image*",
|
|
97
|
+
]);
|
|
98
|
+
const policy = serviceWorkerPolicy(stack);
|
|
99
|
+
expect(policy.CustomHeadersConfig.Items).toEqual([
|
|
100
|
+
{ Header: "Service-Worker-Allowed", Value: "/", Override: true },
|
|
101
|
+
]);
|
|
102
|
+
// The security headers the other static behaviors send.
|
|
103
|
+
expect(policy.SecurityHeadersConfig.StrictTransportSecurity).toBeDefined();
|
|
104
|
+
});
|
|
105
|
+
it("prefixes the pattern with basePath", () => {
|
|
106
|
+
const { stack, distributionProps } = setup([], { basePath: "/base" });
|
|
107
|
+
new nextjs_distribution_1.NextjsDistribution(stack, "Distribution", {
|
|
108
|
+
...distributionProps,
|
|
109
|
+
serviceWorkerAllowed: "/base",
|
|
110
|
+
});
|
|
111
|
+
expect(pathPatterns(stack)[0]).toBe("/base/_next/static/service-worker/*");
|
|
112
|
+
expect(serviceWorkerPolicy(stack).CustomHeadersConfig.Items).toEqual([
|
|
113
|
+
{ Header: "Service-Worker-Allowed", Value: "/base", Override: true },
|
|
114
|
+
]);
|
|
115
|
+
});
|
|
116
|
+
it("adds no behavior without service workers", () => {
|
|
117
|
+
const { stack, distributionProps } = setup([]);
|
|
118
|
+
new nextjs_distribution_1.NextjsDistribution(stack, "Distribution", distributionProps);
|
|
119
|
+
expect(pathPatterns(stack)).not.toContain("_next/static/service-worker/*");
|
|
120
|
+
});
|
|
121
|
+
it("keeps staticResponseHeadersPolicyProps, its custom headers included", () => {
|
|
122
|
+
const { stack, distributionProps } = setup([]);
|
|
123
|
+
new nextjs_distribution_1.NextjsDistribution(stack, "Distribution", {
|
|
124
|
+
...distributionProps,
|
|
125
|
+
serviceWorkerAllowed: "/",
|
|
126
|
+
overrides: {
|
|
127
|
+
staticResponseHeadersPolicyProps: {
|
|
128
|
+
responseHeadersPolicyName: "static",
|
|
129
|
+
customHeadersBehavior: {
|
|
130
|
+
customHeaders: [{ header: "X-Team", value: "a", override: true }],
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
const policy = serviceWorkerPolicy(stack);
|
|
136
|
+
// Names are unique per account, so it can't share the static policy's.
|
|
137
|
+
expect(policy.Name).toBe("static-sw");
|
|
138
|
+
expect(policy.CustomHeadersConfig.Items).toEqual([
|
|
139
|
+
{ Header: "X-Team", Value: "a", Override: true },
|
|
140
|
+
{ Header: "Service-Worker-Allowed", Value: "/", Override: true },
|
|
141
|
+
]);
|
|
142
|
+
});
|
|
143
|
+
it("keeps a suffixed policy name within CloudFront's 128 characters", () => {
|
|
144
|
+
const { stack, distributionProps } = setup([]);
|
|
145
|
+
new nextjs_distribution_1.NextjsDistribution(stack, "Distribution", {
|
|
146
|
+
...distributionProps,
|
|
147
|
+
serviceWorkerAllowed: "/",
|
|
148
|
+
overrides: {
|
|
149
|
+
staticResponseHeadersPolicyProps: {
|
|
150
|
+
responseHeadersPolicyName: "a".repeat(128),
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
expect(serviceWorkerPolicy(stack).Name).toBe(`${"a".repeat(125)}-sw`);
|
|
155
|
+
});
|
|
156
|
+
it("keeps a Service-Worker-Allowed the static override sets", () => {
|
|
157
|
+
const { stack, distributionProps } = setup([]);
|
|
158
|
+
new nextjs_distribution_1.NextjsDistribution(stack, "Distribution", {
|
|
159
|
+
...distributionProps,
|
|
160
|
+
serviceWorkerAllowed: "/",
|
|
161
|
+
overrides: {
|
|
162
|
+
staticResponseHeadersPolicyProps: {
|
|
163
|
+
customHeadersBehavior: {
|
|
164
|
+
customHeaders: [
|
|
165
|
+
{
|
|
166
|
+
header: "service-worker-allowed",
|
|
167
|
+
value: "/app",
|
|
168
|
+
override: true,
|
|
169
|
+
},
|
|
170
|
+
],
|
|
171
|
+
},
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
expect(serviceWorkerPolicy(stack).CustomHeadersConfig.Items).toEqual([
|
|
176
|
+
{ Header: "service-worker-allowed", Value: "/app", Override: true },
|
|
177
|
+
]);
|
|
178
|
+
});
|
|
179
|
+
it("warns and uses a replaced static policy as it is", () => {
|
|
180
|
+
const { stack, distributionProps } = setup([]);
|
|
181
|
+
const distribution = new nextjs_distribution_1.NextjsDistribution(stack, "Distribution", {
|
|
182
|
+
...distributionProps,
|
|
183
|
+
serviceWorkerAllowed: "/",
|
|
184
|
+
overrides: {
|
|
185
|
+
staticBehaviorOptions: {
|
|
186
|
+
responseHeadersPolicy: aws_cloudfront_1.ResponseHeadersPolicy.fromResponseHeadersPolicyId(stack, "Custom", "custom-policy"),
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
});
|
|
190
|
+
assertions_1.Annotations.fromStack(stack).hasWarning(`/${distribution.node.path}`, assertions_1.Match.stringLikeRegexp("Service-Worker-Allowed"));
|
|
191
|
+
const config = Object.values(assertions_1.Template.fromStack(stack).findResources("AWS::CloudFront::Distribution"))[0].Properties.DistributionConfig;
|
|
192
|
+
expect(config.CacheBehaviors[0]).toMatchObject({
|
|
193
|
+
PathPattern: "_next/static/service-worker/*",
|
|
194
|
+
ResponseHeadersPolicyId: "custom-policy",
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
it("counts its behavior against the budget", () => {
|
|
198
|
+
const { stack, distributionProps } = setup([], {
|
|
199
|
+
publicDirEntries: Array.from({ length: 72 }, (_, i) => `f${i}`),
|
|
200
|
+
});
|
|
201
|
+
// 3 fixed + 72 public = 75 fits; the service worker behavior makes 76.
|
|
202
|
+
expect(() => new nextjs_distribution_1.NextjsDistribution(stack, "Distribution", {
|
|
203
|
+
...distributionProps,
|
|
204
|
+
serviceWorkerAllowed: "/",
|
|
205
|
+
})).toThrow(/needs 76 CloudFront cache behaviors/);
|
|
206
|
+
});
|
|
207
|
+
});
|
|
77
208
|
it("lets the OAC principal list the bucket so a missing asset is a 404", () => {
|
|
78
209
|
const { stack, distributionProps } = setup([]);
|
|
79
210
|
new nextjs_distribution_1.NextjsDistribution(stack, "Distribution", distributionProps);
|
|
@@ -1043,4 +1174,4 @@ describe("viewerRequestFunctionCode", () => {
|
|
|
1043
1174
|
expect(() => synth({ code })).toThrow(error);
|
|
1044
1175
|
});
|
|
1045
1176
|
});
|
|
1046
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWRpc3RyaWJ1dGlvbi50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25leHRqcy1kaXN0cmlidXRpb24udGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFDQUEwQztBQUMxQyw2Q0FBeUQ7QUFDekQsdURBQXNFO0FBQ3RFLCtEQUtvQztBQUNwQywrRUFBZ0U7QUFDaEUsaURBQTBDO0FBQzFDLHVGQUFpRjtBQUNqRix1REFNZ0M7QUFDaEMsK0NBQTRDO0FBQzVDLCtEQUE0RDtBQUM1RCwyQ0FBeUM7QUFDekMsK0RBSStCO0FBRS9COzs7OztHQUtHO0FBQ0gsUUFBUSxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsRUFBRTtJQUMzRCxNQUFNLEtBQUssR0FBRyxDQUNaLFVBQW9CLEVBQ3BCLFFBS0ksRUFBRSxFQUNOLEVBQUU7UUFDRixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsSUFBSSxpQkFBRyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDaEQsTUFBTSxjQUFjLEdBQXNDLFVBQVUsQ0FBQyxHQUFHLENBQ3RFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDUCxNQUFNLEVBQUUsR0FBRyxJQUFJLHFCQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUU7Z0JBQ2hELElBQUksRUFBRSxpQkFBSSxDQUFDLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQztnQkFDcEQsT0FBTyxFQUFFLGVBQWU7Z0JBQ3hCLE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7YUFDN0IsQ0FBQyxDQUFDO1lBQ0gsT0FBTztnQkFDTCxJQUFJO2dCQUNKLFdBQVcsRUFBRSxJQUFJLHdCQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUU7b0JBQ2hELFFBQVEsRUFBRSxFQUFFO29CQUNaLFFBQVEsRUFBRSxnQ0FBbUIsQ0FBQyxPQUFPO2lCQUN0QyxDQUFDO2FBQ0gsQ0FBQztRQUNKLENBQUMsQ0FD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VUFBVSxDQUMzQixtREFBbUQsQ0FDcEQ7NkJBQ0YsQ0FBQzt5QkFDSDtxQkFDRjtpQkFDRjthQUNGLENBQUM7U0FDSCxDQUFDLENBQ0gsQ0FBQyxPQUFPLENBQUMsd0RBQXdELENBQUMsQ0FBQztJQUN0RSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDTixDQUFDLGtCQUFrQixFQUFFLFlBQVksRUFBRSxzQ0FBc0MsQ0FBQztRQUMxRSxHQUFHO1lBQ0QsNEJBQTRCO1lBQzVCLDZCQUE2QjtZQUM3QiwyQ0FBMkM7WUFDM0MseUJBQXlCO1lBQ3pCLHlDQUF5QztZQUN6QywwREFBMEQ7WUFDMUQsbURBQW1EO1lBQ25ELG1EQUFtRDtTQUNwRCxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBNEIsRUFBRSxDQUFDO1lBQy9DLGdCQUFnQixXQUFXLElBQUk7WUFDL0IsR0FBRyxXQUFXLG9DQUFvQztZQUNsRCx5QkFBeUI7U0FDMUIsQ0FBQztRQUNGO1lBQ0UsNkNBQTZDO1lBQzdDLGlEQUFpRDtZQUNqRCxzQ0FBc0M7U0FDdkM7UUFDRDtZQUNFLDJDQUEyQztZQUMzQywwREFBMEQ7WUFDMUQsc0NBQXNDO1NBQ3ZDO1FBQ0Q7WUFDRSx5Q0FBeUM7WUFDekMsdUNBQXVDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLO1lBQ2pFLGtDQUFrQztTQUNuQztLQUNGLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDaEQsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJ1bkluTmV3Q29udGV4dCB9IGZyb20gXCJub2RlOnZtXCI7XG5pbXBvcnQgeyBBcHAsIER1cmF0aW9uLCBMYXp5LCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQW5ub3RhdGlvbnMsIE1hdGNoLCBUZW1wbGF0ZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hc3NlcnRpb25zXCI7XG5pbXBvcnQge1xuICBGdW5jdGlvbiBhcyBDbG91ZEZyb250RnVuY3Rpb24sXG4gIEZ1bmN0aW9uQ29kZSxcbiAgRnVuY3Rpb25FdmVudFR5cGUsXG4gIEtleVZhbHVlU3RvcmUsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiO1xuaW1wb3J0IHsgSHR0cE9yaWdpbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udC1vcmlnaW5zXCI7XG5pbXBvcnQgeyBWcGMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjJcIjtcbmltcG9ydCB7XG4gIENvZGUsXG4gIEZ1bmN0aW9uIGFzIExhbWJkYUZ1bmN0aW9uLFxuICBGdW5jdGlvblVybCxcbiAgRnVuY3Rpb25VcmxBdXRoVHlwZSxcbiAgUnVudGltZSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7IEJ1Y2tldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IHBhdGhQYXR0ZXJuc0ZvciB9IGZyb20gXCIuL2FkYXB0ZXIvZnVuY3Rpb24tZ3JvdXBzXCI7XG5pbXBvcnQgeyBOZXh0anNUeXBlIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQge1xuICBOZXh0anNEaXN0cmlidXRpb24sXG4gIE5leHRqc0Rpc3RyaWJ1dGlvbkZ1bmN0aW9uR3JvdXAsXG4gIE5leHRqc0Rpc3RyaWJ1dGlvbk92ZXJyaWRlcyxcbn0gZnJvbSBcIi4vbmV4dGpzLWRpc3RyaWJ1dGlvblwiO1xuXG4vKipcbiAqIGBmdW5jdGlvbkdyb3Vwc2Agcm91dGluZyBhdCB0aGUgZWRnZS4gYE5leHRqc0J1aWxkYCBpcyBkZWxpYmVyYXRlbHkgbm90XG4gKiBpbnZvbHZlZDogd2hpY2ggYmVoYXZpb3JzIGEgZ3JvdXAgZ2V0cywgYW5kIGluIHdoYXQgb3JkZXIsIGlzIHRoZSBhZGFwdGVyJ3NcbiAqIGRlY2lzaW9uIChgZnVuY3Rpb24tZ3JvdXBzLnRlc3QudHNgKSwgc28gdGhlc2UgcGFzcyB0aGUgYmVoYXZpb3JzIGluIGRpcmVjdGx5XG4gKiBhbmQgYXNzZXJ0IG9uIHdoYXQgdGhlIGRpc3RyaWJ1dGlvbiBkb2VzIHdpdGggdGhlbS5cbiAqL1xuZGVzY3JpYmUoXCJOZXh0anNEaXN0cmlidXRpb24gZnVuY3Rpb24gZ3JvdXAgYmVoYXZpb3JzXCIsICgpID0+IHtcbiAgY29uc3Qgc2V0dXAgPSAoXG4gICAgZ3JvdXBOYW1lczogc3RyaW5nW10sXG4gICAgcHJvcHM6IHtcbiAgICAgIHJvdXRlc0Zvcj86IChuYW1lOiBzdHJpbmcpID0+IHN0cmluZ1tdO1xuICAgICAgcHVibGljRGlyRW50cmllcz86IHN0cmluZ1tdO1xuICAgICAgYmFzZVBhdGg/OiBzdHJpbmc7XG4gICAgICB0cmFpbGluZ1NsYXNoPzogYm9vbGVhbjtcbiAgICB9ID0ge30sXG4gICkgPT4ge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKG5ldyBBcHAoKSwgXCJUZXN0U3RhY2tcIik7XG4gICAgY29uc3QgZnVuY3Rpb25Hcm91cHM6IE5leHRqc0Rpc3RyaWJ1dGlvbkZ1bmN0aW9uR3JvdXBbXSA9IGdyb3VwTmFtZXMubWFwKFxuICAgICAgKG5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgZm4gPSBuZXcgTGFtYmRhRnVuY3Rpb24oc3RhY2ssIGBGbiR7bmFtZX1gLCB7XG4gICAgICAgICAgY29kZTogQ29kZS5mcm9tSW5saW5lKFwiZXhwb3J0cy5oYW5kbGVyID0gKCkgPT4ge307XCIpLFxuICAgICAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgZnVuY3Rpb25Vcmw6IG5ldyBGdW5jdGlvblVybChzdGFjaywgYFVybCR7bmFtZX1gLCB7XG4gICAgICAgICAgICBmdW5jdGlvbjogZm4sXG4gICAgICAgICAgICBhdXRoVHlwZTogRnVuY3Rpb25VcmxBdXRoVHlwZS5BV1NfSUFNLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICApO1xuICAgIC8vIEluIHRoZSBvcmRlciBnaXZlbjogdGhlIGJ1aWxkJ3MgbGlzdCBpcyBhbHJlYWR5IG1vc3Qgc3BlY2lmaWMgZmlyc3QuXG4gICAgY29uc3QgZnVuY3Rpb25Hcm91cEJlaGF2aW9ycyA9IGdyb3VwTmFtZXMuZmxhdE1hcCgoZ3JvdXApID0+XG4gICAgICAocHJvcHMucm91dGVzRm9yPy4oZ3JvdXApID8/IFtgLyR7Z3JvdXB9LyoqYF0pLmZsYXRNYXAoKHJvdXRlKSA9PlxuICAgICAgICBwYXRoUGF0dGVybnNGb3Iocm91dGUsIHtcbiAgICAgICAgICBoYXNEYXRhUm91dGVzOiBmYWxzZSxcbiAgICAgICAgICB0cmFpbGluZ1NsYXNoOiBwcm9wcy50cmFpbGluZ1NsYXNoLFxuICAgICAgICB9KS5tYXAoKHBhdHRlcm4pID0+ICh7IGdyb3VwLCByb3V0ZSwgcGF0dGVybiB9KSksXG4gICAgICApLFxuICAgICk7XG4gICAgY29uc3QgZGVmYXVsdEZuID0gbmV3IExhbWJkYUZ1bmN0aW9uKHN0YWNrLCBcIkZuRGVmYXVsdFwiLCB7XG4gICAgICBjb2RlOiBDb2RlLmZyb21JbmxpbmUoXCJleHBvcnRzLmhhbmRsZXIgPSAoKSA9PiB7fTtcIiksXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YWNrLFxuICAgICAgZnVuY3Rpb25Hcm91cHMsXG4gICAgICBmdW5jdGlvbkdyb3VwQmVoYXZpb3JzLFxuICAgICAgZGlzdHJpYnV0aW9uUHJvcHM6IHtcbiAgICAgICAgYXNzZXRzQnVja2V0OiBuZXcgQnVja2V0KHN0YWNrLCBcIkFzc2V0c1wiKSxcbiAgICAgICAgYmFzZVBhdGg6IHByb3BzLmJhc2VQYXRoLFxuICAgICAgICBmdW5jdGlvblVybDogbmV3IEZ1bmN0aW9uVXJsKHN0YWNrLCBcIlVybERlZmF1bHRcIiwge1xuICAgICAgICAgIGZ1bmN0aW9uOiBkZWZhdWx0Rm4sXG4gICAgICAgICAgYXV0aFR5cGU6IEZ1bmN0aW9uVXJsQXV0aFR5cGUuQVdTX0lBTSxcbiAgICAgICAgfSksXG4gICAgICAgIG5leHRqc1R5cGU6IE5leHRqc1R5cGUuR0xPQkFMX0ZVTkNUSU9OUyxcbiAgICAgICAgcHVibGljRGlyRW50cmllczogKHByb3BzLnB1YmxpY0RpckVudHJpZXMgPz8gW10pLm1hcCgobmFtZSkgPT4gKHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGlzRGlyZWN0b3J5OiBmYWxzZSxcbiAgICAgICAgfSkpLFxuICAgICAgfSxcbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IHBhdGhQYXR0ZXJucyA9IChzdGFjazogU3RhY2spID0+IHtcbiAgICBjb25zdCBkaXN0cmlidXRpb25zID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5maW5kUmVzb3VyY2VzKFxuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiLFxuICAgICk7XG4gICAgY29uc3QgY29uZmlnID1cbiAgICAgIE9iamVjdC52YWx1ZXMoZGlzdHJpYnV0aW9ucylbMF0uUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWc7XG4gICAgcmV0dXJuIChjb25maWcuQ2FjaGVCZWhhdmlvcnMgYXMgQXJyYXk8eyBQYXRoUGF0dGVybjogc3RyaW5nIH0+KS5tYXAoXG4gICAgICAoYmVoYXZpb3IpID0+IGJlaGF2aW9yLlBhdGhQYXR0ZXJuLFxuICAgICk7XG4gIH07XG5cbiAgaXQoXCJhZGRzIG5vdGhpbmcgZXh0cmEgd2hlbiB0aGVyZSBhcmUgbm8gZ3JvdXBzXCIsICgpID0+IHtcbiAgICBjb25zdCB7IHN0YWNrLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW10pO1xuICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIGRpc3RyaWJ1dGlvblByb3BzKTtcbiAgICBleHBlY3QocGF0aFBhdHRlcm5zKHN0YWNrKSkudG9FcXVhbChbXCJfbmV4dC9zdGF0aWMqXCIsIFwiX25leHQvaW1hZ2UqXCJdKTtcbiAgfSk7XG5cbiAgaXQoXCJsZXRzIHRoZSBPQUMgcHJpbmNpcGFsIGxpc3QgdGhlIGJ1Y2tldCBzbyBhIG1pc3NpbmcgYXNzZXQgaXMgYSA0MDRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgc3RhY2ssIGRpc3RyaWJ1dGlvblByb3BzIH0gPSBzZXR1cChbXSk7XG4gICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwgZGlzdHJpYnV0aW9uUHJvcHMpO1xuICAgIFRlbXBsYXRlLmZyb21TdGFjayhzdGFjaykuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpTMzo6QnVja2V0UG9saWN5XCIsIHtcbiAgICAgIFBvbGljeURvY3VtZW50OiB7XG4gICAgICAgIFN0YXRlbWVudDogTWF0Y2guYXJyYXlXaXRoKFtcbiAgICAgICAgICBNYXRjaC5vYmplY3RMaWtlKHtcbiAgICAgICAgICAgIEFjdGlvbjogW1wiczM6R2V0T2JqZWN0XCIsIFwiczM6TGlzdEJ1Y2tldFwiXSxcbiAgICAgICAgICAgIFByaW5jaXBhbDogeyBTZXJ2aWNlOiBcImNsb3VkZnJvbnQuYW1hem9uYXdzLmNvbVwiIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF0pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJhZGRzIGdyb3VwIGJlaGF2aW9ycyBpbiB0aGUgYnVpbGQncyBvcmRlciwgYWZ0ZXIgdGhlIGltYWdlIGJlaGF2aW9yXCIsICgpID0+IHtcbiAgICAvLyBDbG91ZEZyb250IHN0b3BzIGF0IHRoZSBmaXJzdCBtYXRjaGluZyBiZWhhdmlvciwgc28gYGFwaS8qYCBhaGVhZCBvZlxuICAgIC8vIGBhcGkvcmVwb3J0cy8qYCB3b3VsZCBzZW5kIGV2ZXJ5IHJlcG9ydCByZXF1ZXN0IHRvIHRoZSB3cm9uZyBmdW5jdGlvbi5cbiAgICAvLyBUaGUgYnVpbGQgc29ydGVkIHRoZW0gd2hlbiBpdCBjaGVja2VkIHRoZW07IHJlLXNvcnRpbmcgaGVyZSBjb3VsZCBvbmx5XG4gICAgLy8gZGlzYWdyZWUgd2l0aCB0aGF0LlxuICAgIGNvbnN0IHsgc3RhY2ssIGZ1bmN0aW9uR3JvdXBzLCBmdW5jdGlvbkdyb3VwQmVoYXZpb3JzLCBkaXN0cmlidXRpb25Qcm9wcyB9ID1cbiAgICAgIHNldHVwKFtcInJlcG9ydHNcIiwgXCJhcGlcIl0sIHtcbiAgICAgICAgcm91dGVzRm9yOiAobmFtZSkgPT5cbiAgICAgICAgICBuYW1lID09PSBcImFwaVwiID8gW1wiL2FwaS8qKlwiXSA6IFtcIi9hcGkvcmVwb3J0cy8qKlwiXSxcbiAgICAgIH0pO1xuICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgZnVuY3Rpb25Hcm91cHMsXG4gICAgICBmdW5jdGlvbkdyb3VwQmVoYXZpb3JzLFxuICAgIH0pO1xuICAgIGV4cGVjdChwYXRoUGF0dGVybnMoc3RhY2spKS50b0VxdWFsKFtcbiAgICAgIFwiX25leHQvc3RhdGljKlwiLFxuICAgICAgXCJfbmV4dC9pbWFnZSpcIixcbiAgICAgIFwiYXBpL3JlcG9ydHMvKlwiLFxuICAgICAgXCJhcGkvKlwiLFxuICAgIF0pO1xuICB9KTtcblxuICBpdChcImtlZXBzIHRoZSB0d28gc2xhc2ggdmFyaWFudHMgZGlzdGluY3QgdW5kZXIgYSBiYXNlUGF0aFwiLCAoKSA9PiB7XG4gICAgLy8gYGdldFBhdGhQYXR0ZXJuYCB1c2VkIHRvIGpvaW4gdGhyb3VnaCBhIGhlbHBlciB0aGF0IHN0cmlwcyB0cmFpbGluZ1xuICAgIC8vIHNsYXNoZXMsIHNvIGBwcmljaW5nYCBhbmQgYHByaWNpbmcvYCBib3RoIGJlY2FtZSBgL2Jhc2UvcHJpY2luZ2A6IHR3b1xuICAgIC8vIGJlaGF2aW9ycyB3aXRoIHRoZSBzYW1lIHBhdGggcGF0dGVybiwgd2hpY2ggQ2xvdWRGcm9udCByZWplY3RzIGF0IGRlcGxveVxuICAgIC8vIHdpdGggbm8gaGludCB0aGF0IGB0cmFpbGluZ1NsYXNoYCBpcyB3aGF0IHByb2R1Y2VkIHRoZSBkdXBsaWNhdGUuXG4gICAgY29uc3QgeyBzdGFjaywgZnVuY3Rpb25Hcm91cHMsIGZ1bmN0aW9uR3JvdXBCZWhhdmlvcnMsIGRpc3RyaWJ1dGlvblByb3BzIH0gPVxuICAgICAgc2V0dXAoW1wibWt0XCJdLCB7XG4gICAgICAgIHJvdXRlc0ZvcjogKCkgPT4gW1wiL3ByaWNpbmdcIl0sXG4gICAgICAgIGJhc2VQYXRoOiBcIi9iYXNlXCIsXG4gICAgICAgIHRyYWlsaW5nU2xhc2g6IHRydWUsXG4gICAgICB9KTtcbiAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAuLi5kaXN0cmlidXRpb25Qcm9wcyxcbiAgICAgIGZ1bmN0aW9uR3JvdXBzLFxuICAgICAgZnVuY3Rpb25Hcm91cEJlaGF2aW9ycyxcbiAgICB9KTtcbiAgICBjb25zdCBwYXR0ZXJucyA9IHBhdGhQYXR0ZXJucyhzdGFjayk7XG4gICAgZXhwZWN0KHBhdHRlcm5zKS50b0NvbnRhaW4oXCIvYmFzZS9wcmljaW5nXCIpO1xuICAgIGV4cGVjdChwYXR0ZXJucykudG9Db250YWluKFwiL2Jhc2UvcHJpY2luZy9cIik7XG4gIH0pO1xuXG4gIGl0KFwiY291bnRzIHRoZSBiYXNlUGF0aCBiZWhhdmlvcnMgYWdhaW5zdCB0aGUgYnVkZ2V0XCIsICgpID0+IHtcbiAgICBjb25zdCB7IHN0YWNrLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW10sIHtcbiAgICAgIGJhc2VQYXRoOiBcIi9iYXNlXCIsXG4gICAgICBwdWJsaWNEaXJFbnRyaWVzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyMSB9LCAoXywgaSkgPT4gYGZpbGUke2l9LnR4dGApLFxuICAgIH0pO1xuICAgIC8vIDMgZml4ZWQgKyB0aGUgMiBhIGJhc2VQYXRoIGFkZHMgdG8gc3RhbmQgaW4gZm9yIHRoZSBkZWZhdWx0IGJlaGF2aW9yICsgMjFcbiAgICAvLyBwdWJsaWMgPSAyNi4gQ291bnRpbmcgb25seSB0aGUgMyByZXBvcnRlZCAyNCBhbmQgbGV0IHRoZSBzeW50aCB0aHJvdWdoLCBzb1xuICAgIC8vIHRoZSBsaW1pdCBhcnJpdmVkIGFzIGEgQ2xvdWRGcm9udCBkZXBsb3kgZmFpbHVyZS5cbiAgICBleHBlY3QoXG4gICAgICAoKSA9PlxuICAgICAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAgICAgLi4uZGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgICAgICAgbWF4Q2FjaGVCZWhhdmlvcnM6IDI1LFxuICAgICAgICB9KSxcbiAgICApLnRvVGhyb3coLzI2IENsb3VkRnJvbnQgY2FjaGUgYmVoYXZpb3JzLio1IHVzZWQgYnkgY2RrLW5leHRqcyBpdHNlbGYvcyk7XG4gIH0pO1xuXG4gIGl0KFwiZGVmYXVsdHMgdGhlIGJ1ZGdldCB0byBDbG91ZEZyb250J3MgcXVvdGEgb2YgNzVcIiwgKCkgPT4ge1xuICAgIC8vIFRoZSBoYXJkLWNvZGVkIDI1IHByZWRhdGVkIHRoZSBxdW90YSdzIGluY3JlYXNlIHRvIDc1LlxuICAgIGNvbnN0IHsgc3RhY2ssIGRpc3RyaWJ1dGlvblByb3BzIH0gPSBzZXR1cChbXSwge1xuICAgICAgcHVibGljRGlyRW50cmllczogQXJyYXkuZnJvbSh7IGxlbmd0aDogNzIgfSwgKF8sIGkpID0+IGBmaWxlJHtpfS50eHRgKSxcbiAgICB9KTtcbiAgICBleHBlY3QoXG4gICAgICAoKSA9PiBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCBkaXN0cmlidXRpb25Qcm9wcyksXG4gICAgKS5ub3QudG9UaHJvdygpO1xuICAgIGNvbnN0IHsgc3RhY2s6IG92ZXIsIGRpc3RyaWJ1dGlvblByb3BzOiBvdmVyUHJvcHMgfSA9IHNldHVwKFtdLCB7XG4gICAgICBwdWJsaWNEaXJFbnRyaWVzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA3MyB9LCAoXywgaSkgPT4gYGZpbGUke2l9LnR4dGApLFxuICAgIH0pO1xuICAgIGV4cGVjdChcbiAgICAgICgpID0+IG5ldyBOZXh0anNEaXN0cmlidXRpb24ob3ZlciwgXCJEaXN0cmlidXRpb25cIiwgb3ZlclByb3BzKSxcbiAgICApLnRvVGhyb3coXG4gICAgICAvNzYgQ2xvdWRGcm9udCBjYWNoZSBiZWhhdmlvcnMsIG92ZXIgdGhlIGxpbWl0IG9mIDc1LipzZXQgYG1heENhY2hlQmVoYXZpb3JzYC9zLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwiaG9ub3JzIGEgcmFpc2VkIG1heENhY2hlQmVoYXZpb3JzXCIsICgpID0+IHtcbiAgICBjb25zdCB7IHN0YWNrLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW10sIHtcbiAgICAgIHB1YmxpY0RpckVudHJpZXM6IEFycmF5LmZyb20oeyBsZW5ndGg6IDk3IH0sIChfLCBpKSA9PiBgZmlsZSR7aX0udHh0YCksXG4gICAgfSk7XG4gICAgZXhwZWN0KFxuICAgICAgKCkgPT5cbiAgICAgICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgICAgIG1heENhY2hlQmVoYXZpb3JzOiAxMDAsXG4gICAgICAgIH0pLFxuICAgICkubm90LnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgaXQoXCJkb2VzIG5vdCBjb3VudCBiYXNlUGF0aCBiZWhhdmlvcnMgZm9yIGEgYmFzZVBhdGggb2YgL1wiLCAoKSA9PiB7XG4gICAgLy8gYGJhc2VQYXRoOiBcIi9cImAgbm9ybWFsaXplcyB0byBubyBiYXNlUGF0aCBhbmQgYWRkcyBubyBiZWhhdmlvcnMsIHNvXG4gICAgLy8gY291bnRpbmcgMiBmb3IgaXQgY291bGQgcmVqZWN0IGFuIGFwcCB0aGF0IGlzIHVuZGVyIHRoZSBsaW1pdC5cbiAgICBjb25zdCB7IHN0YWNrLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW10sIHtcbiAgICAgIGJhc2VQYXRoOiBcIi9cIixcbiAgICAgIHB1YmxpY0RpckVudHJpZXM6IEFycmF5LmZyb20oeyBsZW5ndGg6IDIyIH0sIChfLCBpKSA9PiBgZmlsZSR7aX0udHh0YCksXG4gICAgfSk7XG4gICAgZXhwZWN0KFxuICAgICAgKCkgPT5cbiAgICAgICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgICAgIG1heENhY2hlQmVoYXZpb3JzOiAyNSxcbiAgICAgICAgfSksXG4gICAgKS5ub3QudG9UaHJvdygpO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgYSBiZWhhdmlvciBmb3IgYSBncm91cCBpdCB3YXMgbm90IGdpdmVuXCIsICgpID0+IHtcbiAgICBjb25zdCB7IHN0YWNrLCBmdW5jdGlvbkdyb3VwQmVoYXZpb3JzLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW1wiYXBpXCJdKTtcbiAgICBleHBlY3QoXG4gICAgICAoKSA9PlxuICAgICAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAgICAgLi4uZGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgICAgICAgZnVuY3Rpb25Hcm91cEJlaGF2aW9ycyxcbiAgICAgICAgfSksXG4gICAgKS50b1Rocm93KFxuICAgICAgL3JvdXRlcyB0byBmdW5jdGlvbiBncm91cCBcImFwaVwiLCB3aGljaCBpcyBub3QgaW4gYGZ1bmN0aW9uR3JvdXBzYC8sXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJwb2ludHMgZWFjaCBncm91cCdzIGJlaGF2aW9ycyBhdCB0aGF0IGdyb3VwJ3Mgb3duIG9yaWdpblwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzdGFjaywgZnVuY3Rpb25Hcm91cHMsIGZ1bmN0aW9uR3JvdXBCZWhhdmlvcnMsIGRpc3RyaWJ1dGlvblByb3BzIH0gPVxuICAgICAgc2V0dXAoW1wiYXBpXCJdLCB7XG4gICAgICAgIHJvdXRlc0ZvcjogKCkgPT4gW1wiL2FwaS8qKlwiLCBcIi9oZWFsdGhcIl0sXG4gICAgICB9KTtcbiAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAuLi5kaXN0cmlidXRpb25Qcm9wcyxcbiAgICAgIGZ1bmN0aW9uR3JvdXBzLFxuICAgICAgZnVuY3Rpb25Hcm91cEJlaGF2aW9ycyxcbiAgICB9KTtcbiAgICBjb25zdCBkaXN0cmlidXRpb25zID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5maW5kUmVzb3VyY2VzKFxuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiLFxuICAgICk7XG4gICAgY29uc3QgY29uZmlnID1cbiAgICAgIE9iamVjdC52YWx1ZXMoZGlzdHJpYnV0aW9ucylbMF0uUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWc7XG4gICAgY29uc3QgYmVoYXZpb3JzID0gY29uZmlnLkNhY2hlQmVoYXZpb3JzIGFzIEFycmF5PHtcbiAgICAgIFBhdGhQYXR0ZXJuOiBzdHJpbmc7XG4gICAgICBUYXJnZXRPcmlnaW5JZDogc3RyaW5nO1xuICAgIH0+O1xuICAgIGNvbnN0IGdyb3VwT3JpZ2lucyA9IG5ldyBTZXQoXG4gICAgICBiZWhhdmlvcnNcbiAgICAgICAgLmZpbHRlcigoYmVoYXZpb3IpID0+XG4gICAgICAgICAgW1wiYXBpLypcIiwgXCJoZWFsdGhcIl0uaW5jbHVkZXMoYmVoYXZpb3IuUGF0aFBhdHRlcm4pLFxuICAgICAgICApXG4gICAgICAgIC5tYXAoKGJlaGF2aW9yKSA9PiBiZWhhdmlvci5UYXJnZXRPcmlnaW5JZCksXG4gICAgKTtcbiAgICAvLyBPbmUgb3JpZ2luLCBzaGFyZWQgYnkgYm90aCBvZiB0aGUgZ3JvdXAncyBwYXR0ZXJucywgYW5kIG5vdCB0aGUgZGVmYXVsdCdzLlxuICAgIGV4cGVjdChncm91cE9yaWdpbnMuc2l6ZSkudG9CZSgxKTtcbiAgICBleHBlY3QoZ3JvdXBPcmlnaW5zKS5ub3QudG9Db250YWluKFxuICAgICAgY29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yLlRhcmdldE9yaWdpbklkLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwicHJlZml4ZXMgZ3JvdXAgcGF0dGVybnMgd2l0aCBiYXNlUGF0aFwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzdGFjaywgZnVuY3Rpb25Hcm91cHMsIGZ1bmN0aW9uR3JvdXBCZWhhdmlvcnMsIGRpc3RyaWJ1dGlvblByb3BzIH0gPVxuICAgICAgc2V0dXAoW1wiYXBpXCJdLCB7XG4gICAgICAgIHJvdXRlc0ZvcjogKCkgPT4gW1wiL2FwaS8qKlwiXSxcbiAgICAgICAgYmFzZVBhdGg6IFwiL2Jhc2VcIixcbiAgICAgIH0pO1xuICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgZnVuY3Rpb25Hcm91cHMsXG4gICAgICBmdW5jdGlvbkdyb3VwQmVoYXZpb3JzLFxuICAgIH0pO1xuICAgIGV4cGVjdChwYXRoUGF0dGVybnMoc3RhY2spKS50b0NvbnRhaW4oXCIvYmFzZS9hcGkvKlwiKTtcbiAgfSk7XG5cbiAgaXQoXCJuYW1lcyBldmVyeSBjbGFpbSBvbiB0aGUgYmVoYXZpb3IgYnVkZ2V0IHdoZW4gaXQgaXMgZXhjZWVkZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgc3RhY2ssIGZ1bmN0aW9uR3JvdXBzLCBmdW5jdGlvbkdyb3VwQmVoYXZpb3JzLCBkaXN0cmlidXRpb25Qcm9wcyB9ID1cbiAgICAgIHNldHVwKFtcImFwaVwiXSwge1xuICAgICAgICByb3V0ZXNGb3I6ICgpID0+IFtcIi9hcGkvKipcIl0sXG4gICAgICAgIHB1YmxpY0RpckVudHJpZXM6IEFycmF5LmZyb20oeyBsZW5ndGg6IDIyIH0sIChfLCBpKSA9PiBgZmlsZSR7aX0udHh0YCksXG4gICAgICB9KTtcbiAgICBleHBlY3QoXG4gICAgICAoKSA9PlxuICAgICAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAgICAgLi4uZGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgICAgICAgZnVuY3Rpb25Hcm91cHMsXG4gICAgICAgICAgZnVuY3Rpb25Hcm91cEJlaGF2aW9ycyxcbiAgICAgICAgICBtYXhDYWNoZUJlaGF2aW9yczogMjUsXG4gICAgICAgIH0pLFxuICAgICkudG9UaHJvdyhcbiAgICAgIC8yNiBDbG91ZEZyb250IGNhY2hlIGJlaGF2aW9ycy4qMSBmb3IgYGZ1bmN0aW9uR3JvdXBzYCBwYXR0ZXJucy9zLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyBhIGdyb3VwIHBhdHRlcm4gdGhhdCBkdXBsaWNhdGVzIGEgcHVibGljLyBkaXJlY3Rvcnknc1wiLCAoKSA9PiB7XG4gICAgLy8gYHB1YmxpYy9kb2NzL2AgYW5kIGAvZG9jcy8qKmAgYm90aCBkZXBsb3kgYXMgYGRvY3MvKmA6IHRoZSBzeW50aFxuICAgIC8vIHN1Y2NlZWRlZCBhbmQgQ2xvdWRGcm9udCByZWplY3RlZCB0aGUgZGVwbG95LlxuICAgIGNvbnN0IHsgc3RhY2ssIGZ1bmN0aW9uR3JvdXBzLCBmdW5jdGlvbkdyb3VwQmVoYXZpb3JzLCBkaXN0cmlidXRpb25Qcm9wcyB9ID1cbiAgICAgIHNldHVwKFtcImRvY3NcIl0pO1xuICAgIGV4cGVjdChcbiAgICAgICgpID0+XG4gICAgICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgICAgICAuLi5kaXN0cmlidXRpb25Qcm9wcyxcbiAgICAgICAgICBmdW5jdGlvbkdyb3VwcyxcbiAgICAgICAgICBmdW5jdGlvbkdyb3VwQmVoYXZpb3JzLFxuICAgICAgICAgIHB1YmxpY0RpckVudHJpZXM6IFt7IG5hbWU6IFwiZG9jc1wiLCBpc0RpcmVjdG9yeTogdHJ1ZSB9XSxcbiAgICAgICAgfSksXG4gICAgKS50b1Rocm93KFxuICAgICAgL3BhdHRlcm4gXCJcXC9kb2NzXFwvXFwqXFwqXCIgXFwoZ3JvdXAgXCJkb2NzXCJcXCkgZGVwbG95cyBhcyB0aGUgcGF0aCBwYXR0ZXJuIFwiZG9jc1xcL1xcKlwiLCB3aGljaCBhIHRvcC1sZXZlbCBwdWJsaWNcXC8gZW50cnkgYWxyZWFkeSB1c2VzLyxcbiAgICApO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgYSBncm91cCBwYXR0ZXJuIGEgcHVibGljLyBkaXJlY3RvcnkncyBiZWhhdmlvciB3b3VsZCBzaGFkb3dcIiwgKCkgPT4ge1xuICAgIC8vIGBkb2NzLypgIGlzIGFkZGVkIGZpcnN0LCBzbyBgZG9jcy9ndWlkZS8qYCBuZXZlciBtYXRjaGVzLlxuICAgIGNvbnN0IHsgc3RhY2ssIGZ1bmN0aW9uR3JvdXBzLCBmdW5jdGlvbkdyb3VwQmVoYXZpb3JzLCBkaXN0cmlidXRpb25Qcm9wcyB9ID1cbiAgICAgIHNldHVwKFtcImd1aWRlXCJdLCB7XG4gICAgICAgIHJvdXRlc0ZvcjogKCkgPT4gW1wiL2RvY3MvZ3VpZGUvKipcIl0sXG4gICAgICB9KTtcbiAgICBleHBlY3QoXG4gICAgICAoKSA9PlxuICAgICAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAgICAgLi4uZGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgICAgICAgZnVuY3Rpb25Hcm91cHMsXG4gICAgICAgICAgZnVuY3Rpb25Hcm91cEJlaGF2aW9ycyxcbiAgICAgICAgICBwdWJsaWNEaXJFbnRyaWVzOiBbeyBuYW1lOiBcImRvY3NcIiwgaXNEaXJlY3Rvcnk6IHRydWUgfV0sXG4gICAgICAgIH0pLFxuICAgICkudG9UaHJvdygvcHVibGljXFwvIGVudHJ5IGJlaGluZCBcImRvY3NcXC9cXCpcIiBpcyBtYXRjaGVkIGZpcnN0Lyk7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyBhbiBleGFjdCBncm91cCBwYXR0ZXJuIGVxdWFsIHRvIGEgcHVibGljLyBmaWxlJ3MsIGJhc2VQYXRoIGluY2x1ZGVkXCIsICgpID0+IHtcbiAgICBjb25zdCB7IHN0YWNrLCBmdW5jdGlvbkdyb3VwcywgZnVuY3Rpb25Hcm91cEJlaGF2aW9ycywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9XG4gICAgICBzZXR1cChbXCJta3RcIl0sIHtcbiAgICAgICAgcm91dGVzRm9yOiAoKSA9PiBbXCIvcm9ib3RzLnR4dFwiXSxcbiAgICAgICAgYmFzZVBhdGg6IFwiL2Jhc2VcIixcbiAgICAgIH0pO1xuICAgIGV4cGVjdChcbiAgICAgICgpID0+XG4gICAgICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgICAgICAuLi5kaXN0cmlidXRpb25Qcm9wcyxcbiAgICAgICAgICBmdW5jdGlvbkdyb3VwcyxcbiAgICAgICAgICBmdW5jdGlvbkdyb3VwQmVoYXZpb3JzLFxuICAgICAgICAgIHB1YmxpY0RpckVudHJpZXM6IFt7IG5hbWU6IFwicm9ib3RzLnR4dFwiLCBpc0RpcmVjdG9yeTogZmFsc2UgfV0sXG4gICAgICAgIH0pLFxuICAgICkudG9UaHJvdygvZGVwbG95cyBhcyB0aGUgcGF0aCBwYXR0ZXJuIFwiXFwvYmFzZVxcL3JvYm90c1xcLnR4dFwiLyk7XG4gIH0pO1xuXG4gIGl0KFwiYWxsb3dzIGEgZ3JvdXAgcGF0dGVybiBiZXNpZGUgYSBwdWJsaWMvIGVudHJ5IGl0IGRvZXMgbm90IG92ZXJsYXBcIiwgKCkgPT4ge1xuICAgIC8vIGAvZG9jc2AgZXhhY3QgaXMgbm90IHVuZGVyIGBkb2NzLypgLCBhbmQgYGRvY3MvKmAgZG9lcyBub3QgbWF0Y2ggYC9kb2NzYC5cbiAgICBjb25zdCB7IHN0YWNrLCBmdW5jdGlvbkdyb3VwcywgZnVuY3Rpb25Hcm91cEJlaGF2aW9ycywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9XG4gICAgICBzZXR1cChbXCJkb2NzXCJdLCB7XG4gICAgICAgIHJvdXRlc0ZvcjogKCkgPT4gW1wiL2RvY3NcIl0sXG4gICAgICB9KTtcbiAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAuLi5kaXN0cmlidXRpb25Qcm9wcyxcbiAgICAgIGZ1bmN0aW9uR3JvdXBzLFxuICAgICAgZnVuY3Rpb25Hcm91cEJlaGF2aW9ycyxcbiAgICAgIHB1YmxpY0RpckVudHJpZXM6IFt7IG5hbWU6IFwiZG9jc1wiLCBpc0RpcmVjdG9yeTogdHJ1ZSB9XSxcbiAgICB9KTtcbiAgICBleHBlY3QocGF0aFBhdHRlcm5zKHN0YWNrKSkudG9FcXVhbChcbiAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1wiZG9jcy8qXCIsIFwiZG9jc1wiXSksXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJzZXJ2ZXMgYnVuZGxlcyB1bmRlciBhIHBhdGgtc3R5bGUgYXNzZXRQcmVmaXgsIHJld3JpdGluZyB0aGUgcHJlZml4IGF3YXlcIiwgKCkgPT4ge1xuICAgIC8vIE5leHQuanMgZW1pdHMgYDxhc3NldFByZWZpeD4vX25leHQvc3RhdGljLy4uLmAgZm9yIGV2ZXJ5IGJ1bmRsZSB3aGlsZSB0aGVcbiAgICAvLyBvYmplY3RzIGtlZXAgdGhlaXIgdW5wcmVmaXhlZCBTMyBrZXlzLCBzbyB3aXRob3V0IGEgYmVoYXZpb3Igb2YgaXRzIG93biB0aGVcbiAgICAvLyByZXF1ZXN0IGZhbGxzIHRocm91Z2ggdG8gdGhlIGNvbXB1dGUgb3JpZ2luIGFuZCA0MDRzIOKAlCB0aGUgZGVwbG95bWVudFxuICAgIC8vIHBhY2thZ2UgY2FycmllcyBubyBgLm5leHQvc3RhdGljYC4gTWVhc3VyZWQgYWdhaW5zdFxuICAgIC8vIGB0ZXN0L2UyZS9hcHAtZGlyL2Fzc2V0LXByZWZpeGAsIHdoZXJlIDIgb2YgNyBjYXNlcyBmYWlsZWQgb24gZXhhY3RseSB0aGF0LlxuICAgIGNvbnN0IHsgc3RhY2ssIGRpc3RyaWJ1dGlvblByb3BzIH0gPSBzZXR1cChbXSk7XG4gICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgLi4uZGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgICBhc3NldFByZWZpeDogXCIvY3VzdG9tLWFzc2V0LXByZWZpeFwiLFxuICAgIH0pO1xuICAgIC8vIEFoZWFkIG9mIHRoZSBiYXJlIGBfbmV4dC9zdGF0aWMqYCBpbiBub3RoaW5nIGJ1dCBsaXN0IHBvc2l0aW9uOyB0aGUgdHdvXG4gICAgLy8gcGF0dGVybnMgY2Fubm90IGJvdGggbWF0Y2ggb25lIHJlcXVlc3QsIHNvIG9yZGVyIGRvZXMgbm90IG1hdHRlciBoZXJlLlxuICAgIGV4cGVjdChwYXRoUGF0dGVybnMoc3RhY2spKS50b0VxdWFsKFtcbiAgICAgIFwiX25leHQvc3RhdGljKlwiLFxuICAgICAgXCIvY3VzdG9tLWFzc2V0LXByZWZpeC9fbmV4dC9zdGF0aWMqXCIsXG4gICAgICBcIl9uZXh0L2ltYWdlKlwiLFxuICAgIF0pO1xuICAgIGNvbnN0IGZucyA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjaykuZmluZFJlc291cmNlcyhcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpGdW5jdGlvblwiLFxuICAgICk7XG4gICAgY29uc3QgY29kZSA9IE9iamVjdC52YWx1ZXMoZm5zKVxuICAgICAgLm1hcCgoZm4pID0+IGZuLlByb3BlcnRpZXMuRnVuY3Rpb25Db2RlIGFzIHN0cmluZylcbiAgICAgIC5maW5kKChpdCkgPT4gaXQuaW5jbHVkZXMoXCJyZXF1ZXN0LnVyaS5zbGljZVwiKSk7XG4gICAgLy8gYFwiL2N1c3RvbS1hc3NldC1wcmVmaXhcIi5sZW5ndGhgLCBzbyBgL2N1c3RvbS1hc3NldC1wcmVmaXgvX25leHQvc3RhdGljL3hgXG4gICAgLy8gcmVhY2hlcyBTMyBhcyBgX25leHQvc3RhdGljL3hgLlxuICAgIGV4cGVjdChjb2RlKS50b0NvbnRhaW4oJ1wiXCIgKyByZXF1ZXN0LnVyaS5zbGljZSgyMCknKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWZ1c2VzIGFuIGFzc2V0UHJlZml4IHdoZW4gYW4gb3ZlcnJpZGUgYWxyZWFkeSBjbGFpbXMgVklFV0VSX1JFUVVFU1RcIiwgKCkgPT4ge1xuICAgIC8vIENsb3VkRnJvbnQgcGVybWl0cyBvbmUgZnVuY3Rpb24gcGVyIGV2ZW50IHR5cGUgcGVyIGJlaGF2aW9yLCBzbyB0aGVcbiAgICAvLyByZXdyaXRlIGFuZCB0aGUgb3ZlcnJpZGUgY2Fubm90IGNvZXhpc3Q6IHRoZSBzdGFjayBzeW50aGVkIGNsZWFubHkgYW5kIHdhc1xuICAgIC8vIHJlamVjdGVkIGF0IGRlcGxveSwgbmFtaW5nIG5laXRoZXIgdGhlIG92ZXJyaWRlIG5vciBgYXNzZXRQcmVmaXhgLlxuICAgIGNvbnN0IHsgc3RhY2ssIGRpc3RyaWJ1dGlvblByb3BzIH0gPSBzZXR1cChbXSk7XG4gICAgZXhwZWN0KFxuICAgICAgKCkgPT5cbiAgICAgICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgICAgIGFzc2V0UHJlZml4OiBcIi9jZG5cIixcbiAgICAgICAgICBvdmVycmlkZXM6IHtcbiAgICAgICAgICAgIHN0YXRpY0JlaGF2aW9yT3B0aW9uczoge1xuICAgICAgICAgICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogRnVuY3Rpb25FdmVudFR5cGUuVklFV0VSX1JFUVVFU1QsXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbjogbmV3IENsb3VkRnJvbnRGdW5jdGlvbihzdGFjaywgXCJVc2VyRm5cIiwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBGdW5jdGlvbkNvZGUuZnJvbUlubGluZShcbiAgICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHsgcmV0dXJuIGV2ZW50LnJlcXVlc3Q7IH1cIixcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICkudG9UaHJvdyhcbiAgICAgIC9hc3NvY2lhdGVzIGEgQ2xvdWRGcm9udCBmdW5jdGlvbiB3aXRoIHZpZXdlci1yZXF1ZXN0LCBidXQgc2VydmluZyBgYXNzZXRQcmVmaXhgLyxcbiAgICApO1xuICB9KTtcblxuICBjb25zdCB1c2VyRm4gPSAoc3RhY2s6IFN0YWNrLCBldmVudFR5cGU6IEZ1bmN0aW9uRXZlbnRUeXBlKSA9PiAoe1xuICAgIGV2ZW50VHlwZSxcbiAgICBmdW5jdGlvbjogbmV3IENsb3VkRnJvbnRGdW5jdGlvbihzdGFjaywgYFVzZXJGbiR7ZXZlbnRUeXBlfWAsIHtcbiAgICAgIGNvZGU6IEZ1bmN0aW9uQ29kZS5mcm9tSW5saW5lKFxuICAgICAgICBcImZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHsgcmV0dXJuIGV2ZW50LnJlcXVlc3QgfHwgZXZlbnQucmVzcG9uc2U7IH1cIixcbiAgICAgICksXG4gICAgfSksXG4gIH0pO1xuXG4gIGl0LmVhY2goW1wiZHluYW1pY0JlaGF2aW9yT3B0aW9uc1wiLCBcImltYWdlQmVoYXZpb3JPcHRpb25zXCJdIGFzIGNvbnN0KShcbiAgICBcInJlZnVzZXMgYSAlcyBvdmVycmlkZSB0aGF0IHdvdWxkIHJlcGxhY2UgdGhlIHgtZm9yd2FyZGVkLWhvc3QgZnVuY3Rpb25cIixcbiAgICAob3ZlcnJpZGVOYW1lKSA9PiB7XG4gICAgICAvLyBUaGUgcnVudGltZSB0cnVzdHMgYHgtZm9yd2FyZGVkLWhvc3RgIG9uIEZ1bmN0aW9uIFVSTCBldmVudHMgYmVjYXVzZVxuICAgICAgLy8gdGhpcyBmdW5jdGlvbiBvdmVyd3JpdGVzIGl0OyByZXBsYWNlZCwgYSB2aWV3ZXIncyBvd24gaGVhZGVyIHJlYWNoZXMgaXQuXG4gICAgICBjb25zdCB7IHN0YWNrLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW10pO1xuICAgICAgZXhwZWN0KFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgICAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgICAgICAgIFtvdmVycmlkZU5hbWVdOiB7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb25Bc3NvY2lhdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgIHVzZXJGbihzdGFjaywgRnVuY3Rpb25FdmVudFR5cGUuVklFV0VSX1JFUVVFU1QpLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgKS50b1Rocm93KFxuICAgICAgICBuZXcgUmVnRXhwKGBvdmVycmlkZXNcXFxcLiR7b3ZlcnJpZGVOYW1lfVxcXFwuZnVuY3Rpb25Bc3NvY2lhdGlvbnNgKSxcbiAgICAgICk7XG4gICAgfSxcbiAgKTtcblxuICBpdChcImtlZXBzIHRoZSB4LWZvcndhcmRlZC1ob3N0IGZ1bmN0aW9uIG5leHQgdG8gYW4gb3ZlcnJpZGUncyBvdGhlciBhc3NvY2lhdGlvbnNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgc3RhY2ssIGRpc3RyaWJ1dGlvblByb3BzIH0gPSBzZXR1cChbXSk7XG4gICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgLi4uZGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgICBvdmVycmlkZXM6IHtcbiAgICAgICAgZHluYW1pY0JlaGF2aW9yT3B0aW9uczoge1xuICAgICAgICAgIGZ1bmN0aW9uQXNzb2NpYXRpb25zOiBbXG4gICAgICAgICAgICB1c2VyRm4oc3RhY2ssIEZ1bmN0aW9uRXZlbnRUeXBlLlZJRVdFUl9SRVNQT05TRSksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgY29uZmlnID0gT2JqZWN0LnZhbHVlcyhcbiAgICAgIFRlbXBsYXRlLmZyb21TdGFjayhzdGFjaykuZmluZFJlc291cmNlcyhcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCIpLFxuICAgIClbMF0uUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWc7XG4gICAgY29uc3QgZXZlbnRUeXBlcyA9IChcbiAgICAgIGNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvci5GdW5jdGlvbkFzc29jaWF0aW9ucyBhcyBBcnJheTx7XG4gICAgICAgIEV2ZW50VHlwZTogc3RyaW5nO1xuICAgICAgfT5cbiAgICApLm1hcCgoYXNzb2NpYXRpb24pID0+IGFzc29jaWF0aW9uLkV2ZW50VHlwZSk7XG4gICAgZXhwZWN0KGV2ZW50VHlwZXMuc29ydCgpKS50b0VxdWFsKFtcInZpZXdlci1yZXF1ZXN0XCIsIFwidmlld2VyLXJlc3BvbnNlXCJdKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXdyaXRlcyBhbiBhc3NldFByZWZpeCBiYWNrIG9udG8gdGhlIGJhc2VQYXRoIFMzIGtleXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgc3RhY2ssIGRpc3RyaWJ1dGlvblByb3BzIH0gPSBzZXR1cChbXSwgeyBiYXNlUGF0aDogXCIvYmFzZVwiIH0pO1xuICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgYXNzZXRQcmVmaXg6IFwiL2NkblwiLFxuICAgIH0pO1xuICAgIGV4cGVjdChwYXRoUGF0dGVybnMoc3RhY2spKS50b0NvbnRhaW4oXCIvY2RuL19uZXh0L3N0YXRpYypcIik7XG4gICAgY29uc3QgZm5zID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5maW5kUmVzb3VyY2VzKFxuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkZ1bmN0aW9uXCIsXG4gICAgKTtcbiAgICBjb25zdCBjb2RlID0gT2JqZWN0LnZhbHVlcyhmbnMpXG4gICAgICAubWFwKChmbikgPT4gZm4uUHJvcGVydGllcy5GdW5jdGlvbkNvZGUgYXMgc3RyaW5nKVxuICAgICAgLmZpbmQoKGl0KSA9PiBpdC5pbmNsdWRlcyhcInJlcXVlc3QudXJpLnNsaWNlXCIpKTtcbiAgICAvLyBUaGUgb2JqZWN0cyBhcmUgYXQgYGJhc2UvX25leHQvc3RhdGljLy4uLmA6IGBhc3NldFByZWZpeGAgcmVwbGFjZXMgdGhlXG4gICAgLy8gYGJhc2VQYXRoYCBwcmVmaXggaW4gdGhlIFVSTCwgc28gdGhlIHJld3JpdGUgaGFzIHRvIHB1dCBpdCBiYWNrLlxuICAgIGV4cGVjdChjb2RlKS50b0NvbnRhaW4oJ1wiL2Jhc2VcIiArIHJlcXVlc3QudXJpLnNsaWNlKDQpJyk7XG4gIH0pO1xuXG4gIGl0KFwic2VydmVzIGJ1bmRsZXMgdW5kZXIgdGhlIHBhdGggYW4gYWJzb2x1dGUgYXNzZXRQcmVmaXggY2Fycmllc1wiLCAoKSA9PiB7XG4gICAgLy8gYG5leHQgYnVpbGRgIGNvbXBpbGVzIGEgYC9jdXN0b20tYXNzZXQtcHJlZml4L19uZXh0LzpwYXRoKyDihpIgL19uZXh0LzpwYXRoK2BcbiAgICAvLyByZXdyaXRlIG9mIGl0cyBvd24gZm9yIGFuIGFic29sdXRlIHByZWZpeCB3aXRoIGEgcGF0aCwgc28gYG5leHQgc3RhcnRgIHNlcnZlc1xuICAgIC8vIGV2ZXJ5IGJ1bmRsZSB1bmRlciB0aGF0IHBhdGggYXMgd2VsbC4gQSBDRE4gZnJvbnRpbmcgdGhpcyBkaXN0cmlidXRpb24gdGhlcmVcbiAgICAvLyBnZXRzIHRoZSBzYW1lIHJlcXVlc3QsIGFuZCB3aXRob3V0IGEgYmVoYXZpb3IgaXQgcmVhY2hlcyB0aGUgY29tcHV0ZSBvcmlnaW5cbiAgICAvLyBhbmQgNDA0cy4gTWVhc3VyZWQgYWdhaW5zdCBgdGVzdC9lMmUvYXBwLWRpci9hc3NldC1wcmVmaXgtYWJzb2x1dGVgLCB3aG9zZVxuICAgIC8vIG9uZSBjYXNlIGZhaWxlZCBvbiBleGFjdGx5IHRoYXQuXG4gICAgZm9yIChjb25zdCBhc3NldFByZWZpeCBvZiBbXG4gICAgICBcImh0dHBzOi8vZXhhbXBsZS52ZXJjZWwuc2gvY3VzdG9tLWFzc2V0LXByZWZpeFwiLFxuICAgICAgXCIvL2V4YW1wbGUudmVyY2VsLnNoL2N1c3RvbS1hc3NldC1wcmVmaXgvXCIsXG4gICAgXSkge1xuICAgICAgY29uc3QgeyBzdGFjaywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9IHNldHVwKFtdKTtcbiAgICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgICAgLi4uZGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgICAgIGFzc2V0UHJlZml4LFxuICAgICAgfSk7XG4gICAgICBleHBlY3QocGF0aFBhdHRlcm5zKHN0YWNrKSkudG9Db250YWluKFxuICAgICAgICBcIi9jdXN0b20tYXNzZXQtcHJlZml4L19uZXh0L3N0YXRpYypcIixcbiAgICAgICk7XG4gICAgICBjb25zdCBjb2RlID0gT2JqZWN0LnZhbHVlcyhcbiAgICAgICAgVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5maW5kUmVzb3VyY2VzKFwiQVdTOjpDbG91ZEZyb250OjpGdW5jdGlvblwiKSxcbiAgICAgIClcbiAgICAgICAgLm1hcCgoZm4pID0+IGZuLlByb3BlcnRpZXMuRnVuY3Rpb25Db2RlIGFzIHN0cmluZylcbiAgICAgICAgLmZpbmQoKGl0KSA9PiBpdC5pbmNsdWRlcyhcInJlcXVlc3QudXJpLnNsaWNlXCIpKTtcbiAgICAgIGV4cGVjdChjb2RlKS50b0NvbnRhaW4oJ1wiXCIgKyByZXF1ZXN0LnVyaS5zbGljZSgyMCknKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwiYWRkcyBubyBiZWhhdmlvciBmb3IgYW4gYXNzZXRQcmVmaXggdGhhdCBuZWVkcyBub25lXCIsICgpID0+IHtcbiAgICAvLyBBbiBhYnNvbHV0ZSBwcmVmaXggd2l0aCBubyBwYXRoIG9mIGl0cyBvd24gbmFtZXMgYW4gb3JpZ2luIHRoaXMgZGlzdHJpYnV0aW9uXG4gICAgLy8gZG9lcyBub3Qgc2VydmUsIGFuZCBhIHByZWZpeCBlcXVhbCB0byB0aGUgYmFzZVBhdGggb25lIGlzIHdoYXQgTmV4dC5qc1xuICAgIC8vIGRlZmF1bHRzIHRvIHdoZW4gYGJhc2VQYXRoYCBpcyBzZXQg4oCUIGBfbmV4dC9zdGF0aWMqYCBhbHJlYWR5IHJlc29sdmVzIHVuZGVyXG4gICAgLy8gaXQsIGFuZCBhIGR1cGxpY2F0ZSBwYXR0ZXJuIHdvdWxkIG1ha2UgQ2xvdWRGcm9udCByZWplY3QgdGhlIGRpc3RyaWJ1dGlvbi5cbiAgICBmb3IgKGNvbnN0IFthc3NldFByZWZpeCwgYmFzZVBhdGhdIG9mIFtcbiAgICAgIFtcImh0dHBzOi8vY2RuLmV4YW1wbGUuY29tXCIsIHVuZGVmaW5lZF0sXG4gICAgICBbXCJodHRwczovL2Nkbi5leGFtcGxlLmNvbS9cIiwgdW5kZWZpbmVkXSxcbiAgICAgIFtcIi8vY2RuLmV4YW1wbGUuY29tXCIsIHVuZGVmaW5lZF0sXG4gICAgICBbXCIvYmFzZVwiLCBcIi9iYXNlXCJdLFxuICAgICAgW1wiaHR0cHM6Ly9jZG4uZXhhbXBsZS5jb20vYmFzZVwiLCBcIi9iYXNlXCJdLFxuICAgICAgW1wiXCIsIHVuZGVmaW5lZF0sXG4gICAgXSBhcyBjb25zdCkge1xuICAgICAgY29uc3QgeyBzdGFjaywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9IHNldHVwKFtdLCB7IGJhc2VQYXRoIH0pO1xuICAgICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgICAuLi5kaXN0cmlidXRpb25Qcm9wcyxcbiAgICAgICAgYXNzZXRQcmVmaXgsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBhdHRlcm5zID0gcGF0aFBhdHRlcm5zKHN0YWNrKTtcbiAgICAgIGV4cGVjdChwYXR0ZXJucy5maWx0ZXIoKHApID0+IHAuaW5jbHVkZXMoXCJfbmV4dC9zdGF0aWNcIikpKS50b0hhdmVMZW5ndGgoXG4gICAgICAgIDEsXG4gICAgICApO1xuICAgICAgLy8gVGhlIHgtZm9yd2FyZGVkLWhvc3QgZnVuY3Rpb24gaXMgYWx3YXlzIHRoZXJlIG9uIGZ1bmN0aW9uIGNvbXB1dGU7IHRoZVxuICAgICAgLy8gcmV3cml0ZSBvbmUgc2hvdWxkIG5vdCBiZS5cbiAgICAgIGNvbnN0IGNvZGVzID0gT2JqZWN0LnZhbHVlcyhcbiAgICAgICAgVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5maW5kUmVzb3VyY2VzKFwiQVdTOjpDbG91ZEZyb250OjpGdW5jdGlvblwiKSxcbiAgICAgICkubWFwKChmbikgPT4gZm4uUHJvcGVydGllcy5GdW5jdGlvbkNvZGUgYXMgc3RyaW5nKTtcbiAgICAgIGV4cGVjdChjb2Rlcy5zb21lKChpdCkgPT4gaXQuaW5jbHVkZXMoXCJyZXF1ZXN0LnVyaS5zbGljZVwiKSkpLnRvQmUoZmFsc2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoXCJjb3VudHMgdGhlIGFzc2V0UHJlZml4IGJlaGF2aW9yIGFnYWluc3QgdGhlIGJ1ZGdldFwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzdGFjaywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9IHNldHVwKFtdLCB7XG4gICAgICBwdWJsaWNEaXJFbnRyaWVzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyMiB9LCAoXywgaSkgPT4gYGZpbGUke2l9LnR4dGApLFxuICAgIH0pO1xuICAgIC8vIDMgZml4ZWQgKyAyMiBwdWJsaWMgPSAyNSwgZXhhY3RseSB0aGUgbGltaXQ7IHRoZSBhc3NldFByZWZpeCBvbmUgaXMgdGhlXG4gICAgLy8gMjZ0aCwgYW5kIGEgbGltaXQgZXJyb3IgdGhhdCBkaWQgbm90IGNvdW50IGl0IHdvdWxkIGNvbWUgYXMgYSBkZXBsb3lcbiAgICAvLyBmYWlsdXJlIGluc3RlYWQuXG4gICAgZXhwZWN0KFxuICAgICAgKCkgPT5cbiAgICAgICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgICAgIGFzc2V0UHJlZml4OiBcIi9jZG5cIixcbiAgICAgICAgICBtYXhDYWNoZUJlaGF2aW9yczogMjUsXG4gICAgICAgIH0pLFxuICAgICkudG9UaHJvdygvMjYgQ2xvdWRGcm9udCBjYWNoZSBiZWhhdmlvcnMuKjQgdXNlZCBieSBjZGstbmV4dGpzIGl0c2VsZi9zKTtcbiAgfSk7XG5cbiAgaXQoXCJkb2VzIG5vdCBjYWNoZSBhIGR5bmFtaWMgcmVzcG9uc2UgdGhhdCBzZW5kcyBubyBDYWNoZS1Db250cm9sXCIsICgpID0+IHtcbiAgICAvLyBDREsncyBgQ2FjaGVQb2xpY3lgIGRlZmF1bHQgaXMgYSBkYXksIHdoaWNoIGNhY2hlZCBldmVyeSByb3V0ZSBoYW5kbGVyXG4gICAgLy8gd2l0aG91dCBhIGBDYWNoZS1Db250cm9sYCAtIGAvYXBpL2VjaG9gIGluIGFwcC1wbGF5Z3JvdW5kIC0gZm9yIDI0IGhvdXJzLlxuICAgIGNvbnN0IHsgc3RhY2ssIGRpc3RyaWJ1dGlvblByb3BzIH0gPSBzZXR1cChbXSk7XG4gICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwgZGlzdHJpYnV0aW9uUHJvcHMpO1xuICAgIFRlbXBsYXRlLmZyb21TdGFjayhzdGFjaykuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFxuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkNhY2hlUG9saWN5XCIsXG4gICAgICB7XG4gICAgICAgIENhY2hlUG9saWN5Q29uZmlnOiBNYXRjaC5vYmplY3RMaWtlKHtcbiAgICAgICAgICBDb21tZW50OiBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKFwiRHluYW1pY1wiKSxcbiAgICAgICAgICBEZWZhdWx0VFRMOiAwLFxuICAgICAgICAgIE1pblRUTDogMCxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwid2lsZGNhcmRzIGEgcHVibGljLyBuYW1lIENsb3VkRnJvbnQgY2Fubm90IHNwZWxsXCIsICgpID0+IHtcbiAgICAvLyBgcHVibGljL2hlbGxvIHdvcmxkLmpwZ2AgaXMgYSB2YWxpZCBOZXh0LmpzIGFzc2V0LCBidXQgYSBzcGFjZSBjYW5ub3QgYXBwZWFyXG4gICAgLy8gaW4gYSBwYXRoIHBhdHRlcm4sIHNvIGNkay1uZXh0anMgdGhyZXcgYXQgc3ludGggYW5kIHRoZSBhcHAgY291bGQgbm90IGJlXG4gICAgLy8gZGVwbG95ZWQgYXQgYWxsLiBDbG91ZEZyb250IG1hdGNoZXMgdGhlICpkZWNvZGVkKiBwYXRoLCBhbmQgYD9gIG1hdGNoZXMgb25lXG4gICAgLy8gYnl0ZSBvZiBpdCwgc28gb25lIGA/YCBwZXIgVVRGLTggYnl0ZSBpcyB0aGUgbmFycm93ZXN0IHBhdHRlcm4gdGhhdFxuICAgIC8vIG1hdGNoZXMuIE5vdCBvbmUgcGVyIHBlcmNlbnQtZW5jb2RlZCBjaGFyYWN0ZXI6IGBoZWxsbz8/P3dvcmxkLmpwZ2BcbiAgICAvLyBkZXBsb3lzIGFuZCB0aGVuIG5ldmVyIG1hdGNoZXMsIHdoaWNoIGlzIGEgNDA0IHJhdGhlciB0aGFuIGEgc3ludGggZXJyb3IuXG4gICAgY29uc3QgeyBzdGFjaywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9IHNldHVwKFtdLCB7XG4gICAgICBwdWJsaWNEaXJFbnRyaWVzOiBbXCJoZWxsbyB3b3JsZC5qcGdcIiwgXCLDpMO2w7zFocSNxZnDrS5wbmdcIiwgXCJmYXZpY29uLmljb1wiXSxcbiAgICB9KTtcbiAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCBkaXN0cmlidXRpb25Qcm9wcyk7XG4gICAgZXhwZWN0KHBhdGhQYXR0ZXJucyhzdGFjaykpLnRvRXF1YWwoXG4gICAgICBleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgICAgXCJoZWxsbz93b3JsZC5qcGdcIixcbiAgICAgICAgLy8gNyBjaGFyYWN0ZXJzLCAyIFVURi04IGJ5dGVzIGVhY2guXG4gICAgICAgIGAke1wiP1wiLnJlcGVhdCgxNCl9LnBuZ2AsXG4gICAgICAgIFwiZmF2aWNvbi5pY29cIixcbiAgICAgIF0pLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwid2lsZGNhcmRzIGEgcHVibGljLyBkaXJlY3RvcnkgbmFtZSB0aGUgc2FtZSB3YXlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgc3RhY2ssIGRpc3RyaWJ1dGlvblByb3BzIH0gPSBzZXR1cChbXSk7XG4gICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgLi4uZGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgICBwdWJsaWNEaXJFbnRyaWVzOiBbeyBuYW1lOiBcIm15IGltYWdlc1wiLCBpc0RpcmVjdG9yeTogdHJ1ZSB9XSxcbiAgICB9KTtcbiAgICBleHBlY3QocGF0aFBhdHRlcm5zKHN0YWNrKSkudG9Db250YWluKFwibXk/aW1hZ2VzLypcIik7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyBhIHB1YmxpYy8gbmFtZSB0b28gbG9uZyB0byBleHByZXNzIGFzIGEgcGF0aCBwYXR0ZXJuXCIsICgpID0+IHtcbiAgICBjb25zdCB7IHN0YWNrLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW10sIHtcbiAgICAgIHB1YmxpY0RpckVudHJpZXM6IFtgJHtcIsOkXCIucmVwZWF0KDEzMCl9LnBuZ2BdLFxuICAgIH0pO1xuICAgIGV4cGVjdChcbiAgICAgICgpID0+IG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIGRpc3RyaWJ1dGlvblByb3BzKSxcbiAgICApLnRvVGhyb3coL25lZWRzIGEgMjY0LWNoYXJhY3RlciBDbG91ZEZyb250IHBhdGggcGF0dGVybi8pO1xuICB9KTtcblxuICBpdChcInNraXBzIGEgcHVibGljLyBlbnRyeSB3aG9zZSBwYXR0ZXJuIHdvdWxkIGJlIHdpbGRjYXJkcyBhbG9uZVwiLCAoKSA9PiB7XG4gICAgLy8gYNGE0L7RgtC+L2AgaXMgYD8/Pz8/Pz8/LypgLCB3aGljaCBtYXRjaGVzIGFueSA4LWJ5dGUgZmlyc3Qgc2VnbWVudC4gUHVibGljXG4gICAgLy8gYmVoYXZpb3JzIGFyZSBhZGRlZCBhaGVhZCBvZiB0aGUgY29tcHV0ZSBvbmVzLCBzbyBgL3Byb2R1Y3RzLzQyYCB3b3VsZCBnb1xuICAgIC8vIHRvIFMzIGFuZCA0MDMuIFRoZSBlbnRyeSBnZXRzIG5vIGJlaGF2aW9yIGFuZCBhIHdhcm5pbmcgaW5zdGVhZC5cbiAgICBjb25zdCB7IHN0YWNrLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW10pO1xuICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgcHVibGljRGlyRW50cmllczogW1xuICAgICAgICB7IG5hbWU6IFwi0YTQvtGC0L5cIiwgaXNEaXJlY3Rvcnk6IHRydWUgfSxcbiAgICAgICAgeyBuYW1lOiBcIuWbvlwiLCBpc0RpcmVjdG9yeTogZmFsc2UgfSxcbiAgICAgICAgeyBuYW1lOiBcItGE0L7RgtC+LTFcIiwgaXNEaXJlY3Rvcnk6IHRydWUgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgY29uc3QgcGF0dGVybnMgPSBwYXRoUGF0dGVybnMoc3RhY2spO1xuICAgIGV4cGVjdChwYXR0ZXJucykubm90LnRvQ29udGFpbihgJHtcIj9cIi5yZXBlYXQoOCl9LypgKTtcbiAgICBleHBlY3QocGF0dGVybnMpLm5vdC50b0NvbnRhaW4oXCI/Pz9cIik7XG4gICAgLy8gT25lIGxpdGVyYWwgY2hhcmFjdGVyIGtlZXBzIGEgcGF0dGVybiBuYXJyb3cgZW5vdWdoIHRvIGtlZXAuXG4gICAgZXhwZWN0KHBhdHRlcm5zKS50b0NvbnRhaW4oYCR7XCI/XCIucmVwZWF0KDgpfS0xLypgKTtcbiAgICBBbm5vdGF0aW9ucy5mcm9tU3RhY2soc3RhY2spLmhhc1dhcm5pbmcoXG4gICAgICBcIipcIixcbiAgICAgIE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoJ1wi0YTQvtGC0L5cIiwgXCLlm75cIicpLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwiZG9lcyBub3QgY291bnQgYSBza2lwcGVkIHB1YmxpYy8gZW50cnkgYWdhaW5zdCB0aGUgYnVkZ2V0XCIsICgpID0+IHtcbiAgICBjb25zdCB7IHN0YWNrLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW10sIHtcbiAgICAgIHB1YmxpY0RpckVudHJpZXM6IFtcbiAgICAgICAgLi4uQXJyYXkuZnJvbSh7IGxlbmd0aDogMjIgfSwgKF8sIGkpID0+IGBmaWxlJHtpfS50eHRgKSxcbiAgICAgICAgXCLlm75cIixcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgLy8gMyBmaXhlZCArIDIyID0gMjUsIGV4YWN0bHkgdGhlIGxpbWl0OyB0aGUgc2tpcHBlZCBlbnRyeSBhZGRzIG5vdGhpbmcuXG4gICAgZXhwZWN0KFxuICAgICAgKCkgPT5cbiAgICAgICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgICAgIG1heENhY2hlQmVoYXZpb3JzOiAyNSxcbiAgICAgICAgfSksXG4gICAgKS5ub3QudG9UaHJvdygpO1xuICB9KTtcblxuICBpdChcImNoZWNrcyB0aGUgbGVuZ3RoIG9mIHRoZSBmaW5hbCBwYXR0ZXJuLCBiYXNlUGF0aCBhbmQgLyogaW5jbHVkZWRcIiwgKCkgPT4ge1xuICAgIC8vIDgzIHRocmVlLWJ5dGUgY2hhcmFjdGVycyArIFwiLnBkZlwiIGlzIGEgMjUzLWNoYXJhY3RlciBwYXR0ZXJuIG9uIGl0cyBvd24sXG4gICAgLy8gdW5kZXIgdGhlIGxpbWl0OyBgL2RvY3MvYCBpbiBmcm9udCB0YWtlcyBpdCB0byAyNTksIHdoaWNoIENsb3VkRnJvbnRcbiAgICAvLyByZWplY3RzIGF0IGRlcGxveS5cbiAgICBjb25zdCBuYW1lID0gYCR7XCLlm75cIi5yZXBlYXQoODMpfS5wZGZgO1xuICAgIGNvbnN0IHsgc3RhY2ssIGRpc3RyaWJ1dGlvblByb3BzIH0gPSBzZXR1cChbXSwge1xuICAgICAgcHVibGljRGlyRW50cmllczogW25hbWVdLFxuICAgIH0pO1xuICAgIGV4cGVjdChcbiAgICAgICgpID0+XG4gICAgICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgICAgICAuLi5kaXN0cmlidXRpb25Qcm9wcyxcbiAgICAgICAgICBiYXNlUGF0aDogXCIvZG9jc1wiLFxuICAgICAgICB9KSxcbiAgICApLnRvVGhyb3coL25lZWRzIGEgMjU5LWNoYXJhY3RlciBDbG91ZEZyb250IHBhdGggcGF0dGVybi8pO1xuXG4gICAgY29uc3QgeyBzdGFjazogZGlyU3RhY2ssIGRpc3RyaWJ1dGlvblByb3BzOiBkaXJQcm9wcyB9ID0gc2V0dXAoW10pO1xuICAgIGV4cGVjdChcbiAgICAgICgpID0+XG4gICAgICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oZGlyU3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgICAgICAuLi5kaXJQcm9wcyxcbiAgICAgICAgICAvLyAyNTQgY2hhcmFjdGVycywgdW5kZXIgdGhlIGxpbWl0IHVudGlsIHRoZSBgLypgLlxuICAgICAgICAgIHB1YmxpY0RpckVudHJpZXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogYGFiJHtcIuWbvlwiLnJlcGVhdCg4NCl9YCwgaXNEaXJlY3Rvcnk6IHRydWUgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICApLnRvVGhyb3coL25lZWRzIGEgMjU2LWNoYXJhY3Rlci8pO1xuICB9KTtcblxuICBpdChcImRyb3BzIHRoZSBjYWNoZSBrZXkgd2hlbiBhbiBvdmVycmlkZSBkaXNhYmxlcyBkeW5hbWljIGNhY2hpbmdcIiwgKCkgPT4ge1xuICAgIC8vIENsb3VkRnJvbnQgcmVqZWN0cyBhIHBvbGljeSB0aGF0IGNhY2hlcyBub3RoaW5nIGJ1dCBrZXlzIG9uIGhlYWRlcnMuIENES1xuICAgIC8vIHVzZWQgdG8gcmFpc2UgYG1heFR0bDogMGAgdG8gdGhlIGRheS1sb25nIGRlZmF1bHQsIHNvIHRoZSBvdmVycmlkZVxuICAgIC8vIGRlcGxveWVkOyB3aXRoIGEgZGVmYXVsdCBvZiAwIGl0IGlzIGhvbm9yZWQsIGFuZCBtdXN0IHN0YXkgZGVwbG95YWJsZS5cbiAgICBjb25zdCB7IHN0YWNrLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW10pO1xuICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgIGR5bmFtaWNDYWNoZVBvbGljeVByb3BzOiB7IG1heFR0bDogRHVyYXRpb24uc2Vjb25kcygwKSB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spLmhhc1Jlc291cmNlUHJvcGVydGllcyhcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpDYWNoZVBvbGljeVwiLFxuICAgICAge1xuICAgICAgICBDYWNoZVBvbGljeUNvbmZpZzogTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgICAgQ29tbWVudDogTWF0Y2guc3RyaW5nTGlrZVJlZ2V4cChcIkR5bmFtaWNcIiksXG4gICAgICAgICAgRGVmYXVsdFRUTDogMCxcbiAgICAgICAgICBNYXhUVEw6IDAsXG4gICAgICAgICAgTWluVFRMOiAwLFxuICAgICAgICAgIFBhcmFtZXRlcnNJbkNhY2hlS2V5QW5kRm9yd2FyZGVkVG9PcmlnaW46IHtcbiAgICAgICAgICAgIENvb2tpZXNDb25maWc6IHsgQ29va2llQmVoYXZpb3I6IFwibm9uZVwiIH0sXG4gICAgICAgICAgICBFbmFibGVBY2NlcHRFbmNvZGluZ0Jyb3RsaTogZmFsc2UsXG4gICAgICAgICAgICBFbmFibGVBY2NlcHRFbmNvZGluZ0d6aXA6IGZhbHNlLFxuICAgICAgICAgICAgSGVhZGVyc0NvbmZpZzogeyBIZWFkZXJCZWhhdmlvcjogXCJub25lXCIgfSxcbiAgICAgICAgICAgIFF1ZXJ5U3RyaW5nc0NvbmZpZzogeyBRdWVyeVN0cmluZ0JlaGF2aW9yOiBcIm5vbmVcIiB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICApO1xuICB9KTtcblxuICBpdChcImtlZXBzIHRoZSBjYWNoZSBrZXkgd2hlbiBhIHplcm8gbWF4VHRsIGlzIHJhaXNlZCBieSBhbm90aGVyIFRUTFwiLCAoKSA9PiB7XG4gICAgLy8gQ0RLIHJhaXNlcyBgbWF4VHRsYCB0byBgZGVmYXVsdFR0bGAsIHNvIHRoaXMgcG9saWN5IGNhY2hlcyBmb3IgYW4gaG91ci5cbiAgICAvLyBEcm9wcGluZyB0aGUga2V5IGZvciBpdCB3b3VsZCBzZXJ2ZSBvbmUgdmlld2VyJ3MgcGFnZSB0byBldmVyeSB2aWV3ZXIuXG4gICAgY29uc3QgeyBzdGFjaywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9IHNldHVwKFtdKTtcbiAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAuLi5kaXN0cmlidXRpb25Qcm9wcyxcbiAgICAgIG92ZXJyaWRlczoge1xuICAgICAgICBkeW5hbWljQ2FjaGVQb2xpY3lQcm9wczoge1xuICAgICAgICAgIG1heFR0bDogRHVyYXRpb24uc2Vjb25kcygwKSxcbiAgICAgICAgICBkZWZhdWx0VHRsOiBEdXJhdGlvbi5ob3VycygxKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6Q2FjaGVQb2xpY3lcIixcbiAgICAgIHtcbiAgICAgICAgQ2FjaGVQb2xpY3lDb25maWc6IE1hdGNoLm9iamVjdExpa2Uoe1xuICAgICAgICAgIENvbW1lbnQ6IE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoXCJEeW5hbWljXCIpLFxuICAgICAgICAgIE1heFRUTDogMzYwMCxcbiAgICAgICAgICBQYXJhbWV0ZXJzSW5DYWNoZUtleUFuZEZvcndhcmRlZFRvT3JpZ2luOiBNYXRjaC5vYmplY3RMaWtlKHtcbiAgICAgICAgICAgIENvb2tpZXNDb25maWc6IHsgQ29va2llQmVoYXZpb3I6IFwiYWxsXCIgfSxcbiAgICAgICAgICAgIFF1ZXJ5U3RyaW5nc0NvbmZpZzogeyBRdWVyeVN0cmluZ0JlaGF2aW9yOiBcImFsbFwiIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICApO1xuICB9KTtcblxuICBpdChcImtleXMgdGhlIGR5bmFtaWMgY2FjaGUgb25seSBvbiBoZWFkZXJzIHRoZSBvcmlnaW4gcmVhZHNcIiwgKCkgPT4ge1xuICAgIC8vIGB4LW1hdGNoZWQtcGF0aGAgaXMgc3RyaXBwZWQgYnkgdGhlIHJ1bnRpbWUgYW5kIGB4LW5leHQtY2FjaGUtdGFnc2AgaXNcbiAgICAvLyBuZXZlciBzZW50IGJ5IHZpZXdlcnM6IGtleWluZyBvbiBlaXRoZXIgc3BlbmRzIGEgaGVhZGVyIHNsb3QgYW5kIGxldHMgYVxuICAgIC8vIGNsaWVudCBmcmFnbWVudCB0aGUgY2FjaGUgZm9yIG5vdGhpbmcuXG4gICAgY29uc3QgeyBzdGFjaywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9IHNldHVwKFtdKTtcbiAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCBkaXN0cmlidXRpb25Qcm9wcyk7XG4gICAgY29uc3QgcG9saWNpZXMgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spLmZpbmRSZXNvdXJjZXMoXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6Q2FjaGVQb2xpY3lcIixcbiAgICAgIHtcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIENhY2hlUG9saWN5Q29uZmlnOiB7IENvbW1lbnQ6IE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoXCJEeW5hbWljXCIpIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gICAgY29uc3QgW3BvbGljeV0gPSBPYmplY3QudmFsdWVzKHBvbGljaWVzKTtcbiAgICBjb25zdCBoZWFkZXJzOiBzdHJpbmdbXSA9XG4gICAgICBwb2xpY3kuUHJvcGVydGllcy5DYWNoZVBvbGljeUNvbmZpZ1xuICAgICAgICAuUGFyYW1ldGVyc0luQ2FjaGVLZXlBbmRGb3J3YXJkZWRUb09yaWdpbi5IZWFkZXJzQ29uZmlnLkhlYWRlcnM7XG4gICAgZXhwZWN0KGhlYWRlcnMpLm5vdC50b0NvbnRhaW4oXCJ4LW1hdGNoZWQtcGF0aFwiKTtcbiAgICBleHBlY3QoaGVhZGVycykubm90LnRvQ29udGFpbihcIngtbmV4dC1jYWNoZS10YWdzXCIpO1xuICAgIGV4cGVjdChoZWFkZXJzKS50b0NvbnRhaW4oXCJyc2NcIik7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyBzcGxpdHRpbmcgb24gYSBkZXBsb3ltZW50IHR5cGUgdGhhdCBjYW5ub3Qgcm91dGUgaXRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgc3RhY2ssIGZ1bmN0aW9uR3JvdXBzLCBmdW5jdGlvbkdyb3VwQmVoYXZpb3JzLCBkaXN0cmlidXRpb25Qcm9wcyB9ID1cbiAgICAgIHNldHVwKFtcImFwaVwiXSk7XG4gICAgZXhwZWN0KFxuICAgICAgKCkgPT5cbiAgICAgICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgICAgIG5leHRqc1R5cGU6IE5leHRqc1R5cGUuR0xPQkFMX0NPTlRBSU5FUlMsXG4gICAgICAgICAgbG9hZEJhbGFuY2VyOiB1bmRlZmluZWQsXG4gICAgICAgICAgZnVuY3Rpb25Hcm91cHMsXG4gICAgICAgICAgZnVuY3Rpb25Hcm91cEJlaGF2aW9ycyxcbiAgICAgICAgfSksXG4gICAgKS50b1Rocm93KC9vbmx5IHN1cHBvcnRlZCBieSBOZXh0anNHbG9iYWxGdW5jdGlvbnMvKTtcbiAgfSk7XG59KTtcblxuLyoqXG4gKiBUaGUgdmlld2VyLXJlcXVlc3QgZnVuY3Rpb24sIHJ1biBhcyBDbG91ZEZyb250IHdvdWxkIHJ1biBpdC5cbiAqXG4gKiBJdCBpcyBhdXRob3JlZCBhcyBhIHN0cmluZyBpbnNpZGUgYSBUeXBlU2NyaXB0IHRlbXBsYXRlIGxpdGVyYWwsIHNvIGV2ZXJ5XG4gKiBiYWNrc2xhc2ggaW4gaXQgaXMgZXNjYXBlZCB0d2ljZSAtIGFuZCBhIHJlZ2V4IHRoYXQgY29sbGFwc2VzIHNsYXNoZXMgaXMgbm90aGluZ1xuICogYnV0IGJhY2tzbGFzaGVzLiBBc3NlcnRpbmcgb24gYmVoYXZpb3IgcmF0aGVyIHRoYW4gb24gdGhlIHRleHQgaXMgd2hhdCBjYXRjaGVzIGFuXG4gKiBlc2NhcGluZyBtaXN0YWtlLCB3aGljaCBhIHNuYXBzaG90IHdvdWxkIGhhcHBpbHkgcmVjb3JkLlxuICovXG5kZXNjcmliZShcInRoZSB2aWV3ZXItcmVxdWVzdCBDbG91ZEZyb250IEZ1bmN0aW9uXCIsICgpID0+IHtcbiAgaW50ZXJmYWNlIFF1ZXJ5VmFsdWUge1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgbXVsdGlWYWx1ZT86IEFycmF5PHsgdmFsdWU6IHN0cmluZyB9PjtcbiAgfVxuICBpbnRlcmZhY2UgRnVuY3Rpb25SZXF1ZXN0IHtcbiAgICB1cmk6IHN0cmluZztcbiAgICBxdWVyeXN0cmluZzogUmVjb3JkPHN0cmluZywgUXVlcnlWYWx1ZT47XG4gICAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogc3RyaW5nIH0+O1xuICB9XG4gIHR5cGUgRnVuY3Rpb25SZXN1bHQgPVxuICAgIHwgRnVuY3Rpb25SZXF1ZXN0XG4gICAgfCB7IHN0YXR1c0NvZGU6IG51bWJlcjsgaGVhZGVyczogUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogc3RyaW5nIH0+IH07XG5cbiAgY29uc3QgaGFuZGxlciA9ICgoKSA9PiB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2sobmV3IEFwcCgpLCBcIkZuU3RhY2tcIik7XG4gICAgY29uc3QgZm4gPSBuZXcgTGFtYmRhRnVuY3Rpb24oc3RhY2ssIFwiRm5cIiwge1xuICAgICAgY29kZTogQ29kZS5mcm9tSW5saW5lKFwiZXhwb3J0cy5oYW5kbGVyID0gKCkgPT4ge307XCIpLFxuICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMl9YLFxuICAgIH0pO1xuICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgIGFzc2V0c0J1Y2tldDogbmV3IEJ1Y2tldChzdGFjaywgXCJBc3NldHNcIiksXG4gICAgICBmdW5jdGlvblVybDogbmV3IEZ1bmN0aW9uVXJsKHN0YWNrLCBcIlVybFwiLCB7XG4gICAgICAgIGZ1bmN0aW9uOiBmbixcbiAgICAgICAgYXV0aFR5cGU6IEZ1bmN0aW9uVXJsQXV0aFR5cGUuQVdTX0lBTSxcbiAgICAgIH0pLFxuICAgICAgbmV4dGpzVHlwZTogTmV4dGpzVHlwZS5HTE9CQUxfRlVOQ1RJT05TLFxuICAgICAgcHVibGljRGlyRW50cmllczogW10sXG4gICAgfSk7XG4gICAgY29uc3QgZnVuY3Rpb25zID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5maW5kUmVzb3VyY2VzKFxuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkZ1bmN0aW9uXCIsXG4gICAgKTtcbiAgICBjb25zdCBjb2RlID0gT2JqZWN0LnZhbHVlcyhmdW5jdGlvbnMpWzBdLlByb3BlcnRpZXMuRnVuY3Rpb25Db2RlIGFzIHN0cmluZztcbiAgICByZXR1cm4gcnVuSW5OZXdDb250ZXh0KGAke2NvZGV9XFxuaGFuZGxlcmApIGFzIChldmVudDoge1xuICAgICAgcmVxdWVzdDogRnVuY3Rpb25SZXF1ZXN0O1xuICAgIH0pID0+IFByb21pc2U8RnVuY3Rpb25SZXN1bHQ+O1xuICB9KSgpO1xuXG4gIGNvbnN0IHNlbmQgPSAoXG4gICAgdXJpOiBzdHJpbmcsXG4gICAgcXVlcnlzdHJpbmc6IFJlY29yZDxzdHJpbmcsIFF1ZXJ5VmFsdWU+ID0ge30sXG4gICk6IFByb21pc2U8RnVuY3Rpb25SZXN1bHQ+ID0+XG4gICAgaGFuZGxlcih7XG4gICAgICByZXF1ZXN0OiB7IHVyaSwgcXVlcnlzdHJpbmcsIGhlYWRlcnM6IHsgaG9zdDogeyB2YWx1ZTogXCJhLnRlc3RcIiB9IH0gfSxcbiAgICB9KTtcblxuICBjb25zdCByZWRpcmVjdCA9IChyZXN1bHQ6IEZ1bmN0aW9uUmVzdWx0KSA9PiAoe1xuICAgIHN0YXR1c0NvZGU6IChyZXN1bHQgYXMgeyBzdGF0dXNDb2RlOiBudW1iZXIgfSkuc3RhdHVzQ29kZSxcbiAgICBsb2NhdGlvbjogcmVzdWx0LmhlYWRlcnMubG9jYXRpb24/LnZhbHVlLFxuICB9KTtcblxuICBpdC5lYWNoKFtcbiAgICBbXCIvL1wiLCBcIi9cIl0sXG4gICAgW1wiLy8vXCIsIFwiL1wiXSxcbiAgICBbXCIvZm9vLy9iYXJcIiwgXCIvZm9vL2JhclwiXSxcbiAgICBbXCIvYmFzZXBhdGgvL3RvLXN2XCIsIFwiL2Jhc2VwYXRoL3RvLXN2XCJdLFxuICAgIFtcIi9hXFxcXGJcIiwgXCIvYS9iXCJdLFxuICBdKShcInJlZGlyZWN0cyAlcyB0byAlcyB3aXRoIGEgMzA4XCIsIGFzeW5jICh1cmksIGxvY2F0aW9uKSA9PiB7XG4gICAgZXhwZWN0KHJlZGlyZWN0KGF3YWl0IHNlbmQodXJpKSkpLnRvRXF1YWwoeyBzdGF0dXNDb2RlOiAzMDgsIGxvY2F0aW9uIH0pO1xuICB9KTtcblxuICBpdChcImtlZXBzIHRoZSBxdWVyeSBvbiB0aGUgcmVkaXJlY3QsIGluY2x1ZGluZyByZXBlYXRlZCBrZXlzXCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBDbG91ZEZyb250J3Mgc2hhcGUgZm9yIGEgcmVwZWF0ZWQga2V5OiBgbXVsdGlWYWx1ZWAgaG9sZHMgZXZlcnkgdmFsdWUsXG4gICAgLy8gdGhlIGZpcnN0IGluY2x1ZGVkLCBhbmQgYHZhbHVlYCByZXBlYXRzIHRoYXQgZmlyc3Qgb25lLlxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlbmQoXCIveC8veVwiLCB7XG4gICAgICBqc29uOiB7IHZhbHVlOiBcInRydWVcIiB9LFxuICAgICAgYTogeyB2YWx1ZTogXCIxXCIsIG11bHRpVmFsdWU6IFt7IHZhbHVlOiBcIjFcIiB9LCB7IHZhbHVlOiBcIjJcIiB9XSB9LFxuICAgICAgZmxhZzogeyB2YWx1ZTogXCJcIiB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChyZWRpcmVjdChyZXN1bHQpLmxvY2F0aW9uKS50b0JlKFwiL3gveT9qc29uPXRydWUmYT0xJmE9MiZmbGFnXCIpO1xuICB9KTtcblxuICBpdChcInBhc3NlcyBwZXJjZW50LWVuY29kZWQgcXVlcnkgdmFsdWVzIHRocm91Z2ggd2l0aG91dCByZS1lbmNvZGluZ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gQ2xvdWRGcm9udCBoYW5kcyB0aGUgZnVuY3Rpb24gdGhlIHZhbHVlcyBzdGlsbCBlbmNvZGVkLCBhcyBzZW50LlxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlbmQoXCIveC8veVwiLCB7XG4gICAgICBhOiB7IHZhbHVlOiBcIiUyMGIlMjZjXCIgfSxcbiAgICAgIHA6IHsgdmFsdWU6IFwiMSsyXCIgfSxcbiAgICB9KTtcbiAgICBleHBlY3QocmVkaXJlY3QocmVzdWx0KS5sb2NhdGlvbikudG9CZShcIi94L3k/YT0lMjBiJTI2YyZwPTErMlwiKTtcbiAgfSk7XG5cbiAgaXQoXCJwYXNzZXMgYW4gb3JkaW5hcnkgcGF0aCB0aHJvdWdoIHdpdGggeC1mb3J3YXJkZWQtaG9zdCBzZXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCBzZW5kKFwiL2EvYlwiKSkgYXMgRnVuY3Rpb25SZXF1ZXN0O1xuICAgIGV4cGVjdChyZXN1bHQudXJpKS50b0JlKFwiL2EvYlwiKTtcbiAgICAvLyBDbG91ZEZyb250IHJld3JpdGVzIGBob3N0YCB0byB0aGUgb3JpZ2luIGRvbWFpbiwgc28gdGhlIGFwcCB3b3VsZCBvdGhlcndpc2VcbiAgICAvLyBidWlsZCBldmVyeSBhYnNvbHV0ZSBVUkwgYWdhaW5zdCB0aGUgRnVuY3Rpb24gVVJMJ3MgaG9zdG5hbWUuXG4gICAgZXhwZWN0KHJlc3VsdC5oZWFkZXJzW1wieC1mb3J3YXJkZWQtaG9zdFwiXS52YWx1ZSkudG9CZShcImEudGVzdFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJvdmVyd3JpdGVzIGEgY2xpZW50LXN1cHBsaWVkIHgtZm9yd2FyZGVkLWhvc3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIFRoZSBydW50aW1lIHRydXN0cyB0aGlzIGhlYWRlciBiZWhpbmQgdGhlIEZ1bmN0aW9uIFVSTCwgc28gYSB2aWV3ZXInc1xuICAgIC8vIG93biB2YWx1ZSBtdXN0IG5vdCBzdXJ2aXZlIHRvIGJ1aWxkIHJlZGlyZWN0cyBvciBvcmlnaW4gY2hlY2tzLlxuICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCBoYW5kbGVyKHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgdXJpOiBcIi9hXCIsXG4gICAgICAgIHF1ZXJ5c3RyaW5nOiB7fSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGhvc3Q6IHsgdmFsdWU6IFwiYS50ZXN0XCIgfSxcbiAgICAgICAgICBcIngtZm9yd2FyZGVkLWhvc3RcIjogeyB2YWx1ZTogXCJldmlsLnRlc3RcIiB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSkgYXMgRnVuY3Rpb25SZXF1ZXN0O1xuICAgIGV4cGVjdChyZXN1bHQuaGVhZGVyc1tcIngtZm9yd2FyZGVkLWhvc3RcIl0udmFsdWUpLnRvQmUoXCJhLnRlc3RcIik7XG4gIH0pO1xufSk7XG5cbi8qKlxuICogYHZpZXdlclJlcXVlc3RGdW5jdGlvbkNvZGVgLCBydW4gYXMgQ2xvdWRGcm9udCB3b3VsZCBydW4gaXQgb24gZWFjaCBiZWhhdmlvcixcbiAqIGZvciB0aGUgc2FtZSByZWFzb24gYXMgdGhlIHN1aXRlIGFib3ZlLlxuICovXG5kZXNjcmliZShcInZpZXdlclJlcXVlc3RGdW5jdGlvbkNvZGVcIiwgKCkgPT4ge1xuICBjb25zdCBCQVNJQ19BVVRIID0gYFxuICAgIGZ1bmN0aW9uIHZpZXdlclJlcXVlc3QoZXZlbnQpIHtcbiAgICAgIHZhciBhdXRoID0gZXZlbnQucmVxdWVzdC5oZWFkZXJzLmF1dGhvcml6YXRpb247XG4gICAgICBpZiAoYXV0aCAmJiBhdXRoLnZhbHVlID09PSBcIkJhc2ljIGRYTmxjanB3WVhOelwiKSByZXR1cm47XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXNDb2RlOiA0MDEsXG4gICAgICAgIHN0YXR1c0Rlc2NyaXB0aW9uOiBcIlVuYXV0aG9yaXplZFwiLFxuICAgICAgICBoZWFkZXJzOiB7IFwid3d3LWF1dGhlbnRpY2F0ZVwiOiB7IHZhbHVlOiAnQmFzaWMgcmVhbG09XCJwcmV2aWV3XCInIH0gfSxcbiAgICAgIH07XG4gICAgfVxuICBgO1xuICBjb25zdCBBVVRIT1JJWkVEID0geyBhdXRob3JpemF0aW9uOiBcIkJhc2ljIGRYTmxjanB3WVhOelwiIH07XG5cbiAgaW50ZXJmYWNlIEZ1bmN0aW9uUmVxdWVzdCB7XG4gICAgdXJpOiBzdHJpbmc7XG4gICAgcXVlcnlzdHJpbmc6IFJlY29yZDxzdHJpbmcsIHsgdmFsdWU6IHN0cmluZyB9PjtcbiAgICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiBzdHJpbmcgfT47XG4gIH1cbiAgdHlwZSBGdW5jdGlvblJlc3VsdCA9XG4gICAgfCBGdW5jdGlvblJlcXVlc3RcbiAgICB8IHsgc3RhdHVzQ29kZTogbnVtYmVyOyBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiBzdHJpbmcgfT4gfTtcbiAgdHlwZSBIYW5kbGVyID0gKGV2ZW50OiB7XG4gICAgcmVxdWVzdDogRnVuY3Rpb25SZXF1ZXN0O1xuICB9KSA9PiBQcm9taXNlPEZ1bmN0aW9uUmVzdWx0PjtcbiAgLyoqIFdoYXQgYHZpZXdlclJlcXVlc3RLZXlWYWx1ZVN0b3JlYCBob2xkcywgYXMgYGNmLmt2cygpYCB3b3VsZCByZWFkIGl0LiAqL1xuICBjb25zdCBmYWtlQ2xvdWRGcm9udE1vZHVsZSA9ICh2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pID0+ICh7XG4gICAga3ZzOiAoKSA9PiAoe1xuICAgICAgZ2V0OiBhc3luYyAoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKCEoa2V5IGluIHZhbHVlcykpIHRocm93IG5ldyBFcnJvcihga2V5IG5vdCBmb3VuZDogJHtrZXl9YCk7XG4gICAgICAgIHJldHVybiB2YWx1ZXNba2V5XTtcbiAgICAgIH0sXG4gICAgfSksXG4gIH0pO1xuICBpbnRlcmZhY2UgQmVoYXZpb3Ige1xuICAgIFBhdGhQYXR0ZXJuOiBzdHJpbmc7XG4gICAgRnVuY3Rpb25Bc3NvY2lhdGlvbnM/OiBBcnJheTx7XG4gICAgICBFdmVudFR5cGU6IHN0cmluZztcbiAgICAgIEZ1bmN0aW9uQVJOOiB7IFwiRm46OkdldEF0dFwiOiBbc3RyaW5nLCBzdHJpbmddIH07XG4gICAgfT47XG4gIH1cblxuICBjb25zdCBzeW50aCA9IChcbiAgICBwcm9wczoge1xuICAgICAgY29kZT86IHN0cmluZztcbiAgICAgIG5leHRqc1R5cGU/OiBOZXh0anNUeXBlO1xuICAgICAgYXNzZXRQcmVmaXg/OiBzdHJpbmc7XG4gICAgICBiYXNlUGF0aD86IHN0cmluZztcbiAgICAgIGtleVZhbHVlU3RvcmU/OiBib29sZWFuO1xuICAgICAgb3ZlcnJpZGVzPzogKHN0YWNrOiBTdGFjaykgPT4gTmV4dGpzRGlzdHJpYnV0aW9uT3ZlcnJpZGVzO1xuICAgIH0gPSB7fSxcbiAgKSA9PiB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2sobmV3IEFwcCgpLCBcIlRlc3RTdGFja1wiKTtcbiAgICBjb25zdCBrZXlWYWx1ZVN0b3JlID0gcHJvcHMua2V5VmFsdWVTdG9yZVxuICAgICAgPyBuZXcgS2V5VmFsdWVTdG9yZShzdGFjaywgXCJLdnNcIilcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNvbXB1dGUgPVxuICAgICAgcHJvcHMubmV4dGpzVHlwZSA9PT0gTmV4dGpzVHlwZS5HTE9CQUxfQ09OVEFJTkVSU1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIGxvYWRCYWxhbmNlcjogbmV3IEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyKHN0YWNrLCBcIkFsYlwiLCB7XG4gICAgICAgICAgICAgIHZwYzogbmV3IFZwYyhzdGFjaywgXCJWcGNcIiksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgZnVuY3Rpb25Vcmw6IG5ldyBGdW5jdGlvblVybChzdGFjaywgXCJVcmxcIiwge1xuICAgICAgICAgICAgICBmdW5jdGlvbjogbmV3IExhbWJkYUZ1bmN0aW9uKHN0YWNrLCBcIkZuXCIsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBDb2RlLmZyb21JbmxpbmUoXCJleHBvcnRzLmhhbmRsZXIgPSAoKSA9PiB7fTtcIiksXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICAgICAgICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjJfWCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGF1dGhUeXBlOiBGdW5jdGlvblVybEF1dGhUeXBlLkFXU19JQU0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9O1xuICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgIC4uLmNvbXB1dGUsXG4gICAgICBhc3NldHNCdWNrZXQ6IG5ldyBCdWNrZXQoc3RhY2ssIFwiQXNzZXRzXCIpLFxuICAgICAgYXNzZXRQcmVmaXg6IHByb3BzLmFzc2V0UHJlZml4LFxuICAgICAgYmFzZVBhdGg6IHByb3BzLmJhc2VQYXRoLFxuICAgICAgbmV4dGpzVHlwZTogcHJvcHMubmV4dGpzVHlwZSA/PyBOZXh0anNUeXBlLkdMT0JBTF9GVU5DVElPTlMsXG4gICAgICBvdmVycmlkZXM6IHByb3BzLm92ZXJyaWRlcz8uKHN0YWNrKSxcbiAgICAgIHB1YmxpY0RpckVudHJpZXM6IFt7IG5hbWU6IFwiZmF2aWNvbi5pY29cIiwgaXNEaXJlY3Rvcnk6IGZhbHNlIH1dLFxuICAgICAgdmlld2VyUmVxdWVzdEZ1bmN0aW9uQ29kZTpcbiAgICAgICAgcHJvcHMuY29kZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICA6IEZ1bmN0aW9uQ29kZS5mcm9tSW5saW5lKHByb3BzLmNvZGUpLFxuICAgICAgdmlld2VyUmVxdWVzdEtleVZhbHVlU3RvcmU6IGtleVZhbHVlU3RvcmUsXG4gICAgfSk7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgIGNvbnN0IGZ1bmN0aW9ucyA9IHRlbXBsYXRlLmZpbmRSZXNvdXJjZXMoXCJBV1M6OkNsb3VkRnJvbnQ6OkZ1bmN0aW9uXCIpO1xuICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC52YWx1ZXMoXG4gICAgICB0ZW1wbGF0ZS5maW5kUmVzb3VyY2VzKFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIiksXG4gICAgKVswXS5Qcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZztcbiAgICBjb25zdCBiZWhhdmlvcnM6IEJlaGF2aW9yW10gPSBbXG4gICAgICB7IFBhdGhQYXR0ZXJuOiBcIipcIiwgLi4uY29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yIH0sXG4gICAgICAuLi5jb25maWcuQ2FjaGVCZWhhdmlvcnMsXG4gICAgXTtcbiAgICAvKiogVGhlIHZpZXdlci1yZXF1ZXN0IGZ1bmN0aW9uIG9uIHRoZSBiZWhhdmlvciBmb3IgYHBhdGhQYXR0ZXJuYC4gKi9cbiAgICBjb25zdCBmdW5jdGlvbkZvciA9IChwYXRoUGF0dGVybjogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBiZWhhdmlvciA9IGJlaGF2aW9ycy5maW5kKChpdCkgPT4gaXQuUGF0aFBhdHRlcm4gPT09IHBhdGhQYXR0ZXJuKSE7XG4gICAgICBjb25zdCBhc3NvY2lhdGlvbiA9IGJlaGF2aW9yLkZ1bmN0aW9uQXNzb2NpYXRpb25zIS5maW5kKFxuICAgICAgICAoaXQpID0+IGl0LkV2ZW50VHlwZSA9PT0gXCJ2aWV3ZXItcmVxdWVzdFwiLFxuICAgICAgKSE7XG4gICAgICByZXR1cm4gZnVuY3Rpb25zW2Fzc29jaWF0aW9uLkZ1bmN0aW9uQVJOW1wiRm46OkdldEF0dFwiXVswXV0uUHJvcGVydGllcztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFRoYXQgZnVuY3Rpb24ncyBoYW5kbGVyLCBydW5uYWJsZS4gYG5vZGU6dm1gIHNjcmlwdHMgY2FuJ3QgYGltcG9ydGAsIHNvXG4gICAgICogdGhlIGBjbG91ZGZyb250YCBtb2R1bGUgaXMgaGFuZGVkIGluIGFzIHRoZSBiaW5kaW5nIHRoZSBpbXBvcnQgbWFrZXMuXG4gICAgICovXG4gICAgY29uc3QgaGFuZGxlckZvciA9IChcbiAgICAgIHBhdGhQYXR0ZXJuOiBzdHJpbmcsXG4gICAgICBrdnNWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSxcbiAgICApOiBIYW5kbGVyID0+IHtcbiAgICAgIGNvbnN0IGNvZGUgPSAoZnVuY3Rpb25Gb3IocGF0aFBhdHRlcm4pLkZ1bmN0aW9uQ29kZSBhcyBzdHJpbmcpLnJlcGxhY2UoXG4gICAgICAgIC9eXFxzKmltcG9ydCBjZiBmcm9tIFwiY2xvdWRmcm9udFwiOy8sXG4gICAgICAgIFwiXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHJ1bkluTmV3Q29udGV4dChgJHtjb2RlfVxcbmhhbmRsZXJgLCB7XG4gICAgICAgIGNmOiBmYWtlQ2xvdWRGcm9udE1vZHVsZShrdnNWYWx1ZXMpLFxuICAgICAgfSkgYXMgSGFuZGxlcjtcbiAgICB9O1xuICAgIHJldHVybiB7IGJlaGF2aW9ycywgZnVuY3Rpb25zLCBmdW5jdGlvbkZvciwgaGFuZGxlckZvciwgc3RhY2sgfTtcbiAgfTtcblxuICBjb25zdCByZXF1ZXN0ID0gKHVyaTogc3RyaW5nLCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge30pID0+ICh7XG4gICAgcmVxdWVzdDoge1xuICAgICAgdXJpLFxuICAgICAgcXVlcnlzdHJpbmc6IHt9LFxuICAgICAgaGVhZGVyczogT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyh7IGhvc3Q6IFwiYS50ZXN0XCIsIC4uLmhlYWRlcnMgfSkubWFwKChbbmFtZSwgdmFsdWVdKSA9PiBbXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICB7IHZhbHVlIH0sXG4gICAgICAgIF0pLFxuICAgICAgKSxcbiAgICB9LFxuICB9KTtcbiAgY29uc3Qgc3RhdHVzID0gKHJlc3VsdDogRnVuY3Rpb25SZXN1bHQpID0+XG4gICAgKHJlc3VsdCBhcyB7IHN0YXR1c0NvZGU/OiBudW1iZXIgfSkuc3RhdHVzQ29kZTtcblxuICBpdC5lYWNoKFtOZXh0anNUeXBlLkdMT0JBTF9GVU5DVElPTlMsIE5leHRqc1R5cGUuR0xPQkFMX0NPTlRBSU5FUlNdKShcbiAgICBcImdhdGVzIGV2ZXJ5IGJlaGF2aW9yIG9uICVzLCBzdGF0aWMgYXNzZXRzIGluY2x1ZGVkXCIsXG4gICAgYXN5bmMgKG5leHRqc1R5cGUpID0+IHtcbiAgICAgIGNvbnN0IHsgYmVoYXZpb3JzLCBoYW5kbGVyRm9yIH0gPSBzeW50aCh7IGNvZGU6IEJBU0lDX0FVVEgsIG5leHRqc1R5cGUgfSk7XG4gICAgICBleHBlY3QoYmVoYXZpb3JzLm1hcCgoaXQpID0+IGl0LlBhdGhQYXR0ZXJuKS5zb3J0KCkpLnRvRXF1YWwoW1xuICAgICAgICBcIipcIixcbiAgICAgICAgXCJfbmV4dC9pbWFnZSpcIixcbiAgICAgICAgXCJfbmV4dC9zdGF0aWMqXCIsXG4gICAgICAgIFwiZmF2aWNvbi5pY29cIixcbiAgICAgIF0pO1xuICAgICAgZm9yIChjb25zdCB7IFBhdGhQYXR0ZXJuIH0gb2YgYmVoYXZpb3JzKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBoYW5kbGVyRm9yKFBhdGhQYXR0ZXJuKTtcbiAgICAgICAgZXhwZWN0KHN0YXR1cyhhd2FpdCBoYW5kbGVyKHJlcXVlc3QoXCIveFwiKSkpKS50b0JlKDQwMSk7XG4gICAgICAgIGNvbnN0IHBhc3NlZCA9IChhd2FpdCBoYW5kbGVyKFxuICAgICAgICAgIHJlcXVlc3QoXCIveFwiLCBBVVRIT1JJWkVEKSxcbiAgICAgICAgKSkgYXMgRnVuY3Rpb25SZXF1ZXN0O1xuICAgICAgICBleHBlY3QocGFzc2VkLnVyaSkudG9CZShcIi94XCIpO1xuICAgICAgfVxuICAgIH0sXG4gICk7XG5cbiAgaXQoXCJzaGFyZXMgb25lIHBhc3MtdGhyb3VnaCBmdW5jdGlvbiBiZXR3ZWVuIGR5bmFtaWMgYW5kIHN0YXRpYyBvbiBHbG9iYWwgQ29udGFpbmVyc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBiZWhhdmlvcnMsIGZ1bmN0aW9ucyB9ID0gc3ludGgoe1xuICAgICAgY29kZTogQkFTSUNfQVVUSCxcbiAgICAgIG5leHRqc1R5cGU6IE5leHRqc1R5cGUuR0xPQkFMX0NPTlRBSU5FUlMsXG4gICAgfSk7XG4gICAgY29uc3QgW2xvZ2ljYWxJZCwgLi4ucmVzdF0gPSBPYmplY3Qua2V5cyhmdW5jdGlvbnMpO1xuICAgIGV4cGVjdChyZXN0KS50b0hhdmVMZW5ndGgoMCk7XG4gICAgZXhwZWN0KGJlaGF2aW9ycy5tYXAoKGl0KSA9PiBpdC5QYXRoUGF0dGVybikuc29ydCgpKS50b0VxdWFsKFtcbiAgICAgIFwiKlwiLFxuICAgICAgXCJfbmV4dC9pbWFnZSpcIixcbiAgICAgIFwiX25leHQvc3RhdGljKlwiLFxuICAgICAgXCJmYXZpY29uLmljb1wiLFxuICAgIF0pO1xuICAgIGZvciAoY29uc3QgeyBGdW5jdGlvbkFzc29jaWF0aW9ucyB9IG9mIGJlaGF2aW9ycykge1xuICAgICAgZXhwZWN0KEZ1bmN0aW9uQXNzb2NpYXRpb25zKS50b0VxdWFsKFtcbiAgICAgICAge1xuICAgICAgICAgIEV2ZW50VHlwZTogXCJ2aWV3ZXItcmVxdWVzdFwiLFxuICAgICAgICAgIEZ1bmN0aW9uQVJOOiB7IFwiRm46OkdldEF0dFwiOiBbbG9naWNhbElkLCBcIkZ1bmN0aW9uQVJOXCJdIH0sXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwiYWNjZXB0cyB2aWV3ZXJSZXF1ZXN0IGRlY2xhcmVkIGFmdGVyIGFub3RoZXIgdmFyaWFibGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZXIgPSBzeW50aCh7XG4gICAgICBjb2RlOiBgdmFyIHggPSAxLCB2aWV3ZXJSZXF1ZXN0ID0gKGV2ZW50KSA9PiAoeyBzdGF0dXNDb2RlOiA0MDEgfSk7YCxcbiAgICB9KS5oYW5kbGVyRm9yKFwiX25leHQvc3RhdGljKlwiKTtcbiAgICBleHBlY3Qoc3RhdHVzKGF3YWl0IGhhbmRsZXIocmVxdWVzdChcIi94XCIpKSkpLnRvQmUoNDAxKTtcbiAgfSk7XG5cbiAgaXQoXCJhY2NlcHRzIHZpZXdlclJlcXVlc3QgZGVmaW5lZCBhcyBhIGNvbnN0IGFycm93IGZ1bmN0aW9uXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gc3ludGgoe1xuICAgICAgY29kZTogYGNvbnN0IHZpZXdlclJlcXVlc3QgPSBhc3luYyAoZXZlbnQpID0+ICh7IHN0YXR1c0NvZGU6IDQwMSB9KTtgLFxuICAgIH0pLmhhbmRsZXJGb3IoXCJfbmV4dC9zdGF0aWMqXCIpO1xuICAgIGV4cGVjdChzdGF0dXMoYXdhaXQgaGFuZGxlcihyZXF1ZXN0KFwiL3hcIikpKSkudG9CZSg0MDEpO1xuICB9KTtcblxuICBpdChcInJ1bnMgYmVmb3JlIHRoZSByZXBlYXRlZC1zbGFzaCByZWRpcmVjdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gT3RoZXJ3aXNlIGAvYS8vYmAgd291bGQgYW5zd2VyIDMwOCB0byBhIHZpZXdlciB3aG8gbmV2ZXIgYXV0aGVudGljYXRlZC5cbiAgICBjb25zdCBoYW5kbGVyID0gc3ludGgoeyBjb2RlOiBCQVNJQ19BVVRIIH0pLmhhbmRsZXJGb3IoXCIqXCIpO1xuICAgIGV4cGVjdChzdGF0dXMoYXdhaXQgaGFuZGxlcihyZXF1ZXN0KFwiL2EvL2JcIikpKSkudG9CZSg0MDEpO1xuICAgIGV4cGVjdChzdGF0dXMoYXdhaXQgaGFuZGxlcihyZXF1ZXN0KFwiL2EvL2JcIiwgQVVUSE9SSVpFRCkpKSkudG9CZSgzMDgpO1xuICB9KTtcblxuICBpdChcImFzc29jaWF0ZXMgdGhlIHN0b3JlIHdpdGggZXZlcnkgZnVuY3Rpb24gaXQgcnVucyBpblwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBiZWhhdmlvcnMsIGZ1bmN0aW9uRm9yLCBmdW5jdGlvbnMgfSA9IHN5bnRoKHtcbiAgICAgIGNvZGU6IEJBU0lDX0FVVEgsXG4gICAgICBrZXlWYWx1ZVN0b3JlOiB0cnVlLFxuICAgICAgYXNzZXRQcmVmaXg6IFwiL2NkblwiLFxuICAgIH0pO1xuICAgIGV4cGVjdChPYmplY3Qua2V5cyhmdW5jdGlvbnMpKS50b0hhdmVMZW5ndGgoMyk7XG4gICAgZm9yIChjb25zdCB7IFBhdGhQYXR0ZXJuIH0gb2YgYmVoYXZpb3JzKSB7XG4gICAgICBjb25zdCB7IEZ1bmN0aW9uQ29uZmlnIH0gPSBmdW5jdGlvbkZvcihQYXRoUGF0dGVybik7XG4gICAgICBleHBlY3QoRnVuY3Rpb25Db25maWcuUnVudGltZSkudG9CZShcImNsb3VkZnJvbnQtanMtMi4wXCIpO1xuICAgICAgZXhwZWN0KEZ1bmN0aW9uQ29uZmlnLktleVZhbHVlU3RvcmVBc3NvY2lhdGlvbnMpLnRvRXF1YWwoW1xuICAgICAgICB7IEtleVZhbHVlU3RvcmVBUk46IHsgXCJGbjo6R2V0QXR0XCI6IFtleHBlY3QuYW55KFN0cmluZyksIFwiQXJuXCJdIH0gfSxcbiAgICAgIF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoXCJyZWFkcyBjcmVkZW50aWFscyBmcm9tIHRoZSBLZXlWYWx1ZVN0b3JlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gc3ludGgoe1xuICAgICAga2V5VmFsdWVTdG9yZTogdHJ1ZSxcbiAgICAgIGNvZGU6IGBpbXBvcnQgY2YgZnJvbSBcImNsb3VkZnJvbnRcIjtcbiAgICAgICAgY29uc3Qga3ZzID0gY2Yua3ZzKCk7XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIHZpZXdlclJlcXVlc3QoZXZlbnQpIHtcbiAgICAgICAgICBjb25zdCBhdXRoID0gZXZlbnQucmVxdWVzdC5oZWFkZXJzLmF1dGhvcml6YXRpb247XG4gICAgICAgICAgaWYgKGF1dGggJiYgYXV0aC52YWx1ZSA9PT0gXCJCYXNpYyBcIiArIChhd2FpdCBrdnMuZ2V0KFwiYmFzaWMtYXV0aFwiKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgc3RhdHVzQ29kZTogNDAxLCBzdGF0dXNEZXNjcmlwdGlvbjogXCJVbmF1dGhvcml6ZWRcIiB9O1xuICAgICAgICB9XG4gICAgICBgLFxuICAgIH0pLmhhbmRsZXJGb3IoXCJfbmV4dC9zdGF0aWMqXCIsIHsgXCJiYXNpYy1hdXRoXCI6IFwiZFhObGNqcHdZWE56XCIgfSk7XG4gICAgZXhwZWN0KHN0YXR1cyhhd2FpdCBoYW5kbGVyKHJlcXVlc3QoXCIveFwiKSkpKS50b0JlKDQwMSk7XG4gICAgZXhwZWN0KFxuICAgICAgKChhd2FpdCBoYW5kbGVyKHJlcXVlc3QoXCIveFwiLCBBVVRIT1JJWkVEKSkpIGFzIEZ1bmN0aW9uUmVxdWVzdCkudXJpLFxuICAgICkudG9CZShcIi94XCIpO1xuICB9KTtcblxuICBpdChcInJlZnVzZXMgYSBLZXlWYWx1ZVN0b3JlIHdpdGhvdXQgY29kZSB0byByZWFkIGl0XCIsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gc3ludGgoeyBrZXlWYWx1ZVN0b3JlOiB0cnVlIH0pKS50b1Rocm93KFxuICAgICAgL2B2aWV3ZXJSZXF1ZXN0S2V5VmFsdWVTdG9yZWAgLiogbmVlZHMgYHZpZXdlclJlcXVlc3RGdW5jdGlvbkNvZGVgLyxcbiAgICApO1xuICB9KTtcblxuICBpdChcImNhbid0IGtlZXAgYSB2aWV3ZXIncyB4LWZvcndhcmRlZC1ob3N0IHBhc3QgY2RrLW5leHRqcydzIG92ZXJ3cml0ZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IHN5bnRoKHtcbiAgICAgIGNvZGU6IGBcbiAgICAgICAgZnVuY3Rpb24gdmlld2VyUmVxdWVzdChldmVudCkge1xuICAgICAgICAgIGV2ZW50LnJlcXVlc3QuaGVhZGVyc1tcIngtZm9yd2FyZGVkLWhvc3RcIl0gPSB7IHZhbHVlOiBcImV2aWwudGVzdFwiIH07XG4gICAgICAgICAgcmV0dXJuIGV2ZW50LnJlcXVlc3Q7XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgfSkuaGFuZGxlckZvcihcIipcIik7XG4gICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IGhhbmRsZXIocmVxdWVzdChcIi94XCIpKSkgYXMgRnVuY3Rpb25SZXF1ZXN0O1xuICAgIGV4cGVjdChyZXN1bHQuaGVhZGVyc1tcIngtZm9yd2FyZGVkLWhvc3RcIl0udmFsdWUpLnRvQmUoXCJhLnRlc3RcIik7XG4gIH0pO1xuXG4gIGl0KFwiY2FycmllcyBvbiB3aXRoIGEgcmVxdWVzdCBpdCByZXR1cm5zIGFzIGEgbmV3IG9iamVjdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IHN5bnRoKHtcbiAgICAgIGNvZGU6IGBcbiAgICAgICAgZnVuY3Rpb24gdmlld2VyUmVxdWVzdChldmVudCkge1xuICAgICAgICAgIHJldHVybiB7IHVyaTogXCIveVwiLCBxdWVyeXN0cmluZzoge30sIGhlYWRlcnM6IGV2ZW50LnJlcXVlc3QuaGVhZGVycyB9O1xuICAgICAgICB9XG4gICAgICBgLFxuICAgIH0pLmhhbmRsZXJGb3IoXCJfbmV4dC9zdGF0aWMqXCIpO1xuICAgIGV4cGVjdCgoKGF3YWl0IGhhbmRsZXIocmVxdWVzdChcIi94XCIpKSkgYXMgRnVuY3Rpb25SZXF1ZXN0KS51cmkpLnRvQmUoXCIveVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJydW5zIGluc2lkZSB0aGUgYXNzZXRQcmVmaXggcmV3cml0ZSwgaW4gcGxhY2Ugb2YgdGhlIHN0YXRpYyBmdW5jdGlvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBiZWhhdmlvcnMsIGhhbmRsZXJGb3IgfSA9IHN5bnRoKHtcbiAgICAgIGNvZGU6IEJBU0lDX0FVVEgsXG4gICAgICBhc3NldFByZWZpeDogXCIvY2RuXCIsXG4gICAgfSk7XG4gICAgY29uc3QgcHJlZml4ZWQgPSBiZWhhdmlvcnMuZmluZChcbiAgICAgIChpdCkgPT4gaXQuUGF0aFBhdHRlcm4gPT09IFwiL2Nkbi9fbmV4dC9zdGF0aWMqXCIsXG4gICAgKSE7XG4gICAgLy8gT25lIHZpZXdlci1yZXF1ZXN0IGZ1bmN0aW9uIHBlciBiZWhhdmlvciwgb3IgQ2xvdWRGcm9udCByZWplY3RzIGl0LlxuICAgIGV4cGVjdChcbiAgICAgIHByZWZpeGVkLkZ1bmN0aW9uQXNzb2NpYXRpb25zIS5maWx0ZXIoXG4gICAgICAgIChpdCkgPT4gaXQuRXZlbnRUeXBlID09PSBcInZpZXdlci1yZXF1ZXN0XCIsXG4gICAgICApLFxuICAgICkudG9IYXZlTGVuZ3RoKDEpO1xuICAgIGNvbnN0IGhhbmRsZXIgPSBoYW5kbGVyRm9yKFwiL2Nkbi9fbmV4dC9zdGF0aWMqXCIpO1xuICAgIGV4cGVjdChzdGF0dXMoYXdhaXQgaGFuZGxlcihyZXF1ZXN0KFwiL2Nkbi9fbmV4dC9zdGF0aWMvYS5qc1wiKSkpKS50b0JlKDQwMSk7XG4gICAgY29uc3QgcGFzc2VkID0gKGF3YWl0IGhhbmRsZXIoXG4gICAgICByZXF1ZXN0KFwiL2Nkbi9fbmV4dC9zdGF0aWMvYS5qc1wiLCBBVVRIT1JJWkVEKSxcbiAgICApKSBhcyBGdW5jdGlvblJlcXVlc3Q7XG4gICAgZXhwZWN0KHBhc3NlZC51cmkpLnRvQmUoXCIvX25leHQvc3RhdGljL2EuanNcIik7XG4gIH0pO1xuXG4gIGl0KFwiYWRkcyBubyBmdW5jdGlvbnMgd2hlbiB1bnNldFwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBiZWhhdmlvcnMsIGZ1bmN0aW9ucyB9ID0gc3ludGgoKTtcbiAgICBjb25zdCBzdGF0aWNCZWhhdmlvciA9IGJlaGF2aW9ycy5maW5kKFxuICAgICAgKGl0KSA9PiBpdC5QYXRoUGF0dGVybiA9PT0gXCJfbmV4dC9zdGF0aWMqXCIsXG4gICAgKSE7XG4gICAgZXhwZWN0KHN0YXRpY0JlaGF2aW9yLkZ1bmN0aW9uQXNzb2NpYXRpb25zKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgY29uc3QgW2ZuLCAuLi5yZXN0XSA9IE9iamVjdC52YWx1ZXMoZnVuY3Rpb25zKS5tYXAoKGl0KSA9PiBpdC5Qcm9wZXJ0aWVzKTtcbiAgICBleHBlY3QocmVzdCkudG9IYXZlTGVuZ3RoKDApO1xuICAgIC8vIFRoZSBtYXJrZXIgaXMgZHJvcHBlZCwgbm90IGxlZnQgaW4gdGhlIGRlcGxveWVkIGZ1bmN0aW9uLlxuICAgIGV4cGVjdChmbi5GdW5jdGlvbkNvZGUpLnRvTWF0Y2goXG4gICAgICAvXlxccyphc3luYyBmdW5jdGlvbiBoYW5kbGVyXFwoZXZlbnRcXCkgXFx7XFxuXFxzKmNvbnN0IHJlcXVlc3QvLFxuICAgICk7XG4gICAgZXhwZWN0KGZuLkZ1bmN0aW9uQ29uZmlnLktleVZhbHVlU3RvcmVBc3NvY2lhdGlvbnMpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQuZWFjaChbZmFsc2UsIHRydWVdKShcbiAgICBcInJ1bnMgZXZlcnkgY2RrLW5leHRqcyBmdW5jdGlvbiBvbiBjbG91ZGZyb250LWpzLTIuMCAoaG9vayBzZXQ6ICVzKVwiLFxuICAgIChob29rZWQpID0+IHtcbiAgICAgIGNvbnN0IHsgZnVuY3Rpb25zIH0gPSBzeW50aCh7XG4gICAgICAgIGNvZGU6IGhvb2tlZCA/IEJBU0lDX0FVVEggOiB1bmRlZmluZWQsXG4gICAgICAgIGFzc2V0UHJlZml4OiBcIi9jZG5cIixcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcnVudGltZXMgPSBPYmplY3QudmFsdWVzKGZ1bmN0aW9ucykubWFwKFxuICAgICAgICAoaXQpID0+IGl0LlByb3BlcnRpZXMuRnVuY3Rpb25Db25maWcuUnVudGltZSxcbiAgICAgICk7XG4gICAgICBleHBlY3QocnVudGltZXMpLnRvSGF2ZUxlbmd0aChob29rZWQgPyAzIDogMik7XG4gICAgICBleHBlY3QobmV3IFNldChydW50aW1lcykpLnRvRXF1YWwobmV3IFNldChbXCJjbG91ZGZyb250LWpzLTIuMFwiXSkpO1xuICAgIH0sXG4gICk7XG5cbiAgaXQuZWFjaChbXCJkeW5hbWljQmVoYXZpb3JPcHRpb25zXCIsIFwiaW1hZ2VCZWhhdmlvck9wdGlvbnNcIl0gYXMgY29uc3QpKFxuICAgIFwicmVmdXNlcyBhICVzIG92ZXJyaWRlIHRoYXQgY2xhaW1zIHZpZXdlci1yZXF1ZXN0IG9uIEdsb2JhbCBDb250YWluZXJzXCIsXG4gICAgKG92ZXJyaWRlTmFtZSkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIHN5bnRoKHtcbiAgICAgICAgICBjb2RlOiBCQVNJQ19BVVRILFxuICAgICAgICAgIG5leHRqc1R5cGU6IE5leHRqc1R5cGUuR0xPQkFMX0NPTlRBSU5FUlMsXG4gICAgICAgICAgb3ZlcnJpZGVzOiAoc3RhY2spID0+ICh7XG4gICAgICAgICAgICBbb3ZlcnJpZGVOYW1lXToge1xuICAgICAgICAgICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogRnVuY3Rpb25FdmVudFR5cGUuVklFV0VSX1JFUVVFU1QsXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbjogbmV3IENsb3VkRnJvbnRGdW5jdGlvbihzdGFjaywgXCJVc2VyRm5cIiwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBGdW5jdGlvbkNvZGUuZnJvbUlubGluZShcbiAgICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHsgcmV0dXJuIGV2ZW50LnJlcXVlc3Q7IH1cIixcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KSxcbiAgICAgICkudG9UaHJvdyhcbiAgICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgICBgb3ZlcnJpZGVzXFxcXC4ke292ZXJyaWRlTmFtZX1cXFxcLmZ1bmN0aW9uQXNzb2NpYXRpb25zLip2aWV3ZXJSZXF1ZXN0RnVuY3Rpb25Db2RlYCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSxcbiAgKTtcblxuICBpdChcInJlZnVzZXMgYSBkaXN0cmlidXRpb25Qcm9wcy5kZWZhdWx0QmVoYXZpb3Igb3ZlcnJpZGVcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgc3ludGgoe1xuICAgICAgICBjb2RlOiBCQVNJQ19BVVRILFxuICAgICAgICBvdmVycmlkZXM6ICgpID0+ICh7XG4gICAgICAgICAgZGlzdHJpYnV0aW9uUHJvcHM6IHtcbiAgICAgICAgICAgIGRlZmF1bHRCZWhhdmlvcjoge1xuICAgICAgICAgICAgICBvcmlnaW46IG5ldyBIdHRwT3JpZ2luKFwiZXhhbXBsZS5jb21cIiksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgKS50b1Rocm93KC9vdmVycmlkZXNcXC5kaXN0cmlidXRpb25Qcm9wc1xcLmRlZmF1bHRCZWhhdmlvci8pO1xuICB9KTtcblxuICBpdChcImxldHMgYSBiYXNlUGF0aCBhcHAgcmVwbGFjZSB0aGUgZGVmYXVsdCBiZWhhdmlvclwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+XG4gICAgICBzeW50aCh7XG4gICAgICAgIGNvZGU6IEJBU0lDX0FVVEgsXG4gICAgICAgIGJhc2VQYXRoOiBcIi9hcHBcIixcbiAgICAgICAgb3ZlcnJpZGVzOiAoKSA9PiAoe1xuICAgICAgICAgIGRpc3RyaWJ1dGlvblByb3BzOiB7XG4gICAgICAgICAgICBkZWZhdWx0QmVoYXZpb3I6IHsgb3JpZ2luOiBuZXcgSHR0cE9yaWdpbihcImV4YW1wbGUuY29tXCIpIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICB9KSxcbiAgICApLm5vdC50b1Rocm93KCk7XG4gIH0pO1xuXG4gIGl0KFwia2VlcHMgY2RrLW5leHRqcydzIGNvZGUgb3V0IG9mIHRoZSBkZXBsb3llZCBpbmRlbnRhdGlvblwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBmdW5jdGlvbkZvciB9ID0gc3ludGgoeyBjb2RlOiBCQVNJQ19BVVRIIH0pO1xuICAgIGNvbnN0IGNvZGUgPSBmdW5jdGlvbkZvcihcIipcIikuRnVuY3Rpb25Db2RlIGFzIHN0cmluZztcbiAgICBjb25zdCBvd24gPSBjb2RlLnNsaWNlKGNvZGUuaW5kZXhPZihcImFzeW5jIGZ1bmN0aW9uIGhhbmRsZXJcIikpO1xuICAgIGV4cGVjdChvd24pLm5vdC50b01hdGNoKC9eWyBcXHRdL20pO1xuICB9KTtcblxuICBpdChcIndhcm5zLCByYXRoZXIgdGhhbiBtZWFzdXJlcywgd2hlbiB0aGUgY29kZSBjb250YWlucyBhIHRva2VuXCIsICgpID0+IHtcbiAgICBjb25zdCB7IHN0YWNrIH0gPSBzeW50aCh7XG4gICAgICBjb2RlOiBgZnVuY3Rpb24gdmlld2VyUmVxdWVzdChldmVudCkgeyByZXR1cm4gJHtMYXp5LnN0cmluZyh7IHByb2R1Y2U6ICgpID0+ICdcInhcIicgfSl9OyB9YCxcbiAgICB9KTtcbiAgICBBbm5vdGF0aW9ucy5mcm9tU3RhY2soc3RhY2spLmhhc1dhcm5pbmcoXG4gICAgICBcIipcIixcbiAgICAgIE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoXCJjb250YWlucyBhIENESyB0b2tlblwiKSxcbiAgICApO1xuICB9KTtcblxuICBpdChcInJlZnVzZXMgYSBzdGF0aWMgb3ZlcnJpZGUgdGhhdCBhbHJlYWR5IGNsYWltcyB2aWV3ZXItcmVxdWVzdFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+XG4gICAgICBzeW50aCh7XG4gICAgICAgIGNvZGU6IEJBU0lDX0FVVEgsXG4gICAgICAgIG92ZXJyaWRlczogKHN0YWNrKSA9PiAoe1xuICAgICAgICAgIHN0YXRpY0JlaGF2aW9yT3B0aW9uczoge1xuICAgICAgICAgICAgZnVuY3Rpb25Bc3NvY2lhdGlvbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogRnVuY3Rpb25FdmVudFR5cGUuVklFV0VSX1JFUVVFU1QsXG4gICAgICAgICAgICAgICAgZnVuY3Rpb246IG5ldyBDbG91ZEZyb250RnVuY3Rpb24oc3RhY2ssIFwiVXNlckZuXCIsIHtcbiAgICAgICAgICAgICAgICAgIGNvZGU6IEZ1bmN0aW9uQ29kZS5mcm9tSW5saW5lKFxuICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHsgcmV0dXJuIGV2ZW50LnJlcXVlc3Q7IH1cIixcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgKS50b1Rocm93KC9vdmVycmlkZXNcXC5zdGF0aWNCZWhhdmlvck9wdGlvbnNcXC5mdW5jdGlvbkFzc29jaWF0aW9ucy8pO1xuICB9KTtcblxuICBpdC5lYWNoKFtcbiAgICBbXCJubyB2aWV3ZXJSZXF1ZXN0XCIsIFwidmFyIHggPSAxO1wiLCAvbXVzdCBkZWZpbmUgYHZpZXdlclJlcXVlc3RcXChldmVudFxcKWAvXSxcbiAgICAuLi5bXG4gICAgICBcImZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHt9XCIsXG4gICAgICBcImZ1bmN0aW9uKiBoYW5kbGVyKGV2ZW50KSB7fVwiLFxuICAgICAgXCJjb25zdCBoYW5kbGVyID0gKGV2ZW50KSA9PiBldmVudC5yZXF1ZXN0O1wiLFxuICAgICAgXCJsZXQgYSA9IDEsIGhhbmRsZXIgPSAyO1wiLFxuICAgICAgXCJ2YXIgaGFuZGxlciA9IChldmVudCkgPT4gZXZlbnQucmVxdWVzdDtcIixcbiAgICAgIFwidmFyIHsgaGFuZGxlciB9ID0geyBoYW5kbGVyOiAoZXZlbnQpID0+IGV2ZW50LnJlcXVlc3QgfTtcIixcbiAgICAgICdnbG9iYWxUaGlzW1wiaGFuZGxlclwiXSA9IChldmVudCkgPT4gZXZlbnQucmVxdWVzdDsnLFxuICAgICAgXCJ2YXIgY2RrTmV4dGpzSGFuZGxlcjsgaGFuZGxlciA9IGNka05leHRqc0hhbmRsZXI7XCIsXG4gICAgXS5tYXAoKGRlY2xhcmF0aW9uKTogW3N0cmluZywgc3RyaW5nLCBSZWdFeHBdID0+IFtcbiAgICAgIGBoYW5kbGVyIGluIFxcYCR7ZGVjbGFyYXRpb259XFxgYCxcbiAgICAgIGAke2RlY2xhcmF0aW9ufVxcbmZ1bmN0aW9uIHZpZXdlclJlcXVlc3QoZXZlbnQpIHt9YCxcbiAgICAgIC91c2VzIHRoZSBuYW1lIGBoYW5kbGVyYC8sXG4gICAgXSksXG4gICAgW1xuICAgICAgXCJ2aWV3ZXJSZXF1ZXN0IG9ubHkgY29tcGFyZWQsIG5ldmVyIGRlY2xhcmVkXCIsXG4gICAgICAnY29uc3Qgb2sgPSB0eXBlb2Ygdmlld2VyUmVxdWVzdCA9PT0gXCJmdW5jdGlvblwiOycsXG4gICAgICAvbXVzdCBkZWZpbmUgYHZpZXdlclJlcXVlc3RcXChldmVudFxcKWAvLFxuICAgIF0sXG4gICAgW1xuICAgICAgXCJ2aWV3ZXJSZXF1ZXN0IG9ubHkgYXNzaWduZWQgYXMgYSBwcm9wZXJ0eVwiLFxuICAgICAgXCJjb25zdCBjZmcgPSB7fTsgY2ZnLnZpZXdlclJlcXVlc3QgPSBmdW5jdGlvbiAoZXZlbnQpIHt9O1wiLFxuICAgICAgL211c3QgZGVmaW5lIGB2aWV3ZXJSZXF1ZXN0XFwoZXZlbnRcXClgLyxcbiAgICBdLFxuICAgIFtcbiAgICAgIFwibW9yZSB0aGFuIGZpdHMgaW4gYSBDbG91ZEZyb250IEZ1bmN0aW9uXCIsXG4gICAgICBgZnVuY3Rpb24gdmlld2VyUmVxdWVzdChldmVudCkge30gLyogJHtcInhcIi5yZXBlYXQoMTAgKiAxMDI0KX0gKi9gLFxuICAgICAgL292ZXIgQ2xvdWRGcm9udCdzIGxpbWl0IG9mIDEwMjQwLyxcbiAgICBdLFxuICBdKShcInJlZnVzZXMgY29kZSB3aXRoICVzXCIsIChfbmFtZSwgY29kZSwgZXJyb3IpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gc3ludGgoeyBjb2RlIH0pKS50b1Rocm93KGVycm9yKTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
1177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWRpc3RyaWJ1dGlvbi50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25leHRqcy1kaXN0cmlidXRpb24udGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFDQUEwQztBQUMxQyw2Q0FBeUQ7QUFDekQsdURBQXNFO0FBQ3RFLCtEQU1vQztBQUNwQywrRUFBZ0U7QUFDaEUsaURBQTBDO0FBQzFDLHVGQUFpRjtBQUNqRix1REFNZ0M7QUFDaEMsK0NBQTRDO0FBQzVDLCtEQUE0RDtBQUM1RCwyQ0FBeUM7QUFDekMsK0RBSStCO0FBRS9COzs7OztHQUtHO0FBQ0gsUUFBUSxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsRUFBRTtJQUMzRCxNQUFNLEtBQUssR0FBRyxDQUNaLFVBQW9CLEVBQ3BCLFFBS0ksRUFBRSxFQUNOLEVBQUU7UUFDRixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsSUFBSSxpQkFBRyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDaEQsTUFBTSxjQUFjLEdBQXNDLFVBQVUsQ0FBQyxHQUFHLENBQ3RFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDUCxNQUFNLEVBQUUsR0FBRyxJQUFJLHFCQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUU7Z0JBQ2hELElBQUksRUFBRSxpQkFBSSxDQUFDLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQztnQkFDcEQsT0FBTyxFQUFFLGVBQWU7Z0JBQ3hCLE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7YUFDN0IsQ0FBQyxDQUFDO1lBQ0gsT0FBTztnQkFDTCxJQUFJO2dCQUNKLFdBQVcsRUFBRSxJQUFJLHdCQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUU7b0JBQ2hELFFBQVEsRUFBRSxFQUFFO29CQUNaLFFBQVEsRUFBRSxnQ0FBbUIsQ0FBQyxPQUFPO2lCQUN0QyxDQUFDO2FBQ0gsQ0FBQztRQUNKLENBQUMsQ0FD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MUIsQ0FBQztRQUNGO1lBQ0UsNkNBQTZDO1lBQzdDLGlEQUFpRDtZQUNqRCxzQ0FBc0M7U0FDdkM7UUFDRDtZQUNFLDJDQUEyQztZQUMzQywwREFBMEQ7WUFDMUQsc0NBQXNDO1NBQ3ZDO1FBQ0Q7WUFDRSx5Q0FBeUM7WUFDekMsdUNBQXVDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLO1lBQ2pFLGtDQUFrQztTQUNuQztLQUNGLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDaEQsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJ1bkluTmV3Q29udGV4dCB9IGZyb20gXCJub2RlOnZtXCI7XG5pbXBvcnQgeyBBcHAsIER1cmF0aW9uLCBMYXp5LCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQW5ub3RhdGlvbnMsIE1hdGNoLCBUZW1wbGF0ZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hc3NlcnRpb25zXCI7XG5pbXBvcnQge1xuICBGdW5jdGlvbiBhcyBDbG91ZEZyb250RnVuY3Rpb24sXG4gIEZ1bmN0aW9uQ29kZSxcbiAgRnVuY3Rpb25FdmVudFR5cGUsXG4gIEtleVZhbHVlU3RvcmUsXG4gIFJlc3BvbnNlSGVhZGVyc1BvbGljeSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZGZyb250XCI7XG5pbXBvcnQgeyBIdHRwT3JpZ2luIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZGZyb250LW9yaWdpbnNcIjtcbmltcG9ydCB7IFZwYyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkxvYWRCYWxhbmNlciB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2MlwiO1xuaW1wb3J0IHtcbiAgQ29kZSxcbiAgRnVuY3Rpb24gYXMgTGFtYmRhRnVuY3Rpb24sXG4gIEZ1bmN0aW9uVXJsLFxuICBGdW5jdGlvblVybEF1dGhUeXBlLFxuICBSdW50aW1lLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgQnVja2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHsgcGF0aFBhdHRlcm5zRm9yIH0gZnJvbSBcIi4vYWRhcHRlci9mdW5jdGlvbi1ncm91cHNcIjtcbmltcG9ydCB7IE5leHRqc1R5cGUgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIE5leHRqc0Rpc3RyaWJ1dGlvbixcbiAgTmV4dGpzRGlzdHJpYnV0aW9uRnVuY3Rpb25Hcm91cCxcbiAgTmV4dGpzRGlzdHJpYnV0aW9uT3ZlcnJpZGVzLFxufSBmcm9tIFwiLi9uZXh0anMtZGlzdHJpYnV0aW9uXCI7XG5cbi8qKlxuICogYGZ1bmN0aW9uR3JvdXBzYCByb3V0aW5nIGF0IHRoZSBlZGdlLiBgTmV4dGpzQnVpbGRgIGlzIGRlbGliZXJhdGVseSBub3RcbiAqIGludm9sdmVkOiB3aGljaCBiZWhhdmlvcnMgYSBncm91cCBnZXRzLCBhbmQgaW4gd2hhdCBvcmRlciwgaXMgdGhlIGFkYXB0ZXInc1xuICogZGVjaXNpb24gKGBmdW5jdGlvbi1ncm91cHMudGVzdC50c2ApLCBzbyB0aGVzZSBwYXNzIHRoZSBiZWhhdmlvcnMgaW4gZGlyZWN0bHlcbiAqIGFuZCBhc3NlcnQgb24gd2hhdCB0aGUgZGlzdHJpYnV0aW9uIGRvZXMgd2l0aCB0aGVtLlxuICovXG5kZXNjcmliZShcIk5leHRqc0Rpc3RyaWJ1dGlvbiBmdW5jdGlvbiBncm91cCBiZWhhdmlvcnNcIiwgKCkgPT4ge1xuICBjb25zdCBzZXR1cCA9IChcbiAgICBncm91cE5hbWVzOiBzdHJpbmdbXSxcbiAgICBwcm9wczoge1xuICAgICAgcm91dGVzRm9yPzogKG5hbWU6IHN0cmluZykgPT4gc3RyaW5nW107XG4gICAgICBwdWJsaWNEaXJFbnRyaWVzPzogc3RyaW5nW107XG4gICAgICBiYXNlUGF0aD86IHN0cmluZztcbiAgICAgIHRyYWlsaW5nU2xhc2g/OiBib29sZWFuO1xuICAgIH0gPSB7fSxcbiAgKSA9PiB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2sobmV3IEFwcCgpLCBcIlRlc3RTdGFja1wiKTtcbiAgICBjb25zdCBmdW5jdGlvbkdyb3VwczogTmV4dGpzRGlzdHJpYnV0aW9uRnVuY3Rpb25Hcm91cFtdID0gZ3JvdXBOYW1lcy5tYXAoXG4gICAgICAobmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBmbiA9IG5ldyBMYW1iZGFGdW5jdGlvbihzdGFjaywgYEZuJHtuYW1lfWAsIHtcbiAgICAgICAgICBjb2RlOiBDb2RlLmZyb21JbmxpbmUoXCJleHBvcnRzLmhhbmRsZXIgPSAoKSA9PiB7fTtcIiksXG4gICAgICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjJfWCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBmdW5jdGlvblVybDogbmV3IEZ1bmN0aW9uVXJsKHN0YWNrLCBgVXJsJHtuYW1lfWAsIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiBmbixcbiAgICAgICAgICAgIGF1dGhUeXBlOiBGdW5jdGlvblVybEF1dGhUeXBlLkFXU19JQU0sXG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICk7XG4gICAgLy8gSW4gdGhlIG9yZGVyIGdpdmVuOiB0aGUgYnVpbGQncyBsaXN0IGlzIGFscmVhZHkgbW9zdCBzcGVjaWZpYyBmaXJzdC5cbiAgICBjb25zdCBmdW5jdGlvbkdyb3VwQmVoYXZpb3JzID0gZ3JvdXBOYW1lcy5mbGF0TWFwKChncm91cCkgPT5cbiAgICAgIChwcm9wcy5yb3V0ZXNGb3I/Lihncm91cCkgPz8gW2AvJHtncm91cH0vKipgXSkuZmxhdE1hcCgocm91dGUpID0+XG4gICAgICAgIHBhdGhQYXR0ZXJuc0Zvcihyb3V0ZSwge1xuICAgICAgICAgIGhhc0RhdGFSb3V0ZXM6IGZhbHNlLFxuICAgICAgICAgIHRyYWlsaW5nU2xhc2g6IHByb3BzLnRyYWlsaW5nU2xhc2gsXG4gICAgICAgIH0pLm1hcCgocGF0dGVybikgPT4gKHsgZ3JvdXAsIHJvdXRlLCBwYXR0ZXJuIH0pKSxcbiAgICAgICksXG4gICAgKTtcbiAgICBjb25zdCBkZWZhdWx0Rm4gPSBuZXcgTGFtYmRhRnVuY3Rpb24oc3RhY2ssIFwiRm5EZWZhdWx0XCIsIHtcbiAgICAgIGNvZGU6IENvZGUuZnJvbUlubGluZShcImV4cG9ydHMuaGFuZGxlciA9ICgpID0+IHt9O1wiKSxcbiAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjJfWCxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhY2ssXG4gICAgICBmdW5jdGlvbkdyb3VwcyxcbiAgICAgIGZ1bmN0aW9uR3JvdXBCZWhhdmlvcnMsXG4gICAgICBkaXN0cmlidXRpb25Qcm9wczoge1xuICAgICAgICBhc3NldHNCdWNrZXQ6IG5ldyBCdWNrZXQoc3RhY2ssIFwiQXNzZXRzXCIpLFxuICAgICAgICBiYXNlUGF0aDogcHJvcHMuYmFzZVBhdGgsXG4gICAgICAgIGZ1bmN0aW9uVXJsOiBuZXcgRnVuY3Rpb25Vcmwoc3RhY2ssIFwiVXJsRGVmYXVsdFwiLCB7XG4gICAgICAgICAgZnVuY3Rpb246IGRlZmF1bHRGbixcbiAgICAgICAgICBhdXRoVHlwZTogRnVuY3Rpb25VcmxBdXRoVHlwZS5BV1NfSUFNLFxuICAgICAgICB9KSxcbiAgICAgICAgbmV4dGpzVHlwZTogTmV4dGpzVHlwZS5HTE9CQUxfRlVOQ1RJT05TLFxuICAgICAgICBwdWJsaWNEaXJFbnRyaWVzOiAocHJvcHMucHVibGljRGlyRW50cmllcyA/PyBbXSkubWFwKChuYW1lKSA9PiAoe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgaXNEaXJlY3Rvcnk6IGZhbHNlLFxuICAgICAgICB9KSksXG4gICAgICB9LFxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgcGF0aFBhdHRlcm5zID0gKHN0YWNrOiBTdGFjaykgPT4ge1xuICAgIGNvbnN0IGRpc3RyaWJ1dGlvbnMgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spLmZpbmRSZXNvdXJjZXMoXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCIsXG4gICAgKTtcbiAgICBjb25zdCBjb25maWcgPVxuICAgICAgT2JqZWN0LnZhbHVlcyhkaXN0cmlidXRpb25zKVswXS5Qcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZztcbiAgICByZXR1cm4gKGNvbmZpZy5DYWNoZUJlaGF2aW9ycyBhcyBBcnJheTx7IFBhdGhQYXR0ZXJuOiBzdHJpbmcgfT4pLm1hcChcbiAgICAgIChiZWhhdmlvcikgPT4gYmVoYXZpb3IuUGF0aFBhdHRlcm4sXG4gICAgKTtcbiAgfTtcblxuICBpdChcImFkZHMgbm90aGluZyBleHRyYSB3aGVuIHRoZXJlIGFyZSBubyBncm91cHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgc3RhY2ssIGRpc3RyaWJ1dGlvblByb3BzIH0gPSBzZXR1cChbXSk7XG4gICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwgZGlzdHJpYnV0aW9uUHJvcHMpO1xuICAgIGV4cGVjdChwYXRoUGF0dGVybnMoc3RhY2spKS50b0VxdWFsKFtcIl9uZXh0L3N0YXRpYypcIiwgXCJfbmV4dC9pbWFnZSpcIl0pO1xuICB9KTtcblxuICBkZXNjcmliZShcInNlcnZpY2Ugd29ya2Vyc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmljZVdvcmtlclBvbGljeSA9IChzdGFjazogU3RhY2spID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC52YWx1ZXMoXG4gICAgICAgIFRlbXBsYXRlLmZyb21TdGFjayhzdGFjaykuZmluZFJlc291cmNlcyhcbiAgICAgICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCIsXG4gICAgICAgICksXG4gICAgICApWzBdLlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnO1xuICAgICAgY29uc3QgYmVoYXZpb3IgPSAoXG4gICAgICAgIGNvbmZpZy5DYWNoZUJlaGF2aW9ycyBhcyBBcnJheTx7XG4gICAgICAgICAgUGF0aFBhdHRlcm46IHN0cmluZztcbiAgICAgICAgICBSZXNwb25zZUhlYWRlcnNQb2xpY3lJZDogeyBSZWY6IHN0cmluZyB9O1xuICAgICAgICB9PlxuICAgICAgKS5maW5kKCh7IFBhdGhQYXR0ZXJuIH0pID0+IFBhdGhQYXR0ZXJuLmluY2x1ZGVzKFwic2VydmljZS13b3JrZXJcIikpITtcbiAgICAgIGNvbnN0IHBvbGljaWVzID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5maW5kUmVzb3VyY2VzKFxuICAgICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6UmVzcG9uc2VIZWFkZXJzUG9saWN5XCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHBvbGljaWVzW2JlaGF2aW9yLlJlc3BvbnNlSGVhZGVyc1BvbGljeUlkLlJlZl0uUHJvcGVydGllc1xuICAgICAgICAuUmVzcG9uc2VIZWFkZXJzUG9saWN5Q29uZmlnO1xuICAgIH07XG5cbiAgICBpdChcInNlbmRzIFNlcnZpY2UtV29ya2VyLUFsbG93ZWQgZnJvbSBhIGJlaGF2aW9yIGFoZWFkIG9mIF9uZXh0L3N0YXRpYypcIiwgKCkgPT4ge1xuICAgICAgLy8gQ2xvdWRGcm9udCBzdG9wcyBhdCB0aGUgZmlyc3QgbWF0Y2gsIHNvIGFmdGVyIGBfbmV4dC9zdGF0aWMqYCBpdCB3b3VsZFxuICAgICAgLy8gbmV2ZXIgYmUgcmVhY2hlZC5cbiAgICAgIGNvbnN0IHsgc3RhY2ssIGRpc3RyaWJ1dGlvblByb3BzIH0gPSBzZXR1cChbXSk7XG4gICAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgICBzZXJ2aWNlV29ya2VyQWxsb3dlZDogXCIvXCIsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChwYXRoUGF0dGVybnMoc3RhY2spKS50b0VxdWFsKFtcbiAgICAgICAgXCJfbmV4dC9zdGF0aWMvc2VydmljZS13b3JrZXIvKlwiLFxuICAgICAgICBcIl9uZXh0L3N0YXRpYypcIixcbiAgICAgICAgXCJfbmV4dC9pbWFnZSpcIixcbiAgICAgIF0pO1xuICAgICAgY29uc3QgcG9saWN5ID0gc2VydmljZVdvcmtlclBvbGljeShzdGFjayk7XG4gICAgICBleHBlY3QocG9saWN5LkN1c3RvbUhlYWRlcnNDb25maWcuSXRlbXMpLnRvRXF1YWwoW1xuICAgICAgICB7IEhlYWRlcjogXCJTZXJ2aWNlLVdvcmtlci1BbGxvd2VkXCIsIFZhbHVlOiBcIi9cIiwgT3ZlcnJpZGU6IHRydWUgfSxcbiAgICAgIF0pO1xuICAgICAgLy8gVGhlIHNlY3VyaXR5IGhlYWRlcnMgdGhlIG90aGVyIHN0YXRpYyBiZWhhdmlvcnMgc2VuZC5cbiAgICAgIGV4cGVjdChcbiAgICAgICAgcG9saWN5LlNlY3VyaXR5SGVhZGVyc0NvbmZpZy5TdHJpY3RUcmFuc3BvcnRTZWN1cml0eSxcbiAgICAgICkudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwicHJlZml4ZXMgdGhlIHBhdHRlcm4gd2l0aCBiYXNlUGF0aFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IHN0YWNrLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW10sIHsgYmFzZVBhdGg6IFwiL2Jhc2VcIiB9KTtcbiAgICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgICAgLi4uZGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgICAgIHNlcnZpY2VXb3JrZXJBbGxvd2VkOiBcIi9iYXNlXCIsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChwYXRoUGF0dGVybnMoc3RhY2spWzBdKS50b0JlKFxuICAgICAgICBcIi9iYXNlL19uZXh0L3N0YXRpYy9zZXJ2aWNlLXdvcmtlci8qXCIsXG4gICAgICApO1xuICAgICAgZXhwZWN0KHNlcnZpY2VXb3JrZXJQb2xpY3koc3RhY2spLkN1c3RvbUhlYWRlcnNDb25maWcuSXRlbXMpLnRvRXF1YWwoW1xuICAgICAgICB7IEhlYWRlcjogXCJTZXJ2aWNlLVdvcmtlci1BbGxvd2VkXCIsIFZhbHVlOiBcIi9iYXNlXCIsIE92ZXJyaWRlOiB0cnVlIH0sXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwiYWRkcyBubyBiZWhhdmlvciB3aXRob3V0IHNlcnZpY2Ugd29ya2Vyc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IHN0YWNrLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW10pO1xuICAgICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwgZGlzdHJpYnV0aW9uUHJvcHMpO1xuICAgICAgZXhwZWN0KHBhdGhQYXR0ZXJucyhzdGFjaykpLm5vdC50b0NvbnRhaW4oXG4gICAgICAgIFwiX25leHQvc3RhdGljL3NlcnZpY2Utd29ya2VyLypcIixcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcImtlZXBzIHN0YXRpY1Jlc3BvbnNlSGVhZGVyc1BvbGljeVByb3BzLCBpdHMgY3VzdG9tIGhlYWRlcnMgaW5jbHVkZWRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgeyBzdGFjaywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9IHNldHVwKFtdKTtcbiAgICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgICAgLi4uZGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgICAgIHNlcnZpY2VXb3JrZXJBbGxvd2VkOiBcIi9cIixcbiAgICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgICAgc3RhdGljUmVzcG9uc2VIZWFkZXJzUG9saWN5UHJvcHM6IHtcbiAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyc1BvbGljeU5hbWU6IFwic3RhdGljXCIsXG4gICAgICAgICAgICBjdXN0b21IZWFkZXJzQmVoYXZpb3I6IHtcbiAgICAgICAgICAgICAgY3VzdG9tSGVhZGVyczogW3sgaGVhZGVyOiBcIlgtVGVhbVwiLCB2YWx1ZTogXCJhXCIsIG92ZXJyaWRlOiB0cnVlIH1dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwb2xpY3kgPSBzZXJ2aWNlV29ya2VyUG9saWN5KHN0YWNrKTtcbiAgICAgIC8vIE5hbWVzIGFyZSB1bmlxdWUgcGVyIGFjY291bnQsIHNvIGl0IGNhbid0IHNoYXJlIHRoZSBzdGF0aWMgcG9saWN5J3MuXG4gICAgICBleHBlY3QocG9saWN5Lk5hbWUpLnRvQmUoXCJzdGF0aWMtc3dcIik7XG4gICAgICBleHBlY3QocG9saWN5LkN1c3RvbUhlYWRlcnNDb25maWcuSXRlbXMpLnRvRXF1YWwoW1xuICAgICAgICB7IEhlYWRlcjogXCJYLVRlYW1cIiwgVmFsdWU6IFwiYVwiLCBPdmVycmlkZTogdHJ1ZSB9LFxuICAgICAgICB7IEhlYWRlcjogXCJTZXJ2aWNlLVdvcmtlci1BbGxvd2VkXCIsIFZhbHVlOiBcIi9cIiwgT3ZlcnJpZGU6IHRydWUgfSxcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJrZWVwcyBhIHN1ZmZpeGVkIHBvbGljeSBuYW1lIHdpdGhpbiBDbG91ZEZyb250J3MgMTI4IGNoYXJhY3RlcnNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgeyBzdGFjaywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9IHNldHVwKFtdKTtcbiAgICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgICAgLi4uZGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgICAgIHNlcnZpY2VXb3JrZXJBbGxvd2VkOiBcIi9cIixcbiAgICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgICAgc3RhdGljUmVzcG9uc2VIZWFkZXJzUG9saWN5UHJvcHM6IHtcbiAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyc1BvbGljeU5hbWU6IFwiYVwiLnJlcGVhdCgxMjgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChzZXJ2aWNlV29ya2VyUG9saWN5KHN0YWNrKS5OYW1lKS50b0JlKGAke1wiYVwiLnJlcGVhdCgxMjUpfS1zd2ApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJrZWVwcyBhIFNlcnZpY2UtV29ya2VyLUFsbG93ZWQgdGhlIHN0YXRpYyBvdmVycmlkZSBzZXRzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RhY2ssIGRpc3RyaWJ1dGlvblByb3BzIH0gPSBzZXR1cChbXSk7XG4gICAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgICBzZXJ2aWNlV29ya2VyQWxsb3dlZDogXCIvXCIsXG4gICAgICAgIG92ZXJyaWRlczoge1xuICAgICAgICAgIHN0YXRpY1Jlc3BvbnNlSGVhZGVyc1BvbGljeVByb3BzOiB7XG4gICAgICAgICAgICBjdXN0b21IZWFkZXJzQmVoYXZpb3I6IHtcbiAgICAgICAgICAgICAgY3VzdG9tSGVhZGVyczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGhlYWRlcjogXCJzZXJ2aWNlLXdvcmtlci1hbGxvd2VkXCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogXCIvYXBwXCIsXG4gICAgICAgICAgICAgICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBleHBlY3Qoc2VydmljZVdvcmtlclBvbGljeShzdGFjaykuQ3VzdG9tSGVhZGVyc0NvbmZpZy5JdGVtcykudG9FcXVhbChbXG4gICAgICAgIHsgSGVhZGVyOiBcInNlcnZpY2Utd29ya2VyLWFsbG93ZWRcIiwgVmFsdWU6IFwiL2FwcFwiLCBPdmVycmlkZTogdHJ1ZSB9LFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdChcIndhcm5zIGFuZCB1c2VzIGEgcmVwbGFjZWQgc3RhdGljIHBvbGljeSBhcyBpdCBpc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IHN0YWNrLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW10pO1xuICAgICAgY29uc3QgZGlzdHJpYnV0aW9uID0gbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgICAuLi5kaXN0cmlidXRpb25Qcm9wcyxcbiAgICAgICAgc2VydmljZVdvcmtlckFsbG93ZWQ6IFwiL1wiLFxuICAgICAgICBvdmVycmlkZXM6IHtcbiAgICAgICAgICBzdGF0aWNCZWhhdmlvck9wdGlvbnM6IHtcbiAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyc1BvbGljeTpcbiAgICAgICAgICAgICAgUmVzcG9uc2VIZWFkZXJzUG9saWN5LmZyb21SZXNwb25zZUhlYWRlcnNQb2xpY3lJZChcbiAgICAgICAgICAgICAgICBzdGFjayxcbiAgICAgICAgICAgICAgICBcIkN1c3RvbVwiLFxuICAgICAgICAgICAgICAgIFwiY3VzdG9tLXBvbGljeVwiLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIEFubm90YXRpb25zLmZyb21TdGFjayhzdGFjaykuaGFzV2FybmluZyhcbiAgICAgICAgYC8ke2Rpc3RyaWJ1dGlvbi5ub2RlLnBhdGh9YCxcbiAgICAgICAgTWF0Y2guc3RyaW5nTGlrZVJlZ2V4cChcIlNlcnZpY2UtV29ya2VyLUFsbG93ZWRcIiksXG4gICAgICApO1xuICAgICAgY29uc3QgY29uZmlnID0gT2JqZWN0LnZhbHVlcyhcbiAgICAgICAgVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5maW5kUmVzb3VyY2VzKFxuICAgICAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIixcbiAgICAgICAgKSxcbiAgICAgIClbMF0uUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWc7XG4gICAgICBleHBlY3QoY29uZmlnLkNhY2hlQmVoYXZpb3JzWzBdKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgUGF0aFBhdHRlcm46IFwiX25leHQvc3RhdGljL3NlcnZpY2Utd29ya2VyLypcIixcbiAgICAgICAgUmVzcG9uc2VIZWFkZXJzUG9saWN5SWQ6IFwiY3VzdG9tLXBvbGljeVwiLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdChcImNvdW50cyBpdHMgYmVoYXZpb3IgYWdhaW5zdCB0aGUgYnVkZ2V0XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RhY2ssIGRpc3RyaWJ1dGlvblByb3BzIH0gPSBzZXR1cChbXSwge1xuICAgICAgICBwdWJsaWNEaXJFbnRyaWVzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA3MiB9LCAoXywgaSkgPT4gYGYke2l9YCksXG4gICAgICB9KTtcbiAgICAgIC8vIDMgZml4ZWQgKyA3MiBwdWJsaWMgPSA3NSBmaXRzOyB0aGUgc2VydmljZSB3b3JrZXIgYmVoYXZpb3IgbWFrZXMgNzYuXG4gICAgICBleHBlY3QoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgICAgICAgLi4uZGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgICAgICAgICBzZXJ2aWNlV29ya2VyQWxsb3dlZDogXCIvXCIsXG4gICAgICAgICAgfSksXG4gICAgICApLnRvVGhyb3coL25lZWRzIDc2IENsb3VkRnJvbnQgY2FjaGUgYmVoYXZpb3JzLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwibGV0cyB0aGUgT0FDIHByaW5jaXBhbCBsaXN0IHRoZSBidWNrZXQgc28gYSBtaXNzaW5nIGFzc2V0IGlzIGEgNDA0XCIsICgpID0+IHtcbiAgICBjb25zdCB7IHN0YWNrLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW10pO1xuICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIGRpc3RyaWJ1dGlvblByb3BzKTtcbiAgICBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6UzM6OkJ1Y2tldFBvbGljeVwiLCB7XG4gICAgICBQb2xpY3lEb2N1bWVudDoge1xuICAgICAgICBTdGF0ZW1lbnQ6IE1hdGNoLmFycmF5V2l0aChbXG4gICAgICAgICAgTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgICAgICBBY3Rpb246IFtcInMzOkdldE9iamVjdFwiLCBcInMzOkxpc3RCdWNrZXRcIl0sXG4gICAgICAgICAgICBQcmluY2lwYWw6IHsgU2VydmljZTogXCJjbG91ZGZyb250LmFtYXpvbmF3cy5jb21cIiB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICBdKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwiYWRkcyBncm91cCBiZWhhdmlvcnMgaW4gdGhlIGJ1aWxkJ3Mgb3JkZXIsIGFmdGVyIHRoZSBpbWFnZSBiZWhhdmlvclwiLCAoKSA9PiB7XG4gICAgLy8gQ2xvdWRGcm9udCBzdG9wcyBhdCB0aGUgZmlyc3QgbWF0Y2hpbmcgYmVoYXZpb3IsIHNvIGBhcGkvKmAgYWhlYWQgb2ZcbiAgICAvLyBgYXBpL3JlcG9ydHMvKmAgd291bGQgc2VuZCBldmVyeSByZXBvcnQgcmVxdWVzdCB0byB0aGUgd3JvbmcgZnVuY3Rpb24uXG4gICAgLy8gVGhlIGJ1aWxkIHNvcnRlZCB0aGVtIHdoZW4gaXQgY2hlY2tlZCB0aGVtOyByZS1zb3J0aW5nIGhlcmUgY291bGQgb25seVxuICAgIC8vIGRpc2FncmVlIHdpdGggdGhhdC5cbiAgICBjb25zdCB7IHN0YWNrLCBmdW5jdGlvbkdyb3VwcywgZnVuY3Rpb25Hcm91cEJlaGF2aW9ycywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9XG4gICAgICBzZXR1cChbXCJyZXBvcnRzXCIsIFwiYXBpXCJdLCB7XG4gICAgICAgIHJvdXRlc0ZvcjogKG5hbWUpID0+XG4gICAgICAgICAgbmFtZSA9PT0gXCJhcGlcIiA/IFtcIi9hcGkvKipcIl0gOiBbXCIvYXBpL3JlcG9ydHMvKipcIl0sXG4gICAgICB9KTtcbiAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAuLi5kaXN0cmlidXRpb25Qcm9wcyxcbiAgICAgIGZ1bmN0aW9uR3JvdXBzLFxuICAgICAgZnVuY3Rpb25Hcm91cEJlaGF2aW9ycyxcbiAgICB9KTtcbiAgICBleHBlY3QocGF0aFBhdHRlcm5zKHN0YWNrKSkudG9FcXVhbChbXG4gICAgICBcIl9uZXh0L3N0YXRpYypcIixcbiAgICAgIFwiX25leHQvaW1hZ2UqXCIsXG4gICAgICBcImFwaS9yZXBvcnRzLypcIixcbiAgICAgIFwiYXBpLypcIixcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoXCJrZWVwcyB0aGUgdHdvIHNsYXNoIHZhcmlhbnRzIGRpc3RpbmN0IHVuZGVyIGEgYmFzZVBhdGhcIiwgKCkgPT4ge1xuICAgIC8vIGBnZXRQYXRoUGF0dGVybmAgdXNlZCB0byBqb2luIHRocm91Z2ggYSBoZWxwZXIgdGhhdCBzdHJpcHMgdHJhaWxpbmdcbiAgICAvLyBzbGFzaGVzLCBzbyBgcHJpY2luZ2AgYW5kIGBwcmljaW5nL2AgYm90aCBiZWNhbWUgYC9iYXNlL3ByaWNpbmdgOiB0d29cbiAgICAvLyBiZWhhdmlvcnMgd2l0aCB0aGUgc2FtZSBwYXRoIHBhdHRlcm4sIHdoaWNoIENsb3VkRnJvbnQgcmVqZWN0cyBhdCBkZXBsb3lcbiAgICAvLyB3aXRoIG5vIGhpbnQgdGhhdCBgdHJhaWxpbmdTbGFzaGAgaXMgd2hhdCBwcm9kdWNlZCB0aGUgZHVwbGljYXRlLlxuICAgIGNvbnN0IHsgc3RhY2ssIGZ1bmN0aW9uR3JvdXBzLCBmdW5jdGlvbkdyb3VwQmVoYXZpb3JzLCBkaXN0cmlidXRpb25Qcm9wcyB9ID1cbiAgICAgIHNldHVwKFtcIm1rdFwiXSwge1xuICAgICAgICByb3V0ZXNGb3I6ICgpID0+IFtcIi9wcmljaW5nXCJdLFxuICAgICAgICBiYXNlUGF0aDogXCIvYmFzZVwiLFxuICAgICAgICB0cmFpbGluZ1NsYXNoOiB0cnVlLFxuICAgICAgfSk7XG4gICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgLi4uZGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgICBmdW5jdGlvbkdyb3VwcyxcbiAgICAgIGZ1bmN0aW9uR3JvdXBCZWhhdmlvcnMsXG4gICAgfSk7XG4gICAgY29uc3QgcGF0dGVybnMgPSBwYXRoUGF0dGVybnMoc3RhY2spO1xuICAgIGV4cGVjdChwYXR0ZXJucykudG9Db250YWluKFwiL2Jhc2UvcHJpY2luZ1wiKTtcbiAgICBleHBlY3QocGF0dGVybnMpLnRvQ29udGFpbihcIi9iYXNlL3ByaWNpbmcvXCIpO1xuICB9KTtcblxuICBpdChcImNvdW50cyB0aGUgYmFzZVBhdGggYmVoYXZpb3JzIGFnYWluc3QgdGhlIGJ1ZGdldFwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzdGFjaywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9IHNldHVwKFtdLCB7XG4gICAgICBiYXNlUGF0aDogXCIvYmFzZVwiLFxuICAgICAgcHVibGljRGlyRW50cmllczogQXJyYXkuZnJvbSh7IGxlbmd0aDogMjEgfSwgKF8sIGkpID0+IGBmaWxlJHtpfS50eHRgKSxcbiAgICB9KTtcbiAgICAvLyAzIGZpeGVkICsgdGhlIDIgYSBiYXNlUGF0aCBhZGRzIHRvIHN0YW5kIGluIGZvciB0aGUgZGVmYXVsdCBiZWhhdmlvciArIDIxXG4gICAgLy8gcHVibGljID0gMjYuIENvdW50aW5nIG9ubHkgdGhlIDMgcmVwb3J0ZWQgMjQgYW5kIGxldCB0aGUgc3ludGggdGhyb3VnaCwgc29cbiAgICAvLyB0aGUgbGltaXQgYXJyaXZlZCBhcyBhIENsb3VkRnJvbnQgZGVwbG95IGZhaWx1cmUuXG4gICAgZXhwZWN0KFxuICAgICAgKCkgPT5cbiAgICAgICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgICAgIG1heENhY2hlQmVoYXZpb3JzOiAyNSxcbiAgICAgICAgfSksXG4gICAgKS50b1Rocm93KC8yNiBDbG91ZEZyb250IGNhY2hlIGJlaGF2aW9ycy4qNSB1c2VkIGJ5IGNkay1uZXh0anMgaXRzZWxmL3MpO1xuICB9KTtcblxuICBpdChcImRlZmF1bHRzIHRoZSBidWRnZXQgdG8gQ2xvdWRGcm9udCdzIHF1b3RhIG9mIDc1XCIsICgpID0+IHtcbiAgICAvLyBUaGUgaGFyZC1jb2RlZCAyNSBwcmVkYXRlZCB0aGUgcXVvdGEncyBpbmNyZWFzZSB0byA3NS5cbiAgICBjb25zdCB7IHN0YWNrLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW10sIHtcbiAgICAgIHB1YmxpY0RpckVudHJpZXM6IEFycmF5LmZyb20oeyBsZW5ndGg6IDcyIH0sIChfLCBpKSA9PiBgZmlsZSR7aX0udHh0YCksXG4gICAgfSk7XG4gICAgZXhwZWN0KFxuICAgICAgKCkgPT4gbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwgZGlzdHJpYnV0aW9uUHJvcHMpLFxuICAgICkubm90LnRvVGhyb3coKTtcbiAgICBjb25zdCB7IHN0YWNrOiBvdmVyLCBkaXN0cmlidXRpb25Qcm9wczogb3ZlclByb3BzIH0gPSBzZXR1cChbXSwge1xuICAgICAgcHVibGljRGlyRW50cmllczogQXJyYXkuZnJvbSh7IGxlbmd0aDogNzMgfSwgKF8sIGkpID0+IGBmaWxlJHtpfS50eHRgKSxcbiAgICB9KTtcbiAgICBleHBlY3QoXG4gICAgICAoKSA9PiBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKG92ZXIsIFwiRGlzdHJpYnV0aW9uXCIsIG92ZXJQcm9wcyksXG4gICAgKS50b1Rocm93KFxuICAgICAgLzc2IENsb3VkRnJvbnQgY2FjaGUgYmVoYXZpb3JzLCBvdmVyIHRoZSBsaW1pdCBvZiA3NS4qc2V0IGBtYXhDYWNoZUJlaGF2aW9yc2AvcyxcbiAgICApO1xuICB9KTtcblxuICBpdChcImhvbm9ycyBhIHJhaXNlZCBtYXhDYWNoZUJlaGF2aW9yc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzdGFjaywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9IHNldHVwKFtdLCB7XG4gICAgICBwdWJsaWNEaXJFbnRyaWVzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA5NyB9LCAoXywgaSkgPT4gYGZpbGUke2l9LnR4dGApLFxuICAgIH0pO1xuICAgIGV4cGVjdChcbiAgICAgICgpID0+XG4gICAgICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgICAgICAuLi5kaXN0cmlidXRpb25Qcm9wcyxcbiAgICAgICAgICBtYXhDYWNoZUJlaGF2aW9yczogMTAwLFxuICAgICAgICB9KSxcbiAgICApLm5vdC50b1Rocm93KCk7XG4gIH0pO1xuXG4gIGl0KFwiZG9lcyBub3QgY291bnQgYmFzZVBhdGggYmVoYXZpb3JzIGZvciBhIGJhc2VQYXRoIG9mIC9cIiwgKCkgPT4ge1xuICAgIC8vIGBiYXNlUGF0aDogXCIvXCJgIG5vcm1hbGl6ZXMgdG8gbm8gYmFzZVBhdGggYW5kIGFkZHMgbm8gYmVoYXZpb3JzLCBzb1xuICAgIC8vIGNvdW50aW5nIDIgZm9yIGl0IGNvdWxkIHJlamVjdCBhbiBhcHAgdGhhdCBpcyB1bmRlciB0aGUgbGltaXQuXG4gICAgY29uc3QgeyBzdGFjaywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9IHNldHVwKFtdLCB7XG4gICAgICBiYXNlUGF0aDogXCIvXCIsXG4gICAgICBwdWJsaWNEaXJFbnRyaWVzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyMiB9LCAoXywgaSkgPT4gYGZpbGUke2l9LnR4dGApLFxuICAgIH0pO1xuICAgIGV4cGVjdChcbiAgICAgICgpID0+XG4gICAgICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgICAgICAuLi5kaXN0cmlidXRpb25Qcm9wcyxcbiAgICAgICAgICBtYXhDYWNoZUJlaGF2aW9yczogMjUsXG4gICAgICAgIH0pLFxuICAgICkubm90LnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIGEgYmVoYXZpb3IgZm9yIGEgZ3JvdXAgaXQgd2FzIG5vdCBnaXZlblwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzdGFjaywgZnVuY3Rpb25Hcm91cEJlaGF2aW9ycywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9IHNldHVwKFtcImFwaVwiXSk7XG4gICAgZXhwZWN0KFxuICAgICAgKCkgPT5cbiAgICAgICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgICAgIGZ1bmN0aW9uR3JvdXBCZWhhdmlvcnMsXG4gICAgICAgIH0pLFxuICAgICkudG9UaHJvdyhcbiAgICAgIC9yb3V0ZXMgdG8gZnVuY3Rpb24gZ3JvdXAgXCJhcGlcIiwgd2hpY2ggaXMgbm90IGluIGBmdW5jdGlvbkdyb3Vwc2AvLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwicG9pbnRzIGVhY2ggZ3JvdXAncyBiZWhhdmlvcnMgYXQgdGhhdCBncm91cCdzIG93biBvcmlnaW5cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgc3RhY2ssIGZ1bmN0aW9uR3JvdXBzLCBmdW5jdGlvbkdyb3VwQmVoYXZpb3JzLCBkaXN0cmlidXRpb25Qcm9wcyB9ID1cbiAgICAgIHNldHVwKFtcImFwaVwiXSwge1xuICAgICAgICByb3V0ZXNGb3I6ICgpID0+IFtcIi9hcGkvKipcIiwgXCIvaGVhbHRoXCJdLFxuICAgICAgfSk7XG4gICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgLi4uZGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgICBmdW5jdGlvbkdyb3VwcyxcbiAgICAgIGZ1bmN0aW9uR3JvdXBCZWhhdmlvcnMsXG4gICAgfSk7XG4gICAgY29uc3QgZGlzdHJpYnV0aW9ucyA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjaykuZmluZFJlc291cmNlcyhcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIixcbiAgICApO1xuICAgIGNvbnN0IGNvbmZpZyA9XG4gICAgICBPYmplY3QudmFsdWVzKGRpc3RyaWJ1dGlvbnMpWzBdLlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnO1xuICAgIGNvbnN0IGJlaGF2aW9ycyA9IGNvbmZpZy5DYWNoZUJlaGF2aW9ycyBhcyBBcnJheTx7XG4gICAgICBQYXRoUGF0dGVybjogc3RyaW5nO1xuICAgICAgVGFyZ2V0T3JpZ2luSWQ6IHN0cmluZztcbiAgICB9PjtcbiAgICBjb25zdCBncm91cE9yaWdpbnMgPSBuZXcgU2V0KFxuICAgICAgYmVoYXZpb3JzXG4gICAgICAgIC5maWx0ZXIoKGJlaGF2aW9yKSA9PlxuICAgICAgICAgIFtcImFwaS8qXCIsIFwiaGVhbHRoXCJdLmluY2x1ZGVzKGJlaGF2aW9yLlBhdGhQYXR0ZXJuKSxcbiAgICAgICAgKVxuICAgICAgICAubWFwKChiZWhhdmlvcikgPT4gYmVoYXZpb3IuVGFyZ2V0T3JpZ2luSWQpLFxuICAgICk7XG4gICAgLy8gT25lIG9yaWdpbiwgc2hhcmVkIGJ5IGJvdGggb2YgdGhlIGdyb3VwJ3MgcGF0dGVybnMsIGFuZCBub3QgdGhlIGRlZmF1bHQncy5cbiAgICBleHBlY3QoZ3JvdXBPcmlnaW5zLnNpemUpLnRvQmUoMSk7XG4gICAgZXhwZWN0KGdyb3VwT3JpZ2lucykubm90LnRvQ29udGFpbihcbiAgICAgIGNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvci5UYXJnZXRPcmlnaW5JZCxcbiAgICApO1xuICB9KTtcblxuICBpdChcInByZWZpeGVzIGdyb3VwIHBhdHRlcm5zIHdpdGggYmFzZVBhdGhcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgc3RhY2ssIGZ1bmN0aW9uR3JvdXBzLCBmdW5jdGlvbkdyb3VwQmVoYXZpb3JzLCBkaXN0cmlidXRpb25Qcm9wcyB9ID1cbiAgICAgIHNldHVwKFtcImFwaVwiXSwge1xuICAgICAgICByb3V0ZXNGb3I6ICgpID0+IFtcIi9hcGkvKipcIl0sXG4gICAgICAgIGJhc2VQYXRoOiBcIi9iYXNlXCIsXG4gICAgICB9KTtcbiAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAuLi5kaXN0cmlidXRpb25Qcm9wcyxcbiAgICAgIGZ1bmN0aW9uR3JvdXBzLFxuICAgICAgZnVuY3Rpb25Hcm91cEJlaGF2aW9ycyxcbiAgICB9KTtcbiAgICBleHBlY3QocGF0aFBhdHRlcm5zKHN0YWNrKSkudG9Db250YWluKFwiL2Jhc2UvYXBpLypcIik7XG4gIH0pO1xuXG4gIGl0KFwibmFtZXMgZXZlcnkgY2xhaW0gb24gdGhlIGJlaGF2aW9yIGJ1ZGdldCB3aGVuIGl0IGlzIGV4Y2VlZGVkXCIsICgpID0+IHtcbiAgICBjb25zdCB7IHN0YWNrLCBmdW5jdGlvbkdyb3VwcywgZnVuY3Rpb25Hcm91cEJlaGF2aW9ycywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9XG4gICAgICBzZXR1cChbXCJhcGlcIl0sIHtcbiAgICAgICAgcm91dGVzRm9yOiAoKSA9PiBbXCIvYXBpLyoqXCJdLFxuICAgICAgICBwdWJsaWNEaXJFbnRyaWVzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyMiB9LCAoXywgaSkgPT4gYGZpbGUke2l9LnR4dGApLFxuICAgICAgfSk7XG4gICAgZXhwZWN0KFxuICAgICAgKCkgPT5cbiAgICAgICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgICAgIGZ1bmN0aW9uR3JvdXBzLFxuICAgICAgICAgIGZ1bmN0aW9uR3JvdXBCZWhhdmlvcnMsXG4gICAgICAgICAgbWF4Q2FjaGVCZWhhdmlvcnM6IDI1LFxuICAgICAgICB9KSxcbiAgICApLnRvVGhyb3coXG4gICAgICAvMjYgQ2xvdWRGcm9udCBjYWNoZSBiZWhhdmlvcnMuKjEgZm9yIGBmdW5jdGlvbkdyb3Vwc2AgcGF0dGVybnMvcyxcbiAgICApO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgYSBncm91cCBwYXR0ZXJuIHRoYXQgZHVwbGljYXRlcyBhIHB1YmxpYy8gZGlyZWN0b3J5J3NcIiwgKCkgPT4ge1xuICAgIC8vIGBwdWJsaWMvZG9jcy9gIGFuZCBgL2RvY3MvKipgIGJvdGggZGVwbG95IGFzIGBkb2NzLypgOiB0aGUgc3ludGhcbiAgICAvLyBzdWNjZWVkZWQgYW5kIENsb3VkRnJvbnQgcmVqZWN0ZWQgdGhlIGRlcGxveS5cbiAgICBjb25zdCB7IHN0YWNrLCBmdW5jdGlvbkdyb3VwcywgZnVuY3Rpb25Hcm91cEJlaGF2aW9ycywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9XG4gICAgICBzZXR1cChbXCJkb2NzXCJdKTtcbiAgICBleHBlY3QoXG4gICAgICAoKSA9PlxuICAgICAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAgICAgLi4uZGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgICAgICAgZnVuY3Rpb25Hcm91cHMsXG4gICAgICAgICAgZnVuY3Rpb25Hcm91cEJlaGF2aW9ycyxcbiAgICAgICAgICBwdWJsaWNEaXJFbnRyaWVzOiBbeyBuYW1lOiBcImRvY3NcIiwgaXNEaXJlY3Rvcnk6IHRydWUgfV0sXG4gICAgICAgIH0pLFxuICAgICkudG9UaHJvdyhcbiAgICAgIC9wYXR0ZXJuIFwiXFwvZG9jc1xcL1xcKlxcKlwiIFxcKGdyb3VwIFwiZG9jc1wiXFwpIGRlcGxveXMgYXMgdGhlIHBhdGggcGF0dGVybiBcImRvY3NcXC9cXCpcIiwgd2hpY2ggYSB0b3AtbGV2ZWwgcHVibGljXFwvIGVudHJ5IGFscmVhZHkgdXNlcy8sXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIGEgZ3JvdXAgcGF0dGVybiBhIHB1YmxpYy8gZGlyZWN0b3J5J3MgYmVoYXZpb3Igd291bGQgc2hhZG93XCIsICgpID0+IHtcbiAgICAvLyBgZG9jcy8qYCBpcyBhZGRlZCBmaXJzdCwgc28gYGRvY3MvZ3VpZGUvKmAgbmV2ZXIgbWF0Y2hlcy5cbiAgICBjb25zdCB7IHN0YWNrLCBmdW5jdGlvbkdyb3VwcywgZnVuY3Rpb25Hcm91cEJlaGF2aW9ycywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9XG4gICAgICBzZXR1cChbXCJndWlkZVwiXSwge1xuICAgICAgICByb3V0ZXNGb3I6ICgpID0+IFtcIi9kb2NzL2d1aWRlLyoqXCJdLFxuICAgICAgfSk7XG4gICAgZXhwZWN0KFxuICAgICAgKCkgPT5cbiAgICAgICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgICAgIGZ1bmN0aW9uR3JvdXBzLFxuICAgICAgICAgIGZ1bmN0aW9uR3JvdXBCZWhhdmlvcnMsXG4gICAgICAgICAgcHVibGljRGlyRW50cmllczogW3sgbmFtZTogXCJkb2NzXCIsIGlzRGlyZWN0b3J5OiB0cnVlIH1dLFxuICAgICAgICB9KSxcbiAgICApLnRvVGhyb3coL3B1YmxpY1xcLyBlbnRyeSBiZWhpbmQgXCJkb2NzXFwvXFwqXCIgaXMgbWF0Y2hlZCBmaXJzdC8pO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgYW4gZXhhY3QgZ3JvdXAgcGF0dGVybiBlcXVhbCB0byBhIHB1YmxpYy8gZmlsZSdzLCBiYXNlUGF0aCBpbmNsdWRlZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzdGFjaywgZnVuY3Rpb25Hcm91cHMsIGZ1bmN0aW9uR3JvdXBCZWhhdmlvcnMsIGRpc3RyaWJ1dGlvblByb3BzIH0gPVxuICAgICAgc2V0dXAoW1wibWt0XCJdLCB7XG4gICAgICAgIHJvdXRlc0ZvcjogKCkgPT4gW1wiL3JvYm90cy50eHRcIl0sXG4gICAgICAgIGJhc2VQYXRoOiBcIi9iYXNlXCIsXG4gICAgICB9KTtcbiAgICBleHBlY3QoXG4gICAgICAoKSA9PlxuICAgICAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAgICAgLi4uZGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgICAgICAgZnVuY3Rpb25Hcm91cHMsXG4gICAgICAgICAgZnVuY3Rpb25Hcm91cEJlaGF2aW9ycyxcbiAgICAgICAgICBwdWJsaWNEaXJFbnRyaWVzOiBbeyBuYW1lOiBcInJvYm90cy50eHRcIiwgaXNEaXJlY3Rvcnk6IGZhbHNlIH1dLFxuICAgICAgICB9KSxcbiAgICApLnRvVGhyb3coL2RlcGxveXMgYXMgdGhlIHBhdGggcGF0dGVybiBcIlxcL2Jhc2VcXC9yb2JvdHNcXC50eHRcIi8pO1xuICB9KTtcblxuICBpdChcImFsbG93cyBhIGdyb3VwIHBhdHRlcm4gYmVzaWRlIGEgcHVibGljLyBlbnRyeSBpdCBkb2VzIG5vdCBvdmVybGFwXCIsICgpID0+IHtcbiAgICAvLyBgL2RvY3NgIGV4YWN0IGlzIG5vdCB1bmRlciBgZG9jcy8qYCwgYW5kIGBkb2NzLypgIGRvZXMgbm90IG1hdGNoIGAvZG9jc2AuXG4gICAgY29uc3QgeyBzdGFjaywgZnVuY3Rpb25Hcm91cHMsIGZ1bmN0aW9uR3JvdXBCZWhhdmlvcnMsIGRpc3RyaWJ1dGlvblByb3BzIH0gPVxuICAgICAgc2V0dXAoW1wiZG9jc1wiXSwge1xuICAgICAgICByb3V0ZXNGb3I6ICgpID0+IFtcIi9kb2NzXCJdLFxuICAgICAgfSk7XG4gICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgLi4uZGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgICBmdW5jdGlvbkdyb3VwcyxcbiAgICAgIGZ1bmN0aW9uR3JvdXBCZWhhdmlvcnMsXG4gICAgICBwdWJsaWNEaXJFbnRyaWVzOiBbeyBuYW1lOiBcImRvY3NcIiwgaXNEaXJlY3Rvcnk6IHRydWUgfV0sXG4gICAgfSk7XG4gICAgZXhwZWN0KHBhdGhQYXR0ZXJucyhzdGFjaykpLnRvRXF1YWwoXG4gICAgICBleHBlY3QuYXJyYXlDb250YWluaW5nKFtcImRvY3MvKlwiLCBcImRvY3NcIl0pLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwic2VydmVzIGJ1bmRsZXMgdW5kZXIgYSBwYXRoLXN0eWxlIGFzc2V0UHJlZml4LCByZXdyaXRpbmcgdGhlIHByZWZpeCBhd2F5XCIsICgpID0+IHtcbiAgICAvLyBOZXh0LmpzIGVtaXRzIGA8YXNzZXRQcmVmaXg+L19uZXh0L3N0YXRpYy8uLi5gIGZvciBldmVyeSBidW5kbGUgd2hpbGUgdGhlXG4gICAgLy8gb2JqZWN0cyBrZWVwIHRoZWlyIHVucHJlZml4ZWQgUzMga2V5cywgc28gd2l0aG91dCBhIGJlaGF2aW9yIG9mIGl0cyBvd24gdGhlXG4gICAgLy8gcmVxdWVzdCBmYWxscyB0aHJvdWdoIHRvIHRoZSBjb21wdXRlIG9yaWdpbiBhbmQgNDA0cyDigJQgdGhlIGRlcGxveW1lbnRcbiAgICAvLyBwYWNrYWdlIGNhcnJpZXMgbm8gYC5uZXh0L3N0YXRpY2AuIE1lYXN1cmVkIGFnYWluc3RcbiAgICAvLyBgdGVzdC9lMmUvYXBwLWRpci9hc3NldC1wcmVmaXhgLCB3aGVyZSAyIG9mIDcgY2FzZXMgZmFpbGVkIG9uIGV4YWN0bHkgdGhhdC5cbiAgICBjb25zdCB7IHN0YWNrLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW10pO1xuICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgYXNzZXRQcmVmaXg6IFwiL2N1c3RvbS1hc3NldC1wcmVmaXhcIixcbiAgICB9KTtcbiAgICAvLyBBaGVhZCBvZiB0aGUgYmFyZSBgX25leHQvc3RhdGljKmAgaW4gbm90aGluZyBidXQgbGlzdCBwb3NpdGlvbjsgdGhlIHR3b1xuICAgIC8vIHBhdHRlcm5zIGNhbm5vdCBib3RoIG1hdGNoIG9uZSByZXF1ZXN0LCBzbyBvcmRlciBkb2VzIG5vdCBtYXR0ZXIgaGVyZS5cbiAgICBleHBlY3QocGF0aFBhdHRlcm5zKHN0YWNrKSkudG9FcXVhbChbXG4gICAgICBcIl9uZXh0L3N0YXRpYypcIixcbiAgICAgIFwiL2N1c3RvbS1hc3NldC1wcmVmaXgvX25leHQvc3RhdGljKlwiLFxuICAgICAgXCJfbmV4dC9pbWFnZSpcIixcbiAgICBdKTtcbiAgICBjb25zdCBmbnMgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spLmZpbmRSZXNvdXJjZXMoXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RnVuY3Rpb25cIixcbiAgICApO1xuICAgIGNvbnN0IGNvZGUgPSBPYmplY3QudmFsdWVzKGZucylcbiAgICAgIC5tYXAoKGZuKSA9PiBmbi5Qcm9wZXJ0aWVzLkZ1bmN0aW9uQ29kZSBhcyBzdHJpbmcpXG4gICAgICAuZmluZCgoaXQpID0+IGl0LmluY2x1ZGVzKFwicmVxdWVzdC51cmkuc2xpY2VcIikpO1xuICAgIC8vIGBcIi9jdXN0b20tYXNzZXQtcHJlZml4XCIubGVuZ3RoYCwgc28gYC9jdXN0b20tYXNzZXQtcHJlZml4L19uZXh0L3N0YXRpYy94YFxuICAgIC8vIHJlYWNoZXMgUzMgYXMgYF9uZXh0L3N0YXRpYy94YC5cbiAgICBleHBlY3QoY29kZSkudG9Db250YWluKCdcIlwiICsgcmVxdWVzdC51cmkuc2xpY2UoMjApJyk7XG4gIH0pO1xuXG4gIGl0KFwicmVmdXNlcyBhbiBhc3NldFByZWZpeCB3aGVuIGFuIG92ZXJyaWRlIGFscmVhZHkgY2xhaW1zIFZJRVdFUl9SRVFVRVNUXCIsICgpID0+IHtcbiAgICAvLyBDbG91ZEZyb250IHBlcm1pdHMgb25lIGZ1bmN0aW9uIHBlciBldmVudCB0eXBlIHBlciBiZWhhdmlvciwgc28gdGhlXG4gICAgLy8gcmV3cml0ZSBhbmQgdGhlIG92ZXJyaWRlIGNhbm5vdCBjb2V4aXN0OiB0aGUgc3RhY2sgc3ludGhlZCBjbGVhbmx5IGFuZCB3YXNcbiAgICAvLyByZWplY3RlZCBhdCBkZXBsb3ksIG5hbWluZyBuZWl0aGVyIHRoZSBvdmVycmlkZSBub3IgYGFzc2V0UHJlZml4YC5cbiAgICBjb25zdCB7IHN0YWNrLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW10pO1xuICAgIGV4cGVjdChcbiAgICAgICgpID0+XG4gICAgICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgICAgICAuLi5kaXN0cmlidXRpb25Qcm9wcyxcbiAgICAgICAgICBhc3NldFByZWZpeDogXCIvY2RuXCIsXG4gICAgICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgICAgICBzdGF0aWNCZWhhdmlvck9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgZnVuY3Rpb25Bc3NvY2lhdGlvbnM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBldmVudFR5cGU6IEZ1bmN0aW9uRXZlbnRUeXBlLlZJRVdFUl9SRVFVRVNULFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb246IG5ldyBDbG91ZEZyb250RnVuY3Rpb24oc3RhY2ssIFwiVXNlckZuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogRnVuY3Rpb25Db2RlLmZyb21JbmxpbmUoXG4gICAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7IHJldHVybiBldmVudC5yZXF1ZXN0OyB9XCIsXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICApLnRvVGhyb3coXG4gICAgICAvYXNzb2NpYXRlcyBhIENsb3VkRnJvbnQgZnVuY3Rpb24gd2l0aCB2aWV3ZXItcmVxdWVzdCwgYnV0IHNlcnZpbmcgYGFzc2V0UHJlZml4YC8sXG4gICAgKTtcbiAgfSk7XG5cbiAgY29uc3QgdXNlckZuID0gKHN0YWNrOiBTdGFjaywgZXZlbnRUeXBlOiBGdW5jdGlvbkV2ZW50VHlwZSkgPT4gKHtcbiAgICBldmVudFR5cGUsXG4gICAgZnVuY3Rpb246IG5ldyBDbG91ZEZyb250RnVuY3Rpb24oc3RhY2ssIGBVc2VyRm4ke2V2ZW50VHlwZX1gLCB7XG4gICAgICBjb2RlOiBGdW5jdGlvbkNvZGUuZnJvbUlubGluZShcbiAgICAgICAgXCJmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7IHJldHVybiBldmVudC5yZXF1ZXN0IHx8IGV2ZW50LnJlc3BvbnNlOyB9XCIsXG4gICAgICApLFxuICAgIH0pLFxuICB9KTtcblxuICBpdC5lYWNoKFtcImR5bmFtaWNCZWhhdmlvck9wdGlvbnNcIiwgXCJpbWFnZUJlaGF2aW9yT3B0aW9uc1wiXSBhcyBjb25zdCkoXG4gICAgXCJyZWZ1c2VzIGEgJXMgb3ZlcnJpZGUgdGhhdCB3b3VsZCByZXBsYWNlIHRoZSB4LWZvcndhcmRlZC1ob3N0IGZ1bmN0aW9uXCIsXG4gICAgKG92ZXJyaWRlTmFtZSkgPT4ge1xuICAgICAgLy8gVGhlIHJ1bnRpbWUgdHJ1c3RzIGB4LWZvcndhcmRlZC1ob3N0YCBvbiBGdW5jdGlvbiBVUkwgZXZlbnRzIGJlY2F1c2VcbiAgICAgIC8vIHRoaXMgZnVuY3Rpb24gb3ZlcndyaXRlcyBpdDsgcmVwbGFjZWQsIGEgdmlld2VyJ3Mgb3duIGhlYWRlciByZWFjaGVzIGl0LlxuICAgICAgY29uc3QgeyBzdGFjaywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9IHNldHVwKFtdKTtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAgICAgICAuLi5kaXN0cmlidXRpb25Qcm9wcyxcbiAgICAgICAgICAgIG92ZXJyaWRlczoge1xuICAgICAgICAgICAgICBbb3ZlcnJpZGVOYW1lXToge1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uQXNzb2NpYXRpb25zOiBbXG4gICAgICAgICAgICAgICAgICB1c2VyRm4oc3RhY2ssIEZ1bmN0aW9uRXZlbnRUeXBlLlZJRVdFUl9SRVFVRVNUKSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICkudG9UaHJvdyhcbiAgICAgICAgbmV3IFJlZ0V4cChgb3ZlcnJpZGVzXFxcXC4ke292ZXJyaWRlTmFtZX1cXFxcLmZ1bmN0aW9uQXNzb2NpYXRpb25zYCksXG4gICAgICApO1xuICAgIH0sXG4gICk7XG5cbiAgaXQoXCJrZWVwcyB0aGUgeC1mb3J3YXJkZWQtaG9zdCBmdW5jdGlvbiBuZXh0IHRvIGFuIG92ZXJyaWRlJ3Mgb3RoZXIgYXNzb2NpYXRpb25zXCIsICgpID0+IHtcbiAgICBjb25zdCB7IHN0YWNrLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW10pO1xuICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgIGR5bmFtaWNCZWhhdmlvck9wdGlvbnM6IHtcbiAgICAgICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogW1xuICAgICAgICAgICAgdXNlckZuKHN0YWNrLCBGdW5jdGlvbkV2ZW50VHlwZS5WSUVXRVJfUkVTUE9OU0UpLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC52YWx1ZXMoXG4gICAgICBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spLmZpbmRSZXNvdXJjZXMoXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiKSxcbiAgICApWzBdLlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnO1xuICAgIGNvbnN0IGV2ZW50VHlwZXMgPSAoXG4gICAgICBjb25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3IuRnVuY3Rpb25Bc3NvY2lhdGlvbnMgYXMgQXJyYXk8e1xuICAgICAgICBFdmVudFR5cGU6IHN0cmluZztcbiAgICAgIH0+XG4gICAgKS5tYXAoKGFzc29jaWF0aW9uKSA9PiBhc3NvY2lhdGlvbi5FdmVudFR5cGUpO1xuICAgIGV4cGVjdChldmVudFR5cGVzLnNvcnQoKSkudG9FcXVhbChbXCJ2aWV3ZXItcmVxdWVzdFwiLCBcInZpZXdlci1yZXNwb25zZVwiXSk7XG4gIH0pO1xuXG4gIGl0KFwicmV3cml0ZXMgYW4gYXNzZXRQcmVmaXggYmFjayBvbnRvIHRoZSBiYXNlUGF0aCBTMyBrZXlzXCIsICgpID0+IHtcbiAgICBjb25zdCB7IHN0YWNrLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW10sIHsgYmFzZVBhdGg6IFwiL2Jhc2VcIiB9KTtcbiAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAuLi5kaXN0cmlidXRpb25Qcm9wcyxcbiAgICAgIGFzc2V0UHJlZml4OiBcIi9jZG5cIixcbiAgICB9KTtcbiAgICBleHBlY3QocGF0aFBhdHRlcm5zKHN0YWNrKSkudG9Db250YWluKFwiL2Nkbi9fbmV4dC9zdGF0aWMqXCIpO1xuICAgIGNvbnN0IGZucyA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjaykuZmluZFJlc291cmNlcyhcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpGdW5jdGlvblwiLFxuICAgICk7XG4gICAgY29uc3QgY29kZSA9IE9iamVjdC52YWx1ZXMoZm5zKVxuICAgICAgLm1hcCgoZm4pID0+IGZuLlByb3BlcnRpZXMuRnVuY3Rpb25Db2RlIGFzIHN0cmluZylcbiAgICAgIC5maW5kKChpdCkgPT4gaXQuaW5jbHVkZXMoXCJyZXF1ZXN0LnVyaS5zbGljZVwiKSk7XG4gICAgLy8gVGhlIG9iamVjdHMgYXJlIGF0IGBiYXNlL19uZXh0L3N0YXRpYy8uLi5gOiBgYXNzZXRQcmVmaXhgIHJlcGxhY2VzIHRoZVxuICAgIC8vIGBiYXNlUGF0aGAgcHJlZml4IGluIHRoZSBVUkwsIHNvIHRoZSByZXdyaXRlIGhhcyB0byBwdXQgaXQgYmFjay5cbiAgICBleHBlY3QoY29kZSkudG9Db250YWluKCdcIi9iYXNlXCIgKyByZXF1ZXN0LnVyaS5zbGljZSg0KScpO1xuICB9KTtcblxuICBpdChcInNlcnZlcyBidW5kbGVzIHVuZGVyIHRoZSBwYXRoIGFuIGFic29sdXRlIGFzc2V0UHJlZml4IGNhcnJpZXNcIiwgKCkgPT4ge1xuICAgIC8vIGBuZXh0IGJ1aWxkYCBjb21waWxlcyBhIGAvY3VzdG9tLWFzc2V0LXByZWZpeC9fbmV4dC86cGF0aCsg4oaSIC9fbmV4dC86cGF0aCtgXG4gICAgLy8gcmV3cml0ZSBvZiBpdHMgb3duIGZvciBhbiBhYnNvbHV0ZSBwcmVmaXggd2l0aCBhIHBhdGgsIHNvIGBuZXh0IHN0YXJ0YCBzZXJ2ZXNcbiAgICAvLyBldmVyeSBidW5kbGUgdW5kZXIgdGhhdCBwYXRoIGFzIHdlbGwuIEEgQ0ROIGZyb250aW5nIHRoaXMgZGlzdHJpYnV0aW9uIHRoZXJlXG4gICAgLy8gZ2V0cyB0aGUgc2FtZSByZXF1ZXN0LCBhbmQgd2l0aG91dCBhIGJlaGF2aW9yIGl0IHJlYWNoZXMgdGhlIGNvbXB1dGUgb3JpZ2luXG4gICAgLy8gYW5kIDQwNHMuIE1lYXN1cmVkIGFnYWluc3QgYHRlc3QvZTJlL2FwcC1kaXIvYXNzZXQtcHJlZml4LWFic29sdXRlYCwgd2hvc2VcbiAgICAvLyBvbmUgY2FzZSBmYWlsZWQgb24gZXhhY3RseSB0aGF0LlxuICAgIGZvciAoY29uc3QgYXNzZXRQcmVmaXggb2YgW1xuICAgICAgXCJodHRwczovL2V4YW1wbGUudmVyY2VsLnNoL2N1c3RvbS1hc3NldC1wcmVmaXhcIixcbiAgICAgIFwiLy9leGFtcGxlLnZlcmNlbC5zaC9jdXN0b20tYXNzZXQtcHJlZml4L1wiLFxuICAgIF0pIHtcbiAgICAgIGNvbnN0IHsgc3RhY2ssIGRpc3RyaWJ1dGlvblByb3BzIH0gPSBzZXR1cChbXSk7XG4gICAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgICBhc3NldFByZWZpeCxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHBhdGhQYXR0ZXJucyhzdGFjaykpLnRvQ29udGFpbihcbiAgICAgICAgXCIvY3VzdG9tLWFzc2V0LXByZWZpeC9fbmV4dC9zdGF0aWMqXCIsXG4gICAgICApO1xuICAgICAgY29uc3QgY29kZSA9IE9iamVjdC52YWx1ZXMoXG4gICAgICAgIFRlbXBsYXRlLmZyb21TdGFjayhzdGFjaykuZmluZFJlc291cmNlcyhcIkFXUzo6Q2xvdWRGcm9udDo6RnVuY3Rpb25cIiksXG4gICAgICApXG4gICAgICAgIC5tYXAoKGZuKSA9PiBmbi5Qcm9wZXJ0aWVzLkZ1bmN0aW9uQ29kZSBhcyBzdHJpbmcpXG4gICAgICAgIC5maW5kKChpdCkgPT4gaXQuaW5jbHVkZXMoXCJyZXF1ZXN0LnVyaS5zbGljZVwiKSk7XG4gICAgICBleHBlY3QoY29kZSkudG9Db250YWluKCdcIlwiICsgcmVxdWVzdC51cmkuc2xpY2UoMjApJyk7XG4gICAgfVxuICB9KTtcblxuICBpdChcImFkZHMgbm8gYmVoYXZpb3IgZm9yIGFuIGFzc2V0UHJlZml4IHRoYXQgbmVlZHMgbm9uZVwiLCAoKSA9PiB7XG4gICAgLy8gQW4gYWJzb2x1dGUgcHJlZml4IHdpdGggbm8gcGF0aCBvZiBpdHMgb3duIG5hbWVzIGFuIG9yaWdpbiB0aGlzIGRpc3RyaWJ1dGlvblxuICAgIC8vIGRvZXMgbm90IHNlcnZlLCBhbmQgYSBwcmVmaXggZXF1YWwgdG8gdGhlIGJhc2VQYXRoIG9uZSBpcyB3aGF0IE5leHQuanNcbiAgICAvLyBkZWZhdWx0cyB0byB3aGVuIGBiYXNlUGF0aGAgaXMgc2V0IOKAlCBgX25leHQvc3RhdGljKmAgYWxyZWFkeSByZXNvbHZlcyB1bmRlclxuICAgIC8vIGl0LCBhbmQgYSBkdXBsaWNhdGUgcGF0dGVybiB3b3VsZCBtYWtlIENsb3VkRnJvbnQgcmVqZWN0IHRoZSBkaXN0cmlidXRpb24uXG4gICAgZm9yIChjb25zdCBbYXNzZXRQcmVmaXgsIGJhc2VQYXRoXSBvZiBbXG4gICAgICBbXCJodHRwczovL2Nkbi5leGFtcGxlLmNvbVwiLCB1bmRlZmluZWRdLFxuICAgICAgW1wiaHR0cHM6Ly9jZG4uZXhhbXBsZS5jb20vXCIsIHVuZGVmaW5lZF0sXG4gICAgICBbXCIvL2Nkbi5leGFtcGxlLmNvbVwiLCB1bmRlZmluZWRdLFxuICAgICAgW1wiL2Jhc2VcIiwgXCIvYmFzZVwiXSxcbiAgICAgIFtcImh0dHBzOi8vY2RuLmV4YW1wbGUuY29tL2Jhc2VcIiwgXCIvYmFzZVwiXSxcbiAgICAgIFtcIlwiLCB1bmRlZmluZWRdLFxuICAgIF0gYXMgY29uc3QpIHtcbiAgICAgIGNvbnN0IHsgc3RhY2ssIGRpc3RyaWJ1dGlvblByb3BzIH0gPSBzZXR1cChbXSwgeyBiYXNlUGF0aCB9KTtcbiAgICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgICAgLi4uZGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgICAgIGFzc2V0UHJlZml4LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwYXR0ZXJucyA9IHBhdGhQYXR0ZXJucyhzdGFjayk7XG4gICAgICBleHBlY3QocGF0dGVybnMuZmlsdGVyKChwKSA9PiBwLmluY2x1ZGVzKFwiX25leHQvc3RhdGljXCIpKSkudG9IYXZlTGVuZ3RoKFxuICAgICAgICAxLFxuICAgICAgKTtcbiAgICAgIC8vIFRoZSB4LWZvcndhcmRlZC1ob3N0IGZ1bmN0aW9uIGlzIGFsd2F5cyB0aGVyZSBvbiBmdW5jdGlvbiBjb21wdXRlOyB0aGVcbiAgICAgIC8vIHJld3JpdGUgb25lIHNob3VsZCBub3QgYmUuXG4gICAgICBjb25zdCBjb2RlcyA9IE9iamVjdC52YWx1ZXMoXG4gICAgICAgIFRlbXBsYXRlLmZyb21TdGFjayhzdGFjaykuZmluZFJlc291cmNlcyhcIkFXUzo6Q2xvdWRGcm9udDo6RnVuY3Rpb25cIiksXG4gICAgICApLm1hcCgoZm4pID0+IGZuLlByb3BlcnRpZXMuRnVuY3Rpb25Db2RlIGFzIHN0cmluZyk7XG4gICAgICBleHBlY3QoY29kZXMuc29tZSgoaXQpID0+IGl0LmluY2x1ZGVzKFwicmVxdWVzdC51cmkuc2xpY2VcIikpKS50b0JlKGZhbHNlKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwiY291bnRzIHRoZSBhc3NldFByZWZpeCBiZWhhdmlvciBhZ2FpbnN0IHRoZSBidWRnZXRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgc3RhY2ssIGRpc3RyaWJ1dGlvblByb3BzIH0gPSBzZXR1cChbXSwge1xuICAgICAgcHVibGljRGlyRW50cmllczogQXJyYXkuZnJvbSh7IGxlbmd0aDogMjIgfSwgKF8sIGkpID0+IGBmaWxlJHtpfS50eHRgKSxcbiAgICB9KTtcbiAgICAvLyAzIGZpeGVkICsgMjIgcHVibGljID0gMjUsIGV4YWN0bHkgdGhlIGxpbWl0OyB0aGUgYXNzZXRQcmVmaXggb25lIGlzIHRoZVxuICAgIC8vIDI2dGgsIGFuZCBhIGxpbWl0IGVycm9yIHRoYXQgZGlkIG5vdCBjb3VudCBpdCB3b3VsZCBjb21lIGFzIGEgZGVwbG95XG4gICAgLy8gZmFpbHVyZSBpbnN0ZWFkLlxuICAgIGV4cGVjdChcbiAgICAgICgpID0+XG4gICAgICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgICAgICAuLi5kaXN0cmlidXRpb25Qcm9wcyxcbiAgICAgICAgICBhc3NldFByZWZpeDogXCIvY2RuXCIsXG4gICAgICAgICAgbWF4Q2FjaGVCZWhhdmlvcnM6IDI1LFxuICAgICAgICB9KSxcbiAgICApLnRvVGhyb3coLzI2IENsb3VkRnJvbnQgY2FjaGUgYmVoYXZpb3JzLio0IHVzZWQgYnkgY2RrLW5leHRqcyBpdHNlbGYvcyk7XG4gIH0pO1xuXG4gIGl0KFwiZG9lcyBub3QgY2FjaGUgYSBkeW5hbWljIHJlc3BvbnNlIHRoYXQgc2VuZHMgbm8gQ2FjaGUtQ29udHJvbFwiLCAoKSA9PiB7XG4gICAgLy8gQ0RLJ3MgYENhY2hlUG9saWN5YCBkZWZhdWx0IGlzIGEgZGF5LCB3aGljaCBjYWNoZWQgZXZlcnkgcm91dGUgaGFuZGxlclxuICAgIC8vIHdpdGhvdXQgYSBgQ2FjaGUtQ29udHJvbGAgLSBgL2FwaS9lY2hvYCBpbiBhcHAtcGxheWdyb3VuZCAtIGZvciAyNCBob3Vycy5cbiAgICBjb25zdCB7IHN0YWNrLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW10pO1xuICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIGRpc3RyaWJ1dGlvblByb3BzKTtcbiAgICBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spLmhhc1Jlc291cmNlUHJvcGVydGllcyhcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpDYWNoZVBvbGljeVwiLFxuICAgICAge1xuICAgICAgICBDYWNoZVBvbGljeUNvbmZpZzogTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgICAgQ29tbWVudDogTWF0Y2guc3RyaW5nTGlrZVJlZ2V4cChcIkR5bmFtaWNcIiksXG4gICAgICAgICAgRGVmYXVsdFRUTDogMCxcbiAgICAgICAgICBNaW5UVEw6IDAsXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICApO1xuICB9KTtcblxuICBpdChcIndpbGRjYXJkcyBhIHB1YmxpYy8gbmFtZSBDbG91ZEZyb250IGNhbm5vdCBzcGVsbFwiLCAoKSA9PiB7XG4gICAgLy8gYHB1YmxpYy9oZWxsbyB3b3JsZC5qcGdgIGlzIGEgdmFsaWQgTmV4dC5qcyBhc3NldCwgYnV0IGEgc3BhY2UgY2Fubm90IGFwcGVhclxuICAgIC8vIGluIGEgcGF0aCBwYXR0ZXJuLCBzbyBjZGstbmV4dGpzIHRocmV3IGF0IHN5bnRoIGFuZCB0aGUgYXBwIGNvdWxkIG5vdCBiZVxuICAgIC8vIGRlcGxveWVkIGF0IGFsbC4gQ2xvdWRGcm9udCBtYXRjaGVzIHRoZSAqZGVjb2RlZCogcGF0aCwgYW5kIGA/YCBtYXRjaGVzIG9uZVxuICAgIC8vIGJ5dGUgb2YgaXQsIHNvIG9uZSBgP2AgcGVyIFVURi04IGJ5dGUgaXMgdGhlIG5hcnJvd2VzdCBwYXR0ZXJuIHRoYXRcbiAgICAvLyBtYXRjaGVzLiBOb3Qgb25lIHBlciBwZXJjZW50LWVuY29kZWQgY2hhcmFjdGVyOiBgaGVsbG8/Pz93b3JsZC5qcGdgXG4gICAgLy8gZGVwbG95cyBhbmQgdGhlbiBuZXZlciBtYXRjaGVzLCB3aGljaCBpcyBhIDQwNCByYXRoZXIgdGhhbiBhIHN5bnRoIGVycm9yLlxuICAgIGNvbnN0IHsgc3RhY2ssIGRpc3RyaWJ1dGlvblByb3BzIH0gPSBzZXR1cChbXSwge1xuICAgICAgcHVibGljRGlyRW50cmllczogW1wiaGVsbG8gd29ybGQuanBnXCIsIFwiw6TDtsO8xaHEjcWZw60ucG5nXCIsIFwiZmF2aWNvbi5pY29cIl0sXG4gICAgfSk7XG4gICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwgZGlzdHJpYnV0aW9uUHJvcHMpO1xuICAgIGV4cGVjdChwYXRoUGF0dGVybnMoc3RhY2spKS50b0VxdWFsKFxuICAgICAgZXhwZWN0LmFycmF5Q29udGFpbmluZyhbXG4gICAgICAgIFwiaGVsbG8/d29ybGQuanBnXCIsXG4gICAgICAgIC8vIDcgY2hhcmFjdGVycywgMiBVVEYtOCBieXRlcyBlYWNoLlxuICAgICAgICBgJHtcIj9cIi5yZXBlYXQoMTQpfS5wbmdgLFxuICAgICAgICBcImZhdmljb24uaWNvXCIsXG4gICAgICBdKSxcbiAgICApO1xuICB9KTtcblxuICBpdChcIndpbGRjYXJkcyBhIHB1YmxpYy8gZGlyZWN0b3J5IG5hbWUgdGhlIHNhbWUgd2F5XCIsICgpID0+IHtcbiAgICBjb25zdCB7IHN0YWNrLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW10pO1xuICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgIC4uLmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgcHVibGljRGlyRW50cmllczogW3sgbmFtZTogXCJteSBpbWFnZXNcIiwgaXNEaXJlY3Rvcnk6IHRydWUgfV0sXG4gICAgfSk7XG4gICAgZXhwZWN0KHBhdGhQYXR0ZXJucyhzdGFjaykpLnRvQ29udGFpbihcIm15P2ltYWdlcy8qXCIpO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgYSBwdWJsaWMvIG5hbWUgdG9vIGxvbmcgdG8gZXhwcmVzcyBhcyBhIHBhdGggcGF0dGVyblwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzdGFjaywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9IHNldHVwKFtdLCB7XG4gICAgICBwdWJsaWNEaXJFbnRyaWVzOiBbYCR7XCLDpFwiLnJlcGVhdCgxMzApfS5wbmdgXSxcbiAgICB9KTtcbiAgICBleHBlY3QoXG4gICAgICAoKSA9PiBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCBkaXN0cmlidXRpb25Qcm9wcyksXG4gICAgKS50b1Rocm93KC9uZWVkcyBhIDI2NC1jaGFyYWN0ZXIgQ2xvdWRGcm9udCBwYXRoIHBhdHRlcm4vKTtcbiAgfSk7XG5cbiAgaXQoXCJza2lwcyBhIHB1YmxpYy8gZW50cnkgd2hvc2UgcGF0dGVybiB3b3VsZCBiZSB3aWxkY2FyZHMgYWxvbmVcIiwgKCkgPT4ge1xuICAgIC8vIGDRhNC+0YLQvi9gIGlzIGA/Pz8/Pz8/Py8qYCwgd2hpY2ggbWF0Y2hlcyBhbnkgOC1ieXRlIGZpcnN0IHNlZ21lbnQuIFB1YmxpY1xuICAgIC8vIGJlaGF2aW9ycyBhcmUgYWRkZWQgYWhlYWQgb2YgdGhlIGNvbXB1dGUgb25lcywgc28gYC9wcm9kdWN0cy80MmAgd291bGQgZ29cbiAgICAvLyB0byBTMyBhbmQgNDAzLiBUaGUgZW50cnkgZ2V0cyBubyBiZWhhdmlvciBhbmQgYSB3YXJuaW5nIGluc3RlYWQuXG4gICAgY29uc3QgeyBzdGFjaywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9IHNldHVwKFtdKTtcbiAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAuLi5kaXN0cmlidXRpb25Qcm9wcyxcbiAgICAgIHB1YmxpY0RpckVudHJpZXM6IFtcbiAgICAgICAgeyBuYW1lOiBcItGE0L7RgtC+XCIsIGlzRGlyZWN0b3J5OiB0cnVlIH0sXG4gICAgICAgIHsgbmFtZTogXCLlm75cIiwgaXNEaXJlY3Rvcnk6IGZhbHNlIH0sXG4gICAgICAgIHsgbmFtZTogXCLRhNC+0YLQvi0xXCIsIGlzRGlyZWN0b3J5OiB0cnVlIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICAgIGNvbnN0IHBhdHRlcm5zID0gcGF0aFBhdHRlcm5zKHN0YWNrKTtcbiAgICBleHBlY3QocGF0dGVybnMpLm5vdC50b0NvbnRhaW4oYCR7XCI/XCIucmVwZWF0KDgpfS8qYCk7XG4gICAgZXhwZWN0KHBhdHRlcm5zKS5ub3QudG9Db250YWluKFwiPz8/XCIpO1xuICAgIC8vIE9uZSBsaXRlcmFsIGNoYXJhY3RlciBrZWVwcyBhIHBhdHRlcm4gbmFycm93IGVub3VnaCB0byBrZWVwLlxuICAgIGV4cGVjdChwYXR0ZXJucykudG9Db250YWluKGAke1wiP1wiLnJlcGVhdCg4KX0tMS8qYCk7XG4gICAgQW5ub3RhdGlvbnMuZnJvbVN0YWNrKHN0YWNrKS5oYXNXYXJuaW5nKFxuICAgICAgXCIqXCIsXG4gICAgICBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKCdcItGE0L7RgtC+XCIsIFwi5Zu+XCInKSxcbiAgICApO1xuICB9KTtcblxuICBpdChcImRvZXMgbm90IGNvdW50IGEgc2tpcHBlZCBwdWJsaWMvIGVudHJ5IGFnYWluc3QgdGhlIGJ1ZGdldFwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzdGFjaywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9IHNldHVwKFtdLCB7XG4gICAgICBwdWJsaWNEaXJFbnRyaWVzOiBbXG4gICAgICAgIC4uLkFycmF5LmZyb20oeyBsZW5ndGg6IDIyIH0sIChfLCBpKSA9PiBgZmlsZSR7aX0udHh0YCksXG4gICAgICAgIFwi5Zu+XCIsXG4gICAgICBdLFxuICAgIH0pO1xuICAgIC8vIDMgZml4ZWQgKyAyMiA9IDI1LCBleGFjdGx5IHRoZSBsaW1pdDsgdGhlIHNraXBwZWQgZW50cnkgYWRkcyBub3RoaW5nLlxuICAgIGV4cGVjdChcbiAgICAgICgpID0+XG4gICAgICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgICAgICAuLi5kaXN0cmlidXRpb25Qcm9wcyxcbiAgICAgICAgICBtYXhDYWNoZUJlaGF2aW9yczogMjUsXG4gICAgICAgIH0pLFxuICAgICkubm90LnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgaXQoXCJjaGVja3MgdGhlIGxlbmd0aCBvZiB0aGUgZmluYWwgcGF0dGVybiwgYmFzZVBhdGggYW5kIC8qIGluY2x1ZGVkXCIsICgpID0+IHtcbiAgICAvLyA4MyB0aHJlZS1ieXRlIGNoYXJhY3RlcnMgKyBcIi5wZGZcIiBpcyBhIDI1My1jaGFyYWN0ZXIgcGF0dGVybiBvbiBpdHMgb3duLFxuICAgIC8vIHVuZGVyIHRoZSBsaW1pdDsgYC9kb2NzL2AgaW4gZnJvbnQgdGFrZXMgaXQgdG8gMjU5LCB3aGljaCBDbG91ZEZyb250XG4gICAgLy8gcmVqZWN0cyBhdCBkZXBsb3kuXG4gICAgY29uc3QgbmFtZSA9IGAke1wi5Zu+XCIucmVwZWF0KDgzKX0ucGRmYDtcbiAgICBjb25zdCB7IHN0YWNrLCBkaXN0cmlidXRpb25Qcm9wcyB9ID0gc2V0dXAoW10sIHtcbiAgICAgIHB1YmxpY0RpckVudHJpZXM6IFtuYW1lXSxcbiAgICB9KTtcbiAgICBleHBlY3QoXG4gICAgICAoKSA9PlxuICAgICAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAgICAgLi4uZGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgICAgICAgYmFzZVBhdGg6IFwiL2RvY3NcIixcbiAgICAgICAgfSksXG4gICAgKS50b1Rocm93KC9uZWVkcyBhIDI1OS1jaGFyYWN0ZXIgQ2xvdWRGcm9udCBwYXRoIHBhdHRlcm4vKTtcblxuICAgIGNvbnN0IHsgc3RhY2s6IGRpclN0YWNrLCBkaXN0cmlidXRpb25Qcm9wczogZGlyUHJvcHMgfSA9IHNldHVwKFtdKTtcbiAgICBleHBlY3QoXG4gICAgICAoKSA9PlxuICAgICAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKGRpclN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAgICAgLi4uZGlyUHJvcHMsXG4gICAgICAgICAgLy8gMjU0IGNoYXJhY3RlcnMsIHVuZGVyIHRoZSBsaW1pdCB1bnRpbCB0aGUgYC8qYC5cbiAgICAgICAgICBwdWJsaWNEaXJFbnRyaWVzOiBbXG4gICAgICAgICAgICB7IG5hbWU6IGBhYiR7XCLlm75cIi5yZXBlYXQoODQpfWAsIGlzRGlyZWN0b3J5OiB0cnVlIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgKS50b1Rocm93KC9uZWVkcyBhIDI1Ni1jaGFyYWN0ZXIvKTtcbiAgfSk7XG5cbiAgaXQoXCJkcm9wcyB0aGUgY2FjaGUga2V5IHdoZW4gYW4gb3ZlcnJpZGUgZGlzYWJsZXMgZHluYW1pYyBjYWNoaW5nXCIsICgpID0+IHtcbiAgICAvLyBDbG91ZEZyb250IHJlamVjdHMgYSBwb2xpY3kgdGhhdCBjYWNoZXMgbm90aGluZyBidXQga2V5cyBvbiBoZWFkZXJzLiBDREtcbiAgICAvLyB1c2VkIHRvIHJhaXNlIGBtYXhUdGw6IDBgIHRvIHRoZSBkYXktbG9uZyBkZWZhdWx0LCBzbyB0aGUgb3ZlcnJpZGVcbiAgICAvLyBkZXBsb3llZDsgd2l0aCBhIGRlZmF1bHQgb2YgMCBpdCBpcyBob25vcmVkLCBhbmQgbXVzdCBzdGF5IGRlcGxveWFibGUuXG4gICAgY29uc3QgeyBzdGFjaywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9IHNldHVwKFtdKTtcbiAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAuLi5kaXN0cmlidXRpb25Qcm9wcyxcbiAgICAgIG92ZXJyaWRlczoge1xuICAgICAgICBkeW5hbWljQ2FjaGVQb2xpY3lQcm9wczogeyBtYXhUdGw6IER1cmF0aW9uLnNlY29uZHMoMCkgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6Q2FjaGVQb2xpY3lcIixcbiAgICAgIHtcbiAgICAgICAgQ2FjaGVQb2xpY3lDb25maWc6IE1hdGNoLm9iamVjdExpa2Uoe1xuICAgICAgICAgIENvbW1lbnQ6IE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoXCJEeW5hbWljXCIpLFxuICAgICAgICAgIERlZmF1bHRUVEw6IDAsXG4gICAgICAgICAgTWF4VFRMOiAwLFxuICAgICAgICAgIE1pblRUTDogMCxcbiAgICAgICAgICBQYXJhbWV0ZXJzSW5DYWNoZUtleUFuZEZvcndhcmRlZFRvT3JpZ2luOiB7XG4gICAgICAgICAgICBDb29raWVzQ29uZmlnOiB7IENvb2tpZUJlaGF2aW9yOiBcIm5vbmVcIiB9LFxuICAgICAgICAgICAgRW5hYmxlQWNjZXB0RW5jb2RpbmdCcm90bGk6IGZhbHNlLFxuICAgICAgICAgICAgRW5hYmxlQWNjZXB0RW5jb2RpbmdHemlwOiBmYWxzZSxcbiAgICAgICAgICAgIEhlYWRlcnNDb25maWc6IHsgSGVhZGVyQmVoYXZpb3I6IFwibm9uZVwiIH0sXG4gICAgICAgICAgICBRdWVyeVN0cmluZ3NDb25maWc6IHsgUXVlcnlTdHJpbmdCZWhhdmlvcjogXCJub25lXCIgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJrZWVwcyB0aGUgY2FjaGUga2V5IHdoZW4gYSB6ZXJvIG1heFR0bCBpcyByYWlzZWQgYnkgYW5vdGhlciBUVExcIiwgKCkgPT4ge1xuICAgIC8vIENESyByYWlzZXMgYG1heFR0bGAgdG8gYGRlZmF1bHRUdGxgLCBzbyB0aGlzIHBvbGljeSBjYWNoZXMgZm9yIGFuIGhvdXIuXG4gICAgLy8gRHJvcHBpbmcgdGhlIGtleSBmb3IgaXQgd291bGQgc2VydmUgb25lIHZpZXdlcidzIHBhZ2UgdG8gZXZlcnkgdmlld2VyLlxuICAgIGNvbnN0IHsgc3RhY2ssIGRpc3RyaWJ1dGlvblByb3BzIH0gPSBzZXR1cChbXSk7XG4gICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgLi4uZGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgICBvdmVycmlkZXM6IHtcbiAgICAgICAgZHluYW1pY0NhY2hlUG9saWN5UHJvcHM6IHtcbiAgICAgICAgICBtYXhUdGw6IER1cmF0aW9uLnNlY29uZHMoMCksXG4gICAgICAgICAgZGVmYXVsdFR0bDogRHVyYXRpb24uaG91cnMoMSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIFRlbXBsYXRlLmZyb21TdGFjayhzdGFjaykuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFxuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkNhY2hlUG9saWN5XCIsXG4gICAgICB7XG4gICAgICAgIENhY2hlUG9saWN5Q29uZmlnOiBNYXRjaC5vYmplY3RMaWtlKHtcbiAgICAgICAgICBDb21tZW50OiBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKFwiRHluYW1pY1wiKSxcbiAgICAgICAgICBNYXhUVEw6IDM2MDAsXG4gICAgICAgICAgUGFyYW1ldGVyc0luQ2FjaGVLZXlBbmRGb3J3YXJkZWRUb09yaWdpbjogTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgICAgICBDb29raWVzQ29uZmlnOiB7IENvb2tpZUJlaGF2aW9yOiBcImFsbFwiIH0sXG4gICAgICAgICAgICBRdWVyeVN0cmluZ3NDb25maWc6IHsgUXVlcnlTdHJpbmdCZWhhdmlvcjogXCJhbGxcIiB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJrZXlzIHRoZSBkeW5hbWljIGNhY2hlIG9ubHkgb24gaGVhZGVycyB0aGUgb3JpZ2luIHJlYWRzXCIsICgpID0+IHtcbiAgICAvLyBgeC1tYXRjaGVkLXBhdGhgIGlzIHN0cmlwcGVkIGJ5IHRoZSBydW50aW1lIGFuZCBgeC1uZXh0LWNhY2hlLXRhZ3NgIGlzXG4gICAgLy8gbmV2ZXIgc2VudCBieSB2aWV3ZXJzOiBrZXlpbmcgb24gZWl0aGVyIHNwZW5kcyBhIGhlYWRlciBzbG90IGFuZCBsZXRzIGFcbiAgICAvLyBjbGllbnQgZnJhZ21lbnQgdGhlIGNhY2hlIGZvciBub3RoaW5nLlxuICAgIGNvbnN0IHsgc3RhY2ssIGRpc3RyaWJ1dGlvblByb3BzIH0gPSBzZXR1cChbXSk7XG4gICAgbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbihzdGFjaywgXCJEaXN0cmlidXRpb25cIiwgZGlzdHJpYnV0aW9uUHJvcHMpO1xuICAgIGNvbnN0IHBvbGljaWVzID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5maW5kUmVzb3VyY2VzKFxuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkNhY2hlUG9saWN5XCIsXG4gICAgICB7XG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBDYWNoZVBvbGljeUNvbmZpZzogeyBDb21tZW50OiBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKFwiRHluYW1pY1wiKSB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuICAgIGNvbnN0IFtwb2xpY3ldID0gT2JqZWN0LnZhbHVlcyhwb2xpY2llcyk7XG4gICAgY29uc3QgaGVhZGVyczogc3RyaW5nW10gPVxuICAgICAgcG9saWN5LlByb3BlcnRpZXMuQ2FjaGVQb2xpY3lDb25maWdcbiAgICAgICAgLlBhcmFtZXRlcnNJbkNhY2hlS2V5QW5kRm9yd2FyZGVkVG9PcmlnaW4uSGVhZGVyc0NvbmZpZy5IZWFkZXJzO1xuICAgIGV4cGVjdChoZWFkZXJzKS5ub3QudG9Db250YWluKFwieC1tYXRjaGVkLXBhdGhcIik7XG4gICAgZXhwZWN0KGhlYWRlcnMpLm5vdC50b0NvbnRhaW4oXCJ4LW5leHQtY2FjaGUtdGFnc1wiKTtcbiAgICBleHBlY3QoaGVhZGVycykudG9Db250YWluKFwicnNjXCIpO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgc3BsaXR0aW5nIG9uIGEgZGVwbG95bWVudCB0eXBlIHRoYXQgY2Fubm90IHJvdXRlIGl0XCIsICgpID0+IHtcbiAgICBjb25zdCB7IHN0YWNrLCBmdW5jdGlvbkdyb3VwcywgZnVuY3Rpb25Hcm91cEJlaGF2aW9ycywgZGlzdHJpYnV0aW9uUHJvcHMgfSA9XG4gICAgICBzZXR1cChbXCJhcGlcIl0pO1xuICAgIGV4cGVjdChcbiAgICAgICgpID0+XG4gICAgICAgIG5ldyBOZXh0anNEaXN0cmlidXRpb24oc3RhY2ssIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgICAgICAuLi5kaXN0cmlidXRpb25Qcm9wcyxcbiAgICAgICAgICBuZXh0anNUeXBlOiBOZXh0anNUeXBlLkdMT0JBTF9DT05UQUlORVJTLFxuICAgICAgICAgIGxvYWRCYWxhbmNlcjogdW5kZWZpbmVkLFxuICAgICAgICAgIGZ1bmN0aW9uR3JvdXBzLFxuICAgICAgICAgIGZ1bmN0aW9uR3JvdXBCZWhhdmlvcnMsXG4gICAgICAgIH0pLFxuICAgICkudG9UaHJvdygvb25seSBzdXBwb3J0ZWQgYnkgTmV4dGpzR2xvYmFsRnVuY3Rpb25zLyk7XG4gIH0pO1xufSk7XG5cbi8qKlxuICogVGhlIHZpZXdlci1yZXF1ZXN0IGZ1bmN0aW9uLCBydW4gYXMgQ2xvdWRGcm9udCB3b3VsZCBydW4gaXQuXG4gKlxuICogSXQgaXMgYXV0aG9yZWQgYXMgYSBzdHJpbmcgaW5zaWRlIGEgVHlwZVNjcmlwdCB0ZW1wbGF0ZSBsaXRlcmFsLCBzbyBldmVyeVxuICogYmFja3NsYXNoIGluIGl0IGlzIGVzY2FwZWQgdHdpY2UgLSBhbmQgYSByZWdleCB0aGF0IGNvbGxhcHNlcyBzbGFzaGVzIGlzIG5vdGhpbmdcbiAqIGJ1dCBiYWNrc2xhc2hlcy4gQXNzZXJ0aW5nIG9uIGJlaGF2aW9yIHJhdGhlciB0aGFuIG9uIHRoZSB0ZXh0IGlzIHdoYXQgY2F0Y2hlcyBhblxuICogZXNjYXBpbmcgbWlzdGFrZSwgd2hpY2ggYSBzbmFwc2hvdCB3b3VsZCBoYXBwaWx5IHJlY29yZC5cbiAqL1xuZGVzY3JpYmUoXCJ0aGUgdmlld2VyLXJlcXVlc3QgQ2xvdWRGcm9udCBGdW5jdGlvblwiLCAoKSA9PiB7XG4gIGludGVyZmFjZSBRdWVyeVZhbHVlIHtcbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIG11bHRpVmFsdWU/OiBBcnJheTx7IHZhbHVlOiBzdHJpbmcgfT47XG4gIH1cbiAgaW50ZXJmYWNlIEZ1bmN0aW9uUmVxdWVzdCB7XG4gICAgdXJpOiBzdHJpbmc7XG4gICAgcXVlcnlzdHJpbmc6IFJlY29yZDxzdHJpbmcsIFF1ZXJ5VmFsdWU+O1xuICAgIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHsgdmFsdWU6IHN0cmluZyB9PjtcbiAgfVxuICB0eXBlIEZ1bmN0aW9uUmVzdWx0ID1cbiAgICB8IEZ1bmN0aW9uUmVxdWVzdFxuICAgIHwgeyBzdGF0dXNDb2RlOiBudW1iZXI7IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHsgdmFsdWU6IHN0cmluZyB9PiB9O1xuXG4gIGNvbnN0IGhhbmRsZXIgPSAoKCkgPT4ge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKG5ldyBBcHAoKSwgXCJGblN0YWNrXCIpO1xuICAgIGNvbnN0IGZuID0gbmV3IExhbWJkYUZ1bmN0aW9uKHN0YWNrLCBcIkZuXCIsIHtcbiAgICAgIGNvZGU6IENvZGUuZnJvbUlubGluZShcImV4cG9ydHMuaGFuZGxlciA9ICgpID0+IHt9O1wiKSxcbiAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjJfWCxcbiAgICB9KTtcbiAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICBhc3NldHNCdWNrZXQ6IG5ldyBCdWNrZXQoc3RhY2ssIFwiQXNzZXRzXCIpLFxuICAgICAgZnVuY3Rpb25Vcmw6IG5ldyBGdW5jdGlvblVybChzdGFjaywgXCJVcmxcIiwge1xuICAgICAgICBmdW5jdGlvbjogZm4sXG4gICAgICAgIGF1dGhUeXBlOiBGdW5jdGlvblVybEF1dGhUeXBlLkFXU19JQU0sXG4gICAgICB9KSxcbiAgICAgIG5leHRqc1R5cGU6IE5leHRqc1R5cGUuR0xPQkFMX0ZVTkNUSU9OUyxcbiAgICAgIHB1YmxpY0RpckVudHJpZXM6IFtdLFxuICAgIH0pO1xuICAgIGNvbnN0IGZ1bmN0aW9ucyA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjaykuZmluZFJlc291cmNlcyhcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpGdW5jdGlvblwiLFxuICAgICk7XG4gICAgY29uc3QgY29kZSA9IE9iamVjdC52YWx1ZXMoZnVuY3Rpb25zKVswXS5Qcm9wZXJ0aWVzLkZ1bmN0aW9uQ29kZSBhcyBzdHJpbmc7XG4gICAgcmV0dXJuIHJ1bkluTmV3Q29udGV4dChgJHtjb2RlfVxcbmhhbmRsZXJgKSBhcyAoZXZlbnQ6IHtcbiAgICAgIHJlcXVlc3Q6IEZ1bmN0aW9uUmVxdWVzdDtcbiAgICB9KSA9PiBQcm9taXNlPEZ1bmN0aW9uUmVzdWx0PjtcbiAgfSkoKTtcblxuICBjb25zdCBzZW5kID0gKFxuICAgIHVyaTogc3RyaW5nLFxuICAgIHF1ZXJ5c3RyaW5nOiBSZWNvcmQ8c3RyaW5nLCBRdWVyeVZhbHVlPiA9IHt9LFxuICApOiBQcm9taXNlPEZ1bmN0aW9uUmVzdWx0PiA9PlxuICAgIGhhbmRsZXIoe1xuICAgICAgcmVxdWVzdDogeyB1cmksIHF1ZXJ5c3RyaW5nLCBoZWFkZXJzOiB7IGhvc3Q6IHsgdmFsdWU6IFwiYS50ZXN0XCIgfSB9IH0sXG4gICAgfSk7XG5cbiAgY29uc3QgcmVkaXJlY3QgPSAocmVzdWx0OiBGdW5jdGlvblJlc3VsdCkgPT4gKHtcbiAgICBzdGF0dXNDb2RlOiAocmVzdWx0IGFzIHsgc3RhdHVzQ29kZTogbnVtYmVyIH0pLnN0YXR1c0NvZGUsXG4gICAgbG9jYXRpb246IHJlc3VsdC5oZWFkZXJzLmxvY2F0aW9uPy52YWx1ZSxcbiAgfSk7XG5cbiAgaXQuZWFjaChbXG4gICAgW1wiLy9cIiwgXCIvXCJdLFxuICAgIFtcIi8vL1wiLCBcIi9cIl0sXG4gICAgW1wiL2Zvby8vYmFyXCIsIFwiL2Zvby9iYXJcIl0sXG4gICAgW1wiL2Jhc2VwYXRoLy90by1zdlwiLCBcIi9iYXNlcGF0aC90by1zdlwiXSxcbiAgICBbXCIvYVxcXFxiXCIsIFwiL2EvYlwiXSxcbiAgXSkoXCJyZWRpcmVjdHMgJXMgdG8gJXMgd2l0aCBhIDMwOFwiLCBhc3luYyAodXJpLCBsb2NhdGlvbikgPT4ge1xuICAgIGV4cGVjdChyZWRpcmVjdChhd2FpdCBzZW5kKHVyaSkpKS50b0VxdWFsKHsgc3RhdHVzQ29kZTogMzA4LCBsb2NhdGlvbiB9KTtcbiAgfSk7XG5cbiAgaXQoXCJrZWVwcyB0aGUgcXVlcnkgb24gdGhlIHJlZGlyZWN0LCBpbmNsdWRpbmcgcmVwZWF0ZWQga2V5c1wiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gQ2xvdWRGcm9udCdzIHNoYXBlIGZvciBhIHJlcGVhdGVkIGtleTogYG11bHRpVmFsdWVgIGhvbGRzIGV2ZXJ5IHZhbHVlLFxuICAgIC8vIHRoZSBmaXJzdCBpbmNsdWRlZCwgYW5kIGB2YWx1ZWAgcmVwZWF0cyB0aGF0IGZpcnN0IG9uZS5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZW5kKFwiL3gvL3lcIiwge1xuICAgICAganNvbjogeyB2YWx1ZTogXCJ0cnVlXCIgfSxcbiAgICAgIGE6IHsgdmFsdWU6IFwiMVwiLCBtdWx0aVZhbHVlOiBbeyB2YWx1ZTogXCIxXCIgfSwgeyB2YWx1ZTogXCIyXCIgfV0gfSxcbiAgICAgIGZsYWc6IHsgdmFsdWU6IFwiXCIgfSxcbiAgICB9KTtcbiAgICBleHBlY3QocmVkaXJlY3QocmVzdWx0KS5sb2NhdGlvbikudG9CZShcIi94L3k/anNvbj10cnVlJmE9MSZhPTImZmxhZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJwYXNzZXMgcGVyY2VudC1lbmNvZGVkIHF1ZXJ5IHZhbHVlcyB0aHJvdWdoIHdpdGhvdXQgcmUtZW5jb2RpbmdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIENsb3VkRnJvbnQgaGFuZHMgdGhlIGZ1bmN0aW9uIHRoZSB2YWx1ZXMgc3RpbGwgZW5jb2RlZCwgYXMgc2VudC5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZW5kKFwiL3gvL3lcIiwge1xuICAgICAgYTogeyB2YWx1ZTogXCIlMjBiJTI2Y1wiIH0sXG4gICAgICBwOiB7IHZhbHVlOiBcIjErMlwiIH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KHJlZGlyZWN0KHJlc3VsdCkubG9jYXRpb24pLnRvQmUoXCIveC95P2E9JTIwYiUyNmMmcD0xKzJcIik7XG4gIH0pO1xuXG4gIGl0KFwicGFzc2VzIGFuIG9yZGluYXJ5IHBhdGggdGhyb3VnaCB3aXRoIHgtZm9yd2FyZGVkLWhvc3Qgc2V0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgc2VuZChcIi9hL2JcIikpIGFzIEZ1bmN0aW9uUmVxdWVzdDtcbiAgICBleHBlY3QocmVzdWx0LnVyaSkudG9CZShcIi9hL2JcIik7XG4gICAgLy8gQ2xvdWRGcm9udCByZXdyaXRlcyBgaG9zdGAgdG8gdGhlIG9yaWdpbiBkb21haW4sIHNvIHRoZSBhcHAgd291bGQgb3RoZXJ3aXNlXG4gICAgLy8gYnVpbGQgZXZlcnkgYWJzb2x1dGUgVVJMIGFnYWluc3QgdGhlIEZ1bmN0aW9uIFVSTCdzIGhvc3RuYW1lLlxuICAgIGV4cGVjdChyZXN1bHQuaGVhZGVyc1tcIngtZm9yd2FyZGVkLWhvc3RcIl0udmFsdWUpLnRvQmUoXCJhLnRlc3RcIik7XG4gIH0pO1xuXG4gIGl0KFwib3ZlcndyaXRlcyBhIGNsaWVudC1zdXBwbGllZCB4LWZvcndhcmRlZC1ob3N0XCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBUaGUgcnVudGltZSB0cnVzdHMgdGhpcyBoZWFkZXIgYmVoaW5kIHRoZSBGdW5jdGlvbiBVUkwsIHNvIGEgdmlld2VyJ3NcbiAgICAvLyBvd24gdmFsdWUgbXVzdCBub3Qgc3Vydml2ZSB0byBidWlsZCByZWRpcmVjdHMgb3Igb3JpZ2luIGNoZWNrcy5cbiAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgaGFuZGxlcih7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIHVyaTogXCIvYVwiLFxuICAgICAgICBxdWVyeXN0cmluZzoge30sXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBob3N0OiB7IHZhbHVlOiBcImEudGVzdFwiIH0sXG4gICAgICAgICAgXCJ4LWZvcndhcmRlZC1ob3N0XCI6IHsgdmFsdWU6IFwiZXZpbC50ZXN0XCIgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSkpIGFzIEZ1bmN0aW9uUmVxdWVzdDtcbiAgICBleHBlY3QocmVzdWx0LmhlYWRlcnNbXCJ4LWZvcndhcmRlZC1ob3N0XCJdLnZhbHVlKS50b0JlKFwiYS50ZXN0XCIpO1xuICB9KTtcbn0pO1xuXG4vKipcbiAqIGB2aWV3ZXJSZXF1ZXN0RnVuY3Rpb25Db2RlYCwgcnVuIGFzIENsb3VkRnJvbnQgd291bGQgcnVuIGl0IG9uIGVhY2ggYmVoYXZpb3IsXG4gKiBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIHRoZSBzdWl0ZSBhYm92ZS5cbiAqL1xuZGVzY3JpYmUoXCJ2aWV3ZXJSZXF1ZXN0RnVuY3Rpb25Db2RlXCIsICgpID0+IHtcbiAgY29uc3QgQkFTSUNfQVVUSCA9IGBcbiAgICBmdW5jdGlvbiB2aWV3ZXJSZXF1ZXN0KGV2ZW50KSB7XG4gICAgICB2YXIgYXV0aCA9IGV2ZW50LnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uO1xuICAgICAgaWYgKGF1dGggJiYgYXV0aC52YWx1ZSA9PT0gXCJCYXNpYyBkWE5sY2pwd1lYTnpcIikgcmV0dXJuO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzQ29kZTogNDAxLFxuICAgICAgICBzdGF0dXNEZXNjcmlwdGlvbjogXCJVbmF1dGhvcml6ZWRcIixcbiAgICAgICAgaGVhZGVyczogeyBcInd3dy1hdXRoZW50aWNhdGVcIjogeyB2YWx1ZTogJ0Jhc2ljIHJlYWxtPVwicHJldmlld1wiJyB9IH0sXG4gICAgICB9O1xuICAgIH1cbiAgYDtcbiAgY29uc3QgQVVUSE9SSVpFRCA9IHsgYXV0aG9yaXphdGlvbjogXCJCYXNpYyBkWE5sY2pwd1lYTnpcIiB9O1xuXG4gIGludGVyZmFjZSBGdW5jdGlvblJlcXVlc3Qge1xuICAgIHVyaTogc3RyaW5nO1xuICAgIHF1ZXJ5c3RyaW5nOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiBzdHJpbmcgfT47XG4gICAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogc3RyaW5nIH0+O1xuICB9XG4gIHR5cGUgRnVuY3Rpb25SZXN1bHQgPVxuICAgIHwgRnVuY3Rpb25SZXF1ZXN0XG4gICAgfCB7IHN0YXR1c0NvZGU6IG51bWJlcjsgaGVhZGVyczogUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogc3RyaW5nIH0+IH07XG4gIHR5cGUgSGFuZGxlciA9IChldmVudDoge1xuICAgIHJlcXVlc3Q6IEZ1bmN0aW9uUmVxdWVzdDtcbiAgfSkgPT4gUHJvbWlzZTxGdW5jdGlvblJlc3VsdD47XG4gIC8qKiBXaGF0IGB2aWV3ZXJSZXF1ZXN0S2V5VmFsdWVTdG9yZWAgaG9sZHMsIGFzIGBjZi5rdnMoKWAgd291bGQgcmVhZCBpdC4gKi9cbiAgY29uc3QgZmFrZUNsb3VkRnJvbnRNb2R1bGUgPSAodmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiAoe1xuICAgIGt2czogKCkgPT4gKHtcbiAgICAgIGdldDogYXN5bmMgKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghKGtleSBpbiB2YWx1ZXMpKSB0aHJvdyBuZXcgRXJyb3IoYGtleSBub3QgZm91bmQ6ICR7a2V5fWApO1xuICAgICAgICByZXR1cm4gdmFsdWVzW2tleV07XG4gICAgICB9LFxuICAgIH0pLFxuICB9KTtcbiAgaW50ZXJmYWNlIEJlaGF2aW9yIHtcbiAgICBQYXRoUGF0dGVybjogc3RyaW5nO1xuICAgIEZ1bmN0aW9uQXNzb2NpYXRpb25zPzogQXJyYXk8e1xuICAgICAgRXZlbnRUeXBlOiBzdHJpbmc7XG4gICAgICBGdW5jdGlvbkFSTjogeyBcIkZuOjpHZXRBdHRcIjogW3N0cmluZywgc3RyaW5nXSB9O1xuICAgIH0+O1xuICB9XG5cbiAgY29uc3Qgc3ludGggPSAoXG4gICAgcHJvcHM6IHtcbiAgICAgIGNvZGU/OiBzdHJpbmc7XG4gICAgICBuZXh0anNUeXBlPzogTmV4dGpzVHlwZTtcbiAgICAgIGFzc2V0UHJlZml4Pzogc3RyaW5nO1xuICAgICAgYmFzZVBhdGg/OiBzdHJpbmc7XG4gICAgICBrZXlWYWx1ZVN0b3JlPzogYm9vbGVhbjtcbiAgICAgIG92ZXJyaWRlcz86IChzdGFjazogU3RhY2spID0+IE5leHRqc0Rpc3RyaWJ1dGlvbk92ZXJyaWRlcztcbiAgICB9ID0ge30sXG4gICkgPT4ge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKG5ldyBBcHAoKSwgXCJUZXN0U3RhY2tcIik7XG4gICAgY29uc3Qga2V5VmFsdWVTdG9yZSA9IHByb3BzLmtleVZhbHVlU3RvcmVcbiAgICAgID8gbmV3IEtleVZhbHVlU3RvcmUoc3RhY2ssIFwiS3ZzXCIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBjb21wdXRlID1cbiAgICAgIHByb3BzLm5leHRqc1R5cGUgPT09IE5leHRqc1R5cGUuR0xPQkFMX0NPTlRBSU5FUlNcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBsb2FkQmFsYW5jZXI6IG5ldyBBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcihzdGFjaywgXCJBbGJcIiwge1xuICAgICAgICAgICAgICB2cGM6IG5ldyBWcGMoc3RhY2ssIFwiVnBjXCIpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIGZ1bmN0aW9uVXJsOiBuZXcgRnVuY3Rpb25Vcmwoc3RhY2ssIFwiVXJsXCIsIHtcbiAgICAgICAgICAgICAgZnVuY3Rpb246IG5ldyBMYW1iZGFGdW5jdGlvbihzdGFjaywgXCJGblwiLCB7XG4gICAgICAgICAgICAgICAgY29kZTogQ29kZS5mcm9tSW5saW5lKFwiZXhwb3J0cy5oYW5kbGVyID0gKCkgPT4ge307XCIpLFxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgICAgICAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBhdXRoVHlwZTogRnVuY3Rpb25VcmxBdXRoVHlwZS5BV1NfSUFNLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfTtcbiAgICBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHN0YWNrLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAuLi5jb21wdXRlLFxuICAgICAgYXNzZXRzQnVja2V0OiBuZXcgQnVja2V0KHN0YWNrLCBcIkFzc2V0c1wiKSxcbiAgICAgIGFzc2V0UHJlZml4OiBwcm9wcy5hc3NldFByZWZpeCxcbiAgICAgIGJhc2VQYXRoOiBwcm9wcy5iYXNlUGF0aCxcbiAgICAgIG5leHRqc1R5cGU6IHByb3BzLm5leHRqc1R5cGUgPz8gTmV4dGpzVHlwZS5HTE9CQUxfRlVOQ1RJT05TLFxuICAgICAgb3ZlcnJpZGVzOiBwcm9wcy5vdmVycmlkZXM/LihzdGFjayksXG4gICAgICBwdWJsaWNEaXJFbnRyaWVzOiBbeyBuYW1lOiBcImZhdmljb24uaWNvXCIsIGlzRGlyZWN0b3J5OiBmYWxzZSB9XSxcbiAgICAgIHZpZXdlclJlcXVlc3RGdW5jdGlvbkNvZGU6XG4gICAgICAgIHByb3BzLmNvZGUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgOiBGdW5jdGlvbkNvZGUuZnJvbUlubGluZShwcm9wcy5jb2RlKSxcbiAgICAgIHZpZXdlclJlcXVlc3RLZXlWYWx1ZVN0b3JlOiBrZXlWYWx1ZVN0b3JlLFxuICAgIH0pO1xuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICBjb25zdCBmdW5jdGlvbnMgPSB0ZW1wbGF0ZS5maW5kUmVzb3VyY2VzKFwiQVdTOjpDbG91ZEZyb250OjpGdW5jdGlvblwiKTtcbiAgICBjb25zdCBjb25maWcgPSBPYmplY3QudmFsdWVzKFxuICAgICAgdGVtcGxhdGUuZmluZFJlc291cmNlcyhcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCIpLFxuICAgIClbMF0uUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWc7XG4gICAgY29uc3QgYmVoYXZpb3JzOiBCZWhhdmlvcltdID0gW1xuICAgICAgeyBQYXRoUGF0dGVybjogXCIqXCIsIC4uLmNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvciB9LFxuICAgICAgLi4uY29uZmlnLkNhY2hlQmVoYXZpb3JzLFxuICAgIF07XG4gICAgLyoqIFRoZSB2aWV3ZXItcmVxdWVzdCBmdW5jdGlvbiBvbiB0aGUgYmVoYXZpb3IgZm9yIGBwYXRoUGF0dGVybmAuICovXG4gICAgY29uc3QgZnVuY3Rpb25Gb3IgPSAocGF0aFBhdHRlcm46IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgYmVoYXZpb3IgPSBiZWhhdmlvcnMuZmluZCgoaXQpID0+IGl0LlBhdGhQYXR0ZXJuID09PSBwYXRoUGF0dGVybikhO1xuICAgICAgY29uc3QgYXNzb2NpYXRpb24gPSBiZWhhdmlvci5GdW5jdGlvbkFzc29jaWF0aW9ucyEuZmluZChcbiAgICAgICAgKGl0KSA9PiBpdC5FdmVudFR5cGUgPT09IFwidmlld2VyLXJlcXVlc3RcIixcbiAgICAgICkhO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uc1thc3NvY2lhdGlvbi5GdW5jdGlvbkFSTltcIkZuOjpHZXRBdHRcIl1bMF1dLlByb3BlcnRpZXM7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBUaGF0IGZ1bmN0aW9uJ3MgaGFuZGxlciwgcnVubmFibGUuIGBub2RlOnZtYCBzY3JpcHRzIGNhbid0IGBpbXBvcnRgLCBzb1xuICAgICAqIHRoZSBgY2xvdWRmcm9udGAgbW9kdWxlIGlzIGhhbmRlZCBpbiBhcyB0aGUgYmluZGluZyB0aGUgaW1wb3J0IG1ha2VzLlxuICAgICAqL1xuICAgIGNvbnN0IGhhbmRsZXJGb3IgPSAoXG4gICAgICBwYXRoUGF0dGVybjogc3RyaW5nLFxuICAgICAga3ZzVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge30sXG4gICAgKTogSGFuZGxlciA9PiB7XG4gICAgICBjb25zdCBjb2RlID0gKGZ1bmN0aW9uRm9yKHBhdGhQYXR0ZXJuKS5GdW5jdGlvbkNvZGUgYXMgc3RyaW5nKS5yZXBsYWNlKFxuICAgICAgICAvXlxccyppbXBvcnQgY2YgZnJvbSBcImNsb3VkZnJvbnRcIjsvLFxuICAgICAgICBcIlwiLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBydW5Jbk5ld0NvbnRleHQoYCR7Y29kZX1cXG5oYW5kbGVyYCwge1xuICAgICAgICBjZjogZmFrZUNsb3VkRnJvbnRNb2R1bGUoa3ZzVmFsdWVzKSxcbiAgICAgIH0pIGFzIEhhbmRsZXI7XG4gICAgfTtcbiAgICByZXR1cm4geyBiZWhhdmlvcnMsIGZ1bmN0aW9ucywgZnVuY3Rpb25Gb3IsIGhhbmRsZXJGb3IsIHN0YWNrIH07XG4gIH07XG5cbiAgY29uc3QgcmVxdWVzdCA9ICh1cmk6IHN0cmluZywgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9KSA9PiAoe1xuICAgIHJlcXVlc3Q6IHtcbiAgICAgIHVyaSxcbiAgICAgIHF1ZXJ5c3RyaW5nOiB7fSxcbiAgICAgIGhlYWRlcnM6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoeyBob3N0OiBcImEudGVzdFwiLCAuLi5oZWFkZXJzIH0pLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gW1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgeyB2YWx1ZSB9LFxuICAgICAgICBdKSxcbiAgICAgICksXG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IHN0YXR1cyA9IChyZXN1bHQ6IEZ1bmN0aW9uUmVzdWx0KSA9PlxuICAgIChyZXN1bHQgYXMgeyBzdGF0dXNDb2RlPzogbnVtYmVyIH0pLnN0YXR1c0NvZGU7XG5cbiAgaXQuZWFjaChbTmV4dGpzVHlwZS5HTE9CQUxfRlVOQ1RJT05TLCBOZXh0anNUeXBlLkdMT0JBTF9DT05UQUlORVJTXSkoXG4gICAgXCJnYXRlcyBldmVyeSBiZWhhdmlvciBvbiAlcywgc3RhdGljIGFzc2V0cyBpbmNsdWRlZFwiLFxuICAgIGFzeW5jIChuZXh0anNUeXBlKSA9PiB7XG4gICAgICBjb25zdCB7IGJlaGF2aW9ycywgaGFuZGxlckZvciB9ID0gc3ludGgoeyBjb2RlOiBCQVNJQ19BVVRILCBuZXh0anNUeXBlIH0pO1xuICAgICAgZXhwZWN0KGJlaGF2aW9ycy5tYXAoKGl0KSA9PiBpdC5QYXRoUGF0dGVybikuc29ydCgpKS50b0VxdWFsKFtcbiAgICAgICAgXCIqXCIsXG4gICAgICAgIFwiX25leHQvaW1hZ2UqXCIsXG4gICAgICAgIFwiX25leHQvc3RhdGljKlwiLFxuICAgICAgICBcImZhdmljb24uaWNvXCIsXG4gICAgICBdKTtcbiAgICAgIGZvciAoY29uc3QgeyBQYXRoUGF0dGVybiB9IG9mIGJlaGF2aW9ycykge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gaGFuZGxlckZvcihQYXRoUGF0dGVybik7XG4gICAgICAgIGV4cGVjdChzdGF0dXMoYXdhaXQgaGFuZGxlcihyZXF1ZXN0KFwiL3hcIikpKSkudG9CZSg0MDEpO1xuICAgICAgICBjb25zdCBwYXNzZWQgPSAoYXdhaXQgaGFuZGxlcihcbiAgICAgICAgICByZXF1ZXN0KFwiL3hcIiwgQVVUSE9SSVpFRCksXG4gICAgICAgICkpIGFzIEZ1bmN0aW9uUmVxdWVzdDtcbiAgICAgICAgZXhwZWN0KHBhc3NlZC51cmkpLnRvQmUoXCIveFwiKTtcbiAgICAgIH1cbiAgICB9LFxuICApO1xuXG4gIGl0KFwic2hhcmVzIG9uZSBwYXNzLXRocm91Z2ggZnVuY3Rpb24gYmV0d2VlbiBkeW5hbWljIGFuZCBzdGF0aWMgb24gR2xvYmFsIENvbnRhaW5lcnNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgYmVoYXZpb3JzLCBmdW5jdGlvbnMgfSA9IHN5bnRoKHtcbiAgICAgIGNvZGU6IEJBU0lDX0FVVEgsXG4gICAgICBuZXh0anNUeXBlOiBOZXh0anNUeXBlLkdMT0JBTF9DT05UQUlORVJTLFxuICAgIH0pO1xuICAgIGNvbnN0IFtsb2dpY2FsSWQsIC4uLnJlc3RdID0gT2JqZWN0LmtleXMoZnVuY3Rpb25zKTtcbiAgICBleHBlY3QocmVzdCkudG9IYXZlTGVuZ3RoKDApO1xuICAgIGV4cGVjdChiZWhhdmlvcnMubWFwKChpdCkgPT4gaXQuUGF0aFBhdHRlcm4pLnNvcnQoKSkudG9FcXVhbChbXG4gICAgICBcIipcIixcbiAgICAgIFwiX25leHQvaW1hZ2UqXCIsXG4gICAgICBcIl9uZXh0L3N0YXRpYypcIixcbiAgICAgIFwiZmF2aWNvbi5pY29cIixcbiAgICBdKTtcbiAgICBmb3IgKGNvbnN0IHsgRnVuY3Rpb25Bc3NvY2lhdGlvbnMgfSBvZiBiZWhhdmlvcnMpIHtcbiAgICAgIGV4cGVjdChGdW5jdGlvbkFzc29jaWF0aW9ucykudG9FcXVhbChbXG4gICAgICAgIHtcbiAgICAgICAgICBFdmVudFR5cGU6IFwidmlld2VyLXJlcXVlc3RcIixcbiAgICAgICAgICBGdW5jdGlvbkFSTjogeyBcIkZuOjpHZXRBdHRcIjogW2xvZ2ljYWxJZCwgXCJGdW5jdGlvbkFSTlwiXSB9LFxuICAgICAgICB9LFxuICAgICAgXSk7XG4gICAgfVxuICB9KTtcblxuICBpdChcImFjY2VwdHMgdmlld2VyUmVxdWVzdCBkZWNsYXJlZCBhZnRlciBhbm90aGVyIHZhcmlhYmxlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gc3ludGgoe1xuICAgICAgY29kZTogYHZhciB4ID0gMSwgdmlld2VyUmVxdWVzdCA9IChldmVudCkgPT4gKHsgc3RhdHVzQ29kZTogNDAxIH0pO2AsXG4gICAgfSkuaGFuZGxlckZvcihcIl9uZXh0L3N0YXRpYypcIik7XG4gICAgZXhwZWN0KHN0YXR1cyhhd2FpdCBoYW5kbGVyKHJlcXVlc3QoXCIveFwiKSkpKS50b0JlKDQwMSk7XG4gIH0pO1xuXG4gIGl0KFwiYWNjZXB0cyB2aWV3ZXJSZXF1ZXN0IGRlZmluZWQgYXMgYSBjb25zdCBhcnJvdyBmdW5jdGlvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IHN5bnRoKHtcbiAgICAgIGNvZGU6IGBjb25zdCB2aWV3ZXJSZXF1ZXN0ID0gYXN5bmMgKGV2ZW50KSA9PiAoeyBzdGF0dXNDb2RlOiA0MDEgfSk7YCxcbiAgICB9KS5oYW5kbGVyRm9yKFwiX25leHQvc3RhdGljKlwiKTtcbiAgICBleHBlY3Qoc3RhdHVzKGF3YWl0IGhhbmRsZXIocmVxdWVzdChcIi94XCIpKSkpLnRvQmUoNDAxKTtcbiAgfSk7XG5cbiAgaXQoXCJydW5zIGJlZm9yZSB0aGUgcmVwZWF0ZWQtc2xhc2ggcmVkaXJlY3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIE90aGVyd2lzZSBgL2EvL2JgIHdvdWxkIGFuc3dlciAzMDggdG8gYSB2aWV3ZXIgd2hvIG5ldmVyIGF1dGhlbnRpY2F0ZWQuXG4gICAgY29uc3QgaGFuZGxlciA9IHN5bnRoKHsgY29kZTogQkFTSUNfQVVUSCB9KS5oYW5kbGVyRm9yKFwiKlwiKTtcbiAgICBleHBlY3Qoc3RhdHVzKGF3YWl0IGhhbmRsZXIocmVxdWVzdChcIi9hLy9iXCIpKSkpLnRvQmUoNDAxKTtcbiAgICBleHBlY3Qoc3RhdHVzKGF3YWl0IGhhbmRsZXIocmVxdWVzdChcIi9hLy9iXCIsIEFVVEhPUklaRUQpKSkpLnRvQmUoMzA4KTtcbiAgfSk7XG5cbiAgaXQoXCJhc3NvY2lhdGVzIHRoZSBzdG9yZSB3aXRoIGV2ZXJ5IGZ1bmN0aW9uIGl0IHJ1bnMgaW5cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgYmVoYXZpb3JzLCBmdW5jdGlvbkZvciwgZnVuY3Rpb25zIH0gPSBzeW50aCh7XG4gICAgICBjb2RlOiBCQVNJQ19BVVRILFxuICAgICAga2V5VmFsdWVTdG9yZTogdHJ1ZSxcbiAgICAgIGFzc2V0UHJlZml4OiBcIi9jZG5cIixcbiAgICB9KTtcbiAgICBleHBlY3QoT2JqZWN0LmtleXMoZnVuY3Rpb25zKSkudG9IYXZlTGVuZ3RoKDMpO1xuICAgIGZvciAoY29uc3QgeyBQYXRoUGF0dGVybiB9IG9mIGJlaGF2aW9ycykge1xuICAgICAgY29uc3QgeyBGdW5jdGlvbkNvbmZpZyB9ID0gZnVuY3Rpb25Gb3IoUGF0aFBhdHRlcm4pO1xuICAgICAgZXhwZWN0KEZ1bmN0aW9uQ29uZmlnLlJ1bnRpbWUpLnRvQmUoXCJjbG91ZGZyb250LWpzLTIuMFwiKTtcbiAgICAgIGV4cGVjdChGdW5jdGlvbkNvbmZpZy5LZXlWYWx1ZVN0b3JlQXNzb2NpYXRpb25zKS50b0VxdWFsKFtcbiAgICAgICAgeyBLZXlWYWx1ZVN0b3JlQVJOOiB7IFwiRm46OkdldEF0dFwiOiBbZXhwZWN0LmFueShTdHJpbmcpLCBcIkFyblwiXSB9IH0sXG4gICAgICBdKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwicmVhZHMgY3JlZGVudGlhbHMgZnJvbSB0aGUgS2V5VmFsdWVTdG9yZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IHN5bnRoKHtcbiAgICAgIGtleVZhbHVlU3RvcmU6IHRydWUsXG4gICAgICBjb2RlOiBgaW1wb3J0IGNmIGZyb20gXCJjbG91ZGZyb250XCI7XG4gICAgICAgIGNvbnN0IGt2cyA9IGNmLmt2cygpO1xuICAgICAgICBhc3luYyBmdW5jdGlvbiB2aWV3ZXJSZXF1ZXN0KGV2ZW50KSB7XG4gICAgICAgICAgY29uc3QgYXV0aCA9IGV2ZW50LnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uO1xuICAgICAgICAgIGlmIChhdXRoICYmIGF1dGgudmFsdWUgPT09IFwiQmFzaWMgXCIgKyAoYXdhaXQga3ZzLmdldChcImJhc2ljLWF1dGhcIikpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IHN0YXR1c0NvZGU6IDQwMSwgc3RhdHVzRGVzY3JpcHRpb246IFwiVW5hdXRob3JpemVkXCIgfTtcbiAgICAgICAgfVxuICAgICAgYCxcbiAgICB9KS5oYW5kbGVyRm9yKFwiX25leHQvc3RhdGljKlwiLCB7IFwiYmFzaWMtYXV0aFwiOiBcImRYTmxjanB3WVhOelwiIH0pO1xuICAgIGV4cGVjdChzdGF0dXMoYXdhaXQgaGFuZGxlcihyZXF1ZXN0KFwiL3hcIikpKSkudG9CZSg0MDEpO1xuICAgIGV4cGVjdChcbiAgICAgICgoYXdhaXQgaGFuZGxlcihyZXF1ZXN0KFwiL3hcIiwgQVVUSE9SSVpFRCkpKSBhcyBGdW5jdGlvblJlcXVlc3QpLnVyaSxcbiAgICApLnRvQmUoXCIveFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWZ1c2VzIGEgS2V5VmFsdWVTdG9yZSB3aXRob3V0IGNvZGUgdG8gcmVhZCBpdFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IHN5bnRoKHsga2V5VmFsdWVTdG9yZTogdHJ1ZSB9KSkudG9UaHJvdyhcbiAgICAgIC9gdmlld2VyUmVxdWVzdEtleVZhbHVlU3RvcmVgIC4qIG5lZWRzIGB2aWV3ZXJSZXF1ZXN0RnVuY3Rpb25Db2RlYC8sXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJjYW4ndCBrZWVwIGEgdmlld2VyJ3MgeC1mb3J3YXJkZWQtaG9zdCBwYXN0IGNkay1uZXh0anMncyBvdmVyd3JpdGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZXIgPSBzeW50aCh7XG4gICAgICBjb2RlOiBgXG4gICAgICAgIGZ1bmN0aW9uIHZpZXdlclJlcXVlc3QoZXZlbnQpIHtcbiAgICAgICAgICBldmVudC5yZXF1ZXN0LmhlYWRlcnNbXCJ4LWZvcndhcmRlZC1ob3N0XCJdID0geyB2YWx1ZTogXCJldmlsLnRlc3RcIiB9O1xuICAgICAgICAgIHJldHVybiBldmVudC5yZXF1ZXN0O1xuICAgICAgICB9XG4gICAgICBgLFxuICAgIH0pLmhhbmRsZXJGb3IoXCIqXCIpO1xuICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCBoYW5kbGVyKHJlcXVlc3QoXCIveFwiKSkpIGFzIEZ1bmN0aW9uUmVxdWVzdDtcbiAgICBleHBlY3QocmVzdWx0LmhlYWRlcnNbXCJ4LWZvcndhcmRlZC1ob3N0XCJdLnZhbHVlKS50b0JlKFwiYS50ZXN0XCIpO1xuICB9KTtcblxuICBpdChcImNhcnJpZXMgb24gd2l0aCBhIHJlcXVlc3QgaXQgcmV0dXJucyBhcyBhIG5ldyBvYmplY3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZXIgPSBzeW50aCh7XG4gICAgICBjb2RlOiBgXG4gICAgICAgIGZ1bmN0aW9uIHZpZXdlclJlcXVlc3QoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4geyB1cmk6IFwiL3lcIiwgcXVlcnlzdHJpbmc6IHt9LCBoZWFkZXJzOiBldmVudC5yZXF1ZXN0LmhlYWRlcnMgfTtcbiAgICAgICAgfVxuICAgICAgYCxcbiAgICB9KS5oYW5kbGVyRm9yKFwiX25leHQvc3RhdGljKlwiKTtcbiAgICBleHBlY3QoKChhd2FpdCBoYW5kbGVyKHJlcXVlc3QoXCIveFwiKSkpIGFzIEZ1bmN0aW9uUmVxdWVzdCkudXJpKS50b0JlKFwiL3lcIik7XG4gIH0pO1xuXG4gIGl0KFwicnVucyBpbnNpZGUgdGhlIGFzc2V0UHJlZml4IHJld3JpdGUsIGluIHBsYWNlIG9mIHRoZSBzdGF0aWMgZnVuY3Rpb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgYmVoYXZpb3JzLCBoYW5kbGVyRm9yIH0gPSBzeW50aCh7XG4gICAgICBjb2RlOiBCQVNJQ19BVVRILFxuICAgICAgYXNzZXRQcmVmaXg6IFwiL2NkblwiLFxuICAgIH0pO1xuICAgIGNvbnN0IHByZWZpeGVkID0gYmVoYXZpb3JzLmZpbmQoXG4gICAgICAoaXQpID0+IGl0LlBhdGhQYXR0ZXJuID09PSBcIi9jZG4vX25leHQvc3RhdGljKlwiLFxuICAgICkhO1xuICAgIC8vIE9uZSB2aWV3ZXItcmVxdWVzdCBmdW5jdGlvbiBwZXIgYmVoYXZpb3IsIG9yIENsb3VkRnJvbnQgcmVqZWN0cyBpdC5cbiAgICBleHBlY3QoXG4gICAgICBwcmVmaXhlZC5GdW5jdGlvbkFzc29jaWF0aW9ucyEuZmlsdGVyKFxuICAgICAgICAoaXQpID0+IGl0LkV2ZW50VHlwZSA9PT0gXCJ2aWV3ZXItcmVxdWVzdFwiLFxuICAgICAgKSxcbiAgICApLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICBjb25zdCBoYW5kbGVyID0gaGFuZGxlckZvcihcIi9jZG4vX25leHQvc3RhdGljKlwiKTtcbiAgICBleHBlY3Qoc3RhdHVzKGF3YWl0IGhhbmRsZXIocmVxdWVzdChcIi9jZG4vX25leHQvc3RhdGljL2EuanNcIikpKSkudG9CZSg0MDEpO1xuICAgIGNvbnN0IHBhc3NlZCA9IChhd2FpdCBoYW5kbGVyKFxuICAgICAgcmVxdWVzdChcIi9jZG4vX25leHQvc3RhdGljL2EuanNcIiwgQVVUSE9SSVpFRCksXG4gICAgKSkgYXMgRnVuY3Rpb25SZXF1ZXN0O1xuICAgIGV4cGVjdChwYXNzZWQudXJpKS50b0JlKFwiL19uZXh0L3N0YXRpYy9hLmpzXCIpO1xuICB9KTtcblxuICBpdChcImFkZHMgbm8gZnVuY3Rpb25zIHdoZW4gdW5zZXRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgYmVoYXZpb3JzLCBmdW5jdGlvbnMgfSA9IHN5bnRoKCk7XG4gICAgY29uc3Qgc3RhdGljQmVoYXZpb3IgPSBiZWhhdmlvcnMuZmluZChcbiAgICAgIChpdCkgPT4gaXQuUGF0aFBhdHRlcm4gPT09IFwiX25leHQvc3RhdGljKlwiLFxuICAgICkhO1xuICAgIGV4cGVjdChzdGF0aWNCZWhhdmlvci5GdW5jdGlvbkFzc29jaWF0aW9ucykudG9CZVVuZGVmaW5lZCgpO1xuICAgIGNvbnN0IFtmbiwgLi4ucmVzdF0gPSBPYmplY3QudmFsdWVzKGZ1bmN0aW9ucykubWFwKChpdCkgPT4gaXQuUHJvcGVydGllcyk7XG4gICAgZXhwZWN0KHJlc3QpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgICAvLyBUaGUgbWFya2VyIGlzIGRyb3BwZWQsIG5vdCBsZWZ0IGluIHRoZSBkZXBsb3llZCBmdW5jdGlvbi5cbiAgICBleHBlY3QoZm4uRnVuY3Rpb25Db2RlKS50b01hdGNoKFxuICAgICAgL15cXHMqYXN5bmMgZnVuY3Rpb24gaGFuZGxlclxcKGV2ZW50XFwpIFxce1xcblxccypjb25zdCByZXF1ZXN0LyxcbiAgICApO1xuICAgIGV4cGVjdChmbi5GdW5jdGlvbkNvbmZpZy5LZXlWYWx1ZVN0b3JlQXNzb2NpYXRpb25zKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0LmVhY2goW2ZhbHNlLCB0cnVlXSkoXG4gICAgXCJydW5zIGV2ZXJ5IGNkay1uZXh0anMgZnVuY3Rpb24gb24gY2xvdWRmcm9udC1qcy0yLjAgKGhvb2sgc2V0OiAlcylcIixcbiAgICAoaG9va2VkKSA9PiB7XG4gICAgICBjb25zdCB7IGZ1bmN0aW9ucyB9ID0gc3ludGgoe1xuICAgICAgICBjb2RlOiBob29rZWQgPyBCQVNJQ19BVVRIIDogdW5kZWZpbmVkLFxuICAgICAgICBhc3NldFByZWZpeDogXCIvY2RuXCIsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJ1bnRpbWVzID0gT2JqZWN0LnZhbHVlcyhmdW5jdGlvbnMpLm1hcChcbiAgICAgICAgKGl0KSA9PiBpdC5Qcm9wZXJ0aWVzLkZ1bmN0aW9uQ29uZmlnLlJ1bnRpbWUsXG4gICAgICApO1xuICAgICAgZXhwZWN0KHJ1bnRpbWVzKS50b0hhdmVMZW5ndGgoaG9va2VkID8gMyA6IDIpO1xuICAgICAgZXhwZWN0KG5ldyBTZXQocnVudGltZXMpKS50b0VxdWFsKG5ldyBTZXQoW1wiY2xvdWRmcm9udC1qcy0yLjBcIl0pKTtcbiAgICB9LFxuICApO1xuXG4gIGl0LmVhY2goW1wiZHluYW1pY0JlaGF2aW9yT3B0aW9uc1wiLCBcImltYWdlQmVoYXZpb3JPcHRpb25zXCJdIGFzIGNvbnN0KShcbiAgICBcInJlZnVzZXMgYSAlcyBvdmVycmlkZSB0aGF0IGNsYWltcyB2aWV3ZXItcmVxdWVzdCBvbiBHbG9iYWwgQ29udGFpbmVyc1wiLFxuICAgIChvdmVycmlkZU5hbWUpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICBzeW50aCh7XG4gICAgICAgICAgY29kZTogQkFTSUNfQVVUSCxcbiAgICAgICAgICBuZXh0anNUeXBlOiBOZXh0anNUeXBlLkdMT0JBTF9DT05UQUlORVJTLFxuICAgICAgICAgIG92ZXJyaWRlczogKHN0YWNrKSA9PiAoe1xuICAgICAgICAgICAgW292ZXJyaWRlTmFtZV06IHtcbiAgICAgICAgICAgICAgZnVuY3Rpb25Bc3NvY2lhdGlvbnM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBldmVudFR5cGU6IEZ1bmN0aW9uRXZlbnRUeXBlLlZJRVdFUl9SRVFVRVNULFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb246IG5ldyBDbG91ZEZyb250RnVuY3Rpb24oc3RhY2ssIFwiVXNlckZuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogRnVuY3Rpb25Db2RlLmZyb21JbmxpbmUoXG4gICAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7IHJldHVybiBldmVudC5yZXF1ZXN0OyB9XCIsXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSksXG4gICAgICApLnRvVGhyb3coXG4gICAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgICAgYG92ZXJyaWRlc1xcXFwuJHtvdmVycmlkZU5hbWV9XFxcXC5mdW5jdGlvbkFzc29jaWF0aW9ucy4qdmlld2VyUmVxdWVzdEZ1bmN0aW9uQ29kZWAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0sXG4gICk7XG5cbiAgaXQoXCJyZWZ1c2VzIGEgZGlzdHJpYnV0aW9uUHJvcHMuZGVmYXVsdEJlaGF2aW9yIG92ZXJyaWRlXCIsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT5cbiAgICAgIHN5bnRoKHtcbiAgICAgICAgY29kZTogQkFTSUNfQVVUSCxcbiAgICAgICAgb3ZlcnJpZGVzOiAoKSA9PiAoe1xuICAgICAgICAgIGRpc3RyaWJ1dGlvblByb3BzOiB7XG4gICAgICAgICAgICBkZWZhdWx0QmVoYXZpb3I6IHtcbiAgICAgICAgICAgICAgb3JpZ2luOiBuZXcgSHR0cE9yaWdpbihcImV4YW1wbGUuY29tXCIpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgICkudG9UaHJvdygvb3ZlcnJpZGVzXFwuZGlzdHJpYnV0aW9uUHJvcHNcXC5kZWZhdWx0QmVoYXZpb3IvKTtcbiAgfSk7XG5cbiAgaXQoXCJsZXRzIGEgYmFzZVBhdGggYXBwIHJlcGxhY2UgdGhlIGRlZmF1bHQgYmVoYXZpb3JcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgc3ludGgoe1xuICAgICAgICBjb2RlOiBCQVNJQ19BVVRILFxuICAgICAgICBiYXNlUGF0aDogXCIvYXBwXCIsXG4gICAgICAgIG92ZXJyaWRlczogKCkgPT4gKHtcbiAgICAgICAgICBkaXN0cmlidXRpb25Qcm9wczoge1xuICAgICAgICAgICAgZGVmYXVsdEJlaGF2aW9yOiB7IG9yaWdpbjogbmV3IEh0dHBPcmlnaW4oXCJleGFtcGxlLmNvbVwiKSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgKS5ub3QudG9UaHJvdygpO1xuICB9KTtcblxuICBpdChcImtlZXBzIGNkay1uZXh0anMncyBjb2RlIG91dCBvZiB0aGUgZGVwbG95ZWQgaW5kZW50YXRpb25cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHsgZnVuY3Rpb25Gb3IgfSA9IHN5bnRoKHsgY29kZTogQkFTSUNfQVVUSCB9KTtcbiAgICBjb25zdCBjb2RlID0gZnVuY3Rpb25Gb3IoXCIqXCIpLkZ1bmN0aW9uQ29kZSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgb3duID0gY29kZS5zbGljZShjb2RlLmluZGV4T2YoXCJhc3luYyBmdW5jdGlvbiBoYW5kbGVyXCIpKTtcbiAgICBleHBlY3Qob3duKS5ub3QudG9NYXRjaCgvXlsgXFx0XS9tKTtcbiAgfSk7XG5cbiAgaXQoXCJ3YXJucywgcmF0aGVyIHRoYW4gbWVhc3VyZXMsIHdoZW4gdGhlIGNvZGUgY29udGFpbnMgYSB0b2tlblwiLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzdGFjayB9ID0gc3ludGgoe1xuICAgICAgY29kZTogYGZ1bmN0aW9uIHZpZXdlclJlcXVlc3QoZXZlbnQpIHsgcmV0dXJuICR7TGF6eS5zdHJpbmcoeyBwcm9kdWNlOiAoKSA9PiAnXCJ4XCInIH0pfTsgfWAsXG4gICAgfSk7XG4gICAgQW5ub3RhdGlvbnMuZnJvbVN0YWNrKHN0YWNrKS5oYXNXYXJuaW5nKFxuICAgICAgXCIqXCIsXG4gICAgICBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKFwiY29udGFpbnMgYSBDREsgdG9rZW5cIiksXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWZ1c2VzIGEgc3RhdGljIG92ZXJyaWRlIHRoYXQgYWxyZWFkeSBjbGFpbXMgdmlld2VyLXJlcXVlc3RcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgc3ludGgoe1xuICAgICAgICBjb2RlOiBCQVNJQ19BVVRILFxuICAgICAgICBvdmVycmlkZXM6IChzdGFjaykgPT4gKHtcbiAgICAgICAgICBzdGF0aWNCZWhhdmlvck9wdGlvbnM6IHtcbiAgICAgICAgICAgIGZ1bmN0aW9uQXNzb2NpYXRpb25zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBldmVudFR5cGU6IEZ1bmN0aW9uRXZlbnRUeXBlLlZJRVdFUl9SRVFVRVNULFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uOiBuZXcgQ2xvdWRGcm9udEZ1bmN0aW9uKHN0YWNrLCBcIlVzZXJGblwiLCB7XG4gICAgICAgICAgICAgICAgICBjb2RlOiBGdW5jdGlvbkNvZGUuZnJvbUlubGluZShcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7IHJldHVybiBldmVudC5yZXF1ZXN0OyB9XCIsXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgICkudG9UaHJvdygvb3ZlcnJpZGVzXFwuc3RhdGljQmVoYXZpb3JPcHRpb25zXFwuZnVuY3Rpb25Bc3NvY2lhdGlvbnMvKTtcbiAgfSk7XG5cbiAgaXQuZWFjaChbXG4gICAgW1wibm8gdmlld2VyUmVxdWVzdFwiLCBcInZhciB4ID0gMTtcIiwgL211c3QgZGVmaW5lIGB2aWV3ZXJSZXF1ZXN0XFwoZXZlbnRcXClgL10sXG4gICAgLi4uW1xuICAgICAgXCJmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7fVwiLFxuICAgICAgXCJmdW5jdGlvbiogaGFuZGxlcihldmVudCkge31cIixcbiAgICAgIFwiY29uc3QgaGFuZGxlciA9IChldmVudCkgPT4gZXZlbnQucmVxdWVzdDtcIixcbiAgICAgIFwibGV0IGEgPSAxLCBoYW5kbGVyID0gMjtcIixcbiAgICAgIFwidmFyIGhhbmRsZXIgPSAoZXZlbnQpID0+IGV2ZW50LnJlcXVlc3Q7XCIsXG4gICAgICBcInZhciB7IGhhbmRsZXIgfSA9IHsgaGFuZGxlcjogKGV2ZW50KSA9PiBldmVudC5yZXF1ZXN0IH07XCIsXG4gICAgICAnZ2xvYmFsVGhpc1tcImhhbmRsZXJcIl0gPSAoZXZlbnQpID0+IGV2ZW50LnJlcXVlc3Q7JyxcbiAgICAgIFwidmFyIGNka05leHRqc0hhbmRsZXI7IGhhbmRsZXIgPSBjZGtOZXh0anNIYW5kbGVyO1wiLFxuICAgIF0ubWFwKChkZWNsYXJhdGlvbik6IFtzdHJpbmcsIHN0cmluZywgUmVnRXhwXSA9PiBbXG4gICAgICBgaGFuZGxlciBpbiBcXGAke2RlY2xhcmF0aW9ufVxcYGAsXG4gICAgICBgJHtkZWNsYXJhdGlvbn1cXG5mdW5jdGlvbiB2aWV3ZXJSZXF1ZXN0KGV2ZW50KSB7fWAsXG4gICAgICAvdXNlcyB0aGUgbmFtZSBgaGFuZGxlcmAvLFxuICAgIF0pLFxuICAgIFtcbiAgICAgIFwidmlld2VyUmVxdWVzdCBvbmx5IGNvbXBhcmVkLCBuZXZlciBkZWNsYXJlZFwiLFxuICAgICAgJ2NvbnN0IG9rID0gdHlwZW9mIHZpZXdlclJlcXVlc3QgPT09IFwiZnVuY3Rpb25cIjsnLFxuICAgICAgL211c3QgZGVmaW5lIGB2aWV3ZXJSZXF1ZXN0XFwoZXZlbnRcXClgLyxcbiAgICBdLFxuICAgIFtcbiAgICAgIFwidmlld2VyUmVxdWVzdCBvbmx5IGFzc2lnbmVkIGFzIGEgcHJvcGVydHlcIixcbiAgICAgIFwiY29uc3QgY2ZnID0ge307IGNmZy52aWV3ZXJSZXF1ZXN0ID0gZnVuY3Rpb24gKGV2ZW50KSB7fTtcIixcbiAgICAgIC9tdXN0IGRlZmluZSBgdmlld2VyUmVxdWVzdFxcKGV2ZW50XFwpYC8sXG4gICAgXSxcbiAgICBbXG4gICAgICBcIm1vcmUgdGhhbiBmaXRzIGluIGEgQ2xvdWRGcm9udCBGdW5jdGlvblwiLFxuICAgICAgYGZ1bmN0aW9uIHZpZXdlclJlcXVlc3QoZXZlbnQpIHt9IC8qICR7XCJ4XCIucmVwZWF0KDEwICogMTAyNCl9ICovYCxcbiAgICAgIC9vdmVyIENsb3VkRnJvbnQncyBsaW1pdCBvZiAxMDI0MC8sXG4gICAgXSxcbiAgXSkoXCJyZWZ1c2VzIGNvZGUgd2l0aCAlc1wiLCAoX25hbWUsIGNvZGUsIGVycm9yKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IHN5bnRoKHsgY29kZSB9KSkudG9UaHJvdyhlcnJvcik7XG4gIH0pO1xufSk7XG4iXX0=
|