@pipeline-builder/api-core 5.2.11 → 5.2.12

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 (41) hide show
  1. package/lib/helpers/org-hierarchy-http.d.ts +3 -2
  2. package/lib/helpers/org-hierarchy-http.js +11 -5
  3. package/lib/middleware/index.d.ts +1 -1
  4. package/lib/middleware/index.js +2 -2
  5. package/lib/middleware/step-up.d.ts +4 -3
  6. package/lib/middleware/step-up.js +1 -1
  7. package/lib/services/index.d.ts +2 -2
  8. package/lib/services/index.js +2 -2
  9. package/lib/services/quota.d.ts +1 -2
  10. package/lib/services/quota.js +1 -1
  11. package/lib/services/version-vuln-policy.d.ts +1 -3
  12. package/lib/services/version-vuln-policy.js +2 -3
  13. package/lib/types/common.d.ts +13 -22
  14. package/lib/types/common.js +44 -5
  15. package/lib/types/ecosystem-notifications.d.ts +215 -24
  16. package/lib/types/ecosystem-notifications.js +18 -9
  17. package/lib/types/ecosystem.d.ts +1 -0
  18. package/lib/types/ecosystem.js +33 -23
  19. package/lib/types/feature-flags.d.ts +11 -4
  20. package/lib/types/feature-flags.js +51 -11
  21. package/lib/types/index.d.ts +1 -1
  22. package/lib/types/index.js +2 -2
  23. package/lib/types/permissions.d.ts +353 -22
  24. package/lib/types/permissions.js +257 -128
  25. package/lib/types/plugin-catalog.d.ts +25 -1
  26. package/lib/types/plugin-catalog.js +21 -2
  27. package/lib/types/quota-tiers.d.ts +6 -24
  28. package/lib/types/quota-tiers.js +6 -28
  29. package/lib/types/remote-audit-actions.d.ts +1 -1
  30. package/lib/types/remote-audit-actions.js +10 -1
  31. package/lib/types/tier-limits.d.ts +19 -0
  32. package/lib/types/tier-limits.js +27 -1
  33. package/lib/types/usage-projection.d.ts +0 -16
  34. package/lib/types/usage-projection.js +1 -20
  35. package/lib/types/wire-vocabulary.d.ts +81 -2
  36. package/lib/types/wire-vocabulary.js +89 -3
  37. package/lib/validation/index.d.ts +1 -1
  38. package/lib/validation/index.js +2 -2
  39. package/lib/validation/plugin-spec-schema.d.ts +0 -9
  40. package/lib/validation/plugin-spec-schema.js +2 -11
  41. package/package.json +8 -1
@@ -42,8 +42,32 @@ export type MetadataSources = Partial<Record<PluginCatalogField, MetadataSource>
42
42
  * deprecate, yank, delete) is driven only by the Toolchain console, never the
43
43
  * generic plugin routes. Here (dependency-free) so the browser shares the list.
44
44
  */
45
- export declare const MANAGED_TOOLCHAIN_PLUGINS: readonly ['pipeline-bootstrap', 'cdk-synth'];
45
+ export declare const MANAGED_TOOLCHAIN: {
46
+ readonly bootstrap: 'pipeline-bootstrap';
47
+ readonly synth: 'cdk-synth';
48
+ };
49
+ /** Both halves' names (every consumer that needs one half by role reads {@link MANAGED_TOOLCHAIN}). */
50
+ export declare const MANAGED_TOOLCHAIN_PLUGINS: readonly ["pipeline-bootstrap", "cdk-synth"];
46
51
  export type ManagedToolchainPlugin = typeof MANAGED_TOOLCHAIN_PLUGINS[number];
52
+ /** How a managed toolchain release was chosen for a caller (never anything about any other org). */
53
+ export declare const TOOLCHAIN_RESOLVED_VIA: readonly ['pin', 'org-default', 'canary', 'default'];
54
+ export type ToolchainResolvedVia = typeof TOOLCHAIN_RESOLVED_VIA[number];
55
+ /**
56
+ * Where a managed toolchain release sits, as the Toolchain console and an org's
57
+ * eligible-release selector both report it (the selector never shows
58
+ * `deprecated` / `yanked`: those cannot be newly chosen).
59
+ */
60
+ export declare const TOOLCHAIN_RELEASE_STATUSES: readonly ['default', 'canary', 'available', 'deprecated', 'yanked'];
61
+ export type ToolchainReleaseStatus = typeof TOOLCHAIN_RELEASE_STATUSES[number];
62
+ /**
63
+ * Where a managed build image's `toolchain` is persisted: its plugin row's
64
+ * `metadata`, one flat `toolchain.<field>` key per tool (the column is a flat
65
+ * string map, and a `BuildImage` spec may carry no step `metadata` of its own,
66
+ * so the keys never collide). Written at upload by `toolchainMetadata`, read by
67
+ * `toolchainFromMetadata` (validation/plugin-spec-schema.ts) and by
68
+ * pipeline-core's lookup envelope.
69
+ */
70
+ export declare const TOOLCHAIN_METADATA_PREFIX = "toolchain.";
47
71
  /** Whether `name` is one of the reserved {@link MANAGED_TOOLCHAIN_PLUGINS} (exact, case-insensitive). */
48
72
  export declare function isManagedToolchainPlugin(name: string | null | undefined): name is ManagedToolchainPlugin;
49
73
  /**
@@ -48,7 +48,26 @@ export const METADATA_SOURCES = ['spec', 'readme', 'dockerfile', 'derived', 'use
48
48
  * deprecate, yank, delete) is driven only by the Toolchain console, never the
49
49
  * generic plugin routes. Here (dependency-free) so the browser shares the list.
50
50
  */
51
- export const MANAGED_TOOLCHAIN_PLUGINS = ['pipeline-bootstrap', 'cdk-synth'];
51
+ export const MANAGED_TOOLCHAIN = { bootstrap: 'pipeline-bootstrap', synth: 'cdk-synth' };
52
+ /** Both halves' names (every consumer that needs one half by role reads {@link MANAGED_TOOLCHAIN}). */
53
+ export const MANAGED_TOOLCHAIN_PLUGINS = [MANAGED_TOOLCHAIN.bootstrap, MANAGED_TOOLCHAIN.synth];
54
+ /** How a managed toolchain release was chosen for a caller (never anything about any other org). */
55
+ export const TOOLCHAIN_RESOLVED_VIA = ['pin', 'org-default', 'canary', 'default'];
56
+ /**
57
+ * Where a managed toolchain release sits, as the Toolchain console and an org's
58
+ * eligible-release selector both report it (the selector never shows
59
+ * `deprecated` / `yanked`: those cannot be newly chosen).
60
+ */
61
+ export const TOOLCHAIN_RELEASE_STATUSES = ['default', 'canary', 'available', 'deprecated', 'yanked'];
62
+ /**
63
+ * Where a managed build image's `toolchain` is persisted: its plugin row's
64
+ * `metadata`, one flat `toolchain.<field>` key per tool (the column is a flat
65
+ * string map, and a `BuildImage` spec may carry no step `metadata` of its own,
66
+ * so the keys never collide). Written at upload by `toolchainMetadata`, read by
67
+ * `toolchainFromMetadata` (validation/plugin-spec-schema.ts) and by
68
+ * pipeline-core's lookup envelope.
69
+ */
70
+ export const TOOLCHAIN_METADATA_PREFIX = 'toolchain.';
52
71
  /** Whether `name` is one of the reserved {@link MANAGED_TOOLCHAIN_PLUGINS} (exact, case-insensitive). */
