@pipeline-builder/api-core 5.2.3 → 5.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/lib/constants/ai-providers.d.ts +3 -22
  2. package/lib/constants/ai-providers.js +6 -56
  3. package/lib/errors/app-errors.d.ts +14 -0
  4. package/lib/errors/app-errors.js +21 -1
  5. package/lib/helpers/sse-helpers.d.ts +33 -3
  6. package/lib/helpers/sse-helpers.js +91 -19
  7. package/lib/middleware/auth.js +6 -3
  8. package/lib/middleware/deferred-quota-check.d.ts +5 -0
  9. package/lib/middleware/deferred-quota-check.js +33 -0
  10. package/lib/middleware/ecosystem-guard.d.ts +3 -3
  11. package/lib/middleware/ecosystem-guard.js +5 -5
  12. package/lib/middleware/index.d.ts +5 -2
  13. package/lib/middleware/index.js +6 -3
  14. package/lib/middleware/on-behalf.d.ts +37 -0
  15. package/lib/middleware/on-behalf.js +143 -0
  16. package/lib/middleware/permission-gates.d.ts +11 -0
  17. package/lib/middleware/permission-gates.js +7 -1
  18. package/lib/middleware/quota-exempt-routes.d.ts +36 -0
  19. package/lib/middleware/quota-exempt-routes.js +47 -0
  20. package/lib/middleware/route-table.d.ts +104 -0
  21. package/lib/middleware/route-table.js +72 -2
  22. package/lib/middleware/service-tokens.d.ts +8 -0
  23. package/lib/middleware/service-tokens.js +2 -1
  24. package/lib/middleware/step-up.js +11 -1
  25. package/lib/services/ai-call-weight.d.ts +24 -0
  26. package/lib/services/ai-call-weight.js +77 -0
  27. package/lib/services/audit-context.d.ts +105 -0
  28. package/lib/services/audit-context.js +134 -0
  29. package/lib/services/index.d.ts +7 -2
  30. package/lib/services/index.js +7 -2
  31. package/lib/services/org-ai-client.d.ts +61 -0
  32. package/lib/services/org-ai-client.js +112 -0
  33. package/lib/services/quota-increment-batcher.d.ts +81 -0
  34. package/lib/services/quota-increment-batcher.js +166 -0
  35. package/lib/services/quota.d.ts +158 -14
  36. package/lib/services/quota.js +252 -22
  37. package/lib/services/remote-audit-client.d.ts +44 -1
  38. package/lib/services/remote-audit-client.js +106 -20
  39. package/lib/services/version-vuln-policy.d.ts +174 -0
  40. package/lib/services/version-vuln-policy.js +242 -0
  41. package/lib/types/ai-catalog.d.ts +63 -0
  42. package/lib/types/ai-catalog.js +82 -0
  43. package/lib/types/ask-proposals.js +6 -6
  44. package/lib/types/build-catalog.d.ts +154 -0
  45. package/lib/types/build-catalog.js +158 -0
  46. package/lib/types/common.d.ts +37 -3
  47. package/lib/types/common.js +20 -2
  48. package/lib/types/ecosystem-notifications.d.ts +5 -5
  49. package/lib/types/ecosystem-notifications.js +9 -3
  50. package/lib/types/error-codes.d.ts +13 -6
  51. package/lib/types/error-codes.js +18 -8
  52. package/lib/types/feature-flags.d.ts +6 -4
  53. package/lib/types/feature-flags.js +11 -6
  54. package/lib/types/index.d.ts +6 -4
  55. package/lib/types/index.js +12 -5
  56. package/lib/types/metadata-keys.d.ts +6 -0
  57. package/lib/types/metadata-keys.js +4 -1
  58. package/lib/types/permissions.d.ts +344 -3
  59. package/lib/types/permissions.js +596 -21
  60. package/lib/types/pipeline.d.ts +39 -0
  61. package/lib/types/pipeline.js +57 -1
  62. package/lib/types/plugin-health.d.ts +0 -2
  63. package/lib/types/plugin-health.js +1 -11
  64. package/lib/types/plugin-scan.d.ts +192 -42
  65. package/lib/types/plugin-scan.js +159 -43
  66. package/lib/types/quota-catalog.d.ts +247 -0
  67. package/lib/types/quota-catalog.js +122 -0
  68. package/lib/types/quota-tiers.d.ts +118 -0
  69. package/lib/types/quota-tiers.js +153 -2
  70. package/lib/types/remote-audit-actions.d.ts +1 -1
  71. package/lib/types/remote-audit-actions.js +131 -1
  72. package/lib/types/wire-vocabulary.js +8 -1
  73. package/lib/utils/index.d.ts +1 -1
  74. package/lib/utils/index.js +2 -2
  75. package/lib/utils/response.d.ts +35 -2
  76. package/lib/utils/response.js +42 -3
  77. package/lib/validation/ai-schemas.d.ts +27 -0
  78. package/lib/validation/ai-schemas.js +31 -5
  79. package/lib/validation/plugin-schemas.d.ts +15 -0
  80. package/lib/validation/plugin-schemas.js +28 -1
  81. package/package.json +31 -2
@@ -93,6 +93,9 @@ export const METADATA_KEY_CATALOG = {
93
93
  ENABLE_METRICS: { key: 'aws:cdk:operations:metrics', category: 'Operations', label: 'Enable CloudWatch failure alarms', type: 'boolean' },
94
94
  ARTIFACT_RETENTION_DAYS: { key: 'aws:cdk:operations:artifactretentiondays', category: 'Operations', label: 'Artifact retention in days', type: 'string' },
95
95
  PIPELINE_VARIABLES: { key: 'aws:cdk:operations:variables', category: 'Operations', label: 'Pipeline runtime variables (JSON)', type: 'string' },
96
+ // Adds a report-only verify step per stage that grades the plugin images the
97
+ // pipeline is about to run (POST /plugins/runtime-check) — never a block.
98
+ RUNTIME_VULN_CHECK: { key: 'aws:cdk:operations:runtimevulncheck', category: 'Operations', label: 'Grade plugin images before each stage runs (report-only)', type: 'boolean' },
96
99
  // ── Encryption (namespace: encryption — custom synth in PipelineBuilder) ──
97
100
  KMS_KEY_ARN: { key: 'aws:cdk:encryption:kmskeyarn', category: 'Encryption', label: 'Custom KMS key ARN for artifacts', type: 'string' },
98
101
  };
