@pipeline-builder/api-core 5.2.2 → 5.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/lib/constants/ai-providers.d.ts +3 -22
  2. package/lib/constants/ai-providers.js +6 -56
  3. package/lib/errors/app-errors.d.ts +14 -0
  4. package/lib/errors/app-errors.js +21 -1
  5. package/lib/helpers/index.d.ts +1 -0
  6. package/lib/helpers/index.js +2 -1
  7. package/lib/helpers/sse-helpers.d.ts +33 -3
  8. package/lib/helpers/sse-helpers.js +91 -19
  9. package/lib/helpers/support-calendar.d.ts +69 -0
  10. package/lib/helpers/support-calendar.js +179 -0
  11. package/lib/middleware/auth.js +6 -3
  12. package/lib/middleware/deferred-quota-check.d.ts +5 -0
  13. package/lib/middleware/deferred-quota-check.js +33 -0
  14. package/lib/middleware/ecosystem-guard.d.ts +3 -3
  15. package/lib/middleware/ecosystem-guard.js +5 -5
  16. package/lib/middleware/index.d.ts +5 -2
  17. package/lib/middleware/index.js +6 -3
  18. package/lib/middleware/on-behalf.d.ts +37 -0
  19. package/lib/middleware/on-behalf.js +143 -0
  20. package/lib/middleware/permission-gates.d.ts +11 -0
  21. package/lib/middleware/permission-gates.js +7 -1
  22. package/lib/middleware/quota-exempt-routes.d.ts +36 -0
  23. package/lib/middleware/quota-exempt-routes.js +47 -0
  24. package/lib/middleware/route-table.d.ts +104 -0
  25. package/lib/middleware/route-table.js +72 -2
  26. package/lib/middleware/service-tokens.d.ts +8 -0
  27. package/lib/middleware/service-tokens.js +5 -3
  28. package/lib/middleware/step-up.js +11 -1
  29. package/lib/services/ai-call-weight.d.ts +24 -0
  30. package/lib/services/ai-call-weight.js +77 -0
  31. package/lib/services/alert-delivery.d.ts +99 -0
  32. package/lib/services/alert-delivery.js +132 -0
  33. package/lib/services/audit-context.d.ts +105 -0
  34. package/lib/services/audit-context.js +134 -0
  35. package/lib/services/index.d.ts +10 -2
  36. package/lib/services/index.js +10 -2
  37. package/lib/services/org-ai-client.d.ts +61 -0
  38. package/lib/services/org-ai-client.js +112 -0
  39. package/lib/services/pagerduty-inbound.d.ts +101 -0
  40. package/lib/services/pagerduty-inbound.js +195 -0
  41. package/lib/services/pagerduty.d.ts +109 -0
  42. package/lib/services/pagerduty.js +186 -0
  43. package/lib/services/quota-increment-batcher.d.ts +81 -0
  44. package/lib/services/quota-increment-batcher.js +166 -0
  45. package/lib/services/quota.d.ts +158 -14
  46. package/lib/services/quota.js +252 -22
  47. package/lib/services/remote-audit-client.d.ts +44 -1
  48. package/lib/services/remote-audit-client.js +106 -20
  49. package/lib/services/version-vuln-policy.d.ts +174 -0
  50. package/lib/services/version-vuln-policy.js +242 -0
  51. package/lib/types/ai-catalog.d.ts +63 -0
  52. package/lib/types/ai-catalog.js +82 -0
  53. package/lib/types/ask-proposals.js +6 -6
  54. package/lib/types/build-catalog.d.ts +154 -0
  55. package/lib/types/build-catalog.js +158 -0
  56. package/lib/types/common.d.ts +37 -3
  57. package/lib/types/common.js +20 -2
  58. package/lib/types/ecosystem-notifications.d.ts +5 -5
  59. package/lib/types/ecosystem-notifications.js +9 -3
  60. package/lib/types/error-codes.d.ts +13 -6
  61. package/lib/types/error-codes.js +18 -8
  62. package/lib/types/feature-flags.d.ts +71 -1
  63. package/lib/types/feature-flags.js +131 -11
  64. package/lib/types/index.d.ts +6 -4
  65. package/lib/types/index.js +12 -5
  66. package/lib/types/metadata-keys.d.ts +6 -0
  67. package/lib/types/metadata-keys.js +4 -1
  68. package/lib/types/permissions.d.ts +351 -3
  69. package/lib/types/permissions.js +610 -21
  70. package/lib/types/pipeline.d.ts +39 -0
  71. package/lib/types/pipeline.js +57 -1
  72. package/lib/types/plugin-health.d.ts +0 -2
  73. package/lib/types/plugin-health.js +1 -11
  74. package/lib/types/plugin-scan.d.ts +192 -42
  75. package/lib/types/plugin-scan.js +159 -43
  76. package/lib/types/quota-catalog.d.ts +247 -0
  77. package/lib/types/quota-catalog.js +122 -0
  78. package/lib/types/quota-tiers.d.ts +150 -0
  79. package/lib/types/quota-tiers.js +167 -2
  80. package/lib/types/remote-audit-actions.d.ts +1 -1
  81. package/lib/types/remote-audit-actions.js +217 -4
  82. package/lib/types/wire-vocabulary.js +8 -1
  83. package/lib/utils/index.d.ts +1 -1
  84. package/lib/utils/index.js +2 -2
  85. package/lib/utils/response.d.ts +35 -2
  86. package/lib/utils/response.js +42 -3
  87. package/lib/validation/ai-schemas.d.ts +27 -0
  88. package/lib/validation/ai-schemas.js +31 -5
  89. package/lib/validation/plugin-schemas.d.ts +15 -0
  90. package/lib/validation/plugin-schemas.js +28 -1
  91. package/package.json +31 -2
@@ -47,6 +47,9 @@ export var ErrorCode;
47
47
  ErrorCode["PUBLISHER_ROOT_ORG_REQUIRED"] = "PUBLISHER_ROOT_ORG_REQUIRED";
48
48
  /** The publisher is suspended by the system org. */
49
49
  ErrorCode["PUBLISHER_SUSPENDED"] = "PUBLISHER_SUSPENDED";
50
+ /** The organization's administrators switched AI features off (`aiEnabled: false`
51
+ * on the org's AI configuration). Every AI entry point refuses with it. */
52
+ ErrorCode["AI_DISABLED"] = "AI_DISABLED";
50
53
  /** Tenant publishing is switched off on this instance (`PLUGIN_PUBLISHING_ENABLED`). */
51
54
  ErrorCode["PLUGIN_PUBLISHING_DISABLED"] = "PLUGIN_PUBLISHING_DISABLED";
52
55
  /** Review writes are switched off on this instance (`PLUGIN_REVIEWS_ENABLED`):
@@ -88,6 +91,11 @@ export var ErrorCode;
88
91
  ErrorCode["TEMPLATE_VALIDATION_FAILED"] = "TEMPLATE_VALIDATION_FAILED";
89
92
  // Quota/Rate limit errors (429)
90
93
  ErrorCode["QUOTA_EXCEEDED"] = "QUOTA_EXCEEDED";
94
+ /** The caller's per-member share of the org's `aiCalls` (org setting
95
+ * `aiCallsPerMemberPct`) is spent for this period — the org itself may have headroom. */
96
+ ErrorCode["AI_MEMBER_SHARE_EXCEEDED"] = "AI_MEMBER_SHARE_EXCEEDED";
97
+ /** The org's per-period AI token budget (org setting `aiTokenBudget`) is spent. */
98
+ ErrorCode["AI_TOKEN_BUDGET_EXCEEDED"] = "AI_TOKEN_BUDGET_EXCEEDED";
91
99
  ErrorCode["RATE_LIMIT_EXCEEDED"] = "RATE_LIMIT_EXCEEDED";
92
100
  /** An anonymous submitter (per verified email, or per client IP) is at the
93
101
  * rolling 24-hour submission cap. */
@@ -146,18 +154,17 @@ export var ErrorCode;
146
154
  * a reserved name, an Official/Verified listing's name, or one confusable
147
155
  * with a top listing; `details.reason` says which. */
148
156
  ErrorCode["NAME_TAKEN"] = "NAME_TAKEN";
149
- /** A flagged plugin version (a rescan found fixable Critical findings above
150
- * `PLUGIN_VULN_MAX_CRITICAL`) was pinned exactly while
151
- * `PLUGIN_BLOCK_ON_NEW_CRITICAL` is on; the message names the fix. Ranges
152
- * and the default skip flagged versions instead (docs/plugin-installing.md). */
153
- ErrorCode["PLUGIN_VERSION_VULN_BLOCKED"] = "PLUGIN_VERSION_VULN_BLOCKED";
157
+ /** An UNQUALIFIED reference names a plugin the org DELETED: refused rather
158
+ * than silently falling through to a same-named listing, which would swap the
159
+ * image a pipeline runs without anyone choosing it (`details.state: 'deleted'`). */
160
+ ErrorCode["PLUGIN_DELETED"] = "PLUGIN_DELETED";
154
161
  // Plugin build outcomes (422) — terminal build failures, reported on the build
155
162
  // stream and in the build's failure record, never answered on a request.
156
163
  /** The built image could not be vulnerability-scanned after every retry, so
157
164
  * nothing was persisted (docs/plugin-publishing.md). */
158
165
  ErrorCode["IMAGE_SCAN_UNAVAILABLE"] = "IMAGE_SCAN_UNAVAILABLE";
159
166
  /** The built image has more fixable Critical findings than the platform
160
- * floor `PLUGIN_VULN_MAX_CRITICAL`; the message lists them with their fixes. */
167
+ * floor `PLUGIN_VULN_MAX_FINDINGS`; the message lists them with their fixes. */
161
168
  ErrorCode["PLUGIN_VULN_GATE"] = "PLUGIN_VULN_GATE";
162
169
  /** An upload whose NAME would override a listing or the parent org's plugin,
163
170
  * refused because the consumption policy says `shadowing: deny`. */
