@pipeline-builder/pipeline-manager 3.4.192 → 4.0.2

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.
@@ -32,7 +32,7 @@ export function createPipeline(program) {
32
32
  .option('-p, --project <project>', 'Project name (falls back to value in props file)')
33
33
  .option('-o, --organization <organization>', 'Organization name (falls back to value in props file)')
34
34
  .option('-n, --name <name>', 'Pipeline name')
35
- .option('-a, --access <modifier>', 'Access modifier (public|private)', 'private')
35
+ .option('-a, --visibility <rung>', 'Sharing rung (private|org|public). Pipelines default to org — a team asset is visible to the team.', 'org')
36
36
  .option('--default', 'Set as default pipeline', false)
37
37
  .option('--active', 'Set pipeline as active', true)
38
38
  .option('--no-active', 'Create the pipeline as inactive')
@@ -54,7 +54,7 @@ export function createPipeline(program) {
54
54
  'Project': options.project || '(from props file)',
55
55
  'Organization': options.organization || '(from props file)',
56
56
  'Name': options.name || '(not set)',
57
- 'Access Modifier': options.access,
57
+ 'Visibility': options.visibility,
58
58
  'Default Pipeline': options.default ? 'Yes' : 'No',
59
59
  'Active': options.active ? 'Yes' : 'No',
60
60
  'Deploy After Create': options.deploy ? `Yes (profile: ${options.profile || 'default'})` : 'No',
@@ -152,8 +152,8 @@ export function createPipeline(program) {
152
152
  props,
153
153
  };
154
154
  // Add optional fields only if provided
155
- if (options.access) {
156
- payload.accessModifier = options.access;
155
+ if (options.visibility) {
156
+ payload.visibility = options.visibility;
157
157
  }
158
158
  if (options.default !== undefined) {
159
159
  payload.isDefault = options.default;
@@ -213,7 +213,7 @@ export function createPipeline(program) {
213
213
  'Project': pipeline.project,
214
214
  'Organization': pipeline.organization,
215
215
  'Name': pipeline.pipelineName || '(not set)',
216
- 'Access': pipeline.accessModifier || 'private',
216
+ 'Visibility': pipeline.visibility || 'org',
217
217
  'Default': pipeline.isDefault ? 'Yes' : 'No',
218
218
  'Active': pipeline.isActive ? 'Yes' : 'No',
219
219
  'Properties': pipeline.props ? `${Object.keys(pipeline.props).length} keys` : '(not returned)',
@@ -312,4 +312,4 @@ export function createPipeline(program) {
312
312
  }
313
313
  });
314
314
  }
315
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXBpcGVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2NyZWF0ZS1waXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBQ3RCLE9BQU8sSUFBSSxNQUFNLFlBQVksQ0FBQztBQUM5QixPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ25ILE9BQU8sRUFBK0YsTUFBTSxtQkFBbUIsQ0FBQztBQUNoSSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLHlCQUF5QixFQUFFLDhCQUE4QixFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hNLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNqSixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7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QUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUU7b0JBQ1AsT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsV0FBVztvQkFDWCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87b0JBQ3hCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtvQkFDbEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO29CQUNsQixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7b0JBQzVCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtpQkFDdkI7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCBwaWNvIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgZm9ybWF0RHVyYXRpb24sIGZvcm1hdEZpbGVTaXplLCBGSUxFX1NJWkVfTElNSVRTLCBkZWZhdWx0UGlwZWxpbmVOYW1lIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgdHlwZSBQaXBlbGluZSwgdHlwZSBQaXBlbGluZVJlc3BvbnNlLCB0eXBlIENyZWF0ZVBpcGVsaW5lUmVxdWVzdCwgdHlwZSBQbGF0Zm9ybURlcGxveUNvbmZpZyB9IGZyb20gJy4uL3R5cGVzL2luZGV4LmpzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciwgcHJpbnRTc2xXYXJuaW5nLCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50LCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMsIHdpdGhTc2xPcHRpb25zLCB3aXRoUHJvZmlsZU9wdGlvbiwgd2l0aFJlZ2lvbk9wdGlvbiB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgcnVuRGVwbG95IH0gZnJvbSAnLi4vdXRpbHMvZGVwbG95LXJ1bm5lci5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9yLWhhbmRsZXIuanMnO1xuaW1wb3J0IHsgZW5zdXJlT3V0cHV0RGlyZWN0b3J5LCBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50S2V5VmFsdWUsIHByaW50U2VjdGlvbiwgcHJpbnRTdWNjZXNzLCBwcmludFdhcm5pbmcgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuaW1wb3J0IHsgZmV0Y2hQaXBlbGluZVByb3BzIH0gZnJvbSAnLi4vdXRpbHMvcGlwZWxpbmUtY29uZmlnLmpzJztcbmltcG9ydCB7IGV4dHJhY3RTaW5nbGVSZXNwb25zZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLXV0aWxzLmpzJztcbmltcG9ydCB7IHJlbGF4VGxzRm9yQ2xpIH0gZnJvbSAnLi4vdXRpbHMvdGxzLmpzJztcblxuY29uc3QgeyBib2xkLCBjeWFuLCBkaW0sIGdyZWVuIH0gPSBwaWNvO1xuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYGNyZWF0ZS1waXBlbGluZWAgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBBY2NlcHRzIGEgcGlwZWxpbmUgcHJvcGVydGllcyBKU09OIGZpbGUsIHZhbGlkYXRlcyBpdCwgcmVzb2x2ZXNcbiAqIHByb2plY3Qvb3JnYW5pemF0aW9uIGZyb20gQ0xJIGZsYWdzIG9yIHRoZSBwcm9wcyBmaWxlLCBhbmRcbiAqIGNyZWF0ZXMgdGhlIHBpcGVsaW5lIHZpYSB0aGUgcGxhdGZvcm0gQVBJLlxuICpcbiAqIEBwYXJhbSBwcm9ncmFtIC0gVGhlIHJvb3QgQ29tbWFuZGVyIHByb2dyYW0gaW5zdGFuY2UgdG8gYXR0YWNoIHRoZSBjb21tYW5kIHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGlwZWxpbmUocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICB3aXRoU3NsT3B0aW9ucyhcbiAgICB3aXRoUmVnaW9uT3B0aW9uKFxuICAgICAgd2l0aFByb2ZpbGVPcHRpb24ocHJvZ3JhbVxuICAgICAgICAuY29tbWFuZCgnY3JlYXRlJylcbiAgICAgICAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBuZXcgcGlwZWxpbmUg4oCUIGFuZCBvcHRpb25hbGx5IGRlcGxveSBpdCB3aXRoIC0tZGVwbG95JylcbiAgICAgICAgLnJlcXVpcmVkT3B0aW9uKCctZiwgLS1maWxlIDxmaWxlPicsICdQYXRoIHRvIHBpcGVsaW5lIHByb3BlcnRpZXMgSlNPTiBmaWxlJylcbiAgICAgICAgLm9wdGlvbignLXAsIC0tcHJvamVjdCA8cHJvamVjdD4nLCAnUHJvamVjdCBuYW1lIChmYWxscyBiYWNrIHRvIHZhbHVlIGluIHByb3BzIGZpbGUpJylcbiAgICAgICAgLm9wdGlvbignLW8sIC0tb3JnYW5pemF0aW9uIDxvcmdhbml6YXRpb24+JywgJ09yZ2FuaXphdGlvbiBuYW1lIChmYWxscyBiYWNrIHRvIHZhbHVlIGluIHByb3BzIGZpbGUpJylcbiAgICAgICAgLm9wdGlvbignLW4sIC0tbmFtZSA8bmFtZT4nLCAnUGlwZWxpbmUgbmFtZScpXG4gICAgICAgIC5vcHRpb24oJy1hLCAtLWFjY2VzcyA8bW9kaWZpZXI+JywgJ0FjY2VzcyBtb2RpZmllciAocHVibGljfHByaXZhdGUpJywgJ3ByaXZhdGUnKVxuICAgICAgICAub3B0aW9uKCctLWRlZmF1bHQnLCAnU2V0IGFzIGRlZmF1bHQgcGlwZWxpbmUnLCBmYWxzZSlcbiAgICAgICAgLm9wdGlvbignLS1hY3RpdmUnLCAnU2V0IHBpcGVsaW5lIGFzIGFjdGl2ZScsIHRydWUpXG4gICAgICAgIC5vcHRpb24oJy0tbm8tYWN0aXZlJywgJ0NyZWF0ZSB0aGUgcGlwZWxpbmUgYXMgaW5hY3RpdmUnKVxuICAgICAgICAvLyAtLWRlcGxveTogYWZ0ZXIgY3JlYXRpbmcgdGhlIHJlY29yZCwgcnVuIHRoZSBzYW1lIENESyBkZXBsb3kgKyBBUk5cbiAgICAgICAgLy8gcmVnaXN0cmF0aW9uIGFzIGBwaXBlbGluZSBkZXBsb3kgLS1pZGAgKHNoYXJlZCBydW5EZXBsb3kpLiBUaGUgZmxhZ3NcbiAgICAgICAgLy8gYmVsb3cgYXBwbHkgb25seSB3aXRoIC0tZGVwbG95LlxuICAgICAgICAub3B0aW9uKCctLWRlcGxveScsICdEZXBsb3kgdGhlIHBpcGVsaW5lIHdpdGggQVdTIENESyBpbW1lZGlhdGVseSBhZnRlciBjcmVhdGluZyBpdCcsIGZhbHNlKVxuICAgICAgICAub3B0aW9uKCctLXJlcXVpcmUtYXBwcm92YWwgPGFwcHJvdmFsPicsICdEZXBsb3kgYXBwcm92YWwgbGV2ZWw6IG5ldmVyfGFueS1jaGFuZ2V8YnJvYWRlbmluZyAod2l0aCAtLWRlcGxveSknLCAnbmV2ZXInKVxuICAgICAgICAub3B0aW9uKCctLW91dHB1dCA8ZGlyPicsICdDREsgb3V0cHV0IGRpcmVjdG9yeSAod2l0aCAtLWRlcGxveSknLCAnY2RrLm91dCcpXG4gICAgICAgIC5vcHRpb24oJy0tc3RvcmUtdG9rZW5zJywgJ0RlcGxveSBhdXRoIHZpYSBBV1MgU2VjcmV0cyBNYW5hZ2VyIHRva2VuICh3aXRoIC0tZGVwbG95OyByZXF1aXJlcyBQTEFURk9STV9TRUNSRVRfTkFNRSknLCBmYWxzZSkpLFxuICAgICksXG4gIClcbiAgICAub3B0aW9uKCctLWRyeS1ydW4nLCAnVmFsaWRhdGUgaW5wdXRzIHdpdGhvdXQgY3JlYXRpbmcgcGlwZWxpbmUnLCBmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignQ3JlYXRlIFBpcGVsaW5lJywgJ0NyZWF0aW5nIFBpcGVsaW5lJyk7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICB0cnkge1xuXG4gICAgICAgIC8vIERpc3BsYXkgcGFyYW1ldGVyc1xuICAgICAgICBwcmludEluZm8oJ0NvbmZpZ3VyYXRpb24nKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ1Byb2plY3QnOiBvcHRpb25zLnByb2plY3QgfHwgJyhmcm9tIHByb3BzIGZpbGUpJyxcbiAgICAgICAgICAnT3JnYW5pemF0aW9uJzogb3B0aW9ucy5vcmdhbml6YXRpb24gfHwgJyhmcm9tIHByb3BzIGZpbGUpJyxcbiAgICAgICAgICAnTmFtZSc6IG9wdGlvbnMubmFtZSB8fCAnKG5vdCBzZXQpJyxcbiAgICAgICAgICAnQWNjZXNzIE1vZGlmaWVyJzogb3B0aW9ucy5hY2Nlc3MsXG4gICAgICAgICAgJ0RlZmF1bHQgUGlwZWxpbmUnOiBvcHRpb25zLmRlZmF1bHQgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgJ0FjdGl2ZSc6IG9wdGlvbnMuYWN0aXZlID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgICdEZXBsb3kgQWZ0ZXIgQ3JlYXRlJzogb3B0aW9ucy5kZXBsb3kgPyBgWWVzIChwcm9maWxlOiAke29wdGlvbnMucHJvZmlsZSB8fCAnZGVmYXVsdCd9KWAgOiAnTm8nLFxuICAgICAgICAgICdQcm9wZXJ0aWVzIEZpbGUnOiBvcHRpb25zLmZpbGUsXG4gICAgICAgICAgJ1NTTCBWZXJpZmljYXRpb24nOiBvcHRpb25zLnZlcmlmeVNzbCA9PT0gZmFsc2UgPyAnRGlzYWJsZWQnIDogJ0VuYWJsZWQnLFxuICAgICAgICAgICdEcnkgUnVuJzogb3B0aW9ucy5kcnlSdW4gPyAnWWVzJyA6ICdObycsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNlY3VyaXR5IHdhcm5pbmcgZm9yIFNTTCB2ZXJpZmljYXRpb24gZGlzYWJsZWRcbiAgICAgICAgcHJpbnRTc2xXYXJuaW5nKG9wdGlvbnMudmVyaWZ5U3NsKTtcblxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbignRmlsZSBWYWxpZGF0aW9uJyk7XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZmlsZSBleGlzdHNcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKG9wdGlvbnMuZmlsZSkpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdQcm9wZXJ0aWVzIGZpbGUgbm90IGZvdW5kJywgeyBwYXRoOiBvcHRpb25zLmZpbGUgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgRmlsZSBub3QgZm91bmQ6ICR7b3B0aW9ucy5maWxlfWAsICdmaWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmaWxlIGV4dGVuc2lvblxuICAgICAgICBjb25zdCBmaWxlRXh0ID0gcGF0aC5leHRuYW1lKG9wdGlvbnMuZmlsZSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGZpbGVFeHQgIT09ICcuanNvbicpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ0ZpbGUgZXh0ZW5zaW9uIGlzIG5vdCAuanNvbicsIHsgZXh0ZW5zaW9uOiBmaWxlRXh0IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZVN0YXRzID0gZnMuc3RhdFN5bmMob3B0aW9ucy5maWxlKTtcblxuICAgICAgICAvLyBDaGVjayBmaWxlIHNpemVcbiAgICAgICAgaWYgKGZpbGVTdGF0cy5zaXplID4gRklMRV9TSVpFX0xJTUlUUy5QSVBFTElORV9QUk9QUykge1xuICAgICAgICAgIHByaW50RXJyb3IoJ1Byb3BlcnRpZXMgZmlsZSBpcyB0b28gbGFyZ2UnLCB7XG4gICAgICAgICAgICBzaXplOiBmb3JtYXRGaWxlU2l6ZShmaWxlU3RhdHMuc2l6ZSksXG4gICAgICAgICAgICBsaW1pdDogZm9ybWF0RmlsZVNpemUoRklMRV9TSVpFX0xJTUlUUy5QSVBFTElORV9QUk9QUyksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvcGVydGllcyBmaWxlIGV4Y2VlZHMgc2l6ZSBsaW1pdCcsICdmaWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBwcmludFN1Y2Nlc3MoJ0ZpbGUgdmFsaWRhdGlvbiBwYXNzZWQnKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ0ZpbGUgUGF0aCc6IG9wdGlvbnMuZmlsZSxcbiAgICAgICAgICAnRmlsZSBTaXplJzogZm9ybWF0RmlsZVNpemUoZmlsZVN0YXRzLnNpemUpLFxuICAgICAgICAgICdFeHRlbnNpb24nOiBmaWxlRXh0LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZWFkIGFuZCBwYXJzZSBwcm9wZXJ0aWVzIGZpbGVcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludEluZm8oJ1JlYWRpbmcgcGlwZWxpbmUgcHJvcGVydGllcy4uLicpO1xuXG4gICAgICAgIGNvbnN0IGZpbGVDb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKG9wdGlvbnMuZmlsZSwgJ3V0Zi04Jyk7XG5cbiAgICAgICAgbGV0IHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwcm9wcyA9IEpTT04ucGFyc2UoZmlsZUNvbnRlbnQpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHByaW50RXJyb3IoJ0ludmFsaWQgSlNPTiBpbiBwcm9wZXJ0aWVzIGZpbGUnLCB7XG4gICAgICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgICAgaGludDogJ0Vuc3VyZSB0aGUgZmlsZSBjb250YWlucyB2YWxpZCBKU09OIHN5bnRheCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvcGVydGllcyBmaWxlIG11c3QgY29udGFpbiB2YWxpZCBKU09OJywgJ2ZpbGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIHByb3BlcnRpZXMgc3RydWN0dXJlXG4gICAgICAgIGlmICh0eXBlb2YgcHJvcHMgIT09ICdvYmplY3QnIHx8IHByb3BzID09PSBudWxsKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignSW52YWxpZCBwcm9wZXJ0aWVzIGZvcm1hdCcsIHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGVvZiBwcm9wcyxcbiAgICAgICAgICAgIGhpbnQ6ICdQcm9wZXJ0aWVzIG11c3QgYmUgYSBKU09OIG9iamVjdCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvcGVydGllcyBtdXN0IGJlIGEgdmFsaWQgb2JqZWN0JywgJ2ZpbGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByb3BDb3VudCA9IE9iamVjdC5rZXlzKHByb3BzKS5sZW5ndGg7XG5cbiAgICAgICAgcHJpbnRTdWNjZXNzKCdQcm9wZXJ0aWVzIHBhcnNlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ1RvdGFsIEtleXMnOiBwcm9wQ291bnQudG9TdHJpbmcoKSxcbiAgICAgICAgICAnU2FtcGxlIEtleXMnOiBPYmplY3Qua2V5cyhwcm9wcykuc2xpY2UoMCwgNSkuam9pbignLCAnKSArIChwcm9wQ291bnQgPiA1ID8gJy4uLicgOiAnJyksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIHByb3BlcnRpZXMgY29udGVudFxuICAgICAgICBpZiAocHJvcENvdW50ID09PSAwKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKCdQcm9wZXJ0aWVzIG9iamVjdCBpcyBlbXB0eSAtIHBpcGVsaW5lIHdpbGwgaGF2ZSBubyBjb25maWd1cmF0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXNvbHZlIHByb2plY3QgJiBvcmdhbml6YXRpb246IHByZWZlciBDTEkgZmxhZ3MsIGZhbGwgYmFjayB0b1xuICAgICAgICAvLyB2YWx1ZXMgZW1iZWRkZWQgaW5zaWRlIHRoZSBwcm9wcyBmaWxlIChidWlsZGVyUHJvcHMpLlxuICAgICAgICBjb25zdCByZXNvbHZlZFByb2plY3QgPSBvcHRpb25zLnByb2plY3QgPz8gKHByb3BzLnByb2plY3QgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRPcmdhbml6YXRpb24gPSBvcHRpb25zLm9yZ2FuaXphdGlvbiA/PyAocHJvcHMub3JnYW5pemF0aW9uIGFzIHN0cmluZyB8IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgaWYgKCFyZXNvbHZlZFByb2plY3QpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdQcm9qZWN0IGlzIHJlcXVpcmVkJywge1xuICAgICAgICAgICAgaGludDogJ1Byb3ZpZGUgLXAvLS1wcm9qZWN0IGZsYWcgb3IgaW5jbHVkZSBcInByb2plY3RcIiBpbiB0aGUgcHJvcHMgZmlsZScsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvamVjdCBpcyByZXF1aXJlZCcsICdwcm9qZWN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXNvbHZlZE9yZ2FuaXphdGlvbikge1xuICAgICAgICAgIHByaW50RXJyb3IoJ09yZ2FuaXphdGlvbiBpcyByZXF1aXJlZCcsIHtcbiAgICAgICAgICAgIGhpbnQ6ICdQcm92aWRlIC1vLy0tb3JnYW5pemF0aW9uIGZsYWcgb3IgaW5jbHVkZSBcIm9yZ2FuaXphdGlvblwiIGluIHRoZSBwcm9wcyBmaWxlJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdPcmdhbml6YXRpb24gaXMgcmVxdWlyZWQnLCAnb3JnYW5pemF0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXNvbHZlIHBpcGVsaW5lTmFtZSB3aXRoIHRoZSBzaGFyZWQgZGVmYXVsdCAobWlycm9ycyBwaXBlbGluZS1jb3JlJ3NcbiAgICAgICAgLy8gcGlwZWxpbmUtY29uZmlndXJhdGlvbi50cykgc28gY3JlYXRlICsgcmVnaXN0cnkgKyBDREsgYWxsIGFncmVlLlxuICAgICAgICBjb25zdCByZXNvbHZlZFBpcGVsaW5lTmFtZSA9IG9wdGlvbnMubmFtZVxuICAgICAgICAgID8/IChwcm9wcy5waXBlbGluZU5hbWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKVxuICAgICAgICAgID8/IGRlZmF1bHRQaXBlbGluZU5hbWUocmVzb2x2ZWRPcmdhbml6YXRpb24sIHJlc29sdmVkUHJvamVjdCk7XG5cbiAgICAgICAgY29uc3QgcGF5bG9hZDogQ3JlYXRlUGlwZWxpbmVSZXF1ZXN0ID0ge1xuICAgICAgICAgIHByb2plY3Q6IHJlc29sdmVkUHJvamVjdCxcbiAgICAgICAgICBvcmdhbml6YXRpb246IHJlc29sdmVkT3JnYW5pemF0aW9uLFxuICAgICAgICAgIHBpcGVsaW5lTmFtZTogcmVzb2x2ZWRQaXBlbGluZU5hbWUsXG4gICAgICAgICAgcHJvcHMsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQWRkIG9wdGlvbmFsIGZpZWxkcyBvbmx5IGlmIHByb3ZpZGVkXG4gICAgICAgIGlmIChvcHRpb25zLmFjY2Vzcykge1xuICAgICAgICAgIHBheWxvYWQuYWNjZXNzTW9kaWZpZXIgPSBvcHRpb25zLmFjY2VzcztcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwYXlsb2FkLmlzRGVmYXVsdCA9IG9wdGlvbnMuZGVmYXVsdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5hY3RpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBheWxvYWQuaXNBY3RpdmUgPSBvcHRpb25zLmFjdGl2ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERyeSBydW4gbW9kZVxuICAgICAgICBpZiAob3B0aW9ucy5kcnlSdW4pIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdEcnkgUnVuIC0gUmVxdWVzdCBQcmV2aWV3Jyk7XG4gICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocGF5bG9hZCwgbnVsbCwgMikpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ+KckyBWYWxpZGF0aW9uIGNvbXBsZXRlIC0gbm8gcGlwZWxpbmUgY3JlYXRlZCAoZHJ5IHJ1biBtb2RlKScpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBpZiAob3B0aW9ucy5kZXBsb3kpIHtcbiAgICAgICAgICAgIHByaW50SW5mbygnV2l0aCAtLWRlcGxveSwgdGhlIHBpcGVsaW5lIHdvdWxkIGJlIGRlcGxveWVkIHZpYSBDREsgYWZ0ZXIgY3JlYXRpb24nLCB7XG4gICAgICAgICAgICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSB8fCAnKGRlZmF1bHQpJyxcbiAgICAgICAgICAgICAgcmVnaW9uOiBvcHRpb25zLnJlZ2lvbiB8fCAnKGRlZmF1bHQpJyxcbiAgICAgICAgICAgICAgcmVxdWlyZUFwcHJvdmFsOiBvcHRpb25zLnJlcXVpcmVBcHByb3ZhbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcmludEluZm8oJ1RvIGNyZWF0ZSB0aGUgcGlwZWxpbmUsIHJ1biB0aGUgY29tbWFuZCB3aXRob3V0IC0tZHJ5LXJ1bicpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSBhdXRoZW50aWNhdGVkIEFQSSBjbGllbnRcbiAgICAgICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQXV0aGVudGljYXRlZENsaWVudChvcHRpb25zKTtcbiAgICAgICAgY29uc3QgY29uZmlnID0gY2xpZW50LmdldENvbmZpZygpO1xuXG4gICAgICAgIC8vIENyZWF0ZSBwaXBlbGluZVxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbignQ3JlYXRpbmcgUGlwZWxpbmUnKTtcblxuICAgICAgICBjb25zdCBzcGlubmVyID0gb3JhKCdDcmVhdGluZyBwaXBlbGluZS4uLicpLnN0YXJ0KCk7XG4gICAgICAgIGxldCByYXdSZXNwb25zZTogUGlwZWxpbmVSZXNwb25zZTtcbiAgICAgICAgbGV0IHJlcXVlc3REdXJhdGlvbjogbnVtYmVyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3RTdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgICAgcmF3UmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdDxQaXBlbGluZVJlc3BvbnNlPihcbiAgICAgICAgICAgIGNvbmZpZy5hcGkucGlwZWxpbmVVcmwsXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVxdWVzdER1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHJlcXVlc3RTdGFydDtcbiAgICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ1BpcGVsaW5lIGNyZWF0ZWQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBzcGlubmVyLmZhaWwoJ1BpcGVsaW5lIGNyZWF0aW9uIGZhaWxlZCcpO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBleHRyYWN0U2luZ2xlUmVzcG9uc2U8UGlwZWxpbmU+KHJhd1Jlc3BvbnNlLCAncGlwZWxpbmUnLCAnaWQnKTtcblxuICAgICAgICBpZiAoIXBpcGVsaW5lPy5pZCkge1xuICAgICAgICAgIHByaW50RXJyb3IoJ0ludmFsaWQgcGlwZWxpbmUgcmVzcG9uc2UnLCB7XG4gICAgICAgICAgICByZXNwb25zZUtleXM6IHJhd1Jlc3BvbnNlID8gT2JqZWN0LmtleXMocmF3UmVzcG9uc2UpIDogJyhudWxsKScsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXBlbGluZSBjcmVhdGlvbiBmYWlsZWQgLSBubyB2YWxpZCBwaXBlbGluZSBkYXRhIHJlY2VpdmVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbign4pyTIFBpcGVsaW5lIENyZWF0ZWQgU3VjY2Vzc2Z1bGx5Jyk7XG5cbiAgICAgICAgLy8gRGlzcGxheSBjcmVhdGVkIHBpcGVsaW5lIGluZm9cbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ1BpcGVsaW5lIElEJzogZ3JlZW4oYm9sZChwaXBlbGluZS5pZCkpLFxuICAgICAgICAgICdQcm9qZWN0JzogcGlwZWxpbmUucHJvamVjdCxcbiAgICAgICAgICAnT3JnYW5pemF0aW9uJzogcGlwZWxpbmUub3JnYW5pemF0aW9uLFxuICAgICAgICAgICdOYW1lJzogcGlwZWxpbmUucGlwZWxpbmVOYW1lIHx8ICcobm90IHNldCknLFxuICAgICAgICAgICdBY2Nlc3MnOiBwaXBlbGluZS5hY2Nlc3NNb2RpZmllciB8fCAncHJpdmF0ZScsXG4gICAgICAgICAgJ0RlZmF1bHQnOiBwaXBlbGluZS5pc0RlZmF1bHQgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgJ0FjdGl2ZSc6IHBpcGVsaW5lLmlzQWN0aXZlID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgICdQcm9wZXJ0aWVzJzogcGlwZWxpbmUucHJvcHMgPyBgJHtPYmplY3Qua2V5cyhwaXBlbGluZS5wcm9wcykubGVuZ3RofSBrZXlzYCA6ICcobm90IHJldHVybmVkKScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChwaXBlbGluZS5jcmVhdGVkQXQpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICAnQ3JlYXRlZCBBdCc6IHBpcGVsaW5lLmNyZWF0ZWRBdCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBlcmZvcm1hbmNlIG1ldHJpY3NcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnRXhlY3V0aW9uIElEJzogZXhlY3V0aW9uSWQsXG4gICAgICAgICAgJ1JlcXVlc3QgRHVyYXRpb24nOiBmb3JtYXREdXJhdGlvbihyZXF1ZXN0RHVyYXRpb24pLFxuICAgICAgICAgICdUb3RhbCBEdXJhdGlvbic6IGZvcm1hdER1cmF0aW9uKERhdGUubm93KCkgLSBzdGFydFRpbWUpLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTYXZlIHBpcGVsaW5lIGluZm8gdG8gZmlsZVxuICAgICAgICBjb25zdCBvdXRwdXREaXIgPSAnLi9vdXRwdXQnO1xuICAgICAgICBlbnN1cmVPdXRwdXREaXJlY3Rvcnkob3V0cHV0RGlyKTtcblxuICAgICAgICBjb25zdCBvdXRwdXRGaWxlID0gcGF0aC5qb2luKG91dHB1dERpciwgYHBpcGVsaW5lLSR7cGlwZWxpbmUuaWR9Lmpzb25gKTtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhvdXRwdXRGaWxlLCBKU09OLnN0cmluZ2lmeShwaXBlbGluZSwgbnVsbCwgMikpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRTdWNjZXNzKCdQaXBlbGluZSBkZXRhaWxzIHNhdmVkIHRvIGZpbGUnKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ091dHB1dCBGaWxlJzogb3V0cHV0RmlsZSxcbiAgICAgICAgICAnRmlsZSBTaXplJzogZm9ybWF0RmlsZVNpemUoZnMuc3RhdFN5bmMob3V0cHV0RmlsZSkuc2l6ZSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIOKUgOKUgCBPcHRpb25hbCBkZXBsb3kgKC0tZGVwbG95KSDilIDilIBcbiAgICAgICAgLy8gVGhlIHJlY29yZCBub3cgZXhpc3RzIGFuZCBpcyBhdXRob3JpdGF0aXZlLiBJZiB0aGUgZGVwbG95IGZhaWxzIHdlIEtFRVBcbiAgICAgICAgLy8gaXQgYW5kIHN1cmZhY2UgdGhlIGV4YWN0IHJldHJ5IHJhdGhlciB0aGFuIHJvbGxpbmcgYmFjayAobmV2ZXIgZmFsc2UtZ3JlZW4pLlxuICAgICAgICBpZiAob3B0aW9ucy5kZXBsb3kpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdEZXBsb3lpbmcgUGlwZWxpbmUnKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gRGVwbG95IHRvdWNoZXMgdGhlIEFXUyBTREsgKyB0aGUgQ0RLIHN5bnRoIHN1YnByb2Nlc3M7IHJlbGF4IFRMUyB0aGVcbiAgICAgICAgICAgIC8vIHNhbWUgd2F5IGBkZXBsb3lgIGRvZXMgKHJlZnVzZWQgaW4gcHJvZHVjdGlvbiBieSByZWxheFRsc0ZvckNsaSkuXG4gICAgICAgICAgICByZWxheFRsc0ZvckNsaShvcHRpb25zLnZlcmlmeVNzbCwgcHJpbnRXYXJuaW5nKTtcbiAgICAgICAgICAgIC8vIFRoZSBhc3luYyBjbGllbnQgYWRkcyAtLXN0b3JlLXRva2VucyAoU2VjcmV0cyBNYW5hZ2VyKSBzdXBwb3J0IGFuZFxuICAgICAgICAgICAgLy8gYmFja3MgQk9USCB0aGUgcHJvcHMgZmV0Y2ggYW5kIHRoZSByZWdpc3RyeSBjYWxsYmFjay5cbiAgICAgICAgICAgIGNvbnN0IGRlcGxveUNsaWVudCA9IGF3YWl0IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYyhvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IGRlcGxveUNvbmZpZyA9IGRlcGxveUNsaWVudC5nZXRDb25maWcoKSBhcyBQbGF0Zm9ybURlcGxveUNvbmZpZztcbiAgICAgICAgICAgIC8vIFJlLWZldGNoIHRoZSBqdXN0LWNyZWF0ZWQgcGlwZWxpbmUgc28gcGx1Z2lucyBhcmUgcmVzb2x2ZWQgYW5kIHRoZVxuICAgICAgICAgICAgLy8gcmVnaXN0cnkgaG9zdCBpcyBiYWtlZCBFWEFDVExZIGFzIGBkZXBsb3kgLS1pZGAgZG9lcyDigJQgbm8gZHJpZnQuXG4gICAgICAgICAgICBjb25zdCBmZXRjaGVkID0gYXdhaXQgZmV0Y2hQaXBlbGluZVByb3BzKGRlcGxveUNsaWVudCwgcGlwZWxpbmUuaWQpO1xuICAgICAgICAgICAgYXdhaXQgcnVuRGVwbG95KHtcbiAgICAgICAgICAgICAgcGlwZWxpbmU6IGZldGNoZWQucGlwZWxpbmUsXG4gICAgICAgICAgICAgIHByb3BzV2l0aElkczogZmV0Y2hlZC5wcm9wc1dpdGhJZHMsXG4gICAgICAgICAgICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSxcbiAgICAgICAgICAgICAgcmVnaW9uOiBvcHRpb25zLnJlZ2lvbixcbiAgICAgICAgICAgICAgcmVxdWlyZUFwcHJvdmFsOiBvcHRpb25zLnJlcXVpcmVBcHByb3ZhbCxcbiAgICAgICAgICAgICAgb3V0cHV0OiBvcHRpb25zLm91dHB1dCxcbiAgICAgICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgICAgICAgcGxhdGZvcm1DbGllbnQ6IGRlcGxveUNsaWVudCxcbiAgICAgICAgICAgICAgcGxhdGZvcm1QaXBlbGluZVVybDogZGVwbG95Q29uZmlnLmFwaS5waXBlbGluZVVybCxcbiAgICAgICAgICAgICAgcGxhdGZvcm1CYXNlVXJsOiBkZXBsb3lDb25maWcuYXBpLmJhc2VVcmwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGNhdGNoIChkZXBsb3lFcnJvcikge1xuICAgICAgICAgICAgcHJpbnRFcnJvcignUGlwZWxpbmUgd2FzIGNyZWF0ZWQgYnV0IHRoZSBkZXBsb3kgZmFpbGVkJywge1xuICAgICAgICAgICAgICBwaXBlbGluZUlkOiBwaXBlbGluZS5pZCxcbiAgICAgICAgICAgICAgZXJyb3I6IGRlcGxveUVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBkZXBsb3lFcnJvci5tZXNzYWdlIDogU3RyaW5nKGRlcGxveUVycm9yKSxcbiAgICAgICAgICAgICAgcmV0cnk6IGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIGRlcGxveSAtLWlkICR7cGlwZWxpbmUuaWR9YCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gUmUtdGhyb3cgc28gdGhlIHByb2Nlc3MgZXhpdHMgbm9uLXplcm8uIFRoZSByZWNvcmQgaXMgaW50ZW50aW9uYWxseVxuICAgICAgICAgICAgLy8gcmV0YWluZWQg4oCUIHJlLXJ1biB0aGUgZGVwbG95IHdpdGggdGhlIGNvbW1hbmQgYWJvdmUuXG4gICAgICAgICAgICB0aHJvdyBkZXBsb3lFcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOZXh0IHN0ZXBzXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRTZWN0aW9uKCdOZXh0IFN0ZXBzJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGRpbSgnWW91IGNhbiBub3c6JykpO1xuICAgICAgICBpZiAoIW9wdGlvbnMuZGVwbG95KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgJHtjeWFuKCfigKInKX0gRGVwbG95OiAke2JvbGQoYGRlcGxveSAtLWlkICR7cGlwZWxpbmUuaWR9YCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtjeWFuKCfigKInKX0gVmlldzogJHtib2xkKGBnZXQtcGlwZWxpbmUgLS1pZCAke3BpcGVsaW5lLmlkfWApfWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgICAke2N5YW4oJ+KAoicpfSBBUEk6ICR7Y29uZmlnLmFwaS5iYXNlVXJsfSR7Y29uZmlnLmFwaS5waXBlbGluZVVybH0vJHtwaXBlbGluZS5pZH1gKTtcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBjb21tYW5kOiAnY3JlYXRlLXBpcGVsaW5lJyxcbiAgICAgICAgICAgIGV4ZWN1dGlvbklkLFxuICAgICAgICAgICAgcHJvamVjdDogb3B0aW9ucy5wcm9qZWN0LFxuICAgICAgICAgICAgb3JnYW5pemF0aW9uOiBvcHRpb25zLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICAgIGZpbGU6IG9wdGlvbnMuZmlsZSxcbiAgICAgICAgICAgIHZlcmlmeVNzbDogb3B0aW9ucy52ZXJpZnlTc2wsXG4gICAgICAgICAgICBkcnlSdW46IG9wdGlvbnMuZHJ5UnVuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xufSJdfQ==
315
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXBpcGVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2NyZWF0ZS1waXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBQ3RCLE9BQU8sSUFBSSxNQUFNLFlBQVksQ0FBQztBQUM5QixPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ25ILE9BQU8sRUFBK0YsTUFBTSxtQkFBbUIsQ0FBQztBQUNoSSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLHlCQUF5QixFQUFFLDhCQUE4QixFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hNLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNqSixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7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M0IsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsT0FBTyxFQUFFO29CQUNQLE9BQU8sRUFBRSxpQkFBaUI7b0JBQzFCLFdBQVc7b0JBQ1gsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO29CQUN4QixZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7b0JBQ2xDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtvQkFDbEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO29CQUM1QixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07aUJBQ3ZCO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IGZvcm1hdER1cmF0aW9uLCBmb3JtYXRGaWxlU2l6ZSwgRklMRV9TSVpFX0xJTUlUUywgZGVmYXVsdFBpcGVsaW5lTmFtZSB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHR5cGUgUGlwZWxpbmUsIHR5cGUgUGlwZWxpbmVSZXNwb25zZSwgdHlwZSBDcmVhdGVQaXBlbGluZVJlcXVlc3QsIHR5cGUgUGxhdGZvcm1EZXBsb3lDb25maWcgfSBmcm9tICcuLi90eXBlcy9pbmRleC5qcyc7XG5pbXBvcnQgeyBwcmludENvbW1hbmRIZWFkZXIsIHByaW50U3NsV2FybmluZywgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudCwgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jLCB3aXRoU3NsT3B0aW9ucywgd2l0aFByb2ZpbGVPcHRpb24sIHdpdGhSZWdpb25PcHRpb24gfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IHJ1bkRlcGxveSB9IGZyb20gJy4uL3V0aWxzL2RlcGxveS1ydW5uZXIuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IGVuc3VyZU91dHB1dERpcmVjdG9yeSwgcHJpbnRFcnJvciwgcHJpbnRJbmZvLCBwcmludEtleVZhbHVlLCBwcmludFNlY3Rpb24sIHByaW50U3VjY2VzcywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcbmltcG9ydCB7IGZldGNoUGlwZWxpbmVQcm9wcyB9IGZyb20gJy4uL3V0aWxzL3BpcGVsaW5lLWNvbmZpZy5qcyc7XG5pbXBvcnQgeyBleHRyYWN0U2luZ2xlUmVzcG9uc2UgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS11dGlscy5qcyc7XG5pbXBvcnQgeyByZWxheFRsc0ZvckNsaSB9IGZyb20gJy4uL3V0aWxzL3Rscy5qcyc7XG5cbmNvbnN0IHsgYm9sZCwgY3lhbiwgZGltLCBncmVlbiB9ID0gcGljbztcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBjcmVhdGUtcGlwZWxpbmVgIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogQWNjZXB0cyBhIHBpcGVsaW5lIHByb3BlcnRpZXMgSlNPTiBmaWxlLCB2YWxpZGF0ZXMgaXQsIHJlc29sdmVzXG4gKiBwcm9qZWN0L29yZ2FuaXphdGlvbiBmcm9tIENMSSBmbGFncyBvciB0aGUgcHJvcHMgZmlsZSwgYW5kXG4gKiBjcmVhdGVzIHRoZSBwaXBlbGluZSB2aWEgdGhlIHBsYXRmb3JtIEFQSS5cbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBpcGVsaW5lKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgd2l0aFNzbE9wdGlvbnMoXG4gICAgd2l0aFJlZ2lvbk9wdGlvbihcbiAgICAgIHdpdGhQcm9maWxlT3B0aW9uKHByb2dyYW1cbiAgICAgICAgLmNvbW1hbmQoJ2NyZWF0ZScpXG4gICAgICAgIC5kZXNjcmlwdGlvbignQ3JlYXRlIGEgbmV3IHBpcGVsaW5lIOKAlCBhbmQgb3B0aW9uYWxseSBkZXBsb3kgaXQgd2l0aCAtLWRlcGxveScpXG4gICAgICAgIC5yZXF1aXJlZE9wdGlvbignLWYsIC0tZmlsZSA8ZmlsZT4nLCAnUGF0aCB0byBwaXBlbGluZSBwcm9wZXJ0aWVzIEpTT04gZmlsZScpXG4gICAgICAgIC5vcHRpb24oJy1wLCAtLXByb2plY3QgPHByb2plY3Q+JywgJ1Byb2plY3QgbmFtZSAoZmFsbHMgYmFjayB0byB2YWx1ZSBpbiBwcm9wcyBmaWxlKScpXG4gICAgICAgIC5vcHRpb24oJy1vLCAtLW9yZ2FuaXphdGlvbiA8b3JnYW5pemF0aW9uPicsICdPcmdhbml6YXRpb24gbmFtZSAoZmFsbHMgYmFjayB0byB2YWx1ZSBpbiBwcm9wcyBmaWxlKScpXG4gICAgICAgIC5vcHRpb24oJy1uLCAtLW5hbWUgPG5hbWU+JywgJ1BpcGVsaW5lIG5hbWUnKVxuICAgICAgICAub3B0aW9uKCctYSwgLS12aXNpYmlsaXR5IDxydW5nPicsICdTaGFyaW5nIHJ1bmcgKHByaXZhdGV8b3JnfHB1YmxpYykuIFBpcGVsaW5lcyBkZWZhdWx0IHRvIG9yZyDigJQgYSB0ZWFtIGFzc2V0IGlzIHZpc2libGUgdG8gdGhlIHRlYW0uJywgJ29yZycpXG4gICAgICAgIC5vcHRpb24oJy0tZGVmYXVsdCcsICdTZXQgYXMgZGVmYXVsdCBwaXBlbGluZScsIGZhbHNlKVxuICAgICAgICAub3B0aW9uKCctLWFjdGl2ZScsICdTZXQgcGlwZWxpbmUgYXMgYWN0aXZlJywgdHJ1ZSlcbiAgICAgICAgLm9wdGlvbignLS1uby1hY3RpdmUnLCAnQ3JlYXRlIHRoZSBwaXBlbGluZSBhcyBpbmFjdGl2ZScpXG4gICAgICAgIC8vIC0tZGVwbG95OiBhZnRlciBjcmVhdGluZyB0aGUgcmVjb3JkLCBydW4gdGhlIHNhbWUgQ0RLIGRlcGxveSArIEFSTlxuICAgICAgICAvLyByZWdpc3RyYXRpb24gYXMgYHBpcGVsaW5lIGRlcGxveSAtLWlkYCAoc2hhcmVkIHJ1bkRlcGxveSkuIFRoZSBmbGFnc1xuICAgICAgICAvLyBiZWxvdyBhcHBseSBvbmx5IHdpdGggLS1kZXBsb3kuXG4gICAgICAgIC5vcHRpb24oJy0tZGVwbG95JywgJ0RlcGxveSB0aGUgcGlwZWxpbmUgd2l0aCBBV1MgQ0RLIGltbWVkaWF0ZWx5IGFmdGVyIGNyZWF0aW5nIGl0JywgZmFsc2UpXG4gICAgICAgIC5vcHRpb24oJy0tcmVxdWlyZS1hcHByb3ZhbCA8YXBwcm92YWw+JywgJ0RlcGxveSBhcHByb3ZhbCBsZXZlbDogbmV2ZXJ8YW55LWNoYW5nZXxicm9hZGVuaW5nICh3aXRoIC0tZGVwbG95KScsICduZXZlcicpXG4gICAgICAgIC5vcHRpb24oJy0tb3V0cHV0IDxkaXI+JywgJ0NESyBvdXRwdXQgZGlyZWN0b3J5ICh3aXRoIC0tZGVwbG95KScsICdjZGsub3V0JylcbiAgICAgICAgLm9wdGlvbignLS1zdG9yZS10b2tlbnMnLCAnRGVwbG95IGF1dGggdmlhIEFXUyBTZWNyZXRzIE1hbmFnZXIgdG9rZW4gKHdpdGggLS1kZXBsb3k7IHJlcXVpcmVzIFBMQVRGT1JNX1NFQ1JFVF9OQU1FKScsIGZhbHNlKSksXG4gICAgKSxcbiAgKVxuICAgIC5vcHRpb24oJy0tZHJ5LXJ1bicsICdWYWxpZGF0ZSBpbnB1dHMgd2l0aG91dCBjcmVhdGluZyBwaXBlbGluZScsIGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdDcmVhdGUgUGlwZWxpbmUnLCAnQ3JlYXRpbmcgUGlwZWxpbmUnKTtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgIHRyeSB7XG5cbiAgICAgICAgLy8gRGlzcGxheSBwYXJhbWV0ZXJzXG4gICAgICAgIHByaW50SW5mbygnQ29uZmlndXJhdGlvbicpO1xuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnUHJvamVjdCc6IG9wdGlvbnMucHJvamVjdCB8fCAnKGZyb20gcHJvcHMgZmlsZSknLFxuICAgICAgICAgICdPcmdhbml6YXRpb24nOiBvcHRpb25zLm9yZ2FuaXphdGlvbiB8fCAnKGZyb20gcHJvcHMgZmlsZSknLFxuICAgICAgICAgICdOYW1lJzogb3B0aW9ucy5uYW1lIHx8ICcobm90IHNldCknLFxuICAgICAgICAgICdWaXNpYmlsaXR5Jzogb3B0aW9ucy52aXNpYmlsaXR5LFxuICAgICAgICAgICdEZWZhdWx0IFBpcGVsaW5lJzogb3B0aW9ucy5kZWZhdWx0ID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgICdBY3RpdmUnOiBvcHRpb25zLmFjdGl2ZSA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgICAnRGVwbG95IEFmdGVyIENyZWF0ZSc6IG9wdGlvbnMuZGVwbG95ID8gYFllcyAocHJvZmlsZTogJHtvcHRpb25zLnByb2ZpbGUgfHwgJ2RlZmF1bHQnfSlgIDogJ05vJyxcbiAgICAgICAgICAnUHJvcGVydGllcyBGaWxlJzogb3B0aW9ucy5maWxlLFxuICAgICAgICAgICdTU0wgVmVyaWZpY2F0aW9uJzogb3B0aW9ucy52ZXJpZnlTc2wgPT09IGZhbHNlID8gJ0Rpc2FibGVkJyA6ICdFbmFibGVkJyxcbiAgICAgICAgICAnRHJ5IFJ1bic6IG9wdGlvbnMuZHJ5UnVuID8gJ1llcycgOiAnTm8nLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTZWN1cml0eSB3YXJuaW5nIGZvciBTU0wgdmVyaWZpY2F0aW9uIGRpc2FibGVkXG4gICAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludFNlY3Rpb24oJ0ZpbGUgVmFsaWRhdGlvbicpO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIGZpbGUgZXhpc3RzXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhvcHRpb25zLmZpbGUpKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignUHJvcGVydGllcyBmaWxlIG5vdCBmb3VuZCcsIHsgcGF0aDogb3B0aW9ucy5maWxlIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYEZpbGUgbm90IGZvdW5kOiAke29wdGlvbnMuZmlsZX1gLCAnZmlsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZmlsZSBleHRlbnNpb25cbiAgICAgICAgY29uc3QgZmlsZUV4dCA9IHBhdGguZXh0bmFtZShvcHRpb25zLmZpbGUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChmaWxlRXh0ICE9PSAnLmpzb24nKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKCdGaWxlIGV4dGVuc2lvbiBpcyBub3QgLmpzb24nLCB7IGV4dGVuc2lvbjogZmlsZUV4dCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVTdGF0cyA9IGZzLnN0YXRTeW5jKG9wdGlvbnMuZmlsZSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZmlsZSBzaXplXG4gICAgICAgIGlmIChmaWxlU3RhdHMuc2l6ZSA+IEZJTEVfU0laRV9MSU1JVFMuUElQRUxJTkVfUFJPUFMpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdQcm9wZXJ0aWVzIGZpbGUgaXMgdG9vIGxhcmdlJywge1xuICAgICAgICAgICAgc2l6ZTogZm9ybWF0RmlsZVNpemUoZmlsZVN0YXRzLnNpemUpLFxuICAgICAgICAgICAgbGltaXQ6IGZvcm1hdEZpbGVTaXplKEZJTEVfU0laRV9MSU1JVFMuUElQRUxJTkVfUFJPUFMpLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ1Byb3BlcnRpZXMgZmlsZSBleGNlZWRzIHNpemUgbGltaXQnLCAnZmlsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpbnRTdWNjZXNzKCdGaWxlIHZhbGlkYXRpb24gcGFzc2VkJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdGaWxlIFBhdGgnOiBvcHRpb25zLmZpbGUsXG4gICAgICAgICAgJ0ZpbGUgU2l6ZSc6IGZvcm1hdEZpbGVTaXplKGZpbGVTdGF0cy5zaXplKSxcbiAgICAgICAgICAnRXh0ZW5zaW9uJzogZmlsZUV4dCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmVhZCBhbmQgcGFyc2UgcHJvcGVydGllcyBmaWxlXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRJbmZvKCdSZWFkaW5nIHBpcGVsaW5lIHByb3BlcnRpZXMuLi4nKTtcblxuICAgICAgICBjb25zdCBmaWxlQ29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhvcHRpb25zLmZpbGUsICd1dGYtOCcpO1xuXG4gICAgICAgIGxldCBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcHJvcHMgPSBKU09OLnBhcnNlKGZpbGVDb250ZW50KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdJbnZhbGlkIEpTT04gaW4gcHJvcGVydGllcyBmaWxlJywge1xuICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICAgIGhpbnQ6ICdFbnN1cmUgdGhlIGZpbGUgY29udGFpbnMgdmFsaWQgSlNPTiBzeW50YXgnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ1Byb3BlcnRpZXMgZmlsZSBtdXN0IGNvbnRhaW4gdmFsaWQgSlNPTicsICdmaWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSBwcm9wZXJ0aWVzIHN0cnVjdHVyZVxuICAgICAgICBpZiAodHlwZW9mIHByb3BzICE9PSAnb2JqZWN0JyB8fCBwcm9wcyA9PT0gbnVsbCkge1xuICAgICAgICAgIHByaW50RXJyb3IoJ0ludmFsaWQgcHJvcGVydGllcyBmb3JtYXQnLCB7XG4gICAgICAgICAgICB0eXBlOiB0eXBlb2YgcHJvcHMsXG4gICAgICAgICAgICBoaW50OiAnUHJvcGVydGllcyBtdXN0IGJlIGEgSlNPTiBvYmplY3QnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ1Byb3BlcnRpZXMgbXVzdCBiZSBhIHZhbGlkIG9iamVjdCcsICdmaWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9wQ291bnQgPSBPYmplY3Qua2V5cyhwcm9wcykubGVuZ3RoO1xuXG4gICAgICAgIHByaW50U3VjY2VzcygnUHJvcGVydGllcyBwYXJzZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdUb3RhbCBLZXlzJzogcHJvcENvdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgJ1NhbXBsZSBLZXlzJzogT2JqZWN0LmtleXMocHJvcHMpLnNsaWNlKDAsIDUpLmpvaW4oJywgJykgKyAocHJvcENvdW50ID4gNSA/ICcuLi4nIDogJycpLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBWYWxpZGF0ZSBwcm9wZXJ0aWVzIGNvbnRlbnRcbiAgICAgICAgaWYgKHByb3BDb3VudCA9PT0gMCkge1xuICAgICAgICAgIHByaW50V2FybmluZygnUHJvcGVydGllcyBvYmplY3QgaXMgZW1wdHkgLSBwaXBlbGluZSB3aWxsIGhhdmUgbm8gY29uZmlndXJhdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVzb2x2ZSBwcm9qZWN0ICYgb3JnYW5pemF0aW9uOiBwcmVmZXIgQ0xJIGZsYWdzLCBmYWxsIGJhY2sgdG9cbiAgICAgICAgLy8gdmFsdWVzIGVtYmVkZGVkIGluc2lkZSB0aGUgcHJvcHMgZmlsZSAoYnVpbGRlclByb3BzKS5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWRQcm9qZWN0ID0gb3B0aW9ucy5wcm9qZWN0ID8/IChwcm9wcy5wcm9qZWN0IGFzIHN0cmluZyB8IHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkT3JnYW5pemF0aW9uID0gb3B0aW9ucy5vcmdhbml6YXRpb24gPz8gKHByb3BzLm9yZ2FuaXphdGlvbiBhcyBzdHJpbmcgfCB1bmRlZmluZWQpO1xuXG4gICAgICAgIGlmICghcmVzb2x2ZWRQcm9qZWN0KSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignUHJvamVjdCBpcyByZXF1aXJlZCcsIHtcbiAgICAgICAgICAgIGhpbnQ6ICdQcm92aWRlIC1wLy0tcHJvamVjdCBmbGFnIG9yIGluY2x1ZGUgXCJwcm9qZWN0XCIgaW4gdGhlIHByb3BzIGZpbGUnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ1Byb2plY3QgaXMgcmVxdWlyZWQnLCAncHJvamVjdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmVzb2x2ZWRPcmdhbml6YXRpb24pIHtcbiAgICAgICAgICBwcmludEVycm9yKCdPcmdhbml6YXRpb24gaXMgcmVxdWlyZWQnLCB7XG4gICAgICAgICAgICBoaW50OiAnUHJvdmlkZSAtby8tLW9yZ2FuaXphdGlvbiBmbGFnIG9yIGluY2x1ZGUgXCJvcmdhbml6YXRpb25cIiBpbiB0aGUgcHJvcHMgZmlsZScsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignT3JnYW5pemF0aW9uIGlzIHJlcXVpcmVkJywgJ29yZ2FuaXphdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVzb2x2ZSBwaXBlbGluZU5hbWUgd2l0aCB0aGUgc2hhcmVkIGRlZmF1bHQgKG1pcnJvcnMgcGlwZWxpbmUtY29yZSdzXG4gICAgICAgIC8vIHBpcGVsaW5lLWNvbmZpZ3VyYXRpb24udHMpIHNvIGNyZWF0ZSArIHJlZ2lzdHJ5ICsgQ0RLIGFsbCBhZ3JlZS5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWRQaXBlbGluZU5hbWUgPSBvcHRpb25zLm5hbWVcbiAgICAgICAgICA/PyAocHJvcHMucGlwZWxpbmVOYW1lIGFzIHN0cmluZyB8IHVuZGVmaW5lZClcbiAgICAgICAgICA/PyBkZWZhdWx0UGlwZWxpbmVOYW1lKHJlc29sdmVkT3JnYW5pemF0aW9uLCByZXNvbHZlZFByb2plY3QpO1xuXG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IENyZWF0ZVBpcGVsaW5lUmVxdWVzdCA9IHtcbiAgICAgICAgICBwcm9qZWN0OiByZXNvbHZlZFByb2plY3QsXG4gICAgICAgICAgb3JnYW5pemF0aW9uOiByZXNvbHZlZE9yZ2FuaXphdGlvbixcbiAgICAgICAgICBwaXBlbGluZU5hbWU6IHJlc29sdmVkUGlwZWxpbmVOYW1lLFxuICAgICAgICAgIHByb3BzLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEFkZCBvcHRpb25hbCBmaWVsZHMgb25seSBpZiBwcm92aWRlZFxuICAgICAgICBpZiAob3B0aW9ucy52aXNpYmlsaXR5KSB7XG4gICAgICAgICAgcGF5bG9hZC52aXNpYmlsaXR5ID0gb3B0aW9ucy52aXNpYmlsaXR5O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBheWxvYWQuaXNEZWZhdWx0ID0gb3B0aW9ucy5kZWZhdWx0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmFjdGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcGF5bG9hZC5pc0FjdGl2ZSA9IG9wdGlvbnMuYWN0aXZlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRHJ5IHJ1biBtb2RlXG4gICAgICAgIGlmIChvcHRpb25zLmRyeVJ1bikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ0RyeSBSdW4gLSBSZXF1ZXN0IFByZXZpZXcnKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShwYXlsb2FkLCBudWxsLCAyKSk7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgIHByaW50U3VjY2Vzcygn4pyTIFZhbGlkYXRpb24gY29tcGxldGUgLSBubyBwaXBlbGluZSBjcmVhdGVkIChkcnkgcnVuIG1vZGUpJyk7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgIGlmIChvcHRpb25zLmRlcGxveSkge1xuICAgICAgICAgICAgcHJpbnRJbmZvKCdXaXRoIC0tZGVwbG95LCB0aGUgcGlwZWxpbmUgd291bGQgYmUgZGVwbG95ZWQgdmlhIENESyBhZnRlciBjcmVhdGlvbicsIHtcbiAgICAgICAgICAgICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlIHx8ICcoZGVmYXVsdCknLFxuICAgICAgICAgICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uIHx8ICcoZGVmYXVsdCknLFxuICAgICAgICAgICAgICByZXF1aXJlQXBwcm92YWw6IG9wdGlvbnMucmVxdWlyZUFwcHJvdmFsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByaW50SW5mbygnVG8gY3JlYXRlIHRoZSBwaXBlbGluZSwgcnVuIHRoZSBjb21tYW5kIHdpdGhvdXQgLS1kcnktcnVuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIGF1dGhlbnRpY2F0ZWQgQVBJIGNsaWVudFxuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBjb25maWcgPSBjbGllbnQuZ2V0Q29uZmlnKCk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIHBpcGVsaW5lXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRTZWN0aW9uKCdDcmVhdGluZyBQaXBlbGluZScpO1xuXG4gICAgICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ0NyZWF0aW5nIHBpcGVsaW5lLi4uJykuc3RhcnQoKTtcbiAgICAgICAgbGV0IHJhd1Jlc3BvbnNlOiBQaXBlbGluZVJlc3BvbnNlO1xuICAgICAgICBsZXQgcmVxdWVzdER1cmF0aW9uOiBudW1iZXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdFN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICByYXdSZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0PFBpcGVsaW5lUmVzcG9uc2U+KFxuICAgICAgICAgICAgY29uZmlnLmFwaS5waXBlbGluZVVybCxcbiAgICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXF1ZXN0RHVyYXRpb24gPSBEYXRlLm5vdygpIC0gcmVxdWVzdFN0YXJ0O1xuICAgICAgICAgIHNwaW5uZXIuc3VjY2VlZCgnUGlwZWxpbmUgY3JlYXRlZCcpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHNwaW5uZXIuZmFpbCgnUGlwZWxpbmUgY3JlYXRpb24gZmFpbGVkJyk7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwaXBlbGluZSA9IGV4dHJhY3RTaW5nbGVSZXNwb25zZTxQaXBlbGluZT4ocmF3UmVzcG9uc2UsICdwaXBlbGluZScsICdpZCcpO1xuXG4gICAgICAgIGlmICghcGlwZWxpbmU/LmlkKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignSW52YWxpZCBwaXBlbGluZSByZXNwb25zZScsIHtcbiAgICAgICAgICAgIHJlc3BvbnNlS2V5czogcmF3UmVzcG9uc2UgPyBPYmplY3Qua2V5cyhyYXdSZXNwb25zZSkgOiAnKG51bGwpJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpcGVsaW5lIGNyZWF0aW9uIGZhaWxlZCAtIG5vIHZhbGlkIHBpcGVsaW5lIGRhdGEgcmVjZWl2ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRTZWN0aW9uKCfinJMgUGlwZWxpbmUgQ3JlYXRlZCBTdWNjZXNzZnVsbHknKTtcblxuICAgICAgICAvLyBEaXNwbGF5IGNyZWF0ZWQgcGlwZWxpbmUgaW5mb1xuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnUGlwZWxpbmUgSUQnOiBncmVlbihib2xkKHBpcGVsaW5lLmlkKSksXG4gICAgICAgICAgJ1Byb2plY3QnOiBwaXBlbGluZS5wcm9qZWN0LFxuICAgICAgICAgICdPcmdhbml6YXRpb24nOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgICAgICAgJ05hbWUnOiBwaXBlbGluZS5waXBlbGluZU5hbWUgfHwgJyhub3Qgc2V0KScsXG4gICAgICAgICAgJ1Zpc2liaWxpdHknOiBwaXBlbGluZS52aXNpYmlsaXR5IHx8ICdvcmcnLFxuICAgICAgICAgICdEZWZhdWx0JzogcGlwZWxpbmUuaXNEZWZhdWx0ID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgICdBY3RpdmUnOiBwaXBlbGluZS5pc0FjdGl2ZSA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgICAnUHJvcGVydGllcyc6IHBpcGVsaW5lLnByb3BzID8gYCR7T2JqZWN0LmtleXMocGlwZWxpbmUucHJvcHMpLmxlbmd0aH0ga2V5c2AgOiAnKG5vdCByZXR1cm5lZCknLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocGlwZWxpbmUuY3JlYXRlZEF0KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICAgJ0NyZWF0ZWQgQXQnOiBwaXBlbGluZS5jcmVhdGVkQXQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQZXJmb3JtYW5jZSBtZXRyaWNzXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ0V4ZWN1dGlvbiBJRCc6IGV4ZWN1dGlvbklkLFxuICAgICAgICAgICdSZXF1ZXN0IER1cmF0aW9uJzogZm9ybWF0RHVyYXRpb24ocmVxdWVzdER1cmF0aW9uKSxcbiAgICAgICAgICAnVG90YWwgRHVyYXRpb24nOiBmb3JtYXREdXJhdGlvbihEYXRlLm5vdygpIC0gc3RhcnRUaW1lKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU2F2ZSBwaXBlbGluZSBpbmZvIHRvIGZpbGVcbiAgICAgICAgY29uc3Qgb3V0cHV0RGlyID0gJy4vb3V0cHV0JztcbiAgICAgICAgZW5zdXJlT3V0cHV0RGlyZWN0b3J5KG91dHB1dERpcik7XG5cbiAgICAgICAgY29uc3Qgb3V0cHV0RmlsZSA9IHBhdGguam9pbihvdXRwdXREaXIsIGBwaXBlbGluZS0ke3BpcGVsaW5lLmlkfS5qc29uYCk7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMob3V0cHV0RmlsZSwgSlNPTi5zdHJpbmdpZnkocGlwZWxpbmUsIG51bGwsIDIpKTtcblxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U3VjY2VzcygnUGlwZWxpbmUgZGV0YWlscyBzYXZlZCB0byBmaWxlJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdPdXRwdXQgRmlsZSc6IG91dHB1dEZpbGUsXG4gICAgICAgICAgJ0ZpbGUgU2l6ZSc6IGZvcm1hdEZpbGVTaXplKGZzLnN0YXRTeW5jKG91dHB1dEZpbGUpLnNpemUpLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyDilIDilIAgT3B0aW9uYWwgZGVwbG95ICgtLWRlcGxveSkg4pSA4pSAXG4gICAgICAgIC8vIFRoZSByZWNvcmQgbm93IGV4aXN0cyBhbmQgaXMgYXV0aG9yaXRhdGl2ZS4gSWYgdGhlIGRlcGxveSBmYWlscyB3ZSBLRUVQXG4gICAgICAgIC8vIGl0IGFuZCBzdXJmYWNlIHRoZSBleGFjdCByZXRyeSByYXRoZXIgdGhhbiByb2xsaW5nIGJhY2sgKG5ldmVyIGZhbHNlLWdyZWVuKS5cbiAgICAgICAgaWYgKG9wdGlvbnMuZGVwbG95KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgIHByaW50U2VjdGlvbignRGVwbG95aW5nIFBpcGVsaW5lJyk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIERlcGxveSB0b3VjaGVzIHRoZSBBV1MgU0RLICsgdGhlIENESyBzeW50aCBzdWJwcm9jZXNzOyByZWxheCBUTFMgdGhlXG4gICAgICAgICAgICAvLyBzYW1lIHdheSBgZGVwbG95YCBkb2VzIChyZWZ1c2VkIGluIHByb2R1Y3Rpb24gYnkgcmVsYXhUbHNGb3JDbGkpLlxuICAgICAgICAgICAgcmVsYXhUbHNGb3JDbGkob3B0aW9ucy52ZXJpZnlTc2wsIHByaW50V2FybmluZyk7XG4gICAgICAgICAgICAvLyBUaGUgYXN5bmMgY2xpZW50IGFkZHMgLS1zdG9yZS10b2tlbnMgKFNlY3JldHMgTWFuYWdlcikgc3VwcG9ydCBhbmRcbiAgICAgICAgICAgIC8vIGJhY2tzIEJPVEggdGhlIHByb3BzIGZldGNoIGFuZCB0aGUgcmVnaXN0cnkgY2FsbGJhY2suXG4gICAgICAgICAgICBjb25zdCBkZXBsb3lDbGllbnQgPSBhd2FpdCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMob3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBkZXBsb3lDb25maWcgPSBkZXBsb3lDbGllbnQuZ2V0Q29uZmlnKCkgYXMgUGxhdGZvcm1EZXBsb3lDb25maWc7XG4gICAgICAgICAgICAvLyBSZS1mZXRjaCB0aGUganVzdC1jcmVhdGVkIHBpcGVsaW5lIHNvIHBsdWdpbnMgYXJlIHJlc29sdmVkIGFuZCB0aGVcbiAgICAgICAgICAgIC8vIHJlZ2lzdHJ5IGhvc3QgaXMgYmFrZWQgRVhBQ1RMWSBhcyBgZGVwbG95IC0taWRgIGRvZXMg4oCUIG5vIGRyaWZ0LlxuICAgICAgICAgICAgY29uc3QgZmV0Y2hlZCA9IGF3YWl0IGZldGNoUGlwZWxpbmVQcm9wcyhkZXBsb3lDbGllbnQsIHBpcGVsaW5lLmlkKTtcbiAgICAgICAgICAgIGF3YWl0IHJ1bkRlcGxveSh7XG4gICAgICAgICAgICAgIHBpcGVsaW5lOiBmZXRjaGVkLnBpcGVsaW5lLFxuICAgICAgICAgICAgICBwcm9wc1dpdGhJZHM6IGZldGNoZWQucHJvcHNXaXRoSWRzLFxuICAgICAgICAgICAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUsXG4gICAgICAgICAgICAgIHJlZ2lvbjogb3B0aW9ucy5yZWdpb24sXG4gICAgICAgICAgICAgIHJlcXVpcmVBcHByb3ZhbDogb3B0aW9ucy5yZXF1aXJlQXBwcm92YWwsXG4gICAgICAgICAgICAgIG91dHB1dDogb3B0aW9ucy5vdXRwdXQsXG4gICAgICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICAgIHBsYXRmb3JtQ2xpZW50OiBkZXBsb3lDbGllbnQsXG4gICAgICAgICAgICAgIHBsYXRmb3JtUGlwZWxpbmVVcmw6IGRlcGxveUNvbmZpZy5hcGkucGlwZWxpbmVVcmwsXG4gICAgICAgICAgICAgIHBsYXRmb3JtQmFzZVVybDogZGVwbG95Q29uZmlnLmFwaS5iYXNlVXJsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBjYXRjaCAoZGVwbG95RXJyb3IpIHtcbiAgICAgICAgICAgIHByaW50RXJyb3IoJ1BpcGVsaW5lIHdhcyBjcmVhdGVkIGJ1dCB0aGUgZGVwbG95IGZhaWxlZCcsIHtcbiAgICAgICAgICAgICAgcGlwZWxpbmVJZDogcGlwZWxpbmUuaWQsXG4gICAgICAgICAgICAgIGVycm9yOiBkZXBsb3lFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZGVwbG95RXJyb3IubWVzc2FnZSA6IFN0cmluZyhkZXBsb3lFcnJvciksXG4gICAgICAgICAgICAgIHJldHJ5OiBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBkZXBsb3kgLS1pZCAke3BpcGVsaW5lLmlkfWAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIFJlLXRocm93IHNvIHRoZSBwcm9jZXNzIGV4aXRzIG5vbi16ZXJvLiBUaGUgcmVjb3JkIGlzIGludGVudGlvbmFsbHlcbiAgICAgICAgICAgIC8vIHJldGFpbmVkIOKAlCByZS1ydW4gdGhlIGRlcGxveSB3aXRoIHRoZSBjb21tYW5kIGFib3ZlLlxuICAgICAgICAgICAgdGhyb3cgZGVwbG95RXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTmV4dCBzdGVwc1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbignTmV4dCBTdGVwcycpO1xuICAgICAgICBjb25zb2xlLmxvZyhkaW0oJ1lvdSBjYW4gbm93OicpKTtcbiAgICAgICAgaWYgKCFvcHRpb25zLmRlcGxveSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgICR7Y3lhbign4oCiJyl9IERlcGxveTogJHtib2xkKGBkZXBsb3kgLS1pZCAke3BpcGVsaW5lLmlkfWApfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICR7Y3lhbign4oCiJyl9IFZpZXc6ICR7Ym9sZChgZ2V0LXBpcGVsaW5lIC0taWQgJHtwaXBlbGluZS5pZH1gKX1gKTtcbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtjeWFuKCfigKInKX0gQVBJOiAke2NvbmZpZy5hcGkuYmFzZVVybH0ke2NvbmZpZy5hcGkucGlwZWxpbmVVcmx9LyR7cGlwZWxpbmUuaWR9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgY29tbWFuZDogJ2NyZWF0ZS1waXBlbGluZScsXG4gICAgICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgICAgIHByb2plY3Q6IG9wdGlvbnMucHJvamVjdCxcbiAgICAgICAgICAgIG9yZ2FuaXphdGlvbjogb3B0aW9ucy5vcmdhbml6YXRpb24sXG4gICAgICAgICAgICBmaWxlOiBvcHRpb25zLmZpbGUsXG4gICAgICAgICAgICB2ZXJpZnlTc2w6IG9wdGlvbnMudmVyaWZ5U3NsLFxuICAgICAgICAgICAgZHJ5UnVuOiBvcHRpb25zLmRyeVJ1bixcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn0iXX0=
@@ -33,7 +33,7 @@ export function getPipeline(program) {
33
33
  'Project': pipeline.project,
34
34
  'Organization': pipeline.organization,
35
35
  'Name': pipeline.pipelineName || '(not set)',
36
- 'Access': pipeline.accessModifier || 'private',
36
+ 'Visibility': pipeline.visibility || 'org',
37
37
  'Default': pipeline.isDefault ? 'Yes' : 'No',
38
38
  'Active': pipeline.isActive ? 'Yes' : 'No',
39
39
  'Created At': pipeline.createdAt || '(not available)',
@@ -46,4 +46,4 @@ export function getPipeline(program) {
46
46
  idContextKey: 'pipelineId',
47
47
  }));
48
48
  }
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXBpcGVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2dldC1waXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxJQUFJLE1BQU0sWUFBWSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWlCLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTNELE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBRTdCOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsT0FBZ0I7SUFDMUMsY0FBYyxDQUNaLE9BQU87U0FDSixPQUFPLENBQUMsS0FBSyxDQUFDO1NBQ2QsV0FBVyxDQUFDLDZCQUE2QixDQUFDO1NBQzFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDO1NBQzlDLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLENBQUM7U0FDNUUsTUFBTSxDQUFDLHFCQUFxQixFQUFFLHFCQUFxQixDQUFDLENBQ3hEO1NBQ0UsTUFBTSxDQUFDLGNBQWMsRUFBRSwrQ0FBK0MsRUFBRSxLQUFLLENBQUM7U0FDOUUsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQVcsT0FBTyxFQUFFLE9BQU8sRUFBRTtRQUM1RCxLQUFLLEVBQUUsVUFBVTtRQUNqQixXQUFXLEVBQUUsVUFBVTtRQUN2QixNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsRUFBRTtRQUNyRSxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEIsYUFBYSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLFNBQVMsRUFBRSxRQUFRLENBQUMsT0FBTztZQUMzQixjQUFjLEVBQUUsUUFBUSxDQUFDLFlBQVk7WUFDckMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxZQUFZLElBQUksV0FBVztZQUM1QyxRQUFRLEVBQUUsUUFBUSxDQUFDLGNBQWMsSUFBSSxTQUFTO1lBQzlDLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDNUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUMxQyxZQUFZLEVBQUUsUUFBUSxDQUFDLFNBQVMsSUFBSSxpQkFBaUI7WUFDckQsWUFBWSxFQUFFLFFBQVEsQ0FBQyxTQUFTLElBQUksaUJBQWlCO1NBQ3RELENBQUM7UUFDRixLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FDM0IsT0FBTyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLE9BQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3pHLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRTtZQUMvRCxDQUFDLENBQUMsSUFBSTtRQUNWLFdBQVcsRUFBRSxjQUFjO1FBQzNCLFlBQVksRUFBRSxZQUFZO0tBQzNCLENBQUMsQ0FBQyxDQUFDO0FBQ1IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCBwaWNvIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgcnVuR2V0RW50aXR5IH0gZnJvbSAnLi9lbnRpdHktZ2V0LmpzJztcbmltcG9ydCB7IHR5cGUgUGlwZWxpbmUgfSBmcm9tICcuLi90eXBlcy9pbmRleC5qcyc7XG5pbXBvcnQgeyB3aXRoU3NsT3B0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuXG5jb25zdCB7IGJvbGQsIGdyZWVuIH0gPSBwaWNvO1xuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYGdldC1waXBlbGluZWAgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgYmFzaFxuICogcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBnZXQgLS1pZCA8cGlwZWxpbmUtaWQ+XG4gKiBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIGdldCAtLWlkIDxwaXBlbGluZS1pZD4gLS1mb3JtYXQganNvblxuICogcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBnZXQgLS1pZCA8cGlwZWxpbmUtaWQ+IC0tb3V0cHV0IHBpcGVsaW5lLmpzb25cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGlwZWxpbmUocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICB3aXRoU3NsT3B0aW9ucyhcbiAgICBwcm9ncmFtXG4gICAgICAuY29tbWFuZCgnZ2V0JylcbiAgICAgIC5kZXNjcmlwdGlvbignR2V0IGEgc2luZ2xlIHBpcGVsaW5lIGJ5IElEJylcbiAgICAgIC5yZXF1aXJlZE9wdGlvbignLWksIC0taWQgPGlkPicsICdQaXBlbGluZSBJRCcpXG4gICAgICAub3B0aW9uKCctZiwgLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCAoanNvbiwgeWFtbCwgdGFibGUpJywgJ2pzb24nKVxuICAgICAgLm9wdGlvbignLW8sIC0tb3V0cHV0IDxmaWxlPicsICdTYXZlIG91dHB1dCB0byBmaWxlJyksXG4gIClcbiAgICAub3B0aW9uKCctLXNob3ctcHJvcHMnLCAnU2hvdyBmdWxsIHBpcGVsaW5lIHByb3BlcnRpZXMgaW4gdGFibGUgZm9ybWF0JywgZmFsc2UpXG4gICAgLmFjdGlvbigob3B0aW9ucykgPT4gcnVuR2V0RW50aXR5PFBpcGVsaW5lPihwcm9ncmFtLCBvcHRpb25zLCB7XG4gICAgICBsYWJlbDogJ1BpcGVsaW5lJyxcbiAgICAgIHJlc3BvbnNlS2V5OiAncGlwZWxpbmUnLFxuICAgICAgdXJsRm9yOiAoY2xpZW50LCBpZCkgPT4gYCR7Y2xpZW50LmdldENvbmZpZygpLmFwaS5waXBlbGluZVVybH0vJHtpZH1gLFxuICAgICAgc3VtbWFyeTogKHBpcGVsaW5lKSA9PiAoe1xuICAgICAgICAnUGlwZWxpbmUgSUQnOiBncmVlbihib2xkKHBpcGVsaW5lLmlkKSksXG4gICAgICAgICdQcm9qZWN0JzogcGlwZWxpbmUucHJvamVjdCxcbiAgICAgICAgJ09yZ2FuaXphdGlvbic6IHBpcGVsaW5lLm9yZ2FuaXphdGlvbixcbiAgICAgICAgJ05hbWUnOiBwaXBlbGluZS5waXBlbGluZU5hbWUgfHwgJyhub3Qgc2V0KScsXG4gICAgICAgICdBY2Nlc3MnOiBwaXBlbGluZS5hY2Nlc3NNb2RpZmllciB8fCAncHJpdmF0ZScsXG4gICAgICAgICdEZWZhdWx0JzogcGlwZWxpbmUuaXNEZWZhdWx0ID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAnQWN0aXZlJzogcGlwZWxpbmUuaXNBY3RpdmUgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICdDcmVhdGVkIEF0JzogcGlwZWxpbmUuY3JlYXRlZEF0IHx8ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgICAnVXBkYXRlZCBBdCc6IHBpcGVsaW5lLnVwZGF0ZWRBdCB8fCAnKG5vdCBhdmFpbGFibGUpJyxcbiAgICAgIH0pLFxuICAgICAgZXh0cmE6IChvcHRpb25zLCBwaXBlbGluZSkgPT5cbiAgICAgICAgb3B0aW9ucy5zaG93UHJvcHMgJiYgb3B0aW9ucy5mb3JtYXQgPT09ICd0YWJsZScgJiYgcGlwZWxpbmUucHJvcHMgJiYgT2JqZWN0LmtleXMocGlwZWxpbmUucHJvcHMpLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IHsgaW5mb0xhYmVsOiAnUGlwZWxpbmUgUHJvcGVydGllcycsIHBheWxvYWQ6IHBpcGVsaW5lLnByb3BzIH1cbiAgICAgICAgICA6IG51bGwsXG4gICAgICBjb21tYW5kTmFtZTogJ2dldC1waXBlbGluZScsXG4gICAgICBpZENvbnRleHRLZXk6ICdwaXBlbGluZUlkJyxcbiAgICB9KSk7XG59XG4iXX0=
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXBpcGVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2dldC1waXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxJQUFJLE1BQU0sWUFBWSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWlCLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTNELE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBRTdCOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsT0FBZ0I7SUFDMUMsY0FBYyxDQUNaLE9BQU87U0FDSixPQUFPLENBQUMsS0FBSyxDQUFDO1NBQ2QsV0FBVyxDQUFDLDZCQUE2QixDQUFDO1NBQzFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDO1NBQzlDLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLENBQUM7U0FDNUUsTUFBTSxDQUFDLHFCQUFxQixFQUFFLHFCQUFxQixDQUFDLENBQ3hEO1NBQ0UsTUFBTSxDQUFDLGNBQWMsRUFBRSwrQ0FBK0MsRUFBRSxLQUFLLENBQUM7U0FDOUUsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQVcsT0FBTyxFQUFFLE9BQU8sRUFBRTtRQUM1RCxLQUFLLEVBQUUsVUFBVTtRQUNqQixXQUFXLEVBQUUsVUFBVTtRQUN2QixNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsRUFBRTtRQUNyRSxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEIsYUFBYSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLFNBQVMsRUFBRSxRQUFRLENBQUMsT0FBTztZQUMzQixjQUFjLEVBQUUsUUFBUSxDQUFDLFlBQVk7WUFDckMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxZQUFZLElBQUksV0FBVztZQUM1QyxZQUFZLEVBQUUsUUFBUSxDQUFDLFVBQVUsSUFBSSxLQUFLO1lBQzFDLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDNUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUMxQyxZQUFZLEVBQUUsUUFBUSxDQUFDLFNBQVMsSUFBSSxpQkFBaUI7WUFDckQsWUFBWSxFQUFFLFFBQVEsQ0FBQyxTQUFTLElBQUksaUJBQWlCO1NBQ3RELENBQUM7UUFDRixLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FDM0IsT0FBTyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLE9BQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3pHLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRTtZQUMvRCxDQUFDLENBQUMsSUFBSTtRQUNWLFdBQVcsRUFBRSxjQUFjO1FBQzNCLFlBQVksRUFBRSxZQUFZO0tBQzNCLENBQUMsQ0FBQyxDQUFDO0FBQ1IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCBwaWNvIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgcnVuR2V0RW50aXR5IH0gZnJvbSAnLi9lbnRpdHktZ2V0LmpzJztcbmltcG9ydCB7IHR5cGUgUGlwZWxpbmUgfSBmcm9tICcuLi90eXBlcy9pbmRleC5qcyc7XG5pbXBvcnQgeyB3aXRoU3NsT3B0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuXG5jb25zdCB7IGJvbGQsIGdyZWVuIH0gPSBwaWNvO1xuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYGdldC1waXBlbGluZWAgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgYmFzaFxuICogcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBnZXQgLS1pZCA8cGlwZWxpbmUtaWQ+XG4gKiBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIGdldCAtLWlkIDxwaXBlbGluZS1pZD4gLS1mb3JtYXQganNvblxuICogcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBnZXQgLS1pZCA8cGlwZWxpbmUtaWQ+IC0tb3V0cHV0IHBpcGVsaW5lLmpzb25cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGlwZWxpbmUocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICB3aXRoU3NsT3B0aW9ucyhcbiAgICBwcm9ncmFtXG4gICAgICAuY29tbWFuZCgnZ2V0JylcbiAgICAgIC5kZXNjcmlwdGlvbignR2V0IGEgc2luZ2xlIHBpcGVsaW5lIGJ5IElEJylcbiAgICAgIC5yZXF1aXJlZE9wdGlvbignLWksIC0taWQgPGlkPicsICdQaXBlbGluZSBJRCcpXG4gICAgICAub3B0aW9uKCctZiwgLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCAoanNvbiwgeWFtbCwgdGFibGUpJywgJ2pzb24nKVxuICAgICAgLm9wdGlvbignLW8sIC0tb3V0cHV0IDxmaWxlPicsICdTYXZlIG91dHB1dCB0byBmaWxlJyksXG4gIClcbiAgICAub3B0aW9uKCctLXNob3ctcHJvcHMnLCAnU2hvdyBmdWxsIHBpcGVsaW5lIHByb3BlcnRpZXMgaW4gdGFibGUgZm9ybWF0JywgZmFsc2UpXG4gICAgLmFjdGlvbigob3B0aW9ucykgPT4gcnVuR2V0RW50aXR5PFBpcGVsaW5lPihwcm9ncmFtLCBvcHRpb25zLCB7XG4gICAgICBsYWJlbDogJ1BpcGVsaW5lJyxcbiAgICAgIHJlc3BvbnNlS2V5OiAncGlwZWxpbmUnLFxuICAgICAgdXJsRm9yOiAoY2xpZW50LCBpZCkgPT4gYCR7Y2xpZW50LmdldENvbmZpZygpLmFwaS5waXBlbGluZVVybH0vJHtpZH1gLFxuICAgICAgc3VtbWFyeTogKHBpcGVsaW5lKSA9PiAoe1xuICAgICAgICAnUGlwZWxpbmUgSUQnOiBncmVlbihib2xkKHBpcGVsaW5lLmlkKSksXG4gICAgICAgICdQcm9qZWN0JzogcGlwZWxpbmUucHJvamVjdCxcbiAgICAgICAgJ09yZ2FuaXphdGlvbic6IHBpcGVsaW5lLm9yZ2FuaXphdGlvbixcbiAgICAgICAgJ05hbWUnOiBwaXBlbGluZS5waXBlbGluZU5hbWUgfHwgJyhub3Qgc2V0KScsXG4gICAgICAgICdWaXNpYmlsaXR5JzogcGlwZWxpbmUudmlzaWJpbGl0eSB8fCAnb3JnJyxcbiAgICAgICAgJ0RlZmF1bHQnOiBwaXBlbGluZS5pc0RlZmF1bHQgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICdBY3RpdmUnOiBwaXBlbGluZS5pc0FjdGl2ZSA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgJ0NyZWF0ZWQgQXQnOiBwaXBlbGluZS5jcmVhdGVkQXQgfHwgJyhub3QgYXZhaWxhYmxlKScsXG4gICAgICAgICdVcGRhdGVkIEF0JzogcGlwZWxpbmUudXBkYXRlZEF0IHx8ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgfSksXG4gICAgICBleHRyYTogKG9wdGlvbnMsIHBpcGVsaW5lKSA9PlxuICAgICAgICBvcHRpb25zLnNob3dQcm9wcyAmJiBvcHRpb25zLmZvcm1hdCA9PT0gJ3RhYmxlJyAmJiBwaXBlbGluZS5wcm9wcyAmJiBPYmplY3Qua2V5cyhwaXBlbGluZS5wcm9wcykubGVuZ3RoID4gMFxuICAgICAgICAgID8geyBpbmZvTGFiZWw6ICdQaXBlbGluZSBQcm9wZXJ0aWVzJywgcGF5bG9hZDogcGlwZWxpbmUucHJvcHMgfVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIGNvbW1hbmROYW1lOiAnZ2V0LXBpcGVsaW5lJyxcbiAgICAgIGlkQ29udGV4dEtleTogJ3BpcGVsaW5lSWQnLFxuICAgIH0pKTtcbn1cbiJdfQ==
@@ -0,0 +1,20 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Registers the `template instantiate` command.
4
+ *
5
+ * Renders a golden-path template into a concrete pipeline `props` document by
6
+ * supplying its declared inputs. It **creates nothing** — the rendered props are
7
+ * written to a file (or stdout) and go through the normal `pipeline create` path,
8
+ * where compliance and quota still apply.
9
+ *
10
+ * @example
11
+ * ```bash
12
+ * pipeline-manager template instantiate --name react-javascript \
13
+ * --project react --organization AcmeCorp \
14
+ * --input orgId=1234abcd-... --output pipeline-props.json
15
+ *
16
+ * pipeline-manager pipeline create --file pipeline-props.json --deploy
17
+ * ```
18
+ */
19
+ export declare function instantiateTemplate(program: Command): void;
20
+ //# sourceMappingURL=instantiate-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instantiate-template.d.ts","sourceRoot":"","sources":["../../src/commands/instantiate-template.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgHpC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2J1D"}
@@ -0,0 +1,274 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import * as fs from 'fs';
4
+ import { Command } from 'commander';
5
+ import ora from 'ora';
6
+ import pico from 'picocolors';
7
+ import {} from '../types/index.js';
8
+ import { createAuthenticatedClient, printCommandHeader, printExecutionSummary, printSslWarning, withSslOptions } from '../utils/command-utils.js';
9
+ import { ERROR_CODES, handleError, ValidationError } from '../utils/error-handler.js';
10
+ import { outputData, printError, printInfo, printKeyValue, printSection, printSuccess, printWarning } from '../utils/output-utils.js';
11
+ import { extractListResponse, extractSingleResponse } from '../utils/response-utils.js';
12
+ const { bold, cyan, dim, green } = pico;
13
+ /**
14
+ * Accumulate a repeatable `--input KEY=VALUE` flag. This only collects — it does
15
+ * NOT validate, because Commander runs `parseArg` before the action callback, so
16
+ * a throw here would escape the action's `handleError` and surface as an
17
+ * unhandled stack trace with the wrong exit code instead of a clean validation
18
+ * failure. Parsing happens in {@link parseInputPairs}, inside the action.
19
+ */
20
+ function collectInput(pair, previous) {
21
+ return [...previous, pair];
22
+ }
23
+ /**
24
+ * Split collected `KEY=VALUE` pairs into a map. Values stay strings; the platform
25
+ * coerces each to its declared input type (and rejects what doesn't fit), so the
26
+ * CLI does not guess types locally. Only the FIRST `=` splits, so a value may
27
+ * itself contain `=`.
28
+ */
29
+ function parseInputPairs(pairs) {
30
+ const out = {};
31
+ for (const pair of pairs) {
32
+ const eq = pair.indexOf('=');
33
+ if (eq < 1) {
34
+ throw new ValidationError(`Invalid --input "${pair}" — expected KEY=VALUE`, 'input', pair, 'key=value', 'e.g. --input orgId=1234abcd-...');
35
+ }
36
+ out[pair.slice(0, eq)] = pair.slice(eq + 1);
37
+ }
38
+ return out;
39
+ }
40
+ /** Read and parse `--inputs-file`, which holds a flat `{ name: value }` object. */
41
+ function readInputsFile(file) {
42
+ if (!fs.existsSync(file)) {
43
+ throw new ValidationError(`Inputs file not found: ${file}`, 'inputs-file', file);
44
+ }
45
+ let parsed;
46
+ try {
47
+ parsed = JSON.parse(fs.readFileSync(file, 'utf-8'));
48
+ }
49
+ catch (error) {
50
+ throw new ValidationError(`Inputs file is not valid JSON: ${error instanceof Error ? error.message : String(error)}`, 'inputs-file', file);
51
+ }
52
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
53
+ throw new ValidationError('Inputs file must contain a JSON object of { "inputName": value }', 'inputs-file', file);
54
+ }
55
+ for (const [k, v] of Object.entries(parsed)) {
56
+ const t = typeof v;
57
+ if (t !== 'string' && t !== 'number' && t !== 'boolean') {
58
+ throw new ValidationError(`Input "${k}" must be a string, number, or boolean (got ${t})`, 'inputs-file', file);
59
+ }
60
+ }
61
+ return parsed;
62
+ }
63
+ /**
64
+ * Resolve a template `name` to its id through the catalog list endpoint. The list
65
+ * is visibility-scoped server-side, so this only ever sees templates the caller
66
+ * may read. Matching is exact on `name` — the `name` query param is a filter, not
67
+ * a unique lookup, so a fuzzy backend match must not silently instantiate a
68
+ * DIFFERENT template than the one asked for.
69
+ */
70
+ async function resolveTemplateByName(client, name) {
71
+ const url = client.getConfig().api.pipelineTemplateUrl;
72
+ const response = await client.get(url, { name, limit: 100 });
73
+ const { items } = extractListResponse(response, 'templates');
74
+ const exact = items.filter((t) => t.name === name);
75
+ if (exact.length === 0) {
76
+ throw new ValidationError(`No pipeline template named "${name}" is visible to you.`, 'name', name, undefined, items.length > 0
77
+ ? `Did you mean one of: ${items.slice(0, 10).map((t) => t.name).join(', ')}`
78
+ : 'Load the sample catalog with deploy/bin/load-templates.sh, or pass --id.');
79
+ }
80
+ // A name is unique per org, but the visible set spans your org + parent + the
81
+ // system catalog, so the same name can legitimately appear more than once.
82
+ // Refuse to guess — the wrong pick would silently synth someone else's body.
83
+ if (exact.length > 1) {
84
+ throw new ValidationError(`"${name}" matches ${exact.length} visible templates — pass --id to choose one.`, 'name', name, undefined, `ids: ${exact.map((t) => t.id).join(', ')}`);
85
+ }
86
+ return exact[0];
87
+ }
88
+ /**
89
+ * Registers the `template instantiate` command.
90
+ *
91
+ * Renders a golden-path template into a concrete pipeline `props` document by
92
+ * supplying its declared inputs. It **creates nothing** — the rendered props are
93
+ * written to a file (or stdout) and go through the normal `pipeline create` path,
94
+ * where compliance and quota still apply.
95
+ *
96
+ * @example
97
+ * ```bash
98
+ * pipeline-manager template instantiate --name react-javascript \
99
+ * --project react --organization AcmeCorp \
100
+ * --input orgId=1234abcd-... --output pipeline-props.json
101
+ *
102
+ * pipeline-manager pipeline create --file pipeline-props.json --deploy
103
+ * ```
104
+ */
105
+ export function instantiateTemplate(program) {
106
+ withSslOptions(program
107
+ .command('instantiate')
108
+ .description('Render a pipeline template into concrete pipeline props (creates nothing)')
109
+ .option('-n, --name <name>', 'Template name (resolved against the catalog you can see)')
110
+ .option('-i, --id <id>', 'Template ID (skips the name lookup)')
111
+ .requiredOption('-p, --project <project>', 'Project name for the pipeline this template will produce')
112
+ .requiredOption('-o, --organization <organization>', 'Organization name for the pipeline')
113
+ .option('--pipeline-name <name>', 'Pipeline name (defaults to <organization>-<project>-pipeline at synth)')
114
+ .option('--input <key=value>', 'Template input, repeatable (e.g. --input orgId=1234abcd-...)', collectInput, [])
115
+ .option('--inputs-file <file>', 'JSON file of { "inputName": value } — merged UNDER any --input flags')
116
+ .option('--output <file>', 'Write the rendered props to a file (default: stdout)')
117
+ .option('-f, --format <format>', 'Output format (json, yaml)', 'json'))
118
+ .option('--json', 'Print ONLY the rendered props as JSON (for piping); implies no decorative output', false)
119
+ .action(async (options) => {
120
+ // With --json (or props headed for stdout in any format) the payload IS the
121
+ // output, so the banner must not land on stdout ahead of it and break piping.
122
+ const toStdout = !options.output;
123
+ const quiet = options.json || toStdout;
124
+ const executionId = printCommandHeader('Instantiate Template', undefined, { quiet });
125
+ try {
126
+ if (!options.name && !options.id) {
127
+ throw new ValidationError('Provide --name or --id to select a template', 'name');
128
+ }
129
+ if (options.name && options.id) {
130
+ throw new ValidationError('Pass either --name or --id, not both', 'name');
131
+ }
132
+ // Only the round-trippable formats: the rendered props exist to be fed
133
+ // back to `pipeline create --file`, and `table`/`csv` would flatten them
134
+ // into something that can no longer be parsed as props.
135
+ if (!['json', 'yaml'].includes(options.format)) {
136
+ throw new ValidationError(`Unsupported --format "${options.format}" — rendered props must stay parseable`, 'format', options.format, 'json|yaml');
137
+ }
138
+ if (!quiet)
139
+ printSslWarning(options.verifySsl);
140
+ // --input flags win over --inputs-file so a file can hold shared defaults
141
+ // that a single flag overrides on the command line.
142
+ const inputs = {
143
+ ...(options.inputsFile ? readInputsFile(options.inputsFile) : {}),
144
+ ...parseInputPairs(options.input),
145
+ };
146
+ if (!quiet) {
147
+ printInfo('Request parameters', {
148
+ template: options.name ?? options.id,
149
+ project: options.project,
150
+ organization: options.organization,
151
+ pipelineName: options.pipelineName ?? '(default)',
152
+ inputs: Object.keys(inputs).length > 0 ? Object.keys(inputs).join(', ') : '(none)',
153
+ output: options.output ?? '(stdout)',
154
+ });
155
+ console.log('');
156
+ printSection('Rendering Template');
157
+ }
158
+ const client = createAuthenticatedClient(options);
159
+ const templateUrl = client.getConfig().api.pipelineTemplateUrl;
160
+ const startTime = Date.now();
161
+ const spinner = quiet ? null : ora('Resolving template...').start();
162
+ let templateId;
163
+ let templateName;
164
+ try {
165
+ if (options.id) {
166
+ templateId = options.id;
167
+ }
168
+ else {
169
+ const template = await resolveTemplateByName(client, options.name);
170
+ templateId = template.id;
171
+ templateName = template.name;
172
+ }
173
+ spinner?.succeed(`Template resolved${templateName ? ` (${templateName})` : ''}`);
174
+ }
175
+ catch (error) {
176
+ spinner?.fail('Template resolution failed');
177
+ throw error;
178
+ }
179
+ const body = {
180
+ project: options.project,
181
+ organization: options.organization,
182
+ ...(options.pipelineName ? { pipelineName: options.pipelineName } : {}),
183
+ ...(Object.keys(inputs).length > 0 ? { inputs } : {}),
184
+ };
185
+ const renderSpinner = quiet ? null : ora('Instantiating...').start();
186
+ let rendered;
187
+ try {
188
+ const response = await client.post(`${templateUrl}/${encodeURIComponent(templateId)}/instantiate`, body);
189
+ // `props` is the identifier key: the envelope's data IS { props, ... }.
190
+ rendered = extractSingleResponse(response, 'template', 'props');
191
+ renderSpinner?.succeed('Template instantiated');
192
+ }
193
+ catch (error) {
194
+ renderSpinner?.fail('Instantiate failed');
195
+ throw error;
196
+ }
197
+ const duration = Date.now() - startTime;
198
+ if (!rendered?.props) {
199
+ printError('No props returned from API', { templateId });
200
+ throw new Error(`Template ${templateId} rendered no props`);
201
+ }
202
+ const props = rendered.props;
203
+ // A leftover `{{ ... }}` in a *self-scope* field means an input was never
204
+ // supplied and the placeholder would fail opaquely at synth. `pipeline.*`
205
+ // tokens are expected here — they resolve at synth, not at instantiate.
206
+ const unresolved = unresolvedSelfVars(props);
207
+ if (unresolved.length > 0) {
208
+ printWarning('Rendered props still contain unresolved placeholders', {
209
+ vars: unresolved.join(', '),
210
+ hint: 'Supply them with --input <name>=<value>',
211
+ });
212
+ }
213
+ if (!quiet) {
214
+ console.log('');
215
+ printSection('Rendered Props');
216
+ printKeyValue({
217
+ 'Template': green(bold(templateName ?? templateId)),
218
+ 'Project': props.project,
219
+ 'Organization': props.organization,
220
+ 'Pipeline Name': props.pipelineName ?? dim('(default at synth)'),
221
+ 'Vars': Object.keys(props.vars ?? {}).join(', ') || dim('(none)'),
222
+ 'Stages': String(Array.isArray(props.stages) ? props.stages.length : 0),
223
+ });
224
+ printExecutionSummary(executionId, duration);
225
+ }
226
+ outputData(props, {
227
+ format: options.json ? 'json' : options.format,
228
+ file: options.output,
229
+ silent: quiet,
230
+ });
231
+ if (options.output && !quiet) {
232
+ console.log('');
233
+ printSuccess('Pipeline props saved', { path: options.output });
234
+ printInfo('Next step', {
235
+ command: `pipeline-manager pipeline create --file ${options.output} --deploy`,
236
+ });
237
+ console.log(dim(` ${cyan('Tip:')} instantiate only renders — nothing exists on the platform yet.`));
238
+ }
239
+ }
240
+ catch (error) {
241
+ handleError(error, ERROR_CODES.API_REQUEST, {
242
+ debug: program.opts().debug,
243
+ exit: true,
244
+ context: { command: 'instantiate-template', executionId, template: options.name ?? options.id },
245
+ });
246
+ }
247
+ });
248
+ }
249
+ /**
250
+ * Names of `{{ vars.X }}` placeholders still present in the rendered props' own
251
+ * self-scope fields (`project`, `metadata.*`, `vars.*`) — i.e. inputs the caller
252
+ * never supplied. `{{ pipeline.* }}` tokens are deliberately ignored: those are
253
+ * synth-time references (e.g. the GitHub source token) and are SUPPOSED to
254
+ * survive instantiation.
255
+ */
256
+ function unresolvedSelfVars(props) {
257
+ const found = new Set();
258
+ const scan = (value) => {
259
+ if (typeof value === 'string') {
260
+ for (const m of value.matchAll(/\{\{\s*vars\.([A-Za-z_][A-Za-z0-9_]*)/g))
261
+ found.add(m[1]);
262
+ return;
263
+ }
264
+ if (Array.isArray(value))
265
+ return value.forEach(scan);
266
+ if (value && typeof value === 'object')
267
+ return Object.values(value).forEach(scan);
268
+ };
269
+ scan(props.project);
270
+ scan(props.metadata);
271
+ scan(props.vars);
272
+ return [...found];
273
+ }
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFudGlhdGUtdGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvaW5zdGFudGlhdGUtdGVtcGxhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUN0QixPQUFPLElBQUksTUFBTSxZQUFZLENBQUM7QUFDOUIsT0FBTyxFQUtOLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLHlCQUF5QixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsSixPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RixPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEksT0FBTyxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFeEYsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQztBQUV4Qzs7Ozs7O0dBTUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxJQUFZLEVBQUUsUUFBa0I7SUFDcEQsT0FBTyxDQUFDLEdBQUcsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsZUFBZSxDQUFDLEtBQWU7SUFDdEMsTUFBTSxHQUFHLEdBQTJCLEVBQUUsQ0FB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QUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7YUFDaEcsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsa0JBQWtCLENBQUMsS0FBb0I7SUFDOUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUNoQyxNQUFNLElBQUksR0FBRyxDQUFDLEtBQWMsRUFBUSxFQUFFO1FBQ3BDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsS0FBSyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLHdDQUF3QyxDQUFDO2dCQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUM7WUFDM0YsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFBRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BGLENBQUMsQ0FBQztJQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7XG4gIHR5cGUgSW5zdGFudGlhdGVUZW1wbGF0ZVJlcXVlc3QsXG4gIHR5cGUgSW5zdGFudGlhdGVUZW1wbGF0ZVJlc3BvbnNlLFxuICB0eXBlIFBpcGVsaW5lVGVtcGxhdGUsXG4gIHR5cGUgUGlwZWxpbmVQcm9wcyxcbn0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuaW1wb3J0IHsgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudCwgcHJpbnRDb21tYW5kSGVhZGVyLCBwcmludEV4ZWN1dGlvblN1bW1hcnksIHByaW50U3NsV2FybmluZywgd2l0aFNzbE9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBvdXRwdXREYXRhLCBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50S2V5VmFsdWUsIHByaW50U2VjdGlvbiwgcHJpbnRTdWNjZXNzLCBwcmludFdhcm5pbmcgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuaW1wb3J0IHsgZXh0cmFjdExpc3RSZXNwb25zZSwgZXh0cmFjdFNpbmdsZVJlc3BvbnNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UtdXRpbHMuanMnO1xuXG5jb25zdCB7IGJvbGQsIGN5YW4sIGRpbSwgZ3JlZW4gfSA9IHBpY287XG5cbi8qKlxuICogQWNjdW11bGF0ZSBhIHJlcGVhdGFibGUgYC0taW5wdXQgS0VZPVZBTFVFYCBmbGFnLiBUaGlzIG9ubHkgY29sbGVjdHMg4oCUIGl0IGRvZXNcbiAqIE5PVCB2YWxpZGF0ZSwgYmVjYXVzZSBDb21tYW5kZXIgcnVucyBgcGFyc2VBcmdgIGJlZm9yZSB0aGUgYWN0aW9uIGNhbGxiYWNrLCBzb1xuICogYSB0aHJvdyBoZXJlIHdvdWxkIGVzY2FwZSB0aGUgYWN0aW9uJ3MgYGhhbmRsZUVycm9yYCBhbmQgc3VyZmFjZSBhcyBhblxuICogdW5oYW5kbGVkIHN0YWNrIHRyYWNlIHdpdGggdGhlIHdyb25nIGV4aXQgY29kZSBpbnN0ZWFkIG9mIGEgY2xlYW4gdmFsaWRhdGlvblxuICogZmFpbHVyZS4gUGFyc2luZyBoYXBwZW5zIGluIHtAbGluayBwYXJzZUlucHV0UGFpcnN9LCBpbnNpZGUgdGhlIGFjdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29sbGVjdElucHV0KHBhaXI6IHN0cmluZywgcHJldmlvdXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gWy4uLnByZXZpb3VzLCBwYWlyXTtcbn1cblxuLyoqXG4gKiBTcGxpdCBjb2xsZWN0ZWQgYEtFWT1WQUxVRWAgcGFpcnMgaW50byBhIG1hcC4gVmFsdWVzIHN0YXkgc3RyaW5nczsgdGhlIHBsYXRmb3JtXG4gKiBjb2VyY2VzIGVhY2ggdG8gaXRzIGRlY2xhcmVkIGlucHV0IHR5cGUgKGFuZCByZWplY3RzIHdoYXQgZG9lc24ndCBmaXQpLCBzbyB0aGVcbiAqIENMSSBkb2VzIG5vdCBndWVzcyB0eXBlcyBsb2NhbGx5LiBPbmx5IHRoZSBGSVJTVCBgPWAgc3BsaXRzLCBzbyBhIHZhbHVlIG1heVxuICogaXRzZWxmIGNvbnRhaW4gYD1gLlxuICovXG5mdW5jdGlvbiBwYXJzZUlucHV0UGFpcnMocGFpcnM6IHN0cmluZ1tdKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IG91dDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICBjb25zdCBlcSA9IHBhaXIuaW5kZXhPZignPScpO1xuICAgIGlmIChlcSA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIC0taW5wdXQgXCIke3BhaXJ9XCIg4oCUIGV4cGVjdGVkIEtFWT1WQUxVRWAsXG4gICAgICAgICdpbnB1dCcsIHBhaXIsICdrZXk9dmFsdWUnLCAnZS5nLiAtLWlucHV0IG9yZ0lkPTEyMzRhYmNkLS4uLicsXG4gICAgICApO1xuICAgIH1cbiAgICBvdXRbcGFpci5zbGljZSgwLCBlcSldID0gcGFpci5zbGljZShlcSArIDEpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBSZWFkIGFuZCBwYXJzZSBgLS1pbnB1dHMtZmlsZWAsIHdoaWNoIGhvbGRzIGEgZmxhdCBgeyBuYW1lOiB2YWx1ZSB9YCBvYmplY3QuICovXG5mdW5jdGlvbiByZWFkSW5wdXRzRmlsZShmaWxlOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPiB7XG4gIGlmICghZnMuZXhpc3RzU3luYyhmaWxlKSkge1xuICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYElucHV0cyBmaWxlIG5vdCBmb3VuZDogJHtmaWxlfWAsICdpbnB1dHMtZmlsZScsIGZpbGUpO1xuICB9XG4gIGxldCBwYXJzZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoZmlsZSwgJ3V0Zi04JykpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICBgSW5wdXRzIGZpbGUgaXMgbm90IHZhbGlkIEpTT046ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWAsXG4gICAgICAnaW5wdXRzLWZpbGUnLCBmaWxlLFxuICAgICk7XG4gIH1cbiAgaWYgKHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnIHx8IHBhcnNlZCA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHBhcnNlZCkpIHtcbiAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdJbnB1dHMgZmlsZSBtdXN0IGNvbnRhaW4gYSBKU09OIG9iamVjdCBvZiB7IFwiaW5wdXROYW1lXCI6IHZhbHVlIH0nLCAnaW5wdXRzLWZpbGUnLCBmaWxlKTtcbiAgfVxuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwYXJzZWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgY29uc3QgdCA9IHR5cGVvZiB2O1xuICAgIGlmICh0ICE9PSAnc3RyaW5nJyAmJiB0ICE9PSAnbnVtYmVyJyAmJiB0ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYElucHV0IFwiJHtrfVwiIG11c3QgYmUgYSBzdHJpbmcsIG51bWJlciwgb3IgYm9vbGVhbiAoZ290ICR7dH0pYCwgJ2lucHV0cy1maWxlJywgZmlsZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBwYXJzZWQgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj47XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHRlbXBsYXRlIGBuYW1lYCB0byBpdHMgaWQgdGhyb3VnaCB0aGUgY2F0YWxvZyBsaXN0IGVuZHBvaW50LiBUaGUgbGlzdFxuICogaXMgdmlzaWJpbGl0eS1zY29wZWQgc2VydmVyLXNpZGUsIHNvIHRoaXMgb25seSBldmVyIHNlZXMgdGVtcGxhdGVzIHRoZSBjYWxsZXJcbiAqIG1heSByZWFkLiBNYXRjaGluZyBpcyBleGFjdCBvbiBgbmFtZWAg4oCUIHRoZSBgbmFtZWAgcXVlcnkgcGFyYW0gaXMgYSBmaWx0ZXIsIG5vdFxuICogYSB1bmlxdWUgbG9va3VwLCBzbyBhIGZ1enp5IGJhY2tlbmQgbWF0Y2ggbXVzdCBub3Qgc2lsZW50bHkgaW5zdGFudGlhdGUgYVxuICogRElGRkVSRU5UIHRlbXBsYXRlIHRoYW4gdGhlIG9uZSBhc2tlZCBmb3IuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVUZW1wbGF0ZUJ5TmFtZShcbiAgY2xpZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50PixcbiAgbmFtZTogc3RyaW5nLFxuKTogUHJvbWlzZTxQaXBlbGluZVRlbXBsYXRlPiB7XG4gIGNvbnN0IHVybCA9IGNsaWVudC5nZXRDb25maWcoKS5hcGkucGlwZWxpbmVUZW1wbGF0ZVVybDtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KHVybCwgeyBuYW1lLCBsaW1pdDogMTAwIH0pO1xuICBjb25zdCB7IGl0ZW1zIH0gPSBleHRyYWN0TGlzdFJlc3BvbnNlPFBpcGVsaW5lVGVtcGxhdGU+KHJlc3BvbnNlLCAndGVtcGxhdGVzJyk7XG5cbiAgY29uc3QgZXhhY3QgPSBpdGVtcy5maWx0ZXIoKHQpID0+IHQubmFtZSA9PT0gbmFtZSk7XG4gIGlmIChleGFjdC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgYE5vIHBpcGVsaW5lIHRlbXBsYXRlIG5hbWVkIFwiJHtuYW1lfVwiIGlzIHZpc2libGUgdG8geW91LmAsXG4gICAgICAnbmFtZScsIG5hbWUsIHVuZGVmaW5lZCxcbiAgICAgIGl0ZW1zLmxlbmd0aCA+IDBcbiAgICAgICAgPyBgRGlkIHlvdSBtZWFuIG9uZSBvZjogJHtpdGVtcy5zbGljZSgwLCAxMCkubWFwKCh0KSA9PiB0Lm5hbWUpLmpvaW4oJywgJyl9YFxuICAgICAgICA6ICdMb2FkIHRoZSBzYW1wbGUgY2F0YWxvZyB3aXRoIGRlcGxveS9iaW4vbG9hZC10ZW1wbGF0ZXMuc2gsIG9yIHBhc3MgLS1pZC4nLFxuICAgICk7XG4gIH1cbiAgLy8gQSBuYW1lIGlzIHVuaXF1ZSBwZXIgb3JnLCBidXQgdGhlIHZpc2libGUgc2V0IHNwYW5zIHlvdXIgb3JnICsgcGFyZW50ICsgdGhlXG4gIC8vIHN5c3RlbSBjYXRhbG9nLCBzbyB0aGUgc2FtZSBuYW1lIGNhbiBsZWdpdGltYXRlbHkgYXBwZWFyIG1vcmUgdGhhbiBvbmNlLlxuICAvLyBSZWZ1c2UgdG8gZ3Vlc3Mg4oCUIHRoZSB3cm9uZyBwaWNrIHdvdWxkIHNpbGVudGx5IHN5bnRoIHNvbWVvbmUgZWxzZSdzIGJvZHkuXG4gIGlmIChleGFjdC5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgIGBcIiR7bmFtZX1cIiBtYXRjaGVzICR7ZXhhY3QubGVuZ3RofSB2aXNpYmxlIHRlbXBsYXRlcyDigJQgcGFzcyAtLWlkIHRvIGNob29zZSBvbmUuYCxcbiAgICAgICduYW1lJywgbmFtZSwgdW5kZWZpbmVkLFxuICAgICAgYGlkczogJHtleGFjdC5tYXAoKHQpID0+IHQuaWQpLmpvaW4oJywgJyl9YCxcbiAgICApO1xuICB9XG4gIHJldHVybiBleGFjdFswXSE7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBgdGVtcGxhdGUgaW5zdGFudGlhdGVgIGNvbW1hbmQuXG4gKlxuICogUmVuZGVycyBhIGdvbGRlbi1wYXRoIHRlbXBsYXRlIGludG8gYSBjb25jcmV0ZSBwaXBlbGluZSBgcHJvcHNgIGRvY3VtZW50IGJ5XG4gKiBzdXBwbHlpbmcgaXRzIGRlY2xhcmVkIGlucHV0cy4gSXQgKipjcmVhdGVzIG5vdGhpbmcqKiDigJQgdGhlIHJlbmRlcmVkIHByb3BzIGFyZVxuICogd3JpdHRlbiB0byBhIGZpbGUgKG9yIHN0ZG91dCkgYW5kIGdvIHRocm91Z2ggdGhlIG5vcm1hbCBgcGlwZWxpbmUgY3JlYXRlYCBwYXRoLFxuICogd2hlcmUgY29tcGxpYW5jZSBhbmQgcXVvdGEgc3RpbGwgYXBwbHkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGJhc2hcbiAqIHBpcGVsaW5lLW1hbmFnZXIgdGVtcGxhdGUgaW5zdGFudGlhdGUgLS1uYW1lIHJlYWN0LWphdmFzY3JpcHQgXFxcbiAqICAgLS1wcm9qZWN0IHJlYWN0IC0tb3JnYW5pemF0aW9uIEFjbWVDb3JwIFxcXG4gKiAgIC0taW5wdXQgb3JnSWQ9MTIzNGFiY2QtLi4uIC0tb3V0cHV0IHBpcGVsaW5lLXByb3BzLmpzb25cbiAqXG4gKiBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIGNyZWF0ZSAtLWZpbGUgcGlwZWxpbmUtcHJvcHMuanNvbiAtLWRlcGxveVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YW50aWF0ZVRlbXBsYXRlKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgd2l0aFNzbE9wdGlvbnMoXG4gICAgcHJvZ3JhbVxuICAgICAgLmNvbW1hbmQoJ2luc3RhbnRpYXRlJylcbiAgICAgIC5kZXNjcmlwdGlvbignUmVuZGVyIGEgcGlwZWxpbmUgdGVtcGxhdGUgaW50byBjb25jcmV0ZSBwaXBlbGluZSBwcm9wcyAoY3JlYXRlcyBub3RoaW5nKScpXG4gICAgICAub3B0aW9uKCctbiwgLS1uYW1lIDxuYW1lPicsICdUZW1wbGF0ZSBuYW1lIChyZXNvbHZlZCBhZ2FpbnN0IHRoZSBjYXRhbG9nIHlvdSBjYW4gc2VlKScpXG4gICAgICAub3B0aW9uKCctaSwgLS1pZCA8aWQ+JywgJ1RlbXBsYXRlIElEIChza2lwcyB0aGUgbmFtZSBsb29rdXApJylcbiAgICAgIC5yZXF1aXJlZE9wdGlvbignLXAsIC0tcHJvamVjdCA8cHJvamVjdD4nLCAnUHJvamVjdCBuYW1lIGZvciB0aGUgcGlwZWxpbmUgdGhpcyB0ZW1wbGF0ZSB3aWxsIHByb2R1Y2UnKVxuICAgICAgLnJlcXVpcmVkT3B0aW9uKCctbywgLS1vcmdhbml6YXRpb24gPG9yZ2FuaXphdGlvbj4nLCAnT3JnYW5pemF0aW9uIG5hbWUgZm9yIHRoZSBwaXBlbGluZScpXG4gICAgICAub3B0aW9uKCctLXBpcGVsaW5lLW5hbWUgPG5hbWU+JywgJ1BpcGVsaW5lIG5hbWUgKGRlZmF1bHRzIHRvIDxvcmdhbml6YXRpb24+LTxwcm9qZWN0Pi1waXBlbGluZSBhdCBzeW50aCknKVxuICAgICAgLm9wdGlvbignLS1pbnB1dCA8a2V5PXZhbHVlPicsICdUZW1wbGF0ZSBpbnB1dCwgcmVwZWF0YWJsZSAoZS5nLiAtLWlucHV0IG9yZ0lkPTEyMzRhYmNkLS4uLiknLCBjb2xsZWN0SW5wdXQsIFtdKVxuICAgICAgLm9wdGlvbignLS1pbnB1dHMtZmlsZSA8ZmlsZT4nLCAnSlNPTiBmaWxlIG9mIHsgXCJpbnB1dE5hbWVcIjogdmFsdWUgfSDigJQgbWVyZ2VkIFVOREVSIGFueSAtLWlucHV0IGZsYWdzJylcbiAgICAgIC5vcHRpb24oJy0tb3V0cHV0IDxmaWxlPicsICdXcml0ZSB0aGUgcmVuZGVyZWQgcHJvcHMgdG8gYSBmaWxlIChkZWZhdWx0OiBzdGRvdXQpJylcbiAgICAgIC5vcHRpb24oJy1mLCAtLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0IChqc29uLCB5YW1sKScsICdqc29uJyksXG4gIClcbiAgICAub3B0aW9uKCctLWpzb24nLCAnUHJpbnQgT05MWSB0aGUgcmVuZGVyZWQgcHJvcHMgYXMgSlNPTiAoZm9yIHBpcGluZyk7IGltcGxpZXMgbm8gZGVjb3JhdGl2ZSBvdXRwdXQnLCBmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAvLyBXaXRoIC0tanNvbiAob3IgcHJvcHMgaGVhZGVkIGZvciBzdGRvdXQgaW4gYW55IGZvcm1hdCkgdGhlIHBheWxvYWQgSVMgdGhlXG4gICAgICAvLyBvdXRwdXQsIHNvIHRoZSBiYW5uZXIgbXVzdCBub3QgbGFuZCBvbiBzdGRvdXQgYWhlYWQgb2YgaXQgYW5kIGJyZWFrIHBpcGluZy5cbiAgICAgIGNvbnN0IHRvU3Rkb3V0ID0gIW9wdGlvbnMub3V0cHV0O1xuICAgICAgY29uc3QgcXVpZXQgPSBvcHRpb25zLmpzb24gfHwgdG9TdGRvdXQ7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignSW5zdGFudGlhdGUgVGVtcGxhdGUnLCB1bmRlZmluZWQsIHsgcXVpZXQgfSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5uYW1lICYmICFvcHRpb25zLmlkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvdmlkZSAtLW5hbWUgb3IgLS1pZCB0byBzZWxlY3QgYSB0ZW1wbGF0ZScsICduYW1lJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMubmFtZSAmJiBvcHRpb25zLmlkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUGFzcyBlaXRoZXIgLS1uYW1lIG9yIC0taWQsIG5vdCBib3RoJywgJ25hbWUnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPbmx5IHRoZSByb3VuZC10cmlwcGFibGUgZm9ybWF0czogdGhlIHJlbmRlcmVkIHByb3BzIGV4aXN0IHRvIGJlIGZlZFxuICAgICAgICAvLyBiYWNrIHRvIGBwaXBlbGluZSBjcmVhdGUgLS1maWxlYCwgYW5kIGB0YWJsZWAvYGNzdmAgd291bGQgZmxhdHRlbiB0aGVtXG4gICAgICAgIC8vIGludG8gc29tZXRoaW5nIHRoYXQgY2FuIG5vIGxvbmdlciBiZSBwYXJzZWQgYXMgcHJvcHMuXG4gICAgICAgIGlmICghWydqc29uJywgJ3lhbWwnXS5pbmNsdWRlcyhvcHRpb25zLmZvcm1hdCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgICAgYFVuc3VwcG9ydGVkIC0tZm9ybWF0IFwiJHtvcHRpb25zLmZvcm1hdH1cIiDigJQgcmVuZGVyZWQgcHJvcHMgbXVzdCBzdGF5IHBhcnNlYWJsZWAsXG4gICAgICAgICAgICAnZm9ybWF0Jywgb3B0aW9ucy5mb3JtYXQsICdqc29ufHlhbWwnLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFxdWlldCkgcHJpbnRTc2xXYXJuaW5nKG9wdGlvbnMudmVyaWZ5U3NsKTtcblxuICAgICAgICAvLyAtLWlucHV0IGZsYWdzIHdpbiBvdmVyIC0taW5wdXRzLWZpbGUgc28gYSBmaWxlIGNhbiBob2xkIHNoYXJlZCBkZWZhdWx0c1xuICAgICAgICAvLyB0aGF0IGEgc2luZ2xlIGZsYWcgb3ZlcnJpZGVzIG9uIHRoZSBjb21tYW5kIGxpbmUuXG4gICAgICAgIGNvbnN0IGlucHV0czogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gPSB7XG4gICAgICAgICAgLi4uKG9wdGlvbnMuaW5wdXRzRmlsZSA/IHJlYWRJbnB1dHNGaWxlKG9wdGlvbnMuaW5wdXRzRmlsZSkgOiB7fSksXG4gICAgICAgICAgLi4ucGFyc2VJbnB1dFBhaXJzKG9wdGlvbnMuaW5wdXQgYXMgc3RyaW5nW10pLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICghcXVpZXQpIHtcbiAgICAgICAgICBwcmludEluZm8oJ1JlcXVlc3QgcGFyYW1ldGVycycsIHtcbiAgICAgICAgICAgIHRlbXBsYXRlOiBvcHRpb25zLm5hbWUgPz8gb3B0aW9ucy5pZCxcbiAgICAgICAgICAgIHByb2plY3Q6IG9wdGlvbnMucHJvamVjdCxcbiAgICAgICAgICAgIG9yZ2FuaXphdGlvbjogb3B0aW9ucy5vcmdhbml6YXRpb24sXG4gICAgICAgICAgICBwaXBlbGluZU5hbWU6IG9wdGlvbnMucGlwZWxpbmVOYW1lID8/ICcoZGVmYXVsdCknLFxuICAgICAgICAgICAgaW5wdXRzOiBPYmplY3Qua2V5cyhpbnB1dHMpLmxlbmd0aCA+IDAgPyBPYmplY3Qua2V5cyhpbnB1dHMpLmpvaW4oJywgJykgOiAnKG5vbmUpJyxcbiAgICAgICAgICAgIG91dHB1dDogb3B0aW9ucy5vdXRwdXQgPz8gJyhzdGRvdXQpJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdSZW5kZXJpbmcgVGVtcGxhdGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnQob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlVXJsID0gY2xpZW50LmdldENvbmZpZygpLmFwaS5waXBlbGluZVRlbXBsYXRlVXJsO1xuXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IHNwaW5uZXIgPSBxdWlldCA/IG51bGwgOiBvcmEoJ1Jlc29sdmluZyB0ZW1wbGF0ZS4uLicpLnN0YXJ0KCk7XG4gICAgICAgIGxldCB0ZW1wbGF0ZUlkOiBzdHJpbmc7XG4gICAgICAgIGxldCB0ZW1wbGF0ZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5pZCkge1xuICAgICAgICAgICAgdGVtcGxhdGVJZCA9IG9wdGlvbnMuaWQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gYXdhaXQgcmVzb2x2ZVRlbXBsYXRlQnlOYW1lKGNsaWVudCwgb3B0aW9ucy5uYW1lKTtcbiAgICAgICAgICAgIHRlbXBsYXRlSWQgPSB0ZW1wbGF0ZS5pZDtcbiAgICAgICAgICAgIHRlbXBsYXRlTmFtZSA9IHRlbXBsYXRlLm5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNwaW5uZXI/LnN1Y2NlZWQoYFRlbXBsYXRlIHJlc29sdmVkJHt0ZW1wbGF0ZU5hbWUgPyBgICgke3RlbXBsYXRlTmFtZX0pYCA6ICcnfWApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHNwaW5uZXI/LmZhaWwoJ1RlbXBsYXRlIHJlc29sdXRpb24gZmFpbGVkJyk7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBib2R5OiBJbnN0YW50aWF0ZVRlbXBsYXRlUmVxdWVzdCA9IHtcbiAgICAgICAgICBwcm9qZWN0OiBvcHRpb25zLnByb2plY3QsXG4gICAgICAgICAgb3JnYW5pemF0aW9uOiBvcHRpb25zLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICAuLi4ob3B0aW9ucy5waXBlbGluZU5hbWUgPyB7IHBpcGVsaW5lTmFtZTogb3B0aW9ucy5waXBlbGluZU5hbWUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oT2JqZWN0LmtleXMoaW5wdXRzKS5sZW5ndGggPiAwID8geyBpbnB1dHMgfSA6IHt9KSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZW5kZXJTcGlubmVyID0gcXVpZXQgPyBudWxsIDogb3JhKCdJbnN0YW50aWF0aW5nLi4uJykuc3RhcnQoKTtcbiAgICAgICAgbGV0IHJlbmRlcmVkOiBJbnN0YW50aWF0ZVRlbXBsYXRlUmVzcG9uc2UgfCB1bmRlZmluZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdChgJHt0ZW1wbGF0ZVVybH0vJHtlbmNvZGVVUklDb21wb25lbnQodGVtcGxhdGVJZCl9L2luc3RhbnRpYXRlYCwgYm9keSk7XG4gICAgICAgICAgLy8gYHByb3BzYCBpcyB0aGUgaWRlbnRpZmllciBrZXk6IHRoZSBlbnZlbG9wZSdzIGRhdGEgSVMgeyBwcm9wcywgLi4uIH0uXG4gICAgICAgICAgcmVuZGVyZWQgPSBleHRyYWN0U2luZ2xlUmVzcG9uc2U8SW5zdGFudGlhdGVUZW1wbGF0ZVJlc3BvbnNlPihyZXNwb25zZSwgJ3RlbXBsYXRlJywgJ3Byb3BzJyk7XG4gICAgICAgICAgcmVuZGVyU3Bpbm5lcj8uc3VjY2VlZCgnVGVtcGxhdGUgaW5zdGFudGlhdGVkJyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVuZGVyU3Bpbm5lcj8uZmFpbCgnSW5zdGFudGlhdGUgZmFpbGVkJyk7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuXG4gICAgICAgIGlmICghcmVuZGVyZWQ/LnByb3BzKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignTm8gcHJvcHMgcmV0dXJuZWQgZnJvbSBBUEknLCB7IHRlbXBsYXRlSWQgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZW1wbGF0ZSAke3RlbXBsYXRlSWR9IHJlbmRlcmVkIG5vIHByb3BzYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvcHMgPSByZW5kZXJlZC5wcm9wcyBhcyBQaXBlbGluZVByb3BzO1xuXG4gICAgICAgIC8vIEEgbGVmdG92ZXIgYHt7IC4uLiB9fWAgaW4gYSAqc2VsZi1zY29wZSogZmllbGQgbWVhbnMgYW4gaW5wdXQgd2FzIG5ldmVyXG4gICAgICAgIC8vIHN1cHBsaWVkIGFuZCB0aGUgcGxhY2Vob2xkZXIgd291bGQgZmFpbCBvcGFxdWVseSBhdCBzeW50aC4gYHBpcGVsaW5lLipgXG4gICAgICAgIC8vIHRva2VucyBhcmUgZXhwZWN0ZWQgaGVyZSDigJQgdGhleSByZXNvbHZlIGF0IHN5bnRoLCBub3QgYXQgaW5zdGFudGlhdGUuXG4gICAgICAgIGNvbnN0IHVucmVzb2x2ZWQgPSB1bnJlc29sdmVkU2VsZlZhcnMocHJvcHMpO1xuICAgICAgICBpZiAodW5yZXNvbHZlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKCdSZW5kZXJlZCBwcm9wcyBzdGlsbCBjb250YWluIHVucmVzb2x2ZWQgcGxhY2Vob2xkZXJzJywge1xuICAgICAgICAgICAgdmFyczogdW5yZXNvbHZlZC5qb2luKCcsICcpLFxuICAgICAgICAgICAgaGludDogJ1N1cHBseSB0aGVtIHdpdGggLS1pbnB1dCA8bmFtZT49PHZhbHVlPicsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXF1aWV0KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgIHByaW50U2VjdGlvbignUmVuZGVyZWQgUHJvcHMnKTtcbiAgICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAgICdUZW1wbGF0ZSc6IGdyZWVuKGJvbGQodGVtcGxhdGVOYW1lID8/IHRlbXBsYXRlSWQpKSxcbiAgICAgICAgICAgICdQcm9qZWN0JzogcHJvcHMucHJvamVjdCBhcyBzdHJpbmcsXG4gICAgICAgICAgICAnT3JnYW5pemF0aW9uJzogcHJvcHMub3JnYW5pemF0aW9uIGFzIHN0cmluZyxcbiAgICAgICAgICAgICdQaXBlbGluZSBOYW1lJzogKHByb3BzLnBpcGVsaW5lTmFtZSBhcyBzdHJpbmcpID8/IGRpbSgnKGRlZmF1bHQgYXQgc3ludGgpJyksXG4gICAgICAgICAgICAnVmFycyc6IE9iamVjdC5rZXlzKChwcm9wcy52YXJzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA/PyB7fSkuam9pbignLCAnKSB8fCBkaW0oJyhub25lKScpLFxuICAgICAgICAgICAgJ1N0YWdlcyc6IFN0cmluZyhBcnJheS5pc0FycmF5KHByb3BzLnN0YWdlcykgPyBwcm9wcy5zdGFnZXMubGVuZ3RoIDogMCksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJpbnRFeGVjdXRpb25TdW1tYXJ5KGV4ZWN1dGlvbklkLCBkdXJhdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBvdXRwdXREYXRhKHByb3BzLCB7XG4gICAgICAgICAgZm9ybWF0OiBvcHRpb25zLmpzb24gPyAnanNvbicgOiBvcHRpb25zLmZvcm1hdCxcbiAgICAgICAgICBmaWxlOiBvcHRpb25zLm91dHB1dCxcbiAgICAgICAgICBzaWxlbnQ6IHF1aWV0LFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXQgJiYgIXF1aWV0KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgIHByaW50U3VjY2VzcygnUGlwZWxpbmUgcHJvcHMgc2F2ZWQnLCB7IHBhdGg6IG9wdGlvbnMub3V0cHV0IH0pO1xuICAgICAgICAgIHByaW50SW5mbygnTmV4dCBzdGVwJywge1xuICAgICAgICAgICAgY29tbWFuZDogYHBpcGVsaW5lLW1hbmFnZXIgcGlwZWxpbmUgY3JlYXRlIC0tZmlsZSAke29wdGlvbnMub3V0cHV0fSAtLWRlcGxveWAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc29sZS5sb2coZGltKGAgICR7Y3lhbignVGlwOicpfSBpbnN0YW50aWF0ZSBvbmx5IHJlbmRlcnMg4oCUIG5vdGhpbmcgZXhpc3RzIG9uIHRoZSBwbGF0Zm9ybSB5ZXQuYCkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICdpbnN0YW50aWF0ZS10ZW1wbGF0ZScsIGV4ZWN1dGlvbklkLCB0ZW1wbGF0ZTogb3B0aW9ucy5uYW1lID8/IG9wdGlvbnMuaWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICogTmFtZXMgb2YgYHt7IHZhcnMuWCB9fWAgcGxhY2Vob2xkZXJzIHN0aWxsIHByZXNlbnQgaW4gdGhlIHJlbmRlcmVkIHByb3BzJyBvd25cbiAqIHNlbGYtc2NvcGUgZmllbGRzIChgcHJvamVjdGAsIGBtZXRhZGF0YS4qYCwgYHZhcnMuKmApIOKAlCBpLmUuIGlucHV0cyB0aGUgY2FsbGVyXG4gKiBuZXZlciBzdXBwbGllZC4gYHt7IHBpcGVsaW5lLiogfX1gIHRva2VucyBhcmUgZGVsaWJlcmF0ZWx5IGlnbm9yZWQ6IHRob3NlIGFyZVxuICogc3ludGgtdGltZSByZWZlcmVuY2VzIChlLmcuIHRoZSBHaXRIdWIgc291cmNlIHRva2VuKSBhbmQgYXJlIFNVUFBPU0VEIHRvXG4gKiBzdXJ2aXZlIGluc3RhbnRpYXRpb24uXG4gKi9cbmZ1bmN0aW9uIHVucmVzb2x2ZWRTZWxmVmFycyhwcm9wczogUGlwZWxpbmVQcm9wcyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZm91bmQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3Qgc2NhbiA9ICh2YWx1ZTogdW5rbm93bik6IHZvaWQgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmb3IgKGNvbnN0IG0gb2YgdmFsdWUubWF0Y2hBbGwoL1xce1xce1xccyp2YXJzXFwuKFtBLVphLXpfXVtBLVphLXowLTlfXSopL2cpKSBmb3VuZC5hZGQobVsxXSEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZS5mb3JFYWNoKHNjYW4pO1xuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSByZXR1cm4gT2JqZWN0LnZhbHVlcyh2YWx1ZSkuZm9yRWFjaChzY2FuKTtcbiAgfTtcbiAgc2Nhbihwcm9wcy5wcm9qZWN0KTtcbiAgc2Nhbihwcm9wcy5tZXRhZGF0YSk7XG4gIHNjYW4ocHJvcHMudmFycyk7XG4gIHJldHVybiBbLi4uZm91bmRdO1xufVxuIl19