@@ -114,4 +117,4 @@ export const METADATA_KEY_GROUPS = (() => {
114
117
  }
115
118
  return groups;
116
119
  })();
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEta2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9tZXRhZGF0YS1rZXlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUEwQ3RDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLHlEQUF5RDtJQUN6RCxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsNkNBQTZDLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7SUFDeEksa0JBQWtCLEVBQUUsRUFBRSxHQUFHLEVBQUUsaURBQWlELEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtJQUN0SixnQ0FBZ0MsRUFBRSxFQUFFLEdBQUcsRUFBRSw2REFBNkQsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxrQ0FBa0MsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQzlMLHdCQUF3QixFQUFFLEVBQUUsR0FBRyxFQUFFLHNEQUFzRCxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLDBCQUEwQixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7SUFDdkssbUJBQW1CLEVBQUUsRUFBRSxHQUFHLEVBQUUsa0RBQWtELEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtJQUN6SiwwQkFBMEIsRUFBRSxFQUFFLEdBQUcsRUFBRSx3REFBd0QsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSw0QkFBNEIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQzdLLGlDQUFpQyxFQUFFLEVBQUUsR0FBRyxFQUFFLDhEQUE4RCxFQUFFLFFBQVEsRUFB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LENBQUM7QUFrQnBHOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFnQyxDQUFDLEdBQUcsRUFBRTtJQUNwRSxNQUFNLE1BQU0sR0FBdUIsRUFBRSxDQUFDO0lBQ3RDLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBZ0MsRUFBRSxDQUFDO1FBQ3ZGLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLEtBQUssR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBwaXBlbGluZSBNRVRBREFUQSBLRVkgY2F0YWxvZyDigJQgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGJvdGhcbiAqIHNpZGVzIG9mIHRoZSBwcm9kdWN0LlxuICpcbiAqIEtleSBmb3JtYXQ6IGBhd3M6Y2RrOntuYW1lc3BhY2V9Ontwcm9wZXJ0eX1gIChhbGwgbG93ZXJjYXNlKS4gVGhlc2UgbWF0Y2ggdGhlXG4gKiBrZXlzIHByb2R1Y2VkIGJ5IGBnZXRDdXN0b21LZXkobmFtZXNwYWNlLCBwcm9wZXJ0eSlgIGFuZCBsb29rZWQgdXAgYnlcbiAqIGBidWlsZENvbmZpZ0Zyb21NZXRhZGF0YWAgaW4gcGlwZWxpbmUtY29yZS5cbiAqXG4gKiBPbmUgdGFibGUgZHJpdmVzIGV2ZXJ5dGhpbmc6IGBNZXRhZGF0YUtleXNgICh0aGUgc3ludGgtdGltZSBjb25zdGFudHNcbiAqIHJlLWV4cG9ydGVkIGJ5IGBAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1jb3JlYCkgYW5kIGBNRVRBREFUQV9LRVlfR1JPVVBTYFxuICogKHRoZSBncm91cGVkIHBpY2tlciB0aGUgcGlwZWxpbmUgZm9ybSBidWlsZGVyIHJlbmRlcnMpIGFyZSBCT1RIIGRlcml2ZWQgZnJvbVxuICogYE1FVEFEQVRBX0tFWV9DQVRBTE9HYCwgc28gYSBrZXkgY2FuIG5ldmVyIGV4aXN0IG9uIG9uZSBzaWRlIG9ubHkuXG4gKlxuICogVGhpcyBtb2R1bGUgaXMgZGVwZW5kZW5jeS1mcmVlIHNvIHRoZSBicm93c2VyIGNhbiBpbXBvcnQgaXQgdGhyb3VnaCB0aGVcbiAqIGBAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZS9tZXRhZGF0YS1rZXlzYCBzdWJwYXRoLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBtZXRhZGF0YSA9IHtcbiAqICAgW01ldGFkYXRhS2V5cy5TRUxGX01VVEFUSU9OXTogdHJ1ZSxcbiAqICAgW01ldGFkYXRhS2V5cy5QVUJMSVNIX0FTU0VUU19JTl9QQVJBTExFTF06IHRydWVcbiAqIH07XG4gKiBgYGBcbiAqL1xuXG4vKiogVGhlIHZhbHVlIHNoYXBlIGEgbWV0YWRhdGEga2V5IGFjY2VwdHMgaW4gdGhlIGZvcm0gYnVpbGRlci4gKi9cbmV4cG9ydCB0eXBlIE1ldGFkYXRhS2V5VHlwZSA9ICdib29sZWFuJyB8ICdzdHJpbmcnO1xuXG4vKiogT25lIGNhdGFsb2cgZW50cnk6IHRoZSB3aXJlIGtleSBwbHVzIGV2ZXJ5dGhpbmcgdGhlIHBpY2tlciBuZWVkcyB0byByZW5kZXIgaXQuICovXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFkYXRhS2V5RW50cnkge1xuICAvKiogVGhlIGBhd3M6Y2RrOuKApmAga2V5IHdyaXR0ZW4gaW50byBhIHBpcGVsaW5lJ3MgbWV0YWRhdGEuICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICAvKiogUGlja2VyIGdyb3VwIGhlYWRpbmcuICovXG4gIHJlYWRvbmx5IGNhdGVnb3J5OiBzdHJpbmc7XG4gIC8qKiBIdW1hbiBsYWJlbCBzaG93biBpbiB0aGUgcGlja2VyLiAqL1xuICByZWFkb25seSBsYWJlbDogc3RyaW5nO1xuICAvKiogVmFsdWUgZWRpdG9yIHRvIHJlbmRlci4gKi9cbiAgcmVhZG9ubHkgdHlwZTogTWV0YWRhdGFLZXlUeXBlO1xufVxuXG4vKipcbiAqIEV2ZXJ5IHN1cHBvcnRlZCBtZXRhZGF0YSBrZXksIGtleWVkIGJ5IGl0cyBgTWV0YWRhdGFLZXlzYCBjb25zdGFudCBuYW1lIGFuZFxuICogbGlzdGVkIGluIHBpY2tlciBvcmRlci5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FVEFEQVRBX0tFWV9DQVRBTE9HID0ge1xuICAvLyDilIDilIAgQ29kZVBpcGVsaW5lIChuYW1lc3BhY2U6IHBpcGVsaW5lczpjb2RlcGlwZWxpbmUpIOKUgOKUgFxuICBTRUxGX01VVEFUSU9OOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpzZWxmbXV0YXRpb24nLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnU2VsZiBNdXRhdGlvbicsIHR5cGU6ICdib29sZWFuJyB9LFxuICBDUk9TU19BQ0NPVU5UX0tFWVM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOmNyb3NzYWNjb3VudGtleXMnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnQ3Jvc3MgQWNjb3VudCBLZXlzJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIERPQ0tFUl9FTkFCTEVEX0ZPUl9TRUxGX01VVEFUSU9OOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpkb2NrZXJlbmFibGVkZm9yc2VsZm11dGF0aW9uJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ0RvY2tlciBFbmFibGVkIGZvciBTZWxmIE11dGF0aW9uJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIERPQ0tFUl9FTkFCTEVEX0ZPUl9TWU5USDogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6ZG9ja2VyZW5hYmxlZGZvcnN5bnRoJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ0RvY2tlciBFbmFibGVkIGZvciBTeW50aCcsIHR5cGU6ICdib29sZWFuJyB9LFxuICBFTkFCTEVfS0VZX1JPVEFUSU9OOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTplbmFibGVrZXlyb3RhdGlvbicsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdFbmFibGUgS2V5IFJvdGF0aW9uJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIFBVQkxJU0hfQVNTRVRTX0lOX1BBUkFMTEVMOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpwdWJsaXNoYXNzZXRzaW5wYXJhbGxlbCcsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdQdWJsaXNoIEFzc2V0cyBpbiBQYXJhbGxlbCcsIHR5cGU6ICdib29sZWFuJyB9LFxuICBSRVVTRV9DUk9TU19SRUdJT05fU1VQUE9SVF9TVEFDS1M6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOnJldXNlY3Jvc3NyZWdpb25zdXBwb3J0c3RhY2tzJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ1JldXNlIENyb3NzIFJlZ2lvbiBTdXBwb3J0IFN0YWNrcycsIHR5cGU6ICdib29sZWFuJyB9LFxuICBVU0VfQ0hBTkdFX1NFVFM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOnVzZWNoYW5nZXNldHMnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnVXNlIENoYW5nZSBTZXRzJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIFVTRV9QSVBFTElORV9ST0xFX0ZPUl9BQ1RJT05TOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTp1c2VwaXBlbGluZXJvbGVmb3JhY3Rpb25zJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ1VzZSBQaXBlbGluZSBSb2xlIGZvciBBY3Rpb25zJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIEFSVElGQUNUX0JVQ0tFVDogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6YXJ0aWZhY3RidWNrZXQnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnQXJ0aWZhY3QgQnVja2V0JywgdHlwZTogJ3N0cmluZycgfSxcbiAgQVNTRVRfUFVCTElTSElOR19DT0RFX0JVSUxEX0RFRkFVTFRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTphc3NldHB1Ymxpc2hpbmdjb2RlYnVpbGRkZWZhdWx0cycsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdBc3NldCBQdWJsaXNoaW5nIENvZGVCdWlsZCBEZWZhdWx0cycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIENES19BU1NFVFNfQ0xJX1ZFUlNJT046IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOmNka2Fzc2V0c2NsaXZlcnNpb24nLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnQ0RLIEFzc2V0cyBDTEkgVmVyc2lvbicsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIENMSV9WRVJTSU9OOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpjbGl2ZXJzaW9uJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ0NMSSBWZXJzaW9uJywgdHlwZTogJ3N0cmluZycgfSxcbiAgQ09ERV9CVUlMRF9ERUZBVUxUUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6Y29kZWJ1aWxkZGVmYXVsdHMnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnQ29kZUJ1aWxkIERlZmF1bHRzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgQ09ERV9QSVBFTElORTogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6Y29kZXBpcGVsaW5lJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ0NvZGVQaXBlbGluZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIENST1NTX1JFR0lPTl9SRVBMSUNBVElPTl9CVUNLRVRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpjcm9zc3JlZ2lvbnJlcGxpY2F0aW9uYnVja2V0cycsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdDcm9zcyBSZWdpb24gUmVwbGljYXRpb24gQnVja2V0cycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIERPQ0tFUl9DUkVERU5USUFMUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6ZG9ja2VyY3JlZGVudGlhbHMnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnRG9ja2VyIENyZWRlbnRpYWxzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgUElQRUxJTkVfTkFNRTogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6cGlwZWxpbmVuYW1lJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ1BpcGVsaW5lIE5hbWUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBQSVBFTElORV9UWVBFOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpwaXBlbGluZXR5cGUnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnUGlwZWxpbmUgVHlwZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFBJUEVMSU5FX1JPTEU6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOnJvbGUnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnUGlwZWxpbmUgUm9sZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFNFTEZfTVVUQVRJT05fQ09ERV9CVUlMRF9ERUZBVUxUUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6c2VsZm11dGF0aW9uY29kZWJ1aWxkZGVmYXVsdHMnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnU2VsZiBNdXRhdGlvbiBDb2RlQnVpbGQgRGVmYXVsdHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTWU5USDogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6c3ludGgnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnU3ludGgnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTWU5USF9DT0RFX0JVSUxEX0RFRkFVTFRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpzeW50aGNvZGVidWlsZGRlZmF1bHRzJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ1N5bnRoIENvZGVCdWlsZCBEZWZhdWx0cycsIHR5cGU6ICdzdHJpbmcnIH0sXG5cbiAgLy8g4pSA4pSAIENvZGVCdWlsZFN0ZXAgKG5hbWVzcGFjZTogcGlwZWxpbmVzOmNvZGVidWlsZHN0ZXApIOKUgOKUgFxuICBBQ1RJT05fUk9MRTogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmFjdGlvbnJvbGUnLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ0FjdGlvbiBSb2xlJywgdHlwZTogJ3N0cmluZycgfSxcbiAgQURESVRJT05BTF9JTlBVVFM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDphZGRpdGlvbmFsaW5wdXRzJywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdBZGRpdGlvbmFsIElucHV0cycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIEJVSUxEX0VOVklST05NRU5UOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6YnVpbGRlbnZpcm9ubWVudCcsIGNhdGVnb3J5OiAnQ29kZUJ1aWxkU3RlcCcsIGxhYmVsOiAnQnVpbGQgRW52aXJvbm1lbnQnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBDQUNIRTogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmNhY2hlJywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdDYWNoZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIENPTU1BTkRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6Y29tbWFuZHMnLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ0NvbW1hbmRzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgQ09ERV9CVUlMRF9FTlY6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDplbnYnLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ0Vudmlyb25tZW50JywgdHlwZTogJ3N0cmluZycgfSxcbiAgRU5WX0ZST01fQ0ZOX09VVFBVVFM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDplbnZmcm9tY2Zub3V0cHV0cycsIGNhdGVnb3J5OiAnQ29kZUJ1aWxkU3RlcCcsIGxhYmVsOiAnRW52IGZyb20gQ0ZOIE91dHB1dHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBGSUxFX1NZU1RFTV9MT0NBVElPTlM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpmaWxlc3lzdGVtbG9jYXRpb25zJywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdGaWxlIFN5c3RlbSBMb2NhdGlvbnMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBJTlBVVDogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmlucHV0JywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdJbnB1dCcsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIElOU1RBTExfQ09NTUFORFM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDppbnN0YWxsY29tbWFuZHMnLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ0luc3RhbGwgQ29tbWFuZHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBMT0dHSU5HOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6bG9nZ2luZycsIGNhdGVnb3J5OiAnQ29kZUJ1aWxkU3RlcCcsIGxhYmVsOiAnTG9nZ2luZycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFBBUlRJQUxfQlVJTERfU1BFQzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOnBhcnRpYWxidWlsZHNwZWMnLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ1BhcnRpYWwgQnVpbGQgU3BlYycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFBSSU1BUllfT1VUUFVUX0RJUkVDVE9SWTogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOnByaW1hcnlvdXRwdXRkaXJlY3RvcnknLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ1ByaW1hcnkgT3V0cHV0IERpcmVjdG9yeScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFBST0pFQ1RfTkFNRTogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOnByb2plY3RuYW1lJywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdQcm9qZWN0IE5hbWUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTVEVQX1JPTEU6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpyb2xlJywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdTdGVwIFJvbGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBST0xFX1BPTElDWV9TVEFURU1FTlRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6cm9sZXBvbGljeXN0YXRlbWVudHMnLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ1JvbGUgUG9saWN5IFN0YXRlbWVudHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBUSU1FT1VUOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6dGltZW91dCcsIGNhdGVnb3J5OiAnQ29kZUJ1aWxkU3RlcCcsIGxhYmVsOiAnVGltZW91dCcsIHR5cGU6ICdzdHJpbmcnIH0sXG5cbiAgLy8g4pSA4pSAIFNoZWxsU3RlcCAobmFtZXNwYWNlOiBwaXBlbGluZXM6c2hlbGxzdGVwKSDilIDilIBcbiAgU0hFTExfQURESVRJT05BTF9JTlBVVFM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6c2hlbGxzdGVwOmFkZGl0aW9uYWxpbnB1dHMnLCBjYXRlZ29yeTogJ1NoZWxsU3RlcCcsIGxhYmVsOiAnQWRkaXRpb25hbCBJbnB1dHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTSEVMTF9DT01NQU5EUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpzaGVsbHN0ZXA6Y29tbWFuZHMnLCBjYXRlZ29yeTogJ1NoZWxsU3RlcCcsIGxhYmVsOiAnQ29tbWFuZHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTSEVMTF9FTlY6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6c2hlbGxzdGVwOmVudicsIGNhdGVnb3J5OiAnU2hlbGxTdGVwJywgbGFiZWw6ICdFbnZpcm9ubWVudCcsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFNIRUxMX0VOVl9GUk9NX0NGTl9PVVRQVVRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOnNoZWxsc3RlcDplbnZmcm9tY2Zub3V0cHV0cycsIGNhdGVnb3J5OiAnU2hlbGxTdGVwJywgbGFiZWw6ICdFbnYgZnJvbSBDRk4gT3V0cHV0cycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFNIRUxMX0lOUFVUOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOnNoZWxsc3RlcDppbnB1dCcsIGNhdGVnb3J5OiAnU2hlbGxTdGVwJywgbGFiZWw6ICdJbnB1dCcsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFNIRUxMX0lOU1RBTExfQ09NTUFORFM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6c2hlbGxzdGVwOmluc3RhbGxjb21tYW5kcycsIGNhdGVnb3J5OiAnU2hlbGxTdGVwJywgbGFiZWw6ICdJbnN0YWxsIENvbW1hbmRzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgU0hFTExfUFJJTUFSWV9PVVRQVVRfRElSRUNUT1JZOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOnNoZWxsc3RlcDpwcmltYXJ5b3V0cHV0ZGlyZWN0b3J5JywgY2F0ZWdvcnk6ICdTaGVsbFN0ZXAnLCBsYWJlbDogJ1ByaW1hcnkgT3V0cHV0IERpcmVjdG9yeScsIHR5cGU6ICdzdHJpbmcnIH0sXG5cbiAgLy8g4pSA4pSAIEJ1aWxkRW52aXJvbm1lbnQgKG5hbWVzcGFjZTogY29kZWJ1aWxkOmJ1aWxkZW52aXJvbm1lbnQpIOKUgOKUgFxuICBQUklWSUxFR0VEOiB7IGtleTogJ2F3czpjZGs6Y29kZWJ1aWxkOmJ1aWxkZW52aXJvbm1lbnQ6cHJpdmlsZWdlZCcsIGNhdGVnb3J5OiAnQnVpbGQgRW52aXJvbm1lbnQnLCBsYWJlbDogJ1ByaXZpbGVnZWQnLCB0eXBlOiAnYm9vbGVhbicgfSxcbiAgQlVJTERfSU1BR0U6IHsga2V5OiAnYXdzOmNkazpjb2RlYnVpbGQ6YnVpbGRlbnZpcm9ubWVudDpidWlsZGltYWdlJywgY2F0ZWdvcnk6ICdCdWlsZCBFbnZpcm9ubWVudCcsIGxhYmVsOiAnQnVpbGQgSW1hZ2UnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBDRVJUSUZJQ0FURTogeyBrZXk6ICdhd3M6Y2RrOmNvZGVidWlsZDpidWlsZGVudmlyb25tZW50OmNlcnRpZmljYXRlJywgY2F0ZWdvcnk6ICdCdWlsZCBFbnZpcm9ubWVudCcsIGxhYmVsOiAnQ2VydGlmaWNhdGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBDT01QVVRFX1RZUEU6IHsga2V5OiAnYXdzOmNkazpjb2RlYnVpbGQ6YnVpbGRlbnZpcm9ubWVudDpjb21wdXRldHlwZScsIGNhdGVnb3J5OiAnQnVpbGQgRW52aXJvbm1lbnQnLCBsYWJlbDogJ0NvbXB1dGUgVHlwZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIERPQ0tFUl9TRVJWRVI6IHsga2V5OiAnYXdzOmNkazpjb2RlYnVpbGQ6YnVpbGRlbnZpcm9ubWVudDpkb2NrZXJzZXJ2ZXInLCBjYXRlZ29yeTogJ0J1aWxkIEVudmlyb25tZW50JywgbGFiZWw6ICdEb2NrZXIgU2VydmVyJywgdHlwZTogJ3N0cmluZycgfSxcbiAgRU5WSVJPTk1FTlRfVkFSSUFCTEVTOiB7IGtleTogJ2F3czpjZGs6Y29kZWJ1aWxkOmJ1aWxkZW52aXJvbm1lbnQ6ZW52aXJvbm1lbnR2YXJpYWJsZXMnLCBjYXRlZ29yeTogJ0J1aWxkIEVudmlyb25tZW50JywgbGFiZWw6ICdFbnZpcm9ubWVudCBWYXJpYWJsZXMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBGTEVFVDogeyBrZXk6ICdhd3M6Y2RrOmNvZGVidWlsZDpidWlsZGVudmlyb25tZW50OmZsZWV0JywgY2F0ZWdvcnk6ICdCdWlsZCBFbnZpcm9ubWVudCcsIGxhYmVsOiAnRmxlZXQnLCB0eXBlOiAnc3RyaW5nJyB9LFxuXG4gIC8vIOKUgOKUgCBOZXR3b3JrIGNvbmZpZ3VyYXRpb24gKG5hbWVzcGFjZTogZWMyOm5ldHdvcmspIOKUgOKUgFxuICBORVRXT1JLX1RZUEU6IHsga2V5OiAnYXdzOmNkazplYzI6bmV0d29yazp0eXBlJywgY2F0ZWdvcnk6ICdOZXR3b3JrJywgbGFiZWw6ICdOZXR3b3JrIFR5cGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBORVRXT1JLX1ZQQ19JRDogeyBrZXk6ICdhd3M6Y2RrOmVjMjpuZXR3b3JrOnZwY2lkJywgY2F0ZWdvcnk6ICdOZXR3b3JrJywgbGFiZWw6ICdWUEMgSUQnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBORVRXT1JLX1NVQk5FVF9JRFM6IHsga2V5OiAnYXdzOmNkazplYzI6bmV0d29yazpzdWJuZXRpZHMnLCBjYXRlZ29yeTogJ05ldHdvcmsnLCBsYWJlbDogJ1N1Ym5ldCBJRHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBORVRXT1JLX1NVQk5FVF9UWVBFOiB7IGtleTogJ2F3czpjZGs6ZWMyOm5ldHdvcms6c3VibmV0dHlwZScsIGNhdGVnb3J5OiAnTmV0d29yaycsIGxhYmVsOiAnU3VibmV0IFR5cGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBORVRXT1JLX0FWQUlMQUJJTElUWV9aT05FUzogeyBrZXk6ICdhd3M6Y2RrOmVjMjpuZXR3b3JrOmF2YWlsYWJpbGl0eXpvbmVzJywgY2F0ZWdvcnk6ICdOZXR3b3JrJywgbGFiZWw6ICdBdmFpbGFiaWxpdHkgWm9uZXMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBORVRXT1JLX1NVQk5FVF9HUk9VUF9OQU1FOiB7IGtleTogJ2F3czpjZGs6ZWMyOm5ldHdvcms6c3VibmV0Z3JvdXBuYW1lJywgY2F0ZWdvcnk6ICdOZXR3b3JrJywgbGFiZWw6ICdTdWJuZXQgR3JvdXAgTmFtZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIE5FVFdPUktfU0VDVVJJVFlfR1JPVVBfSURTOiB7IGtleTogJ2F3czpjZGs6ZWMyOm5ldHdvcms6c2VjdXJpdHlncm91cGlkcycsIGNhdGVnb3J5OiAnTmV0d29yaycsIGxhYmVsOiAnU2VjdXJpdHkgR3JvdXAgSURzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgTkVUV09SS19UQUdTOiB7IGtleTogJ2F3czpjZGs6ZWMyOm5ldHdvcms6dGFncycsIGNhdGVnb3J5OiAnTmV0d29yaycsIGxhYmVsOiAnVlBDIExvb2t1cCBUYWdzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgTkVUV09SS19WUENfTkFNRTogeyBrZXk6ICdhd3M6Y2RrOmVjMjpuZXR3b3JrOnZwY25hbWUnLCBjYXRlZ29yeTogJ05ldHdvcmsnLCBsYWJlbDogJ1ZQQyBOYW1lJywgdHlwZTogJ3N0cmluZycgfSxcbiAgTkVUV09SS19SRUdJT046IHsga2V5OiAnYXdzOmNkazplYzI6bmV0d29yazpyZWdpb24nLCBjYXRlZ29yeTogJ05ldHdvcmsnLCBsYWJlbDogJ1JlZ2lvbicsIHR5cGU6ICdzdHJpbmcnIH0sXG5cbiAgLy8g4pSA4pSAIElBTSByb2xlIGNvbmZpZ3VyYXRpb24gKG5hbWVzcGFjZTogaWFtOnJvbGUpIOKUgOKUgFxuICBST0xFX1RZUEU6IHsga2V5OiAnYXdzOmNkazppYW06cm9sZTp0eXBlJywgY2F0ZWdvcnk6ICdJQU0gUm9sZScsIGxhYmVsOiAnUm9sZSBUeXBlJywgdHlwZTogJ3N0cmluZycgfSxcbiAgUk9MRV9BUk46IHsga2V5OiAnYXdzOmNkazppYW06cm9sZTpyb2xlYXJuJywgY2F0ZWdvcnk6ICdJQU0gUm9sZScsIGxhYmVsOiAnUm9sZSBBUk4nLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBST0xFX05BTUU6IHsga2V5OiAnYXdzOmNkazppYW06cm9sZTpyb2xlbmFtZScsIGNhdGVnb3J5OiAnSUFNIFJvbGUnLCBsYWJlbDogJ1JvbGUgTmFtZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFJPTEVfTVVUQUJMRTogeyBrZXk6ICdhd3M6Y2RrOmlhbTpyb2xlOm11dGFibGUnLCBjYXRlZ29yeTogJ0lBTSBSb2xlJywgbGFiZWw6ICdNdXRhYmxlJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG5cbiAgLy8g4pSA4pSAIFNlY3VyaXR5IGdyb3VwIGNvbmZpZ3VyYXRpb24gKG5hbWVzcGFjZTogZWMyOnNlY3VyaXR5Z3JvdXApIOKUgOKUgFxuICBTRUNVUklUWV9HUk9VUF9UWVBFOiB7IGtleTogJ2F3czpjZGs6ZWMyOnNlY3VyaXR5Z3JvdXA6dHlwZScsIGNhdGVnb3J5OiAnU2VjdXJpdHkgR3JvdXAnLCBsYWJlbDogJ1NlY3VyaXR5IEdyb3VwIFR5cGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTRUNVUklUWV9HUk9VUF9JRFM6IHsga2V5OiAnYXdzOmNkazplYzI6c2VjdXJpdHlncm91cDpzZWN1cml0eWdyb3VwaWRzJywgY2F0ZWdvcnk6ICdTZWN1cml0eSBHcm91cCcsIGxhYmVsOiAnU2VjdXJpdHkgR3JvdXAgSURzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgU0VDVVJJVFlfR1JPVVBfTVVUQUJMRTogeyBrZXk6ICdhd3M6Y2RrOmVjMjpzZWN1cml0eWdyb3VwOm11dGFibGUnLCBjYXRlZ29yeTogJ1NlY3VyaXR5IEdyb3VwJywgbGFiZWw6ICdNdXRhYmxlJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIFNFQ1VSSVRZX0dST1VQX05BTUU6IHsga2V5OiAnYXdzOmNkazplYzI6c2VjdXJpdHlncm91cDpzZWN1cml0eWdyb3VwbmFtZScsIGNhdGVnb3J5OiAnU2VjdXJpdHkgR3JvdXAnLCBsYWJlbDogJ1NlY3VyaXR5IEdyb3VwIE5hbWUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTRUNVUklUWV9HUk9VUF9WUENfSUQ6IHsga2V5OiAnYXdzOmNkazplYzI6c2VjdXJpdHlncm91cDp2cGNpZCcsIGNhdGVnb3J5OiAnU2VjdXJpdHkgR3JvdXAnLCBsYWJlbDogJ1ZQQyBJRCcsIHR5cGU6ICdzdHJpbmcnIH0sXG5cbiAgLy8g4pSA4pSAIE5vdGlmaWNhdGlvbnMgKG5hbWVzcGFjZTogbm90aWZpY2F0aW9ucykg4pSA4pSAXG4gIE5PVElGSUNBVElPTl9UT1BJQ19BUk46IHsga2V5OiAnYXdzOmNkazpub3RpZmljYXRpb25zOnRvcGljOmFybicsIGNhdGVnb3J5OiAnTm90aWZpY2F0aW9ucycsIGxhYmVsOiAnU05TIFRvcGljIEFSTicsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIE5PVElGSUNBVElPTl9FVkVOVFM6IHsga2V5OiAnYXdzOmNkazpub3RpZmljYXRpb25zOmV2ZW50cycsIGNhdGVnb3J5OiAnTm90aWZpY2F0aW9ucycsIGxhYmVsOiAnTm90aWZpY2F0aW9uIEV2ZW50cycsIHR5cGU6ICdzdHJpbmcnIH0sXG5cbiAgLy8g4pSA4pSAIFBpcGVsaW5lIG9wZXJhdGlvbnMgKG5hbWVzcGFjZTogb3BlcmF0aW9ucyDigJQgY3VzdG9tIHN5bnRoIGluIFBpcGVsaW5lQnVpbGRlcikg4pSA4pSAXG4gIEVOQUJMRV9FWEVDVVRJT05fRVZFTlRTOiB7IGtleTogJ2F3czpjZGs6b3BlcmF0aW9uczpleGVjdXRpb25ldmVudHMnLCBjYXRlZ29yeTogJ09wZXJhdGlvbnMnLCBsYWJlbDogJ0VuYWJsZSBleGVjdXRpb24gZXZlbnQgdHJhY2tpbmcnLCB0eXBlOiAnYm9vbGVhbicgfSxcbiAgRU5BQkxFX01FVFJJQ1M6IHsga2V5OiAnYXdzOmNkazpvcGVyYXRpb25zOm1ldHJpY3MnLCBjYXRlZ29yeTogJ09wZXJhdGlvbnMnLCBsYWJlbDogJ0VuYWJsZSBDbG91ZFdhdGNoIGZhaWx1cmUgYWxhcm1zJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIEFSVElGQUNUX1JFVEVOVElPTl9EQVlTOiB7IGtleTogJ2F3czpjZGs6b3BlcmF0aW9uczphcnRpZmFjdHJldGVudGlvbmRheXMnLCBjYXRlZ29yeTogJ09wZXJhdGlvbnMnLCBsYWJlbDogJ0FydGlmYWN0IHJldGVudGlvbiBpbiBkYXlzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgUElQRUxJTkVfVkFSSUFCTEVTOiB7IGtleTogJ2F3czpjZGs6b3BlcmF0aW9uczp2YXJpYWJsZXMnLCBjYXRlZ29yeTogJ09wZXJhdGlvbnMnLCBsYWJlbDogJ1BpcGVsaW5lIHJ1bnRpbWUgdmFyaWFibGVzIChKU09OKScsIHR5cGU6ICdzdHJpbmcnIH0sXG5cbiAgLy8g4pSA4pSAIEVuY3J5cHRpb24gKG5hbWVzcGFjZTogZW5jcnlwdGlvbiDigJQgY3VzdG9tIHN5bnRoIGluIFBpcGVsaW5lQnVpbGRlcikg4pSA4pSAXG4gIEtNU19LRVlfQVJOOiB7IGtleTogJ2F3czpjZGs6ZW5jcnlwdGlvbjprbXNrZXlhcm4nLCBjYXRlZ29yeTogJ0VuY3J5cHRpb24nLCBsYWJlbDogJ0N1c3RvbSBLTVMga2V5IEFSTiBmb3IgYXJ0aWZhY3RzJywgdHlwZTogJ3N0cmluZycgfSxcbn0gYXMgY29uc3Qgc2F0aXNmaWVzIFJlY29yZDxzdHJpbmcsIE1ldGFkYXRhS2V5RW50cnk+O1xuXG4vKiogQ29uc3RhbnQgbmFtZSDihpIgYGF3czpjZGs64oCmYCBrZXksIGZvciB0eXBvLWZyZWUgc3ludGgtdGltZSBhdXRob3JpbmcuICovXG5leHBvcnQgY29uc3QgTWV0YWRhdGFLZXlzID0gT2JqZWN0LmZyZWV6ZShcbiAgT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKE1FVEFEQVRBX0tFWV9DQVRBTE9HKS5tYXAoKFtuYW1lLCBlbnRyeV0pID0+IFtuYW1lLCBlbnRyeS5rZXldKSxcbiAgKSxcbikgYXMgeyByZWFkb25seSBbSyBpbiBrZXlvZiB0eXBlb2YgTUVUQURBVEFfS0VZX0NBVEFMT0ddOiAodHlwZW9mIE1FVEFEQVRBX0tFWV9DQVRBTE9HKVtLXVsna2V5J10gfTtcblxuLyoqIEFueSBzdXBwb3J0ZWQgbWV0YWRhdGEga2V5LiAqL1xuZXhwb3J0IHR5cGUgTWV0YWRhdGFLZXkgPSAodHlwZW9mIE1ldGFkYXRhS2V5cylba2V5b2YgdHlwZW9mIE1ldGFkYXRhS2V5c107XG5cbi8qKiBPbmUgcGlja2VyIG9wdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFLZXlPcHRpb24ge1xuICBrZXk6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdHlwZTogTWV0YWRhdGFLZXlUeXBlO1xufVxuXG4vKiogT25lIHBpY2tlciBncm91cC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFLZXlHcm91cCB7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIGtleXM6IE1ldGFkYXRhS2V5T3B0aW9uW107XG59XG5cbi8qKlxuICogVGhlIGNhdGFsb2cgZ3JvdXBlZCBieSBjYXRlZ29yeSwgaW4gZGVjbGFyYXRpb24gb3JkZXIg4oCUIHdoYXQgdGhlIHBpcGVsaW5lXG4gKiBmb3JtIGJ1aWxkZXIncyBtZXRhZGF0YSBwaWNrZXIgcmVuZGVycy5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FVEFEQVRBX0tFWV9HUk9VUFM6IHJlYWRvbmx5IE1ldGFkYXRhS2V5R3JvdXBbXSA9ICgoKSA9PiB7XG4gIGNvbnN0IGdyb3VwczogTWV0YWRhdGFLZXlHcm91cFtdID0gW107XG4gIGZvciAoY29uc3QgZW50cnkgb2YgT2JqZWN0LnZhbHVlcyhNRVRBREFUQV9LRVlfQ0FUQUxPRykgYXMgcmVhZG9ubHkgTWV0YWRhdGFLZXlFbnRyeVtdKSB7XG4gICAgbGV0IGdyb3VwID0gZ3JvdXBzLmZpbmQoKGcpID0+IGcuY2F0ZWdvcnkgPT09IGVudHJ5LmNhdGVnb3J5KTtcbiAgICBpZiAoIWdyb3VwKSB7XG4gICAgICBncm91cCA9IHsgY2F0ZWdvcnk6IGVudHJ5LmNhdGVnb3J5LCBrZXlzOiBbXSB9O1xuICAgICAgZ3JvdXBzLnB1c2goZ3JvdXApO1xuICAgIH1cbiAgICBncm91cC5rZXlzLnB1c2goeyBrZXk6IGVudHJ5LmtleSwgbGFiZWw6IGVudHJ5LmxhYmVsLCB0eXBlOiBlbnRyeS50eXBlIH0pO1xuICB9XG4gIHJldHVybiBncm91cHM7XG59KSgpO1xuIl19
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEta2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9tZXRhZGF0YS1rZXlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUEwQ3RDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLHlEQUF5RDtJQUN6RCxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsNkNBQTZDLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7SUFDeEksa0JBQWtCLEVBQUUsRUFBRSxHQUFHLEVBQUUsaURBQWlELEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtJQUN0SixnQ0FBZ0MsRUFBRSxFQUFFLEdBQUcsRUFBRSw2REFBNkQsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxrQ0FBa0MsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQzlMLHdCQUF3QixFQUFFLEVBQUUsR0FBRyxFQUFFLHNEQUFzRCxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLDBCQUEwQixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7SUFDdkssbUJBQW1CLEVBQUUsRUFBRSxHQUFHLEVBQUUsa0RBQWtELEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtJQUN6SiwwQkFBMEIsRUFBRSxFQUFFLEdBQUcsRUFBRSx3REFBd0QsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSw0QkFBNEIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQzdLLGlDQUFpQyxFQUFFLEVBQUUsR0FBRyxFQUFFLDhEQUE4RCxFQUFFLFFBQVEsRUFB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T0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUMvRSxDQUNnRyxDQUFDO0FBa0JwRzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBZ0MsQ0FBQyxHQUFHLEVBQUU7SUFDcEUsTUFBTSxNQUFNLEdBQXVCLEVBQUUsQ0FBQztJQUN0QyxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQWdDLEVBQUUsQ0FBQztRQUN2RixJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxLQUFLLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDL0MsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixDQUFDO1FBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUaGUgcGlwZWxpbmUgTUVUQURBVEEgS0VZIGNhdGFsb2cg4oCUIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciBib3RoXG4gKiBzaWRlcyBvZiB0aGUgcHJvZHVjdC5cbiAqXG4gKiBLZXkgZm9ybWF0OiBgYXdzOmNkazp7bmFtZXNwYWNlfTp7cHJvcGVydHl9YCAoYWxsIGxvd2VyY2FzZSkuIFRoZXNlIG1hdGNoIHRoZVxuICoga2V5cyBwcm9kdWNlZCBieSBgZ2V0Q3VzdG9tS2V5KG5hbWVzcGFjZSwgcHJvcGVydHkpYCBhbmQgbG9va2VkIHVwIGJ5XG4gKiBgYnVpbGRDb25maWdGcm9tTWV0YWRhdGFgIGluIHBpcGVsaW5lLWNvcmUuXG4gKlxuICogT25lIHRhYmxlIGRyaXZlcyBldmVyeXRoaW5nOiBgTWV0YWRhdGFLZXlzYCAodGhlIHN5bnRoLXRpbWUgY29uc3RhbnRzXG4gKiByZS1leHBvcnRlZCBieSBgQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZWApIGFuZCBgTUVUQURBVEFfS0VZX0dST1VQU2BcbiAqICh0aGUgZ3JvdXBlZCBwaWNrZXIgdGhlIHBpcGVsaW5lIGZvcm0gYnVpbGRlciByZW5kZXJzKSBhcmUgQk9USCBkZXJpdmVkIGZyb21cbiAqIGBNRVRBREFUQV9LRVlfQ0FUQUxPR2AsIHNvIGEga2V5IGNhbiBuZXZlciBleGlzdCBvbiBvbmUgc2lkZSBvbmx5LlxuICpcbiAqIFRoaXMgbW9kdWxlIGlzIGRlcGVuZGVuY3ktZnJlZSBzbyB0aGUgYnJvd3NlciBjYW4gaW1wb3J0IGl0IHRocm91Z2ggdGhlXG4gKiBgQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUvbWV0YWRhdGEta2V5c2Agc3VicGF0aC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbWV0YWRhdGEgPSB7XG4gKiAgIFtNZXRhZGF0YUtleXMuU0VMRl9NVVRBVElPTl06IHRydWUsXG4gKiAgIFtNZXRhZGF0YUtleXMuUFVCTElTSF9BU1NFVFNfSU5fUEFSQUxMRUxdOiB0cnVlXG4gKiB9O1xuICogYGBgXG4gKi9cblxuLyoqIFRoZSB2YWx1ZSBzaGFwZSBhIG1ldGFkYXRhIGtleSBhY2NlcHRzIGluIHRoZSBmb3JtIGJ1aWxkZXIuICovXG5leHBvcnQgdHlwZSBNZXRhZGF0YUtleVR5cGUgPSAnYm9vbGVhbicgfCAnc3RyaW5nJztcblxuLyoqIE9uZSBjYXRhbG9nIGVudHJ5OiB0aGUgd2lyZSBrZXkgcGx1cyBldmVyeXRoaW5nIHRoZSBwaWNrZXIgbmVlZHMgdG8gcmVuZGVyIGl0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YUtleUVudHJ5IHtcbiAgLyoqIFRoZSBgYXdzOmNkazrigKZgIGtleSB3cml0dGVuIGludG8gYSBwaXBlbGluZSdzIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcbiAgLyoqIFBpY2tlciBncm91cCBoZWFkaW5nLiAqL1xuICByZWFkb25seSBjYXRlZ29yeTogc3RyaW5nO1xuICAvKiogSHVtYW4gbGFiZWwgc2hvd24gaW4gdGhlIHBpY2tlci4gKi9cbiAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZztcbiAgLyoqIFZhbHVlIGVkaXRvciB0byByZW5kZXIuICovXG4gIHJlYWRvbmx5IHR5cGU6IE1ldGFkYXRhS2V5VHlwZTtcbn1cblxuLyoqXG4gKiBFdmVyeSBzdXBwb3J0ZWQgbWV0YWRhdGEga2V5LCBrZXllZCBieSBpdHMgYE1ldGFkYXRhS2V5c2AgY29uc3RhbnQgbmFtZSBhbmRcbiAqIGxpc3RlZCBpbiBwaWNrZXIgb3JkZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVRBREFUQV9LRVlfQ0FUQUxPRyA9IHtcbiAgLy8g4pSA4pSAIENvZGVQaXBlbGluZSAobmFtZXNwYWNlOiBwaXBlbGluZXM6Y29kZXBpcGVsaW5lKSDilIDilIBcbiAgU0VMRl9NVVRBVElPTjogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6c2VsZm11dGF0aW9uJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ1NlbGYgTXV0YXRpb24nLCB0eXBlOiAnYm9vbGVhbicgfSxcbiAgQ1JPU1NfQUNDT1VOVF9LRVlTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpjcm9zc2FjY291bnRrZXlzJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ0Nyb3NzIEFjY291bnQgS2V5cycsIHR5cGU6ICdib29sZWFuJyB9LFxuICBET0NLRVJfRU5BQkxFRF9GT1JfU0VMRl9NVVRBVElPTjogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6ZG9ja2VyZW5hYmxlZGZvcnNlbGZtdXRhdGlvbicsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdEb2NrZXIgRW5hYmxlZCBmb3IgU2VsZiBNdXRhdGlvbicsIHR5cGU6ICdib29sZWFuJyB9LFxuICBET0NLRVJfRU5BQkxFRF9GT1JfU1lOVEg6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOmRvY2tlcmVuYWJsZWRmb3JzeW50aCcsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdEb2NrZXIgRW5hYmxlZCBmb3IgU3ludGgnLCB0eXBlOiAnYm9vbGVhbicgfSxcbiAgRU5BQkxFX0tFWV9ST1RBVElPTjogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6ZW5hYmxla2V5cm90YXRpb24nLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnRW5hYmxlIEtleSBSb3RhdGlvbicsIHR5cGU6ICdib29sZWFuJyB9LFxuICBQVUJMSVNIX0FTU0VUU19JTl9QQVJBTExFTDogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6cHVibGlzaGFzc2V0c2lucGFyYWxsZWwnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnUHVibGlzaCBBc3NldHMgaW4gUGFyYWxsZWwnLCB0eXBlOiAnYm9vbGVhbicgfSxcbiAgUkVVU0VfQ1JPU1NfUkVHSU9OX1NVUFBPUlRfU1RBQ0tTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpyZXVzZWNyb3NzcmVnaW9uc3VwcG9ydHN0YWNrcycsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdSZXVzZSBDcm9zcyBSZWdpb24gU3VwcG9ydCBTdGFja3MnLCB0eXBlOiAnYm9vbGVhbicgfSxcbiAgVVNFX0NIQU5HRV9TRVRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTp1c2VjaGFuZ2VzZXRzJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ1VzZSBDaGFuZ2UgU2V0cycsIHR5cGU6ICdib29sZWFuJyB9LFxuICBVU0VfUElQRUxJTkVfUk9MRV9GT1JfQUNUSU9OUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6dXNlcGlwZWxpbmVyb2xlZm9yYWN0aW9ucycsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdVc2UgUGlwZWxpbmUgUm9sZSBmb3IgQWN0aW9ucycsIHR5cGU6ICdib29sZWFuJyB9LFxuICBBUlRJRkFDVF9CVUNLRVQ6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOmFydGlmYWN0YnVja2V0JywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ0FydGlmYWN0IEJ1Y2tldCcsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIEFTU0VUX1BVQkxJU0hJTkdfQ09ERV9CVUlMRF9ERUZBVUxUUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6YXNzZXRwdWJsaXNoaW5nY29kZWJ1aWxkZGVmYXVsdHMnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnQXNzZXQgUHVibGlzaGluZyBDb2RlQnVpbGQgRGVmYXVsdHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBDREtfQVNTRVRTX0NMSV9WRVJTSU9OOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpjZGthc3NldHNjbGl2ZXJzaW9uJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ0NESyBBc3NldHMgQ0xJIFZlcnNpb24nLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBDTElfVkVSU0lPTjogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6Y2xpdmVyc2lvbicsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdDTEkgVmVyc2lvbicsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIENPREVfQlVJTERfREVGQVVMVFM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOmNvZGVidWlsZGRlZmF1bHRzJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ0NvZGVCdWlsZCBEZWZhdWx0cycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIENPREVfUElQRUxJTkU6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOmNvZGVwaXBlbGluZScsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdDb2RlUGlwZWxpbmUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBDUk9TU19SRUdJT05fUkVQTElDQVRJT05fQlVDS0VUUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6Y3Jvc3NyZWdpb25yZXBsaWNhdGlvbmJ1Y2tldHMnLCBjYXRlZ29yeTogJ0NvZGVQaXBlbGluZScsIGxhYmVsOiAnQ3Jvc3MgUmVnaW9uIFJlcGxpY2F0aW9uIEJ1Y2tldHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBET0NLRVJfQ1JFREVOVElBTFM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOmRvY2tlcmNyZWRlbnRpYWxzJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ0RvY2tlciBDcmVkZW50aWFscycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFBJUEVMSU5FX05BTUU6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOnBpcGVsaW5lbmFtZScsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdQaXBlbGluZSBOYW1lJywgdHlwZTogJ3N0cmluZycgfSxcbiAgUElQRUxJTkVfVFlQRTogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6cGlwZWxpbmV0eXBlJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ1BpcGVsaW5lIFR5cGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBQSVBFTElORV9ST0xFOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVwaXBlbGluZTpyb2xlJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ1BpcGVsaW5lIFJvbGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTRUxGX01VVEFUSU9OX0NPREVfQlVJTERfREVGQVVMVFM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOnNlbGZtdXRhdGlvbmNvZGVidWlsZGRlZmF1bHRzJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ1NlbGYgTXV0YXRpb24gQ29kZUJ1aWxkIERlZmF1bHRzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgU1lOVEg6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZXBpcGVsaW5lOnN5bnRoJywgY2F0ZWdvcnk6ICdDb2RlUGlwZWxpbmUnLCBsYWJlbDogJ1N5bnRoJywgdHlwZTogJ3N0cmluZycgfSxcbiAgU1lOVEhfQ09ERV9CVUlMRF9ERUZBVUxUUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlcGlwZWxpbmU6c3ludGhjb2RlYnVpbGRkZWZhdWx0cycsIGNhdGVnb3J5OiAnQ29kZVBpcGVsaW5lJywgbGFiZWw6ICdTeW50aCBDb2RlQnVpbGQgRGVmYXVsdHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuXG4gIC8vIOKUgOKUgCBDb2RlQnVpbGRTdGVwIChuYW1lc3BhY2U6IHBpcGVsaW5lczpjb2RlYnVpbGRzdGVwKSDilIDilIBcbiAgQUNUSU9OX1JPTEU6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDphY3Rpb25yb2xlJywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdBY3Rpb24gUm9sZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIEFERElUSU9OQUxfSU5QVVRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6YWRkaXRpb25hbGlucHV0cycsIGNhdGVnb3J5OiAnQ29kZUJ1aWxkU3RlcCcsIGxhYmVsOiAnQWRkaXRpb25hbCBJbnB1dHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBCVUlMRF9FTlZJUk9OTUVOVDogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmJ1aWxkZW52aXJvbm1lbnQnLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ0J1aWxkIEVudmlyb25tZW50JywgdHlwZTogJ3N0cmluZycgfSxcbiAgQ0FDSEU6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpjYWNoZScsIGNhdGVnb3J5OiAnQ29kZUJ1aWxkU3RlcCcsIGxhYmVsOiAnQ2FjaGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBDT01NQU5EUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmNvbW1hbmRzJywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdDb21tYW5kcycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIENPREVfQlVJTERfRU5WOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6ZW52JywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdFbnZpcm9ubWVudCcsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIEVOVl9GUk9NX0NGTl9PVVRQVVRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6ZW52ZnJvbWNmbm91dHB1dHMnLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ0VudiBmcm9tIENGTiBPdXRwdXRzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgRklMRV9TWVNURU1fTE9DQVRJT05TOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6ZmlsZXN5c3RlbWxvY2F0aW9ucycsIGNhdGVnb3J5OiAnQ29kZUJ1aWxkU3RlcCcsIGxhYmVsOiAnRmlsZSBTeXN0ZW0gTG9jYXRpb25zJywgdHlwZTogJ3N0cmluZycgfSxcbiAgSU5QVVQ6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDppbnB1dCcsIGNhdGVnb3J5OiAnQ29kZUJ1aWxkU3RlcCcsIGxhYmVsOiAnSW5wdXQnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBJTlNUQUxMX0NPTU1BTkRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6aW5zdGFsbGNvbW1hbmRzJywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdJbnN0YWxsIENvbW1hbmRzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgTE9HR0lORzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmxvZ2dpbmcnLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ0xvZ2dpbmcnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBQQVJUSUFMX0JVSUxEX1NQRUM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpwYXJ0aWFsYnVpbGRzcGVjJywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdQYXJ0aWFsIEJ1aWxkIFNwZWMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBQUklNQVJZX09VVFBVVF9ESVJFQ1RPUlk6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpwcmltYXJ5b3V0cHV0ZGlyZWN0b3J5JywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdQcmltYXJ5IE91dHB1dCBEaXJlY3RvcnknLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBQUk9KRUNUX05BTUU6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpwcm9qZWN0bmFtZScsIGNhdGVnb3J5OiAnQ29kZUJ1aWxkU3RlcCcsIGxhYmVsOiAnUHJvamVjdCBOYW1lJywgdHlwZTogJ3N0cmluZycgfSxcbiAgU1RFUF9ST0xFOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6cm9sZScsIGNhdGVnb3J5OiAnQ29kZUJ1aWxkU3RlcCcsIGxhYmVsOiAnU3RlcCBSb2xlJywgdHlwZTogJ3N0cmluZycgfSxcbiAgUk9MRV9QT0xJQ1lfU1RBVEVNRU5UUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOnJvbGVwb2xpY3lzdGF0ZW1lbnRzJywgY2F0ZWdvcnk6ICdDb2RlQnVpbGRTdGVwJywgbGFiZWw6ICdSb2xlIFBvbGljeSBTdGF0ZW1lbnRzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgVElNRU9VVDogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOnRpbWVvdXQnLCBjYXRlZ29yeTogJ0NvZGVCdWlsZFN0ZXAnLCBsYWJlbDogJ1RpbWVvdXQnLCB0eXBlOiAnc3RyaW5nJyB9LFxuXG4gIC8vIOKUgOKUgCBTaGVsbFN0ZXAgKG5hbWVzcGFjZTogcGlwZWxpbmVzOnNoZWxsc3RlcCkg4pSA4pSAXG4gIFNIRUxMX0FERElUSU9OQUxfSU5QVVRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOnNoZWxsc3RlcDphZGRpdGlvbmFsaW5wdXRzJywgY2F0ZWdvcnk6ICdTaGVsbFN0ZXAnLCBsYWJlbDogJ0FkZGl0aW9uYWwgSW5wdXRzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgU0hFTExfQ09NTUFORFM6IHsga2V5OiAnYXdzOmNkazpwaXBlbGluZXM6c2hlbGxzdGVwOmNvbW1hbmRzJywgY2F0ZWdvcnk6ICdTaGVsbFN0ZXAnLCBsYWJlbDogJ0NvbW1hbmRzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgU0hFTExfRU5WOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOnNoZWxsc3RlcDplbnYnLCBjYXRlZ29yeTogJ1NoZWxsU3RlcCcsIGxhYmVsOiAnRW52aXJvbm1lbnQnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTSEVMTF9FTlZfRlJPTV9DRk5fT1VUUFVUUzogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpzaGVsbHN0ZXA6ZW52ZnJvbWNmbm91dHB1dHMnLCBjYXRlZ29yeTogJ1NoZWxsU3RlcCcsIGxhYmVsOiAnRW52IGZyb20gQ0ZOIE91dHB1dHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTSEVMTF9JTlBVVDogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpzaGVsbHN0ZXA6aW5wdXQnLCBjYXRlZ29yeTogJ1NoZWxsU3RlcCcsIGxhYmVsOiAnSW5wdXQnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBTSEVMTF9JTlNUQUxMX0NPTU1BTkRTOiB7IGtleTogJ2F3czpjZGs6cGlwZWxpbmVzOnNoZWxsc3RlcDppbnN0YWxsY29tbWFuZHMnLCBjYXRlZ29yeTogJ1NoZWxsU3RlcCcsIGxhYmVsOiAnSW5zdGFsbCBDb21tYW5kcycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFNIRUxMX1BSSU1BUllfT1VUUFVUX0RJUkVDVE9SWTogeyBrZXk6ICdhd3M6Y2RrOnBpcGVsaW5lczpzaGVsbHN0ZXA6cHJpbWFyeW91dHB1dGRpcmVjdG9yeScsIGNhdGVnb3J5OiAnU2hlbGxTdGVwJywgbGFiZWw6ICdQcmltYXJ5IE91dHB1dCBEaXJlY3RvcnknLCB0eXBlOiAnc3RyaW5nJyB9LFxuXG4gIC8vIOKUgOKUgCBCdWlsZEVudmlyb25tZW50IChuYW1lc3BhY2U6IGNvZGVidWlsZDpidWlsZGVudmlyb25tZW50KSDilIDilIBcbiAgUFJJVklMRUdFRDogeyBrZXk6ICdhd3M6Y2RrOmNvZGVidWlsZDpidWlsZGVudmlyb25tZW50OnByaXZpbGVnZWQnLCBjYXRlZ29yeTogJ0J1aWxkIEVudmlyb25tZW50JywgbGFiZWw6ICdQcml2aWxlZ2VkJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIEJVSUxEX0lNQUdFOiB7IGtleTogJ2F3czpjZGs6Y29kZWJ1aWxkOmJ1aWxkZW52aXJvbm1lbnQ6YnVpbGRpbWFnZScsIGNhdGVnb3J5OiAnQnVpbGQgRW52aXJvbm1lbnQnLCBsYWJlbDogJ0J1aWxkIEltYWdlJywgdHlwZTogJ3N0cmluZycgfSxcbiAgQ0VSVElGSUNBVEU6IHsga2V5OiAnYXdzOmNkazpjb2RlYnVpbGQ6YnVpbGRlbnZpcm9ubWVudDpjZXJ0aWZpY2F0ZScsIGNhdGVnb3J5OiAnQnVpbGQgRW52aXJvbm1lbnQnLCBsYWJlbDogJ0NlcnRpZmljYXRlJywgdHlwZTogJ3N0cmluZycgfSxcbiAgQ09NUFVURV9UWVBFOiB7IGtleTogJ2F3czpjZGs6Y29kZWJ1aWxkOmJ1aWxkZW52aXJvbm1lbnQ6Y29tcHV0ZXR5cGUnLCBjYXRlZ29yeTogJ0J1aWxkIEVudmlyb25tZW50JywgbGFiZWw6ICdDb21wdXRlIFR5cGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBET0NLRVJfU0VSVkVSOiB7IGtleTogJ2F3czpjZGs6Y29kZWJ1aWxkOmJ1aWxkZW52aXJvbm1lbnQ6ZG9ja2Vyc2VydmVyJywgY2F0ZWdvcnk6ICdCdWlsZCBFbnZpcm9ubWVudCcsIGxhYmVsOiAnRG9ja2VyIFNlcnZlcicsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIEVOVklST05NRU5UX1ZBUklBQkxFUzogeyBrZXk6ICdhd3M6Y2RrOmNvZGVidWlsZDpidWlsZGVudmlyb25tZW50OmVudmlyb25tZW50dmFyaWFibGVzJywgY2F0ZWdvcnk6ICdCdWlsZCBFbnZpcm9ubWVudCcsIGxhYmVsOiAnRW52aXJvbm1lbnQgVmFyaWFibGVzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgRkxFRVQ6IHsga2V5OiAnYXdzOmNkazpjb2RlYnVpbGQ6YnVpbGRlbnZpcm9ubWVudDpmbGVldCcsIGNhdGVnb3J5OiAnQnVpbGQgRW52aXJvbm1lbnQnLCBsYWJlbDogJ0ZsZWV0JywgdHlwZTogJ3N0cmluZycgfSxcblxuICAvLyDilIDilIAgTmV0d29yayBjb25maWd1cmF0aW9uIChuYW1lc3BhY2U6IGVjMjpuZXR3b3JrKSDilIDilIBcbiAgTkVUV09SS19UWVBFOiB7IGtleTogJ2F3czpjZGs6ZWMyOm5ldHdvcms6dHlwZScsIGNhdGVnb3J5OiAnTmV0d29yaycsIGxhYmVsOiAnTmV0d29yayBUeXBlJywgdHlwZTogJ3N0cmluZycgfSxcbiAgTkVUV09SS19WUENfSUQ6IHsga2V5OiAnYXdzOmNkazplYzI6bmV0d29yazp2cGNpZCcsIGNhdGVnb3J5OiAnTmV0d29yaycsIGxhYmVsOiAnVlBDIElEJywgdHlwZTogJ3N0cmluZycgfSxcbiAgTkVUV09SS19TVUJORVRfSURTOiB7IGtleTogJ2F3czpjZGs6ZWMyOm5ldHdvcms6c3VibmV0aWRzJywgY2F0ZWdvcnk6ICdOZXR3b3JrJywgbGFiZWw6ICdTdWJuZXQgSURzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgTkVUV09SS19TVUJORVRfVFlQRTogeyBrZXk6ICdhd3M6Y2RrOmVjMjpuZXR3b3JrOnN1Ym5ldHR5cGUnLCBjYXRlZ29yeTogJ05ldHdvcmsnLCBsYWJlbDogJ1N1Ym5ldCBUeXBlJywgdHlwZTogJ3N0cmluZycgfSxcbiAgTkVUV09SS19BVkFJTEFCSUxJVFlfWk9ORVM6IHsga2V5OiAnYXdzOmNkazplYzI6bmV0d29yazphdmFpbGFiaWxpdHl6b25lcycsIGNhdGVnb3J5OiAnTmV0d29yaycsIGxhYmVsOiAnQXZhaWxhYmlsaXR5IFpvbmVzJywgdHlwZTogJ3N0cmluZycgfSxcbiAgTkVUV09SS19TVUJORVRfR1JPVVBfTkFNRTogeyBrZXk6ICdhd3M6Y2RrOmVjMjpuZXR3b3JrOnN1Ym5ldGdyb3VwbmFtZScsIGNhdGVnb3J5OiAnTmV0d29yaycsIGxhYmVsOiAnU3VibmV0IEdyb3VwIE5hbWUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBORVRXT1JLX1NFQ1VSSVRZX0dST1VQX0lEUzogeyBrZXk6ICdhd3M6Y2RrOmVjMjpuZXR3b3JrOnNlY3VyaXR5Z3JvdXBpZHMnLCBjYXRlZ29yeTogJ05ldHdvcmsnLCBsYWJlbDogJ1NlY3VyaXR5IEdyb3VwIElEcycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIE5FVFdPUktfVEFHUzogeyBrZXk6ICdhd3M6Y2RrOmVjMjpuZXR3b3JrOnRhZ3MnLCBjYXRlZ29yeTogJ05ldHdvcmsnLCBsYWJlbDogJ1ZQQyBMb29rdXAgVGFncycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIE5FVFdPUktfVlBDX05BTUU6IHsga2V5OiAnYXdzOmNkazplYzI6bmV0d29yazp2cGNuYW1lJywgY2F0ZWdvcnk6ICdOZXR3b3JrJywgbGFiZWw6ICdWUEMgTmFtZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIE5FVFdPUktfUkVHSU9OOiB7IGtleTogJ2F3czpjZGs6ZWMyOm5ldHdvcms6cmVnaW9uJywgY2F0ZWdvcnk6ICdOZXR3b3JrJywgbGFiZWw6ICdSZWdpb24nLCB0eXBlOiAnc3RyaW5nJyB9LFxuXG4gIC8vIOKUgOKUgCBJQU0gcm9sZSBjb25maWd1cmF0aW9uIChuYW1lc3BhY2U6IGlhbTpyb2xlKSDilIDilIBcbiAgUk9MRV9UWVBFOiB7IGtleTogJ2F3czpjZGs6aWFtOnJvbGU6dHlwZScsIGNhdGVnb3J5OiAnSUFNIFJvbGUnLCBsYWJlbDogJ1JvbGUgVHlwZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFJPTEVfQVJOOiB7IGtleTogJ2F3czpjZGs6aWFtOnJvbGU6cm9sZWFybicsIGNhdGVnb3J5OiAnSUFNIFJvbGUnLCBsYWJlbDogJ1JvbGUgQVJOJywgdHlwZTogJ3N0cmluZycgfSxcbiAgUk9MRV9OQU1FOiB7IGtleTogJ2F3czpjZGs6aWFtOnJvbGU6cm9sZW5hbWUnLCBjYXRlZ29yeTogJ0lBTSBSb2xlJywgbGFiZWw6ICdSb2xlIE5hbWUnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBST0xFX01VVEFCTEU6IHsga2V5OiAnYXdzOmNkazppYW06cm9sZTptdXRhYmxlJywgY2F0ZWdvcnk6ICdJQU0gUm9sZScsIGxhYmVsOiAnTXV0YWJsZScsIHR5cGU6ICdib29sZWFuJyB9LFxuXG4gIC8vIOKUgOKUgCBTZWN1cml0eSBncm91cCBjb25maWd1cmF0aW9uIChuYW1lc3BhY2U6IGVjMjpzZWN1cml0eWdyb3VwKSDilIDilIBcbiAgU0VDVVJJVFlfR1JPVVBfVFlQRTogeyBrZXk6ICdhd3M6Y2RrOmVjMjpzZWN1cml0eWdyb3VwOnR5cGUnLCBjYXRlZ29yeTogJ1NlY3VyaXR5IEdyb3VwJywgbGFiZWw6ICdTZWN1cml0eSBHcm91cCBUeXBlJywgdHlwZTogJ3N0cmluZycgfSxcbiAgU0VDVVJJVFlfR1JPVVBfSURTOiB7IGtleTogJ2F3czpjZGs6ZWMyOnNlY3VyaXR5Z3JvdXA6c2VjdXJpdHlncm91cGlkcycsIGNhdGVnb3J5OiAnU2VjdXJpdHkgR3JvdXAnLCBsYWJlbDogJ1NlY3VyaXR5IEdyb3VwIElEcycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFNFQ1VSSVRZX0dST1VQX01VVEFCTEU6IHsga2V5OiAnYXdzOmNkazplYzI6c2VjdXJpdHlncm91cDptdXRhYmxlJywgY2F0ZWdvcnk6ICdTZWN1cml0eSBHcm91cCcsIGxhYmVsOiAnTXV0YWJsZScsIHR5cGU6ICdib29sZWFuJyB9LFxuICBTRUNVUklUWV9HUk9VUF9OQU1FOiB7IGtleTogJ2F3czpjZGs6ZWMyOnNlY3VyaXR5Z3JvdXA6c2VjdXJpdHlncm91cG5hbWUnLCBjYXRlZ29yeTogJ1NlY3VyaXR5IEdyb3VwJywgbGFiZWw6ICdTZWN1cml0eSBHcm91cCBOYW1lJywgdHlwZTogJ3N0cmluZycgfSxcbiAgU0VDVVJJVFlfR1JPVVBfVlBDX0lEOiB7IGtleTogJ2F3czpjZGs6ZWMyOnNlY3VyaXR5Z3JvdXA6dnBjaWQnLCBjYXRlZ29yeTogJ1NlY3VyaXR5IEdyb3VwJywgbGFiZWw6ICdWUEMgSUQnLCB0eXBlOiAnc3RyaW5nJyB9LFxuXG4gIC8vIOKUgOKUgCBOb3RpZmljYXRpb25zIChuYW1lc3BhY2U6IG5vdGlmaWNhdGlvbnMpIOKUgOKUgFxuICBOT1RJRklDQVRJT05fVE9QSUNfQVJOOiB7IGtleTogJ2F3czpjZGs6bm90aWZpY2F0aW9uczp0b3BpYzphcm4nLCBjYXRlZ29yeTogJ05vdGlmaWNhdGlvbnMnLCBsYWJlbDogJ1NOUyBUb3BpYyBBUk4nLCB0eXBlOiAnc3RyaW5nJyB9LFxuICBOT1RJRklDQVRJT05fRVZFTlRTOiB7IGtleTogJ2F3czpjZGs6bm90aWZpY2F0aW9uczpldmVudHMnLCBjYXRlZ29yeTogJ05vdGlmaWNhdGlvbnMnLCBsYWJlbDogJ05vdGlmaWNhdGlvbiBFdmVudHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuXG4gIC8vIOKUgOKUgCBQaXBlbGluZSBvcGVyYXRpb25zIChuYW1lc3BhY2U6IG9wZXJhdGlvbnMg4oCUIGN1c3RvbSBzeW50aCBpbiBQaXBlbGluZUJ1aWxkZXIpIOKUgOKUgFxuICBFTkFCTEVfRVhFQ1VUSU9OX0VWRU5UUzogeyBrZXk6ICdhd3M6Y2RrOm9wZXJhdGlvbnM6ZXhlY3V0aW9uZXZlbnRzJywgY2F0ZWdvcnk6ICdPcGVyYXRpb25zJywgbGFiZWw6ICdFbmFibGUgZXhlY3V0aW9uIGV2ZW50IHRyYWNraW5nJywgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIEVOQUJMRV9NRVRSSUNTOiB7IGtleTogJ2F3czpjZGs6b3BlcmF0aW9uczptZXRyaWNzJywgY2F0ZWdvcnk6ICdPcGVyYXRpb25zJywgbGFiZWw6ICdFbmFibGUgQ2xvdWRXYXRjaCBmYWlsdXJlIGFsYXJtcycsIHR5cGU6ICdib29sZWFuJyB9LFxuICBBUlRJRkFDVF9SRVRFTlRJT05fREFZUzogeyBrZXk6ICdhd3M6Y2RrOm9wZXJhdGlvbnM6YXJ0aWZhY3RyZXRlbnRpb25kYXlzJywgY2F0ZWdvcnk6ICdPcGVyYXRpb25zJywgbGFiZWw6ICdBcnRpZmFjdCByZXRlbnRpb24gaW4gZGF5cycsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIFBJUEVMSU5FX1ZBUklBQkxFUzogeyBrZXk6ICdhd3M6Y2RrOm9wZXJhdGlvbnM6dmFyaWFibGVzJywgY2F0ZWdvcnk6ICdPcGVyYXRpb25zJywgbGFiZWw6ICdQaXBlbGluZSBydW50aW1lIHZhcmlhYmxlcyAoSlNPTiknLCB0eXBlOiAnc3RyaW5nJyB9LFxuICAvLyBBZGRzIGEgcmVwb3J0LW9ubHkgdmVyaWZ5IHN0ZXAgcGVyIHN0YWdlIHRoYXQgZ3JhZGVzIHRoZSBwbHVnaW4gaW1hZ2VzIHRoZVxuICAvLyBwaXBlbGluZSBpcyBhYm91dCB0byBydW4gKFBPU1QgL3BsdWdpbnMvcnVudGltZS1jaGVjaykg4oCUIG5ldmVyIGEgYmxvY2suXG4gIFJVTlRJTUVfVlVMTl9DSEVDSzogeyBrZXk6ICdhd3M6Y2RrOm9wZXJhdGlvbnM6cnVudGltZXZ1bG5jaGVjaycsIGNhdGVnb3J5OiAnT3BlcmF0aW9ucycsIGxhYmVsOiAnR3JhZGUgcGx1Z2luIGltYWdlcyBiZWZvcmUgZWFjaCBzdGFnZSBydW5zIChyZXBvcnQtb25seSknLCB0eXBlOiAnYm9vbGVhbicgfSxcblxuICAvLyDilIDilIAgRW5jcnlwdGlvbiAobmFtZXNwYWNlOiBlbmNyeXB0aW9uIOKAlCBjdXN0b20gc3ludGggaW4gUGlwZWxpbmVCdWlsZGVyKSDilIDilIBcbiAgS01TX0tFWV9BUk46IHsga2V5OiAnYXdzOmNkazplbmNyeXB0aW9uOmttc2tleWFybicsIGNhdGVnb3J5OiAnRW5jcnlwdGlvbicsIGxhYmVsOiAnQ3VzdG9tIEtNUyBrZXkgQVJOIGZvciBhcnRpZmFjdHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxufSBhcyBjb25zdCBzYXRpc2ZpZXMgUmVjb3JkPHN0cmluZywgTWV0YWRhdGFLZXlFbnRyeT47XG5cbi8qKiBDb25zdGFudCBuYW1lIOKGkiBgYXdzOmNkazrigKZgIGtleSwgZm9yIHR5cG8tZnJlZSBzeW50aC10aW1lIGF1dGhvcmluZy4gKi9cbmV4cG9ydCBjb25zdCBNZXRhZGF0YUtleXMgPSBPYmplY3QuZnJlZXplKFxuICBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoTUVUQURBVEFfS0VZX0NBVEFMT0cpLm1hcCgoW25hbWUsIGVudHJ5XSkgPT4gW25hbWUsIGVudHJ5LmtleV0pLFxuICApLFxuKSBhcyB7IHJlYWRvbmx5IFtLIGluIGtleW9mIHR5cGVvZiBNRVRBREFUQV9LRVlfQ0FUQUxPR106ICh0eXBlb2YgTUVUQURBVEFfS0VZX0NBVEFMT0cpW0tdWydrZXknXSB9O1xuXG4vKiogQW55IHN1cHBvcnRlZCBtZXRhZGF0YSBrZXkuICovXG5leHBvcnQgdHlwZSBNZXRhZGF0YUtleSA9ICh0eXBlb2YgTWV0YWRhdGFLZXlzKVtrZXlvZiB0eXBlb2YgTWV0YWRhdGFLZXlzXTtcblxuLyoqIE9uZSBwaWNrZXIgb3B0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YUtleU9wdGlvbiB7XG4gIGtleTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICB0eXBlOiBNZXRhZGF0YUtleVR5cGU7XG59XG5cbi8qKiBPbmUgcGlja2VyIGdyb3VwLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YUtleUdyb3VwIHtcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAga2V5czogTWV0YWRhdGFLZXlPcHRpb25bXTtcbn1cblxuLyoqXG4gKiBUaGUgY2F0YWxvZyBncm91cGVkIGJ5IGNhdGVnb3J5LCBpbiBkZWNsYXJhdGlvbiBvcmRlciDigJQgd2hhdCB0aGUgcGlwZWxpbmVcbiAqIGZvcm0gYnVpbGRlcidzIG1ldGFkYXRhIHBpY2tlciByZW5kZXJzLlxuICovXG5leHBvcnQgY29uc3QgTUVUQURBVEFfS0VZX0dST1VQUzogcmVhZG9ubHkgTWV0YWRhdGFLZXlHcm91cFtdID0gKCgpID0+IHtcbiAgY29uc3QgZ3JvdXBzOiBNZXRhZGF0YUtleUdyb3VwW10gPSBbXTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBPYmplY3QudmFsdWVzKE1FVEFEQVRBX0tFWV9DQVRBTE9HKSBhcyByZWFkb25seSBNZXRhZGF0YUtleUVudHJ5W10pIHtcbiAgICBsZXQgZ3JvdXAgPSBncm91cHMuZmluZCgoZykgPT4gZy5jYXRlZ29yeSA9PT0gZW50cnkuY2F0ZWdvcnkpO1xuICAgIGlmICghZ3JvdXApIHtcbiAgICAgIGdyb3VwID0geyBjYXRlZ29yeTogZW50cnkuY2F0ZWdvcnksIGtleXM6IFtdIH07XG4gICAgICBncm91cHMucHVzaChncm91cCk7XG4gICAgfVxuICAgIGdyb3VwLmtleXMucHVzaCh7IGtleTogZW50cnkua2V5LCBsYWJlbDogZW50cnkubGFiZWwsIHR5cGU6IGVudHJ5LnR5cGUgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3Vwcztcbn0pKCk7XG4iXX0=
@@ -12,7 +12,31 @@ import type { OrgRole } from './common.js';
12
12
  * global `isSuperAdmin` flag, not a per-org permission; and `requireStepUp`
