@mavogel/cdk-vscode-server 0.0.21 → 0.0.23

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.
Files changed (37) hide show
  1. package/.jsii +84 -29
  2. package/API.md +15 -1
  3. package/integ-tests/integ.al2023.ts.snapshot/IntegSetupVSCodeOnAl2023DefaultTestDeployAssert74D8F645.assets.json +2 -2
  4. package/integ-tests/integ.al2023.ts.snapshot/IntegSetupVSCodeOnAl2023DefaultTestDeployAssert74D8F645.template.json +1 -1
  5. package/integ-tests/integ.al2023.ts.snapshot/IntegTestStackAl2023.assets.json +2 -2
  6. package/integ-tests/integ.al2023.ts.snapshot/IntegTestStackAl2023.template.json +2 -2
  7. package/integ-tests/integ.al2023.ts.snapshot/integ.json +1 -1
  8. package/integ-tests/integ.al2023.ts.snapshot/manifest.json +2 -2
  9. package/integ-tests/integ.al2023.ts.snapshot/tree.json +11 -11
  10. package/integ-tests/integ.ubuntu.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.assets.json +2 -2
  11. package/integ-tests/integ.ubuntu.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.template.json +1 -1
  12. package/integ-tests/integ.ubuntu.ts.snapshot/IntegTestStackUbuntu22.assets.json +2 -2
  13. package/integ-tests/integ.ubuntu.ts.snapshot/IntegTestStackUbuntu22.template.json +2 -2
  14. package/integ-tests/integ.ubuntu.ts.snapshot/integ.json +1 -1
  15. package/integ-tests/integ.ubuntu.ts.snapshot/manifest.json +2 -2
  16. package/integ-tests/integ.ubuntu.ts.snapshot/tree.json +11 -11
  17. package/lib/index.d.ts +1 -1
  18. package/lib/index.js +1 -1
  19. package/lib/installer/installer-function.js +2 -2
  20. package/lib/installer/installer.d.ts +1 -1
  21. package/lib/installer/installer.js +201 -201
  22. package/lib/installer/installer.lambda.d.ts +2 -2
  23. package/lib/installer/installer.lambda.js +15 -15
  24. package/lib/mappings.d.ts +1 -1
  25. package/lib/mappings.js +13 -13
  26. package/lib/prefixlist-retriever/prefixlist-retriever.d.ts +2 -2
  27. package/lib/prefixlist-retriever/prefixlist-retriever.js +14 -14
  28. package/lib/secret-retriever/secret-retriever-function.js +2 -2
  29. package/lib/secret-retriever/secret-retriever.d.ts +2 -2
  30. package/lib/secret-retriever/secret-retriever.js +17 -17
  31. package/lib/secret-retriever/secret-retriever.lambda.d.ts +1 -1
  32. package/lib/secret-retriever/secret-retriever.lambda.js +6 -6
  33. package/lib/suppress-nags.d.ts +1 -1
  34. package/lib/suppress-nags.js +3 -3
  35. package/lib/vscode-server.d.ts +3 -3
  36. package/lib/vscode-server.js +127 -127
  37. package/package.json +13 -11
