@jjrawlins/cdk-diff-pr-github-action 0.0.7-beta → 0.0.9-beta

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.
@@ -30,33 +30,35 @@ class CdkDriftDetectionWorkflow {
30
30
  }
31
31
  const gh = project.github ?? new github_1.GitHub(project);
32
32
  const workflow = new github_1.GithubWorkflow(gh, name, { fileName });
33
- // triggers: schedule + manual dispatch with stage choice
34
- const stageChoices = props.stacks.map((s) => s.stackName ?? stageFromStack(s.stackName));
33
+ // triggers: schedule + manual dispatch with stack choice
34
+ const stackChoices = props.stacks.map((s) => s.stackName);
35
35
  workflow.on({
36
36
  schedule: props.schedule ? [{ cron: props.schedule }] : undefined,
37
37
  workflowDispatch: {
38
38
  inputs: {
39
- stage: {
40
- description: 'Stage to check for drift (leave empty for all)',
39
+ stack: {
40
+ description: 'Stack to check for drift (leave empty for all)',
41
41
  required: false,
42
42
  type: 'choice',
43
- options: stageChoices,
43
+ options: stackChoices,
44
44
  },
45
45
  },
46
46
  },
47
47
  });
48
- // One job per stage
48
+ // One job per stack
49
49
  const jobs = {};
50
- const postSteps = Array.isArray(props.postGitHubSteps) ? props.postGitHubSteps : [];
51
50
  for (const stack of props.stacks) {
52
- const short = stack.stackName ?? stageFromStack(stack.stackName);
53
- const jobId = `drift-${short}`;
54
- const resultsFile = `drift-results-${short}.json`;
55
- const innerCond = "github.event_name == 'schedule' || !github.event.inputs.stage || github.event.inputs.stage == '" + short + "'";
51
+ const sanitizedStackName = toKebabCase(toGithubJobId(stack.stackName));
52
+ const originalStackName = stack.stackName;
53
+ const jobId = `drift-${sanitizedStackName}`;
54
+ const resultsFile = `drift-results-${sanitizedStackName}.json`;
55
+ const innerCond = "github.event_name == 'schedule' || !github.event.inputs.stack || github.event.inputs.stack == '" + sanitizedStackName + "' || github.event.inputs.stack == '" + originalStackName + "'";
56
56
  const condExpr = '${{ ' + innerCond + ' }}';
57
57
  const notCondExpr = '${{ !(' + innerCond + ') }}';
58
+ const rawPost = props.postGitHubSteps;
59
+ const postSteps = typeof rawPost === 'function' ? rawPost({ stack: sanitizedStackName }) : (rawPost ?? []);
58
60
  jobs[jobId] = {
59
- name: `Drift Detection - ${short}`,
61
+ name: `Drift Detection - ${sanitizedStackName}`,
60
62
  runsOn: ['ubuntu-latest'],
61
63
  permissions: {
62
64
  contents: workflows_model_1.JobPermission.READ,
@@ -67,12 +69,12 @@ class CdkDriftDetectionWorkflow {
67
69
  AWS_DEFAULT_REGION: stack.driftDetectionRoleToAssumeRegion,
68
70
  AWS_REGION: stack.driftDetectionRoleToAssumeRegion,
69
71
  DRIFT_DETECTION_OUTPUT: resultsFile,
70
- STAGE_NAME: short,
72
+ STAGE_NAME: sanitizedStackName,
71
73
  STACK_NAME: stack.stackName,
72
74
  },
73
75
  // No job-level condition; we gate steps so the job always completes and summary can run
74
76
  steps: [
75
- { name: 'Skip (stage not selected)', if: notCondExpr, run: 'echo "Stage not selected; skipping drift detection for this job."' },
77
+ { name: 'Skip (stack not selected)', if: notCondExpr, run: 'echo "Stage not selected; skipping drift detection for this job."' },
76
78
  { name: 'Checkout', if: condExpr, uses: `actions/checkout@${githubActionsCheckoutVersion}` },
77
79
  {
78
80
  name: 'Setup Node.js',
@@ -127,7 +129,7 @@ class CdkDriftDetectionWorkflow {
127
129
  name: 'Upload results',
128
130
  if: condExpr,
129
131
  uses: `actions/upload-artifact@${githubActionsUploadArtifactVersion}`,
130
- with: { name: `drift-results-${short}`, path: resultsFile, ifNoFilesFound: 'ignore' },
132
+ with: { name: `drift-results-${sanitizedStackName}`, path: resultsFile, ifNoFilesFound: 'ignore' },
131
133
  },
132
134
  {
133
135
  name: 'Prepare notification payload',
@@ -136,7 +138,7 @@ class CdkDriftDetectionWorkflow {
136
138
  uses: `actions/github-script@${githubActionsGithubScriptVersion}`,
137
139
  with: {
138
140
  'result-encoding': 'string',
139
- 'script': notificationScript(short, stack.driftDetectionRoleToAssumeRegion, resultsFile),
141
+ 'script': notificationScript(sanitizedStackName, stack.driftDetectionRoleToAssumeRegion, resultsFile),
140
142
  },
141
143
  },
142
144
  ...postSteps.map((step) => ({
@@ -150,7 +152,7 @@ class CdkDriftDetectionWorkflow {
150
152
  name: 'Create Issue on Drift',
151
153
  if: "always() && steps.drift.outcome == 'failure'",
152
154
  uses: `actions/github-script@${githubActionsGithubScriptVersion}`,
153
- with: { script: issueScript(short, stack.driftDetectionRoleToAssumeRegion, resultsFile) },
155
+ with: { script: issueScript(sanitizedStackName, stack.driftDetectionRoleToAssumeRegion, resultsFile) },
154
156
  },
155
157
  ]
156
158
  : []),
@@ -179,10 +181,6 @@ exports.CdkDriftDetectionWorkflow = CdkDriftDetectionWorkflow;
179
181
  _a = JSII_RTTI_SYMBOL_1;
180
182
  CdkDriftDetectionWorkflow[_a] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDriftDetectionWorkflow", version: "0.0.0" };
181
183
  CdkDriftDetectionWorkflow.scriptCreated = false;
182
- function stageFromStack(stackName) {
183
- const parts = stackName.split('-');
184
- return parts[parts.length - 1] || stackName;
185
- }
186
184
  function issueScript(stage, region, resultsFile) {
187
185
  // Construct a plain JS script string (no template string nesting mishaps)
188
186
  const lines = [
@@ -224,8 +222,8 @@ function notificationScript(stage, region, resultsFile) {
224
222
  `const resultsFile = '${resultsFile}';`,
225
223
  'let payload;',
226
224
  'if (!fs.existsSync(resultsFile)) {',
227
- ' payload = { text: `Drift Detection (${stage}) - No results found`, blocks: [',
228
- " { type: 'section', text: { type: 'mrkdwn', text: `*Drift Detection (${stage})*` } },",
225
+ ' payload = { text: `Drift Detection (${stack}) - No results found`, blocks: [',
226
+ " { type: 'section', text: { type: 'mrkdwn', text: `*Drift Detection (${stack})*` } },",
229
227
  " { type: 'section', text: { type: 'mrkdwn', text: 'No results file found. The detection step may have been skipped.' } }",
230
228
  ' ] };',
231
229
  ' return JSON.stringify(payload);',
@@ -241,7 +239,7 @@ function notificationScript(stage, region, resultsFile) {
241
239
  ' linesArr.push(`• ${s.stackName} — ${count} resource(s) drifted`);',
242
240
  '}',
243
241
  'payload = {',
244
- ' text: `Drift Detection (${stage})`,',
242
+ ' text: `Drift Detection (${stack})`,',
245
243
  ' blocks: [',
246
244
  " { type: 'section', text: { type: 'mrkdwn', text: header } },",
247
245
  " { type: 'context', elements: [{ type: 'mrkdwn', text: summary }] },",
@@ -272,8 +270,8 @@ function summaryScript() {
272
270
  'shopt -s nullglob',
273
271
  'for file in drift-results-*.json drift-results/*/drift-results-*.json; do',
274
272
  ' if [[ -f "$file" ]]; then',
275
- ' stage=$(basename "$file" | sed -E \"s/^drift-results-([^.]+)\\.json$/\\1/\")',
276
- ' echo "### Stage: $stage" >> $GITHUB_STEP_SUMMARY',
273
+ ' stack=$(basename "$file" | sed -E \"s/^drift-results-([^.]+)\\.json$/\\1/\")',
274
+ ' echo "### Stage: $stack" >> $GITHUB_STEP_SUMMARY',
277
275
  ' jq -r \'' +
278
276
  '. as $results |\n' +
279
277
  '"- Total stacks: " + ($results | length | tostring) + "\\n" +\n' +
@@ -303,4 +301,20 @@ function summaryScript() {
303
301
  function toKebabCase(s) {
304
302
  return s.replace(/[^a-zA-Z0-9]+/g, '-').replace(/^-+|-+$/g, '').toLowerCase();
305
303
  }
306
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2RrRHJpZnREZXRlY3Rpb25Xb3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9DZGtEcmlmdERldGVjdGlvbldvcmtmbG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsOENBQTJEO0FBQzNELHVFQUFrRTtBQUNsRSxpRkFBMkU7QUFFM0UsTUFBTSxrQ0FBa0MsR0FBRyxJQUFJLENBQUM7QUFDaEQsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLENBQUM7QUFDMUMsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLENBQUM7QUFDM0MsTUFBTSxrQ0FBa0MsR0FBRyxJQUFJLENBQUM7QUFDaEQsTUFBTSxvQ0FBb0MsR0FBRyxJQUFJLENBQUM7QUFDbEQsTUFBTSxnQ0FBZ0MsR0FBRyxJQUFJLENBQUM7QUErQjlDLE1BQWEseUJBQXlCO0lBR3BDLFlBQVksS0FBcUM7UUFDL0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSSxpQkFBaUIsQ0FBQztRQUNyRCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQzVDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDO1FBQ2hELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDO1FBQ2hELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDOUIsTUFBTSxnQkFBZ0IsR0FBRSxLQUFLLENBQUMsZ0JBQWdCLElBQUksMkNBQTJDLENBQUM7UUFFOUYsa0VBQWtFO1FBQ2xFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM3QyxJQUFJLG9EQUF1QixDQUFDO2dCQUMxQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87Z0JBQ3RCLFVBQVUsRUFBRSxnQkFBZ0I7YUFDN0IsQ0FBQyxDQUFDO1lBQ0gseUJBQXlCLENBQUMsYUFBYSxH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QUM7QUFDaEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdpdEh1YiwgR2l0aHViV29ya2Zsb3cgfSBmcm9tICdwcm9qZW4vbGliL2dpdGh1Yic7XG5pbXBvcnQgeyBKb2JQZXJtaXNzaW9uIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcbmltcG9ydCB7IENka0RyaWZ0RGV0ZWN0aW9uU2NyaXB0IH0gZnJvbSAnLi9iaW4vY2RrLWRyaWZ0LWRldGVjdGlvbi1zY3JpcHQnO1xuXG5jb25zdCBnaXRodWJBY3Rpb25zQXdzQ3JlZGVudGlhbHNWZXJzaW9uID0gJ3Y1JztcbmNvbnN0IGdpdGh1YkFjdGlvbnNDaGVja291dFZlcnNpb24gPSAndjUnO1xuY29uc3QgZ2l0aHViQWN0aW9uc1NldHVwTm9kZVZlcnNpb24gPSAndjUnO1xuY29uc3QgZ2l0aHViQWN0aW9uc1VwbG9hZEFydGlmYWN0VmVyc2lvbiA9ICd2NCc7XG5jb25zdCBnaXRodWJBY3Rpb25zRG93bmxvYWRBcnRpZmFjdFZlcnNpb24gPSAndjUnO1xuY29uc3QgZ2l0aHViQWN0aW9uc0dpdGh1YlNjcmlwdFZlcnNpb24gPSAndjgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrIHtcbiAgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRyaWZ0RGV0ZWN0aW9uUm9sZVRvQXNzdW1lUmVnaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRyaWZ0RGV0ZWN0aW9uUm9sZVRvQXNzdW1lQXJuOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZhaWxPbkRyaWZ0PzogYm9vbGVhbjsgLy8gaWYgdHJ1ZSwgZmFpbCBqb2Igd2hlbiBkcmlmdCBkZXRlY3RlZCAoZGVmYXVsdCB0cnVlKVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENka0RyaWZ0RGV0ZWN0aW9uV29ya2Zsb3dQcm9wcyB7XG4gIHJlYWRvbmx5IHNjcmlwdE91dHB1dFBhdGg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb2plY3Q6IGFueTsgLy8gYXZvaWQgZXhwb3J0aW5nIHByb2plbiB0eXBlcyBpbiBwdWJsaWMgQVBJXG4gIHJlYWRvbmx5IHdvcmtmbG93TmFtZT86IHN0cmluZzsgLy8gd29ya2Zsb3cgd29ya2Zsb3dOYW1lIChhbHNvIHVzZWQgdG8gZGVyaXZlIGZpbGUgd29ya2Zsb3dOYW1lKVxuICByZWFkb25seSBzY2hlZHVsZT86IHN0cmluZzsgLy8gY3JvbiBleHByZXNzaW9uLCBlLmcuICcwIDAgKiAqIConXG4gIHJlYWRvbmx5IGNyZWF0ZUlzc3Vlcz86IGJvb2xlYW47IC8vIGNyZWF0ZS91cGRhdGUgaXNzdWUgd2hlbiBkcmlmdCBkZXRlY3RlZCBvbiBzY2hlZHVsZSAoZGVmYXVsdCB0cnVlKVxuICByZWFkb25seSBvaWRjUm9sZUFybjogc3RyaW5nOyAvLyBkZWZhdWx0IE9JREMgcm9sZSBBUk4gdG8gYXNzdW1lIGZvciBhbGwgc3RhY2tzXG4gIHJlYWRvbmx5IG9pZGNSZWdpb246IHN0cmluZzsgLy8gZGVmYXVsdCBPSURDIHJlZ2lvbiB0byBhc3N1bWUgZm9yIGFsbCBzdGFja3NcbiAgcmVhZG9ubHkgc3RhY2tzOiBTdGFja1tdO1xuICByZWFkb25seSBub2RlVmVyc2lvbj86IHN0cmluZzsgLy8gZS5nLiwgJzI0LngnXG4gIC8qKlxuICAgKiBPcHRpb25hbCBob29rIHRvIGFwcGVuZCBhZGRpdGlvbmFsIEdpdEh1YiBBY3Rpb25zIHN0ZXBzIGFmdGVyIGRyaWZ0IGRldGVjdGlvbiBwZXIgc3RhY2suXG4gICAqIFlvdSBjYW4gc3VwcGx5IGEgc3RhdGljIGFycmF5IG9mIHN0ZXBzLCBvciBhIGZhY3RvcnkgdGhhdCByZWNlaXZlcyBjb250ZXh0IGFuZCByZXR1cm5zIHN0ZXBzLlxuICAgKi9cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFkZGl0aW9uYWwgR2l0SHViIEFjdGlvbiBzdGVwcyB0byBydW4gYWZ0ZXIgZHJpZnQgZGV0ZWN0aW9uIGZvciBlYWNoIHN0YWNrLlxuICAgKiBUaGVzZSBzdGVwcyBhcmUgaW5zZXJ0ZWQgYWZ0ZXIgYSAnUHJlcGFyZSBub3RpZmljYXRpb24gcGF5bG9hZCcgc3RlcCB3aGljaCBleHBvc2VzXG4gICAqIGEgU2xhY2stY29tcGF0aWJsZSBKU09OIHBheWxvYWQgYXQgYCR7eyBzdGVwcy5ub3RpZnkub3V0cHV0cy5yZXN1bHQgfX1gLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9zdEdpdEh1YlN0ZXBzPzogYW55W107XG59XG5cbmV4cG9ydCBjbGFzcyBDZGtEcmlmdERldGVjdGlvbldvcmtmbG93IHtcbiAgcHJpdmF0ZSBzdGF0aWMgc2NyaXB0Q3JlYXRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBDZGtEcmlmdERldGVjdGlvbldvcmtmbG93UHJvcHMpIHtcbiAgICBjb25zdCBuYW1lID0gcHJvcHMud29ya2Zsb3dOYW1lID8/ICdkcmlmdC1kZXRlY3Rpb24nO1xuICAgIGNvbnN0IGZpbGVOYW1lID0gdG9LZWJhYkNhc2UobmFtZSkgKyAnLnltbCc7XG4gICAgY29uc3Qgbm9kZVZlcnNpb24gPSBwcm9wcy5ub2RlVmVyc2lvbiA/PyAnMjQueCc7XG4gICAgY29uc3QgY3JlYXRlSXNzdWVzID0gcHJvcHMuY3JlYXRlSXNzdWVzID8/IHRydWU7XG4gICAgY29uc3QgcHJvamVjdCA9IHByb3BzLnByb2plY3Q7XG4gICAgY29uc3Qgc2NyaXB0T3V0cHV0UGF0aD0gcHJvcHMuc2NyaXB0T3V0cHV0UGF0aCA/PyAnLmdpdGh1Yi93b3JrZmxvd3Mvc2NyaXB0cy9kZXRlY3QtZHJpZnQudHMnO1xuXG4gICAgLy8gT25seSBjcmVhdGUgdGhlIGRyaWZ0IGRldGVjdGlvbiBzY3JpcHQgb25jZSB0byBhdm9pZCBjb2xsaXNpb25zXG4gICAgaWYgKCFDZGtEcmlmdERldGVjdGlvbldvcmtmbG93LnNjcmlwdENyZWF0ZWQpIHtcbiAgICAgIG5ldyBDZGtEcmlmdERldGVjdGlvblNjcmlwdCh7XG4gICAgICAgIHByb2plY3Q6IHByb3BzLnByb2plY3QsXG4gICAgICAgIG91dHB1dFBhdGg6IHNjcmlwdE91dHB1dFBhdGgsXG4gICAgICB9KTtcbiAgICAgIENka0RyaWZ0RGV0ZWN0aW9uV29ya2Zsb3cuc2NyaXB0Q3JlYXRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgZ2ggPSAocHJvamVjdCBhcyBhbnkpLmdpdGh1YiA/PyBuZXcgR2l0SHViKHByb2plY3QpO1xuICAgIGNvbnN0IHdvcmtmbG93ID0gbmV3IEdpdGh1YldvcmtmbG93KGdoLCBuYW1lLCB7IGZpbGVOYW1lIH0pO1xuXG4gICAgLy8gdHJpZ2dlcnM6IHNjaGVkdWxlICsgbWFudWFsIGRpc3BhdGNoIHdpdGggc3RhZ2UgY2hvaWNlXG4gICAgY29uc3Qgc3RhZ2VDaG9pY2VzID0gcHJvcHMuc3RhY2tzLm1hcCgocykgPT4gcy5zdGFja05hbWUgPz8gc3RhZ2VGcm9tU3RhY2socy5zdGFja05hbWUpKTtcbiAgICB3b3JrZmxvdy5vbih7XG4gICAgICBzY2hlZHVsZTogcHJvcHMuc2NoZWR1bGUgPyBbeyBjcm9uOiBwcm9wcy5zY2hlZHVsZSB9XSA6IHVuZGVmaW5lZCxcbiAgICAgIHdvcmtmbG93RGlzcGF0Y2g6IHtcbiAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgc3RhZ2U6IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnU3RhZ2UgdG8gY2hlY2sgZm9yIGRyaWZ0IChsZWF2ZSBlbXB0eSBmb3IgYWxsKScsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiAnY2hvaWNlJyxcbiAgICAgICAgICAgIG9wdGlvbnM6IHN0YWdlQ2hvaWNlcyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIE9uZSBqb2IgcGVyIHN0YWdlXG4gICAgY29uc3Qgam9iczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gICAgY29uc3QgcG9zdFN0ZXBzOiBhbnlbXSA9IEFycmF5LmlzQXJyYXkoKHByb3BzIGFzIGFueSkucG9zdEdpdEh1YlN0ZXBzKSA/IChwcm9wcyBhcyBhbnkpLnBvc3RHaXRIdWJTdGVwcyA6IFtdO1xuXG4gICAgZm9yIChjb25zdCBzdGFjayBvZiBwcm9wcy5zdGFja3MpIHtcbiAgICAgIGNvbnN0IHNob3J0ID0gc3RhY2suc3RhY2tOYW1lID8/IHN0YWdlRnJvbVN0YWNrKHN0YWNrLnN0YWNrTmFtZSk7XG4gICAgICBjb25zdCBqb2JJZCA9IGBkcmlmdC0ke3Nob3J0fWA7XG4gICAgICBjb25zdCByZXN1bHRzRmlsZSA9IGBkcmlmdC1yZXN1bHRzLSR7c2hvcnR9Lmpzb25gO1xuICAgICAgY29uc3QgaW5uZXJDb25kID0gXCJnaXRodWIuZXZlbnRfbmFtZSA9PSAnc2NoZWR1bGUnIHx8ICFnaXRodWIuZXZlbnQuaW5wdXRzLnN0YWdlIHx8IGdpdGh1Yi5ldmVudC5pbnB1dHMuc3RhZ2UgPT0gJ1wiICsgc2hvcnQgKyBcIidcIjtcbiAgICAgIGNvbnN0IGNvbmRFeHByID0gJyR7eyAnICsgaW5uZXJDb25kICsgJyB9fSc7XG4gICAgICBjb25zdCBub3RDb25kRXhwciA9ICcke3sgISgnICsgaW5uZXJDb25kICsgJykgfX0nO1xuXG4gICAgICBqb2JzW2pvYklkXSA9IHtcbiAgICAgICAgbmFtZTogYERyaWZ0IERldGVjdGlvbiAtICR7c2hvcnR9YCxcbiAgICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICAgIGlkVG9rZW46IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgICAgaXNzdWVzOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgICB9LFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICBBV1NfREVGQVVMVF9SRUdJT046IHN0YWNrLmRyaWZ0RGV0ZWN0aW9uUm9sZVRvQXNzdW1lUmVnaW9uLFxuICAgICAgICAgIEFXU19SRUdJT046IHN0YWNrLmRyaWZ0RGV0ZWN0aW9uUm9sZVRvQXNzdW1lUmVnaW9uLFxuICAgICAgICAgIERSSUZUX0RFVEVDVElPTl9PVVRQVVQ6IHJlc3VsdHNGaWxlLFxuICAgICAgICAgIFNUQUdFX05BTUU6IHNob3J0LFxuICAgICAgICAgIFNUQUNLX05BTUU6IHN0YWNrLnN0YWNrTmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gTm8gam9iLWxldmVsIGNvbmRpdGlvbjsgd2UgZ2F0ZSBzdGVwcyBzbyB0aGUgam9iIGFsd2F5cyBjb21wbGV0ZXMgYW5kIHN1bW1hcnkgY2FuIHJ1blxuICAgICAgICBzdGVwczogW1xuICAgICAgICAgIHsgbmFtZTogJ1NraXAgKHN0YWdlIG5vdCBzZWxlY3RlZCknLCBpZjogbm90Q29uZEV4cHIsIHJ1bjogJ2VjaG8gXCJTdGFnZSBub3Qgc2VsZWN0ZWQ7IHNraXBwaW5nIGRyaWZ0IGRldGVjdGlvbiBmb3IgdGhpcyBqb2IuXCInIH0sXG4gICAgICAgICAgeyBuYW1lOiAnQ2hlY2tvdXQnLCBpZjogY29uZEV4cHIsIHVzZXM6IGBhY3Rpb25zL2NoZWNrb3V0QCR7Z2l0aHViQWN0aW9uc0NoZWNrb3V0VmVyc2lvbn1gIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ1NldHVwIE5vZGUuanMnLFxuICAgICAgICAgICAgaWY6IGNvbmRFeHByLFxuICAgICAgICAgICAgdXNlczogYGFjdGlvbnMvc2V0dXAtbm9kZUAke2dpdGh1YkFjdGlvbnNTZXR1cE5vZGVWZXJzaW9ufWAsXG4gICAgICAgICAgICB3aXRoOiB7ICdub2RlLXZlcnNpb24nOiBub2RlVmVyc2lvbiB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBuYW1lOiAnSW5zdGFsbCBkZXBlbmRlbmNpZXMnLCBpZjogY29uZEV4cHIsIHJ1bjogJ3lhcm4gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZSB8fCBucG0gY2knLCBlbnY6IHsgR0lUSFVCX1RPS0VOOiAnJHt7IHNlY3JldHMuR0lUSFVCX1RPS0VOIH19JyB9IH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ0FXUyBDcmVkZW50aWFscycsXG4gICAgICAgICAgICBpZjogY29uZEV4cHIsXG4gICAgICAgICAgICBpZDogJ2NyZWRzJyxcbiAgICAgICAgICAgIHVzZXM6IGBhd3MtYWN0aW9ucy9jb25maWd1cmUtYXdzLWNyZWRlbnRpYWxzQCR7Z2l0aHViQWN0aW9uc0F3c0NyZWRlbnRpYWxzVmVyc2lvbn1gLFxuICAgICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgICAncm9sZS10by1hc3N1bWUnOiBwcm9wcy5vaWRjUm9sZUFybixcbiAgICAgICAgICAgICAgJ3JvbGUtc2Vzc2lvbi1uYW1lJzogJ0dpdEh1YkFjdGlvbicsXG4gICAgICAgICAgICAgICdhd3MtcmVnaW9uJzogcHJvcHMub2lkY1JlZ2lvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnQXNzdW1lIERyaWZ0IERldGVjdGlvbiBSb2xlJyxcbiAgICAgICAgICAgIGlmOiBjb25kRXhwcixcbiAgICAgICAgICAgIHVzZXM6IGBhd3MtYWN0aW9ucy9jb25maWd1cmUtYXdzLWNyZWRlbnRpYWxzQCR7Z2l0aHViQWN0aW9uc0F3c0NyZWRlbnRpYWxzVmVyc2lvbn1gLFxuICAgICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgICAncm9sZS10by1hc3N1bWUnOiBzdGFjay5kcmlmdERldGVjdGlvblJvbGVUb0Fzc3VtZUFybixcbiAgICAgICAgICAgICAgJ3JvbGUtY2hhaW5pbmcnOiB0cnVlLFxuICAgICAgICAgICAgICAncm9sZS1za2lwLXNlc3Npb24tdGFnZ2luZyc6IHRydWUsXG4gICAgICAgICAgICAgICdhd3MtcmVnaW9uJzogc3RhY2suZHJpZnREZXRlY3Rpb25Sb2xlVG9Bc3N1bWVSZWdpb24sXG4gICAgICAgICAgICAgICdhd3MtYWNjZXNzLWtleS1pZCc6ICcke3sgc3RlcHMuY3JlZHMub3V0cHV0cy5hd3MtYWNjZXNzLWtleS1pZCB9fScsXG4gICAgICAgICAgICAgICdhd3Mtc2VjcmV0LWFjY2Vzcy1rZXknOiAnJHt7IHN0ZXBzLmNyZWRzLm91dHB1dHMuYXdzLXNlY3JldC1hY2Nlc3Mta2V5IH19JyxcbiAgICAgICAgICAgICAgJ2F3cy1zZXNzaW9uLXRva2VuJzogJyR7eyBzdGVwcy5jcmVkcy5vdXRwdXRzLmF3cy1zZXNzaW9uLXRva2VuIH19JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnRGV0ZWN0IGRyaWZ0JyxcbiAgICAgICAgICAgIGlmOiBjb25kRXhwcixcbiAgICAgICAgICAgIGlkOiAnZHJpZnQnLFxuICAgICAgICAgICAgY29udGludWVPbkVycm9yOiB0cnVlLCAvLyBhbGxvdyBhcnRpZmFjdCB1cGxvYWQgYW5kIGlzc3VlIGNyZWF0aW9uIGV2ZW4gd2hlbiBkcmlmdCBpcyBkZXRlY3RlZFxuICAgICAgICAgICAgcnVuOiBbXG4gICAgICAgICAgICAgICdzZXQgLWUnLFxuICAgICAgICAgICAgICAvLyBVc2UgdGhlIGJ1bmRsZWQgc2NyaXB0IGZyb20gdGhpcyBwYWNrYWdlXG4gICAgICAgICAgICAgICdub2RlIC4vbm9kZV9tb2R1bGVzL0BqanJhd2xpbnMvY2RrLWRpZmYtcHItZ2l0aHViLWFjdGlvbi9saWIvYmluL2RldGVjdC1kcmlmdC5qcycsXG4gICAgICAgICAgICAgICdpZiBbIC1mIFwiJERSSUZUX0RFVEVDVElPTl9PVVRQVVRcIiBdOyB0aGVuIGVjaG8gXCJSZXN1bHRzIGZpbGUgY3JlYXRlZDogJERSSUZUX0RFVEVDVElPTl9PVVRQVVRcIjsgZmknLFxuICAgICAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgICBTVEFDS19OQU1FOiBzdGFjay5zdGFja05hbWUsXG4gICAgICAgICAgICAgIEFXU19SRUdJT046IHN0YWNrLmRyaWZ0RGV0ZWN0aW9uUm9sZVRvQXNzdW1lUmVnaW9uLFxuICAgICAgICAgICAgICBEUklGVF9ERVRFQ1RJT05fT1VUUFVUOiByZXN1bHRzRmlsZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnVXBsb2FkIHJlc3VsdHMnLFxuICAgICAgICAgICAgaWY6IGNvbmRFeHByLFxuICAgICAgICAgICAgdXNlczogYGFjdGlvbnMvdXBsb2FkLWFydGlmYWN0QCR7Z2l0aHViQWN0aW9uc1VwbG9hZEFydGlmYWN0VmVyc2lvbn1gLFxuICAgICAgICAgICAgd2l0aDogeyBuYW1lOiBgZHJpZnQtcmVzdWx0cy0ke3Nob3J0fWAsIHBhdGg6IHJlc3VsdHNGaWxlLCBpZk5vRmlsZXNGb3VuZDogJ2lnbm9yZScgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdQcmVwYXJlIG5vdGlmaWNhdGlvbiBwYXlsb2FkJyxcbiAgICAgICAgICAgIGlmOiBjb25kRXhwcixcbiAgICAgICAgICAgIGlkOiAnbm90aWZ5JyxcbiAgICAgICAgICAgIHVzZXM6IGBhY3Rpb25zL2dpdGh1Yi1zY3JpcHRAJHtnaXRodWJBY3Rpb25zR2l0aHViU2NyaXB0VmVyc2lvbn1gLFxuICAgICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgICAncmVzdWx0LWVuY29kaW5nJzogJ3N0cmluZycsXG4gICAgICAgICAgICAgICdzY3JpcHQnOiBub3RpZmljYXRpb25TY3JpcHQoc2hvcnQsIHN0YWNrLmRyaWZ0RGV0ZWN0aW9uUm9sZVRvQXNzdW1lUmVnaW9uLCByZXN1bHRzRmlsZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4ucG9zdFN0ZXBzLm1hcCgoc3RlcCkgPT4gKHtcbiAgICAgICAgICAgIC8vIEJ5IGRlZmF1bHQsIG9ubHkgcnVuIGV4dHJhIG5vdGlmaWNhdGlvbiBzdGVwcyB3aGVuIGRyaWZ0IG9jY3Vyc1xuICAgICAgICAgICAgaWY6IChzdGVwIGFzIGFueSkuaWYgPz8gXCJhbHdheXMoKSAmJiBzdGVwcy5kcmlmdC5vdXRjb21lID09ICdmYWlsdXJlJ1wiLFxuICAgICAgICAgICAgLi4uKHN0ZXAgYXMgYW55KSxcbiAgICAgICAgICB9KSksXG4gICAgICAgICAgLi4uKFxuICAgICAgICAgICAgY3JlYXRlSXNzdWVzXG4gICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdDcmVhdGUgSXNzdWUgb24gRHJpZnQnLFxuICAgICAgICAgICAgICAgICAgaWY6IFwiYWx3YXlzKCkgJiYgc3RlcHMuZHJpZnQub3V0Y29tZSA9PSAnZmFpbHVyZSdcIixcbiAgICAgICAgICAgICAgICAgIHVzZXM6IGBhY3Rpb25zL2dpdGh1Yi1zY3JpcHRAJHtnaXRodWJBY3Rpb25zR2l0aHViU2NyaXB0VmVyc2lvbn1gLFxuICAgICAgICAgICAgICAgICAgd2l0aDogeyBzY3JpcHQ6IGlzc3VlU2NyaXB0KHNob3J0LCBzdGFjay5kcmlmdERldGVjdGlvblJvbGVUb0Fzc3VtZVJlZ2lvbiwgcmVzdWx0c0ZpbGUpIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICA6IFtdXG4gICAgICAgICAgKSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gc3VtbWFyeSBhZ2dyZWdhdG9yIGpvYlxuICAgIGpvYnNbJ2RyaWZ0LXN1bW1hcnknXSA9IHtcbiAgICAgIG5hbWU6ICdEcmlmdCBEZXRlY3Rpb24gU3VtbWFyeScsXG4gICAgICBuZWVkczogT2JqZWN0LmtleXMoam9icykuZmlsdGVyKChqKSA9PiBqLnN0YXJ0c1dpdGgoJ2RyaWZ0LScpICYmIGogIT09ICdkcmlmdC1zdW1tYXJ5JyksXG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgcGVybWlzc2lvbnM6IHsgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCB9LFxuICAgICAgc3RlcHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdEb3dubG9hZCBhbGwgYXJ0aWZhY3RzJyxcbiAgICAgICAgICB1c2VzOiBgYWN0aW9ucy9kb3dubG9hZC1hcnRpZmFjdEAke2dpdGh1YkFjdGlvbnNEb3dubG9hZEFydGlmYWN0VmVyc2lvbn1gLFxuICAgICAgICAgIHdpdGg6IHsgcGF0aDogJ2RyaWZ0LXJlc3VsdHMnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHsgbmFtZTogJ0dlbmVyYXRlIHN1bW1hcnknLCBzaGVsbDogJ2Jhc2gnLCBydW46IHN1bW1hcnlTY3JpcHQoKSB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgd29ya2Zsb3cuYWRkSm9icyhqb2JzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdGFnZUZyb21TdGFjayhzdGFja05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnRzID0gc3RhY2tOYW1lLnNwbGl0KCctJyk7XG4gIHJldHVybiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSB8fCBzdGFja05hbWU7XG59XG5cbmZ1bmN0aW9uIGlzc3VlU2NyaXB0KHN0YWdlOiBzdHJpbmcsIHJlZ2lvbjogc3RyaW5nLCByZXN1bHRzRmlsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gQ29uc3RydWN0IGEgcGxhaW4gSlMgc2NyaXB0IHN0cmluZyAobm8gdGVtcGxhdGUgc3RyaW5nIG5lc3RpbmcgbWlzaGFwcylcbiAgY29uc3QgbGluZXMgPSBbXG4gICAgXCJjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XCIsXG4gICAgYGNvbnN0IHJlc3VsdHNGaWxlID0gJyR7cmVzdWx0c0ZpbGV9JztgLFxuICAgIFwiaWYgKCFmcy5leGlzdHNTeW5jKHJlc3VsdHNGaWxlKSkgeyBjb25zb2xlLmxvZygnTm8gcmVzdWx0cyBmaWxlIGZvdW5kJyk7IHJldHVybjsgfVwiLFxuICAgIFwiY29uc3QgcmVzdWx0cyA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHJlc3VsdHNGaWxlLCAndXRmOCcpKTtcIixcbiAgICBcImNvbnN0IGRyaWZ0ZWRTdGFja3MgPSByZXN1bHRzLmZpbHRlcihyID0+IHIuZHJpZnRTdGF0dXMgPT09ICdEUklGVEVEJyk7XCIsXG4gICAgXCJpZiAoZHJpZnRlZFN0YWNrcy5sZW5ndGggPT09IDApIHsgY29uc29sZS5sb2coJ05vIGRyaWZ0IGRldGVjdGVkJyk7IHJldHVybjsgfVwiLFxuICAgIGBjb25zdCB0aXRsZSA9ICdEcmlmdCBEZXRlY3RlZCBpbiAke3N0YWdlfSc7YCxcbiAgICBgbGV0IGJvZHkgPSAnIyMgRHJpZnQgRGV0ZWN0aW9uIFJlcG9ydFxcXFxuXFxcXG4nICsgJyoqU3RhZ2U6KiogJHtzdGFnZX1cXFxcbicgKyAnKipSZWdpb246KiogJHtyZWdpb259XFxcXG4nICsgJyoqVGltZToqKiAnICsgbmV3IERhdGUoKS50b0lTT1N0cmluZygpICsgJ1xcXFxuXFxcXG4nO2AsXG4gICAgXCJib2R5ICs9ICcjIyMgU3VtbWFyeVxcXFxuJztcIixcbiAgICBcImJvZHkgKz0gJy0gVG90YWwgc3RhY2tzIGNoZWNrZWQ6ICcgKyByZXN1bHRzLmxlbmd0aCArICdcXFxcbic7XCIsXG4gICAgXCJib2R5ICs9ICctIERyaWZ0ZWQgc3RhY2tzOiAnICsgZHJpZnRlZFN0YWNrcy5sZW5ndGggKyAnXFxcXG5cXFxcbic7XCIsXG4gICAgXCJib2R5ICs9ICcjIyMgRHJpZnRlZCBTdGFja3NcXFxcbic7XCIsXG4gICAgJ2ZvciAoY29uc3QgcyBvZiBkcmlmdGVkU3RhY2tzKSB7JyxcbiAgICAnICBjb25zdCByZXNvdXJjZXMgPSBzLmRyaWZ0ZWRSZXNvdXJjZXMgfHwgW107JyxcbiAgICBcIiAgYm9keSArPSAnIyMjIyAnICsgcy5zdGFja05hbWUgKyAnXFxcXG4nO1wiLFxuICAgIFwiICBib2R5ICs9ICctIERyaWZ0ZWQgcmVzb3VyY2VzOiAnICsgcmVzb3VyY2VzLmxlbmd0aCArICdcXFxcbic7XCIsXG4gICAgXCIgIGZvciAoY29uc3QgciBvZiByZXNvdXJjZXMpIHsgYm9keSArPSAnICAtICcgKyByLmxvZ2ljYWxSZXNvdXJjZUlkICsgJyAoJyArIHIucmVzb3VyY2VUeXBlICsgJylcXFxcbic7IH1cIixcbiAgICBcIiAgYm9keSArPSAnXFxcXG4nO1wiLFxuICAgICd9JyxcbiAgICBcImJvZHkgKz0gJyMjIyBBY3Rpb24gUmVxdWlyZWRcXFxcbicgKyAnUGxlYXNlIHJldmlldyB0aGUgZHJpZnRlZCByZXNvdXJjZXMgYW5kIGVpdGhlcjpcXFxcbjEuIFVwZGF0ZSB0aGUgaW5mcmFzdHJ1Y3R1cmUgY29kZSB0byBtYXRjaCB0aGUgYWN0dWFsIHN0YXRlXFxcXG4yLiBSZXN0b3JlIHRoZSByZXNvdXJjZXMgdG8gbWF0Y2ggdGhlIGV4cGVjdGVkIHN0YXRlXFxcXG5cXFxcbic7XCIsXG4gICAgJ2JvZHkgKz0gYFtWaWV3IHdvcmtmbG93IHJ1bl0oJHtjb250ZXh0LnNlcnZlclVybH0vJHtjb250ZXh0LnJlcG8ub3duZXJ9LyR7Y29udGV4dC5yZXBvLnJlcG99L2FjdGlvbnMvcnVucy8ke2NvbnRleHQucnVuSWR9KWA7JyxcbiAgICAvLyBMaXN0IG9yIHVwZGF0ZSBhbiBpc3N1ZSB3aXRoIGxhYmVsc1xuICAgIGBjb25zdCBpc3N1ZXMgPSBhd2FpdCBnaXRodWIucmVzdC5pc3N1ZXMubGlzdEZvclJlcG8oeyBvd25lcjogY29udGV4dC5yZXBvLm93bmVyLCByZXBvOiBjb250ZXh0LnJlcG8ucmVwbywgc3RhdGU6ICdvcGVuJywgbGFiZWxzOiBbJ2RyaWZ0LWRldGVjdGlvbicsICcke3N0YWdlfSddIH0pO2AsXG4gICAgJ2lmIChpc3N1ZXMuZGF0YS5sZW5ndGggPT09IDApIHsnLFxuICAgIGAgIGF3YWl0IGdpdGh1Yi5yZXN0Lmlzc3Vlcy5jcmVhdGUoeyBvd25lcjogY29udGV4dC5yZXBvLm93bmVyLCByZXBvOiBjb250ZXh0LnJlcG8ucmVwbywgdGl0bGUsIGJvZHksIGxhYmVsczogWydkcmlmdC1kZXRlY3Rpb24nLCAnJHtzdGFnZX0nXSB9KTtgLFxuICAgICd9IGVsc2UgeycsXG4gICAgJyAgY29uc3QgaXNzdWUgPSBpc3N1ZXMuZGF0YVswXTsnLFxuICAgICcgIGF3YWl0IGdpdGh1Yi5yZXN0Lmlzc3Vlcy5jcmVhdGVDb21tZW50KHsgb3duZXI6IGNvbnRleHQucmVwby5vd25lciwgcmVwbzogY29udGV4dC5yZXBvLnJlcG8sIGlzc3VlX251bWJlcjogaXNzdWUubnVtYmVyLCBib2R5IH0pOycsXG4gICAgJ30nLFxuICBdO1xuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIG5vdGlmaWNhdGlvblNjcmlwdChzdGFnZTogc3RyaW5nLCByZWdpb246IHN0cmluZywgcmVzdWx0c0ZpbGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzID0gW1xuICAgIFwiY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1wiLFxuICAgIGBjb25zdCByZXN1bHRzRmlsZSA9ICcke3Jlc3VsdHNGaWxlfSc7YCxcbiAgICAnbGV0IHBheWxvYWQ7JyxcbiAgICAnaWYgKCFmcy5leGlzdHNTeW5jKHJlc3VsdHNGaWxlKSkgeycsXG4gICAgJyAgcGF5bG9hZCA9IHsgdGV4dDogYERyaWZ0IERldGVjdGlvbiAoJHtzdGFnZX0pIC0gTm8gcmVzdWx0cyBmb3VuZGAsIGJsb2NrczogWycsXG4gICAgXCIgICAgeyB0eXBlOiAnc2VjdGlvbicsIHRleHQ6IHsgdHlwZTogJ21ya2R3bicsIHRleHQ6IGAqRHJpZnQgRGV0ZWN0aW9uICgke3N0YWdlfSkqYCB9IH0sXCIsXG4gICAgXCIgICAgeyB0eXBlOiAnc2VjdGlvbicsIHRleHQ6IHsgdHlwZTogJ21ya2R3bicsIHRleHQ6ICdObyByZXN1bHRzIGZpbGUgZm91bmQuIFRoZSBkZXRlY3Rpb24gc3RlcCBtYXkgaGF2ZSBiZWVuIHNraXBwZWQuJyB9IH1cIixcbiAgICAnICBdIH07JyxcbiAgICAnICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocGF5bG9hZCk7JyxcbiAgICAnfScsXG4gICAgXCJjb25zdCByZXN1bHRzID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocmVzdWx0c0ZpbGUsICd1dGY4JykpO1wiLFxuICAgIFwiY29uc3QgZHJpZnRlZCA9IHJlc3VsdHMuZmlsdGVyKHIgPT4gci5kcmlmdFN0YXR1cyA9PT0gJ0RSSUZURUQnKTtcIixcbiAgICAnY29uc3QgZXJyb3JzID0gcmVzdWx0cy5maWx0ZXIociA9PiByLmVycm9yKTsnLFxuICAgIGBjb25zdCBoZWFkZXIgPSBcXGAqRHJpZnQgRGV0ZWN0aW9uICgke3N0YWdlfSkqIOKAlCBSZWdpb246ICR7cmVnaW9ufVxcYDtgLFxuICAgICdjb25zdCBzdW1tYXJ5ID0gYFRvdGFsIHN0YWNrczogJHtyZXN1bHRzLmxlbmd0aH0gfCBEcmlmdGVkOiAke2RyaWZ0ZWQubGVuZ3RofSB8IEVycm9yczogJHtlcnJvcnMubGVuZ3RofWA7JyxcbiAgICAnY29uc3QgbGluZXNBcnIgPSBbXTsnLFxuICAgICdmb3IgKGNvbnN0IHMgb2YgZHJpZnRlZCkgeycsXG4gICAgJyAgY29uc3QgY291bnQgPSAocy5kcmlmdGVkUmVzb3VyY2VzIHx8IFtdKS5sZW5ndGg7JyxcbiAgICAnICBsaW5lc0Fyci5wdXNoKGDigKIgJHtzLnN0YWNrTmFtZX0g4oCUICR7Y291bnR9IHJlc291cmNlKHMpIGRyaWZ0ZWRgKTsnLFxuICAgICd9JyxcbiAgICAncGF5bG9hZCA9IHsnLFxuICAgICcgIHRleHQ6IGBEcmlmdCBEZXRlY3Rpb24gKCR7c3RhZ2V9KWAsJyxcbiAgICAnICBibG9ja3M6IFsnLFxuICAgIFwiICAgIHsgdHlwZTogJ3NlY3Rpb24nLCB0ZXh0OiB7IHR5cGU6ICdtcmtkd24nLCB0ZXh0OiBoZWFkZXIgfSB9LFwiLFxuICAgIFwiICAgIHsgdHlwZTogJ2NvbnRleHQnLCBlbGVtZW50czogW3sgdHlwZTogJ21ya2R3bicsIHRleHQ6IHN1bW1hcnkgfV0gfSxcIixcbiAgICAnICAgIC4uLihkcmlmdGVkLmxlbmd0aCA+IDAgPyBbJyxcbiAgICBcIiAgICAgIHsgdHlwZTogJ2RpdmlkZXInIH0sXCIsXG4gICAgXCIgICAgICB7IHR5cGU6ICdzZWN0aW9uJywgdGV4dDogeyB0eXBlOiAnbXJrZHduJywgdGV4dDogJypEcmlmdGVkIFN0YWNrczoqXFxuJyArIGxpbmVzQXJyLmpvaW4oJ1xcbicpIH0gfVwiLFxuICAgICcgICAgXSA6IFsnLFxuICAgIFwiICAgICAgeyB0eXBlOiAnZGl2aWRlcicgfSxcIixcbiAgICBcIiAgICAgIHsgdHlwZTogJ3NlY3Rpb24nLCB0ZXh0OiB7IHR5cGU6ICdtcmtkd24nLCB0ZXh0OiAnTm8gZHJpZnQgZGV0ZWN0ZWQuJyB9IH1cIixcbiAgICAnICAgIF0pJyxcbiAgICAnICBdJyxcbiAgICAnfTsnLFxuICAgICdyZXR1cm4gSlNPTi5zdHJpbmdpZnkocGF5bG9hZCk7JyxcbiAgXTtcbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBzdW1tYXJ5U2NyaXB0KCk6IHN0cmluZyB7XG4gIHJldHVybiBbXG4gICAgJyMhL2Jpbi9iYXNoJyxcbiAgICAnc2V0IC1lJyxcbiAgICAnZWNobyBcIiMjIERyaWZ0IERldGVjdGlvbiBTdW1tYXJ5XCIgPj4gJEdJVEhVQl9TVEVQX1NVTU1BUlknLFxuICAgICdlY2hvIFwiXCIgPj4gJEdJVEhVQl9TVEVQX1NVTU1BUlknLFxuICAgICcnLFxuICAgICd0b3RhbF9zdGFja3M9MCcsXG4gICAgJ3RvdGFsX2RyaWZ0ZWQ9MCcsXG4gICAgJ3RvdGFsX2Vycm9ycz0wJyxcbiAgICAnJyxcbiAgICAnc2hvcHQgLXMgbnVsbGdsb2InLFxuICAgICdmb3IgZmlsZSBpbiBkcmlmdC1yZXN1bHRzLSouanNvbiBkcmlmdC1yZXN1bHRzLyovZHJpZnQtcmVzdWx0cy0qLmpzb247IGRvJyxcbiAgICAnICBpZiBbWyAtZiBcIiRmaWxlXCIgXV07IHRoZW4nLFxuICAgICcgICAgc3RhZ2U9JChiYXNlbmFtZSBcIiRmaWxlXCIgfCBzZWQgLUUgXFxcInMvXmRyaWZ0LXJlc3VsdHMtKFteLl0rKVxcXFwuanNvbiQvXFxcXDEvXFxcIiknLFxuICAgICcgICAgZWNobyBcIiMjIyBTdGFnZTogJHN0YWdlXCIgPj4gJEdJVEhVQl9TVEVQX1NVTU1BUlknLFxuICAgICcgICAganEgLXIgXFwnJyArXG4gICAgICAnLiBhcyAkcmVzdWx0cyB8XFxuJyArXG4gICAgICAnXCItIFRvdGFsIHN0YWNrczogXCIgKyAoJHJlc3VsdHMgfCBsZW5ndGggfCB0b3N0cmluZykgKyBcIlxcXFxuXCIgK1xcbicgK1xuICAgICAgJ1wiLSBEcmlmdGVkOiBcIiArIChbLltdIHwgc2VsZWN0KC5kcmlmdFN0YXR1cyA9PSBcIkRSSUZURURcIildIHwgbGVuZ3RoIHwgdG9zdHJpbmcpICsgXCJcXFxcblwiICtcXG4nICtcbiAgICAgICdcIi0gRXJyb3JzOiBcIiArIChbLltdIHwgc2VsZWN0KC5lcnJvcildIHwgbGVuZ3RoIHwgdG9zdHJpbmcpICsgXCJcXFxcblwiICtcXG4nICtcbiAgICAgICcoWy5bXSB8IHNlbGVjdCguZHJpZnRTdGF0dXMgPT0gXCJEUklGVEVEXCIpXSB8IGlmIGxlbmd0aCA+IDAgdGhlbiBcIlxcXFxuKipEcmlmdGVkIHN0YWNrczoqKlxcXFxuXCIgKyAobWFwKFwiICAtIFwiICsgLnN0YWNrTmFtZSArIFwiIChcIiArICgoLmRyaWZ0ZWRSZXNvdXJjZXMgLy8gW10pIHwgbGVuZ3RoIHwgdG9zdHJpbmcpICsgXCIgcmVzb3VyY2VzKVwiKSB8IGpvaW4oXCJcXFxcblwiKSkgZWxzZSBcIlwiIGVuZClcXG4nICtcbiAgICAnXFwnJyArXG4gICAgJyBcIiRmaWxlXCIgPj4gJEdJVEhVQl9TVEVQX1NVTU1BUlknLFxuICAgICcgICAgZWNobyBcIlwiID4+ICRHSVRIVUJfU1RFUF9TVU1NQVJZJyxcbiAgICAnICAgIHRvdGFsX3N0YWNrcz0kKCh0b3RhbF9zdGFja3MgKyAkKGpxIFxcXCJsZW5ndGhcXFwiIFxcXCIkZmlsZVxcXCIpKSknLFxuICAgICcgICAgdG90YWxfZHJpZnRlZD0kKCh0b3RhbF9kcmlmdGVkICsgJChqcSBcXFwiWy5bXSB8IHNlbGVjdCguZHJpZnRTdGF0dXMgPT0gXFxcXFxcXCJEUklGVEVEXFxcXFxcXCIpXSB8IGxlbmd0aFxcXCIgXFxcIiRmaWxlXFxcIikpKScsXG4gICAgJyAgICB0b3RhbF9lcnJvcnM9JCgodG90YWxfZXJyb3JzICsgJChqcSBcXFwiWy5bXSB8IHNlbGVjdCguZXJyb3IpXSB8IGxlbmd0aFxcXCIgXFxcIiRmaWxlXFxcIikpKScsXG4gICAgJyAgZmknLFxuICAgICdkb25lJyxcbiAgICAnJyxcbiAgICAnZWNobyBcIiMjIyBPdmVyYWxsIFN1bW1hcnlcIiA+PiAkR0lUSFVCX1NURVBfU1VNTUFSWScsXG4gICAgJ2VjaG8gXCItIFRvdGFsIHN0YWNrcyBjaGVja2VkOiAkdG90YWxfc3RhY2tzXCIgPj4gJEdJVEhVQl9TVEVQX1NVTU1BUlknLFxuICAgICdlY2hvIFwiLSBUb3RhbCBkcmlmdGVkIHN0YWNrczogJHRvdGFsX2RyaWZ0ZWRcIiA+PiAkR0lUSFVCX1NURVBfU1VNTUFSWScsXG4gICAgJ2VjaG8gXCItIFRvdGFsIGVycm9yczogJHRvdGFsX2Vycm9yc1wiID4+ICRHSVRIVUJfU1RFUF9TVU1NQVJZJyxcbiAgICAnJyxcbiAgICAnaWYgW1sgJHRvdGFsX2RyaWZ0ZWQgLWd0IDAgXV07IHRoZW4nLFxuICAgICcgIGVjaG8gXCJcIiA+PiAkR0lUSFVCX1NURVBfU1VNTUFSWScsXG4gICAgJyAgZWNobyBcIuKaoO+4jyAqKkFjdGlvbiByZXF1aXJlZDoqKiBEcmlmdCBkZXRlY3RlZCBpbiAkdG90YWxfZHJpZnRlZCBzdGFja3NcIiA+PiAkR0lUSFVCX1NURVBfU1VNTUFSWScsXG4gICAgJ2ZpJyxcbiAgXS5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gdG9LZWJhYkNhc2Uoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHMucmVwbGFjZSgvW15hLXpBLVowLTldKy9nLCAnLScpLnJlcGxhY2UoL14tK3wtKyQvZywgJycpLnRvTG93ZXJDYXNlKCk7XG59XG4iXX0=
304
+ function toGithubJobId(s) {
305
+ // GitHub job_id must start with a letter or underscore and contain only A-Za-z0-9, '-', '_'
306
+ // 1) Replace any disallowed chars with '-'
307
+ let out = s.replace(/[^A-Za-z0-9_-]+/g, '-');
308
+ // 2) Collapse consecutive dashes
309
+ out = out.replace(/-+/g, '-');
310
+ // 3) Trim leading/trailing dashes (underscores are allowed at start)
311
+ out = out.replace(/^-+|-+$/g, '');
312
+ // 4) Lowercase for consistency (not required by GitHub but keeps things stable)
313
+ out = out.toLowerCase();
314
+ // 5) Ensure it starts with a letter or underscore
315
+ if (!out || !/^[a-z_]/i.test(out)) {
316
+ out = `s-${out}`;
317
+ }
318
+ return out;
319
+ }
320
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2RrRHJpZnREZXRlY3Rpb25Xb3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9DZGtEcmlmdERldGVjdGlvbldvcmtmbG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsOENBQTJEO0FBQzNELHVFQUFrRTtBQUNsRSxpRkFBMkU7QUFFM0UsTUFBTSxrQ0FBa0MsR0FBRyxJQUFJLENBQUM7QUFDaEQsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLENBQUM7QUFDMUMsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLENBQUM7QUFDM0MsTUFBTSxrQ0FBa0MsR0FBRyxJQUFJLENBQUM7QUFDaEQsTUFBTSxvQ0FBb0MsR0FBRyxJQUFJLENBQUM7QUFDbEQsTUFBTSxnQ0FBZ0MsR0FBRyxJQUFJLENBQUM7QUErQzlDLE1BQWEseUJBQXlCO0lBR3BDLFlBQVksS0FBcUM7UUFDL0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSSxpQkFBaUIsQ0FBQztRQUNyRCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQzVDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDO1FBQ2hELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDO1FBQ2hELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDOUIsTUFBTSxnQkFBZ0IsR0FBRSxLQUFLLENBQUMsZ0JBQWdCLElBQUksMkNBQTJDLENBQUM7UUFFOUYsa0VBQWtFO1FBQ2xFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM3QyxJQUFJLG9EQUF1QixDQUFDO2dCQUMxQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87Z0JBQ3RCLFVBQVUsRUFBRSxnQkFBZ0I7YUFDN0IsQ0FBQyxDQUFDO1lBQ0gseUJBQXlCLENBQUMsYUFBYSxH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LDRGQUE0RjtJQUM1RiwyQ0FBMkM7SUFDM0MsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3QyxpQ0FBaUM7SUFDakMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLHFFQUFxRTtJQUNyRSxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEMsZ0ZBQWdGO0lBQ2hGLEdBQUcsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsa0RBQWtEO0lBQ2xELElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEMsR0FBRyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdpdEh1YiwgR2l0aHViV29ya2Zsb3cgfSBmcm9tICdwcm9qZW4vbGliL2dpdGh1Yic7XG5pbXBvcnQgeyBKb2JQZXJtaXNzaW9uIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcbmltcG9ydCB7IENka0RyaWZ0RGV0ZWN0aW9uU2NyaXB0IH0gZnJvbSAnLi9iaW4vY2RrLWRyaWZ0LWRldGVjdGlvbi1zY3JpcHQnO1xuXG5jb25zdCBnaXRodWJBY3Rpb25zQXdzQ3JlZGVudGlhbHNWZXJzaW9uID0gJ3Y1JztcbmNvbnN0IGdpdGh1YkFjdGlvbnNDaGVja291dFZlcnNpb24gPSAndjUnO1xuY29uc3QgZ2l0aHViQWN0aW9uc1NldHVwTm9kZVZlcnNpb24gPSAndjUnO1xuY29uc3QgZ2l0aHViQWN0aW9uc1VwbG9hZEFydGlmYWN0VmVyc2lvbiA9ICd2NCc7XG5jb25zdCBnaXRodWJBY3Rpb25zRG93bmxvYWRBcnRpZmFjdFZlcnNpb24gPSAndjUnO1xuY29uc3QgZ2l0aHViQWN0aW9uc0dpdGh1YlNjcmlwdFZlcnNpb24gPSAndjgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrIHtcbiAgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRyaWZ0RGV0ZWN0aW9uUm9sZVRvQXNzdW1lUmVnaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRyaWZ0RGV0ZWN0aW9uUm9sZVRvQXNzdW1lQXJuOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZhaWxPbkRyaWZ0PzogYm9vbGVhbjsgLy8gaWYgdHJ1ZSwgZmFpbCBqb2Igd2hlbiBkcmlmdCBkZXRlY3RlZCAoZGVmYXVsdCB0cnVlKVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENka0RyaWZ0RGV0ZWN0aW9uV29ya2Zsb3dQcm9wcyB7XG4gIHJlYWRvbmx5IHNjcmlwdE91dHB1dFBhdGg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb2plY3Q6IGFueTsgLy8gYXZvaWQgZXhwb3J0aW5nIHByb2plbiB0eXBlcyBpbiBwdWJsaWMgQVBJXG4gIHJlYWRvbmx5IHdvcmtmbG93TmFtZT86IHN0cmluZzsgLy8gd29ya2Zsb3cgd29ya2Zsb3dOYW1lIChhbHNvIHVzZWQgdG8gZGVyaXZlIGZpbGUgd29ya2Zsb3dOYW1lKVxuICByZWFkb25seSBzY2hlZHVsZT86IHN0cmluZzsgLy8gY3JvbiBleHByZXNzaW9uLCBlLmcuICcwIDAgKiAqIConXG4gIHJlYWRvbmx5IGNyZWF0ZUlzc3Vlcz86IGJvb2xlYW47IC8vIGNyZWF0ZS91cGRhdGUgaXNzdWUgd2hlbiBkcmlmdCBkZXRlY3RlZCBvbiBzY2hlZHVsZSAoZGVmYXVsdCB0cnVlKVxuICByZWFkb25seSBvaWRjUm9sZUFybjogc3RyaW5nOyAvLyBkZWZhdWx0IE9JREMgcm9sZSBBUk4gdG8gYXNzdW1lIGZvciBhbGwgc3RhY2tzXG4gIHJlYWRvbmx5IG9pZGNSZWdpb246IHN0cmluZzsgLy8gZGVmYXVsdCBPSURDIHJlZ2lvbiB0byBhc3N1bWUgZm9yIGFsbCBzdGFja3NcbiAgcmVhZG9ubHkgc3RhY2tzOiBTdGFja1tdO1xuICByZWFkb25seSBub2RlVmVyc2lvbj86IHN0cmluZzsgLy8gZS5nLiwgJzI0LngnXG4gIC8qKlxuICAgKiBPcHRpb25hbCBob29rIHRvIGFwcGVuZCBhZGRpdGlvbmFsIEdpdEh1YiBBY3Rpb25zIHN0ZXBzIGFmdGVyIGRyaWZ0IGRldGVjdGlvbiBwZXIgc3RhY2suXG4gICAqIFlvdSBjYW4gc3VwcGx5IGEgc3RhdGljIGFycmF5IG9mIHN0ZXBzLCBvciBhIGZhY3RvcnkgdGhhdCByZWNlaXZlcyBjb250ZXh0IGFuZCByZXR1cm5zIHN0ZXBzLlxuICAgKi9cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFkZGl0aW9uYWwgR2l0SHViIEFjdGlvbiBzdGVwcyB0byBydW4gYWZ0ZXIgZHJpZnQgZGV0ZWN0aW9uIGZvciBlYWNoIHN0YWNrLlxuICAgKiBUaGVzZSBzdGVwcyBhcmUgaW5zZXJ0ZWQgYWZ0ZXIgYSAnUHJlcGFyZSBub3RpZmljYXRpb24gcGF5bG9hZCcgc3RlcCB3aGljaCBleHBvc2VzXG4gICAqIGEgU2xhY2stY29tcGF0aWJsZSBKU09OIHBheWxvYWQgYXQgYCR7eyBzdGVwcy5ub3RpZnkub3V0cHV0cy5yZXN1bHQgfX1gLlxuICAgKi9cbiAgLy8gTk9URToganNpaSBkb2VzIG5vdCBzdXBwb3J0IGZ1bmN0aW9uIHR5cGVzIGluIHB1YmxpYyBBUElzOyB1c2UgJ2FueScgaGVyZSBhbmQgYWNjZXB0IGVpdGhlcjpcbiAgLy8gLSBBbiBhcnJheSBvZiBHaXRIdWIgc3RlcHMsIG9yXG4gIC8vIC0gQSBmdW5jdGlvbiAoY3R4OiB7IHN0YWNrOiBzdHJpbmcgfSkgPT4gR2l0SHViU3RlcFtdXG4gIC8vIFRoZSBjb25zdHJ1Y3RvciBoYW5kbGVzIGJvdGggYXQgcnVudGltZS5cbiAgcmVhZG9ubHkgcG9zdEdpdEh1YlN0ZXBzPzogYW55O1xufVxuXG50eXBlIEdpdEh1YlN0ZXAgPSB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBpZj86IHN0cmluZztcbiAgdXNlcz86IHN0cmluZztcbiAgcnVuPzogc3RyaW5nO1xuICB3aXRoPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgY29udGludWVPbkVycm9yPzogYm9vbGVhbjtcbiAgc2hlbGw/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY2xhc3MgQ2RrRHJpZnREZXRlY3Rpb25Xb3JrZmxvdyB7XG4gIHByaXZhdGUgc3RhdGljIHNjcmlwdENyZWF0ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQ2RrRHJpZnREZXRlY3Rpb25Xb3JrZmxvd1Byb3BzKSB7XG4gICAgY29uc3QgbmFtZSA9IHByb3BzLndvcmtmbG93TmFtZSA/PyAnZHJpZnQtZGV0ZWN0aW9uJztcbiAgICBjb25zdCBmaWxlTmFtZSA9IHRvS2ViYWJDYXNlKG5hbWUpICsgJy55bWwnO1xuICAgIGNvbnN0IG5vZGVWZXJzaW9uID0gcHJvcHMubm9kZVZlcnNpb24gPz8gJzI0LngnO1xuICAgIGNvbnN0IGNyZWF0ZUlzc3VlcyA9IHByb3BzLmNyZWF0ZUlzc3VlcyA/PyB0cnVlO1xuICAgIGNvbnN0IHByb2plY3QgPSBwcm9wcy5wcm9qZWN0O1xuICAgIGNvbnN0IHNjcmlwdE91dHB1dFBhdGg9IHByb3BzLnNjcmlwdE91dHB1dFBhdGggPz8gJy5naXRodWIvd29ya2Zsb3dzL3NjcmlwdHMvZGV0ZWN0LWRyaWZ0LnRzJztcblxuICAgIC8vIE9ubHkgY3JlYXRlIHRoZSBkcmlmdCBkZXRlY3Rpb24gc2NyaXB0IG9uY2UgdG8gYXZvaWQgY29sbGlzaW9uc1xuICAgIGlmICghQ2RrRHJpZnREZXRlY3Rpb25Xb3JrZmxvdy5zY3JpcHRDcmVhdGVkKSB7XG4gICAgICBuZXcgQ2RrRHJpZnREZXRlY3Rpb25TY3JpcHQoe1xuICAgICAgICBwcm9qZWN0OiBwcm9wcy5wcm9qZWN0LFxuICAgICAgICBvdXRwdXRQYXRoOiBzY3JpcHRPdXRwdXRQYXRoLFxuICAgICAgfSk7XG4gICAgICBDZGtEcmlmdERldGVjdGlvbldvcmtmbG93LnNjcmlwdENyZWF0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGdoID0gKHByb2plY3QgYXMgYW55KS5naXRodWIgPz8gbmV3IEdpdEh1Yihwcm9qZWN0KTtcbiAgICBjb25zdCB3b3JrZmxvdyA9IG5ldyBHaXRodWJXb3JrZmxvdyhnaCwgbmFtZSwgeyBmaWxlTmFtZSB9KTtcblxuICAgIC8vIHRyaWdnZXJzOiBzY2hlZHVsZSArIG1hbnVhbCBkaXNwYXRjaCB3aXRoIHN0YWNrIGNob2ljZVxuICAgIGNvbnN0IHN0YWNrQ2hvaWNlcyA9IHByb3BzLnN0YWNrcy5tYXAoKHMpID0+IHMuc3RhY2tOYW1lKTtcbiAgICB3b3JrZmxvdy5vbih7XG4gICAgICBzY2hlZHVsZTogcHJvcHMuc2NoZWR1bGUgPyBbeyBjcm9uOiBwcm9wcy5zY2hlZHVsZSB9XSA6IHVuZGVmaW5lZCxcbiAgICAgIHdvcmtmbG93RGlzcGF0Y2g6IHtcbiAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgc3RhY2s6IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnU3RhY2sgdG8gY2hlY2sgZm9yIGRyaWZ0IChsZWF2ZSBlbXB0eSBmb3IgYWxsKScsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiAnY2hvaWNlJyxcbiAgICAgICAgICAgIG9wdGlvbnM6IHN0YWNrQ2hvaWNlcyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIE9uZSBqb2IgcGVyIHN0YWNrXG4gICAgY29uc3Qgam9iczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBzdGFjayBvZiBwcm9wcy5zdGFja3MpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZFN0YWNrTmFtZSA9IHRvS2ViYWJDYXNlKHRvR2l0aHViSm9iSWQoc3RhY2suc3RhY2tOYW1lKSk7XG4gICAgICBjb25zdCBvcmlnaW5hbFN0YWNrTmFtZSA9IHN0YWNrLnN0YWNrTmFtZTtcbiAgICAgIGNvbnN0IGpvYklkID0gYGRyaWZ0LSR7c2FuaXRpemVkU3RhY2tOYW1lfWA7XG4gICAgICBjb25zdCByZXN1bHRzRmlsZSA9IGBkcmlmdC1yZXN1bHRzLSR7c2FuaXRpemVkU3RhY2tOYW1lfS5qc29uYDtcbiAgICAgIGNvbnN0IGlubmVyQ29uZCA9IFwiZ2l0aHViLmV2ZW50X25hbWUgPT0gJ3NjaGVkdWxlJyB8fCAhZ2l0aHViLmV2ZW50LmlucHV0cy5zdGFjayB8fCBnaXRodWIuZXZlbnQuaW5wdXRzLnN0YWNrID09ICdcIiArIHNhbml0aXplZFN0YWNrTmFtZSArIFwiJyB8fCBnaXRodWIuZXZlbnQuaW5wdXRzLnN0YWNrID09ICdcIiArIG9yaWdpbmFsU3RhY2tOYW1lICsgXCInXCI7XG4gICAgICBjb25zdCBjb25kRXhwciA9ICcke3sgJyArIGlubmVyQ29uZCArICcgfX0nO1xuICAgICAgY29uc3Qgbm90Q29uZEV4cHIgPSAnJHt7ICEoJyArIGlubmVyQ29uZCArICcpIH19JztcblxuICAgICAgY29uc3QgcmF3UG9zdCA9IHByb3BzLnBvc3RHaXRIdWJTdGVwcztcbiAgICAgIGNvbnN0IHBvc3RTdGVwczogR2l0SHViU3RlcFtdID0gdHlwZW9mIHJhd1Bvc3QgPT09ICdmdW5jdGlvbicgPyAocmF3UG9zdCBhcyAoY3R4OiB7IHN0YWNrOiBzdHJpbmcgfSkgPT4gR2l0SHViU3RlcFtdKSh7IHN0YWNrOiBzYW5pdGl6ZWRTdGFja05hbWUgfSkgOiAocmF3UG9zdCA/PyBbXSk7XG5cbiAgICAgIGpvYnNbam9iSWRdID0ge1xuICAgICAgICBuYW1lOiBgRHJpZnQgRGV0ZWN0aW9uIC0gJHtzYW5pdGl6ZWRTdGFja05hbWV9YCxcbiAgICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICAgIGlkVG9rZW46IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgICAgaXNzdWVzOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgICB9LFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICBBV1NfREVGQVVMVF9SRUdJT046IHN0YWNrLmRyaWZ0RGV0ZWN0aW9uUm9sZVRvQXNzdW1lUmVnaW9uLFxuICAgICAgICAgIEFXU19SRUdJT046IHN0YWNrLmRyaWZ0RGV0ZWN0aW9uUm9sZVRvQXNzdW1lUmVnaW9uLFxuICAgICAgICAgIERSSUZUX0RFVEVDVElPTl9PVVRQVVQ6IHJlc3VsdHNGaWxlLFxuICAgICAgICAgIFNUQUdFX05BTUU6IHNhbml0aXplZFN0YWNrTmFtZSxcbiAgICAgICAgICBTVEFDS19OQU1FOiBzdGFjay5zdGFja05hbWUsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIE5vIGpvYi1sZXZlbCBjb25kaXRpb247IHdlIGdhdGUgc3RlcHMgc28gdGhlIGpvYiBhbHdheXMgY29tcGxldGVzIGFuZCBzdW1tYXJ5IGNhbiBydW5cbiAgICAgICAgc3RlcHM6IFtcbiAgICAgICAgICB7IG5hbWU6ICdTa2lwIChzdGFjayBub3Qgc2VsZWN0ZWQpJywgaWY6IG5vdENvbmRFeHByLCBydW46ICdlY2hvIFwiU3RhZ2Ugbm90IHNlbGVjdGVkOyBza2lwcGluZyBkcmlmdCBkZXRlY3Rpb24gZm9yIHRoaXMgam9iLlwiJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ0NoZWNrb3V0JywgaWY6IGNvbmRFeHByLCB1c2VzOiBgYWN0aW9ucy9jaGVja291dEAke2dpdGh1YkFjdGlvbnNDaGVja291dFZlcnNpb259YCB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdTZXR1cCBOb2RlLmpzJyxcbiAgICAgICAgICAgIGlmOiBjb25kRXhwcixcbiAgICAgICAgICAgIHVzZXM6IGBhY3Rpb25zL3NldHVwLW5vZGVAJHtnaXRodWJBY3Rpb25zU2V0dXBOb2RlVmVyc2lvbn1gLFxuICAgICAgICAgICAgd2l0aDogeyAnbm9kZS12ZXJzaW9uJzogbm9kZVZlcnNpb24gfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgbmFtZTogJ0luc3RhbGwgZGVwZW5kZW5jaWVzJywgaWY6IGNvbmRFeHByLCBydW46ICd5YXJuIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgfHwgbnBtIGNpJywgZW52OiB7IEdJVEhVQl9UT0tFTjogJyR7eyBzZWNyZXRzLkdJVEhVQl9UT0tFTiB9fScgfSB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdBV1MgQ3JlZGVudGlhbHMnLFxuICAgICAgICAgICAgaWY6IGNvbmRFeHByLFxuICAgICAgICAgICAgaWQ6ICdjcmVkcycsXG4gICAgICAgICAgICB1c2VzOiBgYXdzLWFjdGlvbnMvY29uZmlndXJlLWF3cy1jcmVkZW50aWFsc0Ake2dpdGh1YkFjdGlvbnNBd3NDcmVkZW50aWFsc1ZlcnNpb259YCxcbiAgICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICAgJ3JvbGUtdG8tYXNzdW1lJzogcHJvcHMub2lkY1JvbGVBcm4sXG4gICAgICAgICAgICAgICdyb2xlLXNlc3Npb24tbmFtZSc6ICdHaXRIdWJBY3Rpb24nLFxuICAgICAgICAgICAgICAnYXdzLXJlZ2lvbic6IHByb3BzLm9pZGNSZWdpb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ0Fzc3VtZSBEcmlmdCBEZXRlY3Rpb24gUm9sZScsXG4gICAgICAgICAgICBpZjogY29uZEV4cHIsXG4gICAgICAgICAgICB1c2VzOiBgYXdzLWFjdGlvbnMvY29uZmlndXJlLWF3cy1jcmVkZW50aWFsc0Ake2dpdGh1YkFjdGlvbnNBd3NDcmVkZW50aWFsc1ZlcnNpb259YCxcbiAgICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICAgJ3JvbGUtdG8tYXNzdW1lJzogc3RhY2suZHJpZnREZXRlY3Rpb25Sb2xlVG9Bc3N1bWVBcm4sXG4gICAgICAgICAgICAgICdyb2xlLWNoYWluaW5nJzogdHJ1ZSxcbiAgICAgICAgICAgICAgJ3JvbGUtc2tpcC1zZXNzaW9uLXRhZ2dpbmcnOiB0cnVlLFxuICAgICAgICAgICAgICAnYXdzLXJlZ2lvbic6IHN0YWNrLmRyaWZ0RGV0ZWN0aW9uUm9sZVRvQXNzdW1lUmVnaW9uLFxuICAgICAgICAgICAgICAnYXdzLWFjY2Vzcy1rZXktaWQnOiAnJHt7IHN0ZXBzLmNyZWRzLm91dHB1dHMuYXdzLWFjY2Vzcy1rZXktaWQgfX0nLFxuICAgICAgICAgICAgICAnYXdzLXNlY3JldC1hY2Nlc3Mta2V5JzogJyR7eyBzdGVwcy5jcmVkcy5vdXRwdXRzLmF3cy1zZWNyZXQtYWNjZXNzLWtleSB9fScsXG4gICAgICAgICAgICAgICdhd3Mtc2Vzc2lvbi10b2tlbic6ICcke3sgc3RlcHMuY3JlZHMub3V0cHV0cy5hd3Mtc2Vzc2lvbi10b2tlbiB9fScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ0RldGVjdCBkcmlmdCcsXG4gICAgICAgICAgICBpZjogY29uZEV4cHIsXG4gICAgICAgICAgICBpZDogJ2RyaWZ0JyxcbiAgICAgICAgICAgIGNvbnRpbnVlT25FcnJvcjogdHJ1ZSwgLy8gYWxsb3cgYXJ0aWZhY3QgdXBsb2FkIGFuZCBpc3N1ZSBjcmVhdGlvbiBldmVuIHdoZW4gZHJpZnQgaXMgZGV0ZWN0ZWRcbiAgICAgICAgICAgIHJ1bjogW1xuICAgICAgICAgICAgICAnc2V0IC1lJyxcbiAgICAgICAgICAgICAgLy8gVXNlIHRoZSBidW5kbGVkIHNjcmlwdCBmcm9tIHRoaXMgcGFja2FnZVxuICAgICAgICAgICAgICAnbm9kZSAuL25vZGVfbW9kdWxlcy9AampyYXdsaW5zL2Nkay1kaWZmLXByLWdpdGh1Yi1hY3Rpb24vbGliL2Jpbi9kZXRlY3QtZHJpZnQuanMnLFxuICAgICAgICAgICAgICAnaWYgWyAtZiBcIiREUklGVF9ERVRFQ1RJT05fT1VUUFVUXCIgXTsgdGhlbiBlY2hvIFwiUmVzdWx0cyBmaWxlIGNyZWF0ZWQ6ICREUklGVF9ERVRFQ1RJT05fT1VUUFVUXCI7IGZpJyxcbiAgICAgICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgICAgICBlbnY6IHtcbiAgICAgICAgICAgICAgU1RBQ0tfTkFNRTogc3RhY2suc3RhY2tOYW1lLFxuICAgICAgICAgICAgICBBV1NfUkVHSU9OOiBzdGFjay5kcmlmdERldGVjdGlvblJvbGVUb0Fzc3VtZVJlZ2lvbixcbiAgICAgICAgICAgICAgRFJJRlRfREVURUNUSU9OX09VVFBVVDogcmVzdWx0c0ZpbGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ1VwbG9hZCByZXN1bHRzJyxcbiAgICAgICAgICAgIGlmOiBjb25kRXhwcixcbiAgICAgICAgICAgIHVzZXM6IGBhY3Rpb25zL3VwbG9hZC1hcnRpZmFjdEAke2dpdGh1YkFjdGlvbnNVcGxvYWRBcnRpZmFjdFZlcnNpb259YCxcbiAgICAgICAgICAgIHdpdGg6IHsgbmFtZTogYGRyaWZ0LXJlc3VsdHMtJHtzYW5pdGl6ZWRTdGFja05hbWV9YCwgcGF0aDogcmVzdWx0c0ZpbGUsIGlmTm9GaWxlc0ZvdW5kOiAnaWdub3JlJyB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ1ByZXBhcmUgbm90aWZpY2F0aW9uIHBheWxvYWQnLFxuICAgICAgICAgICAgaWY6IGNvbmRFeHByLFxuICAgICAgICAgICAgaWQ6ICdub3RpZnknLFxuICAgICAgICAgICAgdXNlczogYGFjdGlvbnMvZ2l0aHViLXNjcmlwdEAke2dpdGh1YkFjdGlvbnNHaXRodWJTY3JpcHRWZXJzaW9ufWAsXG4gICAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICAgICdyZXN1bHQtZW5jb2RpbmcnOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgJ3NjcmlwdCc6IG5vdGlmaWNhdGlvblNjcmlwdChzYW5pdGl6ZWRTdGFja05hbWUsIHN0YWNrLmRyaWZ0RGV0ZWN0aW9uUm9sZVRvQXNzdW1lUmVnaW9uLCByZXN1bHRzRmlsZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4ucG9zdFN0ZXBzLm1hcCgoc3RlcCkgPT4gKHtcbiAgICAgICAgICAgIC8vIEJ5IGRlZmF1bHQsIG9ubHkgcnVuIGV4dHJhIG5vdGlmaWNhdGlvbiBzdGVwcyB3aGVuIGRyaWZ0IG9jY3Vyc1xuICAgICAgICAgICAgaWY6IChzdGVwIGFzIGFueSkuaWYgPz8gXCJhbHdheXMoKSAmJiBzdGVwcy5kcmlmdC5vdXRjb21lID09ICdmYWlsdXJlJ1wiLFxuICAgICAgICAgICAgLi4uKHN0ZXAgYXMgYW55KSxcbiAgICAgICAgICB9KSksXG4gICAgICAgICAgLi4uKFxuICAgICAgICAgICAgY3JlYXRlSXNzdWVzXG4gICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdDcmVhdGUgSXNzdWUgb24gRHJpZnQnLFxuICAgICAgICAgICAgICAgICAgaWY6IFwiYWx3YXlzKCkgJiYgc3RlcHMuZHJpZnQub3V0Y29tZSA9PSAnZmFpbHVyZSdcIixcbiAgICAgICAgICAgICAgICAgIHVzZXM6IGBhY3Rpb25zL2dpdGh1Yi1zY3JpcHRAJHtnaXRodWJBY3Rpb25zR2l0aHViU2NyaXB0VmVyc2lvbn1gLFxuICAgICAgICAgICAgICAgICAgd2l0aDogeyBzY3JpcHQ6IGlzc3VlU2NyaXB0KHNhbml0aXplZFN0YWNrTmFtZSwgc3RhY2suZHJpZnREZXRlY3Rpb25Sb2xlVG9Bc3N1bWVSZWdpb24sIHJlc3VsdHNGaWxlKSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgICksXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIHN1bW1hcnkgYWdncmVnYXRvciBqb2JcbiAgICBqb2JzWydkcmlmdC1zdW1tYXJ5J10gPSB7XG4gICAgICBuYW1lOiAnRHJpZnQgRGV0ZWN0aW9uIFN1bW1hcnknLFxuICAgICAgbmVlZHM6IE9iamVjdC5rZXlzKGpvYnMpLmZpbHRlcigoaikgPT4gai5zdGFydHNXaXRoKCdkcmlmdC0nKSAmJiBqICE9PSAnZHJpZnQtc3VtbWFyeScpLFxuICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgIHBlcm1pc3Npb25zOiB7IGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQgfSxcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnRG93bmxvYWQgYWxsIGFydGlmYWN0cycsXG4gICAgICAgICAgdXNlczogYGFjdGlvbnMvZG93bmxvYWQtYXJ0aWZhY3RAJHtnaXRodWJBY3Rpb25zRG93bmxvYWRBcnRpZmFjdFZlcnNpb259YCxcbiAgICAgICAgICB3aXRoOiB7IHBhdGg6ICdkcmlmdC1yZXN1bHRzJyB9LFxuICAgICAgICB9LFxuICAgICAgICB7IG5hbWU6ICdHZW5lcmF0ZSBzdW1tYXJ5Jywgc2hlbGw6ICdiYXNoJywgcnVuOiBzdW1tYXJ5U2NyaXB0KCkgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIHdvcmtmbG93LmFkZEpvYnMoam9icyk7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBpc3N1ZVNjcmlwdChzdGFnZTogc3RyaW5nLCByZWdpb246IHN0cmluZywgcmVzdWx0c0ZpbGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIENvbnN0cnVjdCBhIHBsYWluIEpTIHNjcmlwdCBzdHJpbmcgKG5vIHRlbXBsYXRlIHN0cmluZyBuZXN0aW5nIG1pc2hhcHMpXG4gIGNvbnN0IGxpbmVzID0gW1xuICAgIFwiY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1wiLFxuICAgIGBjb25zdCByZXN1bHRzRmlsZSA9ICcke3Jlc3VsdHNGaWxlfSc7YCxcbiAgICBcImlmICghZnMuZXhpc3RzU3luYyhyZXN1bHRzRmlsZSkpIHsgY29uc29sZS5sb2coJ05vIHJlc3VsdHMgZmlsZSBmb3VuZCcpOyByZXR1cm47IH1cIixcbiAgICBcImNvbnN0IHJlc3VsdHMgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhyZXN1bHRzRmlsZSwgJ3V0ZjgnKSk7XCIsXG4gICAgXCJjb25zdCBkcmlmdGVkU3RhY2tzID0gcmVzdWx0cy5maWx0ZXIociA9PiByLmRyaWZ0U3RhdHVzID09PSAnRFJJRlRFRCcpO1wiLFxuICAgIFwiaWYgKGRyaWZ0ZWRTdGFja3MubGVuZ3RoID09PSAwKSB7IGNvbnNvbGUubG9nKCdObyBkcmlmdCBkZXRlY3RlZCcpOyByZXR1cm47IH1cIixcbiAgICBgY29uc3QgdGl0bGUgPSAnRHJpZnQgRGV0ZWN0ZWQgaW4gJHtzdGFnZX0nO2AsXG4gICAgYGxldCBib2R5ID0gJyMjIERyaWZ0IERldGVjdGlvbiBSZXBvcnRcXFxcblxcXFxuJyArICcqKlN0YWdlOioqICR7c3RhZ2V9XFxcXG4nICsgJyoqUmVnaW9uOioqICR7cmVnaW9ufVxcXFxuJyArICcqKlRpbWU6KiogJyArIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSArICdcXFxcblxcXFxuJztgLFxuICAgIFwiYm9keSArPSAnIyMjIFN1bW1hcnlcXFxcbic7XCIsXG4gICAgXCJib2R5ICs9ICctIFRvdGFsIHN0YWNrcyBjaGVja2VkOiAnICsgcmVzdWx0cy5sZW5ndGggKyAnXFxcXG4nO1wiLFxuICAgIFwiYm9keSArPSAnLSBEcmlmdGVkIHN0YWNrczogJyArIGRyaWZ0ZWRTdGFja3MubGVuZ3RoICsgJ1xcXFxuXFxcXG4nO1wiLFxuICAgIFwiYm9keSArPSAnIyMjIERyaWZ0ZWQgU3RhY2tzXFxcXG4nO1wiLFxuICAgICdmb3IgKGNvbnN0IHMgb2YgZHJpZnRlZFN0YWNrcykgeycsXG4gICAgJyAgY29uc3QgcmVzb3VyY2VzID0gcy5kcmlmdGVkUmVzb3VyY2VzIHx8IFtdOycsXG4gICAgXCIgIGJvZHkgKz0gJyMjIyMgJyArIHMuc3RhY2tOYW1lICsgJ1xcXFxuJztcIixcbiAgICBcIiAgYm9keSArPSAnLSBEcmlmdGVkIHJlc291cmNlczogJyArIHJlc291cmNlcy5sZW5ndGggKyAnXFxcXG4nO1wiLFxuICAgIFwiICBmb3IgKGNvbnN0IHIgb2YgcmVzb3VyY2VzKSB7IGJvZHkgKz0gJyAgLSAnICsgci5sb2dpY2FsUmVzb3VyY2VJZCArICcgKCcgKyByLnJlc291cmNlVHlwZSArICcpXFxcXG4nOyB9XCIsXG4gICAgXCIgIGJvZHkgKz0gJ1xcXFxuJztcIixcbiAgICAnfScsXG4gICAgXCJib2R5ICs9ICcjIyMgQWN0aW9uIFJlcXVpcmVkXFxcXG4nICsgJ1BsZWFzZSByZXZpZXcgdGhlIGRyaWZ0ZWQgcmVzb3VyY2VzIGFuZCBlaXRoZXI6XFxcXG4xLiBVcGRhdGUgdGhlIGluZnJhc3RydWN0dXJlIGNvZGUgdG8gbWF0Y2ggdGhlIGFjdHVhbCBzdGF0ZVxcXFxuMi4gUmVzdG9yZSB0aGUgcmVzb3VyY2VzIHRvIG1hdGNoIHRoZSBleHBlY3RlZCBzdGF0ZVxcXFxuXFxcXG4nO1wiLFxuICAgICdib2R5ICs9IGBbVmlldyB3b3JrZmxvdyBydW5dKCR7Y29udGV4dC5zZXJ2ZXJVcmx9LyR7Y29udGV4dC5yZXBvLm93bmVyfS8ke2NvbnRleHQucmVwby5yZXBvfS9hY3Rpb25zL3J1bnMvJHtjb250ZXh0LnJ1bklkfSlgOycsXG4gICAgLy8gTGlzdCBvciB1cGRhdGUgYW4gaXNzdWUgd2l0aCBsYWJlbHNcbiAgICBgY29uc3QgaXNzdWVzID0gYXdhaXQgZ2l0aHViLnJlc3QuaXNzdWVzLmxpc3RGb3JSZXBvKHsgb3duZXI6IGNvbnRleHQucmVwby5vd25lciwgcmVwbzogY29udGV4dC5yZXBvLnJlcG8sIHN0YXRlOiAnb3BlbicsIGxhYmVsczogWydkcmlmdC1kZXRlY3Rpb24nLCAnJHtzdGFnZX0nXSB9KTtgLFxuICAgICdpZiAoaXNzdWVzLmRhdGEubGVuZ3RoID09PSAwKSB7JyxcbiAgICBgICBhd2FpdCBnaXRodWIucmVzdC5pc3N1ZXMuY3JlYXRlKHsgb3duZXI6IGNvbnRleHQucmVwby5vd25lciwgcmVwbzogY29udGV4dC5yZXBvLnJlcG8sIHRpdGxlLCBib2R5LCBsYWJlbHM6IFsnZHJpZnQtZGV0ZWN0aW9uJywgJyR7c3RhZ2V9J10gfSk7YCxcbiAgICAnfSBlbHNlIHsnLFxuICAgICcgIGNvbnN0IGlzc3VlID0gaXNzdWVzLmRhdGFbMF07JyxcbiAgICAnICBhd2FpdCBnaXRodWIucmVzdC5pc3N1ZXMuY3JlYXRlQ29tbWVudCh7IG93bmVyOiBjb250ZXh0LnJlcG8ub3duZXIsIHJlcG86IGNvbnRleHQucmVwby5yZXBvLCBpc3N1ZV9udW1iZXI6IGlzc3VlLm51bWJlciwgYm9keSB9KTsnLFxuICAgICd9JyxcbiAgXTtcbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBub3RpZmljYXRpb25TY3JpcHQoc3RhZ2U6IHN0cmluZywgcmVnaW9uOiBzdHJpbmcsIHJlc3VsdHNGaWxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBsaW5lcyA9IFtcbiAgICBcImNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcIixcbiAgICBgY29uc3QgcmVzdWx0c0ZpbGUgPSAnJHtyZXN1bHRzRmlsZX0nO2AsXG4gICAgJ2xldCBwYXlsb2FkOycsXG4gICAgJ2lmICghZnMuZXhpc3RzU3luYyhyZXN1bHRzRmlsZSkpIHsnLFxuICAgICcgIHBheWxvYWQgPSB7IHRleHQ6IGBEcmlmdCBEZXRlY3Rpb24gKCR7c3RhY2t9KSAtIE5vIHJlc3VsdHMgZm91bmRgLCBibG9ja3M6IFsnLFxuICAgIFwiICAgIHsgdHlwZTogJ3NlY3Rpb24nLCB0ZXh0OiB7IHR5cGU6ICdtcmtkd24nLCB0ZXh0OiBgKkRyaWZ0IERldGVjdGlvbiAoJHtzdGFja30pKmAgfSB9LFwiLFxuICAgIFwiICAgIHsgdHlwZTogJ3NlY3Rpb24nLCB0ZXh0OiB7IHR5cGU6ICdtcmtkd24nLCB0ZXh0OiAnTm8gcmVzdWx0cyBmaWxlIGZvdW5kLiBUaGUgZGV0ZWN0aW9uIHN0ZXAgbWF5IGhhdmUgYmVlbiBza2lwcGVkLicgfSB9XCIsXG4gICAgJyAgXSB9OycsXG4gICAgJyAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpOycsXG4gICAgJ30nLFxuICAgIFwiY29uc3QgcmVzdWx0cyA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHJlc3VsdHNGaWxlLCAndXRmOCcpKTtcIixcbiAgICBcImNvbnN0IGRyaWZ0ZWQgPSByZXN1bHRzLmZpbHRlcihyID0+IHIuZHJpZnRTdGF0dXMgPT09ICdEUklGVEVEJyk7XCIsXG4gICAgJ2NvbnN0IGVycm9ycyA9IHJlc3VsdHMuZmlsdGVyKHIgPT4gci5lcnJvcik7JyxcbiAgICBgY29uc3QgaGVhZGVyID0gXFxgKkRyaWZ0IERldGVjdGlvbiAoJHtzdGFnZX0pKiDigJQgUmVnaW9uOiAke3JlZ2lvbn1cXGA7YCxcbiAgICAnY29uc3Qgc3VtbWFyeSA9IGBUb3RhbCBzdGFja3M6ICR7cmVzdWx0cy5sZW5ndGh9IHwgRHJpZnRlZDogJHtkcmlmdGVkLmxlbmd0aH0gfCBFcnJvcnM6ICR7ZXJyb3JzLmxlbmd0aH1gOycsXG4gICAgJ2NvbnN0IGxpbmVzQXJyID0gW107JyxcbiAgICAnZm9yIChjb25zdCBzIG9mIGRyaWZ0ZWQpIHsnLFxuICAgICcgIGNvbnN0IGNvdW50ID0gKHMuZHJpZnRlZFJlc291cmNlcyB8fCBbXSkubGVuZ3RoOycsXG4gICAgJyAgbGluZXNBcnIucHVzaChg4oCiICR7cy5zdGFja05hbWV9IOKAlCAke2NvdW50fSByZXNvdXJjZShzKSBkcmlmdGVkYCk7JyxcbiAgICAnfScsXG4gICAgJ3BheWxvYWQgPSB7JyxcbiAgICAnICB0ZXh0OiBgRHJpZnQgRGV0ZWN0aW9uICgke3N0YWNrfSlgLCcsXG4gICAgJyAgYmxvY2tzOiBbJyxcbiAgICBcIiAgICB7IHR5cGU6ICdzZWN0aW9uJywgdGV4dDogeyB0eXBlOiAnbXJrZHduJywgdGV4dDogaGVhZGVyIH0gfSxcIixcbiAgICBcIiAgICB7IHR5cGU6ICdjb250ZXh0JywgZWxlbWVudHM6IFt7IHR5cGU6ICdtcmtkd24nLCB0ZXh0OiBzdW1tYXJ5IH1dIH0sXCIsXG4gICAgJyAgICAuLi4oZHJpZnRlZC5sZW5ndGggPiAwID8gWycsXG4gICAgXCIgICAgICB7IHR5cGU6ICdkaXZpZGVyJyB9LFwiLFxuICAgIFwiICAgICAgeyB0eXBlOiAnc2VjdGlvbicsIHRleHQ6IHsgdHlwZTogJ21ya2R3bicsIHRleHQ6ICcqRHJpZnRlZCBTdGFja3M6KlxcbicgKyBsaW5lc0Fyci5qb2luKCdcXG4nKSB9IH1cIixcbiAgICAnICAgIF0gOiBbJyxcbiAgICBcIiAgICAgIHsgdHlwZTogJ2RpdmlkZXInIH0sXCIsXG4gICAgXCIgICAgICB7IHR5cGU6ICdzZWN0aW9uJywgdGV4dDogeyB0eXBlOiAnbXJrZHduJywgdGV4dDogJ05vIGRyaWZ0IGRldGVjdGVkLicgfSB9XCIsXG4gICAgJyAgICBdKScsXG4gICAgJyAgXScsXG4gICAgJ307JyxcbiAgICAncmV0dXJuIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpOycsXG4gIF07XG4gIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gc3VtbWFyeVNjcmlwdCgpOiBzdHJpbmcge1xuICByZXR1cm4gW1xuICAgICcjIS9iaW4vYmFzaCcsXG4gICAgJ3NldCAtZScsXG4gICAgJ2VjaG8gXCIjIyBEcmlmdCBEZXRlY3Rpb24gU3VtbWFyeVwiID4+ICRHSVRIVUJfU1RFUF9TVU1NQVJZJyxcbiAgICAnZWNobyBcIlwiID4+ICRHSVRIVUJfU1RFUF9TVU1NQVJZJyxcbiAgICAnJyxcbiAgICAndG90YWxfc3RhY2tzPTAnLFxuICAgICd0b3RhbF9kcmlmdGVkPTAnLFxuICAgICd0b3RhbF9lcnJvcnM9MCcsXG4gICAgJycsXG4gICAgJ3Nob3B0IC1zIG51bGxnbG9iJyxcbiAgICAnZm9yIGZpbGUgaW4gZHJpZnQtcmVzdWx0cy0qLmpzb24gZHJpZnQtcmVzdWx0cy8qL2RyaWZ0LXJlc3VsdHMtKi5qc29uOyBkbycsXG4gICAgJyAgaWYgW1sgLWYgXCIkZmlsZVwiIF1dOyB0aGVuJyxcbiAgICAnICAgIHN0YWNrPSQoYmFzZW5hbWUgXCIkZmlsZVwiIHwgc2VkIC1FIFxcXCJzL15kcmlmdC1yZXN1bHRzLShbXi5dKylcXFxcLmpzb24kL1xcXFwxL1xcXCIpJyxcbiAgICAnICAgIGVjaG8gXCIjIyMgU3RhZ2U6ICRzdGFja1wiID4+ICRHSVRIVUJfU1RFUF9TVU1NQVJZJyxcbiAgICAnICAgIGpxIC1yIFxcJycgK1xuICAgICAgJy4gYXMgJHJlc3VsdHMgfFxcbicgK1xuICAgICAgJ1wiLSBUb3RhbCBzdGFja3M6IFwiICsgKCRyZXN1bHRzIHwgbGVuZ3RoIHwgdG9zdHJpbmcpICsgXCJcXFxcblwiICtcXG4nICtcbiAgICAgICdcIi0gRHJpZnRlZDogXCIgKyAoWy5bXSB8IHNlbGVjdCguZHJpZnRTdGF0dXMgPT0gXCJEUklGVEVEXCIpXSB8IGxlbmd0aCB8IHRvc3RyaW5nKSArIFwiXFxcXG5cIiArXFxuJyArXG4gICAgICAnXCItIEVycm9yczogXCIgKyAoWy5bXSB8IHNlbGVjdCguZXJyb3IpXSB8IGxlbmd0aCB8IHRvc3RyaW5nKSArIFwiXFxcXG5cIiArXFxuJyArXG4gICAgICAnKFsuW10gfCBzZWxlY3QoLmRyaWZ0U3RhdHVzID09IFwiRFJJRlRFRFwiKV0gfCBpZiBsZW5ndGggPiAwIHRoZW4gXCJcXFxcbioqRHJpZnRlZCBzdGFja3M6KipcXFxcblwiICsgKG1hcChcIiAgLSBcIiArIC5zdGFja05hbWUgKyBcIiAoXCIgKyAoKC5kcmlmdGVkUmVzb3VyY2VzIC8vIFtdKSB8IGxlbmd0aCB8IHRvc3RyaW5nKSArIFwiIHJlc291cmNlcylcIikgfCBqb2luKFwiXFxcXG5cIikpIGVsc2UgXCJcIiBlbmQpXFxuJyArXG4gICAgJ1xcJycgK1xuICAgICcgXCIkZmlsZVwiID4+ICRHSVRIVUJfU1RFUF9TVU1NQVJZJyxcbiAgICAnICAgIGVjaG8gXCJcIiA+PiAkR0lUSFVCX1NURVBfU1VNTUFSWScsXG4gICAgJyAgICB0b3RhbF9zdGFja3M9JCgodG90YWxfc3RhY2tzICsgJChqcSBcXFwibGVuZ3RoXFxcIiBcXFwiJGZpbGVcXFwiKSkpJyxcbiAgICAnICAgIHRvdGFsX2RyaWZ0ZWQ9JCgodG90YWxfZHJpZnRlZCArICQoanEgXFxcIlsuW10gfCBzZWxlY3QoLmRyaWZ0U3RhdHVzID09IFxcXFxcXFwiRFJJRlRFRFxcXFxcXFwiKV0gfCBsZW5ndGhcXFwiIFxcXCIkZmlsZVxcXCIpKSknLFxuICAgICcgICAgdG90YWxfZXJyb3JzPSQoKHRvdGFsX2Vycm9ycyArICQoanEgXFxcIlsuW10gfCBzZWxlY3QoLmVycm9yKV0gfCBsZW5ndGhcXFwiIFxcXCIkZmlsZVxcXCIpKSknLFxuICAgICcgIGZpJyxcbiAgICAnZG9uZScsXG4gICAgJycsXG4gICAgJ2VjaG8gXCIjIyMgT3ZlcmFsbCBTdW1tYXJ5XCIgPj4gJEdJVEhVQl9TVEVQX1NVTU1BUlknLFxuICAgICdlY2hvIFwiLSBUb3RhbCBzdGFja3MgY2hlY2tlZDogJHRvdGFsX3N0YWNrc1wiID4+ICRHSVRIVUJfU1RFUF9TVU1NQVJZJyxcbiAgICAnZWNobyBcIi0gVG90YWwgZHJpZnRlZCBzdGFja3M6ICR0b3RhbF9kcmlmdGVkXCIgPj4gJEdJVEhVQl9TVEVQX1NVTU1BUlknLFxuICAgICdlY2hvIFwiLSBUb3RhbCBlcnJvcnM6ICR0b3RhbF9lcnJvcnNcIiA+PiAkR0lUSFVCX1NURVBfU1VNTUFSWScsXG4gICAgJycsXG4gICAgJ2lmIFtbICR0b3RhbF9kcmlmdGVkIC1ndCAwIF1dOyB0aGVuJyxcbiAgICAnICBlY2hvIFwiXCIgPj4gJEdJVEhVQl9TVEVQX1NVTU1BUlknLFxuICAgICcgIGVjaG8gXCLimqDvuI8gKipBY3Rpb24gcmVxdWlyZWQ6KiogRHJpZnQgZGV0ZWN0ZWQgaW4gJHRvdGFsX2RyaWZ0ZWQgc3RhY2tzXCIgPj4gJEdJVEhVQl9TVEVQX1NVTU1BUlknLFxuICAgICdmaScsXG4gIF0uam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIHRvS2ViYWJDYXNlKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzLnJlcGxhY2UoL1teYS16QS1aMC05XSsvZywgJy0nKS5yZXBsYWNlKC9eLSt8LSskL2csICcnKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5cbmZ1bmN0aW9uIHRvR2l0aHViSm9iSWQoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gR2l0SHViIGpvYl9pZCBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgb3IgdW5kZXJzY29yZSBhbmQgY29udGFpbiBvbmx5IEEtWmEtejAtOSwgJy0nLCAnXydcbiAgLy8gMSkgUmVwbGFjZSBhbnkgZGlzYWxsb3dlZCBjaGFycyB3aXRoICctJ1xuICBsZXQgb3V0ID0gcy5yZXBsYWNlKC9bXkEtWmEtejAtOV8tXSsvZywgJy0nKTtcbiAgLy8gMikgQ29sbGFwc2UgY29uc2VjdXRpdmUgZGFzaGVzXG4gIG91dCA9IG91dC5yZXBsYWNlKC8tKy9nLCAnLScpO1xuICAvLyAzKSBUcmltIGxlYWRpbmcvdHJhaWxpbmcgZGFzaGVzICh1bmRlcnNjb3JlcyBhcmUgYWxsb3dlZCBhdCBzdGFydClcbiAgb3V0ID0gb3V0LnJlcGxhY2UoL14tK3wtKyQvZywgJycpO1xuICAvLyA0KSBMb3dlcmNhc2UgZm9yIGNvbnNpc3RlbmN5IChub3QgcmVxdWlyZWQgYnkgR2l0SHViIGJ1dCBrZWVwcyB0aGluZ3Mgc3RhYmxlKVxuICBvdXQgPSBvdXQudG9Mb3dlckNhc2UoKTtcbiAgLy8gNSkgRW5zdXJlIGl0IHN0YXJ0cyB3aXRoIGEgbGV0dGVyIG9yIHVuZGVyc2NvcmVcbiAgaWYgKCFvdXQgfHwgIS9eW2Etel9dL2kudGVzdChvdXQpKSB7XG4gICAgb3V0ID0gYHMtJHtvdXR9YDtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIl19
package/package.json CHANGED
@@ -102,7 +102,7 @@
102
102
  },
103
103
  "main": "lib/index.js",
104
104
  "license": "Apache-2.0",
105
- "version": "0.0.7-beta",
105
+ "version": "0.0.9-beta",
106
106
  "jest": {
107
107
  "coverageProvider": "v8",
108
108
  "testMatch": [