@mavogel/cdk-vscode-server 0.0.55 → 0.0.56
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/.claude/hooks/file_checker.sh +0 -0
- package/.jsii +96 -24
- package/API.md +56 -0
- package/CLAUDE.md +84 -118
- package/README.md +48 -0
- package/assets/installer/installer.lambda/index.js +14 -2
- package/examples/custom-domain/main.ts +49 -0
- package/integ-tests/integ.al2023.ts.snapshot/IntegSetupVSCodeOnAl2023DefaultTestDeployAssert74D8F645.assets.json +7 -6
- package/integ-tests/integ.al2023.ts.snapshot/IntegSetupVSCodeOnAl2023DefaultTestDeployAssert74D8F645.template.json +6 -6
- package/integ-tests/integ.al2023.ts.snapshot/IntegTestStackAl2023.assets.json +20 -12
- package/integ-tests/integ.al2023.ts.snapshot/IntegTestStackAl2023.template.json +36 -152
- package/integ-tests/integ.al2023.ts.snapshot/{asset.23732f3d1982f7fb0da3bd6638a8107337bb767fea165b45eae12000a1dd67ce → asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4}/index.js +988 -1165
- package/integ-tests/{integ.ubuntu.ts.snapshot/asset.a9865c9d36c7aa999e28cb7926e7a3a8e0b6d0854b25131a172024c5777442fa.lambda → integ.al2023.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda}/index.js +14 -2
- package/integ-tests/{integ.ubuntu.ts.snapshot/asset.f692c9f68e4daba2abc99103efd3518bced1e9d7a2a89847b9b5d5473c64f1bd.bundle → integ.al2023.ts.snapshot/asset.530055f7515b3f0a47900f5df37e729ba40ca977b2d07b952bdefa2b8f883f42.bundle}/index.js +296 -191
- package/integ-tests/{integ.ubuntu.ts.snapshot/asset.ce2f3595a340d6c519a65888ef97e3b9b64f053f83608e32cc28162e22d7d99a → integ.al2023.ts.snapshot/asset.9d043014be736e8162bcc7ec5590cc6d2ff24fd0d9c73a5c5d595151c5fdad00}/index.js +1 -1
- package/integ-tests/integ.al2023.ts.snapshot/cdk.out +1 -1
- package/integ-tests/integ.al2023.ts.snapshot/integ.json +4 -3
- package/integ-tests/integ.al2023.ts.snapshot/manifest.json +956 -7
- package/integ-tests/integ.al2023.ts.snapshot/tree.json +1 -3228
- package/integ-tests/integ.custom-domain.ts +87 -0
- package/integ-tests/integ.custom-domain.ts.snapshot/IntegSetupVSCodeOnCustomDomainDefaultTestDeployAssert6982D514.assets.json +33 -0
- package/integ-tests/integ.custom-domain.ts.snapshot/IntegSetupVSCodeOnCustomDomainDefaultTestDeployAssert6982D514.template.json +333 -0
- package/integ-tests/integ.custom-domain.ts.snapshot/IntegTestStackCustomDomain.assets.json +132 -0
- package/integ-tests/integ.custom-domain.ts.snapshot/IntegTestStackCustomDomain.template.json +2862 -0
- package/integ-tests/{integ.ubuntu.ts.snapshot/asset.23732f3d1982f7fb0da3bd6638a8107337bb767fea165b45eae12000a1dd67ce → integ.custom-domain.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4}/index.js +988 -1165
- package/integ-tests/integ.custom-domain.ts.snapshot/asset.2819175352ad1ce0dae768e83fc328fb70fb5f10b4a8ff0ccbcb791f02b0716d/index.js +1 -0
- package/integ-tests/{integ.al2023.ts.snapshot/asset.a9865c9d36c7aa999e28cb7926e7a3a8e0b6d0854b25131a172024c5777442fa.lambda → integ.custom-domain.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda}/index.js +14 -2
- package/integ-tests/{integ.al2023.ts.snapshot/asset.f692c9f68e4daba2abc99103efd3518bced1e9d7a2a89847b9b5d5473c64f1bd.bundle → integ.custom-domain.ts.snapshot/asset.530055f7515b3f0a47900f5df37e729ba40ca977b2d07b952bdefa2b8f883f42.bundle}/index.js +296 -191
- package/integ-tests/integ.custom-domain.ts.snapshot/asset.781ab0ab74634cdaf61539ab208ab777829ef07097ac21f95b9e15a3b1eedc1b.lambda/index.js +57 -0
- package/integ-tests/integ.custom-domain.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/__entrypoint__.js +1 -0
- package/integ-tests/integ.custom-domain.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/index.js +1 -0
- package/integ-tests/{integ.al2023.ts.snapshot/asset.ce2f3595a340d6c519a65888ef97e3b9b64f053f83608e32cc28162e22d7d99a → integ.custom-domain.ts.snapshot/asset.9d043014be736e8162bcc7ec5590cc6d2ff24fd0d9c73a5c5d595151c5fdad00}/index.js +1 -1
- package/integ-tests/integ.custom-domain.ts.snapshot/asset.b073cebcf4d61fb152a30f5a5e57a94df7f980a549fdf1a79a0b18c5750522d8/index.js +1 -0
- package/integ-tests/integ.custom-domain.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/cfn-response.js +1 -0
- package/integ-tests/integ.custom-domain.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/consts.js +1 -0
- package/integ-tests/integ.custom-domain.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/framework.js +3 -0
- package/integ-tests/integ.custom-domain.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/outbound.js +1 -0
- package/integ-tests/integ.custom-domain.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/util.js +1 -0
- package/integ-tests/integ.custom-domain.ts.snapshot/integ.json +23 -0
- package/integ-tests/integ.custom-domain.ts.snapshot/manifest.json +1653 -0
- package/integ-tests/integ.custom-domain.ts.snapshot/tree.json +1 -0
- package/integ-tests/integ.ubuntu.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.assets.json +7 -6
- package/integ-tests/integ.ubuntu.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.template.json +6 -6
- package/integ-tests/integ.ubuntu.ts.snapshot/IntegTestStackUbuntu22.assets.json +20 -12
- package/integ-tests/integ.ubuntu.ts.snapshot/IntegTestStackUbuntu22.template.json +36 -72
- package/integ-tests/integ.ubuntu.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4/index.js +5992 -0
- package/integ-tests/integ.ubuntu.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda/index.js +143 -0
- package/integ-tests/integ.ubuntu.ts.snapshot/asset.530055f7515b3f0a47900f5df37e729ba40ca977b2d07b952bdefa2b8f883f42.bundle/index.js +30676 -0
- package/integ-tests/integ.ubuntu.ts.snapshot/asset.9d043014be736e8162bcc7ec5590cc6d2ff24fd0d9c73a5c5d595151c5fdad00/index.js +1 -0
- package/integ-tests/integ.ubuntu.ts.snapshot/cdk.out +1 -1
- package/integ-tests/integ.ubuntu.ts.snapshot/integ.json +3 -2
- package/integ-tests/integ.ubuntu.ts.snapshot/manifest.json +956 -7
- package/integ-tests/integ.ubuntu.ts.snapshot/tree.json +1 -3070
- package/lib/installer/installer.d.ts +7 -0
- package/lib/installer/installer.js +15 -7
- package/lib/installer/installer.lambda.js +20 -3
- package/lib/vscode-server.d.ts +33 -0
- package/lib/vscode-server.js +165 -5
- package/mavogelcdkvscodeserver/go.mod +1 -1
- package/mavogelcdkvscodeserver/jsii/jsii.go +2 -2
- package/mavogelcdkvscodeserver/version +1 -1
- package/package.json +4 -4
package/lib/vscode-server.js
CHANGED
|
@@ -4,10 +4,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
exports.VSCodeServer = exports.LinuxArchitectureType = exports.LinuxFlavorType = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
6
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
7
|
+
const acm = require("aws-cdk-lib/aws-certificatemanager");
|
|
7
8
|
const cf = require("aws-cdk-lib/aws-cloudfront");
|
|
8
9
|
const cfo = require("aws-cdk-lib/aws-cloudfront-origins");
|
|
9
10
|
const ec2 = require("aws-cdk-lib/aws-ec2");
|
|
10
11
|
const iam = require("aws-cdk-lib/aws-iam");
|
|
12
|
+
const route53 = require("aws-cdk-lib/aws-route53");
|
|
13
|
+
const route53targets = require("aws-cdk-lib/aws-route53-targets");
|
|
11
14
|
const secretsmanager = require("aws-cdk-lib/aws-secretsmanager");
|
|
12
15
|
const cdk_nag_1 = require("cdk-nag");
|
|
13
16
|
const constructs_1 = require("constructs");
|
|
@@ -68,7 +71,32 @@ class VSCodeServer extends constructs_1.Construct {
|
|
|
68
71
|
const additionalTags = props?.additionalTags ?? {};
|
|
69
72
|
const defaultTags = { app: 'vscode-server' };
|
|
70
73
|
const mergedTags = { ...defaultTags, ...additionalTags };
|
|
71
|
-
aws_cdk_lib_1.Aspects.of(this).add(new NodeTagger(mergedTags));
|
|
74
|
+
aws_cdk_lib_1.Aspects.of(this).add(new NodeTagger(mergedTags), { priority: 150 });
|
|
75
|
+
// Validate domain configuration
|
|
76
|
+
const domainName = props?.domainName;
|
|
77
|
+
const hostedZoneId = props?.hostedZoneId;
|
|
78
|
+
const certificateArn = props?.certificateArn;
|
|
79
|
+
const autoCreateCertificate = props?.autoCreateCertificate ?? false;
|
|
80
|
+
if (domainName) {
|
|
81
|
+
// Validate that either certificateArn or autoCreateCertificate is provided
|
|
82
|
+
if (!certificateArn && !autoCreateCertificate) {
|
|
83
|
+
throw new Error('When domainName is provided, either certificateArn or autoCreateCertificate must be specified');
|
|
84
|
+
}
|
|
85
|
+
// Validate that both certificateArn and autoCreateCertificate are not provided together
|
|
86
|
+
if (certificateArn && autoCreateCertificate) {
|
|
87
|
+
throw new Error('Cannot specify both certificateArn and autoCreateCertificate. Choose one.');
|
|
88
|
+
}
|
|
89
|
+
// Validate that hostedZoneId is provided when autoCreateCertificate is true
|
|
90
|
+
if (autoCreateCertificate && !hostedZoneId) {
|
|
91
|
+
throw new Error('hostedZoneId is required when autoCreateCertificate is true');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// Validate that domain-related props are not provided without domainName
|
|
96
|
+
if (hostedZoneId || certificateArn || autoCreateCertificate) {
|
|
97
|
+
throw new Error('hostedZoneId, certificateArn, and autoCreateCertificate can only be used with domainName');
|
|
98
|
+
}
|
|
99
|
+
}
|
|
72
100
|
let vscodePassword = props?.vscodePassword ?? '';
|
|
73
101
|
if (vscodePassword == '') {
|
|
74
102
|
// Create a secret which is then inject in the SSM document to install vscode server
|
|
@@ -95,6 +123,84 @@ class VSCodeServer extends constructs_1.Construct {
|
|
|
95
123
|
})._bind(this);
|
|
96
124
|
vscodePassword = secretRetriever.secretPasswordPlaintext;
|
|
97
125
|
}
|
|
126
|
+
// Handle SSL certificate for custom domain
|
|
127
|
+
let certificate;
|
|
128
|
+
let hostedZone;
|
|
129
|
+
if (domainName) {
|
|
130
|
+
// Get or create hosted zone
|
|
131
|
+
if (hostedZoneId) {
|
|
132
|
+
hostedZone = route53.HostedZone.fromHostedZoneAttributes(this, 'hosted-zone', {
|
|
133
|
+
hostedZoneId: hostedZoneId,
|
|
134
|
+
zoneName: domainName,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
// Lookup hosted zone by domain name
|
|
139
|
+
hostedZone = route53.HostedZone.fromLookup(this, 'hosted-zone', {
|
|
140
|
+
domainName: domainName,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
// Handle certificate
|
|
144
|
+
if (certificateArn) {
|
|
145
|
+
// Use existing certificate
|
|
146
|
+
certificate = acm.Certificate.fromCertificateArn(this, 'certificate', certificateArn);
|
|
147
|
+
}
|
|
148
|
+
else if (autoCreateCertificate) {
|
|
149
|
+
// Create new certificate with DNS validation
|
|
150
|
+
// CloudFront requires certificates to be in us-east-1 region
|
|
151
|
+
if (!hostedZone) {
|
|
152
|
+
throw new Error('hostedZone is required when autoCreateCertificate is true');
|
|
153
|
+
}
|
|
154
|
+
// Note: Using DnsValidatedCertificate (deprecated but still functional)
|
|
155
|
+
// This is the simplest way to create certificates in us-east-1 from any region
|
|
156
|
+
// The modern approach requires multi-stack deployment with crossRegionReferences
|
|
157
|
+
// which is more complex for a construct library to implement cleanly
|
|
158
|
+
// @ts-ignore - DnsValidatedCertificate is deprecated but still the best option for cross-region certs
|
|
159
|
+
certificate = new acm.DnsValidatedCertificate(this, 'certificate', {
|
|
160
|
+
domainName: domainName,
|
|
161
|
+
hostedZone: hostedZone,
|
|
162
|
+
region: 'us-east-1',
|
|
163
|
+
// Explicitly grant the validation Lambda permission to describe certificates
|
|
164
|
+
customResourceRole: new iam.Role(this, 'certificate-validation-role', {
|
|
165
|
+
assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
|
|
166
|
+
managedPolicies: [
|
|
167
|
+
iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicExecutionRole'),
|
|
168
|
+
],
|
|
169
|
+
inlinePolicies: {
|
|
170
|
+
CertificateValidationPolicy: new iam.PolicyDocument({
|
|
171
|
+
statements: [
|
|
172
|
+
new iam.PolicyStatement({
|
|
173
|
+
actions: [
|
|
174
|
+
'acm:DescribeCertificate',
|
|
175
|
+
'acm:RequestCertificate',
|
|
176
|
+
'acm:DeleteCertificate',
|
|
177
|
+
],
|
|
178
|
+
resources: ['*'],
|
|
179
|
+
}),
|
|
180
|
+
new iam.PolicyStatement({
|
|
181
|
+
actions: [
|
|
182
|
+
'route53:GetChange',
|
|
183
|
+
'route53:ChangeResourceRecordSets',
|
|
184
|
+
],
|
|
185
|
+
resources: ['*'],
|
|
186
|
+
}),
|
|
187
|
+
],
|
|
188
|
+
}),
|
|
189
|
+
},
|
|
190
|
+
}),
|
|
191
|
+
});
|
|
192
|
+
cdk_nag_1.NagSuppressions.addResourceSuppressions([certificate], [
|
|
193
|
+
{
|
|
194
|
+
id: 'AwsSolutions-ACM1',
|
|
195
|
+
reason: 'Certificate is created for VS Code server with proper domain validation',
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
id: 'AwsSolutions-IAM5',
|
|
199
|
+
reason: 'Certificate validation Lambda needs wildcard permissions for ACM and Route53',
|
|
200
|
+
},
|
|
201
|
+
], true);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
98
204
|
// Create default vpc
|
|
99
205
|
const vpc = new ec2.Vpc(this, 'vpc', {
|
|
100
206
|
maxAzs: 2,
|
|
@@ -351,6 +457,13 @@ class VSCodeServer extends constructs_1.Construct {
|
|
|
351
457
|
// minimumProtocolVersion: cf.SecurityPolicyProtocol.TLS_V1_2_2021,
|
|
352
458
|
comment: 'Distribution for VSCodeServer',
|
|
353
459
|
priceClass: cf.PriceClass.PRICE_CLASS_ALL,
|
|
460
|
+
// Custom domain configuration
|
|
461
|
+
...(domainName && certificate
|
|
462
|
+
? {
|
|
463
|
+
domainNames: [domainName],
|
|
464
|
+
certificate: certificate,
|
|
465
|
+
}
|
|
466
|
+
: {}),
|
|
354
467
|
defaultBehavior: {
|
|
355
468
|
allowedMethods: cf.AllowedMethods.ALLOW_ALL,
|
|
356
469
|
cachePolicy: cfCachePolicy,
|
|
@@ -398,6 +511,20 @@ class VSCodeServer extends constructs_1.Construct {
|
|
|
398
511
|
reason: 'For this tmp distribution we do not need limit SSL protocols as we use the default viewer cert',
|
|
399
512
|
},
|
|
400
513
|
], true);
|
|
514
|
+
// Create Route53 A record for custom domain
|
|
515
|
+
if (domainName && hostedZone) {
|
|
516
|
+
const aRecord = new route53.ARecord(this, 'domain-record', {
|
|
517
|
+
zone: hostedZone,
|
|
518
|
+
recordName: domainName,
|
|
519
|
+
target: route53.RecordTarget.fromAlias(new route53targets.CloudFrontTarget(distribution)),
|
|
520
|
+
});
|
|
521
|
+
cdk_nag_1.NagSuppressions.addResourceSuppressions([aRecord], [
|
|
522
|
+
{
|
|
523
|
+
id: 'AwsSolutions-R53-1',
|
|
524
|
+
reason: 'A record created for VS Code server custom domain',
|
|
525
|
+
},
|
|
526
|
+
], true);
|
|
527
|
+
}
|
|
401
528
|
// Use a custom resource lambda to run the SSM document on the instance
|
|
402
529
|
switch (instanceOperatingSystem) {
|
|
403
530
|
case LinuxFlavorType.UBUNTU_22:
|
|
@@ -409,6 +536,7 @@ class VSCodeServer extends constructs_1.Construct {
|
|
|
409
536
|
devServerBasePath: props?.devServerBasePath,
|
|
410
537
|
devServerPort: props?.devServerPort,
|
|
411
538
|
homeFolder: homeFolder,
|
|
539
|
+
customDomainName: domainName,
|
|
412
540
|
})._bind(this);
|
|
413
541
|
break;
|
|
414
542
|
case LinuxFlavorType.AMAZON_LINUX_2023:
|
|
@@ -419,6 +547,7 @@ class VSCodeServer extends constructs_1.Construct {
|
|
|
419
547
|
devServerBasePath: props?.devServerBasePath,
|
|
420
548
|
devServerPort: props?.devServerPort,
|
|
421
549
|
homeFolder: homeFolder,
|
|
550
|
+
customDomainName: domainName,
|
|
422
551
|
})._bind(this);
|
|
423
552
|
break;
|
|
424
553
|
default:
|
|
@@ -428,7 +557,8 @@ class VSCodeServer extends constructs_1.Construct {
|
|
|
428
557
|
// NOTE: maybe have a healhcheck CFN custom resource to see if the vscode server is healthy
|
|
429
558
|
// atm this is achieved by the integ tests
|
|
430
559
|
// Outputs
|
|
431
|
-
|
|
560
|
+
const finalDomainName = domainName || distribution.domainName;
|
|
561
|
+
this.domainName = `https://${finalDomainName}/?folder=${homeFolder}`;
|
|
432
562
|
new aws_cdk_lib_1.CfnOutput(this, 'domainName', {
|
|
433
563
|
description: 'The domain name of the distribution',
|
|
434
564
|
value: this.domainName,
|
|
@@ -442,7 +572,7 @@ class VSCodeServer extends constructs_1.Construct {
|
|
|
442
572
|
}
|
|
443
573
|
exports.VSCodeServer = VSCodeServer;
|
|
444
574
|
_a = JSII_RTTI_SYMBOL_1;
|
|
445
|
-
VSCodeServer[_a] = { fqn: "@mavogel/cdk-vscode-server.VSCodeServer", version: "0.0.
|
|
575
|
+
VSCodeServer[_a] = { fqn: "@mavogel/cdk-vscode-server.VSCodeServer", version: "0.0.56" };
|
|
446
576
|
/**
|
|
447
577
|
* Tags all the resources in the construct
|
|
448
578
|
*/
|
|
@@ -451,7 +581,37 @@ class NodeTagger {
|
|
|
451
581
|
this.tags = tags;
|
|
452
582
|
}
|
|
453
583
|
visit(node) {
|
|
454
|
-
|
|
584
|
+
// Only tag L1 constructs (CfnResource) and L2 constructs that represent AWS resources
|
|
585
|
+
// This prevents infinite loops by avoiding tagging of intermediate constructs
|
|
586
|
+
const nodeType = node.constructor.name;
|
|
587
|
+
// Check if this is a CDK L1 construct (starts with 'Cfn') or known taggable L2 constructs
|
|
588
|
+
const isTaggableConstruct = nodeType.startsWith('Cfn') ||
|
|
589
|
+
nodeType.includes('Instance') ||
|
|
590
|
+
nodeType.includes('Vpc') ||
|
|
591
|
+
nodeType.includes('Subnet') ||
|
|
592
|
+
nodeType.includes('SecurityGroup') ||
|
|
593
|
+
nodeType.includes('Volume') ||
|
|
594
|
+
nodeType.includes('Distribution') ||
|
|
595
|
+
nodeType.includes('LoadBalancer') ||
|
|
596
|
+
nodeType.includes('TargetGroup');
|
|
597
|
+
// Skip constructs that are known to cause issues
|
|
598
|
+
const isProblematicConstruct = nodeType.includes('Certificate') ||
|
|
599
|
+
nodeType.includes('HostedZone') ||
|
|
600
|
+
nodeType.includes('CustomResource') ||
|
|
601
|
+
nodeType.includes('Provider') ||
|
|
602
|
+
nodeType.includes('Function') ||
|
|
603
|
+
nodeType.includes('Role') ||
|
|
604
|
+
nodeType.includes('Policy');
|
|
605
|
+
if (isTaggableConstruct && !isProblematicConstruct) {
|
|
606
|
+
Object.entries(this.tags).forEach(([key, value]) => {
|
|
607
|
+
try {
|
|
608
|
+
aws_cdk_lib_1.Tags.of(node).add(key, value);
|
|
609
|
+
}
|
|
610
|
+
catch (error) {
|
|
611
|
+
// Silently ignore tagging errors
|
|
612
|
+
}
|
|
613
|
+
});
|
|
614
|
+
}
|
|
455
615
|
}
|
|
456
616
|
}
|
|
457
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnNjb2RlLXNlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92c2NvZGUtc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBT3FCO0FBQ3JCLGlEQUFpRDtBQUNqRCwwREFBMEQ7QUFDMUQsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxpRUFBaUU7QUFDakUscUNBQTBDO0FBQzFDLDJDQUFtRDtBQUNuRCxxREFBa0Q7QUFDbEQseUNBQTZFO0FBQzdFLHNGQUFtRjtBQUNuRiwwRUFBc0U7QUFrR3RFOztHQUVHO0FBQ0gsSUFBWSxlQWVYO0FBZkQsV0FBWSxlQUFlO0lBQ3pCOztPQUVHO0lBQ0gseUNBQXNCLENBQUE7SUFFdEI7O09BRUc7SUFDSCx5Q0FBc0IsQ0FBQTtJQUV0Qjs7T0FFRztJQUNILCtDQUE0QixDQUFBO0FBQzlCLENBQUMsRUFmVyxlQUFlLCtCQUFmLGVBQWUsUUFlMUI7QUFFRDs7R0FFRztBQUNILElBQVkscUJBVVg7QUFWRCxXQUFZLHFCQUFxQjtJQUMvQjs7T0FFRztJQUNILG9DQUFXLENBQUE7SUFFWDs7T0FFRztJQUNILHdDQUFlLENBQUE7QUFDakIsQ0FBQyxFQVZXLHFCQUFxQixxQ0FBckIscUJBQXFCLFFBVWhDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxzQkFBUztJQVd6QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsV0FBVztRQUNYLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxVQUFVLElBQUksYUFBYSxDQUFDO1FBQ3RELE1BQU0sWUFBWSxHQUFHLEtBQUssRUFBRSxZQUFZLElBQUksY0FBYyxDQUFDO1FBQzNELE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxFQUFFLGtCQUFrQixJQUFJLEVBQUUsQ0FBQztRQUMzRCxNQUFNLFVBQVUsR0FBRyxLQUFLLEVBQUUs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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXNwZWN0cyxcbiAgQ2ZuT3V0cHV0LFxuICBEdXJhdGlvbixcbiAgSUFzcGVjdCxcbiAgU3RhY2ssXG4gIFRhZ3MsXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNmIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250JztcbmltcG9ydCAqIGFzIGNmbyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udC1vcmlnaW5zJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIHNlY3JldHNtYW5hZ2VyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlcic7XG5pbXBvcnQgeyBOYWdTdXBwcmVzc2lvbnMgfSBmcm9tICdjZGstbmFnJztcbmltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgSW5zdGFsbGVyIH0gZnJvbSAnLi9pbnN0YWxsZXIvaW5zdGFsbGVyJztcbmltcG9ydCB7IGdldEFtaVNTTVBhcmFtZXRlckZvckxpbnV4QXJjaGl0ZWN0dXJlQW5kRmxhdm9yIH0gZnJvbSAnLi9tYXBwaW5ncyc7XG5pbXBvcnQgeyBBd3NNYW5hZ2VkUHJlZml4TGlzdCB9IGZyb20gJy4vcHJlZml4bGlzdC1yZXRyaWV2ZXIvcHJlZml4bGlzdC1yZXRyaWV2ZXInO1xuaW1wb3J0IHsgU2VjcmV0UmV0cmlldmVyIH0gZnJvbSAnLi9zZWNyZXQtcmV0cmlldmVyL3NlY3JldC1yZXRyaWV2ZXInO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSBWU0NvZGVTZXJ2ZXIgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlNDb2RlU2VydmVyUHJvcHMge1xuICAvKipcbiAgICogVXNlck5hbWUgZm9yIFZTQ29kZSBTZXJ2ZXJcbiAgICpcbiAgICogQGRlZmF1bHQgLSBwYXJ0aWNpcGFudFxuICAgKi9cbiAgcmVhZG9ubHkgdnNjb2RlVXNlcj86IHN0cmluZztcblxuICAvKipcbiAgICogUGFzc3dvcmQgZm9yIFZTQ29kZSBTZXJ2ZXJcbiAgICpcbiAgICogQGRlZmF1bHQgLSBlbXB0eSBhbmQgd2lsbCB0aGVuIGJlIGdlbmVyYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgdnNjb2RlUGFzc3dvcmQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZTQ29kZSBTZXJ2ZXIgRUMyIGluc3RhbmNlIG5hbWVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBWU0NvZGVTZXJ2ZXJcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVlNDb2RlIFNlcnZlciBFQzIgaW5zdGFuY2Ugdm9sdW1lIHNpemUgaW4gR0JcbiAgICpcbiAgICogQGRlZmF1bHQgLSA0MFxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VWb2x1bWVTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBWU0NvZGUgU2VydmVyIEVDMiBpbnN0YW5jZSBjbGFzc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG03Z1xuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VDbGFzcz86IGVjMi5JbnN0YW5jZUNsYXNzO1xuXG4gIC8qKlxuICAgKiBWU0NvZGUgU2VydmVyIEVDMiBpbnN0YW5jZSBzaXplXG4gICAqXG4gICAqIEBkZWZhdWx0IC0geGxhcmdlXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZVNpemU/OiBlYzIuSW5zdGFuY2VTaXplO1xuXG4gIC8qKlxuICAgKiBWU0NvZGUgU2VydmVyIEVDMiBvcGVyYXRpbmcgc3lzdGVtXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVWJ1bnR1LTIyXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZU9wZXJhdGluZ1N5c3RlbT86IExpbnV4Rmxhdm9yVHlwZTtcblxuICAvKipcbiAgICogVlNDb2RlIFNlcnZlciBFQzIgY3B1IGFyY2hpdGVjdHVyZSBmb3IgdGhlIG9wZXJhdGluZyBzeXN0ZW1cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhcm1cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlQ3B1QXJjaGl0ZWN0dXJlPzogTGludXhBcmNoaXRlY3R1cmVUeXBlO1xuXG4gIC8qKlxuICAgKiBGb2xkZXIgdG8gb3BlbiBpbiBWUyBDb2RlIHNlcnZlclxuICAgKlxuICAgKiBAZGVmYXVsdCAtIC9Xb3Jrc2hvcFxuICAgKi9cbiAgcmVhZG9ubHkgaG9tZUZvbGRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogQmFzZSBwYXRoIGZvciB0aGUgYXBwbGljYXRpb24gdG8gYmUgYWRkZWQgdG8gTmdpbnggc2l0ZXMtYXZhaWxhYmxlIGxpc3RcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhcHBcbiAgICovXG4gIHJlYWRvbmx5IGRldlNlcnZlckJhc2VQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQb3J0IGZvciB0aGUgRGV2U2VydmVyXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gODA4MVxuICAgKi9cbiAgcmVhZG9ubHkgZGV2U2VydmVyUG9ydD86IG51bWJlcjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBpbnN0YW5jZSByb2xlIHBvbGljaWVzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gW11cbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxJbnN0YW5jZVJvbGVQb2xpY2llcz86IGlhbS5Qb2xpY3lTdGF0ZW1lbnRbXTtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCB0YWdzIHRvIGFkZCB0byB0aGUgaW5zdGFuY2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSB7fVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIFRoZSBmbGF2b3Igb2YgbGludXggeW91IHdhbnQgdG8gcnVuIHZzY29kZSBzZXJ2ZXIgb25cbiAqL1xuZXhwb3J0IGVudW0gTGludXhGbGF2b3JUeXBlIHtcbiAgLyoqXG4gICAqIFVidW50dSAyMlxuICAgKi9cbiAgVUJVTlRVXzIyID0gJ3VidW50dTIyJyxcblxuICAvKipcbiAgICogVWJ1bnR1IDI0XG4gICAqL1xuICBVQlVOVFVfMjQgPSAndWJ1bnR1MjQnLFxuXG4gIC8qKlxuICAgKiBBbWF6b24gTGludXggMjAyM1xuICAgKi9cbiAgQU1BWk9OX0xJTlVYXzIwMjMgPSAnYWwyMDIzJyxcbn1cblxuLyoqXG4gKiBUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBjcHUgeW91IHdhbnQgdG8gcnVuIHZzY29kZSBzZXJ2ZXIgb25cbiAqL1xuZXhwb3J0IGVudW0gTGludXhBcmNoaXRlY3R1cmVUeXBlIHtcbiAgLyoqXG4gICAqIEFSTSBhcmNoaXRlY3R1cmVcbiAgICovXG4gIEFSTSA9ICdhcm0nLFxuXG4gIC8qKlxuICAgKiBBTUQ2NCBhcmNoaXRlY3R1cmVcbiAgICovXG4gIEFNRDY0ID0gJ2FtZDY0Jyxcbn1cblxuLyoqXG4gKiBWU0NvZGVTZXJ2ZXIgLSBzcGluIGl0IHVwIGluIHVuZGVyIDEwIG1pbnV0ZXNcbiAqL1xuZXhwb3J0IGNsYXNzIFZTQ29kZVNlcnZlciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZG9tYWluIHRoZSBzZXJ2ZXIgaXMgcmVhY2hhYmxlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFzc3dvcmQgdG8gbG9naW4gdG8gdGhlIHNlcnZlclxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhc3N3b3JkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBWU0NvZGVTZXJ2ZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBkZWZhdWx0c1xuICAgIGNvbnN0IHZzQ29kZVVzZXIgPSBwcm9wcz8udnNjb2RlVXNlciA/PyAncGFydGljaXBhbnQnO1xuICAgIGNvbnN0IGluc3RhbmNlTmFtZSA9IHByb3BzPy5pbnN0YW5jZU5hbWUgPz8gJ1ZTQ29kZVNlcnZlcic7XG4gICAgY29uc3QgaW5zdGFuY2VWb2x1bWVTaXplID0gcHJvcHM/Lmluc3RhbmNlVm9sdW1lU2l6ZSA/PyA0MDtcbiAgICBjb25zdCBob21lRm9sZGVyID0gcHJvcHM/LmhvbWVGb2xkZXIgPz8gJy9Xb3Jrc2hvcCc7XG4gICAgY29uc3QgaW5zdGFuY2VDbGFzcyA9IHByb3BzPy5pbnN0YW5jZUNsYXNzID8/IGVjMi5JbnN0YW5jZUNsYXNzLk03RztcbiAgICBjb25zdCBpbnN0YW5jZVNpemUgPSBwcm9wcz8uaW5zdGFuY2VTaXplID8/IGVjMi5JbnN0YW5jZVNpemUuWExBUkdFO1xuICAgIGNvbnN0IGluc3RhbmNlVHlwZSA9IGVjMi5JbnN0YW5jZVR5cGUub2YoaW5zdGFuY2VDbGFzcywgaW5zdGFuY2VTaXplKTtcbiAgICBjb25zdCBpbnN0YW5jZU9wZXJhdGluZ1N5c3RlbSA9XG4gICAgICBwcm9wcz8uaW5zdGFuY2VPcGVyYXRpbmdTeXN0ZW0gPz8gTGludXhGbGF2b3JUeXBlLlVCVU5UVV8yMjtcbiAgICBjb25zdCBpbnN0YW5jZUNwdUFyY2hpdGVjdHVyZSA9XG4gICAgICBwcm9wcz8uaW5zdGFuY2VDcHVBcmNoaXRlY3R1cmUgPz8gTGludXhBcmNoaXRlY3R1cmVUeXBlLkFSTTtcbiAgICBjb25zdCBtYWNoaW5lSW1hZ2VGcm9tU3NtUGFyYW1ldGVyID1cbiAgICAgIGdldEFtaVNTTVBhcmFtZXRlckZvckxpbnV4QXJjaGl0ZWN0dXJlQW5kRmxhdm9yKFxuICAgICAgICBpbnN0YW5jZUNwdUFyY2hpdGVjdHVyZSxcbiAgICAgICAgaW5zdGFuY2VPcGVyYXRpbmdTeXN0ZW0sXG4gICAgICApO1xuICAgIGNvbnN0IGFkZGl0aW9uYWxJbnN0YW5jZVJvbGVQb2xpY2llcyA9XG4gICAgICBwcm9wcz8uYWRkaXRpb25hbEluc3RhbmNlUm9sZVBvbGljaWVzID8/IFtdO1xuICAgIGNvbnN0IGFkZGl0aW9uYWxUYWdzID0gcHJvcHM/LmFkZGl0aW9uYWxUYWdzID8/IHt9O1xuICAgIGNvbnN0IGRlZmF1bHRUYWdzID0geyBhcHA6ICd2c2NvZGUtc2VydmVyJyB9O1xuXG4gICAgY29uc3QgbWVyZ2VkVGFncyA9IHsgLi4uZGVmYXVsdFRhZ3MsIC4uLmFkZGl0aW9uYWxUYWdzIH07XG4gICAgQXNwZWN0cy5vZih0aGlzKS5hZGQobmV3IE5vZGVUYWdnZXIobWVyZ2VkVGFncykpO1xuXG4gICAgbGV0IHZzY29kZVBhc3N3b3JkID0gcHJvcHM/LnZzY29kZVBhc3N3b3JkID8/ICcnO1xuICAgIGlmICh2c2NvZGVQYXNzd29yZCA9PSAnJykge1xuICAgICAgLy8gQ3JlYXRlIGEgc2VjcmV0IHdoaWNoIGlzIHRoZW4gaW5qZWN0IGluIHRoZSBTU00gZG9jdW1lbnQgdG8gaW5zdGFsbCB2c2NvZGUgc2VydmVyXG4gICAgICBjb25zdCBzZWNyZXQgPSBuZXcgc2VjcmV0c21hbmFnZXIuU2VjcmV0KHRoaXMsICdwYXNzd29yZC1zZWNyZXQnLCB7XG4gICAgICAgIGdlbmVyYXRlU2VjcmV0U3RyaW5nOiB7XG4gICAgICAgICAgcGFzc3dvcmRMZW5ndGg6IDE2LFxuICAgICAgICAgIHNlY3JldFN0cmluZ1RlbXBsYXRlOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICB1c2VybmFtZTogdnNDb2RlVXNlcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBleGNsdWRlUHVuY3R1YXRpb246IHRydWUsXG4gICAgICAgICAgaW5jbHVkZVNwYWNlOiBmYWxzZSxcbiAgICAgICAgICBnZW5lcmF0ZVN0cmluZ0tleTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICAgICAgICBbc2VjcmV0XSxcbiAgICAgICAgW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLVNNRzQnLFxuICAgICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgICAnRm9yIHRoaXMgdG1wIHZjIGNvZGUgc2VydmVyIHdlIGRvIG5vdCBuZWVkIHBhc3N3b3JkIHJvdGF0aW9uJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB0cnVlLFxuICAgICAgKTtcblxuICAgICAgLy8gSGF2ZSBhIGN1c3RvbSByZXNvdXJjZSB0byBwYXNzIHRoZSBzZWNyZXQgZGF0YSBvbj8gLT4geWVzIGJlY2F1c2Ugbm90IHJlc29sdmFibGUgb24gY29tcGlsZSB0aW1lXG4gICAgICBjb25zdCBzZWNyZXRSZXRyaWV2ZXIgPSBTZWNyZXRSZXRyaWV2ZXIubmV3KHtcbiAgICAgICAgc2VjcmV0QXJuOiBzZWNyZXQuc2VjcmV0QXJuLFxuICAgICAgfSkuX2JpbmQodGhpcyk7XG5cbiAgICAgIHZzY29kZVBhc3N3b3JkID0gc2VjcmV0UmV0cmlldmVyLnNlY3JldFBhc3N3b3JkUGxhaW50ZXh0O1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBkZWZhdWx0IHZwY1xuICAgIGNvbnN0IHZwYyA9IG5ldyBlYzIuVnBjKHRoaXMsICd2cGMnLCB7XG4gICAgICBtYXhBenM6IDIsXG4gICAgICBjcmVhdGVJbnRlcm5ldEdhdGV3YXk6IHRydWUsXG4gICAgICBzdWJuZXRDb25maWd1cmF0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncHVibGljJyxcbiAgICAgICAgICBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZW5hYmxlRG5zSG9zdG5hbWVzOiB0cnVlLFxuICAgICAgZW5hYmxlRG5zU3VwcG9ydDogdHJ1ZSxcbiAgICB9KTtcbiAgICBOYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICBbdnBjXSxcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLVZQQzcnLFxuICAgICAgICAgIHJlYXNvbjogJ0ZvciB0aGlzIHRtcCB2cGMgd2UgZG8gbm90IG5lZWQgZmxvdyBsb2dzJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB0cnVlLFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgYSBTZWNHcm91cCBhc3NvY2lhdGVkIHdpdGhlIHRoZSBDRiBkaXN0IHBMaXN0XG4gICAgY29uc3Qgc2VjR3JvdXAgPSBuZXcgZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgJ2NmLXRvLXNlcnZlci1zZycsIHtcbiAgICAgIHZwYyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnU0cgZm9yIFZTQ29kZVNlcnZlciAtIG9ubHkgYWxsb3cgQ2xvdWRGcm9udCBpbmdyZXNzJyxcbiAgICAgIHNlY3VyaXR5R3JvdXBOYW1lOiAnY2xvdWRmcm9udC10by12c2NvZGUtc2VydmVyJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGF3c01hbmFnZWRQcmVmaXhMaXN0ID0gbmV3IEF3c01hbmFnZWRQcmVmaXhMaXN0KFxuICAgICAgdGhpcyxcbiAgICAgICdjZi1wcmVmaXhsaXN0SWQnLFxuICAgICAge1xuICAgICAgICBuYW1lOiAnY29tLmFtYXpvbmF3cy5nbG9iYWwuY2xvdWRmcm9udC5vcmlnaW4tZmFjaW5nJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBOYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICBbYXdzTWFuYWdlZFByZWZpeExpc3RdLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsXG4gICAgICAgICAgcmVhc29uOiAnRm9yIHRoaXMgcHJvdmlkZXIgd2lsZGNhcmRzIGFyZSBmaW5lJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB0cnVlLFxuICAgICk7XG5cbiAgICBzZWNHcm91cC5hZGRJbmdyZXNzUnVsZShcbiAgICAgIGVjMi5QZWVyLnByZWZpeExpc3QoYXdzTWFuYWdlZFByZWZpeExpc3QucHJlZml4TGlzdC5wcmVmaXhMaXN0SWQpLFxuICAgICAgZWMyLlBvcnQudGNwKDgwKSxcbiAgICAgICdBbGxvdyBIVFRQIGZyb20gY29tLmFtYXpvbmF3cy5nbG9iYWwuY2xvdWRmcm9udC5vcmlnaW4tZmFjaW5nJyxcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIGFuIEVDMiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNlYyBncm91cCArIGluc3RhbmNlIHByb2ZpbGUgYW5kIHJvbGVcbiAgICBjb25zdCBpbnN0YW5jZVJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgJ3NlcnZlci1pbnN0YW5jZS1yb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLkNvbXBvc2l0ZVByaW5jaXBhbChcbiAgICAgICAgbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdlYzIuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ3NzbS5hbWF6b25hd3MuY29tJyksXG4gICAgICApLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgVlNDb2RlSW5zdGFuY2VJbmxpbmVQb2xpY3k6IG5ldyBpYW0uUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgc2lkOiAnU3RzQWNjZXNzJyxcbiAgICAgICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgJ3N0czpBc3N1bWVSb2xlJyxcbiAgICAgICAgICAgICAgICAnaWFtOkFkZFJvbGVUb0luc3RhbmNlUHJvZmlsZScsXG4gICAgICAgICAgICAgICAgJ2lhbTpBdHRhY2hSb2xlUG9saWN5JyxcbiAgICAgICAgICAgICAgICAnaWFtOkNyZWF0ZVJvbGUnLFxuICAgICAgICAgICAgICAgICdpYW06Q3JlYXRlU2VydmljZUxpbmtlZFJvbGUnLFxuICAgICAgICAgICAgICAgICdpYW06RGVsZXRlUm9sZScsXG4gICAgICAgICAgICAgICAgJ2lhbTpEZWxldGVSb2xlUGVybWlzc2lvbnNCb3VuZGFyeScsXG4gICAgICAgICAgICAgICAgJ2lhbTpEZWxldGVSb2xlUG9saWN5JyxcbiAgICAgICAgICAgICAgICAnaWFtOkRlbGV0ZVNlcnZpY2VMaW5rZWRSb2xlJyxcbiAgICAgICAgICAgICAgICAnaWFtOkRldGFjaFJvbGVQb2xpY3knLFxuICAgICAgICAgICAgICAgICdpYW06R2V0Um9sZScsXG4gICAgICAgICAgICAgICAgJ2lhbTpHZXRSb2xlUG9saWN5JyxcbiAgICAgICAgICAgICAgICAnaWFtOkdldFNlcnZpY2VMaW5rZWRSb2xlRGVsZXRpb25TdGF0dXMnLFxuICAgICAgICAgICAgICAgICdpYW06TGlzdEF0dGFjaGVkUm9sZVBvbGljaWVzJyxcbiAgICAgICAgICAgICAgICAnaWFtOkxpc3RJbnN0YW5jZVByb2ZpbGVzRm9yUm9sZScsXG4gICAgICAgICAgICAgICAgJ2lhbTpMaXN0Um9sZVBvbGljaWVzJyxcbiAgICAgICAgICAgICAgICAnaWFtOkxpc3RSb2xlcycsXG4gICAgICAgICAgICAgICAgJ2lhbTpMaXN0Um9sZVRhZ3MnLFxuICAgICAgICAgICAgICAgICdpYW06UHV0Um9sZVBlcm1pc3Npb25zQm91bmRhcnknLFxuICAgICAgICAgICAgICAgICdpYW06UHV0Um9sZVBvbGljeScsXG4gICAgICAgICAgICAgICAgJ2lhbTpSZW1vdmVSb2xlRnJvbUluc3RhbmNlUHJvZmlsZScsXG4gICAgICAgICAgICAgICAgJ2lhbTpUYWdSb2xlJyxcbiAgICAgICAgICAgICAgICAnaWFtOlVudGFnUm9sZScsXG4gICAgICAgICAgICAgICAgJ2lhbTpVcGRhdGVBc3N1bWVSb2xlUG9saWN5JyxcbiAgICAgICAgICAgICAgICAnaWFtOlVwZGF0ZVJvbGUnLFxuICAgICAgICAgICAgICAgICdpYW06VXBkYXRlUm9sZURlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6aWFtOjoke1N0YWNrLm9mKHRoaXMpLmFjY291bnR9OnJvbGUvY2RrLSpgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgIGFjdGlvbnM6IFsnaWFtOlBhc3NSb2xlJ10sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOmlhbTo6JHtTdGFjay5vZih0aGlzKS5hY2NvdW50fTpyb2xlL2Nkay0qYF0sXG4gICAgICAgICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBTdHJpbmdMaWtlOiB7XG4gICAgICAgICAgICAgICAgICAnaWFtOlBhc3NlZFRvU2VydmljZSc6ICdjbG91ZGZvcm1hdGlvbi5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgYWN0aW9uczogWydjbG91ZGZvcm1hdGlvbjoqJ10sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOmNsb3VkZm9ybWF0aW9uOio6JHtTdGFjay5vZih0aGlzKS5hY2NvdW50fTpzdGFjay9DREtUb29sa2l0LypgLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICdjbG91ZGZvcm1hdGlvbjpDcmVhdGVDaGFuZ2VTZXQnLFxuICAgICAgICAgICAgICAgICdjbG91ZGZvcm1hdGlvbjpFeGVjdXRlQ2hhbmdlU2V0JyxcbiAgICAgICAgICAgICAgICAnY2xvdWRmb3JtYXRpb246RGVsZXRlQ2hhbmdlU2V0JyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBzaWQ6ICdTM0FjY2VzcycsXG4gICAgICAgICAgICAgIGFjdGlvbnM6IFsnczM6KiddLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIHNpZDogJ0VDUkFjY2VzcycsXG4gICAgICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICdlY3I6U2V0UmVwb3NpdG9yeVBvbGljeScsXG4gICAgICAgICAgICAgICAgJ2VjcjpHZXRMaWZlY3ljbGVQb2xpY3knLFxuICAgICAgICAgICAgICAgICdlY3I6UHV0TGlmZWN5Y2xlUG9saWN5JyxcbiAgICAgICAgICAgICAgICAnZWNyOlB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uJyxcbiAgICAgICAgICAgICAgICAnZWNyOkRlc2NyaWJlUmVwb3NpdG9yaWVzJyxcbiAgICAgICAgICAgICAgICAnZWNyOkNyZWF0ZVJlcG9zaXRvcnknLFxuICAgICAgICAgICAgICAgICdlY3I6RGVsZXRlUmVwb3NpdG9yeScsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOmVjcjoqOiR7U3RhY2sub2YodGhpcykuYWNjb3VudH06cmVwb3NpdG9yeS9jZGstKmAsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgJ3NzbTpHZXRQYXJhbWV0ZXIqJyxcbiAgICAgICAgICAgICAgICAnc3NtOlB1dFBhcmFtZXRlcionLFxuICAgICAgICAgICAgICAgICdzc206RGVsZXRlUGFyYW1ldGVyKicsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToqOiR7U3RhY2sub2YodGhpcykuYWNjb3VudH06cGFyYW1ldGVyL2Nkay1ib290c3RyYXAvKmAsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgJ2VjMjpEZXNjcmliZUluc3RhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2VjMjpNb2RpZnlWb2x1bWUnLFxuICAgICAgICAgICAgICAgICdlYzI6RGVzY3JpYmVWb2x1bWVzTW9kaWZpY2F0aW9ucyonLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICdjb2RlcGlwZWxpbmU6RW5hYmxlU3RhZ2VUcmFuc2l0aW9uJyxcbiAgICAgICAgICAgICAgICAnY29kZXBpcGVsaW5lOkRpc2FibGVTdGFnZVRyYW5zaXRpb24nLFxuICAgICAgICAgICAgICAgICdjb2RlcGlwZWxpbmU6U3RhcnRQaXBlbGluZUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgJ2NvZGVwaXBlbGluZTpTdG9wUGlwZWxpbmVFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICdjb2RlcGlwZWxpbmU6VXBkYXRlUGlwZWxpbmUnLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgICAgICBgYXJuOmF3czpjb2RlcGlwZWxpbmU6Kjoke1N0YWNrLm9mKHRoaXMpLmFjY291bnR9OiovKmAsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbJ2ttczpEZWNyeXB0J10sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOmttczoqOiR7U3RhY2sub2YodGhpcykuYWNjb3VudH06a2V5LypgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4uYWRkaXRpb25hbEluc3RhbmNlUm9sZVBvbGljaWVzLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgJ0FtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmUnLFxuICAgICAgICApLFxuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgJ0Nsb3VkV2F0Y2hBZ2VudFNlcnZlclBvbGljeScsXG4gICAgICAgICksXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnQW1hem9uUURldmVsb3BlckFjY2VzcycpLFxuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ1JlYWRPbmx5QWNjZXNzJyksXG4gICAgICBdLFxuICAgIH0pO1xuICAgIE5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgIFtpbnN0YW5jZVJvbGVdLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNCcsXG4gICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgJ0ZvciB0aGlzIHRtcCByb2xlIHdlIGRvIG5vdCBuZWVkIHRvIHJlc3RyaWN0IG1hbmFnZWQgcG9saWNpZXMnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsXG4gICAgICAgICAgcmVhc29uOiAnRm9yIHRoaXMgdG1wIHJvbGUgdGhlIHdpbGRjYXJkcyBhcmUgZmluZScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuXG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgZWMyLkluc3RhbmNlKHRoaXMsICdzZXJ2ZXItaW5zdGFuY2UnLCB7XG4gICAgICB2cGMsXG4gICAgICBpbnN0YW5jZU5hbWUsXG4gICAgICBpbnN0YW5jZVR5cGUsXG4gICAgICBtYWNoaW5lSW1hZ2U6IGVjMi5NYWNoaW5lSW1hZ2UuZnJvbVNzbVBhcmFtZXRlcihcbiAgICAgICAgbWFjaGluZUltYWdlRnJvbVNzbVBhcmFtZXRlcixcbiAgICAgICAge1xuICAgICAgICAgIG9zOiBlYzIuT3BlcmF0aW5nU3lzdGVtVHlwZS5MSU5VWCxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgICByZXF1aXJlSW1kc3YyOiB0cnVlLFxuICAgICAgdnBjU3VibmV0czoge1xuICAgICAgICBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMsXG4gICAgICB9LFxuICAgICAgYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzOiB0cnVlLFxuICAgICAgZGV0YWlsZWRNb25pdG9yaW5nOiB0cnVlLFxuICAgICAgYmxvY2tEZXZpY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBkZXZpY2VOYW1lOiAnL2Rldi9zZGExJyxcbiAgICAgICAgICB2b2x1bWU6IGVjMi5CbG9ja0RldmljZVZvbHVtZS5lYnMoaW5zdGFuY2VWb2x1bWVTaXplLCB7XG4gICAgICAgICAgICB2b2x1bWVUeXBlOiBlYzIuRWJzRGV2aWNlVm9sdW1lVHlwZS5HUDMsXG4gICAgICAgICAgICBlbmNyeXB0ZWQ6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVPblRlcm1pbmF0aW9uOiB0cnVlLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHJvbGU6IGluc3RhbmNlUm9sZSxcbiAgICAgIHNlY3VyaXR5R3JvdXA6IHNlY0dyb3VwLFxuICAgICAgdXNlckRhdGE6IGVjMi5Vc2VyRGF0YS5jdXN0b20oYFxuICAgICAgICAjY2xvdWQtY29uZmlnXG4gICAgICAgICAgaG9zdG5hbWU6ICR7aW5zdGFuY2VOYW1lfVxuICAgICAgICAgIHJ1bmNtZDpcbiAgICAgICAgICAgIC0gbWtkaXIgLXAgJHtob21lRm9sZGVyfSAmJiBjaG93biAtUiAke3ZzQ29kZVVzZXJ9OiR7dnNDb2RlVXNlcn0gJHtob21lRm9sZGVyfVxuICAgICAgYCksXG4gICAgfSk7XG4gICAgTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICAgICAgW2luc3RhbmNlXSxcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUVDMjknLFxuICAgICAgICAgIHJlYXNvbjogJ0ZvciB0aGlzIHRtcCBpbnN0YW5jZSB3ZSBkbyBub3QgbmVlZCBhbiBhc2cnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHRydWUsXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBhIENGIGRpc3RyaWJ1dGlvbiAoc3BlY2lhbCBpZCkgYW5kIHNwZWNpYWwgQ2FjaGVQb2xpY3kgdG8gaW5zdGFuY2VcbiAgICBjb25zdCBjZkNhY2hlUG9saWN5ID0gbmV3IGNmLkNhY2hlUG9saWN5KHRoaXMsICdjZi1jYWNoZS1wb2xpY3knLCB7XG4gICAgICBjYWNoZVBvbGljeU5hbWU6IGBjZi1jYWNoZS1wb2xpY3ktdnNjb2Rlc2VydmVyLSR7U3RhY2sub2YodGhpcykuc3RhY2tOYW1lfWAsXG4gICAgICBjb21tZW50OiAnQ2FjaGUgcG9saWN5IGZvciBWU0NvZGVTZXJ2ZXInLFxuICAgICAgbWluVHRsOiBEdXJhdGlvbi5zZWNvbmRzKDEpLFxuICAgICAgbWF4VHRsOiBEdXJhdGlvbi5zZWNvbmRzKDMxNTM2MDAwKSxcbiAgICAgIGRlZmF1bHRUdGw6IER1cmF0aW9uLnNlY29uZHMoODY0MDApLFxuICAgICAgY29va2llQmVoYXZpb3I6IGNmLkNhY2hlQ29va2llQmVoYXZpb3IuYWxsKCksXG4gICAgICBlbmFibGVBY2NlcHRFbmNvZGluZ0d6aXA6IGZhbHNlLFxuICAgICAgaGVhZGVyQmVoYXZpb3I6IHtcbiAgICAgICAgYmVoYXZpb3I6ICd3aGl0ZWxpc3QnLFxuICAgICAgICBoZWFkZXJzOiBbXG4gICAgICAgICAgJ0FjY2VwdC1DaGFyc2V0JyxcbiAgICAgICAgICAnQXV0aG9yaXphdGlvbicsXG4gICAgICAgICAgJ09yaWdpbicsXG4gICAgICAgICAgJ0FjY2VwdCcsXG4gICAgICAgICAgJ1JlZmVyZXInLFxuICAgICAgICAgICdIb3N0JyxcbiAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJyxcbiAgICAgICAgICAnQWNjZXB0LUVuY29kaW5nJyxcbiAgICAgICAgICAnQWNjZXB0LURhdGV0aW1lJyxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBxdWVyeVN0cmluZ0JlaGF2aW9yOiBjZi5DYWNoZVF1ZXJ5U3RyaW5nQmVoYXZpb3IuYWxsKCksXG4gICAgfSk7XG5cbiAgICBjb25zdCBvcmlnaW4gPSBuZXcgY2ZvLkh0dHBPcmlnaW4oaW5zdGFuY2UuaW5zdGFuY2VQdWJsaWNEbnNOYW1lLCB7XG4gICAgICBwcm90b2NvbFBvbGljeTogY2YuT3JpZ2luUHJvdG9jb2xQb2xpY3kuSFRUUF9PTkxZLFxuICAgICAgb3JpZ2luSWQ6IGBDbG91ZGZyb250LSR7U3RhY2sub2YodGhpcykuc3RhY2tOYW1lfS0ke1N0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZX1gLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGlzdHJpYnV0aW9uID0gbmV3IGNmLkRpc3RyaWJ1dGlvbih0aGlzLCAnY2YtZGlzdHJpYnV0aW9uJywge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIGh0dHBWZXJzaW9uOiBjZi5IdHRwVmVyc2lvbi5IVFRQMl9BTkRfMyxcbiAgICAgIC8vIE5PVEU6ICdEaXN0cmlidXRpb25zIHRoYXQgdXNlIHRoZSBkZWZhdWx0IENsb3VkRnJvbnQgdmlld2VyIGNlcnRpZmljYXRlIG9yIHVzZSAndmlwJyBmb3IgdGhlICdTc2xTdXBwb3J0TWV0aG9kJ1xuICAgICAgLy8gYXJlIG5vbi1jb21wbGlhbnQgd2l0aCB0aGlzIHJ1bGUsIGFzIHRoZSBtaW5pbXVtIHNlY3VyaXR5IHBvbGljeSBpcyBzZXQgdG8gVExTdjEgcmVnYXJkbGVzc1xuICAgICAgLy8gb2YgdGhlIHNwZWNpZmllZCAnTWluaW11bVByb3RvY29sVmVyc2lvbidcbiAgICAgIC8vIG1pbmltdW1Qcm90b2NvbFZlcnNpb246IGNmLlNlY3VyaXR5UG9saWN5UHJvdG9jb2wuVExTX1YxXzJfMjAyMSxcbiAgICAgIGNvbW1lbnQ6ICdEaXN0cmlidXRpb24gZm9yIFZTQ29kZVNlcnZlcicsXG4gICAgICBwcmljZUNsYXNzOiBjZi5QcmljZUNsYXNzLlBSSUNFX0NMQVNTX0FMTCxcbiAgICAgIGRlZmF1bHRCZWhhdmlvcjoge1xuICAgICAgICBhbGxvd2VkTWV0aG9kczogY2YuQWxsb3dlZE1ldGhvZHMuQUxMT1dfQUxMLFxuICAgICAgICBjYWNoZVBvbGljeTogY2ZDYWNoZVBvbGljeSxcbiAgICAgICAgb3JpZ2luUmVxdWVzdFBvbGljeToge1xuICAgICAgICAgIC8vIE1hbmFnZWQtQWxsVmlld2VyIC0gc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLW9yaWdpbi1yZXF1ZXN0LXBvbGljaWVzLmh0bWwjOn46dGV4dD1XaGVuJTIwdXNpbmclMjBBV1MsNDdlNCUyRGI5ODklMkQ1NDkyZWFmYTA3ZDNcbiAgICAgICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5SWQ6ICcyMTZhZGVmNi01YzdmLTQ3ZTQtYjk4OS01NDkyZWFmYTA3ZDMnLFxuICAgICAgICB9LFxuICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogY2YuVmlld2VyUHJvdG9jb2xQb2xpY3kuQUxMT1dfQUxMLFxuICAgICAgICBvcmlnaW4sXG4gICAgICB9LFxuICAgICAgYWRkaXRpb25hbEJlaGF2aW9yczoge1xuICAgICAgICAnL3Byb3h5LyonOiB7XG4gICAgICAgICAgYWxsb3dlZE1ldGhvZHM6IGNmLkFsbG93ZWRNZXRob2RzLkFMTE9XX0FMTCxcbiAgICAgICAgICBjb21wcmVzczogZmFsc2UsXG4gICAgICAgICAgLy8gc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWwjbWFuYWdlZC1jYWNoZS1wb2xpY3ktY2FjaGluZy1kaXNhYmxlZFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBjZi5DYWNoZVBvbGljeS5DQUNISU5HX0RJU0FCTEVELFxuICAgICAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3k6IHtcbiAgICAgICAgICAgIC8vIE1hbmFnZWQtQWxsVmlld2VyIC0gc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLW9yaWdpbi1yZXF1ZXN0LXBvbGljaWVzLmh0bWwjOn46dGV4dD1XaGVuJTIwdXNpbmclMjBBV1MsNDdlNCUyRGI5ODklMkQ1NDkyZWFmYTA3ZDNcbiAgICAgICAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3lJZDogJzIxNmFkZWY2LTVjN2YtNDdlNC1iOTg5LTU0OTJlYWZhMDdkMycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogY2YuVmlld2VyUHJvdG9jb2xQb2xpY3kuQUxMT1dfQUxMLFxuICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICAgICAgW2Rpc3RyaWJ1dGlvbl0sXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1DRlIxJyxcbiAgICAgICAgICByZWFzb246ICdGb3IgdGhpcyB0bXAgZGlzdHJpYnV0aW9uIHdlIGRvIG5vdCBuZWVkIGdlbyByZXN0cmljdGlvbnMnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtQ0ZSMicsXG4gICAgICAgICAgcmVhc29uOiAnRm9yIHRoaXMgdG1wIGRpc3RyaWJ1dGlvbiB3ZSBkbyBub3QgbmVlZCB3YWYgaW50ZWdyYXRpb24nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtQ0ZSMycsXG4gICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgJ0ZvciB0aGlzIHRtcCBkaXN0cmlidXRpb24gd2UgZG8gbm90IG5lZWQgYWNjZXNzIGxvZ2dpbmcgZW5hYmxlZCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1DRlI0JyxcbiAgICAgICAgICByZWFzb246XG4gICAgICAgICAgICAnRm9yIHRoaXMgdG1wIGRpc3RyaWJ1dGlvbiB3ZSBkbyBub3QgbmVlZCBsaW1pdCBTU0wgcHJvdG9jb2xzIGFzIHdlIHVzZSB0aGUgZGVmYXVsdCB2aWV3ZXIgY2VydCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1DRlI1JyxcbiAgICAgICAgICByZWFzb246XG4gICAgICAgICAgICAnRm9yIHRoaXMgdG1wIGRpc3RyaWJ1dGlvbiB3ZSBkbyBub3QgbmVlZCBsaW1pdCBTU0wgcHJvdG9jb2xzIGFzIHdlIHVzZSB0aGUgZGVmYXVsdCB2aWV3ZXIgY2VydCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuXG4gICAgLy8gVXNlIGEgY3VzdG9tIHJlc291cmNlIGxhbWJkYSB0byBydW4gdGhlIFNTTSBkb2N1bWVudCBvbiB0aGUgaW5zdGFuY2VcbiAgICBzd2l0Y2ggKGluc3RhbmNlT3BlcmF0aW5nU3lzdGVtKSB7XG4gICAgICBjYXNlIExpbnV4Rmxhdm9yVHlwZS5VQlVOVFVfMjI6XG4gICAgICBjYXNlIExpbnV4Rmxhdm9yVHlwZS5VQlVOVFVfMjQ6XG4gICAgICAgIEluc3RhbGxlci51YnVudHUoe1xuICAgICAgICAgIGluc3RhbmNlSWQ6IGluc3RhbmNlLmluc3RhbmNlSWQsXG4gICAgICAgICAgdnNDb2RlVXNlcjogdnNDb2RlVXNlcixcbiAgICAgICAgICB2c0NvZGVQYXNzd29yZDogdnNjb2RlUGFzc3dvcmQsXG4gICAgICAgICAgZGV2U2VydmVyQmFzZVBhdGg6IHByb3BzPy5kZXZTZXJ2ZXJCYXNlUGF0aCxcbiAgICAgICAgICBkZXZTZXJ2ZXJQb3J0OiBwcm9wcz8uZGV2U2VydmVyUG9ydCxcbiAgICAgICAgICBob21lRm9sZGVyOiBob21lRm9sZGVyLFxuICAgICAgICB9KS5fYmluZCh0aGlzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIExpbnV4Rmxhdm9yVHlwZS5BTUFaT05fTElOVVhfMjAyMzpcbiAgICAgICAgSW5zdGFsbGVyLmFtYXpvbkxpbnV4MjAyMyh7XG4gICAgICAgICAgaW5zdGFuY2VJZDogaW5zdGFuY2UuaW5zdGFuY2VJZCxcbiAgICAgICAgICB2c0NvZGVVc2VyOiB2c0NvZGVVc2VyLFxuICAgICAgICAgIHZzQ29kZVBhc3N3b3JkOiB2c2NvZGVQYXNzd29yZCxcbiAgICAgICAgICBkZXZTZXJ2ZXJCYXNlUGF0aDogcHJvcHM/LmRldlNlcnZlckJhc2VQYXRoLFxuICAgICAgICAgIGRldlNlcnZlclBvcnQ6IHByb3BzPy5kZXZTZXJ2ZXJQb3J0LFxuICAgICAgICAgIGhvbWVGb2xkZXI6IGhvbWVGb2xkZXIsXG4gICAgICAgIH0pLl9iaW5kKHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgTGludXggZmxhdm9yOiAke2luc3RhbmNlT3BlcmF0aW5nU3lzdGVtfWApO1xuICAgIH1cbiAgICAvLyBzbyB3ZSBwYXNzIHRoZSBvdXRlciBzY29wZSBvZiB0aGlzIGNvbnN0cnVjdCB0aHJvdWdoIHRoZSBpbnN0YWxsZXJcblxuICAgIC8vIE5PVEU6IG1heWJlIGhhdmUgYSBoZWFsaGNoZWNrIENGTiBjdXN0b20gcmVzb3VyY2UgdG8gc2VlIGlmIHRoZSB2c2NvZGUgc2VydmVyIGlzIGhlYWx0aHlcbiAgICAvLyBhdG0gdGhpcyBpcyBhY2hpZXZlZCBieSB0aGUgaW50ZWcgdGVzdHNcblxuICAgIC8vIE91dHB1dHNcbiAgICB0aGlzLmRvbWFpbk5hbWUgPSBgaHR0cHM6Ly8ke2Rpc3RyaWJ1dGlvbi5kb21haW5OYW1lfS8/Zm9sZGVyPSR7aG9tZUZvbGRlcn1gO1xuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgJ2RvbWFpbk5hbWUnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1RoZSBkb21haW4gbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uJyxcbiAgICAgIHZhbHVlOiB0aGlzLmRvbWFpbk5hbWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLnBhc3N3b3JkID0gdnNjb2RlUGFzc3dvcmQ7XG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCAncGFzc3dvcmQnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1RoZSBwYXNzd29yZCBmb3IgdGhlIFZTQ29kZSBzZXJ2ZXInLFxuICAgICAgdmFsdWU6IHZzY29kZVBhc3N3b3JkLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogVGFncyBhbGwgdGhlIHJlc291cmNlcyBpbiB0aGUgY29uc3RydWN0XG4gKi9cbmNsYXNzIE5vZGVUYWdnZXIgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSB0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIGNvbnN0cnVjdG9yKHRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLnRhZ3MgPSB0YWdzO1xuICB9XG5cbiAgdmlzaXQobm9kZTogSUNvbnN0cnVjdCkge1xuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMudGFncykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PlxuICAgICAgVGFncy5vZihub2RlKS5hZGQoa2V5LCB2YWx1ZSksXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
617
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnNjb2RlLXNlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92c2NvZGUtc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBT3FCO0FBQ3JCLDBEQUEwRDtBQUMxRCxpREFBaUQ7QUFDakQsMERBQTBEO0FBQzFELDJDQUEyQztBQUMzQywyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELGtFQUFrRTtBQUNsRSxpRUFBaUU7QUFDakUscUNBQTBDO0FBQzFDLDJDQUFtRDtBQUNuRCxxREFBa0Q7QUFDbEQseUNBQTZFO0FBQzdFLHNGQUFtRjtBQUNuRiwwRUFBc0U7QUF1SXRFOztHQUVHO0FBQ0gsSUFBWSxlQWVYO0FBZkQsV0FBWSxlQUFlO0lBQ3pCOztPQUVHO0lBQ0gseUNBQXNCLENBQUE7SUFFdEI7O09BRUc7SUFDSCx5Q0FBc0IsQ0FBQTtJQUV0Qjs7T0FFRztJQUNILCtDQUE0QixDQUFBO0FBQzlCLENBQUMsRUFmVyxlQUFlLCtCQUFmLGVBQWUsUUFlMUI7QUFFRDs7R0FFRztBQUNILElBQVkscUJBVVg7QUFWRCxXQUFZLHFCQUFxQjtJQUMvQjs7T0FFRztJQUNILG9DQUFXLENBQUE7SUFFWDs7T0FFRztJQUNILHdDQUFlLENBQUE7QUFDakIsQ0FBQyxFQVZXLHFCQUFxQixxQ0FBckIscUJBQXFCLFFBVWhDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxzQkFBUztJQVd6QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsV0FBVztRQUNYLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxVQUFVLElBQUksYUFBYSxDQUFDO1FBQ3RELE1BQU0sWUFBWSxHQUFHLEtBQUssRUFBRSxZQUFZLElBQUksY0FBYyxDQUFDO1FBQzNELE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxFQUFFLGtCQUFrQixJQUFJLEVB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QUN6QixRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTlCLElBQUksbUJBQW1CLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ25ELE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pELElBQUksQ0FBQztvQkFDSCxrQkFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO2dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7b0JBQ2YsaUNBQWlDO2dCQUNuQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXNwZWN0cyxcbiAgQ2ZuT3V0cHV0LFxuICBEdXJhdGlvbixcbiAgSUFzcGVjdCxcbiAgU3RhY2ssXG4gIFRhZ3MsXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGFjbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJztcbmltcG9ydCAqIGFzIGNmIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250JztcbmltcG9ydCAqIGFzIGNmbyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udC1vcmlnaW5zJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIHJvdXRlNTMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXJvdXRlNTMnO1xuaW1wb3J0ICogYXMgcm91dGU1M3RhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0cyc7XG5pbXBvcnQgKiBhcyBzZWNyZXRzbWFuYWdlciBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXInO1xuaW1wb3J0IHsgTmFnU3VwcHJlc3Npb25zIH0gZnJvbSAnY2RrLW5hZyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEluc3RhbGxlciB9IGZyb20gJy4vaW5zdGFsbGVyL2luc3RhbGxlcic7XG5pbXBvcnQgeyBnZXRBbWlTU01QYXJhbWV0ZXJGb3JMaW51eEFyY2hpdGVjdHVyZUFuZEZsYXZvciB9IGZyb20gJy4vbWFwcGluZ3MnO1xuaW1wb3J0IHsgQXdzTWFuYWdlZFByZWZpeExpc3QgfSBmcm9tICcuL3ByZWZpeGxpc3QtcmV0cmlldmVyL3ByZWZpeGxpc3QtcmV0cmlldmVyJztcbmltcG9ydCB7IFNlY3JldFJldHJpZXZlciB9IGZyb20gJy4vc2VjcmV0LXJldHJpZXZlci9zZWNyZXQtcmV0cmlldmVyJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB0aGUgVlNDb2RlU2VydmVyIGNvbnN0cnVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZTQ29kZVNlcnZlclByb3BzIHtcbiAgLyoqXG4gICAqIFVzZXJOYW1lIGZvciBWU0NvZGUgU2VydmVyXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcGFydGljaXBhbnRcbiAgICovXG4gIHJlYWRvbmx5IHZzY29kZVVzZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhc3N3b3JkIGZvciBWU0NvZGUgU2VydmVyXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZW1wdHkgYW5kIHdpbGwgdGhlbiBiZSBnZW5lcmF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHZzY29kZVBhc3N3b3JkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWU0NvZGUgU2VydmVyIEVDMiBpbnN0YW5jZSBuYW1lXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVlNDb2RlU2VydmVyXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZTQ29kZSBTZXJ2ZXIgRUMyIGluc3RhbmNlIHZvbHVtZSBzaXplIGluIEdCXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gNDBcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlVm9sdW1lU2l6ZT86IG51bWJlcjtcblxuICAvKipcbiAgICogVlNDb2RlIFNlcnZlciBFQzIgaW5zdGFuY2UgY2xhc3NcbiAgICpcbiAgICogQGRlZmF1bHQgLSBtN2dcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlQ2xhc3M/OiBlYzIuSW5zdGFuY2VDbGFzcztcblxuICAvKipcbiAgICogVlNDb2RlIFNlcnZlciBFQzIgaW5zdGFuY2Ugc2l6ZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHhsYXJnZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VTaXplPzogZWMyLkluc3RhbmNlU2l6ZTtcblxuICAvKipcbiAgICogVlNDb2RlIFNlcnZlciBFQzIgb3BlcmF0aW5nIHN5c3RlbVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFVidW50dS0yMlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VPcGVyYXRpbmdTeXN0ZW0/OiBMaW51eEZsYXZvclR5cGU7XG5cbiAgLyoqXG4gICAqIFZTQ29kZSBTZXJ2ZXIgRUMyIGNwdSBhcmNoaXRlY3R1cmUgZm9yIHRoZSBvcGVyYXRpbmcgc3lzdGVtXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXJtXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZUNwdUFyY2hpdGVjdHVyZT86IExpbnV4QXJjaGl0ZWN0dXJlVHlwZTtcblxuICAvKipcbiAgICogRm9sZGVyIHRvIG9wZW4gaW4gVlMgQ29kZSBzZXJ2ZXJcbiAgICpcbiAgICogQGRlZmF1bHQgLSAvV29ya3Nob3BcbiAgICovXG4gIHJlYWRvbmx5IGhvbWVGb2xkZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJhc2UgcGF0aCBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIGFkZGVkIHRvIE5naW54IHNpdGVzLWF2YWlsYWJsZSBsaXN0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXBwXG4gICAqL1xuICByZWFkb25seSBkZXZTZXJ2ZXJCYXNlUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogUG9ydCBmb3IgdGhlIERldlNlcnZlclxuICAgKlxuICAgKiBAZGVmYXVsdCAtIDgwODFcbiAgICovXG4gIHJlYWRvbmx5IGRldlNlcnZlclBvcnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgaW5zdGFuY2Ugcm9sZSBwb2xpY2llc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIFtdXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsSW5zdGFuY2VSb2xlUG9saWNpZXM/OiBpYW0uUG9saWN5U3RhdGVtZW50W107XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgdGFncyB0byBhZGQgdG8gdGhlIGluc3RhbmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0ge31cbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxUYWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQ3VzdG9tIGRvbWFpbiBuYW1lIGZvciB0aGUgVlMgQ29kZSBzZXJ2ZXJcbiAgICogV2hlbiBwcm92aWRlZCwgY3JlYXRlcyBhIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHdpdGggdGhpcyBkb21haW4gbmFtZVxuICAgKiBhbmQgc2V0cyB1cCBSb3V0ZTUzIEEgcmVjb3JkIHBvaW50aW5nIHRvIHRoZSBkaXN0cmlidXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgLSB1c2VzIENsb3VkRnJvbnQgZGVmYXVsdCBkb21haW5cbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJvdXRlNTMgaG9zdGVkIHpvbmUgSUQgZm9yIHRoZSBkb21haW5cbiAgICogUmVxdWlyZWQgd2hlbiB1c2luZyBhdXRvQ3JlYXRlQ2VydGlmaWNhdGVcbiAgICogSWYgbm90IHByb3ZpZGVkLCB3aWxsIGF0dGVtcHQgdG8gbG9va3VwIGhvc3RlZCB6b25lIGZyb20gZG9tYWluIG5hbWVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdXRvLWRpc2NvdmVyIGZyb20gZG9tYWluIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGhvc3RlZFpvbmVJZD86IHN0cmluZztcblxuICAvKipcbiAgICogQVJOIG9mIGV4aXN0aW5nIEFDTSBjZXJ0aWZpY2F0ZSBmb3IgdGhlIGRvbWFpblxuICAgKiBDZXJ0aWZpY2F0ZSBtdXN0IGJlIGluIHVzLWVhc3QtMSByZWdpb24gZm9yIENsb3VkRnJvbnRcbiAgICogQ2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBhdXRvQ3JlYXRlQ2VydGlmaWNhdGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdXRvLWNyZWF0ZSBjZXJ0aWZpY2F0ZSBpZiBhdXRvQ3JlYXRlQ2VydGlmaWNhdGUgaXMgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY2VydGlmaWNhdGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF1dG8tY3JlYXRlIEFDTSBjZXJ0aWZpY2F0ZSB3aXRoIEROUyB2YWxpZGF0aW9uIGluIHVzLWVhc3QtMSByZWdpb25cbiAgICogUmVxdWlyZXMgaG9zdGVkWm9uZUlkIHRvIGJlIHByb3ZpZGVkIGZvciBETlMgdmFsaWRhdGlvblxuICAgKiBDYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIGNlcnRpZmljYXRlQXJuXG4gICAqIENlcnRpZmljYXRlIHdpbGwgYXV0b21hdGljYWxseSBiZSBjcmVhdGVkIGluIHVzLWVhc3QtMSBhcyByZXF1aXJlZCBieSBDbG91ZEZyb250XG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBhdXRvQ3JlYXRlQ2VydGlmaWNhdGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBmbGF2b3Igb2YgbGludXggeW91IHdhbnQgdG8gcnVuIHZzY29kZSBzZXJ2ZXIgb25cbiAqL1xuZXhwb3J0IGVudW0gTGludXhGbGF2b3JUeXBlIHtcbiAgLyoqXG4gICAqIFVidW50dSAyMlxuICAgKi9cbiAgVUJVTlRVXzIyID0gJ3VidW50dTIyJyxcblxuICAvKipcbiAgICogVWJ1bnR1IDI0XG4gICAqL1xuICBVQlVOVFVfMjQgPSAndWJ1bnR1MjQnLFxuXG4gIC8qKlxuICAgKiBBbWF6b24gTGludXggMjAyM1xuICAgKi9cbiAgQU1BWk9OX0xJTlVYXzIwMjMgPSAnYWwyMDIzJyxcbn1cblxuLyoqXG4gKiBUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBjcHUgeW91IHdhbnQgdG8gcnVuIHZzY29kZSBzZXJ2ZXIgb25cbiAqL1xuZXhwb3J0IGVudW0gTGludXhBcmNoaXRlY3R1cmVUeXBlIHtcbiAgLyoqXG4gICAqIEFSTSBhcmNoaXRlY3R1cmVcbiAgICovXG4gIEFSTSA9ICdhcm0nLFxuXG4gIC8qKlxuICAgKiBBTUQ2NCBhcmNoaXRlY3R1cmVcbiAgICovXG4gIEFNRDY0ID0gJ2FtZDY0Jyxcbn1cblxuLyoqXG4gKiBWU0NvZGVTZXJ2ZXIgLSBzcGluIGl0IHVwIGluIHVuZGVyIDEwIG1pbnV0ZXNcbiAqL1xuZXhwb3J0IGNsYXNzIFZTQ29kZVNlcnZlciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZG9tYWluIHRoZSBzZXJ2ZXIgaXMgcmVhY2hhYmxlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFzc3dvcmQgdG8gbG9naW4gdG8gdGhlIHNlcnZlclxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhc3N3b3JkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBWU0NvZGVTZXJ2ZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBkZWZhdWx0c1xuICAgIGNvbnN0IHZzQ29kZVVzZXIgPSBwcm9wcz8udnNjb2RlVXNlciA/PyAncGFydGljaXBhbnQnO1xuICAgIGNvbnN0IGluc3RhbmNlTmFtZSA9IHByb3BzPy5pbnN0YW5jZU5hbWUgPz8gJ1ZTQ29kZVNlcnZlcic7XG4gICAgY29uc3QgaW5zdGFuY2VWb2x1bWVTaXplID0gcHJvcHM/Lmluc3RhbmNlVm9sdW1lU2l6ZSA/PyA0MDtcbiAgICBjb25zdCBob21lRm9sZGVyID0gcHJvcHM/LmhvbWVGb2xkZXIgPz8gJy9Xb3Jrc2hvcCc7XG4gICAgY29uc3QgaW5zdGFuY2VDbGFzcyA9IHByb3BzPy5pbnN0YW5jZUNsYXNzID8/IGVjMi5JbnN0YW5jZUNsYXNzLk03RztcbiAgICBjb25zdCBpbnN0YW5jZVNpemUgPSBwcm9wcz8uaW5zdGFuY2VTaXplID8/IGVjMi5JbnN0YW5jZVNpemUuWExBUkdFO1xuICAgIGNvbnN0IGluc3RhbmNlVHlwZSA9IGVjMi5JbnN0YW5jZVR5cGUub2YoaW5zdGFuY2VDbGFzcywgaW5zdGFuY2VTaXplKTtcbiAgICBjb25zdCBpbnN0YW5jZU9wZXJhdGluZ1N5c3RlbSA9XG4gICAgICBwcm9wcz8uaW5zdGFuY2VPcGVyYXRpbmdTeXN0ZW0gPz8gTGludXhGbGF2b3JUeXBlLlVCVU5UVV8yMjtcbiAgICBjb25zdCBpbnN0YW5jZUNwdUFyY2hpdGVjdHVyZSA9XG4gICAgICBwcm9wcz8uaW5zdGFuY2VDcHVBcmNoaXRlY3R1cmUgPz8gTGludXhBcmNoaXRlY3R1cmVUeXBlLkFSTTtcbiAgICBjb25zdCBtYWNoaW5lSW1hZ2VGcm9tU3NtUGFyYW1ldGVyID1cbiAgICAgIGdldEFtaVNTTVBhcmFtZXRlckZvckxpbnV4QXJjaGl0ZWN0dXJlQW5kRmxhdm9yKFxuICAgICAgICBpbnN0YW5jZUNwdUFyY2hpdGVjdHVyZSxcbiAgICAgICAgaW5zdGFuY2VPcGVyYXRpbmdTeXN0ZW0sXG4gICAgICApO1xuICAgIGNvbnN0IGFkZGl0aW9uYWxJbnN0YW5jZVJvbGVQb2xpY2llcyA9XG4gICAgICBwcm9wcz8uYWRkaXRpb25hbEluc3RhbmNlUm9sZVBvbGljaWVzID8/IFtdO1xuICAgIGNvbnN0IGFkZGl0aW9uYWxUYWdzID0gcHJvcHM/LmFkZGl0aW9uYWxUYWdzID8/IHt9O1xuICAgIGNvbnN0IGRlZmF1bHRUYWdzID0geyBhcHA6ICd2c2NvZGUtc2VydmVyJyB9O1xuXG4gICAgY29uc3QgbWVyZ2VkVGFncyA9IHsgLi4uZGVmYXVsdFRhZ3MsIC4uLmFkZGl0aW9uYWxUYWdzIH07XG4gICAgQXNwZWN0cy5vZih0aGlzKS5hZGQobmV3IE5vZGVUYWdnZXIobWVyZ2VkVGFncyksIHsgcHJpb3JpdHk6IDE1MCB9KTtcblxuICAgIC8vIFZhbGlkYXRlIGRvbWFpbiBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgZG9tYWluTmFtZSA9IHByb3BzPy5kb21haW5OYW1lO1xuICAgIGNvbnN0IGhvc3RlZFpvbmVJZCA9IHByb3BzPy5ob3N0ZWRab25lSWQ7XG4gICAgY29uc3QgY2VydGlmaWNhdGVBcm4gPSBwcm9wcz8uY2VydGlmaWNhdGVBcm47XG4gICAgY29uc3QgYXV0b0NyZWF0ZUNlcnRpZmljYXRlID0gcHJvcHM/LmF1dG9DcmVhdGVDZXJ0aWZpY2F0ZSA/PyBmYWxzZTtcblxuICAgIGlmIChkb21haW5OYW1lKSB7XG4gICAgICAvLyBWYWxpZGF0ZSB0aGF0IGVpdGhlciBjZXJ0aWZpY2F0ZUFybiBvciBhdXRvQ3JlYXRlQ2VydGlmaWNhdGUgaXMgcHJvdmlkZWRcbiAgICAgIGlmICghY2VydGlmaWNhdGVBcm4gJiYgIWF1dG9DcmVhdGVDZXJ0aWZpY2F0ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1doZW4gZG9tYWluTmFtZSBpcyBwcm92aWRlZCwgZWl0aGVyIGNlcnRpZmljYXRlQXJuIG9yIGF1dG9DcmVhdGVDZXJ0aWZpY2F0ZSBtdXN0IGJlIHNwZWNpZmllZCcsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRoYXQgYm90aCBjZXJ0aWZpY2F0ZUFybiBhbmQgYXV0b0NyZWF0ZUNlcnRpZmljYXRlIGFyZSBub3QgcHJvdmlkZWQgdG9nZXRoZXJcbiAgICAgIGlmIChjZXJ0aWZpY2F0ZUFybiAmJiBhdXRvQ3JlYXRlQ2VydGlmaWNhdGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdDYW5ub3Qgc3BlY2lmeSBib3RoIGNlcnRpZmljYXRlQXJuIGFuZCBhdXRvQ3JlYXRlQ2VydGlmaWNhdGUuIENob29zZSBvbmUuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgdGhhdCBob3N0ZWRab25lSWQgaXMgcHJvdmlkZWQgd2hlbiBhdXRvQ3JlYXRlQ2VydGlmaWNhdGUgaXMgdHJ1ZVxuICAgICAgaWYgKGF1dG9DcmVhdGVDZXJ0aWZpY2F0ZSAmJiAhaG9zdGVkWm9uZUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnaG9zdGVkWm9uZUlkIGlzIHJlcXVpcmVkIHdoZW4gYXV0b0NyZWF0ZUNlcnRpZmljYXRlIGlzIHRydWUnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWYWxpZGF0ZSB0aGF0IGRvbWFpbi1yZWxhdGVkIHByb3BzIGFyZSBub3QgcHJvdmlkZWQgd2l0aG91dCBkb21haW5OYW1lXG4gICAgICBpZiAoaG9zdGVkWm9uZUlkIHx8IGNlcnRpZmljYXRlQXJuIHx8IGF1dG9DcmVhdGVDZXJ0aWZpY2F0ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ2hvc3RlZFpvbmVJZCwgY2VydGlmaWNhdGVBcm4sIGFuZCBhdXRvQ3JlYXRlQ2VydGlmaWNhdGUgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGRvbWFpbk5hbWUnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB2c2NvZGVQYXNzd29yZCA9IHByb3BzPy52c2NvZGVQYXNzd29yZCA/PyAnJztcbiAgICBpZiAodnNjb2RlUGFzc3dvcmQgPT0gJycpIHtcbiAgICAgIC8vIENyZWF0ZSBhIHNlY3JldCB3aGljaCBpcyB0aGVuIGluamVjdCBpbiB0aGUgU1NNIGRvY3VtZW50IHRvIGluc3RhbGwgdnNjb2RlIHNlcnZlclxuICAgICAgY29uc3Qgc2VjcmV0ID0gbmV3IHNlY3JldHNtYW5hZ2VyLlNlY3JldCh0aGlzLCAncGFzc3dvcmQtc2VjcmV0Jywge1xuICAgICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICAgIHBhc3N3b3JkTGVuZ3RoOiAxNixcbiAgICAgICAgICBzZWNyZXRTdHJpbmdUZW1wbGF0ZTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgdXNlcm5hbWU6IHZzQ29kZVVzZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZXhjbHVkZVB1bmN0dWF0aW9uOiB0cnVlLFxuICAgICAgICAgIGluY2x1ZGVTcGFjZTogZmFsc2UsXG4gICAgICAgICAgZ2VuZXJhdGVTdHJpbmdLZXk6ICdwYXNzd29yZCcsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIE5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgICAgW3NlY3JldF0sXG4gICAgICAgIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1TTUc0JyxcbiAgICAgICAgICAgIHJlYXNvbjpcbiAgICAgICAgICAgICAgJ0ZvciB0aGlzIHRtcCB2YyBjb2RlIHNlcnZlciB3ZSBkbyBub3QgbmVlZCBwYXNzd29yZCByb3RhdGlvbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG5cbiAgICAgIC8vIEhhdmUgYSBjdXN0b20gcmVzb3VyY2UgdG8gcGFzcyB0aGUgc2VjcmV0IGRhdGEgb24/IC0+IHllcyBiZWNhdXNlIG5vdCByZXNvbHZhYmxlIG9uIGNvbXBpbGUgdGltZVxuICAgICAgY29uc3Qgc2VjcmV0UmV0cmlldmVyID0gU2VjcmV0UmV0cmlldmVyLm5ldyh7XG4gICAgICAgIHNlY3JldEFybjogc2VjcmV0LnNlY3JldEFybixcbiAgICAgIH0pLl9iaW5kKHRoaXMpO1xuXG4gICAgICB2c2NvZGVQYXNzd29yZCA9IHNlY3JldFJldHJpZXZlci5zZWNyZXRQYXNzd29yZFBsYWludGV4dDtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgU1NMIGNlcnRpZmljYXRlIGZvciBjdXN0b20gZG9tYWluXG4gICAgbGV0IGNlcnRpZmljYXRlOiBhY20uSUNlcnRpZmljYXRlIHwgdW5kZWZpbmVkO1xuICAgIGxldCBob3N0ZWRab25lOiByb3V0ZTUzLklIb3N0ZWRab25lIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKGRvbWFpbk5hbWUpIHtcbiAgICAgIC8vIEdldCBvciBjcmVhdGUgaG9zdGVkIHpvbmVcbiAgICAgIGlmIChob3N0ZWRab25lSWQpIHtcbiAgICAgICAgaG9zdGVkWm9uZSA9IHJvdXRlNTMuSG9zdGVkWm9uZS5mcm9tSG9zdGVkWm9uZUF0dHJpYnV0ZXMoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnaG9zdGVkLXpvbmUnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhvc3RlZFpvbmVJZDogaG9zdGVkWm9uZUlkLFxuICAgICAgICAgICAgem9uZU5hbWU6IGRvbWFpbk5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2t1cCBob3N0ZWQgem9uZSBieSBkb21haW4gbmFtZVxuICAgICAgICBob3N0ZWRab25lID0gcm91dGU1My5Ib3N0ZWRab25lLmZyb21Mb29rdXAodGhpcywgJ2hvc3RlZC16b25lJywge1xuICAgICAgICAgIGRvbWFpbk5hbWU6IGRvbWFpbk5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgY2VydGlmaWNhdGVcbiAgICAgIGlmIChjZXJ0aWZpY2F0ZUFybikge1xuICAgICAgICAvLyBVc2UgZXhpc3RpbmcgY2VydGlmaWNhdGVcbiAgICAgICAgY2VydGlmaWNhdGUgPSBhY20uQ2VydGlmaWNhdGUuZnJvbUNlcnRpZmljYXRlQXJuKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgJ2NlcnRpZmljYXRlJyxcbiAgICAgICAgICBjZXJ0aWZpY2F0ZUFybixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoYXV0b0NyZWF0ZUNlcnRpZmljYXRlKSB7XG4gICAgICAgIC8vIENyZWF0ZSBuZXcgY2VydGlmaWNhdGUgd2l0aCBETlMgdmFsaWRhdGlvblxuICAgICAgICAvLyBDbG91ZEZyb250IHJlcXVpcmVzIGNlcnRpZmljYXRlcyB0byBiZSBpbiB1cy1lYXN0LTEgcmVnaW9uXG4gICAgICAgIGlmICghaG9zdGVkWm9uZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdob3N0ZWRab25lIGlzIHJlcXVpcmVkIHdoZW4gYXV0b0NyZWF0ZUNlcnRpZmljYXRlIGlzIHRydWUnLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOb3RlOiBVc2luZyBEbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZSAoZGVwcmVjYXRlZCBidXQgc3RpbGwgZnVuY3Rpb25hbClcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgc2ltcGxlc3Qgd2F5IHRvIGNyZWF0ZSBjZXJ0aWZpY2F0ZXMgaW4gdXMtZWFzdC0xIGZyb20gYW55IHJlZ2lvblxuICAgICAgICAvLyBUaGUgbW9kZXJuIGFwcHJvYWNoIHJlcXVpcmVzIG11bHRpLXN0YWNrIGRlcGxveW1lbnQgd2l0aCBjcm9zc1JlZ2lvblJlZmVyZW5jZXNcbiAgICAgICAgLy8gd2hpY2ggaXMgbW9yZSBjb21wbGV4IGZvciBhIGNvbnN0cnVjdCBsaWJyYXJ5IHRvIGltcGxlbWVudCBjbGVhbmx5XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgLSBEbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZSBpcyBkZXByZWNhdGVkIGJ1dCBzdGlsbCB0aGUgYmVzdCBvcHRpb24gZm9yIGNyb3NzLXJlZ2lvbiBjZXJ0c1xuICAgICAgICBjZXJ0aWZpY2F0ZSA9IG5ldyBhY20uRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGUodGhpcywgJ2NlcnRpZmljYXRlJywge1xuICAgICAgICAgIGRvbWFpbk5hbWU6IGRvbWFpbk5hbWUsXG4gICAgICAgICAgaG9zdGVkWm9uZTogaG9zdGVkWm9uZSxcbiAgICAgICAgICByZWdpb246ICd1cy1lYXN0LTEnLFxuICAgICAgICAgIC8vIEV4cGxpY2l0bHkgZ3JhbnQgdGhlIHZhbGlkYXRpb24gTGFtYmRhIHBlcm1pc3Npb24gdG8gZGVzY3JpYmUgY2VydGlmaWNhdGVzXG4gICAgICAgICAgY3VzdG9tUmVzb3VyY2VSb2xlOiBuZXcgaWFtLlJvbGUodGhpcywgJ2NlcnRpZmljYXRlLXZhbGlkYXRpb24tcm9sZScsIHtcbiAgICAgICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZScpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgICAgICAgIENlcnRpZmljYXRlVmFsaWRhdGlvblBvbGljeTogbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgJ2FjbTpEZXNjcmliZUNlcnRpZmljYXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAnYWNtOlJlcXVlc3RDZXJ0aWZpY2F0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgJ2FjbTpEZWxldGVDZXJ0aWZpY2F0ZScsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICAgICdyb3V0ZTUzOkdldENoYW5nZScsXG4gICAgICAgICAgICAgICAgICAgICAgJ3JvdXRlNTM6Q2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzJyxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICAgICAgICAgIFtjZXJ0aWZpY2F0ZV0sXG4gICAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1BQ00xJyxcbiAgICAgICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgICAgICdDZXJ0aWZpY2F0ZSBpcyBjcmVhdGVkIGZvciBWUyBDb2RlIHNlcnZlciB3aXRoIHByb3BlciBkb21haW4gdmFsaWRhdGlvbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JyxcbiAgICAgICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgICAgICdDZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIExhbWJkYSBuZWVkcyB3aWxkY2FyZCBwZXJtaXNzaW9ucyBmb3IgQUNNIGFuZCBSb3V0ZTUzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENyZWF0ZSBkZWZhdWx0IHZwY1xuICAgIGNvbnN0IHZwYyA9IG5ldyBlYzIuVnBjKHRoaXMsICd2cGMnLCB7XG4gICAgICBtYXhBenM6IDIsXG4gICAgICBjcmVhdGVJbnRlcm5ldEdhdGV3YXk6IHRydWUsXG4gICAgICBzdWJuZXRDb25maWd1cmF0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncHVibGljJyxcbiAgICAgICAgICBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZW5hYmxlRG5zSG9zdG5hbWVzOiB0cnVlLFxuICAgICAgZW5hYmxlRG5zU3VwcG9ydDogdHJ1ZSxcbiAgICB9KTtcbiAgICBOYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICBbdnBjXSxcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLVZQQzcnLFxuICAgICAgICAgIHJlYXNvbjogJ0ZvciB0aGlzIHRtcCB2cGMgd2UgZG8gbm90IG5lZWQgZmxvdyBsb2dzJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB0cnVlLFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgYSBTZWNHcm91cCBhc3NvY2lhdGVkIHdpdGhlIHRoZSBDRiBkaXN0IHBMaXN0XG4gICAgY29uc3Qgc2VjR3JvdXAgPSBuZXcgZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgJ2NmLXRvLXNlcnZlci1zZycsIHtcbiAgICAgIHZwYyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnU0cgZm9yIFZTQ29kZVNlcnZlciAtIG9ubHkgYWxsb3cgQ2xvdWRGcm9udCBpbmdyZXNzJyxcbiAgICAgIHNlY3VyaXR5R3JvdXBOYW1lOiAnY2xvdWRmcm9udC10by12c2NvZGUtc2VydmVyJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGF3c01hbmFnZWRQcmVmaXhMaXN0ID0gbmV3IEF3c01hbmFnZWRQcmVmaXhMaXN0KFxuICAgICAgdGhpcyxcbiAgICAgICdjZi1wcmVmaXhsaXN0SWQnLFxuICAgICAge1xuICAgICAgICBuYW1lOiAnY29tLmFtYXpvbmF3cy5nbG9iYWwuY2xvdWRmcm9udC5vcmlnaW4tZmFjaW5nJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBOYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICBbYXdzTWFuYWdlZFByZWZpeExpc3RdLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsXG4gICAgICAgICAgcmVhc29uOiAnRm9yIHRoaXMgcHJvdmlkZXIgd2lsZGNhcmRzIGFyZSBmaW5lJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB0cnVlLFxuICAgICk7XG5cbiAgICBzZWNHcm91cC5hZGRJbmdyZXNzUnVsZShcbiAgICAgIGVjMi5QZWVyLnByZWZpeExpc3QoYXdzTWFuYWdlZFByZWZpeExpc3QucHJlZml4TGlzdC5wcmVmaXhMaXN0SWQpLFxuICAgICAgZWMyLlBvcnQudGNwKDgwKSxcbiAgICAgICdBbGxvdyBIVFRQIGZyb20gY29tLmFtYXpvbmF3cy5nbG9iYWwuY2xvdWRmcm9udC5vcmlnaW4tZmFjaW5nJyxcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIGFuIEVDMiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNlYyBncm91cCArIGluc3RhbmNlIHByb2ZpbGUgYW5kIHJvbGVcbiAgICBjb25zdCBpbnN0YW5jZVJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgJ3NlcnZlci1pbnN0YW5jZS1yb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLkNvbXBvc2l0ZVByaW5jaXBhbChcbiAgICAgICAgbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdlYzIuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ3NzbS5hbWF6b25hd3MuY29tJyksXG4gICAgICApLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgVlNDb2RlSW5zdGFuY2VJbmxpbmVQb2xpY3k6IG5ldyBpYW0uUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgc2lkOiAnU3RzQWNjZXNzJyxcbiAgICAgICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgJ3N0czpBc3N1bWVSb2xlJyxcbiAgICAgICAgICAgICAgICAnaWFtOkFkZFJvbGVUb0luc3RhbmNlUHJvZmlsZScsXG4gICAgICAgICAgICAgICAgJ2lhbTpBdHRhY2hSb2xlUG9saWN5JyxcbiAgICAgICAgICAgICAgICAnaWFtOkNyZWF0ZVJvbGUnLFxuICAgICAgICAgICAgICAgICdpYW06Q3JlYXRlU2VydmljZUxpbmtlZFJvbGUnLFxuICAgICAgICAgICAgICAgICdpYW06RGVsZXRlUm9sZScsXG4gICAgICAgICAgICAgICAgJ2lhbTpEZWxldGVSb2xlUGVybWlzc2lvbnNCb3VuZGFyeScsXG4gICAgICAgICAgICAgICAgJ2lhbTpEZWxldGVSb2xlUG9saWN5JyxcbiAgICAgICAgICAgICAgICAnaWFtOkRlbGV0ZVNlcnZpY2VMaW5rZWRSb2xlJyxcbiAgICAgICAgICAgICAgICAnaWFtOkRldGFjaFJvbGVQb2xpY3knLFxuICAgICAgICAgICAgICAgICdpYW06R2V0Um9sZScsXG4gICAgICAgICAgICAgICAgJ2lhbTpHZXRSb2xlUG9saWN5JyxcbiAgICAgICAgICAgICAgICAnaWFtOkdldFNlcnZpY2VMaW5rZWRSb2xlRGVsZXRpb25TdGF0dXMnLFxuICAgICAgICAgICAgICAgICdpYW06TGlzdEF0dGFjaGVkUm9sZVBvbGljaWVzJyxcbiAgICAgICAgICAgICAgICAnaWFtOkxpc3RJbnN0YW5jZVByb2ZpbGVzRm9yUm9sZScsXG4gICAgICAgICAgICAgICAgJ2lhbTpMaXN0Um9sZVBvbGljaWVzJyxcbiAgICAgICAgICAgICAgICAnaWFtOkxpc3RSb2xlcycsXG4gICAgICAgICAgICAgICAgJ2lhbTpMaXN0Um9sZVRhZ3MnLFxuICAgICAgICAgICAgICAgICdpYW06UHV0Um9sZVBlcm1pc3Npb25zQm91bmRhcnknLFxuICAgICAgICAgICAgICAgICdpYW06UHV0Um9sZVBvbGljeScsXG4gICAgICAgICAgICAgICAgJ2lhbTpSZW1vdmVSb2xlRnJvbUluc3RhbmNlUHJvZmlsZScsXG4gICAgICAgICAgICAgICAgJ2lhbTpUYWdSb2xlJyxcbiAgICAgICAgICAgICAgICAnaWFtOlVudGFnUm9sZScsXG4gICAgICAgICAgICAgICAgJ2lhbTpVcGRhdGVBc3N1bWVSb2xlUG9saWN5JyxcbiAgICAgICAgICAgICAgICAnaWFtOlVwZGF0ZVJvbGUnLFxuICAgICAgICAgICAgICAgICdpYW06VXBkYXRlUm9sZURlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6aWFtOjoke1N0YWNrLm9mKHRoaXMpLmFjY291bnR9OnJvbGUvY2RrLSpgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgIGFjdGlvbnM6IFsnaWFtOlBhc3NSb2xlJ10sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOmlhbTo6JHtTdGFjay5vZih0aGlzKS5hY2NvdW50fTpyb2xlL2Nkay0qYF0sXG4gICAgICAgICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBTdHJpbmdMaWtlOiB7XG4gICAgICAgICAgICAgICAgICAnaWFtOlBhc3NlZFRvU2VydmljZSc6ICdjbG91ZGZvcm1hdGlvbi5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgYWN0aW9uczogWydjbG91ZGZvcm1hdGlvbjoqJ10sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOmNsb3VkZm9ybWF0aW9uOio6JHtTdGFjay5vZih0aGlzKS5hY2NvdW50fTpzdGFjay9DREtUb29sa2l0LypgLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICdjbG91ZGZvcm1hdGlvbjpDcmVhdGVDaGFuZ2VTZXQnLFxuICAgICAgICAgICAgICAgICdjbG91ZGZvcm1hdGlvbjpFeGVjdXRlQ2hhbmdlU2V0JyxcbiAgICAgICAgICAgICAgICAnY2xvdWRmb3JtYXRpb246RGVsZXRlQ2hhbmdlU2V0JyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBzaWQ6ICdTM0FjY2VzcycsXG4gICAgICAgICAgICAgIGFjdGlvbnM6IFsnczM6KiddLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIHNpZDogJ0VDUkFjY2VzcycsXG4gICAgICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICdlY3I6U2V0UmVwb3NpdG9yeVBvbGljeScsXG4gICAgICAgICAgICAgICAgJ2VjcjpHZXRMaWZlY3ljbGVQb2xpY3knLFxuICAgICAgICAgICAgICAgICdlY3I6UHV0TGlmZWN5Y2xlUG9saWN5JyxcbiAgICAgICAgICAgICAgICAnZWNyOlB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uJyxcbiAgICAgICAgICAgICAgICAnZWNyOkRlc2NyaWJlUmVwb3NpdG9yaWVzJyxcbiAgICAgICAgICAgICAgICAnZWNyOkNyZWF0ZVJlcG9zaXRvcnknLFxuICAgICAgICAgICAgICAgICdlY3I6RGVsZXRlUmVwb3NpdG9yeScsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOmVjcjoqOiR7U3RhY2sub2YodGhpcykuYWNjb3VudH06cmVwb3NpdG9yeS9jZGstKmAsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgJ3NzbTpHZXRQYXJhbWV0ZXIqJyxcbiAgICAgICAgICAgICAgICAnc3NtOlB1dFBhcmFtZXRlcionLFxuICAgICAgICAgICAgICAgICdzc206RGVsZXRlUGFyYW1ldGVyKicsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToqOiR7U3RhY2sub2YodGhpcykuYWNjb3VudH06cGFyYW1ldGVyL2Nkay1ib290c3RyYXAvKmAsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgJ2VjMjpEZXNjcmliZUluc3RhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2VjMjpNb2RpZnlWb2x1bWUnLFxuICAgICAgICAgICAgICAgICdlYzI6RGVzY3JpYmVWb2x1bWVzTW9kaWZpY2F0aW9ucyonLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICdjb2RlcGlwZWxpbmU6RW5hYmxlU3RhZ2VUcmFuc2l0aW9uJyxcbiAgICAgICAgICAgICAgICAnY29kZXBpcGVsaW5lOkRpc2FibGVTdGFnZVRyYW5zaXRpb24nLFxuICAgICAgICAgICAgICAgICdjb2RlcGlwZWxpbmU6U3RhcnRQaXBlbGluZUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgJ2NvZGVwaXBlbGluZTpTdG9wUGlwZWxpbmVFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICdjb2RlcGlwZWxpbmU6VXBkYXRlUGlwZWxpbmUnLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgICAgICBgYXJuOmF3czpjb2RlcGlwZWxpbmU6Kjoke1N0YWNrLm9mKHRoaXMpLmFjY291bnR9OiovKmAsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbJ2ttczpEZWNyeXB0J10sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOmttczoqOiR7U3RhY2sub2YodGhpcykuYWNjb3VudH06a2V5LypgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4uYWRkaXRpb25hbEluc3RhbmNlUm9sZVBvbGljaWVzLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgJ0FtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmUnLFxuICAgICAgICApLFxuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgJ0Nsb3VkV2F0Y2hBZ2VudFNlcnZlclBvbGljeScsXG4gICAgICAgICksXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnQW1hem9uUURldmVsb3BlckFjY2VzcycpLFxuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ1JlYWRPbmx5QWNjZXNzJyksXG4gICAgICBdLFxuICAgIH0pO1xuICAgIE5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgIFtpbnN0YW5jZVJvbGVdLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNCcsXG4gICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgJ0ZvciB0aGlzIHRtcCByb2xlIHdlIGRvIG5vdCBuZWVkIHRvIHJlc3RyaWN0IG1hbmFnZWQgcG9saWNpZXMnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsXG4gICAgICAgICAgcmVhc29uOiAnRm9yIHRoaXMgdG1wIHJvbGUgdGhlIHdpbGRjYXJkcyBhcmUgZmluZScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuXG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgZWMyLkluc3RhbmNlKHRoaXMsICdzZXJ2ZXItaW5zdGFuY2UnLCB7XG4gICAgICB2cGMsXG4gICAgICBpbnN0YW5jZU5hbWUsXG4gICAgICBpbnN0YW5jZVR5cGUsXG4gICAgICBtYWNoaW5lSW1hZ2U6IGVjMi5NYWNoaW5lSW1hZ2UuZnJvbVNzbVBhcmFtZXRlcihcbiAgICAgICAgbWFjaGluZUltYWdlRnJvbVNzbVBhcmFtZXRlcixcbiAgICAgICAge1xuICAgICAgICAgIG9zOiBlYzIuT3BlcmF0aW5nU3lzdGVtVHlwZS5MSU5VWCxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgICByZXF1aXJlSW1kc3YyOiB0cnVlLFxuICAgICAgdnBjU3VibmV0czoge1xuICAgICAgICBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMsXG4gICAgICB9LFxuICAgICAgYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzOiB0cnVlLFxuICAgICAgZGV0YWlsZWRNb25pdG9yaW5nOiB0cnVlLFxuICAgICAgYmxvY2tEZXZpY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBkZXZpY2VOYW1lOiAnL2Rldi9zZGExJyxcbiAgICAgICAgICB2b2x1bWU6IGVjMi5CbG9ja0RldmljZVZvbHVtZS5lYnMoaW5zdGFuY2VWb2x1bWVTaXplLCB7XG4gICAgICAgICAgICB2b2x1bWVUeXBlOiBlYzIuRWJzRGV2aWNlVm9sdW1lVHlwZS5HUDMsXG4gICAgICAgICAgICBlbmNyeXB0ZWQ6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVPblRlcm1pbmF0aW9uOiB0cnVlLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHJvbGU6IGluc3RhbmNlUm9sZSxcbiAgICAgIHNlY3VyaXR5R3JvdXA6IHNlY0dyb3VwLFxuICAgICAgdXNlckRhdGE6IGVjMi5Vc2VyRGF0YS5jdXN0b20oYFxuICAgICAgICAjY2xvdWQtY29uZmlnXG4gICAgICAgICAgaG9zdG5hbWU6ICR7aW5zdGFuY2VOYW1lfVxuICAgICAgICAgIHJ1bmNtZDpcbiAgICAgICAgICAgIC0gbWtkaXIgLXAgJHtob21lRm9sZGVyfSAmJiBjaG93biAtUiAke3ZzQ29kZVVzZXJ9OiR7dnNDb2RlVXNlcn0gJHtob21lRm9sZGVyfVxuICAgICAgYCksXG4gICAgfSk7XG4gICAgTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICAgICAgW2luc3RhbmNlXSxcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUVDMjknLFxuICAgICAgICAgIHJlYXNvbjogJ0ZvciB0aGlzIHRtcCBpbnN0YW5jZSB3ZSBkbyBub3QgbmVlZCBhbiBhc2cnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHRydWUsXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBhIENGIGRpc3RyaWJ1dGlvbiAoc3BlY2lhbCBpZCkgYW5kIHNwZWNpYWwgQ2FjaGVQb2xpY3kgdG8gaW5zdGFuY2VcbiAgICBjb25zdCBjZkNhY2hlUG9saWN5ID0gbmV3IGNmLkNhY2hlUG9saWN5KHRoaXMsICdjZi1jYWNoZS1wb2xpY3knLCB7XG4gICAgICBjYWNoZVBvbGljeU5hbWU6IGBjZi1jYWNoZS1wb2xpY3ktdnNjb2Rlc2VydmVyLSR7U3RhY2sub2YodGhpcykuc3RhY2tOYW1lfWAsXG4gICAgICBjb21tZW50OiAnQ2FjaGUgcG9saWN5IGZvciBWU0NvZGVTZXJ2ZXInLFxuICAgICAgbWluVHRsOiBEdXJhdGlvbi5zZWNvbmRzKDEpLFxuICAgICAgbWF4VHRsOiBEdXJhdGlvbi5zZWNvbmRzKDMxNTM2MDAwKSxcbiAgICAgIGRlZmF1bHRUdGw6IER1cmF0aW9uLnNlY29uZHMoODY0MDApLFxuICAgICAgY29va2llQmVoYXZpb3I6IGNmLkNhY2hlQ29va2llQmVoYXZpb3IuYWxsKCksXG4gICAgICBlbmFibGVBY2NlcHRFbmNvZGluZ0d6aXA6IGZhbHNlLFxuICAgICAgaGVhZGVyQmVoYXZpb3I6IHtcbiAgICAgICAgYmVoYXZpb3I6ICd3aGl0ZWxpc3QnLFxuICAgICAgICBoZWFkZXJzOiBbXG4gICAgICAgICAgJ0FjY2VwdC1DaGFyc2V0JyxcbiAgICAgICAgICAnQXV0aG9yaXphdGlvbicsXG4gICAgICAgICAgJ09yaWdpbicsXG4gICAgICAgICAgJ0FjY2VwdCcsXG4gICAgICAgICAgJ1JlZmVyZXInLFxuICAgICAgICAgICdIb3N0JyxcbiAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJyxcbiAgICAgICAgICAnQWNjZXB0LUVuY29kaW5nJyxcbiAgICAgICAgICAnQWNjZXB0LURhdGV0aW1lJyxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBxdWVyeVN0cmluZ0JlaGF2aW9yOiBjZi5DYWNoZVF1ZXJ5U3RyaW5nQmVoYXZpb3IuYWxsKCksXG4gICAgfSk7XG5cbiAgICBjb25zdCBvcmlnaW4gPSBuZXcgY2ZvLkh0dHBPcmlnaW4oaW5zdGFuY2UuaW5zdGFuY2VQdWJsaWNEbnNOYW1lLCB7XG4gICAgICBwcm90b2NvbFBvbGljeTogY2YuT3JpZ2luUHJvdG9jb2xQb2xpY3kuSFRUUF9PTkxZLFxuICAgICAgb3JpZ2luSWQ6IGBDbG91ZGZyb250LSR7U3RhY2sub2YodGhpcykuc3RhY2tOYW1lfS0ke1N0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZX1gLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGlzdHJpYnV0aW9uID0gbmV3IGNmLkRpc3RyaWJ1dGlvbih0aGlzLCAnY2YtZGlzdHJpYnV0aW9uJywge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIGh0dHBWZXJzaW9uOiBjZi5IdHRwVmVyc2lvbi5IVFRQMl9BTkRfMyxcbiAgICAgIC8vIE5PVEU6ICdEaXN0cmlidXRpb25zIHRoYXQgdXNlIHRoZSBkZWZhdWx0IENsb3VkRnJvbnQgdmlld2VyIGNlcnRpZmljYXRlIG9yIHVzZSAndmlwJyBmb3IgdGhlICdTc2xTdXBwb3J0TWV0aG9kJ1xuICAgICAgLy8gYXJlIG5vbi1jb21wbGlhbnQgd2l0aCB0aGlzIHJ1bGUsIGFzIHRoZSBtaW5pbXVtIHNlY3VyaXR5IHBvbGljeSBpcyBzZXQgdG8gVExTdjEgcmVnYXJkbGVzc1xuICAgICAgLy8gb2YgdGhlIHNwZWNpZmllZCAnTWluaW11bVByb3RvY29sVmVyc2lvbidcbiAgICAgIC8vIG1pbmltdW1Qcm90b2NvbFZlcnNpb246IGNmLlNlY3VyaXR5UG9saWN5UHJvdG9jb2wuVExTX1YxXzJfMjAyMSxcbiAgICAgIGNvbW1lbnQ6ICdEaXN0cmlidXRpb24gZm9yIFZTQ29kZVNlcnZlcicsXG4gICAgICBwcmljZUNsYXNzOiBjZi5QcmljZUNsYXNzLlBSSUNFX0NMQVNTX0FMTCxcbiAgICAgIC8vIEN1c3RvbSBkb21haW4gY29uZmlndXJhdGlvblxuICAgICAgLi4uKGRvbWFpbk5hbWUgJiYgY2VydGlmaWNhdGVcbiAgICAgICAgPyB7XG4gICAgICAgICAgZG9tYWluTmFtZXM6IFtkb21haW5OYW1lXSxcbiAgICAgICAgICBjZXJ0aWZpY2F0ZTogY2VydGlmaWNhdGUsXG4gICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgICBkZWZhdWx0QmVoYXZpb3I6IHtcbiAgICAgICAgYWxsb3dlZE1ldGhvZHM6IGNmLkFsbG93ZWRNZXRob2RzLkFMTE9XX0FMTCxcbiAgICAgICAgY2FjaGVQb2xpY3k6IGNmQ2FjaGVQb2xpY3ksXG4gICAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3k6IHtcbiAgICAgICAgICAvLyBNYW5hZ2VkLUFsbFZpZXdlciAtIHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1vcmlnaW4tcmVxdWVzdC1wb2xpY2llcy5odG1sIzp+OnRleHQ9V2hlbiUyMHVzaW5nJTIwQVdTLDQ3ZTQlMkRiOTg5JTJENTQ5MmVhZmEwN2QzXG4gICAgICAgICAgb3JpZ2luUmVxdWVzdFBvbGljeUlkOiAnMjE2YWRlZjYtNWM3Zi00N2U0LWI5ODktNTQ5MmVhZmEwN2QzJyxcbiAgICAgICAgfSxcbiAgICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IGNmLlZpZXdlclByb3RvY29sUG9saWN5LkFMTE9XX0FMTCxcbiAgICAgICAgb3JpZ2luLFxuICAgICAgfSxcbiAgICAgIGFkZGl0aW9uYWxCZWhhdmlvcnM6IHtcbiAgICAgICAgJy9wcm94eS8qJzoge1xuICAgICAgICAgIGFsbG93ZWRNZXRob2RzOiBjZi5BbGxvd2VkTWV0aG9kcy5BTExPV19BTEwsXG4gICAgICAgICAgY29tcHJlc3M6IGZhbHNlLFxuICAgICAgICAgIC8vIHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1jYWNoZS1wb2xpY2llcy5odG1sI21hbmFnZWQtY2FjaGUtcG9saWN5LWNhY2hpbmctZGlzYWJsZWRcbiAgICAgICAgICBjYWNoZVBvbGljeTogY2YuQ2FjaGVQb2xpY3kuQ0FDSElOR19ESVNBQkxFRCxcbiAgICAgICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5OiB7XG4gICAgICAgICAgICAvLyBNYW5hZ2VkLUFsbFZpZXdlciAtIHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1vcmlnaW4tcmVxdWVzdC1wb2xpY2llcy5odG1sIzp+OnRleHQ9V2hlbiUyMHVzaW5nJTIwQVdTLDQ3ZTQlMkRiOTg5JTJENTQ5MmVhZmEwN2QzXG4gICAgICAgICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5SWQ6ICcyMTZhZGVmNi01YzdmLTQ3ZTQtYjk4OS01NDkyZWFmYTA3ZDMnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IGNmLlZpZXdlclByb3RvY29sUG9saWN5LkFMTE9XX0FMTCxcbiAgICAgICAgICBvcmlnaW4sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIE5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgIFtkaXN0cmlidXRpb25dLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtQ0ZSMScsXG4gICAgICAgICAgcmVhc29uOiAnRm9yIHRoaXMgdG1wIGRpc3RyaWJ1dGlvbiB3ZSBkbyBub3QgbmVlZCBnZW8gcmVzdHJpY3Rpb25zJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUNGUjInLFxuICAgICAgICAgIHJlYXNvbjogJ0ZvciB0aGlzIHRtcCBkaXN0cmlidXRpb24gd2UgZG8gbm90IG5lZWQgd2FmIGludGVncmF0aW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUNGUjMnLFxuICAgICAgICAgIHJlYXNvbjpcbiAgICAgICAgICAgICdGb3IgdGhpcyB0bXAgZGlzdHJpYnV0aW9uIHdlIGRvIG5vdCBuZWVkIGFjY2VzcyBsb2dnaW5nIGVuYWJsZWQnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtQ0ZSNCcsXG4gICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgJ0ZvciB0aGlzIHRtcCBkaXN0cmlidXRpb24gd2UgZG8gbm90IG5lZWQgbGltaXQgU1NMIHByb3RvY29scyBhcyB3ZSB1c2UgdGhlIGRlZmF1bHQgdmlld2VyIGNlcnQnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtQ0ZSNScsXG4gICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgJ0ZvciB0aGlzIHRtcCBkaXN0cmlidXRpb24gd2UgZG8gbm90IG5lZWQgbGltaXQgU1NMIHByb3RvY29scyBhcyB3ZSB1c2UgdGhlIGRlZmF1bHQgdmlld2VyIGNlcnQnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHRydWUsXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBSb3V0ZTUzIEEgcmVjb3JkIGZvciBjdXN0b20gZG9tYWluXG4gICAgaWYgKGRvbWFpbk5hbWUgJiYgaG9zdGVkWm9uZSkge1xuICAgICAgY29uc3QgYVJlY29yZCA9IG5ldyByb3V0ZTUzLkFSZWNvcmQodGhpcywgJ2RvbWFpbi1yZWNvcmQnLCB7XG4gICAgICAgIHpvbmU6IGhvc3RlZFpvbmUsXG4gICAgICAgIHJlY29yZE5hbWU6IGRvbWFpbk5hbWUsXG4gICAgICAgIHRhcmdldDogcm91dGU1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICAgIG5ldyByb3V0ZTUzdGFyZ2V0cy5DbG91ZEZyb250VGFyZ2V0KGRpc3RyaWJ1dGlvbiksXG4gICAgICAgICksXG4gICAgICB9KTtcblxuICAgICAgTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICAgICAgICBbYVJlY29yZF0sXG4gICAgICAgIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1SNTMtMScsXG4gICAgICAgICAgICByZWFzb246ICdBIHJlY29yZCBjcmVhdGVkIGZvciBWUyBDb2RlIHNlcnZlciBjdXN0b20gZG9tYWluJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB0cnVlLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBVc2UgYSBjdXN0b20gcmVzb3VyY2UgbGFtYmRhIHRvIHJ1biB0aGUgU1NNIGRvY3VtZW50IG9uIHRoZSBpbnN0YW5jZVxuICAgIHN3aXRjaCAoaW5zdGFuY2VPcGVyYXRpbmdTeXN0ZW0pIHtcbiAgICAgIGNhc2UgTGludXhGbGF2b3JUeXBlLlVCVU5UVV8yMjpcbiAgICAgIGNhc2UgTGludXhGbGF2b3JUeXBlLlVCVU5UVV8yNDpcbiAgICAgICAgSW5zdGFsbGVyLnVidW50dSh7XG4gICAgICAgICAgaW5zdGFuY2VJZDogaW5zdGFuY2UuaW5zdGFuY2VJZCxcbiAgICAgICAgICB2c0NvZGVVc2VyOiB2c0NvZGVVc2VyLFxuICAgICAgICAgIHZzQ29kZVBhc3N3b3JkOiB2c2NvZGVQYXNzd29yZCxcbiAgICAgICAgICBkZXZTZXJ2ZXJCYXNlUGF0aDogcHJvcHM/LmRldlNlcnZlckJhc2VQYXRoLFxuICAgICAgICAgIGRldlNlcnZlclBvcnQ6IHByb3BzPy5kZXZTZXJ2ZXJQb3J0LFxuICAgICAgICAgIGhvbWVGb2xkZXI6IGhvbWVGb2xkZXIsXG4gICAgICAgICAgY3VzdG9tRG9tYWluTmFtZTogZG9tYWluTmFtZSxcbiAgICAgICAgfSkuX2JpbmQodGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBMaW51eEZsYXZvclR5cGUuQU1BWk9OX0xJTlVYXzIwMjM6XG4gICAgICAgIEluc3RhbGxlci5hbWF6b25MaW51eDIwMjMoe1xuICAgICAgICAgIGluc3RhbmNlSWQ6IGluc3RhbmNlLmluc3RhbmNlSWQsXG4gICAgICAgICAgdnNDb2RlVXNlcjogdnNDb2RlVXNlcixcbiAgICAgICAgICB2c0NvZGVQYXNzd29yZDogdnNjb2RlUGFzc3dvcmQsXG4gICAgICAgICAgZGV2U2VydmVyQmFzZVBhdGg6IHByb3BzPy5kZXZTZXJ2ZXJCYXNlUGF0aCxcbiAgICAgICAgICBkZXZTZXJ2ZXJQb3J0OiBwcm9wcz8uZGV2U2VydmVyUG9ydCxcbiAgICAgICAgICBob21lRm9sZGVyOiBob21lRm9sZGVyLFxuICAgICAgICAgIGN1c3RvbURvbWFpbk5hbWU6IGRvbWFpbk5hbWUsXG4gICAgICAgIH0pLl9iaW5kKHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgTGludXggZmxhdm9yOiAke2luc3RhbmNlT3BlcmF0aW5nU3lzdGVtfWApO1xuICAgIH1cbiAgICAvLyBzbyB3ZSBwYXNzIHRoZSBvdXRlciBzY29wZSBvZiB0aGlzIGNvbnN0cnVjdCB0aHJvdWdoIHRoZSBpbnN0YWxsZXJcblxuICAgIC8vIE5PVEU6IG1heWJlIGhhdmUgYSBoZWFsaGNoZWNrIENGTiBjdXN0b20gcmVzb3VyY2UgdG8gc2VlIGlmIHRoZSB2c2NvZGUgc2VydmVyIGlzIGhlYWx0aHlcbiAgICAvLyBhdG0gdGhpcyBpcyBhY2hpZXZlZCBieSB0aGUgaW50ZWcgdGVzdHNcblxuICAgIC8vIE91dHB1dHNcbiAgICBjb25zdCBmaW5hbERvbWFpbk5hbWUgPSBkb21haW5OYW1lIHx8IGRpc3RyaWJ1dGlvbi5kb21haW5OYW1lO1xuICAgIHRoaXMuZG9tYWluTmFtZSA9IGBodHRwczovLyR7ZmluYWxEb21haW5OYW1lfS8/Zm9sZGVyPSR7aG9tZUZvbGRlcn1gO1xuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgJ2RvbWFpbk5hbWUnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1RoZSBkb21haW4gbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uJyxcbiAgICAgIHZhbHVlOiB0aGlzLmRvbWFpbk5hbWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLnBhc3N3b3JkID0gdnNjb2RlUGFzc3dvcmQ7XG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCAncGFzc3dvcmQnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1RoZSBwYXNzd29yZCBmb3IgdGhlIFZTQ29kZSBzZXJ2ZXInLFxuICAgICAgdmFsdWU6IHZzY29kZVBhc3N3b3JkLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogVGFncyBhbGwgdGhlIHJlc291cmNlcyBpbiB0aGUgY29uc3RydWN0XG4gKi9cbmNsYXNzIE5vZGVUYWdnZXIgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSB0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIGNvbnN0cnVjdG9yKHRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLnRhZ3MgPSB0YWdzO1xuICB9XG5cbiAgdmlzaXQobm9kZTogSUNvbnN0cnVjdCkge1xuICAgIC8vIE9ubHkgdGFnIEwxIGNvbnN0cnVjdHMgKENmblJlc291cmNlKSBhbmQgTDIgY29uc3RydWN0cyB0aGF0IHJlcHJlc2VudCBBV1MgcmVzb3VyY2VzXG4gICAgLy8gVGhpcyBwcmV2ZW50cyBpbmZpbml0ZSBsb29wcyBieSBhdm9pZGluZyB0YWdnaW5nIG9mIGludGVybWVkaWF0ZSBjb25zdHJ1Y3RzXG4gICAgY29uc3Qgbm9kZVR5cGUgPSBub2RlLmNvbnN0cnVjdG9yLm5hbWU7XG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgQ0RLIEwxIGNvbnN0cnVjdCAoc3RhcnRzIHdpdGggJ0NmbicpIG9yIGtub3duIHRhZ2dhYmxlIEwyIGNvbnN0cnVjdHNcbiAgICBjb25zdCBpc1RhZ2dhYmxlQ29uc3RydWN0ID1cbiAgICAgIG5vZGVUeXBlLnN0YXJ0c1dpdGgoJ0NmbicpIHx8XG4gICAgICBub2RlVHlwZS5pbmNsdWRlcygnSW5zdGFuY2UnKSB8fFxuICAgICAgbm9kZVR5cGUuaW5jbHVkZXMoJ1ZwYycpIHx8XG4gICAgICBub2RlVHlwZS5pbmNsdWRlcygnU3VibmV0JykgfHxcbiAgICAgIG5vZGVUeXBlLmluY2x1ZGVzKCdTZWN1cml0eUdyb3VwJykgfHxcbiAgICAgIG5vZGVUeXBlLmluY2x1ZGVzKCdWb2x1bWUnKSB8fFxuICAgICAgbm9kZVR5cGUuaW5jbHVkZXMoJ0Rpc3RyaWJ1dGlvbicpIHx8XG4gICAgICBub2RlVHlwZS5pbmNsdWRlcygnTG9hZEJhbGFuY2VyJykgfHxcbiAgICAgIG5vZGVUeXBlLmluY2x1ZGVzKCdUYXJnZXRHcm91cCcpO1xuXG4gICAgLy8gU2tpcCBjb25zdHJ1Y3RzIHRoYXQgYXJlIGtub3duIHRvIGNhdXNlIGlzc3Vlc1xuICAgIGNvbnN0IGlzUHJvYmxlbWF0aWNDb25zdHJ1Y3QgPVxuICAgICAgbm9kZVR5cGUuaW5jbHVkZXMoJ0NlcnRpZmljYXRlJykgfHxcbiAgICAgIG5vZGVUeXBlLmluY2x1ZGVzKCdIb3N0ZWRab25lJykgfHxcbiAgICAgIG5vZGVUeXBlLmluY2x1ZGVzKCdDdXN0b21SZXNvdXJjZScpIHx8XG4gICAgICBub2RlVHlwZS5pbmNsdWRlcygnUHJvdmlkZXInKSB8fFxuICAgICAgbm9kZVR5cGUuaW5jbHVkZXMoJ0Z1bmN0aW9uJykgfHxcbiAgICAgIG5vZGVUeXBlLmluY2x1ZGVzKCdSb2xlJykgfHxcbiAgICAgIG5vZGVUeXBlLmluY2x1ZGVzKCdQb2xpY3knKTtcblxuICAgIGlmIChpc1RhZ2dhYmxlQ29uc3RydWN0ICYmICFpc1Byb2JsZW1hdGljQ29uc3RydWN0KSB7XG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLnRhZ3MpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIFRhZ3Mub2Yobm9kZSkuYWRkKGtleSwgdmFsdWUpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIFNpbGVudGx5IGlnbm9yZSB0YWdnaW5nIGVycm9yc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -6,7 +6,7 @@ require (
|
|
|
6
6
|
github.com/aws/jsii-runtime-go v1.114.1
|
|
7
7
|
github.com/MV-Consulting/mvc-projen/mavogelmvcprojen v0.0.7
|
|
8
8
|
github.com/aws/aws-cdk-go/awscdk/v2 v2.190.0
|
|
9
|
-
github.com/cdklabs/cdk-nag-go/cdknag/v2 v2.37.
|
|
9
|
+
github.com/cdklabs/cdk-nag-go/cdknag/v2 v2.37.38
|
|
10
10
|
github.com/aws/constructs-go/constructs/v10 v10.4.2
|
|
11
11
|
github.com/projen/projen-go/projen v0.91.8 // indirect
|
|
12
12
|
github.com/cdklabs/awscdk-asset-awscli-go/awscliv1/v2 v2.2.242 // indirect
|
|
@@ -15,7 +15,7 @@ import (
|
|
|
15
15
|
mavogelmvcprojen "github.com/MV-Consulting/mvc-projen/mavogelmvcprojen/jsii"
|
|
16
16
|
)
|
|
17
17
|
|
|
18
|
-
//go:embed mavogel-cdk-vscode-server-0.0.
|
|
18
|
+
//go:embed mavogel-cdk-vscode-server-0.0.55.tgz
|
|
19
19
|
var tarball []byte
|
|
20
20
|
|
|
21
21
|
// Initialize loads the necessary packages in the @jsii/kernel to support the enclosing module.
|
|
@@ -28,5 +28,5 @@ func Initialize() {
|
|
|
28
28
|
constructs.Initialize()
|
|
29
29
|
|
|
30
30
|
// Load this library into the kernel
|
|
31
|
-
_jsii_.Load("@mavogel/cdk-vscode-server", "0.0.
|
|
31
|
+
_jsii_.Load("@mavogel/cdk-vscode-server", "0.0.55", tarball)
|
|
32
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.0.
|
|
1
|
+
0.0.55
|
package/package.json
CHANGED
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"projen": "npx projen",
|
|
36
36
|
"prepare": "husky",
|
|
37
37
|
"awslint": "awslint",
|
|
38
|
-
"integ-test": "integ-runner --directory ./integ-tests --parallel-regions eu-west-1 --parallel-regions eu-west-2 --update-on-failed"
|
|
38
|
+
"integ-test": "integ-runner --directory ./integ-tests --parallel-regions eu-west-1 --parallel-regions eu-west-2 --parallel-regions eu-north-1 --update-on-failed"
|
|
39
39
|
},
|
|
40
40
|
"author": {
|
|
41
41
|
"name": "Manuel Vogel",
|
|
@@ -66,11 +66,11 @@
|
|
|
66
66
|
"husky": "^9.1.7",
|
|
67
67
|
"jest": "^30.0.5",
|
|
68
68
|
"jest-junit": "^16",
|
|
69
|
-
"jsii": "~5.
|
|
69
|
+
"jsii": "~5.8.0",
|
|
70
70
|
"jsii-diff": "^1.113.0",
|
|
71
71
|
"jsii-docgen": "^10.5.0",
|
|
72
72
|
"jsii-pacmak": "^1.113.0",
|
|
73
|
-
"jsii-rosetta": "~5.
|
|
73
|
+
"jsii-rosetta": "~5.8.0",
|
|
74
74
|
"projen": "0.91.8",
|
|
75
75
|
"ts-jest": "^29.4.1",
|
|
76
76
|
"ts-node": "^10.9.2",
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
"publishConfig": {
|
|
105
105
|
"access": "public"
|
|
106
106
|
},
|
|
107
|
-
"version": "0.0.
|
|
107
|
+
"version": "0.0.56",
|
|
108
108
|
"jest": {
|
|
109
109
|
"coverageProvider": "v8",
|
|
110
110
|
"testMatch": [
|