13
13
  * (MFA) / `requireFeature` (plan entitlements) remain orthogonal gates.
14
14
  */
15
- export type Permission = 'pipelines:read' | 'pipelines:write' | 'pipelines:publish' | 'templates:read' | 'templates:write' | 'templates:publish' | 'plugins:read' | 'plugins:write' | 'plugins:publish' | 'plugins:install' | 'plugin_installs:manage' | 'publishers:manage' | 'plugins:moderate' | 'publishers:verify' | 'oncall:manage' | 'compliance:read' | 'compliance:write' | 'members:manage' | 'roles:manage' | 'invitations:manage' | 'service_accounts:manage' | 'dashboards:read' | 'dashboards:write' | 'observability:read' | 'observability:write' | 'logs:export' | 'reports:read' | 'reports:rollup' | 'reports:author' | 'reports:share' | 'messages:read' | 'messages:write' | 'billing:read' | 'billing:manage' | 'quotas:read' | 'registry:read' | 'registry:write' | 'org:settings' | 'org:idp' | 'org:kms' | 'org:impersonation';
15
+ export type Permission = 'pipelines:read' | 'pipelines:write' | 'pipelines:publish' | 'pipeline_registry:write' | 'templates:read' | 'templates:write' | 'templates:publish' | 'plugins:read' | 'plugins:write' | 'plugins:publish' | 'plugins:install' | 'plugin_installs:manage' | 'publishers:manage' | 'plugins:moderate' | 'publishers:verify' | 'platform:read' | 'orgs:read' | 'billing:operate' | 'observability_console:open' | 'database_console:open' | 'objectstore_console:open' | 'oncall:manage' | 'support_cases:write' | 'support_content:write' | 'subscriptions:read' | 'subscriptions:manage' | 'orgs:manage' | 'quotas:manage' | 'plugin_queue:manage' | 'compliance:read' | 'compliance:write' | 'members:manage' | 'roles:manage' | 'invitations:manage' | 'service_accounts:manage' | 'dashboards:read' | 'dashboards:write' | 'observability:read' | 'observability:write' | 'logs:export' | 'audit:read' | 'reports:read' | 'reports:rollup' | 'reports:write' | 'reports:publish' | 'messages:read' | 'messages:write' | 'billing:read' | 'billing:manage' | 'quotas:read' | 'impersonation:open' | 'impersonation:approve' | 'team_access:open' | 'registry:read' | 'registry:write' | 'registry:purge' | 'org_settings:write' | 'org_idp:write' | 'org_kms:write' | 'org_impersonation:write';
16
+ /**
17
+ * The CLOSED set of actions a permission id may end in — the second half of the
18
+ * `resource:action` strategy the docs describe.
19
+ *
20
+ * It is closed for one concrete reason: `isMutationPermission` (frontend
21
+ * `lib/auth-helpers.ts`) classifies read vs write BY SUFFIX, and that is what
22
+ * disables every write affordance during a read-only impersonation session. A
23
+ * noun-shaped action (the former `org:settings` and `consoles:datastore`) cannot be classified
24
+ * by name, so each one had to be hand-listed — and a permission added without
25
+ * remembering that list renders an enabled control that dead-ends on a 403.
26
+ *
27
+ * Reads are `:read` and `:rollup` (a read-VISIBILITY scope). Everything else is
28
+ * a write. The five domain verbs are kept because each names an action with no
29
+ * synonym in this vocabulary — `:export` is egress rather than mutation,
30
+ * `:install` is consumption rather than authoring, `:moderate` and `:verify` are
31
+ * ecosystem decisions, and `:operate` moves another tenant's money.
32
+ *
33
+ * `PERMISSION_ID_SHAPE` and this list are asserted over the whole catalog in
34
+ * api-core's `test/permissions.test.ts`, so adding an off-strategy id fails
35
+ * there rather than at a 403.
36
+ */
37
+ export declare const PERMISSION_ACTIONS: readonly string[];
38
+ /** `resource:action`, where resource is `snake_case` and action is in {@link PERMISSION_ACTIONS}. */
39
+ export declare const PERMISSION_ID_SHAPE: RegExp;
16
40
  /** All valid permissions (order determines display order in the picker). */