53
72
  export function isManagedToolchainPlugin(name) {
54
73
  if (typeof name !== 'string')
@@ -98,4 +117,4 @@ export function toolchainReleasePin(props) {
98
117
  export const BUILD_IMAGE_STEP_KEY = 'build-image';
99
118
  export const BUILD_IMAGE_MANIFEST_STAGE = '(toolchain)';
100
119
  export const BUILD_IMAGE_MANIFEST_ACTION = 'build-image';
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWNhdGFsb2cuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9wbHVnaW4tY2F0YWxvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7R0FNRztBQUVILDBCQUEwQjtBQUMxQixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUM7QUFDdEMscUNBQXFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQztBQUMzQyxxQ0FBcUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBQzNDLG9EQUFvRDtBQUNwRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7QUFDdEMsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxDQUFDO0FBQzVDLG9DQUFvQztBQUNwQyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2pELHNDQUFzQztBQUN0QyxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3BELG1DQUFtQztBQUNuQyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBRW5DLDZHQUE2RztBQUM3RyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRztJQUMvQixVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVTtJQUMzRCxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxJQUFJO0NBQ25ELENBQUM7QUFHWCxvRUFBb0U7QUFDcEUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUc7SUFDbkMsYUFBYSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTO0lBQzFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsa0JB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YSxDQUFDO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFBsdWdpbiBjYXRhbG9nIHZvY2FidWxhcnk6IHRoZSBkZXNjcmlwdGl2ZSAoZWRpdGFibGUpIGZpZWxkcyBvZiBhIHBsdWdpblxuICogdmVyc2lvbiwgdGhlIGNhdGVnb3J5IGlkcywgdGhlIHBlci1maWVsZCBwcm92ZW5hbmNlIHZhbHVlcyBhbmQgdGhlIHNpemVcbiAqIGxpbWl0cy4gRGVwZW5kZW5jeS1mcmVlIHNvIHRoZSBicm93c2VyIGltcG9ydHMgaXQgdGhyb3VnaCB0aGVcbiAqIGBAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZS9wbHVnaW4tY2F0YWxvZ2Agc3VicGF0aDsgdGhlIFpvZCB2YWxpZGF0b3JzIGJ1aWx0XG4gKiBvbiBpdCBsaXZlIGluIGB2YWxpZGF0aW9uL3BsdWdpbi1jYXRhbG9nLW1ldGFkYXRhLnRzYC5cbiAqL1xuXG4vKiogQ2FyZCBvbmUtbGluZXIgY2FwLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9TVU1NQVJZX01BWCA9IDE2MDtcbi8qKiBgZGVzY3JpcHRpb25gIGNhcCwgY2hhcmFjdGVycy4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fREVTQ1JJUFRJT05fTUFYID0gMjAwMDtcbi8qKiBgZGlzcGxheU5hbWVgIGNhcCwgY2hhcmFjdGVycy4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fRElTUExBWV9OQU1FX01BWCA9IDEwMDtcbi8qKiBNYXgga2V5d29yZHMsIGFuZCBtYXggY2hhcmFjdGVycyBwZXIga2V5d29yZC4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fS0VZV09SRFNfTUFYID0gMTA7XG5leHBvcnQgY29uc3QgUExVR0lOX0tFWVdPUkRfTUFYX0xFTkdUSCA9IDMyO1xuLyoqIFJFQURNRS5tZCBjYXAsIGJ5dGVzIChVVEYtOCkuICovXG5leHBvcnQgY29uc3QgUExVR0lOX1JFQURNRV9NQVhfQllURVMgPSA2NCAqIDEwMjQ7XG4vKiogYGNoYW5nZWxvZ2AgY2FwLCBieXRlcyAoVVRGLTgpLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9DSEFOR0VMT0dfTUFYX0JZVEVTID0gMzIgKiAxMDI0O1xuLyoqIFByb2plY3QgVVJMIGNhcCwgY2hhcmFjdGVycy4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fVVJMX01BWCA9IDIwNDg7XG5cbi8qKiBDYW5vbmljYWwgcGx1Z2luIGNhdGVnb3JpZXMgKHRoZSBkaXJlY3RvcnkncyBjYXRlZ29yeSBncmlkLCBgcGx1Z2luLXNwZWMueWFtbGAsIGByZXBvcnQtc2NoZW1hLmpzb25gKS4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fQ0FURUdPUklFUyA9IFtcbiAgJ2xhbmd1YWdlJywgJ3NlY3VyaXR5JywgJ3F1YWxpdHknLCAnbW9uaXRvcmluZycsICdhcnRpZmFjdCcsXG4gICdkZXBsb3knLCAnaW5mcmFzdHJ1Y3R1cmUnLCAndGVzdGluZycsICdub3RpZmljYXRpb24nLCAnYWknLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFBsdWdpbkNhdGFsb2dDYXRlZ29yeSA9IHR5cGVvZiBQTFVHSU5fQ0FURUdPUklFU1tudW1iZXJdO1xuXG4vKiogRXZlcnkgZGVzY3JpcHRpdmUgKGVkaXRhYmxlKSBjYXRhbG9nIGZpZWxkLCBpbiBkaXNwbGF5IG9yZGVyLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9DQVRBTE9HX0ZJRUxEUyA9IFtcbiAgJ2Rpc3BsYXlOYW1lJywgJ3N1bW1hcnknLCAnZGVzY3JpcHRpb24nLCAnY2F0ZWdvcnknLCAna2V5d29yZHMnLCAnbGljZW5zZScsXG4gICdob21lcGFnZVVybCcsICdzb3VyY2VVcmwnLCAnZG9jdW1lbnRhdGlvblVybCcsICdpY29uJywgJ2NoYW5nZWxvZycsICdyZWFkbWUnLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFBsdWdpbkNhdGFsb2dGaWVsZCA9IHR5cGVvZiBQTFVHSU5fQ0FUQUxPR19GSUVMRFNbbnVtYmVyXTtcblxuLyoqIFRoZSBsaW5rIGZpZWxkcyDigJQgYSB1c2VyLWVkaXRlZCBsaW5rIGlzIGhpZ2hsaWdodGVkIGluIHJldmlldy4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fQ0FUQUxPR19MSU5LX0ZJRUxEUzogUmVhZG9ubHlBcnJheTxQbHVnaW5DYXRhbG9nRmllbGQ+ID0gWydob21lcGFnZVVybCcsICdzb3VyY2VVcmwnLCAnZG9jdW1lbnRhdGlvblVybCddO1xuXG4vKiogV2hlcmUgYSBjYXRhbG9nIGZpZWxkJ3MgdmFsdWUgY2FtZSBmcm9tIChzdG9yZWQgcGVyIHZlcnNpb24gaW4gYG1ldGFkYXRhX3NvdXJjZXNgOyBgdXNlcmAgPSBlZGl0ZWQgYnkgYSBwZXJzb24pLiAqL1xuZXhwb3J0IGNvbnN0IE1FVEFEQVRBX1NPVVJDRVMgPSBbJ3NwZWMnLCAncmVhZG1lJywgJ2RvY2tlcmZpbGUnLCAnZGVyaXZlZCcsICd1c2VyJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBNZXRhZGF0YVNvdXJjZSA9IHR5cGVvZiBNRVRBREFUQV9TT1VSQ0VTW251bWJlcl07XG4vKiogUGVyLWZpZWxkIHByb3ZlbmFuY2Ugb2YgYSB2ZXJzaW9uJ3MgY2F0YWxvZyBtZXRhZGF0YS4gKi9cbmV4cG9ydCB0eXBlIE1ldGFkYXRhU291cmNlcyA9IFBhcnRpYWw8UmVjb3JkPFBsdWdpbkNhdGFsb2dGaWVsZCwgTWV0YWRhdGFTb3VyY2U+PjtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1hbmFnZWQgdG9vbGNoYWluIG5hbWVzIChkb2NzL3BsYW5zL2Jvb3RzdHJhcC1pbWFnZS12ZXJzaW9uaW5nLm1kIMKnMSwgRDUpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFRoZSBtYW5hZ2VkIHRvb2xjaGFpbiBwbHVnaW5zLiBgcGlwZWxpbmUtYm9vdHN0cmFwYCAodGhlIENvZGVCdWlsZCBpbWFnZSB0aGVcbiAqIHN5bnRoIGFuZCBzZWxmLW11dGF0aW9uIHJ1biBvbikgYW5kIGBjZGstc3ludGhgICh0aGUgc3ludGggc3RlcCkgYXJlIE9ORVxuICogcmVsZWFzZSwgcHVibGlzaGVkIGJ5IHRoZSBzeXN0ZW0gb3JnLiBUaGVpciBuYW1lcyBhcmUgcmVzZXJ2ZWQ6IG9ubHkgdGhlXG4gKiBzeXN0ZW0gb3JnIGNyZWF0ZXMgcm93cyB3aXRoIHRoZW0sIHRoZXkgYXJlIG5ldmVyIGxpc3RlZCBpbiB0aGUgZWNvc3lzdGVtLFxuICogYW4gdXBsb2FkIG5ldmVyIHByb21vdGVzIG9yIG92ZXJ3cml0ZXMgdGhlbSwgYW5kIHRoZWlyIGxpZmVjeWNsZSAoZGVmYXVsdCxcbiAqIGRlcHJlY2F0ZSwgeWFuaywgZGVsZXRlKSBpcyBkcml2ZW4gb25seSBieSB0aGUgVG9vbGNoYWluIGNvbnNvbGUsIG5ldmVyIHRoZVxuICogZ2VuZXJpYyBwbHVnaW4gcm91dGVzLiBIZXJlIChkZXBlbmRlbmN5LWZyZWUpIHNvIHRoZSBicm93c2VyIHNoYXJlcyB0aGUgbGlzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BTkFHRURfVE9PTENIQUlOX1BMVUdJTlMgPSBbJ3BpcGVsaW5lLWJvb3RzdHJhcCcsICdjZGstc3ludGgnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIE1hbmFnZWRUb29sY2hhaW5QbHVnaW4gPSB0eXBlb2YgTUFOQUdFRF9UT09MQ0hBSU5fUExVR0lOU1tudW1iZXJdO1xuXG4vKiogV2hldGhlciBgbmFtZWAgaXMgb25lIG9mIHRoZSByZXNlcnZlZCB7QGxpbmsgTUFOQUdFRF9UT09MQ0hBSU5fUExVR0lOU30gKGV4YWN0LCBjYXNlLWluc2Vuc2l0aXZlKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01hbmFnZWRUb29sY2hhaW5QbHVnaW4obmFtZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IG5hbWUgaXMgTWFuYWdlZFRvb2xjaGFpblBsdWdpbiB7XG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIChNQU5BR0VEX1RPT0xDSEFJTl9QTFVHSU5TIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyhuYW1lLnRyaW0oKS50b0xvd2VyQ2FzZSgpKTtcbn1cblxuLyoqXG4gKiBUaGUgbWFuYWdlZCB0b29sY2hhaW4gbmFtZSBhIHBsdWdpbiBSRUZFUkVOQ0UgcmVzb2x2ZXMsIG9yIG51bGw6IHRoZVxuICogcmVmZXJlbmNlJ3MgYGZpbHRlci5uYW1lYCB3aW5zIG92ZXIgaXRzIGBuYW1lYCAoYXMgaW4gcGlwZWxpbmUtY29yZSdzXG4gKiBgcGx1Z2luTG9va3VwRmlsdGVyYCksIHNvIGB7IG5hbWU6ICdCdWlsZFN5bnRoJywgZmlsdGVyOiB7IG5hbWU6ICdjZGstc3ludGgnIH0gfWBcbiAqIGlzIGEgbWFuYWdlZCBgY2RrLXN5bnRoYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hbmFnZWRUb29sY2hhaW5SZWZOYW1lKHJlZjogeyBuYW1lPzogdW5rbm93bjsgZmlsdGVyPzogdW5rbm93biB9IHwgbnVsbCB8IHVuZGVmaW5lZCk6IE1hbmFnZWRUb29sY2hhaW5QbHVnaW4gfCBudWxsIHtcbiAgaWYgKCFyZWYpIHJldHVybiBudWxsO1xuICBjb25zdCBmaWx0ZXJOYW1lID0gcmVmLmZpbHRlciAmJiB0eXBlb2YgcmVmLmZpbHRlciA9PT0gJ29iamVjdCcgPyAocmVmLmZpbHRlciBhcyB7IG5hbWU/OiB1bmtub3duIH0pLm5hbWUgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IG5hbWUgPSB0eXBlb2YgZmlsdGVyTmFtZSA9PT0gJ3N0cmluZycgJiYgZmlsdGVyTmFtZSAhPT0gJycgPyBmaWx0ZXJOYW1lIDogcmVmLm5hbWU7XG4gIHJldHVybiB0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgJiYgaXNNYW5hZ2VkVG9vbGNoYWluUGx1Z2luKG5hbWUpID8gbmFtZS50cmltKCkudG9Mb3dlckNhc2UoKSBhcyBNYW5hZ2VkVG9vbGNoYWluUGx1Z2luIDogbnVsbDtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGEgbWFuYWdlZCByZWZlcmVuY2UncyBmaWx0ZXIgcGlucyBpdHMgb3duIHZlcnNpb24gKGV4YWN0IG9yIHJhbmdlKSBvclxuICogcm93IGlkLiBSZWZ1c2VkOiBhIG1hbmFnZWQgaGFsZiBpcyBwaW5uZWQgb25seSBhcyBhIHdob2xlIHJlbGVhc2VcbiAqIChgdG9vbGNoYWluLnJlbGVhc2VgLCBUT09MQ0hBSU5fUElOX1ZJQV9SRUxFQVNFKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hbmFnZWRSZWZQaW5zVmVyc2lvbihmaWx0ZXI6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKCFmaWx0ZXIgfHwgdHlwZW9mIGZpbHRlciAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgeyB2ZXJzaW9uLCBpZCB9ID0gZmlsdGVyIGFzIHsgdmVyc2lvbj86IHVua25vd247IGlkPzogdW5rbm93biB9O1xuICByZXR1cm4gKHR5cGVvZiB2ZXJzaW9uID09PSAnc3RyaW5nJyAmJiB2ZXJzaW9uLnRyaW0oKSAhPT0gJycpIHx8IGlkICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKiBBIHBpcGVsaW5lJ3MgYHRvb2xjaGFpbi5yZWxlYXNlYCBwaW4gKGl0cyBwcm9wcyksIHdoZW4gaXQgY2FycmllcyBvbmUuICovXG5leHBvcnQgZnVuY3Rpb24gdG9vbGNoYWluUmVsZWFzZVBpbihwcm9wczogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHRvb2xjaGFpbiA9IHByb3BzICYmIHR5cGVvZiBwcm9wcyA9PT0gJ29iamVjdCcgPyAocHJvcHMgYXMgeyB0b29sY2hhaW4/OiB1bmtub3duIH0pLnRvb2xjaGFpbiA6IHVuZGVmaW5lZDtcbiAgY29uc3QgcmVsZWFzZSA9IHRvb2xjaGFpbiAmJiB0eXBlb2YgdG9vbGNoYWluID09PSAnb2JqZWN0JyA/ICh0b29sY2hhaW4gYXMgeyByZWxlYXNlPzogdW5rbm93biB9KS5yZWxlYXNlIDogdW5kZWZpbmVkO1xuICByZXR1cm4gdHlwZW9mIHJlbGVhc2UgPT09ICdzdHJpbmcnICYmIHJlbGVhc2UudHJpbSgpICE9PSAnJyA/IHJlbGVhc2UudHJpbSgpIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFdoZXJlIGEgcGlwZWxpbmUncyBCVUlMRCBJTUFHRSAodGhlIHRvb2xjaGFpbiByZWxlYXNlJ3MgYHBpcGVsaW5lLWJvb3RzdHJhcGBcbiAqIGhhbGYpIGlzIHJlY29yZGVkIGluIGl0cyBkZXBsb3llZCBzdGVwIG1hbmlmZXN0IChkb2NzL3BsYW5zL1xuICogYm9vdHN0cmFwLWltYWdlLXZlcnNpb25pbmcubWQgwqc0KS4gVGhlIGJvb3RzdHJhcCBpcyBub3QgYSBzdGVwLCBzbyBpdHMgZW50cnlcbiAqIGlzIGEgbm9uLXN0ZXAgcm93OiBgc3RlcF9rZXlgIGlzIHtAbGluayBCVUlMRF9JTUFHRV9TVEVQX0tFWX0gKHRoZSBrZXkgaXRzXG4gKiBsb29rdXAgd2FybmluZ3MgYXJlIHJlY29yZGVkIHVuZGVyIHRvbykgYW5kIGl0cyAoc3RhZ2UsIGFjdGlvbikgYXJlIHRoZXNlXG4gKiBzZW50aW5lbHMuIFRoZSBzdGFnZSBuYW1lIGhvbGRzIGNoYXJhY3RlcnMgQ29kZVBpcGVsaW5lIG5ldmVyIGFsbG93cyBpbiBhXG4gKiBzdGFnZSBuYW1lLCBzbyBldmVudCBpbmdlc3QncyAocGlwZWxpbmUsIHN0YWdlLCBhY3Rpb24pIGpvaW4gY2FuIG5ldmVyIG1hdGNoXG4gKiBpdCB0byBhIHJlYWwgYWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgQlVJTERfSU1BR0VfU1RFUF9LRVkgPSAnYnVpbGQtaW1hZ2UnO1xuZXhwb3J0IGNvbnN0IEJVSUxEX0lNQUdFX01BTklGRVNUX1NUQUdFID0gJyh0b29sY2hhaW4pJztcbmV4cG9ydCBjb25zdCBCVUlMRF9JTUFHRV9NQU5JRkVTVF9BQ1RJT04gPSAnYnVpbGQtaW1hZ2UnO1xuIl19
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWNhdGFsb2cuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9wbHVnaW4tY2F0YWxvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7R0FNRztBQUVILDBCQUEwQjtBQUMxQixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUM7QUFDdEMscUNBQXFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQztBQUMzQyxxQ0FBcUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBQzNDLG9EQUFvRDtBQUNwRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7QUFDdEMsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxDQUFDO0FBQzVDLG9DQUFvQztBQUNwQyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2pELHNDQUFzQztBQUN0QyxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3BELG1DQUFtQztBQUNuQyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBRW5DLDZHQUE2RztBQUM3RyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRztJQUMvQixVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVTtJQUMzRCxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxJQUFJO0NBQ25ELENBQUM7QUFHWCxvRUFBb0U7QUFDcEUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUc7SUFDbkMsYUFBYSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTO0lBQzFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsa0JB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S0FBaUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoSCxNQUFNLE9BQU8sR0FBRyxTQUFTLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBRSxTQUFtQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3RILE9BQU8sT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzNGLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxhQUFhLENBQUM7QUFDbEQsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsYUFBYSxDQUFDO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFBsdWdpbiBjYXRhbG9nIHZvY2FidWxhcnk6IHRoZSBkZXNjcmlwdGl2ZSAoZWRpdGFibGUpIGZpZWxkcyBvZiBhIHBsdWdpblxuICogdmVyc2lvbiwgdGhlIGNhdGVnb3J5IGlkcywgdGhlIHBlci1maWVsZCBwcm92ZW5hbmNlIHZhbHVlcyBhbmQgdGhlIHNpemVcbiAqIGxpbWl0cy4gRGVwZW5kZW5jeS1mcmVlIHNvIHRoZSBicm93c2VyIGltcG9ydHMgaXQgdGhyb3VnaCB0aGVcbiAqIGBAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZS9wbHVnaW4tY2F0YWxvZ2Agc3VicGF0aDsgdGhlIFpvZCB2YWxpZGF0b3JzIGJ1aWx0XG4gKiBvbiBpdCBsaXZlIGluIGB2YWxpZGF0aW9uL3BsdWdpbi1jYXRhbG9nLW1ldGFkYXRhLnRzYC5cbiAqL1xuXG4vKiogQ2FyZCBvbmUtbGluZXIgY2FwLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9TVU1NQVJZX01BWCA9IDE2MDtcbi8qKiBgZGVzY3JpcHRpb25gIGNhcCwgY2hhcmFjdGVycy4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fREVTQ1JJUFRJT05fTUFYID0gMjAwMDtcbi8qKiBgZGlzcGxheU5hbWVgIGNhcCwgY2hhcmFjdGVycy4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fRElTUExBWV9OQU1FX01BWCA9IDEwMDtcbi8qKiBNYXgga2V5d29yZHMsIGFuZCBtYXggY2hhcmFjdGVycyBwZXIga2V5d29yZC4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fS0VZV09SRFNfTUFYID0gMTA7XG5leHBvcnQgY29uc3QgUExVR0lOX0tFWVdPUkRfTUFYX0xFTkdUSCA9IDMyO1xuLyoqIFJFQURNRS5tZCBjYXAsIGJ5dGVzIChVVEYtOCkuICovXG5leHBvcnQgY29uc3QgUExVR0lOX1JFQURNRV9NQVhfQllURVMgPSA2NCAqIDEwMjQ7XG4vKiogYGNoYW5nZWxvZ2AgY2FwLCBieXRlcyAoVVRGLTgpLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9DSEFOR0VMT0dfTUFYX0JZVEVTID0gMzIgKiAxMDI0O1xuLyoqIFByb2plY3QgVVJMIGNhcCwgY2hhcmFjdGVycy4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fVVJMX01BWCA9IDIwNDg7XG5cbi8qKiBDYW5vbmljYWwgcGx1Z2luIGNhdGVnb3JpZXMgKHRoZSBkaXJlY3RvcnkncyBjYXRlZ29yeSBncmlkLCBgcGx1Z2luLXNwZWMueWFtbGAsIGByZXBvcnQtc2NoZW1hLmpzb25gKS4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fQ0FURUdPUklFUyA9IFtcbiAgJ2xhbmd1YWdlJywgJ3NlY3VyaXR5JywgJ3F1YWxpdHknLCAnbW9uaXRvcmluZycsICdhcnRpZmFjdCcsXG4gICdkZXBsb3knLCAnaW5mcmFzdHJ1Y3R1cmUnLCAndGVzdGluZycsICdub3RpZmljYXRpb24nLCAnYWknLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFBsdWdpbkNhdGFsb2dDYXRlZ29yeSA9IHR5cGVvZiBQTFVHSU5fQ0FURUdPUklFU1tudW1iZXJdO1xuXG4vKiogRXZlcnkgZGVzY3JpcHRpdmUgKGVkaXRhYmxlKSBjYXRhbG9nIGZpZWxkLCBpbiBkaXNwbGF5IG9yZGVyLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9DQVRBTE9HX0ZJRUxEUyA9IFtcbiAgJ2Rpc3BsYXlOYW1lJywgJ3N1bW1hcnknLCAnZGVzY3JpcHRpb24nLCAnY2F0ZWdvcnknLCAna2V5d29yZHMnLCAnbGljZW5zZScsXG4gICdob21lcGFnZVVybCcsICdzb3VyY2VVcmwnLCAnZG9jdW1lbnRhdGlvblVybCcsICdpY29uJywgJ2NoYW5nZWxvZycsICdyZWFkbWUnLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFBsdWdpbkNhdGFsb2dGaWVsZCA9IHR5cGVvZiBQTFVHSU5fQ0FUQUxPR19GSUVMRFNbbnVtYmVyXTtcblxuLyoqIFRoZSBsaW5rIGZpZWxkcyDigJQgYSB1c2VyLWVkaXRlZCBsaW5rIGlzIGhpZ2hsaWdodGVkIGluIHJldmlldy4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fQ0FUQUxPR19MSU5LX0ZJRUxEUzogUmVhZG9ubHlBcnJheTxQbHVnaW5DYXRhbG9nRmllbGQ+ID0gWydob21lcGFnZVVybCcsICdzb3VyY2VVcmwnLCAnZG9jdW1lbnRhdGlvblVybCddO1xuXG4vKiogV2hlcmUgYSBjYXRhbG9nIGZpZWxkJ3MgdmFsdWUgY2FtZSBmcm9tIChzdG9yZWQgcGVyIHZlcnNpb24gaW4gYG1ldGFkYXRhX3NvdXJjZXNgOyBgdXNlcmAgPSBlZGl0ZWQgYnkgYSBwZXJzb24pLiAqL1xuZXhwb3J0IGNvbnN0IE1FVEFEQVRBX1NPVVJDRVMgPSBbJ3NwZWMnLCAncmVhZG1lJywgJ2RvY2tlcmZpbGUnLCAnZGVyaXZlZCcsICd1c2VyJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBNZXRhZGF0YVNvdXJjZSA9IHR5cGVvZiBNRVRBREFUQV9TT1VSQ0VTW251bWJlcl07XG4vKiogUGVyLWZpZWxkIHByb3ZlbmFuY2Ugb2YgYSB2ZXJzaW9uJ3MgY2F0YWxvZyBtZXRhZGF0YS4gKi9cbmV4cG9ydCB0eXBlIE1ldGFkYXRhU291cmNlcyA9IFBhcnRpYWw8UmVjb3JkPFBsdWdpbkNhdGFsb2dGaWVsZCwgTWV0YWRhdGFTb3VyY2U+PjtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1hbmFnZWQgdG9vbGNoYWluIG5hbWVzIChkb2NzL3BsYW5zL2Jvb3RzdHJhcC1pbWFnZS12ZXJzaW9uaW5nLm1kIMKnMSwgRDUpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFRoZSBtYW5hZ2VkIHRvb2xjaGFpbiBwbHVnaW5zLiBgcGlwZWxpbmUtYm9vdHN0cmFwYCAodGhlIENvZGVCdWlsZCBpbWFnZSB0aGVcbiAqIHN5bnRoIGFuZCBzZWxmLW11dGF0aW9uIHJ1biBvbikgYW5kIGBjZGstc3ludGhgICh0aGUgc3ludGggc3RlcCkgYXJlIE9ORVxuICogcmVsZWFzZSwgcHVibGlzaGVkIGJ5IHRoZSBzeXN0ZW0gb3JnLiBUaGVpciBuYW1lcyBhcmUgcmVzZXJ2ZWQ6IG9ubHkgdGhlXG4gKiBzeXN0ZW0gb3JnIGNyZWF0ZXMgcm93cyB3aXRoIHRoZW0sIHRoZXkgYXJlIG5ldmVyIGxpc3RlZCBpbiB0aGUgZWNvc3lzdGVtLFxuICogYW4gdXBsb2FkIG5ldmVyIHByb21vdGVzIG9yIG92ZXJ3cml0ZXMgdGhlbSwgYW5kIHRoZWlyIGxpZmVjeWNsZSAoZGVmYXVsdCxcbiAqIGRlcHJlY2F0ZSwgeWFuaywgZGVsZXRlKSBpcyBkcml2ZW4gb25seSBieSB0aGUgVG9vbGNoYWluIGNvbnNvbGUsIG5ldmVyIHRoZVxuICogZ2VuZXJpYyBwbHVnaW4gcm91dGVzLiBIZXJlIChkZXBlbmRlbmN5LWZyZWUpIHNvIHRoZSBicm93c2VyIHNoYXJlcyB0aGUgbGlzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BTkFHRURfVE9PTENIQUlOID0geyBib290c3RyYXA6ICdwaXBlbGluZS1ib290c3RyYXAnLCBzeW50aDogJ2Nkay1zeW50aCcgfSBhcyBjb25zdDtcbi8qKiBCb3RoIGhhbHZlcycgbmFtZXMgKGV2ZXJ5IGNvbnN1bWVyIHRoYXQgbmVlZHMgb25lIGhhbGYgYnkgcm9sZSByZWFkcyB7QGxpbmsgTUFOQUdFRF9UT09MQ0hBSU59KS4gKi9cbmV4cG9ydCBjb25zdCBNQU5BR0VEX1RPT0xDSEFJTl9QTFVHSU5TID0gW01BTkFHRURfVE9PTENIQUlOLmJvb3RzdHJhcCwgTUFOQUdFRF9UT09MQ0hBSU4uc3ludGhdIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgTWFuYWdlZFRvb2xjaGFpblBsdWdpbiA9IHR5cGVvZiBNQU5BR0VEX1RPT0xDSEFJTl9QTFVHSU5TW251bWJlcl07XG5cbi8qKiBIb3cgYSBtYW5hZ2VkIHRvb2xjaGFpbiByZWxlYXNlIHdhcyBjaG9zZW4gZm9yIGEgY2FsbGVyIChuZXZlciBhbnl0aGluZyBhYm91dCBhbnkgb3RoZXIgb3JnKS4gKi9cbmV4cG9ydCBjb25zdCBUT09MQ0hBSU5fUkVTT0xWRURfVklBID0gWydwaW4nLCAnb3JnLWRlZmF1bHQnLCAnY2FuYXJ5JywgJ2RlZmF1bHQnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFRvb2xjaGFpblJlc29sdmVkVmlhID0gdHlwZW9mIFRPT0xDSEFJTl9SRVNPTFZFRF9WSUFbbnVtYmVyXTtcblxuLyoqXG4gKiBXaGVyZSBhIG1hbmFnZWQgdG9vbGNoYWluIHJlbGVhc2Ugc2l0cywgYXMgdGhlIFRvb2xjaGFpbiBjb25zb2xlIGFuZCBhbiBvcmcnc1xuICogZWxpZ2libGUtcmVsZWFzZSBzZWxlY3RvciBib3RoIHJlcG9ydCBpdCAodGhlIHNlbGVjdG9yIG5ldmVyIHNob3dzXG4gKiBgZGVwcmVjYXRlZGAgLyBgeWFua2VkYDogdGhvc2UgY2Fubm90IGJlIG5ld2x5IGNob3NlbikuXG4gKi9cbmV4cG9ydCBjb25zdCBUT09MQ0hBSU5fUkVMRUFTRV9TVEFUVVNFUyA9IFsnZGVmYXVsdCcsICdjYW5hcnknLCAnYXZhaWxhYmxlJywgJ2RlcHJlY2F0ZWQnLCAneWFua2VkJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBUb29sY2hhaW5SZWxlYXNlU3RhdHVzID0gdHlwZW9mIFRPT0xDSEFJTl9SRUxFQVNFX1NUQVRVU0VTW251bWJlcl07XG5cbi8qKlxuICogV2hlcmUgYSBtYW5hZ2VkIGJ1aWxkIGltYWdlJ3MgYHRvb2xjaGFpbmAgaXMgcGVyc2lzdGVkOiBpdHMgcGx1Z2luIHJvdydzXG4gKiBgbWV0YWRhdGFgLCBvbmUgZmxhdCBgdG9vbGNoYWluLjxmaWVsZD5gIGtleSBwZXIgdG9vbCAodGhlIGNvbHVtbiBpcyBhIGZsYXRcbiAqIHN0cmluZyBtYXAsIGFuZCBhIGBCdWlsZEltYWdlYCBzcGVjIG1heSBjYXJyeSBubyBzdGVwIGBtZXRhZGF0YWAgb2YgaXRzIG93bixcbiAqIHNvIHRoZSBrZXlzIG5ldmVyIGNvbGxpZGUpLiBXcml0dGVuIGF0IHVwbG9hZCBieSBgdG9vbGNoYWluTWV0YWRhdGFgLCByZWFkIGJ5XG4gKiBgdG9vbGNoYWluRnJvbU1ldGFkYXRhYCAodmFsaWRhdGlvbi9wbHVnaW4tc3BlYy1zY2hlbWEudHMpIGFuZCBieVxuICogcGlwZWxpbmUtY29yZSdzIGxvb2t1cCBlbnZlbG9wZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFRPT0xDSEFJTl9NRVRBREFUQV9QUkVGSVggPSAndG9vbGNoYWluLic7XG5cbi8qKiBXaGV0aGVyIGBuYW1lYCBpcyBvbmUgb2YgdGhlIHJlc2VydmVkIHtAbGluayBNQU5BR0VEX1RPT0xDSEFJTl9QTFVHSU5TfSAoZXhhY3QsIGNhc2UtaW5zZW5zaXRpdmUpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTWFuYWdlZFRvb2xjaGFpblBsdWdpbihuYW1lOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogbmFtZSBpcyBNYW5hZ2VkVG9vbGNoYWluUGx1Z2luIHtcbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gKE1BTkFHRURfVE9PTENIQUlOX1BMVUdJTlMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKG5hbWUudHJpbSgpLnRvTG93ZXJDYXNlKCkpO1xufVxuXG4vKipcbiAqIFRoZSBtYW5hZ2VkIHRvb2xjaGFpbiBuYW1lIGEgcGx1Z2luIFJFRkVSRU5DRSByZXNvbHZlcywgb3IgbnVsbDogdGhlXG4gKiByZWZlcmVuY2UncyBgZmlsdGVyLm5hbWVgIHdpbnMgb3ZlciBpdHMgYG5hbWVgIChhcyBpbiBwaXBlbGluZS1jb3JlJ3NcbiAqIGBwbHVnaW5Mb29rdXBGaWx0ZXJgKSwgc28gYHsgbmFtZTogJ0J1aWxkU3ludGgnLCBmaWx0ZXI6IHsgbmFtZTogJ2Nkay1zeW50aCcgfSB9YFxuICogaXMgYSBtYW5hZ2VkIGBjZGstc3ludGhgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFuYWdlZFRvb2xjaGFpblJlZk5hbWUocmVmOiB7IG5hbWU/OiB1bmtub3duOyBmaWx0ZXI/OiB1bmtub3duIH0gfCBudWxsIHwgdW5kZWZpbmVkKTogTWFuYWdlZFRvb2xjaGFpblBsdWdpbiB8IG51bGwge1xuICBpZiAoIXJlZikgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGZpbHRlck5hbWUgPSByZWYuZmlsdGVyICYmIHR5cGVvZiByZWYuZmlsdGVyID09PSAnb2JqZWN0JyA/IChyZWYuZmlsdGVyIGFzIHsgbmFtZT86IHVua25vd24gfSkubmFtZSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgbmFtZSA9IHR5cGVvZiBmaWx0ZXJOYW1lID09PSAnc3RyaW5nJyAmJiBmaWx0ZXJOYW1lICE9PSAnJyA/IGZpbHRlck5hbWUgOiByZWYubmFtZTtcbiAgcmV0dXJuIHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyAmJiBpc01hbmFnZWRUb29sY2hhaW5QbHVnaW4obmFtZSkgPyBuYW1lLnRyaW0oKS50b0xvd2VyQ2FzZSgpIGFzIE1hbmFnZWRUb29sY2hhaW5QbHVnaW4gOiBudWxsO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgYSBtYW5hZ2VkIHJlZmVyZW5jZSdzIGZpbHRlciBwaW5zIGl0cyBvd24gdmVyc2lvbiAoZXhhY3Qgb3IgcmFuZ2UpIG9yXG4gKiByb3cgaWQuIFJlZnVzZWQ6IGEgbWFuYWdlZCBoYWxmIGlzIHBpbm5lZCBvbmx5IGFzIGEgd2hvbGUgcmVsZWFzZVxuICogKGB0b29sY2hhaW4ucmVsZWFzZWAsIFRPT0xDSEFJTl9QSU5fVklBX1JFTEVBU0UpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFuYWdlZFJlZlBpbnNWZXJzaW9uKGZpbHRlcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoIWZpbHRlciB8fCB0eXBlb2YgZmlsdGVyICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB7IHZlcnNpb24sIGlkIH0gPSBmaWx0ZXIgYXMgeyB2ZXJzaW9uPzogdW5rbm93bjsgaWQ/OiB1bmtub3duIH07XG4gIHJldHVybiAodHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnICYmIHZlcnNpb24udHJpbSgpICE9PSAnJykgfHwgaWQgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqIEEgcGlwZWxpbmUncyBgdG9vbGNoYWluLnJlbGVhc2VgIHBpbiAoaXRzIHByb3BzKSwgd2hlbiBpdCBjYXJyaWVzIG9uZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b29sY2hhaW5SZWxlYXNlUGluKHByb3BzOiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdG9vbGNoYWluID0gcHJvcHMgJiYgdHlwZW9mIHByb3BzID09PSAnb2JqZWN0JyA/IChwcm9wcyBhcyB7IHRvb2xjaGFpbj86IHVua25vd24gfSkudG9vbGNoYWluIDogdW5kZWZpbmVkO1xuICBjb25zdCByZWxlYXNlID0gdG9vbGNoYWluICYmIHR5cGVvZiB0b29sY2hhaW4gPT09ICdvYmplY3QnID8gKHRvb2xjaGFpbiBhcyB7IHJlbGVhc2U/OiB1bmtub3duIH0pLnJlbGVhc2UgOiB1bmRlZmluZWQ7XG4gIHJldHVybiB0eXBlb2YgcmVsZWFzZSA9PT0gJ3N0cmluZycgJiYgcmVsZWFzZS50cmltKCkgIT09ICcnID8gcmVsZWFzZS50cmltKCkgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogV2hlcmUgYSBwaXBlbGluZSdzIEJVSUxEIElNQUdFICh0aGUgdG9vbGNoYWluIHJlbGVhc2UncyBgcGlwZWxpbmUtYm9vdHN0cmFwYFxuICogaGFsZikgaXMgcmVjb3JkZWQgaW4gaXRzIGRlcGxveWVkIHN0ZXAgbWFuaWZlc3QgKGRvY3MvcGxhbnMvXG4gKiBib290c3RyYXAtaW1hZ2UtdmVyc2lvbmluZy5tZCDCpzQpLiBUaGUgYm9vdHN0cmFwIGlzIG5vdCBhIHN0ZXAsIHNvIGl0cyBlbnRyeVxuICogaXMgYSBub24tc3RlcCByb3c6IGBzdGVwX2tleWAgaXMge0BsaW5rIEJVSUxEX0lNQUdFX1NURVBfS0VZfSAodGhlIGtleSBpdHNcbiAqIGxvb2t1cCB3YXJuaW5ncyBhcmUgcmVjb3JkZWQgdW5kZXIgdG9vKSBhbmQgaXRzIChzdGFnZSwgYWN0aW9uKSBhcmUgdGhlc2VcbiAqIHNlbnRpbmVscy4gVGhlIHN0YWdlIG5hbWUgaG9sZHMgY2hhcmFjdGVycyBDb2RlUGlwZWxpbmUgbmV2ZXIgYWxsb3dzIGluIGFcbiAqIHN0YWdlIG5hbWUsIHNvIGV2ZW50IGluZ2VzdCdzIChwaXBlbGluZSwgc3RhZ2UsIGFjdGlvbikgam9pbiBjYW4gbmV2ZXIgbWF0Y2hcbiAqIGl0IHRvIGEgcmVhbCBhY3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBCVUlMRF9JTUFHRV9TVEVQX0tFWSA9ICdidWlsZC1pbWFnZSc7XG5leHBvcnQgY29uc3QgQlVJTERfSU1BR0VfTUFOSUZFU1RfU1RBR0UgPSAnKHRvb2xjaGFpbiknO1xuZXhwb3J0IGNvbnN0IEJVSUxEX0lNQUdFX01BTklGRVNUX0FDVElPTiA9ICdidWlsZC1pbWFnZSc7XG4iXX0=
@@ -4,12 +4,13 @@ import { type QuotaTierLimits } from './tier-limits.js';
4
4
  * The limits shape, the code-default table and the sizing arithmetic live in
5
5
  * `./tier-limits.js` — dependency-free, so the BROWSER imports them
6
6
  * (`@pipeline-builder/api-core/tier-limits`) instead of keeping a hand-synced
7
- * copy. Re-exported here because this is the module every server consumer and
8
- * the package barrel already name; what stays here is everything the env
9
- * touches.
7
+ * copy — and so do the tier-ladder facts the browser also decides with (which
8
+ * tiers may parent a team or buy a seat pack). Re-exported here because this is
9
+ * the module every server consumer and the package barrel already name; what
10
+ * stays here is everything the env touches.
10
11
  */
11
- export { AUTOMATION_CALLS_SIZING, automationCallsFor, DEFAULT_TIER_LIMITS, tierLabel } from './tier-limits.js';
12
- export type { QuotaTierLimits } from './tier-limits.js';
12
+ export { AUTOMATION_CALLS_SIZING, automationCallsFor, DEFAULT_TIER_LIMITS, SEAT_PACK_TIERS, seatRemedy, TEAM_CAPABLE_TIERS, tierAllowsTeams, tierLabel, } from './tier-limits.js';
13
+ export type { QuotaTierLimits, SeatRemedy } from './tier-limits.js';
13
14
  /** Available quota tier identifiers.
14
15
  *
15
16
  * `unlimited` is a special tier: every quota is `-1` (uncapped) and it includes
@@ -58,25 +59,6 @@ export declare const QUOTA_TIERS: Record<QuotaTier, QuotaTierPreset>;
58
59
  * which is the billing-DISABLED default and is never displayed/selectable when
59
60
  * billing is enabled. Kept DRY off `VALID_TIERS` so adding a tier flows through. */
60
61
  export declare const STANDARD_TIERS: readonly QuotaTier[];
61
- /** Tiers that permit the org → team hierarchy (nesting teams under a root). The
62
- * billing-off `unlimited` tier is team-capable (it's the most permissive); the
63
- * entry-level `developer`/`pro` tiers are not. Single source for the parent-
64
- * eligibility + downgrade-overcap checks so they can't drift. */
65
- export declare const TEAM_CAPABLE_TIERS: readonly QuotaTier[];
66
- export declare function tierAllowsTeams(tier: string | undefined | null): boolean;
67
- /** Tiers that may buy extra seats — billing's per-seat `seat` add-on. Seats are
68
- * the Team differentiator, so the single-seat `developer`/`pro` tiers cannot
69
- * stack them and must upgrade instead; `unlimited` has no seat cap at all.
70
- * Single source for the billing catalog and every "out of seats" message. */
71
- export declare const SEAT_PACK_TIERS: readonly QuotaTier[];
72
- /** How an account that has used every seat can get another. */
73
- export type SeatRemedy = 'upgrade' | 'seat_pack';
74
- /**
75
- * The remedy to offer an account at its seat cap, from the ACCOUNT's (root) tier:
76
- * `seat_pack` where seats can be bought, `upgrade` on the single-seat tiers.
77
- * `null` when the tier is unknown or has no cap — say nothing rather than guess.
78
- */
79
- export declare function seatRemedy(tier: string | undefined | null): SeatRemedy | null;
80
62
  /** Whether the billing service is enabled in this deployment (`BILLING_ENABLED`,
81
63
  * opt-out default-on — mirrors the billing/platform configs). With billing OFF
82
64
  * there's no metering/enforcement surface, so the default tier is `unlimited`. */
@@ -6,11 +6,12 @@ import { DEFAULT_TIER_LIMITS, tierLabel } from './tier-limits.js';
6
6
  * The limits shape, the code-default table and the sizing arithmetic live in
7
7
  * `./tier-limits.js` — dependency-free, so the BROWSER imports them
8
8
  * (`@pipeline-builder/api-core/tier-limits`) instead of keeping a hand-synced
9
- * copy. Re-exported here because this is the module every server consumer and
10
- * the package barrel already name; what stays here is everything the env
11
- * touches.
9
+ * copy — and so do the tier-ladder facts the browser also decides with (which
10
+ * tiers may parent a team or buy a seat pack). Re-exported here because this is
11
+ * the module every server consumer and the package barrel already name; what
12
+ * stays here is everything the env touches.
12
13
  */
13
- export { AUTOMATION_CALLS_SIZING, automationCallsFor, DEFAULT_TIER_LIMITS, tierLabel } from './tier-limits.js';
14
+ export { AUTOMATION_CALLS_SIZING, automationCallsFor, DEFAULT_TIER_LIMITS, SEAT_PACK_TIERS, seatRemedy, TEAM_CAPABLE_TIERS, tierAllowsTeams, tierLabel, } from './tier-limits.js';
14
15
  /**
15
16
  * The SOFT band above a quota's cap, per type, in percent of the limit. A type
16
17
  * absent from this map has NO band and stops hard at 100%.
@@ -133,29 +134,6 @@ export const QUOTA_TIERS = Object.fromEntries(VALID_TIERS.map((tier) => [tier, {
133
134
  * which is the billing-DISABLED default and is never displayed/selectable when
134
135
  * billing is enabled. Kept DRY off `VALID_TIERS` so adding a tier flows through. */
135
136
  export const STANDARD_TIERS = VALID_TIERS.filter((t) => t !== 'unlimited');
136
- /** Tiers that permit the org → team hierarchy (nesting teams under a root). The
137
- * billing-off `unlimited` tier is team-capable (it's the most permissive); the
138
- * entry-level `developer`/`pro` tiers are not. Single source for the parent-
139
- * eligibility + downgrade-overcap checks so they can't drift. */
140
- export const TEAM_CAPABLE_TIERS = ['team', 'business', 'enterprise', 'unlimited'];
141
- export function tierAllowsTeams(tier) {
142
- return !!tier && TEAM_CAPABLE_TIERS.includes(tier);
143
- }
144
- /** Tiers that may buy extra seats — billing's per-seat `seat` add-on. Seats are
145
- * the Team differentiator, so the single-seat `developer`/`pro` tiers cannot
146
- * stack them and must upgrade instead; `unlimited` has no seat cap at all.
147
- * Single source for the billing catalog and every "out of seats" message. */
148
- export const SEAT_PACK_TIERS = ['team', 'business', 'enterprise'];
149
- /**
150
- * The remedy to offer an account at its seat cap, from the ACCOUNT's (root) tier:
151
- * `seat_pack` where seats can be bought, `upgrade` on the single-seat tiers.
152
- * `null` when the tier is unknown or has no cap — say nothing rather than guess.
153
- */
154
- export function seatRemedy(tier) {
155
- if (!tier || !isValidTier(tier) || tier === 'unlimited')
156
- return null;
157
- return SEAT_PACK_TIERS.includes(tier) ? 'seat_pack' : 'upgrade';
158
- }
159
137
  /** Whether the billing service is enabled in this deployment (`BILLING_ENABLED`,
160
138
  * opt-out default-on — mirrors the billing/platform configs). With billing OFF
161
139
  * there's no metering/enforcement surface, so the default tier is `unlimited`. */
@@ -222,4 +200,4 @@ export function nextQuotaResetDate(days = QUOTA_RESET_DAYS, now = new Date()) {
222
200
  date.setHours(0, 0, 0, 0);
223
201
  return date;
224
202
  }
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGEtdGllcnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9xdW90YS10aWVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUF3QixNQUFNLGtCQUFrQixDQUFDO0FBRXhGOzs7Ozs7O0dBT0c7QUFDSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFpQi9HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLGVBQWUsR0FBcUM7SUFDeEQsZUFBZSxFQUFFLE1BQU0sQ0FBQyw0QkFBNEIsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMvRSxZQUFZLEVBQUUsTUFBTSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3pFLDRFQUE0RTtJQUM1RSwrRUFBK0U7SUFDL0UsZ0ZBQWdGO0lBQ2hGLDhFQUE4RTtJQUM5RSxrREFBa0Q7Q0FDTixDQUFDO0FBRS9DLGlGQUFpRjtBQUNqRixNQUFNLFVBQVUsYUFBYSxDQUFDLFNBQWlCO0lBQzdDLE9BQU8sZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxTQUFpQixFQUFFLEtBQWEsRUFBRSxRQUFRLEdBQVcsYUFBYSxDQUFDLFNBQVMsQ0FBQztJQUM5RyxJQUFJLEtBQUssSUFB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Q29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBlbnZCb29sLCBlbnZJbnQsIGVudk5hbWVGcmFnbWVudCwgZW52U3RyIH0gZnJvbSAnLi4vdXRpbHMvZW52LmpzJztcbmltcG9ydCB0eXBlIHsgUXVvdGFUeXBlIH0gZnJvbSAnLi9jb21tb24uanMnO1xuaW1wb3J0IHsgREVGQVVMVF9USUVSX0xJTUlUUywgdGllckxhYmVsLCB0eXBlIFF1b3RhVGllckxpbWl0cyB9IGZyb20gJy4vdGllci1saW1pdHMuanMnO1xuXG4vKipcbiAqIFRoZSBsaW1pdHMgc2hhcGUsIHRoZSBjb2RlLWRlZmF1bHQgdGFibGUgYW5kIHRoZSBzaXppbmcgYXJpdGhtZXRpYyBsaXZlIGluXG4gKiBgLi90aWVyLWxpbWl0cy5qc2Ag4oCUIGRlcGVuZGVuY3ktZnJlZSwgc28gdGhlIEJST1dTRVIgaW1wb3J0cyB0aGVtXG4gKiAoYEBwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlL3RpZXItbGltaXRzYCkgaW5zdGVhZCBvZiBrZWVwaW5nIGEgaGFuZC1zeW5jZWRcbiAqIGNvcHkuIFJlLWV4cG9ydGVkIGhlcmUgYmVjYXVzZSB0aGlzIGlzIHRoZSBtb2R1bGUgZXZlcnkgc2VydmVyIGNvbnN1bWVyIGFuZFxuICogdGhlIHBhY2thZ2UgYmFycmVsIGFscmVhZHkgbmFtZTsgd2hhdCBzdGF5cyBoZXJlIGlzIGV2ZXJ5dGhpbmcgdGhlIGVudlxuICogdG91Y2hlcy5cbiAqL1xuZXhwb3J0IHsgQVVUT01BVElPTl9DQUxMU19TSVpJTkcsIGF1dG9tYXRpb25DYWxsc0ZvciwgREVGQVVMVF9USUVSX0xJTUlUUywgdGllckxhYmVsIH0gZnJvbSAnLi90aWVyLWxpbWl0cy5qcyc7XG5leHBvcnQgdHlwZSB7IFF1b3RhVGllckxpbWl0cyB9IGZyb20gJy4vdGllci1saW1pdHMuanMnO1xuXG4vKiogQXZhaWxhYmxlIHF1b3RhIHRpZXIgaWRlbnRpZmllcnMuXG4gKlxuICogYHVubGltaXRlZGAgaXMgYSBzcGVjaWFsIHRpZXI6IGV2ZXJ5IHF1b3RhIGlzIGAtMWAgKHVuY2FwcGVkKSBhbmQgaXQgaW5jbHVkZXNcbiAqIGV2ZXJ5IGZlYXR1cmUvYWRkLW9uIGJ1bmRsZS4gSXQgaXMgdGhlIERFRkFVTFQgd2hlbiBiaWxsaW5nIGlzIGRpc2FibGVkIChub1xuICogbWV0ZXJpbmcvZW5mb3JjZW1lbnQgc3VyZmFjZSBleGlzdHMsIHNvIG5vdGhpbmcgaXMgY2FwcGVkKSwgYW5kIGl0IGlzIE5FVkVSXG4gKiBzaG93biBvciBzZWxlY3RhYmxlIHdoZW4gYmlsbGluZyBpcyBlbmFibGVkIOKAlCBzZWUgYFNUQU5EQVJEX1RJRVJTYC4gKi9cbmV4cG9ydCB0eXBlIFF1b3RhVGllciA9ICdkZXZlbG9wZXInIHwgJ3BybycgfCAndGVhbScgfCAnYnVzaW5lc3MnIHwgJ2VudGVycHJpc2UnIHwgJ3VubGltaXRlZCc7XG5cbi8qKiBGdWxsIHByZXNldCBmb3IgYSBzaW5nbGUgdGllciAobGFiZWwgKyBsaW1pdHMpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdW90YVRpZXJQcmVzZXQge1xuICBsYWJlbDogc3RyaW5nO1xuICBsaW1pdHM6IFF1b3RhVGllckxpbWl0cztcbn1cblxuLyoqXG4gKiBUaGUgU09GVCBiYW5kIGFib3ZlIGEgcXVvdGEncyBjYXAsIHBlciB0eXBlLCBpbiBwZXJjZW50IG9mIHRoZSBsaW1pdC4gQSB0eXBlXG4gKiBhYnNlbnQgZnJvbSB0aGlzIG1hcCBoYXMgTk8gYmFuZCBhbmQgc3RvcHMgaGFyZCBhdCAxMDAlLlxuICpcbiAqIEF0IDEwMCUgdGhlIGFjY291bnQgZ2V0cyB0aGUgXCJyZWFjaGVkXCIgbm90aWNlIGFuZCBrZWVwcyBydW5uaW5nOyB0aGUgcmVmdXNhbFxuICogc3RhcnRzIG9ubHkgcGFzdCBgbGltaXQgw5cgKDEwMCArIHBjdCkgLyAxMDBgLiBSZWFkcyBzdGlsbCBSRVBPUlQgdGhlIG5vbWluYWxcbiAqIGxpbWl0LCBzbyB1c2FnZSBzaG93cyBhYm92ZSAxMDAlIHdoaWxlIGluc2lkZSB0aGUgYmFuZC5cbiAqXG4gKiBUd28gdHlwZXMgcXVhbGlmeSwgZm9yIHRoZSBzYW1lIHJlYXNvbiBzdGF0ZWQgdHdvIHdheXMg4oCUIGEgaGFyZCBzdG9wIGV4YWN0bHlcbiAqIGF0IDEwMCUgaXMgd29yc2UgdGhhbiBhIHNob3J0IG92ZXJydW4gd2hlbiB0aGUgY2FsbGVyIGNhbm5vdCBzaW1wbHkgd2FpdDpcbiAqXG4gKiAtIGBhdXRvbWF0aW9uQ2FsbHNgIChgUVVPVEFfQVVUT01BVElPTl9HUkFDRV9QQ1RgKTogdGhlIGNhbGxlciBpcyBhIHBpcGVsaW5lXG4gKiAgIG1pZC1kZXBsb3ksIG5vdCBhIHBlcnNvbiwgYW5kIHRoZSBjb3VudGVyIHdvdWxkIHN0YXkgZnVsbCBmb3IgdGhlIHJlc3Qgb2ZcbiAqICAgdGhlIHBlcmlvZC5cbiAqIC0gYHN0b3JhZ2VCeXRlc2AgKGBRVU9UQV9TVE9SQUdFX0dSQUNFX1BDVGApOiBzdG9yYWdlIGlzIGEgU1RPQ0sg4oCUIGl0IGRvZXNcbiAqICAgbm90IHJlc2V0LCBzbyB3aXRob3V0IGEgYmFuZCBhIGRvd25ncmFkZSBvciBhIGNhbmNlbGxlZCBwYWNrIGZsaXBzIGFuXG4gKiAgIGFjY291bnQgZnJvbSB3b3JraW5nIHRvIHJlZnVzZWQgd2l0aCBubyBidWZmZXIgYXQgYWxsLCBhbmQgdGhlIHJlbWVkeVxuICogICAocHJ1bmUsIG9yIGJ1eSBjYXBhY2l0eSkgdGFrZXMgdGltZSB0aGUgYmFuZCBpcyB0aGVyZSB0byBwcm92aWRlLiBOb3RlIHRoZVxuICogICBiYW5kIG9uIGEgc3RvY2sgaXMgYSBPTkUtVElNRSBidWZmZXIgcmF0aGVyIHRoYW4gYSBwZXItcGVyaW9kIG9uZTsgdGhhdCBpc1xuICogICBpdHMgcHVycG9zZSBoZXJlLCBub3QgYSBsaW1pdGF0aW9uIG9mIGl0LlxuICpcbiAqIEV2ZXJ5IG90aGVyIHR5cGUgc3RheXMgaGFyZC4gVGhpcyB3YXMgYSBoYXJkY29kZWQgYHF1b3RhVHlwZSAhPT1cbiAqICdhdXRvbWF0aW9uQ2FsbHMnYCBjb21wYXJpc29uLCB3aGljaCBpcyB3aHkgc3RvcmFnZSBoYWQgbm90aGluZzogdGhlXG4gKiBtZWNoYW5pc20gZXhpc3RlZCBhbmQgb25seSB0aGUgcHJlZGljYXRlIGV4Y2x1ZGVkIGl0LlxuICovXG5jb25zdCBRVU9UQV9HUkFDRV9QQ1Q6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIG51bWJlcj4+ID0ge1xuICBhdXRvbWF0aW9uQ2FsbHM6IGVudkludCgnUVVPVEFfQVVUT01BVElPTl9HUkFDRV9QQ1QnLCAxMCwgeyBtaW46IDAsIG1heDogMTAwIH0pLFxuICBzdG9yYWdlQnl0ZXM6IGVudkludCgnUVVPVEFfU1RPUkFHRV9HUkFDRV9QQ1QnLCAxMCwgeyBtaW46IDAsIG1heDogMTAwIH0pLFxuICAvLyBgc2F0aXNmaWVzIFBhcnRpYWw84oCmPmAga2VlcHMgQk9USCBwcm9wZXJ0aWVzIHRoaXMgbWFwIG5lZWRzOiB0aGUga2V5cyBhcmVcbiAgLy8gY2hlY2tlZCBhZ2FpbnN0IGBRdW90YVR5cGVgIChhIHR5cG8nZCBgc3RvcmFnZWJ5dGVzYCB3b3VsZCBvdGhlcndpc2UgbGVhdmUgYVxuICAvLyBiYW5kZWQgcXVvdGEgc3RvcHBpbmcgaGFyZCBhdCAxMDAlLCBzaWxlbnRseSksIHdoaWxlIHRoZSBhbm5vdGF0aW9uIGtlZXBzIHRoZVxuICAvLyBzdHJpbmcgaW5kZXggdGhlIGFjY2Vzc29yIGJlbG93IG5lZWRzIGZvciBhbiB1bnRydXN0ZWQgYHF1b3RhVHlwZWAuIFBhcnRpYWxcbiAgLy8gYmVjYXVzZSBhYnNlbmNlIGlzIG1lYW5pbmdmdWwgaGVyZSDigJQgc2VlIGFib3ZlLlxufSBzYXRpc2ZpZXMgUGFydGlhbDxSZWNvcmQ8UXVvdGFUeXBlLCBudW1iZXI+PjtcblxuLyoqIFRoZSBzb2Z0IGJhbmQgZm9yIGBxdW90YVR5cGVgIGluIHBlcmNlbnQsIG9yIDAgZm9yIGEgdHlwZSB0aGF0IHN0b3BzIGhhcmQuICovXG5leHBvcnQgZnVuY3Rpb24gcXVvdGFHcmFjZVBjdChxdW90YVR5cGU6IHN0cmluZyk6IG51bWJlciB7XG4gIHJldHVybiBRVU9UQV9HUkFDRV9QQ1RbcXVvdGFUeXBlXSA/PyAwO1xufVxuXG4vKipcbiAqIFRoZSBsaW1pdCBlbmZvcmNlbWVudCBhY3R1YWxseSBiaW5kcyBvbiBmb3IgYHF1b3RhVHlwZWA6IHRoZSBub21pbmFsIGxpbWl0LFxuICogcGx1cyB0aGUgdHlwZSdzIHtAbGluayBxdW90YUdyYWNlUGN0fSBiYW5kIHdoZXJlIGl0IGhhcyBvbmUuIFVubGltaXRlZCAoLTEpXG4gKiBhbmQgemVybyAoXCJub25lXCIpIGxpbWl0cyBhcmUgcmV0dXJuZWQgdW5jaGFuZ2VkIOKAlCBhIDAgY2FwIGlzIGEgZGVsaWJlcmF0ZVxuICogcmVmdXNhbCwgbm90IGEgYnVkZ2V0IHRvIG92ZXJydW4uXG4gKlxuICoge0BsaW5rIFFVT1RBX0dSQUNFX1BDVH0gZGVjaWRlcyBXSEVUSEVSIGEgdHlwZSBoYXMgYSBiYW5kOyBgZ3JhY2VQY3RgIG9ubHlcbiAqIHNpemVzIGl0LiBTbyBhbiBleHBsaWNpdCBwZXJjZW50YWdlIHBhc3NlZCBmb3IgYW4gdW5iYW5kZWQgdHlwZSBzdGlsbCB5aWVsZHNcbiAqIHRoZSBub21pbmFsIGxpbWl0LCByYXRoZXIgdGhhbiBxdWlldGx5IGdyYW50aW5nIGEgYmFuZCB0aGUgdHlwZSBpcyBub3QgbWVhbnRcbiAqIHRvIGhhdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmZvcmNlZFF1b3RhTGltaXQocXVvdGFUeXBlOiBzdHJpbmcsIGxpbWl0OiBudW1iZXIsIGdyYWNlUGN0OiBudW1iZXIgPSBxdW90YUdyYWNlUGN0KHF1b3RhVHlwZSkpOiBudW1iZXIge1xuICBpZiAobGltaXQgPD0gMCB8fCBncmFjZVBjdCA8PSAwIHx8IHF1b3RhR3JhY2VQY3QocXVvdGFUeXBlKSA8PSAwKSByZXR1cm4gbGltaXQ7XG4gIHJldHVybiBNYXRoLmZsb29yKChsaW1pdCAqICgxMDAgKyBncmFjZVBjdCkpIC8gMTAwKTtcbn1cblxuLyoqXG4gKiBSZWFkIGEgdGllciBMSU1JVCBlbnYgdmFyLiBgLTFgID0gdW5saW1pdGVkOyBhbnl0aGluZyBiZWxvdyB0aGF0IGlzIG5vbnNlbnNlXG4gKiAoYSBgLTVgIGxpbWl0IHdvdWxkIHNoaXAgYSBicm9rZW4gZmluaXRlIGNhcCksIHNvIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGNvZGVcbiAqIGRlZmF1bHQgcmF0aGVyIHRoYW4gY2xhbXBpbmcgdXAgdG8gYC0xYC4gVGhlIHBhcnNpbmcgaXRzZWxmIGlzIGFwaS1jb3JlJ3NcbiAqIHNoYXJlZCBgZW52SW50YCDigJQgc3RyaWN0IGFib3V0IGRlY2ltYWxzL2dhcmJhZ2Ug4oCUIG5vdCBhIGxvY2FsIHJlLWRlcml2YXRpb24uXG4gKi9cbmZ1bmN0aW9uIHRpZXJMaW1pdEVudihuYW1lOiBzdHJpbmcsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBuID0gZW52SW50KG5hbWUsIGZhbGxiYWNrKTtcbiAgcmV0dXJuIG4gPCAtMSA/IGZhbGxiYWNrIDogbjtcbn1cblxuLyoqXG4gKiBQZXItdGllciBsaW1pdHMsIGVhY2ggb3ZlcnJpZGFibGUgdmlhIGBRVU9UQV9USUVSXzxUSUVSPl88TElNSVQ+YCBlbnYgdmFyc1xuICogKGUuZy4gYFFVT1RBX1RJRVJfUFJPX1BJUEVMSU5FUz0yNTBgLCBgUVVPVEFfVElFUl9ERVZFTE9QRVJfU1RPUkFHRV9CWVRFUz0uLi5gKS5cbiAqIFVuc2V0L2VtcHR5IOKGkiB0aGUgY29kZSBkZWZhdWx0LiBgLTFgID0gdW5saW1pdGVkLiBSZWFkIG9uY2UgYXQgbW9kdWxlIGxvYWQg4oCUXG4gKiBvbiBrOHMgdGhlc2UgZmxvdyBpbiB2aWEgdGhlIGBhcHAtZW52YCBDb25maWdNYXAgKGJ1aWx0IGZyb20gYC5lbnZgKS5cbiAqL1xuZnVuY3Rpb24gdGllckxpbWl0cyh0aWVyOiBRdW90YVRpZXIpOiBRdW90YVRpZXJMaW1pdHMge1xuICAvLyBgdW5saW1pdGVkYCBpcyB1bmNhcHBlZCBCWSBERUZJTklUSU9OOiBFVkVSWSBxdW90YSBpcyAtMSBhbmQgaXQgaXMgTk9UXG4gIC8vIGVudi1vdmVycmlkYWJsZS4gUmVhZGluZyBRVU9UQV9USUVSX1VOTElNSVRFRF8qIGhlcmUgd291bGQgbGV0IGEgc3RyYXkgZW52XG4gIC8vIHZhciBzaWxlbnRseSBjYXAgdGhlIGJpbGxpbmctRElTQUJMRUQgZGVmYXVsdCB0aWVyIOKAlCBzdXJmYWNpbmcgYXMgYSBzcHVyaW91c1xuICAvLyBcInF1b3RhIGV4Y2VlZGVkXCIgb24gYSBkZXBsb3kgdGhhdCBtZXRlcnMgbm90aGluZy4gRGVyaXZlIC0xIGZvciBldmVyeSBmaWVsZFxuICAvLyBmcm9tIHRoZSBsaW1pdHMgc2hhcGUgc28gYSBuZXdseS1hZGRlZCBxdW90YSBpcyB1bmNhcHBlZCBoZXJlIGF1dG9tYXRpY2FsbHkuXG4gIGlmICh0aWVyID09PSAndW5saW1pdGVkJykge1xuICAgIGNvbnN0IHVuY2FwcGVkID0geyAuLi5ERUZBVUxUX1RJRVJfTElNSVRTLnVubGltaXRlZCB9O1xuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh1bmNhcHBlZCkgYXMgKGtleW9mIFF1b3RhVGllckxpbWl0cylbXSkgdW5jYXBwZWRba10gPSAtMTtcbiAgICByZXR1cm4gdW5jYXBwZWQ7XG4gIH1cbiAgY29uc3QgZCA9IERFRkFVTFRfVElFUl9MSU1JVFNbdGllcl07XG4gIGNvbnN0IFQgPSB0aWVyLnRvVXBwZXJDYXNlKCk7XG4gIC8vIEtleWVkIG9mZiB0aGUgbGltaXRzIHRhYmxlIHJhdGhlciB0aGFuIHNldmVudGVlbiBoYW5kLXdyaXR0ZW4gbGluZXMsIHNvIGFcbiAgLy8gbmV3bHktYWRkZWQgbGltaXQgaXMgZW52LW92ZXJyaWRhYmxlIHRoZSBtb21lbnQgaXQgaGFzIGEgZGVmYXVsdCDigJQgdGhlIGhhbmRcbiAgLy8gbGlzdCBtYWRlIHRoYXQgYSBzZWNvbmQgZWRpdCwgaW4gYSBmaWxlIHdoZXJlIGZvcmdldHRpbmcgaXQgeWllbGRzIGEga25vYlxuICAvLyB0aGUgZG9jcyBkZXNjcmliZSBhbmQgdGhlIGNvZGUgaWdub3Jlcy5cbiAgY29uc3Qgb3V0ID0geyAuLi5kIH07XG4gIGZvciAoY29uc3QgZmllbGQgb2YgT2JqZWN0LmtleXMob3V0KSBhcyAoa2V5b2YgUXVvdGFUaWVyTGltaXRzKVtdKSB7XG4gICAgLy8gVGhlIGtub2IgbmFtZXMgYXJlIERFUklWRUQgZnJvbSB0aGUgZmllbGQgbmFtZXMgKGBlbnZOYW1lRnJhZ21lbnRgKSwgd2hpY2hcbiAgICAvLyBpcyB3aHkgYHRlc3QvcXVvdGEtdGllcnMudGVzdC50c2AgcGlucyB0aGUgZnVsbCBzZXQgb2Ygc2V2ZW50ZWVuOiBhIGZpZWxkXG4gICAgLy8gcmVuYW1lIHdvdWxkIG90aGVyd2lzZSBtb3ZlIHNvbWVib2R5J3MgY29uZmlndXJlZCBrbm9iIHdpdGhvdXQgYSB3b3JkLlxuICAgIG91dFtmaWVsZF0gPSB0aWVyTGltaXRFbnYoYFFVT1RBX1RJRVJfJHtUfV8ke2Vudk5hbWVGcmFnbWVudChmaWVsZCl9YCwgZFtmaWVsZF0pO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBBbGwgdmFsaWQgdGllciBuYW1lcyAoaW5jbC4gYHVubGltaXRlZGApLCBpbiBsYWRkZXIgb3JkZXIuIFVzZWQgZm9yIHZhbGlkYXRpb25cbiAqICBvZiBhICpzdG9yZWQqIHRpZXIg4oCUIGB1bmxpbWl0ZWRgIGlzIGEgdmFsaWQgdmFsdWUgZXZlbiB0aG91Z2ggaXQncyBuZXZlclxuICogIG9mZmVyZWQgZm9yIHNhbGUuIERlcml2ZWQgZnJvbSB0aGUgY29kZS1kZWZhdWx0IGxpbWl0cyB0YWJsZSwgd2hpY2ggaXMgdGhlIG9uZVxuICogIHBsYWNlIGEgdGllciBjYW5ub3QgYmUgYWRkZWQgd2l0aG91dCBiZWluZyBnaXZlbiBudW1iZXJzLiAqL1xuZXhwb3J0IGNvbnN0IFZBTElEX1RJRVJTOiByZWFkb25seSBRdW90YVRpZXJbXSA9IE9iamVjdC5rZXlzKERFRkFVTFRfVElFUl9MSU1JVFMpIGFzIFF1b3RhVGllcltdO1xuXG4vKipcbiAqIEV2ZXJ5IHRpZXIncyBwcmVzZXQsIGtleWVkIG9mZiB7QGxpbmsgVkFMSURfVElFUlN9IHJhdGhlciB0aGFuIHdyaXR0ZW4gb3V0XG4gKiB0aWVyIGJ5IHRpZXIg4oCUIGEgdGllciBhZGRlZCB0byB0aGUgbGltaXRzIHRhYmxlIGdldHMgaXRzIHByZXNldCBoZXJlIHdpdGggbm9cbiAqIHNlY29uZCBlZGl0LlxuICpcbiAqIFRoZSBsYWJlbCBkZWZhdWx0cyB0byB7QGxpbmsgdGllckxhYmVsfSBvZiB0aGUga2V5IChcImJ1c2luZXNzXCIg4oaSIFwiQnVzaW5lc3NcIixcbiAqIFwicHJvX3BsdXNcIiDihpIgXCJQcm8gUGx1c1wiKSwgd2hpY2ggaXMgd2hhdCBhbGwgc2l4IHdlcmUgc3BlbGxlZCBhcyBieSBoYW5kLCBhbmRcbiAqIHN0YXlzIG92ZXJyaWRhYmxlIHZpYSBgUVVPVEFfVElFUl88VElFUj5fTEFCRUxgIGZvciBhIGRlcGxveW1lbnQgdGhhdCB3YW50cyBpdHNcbiAqIG93biB3b3JkaW5nIOKAlCBvciBmb3IgYSBrZXkgdGhlIGRlcml2YXRpb24gY2Fubm90IGdldCByaWdodCwgc3VjaCBhcyBhbiBhY3JvbnltLlxuICogRGlzcGxheSBuYW1lIG9ubHk6IGl0IG5ldmVyIGFmZmVjdHMgYSBsaW1pdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFFVT1RBX1RJRVJTOiBSZWNvcmQ8UXVvdGFUaWVyLCBRdW90YVRpZXJQcmVzZXQ+ID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICBWQUxJRF9USUVSUy5tYXAoKHRpZXIpID0+IFt0aWVyLCB7XG4gICAgbGFiZWw6IGVudlN0cihgUVVPVEFfVElFUl8ke3RpZXIudG9VcHBlckNhc2UoKX1fTEFCRUxgLCB0aWVyTGFiZWwodGllcikpLFxuICAgIGxpbWl0czogdGllckxpbWl0cyh0aWVyKSxcbiAgfV0pLFxuKSBhcyBSZWNvcmQ8UXVvdGFUaWVyLCBRdW90YVRpZXJQcmVzZXQ+O1xuXG4vKiogVGhlIHN0YW5kYXJkLCBiaWxsaW5nLXNlbGVjdGFibGUgdGllcnMg4oCUIHRoZSBvbmVzIG9mZmVyZWQgYXMgcHVyY2hhc2FibGUgcGxhbnNcbiAqICBhbmQgc2hvd24gaW4gdGllciBwaWNrZXJzLiBEZXJpdmVkIGFzIFwiZXZlcnkgdmFsaWQgdGllciBleGNlcHQgYHVubGltaXRlZGBcIixcbiAqICB3aGljaCBpcyB0aGUgYmlsbGluZy1ESVNBQkxFRCBkZWZhdWx0IGFuZCBpcyBuZXZlciBkaXNwbGF5ZWQvc2VsZWN0YWJsZSB3aGVuXG4gKiAgYmlsbGluZyBpcyBlbmFibGVkLiBLZXB0IERSWSBvZmYgYFZBTElEX1RJRVJTYCBzbyBhZGRpbmcgYSB0aWVyIGZsb3dzIHRocm91Z2guICovXG5leHBvcnQgY29uc3QgU1RBTkRBUkRfVElFUlM6IHJlYWRvbmx5IFF1b3RhVGllcltdID0gVkFMSURfVElFUlMuZmlsdGVyKCh0KSA9PiB0ICE9PSAndW5saW1pdGVkJyk7XG5cbi8qKiBUaWVycyB0aGF0IHBlcm1pdCB0aGUgb3JnIOKGkiB0ZWFtIGhpZXJhcmNoeSAobmVzdGluZyB0ZWFtcyB1bmRlciBhIHJvb3QpLiBUaGVcbiAqICBiaWxsaW5nLW9mZiBgdW5saW1pdGVkYCB0aWVyIGlzIHRlYW0tY2FwYWJsZSAoaXQncyB0aGUgbW9zdCBwZXJtaXNzaXZlKTsgdGhlXG4gKiAgZW50cnktbGV2ZWwgYGRldmVsb3BlcmAvYHByb2AgdGllcnMgYXJlIG5vdC4gU2luZ2xlIHNvdXJjZSBmb3IgdGhlIHBhcmVudC1cbiAqICBlbGlnaWJpbGl0eSArIGRvd25ncmFkZS1vdmVyY2FwIGNoZWNrcyBzbyB0aGV5IGNhbid0IGRyaWZ0LiAqL1xuZXhwb3J0IGNvbnN0IFRFQU1fQ0FQQUJMRV9USUVSUzogcmVhZG9ubHkgUXVvdGFUaWVyW10gPSBbJ3RlYW0nLCAnYnVzaW5lc3MnLCAnZW50ZXJwcmlzZScsICd1bmxpbWl0ZWQnXTtcbmV4cG9ydCBmdW5jdGlvbiB0aWVyQWxsb3dzVGVhbXModGllcjogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gISF0aWVyICYmIChURUFNX0NBUEFCTEVfVElFUlMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHRpZXIpO1xufVxuXG4vKiogVGllcnMgdGhhdCBtYXkgYnV5IGV4dHJhIHNlYXRzIOKAlCBiaWxsaW5nJ3MgcGVyLXNlYXQgYHNlYXRgIGFkZC1vbi4gU2VhdHMgYXJlXG4gKiAgdGhlIFRlYW0gZGlmZmVyZW50aWF0b3IsIHNvIHRoZSBzaW5nbGUtc2VhdCBgZGV2ZWxvcGVyYC9gcHJvYCB0aWVycyBjYW5ub3RcbiAqICBzdGFjayB0aGVtIGFuZCBtdXN0IHVwZ3JhZGUgaW5zdGVhZDsgYHVubGltaXRlZGAgaGFzIG5vIHNlYXQgY2FwIGF0IGFsbC5cbiAqICBTaW5nbGUgc291cmNlIGZvciB0aGUgYmlsbGluZyBjYXRhbG9nIGFuZCBldmVyeSBcIm91dCBvZiBzZWF0c1wiIG1lc3NhZ2UuICovXG5leHBvcnQgY29uc3QgU0VBVF9QQUNLX1RJRVJTOiByZWFkb25seSBRdW90YVRpZXJbXSA9IFsndGVhbScsICdidXNpbmVzcycsICdlbnRlcnByaXNlJ107XG5cbi8qKiBIb3cgYW4gYWNjb3VudCB0aGF0IGhhcyB1c2VkIGV2ZXJ5IHNlYXQgY2FuIGdldCBhbm90aGVyLiAqL1xuZXhwb3J0IHR5cGUgU2VhdFJlbWVkeSA9ICd1cGdyYWRlJyB8ICdzZWF0X3BhY2snO1xuXG4vKipcbiAqIFRoZSByZW1lZHkgdG8gb2ZmZXIgYW4gYWNjb3VudCBhdCBpdHMgc2VhdCBjYXAsIGZyb20gdGhlIEFDQ09VTlQncyAocm9vdCkgdGllcjpcbiAqIGBzZWF0X3BhY2tgIHdoZXJlIHNlYXRzIGNhbiBiZSBib3VnaHQsIGB1cGdyYWRlYCBvbiB0aGUgc2luZ2xlLXNlYXQgdGllcnMuXG4gKiBgbnVsbGAgd2hlbiB0aGUgdGllciBpcyB1bmtub3duIG9yIGhhcyBubyBjYXAg4oCUIHNheSBub3RoaW5nIHJhdGhlciB0aGFuIGd1ZXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VhdFJlbWVkeSh0aWVyOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogU2VhdFJlbWVkeSB8IG51bGwge1xuICBpZiAoIXRpZXIgfHwgIWlzVmFsaWRUaWVyKHRpZXIpIHx8IHRpZXIgPT09ICd1bmxpbWl0ZWQnKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIChTRUFUX1BBQ0tfVElFUlMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHRpZXIpID8gJ3NlYXRfcGFjaycgOiAndXBncmFkZSc7XG59XG5cbi8qKiBXaGV0aGVyIHRoZSBiaWxsaW5nIHNlcnZpY2UgaXMgZW5hYmxlZCBpbiB0aGlzIGRlcGxveW1lbnQgKGBCSUxMSU5HX0VOQUJMRURgLFxuICogIG9wdC1vdXQgZGVmYXVsdC1vbiDigJQgbWlycm9ycyB0aGUgYmlsbGluZy9wbGF0Zm9ybSBjb25maWdzKS4gV2l0aCBiaWxsaW5nIE9GRlxuICogIHRoZXJlJ3Mgbm8gbWV0ZXJpbmcvZW5mb3JjZW1lbnQgc3VyZmFjZSwgc28gdGhlIGRlZmF1bHQgdGllciBpcyBgdW5saW1pdGVkYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0JpbGxpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZW52Qm9vbCgnQklMTElOR19FTkFCTEVEJywgdHJ1ZSk7XG59XG5cbi8qKlxuICogRGVmYXVsdCB0aWVyIGFzc2lnbmVkIHRvIG5ldyBvcmdhbml6YXRpb25zLlxuICogLSBCaWxsaW5nIERJU0FCTEVEIOKGkiBgdW5saW1pdGVkYCAobm90aGluZyBpcyBtZXRlcmVkLCBzbyBldmVyeXRoaW5nIGlzIHVuY2FwcGVkKS5cbiAqIC0gQmlsbGluZyBFTkFCTEVEICDihpIgYERFRkFVTFRfUVVPVEFfVElFUmAgaWYgaXQncyBhIHZhbGlkIHN0YW5kYXJkIHRpZXIsIGVsc2UgYGRldmVsb3BlcmAuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RJRVI6IFF1b3RhVGllciA9ICFpc0JpbGxpbmdFbmFibGVkKClcbiAgPyAndW5saW1pdGVkJ1xuICA6IChpc1ZhbGlkVGllcihwcm9jZXNzLmVudi5ERUZBVUxUX1FVT1RBX1RJRVIgPz8gJycpICYmIHByb2Nlc3MuZW52LkRFRkFVTFRfUVVPVEFfVElFUiAhPT0gJ3VubGltaXRlZCdcbiAgICA/IChwcm9jZXNzLmVudi5ERUZBVUxUX1FVT1RBX1RJRVIgYXMgUXVvdGFUaWVyKVxuICAgIDogJ2RldmVsb3BlcicpO1xuXG4vKiogQ2hlY2sgd2hldGhlciBhIHN0cmluZyBpcyBhIHZhbGlkIFF1b3RhVGllci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVGllcih2YWx1ZTogc3RyaW5nKTogdmFsdWUgaXMgUXVvdGFUaWVyIHtcbiAgLy8gVXNlIHRoZSBleHBsaWNpdCB0dXBsZSwgbm90IGB2YWx1ZSBpbiBRVU9UQV9USUVSU2A6IGBpbmAgd2Fsa3MgdGhlIHByb3RvdHlwZVxuICAvLyBjaGFpbiwgc28gaW5oZXJpdGVkIE9iamVjdCBrZXlzICgndG9TdHJpbmcnLCAnY29uc3RydWN0b3InLCDigKYpIHdvdWxkIHJldHVyblxuICAvLyB0cnVlIGFuZCB0aGVuIGBnZXRUaWVyTGltaXRzYCB3b3VsZCByZWFkIGAubGltaXRzYCBvZmYgYSBmdW5jdGlvbiDihpIgY3Jhc2guXG4gIC8vIGB0aWVyYCBpcyBhdHRhY2tlci1pbmZsdWVuY2VhYmxlIChKV1QgLyByZXF1ZXN0IGJvZHkgLyBERUZBVUxUX1FVT1RBX1RJRVIgZW52KS5cbiAgcmV0dXJuIChWQUxJRF9USUVSUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModmFsdWUpO1xufVxuXG4vKiogR2V0IHRoZSBkZWZhdWx0IGxpbWl0cyBmb3IgYSBnaXZlbiB0aWVyIChmYWxscyBiYWNrIHRvIGRldmVsb3BlcikuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGllckxpbWl0cyh0aWVyOiBzdHJpbmcpOiBRdW90YVRpZXJMaW1pdHMge1xuICByZXR1cm4gaXNWYWxpZFRpZXIodGllcikgPyBRVU9UQV9USUVSU1t0aWVyXS5saW1pdHM6IFFVT1RBX1RJRVJTLmRldmVsb3Blci5saW1pdHM7XG59XG5cbi8qKlxuICogVGhlIHBlcmlvZCAoZGF5cykgZXZlcnkgdXNhZ2UgY291bnRlciByb2xscyBvdmVyIG9uLiBBbGwgcXVvdGFzIGFyZSBwZXItcGVyaW9kXG4gKiBGTE9XIGNvdW50ZXJzIG9uIG9uZSBzaGFyZWQgcGVyaW9kOiB0aGUgcXVvdGEgc2VydmljZSByZXNldHMgYSBjb3VudGVyIHRoaXNcbiAqIG1hbnkgZGF5cyBhZnRlciBpdCBleHBpcmVzLCBhbmQgcGxhdGZvcm0gc2VlZHMgYSBuZXcgb3JnJ3MgY291bnRlcnMgd2l0aCB0aGVcbiAqIHNhbWUgd2luZG93IChgUVVPVEFfUkVTRVRfREFZU2AsIGRlZmF1bHQgMykuXG4gKi9cbmV4cG9ydCBjb25zdCBRVU9UQV9SRVNFVF9EQVlTID0gZW52SW50KCdRVU9UQV9SRVNFVF9EQVlTJywgMywgeyBtaW46IDEgfSk7XG5cbi8qKiBUaGUgbmV4dCBxdW90YSByZXNldDogbG9jYWwgbWlkbmlnaHQgYGRheXNgIGZyb20gYG5vd2AuICovXG4vKipcbiAqIFRoZSBgY3B1Q3JlZGl0c2AgcGVyaW9kLCBpbiBkYXlzLiBBIE1PTlRIIHJhdGhlciB0aGFuIHRoZSBnbG9iYWwgdGhyZWUtZGF5XG4gKiB3aW5kb3csIGJlY2F1c2UgYnVpbGQgZGVtYW5kIGlzIGJ1cnN0eSBpbiBhIHdheSBBUEkgdHJhZmZpYyBpcyBub3Q6IGEgZnVsbFxuICogY2F0YWxvZ3VlIHJlYnVpbGQgaXMgYSBkYXkncyB3b3JrIHRoYXQgYXJyaXZlcyBvbiBvbmUgZGF5LCBhbmQgYSB0aHJlZS1kYXlcbiAqIHdpbmRvdyByZWZ1c2VzIGl0IHdoaWxlIHRoZSBhY2NvdW50IGhvbGRzIG1vc3Qgb2YgYSBtb250aCdzIGJ1ZGdldCB1bnNwZW50LlxuICovXG5leHBvcnQgY29uc3QgQ1BVX0NSRURJVFNfUEVSSU9EX0RBWVMgPSBlbnZJbnQoJ1FVT1RBX0NQVV9DUkVESVRTX1BFUklPRF9EQVlTJywgMzAsIHsgbWluOiAxIH0pO1xuXG4vKipcbiAqIFRoZSB1c2FnZSBwZXJpb2QgZm9yIE9ORSBxdW90YSB0eXBlLCBpbiBkYXlzLlxuICpcbiAqIEV2ZXJ5IGZsb3cgcXVvdGEgYnV0IGBjcHVDcmVkaXRzYCByb2xscyBvbiB0aGUgZ2xvYmFsIHtAbGluayBRVU9UQV9SRVNFVF9EQVlTfS5cbiAqIENyZWRpdHMgYXJlIG1vbnRobHksIHdoaWNoIG1ha2VzIHRoZSBwZXJpb2QgYSBQRVItVFlQRSBmYWN0IOKAlCBzbyBhbnl0aGluZyB0aGF0XG4gKiBjb21wdXRlcyBhIHJlc2V0IGRhdGUsIGEgXCJyZXNldHMgaW4gTiBkYXlzXCIgbGluZSBvciBhIGJ1cm4tcmF0ZSBmb3JlY2FzdCBoYXNcbiAqIHRvIGFzayBmb3IgdGhlIHR5cGUncyBvd24gcGVyaW9kIHJhdGhlciB0aGFuIHJlYWRpbmcgdGhlIGdsb2JhbCBjb25zdGFudC4gQVxuICogZm9yZWNhc3QgYWdhaW5zdCB0aGUgd3Jvbmcgd2luZG93IGlzIHdyb25nIGJ5IGEgZmFjdG9yIG9mIHRlbi5cbiAqXG4gKiBTdG9ja3MgKGBzdG9yYWdlQnl0ZXNgIGFuZCB0aGUgcmVzb3VyY2UgY291bnRzKSBoYXZlIG5vIHBlcmlvZCBhdCBhbGw7IHRoaXNcbiAqIHJldHVybnMgdGhlIGdsb2JhbCB3aW5kb3cgZm9yIHRoZW0gYmVjYXVzZSBjYWxsZXJzIGdhdGUgb25cbiAqIGBxdW90YUFjY3J1YWwodHlwZSkgPT09ICdzdG9jaydgIGJlZm9yZSB1c2luZyBpdCwgYW5kIHJldHVybmluZyBhIGZpZ3VyZSBpc1xuICogbGVzcyBkaXNydXB0aXZlIHRoYW4gbWFraW5nIGV2ZXJ5IGNhbGxlciBoYW5kbGUgYSBudWxsLiBDaGVjayB0aGUgYWNjcnVhbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1b3RhUGVyaW9kRGF5cyh0eXBlOiBRdW90YVR5cGUpOiBudW1iZXIge1xuICByZXR1cm4gdHlwZSA9PT0gJ2NwdUNyZWRpdHMnID8gQ1BVX0NSRURJVFNfUEVSSU9EX0RBWVMgOiBRVU9UQV9SRVNFVF9EQVlTO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV4dFF1b3RhUmVzZXREYXRlKGRheXM6IG51bWJlciA9IFFVT1RBX1JFU0VUX0RBWVMsIG5vdzogRGF0ZSA9IG5ldyBEYXRlKCkpOiBEYXRlIHtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKG5vdyk7XG4gIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIGRheXMpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn1cbiJdfQ==
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGEtdGllcnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9xdW90YS10aWVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUF3QixNQUFNLGtCQUFrQixDQUFDO0FBRXhGOzs7Ozs7OztHQVFHO0FBQ0gsT0FBTyxFQUNMLHVCQUF1QixFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLFNBQVMsR0FDOUksTUFBTSxrQkFBa0IsQ0FBQztBQWlCMUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNILE1BQU0sZUFBZSxHQUFxQztJQUN4RCxlQUFlLEVBQUUsTUFBTSxDQUFDLDRCQUE0QixFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9FLFlBQVksRUFBRSxNQUFNLENBQUMseUJBQXlCLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDekUsNEVBQTRFO0lBQzVFLCtFQUErRTtJQUMvRSxnRkFBZ0Y7SUFDaEYsOEVBQThFO0lBQzlFLGtEQUFrRDtDQUNOLENBQUM7QUFFL0MsaUZBQWlGO0FBQ2pGLE1BQU0sVUFBVSxhQUFhLENBQUMsU0FBaUI7SUFDN0MsT0FBTyxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFNBQWlCLEVBQUUsS0FBYSxFQUFFLFFBQVEs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SyxZQUFZLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztBQUM1RSxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBQUksR0FBVyxnQkFBZ0IsRUFBRSxHQUFHLEdBQVMsSUFBSSxJQUFJLEVBQUU7SUFDeEYsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQixPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgZW52Qm9vbCwgZW52SW50LCBlbnZOYW1lRnJhZ21lbnQsIGVudlN0ciB9IGZyb20gJy4uL3V0aWxzL2Vudi5qcyc7XG5pbXBvcnQgdHlwZSB7IFF1b3RhVHlwZSB9IGZyb20gJy4vY29tbW9uLmpzJztcbmltcG9ydCB7IERFRkFVTFRfVElFUl9MSU1JVFMsIHRpZXJMYWJlbCwgdHlwZSBRdW90YVRpZXJMaW1pdHMgfSBmcm9tICcuL3RpZXItbGltaXRzLmpzJztcblxuLyoqXG4gKiBUaGUgbGltaXRzIHNoYXBlLCB0aGUgY29kZS1kZWZhdWx0IHRhYmxlIGFuZCB0aGUgc2l6aW5nIGFyaXRobWV0aWMgbGl2ZSBpblxuICogYC4vdGllci1saW1pdHMuanNgIOKAlCBkZXBlbmRlbmN5LWZyZWUsIHNvIHRoZSBCUk9XU0VSIGltcG9ydHMgdGhlbVxuICogKGBAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZS90aWVyLWxpbWl0c2ApIGluc3RlYWQgb2Yga2VlcGluZyBhIGhhbmQtc3luY2VkXG4gKiBjb3B5IOKAlCBhbmQgc28gZG8gdGhlIHRpZXItbGFkZGVyIGZhY3RzIHRoZSBicm93c2VyIGFsc28gZGVjaWRlcyB3aXRoICh3aGljaFxuICogdGllcnMgbWF5IHBhcmVudCBhIHRlYW0gb3IgYnV5IGEgc2VhdCBwYWNrKS4gUmUtZXhwb3J0ZWQgaGVyZSBiZWNhdXNlIHRoaXMgaXNcbiAqIHRoZSBtb2R1bGUgZXZlcnkgc2VydmVyIGNvbnN1bWVyIGFuZCB0aGUgcGFja2FnZSBiYXJyZWwgYWxyZWFkeSBuYW1lOyB3aGF0XG4gKiBzdGF5cyBoZXJlIGlzIGV2ZXJ5dGhpbmcgdGhlIGVudiB0b3VjaGVzLlxuICovXG5leHBvcnQge1xuICBBVVRPTUFUSU9OX0NBTExTX1NJWklORywgYXV0b21hdGlvbkNhbGxzRm9yLCBERUZBVUxUX1RJRVJfTElNSVRTLCBTRUFUX1BBQ0tfVElFUlMsIHNlYXRSZW1lZHksIFRFQU1fQ0FQQUJMRV9USUVSUywgdGllckFsbG93c1RlYW1zLCB0aWVyTGFiZWwsXG59IGZyb20gJy4vdGllci1saW1pdHMuanMnO1xuZXhwb3J0IHR5cGUgeyBRdW90YVRpZXJMaW1pdHMsIFNlYXRSZW1lZHkgfSBmcm9tICcuL3RpZXItbGltaXRzLmpzJztcblxuLyoqIEF2YWlsYWJsZSBxdW90YSB0aWVyIGlkZW50aWZpZXJzLlxuICpcbiAqIGB1bmxpbWl0ZWRgIGlzIGEgc3BlY2lhbCB0aWVyOiBldmVyeSBxdW90YSBpcyBgLTFgICh1bmNhcHBlZCkgYW5kIGl0IGluY2x1ZGVzXG4gKiBldmVyeSBmZWF0dXJlL2FkZC1vbiBidW5kbGUuIEl0IGlzIHRoZSBERUZBVUxUIHdoZW4gYmlsbGluZyBpcyBkaXNhYmxlZCAobm9cbiAqIG1ldGVyaW5nL2VuZm9yY2VtZW50IHN1cmZhY2UgZXhpc3RzLCBzbyBub3RoaW5nIGlzIGNhcHBlZCksIGFuZCBpdCBpcyBORVZFUlxuICogc2hvd24gb3Igc2VsZWN0YWJsZSB3aGVuIGJpbGxpbmcgaXMgZW5hYmxlZCDigJQgc2VlIGBTVEFOREFSRF9USUVSU2AuICovXG5leHBvcnQgdHlwZSBRdW90YVRpZXIgPSAnZGV2ZWxvcGVyJyB8ICdwcm8nIHwgJ3RlYW0nIHwgJ2J1c2luZXNzJyB8ICdlbnRlcnByaXNlJyB8ICd1bmxpbWl0ZWQnO1xuXG4vKiogRnVsbCBwcmVzZXQgZm9yIGEgc2luZ2xlIHRpZXIgKGxhYmVsICsgbGltaXRzKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGFUaWVyUHJlc2V0IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbGltaXRzOiBRdW90YVRpZXJMaW1pdHM7XG59XG5cbi8qKlxuICogVGhlIFNPRlQgYmFuZCBhYm92ZSBhIHF1b3RhJ3MgY2FwLCBwZXIgdHlwZSwgaW4gcGVyY2VudCBvZiB0aGUgbGltaXQuIEEgdHlwZVxuICogYWJzZW50IGZyb20gdGhpcyBtYXAgaGFzIE5PIGJhbmQgYW5kIHN0b3BzIGhhcmQgYXQgMTAwJS5cbiAqXG4gKiBBdCAxMDAlIHRoZSBhY2NvdW50IGdldHMgdGhlIFwicmVhY2hlZFwiIG5vdGljZSBhbmQga2VlcHMgcnVubmluZzsgdGhlIHJlZnVzYWxcbiAqIHN0YXJ0cyBvbmx5IHBhc3QgYGxpbWl0IMOXICgxMDAgKyBwY3QpIC8gMTAwYC4gUmVhZHMgc3RpbGwgUkVQT1JUIHRoZSBub21pbmFsXG4gKiBsaW1pdCwgc28gdXNhZ2Ugc2hvd3MgYWJvdmUgMTAwJSB3aGlsZSBpbnNpZGUgdGhlIGJhbmQuXG4gKlxuICogVHdvIHR5cGVzIHF1YWxpZnksIGZvciB0aGUgc2FtZSByZWFzb24gc3RhdGVkIHR3byB3YXlzIOKAlCBhIGhhcmQgc3RvcCBleGFjdGx5XG4gKiBhdCAxMDAlIGlzIHdvcnNlIHRoYW4gYSBzaG9ydCBvdmVycnVuIHdoZW4gdGhlIGNhbGxlciBjYW5ub3Qgc2ltcGx5IHdhaXQ6XG4gKlxuICogLSBgYXV0b21hdGlvbkNhbGxzYCAoYFFVT1RBX0FVVE9NQVRJT05fR1JBQ0VfUENUYCk6IHRoZSBjYWxsZXIgaXMgYSBwaXBlbGluZVxuICogICBtaWQtZGVwbG95LCBub3QgYSBwZXJzb24sIGFuZCB0aGUgY291bnRlciB3b3VsZCBzdGF5IGZ1bGwgZm9yIHRoZSByZXN0IG9mXG4gKiAgIHRoZSBwZXJpb2QuXG4gKiAtIGBzdG9yYWdlQnl0ZXNgIChgUVVPVEFfU1RPUkFHRV9HUkFDRV9QQ1RgKTogc3RvcmFnZSBpcyBhIFNUT0NLIOKAlCBpdCBkb2VzXG4gKiAgIG5vdCByZXNldCwgc28gd2l0aG91dCBhIGJhbmQgYSBkb3duZ3JhZGUgb3IgYSBjYW5jZWxsZWQgcGFjayBmbGlwcyBhblxuICogICBhY2NvdW50IGZyb20gd29ya2luZyB0byByZWZ1c2VkIHdpdGggbm8gYnVmZmVyIGF0IGFsbCwgYW5kIHRoZSByZW1lZHlcbiAqICAgKHBydW5lLCBvciBidXkgY2FwYWNpdHkpIHRha2VzIHRpbWUgdGhlIGJhbmQgaXMgdGhlcmUgdG8gcHJvdmlkZS4gTm90ZSB0aGVcbiAqICAgYmFuZCBvbiBhIHN0b2NrIGlzIGEgT05FLVRJTUUgYnVmZmVyIHJhdGhlciB0aGFuIGEgcGVyLXBlcmlvZCBvbmU7IHRoYXQgaXNcbiAqICAgaXRzIHB1cnBvc2UgaGVyZSwgbm90IGEgbGltaXRhdGlvbiBvZiBpdC5cbiAqXG4gKiBFdmVyeSBvdGhlciB0eXBlIHN0YXlzIGhhcmQuIFRoaXMgd2FzIGEgaGFyZGNvZGVkIGBxdW90YVR5cGUgIT09XG4gKiAnYXV0b21hdGlvbkNhbGxzJ2AgY29tcGFyaXNvbiwgd2hpY2ggaXMgd2h5IHN0b3JhZ2UgaGFkIG5vdGhpbmc6IHRoZVxuICogbWVjaGFuaXNtIGV4aXN0ZWQgYW5kIG9ubHkgdGhlIHByZWRpY2F0ZSBleGNsdWRlZCBpdC5cbiAqL1xuY29uc3QgUVVPVEFfR1JBQ0VfUENUOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+PiA9IHtcbiAgYXV0b21hdGlvbkNhbGxzOiBlbnZJbnQoJ1FVT1RBX0FVVE9NQVRJT05fR1JBQ0VfUENUJywgMTAsIHsgbWluOiAwLCBtYXg6IDEwMCB9KSxcbiAgc3RvcmFnZUJ5dGVzOiBlbnZJbnQoJ1FVT1RBX1NUT1JBR0VfR1JBQ0VfUENUJywgMTAsIHsgbWluOiAwLCBtYXg6IDEwMCB9KSxcbiAgLy8gYHNhdGlzZmllcyBQYXJ0aWFsPOKApj5gIGtlZXBzIEJPVEggcHJvcGVydGllcyB0aGlzIG1hcCBuZWVkczogdGhlIGtleXMgYXJlXG4gIC8vIGNoZWNrZWQgYWdhaW5zdCBgUXVvdGFUeXBlYCAoYSB0eXBvJ2QgYHN0b3JhZ2VieXRlc2Agd291bGQgb3RoZXJ3aXNlIGxlYXZlIGFcbiAgLy8gYmFuZGVkIHF1b3RhIHN0b3BwaW5nIGhhcmQgYXQgMTAwJSwgc2lsZW50bHkpLCB3aGlsZSB0aGUgYW5ub3RhdGlvbiBrZWVwcyB0aGVcbiAgLy8gc3RyaW5nIGluZGV4IHRoZSBhY2Nlc3NvciBiZWxvdyBuZWVkcyBmb3IgYW4gdW50cnVzdGVkIGBxdW90YVR5cGVgLiBQYXJ0aWFsXG4gIC8vIGJlY2F1c2UgYWJzZW5jZSBpcyBtZWFuaW5nZnVsIGhlcmUg4oCUIHNlZSBhYm92ZS5cbn0gc2F0aXNmaWVzIFBhcnRpYWw8UmVjb3JkPFF1b3RhVHlwZSwgbnVtYmVyPj47XG5cbi8qKiBUaGUgc29mdCBiYW5kIGZvciBgcXVvdGFUeXBlYCBpbiBwZXJjZW50LCBvciAwIGZvciBhIHR5cGUgdGhhdCBzdG9wcyBoYXJkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1b3RhR3JhY2VQY3QocXVvdGFUeXBlOiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gUVVPVEFfR1JBQ0VfUENUW3F1b3RhVHlwZV0gPz8gMDtcbn1cblxuLyoqXG4gKiBUaGUgbGltaXQgZW5mb3JjZW1lbnQgYWN0dWFsbHkgYmluZHMgb24gZm9yIGBxdW90YVR5cGVgOiB0aGUgbm9taW5hbCBsaW1pdCxcbiAqIHBsdXMgdGhlIHR5cGUncyB7QGxpbmsgcXVvdGFHcmFjZVBjdH0gYmFuZCB3aGVyZSBpdCBoYXMgb25lLiBVbmxpbWl0ZWQgKC0xKVxuICogYW5kIHplcm8gKFwibm9uZVwiKSBsaW1pdHMgYXJlIHJldHVybmVkIHVuY2hhbmdlZCDigJQgYSAwIGNhcCBpcyBhIGRlbGliZXJhdGVcbiAqIHJlZnVzYWwsIG5vdCBhIGJ1ZGdldCB0byBvdmVycnVuLlxuICpcbiAqIHtAbGluayBRVU9UQV9HUkFDRV9QQ1R9IGRlY2lkZXMgV0hFVEhFUiBhIHR5cGUgaGFzIGEgYmFuZDsgYGdyYWNlUGN0YCBvbmx5XG4gKiBzaXplcyBpdC4gU28gYW4gZXhwbGljaXQgcGVyY2VudGFnZSBwYXNzZWQgZm9yIGFuIHVuYmFuZGVkIHR5cGUgc3RpbGwgeWllbGRzXG4gKiB0aGUgbm9taW5hbCBsaW1pdCwgcmF0aGVyIHRoYW4gcXVpZXRseSBncmFudGluZyBhIGJhbmQgdGhlIHR5cGUgaXMgbm90IG1lYW50XG4gKiB0byBoYXZlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5mb3JjZWRRdW90YUxpbWl0KHF1b3RhVHlwZTogc3RyaW5nLCBsaW1pdDogbnVtYmVyLCBncmFjZVBjdDogbnVtYmVyID0gcXVvdGFHcmFjZVBjdChxdW90YVR5cGUpKTogbnVtYmVyIHtcbiAgaWYgKGxpbWl0IDw9IDAgfHwgZ3JhY2VQY3QgPD0gMCB8fCBxdW90YUdyYWNlUGN0KHF1b3RhVHlwZSkgPD0gMCkgcmV0dXJuIGxpbWl0O1xuICByZXR1cm4gTWF0aC5mbG9vcigobGltaXQgKiAoMTAwICsgZ3JhY2VQY3QpKSAvIDEwMCk7XG59XG5cbi8qKlxuICogUmVhZCBhIHRpZXIgTElNSVQgZW52IHZhci4gYC0xYCA9IHVubGltaXRlZDsgYW55dGhpbmcgYmVsb3cgdGhhdCBpcyBub25zZW5zZVxuICogKGEgYC01YCBsaW1pdCB3b3VsZCBzaGlwIGEgYnJva2VuIGZpbml0ZSBjYXApLCBzbyBpdCBmYWxscyBiYWNrIHRvIHRoZSBjb2RlXG4gKiBkZWZhdWx0IHJhdGhlciB0aGFuIGNsYW1waW5nIHVwIHRvIGAtMWAuIFRoZSBwYXJzaW5nIGl0c2VsZiBpcyBhcGktY29yZSdzXG4gKiBzaGFyZWQgYGVudkludGAg4oCUIHN0cmljdCBhYm91dCBkZWNpbWFscy9nYXJiYWdlIOKAlCBub3QgYSBsb2NhbCByZS1kZXJpdmF0aW9uLlxuICovXG5mdW5jdGlvbiB0aWVyTGltaXRFbnYobmFtZTogc3RyaW5nLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgbiA9IGVudkludChuYW1lLCBmYWxsYmFjayk7XG4gIHJldHVybiBuIDwgLTEgPyBmYWxsYmFjayA6IG47XG59XG5cbi8qKlxuICogUGVyLXRpZXIgbGltaXRzLCBlYWNoIG92ZXJyaWRhYmxlIHZpYSBgUVVPVEFfVElFUl88VElFUj5fPExJTUlUPmAgZW52IHZhcnNcbiAqIChlLmcuIGBRVU9UQV9USUVSX1BST19QSVBFTElORVM9MjUwYCwgYFFVT1RBX1RJRVJfREVWRUxPUEVSX1NUT1JBR0VfQllURVM9Li4uYCkuXG4gKiBVbnNldC9lbXB0eSDihpIgdGhlIGNvZGUgZGVmYXVsdC4gYC0xYCA9IHVubGltaXRlZC4gUmVhZCBvbmNlIGF0IG1vZHVsZSBsb2FkIOKAlFxuICogb24gazhzIHRoZXNlIGZsb3cgaW4gdmlhIHRoZSBgYXBwLWVudmAgQ29uZmlnTWFwIChidWlsdCBmcm9tIGAuZW52YCkuXG4gKi9cbmZ1bmN0aW9uIHRpZXJMaW1pdHModGllcjogUXVvdGFUaWVyKTogUXVvdGFUaWVyTGltaXRzIHtcbiAgLy8gYHVubGltaXRlZGAgaXMgdW5jYXBwZWQgQlkgREVGSU5JVElPTjogRVZFUlkgcXVvdGEgaXMgLTEgYW5kIGl0IGlzIE5PVFxuICAvLyBlbnYtb3ZlcnJpZGFibGUuIFJlYWRpbmcgUVVPVEFfVElFUl9VTkxJTUlURURfKiBoZXJlIHdvdWxkIGxldCBhIHN0cmF5IGVudlxuICAvLyB2YXIgc2lsZW50bHkgY2FwIHRoZSBiaWxsaW5nLURJU0FCTEVEIGRlZmF1bHQgdGllciDigJQgc3VyZmFjaW5nIGFzIGEgc3B1cmlvdXNcbiAgLy8gXCJxdW90YSBleGNlZWRlZFwiIG9uIGEgZGVwbG95IHRoYXQgbWV0ZXJzIG5vdGhpbmcuIERlcml2ZSAtMSBmb3IgZXZlcnkgZmllbGRcbiAgLy8gZnJvbSB0aGUgbGltaXRzIHNoYXBlIHNvIGEgbmV3bHktYWRkZWQgcXVvdGEgaXMgdW5jYXBwZWQgaGVyZSBhdXRvbWF0aWNhbGx5LlxuICBpZiAodGllciA9PT0gJ3VubGltaXRlZCcpIHtcbiAgICBjb25zdCB1bmNhcHBlZCA9IHsgLi4uREVGQVVMVF9USUVSX0xJTUlUUy51bmxpbWl0ZWQgfTtcbiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModW5jYXBwZWQpIGFzIChrZXlvZiBRdW90YVRpZXJMaW1pdHMpW10pIHVuY2FwcGVkW2tdID0gLTE7XG4gICAgcmV0dXJuIHVuY2FwcGVkO1xuICB9XG4gIGNvbnN0IGQgPSBERUZBVUxUX1RJRVJfTElNSVRTW3RpZXJdO1xuICBjb25zdCBUID0gdGllci50b1VwcGVyQ2FzZSgpO1xuICAvLyBLZXllZCBvZmYgdGhlIGxpbWl0cyB0YWJsZSByYXRoZXIgdGhhbiBzZXZlbnRlZW4gaGFuZC13cml0dGVuIGxpbmVzLCBzbyBhXG4gIC8vIG5ld2x5LWFkZGVkIGxpbWl0IGlzIGVudi1vdmVycmlkYWJsZSB0aGUgbW9tZW50IGl0IGhhcyBhIGRlZmF1bHQg4oCUIHRoZSBoYW5kXG4gIC8vIGxpc3QgbWFkZSB0aGF0IGEgc2Vjb25kIGVkaXQsIGluIGEgZmlsZSB3aGVyZSBmb3JnZXR0aW5nIGl0IHlpZWxkcyBhIGtub2JcbiAgLy8gdGhlIGRvY3MgZGVzY3JpYmUgYW5kIHRoZSBjb2RlIGlnbm9yZXMuXG4gIGNvbnN0IG91dCA9IHsgLi4uZCB9O1xuICBmb3IgKGNvbnN0IGZpZWxkIG9mIE9iamVjdC5rZXlzKG91dCkgYXMgKGtleW9mIFF1b3RhVGllckxpbWl0cylbXSkge1xuICAgIC8vIFRoZSBrbm9iIG5hbWVzIGFyZSBERVJJVkVEIGZyb20gdGhlIGZpZWxkIG5hbWVzIChgZW52TmFtZUZyYWdtZW50YCksIHdoaWNoXG4gICAgLy8gaXMgd2h5IGB0ZXN0L3F1b3RhLXRpZXJzLnRlc3QudHNgIHBpbnMgdGhlIGZ1bGwgc2V0IG9mIHNldmVudGVlbjogYSBmaWVsZFxuICAgIC8vIHJlbmFtZSB3b3VsZCBvdGhlcndpc2UgbW92ZSBzb21lYm9keSdzIGNvbmZpZ3VyZWQga25vYiB3aXRob3V0IGEgd29yZC5cbiAgICBvdXRbZmllbGRdID0gdGllckxpbWl0RW52KGBRVU9UQV9USUVSXyR7VH1fJHtlbnZOYW1lRnJhZ21lbnQoZmllbGQpfWAsIGRbZmllbGRdKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKiogQWxsIHZhbGlkIHRpZXIgbmFtZXMgKGluY2wuIGB1bmxpbWl0ZWRgKSwgaW4gbGFkZGVyIG9yZGVyLiBVc2VkIGZvciB2YWxpZGF0aW9uXG4gKiAgb2YgYSAqc3RvcmVkKiB0aWVyIOKAlCBgdW5saW1pdGVkYCBpcyBhIHZhbGlkIHZhbHVlIGV2ZW4gdGhvdWdoIGl0J3MgbmV2ZXJcbiAqICBvZmZlcmVkIGZvciBzYWxlLiBEZXJpdmVkIGZyb20gdGhlIGNvZGUtZGVmYXVsdCBsaW1pdHMgdGFibGUsIHdoaWNoIGlzIHRoZSBvbmVcbiAqICBwbGFjZSBhIHRpZXIgY2Fubm90IGJlIGFkZGVkIHdpdGhvdXQgYmVpbmcgZ2l2ZW4gbnVtYmVycy4gKi9cbmV4cG9ydCBjb25zdCBWQUxJRF9USUVSUzogcmVhZG9ubHkgUXVvdGFUaWVyW10gPSBPYmplY3Qua2V5cyhERUZBVUxUX1RJRVJfTElNSVRTKSBhcyBRdW90YVRpZXJbXTtcblxuLyoqXG4gKiBFdmVyeSB0aWVyJ3MgcHJlc2V0LCBrZXllZCBvZmYge0BsaW5rIFZBTElEX1RJRVJTfSByYXRoZXIgdGhhbiB3cml0dGVuIG91dFxuICogdGllciBieSB0aWVyIOKAlCBhIHRpZXIgYWRkZWQgdG8gdGhlIGxpbWl0cyB0YWJsZSBnZXRzIGl0cyBwcmVzZXQgaGVyZSB3aXRoIG5vXG4gKiBzZWNvbmQgZWRpdC5cbiAqXG4gKiBUaGUgbGFiZWwgZGVmYXVsdHMgdG8ge0BsaW5rIHRpZXJMYWJlbH0gb2YgdGhlIGtleSAoXCJidXNpbmVzc1wiIOKGkiBcIkJ1c2luZXNzXCIsXG4gKiBcInByb19wbHVzXCIg4oaSIFwiUHJvIFBsdXNcIiksIHdoaWNoIGlzIHdoYXQgYWxsIHNpeCB3ZXJlIHNwZWxsZWQgYXMgYnkgaGFuZCwgYW5kXG4gKiBzdGF5cyBvdmVycmlkYWJsZSB2aWEgYFFVT1RBX1RJRVJfPFRJRVI+X0xBQkVMYCBmb3IgYSBkZXBsb3ltZW50IHRoYXQgd2FudHMgaXRzXG4gKiBvd24gd29yZGluZyDigJQgb3IgZm9yIGEga2V5IHRoZSBkZXJpdmF0aW9uIGNhbm5vdCBnZXQgcmlnaHQsIHN1Y2ggYXMgYW4gYWNyb255bS5cbiAqIERpc3BsYXkgbmFtZSBvbmx5OiBpdCBuZXZlciBhZmZlY3RzIGEgbGltaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBRVU9UQV9USUVSUzogUmVjb3JkPFF1b3RhVGllciwgUXVvdGFUaWVyUHJlc2V0PiA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgVkFMSURfVElFUlMubWFwKCh0aWVyKSA9PiBbdGllciwge1xuICAgIGxhYmVsOiBlbnZTdHIoYFFVT1RBX1RJRVJfJHt0aWVyLnRvVXBwZXJDYXNlKCl9X0xBQkVMYCwgdGllckxhYmVsKHRpZXIpKSxcbiAgICBsaW1pdHM6IHRpZXJMaW1pdHModGllciksXG4gIH1dKSxcbikgYXMgUmVjb3JkPFF1b3RhVGllciwgUXVvdGFUaWVyUHJlc2V0PjtcblxuLyoqIFRoZSBzdGFuZGFyZCwgYmlsbGluZy1zZWxlY3RhYmxlIHRpZXJzIOKAlCB0aGUgb25lcyBvZmZlcmVkIGFzIHB1cmNoYXNhYmxlIHBsYW5zXG4gKiAgYW5kIHNob3duIGluIHRpZXIgcGlja2Vycy4gRGVyaXZlZCBhcyBcImV2ZXJ5IHZhbGlkIHRpZXIgZXhjZXB0IGB1bmxpbWl0ZWRgXCIsXG4gKiAgd2hpY2ggaXMgdGhlIGJpbGxpbmctRElTQUJMRUQgZGVmYXVsdCBhbmQgaXMgbmV2ZXIgZGlzcGxheWVkL3NlbGVjdGFibGUgd2hlblxuICogIGJpbGxpbmcgaXMgZW5hYmxlZC4gS2VwdCBEUlkgb2ZmIGBWQUxJRF9USUVSU2Agc28gYWRkaW5nIGEgdGllciBmbG93cyB0aHJvdWdoLiAqL1xuZXhwb3J0IGNvbnN0IFNUQU5EQVJEX1RJRVJTOiByZWFkb25seSBRdW90YVRpZXJbXSA9IFZBTElEX1RJRVJTLmZpbHRlcigodCkgPT4gdCAhPT0gJ3VubGltaXRlZCcpO1xuXG4vKiogV2hldGhlciB0aGUgYmlsbGluZyBzZXJ2aWNlIGlzIGVuYWJsZWQgaW4gdGhpcyBkZXBsb3ltZW50IChgQklMTElOR19FTkFCTEVEYCxcbiAqICBvcHQtb3V0IGRlZmF1bHQtb24g4oCUIG1pcnJvcnMgdGhlIGJpbGxpbmcvcGxhdGZvcm0gY29uZmlncykuIFdpdGggYmlsbGluZyBPRkZcbiAqICB0aGVyZSdzIG5vIG1ldGVyaW5nL2VuZm9yY2VtZW50IHN1cmZhY2UsIHNvIHRoZSBkZWZhdWx0IHRpZXIgaXMgYHVubGltaXRlZGAuICovXG5leHBvcnQgZnVuY3Rpb24gaXNCaWxsaW5nRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGVudkJvb2woJ0JJTExJTkdfRU5BQkxFRCcsIHRydWUpO1xufVxuXG4vKipcbiAqIERlZmF1bHQgdGllciBhc3NpZ25lZCB0byBuZXcgb3JnYW5pemF0aW9ucy5cbiAqIC0gQmlsbGluZyBESVNBQkxFRCDihpIgYHVubGltaXRlZGAgKG5vdGhpbmcgaXMgbWV0ZXJlZCwgc28gZXZlcnl0aGluZyBpcyB1bmNhcHBlZCkuXG4gKiAtIEJpbGxpbmcgRU5BQkxFRCAg4oaSIGBERUZBVUxUX1FVT1RBX1RJRVJgIGlmIGl0J3MgYSB2YWxpZCBzdGFuZGFyZCB0aWVyLCBlbHNlIGBkZXZlbG9wZXJgLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9USUVSOiBRdW90YVRpZXIgPSAhaXNCaWxsaW5nRW5hYmxlZCgpXG4gID8gJ3VubGltaXRlZCdcbiAgOiAoaXNWYWxpZFRpZXIocHJvY2Vzcy5lbnYuREVGQVVMVF9RVU9UQV9USUVSID8/ICcnKSAmJiBwcm9jZXNzLmVudi5ERUZBVUxUX1FVT1RBX1RJRVIgIT09ICd1bmxpbWl0ZWQnXG4gICAgPyAocHJvY2Vzcy5lbnYuREVGQVVMVF9RVU9UQV9USUVSIGFzIFF1b3RhVGllcilcbiAgICA6ICdkZXZlbG9wZXInKTtcblxuLyoqIENoZWNrIHdoZXRoZXIgYSBzdHJpbmcgaXMgYSB2YWxpZCBRdW90YVRpZXIuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFRpZXIodmFsdWU6IHN0cmluZyk6IHZhbHVlIGlzIFF1b3RhVGllciB7XG4gIC8vIFVzZSB0aGUgZXhwbGljaXQgdHVwbGUsIG5vdCBgdmFsdWUgaW4gUVVPVEFfVElFUlNgOiBgaW5gIHdhbGtzIHRoZSBwcm90b3R5cGVcbiAgLy8gY2hhaW4sIHNvIGluaGVyaXRlZCBPYmplY3Qga2V5cyAoJ3RvU3RyaW5nJywgJ2NvbnN0cnVjdG9yJywg4oCmKSB3b3VsZCByZXR1cm5cbiAgLy8gdHJ1ZSBhbmQgdGhlbiBgZ2V0VGllckxpbWl0c2Agd291bGQgcmVhZCBgLmxpbWl0c2Agb2ZmIGEgZnVuY3Rpb24g4oaSIGNyYXNoLlxuICAvLyBgdGllcmAgaXMgYXR0YWNrZXItaW5mbHVlbmNlYWJsZSAoSldUIC8gcmVxdWVzdCBib2R5IC8gREVGQVVMVF9RVU9UQV9USUVSIGVudikuXG4gIHJldHVybiAoVkFMSURfVElFUlMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHZhbHVlKTtcbn1cblxuLyoqIEdldCB0aGUgZGVmYXVsdCBsaW1pdHMgZm9yIGEgZ2l2ZW4gdGllciAoZmFsbHMgYmFjayB0byBkZXZlbG9wZXIpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRpZXJMaW1pdHModGllcjogc3RyaW5nKTogUXVvdGFUaWVyTGltaXRzIHtcbiAgcmV0dXJuIGlzVmFsaWRUaWVyKHRpZXIpID8gUVVPVEFfVElFUlNbdGllcl0ubGltaXRzOiBRVU9UQV9USUVSUy5kZXZlbG9wZXIubGltaXRzO1xufVxuXG4vKipcbiAqIFRoZSBwZXJpb2QgKGRheXMpIGV2ZXJ5IHVzYWdlIGNvdW50ZXIgcm9sbHMgb3ZlciBvbi4gQWxsIHF1b3RhcyBhcmUgcGVyLXBlcmlvZFxuICogRkxPVyBjb3VudGVycyBvbiBvbmUgc2hhcmVkIHBlcmlvZDogdGhlIHF1b3RhIHNlcnZpY2UgcmVzZXRzIGEgY291bnRlciB0aGlzXG4gKiBtYW55IGRheXMgYWZ0ZXIgaXQgZXhwaXJlcywgYW5kIHBsYXRmb3JtIHNlZWRzIGEgbmV3IG9yZydzIGNvdW50ZXJzIHdpdGggdGhlXG4gKiBzYW1lIHdpbmRvdyAoYFFVT1RBX1JFU0VUX0RBWVNgLCBkZWZhdWx0IDMpLlxuICovXG5leHBvcnQgY29uc3QgUVVPVEFfUkVTRVRfREFZUyA9IGVudkludCgnUVVPVEFfUkVTRVRfREFZUycsIDMsIHsgbWluOiAxIH0pO1xuXG4vKiogVGhlIG5leHQgcXVvdGEgcmVzZXQ6IGxvY2FsIG1pZG5pZ2h0IGBkYXlzYCBmcm9tIGBub3dgLiAqL1xuLyoqXG4gKiBUaGUgYGNwdUNyZWRpdHNgIHBlcmlvZCwgaW4gZGF5cy4gQSBNT05USCByYXRoZXIgdGhhbiB0aGUgZ2xvYmFsIHRocmVlLWRheVxuICogd2luZG93LCBiZWNhdXNlIGJ1aWxkIGRlbWFuZCBpcyBidXJzdHkgaW4gYSB3YXkgQVBJIHRyYWZmaWMgaXMgbm90OiBhIGZ1bGxcbiAqIGNhdGFsb2d1ZSByZWJ1aWxkIGlzIGEgZGF5J3Mgd29yayB0aGF0IGFycml2ZXMgb24gb25lIGRheSwgYW5kIGEgdGhyZWUtZGF5XG4gKiB3aW5kb3cgcmVmdXNlcyBpdCB3aGlsZSB0aGUgYWNjb3VudCBob2xkcyBtb3N0IG9mIGEgbW9udGgncyBidWRnZXQgdW5zcGVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IENQVV9DUkVESVRTX1BFUklPRF9EQVlTID0gZW52SW50KCdRVU9UQV9DUFVfQ1JFRElUU19QRVJJT0RfREFZUycsIDMwLCB7IG1pbjogMSB9KTtcblxuLyoqXG4gKiBUaGUgdXNhZ2UgcGVyaW9kIGZvciBPTkUgcXVvdGEgdHlwZSwgaW4gZGF5cy5cbiAqXG4gKiBFdmVyeSBmbG93IHF1b3RhIGJ1dCBgY3B1Q3JlZGl0c2Agcm9sbHMgb24gdGhlIGdsb2JhbCB7QGxpbmsgUVVPVEFfUkVTRVRfREFZU30uXG4gKiBDcmVkaXRzIGFyZSBtb250aGx5LCB3aGljaCBtYWtlcyB0aGUgcGVyaW9kIGEgUEVSLVRZUEUgZmFjdCDigJQgc28gYW55dGhpbmcgdGhhdFxuICogY29tcHV0ZXMgYSByZXNldCBkYXRlLCBhIFwicmVzZXRzIGluIE4gZGF5c1wiIGxpbmUgb3IgYSBidXJuLXJhdGUgZm9yZWNhc3QgaGFzXG4gKiB0byBhc2sgZm9yIHRoZSB0eXBlJ3Mgb3duIHBlcmlvZCByYXRoZXIgdGhhbiByZWFkaW5nIHRoZSBnbG9iYWwgY29uc3RhbnQuIEFcbiAqIGZvcmVjYXN0IGFnYWluc3QgdGhlIHdyb25nIHdpbmRvdyBpcyB3cm9uZyBieSBhIGZhY3RvciBvZiB0ZW4uXG4gKlxuICogU3RvY2tzIChgc3RvcmFnZUJ5dGVzYCBhbmQgdGhlIHJlc291cmNlIGNvdW50cykgaGF2ZSBubyBwZXJpb2QgYXQgYWxsOyB0aGlzXG4gKiByZXR1cm5zIHRoZSBnbG9iYWwgd2luZG93IGZvciB0aGVtIGJlY2F1c2UgY2FsbGVycyBnYXRlIG9uXG4gKiBgcXVvdGFBY2NydWFsKHR5cGUpID09PSAnc3RvY2snYCBiZWZvcmUgdXNpbmcgaXQsIGFuZCByZXR1cm5pbmcgYSBmaWd1cmUgaXNcbiAqIGxlc3MgZGlzcnVwdGl2ZSB0aGFuIG1ha2luZyBldmVyeSBjYWxsZXIgaGFuZGxlIGEgbnVsbC4gQ2hlY2sgdGhlIGFjY3J1YWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBxdW90YVBlcmlvZERheXModHlwZTogUXVvdGFUeXBlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHR5cGUgPT09ICdjcHVDcmVkaXRzJyA/IENQVV9DUkVESVRTX1BFUklPRF9EQVlTIDogUVVPVEFfUkVTRVRfREFZUztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5leHRRdW90YVJlc2V0RGF0ZShkYXlzOiBudW1iZXIgPSBRVU9UQV9SRVNFVF9EQVlTLCBub3c6IERhdGUgPSBuZXcgRGF0ZSgpKTogRGF0ZSB7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShub3cpO1xuICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBkYXlzKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59XG4iXX0=
@@ -17,7 +17,7 @@
17
17
  * (`admin.superadmin.grant`, `org.ownership.transfer`, `user.login`, …). Keep
18
18
  * this list free of any platform-only action.
19
19
  */
20
- export declare const REMOTE_AUDIT_ACTIONS: readonly ['plugin.build.completed', 'plugin.build.failed', 'plugin.build.timeout', 'plugin.scan.skipped', 'plugin.vuln.waived', 'plugin.vuln.flagged', 'plugin.vuln.cleared', 'plugin.delete', 'plugin.restore', 'plugin.purge', 'plugin.update', 'plugin.upload', 'plugin.deploy', 'plugin.bulk.update', 'plugin.bulk.delete', 'plugin.dlq.purge', 'plugin.build.retry', 'plugin.dlq.replay', 'pipeline.create', 'pipeline.update', 'pipeline.delete', 'pipeline.restore', 'pipeline.purge', 'pipeline_template.create', 'pipeline_template.update', 'pipeline_template.delete', 'pipeline_template.restore', 'pipeline_template.purge', 'pipeline.execution.start', 'pipeline.execution.cancel', 'pipeline.registry.register', 'pipeline.registry.deregister', 'quota.reset', 'quota.limit.update', 'quota.delete', 'quota.notice_settings.update', 'compliance.exemption.approve', 'compliance.exemption.revoke', 'compliance.exemption.request', 'compliance.exemption.reject', 'compliance.rule.toggle', 'compliance.rule.create', 'compliance.rule.update', 'compliance.rule.delete', 'compliance.rule.restore', 'compliance.rule.purge', 'compliance.policy.create', 'compliance.policy.update', 'compliance.policy.delete', 'compliance.policy.restore', 'compliance.policy.purge', 'compliance.scan-schedule.create', 'compliance.scan-schedule.update', 'compliance.scan-schedule.delete', 'compliance.template.apply', 'compliance.scan.create', 'compliance.scan.cancel', 'compliance.scan.complete', 'compliance.subscription.auto-subscribe', 'compliance.notification-preference.update', 'registry.gc', 'registry.image.delete', 'registry.image.copy', 'registry.image.sign', 'registry.token.issue', 'registry.quarantine.credential.mint', 'message.announcement.create', 'message.delete', 'message.hide', 'message.unhide', 'message.restore', 'message.purge', 'message.update', 'message.attachment.upload', 'message.notify.internal', 'message.org.purge', 'support.case.open', 'support.case.reply', 'support.case.status', 'support.case.severity', 'support.case.assign', 'support.case.transfer', 'support.oncall.acknowledged', 'support.oncall.escalated', 'support.oncall.test', 'support.oncall.paged', 'support.contact.designate', 'support.contact.revoke', 'support.contact.upgrade', 'support.contact.downgrade', 'support.case.note', 'support.canned.write', 'billing.subscription.create', 'billing.subscription.update', 'billing.subscription.reactivate', 'billing.subscription.cancel', 'billing.subscription.delete', 'billing.tier.override', 'billing.support-floor.override', 'billing.support-incident.grant', 'billing.addon.add', 'billing.addon.remove', 'billing.addon.prune', 'billing.discount.generate', 'billing.discount.issue', 'billing.discount.apply', 'billing.discount.remove', 'billing.discount.revoke', 'billing.campaign.create', 'billing.campaign.update', 'billing.campaign.end', 'billing.promotion.create', 'billing.promotion.update', 'billing.promotion.revoke', 'billing.promotion.grant', 'billing.promotion.activate', 'billing.offer.sent', 'billing.offer.withdrawn', 'billing.offer.declined', 'billing.offer.dismissed', 'billing.offer.exclusion.set', 'billing.offer.exclusion.cleared', 'billing.offer.trigger', 'billing.credit.consumed', 'billing.credit.exhausted', 'billing.combo.expired', 'reporting.settings.update', 'reporting.deployment.outcome', 'reporting.retention.sync', 'reporting.report.definition.create', 'reporting.report.definition.update', 'reporting.report.definition.delete', 'reporting.report.ownership.transfer', 'reporting.report.published', 'reporting.report.republished', 'reporting.report.link.created', 'reporting.report.link.revoked', 'reporting.report.recipient.added', 'reporting.report.recipient.removed', 'reporting.report.policy.update', 'reporting.report.paused', 'reporting.report.resumed', 'reporting.report.run.compose', 'reporting.report.run.notes', 'reporting.report.run.summary', 'reporting.report.recipient.resend', 'reporting.report.recipient.verified', 'reporting.report.recipient.unsubscribed', 'reporting.ingest.batch', 'reporting.ingest.rejected', 'reporting.incident.record', 'authz.denied', 'ask.query', 'ask.agent.turn', 'ask.feedback', 'pipeline.ai.generate', 'plugin.ai.generate', 'publisher.create', 'publisher.update', 'publisher.terms.accept', 'publisher.verify.request', 'publisher.verify.approve', 'publisher.verify.reject', 'publisher.tier.change', 'publisher.suspend', 'publisher.unsuspend', 'publisher.transfer.request', 'publisher.transfer.accept', 'publisher.transfer.decline', 'publisher.transfer.approve', 'publisher.transfer.reject', 'publisher.profile-change.approve', 'publisher.profile-change.reject', 'plugin.request.submit', 'plugin.request.withdraw', 'plugin.request.approve', 'plugin.request.second-approve', 'plugin.request.reject', 'plugin.request.auto-approve', 'plugin.listing.publish', 'plugin.listing.update', 'plugin.listing.state.change', 'plugin.listing.pause', 'plugin.listing.unpause', 'plugin.version.pause', 'plugin.version.yank', 'plugin.version.unyank', 'toolchain.default.set', 'toolchain.default.initial', 'toolchain.default.restore', 'toolchain.rollout.update', 'toolchain.release.notes', 'toolchain.release.deprecate', 'toolchain.release.yank', 'toolchain.release.delete', 'toolchain.recovery.notify', 'toolchain.org_default.set', 'toolchain.org_default.clear', 'plugin.version.deprecate', 'plugin.version.prune', 'ecosystem.auto-approval-rule.create', 'ecosystem.auto-approval-rule.update', 'ecosystem.auto-approval-rule.delete', 'ecosystem.reserved-name.update', 'ecosystem.bootstrap.open', 'ecosystem.bootstrap.close', 'registry.image.publish', 'registry.image.resign', 'registry.image.yank', 'registry.image.gc', 'plugin.install.request', 'plugin.install.approve', 'plugin.install.deny', 'plugin.install.create', 'plugin.install.upgrade', 'plugin.install.change-request', 'plugin.install.change-approve', 'plugin.install.change-reject', 'plugin.install.remove', 'org.plugin-install-policy.update', 'plugin.shadowing.denied', 'plugin.review.create', 'plugin.review.update', 'plugin.review.delete', 'plugin.review.report', 'plugin.review.hold', 'plugin.review.release', 'plugin.review.remove', 'plugin.review.anonymize', 'plugin.review.reply.create', 'plugin.review.reply.update', 'plugin.review.reply.delete', 'plugin.submission.create', 'plugin.submission.verify', 'plugin.submission.gate-fail', 'plugin.submission.approve', 'plugin.submission.reject', 'plugin.submission.claim', 'plugin.submission.expire', 'plugin.advisory.create', 'plugin.advisory.update', 'plugin.advisory.publish', 'plugin.advisory.withdraw', 'plugin.security_notifications.update', 'plugin.security_notifications.external_email.verify', 'plugin.security_notifications.test', 'plugin.setup_image.promoted', 'plugin.setup_image.promote_refused', 'plugin.setup_image.kept', 'plugin.setup_image.discarded', 'pipeline.vuln.accepted', 'pipeline.vuln.false_positive', 'pipeline.vuln.reopened', 'pipeline.runtime_check.flagged', 'pipeline.plugin.upgraded', 'pipeline.security_report.upload'];
20
+ export declare const REMOTE_AUDIT_ACTIONS: readonly ['plugin.build.completed', 'plugin.build.failed', 'plugin.build.timeout', 'plugin.scan.skipped', 'plugin.vuln.waived', 'plugin.vuln.flagged', 'plugin.vuln.cleared', 'plugin.delete', 'plugin.restore', 'plugin.purge', 'plugin.update', 'plugin.upload', 'plugin.deploy', 'plugin.bulk.update', 'plugin.bulk.delete', 'plugin.dlq.purge', 'plugin.build.retry', 'plugin.dlq.replay', 'pipeline.create', 'pipeline.update', 'pipeline.delete', 'pipeline.restore', 'pipeline.purge', 'pipeline_template.create', 'pipeline_template.update', 'pipeline_template.delete', 'pipeline_template.restore', 'pipeline_template.purge', 'pipeline.execution.start', 'pipeline.execution.cancel', 'pipeline.registry.register', 'pipeline.registry.deregister', 'quota.reset', 'quota.limit.update', 'quota.delete', 'quota.notice_settings.update', 'compliance.exemption.approve', 'compliance.exemption.revoke', 'compliance.exemption.request', 'compliance.exemption.reject', 'compliance.exemption.expire', 'compliance.rule.toggle', 'compliance.rule.create', 'compliance.rule.update', 'compliance.rule.delete', 'compliance.rule.restore', 'compliance.rule.purge', 'compliance.policy.create', 'compliance.policy.update', 'compliance.policy.delete', 'compliance.policy.restore', 'compliance.policy.purge', 'compliance.scan-schedule.create', 'compliance.scan-schedule.update', 'compliance.scan-schedule.delete', 'compliance.template.apply', 'compliance.scan.create', 'compliance.scan.cancel', 'compliance.scan.complete', 'compliance.subscription.auto-subscribe', 'compliance.notification-preference.update', 'registry.gc', 'registry.image.delete', 'registry.image.copy', 'registry.image.sign', 'registry.token.issue', 'registry.quarantine.credential.mint', 'message.announcement.create', 'message.delete', 'message.hide', 'message.unhide', 'message.restore', 'message.purge', 'message.update', 'message.attachment.upload', 'message.notify.internal', 'message.org.purge', 'support.case.open', 'support.case.reply', 'support.case.status', 'support.case.severity', 'support.case.assign', 'support.case.transfer', 'support.oncall.acknowledged', 'support.oncall.escalated', 'support.oncall.test', 'support.oncall.paged', 'support.contact.designate', 'support.contact.revoke', 'support.contact.upgrade', 'support.contact.downgrade', 'support.case.note', 'support.canned.write', 'billing.subscription.create', 'billing.subscription.update', 'billing.subscription.reactivate', 'billing.subscription.cancel', 'billing.subscription.delete', 'billing.tier.override', 'billing.support-floor.override', 'billing.support-incident.grant', 'billing.addon.add', 'billing.addon.remove', 'billing.addon.prune', 'billing.discount.generate', 'billing.discount.issue', 'billing.discount.apply', 'billing.discount.remove', 'billing.discount.revoke', 'billing.campaign.create', 'billing.campaign.update', 'billing.campaign.end', 'billing.promotion.create', 'billing.promotion.update', 'billing.promotion.revoke', 'billing.promotion.grant', 'billing.promotion.activate', 'billing.offer.sent', 'billing.offer.withdrawn', 'billing.offer.declined', 'billing.offer.dismissed', 'billing.offer.exclusion.set', 'billing.offer.exclusion.cleared', 'billing.offer.trigger', 'billing.credit.consumed', 'billing.credit.exhausted', 'billing.combo.expired', 'reporting.settings.update', 'reporting.deployment.outcome', 'reporting.retention.sync', 'reporting.report.definition.create', 'reporting.report.definition.update', 'reporting.report.definition.delete', 'reporting.report.ownership.transfer', 'reporting.report.published', 'reporting.report.republished', 'reporting.report.redelivered', 'reporting.report.link.created', 'reporting.report.link.revoked', 'reporting.report.recipient.added', 'reporting.report.recipient.removed', 'reporting.report.policy.update', 'reporting.report.paused', 'reporting.report.resumed', 'reporting.report.run.compose', 'reporting.report.run.notes', 'reporting.report.run.summary', 'reporting.report.recipient.resend', 'reporting.report.recipient.verified', 'reporting.report.recipient.unsubscribed', 'reporting.ingest.batch', 'reporting.ingest.rejected', 'reporting.incident.record', 'authz.denied', 'ask.query', 'ask.agent.turn', 'ask.feedback', 'pipeline.ai.generate', 'plugin.ai.generate', 'publisher.create', 'publisher.update', 'publisher.terms.accept', 'publisher.verify.request', 'publisher.verify.approve', 'publisher.verify.reject', 'publisher.tier.change', 'publisher.suspend', 'publisher.unsuspend', 'publisher.transfer.request', 'publisher.transfer.accept', 'publisher.transfer.decline', 'publisher.transfer.approve', 'publisher.transfer.reject', 'publisher.profile-change.approve', 'publisher.profile-change.reject', 'plugin.request.submit', 'plugin.request.withdraw', 'plugin.request.approve', 'plugin.request.second-approve', 'plugin.request.reject', 'plugin.request.auto-approve', 'plugin.listing.publish', 'plugin.listing.update', 'plugin.listing.state.change', 'plugin.listing.pause', 'plugin.listing.unpause', 'plugin.version.pause', 'plugin.version.yank', 'plugin.version.unyank', 'toolchain.default.set', 'toolchain.default.initial', 'toolchain.default.restore', 'toolchain.rollout.update', 'toolchain.release.notes', 'toolchain.release.deprecate', 'toolchain.release.yank', 'toolchain.release.delete', 'toolchain.recovery.notify', 'toolchain.org_default.set', 'toolchain.org_default.clear', 'plugin.version.deprecate', 'plugin.version.prune', 'ecosystem.auto-approval-rule.create', 'ecosystem.auto-approval-rule.update', 'ecosystem.auto-approval-rule.delete', 'ecosystem.reserved-name.update', 'ecosystem.bootstrap.open', 'ecosystem.bootstrap.close', 'registry.image.publish', 'registry.image.resign', 'registry.image.yank', 'registry.image.gc', 'plugin.install.request', 'plugin.install.approve', 'plugin.install.deny', 'plugin.install.create', 'plugin.install.upgrade', 'plugin.install.change-request', 'plugin.install.change-approve', 'plugin.install.change-reject', 'plugin.install.remove', 'org.plugin-install-policy.update', 'plugin.shadowing.denied', 'plugin.review.create', 'plugin.review.update', 'plugin.review.delete', 'plugin.review.report', 'plugin.review.hold', 'plugin.review.release', 'plugin.review.remove', 'plugin.review.anonymize', 'plugin.review.reply.create', 'plugin.review.reply.update', 'plugin.review.reply.delete', 'plugin.submission.create', 'plugin.submission.verify', 'plugin.submission.gate-fail', 'plugin.submission.approve', 'plugin.submission.reject', 'plugin.submission.claim', 'plugin.submission.expire', 'plugin.advisory.create', 'plugin.advisory.update', 'plugin.advisory.publish', 'plugin.advisory.withdraw', 'plugin.security_notifications.update', 'plugin.security_notifications.external_email.verify', 'plugin.security_notifications.test', 'plugin.setup_image.promoted', 'plugin.setup_image.promote_refused', 'plugin.setup_image.kept', 'plugin.setup_image.discarded', 'pipeline.vuln.accepted', 'pipeline.vuln.false_positive', 'pipeline.vuln.reopened', 'pipeline.runtime_check.flagged', 'pipeline.plugin.upgraded', 'pipeline.security_report.upload', 'pipeline.security_report.delete'];
21
21
  export type RemoteAuditAction = typeof REMOTE_AUDIT_ACTIONS[number];
22
22
  /** Whether `value` is an action a remote service may emit (the ingest allow-list). */
23
23
  export declare function isRemoteAuditAction(value: string): value is RemoteAuditAction;