@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
@@ -1,7 +1,10 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- /** The field each preference key is stored under in the user's per-org
4
- * `notifications.ecosystem` preferences (platform `UserPreferences`). */
3
+ /**
4
+ * Per-user EMAIL opt-out keys (in-app is never optional), each mapped to the
5
+ * field it is stored under in the user's per-org `notifications.ecosystem`
6
+ * preferences (platform `UserPreferences`).
7
+ */
5
8
  export const ECOSYSTEM_EMAIL_PREFERENCE_FIELDS = {
6
9
  'ecosystem.reviews.email': 'reviewsEmail',
7
10
  'ecosystem.upgrades.email': 'upgradesEmail',
@@ -10,8 +13,10 @@ export const ECOSYSTEM_EMAIL_PREFERENCE_FIELDS = {
10
13
  };
11
14
  /** Every stored ecosystem email-preference field. */
12
15
  export const ECOSYSTEM_EMAIL_PREFERENCE_FIELD_NAMES = Object.values(ECOSYSTEM_EMAIL_PREFERENCE_FIELDS);
13
- /** The notification event table, as data. */
14
- export const ECOSYSTEM_NOTIFICATION_EVENTS = {
16
+ /** How often a batched email is flushed, with the digest subject's label. */
17
+ const DIGEST_CADENCE_LABEL = { hourly: 'Hourly', daily: 'Daily', weekly: 'Weekly' };
18
+ /** The notification event table, as data (keyed by event number). */
19
+ const EVENTS = {
15
20
  N1: { description: 'Anonymous submission received (magic link)', channels: ['email'], preference: null, allowsAddress: true },
16
21
  N2: { description: 'Submission verified, entered the moderation queue', channels: ['in_app', 'email'], preference: 'ecosystem.moderationDigest.email', digest: 'daily' },
17
22
  N3: { description: 'Submission failed automated gates', channels: ['email'], preference: null, allowsAddress: true },
@@ -61,18 +66,22 @@ export const ECOSYSTEM_NOTIFICATION_EVENTS = {
61
66
  // pipelines are building on something it should move off.
62
67
  N34: { description: 'Managed toolchain: a release you use was yanked, deprecated, found vulnerable or fell behind; the platform default moved; your org joined a canary; or a pipeline needs a re-deploy to recover', channels: ['in_app', 'email'], preference: null },
63
68
  };
69
+ /** The notification event table, as data. */
70
+ export const ECOSYSTEM_NOTIFICATION_EVENTS = EVENTS;
64
71
  /** Whether `value` is a notification event number. */
65
72
  export function isEcosystemNotificationEvent(value) {
66
73
  return typeof value === 'string' && Object.prototype.hasOwnProperty.call(ECOSYSTEM_NOTIFICATION_EVENTS, value);
67
74
  }
75
+ /** Org-local permissions an {@link EcosystemRecipientSpec} `org_permission` rule may name. */
76
+ const ORG_RECIPIENT_PERMISSIONS = ['publishers:manage', 'plugin_installs:manage', 'plugins:write', 'pipelines:write', 'toolchain:manage'];
77
+ /** System-org permissions a `moderators` rule may name. */
78
+ const MODERATOR_PERMISSIONS = ['plugins:moderate', 'publishers:verify'];
68
79
  /** Hard caps, matching the message service's own limits. */
69
80
  export const ECOSYSTEM_NOTIFY_SUBJECT_MAX = 500;
70
81
  export const ECOSYSTEM_NOTIFY_TEXT_MAX = 10000;
71
82
  const MAX_RECIPIENT_RULES = 50;
72
- const ORG_PERMISSIONS = ['publishers:manage', 'plugin_installs:manage', 'plugins:write', 'pipelines:write', 'toolchain:manage'];
73
83
  /** At most this many users in one `org_members` rule. */
74
84
  export const ECOSYSTEM_ORG_MEMBERS_MAX = 100;
75
- const MODERATOR_PERMISSIONS = ['plugins:moderate', 'publishers:verify'];
76
85
  const EMAIL_SHAPE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
77
86
  function nonEmptyString(v, max = 255) {
78
87
  return typeof v === 'string' && v.trim().length > 0 && v.length <= max;
@@ -91,7 +100,7 @@ function parseRecipient(raw, spec) {
91
100
  case 'org_permission':
92
101
  if (!nonEmptyString(r.orgId))
93
102
  return 'org_permission recipient needs orgId';
94
- if (typeof r.permission !== 'string' || !ORG_PERMISSIONS.includes(r.permission))
103
+ if (typeof r.permission !== 'string' || !ORG_RECIPIENT_PERMISSIONS.includes(r.permission))
95
104
  return 'org_permission recipient names an unsupported permission';
96
105
  return {
97
106
  kind: 'org_permission',
@@ -241,10 +250,10 @@ export function renderEcosystemDigest(event, items) {
241
250
  if (items.length === 1)
242
251
  return items[0];
243
252
  const spec = ECOSYSTEM_NOTIFICATION_EVENTS[event];
244
- const cadence = spec.digest === 'hourly' ? 'Hourly' : spec.digest === 'weekly' ? 'Weekly' : 'Daily';
253
+ const cadence = DIGEST_CADENCE_LABEL[spec.digest ?? 'daily'];
245
254
  return {
246
255
  subject: `${cadence} digest: ${items.length} × ${spec.description}`.slice(0, ECOSYSTEM_NOTIFY_SUBJECT_MAX),
247
256
  text: items.map((i) => `• ${i.subject}`).join('\n').slice(0, ECOSYSTEM_NOTIFY_TEXT_MAX),
248
257
  };
249
258
  }
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLW5vdGlmaWNhdGlvbnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9lY29zeXN0ZW0tbm90aWZpY2F0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBZ0N0QzswRUFDMEU7QUFDMUUsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQThFO0lBQzFILHlCQUF5QixFQUFFLGNBQWM7SUFDekMsMEJBQTBCLEVBQUUsZUFBZTtJQUMzQywwQkFBMEIsRUFBRSxlQUFlO0lBQzNDLGtDQUFrQyxFQUFFLHVCQUF1QjtDQUM1RCxDQUFDO0FBS0YscURBQXFEO0FBQ3JELE1BQU0sQ0FBQyxNQUFNLHNDQUFzQyxHQUNqRCxNQUFNLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7QUF3Qm5ELDZDQUE2QztBQUM3QyxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBdUU7SUFDL0csRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLDRDQUE0QyxFQUFFLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRTtJQUM3SCxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsbURBQW1ELEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFO0lBQ3hLLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxtQ0FBbUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUU7SUFDcEgsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLGlDQUFpQyxFQUFFLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRTtJQUNsSCxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsa0NBQWtDLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7SUFDeEcsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLDBDQUEwQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRTtJQUMvSixFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsMkNBQTJDLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7SUFDakgsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLDBEQUEwRCxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO0lBQ2hJLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSw4QkFBOEIsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTtJQUNwRyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsNkRBQTZELEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7SUFDcEksR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLDhDQUE4QyxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsMEJBQTBCLEVBQUU7SUFDM0ksR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLDRCQUE0QixFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsMEJBQTBCLEVBQUU7SUFDekgsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLG1EQUFtRCxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtJQUNsSyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsb0NBQW9DLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSwwQkFBMEIsRUFBRTtJQUNqSSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsbUNBQW1DLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO0lBQ2pKLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxrQ0FBa0MsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLHlCQUF5QixFQUFFO0lBQzlILEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxzQ0FBc0MsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7SUFDNUosR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLHlCQUF5QixFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO0lBQ2hHLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxvQ0FBb0MsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTtJQUMzRyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsMENBQTBDLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7SUFDakgsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGlDQUFpQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO0lBQ3hHLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO0lBQ3BGLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxxREFBcUQsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTtJQUM1SCxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFO0lBQ2pKLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxzQ0FBc0MsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTtJQUM3RyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsNENBQTRDLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLDBCQUEwQixFQUFFO0lBQ2hJLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxpREFBaUQsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLDBCQUEwQixFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUU7SUFDaEssR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLG1DQUFtQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO0lBQzFHLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxnQ0FBZ0MsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTtJQUN2Ryw0RUFBNEU7SUFDNUUsK0VBQStFO0lBQy9FLDRFQUE0RTtJQUM1RSw2RUFBNkU7SUFDN0UsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLHdEQUF3RCxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUU7SUFDcEosR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLG9EQUFvRCxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUU7SUFDaEosK0VBQStFO0lBQy9FLCtFQUErRTtJQUMvRSw0RUFBNEU7SUFDNUUseUVBQXlFO0lBQ3pFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxtREFBbUQsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFO0lBQy9JLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSwrQ0FBK0MsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFO0lBQzNJLCtFQUErRTtJQUMvRSw4RUFBOEU7SUFDOUUsMkVBQTJFO0lBQzNFLHVFQUF1RTtJQUN2RSx5RUFBeUU7SUFDekUsMERBQTBEO0lBQzFELEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxnTUFBZ00sRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTtDQUN4USxDQUFDO0FBRUYsc0RBQXNEO0FBQ3RELE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxLQUFjO0lBQ3pELE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNqSCxDQUFDO0FBcURELDREQUE0RDtBQUM1RCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxHQUFHLENBQUM7QUFDaEQsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsS0FBSyxDQUFDO0FBQy9DLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBRS9CLE1BQU0sZUFBZSxHQUFzQixDQUFDLG1CQUFtQixFQUFFLHdCQUF3QixFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ25KLHlEQUF5RDtBQUN6RCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7QUFDN0MsTUFBTSxxQkFBcUIsR0FBc0IsQ0FBQyxrQkFBa0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBQzNGLE1BQU0sV0FBVyxHQUFHLDRCQUE0QixDQUFDO0FBRWpELFNBQVMsY0FBYyxDQUFDLENBQVUsRUFBRSxHQUFHLEdBQUcsR0FBRztJQUMzQyxPQUFPLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQztBQUN6RSxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsR0FBWSxFQUFFLElBQXdCO0lBQzVELElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtRQUFFLE9BQU8sa0NBQWtDLENBQUM7SUFDL0UsTUFBTSxDQUFDLEdBQUcsR0FBOEIsQ0FBQztJQUN6QyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNmLEtBQUssTUFBTTtZQUNULElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFBRSxPQUFPLDZCQUE2QixDQUFDO1lBQ3BFLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFBRSxPQUFPLHVDQUF1QyxDQUFDO1lBQ3RHLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDOUYsS0FBSyxnQkFBZ0I7WUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUFFLE9BQU8sc0NBQXNDLENBQUM7WUFDNUUsSUFBSSxPQUFPLENBQUMsQ0FBQyxVQUFVLEtBQUssUUFBUSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO2dCQUFFLE9BQU8sMERBQTBELENBQUM7WUFDbkosT0FBTztnQkFDTCxJQUFJLEVBQUUsZ0JBQWdCO2dCQUN0QixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7Z0JBQ2QsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUE2QztnQkFDM0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxlQUFlLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ2pFLENBQUM7UUFDSixLQUFLLGFBQWEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFBRSxPQUFPLG1DQUFtQyxDQUFDO1lBQ3pFLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUUsT0FBTyx1REFBdUQsQ0FBQztZQUMxSixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcseUJBQXlCO2dCQUFFLE9BQU8sdUNBQXVDLHlCQUF5QixRQUFRLENBQUM7WUFDOUgsT0FBTyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFpQixDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNGLENBQUM7UUFDRCxLQUFLLFlBQVksRUFBRSxDQUFDO1lBQ2xCLElBQUksT0FBTyxDQUFDLENBQUMsVUFBVSxLQUFLLFFBQVEsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO2dCQUFFLE9BQU8sc0RBQXNELENBQUM7WUFDckosSUFBSSxDQUFDLENBQUMscUJBQXFCLEtBQUssU0FBUyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQztnQkFBRSxPQUFPLHdDQUF3QyxDQUFDO1lBQ3ZJLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUM7WUFDakMsSUFBSSxPQUFPLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUUsT0FBTyx3Q0FBd0MsQ0FBQztZQUNwSixPQUFPO2dCQUNMLElBQUksRUFBRSxZQUFZO2dCQUNsQixVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQTBDO2dCQUN4RCxHQUFHLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxxQkFBK0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hHLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLE9BQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQzVELENBQUM7UUFDSixDQUFDO1FBQ0QsS0FBSyxhQUFhO1lBQ2hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUM7UUFDakMsS0FBSyxTQUFTO1lBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO2dCQUFFLE9BQU8sMEZBQTBGLENBQUM7WUFDM0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUFFLE9BQU8sdUNBQXVDLENBQUM7WUFDaEgsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztRQUNsRTtZQUNFLE9BQU8sd0JBQXdCLENBQUM7SUFDcEMsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLDJCQUEyQixDQUFDLElBQWE7SUFDdkQsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTyx3QkFBd0IsQ0FBQztJQUN2RSxNQUFNLENBQUMsR0FBRyxJQUErQixDQUFDO0lBQzFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyw4QkFBOEIsQ0FBQztJQUNsRixNQUFNLElBQUksR0FBRyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLDRCQUE0QixDQUFDO1FBQUUsT0FBTyw0QkFBNEIsNEJBQTRCLEdBQUcsQ0FBQztJQUNqSSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUseUJBQXlCLENBQUM7UUFBRSxPQUFPLHlCQUF5Qix5QkFBeUIsR0FBRyxDQUFDO0lBQ3JILElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxzQ0FBc0MsQ0FBQztJQUM3RyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLG1CQUFtQjtRQUFFLE9BQU8sV0FBVyxtQkFBbUIsa0JBQWtCLENBQUM7SUFDdkcsTUFBTSxVQUFVLEdBQTZCLEVBQUUsQ0FBQztJQUNoRCxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQixNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pDLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUTtZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQzlDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQUksUUFBb0QsQ0FBQztJQUN6RCxJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLG9DQUFvQyxDQUFDO1FBQ3ZHLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQWlDLENBQUMsQ0FBQyxDQUFDO1FBQ2pHLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQUUsT0FBTyxTQUFTLENBQUMsQ0FBQyxLQUFLLHlCQUF5QixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDckYsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBMEMsQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUNELElBQUksQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVM7UUFBRSxPQUFPLDZCQUE2QixDQUFDO0lBQ3hHLE9BQU87UUFDTCxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7UUFDZCxVQUFVO1FBQ1YsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO1FBQ3pCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtRQUNuQixHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3JELENBQUM7QUFDSixDQUFDO0FBRUQsd0VBQXdFO0FBQ3hFLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQUMsQ0FBQztBQUUzQzs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLE9BQStCLEVBQUUsR0FBRyxHQUFTLElBQUksSUFBSSxFQUFFO0lBQzdGLE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLElBQUksT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuQyxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxDQUFDLENBQUMsV0FBVyxDQUFDLHlCQUF5QixFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEQsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtRQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25FLElBQUksT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLHNDQUFzQztRQUN0QyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDO1lBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQVlEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsNEJBQTRCLENBQUMsS0FlNUM7SUFDQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztJQUN2RCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ25ELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksbUJBQW1CLENBQUM7SUFDL0MsNkVBQTZFO0lBQzdFLG9FQUFvRTtJQUNwRSx5RUFBeUU7SUFDekUsTUFBTSxTQUFTLEdBQUcsSUFBSSxLQUFLLG1CQUFtQixDQUFDO0lBQy9DLE9BQU87UUFDTCxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxRQUFRLElBQUksUUFBUSxJQUFJLE9BQU87UUFDckQsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ2YsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxRQUFRLEVBQUUsR0FBRztrQkFDaEQsQ0FBQyxTQUFTO29CQUNWLENBQUMsQ0FBQyxrR0FBa0c7MEJBQ2hHLHlEQUF5RDtvQkFDN0QsQ0FBQyxDQUFDLDBDQUEwQyxDQUFDO2tCQUM3QyxzRkFBc0Y7WUFDMUYsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxRQUFRLEVBQUUsRUFBRTtrQkFDL0MsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLHdFQUF3RSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7S0FDbkcsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLEtBQW1DLEVBQ25DLEtBQThDO0lBRTlDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFFLENBQUM7SUFDekMsTUFBTSxJQUFJLEdBQUcsNkJBQTZCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ3BHLE9BQU87UUFDTCxPQUFPLEVBQUUsR0FBRyxPQUFPLFlBQVksS0FBSyxDQUFDLE1BQU0sTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSw0QkFBNEIsQ0FBQztRQUMxRyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSx5QkFBeUIsQ0FBQztLQUN4RixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBwbHVnaW4tZWNvc3lzdGVtIG5vdGlmaWNhdGlvbiBjb250cmFjdCAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCksXG4gKiBzaGFyZWQgYnkgdGhlIHNlbmRlciAodGhlIHBsdWdpbiBzZXJ2aWNlJ3MgZW5xdWV1ZSBBUEkgYW5kIGRpZ2VzdFxuICogZGlzcGF0Y2hlcikgYW5kIHRoZSByZWxheSAocGxhdGZvcm0gYFBPU1QgL2ludGVybmFsL25vdGlmeS1lbWFpbGApLlxuICpcbiAqIFJlY2lwaWVudHMgdHJhdmVsIGFzIFJVTEVTLCBuZXZlciBhcyBsaXN0czogcGxhdGZvcm0gcmVzb2x2ZXMgZWFjaFxuICoge0BsaW5rIEVjb3N5c3RlbVJlY2lwaWVudFNwZWN9IGFnYWluc3QgaXRzIHVzZXIvUm9sZSBkaXJlY3RvcnkgQVQgU0VORCBUSU1FLFxuICogc28gYSBkaWdlc3QgdGhhdCBmbHVzaGVzIHRvbW9ycm93IHJlYWNoZXMgdG9tb3Jyb3cncyBtb2RlcmF0b3JzLCB0aGUgcGx1Z2luXG4gKiBzZXJ2aWNlIG5ldmVyIGhhbmRsZXMgYW4gZW1haWwgYWRkcmVzcyBvciBhIG1lbWJlcnNoaXAgbGlzdCwgYW5kIGEgcHVibGlzaGVyXG4gKiBjYW4gbmV2ZXIgbGVhcm4gd2hvIGluc3RhbGxlZCB0aGVpciBwbHVnaW4gKHRoZSByZWxheSBtYWlscyBlYWNoIHJlY2lwaWVudFxuICogaW5kaXZpZHVhbGx5IOKAlCBubyBzaGFyZWQgVG86IGxpbmUpLlxuICovXG5cbi8qKiBBIG5vdGlmaWNhdGlvbiBldmVudCBudW1iZXIuICovXG5leHBvcnQgdHlwZSBFY29zeXN0ZW1Ob3RpZmljYXRpb25FdmVudElkID1cbiAgfCAnTjEnIHwgJ04yJyB8ICdOMycgfCAnTjQnIHwgJ041JyB8ICdONicgfCAnTjcnIHwgJ044JyB8ICdOOScgfCAnTjEwJ1xuICB8ICdOMTEnIHwgJ04xMicgfCAnTjEzJyB8ICdOMTQnIHwgJ04xNScgfCAnTjE2JyB8ICdOMTcnIHwgJ04xOCcgfCAnTjE5JyB8ICdOMjAnXG4gIHwgJ04yMScgfCAnTjIyJyB8ICdOMjMnIHwgJ04yNCcgfCAnTjI1JyB8ICdOMjYnIHwgJ04yNycgfCAnTjI4JyB8ICdOMjknXG4gIHwgJ04zMCcgfCAnTjMxJyB8ICdOMzInIHwgJ04zMycgfCAnTjM0JztcblxuLyoqIEEgZGVsaXZlcnkgY2hhbm5lbC4gSW4tYXBwIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGg7IGVtYWlsIGlzIHRoZSBjb3VydGVzeSBjb3B5LiAqL1xuZXhwb3J0IHR5cGUgRWNvc3lzdGVtTm90aWZpY2F0aW9uQ2hhbm5lbCA9ICdpbl9hcHAnIHwgJ2VtYWlsJztcblxuLyoqIEEgcGVyLXVzZXIgRU1BSUwgb3B0LW91dCBrZXkuIEluLWFwcCBpcyBuZXZlciBvcHRpb25hbC4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbUVtYWlsUHJlZmVyZW5jZSA9XG4gIHwgJ2Vjb3N5c3RlbS5yZXZpZXdzLmVtYWlsJ1xuICB8ICdlY29zeXN0ZW0udXBncmFkZXMuZW1haWwnXG4gIHwgJ2Vjb3N5c3RlbS5pbnN0YWxscy5lbWFpbCdcbiAgfCAnZWNvc3lzdGVtLm1vZGVyYXRpb25EaWdlc3QuZW1haWwnO1xuXG4vKiogVGhlIGZpZWxkIGVhY2ggcHJlZmVyZW5jZSBrZXkgaXMgc3RvcmVkIHVuZGVyIGluIHRoZSB1c2VyJ3MgcGVyLW9yZ1xuICogIGBub3RpZmljYXRpb25zLmVjb3N5c3RlbWAgcHJlZmVyZW5jZXMgKHBsYXRmb3JtIGBVc2VyUHJlZmVyZW5jZXNgKS4gKi9cbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fRU1BSUxfUFJFRkVSRU5DRV9GSUVMRFM6IFJlYWRvbmx5PFJlY29yZDxFY29zeXN0ZW1FbWFpbFByZWZlcmVuY2UsIEVjb3N5c3RlbUVtYWlsUHJlZmVyZW5jZUZpZWxkPj4gPSB7XG4gICdlY29zeXN0ZW0ucmV2aWV3cy5lbWFpbCc6ICdyZXZpZXdzRW1haWwnLFxuICAnZWNvc3lzdGVtLnVwZ3JhZGVzLmVtYWlsJzogJ3VwZ3JhZGVzRW1haWwnLFxuICAnZWNvc3lzdGVtLmluc3RhbGxzLmVtYWlsJzogJ2luc3RhbGxzRW1haWwnLFxuICAnZWNvc3lzdGVtLm1vZGVyYXRpb25EaWdlc3QuZW1haWwnOiAnbW9kZXJhdGlvbkRpZ2VzdEVtYWlsJyxcbn07XG5cbi8qKiBTdG9yZWQgZmllbGQgbmFtZXMgb2YgdGhlIGVjb3N5c3RlbSBlbWFpbCBwcmVmZXJlbmNlcyAoYWxsIGRlZmF1bHQgYHRydWVgKS4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbUVtYWlsUHJlZmVyZW5jZUZpZWxkID0gJ3Jldmlld3NFbWFpbCcgfCAndXBncmFkZXNFbWFpbCcgfCAnaW5zdGFsbHNFbWFpbCcgfCAnbW9kZXJhdGlvbkRpZ2VzdEVtYWlsJztcblxuLyoqIEV2ZXJ5IHN0b3JlZCBlY29zeXN0ZW0gZW1haWwtcHJlZmVyZW5jZSBmaWVsZC4gKi9cbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fRU1BSUxfUFJFRkVSRU5DRV9GSUVMRF9OQU1FUzogcmVhZG9ubHkgRWNvc3lzdGVtRW1haWxQcmVmZXJlbmNlRmllbGRbXSA9XG4gIE9iamVjdC52YWx1ZXMoRUNPU1lTVEVNX0VNQUlMX1BSRUZFUkVOQ0VfRklFTERTKTtcblxuLyoqIEhvdyBvZnRlbiBhIGJhdGNoZWQgZW1haWwgaXMgZmx1c2hlZC4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbURpZ2VzdENhZGVuY2UgPSAnaG91cmx5JyB8ICdkYWlseScgfCAnd2Vla2x5JztcblxuLyoqIE9uZSBldmVudCdzIGRlbGl2ZXJ5IHJ1bGVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY29zeXN0ZW1FdmVudFNwZWMge1xuICAvKiogT25lLWxpbmUgZGVzY3JpcHRpb24gKGRvY3MsIGxvZ3MpLiAqL1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogQ2hhbm5lbHMgdGhlIGV2ZW50IGlzIGRlbGl2ZXJlZCBvbi4gKi9cbiAgY2hhbm5lbHM6IHJlYWRvbmx5IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWxbXTtcbiAgLyoqXG4gICAqIEVtYWlsIG9wdC1vdXQga2V5LCBvciBgbnVsbGAgd2hlbiB0aGUgZW1haWwgaXMgVFJBTlNBQ1RJT05BTCAvIHNlY3VyaXR5XG4gICAqIChOMSwgTjPigJNONSwgTjfigJNOMTAsIE4xOOKAk04yMywgTjI1LCBOMjjigJNOMzQgY2FuJ3QgYmUgdHVybmVkIG9mZikuXG4gICAqL1xuICBwcmVmZXJlbmNlOiBFY29zeXN0ZW1FbWFpbFByZWZlcmVuY2UgfCBudWxsO1xuICAvKiogV2hlbiB0aGUgZW1haWwgaXMgYmF0Y2hlZCByYXRoZXIgdGhhbiBpbW1lZGlhdGUsIGl0cyBjYWRlbmNlLiAqL1xuICBkaWdlc3Q/OiBFY29zeXN0ZW1EaWdlc3RDYWRlbmNlO1xuICAvKiogQWxsb3dlZCB0byBhZGRyZXNzIGEgcmF3IGVtYWlsOiB0aGUgYW5vbnltb3VzIFNVQk1JVFRFUiAodGhlXG4gICAqICB0cmFuc2FjdGlvbmFsIHN1Ym1pc3Npb24gbm90aWNlcykgYW5kIGFuIG9yZydzIFZFUklGSUVEIGV4dGVybmFsXG4gICAqICBzZWN1cml0eSBhZGRyZXNzICh0aGUgcGx1Z2luIHNlY3VyaXR5IG5vdGljZXMgTjMw4oCTTjMzKS4gKi9cbiAgYWxsb3dzQWRkcmVzcz86IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgbm90aWZpY2F0aW9uIGV2ZW50IHRhYmxlLCBhcyBkYXRhLiAqL1xuZXhwb3J0IGNvbnN0IEVDT1NZU1RFTV9OT1RJRklDQVRJT05fRVZFTlRTOiBSZWFkb25seTxSZWNvcmQ8RWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnRJZCwgRWNvc3lzdGVtRXZlbnRTcGVjPj4gPSB7XG4gIE4xOiB7IGRlc2NyaXB0aW9uOiAnQW5vbnltb3VzIHN1Ym1pc3Npb24gcmVjZWl2ZWQgKG1hZ2ljIGxpbmspJywgY2hhbm5lbHM6IFsnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICBOMjogeyBkZXNjcmlwdGlvbjogJ1N1Ym1pc3Npb24gdmVyaWZpZWQsIGVudGVyZWQgdGhlIG1vZGVyYXRpb24gcXVldWUnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5tb2RlcmF0aW9uRGlnZXN0LmVtYWlsJywgZGlnZXN0OiAnZGFpbHknIH0sXG4gIE4zOiB7IGRlc2NyaXB0aW9uOiAnU3VibWlzc2lvbiBmYWlsZWQgYXV0b21hdGVkIGdhdGVzJywgY2hhbm5lbHM6IFsnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICBONDogeyBkZXNjcmlwdGlvbjogJ1N1Ym1pc3Npb24gYXBwcm92ZWQgb3IgcmVqZWN0ZWQnLCBjaGFubmVsczogWydlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsLCBhbGxvd3NBZGRyZXNzOiB0cnVlIH0sXG4gIE41OiB7IGRlc2NyaXB0aW9uOiAnU3VibWlzc2lvbiBjbGFpbWVkIGJ5IGFuIGFjY291bnQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBONjogeyBkZXNjcmlwdGlvbjogJ1ZlcmlmaWVkLXB1Ymxpc2hlciBhcHBsaWNhdGlvbiBzdWJtaXR0ZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5tb2RlcmF0aW9uRGlnZXN0LmVtYWlsJywgZGlnZXN0OiAnZGFpbHknIH0sXG4gIE43OiB7IGRlc2NyaXB0aW9uOiAnVmVyaWZpZWQgYXBwbGljYXRpb24gYXBwcm92ZWQgb3IgcmVqZWN0ZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOODogeyBkZXNjcmlwdGlvbjogJ01vZGVyYXRpb24gYWN0aW9uIG9uIGEgbGlzdGluZyAoc3VzcGVuZCwgeWFuaywgdGFrZWRvd24pJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjk6IHsgZGVzY3JpcHRpb246ICdPd25lcnNoaXAgdHJhbnNmZXIgcmVxdWVzdGVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjEwOiB7IGRlc2NyaXB0aW9uOiAnT3duZXJzaGlwIHRyYW5zZmVyIGFjY2VwdGVkLCBkZWNsaW5lZCwgYXBwcm92ZWQgb3IgcmVqZWN0ZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOMTE6IHsgZGVzY3JpcHRpb246ICdJbnN0YWxsIHJlcXVlc3RlZCAocG9saWN5IHJlcXVpcmVzIGFwcHJvdmFsKScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLmluc3RhbGxzLmVtYWlsJyB9LFxuICBOMTI6IHsgZGVzY3JpcHRpb246ICdJbnN0YWxsIGFwcHJvdmVkIG9yIGRlbmllZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLmluc3RhbGxzLmVtYWlsJyB9LFxuICBOMTM6IHsgZGVzY3JpcHRpb246ICdOZXcgdmVyc2lvbiBhdmFpbGFibGUgd2l0aGluIGFuIGluc3RhbGxcXCdzIHBvbGljeScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnVwZ3JhZGVzLmVtYWlsJywgZGlnZXN0OiAnd2Vla2x5JyB9LFxuICBOMTQ6IHsgZGVzY3JpcHRpb246ICdMaXN0aW5nIGRlcHJlY2F0ZWQgb3IgdW5tYWludGFpbmVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0udXBncmFkZXMuZW1haWwnIH0sXG4gIE4xNTogeyBkZXNjcmlwdGlvbjogJ05ldyBvciBlZGl0ZWQgcmV2aWV3IG9uIGEgbGlzdGluZycsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnJldmlld3MuZW1haWwnLCBkaWdlc3Q6ICdob3VybHknIH0sXG4gIE4xNjogeyBkZXNjcmlwdGlvbjogJ1B1Ymxpc2hlciByZXBsaWVkIHRvIHlvdXIgcmV2aWV3JywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0ucmV2aWV3cy5lbWFpbCcgfSxcbiAgTjE3OiB7IGRlc2NyaXB0aW9uOiAnUmV2aWV3IGhlbGQgKHJlcG9ydHMsIGJ1cnN0LCBmaWx0ZXIpJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0ubW9kZXJhdGlvbkRpZ2VzdC5lbWFpbCcsIGRpZ2VzdDogJ2RhaWx5JyB9LFxuICBOMTg6IHsgZGVzY3JpcHRpb246ICdZb3VyIHJldmlldyB3YXMgcmVtb3ZlZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4xOTogeyBkZXNjcmlwdGlvbjogJ1JldmlldyBmbGFnZ2VkIGFzIGEgc2VjdXJpdHkgaXNzdWUnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOMjA6IHsgZGVzY3JpcHRpb246ICdBZHZpc29yeSBkcmFmdCBhdXRvLWNyZWF0ZWQgKENWRSByZXNjYW4pJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjIxOiB7IGRlc2NyaXB0aW9uOiAnQWR2aXNvcnkgcHVibGlzaGVkIG9yIHdpdGhkcmF3bicsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yMjogeyBkZXNjcmlwdGlvbjogJ01vZGVyYXRpb24gU0xBIGJyZWFjaCcsIGNoYW5uZWxzOiBbJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjIzOiB7IGRlc2NyaXB0aW9uOiAnQWRkZWQgdG8gb3IgcmVtb3ZlZCBmcm9tIHRoZSBFY29zeXN0ZW0gTWFuYWdlciByb2xlJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjI0OiB7IGRlc2NyaXB0aW9uOiAnUHVibGlzaCByZXF1ZXN0IHN1Ym1pdHRlZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLm1vZGVyYXRpb25EaWdlc3QuZW1haWwnLCBkaWdlc3Q6ICdkYWlseScgfSxcbiAgTjI1OiB7IGRlc2NyaXB0aW9uOiAnUHVibGlzaCByZXF1ZXN0IGFwcHJvdmVkIG9yIHJlamVjdGVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjI2OiB7IGRlc2NyaXB0aW9uOiAnTGlzdGluZyBvciB2ZXJzaW9uIHBhdXNlZCBieSBpdHMgcHVibGlzaGVyJywgY2hhbm5lbHM6IFsnaW5fYXBwJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0udXBncmFkZXMuZW1haWwnIH0sXG4gIE4yNzogeyBkZXNjcmlwdGlvbjogJ0luc3RhbGxlZCBsaXN0aW5nIGF1dG8tdXBkYXRlZCB3aXRoaW4gaXRzIHJhbmdlJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0udXBncmFkZXMuZW1haWwnLCBkaWdlc3Q6ICd3ZWVrbHknIH0sXG4gIE4yODogeyBkZXNjcmlwdGlvbjogJ0EgcmVxdWVzdCBuZWVkcyBhIHNlY29uZCBhcHByb3ZhbCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yOTogeyBkZXNjcmlwdGlvbjogJ1BsYW4gY2hhbmdlIGFmZmVjdHMgcHVibGlzaGluZycsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIC8vIFBlci1vcmcgcGx1Z2luIHNlY3VyaXR5IG5vdGljZXMgKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQgXCJTY2FuIGdhdGVzXCIpLlxuICAvLyBSZWNpcGllbnRzIGZvbGxvdyB0aGUgb3JnJ3MgcGx1Z2luIHNlY3VyaXR5IG5vdGlmaWNhdGlvbiBzZXR0aW5nczsgdGhlIG9yZydzXG4gIC8vIHdlYmhvb2sgKGlmIGFueSkgaXMgc2VudCBieSB0aGUgcGx1Z2luIHNlcnZpY2UgaXRzZWxmLiBOMzEncyBlbWFpbCBob25vcnNcbiAgLy8gdGhlIG9yZydzIGRpZ2VzdCBzZXR0aW5nICh0aGUgc2VuZGVyIGJhdGNoZXMgaXQpLCBOMzAgaXMgYWx3YXlzIGltbWVkaWF0ZS5cbiAgTjMwOiB7IGRlc2NyaXB0aW9uOiAnUGx1Z2luIHZlcnNpb24gYmxvY2tlZCAodW5zY2FubmVkIG9yIGZpeGFibGUgQ3JpdGljYWwpJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwsIGFsbG93c0FkZHJlc3M6IHRydWUgfSxcbiAgTjMxOiB7IGRlc2NyaXB0aW9uOiAnUmVzY2FuIGZvdW5kIG5ldyBDcml0aWNhbC9IaWdoIGluIGEgcGx1Z2luIHZlcnNpb24nLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICAvLyBQaXBlbGluZS1vd25lciBub3RpY2VzOiBhIGxvb2t1cCAvIHJ1bnRpbWUgY2hlY2sgUkVGVVNFRCBhIHBpcGVsaW5lJ3MgcGx1Z2luXG4gIC8vIHZlcnNpb24gKGRlZHVwbGljYXRlZCBwZXIgcGlwZWxpbmUgKyB2ZXJzaW9uIHBlciBkYXkpLCBhbmQgYSB0aW1lLWJveGVkIHJpc2tcbiAgLy8gYWNjZXB0YW5jZSBvZiBhIHBpcGVsaW5lJ3MgZmluZGluZ3MgTEFQU0VEICh0aGUgZmluZGluZ3MgYXJlIGxpdmUgYWdhaW4pLlxuICAvLyBSb3V0ZWQgdG8gdGhlIG9yZydzIHBpcGVsaW5lIHdyaXRlcnMgdW5kZXIgdGhlIHNhbWUgc2VjdXJpdHkgc2V0dGluZ3MuXG4gIE4zMjogeyBkZXNjcmlwdGlvbjogJ1BpcGVsaW5lIGJsb2NrZWQgYnkgYSBwbHVnaW4gdnVsbmVyYWJpbGl0eSBwb2xpY3knLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICBOMzM6IHsgZGVzY3JpcHRpb246ICdQaXBlbGluZSB2dWxuZXJhYmlsaXR5IHJpc2sgYWNjZXB0YW5jZSBsYXBzZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICAvLyBNYW5hZ2VkIHRvb2xjaGFpbiBoeWdpZW5lIChkb2NzL3BsYW5zL2Jvb3RzdHJhcC1pbWFnZS12ZXJzaW9uaW5nLm1kIMKnMTApOiBhblxuICAvLyBvcmcncyB0b29sY2hhaW4gZGVmYXVsdCAodG8gaXRzIGB0b29sY2hhaW46bWFuYWdlYCBob2xkZXJzKSBvciBhIHBpcGVsaW5lJ3NcbiAgLy8gcGlubmVkIHJlbGVhc2UgKHRvIHRoZSBvcmcncyBwaXBlbGluZSB3cml0ZXJzKSB3YXMgeWFua2VkIG9yIGRlcHJlY2F0ZWQsXG4gIC8vIHBpY2tlZCB1cCBhIEtFViBvciBmaXhhYmxlIENyaXRpY2FsIGZpbmRpbmcsIG9yIGZlbGwgbW9yZSB0aGFuIHRocmVlXG4gIC8vIHJlbGVhc2VzIGJlaGluZCB0aGUgcGxhdGZvcm0gZGVmYXVsdC4gVHJhbnNhY3Rpb25hbDogaXQgc2F5cyB0aGUgb3JnJ3NcbiAgLy8gcGlwZWxpbmVzIGFyZSBidWlsZGluZyBvbiBzb21ldGhpbmcgaXQgc2hvdWxkIG1vdmUgb2ZmLlxuICBOMzQ6IHsgZGVzY3JpcHRpb246ICdNYW5hZ2VkIHRvb2xjaGFpbjogYSByZWxlYXNlIHlvdSB1c2Ugd2FzIHlhbmtlZCwgZGVwcmVjYXRlZCwgZm91bmQgdnVsbmVyYWJsZSBvciBmZWxsIGJlaGluZDsgdGhlIHBsYXRmb3JtIGRlZmF1bHQgbW92ZWQ7IHlvdXIgb3JnIGpvaW5lZCBhIGNhbmFyeTsgb3IgYSBwaXBlbGluZSBuZWVkcyBhIHJlLWRlcGxveSB0byByZWNvdmVyJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbn07XG5cbi8qKiBXaGV0aGVyIGB2YWx1ZWAgaXMgYSBub3RpZmljYXRpb24gZXZlbnQgbnVtYmVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBFY29zeXN0ZW1Ob3RpZmljYXRpb25FdmVudElkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEVDT1NZU1RFTV9OT1RJRklDQVRJT05fRVZFTlRTLCB2YWx1ZSk7XG59XG5cbi8qKiBPcmctbG9jYWwgcGVybWlzc2lvbnMgYW4ge0BsaW5rIEVjb3N5c3RlbVJlY2lwaWVudFNwZWN9IGBvcmdfcGVybWlzc2lvbmAgcnVsZSBtYXkgbmFtZS4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbU9yZ1JlY2lwaWVudFBlcm1pc3Npb24gPSAncHVibGlzaGVyczptYW5hZ2UnIHwgJ3BsdWdpbl9pbnN0YWxsczptYW5hZ2UnIHwgJ3BsdWdpbnM6d3JpdGUnIHwgJ3BpcGVsaW5lczp3cml0ZScgfCAndG9vbGNoYWluOm1hbmFnZSc7XG4vKiogU3lzdGVtLW9yZyBwZXJtaXNzaW9ucyBhIGBtb2RlcmF0b3JzYCBydWxlIG1heSBuYW1lLiAqL1xuZXhwb3J0IHR5cGUgRWNvc3lzdGVtTW9kZXJhdG9yUGVybWlzc2lvbiA9ICdwbHVnaW5zOm1vZGVyYXRlJyB8ICdwdWJsaXNoZXJzOnZlcmlmeSc7XG5cbi8qKlxuICogQSByZWNpcGllbnQgUlVMRSwgcmVzb2x2ZWQgYnkgcGxhdGZvcm0gYXQgc2VuZCB0aW1lOlxuICpcbiAqICAtIGB1c2VyYCDigJQgb25lIHVzZXIgKFJlcXVlc3RlciwgUmV2aWV3IGF1dGhvciwgdGhlIGFmZmVjdGVkIHVzZXIgb2YgTjIzKS5cbiAqICAgIGBvcmdJZGAgcGlja3MgdGhlIGluYm94OyBkZWZhdWx0cyB0byB0aGUgdXNlcidzIGxhc3QgYWN0aXZlIG9yZy5cbiAqICAtIGBvcmdfcGVybWlzc2lvbmAg4oCUIGFjdGl2ZSBtZW1iZXJzIG9mIGBvcmdJZGAgaG9sZGluZyBgcGVybWlzc2lvbmBcbiAqICAgIChQdWJsaXNoZXIgbWFuYWdlcnMgPSBgcHVibGlzaGVyczptYW5hZ2VgLCBPcmcgYXBwcm92ZXJzID1cbiAqICAgIGBwbHVnaW5faW5zdGFsbHM6bWFuYWdlYCwgcGx1Z2luIHdyaXRlcnMgPSBgcGx1Z2luczp3cml0ZWAsIHRvb2xjaGFpblxuICogICAgbWFuYWdlcnMgPSBgdG9vbGNoYWluOm1hbmFnZWApLiBXaXRoXG4gKiAgICBgaW5oZXJpdEZyb21Sb290YCwgYSB0ZWFtIHdpdGggbm8gaG9sZGVycyBmYWxscyBiYWNrIHRvIGl0cyByb290IG9yZydzXG4gKiAgICBob2xkZXJzOyB3aXRoIG5vbmUgYW55d2hlcmUsIHRoZSBvcmcncyBvd25lcnMuXG4gKiAgLSBgb3JnX21lbWJlcnNgIOKAlCB0aGUgbmFtZWQgdXNlcnMsIGJ1dCBvbmx5IHRob3NlIHdobyBhcmUgQUNUSVZFIG1lbWJlcnMgb2ZcbiAqICAgIGBvcmdJZGAgYXQgc2VuZCB0aW1lIChhbiBvcmcncyBjaG9zZW4gc2VjdXJpdHkgcmVjaXBpZW50czogYSBzdGFsZSBpZCwgb3JcbiAqICAgIHNvbWVvbmUgd2hvIGxlZnQsIHJlY2VpdmVzIG5vdGhpbmcpLlxuICogIC0gYG1vZGVyYXRvcnNgIOKAlCB0aGUgc3lzdGVtIG9yZydzIGhvbGRlcnMgb2YgYHBlcm1pc3Npb25gICh0aGUgRWNvc3lzdGVtXG4gKiAgICBNYW5hZ2VyIHJvbGUpLCBtaW51cyBhbnlvbmUgd2l0aCBhIGNvbmZsaWN0IG9mIGludGVyZXN0IChtZW1iZXJzIG9mXG4gKiAgICBgZXhjbHVkZU1lbWJlcnNPZk9yZ0lkYCwgb3IgdGhlIGxpc3RlZCB1c2Vycyk7IHN1cGVyYWRtaW5zIHdoZW4gZW1wdHkuXG4gKiAgLSBgc3VwZXJhZG1pbnNgIOKAlCBldmVyeSBwbGF0Zm9ybSBzdXBlcmFkbWluLlxuICogIC0gYGFkZHJlc3NgIOKAlCBhIHJhdyBhZGRyZXNzOyBvbmx5IHRoZSBhbm9ueW1vdXMgU1VCTUlUVEVSIG5vdGljZXMgKE4xLCBOMyxcbiAqICAgIE40KSwgd2hvc2UgcmVjaXBpZW50IGhhcyBubyBhY2NvdW50LCBhbmQgYW4gb3JnJ3MgVkVSSUZJRUQgZXh0ZXJuYWxcbiAqICAgIHNlY3VyaXR5IGFkZHJlc3Mgb24gdGhlIHBsdWdpbiBzZWN1cml0eSBub3RpY2VzIChOMzDigJNOMzMpLlxuICovXG5leHBvcnQgdHlwZSBFY29zeXN0ZW1SZWNpcGllbnRTcGVjID1cbiAgfCB7IGtpbmQ6ICd1c2VyJzsgdXNlcklkOiBzdHJpbmc7IG9yZ0lkPzogc3RyaW5nIH1cbiAgfCB7IGtpbmQ6ICdvcmdfcGVybWlzc2lvbic7IG9yZ0lkOiBzdHJpbmc7IHBlcm1pc3Npb246IEVjb3N5c3RlbU9yZ1JlY2lwaWVudFBlcm1pc3Npb247IGluaGVyaXRGcm9tUm9vdD86IGJvb2xlYW4gfVxuICB8IHsga2luZDogJ29yZ19tZW1iZXJzJzsgb3JnSWQ6IHN0cmluZzsgdXNlcklkczogc3RyaW5nW10gfVxuICB8IHsga2luZDogJ21vZGVyYXRvcnMnOyBwZXJtaXNzaW9uOiBFY29zeXN0ZW1Nb2RlcmF0b3JQZXJtaXNzaW9uOyBleGNsdWRlTWVtYmVyc09mT3JnSWQ/OiBzdHJpbmc7IGV4Y2x1ZGVVc2VySWRzPzogc3RyaW5nW10gfVxuICB8IHsga2luZDogJ3N1cGVyYWRtaW5zJyB9XG4gIHwgeyBraW5kOiAnYWRkcmVzcyc7IGVtYWlsOiBzdHJpbmcgfTtcblxuLyoqIFRoZSBib2R5IG9mIGFuIGVjb3N5c3RlbSBzZW5kIHRocm91Z2ggcGxhdGZvcm0ncyBub3RpZnkgcmVsYXkuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjb3N5c3RlbU5vdGlmeVJlcXVlc3Qge1xuICBldmVudDogRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnRJZDtcbiAgcmVjaXBpZW50czogRWNvc3lzdGVtUmVjaXBpZW50U3BlY1tdO1xuICBzdWJqZWN0OiBzdHJpbmc7XG4gIC8qKiBQbGFpbi10ZXh0IGJvZHkgKGVtYWlsIGJvZHkgYW5kIGluLWFwcCBjb250ZW50KS4gKi9cbiAgdGV4dDogc3RyaW5nO1xuICAvKiogU3Vic2V0IG9mIHRoZSBldmVudCdzIGNoYW5uZWxzIHRvIGRlbGl2ZXIgb24gKGRlZmF1bHQ6IGFsbCBvZiB0aGVtKS4gVGhlXG4gICAqICBkaWdlc3QgZGlzcGF0Y2hlciBzZW5kcyBgWydlbWFpbCddYCBiZWNhdXNlIGluLWFwcCB3ZW50IG91dCBhdCBlbnF1ZXVlLiAqL1xuICBjaGFubmVscz86IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWxbXTtcbiAgLyoqIERlbGl2ZXIgdGhlIGVtYWlsIGV2ZW4gdG8gdXNlcnMgd2hvIG9wdGVkIG91dCDigJQgZm9yIGFuIGV2ZW50IHdob3NlXG4gICAqICBub3JtYWxseS1vcHRpb25hbCBlbWFpbCBpcyBtYW5kYXRvcnkgaW4gdGhpcyBpbnN0YW5jZSAoTjI0IHlhbmssIGFkdmlzb3J5XG4gICAqICBhbmQgc2VjdXJpdHktZml4IHJlcXVlc3RzKS4gKi9cbiAgbWFuZGF0b3J5PzogYm9vbGVhbjtcbn1cblxuLyoqIEhhcmQgY2FwcywgbWF0Y2hpbmcgdGhlIG1lc3NhZ2Ugc2VydmljZSdzIG93biBsaW1pdHMuICovXG5leHBvcnQgY29uc3QgRUNPU1lTVEVNX05PVElGWV9TVUJKRUNUX01BWCA9IDUwMDtcbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fTk9USUZZX1RFWFRfTUFYID0gMTAwMDA7XG5jb25zdCBNQVhfUkVDSVBJRU5UX1JVTEVTID0gNTA7XG5cbmNvbnN0IE9SR19QRVJNSVNTSU9OUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbJ3B1Ymxpc2hlcnM6bWFuYWdlJywgJ3BsdWdpbl9pbnN0YWxsczptYW5hZ2UnLCAncGx1Z2luczp3cml0ZScsICdwaXBlbGluZXM6d3JpdGUnLCAndG9vbGNoYWluOm1hbmFnZSddO1xuLyoqIEF0IG1vc3QgdGhpcyBtYW55IHVzZXJzIGluIG9uZSBgb3JnX21lbWJlcnNgIHJ1bGUuICovXG5leHBvcnQgY29uc3QgRUNPU1lTVEVNX09SR19NRU1CRVJTX01BWCA9IDEwMDtcbmNvbnN0IE1PREVSQVRPUl9QRVJNSVNTSU9OUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbJ3BsdWdpbnM6bW9kZXJhdGUnLCAncHVibGlzaGVyczp2ZXJpZnknXTtcbmNvbnN0IEVNQUlMX1NIQVBFID0gL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC87XG5cbmZ1bmN0aW9uIG5vbkVtcHR5U3RyaW5nKHY6IHVua25vd24sIG1heCA9IDI1NSk6IHYgaXMgc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2LnRyaW0oKS5sZW5ndGggPiAwICYmIHYubGVuZ3RoIDw9IG1heDtcbn1cblxuZnVuY3Rpb24gcGFyc2VSZWNpcGllbnQocmF3OiB1bmtub3duLCBzcGVjOiBFY29zeXN0ZW1FdmVudFNwZWMpOiBFY29zeXN0ZW1SZWNpcGllbnRTcGVjIHwgc3RyaW5nIHtcbiAgaWYgKCFyYXcgfHwgdHlwZW9mIHJhdyAhPT0gJ29iamVjdCcpIHJldHVybiAnZWFjaCByZWNpcGllbnQgbXVzdCBiZSBhbiBvYmplY3QnO1xuICBjb25zdCByID0gcmF3IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBzd2l0Y2ggKHIua2luZCkge1xuICAgIGNhc2UgJ3VzZXInOlxuICAgICAgaWYgKCFub25FbXB0eVN0cmluZyhyLnVzZXJJZCkpIHJldHVybiAndXNlciByZWNpcGllbnQgbmVlZHMgdXNlcklkJztcbiAgICAgIGlmIChyLm9yZ0lkICE9PSB1bmRlZmluZWQgJiYgIW5vbkVtcHR5U3RyaW5nKHIub3JnSWQpKSByZXR1cm4gJ3VzZXIgcmVjaXBpZW50IG9yZ0lkIG11c3QgYmUgYSBzdHJpbmcnO1xuICAgICAgcmV0dXJuIHsga2luZDogJ3VzZXInLCB1c2VySWQ6IHIudXNlcklkLCAuLi4oci5vcmdJZCA/IHsgb3JnSWQ6IHIub3JnSWQgYXMgc3RyaW5nIH0gOiB7fSkgfTtcbiAgICBjYXNlICdvcmdfcGVybWlzc2lvbic6XG4gICAgICBpZiAoIW5vbkVtcHR5U3RyaW5nKHIub3JnSWQpKSByZXR1cm4gJ29yZ19wZXJtaXNzaW9uIHJlY2lwaWVudCBuZWVkcyBvcmdJZCc7XG4gICAgICBpZiAodHlwZW9mIHIucGVybWlzc2lvbiAhPT0gJ3N0cmluZycgfHwgIU9SR19QRVJNSVNTSU9OUy5pbmNsdWRlcyhyLnBlcm1pc3Npb24pKSByZXR1cm4gJ29yZ19wZXJtaXNzaW9uIHJlY2lwaWVudCBuYW1lcyBhbiB1bnN1cHBvcnRlZCBwZXJtaXNzaW9uJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6ICdvcmdfcGVybWlzc2lvbicsXG4gICAgICAgIG9yZ0lkOiByLm9yZ0lkLFxuICAgICAgICBwZXJtaXNzaW9uOiByLnBlcm1pc3Npb24gYXMgRWNvc3lzdGVtT3JnUmVjaXBpZW50UGVybWlzc2lvbixcbiAgICAgICAgLi4uKHIuaW5oZXJpdEZyb21Sb290ID09PSB0cnVlID8geyBpbmhlcml0RnJvbVJvb3Q6IHRydWUgfSA6IHt9KSxcbiAgICAgIH07XG4gICAgY2FzZSAnb3JnX21lbWJlcnMnOiB7XG4gICAgICBpZiAoIW5vbkVtcHR5U3RyaW5nKHIub3JnSWQpKSByZXR1cm4gJ29yZ19tZW1iZXJzIHJlY2lwaWVudCBuZWVkcyBvcmdJZCc7XG4gICAgICBjb25zdCB1c2VycyA9IHIudXNlcklkcztcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh1c2VycykgfHwgdXNlcnMubGVuZ3RoID09PSAwIHx8ICF1c2Vycy5ldmVyeSgodSkgPT4gbm9uRW1wdHlTdHJpbmcodSkpKSByZXR1cm4gJ29yZ19tZW1iZXJzIHJlY2lwaWVudCBuZWVkcyBhIG5vbi1lbXB0eSB1c2VySWRzIGFycmF5JztcbiAgICAgIGlmICh1c2Vycy5sZW5ndGggPiBFQ09TWVNURU1fT1JHX01FTUJFUlNfTUFYKSByZXR1cm4gYG9yZ19tZW1iZXJzIHJlY2lwaWVudCBuYW1lcyBhdCBtb3N0ICR7RUNPU1lTVEVNX09SR19NRU1CRVJTX01BWH0gdXNlcnNgO1xuICAgICAgcmV0dXJuIHsga2luZDogJ29yZ19tZW1iZXJzJywgb3JnSWQ6IHIub3JnSWQsIHVzZXJJZHM6IFsuLi5uZXcgU2V0KHVzZXJzIGFzIHN0cmluZ1tdKV0gfTtcbiAgICB9XG4gICAgY2FzZSAnbW9kZXJhdG9ycyc6IHtcbiAgICAgIGlmICh0eXBlb2Ygci5wZXJtaXNzaW9uICE9PSAnc3RyaW5nJyB8fCAhTU9ERVJBVE9SX1BFUk1JU1NJT05TLmluY2x1ZGVzKHIucGVybWlzc2lvbikpIHJldHVybiAnbW9kZXJhdG9ycyByZWNpcGllbnQgbmFtZXMgYW4gdW5zdXBwb3J0ZWQgcGVybWlzc2lvbic7XG4gICAgICBpZiAoci5leGNsdWRlTWVtYmVyc09mT3JnSWQgIT09IHVuZGVmaW5lZCAmJiAhbm9uRW1wdHlTdHJpbmcoci5leGNsdWRlTWVtYmVyc09mT3JnSWQpKSByZXR1cm4gJ2V4Y2x1ZGVNZW1iZXJzT2ZPcmdJZCBtdXN0IGJlIGEgc3RyaW5nJztcbiAgICAgIGNvbnN0IGV4Y2x1ZGUgPSByLmV4Y2x1ZGVVc2VySWRzO1xuICAgICAgaWYgKGV4Y2x1ZGUgIT09IHVuZGVmaW5lZCAmJiAoIUFycmF5LmlzQXJyYXkoZXhjbHVkZSkgfHwgIWV4Y2x1ZGUuZXZlcnkoKHUpID0+IG5vbkVtcHR5U3RyaW5nKHUpKSkpIHJldHVybiAnZXhjbHVkZVVzZXJJZHMgbXVzdCBiZSBhbiBhcnJheSBvZiBpZHMnO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2luZDogJ21vZGVyYXRvcnMnLFxuICAgICAgICBwZXJtaXNzaW9uOiByLnBlcm1pc3Npb24gYXMgRWNvc3lzdGVtTW9kZXJhdG9yUGVybWlzc2lvbixcbiAgICAgICAgLi4uKHIuZXhjbHVkZU1lbWJlcnNPZk9yZ0lkID8geyBleGNsdWRlTWVtYmVyc09mT3JnSWQ6IHIuZXhjbHVkZU1lbWJlcnNPZk9yZ0lkIGFzIHN0cmluZyB9IDoge30pLFxuICAgICAgICAuLi4oZXhjbHVkZSA/IHsgZXhjbHVkZVVzZXJJZHM6IGV4Y2x1ZGUgYXMgc3RyaW5nW10gfSA6IHt9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ3N1cGVyYWRtaW5zJzpcbiAgICAgIHJldHVybiB7IGtpbmQ6ICdzdXBlcmFkbWlucycgfTtcbiAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGlmICghc3BlYy5hbGxvd3NBZGRyZXNzKSByZXR1cm4gJ2FkZHJlc3MgcmVjaXBpZW50cyBhcmUgb25seSBhbGxvd2VkIGZvciBhbm9ueW1vdXMtc3VibWlzc2lvbiBhbmQgcGx1Z2luIHNlY3VyaXR5IG5vdGljZXMnO1xuICAgICAgaWYgKCFub25FbXB0eVN0cmluZyhyLmVtYWlsLCAzMjApIHx8ICFFTUFJTF9TSEFQRS50ZXN0KHIuZW1haWwpKSByZXR1cm4gJ2FkZHJlc3MgcmVjaXBpZW50IG5lZWRzIGEgdmFsaWQgZW1haWwnO1xuICAgICAgcmV0dXJuIHsga2luZDogJ2FkZHJlc3MnLCBlbWFpbDogci5lbWFpbC50cmltKCkudG9Mb3dlckNhc2UoKSB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ3Vua25vd24gcmVjaXBpZW50IGtpbmQnO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW4ge0BsaW5rIEVjb3N5c3RlbU5vdGlmeVJlcXVlc3R9LiBSZXR1cm5zIHRoZSBub3JtYWxpemVkIHJlcXVlc3QsXG4gKiBvciBhbiBlcnJvciBzdHJpbmcgKHRoZSByZWxheSdzIDQwMCkuIFB1cmUsIHNvIGJvdGggdGhlIHNlbmRlciAoZmFpbCBhdFxuICogZW5xdWV1ZSwgbm90IGF0IDA5OjAwIHRvbW9ycm93KSBhbmQgdGhlIHJlbGF5IHVzZSB0aGUgc2FtZSBydWxlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRWNvc3lzdGVtTm90aWZ5UmVxdWVzdChib2R5OiB1bmtub3duKTogRWNvc3lzdGVtTm90aWZ5UmVxdWVzdCB8IHN0cmluZyB7XG4gIGlmICghYm9keSB8fCB0eXBlb2YgYm9keSAhPT0gJ29iamVjdCcpIHJldHVybiAnYm9keSBtdXN0IGJlIGFuIG9iamVjdCc7XG4gIGNvbnN0IGIgPSBib2R5IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAoIWlzRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnQoYi5ldmVudCkpIHJldHVybiAnZXZlbnQgbXVzdCBiZSBvbmUgb2YgTjEuLk4zNCc7XG4gIGNvbnN0IHNwZWMgPSBFQ09TWVNURU1fTk9USUZJQ0FUSU9OX0VWRU5UU1tiLmV2ZW50XTtcbiAgaWYgKCFub25FbXB0eVN0cmluZyhiLnN1YmplY3QsIEVDT1NZU1RFTV9OT1RJRllfU1VCSkVDVF9NQVgpKSByZXR1cm4gYHN1YmplY3QgaXMgcmVxdWlyZWQgKG1heCAke0VDT1NZU1RFTV9OT1RJRllfU1VCSkVDVF9NQVh9KWA7XG4gIGlmICghbm9uRW1wdHlTdHJpbmcoYi50ZXh0LCBFQ09TWVNURU1fTk9USUZZX1RFWFRfTUFYKSkgcmV0dXJuIGB0ZXh0IGlzIHJlcXVpcmVkIChtYXggJHtFQ09TWVNURU1fTk9USUZZX1RFWFRfTUFYfSlgO1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYi5yZWNpcGllbnRzKSB8fCBiLnJlY2lwaWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gJ3JlY2lwaWVudHMgbXVzdCBiZSBhIG5vbi1lbXB0eSBhcnJheSc7XG4gIGlmIChiLnJlY2lwaWVudHMubGVuZ3RoID4gTUFYX1JFQ0lQSUVOVF9SVUxFUykgcmV0dXJuIGBhdCBtb3N0ICR7TUFYX1JFQ0lQSUVOVF9SVUxFU30gcmVjaXBpZW50IHJ1bGVzYDtcbiAgY29uc3QgcmVjaXBpZW50czogRWNvc3lzdGVtUmVjaXBpZW50U3BlY1tdID0gW107XG4gIGZvciAoY29uc3QgcmF3IG9mIGIucmVjaXBpZW50cykge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlUmVjaXBpZW50KHJhdywgc3BlYyk7XG4gICAgaWYgKHR5cGVvZiBwYXJzZWQgPT09ICdzdHJpbmcnKSByZXR1cm4gcGFyc2VkO1xuICAgIHJlY2lwaWVudHMucHVzaChwYXJzZWQpO1xuICB9XG4gIGxldCBjaGFubmVsczogRWNvc3lzdGVtTm90aWZpY2F0aW9uQ2hhbm5lbFtdIHwgdW5kZWZpbmVkO1xuICBpZiAoYi5jaGFubmVscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGIuY2hhbm5lbHMpIHx8IGIuY2hhbm5lbHMubGVuZ3RoID09PSAwKSByZXR1cm4gJ2NoYW5uZWxzIG11c3QgYmUgYSBub24tZW1wdHkgYXJyYXknO1xuICAgIGNvbnN0IGJhZCA9IGIuY2hhbm5lbHMuZmlsdGVyKChjKSA9PiAhc3BlYy5jaGFubmVscy5pbmNsdWRlcyhjIGFzIEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWwpKTtcbiAgICBpZiAoYmFkLmxlbmd0aCA+IDApIHJldHVybiBgZXZlbnQgJHtiLmV2ZW50fSBpcyBub3QgZGVsaXZlcmVkIG9uOiAke2JhZC5qb2luKCcsICcpfWA7XG4gICAgY2hhbm5lbHMgPSBbLi4ubmV3IFNldChiLmNoYW5uZWxzIGFzIEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWxbXSldO1xuICB9XG4gIGlmIChiLm1hbmRhdG9yeSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBiLm1hbmRhdG9yeSAhPT0gJ2Jvb2xlYW4nKSByZXR1cm4gJ21hbmRhdG9yeSBtdXN0IGJlIGEgYm9vbGVhbic7XG4gIHJldHVybiB7XG4gICAgZXZlbnQ6IGIuZXZlbnQsXG4gICAgcmVjaXBpZW50cyxcbiAgICBzdWJqZWN0OiBiLnN1YmplY3QudHJpbSgpLFxuICAgIHRleHQ6IGIudGV4dC50cmltKCksXG4gICAgLi4uKGNoYW5uZWxzID8geyBjaGFubmVscyB9IDoge30pLFxuICAgIC4uLihiLm1hbmRhdG9yeSA9PT0gdHJ1ZSA/IHsgbWFuZGF0b3J5OiB0cnVlIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKiBUaGUgVVRDIGhvdXIgZGlnZXN0cyBmbHVzaCBhdCAoXCJkYWlseSBkaWdlc3QgZW1haWwgKDA5OjAwIFVUQylcIikuICovXG5leHBvcnQgY29uc3QgRUNPU1lTVEVNX0RJR0VTVF9IT1VSX1VUQyA9IDk7XG5cbi8qKlxuICogVGhlIG5leHQgZmx1c2ggdGltZSBmb3IgYSBkaWdlc3QgY2FkZW5jZSwgc3RyaWN0bHkgYWZ0ZXIgYG5vd2A6XG4gKiBgaG91cmx5YCDihpIgdGhlIG5leHQgdG9wIG9mIHRoZSBob3VyOyBgZGFpbHlgIOKGkiB0aGUgbmV4dCAwOTowMCBVVEM7XG4gKiBgd2Vla2x5YCDihpIgdGhlIG5leHQgTW9uZGF5IDA5OjAwIFVUQy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHRFY29zeXN0ZW1EaWdlc3RUaW1lKGNhZGVuY2U6IEVjb3N5c3RlbURpZ2VzdENhZGVuY2UsIG5vdzogRGF0ZSA9IG5ldyBEYXRlKCkpOiBEYXRlIHtcbiAgY29uc3QgdCA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkpO1xuICBpZiAoY2FkZW5jZSA9PT0gJ2hvdXJseScpIHtcbiAgICB0LnNldFVUQ01pbnV0ZXMoMCwgMCwgMCk7XG4gICAgdC5zZXRVVENIb3Vycyh0LmdldFVUQ0hvdXJzKCkgKyAxKTtcbiAgICByZXR1cm4gdDtcbiAgfVxuICB0LnNldFVUQ0hvdXJzKEVDT1NZU1RFTV9ESUdFU1RfSE9VUl9VVEMsIDAsIDAsIDApO1xuICBpZiAodC5nZXRUaW1lKCkgPD0gbm93LmdldFRpbWUoKSkgdC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpICsgMSk7XG4gIGlmIChjYWRlbmNlID09PSAnd2Vla2x5Jykge1xuICAgIC8vIGdldFVUQ0RheTogMCA9IFN1bmRheSDigKYgMSA9IE1vbmRheS5cbiAgICB3aGlsZSAodC5nZXRVVENEYXkoKSAhPT0gMSkgdC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpICsgMSk7XG4gIH1cbiAgcmV0dXJuIHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGVtcGxhdGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEEgcmVuZGVyZWQgbm90aWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY29zeXN0ZW1Ob3RpZmljYXRpb25Db250ZW50IHtcbiAgc3ViamVjdDogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTjIzIOKAlCBzb21lb25lIHdhcyBhZGRlZCB0byBvciByZW1vdmVkIGZyb20gdGhlIHN5c3RlbSBvcmcncyBFY29zeXN0ZW1cbiAqIE1hbmFnZXIgcm9sZS4gU2VudCB0byBldmVyeSBzdXBlcmFkbWluIGFuZCB0byB0aGUgYWZmZWN0ZWQgdXNlcjtcbiAqIHRyYW5zYWN0aW9uYWwgKG5vIG9wdC1vdXQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRWNvc3lzdGVtTWFuYWdlckNoYW5nZShpbnB1dDoge1xuICAvKiogVGhlIGFmZmVjdGVkIHVzZXIncyBkaXNwbGF5IG5hbWUgb3IgZW1haWwuICovXG4gIHVzZXI6IHN0cmluZztcbiAgYWRkZWQ6IGJvb2xlYW47XG4gIC8qKiBXaG8gbWFkZSB0aGUgY2hhbmdlIChzdXBlcmFkbWlucyBvbmx5IGNhbiksIHdoZW4ga25vd24uICovXG4gIGFjdG9yPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIFJvbGUgYWN0dWFsbHkgZ3JhbnRlZC4gVGhpcyBub3RpY2UgZmlyZXMgZm9yIEFOWSBSb2xlIGNhcnJ5aW5nIGFcbiAgICogc3lzdGVtLW9yZy1vbmx5IHBlcm1pc3Npb24g4oCUIGBlY29zeXN0ZW1Sb2xlTmFtZWAgcmV0dXJucyB3aGljaGV2ZXIgb25lIGl0XG4gICAqIGlzIOKAlCBzbyBoYXJkLWNvZGluZyBcIkVjb3N5c3RlbSBNYW5hZ2VyXCIgYW5ub3VuY2VkIHN0YWZmaW5nICoqQ29uc29sZVxuICAgKiBBZG1pbmlzdHJhdG9yKiogKGEgcmVhZC93cml0ZSBzaGVsbCBvdmVyIGV2ZXJ5IHRlbmFudCdzIHJvd3MpIG9yICoqU3VwcG9ydFxuICAgKiBMZWFkKiogKGBpbXBlcnNvbmF0aW9uOm9wZW5gKSBhcyBhIHBsdWdpbi1tb2RlcmF0aW9uIGdyYW50LiBUaGUgYXVkaXQgcm93XG4gICAqIGhhZCB0aGUgbmFtZSBhbGwgYWxvbmc7IHRoZSBtZXNzYWdlIG9wZXJhdG9ycyBhY3R1YWxseSByZWFkIGRpZCBub3QuXG4gICAqL1xuICByb2xlPzogc3RyaW5nO1xufSk6IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNvbnRlbnQge1xuICBjb25zdCB2ZXJiID0gaW5wdXQuYWRkZWQgPyAnYWRkZWQgdG8nIDogJ3JlbW92ZWQgZnJvbSc7XG4gIGNvbnN0IGJ5ID0gaW5wdXQuYWN0b3IgPyBgIGJ5ICR7aW5wdXQuYWN0b3J9YCA6ICcnO1xuICBjb25zdCByb2xlID0gaW5wdXQucm9sZSA/PyAnRWNvc3lzdGVtIE1hbmFnZXInO1xuICAvLyBUaGUgYm9keSBkZXNjcmliZXMgd2hhdCB0aGUgUk9MRSBkb2VzLCBzbyBpdCBjYW4gb25seSBzcGVhayBmb3IgdGhlIG9uZSBpdFxuICAvLyB3YXMgd3JpdHRlbiBhYm91dC4gRm9yIGFueSBvdGhlciwgc2F5IHdoYXQgaGFwcGVuZWQgYW5kIGxlYXZlIHRoZVxuICAvLyBjYXBhYmlsaXRpZXMgdG8gdGhlIFJvbGUgaXRzZWxmIHJhdGhlciB0aGFuIGRlc2NyaWJpbmcgdGhlIHdyb25nIG9uZXMuXG4gIGNvbnN0IGVjb3N5c3RlbSA9IHJvbGUgPT09ICdFY29zeXN0ZW0gTWFuYWdlcic7XG4gIHJldHVybiB7XG4gICAgc3ViamVjdDogYCR7aW5wdXQudXNlcn0gd2FzICR7dmVyYn0gdGhlICR7cm9sZX0gcm9sZWAsXG4gICAgdGV4dDogaW5wdXQuYWRkZWRcbiAgICAgID8gYCR7aW5wdXQudXNlcn0gd2FzICR7dmVyYn0gdGhlICR7cm9sZX0gcm9sZSR7Ynl9LmBcbiAgICAgICAgKyAoZWNvc3lzdGVtXG4gICAgICAgICAgPyAnIEVjb3N5c3RlbSBNYW5hZ2VycyBkZWNpZGUgcHVibGlzaCByZXF1ZXN0cywgbW9kZXJhdGUgc3VibWlzc2lvbnMgYW5kIHJldmlld3MsIHZlcmlmeSBwdWJsaXNoZXJzJ1xuICAgICAgICAgICAgKyAnIGFuZCBwdWJsaXNoIGFkdmlzb3JpZXMgZm9yIHRoZSB3aG9sZSBwbHVnaW4gZWNvc3lzdGVtLidcbiAgICAgICAgICA6ICcgSXQgY2FycmllcyBzeXN0ZW0tb3JnLW9ubHkgcGVybWlzc2lvbnMuJylcbiAgICAgICAgKyAnIFRoZSByb2xlIHdvcmtzIG9ubHkgZnJvbSB0aGUgc3lzdGVtIG9yZ2FuaXphdGlvbiBhbmQgcmVxdWlyZXMgYSB0d28tZmFjdG9yIHNpZ24taW4uJ1xuICAgICAgOiBgJHtpbnB1dC51c2VyfSB3YXMgJHt2ZXJifSB0aGUgJHtyb2xlfSByb2xlJHtieX1gXG4gICAgICAgICsgKGVjb3N5c3RlbSA/ICcgYW5kIGNhbiBubyBsb25nZXIgbWFuYWdlIG9yIGFwcHJvdmUgYW55dGhpbmcgaW4gdGhlIHBsdWdpbiBlY29zeXN0ZW0uJyA6ICcuJyksXG4gIH07XG59XG5cbi8qKlxuICogQ29hbGVzY2Ugc2V2ZXJhbCBxdWV1ZWQgbm90aWNlcyBpbnRvIG9uZSBkaWdlc3QgZW1haWw6IGEgY291bnQtYmVhcmluZ1xuICogc3ViamVjdCBhbmQgb25lIGxpbmUgcGVyIGl0ZW0gKGVhY2ggaXRlbSdzIHN1YmplY3QpLCBvbGRlc3QgZmlyc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJFY29zeXN0ZW1EaWdlc3QoXG4gIGV2ZW50OiBFY29zeXN0ZW1Ob3RpZmljYXRpb25FdmVudElkLFxuICBpdGVtczogcmVhZG9ubHkgRWNvc3lzdGVtTm90aWZpY2F0aW9uQ29udGVudFtdLFxuKTogRWNvc3lzdGVtTm90aWZpY2F0aW9uQ29udGVudCB7XG4gIGlmIChpdGVtcy5sZW5ndGggPT09IDEpIHJldHVybiBpdGVtc1swXSE7XG4gIGNvbnN0IHNwZWMgPSBFQ09TWVNURU1fTk9USUZJQ0FUSU9OX0VWRU5UU1tldmVudF07XG4gIGNvbnN0IGNhZGVuY2UgPSBzcGVjLmRpZ2VzdCA9PT0gJ2hvdXJseScgPyAnSG91cmx5JyA6IHNwZWMuZGlnZXN0ID09PSAnd2Vla2x5JyA/ICdXZWVrbHknIDogJ0RhaWx5JztcbiAgcmV0dXJuIHtcbiAgICBzdWJqZWN0OiBgJHtjYWRlbmNlfSBkaWdlc3Q6ICR7aXRlbXMubGVuZ3RofSDDlyAke3NwZWMuZGVzY3JpcHRpb259YC5zbGljZSgwLCBFQ09TWVNURU1fTk9USUZZX1NVQkpFQ1RfTUFYKSxcbiAgICB0ZXh0OiBpdGVtcy5tYXAoKGkpID0+IGDigKIgJHtpLnN1YmplY3R9YCkuam9pbignXFxuJykuc2xpY2UoMCwgRUNPU1lTVEVNX05PVElGWV9URVhUX01BWCksXG4gIH07XG59XG4iXX0=
259
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLW5vdGlmaWNhdGlvbnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9lY29zeXN0ZW0tbm90aWZpY2F0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBb0J0Qzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQUc7SUFDL0MseUJBQXlCLEVBQUUsY0FBYztJQUN6QywwQkFBMEIsRUFBRSxlQUFlO0lBQzNDLDBCQUEwQixFQUFFLGVBQWU7SUFDM0Msa0NBQWtDLEVBQUUsdUJBQXVCO0NBQ25ELENBQUM7QUFRWCxxREFBcUQ7QUFDckQsTUFBTSxDQUFDLE1BQU0sc0NBQXNDLEdBQ2pELE1BQU0sQ0FBQyxNQUFNLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUVuRCw2RUFBNkU7QUFDN0UsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFXLENBQUM7QUFzQjdGLHFFQUFxRTtBQUNyRSxNQUFNLE1BQU0sR0FBRztJQUNiLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSw0Q0FBNEMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUU7SUFDN0gsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLG1EQUFtRCxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRTtJQUN4SyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsbUNBQW1DLEVBQUUsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFO0lBQ3BILEVBQUUsRUFBRSxFQUFF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Q0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSx5QkFBeUIsQ0FBQztLQUN4RixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBwbHVnaW4tZWNvc3lzdGVtIG5vdGlmaWNhdGlvbiBjb250cmFjdCAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCksXG4gKiBzaGFyZWQgYnkgdGhlIHNlbmRlciAodGhlIHBsdWdpbiBzZXJ2aWNlJ3MgZW5xdWV1ZSBBUEkgYW5kIGRpZ2VzdFxuICogZGlzcGF0Y2hlcikgYW5kIHRoZSByZWxheSAocGxhdGZvcm0gYFBPU1QgL2ludGVybmFsL25vdGlmeS1lbWFpbGApLlxuICpcbiAqIFJlY2lwaWVudHMgdHJhdmVsIGFzIFJVTEVTLCBuZXZlciBhcyBsaXN0czogcGxhdGZvcm0gcmVzb2x2ZXMgZWFjaFxuICoge0BsaW5rIEVjb3N5c3RlbVJlY2lwaWVudFNwZWN9IGFnYWluc3QgaXRzIHVzZXIvUm9sZSBkaXJlY3RvcnkgQVQgU0VORCBUSU1FLFxuICogc28gYSBkaWdlc3QgdGhhdCBmbHVzaGVzIHRvbW9ycm93IHJlYWNoZXMgdG9tb3Jyb3cncyBtb2RlcmF0b3JzLCB0aGUgcGx1Z2luXG4gKiBzZXJ2aWNlIG5ldmVyIGhhbmRsZXMgYW4gZW1haWwgYWRkcmVzcyBvciBhIG1lbWJlcnNoaXAgbGlzdCwgYW5kIGEgcHVibGlzaGVyXG4gKiBjYW4gbmV2ZXIgbGVhcm4gd2hvIGluc3RhbGxlZCB0aGVpciBwbHVnaW4gKHRoZSByZWxheSBtYWlscyBlYWNoIHJlY2lwaWVudFxuICogaW5kaXZpZHVhbGx5IOKAlCBubyBzaGFyZWQgVG86IGxpbmUpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUGVybWlzc2lvbiB9IGZyb20gJy4vcGVybWlzc2lvbnMuanMnO1xuXG4vKiogQSBkZWxpdmVyeSBjaGFubmVsLiBJbi1hcHAgaXMgdGhlIHNvdXJjZSBvZiB0cnV0aDsgZW1haWwgaXMgdGhlIGNvdXJ0ZXN5IGNvcHkuICovXG5leHBvcnQgdHlwZSBFY29zeXN0ZW1Ob3RpZmljYXRpb25DaGFubmVsID0gJ2luX2FwcCcgfCAnZW1haWwnO1xuXG4vKipcbiAqIFBlci11c2VyIEVNQUlMIG9wdC1vdXQga2V5cyAoaW4tYXBwIGlzIG5ldmVyIG9wdGlvbmFsKSwgZWFjaCBtYXBwZWQgdG8gdGhlXG4gKiBmaWVsZCBpdCBpcyBzdG9yZWQgdW5kZXIgaW4gdGhlIHVzZXIncyBwZXItb3JnIGBub3RpZmljYXRpb25zLmVjb3N5c3RlbWBcbiAqIHByZWZlcmVuY2VzIChwbGF0Zm9ybSBgVXNlclByZWZlcmVuY2VzYCkuXG4gKi9cbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fRU1BSUxfUFJFRkVSRU5DRV9GSUVMRFMgPSB7XG4gICdlY29zeXN0ZW0ucmV2aWV3cy5lbWFpbCc6ICdyZXZpZXdzRW1haWwnLFxuICAnZWNvc3lzdGVtLnVwZ3JhZGVzLmVtYWlsJzogJ3VwZ3JhZGVzRW1haWwnLFxuICAnZWNvc3lzdGVtLmluc3RhbGxzLmVtYWlsJzogJ2luc3RhbGxzRW1haWwnLFxuICAnZWNvc3lzdGVtLm1vZGVyYXRpb25EaWdlc3QuZW1haWwnOiAnbW9kZXJhdGlvbkRpZ2VzdEVtYWlsJyxcbn0gYXMgY29uc3Q7XG5cbi8qKiBBIHBlci11c2VyIEVNQUlMIG9wdC1vdXQga2V5LiAqL1xuZXhwb3J0IHR5cGUgRWNvc3lzdGVtRW1haWxQcmVmZXJlbmNlID0ga2V5b2YgdHlwZW9mIEVDT1NZU1RFTV9FTUFJTF9QUkVGRVJFTkNFX0ZJRUxEUztcblxuLyoqIFN0b3JlZCBmaWVsZCBuYW1lcyBvZiB0aGUgZWNvc3lzdGVtIGVtYWlsIHByZWZlcmVuY2VzIChhbGwgZGVmYXVsdCBgdHJ1ZWApLiAqL1xuZXhwb3J0IHR5cGUgRWNvc3lzdGVtRW1haWxQcmVmZXJlbmNlRmllbGQgPSAodHlwZW9mIEVDT1NZU1RFTV9FTUFJTF9QUkVGRVJFTkNFX0ZJRUxEUylbRWNvc3lzdGVtRW1haWxQcmVmZXJlbmNlXTtcblxuLyoqIEV2ZXJ5IHN0b3JlZCBlY29zeXN0ZW0gZW1haWwtcHJlZmVyZW5jZSBmaWVsZC4gKi9cbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fRU1BSUxfUFJFRkVSRU5DRV9GSUVMRF9OQU1FUzogcmVhZG9ubHkgRWNvc3lzdGVtRW1haWxQcmVmZXJlbmNlRmllbGRbXSA9XG4gIE9iamVjdC52YWx1ZXMoRUNPU1lTVEVNX0VNQUlMX1BSRUZFUkVOQ0VfRklFTERTKTtcblxuLyoqIEhvdyBvZnRlbiBhIGJhdGNoZWQgZW1haWwgaXMgZmx1c2hlZCwgd2l0aCB0aGUgZGlnZXN0IHN1YmplY3QncyBsYWJlbC4gKi9cbmNvbnN0IERJR0VTVF9DQURFTkNFX0xBQkVMID0geyBob3VybHk6ICdIb3VybHknLCBkYWlseTogJ0RhaWx5Jywgd2Vla2x5OiAnV2Vla2x5JyB9IGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgRWNvc3lzdGVtRGlnZXN0Q2FkZW5jZSA9IGtleW9mIHR5cGVvZiBESUdFU1RfQ0FERU5DRV9MQUJFTDtcblxuLyoqIE9uZSBldmVudCdzIGRlbGl2ZXJ5IHJ1bGVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY29zeXN0ZW1FdmVudFNwZWMge1xuICAvKiogT25lLWxpbmUgZGVzY3JpcHRpb24gKGRvY3MsIGxvZ3MpLiAqL1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogQ2hhbm5lbHMgdGhlIGV2ZW50IGlzIGRlbGl2ZXJlZCBvbi4gKi9cbiAgY2hhbm5lbHM6IHJlYWRvbmx5IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWxbXTtcbiAgLyoqXG4gICAqIEVtYWlsIG9wdC1vdXQga2V5LCBvciBgbnVsbGAgd2hlbiB0aGUgZW1haWwgaXMgVFJBTlNBQ1RJT05BTCAvIHNlY3VyaXR5XG4gICAqIChOMSwgTjPigJNONSwgTjfigJNOMTAsIE4xOOKAk04yMywgTjI1LCBOMjjigJNOMzQgY2FuJ3QgYmUgdHVybmVkIG9mZikuXG4gICAqL1xuICBwcmVmZXJlbmNlOiBFY29zeXN0ZW1FbWFpbFByZWZlcmVuY2UgfCBudWxsO1xuICAvKiogV2hlbiB0aGUgZW1haWwgaXMgYmF0Y2hlZCByYXRoZXIgdGhhbiBpbW1lZGlhdGUsIGl0cyBjYWRlbmNlLiAqL1xuICBkaWdlc3Q/OiBFY29zeXN0ZW1EaWdlc3RDYWRlbmNlO1xuICAvKiogQWxsb3dlZCB0byBhZGRyZXNzIGEgcmF3IGVtYWlsOiB0aGUgYW5vbnltb3VzIFNVQk1JVFRFUiAodGhlXG4gICAqICB0cmFuc2FjdGlvbmFsIHN1Ym1pc3Npb24gbm90aWNlcykgYW5kIGFuIG9yZydzIFZFUklGSUVEIGV4dGVybmFsXG4gICAqICBzZWN1cml0eSBhZGRyZXNzICh0aGUgcGx1Z2luIHNlY3VyaXR5IG5vdGljZXMgTjMw4oCTTjMzKS4gKi9cbiAgYWxsb3dzQWRkcmVzcz86IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgbm90aWZpY2F0aW9uIGV2ZW50IHRhYmxlLCBhcyBkYXRhIChrZXllZCBieSBldmVudCBudW1iZXIpLiAqL1xuY29uc3QgRVZFTlRTID0ge1xuICBOMTogeyBkZXNjcmlwdGlvbjogJ0Fub255bW91cyBzdWJtaXNzaW9uIHJlY2VpdmVkIChtYWdpYyBsaW5rKScsIGNoYW5uZWxzOiBbJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwsIGFsbG93c0FkZHJlc3M6IHRydWUgfSxcbiAgTjI6IHsgZGVzY3JpcHRpb246ICdTdWJtaXNzaW9uIHZlcmlmaWVkLCBlbnRlcmVkIHRoZSBtb2RlcmF0aW9uIHF1ZXVlJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0ubW9kZXJhdGlvbkRpZ2VzdC5lbWFpbCcsIGRpZ2VzdDogJ2RhaWx5JyB9LFxuICBOMzogeyBkZXNjcmlwdGlvbjogJ1N1Ym1pc3Npb24gZmFpbGVkIGF1dG9tYXRlZCBnYXRlcycsIGNoYW5uZWxzOiBbJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwsIGFsbG93c0FkZHJlc3M6IHRydWUgfSxcbiAgTjQ6IHsgZGVzY3JpcHRpb246ICdTdWJtaXNzaW9uIGFwcHJvdmVkIG9yIHJlamVjdGVkJywgY2hhbm5lbHM6IFsnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICBONTogeyBkZXNjcmlwdGlvbjogJ1N1Ym1pc3Npb24gY2xhaW1lZCBieSBhbiBhY2NvdW50JywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjY6IHsgZGVzY3JpcHRpb246ICdWZXJpZmllZC1wdWJsaXNoZXIgYXBwbGljYXRpb24gc3VibWl0dGVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0ubW9kZXJhdGlvbkRpZ2VzdC5lbWFpbCcsIGRpZ2VzdDogJ2RhaWx5JyB9LFxuICBONzogeyBkZXNjcmlwdGlvbjogJ1ZlcmlmaWVkIGFwcGxpY2F0aW9uIGFwcHJvdmVkIG9yIHJlamVjdGVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjg6IHsgZGVzY3JpcHRpb246ICdNb2RlcmF0aW9uIGFjdGlvbiBvbiBhIGxpc3RpbmcgKHN1c3BlbmQsIHlhbmssIHRha2Vkb3duKScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE45OiB7IGRlc2NyaXB0aW9uOiAnT3duZXJzaGlwIHRyYW5zZmVyIHJlcXVlc3RlZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4xMDogeyBkZXNjcmlwdGlvbjogJ093bmVyc2hpcCB0cmFuc2ZlciBhY2NlcHRlZCwgZGVjbGluZWQsIGFwcHJvdmVkIG9yIHJlamVjdGVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjExOiB7IGRlc2NyaXB0aW9uOiAnSW5zdGFsbCByZXF1ZXN0ZWQgKHBvbGljeSByZXF1aXJlcyBhcHByb3ZhbCknLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5pbnN0YWxscy5lbWFpbCcgfSxcbiAgTjEyOiB7IGRlc2NyaXB0aW9uOiAnSW5zdGFsbCBhcHByb3ZlZCBvciBkZW5pZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5pbnN0YWxscy5lbWFpbCcgfSxcbiAgTjEzOiB7IGRlc2NyaXB0aW9uOiAnTmV3IHZlcnNpb24gYXZhaWxhYmxlIHdpdGhpbiBhbiBpbnN0YWxsXFwncyBwb2xpY3knLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS51cGdyYWRlcy5lbWFpbCcsIGRpZ2VzdDogJ3dlZWtseScgfSxcbiAgTjE0OiB7IGRlc2NyaXB0aW9uOiAnTGlzdGluZyBkZXByZWNhdGVkIG9yIHVubWFpbnRhaW5lZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnVwZ3JhZGVzLmVtYWlsJyB9LFxuICBOMTU6IHsgZGVzY3JpcHRpb246ICdOZXcgb3IgZWRpdGVkIHJldmlldyBvbiBhIGxpc3RpbmcnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5yZXZpZXdzLmVtYWlsJywgZGlnZXN0OiAnaG91cmx5JyB9LFxuICBOMTY6IHsgZGVzY3JpcHRpb246ICdQdWJsaXNoZXIgcmVwbGllZCB0byB5b3VyIHJldmlldycsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnJldmlld3MuZW1haWwnIH0sXG4gIE4xNzogeyBkZXNjcmlwdGlvbjogJ1JldmlldyBoZWxkIChyZXBvcnRzLCBidXJzdCwgZmlsdGVyKScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLm1vZGVyYXRpb25EaWdlc3QuZW1haWwnLCBkaWdlc3Q6ICdkYWlseScgfSxcbiAgTjE4OiB7IGRlc2NyaXB0aW9uOiAnWW91ciByZXZpZXcgd2FzIHJlbW92ZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOMTk6IHsgZGVzY3JpcHRpb246ICdSZXZpZXcgZmxhZ2dlZCBhcyBhIHNlY3VyaXR5IGlzc3VlJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjIwOiB7IGRlc2NyaXB0aW9uOiAnQWR2aXNvcnkgZHJhZnQgYXV0by1jcmVhdGVkIChDVkUgcmVzY2FuKScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yMTogeyBkZXNjcmlwdGlvbjogJ0Fkdmlzb3J5IHB1Ymxpc2hlZCBvciB3aXRoZHJhd24nLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOMjI6IHsgZGVzY3JpcHRpb246ICdNb2RlcmF0aW9uIFNMQSBicmVhY2gnLCBjaGFubmVsczogWydlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yMzogeyBkZXNjcmlwdGlvbjogJ0FkZGVkIHRvIG9yIHJlbW92ZWQgZnJvbSB0aGUgRWNvc3lzdGVtIE1hbmFnZXIgcm9sZScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yNDogeyBkZXNjcmlwdGlvbjogJ1B1Ymxpc2ggcmVxdWVzdCBzdWJtaXR0ZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5tb2RlcmF0aW9uRGlnZXN0LmVtYWlsJywgZGlnZXN0OiAnZGFpbHknIH0sXG4gIE4yNTogeyBkZXNjcmlwdGlvbjogJ1B1Ymxpc2ggcmVxdWVzdCBhcHByb3ZlZCBvciByZWplY3RlZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yNjogeyBkZXNjcmlwdGlvbjogJ0xpc3Rpbmcgb3IgdmVyc2lvbiBwYXVzZWQgYnkgaXRzIHB1Ymxpc2hlcicsIGNoYW5uZWxzOiBbJ2luX2FwcCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnVwZ3JhZGVzLmVtYWlsJyB9LFxuICBOMjc6IHsgZGVzY3JpcHRpb246ICdJbnN0YWxsZWQgbGlzdGluZyBhdXRvLXVwZGF0ZWQgd2l0aGluIGl0cyByYW5nZScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnVwZ3JhZGVzLmVtYWlsJywgZGlnZXN0OiAnd2Vla2x5JyB9LFxuICBOMjg6IHsgZGVzY3JpcHRpb246ICdBIHJlcXVlc3QgbmVlZHMgYSBzZWNvbmQgYXBwcm92YWwnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOMjk6IHsgZGVzY3JpcHRpb246ICdQbGFuIGNoYW5nZSBhZmZlY3RzIHB1Ymxpc2hpbmcnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICAvLyBQZXItb3JnIHBsdWdpbiBzZWN1cml0eSBub3RpY2VzIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kIFwiU2NhbiBnYXRlc1wiKS5cbiAgLy8gUmVjaXBpZW50cyBmb2xsb3cgdGhlIG9yZydzIHBsdWdpbiBzZWN1cml0eSBub3RpZmljYXRpb24gc2V0dGluZ3M7IHRoZSBvcmcnc1xuICAvLyB3ZWJob29rIChpZiBhbnkpIGlzIHNlbnQgYnkgdGhlIHBsdWdpbiBzZXJ2aWNlIGl0c2VsZi4gTjMxJ3MgZW1haWwgaG9ub3JzXG4gIC8vIHRoZSBvcmcncyBkaWdlc3Qgc2V0dGluZyAodGhlIHNlbmRlciBiYXRjaGVzIGl0KSwgTjMwIGlzIGFsd2F5cyBpbW1lZGlhdGUuXG4gIE4zMDogeyBkZXNjcmlwdGlvbjogJ1BsdWdpbiB2ZXJzaW9uIGJsb2NrZWQgKHVuc2Nhbm5lZCBvciBmaXhhYmxlIENyaXRpY2FsKScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsLCBhbGxvd3NBZGRyZXNzOiB0cnVlIH0sXG4gIE4zMTogeyBkZXNjcmlwdGlvbjogJ1Jlc2NhbiBmb3VuZCBuZXcgQ3JpdGljYWwvSGlnaCBpbiBhIHBsdWdpbiB2ZXJzaW9uJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwsIGFsbG93c0FkZHJlc3M6IHRydWUgfSxcbiAgLy8gUGlwZWxpbmUtb3duZXIgbm90aWNlczogYSBsb29rdXAgLyBydW50aW1lIGNoZWNrIFJFRlVTRUQgYSBwaXBlbGluZSdzIHBsdWdpblxuICAvLyB2ZXJzaW9uIChkZWR1cGxpY2F0ZWQgcGVyIHBpcGVsaW5lICsgdmVyc2lvbiBwZXIgZGF5KSwgYW5kIGEgdGltZS1ib3hlZCByaXNrXG4gIC8vIGFjY2VwdGFuY2Ugb2YgYSBwaXBlbGluZSdzIGZpbmRpbmdzIExBUFNFRCAodGhlIGZpbmRpbmdzIGFyZSBsaXZlIGFnYWluKS5cbiAgLy8gUm91dGVkIHRvIHRoZSBvcmcncyBwaXBlbGluZSB3cml0ZXJzIHVuZGVyIHRoZSBzYW1lIHNlY3VyaXR5IHNldHRpbmdzLlxuICBOMzI6IHsgZGVzY3JpcHRpb246ICdQaXBlbGluZSBibG9ja2VkIGJ5IGEgcGx1Z2luIHZ1bG5lcmFiaWxpdHkgcG9saWN5JywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwsIGFsbG93c0FkZHJlc3M6IHRydWUgfSxcbiAgTjMzOiB7IGRlc2NyaXB0aW9uOiAnUGlwZWxpbmUgdnVsbmVyYWJpbGl0eSByaXNrIGFjY2VwdGFuY2UgbGFwc2VkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwsIGFsbG93c0FkZHJlc3M6IHRydWUgfSxcbiAgLy8gTWFuYWdlZCB0b29sY2hhaW4gaHlnaWVuZSAoZG9jcy9wbGFucy9ib290c3RyYXAtaW1hZ2UtdmVyc2lvbmluZy5tZCDCpzEwKTogYW5cbiAgLy8gb3JnJ3MgdG9vbGNoYWluIGRlZmF1bHQgKHRvIGl0cyBgdG9vbGNoYWluOm1hbmFnZWAgaG9sZGVycykgb3IgYSBwaXBlbGluZSdzXG4gIC8vIHBpbm5lZCByZWxlYXNlICh0byB0aGUgb3JnJ3MgcGlwZWxpbmUgd3JpdGVycykgd2FzIHlhbmtlZCBvciBkZXByZWNhdGVkLFxuICAvLyBwaWNrZWQgdXAgYSBLRVYgb3IgZml4YWJsZSBDcml0aWNhbCBmaW5kaW5nLCBvciBmZWxsIG1vcmUgdGhhbiB0aHJlZVxuICAvLyByZWxlYXNlcyBiZWhpbmQgdGhlIHBsYXRmb3JtIGRlZmF1bHQuIFRyYW5zYWN0aW9uYWw6IGl0IHNheXMgdGhlIG9yZydzXG4gIC8vIHBpcGVsaW5lcyBhcmUgYnVpbGRpbmcgb24gc29tZXRoaW5nIGl0IHNob3VsZCBtb3ZlIG9mZi5cbiAgTjM0OiB7IGRlc2NyaXB0aW9uOiAnTWFuYWdlZCB0b29sY2hhaW46IGEgcmVsZWFzZSB5b3UgdXNlIHdhcyB5YW5rZWQsIGRlcHJlY2F0ZWQsIGZvdW5kIHZ1bG5lcmFibGUgb3IgZmVsbCBiZWhpbmQ7IHRoZSBwbGF0Zm9ybSBkZWZhdWx0IG1vdmVkOyB5b3VyIG9yZyBqb2luZWQgYSBjYW5hcnk7IG9yIGEgcGlwZWxpbmUgbmVlZHMgYSByZS1kZXBsb3kgdG8gcmVjb3ZlcicsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG59IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBFY29zeXN0ZW1FdmVudFNwZWM+O1xuXG4vKiogQSBub3RpZmljYXRpb24gZXZlbnQgbnVtYmVyLiAqL1xuZXhwb3J0IHR5cGUgRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnRJZCA9IGtleW9mIHR5cGVvZiBFVkVOVFM7XG5cbi8qKiBUaGUgbm90aWZpY2F0aW9uIGV2ZW50IHRhYmxlLCBhcyBkYXRhLiAqL1xuZXhwb3J0IGNvbnN0IEVDT1NZU1RFTV9OT1RJRklDQVRJT05fRVZFTlRTOiBSZWFkb25seTxSZWNvcmQ8RWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnRJZCwgRWNvc3lzdGVtRXZlbnRTcGVjPj4gPSBFVkVOVFM7XG5cbi8qKiBXaGV0aGVyIGB2YWx1ZWAgaXMgYSBub3RpZmljYXRpb24gZXZlbnQgbnVtYmVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBFY29zeXN0ZW1Ob3RpZmljYXRpb25FdmVudElkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEVDT1NZU1RFTV9OT1RJRklDQVRJT05fRVZFTlRTLCB2YWx1ZSk7XG59XG5cbi8qKiBPcmctbG9jYWwgcGVybWlzc2lvbnMgYW4ge0BsaW5rIEVjb3N5c3RlbVJlY2lwaWVudFNwZWN9IGBvcmdfcGVybWlzc2lvbmAgcnVsZSBtYXkgbmFtZS4gKi9cbmNvbnN0IE9SR19SRUNJUElFTlRfUEVSTUlTU0lPTlMgPSBbJ3B1Ymxpc2hlcnM6bWFuYWdlJywgJ3BsdWdpbl9pbnN0YWxsczptYW5hZ2UnLCAncGx1Z2luczp3cml0ZScsICdwaXBlbGluZXM6d3JpdGUnLCAndG9vbGNoYWluOm1hbmFnZSddIGFzIGNvbnN0IHNhdGlzZmllcyByZWFkb25seSBQZXJtaXNzaW9uW107XG5leHBvcnQgdHlwZSBFY29zeXN0ZW1PcmdSZWNpcGllbnRQZXJtaXNzaW9uID0gKHR5cGVvZiBPUkdfUkVDSVBJRU5UX1BFUk1JU1NJT05TKVtudW1iZXJdO1xuLyoqIFN5c3RlbS1vcmcgcGVybWlzc2lvbnMgYSBgbW9kZXJhdG9yc2AgcnVsZSBtYXkgbmFtZS4gKi9cbmNvbnN0IE1PREVSQVRPUl9QRVJNSVNTSU9OUyA9IFsncGx1Z2luczptb2RlcmF0ZScsICdwdWJsaXNoZXJzOnZlcmlmeSddIGFzIGNvbnN0IHNhdGlzZmllcyByZWFkb25seSBQZXJtaXNzaW9uW107XG5leHBvcnQgdHlwZSBFY29zeXN0ZW1Nb2RlcmF0b3JQZXJtaXNzaW9uID0gKHR5cGVvZiBNT0RFUkFUT1JfUEVSTUlTU0lPTlMpW251bWJlcl07XG5cbi8qKlxuICogQSByZWNpcGllbnQgUlVMRSwgcmVzb2x2ZWQgYnkgcGxhdGZvcm0gYXQgc2VuZCB0aW1lOlxuICpcbiAqICAtIGB1c2VyYCDigJQgb25lIHVzZXIgKFJlcXVlc3RlciwgUmV2aWV3IGF1dGhvciwgdGhlIGFmZmVjdGVkIHVzZXIgb2YgTjIzKS5cbiAqICAgIGBvcmdJZGAgcGlja3MgdGhlIGluYm94OyBkZWZhdWx0cyB0byB0aGUgdXNlcidzIGxhc3QgYWN0aXZlIG9yZy5cbiAqICAtIGBvcmdfcGVybWlzc2lvbmAg4oCUIGFjdGl2ZSBtZW1iZXJzIG9mIGBvcmdJZGAgaG9sZGluZyBgcGVybWlzc2lvbmBcbiAqICAgIChQdWJsaXNoZXIgbWFuYWdlcnMgPSBgcHVibGlzaGVyczptYW5hZ2VgLCBPcmcgYXBwcm92ZXJzID1cbiAqICAgIGBwbHVnaW5faW5zdGFsbHM6bWFuYWdlYCwgcGx1Z2luIHdyaXRlcnMgPSBgcGx1Z2luczp3cml0ZWAsIHRvb2xjaGFpblxuICogICAgbWFuYWdlcnMgPSBgdG9vbGNoYWluOm1hbmFnZWApLiBXaXRoXG4gKiAgICBgaW5oZXJpdEZyb21Sb290YCwgYSB0ZWFtIHdpdGggbm8gaG9sZGVycyBmYWxscyBiYWNrIHRvIGl0cyByb290IG9yZydzXG4gKiAgICBob2xkZXJzOyB3aXRoIG5vbmUgYW55d2hlcmUsIHRoZSBvcmcncyBvd25lcnMuXG4gKiAgLSBgb3JnX21lbWJlcnNgIOKAlCB0aGUgbmFtZWQgdXNlcnMsIGJ1dCBvbmx5IHRob3NlIHdobyBhcmUgQUNUSVZFIG1lbWJlcnMgb2ZcbiAqICAgIGBvcmdJZGAgYXQgc2VuZCB0aW1lIChhbiBvcmcncyBjaG9zZW4gc2VjdXJpdHkgcmVjaXBpZW50czogYSBzdGFsZSBpZCwgb3JcbiAqICAgIHNvbWVvbmUgd2hvIGxlZnQsIHJlY2VpdmVzIG5vdGhpbmcpLlxuICogIC0gYG1vZGVyYXRvcnNgIOKAlCB0aGUgc3lzdGVtIG9yZydzIGhvbGRlcnMgb2YgYHBlcm1pc3Npb25gICh0aGUgRWNvc3lzdGVtXG4gKiAgICBNYW5hZ2VyIHJvbGUpLCBtaW51cyBhbnlvbmUgd2l0aCBhIGNvbmZsaWN0IG9mIGludGVyZXN0IChtZW1iZXJzIG9mXG4gKiAgICBgZXhjbHVkZU1lbWJlcnNPZk9yZ0lkYCwgb3IgdGhlIGxpc3RlZCB1c2Vycyk7IHN1cGVyYWRtaW5zIHdoZW4gZW1wdHkuXG4gKiAgLSBgc3VwZXJhZG1pbnNgIOKAlCBldmVyeSBwbGF0Zm9ybSBzdXBlcmFkbWluLlxuICogIC0gYGFkZHJlc3NgIOKAlCBhIHJhdyBhZGRyZXNzOyBvbmx5IHRoZSBhbm9ueW1vdXMgU1VCTUlUVEVSIG5vdGljZXMgKE4xLCBOMyxcbiAqICAgIE40KSwgd2hvc2UgcmVjaXBpZW50IGhhcyBubyBhY2NvdW50LCBhbmQgYW4gb3JnJ3MgVkVSSUZJRUQgZXh0ZXJuYWxcbiAqICAgIHNlY3VyaXR5IGFkZHJlc3Mgb24gdGhlIHBsdWdpbiBzZWN1cml0eSBub3RpY2VzIChOMzDigJNOMzMpLlxuICovXG5leHBvcnQgdHlwZSBFY29zeXN0ZW1SZWNpcGllbnRTcGVjID1cbiAgfCB7IGtpbmQ6ICd1c2VyJzsgdXNlcklkOiBzdHJpbmc7IG9yZ0lkPzogc3RyaW5nIH1cbiAgfCB7IGtpbmQ6ICdvcmdfcGVybWlzc2lvbic7IG9yZ0lkOiBzdHJpbmc7IHBlcm1pc3Npb246IEVjb3N5c3RlbU9yZ1JlY2lwaWVudFBlcm1pc3Npb247IGluaGVyaXRGcm9tUm9vdD86IGJvb2xlYW4gfVxuICB8IHsga2luZDogJ29yZ19tZW1iZXJzJzsgb3JnSWQ6IHN0cmluZzsgdXNlcklkczogc3RyaW5nW10gfVxuICB8IHsga2luZDogJ21vZGVyYXRvcnMnOyBwZXJtaXNzaW9uOiBFY29zeXN0ZW1Nb2RlcmF0b3JQZXJtaXNzaW9uOyBleGNsdWRlTWVtYmVyc09mT3JnSWQ/OiBzdHJpbmc7IGV4Y2x1ZGVVc2VySWRzPzogc3RyaW5nW10gfVxuICB8IHsga2luZDogJ3N1cGVyYWRtaW5zJyB9XG4gIHwgeyBraW5kOiAnYWRkcmVzcyc7IGVtYWlsOiBzdHJpbmcgfTtcblxuLyoqIFRoZSBib2R5IG9mIGFuIGVjb3N5c3RlbSBzZW5kIHRocm91Z2ggcGxhdGZvcm0ncyBub3RpZnkgcmVsYXkuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjb3N5c3RlbU5vdGlmeVJlcXVlc3Qge1xuICBldmVudDogRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnRJZDtcbiAgcmVjaXBpZW50czogRWNvc3lzdGVtUmVjaXBpZW50U3BlY1tdO1xuICBzdWJqZWN0OiBzdHJpbmc7XG4gIC8qKiBQbGFpbi10ZXh0IGJvZHkgKGVtYWlsIGJvZHkgYW5kIGluLWFwcCBjb250ZW50KS4gKi9cbiAgdGV4dDogc3RyaW5nO1xuICAvKiogU3Vic2V0IG9mIHRoZSBldmVudCdzIGNoYW5uZWxzIHRvIGRlbGl2ZXIgb24gKGRlZmF1bHQ6IGFsbCBvZiB0aGVtKS4gVGhlXG4gICAqICBkaWdlc3QgZGlzcGF0Y2hlciBzZW5kcyBgWydlbWFpbCddYCBiZWNhdXNlIGluLWFwcCB3ZW50IG91dCBhdCBlbnF1ZXVlLiAqL1xuICBjaGFubmVscz86IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWxbXTtcbiAgLyoqIERlbGl2ZXIgdGhlIGVtYWlsIGV2ZW4gdG8gdXNlcnMgd2hvIG9wdGVkIG91dCDigJQgZm9yIGFuIGV2ZW50IHdob3NlXG4gICAqICBub3JtYWxseS1vcHRpb25hbCBlbWFpbCBpcyBtYW5kYXRvcnkgaW4gdGhpcyBpbnN0YW5jZSAoTjI0IHlhbmssIGFkdmlzb3J5XG4gICAqICBhbmQgc2VjdXJpdHktZml4IHJlcXVlc3RzKS4gKi9cbiAgbWFuZGF0b3J5PzogYm9vbGVhbjtcbn1cblxuLyoqIEhhcmQgY2FwcywgbWF0Y2hpbmcgdGhlIG1lc3NhZ2Ugc2VydmljZSdzIG93biBsaW1pdHMuICovXG5leHBvcnQgY29uc3QgRUNPU1lTVEVNX05PVElGWV9TVUJKRUNUX01BWCA9IDUwMDtcbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fTk9USUZZX1RFWFRfTUFYID0gMTAwMDA7XG5jb25zdCBNQVhfUkVDSVBJRU5UX1JVTEVTID0gNTA7XG5cbi8qKiBBdCBtb3N0IHRoaXMgbWFueSB1c2VycyBpbiBvbmUgYG9yZ19tZW1iZXJzYCBydWxlLiAqL1xuZXhwb3J0IGNvbnN0IEVDT1NZU1RFTV9PUkdfTUVNQkVSU19NQVggPSAxMDA7XG5jb25zdCBFTUFJTF9TSEFQRSA9IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvO1xuXG5mdW5jdGlvbiBub25FbXB0eVN0cmluZyh2OiB1bmtub3duLCBtYXggPSAyNTUpOiB2IGlzIHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgdi50cmltKCkubGVuZ3RoID4gMCAmJiB2Lmxlbmd0aCA8PSBtYXg7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVjaXBpZW50KHJhdzogdW5rbm93biwgc3BlYzogRWNvc3lzdGVtRXZlbnRTcGVjKTogRWNvc3lzdGVtUmVjaXBpZW50U3BlYyB8IHN0cmluZyB7XG4gIGlmICghcmF3IHx8IHR5cGVvZiByYXcgIT09ICdvYmplY3QnKSByZXR1cm4gJ2VhY2ggcmVjaXBpZW50IG11c3QgYmUgYW4gb2JqZWN0JztcbiAgY29uc3QgciA9IHJhdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgc3dpdGNoIChyLmtpbmQpIHtcbiAgICBjYXNlICd1c2VyJzpcbiAgICAgIGlmICghbm9uRW1wdHlTdHJpbmcoci51c2VySWQpKSByZXR1cm4gJ3VzZXIgcmVjaXBpZW50IG5lZWRzIHVzZXJJZCc7XG4gICAgICBpZiAoci5vcmdJZCAhPT0gdW5kZWZpbmVkICYmICFub25FbXB0eVN0cmluZyhyLm9yZ0lkKSkgcmV0dXJuICd1c2VyIHJlY2lwaWVudCBvcmdJZCBtdXN0IGJlIGEgc3RyaW5nJztcbiAgICAgIHJldHVybiB7IGtpbmQ6ICd1c2VyJywgdXNlcklkOiByLnVzZXJJZCwgLi4uKHIub3JnSWQgPyB7IG9yZ0lkOiByLm9yZ0lkIGFzIHN0cmluZyB9IDoge30pIH07XG4gICAgY2FzZSAnb3JnX3Blcm1pc3Npb24nOlxuICAgICAgaWYgKCFub25FbXB0eVN0cmluZyhyLm9yZ0lkKSkgcmV0dXJuICdvcmdfcGVybWlzc2lvbiByZWNpcGllbnQgbmVlZHMgb3JnSWQnO1xuICAgICAgaWYgKHR5cGVvZiByLnBlcm1pc3Npb24gIT09ICdzdHJpbmcnIHx8ICEoT1JHX1JFQ0lQSUVOVF9QRVJNSVNTSU9OUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMoci5wZXJtaXNzaW9uKSkgcmV0dXJuICdvcmdfcGVybWlzc2lvbiByZWNpcGllbnQgbmFtZXMgYW4gdW5zdXBwb3J0ZWQgcGVybWlzc2lvbic7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiAnb3JnX3Blcm1pc3Npb24nLFxuICAgICAgICBvcmdJZDogci5vcmdJZCxcbiAgICAgICAgcGVybWlzc2lvbjogci5wZXJtaXNzaW9uIGFzIEVjb3N5c3RlbU9yZ1JlY2lwaWVudFBlcm1pc3Npb24sXG4gICAgICAgIC4uLihyLmluaGVyaXRGcm9tUm9vdCA9PT0gdHJ1ZSA/IHsgaW5oZXJpdEZyb21Sb290OiB0cnVlIH0gOiB7fSksXG4gICAgICB9O1xuICAgIGNhc2UgJ29yZ19tZW1iZXJzJzoge1xuICAgICAgaWYgKCFub25FbXB0eVN0cmluZyhyLm9yZ0lkKSkgcmV0dXJuICdvcmdfbWVtYmVycyByZWNpcGllbnQgbmVlZHMgb3JnSWQnO1xuICAgICAgY29uc3QgdXNlcnMgPSByLnVzZXJJZHM7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodXNlcnMpIHx8IHVzZXJzLmxlbmd0aCA9PT0gMCB8fCAhdXNlcnMuZXZlcnkoKHUpID0+IG5vbkVtcHR5U3RyaW5nKHUpKSkgcmV0dXJuICdvcmdfbWVtYmVycyByZWNpcGllbnQgbmVlZHMgYSBub24tZW1wdHkgdXNlcklkcyBhcnJheSc7XG4gICAgICBpZiAodXNlcnMubGVuZ3RoID4gRUNPU1lTVEVNX09SR19NRU1CRVJTX01BWCkgcmV0dXJuIGBvcmdfbWVtYmVycyByZWNpcGllbnQgbmFtZXMgYXQgbW9zdCAke0VDT1NZU1RFTV9PUkdfTUVNQkVSU19NQVh9IHVzZXJzYDtcbiAgICAgIHJldHVybiB7IGtpbmQ6ICdvcmdfbWVtYmVycycsIG9yZ0lkOiByLm9yZ0lkLCB1c2VySWRzOiBbLi4ubmV3IFNldCh1c2VycyBhcyBzdHJpbmdbXSldIH07XG4gICAgfVxuICAgIGNhc2UgJ21vZGVyYXRvcnMnOiB7XG4gICAgICBpZiAodHlwZW9mIHIucGVybWlzc2lvbiAhPT0gJ3N0cmluZycgfHwgIShNT0RFUkFUT1JfUEVSTUlTU0lPTlMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHIucGVybWlzc2lvbikpIHJldHVybiAnbW9kZXJhdG9ycyByZWNpcGllbnQgbmFtZXMgYW4gdW5zdXBwb3J0ZWQgcGVybWlzc2lvbic7XG4gICAgICBpZiAoci5leGNsdWRlTWVtYmVyc09mT3JnSWQgIT09IHVuZGVmaW5lZCAmJiAhbm9uRW1wdHlTdHJpbmcoci5leGNsdWRlTWVtYmVyc09mT3JnSWQpKSByZXR1cm4gJ2V4Y2x1ZGVNZW1iZXJzT2ZPcmdJZCBtdXN0IGJlIGEgc3RyaW5nJztcbiAgICAgIGNvbnN0IGV4Y2x1ZGUgPSByLmV4Y2x1ZGVVc2VySWRzO1xuICAgICAgaWYgKGV4Y2x1ZGUgIT09IHVuZGVmaW5lZCAmJiAoIUFycmF5LmlzQXJyYXkoZXhjbHVkZSkgfHwgIWV4Y2x1ZGUuZXZlcnkoKHUpID0+IG5vbkVtcHR5U3RyaW5nKHUpKSkpIHJldHVybiAnZXhjbHVkZVVzZXJJZHMgbXVzdCBiZSBhbiBhcnJheSBvZiBpZHMnO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2luZDogJ21vZGVyYXRvcnMnLFxuICAgICAgICBwZXJtaXNzaW9uOiByLnBlcm1pc3Npb24gYXMgRWNvc3lzdGVtTW9kZXJhdG9yUGVybWlzc2lvbixcbiAgICAgICAgLi4uKHIuZXhjbHVkZU1lbWJlcnNPZk9yZ0lkID8geyBleGNsdWRlTWVtYmVyc09mT3JnSWQ6IHIuZXhjbHVkZU1lbWJlcnNPZk9yZ0lkIGFzIHN0cmluZyB9IDoge30pLFxuICAgICAgICAuLi4oZXhjbHVkZSA/IHsgZXhjbHVkZVVzZXJJZHM6IGV4Y2x1ZGUgYXMgc3RyaW5nW10gfSA6IHt9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ3N1cGVyYWRtaW5zJzpcbiAgICAgIHJldHVybiB7IGtpbmQ6ICdzdXBlcmFkbWlucycgfTtcbiAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGlmICghc3BlYy5hbGxvd3NBZGRyZXNzKSByZXR1cm4gJ2FkZHJlc3MgcmVjaXBpZW50cyBhcmUgb25seSBhbGxvd2VkIGZvciBhbm9ueW1vdXMtc3VibWlzc2lvbiBhbmQgcGx1Z2luIHNlY3VyaXR5IG5vdGljZXMnO1xuICAgICAgaWYgKCFub25FbXB0eVN0cmluZyhyLmVtYWlsLCAzMjApIHx8ICFFTUFJTF9TSEFQRS50ZXN0KHIuZW1haWwpKSByZXR1cm4gJ2FkZHJlc3MgcmVjaXBpZW50IG5lZWRzIGEgdmFsaWQgZW1haWwnO1xuICAgICAgcmV0dXJuIHsga2luZDogJ2FkZHJlc3MnLCBlbWFpbDogci5lbWFpbC50cmltKCkudG9Mb3dlckNhc2UoKSB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ3Vua25vd24gcmVjaXBpZW50IGtpbmQnO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW4ge0BsaW5rIEVjb3N5c3RlbU5vdGlmeVJlcXVlc3R9LiBSZXR1cm5zIHRoZSBub3JtYWxpemVkIHJlcXVlc3QsXG4gKiBvciBhbiBlcnJvciBzdHJpbmcgKHRoZSByZWxheSdzIDQwMCkuIFB1cmUsIHNvIGJvdGggdGhlIHNlbmRlciAoZmFpbCBhdFxuICogZW5xdWV1ZSwgbm90IGF0IDA5OjAwIHRvbW9ycm93KSBhbmQgdGhlIHJlbGF5IHVzZSB0aGUgc2FtZSBydWxlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRWNvc3lzdGVtTm90aWZ5UmVxdWVzdChib2R5OiB1bmtub3duKTogRWNvc3lzdGVtTm90aWZ5UmVxdWVzdCB8IHN0cmluZyB7XG4gIGlmICghYm9keSB8fCB0eXBlb2YgYm9keSAhPT0gJ29iamVjdCcpIHJldHVybiAnYm9keSBtdXN0IGJlIGFuIG9iamVjdCc7XG4gIGNvbnN0IGIgPSBib2R5IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAoIWlzRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnQoYi5ldmVudCkpIHJldHVybiAnZXZlbnQgbXVzdCBiZSBvbmUgb2YgTjEuLk4zNCc7XG4gIGNvbnN0IHNwZWMgPSBFQ09TWVNURU1fTk9USUZJQ0FUSU9OX0VWRU5UU1tiLmV2ZW50XTtcbiAgaWYgKCFub25FbXB0eVN0cmluZyhiLnN1YmplY3QsIEVDT1NZU1RFTV9OT1RJRllfU1VCSkVDVF9NQVgpKSByZXR1cm4gYHN1YmplY3QgaXMgcmVxdWlyZWQgKG1heCAke0VDT1NZU1RFTV9OT1RJRllfU1VCSkVDVF9NQVh9KWA7XG4gIGlmICghbm9uRW1wdHlTdHJpbmcoYi50ZXh0LCBFQ09TWVNURU1fTk9USUZZX1RFWFRfTUFYKSkgcmV0dXJuIGB0ZXh0IGlzIHJlcXVpcmVkIChtYXggJHtFQ09TWVNURU1fTk9USUZZX1RFWFRfTUFYfSlgO1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYi5yZWNpcGllbnRzKSB8fCBiLnJlY2lwaWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gJ3JlY2lwaWVudHMgbXVzdCBiZSBhIG5vbi1lbXB0eSBhcnJheSc7XG4gIGlmIChiLnJlY2lwaWVudHMubGVuZ3RoID4gTUFYX1JFQ0lQSUVOVF9SVUxFUykgcmV0dXJuIGBhdCBtb3N0ICR7TUFYX1JFQ0lQSUVOVF9SVUxFU30gcmVjaXBpZW50IHJ1bGVzYDtcbiAgY29uc3QgcmVjaXBpZW50czogRWNvc3lzdGVtUmVjaXBpZW50U3BlY1tdID0gW107XG4gIGZvciAoY29uc3QgcmF3IG9mIGIucmVjaXBpZW50cykge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlUmVjaXBpZW50KHJhdywgc3BlYyk7XG4gICAgaWYgKHR5cGVvZiBwYXJzZWQgPT09ICdzdHJpbmcnKSByZXR1cm4gcGFyc2VkO1xuICAgIHJlY2lwaWVudHMucHVzaChwYXJzZWQpO1xuICB9XG4gIGxldCBjaGFubmVsczogRWNvc3lzdGVtTm90aWZpY2F0aW9uQ2hhbm5lbFtdIHwgdW5kZWZpbmVkO1xuICBpZiAoYi5jaGFubmVscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGIuY2hhbm5lbHMpIHx8IGIuY2hhbm5lbHMubGVuZ3RoID09PSAwKSByZXR1cm4gJ2NoYW5uZWxzIG11c3QgYmUgYSBub24tZW1wdHkgYXJyYXknO1xuICAgIGNvbnN0IGJhZCA9IGIuY2hhbm5lbHMuZmlsdGVyKChjKSA9PiAhc3BlYy5jaGFubmVscy5pbmNsdWRlcyhjIGFzIEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWwpKTtcbiAgICBpZiAoYmFkLmxlbmd0aCA+IDApIHJldHVybiBgZXZlbnQgJHtiLmV2ZW50fSBpcyBub3QgZGVsaXZlcmVkIG9uOiAke2JhZC5qb2luKCcsICcpfWA7XG4gICAgY2hhbm5lbHMgPSBbLi4ubmV3IFNldChiLmNoYW5uZWxzIGFzIEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWxbXSldO1xuICB9XG4gIGlmIChiLm1hbmRhdG9yeSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBiLm1hbmRhdG9yeSAhPT0gJ2Jvb2xlYW4nKSByZXR1cm4gJ21hbmRhdG9yeSBtdXN0IGJlIGEgYm9vbGVhbic7XG4gIHJldHVybiB7XG4gICAgZXZlbnQ6IGIuZXZlbnQsXG4gICAgcmVjaXBpZW50cyxcbiAgICBzdWJqZWN0OiBiLnN1YmplY3QudHJpbSgpLFxuICAgIHRleHQ6IGIudGV4dC50cmltKCksXG4gICAgLi4uKGNoYW5uZWxzID8geyBjaGFubmVscyB9IDoge30pLFxuICAgIC4uLihiLm1hbmRhdG9yeSA9PT0gdHJ1ZSA/IHsgbWFuZGF0b3J5OiB0cnVlIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKiBUaGUgVVRDIGhvdXIgZGlnZXN0cyBmbHVzaCBhdCAoXCJkYWlseSBkaWdlc3QgZW1haWwgKDA5OjAwIFVUQylcIikuICovXG5leHBvcnQgY29uc3QgRUNPU1lTVEVNX0RJR0VTVF9IT1VSX1VUQyA9IDk7XG5cbi8qKlxuICogVGhlIG5leHQgZmx1c2ggdGltZSBmb3IgYSBkaWdlc3QgY2FkZW5jZSwgc3RyaWN0bHkgYWZ0ZXIgYG5vd2A6XG4gKiBgaG91cmx5YCDihpIgdGhlIG5leHQgdG9wIG9mIHRoZSBob3VyOyBgZGFpbHlgIOKGkiB0aGUgbmV4dCAwOTowMCBVVEM7XG4gKiBgd2Vla2x5YCDihpIgdGhlIG5leHQgTW9uZGF5IDA5OjAwIFVUQy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHRFY29zeXN0ZW1EaWdlc3RUaW1lKGNhZGVuY2U6IEVjb3N5c3RlbURpZ2VzdENhZGVuY2UsIG5vdzogRGF0ZSA9IG5ldyBEYXRlKCkpOiBEYXRlIHtcbiAgY29uc3QgdCA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkpO1xuICBpZiAoY2FkZW5jZSA9PT0gJ2hvdXJseScpIHtcbiAgICB0LnNldFVUQ01pbnV0ZXMoMCwgMCwgMCk7XG4gICAgdC5zZXRVVENIb3Vycyh0LmdldFVUQ0hvdXJzKCkgKyAxKTtcbiAgICByZXR1cm4gdDtcbiAgfVxuICB0LnNldFVUQ0hvdXJzKEVDT1NZU1RFTV9ESUdFU1RfSE9VUl9VVEMsIDAsIDAsIDApO1xuICBpZiAodC5nZXRUaW1lKCkgPD0gbm93LmdldFRpbWUoKSkgdC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpICsgMSk7XG4gIGlmIChjYWRlbmNlID09PSAnd2Vla2x5Jykge1xuICAgIC8vIGdldFVUQ0RheTogMCA9IFN1bmRheSDigKYgMSA9IE1vbmRheS5cbiAgICB3aGlsZSAodC5nZXRVVENEYXkoKSAhPT0gMSkgdC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpICsgMSk7XG4gIH1cbiAgcmV0dXJuIHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGVtcGxhdGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEEgcmVuZGVyZWQgbm90aWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY29zeXN0ZW1Ob3RpZmljYXRpb25Db250ZW50IHtcbiAgc3ViamVjdDogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTjIzIOKAlCBzb21lb25lIHdhcyBhZGRlZCB0byBvciByZW1vdmVkIGZyb20gdGhlIHN5c3RlbSBvcmcncyBFY29zeXN0ZW1cbiAqIE1hbmFnZXIgcm9sZS4gU2VudCB0byBldmVyeSBzdXBlcmFkbWluIGFuZCB0byB0aGUgYWZmZWN0ZWQgdXNlcjtcbiAqIHRyYW5zYWN0aW9uYWwgKG5vIG9wdC1vdXQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRWNvc3lzdGVtTWFuYWdlckNoYW5nZShpbnB1dDoge1xuICAvKiogVGhlIGFmZmVjdGVkIHVzZXIncyBkaXNwbGF5IG5hbWUgb3IgZW1haWwuICovXG4gIHVzZXI6IHN0cmluZztcbiAgYWRkZWQ6IGJvb2xlYW47XG4gIC8qKiBXaG8gbWFkZSB0aGUgY2hhbmdlIChzdXBlcmFkbWlucyBvbmx5IGNhbiksIHdoZW4ga25vd24uICovXG4gIGFjdG9yPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIFJvbGUgYWN0dWFsbHkgZ3JhbnRlZC4gVGhpcyBub3RpY2UgZmlyZXMgZm9yIEFOWSBSb2xlIGNhcnJ5aW5nIGFcbiAgICogc3lzdGVtLW9yZy1vbmx5IHBlcm1pc3Npb24g4oCUIGBlY29zeXN0ZW1Sb2xlTmFtZWAgcmV0dXJucyB3aGljaGV2ZXIgb25lIGl0XG4gICAqIGlzIOKAlCBzbyBoYXJkLWNvZGluZyBcIkVjb3N5c3RlbSBNYW5hZ2VyXCIgYW5ub3VuY2VkIHN0YWZmaW5nICoqQ29uc29sZVxuICAgKiBBZG1pbmlzdHJhdG9yKiogKGEgcmVhZC93cml0ZSBzaGVsbCBvdmVyIGV2ZXJ5IHRlbmFudCdzIHJvd3MpIG9yICoqU3VwcG9ydFxuICAgKiBMZWFkKiogKGBpbXBlcnNvbmF0aW9uOm9wZW5gKSBhcyBhIHBsdWdpbi1tb2RlcmF0aW9uIGdyYW50LiBUaGUgYXVkaXQgcm93XG4gICAqIGhhZCB0aGUgbmFtZSBhbGwgYWxvbmc7IHRoZSBtZXNzYWdlIG9wZXJhdG9ycyBhY3R1YWxseSByZWFkIGRpZCBub3QuXG4gICAqL1xuICByb2xlPzogc3RyaW5nO1xufSk6IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNvbnRlbnQge1xuICBjb25zdCB2ZXJiID0gaW5wdXQuYWRkZWQgPyAnYWRkZWQgdG8nIDogJ3JlbW92ZWQgZnJvbSc7XG4gIGNvbnN0IGJ5ID0gaW5wdXQuYWN0b3IgPyBgIGJ5ICR7aW5wdXQuYWN0b3J9YCA6ICcnO1xuICBjb25zdCByb2xlID0gaW5wdXQucm9sZSA/PyAnRWNvc3lzdGVtIE1hbmFnZXInO1xuICAvLyBUaGUgYm9keSBkZXNjcmliZXMgd2hhdCB0aGUgUk9MRSBkb2VzLCBzbyBpdCBjYW4gb25seSBzcGVhayBmb3IgdGhlIG9uZSBpdFxuICAvLyB3YXMgd3JpdHRlbiBhYm91dC4gRm9yIGFueSBvdGhlciwgc2F5IHdoYXQgaGFwcGVuZWQgYW5kIGxlYXZlIHRoZVxuICAvLyBjYXBhYmlsaXRpZXMgdG8gdGhlIFJvbGUgaXRzZWxmIHJhdGhlciB0aGFuIGRlc2NyaWJpbmcgdGhlIHdyb25nIG9uZXMuXG4gIGNvbnN0IGVjb3N5c3RlbSA9IHJvbGUgPT09ICdFY29zeXN0ZW0gTWFuYWdlcic7XG4gIHJldHVybiB7XG4gICAgc3ViamVjdDogYCR7aW5wdXQudXNlcn0gd2FzICR7dmVyYn0gdGhlICR7cm9sZX0gcm9sZWAsXG4gICAgdGV4dDogaW5wdXQuYWRkZWRcbiAgICAgID8gYCR7aW5wdXQudXNlcn0gd2FzICR7dmVyYn0gdGhlICR7cm9sZX0gcm9sZSR7Ynl9LmBcbiAgICAgICAgKyAoZWNvc3lzdGVtXG4gICAgICAgICAgPyAnIEVjb3N5c3RlbSBNYW5hZ2VycyBkZWNpZGUgcHVibGlzaCByZXF1ZXN0cywgbW9kZXJhdGUgc3VibWlzc2lvbnMgYW5kIHJldmlld3MsIHZlcmlmeSBwdWJsaXNoZXJzJ1xuICAgICAgICAgICAgKyAnIGFuZCBwdWJsaXNoIGFkdmlzb3JpZXMgZm9yIHRoZSB3aG9sZSBwbHVnaW4gZWNvc3lzdGVtLidcbiAgICAgICAgICA6ICcgSXQgY2FycmllcyBzeXN0ZW0tb3JnLW9ubHkgcGVybWlzc2lvbnMuJylcbiAgICAgICAgKyAnIFRoZSByb2xlIHdvcmtzIG9ubHkgZnJvbSB0aGUgc3lzdGVtIG9yZ2FuaXphdGlvbiBhbmQgcmVxdWlyZXMgYSB0d28tZmFjdG9yIHNpZ24taW4uJ1xuICAgICAgOiBgJHtpbnB1dC51c2VyfSB3YXMgJHt2ZXJifSB0aGUgJHtyb2xlfSByb2xlJHtieX1gXG4gICAgICAgICsgKGVjb3N5c3RlbSA/ICcgYW5kIGNhbiBubyBsb25nZXIgbWFuYWdlIG9yIGFwcHJvdmUgYW55dGhpbmcgaW4gdGhlIHBsdWdpbiBlY29zeXN0ZW0uJyA6ICcuJyksXG4gIH07XG59XG5cbi8qKlxuICogQ29hbGVzY2Ugc2V2ZXJhbCBxdWV1ZWQgbm90aWNlcyBpbnRvIG9uZSBkaWdlc3QgZW1haWw6IGEgY291bnQtYmVhcmluZ1xuICogc3ViamVjdCBhbmQgb25lIGxpbmUgcGVyIGl0ZW0gKGVhY2ggaXRlbSdzIHN1YmplY3QpLCBvbGRlc3QgZmlyc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJFY29zeXN0ZW1EaWdlc3QoXG4gIGV2ZW50OiBFY29zeXN0ZW1Ob3RpZmljYXRpb25FdmVudElkLFxuICBpdGVtczogcmVhZG9ubHkgRWNvc3lzdGVtTm90aWZpY2F0aW9uQ29udGVudFtdLFxuKTogRWNvc3lzdGVtTm90aWZpY2F0aW9uQ29udGVudCB7XG4gIGlmIChpdGVtcy5sZW5ndGggPT09IDEpIHJldHVybiBpdGVtc1swXSE7XG4gIGNvbnN0IHNwZWMgPSBFQ09TWVNURU1fTk9USUZJQ0FUSU9OX0VWRU5UU1tldmVudF07XG4gIGNvbnN0IGNhZGVuY2UgPSBESUdFU1RfQ0FERU5DRV9MQUJFTFtzcGVjLmRpZ2VzdCA/PyAnZGFpbHknXTtcbiAgcmV0dXJuIHtcbiAgICBzdWJqZWN0OiBgJHtjYWRlbmNlfSBkaWdlc3Q6ICR7aXRlbXMubGVuZ3RofSDDlyAke3NwZWMuZGVzY3JpcHRpb259YC5zbGljZSgwLCBFQ09TWVNURU1fTk9USUZZX1NVQkpFQ1RfTUFYKSxcbiAgICB0ZXh0OiBpdGVtcy5tYXAoKGkpID0+IGDigKIgJHtpLnN1YmplY3R9YCkuam9pbignXFxuJykuc2xpY2UoMCwgRUNPU1lTVEVNX05PVElGWV9URVhUX01BWCksXG4gIH07XG59XG4iXX0=
@@ -31,6 +31,7 @@ export declare function publisherHandleProblem(handle: string): string | null;
31
31
  * still be requested through a `claim` request, decided by the system org.
32
32
  */
33
33
  export declare const BUILTIN_RESERVED_HANDLES: readonly string[];
34
+ /** Request kinds a TENANT may submit (the rest are system-org-opened). */
34
35
  export declare const TENANT_REQUEST_KINDS: ("advisory" | "claim" | "listing_update" | "new_listing" | "new_version" | "profile_change" | "transfer" | "unpause" | "verify" | "yank")[];
35
36
  /** Kinds submitted under `plugins:publish` (the rest need `publishers:manage`). */
36
37
  export declare const PUBLISH_PERMISSION_REQUEST_KINDS: readonly string[];
@@ -59,34 +59,44 @@ export const BUILTIN_RESERVED_HANDLES = [
59
59
  'submit', 'category',
60
60
  ];
61
61
  /**
62
- * Request kinds a TENANT may submit (`moderation` is system-org-created). An
63
- * `advisory` request carries a security-advisory DRAFT; only the system org
64
- * publishes it (approving the request) or withdraws it.
65
- */
66
- /**
67
- * DERIVED from `PUBLISH_REQUEST_KINDS` by exclusion, not hand-copied.
62
+ * How each publish-request kind is gated, keyed by kind — exhaustive, so a kind
63
+ * added to `PUBLISH_REQUEST_KINDS` does not compile until it is placed here, and
64
+ * every kind list below is DERIVED from this one table rather than transcribed
65
+ * (a hand-copied list once left a new kind decidable in the console yet rejected
66
+ * at the tenant's door).
68
67
  *
69
- * This is the TENANT submit gate (`requests.ts` checks membership before
70
- * accepting a request), and it was a transcription of the canonical list minus
71
- * two entries. A kind added to the canonical list therefore needed a second,
72
- * entirely un-enforced edit here before a publisher could submit it — the kind
73
- * would exist, be decidable in the console, and be rejected at the door.
74
- *
75
- * Stating the EXCLUSIONS instead makes the relationship the code: `moderation`
76
- * and `submission` are opened by the system org on a tenant's behalf, never
77
- * submitted by the tenant, so they are the two that do not belong here.
68
+ * - `submit` — the tenant permission that submits it, or `null` when the system
69
+ * org opens it on a tenant's behalf (`moderation`, `submission`). An
70
+ * `advisory` request carries a security-advisory DRAFT; only the system org
71
+ * publishes it (approving the request) or withdraws it.
72
+ * - `decide` — the system-org permission that decides it.
73
+ * - `stepUp` — whether the decision requires a step-up (suspend/yank/takedown,
74
+ * and every `publishers:verify` decision).
78
75
  */
79
- const SYSTEM_OPENED_REQUEST_KINDS = ['moderation', 'submission'];
76
+ const PUBLISH_REQUEST_KIND_GATES = {
77
+ new_listing: { submit: 'plugins:publish', decide: 'plugins:moderate', stepUp: false },
78
+ new_version: { submit: 'plugins:publish', decide: 'plugins:moderate', stepUp: false },
79
+ listing_update: { submit: 'plugins:publish', decide: 'plugins:moderate', stepUp: false },
80
+ yank: { submit: 'plugins:publish', decide: 'plugins:moderate', stepUp: true },
81
+ unpause: { submit: 'plugins:publish', decide: 'plugins:moderate', stepUp: false },
82
+ transfer: { submit: 'publishers:manage', decide: 'publishers:verify', stepUp: true },
83
+ claim: { submit: 'publishers:manage', decide: 'publishers:verify', stepUp: true },
84
+ profile_change: { submit: 'publishers:manage', decide: 'publishers:verify', stepUp: true },
85
+ advisory: { submit: 'publishers:manage', decide: 'plugins:moderate', stepUp: false },
86
+ verify: { submit: 'publishers:manage', decide: 'publishers:verify', stepUp: true },
87
+ moderation: { submit: null, decide: 'plugins:moderate', stepUp: true },
88
+ submission: { submit: null, decide: 'plugins:moderate', stepUp: false },
89
+ };
90
+ const kindsWhere = (pred) => PUBLISH_REQUEST_KINDS.filter((k) => pred(PUBLISH_REQUEST_KIND_GATES[k]));
91
+ /** Request kinds a TENANT may submit (the rest are system-org-opened). */
80
92
  export const TENANT_REQUEST_KINDS = PUBLISH_REQUEST_KINDS
81
- .filter((k) => !SYSTEM_OPENED_REQUEST_KINDS.includes(k));
93
+ .filter((k) => PUBLISH_REQUEST_KIND_GATES[k].submit !== null);
82
94
  /** Kinds submitted under `plugins:publish` (the rest need `publishers:manage`). */
83
- export const PUBLISH_PERMISSION_REQUEST_KINDS = [
84
- 'new_listing', 'new_version', 'listing_update', 'yank', 'unpause',
85
- ];
95
+ export const PUBLISH_PERMISSION_REQUEST_KINDS = kindsWhere((g) => g.submit === 'plugins:publish');
86
96
  /** Kinds DECIDED with `publishers:verify` (the rest need `plugins:moderate`). */
87
- export const VERIFY_REQUEST_KINDS = ['transfer', 'claim', 'profile_change', 'verify'];
97
+ export const VERIFY_REQUEST_KINDS = kindsWhere((g) => g.decide === 'publishers:verify');
88
98
  /** Kinds whose decision requires a step-up (suspend/yank/takedown, and every `publishers:verify` decision). */
89
- export const STEP_UP_REQUEST_KINDS = ['yank', 'transfer', 'claim', 'profile_change', 'verify', 'moderation'];
99
+ export const STEP_UP_REQUEST_KINDS = kindsWhere((g) => g.stepUp);
90
100
  /** Moderation-queue SLA per lane, in hours (2 business days ≈ 48 h; security lane 4 h). */
91
101
  export const REQUEST_SLA_HOURS = { standard: 48, security: 4 };
92
102
  function flag(name, dflt) {
@@ -129,4 +139,4 @@ export function isAnonymousSubmissionsEnabled() {
129
139
  export function isPluginReviewsEnabled() {
130
140
  return flag('PLUGIN_REVIEWS_ENABLED', true);
131
141
  }
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvZWNvc3lzdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLHFCQUFxQixFQUEyQixNQUFNLHNCQUFzQixDQUFDO0FBRXRGOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFcEQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBRyx5QkFBeUIsQ0FBQztBQUV6RTs7aURBRWlEO0FBQ2pELE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHLFlBQVksQ0FBQztBQUU1RCw2REFBNkQ7QUFDN0QsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0QsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsK0JBQStCLENBQUM7QUFDckUsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyw0QkFBNEIsQ0FBQztBQUNyRSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7QUFDdEMsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBRXZDLHVFQUF1RTtBQUN2RSxNQUFNLFVBQVUsc0JBQXNCLENBQUMsTUFBYztJQUNuRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1FBQ2pGLE9BQU8sV0FBVyxvQkFBb0IsSUFBSSxvQkFBb0IsYUFB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Ii8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBQVUJMSVNIX1JFUVVFU1RfS0lORFMsIHR5cGUgUHVibGlzaFJlcXVlc3RLaW5kIH0gZnJvbSAnLi93aXJlLXZvY2FidWxhcnkuanMnO1xuXG4vKipcbiAqIFBsdWdpbi1lY29zeXN0ZW0gY29uc3RhbnRzIHNoYXJlZCBieSB0aGUgcGx1Z2luIHNlcnZpY2UgKHB1Ymxpc2hlcnMsIHRoZVxuICogcHVibGlzaC1yZXF1ZXN0IHF1ZXVlLCBhdXRvLWFwcHJvdmFsKSBhbmQgaXRzIGNhbGxlcnNcbiAqIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gRGVwZW5kZW5jeS1mcmVlIHNvXG4gKiB0aGUgZnJvbnRlbmQgYW5kIHRoZSBDTEkgY2FuIGltcG9ydCBpdCB0b28uXG4gKi9cblxuaW1wb3J0IHsgaXNCaWxsaW5nRW5hYmxlZCB9IGZyb20gJy4vcXVvdGEtdGllcnMuanMnO1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBzeXN0ZW0tb3JnIFNFUlZJQ0UgQUNDT1VOVCB0aGUgT2ZmaWNpYWwgY2F0YWxvZyBsb2FkZXJcbiAqIChgZGVwbG95L2Jpbi9sb2FkLXBsdWdpbnMuc2hgLCBkcml2ZW4gYnkgYGluaXQtcGxhdGZvcm0uc2hgKSBydW5zIGFzLiBPbmx5IGFcbiAqIHJlcXVlc3Qgc3VibWl0dGVkIGJ5IHRoaXMgaWRlbnRpdHksIGZyb20gdGhlIHN5c3RlbSBvcmcsIGNhbiByaWRlIHRoZVxuICogYm9vdHN0cmFwIGV4Y2VwdGlvbiBvciB0aGUgT2ZmaWNpYWwgY2F0YWxvZyBhdXRvLWFwcHJvdmFsIHJ1bGUg4oCUXG4gKiBuZXZlciBhIHBlcnNvbiwgd2hpY2gga2VlcHMgXCJhIHN1cGVyYWRtaW4gdXBsb2FkcyBhbmQgYXBwcm92ZXMgYWxvbmVcIiBjbG9zZWQuXG4gKiBTZXJ2aWNlLWFjY291bnQgbmFtZXMgYXJlIHVuaXF1ZSBwZXIgb3JnIGFuZCBvbmx5IHN5c3RlbS1vcmcgYWRtaW5zXG4gKiBjYW4gY3JlYXRlIG9uZSB0aGVyZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE9GRklDSUFMX0NBVEFMT0dfTE9BREVSX0FDQ09VTlQgPSAnb2ZmaWNpYWwtY2F0YWxvZy1sb2FkZXInO1xuXG4vKiogVGhlIHB1Ymxpc2hlciB0ZXJtcyB2ZXJzaW9uIGluIGZvcmNlIHdoZW4gdGhlIG9wZXJhdG9yIHNldHMgbm9uZS4gQnVtcGluZyBpdFxuICogIChgUFVCTElTSEVSX1RFUk1TX1ZFUlNJT05gKSBtYWtlcyBldmVyeSBwdWJsaXNoZXIgcmUtYWNjZXB0IGJlZm9yZSBpdHMgbmV4dFxuICogIHJlcXVlc3Q7IGV4aXN0aW5nIGxpc3RpbmdzIGFyZSB1bmFmZmVjdGVkLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUFVCTElTSEVSX1RFUk1TX1ZFUlNJT04gPSAnMjAyNi0wOS0yMSc7XG5cbi8qKiBUaGUgcHVibGlzaGVyIHRlcm1zIHZlcnNpb24gaW4gZm9yY2Ugb24gdGhpcyBpbnN0YW5jZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdWJsaXNoZXJUZXJtc1ZlcnNpb24oKTogc3RyaW5nIHtcbiAgY29uc3QgdiA9IChwcm9jZXNzLmVudi5QVUJMSVNIRVJfVEVSTVNfVkVSU0lPTiA/PyAnJykudHJpbSgpO1xuICByZXR1cm4gdiAhPT0gJycgPyB2LnNsaWNlKDAsIDUwKSA6IERFRkFVTFRfUFVCTElTSEVSX1RFUk1TX1ZFUlNJT047XG59XG5cbi8qKlxuICogQSBwdWJsaXNoZXIgaGFuZGxlOiBvbmUgbG93ZXJjYXNlIHJlZ2lzdHJ5IHBhdGggY29tcG9uZW50LCBiZWNhdXNlIGl0IG5hbWVzXG4gKiB0aGUgYHB1YmxpYy88aGFuZGxlPi88bmFtZT5gIHJlcG9zaXRvcnkg4oCUIGxldHRlcnMsIGRpZ2l0cyBhbmQgc2luZ2xlXG4gKiBoeXBoZW5zIGJldHdlZW4gdGhlbSwgMuKAkzM5IGNoYXJhY3RlcnMuXG4gKi9cbmV4cG9ydCBjb25zdCBQVUJMSVNIRVJfSEFORExFX1BBVFRFUk4gPSAvXlthLXowLTldKyg/Oi1bYS16MC05XSspKiQvO1xuZXhwb3J0IGNvbnN0IFBVQkxJU0hFUl9IQU5ETEVfTUlOID0gMjtcbmV4cG9ydCBjb25zdCBQVUJMSVNIRVJfSEFORExFX01BWCA9IDM5O1xuXG4vKiogV2h5IGBoYW5kbGVgIGlzbid0IGEgdmFsaWQgcHVibGlzaGVyIGhhbmRsZSwgb3IgbnVsbCB3aGVuIGl0IGlzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1Ymxpc2hlckhhbmRsZVByb2JsZW0oaGFuZGxlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKGhhbmRsZS5sZW5ndGggPCBQVUJMSVNIRVJfSEFORExFX01JTiB8fCBoYW5kbGUubGVuZ3RoID4gUFVCTElTSEVSX0hBTkRMRV9NQVgpIHtcbiAgICByZXR1cm4gYG11c3QgYmUgJHtQVUJMSVNIRVJfSEFORExFX01JTn0tJHtQVUJMSVNIRVJfSEFORExFX01BWH0gY2hhcmFjdGVyc2A7XG4gIH1cbiAgaWYgKCFQVUJMSVNIRVJfSEFORExFX1BBVFRFUk4udGVzdChoYW5kbGUpKSB7XG4gICAgcmV0dXJuICdtdXN0IGJlIGxvd2VyY2FzZSBsZXR0ZXJzIGFuZCBkaWdpdHMsIG9wdGlvbmFsbHkgc2VwYXJhdGVkIGJ5IHNpbmdsZSBoeXBoZW5zJztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIG5vIHRlbmFudCBtYXkgY2xhaW0gZGlyZWN0bHksIG9uIHRvcCBvZiB0aGUgc3lzdGVtIG9yZydzXG4gKiBgZWNvc3lzdGVtX3Jlc2VydmVkX25hbWVzYCB0YWJsZTogdGhlIHBsYXRmb3JtJ3Mgb3duIHB1Ymxpc2hlcnMsIHdvcmRzIHRoYXRcbiAqIHdvdWxkIHJlYWQgYXMgYW4gZW5kb3JzZW1lbnQsIGFuZCBpbmZyYXN0cnVjdHVyZSBuYW1lcy4gQSByZXNlcnZlZCBoYW5kbGUgY2FuXG4gKiBzdGlsbCBiZSByZXF1ZXN0ZWQgdGhyb3VnaCBhIGBjbGFpbWAgcmVxdWVzdCwgZGVjaWRlZCBieSB0aGUgc3lzdGVtIG9yZy5cbiAqL1xuZXhwb3J0IGNvbnN0IEJVSUxUSU5fUkVTRVJWRURfSEFORExFUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gICdwaXBlbGluZS1idWlsZGVyJywgJ2NvbW11bml0eScsICdvZmZpY2lhbCcsICd2ZXJpZmllZCcsICdzeXN0ZW0nLCAnYWRtaW4nLCAnYWRtaW5pc3RyYXRvcicsXG4gICdyb290JywgJ3N1cHBvcnQnLCAnc2VjdXJpdHknLCAnc3RhZmYnLCAnbW9kZXJhdG9yJywgJ2Vjb3N5c3RlbScsICdwdWJsaWMnLCAnbGlicmFyeScsXG4gICdhbm9ueW1vdXMnLCAndW52ZXJpZmllZCcsICdwbGF0Zm9ybScsICdyZWdpc3RyeScsICdwbHVnaW5zJywgJ3BsdWdpbicsICdhcGknLCAnd3d3JyxcbiAgLy8gU3RhdGljIHNlZ21lbnRzIG9mIHRoZSBwdWJsaWMgZGlyZWN0b3J5J3MgYC9wbHVnaW5zLzxwdWJsaXNoZXI+LzxuYW1lPmAgVVJMIHNwYWNlLlxuICAnc3VibWl0JywgJ2NhdGVnb3J5Jyxcbl07XG5cbi8qKlxuICogUmVxdWVzdCBraW5kcyBhIFRFTkFOVCBtYXkgc3VibWl0IChgbW9kZXJhdGlvbmAgaXMgc3lzdGVtLW9yZy1jcmVhdGVkKS4gQW5cbiAqIGBhZHZpc29yeWAgcmVxdWVzdCBjYXJyaWVzIGEgc2VjdXJpdHktYWR2aXNvcnkgRFJBRlQ7IG9ubHkgdGhlIHN5c3RlbSBvcmdcbiAqIHB1Ymxpc2hlcyBpdCAoYXBwcm92aW5nIHRoZSByZXF1ZXN0KSBvciB3aXRoZHJhd3MgaXQuXG4gKi9cbi8qKlxuICogREVSSVZFRCBmcm9tIGBQVUJMSVNIX1JFUVVFU1RfS0lORFNgIGJ5IGV4Y2x1c2lvbiwgbm90IGhhbmQtY29waWVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIFRFTkFOVCBzdWJtaXQgZ2F0ZSAoYHJlcXVlc3RzLnRzYCBjaGVja3MgbWVtYmVyc2hpcCBiZWZvcmVcbiAqIGFjY2VwdGluZyBhIHJlcXVlc3QpLCBhbmQgaXQgd2FzIGEgdHJhbnNjcmlwdGlvbiBvZiB0aGUgY2Fub25pY2FsIGxpc3QgbWludXNcbiAqIHR3byBlbnRyaWVzLiBBIGtpbmQgYWRkZWQgdG8gdGhlIGNhbm9uaWNhbCBsaXN0IHRoZXJlZm9yZSBuZWVkZWQgYSBzZWNvbmQsXG4gKiBlbnRpcmVseSB1bi1lbmZvcmNlZCBlZGl0IGhlcmUgYmVmb3JlIGEgcHVibGlzaGVyIGNvdWxkIHN1Ym1pdCBpdCDigJQgdGhlIGtpbmRcbiAqIHdvdWxkIGV4aXN0LCBiZSBkZWNpZGFibGUgaW4gdGhlIGNvbnNvbGUsIGFuZCBiZSByZWplY3RlZCBhdCB0aGUgZG9vci5cbiAqXG4gKiBTdGF0aW5nIHRoZSBFWENMVVNJT05TIGluc3RlYWQgbWFrZXMgdGhlIHJlbGF0aW9uc2hpcCB0aGUgY29kZTogYG1vZGVyYXRpb25gXG4gKiBhbmQgYHN1Ym1pc3Npb25gIGFyZSBvcGVuZWQgYnkgdGhlIHN5c3RlbSBvcmcgb24gYSB0ZW5hbnQncyBiZWhhbGYsIG5ldmVyXG4gKiBzdWJtaXR0ZWQgYnkgdGhlIHRlbmFudCwgc28gdGhleSBhcmUgdGhlIHR3byB0aGF0IGRvIG5vdCBiZWxvbmcgaGVyZS5cbiAqL1xuY29uc3QgU1lTVEVNX09QRU5FRF9SRVFVRVNUX0tJTkRTID0gWydtb2RlcmF0aW9uJywgJ3N1Ym1pc3Npb24nXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IFRFTkFOVF9SRVFVRVNUX0tJTkRTID0gUFVCTElTSF9SRVFVRVNUX0tJTkRTXG4gIC5maWx0ZXIoKGspOiBrIGlzIEV4Y2x1ZGU8UHVibGlzaFJlcXVlc3RLaW5kLCB0eXBlb2YgU1lTVEVNX09QRU5FRF9SRVFVRVNUX0tJTkRTW251bWJlcl0+ID0+XG4gICAgIShTWVNURU1fT1BFTkVEX1JFUVVFU1RfS0lORFMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKGspKTtcblxuLyoqIEtpbmRzIHN1Ym1pdHRlZCB1bmRlciBgcGx1Z2luczpwdWJsaXNoYCAodGhlIHJlc3QgbmVlZCBgcHVibGlzaGVyczptYW5hZ2VgKS4gKi9cbmV4cG9ydCBjb25zdCBQVUJMSVNIX1BFUk1JU1NJT05fUkVRVUVTVF9LSU5EUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gICduZXdfbGlzdGluZycsICduZXdfdmVyc2lvbicsICdsaXN0aW5nX3VwZGF0ZScsICd5YW5rJywgJ3VucGF1c2UnLFxuXTtcblxuLyoqIEtpbmRzIERFQ0lERUQgd2l0aCBgcHVibGlzaGVyczp2ZXJpZnlgICh0aGUgcmVzdCBuZWVkIGBwbHVnaW5zOm1vZGVyYXRlYCkuICovXG5leHBvcnQgY29uc3QgVkVSSUZZX1JFUVVFU1RfS0lORFM6IHJlYWRvbmx5IHN0cmluZ1tdID0gWyd0cmFuc2ZlcicsICdjbGFpbScsICdwcm9maWxlX2NoYW5nZScsICd2ZXJpZnknXTtcblxuLyoqIEtpbmRzIHdob3NlIGRlY2lzaW9uIHJlcXVpcmVzIGEgc3RlcC11cCAoc3VzcGVuZC95YW5rL3Rha2Vkb3duLCBhbmQgZXZlcnkgYHB1Ymxpc2hlcnM6dmVyaWZ5YCBkZWNpc2lvbikuICovXG5leHBvcnQgY29uc3QgU1RFUF9VUF9SRVFVRVNUX0tJTkRTOiByZWFkb25seSBzdHJpbmdbXSA9IFsneWFuaycsICd0cmFuc2ZlcicsICdjbGFpbScsICdwcm9maWxlX2NoYW5nZScsICd2ZXJpZnknLCAnbW9kZXJhdGlvbiddO1xuXG4vKiogTW9kZXJhdGlvbi1xdWV1ZSBTTEEgcGVyIGxhbmUsIGluIGhvdXJzICgyIGJ1c2luZXNzIGRheXMg4omIIDQ4IGg7IHNlY3VyaXR5IGxhbmUgNCBoKS4gKi9cbmV4cG9ydCBjb25zdCBSRVFVRVNUX1NMQV9IT1VSUyA9IHsgc3RhbmRhcmQ6IDQ4LCBzZWN1cml0eTogNCB9IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBmbGFnKG5hbWU6IHN0cmluZywgZGZsdDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICBjb25zdCByYXcgPSAocHJvY2Vzcy5lbnZbbmFtZV0gPz8gJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAocmF3ID09PSAnJykgcmV0dXJuIGRmbHQ7XG4gIHJldHVybiByYXcgIT09ICdmYWxzZScgJiYgcmF3ICE9PSAnMCcgJiYgcmF3ICE9PSAnb2ZmJyAmJiByYXcgIT09ICdubyc7XG59XG5cbi8qKlxuICogYE9GRklDSUFMX0FVVE9fQVBQUk9WQUxfRU5BQkxFRGAgKGRlZmF1bHQgT04pOiB3aGVuIG9mZiwgdGhlIHNlZWRlZFxuICogT2ZmaWNpYWwgY2F0YWxvZyBhdXRvLWFwcHJvdmFsIHJ1bGUgbmV2ZXIgZmlyZXMgYW5kIGV2ZXJ5IE9mZmljaWFsIHVwZGF0ZVxuICogd2FpdHMgZm9yIHR3by1wZXJzb24gYXBwcm92YWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc09mZmljaWFsQXV0b0FwcHJvdmFsRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGZsYWcoJ09GRklDSUFMX0FVVE9fQVBQUk9WQUxfRU5BQkxFRCcsIHRydWUpO1xufVxuXG4vKipcbiAqIGBQTFVHSU5fUFVCTElTSElOR19FTkFCTEVEYDogd2hldGhlciBURU5BTlQgb3JncyBtYXkgc3VibWl0IHB1Ymxpc2hcbiAqIHJlcXVlc3RzLiBEZWZhdWx0cyBvbiBmb3IgdGhlIGhvc3RlZCBpbnN0YW5jZSAoYmlsbGluZyBvbikgYW5kIG9mZiBmb3IgYVxuICogc2VsZi1ob3N0ZWQgb25lIChiaWxsaW5nIG9mZikuIFRoZSBzeXN0ZW0gb3JnJ3MgT2ZmaWNpYWwgY2F0YWxvZyBpcyBuZXZlclxuICogYWZmZWN0ZWQg4oCUIGl0IGlzIHRoZSBpbnN0YW5jZSdzIG93biBjYXRhbG9nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQbHVnaW5QdWJsaXNoaW5nRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGZsYWcoJ1BMVUdJTl9QVUJMSVNISU5HX0VOQUJMRUQnLCBpc0JpbGxpbmdFbmFibGVkKCkpO1xufVxuXG4vKipcbiAqIGBBTk9OWU1PVVNfU1VCTUlTU0lPTlNfRU5BQkxFRGAgKGRlZmF1bHQgT0ZGKTogd2hldGhlciB0aGVcbiAqIG5vdC1sb2dnZWQtaW4gcGx1Z2luIHN1Ym1pc3Npb24gQVBJIGlzIHNlcnZlZC4gRXZlbiB3aGVuIG9uLCBzdWJtaXNzaW9uc1xuICogc3RheSB1bmF2YWlsYWJsZSB3aGlsZSBvdXRib3VuZCBlbWFpbCBpcyBub3QgY29uZmlndXJlZCAodGhlIG1hZ2ljIGxpbmsgaXNcbiAqIHRoZSBzdWJtaXR0ZXIncyBvbmx5IHZlcmlmaWNhdGlvbikg4oCUIHRoZSBwbHVnaW4gc2VydmljZSBjaGVja3MgdGhhdCB0b28uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Fub255bW91c1N1Ym1pc3Npb25zRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGZsYWcoJ0FOT05ZTU9VU19TVUJNSVNTSU9OU19FTkFCTEVEJywgZmFsc2UpO1xufVxuXG4vKipcbiAqIGBQTFVHSU5fUkVWSUVXU19FTkFCTEVEYCAoZGVmYXVsdCBPTik6IHdoZW4gb2ZmLCByZXZpZXdzIGFyZSBSRUFELU9OTFkg4oCUXG4gKiB3cml0aW5nLCBlZGl0aW5nLCB2b3RpbmcsIHJlcG9ydGluZyBhbmQgcmVwbHlpbmcgYW5zd2VyXG4gKiBgUExVR0lOX1JFVklFV1NfRElTQUJMRURgOyBtb2RlcmF0aW9uIGtlZXBzIHdvcmtpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BsdWdpblJldmlld3NFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmxhZygnUExVR0lOX1JFVklFV1NfRU5BQkxFRCcsIHRydWUpO1xufVxuIl19
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvZWNvc3lzdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLHFCQUFxQixFQUEyQixNQUFNLHNCQUFzQixDQUFDO0FBRXRGOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFcEQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBRyx5QkFBeUIsQ0FBQztBQUV6RTs7aURBRWlEO0FBQ2pELE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHLFlBQVksQ0FBQztBQUU1RCw2REFBNkQ7QUFDN0QsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0QsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsK0JBQStCLENBQUM7QUFDckUsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyw0QkFBNEIsQ0FBQztBQUNyRSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7QUFDdEMsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBRXZDLHVFQUF1RTtBQUN2RSxNQUFNLFVBQVUsc0JBQXNCLENBQUMsTUFBYztJQUNuRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1FBQ2pGLE9BQU8sV0FBVyxvQkFBb0IsSUFBSSxvQkFBb0IsYUFB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SUFBSSxDQUFDLDJCQUEyQixFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsNkJBQTZCO0lBQzNDLE9BQU8sSUFBSSxDQUFDLCtCQUErQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQjtJQUNwQyxPQUFPLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IFBVQkxJU0hfUkVRVUVTVF9LSU5EUywgdHlwZSBQdWJsaXNoUmVxdWVzdEtpbmQgfSBmcm9tICcuL3dpcmUtdm9jYWJ1bGFyeS5qcyc7XG5cbi8qKlxuICogUGx1Z2luLWVjb3N5c3RlbSBjb25zdGFudHMgc2hhcmVkIGJ5IHRoZSBwbHVnaW4gc2VydmljZSAocHVibGlzaGVycywgdGhlXG4gKiBwdWJsaXNoLXJlcXVlc3QgcXVldWUsIGF1dG8tYXBwcm92YWwpIGFuZCBpdHMgY2FsbGVyc1xuICogKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQpLiBEZXBlbmRlbmN5LWZyZWUgc29cbiAqIHRoZSBmcm9udGVuZCBhbmQgdGhlIENMSSBjYW4gaW1wb3J0IGl0IHRvby5cbiAqL1xuXG5pbXBvcnQgeyBpc0JpbGxpbmdFbmFibGVkIH0gZnJvbSAnLi9xdW90YS10aWVycy5qcyc7XG5cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHN5c3RlbS1vcmcgU0VSVklDRSBBQ0NPVU5UIHRoZSBPZmZpY2lhbCBjYXRhbG9nIGxvYWRlclxuICogKGBkZXBsb3kvYmluL2xvYWQtcGx1Z2lucy5zaGAsIGRyaXZlbiBieSBgaW5pdC1wbGF0Zm9ybS5zaGApIHJ1bnMgYXMuIE9ubHkgYVxuICogcmVxdWVzdCBzdWJtaXR0ZWQgYnkgdGhpcyBpZGVudGl0eSwgZnJvbSB0aGUgc3lzdGVtIG9yZywgY2FuIHJpZGUgdGhlXG4gKiBib290c3RyYXAgZXhjZXB0aW9uIG9yIHRoZSBPZmZpY2lhbCBjYXRhbG9nIGF1dG8tYXBwcm92YWwgcnVsZSDigJRcbiAqIG5ldmVyIGEgcGVyc29uLCB3aGljaCBrZWVwcyBcImEgc3VwZXJhZG1pbiB1cGxvYWRzIGFuZCBhcHByb3ZlcyBhbG9uZVwiIGNsb3NlZC5cbiAqIFNlcnZpY2UtYWNjb3VudCBuYW1lcyBhcmUgdW5pcXVlIHBlciBvcmcgYW5kIG9ubHkgc3lzdGVtLW9yZyBhZG1pbnNcbiAqIGNhbiBjcmVhdGUgb25lIHRoZXJlLlxuICovXG5leHBvcnQgY29uc3QgT0ZGSUNJQUxfQ0FUQUxPR19MT0FERVJfQUNDT1VOVCA9ICdvZmZpY2lhbC1jYXRhbG9nLWxvYWRlcic7XG5cbi8qKiBUaGUgcHVibGlzaGVyIHRlcm1zIHZlcnNpb24gaW4gZm9yY2Ugd2hlbiB0aGUgb3BlcmF0b3Igc2V0cyBub25lLiBCdW1waW5nIGl0XG4gKiAgKGBQVUJMSVNIRVJfVEVSTVNfVkVSU0lPTmApIG1ha2VzIGV2ZXJ5IHB1Ymxpc2hlciByZS1hY2NlcHQgYmVmb3JlIGl0cyBuZXh0XG4gKiAgcmVxdWVzdDsgZXhpc3RpbmcgbGlzdGluZ3MgYXJlIHVuYWZmZWN0ZWQuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9QVUJMSVNIRVJfVEVSTVNfVkVSU0lPTiA9ICcyMDI2LTA5LTIxJztcblxuLyoqIFRoZSBwdWJsaXNoZXIgdGVybXMgdmVyc2lvbiBpbiBmb3JjZSBvbiB0aGlzIGluc3RhbmNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1Ymxpc2hlclRlcm1zVmVyc2lvbigpOiBzdHJpbmcge1xuICBjb25zdCB2ID0gKHByb2Nlc3MuZW52LlBVQkxJU0hFUl9URVJNU19WRVJTSU9OID8/ICcnKS50cmltKCk7XG4gIHJldHVybiB2ICE9PSAnJyA/IHYuc2xpY2UoMCwgNTApIDogREVGQVVMVF9QVUJMSVNIRVJfVEVSTVNfVkVSU0lPTjtcbn1cblxuLyoqXG4gKiBBIHB1Ymxpc2hlciBoYW5kbGU6IG9uZSBsb3dlcmNhc2UgcmVnaXN0cnkgcGF0aCBjb21wb25lbnQsIGJlY2F1c2UgaXQgbmFtZXNcbiAqIHRoZSBgcHVibGljLzxoYW5kbGU+LzxuYW1lPmAgcmVwb3NpdG9yeSDigJQgbGV0dGVycywgZGlnaXRzIGFuZCBzaW5nbGVcbiAqIGh5cGhlbnMgYmV0d2VlbiB0aGVtLCAy4oCTMzkgY2hhcmFjdGVycy5cbiAqL1xuZXhwb3J0IGNvbnN0IFBVQkxJU0hFUl9IQU5ETEVfUEFUVEVSTiA9IC9eW2EtejAtOV0rKD86LVthLXowLTldKykqJC87XG5leHBvcnQgY29uc3QgUFVCTElTSEVSX0hBTkRMRV9NSU4gPSAyO1xuZXhwb3J0IGNvbnN0IFBVQkxJU0hFUl9IQU5ETEVfTUFYID0gMzk7XG5cbi8qKiBXaHkgYGhhbmRsZWAgaXNuJ3QgYSB2YWxpZCBwdWJsaXNoZXIgaGFuZGxlLCBvciBudWxsIHdoZW4gaXQgaXMuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGlzaGVySGFuZGxlUHJvYmxlbShoYW5kbGU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoaGFuZGxlLmxlbmd0aCA8IFBVQkxJU0hFUl9IQU5ETEVfTUlOIHx8IGhhbmRsZS5sZW5ndGggPiBQVUJMSVNIRVJfSEFORExFX01BWCkge1xuICAgIHJldHVybiBgbXVzdCBiZSAke1BVQkxJU0hFUl9IQU5ETEVfTUlOfS0ke1BVQkxJU0hFUl9IQU5ETEVfTUFYfSBjaGFyYWN0ZXJzYDtcbiAgfVxuICBpZiAoIVBVQkxJU0hFUl9IQU5ETEVfUEFUVEVSTi50ZXN0KGhhbmRsZSkpIHtcbiAgICByZXR1cm4gJ211c3QgYmUgbG93ZXJjYXNlIGxldHRlcnMgYW5kIGRpZ2l0cywgb3B0aW9uYWxseSBzZXBhcmF0ZWQgYnkgc2luZ2xlIGh5cGhlbnMnO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgbm8gdGVuYW50IG1heSBjbGFpbSBkaXJlY3RseSwgb24gdG9wIG9mIHRoZSBzeXN0ZW0gb3JnJ3NcbiAqIGBlY29zeXN0ZW1fcmVzZXJ2ZWRfbmFtZXNgIHRhYmxlOiB0aGUgcGxhdGZvcm0ncyBvd24gcHVibGlzaGVycywgd29yZHMgdGhhdFxuICogd291bGQgcmVhZCBhcyBhbiBlbmRvcnNlbWVudCwgYW5kIGluZnJhc3RydWN0dXJlIG5hbWVzLiBBIHJlc2VydmVkIGhhbmRsZSBjYW5cbiAqIHN0aWxsIGJlIHJlcXVlc3RlZCB0aHJvdWdoIGEgYGNsYWltYCByZXF1ZXN0LCBkZWNpZGVkIGJ5IHRoZSBzeXN0ZW0gb3JnLlxuICovXG5leHBvcnQgY29uc3QgQlVJTFRJTl9SRVNFUlZFRF9IQU5ETEVTOiByZWFkb25seSBzdHJpbmdbXSA9IFtcbiAgJ3BpcGVsaW5lLWJ1aWxkZXInLCAnY29tbXVuaXR5JywgJ29mZmljaWFsJywgJ3ZlcmlmaWVkJywgJ3N5c3RlbScsICdhZG1pbicsICdhZG1pbmlzdHJhdG9yJyxcbiAgJ3Jvb3QnLCAnc3VwcG9ydCcsICdzZWN1cml0eScsICdzdGFmZicsICdtb2RlcmF0b3InLCAnZWNvc3lzdGVtJywgJ3B1YmxpYycsICdsaWJyYXJ5JyxcbiAgJ2Fub255bW91cycsICd1bnZlcmlmaWVkJywgJ3BsYXRmb3JtJywgJ3JlZ2lzdHJ5JywgJ3BsdWdpbnMnLCAncGx1Z2luJywgJ2FwaScsICd3d3cnLFxuICAvLyBTdGF0aWMgc2VnbWVudHMgb2YgdGhlIHB1YmxpYyBkaXJlY3RvcnkncyBgL3BsdWdpbnMvPHB1Ymxpc2hlcj4vPG5hbWU+YCBVUkwgc3BhY2UuXG4gICdzdWJtaXQnLCAnY2F0ZWdvcnknLFxuXTtcblxuLyoqXG4gKiBIb3cgZWFjaCBwdWJsaXNoLXJlcXVlc3Qga2luZCBpcyBnYXRlZCwga2V5ZWQgYnkga2luZCDigJQgZXhoYXVzdGl2ZSwgc28gYSBraW5kXG4gKiBhZGRlZCB0byBgUFVCTElTSF9SRVFVRVNUX0tJTkRTYCBkb2VzIG5vdCBjb21waWxlIHVudGlsIGl0IGlzIHBsYWNlZCBoZXJlLCBhbmRcbiAqIGV2ZXJ5IGtpbmQgbGlzdCBiZWxvdyBpcyBERVJJVkVEIGZyb20gdGhpcyBvbmUgdGFibGUgcmF0aGVyIHRoYW4gdHJhbnNjcmliZWRcbiAqIChhIGhhbmQtY29waWVkIGxpc3Qgb25jZSBsZWZ0IGEgbmV3IGtpbmQgZGVjaWRhYmxlIGluIHRoZSBjb25zb2xlIHlldCByZWplY3RlZFxuICogYXQgdGhlIHRlbmFudCdzIGRvb3IpLlxuICpcbiAqIC0gYHN1Ym1pdGAg4oCUIHRoZSB0ZW5hbnQgcGVybWlzc2lvbiB0aGF0IHN1Ym1pdHMgaXQsIG9yIGBudWxsYCB3aGVuIHRoZSBzeXN0ZW1cbiAqICAgb3JnIG9wZW5zIGl0IG9uIGEgdGVuYW50J3MgYmVoYWxmIChgbW9kZXJhdGlvbmAsIGBzdWJtaXNzaW9uYCkuIEFuXG4gKiAgIGBhZHZpc29yeWAgcmVxdWVzdCBjYXJyaWVzIGEgc2VjdXJpdHktYWR2aXNvcnkgRFJBRlQ7IG9ubHkgdGhlIHN5c3RlbSBvcmdcbiAqICAgcHVibGlzaGVzIGl0IChhcHByb3ZpbmcgdGhlIHJlcXVlc3QpIG9yIHdpdGhkcmF3cyBpdC5cbiAqIC0gYGRlY2lkZWAg4oCUIHRoZSBzeXN0ZW0tb3JnIHBlcm1pc3Npb24gdGhhdCBkZWNpZGVzIGl0LlxuICogLSBgc3RlcFVwYCDigJQgd2hldGhlciB0aGUgZGVjaXNpb24gcmVxdWlyZXMgYSBzdGVwLXVwIChzdXNwZW5kL3lhbmsvdGFrZWRvd24sXG4gKiAgIGFuZCBldmVyeSBgcHVibGlzaGVyczp2ZXJpZnlgIGRlY2lzaW9uKS5cbiAqL1xuY29uc3QgUFVCTElTSF9SRVFVRVNUX0tJTkRfR0FURVMgPSB7XG4gIG5ld19saXN0aW5nOiB7IHN1Ym1pdDogJ3BsdWdpbnM6cHVibGlzaCcsIGRlY2lkZTogJ3BsdWdpbnM6bW9kZXJhdGUnLCBzdGVwVXA6IGZhbHNlIH0sXG4gIG5ld192ZXJzaW9uOiB7IHN1Ym1pdDogJ3BsdWdpbnM6cHVibGlzaCcsIGRlY2lkZTogJ3BsdWdpbnM6bW9kZXJhdGUnLCBzdGVwVXA6IGZhbHNlIH0sXG4gIGxpc3RpbmdfdXBkYXRlOiB7IHN1Ym1pdDogJ3BsdWdpbnM6cHVibGlzaCcsIGRlY2lkZTogJ3BsdWdpbnM6bW9kZXJhdGUnLCBzdGVwVXA6IGZhbHNlIH0sXG4gIHlhbms6IHsgc3VibWl0OiAncGx1Z2luczpwdWJsaXNoJywgZGVjaWRlOiAncGx1Z2luczptb2RlcmF0ZScsIHN0ZXBVcDogdHJ1ZSB9LFxuICB1bnBhdXNlOiB7IHN1Ym1pdDogJ3BsdWdpbnM6cHVibGlzaCcsIGRlY2lkZTogJ3BsdWdpbnM6bW9kZXJhdGUnLCBzdGVwVXA6IGZhbHNlIH0sXG4gIHRyYW5zZmVyOiB7IHN1Ym1pdDogJ3B1Ymxpc2hlcnM6bWFuYWdlJywgZGVjaWRlOiAncHVibGlzaGVyczp2ZXJpZnknLCBzdGVwVXA6IHRydWUgfSxcbiAgY2xhaW06IHsgc3VibWl0OiAncHVibGlzaGVyczptYW5hZ2UnLCBkZWNpZGU6ICdwdWJsaXNoZXJzOnZlcmlmeScsIHN0ZXBVcDogdHJ1ZSB9LFxuICBwcm9maWxlX2NoYW5nZTogeyBzdWJtaXQ6ICdwdWJsaXNoZXJzOm1hbmFnZScsIGRlY2lkZTogJ3B1Ymxpc2hlcnM6dmVyaWZ5Jywgc3RlcFVwOiB0cnVlIH0sXG4gIGFkdmlzb3J5OiB7IHN1Ym1pdDogJ3B1Ymxpc2hlcnM6bWFuYWdlJywgZGVjaWRlOiAncGx1Z2luczptb2RlcmF0ZScsIHN0ZXBVcDogZmFsc2UgfSxcbiAgdmVyaWZ5OiB7IHN1Ym1pdDogJ3B1Ymxpc2hlcnM6bWFuYWdlJywgZGVjaWRlOiAncHVibGlzaGVyczp2ZXJpZnknLCBzdGVwVXA6IHRydWUgfSxcbiAgbW9kZXJhdGlvbjogeyBzdWJtaXQ6IG51bGwsIGRlY2lkZTogJ3BsdWdpbnM6bW9kZXJhdGUnLCBzdGVwVXA6IHRydWUgfSxcbiAgc3VibWlzc2lvbjogeyBzdWJtaXQ6IG51bGwsIGRlY2lkZTogJ3BsdWdpbnM6bW9kZXJhdGUnLCBzdGVwVXA6IGZhbHNlIH0sXG59IGFzIGNvbnN0IHNhdGlzZmllcyBSZWNvcmQ8UHVibGlzaFJlcXVlc3RLaW5kLCB7XG4gIHN1Ym1pdDogJ3BsdWdpbnM6cHVibGlzaCcgfCAncHVibGlzaGVyczptYW5hZ2UnIHwgbnVsbDtcbiAgZGVjaWRlOiAncGx1Z2luczptb2RlcmF0ZScgfCAncHVibGlzaGVyczp2ZXJpZnknO1xuICBzdGVwVXA6IGJvb2xlYW47XG59PjtcblxudHlwZSBLaW5kR2F0ZXMgPSB0eXBlb2YgUFVCTElTSF9SRVFVRVNUX0tJTkRfR0FURVM7XG5jb25zdCBraW5kc1doZXJlID0gKHByZWQ6IChnOiBLaW5kR2F0ZXNbUHVibGlzaFJlcXVlc3RLaW5kXSkgPT4gYm9vbGVhbik6IFB1Ymxpc2hSZXF1ZXN0S2luZFtdID0+XG4gIFBVQkxJU0hfUkVRVUVTVF9LSU5EUy5maWx0ZXIoKGspID0+IHByZWQoUFVCTElTSF9SRVFVRVNUX0tJTkRfR0FURVNba10pKTtcblxuLyoqIFJlcXVlc3Qga2luZHMgYSBURU5BTlQgbWF5IHN1Ym1pdCAodGhlIHJlc3QgYXJlIHN5c3RlbS1vcmctb3BlbmVkKS4gKi9cbmV4cG9ydCBjb25zdCBURU5BTlRfUkVRVUVTVF9LSU5EUyA9IFBVQkxJU0hfUkVRVUVTVF9LSU5EU1xuICAuZmlsdGVyKChrKTogayBpcyB7IFtLIGluIFB1Ymxpc2hSZXF1ZXN0S2luZF06IEtpbmRHYXRlc1tLXVsnc3VibWl0J10gZXh0ZW5kcyBudWxsID8gbmV2ZXIgOiBLIH1bUHVibGlzaFJlcXVlc3RLaW5kXSA9PlxuICAgIFBVQkxJU0hfUkVRVUVTVF9LSU5EX0dBVEVTW2tdLnN1Ym1pdCAhPT0gbnVsbCk7XG5cbi8qKiBLaW5kcyBzdWJtaXR0ZWQgdW5kZXIgYHBsdWdpbnM6cHVibGlzaGAgKHRoZSByZXN0IG5lZWQgYHB1Ymxpc2hlcnM6bWFuYWdlYCkuICovXG5leHBvcnQgY29uc3QgUFVCTElTSF9QRVJNSVNTSU9OX1JFUVVFU1RfS0lORFM6IHJlYWRvbmx5IHN0cmluZ1tdID0ga2luZHNXaGVyZSgoZykgPT4gZy5zdWJtaXQgPT09ICdwbHVnaW5zOnB1Ymxpc2gnKTtcblxuLyoqIEtpbmRzIERFQ0lERUQgd2l0aCBgcHVibGlzaGVyczp2ZXJpZnlgICh0aGUgcmVzdCBuZWVkIGBwbHVnaW5zOm1vZGVyYXRlYCkuICovXG5leHBvcnQgY29uc3QgVkVSSUZZX1JFUVVFU1RfS0lORFM6IHJlYWRvbmx5IHN0cmluZ1tdID0ga2luZHNXaGVyZSgoZykgPT4gZy5kZWNpZGUgPT09ICdwdWJsaXNoZXJzOnZlcmlmeScpO1xuXG4vKiogS2luZHMgd2hvc2UgZGVjaXNpb24gcmVxdWlyZXMgYSBzdGVwLXVwIChzdXNwZW5kL3lhbmsvdGFrZWRvd24sIGFuZCBldmVyeSBgcHVibGlzaGVyczp2ZXJpZnlgIGRlY2lzaW9uKS4gKi9cbmV4cG9ydCBjb25zdCBTVEVQX1VQX1JFUVVFU1RfS0lORFM6IHJlYWRvbmx5IHN0cmluZ1tdID0ga2luZHNXaGVyZSgoZykgPT4gZy5zdGVwVXApO1xuXG4vKiogTW9kZXJhdGlvbi1xdWV1ZSBTTEEgcGVyIGxhbmUsIGluIGhvdXJzICgyIGJ1c2luZXNzIGRheXMg4omIIDQ4IGg7IHNlY3VyaXR5IGxhbmUgNCBoKS4gKi9cbmV4cG9ydCBjb25zdCBSRVFVRVNUX1NMQV9IT1VSUyA9IHsgc3RhbmRhcmQ6IDQ4LCBzZWN1cml0eTogNCB9IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBmbGFnKG5hbWU6IHN0cmluZywgZGZsdDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICBjb25zdCByYXcgPSAocHJvY2Vzcy5lbnZbbmFtZV0gPz8gJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAocmF3ID09PSAnJykgcmV0dXJuIGRmbHQ7XG4gIHJldHVybiByYXcgIT09ICdmYWxzZScgJiYgcmF3ICE9PSAnMCcgJiYgcmF3ICE9PSAnb2ZmJyAmJiByYXcgIT09ICdubyc7XG59XG5cbi8qKlxuICogYE9GRklDSUFMX0FVVE9fQVBQUk9WQUxfRU5BQkxFRGAgKGRlZmF1bHQgT04pOiB3aGVuIG9mZiwgdGhlIHNlZWRlZFxuICogT2ZmaWNpYWwgY2F0YWxvZyBhdXRvLWFwcHJvdmFsIHJ1bGUgbmV2ZXIgZmlyZXMgYW5kIGV2ZXJ5IE9mZmljaWFsIHVwZGF0ZVxuICogd2FpdHMgZm9yIHR3by1wZXJzb24gYXBwcm92YWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc09mZmljaWFsQXV0b0FwcHJvdmFsRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGZsYWcoJ09GRklDSUFMX0FVVE9fQVBQUk9WQUxfRU5BQkxFRCcsIHRydWUpO1xufVxuXG4vKipcbiAqIGBQTFVHSU5fUFVCTElTSElOR19FTkFCTEVEYDogd2hldGhlciBURU5BTlQgb3JncyBtYXkgc3VibWl0IHB1Ymxpc2hcbiAqIHJlcXVlc3RzLiBEZWZhdWx0cyBvbiBmb3IgdGhlIGhvc3RlZCBpbnN0YW5jZSAoYmlsbGluZyBvbikgYW5kIG9mZiBmb3IgYVxuICogc2VsZi1ob3N0ZWQgb25lIChiaWxsaW5nIG9mZikuIFRoZSBzeXN0ZW0gb3JnJ3MgT2ZmaWNpYWwgY2F0YWxvZyBpcyBuZXZlclxuICogYWZmZWN0ZWQg4oCUIGl0IGlzIHRoZSBpbnN0YW5jZSdzIG93biBjYXRhbG9nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQbHVnaW5QdWJsaXNoaW5nRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGZsYWcoJ1BMVUdJTl9QVUJMSVNISU5HX0VOQUJMRUQnLCBpc0JpbGxpbmdFbmFibGVkKCkpO1xufVxuXG4vKipcbiAqIGBBTk9OWU1PVVNfU1VCTUlTU0lPTlNfRU5BQkxFRGAgKGRlZmF1bHQgT0ZGKTogd2hldGhlciB0aGVcbiAqIG5vdC1sb2dnZWQtaW4gcGx1Z2luIHN1Ym1pc3Npb24gQVBJIGlzIHNlcnZlZC4gRXZlbiB3aGVuIG9uLCBzdWJtaXNzaW9uc1xuICogc3RheSB1bmF2YWlsYWJsZSB3aGlsZSBvdXRib3VuZCBlbWFpbCBpcyBub3QgY29uZmlndXJlZCAodGhlIG1hZ2ljIGxpbmsgaXNcbiAqIHRoZSBzdWJtaXR0ZXIncyBvbmx5IHZlcmlmaWNhdGlvbikg4oCUIHRoZSBwbHVnaW4gc2VydmljZSBjaGVja3MgdGhhdCB0b28uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Fub255bW91c1N1Ym1pc3Npb25zRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGZsYWcoJ0FOT05ZTU9VU19TVUJNSVNTSU9OU19FTkFCTEVEJywgZmFsc2UpO1xufVxuXG4vKipcbiAqIGBQTFVHSU5fUkVWSUVXU19FTkFCTEVEYCAoZGVmYXVsdCBPTik6IHdoZW4gb2ZmLCByZXZpZXdzIGFyZSBSRUFELU9OTFkg4oCUXG4gKiB3cml0aW5nLCBlZGl0aW5nLCB2b3RpbmcsIHJlcG9ydGluZyBhbmQgcmVwbHlpbmcgYW5zd2VyXG4gKiBgUExVR0lOX1JFVklFV1NfRElTQUJMRURgOyBtb2RlcmF0aW9uIGtlZXBzIHdvcmtpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BsdWdpblJldmlld3NFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmxhZygnUExVR0lOX1JFVklFV1NfRU5BQkxFRCcsIHRydWUpO1xufVxuIl19
@@ -7,16 +7,22 @@ import type { QuotaTier } from './quota-tiers.js';
7
7
  * response times" while no support product existed to be faster. Mutually
8
8
  * exclusive: an account holds at most one (enforced in `effectiveEntitlements`).
9
9
  *
10
- * Its own type, and spelled ONCE — `FeatureFlag` includes it rather than listing
11
- * the three names again. A surface that must name EVERY level keys a
10
+ * Its own type, and spelled ONCE — `FEATURE_FLAGS` spreads it rather than
11
+ * listing the three names again. A surface that must name EVERY level keys a
12
12
  * `Record<SupportFeatureFlag, …>` off it (the frontend's level labels were a
13
13
  * `Record<string, string>` that happened to carry three entries, so a fourth
14
14
  * level would have rendered as the raw flag id), while the ladder list below
15
15
  * stays `FeatureFlag[]` so it can be tested against the full catalog.
16
16
  */
17
- export type SupportFeatureFlag = 'support_standard' | 'support_priority' | 'support_premium';
17
+ declare const SUPPORT_LEVELS: readonly ['support_standard', 'support_priority', 'support_premium'];
18
+ export type SupportFeatureFlag = typeof SUPPORT_LEVELS[number];
19
+ /**
20
+ * Every feature flag, in display order. The {@link FeatureFlag} union is derived
21
+ * from this list, so a flag is added in exactly one place.
22
+ */
23
+ declare const FEATURE_FLAGS: readonly ["ai_generation", "bulk_operations", "custom_integrations", "sso", "advanced_reporting", "team_usage_analytics", "compliance_standard", "compliance_advanced", "stakeholder_reports", "verified_publisher", "support_standard", "support_priority", "support_premium"];
18
24
  /** Canonical feature flag identifiers. */
19
- export type FeatureFlag = 'custom_integrations' | SupportFeatureFlag | 'ai_generation' | 'bulk_operations' | 'sso' | 'advanced_reporting' | 'team_usage_analytics' | 'compliance_standard' | 'compliance_advanced' | 'stakeholder_reports' | 'verified_publisher';
25
+ export type FeatureFlag = typeof FEATURE_FLAGS[number];
20
26
  /** All valid feature flags (order determines display order). */
21
27
  export declare const ALL_FEATURE_FLAGS: readonly FeatureFlag[];
22
28
  /**
@@ -140,3 +146,4 @@ export declare function complianceSetsForFeatures(features: readonly string[]):
140
146
  * several. Accepts a raw jsonb `tags` value.
141
147
  */
142
148
  export declare function complianceFeatureForTags(tags: unknown): FeatureFlag | null;
149
+ export {};