17
41
  export declare const ALL_PERMISSIONS: readonly Permission[];
18
42
  /**
@@ -147,14 +171,190 @@ export declare const ROLE_PERMISSIONS: Record<OrgRole, readonly Permission[]>;
147
171
  * tenant-facing: no `registry:*`, no `members:manage`. The Role grants the
148
172
  * coarse `member` label and never sets `isSuperAdmin`.
149
173
  */
174
+ /**
175
+ * The PLATFORM OPERATOR bundle — the third rung of the system org's ladder.
176
+ *
177
+ * Before it the ladder had two rungs and a gap: Ecosystem Manager (plugin
178
+ * moderation) and Super Admin (implicit-all, which also carries impersonation,
179
+ * pgAdmin and mongo-express). Anything in between — read the platform settings,
180
+ * run a promotion campaign, check whether the pager is configured — had to be
181
+ * done by making somebody a full superadmin.
182
+ *
183
+ * It is a BUNDLE rather than a grantable list because `SYSTEM_ORG_ONLY_PERMISSIONS`
184
+ * can never be carried by a custom Role in any org: without a seeded bundle
185
+ * these permissions had no grant path at all and were superadmin-only in
186
+ * practice, which is exactly the thing they were added to avoid.
187
+ *
188
+ * Deliberately NOT carrying `plugins:moderate` / `publishers:verify`: ecosystem
189
+ * moderation is a different job with its own Role, and a reviewer of plugins
190
+ * should not acquire the ability to move another tenant's money by being handed
191
+ * the operator Role.
192
+ */
193
+ export declare const PLATFORM_OPERATOR_PERMISSIONS: readonly Permission[];
194
+ /**
195
+ * ACCOUNT MANAGER — the commercial relationship with a customer, as opposed to
196
+ * running the deployment.
197
+ *
198
+ * Split from {@link PLATFORM_OPERATOR_PERMISSIONS} rather than piled onto it,
199
+ * because the two jobs diverge at exactly the permissions added alongside this
200
+ * bundle. `billing:operate` MOVED here from the operator bundle for that reason:
201
+ * minting a discount token is a commercial act, not an operational one, and the
202
+ * person who restarts a stuck build queue has no reason to hold it.
203
+ *
204
+ * The destructive half of the catalogue lives here — `orgs:manage` can DELETE
205
+ * an organisation and `subscriptions:manage` can cancel its subscription — so
206
+ * this is deliberately the smaller, more rarely-assigned of the two.
207
+ */
208
+ export declare const ACCOUNT_MANAGER_PERMISSIONS: readonly Permission[];
209
+ /**
210
+ * CONSOLE ADMINISTRATOR — the operator consoles, as a Role.
211
+ *
212
+ * WHY THIS EXISTS even though each console permission is grantable by hand: with
213
+ * no seeded Role, the only path to pgAdmin was a superadmin composing a custom
214
+ * Role for it, and the observed outcome of asking people to do that is that they
215
+ * reach for the superadmin FLAG instead — the exact failure these permissions
216
+ * were added to remove. A named Role also makes "who can open a data shell?" one
217
+ * query instead of an audit of every custom Role.
218
+ *
219
+ * It carries all three consoles, which is the whole job for the person who holds
220
+ * it. ONE CONSEQUENCE WORTH KNOWING: `database_console:open` and
221
+ * `objectstore_console:open` are the two halves of the audit tamper-evidence
222
+ * design — a Mongo shell can truncate a hash chain's tail, and the object store
223
+ * holds the signed heads that would expose the truncation — so a holder of this
224
+ * Role can do both. The permissions stay SEPARATE for exactly that reason: a
225
+ * deployment that wants them held by different people composes a narrower Role
226
+ * by hand (a superadmin may include any system-org-only permission in a Role
227
+ * authored in the system org) and assigns this one to nobody.
228
+ */
229
+ /**
230
+ * PLATFORM OBSERVER — look, don't touch. The ladder's missing bottom rung.
231
+ *
232
+ * Every other system-org bundle grants a write. The one that does not —
233
+ * Console Administrator — grants a read that IS a database shell. So somebody
234
+ * who should see the deployment and change nothing (a new operator shadowing, an
235
+ * auditor, an on-call engineer during a handover) had two options: Super Admin,
236
+ * or nothing. The usual outcome of a choice like that is the flag.
237
+ *
238
+ * Strictly read-only by construction: every permission here ends `:read`, which
239
+ * `isMutationPermission` classifies as a read, so the dashboard disables every
240
+ * write affordance for a holder rather than offering controls that 403.
241
+ *
242
+ * NOT `audit:read`. It would be the obvious addition and it is the wrong one:
243
+ * `listAuditEvents` pins every non-superadmin to their OWN org, so a system-org
244
+ * observer holding it would see the system org's audit trail and nothing else —
245
+ * an affordance that looks like fleet-wide audit access and is not. Reading
246
+ * another tenant's trail is deliberately the flag's alone.
247
+ */
248
+ export declare const PLATFORM_OBSERVER_PERMISSIONS: readonly Permission[];
249
+ export declare const CONSOLE_ADMIN_PERMISSIONS: readonly Permission[];
250
+ /**
251
+ * REGISTRY OPERATOR — moves container images around, and nothing else.
252
+ *
253
+ * THE GAP IT FILLS. Promoting an image — copying a built tag from one repository
254
+ * to the one a release resolves — is a job somebody does, and until now the only
255
+ * identity that could do it was a superadmin. `registry:write` has no other
256
+ * carrier, and a system-org-only permission with no seeded carrier is
257
+ * superadmin-only in practice (the `platform:read` failure, pinned by the
258
+ * "at least one seeded carrier" assertion in api-core's `test/permissions.test.ts`).
259
+ * So splitting `registry:purge` out of `registry:write` is only half the change:
260
+ * the additive half needs a Role or the split buys nothing.
261
+ *
262
+ * WHY IT IS NOT PART OF PLATFORM OPERATOR. That Role runs the deployment and
263
+ * already reads the registry. Promoting an image is a release decision, not an
264
+ * operational side effect, and rolling it into the Role everyone on call holds
265
+ * would mean the pager rotation can retag a release at 3am. The two Roles
266
+ * compose instead — a member may hold any number, and permissions are the union.
267
+ *
268
+ * WHY IT IS ONLY TWO PERMISSIONS. Deliberately nothing else: no `platform:read`,
269
+ * no console, no `orgs:read`. `canReadRepo`/`canWriteRepo` confine a
270
+ * non-superadmin system-org holder to `system/*`, `library/*` and `public/*` —
271
+ * this deployment's own base and plugin images — so the Role cannot reach a
272
+ * tenant's repositories at all, and a holder who also needs the operator views
273
+ * gets the operator Role too. It does NOT carry `registry:purge`, which is in
274
+ * {@link SUPERADMIN_ONLY_PERMISSIONS} and in no bundle by design: an image
275
+ * promoter has no business deleting the image a tenant's pipeline resolves.
276
+ */
277
+ export declare const REGISTRY_OPERATOR_PERMISSIONS: readonly Permission[];
278
+ /**
279
+ * SUPPORT AGENT — the support desk, and nothing else.
280
+ *
281
+ * Deliberately carries no `platform:read`, no console and no billing write: an
282
+ * agent answers cases and writes the canned replies. `subscriptions:read` is
283
+ * here because the first question on any case is what the customer is entitled
284
+ * to, and without it an agent would have to ask someone else to look.
285
+ */
286
+ export declare const SUPPORT_AGENT_PERMISSIONS: readonly Permission[];
287
+ /**
288
+ * SUPPORT LEAD — the support desk, plus the authority to look.
289
+ *
290
+ * THE GAP IT FILLS. `impersonation:open` is system-org-only, and a system-org-only
291
+ * permission with no seeded carrier is superadmin-only in practice — the
292
+ * invariant api-core's `test/permissions.test.ts` asserts, and the reason
293
+ * `platform:read` shipped unusable. Without this Role, splitting impersonation
294
+ * out of the flag would change nothing: the only way to let somebody view a
295
+ * customer's account would still be to make them a full Super Admin, handing
296
+ * over `/admin/users/:id/grants`, the single-person MFA reset, the database
297
+ * console and `registry:purge` at the same time.
298
+ *
299
+ * WHY IT IS THE SUPPORT DESK AND NOT THE OPERATOR. The question impersonation
300
+ * answers is "what is this customer actually seeing?", which is a support
301
+ * question. Platform Operator runs the deployment and is held by whoever is on
302
+ * call; adding this to it would hand every rota member the ability to become any
303
+ * customer's user at 3am. Support Agent's bundle plus the one permission is the
304
+ * narrower, more honest shape — and a lead who also runs the deployment holds
305
+ * both Roles.
306
+ *
307
+ * WHAT IT STILL CANNOT DO. Emergency access: `breakglass` bypasses tenant
308
+ * consent and stays on the flag, approved by a second Super Admin. And the
309
+ * tenant can refuse — `impersonation:open` is permission to ASK.
310
+ */
311
+ export declare const SUPPORT_LEAD_PERMISSIONS: readonly Permission[];
312
+ /**
313
+ * STARTING POINTS for a custom Role in a tenant org — templates, not Roles.
314
+ *
315
+ * THE GAP THEY FILL. An org seeds exactly TWO Roles — Member and Admin — and
316
+ * Admin is every org-assignable permission. So promoting anyone past "author and
317
+ * read" hands over the whole remainder at once: `org_kms:write`,
318
+ * `org_idp:write`, `org_impersonation:write`, `billing:manage`, `roles:manage`
319
+ * and `audit:read` among them. The product's answer is "author a custom Role",
320
+ * and the safety is already right (`sanitizePermissions` bounds a custom Role by
321
+ * its author's own ceiling). What was missing is the starting point.
322
+ *
323
+ * The exact sizes of that cliff are asserted in `test/permissions.test.ts`
324
+ * rather than written here. This paragraph used to carry them inline — "three
325
+ * Roles: Member (15), Team Lead (17) and Admin (37)" — and every one of those
326
+ * numbers went stale: `Team Lead` stopped being seeded when it became the first
327
+ * template below, and the two bundles have grown since. A count nothing checks
328
+ * is a claim that decays, and this one was the stated rationale for the feature.
329
+ *
330
+ * WHY TEMPLATES AND NOT SEEDED ROLES. A seeded built-in is `system: true` and
331
+ * therefore immutable, so seeding these would put four undeletable rows in every
332
+ * org whether it wants them. A template leaves no trace until someone uses it,
333
+ * and what it produces is an ordinary custom Role the org fully owns — editable,
334
+ * deletable, and bounded by the author's ceiling like any other.
335
+ *
336
+ * WHAT THEY DELIBERATELY EXCLUDE. `roles:manage` is in none of them. It is the
337
+ * one permission that compounds — the holder can mint further Roles, up to their
338
+ * own ceiling — so acquiring it should stay a conscious act rather than a side
339
+ * effect of picking a preset. Every permission here is org-assignable, so a
340
+ * template is valid in any org and `sanitizePermissions` accepts it.
341
+ */
342
+ export interface RoleTemplate {
343
+ id: string;
344
+ name: string;
345
+ /** What the job is — shown next to the template, and a sensible Role description. */
346
+ description: string;
347
+ permissions: readonly Permission[];
348
+ }
349
+ export declare const ROLE_TEMPLATES: readonly RoleTemplate[];
150
350
  export declare const ECOSYSTEM_MANAGER_PERMISSIONS: readonly Permission[];