@@ -13,9 +13,9 @@ class Installer {
13
13
  return new (class extends Installer {
14
14
  _bind(scope) {
15
15
  let documentName;
16
- const devServerBasePath = options.devServerBasePath ?? "app";
16
+ const devServerBasePath = options.devServerBasePath ?? 'app';
17
17
  const devServerPort = options.devServerPort ?? 8081;
18
- if (options.documentName && options.documentName != "") {
18
+ if (options.documentName && options.documentName != '') {
19
19
  documentName = options.documentName;
20
20
  }
21
21
  else {
@@ -39,9 +39,9 @@ class Installer {
39
39
  return new (class extends Installer {
40
40
  _bind(scope) {
41
41
  let documentName;
42
- const devServerBasePath = options.devServerBasePath ?? "app";
42
+ const devServerBasePath = options.devServerBasePath ?? 'app';
43
43
  const devServerPort = options.devServerPort ?? 8081;
44
- if (options.documentName && options.documentName != "") {
44
+ if (options.documentName && options.documentName != '') {
45
45
  documentName = options.documentName;
46
46
  }
47
47
  else {
@@ -71,84 +71,84 @@ class Installer {
71
71
  case vscode_server_1.LinuxFlavorType.UBUNTU_22:
72
72
  case vscode_server_1.LinuxFlavorType.UBUNTU_24:
73
73
  // Create an SSM document with multiple actions to install the software
74
- ssmDocument = new ssm.CfnDocument(scope, "ssm-document-ubuntu", {
74
+ ssmDocument = new ssm.CfnDocument(scope, 'ssm-document-ubuntu', {
75
75
  name: `vscode-server-ubuntu-${core_1.Stack.of(scope).stackName}`,
76
- documentType: "Command",
76
+ documentType: 'Command',
77
77
  content: {
78
- schemaVersion: "2.2",
79
- description: "Bootstrap VSCode code-server instance",
78
+ schemaVersion: '2.2',
79
+ description: 'Bootstrap VSCode code-server instance',
80
80
  parameters: {
81
81
  VSCodePassword: {
82
- type: "String",
82
+ type: 'String',
83
83
  default: core_1.Stack.of(scope).stackId,
84
84
  },
85
85
  NodeVersion: {
86
- type: "String",
87
- default: "20",
88
- allowedValues: ["22", "20", "18"],
86
+ type: 'String',
87
+ default: '20',
88
+ allowedValues: ['22', '20', '18'],
89
89
  },
90
90
  DotNetVersion: {
91
- type: "String",
92
- default: "8.0",
93
- allowedValues: ["8.0", "7.0"],
91
+ type: 'String',
92
+ default: '8.0',
93
+ allowedValues: ['8.0', '7.0'],
94
94
  },
95
95
  },
96
96
  // all mainSteps scripts are in in /var/lib/amazon/ssm/<instanceid>/document/orchestration/<uuid>/<StepName>/_script.sh
97
97
  mainSteps: [
98
98
  {
99
- action: "aws:configurePackage",
100
- name: "InstallCloudWatchAgent",
99
+ action: 'aws:configurePackage',
100
+ name: 'InstallCloudWatchAgent',
101
101
  inputs: {
102
- name: "AmazonCloudWatchAgent",
103
- action: "Install",
102
+ name: 'AmazonCloudWatchAgent',
103
+ action: 'Install',
104
104
  },
105
105
  },
106
106
  {
107
- action: "aws:runDocument",
108
- name: "ConfigureCloudWatchAgent",
107
+ action: 'aws:runDocument',
108
+ name: 'ConfigureCloudWatchAgent',
109
109
  inputs: {
110
- documentType: "SSMDocument",
111
- documentPath: "AmazonCloudWatch-ManageAgent",
110
+ documentType: 'SSMDocument',
111
+ documentPath: 'AmazonCloudWatch-ManageAgent',
112
112
  documentParameters: {
113
- action: "configure",
114
- mode: "ec2",
115
- optionalConfigurationSource: "default",
116
- optionalRestart: "yes",
113
+ action: 'configure',
114
+ mode: 'ec2',
115
+ optionalConfigurationSource: 'default',
116
+ optionalRestart: 'yes',
117
117
  },
118
118
  },
119
119
  },
120
120
  {
121
- action: "aws:runShellScript",
122
- name: "InstallAptPackagesApt",
121
+ action: 'aws:runShellScript',
122
+ name: 'InstallAptPackagesApt',
123
123
  inputs: {
124
124
  runCommand: [
125
- "#!/bin/bash",
126
- "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q apt-utils",
127
- "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q needrestart unattended-upgrades",
125
+ '#!/bin/bash',
126
+ 'apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q apt-utils',
127
+ 'apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q needrestart unattended-upgrades',
128
128
  "sed -i 's/#$nrconf{kernelhints} = -1;/$nrconf{kernelhints} = 0;/' /etc/needrestart/needrestart.conf",
129
129
  "sed -i 's/#$nrconf{verbosity} = 2;/$nrconf{verbosity} = 0;/' /etc/needrestart/needrestart.conf",
130
130
  "sed -i \"s/#\$nrconf{restart} = 'i';/\$nrconf{restart} = 'a';/\" /etc/needrestart/needrestart.conf",
131
131
  'echo "Apt helper packages added. Checking configuration"',
132
- "cat /etc/needrestart/needrestart.conf",
132
+ 'cat /etc/needrestart/needrestart.conf',
133
133
  ],
134
134
  },
135
135
  },
136
136
  {
137
- action: "aws:runShellScript",
138
- name: "InstallBasePackagesApt",
137
+ action: 'aws:runShellScript',
138
+ name: 'InstallBasePackagesApt',
139
139
  inputs: {
140
140
  runCommand: [
141
- "#!/bin/bash",
142
- "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q curl gnupg whois argon2 openssl locales locales-all unzip apt-transport-https ca-certificates software-properties-common nginx",
141
+ '#!/bin/bash',
142
+ 'apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q curl gnupg whois argon2 openssl locales locales-all unzip apt-transport-https ca-certificates software-properties-common nginx',
143
143
  ],
144
144
  },
145
145
  },
146
146
  {
147
- action: "aws:runShellScript",
148
- name: "AddUserApt",
147
+ action: 'aws:runShellScript',
148
+ name: 'AddUserApt',
149
149
  inputs: {
150
150
  runCommand: [
151
- "#!/bin/bash",
151
+ '#!/bin/bash',
152
152
  "echo 'Adding user: ${VSCodeUser}'",
153
153
  `adduser --disabled-password --gecos '' ${vsCodeUser}`,
154
154
  `echo "${vsCodeUser}:{{ VSCodePassword }}" | chpasswd`,
@@ -163,97 +163,97 @@ EOF`,
163
163
  },
164
164
  },
165
165
  {
166
- action: "aws:runShellScript",
167
- name: "InstallNodeApt",
166
+ action: 'aws:runShellScript',
167
+ name: 'InstallNodeApt',
168
168
  inputs: {
169
169
  runCommand: [
170
- "#!/bin/bash",
171
- "curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource.gpg",
170
+ '#!/bin/bash',
171
+ 'curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource.gpg',
172
172
  'echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_{{ NodeVersion }}.x nodistro main" > /etc/apt/sources.list.d/nodesource.list',
173
- "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q nodejs",
174
- "npm install -g npm@latest",
173
+ 'apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q nodejs',
174
+ 'npm install -g npm@latest',
175
175
  'echo "Node and npm installed. Checking configuration"',
176
- "node -v",
177
- "npm -v",
176
+ 'node -v',
177
+ 'npm -v',
178
178
  ],
179
179
  },
180
180
  },
181
181
  {
182
- action: "aws:runShellScript",
183
- name: "InstallDockerApt",
182
+ action: 'aws:runShellScript',
183
+ name: 'InstallDockerApt',
184
184
  inputs: {
185
185
  runCommand: [
186
- "#!/bin/bash",
187
- "curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg",
186
+ '#!/bin/bash',
187
+ 'curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg',
188
188
  'echo "deb [signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release --codename --short) stable" > /etc/apt/sources.list.d/docker.list',
189
- "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q docker-ce docker-ce-cli containerd.io",
189
+ 'apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q docker-ce docker-ce-cli containerd.io',
190
190
  `systemctl restart code-server@${vsCodeUser}.service`,
191
- "systemctl start docker.service",
191
+ 'systemctl start docker.service',
192
192
  'echo "Docker installed. Checking configuration"',
193
- "docker --version",
194
- "systemctl status docker.service",
193
+ 'docker --version',
194
+ 'systemctl status docker.service',
195
195
  ],
196
196
  },
197
197
  },
198
198
  {
199
- action: "aws:runShellScript",
200
- name: "InstallGitApt",
199
+ action: 'aws:runShellScript',
200
+ name: 'InstallGitApt',
201
201
  inputs: {
202
202
  runCommand: [
203
- "#!/bin/bash",
204
- "add-apt-repository ppa:git-core/ppa",
205
- "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q git",
203
+ '#!/bin/bash',
204
+ 'add-apt-repository ppa:git-core/ppa',
205
+ 'apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q git',
206
206
  `sudo -u ${vsCodeUser} git config --global user.email "${vsCodeUser}@example.com"`,
207
207
  `sudo -u ${vsCodeUser} git config --global user.name "Workshop ${vsCodeUser}"`,
208
208
  `sudo -u ${vsCodeUser} git config --global init.defaultBranch "main"`,
209
209
  'echo "Git installed. Checking configuration"',
210
- "git --version",
210
+ 'git --version',
211
211
  ],
212
212
  },
213
213
  },
214
214
  {
215
- action: "aws:runShellScript",
216
- name: "InstallPythonApt",
215
+ action: 'aws:runShellScript',
216
+ name: 'InstallPythonApt',
217
217
  inputs: {
218
218
  runCommand: [
219
219
  // Ubuntu 22 default is Python 3.10
220
220
  // Ubuntu 24 default is Python 3.12
221
221
  // The default installed Python version will map to Python3
222
- "#!/bin/bash",
223
- "apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q python3-pip python3-venv python3-boto3 python3-pytest",
222
+ '#!/bin/bash',
223
+ 'apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q python3-pip python3-venv python3-boto3 python3-pytest',
224
224
  `echo 'alias pytest=pytest-3' >> /home/${vsCodeUser}/.bashrc`,
225
225
  `systemctl restart code-server@${vsCodeUser}.service`,
226
- "systemctl start multipathd.service packagekit.service",
227
- "systemctl restart unattended-upgrades.service",
226
+ 'systemctl start multipathd.service packagekit.service',
227
+ 'systemctl restart unattended-upgrades.service',
228
228
  'echo "Python and Pip installed. Checking configuration"',
229
- "python3 --version",
230
- "pip3 --version",
229
+ 'python3 --version',
230
+ 'pip3 --version',
231
231
  ],
232
232
  },
233
233
  },
234
234
  {
235
- action: "aws:runShellScript",
236
- name: "InstallAWSCLI",
235
+ action: 'aws:runShellScript',
236
+ name: 'InstallAWSCLI',
237
237
  inputs: {
238
238
  runCommand: [
239
- "#!/bin/bash",
240
- "curl -fsSL https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip -o /tmp/aws-cli.zip",
241
- "unzip -q -d /tmp /tmp/aws-cli.zip",
242
- "sudo /tmp/aws/install",
243
- "rm -rf /tmp/aws",
239
+ '#!/bin/bash',
240
+ 'curl -fsSL https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip -o /tmp/aws-cli.zip',
241
+ 'unzip -q -d /tmp /tmp/aws-cli.zip',
242
+ 'sudo /tmp/aws/install',
243
+ 'rm -rf /tmp/aws',
244
244
  'echo "AWS CLI installed. Checking configuration"',
245
- "aws --version",
245
+ 'aws --version',
246
246
  ],
247
247
  },
248
248
  },
249
249
  {
250
- action: "aws:runShellScript",
251
- name: "ConfigureCodeServer",
250
+ action: 'aws:runShellScript',
251
+ name: 'ConfigureCodeServer',
252
252
  inputs: {
253
253
  runCommand: [
254
- "#!/bin/bash",
254
+ '#!/bin/bash',
255
255
  `export HOME=/home/${vsCodeUser}`,
256
- "curl -fsSL https://code-server.dev/install.sh | bash -s -- 2>&1",
256
+ 'curl -fsSL https://code-server.dev/install.sh | bash -s -- 2>&1',
257
257
  `systemctl enable --now code-server@${vsCodeUser} 2>&1`,
258
258
  `tee /etc/nginx/conf.d/code-server.conf <<EOF
259
259
  server {
@@ -305,7 +305,7 @@ EOF`,
305
305
  EOF`,
306
306
  `chown -R ${vsCodeUser}:${vsCodeUser} /home/${vsCodeUser}`,
307
307
  `systemctl restart code-server@${vsCodeUser}`,
308
- "systemctl restart nginx",
308
+ 'systemctl restart nginx',
309
309
  `sudo -u ${vsCodeUser} --login code-server --install-extension AmazonWebServices.aws-toolkit-vscode --force`,
310
310
  `sudo -u ${vsCodeUser} --login code-server --install-extension AmazonWebServices.amazon-q-vscode --force`,
311
311
  `sudo -u ${vsCodeUser} --login code-server --install-extension synedra.auto-run-command --force`,
@@ -313,22 +313,22 @@ EOF`,
313
313
  `sudo -u ${vsCodeUser} --login code-server --install-extension ms-vscode.live-server --force`,
314
314
  `chown -R ${vsCodeUser}:${vsCodeUser} /home/${vsCodeUser}`,
315
315
  'echo "Nginx installed. Checking configuration"',
316
- "nginx -t 2>&1",
317
- "systemctl status nginx",
316
+ 'nginx -t 2>&1',
317
+ 'systemctl status nginx',
318
318
  'echo "CodeServer installed. Checking configuration"',
319
- "code-server -v",
319
+ 'code-server -v',
320
320
  `systemctl status code-server@${vsCodeUser}`,
321
321
  ],
322
322
  },
323
323
  },
324
324
  {
325
- action: "aws:runShellScript",
326
- name: "UpdateProfile",
325
+ action: 'aws:runShellScript',
326
+ name: 'UpdateProfile',
327
327
  inputs: {
328
328
  runCommand: [
329
- "#!/bin/bash",
330
- "echo LANG=en_US.utf-8 >> /etc/environment",
331
- "echo LC_ALL=en_US.UTF-8 >> /etc/environment",
329
+ '#!/bin/bash',
330
+ 'echo LANG=en_US.utf-8 >> /etc/environment',
331
+ 'echo LC_ALL=en_US.UTF-8 >> /etc/environment',
332
332
  `echo 'PATH=$PATH:/home/${vsCodeUser}/.local/bin' >> /home/${vsCodeUser}/.bashrc`,
333
333
  `echo 'export PATH' >> /home/${vsCodeUser}/.bashrc`,
334
334
  `echo 'export AWS_REGION=${core_1.Stack.of(scope).region}' >> /home/${vsCodeUser}/.bashrc`,
@@ -340,14 +340,14 @@ EOF`,
340
340
  },
341
341
  },
342
342
  {
343
- action: "aws:runShellScript",
344
- name: "InstallCDK",
343
+ action: 'aws:runShellScript',
344
+ name: 'InstallCDK',
345
345
  inputs: {
346
346
  runCommand: [
347
- "#!/bin/bash",
348
- "npm install -g aws-cdk",
347
+ '#!/bin/bash',
348
+ 'npm install -g aws-cdk',
349
349
  'echo "AWS CDK installed. Checking configuration"',
350
- "cdk --version",
350
+ 'cdk --version',
351
351
  ],
352
352
  },
353
353
  },
@@ -356,68 +356,68 @@ EOF`,
356
356
  });
357
357
  break;
358
358
  case vscode_server_1.LinuxFlavorType.AMAZON_LINUX_2023:
359
- ssmDocument = new ssm.CfnDocument(scope, "ssm-document-al2023", {
359
+ ssmDocument = new ssm.CfnDocument(scope, 'ssm-document-al2023', {
360
360
  name: `vscode-server-al2023-${core_1.Stack.of(scope).stackName}`,
361
- documentType: "Command",
361
+ documentType: 'Command',
362
362
  content: {
363
- schemaVersion: "2.2",
364
- description: "Bootstrap VSCode code-server instance",
363
+ schemaVersion: '2.2',
364
+ description: 'Bootstrap VSCode code-server instance',
365
365
  parameters: {
366
366
  VSCodePassword: {
367
- type: "String",
367
+ type: 'String',
368
368
  default: core_1.Stack.of(scope).stackId,
369
369
  },
370
370
  NodeVersion: {
371
- type: "String",
372
- default: "20",
373
- allowedValues: ["22", "20", "18"],
371
+ type: 'String',
372
+ default: '20',
373
+ allowedValues: ['22', '20', '18'],
374
374
  },
375
375
  DotNetVersion: {
376
- type: "String",
377
- default: "8.0",
378
- allowedValues: ["8.0", "7.0"],
376
+ type: 'String',
377
+ default: '8.0',
378
+ allowedValues: ['8.0', '7.0'],
379
379
  },
380
380
  },
381
381
  // all mainSteps scripts are in in /var/lib/amazon/ssm/<instanceid>/document/orchestration/<uuid>/<StepName>/_script.sh
382
382
  mainSteps: [
383
383
  {
384
- action: "aws:configurePackage",
385
- name: "InstallCloudWatchAgent",
384
+ action: 'aws:configurePackage',
385
+ name: 'InstallCloudWatchAgent',
386
386
  inputs: {
387
- name: "AmazonCloudWatchAgent",
388
- action: "Install",
387
+ name: 'AmazonCloudWatchAgent',
388
+ action: 'Install',
389
389
  },
390
390
  },
391
391
  {
392
- action: "aws:runDocument",
393
- name: "ConfigureCloudWatchAgent",
392
+ action: 'aws:runDocument',
393
+ name: 'ConfigureCloudWatchAgent',
394
394
  inputs: {
395
- documentType: "SSMDocument",
396
- documentPath: "AmazonCloudWatch-ManageAgent",
395
+ documentType: 'SSMDocument',
396
+ documentPath: 'AmazonCloudWatch-ManageAgent',
397
397
  documentParameters: {
398
- action: "configure",
399
- mode: "ec2",
400
- optionalConfigurationSource: "default",
401
- optionalRestart: "yes",
398
+ action: 'configure',
399
+ mode: 'ec2',
400
+ optionalConfigurationSource: 'default',
401
+ optionalRestart: 'yes',
402
402
  },
403
403
  },
404
404
  },
405
405
  {
406
- action: "aws:runShellScript",
407
- name: "InstallBasePackagesDnf",
406
+ action: 'aws:runShellScript',
407
+ name: 'InstallBasePackagesDnf',
408
408
  inputs: {
409
409
  runCommand: [
410
- "#!/bin/bash",
411
- "dnf install -y --allowerasing whois argon2 unzip nginx curl gnupg openssl",
410
+ '#!/bin/bash',
411
+ 'dnf install -y --allowerasing whois argon2 unzip nginx curl gnupg openssl',
412
412
  ],
413
413
  },
414
414
  },
415
415
  {
416
- action: "aws:runShellScript",
417
- name: "AddUserDnf",
416
+ action: 'aws:runShellScript',
417
+ name: 'AddUserDnf',
418
418
  inputs: {
419
419
  runCommand: [
420
- "#!/bin/bash",
420
+ '#!/bin/bash',
421
421
  `echo 'Adding user: ${vsCodeUser}'`,
422
422
  `adduser -c '' ${vsCodeUser}`,
423
423
  `passwd -l ${vsCodeUser}`,
@@ -429,97 +429,97 @@ EOF`,
429
429
  },
430
430
  },
431
431
  {
432
- action: "aws:runShellScript",
433
- name: "InstallNodeDnf",
432
+ action: 'aws:runShellScript',
433
+ name: 'InstallNodeDnf',
434
434
  inputs: {
435
435
  runCommand: [
436
- "#!/bin/bash",
437
- "dnf install -y nodejs20 npm",
438
- "ln -s -f /usr/bin/node-20 /usr/bin/node",
439
- "npm install -g npm@latest",
436
+ '#!/bin/bash',
437
+ 'dnf install -y nodejs20 npm',
438
+ 'ln -s -f /usr/bin/node-20 /usr/bin/node',
439
+ 'npm install -g npm@latest',
440
440
  'echo "Node and npm installed. Checking configuration"',
441
- "node -v",
442
- "npm -v",
441
+ 'node -v',
442
+ 'npm -v',
443
443
  ],
444
444
  },
445
445
  },
446
446
  {
447
- action: "aws:runShellScript",
448
- name: "InstallDockerDnf",
447
+ action: 'aws:runShellScript',
448
+ name: 'InstallDockerDnf',
449
449
  inputs: {
450
450
  runCommand: [
451
- "#!/bin/bash",
452
- "dnf install -y docker",
451
+ '#!/bin/bash',
452
+ 'dnf install -y docker',
453
453
  `usermod -aG docker ${vsCodeUser}`,
454
454
  `systemctl restart code-server@${vsCodeUser}.service`,
455
- "systemctl start docker.service",
455
+ 'systemctl start docker.service',
456
456
  'echo "Docker installed. Checking configuration"',
457
- "docker --version",
458
- "systemctl status docker.service",
457
+ 'docker --version',
458
+ 'systemctl status docker.service',
459
459
  ],
460
460
  },
461
461
  },
462
462
  {
463
- action: "aws:runShellScript",
464
- name: "InstallGitDnf",
463
+ action: 'aws:runShellScript',
464
+ name: 'InstallGitDnf',
465
465
  inputs: {
466
466
  runCommand: [
467
- "#!/bin/bash",
468
- "dnf install -y git",
467
+ '#!/bin/bash',
468
+ 'dnf install -y git',
469
469
  `sudo -u ${vsCodeUser} git config --global user.email "${vsCodeUser}@example.com"`,
470
470
  `sudo -u ${vsCodeUser} git config --global user.name "Workshop ${vsCodeUser}"`,
471
471
  `sudo -u ${vsCodeUser} git config --global init.defaultBranch "main"`,
472
472
  'echo "Git installed. Checking configuration"',
473
- "git --version",
473
+ 'git --version',
474
474
  ],
475
475
  },
476
476
  },
477
477
  {
478
- action: "aws:runShellScript",
479
- name: "InstallPythonDnf",
478
+ action: 'aws:runShellScript',
479
+ name: 'InstallPythonDnf',
480
480
  inputs: {
481
481
  runCommand: [
482
482
  // AL2023 currently ships with Python 3.9 preinstalled, but 3.11 is available in the repository
483
483
  // Install 3.11 alongside 3.9 and setup some alias so that 3.11 is loaded when participant runs Python3
484
484
  // If Python 3.12 become available, update below
485
- "#!/bin/bash",
486
- "dnf install -y python3.11 python3.11-pip python3-virtualenv python3-pytest python3-boto3",
485
+ '#!/bin/bash',
486
+ 'dnf install -y python3.11 python3.11-pip python3-virtualenv python3-pytest python3-boto3',
487
487
  `echo 'alias pytest=pytest-3' >> /home/${vsCodeUser}/.bashrc`,
488
488
  `echo 'alias python3=python3.11' >> /home/${vsCodeUser}/.bashrc`,
489
489
  `echo 'alias pip3=pip3.11' >> /home/${vsCodeUser}/.bashrc`,
490
490
  "echo 'alias=python3=python3.11' >> ~/.bashrc",
491
491
  "echo 'alias pip3=pip3.11' >> ~/.bashrc",
492
- "python3.11 -m pip install --upgrade pip 2>&1",
492
+ 'python3.11 -m pip install --upgrade pip 2>&1',
493
493
  'echo "Python and Pip installed. Checking configuration"',
494
- "python3.11 --version",
495
- "python3.11 -m pip --version 2>&1",
494
+ 'python3.11 --version',
495
+ 'python3.11 -m pip --version 2>&1',
496
496
  ],
497
497
  },
498
498
  },
499
499
  // add go, dotnet
500
500
  {
501
- action: "aws:runShellScript",
502
- name: "InstallAWSCLI",
501
+ action: 'aws:runShellScript',
502
+ name: 'InstallAWSCLI',
503
503
  inputs: {
504
504
  runCommand: [
505
- "#!/bin/bash",
506
- "curl -fsSL https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip -o /tmp/aws-cli.zip",
507
- "unzip -q -d /tmp /tmp/aws-cli.zip",
508
- "sudo /tmp/aws/install",
509
- "rm -rf /tmp/aws",
505
+ '#!/bin/bash',
506
+ 'curl -fsSL https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip -o /tmp/aws-cli.zip',
507
+ 'unzip -q -d /tmp /tmp/aws-cli.zip',
508
+ 'sudo /tmp/aws/install',
509
+ 'rm -rf /tmp/aws',
510
510
  'echo "AWS CLI installed. Checking configuration"',
511
- "aws --version",
511
+ 'aws --version',
512
512
  ],
513
513
  },
514
514
  },
515
515
  {
516
- action: "aws:runShellScript",
517
- name: "ConfigureCodeServer",
516
+ action: 'aws:runShellScript',
517
+ name: 'ConfigureCodeServer',
518
518
  inputs: {
519
519
  runCommand: [
520
- "#!/bin/bash",
520
+ '#!/bin/bash',
521
521
  `export HOME=/home/${vsCodeUser}`,
522
- "curl -fsSL https://code-server.dev/install.sh | bash -s -- 2>&1",
522
+ 'curl -fsSL https://code-server.dev/install.sh | bash -s -- 2>&1',
523
523
  `systemctl enable --now code-server@${vsCodeUser} 2>&1`,
524
524
  `tee /etc/nginx/conf.d/code-server.conf <<EOF
525
525
  server {
@@ -571,7 +571,7 @@ EOF`,
571
571
  EOF`,
572
572
  `chown -R ${vsCodeUser}:${vsCodeUser} /home/${vsCodeUser}`,
573
573
  `systemctl restart code-server@${vsCodeUser}`,
574
- "systemctl restart nginx",
574
+ 'systemctl restart nginx',
575
575
  `sudo -u ${vsCodeUser} --login code-server --install-extension AmazonWebServices.aws-toolkit-vscode --force`,
576
576
  `sudo -u ${vsCodeUser} --login code-server --install-extension AmazonWebServices.amazon-q-vscode --force`,
577
577
  `sudo -u ${vsCodeUser} --login code-server --install-extension synedra.auto-run-command --force`,
@@ -579,22 +579,22 @@ EOF`,
579
579
  `sudo -u ${vsCodeUser} --login code-server --install-extension ms-vscode.live-server --force`,
580
580
  `chown -R ${vsCodeUser}:${vsCodeUser} /home/${vsCodeUser}`,
581
581
  'echo "Nginx installed. Checking configuration"',
582
- "nginx -t 2>&1",
583
- "systemctl status nginx",
582
+ 'nginx -t 2>&1',
583
+ 'systemctl status nginx',
584
584
  'echo "CodeServer installed. Checking configuration"',
585
- "code-server -v",
585
+ 'code-server -v',
586
586
  `systemctl status code-server@${vsCodeUser}`,
587
587
  ],
588
588
  },
589
589
  },
590
590
  {
591
- action: "aws:runShellScript",
592
- name: "UpdateProfile",
591
+ action: 'aws:runShellScript',
592
+ name: 'UpdateProfile',
593
593
  inputs: {
594
594
  runCommand: [
595
- "#!/bin/bash",
596
- "echo LANG=en_US.utf-8 >> /etc/environment",
597
- "echo LC_ALL=en_US.UTF-8 >> /etc/environment",
595
+ '#!/bin/bash',
596
+ 'echo LANG=en_US.utf-8 >> /etc/environment',
597
+ 'echo LC_ALL=en_US.UTF-8 >> /etc/environment',
598
598
  `echo 'PATH=$PATH:/home/${vsCodeUser}/.local/bin' >> /home/${vsCodeUser}/.bashrc`,
599
599
  `echo 'export PATH' >> /home/${vsCodeUser}/.bashrc`,
600
600
  `echo 'export AWS_REGION=${core_1.Stack.of(scope).region}' >> /home/${vsCodeUser}/.bashrc`,
@@ -606,14 +606,14 @@ EOF`,
606
606
  },
607
607
  },
608
608
  {
609
- action: "aws:runShellScript",
610
- name: "InstallCDK",
609
+ action: 'aws:runShellScript',
610
+ name: 'InstallCDK',
611
611
  inputs: {
612
612
  runCommand: [
613
- "#!/bin/bash",
614
- "npm install -g aws-cdk",
613
+ '#!/bin/bash',
614
+ 'npm install -g aws-cdk',
615
615
  'echo "AWS CDK installed. Checking configuration"',
616
- "cdk --version",
616
+ 'cdk --version',
617
617
  ],
618
618
  },
619
619
  },
@@ -631,57 +631,57 @@ exports.Installer = Installer;
631
631
  class CustomResourceInstaller extends Installer {
632
632
  constructor(scope, options) {
633
633
  super();
634
- const onEvent = new installer_function_1.InstallerFunction(scope, "InstallerOnEventHandler", {
634
+ const onEvent = new installer_function_1.InstallerFunction(scope, 'InstallerOnEventHandler', {
635
635
  timeout: core_1.Duration.seconds(300), // TODO configurable
636
636
  memorySize: 512, // TODO configurable
637
637
  });
638
638
  cdk_nag_1.NagSuppressions.addResourceSuppressions([onEvent], [
639
639
  {
640
- id: "AwsSolutions-IAM4",
641
- reason: "For this event handler we do not need to restrict managed policies",
640
+ id: 'AwsSolutions-IAM4',
641
+ reason: 'For this event handler we do not need to restrict managed policies',
642
642
  },
643
643
  {
644
- id: "AwsSolutions-L1",
645
- reason: "For this lambda the latest runtime is not needed",
644
+ id: 'AwsSolutions-L1',
645
+ reason: 'For this lambda the latest runtime is not needed',
646
646
  },
647
647
  ], true);
648
648
  const documentArn = core_1.Arn.format({
649
- service: "ssm",
650
- resource: "document",
649
+ service: 'ssm',
650
+ resource: 'document',
651
651
  resourceName: options.documentName,
652
652
  }, core_1.Stack.of(scope));
653
653
  const cwManageAgentArn = core_1.Arn.format({
654
- service: "ssm",
655
- resource: "document",
656
- resourceName: "AmazonCloudWatch-ManageAgent",
654
+ service: 'ssm',
655
+ resource: 'document',
656
+ resourceName: 'AmazonCloudWatch-ManageAgent',
657
657
  }, core_1.Stack.of(scope));
658
658
  const targetEc2InstanceArn = core_1.Arn.format({
659
- service: "ec2",
660
- resource: "instance",
659
+ service: 'ec2',
660
+ resource: 'instance',
661
661
  resourceName: options.instanceId,
662
662
  }, core_1.Stack.of(scope));
663
663
  onEvent.addToRolePolicy(new aws_iam_1.PolicyStatement({
664
- actions: ["ssm:SendCommand"],
664
+ actions: ['ssm:SendCommand'],
665
665
  resources: [documentArn, cwManageAgentArn, targetEc2InstanceArn],
666
666
  }));
667
- const provider = new custom_resources_1.Provider(scope, "InstallerProvider", {
667
+ const provider = new custom_resources_1.Provider(scope, 'InstallerProvider', {
668
668
  onEventHandler: onEvent,
669
669
  });
670
670
  cdk_nag_1.NagSuppressions.addResourceSuppressions([provider], [
671
671
  {
672
- id: "AwsSolutions-IAM4",
673
- reason: "For this provider we do not need to restrict managed policies",
672
+ id: 'AwsSolutions-IAM4',
673
+ reason: 'For this provider we do not need to restrict managed policies',
674
674
  },
675
675
  {
676
- id: "AwsSolutions-IAM5",
677
- reason: "For this provider wildcards are fine",
676
+ id: 'AwsSolutions-IAM5',
677
+ reason: 'For this provider wildcards are fine',
678
678
  },
679
679
  {
680
- id: "AwsSolutions-L1",
681
- reason: "For this provider the latest runtime is not needed",
680
+ id: 'AwsSolutions-L1',
681
+ reason: 'For this provider the latest runtime is not needed',
682
682
  },
683
683
  ], true);
684
- new core_1.CustomResource(scope, "SSMInstallerCustomResource", {
684
+ new core_1.CustomResource(scope, 'SSMInstallerCustomResource', {
685
685
  serviceToken: provider.serviceToken,
686
686
  properties: {
687
687
  ServiceTimeout: 305, // TODO configurable
@@ -694,4 +694,4 @@ class CustomResourceInstaller extends Installer {
694
694
  }
695
695
  _bind() { }
696
696
  }
697
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2luc3RhbGxlci9pbnN0YWxsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBQXNEO0FBRXRELDJDQUEyQztBQUMzQywyQ0FBd0U7QUFDeEUsbUVBQXdEO0FBQ3hELHFDQUEwQztBQUUxQyw2REFBeUQ7QUFDekQsb0RBQW1EO0FBc0RuRCxNQUFzQixTQUFTO0lBQ3RCLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBeUI7UUFDNUMsT0FBTyxJQUFJLENBQUMsS0FBTSxTQUFRLFNBQVM7WUFDMUIsS0FBSyxDQUFDLEtBQWdCO2dCQUMzQixJQUFJLFlBQVksQ0FBQztnQkFDakIsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLElBQUksS0FBSyxDQUFDO2dCQUM3RCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQztnQkFDcEQsSUFBSSxPQUFPLENBQUMsWUFBWSxJQUFJLE9BQU8sQ0FBQyxZQUFZLElBQUksRUFBRSxFQUFFLENBQUM7b0JBQ3ZELFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO2dCQUN0QyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUNyQyxLQUFLLEVBQ0wsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixPQUFPLENBQUMsVUFBVSxFQUNsQixPQUFPLENBQUMsVUFBVSxFQUNsQiwrQkFBZSxDQUFDLFNBQVMsQ0FDMUIsQ0FBQztvQkFDRixZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUssQ0FBQztnQkFDaEMsQ0FBQztnQkFFRCxNQUFNLHNCQUFzQixHQUMxQixPQUFPLENBQUMsc0JBQXNCLElBQUksWUFBWSxZQUFZLEVBQUUsQ0FBQztnQkFFL0QsTUFBTSxTQUFTLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxLQUFLLEVBQUU7b0JBQ25ELFVBQVUs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QyxLQUFLLEVBQUUsbUJBQW1CLEVBQUU7WUFDeEQsY0FBYyxFQUFFLE9BQU87U0FDeEIsQ0FBQyxDQUFDO1FBQ0gseUJBQWUsQ0FBQyx1QkFBdUIsQ0FDckMsQ0FBQyxRQUFRLENBQUMsRUFDVjtZQUNFO2dCQUNFLEVBQUUsRUFBRSxtQkFBbUI7Z0JBQ3ZCLE1BQU0sRUFDSiwrREFBK0Q7YUFDbEU7WUFDRDtnQkFDRSxFQUFFLEVBQUUsbUJBQW1CO2dCQUN2QixNQUFNLEVBQUUsc0NBQXNDO2FBQy9DO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLGlCQUFpQjtnQkFDckIsTUFBTSxFQUFFLG9EQUFvRDthQUM3RDtTQUNGLEVBQ0QsSUFBSSxDQUNMLENBQUM7UUFFRixJQUFJLHFCQUFjLENBQUMsS0FBSyxFQUFFLDRCQUE0QixFQUFFO1lBQ3RELFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtZQUNuQyxVQUFVLEVBQUU7Z0JBQ1YsY0FBYyxFQUFFLEdBQUcsRUFBRSxvQkFBb0I7Z0JBQ3pDLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtnQkFDOUIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO2dCQUNsQyxzQkFBc0IsRUFBRSxPQUFPLENBQUMsc0JBQXNCO2dCQUN0RCxjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWM7YUFDdkM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxLQUFJLENBQUM7Q0FDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgRnVuY3Rpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0ICogYXMgc3NtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3NtXCI7XG5pbXBvcnQgeyBBcm4sIEN1c3RvbVJlc291cmNlLCBEdXJhdGlvbiwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWIvY29yZVwiO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiO1xuaW1wb3J0IHsgTmFnU3VwcHJlc3Npb25zIH0gZnJvbSBcImNkay1uYWdcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBJbnN0YWxsZXJGdW5jdGlvbiB9IGZyb20gXCIuL2luc3RhbGxlci1mdW5jdGlvblwiO1xuaW1wb3J0IHsgTGludXhGbGF2b3JUeXBlIH0gZnJvbSBcIi4uL3ZzY29kZS1zZXJ2ZXJcIjtcblxuaW50ZXJmYWNlIEluc3RhbGxlck9wdGlvbnNCYXNlIHtcbiAgLyoqXG4gICAqIFRoZSBlYzIgaW5zdGFuY2UgaWQgdG8gaW5zdGFsbCB0aGUgc3NtIGRvY3VtZW50IG9uXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjdXN0b20gc3NtIGRvY3VtZW50IHRvIGluc3RhbGwuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRoZSBzc20gZG9jdW1lbnQgb2YgdGhlIGNvbnN0cnVjdFxuICAgKi9cbiAgcmVhZG9ubHkgZG9jdW1lbnROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY2xvdWR3YXRjaCBsb2cgZ3JvdXAgZm9yIHRoZSBpbnN0YWxsIGxvZ3NcbiAgICpcbiAgICogQGRlZmF1bHQgL2F3cy9zc20vJHtkb2N1bWVudE5hbWV9XG4gICAqL1xuICByZWFkb25seSBjbG91ZFdhdGNoTG9nR3JvdXBOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdXNlciB1bmRlciB3aGljaCB0aGUgdnNjb2RlIHNlcnZlciBydW5zXG4gICAqL1xuICByZWFkb25seSB2c0NvZGVVc2VyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXNzd29yZCBvZiB0aGUgdXNlciB1bmRlciB3aGljaCB0aGUgdnNjb2RlIHNlcnZlciBydW5zXG4gICAqL1xuICByZWFkb25seSB2c0NvZGVQYXNzd29yZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaG9tZSBmb2xkZXIgb2YgdGhlIHVzZXIgdW5kZXIgd2hpY2ggdGhlIHZzY29kZSBzZXJ2ZXIgcnVuc1xuICAgKi9cbiAgcmVhZG9ubHkgaG9tZUZvbGRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSByZXN0IHBhdGggdnMgY29kZSBzZXJ2ZXIgd2lsbCBydW5cbiAgICpcbiAgICogQGRlZmF1bHQgYXBwXG4gICAqL1xuICByZWFkb25seSBkZXZTZXJ2ZXJCYXNlUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvcnQgdnNjb2RlciBzZXJ2ZXIgd2lsbCBiZSBzZXJ2ZWQgaW4gdGhlIGluc3RhbmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IDgwODFcbiAgICovXG4gIHJlYWRvbmx5IGRldlNlcnZlclBvcnQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFsbGVyT3B0aW9ucyBleHRlbmRzIEluc3RhbGxlck9wdGlvbnNCYXNlIHt9XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbnN0YWxsZXIge1xuICBwdWJsaWMgc3RhdGljIHVidW50dShvcHRpb25zOiBJbnN0YWxsZXJPcHRpb25zKTogSW5zdGFsbGVyIHtcbiAgICByZXR1cm4gbmV3IChjbGFzcyBleHRlbmRzIEluc3RhbGxlciB7XG4gICAgICBwdWJsaWMgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCk6IEluc3RhbGxlciB7XG4gICAgICAgIGxldCBkb2N1bWVudE5hbWU7XG4gICAgICAgIGNvbnN0IGRldlNlcnZlckJhc2VQYXRoID0gb3B0aW9ucy5kZXZTZXJ2ZXJCYXNlUGF0aCA/PyBcImFwcFwiO1xuICAgICAgICBjb25zdCBkZXZTZXJ2ZXJQb3J0ID0gb3B0aW9ucy5kZXZTZXJ2ZXJQb3J0ID8/IDgwODE7XG4gICAgICAgIGlmIChvcHRpb25zLmRvY3VtZW50TmFtZSAmJiBvcHRpb25zLmRvY3VtZW50TmFtZSAhPSBcIlwiKSB7XG4gICAgICAgICAgZG9jdW1lbnROYW1lID0gb3B0aW9ucy5kb2N1bWVudE5hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZG9jdW1lbnQgPSB0aGlzLmNyZWF0ZVNTTURvY3VtZW50KFxuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICBkZXZTZXJ2ZXJCYXNlUGF0aCxcbiAgICAgICAgICAgIGRldlNlcnZlclBvcnQsXG4gICAgICAgICAgICBvcHRpb25zLnZzQ29kZVVzZXIsXG4gICAgICAgICAgICBvcHRpb25zLmhvbWVGb2xkZXIsXG4gICAgICAgICAgICBMaW51eEZsYXZvclR5cGUuVUJVTlRVXzIyLFxuICAgICAgICAgICk7XG4gICAgICAgICAgZG9jdW1lbnROYW1lID0gZG9jdW1lbnQubmFtZSE7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbG91ZFdhdGNoTG9nR3JvdXBOYW1lID1cbiAgICAgICAgICBvcHRpb25zLmNsb3VkV2F0Y2hMb2dHcm91cE5hbWUgPz8gYC9hd3Mvc3NtLyR7ZG9jdW1lbnROYW1lfWA7XG5cbiAgICAgICAgY29uc3QgaW5zdGFsbGVyID0gbmV3IEN1c3RvbVJlc291cmNlSW5zdGFsbGVyKHNjb3BlLCB7XG4gICAgICAgICAgaW5zdGFuY2VJZDogb3B0aW9ucy5pbnN0YW5jZUlkLFxuICAgICAgICAgIGRvY3VtZW50TmFtZTogZG9jdW1lbnROYW1lLFxuICAgICAgICAgIGNsb3VkV2F0Y2hMb2dHcm91cE5hbWU6IGNsb3VkV2F0Y2hMb2dHcm91cE5hbWUsXG4gICAgICAgICAgdnNDb2RlVXNlcjogb3B0aW9ucy52c0NvZGVVc2VyLFxuICAgICAgICAgIHZzQ29kZVBhc3N3b3JkOiBvcHRpb25zLnZzQ29kZVBhc3N3b3JkLFxuICAgICAgICAgIGhvbWVGb2xkZXI6IG9wdGlvbnMuaG9tZUZvbGRlcixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbGxlcjtcbiAgICAgIH1cbiAgICB9KSgpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhbWF6b25MaW51eDIwMjMob3B0aW9uczogSW5zdGFsbGVyT3B0aW9ucyk6IEluc3RhbGxlciB7XG4gICAgcmV0dXJuIG5ldyAoY2xhc3MgZXh0ZW5kcyBJbnN0YWxsZXIge1xuICAgICAgcHVibGljIF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QpOiBJbnN0YWxsZXIge1xuICAgICAgICBsZXQgZG9jdW1lbnROYW1lO1xuICAgICAgICBjb25zdCBkZXZTZXJ2ZXJCYXNlUGF0aCA9IG9wdGlvbnMuZGV2U2VydmVyQmFzZVBhdGggPz8gXCJhcHBcIjtcbiAgICAgICAgY29uc3QgZGV2U2VydmVyUG9ydCA9IG9wdGlvbnMuZGV2U2VydmVyUG9ydCA/PyA4MDgxO1xuICAgICAgICBpZiAob3B0aW9ucy5kb2N1bWVudE5hbWUgJiYgb3B0aW9ucy5kb2N1bWVudE5hbWUgIT0gXCJcIikge1xuICAgICAgICAgIGRvY3VtZW50TmFtZSA9IG9wdGlvbnMuZG9jdW1lbnROYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGRvY3VtZW50ID0gdGhpcy5jcmVhdGVTU01Eb2N1bWVudChcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgZGV2U2VydmVyQmFzZVBhdGgsXG4gICAgICAgICAgICBkZXZTZXJ2ZXJQb3J0LFxuICAgICAgICAgICAgb3B0aW9ucy52c0NvZGVVc2VyLFxuICAgICAgICAgICAgb3B0aW9ucy5ob21lRm9sZGVyLFxuICAgICAgICAgICAgTGludXhGbGF2b3JUeXBlLkFNQVpPTl9MSU5VWF8yMDIzLFxuICAgICAgICAgICk7XG4gICAgICAgICAgZG9jdW1lbnROYW1lID0gZG9jdW1lbnQubmFtZSE7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbG91ZFdhdGNoTG9nR3JvdXBOYW1lID1cbiAgICAgICAgICBvcHRpb25zLmNsb3VkV2F0Y2hMb2dHcm91cE5hbWUgPz8gYC9hd3Mvc3NtLyR7ZG9jdW1lbnROYW1lfWA7XG5cbiAgICAgICAgY29uc3QgaW5zdGFsbGVyID0gbmV3IEN1c3RvbVJlc291cmNlSW5zdGFsbGVyKHNjb3BlLCB7XG4gICAgICAgICAgaW5zdGFuY2VJZDogb3B0aW9ucy5pbnN0YW5jZUlkLFxuICAgICAgICAgIGRvY3VtZW50TmFtZTogZG9jdW1lbnROYW1lLFxuICAgICAgICAgIGNsb3VkV2F0Y2hMb2dHcm91cE5hbWU6IGNsb3VkV2F0Y2hMb2dHcm91cE5hbWUsXG4gICAgICAgICAgdnNDb2RlVXNlcjogb3B0aW9ucy52c0NvZGVVc2VyLFxuICAgICAgICAgIHZzQ29kZVBhc3N3b3JkOiBvcHRpb25zLnZzQ29kZVBhc3N3b3JkLFxuICAgICAgICAgIGhvbWVGb2xkZXI6IG9wdGlvbnMuaG9tZUZvbGRlcixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbGxlcjtcbiAgICAgIH1cbiAgICB9KSgpO1xuICB9XG5cbiAgcHVibGljIGluc3RhbmNlSWQhOiBzdHJpbmc7XG4gIHB1YmxpYyBkb2N1bWVudE5hbWUhOiBzdHJpbmc7XG4gIHB1YmxpYyBjbG91ZFdhdGNoTG9nR3JvdXBOYW1lITogc3RyaW5nO1xuICBwdWJsaWMgdnNDb2RlUGFzc3dvcmQhOiBzdHJpbmc7XG4gIHB1YmxpYyB2c0NvZGVQYXNzd29yZFRlc3QhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge31cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCk6IGFueTtcblxuICBwcml2YXRlIGNyZWF0ZVNTTURvY3VtZW50KFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgZGV2U2VydmVyQmFzZVBhdGg6IHN0cmluZyxcbiAgICBkZXZTZXJ2ZXJQb3J0OiBudW1iZXIsXG4gICAgdnNDb2RlVXNlcjogc3RyaW5nLFxuICAgIGhvbWVGb2xkZXI6IHN0cmluZyxcbiAgICBsaW51eEZsYXZvcjogTGludXhGbGF2b3JUeXBlLFxuICApOiBzc20uQ2ZuRG9jdW1lbnQge1xuICAgIGxldCBzc21Eb2N1bWVudDogc3NtLkNmbkRvY3VtZW50O1xuICAgIHN3aXRjaCAobGludXhGbGF2b3IpIHtcbiAgICAgIGNhc2UgTGludXhGbGF2b3JUeXBlLlVCVU5UVV8yMjpcbiAgICAgIGNhc2UgTGludXhGbGF2b3JUeXBlLlVCVU5UVV8yNDpcbiAgICAgICAgLy8gQ3JlYXRlIGFuIFNTTSBkb2N1bWVudCB3aXRoIG11bHRpcGxlIGFjdGlvbnMgdG8gaW5zdGFsbCB0aGUgc29mdHdhcmVcbiAgICAgICAgc3NtRG9jdW1lbnQgPSBuZXcgc3NtLkNmbkRvY3VtZW50KHNjb3BlLCBcInNzbS1kb2N1bWVudC11YnVudHVcIiwge1xuICAgICAgICAgIG5hbWU6IGB2c2NvZGUtc2VydmVyLXVidW50dS0ke1N0YWNrLm9mKHNjb3BlKS5zdGFja05hbWV9YCxcbiAgICAgICAgICBkb2N1bWVudFR5cGU6IFwiQ29tbWFuZFwiLFxuICAgICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICAgIHNjaGVtYVZlcnNpb246IFwiMi4yXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJCb290c3RyYXAgVlNDb2RlIGNvZGUtc2VydmVyIGluc3RhbmNlXCIsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgIFZTQ29kZVBhc3N3b3JkOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJTdHJpbmdcIixcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBTdGFjay5vZihzY29wZSkuc3RhY2tJZCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgTm9kZVZlcnNpb246IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiMjBcIixcbiAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCIyMlwiLCBcIjIwXCIsIFwiMThcIl0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIERvdE5ldFZlcnNpb246IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiOC4wXCIsXG4gICAgICAgICAgICAgICAgYWxsb3dlZFZhbHVlczogW1wiOC4wXCIsIFwiNy4wXCJdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGFsbCBtYWluU3RlcHMgc2NyaXB0cyBhcmUgaW4gaW4gL3Zhci9saWIvYW1hem9uL3NzbS88aW5zdGFuY2VpZD4vZG9jdW1lbnQvb3JjaGVzdHJhdGlvbi88dXVpZD4vPFN0ZXBOYW1lPi9fc2NyaXB0LnNoXG4gICAgICAgICAgICBtYWluU3RlcHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogXCJhd3M6Y29uZmlndXJlUGFja2FnZVwiLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwiSW5zdGFsbENsb3VkV2F0Y2hBZ2VudFwiLFxuICAgICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJBbWF6b25DbG91ZFdhdGNoQWdlbnRcIixcbiAgICAgICAgICAgICAgICAgIGFjdGlvbjogXCJJbnN0YWxsXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogXCJhd3M6cnVuRG9jdW1lbnRcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbmZpZ3VyZUNsb3VkV2F0Y2hBZ2VudFwiLFxuICAgICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgICAgZG9jdW1lbnRUeXBlOiBcIlNTTURvY3VtZW50XCIsXG4gICAgICAgICAgICAgICAgICBkb2N1bWVudFBhdGg6IFwiQW1hem9uQ2xvdWRXYXRjaC1NYW5hZ2VBZ2VudFwiLFxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnRQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogXCJjb25maWd1cmVcIixcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogXCJlYzJcIixcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxDb25maWd1cmF0aW9uU291cmNlOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxSZXN0YXJ0OiBcInllc1wiLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBcImF3czpydW5TaGVsbFNjcmlwdFwiLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwiSW5zdGFsbEFwdFBhY2thZ2VzQXB0XCIsXG4gICAgICAgICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICAgICAgICBydW5Db21tYW5kOiBbXG4gICAgICAgICAgICAgICAgICAgIFwiIyEvYmluL2Jhc2hcIixcbiAgICAgICAgICAgICAgICAgICAgXCJhcHQtZ2V0IC1xIHVwZGF0ZSAmJiBERUJJQU5fRlJPTlRFTkQ9bm9uaW50ZXJhY3RpdmUgYXB0LWdldCBpbnN0YWxsIC15IC1xIGFwdC11dGlsc1wiLFxuICAgICAgICAgICAgICAgICAgICBcImFwdC1nZXQgLXEgdXBkYXRlICYmIERFQklBTl9GUk9OVEVORD1ub25pbnRlcmFjdGl2ZSBhcHQtZ2V0IGluc3RhbGwgLXkgLXEgbmVlZHJlc3RhcnQgdW5hdHRlbmRlZC11cGdyYWRlc1wiLFxuICAgICAgICAgICAgICAgICAgICBcInNlZCAtaSAncy8jJG5yY29uZntrZXJuZWxoaW50c30gPSAtMTsvJG5yY29uZntrZXJuZWxoaW50c30gPSAwOy8nIC9ldGMvbmVlZHJlc3RhcnQvbmVlZHJlc3RhcnQuY29uZlwiLFxuICAgICAgICAgICAgICAgICAgICBcInNlZCAtaSAncy8jJG5yY29uZnt2ZXJib3NpdHl9ID0gMjsvJG5yY29uZnt2ZXJib3NpdHl9ID0gMDsvJyAvZXRjL25lZWRyZXN0YXJ0L25lZWRyZXN0YXJ0LmNvbmZcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzZWQgLWkgXFxcInMvI1xcJG5yY29uZntyZXN0YXJ0fSA9ICdpJzsvXFwkbnJjb25me3Jlc3RhcnR9ID0gJ2EnOy9cXFwiIC9ldGMvbmVlZHJlc3RhcnQvbmVlZHJlc3RhcnQuY29uZlwiLFxuICAgICAgICAgICAgICAgICAgICAnZWNobyBcIkFwdCBoZWxwZXIgcGFja2FnZXMgYWRkZWQuIENoZWNraW5nIGNvbmZpZ3VyYXRpb25cIicsXG4gICAgICAgICAgICAgICAgICAgIFwiY2F0IC9ldGMvbmVlZHJlc3RhcnQvbmVlZHJlc3RhcnQuY29uZlwiLFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBcImF3czpydW5TaGVsbFNjcmlwdFwiLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwiSW5zdGFsbEJhc2VQYWNrYWdlc0FwdFwiLFxuICAgICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgICAgcnVuQ29tbWFuZDogW1xuICAgICAgICAgICAgICAgICAgICBcIiMhL2Jpbi9iYXNoXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiYXB0LWdldCAtcSB1cGRhdGUgJiYgREVCSUFOX0ZST05URU5EPW5vbmludGVyYWN0aXZlIGFwdC1nZXQgaW5zdGFsbCAteSAtcSBjdXJsIGdudXBnIHdob2lzIGFyZ29uMiBvcGVuc3NsIGxvY2FsZXMgbG9jYWxlcy1hbGwgdW56aXAgYXB0LXRyYW5zcG9ydC1odHRwcyBjYS1jZXJ0aWZpY2F0ZXMgc29mdHdhcmUtcHJvcGVydGllcy1jb21tb24gbmdpbnhcIixcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogXCJhd3M6cnVuU2hlbGxTY3JpcHRcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkFkZFVzZXJBcHRcIixcbiAgICAgICAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgICAgICAgIHJ1bkNvbW1hbmQ6IFtcbiAgICAgICAgICAgICAgICAgICAgXCIjIS9iaW4vYmFzaFwiLFxuICAgICAgICAgICAgICAgICAgICBcImVjaG8gJ0FkZGluZyB1c2VyOiAke1ZTQ29kZVVzZXJ9J1wiLFxuICAgICAgICAgICAgICAgICAgICBgYWRkdXNlciAtLWRpc2FibGVkLXBhc3N3b3JkIC0tZ2Vjb3MgJycgJHt2c0NvZGVVc2VyfWAsXG4gICAgICAgICAgICAgICAgICAgIGBlY2hvIFwiJHt2c0NvZGVVc2VyfTp7eyBWU0NvZGVQYXNzd29yZCB9fVwiIHwgY2hwYXNzd2RgLFxuICAgICAgICAgICAgICAgICAgICBgdXNlcm1vZCAtYUcgc3VkbyAke3ZzQ29kZVVzZXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgYHRlZSAvZXRjL3N1ZG9lcnMuZC85MS12c2NvZGUtdXNlciA8PEVPRlxuJHt2c0NvZGVVc2VyfSBBTEw9KEFMTCkgTk9QQVNTV0Q6QUxMXG5FT0ZgLFxuICAgICAgICAgICAgICAgICAgICBgbWtkaXIgLXAgL2hvbWUvJHt2c0NvZGVVc2VyfSAmJiBjaG93biAtUiAke3ZzQ29kZVVzZXJ9OiR7dnNDb2RlVXNlcn0gL2hvbWUvJHt2c0NvZGVVc2VyfWAsXG4gICAgICAgICAgICAgICAgICAgICdlY2hvIFwiVXNlciBhZGRlZC4gQ2hlY2tpbmcgY29uZmlndXJhdGlvblwiJyxcbiAgICAgICAgICAgICAgICAgICAgYGdldGVudCBwYXNzd2QgJHt2c0NvZGVVc2VyfWAsXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246IFwiYXdzOnJ1blNoZWxsU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgbmFtZTogXCJJbnN0YWxsTm9kZUFwdFwiLFxuICAgICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgICAgcnVuQ29tbWFuZDogW1xuICAgICAgICAgICAgICAgICAgICBcIiMhL2Jpbi9iYXNoXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY3VybCAtZnNTTCBodHRwczovL2RlYi5ub2Rlc291cmNlLmNvbS9ncGdrZXkvbm9kZXNvdXJjZS1yZXBvLmdwZy5rZXkgfCBncGcgLS1kZWFybW9yIC1vIC91c3Ivc2hhcmUva2V5cmluZ3Mvbm9kZXNvdXJjZS5ncGdcIixcbiAgICAgICAgICAgICAgICAgICAgJ2VjaG8gXCJkZWIgW2FyY2g9JChkcGtnIC0tcHJpbnQtYXJjaGl0ZWN0dXJlKSBzaWduZWQtYnk9L3Vzci9zaGFyZS9rZXlyaW5ncy9ub2Rlc291cmNlLmdwZ10gaHR0cHM6Ly9kZWIubm9kZXNvdXJjZS5jb20vbm9kZV97eyBOb2RlVmVyc2lvbiB9fS54IG5vZGlzdHJvIG1haW5cIiA+IC9ldGMvYXB0L3NvdXJjZXMubGlzdC5kL25vZGVzb3VyY2UubGlzdCcsXG4gICAgICAgICAgICAgICAgICAgIFwiYXB0LWdldCAtcSB1cGRhdGUgJiYgREVCSUFOX0ZST05URU5EPW5vbmludGVyYWN0aXZlIGFwdC1nZXQgaW5zdGFsbCAteSAtcSBub2RlanNcIixcbiAgICAgICAgICAgICAgICAgICAgXCJucG0gaW5zdGFsbCAtZyBucG1AbGF0ZXN0XCIsXG4gICAgICAgICAgICAgICAgICAgICdlY2hvIFwiTm9kZSBhbmQgbnBtIGluc3RhbGxlZC4gQ2hlY2tpbmcgY29uZmlndXJhdGlvblwiJyxcbiAgICAgICAgICAgICAgICAgICAgXCJub2RlIC12XCIsXG4gICAgICAgICAgICAgICAgICAgIFwibnBtIC12XCIsXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246IFwiYXdzOnJ1blNoZWxsU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgbmFtZTogXCJJbnN0YWxsRG9ja2VyQXB0XCIsXG4gICAgICAgICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICAgICAgICBydW5Db21tYW5kOiBbXG4gICAgICAgICAgICAgICAgICAgIFwiIyEvYmluL2Jhc2hcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjdXJsIC1mc1NMIGh0dHBzOi8vZG93bmxvYWQuZG9ja2VyLmNvbS9saW51eC91YnVudHUvZ3BnIHwgZ3BnIC0tZGVhcm1vciAtbyAvdXNyL3NoYXJlL2tleXJpbmdzL2RvY2tlci1hcmNoaXZlLWtleXJpbmcuZ3BnXCIsXG4gICAgICAgICAgICAgICAgICAgICdlY2hvIFwiZGViIFtzaWduZWQtYnk9L3Vzci9zaGFyZS9rZXlyaW5ncy9kb2NrZXItYXJjaGl2ZS1rZXlyaW5nLmdwZ10gaHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L3VidW50dSAkKGxzYl9yZWxlYXNlIC0tY29kZW5hbWUgLS1zaG9ydCkgc3RhYmxlXCIgPiAvZXRjL2FwdC9zb3VyY2VzLmxpc3QuZC9kb2NrZXIubGlzdCcsXG4gICAgICAgICAgICAgICAgICAgIFwiYXB0LWdldCAtcSB1cGRhdGUgJiYgREVCSUFOX0ZST05URU5EPW5vbmludGVyYWN0aXZlIGFwdC1nZXQgaW5zdGFsbCAteSAtcSBkb2NrZXItY2UgZG9ja2VyLWNlLWNsaSBjb250YWluZXJkLmlvXCIsXG4gICAgICAgICAgICAgICAgICAgIGBzeXN0ZW1jdGwgcmVzdGFydCBjb2RlLXNlcnZlckAke3ZzQ29kZVVzZXJ9LnNlcnZpY2VgLFxuICAgICAgICAgICAgICAgICAgICBcInN5c3RlbWN0bCBzdGFydCBkb2NrZXIuc2VydmljZVwiLFxuICAgICAgICAgICAgICAgICAgICAnZWNobyBcIkRvY2tlciBpbnN0YWxsZWQuIENoZWNraW5nIGNvbmZpZ3VyYXRpb25cIicsXG4gICAgICAgICAgICAgICAgICAgIFwiZG9ja2VyIC0tdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgICAgICBcInN5c3RlbWN0bCBzdGF0dXMgZG9ja2VyLnNlcnZpY2VcIixcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogXCJhd3M6cnVuU2hlbGxTY3JpcHRcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkluc3RhbGxHaXRBcHRcIixcbiAgICAgICAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgICAgICAgIHJ1bkNvbW1hbmQ6IFtcbiAgICAgICAgICAgICAgICAgICAgXCIjIS9iaW4vYmFzaFwiLFxuICAgICAgICAgICAgICAgICAgICBcImFkZC1hcHQtcmVwb3NpdG9yeSBwcGE6Z2l0LWNvcmUvcHBhXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiYXB0LWdldCAtcSB1cGRhdGUgJiYgREVCSUFOX0ZST05URU5EPW5vbmludGVyYWN0aXZlIGFwdC1nZXQgaW5zdGFsbCAteSAtcSBnaXRcIixcbiAgICAgICAgICAgICAgICAgICAgYHN1ZG8gLXUgJHt2c0NvZGVVc2VyfSBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCIke3ZzQ29kZVVzZXJ9QGV4YW1wbGUuY29tXCJgLFxuICAgICAgICAgICAgICAgICAgICBgc3VkbyAtdSAke3ZzQ29kZVVzZXJ9IGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiV29ya3Nob3AgJHt2c0NvZGVVc2VyfVwiYCxcbiAgICAgICAgICAgICAgICAgICAgYHN1ZG8gLXUgJHt2c0NvZGVVc2VyfSBnaXQgY29uZmlnIC0tZ2xvYmFsIGluaXQuZGVmYXVsdEJyYW5jaCBcIm1haW5cImAsXG4gICAgICAgICAgICAgICAgICAgICdlY2hvIFwiR2l0IGluc3RhbGxlZC4gQ2hlY2tpbmcgY29uZmlndXJhdGlvblwiJyxcbiAgICAgICAgICAgICAgICAgICAgXCJnaXQgLS12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246IFwiYXdzOnJ1blNoZWxsU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgbmFtZTogXCJJbnN0YWxsUHl0aG9uQXB0XCIsXG4gICAgICAgICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICAgICAgICBydW5Db21tYW5kOiBbXG4gICAgICAgICAgICAgICAgICAgIC8vIFVidW50dSAyMiBkZWZhdWx0IGlzIFB5dGhvbiAzLjEwXG4gICAgICAgICAgICAgICAgICAgIC8vIFVidW50dSAyNCBkZWZhdWx0IGlzIFB5dGhvbiAzLjEyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBkZWZhdWx0IGluc3RhbGxlZCBQeXRob24gdmVyc2lvbiB3aWxsIG1hcCB0byBQeXRob24zXG4gICAgICAgICAgICAgICAgICAgIFwiIyEvYmluL2Jhc2hcIixcbiAgICAgICAgICAgICAgICAgICAgXCJhcHQtZ2V0IC1xIHVwZGF0ZSAmJiBERUJJQU5fRlJPTlRFTkQ9bm9uaW50ZXJhY3RpdmUgYXB0LWdldCBpbnN0YWxsIC15IC1xIHB5dGhvbjMtcGlwIHB5dGhvbjMtdmVudiBweXRob24zLWJvdG8zIHB5dGhvbjMtcHl0ZXN0XCIsXG4gICAgICAgICAgICAgICAgICAgIGBlY2hvICdhbGlhcyBweXRlc3Q9cHl0ZXN0LTMnID4+IC9ob21lLyR7dnNDb2RlVXNlcn0vLmJhc2hyY2AsXG4gICAgICAgICAgICAgICAgICAgIGBzeXN0ZW1jdGwgcmVzdGFydCBjb2RlLXNlcnZlckAke3ZzQ29kZVVzZXJ9LnNlcnZpY2VgLFxuICAgICAgICAgICAgICAgICAgICBcInN5c3RlbWN0bCBzdGFydCBtdWx0aXBhdGhkLnNlcnZpY2UgcGFja2FnZWtpdC5zZXJ2aWNlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3lzdGVtY3RsIHJlc3RhcnQgdW5hdHRlbmRlZC11cGdyYWRlcy5zZXJ2aWNlXCIsXG4gICAgICAgICAgICAgICAgICAgICdlY2hvIFwiUHl0aG9uIGFuZCBQaXAgaW5zdGFsbGVkLiBDaGVja2luZyBjb25maWd1cmF0aW9uXCInLFxuICAgICAgICAgICAgICAgICAgICBcInB5dGhvbjMgLS12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgICAgIFwicGlwMyAtLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogXCJhd3M6cnVuU2hlbGxTY3JpcHRcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkluc3RhbGxBV1NDTElcIixcbiAgICAgICAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgICAgICAgIHJ1bkNvbW1hbmQ6IFtcbiAgICAgICAgICAgICAgICAgICAgXCIjIS9iaW4vYmFzaFwiLFxuICAgICAgICAgICAgICAgICAgICBcImN1cmwgLWZzU0wgaHR0cHM6Ly9hd3NjbGkuYW1hem9uYXdzLmNvbS9hd3NjbGktZXhlLWxpbnV4LSQodW5hbWUgLW0pLnppcCAtbyAvdG1wL2F3cy1jbGkuemlwXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidW56aXAgLXEgLWQgL3RtcCAvdG1wL2F3cy1jbGkuemlwXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3VkbyAvdG1wL2F3cy9pbnN0YWxsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwicm0gLXJmIC90bXAvYXdzXCIsXG4gICAgICAgICAgICAgICAgICAgICdlY2hvIFwiQVdTIENMSSBpbnN0YWxsZWQuIENoZWNraW5nIGNvbmZpZ3VyYXRpb25cIicsXG4gICAgICAgICAgICAgICAgICAgIFwiYXdzIC0tdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBcImF3czpydW5TaGVsbFNjcmlwdFwiLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29uZmlndXJlQ29kZVNlcnZlclwiLFxuICAgICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgICAgcnVuQ29tbWFuZDogW1xuICAgICAgICAgICAgICAgICAgICBcIiMhL2Jpbi9iYXNoXCIsXG4gICAgICAgICAgICAgICAgICAgIGBleHBvcnQgSE9NRT0vaG9tZS8ke3ZzQ29kZVVzZXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgXCJjdXJsIC1mc1NMIGh0dHBzOi8vY29kZS1zZXJ2ZXIuZGV2L2luc3RhbGwuc2ggfCBiYXNoIC1zIC0tIDI+JjFcIixcbiAgICAgICAgICAgICAgICAgICAgYHN5c3RlbWN0bCBlbmFibGUgLS1ub3cgY29kZS1zZXJ2ZXJAJHt2c0NvZGVVc2VyfSAyPiYxYCxcbiAgICAgICAgICAgICAgICAgICAgYHRlZSAvZXRjL25naW54L2NvbmYuZC9jb2RlLXNlcnZlci5jb25mIDw8RU9GXG5zZXJ2ZXIge1xuICAgIGxpc3RlbiA4MDtcbiAgICBsaXN0ZW4gWzo6XTo4MDtcbiAgICAjIHNlcnZlcl9uYW1lIGRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25Eb21haW5OYW1lO1xuICAgIHNlcnZlcl9uYW1lICouY2xvdWRmcm9udC5uZXQ7XG4gICAgbG9jYXRpb24gLyB7XG4gICAgICBwcm94eV9wYXNzIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC87XG4gICAgICBwcm94eV9zZXRfaGVhZGVyIEhvc3QgXFxcXCRob3N0O1xuICAgICAgcHJveHlfc2V0X2hlYWRlciBVcGdyYWRlIFxcXFwkaHR0cF91cGdyYWRlO1xuICAgICAgcHJveHlfc2V0X2hlYWRlciBDb25uZWN0aW9uIHVwZ3JhZGU7XG4gICAgICBwcm94eV9zZXRfaGVhZGVyIEFjY2VwdC1FbmNvZGluZyBnemlwO1xuICAgIH1cbiAgICBsb2NhdGlvbiAvJHtkZXZTZXJ2ZXJCYXNlUGF0aH0ge1xuICAgICAgcHJveHlfcGFzcyBodHRwOi8vbG9jYWxob3N0OiR7ZGV2U2VydmVyUG9ydH0vJHtkZXZTZXJ2ZXJCYXNlUGF0aH07XG4gICAgICBwcm94eV9zZXRfaGVhZGVyIEhvc3QgXFxcXCRob3N0O1xuICAgICAgcHJveHlfc2V0X2hlYWRlciBVcGdyYWRlIFxcXFwkaHR0cF91cGdyYWRlO1xuICAgICAgcHJveHlfc2V0X2hlYWRlciBDb25uZWN0aW9uIHVwZ3JhZGU7XG4gICAgICBwcm94eV9zZXRfaGVhZGVyIEFjY2VwdC1FbmNvZGluZyBnemlwO1xuICAgIH1cbn1cbkVPRmAsXG4gICAgICAgICAgICAgICAgICAgIGBta2RpciAtcCAvaG9tZS8ke3ZzQ29kZVVzZXJ9Ly5jb25maWcvY29kZS1zZXJ2ZXJgLFxuICAgICAgICAgICAgICAgICAgICBgdGVlIC9ob21lLyR7dnNDb2RlVXNlcn0vLmNvbmZpZy9jb2RlLXNlcnZlci9jb25maWcueWFtbCA8PEVPRlxuY2VydDogZmFsc2VcbmF1dGg6IHBhc3N3b3JkXG5oYXNoZWQtcGFzc3dvcmQ6IFwiJChlY2hvIC1uIHt7IFZTQ29kZVBhc3N3b3JkIH19IHwgYXJnb24yICQob3BlbnNzbCByYW5kIC1iYXNlNjQgMTIpIC1lKVwiXG5FT0ZgLFxuICAgICAgICAgICAgICAgICAgICBgbWtkaXIgLXAgL2hvbWUvJHt2c0NvZGVVc2VyfS8ubG9jYWwvc2hhcmUvY29kZS1zZXJ2ZXIvVXNlci9gLFxuICAgICAgICAgICAgICAgICAgICBgdG91Y2ggL2hvbWUvJHt2c0NvZGVVc2VyfS8uaHVzaGxvZ2luYCxcbiAgICAgICAgICAgICAgICAgICAgYG1rZGlyIC1wICR7aG9tZUZvbGRlcn0gJiYgY2hvd24gLVIgJHt2c0NvZGVVc2VyfToke3ZzQ29kZVVzZXJ9ICR7aG9tZUZvbGRlcn1gLFxuICAgICAgICAgICAgICAgICAgICBgdGVlIC9ob21lLyR7dnNDb2RlVXNlcn0vLmxvY2FsL3NoYXJlL2NvZGUtc2VydmVyL1VzZXIvc2V0dGluZ3MuanNvbiA8PEVPRlxue1xuICBcImV4dGVuc2lvbnMuYXV0b1VwZGF0ZVwiOiBmYWxzZSxcbiAgXCJleHRlbnNpb25zLmF1dG9DaGVja1VwZGF0ZXNcIjogZmFsc2UsXG4gIFwidGVsZW1ldHJ5LnRlbGVtZXRyeUxldmVsXCI6IFwib2ZmXCIsXG4gIFwic2VjdXJpdHkud29ya3NwYWNlLnRydXN0LnN0YXJ0dXBQcm9tcHRcIjogXCJuZXZlclwiLFxuICBcInNlY3VyaXR5LndvcmtzcGFjZS50cnVzdC5lbmFibGVkXCI6IGZhbHNlLFxuICBcInNlY3VyaXR5LndvcmtzcGFjZS50cnVzdC5iYW5uZXJcIjogXCJuZXZlclwiLFxuICBcInNlY3VyaXR5LndvcmtzcGFjZS50cnVzdC5lbXB0eVdpbmRvd1wiOiBmYWxzZSxcbiAgXCJweXRob24udGVzdGluZy5weXRlc3RFbmFibGVkXCI6IHRydWUsXG4gIFwiYXV0by1ydW4tY29tbWFuZC5ydWxlc1wiOiBbXG4gICAge1xuICAgICAgXCJjb21tYW5kXCI6IFwid29ya2JlbmNoLmFjdGlvbi50ZXJtaW5hbC5uZXdcIlxuICAgIH1cbiAgXVxufVxuRU9GYCxcbiAgICAgICAgICAgICAgICAgICAgYGNob3duIC1SICR7dnNDb2RlVXNlcn06JHt2c0NvZGVVc2VyfSAvaG9tZS8ke3ZzQ29kZVVzZXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgYHN5c3RlbWN0bCByZXN0YXJ0IGNvZGUtc2VydmVyQCR7dnNDb2RlVXNlcn1gLFxuICAgICAgICAgICAgICAgICAgICBcInN5c3RlbWN0bCByZXN0YXJ0IG5naW54XCIsXG4gICAgICAgICAgICAgICAgICAgIGBzdWRvIC11ICR7dnNDb2RlVXNlcn0gLS1sb2dpbiBjb2RlLXNlcnZlciAtLWluc3RhbGwtZXh0ZW5zaW9uIEFtYXpvbldlYlNlcnZpY2VzLmF3cy10b29sa2l0LXZzY29kZSAtLWZvcmNlYCxcbiAgICAgICAgICAgICAgICAgICAgYHN1ZG8gLXUgJHt2c0NvZGVVc2VyfSAtLWxvZ2luIGNvZGUtc2VydmVyIC0taW5zdGFsbC1leHRlbnNpb24gQW1hem9uV2ViU2VydmljZXMuYW1hem9uLXEtdnNjb2RlIC0tZm9yY2VgLFxuICAgICAgICAgICAgICAgICAgICBgc3VkbyAtdSAke3ZzQ29kZVVzZXJ9IC0tbG9naW4gY29kZS1zZXJ2ZXIgLS1pbnN0YWxsLWV4dGVuc2lvbiBzeW5lZHJhLmF1dG8tcnVuLWNvbW1hbmQgLS1mb3JjZWAsXG4gICAgICAgICAgICAgICAgICAgIGBzdWRvIC11ICR7dnNDb2RlVXNlcn0gLS1sb2dpbiBjb2RlLXNlcnZlciAtLWluc3RhbGwtZXh0ZW5zaW9uIHZzY2phdmEudnNjb2RlLWphdmEtcGFjayAtLWZvcmNlYCxcbiAgICAgICAgICAgICAgICAgICAgYHN1ZG8gLXUgJHt2c0NvZGVVc2VyfSAtLWxvZ2luIGNvZGUtc2VydmVyIC0taW5zdGFsbC1leHRlbnNpb24gbXMtdnNjb2RlLmxpdmUtc2VydmVyIC0tZm9yY2VgLFxuICAgICAgICAgICAgICAgICAgICBgY2hvd24gLVIgJHt2c0NvZGVVc2VyfToke3ZzQ29kZVVzZXJ9IC9ob21lLyR7dnNDb2RlVXNlcn1gLFxuICAgICAgICAgICAgICAgICAgICAnZWNobyBcIk5naW54IGluc3RhbGxlZC4gQ2hlY2tpbmcgY29uZmlndXJhdGlvblwiJyxcbiAgICAgICAgICAgICAgICAgICAgXCJuZ2lueCAtdCAyPiYxXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3lzdGVtY3RsIHN0YXR1cyBuZ2lueFwiLFxuICAgICAgICAgICAgICAgICAgICAnZWNobyBcIkNvZGVTZXJ2ZXIgaW5zdGFsbGVkLiBDaGVja2luZyBjb25maWd1cmF0aW9uXCInLFxuICAgICAgICAgICAgICAgICAgICBcImNvZGUtc2VydmVyIC12XCIsXG4gICAgICAgICAgICAgICAgICAgIGBzeXN0ZW1jdGwgc3RhdHVzIGNvZGUtc2VydmVyQCR7dnNDb2RlVXNlcn1gLFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBcImF3czpydW5TaGVsbFNjcmlwdFwiLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwiVXBkYXRlUHJvZmlsZVwiLFxuICAgICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgICAgcnVuQ29tbWFuZDogW1xuICAgICAgICAgICAgICAgICAgICBcIiMhL2Jpbi9iYXNoXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWNobyBMQU5HPWVuX1VTLnV0Zi04ID4+IC9ldGMvZW52aXJvbm1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlY2hvIExDX0FMTD1lbl9VUy5VVEYtOCA+PiAvZXRjL2Vudmlyb25tZW50XCIsXG4gICAgICAgICAgICAgICAgICAgIGBlY2hvICdQQVRIPSRQQVRIOi9ob21lLyR7dnNDb2RlVXNlcn0vLmxvY2FsL2JpbicgPj4gL2hvbWUvJHt2c0NvZGVVc2VyfS8uYmFzaHJjYCxcbiAgICAgICAgICAgICAgICAgICAgYGVjaG8gJ2V4cG9ydCBQQVRIJyA+PiAvaG9tZS8ke3ZzQ29kZVVzZXJ9Ly5iYXNocmNgLFxuICAgICAgICAgICAgICAgICAgICBgZWNobyAnZXhwb3J0IEFXU19SRUdJT049JHtTdGFjay5vZihzY29wZSkucmVnaW9ufScgPj4gL2hvbWUvJHt2c0NvZGVVc2VyfS8uYmFzaHJjYCxcbiAgICAgICAgICAgICAgICAgICAgYGVjaG8gJ2V4cG9ydCBBV1NfQUNDT1VOVElEPSR7U3RhY2sub2Yoc2NvcGUpLmFjY291bnR9JyA+PiAvaG9tZS8ke3ZzQ29kZVVzZXJ9Ly5iYXNocmNgLFxuICAgICAgICAgICAgICAgICAgICBgZWNobyAnZXhwb3J0IE5FWFRfVEVMRU1FVFJZX0RJU0FCTEVEPTEnID4+IC9ob21lLyR7dnNDb2RlVXNlcn0vLmJhc2hyY2AsXG4gICAgICAgICAgICAgICAgICAgIGBlY2hvIFwiZXhwb3J0IFBTMT0nXFxcXFtcXFxcMDMzWzAxOzMybVxcXFxdXFxcXHU6XFxcXFtcXFxcMDMzWzAxOzM0bVxcXFxdXFxcXHdcXFxcW1xcXFwwMzNbMDBtXFxcXF1cXFxcJCAnXCIgPj4gL2hvbWUvJHt2c0NvZGVVc2VyfS8uYmFzaHJjYCxcbiAgICAgICAgICAgICAgICAgICAgYGNob3duIC1SICR7dnNDb2RlVXNlcn06JHt2c0NvZGVVc2VyfSAvaG9tZS8ke3ZzQ29kZVVzZXJ9YCxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogXCJhd3M6cnVuU2hlbGxTY3JpcHRcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkluc3RhbGxDREtcIixcbiAgICAgICAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgICAgICAgIHJ1bkNvbW1hbmQ6IFtcbiAgICAgICAgICAgICAgICAgICAgXCIjIS9iaW4vYmFzaFwiLFxuICAgICAgICAgICAgICAgICAgICBcIm5wbSBpbnN0YWxsIC1nIGF3cy1jZGtcIixcbiAgICAgICAgICAgICAgICAgICAgJ2VjaG8gXCJBV1MgQ0RLIGluc3RhbGxlZC4gQ2hlY2tpbmcgY29uZmlndXJhdGlvblwiJyxcbiAgICAgICAgICAgICAgICAgICAgXCJjZGsgLS12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTGludXhGbGF2b3JUeXBlLkFNQVpPTl9MSU5VWF8yMDIzOlxuICAgICAgICBzc21Eb2N1bWVudCA9IG5ldyBzc20uQ2ZuRG9jdW1lbnQoc2NvcGUsIFwic3NtLWRvY3VtZW50LWFsMjAyM1wiLCB7XG4gICAgICAgICAgbmFtZTogYHZzY29kZS1zZXJ2ZXItYWwyMDIzLSR7U3RhY2sub2Yoc2NvcGUpLnN0YWNrTmFtZX1gLFxuICAgICAgICAgIGRvY3VtZW50VHlwZTogXCJDb21tYW5kXCIsXG4gICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgc2NoZW1hVmVyc2lvbjogXCIyLjJcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkJvb3RzdHJhcCBWU0NvZGUgY29kZS1zZXJ2ZXIgaW5zdGFuY2VcIixcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgVlNDb2RlUGFzc3dvcmQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIlN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFN0YWNrLm9mKHNjb3BlKS5zdGFja0lkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBOb2RlVmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogXCIyMFwiLFxuICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFtcIjIyXCIsIFwiMjBcIiwgXCIxOFwiXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgRG90TmV0VmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiU3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogXCI4LjBcIixcbiAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbXCI4LjBcIiwgXCI3LjBcIl0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gYWxsIG1haW5TdGVwcyBzY3JpcHRzIGFyZSBpbiBpbiAvdmFyL2xpYi9hbWF6b24vc3NtLzxpbnN0YW5jZWlkPi9kb2N1bWVudC9vcmNoZXN0cmF0aW9uLzx1dWlkPi88U3RlcE5hbWU+L19zY3JpcHQuc2hcbiAgICAgICAgICAgIG1haW5TdGVwczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBcImF3czpjb25maWd1cmVQYWNrYWdlXCIsXG4gICAgICAgICAgICAgICAgbmFtZTogXCJJbnN0YWxsQ2xvdWRXYXRjaEFnZW50XCIsXG4gICAgICAgICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcIkFtYXpvbkNsb3VkV2F0Y2hBZ2VudFwiLFxuICAgICAgICAgICAgICAgICAgYWN0aW9uOiBcIkluc3RhbGxcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBcImF3czpydW5Eb2N1bWVudFwiLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29uZmlndXJlQ2xvdWRXYXRjaEFnZW50XCIsXG4gICAgICAgICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICAgICAgICBkb2N1bWVudFR5cGU6IFwiU1NNRG9jdW1lbnRcIixcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50UGF0aDogXCJBbWF6b25DbG91ZFdhdGNoLU1hbmFnZUFnZW50XCIsXG4gICAgICAgICAgICAgICAgICBkb2N1bWVudFBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBcImNvbmZpZ3VyZVwiLFxuICAgICAgICAgICAgICAgICAgICBtb2RlOiBcImVjMlwiLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25hbENvbmZpZ3VyYXRpb25Tb3VyY2U6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25hbFJlc3RhcnQ6IFwieWVzXCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246IFwiYXdzOnJ1blNoZWxsU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgbmFtZTogXCJJbnN0YWxsQmFzZVBhY2thZ2VzRG5mXCIsXG4gICAgICAgICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICAgICAgICBydW5Db21tYW5kOiBbXG4gICAgICAgICAgICAgICAgICAgIFwiIyEvYmluL2Jhc2hcIixcbiAgICAgICAgICAgICAgICAgICAgXCJkbmYgaW5zdGFsbCAteSAtLWFsbG93ZXJhc2luZyB3aG9pcyBhcmdvbjIgdW56aXAgbmdpbnggY3VybCBnbnVwZyBvcGVuc3NsXCIsXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246IFwiYXdzOnJ1blNoZWxsU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgbmFtZTogXCJBZGRVc2VyRG5mXCIsXG4gICAgICAgICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICAgICAgICBydW5Db21tYW5kOiBbXG4gICAgICAgICAgICAgICAgICAgIFwiIyEvYmluL2Jhc2hcIixcbiAgICAgICAgICAgICAgICAgICAgYGVjaG8gJ0FkZGluZyB1c2VyOiAke3ZzQ29kZVVzZXJ9J2AsXG4gICAgICAgICAgICAgICAgICAgIGBhZGR1c2VyIC1jICcnICR7dnNDb2RlVXNlcn1gLFxuICAgICAgICAgICAgICAgICAgICBgcGFzc3dkIC1sICR7dnNDb2RlVXNlcn1gLFxuICAgICAgICAgICAgICAgICAgICBgZWNobyBcIiR7dnNDb2RlVXNlcn06e3sgVlNDb2RlUGFzc3dvcmQgfX1cIiB8IGNocGFzc3dkYCxcbiAgICAgICAgICAgICAgICAgICAgYHVzZXJtb2QgLWFHIHdoZWVsICR7dnNDb2RlVXNlcn1gLFxuICAgICAgICAgICAgICAgICAgICAnZWNobyBcIlVzZXIgYWRkZWQuIENoZWNraW5nIGNvbmZpZ3VyYXRpb25cIicsXG4gICAgICAgICAgICAgICAgICAgIGBnZXRlbnQgcGFzc3dkICR7dnNDb2RlVXNlcn1gLFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBcImF3czpydW5TaGVsbFNjcmlwdFwiLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwiSW5zdGFsbE5vZGVEbmZcIixcbiAgICAgICAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgICAgICAgIHJ1bkNvbW1hbmQ6IFtcbiAgICAgICAgICAgICAgICAgICAgXCIjIS9iaW4vYmFzaFwiLFxuICAgICAgICAgICAgICAgICAgICBcImRuZiBpbnN0YWxsIC15IG5vZGVqczIwIG5wbVwiLFxuICAgICAgICAgICAgICAgICAgICBcImxuIC1zIC1mIC91c3IvYmluL25vZGUtMjAgL3Vzci9iaW4vbm9kZVwiLFxuICAgICAgICAgICAgICAgICAgICBcIm5wbSBpbnN0YWxsIC1nIG5wbUBsYXRlc3RcIixcbiAgICAgICAgICAgICAgICAgICAgJ2VjaG8gXCJOb2RlIGFuZCBucG0gaW5zdGFsbGVkLiBDaGVja2luZyBjb25maWd1cmF0aW9uXCInLFxuICAgICAgICAgICAgICAgICAgICBcIm5vZGUgLXZcIixcbiAgICAgICAgICAgICAgICAgICAgXCJucG0gLXZcIixcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogXCJhd3M6cnVuU2hlbGxTY3JpcHRcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkluc3RhbGxEb2NrZXJEbmZcIixcbiAgICAgICAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgICAgICAgIHJ1bkNvbW1hbmQ6IFtcbiAgICAgICAgICAgICAgICAgICAgXCIjIS9iaW4vYmFzaFwiLFxuICAgICAgICAgICAgICAgICAgICBcImRuZiBpbnN0YWxsIC15IGRvY2tlclwiLFxuICAgICAgICAgICAgICAgICAgICBgdXNlcm1vZCAtYUcgZG9ja2VyICR7dnNDb2RlVXNlcn1gLFxuICAgICAgICAgICAgICAgICAgICBgc3lzdGVtY3RsIHJlc3RhcnQgY29kZS1zZXJ2ZXJAJHt2c0NvZGVVc2VyfS5zZXJ2aWNlYCxcbiAgICAgICAgICAgICAgICAgICAgXCJzeXN0ZW1jdGwgc3RhcnQgZG9ja2VyLnNlcnZpY2VcIixcbiAgICAgICAgICAgICAgICAgICAgJ2VjaG8gXCJEb2NrZXIgaW5zdGFsbGVkLiBDaGVja2luZyBjb25maWd1cmF0aW9uXCInLFxuICAgICAgICAgICAgICAgICAgICBcImRvY2tlciAtLXZlcnNpb25cIixcbiAgICAgICAgICAgICAgICAgICAgXCJzeXN0ZW1jdGwgc3RhdHVzIGRvY2tlci5zZXJ2aWNlXCIsXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246IFwiYXdzOnJ1blNoZWxsU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgbmFtZTogXCJJbnN0YWxsR2l0RG5mXCIsXG4gICAgICAgICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICAgICAgICBydW5Db21tYW5kOiBbXG4gICAgICAgICAgICAgICAgICAgIFwiIyEvYmluL2Jhc2hcIixcbiAgICAgICAgICAgICAgICAgICAgXCJkbmYgaW5zdGFsbCAteSBnaXRcIixcbiAgICAgICAgICAgICAgICAgICAgYHN1ZG8gLXUgJHt2c0NvZGVVc2VyfSBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCIke3ZzQ29kZVVzZXJ9QGV4YW1wbGUuY29tXCJgLFxuICAgICAgICAgICAgICAgICAgICBgc3VkbyAtdSAke3ZzQ29kZVVzZXJ9IGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiV29ya3Nob3AgJHt2c0NvZGVVc2VyfVwiYCxcbiAgICAgICAgICAgICAgICAgICAgYHN1ZG8gLXUgJHt2c0NvZGVVc2VyfSBnaXQgY29uZmlnIC0tZ2xvYmFsIGluaXQuZGVmYXVsdEJyYW5jaCBcIm1haW5cImAsXG4gICAgICAgICAgICAgICAgICAgICdlY2hvIFwiR2l0IGluc3RhbGxlZC4gQ2hlY2tpbmcgY29uZmlndXJhdGlvblwiJyxcbiAgICAgICAgICAgICAgICAgICAgXCJnaXQgLS12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246IFwiYXdzOnJ1blNoZWxsU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgbmFtZTogXCJJbnN0YWxsUHl0aG9uRG5mXCIsXG4gICAgICAgICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICAgICAgICBydW5Db21tYW5kOiBbXG4gICAgICAgICAgICAgICAgICAgIC8vIEFMMjAyMyBjdXJyZW50bHkgc2hpcHMgd2l0aCBQeXRob24gMy45IHByZWluc3RhbGxlZCwgYnV0IDMuMTEgaXMgYXZhaWxhYmxlIGluIHRoZSByZXBvc2l0b3J5XG4gICAgICAgICAgICAgICAgICAgIC8vIEluc3RhbGwgMy4xMSBhbG9uZ3NpZGUgMy45IGFuZCBzZXR1cCBzb21lIGFsaWFzIHNvIHRoYXQgMy4xMSBpcyBsb2FkZWQgd2hlbiBwYXJ0aWNpcGFudCBydW5zIFB5dGhvbjNcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHl0aG9uIDMuMTIgYmVjb21lIGF2YWlsYWJsZSwgdXBkYXRlIGJlbG93XG4gICAgICAgICAgICAgICAgICAgIFwiIyEvYmluL2Jhc2hcIixcbiAgICAgICAgICAgICAgICAgICAgXCJkbmYgaW5zdGFsbCAteSBweXRob24zLjExIHB5dGhvbjMuMTEtcGlwIHB5dGhvbjMtdmlydHVhbGVudiBweXRob24zLXB5dGVzdCBweXRob24zLWJvdG8zXCIsXG4gICAgICAgICAgICAgICAgICAgIGBlY2hvICdhbGlhcyBweXRlc3Q9cHl0ZXN0LTMnID4+IC9ob21lLyR7dnNDb2RlVXNlcn0vLmJhc2hyY2AsXG4gICAgICAgICAgICAgICAgICAgIGBlY2hvICdhbGlhcyBweXRob24zPXB5dGhvbjMuMTEnID4+IC9ob21lLyR7dnNDb2RlVXNlcn0vLmJhc2hyY2AsXG4gICAgICAgICAgICAgICAgICAgIGBlY2hvICdhbGlhcyBwaXAzPXBpcDMuMTEnID4+IC9ob21lLyR7dnNDb2RlVXNlcn0vLmJhc2hyY2AsXG4gICAgICAgICAgICAgICAgICAgIFwiZWNobyAnYWxpYXM9cHl0aG9uMz1weXRob24zLjExJyA+PiB+Ly5iYXNocmNcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlY2hvICdhbGlhcyBwaXAzPXBpcDMuMTEnID4+IH4vLmJhc2hyY1wiLFxuICAgICAgICAgICAgICAgICAgICBcInB5dGhvbjMuMTEgLW0gcGlwIGluc3RhbGwgLS11cGdyYWRlIHBpcCAyPiYxXCIsXG4gICAgICAgICAgICAgICAgICAgICdlY2hvIFwiUHl0aG9uIGFuZCBQaXAgaW5zdGFsbGVkLiBDaGVja2luZyBjb25maWd1cmF0aW9uXCInLFxuICAgICAgICAgICAgICAgICAgICBcInB5dGhvbjMuMTEgLS12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgICAgIFwicHl0aG9uMy4xMSAtbSBwaXAgLS12ZXJzaW9uIDI+JjFcIixcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgLy8gYWRkIGdvLCBkb3RuZXRcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogXCJhd3M6cnVuU2hlbGxTY3JpcHRcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkluc3RhbGxBV1NDTElcIixcbiAgICAgICAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgICAgICAgIHJ1bkNvbW1hbmQ6IFtcbiAgICAgICAgICAgICAgICAgICAgXCIjIS9iaW4vYmFzaFwiLFxuICAgICAgICAgICAgICAgICAgICBcImN1cmwgLWZzU0wgaHR0cHM6Ly9hd3NjbGkuYW1hem9uYXdzLmNvbS9hd3NjbGktZXhlLWxpbnV4LSQodW5hbWUgLW0pLnppcCAtbyAvdG1wL2F3cy1jbGkuemlwXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidW56aXAgLXEgLWQgL3RtcCAvdG1wL2F3cy1jbGkuemlwXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3VkbyAvdG1wL2F3cy9pbnN0YWxsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwicm0gLXJmIC90bXAvYXdzXCIsXG4gICAgICAgICAgICAgICAgICAgICdlY2hvIFwiQVdTIENMSSBpbnN0YWxsZWQuIENoZWNraW5nIGNvbmZpZ3VyYXRpb25cIicsXG4gICAgICAgICAgICAgICAgICAgIFwiYXdzIC0tdmVyc2lvblwiLFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBcImF3czpydW5TaGVsbFNjcmlwdFwiLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29uZmlndXJlQ29kZVNlcnZlclwiLFxuICAgICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgICAgcnVuQ29tbWFuZDogW1xuICAgICAgICAgICAgICAgICAgICBcIiMhL2Jpbi9iYXNoXCIsXG4gICAgICAgICAgICAgICAgICAgIGBleHBvcnQgSE9NRT0vaG9tZS8ke3ZzQ29kZVVzZXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgXCJjdXJsIC1mc1NMIGh0dHBzOi8vY29kZS1zZXJ2ZXIuZGV2L2luc3RhbGwuc2ggfCBiYXNoIC1zIC0tIDI+JjFcIixcbiAgICAgICAgICAgICAgICAgICAgYHN5c3RlbWN0bCBlbmFibGUgLS1ub3cgY29kZS1zZXJ2ZXJAJHt2c0NvZGVVc2VyfSAyPiYxYCxcbiAgICAgICAgICAgICAgICAgICAgYHRlZSAvZXRjL25naW54L2NvbmYuZC9jb2RlLXNlcnZlci5jb25mIDw8RU9GXG5zZXJ2ZXIge1xuICAgIGxpc3RlbiA4MDtcbiAgICBsaXN0ZW4gWzo6XTo4MDtcbiAgICAjIHNlcnZlcl9uYW1lIGRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25Eb21haW5OYW1lO1xuICAgIHNlcnZlcl9uYW1lICouY2xvdWRmcm9udC5uZXQ7XG4gICAgbG9jYXRpb24gLyB7XG4gICAgICBwcm94eV9wYXNzIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC87XG4gICAgICBwcm94eV9zZXRfaGVhZGVyIEhvc3QgXFxcXCRob3N0O1xuICAgICAgcHJveHlfc2V0X2hlYWRlciBVcGdyYWRlIFxcXFwkaHR0cF91cGdyYWRlO1xuICAgICAgcHJveHlfc2V0X2hlYWRlciBDb25uZWN0aW9uIHVwZ3JhZGU7XG4gICAgICBwcm94eV9zZXRfaGVhZGVyIEFjY2VwdC1FbmNvZGluZyBnemlwO1xuICAgIH1cbiAgICBsb2NhdGlvbiAvJHtkZXZTZXJ2ZXJCYXNlUGF0aH0ge1xuICAgICAgcHJveHlfcGFzcyBodHRwOi8vbG9jYWxob3N0OiR7ZGV2U2VydmVyUG9ydH0vJHtkZXZTZXJ2ZXJCYXNlUGF0aH07XG4gICAgICBwcm94eV9zZXRfaGVhZGVyIEhvc3QgXFxcXCRob3N0O1xuICAgICAgcHJveHlfc2V0X2hlYWRlciBVcGdyYWRlIFxcXFwkaHR0cF91cGdyYWRlO1xuICAgICAgcHJveHlfc2V0X2hlYWRlciBDb25uZWN0aW9uIHVwZ3JhZGU7XG4gICAgICBwcm94eV9zZXRfaGVhZGVyIEFjY2VwdC1FbmNvZGluZyBnemlwO1xuICAgIH1cbn1cbkVPRmAsXG4gICAgICAgICAgICAgICAgICAgIGBta2RpciAtcCAvaG9tZS8ke3ZzQ29kZVVzZXJ9Ly5jb25maWcvY29kZS1zZXJ2ZXJgLFxuICAgICAgICAgICAgICAgICAgICBgdGVlIC9ob21lLyR7dnNDb2RlVXNlcn0vLmNvbmZpZy9jb2RlLXNlcnZlci9jb25maWcueWFtbCA8PEVPRlxuY2VydDogZmFsc2VcbmF1dGg6IHBhc3N3b3JkXG5oYXNoZWQtcGFzc3dvcmQ6IFwiJChlY2hvIC1uIHt7IFZTQ29kZVBhc3N3b3JkIH19IHwgYXJnb24yICQob3BlbnNzbCByYW5kIC1iYXNlNjQgMTIpIC1lKVwiXG5FT0ZgLFxuICAgICAgICAgICAgICAgICAgICBgbWtkaXIgLXAgL2hvbWUvJHt2c0NvZGVVc2VyfS8ubG9jYWwvc2hhcmUvY29kZS1zZXJ2ZXIvVXNlci9gLFxuICAgICAgICAgICAgICAgICAgICBgdG91Y2ggL2hvbWUvJHt2c0NvZGVVc2VyfS8uaHVzaGxvZ2luYCxcbiAgICAgICAgICAgICAgICAgICAgYG1rZGlyIC1wICR7aG9tZUZvbGRlcn0gJiYgY2hvd24gLVIgJHt2c0NvZGVVc2VyfToke3ZzQ29kZVVzZXJ9ICR7aG9tZUZvbGRlcn1gLFxuICAgICAgICAgICAgICAgICAgICBgdGVlIC9ob21lLyR7dnNDb2RlVXNlcn0vLmxvY2FsL3NoYXJlL2NvZGUtc2VydmVyL1VzZXIvc2V0dGluZ3MuanNvbiA8PEVPRlxue1xuICBcImV4dGVuc2lvbnMuYXV0b1VwZGF0ZVwiOiBmYWxzZSxcbiAgXCJleHRlbnNpb25zLmF1dG9DaGVja1VwZGF0ZXNcIjogZmFsc2UsXG4gIFwidGVsZW1ldHJ5LnRlbGVtZXRyeUxldmVsXCI6IFwib2ZmXCIsXG4gIFwic2VjdXJpdHkud29ya3NwYWNlLnRydXN0LnN0YXJ0dXBQcm9tcHRcIjogXCJuZXZlclwiLFxuICBcInNlY3VyaXR5LndvcmtzcGFjZS50cnVzdC5lbmFibGVkXCI6IGZhbHNlLFxuICBcInNlY3VyaXR5LndvcmtzcGFjZS50cnVzdC5iYW5uZXJcIjogXCJuZXZlclwiLFxuICBcInNlY3VyaXR5LndvcmtzcGFjZS50cnVzdC5lbXB0eVdpbmRvd1wiOiBmYWxzZSxcbiAgXCJweXRob24udGVzdGluZy5weXRlc3RFbmFibGVkXCI6IHRydWUsXG4gIFwiYXV0by1ydW4tY29tbWFuZC5ydWxlc1wiOiBbXG4gICAge1xuICAgICAgXCJjb21tYW5kXCI6IFwid29ya2JlbmNoLmFjdGlvbi50ZXJtaW5hbC5uZXdcIlxuICAgIH1cbiAgXVxufVxuRU9GYCxcbiAgICAgICAgICAgICAgICAgICAgYGNob3duIC1SICR7dnNDb2RlVXNlcn06JHt2c0NvZGVVc2VyfSAvaG9tZS8ke3ZzQ29kZVVzZXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgYHN5c3RlbWN0bCByZXN0YXJ0IGNvZGUtc2VydmVyQCR7dnNDb2RlVXNlcn1gLFxuICAgICAgICAgICAgICAgICAgICBcInN5c3RlbWN0bCByZXN0YXJ0IG5naW54XCIsXG4gICAgICAgICAgICAgICAgICAgIGBzdWRvIC11ICR7dnNDb2RlVXNlcn0gLS1sb2dpbiBjb2RlLXNlcnZlciAtLWluc3RhbGwtZXh0ZW5zaW9uIEFtYXpvbldlYlNlcnZpY2VzLmF3cy10b29sa2l0LXZzY29kZSAtLWZvcmNlYCxcbiAgICAgICAgICAgICAgICAgICAgYHN1ZG8gLXUgJHt2c0NvZGVVc2VyfSAtLWxvZ2luIGNvZGUtc2VydmVyIC0taW5zdGFsbC1leHRlbnNpb24gQW1hem9uV2ViU2VydmljZXMuYW1hem9uLXEtdnNjb2RlIC0tZm9yY2VgLFxuICAgICAgICAgICAgICAgICAgICBgc3VkbyAtdSAke3ZzQ29kZVVzZXJ9IC0tbG9naW4gY29kZS1zZXJ2ZXIgLS1pbnN0YWxsLWV4dGVuc2lvbiBzeW5lZHJhLmF1dG8tcnVuLWNvbW1hbmQgLS1mb3JjZWAsXG4gICAgICAgICAgICAgICAgICAgIGBzdWRvIC11ICR7dnNDb2RlVXNlcn0gLS1sb2dpbiBjb2RlLXNlcnZlciAtLWluc3RhbGwtZXh0ZW5zaW9uIHZzY2phdmEudnNjb2RlLWphdmEtcGFjayAtLWZvcmNlYCxcbiAgICAgICAgICAgICAgICAgICAgYHN1ZG8gLXUgJHt2c0NvZGVVc2VyfSAtLWxvZ2luIGNvZGUtc2VydmVyIC0taW5zdGFsbC1leHRlbnNpb24gbXMtdnNjb2RlLmxpdmUtc2VydmVyIC0tZm9yY2VgLFxuICAgICAgICAgICAgICAgICAgICBgY2hvd24gLVIgJHt2c0NvZGVVc2VyfToke3ZzQ29kZVVzZXJ9IC9ob21lLyR7dnNDb2RlVXNlcn1gLFxuICAgICAgICAgICAgICAgICAgICAnZWNobyBcIk5naW54IGluc3RhbGxlZC4gQ2hlY2tpbmcgY29uZmlndXJhdGlvblwiJyxcbiAgICAgICAgICAgICAgICAgICAgXCJuZ2lueCAtdCAyPiYxXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3lzdGVtY3RsIHN0YXR1cyBuZ2lueFwiLFxuICAgICAgICAgICAgICAgICAgICAnZWNobyBcIkNvZGVTZXJ2ZXIgaW5zdGFsbGVkLiBDaGVja2luZyBjb25maWd1cmF0aW9uXCInLFxuICAgICAgICAgICAgICAgICAgICBcImNvZGUtc2VydmVyIC12XCIsXG4gICAgICAgICAgICAgICAgICAgIGBzeXN0ZW1jdGwgc3RhdHVzIGNvZGUtc2VydmVyQCR7dnNDb2RlVXNlcn1gLFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBcImF3czpydW5TaGVsbFNjcmlwdFwiLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwiVXBkYXRlUHJvZmlsZVwiLFxuICAgICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgICAgcnVuQ29tbWFuZDogW1xuICAgICAgICAgICAgICAgICAgICBcIiMhL2Jpbi9iYXNoXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWNobyBMQU5HPWVuX1VTLnV0Zi04ID4+IC9ldGMvZW52aXJvbm1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlY2hvIExDX0FMTD1lbl9VUy5VVEYtOCA+PiAvZXRjL2Vudmlyb25tZW50XCIsXG4gICAgICAgICAgICAgICAgICAgIGBlY2hvICdQQVRIPSRQQVRIOi9ob21lLyR7dnNDb2RlVXNlcn0vLmxvY2FsL2JpbicgPj4gL2hvbWUvJHt2c0NvZGVVc2VyfS8uYmFzaHJjYCxcbiAgICAgICAgICAgICAgICAgICAgYGVjaG8gJ2V4cG9ydCBQQVRIJyA+PiAvaG9tZS8ke3ZzQ29kZVVzZXJ9Ly5iYXNocmNgLFxuICAgICAgICAgICAgICAgICAgICBgZWNobyAnZXhwb3J0IEFXU19SRUdJT049JHtTdGFjay5vZihzY29wZSkucmVnaW9ufScgPj4gL2hvbWUvJHt2c0NvZGVVc2VyfS8uYmFzaHJjYCxcbiAgICAgICAgICAgICAgICAgICAgYGVjaG8gJ2V4cG9ydCBBV1NfQUNDT1VOVElEPSR7U3RhY2sub2Yoc2NvcGUpLmFjY291bnR9JyA+PiAvaG9tZS8ke3ZzQ29kZVVzZXJ9Ly5iYXNocmNgLFxuICAgICAgICAgICAgICAgICAgICBgZWNobyAnZXhwb3J0IE5FWFRfVEVMRU1FVFJZX0RJU0FCTEVEPTEnID4+IC9ob21lLyR7dnNDb2RlVXNlcn0vLmJhc2hyY2AsXG4gICAgICAgICAgICAgICAgICAgIGBlY2hvIFwiZXhwb3J0IFBTMT0nXFxcXFtcXFxcMDMzWzAxOzMybVxcXFxdXFxcXHU6XFxcXFtcXFxcMDMzWzAxOzM0bVxcXFxdXFxcXHdcXFxcW1xcXFwwMzNbMDBtXFxcXF1cXFxcJCAnXCIgPj4gL2hvbWUvJHt2c0NvZGVVc2VyfS8uYmFzaHJjYCxcbiAgICAgICAgICAgICAgICAgICAgYGNob3duIC1SICR7dnNDb2RlVXNlcn06JHt2c0NvZGVVc2VyfSAvaG9tZS8ke3ZzQ29kZVVzZXJ9YCxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogXCJhd3M6cnVuU2hlbGxTY3JpcHRcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkluc3RhbGxDREtcIixcbiAgICAgICAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgICAgICAgIHJ1bkNvbW1hbmQ6IFtcbiAgICAgICAgICAgICAgICAgICAgXCIjIS9iaW4vYmFzaFwiLFxuICAgICAgICAgICAgICAgICAgICBcIm5wbSBpbnN0YWxsIC1nIGF3cy1jZGtcIixcbiAgICAgICAgICAgICAgICAgICAgJ2VjaG8gXCJBV1MgQ0RLIGluc3RhbGxlZC4gQ2hlY2tpbmcgY29uZmlndXJhdGlvblwiJyxcbiAgICAgICAgICAgICAgICAgICAgXCJjZGsgLS12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgTGludXggZmxhdm9yOiAke2xpbnV4Rmxhdm9yfWApO1xuICAgIH1cblxuICAgIHJldHVybiBzc21Eb2N1bWVudDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgQ3VzdG9tUmVzb3VyY2VJbnN0YWxsZXJPcHRpb25zIGV4dGVuZHMgSW5zdGFsbGVyT3B0aW9ucyB7fVxuXG5jbGFzcyBDdXN0b21SZXNvdXJjZUluc3RhbGxlciBleHRlbmRzIEluc3RhbGxlciB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIG9wdGlvbnM6IEN1c3RvbVJlc291cmNlSW5zdGFsbGVyT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG5cbiAgICBjb25zdCBvbkV2ZW50OiBGdW5jdGlvbiA9IG5ldyBJbnN0YWxsZXJGdW5jdGlvbihcbiAgICAgIHNjb3BlLFxuICAgICAgXCJJbnN0YWxsZXJPbkV2ZW50SGFuZGxlclwiLFxuICAgICAge1xuICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDMwMCksIC8vIFRPRE8gY29uZmlndXJhYmxlXG4gICAgICAgIG1lbW9yeVNpemU6IDUxMiwgLy8gVE9ETyBjb25maWd1cmFibGVcbiAgICAgIH0sXG4gICAgKTtcbiAgICBOYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICBbb25FdmVudF0sXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJBd3NTb2x1dGlvbnMtSUFNNFwiLFxuICAgICAgICAgIHJlYXNvbjpcbiAgICAgICAgICAgIFwiRm9yIHRoaXMgZXZlbnQgaGFuZGxlciB3ZSBkbyBub3QgbmVlZCB0byByZXN0cmljdCBtYW5hZ2VkIHBvbGljaWVzXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJBd3NTb2x1dGlvbnMtTDFcIixcbiAgICAgICAgICByZWFzb246IFwiRm9yIHRoaXMgbGFtYmRhIHRoZSBsYXRlc3QgcnVudGltZSBpcyBub3QgbmVlZGVkXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuXG4gICAgY29uc3QgZG9jdW1lbnRBcm4gPSBBcm4uZm9ybWF0KFxuICAgICAge1xuICAgICAgICBzZXJ2aWNlOiBcInNzbVwiLFxuICAgICAgICByZXNvdXJjZTogXCJkb2N1bWVudFwiLFxuICAgICAgICByZXNvdXJjZU5hbWU6IG9wdGlvbnMuZG9jdW1lbnROYW1lLFxuICAgICAgfSxcbiAgICAgIFN0YWNrLm9mKHNjb3BlKSxcbiAgICApO1xuXG4gICAgY29uc3QgY3dNYW5hZ2VBZ2VudEFybiA9IEFybi5mb3JtYXQoXG4gICAgICB7XG4gICAgICAgIHNlcnZpY2U6IFwic3NtXCIsXG4gICAgICAgIHJlc291cmNlOiBcImRvY3VtZW50XCIsXG4gICAgICAgIHJlc291cmNlTmFtZTogXCJBbWF6b25DbG91ZFdhdGNoLU1hbmFnZUFnZW50XCIsXG4gICAgICB9LFxuICAgICAgU3RhY2sub2Yoc2NvcGUpLFxuICAgICk7XG5cbiAgICBjb25zdCB0YXJnZXRFYzJJbnN0YW5jZUFybiA9IEFybi5mb3JtYXQoXG4gICAgICB7XG4gICAgICAgIHNlcnZpY2U6IFwiZWMyXCIsXG4gICAgICAgIHJlc291cmNlOiBcImluc3RhbmNlXCIsXG4gICAgICAgIHJlc291cmNlTmFtZTogb3B0aW9ucy5pbnN0YW5jZUlkLFxuICAgICAgfSxcbiAgICAgIFN0YWNrLm9mKHNjb3BlKSxcbiAgICApO1xuXG4gICAgb25FdmVudC5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1wic3NtOlNlbmRDb21tYW5kXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtkb2N1bWVudEFybiwgY3dNYW5hZ2VBZ2VudEFybiwgdGFyZ2V0RWMySW5zdGFuY2VBcm5dLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IFByb3ZpZGVyKHNjb3BlLCBcIkluc3RhbGxlclByb3ZpZGVyXCIsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiBvbkV2ZW50LFxuICAgIH0pO1xuICAgIE5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgIFtwcm92aWRlcl0sXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJBd3NTb2x1dGlvbnMtSUFNNFwiLFxuICAgICAgICAgIHJlYXNvbjpcbiAgICAgICAgICAgIFwiRm9yIHRoaXMgcHJvdmlkZXIgd2UgZG8gbm90IG5lZWQgdG8gcmVzdHJpY3QgbWFuYWdlZCBwb2xpY2llc1wiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwiQXdzU29sdXRpb25zLUlBTTVcIixcbiAgICAgICAgICByZWFzb246IFwiRm9yIHRoaXMgcHJvdmlkZXIgd2lsZGNhcmRzIGFyZSBmaW5lXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJBd3NTb2x1dGlvbnMtTDFcIixcbiAgICAgICAgICByZWFzb246IFwiRm9yIHRoaXMgcHJvdmlkZXIgdGhlIGxhdGVzdCBydW50aW1lIGlzIG5vdCBuZWVkZWRcIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB0cnVlLFxuICAgICk7XG5cbiAgICBuZXcgQ3VzdG9tUmVzb3VyY2Uoc2NvcGUsIFwiU1NNSW5zdGFsbGVyQ3VzdG9tUmVzb3VyY2VcIiwge1xuICAgICAgc2VydmljZVRva2VuOiBwcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFNlcnZpY2VUaW1lb3V0OiAzMDUsIC8vIFRPRE8gY29uZmlndXJhYmxlXG4gICAgICAgIEluc3RhbmNlSWQ6IG9wdGlvbnMuaW5zdGFuY2VJZCxcbiAgICAgICAgRG9jdW1lbnROYW1lOiBvcHRpb25zLmRvY3VtZW50TmFtZSxcbiAgICAgICAgQ2xvdWRXYXRjaExvZ0dyb3VwTmFtZTogb3B0aW9ucy5jbG91ZFdhdGNoTG9nR3JvdXBOYW1lLFxuICAgICAgICBWU0NvZGVQYXNzd29yZDogb3B0aW9ucy52c0NvZGVQYXNzd29yZCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgX2JpbmQoKSB7fVxufVxuIl19
697
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2luc3RhbGxlci9pbnN0YWxsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBQXNEO0FBRXRELDJDQUEyQztBQUMzQywyQ0FBd0U7QUFDeEUsbUVBQXdEO0FBQ3hELHFDQUEwQztBQUUxQyw2REFBeUQ7QUFDekQsb0RBQW1EO0FBc0RuRCxNQUFzQixTQUFTO0lBQ3RCLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBeUI7UUFDNUMsT0FBTyxJQUFJLENBQUMsS0FBTSxTQUFRLFNBQVM7WUFDMUIsS0FBSyxDQUFDLEtBQWdCO2dCQUMzQixJQUFJLFlBQVksQ0FBQztnQkFDakIsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLElBQUksS0FBSyxDQUFDO2dCQUM3RCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQztnQkFDcEQsSUFBSSxPQUFPLENBQUMsWUFBWSxJQUFJLE9BQU8sQ0FBQyxZQUFZLElBQUksRUFBRSxFQUFFLENBQUM7b0JBQ3ZELFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO2dCQUN0QyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUNyQyxLQUFLLEVBQ0wsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixPQUFPLENBQUMsVUFBVSxFQUNsQixPQUFPLENBQUMsVUFBVSxFQUNsQiwrQkFBZSxDQUFDLFNBQVMsQ0FDMUIsQ0FBQztvQkFDRixZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUssQ0FBQztnQkFDaEMsQ0FBQztnQkFFRCxNQUFNLHNCQUFzQixHQUMxQixPQUFPLENBQUMsc0JBQXNCLElBQUksWUFBWSxZQUFZLEVBQUUsQ0FBQztnQkFFL0QsTUFBTSxTQUFTLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxLQUFLLEVBQUU7b0JBQ25ELFVBQVUs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QyxLQUFLLEVBQUUsbUJBQW1CLEVBQUU7WUFDeEQsY0FBYyxFQUFFLE9BQU87U0FDeEIsQ0FBQyxDQUFDO1FBQ0gseUJBQWUsQ0FBQyx1QkFBdUIsQ0FDckMsQ0FBQyxRQUFRLENBQUMsRUFDVjtZQUNFO2dCQUNFLEVBQUUsRUFBRSxtQkFBbUI7Z0JBQ3ZCLE1BQU0sRUFDSiwrREFBK0Q7YUFDbEU7WUFDRDtnQkFDRSxFQUFFLEVBQUUsbUJBQW1CO2dCQUN2QixNQUFNLEVBQUUsc0NBQXNDO2FBQy9DO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLGlCQUFpQjtnQkFDckIsTUFBTSxFQUFFLG9EQUFvRDthQUM3RDtTQUNGLEVBQ0QsSUFBSSxDQUNMLENBQUM7UUFFRixJQUFJLHFCQUFjLENBQUMsS0FBSyxFQUFFLDRCQUE0QixFQUFFO1lBQ3RELFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtZQUNuQyxVQUFVLEVBQUU7Z0JBQ1YsY0FBYyxFQUFFLEdBQUcsRUFBRSxvQkFBb0I7Z0JBQ3pDLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtnQkFDOUIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO2dCQUNsQyxzQkFBc0IsRUFBRSxPQUFPLENBQUMsc0JBQXNCO2dCQUN0RCxjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWM7YUFDdkM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxLQUFJLENBQUM7Q0FDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEZ1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgeyBBcm4sIEN1c3RvbVJlc291cmNlLCBEdXJhdGlvbiwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcyc7XG5pbXBvcnQgeyBOYWdTdXBwcmVzc2lvbnMgfSBmcm9tICdjZGstbmFnJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgSW5zdGFsbGVyRnVuY3Rpb24gfSBmcm9tICcuL2luc3RhbGxlci1mdW5jdGlvbic7XG5pbXBvcnQgeyBMaW51eEZsYXZvclR5cGUgfSBmcm9tICcuLi92c2NvZGUtc2VydmVyJztcblxuaW50ZXJmYWNlIEluc3RhbGxlck9wdGlvbnNCYXNlIHtcbiAgLyoqXG4gICAqIFRoZSBlYzIgaW5zdGFuY2UgaWQgdG8gaW5zdGFsbCB0aGUgc3NtIGRvY3VtZW50IG9uXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjdXN0b20gc3NtIGRvY3VtZW50IHRvIGluc3RhbGwuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRoZSBzc20gZG9jdW1lbnQgb2YgdGhlIGNvbnN0cnVjdFxuICAgKi9cbiAgcmVhZG9ubHkgZG9jdW1lbnROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY2xvdWR3YXRjaCBsb2cgZ3JvdXAgZm9yIHRoZSBpbnN0YWxsIGxvZ3NcbiAgICpcbiAgICogQGRlZmF1bHQgL2F3cy9zc20vJHtkb2N1bWVudE5hbWV9XG4gICAqL1xuICByZWFkb25seSBjbG91ZFdhdGNoTG9nR3JvdXBOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdXNlciB1bmRlciB3aGljaCB0aGUgdnNjb2RlIHNlcnZlciBydW5zXG4gICAqL1xuICByZWFkb25seSB2c0NvZGVVc2VyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXNzd29yZCBvZiB0aGUgdXNlciB1bmRlciB3aGljaCB0aGUgdnNjb2RlIHNlcnZlciBydW5zXG4gICAqL1xuICByZWFkb25seSB2c0NvZGVQYXNzd29yZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaG9tZSBmb2xkZXIgb2YgdGhlIHVzZXIgdW5kZXIgd2hpY2ggdGhlIHZzY29kZSBzZXJ2ZXIgcnVuc1xuICAgKi9cbiAgcmVhZG9ubHkgaG9tZUZvbGRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSByZXN0IHBhdGggdnMgY29kZSBzZXJ2ZXIgd2lsbCBydW5cbiAgICpcbiAgICogQGRlZmF1bHQgYXBwXG4gICAqL1xuICByZWFkb25seSBkZXZTZXJ2ZXJCYXNlUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvcnQgdnNjb2RlciBzZXJ2ZXIgd2lsbCBiZSBzZXJ2ZWQgaW4gdGhlIGluc3RhbmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IDgwODFcbiAgICovXG4gIHJlYWRvbmx5IGRldlNlcnZlclBvcnQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFsbGVyT3B0aW9ucyBleHRlbmRzIEluc3RhbGxlck9wdGlvbnNCYXNlIHt9XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbnN0YWxsZXIge1xuICBwdWJsaWMgc3RhdGljIHVidW50dShvcHRpb25zOiBJbnN0YWxsZXJPcHRpb25zKTogSW5zdGFsbGVyIHtcbiAgICByZXR1cm4gbmV3IChjbGFzcyBleHRlbmRzIEluc3RhbGxlciB7XG4gICAgICBwdWJsaWMgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCk6IEluc3RhbGxlciB7XG4gICAgICAgIGxldCBkb2N1bWVudE5hbWU7XG4gICAgICAgIGNvbnN0IGRldlNlcnZlckJhc2VQYXRoID0gb3B0aW9ucy5kZXZTZXJ2ZXJCYXNlUGF0aCA/PyAnYXBwJztcbiAgICAgICAgY29uc3QgZGV2U2VydmVyUG9ydCA9IG9wdGlvbnMuZGV2U2VydmVyUG9ydCA/PyA4MDgxO1xuICAgICAgICBpZiAob3B0aW9ucy5kb2N1bWVudE5hbWUgJiYgb3B0aW9ucy5kb2N1bWVudE5hbWUgIT0gJycpIHtcbiAgICAgICAgICBkb2N1bWVudE5hbWUgPSBvcHRpb25zLmRvY3VtZW50TmFtZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IHRoaXMuY3JlYXRlU1NNRG9jdW1lbnQoXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGRldlNlcnZlckJhc2VQYXRoLFxuICAgICAgICAgICAgZGV2U2VydmVyUG9ydCxcbiAgICAgICAgICAgIG9wdGlvbnMudnNDb2RlVXNlcixcbiAgICAgICAgICAgIG9wdGlvbnMuaG9tZUZvbGRlcixcbiAgICAgICAgICAgIExpbnV4Rmxhdm9yVHlwZS5VQlVOVFVfMjIsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkb2N1bWVudE5hbWUgPSBkb2N1bWVudC5uYW1lITtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsb3VkV2F0Y2hMb2dHcm91cE5hbWUgPVxuICAgICAgICAgIG9wdGlvbnMuY2xvdWRXYXRjaExvZ0dyb3VwTmFtZSA/PyBgL2F3cy9zc20vJHtkb2N1bWVudE5hbWV9YDtcblxuICAgICAgICBjb25zdCBpbnN0YWxsZXIgPSBuZXcgQ3VzdG9tUmVzb3VyY2VJbnN0YWxsZXIoc2NvcGUsIHtcbiAgICAgICAgICBpbnN0YW5jZUlkOiBvcHRpb25zLmluc3RhbmNlSWQsXG4gICAgICAgICAgZG9jdW1lbnROYW1lOiBkb2N1bWVudE5hbWUsXG4gICAgICAgICAgY2xvdWRXYXRjaExvZ0dyb3VwTmFtZTogY2xvdWRXYXRjaExvZ0dyb3VwTmFtZSxcbiAgICAgICAgICB2c0NvZGVVc2VyOiBvcHRpb25zLnZzQ29kZVVzZXIsXG4gICAgICAgICAgdnNDb2RlUGFzc3dvcmQ6IG9wdGlvbnMudnNDb2RlUGFzc3dvcmQsXG4gICAgICAgICAgaG9tZUZvbGRlcjogb3B0aW9ucy5ob21lRm9sZGVyLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gaW5zdGFsbGVyO1xuICAgICAgfVxuICAgIH0pKCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFtYXpvbkxpbnV4MjAyMyhvcHRpb25zOiBJbnN0YWxsZXJPcHRpb25zKTogSW5zdGFsbGVyIHtcbiAgICByZXR1cm4gbmV3IChjbGFzcyBleHRlbmRzIEluc3RhbGxlciB7XG4gICAgICBwdWJsaWMgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCk6IEluc3RhbGxlciB7XG4gICAgICAgIGxldCBkb2N1bWVudE5hbWU7XG4gICAgICAgIGNvbnN0IGRldlNlcnZlckJhc2VQYXRoID0gb3B0aW9ucy5kZXZTZXJ2ZXJCYXNlUGF0aCA/PyAnYXBwJztcbiAgICAgICAgY29uc3QgZGV2U2VydmVyUG9ydCA9IG9wdGlvbnMuZGV2U2VydmVyUG9ydCA/PyA4MDgxO1xuICAgICAgICBpZiAob3B0aW9ucy5kb2N1bWVudE5hbWUgJiYgb3B0aW9ucy5kb2N1bWVudE5hbWUgIT0gJycpIHtcbiAgICAgICAgICBkb2N1bWVudE5hbWUgPSBvcHRpb25zLmRvY3VtZW50TmFtZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IHRoaXMuY3JlYXRlU1NNRG9jdW1lbnQoXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGRldlNlcnZlckJhc2VQYXRoLFxuICAgICAgICAgICAgZGV2U2VydmVyUG9ydCxcbiAgICAgICAgICAgIG9wdGlvbnMudnNDb2RlVXNlcixcbiAgICAgICAgICAgIG9wdGlvbnMuaG9tZUZvbGRlcixcbiAgICAgICAgICAgIExpbnV4Rmxhdm9yVHlwZS5BTUFaT05fTElOVVhfMjAyMyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGRvY3VtZW50TmFtZSA9IGRvY3VtZW50Lm5hbWUhO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xvdWRXYXRjaExvZ0dyb3VwTmFtZSA9XG4gICAgICAgICAgb3B0aW9ucy5jbG91ZFdhdGNoTG9nR3JvdXBOYW1lID8/IGAvYXdzL3NzbS8ke2RvY3VtZW50TmFtZX1gO1xuXG4gICAgICAgIGNvbnN0IGluc3RhbGxlciA9IG5ldyBDdXN0b21SZXNvdXJjZUluc3RhbGxlcihzY29wZSwge1xuICAgICAgICAgIGluc3RhbmNlSWQ6IG9wdGlvbnMuaW5zdGFuY2VJZCxcbiAgICAgICAgICBkb2N1bWVudE5hbWU6IGRvY3VtZW50TmFtZSxcbiAgICAgICAgICBjbG91ZFdhdGNoTG9nR3JvdXBOYW1lOiBjbG91ZFdhdGNoTG9nR3JvdXBOYW1lLFxuICAgICAgICAgIHZzQ29kZVVzZXI6IG9wdGlvbnMudnNDb2RlVXNlcixcbiAgICAgICAgICB2c0NvZGVQYXNzd29yZDogb3B0aW9ucy52c0NvZGVQYXNzd29yZCxcbiAgICAgICAgICBob21lRm9sZGVyOiBvcHRpb25zLmhvbWVGb2xkZXIsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBpbnN0YWxsZXI7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgfVxuXG4gIHB1YmxpYyBpbnN0YW5jZUlkITogc3RyaW5nO1xuICBwdWJsaWMgZG9jdW1lbnROYW1lITogc3RyaW5nO1xuICBwdWJsaWMgY2xvdWRXYXRjaExvZ0dyb3VwTmFtZSE6IHN0cmluZztcbiAgcHVibGljIHZzQ29kZVBhc3N3b3JkITogc3RyaW5nO1xuICBwdWJsaWMgdnNDb2RlUGFzc3dvcmRUZXN0ITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QpOiBhbnk7XG5cbiAgcHJpdmF0ZSBjcmVhdGVTU01Eb2N1bWVudChcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGRldlNlcnZlckJhc2VQYXRoOiBzdHJpbmcsXG4gICAgZGV2U2VydmVyUG9ydDogbnVtYmVyLFxuICAgIHZzQ29kZVVzZXI6IHN0cmluZyxcbiAgICBob21lRm9sZGVyOiBzdHJpbmcsXG4gICAgbGludXhGbGF2b3I6IExpbnV4Rmxhdm9yVHlwZSxcbiAgKTogc3NtLkNmbkRvY3VtZW50IHtcbiAgICBsZXQgc3NtRG9jdW1lbnQ6IHNzbS5DZm5Eb2N1bWVudDtcbiAgICBzd2l0Y2ggKGxpbnV4Rmxhdm9yKSB7XG4gICAgICBjYXNlIExpbnV4Rmxhdm9yVHlwZS5VQlVOVFVfMjI6XG4gICAgICBjYXNlIExpbnV4Rmxhdm9yVHlwZS5VQlVOVFVfMjQ6XG4gICAgICAgIC8vIENyZWF0ZSBhbiBTU00gZG9jdW1lbnQgd2l0aCBtdWx0aXBsZSBhY3Rpb25zIHRvIGluc3RhbGwgdGhlIHNvZnR3YXJlXG4gICAgICAgIHNzbURvY3VtZW50ID0gbmV3IHNzbS5DZm5Eb2N1bWVudChzY29wZSwgJ3NzbS1kb2N1bWVudC11YnVudHUnLCB7XG4gICAgICAgICAgbmFtZTogYHZzY29kZS1zZXJ2ZXItdWJ1bnR1LSR7U3RhY2sub2Yoc2NvcGUpLnN0YWNrTmFtZX1gLFxuICAgICAgICAgIGRvY3VtZW50VHlwZTogJ0NvbW1hbmQnLFxuICAgICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICAgIHNjaGVtYVZlcnNpb246ICcyLjInLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdCb290c3RyYXAgVlNDb2RlIGNvZGUtc2VydmVyIGluc3RhbmNlJyxcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgVlNDb2RlUGFzc3dvcmQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBTdGFjay5vZihzY29wZSkuc3RhY2tJZCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgTm9kZVZlcnNpb246IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAnMjAnLFxuICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFsnMjInLCAnMjAnLCAnMTgnXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgRG90TmV0VmVyc2lvbjoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdTdHJpbmcnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICc4LjAnLFxuICAgICAgICAgICAgICAgIGFsbG93ZWRWYWx1ZXM6IFsnOC4wJywgJzcuMCddLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGFsbCBtYWluU3RlcHMgc2NyaXB0cyBhcmUgaW4gaW4gL3Zhci9saWIvYW1hem9uL3NzbS88aW5zdGFuY2VpZD4vZG9jdW1lbnQvb3JjaGVzdHJhdGlvbi88dXVpZD4vPFN0ZXBOYW1lPi9fc2NyaXB0LnNoXG4gICAgICAgICAgICBtYWluU3RlcHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogJ2F3czpjb25maWd1cmVQYWNrYWdlJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnSW5zdGFsbENsb3VkV2F0Y2hBZ2VudCcsXG4gICAgICAgICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiAnQW1hem9uQ2xvdWRXYXRjaEFnZW50JyxcbiAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ0luc3RhbGwnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdhd3M6cnVuRG9jdW1lbnQnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdDb25maWd1cmVDbG91ZFdhdGNoQWdlbnQnLFxuICAgICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgICAgZG9jdW1lbnRUeXBlOiAnU1NNRG9jdW1lbnQnLFxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnRQYXRoOiAnQW1hem9uQ2xvdWRXYXRjaC1NYW5hZ2VBZ2VudCcsXG4gICAgICAgICAgICAgICAgICBkb2N1bWVudFBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAnY29uZmlndXJlJyxcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogJ2VjMicsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsQ29uZmlndXJhdGlvblNvdXJjZTogJ2RlZmF1bHQnLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25hbFJlc3RhcnQ6ICd5ZXMnLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAnYXdzOnJ1blNoZWxsU2NyaXB0JyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnSW5zdGFsbEFwdFBhY2thZ2VzQXB0JyxcbiAgICAgICAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgICAgICAgIHJ1bkNvbW1hbmQ6IFtcbiAgICAgICAgICAgICAgICAgICAgJyMhL2Jpbi9iYXNoJyxcbiAgICAgICAgICAgICAgICAgICAgJ2FwdC1nZXQgLXEgdXBkYXRlICYmIERFQklBTl9GUk9OVEVORD1ub25pbnRlcmFjdGl2ZSBhcHQtZ2V0IGluc3RhbGwgLXkgLXEgYXB0LXV0aWxzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2FwdC1nZXQgLXEgdXBkYXRlICYmIERFQklBTl9GUk9OVEVORD1ub25pbnRlcmFjdGl2ZSBhcHQtZ2V0IGluc3RhbGwgLXkgLXEgbmVlZHJlc3RhcnQgdW5hdHRlbmRlZC11cGdyYWRlcycsXG4gICAgICAgICAgICAgICAgICAgIFwic2VkIC1pICdzLyMkbnJjb25me2tlcm5lbGhpbnRzfSA9IC0xOy8kbnJjb25me2tlcm5lbGhpbnRzfSA9IDA7LycgL2V0Yy9uZWVkcmVzdGFydC9uZWVkcmVzdGFydC5jb25mXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic2VkIC1pICdzLyMkbnJjb25me3ZlcmJvc2l0eX0gPSAyOy8kbnJjb25me3ZlcmJvc2l0eX0gPSAwOy8nIC9ldGMvbmVlZHJlc3RhcnQvbmVlZHJlc3RhcnQuY29uZlwiLFxuICAgICAgICAgICAgICAgICAgICBcInNlZCAtaSBcXFwicy8jXFwkbnJjb25me3Jlc3RhcnR9ID0gJ2knOy9cXCRucmNvbmZ7cmVzdGFydH0gPSAnYSc7L1xcXCIgL2V0Yy9uZWVkcmVzdGFydC9uZWVkcmVzdGFydC5jb25mXCIsXG4gICAgICAgICAgICAgICAgICAgICdlY2hvIFwiQXB0IGhlbHBlciBwYWNrYWdlcyBhZGRlZC4gQ2hlY2tpbmcgY29uZmlndXJhdGlvblwiJyxcbiAgICAgICAgICAgICAgICAgICAgJ2NhdCAvZXRjL25lZWRyZXN0YXJ0L25lZWRyZXN0YXJ0LmNvbmYnLFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAnYXdzOnJ1blNoZWxsU2NyaXB0JyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnSW5zdGFsbEJhc2VQYWNrYWdlc0FwdCcsXG4gICAgICAgICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICAgICAgICBydW5Db21tYW5kOiBbXG4gICAgICAgICAgICAgICAgICAgICcjIS9iaW4vYmFzaCcsXG4gICAgICAgICAgICAgICAgICAgICdhcHQtZ2V0IC1xIHVwZGF0ZSAmJiBERUJJQU5fRlJPTlRFTkQ9bm9uaW50ZXJhY3RpdmUgYXB0LWdldCBpbnN0YWxsIC15IC1xIGN1cmwgZ251cGcgd2hvaXMgYXJnb24yIG9wZW5zc2wgbG9jYWxlcyBsb2NhbGVzLWFsbCB1bnppcCBhcHQtdHJhbnNwb3J0LWh0dHBzIGNhLWNlcnRpZmljYXRlcyBzb2Z0d2FyZS1wcm9wZXJ0aWVzLWNvbW1vbiBuZ2lueCcsXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdhd3M6cnVuU2hlbGxTY3JpcHQnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdBZGRVc2VyQXB0JyxcbiAgICAgICAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgICAgICAgIHJ1bkNvbW1hbmQ6IFtcbiAgICAgICAgICAgICAgICAgICAgJyMhL2Jpbi9iYXNoJyxcbiAgICAgICAgICAgICAgICAgICAgXCJlY2hvICdBZGRpbmcgdXNlcjogJHtWU0NvZGVVc2VyfSdcIixcbiAgICAgICAgICAgICAgICAgICAgYGFkZHVzZXIgLS1kaXNhYmxlZC1wYXNzd29yZCAtLWdlY29zICcnICR7dnNDb2RlVXNlcn1gLFxuICAgICAgICAgICAgICAgICAgICBgZWNobyBcIiR7dnNDb2RlVXNlcn06e3sgVlNDb2RlUGFzc3dvcmQgfX1cIiB8IGNocGFzc3dkYCxcbiAgICAgICAgICAgICAgICAgICAgYHVzZXJtb2QgLWFHIHN1ZG8gJHt2c0NvZGVVc2VyfWAsXG4gICAgICAgICAgICAgICAgICAgIGB0ZWUgL2V0Yy9zdWRvZXJzLmQvOTEtdnNjb2RlLXVzZXIgPDxFT0ZcbiR7dnNDb2RlVXNlcn0gQUxMPShBTEwpIE5PUEFTU1dEOkFMTFxuRU9GYCxcbiAgICAgICAgICAgICAgICAgICAgYG1rZGlyIC1wIC9ob21lLyR7dnNDb2RlVXNlcn0gJiYgY2hvd24gLVIgJHt2c0NvZGVVc2VyfToke3ZzQ29kZVVzZXJ9IC9ob21lLyR7dnNDb2RlVXNlcn1gLFxuICAgICAgICAgICAgICAgICAgICAnZWNobyBcIlVzZXIgYWRkZWQuIENoZWNraW5nIGNvbmZpZ3VyYXRpb25cIicsXG4gICAgICAgICAgICAgICAgICAgIGBnZXRlbnQgcGFzc3dkICR7dnNDb2RlVXNlcn1gLFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAnYXdzOnJ1blNoZWxsU2NyaXB0JyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnSW5zdGFsbE5vZGVBcHQnLFxuICAgICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgICAgcnVuQ29tbWFuZDogW1xuICAgICAgICAgICAgICAgICAgICAnIyEvYmluL2Jhc2gnLFxuICAgICAgICAgICAgICAgICAgICAnY3VybCAtZnNTTCBodHRwczovL2RlYi5ub2Rlc291cmNlLmNvbS9ncGdrZXkvbm9kZXNvdXJjZS1yZXBvLmdwZy5rZXkgfCBncGcgLS1kZWFybW9yIC1vIC91c3Ivc2hhcmUva2V5cmluZ3Mvbm9kZXNvdXJjZS5ncGcnLFxuICAgICAgICAgICAgICAgICAgICAnZWNobyBcImRlYiBbYXJjaD0kKGRwa2cgLS1wcmludC1hcmNoaXRlY3R1cmUpIHNpZ25lZC1ieT0vdXNyL3NoYXJlL2tleXJpbmdzL25vZGVzb3VyY2UuZ3BnXSBodHRwczovL2RlYi5ub2Rlc291cmNlLmNvbS9ub2RlX3t7IE5vZGVWZXJzaW9uIH19Lnggbm9kaXN0cm8gbWFpblwiID4gL2V0Yy9hcHQvc291cmNlcy5saXN0LmQvbm9kZXNvdXJjZS5saXN0JyxcbiAgICAgICAgICAgICAgICAgICAgJ2FwdC1nZXQgLXEgdXBkYXRlICYmIERFQklBTl9GUk9OVEVORD1ub25pbnRlcmFjdGl2ZSBhcHQtZ2V0IGluc3RhbGwgLXkgLXEgbm9kZWpzJyxcbiAgICAgICAgICAgICAgICAgICAgJ25wbSBpbnN0YWxsIC1nIG5wbUBsYXRlc3QnLFxuICAgICAgICAgICAgICAgICAgICAnZWNobyBcIk5vZGUgYW5kIG5wbSBpbnN0YWxsZWQuIENoZWNraW5nIGNvbmZpZ3VyYXRpb25cIicsXG4gICAgICAgICAgICAgICAgICAgICdub2RlIC12JyxcbiAgICAgICAgICAgICAgICAgICAgJ25wbSAtdicsXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdhd3M6cnVuU2hlbGxTY3JpcHQnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdJbnN0YWxsRG9ja2VyQXB0JyxcbiAgICAgICAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgICAgICAgIHJ1bkNvbW1hbmQ6IFtcbiAgICAgICAgICAgICAgICAgICAgJyMhL2Jpbi9iYXNoJyxcbiAgICAgICAgICAgICAgICAgICAgJ2N1cmwgLWZzU0wgaHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L3VidW50dS9ncGcgfCBncGcgLS1kZWFybW9yIC1vIC91c3Ivc2hhcmUva2V5cmluZ3MvZG9ja2VyLWFyY2hpdmUta2V5cmluZy5ncGcnLFxuICAgICAgICAgICAgICAgICAgICAnZWNobyBcImRlYiBbc2lnbmVkLWJ5PS91c3Ivc2hhcmUva2V5cmluZ3MvZG9ja2VyLWFyY2hpdmUta2V5cmluZy5ncGddIGh0dHBzOi8vZG93bmxvYWQuZG9ja2VyLmNvbS9saW51eC91YnVudHUgJChsc2JfcmVsZWFzZSAtLWNvZGVuYW1lIC0tc2hvcnQpIHN0YWJsZVwiID4gL2V0Yy9hcHQvc291cmNlcy5saXN0LmQvZG9ja2VyLmxpc3QnLFxuICAgICAgICAgICAgICAgICAgICAnYXB0LWdldCAtcSB1cGRhdGUgJiYgREVCSUFOX0ZST05URU5EPW5vbmludGVyYWN0aXZlIGFwdC1nZXQgaW5zdGFsbCAteSAtcSBkb2NrZXItY2UgZG9ja2VyLWNlLWNsaSBjb250YWluZXJkLmlvJyxcbiAgICAgICAgICAgICAgICAgICAgYHN5c3RlbWN0bCByZXN0YXJ0IGNvZGUtc2VydmVyQCR7dnNDb2RlVXNlcn0uc2VydmljZWAsXG4gICAgICAgICAgICAgICAgICAgICdzeXN0ZW1jdGwgc3RhcnQgZG9ja2VyLnNlcnZpY2UnLFxuICAgICAgICAgICAgICAgICAgICAnZWNobyBcIkRvY2tlciBpbnN0YWxsZWQuIENoZWNraW5nIGNvbmZpZ3VyYXRpb25cIicsXG4gICAgICAgICAgICAgICAgICAgICdkb2NrZXIgLS12ZXJzaW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ3N5c3RlbWN0bCBzdGF0dXMgZG9ja2VyLnNlcnZpY2UnLFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAnYXdzOnJ1blNoZWxsU2NyaXB0JyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnSW5zdGFsbEdpdEFwdCcsXG4gICAgICAgICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICAgICAgICBydW5Db21tYW5kOiBbXG4gICAgICAgICAgICAgICAgICAgICcjIS9iaW4vYmFzaCcsXG4gICAgICAgICAgICAgICAgICAgICdhZGQtYXB0LXJlcG9zaXRvcnkgcHBhOmdpdC1jb3JlL3BwYScsXG4gICAgICAgICAgICAgICAgICAgICdhcHQtZ2V0IC1xIHVwZGF0ZSAmJiBERUJJQU5fRlJPTlRFTkQ9bm9uaW50ZXJhY3RpdmUgYXB0LWdldCBpbnN0YWxsIC15IC1xIGdpdCcsXG4gICAgICAgICAgICAgICAgICAgIGBzdWRvIC11ICR7dnNDb2RlVXNlcn0gZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwiJHt2c0NvZGVVc2VyfUBleGFtcGxlLmNvbVwiYCxcbiAgICAgICAgICAgICAgICAgICAgYHN1ZG8gLXUgJHt2c0NvZGVVc2VyfSBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIldvcmtzaG9wICR7dnNDb2RlVXNlcn1cImAsXG4gICAgICAgICAgICAgICAgICAgIGBzdWRvIC11ICR7dnNDb2RlVXNlcn0gZ2l0IGNvbmZpZyAtLWdsb2JhbCBpbml0LmRlZmF1bHRCcmFuY2ggXCJtYWluXCJgLFxuICAgICAgICAgICAgICAgICAgICAnZWNobyBcIkdpdCBpbnN0YWxsZWQuIENoZWNraW5nIGNvbmZpZ3VyYXRpb25cIicsXG4gICAgICAgICAgICAgICAgICAgICdnaXQgLS12ZXJzaW9uJyxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogJ2F3czpydW5TaGVsbFNjcmlwdCcsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0luc3RhbGxQeXRob25BcHQnLFxuICAgICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgICAgcnVuQ29tbWFuZDogW1xuICAgICAgICAgICAgICAgICAgICAvLyBVYnVudHUgMjIgZGVmYXVsdCBpcyBQeXRob24gMy4xMFxuICAgICAgICAgICAgICAgICAgICAvLyBVYnVudHUgMjQgZGVmYXVsdCBpcyBQeXRob24gMy4xMlxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZGVmYXVsdCBpbnN0YWxsZWQgUHl0aG9uIHZlcnNpb24gd2lsbCBtYXAgdG8gUHl0aG9uM1xuICAgICAgICAgICAgICAgICAgICAnIyEvYmluL2Jhc2gnLFxuICAgICAgICAgICAgICAgICAgICAnYXB0LWdldCAtcSB1cGRhdGUgJiYgREVCSUFOX0ZST05URU5EPW5vbmludGVyYWN0aXZlIGFwdC1nZXQgaW5zdGFsbCAteSAtcSBweXRob24zLXBpcCBweXRob24zLXZlbnYgcHl0aG9uMy1ib3RvMyBweXRob24zLXB5dGVzdCcsXG4gICAgICAgICAgICAgICAgICAgIGBlY2hvICdhbGlhcyBweXRlc3Q9cHl0ZXN0LTMnID4+IC9ob21lLyR7dnNDb2RlVXNlcn0vLmJhc2hyY2AsXG4gICAgICAgICAgICAgICAgICAgIGBzeXN0ZW1jdGwgcmVzdGFydCBjb2RlLXNlcnZlckAke3ZzQ29kZVVzZXJ9LnNlcnZpY2VgLFxuICAgICAgICAgICAgICAgICAgICAnc3lzdGVtY3RsIHN0YXJ0IG11bHRpcGF0aGQuc2VydmljZSBwYWNrYWdla2l0LnNlcnZpY2UnLFxuICAgICAgICAgICAgICAgICAgICAnc3lzdGVtY3RsIHJlc3RhcnQgdW5hdHRlbmRlZC11cGdyYWRlcy5zZXJ2aWNlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VjaG8gXCJQeXRob24gYW5kIFBpcCBpbnN0YWxsZWQuIENoZWNraW5nIGNvbmZpZ3VyYXRpb25cIicsXG4gICAgICAgICAgICAgICAgICAgICdweXRob24zIC0tdmVyc2lvbicsXG4gICAgICAgICAgICAgICAgICAgICdwaXAzIC0tdmVyc2lvbicsXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdhd3M6cnVuU2hlbGxTY3JpcHQnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdJbnN0YWxsQVdTQ0xJJyxcbiAgICAgICAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgICAgICAgIHJ1bkNvbW1hbmQ6IFtcbiAgICAgICAgICAgICAgICAgICAgJyMhL2Jpbi9iYXNoJyxcbiAgICAgICAgICAgICAgICAgICAgJ2N1cmwgLWZzU0wgaHR0cHM6Ly9hd3NjbGkuYW1hem9uYXdzLmNvbS9hd3NjbGktZXhlLWxpbnV4LSQodW5hbWUgLW0pLnppcCAtbyAvdG1wL2F3cy1jbGkuemlwJyxcbiAgICAgICAgICAgICAgICAgICAgJ3VuemlwIC1xIC1kIC90bXAgL3RtcC9hd3MtY2xpLnppcCcsXG4gICAgICAgICAgICAgICAgICAgICdzdWRvIC90bXAvYXdzL2luc3RhbGwnLFxuICAgICAgICAgICAgICAgICAgICAncm0gLXJmIC90bXAvYXdzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VjaG8gXCJBV1MgQ0xJIGluc3RhbGxlZC4gQ2hlY2tpbmcgY29uZmlndXJhdGlvblwiJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F3cyAtLXZlcnNpb24nLFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAnYXdzOnJ1blNoZWxsU2NyaXB0JyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQ29uZmlndXJlQ29kZVNlcnZlcicsXG4gICAgICAgICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICAgICAgICBydW5Db21tYW5kOiBbXG4gICAgICAgICAgICAgICAgICAgICcjIS9iaW4vYmFzaCcsXG4gICAgICAgICAgICAgICAgICAgIGBleHBvcnQgSE9NRT0vaG9tZS8ke3ZzQ29kZVVzZXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgJ2N1cmwgLWZzU0wgaHR0cHM6Ly9jb2RlLXNlcnZlci5kZXYvaW5zdGFsbC5zaCB8IGJhc2ggLXMgLS0gMj4mMScsXG4gICAgICAgICAgICAgICAgICAgIGBzeXN0ZW1jdGwgZW5hYmxlIC0tbm93IGNvZGUtc2VydmVyQCR7dnNDb2RlVXNlcn0gMj4mMWAsXG4gICAgICAgICAgICAgICAgICAgIGB0ZWUgL2V0Yy9uZ2lueC9jb25mLmQvY29kZS1zZXJ2ZXIuY29uZiA8PEVPRlxuc2VydmVyIHtcbiAgICBsaXN0ZW4gODA7XG4gICAgbGlzdGVuIFs6Ol06ODA7XG4gICAgIyBzZXJ2ZXJfbmFtZSBkaXN0cmlidXRpb24uZGlzdHJpYnV0aW9uRG9tYWluTmFtZTtcbiAgICBzZXJ2ZXJfbmFtZSAqLmNsb3VkZnJvbnQubmV0O1xuICAgIGxvY2F0aW9uIC8ge1xuICAgICAgcHJveHlfcGFzcyBodHRwOi8vbG9jYWxob3N0OjgwODAvO1xuICAgICAgcHJveHlfc2V0X2hlYWRlciBIb3N0IFxcXFwkaG9zdDtcbiAgICAgIHByb3h5X3NldF9oZWFkZXIgVXBncmFkZSBcXFxcJGh0dHBfdXBncmFkZTtcbiAgICAgIHByb3h5X3NldF9oZWFkZXIgQ29ubmVjdGlvbiB1cGdyYWRlO1xuICAgICAgcHJveHlfc2V0X2hlYWRlciBBY2NlcHQtRW5jb2RpbmcgZ3ppcDtcbiAgICB9XG4gICAgbG9jYXRpb24gLyR7ZGV2U2VydmVyQmFzZVBhdGh9IHtcbiAgICAgIHByb3h5X3Bhc3MgaHR0cDovL2xvY2FsaG9zdDoke2RldlNlcnZlclBvcnR9LyR7ZGV2U2VydmVyQmFzZVBhdGh9O1xuICAgICAgcHJveHlfc2V0X2hlYWRlciBIb3N0IFxcXFwkaG9zdDtcbiAgICAgIHByb3h5X3NldF9oZWFkZXIgVXBncmFkZSBcXFxcJGh0dHBfdXBncmFkZTtcbiAgICAgIHByb3h5X3NldF9oZWFkZXIgQ29ubmVjdGlvbiB1cGdyYWRlO1xuICAgICAgcHJveHlfc2V0X2hlYWRlciBBY2NlcHQtRW5jb2RpbmcgZ3ppcDtcbiAgICB9XG59XG5FT0ZgLFxuICAgICAgICAgICAgICAgICAgICBgbWtkaXIgLXAgL2hvbWUvJHt2c0NvZGVVc2VyfS8uY29uZmlnL2NvZGUtc2VydmVyYCxcbiAgICAgICAgICAgICAgICAgICAgYHRlZSAvaG9tZS8ke3ZzQ29kZVVzZXJ9Ly5jb25maWcvY29kZS1zZXJ2ZXIvY29uZmlnLnlhbWwgPDxFT0ZcbmNlcnQ6IGZhbHNlXG5hdXRoOiBwYXNzd29yZFxuaGFzaGVkLXBhc3N3b3JkOiBcIiQoZWNobyAtbiB7eyBWU0NvZGVQYXNzd29yZCB9fSB8IGFyZ29uMiAkKG9wZW5zc2wgcmFuZCAtYmFzZTY0IDEyKSAtZSlcIlxuRU9GYCxcbiAgICAgICAgICAgICAgICAgICAgYG1rZGlyIC1wIC9ob21lLyR7dnNDb2RlVXNlcn0vLmxvY2FsL3NoYXJlL2NvZGUtc2VydmVyL1VzZXIvYCxcbiAgICAgICAgICAgICAgICAgICAgYHRvdWNoIC9ob21lLyR7dnNDb2RlVXNlcn0vLmh1c2hsb2dpbmAsXG4gICAgICAgICAgICAgICAgICAgIGBta2RpciAtcCAke2hvbWVGb2xkZXJ9ICYmIGNob3duIC1SICR7dnNDb2RlVXNlcn06JHt2c0NvZGVVc2VyfSAke2hvbWVGb2xkZXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgYHRlZSAvaG9tZS8ke3ZzQ29kZVVzZXJ9Ly5sb2NhbC9zaGFyZS9jb2RlLXNlcnZlci9Vc2VyL3NldHRpbmdzLmpzb24gPDxFT0ZcbntcbiAgXCJleHRlbnNpb25zLmF1dG9VcGRhdGVcIjogZmFsc2UsXG4gIFwiZXh0ZW5zaW9ucy5hdXRvQ2hlY2tVcGRhdGVzXCI6IGZhbHNlLFxuICBcInRlbGVtZXRyeS50ZWxlbWV0cnlMZXZlbFwiOiBcIm9mZlwiLFxuICBcInNlY3VyaXR5LndvcmtzcGFjZS50cnVzdC5zdGFydHVwUHJvbXB0XCI6IFwibmV2ZXJcIixcbiAgXCJzZWN1cml0eS53b3Jrc3BhY2UudHJ1c3QuZW5hYmxlZFwiOiBmYWxzZSxcbiAgXCJzZWN1cml0eS53b3Jrc3BhY2UudHJ1c3QuYmFubmVyXCI6IFwibmV2ZXJcIixcbiAgXCJzZWN1cml0eS53b3Jrc3BhY2UudHJ1c3QuZW1wdHlXaW5kb3dcIjogZmFsc2UsXG4gIFwicHl0aG9uLnRlc3RpbmcucHl0ZXN0RW5hYmxlZFwiOiB0cnVlLFxuICBcImF1dG8tcnVuLWNvbW1hbmQucnVsZXNcIjogW1xuICAgIHtcbiAgICAgIFwiY29tbWFuZFwiOiBcIndvcmtiZW5jaC5hY3Rpb24udGVybWluYWwubmV3XCJcbiAgICB9XG4gIF1cbn1cbkVPRmAsXG4gICAgICAgICAgICAgICAgICAgIGBjaG93biAtUiAke3ZzQ29kZVVzZXJ9OiR7dnNDb2RlVXNlcn0gL2hvbWUvJHt2c0NvZGVVc2VyfWAsXG4gICAgICAgICAgICAgICAgICAgIGBzeXN0ZW1jdGwgcmVzdGFydCBjb2RlLXNlcnZlckAke3ZzQ29kZVVzZXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgJ3N5c3RlbWN0bCByZXN0YXJ0IG5naW54JyxcbiAgICAgICAgICAgICAgICAgICAgYHN1ZG8gLXUgJHt2c0NvZGVVc2VyfSAtLWxvZ2luIGNvZGUtc2VydmVyIC0taW5zdGFsbC1leHRlbnNpb24gQW1hem9uV2ViU2VydmljZXMuYXdzLXRvb2xraXQtdnNjb2RlIC0tZm9yY2VgLFxuICAgICAgICAgICAgICAgICAgICBgc3VkbyAtdSAke3ZzQ29kZVVzZXJ9IC0tbG9naW4gY29kZS1zZXJ2ZXIgLS1pbnN0YWxsLWV4dGVuc2lvbiBBbWF6b25XZWJTZXJ2aWNlcy5hbWF6b24tcS12c2NvZGUgLS1mb3JjZWAsXG4gICAgICAgICAgICAgICAgICAgIGBzdWRvIC11ICR7dnNDb2RlVXNlcn0gLS1sb2dpbiBjb2RlLXNlcnZlciAtLWluc3RhbGwtZXh0ZW5zaW9uIHN5bmVkcmEuYXV0by1ydW4tY29tbWFuZCAtLWZvcmNlYCxcbiAgICAgICAgICAgICAgICAgICAgYHN1ZG8gLXUgJHt2c0NvZGVVc2VyfSAtLWxvZ2luIGNvZGUtc2VydmVyIC0taW5zdGFsbC1leHRlbnNpb24gdnNjamF2YS52c2NvZGUtamF2YS1wYWNrIC0tZm9yY2VgLFxuICAgICAgICAgICAgICAgICAgICBgc3VkbyAtdSAke3ZzQ29kZVVzZXJ9IC0tbG9naW4gY29kZS1zZXJ2ZXIgLS1pbnN0YWxsLWV4dGVuc2lvbiBtcy12c2NvZGUubGl2ZS1zZXJ2ZXIgLS1mb3JjZWAsXG4gICAgICAgICAgICAgICAgICAgIGBjaG93biAtUiAke3ZzQ29kZVVzZXJ9OiR7dnNDb2RlVXNlcn0gL2hvbWUvJHt2c0NvZGVVc2VyfWAsXG4gICAgICAgICAgICAgICAgICAgICdlY2hvIFwiTmdpbnggaW5zdGFsbGVkLiBDaGVja2luZyBjb25maWd1cmF0aW9uXCInLFxuICAgICAgICAgICAgICAgICAgICAnbmdpbnggLXQgMj4mMScsXG4gICAgICAgICAgICAgICAgICAgICdzeXN0ZW1jdGwgc3RhdHVzIG5naW54JyxcbiAgICAgICAgICAgICAgICAgICAgJ2VjaG8gXCJDb2RlU2VydmVyIGluc3RhbGxlZC4gQ2hlY2tpbmcgY29uZmlndXJhdGlvblwiJyxcbiAgICAgICAgICAgICAgICAgICAgJ2NvZGUtc2VydmVyIC12JyxcbiAgICAgICAgICAgICAgICAgICAgYHN5c3RlbWN0bCBzdGF0dXMgY29kZS1zZXJ2ZXJAJHt2c0NvZGVVc2VyfWAsXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdhd3M6cnVuU2hlbGxTY3JpcHQnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdVcGRhdGVQcm9maWxlJyxcbiAgICAgICAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgICAgICAgIHJ1bkNvbW1hbmQ6IFtcbiAgICAgICAgICAgICAgICAgICAgJyMhL2Jpbi9iYXNoJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VjaG8gTEFORz1lbl9VUy51dGYtOCA+PiAvZXRjL2Vudmlyb25tZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2VjaG8gTENfQUxMPWVuX1VTLlVURi04ID4+IC9ldGMvZW52aXJvbm1lbnQnLFxuICAgICAgICAgICAgICAgICAgICBgZWNobyAnUEFUSD0kUEFUSDovaG9tZS8ke3ZzQ29kZVVzZXJ9Ly5sb2NhbC9iaW4nID4+IC9ob21lLyR7dnNDb2RlVXNlcn0vLmJhc2hyY2AsXG4gICAgICAgICAgICAgICAgICAgIGBlY2hvICdleHBvcnQgUEFUSCcgPj4gL2hvbWUvJHt2c0NvZGVVc2VyfS8uYmFzaHJjYCxcbiAgICAgICAgICAgICAgICAgICAgYGVjaG8gJ2V4cG9ydCBBV1NfUkVHSU9OPSR7U3RhY2sub2Yoc2NvcGUpLnJlZ2lvbn0nID4+IC9ob21lLyR7dnNDb2RlVXNlcn0vLmJhc2hyY2AsXG4gICAgICAgICAgICAgICAgICAgIGBlY2hvICdleHBvcnQgQVdTX0FDQ09VTlRJRD0ke1N0YWNrLm9mKHNjb3BlKS5hY2NvdW50fScgPj4gL2hvbWUvJHt2c0NvZGVVc2VyfS8uYmFzaHJjYCxcbiAgICAgICAgICAgICAgICAgICAgYGVjaG8gJ2V4cG9ydCBORVhUX1RFTEVNRVRSWV9ESVNBQkxFRD0xJyA+PiAvaG9tZS8ke3ZzQ29kZVVzZXJ9Ly5iYXNocmNgLFxuICAgICAgICAgICAgICAgICAgICBgZWNobyBcImV4cG9ydCBQUzE9J1xcXFxbXFxcXDAzM1swMTszMm1cXFxcXVxcXFx1OlxcXFxbXFxcXDAzM1swMTszNG1cXFxcXVxcXFx3XFxcXFtcXFxcMDMzWzAwbVxcXFxdXFxcXCQgJ1wiID4+IC9ob21lLyR7dnNDb2RlVXNlcn0vLmJhc2hyY2AsXG4gICAgICAgICAgICAgICAgICAgIGBjaG93biAtUiAke3ZzQ29kZVVzZXJ9OiR7dnNDb2RlVXNlcn0gL2hvbWUvJHt2c0NvZGVVc2VyfWAsXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdhd3M6cnVuU2hlbGxTY3JpcHQnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdJbnN0YWxsQ0RLJyxcbiAgICAgICAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgICAgICAgIHJ1bkNvbW1hbmQ6IFtcbiAgICAgICAgICAgICAgICAgICAgJyMhL2Jpbi9iYXNoJyxcbiAgICAgICAgICAgICAgICAgICAgJ25wbSBpbnN0YWxsIC1nIGF3cy1jZGsnLFxuICAgICAgICAgICAgICAgICAgICAnZWNobyBcIkFXUyBDREsgaW5zdGFsbGVkLiBDaGVja2luZyBjb25maWd1cmF0aW9uXCInLFxuICAgICAgICAgICAgICAgICAgICAnY2RrIC0tdmVyc2lvbicsXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTGludXhGbGF2b3JUeXBlLkFNQVpPTl9MSU5VWF8yMDIzOlxuICAgICAgICBzc21Eb2N1bWVudCA9IG5ldyBzc20uQ2ZuRG9jdW1lbnQoc2NvcGUsICdzc20tZG9jdW1lbnQtYWwyMDIzJywge1xuICAgICAgICAgIG5hbWU6IGB2c2NvZGUtc2VydmVyLWFsMjAyMy0ke1N0YWNrLm9mKHNjb3BlKS5zdGFja05hbWV9YCxcbiAgICAgICAgICBkb2N1bWVudFR5cGU6ICdDb21tYW5kJyxcbiAgICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICBzY2hlbWFWZXJzaW9uOiAnMi4yJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQm9vdHN0cmFwIFZTQ29kZSBjb2RlLXNlcnZlciBpbnN0YW5jZScsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgIFZTQ29kZVBhc3N3b3JkOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogU3RhY2sub2Yoc2NvcGUpLnN0YWNrSWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIE5vZGVWZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogJzIwJyxcbiAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbJzIyJywgJzIwJywgJzE4J10sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIERvdE5ldFZlcnNpb246IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAnOC4wJyxcbiAgICAgICAgICAgICAgICBhbGxvd2VkVmFsdWVzOiBbJzguMCcsICc3LjAnXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBhbGwgbWFpblN0ZXBzIHNjcmlwdHMgYXJlIGluIGluIC92YXIvbGliL2FtYXpvbi9zc20vPGluc3RhbmNlaWQ+L2RvY3VtZW50L29yY2hlc3RyYXRpb24vPHV1aWQ+LzxTdGVwTmFtZT4vX3NjcmlwdC5zaFxuICAgICAgICAgICAgbWFpblN0ZXBzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdhd3M6Y29uZmlndXJlUGFja2FnZScsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0luc3RhbGxDbG91ZFdhdGNoQWdlbnQnLFxuICAgICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgICAgbmFtZTogJ0FtYXpvbkNsb3VkV2F0Y2hBZ2VudCcsXG4gICAgICAgICAgICAgICAgICBhY3Rpb246ICdJbnN0YWxsJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAnYXdzOnJ1bkRvY3VtZW50JyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQ29uZmlndXJlQ2xvdWRXYXRjaEFnZW50JyxcbiAgICAgICAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50VHlwZTogJ1NTTURvY3VtZW50JyxcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50UGF0aDogJ0FtYXpvbkNsb3VkV2F0Y2gtTWFuYWdlQWdlbnQnLFxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnRQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ2NvbmZpZ3VyZScsXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6ICdlYzInLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25hbENvbmZpZ3VyYXRpb25Tb3VyY2U6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxSZXN0YXJ0OiAneWVzJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogJ2F3czpydW5TaGVsbFNjcmlwdCcsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0luc3RhbGxCYXNlUGFja2FnZXNEbmYnLFxuICAgICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgICAgcnVuQ29tbWFuZDogW1xuICAgICAgICAgICAgICAgICAgICAnIyEvYmluL2Jhc2gnLFxuICAgICAgICAgICAgICAgICAgICAnZG5mIGluc3RhbGwgLXkgLS1hbGxvd2VyYXNpbmcgd2hvaXMgYXJnb24yIHVuemlwIG5naW54IGN1cmwgZ251cGcgb3BlbnNzbCcsXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdhd3M6cnVuU2hlbGxTY3JpcHQnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdBZGRVc2VyRG5mJyxcbiAgICAgICAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgICAgICAgIHJ1bkNvbW1hbmQ6IFtcbiAgICAgICAgICAgICAgICAgICAgJyMhL2Jpbi9iYXNoJyxcbiAgICAgICAgICAgICAgICAgICAgYGVjaG8gJ0FkZGluZyB1c2VyOiAke3ZzQ29kZVVzZXJ9J2AsXG4gICAgICAgICAgICAgICAgICAgIGBhZGR1c2VyIC1jICcnICR7dnNDb2RlVXNlcn1gLFxuICAgICAgICAgICAgICAgICAgICBgcGFzc3dkIC1sICR7dnNDb2RlVXNlcn1gLFxuICAgICAgICAgICAgICAgICAgICBgZWNobyBcIiR7dnNDb2RlVXNlcn06e3sgVlNDb2RlUGFzc3dvcmQgfX1cIiB8IGNocGFzc3dkYCxcbiAgICAgICAgICAgICAgICAgICAgYHVzZXJtb2QgLWFHIHdoZWVsICR7dnNDb2RlVXNlcn1gLFxuICAgICAgICAgICAgICAgICAgICAnZWNobyBcIlVzZXIgYWRkZWQuIENoZWNraW5nIGNvbmZpZ3VyYXRpb25cIicsXG4gICAgICAgICAgICAgICAgICAgIGBnZXRlbnQgcGFzc3dkICR7dnNDb2RlVXNlcn1gLFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAnYXdzOnJ1blNoZWxsU2NyaXB0JyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnSW5zdGFsbE5vZGVEbmYnLFxuICAgICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgICAgcnVuQ29tbWFuZDogW1xuICAgICAgICAgICAgICAgICAgICAnIyEvYmluL2Jhc2gnLFxuICAgICAgICAgICAgICAgICAgICAnZG5mIGluc3RhbGwgLXkgbm9kZWpzMjAgbnBtJyxcbiAgICAgICAgICAgICAgICAgICAgJ2xuIC1zIC1mIC91c3IvYmluL25vZGUtMjAgL3Vzci9iaW4vbm9kZScsXG4gICAgICAgICAgICAgICAgICAgICducG0gaW5zdGFsbCAtZyBucG1AbGF0ZXN0JyxcbiAgICAgICAgICAgICAgICAgICAgJ2VjaG8gXCJOb2RlIGFuZCBucG0gaW5zdGFsbGVkLiBDaGVja2luZyBjb25maWd1cmF0aW9uXCInLFxuICAgICAgICAgICAgICAgICAgICAnbm9kZSAtdicsXG4gICAgICAgICAgICAgICAgICAgICducG0gLXYnLFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAnYXdzOnJ1blNoZWxsU2NyaXB0JyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnSW5zdGFsbERvY2tlckRuZicsXG4gICAgICAgICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICAgICAgICBydW5Db21tYW5kOiBbXG4gICAgICAgICAgICAgICAgICAgICcjIS9iaW4vYmFzaCcsXG4gICAgICAgICAgICAgICAgICAgICdkbmYgaW5zdGFsbCAteSBkb2NrZXInLFxuICAgICAgICAgICAgICAgICAgICBgdXNlcm1vZCAtYUcgZG9ja2VyICR7dnNDb2RlVXNlcn1gLFxuICAgICAgICAgICAgICAgICAgICBgc3lzdGVtY3RsIHJlc3RhcnQgY29kZS1zZXJ2ZXJAJHt2c0NvZGVVc2VyfS5zZXJ2aWNlYCxcbiAgICAgICAgICAgICAgICAgICAgJ3N5c3RlbWN0bCBzdGFydCBkb2NrZXIuc2VydmljZScsXG4gICAgICAgICAgICAgICAgICAgICdlY2hvIFwiRG9ja2VyIGluc3RhbGxlZC4gQ2hlY2tpbmcgY29uZmlndXJhdGlvblwiJyxcbiAgICAgICAgICAgICAgICAgICAgJ2RvY2tlciAtLXZlcnNpb24nLFxuICAgICAgICAgICAgICAgICAgICAnc3lzdGVtY3RsIHN0YXR1cyBkb2NrZXIuc2VydmljZScsXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdhd3M6cnVuU2hlbGxTY3JpcHQnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdJbnN0YWxsR2l0RG5mJyxcbiAgICAgICAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgICAgICAgIHJ1bkNvbW1hbmQ6IFtcbiAgICAgICAgICAgICAgICAgICAgJyMhL2Jpbi9iYXNoJyxcbiAgICAgICAgICAgICAgICAgICAgJ2RuZiBpbnN0YWxsIC15IGdpdCcsXG4gICAgICAgICAgICAgICAgICAgIGBzdWRvIC11ICR7dnNDb2RlVXNlcn0gZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwiJHt2c0NvZGVVc2VyfUBleGFtcGxlLmNvbVwiYCxcbiAgICAgICAgICAgICAgICAgICAgYHN1ZG8gLXUgJHt2c0NvZGVVc2VyfSBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIldvcmtzaG9wICR7dnNDb2RlVXNlcn1cImAsXG4gICAgICAgICAgICAgICAgICAgIGBzdWRvIC11ICR7dnNDb2RlVXNlcn0gZ2l0IGNvbmZpZyAtLWdsb2JhbCBpbml0LmRlZmF1bHRCcmFuY2ggXCJtYWluXCJgLFxuICAgICAgICAgICAgICAgICAgICAnZWNobyBcIkdpdCBpbnN0YWxsZWQuIENoZWNraW5nIGNvbmZpZ3VyYXRpb25cIicsXG4gICAgICAgICAgICAgICAgICAgICdnaXQgLS12ZXJzaW9uJyxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogJ2F3czpydW5TaGVsbFNjcmlwdCcsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0luc3RhbGxQeXRob25EbmYnLFxuICAgICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgICAgcnVuQ29tbWFuZDogW1xuICAgICAgICAgICAgICAgICAgICAvLyBBTDIwMjMgY3VycmVudGx5IHNoaXBzIHdpdGggUHl0aG9uIDMuOSBwcmVpbnN0YWxsZWQsIGJ1dCAzLjExIGlzIGF2YWlsYWJsZSBpbiB0aGUgcmVwb3NpdG9yeVxuICAgICAgICAgICAgICAgICAgICAvLyBJbnN0YWxsIDMuMTEgYWxvbmdzaWRlIDMuOSBhbmQgc2V0dXAgc29tZSBhbGlhcyBzbyB0aGF0IDMuMTEgaXMgbG9hZGVkIHdoZW4gcGFydGljaXBhbnQgcnVucyBQeXRob24zXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIFB5dGhvbiAzLjEyIGJlY29tZSBhdmFpbGFibGUsIHVwZGF0ZSBiZWxvd1xuICAgICAgICAgICAgICAgICAgICAnIyEvYmluL2Jhc2gnLFxuICAgICAgICAgICAgICAgICAgICAnZG5mIGluc3RhbGwgLXkgcHl0aG9uMy4xMSBweXRob24zLjExLXBpcCBweXRob24zLXZpcnR1YWxlbnYgcHl0aG9uMy1weXRlc3QgcHl0aG9uMy1ib3RvMycsXG4gICAgICAgICAgICAgICAgICAgIGBlY2hvICdhbGlhcyBweXRlc3Q9cHl0ZXN0LTMnID4+IC9ob21lLyR7dnNDb2RlVXNlcn0vLmJhc2hyY2AsXG4gICAgICAgICAgICAgICAgICAgIGBlY2hvICdhbGlhcyBweXRob24zPXB5dGhvbjMuMTEnID4+IC9ob21lLyR7dnNDb2RlVXNlcn0vLmJhc2hyY2AsXG4gICAgICAgICAgICAgICAgICAgIGBlY2hvICdhbGlhcyBwaXAzPXBpcDMuMTEnID4+IC9ob21lLyR7dnNDb2RlVXNlcn0vLmJhc2hyY2AsXG4gICAgICAgICAgICAgICAgICAgIFwiZWNobyAnYWxpYXM9cHl0aG9uMz1weXRob24zLjExJyA+PiB+Ly5iYXNocmNcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlY2hvICdhbGlhcyBwaXAzPXBpcDMuMTEnID4+IH4vLmJhc2hyY1wiLFxuICAgICAgICAgICAgICAgICAgICAncHl0aG9uMy4xMSAtbSBwaXAgaW5zdGFsbCAtLXVwZ3JhZGUgcGlwIDI+JjEnLFxuICAgICAgICAgICAgICAgICAgICAnZWNobyBcIlB5dGhvbiBhbmQgUGlwIGluc3RhbGxlZC4gQ2hlY2tpbmcgY29uZmlndXJhdGlvblwiJyxcbiAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbjMuMTEgLS12ZXJzaW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbjMuMTEgLW0gcGlwIC0tdmVyc2lvbiAyPiYxJyxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgLy8gYWRkIGdvLCBkb3RuZXRcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogJ2F3czpydW5TaGVsbFNjcmlwdCcsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0luc3RhbGxBV1NDTEknLFxuICAgICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgICAgcnVuQ29tbWFuZDogW1xuICAgICAgICAgICAgICAgICAgICAnIyEvYmluL2Jhc2gnLFxuICAgICAgICAgICAgICAgICAgICAnY3VybCAtZnNTTCBodHRwczovL2F3c2NsaS5hbWF6b25hd3MuY29tL2F3c2NsaS1leGUtbGludXgtJCh1bmFtZSAtbSkuemlwIC1vIC90bXAvYXdzLWNsaS56aXAnLFxuICAgICAgICAgICAgICAgICAgICAndW56aXAgLXEgLWQgL3RtcCAvdG1wL2F3cy1jbGkuemlwJyxcbiAgICAgICAgICAgICAgICAgICAgJ3N1ZG8gL3RtcC9hd3MvaW5zdGFsbCcsXG4gICAgICAgICAgICAgICAgICAgICdybSAtcmYgL3RtcC9hd3MnLFxuICAgICAgICAgICAgICAgICAgICAnZWNobyBcIkFXUyBDTEkgaW5zdGFsbGVkLiBDaGVja2luZyBjb25maWd1cmF0aW9uXCInLFxuICAgICAgICAgICAgICAgICAgICAnYXdzIC0tdmVyc2lvbicsXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdhd3M6cnVuU2hlbGxTY3JpcHQnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdDb25maWd1cmVDb2RlU2VydmVyJyxcbiAgICAgICAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgICAgICAgIHJ1bkNvbW1hbmQ6IFtcbiAgICAgICAgICAgICAgICAgICAgJyMhL2Jpbi9iYXNoJyxcbiAgICAgICAgICAgICAgICAgICAgYGV4cG9ydCBIT01FPS9ob21lLyR7dnNDb2RlVXNlcn1gLFxuICAgICAgICAgICAgICAgICAgICAnY3VybCAtZnNTTCBodHRwczovL2NvZGUtc2VydmVyLmRldi9pbnN0YWxsLnNoIHwgYmFzaCAtcyAtLSAyPiYxJyxcbiAgICAgICAgICAgICAgICAgICAgYHN5c3RlbWN0bCBlbmFibGUgLS1ub3cgY29kZS1zZXJ2ZXJAJHt2c0NvZGVVc2VyfSAyPiYxYCxcbiAgICAgICAgICAgICAgICAgICAgYHRlZSAvZXRjL25naW54L2NvbmYuZC9jb2RlLXNlcnZlci5jb25mIDw8RU9GXG5zZXJ2ZXIge1xuICAgIGxpc3RlbiA4MDtcbiAgICBsaXN0ZW4gWzo6XTo4MDtcbiAgICAjIHNlcnZlcl9uYW1lIGRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25Eb21haW5OYW1lO1xuICAgIHNlcnZlcl9uYW1lICouY2xvdWRmcm9udC5uZXQ7XG4gICAgbG9jYXRpb24gLyB7XG4gICAgICBwcm94eV9wYXNzIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC87XG4gICAgICBwcm94eV9zZXRfaGVhZGVyIEhvc3QgXFxcXCRob3N0O1xuICAgICAgcHJveHlfc2V0X2hlYWRlciBVcGdyYWRlIFxcXFwkaHR0cF91cGdyYWRlO1xuICAgICAgcHJveHlfc2V0X2hlYWRlciBDb25uZWN0aW9uIHVwZ3JhZGU7XG4gICAgICBwcm94eV9zZXRfaGVhZGVyIEFjY2VwdC1FbmNvZGluZyBnemlwO1xuICAgIH1cbiAgICBsb2NhdGlvbiAvJHtkZXZTZXJ2ZXJCYXNlUGF0aH0ge1xuICAgICAgcHJveHlfcGFzcyBodHRwOi8vbG9jYWxob3N0OiR7ZGV2U2VydmVyUG9ydH0vJHtkZXZTZXJ2ZXJCYXNlUGF0aH07XG4gICAgICBwcm94eV9zZXRfaGVhZGVyIEhvc3QgXFxcXCRob3N0O1xuICAgICAgcHJveHlfc2V0X2hlYWRlciBVcGdyYWRlIFxcXFwkaHR0cF91cGdyYWRlO1xuICAgICAgcHJveHlfc2V0X2hlYWRlciBDb25uZWN0aW9uIHVwZ3JhZGU7XG4gICAgICBwcm94eV9zZXRfaGVhZGVyIEFjY2VwdC1FbmNvZGluZyBnemlwO1xuICAgIH1cbn1cbkVPRmAsXG4gICAgICAgICAgICAgICAgICAgIGBta2RpciAtcCAvaG9tZS8ke3ZzQ29kZVVzZXJ9Ly5jb25maWcvY29kZS1zZXJ2ZXJgLFxuICAgICAgICAgICAgICAgICAgICBgdGVlIC9ob21lLyR7dnNDb2RlVXNlcn0vLmNvbmZpZy9jb2RlLXNlcnZlci9jb25maWcueWFtbCA8PEVPRlxuY2VydDogZmFsc2VcbmF1dGg6IHBhc3N3b3JkXG5oYXNoZWQtcGFzc3dvcmQ6IFwiJChlY2hvIC1uIHt7IFZTQ29kZVBhc3N3b3JkIH19IHwgYXJnb24yICQob3BlbnNzbCByYW5kIC1iYXNlNjQgMTIpIC1lKVwiXG5FT0ZgLFxuICAgICAgICAgICAgICAgICAgICBgbWtkaXIgLXAgL2hvbWUvJHt2c0NvZGVVc2VyfS8ubG9jYWwvc2hhcmUvY29kZS1zZXJ2ZXIvVXNlci9gLFxuICAgICAgICAgICAgICAgICAgICBgdG91Y2ggL2hvbWUvJHt2c0NvZGVVc2VyfS8uaHVzaGxvZ2luYCxcbiAgICAgICAgICAgICAgICAgICAgYG1rZGlyIC1wICR7aG9tZUZvbGRlcn0gJiYgY2hvd24gLVIgJHt2c0NvZGVVc2VyfToke3ZzQ29kZVVzZXJ9ICR7aG9tZUZvbGRlcn1gLFxuICAgICAgICAgICAgICAgICAgICBgdGVlIC9ob21lLyR7dnNDb2RlVXNlcn0vLmxvY2FsL3NoYXJlL2NvZGUtc2VydmVyL1VzZXIvc2V0dGluZ3MuanNvbiA8PEVPRlxue1xuICBcImV4dGVuc2lvbnMuYXV0b1VwZGF0ZVwiOiBmYWxzZSxcbiAgXCJleHRlbnNpb25zLmF1dG9DaGVja1VwZGF0ZXNcIjogZmFsc2UsXG4gIFwidGVsZW1ldHJ5LnRlbGVtZXRyeUxldmVsXCI6IFwib2ZmXCIsXG4gIFwic2VjdXJpdHkud29ya3NwYWNlLnRydXN0LnN0YXJ0dXBQcm9tcHRcIjogXCJuZXZlclwiLFxuICBcInNlY3VyaXR5LndvcmtzcGFjZS50cnVzdC5lbmFibGVkXCI6IGZhbHNlLFxuICBcInNlY3VyaXR5LndvcmtzcGFjZS50cnVzdC5iYW5uZXJcIjogXCJuZXZlclwiLFxuICBcInNlY3VyaXR5LndvcmtzcGFjZS50cnVzdC5lbXB0eVdpbmRvd1wiOiBmYWxzZSxcbiAgXCJweXRob24udGVzdGluZy5weXRlc3RFbmFibGVkXCI6IHRydWUsXG4gIFwiYXV0by1ydW4tY29tbWFuZC5ydWxlc1wiOiBbXG4gICAge1xuICAgICAgXCJjb21tYW5kXCI6IFwid29ya2JlbmNoLmFjdGlvbi50ZXJtaW5hbC5uZXdcIlxuICAgIH1cbiAgXVxufVxuRU9GYCxcbiAgICAgICAgICAgICAgICAgICAgYGNob3duIC1SICR7dnNDb2RlVXNlcn06JHt2c0NvZGVVc2VyfSAvaG9tZS8ke3ZzQ29kZVVzZXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgYHN5c3RlbWN0bCByZXN0YXJ0IGNvZGUtc2VydmVyQCR7dnNDb2RlVXNlcn1gLFxuICAgICAgICAgICAgICAgICAgICAnc3lzdGVtY3RsIHJlc3RhcnQgbmdpbngnLFxuICAgICAgICAgICAgICAgICAgICBgc3VkbyAtdSAke3ZzQ29kZVVzZXJ9IC0tbG9naW4gY29kZS1zZXJ2ZXIgLS1pbnN0YWxsLWV4dGVuc2lvbiBBbWF6b25XZWJTZXJ2aWNlcy5hd3MtdG9vbGtpdC12c2NvZGUgLS1mb3JjZWAsXG4gICAgICAgICAgICAgICAgICAgIGBzdWRvIC11ICR7dnNDb2RlVXNlcn0gLS1sb2dpbiBjb2RlLXNlcnZlciAtLWluc3RhbGwtZXh0ZW5zaW9uIEFtYXpvbldlYlNlcnZpY2VzLmFtYXpvbi1xLXZzY29kZSAtLWZvcmNlYCxcbiAgICAgICAgICAgICAgICAgICAgYHN1ZG8gLXUgJHt2c0NvZGVVc2VyfSAtLWxvZ2luIGNvZGUtc2VydmVyIC0taW5zdGFsbC1leHRlbnNpb24gc3luZWRyYS5hdXRvLXJ1bi1jb21tYW5kIC0tZm9yY2VgLFxuICAgICAgICAgICAgICAgICAgICBgc3VkbyAtdSAke3ZzQ29kZVVzZXJ9IC0tbG9naW4gY29kZS1zZXJ2ZXIgLS1pbnN0YWxsLWV4dGVuc2lvbiB2c2NqYXZhLnZzY29kZS1qYXZhLXBhY2sgLS1mb3JjZWAsXG4gICAgICAgICAgICAgICAgICAgIGBzdWRvIC11ICR7dnNDb2RlVXNlcn0gLS1sb2dpbiBjb2RlLXNlcnZlciAtLWluc3RhbGwtZXh0ZW5zaW9uIG1zLXZzY29kZS5saXZlLXNlcnZlciAtLWZvcmNlYCxcbiAgICAgICAgICAgICAgICAgICAgYGNob3duIC1SICR7dnNDb2RlVXNlcn06JHt2c0NvZGVVc2VyfSAvaG9tZS8ke3ZzQ29kZVVzZXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgJ2VjaG8gXCJOZ2lueCBpbnN0YWxsZWQuIENoZWNraW5nIGNvbmZpZ3VyYXRpb25cIicsXG4gICAgICAgICAgICAgICAgICAgICduZ2lueCAtdCAyPiYxJyxcbiAgICAgICAgICAgICAgICAgICAgJ3N5c3RlbWN0bCBzdGF0dXMgbmdpbngnLFxuICAgICAgICAgICAgICAgICAgICAnZWNobyBcIkNvZGVTZXJ2ZXIgaW5zdGFsbGVkLiBDaGVja2luZyBjb25maWd1cmF0aW9uXCInLFxuICAgICAgICAgICAgICAgICAgICAnY29kZS1zZXJ2ZXIgLXYnLFxuICAgICAgICAgICAgICAgICAgICBgc3lzdGVtY3RsIHN0YXR1cyBjb2RlLXNlcnZlckAke3ZzQ29kZVVzZXJ9YCxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogJ2F3czpydW5TaGVsbFNjcmlwdCcsXG4gICAgICAgICAgICAgICAgbmFtZTogJ1VwZGF0ZVByb2ZpbGUnLFxuICAgICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgICAgcnVuQ29tbWFuZDogW1xuICAgICAgICAgICAgICAgICAgICAnIyEvYmluL2Jhc2gnLFxuICAgICAgICAgICAgICAgICAgICAnZWNobyBMQU5HPWVuX1VTLnV0Zi04ID4+IC9ldGMvZW52aXJvbm1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnZWNobyBMQ19BTEw9ZW5fVVMuVVRGLTggPj4gL2V0Yy9lbnZpcm9ubWVudCcsXG4gICAgICAgICAgICAgICAgICAgIGBlY2hvICdQQVRIPSRQQVRIOi9ob21lLyR7dnNDb2RlVXNlcn0vLmxvY2FsL2JpbicgPj4gL2hvbWUvJHt2c0NvZGVVc2VyfS8uYmFzaHJjYCxcbiAgICAgICAgICAgICAgICAgICAgYGVjaG8gJ2V4cG9ydCBQQVRIJyA+PiAvaG9tZS8ke3ZzQ29kZVVzZXJ9Ly5iYXNocmNgLFxuICAgICAgICAgICAgICAgICAgICBgZWNobyAnZXhwb3J0IEFXU19SRUdJT049JHtTdGFjay5vZihzY29wZSkucmVnaW9ufScgPj4gL2hvbWUvJHt2c0NvZGVVc2VyfS8uYmFzaHJjYCxcbiAgICAgICAgICAgICAgICAgICAgYGVjaG8gJ2V4cG9ydCBBV1NfQUNDT1VOVElEPSR7U3RhY2sub2Yoc2NvcGUpLmFjY291bnR9JyA+PiAvaG9tZS8ke3ZzQ29kZVVzZXJ9Ly5iYXNocmNgLFxuICAgICAgICAgICAgICAgICAgICBgZWNobyAnZXhwb3J0IE5FWFRfVEVMRU1FVFJZX0RJU0FCTEVEPTEnID4+IC9ob21lLyR7dnNDb2RlVXNlcn0vLmJhc2hyY2AsXG4gICAgICAgICAgICAgICAgICAgIGBlY2hvIFwiZXhwb3J0IFBTMT0nXFxcXFtcXFxcMDMzWzAxOzMybVxcXFxdXFxcXHU6XFxcXFtcXFxcMDMzWzAxOzM0bVxcXFxdXFxcXHdcXFxcW1xcXFwwMzNbMDBtXFxcXF1cXFxcJCAnXCIgPj4gL2hvbWUvJHt2c0NvZGVVc2VyfS8uYmFzaHJjYCxcbiAgICAgICAgICAgICAgICAgICAgYGNob3duIC1SICR7dnNDb2RlVXNlcn06JHt2c0NvZGVVc2VyfSAvaG9tZS8ke3ZzQ29kZVVzZXJ9YCxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogJ2F3czpydW5TaGVsbFNjcmlwdCcsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0luc3RhbGxDREsnLFxuICAgICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgICAgcnVuQ29tbWFuZDogW1xuICAgICAgICAgICAgICAgICAgICAnIyEvYmluL2Jhc2gnLFxuICAgICAgICAgICAgICAgICAgICAnbnBtIGluc3RhbGwgLWcgYXdzLWNkaycsXG4gICAgICAgICAgICAgICAgICAgICdlY2hvIFwiQVdTIENESyBpbnN0YWxsZWQuIENoZWNraW5nIGNvbmZpZ3VyYXRpb25cIicsXG4gICAgICAgICAgICAgICAgICAgICdjZGsgLS12ZXJzaW9uJyxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBMaW51eCBmbGF2b3I6ICR7bGludXhGbGF2b3J9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNzbURvY3VtZW50O1xuICB9XG59XG5cbmludGVyZmFjZSBDdXN0b21SZXNvdXJjZUluc3RhbGxlck9wdGlvbnMgZXh0ZW5kcyBJbnN0YWxsZXJPcHRpb25zIHt9XG5cbmNsYXNzIEN1c3RvbVJlc291cmNlSW5zdGFsbGVyIGV4dGVuZHMgSW5zdGFsbGVyIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgb3B0aW9uczogQ3VzdG9tUmVzb3VyY2VJbnN0YWxsZXJPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGNvbnN0IG9uRXZlbnQ6IEZ1bmN0aW9uID0gbmV3IEluc3RhbGxlckZ1bmN0aW9uKFxuICAgICAgc2NvcGUsXG4gICAgICAnSW5zdGFsbGVyT25FdmVudEhhbmRsZXInLFxuICAgICAge1xuICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDMwMCksIC8vIFRPRE8gY29uZmlndXJhYmxlXG4gICAgICAgIG1lbW9yeVNpemU6IDUxMiwgLy8gVE9ETyBjb25maWd1cmFibGVcbiAgICAgIH0sXG4gICAgKTtcbiAgICBOYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICBbb25FdmVudF0sXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU00JyxcbiAgICAgICAgICByZWFzb246XG4gICAgICAgICAgICAnRm9yIHRoaXMgZXZlbnQgaGFuZGxlciB3ZSBkbyBub3QgbmVlZCB0byByZXN0cmljdCBtYW5hZ2VkIHBvbGljaWVzJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUwxJyxcbiAgICAgICAgICByZWFzb246ICdGb3IgdGhpcyBsYW1iZGEgdGhlIGxhdGVzdCBydW50aW1lIGlzIG5vdCBuZWVkZWQnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHRydWUsXG4gICAgKTtcblxuICAgIGNvbnN0IGRvY3VtZW50QXJuID0gQXJuLmZvcm1hdChcbiAgICAgIHtcbiAgICAgICAgc2VydmljZTogJ3NzbScsXG4gICAgICAgIHJlc291cmNlOiAnZG9jdW1lbnQnLFxuICAgICAgICByZXNvdXJjZU5hbWU6IG9wdGlvbnMuZG9jdW1lbnROYW1lLFxuICAgICAgfSxcbiAgICAgIFN0YWNrLm9mKHNjb3BlKSxcbiAgICApO1xuXG4gICAgY29uc3QgY3dNYW5hZ2VBZ2VudEFybiA9IEFybi5mb3JtYXQoXG4gICAgICB7XG4gICAgICAgIHNlcnZpY2U6ICdzc20nLFxuICAgICAgICByZXNvdXJjZTogJ2RvY3VtZW50JyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiAnQW1hem9uQ2xvdWRXYXRjaC1NYW5hZ2VBZ2VudCcsXG4gICAgICB9LFxuICAgICAgU3RhY2sub2Yoc2NvcGUpLFxuICAgICk7XG5cbiAgICBjb25zdCB0YXJnZXRFYzJJbnN0YW5jZUFybiA9IEFybi5mb3JtYXQoXG4gICAgICB7XG4gICAgICAgIHNlcnZpY2U6ICdlYzInLFxuICAgICAgICByZXNvdXJjZTogJ2luc3RhbmNlJyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBvcHRpb25zLmluc3RhbmNlSWQsXG4gICAgICB9LFxuICAgICAgU3RhY2sub2Yoc2NvcGUpLFxuICAgICk7XG5cbiAgICBvbkV2ZW50LmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbJ3NzbTpTZW5kQ29tbWFuZCddLFxuICAgICAgICByZXNvdXJjZXM6IFtkb2N1bWVudEFybiwgY3dNYW5hZ2VBZ2VudEFybiwgdGFyZ2V0RWMySW5zdGFuY2VBcm5dLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IFByb3ZpZGVyKHNjb3BlLCAnSW5zdGFsbGVyUHJvdmlkZXInLCB7XG4gICAgICBvbkV2ZW50SGFuZGxlcjogb25FdmVudCxcbiAgICB9KTtcbiAgICBOYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICBbcHJvdmlkZXJdLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNCcsXG4gICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgJ0ZvciB0aGlzIHByb3ZpZGVyIHdlIGRvIG5vdCBuZWVkIHRvIHJlc3RyaWN0IG1hbmFnZWQgcG9saWNpZXMnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsXG4gICAgICAgICAgcmVhc29uOiAnRm9yIHRoaXMgcHJvdmlkZXIgd2lsZGNhcmRzIGFyZSBmaW5lJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUwxJyxcbiAgICAgICAgICByZWFzb246ICdGb3IgdGhpcyBwcm92aWRlciB0aGUgbGF0ZXN0IHJ1bnRpbWUgaXMgbm90IG5lZWRlZCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuXG4gICAgbmV3IEN1c3RvbVJlc291cmNlKHNjb3BlLCAnU1NNSW5zdGFsbGVyQ3VzdG9tUmVzb3VyY2UnLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgU2VydmljZVRpbWVvdXQ6IDMwNSwgLy8gVE9ETyBjb25maWd1cmFibGVcbiAgICAgICAgSW5zdGFuY2VJZDogb3B0aW9ucy5pbnN0YW5jZUlkLFxuICAgICAgICBEb2N1bWVudE5hbWU6IG9wdGlvbnMuZG9jdW1lbnROYW1lLFxuICAgICAgICBDbG91ZFdhdGNoTG9nR3JvdXBOYW1lOiBvcHRpb25zLmNsb3VkV2F0Y2hMb2dHcm91cE5hbWUsXG4gICAgICAgIFZTQ29kZVBhc3N3b3JkOiBvcHRpb25zLnZzQ29kZVBhc3N3b3JkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBfYmluZCgpIHt9XG59XG4iXX0=