@rio-cloud/cdk-v2-constructs 2.0.0 → 2.0.3

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.
@@ -1,225 +1,295 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DataDog = void 0;
3
+ exports.ensureLoggingAndMonitoringAreReadyBeforeServiceStarts = exports.setupLogging = exports.addFireLensLogRouter = exports.addDatadogSidecar = exports.getFargateDockerLabels = exports.getFargateContainerEnvironmentVariables = exports.DataDog = void 0;
4
4
  const aws_cdk_lib_1 = require("aws-cdk-lib");
5
5
  const ecs = require("aws-cdk-lib/aws-ecs");
6
6
  const lambda = require("aws-cdk-lib/aws-lambda");
7
7
  const logs = require("aws-cdk-lib/aws-logs");
8
8
  const rio_fargate_service_1 = require("./rio-fargate-service");
9
+ /**
10
+ * @deprecated Moved out static methods and imporoved signature. Use named import instead.
11
+ */
9
12
  class DataDog {
10
- static getFargateContainerEnvironmentVariables(scope, stage, serviceName, version, accountName, teamName) {
11
- const { account: accountId, region } = aws_cdk_lib_1.Stack.of(scope);
12
- return {
13
- // unified tagging, see https://docs.datadoghq.com/getting_started/tagging/unified_service_tagging/?tab=ecs
14
- DD_ENV: stage,
15
- DD_SERVICE: serviceName,
16
- DD_VERSION: version,
17
- // APM and tracing, see https://docs.datadoghq.com/tracing/setup_overview/setup/java/?tab=containers
18
- DD_LOGS_INJECTION: 'true',
19
- DD_SERVICE_MAPPING: this.getApmServiceMappingEnvironmentVariableValue(serviceName),
20
- DD_TAGS: this.getTagsEnvironmentVariableValue(accountId, accountName, region, teamName, stage, serviceName, version, 'service'),
21
- DD_TRACE_SAMPLE_RATE: '1.0',
22
- };
23
- }
24
- // we add all possible service mappings here even if not used in a particular service to get globally unique names
25
- static getApmServiceMappingEnvironmentVariableValue(serviceName) {
26
- const serviceMapping = {
27
- 'database': `${serviceName}-aurora`,
28
- 'java-aws-sdk': `${serviceName}-aws-sdk`,
29
- 'kafka': `${serviceName}-kafka`,
30
- 'mysql': `${serviceName}-aurora`,
31
- 'redis': `${serviceName}-redis`,
32
- };
33
- return Object.entries(serviceMapping)
34
- .map(([key, value]) => `${key}:${value}`)
35
- .join(',');
13
+ static getFargateContainerEnvironmentVariables(scope, stage, serviceName, version, accountName, teamName, teamIdentifier, additionalTags) {
14
+ return getFargateContainerEnvironmentVariables({
15
+ scope,
16
+ stage,
17
+ serviceName,
18
+ version,
19
+ accountName,
20
+ teamName,
21
+ teamIdentifier,
22
+ additionalTags,
23
+ });
36
24
  }
37
25
  static getFargateDockerLabels(stage, serviceName, version) {
38
- return {
39
- 'com.datadoghq.tags.env': stage,
40
- 'com.datadoghq.tags.service': serviceName,
41
- 'com.datadoghq.tags.version': version,
42
- };
26
+ return getFargateDockerLabels({ stage, serviceName, version });
43
27
  }
44
- static addDatadogSidecar(scope, taskDefinition, accountName, teamName, stage, serviceName, version, datadogApiKeyParameter, datadogSite, datadogLoggingMode, apmGetResourcesToIgnore, cpu, memoryLimitMiB, essential, containerTag) {
45
- const { account: accountId, region } = aws_cdk_lib_1.Stack.of(scope);
46
- const datadogSidecar = taskDefinition.addContainer('datadog-agent', {
47
- image: ecs.ContainerImage.fromRegistry(`public.ecr.aws/datadog/agent:${containerTag}`),
48
- logging: this.setupLogging(scope, accountName, teamName, stage, serviceName, version, datadogApiKeyParameter, datadogLoggingMode, datadogSite, 'datadog-sidecar'),
28
+ static addDatadogSidecar(scope, taskDefinition, accountName, teamName, teamIdentifier, stage, serviceName, version, datadogApiKeyParameter, datadogSite, datadogLoggingMode, apmGetResourcesToIgnore, cpu, memoryLimitMiB, essential, containerTag, additionalTags) {
29
+ return addDatadogSidecar({
30
+ scope,
31
+ taskDefinition,
32
+ accountName,
33
+ teamName,
34
+ teamIdentifier,
35
+ stage,
36
+ serviceName,
37
+ version,
38
+ datadogApiKeyParameter,
39
+ datadogSite,
40
+ datadogLoggingMode,
41
+ apmGetResourcesToIgnore,
49
42
  cpu,
50
43
  memoryLimitMiB,
51
- environment: {
52
- // unified tagging, see https://docs.datadoghq.com/getting_started/tagging/unified_service_tagging/?tab=ecs
53
- DD_ENV: stage,
54
- DD_SERVICE: serviceName,
55
- DD_VERSION: version,
56
- // APM and tracing see https://docs.datadoghq.com/agent/docker/apm/?tab=linux
57
- DD_APM_ENABLED: 'true',
58
- DD_APM_IGNORE_RESOURCES: apmGetResourcesToIgnore
59
- .map((apmGetResourceToIgnore) => `GET ${apmGetResourceToIgnore}`)
60
- .join(','),
61
- // general settings
62
- DD_SITE: datadogSite,
63
- DD_TAGS: this.getTagsEnvironmentVariableValue(accountId, accountName, region, teamName, stage, serviceName, version, 'datadog-sidecar'),
64
- ECS_FARGATE: 'true',
65
- DD_COLLECT_GCE_TAGS: 'false',
66
- },
67
- // see https://github.com/DataDog/datadog-agent/blob/master/Dockerfiles/agent/amd64/Dockerfile#L171-L172
68
- healthCheck: {
69
- startPeriod: aws_cdk_lib_1.Duration.minutes(2),
70
- interval: aws_cdk_lib_1.Duration.seconds(30),
71
- timeout: aws_cdk_lib_1.Duration.seconds(5),
72
- retries: 2,
73
- command: ['CMD-SHELL', '/probe.sh'],
74
- },
75
- secrets: {
76
- DD_API_KEY: ecs.Secret.fromSsmParameter(datadogApiKeyParameter),
77
- },
78
- essential: essential,
79
- });
80
- datadogSidecar.addPortMappings({
81
- containerPort: 8125,
82
- protocol: ecs.Protocol.UDP,
44
+ essential,
45
+ containerTag,
46
+ additionalTags,
83
47
  });
84
- datadogSidecar.addPortMappings({
85
- containerPort: 8126,
86
- protocol: ecs.Protocol.TCP,
87
- });
88
- return datadogSidecar;
89
48
  }
90
- static getTagsEnvironmentVariableValue(accountId, accountName, region, teamName, stage, serviceName, version, containerType) {
91
- let separator;
92
- switch (containerType) {
93
- case 'service':
94
- separator = ',';
95
- break;
96
- case 'datadog-sidecar':
97
- separator = ' ';
98
- break;
99
- case 'fluent-bit':
100
- separator = ',';
101
- break;
102
- }
103
- const tags = {
104
- // unified tagging
105
- // overridden by dedicated settings (environment variables/tags)
106
- // duplicated here to ensure they are used (and sometimes, not all three values are supported)
107
- env: stage,
108
- service: serviceName,
49
+ static addFireLensLogRouter(taskDefinition, cpu, memoryLimitMiB) {
50
+ return addFireLensLogRouter({ taskDefinition, cpu, memoryLimitMiB });
51
+ }
52
+ static setupLogging(scope, accountName, teamName, teamIdentifier, stage, serviceName, version, datadogApiKeyParameter, datadogLoggingMode, datadogSite, containerType, additionalTags) {
53
+ return setupLogging({
54
+ scope,
55
+ accountName,
56
+ teamName,
57
+ teamIdentifier,
58
+ stage,
59
+ serviceName,
109
60
  version,
110
- // account/team specific parts
111
- account_id: accountId,
112
- account_name: accountName,
61
+ datadogApiKeyParameter,
62
+ datadogLoggingMode,
63
+ datadogSite,
64
+ containerType,
65
+ additionalTags,
66
+ });
67
+ }
68
+ static ensureLoggingAndMonitoringAreReadyBeforeServiceStarts(rioFargateService) {
69
+ ensureLoggingAndMonitoringAreReadyBeforeServiceStarts(rioFargateService);
70
+ }
71
+ }
72
+ exports.DataDog = DataDog;
73
+ function getFargateContainerEnvironmentVariables(props) {
74
+ const { account: accountId, region } = aws_cdk_lib_1.Stack.of(props.scope);
75
+ return {
76
+ // unified tagging, see https://docs.datadoghq.com/getting_started/tagging/unified_service_tagging/?tab=ecs
77
+ DD_ENV: props.stage,
78
+ DD_SERVICE: props.serviceName,
79
+ DD_VERSION: props.version,
80
+ // APM and tracing, see https://docs.datadoghq.com/tracing/setup_overview/setup/java/?tab=containers
81
+ DD_LOGS_INJECTION: 'true',
82
+ DD_SERVICE_MAPPING: getApmServiceMappingEnvironmentVariableValue(props.serviceName),
83
+ DD_TAGS: getTagsEnvironmentVariableValue({
84
+ ...props,
85
+ containerType: 'service',
86
+ accountId,
113
87
  region,
114
- team: teamName,
115
- };
116
- return Object.entries(tags)
117
- .map(([key, value]) => `${key}:${value}`)
118
- .join(separator);
88
+ }),
89
+ DD_TRACE_SAMPLE_RATE: '1.0',
90
+ };
91
+ }
92
+ exports.getFargateContainerEnvironmentVariables = getFargateContainerEnvironmentVariables;
93
+ // we add all possible service mappings here even if not used in a particular service to get globally unique names
94
+ function getApmServiceMappingEnvironmentVariableValue(serviceName) {
95
+ const serviceMapping = {
96
+ 'database': `${serviceName}-aurora`,
97
+ 'java-aws-sdk': `${serviceName}-aws-sdk`,
98
+ 'kafka': `${serviceName}-kafka`,
99
+ 'mysql': `${serviceName}-aurora`,
100
+ 'redis': `${serviceName}-redis`,
101
+ };
102
+ return Object.entries(serviceMapping)
103
+ .map(([key, value]) => `${key}:${value}`)
104
+ .join(',');
105
+ }
106
+ function getFargateDockerLabels(props) {
107
+ return {
108
+ 'com.datadoghq.tags.env': props.stage,
109
+ 'com.datadoghq.tags.service': props.serviceName,
110
+ 'com.datadoghq.tags.version': props.version,
111
+ };
112
+ }
113
+ exports.getFargateDockerLabels = getFargateDockerLabels;
114
+ function addDatadogSidecar(props) {
115
+ const { account: accountId, region } = aws_cdk_lib_1.Stack.of(props.scope);
116
+ const datadogSidecar = props.taskDefinition.addContainer('datadog-agent', {
117
+ image: ecs.ContainerImage.fromRegistry(`public.ecr.aws/datadog/agent:${props.containerTag}`),
118
+ logging: setupLogging({ ...props, containerType: 'datadog-sidecar' }),
119
+ cpu: props.cpu,
120
+ memoryLimitMiB: props.memoryLimitMiB,
121
+ environment: {
122
+ // unified tagging, see https://docs.datadoghq.com/getting_started/tagging/unified_service_tagging/?tab=ecs
123
+ DD_ENV: props.stage,
124
+ DD_SERVICE: props.serviceName,
125
+ DD_VERSION: props.version,
126
+ // APM and tracing see https://docs.datadoghq.com/agent/docker/apm/?tab=linux
127
+ DD_APM_ENABLED: 'true',
128
+ DD_APM_IGNORE_RESOURCES: props.apmGetResourcesToIgnore
129
+ .map((apmGetResourceToIgnore) => `GET ${apmGetResourceToIgnore}`)
130
+ .join(','),
131
+ // general settings
132
+ DD_SITE: props.datadogSite,
133
+ DD_TAGS: getTagsEnvironmentVariableValue({ ...props, accountId, region, containerType: 'datadog-sidecar' }),
134
+ ECS_FARGATE: 'true',
135
+ DD_COLLECT_GCE_TAGS: 'false',
136
+ },
137
+ // see https://github.com/DataDog/datadog-agent/blob/master/Dockerfiles/agent/amd64/Dockerfile#L171-L172
138
+ healthCheck: {
139
+ startPeriod: aws_cdk_lib_1.Duration.minutes(2),
140
+ interval: aws_cdk_lib_1.Duration.seconds(30),
141
+ timeout: aws_cdk_lib_1.Duration.seconds(5),
142
+ retries: 2,
143
+ command: ['CMD-SHELL', '/probe.sh'],
144
+ },
145
+ secrets: {
146
+ DD_API_KEY: ecs.Secret.fromSsmParameter(props.datadogApiKeyParameter),
147
+ },
148
+ essential: props.essential,
149
+ });
150
+ datadogSidecar.addPortMappings({
151
+ containerPort: 8125,
152
+ protocol: ecs.Protocol.UDP,
153
+ });
154
+ datadogSidecar.addPortMappings({
155
+ containerPort: 8126,
156
+ protocol: ecs.Protocol.TCP,
157
+ });
158
+ return datadogSidecar;
159
+ }
160
+ exports.addDatadogSidecar = addDatadogSidecar;
161
+ function getTagsEnvironmentVariableValue(props) {
162
+ const separator = determineSeparator(props.containerType);
163
+ const tags = {
164
+ // unified tagging
165
+ // overridden by dedicated settings (environment variables/tags)
166
+ // duplicated here to ensure they are used (and sometimes, not all three values are supported)
167
+ env: props.stage,
168
+ service: props.serviceName,
169
+ version: props.version,
170
+ // account/team specific parts
171
+ account_id: props.accountId,
172
+ account_name: props.accountName,
173
+ region: props.region,
174
+ team: props.teamName,
175
+ team_identifier: props.teamIdentifier,
176
+ };
177
+ return Object.entries({ ...tags, ...props.additionalTags })
178
+ .map(([key, value]) => `${key}:${value}`)
179
+ .join(separator);
180
+ }
181
+ function determineSeparator(containerType) {
182
+ if (containerType === 'datadog-sidecar') {
183
+ return ' ';
119
184
  }
120
- static addFireLensLogRouter(taskDefinition, cpu, memoryLimitMiB) {
121
- return taskDefinition.addFirelensLogRouter('firelens-log-router', {
122
- image: ecs.ContainerImage.fromRegistry('public.ecr.aws/aws-observability/aws-for-fluent-bit:latest'),
123
- firelensConfig: {
124
- type: ecs.FirelensLogRouterType.FLUENTBIT,
125
- options: {
126
- configFileType: ecs.FirelensConfigFileType.FILE,
127
- configFileValue: '/fluent-bit/configs/parse-json.conf',
128
- enableECSLogMetadata: true,
129
- },
185
+ else {
186
+ return ',';
187
+ }
188
+ }
189
+ function addFireLensLogRouter(props) {
190
+ return props.taskDefinition.addFirelensLogRouter('firelens-log-router', {
191
+ image: ecs.ContainerImage.fromRegistry('public.ecr.aws/aws-observability/aws-for-fluent-bit:latest'),
192
+ firelensConfig: {
193
+ type: ecs.FirelensLogRouterType.FLUENTBIT,
194
+ options: {
195
+ configFileType: ecs.FirelensConfigFileType.FILE,
196
+ configFileValue: '/fluent-bit/configs/parse-json.conf',
197
+ enableECSLogMetadata: true,
130
198
  },
131
- cpu,
132
- memoryLimitMiB,
133
- });
199
+ },
200
+ cpu: props.cpu,
201
+ memoryLimitMiB: props.memoryLimitMiB,
202
+ });
203
+ }
204
+ exports.addFireLensLogRouter = addFireLensLogRouter;
205
+ function setupLogging(props) {
206
+ let logGroupName;
207
+ let logGroupId;
208
+ let containerTypeCamelCase;
209
+ switch (props.containerType) {
210
+ case 'service':
211
+ logGroupId = 'LogGroupForService';
212
+ logGroupName = props.serviceName;
213
+ containerTypeCamelCase = 'Service';
214
+ break;
215
+ case 'datadog-sidecar':
216
+ logGroupId = 'LogGroupForDatadogSidecar';
217
+ logGroupName = `${props.serviceName}-${props.containerType}`;
218
+ containerTypeCamelCase = 'DatadogSidecar';
219
+ break;
134
220
  }
135
- static setupLogging(scope, accountName, teamName, stage, serviceName, version, datadogApiKeyParameter, datadogLoggingMode, datadogSite, containerType) {
136
- let logGroupName;
137
- let logGroupId;
138
- let containerTypeCamelCase;
139
- switch (containerType) {
140
- case 'service':
141
- logGroupId = 'LogGroupForService';
142
- logGroupName = serviceName;
143
- containerTypeCamelCase = 'Service';
144
- break;
145
- case 'datadog-sidecar':
146
- logGroupId = 'LogGroupForDatadogSidecar';
147
- logGroupName = `${serviceName}-${containerType}`;
148
- containerTypeCamelCase = 'DatadogSidecar';
149
- break;
150
- }
151
- const { account: accountId, region } = aws_cdk_lib_1.Stack.of(scope);
152
- switch (datadogLoggingMode) {
153
- case rio_fargate_service_1.DataDogLoggingMode.AWS_FIRE_LENS:
154
- // TODO can we use `secretOptions` here as well, e.g. as in https://github.com/aws-samples/amazon-ecs-firelens-examples/blob/mainline/examples/fluent-bit/datadog/task-definition.json#L33-L36
155
- // Probably not, see https://github.com/aws/aws-cdk/issues/8174
156
- return ecs.LogDrivers.firelens({
157
- // see https://docs.datadoghq.com/integrations/fluentbit/#configuration-parameters
158
- options: {
159
- Name: 'datadog',
160
- Match: '*',
161
- Host: `http-intake.logs.${datadogSite}`,
162
- TLS: 'on',
163
- apikey: datadogApiKeyParameter.stringValue,
164
- compress: 'gzip',
165
- dd_service: logGroupName,
166
- dd_source: 'rio-fargate',
167
- dd_message_key: 'log',
168
- dd_tags: this.getTagsEnvironmentVariableValue(accountId, accountName, region, teamName, stage, serviceName, version, 'fluent-bit'),
169
- provider: 'ecs',
170
- },
171
- });
172
- case rio_fargate_service_1.DataDogLoggingMode.FORWARDER_LAMBDA:
173
- const logGroupForForwardingLambda = new logs.LogGroup(scope, logGroupId, {
174
- logGroupName,
175
- retention: logs.RetentionDays.ONE_WEEK,
176
- });
177
- const logForwarderLambdaArn = aws_cdk_lib_1.Fn.importValue('custom-resource-datadog-logforwarder-function-arn');
178
- const cfnPermission = new lambda.CfnPermission(scope, `LogForwarderPermission${containerTypeCamelCase}`, {
179
- action: 'lambda:InvokeFunction',
180
- functionName: logForwarderLambdaArn,
181
- principal: `logs.${region}.amazonaws.com`,
182
- sourceArn: logGroupForForwardingLambda.logGroupArn,
183
- });
184
- const cfnSubscriptionFilter = new logs.CfnSubscriptionFilter(scope, `LogForwarderSubscriptionFilter${containerTypeCamelCase}`, {
185
- destinationArn: logForwarderLambdaArn,
186
- filterPattern: '',
187
- logGroupName: logGroupForForwardingLambda.logGroupName,
188
- });
189
- cfnSubscriptionFilter.addDependsOn(cfnPermission);
190
- return ecs.LogDrivers.awsLogs({
191
- streamPrefix: containerType,
192
- logGroup: logGroupForForwardingLambda,
193
- });
194
- case rio_fargate_service_1.DataDogLoggingMode.NONE:
195
- const logGroupInCloudwatchOnly = new logs.LogGroup(scope, logGroupId, {
196
- retention: logs.RetentionDays.ONE_WEEK,
197
- });
198
- return ecs.LogDrivers.awsLogs({
199
- streamPrefix: containerType,
200
- logGroup: logGroupInCloudwatchOnly,
201
- });
202
- }
221
+ const { account: accountId, region } = aws_cdk_lib_1.Stack.of(props.scope);
222
+ switch (props.datadogLoggingMode) {
223
+ case rio_fargate_service_1.DataDogLoggingMode.AWS_FIRE_LENS:
224
+ // TODO can we use `secretOptions` here as well, e.g. as in https://github.com/aws-samples/amazon-ecs-firelens-examples/blob/mainline/examples/fluent-bit/datadog/task-definition.json#L33-L36
225
+ // Probably not, see https://github.com/aws/aws-cdk/issues/8174
226
+ return ecs.LogDrivers.firelens({
227
+ // see https://docs.datadoghq.com/integrations/fluentbit/#configuration-parameters
228
+ options: {
229
+ Name: 'datadog',
230
+ Match: '*',
231
+ Host: `http-intake.logs.${props.datadogSite}`,
232
+ TLS: 'on',
233
+ apikey: props.datadogApiKeyParameter.stringValue,
234
+ compress: 'gzip',
235
+ dd_service: logGroupName,
236
+ dd_source: 'rio-fargate',
237
+ dd_message_key: 'log',
238
+ dd_tags: getTagsEnvironmentVariableValue({ ...props, accountId, region, containerType: 'fluent-bit' }),
239
+ provider: 'ecs',
240
+ },
241
+ });
242
+ case rio_fargate_service_1.DataDogLoggingMode.FORWARDER_LAMBDA:
243
+ const logGroupForForwardingLambda = new logs.LogGroup(props.scope, logGroupId, {
244
+ logGroupName,
245
+ retention: logs.RetentionDays.ONE_WEEK,
246
+ });
247
+ const logForwarderLambdaArn = aws_cdk_lib_1.Fn.importValue('custom-resource-datadog-logforwarder-function-arn');
248
+ const cfnPermission = new lambda.CfnPermission(props.scope, `LogForwarderPermission${containerTypeCamelCase}`, {
249
+ action: 'lambda:InvokeFunction',
250
+ functionName: logForwarderLambdaArn,
251
+ principal: `logs.${region}.amazonaws.com`,
252
+ sourceArn: logGroupForForwardingLambda.logGroupArn,
253
+ });
254
+ const cfnSubscriptionFilter = new logs.CfnSubscriptionFilter(props.scope, `LogForwarderSubscriptionFilter${containerTypeCamelCase}`, {
255
+ destinationArn: logForwarderLambdaArn,
256
+ filterPattern: '',
257
+ logGroupName: logGroupForForwardingLambda.logGroupName,
258
+ });
259
+ cfnSubscriptionFilter.addDependsOn(cfnPermission);
260
+ return ecs.LogDrivers.awsLogs({
261
+ streamPrefix: props.containerType,
262
+ logGroup: logGroupForForwardingLambda,
263
+ });
264
+ case rio_fargate_service_1.DataDogLoggingMode.NONE:
265
+ const logGroupInCloudwatchOnly = new logs.LogGroup(props.scope, logGroupId, {
266
+ retention: logs.RetentionDays.ONE_WEEK,
267
+ });
268
+ return ecs.LogDrivers.awsLogs({
269
+ streamPrefix: props.containerType,
270
+ logGroup: logGroupInCloudwatchOnly,
271
+ });
203
272
  }
204
- static ensureLoggingAndMonitoringAreReadyBeforeServiceStarts(rioFargateService) {
205
- var _a;
273
+ }
274
+ exports.setupLogging = setupLogging;
275
+ function ensureLoggingAndMonitoringAreReadyBeforeServiceStarts(rioFargateService) {
276
+ var _a;
277
+ rioFargateService.serviceContainerDefinition.addContainerDependencies({
278
+ container: rioFargateService.datadogSideCarContainerDefinition,
279
+ condition: ecs.ContainerDependencyCondition.HEALTHY,
280
+ });
281
+ if (rioFargateService.logRouterContainerDefinition) {
206
282
  rioFargateService.serviceContainerDefinition.addContainerDependencies({
207
- container: rioFargateService.datadogSideCarContainerDefinition,
208
- condition: ecs.ContainerDependencyCondition.HEALTHY,
283
+ container: rioFargateService.logRouterContainerDefinition,
284
+ condition: ecs.ContainerDependencyCondition.START,
209
285
  });
210
- if (rioFargateService.logRouterContainerDefinition) {
211
- rioFargateService.serviceContainerDefinition.addContainerDependencies({
286
+ if (((_a = rioFargateService.datadogSideCarContainerDefinition.logDriverConfig) === null || _a === void 0 ? void 0 : _a.logDriver) === 'awsfirelens') {
287
+ rioFargateService.datadogSideCarContainerDefinition.addContainerDependencies({
212
288
  container: rioFargateService.logRouterContainerDefinition,
213
289
  condition: ecs.ContainerDependencyCondition.START,
214
290
  });
215
- if (((_a = rioFargateService.datadogSideCarContainerDefinition.logDriverConfig) === null || _a === void 0 ? void 0 : _a.logDriver) === 'awsfirelens') {
216
- rioFargateService.datadogSideCarContainerDefinition.addContainerDependencies({
217
- container: rioFargateService.logRouterContainerDefinition,
218
- condition: ecs.ContainerDependencyCondition.START,
219
- });
220
- }
221
291
  }
222
292
  }
223
293
  }
224
- exports.DataDog = DataDog;
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mYXJnYXRlL2RhdGFkb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWtEO0FBQ2xELDJDQUEyQztBQUMzQyxpREFBaUQ7QUFDakQsNkNBQTZDO0FBRzdDLCtEQUE4RTtBQUU5RSxNQUFhLE9BQU87SUFFWCxNQUFNLENBQUMsdUNBQXVDLENBQ25ELEtBQWdCLEVBQ2hCLEtBQWEsRUFDYixXQUFtQixFQUNuQixPQUFlLEVBQ2YsV0FBbUIsRUFDbkIsUUFBZ0I7UUFHaEIsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkQsT0FBTztZQUNMLDJHQUEyRztZQUMzRyxNQUFNLEVBQUUsS0FBSztZQUNiLFVBQVUsRUFBRSxXQUFXO1lBQ3ZCLFVBQVUsRUFBRSxPQUFPO1lBQ25CLG9HQUFvRztZQUNwRyxpQkFBaUIsRUFBRSxNQUFNO1lBQ3pCLGtCQUFrQixFQUFFLElBQUksQ0FBQyw0Q0FBNEMsQ0FBQyxXQUFXLENBQUM7WUFDbEYsT0FBTyxFQUFFLElBQUksQ0FBQywrQkFBK0IsQ0FDM0MsU0FBUyxFQUNULFdBQVcsRUFDWCxNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxXQUFXLEVBQ1gsT0FBTyxFQUNQLFNBQVMsQ0FDVjtZQUNELG9CQUFvQixFQUFFLEtBQUs7U0FDNUIsQ0FBQztJQUNKLENBQUM7SUFFRCxrSEFBa0g7SUFDbEgsTUFBTSxDQUFDLDRDQUE0QyxDQUFDLFdBQW1CO1FBRXJFLE1BQU0sY0FBYyxHQUFHO1lBQ3JCLFVBQVUsRUFBRSxHQUFHLFdBQVcsU0FBUztZQUNuQyxjQUFjLEVBQUUsR0FBRyxXQUFXLFVBQVU7WUFDeEMsT0FBTyxFQUFFLEdBQUcsV0FBVyxRQUFRO1lBQy9CLE9BQU8sRUFBRSxHQUFHLFdBQVcsU0FBUztZ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QkFBaUIsQ0FBQyw0QkFBNEIsRUFBRTtZQUNsRCxpQkFBaUIsQ0FBQywwQkFBMEIsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDcEUsU0FBUyxFQUFFLGlCQUFpQixDQUFDLDRCQUE0QjtnQkFDekQsU0FBUyxFQUFFLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLO2FBQ2xELENBQUMsQ0FBQztZQUVILElBQUksT0FBQSxpQkFBaUIsQ0FBQyxpQ0FBaUMsQ0FBQyxlQUFlLDBDQUFFLFNBQVMsTUFBSyxhQUFhLEVBQUU7Z0JBQ3BHLGlCQUFpQixDQUFDLGlDQUFpQyxDQUFDLHdCQUF3QixDQUFDO29CQUMzRSxTQUFTLEVBQUUsaUJBQWlCLENBQUMsNEJBQTRCO29CQUN6RCxTQUFTLEVBQUUsR0FBRyxDQUFDLDRCQUE0QixDQUFDLEtBQUs7aUJBQ2xELENBQUMsQ0FBQzthQUNKO1NBQ0Y7SUFDSCxDQUFDO0NBQ0Y7QUFqVkQsMEJBaVZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2ssIER1cmF0aW9uLCBGbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGVjcyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNzJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgc3NtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBEYXRhRG9nTG9nZ2luZ01vZGUsIFJpb0ZhcmdhdGVTZXJ2aWNlIH0gZnJvbSAnLi9yaW8tZmFyZ2F0ZS1zZXJ2aWNlJztcblxuZXhwb3J0IGNsYXNzIERhdGFEb2cge1xuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0RmFyZ2F0ZUNvbnRhaW5lckVudmlyb25tZW50VmFyaWFibGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgc3RhZ2U6IHN0cmluZyxcbiAgICBzZXJ2aWNlTmFtZTogc3RyaW5nLFxuICAgIHZlcnNpb246IHN0cmluZyxcbiAgICBhY2NvdW50TmFtZTogc3RyaW5nLFxuICAgIHRlYW1OYW1lOiBzdHJpbmcsXG4gICk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuXG4gICAgY29uc3QgeyBhY2NvdW50OiBhY2NvdW50SWQsIHJlZ2lvbiB9ID0gU3RhY2sub2Yoc2NvcGUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIHVuaWZpZWQgdGFnZ2luZywgc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL2dldHRpbmdfc3RhcnRlZC90YWdnaW5nL3VuaWZpZWRfc2VydmljZV90YWdnaW5nLz90YWI9ZWNzXG4gICAgICBERF9FTlY6IHN0YWdlLFxuICAgICAgRERfU0VSVklDRTogc2VydmljZU5hbWUsXG4gICAgICBERF9WRVJTSU9OOiB2ZXJzaW9uLFxuICAgICAgLy8gQVBNIGFuZCB0cmFjaW5nLCBzZWUgaHR0cHM6Ly9kb2NzLmRhdGFkb2docS5jb20vdHJhY2luZy9zZXR1cF9vdmVydmlldy9zZXR1cC9qYXZhLz90YWI9Y29udGFpbmVyc1xuICAgICAgRERfTE9HU19JTkpFQ1RJT046ICd0cnVlJyxcbiAgICAgIEREX1NFUlZJQ0VfTUFQUElORzogdGhpcy5nZXRBcG1TZXJ2aWNlTWFwcGluZ0Vudmlyb25tZW50VmFyaWFibGVWYWx1ZShzZXJ2aWNlTmFtZSksXG4gICAgICBERF9UQUdTOiB0aGlzLmdldFRhZ3NFbnZpcm9ubWVudFZhcmlhYmxlVmFsdWUoXG4gICAgICAgIGFjY291bnRJZCxcbiAgICAgICAgYWNjb3VudE5hbWUsXG4gICAgICAgIHJlZ2lvbixcbiAgICAgICAgdGVhbU5hbWUsXG4gICAgICAgIHN0YWdlLFxuICAgICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgJ3NlcnZpY2UnLFxuICAgICAgKSxcbiAgICAgIEREX1RSQUNFX1NBTVBMRV9SQVRFOiAnMS4wJywgLy8gc2VlIGh0dHBzOi8vZGR0cmFjZS5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29uZmlndXJhdGlvbi5odG1sXG4gICAgfTtcbiAgfVxuXG4gIC8vIHdlIGFkZCBhbGwgcG9zc2libGUgc2VydmljZSBtYXBwaW5ncyBoZXJlIGV2ZW4gaWYgbm90IHVzZWQgaW4gYSBwYXJ0aWN1bGFyIHNlcnZpY2UgdG8gZ2V0IGdsb2JhbGx5IHVuaXF1ZSBuYW1lc1xuICBzdGF0aWMgZ2V0QXBtU2VydmljZU1hcHBpbmdFbnZpcm9ubWVudFZhcmlhYmxlVmFsdWUoc2VydmljZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cbiAgICBjb25zdCBzZXJ2aWNlTWFwcGluZyA9IHtcbiAgICAgICdkYXRhYmFzZSc6IGAke3NlcnZpY2VOYW1lfS1hdXJvcmFgLFxuICAgICAgJ2phdmEtYXdzLXNkayc6IGAke3NlcnZpY2VOYW1lfS1hd3Mtc2RrYCxcbiAgICAgICdrYWZrYSc6IGAke3NlcnZpY2VOYW1lfS1rYWZrYWAsXG4gICAgICAnbXlzcWwnOiBgJHtzZXJ2aWNlTmFtZX0tYXVyb3JhYCxcbiAgICAgICdyZWRpcyc6IGAke3NlcnZpY2VOYW1lfS1yZWRpc2AsXG4gICAgfTtcblxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhzZXJ2aWNlTWFwcGluZylcbiAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fToke3ZhbHVlfWApXG4gICAgICAuam9pbignLCcpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRGYXJnYXRlRG9ja2VyTGFiZWxzKHN0YWdlOiBzdHJpbmcsIHNlcnZpY2VOYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAnY29tLmRhdGFkb2docS50YWdzLmVudic6IHN0YWdlLFxuICAgICAgJ2NvbS5kYXRhZG9naHEudGFncy5zZXJ2aWNlJzogc2VydmljZU5hbWUsXG4gICAgICAnY29tLmRhdGFkb2docS50YWdzLnZlcnNpb24nOiB2ZXJzaW9uLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFkZERhdGFkb2dTaWRlY2FyKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgdGFza0RlZmluaXRpb246IGVjcy5UYXNrRGVmaW5pdGlvbixcbiAgICBhY2NvdW50TmFtZTogc3RyaW5nLFxuICAgIHRlYW1OYW1lOiBzdHJpbmcsXG4gICAgc3RhZ2U6IHN0cmluZyxcbiAgICBzZXJ2aWNlTmFtZTogc3RyaW5nLFxuICAgIHZlcnNpb246IHN0cmluZyxcbiAgICBkYXRhZG9nQXBpS2V5UGFyYW1ldGVyOiBzc20uSVN0cmluZ1BhcmFtZXRlcixcbiAgICBkYXRhZG9nU2l0ZTogc3RyaW5nLFxuICAgIGRhdGFkb2dMb2dnaW5nTW9kZTogRGF0YURvZ0xvZ2dpbmdNb2RlLFxuICAgIGFwbUdldFJlc291cmNlc1RvSWdub3JlOiBzdHJpbmdbXSxcbiAgICBjcHU6IG51bWJlcixcbiAgICBtZW1vcnlMaW1pdE1pQjogbnVtYmVyLFxuICAgIGVzc2VudGlhbDogYm9vbGVhbixcbiAgICBjb250YWluZXJUYWc6IHN0cmluZyxcbiAgKTogZWNzLkNvbnRhaW5lckRlZmluaXRpb24ge1xuXG4gICAgY29uc3QgeyBhY2NvdW50OiBhY2NvdW50SWQsIHJlZ2lvbiB9ID0gU3RhY2sub2Yoc2NvcGUpO1xuICAgIGNvbnN0IGRhdGFkb2dTaWRlY2FyID0gdGFza0RlZmluaXRpb24uYWRkQ29udGFpbmVyKCdkYXRhZG9nLWFnZW50Jywge1xuICAgICAgaW1hZ2U6IGVjcy5Db250YWluZXJJbWFnZS5mcm9tUmVnaXN0cnkoYHB1YmxpYy5lY3IuYXdzL2RhdGFkb2cvYWdlbnQ6JHtjb250YWluZXJUYWd9YCksXG4gICAgICBsb2dnaW5nOiB0aGlzLnNldHVwTG9nZ2luZyhcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIGFjY291bnROYW1lLFxuICAgICAgICB0ZWFtTmFtZSxcbiAgICAgICAgc3RhZ2UsXG4gICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICBkYXRhZG9nQXBpS2V5UGFyYW1ldGVyLFxuICAgICAgICBkYXRhZG9nTG9nZ2luZ01vZGUsXG4gICAgICAgIGRhdGFkb2dTaXRlLFxuICAgICAgICAnZGF0YWRvZy1zaWRlY2FyJyxcbiAgICAgICksXG4gICAgICBjcHUsXG4gICAgICBtZW1vcnlMaW1pdE1pQixcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIC8vIHVuaWZpZWQgdGFnZ2luZywgc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL2dldHRpbmdfc3RhcnRlZC90YWdnaW5nL3VuaWZpZWRfc2VydmljZV90YWdnaW5nLz90YWI9ZWNzXG4gICAgICAgIEREX0VOVjogc3RhZ2UsXG4gICAgICAgIEREX1NFUlZJQ0U6IHNlcnZpY2VOYW1lLFxuICAgICAgICBERF9WRVJTSU9OOiB2ZXJzaW9uLFxuICAgICAgICAvLyBBUE0gYW5kIHRyYWNpbmcgc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL2FnZW50L2RvY2tlci9hcG0vP3RhYj1saW51eFxuICAgICAgICBERF9BUE1fRU5BQkxFRDogJ3RydWUnLFxuICAgICAgICBERF9BUE1fSUdOT1JFX1JFU09VUkNFUzogYXBtR2V0UmVzb3VyY2VzVG9JZ25vcmVcbiAgICAgICAgICAubWFwKChhcG1HZXRSZXNvdXJjZVRvSWdub3JlKSA9PiBgR0VUICR7YXBtR2V0UmVzb3VyY2VUb0lnbm9yZX1gKVxuICAgICAgICAgIC5qb2luKCcsJyksXG4gICAgICAgIC8vIGdlbmVyYWwgc2V0dGluZ3NcbiAgICAgICAgRERfU0lURTogZGF0YWRvZ1NpdGUsXG4gICAgICAgIEREX1RBR1M6IHRoaXMuZ2V0VGFnc0Vudmlyb25tZW50VmFyaWFibGVWYWx1ZShcbiAgICAgICAgICBhY2NvdW50SWQsXG4gICAgICAgICAgYWNjb3VudE5hbWUsXG4gICAgICAgICAgcmVnaW9uLFxuICAgICAgICAgIHRlYW1OYW1lLFxuICAgICAgICAgIHN0YWdlLFxuICAgICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICAgJ2RhdGFkb2ctc2lkZWNhcicsXG4gICAgICAgICksXG4gICAgICAgIEVDU19GQVJHQVRFOiAndHJ1ZScsXG4gICAgICAgIEREX0NPTExFQ1RfR0NFX1RBR1M6ICdmYWxzZScsXG4gICAgICB9LFxuICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXRhRG9nL2RhdGFkb2ctYWdlbnQvYmxvYi9tYXN0ZXIvRG9ja2VyZmlsZXMvYWdlbnQvYW1kNjQvRG9ja2VyZmlsZSNMMTcxLUwxNzJcbiAgICAgIGhlYWx0aENoZWNrOiB7XG4gICAgICAgIHN0YXJ0UGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDIpLFxuICAgICAgICBpbnRlcnZhbDogRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgICAgIHJldHJpZXM6IDIsXG4gICAgICAgIGNvbW1hbmQ6IFsnQ01ELVNIRUxMJywgJy9wcm9iZS5zaCddLFxuICAgICAgfSxcbiAgICAgIHNlY3JldHM6IHtcbiAgICAgICAgRERfQVBJX0tFWTogZWNzLlNlY3JldC5mcm9tU3NtUGFyYW1ldGVyKGRhdGFkb2dBcGlLZXlQYXJhbWV0ZXIpLFxuICAgICAgfSxcbiAgICAgIGVzc2VudGlhbDogZXNzZW50aWFsLFxuICAgIH0pO1xuXG4gICAgZGF0YWRvZ1NpZGVjYXIuYWRkUG9ydE1hcHBpbmdzKHtcbiAgICAgIGNvbnRhaW5lclBvcnQ6IDgxMjUsXG4gICAgICBwcm90b2NvbDogZWNzLlByb3RvY29sLlVEUCxcbiAgICB9KTtcblxuICAgIGRhdGFkb2dTaWRlY2FyLmFkZFBvcnRNYXBwaW5ncyh7XG4gICAgICBjb250YWluZXJQb3J0OiA4MTI2LFxuICAgICAgcHJvdG9jb2w6IGVjcy5Qcm90b2NvbC5UQ1AsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGF0YWRvZ1NpZGVjYXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0VGFnc0Vudmlyb25tZW50VmFyaWFibGVWYWx1ZShcbiAgICBhY2NvdW50SWQ6IHN0cmluZyxcbiAgICBhY2NvdW50TmFtZTogc3RyaW5nLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICAgIHRlYW1OYW1lOiBzdHJpbmcsXG4gICAgc3RhZ2U6IHN0cmluZyxcbiAgICBzZXJ2aWNlTmFtZTogc3RyaW5nLFxuICAgIHZlcnNpb246IHN0cmluZyxcbiAgICBjb250YWluZXJUeXBlOiAnc2VydmljZScgfCAnZGF0YWRvZy1zaWRlY2FyJyB8ICdmbHVlbnQtYml0JyxcbiAgKTogc3RyaW5nIHtcblxuICAgIGxldCBzZXBhcmF0b3I6IHN0cmluZztcblxuICAgIHN3aXRjaCAoY29udGFpbmVyVHlwZSkge1xuXG4gICAgICBjYXNlICdzZXJ2aWNlJzpcbiAgICAgICAgc2VwYXJhdG9yID0gJywnO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZGF0YWRvZy1zaWRlY2FyJzpcbiAgICAgICAgc2VwYXJhdG9yID0gJyAnO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZmx1ZW50LWJpdCc6XG4gICAgICAgIHNlcGFyYXRvciA9ICcsJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3QgdGFncyA9IHtcbiAgICAgIC8vIHVuaWZpZWQgdGFnZ2luZ1xuICAgICAgLy8gb3ZlcnJpZGRlbiBieSBkZWRpY2F0ZWQgc2V0dGluZ3MgKGVudmlyb25tZW50IHZhcmlhYmxlcy90YWdzKVxuICAgICAgLy8gZHVwbGljYXRlZCBoZXJlIHRvIGVuc3VyZSB0aGV5IGFyZSB1c2VkIChhbmQgc29tZXRpbWVzLCBub3QgYWxsIHRocmVlIHZhbHVlcyBhcmUgc3VwcG9ydGVkKVxuICAgICAgZW52OiBzdGFnZSxcbiAgICAgIHNlcnZpY2U6IHNlcnZpY2VOYW1lLFxuICAgICAgdmVyc2lvbixcbiAgICAgIC8vIGFjY291bnQvdGVhbSBzcGVjaWZpYyBwYXJ0c1xuICAgICAgYWNjb3VudF9pZDogYWNjb3VudElkLFxuICAgICAgYWNjb3VudF9uYW1lOiBhY2NvdW50TmFtZSxcbiAgICAgIHJlZ2lvbixcbiAgICAgIHRlYW06IHRlYW1OYW1lLFxuICAgIH07XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRhZ3MpXG4gICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAke2tleX06JHt2YWx1ZX1gKVxuICAgICAgLmpvaW4oc2VwYXJhdG9yKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYWRkRmlyZUxlbnNMb2dSb3V0ZXIoXG4gICAgdGFza0RlZmluaXRpb246IGVjcy5UYXNrRGVmaW5pdGlvbixcbiAgICBjcHU6IG51bWJlcixcbiAgICBtZW1vcnlMaW1pdE1pQjogbnVtYmVyLFxuICApOiBlY3MuQ29udGFpbmVyRGVmaW5pdGlvbiB7XG5cbiAgICByZXR1cm4gdGFza0RlZmluaXRpb24uYWRkRmlyZWxlbnNMb2dSb3V0ZXIoJ2ZpcmVsZW5zLWxvZy1yb3V0ZXInLCB7XG4gICAgICBpbWFnZTogZWNzLkNvbnRhaW5lckltYWdlLmZyb21SZWdpc3RyeSgncHVibGljLmVjci5hd3MvYXdzLW9ic2VydmFiaWxpdHkvYXdzLWZvci1mbHVlbnQtYml0OmxhdGVzdCcpLFxuICAgICAgZmlyZWxlbnNDb25maWc6IHtcbiAgICAgICAgdHlwZTogZWNzLkZpcmVsZW5zTG9nUm91dGVyVHlwZS5GTFVFTlRCSVQsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBjb25maWdGaWxlVHlwZTogZWNzLkZpcmVsZW5zQ29uZmlnRmlsZVR5cGUuRklMRSxcbiAgICAgICAgICBjb25maWdGaWxlVmFsdWU6ICcvZmx1ZW50LWJpdC9jb25maWdzL3BhcnNlLWpzb24uY29uZicsXG4gICAgICAgICAgZW5hYmxlRUNTTG9nTWV0YWRhdGE6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgY3B1LFxuICAgICAgbWVtb3J5TGltaXRNaUIsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHNldHVwTG9nZ2luZyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGFjY291bnROYW1lOiBzdHJpbmcsXG4gICAgdGVhbU5hbWU6IHN0cmluZyxcbiAgICBzdGFnZTogc3RyaW5nLFxuICAgIHNlcnZpY2VOYW1lOiBzdHJpbmcsXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIGRhdGFkb2dBcGlLZXlQYXJhbWV0ZXI6IHNzbS5JU3RyaW5nUGFyYW1ldGVyLFxuICAgIGRhdGFkb2dMb2dnaW5nTW9kZTogRGF0YURvZ0xvZ2dpbmdNb2RlLFxuICAgIGRhdGFkb2dTaXRlOiBzdHJpbmcsXG4gICAgY29udGFpbmVyVHlwZTogJ3NlcnZpY2UnIHwgJ2RhdGFkb2ctc2lkZWNhcicsXG4gICk6IGVjcy5Mb2dEcml2ZXIge1xuXG4gICAgbGV0IGxvZ0dyb3VwTmFtZTogc3RyaW5nO1xuICAgIGxldCBsb2dHcm91cElkOiBzdHJpbmc7XG4gICAgbGV0IGNvbnRhaW5lclR5cGVDYW1lbENhc2U7XG5cbiAgICBzd2l0Y2ggKGNvbnRhaW5lclR5cGUpIHtcblxuICAgICAgY2FzZSAnc2VydmljZSc6XG4gICAgICAgIGxvZ0dyb3VwSWQgPSAnTG9nR3JvdXBGb3JTZXJ2aWNlJztcbiAgICAgICAgbG9nR3JvdXBOYW1lID0gc2VydmljZU5hbWU7XG4gICAgICAgIGNvbnRhaW5lclR5cGVDYW1lbENhc2UgPSAnU2VydmljZSc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdkYXRhZG9nLXNpZGVjYXInOlxuICAgICAgICBsb2dHcm91cElkID0gJ0xvZ0dyb3VwRm9yRGF0YWRvZ1NpZGVjYXInO1xuICAgICAgICBsb2dHcm91cE5hbWUgPSBgJHtzZXJ2aWNlTmFtZX0tJHtjb250YWluZXJUeXBlfWA7XG4gICAgICAgIGNvbnRhaW5lclR5cGVDYW1lbENhc2UgPSAnRGF0YWRvZ1NpZGVjYXInO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb25zdCB7IGFjY291bnQ6IGFjY291bnRJZCwgcmVnaW9uIH0gPSBTdGFjay5vZihzY29wZSk7XG5cbiAgICBzd2l0Y2ggKGRhdGFkb2dMb2dnaW5nTW9kZSkge1xuXG4gICAgICBjYXNlIERhdGFEb2dMb2dnaW5nTW9kZS5BV1NfRklSRV9MRU5TOlxuICAgICAgICAvLyBUT0RPIGNhbiB3ZSB1c2UgYHNlY3JldE9wdGlvbnNgIGhlcmUgYXMgd2VsbCwgZS5nLiBhcyBpbiBodHRwczovL2dpdGh1Yi5jb20vYXdzLXNhbXBsZXMvYW1hem9uLWVjcy1maXJlbGVucy1leGFtcGxlcy9ibG9iL21haW5saW5lL2V4YW1wbGVzL2ZsdWVudC1iaXQvZGF0YWRvZy90YXNrLWRlZmluaXRpb24uanNvbiNMMzMtTDM2XG4gICAgICAgIC8vIFByb2JhYmx5IG5vdCwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvODE3NFxuICAgICAgICByZXR1cm4gZWNzLkxvZ0RyaXZlcnMuZmlyZWxlbnMoe1xuICAgICAgICAgIC8vIHNlZSBodHRwczovL2RvY3MuZGF0YWRvZ2hxLmNvbS9pbnRlZ3JhdGlvbnMvZmx1ZW50Yml0LyNjb25maWd1cmF0aW9uLXBhcmFtZXRlcnNcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBOYW1lOiAnZGF0YWRvZycsXG4gICAgICAgICAgICBNYXRjaDogJyonLFxuICAgICAgICAgICAgSG9zdDogYGh0dHAtaW50YWtlLmxvZ3MuJHtkYXRhZG9nU2l0ZX1gLFxuICAgICAgICAgICAgVExTOiAnb24nLFxuICAgICAgICAgICAgYXBpa2V5OiBkYXRhZG9nQXBpS2V5UGFyYW1ldGVyLnN0cmluZ1ZhbHVlLFxuICAgICAgICAgICAgY29tcHJlc3M6ICdnemlwJyxcbiAgICAgICAgICAgIGRkX3NlcnZpY2U6IGxvZ0dyb3VwTmFtZSxcbiAgICAgICAgICAgIGRkX3NvdXJjZTogJ3Jpby1mYXJnYXRlJyxcbiAgICAgICAgICAgIGRkX21lc3NhZ2Vfa2V5OiAnbG9nJyxcbiAgICAgICAgICAgIGRkX3RhZ3M6IHRoaXMuZ2V0VGFnc0Vudmlyb25tZW50VmFyaWFibGVWYWx1ZShcbiAgICAgICAgICAgICAgYWNjb3VudElkLFxuICAgICAgICAgICAgICBhY2NvdW50TmFtZSxcbiAgICAgICAgICAgICAgcmVnaW9uLFxuICAgICAgICAgICAgICB0ZWFtTmFtZSxcbiAgICAgICAgICAgICAgc3RhZ2UsXG4gICAgICAgICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgICAgICAnZmx1ZW50LWJpdCcsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgcHJvdmlkZXI6ICdlY3MnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlIERhdGFEb2dMb2dnaW5nTW9kZS5GT1JXQVJERVJfTEFNQkRBOlxuICAgICAgICBjb25zdCBsb2dHcm91cEZvckZvcndhcmRpbmdMYW1iZGEgPSBuZXcgbG9ncy5Mb2dHcm91cChzY29wZSwgbG9nR3JvdXBJZCwge1xuICAgICAgICAgIGxvZ0dyb3VwTmFtZSxcbiAgICAgICAgICByZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfV0VFSyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGxvZ0ZvcndhcmRlckxhbWJkYUFybiA9IEZuLmltcG9ydFZhbHVlKCdjdXN0b20tcmVzb3VyY2UtZGF0YWRvZy1sb2dmb3J3YXJkZXItZnVuY3Rpb24tYXJuJyk7XG4gICAgICAgIGNvbnN0IGNmblBlcm1pc3Npb24gPSBuZXcgbGFtYmRhLkNmblBlcm1pc3Npb24oc2NvcGUsIGBMb2dGb3J3YXJkZXJQZXJtaXNzaW9uJHtjb250YWluZXJUeXBlQ2FtZWxDYXNlfWAsIHtcbiAgICAgICAgICBhY3Rpb246ICdsYW1iZGE6SW52b2tlRnVuY3Rpb24nLFxuICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbG9nRm9yd2FyZGVyTGFtYmRhQXJuLFxuICAgICAgICAgIHByaW5jaXBhbDogYGxvZ3MuJHtyZWdpb259LmFtYXpvbmF3cy5jb21gLFxuICAgICAgICAgIHNvdXJjZUFybjogbG9nR3JvdXBGb3JGb3J3YXJkaW5nTGFtYmRhLmxvZ0dyb3VwQXJuLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY2ZuU3Vic2NyaXB0aW9uRmlsdGVyID0gbmV3IGxvZ3MuQ2ZuU3Vic2NyaXB0aW9uRmlsdGVyKFxuICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgIGBMb2dGb3J3YXJkZXJTdWJzY3JpcHRpb25GaWx0ZXIke2NvbnRhaW5lclR5cGVDYW1lbENhc2V9YCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbkFybjogbG9nRm9yd2FyZGVyTGFtYmRhQXJuLFxuICAgICAgICAgICAgZmlsdGVyUGF0dGVybjogJycsXG4gICAgICAgICAgICBsb2dHcm91cE5hbWU6IGxvZ0dyb3VwRm9yRm9yd2FyZGluZ0xhbWJkYS5sb2dHcm91cE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgY2ZuU3Vic2NyaXB0aW9uRmlsdGVyLmFkZERlcGVuZHNPbihjZm5QZXJtaXNzaW9uKTtcbiAgICAgICAgcmV0dXJuIGVjcy5Mb2dEcml2ZXJzLmF3c0xvZ3Moe1xuICAgICAgICAgIHN0cmVhbVByZWZpeDogY29udGFpbmVyVHlwZSxcbiAgICAgICAgICBsb2dHcm91cDogbG9nR3JvdXBGb3JGb3J3YXJkaW5nTGFtYmRhLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSBEYXRhRG9nTG9nZ2luZ01vZGUuTk9ORTpcbiAgICAgICAgY29uc3QgbG9nR3JvdXBJbkNsb3Vkd2F0Y2hPbmx5ID0gbmV3IGxvZ3MuTG9nR3JvdXAoc2NvcGUsIGxvZ0dyb3VwSWQsIHtcbiAgICAgICAgICByZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfV0VFSyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlY3MuTG9nRHJpdmVycy5hd3NMb2dzKHtcbiAgICAgICAgICBzdHJlYW1QcmVmaXg6IGNvbnRhaW5lclR5cGUsXG4gICAgICAgICAgbG9nR3JvdXA6IGxvZ0dyb3VwSW5DbG91ZHdhdGNoT25seSxcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBlbnN1cmVMb2dnaW5nQW5kTW9uaXRvcmluZ0FyZVJlYWR5QmVmb3JlU2VydmljZVN0YXJ0cyhyaW9GYXJnYXRlU2VydmljZTogUmlvRmFyZ2F0ZVNlcnZpY2UpIHtcblxuICAgIHJpb0ZhcmdhdGVTZXJ2aWNlLnNlcnZpY2VDb250YWluZXJEZWZpbml0aW9uLmFkZENvbnRhaW5lckRlcGVuZGVuY2llcyh7XG4gICAgICBjb250YWluZXI6IHJpb0ZhcmdhdGVTZXJ2aWNlLmRhdGFkb2dTaWRlQ2FyQ29udGFpbmVyRGVmaW5pdGlvbixcbiAgICAgIGNvbmRpdGlvbjogZWNzLkNvbnRhaW5lckRlcGVuZGVuY3lDb25kaXRpb24uSEVBTFRIWSxcbiAgICB9KTtcblxuICAgIGlmIChyaW9GYXJnYXRlU2VydmljZS5sb2dSb3V0ZXJDb250YWluZXJEZWZpbml0aW9uKSB7XG4gICAgICByaW9GYXJnYXRlU2VydmljZS5zZXJ2aWNlQ29udGFpbmVyRGVmaW5pdGlvbi5hZGRDb250YWluZXJEZXBlbmRlbmNpZXMoe1xuICAgICAgICBjb250YWluZXI6IHJpb0ZhcmdhdGVTZXJ2aWNlLmxvZ1JvdXRlckNvbnRhaW5lckRlZmluaXRpb24sXG4gICAgICAgIGNvbmRpdGlvbjogZWNzLkNvbnRhaW5lckRlcGVuZGVuY3lDb25kaXRpb24uU1RBUlQsXG4gICAgICB9KTtcblxuICAgICAgaWYgKHJpb0ZhcmdhdGVTZXJ2aWNlLmRhdGFkb2dTaWRlQ2FyQ29udGFpbmVyRGVmaW5pdGlvbi5sb2dEcml2ZXJDb25maWc/LmxvZ0RyaXZlciA9PT0gJ2F3c2ZpcmVsZW5zJykge1xuICAgICAgICByaW9GYXJnYXRlU2VydmljZS5kYXRhZG9nU2lkZUNhckNvbnRhaW5lckRlZmluaXRpb24uYWRkQ29udGFpbmVyRGVwZW5kZW5jaWVzKHtcbiAgICAgICAgICBjb250YWluZXI6IHJpb0ZhcmdhdGVTZXJ2aWNlLmxvZ1JvdXRlckNvbnRhaW5lckRlZmluaXRpb24sXG4gICAgICAgICAgY29uZGl0aW9uOiBlY3MuQ29udGFpbmVyRGVwZW5kZW5jeUNvbmRpdGlvbi5TVEFSVCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiJdfQ==
294
+ exports.ensureLoggingAndMonitoringAreReadyBeforeServiceStarts = ensureLoggingAndMonitoringAreReadyBeforeServiceStarts;
295
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mYXJnYXRlL2RhdGFkb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWtEO0FBQ2xELDJDQUEyQztBQUMzQyxpREFBaUQ7QUFDakQsNkNBQTZDO0FBRzdDLCtEQUE4RTtBQUU5RTs7R0FFRztBQUNILE1BQWEsT0FBTztJQUVYLE1BQU0sQ0FBQyx1Q0FBdUMsQ0FDbkQsS0FBZ0IsRUFDaEIsS0FBYSxFQUNiLFdBQW1CLEVBQ25CLE9BQWUsRUFDZixXQUFtQixFQUNuQixRQUFnQixFQUNoQixjQUFzQixFQUN0QixjQUFrRDtRQUVsRCxPQUFPLHVDQUF1QyxDQUFDO1lBQzdDLEtBQUs7WUFDTCxLQUFLO1lBQ0wsV0FBVztZQUNYLE9BQU87WUFDUCxXQUFXO1lBQ1gsUUFBUTtZQUNSLGNBQWM7WUFDZCxjQUFjO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxLQUFhLEVBQUUsV0FBbUIsRUFBRSxPQUFlO1FBQ3RGLE9BQU8sc0JBQXNCLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FDN0IsS0FBZ0IsRUFDaEIsY0FBa0MsRUFDbEMsV0FBbUIsRUFDbkIsUUFBZ0IsRUFDaEIsY0FBc0IsRUFDdEIsS0FBYSxFQUNiLFdBQW1CLEVBQ25CLE9BQWUsRUFDZixzQkFBNEMsRUFDNUMsV0FBbUIsRUFDbkIsa0JBQXNDLEVBQ3RDLHVCQUFpQyxFQUNqQyxHQUFXLEVBQ1gsY0FBc0IsRUFDdEIsU0FBa0IsRUFDbEIsWUFBb0IsRUFDcEIsY0FBa0Q7UUFHbEQsT0FBTyxpQkFBaUIsQ0FBQztZQUN2QixLQUFLO1lBQ0wsY0FBYztZQUNkLFdBQVc7WUFDWCxRQUFRO1lBQ1IsY0FBYztZQUNkLEtBQUs7WUFDTCxXQUFX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SSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFO2dCQUMxRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRO2FBQ3ZDLENBQUMsQ0FBQztZQUNILE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQzVCLFlBQVksRUFBRSxLQUFLLENBQUMsYUFBYTtnQkFDakMsUUFBUSxFQUFFLHdCQUF3QjthQUNuQyxDQUFDLENBQUM7S0FDTjtBQUNILENBQUM7QUE5RkQsb0NBOEZDO0FBRUQsU0FBZ0IscURBQXFELENBQUMsaUJBQW9DOztJQUV4RyxpQkFBaUIsQ0FBQywwQkFBMEIsQ0FBQyx3QkFBd0IsQ0FBQztRQUNwRSxTQUFTLEVBQUUsaUJBQWlCLENBQUMsaUNBQWlDO1FBQzlELFNBQVMsRUFBRSxHQUFHLENBQUMsNEJBQTRCLENBQUMsT0FBTztLQUNwRCxDQUFDLENBQUM7SUFFSCxJQUFJLGlCQUFpQixDQUFDLDRCQUE0QixFQUFFO1FBQ2xELGlCQUFpQixDQUFDLDBCQUEwQixDQUFDLHdCQUF3QixDQUFDO1lBQ3BFLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyw0QkFBNEI7WUFDekQsU0FBUyxFQUFFLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLO1NBQ2xELENBQUMsQ0FBQztRQUVILElBQUksT0FBQSxpQkFBaUIsQ0FBQyxpQ0FBaUMsQ0FBQyxlQUFlLDBDQUFFLFNBQVMsTUFBSyxhQUFhLEVBQUU7WUFDcEcsaUJBQWlCLENBQUMsaUNBQWlDLENBQUMsd0JBQXdCLENBQUM7Z0JBQzNFLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyw0QkFBNEI7Z0JBQ3pELFNBQVMsRUFBRSxHQUFHLENBQUMsNEJBQTRCLENBQUMsS0FBSzthQUNsRCxDQUFDLENBQUM7U0FDSjtLQUNGO0FBQ0gsQ0FBQztBQXBCRCxzSEFvQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjaywgRHVyYXRpb24sIEZuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgZWNzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lY3MnO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IERhdGFEb2dMb2dnaW5nTW9kZSwgUmlvRmFyZ2F0ZVNlcnZpY2UgfSBmcm9tICcuL3Jpby1mYXJnYXRlLXNlcnZpY2UnO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIE1vdmVkIG91dCBzdGF0aWMgbWV0aG9kcyBhbmQgaW1wb3JvdmVkIHNpZ25hdHVyZS4gVXNlIG5hbWVkIGltcG9ydCBpbnN0ZWFkLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YURvZyB7XG5cbiAgcHVibGljIHN0YXRpYyBnZXRGYXJnYXRlQ29udGFpbmVyRW52aXJvbm1lbnRWYXJpYWJsZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBzdGFnZTogc3RyaW5nLFxuICAgIHNlcnZpY2VOYW1lOiBzdHJpbmcsXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIGFjY291bnROYW1lOiBzdHJpbmcsXG4gICAgdGVhbU5hbWU6IHN0cmluZyxcbiAgICB0ZWFtSWRlbnRpZmllcjogc3RyaW5nLFxuICAgIGFkZGl0aW9uYWxUYWdzOiB7IFtrOiBzdHJpbmddOiBzdHJpbmd9IHwgdW5kZWZpbmVkLFxuICApOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICByZXR1cm4gZ2V0RmFyZ2F0ZUNvbnRhaW5lckVudmlyb25tZW50VmFyaWFibGVzKHtcbiAgICAgIHNjb3BlLFxuICAgICAgc3RhZ2UsXG4gICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgIHZlcnNpb24sXG4gICAgICBhY2NvdW50TmFtZSxcbiAgICAgIHRlYW1OYW1lLFxuICAgICAgdGVhbUlkZW50aWZpZXIsXG4gICAgICBhZGRpdGlvbmFsVGFncyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0RmFyZ2F0ZURvY2tlckxhYmVscyhzdGFnZTogc3RyaW5nLCBzZXJ2aWNlTmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICByZXR1cm4gZ2V0RmFyZ2F0ZURvY2tlckxhYmVscyh7IHN0YWdlLCBzZXJ2aWNlTmFtZSwgdmVyc2lvbiB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYWRkRGF0YWRvZ1NpZGVjYXIoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICB0YXNrRGVmaW5pdGlvbjogZWNzLlRhc2tEZWZpbml0aW9uLFxuICAgIGFjY291bnROYW1lOiBzdHJpbmcsXG4gICAgdGVhbU5hbWU6IHN0cmluZyxcbiAgICB0ZWFtSWRlbnRpZmllcjogc3RyaW5nLFxuICAgIHN0YWdlOiBzdHJpbmcsXG4gICAgc2VydmljZU5hbWU6IHN0cmluZyxcbiAgICB2ZXJzaW9uOiBzdHJpbmcsXG4gICAgZGF0YWRvZ0FwaUtleVBhcmFtZXRlcjogc3NtLklTdHJpbmdQYXJhbWV0ZXIsXG4gICAgZGF0YWRvZ1NpdGU6IHN0cmluZyxcbiAgICBkYXRhZG9nTG9nZ2luZ01vZGU6IERhdGFEb2dMb2dnaW5nTW9kZSxcbiAgICBhcG1HZXRSZXNvdXJjZXNUb0lnbm9yZTogc3RyaW5nW10sXG4gICAgY3B1OiBudW1iZXIsXG4gICAgbWVtb3J5TGltaXRNaUI6IG51bWJlcixcbiAgICBlc3NlbnRpYWw6IGJvb2xlYW4sXG4gICAgY29udGFpbmVyVGFnOiBzdHJpbmcsXG4gICAgYWRkaXRpb25hbFRhZ3M6IHsgW2s6IHN0cmluZ106IHN0cmluZ30gfCB1bmRlZmluZWQsXG4gICk6IGVjcy5Db250YWluZXJEZWZpbml0aW9uIHtcblxuICAgIHJldHVybiBhZGREYXRhZG9nU2lkZWNhcih7XG4gICAgICBzY29wZSxcbiAgICAgIHRhc2tEZWZpbml0aW9uLFxuICAgICAgYWNjb3VudE5hbWUsXG4gICAgICB0ZWFtTmFtZSxcbiAgICAgIHRlYW1JZGVudGlmaWVyLFxuICAgICAgc3RhZ2UsXG4gICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgIHZlcnNpb24sXG4gICAgICBkYXRhZG9nQXBpS2V5UGFyYW1ldGVyLFxuICAgICAgZGF0YWRvZ1NpdGUsXG4gICAgICBkYXRhZG9nTG9nZ2luZ01vZGUsXG4gICAgICBhcG1HZXRSZXNvdXJjZXNUb0lnbm9yZSxcbiAgICAgIGNwdSxcbiAgICAgIG1lbW9yeUxpbWl0TWlCLFxuICAgICAgZXNzZW50aWFsLFxuICAgICAgY29udGFpbmVyVGFnLFxuICAgICAgYWRkaXRpb25hbFRhZ3MsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFkZEZpcmVMZW5zTG9nUm91dGVyKFxuICAgIHRhc2tEZWZpbml0aW9uOiBlY3MuVGFza0RlZmluaXRpb24sXG4gICAgY3B1OiBudW1iZXIsXG4gICAgbWVtb3J5TGltaXRNaUI6IG51bWJlcixcbiAgKTogZWNzLkNvbnRhaW5lckRlZmluaXRpb24ge1xuICAgIHJldHVybiBhZGRGaXJlTGVuc0xvZ1JvdXRlcih7IHRhc2tEZWZpbml0aW9uLCBjcHUsIG1lbW9yeUxpbWl0TWlCIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBzZXR1cExvZ2dpbmcoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBhY2NvdW50TmFtZTogc3RyaW5nLFxuICAgIHRlYW1OYW1lOiBzdHJpbmcsXG4gICAgdGVhbUlkZW50aWZpZXI6IHN0cmluZyxcbiAgICBzdGFnZTogc3RyaW5nLFxuICAgIHNlcnZpY2VOYW1lOiBzdHJpbmcsXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIGRhdGFkb2dBcGlLZXlQYXJhbWV0ZXI6IHNzbS5JU3RyaW5nUGFyYW1ldGVyLFxuICAgIGRhdGFkb2dMb2dnaW5nTW9kZTogRGF0YURvZ0xvZ2dpbmdNb2RlLFxuICAgIGRhdGFkb2dTaXRlOiBzdHJpbmcsXG4gICAgY29udGFpbmVyVHlwZTogJ3NlcnZpY2UnIHwgJ2RhdGFkb2ctc2lkZWNhcicsXG4gICAgYWRkaXRpb25hbFRhZ3M6IHsgW2s6IHN0cmluZ106IHN0cmluZ30gfCB1bmRlZmluZWQsXG4gICk6IGVjcy5Mb2dEcml2ZXIge1xuXG4gICAgcmV0dXJuIHNldHVwTG9nZ2luZyh7XG4gICAgICBzY29wZSxcbiAgICAgIGFjY291bnROYW1lLFxuICAgICAgdGVhbU5hbWUsXG4gICAgICB0ZWFtSWRlbnRpZmllcixcbiAgICAgIHN0YWdlLFxuICAgICAgc2VydmljZU5hbWUsXG4gICAgICB2ZXJzaW9uLFxuICAgICAgZGF0YWRvZ0FwaUtleVBhcmFtZXRlcixcbiAgICAgIGRhdGFkb2dMb2dnaW5nTW9kZSxcbiAgICAgIGRhdGFkb2dTaXRlLFxuICAgICAgY29udGFpbmVyVHlwZSxcbiAgICAgIGFkZGl0aW9uYWxUYWdzLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBlbnN1cmVMb2dnaW5nQW5kTW9uaXRvcmluZ0FyZVJlYWR5QmVmb3JlU2VydmljZVN0YXJ0cyhyaW9GYXJnYXRlU2VydmljZTogUmlvRmFyZ2F0ZVNlcnZpY2UpIHtcbiAgICBlbnN1cmVMb2dnaW5nQW5kTW9uaXRvcmluZ0FyZVJlYWR5QmVmb3JlU2VydmljZVN0YXJ0cyhyaW9GYXJnYXRlU2VydmljZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZhcmdhdGVDb250YWluZXJFbnZpcm9ubWVudFZhcmlhYmxlcyhwcm9wczoge1xuICBzY29wZTogQ29uc3RydWN0O1xuICBzdGFnZTogc3RyaW5nO1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGFjY291bnROYW1lOiBzdHJpbmc7XG4gIHRlYW1OYW1lOiBzdHJpbmc7XG4gIHRlYW1JZGVudGlmaWVyOiBzdHJpbmc7XG4gIGFkZGl0aW9uYWxUYWdzOiB7IFtrOiBzdHJpbmddOiBzdHJpbmd9IHwgdW5kZWZpbmVkO1xufSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuXG4gIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudElkLCByZWdpb24gfSA9IFN0YWNrLm9mKHByb3BzLnNjb3BlKTtcblxuICByZXR1cm4ge1xuICAgIC8vIHVuaWZpZWQgdGFnZ2luZywgc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL2dldHRpbmdfc3RhcnRlZC90YWdnaW5nL3VuaWZpZWRfc2VydmljZV90YWdnaW5nLz90YWI9ZWNzXG4gICAgRERfRU5WOiBwcm9wcy5zdGFnZSxcbiAgICBERF9TRVJWSUNFOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICBERF9WRVJTSU9OOiBwcm9wcy52ZXJzaW9uLFxuICAgIC8vIEFQTSBhbmQgdHJhY2luZywgc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL3RyYWNpbmcvc2V0dXBfb3ZlcnZpZXcvc2V0dXAvamF2YS8/dGFiPWNvbnRhaW5lcnNcbiAgICBERF9MT0dTX0lOSkVDVElPTjogJ3RydWUnLFxuICAgIEREX1NFUlZJQ0VfTUFQUElORzogZ2V0QXBtU2VydmljZU1hcHBpbmdFbnZpcm9ubWVudFZhcmlhYmxlVmFsdWUocHJvcHMuc2VydmljZU5hbWUpLFxuICAgIEREX1RBR1M6IGdldFRhZ3NFbnZpcm9ubWVudFZhcmlhYmxlVmFsdWUoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBjb250YWluZXJUeXBlOiAnc2VydmljZScsXG4gICAgICBhY2NvdW50SWQsXG4gICAgICByZWdpb24sXG4gICAgfSksXG4gICAgRERfVFJBQ0VfU0FNUExFX1JBVEU6ICcxLjAnLCAvLyBzZWUgaHR0cHM6Ly9kZHRyYWNlLnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb25maWd1cmF0aW9uLmh0bWxcbiAgfTtcbn1cblxuLy8gd2UgYWRkIGFsbCBwb3NzaWJsZSBzZXJ2aWNlIG1hcHBpbmdzIGhlcmUgZXZlbiBpZiBub3QgdXNlZCBpbiBhIHBhcnRpY3VsYXIgc2VydmljZSB0byBnZXQgZ2xvYmFsbHkgdW5pcXVlIG5hbWVzXG5mdW5jdGlvbiBnZXRBcG1TZXJ2aWNlTWFwcGluZ0Vudmlyb25tZW50VmFyaWFibGVWYWx1ZShzZXJ2aWNlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblxuICBjb25zdCBzZXJ2aWNlTWFwcGluZyA9IHtcbiAgICAnZGF0YWJhc2UnOiBgJHtzZXJ2aWNlTmFtZX0tYXVyb3JhYCxcbiAgICAnamF2YS1hd3Mtc2RrJzogYCR7c2VydmljZU5hbWV9LWF3cy1zZGtgLFxuICAgICdrYWZrYSc6IGAke3NlcnZpY2VOYW1lfS1rYWZrYWAsXG4gICAgJ215c3FsJzogYCR7c2VydmljZU5hbWV9LWF1cm9yYWAsXG4gICAgJ3JlZGlzJzogYCR7c2VydmljZU5hbWV9LXJlZGlzYCxcbiAgfTtcblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoc2VydmljZU1hcHBpbmcpXG4gICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9OiR7dmFsdWV9YClcbiAgICAuam9pbignLCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmFyZ2F0ZURvY2tlckxhYmVscyhwcm9wczoge3N0YWdlOiBzdHJpbmc7IHNlcnZpY2VOYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZ30pOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgcmV0dXJuIHtcbiAgICAnY29tLmRhdGFkb2docS50YWdzLmVudic6IHByb3BzLnN0YWdlLFxuICAgICdjb20uZGF0YWRvZ2hxLnRhZ3Muc2VydmljZSc6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICdjb20uZGF0YWRvZ2hxLnRhZ3MudmVyc2lvbic6IHByb3BzLnZlcnNpb24sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGREYXRhZG9nU2lkZWNhcihwcm9wczoge1xuICBzY29wZTogQ29uc3RydWN0O1xuICB0YXNrRGVmaW5pdGlvbjogZWNzLlRhc2tEZWZpbml0aW9uO1xuICBhY2NvdW50TmFtZTogc3RyaW5nO1xuICB0ZWFtTmFtZTogc3RyaW5nO1xuICB0ZWFtSWRlbnRpZmllcjogc3RyaW5nO1xuICBzdGFnZTogc3RyaW5nO1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGRhdGFkb2dBcGlLZXlQYXJhbWV0ZXI6IHNzbS5JU3RyaW5nUGFyYW1ldGVyO1xuICBkYXRhZG9nU2l0ZTogc3RyaW5nO1xuICBkYXRhZG9nTG9nZ2luZ01vZGU6IERhdGFEb2dMb2dnaW5nTW9kZTtcbiAgYXBtR2V0UmVzb3VyY2VzVG9JZ25vcmU6IHN0cmluZ1tdO1xuICBjcHU6IG51bWJlcjtcbiAgbWVtb3J5TGltaXRNaUI6IG51bWJlcjtcbiAgZXNzZW50aWFsOiBib29sZWFuO1xuICBjb250YWluZXJUYWc6IHN0cmluZztcbiAgYWRkaXRpb25hbFRhZ3M6IHsgW2s6IHN0cmluZ106IHN0cmluZ30gfCB1bmRlZmluZWQ7XG59KTogZWNzLkNvbnRhaW5lckRlZmluaXRpb24ge1xuXG4gIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudElkLCByZWdpb24gfSA9IFN0YWNrLm9mKHByb3BzLnNjb3BlKTtcbiAgY29uc3QgZGF0YWRvZ1NpZGVjYXIgPSBwcm9wcy50YXNrRGVmaW5pdGlvbi5hZGRDb250YWluZXIoJ2RhdGFkb2ctYWdlbnQnLCB7XG4gICAgaW1hZ2U6IGVjcy5Db250YWluZXJJbWFnZS5mcm9tUmVnaXN0cnkoYHB1YmxpYy5lY3IuYXdzL2RhdGFkb2cvYWdlbnQ6JHtwcm9wcy5jb250YWluZXJUYWd9YCksXG4gICAgbG9nZ2luZzogc2V0dXBMb2dnaW5nKHsgLi4ucHJvcHMsIGNvbnRhaW5lclR5cGU6ICdkYXRhZG9nLXNpZGVjYXInIH0pLFxuICAgIGNwdTogcHJvcHMuY3B1LFxuICAgIG1lbW9yeUxpbWl0TWlCOiBwcm9wcy5tZW1vcnlMaW1pdE1pQixcbiAgICBlbnZpcm9ubWVudDoge1xuICAgICAgLy8gdW5pZmllZCB0YWdnaW5nLCBzZWUgaHR0cHM6Ly9kb2NzLmRhdGFkb2docS5jb20vZ2V0dGluZ19zdGFydGVkL3RhZ2dpbmcvdW5pZmllZF9zZXJ2aWNlX3RhZ2dpbmcvP3RhYj1lY3NcbiAgICAgIEREX0VOVjogcHJvcHMuc3RhZ2UsXG4gICAgICBERF9TRVJWSUNFOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIEREX1ZFUlNJT046IHByb3BzLnZlcnNpb24sXG4gICAgICAvLyBBUE0gYW5kIHRyYWNpbmcgc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL2FnZW50L2RvY2tlci9hcG0vP3RhYj1saW51eFxuICAgICAgRERfQVBNX0VOQUJMRUQ6ICd0cnVlJyxcbiAgICAgIEREX0FQTV9JR05PUkVfUkVTT1VSQ0VTOiBwcm9wcy5hcG1HZXRSZXNvdXJjZXNUb0lnbm9yZVxuICAgICAgICAubWFwKChhcG1HZXRSZXNvdXJjZVRvSWdub3JlKSA9PiBgR0VUICR7YXBtR2V0UmVzb3VyY2VUb0lnbm9yZX1gKVxuICAgICAgICAuam9pbignLCcpLFxuICAgICAgLy8gZ2VuZXJhbCBzZXR0aW5nc1xuICAgICAgRERfU0lURTogcHJvcHMuZGF0YWRvZ1NpdGUsXG4gICAgICBERF9UQUdTOiBnZXRUYWdzRW52aXJvbm1lbnRWYXJpYWJsZVZhbHVlKHsgLi4ucHJvcHMsIGFjY291bnRJZCwgcmVnaW9uLCBjb250YWluZXJUeXBlOiAnZGF0YWRvZy1zaWRlY2FyJyB9KSxcbiAgICAgIEVDU19GQVJHQVRFOiAndHJ1ZScsXG4gICAgICBERF9DT0xMRUNUX0dDRV9UQUdTOiAnZmFsc2UnLFxuICAgIH0sXG4gICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXRhRG9nL2RhdGFkb2ctYWdlbnQvYmxvYi9tYXN0ZXIvRG9ja2VyZmlsZXMvYWdlbnQvYW1kNjQvRG9ja2VyZmlsZSNMMTcxLUwxNzJcbiAgICBoZWFsdGhDaGVjazoge1xuICAgICAgc3RhcnRQZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMiksXG4gICAgICBpbnRlcnZhbDogRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDUpLFxuICAgICAgcmV0cmllczogMixcbiAgICAgIGNvbW1hbmQ6IFsnQ01ELVNIRUxMJywgJy9wcm9iZS5zaCddLFxuICAgIH0sXG4gICAgc2VjcmV0czoge1xuICAgICAgRERfQVBJX0tFWTogZWNzLlNlY3JldC5mcm9tU3NtUGFyYW1ldGVyKHByb3BzLmRhdGFkb2dBcGlLZXlQYXJhbWV0ZXIpLFxuICAgIH0sXG4gICAgZXNzZW50aWFsOiBwcm9wcy5lc3NlbnRpYWwsXG4gIH0pO1xuXG4gIGRhdGFkb2dTaWRlY2FyLmFkZFBvcnRNYXBwaW5ncyh7XG4gICAgY29udGFpbmVyUG9ydDogODEyNSxcbiAgICBwcm90b2NvbDogZWNzLlByb3RvY29sLlVEUCxcbiAgfSk7XG5cbiAgZGF0YWRvZ1NpZGVjYXIuYWRkUG9ydE1hcHBpbmdzKHtcbiAgICBjb250YWluZXJQb3J0OiA4MTI2LFxuICAgIHByb3RvY29sOiBlY3MuUHJvdG9jb2wuVENQLFxuICB9KTtcblxuICByZXR1cm4gZGF0YWRvZ1NpZGVjYXI7XG59XG5cbmZ1bmN0aW9uIGdldFRhZ3NFbnZpcm9ubWVudFZhcmlhYmxlVmFsdWUocHJvcHM6IHtcbiAgYWNjb3VudElkOiBzdHJpbmc7XG4gIGFjY291bnROYW1lOiBzdHJpbmc7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICB0ZWFtTmFtZTogc3RyaW5nO1xuICB0ZWFtSWRlbnRpZmllcjogc3RyaW5nO1xuICBzdGFnZTogc3RyaW5nO1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGNvbnRhaW5lclR5cGU6ICdzZXJ2aWNlJyB8ICdkYXRhZG9nLXNpZGVjYXInIHwgJ2ZsdWVudC1iaXQnO1xuICBhZGRpdGlvbmFsVGFnczogeyBbazogc3RyaW5nXTogc3RyaW5nfSB8IHVuZGVmaW5lZDtcbn0pOiBzdHJpbmcge1xuXG4gIGNvbnN0IHNlcGFyYXRvciA9IGRldGVybWluZVNlcGFyYXRvcihwcm9wcy5jb250YWluZXJUeXBlKTtcblxuICBjb25zdCB0YWdzID0ge1xuICAgIC8vIHVuaWZpZWQgdGFnZ2luZ1xuICAgIC8vIG92ZXJyaWRkZW4gYnkgZGVkaWNhdGVkIHNldHRpbmdzIChlbnZpcm9ubWVudCB2YXJpYWJsZXMvdGFncylcbiAgICAvLyBkdXBsaWNhdGVkIGhlcmUgdG8gZW5zdXJlIHRoZXkgYXJlIHVzZWQgKGFuZCBzb21ldGltZXMsIG5vdCBhbGwgdGhyZWUgdmFsdWVzIGFyZSBzdXBwb3J0ZWQpXG4gICAgZW52OiBwcm9wcy5zdGFnZSxcbiAgICBzZXJ2aWNlOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICB2ZXJzaW9uOiBwcm9wcy52ZXJzaW9uLFxuICAgIC8vIGFjY291bnQvdGVhbSBzcGVjaWZpYyBwYXJ0c1xuICAgIGFjY291bnRfaWQ6IHByb3BzLmFjY291bnRJZCxcbiAgICBhY2NvdW50X25hbWU6IHByb3BzLmFjY291bnROYW1lLFxuICAgIHJlZ2lvbjogcHJvcHMucmVnaW9uLFxuICAgIHRlYW06IHByb3BzLnRlYW1OYW1lLFxuICAgIHRlYW1faWRlbnRpZmllcjogcHJvcHMudGVhbUlkZW50aWZpZXIsXG4gIH07XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh7IC4uLnRhZ3MsIC4uLnByb3BzLmFkZGl0aW9uYWxUYWdzIH0pXG4gICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9OiR7dmFsdWV9YClcbiAgICAuam9pbihzZXBhcmF0b3IpO1xufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVTZXBhcmF0b3IoY29udGFpbmVyVHlwZTogJ3NlcnZpY2UnIHwgJ2RhdGFkb2ctc2lkZWNhcicgfCAnZmx1ZW50LWJpdCcpIHtcbiAgaWYgKGNvbnRhaW5lclR5cGUgPT09ICdkYXRhZG9nLXNpZGVjYXInKSB7XG4gICAgcmV0dXJuICcgJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJywnO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRGaXJlTGVuc0xvZ1JvdXRlcihwcm9wczoge1xuICB0YXNrRGVmaW5pdGlvbjogZWNzLlRhc2tEZWZpbml0aW9uO1xuICBjcHU6IG51bWJlcjtcbiAgbWVtb3J5TGltaXRNaUI6IG51bWJlcjtcbn0pOiBlY3MuQ29udGFpbmVyRGVmaW5pdGlvbiB7XG5cbiAgcmV0dXJuIHByb3BzLnRhc2tEZWZpbml0aW9uLmFkZEZpcmVsZW5zTG9nUm91dGVyKCdmaXJlbGVucy1sb2ctcm91dGVyJywge1xuICAgIGltYWdlOiBlY3MuQ29udGFpbmVySW1hZ2UuZnJvbVJlZ2lzdHJ5KCdwdWJsaWMuZWNyLmF3cy9hd3Mtb2JzZXJ2YWJpbGl0eS9hd3MtZm9yLWZsdWVudC1iaXQ6bGF0ZXN0JyksXG4gICAgZmlyZWxlbnNDb25maWc6IHtcbiAgICAgIHR5cGU6IGVjcy5GaXJlbGVuc0xvZ1JvdXRlclR5cGUuRkxVRU5UQklULFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBjb25maWdGaWxlVHlwZTogZWNzLkZpcmVsZW5zQ29uZmlnRmlsZVR5cGUuRklMRSxcbiAgICAgICAgY29uZmlnRmlsZVZhbHVlOiAnL2ZsdWVudC1iaXQvY29uZmlncy9wYXJzZS1qc29uLmNvbmYnLFxuICAgICAgICBlbmFibGVFQ1NMb2dNZXRhZGF0YTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcHU6IHByb3BzLmNwdSxcbiAgICBtZW1vcnlMaW1pdE1pQjogcHJvcHMubWVtb3J5TGltaXRNaUIsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBMb2dnaW5nKHByb3BzOiB7XG4gIHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIGFjY291bnROYW1lOiBzdHJpbmc7XG4gIHRlYW1OYW1lOiBzdHJpbmc7XG4gIHRlYW1JZGVudGlmaWVyOiBzdHJpbmc7XG4gIHN0YWdlOiBzdHJpbmc7XG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZGF0YWRvZ0FwaUtleVBhcmFtZXRlcjogc3NtLklTdHJpbmdQYXJhbWV0ZXI7XG4gIGRhdGFkb2dMb2dnaW5nTW9kZTogRGF0YURvZ0xvZ2dpbmdNb2RlO1xuICBkYXRhZG9nU2l0ZTogc3RyaW5nO1xuICBjb250YWluZXJUeXBlOiAnc2VydmljZScgfCAnZGF0YWRvZy1zaWRlY2FyJztcbiAgYWRkaXRpb25hbFRhZ3M6IHsgW2s6IHN0cmluZ106IHN0cmluZ30gfCB1bmRlZmluZWQ7XG59KTogZWNzLkxvZ0RyaXZlciB7XG5cbiAgbGV0IGxvZ0dyb3VwTmFtZTogc3RyaW5nO1xuICBsZXQgbG9nR3JvdXBJZDogc3RyaW5nO1xuICBsZXQgY29udGFpbmVyVHlwZUNhbWVsQ2FzZTtcblxuICBzd2l0Y2ggKHByb3BzLmNvbnRhaW5lclR5cGUpIHtcblxuICAgIGNhc2UgJ3NlcnZpY2UnOlxuICAgICAgbG9nR3JvdXBJZCA9ICdMb2dHcm91cEZvclNlcnZpY2UnO1xuICAgICAgbG9nR3JvdXBOYW1lID0gcHJvcHMuc2VydmljZU5hbWU7XG4gICAgICBjb250YWluZXJUeXBlQ2FtZWxDYXNlID0gJ1NlcnZpY2UnO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkYXRhZG9nLXNpZGVjYXInOlxuICAgICAgbG9nR3JvdXBJZCA9ICdMb2dHcm91cEZvckRhdGFkb2dTaWRlY2FyJztcbiAgICAgIGxvZ0dyb3VwTmFtZSA9IGAke3Byb3BzLnNlcnZpY2VOYW1lfS0ke3Byb3BzLmNvbnRhaW5lclR5cGV9YDtcbiAgICAgIGNvbnRhaW5lclR5cGVDYW1lbENhc2UgPSAnRGF0YWRvZ1NpZGVjYXInO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBjb25zdCB7IGFjY291bnQ6IGFjY291bnRJZCwgcmVnaW9uIH0gPSBTdGFjay5vZihwcm9wcy5zY29wZSk7XG5cbiAgc3dpdGNoIChwcm9wcy5kYXRhZG9nTG9nZ2luZ01vZGUpIHtcblxuICAgIGNhc2UgRGF0YURvZ0xvZ2dpbmdNb2RlLkFXU19GSVJFX0xFTlM6XG4gICAgICAvLyBUT0RPIGNhbiB3ZSB1c2UgYHNlY3JldE9wdGlvbnNgIGhlcmUgYXMgd2VsbCwgZS5nLiBhcyBpbiBodHRwczovL2dpdGh1Yi5jb20vYXdzLXNhbXBsZXMvYW1hem9uLWVjcy1maXJlbGVucy1leGFtcGxlcy9ibG9iL21haW5saW5lL2V4YW1wbGVzL2ZsdWVudC1iaXQvZGF0YWRvZy90YXNrLWRlZmluaXRpb24uanNvbiNMMzMtTDM2XG4gICAgICAvLyBQcm9iYWJseSBub3QsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzgxNzRcbiAgICAgIHJldHVybiBlY3MuTG9nRHJpdmVycy5maXJlbGVucyh7XG4gICAgICAgIC8vIHNlZSBodHRwczovL2RvY3MuZGF0YWRvZ2hxLmNvbS9pbnRlZ3JhdGlvbnMvZmx1ZW50Yml0LyNjb25maWd1cmF0aW9uLXBhcmFtZXRlcnNcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIE5hbWU6ICdkYXRhZG9nJyxcbiAgICAgICAgICBNYXRjaDogJyonLFxuICAgICAgICAgIEhvc3Q6IGBodHRwLWludGFrZS5sb2dzLiR7cHJvcHMuZGF0YWRvZ1NpdGV9YCxcbiAgICAgICAgICBUTFM6ICdvbicsXG4gICAgICAgICAgYXBpa2V5OiBwcm9wcy5kYXRhZG9nQXBpS2V5UGFyYW1ldGVyLnN0cmluZ1ZhbHVlLFxuICAgICAgICAgIGNvbXByZXNzOiAnZ3ppcCcsXG4gICAgICAgICAgZGRfc2VydmljZTogbG9nR3JvdXBOYW1lLFxuICAgICAgICAgIGRkX3NvdXJjZTogJ3Jpby1mYXJnYXRlJyxcbiAgICAgICAgICBkZF9tZXNzYWdlX2tleTogJ2xvZycsXG4gICAgICAgICAgZGRfdGFnczogZ2V0VGFnc0Vudmlyb25tZW50VmFyaWFibGVWYWx1ZSh7IC4uLnByb3BzLCBhY2NvdW50SWQsIHJlZ2lvbiwgY29udGFpbmVyVHlwZTogJ2ZsdWVudC1iaXQnIH0pLFxuICAgICAgICAgIHByb3ZpZGVyOiAnZWNzJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgY2FzZSBEYXRhRG9nTG9nZ2luZ01vZGUuRk9SV0FSREVSX0xBTUJEQTpcbiAgICAgIGNvbnN0IGxvZ0dyb3VwRm9yRm9yd2FyZGluZ0xhbWJkYSA9IG5ldyBsb2dzLkxvZ0dyb3VwKHByb3BzLnNjb3BlLCBsb2dHcm91cElkLCB7XG4gICAgICAgIGxvZ0dyb3VwTmFtZSxcbiAgICAgICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuT05FX1dFRUssXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGxvZ0ZvcndhcmRlckxhbWJkYUFybiA9IEZuLmltcG9ydFZhbHVlKCdjdXN0b20tcmVzb3VyY2UtZGF0YWRvZy1sb2dmb3J3YXJkZXItZnVuY3Rpb24tYXJuJyk7XG4gICAgICBjb25zdCBjZm5QZXJtaXNzaW9uID0gbmV3IGxhbWJkYS5DZm5QZXJtaXNzaW9uKHByb3BzLnNjb3BlLCBgTG9nRm9yd2FyZGVyUGVybWlzc2lvbiR7Y29udGFpbmVyVHlwZUNhbWVsQ2FzZX1gLCB7XG4gICAgICAgIGFjdGlvbjogJ2xhbWJkYTpJbnZva2VGdW5jdGlvbicsXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogbG9nRm9yd2FyZGVyTGFtYmRhQXJuLFxuICAgICAgICBwcmluY2lwYWw6IGBsb2dzLiR7cmVnaW9ufS5hbWF6b25hd3MuY29tYCxcbiAgICAgICAgc291cmNlQXJuOiBsb2dHcm91cEZvckZvcndhcmRpbmdMYW1iZGEubG9nR3JvdXBBcm4sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNmblN1YnNjcmlwdGlvbkZpbHRlciA9IG5ldyBsb2dzLkNmblN1YnNjcmlwdGlvbkZpbHRlcihcbiAgICAgICAgcHJvcHMuc2NvcGUsXG4gICAgICAgIGBMb2dGb3J3YXJkZXJTdWJzY3JpcHRpb25GaWx0ZXIke2NvbnRhaW5lclR5cGVDYW1lbENhc2V9YCxcbiAgICAgICAge1xuICAgICAgICAgIGRlc3RpbmF0aW9uQXJuOiBsb2dGb3J3YXJkZXJMYW1iZGFBcm4sXG4gICAgICAgICAgZmlsdGVyUGF0dGVybjogJycsXG4gICAgICAgICAgbG9nR3JvdXBOYW1lOiBsb2dHcm91cEZvckZvcndhcmRpbmdMYW1iZGEubG9nR3JvdXBOYW1lLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIGNmblN1YnNjcmlwdGlvbkZpbHRlci5hZGREZXBlbmRzT24oY2ZuUGVybWlzc2lvbik7XG4gICAgICByZXR1cm4gZWNzLkxvZ0RyaXZlcnMuYXdzTG9ncyh7XG4gICAgICAgIHN0cmVhbVByZWZpeDogcHJvcHMuY29udGFpbmVyVHlwZSxcbiAgICAgICAgbG9nR3JvdXA6IGxvZ0dyb3VwRm9yRm9yd2FyZGluZ0xhbWJkYSxcbiAgICAgIH0pO1xuXG4gICAgY2FzZSBEYXRhRG9nTG9nZ2luZ01vZGUuTk9ORTpcbiAgICAgIGNvbnN0IGxvZ0dyb3VwSW5DbG91ZHdhdGNoT25seSA9IG5ldyBsb2dzLkxvZ0dyb3VwKHByb3BzLnNjb3BlLCBsb2dHcm91cElkLCB7XG4gICAgICAgIHJldGVudGlvbjogbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9XRUVLLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZWNzLkxvZ0RyaXZlcnMuYXdzTG9ncyh7XG4gICAgICAgIHN0cmVhbVByZWZpeDogcHJvcHMuY29udGFpbmVyVHlwZSxcbiAgICAgICAgbG9nR3JvdXA6IGxvZ0dyb3VwSW5DbG91ZHdhdGNoT25seSxcbiAgICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVMb2dnaW5nQW5kTW9uaXRvcmluZ0FyZVJlYWR5QmVmb3JlU2VydmljZVN0YXJ0cyhyaW9GYXJnYXRlU2VydmljZTogUmlvRmFyZ2F0ZVNlcnZpY2UpOiB2b2lkIHtcblxuICByaW9GYXJnYXRlU2VydmljZS5zZXJ2aWNlQ29udGFpbmVyRGVmaW5pdGlvbi5hZGRDb250YWluZXJEZXBlbmRlbmNpZXMoe1xuICAgIGNvbnRhaW5lcjogcmlvRmFyZ2F0ZVNlcnZpY2UuZGF0YWRvZ1NpZGVDYXJDb250YWluZXJEZWZpbml0aW9uLFxuICAgIGNvbmRpdGlvbjogZWNzLkNvbnRhaW5lckRlcGVuZGVuY3lDb25kaXRpb24uSEVBTFRIWSxcbiAgfSk7XG5cbiAgaWYgKHJpb0ZhcmdhdGVTZXJ2aWNlLmxvZ1JvdXRlckNvbnRhaW5lckRlZmluaXRpb24pIHtcbiAgICByaW9GYXJnYXRlU2VydmljZS5zZXJ2aWNlQ29udGFpbmVyRGVmaW5pdGlvbi5hZGRDb250YWluZXJEZXBlbmRlbmNpZXMoe1xuICAgICAgY29udGFpbmVyOiByaW9GYXJnYXRlU2VydmljZS5sb2dSb3V0ZXJDb250YWluZXJEZWZpbml0aW9uLFxuICAgICAgY29uZGl0aW9uOiBlY3MuQ29udGFpbmVyRGVwZW5kZW5jeUNvbmRpdGlvbi5TVEFSVCxcbiAgICB9KTtcblxuICAgIGlmIChyaW9GYXJnYXRlU2VydmljZS5kYXRhZG9nU2lkZUNhckNvbnRhaW5lckRlZmluaXRpb24ubG9nRHJpdmVyQ29uZmlnPy5sb2dEcml2ZXIgPT09ICdhd3NmaXJlbGVucycpIHtcbiAgICAgIHJpb0ZhcmdhdGVTZXJ2aWNlLmRhdGFkb2dTaWRlQ2FyQ29udGFpbmVyRGVmaW5pdGlvbi5hZGRDb250YWluZXJEZXBlbmRlbmNpZXMoe1xuICAgICAgICBjb250YWluZXI6IHJpb0ZhcmdhdGVTZXJ2aWNlLmxvZ1JvdXRlckNvbnRhaW5lckRlZmluaXRpb24sXG4gICAgICAgIGNvbmRpdGlvbjogZWNzLkNvbnRhaW5lckRlcGVuZGVuY3lDb25kaXRpb24uU1RBUlQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==