151
351
  /**
152
352
  * Seed bundle for the built-in "Team Lead" Role — the person who reports UPWARD.
153
353
  *
154
354
  * Exists because the target user for stakeholder reports is a lead, not an admin,
155
- * and granting `reports:author` only through the admin bundle would have forced
355
+ * and granting `reports:write` only through the admin bundle would have forced
156
356
  * every reporting lead to be an org admin (members:manage, roles:manage,
157
- * org:settings, billing) to send their manager a weekly summary.
357
+ * org_settings:write, billing) to send their manager a weekly summary.
158
358
  *
159
359
  * Deliberately NOT included: `reports:rollup`. Rolling a report up over descendant
160
360
  * teams is downward visibility across the org tree, which is a granted capability
@@ -163,6 +363,36 @@ export declare const ECOSYSTEM_MANAGER_PERMISSIONS: readonly Permission[];
163
363
  * and never sets `isSuperAdmin`.
164
364
  */
165
365
  export declare const TEAM_LEAD_PERMISSIONS: readonly Permission[];
366
+ /**
367
+ * Seed bundle for the built-in "Pipeline Automation" Role — what the org's
368
+ * unscoped stored credential (the `platform-automation` service account that
369
+ * `pipeline-manager infra store-token` provisions) needs, and nothing more.
370
+ *
371
+ * Derived by tracing every call made with that key, not by guessing:
372
+ * - `pipelines:read` — the CodeBuild synth (and `pipeline deploy --store-tokens`)
373
+ * fetching the pipeline it builds (`GET /pipelines/:id`);
374
+ * - `plugins:read` — plugin resolution at synth/deploy and in the plugin-lookup
375
+ * Lambda (`POST /plugins/lookup`), and the run-time vulnerability check step
376
+ * (`POST /plugins/runtime-check`).
377
+ *
378
+ * What it deliberately does NOT carry, and where that work went:
379
+ * - registry writes (`pipeline_registry:write`) — the synth registers its step
380
+ * manifest with the separate `pipeline-register` key (Pipeline Registration);
381
+ * - image pushes and pulls — CodeBuild authenticates to the image registry with
382
+ * the `registry-push` scoped key, never this one;
383
+ * - reporting writes — the events Lambda and step report uploads use the
384
+ * `reporting:ingest` scoped key.
385
+ *
386
+ * It used to be the org ADMIN Role, so a leaked synth credential could rewrite
387
+ * every pipeline, Role and member of the org.
388
+ */
389
+ export declare const PIPELINE_AUTOMATION_PERMISSIONS: readonly Permission[];
390
+ /**
391
+ * Seed bundle for the built-in "Pipeline Registration" Role, held by the
392
+ * `pipeline-register` service account: `POST`/`DELETE /pipelines/registry` for
393
+ * its own org and nothing else — not even a read.
394
+ */
395
+ export declare const PIPELINE_REGISTRATION_PERMISSIONS: readonly Permission[];
166
396
  /**
167
397
  * Resolve a user's effective org permissions from the Roles assigned to them.
168
398
  *
@@ -198,3 +428,114 @@ export declare function resolveUserPermissions(assignedPermissions?: readonly st
198
428
  export declare function confinePermissionsToOrg<P extends string>(permissions: readonly P[], activeOrgIsSystemOrg: boolean): P[];
199
429
  /** Whether a resolved permission list grants `permission` (superadmin ⇒ always). */
