terraform-cdk-serverless-github-actions-runner-controller 0.0.1 → 0.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.
package/lib/lib/aws.js CHANGED
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
+ var _a;
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
3
4
  exports.Aws = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
4
6
  const cloudwatch_log_group_1 = require("@cdktf/provider-aws/lib/cloudwatch-log-group");
5
7
  const data_aws_caller_identity_1 = require("@cdktf/provider-aws/lib/data-aws-caller-identity");
6
8
  const data_aws_region_1 = require("@cdktf/provider-aws/lib/data-aws-region");
@@ -9,6 +11,8 @@ const data_aws_subnets_1 = require("@cdktf/provider-aws/lib/data-aws-subnets");
9
11
  const ecs_cluster_1 = require("@cdktf/provider-aws/lib/ecs-cluster");
10
12
  const ecs_service_1 = require("@cdktf/provider-aws/lib/ecs-service");
11
13
  const ecs_task_definition_1 = require("@cdktf/provider-aws/lib/ecs-task-definition");
14
+ const efs_file_system_1 = require("@cdktf/provider-aws/lib/efs-file-system");
15
+ const efs_mount_target_1 = require("@cdktf/provider-aws/lib/efs-mount-target");
12
16
  const iam_policy_1 = require("@cdktf/provider-aws/lib/iam-policy");
13
17
  const iam_role_1 = require("@cdktf/provider-aws/lib/iam-role");
14
18
  const iam_role_policy_attachment_1 = require("@cdktf/provider-aws/lib/iam-role-policy-attachment");
@@ -16,62 +20,67 @@ const provider_1 = require("@cdktf/provider-aws/lib/provider");
16
20
  const cdktf_1 = require("cdktf");
17
21
  const constructs_1 = require("constructs");
18
22
  const variables_1 = require("./variables");