@@ -195,6 +202,7 @@ export const ErrorCodeStatus = {
195
202
  [ErrorCode.PUBLISHER_ROOT_ORG_REQUIRED]: 403,
196
203
  [ErrorCode.PUBLISHER_SUSPENDED]: 403,
197
204
  [ErrorCode.PLUGIN_PUBLISHING_DISABLED]: 403,
205
+ [ErrorCode.AI_DISABLED]: 403,
198
206
  [ErrorCode.PLUGIN_REVIEWS_DISABLED]: 403,
199
207
  [ErrorCode.REVIEW_SELF_PROMOTION]: 403,
200
208
  [ErrorCode.SEPARATION_OF_DUTIES]: 403,
@@ -219,6 +227,8 @@ export const ErrorCodeStatus = {
219
227
  [ErrorCode.TEMPLATE_SIZE_EXCEEDED]: 400,
220
228
  [ErrorCode.TEMPLATE_VALIDATION_FAILED]: 400,
221
229
  [ErrorCode.QUOTA_EXCEEDED]: 429,
230
+ [ErrorCode.AI_MEMBER_SHARE_EXCEEDED]: 429,
231
+ [ErrorCode.AI_TOKEN_BUDGET_EXCEEDED]: 429,
222
232
  [ErrorCode.RATE_LIMIT_EXCEEDED]: 429,
223
233
  [ErrorCode.SUBMISSION_LIMIT]: 429,
224
234
  [ErrorCode.PAYLOAD_TOO_LARGE]: 413,
@@ -240,7 +250,7 @@ export const ErrorCodeStatus = {
240
250
  [ErrorCode.PLUGIN_UNAVAILABLE]: 409,
241
251
  [ErrorCode.PLUGIN_NAME_LISTED]: 409,
242
252
  [ErrorCode.NAME_TAKEN]: 409,
243
- [ErrorCode.PLUGIN_VERSION_VULN_BLOCKED]: 409,
253
+ [ErrorCode.PLUGIN_DELETED]: 410,
244
254
  [ErrorCode.IMAGE_SCAN_UNAVAILABLE]: 422,
245
255
  [ErrorCode.PLUGIN_VULN_GATE]: 422,
246
256
  [ErrorCode.PLUGIN_NAME_SHADOWS]: 409,
@@ -262,4 +272,4 @@ export const ErrorCodeStatus = {
262
272
  export function getStatusForErrorCode(code) {
263
273
  return ErrorCodeStatus[code] ?? 500;
264
274
  }
265
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItY29kZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvZXJyb3ItY29kZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFOLElBQVksU0FtTFg7QUFuTEQsV0FBWSxTQUFTO0lBQ25CLDhCQUE4QjtJQUM5QiwwQ0FBNkIsQ0FBQTtJQUM3Qiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQjs7O3VEQUdtRDtJQUNuRCwwQ0FBNkIsQ0FBQTtJQUM3Qjs4RUFDMEU7SUFDMUUsZ0RBQW1DLENBQUE7SUFFbkMsNkJBQTZCO0lBQzdCLGtFQUFxRCxDQUFBO0lBQ3JEO3dFQUNvRTtJQUNwRSw4REFBaUQsQ0FBQTtJQUNqRDtvRUFDZ0U7SUFDaEUsZ0VBQW1ELENBQUE7SUFDbkQ7a0VBQzhEO0lBQzlELGdFQUFtRCxDQUFBO0lBQ25EOztvRkFFZ0Y7SUFDaEYsd0RBQTJDLENBQUE7SUFDM0M7d0VBQ29FO0lBQ3BFLGtFQUFxRCxDQUFBO0lBQ3JEOzJCQUN1QjtJQUN2Qix3RUFBMkQsQ0FBQTtJQUMzRCxvREFBb0Q7SUFDcEQsd0RBQTJDLENBQUE7SUFDM0Msd0ZBQXdGO0lBQ3hGLHNFQUF5RCxDQUFBO0lBQ3pEO3lEQUNxRDtJQUNyRCxnRUFBbUQsQ0FBQTtJQUNuRDsyREFDdUQ7SUFDdkQsNERBQStDLENBQUE7SUFDL0M7OzJDQUV1QztJQUN2QywwREFBNkMsQ0FBQTtJQUM3QywwQ0FBNkIsQ0FBQTtJQUM3QiwwREFBNkMsQ0FBQTtJQUU3Qyx5QkFBeUI7SUFDekIsb0NBQXVCLENBQUE7SUFDdkIsNENBQStCLENBQUE7SUFDL0I7OzJEQUV1RDtJQUN2RCx3REFBMkMsQ0FBQTtJQUMzQzs7K0RBRTJEO0lBQzNELDBEQUE2QyxDQUFBO0lBRTdD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SUFDbkQsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBTdGFuZGFyZGl6ZWQgZXJyb3IgY29kZXMgdXNlZCBhY3Jvc3MgYWxsIEFQSSBtaWNyb3NlcnZpY2VzLlxuICogVXNlIHRoZXNlIGNvZGVzIGluIGVycm9yIHJlc3BvbnNlcyBmb3IgY29uc2lzdGVudCBjbGllbnQgaGFuZGxpbmcuXG4gKlxuICogRWFjaCBIVFRQIHN0YXR1cyBjYXRlZ29yeSBoYXMgb25lIHByaW1hcnkgY29kZS4gVXNlIHRoZSBgZGV0YWlsc2BcbiAqIGZpZWxkIGluIGVycm9yIHJlc3BvbnNlcyBmb3Igc3ViLXR5cGUgaW5mb3JtYXRpb24gKGUuZy4gd2hpY2ggcXVvdGFcbiAqIHdhcyBleGNlZWRlZCwgd2hpY2ggZmllbGQgZmFpbGVkIHZhbGlkYXRpb24pLlxuICovXG5leHBvcnQgZW51bSBFcnJvckNvZGUge1xuICAvLyBBdXRoZW50aWNhdGlvbiBlcnJvcnMgKDQwMSlcbiAgVU5BVVRIT1JJWkVEID0gJ1VOQVVUSE9SSVpFRCcsXG4gIFRPS0VOX0VYUElSRUQgPSAnVE9LRU5fRVhQSVJFRCcsXG4gIFRPS0VOX0lOVkFMSUQgPSAnVE9LRU5fSU5WQUxJRCcsXG4gIFRPS0VOX01JU1NJTkcgPSAnVE9LRU5fTUlTU0lORycsXG4gIFRPS0VOX1JFVk9LRUQgPSAnVE9LRU5fUkVWT0tFRCcsXG4gIC8qKiBUaGUgc2Vzc2lvbiBpcyBub3QgTUZBLWdyYWRlIChgYWFsYCBiZWxvdyB0aGUgcm91dGUncyBgbWluQXNzdXJhbmNlYCkuXG4gICAqICBUaGUgY2xpZW50IHNlbmRzIHRoZSBwZXJzb24gdG8gZW5yb2wgLyBzaWduIGluIGFnYWluIHdpdGggYSBzZWNvbmRcbiAgICogIGZhY3RvciDigJQgaXQgbXVzdCBOT1Qgc2lnbiB0aGVtIG91dCBvciByZXRyeSBhIHRva2VuIHJlZnJlc2gsIHNpbmNlIGFcbiAgICogIHJlZnJlc2ggY2FuIG5ldmVyIHJhaXNlIHRoZSBhc3N1cmFuY2UgbGV2ZWwuICovXG4gIE1GQV9SRVFVSVJFRCA9ICdNRkFfUkVRVUlSRUQnLFxuICAvKiogVGhlIHNlc3Npb24gaXMgTUZBLWdyYWRlIGJ1dCBpdHMgYGF1dGhfdGltZWAgaXMgb2xkZXIgdGhhbiB0aGUgcm91dGUnc1xuICAgKiAgYG1heEFnZWAg4oCUIHRoZSBwZXJzb24gbXVzdCBhdXRoZW50aWNhdGUgYWdhaW4gKG5vdCBtZXJlbHkgcmVmcmVzaCkuICovXG4gIFJFQVVUSF9SRVFVSVJFRCA9ICdSRUFVVEhfUkVRVUlSRUQnLFxuXG4gIC8vIEF1dGhvcml6YXRpb24gZXJyb3JzICg0MDMpXG4gIElOU1VGRklDSUVOVF9QRVJNSVNTSU9OUyA9ICdJTlNVRkZJQ0lFTlRfUEVSTUlTU0lPTlMnLFxuICAvKiogQSBtYWNoaW5lIGNyZWRlbnRpYWwgKHNlcnZpY2UgcHJpbmNpcGFsLCBvcmcgc2VydmljZSBhY2NvdW50LCBvciBhblxuICAgKiAgZXhjaGFuZ2VkIGFjY2VzcyBrZXkpIHJlYWNoZWQgYSByb3V0ZSB0aGF0IHJlcXVpcmVzIGEgcGVyc29uLiAqL1xuICBIVU1BTl9TRVNTSU9OX1JFUVVJUkVEID0gJ0hVTUFOX1NFU1NJT05fUkVRVUlSRUQnLFxuICAvKiogQSBib290c3RyYXAtYWRtaW4gZW5yb2xtZW50IHNlc3Npb24gKGBtZmFFbnJvbGxtZW50UGVuZGluZ2ApIHJlYWNoZWQgYVxuICAgKiAgcm91dGUgb3V0c2lkZSB0aGUgZW5yb2xtZW50IC8gc2lnbi1vdXQgLyBzZXR1cCBhbGxvd2xpc3QuICovXG4gIE1GQV9FTlJPTExNRU5UX1JFUVVJUkVEID0gJ01GQV9FTlJPTExNRU5UX1JFUVVJUkVEJyxcbiAgLyoqIEEgcmVhZC1vbmx5IGltcGVyc29uYXRpb24gdG9rZW4gKGBpbXBlcnNvbmF0aW9uUmVhZE9ubHlgKSBhdHRlbXB0ZWQgYVxuICAgKiAgc3RhdGUtY2hhbmdpbmcgcmVxdWVzdCAoYW55dGhpbmcgYnV0IEdFVC9IRUFEL09QVElPTlMpLiAqL1xuICBJTVBFUlNPTkFUSU9OX1JFQURfT05MWSA9ICdJTVBFUlNPTkFUSU9OX1JFQURfT05MWScsXG4gIC8qKiBBIHBsdWdpbi1lY29zeXN0ZW0gZ292ZXJuYW5jZSByb3V0ZSAoZG9jcy9ydW5ib29rcy9lY29zeXN0ZW0tbW9kZXJhdGlvbi5tZClcbiAgICogIHdhcyBjYWxsZWQgZnJvbSBhbiBhY3RpdmUgb3JnIG90aGVyIHRoYW4gdGhlIHN5c3RlbSBvcmcg4oCUIGEgdG9rZW4gbWludGVkIGluXG4gICAqICBhIHRlbmFudCBvcmcgaXMgcmVmdXNlZCBldmVuIGZvciB0aGUgc2FtZSB1c2VyLiBTd2l0Y2ggdG8gdGhlIHN5c3RlbSBvcmcuICovXG4gIFNZU1RFTV9PUkdfUkVRVUlSRUQgPSAnU1lTVEVNX09SR19SRVFVSVJFRCcsXG4gIC8qKiBUaGUgcHVibGlzaGVyIGhhc24ndCBhY2NlcHRlZCB0aGUgQ1VSUkVOVCBwdWJsaXNoZXIgdGVybXMgdmVyc2lvbiwgc28gaXRcbiAgICogIGNhbid0IHN1Ym1pdCBuZXcgcmVxdWVzdHMgKGV4aXN0aW5nIGxpc3RpbmdzIGFyZSB1bmFmZmVjdGVkKS4gKi9cbiAgUFVCTElTSEVSX1RFUk1TX1JFUVVJUkVEID0gJ1BVQkxJU0hFUl9URVJNU19SRVFVSVJFRCcsXG4gIC8qKiBQdWJsaXNoaW5nIGlzIGRvbmUgZnJvbSB0aGUgUk9PVCBvcmc7IGEgdGVhbSBvcmcgY2FuJ3Qgb3duIGEgcHVibGlzaGVyIG9yXG4gICAqICBzdWJtaXQgcmVxdWVzdHMuICovXG4gIFBVQkxJU0hFUl9ST09UX09SR19SRVFVSVJFRCA9ICdQVUJMSVNIRVJfUk9PVF9PUkdfUkVRVUlSRUQnLFxuICAvKiogVGhlIHB1Ymxpc2hlciBpcyBzdXNwZW5kZWQgYnkgdGhlIHN5c3RlbSBvcmcuICovXG4gIFBVQkxJU0hFUl9TVVNQRU5ERUQgPSAnUFVCTElTSEVSX1NVU1BFTkRFRCcsXG4gIC8qKiBUZW5hbnQgcHVibGlzaGluZyBpcyBzd2l0Y2hlZCBvZmYgb24gdGhpcyBpbnN0YW5jZSAoYFBMVUdJTl9QVUJMSVNISU5HX0VOQUJMRURgKS4gKi9cbiAgUExVR0lOX1BVQkxJU0hJTkdfRElTQUJMRUQgPSAnUExVR0lOX1BVQkxJU0hJTkdfRElTQUJMRUQnLFxuICAvKiogUmV2aWV3IHdyaXRlcyBhcmUgc3dpdGNoZWQgb2ZmIG9uIHRoaXMgaW5zdGFuY2UgKGBQTFVHSU5fUkVWSUVXU19FTkFCTEVEYCk6XG4gICAqICByZXZpZXdzIHN0YXkgcmVhZGFibGUsIG5vdGhpbmcgbmV3IGlzIHdyaXR0ZW4uICovXG4gIFBMVUdJTl9SRVZJRVdTX0RJU0FCTEVEID0gJ1BMVUdJTl9SRVZJRVdTX0RJU0FCTEVEJyxcbiAgLyoqIEEgbWVtYmVyIG9mIHRoZSBwdWJsaXNoZXIncyBvd24gb3JnYW5pemF0aW9uIHRyaWVkIHRvIHJldmlldyAob3Igdm90ZSBvbiBhXG4gICAqICByZXZpZXcgb2YpIG9uZSBvZiBpdHMgbGlzdGluZ3MgKHNlbGYtcHJvbW90aW9uKS4gKi9cbiAgUkVWSUVXX1NFTEZfUFJPTU9USU9OID0gJ1JFVklFV19TRUxGX1BST01PVElPTicsXG4gIC8qKiBTZXBhcmF0aW9uIG9mIGR1dGllczogdGhlIGNhbGxlciBtYXkgbm90IGRlY2lkZSB0aGlzIHJlcXVlc3Qg4oCUXG4gICAqICBpdCBjYW1lIGZyb20gYW4gb3JnIHRoZXkgYmVsb25nIHRvLCB0aGV5IHVwbG9hZGVkIHRoZSB2ZXJzaW9uLCBvciB0aGV5XG4gICAqICBnYXZlIHRoZSBmaXJzdCBvZiB0d28gYXBwcm92YWxzLiAqL1xuICBTRVBBUkFUSU9OX09GX0RVVElFUyA9ICdTRVBBUkFUSU9OX09GX0RVVElFUycsXG4gIE9SR19NSVNNQVRDSCA9ICdPUkdfTUlTTUFUQ0gnLFxuICBDT01QTElBTkNFX1ZJT0xBVElPTiA9ICdDT01QTElBTkNFX1ZJT0xBVElPTicsXG5cbiAgLy8gTm90IGZvdW5kIGVycm9ycyAoNDA0KVxuICBOT1RfRk9VTkQgPSAnTk9UX0ZPVU5EJyxcbiAgT1JHX05PVF9GT1VORCA9ICdPUkdfTk9UX0ZPVU5EJyxcbiAgLyoqIFRoZSBlbWFpbCBnaXZlbiB0byBcImFkZCBtZW1iZXJcIiBoYXMgbm8gYWNjb3VudC4gRGlzdGluY3QgZnJvbSBOT1RfRk9VTkRcbiAgICogIGJlY2F1c2UgaXQgaXMgQUNUSU9OQUJMRTogdGhlIGNhbGxlcidzIGludGVudCBpcyBzYXRpc2ZpYWJsZSBieSBzZW5kaW5nIGFuXG4gICAqICBpbnZpdGF0aW9uLCBhbmQgYSBiYXJlIDQwNCBuYW1lZCBubyB3YXkgZm9yd2FyZC4gKi9cbiAgVVNFUl9OT1RfUkVHSVNURVJFRCA9ICdVU0VSX05PVF9SRUdJU1RFUkVEJyxcbiAgLyoqIFRoZSBhbm9ueW1vdXMgcGx1Z2luIHN1Ym1pc3Npb24gQVBJIGlzIG9mZiBvbiB0aGlzIGluc3RhbmNlXG4gICAqICAoYEFOT05ZTU9VU19TVUJNSVNTSU9OU19FTkFCTEVEYCwgb3Igb3V0Ym91bmQgZW1haWwgaXNuJ3QgY29uZmlndXJlZCkg4oCUXG4gICAqICBhbnN3ZXJlZCBhcyBhIHBsYWluIDQwNCAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCkuICovXG4gIFNVQk1JU1NJT05TX0RJU0FCTEVEID0gJ1NVQk1JU1NJT05TX0RJU0FCTEVEJyxcblxuICAvLyBWYWxpZGF0aW9uIGVycm9ycyAoNDAwKVxuICBWQUxJREFUSU9OX0VSUk9SID0gJ1ZBTElEQVRJT05fRVJST1InLFxuICBNSVNTSU5HX1JFUVVJUkVEX0ZJRUxEID0gJ01JU1NJTkdfUkVRVUlSRURfRklFTEQnLFxuICAvKiogQSBwcm9vZi1vZi13b3JrIGFuc3dlciBpcyBtaXNzaW5nLCBtYWxmb3JtZWQsIGV4cGlyZWQsIHRvbyBlYXN5LCB3cm9uZyxcbiAgICogIG9yIHdhcyBhbHJlYWR5IHVzZWQgKGFub255bW91cyBzdWJtaXNzaW9ucykuICovXG4gIFBST09GX09GX1dPUktfSU5WQUxJRCA9ICdQUk9PRl9PRl9XT1JLX0lOVkFMSUQnLFxuICBURU1QTEFURV9VTktOT1dOX1BBVEggPSAnVEVNUExBVEVfVU5LTk9XTl9QQVRIJyxcbiAgVEVNUExBVEVfQ1lDTEUgPSAnVEVNUExBVEVfQ1lDTEUnLFxuICBURU1QTEFURV9QQVJTRV9FUlJPUiA9ICdURU1QTEFURV9QQVJTRV9FUlJPUicsXG4gIFRFTVBMQVRFX1RZUEVfTUlTTUFUQ0ggPSAnVEVNUExBVEVfVFlQRV9NSVNNQVRDSCcsXG4gIFRFTVBMQVRFX1NFQ1JFVFNfUkVTRVJWRUQgPSAnVEVNUExBVEVfU0VDUkVUU19SRVNFUlZFRCcsXG4gIFRFTVBMQVRFX0NPTlRSQUNUX1ZJT0xBVElPTiA9ICdURU1QTEFURV9DT05UUkFDVF9WSU9MQVRJT04nLFxuICBURU1QTEFURV9TSVpFX0VYQ0VFREVEID0gJ1RFTVBMQVRFX1NJWkVfRVhDRUVERUQnLFxuICBURU1QTEFURV9WQUxJREFUSU9OX0ZBSUxFRCA9ICdURU1QTEFURV9WQUxJREFUSU9OX0ZBSUxFRCcsXG5cbiAgLy8gUXVvdGEvUmF0ZSBsaW1pdCBlcnJvcnMgKDQyOSlcbiAgUVVPVEFfRVhDRUVERUQgPSAnUVVPVEFfRVhDRUVERUQnLFxuICBSQVRFX0xJTUlUX0VYQ0VFREVEID0gJ1JBVEVfTElNSVRfRVhDRUVERUQnLFxuICAvKiogQW4gYW5vbnltb3VzIHN1Ym1pdHRlciAocGVyIHZlcmlmaWVkIGVtYWlsLCBvciBwZXIgY2xpZW50IElQKSBpcyBhdCB0aGVcbiAgICogIHJvbGxpbmcgMjQtaG91ciBzdWJtaXNzaW9uIGNhcC4gKi9cbiAgU1VCTUlTU0lPTl9MSU1JVCA9ICdTVUJNSVNTSU9OX0xJTUlUJyxcblxuICAvLyBQYXlsb2FkIGVycm9ycyAoNDEzKVxuICBQQVlMT0FEX1RPT19MQVJHRSA9ICdQQVlMT0FEX1RPT19MQVJHRScsXG5cbiAgLy8gQ29uZmxpY3QgZXJyb3JzICg0MDkpXG4gIENPTkZMSUNUID0gJ0NPTkZMSUNUJyxcbiAgRFVQTElDQVRFX0VOVFJZID0gJ0RVUExJQ0FURV9FTlRSWScsXG4gIFNDQU5fQ09ORkxJQ1QgPSAnU0NBTl9DT05GTElDVCcsXG4gIC8qKiBBIHBsdWdpbiBpbWFnZSdzIGNvc2lnbiBzaWduYXR1cmUgKG9yIGl0cyBzaWduZWQgU0JPTSBhdHRlc3RhdGlvbikgZGlkXG4gICAqICBub3QgdmVyaWZ5IGFnYWluc3QgdGhlIHBsYXRmb3JtJ3MgcGx1Z2luLXNpZ25pbmcga2V5IOKAlCB0aGUgcmVnaXN0cnlcbiAgICogIGNvbnRlbnQgbm8gbG9uZ2VyIG1hdGNoZXMgd2hhdCB0aGUgcGxhdGZvcm0gYnVpbHQgYW5kIHNpZ25lZC4gKi9cbiAgSU1BR0VfVkVSSUZJQ0FUSU9OX0ZBSUxFRCA9ICdJTUFHRV9WRVJJRklDQVRJT05fRkFJTEVEJyxcbiAgLyoqIFRoZSBwbHVnaW4gdmVyc2lvbiBpcyBpbW11dGFibGUg4oCUIGEgcHVibGlzaCByZXF1ZXN0IHJlZmVyZW5jZXMgaXRcbiAgICogIChgZnJvemVuX2F0YCBzZXQpIG9yIGl0IGlzIHB1Ymxpc2hlZCB0byBhIGxpc3Rpbmcg4oCUIHNvIGl0IGNhbiBiZSBuZWl0aGVyXG4gICAqICByZS11cGxvYWRlZCwgZWRpdGVkIG5vciBkZWxldGVkIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gKi9cbiAgUExVR0lOX1ZFUlNJT05fRlJPWkVOID0gJ1BMVUdJTl9WRVJTSU9OX0ZST1pFTicsXG4gIC8qKiBUaGUgcGx1Z2luIHZlcnNpb24gaXMgcmVmZXJlbmNlZCBieSBvbmUgb2YgdGhlIG9yZydzIHBpcGVsaW5lcywgb3IgcHVibGlzaGVkXG4gICAqICB0byBhbiBlY29zeXN0ZW0gbGlzdGluZzsgZGVsZXRpbmcgaXQgbmVlZHMgYD9mb3JjZT10cnVlYCBwbHVzIGEgc3RlcC11cC4gKi9cbiAgUExVR0lOX1ZFUlNJT05fSU5fVVNFID0gJ1BMVUdJTl9WRVJTSU9OX0lOX1VTRScsXG4gIC8qKiBBIGZyZWV6ZSBuYW1lZCBhbiBpbWFnZSBkaWdlc3QgdGhhdCBpcyBub3QgdGhlIHZlcnNpb24ncyBzdG9yZWQgZGlnZXN0XG4gICAqICAoZmFpbCBjbG9zZWQ6IHdoYXQgd2FzIHJlcXVlc3RlZCBpcyBub3Qgd2hhdCB3b3VsZCBiZSBwdWJsaXNoZWQpLiAqL1xuICBQTFVHSU5fRElHRVNUX01JU01BVENIID0gJ1BMVUdJTl9ESUdFU1RfTUlTTUFUQ0gnLFxuICAvKiogQSBwdWJsaXNoIHJlcXVlc3QgbmVlZHMgdGhlIG9yZydzIHB1Ymxpc2hlciBwcm9maWxlLCB3aGljaCBkb2Vzbid0IGV4aXN0XG4gICAqICB5ZXQgKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQpLiBDbGFpbSBhIGhhbmRsZSBmaXJzdC4gKi9cbiAgUFVCTElTSEVSX1JFUVVJUkVEID0gJ1BVQkxJU0hFUl9SRVFVSVJFRCcsXG4gIC8qKiBUaGUgcmVxdWVzdGVkIHB1Ymxpc2hlciBoYW5kbGUgaXMgcmVzZXJ2ZWQgKE9mZmljaWFsL1ZlcmlmaWVkXG4gICAqICByZXNlcnZhdGlvbnMsIGNvbmZ1c2FibGVzKS4gU3VibWl0IGEgYGNsYWltYCByZXF1ZXN0IGluc3RlYWQuICovXG4gIFBVQkxJU0hFUl9IQU5ETEVfUkVTRVJWRUQgPSAnUFVCTElTSEVSX0hBTkRMRV9SRVNFUlZFRCcsXG4gIC8qKiBBIHB1Ymxpc2ggcmVxdWVzdCBmYWlsZWQgYSBzdWJtaXQgZ2F0ZSAocHVibGljIHZpc2liaWxpdHksIFNQRFggbGljZW5zZSxcbiAgICogIFJFQURNRSwgc2lnbmF0dXJlLCBzY2FuLCB2dWxuZXJhYmlsaXR5IGdhdGUg4oCmKTsgYGRldGFpbHMuZ2F0ZXNgIGxpc3RzIHRoZW0uICovXG4gIFBVQkxJU0hfR0FURV9GQUlMRUQgPSAnUFVCTElTSF9HQVRFX0ZBSUxFRCcsXG4gIC8qKiBBIFZlcmlmaWVkLXB1Ymxpc2hlciBhcHBsaWNhdGlvbiAob3IgaXRzIGRlY2lzaW9uKSBmcm9tIGFuIG9yZyB3aG9zZSBwbGFuXG4gICAqICBsYWNrcyB0aGUgYHZlcmlmaWVkX3B1Ymxpc2hlcmAgZmVhdHVyZSAoVGVhbSssIGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQpLiAqL1xuICBWRVJJRklFRF9QTEFOX1JFUVVJUkVEID0gJ1ZFUklGSUVEX1BMQU5fUkVRVUlSRUQnLFxuICAvKiogQSBWZXJpZmllZC1wdWJsaXNoZXIgYXBwbGljYXRpb24gZnJvbSBhbiBvcmcgd2l0aCBubyBETlMtdmVyaWZpZWQgZG9tYWluLiAqL1xuICBWRVJJRklFRF9ET01BSU5fUkVRVUlSRUQgPSAnVkVSSUZJRURfRE9NQUlOX1JFUVVJUkVEJyxcbiAgLyoqIEEgVmVyaWZpZWQtcHVibGlzaGVyIGFwcGxpY2F0aW9uIGZyb20gYW4gb3JnIHdob3NlIG93bmVyIGhhcyBubyBzZWNvbmRcbiAgICogIGZhY3RvciAocGFzc2tleSBvciBhdXRoZW50aWNhdG9yIGFwcCkuICovXG4gIFZFUklGSUVEX09XTkVSX01GQV9SRVFVSVJFRCA9ICdWRVJJRklFRF9PV05FUl9NRkFfUkVRVUlSRUQnLFxuICAvKiogQSBwbHVnaW4gcmVmZXJlbmNlIG5hbWVzIGFuIGVjb3N5c3RlbSBsaXN0aW5nIHRoZSBvcmcgaGFzbid0IGluc3RhbGxlZCAob3JcbiAgICogIHdob3NlIGluc3RhbGwgaXMgcGVuZGluZywgZGVuaWVkLCBvciBkb2Vzbid0IGNvdmVyIHRoZSB2ZXJzaW9uIGFza2VkIGZvcjtcbiAgICogIGBkZXRhaWxzLnJlYXNvbmApIOKAlCBkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kICovXG4gIFBMVUdJTl9OT1RfSU5TVEFMTEVEID0gJ1BMVUdJTl9OT1RfSU5TVEFMTEVEJyxcbiAgLyoqIFRoZSBvcmcncyBjb25zdW1wdGlvbiBwb2xpY3kgcmVmdXNlcyB0aGUgbGlzdGluZzogaXRzIHRpZXIgaXNuJ3QgYWxsb3dlZCxcbiAgICogIHRoZSBsaXN0aW5nIGlzIGJsb2NrZWQsIG9yIGFuIGFkdmlzb3J5IGJsb2NrcyB0aGUgdmVyc2lvbiAoYGRldGFpbHMucmVhc29uYCkuICovXG4gIFBMVUdJTl9CTE9DS0VEX0JZX1BPTElDWSA9ICdQTFVHSU5fQkxPQ0tFRF9CWV9QT0xJQ1knLFxuICAvKiogVGhlIGxpc3Rpbmcgb3IgdmVyc2lvbiBjYW4ndCBiZSB1c2VkOiB5YW5rZWQsIHN1c3BlbmRlZCwgb3IgcGF1c2VkIGZvciBuZXdcbiAgICogIGluc3RhbGxzIChgZGV0YWlscy5yZWFzb25gKS4gKi9cbiAgUExVR0lOX1VOQVZBSUxBQkxFID0gJ1BMVUdJTl9VTkFWQUlMQUJMRScsXG4gIC8qKiBBbiBhdXRvLWNyZWF0ZWQgcGxhY2Vob2xkZXIgcGx1Z2luIGNhbid0IHRha2UgdGhlIG5hbWUgb2YgYSBsaXN0ZWQgcGx1Z2luXG4gICAqIOKAlCBpbnN0YWxsIHRoZSBsaXN0aW5nIGluc3RlYWQuICovXG4gIFBMVUdJTl9OQU1FX0xJU1RFRCA9ICdQTFVHSU5fTkFNRV9MSVNURUQnLFxuICAvKiogQW4gYW5vbnltb3VzIHN1Ym1pc3Npb24gbmFtZXMgYSBjb21tdW5pdHkgbGlzdGluZyBhbm90aGVyIHN1Ym1pdHRlciBvd25zLFxuICAgKiAgYSByZXNlcnZlZCBuYW1lLCBhbiBPZmZpY2lhbC9WZXJpZmllZCBsaXN0aW5nJ3MgbmFtZSwgb3Igb25lIGNvbmZ1c2FibGVcbiAgICogIHdpdGggYSB0b3AgbGlzdGluZzsgYGRldGFpbHMucmVhc29uYCBzYXlzIHdoaWNoLiAqL1xuICBOQU1FX1RBS0VOID0gJ05BTUVfVEFLRU4nLFxuICAvKiogQSBmbGFnZ2VkIHBsdWdpbiB2ZXJzaW9uIChhIHJlc2NhbiBmb3VuZCBmaXhhYmxlIENyaXRpY2FsIGZpbmRpbmdzIGFib3ZlXG4gICAqICBgUExVR0lOX1ZVTE5fTUFYX0NSSVRJQ0FMYCkgd2FzIHBpbm5lZCBleGFjdGx5IHdoaWxlXG4gICAqICBgUExVR0lOX0JMT0NLX09OX05FV19DUklUSUNBTGAgaXMgb247IHRoZSBtZXNzYWdlIG5hbWVzIHRoZSBmaXguIFJhbmdlc1xuICAgKiAgYW5kIHRoZSBkZWZhdWx0IHNraXAgZmxhZ2dlZCB2ZXJzaW9ucyBpbnN0ZWFkIChkb2NzL3BsdWdpbi1pbnN0YWxsaW5nLm1kKS4gKi9cbiAgUExVR0lOX1ZFUlNJT05fVlVMTl9CTE9DS0VEID0gJ1BMVUdJTl9WRVJTSU9OX1ZVTE5fQkxPQ0tFRCcsXG5cbiAgLy8gUGx1Z2luIGJ1aWxkIG91dGNvbWVzICg0MjIpIOKAlCB0ZXJtaW5hbCBidWlsZCBmYWlsdXJlcywgcmVwb3J0ZWQgb24gdGhlIGJ1aWxkXG4gIC8vIHN0cmVhbSBhbmQgaW4gdGhlIGJ1aWxkJ3MgZmFpbHVyZSByZWNvcmQsIG5ldmVyIGFuc3dlcmVkIG9uIGEgcmVxdWVzdC5cbiAgLyoqIFRoZSBidWlsdCBpbWFnZSBjb3VsZCBub3QgYmUgdnVsbmVyYWJpbGl0eS1zY2FubmVkIGFmdGVyIGV2ZXJ5IHJldHJ5LCBzb1xuICAgKiAgbm90aGluZyB3YXMgcGVyc2lzdGVkIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gKi9cbiAgSU1BR0VfU0NBTl9VTkFWQUlMQUJMRSA9ICdJTUFHRV9TQ0FOX1VOQVZBSUxBQkxFJyxcbiAgLyoqIFRoZSBidWlsdCBpbWFnZSBoYXMgbW9yZSBmaXhhYmxlIENyaXRpY2FsIGZpbmRpbmdzIHRoYW4gdGhlIHBsYXRmb3JtXG4gICAqICBmbG9vciBgUExVR0lOX1ZVTE5fTUFYX0NSSVRJQ0FMYDsgdGhlIG1lc3NhZ2UgbGlzdHMgdGhlbSB3aXRoIHRoZWlyIGZpeGVzLiAqL1xuICBQTFVHSU5fVlVMTl9HQVRFID0gJ1BMVUdJTl9WVUxOX0dBVEUnLFxuICAvKiogQW4gdXBsb2FkIHdob3NlIE5BTUUgd291bGQgb3ZlcnJpZGUgYSBsaXN0aW5nIG9yIHRoZSBwYXJlbnQgb3JnJ3MgcGx1Z2luLFxuICAgKiAgcmVmdXNlZCBiZWNhdXNlIHRoZSBjb25zdW1wdGlvbiBwb2xpY3kgc2F5cyBgc2hhZG93aW5nOiBkZW55YC4gKi9cbiAgUExVR0lOX05BTUVfU0hBRE9XUyA9ICdQTFVHSU5fTkFNRV9TSEFET1dTJyxcblxuICAvLyBCaWxsaW5nIGVycm9yc1xuICBQQVlNRU5UX01FVEhPRF9SRVFVSVJFRCA9ICdQQVlNRU5UX01FVEhPRF9SRVFVSVJFRCcsIC8vIDQwMlxuICBESVNDT1VOVF9DRUlMSU5HX0VYQ0VFREVEID0gJ0RJU0NPVU5UX0NFSUxJTkdfRVhDRUVERUQnLCAvLyA0MDBcbiAgRElTQ09VTlRfTk9UX0ZPVU5EID0gJ0RJU0NPVU5UX05PVF9GT1VORCcsIC8vIDQwNFxuICBESVNDT1VOVF9JTkFDVElWRSA9ICdESVNDT1VOVF9JTkFDVElWRScsIC8vIDQwOVxuICBQTEFOX09WRVJfQ0FQID0gJ1BMQU5fT1ZFUl9DQVAnLCAvLyA0MDlcbiAgQURET05fT1ZFUl9DQVAgPSAnQURET05fT1ZFUl9DQVAnLCAvLyA0MDlcblxuICAvLyBTZXJ2ZXIgZXJyb3JzICg1MDApXG4gIElOVEVSTkFMX0VSUk9SID0gJ0lOVEVSTkFMX0VSUk9SJyxcbiAgREFUQUJBU0VfRVJST1IgPSAnREFUQUJBU0VfRVJST1InLFxuXG4gIC8vIE5vdCBpbXBsZW1lbnRlZCAoNTAxKSDigJQgdGhlIGNvbmZpZ3VyZWQgcHJvdmlkZXIgaGFzIG5vIHN1Y2ggY2FwYWJpbGl0eVxuICBOT1RfSU1QTEVNRU5URUQgPSAnTk9UX0lNUExFTUVOVEVEJyxcblxuICAvLyBTZXJ2aWNlIHVuYXZhaWxhYmxlICg1MDMpXG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEUgPSAnU0VSVklDRV9VTkFWQUlMQUJMRScsXG4gIENPTVBMSUFOQ0VfU0VSVklDRV9VTkFWQUlMQUJMRSA9ICdDT01QTElBTkNFX1NFUlZJQ0VfVU5BVkFJTEFCTEUnLFxufVxuXG4vKipcbiAqIE1hcHMgZXJyb3IgY29kZXMgdG8gdGhlaXIgZGVmYXVsdCBIVFRQIHN0YXR1cyBjb2Rlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEVycm9yQ29kZVN0YXR1czogUmVjb3JkPEVycm9yQ29kZSwgbnVtYmVyPiA9IHtcbiAgW0Vycm9yQ29kZS5VTkFVVEhPUklaRURdOiA0MDEsXG4gIFtFcnJvckNvZGUuVE9LRU5fRVhQSVJFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5UT0tFTl9JTlZBTElEXTogNDAxLFxuICBbRXJyb3JDb2RlLlRPS0VOX01JU1NJTkddOiA0MDEsXG4gIFtFcnJvckNvZGUuVE9LRU5fUkVWT0tFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5NRkFfUkVRVUlSRURdOiA0MDEsXG4gIFtFcnJvckNvZGUuUkVBVVRIX1JFUVVJUkVEXTogNDAxLFxuICBbRXJyb3JDb2RlLklOU1VGRklDSUVOVF9QRVJNSVNTSU9OU106IDQwMyxcbiAgW0Vycm9yQ29kZS5TWVNURU1fT1JHX1JFUVVJUkVEXTogNDAzLFxuICBbRXJyb3JDb2RlLlBVQkxJU0hFUl9URVJNU19SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QVUJMSVNIRVJfUk9PVF9PUkdfUkVRVUlSRURdOiA0MDMsXG4gIFtFcnJvckNvZGUuUFVCTElTSEVSX1NVU1BFTkRFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fUFVCTElTSElOR19ESVNBQkxFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fUkVWSUVXU19ESVNBQkxFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5SRVZJRVdfU0VMRl9QUk9NT1RJT05dOiA0MDMsXG4gIFtFcnJvckNvZGUuU0VQQVJBVElPTl9PRl9EVVRJRVNdOiA0MDMsXG4gIFtFcnJvckNvZGUuSFVNQU5fU0VTU0lPTl9SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5NRkFfRU5ST0xMTUVOVF9SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5JTVBFUlNPTkFUSU9OX1JFQURfT05MWV06IDQwMyxcbiAgW0Vycm9yQ29kZS5PUkdfTUlTTUFUQ0hdOiA0MDMsXG4gIFtFcnJvckNvZGUuQ09NUExJQU5DRV9WSU9MQVRJT05dOiA0MDMsXG4gIFtFcnJvckNvZGUuTk9UX0ZPVU5EXTogNDA0LFxuICBbRXJyb3JDb2RlLk9SR19OT1RfRk9VTkRdOiA0MDQsXG4gIFtFcnJvckNvZGUuVVNFUl9OT1RfUkVHSVNURVJFRF06IDQwNCxcbiAgW0Vycm9yQ29kZS5TVUJNSVNTSU9OU19ESVNBQkxFRF06IDQwNCxcbiAgW0Vycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SXTogNDAwLFxuICBbRXJyb3JDb2RlLk1JU1NJTkdfUkVRVUlSRURfRklFTERdOiA0MDAsXG4gIFtFcnJvckNvZGUuUFJPT0ZfT0ZfV09SS19JTlZBTElEXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1VOS05PV05fUEFUSF06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9DWUNMRV06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9QQVJTRV9FUlJPUl06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9UWVBFX01JU01BVENIXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1NFQ1JFVFNfUkVTRVJWRURdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfQ09OVFJBQ1RfVklPTEFUSU9OXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1NJWkVfRVhDRUVERURdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfVkFMSURBVElPTl9GQUlMRURdOiA0MDAsXG4gIFtFcnJvckNvZGUuUVVPVEFfRVhDRUVERURdOiA0MjksXG4gIFtFcnJvckNvZGUuUkFURV9MSU1JVF9FWENFRURFRF06IDQyOSxcbiAgW0Vycm9yQ29kZS5TVUJNSVNTSU9OX0xJTUlUXTogNDI5LFxuICBbRXJyb3JDb2RlLlBBWUxPQURfVE9PX0xBUkdFXTogNDEzLFxuICBbRXJyb3JDb2RlLkNPTkZMSUNUXTogNDA5LFxuICBbRXJyb3JDb2RlLkRVUExJQ0FURV9FTlRSWV06IDQwOSxcbiAgW0Vycm9yQ29kZS5TQ0FOX0NPTkZMSUNUXTogNDA5LFxuICBbRXJyb3JDb2RlLklNQUdFX1ZFUklGSUNBVElPTl9GQUlMRURdOiA0MDksXG4gIFtFcnJvckNvZGUuUExVR0lOX1ZFUlNJT05fRlJPWkVOXTogNDA5LFxuICBbRXJyb3JDb2RlLlBMVUdJTl9WRVJTSU9OX0lOX1VTRV06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fRElHRVNUX01JU01BVENIXTogNDA5LFxuICBbRXJyb3JDb2RlLlBVQkxJU0hFUl9SRVFVSVJFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5QVUJMSVNIRVJfSEFORExFX1JFU0VSVkVEXTogNDA5LFxuICBbRXJyb3JDb2RlLlBVQkxJU0hfR0FURV9GQUlMRURdOiA0MDksXG4gIFtFcnJvckNvZGUuVkVSSUZJRURfUExBTl9SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5WRVJJRklFRF9ET01BSU5fUkVRVUlSRURdOiA0MDksXG4gIFtFcnJvckNvZGUuVkVSSUZJRURfT1dORVJfTUZBX1JFUVVJUkVEXTogNDA5LFxuICBbRXJyb3JDb2RlLlBMVUdJTl9OT1RfSU5TVEFMTEVEXTogNDAzLFxuICBbRXJyb3JDb2RlLlBMVUdJTl9CTE9DS0VEX0JZX1BPTElDWV06IDQwMyxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fVU5BVkFJTEFCTEVdOiA0MDksXG4gIFtFcnJvckNvZGUuUExVR0lOX05BTUVfTElTVEVEXTogNDA5LFxuICBbRXJyb3JDb2RlLk5BTUVfVEFLRU5dOiA0MDksXG4gIFtFcnJvckNvZGUuUExVR0lOX1ZFUlNJT05fVlVMTl9CTE9DS0VEXTogNDA5LFxuICBbRXJyb3JDb2RlLklNQUdFX1NDQU5fVU5BVkFJTEFCTEVdOiA0MjIsXG4gIFtFcnJvckNvZGUuUExVR0lOX1ZVTE5fR0FURV06IDQyMixcbiAgW0Vycm9yQ29kZS5QTFVHSU5fTkFNRV9TSEFET1dTXTogNDA5LFxuICBbRXJyb3JDb2RlLlBBWU1FTlRfTUVUSE9EX1JFUVVJUkVEXTogNDAyLFxuICBbRXJyb3JDb2RlLkRJU0NPVU5UX0NFSUxJTkdfRVhDRUVERURdOiA0MDAsXG4gIFtFcnJvckNvZGUuRElTQ09VTlRfTk9UX0ZPVU5EXTogNDA0LFxuICBbRXJyb3JDb2RlLkRJU0NPVU5UX0lOQUNUSVZFXTogNDA5LFxuICBbRXJyb3JDb2RlLlBMQU5fT1ZFUl9DQVBdOiA0MDksXG4gIFtFcnJvckNvZGUuQURET05fT1ZFUl9DQVBdOiA0MDksXG4gIFtFcnJvckNvZGUuSU5URVJOQUxfRVJST1JdOiA1MDAsXG4gIFtFcnJvckNvZGUuREFUQUJBU0VfRVJST1JdOiA1MDAsXG4gIFtFcnJvckNvZGUuTk9UX0lNUExFTUVOVEVEXTogNTAxLFxuICBbRXJyb3JDb2RlLlNFUlZJQ0VfVU5BVkFJTEFCTEVdOiA1MDMsXG4gIFtFcnJvckNvZGUuQ09NUExJQU5DRV9TRVJWSUNFX1VOQVZBSUxBQkxFXTogNTAzLFxufTtcblxuLyoqXG4gKiBHZXQgdGhlIEhUVFAgc3RhdHVzIGNvZGUgZm9yIGFuIGVycm9yIGNvZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0dXNGb3JFcnJvckNvZGUoY29kZTogRXJyb3JDb2RlKTogbnVtYmVyIHtcbiAgcmV0dXJuIEVycm9yQ29kZVN0YXR1c1tjb2RlXSA/PyA1MDA7XG59XG4iXX0=
275
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItY29kZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvZXJyb3ItY29kZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFOLElBQVksU0EwTFg7QUExTEQsV0FBWSxTQUFTO0lBQ25CLDhCQUE4QjtJQUM5QiwwQ0FBNkIsQ0FBQTtJQUM3Qiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQjs7O3VEQUdtRDtJQUNuRCwwQ0FBNkIsQ0FBQTtJQUM3Qjs4RUFDMEU7SUFDMUUsZ0RBQW1DLENBQUE7SUFFbkMsNkJBQTZCO0lBQzdCLGtFQUFxRCxDQUFBO0lBQ3JEO3dFQUNvRTtJQUNwRSw4REFBaUQsQ0FBQTtJQUNqRDtvRUFDZ0U7SUFDaEUsZ0VBQW1ELENBQUE7SUFDbkQ7a0VBQzhEO0lBQzlELGdFQUFtRCxDQUFBO0lBQ25EOztvRkFFZ0Y7SUFDaEYsd0RBQTJDLENBQUE7SUFDM0M7d0VBQ29FO0lBQ3BFLGtFQUFxRCxDQUFBO0lBQ3JEOzJCQUN1QjtJQUN2Qix3RUFBMkQsQ0FBQTtJQUMzRCxvREFBb0Q7SUFDcEQsd0RBQTJDLENBQUE7SUFDM0M7Z0ZBQzRFO0lBQzVFLHdDQUEyQixDQUFBO0lBQzNCLHdGQUF3RjtJQUN4RixzRUFBeUQsQ0FBQTtJQUN6RDt5REFDcUQ7SUFDckQsZ0VBQW1ELENBQUE7SUFDbkQ7MkRBQ3VEO0lBQ3ZELDREQUErQyxDQUFBO0lBQy9DOzsyQ0FFdUM7SUFDdkMsMERBQTZDLENBQUE7SUFDN0MsMENBQTZCLENBQUE7SUFDN0IsMERBQTZDLENBQUE7SUFFN0MseUJBQXlCO0lBQ3pCLG9DQUF1QixDQUFBO0lBQ3ZCLDRDQUErQixDQUFBO0lBQy9COzsyREFFdUQ7SUFDdkQsd0RBQTJDLENBQUE7SUFDM0M7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LENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUc7SUFDL0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUUsR0FBRztJQUNoQyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEdBQUc7SUFDcEMsQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsRUFBRSxHQUFHO0NBQ2hELENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxJQUFlO0lBQ25ELE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogU3RhbmRhcmRpemVkIGVycm9yIGNvZGVzIHVzZWQgYWNyb3NzIGFsbCBBUEkgbWljcm9zZXJ2aWNlcy5cbiAqIFVzZSB0aGVzZSBjb2RlcyBpbiBlcnJvciByZXNwb25zZXMgZm9yIGNvbnNpc3RlbnQgY2xpZW50IGhhbmRsaW5nLlxuICpcbiAqIEVhY2ggSFRUUCBzdGF0dXMgY2F0ZWdvcnkgaGFzIG9uZSBwcmltYXJ5IGNvZGUuIFVzZSB0aGUgYGRldGFpbHNgXG4gKiBmaWVsZCBpbiBlcnJvciByZXNwb25zZXMgZm9yIHN1Yi10eXBlIGluZm9ybWF0aW9uIChlLmcuIHdoaWNoIHF1b3RhXG4gKiB3YXMgZXhjZWVkZWQsIHdoaWNoIGZpZWxkIGZhaWxlZCB2YWxpZGF0aW9uKS5cbiAqL1xuZXhwb3J0IGVudW0gRXJyb3JDb2RlIHtcbiAgLy8gQXV0aGVudGljYXRpb24gZXJyb3JzICg0MDEpXG4gIFVOQVVUSE9SSVpFRCA9ICdVTkFVVEhPUklaRUQnLFxuICBUT0tFTl9FWFBJUkVEID0gJ1RPS0VOX0VYUElSRUQnLFxuICBUT0tFTl9JTlZBTElEID0gJ1RPS0VOX0lOVkFMSUQnLFxuICBUT0tFTl9NSVNTSU5HID0gJ1RPS0VOX01JU1NJTkcnLFxuICBUT0tFTl9SRVZPS0VEID0gJ1RPS0VOX1JFVk9LRUQnLFxuICAvKiogVGhlIHNlc3Npb24gaXMgbm90IE1GQS1ncmFkZSAoYGFhbGAgYmVsb3cgdGhlIHJvdXRlJ3MgYG1pbkFzc3VyYW5jZWApLlxuICAgKiAgVGhlIGNsaWVudCBzZW5kcyB0aGUgcGVyc29uIHRvIGVucm9sIC8gc2lnbiBpbiBhZ2FpbiB3aXRoIGEgc2Vjb25kXG4gICAqICBmYWN0b3Ig4oCUIGl0IG11c3QgTk9UIHNpZ24gdGhlbSBvdXQgb3IgcmV0cnkgYSB0b2tlbiByZWZyZXNoLCBzaW5jZSBhXG4gICAqICByZWZyZXNoIGNhbiBuZXZlciByYWlzZSB0aGUgYXNzdXJhbmNlIGxldmVsLiAqL1xuICBNRkFfUkVRVUlSRUQgPSAnTUZBX1JFUVVJUkVEJyxcbiAgLyoqIFRoZSBzZXNzaW9uIGlzIE1GQS1ncmFkZSBidXQgaXRzIGBhdXRoX3RpbWVgIGlzIG9sZGVyIHRoYW4gdGhlIHJvdXRlJ3NcbiAgICogIGBtYXhBZ2VgIOKAlCB0aGUgcGVyc29uIG11c3QgYXV0aGVudGljYXRlIGFnYWluIChub3QgbWVyZWx5IHJlZnJlc2gpLiAqL1xuICBSRUFVVEhfUkVRVUlSRUQgPSAnUkVBVVRIX1JFUVVJUkVEJyxcblxuICAvLyBBdXRob3JpemF0aW9uIGVycm9ycyAoNDAzKVxuICBJTlNVRkZJQ0lFTlRfUEVSTUlTU0lPTlMgPSAnSU5TVUZGSUNJRU5UX1BFUk1JU1NJT05TJyxcbiAgLyoqIEEgbWFjaGluZSBjcmVkZW50aWFsIChzZXJ2aWNlIHByaW5jaXBhbCwgb3JnIHNlcnZpY2UgYWNjb3VudCwgb3IgYW5cbiAgICogIGV4Y2hhbmdlZCBhY2Nlc3Mga2V5KSByZWFjaGVkIGEgcm91dGUgdGhhdCByZXF1aXJlcyBhIHBlcnNvbi4gKi9cbiAgSFVNQU5fU0VTU0lPTl9SRVFVSVJFRCA9ICdIVU1BTl9TRVNTSU9OX1JFUVVJUkVEJyxcbiAgLyoqIEEgYm9vdHN0cmFwLWFkbWluIGVucm9sbWVudCBzZXNzaW9uIChgbWZhRW5yb2xsbWVudFBlbmRpbmdgKSByZWFjaGVkIGFcbiAgICogIHJvdXRlIG91dHNpZGUgdGhlIGVucm9sbWVudCAvIHNpZ24tb3V0IC8gc2V0dXAgYWxsb3dsaXN0LiAqL1xuICBNRkFfRU5ST0xMTUVOVF9SRVFVSVJFRCA9ICdNRkFfRU5ST0xMTUVOVF9SRVFVSVJFRCcsXG4gIC8qKiBBIHJlYWQtb25seSBpbXBlcnNvbmF0aW9uIHRva2VuIChgaW1wZXJzb25hdGlvblJlYWRPbmx5YCkgYXR0ZW1wdGVkIGFcbiAgICogIHN0YXRlLWNoYW5naW5nIHJlcXVlc3QgKGFueXRoaW5nIGJ1dCBHRVQvSEVBRC9PUFRJT05TKS4gKi9cbiAgSU1QRVJTT05BVElPTl9SRUFEX09OTFkgPSAnSU1QRVJTT05BVElPTl9SRUFEX09OTFknLFxuICAvKiogQSBwbHVnaW4tZWNvc3lzdGVtIGdvdmVybmFuY2Ugcm91dGUgKGRvY3MvcnVuYm9va3MvZWNvc3lzdGVtLW1vZGVyYXRpb24ubWQpXG4gICAqICB3YXMgY2FsbGVkIGZyb20gYW4gYWN0aXZlIG9yZyBvdGhlciB0aGFuIHRoZSBzeXN0ZW0gb3JnIOKAlCBhIHRva2VuIG1pbnRlZCBpblxuICAgKiAgYSB0ZW5hbnQgb3JnIGlzIHJlZnVzZWQgZXZlbiBmb3IgdGhlIHNhbWUgdXNlci4gU3dpdGNoIHRvIHRoZSBzeXN0ZW0gb3JnLiAqL1xuICBTWVNURU1fT1JHX1JFUVVJUkVEID0gJ1NZU1RFTV9PUkdfUkVRVUlSRUQnLFxuICAvKiogVGhlIHB1Ymxpc2hlciBoYXNuJ3QgYWNjZXB0ZWQgdGhlIENVUlJFTlQgcHVibGlzaGVyIHRlcm1zIHZlcnNpb24sIHNvIGl0XG4gICAqICBjYW4ndCBzdWJtaXQgbmV3IHJlcXVlc3RzIChleGlzdGluZyBsaXN0aW5ncyBhcmUgdW5hZmZlY3RlZCkuICovXG4gIFBVQkxJU0hFUl9URVJNU19SRVFVSVJFRCA9ICdQVUJMSVNIRVJfVEVSTVNfUkVRVUlSRUQnLFxuICAvKiogUHVibGlzaGluZyBpcyBkb25lIGZyb20gdGhlIFJPT1Qgb3JnOyBhIHRlYW0gb3JnIGNhbid0IG93biBhIHB1Ymxpc2hlciBvclxuICAgKiAgc3VibWl0IHJlcXVlc3RzLiAqL1xuICBQVUJMSVNIRVJfUk9PVF9PUkdfUkVRVUlSRUQgPSAnUFVCTElTSEVSX1JPT1RfT1JHX1JFUVVJUkVEJyxcbiAgLyoqIFRoZSBwdWJsaXNoZXIgaXMgc3VzcGVuZGVkIGJ5IHRoZSBzeXN0ZW0gb3JnLiAqL1xuICBQVUJMSVNIRVJfU1VTUEVOREVEID0gJ1BVQkxJU0hFUl9TVVNQRU5ERUQnLFxuICAvKiogVGhlIG9yZ2FuaXphdGlvbidzIGFkbWluaXN0cmF0b3JzIHN3aXRjaGVkIEFJIGZlYXR1cmVzIG9mZiAoYGFpRW5hYmxlZDogZmFsc2VgXG4gICAqICBvbiB0aGUgb3JnJ3MgQUkgY29uZmlndXJhdGlvbikuIEV2ZXJ5IEFJIGVudHJ5IHBvaW50IHJlZnVzZXMgd2l0aCBpdC4gKi9cbiAgQUlfRElTQUJMRUQgPSAnQUlfRElTQUJMRUQnLFxuICAvKiogVGVuYW50IHB1Ymxpc2hpbmcgaXMgc3dpdGNoZWQgb2ZmIG9uIHRoaXMgaW5zdGFuY2UgKGBQTFVHSU5fUFVCTElTSElOR19FTkFCTEVEYCkuICovXG4gIFBMVUdJTl9QVUJMSVNISU5HX0RJU0FCTEVEID0gJ1BMVUdJTl9QVUJMSVNISU5HX0RJU0FCTEVEJyxcbiAgLyoqIFJldmlldyB3cml0ZXMgYXJlIHN3aXRjaGVkIG9mZiBvbiB0aGlzIGluc3RhbmNlIChgUExVR0lOX1JFVklFV1NfRU5BQkxFRGApOlxuICAgKiAgcmV2aWV3cyBzdGF5IHJlYWRhYmxlLCBub3RoaW5nIG5ldyBpcyB3cml0dGVuLiAqL1xuICBQTFVHSU5fUkVWSUVXU19ESVNBQkxFRCA9ICdQTFVHSU5fUkVWSUVXU19ESVNBQkxFRCcsXG4gIC8qKiBBIG1lbWJlciBvZiB0aGUgcHVibGlzaGVyJ3Mgb3duIG9yZ2FuaXphdGlvbiB0cmllZCB0byByZXZpZXcgKG9yIHZvdGUgb24gYVxuICAgKiAgcmV2aWV3IG9mKSBvbmUgb2YgaXRzIGxpc3RpbmdzIChzZWxmLXByb21vdGlvbikuICovXG4gIFJFVklFV19TRUxGX1BST01PVElPTiA9ICdSRVZJRVdfU0VMRl9QUk9NT1RJT04nLFxuICAvKiogU2VwYXJhdGlvbiBvZiBkdXRpZXM6IHRoZSBjYWxsZXIgbWF5IG5vdCBkZWNpZGUgdGhpcyByZXF1ZXN0IOKAlFxuICAgKiAgaXQgY2FtZSBmcm9tIGFuIG9yZyB0aGV5IGJlbG9uZyB0bywgdGhleSB1cGxvYWRlZCB0aGUgdmVyc2lvbiwgb3IgdGhleVxuICAgKiAgZ2F2ZSB0aGUgZmlyc3Qgb2YgdHdvIGFwcHJvdmFscy4gKi9cbiAgU0VQQVJBVElPTl9PRl9EVVRJRVMgPSAnU0VQQVJBVElPTl9PRl9EVVRJRVMnLFxuICBPUkdfTUlTTUFUQ0ggPSAnT1JHX01JU01BVENIJyxcbiAgQ09NUExJQU5DRV9WSU9MQVRJT04gPSAnQ09NUExJQU5DRV9WSU9MQVRJT04nLFxuXG4gIC8vIE5vdCBmb3VuZCBlcnJvcnMgKDQwNClcbiAgTk9UX0ZPVU5EID0gJ05PVF9GT1VORCcsXG4gIE9SR19OT1RfRk9VTkQgPSAnT1JHX05PVF9GT1VORCcsXG4gIC8qKiBUaGUgZW1haWwgZ2l2ZW4gdG8gXCJhZGQgbWVtYmVyXCIgaGFzIG5vIGFjY291bnQuIERpc3RpbmN0IGZyb20gTk9UX0ZPVU5EXG4gICAqICBiZWNhdXNlIGl0IGlzIEFDVElPTkFCTEU6IHRoZSBjYWxsZXIncyBpbnRlbnQgaXMgc2F0aXNmaWFibGUgYnkgc2VuZGluZyBhblxuICAgKiAgaW52aXRhdGlvbiwgYW5kIGEgYmFyZSA0MDQgbmFtZWQgbm8gd2F5IGZvcndhcmQuICovXG4gIFVTRVJfTk9UX1JFR0lTVEVSRUQgPSAnVVNFUl9OT1RfUkVHSVNURVJFRCcsXG4gIC8qKiBUaGUgYW5vbnltb3VzIHBsdWdpbiBzdWJtaXNzaW9uIEFQSSBpcyBvZmYgb24gdGhpcyBpbnN0YW5jZVxuICAgKiAgKGBBTk9OWU1PVVNfU1VCTUlTU0lPTlNfRU5BQkxFRGAsIG9yIG91dGJvdW5kIGVtYWlsIGlzbid0IGNvbmZpZ3VyZWQpIOKAlFxuICAgKiAgYW5zd2VyZWQgYXMgYSBwbGFpbiA0MDQgKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQpLiAqL1xuICBTVUJNSVNTSU9OU19ESVNBQkxFRCA9ICdTVUJNSVNTSU9OU19ESVNBQkxFRCcsXG5cbiAgLy8gVmFsaWRhdGlvbiBlcnJvcnMgKDQwMClcbiAgVkFMSURBVElPTl9FUlJPUiA9ICdWQUxJREFUSU9OX0VSUk9SJyxcbiAgTUlTU0lOR19SRVFVSVJFRF9GSUVMRCA9ICdNSVNTSU5HX1JFUVVJUkVEX0ZJRUxEJyxcbiAgLyoqIEEgcHJvb2Ytb2Ytd29yayBhbnN3ZXIgaXMgbWlzc2luZywgbWFsZm9ybWVkLCBleHBpcmVkLCB0b28gZWFzeSwgd3JvbmcsXG4gICAqICBvciB3YXMgYWxyZWFkeSB1c2VkIChhbm9ueW1vdXMgc3VibWlzc2lvbnMpLiAqL1xuICBQUk9PRl9PRl9XT1JLX0lOVkFMSUQgPSAnUFJPT0ZfT0ZfV09SS19JTlZBTElEJyxcbiAgVEVNUExBVEVfVU5LTk9XTl9QQVRIID0gJ1RFTVBMQVRFX1VOS05PV05fUEFUSCcsXG4gIFRFTVBMQVRFX0NZQ0xFID0gJ1RFTVBMQVRFX0NZQ0xFJyxcbiAgVEVNUExBVEVfUEFSU0VfRVJST1IgPSAnVEVNUExBVEVfUEFSU0VfRVJST1InLFxuICBURU1QTEFURV9UWVBFX01JU01BVENIID0gJ1RFTVBMQVRFX1RZUEVfTUlTTUFUQ0gnLFxuICBURU1QTEFURV9TRUNSRVRTX1JFU0VSVkVEID0gJ1RFTVBMQVRFX1NFQ1JFVFNfUkVTRVJWRUQnLFxuICBURU1QTEFURV9DT05UUkFDVF9WSU9MQVRJT04gPSAnVEVNUExBVEVfQ09OVFJBQ1RfVklPTEFUSU9OJyxcbiAgVEVNUExBVEVfU0laRV9FWENFRURFRCA9ICdURU1QTEFURV9TSVpFX0VYQ0VFREVEJyxcbiAgVEVNUExBVEVfVkFMSURBVElPTl9GQUlMRUQgPSAnVEVNUExBVEVfVkFMSURBVElPTl9GQUlMRUQnLFxuXG4gIC8vIFF1b3RhL1JhdGUgbGltaXQgZXJyb3JzICg0MjkpXG4gIFFVT1RBX0VYQ0VFREVEID0gJ1FVT1RBX0VYQ0VFREVEJyxcbiAgLyoqIFRoZSBjYWxsZXIncyBwZXItbWVtYmVyIHNoYXJlIG9mIHRoZSBvcmcncyBgYWlDYWxsc2AgKG9yZyBzZXR0aW5nXG4gICAqICBgYWlDYWxsc1Blck1lbWJlclBjdGApIGlzIHNwZW50IGZvciB0aGlzIHBlcmlvZCDigJQgdGhlIG9yZyBpdHNlbGYgbWF5IGhhdmUgaGVhZHJvb20uICovXG4gIEFJX01FTUJFUl9TSEFSRV9FWENFRURFRCA9ICdBSV9NRU1CRVJfU0hBUkVfRVhDRUVERUQnLFxuICAvKiogVGhlIG9yZydzIHBlci1wZXJpb2QgQUkgdG9rZW4gYnVkZ2V0IChvcmcgc2V0dGluZyBgYWlUb2tlbkJ1ZGdldGApIGlzIHNwZW50LiAqL1xuICBBSV9UT0tFTl9CVURHRVRfRVhDRUVERUQgPSAnQUlfVE9LRU5fQlVER0VUX0VYQ0VFREVEJyxcbiAgUkFURV9MSU1JVF9FWENFRURFRCA9ICdSQVRFX0xJTUlUX0VYQ0VFREVEJyxcbiAgLyoqIEFuIGFub255bW91cyBzdWJtaXR0ZXIgKHBlciB2ZXJpZmllZCBlbWFpbCwgb3IgcGVyIGNsaWVudCBJUCkgaXMgYXQgdGhlXG4gICAqICByb2xsaW5nIDI0LWhvdXIgc3VibWlzc2lvbiBjYXAuICovXG4gIFNVQk1JU1NJT05fTElNSVQgPSAnU1VCTUlTU0lPTl9MSU1JVCcsXG5cbiAgLy8gUGF5bG9hZCBlcnJvcnMgKDQxMylcbiAgUEFZTE9BRF9UT09fTEFSR0UgPSAnUEFZTE9BRF9UT09fTEFSR0UnLFxuXG4gIC8vIENvbmZsaWN0IGVycm9ycyAoNDA5KVxuICBDT05GTElDVCA9ICdDT05GTElDVCcsXG4gIERVUExJQ0FURV9FTlRSWSA9ICdEVVBMSUNBVEVfRU5UUlknLFxuICBTQ0FOX0NPTkZMSUNUID0gJ1NDQU5fQ09ORkxJQ1QnLFxuICAvKiogQSBwbHVnaW4gaW1hZ2UncyBjb3NpZ24gc2lnbmF0dXJlIChvciBpdHMgc2lnbmVkIFNCT00gYXR0ZXN0YXRpb24pIGRpZFxuICAgKiAgbm90IHZlcmlmeSBhZ2FpbnN0IHRoZSBwbGF0Zm9ybSdzIHBsdWdpbi1zaWduaW5nIGtleSDigJQgdGhlIHJlZ2lzdHJ5XG4gICAqICBjb250ZW50IG5vIGxvbmdlciBtYXRjaGVzIHdoYXQgdGhlIHBsYXRmb3JtIGJ1aWx0IGFuZCBzaWduZWQuICovXG4gIElNQUdFX1ZFUklGSUNBVElPTl9GQUlMRUQgPSAnSU1BR0VfVkVSSUZJQ0FUSU9OX0ZBSUxFRCcsXG4gIC8qKiBUaGUgcGx1Z2luIHZlcnNpb24gaXMgaW1tdXRhYmxlIOKAlCBhIHB1Ymxpc2ggcmVxdWVzdCByZWZlcmVuY2VzIGl0XG4gICAqICAoYGZyb3plbl9hdGAgc2V0KSBvciBpdCBpcyBwdWJsaXNoZWQgdG8gYSBsaXN0aW5nIOKAlCBzbyBpdCBjYW4gYmUgbmVpdGhlclxuICAgKiAgcmUtdXBsb2FkZWQsIGVkaXRlZCBub3IgZGVsZXRlZCAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCkuICovXG4gIFBMVUdJTl9WRVJTSU9OX0ZST1pFTiA9ICdQTFVHSU5fVkVSU0lPTl9GUk9aRU4nLFxuICAvKiogVGhlIHBsdWdpbiB2ZXJzaW9uIGlzIHJlZmVyZW5jZWQgYnkgb25lIG9mIHRoZSBvcmcncyBwaXBlbGluZXMsIG9yIHB1Ymxpc2hlZFxuICAgKiAgdG8gYW4gZWNvc3lzdGVtIGxpc3Rpbmc7IGRlbGV0aW5nIGl0IG5lZWRzIGA/Zm9yY2U9dHJ1ZWAgcGx1cyBhIHN0ZXAtdXAuICovXG4gIFBMVUdJTl9WRVJTSU9OX0lOX1VTRSA9ICdQTFVHSU5fVkVSU0lPTl9JTl9VU0UnLFxuICAvKiogQSBmcmVlemUgbmFtZWQgYW4gaW1hZ2UgZGlnZXN0IHRoYXQgaXMgbm90IHRoZSB2ZXJzaW9uJ3Mgc3RvcmVkIGRpZ2VzdFxuICAgKiAgKGZhaWwgY2xvc2VkOiB3aGF0IHdhcyByZXF1ZXN0ZWQgaXMgbm90IHdoYXQgd291bGQgYmUgcHVibGlzaGVkKS4gKi9cbiAgUExVR0lOX0RJR0VTVF9NSVNNQVRDSCA9ICdQTFVHSU5fRElHRVNUX01JU01BVENIJyxcbiAgLyoqIEEgcHVibGlzaCByZXF1ZXN0IG5lZWRzIHRoZSBvcmcncyBwdWJsaXNoZXIgcHJvZmlsZSwgd2hpY2ggZG9lc24ndCBleGlzdFxuICAgKiAgeWV0IChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gQ2xhaW0gYSBoYW5kbGUgZmlyc3QuICovXG4gIFBVQkxJU0hFUl9SRVFVSVJFRCA9ICdQVUJMSVNIRVJfUkVRVUlSRUQnLFxuICAvKiogVGhlIHJlcXVlc3RlZCBwdWJsaXNoZXIgaGFuZGxlIGlzIHJlc2VydmVkIChPZmZpY2lhbC9WZXJpZmllZFxuICAgKiAgcmVzZXJ2YXRpb25zLCBjb25mdXNhYmxlcykuIFN1Ym1pdCBhIGBjbGFpbWAgcmVxdWVzdCBpbnN0ZWFkLiAqL1xuICBQVUJMSVNIRVJfSEFORExFX1JFU0VSVkVEID0gJ1BVQkxJU0hFUl9IQU5ETEVfUkVTRVJWRUQnLFxuICAvKiogQSBwdWJsaXNoIHJlcXVlc3QgZmFpbGVkIGEgc3VibWl0IGdhdGUgKHB1YmxpYyB2aXNpYmlsaXR5LCBTUERYIGxpY2Vuc2UsXG4gICAqICBSRUFETUUsIHNpZ25hdHVyZSwgc2NhbiwgdnVsbmVyYWJpbGl0eSBnYXRlIOKApik7IGBkZXRhaWxzLmdhdGVzYCBsaXN0cyB0aGVtLiAqL1xuICBQVUJMSVNIX0dBVEVfRkFJTEVEID0gJ1BVQkxJU0hfR0FURV9GQUlMRUQnLFxuICAvKiogQSBWZXJpZmllZC1wdWJsaXNoZXIgYXBwbGljYXRpb24gKG9yIGl0cyBkZWNpc2lvbikgZnJvbSBhbiBvcmcgd2hvc2UgcGxhblxuICAgKiAgbGFja3MgdGhlIGB2ZXJpZmllZF9wdWJsaXNoZXJgIGZlYXR1cmUgKFRlYW0rLCBkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gKi9cbiAgVkVSSUZJRURfUExBTl9SRVFVSVJFRCA9ICdWRVJJRklFRF9QTEFOX1JFUVVJUkVEJyxcbiAgLyoqIEEgVmVyaWZpZWQtcHVibGlzaGVyIGFwcGxpY2F0aW9uIGZyb20gYW4gb3JnIHdpdGggbm8gRE5TLXZlcmlmaWVkIGRvbWFpbi4gKi9cbiAgVkVSSUZJRURfRE9NQUlOX1JFUVVJUkVEID0gJ1ZFUklGSUVEX0RPTUFJTl9SRVFVSVJFRCcsXG4gIC8qKiBBIFZlcmlmaWVkLXB1Ymxpc2hlciBhcHBsaWNhdGlvbiBmcm9tIGFuIG9yZyB3aG9zZSBvd25lciBoYXMgbm8gc2Vjb25kXG4gICAqICBmYWN0b3IgKHBhc3NrZXkgb3IgYXV0aGVudGljYXRvciBhcHApLiAqL1xuICBWRVJJRklFRF9PV05FUl9NRkFfUkVRVUlSRUQgPSAnVkVSSUZJRURfT1dORVJfTUZBX1JFUVVJUkVEJyxcbiAgLyoqIEEgcGx1Z2luIHJlZmVyZW5jZSBuYW1lcyBhbiBlY29zeXN0ZW0gbGlzdGluZyB0aGUgb3JnIGhhc24ndCBpbnN0YWxsZWQgKG9yXG4gICAqICB3aG9zZSBpbnN0YWxsIGlzIHBlbmRpbmcsIGRlbmllZCwgb3IgZG9lc24ndCBjb3ZlciB0aGUgdmVyc2lvbiBhc2tlZCBmb3I7XG4gICAqICBgZGV0YWlscy5yZWFzb25gKSDigJQgZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCAqL1xuICBQTFVHSU5fTk9UX0lOU1RBTExFRCA9ICdQTFVHSU5fTk9UX0lOU1RBTExFRCcsXG4gIC8qKiBUaGUgb3JnJ3MgY29uc3VtcHRpb24gcG9saWN5IHJlZnVzZXMgdGhlIGxpc3Rpbmc6IGl0cyB0aWVyIGlzbid0IGFsbG93ZWQsXG4gICAqICB0aGUgbGlzdGluZyBpcyBibG9ja2VkLCBvciBhbiBhZHZpc29yeSBibG9ja3MgdGhlIHZlcnNpb24gKGBkZXRhaWxzLnJlYXNvbmApLiAqL1xuICBQTFVHSU5fQkxPQ0tFRF9CWV9QT0xJQ1kgPSAnUExVR0lOX0JMT0NLRURfQllfUE9MSUNZJyxcbiAgLyoqIFRoZSBsaXN0aW5nIG9yIHZlcnNpb24gY2FuJ3QgYmUgdXNlZDogeWFua2VkLCBzdXNwZW5kZWQsIG9yIHBhdXNlZCBmb3IgbmV3XG4gICAqICBpbnN0YWxscyAoYGRldGFpbHMucmVhc29uYCkuICovXG4gIFBMVUdJTl9VTkFWQUlMQUJMRSA9ICdQTFVHSU5fVU5BVkFJTEFCTEUnLFxuICAvKiogQW4gYXV0by1jcmVhdGVkIHBsYWNlaG9sZGVyIHBsdWdpbiBjYW4ndCB0YWtlIHRoZSBuYW1lIG9mIGEgbGlzdGVkIHBsdWdpblxuICAgKiDigJQgaW5zdGFsbCB0aGUgbGlzdGluZyBpbnN0ZWFkLiAqL1xuICBQTFVHSU5fTkFNRV9MSVNURUQgPSAnUExVR0lOX05BTUVfTElTVEVEJyxcbiAgLyoqIEFuIGFub255bW91cyBzdWJtaXNzaW9uIG5hbWVzIGEgY29tbXVuaXR5IGxpc3RpbmcgYW5vdGhlciBzdWJtaXR0ZXIgb3ducyxcbiAgICogIGEgcmVzZXJ2ZWQgbmFtZSwgYW4gT2ZmaWNpYWwvVmVyaWZpZWQgbGlzdGluZydzIG5hbWUsIG9yIG9uZSBjb25mdXNhYmxlXG4gICAqICB3aXRoIGEgdG9wIGxpc3Rpbmc7IGBkZXRhaWxzLnJlYXNvbmAgc2F5cyB3aGljaC4gKi9cbiAgTkFNRV9UQUtFTiA9ICdOQU1FX1RBS0VOJyxcbiAgLyoqIEFuIFVOUVVBTElGSUVEIHJlZmVyZW5jZSBuYW1lcyBhIHBsdWdpbiB0aGUgb3JnIERFTEVURUQ6IHJlZnVzZWQgcmF0aGVyXG4gICAqICB0aGFuIHNpbGVudGx5IGZhbGxpbmcgdGhyb3VnaCB0byBhIHNhbWUtbmFtZWQgbGlzdGluZywgd2hpY2ggd291bGQgc3dhcCB0aGVcbiAgICogIGltYWdlIGEgcGlwZWxpbmUgcnVucyB3aXRob3V0IGFueW9uZSBjaG9vc2luZyBpdCAoYGRldGFpbHMuc3RhdGU6ICdkZWxldGVkJ2ApLiAqL1xuICBQTFVHSU5fREVMRVRFRCA9ICdQTFVHSU5fREVMRVRFRCcsXG5cbiAgLy8gUGx1Z2luIGJ1aWxkIG91dGNvbWVzICg0MjIpIOKAlCB0ZXJtaW5hbCBidWlsZCBmYWlsdXJlcywgcmVwb3J0ZWQgb24gdGhlIGJ1aWxkXG4gIC8vIHN0cmVhbSBhbmQgaW4gdGhlIGJ1aWxkJ3MgZmFpbHVyZSByZWNvcmQsIG5ldmVyIGFuc3dlcmVkIG9uIGEgcmVxdWVzdC5cbiAgLyoqIFRoZSBidWlsdCBpbWFnZSBjb3VsZCBub3QgYmUgdnVsbmVyYWJpbGl0eS1zY2FubmVkIGFmdGVyIGV2ZXJ5IHJldHJ5LCBzb1xuICAgKiAgbm90aGluZyB3YXMgcGVyc2lzdGVkIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gKi9cbiAgSU1BR0VfU0NBTl9VTkFWQUlMQUJMRSA9ICdJTUFHRV9TQ0FOX1VOQVZBSUxBQkxFJyxcbiAgLyoqIFRoZSBidWlsdCBpbWFnZSBoYXMgbW9yZSBmaXhhYmxlIENyaXRpY2FsIGZpbmRpbmdzIHRoYW4gdGhlIHBsYXRmb3JtXG4gICAqICBmbG9vciBgUExVR0lOX1ZVTE5fTUFYX0ZJTkRJTkdTYDsgdGhlIG1lc3NhZ2UgbGlzdHMgdGhlbSB3aXRoIHRoZWlyIGZpeGVzLiAqL1xuICBQTFVHSU5fVlVMTl9HQVRFID0gJ1BMVUdJTl9WVUxOX0dBVEUnLFxuICAvKiogQW4gdXBsb2FkIHdob3NlIE5BTUUgd291bGQgb3ZlcnJpZGUgYSBsaXN0aW5nIG9yIHRoZSBwYXJlbnQgb3JnJ3MgcGx1Z2luLFxuICAgKiAgcmVmdXNlZCBiZWNhdXNlIHRoZSBjb25zdW1wdGlvbiBwb2xpY3kgc2F5cyBgc2hhZG93aW5nOiBkZW55YC4gKi9cbiAgUExVR0lOX05BTUVfU0hBRE9XUyA9ICdQTFVHSU5fTkFNRV9TSEFET1dTJyxcblxuICAvLyBCaWxsaW5nIGVycm9yc1xuICBQQVlNRU5UX01FVEhPRF9SRVFVSVJFRCA9ICdQQVlNRU5UX01FVEhPRF9SRVFVSVJFRCcsIC8vIDQwMlxuICBESVNDT1VOVF9DRUlMSU5HX0VYQ0VFREVEID0gJ0RJU0NPVU5UX0NFSUxJTkdfRVhDRUVERUQnLCAvLyA0MDBcbiAgRElTQ09VTlRfTk9UX0ZPVU5EID0gJ0RJU0NPVU5UX05PVF9GT1VORCcsIC8vIDQwNFxuICBESVNDT1VOVF9JTkFDVElWRSA9ICdESVNDT1VOVF9JTkFDVElWRScsIC8vIDQwOVxuICBQTEFOX09WRVJfQ0FQID0gJ1BMQU5fT1ZFUl9DQVAnLCAvLyA0MDlcbiAgQURET05fT1ZFUl9DQVAgPSAnQURET05fT1ZFUl9DQVAnLCAvLyA0MDlcblxuICAvLyBTZXJ2ZXIgZXJyb3JzICg1MDApXG4gIElOVEVSTkFMX0VSUk9SID0gJ0lOVEVSTkFMX0VSUk9SJyxcbiAgREFUQUJBU0VfRVJST1IgPSAnREFUQUJBU0VfRVJST1InLFxuXG4gIC8vIE5vdCBpbXBsZW1lbnRlZCAoNTAxKSDigJQgdGhlIGNvbmZpZ3VyZWQgcHJvdmlkZXIgaGFzIG5vIHN1Y2ggY2FwYWJpbGl0eVxuICBOT1RfSU1QTEVNRU5URUQgPSAnTk9UX0lNUExFTUVOVEVEJyxcblxuICAvLyBTZXJ2aWNlIHVuYXZhaWxhYmxlICg1MDMpXG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEUgPSAnU0VSVklDRV9VTkFWQUlMQUJMRScsXG4gIENPTVBMSUFOQ0VfU0VSVklDRV9VTkFWQUlMQUJMRSA9ICdDT01QTElBTkNFX1NFUlZJQ0VfVU5BVkFJTEFCTEUnLFxufVxuXG4vKipcbiAqIE1hcHMgZXJyb3IgY29kZXMgdG8gdGhlaXIgZGVmYXVsdCBIVFRQIHN0YXR1cyBjb2Rlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEVycm9yQ29kZVN0YXR1czogUmVjb3JkPEVycm9yQ29kZSwgbnVtYmVyPiA9IHtcbiAgW0Vycm9yQ29kZS5VTkFVVEhPUklaRURdOiA0MDEsXG4gIFtFcnJvckNvZGUuVE9LRU5fRVhQSVJFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5UT0tFTl9JTlZBTElEXTogNDAxLFxuICBbRXJyb3JDb2RlLlRPS0VOX01JU1NJTkddOiA0MDEsXG4gIFtFcnJvckNvZGUuVE9LRU5fUkVWT0tFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5NRkFfUkVRVUlSRURdOiA0MDEsXG4gIFtFcnJvckNvZGUuUkVBVVRIX1JFUVVJUkVEXTogNDAxLFxuICBbRXJyb3JDb2RlLklOU1VGRklDSUVOVF9QRVJNSVNTSU9OU106IDQwMyxcbiAgW0Vycm9yQ29kZS5TWVNURU1fT1JHX1JFUVVJUkVEXTogNDAzLFxuICBbRXJyb3JDb2RlLlBVQkxJU0hFUl9URVJNU19SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QVUJMSVNIRVJfUk9PVF9PUkdfUkVRVUlSRURdOiA0MDMsXG4gIFtFcnJvckNvZGUuUFVCTElTSEVSX1NVU1BFTkRFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fUFVCTElTSElOR19ESVNBQkxFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5BSV9ESVNBQkxFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fUkVWSUVXU19ESVNBQkxFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5SRVZJRVdfU0VMRl9QUk9NT1RJT05dOiA0MDMsXG4gIFtFcnJvckNvZGUuU0VQQVJBVElPTl9PRl9EVVRJRVNdOiA0MDMsXG4gIFtFcnJvckNvZGUuSFVNQU5fU0VTU0lPTl9SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5NRkFfRU5ST0xMTUVOVF9SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5JTVBFUlNPTkFUSU9OX1JFQURfT05MWV06IDQwMyxcbiAgW0Vycm9yQ29kZS5PUkdfTUlTTUFUQ0hdOiA0MDMsXG4gIFtFcnJvckNvZGUuQ09NUExJQU5DRV9WSU9MQVRJT05dOiA0MDMsXG4gIFtFcnJvckNvZGUuTk9UX0ZPVU5EXTogNDA0LFxuICBbRXJyb3JDb2RlLk9SR19OT1RfRk9VTkRdOiA0MDQsXG4gIFtFcnJvckNvZGUuVVNFUl9OT1RfUkVHSVNURVJFRF06IDQwNCxcbiAgW0Vycm9yQ29kZS5TVUJNSVNTSU9OU19ESVNBQkxFRF06IDQwNCxcbiAgW0Vycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SXTogNDAwLFxuICBbRXJyb3JDb2RlLk1JU1NJTkdfUkVRVUlSRURfRklFTERdOiA0MDAsXG4gIFtFcnJvckNvZGUuUFJPT0ZfT0ZfV09SS19JTlZBTElEXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1VOS05PV05fUEFUSF06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9DWUNMRV06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9QQVJTRV9FUlJPUl06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9UWVBFX01JU01BVENIXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1NFQ1JFVFNfUkVTRVJWRURdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfQ09OVFJBQ1RfVklPTEFUSU9OXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1NJWkVfRVhDRUVERURdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfVkFMSURBVElPTl9GQUlMRURdOiA0MDAsXG4gIFtFcnJvckNvZGUuUVVPVEFfRVhDRUVERURdOiA0MjksXG4gIFtFcnJvckNvZGUuQUlfTUVNQkVSX1NIQVJFX0VYQ0VFREVEXTogNDI5LFxuICBbRXJyb3JDb2RlLkFJX1RPS0VOX0JVREdFVF9FWENFRURFRF06IDQyOSxcbiAgW0Vycm9yQ29kZS5SQVRFX0xJTUlUX0VYQ0VFREVEXTogNDI5LFxuICBbRXJyb3JDb2RlLlNVQk1JU1NJT05fTElNSVRdOiA0MjksXG4gIFtFcnJvckNvZGUuUEFZTE9BRF9UT09fTEFSR0VdOiA0MTMsXG4gIFtFcnJvckNvZGUuQ09ORkxJQ1RdOiA0MDksXG4gIFtFcnJvckNvZGUuRFVQTElDQVRFX0VOVFJZXTogNDA5LFxuICBbRXJyb3JDb2RlLlNDQU5fQ09ORkxJQ1RdOiA0MDksXG4gIFtFcnJvckNvZGUuSU1BR0VfVkVSSUZJQ0FUSU9OX0ZBSUxFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fVkVSU0lPTl9GUk9aRU5dOiA0MDksXG4gIFtFcnJvckNvZGUuUExVR0lOX1ZFUlNJT05fSU5fVVNFXTogNDA5LFxuICBbRXJyb3JDb2RlLlBMVUdJTl9ESUdFU1RfTUlTTUFUQ0hdOiA0MDksXG4gIFtFcnJvckNvZGUuUFVCTElTSEVSX1JFUVVJUkVEXTogNDA5LFxuICBbRXJyb3JDb2RlLlBVQkxJU0hFUl9IQU5ETEVfUkVTRVJWRURdOiA0MDksXG4gIFtFcnJvckNvZGUuUFVCTElTSF9HQVRFX0ZBSUxFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5WRVJJRklFRF9QTEFOX1JFUVVJUkVEXTogNDAzLFxuICBbRXJyb3JDb2RlLlZFUklGSUVEX0RPTUFJTl9SRVFVSVJFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5WRVJJRklFRF9PV05FUl9NRkFfUkVRVUlSRURdOiA0MDksXG4gIFtFcnJvckNvZGUuUExVR0lOX05PVF9JTlNUQUxMRURdOiA0MDMsXG4gIFtFcnJvckNvZGUuUExVR0lOX0JMT0NLRURfQllfUE9MSUNZXTogNDAzLFxuICBbRXJyb3JDb2RlLlBMVUdJTl9VTkFWQUlMQUJMRV06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fTkFNRV9MSVNURURdOiA0MDksXG4gIFtFcnJvckNvZGUuTkFNRV9UQUtFTl06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fREVMRVRFRF06IDQxMCxcbiAgW0Vycm9yQ29kZS5JTUFHRV9TQ0FOX1VOQVZBSUxBQkxFXTogNDIyLFxuICBbRXJyb3JDb2RlLlBMVUdJTl9WVUxOX0dBVEVdOiA0MjIsXG4gIFtFcnJvckNvZGUuUExVR0lOX05BTUVfU0hBRE9XU106IDQwOSxcbiAgW0Vycm9yQ29kZS5QQVlNRU5UX01FVEhPRF9SRVFVSVJFRF06IDQwMixcbiAgW0Vycm9yQ29kZS5ESVNDT1VOVF9DRUlMSU5HX0VYQ0VFREVEXTogNDAwLFxuICBbRXJyb3JDb2RlLkRJU0NPVU5UX05PVF9GT1VORF06IDQwNCxcbiAgW0Vycm9yQ29kZS5ESVNDT1VOVF9JTkFDVElWRV06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTEFOX09WRVJfQ0FQXTogNDA5LFxuICBbRXJyb3JDb2RlLkFERE9OX09WRVJfQ0FQXTogNDA5LFxuICBbRXJyb3JDb2RlLklOVEVSTkFMX0VSUk9SXTogNTAwLFxuICBbRXJyb3JDb2RlLkRBVEFCQVNFX0VSUk9SXTogNTAwLFxuICBbRXJyb3JDb2RlLk5PVF9JTVBMRU1FTlRFRF06IDUwMSxcbiAgW0Vycm9yQ29kZS5TRVJWSUNFX1VOQVZBSUxBQkxFXTogNTAzLFxuICBbRXJyb3JDb2RlLkNPTVBMSUFOQ0VfU0VSVklDRV9VTkFWQUlMQUJMRV06IDUwMyxcbn07XG5cbi8qKlxuICogR2V0IHRoZSBIVFRQIHN0YXR1cyBjb2RlIGZvciBhbiBlcnJvciBjb2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdHVzRm9yRXJyb3JDb2RlKGNvZGU6IEVycm9yQ29kZSk6IG51bWJlciB7XG4gIHJldHVybiBFcnJvckNvZGVTdGF0dXNbY29kZV0gPz8gNTAwO1xufVxuIl19
@@ -1,8 +1,78 @@
1
1
  import type { QuotaTier } from './quota-tiers.js';
2
2
  /** Canonical feature flag identifiers. */
3
- export type FeatureFlag = 'priority_support' | 'custom_integrations' | 'ai_generation' | 'bulk_operations' | 'sso' | 'advanced_reporting' | 'team_usage_analytics' | 'compliance_standard' | 'compliance_advanced' | 'stakeholder_reports' | 'verified_publisher';
3
+ export type FeatureFlag = 'custom_integrations' | 'support_standard' | 'support_priority' | 'support_premium' | 'ai_generation' | 'bulk_operations' | 'sso' | 'advanced_reporting' | 'team_usage_analytics' | 'compliance_standard' | 'compliance_advanced' | 'stakeholder_reports' | 'verified_publisher';
4
4
  /** All valid feature flags (order determines display order). */
5
5
  export declare const ALL_FEATURE_FLAGS: readonly FeatureFlag[];
6
+ /**
7
+ * The support-level flags, which are add-on-ONLY at every tier.
8
+ *
9
+ * Needed as its own list because `TIER_FEATURES.enterprise` spreads
10
+ * `ALL_FEATURE_FLAGS`: without excluding these, adding a support flag would
11
+ * silently grant enterprise the support product it is supposed to buy, which is
12
+ * exactly the "included in no tier" decision it would break.
13
+ */
14
+ export declare const SUPPORT_FEATURE_FLAGS: readonly FeatureFlag[];
15
+ /**
16
+ * The FIRST-RESPONSE TARGET sold at each support level — the canonical wording.
17
+ *
18
+ * One place, because this string is a commitment: it is shown on the case, in
19
+ * the add-on catalog, on the pricing page and in the alert that fires when the
20
+ * desk misses it, and those four must never disagree. A level absent from this
21
+ * map has no stated target and callers must omit the phrase rather than borrow
22
+ * another level's promise.
23
+ *
24
+ * WHY THESE UNITS. An earlier ladder read "48 business hours / 24 business
25
+ * hours / no stated number", which was wrong twice over. The business-hours
26
+ * unit flattered the targets by roughly three times — 48 business hours is six
27
+ * working days, so a case raised on a Friday evening had its target expire the
28
+ * *following Monday* — and the top level, the one that costs the most, was the
29
+ * only one with no number at all, so the ladder went blank on the single axis a
30
+ * buyer compares. The targets below are stated in units the customer actually
31
+ * experiences and improve monotonically on one clock: two business days, then
32
+ * one, then eight hours on a clock that does not stop for nights or weekends.
33
+ *
34
+ * Premium's "any day" is the whole of its 24×7 coverage claim, and it is
35
+ * deliberately NOT a severity-dependent one-hour promise. Eight hours is what a
36
+ * rota can be held to: it leaves room for the per-case sweep to page two hours
37
+ * ahead of the deadline (see docs/oncall-paging.md) and for a woken human to
38
+ * read the case and answer it. An hour-scale commitment would spend that margin
39
+ * before anyone picked up the phone.
40
+ */
41
+ export declare const SUPPORT_RESPONSE_TARGETS: Readonly<Record<string, string>>;
42
+ /**
43
+ * Support levels whose contacts may declare `urgent` severity when opening.
44
+ *
45
+ * Premium only, and this is a PRICING decision rather than a permission detail.
46
+ * The tenant chooses severity at open and severity decides which target applies,
47
+ * so a level that can declare `urgent` is a level that can help itself to the
48
+ * fastest response on offer. Admitting it only at premium is what makes the top
49
+ * rung a capability — "you can declare an emergency" — instead of nothing but a
50
+ * faster clock, which is the whole reason the priority-to-premium step is worth
51
+ * its price.
52
+ *
53
+ * Staff re-ranking (`support.case.severity`, system-admin only) stays the escape
54
+ * hatch: a genuine emergency raised on a lower level is OURS to promote, which
55
+ * is the same governance split that keeps the tenant from re-ranking after open.
56
+ */
57
+ export declare const URGENT_SEVERITY_LEVELS: readonly FeatureFlag[];
58
+ /**
59
+ * The severity a case may actually be opened at.
60
+ *
61
+ * Returns the requested severity unchanged, or the highest one the level admits.
62
+ * `urgent` asked for below premium becomes `high` — a DOWNGRADE, never a
63
+ * refusal: declining to send a support message because the sender over-stated
64
+ * its severity would deny support over a label, and the message itself is never
65
+ * the thing being gated. The caller tells the sender it happened.
66
+ *
67
+ * A null `level` means no case is being opened (no entitlement, or the
68
+ * entitlement read was unavailable), and then there is no commitment to protect,
69
+ * so the requested value passes through untouched rather than being demoted for
70
+ * no reason during an outage of ours.
71
+ */
72
+ export declare function admitCaseSeverity(requested: string, level: string | null): {
73
+ severity: string;
74
+ downgraded: boolean;
75
+ };
6
76
  /** Check whether a string is a valid FeatureFlag. */
7
77
  export declare function isValidFeatureFlag(value: string): value is FeatureFlag;
8
78
  /** Features enabled by default for each tier. */
@@ -2,7 +2,6 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  /** All valid feature flags (order determines display order). */
4
4
  export const ALL_FEATURE_FLAGS = [
5
- 'priority_support',
6
5
  'ai_generation',
7
6
  'bulk_operations',
8
7
  'custom_integrations',
@@ -13,7 +12,92 @@ export const ALL_FEATURE_FLAGS = [
13
12
  'compliance_advanced',
14
13
  'stakeholder_reports',
15
14
  'verified_publisher',
15
+ 'support_standard',
16
+ 'support_priority',
17
+ 'support_premium',
16
18
  ];
19
+ /**
20
+ * The support-level flags, which are add-on-ONLY at every tier.
21
+ *
22
+ * Needed as its own list because `TIER_FEATURES.enterprise` spreads
23
+ * `ALL_FEATURE_FLAGS`: without excluding these, adding a support flag would
24
+ * silently grant enterprise the support product it is supposed to buy, which is
25
+ * exactly the "included in no tier" decision it would break.
26
+ */
27
+ export const SUPPORT_FEATURE_FLAGS = [
28
+ 'support_standard',
29
+ 'support_priority',
30
+ 'support_premium',
31
+ ];
32
+ /**
33
+ * The FIRST-RESPONSE TARGET sold at each support level — the canonical wording.
34
+ *
35
+ * One place, because this string is a commitment: it is shown on the case, in
36
+ * the add-on catalog, on the pricing page and in the alert that fires when the
37
+ * desk misses it, and those four must never disagree. A level absent from this
38
+ * map has no stated target and callers must omit the phrase rather than borrow
39
+ * another level's promise.
40
+ *
41
+ * WHY THESE UNITS. An earlier ladder read "48 business hours / 24 business
42
+ * hours / no stated number", which was wrong twice over. The business-hours
43
+ * unit flattered the targets by roughly three times — 48 business hours is six
44
+ * working days, so a case raised on a Friday evening had its target expire the
45
+ * *following Monday* — and the top level, the one that costs the most, was the
46
+ * only one with no number at all, so the ladder went blank on the single axis a
47
+ * buyer compares. The targets below are stated in units the customer actually
48
+ * experiences and improve monotonically on one clock: two business days, then
49
+ * one, then eight hours on a clock that does not stop for nights or weekends.
50
+ *
51
+ * Premium's "any day" is the whole of its 24×7 coverage claim, and it is
52
+ * deliberately NOT a severity-dependent one-hour promise. Eight hours is what a
53
+ * rota can be held to: it leaves room for the per-case sweep to page two hours
54
+ * ahead of the deadline (see docs/oncall-paging.md) and for a woken human to
55
+ * read the case and answer it. An hour-scale commitment would spend that margin
56
+ * before anyone picked up the phone.
57
+ */
58
+ export const SUPPORT_RESPONSE_TARGETS = {
59
+ support_standard: '2 business days',
60
+ support_priority: 'next business day',
61
+ support_premium: '8 hours, any day',
62
+ };
63
+ /**
64
+ * Support levels whose contacts may declare `urgent` severity when opening.
65
+ *
66
+ * Premium only, and this is a PRICING decision rather than a permission detail.
67
+ * The tenant chooses severity at open and severity decides which target applies,
68
+ * so a level that can declare `urgent` is a level that can help itself to the
69
+ * fastest response on offer. Admitting it only at premium is what makes the top
70
+ * rung a capability — "you can declare an emergency" — instead of nothing but a
71
+ * faster clock, which is the whole reason the priority-to-premium step is worth
72
+ * its price.
73
+ *
74
+ * Staff re-ranking (`support.case.severity`, system-admin only) stays the escape
75
+ * hatch: a genuine emergency raised on a lower level is OURS to promote, which
76
+ * is the same governance split that keeps the tenant from re-ranking after open.
77
+ */
78
+ export const URGENT_SEVERITY_LEVELS = ['support_premium'];
79
+ /**
80
+ * The severity a case may actually be opened at.
81
+ *
82
+ * Returns the requested severity unchanged, or the highest one the level admits.
83
+ * `urgent` asked for below premium becomes `high` — a DOWNGRADE, never a
84
+ * refusal: declining to send a support message because the sender over-stated
85
+ * its severity would deny support over a label, and the message itself is never
86
+ * the thing being gated. The caller tells the sender it happened.
87
+ *
88
+ * A null `level` means no case is being opened (no entitlement, or the
89
+ * entitlement read was unavailable), and then there is no commitment to protect,
90
+ * so the requested value passes through untouched rather than being demoted for
91
+ * no reason during an outage of ours.
92
+ */
93
+ export function admitCaseSeverity(requested, level) {
94
+ if (requested !== 'urgent' || level === null)
95
+ return { severity: requested, downgraded: false };
96
+ if (URGENT_SEVERITY_LEVELS.includes(level)) {
97
+ return { severity: requested, downgraded: false };
98
+ }
99
+ return { severity: 'high', downgraded: true };
100
+ }
17
101
  /** Check whether a string is a valid FeatureFlag. */
18
102
  export function isValidFeatureFlag(value) {
19
103
  return ALL_FEATURE_FLAGS.includes(value);
@@ -21,31 +105,55 @@ export function isValidFeatureFlag(value) {
21
105
  // Tier-to-feature mapping
22
106
  /** Features enabled by default for each tier. */
23
107
  export const TIER_FEATURES = {
24
- developer: [],
25
- pro: ['priority_support', 'ai_generation', 'bulk_operations'],
108
+ // Developer gets `ai_generation` as a TRIAL: the tier's 20 `aiCalls` per
109
+ // period (QUOTA_TIERS.developer) is the trial's cap, so the AI surfaces are
110
+ // usable — not just previewed — before an upgrade. A BYOK key spends no slot.
111
+ developer: ['ai_generation'],
112
+ pro: ['ai_generation', 'bulk_operations'],
26
113
  // Team adds sso (SSO/IdP is INCLUDED in Team, not an add-on). advanced_reporting
27
114
  // (DORA) is NOT a Team tier feature — it's INCLUDED only in Enterprise and sold
28
115
  // as an add-on bundle to every other tier (see billing-config
29
116
  // `advanced_reporting`). Enterprise unlocks all.
30
117
  // `verified_publisher` (eligibility to apply for Verified) starts at Team.
31
- team: ['priority_support', 'ai_generation', 'bulk_operations', 'sso', 'verified_publisher'],
118
+ team: ['ai_generation', 'bulk_operations', 'sso', 'verified_publisher'],
32
119
  // Business is Team plus advanced_reporting (DORA): the analytics surface is
33
120
  // what a 8-seat org is usually buying, and bundling it is most of why the tier
34
121
  // is worth $249 over Team + the add-on. Enterprise keeps custom_integrations,
35
122
  // team_usage_analytics, the compliance libraries and stakeholder_reports as
36
123
  // its own differentiators.
37
- business: ['priority_support', 'ai_generation', 'bulk_operations', 'sso', 'verified_publisher', 'advanced_reporting'],
38
- enterprise: [...ALL_FEATURE_FLAGS],
124
+ business: ['ai_generation', 'bulk_operations', 'sso', 'verified_publisher', 'advanced_reporting'],
125
+ // Enterprise is an EXPLICIT list, deliberately not `[...ALL_FEATURE_FLAGS]`.
126
+ //
127
+ // Spreading every flag here is how a new paid add-on silently becomes an
128
+ // Enterprise inclusion: adding `support_premium` to the catalog would have
129
+ // granted enterprise the 24×7 support it is supposed to BUY, with nothing
130
+ // failing. Listing the flags forces the question "does Enterprise include
131
+ // this?" to be answered per flag, which is the decision this record exists to
132
+ // carry. A filter expression would do the same job but cannot be read by the
133
+ // source-parsing parity tests (`frontend/test/feature-gate-upsell.test.ts`
134
+ // extracts an array literal), so an explicit list it is.
135
+ //
136
+ // Support is absent on purpose: it is an add-on at EVERY tier, included in none.
137
+ enterprise: [
138
+ 'ai_generation',
139
+ 'bulk_operations',
140
+ 'custom_integrations',
141
+ 'sso',
142
+ 'advanced_reporting',
143
+ 'team_usage_analytics',
144
+ 'compliance_standard',
145
+ 'compliance_advanced',
146
+ 'stakeholder_reports',
147
+ 'verified_publisher',
148
+ ],
39
149
  // Unlimited includes every feature / add-on bundle (billing-disabled default).
150
+ // Support included here on purpose: `unlimited` is the billing-OFF tier, where
151
+ // nothing is purchasable, and its `supportContacts` limit is -1 to match.
40
152
  unlimited: [...ALL_FEATURE_FLAGS],
41
153
  };
42
154
  // Feature metadata (for display)
43
155
  /** Human-readable metadata for each feature flag. */
44
156
  export const FEATURE_METADATA = {
45
- priority_support: {
46
- label: 'Priority Support',
47
- description: 'Faster response times and dedicated support channels',
48
- },
49
157
  ai_generation: {
50
158
  label: 'AI Generation',
51
159
  description: 'AI-powered pipeline and plugin generation',
@@ -82,6 +190,18 @@ export const FEATURE_METADATA = {
82
190
  label: 'Stakeholder Reports',
83
191
  description: 'Scheduled team reports for managers — snapshots, review and publish, PDF/email delivery and share links',
84
192
  },
193
+ support_standard: {
194
+ label: 'Standard Support',
195
+ description: `Support cases with a first response within ${SUPPORT_RESPONSE_TARGETS.support_standard}, business hours`,
196
+ },
197
+ support_priority: {
198
+ label: 'Priority Support',
199
+ description: `Support cases with a first response by the ${SUPPORT_RESPONSE_TARGETS.support_priority}, business hours`,
200
+ },
201
+ support_premium: {
202
+ label: 'Premium Support',
203
+ description: `24×7 support cases — first response within ${SUPPORT_RESPONSE_TARGETS.support_premium} of the week, and the only level that may declare urgent severity`,
204
+ },
85
205
  verified_publisher: {
86
206
  label: 'Verified Publisher Eligibility',
87
207
  description: 'Apply for the Verified badge on your plugin-ecosystem publisher (awarded by system-org review)',
@@ -165,4 +285,4 @@ export function complianceFeatureForTags(tags) {
165
285
  }
166
286
  return null;
167
287
  }
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1mbGFncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9mZWF0dXJlLWZsYWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUE2Q3RDLGdFQUFnRTtBQUNoRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBMkI7SUFDdkQsa0JBQWtCO0lBQ2xCLGVBQWU7SUFDZixpQkFBaUI7SUFDakIscUJBQXFCO0lBQ3JCLEtBQUs7SUFDTCxvQkFBb0I7SUFDcEIsc0JBQXNCO0lBQ3RCLHFCQUFxQjtJQUNyQixxQkFBcUI7SUFDckIscUJBQXFCO0lBQ3JCLG9CQUFvQjtDQUNyQixDQUFDO0FBRUYscURBQXFEO0FBQ3JELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFhO0lBQzlDLE9BQVEsaUJBQXVDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRCwwQkFBMEI7QUFFMUIsaURBQWlEO0FBQ2pELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBOEM7SUFDdEUsU0FBUyxFQUFFLEVBQUU7SUFDYixHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLENBQUM7SUFDN0QsaUZBQWlGO0lBQ2pGLGdGQUFnRjtJQUNoRiw4REFBOEQ7SUFDOUQsaURBQWlEO0lBQ2pELDJFQUEyRTtJQUMzRSxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixDQUFDO0lBQzNGLDRFQUE0RTtJQUM1RSwrRUFBK0U7SUFDL0UsOEVBQThFO0lBQzlFLDRFQUE0RTtJQUM1RSwyQkFBMkI7SUFDM0IsUUFBUSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsQ0FBQztJQUNySCxVQUFVLEVBQUUsQ0FBQyxH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QyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRztJQUNyQyxRQUFRLEVBQUUscUJBQXFCO0lBQy9CLFFBQVEsRUFBRSxxQkFBcUI7Q0FDZSxDQUFDO0FBSWpELHdEQUF3RDtBQUN4RCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUEyQixDQUFDO0FBRXRHLHlFQUF5RTtBQUN6RSxNQUFNLFVBQVUseUJBQXlCLENBQUMsUUFBMkI7SUFDbkUsT0FBTyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xHLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUFDLElBQWE7SUFDcEQsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDMUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsdUJBQXVCLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQUUsT0FBTyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB0eXBlIHsgUXVvdGFUaWVyIH0gZnJvbSAnLi9xdW90YS10aWVycy5qcyc7XG5cbi8vIEZlYXR1cmUgZmxhZyBpZGVudGlmaWVyc1xuXG4vKiogQ2Fub25pY2FsIGZlYXR1cmUgZmxhZyBpZGVudGlmaWVycy4gKi9cbmV4cG9ydCB0eXBlIEZlYXR1cmVGbGFnID1cbiAgLy8gYHByaW9yaXR5X3N1cHBvcnRgIGFuZCBgY3VzdG9tX2ludGVncmF0aW9uc2AgYXJlIEVOVEVSUFJJU0UtRVhDTFVTSVZFXG4gIC8vIG1hcmtldGluZy9lbnRpdGxlbWVudCBmbGFnczogZ3JhbnRlZCBvbmx5IGJ5IHRoZSBlbnRlcnByaXNlIHRpZXIgKG5vIGFkZC1vblxuICAvLyBidW5kbGUgc2VsbHMgdGhlbSB0byBhIGxvd2VyIHRpZXIg4oCUIGludGVudGlvbmFsLCB0aGV5IGFuY2hvciB0aGUgRW50ZXJwcmlzZVxuICAvLyBwbGFuKSBhbmQgbm90IGN1cnJlbnRseSBgcmVxdWlyZUZlYXR1cmVgLWdhdGVkIG9uIGFueSByb3V0ZSAodGhleSBzdXJmYWNlIGluXG4gIC8vIHBsYW4gbWFya2V0aW5nICsgdGhlIGVudGl0bGVtZW50IHNldDsgZW5mb3JjZW1lbnQgaXMgYSBmdXR1cmUgaG9vaykuIFRoaXMgaXNcbiAgLy8gYnkgZGVzaWduLCBub3QgZGVhZCBjb2RlIOKAlCBkbyBub3QgXCJmaXhcIiBieSB3aXJpbmcgYSBidW5kbGUgd2l0aG91dCBhIHByaWNpbmdcbiAgLy8gZGVjaXNpb24uIENvbnRyYXN0IGBzc29gL2BhZHZhbmNlZF9yZXBvcnRpbmdgLCB3aGljaCBBUkUgc29sZCBhc1xuICAvLyBhZGQtb24gYnVuZGxlcyBhbmQgZ2F0ZWQgKHNlZSBiaWxsaW5nLWNvbmZpZyBgbG9hZEJ1bmRsZXNgICsgYHJlcXVpcmVGZWF0dXJlYCkuXG4gIHwgJ3ByaW9yaXR5X3N1cHBvcnQnXG4gIHwgJ2N1c3RvbV9pbnRlZ3JhdGlvbnMnXG4gIHwgJ2FpX2dlbmVyYXRpb24nXG4gIHwgJ2J1bGtfb3BlcmF0aW9ucydcbiAgfCAnc3NvJ1xuICAvLyBET1JBIC8gYWR2YW5jZWQgZGVsaXZlcnkgYW5hbHl0aWNzIChwYWlkIHRpZXJzIG9ubHkpLlxuICB8ICdhZHZhbmNlZF9yZXBvcnRpbmcnXG4gIC8vIFBlci10ZWFtIHVzYWdlIGJyZWFrZG93biBhY3Jvc3MgdGhlIG9yZ+KGknRlYW0gc3VidHJlZS4gSU5DTFVERUQgaW4gRW50ZXJwcmlzZTtcbiAgLy8gc29sZCBhcyBhbiBhZGQtb24gYnVuZGxlIHRvIFByby9UZWFtIChzZWUgYmlsbGluZy1jb25maWcgYHRlYW1fdXNhZ2VfYW5hbHl0aWNzYCkuXG4gIHwgJ3RlYW1fdXNhZ2VfYW5hbHl0aWNzJ1xuICAvLyBDdXJhdGVkIGNvbXBsaWFuY2UgcnVsZSBsaWJyYXJpZXMgc29sZCBhcyBhZGQtb24gYnVuZGxlcy4gYGNvbXBsaWFuY2Vfc3RhbmRhcmRgXG4gIC8vID0gQ0kvQ0QgYmVzdC1wcmFjdGljZSBzZXQ7IGBjb21wbGlhbmNlX2FkdmFuY2VkYCA9IFNPQzIvUENJL0NJUyBmcmFtZXdvcmtcbiAgLy8gbGlicmFyaWVzIChyZXF1aXJlcyBTdGFuZGFyZCkuIFRoZXNlIGdhdGUgU1VCU0NSSUJJTkcgdG8gdGhlIHNldCdzIHN5c3RlbS1vcmdcbiAgLy8gcHVibGlzaGVkIHJ1bGVzOyBJTkNMVURFRCBpbiBFbnRlcnByaXNlL1VubGltaXRlZCAodmlhIEFMTF9GRUFUVVJFX0ZMQUdTKSxcbiAgLy8gc29sZCB0byBEZXZlbG9wZXIvUHJvL1RlYW0gKHNlZSBiaWxsaW5nLWNvbmZpZyBgY29tcGxpYW5jZV9zdGFuZGFyZC9hZHZhbmNlZGApLlxuICB8ICdjb21wbGlhbmNlX3N0YW5kYXJkJ1xuICB8ICdjb21wbGlhbmNlX2FkdmFuY2VkJ1xuICAvLyBTY2hlZHVsZWQsIG1hbmFnZXItZmFjaW5nIHJlcG9ydHM6IHNhdmVkIGRlZmluaXRpb25zLCBmcm96ZW4gc25hcHNob3RzLFxuICAvLyByZXZpZXctYW5kLXB1Ymxpc2gsIFBERi9lbWFpbCBkZWxpdmVyeSBhbmQgc2hhcmUgbGlua3MuIElOQ0xVREVEIGluXG4gIC8vIEVudGVycHJpc2UvVW5saW1pdGVkOyBzb2xkIGFzIGFuIGFkZC1vbiBidW5kbGUgdG8gUHJvL1RlYW0gKHNlZVxuICAvLyBiaWxsaW5nLWNvbmZpZyBgc3Rha2Vob2xkZXJfcmVwb3J0c2ApLiBPbi1kZW1hbmQgZGFzaGJvYXJkcyBzdGF5IEZSRUUgdW5kZXJcbiAgLy8gYHJlcG9ydHM6cmVhZGAg4oCUIHRoaXMgZ2F0ZXMgc2F2aW5nLCBzY2hlZHVsaW5nIGFuZCBwdWJsaXNoaW5nLCBub3QgbG9va2luZy5cbiAgfCAnc3Rha2Vob2xkZXJfcmVwb3J0cydcbiAgLy8gUGx1Z2luIGVjb3N5c3RlbTogdGhlIG9yZydzIHB1Ymxpc2hlciBpcyBFTElHSUJMRSB0byBhcHBseSBmb3IgVmVyaWZpZWRcbiAgLy8gc3RhdHVzIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gRWxpZ2liaWxpdHkgb25seSDigJQgdGhlIGJhZGdlXG4gIC8vIGlzIGF3YXJkZWQgKGFuZCB3aXRoZHJhd24pIGJ5IHN5c3RlbS1vcmcgcmV2aWV3LCBuZXZlciBib3VnaHQuIFRlYW0gYW5kIHVwO1xuICAvLyBubyBhZGQtb24gYnVuZGxlIHNlbGxzIGl0LlxuICB8ICd2ZXJpZmllZF9wdWJsaXNoZXInO1xuXG4vKiogQWxsIHZhbGlkIGZlYXR1cmUgZmxhZ3MgKG9yZGVyIGRldGVybWluZXMgZGlzcGxheSBvcmRlcikuICovXG5leHBvcnQgY29uc3QgQUxMX0ZFQVRVUkVfRkxBR1M6IHJlYWRvbmx5IEZlYXR1cmVGbGFnW10gPSBbXG4gICdwcmlvcml0eV9zdXBwb3J0JyxcbiAgJ2FpX2dlbmVyYXRpb24nLFxuICAnYnVsa19vcGVyYXRpb25zJyxcbiAgJ2N1c3RvbV9pbnRlZ3JhdGlvbnMnLFxuICAnc3NvJyxcbiAgJ2FkdmFuY2VkX3JlcG9ydGluZycsXG4gICd0ZWFtX3VzYWdlX2FuYWx5dGljcycsXG4gICdjb21wbGlhbmNlX3N0YW5kYXJkJyxcbiAgJ2NvbXBsaWFuY2VfYWR2YW5jZWQnLFxuICAnc3Rha2Vob2xkZXJfcmVwb3J0cycsXG4gICd2ZXJpZmllZF9wdWJsaXNoZXInLFxuXTtcblxuLyoqIENoZWNrIHdoZXRoZXIgYSBzdHJpbmcgaXMgYSB2YWxpZCBGZWF0dXJlRmxhZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkRmVhdHVyZUZsYWcodmFsdWU6IHN0cmluZyk6IHZhbHVlIGlzIEZlYXR1cmVGbGFnIHtcbiAgcmV0dXJuIChBTExfRkVBVFVSRV9GTEFHUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModmFsdWUpO1xufVxuXG4vLyBUaWVyLXRvLWZlYXR1cmUgbWFwcGluZ1xuXG4vKiogRmVhdHVyZXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvciBlYWNoIHRpZXIuICovXG5leHBvcnQgY29uc3QgVElFUl9GRUFUVVJFUzogUmVjb3JkPFF1b3RhVGllciwgcmVhZG9ubHkgRmVhdHVyZUZsYWdbXT4gPSB7XG4gIGRldmVsb3BlcjogW10sXG4gIHBybzogWydwcmlvcml0eV9zdXBwb3J0JywgJ2FpX2dlbmVyYXRpb24nLCAnYnVsa19vcGVyYXRpb25zJ10sXG4gIC8vIFRlYW0gYWRkcyBzc28gKFNTTy9JZFAgaXMgSU5DTFVERUQgaW4gVGVhbSwgbm90IGFuIGFkZC1vbikuIGFkdmFuY2VkX3JlcG9ydGluZ1xuICAvLyAoRE9SQSkgaXMgTk9UIGEgVGVhbSB0aWVyIGZlYXR1cmUg4oCUIGl0J3MgSU5DTFVERUQgb25seSBpbiBFbnRlcnByaXNlIGFuZCBzb2xkXG4gIC8vIGFzIGFuIGFkZC1vbiBidW5kbGUgdG8gZXZlcnkgb3RoZXIgdGllciAoc2VlIGJpbGxpbmctY29uZmlnXG4gIC8vIGBhZHZhbmNlZF9yZXBvcnRpbmdgKS4gRW50ZXJwcmlzZSB1bmxvY2tzIGFsbC5cbiAgLy8gYHZlcmlmaWVkX3B1Ymxpc2hlcmAgKGVsaWdpYmlsaXR5IHRvIGFwcGx5IGZvciBWZXJpZmllZCkgc3RhcnRzIGF0IFRlYW0uXG4gIHRlYW06IFsncHJpb3JpdHlfc3VwcG9ydCcsICdhaV9nZW5lcmF0aW9uJywgJ2J1bGtfb3BlcmF0aW9ucycsICdzc28nLCAndmVyaWZpZWRfcHVibGlzaGVyJ10sXG4gIC8vIEJ1c2luZXNzIGlzIFRlYW0gcGx1cyBhZHZhbmNlZF9yZXBvcnRpbmcgKERPUkEpOiB0aGUgYW5hbHl0aWNzIHN1cmZhY2UgaXNcbiAgLy8gd2hhdCBhIDgtc2VhdCBvcmcgaXMgdXN1YWxseSBidXlpbmcsIGFuZCBidW5kbGluZyBpdCBpcyBtb3N0IG9mIHdoeSB0aGUgdGllclxuICAvLyBpcyB3b3J0aCAkMjQ5IG92ZXIgVGVhbSArIHRoZSBhZGQtb24uIEVudGVycHJpc2Uga2VlcHMgY3VzdG9tX2ludGVncmF0aW9ucyxcbiAgLy8gdGVhbV91c2FnZV9hbmFseXRpY3MsIHRoZSBjb21wbGlhbmNlIGxpYnJhcmllcyBhbmQgc3Rha2Vob2xkZXJfcmVwb3J0cyBhc1xuICAvLyBpdHMgb3duIGRpZmZlcmVudGlhdG9ycy5cbiAgYnVzaW5lc3M6IFsncHJpb3JpdHlfc3VwcG9ydCcsICdhaV9nZW5lcmF0aW9uJywgJ2J1bGtfb3BlcmF0aW9ucycsICdzc28nLCAndmVyaWZpZWRfcHVibGlzaGVyJywgJ2FkdmFuY2VkX3JlcG9ydGluZyddLFxuICBlbnRlcnByaXNlOiBbLi4uQUxMX0ZFQVRVUkVfRkxBR1NdLFxuICAvLyBVbmxpbWl0ZWQgaW5jbHVkZXMgZXZlcnkgZmVhdHVyZSAvIGFkZC1vbiBidW5kbGUgKGJpbGxpbmctZGlzYWJsZWQgZGVmYXVsdCkuXG4gIHVubGltaXRlZDogWy4uLkFMTF9GRUFUVVJFX0ZMQUdTXSxcbn07XG5cbi8vIEZlYXR1cmUgbWV0YWRhdGEgKGZvciBkaXNwbGF5KVxuXG4vKiogSHVtYW4tcmVhZGFibGUgbWV0YWRhdGEgZm9yIGVhY2ggZmVhdHVyZSBmbGFnLiAqL1xuZXhwb3J0IGNvbnN0IEZFQVRVUkVfTUVUQURBVEE6IFJlY29yZDxGZWF0dXJlRmxhZywgeyBsYWJlbDogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nIH0+ID0ge1xuICBwcmlvcml0eV9zdXBwb3J0OiB7XG4gICAgbGFiZWw6ICdQcmlvcml0eSBTdXBwb3J0JyxcbiAgICBkZXNjcmlwdGlvbjogJ0Zhc3RlciByZXNwb25zZSB0aW1lcyBhbmQgZGVkaWNhdGVkIHN1cHBvcnQgY2hhbm5lbHMnLFxuICB9LFxuICBhaV9nZW5lcmF0aW9uOiB7XG4gICAgbGFiZWw6ICdBSSBHZW5lcmF0aW9uJyxcbiAgICBkZXNjcmlwdGlvbjogJ0FJLXBvd2VyZWQgcGlwZWxpbmUgYW5kIHBsdWdpbiBnZW5lcmF0aW9uJyxcbiAgfSxcbiAgYnVsa19vcGVyYXRpb25zOiB7XG4gICAgbGFiZWw6ICdCdWxrIE9wZXJhdGlvbnMnLFxuICAgIGRlc2NyaXB0aW9uOiAnQmF0Y2ggY3JlYXRlLCB1cGRhdGUsIGFuZCBkZWxldGUgZm9yIHBpcGVsaW5lcyBhbmQgcGx1Z2lucycsXG4gIH0sXG4gIGN1c3RvbV9pbnRlZ3JhdGlvbnM6IHtcbiAgICBsYWJlbDogJ0N1c3RvbSBJbnRlZ3JhdGlvbnMnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ29ubmVjdCB0byBleHRlcm5hbCBzZXJ2aWNlcyBhbmQgY3VzdG9tIHdlYmhvb2sgZW5kcG9pbnRzJyxcbiAgfSxcbiAgc3NvOiB7XG4gICAgbGFiZWw6ICdTU08gLyBJZFAnLFxuICAgIGRlc2NyaXB0aW9uOiAnU2luZ2xlIHNpZ24tb24gYW5kIGV4dGVybmFsIGlkZW50aXR5LXByb3ZpZGVyIGNvbmZpZ3VyYXRpb25zJyxcbiAgfSxcbiAgYWR2YW5jZWRfcmVwb3J0aW5nOiB7XG4gICAgbGFiZWw6ICdBZHZhbmNlZCBSZXBvcnRpbmcnLFxuICAgIGRlc2NyaXB0aW9uOiAnRE9SQSAvIGFkdmFuY2VkIGRlbGl2ZXJ5IGFuYWx5dGljcycsXG4gIH0sXG4gIHRlYW1fdXNhZ2VfYW5hbHl0aWNzOiB7XG4gICAgbGFiZWw6ICdUZWFtIFVzYWdlIEFuYWx5dGljcycsXG4gICAgZGVzY3JpcHRpb246ICdQZXItdGVhbSB1c2FnZSBicmVha2Rvd24gYWNyb3NzIHRoZSBvcmcg4oaSIHRlYW0gc3VidHJlZScsXG4gIH0sXG4gIGNvbXBsaWFuY2Vfc3RhbmRhcmQ6IHtcbiAgICBsYWJlbDogJ1N0YW5kYXJkIENvbXBsaWFuY2UnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ3VyYXRlZCBDSS9DRCBiZXN0LXByYWN0aWNlIGNvbXBsaWFuY2UgcnVsZSBsaWJyYXJ5JyxcbiAgfSxcbiAgY29tcGxpYW5jZV9hZHZhbmNlZDoge1xuICAgIGxhYmVsOiAnQWR2YW5jZWQgQ29tcGxpYW5jZScsXG4gICAgZGVzY3JpcHRpb246ICdDdXJhdGVkIGZyYW1ld29yayBjb21wbGlhbmNlIGxpYnJhcmllcyAoU09DMiAvIFBDSS1EU1MgLyBDSVMpJyxcbiAgfSxcbiAgc3Rha2Vob2xkZXJfcmVwb3J0czoge1xuICAgIGxhYmVsOiAnU3Rha2Vob2xkZXIgUmVwb3J0cycsXG4gICAgZGVzY3JpcHRpb246ICdTY2hlZHVsZWQgdGVhbSByZXBvcnRzIGZvciBtYW5hZ2VycyDigJQgc25hcHNob3RzLCByZXZpZXcgYW5kIHB1Ymxpc2gsIFBERi9lbWFpbCBkZWxpdmVyeSBhbmQgc2hhcmUgbGlua3MnLFxuICB9LFxuICB2ZXJpZmllZF9wdWJsaXNoZXI6IHtcbiAgICBsYWJlbDogJ1ZlcmlmaWVkIFB1Ymxpc2hlciBFbGlnaWJpbGl0eScsXG4gICAgZGVzY3JpcHRpb246ICdBcHBseSBmb3IgdGhlIFZlcmlmaWVkIGJhZGdlIG9uIHlvdXIgcGx1Z2luLWVjb3N5c3RlbSBwdWJsaXNoZXIgKGF3YXJkZWQgYnkgc3lzdGVtLW9yZyByZXZpZXcpJyxcbiAgfSxcbn07XG5cbi8vIFJlc29sdXRpb24gbG9naWNcblxuLyoqXG4gKiBSZXNvbHZlIGEgdXNlcidzIGVmZmVjdGl2ZSBmZWF0dXJlIHNldC5cbiAqXG4gKiAxLiBTeXNhZG1pbnMgKGlzU3VwZXJBZG1pbikgYWx3YXlzIGdldCBBTEwgZmVhdHVyZXMuXG4gKiAyLiBTdGFydCB3aXRoIHRoZSB0aWVyJ3MgZGVmYXVsdCBmZWF0dXJlcy5cbiAqIDMuIEFwcGx5IHBlci11c2VyIG92ZXJyaWRlczogYHRydWVgIGFkZHMgYSBmZWF0dXJlLCBgZmFsc2VgIHJlbW92ZXMgaXQuXG4gKiA0LiBJbnZhbGlkIG92ZXJyaWRlIGtleXMgYXJlIHNpbGVudGx5IGlnbm9yZWQuXG4gKlxuICogQHBhcmFtIHRpZXIgLSBUaGUgb3JnYW5pemF0aW9uJ3MgcXVvdGEgdGllclxuICogQHBhcmFtIG9wdHMgLSBSZXNvbHV0aW9uIG9wdGlvbnM6XG4gKiAgIC0gYG92ZXJyaWRlc2A6IHBlci11c2VyIG92ZXJyaWRlcyAoa2V5ID0gZmVhdHVyZSBmbGFnLCB2YWx1ZSA9IGVuYWJsZWQpXG4gKiAgIC0gYGlzU3VwZXJBZG1pbmA6IHdoZXRoZXIgdGhlIHVzZXIgaGFzIHRoZSBnbG9iYWwgc3VwZXItYWRtaW4gZmxhZ1xuICogICAtIGBhY2NvdW50RmVhdHVyZXNgOiBhY2NvdW50LWxldmVsIGVudGl0bGVtZW50cyAoZS5nLiBwdXJjaGFzZWQgYWRkLW9uXG4gKiAgICAgYnVuZGxlcykuIEEgTkFNRUQgZmllbGQgc28gaXQgY2FuIG5ldmVyIGJlIHNpbGVudGx5IGRyb3BwZWQgYnkgYSBjYWxsZXJcbiAqICAgICB0aGF0IG9taXRzIGEgdHJhaWxpbmcgcG9zaXRpb25hbCBhcmcuXG4gKiBAcmV0dXJucyBTb3J0ZWQgYXJyYXkgb2YgZW5hYmxlZCBmZWF0dXJlIGZsYWdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVXNlckZlYXR1cmVzKFxuICB0aWVyOiBRdW90YVRpZXIsXG4gIG9wdHM/OiB7XG4gICAgb3ZlcnJpZGVzPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gfCBudWxsO1xuICAgIGlzU3VwZXJBZG1pbj86IGJvb2xlYW47XG4gICAgYWNjb3VudEZlYXR1cmVzPzogcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsO1xuICB9LFxuKTogRmVhdHVyZUZsYWdbXSB7XG4gIGNvbnN0IHsgb3ZlcnJpZGVzOiBmZWF0dXJlT3ZlcnJpZGVzLCBpc1N1cGVyQWRtaW4sIGFjY291bnRGZWF0dXJlcyB9ID0gb3B0cyA/PyB7fTtcblxuICAvLyBTeXNhZG1pbnMgZ2V0IGV2ZXJ5dGhpbmcgcmVnYXJkbGVzcyBvZiB0aWVyLlxuICBpZiAoaXNTdXBlckFkbWluKSByZXR1cm4gWy4uLkFMTF9GRUFUVVJFX0ZMQUdTXTtcblxuICAvLyBTdGFydCB3aXRoIHRpZXIgZGVmYXVsdHNcbiAgY29uc3QgZmVhdHVyZXMgPSBuZXcgU2V0PEZlYXR1cmVGbGFnPihUSUVSX0ZFQVRVUkVTW3RpZXJdID8/IFtdKTtcblxuICAvLyBBY2NvdW50LWxldmVsIGVudGl0bGVtZW50cyAocHVyY2hhc2VkIGZlYXR1cmUgYnVuZGxlcyDigJQgZS5nLiBhdWRpdF9sb2csIHNzbyxcbiAgLy8gYWR2YW5jZWRfcmVwb3J0aW5nLCB0ZWFtX3VzYWdlX2FuYWx5dGljcywgY29tcGxpYW5jZV9zdGFuZGFyZC9hZHZhbmNlZCkuXG4gIC8vIEFwcGxpZWQgYmVmb3JlIHBlci11c2VyIG92ZXJyaWRlcyBzbyBhbiBleHBsaWNpdCB1c2VyIG92ZXJyaWRlIHN0aWxsIHdpbnMuXG4gIGlmIChhY2NvdW50RmVhdHVyZXMpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBhY2NvdW50RmVhdHVyZXMpIHtcbiAgICAgIGlmIChpc1ZhbGlkRmVhdHVyZUZsYWcoa2V5KSkgZmVhdHVyZXMuYWRkKGtleSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQXBwbHkgcGVyLXVzZXIgb3ZlcnJpZGVzXG4gIGlmIChmZWF0dXJlT3ZlcnJpZGVzKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCBlbmFibGVkXSBvZiBPYmplY3QuZW50cmllcyhmZWF0dXJlT3ZlcnJpZGVzKSkge1xuICAgICAgaWYgKCFpc1ZhbGlkRmVhdHVyZUZsYWcoa2V5KSkgY29udGludWU7XG4gICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICBmZWF0dXJlcy5hZGQoa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZlYXR1cmVzLmRlbGV0ZShrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybiBpbiBjYW5vbmljYWwgb3JkZXJcbiAgcmV0dXJuIEFMTF9GRUFUVVJFX0ZMQUdTLmZpbHRlcihmID0+IGZlYXR1cmVzLmhhcyhmKSk7XG59XG5cbi8qKlxuICogQ3VyYXRlZCBjb21wbGlhbmNlIGNvbnRlbnQgc2V0cyBhbmQgdGhlIGZlYXR1cmUgZmxhZyBlYWNoIG9uZSBpcyBzb2xkIHVuZGVyLlxuICogQSBzZXQgYHhgIGlzIHRoZSBwdWJsaXNoZWQgcnVsZXMgdGFnZ2VkIGBzZXQ6PHg+YDsgYW4gb3JnIGhvbGRpbmcgdGhlIGZsYWcgaXNcbiAqIGVudGl0bGVkIHRvIHRoZW0uIE9yZGVyZWQgZnJvbSB0aGUgbG93ZXN0IGVudGl0bGVtZW50IHRvIHRoZSBoaWdoZXN0LlxuICovXG5leHBvcnQgY29uc3QgQ09NUExJQU5DRV9TRVRfRkVBVFVSRVMgPSB7XG4gIHN0YW5kYXJkOiAnY29tcGxpYW5jZV9zdGFuZGFyZCcsXG4gIGFkdmFuY2VkOiAnY29tcGxpYW5jZV9hZHZhbmNlZCcsXG59IGFzIGNvbnN0IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBGZWF0dXJlRmxhZz47XG5cbmV4cG9ydCB0eXBlIENvbXBsaWFuY2VDb250ZW50U2V0ID0ga2V5b2YgdHlwZW9mIENPTVBMSUFOQ0VfU0VUX0ZFQVRVUkVTO1xuXG4vKiogRXZlcnkgY3VyYXRlZCBzZXQgbmFtZSwgbG93ZXN0IGVudGl0bGVtZW50IGZpcnN0LiAqL1xuZXhwb3J0IGNvbnN0IENPTVBMSUFOQ0VfQ09OVEVOVF9TRVRTID0gT2JqZWN0LmtleXMoQ09NUExJQU5DRV9TRVRfRkVBVFVSRVMpIGFzIENvbXBsaWFuY2VDb250ZW50U2V0W107XG5cbi8qKiBUaGUgY3VyYXRlZCBzZXRzIGFuIGVmZmVjdGl2ZSBmZWF0dXJlIHNldCBlbnRpdGxlcyAoc3RhYmxlIG9yZGVyKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGlhbmNlU2V0c0ZvckZlYXR1cmVzKGZlYXR1cmVzOiByZWFkb25seSBzdHJpbmdbXSk6IENvbXBsaWFuY2VDb250ZW50U2V0W10ge1xuICByZXR1cm4gQ09NUExJQU5DRV9DT05URU5UX1NFVFMuZmlsdGVyKChzZXQpID0+IGZlYXR1cmVzLmluY2x1ZGVzKENPTVBMSUFOQ0VfU0VUX0ZFQVRVUkVTW3NldF0pKTtcbn1cblxuLyoqXG4gKiBUaGUgZmVhdHVyZSBhIHB1Ymxpc2hlZCBydWxlJ3MgYHNldDo8eD5gIHRhZ3MgcmVxdWlyZSwgb3IgYG51bGxgIGZvciBhblxuICogdW50YWdnZWQgKGJhc2VsaW5lKSBydWxlLiBUaGUgaGlnaGVzdCBlbnRpdGxlbWVudCB3aW5zIHdoZW4gYSBydWxlIGNhcnJpZXNcbiAqIHNldmVyYWwuIEFjY2VwdHMgYSByYXcganNvbmIgYHRhZ3NgIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGxpYW5jZUZlYXR1cmVGb3JUYWdzKHRhZ3M6IHVua25vd24pOiBGZWF0dXJlRmxhZyB8IG51bGwge1xuICBjb25zdCB0ID0gQXJyYXkuaXNBcnJheSh0YWdzKSA/IHRhZ3MgOiBbXTtcbiAgZm9yIChjb25zdCBzZXQgb2YgWy4uLkNPTVBMSUFOQ0VfQ09OVEVOVF9TRVRTXS5yZXZlcnNlKCkpIHtcbiAgICBpZiAodC5pbmNsdWRlcyhgc2V0OiR7c2V0fWApKSByZXR1cm4gQ09NUExJQU5DRV9TRVRfRkVBVFVSRVNbc2V0XTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbiJdfQ==
288
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1mbGFncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9mZWF0dXJlLWZsYWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFxRHRDLGdFQUFnRTtBQUNoRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBMkI7SUFDdkQsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixxQkFBcUI7SUFDckIsS0FBSztJQUNMLG9CQUFvQjtJQUNwQixzQkFBc0I7SUFDdEIscUJBQXFCO0lBQ3JCLHFCQUFxQjtJQUNyQixxQkFBcUI7SUFDckIsb0JBQW9CO0lBQ3BCLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsaUJBQWlCO0NBQ2xCLENBQUM7QUFFRjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQTJCO0lBQzNELGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsaUJBQWlCO0NBQ2xCLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFxQztJQUN4RSxnQkFBZ0IsRUFBRSxpQkFBaUI7SUFDbkMsZ0JBQWdCLEVBQUUsbUJBQW1CO0lBQ3JDLGVBQWUsRUFBRSxrQkFBa0I7Q0FDcEMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQTJCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUVsRjs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixTQUFpQixFQUNqQixLQUFvQjtJQUVwQixJQUFJLFNBQVMsS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUk7UUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDaEcsSUFBSyxzQkFBNEMsQ0FBQyxR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SUFDMUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsdUJBQXVCLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQUUsT0FBTyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB0eXBlIHsgUXVvdGFUaWVyIH0gZnJvbSAnLi9xdW90YS10aWVycy5qcyc7XG5cbi8vIEZlYXR1cmUgZmxhZyBpZGVudGlmaWVyc1xuXG4vKiogQ2Fub25pY2FsIGZlYXR1cmUgZmxhZyBpZGVudGlmaWVycy4gKi9cbmV4cG9ydCB0eXBlIEZlYXR1cmVGbGFnID1cbiAgLy8gYGN1c3RvbV9pbnRlZ3JhdGlvbnNgIGlzIGFuIEVOVEVSUFJJU0UtRVhDTFVTSVZFIG1hcmtldGluZy9lbnRpdGxlbWVudCBmbGFnOlxuICAvLyBncmFudGVkIG9ubHkgYnkgdGhlIGVudGVycHJpc2UgdGllciAobm8gYWRkLW9uIGJ1bmRsZSBzZWxscyBpdCB0byBhIGxvd2VyXG4gIC8vIHRpZXIg4oCUIGludGVudGlvbmFsLCBpdCBhbmNob3JzIHRoZSBFbnRlcnByaXNlIHBsYW4pIGFuZCBub3QgY3VycmVudGx5XG4gIC8vIGByZXF1aXJlRmVhdHVyZWAtZ2F0ZWQgb24gYW55IHJvdXRlLiBUaGlzIGlzIGJ5IGRlc2lnbiwgbm90IGRlYWQgY29kZSDigJQgZG9cbiAgLy8gbm90IFwiZml4XCIgYnkgd2lyaW5nIGEgYnVuZGxlIHdpdGhvdXQgYSBwcmljaW5nIGRlY2lzaW9uLiBDb250cmFzdFxuICAvLyBgc3NvYC9gYWR2YW5jZWRfcmVwb3J0aW5nYCwgd2hpY2ggQVJFIHNvbGQgYXMgYWRkLW9uIGJ1bmRsZXMgYW5kIGdhdGVkIChzZWVcbiAgLy8gYmlsbGluZy1jb25maWcgYGxvYWRCdW5kbGVzYCArIGByZXF1aXJlRmVhdHVyZWApLlxuICB8ICdjdXN0b21faW50ZWdyYXRpb25zJ1xuICAvLyBTdXBwb3J0IGxldmVsLCBvbmUgcGVyIHJlc3BvbnNlLXRpbWUgcnVuZy4gU29sZCBPTkxZIGFzIHBlci1jb250YWN0IGFkZC1vblxuICAvLyBidW5kbGVzIChgc3VwcG9ydF9zdGFuZGFyZGAgLyBgc3VwcG9ydF9wcmlvcml0eWAgLyBgc3VwcG9ydF9wcmVtaXVtYCkgYW5kXG4gIC8vIGluY2x1ZGVkIGluIE5PIHRpZXIg4oCUIG5vdCBldmVuIGVudGVycHJpc2UsIHdoaWNoIGlzIHdoeSBgVElFUl9GRUFUVVJFU2BcbiAgLy8gY2Fubm90IHNpbXBseSBzcHJlYWQgYEFMTF9GRUFUVVJFX0ZMQUdTYCBmb3IgaXQgYW55IG1vcmUuIFRoZXNlIFJFUExBQ0UgdGhlXG4gIC8vIGZvcm1lciBgcHJpb3JpdHlfc3VwcG9ydGAgdGllciBwZXJrLCB3aGljaCBtYXJrZXRlZCBcImZhc3RlciByZXNwb25zZSB0aW1lc1wiXG4gIC8vIHdoaWxlIG5vIHN1cHBvcnQgcHJvZHVjdCBleGlzdGVkIHRvIGJlIGZhc3Rlci4gTXV0dWFsbHkgZXhjbHVzaXZlOiBhblxuICAvLyBhY2NvdW50IGhvbGRzIGF0IG1vc3Qgb25lIChlbmZvcmNlZCBpbiBgZWZmZWN0aXZlRW50aXRsZW1lbnRzYCkuXG4gIHwgJ3N1cHBvcnRfc3RhbmRhcmQnXG4gIHwgJ3N1cHBvcnRfcHJpb3JpdHknXG4gIHwgJ3N1cHBvcnRfcHJlbWl1bSdcbiAgfCAnYWlfZ2VuZXJhdGlvbidcbiAgfCAnYnVsa19vcGVyYXRpb25zJ1xuICB8ICdzc28nXG4gIC8vIERPUkEgLyBhZHZhbmNlZCBkZWxpdmVyeSBhbmFseXRpY3MgKHBhaWQgdGllcnMgb25seSkuXG4gIHwgJ2FkdmFuY2VkX3JlcG9ydGluZydcbiAgLy8gUGVyLXRlYW0gdXNhZ2UgYnJlYWtkb3duIGFjcm9zcyB0aGUgb3Jn4oaSdGVhbSBzdWJ0cmVlLiBJTkNMVURFRCBpbiBFbnRlcnByaXNlO1xuICAvLyBzb2xkIGFzIGFuIGFkZC1vbiBidW5kbGUgdG8gUHJvL1RlYW0gKHNlZSBiaWxsaW5nLWNvbmZpZyBgdGVhbV91c2FnZV9hbmFseXRpY3NgKS5cbiAgfCAndGVhbV91c2FnZV9hbmFseXRpY3MnXG4gIC8vIEN1cmF0ZWQgY29tcGxpYW5jZSBydWxlIGxpYnJhcmllcyBzb2xkIGFzIGFkZC1vbiBidW5kbGVzLiBgY29tcGxpYW5jZV9zdGFuZGFyZGBcbiAgLy8gPSBDSS9DRCBiZXN0LXByYWN0aWNlIHNldDsgYGNvbXBsaWFuY2VfYWR2YW5jZWRgID0gU09DMi9QQ0kvQ0lTIGZyYW1ld29ya1xuICAvLyBsaWJyYXJpZXMgKHJlcXVpcmVzIFN0YW5kYXJkKS4gVGhlc2UgZ2F0ZSBTVUJTQ1JJQklORyB0byB0aGUgc2V0J3Mgc3lzdGVtLW9yZ1xuICAvLyBwdWJsaXNoZWQgcnVsZXM7IElOQ0xVREVEIGluIEVudGVycHJpc2UvVW5saW1pdGVkICh2aWEgQUxMX0ZFQVRVUkVfRkxBR1MpLFxuICAvLyBzb2xkIHRvIERldmVsb3Blci9Qcm8vVGVhbSAoc2VlIGJpbGxpbmctY29uZmlnIGBjb21wbGlhbmNlX3N0YW5kYXJkL2FkdmFuY2VkYCkuXG4gIHwgJ2NvbXBsaWFuY2Vfc3RhbmRhcmQnXG4gIHwgJ2NvbXBsaWFuY2VfYWR2YW5jZWQnXG4gIC8vIFNjaGVkdWxlZCwgbWFuYWdlci1mYWNpbmcgcmVwb3J0czogc2F2ZWQgZGVmaW5pdGlvbnMsIGZyb3plbiBzbmFwc2hvdHMsXG4gIC8vIHJldmlldy1hbmQtcHVibGlzaCwgUERGL2VtYWlsIGRlbGl2ZXJ5IGFuZCBzaGFyZSBsaW5rcy4gSU5DTFVERUQgaW5cbiAgLy8gRW50ZXJwcmlzZS9VbmxpbWl0ZWQ7IHNvbGQgYXMgYW4gYWRkLW9uIGJ1bmRsZSB0byBQcm8vVGVhbSAoc2VlXG4gIC8vIGJpbGxpbmctY29uZmlnIGBzdGFrZWhvbGRlcl9yZXBvcnRzYCkuIE9uLWRlbWFuZCBkYXNoYm9hcmRzIHN0YXkgRlJFRSB1bmRlclxuICAvLyBgcmVwb3J0czpyZWFkYCDigJQgdGhpcyBnYXRlcyBzYXZpbmcsIHNjaGVkdWxpbmcgYW5kIHB1Ymxpc2hpbmcsIG5vdCBsb29raW5nLlxuICB8ICdzdGFrZWhvbGRlcl9yZXBvcnRzJ1xuICAvLyBQbHVnaW4gZWNvc3lzdGVtOiB0aGUgb3JnJ3MgcHVibGlzaGVyIGlzIEVMSUdJQkxFIHRvIGFwcGx5IGZvciBWZXJpZmllZFxuICAvLyBzdGF0dXMgKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQpLiBFbGlnaWJpbGl0eSBvbmx5IOKAlCB0aGUgYmFkZ2VcbiAgLy8gaXMgYXdhcmRlZCAoYW5kIHdpdGhkcmF3bikgYnkgc3lzdGVtLW9yZyByZXZpZXcsIG5ldmVyIGJvdWdodC4gVGVhbSBhbmQgdXA7XG4gIC8vIG5vIGFkZC1vbiBidW5kbGUgc2VsbHMgaXQuXG4gIHwgJ3ZlcmlmaWVkX3B1Ymxpc2hlcic7XG5cbi8qKiBBbGwgdmFsaWQgZmVhdHVyZSBmbGFncyAob3JkZXIgZGV0ZXJtaW5lcyBkaXNwbGF5IG9yZGVyKS4gKi9cbmV4cG9ydCBjb25zdCBBTExfRkVBVFVSRV9GTEFHUzogcmVhZG9ubHkgRmVhdHVyZUZsYWdbXSA9IFtcbiAgJ2FpX2dlbmVyYXRpb24nLFxuICAnYnVsa19vcGVyYXRpb25zJyxcbiAgJ2N1c3RvbV9pbnRlZ3JhdGlvbnMnLFxuICAnc3NvJyxcbiAgJ2FkdmFuY2VkX3JlcG9ydGluZycsXG4gICd0ZWFtX3VzYWdlX2FuYWx5dGljcycsXG4gICdjb21wbGlhbmNlX3N0YW5kYXJkJyxcbiAgJ2NvbXBsaWFuY2VfYWR2YW5jZWQnLFxuICAnc3Rha2Vob2xkZXJfcmVwb3J0cycsXG4gICd2ZXJpZmllZF9wdWJsaXNoZXInLFxuICAnc3VwcG9ydF9zdGFuZGFyZCcsXG4gICdzdXBwb3J0X3ByaW9yaXR5JyxcbiAgJ3N1cHBvcnRfcHJlbWl1bScsXG5dO1xuXG4vKipcbiAqIFRoZSBzdXBwb3J0LWxldmVsIGZsYWdzLCB3aGljaCBhcmUgYWRkLW9uLU9OTFkgYXQgZXZlcnkgdGllci5cbiAqXG4gKiBOZWVkZWQgYXMgaXRzIG93biBsaXN0IGJlY2F1c2UgYFRJRVJfRkVBVFVSRVMuZW50ZXJwcmlzZWAgc3ByZWFkc1xuICogYEFMTF9GRUFUVVJFX0ZMQUdTYDogd2l0aG91dCBleGNsdWRpbmcgdGhlc2UsIGFkZGluZyBhIHN1cHBvcnQgZmxhZyB3b3VsZFxuICogc2lsZW50bHkgZ3JhbnQgZW50ZXJwcmlzZSB0aGUgc3VwcG9ydCBwcm9kdWN0IGl0IGlzIHN1cHBvc2VkIHRvIGJ1eSwgd2hpY2ggaXNcbiAqIGV4YWN0bHkgdGhlIFwiaW5jbHVkZWQgaW4gbm8gdGllclwiIGRlY2lzaW9uIGl0IHdvdWxkIGJyZWFrLlxuICovXG5leHBvcnQgY29uc3QgU1VQUE9SVF9GRUFUVVJFX0ZMQUdTOiByZWFkb25seSBGZWF0dXJlRmxhZ1tdID0gW1xuICAnc3VwcG9ydF9zdGFuZGFyZCcsXG4gICdzdXBwb3J0X3ByaW9yaXR5JyxcbiAgJ3N1cHBvcnRfcHJlbWl1bScsXG5dO1xuXG4vKipcbiAqIFRoZSBGSVJTVC1SRVNQT05TRSBUQVJHRVQgc29sZCBhdCBlYWNoIHN1cHBvcnQgbGV2ZWwg4oCUIHRoZSBjYW5vbmljYWwgd29yZGluZy5cbiAqXG4gKiBPbmUgcGxhY2UsIGJlY2F1c2UgdGhpcyBzdHJpbmcgaXMgYSBjb21taXRtZW50OiBpdCBpcyBzaG93biBvbiB0aGUgY2FzZSwgaW5cbiAqIHRoZSBhZGQtb24gY2F0YWxvZywgb24gdGhlIHByaWNpbmcgcGFnZSBhbmQgaW4gdGhlIGFsZXJ0IHRoYXQgZmlyZXMgd2hlbiB0aGVcbiAqIGRlc2sgbWlzc2VzIGl0LCBhbmQgdGhvc2UgZm91ciBtdXN0IG5ldmVyIGRpc2FncmVlLiBBIGxldmVsIGFic2VudCBmcm9tIHRoaXNcbiAqIG1hcCBoYXMgbm8gc3RhdGVkIHRhcmdldCBhbmQgY2FsbGVycyBtdXN0IG9taXQgdGhlIHBocmFzZSByYXRoZXIgdGhhbiBib3Jyb3dcbiAqIGFub3RoZXIgbGV2ZWwncyBwcm9taXNlLlxuICpcbiAqIFdIWSBUSEVTRSBVTklUUy4gQW4gZWFybGllciBsYWRkZXIgcmVhZCBcIjQ4IGJ1c2luZXNzIGhvdXJzIC8gMjQgYnVzaW5lc3NcbiAqIGhvdXJzIC8gbm8gc3RhdGVkIG51bWJlclwiLCB3aGljaCB3YXMgd3JvbmcgdHdpY2Ugb3Zlci4gVGhlIGJ1c2luZXNzLWhvdXJzXG4gKiB1bml0IGZsYXR0ZXJlZCB0aGUgdGFyZ2V0cyBieSByb3VnaGx5IHRocmVlIHRpbWVzIOKAlCA0OCBidXNpbmVzcyBob3VycyBpcyBzaXhcbiAqIHdvcmtpbmcgZGF5cywgc28gYSBjYXNlIHJhaXNlZCBvbiBhIEZyaWRheSBldmVuaW5nIGhhZCBpdHMgdGFyZ2V0IGV4cGlyZSB0aGVcbiAqICpmb2xsb3dpbmcgTW9uZGF5KiDigJQgYW5kIHRoZSB0b3AgbGV2ZWwsIHRoZSBvbmUgdGhhdCBjb3N0cyB0aGUgbW9zdCwgd2FzIHRoZVxuICogb25seSBvbmUgd2l0aCBubyBudW1iZXIgYXQgYWxsLCBzbyB0aGUgbGFkZGVyIHdlbnQgYmxhbmsgb24gdGhlIHNpbmdsZSBheGlzIGFcbiAqIGJ1eWVyIGNvbXBhcmVzLiBUaGUgdGFyZ2V0cyBiZWxvdyBhcmUgc3RhdGVkIGluIHVuaXRzIHRoZSBjdXN0b21lciBhY3R1YWxseVxuICogZXhwZXJpZW5jZXMgYW5kIGltcHJvdmUgbW9ub3RvbmljYWxseSBvbiBvbmUgY2xvY2s6IHR3byBidXNpbmVzcyBkYXlzLCB0aGVuXG4gKiBvbmUsIHRoZW4gZWlnaHQgaG91cnMgb24gYSBjbG9jayB0aGF0IGRvZXMgbm90IHN0b3AgZm9yIG5pZ2h0cyBvciB3ZWVrZW5kcy5cbiAqXG4gKiBQcmVtaXVtJ3MgXCJhbnkgZGF5XCIgaXMgdGhlIHdob2xlIG9mIGl0cyAyNMOXNyBjb3ZlcmFnZSBjbGFpbSwgYW5kIGl0IGlzXG4gKiBkZWxpYmVyYXRlbHkgTk9UIGEgc2V2ZXJpdHktZGVwZW5kZW50IG9uZS1ob3VyIHByb21pc2UuIEVpZ2h0IGhvdXJzIGlzIHdoYXQgYVxuICogcm90YSBjYW4gYmUgaGVsZCB0bzogaXQgbGVhdmVzIHJvb20gZm9yIHRoZSBwZXItY2FzZSBzd2VlcCB0byBwYWdlIHR3byBob3Vyc1xuICogYWhlYWQgb2YgdGhlIGRlYWRsaW5lIChzZWUgZG9jcy9vbmNhbGwtcGFnaW5nLm1kKSBhbmQgZm9yIGEgd29rZW4gaHVtYW4gdG9cbiAqIHJlYWQgdGhlIGNhc2UgYW5kIGFuc3dlciBpdC4gQW4gaG91ci1zY2FsZSBjb21taXRtZW50IHdvdWxkIHNwZW5kIHRoYXQgbWFyZ2luXG4gKiBiZWZvcmUgYW55b25lIHBpY2tlZCB1cCB0aGUgcGhvbmUuXG4gKi9cbmV4cG9ydCBjb25zdCBTVVBQT1JUX1JFU1BPTlNFX1RBUkdFVFM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0ge1xuICBzdXBwb3J0X3N0YW5kYXJkOiAnMiBidXNpbmVzcyBkYXlzJyxcbiAgc3VwcG9ydF9wcmlvcml0eTogJ25leHQgYnVzaW5lc3MgZGF5JyxcbiAgc3VwcG9ydF9wcmVtaXVtOiAnOCBob3VycywgYW55IGRheScsXG59O1xuXG4vKipcbiAqIFN1cHBvcnQgbGV2ZWxzIHdob3NlIGNvbnRhY3RzIG1heSBkZWNsYXJlIGB1cmdlbnRgIHNldmVyaXR5IHdoZW4gb3BlbmluZy5cbiAqXG4gKiBQcmVtaXVtIG9ubHksIGFuZCB0aGlzIGlzIGEgUFJJQ0lORyBkZWNpc2lvbiByYXRoZXIgdGhhbiBhIHBlcm1pc3Npb24gZGV0YWlsLlxuICogVGhlIHRlbmFudCBjaG9vc2VzIHNldmVyaXR5IGF0IG9wZW4gYW5kIHNldmVyaXR5IGRlY2lkZXMgd2hpY2ggdGFyZ2V0IGFwcGxpZXMsXG4gKiBzbyBhIGxldmVsIHRoYXQgY2FuIGRlY2xhcmUgYHVyZ2VudGAgaXMgYSBsZXZlbCB0aGF0IGNhbiBoZWxwIGl0c2VsZiB0byB0aGVcbiAqIGZhc3Rlc3QgcmVzcG9uc2Ugb24gb2ZmZXIuIEFkbWl0dGluZyBpdCBvbmx5IGF0IHByZW1pdW0gaXMgd2hhdCBtYWtlcyB0aGUgdG9wXG4gKiBydW5nIGEgY2FwYWJpbGl0eSDigJQgXCJ5b3UgY2FuIGRlY2xhcmUgYW4gZW1lcmdlbmN5XCIg4oCUIGluc3RlYWQgb2Ygbm90aGluZyBidXQgYVxuICogZmFzdGVyIGNsb2NrLCB3aGljaCBpcyB0aGUgd2hvbGUgcmVhc29uIHRoZSBwcmlvcml0eS10by1wcmVtaXVtIHN0ZXAgaXMgd29ydGhcbiAqIGl0cyBwcmljZS5cbiAqXG4gKiBTdGFmZiByZS1yYW5raW5nIChgc3VwcG9ydC5jYXNlLnNldmVyaXR5YCwgc3lzdGVtLWFkbWluIG9ubHkpIHN0YXlzIHRoZSBlc2NhcGVcbiAqIGhhdGNoOiBhIGdlbnVpbmUgZW1lcmdlbmN5IHJhaXNlZCBvbiBhIGxvd2VyIGxldmVsIGlzIE9VUlMgdG8gcHJvbW90ZSwgd2hpY2hcbiAqIGlzIHRoZSBzYW1lIGdvdmVybmFuY2Ugc3BsaXQgdGhhdCBrZWVwcyB0aGUgdGVuYW50IGZyb20gcmUtcmFua2luZyBhZnRlciBvcGVuLlxuICovXG5leHBvcnQgY29uc3QgVVJHRU5UX1NFVkVSSVRZX0xFVkVMUzogcmVhZG9ubHkgRmVhdHVyZUZsYWdbXSA9IFsnc3VwcG9ydF9wcmVtaXVtJ107XG5cbi8qKlxuICogVGhlIHNldmVyaXR5IGEgY2FzZSBtYXkgYWN0dWFsbHkgYmUgb3BlbmVkIGF0LlxuICpcbiAqIFJldHVybnMgdGhlIHJlcXVlc3RlZCBzZXZlcml0eSB1bmNoYW5nZWQsIG9yIHRoZSBoaWdoZXN0IG9uZSB0aGUgbGV2ZWwgYWRtaXRzLlxuICogYHVyZ2VudGAgYXNrZWQgZm9yIGJlbG93IHByZW1pdW0gYmVjb21lcyBgaGlnaGAg4oCUIGEgRE9XTkdSQURFLCBuZXZlciBhXG4gKiByZWZ1c2FsOiBkZWNsaW5pbmcgdG8gc2VuZCBhIHN1cHBvcnQgbWVzc2FnZSBiZWNhdXNlIHRoZSBzZW5kZXIgb3Zlci1zdGF0ZWRcbiAqIGl0cyBzZXZlcml0eSB3b3VsZCBkZW55IHN1cHBvcnQgb3ZlciBhIGxhYmVsLCBhbmQgdGhlIG1lc3NhZ2UgaXRzZWxmIGlzIG5ldmVyXG4gKiB0aGUgdGhpbmcgYmVpbmcgZ2F0ZWQuIFRoZSBjYWxsZXIgdGVsbHMgdGhlIHNlbmRlciBpdCBoYXBwZW5lZC5cbiAqXG4gKiBBIG51bGwgYGxldmVsYCBtZWFucyBubyBjYXNlIGlzIGJlaW5nIG9wZW5lZCAobm8gZW50aXRsZW1lbnQsIG9yIHRoZVxuICogZW50aXRsZW1lbnQgcmVhZCB3YXMgdW5hdmFpbGFibGUpLCBhbmQgdGhlbiB0aGVyZSBpcyBubyBjb21taXRtZW50IHRvIHByb3RlY3QsXG4gKiBzbyB0aGUgcmVxdWVzdGVkIHZhbHVlIHBhc3NlcyB0aHJvdWdoIHVudG91Y2hlZCByYXRoZXIgdGhhbiBiZWluZyBkZW1vdGVkIGZvclxuICogbm8gcmVhc29uIGR1cmluZyBhbiBvdXRhZ2Ugb2Ygb3Vycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkbWl0Q2FzZVNldmVyaXR5KFxuICByZXF1ZXN0ZWQ6IHN0cmluZyxcbiAgbGV2ZWw6IHN0cmluZyB8IG51bGwsXG4pOiB7IHNldmVyaXR5OiBzdHJpbmc7IGRvd25ncmFkZWQ6IGJvb2xlYW4gfSB7XG4gIGlmIChyZXF1ZXN0ZWQgIT09ICd1cmdlbnQnIHx8IGxldmVsID09PSBudWxsKSByZXR1cm4geyBzZXZlcml0eTogcmVxdWVzdGVkLCBkb3duZ3JhZGVkOiBmYWxzZSB9O1xuICBpZiAoKFVSR0VOVF9TRVZFUklUWV9MRVZFTFMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKGxldmVsKSkge1xuICAgIHJldHVybiB7IHNldmVyaXR5OiByZXF1ZXN0ZWQsIGRvd25ncmFkZWQ6IGZhbHNlIH07XG4gIH1cbiAgcmV0dXJuIHsgc2V2ZXJpdHk6ICdoaWdoJywgZG93bmdyYWRlZDogdHJ1ZSB9O1xufVxuXG4vKiogQ2hlY2sgd2hldGhlciBhIHN0cmluZyBpcyBhIHZhbGlkIEZlYXR1cmVGbGFnLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRGZWF0dXJlRmxhZyh2YWx1ZTogc3RyaW5nKTogdmFsdWUgaXMgRmVhdHVyZUZsYWcge1xuICByZXR1cm4gKEFMTF9GRUFUVVJFX0ZMQUdTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyh2YWx1ZSk7XG59XG5cbi8vIFRpZXItdG8tZmVhdHVyZSBtYXBwaW5nXG5cbi8qKiBGZWF0dXJlcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yIGVhY2ggdGllci4gKi9cbmV4cG9ydCBjb25zdCBUSUVSX0ZFQVRVUkVTOiBSZWNvcmQ8UXVvdGFUaWVyLCByZWFkb25seSBGZWF0dXJlRmxhZ1tdPiA9IHtcbiAgLy8gRGV2ZWxvcGVyIGdldHMgYGFpX2dlbmVyYXRpb25gIGFzIGEgVFJJQUw6IHRoZSB0aWVyJ3MgMjAgYGFpQ2FsbHNgIHBlclxuICAvLyBwZXJpb2QgKFFVT1RBX1RJRVJTLmRldmVsb3BlcikgaXMgdGhlIHRyaWFsJ3MgY2FwLCBzbyB0aGUgQUkgc3VyZmFjZXMgYXJlXG4gIC8vIHVzYWJsZSDigJQgbm90IGp1c3QgcHJldmlld2VkIOKAlCBiZWZvcmUgYW4gdXBncmFkZS4gQSBCWU9LIGtleSBzcGVuZHMgbm8gc2xvdC5cbiAgZGV2ZWxvcGVyOiBbJ2FpX2dlbmVyYXRpb24nXSxcbiAgcHJvOiBbJ2FpX2dlbmVyYXRpb24nLCAnYnVsa19vcGVyYXRpb25zJ10sXG4gIC8vIFRlYW0gYWRkcyBzc28gKFNTTy9JZFAgaXMgSU5DTFVERUQgaW4gVGVhbSwgbm90IGFuIGFkZC1vbikuIGFkdmFuY2VkX3JlcG9ydGluZ1xuICAvLyAoRE9SQSkgaXMgTk9UIGEgVGVhbSB0aWVyIGZlYXR1cmUg4oCUIGl0J3MgSU5DTFVERUQgb25seSBpbiBFbnRlcnByaXNlIGFuZCBzb2xkXG4gIC8vIGFzIGFuIGFkZC1vbiBidW5kbGUgdG8gZXZlcnkgb3RoZXIgdGllciAoc2VlIGJpbGxpbmctY29uZmlnXG4gIC8vIGBhZHZhbmNlZF9yZXBvcnRpbmdgKS4gRW50ZXJwcmlzZSB1bmxvY2tzIGFsbC5cbiAgLy8gYHZlcmlmaWVkX3B1Ymxpc2hlcmAgKGVsaWdpYmlsaXR5IHRvIGFwcGx5IGZvciBWZXJpZmllZCkgc3RhcnRzIGF0IFRlYW0uXG4gIHRlYW06IFsnYWlfZ2VuZXJhdGlvbicsICdidWxrX29wZXJhdGlvbnMnLCAnc3NvJywgJ3ZlcmlmaWVkX3B1Ymxpc2hlciddLFxuICAvLyBCdXNpbmVzcyBpcyBUZWFtIHBsdXMgYWR2YW5jZWRfcmVwb3J0aW5nIChET1JBKTogdGhlIGFuYWx5dGljcyBzdXJmYWNlIGlzXG4gIC8vIHdoYXQgYSA4LXNlYXQgb3JnIGlzIHVzdWFsbHkgYnV5aW5nLCBhbmQgYnVuZGxpbmcgaXQgaXMgbW9zdCBvZiB3aHkgdGhlIHRpZXJcbiAgLy8gaXMgd29ydGggJDI0OSBvdmVyIFRlYW0gKyB0aGUgYWRkLW9uLiBFbnRlcnByaXNlIGtlZXBzIGN1c3RvbV9pbnRlZ3JhdGlvbnMsXG4gIC8vIHRlYW1fdXNhZ2VfYW5hbHl0aWNzLCB0aGUgY29tcGxpYW5jZSBsaWJyYXJpZXMgYW5kIHN0YWtlaG9sZGVyX3JlcG9ydHMgYXNcbiAgLy8gaXRzIG93biBkaWZmZXJlbnRpYXRvcnMuXG4gIGJ1c2luZXNzOiBbJ2FpX2dlbmVyYXRpb24nLCAnYnVsa19vcGVyYXRpb25zJywgJ3NzbycsICd2ZXJpZmllZF9wdWJsaXNoZXInLCAnYWR2YW5jZWRfcmVwb3J0aW5nJ10sXG4gIC8vIEVudGVycHJpc2UgaXMgYW4gRVhQTElDSVQgbGlzdCwgZGVsaWJlcmF0ZWx5IG5vdCBgWy4uLkFMTF9GRUFUVVJFX0ZMQUdTXWAuXG4gIC8vXG4gIC8vIFNwcmVhZGluZyBldmVyeSBmbGFnIGhlcmUgaXMgaG93IGEgbmV3IHBhaWQgYWRkLW9uIHNpbGVudGx5IGJlY29tZXMgYW5cbiAgLy8gRW50ZXJwcmlzZSBpbmNsdXNpb246IGFkZGluZyBgc3VwcG9ydF9wcmVtaXVtYCB0byB0aGUgY2F0YWxvZyB3b3VsZCBoYXZlXG4gIC8vIGdyYW50ZWQgZW50ZXJwcmlzZSB0aGUgMjTDlzcgc3VwcG9ydCBpdCBpcyBzdXBwb3NlZCB0byBCVVksIHdpdGggbm90aGluZ1xuICAvLyBmYWlsaW5nLiBMaXN0aW5nIHRoZSBmbGFncyBmb3JjZXMgdGhlIHF1ZXN0aW9uIFwiZG9lcyBFbnRlcnByaXNlIGluY2x1ZGVcbiAgLy8gdGhpcz9cIiB0byBiZSBhbnN3ZXJlZCBwZXIgZmxhZywgd2hpY2ggaXMgdGhlIGRlY2lzaW9uIHRoaXMgcmVjb3JkIGV4aXN0cyB0b1xuICAvLyBjYXJyeS4gQSBmaWx0ZXIgZXhwcmVzc2lvbiB3b3VsZCBkbyB0aGUgc2FtZSBqb2IgYnV0IGNhbm5vdCBiZSByZWFkIGJ5IHRoZVxuICAvLyBzb3VyY2UtcGFyc2luZyBwYXJpdHkgdGVzdHMgKGBmcm9udGVuZC90ZXN0L2ZlYXR1cmUtZ2F0ZS11cHNlbGwudGVzdC50c2BcbiAgLy8gZXh0cmFjdHMgYW4gYXJyYXkgbGl0ZXJhbCksIHNvIGFuIGV4cGxpY2l0IGxpc3QgaXQgaXMuXG4gIC8vXG4gIC8vIFN1cHBvcnQgaXMgYWJzZW50IG9uIHB1cnBvc2U6IGl0IGlzIGFuIGFkZC1vbiBhdCBFVkVSWSB0aWVyLCBpbmNsdWRlZCBpbiBub25lLlxuICBlbnRlcnByaXNlOiBbXG4gICAgJ2FpX2dlbmVyYXRpb24nLFxuICAgICdidWxrX29wZXJhdGlvbnMnLFxuICAgICdjdXN0b21faW50ZWdyYXRpb25zJyxcbiAgICAnc3NvJyxcbiAgICAnYWR2YW5jZWRfcmVwb3J0aW5nJyxcbiAgICAndGVhbV91c2FnZV9hbmFseXRpY3MnLFxuICAgICdjb21wbGlhbmNlX3N0YW5kYXJkJyxcbiAgICAnY29tcGxpYW5jZV9hZHZhbmNlZCcsXG4gICAgJ3N0YWtlaG9sZGVyX3JlcG9ydHMnLFxuICAgICd2ZXJpZmllZF9wdWJsaXNoZXInLFxuICBdLFxuICAvLyBVbmxpbWl0ZWQgaW5jbHVkZXMgZXZlcnkgZmVhdHVyZSAvIGFkZC1vbiBidW5kbGUgKGJpbGxpbmctZGlzYWJsZWQgZGVmYXVsdCkuXG4gIC8vIFN1cHBvcnQgaW5jbHVkZWQgaGVyZSBvbiBwdXJwb3NlOiBgdW5saW1pdGVkYCBpcyB0aGUgYmlsbGluZy1PRkYgdGllciwgd2hlcmVcbiAgLy8gbm90aGluZyBpcyBwdXJjaGFzYWJsZSwgYW5kIGl0cyBgc3VwcG9ydENvbnRhY3RzYCBsaW1pdCBpcyAtMSB0byBtYXRjaC5cbiAgdW5saW1pdGVkOiBbLi4uQUxMX0ZFQVRVUkVfRkxBR1NdLFxufTtcblxuLy8gRmVhdHVyZSBtZXRhZGF0YSAoZm9yIGRpc3BsYXkpXG5cbi8qKiBIdW1hbi1yZWFkYWJsZSBtZXRhZGF0YSBmb3IgZWFjaCBmZWF0dXJlIGZsYWcuICovXG5leHBvcnQgY29uc3QgRkVBVFVSRV9NRVRBREFUQTogUmVjb3JkPEZlYXR1cmVGbGFnLCB7IGxhYmVsOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfT4gPSB7XG4gIGFpX2dlbmVyYXRpb246IHtcbiAgICBsYWJlbDogJ0FJIEdlbmVyYXRpb24nLFxuICAgIGRlc2NyaXB0aW9uOiAnQUktcG93ZXJlZCBwaXBlbGluZSBhbmQgcGx1Z2luIGdlbmVyYXRpb24nLFxuICB9LFxuICBidWxrX29wZXJhdGlvbnM6IHtcbiAgICBsYWJlbDogJ0J1bGsgT3BlcmF0aW9ucycsXG4gICAgZGVzY3JpcHRpb246ICdCYXRjaCBjcmVhdGUsIHVwZGF0ZSwgYW5kIGRlbGV0ZSBmb3IgcGlwZWxpbmVzIGFuZCBwbHVnaW5zJyxcbiAgfSxcbiAgY3VzdG9tX2ludGVncmF0aW9uczoge1xuICAgIGxhYmVsOiAnQ3VzdG9tIEludGVncmF0aW9ucycsXG4gICAgZGVzY3JpcHRpb246ICdDb25uZWN0IHRvIGV4dGVybmFsIHNlcnZpY2VzIGFuZCBjdXN0b20gd2ViaG9vayBlbmRwb2ludHMnLFxuICB9LFxuICBzc286IHtcbiAgICBsYWJlbDogJ1NTTyAvIElkUCcsXG4gICAgZGVzY3JpcHRpb246ICdTaW5nbGUgc2lnbi1vbiBhbmQgZXh0ZXJuYWwgaWRlbnRpdHktcHJvdmlkZXIgY29uZmlndXJhdGlvbnMnLFxuICB9LFxuICBhZHZhbmNlZF9yZXBvcnRpbmc6IHtcbiAgICBsYWJlbDogJ0FkdmFuY2VkIFJlcG9ydGluZycsXG4gICAgZGVzY3JpcHRpb246ICdET1JBIC8gYWR2YW5jZWQgZGVsaXZlcnkgYW5hbHl0aWNzJyxcbiAgfSxcbiAgdGVhbV91c2FnZV9hbmFseXRpY3M6IHtcbiAgICBsYWJlbDogJ1RlYW0gVXNhZ2UgQW5hbHl0aWNzJyxcbiAgICBkZXNjcmlwdGlvbjogJ1Blci10ZWFtIHVzYWdlIGJyZWFrZG93biBhY3Jvc3MgdGhlIG9yZyDihpIgdGVhbSBzdWJ0cmVlJyxcbiAgfSxcbiAgY29tcGxpYW5jZV9zdGFuZGFyZDoge1xuICAgIGxhYmVsOiAnU3RhbmRhcmQgQ29tcGxpYW5jZScsXG4gICAgZGVzY3JpcHRpb246ICdDdXJhdGVkIENJL0NEIGJlc3QtcHJhY3RpY2UgY29tcGxpYW5jZSBydWxlIGxpYnJhcnknLFxuICB9LFxuICBjb21wbGlhbmNlX2FkdmFuY2VkOiB7XG4gICAgbGFiZWw6ICdBZHZhbmNlZCBDb21wbGlhbmNlJyxcbiAgICBkZXNjcmlwdGlvbjogJ0N1cmF0ZWQgZnJhbWV3b3JrIGNvbXBsaWFuY2UgbGlicmFyaWVzIChTT0MyIC8gUENJLURTUyAvIENJUyknLFxuICB9LFxuICBzdGFrZWhvbGRlcl9yZXBvcnRzOiB7XG4gICAgbGFiZWw6ICdTdGFrZWhvbGRlciBSZXBvcnRzJyxcbiAgICBkZXNjcmlwdGlvbjogJ1NjaGVkdWxlZCB0ZWFtIHJlcG9ydHMgZm9yIG1hbmFnZXJzIOKAlCBzbmFwc2hvdHMsIHJldmlldyBhbmQgcHVibGlzaCwgUERGL2VtYWlsIGRlbGl2ZXJ5IGFuZCBzaGFyZSBsaW5rcycsXG4gIH0sXG4gIHN1cHBvcnRfc3RhbmRhcmQ6IHtcbiAgICBsYWJlbDogJ1N0YW5kYXJkIFN1cHBvcnQnLFxuICAgIGRlc2NyaXB0aW9uOiBgU3VwcG9ydCBjYXNlcyB3aXRoIGEgZmlyc3QgcmVzcG9uc2Ugd2l0aGluICR7U1VQUE9SVF9SRVNQT05TRV9UQVJHRVRTLnN1cHBvcnRfc3RhbmRhcmR9LCBidXNpbmVzcyBob3Vyc2AsXG4gIH0sXG4gIHN1cHBvcnRfcHJpb3JpdHk6IHtcbiAgICBsYWJlbDogJ1ByaW9yaXR5IFN1cHBvcnQnLFxuICAgIGRlc2NyaXB0aW9uOiBgU3VwcG9ydCBjYXNlcyB3aXRoIGEgZmlyc3QgcmVzcG9uc2UgYnkgdGhlICR7U1VQUE9SVF9SRVNQT05TRV9UQVJHRVRTLnN1cHBvcnRfcHJpb3JpdHl9LCBidXNpbmVzcyBob3Vyc2AsXG4gIH0sXG4gIHN1cHBvcnRfcHJlbWl1bToge1xuICAgIGxhYmVsOiAnUHJlbWl1bSBTdXBwb3J0JyxcbiAgICBkZXNjcmlwdGlvbjogYDI0w5c3IHN1cHBvcnQgY2FzZXMg4oCUIGZpcnN0IHJlc3BvbnNlIHdpdGhpbiAke1NVUFBPUlRfUkVTUE9OU0VfVEFSR0VUUy5zdXBwb3J0X3ByZW1pdW19IG9mIHRoZSB3ZWVrLCBhbmQgdGhlIG9ubHkgbGV2ZWwgdGhhdCBtYXkgZGVjbGFyZSB1cmdlbnQgc2V2ZXJpdHlgLFxuICB9LFxuICB2ZXJpZmllZF9wdWJsaXNoZXI6IHtcbiAgICBsYWJlbDogJ1ZlcmlmaWVkIFB1Ymxpc2hlciBFbGlnaWJpbGl0eScsXG4gICAgZGVzY3JpcHRpb246ICdBcHBseSBmb3IgdGhlIFZlcmlmaWVkIGJhZGdlIG9uIHlvdXIgcGx1Z2luLWVjb3N5c3RlbSBwdWJsaXNoZXIgKGF3YXJkZWQgYnkgc3lzdGVtLW9yZyByZXZpZXcpJyxcbiAgfSxcbn07XG5cbi8vIFJlc29sdXRpb24gbG9naWNcblxuLyoqXG4gKiBSZXNvbHZlIGEgdXNlcidzIGVmZmVjdGl2ZSBmZWF0dXJlIHNldC5cbiAqXG4gKiAxLiBTeXNhZG1pbnMgKGlzU3VwZXJBZG1pbikgYWx3YXlzIGdldCBBTEwgZmVhdHVyZXMuXG4gKiAyLiBTdGFydCB3aXRoIHRoZSB0aWVyJ3MgZGVmYXVsdCBmZWF0dXJlcy5cbiAqIDMuIEFwcGx5IHBlci11c2VyIG92ZXJyaWRlczogYHRydWVgIGFkZHMgYSBmZWF0dXJlLCBgZmFsc2VgIHJlbW92ZXMgaXQuXG4gKiA0LiBJbnZhbGlkIG92ZXJyaWRlIGtleXMgYXJlIHNpbGVudGx5IGlnbm9yZWQuXG4gKlxuICogQHBhcmFtIHRpZXIgLSBUaGUgb3JnYW5pemF0aW9uJ3MgcXVvdGEgdGllclxuICogQHBhcmFtIG9wdHMgLSBSZXNvbHV0aW9uIG9wdGlvbnM6XG4gKiAgIC0gYG92ZXJyaWRlc2A6IHBlci11c2VyIG92ZXJyaWRlcyAoa2V5ID0gZmVhdHVyZSBmbGFnLCB2YWx1ZSA9IGVuYWJsZWQpXG4gKiAgIC0gYGlzU3VwZXJBZG1pbmA6IHdoZXRoZXIgdGhlIHVzZXIgaGFzIHRoZSBnbG9iYWwgc3VwZXItYWRtaW4gZmxhZ1xuICogICAtIGBhY2NvdW50RmVhdHVyZXNgOiBhY2NvdW50LWxldmVsIGVudGl0bGVtZW50cyAoZS5nLiBwdXJjaGFzZWQgYWRkLW9uXG4gKiAgICAgYnVuZGxlcykuIEEgTkFNRUQgZmllbGQgc28gaXQgY2FuIG5ldmVyIGJlIHNpbGVudGx5IGRyb3BwZWQgYnkgYSBjYWxsZXJcbiAqICAgICB0aGF0IG9taXRzIGEgdHJhaWxpbmcgcG9zaXRpb25hbCBhcmcuXG4gKiBAcmV0dXJucyBTb3J0ZWQgYXJyYXkgb2YgZW5hYmxlZCBmZWF0dXJlIGZsYWdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVXNlckZlYXR1cmVzKFxuICB0aWVyOiBRdW90YVRpZXIsXG4gIG9wdHM/OiB7XG4gICAgb3ZlcnJpZGVzPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gfCBudWxsO1xuICAgIGlzU3VwZXJBZG1pbj86IGJvb2xlYW47XG4gICAgYWNjb3VudEZlYXR1cmVzPzogcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsO1xuICB9LFxuKTogRmVhdHVyZUZsYWdbXSB7XG4gIGNvbnN0IHsgb3ZlcnJpZGVzOiBmZWF0dXJlT3ZlcnJpZGVzLCBpc1N1cGVyQWRtaW4sIGFjY291bnRGZWF0dXJlcyB9ID0gb3B0cyA/PyB7fTtcblxuICAvLyBTeXNhZG1pbnMgZ2V0IGV2ZXJ5dGhpbmcgcmVnYXJkbGVzcyBvZiB0aWVyLlxuICBpZiAoaXNTdXBlckFkbWluKSByZXR1cm4gWy4uLkFMTF9GRUFUVVJFX0ZMQUdTXTtcblxuICAvLyBTdGFydCB3aXRoIHRpZXIgZGVmYXVsdHNcbiAgY29uc3QgZmVhdHVyZXMgPSBuZXcgU2V0PEZlYXR1cmVGbGFnPihUSUVSX0ZFQVRVUkVTW3RpZXJdID8/IFtdKTtcblxuICAvLyBBY2NvdW50LWxldmVsIGVudGl0bGVtZW50cyAocHVyY2hhc2VkIGZlYXR1cmUgYnVuZGxlcyDigJQgZS5nLiBhdWRpdF9sb2csIHNzbyxcbiAgLy8gYWR2YW5jZWRfcmVwb3J0aW5nLCB0ZWFtX3VzYWdlX2FuYWx5dGljcywgY29tcGxpYW5jZV9zdGFuZGFyZC9hZHZhbmNlZCkuXG4gIC8vIEFwcGxpZWQgYmVmb3JlIHBlci11c2VyIG92ZXJyaWRlcyBzbyBhbiBleHBsaWNpdCB1c2VyIG92ZXJyaWRlIHN0aWxsIHdpbnMuXG4gIGlmIChhY2NvdW50RmVhdHVyZXMpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBhY2NvdW50RmVhdHVyZXMpIHtcbiAgICAgIGlmIChpc1ZhbGlkRmVhdHVyZUZsYWcoa2V5KSkgZmVhdHVyZXMuYWRkKGtleSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQXBwbHkgcGVyLXVzZXIgb3ZlcnJpZGVzXG4gIGlmIChmZWF0dXJlT3ZlcnJpZGVzKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCBlbmFibGVkXSBvZiBPYmplY3QuZW50cmllcyhmZWF0dXJlT3ZlcnJpZGVzKSkge1xuICAgICAgaWYgKCFpc1ZhbGlkRmVhdHVyZUZsYWcoa2V5KSkgY29udGludWU7XG4gICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICBmZWF0dXJlcy5hZGQoa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZlYXR1cmVzLmRlbGV0ZShrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybiBpbiBjYW5vbmljYWwgb3JkZXJcbiAgcmV0dXJuIEFMTF9GRUFUVVJFX0ZMQUdTLmZpbHRlcihmID0+IGZlYXR1cmVzLmhhcyhmKSk7XG59XG5cbi8qKlxuICogQ3VyYXRlZCBjb21wbGlhbmNlIGNvbnRlbnQgc2V0cyBhbmQgdGhlIGZlYXR1cmUgZmxhZyBlYWNoIG9uZSBpcyBzb2xkIHVuZGVyLlxuICogQSBzZXQgYHhgIGlzIHRoZSBwdWJsaXNoZWQgcnVsZXMgdGFnZ2VkIGBzZXQ6PHg+YDsgYW4gb3JnIGhvbGRpbmcgdGhlIGZsYWcgaXNcbiAqIGVudGl0bGVkIHRvIHRoZW0uIE9yZGVyZWQgZnJvbSB0aGUgbG93ZXN0IGVudGl0bGVtZW50IHRvIHRoZSBoaWdoZXN0LlxuICovXG5leHBvcnQgY29uc3QgQ09NUExJQU5DRV9TRVRfRkVBVFVSRVMgPSB7XG4gIHN0YW5kYXJkOiAnY29tcGxpYW5jZV9zdGFuZGFyZCcsXG4gIGFkdmFuY2VkOiAnY29tcGxpYW5jZV9hZHZhbmNlZCcsXG59IGFzIGNvbnN0IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBGZWF0dXJlRmxhZz47XG5cbmV4cG9ydCB0eXBlIENvbXBsaWFuY2VDb250ZW50U2V0ID0ga2V5b2YgdHlwZW9mIENPTVBMSUFOQ0VfU0VUX0ZFQVRVUkVTO1xuXG4vKiogRXZlcnkgY3VyYXRlZCBzZXQgbmFtZSwgbG93ZXN0IGVudGl0bGVtZW50IGZpcnN0LiAqL1xuZXhwb3J0IGNvbnN0IENPTVBMSUFOQ0VfQ09OVEVOVF9TRVRTID0gT2JqZWN0LmtleXMoQ09NUExJQU5DRV9TRVRfRkVBVFVSRVMpIGFzIENvbXBsaWFuY2VDb250ZW50U2V0W107XG5cbi8qKiBUaGUgY3VyYXRlZCBzZXRzIGFuIGVmZmVjdGl2ZSBmZWF0dXJlIHNldCBlbnRpdGxlcyAoc3RhYmxlIG9yZGVyKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGlhbmNlU2V0c0ZvckZlYXR1cmVzKGZlYXR1cmVzOiByZWFkb25seSBzdHJpbmdbXSk6IENvbXBsaWFuY2VDb250ZW50U2V0W10ge1xuICByZXR1cm4gQ09NUExJQU5DRV9DT05URU5UX1NFVFMuZmlsdGVyKChzZXQpID0+IGZlYXR1cmVzLmluY2x1ZGVzKENPTVBMSUFOQ0VfU0VUX0ZFQVRVUkVTW3NldF0pKTtcbn1cblxuLyoqXG4gKiBUaGUgZmVhdHVyZSBhIHB1Ymxpc2hlZCBydWxlJ3MgYHNldDo8eD5gIHRhZ3MgcmVxdWlyZSwgb3IgYG51bGxgIGZvciBhblxuICogdW50YWdnZWQgKGJhc2VsaW5lKSBydWxlLiBUaGUgaGlnaGVzdCBlbnRpdGxlbWVudCB3aW5zIHdoZW4gYSBydWxlIGNhcnJpZXNcbiAqIHNldmVyYWwuIEFjY2VwdHMgYSByYXcganNvbmIgYHRhZ3NgIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGxpYW5jZUZlYXR1cmVGb3JUYWdzKHRhZ3M6IHVua25vd24pOiBGZWF0dXJlRmxhZyB8IG51bGwge1xuICBjb25zdCB0ID0gQXJyYXkuaXNBcnJheSh0YWdzKSA/IHRhZ3MgOiBbXTtcbiAgZm9yIChjb25zdCBzZXQgb2YgWy4uLkNPTVBMSUFOQ0VfQ09OVEVOVF9TRVRTXS5yZXZlcnNlKCkpIHtcbiAgICBpZiAodC5pbmNsdWRlcyhgc2V0OiR7c2V0fWApKSByZXR1cm4gQ09NUExJQU5DRV9TRVRfRkVBVFVSRVNbc2V0XTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbiJdfQ==
@@ -1,17 +1,19 @@
1
1
  export { ErrorCode, getStatusForErrorCode } from './error-codes.js';
2
- export { isValidQuotaType, type TokenScope, TOKEN_SCOPES, type PrincipalType, type TokenUse, type AuthMethod, type AssuranceLevel, type QuotaType, VALID_QUOTA_TYPES, type QuotaCheckResult, type QuotaInfo, type ApiResponse, type JwtPayload, type HealthCheckResponse, } from './common.js';
2
+ export { isValidQuotaType, type TokenScope, TOKEN_SCOPES, type PrincipalType, PRINCIPAL_TYPES, type TokenUse, type AuthMethod, type AssuranceLevel, type QuotaType, VALID_QUOTA_TYPES, QUOTA_TYPE_LABELS, QUOTA_UPGRADE_PATH, type QuotaCheckResult, type QuotaInfo, type ApiResponse, type JwtPayload, type HealthCheckResponse, } from './common.js';
3
3
  export * from './pipeline.js';
4
4
  export { type Lifecycle, type Criticality, type OwnerType, type EntityLink, type EntityLabels, } from './catalog-metadata.js';
5
5
  export { type TemplateInput, } from './pipeline-template.js';
6
6
  export * from './visibility.js';
7
7
  export * from './reserved-tags.js';
8
+ export * from './quota-catalog.js';
8
9
  export * from './wire-vocabulary.js';
9
10
  export { type ComplianceExemptionRequest } from './compliance-exemption.js';
10
11
  export { PLUGIN_SUMMARY_MAX, PLUGIN_README_MAX_BYTES, PLUGIN_CHANGELOG_MAX_BYTES, PLUGIN_CATEGORIES, type PluginCatalogCategory, PLUGIN_CATALOG_FIELDS, type PluginCatalogField, PLUGIN_CATALOG_LINK_FIELDS, METADATA_SOURCES, type MetadataSource, type MetadataSources, } from './plugin-catalog.js';
11
12
  export { type HttpRequest, } from './http.js';
12
- export { tierAllowsTeams, isBillingEnabled, isValidTier, getTierLimits, type QuotaTier, type QuotaTierLimits, QUOTA_TIERS, VALID_TIERS, STANDARD_TIERS, TEAM_CAPABLE_TIERS, SEAT_PACK_TIERS, seatRemedy, type SeatRemedy, DEFAULT_TIER, QUOTA_RESET_DAYS, nextQuotaResetDate, } from './quota-tiers.js';
13
+ export { tierAllowsTeams, isBillingEnabled, isValidTier, getTierLimits, type QuotaTier, type QuotaTierLimits, QUOTA_TIERS, VALID_TIERS, STANDARD_TIERS, TEAM_CAPABLE_TIERS, SEAT_PACK_TIERS, seatRemedy, type SeatRemedy, DEFAULT_TIER, QUOTA_RESET_DAYS, CPU_CREDITS_PERIOD_DAYS, quotaPeriodDays, nextQuotaResetDate, AUTOMATION_CALLS_SIZING, automationCallsFor, quotaGracePct, enforcedQuotaLimit, } from './quota-tiers.js';
14
+ export * from './build-catalog.js';
13
15
  export * from './feature-flags.js';
14
- export { permissionLabel, isValidPermission, isSystemOrgOnlyPermission, isOrgAssignablePermission, normalizePermissionSubset, intersectPermissions, resolveUserPermissions, confinePermissionsToOrg, hasPermission, type Permission, ALL_PERMISSIONS, PERMISSION_GATES, PERMISSION_CATALOG, SUPERADMIN_ONLY_PERMISSIONS, SYSTEM_ORG_ONLY_PERMISSIONS, ORG_ASSIGNABLE_PERMISSIONS, ORG_ASSIGNABLE_CATEGORIES, READ_ONLY_PERMISSIONS, ROLE_PERMISSIONS, ECOSYSTEM_MANAGER_PERMISSIONS, TEAM_LEAD_PERMISSIONS, } from './permissions.js';
16
+ export { permissionLabel, isValidPermission, isSystemOrgOnlyPermission, isOrgAssignablePermission, normalizePermissionSubset, intersectPermissions, resolveUserPermissions, confinePermissionsToOrg, hasPermission, type Permission, ALL_PERMISSIONS, ROLE_TEMPLATES, type RoleTemplate, PERMISSION_ACTIONS, PERMISSION_ID_SHAPE, PERMISSION_GATES, PERMISSION_CATALOG, SUPERADMIN_ONLY_PERMISSIONS, SYSTEM_ORG_ONLY_PERMISSIONS, ORG_ASSIGNABLE_PERMISSIONS, ORG_ASSIGNABLE_CATEGORIES, READ_ONLY_PERMISSIONS, ROLE_PERMISSIONS, ECOSYSTEM_MANAGER_PERMISSIONS, PLATFORM_OPERATOR_PERMISSIONS, ACCOUNT_MANAGER_PERMISSIONS, CONSOLE_ADMIN_PERMISSIONS, PLATFORM_OBSERVER_PERMISSIONS, SUPPORT_AGENT_PERMISSIONS, SUPPORT_LEAD_PERMISSIONS, SEED_BUNDLES, SEED_BUNDLE_IDS, SYSTEM_ORG_JOB_BUNDLES, ORG_AUTOMATION_BUNDLES, AUTOMATION_ACCOUNT_BUNDLES, type SeedBundleId, REGISTRY_OPERATOR_PERMISSIONS, TEAM_LEAD_PERMISSIONS, PIPELINE_AUTOMATION_PERMISSIONS, PIPELINE_REGISTRATION_PERMISSIONS, } from './permissions.js';
15
17
  export { METADATA_KEY_CATALOG, MetadataKeys, type MetadataKey, type MetadataKeyOption, METADATA_KEY_GROUPS, } from './metadata-keys.js';
16
18
  export { type AuditEvent, } from './audit-events.js';
17
19
  export { REMOTE_AUDIT_ACTIONS, isRemoteAuditAction, type RemoteAuditAction, } from './remote-audit-actions.js';
@@ -19,4 +21,4 @@ export { ASK_AGENT_PROPOSER, ASK_PROPOSED_BY_HEADER, PROPOSED_BY_DETAIL_KEY, ask
19
21
  export { isEcosystemNotificationEvent, parseEcosystemNotifyRequest, nextEcosystemDigestTime, renderEcosystemManagerChange, renderEcosystemDigest, type EcosystemNotificationEventId, type EcosystemNotificationChannel, ECOSYSTEM_EMAIL_PREFERENCE_FIELDS, type EcosystemEmailPreferenceField, ECOSYSTEM_EMAIL_PREFERENCE_FIELD_NAMES, ECOSYSTEM_NOTIFICATION_EVENTS, type EcosystemRecipientSpec, type EcosystemNotifyRequest, } from './ecosystem-notifications.js';
20
22
  export { publisherTermsVersion, publisherHandleProblem, isOfficialAutoApprovalEnabled, isPluginPublishingEnabled, isAnonymousSubmissionsEnabled, isPluginReviewsEnabled, OFFICIAL_CATALOG_LOADER_ACCOUNT, DEFAULT_PUBLISHER_TERMS_VERSION, BUILTIN_RESERVED_HANDLES, TENANT_REQUEST_KINDS, PUBLISH_PERMISSION_REQUEST_KINDS, VERIFY_REQUEST_KINDS, STEP_UP_REQUEST_KINDS, REQUEST_SLA_HOURS, } from './ecosystem.js';
21
23
  export { ageScore, vulnScore, computeHealthScore, publisherHealthScore, publisherSuccessRate, healthBand, HEALTH_COMPONENTS, HEALTH_WEIGHTS, type HealthBreakdown, type HealthComponentScore, type HealthResult, type HealthInputs, type HealthBand, } from './plugin-health.js';
22
- export { applyVulnWaivers, asScanFlag, blockOnNewCritical, describeFindings, describeFix, exceedsVulnFloor, parseVulnWaivers, parseVulnWaiversVerbose, pluginVulnMaxCritical, SCAN_FLAG_TOP_FINDINGS, vulnBlockedMessage, vulnFlaggedMessage, vulnFlaggedWarning, type PluginScanFinding, type PluginScanFlag, type PluginScanSummary, type VulnFlaggedWarning, type VulnWaiver, type VulnWaiverParse, type VulnWaiverProblem, type WaiverOutcome, } from './plugin-scan.js';
24
+ export { applyVulnWaivers, asScanFlag, describeFindings, describeFix, atOrAboveFailOn, exceedsVulnFloor, failOnLabel, gatedFixableCount, isGatedFinding, newScanFindings, parseVulnWaivers, parseVulnWaiversVerbose, pluginVulnFailOn, pluginVulnGateKev, pluginVulnMaxFindings, SCAN_FLAG_TOP_FINDINGS, SCAN_SUMMARY_MAX_BINARIES, SCAN_SUMMARY_MAX_FINDINGS, scanFindingKey, vulnFlaggedMessage, vulnFlaggedWarning, vulnWaiverLabels, type PluginScanFinding, type PluginScanFlag, type PluginVulnFailOn, type PluginScanSummary, type VulnFlaggedWarning, type VulnWaiver, type VulnWaiverParse, type VulnWaiverProblem, type WaiverOutcome, } from './plugin-scan.js';