200
430
  export declare function hasPermission(granted: readonly string[] | null | undefined, permission: Permission, isSuperAdmin?: boolean): boolean;
431
+ /**
432
+ * The named permission bundles a built-in Role may carry, and the Role NAME each
433
+ * one is seeded under. One table, because the three facts about a job Role —
434
+ * its id, its permissions and its display name — were previously three
435
+ * independent lists in three places, and nothing held them together.
436
+ *
437
+ * WHAT WENT WRONG WITHOUT IT. The platform resolved a bundle through a
438
+ * nine-branch `if` chain with a fall-through to the coarse `grantsRole` bundle.
439
+ * Every job Role grants `member`, so a bundle added to the id list WITHOUT its
440
+ * branch did not fail — it silently seeded the plain Member bundle, and the
441
+ * startup backfill then re-synced it to that wrong value on every boot. The
442
+ * Role existed, was assignable from the staffing panel, and granted fifteen
443
+ * tenant permissions instead of its job. Nothing anywhere exercised the
444
+ * resolver per bundle.
445
+ *
446
+ * Keyed access plus `satisfies` makes a missing entry a COMPILE error, and an
447
+ * extra one too — in both directions, with no runtime check to forget.
448
+ *
449
+ * The NAME lives here for the same reason. The platform seeded names from its
450
+ * own constants while the frontend's staffing roster hard-coded its own copy,
451
+ * each pinned by a test against itself — so renaming a Role passed both suites
452
+ * and the roster silently rendered "Role not found", which is the grant path for
453
+ * that Role's permissions disappearing. Both sides read this now.
454
+ */
455
+ export declare const SEED_BUNDLES: {
456
+ readonly ecosystem_manager: {
457
+ readonly name: 'Ecosystem Manager';
458
+ readonly permissions: readonly Permission[];
459
+ };
460
+ readonly team_lead: {
461
+ readonly name: 'Team Lead';
462
+ readonly permissions: readonly Permission[];
463
+ };
464
+ readonly platform_observer: {
465
+ readonly name: 'Platform Observer';
466
+ readonly permissions: readonly Permission[];
467
+ };
468
+ readonly platform_operator: {
469
+ readonly name: 'Platform Operator';
470
+ readonly permissions: readonly Permission[];
471
+ };
472
+ readonly account_manager: {
473
+ readonly name: 'Account Manager';
474
+ readonly permissions: readonly Permission[];
475
+ };
476
+ readonly console_admin: {
477
+ readonly name: 'Console Administrator';
478
+ readonly permissions: readonly Permission[];
479
+ };
480
+ readonly support_agent: {
481
+ readonly name: 'Support Agent';
482
+ readonly permissions: readonly Permission[];
483
+ };
484
+ readonly support_lead: {
485
+ readonly name: 'Support Lead';
486
+ readonly permissions: readonly Permission[];
487
+ };
488
+ readonly registry_operator: {
489
+ readonly name: 'Registry Operator';
490
+ readonly permissions: readonly Permission[];
491
+ };
492
+ readonly pipeline_automation: {
493
+ readonly name: 'Pipeline Automation';
494
+ readonly permissions: readonly Permission[];
495
+ };
496
+ readonly pipeline_registration: {
497
+ readonly name: 'Pipeline Registration';
498
+ readonly permissions: readonly Permission[];
499
+ };
500
+ };
501
+ /** Every seed-bundle id. The platform's `Role.seedBundle` enum is this list. */
502
+ export declare const SEED_BUNDLE_IDS: Array<keyof typeof SEED_BUNDLES>;
503
+ export type SeedBundleId = keyof typeof SEED_BUNDLES;
504
+ /**
505
+ * The SYSTEM ORG's job Roles, in staffing order — the subset of
506
+ * {@link SEED_BUNDLES} seeded there, which is every bundle except `team_lead`
507
+ * (a tenant job, and a template rather than a seeded Role since it stopped
508
+ * being structural).
509
+ *
510
+ * `ecosystem_manager` IS one of them; it is listed here even though its roster
511
+ * lives on the Ecosystem console rather than the staffing panel, because what
512
+ * this list answers is "which Roles does the system org seed", not "which panel
513
+ * renders them".
514
+ */
515
+ export declare const SYSTEM_ORG_JOB_BUNDLES: readonly SeedBundleId[];
516
+ /**
517
+ * The MACHINE Roles every org seeds — the subset of {@link SEED_BUNDLES} held by
518
+ * the service accounts `pipeline-manager infra store-token` provisions.
519
+ *
520
+ * Seeded rather than offered as a {@link ROLE_TEMPLATES} entry, unlike the
521
+ * tenant job presets, because they are structural: the CLI grants one to the
522
+ * account it creates and the startup backfill moves existing accounts onto it,
523
+ * and both have to find it in EVERY org by a stable identity. A template leaves
524
+ * nothing to find until somebody instantiates it.
525
+ */
526
+ export declare const ORG_AUTOMATION_BUNDLES: readonly SeedBundleId[];
527
+ /**
528
+ * The service accounts `pipeline-manager infra store-token` provisions, keyed by
529
+ * account name, and the built-in Role each holds — `null` for an account whose
530
+ * key carries a capability SCOPE (a `TokenScope`) and so needs no Role at all.
531
+ *
532
+ * One table for the CLI (which Role to grant a NEW account) and the platform's
533
+ * startup backfill (which Role to move an EXISTING account onto, off the org
534
+ * admin Role these accounts were once given). A rename here moves both.
535
+ */
536
+ export declare const AUTOMATION_ACCOUNT_BUNDLES: {
537
+ readonly 'platform-automation': 'pipeline_automation';
538
+ readonly 'pipeline-register': 'pipeline_registration';
539
+ readonly 'reporting-ingest': null;
540
+ readonly 'registry-push': null;
541
+ };