19
- const efs_file_system_1 = require("@cdktf/provider-aws/lib/efs-file-system");
20
- const efs_mount_target_1 = require("@cdktf/provider-aws/lib/efs-mount-target");
21
23
  class Aws extends constructs_1.Construct {
22
- constructor(scope, id) {
24
+ constructor(scope, id, props) {
23
25
  super(scope, id);
24
26
  new provider_1.AwsProvider(this, 'aws', {});
25
27
  const identity = new data_aws_caller_identity_1.DataAwsCallerIdentity(this, 'Identity', {});
26
28
  const region = new data_aws_region_1.DataAwsRegion(this, 'Region', {});
27
- const { pat, githubConfigUrl } = (0, variables_1.commonVariables)(this);
29
+ const { pat, githubConfigUrl, autoscalerImage } = (0, variables_1.commonVariables)(this);
28
30
  const cluster = new ecs_cluster_1.EcsCluster(this, 'Cluster', {
29
- name: 'gha-runner-cluster',
31
+ name: props.clusterName,
30
32
  });
31
- const runnerRole = new iam_role_1.IamRole(this, 'RunnerRole', {
33
+ const subnets = new data_aws_subnets_1.DataAwsSubnets(this, 'Subnets', {
34
+ filter: props.subnetFilters,
35
+ });
36
+ const securityGroups = new data_aws_security_groups_1.DataAwsSecurityGroups(this, 'SecurityGroups', {
37
+ filter: props.securityGroupFilters,
38
+ });
39
+ const autoscalerRole = new iam_role_1.IamRole(this, 'AutoscalerRole', {
32
40
  assumeRolePolicy: cdktf_1.Fn.jsonencode({
33
- 'Version': '2012-10-17',
34
- 'Statement': [
41
+ Version: '2012-10-17',
42
+ Statement: [
35
43
  {
36
- 'Effect': 'Allow',
37
- 'Principal': {
38
- 'Service': 'ecs-tasks.amazonaws.com'
44
+ Effect: 'Allow',
45
+ Principal: {
46
+ Service: 'ecs-tasks.amazonaws.com',
39
47
  },
40
- 'Action': 'sts:AssumeRole'
41
- }
42
- ]
43
- })
48
+ Action: 'sts:AssumeRole',
49
+ },
50
+ ],
51
+ }),
44
52
  });
45
- const autoscalerRole = new iam_role_1.IamRole(this, 'AutoscalerRole', {
53
+ const runnerRole = new iam_role_1.IamRole(this, 'RunnerRole', {
46
54
  assumeRolePolicy: cdktf_1.Fn.jsonencode({
47
- 'Version': '2012-10-17',
48
- 'Statement': [
55
+ Version: '2012-10-17',
56
+ Statement: [
49
57
  {
50
- 'Effect': 'Allow',
51
- 'Principal': {
52
- 'Service': 'ecs-tasks.amazonaws.com'
58
+ Effect: 'Allow',
59
+ Principal: {
60
+ Service: 'ecs-tasks.amazonaws.com',
53
61
  },
54
- 'Action': 'sts:AssumeRole'
55
- }
56
- ]
57
- })
62
+ Action: 'sts:AssumeRole',
63
+ },
64
+ ],
65
+ }),
58
66
  });
59
67
  const ecsTaskExecutionRole = new iam_role_1.IamRole(this, 'TaskExecutionRole', {
60
68
  assumeRolePolicy: cdktf_1.Fn.jsonencode({
61
- 'Version': '2012-10-17',
62
- 'Statement': [
69
+ Version: '2012-10-17',
70
+ Statement: [
63
71
  {
64
- 'Effect': 'Allow',
65
- 'Principal': {
66
- 'Service': 'ecs-tasks.amazonaws.com'
72
+ Effect: 'Allow',
73
+ Principal: {
74
+ Service: 'ecs-tasks.amazonaws.com',
67
75
  },
68
- 'Action': 'sts:AssumeRole'
69
- }
70
- ]
76
+ Action: 'sts:AssumeRole',
77
+ },
78
+ ],
71
79
  }),
72
- managedPolicyArns: [
73
- 'arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy'
74
- ]
80
+ });
81
+ new iam_role_policy_attachment_1.IamRolePolicyAttachment(this, 'TeskExecutionRoleAttachment', {
82
+ policyArn: 'arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy',
83
+ role: ecsTaskExecutionRole.name,
75
84
  });
76
85
  const runnerLogGroup = new cloudwatch_log_group_1.CloudwatchLogGroup(this, 'RunnerLogGroup', {
77
86
  name: '/ecs/GHA',
@@ -79,99 +88,152 @@ class Aws extends constructs_1.Construct {
79
88
  const autoscalerLogGroup = new cloudwatch_log_group_1.CloudwatchLogGroup(this, 'AutoscalerLogGroup', {
80
89
  name: '/ecs/Autoscaler',
81
90
  });
82
- const subnets = new data_aws_subnets_1.DataAwsSubnets(this, 'Subnets', {});
83
- const securityGroups = new data_aws_security_groups_1.DataAwsSecurityGroups(this, 'SecurityGroups');
84
- // EFS volume to allow sharing data between tasks
85
- const efs = new efs_file_system_1.EfsFileSystem(this, 'efs', {
86
- throughputMode: 'elastic',
87
- tags: {
88
- Name: 'work'
89
- }
90
- });
91
- const externalsEfs = new efs_file_system_1.EfsFileSystem(this, 'externalsEfs', {
92
- throughputMode: 'elastic',
93
- tags: {
94
- Name: 'externals'
95
- }
96
- });
97
- // Each subnet in VPC are on different AZs, so creating mountpoint to each
98
- const iterator = cdktf_1.TerraformIterator.fromList(subnets.ids);
99
- new efs_mount_target_1.EfsMountTarget(this, 'EfsMountTarget', {
100
- forEach: iterator,
101
- fileSystemId: efs.id,
102
- subnetId: iterator.value
103
- });
104
- new efs_mount_target_1.EfsMountTarget(this, 'ExternalsEfsMountTarget', {
105
- forEach: iterator,
106
- fileSystemId: externalsEfs.id,
107
- subnetId: iterator.value
108
- });
109
- const runnerVolumeName = 'work';
110
- const externalsVolumeName = 'externals';
111
- const runnerContainerDefinitions = [
91
+ const autoscalerContainerDefinition = {
92
+ name: 'autoscaler',
93
+ image: autoscalerImage.stringValue,
94
+ essential: true,
95
+ environment: [
96
+ {
97
+ name: 'PAT',
98
+ value: pat.value,
99
+ },
100
+ {
101
+ name: 'GITHUB_CONFIG_URL',
102
+ value: githubConfigUrl.value,
103
+ },
104
+ {
105
+ name: 'ECS_CLUSTER',
106
+ value: cluster.arn,
107
+ },
108
+ {
109
+ name: 'ECS_SUBNETS',
110
+ value: cdktf_1.Fn.join(',', subnets.ids),
111
+ },
112
+ {
113
+ name: 'ECS_SECURITY_GROUPS',
114
+ value: cdktf_1.Fn.join(',', securityGroups.ids),
115
+ },
116
+ {
117
+ name: 'SCALE_SET_NAME',
118
+ value: 'ecs-runner-set',
119
+ },
120
+ ],
121
+ logConfiguration: {
122
+ logDriver: 'awslogs',
123
+ options: {
124
+ 'awslogs-group': autoscalerLogGroup.name,
125
+ 'awslogs-region': region.name,
126
+ 'awslogs-stream-prefix': 'ecs',
127
+ },
128
+ },
129
+ };
130
+ const runnerVolume = [];
131
+ const runnerContainerDefinition = {
132
+ name: 'runner',
133
+ image: 'ghcr.io/actions/actions-runner:2.323.0',
134
+ essential: true,
135
+ entryPoint: ['/home/runner/run.sh'],
136
+ environment: [
137
+ {
138
+ name: 'ECS_CLUSTER_NAME',
139
+ value: cluster.name,
140
+ },
141
+ {
142
+ name: 'ACTIONS_RUNNER_POD_NAME',
143
+ value: 'gha-pod',
144
+ },
145
+ {
146
+ name: 'ECS_SUBNETS',
147
+ value: cdktf_1.Fn.join(',', subnets.ids),
148
+ },
149
+ {
150
+ name: 'ECS_SECURITY_GROUPS',
151
+ value: cdktf_1.Fn.join(',', securityGroups.ids),
152
+ },
153
+ {
154
+ name: 'ECS_TASK_ROLE',
155
+ value: runnerRole.arn,
156
+ },
157
+ {
158
+ name: 'ECS_EXECUTION_ROLE',
159
+ value: ecsTaskExecutionRole.arn,
160
+ },
161
+ ],
162
+ mountPoints: [],
163
+ logConfiguration: {
164
+ logDriver: 'awslogs',
165
+ options: {
166
+ 'awslogs-group': runnerLogGroup.name,
167
+ 'awslogs-region': region.name,
168
+ 'awslogs-stream-prefix': 'ecs',
169
+ },
170
+ },
171
+ };
172
+ if (props.containerSupport) {
173
+ // EFS volume to allow sharing data between tasks
174
+ const efs = new efs_file_system_1.EfsFileSystem(this, 'efs', {
175
+ throughputMode: 'elastic',
176
+ tags: {
177
+ Name: 'work',
178
+ },
179
+ });
180
+ const externalsEfs = new efs_file_system_1.EfsFileSystem(this, 'externalsEfs', {
181
+ throughputMode: 'elastic',
182
+ tags: {
183
+ Name: 'externals',
184
+ },
185
+ });
186
+ // Each subnet in VPC are on different AZs, so creating mountpoint to each
187
+ const iterator = cdktf_1.TerraformIterator.fromList(subnets.ids);
188
+ new efs_mount_target_1.EfsMountTarget(this, 'EfsMountTarget', {
189
+ forEach: iterator,
190
+ fileSystemId: efs.id,
191
+ subnetId: iterator.value,
192
+ });
193
+ new efs_mount_target_1.EfsMountTarget(this, 'ExternalsEfsMountTarget', {
194
+ forEach: iterator,
195
+ fileSystemId: externalsEfs.id,
196
+ subnetId: iterator.value,
197
+ });
198
+ const runnerVolumeName = 'work';
199
+ const externalsVolumeName = 'externals';
200
+ runnerVolume.push({
201
+ name: runnerVolumeName,
202
+ efsVolumeConfiguration: {
203
+ fileSystemId: efs.id,
204
+ },
205
+ },
206
+ // This doesn't work with same volume, as volume is initially empty so it can't map to it's "externals" directory
112
207
  {
113
- name: 'runner',
114
- image: 'ghcr.io/hi-fi/actions-runner:ecs',
115
- command: ['/bin/sh', '-c', 'export EXECID=$(cat /proc/sys/kernel/random/uuid) && sudo mkdir -p /tmp/_work/$EXECID && sudo chown runner:runner /tmp/_work/$EXECID && ln -s /tmp/_work/$EXECID _work && sudo chown runner:runner /tmp/externals && /home/runner/run.sh ; sudo rm -r /tmp/_work/$EXECID'],
116
- essential: true,
117
- environment: [
118
- {
119
- name: 'EFS_ID',
120
- value: efs.id
121
- },
122
- {
123
- name: 'EXTERNALS_EFS_ID',
124
- value: externalsEfs.id
125
- },
126
- {
127
- name: 'ECS_CLUSTER_NAME',
128
- value: cluster.name
129
- },
130
- {
131
- name: 'ACTIONS_RUNNER_POD_NAME',
132
- value: 'gha-pod'
133
- },
134
- {
135
- name: 'ACTIONS_RUNNER_REQUIRE_JOB_CONTAINER',
136
- value: 'false'
137
- },
138
- {
139
- name: 'ECS_SUBNETS',
140
- value: cdktf_1.Fn.join(',', subnets.ids)
141
- },
142
- {
143
- name: 'ECS_SECURITY_GROUPS',
144
- value: cdktf_1.Fn.join(',', securityGroups.ids)
145
- },
146
- {
147
- name: 'ECS_TASK_ROLE',
148
- value: runnerRole.arn
149
- },
150
- {
151
- name: 'ECS_EXECUTION_ROLE',
152
- value: ecsTaskExecutionRole.arn
153
- }
154
- ],
155
- mountPoints: [
156
- {
157
- sourceVolume: runnerVolumeName,
158
- containerPath: '/tmp/_work',
159
- },
160
- {
161
- sourceVolume: externalsVolumeName,
162
- containerPath: '/tmp/externals',
163
- }
164
- ],
165
- logConfiguration: {
166
- logDriver: 'awslogs',
167
- options: {
168
- "awslogs-group": runnerLogGroup.name,
169
- "awslogs-region": region.name,
170
- "awslogs-stream-prefix": "ecs",
171
- }
172
- }
173
- }
174
- ];
208
+ name: externalsVolumeName,
209
+ efsVolumeConfiguration: {
210
+ fileSystemId: externalsEfs.id,
211
+ },
212
+ });
213
+ runnerContainerDefinition.mountPoints?.push({
214
+ sourceVolume: runnerVolumeName,
215
+ containerPath: '/tmp/_work',
216
+ }, {
217
+ sourceVolume: externalsVolumeName,
218
+ containerPath: '/tmp/externals',
219
+ });
220
+ runnerContainerDefinition.environment?.push({
221
+ name: 'EFS_ID',
222
+ value: efs.id,
223
+ }, {
224
+ name: 'EXTERNALS_EFS_ID',
225
+ value: externalsEfs.id,
226
+ }, {
227
+ name: 'ACTIONS_RUNNER_REQUIRE_JOB_CONTAINER',
228
+ value: 'false',
229
+ });
230
+ runnerContainerDefinition.command = [
231
+ '/bin/sh',
232
+ '-c',
233
+ 'export EXECID=$(cat /proc/sys/kernel/random/uuid) && sudo mkdir -p /tmp/_work/$EXECID && sudo chown runner:runner /tmp/_work/$EXECID && ln -s /tmp/_work/$EXECID _work && sudo chown runner:runner /tmp/externals && /home/runner/run.sh ; sudo rm -r /tmp/_work/$EXECID',
234
+ ];
235
+ runnerContainerDefinition.image = 'ghcr.io/hi-fi/actions-runner:ecs';
236
+ }
175
237
  // TODO: Images through caching: https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache.html (requires authentication)
176
238
  // TODO: Pass Execution role to job task: https://www.ernestchiang.com/en/posts/2021/using-amazon-ecs-exec/#1-grant-permissions-ecs-task-iam-role
177
239
  // TODO: Pass Task role to job task
@@ -179,194 +241,131 @@ class Aws extends constructs_1.Construct {
179
241
  family: 'GHA',
180
242
  taskRoleArn: runnerRole.arn,
181
243
  executionRoleArn: ecsTaskExecutionRole.arn,
182
- containerDefinitions: cdktf_1.Fn.jsonencode(runnerContainerDefinitions),
244
+ containerDefinitions: cdktf_1.Fn.jsonencode([runnerContainerDefinition]),
183
245
  cpu: '1024',
184
246
  memory: '2048',
185
- requiresCompatibilities: [
186
- 'FARGATE'
187
- ],
247
+ requiresCompatibilities: ['FARGATE'],
188
248
  runtimePlatform: {
189
249
  cpuArchitecture: 'X86_64',
190
- operatingSystemFamily: 'LINUX'
250
+ operatingSystemFamily: 'LINUX',
191
251
  },
192
252
  networkMode: 'awsvpc',
193
- volume: [
194
- {
195
- name: runnerVolumeName,
196
- efsVolumeConfiguration: {
197
- fileSystemId: efs.id,
198
- },
199
- },
200
- // This doesn't work with same volume, as volume is initially empty so it can't map to it's "externals" directory
201
- {
202
- name: externalsVolumeName,
203
- efsVolumeConfiguration: {
204
- fileSystemId: externalsEfs.id,
205
- }
206
- }
207
- ]
253
+ volume: runnerVolume,
254
+ });
255
+ autoscalerContainerDefinition.environment?.push({
256
+ name: 'TASK_DEFINITION_ARN',
257
+ value: runnerTaskDefinition.arn,
208
258
  });
209
259
  const autoscalerTaskDefinition = new ecs_task_definition_1.EcsTaskDefinition(this, 'AutoscalerTaskDefinition', {
210
260
  family: 'Autoscaler',
211
261
  taskRoleArn: autoscalerRole.arn,
212
262
  executionRoleArn: ecsTaskExecutionRole.arn,
213
- containerDefinitions: cdktf_1.Fn.jsonencode([
214
- {
215
- name: 'autoscaler',
216
- image: 'ghcr.io/hi-fi/gha-runners-on-managed-env:test',
217
- essential: true,
218
- environment: [
219
- {
220
- name: 'PAT',
221
- value: pat.value
222
- },
223
- {
224
- name: 'GITHUB_CONFIG_URL',
225
- value: githubConfigUrl.value
226
- },
227
- {
228
- name: 'TASK_DEFINITION_ARN',
229
- value: runnerTaskDefinition.arn
230
- },
231
- {
232
- name: 'ECS_CLUSTER',
233
- value: cluster.arn
234
- },
235
- {
236
- name: 'ECS_SUBNETS',
237
- value: cdktf_1.Fn.join(',', subnets.ids)
238
- },
239
- {
240
- name: 'ECS_SECURITY_GROUPS',
241
- value: cdktf_1.Fn.join(',', securityGroups.ids)
242
- },
243
- {
244
- name: 'SCALE_SET_NAME',
245
- value: 'ecs-runner-set'
246
- },
247
- ],
248
- logConfiguration: {
249
- logDriver: 'awslogs',
250
- options: {
251
- "awslogs-group": autoscalerLogGroup.name,
252
- "awslogs-region": region.name,
253
- "awslogs-stream-prefix": "ecs",
254
- }
255
- }
256
- }
257
- ]),
263
+ containerDefinitions: cdktf_1.Fn.jsonencode([autoscalerContainerDefinition]),
258
264
  cpu: '256',
259
265
  memory: '512',
260
- requiresCompatibilities: [
261
- 'FARGATE'
262
- ],
266
+ requiresCompatibilities: ['FARGATE'],
263
267
  runtimePlatform: {
264
268
  cpuArchitecture: 'X86_64',
265
- operatingSystemFamily: 'LINUX'
269
+ operatingSystemFamily: 'LINUX',
266
270
  },
267
271
  networkMode: 'awsvpc',
268
272
  });
273
+ const runnerPolicyDefinition = {
274
+ Version: '2012-10-17',
275
+ Statement: [
276
+ {
277
+ Sid: 'StartandMonitorTask',
278
+ Effect: 'Allow',
279
+ Action: [
280
+ 'ecs:RunTask',
281
+ 'ecs:TagResource',
282
+ 'ecs:ListTaskDefinitions',
283
+ 'ecs:ListTasks',
284
+ 'ecs:StopTask',
285
+ 'ecs:RegisterTaskDefinition',
286
+ 'ecs:DescribeTaskDefinition',
287
+ 'ecs:DeregisterTaskDefinition',
288
+ 'ecs:DeleteTaskDefinitions',
289
+ 'ecs:ExecuteCommand',
290
+ // Needed for waiting
291
+ 'ecs:DescribeTasks',
292
+ 'logs:GetLogEvents',
293
+ 'iam:PassRole',
294
+ 'logs:StartLiveTail',
295
+ 'logs:CreateLogStream',
296
+ ],
297
+ Resource: [
298
+ `arn:aws:ecs:${region.name}:${identity.accountId}:task-definition/gha-pod-workflow:*`,
299
+ cluster.arn,
300
+ // Triggerer has to be allowed to pass both task and task execution role
301
+ ecsTaskExecutionRole.arn,
302
+ runnerRole.arn,
303
+ `arn:aws:ecs:${region.name}:${identity.accountId}:task/${cluster.name}/*`,
304
+ //TODO: reorder rights so that listing is only one with star
305
+ '*',
306
+ ],
307
+ },
308
+ {
309
+ Sid: 'GetVpcInfo',
310
+ Effect: 'Allow',
311
+ Action: ['ec2:DescribeSubnets', 'ec2:DescribeSecurityGroups'],
312
+ Resource: '*',
313
+ },
314
+ {
315
+ Sid: 'ExecCommands',
316
+ Effect: 'Allow',
317
+ Action: [
318
+ 'ssmmessages:CreateControlChannel',
319
+ 'ssmmessages:CreateDataChannel',
320
+ 'ssmmessages:OpenControlChannel',
321
+ 'ssmmessages:OpenDataChannel',
322
+ ],
323
+ Resource: '*',
324
+ },
325
+ ],
326
+ };
269
327
  const runnerPolicy = new iam_policy_1.IamPolicy(this, 'RunnerPolicy', {
270
- policy: cdktf_1.Fn.jsonencode({
271
- 'Version': '2012-10-17',
272
- 'Statement': [
273
- {
274
- 'Sid': 'StartandMonitorTask',
275
- 'Effect': 'Allow',
276
- 'Action': [
277
- 'ecs:RunTask',
278
- 'ecs:TagResource',
279
- 'ecs:ListTaskDefinitions',
280
- 'ecs:ListTasks',
281
- 'ecs:StopTask',
282
- 'ecs:RegisterTaskDefinition',
283
- 'ecs:DescribeTaskDefinition',
284
- 'ecs:DeregisterTaskDefinition',
285
- 'ecs:DeleteTaskDefinitions',
286
- 'ecs:ExecuteCommand',
287
- // Needed for waiting
288
- 'ecs:DescribeTasks',
289
- 'logs:GetLogEvents',
290
- 'iam:PassRole',
291
- 'logs:StartLiveTail',
292
- 'logs:CreateLogStream',
293
- ],
294
- 'Resource': [
295
- `arn:aws:ecs:${region.name}:${identity.accountId}:task-definition/gha-pod-workflow:*`,
296
- cluster.arn,
297
- // Triggerer has to be allowed to pass both task and task execution role
298
- ecsTaskExecutionRole.arn,
299
- runnerRole.arn,
300
- `arn:aws:ecs:${region.name}:${identity.accountId}:task/${cluster.name}/*`,
301
- //TODO: reorder rights so that listing is only one with star
302
- '*'
303
- ]
304
- },
305
- {
306
- 'Sid': 'GetVpcInfo',
307
- 'Effect': 'Allow',
308
- 'Action': [
309
- 'ec2:DescribeSubnets',
310
- 'ec2:DescribeSecurityGroups'
311
- ],
312
- 'Resource': '*'
313
- },
314
- {
315
- 'Sid': 'ExecCommands',
316
- 'Effect': 'Allow',
317
- 'Action': [
318
- 'ssmmessages:CreateControlChannel',
319
- 'ssmmessages:CreateDataChannel',
320
- 'ssmmessages:OpenControlChannel',
321
- 'ssmmessages:OpenDataChannel'
322
- ],
323
- 'Resource': '*'
324
- }
325
- ]
326
- })
328
+ policy: cdktf_1.Fn.jsonencode(runnerPolicyDefinition),
327
329
  });
328
330
  new iam_role_policy_attachment_1.IamRolePolicyAttachment(this, 'RunnerPolicyAttachment', {
329
331
  policyArn: runnerPolicy.arn,
330
- role: runnerRole.name
332
+ role: runnerRole.name,
331
333
  });
332
334
  const autoscalerPolicy = new iam_policy_1.IamPolicy(this, 'AutoscalerPolicy', {
333
335
  policy: cdktf_1.Fn.jsonencode({
334
- 'Version': '2012-10-17',
335
- 'Statement': [
336
+ Version: '2012-10-17',
337
+ Statement: [
336
338
  {
337
- 'Sid': 'StartandMonitorTask',
338
- 'Effect': 'Allow',
339
- 'Action': [
339
+ Sid: 'StartandMonitorTask',
340
+ Effect: 'Allow',
341
+ Action: [
340
342
  'ecs:RunTask',
341
343
  // Needed for waiting
342
344
  'ecs:DescribeTasks',
343
345
  'logs:GetLogEvents',
344
346
  'iam:PassRole',
345
347
  ],
346
- 'Resource': [
348
+ Resource: [
347
349
  `${runnerTaskDefinition.arnWithoutRevision}:*`,
348
350
  // Triggerer has to be allowed to pass both task and task execution role
349
351
  ecsTaskExecutionRole.arn,
350
352
  runnerRole.arn,
351
353
  `arn:aws:ecs:${region.name}:${identity.accountId}:task/${cluster.name}/*`,
352
354
  `${runnerLogGroup.arn}:log-stream:*`,
353
- ]
355
+ ],
354
356
  },
355
357
  {
356
- 'Sid': 'GetVpcInfo',
357
- 'Effect': 'Allow',
358
- 'Action': [
359
- 'ec2:DescribeSubnets',
360
- 'ec2:DescribeSecurityGroups'
361
- ],
362
- 'Resource': '*'
363
- }
364
- ]
365
- })
358
+ Sid: 'GetVpcInfo',
359
+ Effect: 'Allow',
360
+ Action: ['ec2:DescribeSubnets', 'ec2:DescribeSecurityGroups'],
361
+ Resource: '*',
362
+ },
363
+ ],
364
+ }),
366
365
  });
367
366
  new iam_role_policy_attachment_1.IamRolePolicyAttachment(this, 'AutoscalerPolicyAttachment', {
368
367
  policyArn: autoscalerPolicy.arn,
369
- role: autoscalerRole.name
368
+ role: autoscalerRole.name,
370
369
  });
371
370
  new ecs_service_1.EcsService(this, 'AutoscalerService', {
372
371
  cluster: cluster.arn,
@@ -377,15 +376,15 @@ class Aws extends constructs_1.Construct {
377
376
  networkConfiguration: {
378
377
  assignPublicIp: true,
379
378
  subnets: subnets.ids,
380
- securityGroups: securityGroups.ids
379
+ securityGroups: securityGroups.ids,
381
380
  },
382
381
  lifecycle: {
383
- ignoreChanges: [
384
- 'desired_count'
385
- ]
386
- }
382
+ ignoreChanges: ['desired_count'],
383
+ },
387
384
  });
388
385
  }
389
386
  }
390
387
  exports.Aws = Aws;
391
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9hd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUZBQWtGO0FBQ2xGLCtGQUF5RjtBQUN6Riw2RUFBd0U7QUFDeEUsK0ZBQXlGO0FBQ3pGLCtFQUEwRTtBQUMxRSxxRUFBaUU7QUFDakUscUVBQWlFO0FBQ2pFLHFGQUFnRjtBQUNoRixtRUFBK0Q7QUFDL0QsK0RBQTJEO0FBQzNELG1HQUE2RjtBQUM3RiwrREFBK0Q7QUFDL0QsaUNBQThDO0FBQzlDLDJDQUF1QztBQUN2QywyQ0FBOEM7QUFDOUMsNkVBQXdFO0FBRXhFLCtFQUEwRTtBQUUxRSxNQUFhLEdBQUksU0FBUSxzQkFBUztJQUM5QixZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUNwQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksc0JBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBRTVCLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLElBQUksZ0RBQXFCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqRSxNQUFNLE1BQU0sR0FBRyxJQUFJLCtCQUFhLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVwRCxNQUFNLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxHQUFHLElBQUEsMkJBQWUsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUV2RCxNQUFNLE9BQU8sR0FBRyxJQUFJLHdCQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUM1QyxJQUFJLEVBQUUsb0JBQW9CO1NBQzdCLENBQUMsQ0FBQztRQUVILE1BQU0sVUFBVSxHQUFHLElBQUksa0JBQU8sQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQy9DLGdCQUFnQixFQUFFLFVBQUUsQ0FBQyxVQUFVLENBQUM7Z0JBQzVCLFNBQVMsRUFB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R0FBRyxjQUFjLENBQUMsR0FBRyxlQUFlO3lCQUN2QztxQkFDSjtvQkFDRDt3QkFDSSxLQUFLLEVBQUUsWUFBWTt3QkFDbkIsUUFBUSxFQUFFLE9BQU87d0JBQ2pCLFFBQVEsRUFBRTs0QkFDTixxQkFBcUI7NEJBQ3JCLDRCQUE0Qjt5QkFDL0I7d0JBQ0QsVUFBVSxFQUFFLEdBQUc7cUJBQ2xCO2lCQUNKO2FBQ0osQ0FFQTtTQUNKLENBQUMsQ0FBQTtRQUNGLElBQUksb0RBQXVCLENBQUMsSUFBSSxFQUFFLDRCQUE0QixFQUFFO1lBQzVELFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHO1lBQy9CLElBQUksRUFBRSxjQUFjLENBQUMsSUFBSTtTQUM1QixDQUFDLENBQUE7UUFFRixJQUFJLHdCQUFVLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFO1lBQ3RDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRztZQUNwQixJQUFJLEVBQUUsb0JBQW9CO1lBQzFCLFlBQVksRUFBRSxDQUFDO1lBQ2YsVUFBVSxFQUFFLFNBQVM7WUFDckIsY0FBYyxFQUFFLHdCQUF3QixDQUFDLGtCQUFrQjtZQUMzRCxvQkFBb0IsRUFBRTtnQkFDbEIsY0FBYyxFQUFFLElBQUk7Z0JBQ3BCLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRztnQkFDcEIsY0FBYyxFQUFFLGNBQWMsQ0FBQyxHQUFHO2FBQ3JDO1lBQ0QsU0FBUyxFQUFFO2dCQUNQLGFBQWEsRUFBRTtvQkFDWCxlQUFlO2lCQUNsQjthQUNKO1NBQ0osQ0FBQyxDQUFBO0lBQ04sQ0FBQztDQUNKO0FBN1lELGtCQTZZQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsb3Vkd2F0Y2hMb2dHcm91cCB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2Nsb3Vkd2F0Y2gtbG9nLWdyb3VwJztcbmltcG9ydCB7IERhdGFBd3NDYWxsZXJJZGVudGl0eSB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2RhdGEtYXdzLWNhbGxlci1pZGVudGl0eSc7XG5pbXBvcnQgeyBEYXRhQXdzUmVnaW9uIH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvZGF0YS1hd3MtcmVnaW9uJztcbmltcG9ydCB7IERhdGFBd3NTZWN1cml0eUdyb3VwcyB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2RhdGEtYXdzLXNlY3VyaXR5LWdyb3Vwcyc7XG5pbXBvcnQgeyBEYXRhQXdzU3VibmV0cyB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2RhdGEtYXdzLXN1Ym5ldHMnO1xuaW1wb3J0IHsgRWNzQ2x1c3RlciB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2Vjcy1jbHVzdGVyJztcbmltcG9ydCB7IEVjc1NlcnZpY2UgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9lY3Mtc2VydmljZSc7XG5pbXBvcnQgeyBFY3NUYXNrRGVmaW5pdGlvbiB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2Vjcy10YXNrLWRlZmluaXRpb24nO1xuaW1wb3J0IHsgSWFtUG9saWN5IH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvaWFtLXBvbGljeSc7XG5pbXBvcnQgeyBJYW1Sb2xlIH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvaWFtLXJvbGUnO1xuaW1wb3J0IHsgSWFtUm9sZVBvbGljeUF0dGFjaG1lbnQgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9pYW0tcm9sZS1wb2xpY3ktYXR0YWNobWVudCc7XG5pbXBvcnQgeyBBd3NQcm92aWRlciB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL3Byb3ZpZGVyJztcbmltcG9ydCB7IEZuLCBUZXJyYWZvcm1JdGVyYXRvciB9IGZyb20gJ2Nka3RmJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgY29tbW9uVmFyaWFibGVzIH0gZnJvbSAnLi92YXJpYWJsZXMnO1xuaW1wb3J0IHsgRWZzRmlsZVN5c3RlbSB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2Vmcy1maWxlLXN5c3RlbSc7XG5pbXBvcnQgeyB0eXBlIENvbnRhaW5lckRlZmluaXRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWNzJ1xuaW1wb3J0IHsgRWZzTW91bnRUYXJnZXQgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9lZnMtbW91bnQtdGFyZ2V0JztcblxuZXhwb3J0IGNsYXNzIEF3cyBleHRlbmRzIENvbnN0cnVjdCB7XG4gICAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgICAgIG5ldyBBd3NQcm92aWRlcih0aGlzLCAnYXdzJywge1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGlkZW50aXR5ID0gbmV3IERhdGFBd3NDYWxsZXJJZGVudGl0eSh0aGlzLCAnSWRlbnRpdHknLCB7fSk7XG5cbiAgICAgICAgY29uc3QgcmVnaW9uID0gbmV3IERhdGFBd3NSZWdpb24odGhpcywgJ1JlZ2lvbicsIHt9KVxuXG4gICAgICAgIGNvbnN0IHsgcGF0LCBnaXRodWJDb25maWdVcmwgfSA9IGNvbW1vblZhcmlhYmxlcyh0aGlzKTtcblxuICAgICAgICBjb25zdCBjbHVzdGVyID0gbmV3IEVjc0NsdXN0ZXIodGhpcywgJ0NsdXN0ZXInLCB7XG4gICAgICAgICAgICBuYW1lOiAnZ2hhLXJ1bm5lci1jbHVzdGVyJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcnVubmVyUm9sZSA9IG5ldyBJYW1Sb2xlKHRoaXMsICdSdW5uZXJSb2xlJywge1xuICAgICAgICAgICAgYXNzdW1lUm9sZVBvbGljeTogRm4uanNvbmVuY29kZSh7XG4gICAgICAgICAgICAgICAgJ1ZlcnNpb24nOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgICAgICAgJ1N0YXRlbWVudCc6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0VmZmVjdCc6ICdBbGxvdycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnUHJpbmNpcGFsJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTZXJ2aWNlJzogJ2Vjcy10YXNrcy5hbWF6b25hd3MuY29tJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBY3Rpb24nOiAnc3RzOkFzc3VtZVJvbGUnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGF1dG9zY2FsZXJSb2xlID0gbmV3IElhbVJvbGUodGhpcywgJ0F1dG9zY2FsZXJSb2xlJywge1xuICAgICAgICAgICAgYXNzdW1lUm9sZVBvbGljeTogRm4uanNvbmVuY29kZSh7XG4gICAgICAgICAgICAgICAgJ1ZlcnNpb24nOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgICAgICAgJ1N0YXRlbWVudCc6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0VmZmVjdCc6ICdBbGxvdycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnUHJpbmNpcGFsJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTZXJ2aWNlJzogJ2Vjcy10YXNrcy5hbWF6b25hd3MuY29tJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBY3Rpb24nOiAnc3RzOkFzc3VtZVJvbGUnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGVjc1Rhc2tFeGVjdXRpb25Sb2xlID0gbmV3IElhbVJvbGUodGhpcywgJ1Rhc2tFeGVjdXRpb25Sb2xlJywge1xuICAgICAgICAgICAgYXNzdW1lUm9sZVBvbGljeTogRm4uanNvbmVuY29kZSh7XG4gICAgICAgICAgICAgICAgJ1ZlcnNpb24nOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgICAgICAgJ1N0YXRlbWVudCc6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0VmZmVjdCc6ICdBbGxvdycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnUHJpbmNpcGFsJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTZXJ2aWNlJzogJ2Vjcy10YXNrcy5hbWF6b25hd3MuY29tJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBY3Rpb24nOiAnc3RzOkFzc3VtZVJvbGUnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hbmFnZWRQb2xpY3lBcm5zOiBbXG4gICAgICAgICAgICAgICAgJ2Fybjphd3M6aWFtOjphd3M6cG9saWN5L3NlcnZpY2Utcm9sZS9BbWF6b25FQ1NUYXNrRXhlY3V0aW9uUm9sZVBvbGljeSdcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBydW5uZXJMb2dHcm91cCA9IG5ldyBDbG91ZHdhdGNoTG9nR3JvdXAodGhpcywgJ1J1bm5lckxvZ0dyb3VwJywge1xuICAgICAgICAgICAgbmFtZTogJy9lY3MvR0hBJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYXV0b3NjYWxlckxvZ0dyb3VwID0gbmV3IENsb3Vkd2F0Y2hMb2dHcm91cCh0aGlzLCAnQXV0b3NjYWxlckxvZ0dyb3VwJywge1xuICAgICAgICAgICAgbmFtZTogJy9lY3MvQXV0b3NjYWxlcicsXG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgY29uc3Qgc3VibmV0cyA9IG5ldyBEYXRhQXdzU3VibmV0cyh0aGlzLCAnU3VibmV0cycsIHt9KTtcblxuICAgICAgICBjb25zdCBzZWN1cml0eUdyb3VwcyA9IG5ldyBEYXRhQXdzU2VjdXJpdHlHcm91cHModGhpcywgJ1NlY3VyaXR5R3JvdXBzJyk7XG5cbiAgICAgICAgLy8gRUZTIHZvbHVtZSB0byBhbGxvdyBzaGFyaW5nIGRhdGEgYmV0d2VlbiB0YXNrc1xuICAgICAgICBjb25zdCBlZnMgPSBuZXcgRWZzRmlsZVN5c3RlbSh0aGlzLCAnZWZzJywge1xuICAgICAgICAgICAgdGhyb3VnaHB1dE1vZGU6ICdlbGFzdGljJyxcbiAgICAgICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICAgICAgICBOYW1lOiAnd29yaydcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBleHRlcm5hbHNFZnMgPSBuZXcgRWZzRmlsZVN5c3RlbSh0aGlzLCAnZXh0ZXJuYWxzRWZzJywge1xuICAgICAgICAgICAgdGhyb3VnaHB1dE1vZGU6ICdlbGFzdGljJyxcbiAgICAgICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICAgICAgICBOYW1lOiAnZXh0ZXJuYWxzJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIEVhY2ggc3VibmV0IGluIFZQQyBhcmUgb24gZGlmZmVyZW50IEFacywgc28gY3JlYXRpbmcgbW91bnRwb2ludCB0byBlYWNoXG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gVGVycmFmb3JtSXRlcmF0b3IuZnJvbUxpc3Qoc3VibmV0cy5pZHMpXG5cbiAgICAgICAgbmV3IEVmc01vdW50VGFyZ2V0KHRoaXMsICdFZnNNb3VudFRhcmdldCcsIHtcbiAgICAgICAgICAgIGZvckVhY2g6IGl0ZXJhdG9yLFxuICAgICAgICAgICAgZmlsZVN5c3RlbUlkOiBlZnMuaWQsXG4gICAgICAgICAgICBzdWJuZXRJZDogaXRlcmF0b3IudmFsdWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IEVmc01vdW50VGFyZ2V0KHRoaXMsICdFeHRlcm5hbHNFZnNNb3VudFRhcmdldCcsIHtcbiAgICAgICAgICAgIGZvckVhY2g6IGl0ZXJhdG9yLFxuICAgICAgICAgICAgZmlsZVN5c3RlbUlkOiBleHRlcm5hbHNFZnMuaWQsXG4gICAgICAgICAgICBzdWJuZXRJZDogaXRlcmF0b3IudmFsdWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcnVubmVyVm9sdW1lTmFtZSA9ICd3b3JrJztcbiAgICAgICAgY29uc3QgZXh0ZXJuYWxzVm9sdW1lTmFtZSA9ICdleHRlcm5hbHMnO1xuICAgICAgICBjb25zdCBydW5uZXJDb250YWluZXJEZWZpbml0aW9uczogQ29udGFpbmVyRGVmaW5pdGlvbltdID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ3J1bm5lcicsXG4gICAgICAgICAgICBpbWFnZTogJ2doY3IuaW8vaGktZmkvYWN0aW9ucy1ydW5uZXI6ZWNzJyxcbiAgICAgICAgICAgIGNvbW1hbmQ6IFsnL2Jpbi9zaCcsICctYycsICdleHBvcnQgRVhFQ0lEPSQoY2F0IC9wcm9jL3N5cy9rZXJuZWwvcmFuZG9tL3V1aWQpICYmIHN1ZG8gbWtkaXIgLXAgL3RtcC9fd29yay8kRVhFQ0lEICYmIHN1ZG8gY2hvd24gcnVubmVyOnJ1bm5lciAvdG1wL193b3JrLyRFWEVDSUQgJiYgbG4gLXMgL3RtcC9fd29yay8kRVhFQ0lEIF93b3JrICYmIHN1ZG8gY2hvd24gcnVubmVyOnJ1bm5lciAvdG1wL2V4dGVybmFscyAmJiAvaG9tZS9ydW5uZXIvcnVuLnNoIDsgc3VkbyBybSAtciAvdG1wL193b3JrLyRFWEVDSUQnXSxcbiAgICAgICAgICAgIGVzc2VudGlhbDogdHJ1ZSxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnRUZTX0lEJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVmcy5pZFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnRVhURVJOQUxTX0VGU19JRCcsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBleHRlcm5hbHNFZnMuaWRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0VDU19DTFVTVEVSX05BTUUnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2x1c3Rlci5uYW1lXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdBQ1RJT05TX1JVTk5FUl9QT0RfTkFNRScsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnZ2hhLXBvZCdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0FDVElPTlNfUlVOTkVSX1JFUVVJUkVfSk9CX0NPTlRBSU5FUicsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnZmFsc2UnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdFQ1NfU1VCTkVUUycsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBGbi5qb2luKCcsJywgc3VibmV0cy5pZHMpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdFQ1NfU0VDVVJJVFlfR1JPVVBTJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IEZuLmpvaW4oJywnLCBzZWN1cml0eUdyb3Vwcy5pZHMpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdFQ1NfVEFTS19ST0xFJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJ1bm5lclJvbGUuYXJuXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdFQ1NfRVhFQ1VUSU9OX1JPTEUnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZWNzVGFza0V4ZWN1dGlvblJvbGUuYXJuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG1vdW50UG9pbnRzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VWb2x1bWU6IHJ1bm5lclZvbHVtZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclBhdGg6ICcvdG1wL193b3JrJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlVm9sdW1lOiBleHRlcm5hbHNWb2x1bWVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJQYXRoOiAnL3RtcC9leHRlcm5hbHMnLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBsb2dDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgbG9nRHJpdmVyOiAnYXdzbG9ncycsXG4gICAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBcImF3c2xvZ3MtZ3JvdXBcIjogcnVubmVyTG9nR3JvdXAubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgXCJhd3Nsb2dzLXJlZ2lvblwiOiByZWdpb24ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgXCJhd3Nsb2dzLXN0cmVhbS1wcmVmaXhcIjogXCJlY3NcIixcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1dXG4gICAgICAgIC8vIFRPRE86IEltYWdlcyB0aHJvdWdoIGNhY2hpbmc6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1IvbGF0ZXN0L3VzZXJndWlkZS9wdWxsLXRocm91Z2gtY2FjaGUuaHRtbCAocmVxdWlyZXMgYXV0aGVudGljYXRpb24pXG4gICAgICAgIC8vIFRPRE86IFBhc3MgRXhlY3V0aW9uIHJvbGUgdG8gam9iIHRhc2s6IGh0dHBzOi8vd3d3LmVybmVzdGNoaWFuZy5jb20vZW4vcG9zdHMvMjAyMS91c2luZy1hbWF6b24tZWNzLWV4ZWMvIzEtZ3JhbnQtcGVybWlzc2lvbnMtZWNzLXRhc2staWFtLXJvbGVcbiAgICAgICAgLy8gVE9ETzogUGFzcyBUYXNrIHJvbGUgdG8gam9iIHRhc2tcbiAgICAgICAgY29uc3QgcnVubmVyVGFza0RlZmluaXRpb24gPSBuZXcgRWNzVGFza0RlZmluaXRpb24odGhpcywgJ1J1bm5lclRhc2tEZWZpbml0aW9uJywge1xuICAgICAgICAgICAgZmFtaWx5OiAnR0hBJyxcbiAgICAgICAgICAgIHRhc2tSb2xlQXJuOiBydW5uZXJSb2xlLmFybixcbiAgICAgICAgICAgIGV4ZWN1dGlvblJvbGVBcm46IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFybixcbiAgICAgICAgICAgIGNvbnRhaW5lckRlZmluaXRpb25zOiBGbi5qc29uZW5jb2RlKHJ1bm5lckNvbnRhaW5lckRlZmluaXRpb25zKSxcbiAgICAgICAgICAgIGNwdTogJzEwMjQnLFxuICAgICAgICAgICAgbWVtb3J5OiAnMjA0OCcsXG4gICAgICAgICAgICByZXF1aXJlc0NvbXBhdGliaWxpdGllczogW1xuICAgICAgICAgICAgICAgICdGQVJHQVRFJ1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHJ1bnRpbWVQbGF0Zm9ybToge1xuICAgICAgICAgICAgICAgIGNwdUFyY2hpdGVjdHVyZTogJ1g4Nl82NCcsXG4gICAgICAgICAgICAgICAgb3BlcmF0aW5nU3lzdGVtRmFtaWx5OiAnTElOVVgnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV0d29ya01vZGU6ICdhd3N2cGMnLFxuICAgICAgICAgICAgdm9sdW1lOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBydW5uZXJWb2x1bWVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBlZnNWb2x1bWVDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3lzdGVtSWQ6IGVmcy5pZCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8vIFRoaXMgZG9lc24ndCB3b3JrIHdpdGggc2FtZSB2b2x1bWUsIGFzIHZvbHVtZSBpcyBpbml0aWFsbHkgZW1wdHkgc28gaXQgY2FuJ3QgbWFwIHRvIGl0J3MgXCJleHRlcm5hbHNcIiBkaXJlY3RvcnlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGV4dGVybmFsc1ZvbHVtZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGVmc1ZvbHVtZUNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTeXN0ZW1JZDogZXh0ZXJuYWxzRWZzLmlkLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGF1dG9zY2FsZXJUYXNrRGVmaW5pdGlvbiA9IG5ldyBFY3NUYXNrRGVmaW5pdGlvbih0aGlzLCAnQXV0b3NjYWxlclRhc2tEZWZpbml0aW9uJywge1xuICAgICAgICAgICAgZmFtaWx5OiAnQXV0b3NjYWxlcicsXG4gICAgICAgICAgICB0YXNrUm9sZUFybjogYXV0b3NjYWxlclJvbGUuYXJuLFxuICAgICAgICAgICAgZXhlY3V0aW9uUm9sZUFybjogZWNzVGFza0V4ZWN1dGlvblJvbGUuYXJuLFxuICAgICAgICAgICAgY29udGFpbmVyRGVmaW5pdGlvbnM6IEZuLmpzb25lbmNvZGUoW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2F1dG9zY2FsZXInLFxuICAgICAgICAgICAgICAgICAgICBpbWFnZTogJ2doY3IuaW8vaGktZmkvZ2hhLXJ1bm5lcnMtb24tbWFuYWdlZC1lbnY6dGVzdCcsXG4gICAgICAgICAgICAgICAgICAgIGVzc2VudGlhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnUEFUJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGF0LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdHSVRIVUJfQ09ORklHX1VSTCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGdpdGh1YkNvbmZpZ1VybC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnVEFTS19ERUZJTklUSU9OX0FSTicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJ1bm5lclRhc2tEZWZpbml0aW9uLmFyblxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnRUNTX0NMVVNURVInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjbHVzdGVyLmFyblxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnRUNTX1NVQk5FVFMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBGbi5qb2luKCcsJywgc3VibmV0cy5pZHMpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdFQ1NfU0VDVVJJVFlfR1JPVVBTJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogRm4uam9pbignLCcsIHNlY3VyaXR5R3JvdXBzLmlkcylcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1NDQUxFX1NFVF9OQU1FJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ2Vjcy1ydW5uZXItc2V0J1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgbG9nQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nRHJpdmVyOiAnYXdzbG9ncycsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhd3Nsb2dzLWdyb3VwXCI6IGF1dG9zY2FsZXJMb2dHcm91cC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXdzbG9ncy1yZWdpb25cIjogcmVnaW9uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhd3Nsb2dzLXN0cmVhbS1wcmVmaXhcIjogXCJlY3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgY3B1OiAnMjU2JyxcbiAgICAgICAgICAgIG1lbW9yeTogJzUxMicsXG4gICAgICAgICAgICByZXF1aXJlc0NvbXBhdGliaWxpdGllczogW1xuICAgICAgICAgICAgICAgICdGQVJHQVRFJ1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHJ1bnRpbWVQbGF0Zm9ybToge1xuICAgICAgICAgICAgICAgIGNwdUFyY2hpdGVjdHVyZTogJ1g4Nl82NCcsXG4gICAgICAgICAgICAgICAgb3BlcmF0aW5nU3lzdGVtRmFtaWx5OiAnTElOVVgnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV0d29ya01vZGU6ICdhd3N2cGMnLFxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IHJ1bm5lclBvbGljeSA9IG5ldyBJYW1Qb2xpY3kodGhpcywgJ1J1bm5lclBvbGljeScsIHtcbiAgICAgICAgICAgIHBvbGljeTogRm4uanNvbmVuY29kZSh7XG4gICAgICAgICAgICAgICAgJ1ZlcnNpb24nOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgICAgICAgJ1N0YXRlbWVudCc6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NpZCc6ICdTdGFydGFuZE1vbml0b3JUYXNrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdFZmZlY3QnOiAnQWxsb3cnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0FjdGlvbic6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWNzOlJ1blRhc2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlY3M6VGFnUmVzb3VyY2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlY3M6TGlzdFRhc2tEZWZpbml0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VjczpMaXN0VGFza3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlY3M6U3RvcFRhc2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlY3M6UmVnaXN0ZXJUYXNrRGVmaW5pdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VjczpEZXNjcmliZVRhc2tEZWZpbml0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWNzOkRlcmVnaXN0ZXJUYXNrRGVmaW5pdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VjczpEZWxldGVUYXNrRGVmaW5pdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlY3M6RXhlY3V0ZUNvbW1hbmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5lZWRlZCBmb3Igd2FpdGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlY3M6RGVzY3JpYmVUYXNrcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xvZ3M6R2V0TG9nRXZlbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWFtOlBhc3NSb2xlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9nczpTdGFydExpdmVUYWlsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9nczpDcmVhdGVMb2dTdHJlYW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZXNvdXJjZSc6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYXJuOmF3czplY3M6JHtyZWdpb24ubmFtZX06JHtpZGVudGl0eS5hY2NvdW50SWR9OnRhc2stZGVmaW5pdGlvbi9naGEtcG9kLXdvcmtmbG93OipgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXIuYXJuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyaWdnZXJlciBoYXMgdG8gYmUgYWxsb3dlZCB0byBwYXNzIGJvdGggdGFzayBhbmQgdGFzayBleGVjdXRpb24gcm9sZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFybixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5uZXJSb2xlLmFybixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYXJuOmF3czplY3M6JHtyZWdpb24ubmFtZX06JHtpZGVudGl0eS5hY2NvdW50SWR9OnRhc2svJHtjbHVzdGVyLm5hbWV9LypgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vVE9ETzogcmVvcmRlciByaWdodHMgc28gdGhhdCBsaXN0aW5nIGlzIG9ubHkgb25lIHdpdGggc3RhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqJ1xuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnU2lkJzogJ0dldFZwY0luZm8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0VmZmVjdCc6ICdBbGxvdycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQWN0aW9uJzogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlYzI6RGVzY3JpYmVTdWJuZXRzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWMyOkRlc2NyaWJlU2VjdXJpdHlHcm91cHMnXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1Jlc291cmNlJzogJyonXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTaWQnOiAnRXhlY0NvbW1hbmRzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdFZmZlY3QnOiAnQWxsb3cnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0FjdGlvbic6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3NtbWVzc2FnZXM6Q3JlYXRlQ29udHJvbENoYW5uZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzc21tZXNzYWdlczpDcmVhdGVEYXRhQ2hhbm5lbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NzbW1lc3NhZ2VzOk9wZW5Db250cm9sQ2hhbm5lbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NzbW1lc3NhZ2VzOk9wZW5EYXRhQ2hhbm5lbCdcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVzb3VyY2UnOiAnKidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKVxuICAgICAgICB9KVxuXG4gICAgICAgIG5ldyBJYW1Sb2xlUG9saWN5QXR0YWNobWVudCh0aGlzLCAnUnVubmVyUG9saWN5QXR0YWNobWVudCcsIHtcbiAgICAgICAgICAgIHBvbGljeUFybjogcnVubmVyUG9saWN5LmFybixcbiAgICAgICAgICAgIHJvbGU6IHJ1bm5lclJvbGUubmFtZVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGF1dG9zY2FsZXJQb2xpY3kgPSBuZXcgSWFtUG9saWN5KHRoaXMsICdBdXRvc2NhbGVyUG9saWN5Jywge1xuICAgICAgICAgICAgcG9saWN5OiBGbi5qc29uZW5jb2RlKHtcbiAgICAgICAgICAgICAgICAnVmVyc2lvbic6ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgICAgICAgICAnU3RhdGVtZW50JzogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnU2lkJzogJ1N0YXJ0YW5kTW9uaXRvclRhc2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0VmZmVjdCc6ICdBbGxvdycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQWN0aW9uJzogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlY3M6UnVuVGFzaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmVlZGVkIGZvciB3YWl0aW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VjczpEZXNjcmliZVRhc2tzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9nczpHZXRMb2dFdmVudHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpYW06UGFzc1JvbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZXNvdXJjZSc6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtydW5uZXJUYXNrRGVmaW5pdGlvbi5hcm5XaXRob3V0UmV2aXNpb259OipgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyaWdnZXJlciBoYXMgdG8gYmUgYWxsb3dlZCB0byBwYXNzIGJvdGggdGFzayBhbmQgdGFzayBleGVjdXRpb24gcm9sZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFybixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5uZXJSb2xlLmFybixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYXJuOmF3czplY3M6JHtyZWdpb24ubmFtZX06JHtpZGVudGl0eS5hY2NvdW50SWR9OnRhc2svJHtjbHVzdGVyLm5hbWV9LypgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3J1bm5lckxvZ0dyb3VwLmFybn06bG9nLXN0cmVhbToqYCxcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NpZCc6ICdHZXRWcGNJbmZvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdFZmZlY3QnOiAnQWxsb3cnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0FjdGlvbic6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWMyOkRlc2NyaWJlU3VibmV0cycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VjMjpEZXNjcmliZVNlY3VyaXR5R3JvdXBzJ1xuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZXNvdXJjZSc6ICcqJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICAgIG5ldyBJYW1Sb2xlUG9saWN5QXR0YWNobWVudCh0aGlzLCAnQXV0b3NjYWxlclBvbGljeUF0dGFjaG1lbnQnLCB7XG4gICAgICAgICAgICBwb2xpY3lBcm46IGF1dG9zY2FsZXJQb2xpY3kuYXJuLFxuICAgICAgICAgICAgcm9sZTogYXV0b3NjYWxlclJvbGUubmFtZVxuICAgICAgICB9KVxuXG4gICAgICAgIG5ldyBFY3NTZXJ2aWNlKHRoaXMsICdBdXRvc2NhbGVyU2VydmljZScsIHtcbiAgICAgICAgICAgIGNsdXN0ZXI6IGNsdXN0ZXIuYXJuLFxuICAgICAgICAgICAgbmFtZTogJ2F1dG9zY2FsZXItc2VydmljZScsXG4gICAgICAgICAgICBkZXNpcmVkQ291bnQ6IDEsXG4gICAgICAgICAgICBsYXVuY2hUeXBlOiAnRkFSR0FURScsXG4gICAgICAgICAgICB0YXNrRGVmaW5pdGlvbjogYXV0b3NjYWxlclRhc2tEZWZpbml0aW9uLmFybldpdGhvdXRSZXZpc2lvbixcbiAgICAgICAgICAgIG5ldHdvcmtDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgYXNzaWduUHVibGljSXA6IHRydWUsXG4gICAgICAgICAgICAgICAgc3VibmV0czogc3VibmV0cy5pZHMsXG4gICAgICAgICAgICAgICAgc2VjdXJpdHlHcm91cHM6IHNlY3VyaXR5R3JvdXBzLmlkc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxpZmVjeWNsZToge1xuICAgICAgICAgICAgICAgIGlnbm9yZUNoYW5nZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgJ2Rlc2lyZWRfY291bnQnXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cbn1cbiJdfQ==
388
+ _a = JSII_RTTI_SYMBOL_1;
389
+ Aws[_a] = { fqn: "terraform-cdk-serverless-github-actions-runner-controller.Aws", version: "0.0.3" };
390
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9hd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSx1RkFBaUY7QUFDakYsK0ZBQXdGO0FBQ3hGLDZFQUF1RTtBQUN2RSwrRkFHeUQ7QUFDekQsK0VBR2lEO0FBQ2pELHFFQUFnRTtBQUNoRSxxRUFBZ0U7QUFDaEUscUZBR29EO0FBQ3BELDZFQUF1RTtBQUN2RSwrRUFBeUU7QUFDekUsbUVBQThEO0FBQzlELCtEQUEwRDtBQUMxRCxtR0FBNEY7QUFDNUYsK0RBQThEO0FBQzlELGlDQUEwRDtBQUMxRCwyQ0FBc0M7QUFDdEMsMkNBQTZDO0FBaUI3QyxNQUFhLEdBQUksU0FBUSxzQkFBUztJQUNoQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWU7UUFDdkQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixJQUFJLHNCQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQyxNQUFNLFFBQVEsR0FBRyxJQUFJLGdEQUFxQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEUsTUFBTSxNQUFNLEdBQUcsSUFBSSwrQkFBYSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFcEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLEdBQUcsSUFBQSwyQkFBZSxFQUFDLElBQUksQ0FBQyxDQUFBO1FBRXZFLE1BQU0sT0FBTyxHQUFHLElBQUksd0JBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQzlDLElBQUksRUFBRSxLQUFLLENBQUMsV0FBVztTQUN4QixDQUFDLENBQUE7UUFFRixNQUFNLE9BQU8sR0FBRyxJQUFJLGlDQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUNsRCxNQUFNLEVBQUUsS0FBSyxD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RSxtQkFBbUIsRUFBRTtZQUN4QyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDcEIsSUFBSSxFQUFFLG9CQUFvQjtZQUMxQixZQUFZLEVBQUUsQ0FBQztZQUNmLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLGNBQWMsRUFBRSx3QkFBd0IsQ0FBQyxrQkFBa0I7WUFDM0Qsb0JBQW9CLEVBQUU7Z0JBQ3BCLGNBQWMsRUFBRSxJQUFJO2dCQUNwQixPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUc7Z0JBQ3BCLGNBQWMsRUFBRSxjQUFjLENBQUMsR0FBRzthQUNuQztZQUNELFNBQVMsRUFBRTtnQkFDVCxhQUFhLEVBQUUsQ0FBQyxlQUFlLENBQUM7YUFDakM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDOztBQWxhSCxrQkFtYUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIENvbnRhaW5lckRlZmluaXRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWNzJ1xuaW1wb3J0IHsgQ2xvdWR3YXRjaExvZ0dyb3VwIH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvY2xvdWR3YXRjaC1sb2ctZ3JvdXAnXG5pbXBvcnQgeyBEYXRhQXdzQ2FsbGVySWRlbnRpdHkgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9kYXRhLWF3cy1jYWxsZXItaWRlbnRpdHknXG5pbXBvcnQgeyBEYXRhQXdzUmVnaW9uIH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvZGF0YS1hd3MtcmVnaW9uJ1xuaW1wb3J0IHtcbiAgRGF0YUF3c1NlY3VyaXR5R3JvdXBzLFxuICBEYXRhQXdzU2VjdXJpdHlHcm91cHNGaWx0ZXIsXG59IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2RhdGEtYXdzLXNlY3VyaXR5LWdyb3VwcydcbmltcG9ydCB7XG4gIERhdGFBd3NTdWJuZXRzLFxuICBEYXRhQXdzU3VibmV0c0ZpbHRlcixcbn0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvZGF0YS1hd3Mtc3VibmV0cydcbmltcG9ydCB7IEVjc0NsdXN0ZXIgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9lY3MtY2x1c3RlcidcbmltcG9ydCB7IEVjc1NlcnZpY2UgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9lY3Mtc2VydmljZSdcbmltcG9ydCB7XG4gIEVjc1Rhc2tEZWZpbml0aW9uLFxuICBFY3NUYXNrRGVmaW5pdGlvblZvbHVtZSxcbn0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvZWNzLXRhc2stZGVmaW5pdGlvbidcbmltcG9ydCB7IEVmc0ZpbGVTeXN0ZW0gfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9lZnMtZmlsZS1zeXN0ZW0nXG5pbXBvcnQgeyBFZnNNb3VudFRhcmdldCB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2Vmcy1tb3VudC10YXJnZXQnXG5pbXBvcnQgeyBJYW1Qb2xpY3kgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9pYW0tcG9saWN5J1xuaW1wb3J0IHsgSWFtUm9sZSB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2lhbS1yb2xlJ1xuaW1wb3J0IHsgSWFtUm9sZVBvbGljeUF0dGFjaG1lbnQgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9pYW0tcm9sZS1wb2xpY3ktYXR0YWNobWVudCdcbmltcG9ydCB7IEF3c1Byb3ZpZGVyIH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvcHJvdmlkZXInXG5pbXBvcnQgeyBGbiwgSVJlc29sdmFibGUsIFRlcnJhZm9ybUl0ZXJhdG9yIH0gZnJvbSAnY2RrdGYnXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJ1xuaW1wb3J0IHsgY29tbW9uVmFyaWFibGVzIH0gZnJvbSAnLi92YXJpYWJsZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQXdzUHJvcHMge1xuICAvLyBOYW1lIG9mIHRoZSBFQ1MgY2x1c3RlciB0byBjcmVhdGUgYW5kIHVzZS5cbiAgcmVhZG9ubHkgY2x1c3Rlck5hbWU6IHN0cmluZ1xuICAvLyBVdGlsaXplIHJ1bm5lci1jb250YWluZXItaG9va3MgdG8gYWxsb3cgc3VwcG9ydCBmb3Igc2VydmljZSBhbmQgYnVpbGQgY29udGFpbmVyIGFzIHdlbGwgYXMgY29udGFpbmVyIGFjdGlvbnMgYW5kIHN0ZXBzLlxuICByZWFkb25seSBjb250YWluZXJTdXBwb3J0OiBib29sZWFuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVzY3JpYmVTdWJuZXRzLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldEZpbHRlcnM/OiBEYXRhQXdzU3VibmV0c0ZpbHRlcltdIHwgSVJlc29sdmFibGVcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsaS9sYXRlc3QvcmVmZXJlbmNlL2VjMi9kZXNjcmliZS1zZWN1cml0eS1ncm91cHMuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cEZpbHRlcnM/OiBEYXRhQXdzU2VjdXJpdHlHcm91cHNGaWx0ZXJbXSB8IElSZXNvbHZhYmxlXG59XG5cbmV4cG9ydCBjbGFzcyBBd3MgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQXdzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICBuZXcgQXdzUHJvdmlkZXIodGhpcywgJ2F3cycsIHt9KVxuXG4gICAgY29uc3QgaWRlbnRpdHkgPSBuZXcgRGF0YUF3c0NhbGxlcklkZW50aXR5KHRoaXMsICdJZGVudGl0eScsIHt9KVxuXG4gICAgY29uc3QgcmVnaW9uID0gbmV3IERhdGFBd3NSZWdpb24odGhpcywgJ1JlZ2lvbicsIHt9KVxuXG4gICAgY29uc3QgeyBwYXQsIGdpdGh1YkNvbmZpZ1VybCwgYXV0b3NjYWxlckltYWdlIH0gPSBjb21tb25WYXJpYWJsZXModGhpcylcblxuICAgIGNvbnN0IGNsdXN0ZXIgPSBuZXcgRWNzQ2x1c3Rlcih0aGlzLCAnQ2x1c3RlcicsIHtcbiAgICAgIG5hbWU6IHByb3BzLmNsdXN0ZXJOYW1lLFxuICAgIH0pXG5cbiAgICBjb25zdCBzdWJuZXRzID0gbmV3IERhdGFBd3NTdWJuZXRzKHRoaXMsICdTdWJuZXRzJywge1xuICAgICAgZmlsdGVyOiBwcm9wcy5zdWJuZXRGaWx0ZXJzLFxuICAgIH0pXG5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwcyA9IG5ldyBEYXRhQXdzU2VjdXJpdHlHcm91cHModGhpcywgJ1NlY3VyaXR5R3JvdXBzJywge1xuICAgICAgZmlsdGVyOiBwcm9wcy5zZWN1cml0eUdyb3VwRmlsdGVycyxcbiAgICB9KVxuXG4gICAgY29uc3QgYXV0b3NjYWxlclJvbGUgPSBuZXcgSWFtUm9sZSh0aGlzLCAnQXV0b3NjYWxlclJvbGUnLCB7XG4gICAgICBhc3N1bWVSb2xlUG9saWN5OiBGbi5qc29uZW5jb2RlKHtcbiAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICBQcmluY2lwYWw6IHtcbiAgICAgICAgICAgICAgU2VydmljZTogJ2Vjcy10YXNrcy5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBBY3Rpb246ICdzdHM6QXNzdW1lUm9sZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgIH0pXG5cbiAgICBjb25zdCBydW5uZXJSb2xlID0gbmV3IElhbVJvbGUodGhpcywgJ1J1bm5lclJvbGUnLCB7XG4gICAgICBhc3N1bWVSb2xlUG9saWN5OiBGbi5qc29uZW5jb2RlKHtcbiAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICBQcmluY2lwYWw6IHtcbiAgICAgICAgICAgICAgU2VydmljZTogJ2Vjcy10YXNrcy5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBBY3Rpb246ICdzdHM6QXNzdW1lUm9sZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgIH0pXG5cbiAgICBjb25zdCBlY3NUYXNrRXhlY3V0aW9uUm9sZSA9IG5ldyBJYW1Sb2xlKHRoaXMsICdUYXNrRXhlY3V0aW9uUm9sZScsIHtcbiAgICAgIGFzc3VtZVJvbGVQb2xpY3k6IEZuLmpzb25lbmNvZGUoe1xuICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgIFByaW5jaXBhbDoge1xuICAgICAgICAgICAgICBTZXJ2aWNlOiAnZWNzLXRhc2tzLmFtYXpvbmF3cy5jb20nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEFjdGlvbjogJ3N0czpBc3N1bWVSb2xlJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgfSlcblxuICAgIG5ldyBJYW1Sb2xlUG9saWN5QXR0YWNobWVudCh0aGlzLCAnVGVza0V4ZWN1dGlvblJvbGVBdHRhY2htZW50Jywge1xuICAgICAgcG9saWN5QXJuOlxuICAgICAgICAnYXJuOmF3czppYW06OmF3czpwb2xpY3kvc2VydmljZS1yb2xlL0FtYXpvbkVDU1Rhc2tFeGVjdXRpb25Sb2xlUG9saWN5JyxcbiAgICAgIHJvbGU6IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLm5hbWUsXG4gICAgfSlcblxuICAgIGNvbnN0IHJ1bm5lckxvZ0dyb3VwID0gbmV3IENsb3Vkd2F0Y2hMb2dHcm91cCh0aGlzLCAnUnVubmVyTG9nR3JvdXAnLCB7XG4gICAgICBuYW1lOiAnL2Vjcy9HSEEnLFxuICAgIH0pXG5cbiAgICBjb25zdCBhdXRvc2NhbGVyTG9nR3JvdXAgPSBuZXcgQ2xvdWR3YXRjaExvZ0dyb3VwKFxuICAgICAgdGhpcyxcbiAgICAgICdBdXRvc2NhbGVyTG9nR3JvdXAnLFxuICAgICAge1xuICAgICAgICBuYW1lOiAnL2Vjcy9BdXRvc2NhbGVyJyxcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgY29uc3QgYXV0b3NjYWxlckNvbnRhaW5lckRlZmluaXRpb246IENvbnRhaW5lckRlZmluaXRpb24gPSB7XG4gICAgICBuYW1lOiAnYXV0b3NjYWxlcicsXG4gICAgICBpbWFnZTogYXV0b3NjYWxlckltYWdlLnN0cmluZ1ZhbHVlLFxuICAgICAgZXNzZW50aWFsOiB0cnVlLFxuICAgICAgZW52aXJvbm1lbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdQQVQnLFxuICAgICAgICAgIHZhbHVlOiBwYXQudmFsdWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnR0lUSFVCX0NPTkZJR19VUkwnLFxuICAgICAgICAgIHZhbHVlOiBnaXRodWJDb25maWdVcmwudmFsdWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnRUNTX0NMVVNURVInLFxuICAgICAgICAgIHZhbHVlOiBjbHVzdGVyLmFybixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdFQ1NfU1VCTkVUUycsXG4gICAgICAgICAgdmFsdWU6IEZuLmpvaW4oJywnLCBzdWJuZXRzLmlkcyksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnRUNTX1NFQ1VSSVRZX0dST1VQUycsXG4gICAgICAgICAgdmFsdWU6IEZuLmpvaW4oJywnLCBzZWN1cml0eUdyb3Vwcy5pZHMpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1NDQUxFX1NFVF9OQU1FJyxcbiAgICAgICAgICB2YWx1ZTogJ2Vjcy1ydW5uZXItc2V0JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBsb2dDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIGxvZ0RyaXZlcjogJ2F3c2xvZ3MnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgJ2F3c2xvZ3MtZ3JvdXAnOiBhdXRvc2NhbGVyTG9nR3JvdXAubmFtZSxcbiAgICAgICAgICAnYXdzbG9ncy1yZWdpb24nOiByZWdpb24ubmFtZSxcbiAgICAgICAgICAnYXdzbG9ncy1zdHJlYW0tcHJlZml4JzogJ2VjcycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHJ1bm5lclZvbHVtZTogRWNzVGFza0RlZmluaXRpb25Wb2x1bWVbXSA9IFtdXG5cbiAgICBjb25zdCBydW5uZXJDb250YWluZXJEZWZpbml0aW9uOiBDb250YWluZXJEZWZpbml0aW9uID0ge1xuICAgICAgbmFtZTogJ3J1bm5lcicsXG4gICAgICBpbWFnZTogJ2doY3IuaW8vYWN0aW9ucy9hY3Rpb25zLXJ1bm5lcjoyLjMyMy4wJyxcbiAgICAgIGVzc2VudGlhbDogdHJ1ZSxcbiAgICAgIGVudHJ5UG9pbnQ6IFsnL2hvbWUvcnVubmVyL3J1bi5zaCddLFxuICAgICAgZW52aXJvbm1lbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdFQ1NfQ0xVU1RFUl9OQU1FJyxcbiAgICAgICAgICB2YWx1ZTogY2x1c3Rlci5uYW1lLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0FDVElPTlNfUlVOTkVSX1BPRF9OQU1FJyxcbiAgICAgICAgICB2YWx1ZTogJ2doYS1wb2QnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0VDU19TVUJORVRTJyxcbiAgICAgICAgICB2YWx1ZTogRm4uam9pbignLCcsIHN1Ym5ldHMuaWRzKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdFQ1NfU0VDVVJJVFlfR1JPVVBTJyxcbiAgICAgICAgICB2YWx1ZTogRm4uam9pbignLCcsIHNlY3VyaXR5R3JvdXBzLmlkcyksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnRUNTX1RBU0tfUk9MRScsXG4gICAgICAgICAgdmFsdWU6IHJ1bm5lclJvbGUuYXJuLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0VDU19FWEVDVVRJT05fUk9MRScsXG4gICAgICAgICAgdmFsdWU6IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFybixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBtb3VudFBvaW50czogW10sXG4gICAgICBsb2dDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIGxvZ0RyaXZlcjogJ2F3c2xvZ3MnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgJ2F3c2xvZ3MtZ3JvdXAnOiBydW5uZXJMb2dHcm91cC5uYW1lLFxuICAgICAgICAgICdhd3Nsb2dzLXJlZ2lvbic6IHJlZ2lvbi5uYW1lLFxuICAgICAgICAgICdhd3Nsb2dzLXN0cmVhbS1wcmVmaXgnOiAnZWNzJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmNvbnRhaW5lclN1cHBvcnQpIHtcbiAgICAgIC8vIEVGUyB2b2x1bWUgdG8gYWxsb3cgc2hhcmluZyBkYXRhIGJldHdlZW4gdGFza3NcbiAgICAgIGNvbnN0IGVmcyA9IG5ldyBFZnNGaWxlU3lzdGVtKHRoaXMsICdlZnMnLCB7XG4gICAgICAgIHRocm91Z2hwdXRNb2RlOiAnZWxhc3RpYycsXG4gICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICBOYW1lOiAnd29yaycsXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBleHRlcm5hbHNFZnMgPSBuZXcgRWZzRmlsZVN5c3RlbSh0aGlzLCAnZXh0ZXJuYWxzRWZzJywge1xuICAgICAgICB0aHJvdWdocHV0TW9kZTogJ2VsYXN0aWMnLFxuICAgICAgICB0YWdzOiB7XG4gICAgICAgICAgTmFtZTogJ2V4dGVybmFscycsXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICAvLyBFYWNoIHN1Ym5ldCBpbiBWUEMgYXJlIG9uIGRpZmZlcmVudCBBWnMsIHNvIGNyZWF0aW5nIG1vdW50cG9pbnQgdG8gZWFjaFxuICAgICAgY29uc3QgaXRlcmF0b3IgPSBUZXJyYWZvcm1JdGVyYXRvci5mcm9tTGlzdChzdWJuZXRzLmlkcylcblxuICAgICAgbmV3IEVmc01vdW50VGFyZ2V0KHRoaXMsICdFZnNNb3VudFRhcmdldCcsIHtcbiAgICAgICAgZm9yRWFjaDogaXRlcmF0b3IsXG4gICAgICAgIGZpbGVTeXN0ZW1JZDogZWZzLmlkLFxuICAgICAgICBzdWJuZXRJZDogaXRlcmF0b3IudmFsdWUsXG4gICAgICB9KVxuXG4gICAgICBuZXcgRWZzTW91bnRUYXJnZXQodGhpcywgJ0V4dGVybmFsc0Vmc01vdW50VGFyZ2V0Jywge1xuICAgICAgICBmb3JFYWNoOiBpdGVyYXRvcixcbiAgICAgICAgZmlsZVN5c3RlbUlkOiBleHRlcm5hbHNFZnMuaWQsXG4gICAgICAgIHN1Ym5ldElkOiBpdGVyYXRvci52YWx1ZSxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHJ1bm5lclZvbHVtZU5hbWUgPSAnd29yaydcbiAgICAgIGNvbnN0IGV4dGVybmFsc1ZvbHVtZU5hbWUgPSAnZXh0ZXJuYWxzJ1xuXG4gICAgICBydW5uZXJWb2x1bWUucHVzaChcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IHJ1bm5lclZvbHVtZU5hbWUsXG4gICAgICAgICAgZWZzVm9sdW1lQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgZmlsZVN5c3RlbUlkOiBlZnMuaWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gVGhpcyBkb2Vzbid0IHdvcmsgd2l0aCBzYW1lIHZvbHVtZSwgYXMgdm9sdW1lIGlzIGluaXRpYWxseSBlbXB0eSBzbyBpdCBjYW4ndCBtYXAgdG8gaXQncyBcImV4dGVybmFsc1wiIGRpcmVjdG9yeVxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogZXh0ZXJuYWxzVm9sdW1lTmFtZSxcbiAgICAgICAgICBlZnNWb2x1bWVDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICBmaWxlU3lzdGVtSWQ6IGV4dGVybmFsc0Vmcy5pZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICBydW5uZXJDb250YWluZXJEZWZpbml0aW9uLm1vdW50UG9pbnRzPy5wdXNoKFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlVm9sdW1lOiBydW5uZXJWb2x1bWVOYW1lLFxuICAgICAgICAgIGNvbnRhaW5lclBhdGg6ICcvdG1wL193b3JrJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZVZvbHVtZTogZXh0ZXJuYWxzVm9sdW1lTmFtZSxcbiAgICAgICAgICBjb250YWluZXJQYXRoOiAnL3RtcC9leHRlcm5hbHMnLFxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICBydW5uZXJDb250YWluZXJEZWZpbml0aW9uLmVudmlyb25tZW50Py5wdXNoKFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0VGU19JRCcsXG4gICAgICAgICAgdmFsdWU6IGVmcy5pZCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdFWFRFUk5BTFNfRUZTX0lEJyxcbiAgICAgICAgICB2YWx1ZTogZXh0ZXJuYWxzRWZzLmlkLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0FDVElPTlNfUlVOTkVSX1JFUVVJUkVfSk9CX0NPTlRBSU5FUicsXG4gICAgICAgICAgdmFsdWU6ICdmYWxzZScsXG4gICAgICAgIH0sXG4gICAgICApXG5cbiAgICAgIHJ1bm5lckNvbnRhaW5lckRlZmluaXRpb24uY29tbWFuZCA9IFtcbiAgICAgICAgJy9iaW4vc2gnLFxuICAgICAgICAnLWMnLFxuICAgICAgICAnZXhwb3J0IEVYRUNJRD0kKGNhdCAvcHJvYy9zeXMva2VybmVsL3JhbmRvbS91dWlkKSAmJiBzdWRvIG1rZGlyIC1wIC90bXAvX3dvcmsvJEVYRUNJRCAmJiBzdWRvIGNob3duIHJ1bm5lcjpydW5uZXIgL3RtcC9fd29yay8kRVhFQ0lEICYmIGxuIC1zIC90bXAvX3dvcmsvJEVYRUNJRCBfd29yayAmJiBzdWRvIGNob3duIHJ1bm5lcjpydW5uZXIgL3RtcC9leHRlcm5hbHMgJiYgL2hvbWUvcnVubmVyL3J1bi5zaCA7IHN1ZG8gcm0gLXIgL3RtcC9fd29yay8kRVhFQ0lEJyxcbiAgICAgIF1cbiAgICAgIHJ1bm5lckNvbnRhaW5lckRlZmluaXRpb24uaW1hZ2UgPSAnZ2hjci5pby9oaS1maS9hY3Rpb25zLXJ1bm5lcjplY3MnXG4gICAgfVxuXG4gICAgLy8gVE9ETzogSW1hZ2VzIHRocm91Z2ggY2FjaGluZzogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUi9sYXRlc3QvdXNlcmd1aWRlL3B1bGwtdGhyb3VnaC1jYWNoZS5odG1sIChyZXF1aXJlcyBhdXRoZW50aWNhdGlvbilcbiAgICAvLyBUT0RPOiBQYXNzIEV4ZWN1dGlvbiByb2xlIHRvIGpvYiB0YXNrOiBodHRwczovL3d3dy5lcm5lc3RjaGlhbmcuY29tL2VuL3Bvc3RzLzIwMjEvdXNpbmctYW1hem9uLWVjcy1leGVjLyMxLWdyYW50LXBlcm1pc3Npb25zLWVjcy10YXNrLWlhbS1yb2xlXG4gICAgLy8gVE9ETzogUGFzcyBUYXNrIHJvbGUgdG8gam9iIHRhc2tcbiAgICBjb25zdCBydW5uZXJUYXNrRGVmaW5pdGlvbiA9IG5ldyBFY3NUYXNrRGVmaW5pdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICAnUnVubmVyVGFza0RlZmluaXRpb24nLFxuICAgICAge1xuICAgICAgICBmYW1pbHk6ICdHSEEnLFxuICAgICAgICB0YXNrUm9sZUFybjogcnVubmVyUm9sZS5hcm4sXG4gICAgICAgIGV4ZWN1dGlvblJvbGVBcm46IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFybixcbiAgICAgICAgY29udGFpbmVyRGVmaW5pdGlvbnM6IEZuLmpzb25lbmNvZGUoW3J1bm5lckNvbnRhaW5lckRlZmluaXRpb25dKSxcbiAgICAgICAgY3B1OiAnMTAyNCcsXG4gICAgICAgIG1lbW9yeTogJzIwNDgnLFxuICAgICAgICByZXF1aXJlc0NvbXBhdGliaWxpdGllczogWydGQVJHQVRFJ10sXG4gICAgICAgIHJ1bnRpbWVQbGF0Zm9ybToge1xuICAgICAgICAgIGNwdUFyY2hpdGVjdHVyZTogJ1g4Nl82NCcsXG4gICAgICAgICAgb3BlcmF0aW5nU3lzdGVtRmFtaWx5OiAnTElOVVgnLFxuICAgICAgICB9LFxuICAgICAgICBuZXR3b3JrTW9kZTogJ2F3c3ZwYycsXG4gICAgICAgIHZvbHVtZTogcnVubmVyVm9sdW1lLFxuICAgICAgfSxcbiAgICApXG5cbiAgICBhdXRvc2NhbGVyQ29udGFpbmVyRGVmaW5pdGlvbi5lbnZpcm9ubWVudD8ucHVzaCh7XG4gICAgICBuYW1lOiAnVEFTS19ERUZJTklUSU9OX0FSTicsXG4gICAgICB2YWx1ZTogcnVubmVyVGFza0RlZmluaXRpb24uYXJuLFxuICAgIH0pXG5cbiAgICBjb25zdCBhdXRvc2NhbGVyVGFza0RlZmluaXRpb24gPSBuZXcgRWNzVGFza0RlZmluaXRpb24oXG4gICAgICB0aGlzLFxuICAgICAgJ0F1dG9zY2FsZXJUYXNrRGVmaW5pdGlvbicsXG4gICAgICB7XG4gICAgICAgIGZhbWlseTogJ0F1dG9zY2FsZXInLFxuICAgICAgICB0YXNrUm9sZUFybjogYXV0b3NjYWxlclJvbGUuYXJuLFxuICAgICAgICBleGVjdXRpb25Sb2xlQXJuOiBlY3NUYXNrRXhlY3V0aW9uUm9sZS5hcm4sXG4gICAgICAgIGNvbnRhaW5lckRlZmluaXRpb25zOiBGbi5qc29uZW5jb2RlKFthdXRvc2NhbGVyQ29udGFpbmVyRGVmaW5pdGlvbl0pLFxuICAgICAgICBjcHU6ICcyNTYnLFxuICAgICAgICBtZW1vcnk6ICc1MTInLFxuICAgICAgICByZXF1aXJlc0NvbXBhdGliaWxpdGllczogWydGQVJHQVRFJ10sXG4gICAgICAgIHJ1bnRpbWVQbGF0Zm9ybToge1xuICAgICAgICAgIGNwdUFyY2hpdGVjdHVyZTogJ1g4Nl82NCcsXG4gICAgICAgICAgb3BlcmF0aW5nU3lzdGVtRmFtaWx5OiAnTElOVVgnLFxuICAgICAgICB9LFxuICAgICAgICBuZXR3b3JrTW9kZTogJ2F3c3ZwYycsXG4gICAgICB9LFxuICAgIClcblxuICAgIGNvbnN0IHJ1bm5lclBvbGljeURlZmluaXRpb24gPSB7XG4gICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIFNpZDogJ1N0YXJ0YW5kTW9uaXRvclRhc2snLFxuICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgICdlY3M6UnVuVGFzaycsXG4gICAgICAgICAgICAnZWNzOlRhZ1Jlc291cmNlJyxcbiAgICAgICAgICAgICdlY3M6TGlzdFRhc2tEZWZpbml0aW9ucycsXG4gICAgICAgICAgICAnZWNzOkxpc3RUYXNrcycsXG4gICAgICAgICAgICAnZWNzOlN0b3BUYXNrJyxcbiAgICAgICAgICAgICdlY3M6UmVnaXN0ZXJUYXNrRGVmaW5pdGlvbicsXG4gICAgICAgICAgICAnZWNzOkRlc2NyaWJlVGFza0RlZmluaXRpb24nLFxuICAgICAgICAgICAgJ2VjczpEZXJlZ2lzdGVyVGFza0RlZmluaXRpb24nLFxuICAgICAgICAgICAgJ2VjczpEZWxldGVUYXNrRGVmaW5pdGlvbnMnLFxuICAgICAgICAgICAgJ2VjczpFeGVjdXRlQ29tbWFuZCcsXG4gICAgICAgICAgICAvLyBOZWVkZWQgZm9yIHdhaXRpbmdcbiAgICAgICAgICAgICdlY3M6RGVzY3JpYmVUYXNrcycsXG4gICAgICAgICAgICAnbG9nczpHZXRMb2dFdmVudHMnLFxuICAgICAgICAgICAgJ2lhbTpQYXNzUm9sZScsXG4gICAgICAgICAgICAnbG9nczpTdGFydExpdmVUYWlsJyxcbiAgICAgICAgICAgICdsb2dzOkNyZWF0ZUxvZ1N0cmVhbScsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBSZXNvdXJjZTogW1xuICAgICAgICAgICAgYGFybjphd3M6ZWNzOiR7cmVnaW9uLm5hbWV9OiR7aWRlbnRpdHkuYWNjb3VudElkfTp0YXNrLWRlZmluaXRpb24vZ2hhLXBvZC13b3JrZmxvdzoqYCxcbiAgICAgICAgICAgIGNsdXN0ZXIuYXJuLFxuICAgICAgICAgICAgLy8gVHJpZ2dlcmVyIGhhcyB0byBiZSBhbGxvd2VkIHRvIHBhc3MgYm90aCB0YXNrIGFuZCB0YXNrIGV4ZWN1dGlvbiByb2xlXG4gICAgICAgICAgICBlY3NUYXNrRXhlY3V0aW9uUm9sZS5hcm4sXG4gICAgICAgICAgICBydW5uZXJSb2xlLmFybixcbiAgICAgICAgICAgIGBhcm46YXdzOmVjczoke3JlZ2lvbi5uYW1lfToke2lkZW50aXR5LmFjY291bnRJZH06dGFzay8ke2NsdXN0ZXIubmFtZX0vKmAsXG4gICAgICAgICAgICAvL1RPRE86IHJlb3JkZXIgcmlnaHRzIHNvIHRoYXQgbGlzdGluZyBpcyBvbmx5IG9uZSB3aXRoIHN0YXJcbiAgICAgICAgICAgICcqJyxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgU2lkOiAnR2V0VnBjSW5mbycsXG4gICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgIEFjdGlvbjogWydlYzI6RGVzY3JpYmVTdWJuZXRzJywgJ2VjMjpEZXNjcmliZVNlY3VyaXR5R3JvdXBzJ10sXG4gICAgICAgICAgUmVzb3VyY2U6ICcqJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFNpZDogJ0V4ZWNDb21tYW5kcycsXG4gICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgJ3NzbW1lc3NhZ2VzOkNyZWF0ZUNvbnRyb2xDaGFubmVsJyxcbiAgICAgICAgICAgICdzc21tZXNzYWdlczpDcmVhdGVEYXRhQ2hhbm5lbCcsXG4gICAgICAgICAgICAnc3NtbWVzc2FnZXM6T3BlbkNvbnRyb2xDaGFubmVsJyxcbiAgICAgICAgICAgICdzc21tZXNzYWdlczpPcGVuRGF0YUNoYW5uZWwnLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgUmVzb3VyY2U6ICcqJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QgcnVubmVyUG9saWN5ID0gbmV3IElhbVBvbGljeSh0aGlzLCAnUnVubmVyUG9saWN5Jywge1xuICAgICAgcG9saWN5OiBGbi5qc29uZW5jb2RlKHJ1bm5lclBvbGljeURlZmluaXRpb24pLFxuICAgIH0pXG5cbiAgICBuZXcgSWFtUm9sZVBvbGljeUF0dGFjaG1lbnQodGhpcywgJ1J1bm5lclBvbGljeUF0dGFjaG1lbnQnLCB7XG4gICAgICBwb2xpY3lBcm46IHJ1bm5lclBvbGljeS5hcm4sXG4gICAgICByb2xlOiBydW5uZXJSb2xlLm5hbWUsXG4gICAgfSlcblxuICAgIGNvbnN0IGF1dG9zY2FsZXJQb2xpY3kgPSBuZXcgSWFtUG9saWN5KHRoaXMsICdBdXRvc2NhbGVyUG9saWN5Jywge1xuICAgICAgcG9saWN5OiBGbi5qc29uZW5jb2RlKHtcbiAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBTaWQ6ICdTdGFydGFuZE1vbml0b3JUYXNrJyxcbiAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgICAnZWNzOlJ1blRhc2snLFxuICAgICAgICAgICAgICAvLyBOZWVkZWQgZm9yIHdhaXRpbmdcbiAgICAgICAgICAgICAgJ2VjczpEZXNjcmliZVRhc2tzJyxcbiAgICAgICAgICAgICAgJ2xvZ3M6R2V0TG9nRXZlbnRzJyxcbiAgICAgICAgICAgICAgJ2lhbTpQYXNzUm9sZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgICAgYCR7cnVubmVyVGFza0RlZmluaXRpb24uYXJuV2l0aG91dFJldmlzaW9ufToqYCxcbiAgICAgICAgICAgICAgLy8gVHJpZ2dlcmVyIGhhcyB0byBiZSBhbGxvd2VkIHRvIHBhc3MgYm90aCB0YXNrIGFuZCB0YXNrIGV4ZWN1dGlvbiByb2xlXG4gICAgICAgICAgICAgIGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFybixcbiAgICAgICAgICAgICAgcnVubmVyUm9sZS5hcm4sXG4gICAgICAgICAgICAgIGBhcm46YXdzOmVjczoke3JlZ2lvbi5uYW1lfToke2lkZW50aXR5LmFjY291bnRJZH06dGFzay8ke2NsdXN0ZXIubmFtZX0vKmAsXG4gICAgICAgICAgICAgIGAke3J1bm5lckxvZ0dyb3VwLmFybn06bG9nLXN0cmVhbToqYCxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBTaWQ6ICdHZXRWcGNJbmZvJyxcbiAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgIEFjdGlvbjogWydlYzI6RGVzY3JpYmVTdWJuZXRzJywgJ2VjMjpEZXNjcmliZVNlY3VyaXR5R3JvdXBzJ10sXG4gICAgICAgICAgICBSZXNvdXJjZTogJyonLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICB9KVxuICAgIG5ldyBJYW1Sb2xlUG9saWN5QXR0YWNobWVudCh0aGlzLCAnQXV0b3NjYWxlclBvbGljeUF0dGFjaG1lbnQnLCB7XG4gICAgICBwb2xpY3lBcm46IGF1dG9zY2FsZXJQb2xpY3kuYXJuLFxuICAgICAgcm9sZTogYXV0b3NjYWxlclJvbGUubmFtZSxcbiAgICB9KVxuXG4gICAgbmV3IEVjc1NlcnZpY2UodGhpcywgJ0F1dG9zY2FsZXJTZXJ2aWNlJywge1xuICAgICAgY2x1c3RlcjogY2x1c3Rlci5hcm4sXG4gICAgICBuYW1lOiAnYXV0b3NjYWxlci1zZXJ2aWNlJyxcbiAgICAgIGRlc2lyZWRDb3VudDogMSxcbiAgICAgIGxhdW5jaFR5cGU6ICdGQVJHQVRFJyxcbiAgICAgIHRhc2tEZWZpbml0aW9uOiBhdXRvc2NhbGVyVGFza0RlZmluaXRpb24uYXJuV2l0aG91dFJldmlzaW9uLFxuICAgICAgbmV0d29ya0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgYXNzaWduUHVibGljSXA6IHRydWUsXG4gICAgICAgIHN1Ym5ldHM6IHN1Ym5ldHMuaWRzLFxuICAgICAgICBzZWN1cml0eUdyb3Vwczogc2VjdXJpdHlHcm91cHMuaWRzLFxuICAgICAgfSxcbiAgICAgIGxpZmVjeWNsZToge1xuICAgICAgICBpZ25vcmVDaGFuZ2VzOiBbJ2Rlc2lyZWRfY291bnQnXSxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxufVxuIl19