@pipeline-builder/api-core 5.2.6 → 5.2.8
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.
- package/lib/constants/ai-providers.js +1 -1
- package/lib/constants/http-status.js +1 -1
- package/lib/constants/index.js +1 -1
- package/lib/constants/time.js +1 -1
- package/lib/errors/app-errors.js +1 -1
- package/lib/errors/index.js +1 -1
- package/lib/helpers/access-helpers.d.ts +19 -0
- package/lib/helpers/access-helpers.js +24 -4
- package/lib/helpers/content-disposition.js +1 -1
- package/lib/helpers/crud-helpers.js +1 -1
- package/lib/helpers/index.d.ts +1 -1
- package/lib/helpers/index.js +2 -2
- package/lib/helpers/org-hierarchy-http.js +1 -1
- package/lib/helpers/org-hierarchy.js +1 -1
- package/lib/helpers/restore-helpers.js +1 -1
- package/lib/helpers/sse-helpers.js +13 -2
- package/lib/helpers/support-calendar.js +1 -1
- package/lib/index.js +1 -1
- package/lib/middleware/ask-provenance.js +1 -1
- package/lib/middleware/assurance.js +1 -1
- package/lib/middleware/auth.js +3 -2
- package/lib/middleware/client-version.d.ts +45 -0
- package/lib/middleware/client-version.js +97 -0
- package/lib/middleware/deferred-quota-check.js +1 -1
- package/lib/middleware/ecosystem-guard.js +1 -1
- package/lib/middleware/index.d.ts +1 -0
- package/lib/middleware/index.js +2 -1
- package/lib/middleware/jwt-verify.js +1 -1
- package/lib/middleware/mongo-sanitize.js +1 -1
- package/lib/middleware/on-behalf.js +1 -1
- package/lib/middleware/permission-gates.js +1 -1
- package/lib/middleware/quota-exempt-routes.js +1 -1
- package/lib/middleware/revocation.js +1 -1
- package/lib/middleware/route-table.js +16 -1
- package/lib/middleware/service-tokens.js +1 -1
- package/lib/middleware/step-up.js +1 -1
- package/lib/middleware/system-org.d.ts +18 -5
- package/lib/middleware/system-org.js +19 -6
- package/lib/openapi/extend-zod.js +1 -1
- package/lib/openapi/index.js +1 -1
- package/lib/openapi/registry.js +1 -1
- package/lib/openapi/routes/ask-routes.js +1 -1
- package/lib/openapi/routes/billing-routes.js +1 -1
- package/lib/openapi/routes/image-registry-routes.js +1 -1
- package/lib/openapi/routes/index.js +1 -1
- package/lib/openapi/routes/message-routes.js +1 -1
- package/lib/openapi/routes/pipeline-routes.js +1 -1
- package/lib/openapi/routes/pipeline-template-routes.js +1 -1
- package/lib/openapi/routes/plugin-routes.js +1 -1
- package/lib/openapi/routes/quota-routes.js +1 -1
- package/lib/openapi/schema-registry.js +1 -1
- package/lib/routes/health.js +1 -1
- package/lib/routes/index.js +1 -1
- package/lib/services/ai-call-weight.js +1 -1
- package/lib/services/alert-delivery.js +1 -1
- package/lib/services/api-key-exchange.d.ts +4 -2
- package/lib/services/api-key-exchange.js +15 -8
- package/lib/services/audit-context.d.ts +3 -0
- package/lib/services/audit-context.js +2 -1
- package/lib/services/audit-spool.js +1 -1
- package/lib/services/cache-service.js +1 -1
- package/lib/services/circuit-breaker.js +1 -1
- package/lib/services/compliance-client.js +1 -1
- package/lib/services/compliance-event-subscriber.js +1 -1
- package/lib/services/durable-event-bus.js +1 -1
- package/lib/services/ecosystem-notify-client.d.ts +7 -1
- package/lib/services/ecosystem-notify-client.js +9 -3
- package/lib/services/entity-events.js +1 -1
- package/lib/services/env-redis.js +1 -1
- package/lib/services/http-client.js +19 -3
- package/lib/services/index.d.ts +1 -1
- package/lib/services/index.js +2 -2
- package/lib/services/jwks-cache.js +1 -1
- package/lib/services/leader-lock.js +1 -1
- package/lib/services/notification-channels.js +1 -1
- package/lib/services/org-ai-client.js +1 -1
- package/lib/services/pagerduty-inbound.js +1 -1
- package/lib/services/pagerduty.js +1 -1
- package/lib/services/quota-increment-batcher.js +1 -1
- package/lib/services/quota.js +1 -1
- package/lib/services/remote-audit-client.js +1 -1
- package/lib/services/retry-forever.js +1 -1
- package/lib/services/retry-strategy.js +1 -1
- package/lib/services/s3-client.js +1 -1
- package/lib/services/scheduler.js +1 -1
- package/lib/services/service-boot.js +1 -1
- package/lib/services/service-keys.js +2 -2
- package/lib/services/sse-ticket-store.js +1 -1
- package/lib/services/system-notification.js +1 -1
- package/lib/services/token-revocation.js +1 -1
- package/lib/services/version-vuln-policy.d.ts +11 -0
- package/lib/services/version-vuln-policy.js +33 -7
- package/lib/types/ai-catalog.js +1 -1
- package/lib/types/ask-proposals.d.ts +23 -0
- package/lib/types/ask-proposals.js +29 -1
- package/lib/types/audit-events.js +1 -1
- package/lib/types/build-catalog.d.ts +65 -0
- package/lib/types/build-catalog.js +95 -1
- package/lib/types/catalog-metadata.js +1 -1
- package/lib/types/common.js +1 -1
- package/lib/types/compliance-exemption.js +1 -1
- package/lib/types/ecosystem-notifications.d.ts +9 -0
- package/lib/types/ecosystem-notifications.js +15 -6
- package/lib/types/ecosystem.d.ts +1 -6
- package/lib/types/ecosystem.js +18 -5
- package/lib/types/error-codes.d.ts +3 -0
- package/lib/types/error-codes.js +6 -1
- package/lib/types/feature-flags.d.ts +17 -1
- package/lib/types/feature-flags.js +1 -1
- package/lib/types/http.js +1 -1
- package/lib/types/index.d.ts +3 -3
- package/lib/types/index.js +4 -4
- package/lib/types/metadata-keys.js +1 -1
- package/lib/types/permissions.d.ts +60 -13
- package/lib/types/permissions.js +63 -14
- package/lib/types/pipeline-template.js +1 -1
- package/lib/types/pipeline.js +1 -1
- package/lib/types/plugin-catalog.js +1 -1
- package/lib/types/plugin-health.js +1 -1
- package/lib/types/plugin-scan.d.ts +69 -0
- package/lib/types/plugin-scan.js +77 -1
- package/lib/types/quota-catalog.js +15 -2
- package/lib/types/quota-tiers.d.ts +27 -160
- package/lib/types/quota-tiers.js +47 -255
- package/lib/types/remote-audit-actions.d.ts +1 -1
- package/lib/types/remote-audit-actions.js +9 -1
- package/lib/types/reserved-tags.js +1 -1
- package/lib/types/tier-limits.d.ts +210 -0
- package/lib/types/tier-limits.js +254 -0
- package/lib/types/usage-projection.js +1 -1
- package/lib/types/visibility.js +1 -1
- package/lib/types/wire-vocabulary.d.ts +7 -0
- package/lib/types/wire-vocabulary.js +7 -1
- package/lib/utils/alias-resolver.js +1 -1
- package/lib/utils/api-key.js +1 -1
- package/lib/utils/audit.js +1 -1
- package/lib/utils/aws-scrub.js +1 -1
- package/lib/utils/compliance-attributes.js +1 -1
- package/lib/utils/concurrency-gate.d.ts +98 -0
- package/lib/utils/concurrency-gate.js +110 -0
- package/lib/utils/concurrency.js +1 -1
- package/lib/utils/crash-handlers.js +1 -1
- package/lib/utils/date.js +1 -1
- package/lib/utils/dsse.js +1 -1
- package/lib/utils/env.d.ts +11 -0
- package/lib/utils/env.js +14 -1
- package/lib/utils/headers.js +1 -1
- package/lib/utils/identity.js +1 -1
- package/lib/utils/index.d.ts +2 -0
- package/lib/utils/index.js +3 -1
- package/lib/utils/jwk.js +2 -2
- package/lib/utils/logger.js +1 -1
- package/lib/utils/metric-emitter.js +1 -1
- package/lib/utils/object.js +1 -1
- package/lib/utils/params.js +1 -1
- package/lib/utils/plugin-compliance.d.ts +9 -1
- package/lib/utils/plugin-compliance.js +1 -1
- package/lib/utils/proof-of-work.js +1 -1
- package/lib/utils/response.js +1 -1
- package/lib/utils/retention.js +1 -1
- package/lib/utils/safe-require.js +1 -1
- package/lib/utils/secret-encryption.js +1 -1
- package/lib/utils/secret-rotation.js +1 -1
- package/lib/utils/secure-compare.js +1 -1
- package/lib/utils/semver.d.ts +18 -0
- package/lib/utils/semver.js +120 -0
- package/lib/utils/sensitive-patterns.js +1 -1
- package/lib/utils/service-registry.js +1 -1
- package/lib/utils/ssrf.js +1 -1
- package/lib/validation/ai-schemas.js +1 -1
- package/lib/validation/common-schemas.js +1 -1
- package/lib/validation/dockerfile-static.js +1 -1
- package/lib/validation/index.d.ts +1 -1
- package/lib/validation/index.js +2 -2
- package/lib/validation/message-schemas.d.ts +73 -0
- package/lib/validation/message-schemas.js +63 -2
- package/lib/validation/middleware.js +1 -1
- package/lib/validation/pipeline-schemas.js +1 -1
- package/lib/validation/pipeline-template-schemas.js +1 -1
- package/lib/validation/plugin-base-images.js +1 -1
- package/lib/validation/plugin-catalog-detect.js +1 -1
- package/lib/validation/plugin-catalog-metadata.js +1 -1
- package/lib/validation/plugin-heuristics.js +1 -1
- package/lib/validation/plugin-lint.js +1 -1
- package/lib/validation/plugin-name-confusable.js +1 -1
- package/lib/validation/plugin-schemas.js +1 -1
- package/lib/validation/plugin-spec-schema.js +1 -1
- package/lib/validation/plugin-template-contract.js +1 -1
- package/package.json +11 -4
|
@@ -76,6 +76,34 @@ export function withProposalProvenance(headers, details) {
|
|
|
76
76
|
? askProposalAuditDetails(details)
|
|
77
77
|
: { ...details };
|
|
78
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* The permission a caller needs to COMMIT each proposal kind — the one fact the
|
|
81
|
+
* ask service and the dashboard must agree on, so it lives here rather than in
|
|
82
|
+
* either of them.
|
|
83
|
+
*
|
|
84
|
+
* `org-settings-edit` is null because it has no single answer: its requirement
|
|
85
|
+
* is the union of `permission` over the {@link ORG_SETTING_PROPOSAL_ALLOWLIST}
|
|
86
|
+
* rows the proposal actually touches, which only the proposal itself decides.
|
|
87
|
+
*
|
|
88
|
+
* NOT a gate anywhere. The service uses it to TELL the caller (and the model)
|
|
89
|
+
* whether a draft is appliable; the dashboard uses it to disable the Apply
|
|
90
|
+
* button and name what is missing. Enforcement stays with the owning service,
|
|
91
|
+
* which re-checks the caller's own token on the commit.
|
|
92
|
+
*/
|
|
93
|
+
export const ASK_PROPOSAL_PERMISSION = {
|
|
94
|
+
'pipeline': 'pipelines:write',
|
|
95
|
+
'plugin': 'plugins:write',
|
|
96
|
+
'template': 'templates:write',
|
|
97
|
+
'pipeline-edit': 'pipelines:write',
|
|
98
|
+
'plugin-edit': 'plugins:write',
|
|
99
|
+
'template-edit': 'templates:write',
|
|
100
|
+
'org-settings-edit': null,
|
|
101
|
+
// Filing a request, not making the change: any member who may install may ASK,
|
|
102
|
+
// and `plugin_installs:manage` decides. Same shape for the exemption below —
|
|
103
|
+
// `compliance:read` requests, `compliance:write` decides.
|
|
104
|
+
'install-change-request': 'plugins:install',
|
|
105
|
+
'compliance-exemption-request': 'compliance:read',
|
|
106
|
+
};
|
|
79
107
|
/**
|
|
80
108
|
* The `digestMode` vocabulary is MIRRORED, not imported: this module keeps zero
|
|
81
109
|
* runtime imports so the browser entry stays standalone. The type annotation
|
|
@@ -305,4 +333,4 @@ export function orgSettingRequests(changes) {
|
|
|
305
333
|
}
|
|
306
334
|
return [...bySurface.values()];
|
|
307
335
|
}
|
|
308
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNrLXByb3Bvc2Fscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9hc2stcHJvcG9zYWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUF3RXRDLGdGQUFnRjtBQUNoRixzQkFBc0I7QUFDdEIsZ0ZBQWdGO0FBRWhGLGlFQUFpRTtBQUNqRSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxXQUFXLENBQUM7QUFFOUMsdURBQXVEO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLFlBQVksQ0FBQztBQU9uRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxPQUEyQztJQUUzQyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLENBQUM7QUFDeEQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsa0JBQWtCLENBQUM7QUFXekQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsT0FBZ0I7SUFDaEQsTUFBTSxHQUFHLEdBQUcsT0FBcUQsQ0FBQztJQUNsRSxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3JGLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQ2hELElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDekUsT0FB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QUFJLENBQUMsR0FBRyxDQUFDLElBQUk7WUFDbkIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUaGUgc2hhcmVkIGNvbnRyYWN0IGJldHdlZW4gdGhlIGFzayBhZ2VudCdzIFBST1BPU0UgdG9vbHMgYW5kIHRoZSBicm93c2VyJ3NcbiAqIENPTkZJUk0gaGFuZGxlcnMuIFR3byB0aGluZ3MgbGl2ZSBoZXJlLCBhbmQgdGhleSBsaXZlIGhlcmUgYmVjYXVzZSBCT1RIIHNpZGVzXG4gKiBuZWVkIHRoZW06IGBhcGkvYXNrYCBidWlsZHMgaXRzIHRvb2wgc2NoZW1hIGZyb20gdGhpcyBtb2R1bGUsIHRoZSBmcm9udGVuZCdzXG4gKiBjb25maXJtIGhhbmRsZXIgYnVpbGRzIGl0cyByZXF1ZXN0IGZyb20gaXQsIGFuZCB0aGUgdGVzdHMgb2YgYm90aCBhc3NlcnRcbiAqIGFnYWluc3QgaXQuIEEgc2Vjb25kIGNvcHkgd291bGQgYmUgYSBzZWNvbmQgcG9saWN5LlxuICpcbiAqIERlcGVuZGVuY3ktZnJlZSBvbiBwdXJwb3NlIOKAlCBubyBydW50aW1lIGltcG9ydHMgYXQgYWxsIOKAlCBzbyB0aGUgYnJvd3NlciBjYW5cbiAqIGltcG9ydCBpdCB0aHJvdWdoIGFwaS1jb3JlJ3MgYC4vYXNrLXByb3Bvc2Fsc2AgZW50cnkgd2l0aG91dCBkcmFnZ2luZyBpbiB0aGVcbiAqIHNlcnZlciBncmFwaCAoZXhwcmVzcyAvIGp3dCAvIGlvcmVkaXMpLiBUaGUgb25seSBpbXBvcnRzIGFyZSBgaW1wb3J0IHR5cGVgLFxuICogd2hpY2ggdGhlIGNvbXBpbGVyIGVyYXNlcy5cbiAqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogMS4gUFJPVkVOQU5DRVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEV2ZXJ5IGNvbW1pdCB0aGF0IHN0YXJ0ZWQgbGlmZSBhcyBhbiBhZ2VudCBkcmFmdCBzdGFtcHNcbiAqIGBkZXRhaWxzOiB7IHByb3Bvc2VkQnk6ICdhc2stYWdlbnQnIH1gIG9udG8gaXRzIGF1ZGl0IGV2ZW50LiBUaGUgYXVkaXQgdHJhaWxcbiAqIGlzIGhhc2gtY2hhaW5lZCBhbmQgdGFtcGVyLWV2aWRlbnQsIGJ1dCB3aXRob3V0IHRoaXMgZmllbGQgaXQgY2Fubm90XG4gKiBkaXN0aW5ndWlzaCBcInRoZSBhZG1pbiBjaGFuZ2VkIHRoaXNcIiBmcm9tIFwiYW4gQUkgZHJhZnRlZCBpdCBhbmQgdGhlIGFkbWluXG4gKiBjbGlja2VkIEFwcGx5XCIg4oCUIHRoZSB0d28gbWVhbiB2ZXJ5IGRpZmZlcmVudCB0aGluZ3MgaW4gYW4gaW5jaWRlbnQgcmV2aWV3LlxuICogVGhlIGNvbnN0YW50IGV4aXN0cyBzbyB0aGUgbGl0ZXJhbCBpcyBub3QgcmV0eXBlZCBpbiB0d28gY29kZWJhc2VzLCB3aGVyZSBhXG4gKiB0eXBvIHdvdWxkIHNpbGVudGx5IHByb2R1Y2UgYW4gdW5xdWVyeWFibGUgdHJhaWwuXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIDIuIFRIRSBPUkctU0VUVElOR1MgQUxMT1dMSVNUXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogVGhpcyBpcyBhbiBBTExPV0xJU1QsIG5vdCBhIGRlbnlsaXN0LCBhbmQgdGhlIGRpc3RpbmN0aW9uIGlzIHRoZSB3aG9sZSBwb2ludDpcbiAqIGEgc2V0dGluZyBhZGRlZCB0byB0aGUgcGxhdGZvcm0gdG9tb3Jyb3cgaXMgVU5BVkFJTEFCTEUgdG8gdGhlIGFnZW50IHVudGlsXG4gKiBzb21lb25lIGRlbGliZXJhdGVseSBhZGRzIGl0IGhlcmUsIHJhdGhlciB0aGFuIGJlaW5nIGV4cG9zZWQgYnkgb21pc3Npb24uXG4gKiBJZiB5b3UgYXJlIHJlYWRpbmcgdGhpcyBiZWNhdXNlIGEgcHJvcG9zYWwgd2FzIHJlZnVzZWQsIHRoZSBmaXggaXMgdG8gYWRkIHRoZVxuICogZmllbGQgYmVsb3cgV0lUSCBpdHMgYHdoeWAg4oCUIG5vdCB0byBsb29zZW4ge0BsaW5rIHBpY2tBbGxvd2VkfS5cbiAqXG4gKiBBIGZpZWxkIGVhcm5zIGEgcGxhY2UgaGVyZSBvbmx5IGlmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGhvbGQuIFRoZXkgd2VyZVxuICogY2hlY2tlZCBhZ2FpbnN0IHRoZSByb3V0ZXMsIG5vdCBhc3N1bWVkOlxuICpcbiAqICAtICoqTm8gc3RlcC11cC4qKiBBIHJvdXRlIGNhcnJ5aW5nIGByZXF1aXJlU3RlcFVwYCBpcyBvdXQsIG5vIGV4Y2VwdGlvbnMuXG4gKiAgICBTdGVwLXVwIG1lYW5zIHRoZSBwbGF0Zm9ybSBhbHJlYWR5IGRlY2lkZWQgYSBsaXZlIHNlc3Npb24gaXMgbm90IGVub3VnaFxuICogICAgYXV0aG9yaXR5OyBhIGNoYXQgcHJvcG9zYWwgaXMgc3RyaWN0bHkgbGVzcy4gVGhpcyBpcyB3aGF0IGtlZXBzXG4gKiAgICBgUFVUIC9vcmdhbml6YXRpb24vYWktY29uZmlnYCBvdXQgKGl0IHBlcnNpc3RzIHBlci1vcmcgcHJvdmlkZXIgU0VDUkVUUyksXG4gKiAgICBhbG9uZyB3aXRoIHRoZSBNRkEgLyBwYXNzd29yZCAvIGF1dGhlbnRpY2F0b3IgcG9saWNpZXMsXG4gKiAgICBgUFVUIC9wbHVnaW5zL2luc3RhbGwtcG9saWN5YCwgb3JnIHJlc3RvcmUgYW5kIHRyYW5zZmVyLW93bmVyLlxuICogIC0gKipOb3QgYSBzZWN1cml0eSBjb250cm9sLioqIE1GQSAvIHBhc3N3b3JkIC8gYXV0aGVudGljYXRvciAvIGltcGVyc29uYXRpb25cbiAqICAgIHBvbGljeSwgU1NPK1NBTUwgYW5kIGl0cyBncm91cCBtYXBwaW5ncywgdmVyaWZpZWQgZG9tYWlucyBhbmQgZG9tYWluLWJhc2VkXG4gKiAgICBqb2luLCBqb2luLXJlcXVlc3QgZGVjaXNpb25zLCB0cmFuc2Zlci1vd25lciBhbmQgdGVhbSBsaWZlY3ljbGUgYXJlIEFCU0VOVFxuICogICAgaGVyZSByYXRoZXIgdGhhbiBnYXRlZCB3aXRoaW4g4oCUIFwicmVsYXggdGhlIE1GQSBwb2xpY3lcIiBpcyBwcmVjaXNlbHkgd2hhdCBhblxuICogICAgaW5qZWN0aW9uIHBheWxvYWQgYXNrcyBmb3IsIGFuZCBpdCBhcnJpdmVzIHRocm91Z2ggdGV4dCB0aGUgYWdlbnQgYWxyZWFkeVxuICogICAgcmVhZHMuIEFic2VudCBjYW5ub3QgYmUgYXJndWVkIHdpdGg7IGdhdGVkIGNhbi5cbiAqICAtICoqQ2FycmllcyBubyBzZWNyZXQgYW5kIG5vIGNhbGxiYWNrIHRhcmdldC4qKiBBbiBBUEkgdGhhdCByZXR1cm5zXG4gKiAgICBgaGFzV2ViaG9va1NlY3JldGAgaW5zdGVhZCBvZiB0aGUgc2VjcmV0IGlzIHRlbGxpbmcgeW91IHRoZSBmaWVsZCBjYW5ub3QgYmVcbiAqICAgIGRpZmZlZCwgc28gaXQgY2Fubm90IGJlIHJldmlld2VkLCBzbyBpdCBjYW5ub3QgYmUgcHJvcG9zZWQuIFdlYmhvb2sgVVJMc1xuICogICAgYW5kIGVtYWlsIGFkZHJlc3NlcyBhcmUgb3V0IGZvciB0aGUgc2FtZSByZWFzb24gcGx1cyBvbmUgbW9yZTogdGhleSBhcmVcbiAqICAgIGV4ZmlsdHJhdGlvbiB0YXJnZXRzLCBhbmQgYSBjb25maXJtYXRpb24gbWFpbCB0byBhbiBhdHRhY2tlci1jaG9zZW4gYWRkcmVzc1xuICogICAgaXMgYSBzZW5kIHRoZSBwbGF0Zm9ybSBwZXJmb3JtcyBvbiB0aGUgbW9kZWwncyBzYXktc28uXG4gKiAgLSAqKlJldmlld2FibGUgYXMgYSBkaWZmLioqIEEgc2NhbGFyIHdpdGggYSBjbG9zZWQgc2hhcGUgKGJvb2xlYW4sIGJvdW5kZWRcbiAqICAgIGludGVnZXIsIHNtYWxsIGVudW0pLiBBIGxpc3Qgb2Ygb3BhcXVlIHVzZXIgaWRzIHJlbmRlcnMgYXMgaWRzIGluIGEgY2FyZFxuICogICAgbm9ib2R5IGNhbiBjaGVjaywgc28gcmVjaXBpZW50IExJU1RTIGFyZSBvdXQgZXZlbiB0aG91Z2ggY2FkZW5jZSBpcyBpbi5cbiAqXG4gKiBFYWNoIGVudHJ5IG5hbWVzIHRoZSBBUEkgdGhhdCBhcHBsaWVzIGl0LiBUaGUgYnJvd3NlciBhcHBsaWVzIGl0IHRocm91Z2ggdGhlXG4gKiBVU0VSJ3Mgb3duIHNlc3Npb24gYW5kIHRoZSB1c2VyJ3Mgb3duIHBlcm1pc3Npb25zIOKAlCB0aGUgYWdlbnQgbmV2ZXIgd3JpdGVzIOKAlFxuICogc28gYSBwcm9wb3NhbCBhIG1lbWJlciBtYXkgbm90IGNvbW1pdCBzaW1wbHkgNDAzcyBhdCB0aGUgcm91dGUsIGV4YWN0bHkgYXMgYVxuICogaGFuZC1tYWRlIHJlcXVlc3Qgd291bGQuXG4gKlxuICogUnVsZSAxMCBsaXZlcyBpbiB7QGxpbmsgcGlja0FsbG93ZWR9OiBhIGNhbmRpZGF0ZSBjYXJyeWluZyBhIGZpZWxkIG91dHNpZGVcbiAqIHRoaXMgbGlzdCBpcyB0aGUgaW5qZWN0aW9uIHNpZ25hbCwgc28gdGhlIHJlZnVzZWQgbmFtZXMgY29tZSBiYWNrIHRvIHRoZVxuICogY2FsbGVyIHRvIGJlIGNvdW50ZWQgYW5kIGxvZ2dlZCByYXRoZXIgdGhhbiBiZWluZyBxdWlldGx5IGRyb3BwZWQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQZXJtaXNzaW9uIH0gZnJvbSAnLi9wZXJtaXNzaW9ucy5qcyc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpblNlY3VyaXR5RGlnZXN0TW9kZSB9IGZyb20gJy4vd2lyZS12b2NhYnVsYXJ5LmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFByb3ZlbmFuY2UgKHJ1bGUgNilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBUaGUgYHByb3Bvc2VkQnlgIHZhbHVlIGV2ZXJ5IGFnZW50LWRyYWZ0ZWQgY29tbWl0IHJlY29yZHMuICovXG5leHBvcnQgY29uc3QgQVNLX0FHRU5UX1BST1BPU0VSID0gJ2Fzay1hZ2VudCc7XG5cbi8qKiBUaGUgYXVkaXQgYGRldGFpbHNgIGtleSB0aGF0IGNhcnJpZXMgcHJvdmVuYW5jZS4gKi9cbmV4cG9ydCBjb25zdCBQUk9QT1NFRF9CWV9ERVRBSUxfS0VZID0gJ3Byb3Bvc2VkQnknO1xuXG4vKiogVGhlIHByb3ZlbmFuY2UgZnJhZ21lbnQgbWVyZ2VkIGludG8gYSBgUmVtb3RlQXVkaXRFdmVudC5kZXRhaWxzYC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXNrUHJvcG9zYWxQcm92ZW5hbmNlIHtcbiAgcmVhZG9ubHkgcHJvcG9zZWRCeTogdHlwZW9mIEFTS19BR0VOVF9QUk9QT1NFUjtcbn1cblxuLyoqXG4gKiBNZXJnZSBhZ2VudCBwcm92ZW5hbmNlIGludG8gYW4gYXVkaXQgZXZlbnQncyBmcmVlLWZvcm0gYGRldGFpbHNgLlxuICogUHJvdmVuYW5jZSBpcyBhcHBsaWVkIExBU1Qgc28gYSBjYWxsZXItc3VwcGxpZWQgYHByb3Bvc2VkQnlgIGNhbm5vdCBvdmVyd3JpdGVcbiAqIGl0IOKAlCB0aGUgcG9pbnQgb2YgdGhlIGZpZWxkIGlzIHRoYXQgaXQgaXMgbm90IG5lZ290aWFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc2tQcm9wb3NhbEF1ZGl0RGV0YWlscyhcbiAgZGV0YWlscz86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pixcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgQXNrUHJvcG9zYWxQcm92ZW5hbmNlIHtcbiAgcmV0dXJuIHsgLi4uZGV0YWlscywgcHJvcG9zZWRCeTogQVNLX0FHRU5UX1BST1BPU0VSIH07XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgSEVBREVSIGEgcHJvcG9zYWwgY29tbWl0IHN0YW1wcywgYW5kIHRoZSBvbmx5IGNoYW5uZWwgcHJvdmVuYW5jZVxuICogdHJhdmVscyBvbi5cbiAqXG4gKiBBIEhFQURFUiByYXRoZXIgdGhhbiBhIGJvZHkgZmllbGQsIGZvciB0aHJlZSByZWFzb25zOlxuICpcbiAqICAtICoqSXQgY2Fubm90IGNvbGxpZGUuKiogYHByb3Bvc2VkQnlgIGluIGEgYm9keSB3b3VsZCBiZSBhIG5ldyBrZXkgaW4gc2l4XG4gKiAgICBkaWZmZXJlbnQgZG9tYWluIHNjaGVtYXMg4oCUIGBQaXBlbGluZVVwZGF0ZVNjaGVtYWAsIHRoZSBwbHVnaW4vdGVtcGxhdGVcbiAqICAgIHVwZGF0ZSBzY2hlbWFzLCB0aHJlZSBub3RpZmljYXRpb24vc2V0dGluZ3Mgc2NoZW1hcyDigJQgdHdvIG9mIHdoaWNoIGFyZVxuICogICAgYC5zdHJpY3QoKWAgYW5kIHRoZSByZXN0IG9mIHdoaWNoIGZlZWQgYE9iamVjdC5rZXlzKGJvZHkpYCBzdHJhaWdodCBpbnRvXG4gKiAgICB0aGUgdXBkYXRlJ3MgY29sdW1uIGxpc3QgYW5kIHRoZSBhdWRpdCdzIGBmaWVsZHNgLiBBIGZpZWxkIG5hbWVkIGFmdGVyIGFuXG4gKiAgICBhdWRpdCBrZXkgd291bGQgdGhlbiBiZSBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgcmVhbCBvbmUsIGFuZCB0aGUgZGF5IGFcbiAqICAgIGRvbWFpbiBncm93cyBpdHMgb3duIGBwcm9wb3NlZEJ5YCB0aGUgdHdvIG1lYW5pbmdzIG1lcmdlIHNpbGVudGx5LlxuICogIC0gKipJdCBpcyB0cmFuc3BvcnQgbWV0YWRhdGEsIGFuZCBzdGF5cyBvdXQgb2YgdGhlIHBheWxvYWQuKiogTm90aGluZ1xuICogICAgZG93bnN0cmVhbSBvZiBgdmFsaWRhdGVCb2R5YCBldmVyIHNlZXMgaXQsIHNvIGl0IGNhbm5vdCBiZSBwZXJzaXN0ZWQsIGNhbm5vdFxuICogICAgd2lkZW4gYSBkaWZmLCBhbmQgY2Fubm90IHJlYWNoIGEgc2VydmljZSB0aGF0IGZvcndhcmRzIHRoZSBib2R5IG9ud2FyZC5cbiAqICAtICoqVGhlIHBsYXRmb3JtIGFscmVhZHkgZG9lcyB0aGlzLioqIGBYLVN0ZXAtVXAtVG9rZW5gIGlzIHRoZSBzYW1lIHNoYXBlIG9mXG4gKiAgICB0aGluZyDigJQgYSBwZXItcmVxdWVzdCBhc3NlcnRpb24gYWJvdXQgSE9XIHRoZSBjYWxsIHdhcyBtYWRlIHJhdGhlciB0aGFuXG4gKiAgICBXSEFUIGl0IGNoYW5nZXMg4oCUIGFuZCByaWRlcyBhIGhlYWRlciBmb3IgdGhlIHNhbWUgcmVhc29ucy5cbiAqXG4gKiBMb3dlci1jYXNlIGJlY2F1c2UgdGhhdCBpcyBob3cgTm9kZSBub3JtYWxpc2VzIGluY29taW5nIGhlYWRlciBuYW1lczsgdGhlXG4gKiBicm93c2VyIHNlbmRzIGBYLVBCLVByb3Bvc2VkLUJ5YCwgd2hpY2ggYXJyaXZlcyBoZXJlLlxuICovXG5leHBvcnQgY29uc3QgQVNLX1BST1BPU0VEX0JZX0hFQURFUiA9ICd4LXBiLXByb3Bvc2VkLWJ5JztcblxuLyoqXG4gKiBXaGF0IGEgcmVxdWVzdCdzIHByb3ZlbmFuY2UgaGVhZGVyIGNsYWltcy5cbiAqXG4gKiBgZm9yZWlnbmAgaXMgYW55IHZhbHVlIHRoYXQgaXMgbm90IEVYQUNUTFkge0BsaW5rIEFTS19BR0VOVF9QUk9QT1NFUn0g4oCUIHRoZXJlXG4gKiBpcyBvbmUgbGVnaXRpbWF0ZSBwcm9wb3NlciBhbmQgbm8gZnJlZS1mb3JtIHRleHQsIHNvIGFueXRoaW5nIGVsc2UgaXMgYSBidWdcbiAqIG9yIGEgZm9yZ2VyeSBhbmQgaXMgbmFtZWQgYXMgc3VjaCByYXRoZXIgdGhhbiBmb2xkZWQgaW50byBgbm9uZWAuXG4gKi9cbmV4cG9ydCB0eXBlIFByb3Bvc2VyQ2xhaW0gPSAnbm9uZScgfCAnYXNrLWFnZW50JyB8ICdmb3JlaWduJztcblxuLyoqXG4gKiBSZWFkIHRoZSBwcm92ZW5hbmNlIGNsYWltIG9mZiBhIHJlcXVlc3QncyBoZWFkZXIgYmFnLlxuICpcbiAqIERlbGliZXJhdGVseSBleGFjdDogbm8gdHJpbW1pbmcsIG5vIGNhc2UgZm9sZGluZywgbm8gcHJlZml4IG1hdGNoaW5nLiBUaGVcbiAqIG9ubHkgc2VuZGVyIGlzIHRoZSBicm93c2VyJ3MgY29uZmlybSBwYXRoLCB3aGljaCBzdGFtcHMgdGhlIHNoYXJlZCBjb25zdGFudCxcbiAqIHNvIGV2ZXJ5IG90aGVyIHZhbHVlIGlzIHJlZnVzZWQgcmF0aGVyIHRoYW4gcmVwYWlyZWQuIFRoaXMgaXMgd2hhdCBrZWVwcyBhXG4gKiBjbGllbnQgZnJvbSB3cml0aW5nIGFyYml0cmFyeSBhdWRpdCBgZGV0YWlsc2Ag4oCUIHRoZSBoZWFkZXIncyB3aG9sZSB2b2NhYnVsYXJ5XG4gKiBpcyBvbmUgd29yZCwgYW5kIHRoZSB3b3JkIGlzIG5vdCB0aGUgY2xpZW50J3MgdG8gY2hvb3NlLlxuICpcbiAqIFRha2VzIHRoZSBoZWFkZXIgQkFHIChgcmVxLmhlYWRlcnNgKSByYXRoZXIgdGhhbiBhIHJlcXVlc3QsIHNvIHRoaXMgbW9kdWxlXG4gKiBrZWVwcyBpdHMgemVybyBydW50aW1lIGltcG9ydHMgYW5kIHRoZSBicm93c2VyIGNhbiBzdGlsbCBpbXBvcnQgdGhlIGNvbnN0YW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZFByb3Bvc2VyQ2xhaW0oaGVhZGVyczogdW5rbm93bik6IFByb3Bvc2VyQ2xhaW0ge1xuICBjb25zdCBiYWcgPSBoZWFkZXJzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY29uc3QgcmF3ID0gYmFnICYmIHR5cGVvZiBiYWcgPT09ICdvYmplY3QnID8gYmFnW0FTS19QUk9QT1NFRF9CWV9IRUFERVJdIDogdW5kZWZpbmVkO1xuICBjb25zdCB2YWx1ZSA9IEFycmF5LmlzQXJyYXkocmF3KSA/IHJhd1swXSA6IHJhdztcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gJ25vbmUnO1xuICByZXR1cm4gdmFsdWUgPT09IEFTS19BR0VOVF9QUk9QT1NFUiA/ICdhc2stYWdlbnQnIDogJ2ZvcmVpZ24nO1xufVxuXG4vKipcbiAqIFRoZSBhdWRpdCBgZGV0YWlsc2AgZm9yIGEgd3JpdGUsIHdpdGggcHJvdmVuYW5jZSBmb2xkZWQgaW4gd2hlbiDigJQgYW5kIE9OTFlcbiAqIHdoZW4g4oCUIHRoZSByZXF1ZXN0IGNhcnJpZXMgdGhlIGFnZW50IG1hcmtlci5cbiAqXG4gKiBgZGV0YWlsc2AgaXMgd2hhdCB0aGUgSEFORExFUiBidWlsdCBhbmQgc3RheXMgYXV0aG9yaXRhdGl2ZS4gUHJvdmVuYW5jZSBpc1xuICogYWRkaXRpdmU6IHRoZSBPTkxZIGtleSBpdCBjYW4gZXZlciB3cml0ZSBpcyBgcHJvcG9zZWRCeWAsIHNvIGV2ZXJ5IGZpZWxkIHRoZVxuICogaGFuZGxlciBzZXQgc3Vydml2ZXMgdW50b3VjaGVkLCBhbmQge0BsaW5rIGFza1Byb3Bvc2FsQXVkaXREZXRhaWxzfSBhcHBsaWVzXG4gKiB0aGF0IG9uZSBrZXkgTEFTVCBzbyBhIGBwcm9wb3NlZEJ5YCBhcnJpdmluZyBmcm9tIGFueXdoZXJlIGVsc2UgY2Fubm90IHNwZWFrXG4gKiBpbiBpdHMgcGxhY2UuIEEgcmVxdWVzdCBjYXJyeWluZyBubyBtYXJrZXIsIG9yIGEgYGZvcmVpZ25gIG9uZSwgZ2V0cyB0aGVcbiAqIGhhbmRsZXIncyBkZXRhaWxzIHVuY2hhbmdlZCDigJQgYW4gb3JkaW5hcnkgZWRpdCByZWNvcmRzIG5vIGBwcm9wb3NlZEJ5YCBhdFxuICogYWxsLCB3aGljaCBpcyB0aGUgZGlzdGluY3Rpb24gdGhlIGZpZWxkIGV4aXN0cyB0byBtYWtlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFByb3Bvc2FsUHJvdmVuYW5jZShcbiAgaGVhZGVyczogdW5rbm93bixcbiAgZGV0YWlscz86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pixcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHJlYWRQcm9wb3NlckNsYWltKGhlYWRlcnMpID09PSAnYXNrLWFnZW50J1xuICAgID8gYXNrUHJvcG9zYWxBdWRpdERldGFpbHMoZGV0YWlscylcbiAgICA6IHsgLi4uZGV0YWlscyB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGhlIGFsbG93bGlzdFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEEgdmFsdWUgYW4gYWxsb3dsaXN0ZWQgb3JnIHNldHRpbmcgY2FuIGhvbGQuICovXG5leHBvcnQgdHlwZSBPcmdTZXR0aW5nVmFsdWUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuO1xuXG4vKiogV2hpY2ggcGVyLW9yZyByZWNvcmQgKGFuZCB0aGVyZWZvcmUgd2hpY2ggQVBJKSBhIGZpZWxkIGJlbG9uZ3MgdG8uICovXG5leHBvcnQgdHlwZSBPcmdTZXR0aW5nU3VyZmFjZSA9XG4gIHwgJ3JlcG9ydGluZydcbiAgfCAnY29tcGxpYW5jZU5vdGlmaWNhdGlvbnMnXG4gIHwgJ3BsdWdpblNlY3VyaXR5Tm90aWZpY2F0aW9ucyc7XG5cbi8qKlxuICogRXZlcnkgcHJvcG9zYWJsZSBzZXR0aW5nLCBhcyBgPHN1cmZhY2U+LjxmaWVsZD5gLiBXcml0aW5nIHRoZSB1bmlvbiBvdXQgYnlcbiAqIGhhbmQgKHJhdGhlciB0aGFuIGluZmVycmluZyBpdCBmcm9tIHRoZSBhcnJheSkgaXMgZGVsaWJlcmF0ZTogdGhlIGtleSBzcGFjZVxuICogaXMgdGhlIGNvbnRyYWN0IHRoZSB0b29sIHNjaGVtYSBhbmQgdGhlIGNvbmZpcm0gaGFuZGxlciBzaGFyZSwgc28gaXQgaXNcbiAqIHN0YXRlZCBvbmNlLCBleHBsaWNpdGx5LCBhbmQgYSB0eXBvIGluIGFuIGVudHJ5IGJlbG93IGlzIGEgY29tcGlsZSBlcnJvci5cbiAqL1xuZXhwb3J0IHR5cGUgT3JnU2V0dGluZ0tleSA9XG4gIHwgJ3JlcG9ydGluZy5pbmNpZGVudFdpbmRvd0hvdXJzJ1xuICB8ICdjb21wbGlhbmNlTm90aWZpY2F0aW9ucy5ub3RpZnlPbkJsb2NrJ1xuICB8ICdjb21wbGlhbmNlTm90aWZpY2F0aW9ucy5ub3RpZnlPbldhcm5pbmcnXG4gIHwgJ2NvbXBsaWFuY2VOb3RpZmljYXRpb25zLmVtYWlsRW5hYmxlZCdcbiAgfCAnY29tcGxpYW5jZU5vdGlmaWNhdGlvbnMuZGlnZXN0TW9kZSdcbiAgfCAncGx1Z2luU2VjdXJpdHlOb3RpZmljYXRpb25zLm5vdGlmeVJlc2NhbidcbiAgfCAncGx1Z2luU2VjdXJpdHlOb3RpZmljYXRpb25zLmRpZ2VzdE1vZGUnO1xuXG4vKiogVGhlIGNsb3NlZCBzaGFwZSBhIHByb3Bvc2VkIHZhbHVlIG11c3QgbWF0Y2ggYmVmb3JlIGl0IGlzIGFjY2VwdGVkLiAqL1xuZXhwb3J0IHR5cGUgT3JnU2V0dGluZ1NoYXBlID1cbiAgfCB7IHJlYWRvbmx5IGtpbmQ6ICdib29sZWFuJyB9XG4gIHwgeyByZWFkb25seSBraW5kOiAnaW50ZWdlcic7IHJlYWRvbmx5IG1pbjogbnVtYmVyOyByZWFkb25seSBtYXg6IG51bWJlciB9XG4gIHwgeyByZWFkb25seSBraW5kOiAnZW51bSc7IHJlYWRvbmx5IHZhbHVlczogcmVhZG9ubHkgc3RyaW5nW10gfTtcblxuLyoqIE9uZSBwcm9wb3NhYmxlIG9yZyBzZXR0aW5nLiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmdTZXR0aW5nU3BlYyB7XG4gIC8qKiBTdGFibGUgcHJvcG9zYWwga2V5IOKAlCBgPHN1cmZhY2U+LjxmaWVsZD5gLiBUaGlzIGlzIHdoYXQgdGhlIG1vZGVsIG5hbWVzLiAqL1xuICByZWFkb25seSBrZXk6IE9yZ1NldHRpbmdLZXk7XG4gIHJlYWRvbmx5IHN1cmZhY2U6IE9yZ1NldHRpbmdTdXJmYWNlO1xuICAvKiogVGhlIHJlcXVlc3QtYm9keSBmaWVsZCBuYW1lIHRoZSBBUEkgZXhwZWN0cy4gKi9cbiAgcmVhZG9ubHkgZmllbGQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc2hhcGU6IE9yZ1NldHRpbmdTaGFwZTtcbiAgLyoqIFRoZSByb3V0ZSB0aGF0IGFwcGxpZXMgaXQsIGNhbGxlZCBieSB0aGUgQlJPV1NFUiB3aXRoIHRoZSB1c2VyJ3Mgc2Vzc2lvbi4gKi9cbiAgcmVhZG9ubHkgYXBpOiB7IHJlYWRvbmx5IG1ldGhvZDogJ1BVVCc7IHJlYWRvbmx5IHBhdGg6IHN0cmluZyB9O1xuICAvKiogVGhlIHBlcm1pc3Npb24gdGhhdCByb3V0ZSByZXF1aXJlcyBvZiB0aGUgY2FsbGVyLiAqL1xuICByZWFkb25seSBwZXJtaXNzaW9uOiBQZXJtaXNzaW9uO1xuICAvKiogU2hvcnQgaHVtYW4gbGFiZWwgZm9yIHRoZSBjb25maXJtIGNhcmQuICovXG4gIHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG4gIC8qKiBXSFkgdGhpcyBmaWVsZCBpcyBzYWZlIHRvIHByb3Bvc2UuIEV2ZXJ5IGVudHJ5IHN0YXRlcyBpdHMgb3duIGNhc2UuICovXG4gIHJlYWRvbmx5IHdoeTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBgZGlnZXN0TW9kZWAgdm9jYWJ1bGFyeSBpcyBNSVJST1JFRCwgbm90IGltcG9ydGVkOiB0aGlzIG1vZHVsZSBrZWVwcyB6ZXJvXG4gKiBydW50aW1lIGltcG9ydHMgc28gdGhlIGJyb3dzZXIgZW50cnkgc3RheXMgc3RhbmRhbG9uZS4gVGhlIHR5cGUgYW5ub3RhdGlvblxuICogbWFrZXMgYSBSRU1PVkVEIG1vZGUgYSBjb21waWxlIGVycm9yIGhlcmUsIGFuZCBgYXNrLXByb3Bvc2Fscy50ZXN0LnRzYCBhc3NlcnRzXG4gKiB0aGUgbGlzdCBhZ2FpbnN0IGBQTFVHSU5fU0VDVVJJVFlfRElHRVNUX01PREVTYCBzbyBhbiBBRERFRCBvbmUgY2Fubm90IGRyaWZ0XG4gKiBlaXRoZXIuXG4gKi9cbmNvbnN0IERJR0VTVF9NT0RFUzogcmVhZG9ubHkgUGx1Z2luU2VjdXJpdHlEaWdlc3RNb2RlW10gPSBbJ2ltbWVkaWF0ZScsICdkYWlseScsICd3ZWVrbHknXTtcblxuLyoqXG4gKiBUaGUgYWxsb3dsaXN0LiBBZGRpbmcgYW4gZW50cnkgaXMgYSBkZWxpYmVyYXRlIGFjdDogbmFtZSB0aGUgcm91dGUgeW91XG4gKiBjaGVja2VkLCBjb25maXJtIGl0IGNhcnJpZXMgbm8gYHJlcXVpcmVTdGVwVXBgLCBhbmQgd3JpdGUgdGhlIGB3aHlgLlxuICovXG5leHBvcnQgY29uc3QgT1JHX1NFVFRJTkdfUFJPUE9TQUxfQUxMT1dMSVNUOiByZWFkb25seSBPcmdTZXR0aW5nU3BlY1tdID0gW1xuICB7XG4gICAga2V5OiAncmVwb3J0aW5nLmluY2lkZW50V2luZG93SG91cnMnLFxuICAgIHN1cmZhY2U6ICdyZXBvcnRpbmcnLFxuICAgIGZpZWxkOiAnaW5jaWRlbnRXaW5kb3dIb3VycycsXG4gICAgc2hhcGU6IHsga2luZDogJ2ludGVnZXInLCBtaW46IDEsIG1heDogNzIwIH0sXG4gICAgYXBpOiB7IG1ldGhvZDogJ1BVVCcsIHBhdGg6ICcvcmVwb3J0cy9zZXR0aW5ncy9pbmNpZGVudHMnIH0sXG4gICAgcGVybWlzc2lvbjogJ29yZ19zZXR0aW5nczp3cml0ZScsXG4gICAgbGFiZWw6ICdJbmNpZGVudCBjb3JyZWxhdGlvbiB3aW5kb3cgKGhvdXJzKScsXG4gICAgd2h5OlxuICAgICAgJ0FuYWx5dGljcyB0dW5pbmcgb25seTogaXQgZGVjaWRlcyBob3cgbG9uZyBhZnRlciBhIGRlcGxveSBhbiBpbmNpZGVudCBpcyAnXG4gICAgICArICdhdHRyaWJ1dGVkIHRvIHRoYXQgZGVwbG95IHdoZW4gRE9SQSBtZXRyaWNzIGFyZSBjb21wdXRlZC4gSXQgZ3JhbnRzIG5vdGhpbmcsICdcbiAgICAgICsgJ3JldmVhbHMgbm90aGluZyBhbmQgcmVhY2hlcyBubyBvbmUg4oCUIHRoZSB3b3JzdCBvdXRjb21lIG9mIGEgd3JvbmcgdmFsdWUgaXMgYSAnXG4gICAgICArICdtaXNsZWFkaW5nIGNoYW5nZS1mYWlsdXJlIHJhdGUsIHdoaWNoIHRoZSBuZXh0IGVkaXQgY29ycmVjdHMuIFRoZSByb3V0ZSAnXG4gICAgICArICdyZWplY3RzIHRoZSBzaWJsaW5nIHJldGVudGlvbiBmaWVsZHMgb3V0cmlnaHQgKHRoZXkgYXJlIGJpbGxpbmctb3duZWQpLCBzbyAnXG4gICAgICArICd0aGlzIGlzIHRoZSB3aG9sZSB3cml0YWJsZSBzdXJmYWNlLiBCb3VuZGVkIGludGVnZXIsIHNvIHRoZSBkaWZmIGlzIG9uZSBudW1iZXIuJyxcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbXBsaWFuY2VOb3RpZmljYXRpb25zLm5vdGlmeU9uQmxvY2snLFxuICAgIHN1cmZhY2U6ICdjb21wbGlhbmNlTm90aWZpY2F0aW9ucycsXG4gICAgZmllbGQ6ICdub3RpZnlPbkJsb2NrJyxcbiAgICBzaGFwZTogeyBraW5kOiAnYm9vbGVhbicgfSxcbiAgICBhcGk6IHsgbWV0aG9kOiAnUFVUJywgcGF0aDogJy9jb21wbGlhbmNlL25vdGlmaWNhdGlvbi1wcmVmZXJlbmNlcycgfSxcbiAgICBwZXJtaXNzaW9uOiAnY29tcGxpYW5jZTp3cml0ZScsXG4gICAgbGFiZWw6ICdOb3RpZnkgd2hlbiBjb21wbGlhbmNlIGJsb2NrcyBhbiBhY3Rpb24nLFxuICAgIHdoeTpcbiAgICAgICdBIGRlbGl2ZXJ5IHByZWZlcmVuY2UsIG5vdCBhbiBlbmZvcmNlbWVudCBjb250cm9sOiB0aGUgYmxvY2sgaGFwcGVucyBlaXRoZXIgJ1xuICAgICAgKyAnd2F5IGFuZCB0aGUgcG9saWN5IHRoYXQgY2F1c2VkIGl0IGlzIHVuY2hhbmdlZC4gVHVybmluZyBpdCBvZmYgbWFrZXMgdGhlIG9yZyAnXG4gICAgICArICdxdWlldGVyLCBuZXZlciBtb3JlIHBlcm1pc3NpdmUuJyxcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbXBsaWFuY2VOb3RpZmljYXRpb25zLm5vdGlmeU9uV2FybmluZycsXG4gICAgc3VyZmFjZTogJ2NvbXBsaWFuY2VOb3RpZmljYXRpb25zJyxcbiAgICBmaWVsZDogJ25vdGlmeU9uV2FybmluZycsXG4gICAgc2hhcGU6IHsga2luZDogJ2Jvb2xlYW4nIH0sXG4gICAgYXBpOiB7IG1ldGhvZDogJ1BVVCcsIHBhdGg6ICcvY29tcGxpYW5jZS9ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMnIH0sXG4gICAgcGVybWlzc2lvbjogJ2NvbXBsaWFuY2U6d3JpdGUnLFxuICAgIGxhYmVsOiAnTm90aWZ5IG9uIGNvbXBsaWFuY2Ugd2FybmluZ3MnLFxuICAgIHdoeTogJ0FzIG5vdGlmeU9uQmxvY2sg4oCUIHdoaWNoIG5vbi1ibG9ja2luZyBmaW5kaW5ncyBhcmUgYW5ub3VuY2VkLCBub3Qgd2hhdCBpcyBlbmZvcmNlZC4nLFxuICB9LFxuICB7XG4gICAga2V5OiAnY29tcGxpYW5jZU5vdGlmaWNhdGlvbnMuZW1haWxFbmFibGVkJyxcbiAgICBzdXJmYWNlOiAnY29tcGxpYW5jZU5vdGlmaWNhdGlvbnMnLFxuICAgIGZpZWxkOiAnZW1haWxFbmFibGVkJyxcbiAgICBzaGFwZTogeyBraW5kOiAnYm9vbGVhbicgfSxcbiAgICBhcGk6IHsgbWV0aG9kOiAnUFVUJywgcGF0aDogJy9jb21wbGlhbmNlL25vdGlmaWNhdGlvbi1wcmVmZXJlbmNlcycgfSxcbiAgICBwZXJtaXNzaW9uOiAnY29tcGxpYW5jZTp3cml0ZScsXG4gICAgbGFiZWw6ICdTZW5kIGNvbXBsaWFuY2Ugbm90aWNlcyBieSBlbWFpbCcsXG4gICAgd2h5OlxuICAgICAgJ0Nob29zZXMgd2hldGhlciB0aGUgZXhpc3Rpbmcgbm90aWNlcyBnbyBvdXQgYnkgZW1haWwuIEl0IGRvZXMgbm90IG5hbWUgYSAnXG4gICAgICArICdyZWNpcGllbnQg4oCUIHRoZSBhZGRyZXNzIGxpc3QgaXMgcmVzb2x2ZWQgZnJvbSBvcmcgbWVtYmVyc2hpcCBhdCBzZW5kIHRpbWUg4oCUICdcbiAgICAgICsgJ3NvIGEgZmxpcHBlZCBib29sZWFuIGNhbiBuZXZlciByb3V0ZSBtYWlsIHNvbWV3aGVyZSBuZXcuJyxcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbXBsaWFuY2VOb3RpZmljYXRpb25zLmRpZ2VzdE1vZGUnLFxuICAgIHN1cmZhY2U6ICdjb21wbGlhbmNlTm90aWZpY2F0aW9ucycsXG4gICAgZmllbGQ6ICdkaWdlc3RNb2RlJyxcbiAgICBzaGFwZTogeyBraW5kOiAnZW51bScsIHZhbHVlczogRElHRVNUX01PREVTIH0sXG4gICAgYXBpOiB7IG1ldGhvZDogJ1BVVCcsIHBhdGg6ICcvY29tcGxpYW5jZS9ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMnIH0sXG4gICAgcGVybWlzc2lvbjogJ2NvbXBsaWFuY2U6d3JpdGUnLFxuICAgIGxhYmVsOiAnQ29tcGxpYW5jZSBub3RpY2UgY2FkZW5jZScsXG4gICAgd2h5OiAnQ2FkZW5jZSBvZiBhbiBleGlzdGluZyBub3RpY2UgdG8gZXhpc3RpbmcgcmVjaXBpZW50cy4gQ2xvc2VkIGVudW0sIHNvIHRoZSBkaWZmIGlzIG9uZSB3b3JkLicsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdwbHVnaW5TZWN1cml0eU5vdGlmaWNhdGlvbnMubm90aWZ5UmVzY2FuJyxcbiAgICBzdXJmYWNlOiAncGx1Z2luU2VjdXJpdHlOb3RpZmljYXRpb25zJyxcbiAgICBmaWVsZDogJ25vdGlmeVJlc2NhbicsXG4gICAgc2hhcGU6IHsga2luZDogJ2Jvb2xlYW4nIH0sXG4gICAgYXBpOiB7IG1ldGhvZDogJ1BVVCcsIHBhdGg6ICcvcGx1Z2lucy9zZWN1cml0eS1ub3RpZmljYXRpb25zJyB9LFxuICAgIHBlcm1pc3Npb246ICdvcmdfc2V0dGluZ3M6d3JpdGUnLFxuICAgIGxhYmVsOiAnTm90aWZ5IG9uIG5pZ2h0bHkgcmVzY2FuIGZpbmRpbmdzJyxcbiAgICB3aHk6XG4gICAgICAnR292ZXJucyB0aGUgTjMxIHJlc2NhbiBub3RpY2Ugb25seS4gVGhlIHNjYW4gR0FURVMgYXJlIHVudG91Y2hlZDogYSBidWlsZCB0aGF0ICdcbiAgICAgICsgJ3RyaXBzIFBMVUdJTl9WVUxOX0dBVEUgc3RpbGwgZmFpbHMgYW5kIHN0aWxsIHNlbmRzIE4zMCwgd2hpY2ggdGhpcyBmbGFnIGNhbm5vdCAnXG4gICAgICArICdzdXBwcmVzcy4gU28gaXQgY2hhbmdlcyBob3cgbm9pc3kgYW4gaW5mb3JtYXRpb25hbCBub3RpY2UgaXMsIG5vdCB3aGV0aGVyIGEgJ1xuICAgICAgKyAndnVsbmVyYWJsZSB2ZXJzaW9uIGNhbiBiZSBwdWJsaXNoZWQuJyxcbiAgfSxcbiAge1xuICAgIGtleTogJ3BsdWdpblNlY3VyaXR5Tm90aWZpY2F0aW9ucy5kaWdlc3RNb2RlJyxcbiAgICBzdXJmYWNlOiAncGx1Z2luU2VjdXJpdHlOb3RpZmljYXRpb25zJyxcbiAgICBmaWVsZDogJ2RpZ2VzdE1vZGUnLFxuICAgIHNoYXBlOiB7IGtpbmQ6ICdlbnVtJywgdmFsdWVzOiBESUdFU1RfTU9ERVMgfSxcbiAgICBhcGk6IHsgbWV0aG9kOiAnUFVUJywgcGF0aDogJy9wbHVnaW5zL3NlY3VyaXR5LW5vdGlmaWNhdGlvbnMnIH0sXG4gICAgcGVybWlzc2lvbjogJ29yZ19zZXR0aW5nczp3cml0ZScsXG4gICAgbGFiZWw6ICdQbHVnaW4gc2VjdXJpdHkgbm90aWNlIGNhZGVuY2UnLFxuICAgIHdoeTpcbiAgICAgICdDYWRlbmNlIG9mIHRoZSByZXNjYW4gbm90aWNlLiBOMzAgKFwidmVyc2lvbiBibG9ja2VkXCIpIGlzIGFsd2F5cyBpbW1lZGlhdGUgYW5kICdcbiAgICAgICsgJ2lnbm9yZXMgdGhpcyBmaWVsZCwgc28gdGhlIHVyZ2VudCBjaGFubmVsIGNhbm5vdCBiZSBzbG93ZWQgZG93bi4nLFxuICB9LFxuXTtcblxuLyoqXG4gKiBGaWVsZHMgREVMSUJFUkFURUxZIGV4Y2x1ZGVkLCB3aXRoIHRoZSByZWFzb24sIHNvIGEgZnV0dXJlIHJlYWRlciBkb2VzIG5vdFxuICogcmUtbGl0aWdhdGUgdGhlbSBhbmQgYSByZXZpZXdlciBjYW4gc2VlIHRoZXkgd2VyZSBjb25zaWRlcmVkIHJhdGhlciB0aGFuXG4gKiBtaXNzZWQuIFRoaXMgaXMgZG9jdW1lbnRhdGlvbiBvbmx5IOKAlCB7QGxpbmsgcGlja0FsbG93ZWR9IGNvbnN1bHRzIHRoZVxuICogYWxsb3dsaXN0IGFsb25lLCBhbmQgYSBmaWVsZCBhYnNlbnQgZnJvbSBCT1RIIGxpc3RzIGlzIHJlZnVzZWQgaWRlbnRpY2FsbHkuXG4gKi9cbmV4cG9ydCBjb25zdCBPUkdfU0VUVElOR19QUk9QT1NBTF9FWENMVVNJT05TOiBSZWFkb25seUFycmF5PHsgcmVhZG9ubHkgZmllbGQ6IHN0cmluZzsgcmVhZG9ubHkgd2h5OiBzdHJpbmcgfT4gPSBbXG4gIHsgZmllbGQ6ICdvcmdhbml6YXRpb24uYWlDb25maWcnLCB3aHk6ICdTdGVwLXVwIGdhdGVkIChQVVQgL29yZ2FuaXphdGlvbi9haS1jb25maWcpIGFuZCBwZXJzaXN0cyBwZXItb3JnIHByb3ZpZGVyIHNlY3JldHMuJyB9LFxuICB7IGZpZWxkOiAnb3JnYW5pemF0aW9uLm1mYVBvbGljeScsIHdoeTogJ1NlY3VyaXR5IGNvbnRyb2wgKyBzdGVwLXVwLiBMb29zZW5pbmcgaXQgcmVtb3ZlcyBhIGNvbnRyb2wgZm9yIGV2ZXJ5IG1lbWJlci4nIH0sXG4gIHsgZmllbGQ6ICdvcmdhbml6YXRpb24ucGFzc3dvcmRQb2xpY3knLCB3aHk6ICdTZWN1cml0eSBjb250cm9sICsgc3RlcC11cC4nIH0sXG4gIHsgZmllbGQ6ICdvcmdhbml6YXRpb24uYXV0aGVudGljYXRvclBvbGljeScsIHdoeTogJ1NlY3VyaXR5IGNvbnRyb2wgKyBzdGVwLXVwLicgfSxcbiAgeyBmaWVsZDogJ29yZ2FuaXphdGlvbi5pbXBlcnNvbmF0aW9uUG9saWN5Jywgd2h5OiAnU2VjdXJpdHkgY29udHJvbCArIHN0ZXAtdXA7IGRlY2lkZXMgd2hvIG91dHNpZGUgdGhlIG9yZyBtYXkgdmlldyBpdHMgZGF0YS4nIH0sXG4gIHsgZmllbGQ6ICdvcmdhbml6YXRpb24uaWRwJywgd2h5OiAnU1NPL1NBTUwgY29uZmlnOiBzZWN1cml0eSBjb250cm9sIG9uIGl0cyBvd24gY2FwYWJpbGl0eSAob3JnX2lkcDp3cml0ZSksIGFzc3VyYW5jZSArIHN0cm9uZyBzdGVwLXVwLicgfSxcbiAgeyBmaWVsZDogJ29yZ2FuaXphdGlvbi5rbXNDb25maWcnLCB3aHk6ICdLZXkgbWF0ZXJpYWwuIE93biBjYXBhYmlsaXR5IChvcmdfa21zOndyaXRlKSwgYXNzdXJhbmNlICsgc3Ryb25nIHN0ZXAtdXAuJyB9LFxuICB7IGZpZWxkOiAnb3JnYW5pemF0aW9uLmlkZW50aXR5Jywgd2h5OiAnT3JnIG5hbWUvc2x1Zzogbm8gc3RlcC11cCwgYnV0IHJlbmFtaW5nIGFuIG9yZyBpcyBhbiBpbXBlcnNvbmF0aW9uIHByaW1pdGl2ZSBhbmQgdGhlIHNsdWcgaXMgYWRkcmVzc2FibGUuJyB9LFxuICB7IGZpZWxkOiAnb3JnYW5pemF0aW9uLmRvbWFpbnMnLCB3aHk6ICdWZXJpZmllZCBkb21haW5zIGRyaXZlIGRvbWFpbi1iYXNlZCBqb2luIOKAlCB3aG8gbWF5IGJlY29tZSBhIG1lbWJlci4nIH0sXG4gIHsgZmllbGQ6ICdvcmdhbml6YXRpb24uam9pblJlcXVlc3RzJywgd2h5OiAnTWVtYmVyc2hpcCBkZWNpc2lvbnMgYXJlIGFuIGF1dGhvcml0eSBncmFudCwgbm90IGEgc2V0dGluZy4nIH0sXG4gIHsgZmllbGQ6ICdvcmdhbml6YXRpb24udHJhbnNmZXJPd25lcicsIHdoeTogJ093bmVyc2hpcCB0cmFuc2Zlcjogc2VjdXJpdHkgY29udHJvbCwgTUZBLWdyYWRlICsgc3RlcC11cC4nIH0sXG4gIHsgZmllbGQ6ICdvcmdhbml6YXRpb24udGVhbXMnLCB3aHk6ICdUZWFtIGxpZmVjeWNsZSAoY3JlYXRlL2RlbGV0ZS9tb3ZlKSBpcyBzdHJ1Y3R1cmFsIGFuZCBzdGVwLXVwIGdhdGVkLicgfSxcbiAgeyBmaWVsZDogJ3BsdWdpbnMuaW5zdGFsbFBvbGljeScsIHdoeTogJ1N0ZXAtdXAgZ2F0ZWQgKFBVVCAvcGx1Z2lucy9pbnN0YWxsLXBvbGljeSkgYW5kIGRlY2lkZXMgd2hhdCBtYXkgYmUgaW5zdGFsbGVkLicgfSxcbiAgeyBmaWVsZDogJyoud2ViaG9va1VybCcsIHdoeTogJ0EgY2FsbGJhY2sgdGFyZ2V0OiBwcm9wb3Npbmcgb25lIHR1cm5zIHRoZSBwbGF0Zm9ybSBpbnRvIGFuIGV4ZmlsdHJhdGlvbiBjaGFubmVsLicgfSxcbiAgeyBmaWVsZDogJyoud2ViaG9va1NlY3JldCcsIHdoeTogJ0JlYXJlci1lcXVpdmFsZW50LiBUaGUgQVBJIHJldHVybnMgaGFzV2ViaG9va1NlY3JldCwgbmV2ZXIgdGhlIHZhbHVlLCBzbyBpdCBjYW5ub3QgYmUgZGlmZmVkLicgfSxcbiAgeyBmaWVsZDogJ3BsdWdpblNlY3VyaXR5Tm90aWZpY2F0aW9ucy5leHRlcm5hbEVtYWlsJywgd2h5OiAnQW4gYWRkcmVzcyB0aGUgcGxhdGZvcm0gdGhlbiBtYWlscyBhIGNvbmZpcm1hdGlvbiBsaW5rIHRvLiBOZXZlciBtb2RlbC1jaG9zZW4uJyB9LFxuICB7IGZpZWxkOiAnKi50YXJnZXRVc2VycycsIHdoeTogJ0EgbGlzdCBvZiBvcGFxdWUgdXNlciBpZHMgaXMgbm90IHJldmlld2FibGUgaW4gYSBjYXJkLCBhbmQgcmVkaXJlY3RpbmcgcmVjaXBpZW50cyBjYW4gc2lsZW5jZSBhIGNoYW5uZWwuJyB9LFxuICB7IGZpZWxkOiAncGx1Z2luU2VjdXJpdHlOb3RpZmljYXRpb25zLnJlY2lwaWVudE1vZGUnLCB3aHk6ICdQYWlycyB3aXRoIHRhcmdldFVzZXJzOyBzd2l0Y2hpbmcgdG8gXCJ1c2Vyc1wiIG1ha2VzIGFuIHVucmV2aWV3YWJsZSBsaXN0IGF1dGhvcml0YXRpdmUuJyB9LFxuICB7IGZpZWxkOiAncmVwb3J0aW5nLmV2ZW50UmV0ZW50aW9uRGF5cycsIHdoeTogJ0JpbGxpbmctb3duZWQgKHRpZXIgKyBwdXJjaGFzZWQgcGFja3MpLiBUaGUgcm91dGUgYWxyZWFkeSByZWplY3RzIGl0OyBhZG1pdHRpbmcgaXQgd291bGQgYmUgYW4gZW50aXRsZW1lbnQgYnlwYXNzLicgfSxcbiAgeyBmaWVsZDogJ3JlcG9ydGluZy5kb3JhUmV0ZW50aW9uRGF5cycsIHdoeTogJ0JpbGxpbmctb3duZWQsIGFzIGFib3ZlLicgfSxcbl07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb29rdXBcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IEJZX0tFWTogUmVhZG9ubHlNYXA8c3RyaW5nLCBPcmdTZXR0aW5nU3BlYz4gPVxuICBuZXcgTWFwKE9SR19TRVRUSU5HX1BST1BPU0FMX0FMTE9XTElTVC5tYXAoKHNwZWMpID0+IFtzcGVjLmtleSwgc3BlY10pKTtcblxuLyoqIEV2ZXJ5IHByb3Bvc2FibGUga2V5IOKAlCB0aGUgZW51bSBhIHByb3Bvc2UgdG9vbCdzIGlucHV0IHNjaGVtYSBpcyBidWlsdCBmcm9tLiAqL1xuZXhwb3J0IGNvbnN0IE9SR19TRVRUSU5HX1BST1BPU0FMX0tFWVM6IHJlYWRvbmx5IE9yZ1NldHRpbmdLZXlbXSA9XG4gIE9SR19TRVRUSU5HX1BST1BPU0FMX0FMTE9XTElTVC5tYXAoKHNwZWMpID0+IHNwZWMua2V5KTtcblxuLyoqIElzIGBrZXlgIG9uIHRoZSBhbGxvd2xpc3Q/ICovXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wb3NhYmxlT3JnU2V0dGluZyhrZXk6IHN0cmluZyk6IGtleSBpcyBPcmdTZXR0aW5nS2V5IHtcbiAgcmV0dXJuIEJZX0tFWS5oYXMoa2V5KTtcbn1cblxuLyoqIFRoZSBzcGVjIGZvciBga2V5YCwgb3IgdW5kZWZpbmVkIHdoZW4gaXQgaXMgbm90IHByb3Bvc2FibGUuICovXG5leHBvcnQgZnVuY3Rpb24gb3JnU2V0dGluZ1NwZWMoa2V5OiBzdHJpbmcpOiBPcmdTZXR0aW5nU3BlYyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBCWV9LRVkuZ2V0KGtleSk7XG59XG5cbi8qKiBEb2VzIGB2YWx1ZWAgbWF0Y2ggdGhlIHNoYXBlIHRoZSBmaWVsZCBkZWNsYXJlcz8gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkT3JnU2V0dGluZ1ZhbHVlKHNwZWM6IE9yZ1NldHRpbmdTcGVjLCB2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIE9yZ1NldHRpbmdWYWx1ZSB7XG4gIGNvbnN0IHNoYXBlID0gc3BlYy5zaGFwZTtcbiAgaWYgKHNoYXBlLmtpbmQgPT09ICdib29sZWFuJykgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xuICBpZiAoc2hhcGUua2luZCA9PT0gJ2ludGVnZXInKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgJiYgdmFsdWUgPj0gc2hhcGUubWluICYmIHZhbHVlIDw9IHNoYXBlLm1heDtcbiAgfVxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBzaGFwZS52YWx1ZXMuaW5jbHVkZXModmFsdWUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gcGlja0FsbG93ZWQgKHJ1bGVzIDEsIDMgYW5kIDEwKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEEgcHJvcG9zYWwncyBzZXR0aW5ncywga2V5ZWQgYnkgYWxsb3dsaXN0IGtleS4gKi9cbmV4cG9ydCB0eXBlIE9yZ1NldHRpbmdQYXRjaCA9IFBhcnRpYWw8UmVjb3JkPE9yZ1NldHRpbmdLZXksIE9yZ1NldHRpbmdWYWx1ZT4+O1xuXG4vKiogV2hhdCB7QGxpbmsgcGlja0FsbG93ZWR9IGtlcHQsIGFuZCB3aGF0IGl0IHRocmV3IGF3YXkuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpY2tBbGxvd2VkUmVzdWx0IHtcbiAgLyoqIFRoZSBhbGxvd2xpc3RlZCwgc2hhcGUtdmFsaWQgc2V0dGluZ3MuICovXG4gIHJlYWRvbmx5IGFsbG93ZWQ6IE9yZ1NldHRpbmdQYXRjaDtcbiAgLyoqXG4gICAqIEZpZWxkIG5hbWVzIHRoZSBjYW5kaWRhdGUgY2FycmllZCB0aGF0IGFyZSBOT1Qgb24gdGhlIGFsbG93bGlzdC4gVEhJUyBpc1xuICAgKiB0aGUgaW5qZWN0aW9uIHNpZ25hbCAocnVsZSAxMCk6IGEgbGVnaXRpbWF0ZSBkcmFmdCBoYXMgbm9uZSwgc28gYSBub24tZW1wdHlcbiAgICogbGlzdCBpcyBhIGNvdW50ZXIgdG8gaW5jcmVtZW50IGFuZCBhIGxpbmUgdG8gbG9nLCBub3QgYSBzaWxlbnQgZHJvcC5cbiAgICovXG4gIHJlYWRvbmx5IHJlZnVzZWQ6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKipcbiAgICogQWxsb3dsaXN0ZWQga2V5cyB3aG9zZSB2YWx1ZSBkaWQgbm90IG1hdGNoIHRoZSBkZWNsYXJlZCBzaGFwZS4gRHJvcHBlZCB0b28sXG4gICAqIGJ1dCByZXBvcnRlZCBzZXBhcmF0ZWx5IOKAlCBhIGJhZCB2YWx1ZSBpcyBhIGRyYWZ0aW5nIG1pc3Rha2UsIG5vdCBhbiBhdHRlbXB0XG4gICAqIHRvIHJlYWNoIGEgZmllbGQgdGhlIGFnZW50IHdhcyBuZXZlciBnaXZlbi5cbiAgICovXG4gIHJlYWRvbmx5IGludmFsaWQ6IHJlYWRvbmx5IE9yZ1NldHRpbmdLZXlbXTtcbiAgLyoqIGByZWZ1c2VkLmxlbmd0aGAsIHNvIGEgY2FsbGVyIGNhbiBjb3VudCB3aXRob3V0IHJlLWRlcml2aW5nIGl0LiAqL1xuICByZWFkb25seSByZWZ1c2VkQ291bnQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBLZWVwIG9ubHkgdGhlIGFsbG93bGlzdGVkLCBzaGFwZS12YWxpZCBmaWVsZHMgb2YgYSBjYW5kaWRhdGUgcHJvcG9zYWwsIGFuZFxuICogcmVwb3J0IGV2ZXJ5dGhpbmcgZHJvcHBlZC5cbiAqXG4gKiBUaGUgcmVzdWx0J3MgYGFsbG93ZWRgIG1hcCBJUyB0aGUgY29tbWl0IHBheWxvYWQgKHJ1bGUgMyk6IHRoZSBjb25maXJtXG4gKiBoYW5kbGVyIHNlbmRzIHRoZXNlIGZpZWxkcyBhbmQgb25seSB0aGVzZSwgc28gYW55dGhpbmcgdGhlIG1vZGVsIHNsaXBwZWQgaW5cbiAqIGlzIHN0cnVjdHVyYWxseSB1bmFwcGxpYWJsZSByYXRoZXIgdGhhbiBtZXJlbHkgdW5yZW5kZXJlZC5cbiAqXG4gKiBgY2FuZGlkYXRlYCBpcyB1bnRydXN0ZWQgbW9kZWwgb3V0cHV0LCBzbyBpdCBpcyByZWFkIGRlZmVuc2l2ZWx5OiBhbnl0aGluZ1xuICogdGhhdCBpcyBub3QgYSBwbGFpbiBvYmplY3QgeWllbGRzIGFuIGVtcHR5IHJlc3VsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpY2tBbGxvd2VkKGNhbmRpZGF0ZTogdW5rbm93bik6IFBpY2tBbGxvd2VkUmVzdWx0IHtcbiAgY29uc3QgYWxsb3dlZDogT3JnU2V0dGluZ1BhdGNoID0ge307XG4gIGNvbnN0IHJlZnVzZWQ6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGludmFsaWQ6IE9yZ1NldHRpbmdLZXlbXSA9IFtdO1xuXG4gIGlmIChjYW5kaWRhdGUgJiYgdHlwZW9mIGNhbmRpZGF0ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoY2FuZGlkYXRlKSkge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNhbmRpZGF0ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpIHtcbiAgICAgIGNvbnN0IHNwZWMgPSBCWV9LRVkuZ2V0KGtleSk7XG4gICAgICBpZiAoIXNwZWMpIHsgcmVmdXNlZC5wdXNoKGtleSk7IGNvbnRpbnVlOyB9XG4gICAgICBpZiAoIWlzVmFsaWRPcmdTZXR0aW5nVmFsdWUoc3BlYywgdmFsdWUpKSB7IGludmFsaWQucHVzaChzcGVjLmtleSk7IGNvbnRpbnVlOyB9XG4gICAgICBhbGxvd2VkW3NwZWMua2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFsbG93ZWQsIHJlZnVzZWQsIGludmFsaWQsIHJlZnVzZWRDb3VudDogcmVmdXNlZC5sZW5ndGggfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIERpZmYgKyByZXF1ZXN0IHBsYW5uaW5nIChydWxlcyAzIGFuZCA3KVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIE9uZSByZXZpZXdlZCBjaGFuZ2U6IHdoYXQgdGhlIHNldHRpbmcgaXMgbm93LCBhbmQgd2hhdCBpdCB3b3VsZCBiZWNvbWUuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yZ1NldHRpbmdDaGFuZ2Uge1xuICByZWFkb25seSBzcGVjOiBPcmdTZXR0aW5nU3BlYztcbiAgcmVhZG9ubHkgZnJvbTogT3JnU2V0dGluZ1ZhbHVlIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSB0bzogT3JnU2V0dGluZ1ZhbHVlO1xufVxuXG4vKipcbiAqIFRoZSBjaGFuZ2VzIGEgcHJvcG9zYWwgYWN0dWFsbHkgbWFrZXMsIGdpdmVuIHRoZSBDVVJSRU5UIHZhbHVlcy4gQSBmaWVsZFxuICogd2hvc2UgcHJvcG9zZWQgdmFsdWUgYWxyZWFkeSBlcXVhbHMgdGhlIGN1cnJlbnQgb25lIGlzIGRyb3BwZWQg4oCUIGl0IGlzIG5vdCBhXG4gKiBjaGFuZ2UsIGFuZCByZW5kZXJpbmcgaXQgYXMgb25lIG1ha2VzIGEgZGlmZiB0aGUgdXNlciBjYW5ub3QgcmVhZC5cbiAqXG4gKiBUaGUgY29uZmlybSBoYW5kbGVyIHJlLXJ1bnMgdGhpcyBhZ2FpbnN0IGEgRlJFU0ggcmVhZCBpbW1lZGlhdGVseSBiZWZvcmVcbiAqIGNvbW1pdHRpbmcgKHJ1bGUgNyk6IHRoZXNlIHJlY29yZHMgY2Fycnkgbm8gdmVyc2lvbiBjb2x1bW4sIHNvIGlmIHRoZSBsaXN0XG4gKiB0aGF0IGNvbWVzIGJhY2sgZGlmZmVycyBmcm9tIHRoZSBvbmUgdGhlIHVzZXIgYXBwcm92ZWQsIHN0YXRlIG1vdmVkIHVuZGVyIHRoZVxuICogcHJvcG9zYWwgYW5kIHRoZSBjb21taXQgbXVzdCBiZSByZWZ1c2VkIHJhdGhlciB0aGFuIGFwcGxpZWQgYmxpbmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmT3JnU2V0dGluZ3MoXG4gIGN1cnJlbnQ6IFJlYWRvbmx5PE9yZ1NldHRpbmdQYXRjaD4sXG4gIHByb3Bvc2VkOiBSZWFkb25seTxPcmdTZXR0aW5nUGF0Y2g+LFxuKTogcmVhZG9ubHkgT3JnU2V0dGluZ0NoYW5nZVtdIHtcbiAgY29uc3QgY2hhbmdlczogT3JnU2V0dGluZ0NoYW5nZVtdID0gW107XG4gIGZvciAoY29uc3Qgc3BlYyBvZiBPUkdfU0VUVElOR19QUk9QT1NBTF9BTExPV0xJU1QpIHtcbiAgICBjb25zdCB0byA9IHByb3Bvc2VkW3NwZWMua2V5XTtcbiAgICBpZiAodG8gPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgY29uc3QgZnJvbSA9IGN1cnJlbnRbc3BlYy5rZXldO1xuICAgIGlmIChmcm9tID09PSB0bykgY29udGludWU7XG4gICAgY2hhbmdlcy5wdXNoKHsgc3BlYywgZnJvbSwgdG8gfSk7XG4gIH1cbiAgcmV0dXJuIGNoYW5nZXM7XG59XG5cbi8qKiBPbmUgQVBJIGNhbGwgdGhlIGNvbmZpcm0gaGFuZGxlciBtYWtlczogb25lIHN1cmZhY2UsIG9uZSBib2R5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmdTZXR0aW5nUmVxdWVzdCB7XG4gIHJlYWRvbmx5IHN1cmZhY2U6IE9yZ1NldHRpbmdTdXJmYWNlO1xuICByZWFkb25seSBtZXRob2Q6ICdQVVQnO1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBlcm1pc3Npb246IFBlcm1pc3Npb247XG4gIC8qKiBSZXF1ZXN0IGJvZHk6IHRoZSBBUEkncyBvd24gZmllbGQgbmFtZXMsIGNhcnJ5aW5nIG9ubHkgcmV2aWV3ZWQgdmFsdWVzLiAqL1xuICByZWFkb25seSBib2R5OiBSZWNvcmQ8c3RyaW5nLCBPcmdTZXR0aW5nVmFsdWU+O1xufVxuXG4vKipcbiAqIEdyb3VwIGFwcHJvdmVkIGNoYW5nZXMgaW50byBvbmUgcmVxdWVzdCBwZXIgc3VyZmFjZSwgdHJhbnNsYXRpbmcgcHJvcG9zYWxcbiAqIGtleXMgYmFjayB0byB0aGUgZmllbGQgbmFtZXMgZWFjaCBBUEkgZXhwZWN0cy4gT3JkZXIgZm9sbG93cyB0aGUgYWxsb3dsaXN0LFxuICogc28gdGhlIHNhbWUgcHJvcG9zYWwgYWx3YXlzIHByb2R1Y2VzIHRoZSBzYW1lIGNhbGwgc2VxdWVuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcmdTZXR0aW5nUmVxdWVzdHMoY2hhbmdlczogcmVhZG9ubHkgT3JnU2V0dGluZ0NoYW5nZVtdKTogcmVhZG9ubHkgT3JnU2V0dGluZ1JlcXVlc3RbXSB7XG4gIGNvbnN0IGJ5U3VyZmFjZSA9IG5ldyBNYXA8T3JnU2V0dGluZ1N1cmZhY2UsIE9yZ1NldHRpbmdSZXF1ZXN0PigpO1xuICBmb3IgKGNvbnN0IHNwZWMgb2YgT1JHX1NFVFRJTkdfUFJPUE9TQUxfQUxMT1dMSVNUKSB7XG4gICAgY29uc3QgY2hhbmdlID0gY2hhbmdlcy5maW5kKChjKSA9PiBjLnNwZWMua2V5ID09PSBzcGVjLmtleSk7XG4gICAgaWYgKCFjaGFuZ2UpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYnlTdXJmYWNlLmdldChzcGVjLnN1cmZhY2UpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgZXhpc3RpbmcuYm9keVtzcGVjLmZpZWxkXSA9IGNoYW5nZS50bztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBieVN1cmZhY2Uuc2V0KHNwZWMuc3VyZmFjZSwge1xuICAgICAgc3VyZmFjZTogc3BlYy5zdXJmYWNlLFxuICAgICAgbWV0aG9kOiBzcGVjLmFwaS5tZXRob2QsXG4gICAgICBwYXRoOiBzcGVjLmFwaS5wYXRoLFxuICAgICAgcGVybWlzc2lvbjogc3BlYy5wZXJtaXNzaW9uLFxuICAgICAgYm9keTogeyBbc3BlYy5maWVsZF06IGNoYW5nZS50byB9LFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBbLi4uYnlTdXJmYWNlLnZhbHVlcygpXTtcbn1cbiJdfQ==
|
|
336
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNrLXByb3Bvc2Fscy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2Fzay1wcm9wb3NhbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQXdFdEMsZ0ZBQWdGO0FBQ2hGLHNCQUFzQjtBQUN0QixnRkFBZ0Y7QUFFaEYsaUVBQWlFO0FBQ2pFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLFdBQVcsQ0FBQztBQUU5Qyx1REFBdUQ7QUFDdkQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsWUFBWSxDQUFDO0FBT25EOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLE9BQTJDO0lBRTNDLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztBQUN4RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxrQkFBa0IsQ0FBQztBQVd6RDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxPQUFnQjtJQUNoRCxNQUFNLEdBQUcsR0FBRyxPQUFxRCxDQUFDO0lBQ2xFLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDckYsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDaEQsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUN6RSxPQUFPLEtBQUssS0FBSyxrQkFB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LFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3RDLFNBQVM7UUFDWCxDQUFDO1FBQ0QsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzFCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNO1lBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUk7WUFDbkIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUaGUgc2hhcmVkIGNvbnRyYWN0IGJldHdlZW4gdGhlIGFzayBhZ2VudCdzIFBST1BPU0UgdG9vbHMgYW5kIHRoZSBicm93c2VyJ3NcbiAqIENPTkZJUk0gaGFuZGxlcnMuIFR3byB0aGluZ3MgbGl2ZSBoZXJlLCBhbmQgdGhleSBsaXZlIGhlcmUgYmVjYXVzZSBCT1RIIHNpZGVzXG4gKiBuZWVkIHRoZW06IGBhcGkvYXNrYCBidWlsZHMgaXRzIHRvb2wgc2NoZW1hIGZyb20gdGhpcyBtb2R1bGUsIHRoZSBmcm9udGVuZCdzXG4gKiBjb25maXJtIGhhbmRsZXIgYnVpbGRzIGl0cyByZXF1ZXN0IGZyb20gaXQsIGFuZCB0aGUgdGVzdHMgb2YgYm90aCBhc3NlcnRcbiAqIGFnYWluc3QgaXQuIEEgc2Vjb25kIGNvcHkgd291bGQgYmUgYSBzZWNvbmQgcG9saWN5LlxuICpcbiAqIERlcGVuZGVuY3ktZnJlZSBvbiBwdXJwb3NlIOKAlCBubyBydW50aW1lIGltcG9ydHMgYXQgYWxsIOKAlCBzbyB0aGUgYnJvd3NlciBjYW5cbiAqIGltcG9ydCBpdCB0aHJvdWdoIGFwaS1jb3JlJ3MgYC4vYXNrLXByb3Bvc2Fsc2AgZW50cnkgd2l0aG91dCBkcmFnZ2luZyBpbiB0aGVcbiAqIHNlcnZlciBncmFwaCAoZXhwcmVzcyAvIGp3dCAvIGlvcmVkaXMpLiBUaGUgb25seSBpbXBvcnRzIGFyZSBgaW1wb3J0IHR5cGVgLFxuICogd2hpY2ggdGhlIGNvbXBpbGVyIGVyYXNlcy5cbiAqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogMS4gUFJPVkVOQU5DRVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEV2ZXJ5IGNvbW1pdCB0aGF0IHN0YXJ0ZWQgbGlmZSBhcyBhbiBhZ2VudCBkcmFmdCBzdGFtcHNcbiAqIGBkZXRhaWxzOiB7IHByb3Bvc2VkQnk6ICdhc2stYWdlbnQnIH1gIG9udG8gaXRzIGF1ZGl0IGV2ZW50LiBUaGUgYXVkaXQgdHJhaWxcbiAqIGlzIGhhc2gtY2hhaW5lZCBhbmQgdGFtcGVyLWV2aWRlbnQsIGJ1dCB3aXRob3V0IHRoaXMgZmllbGQgaXQgY2Fubm90XG4gKiBkaXN0aW5ndWlzaCBcInRoZSBhZG1pbiBjaGFuZ2VkIHRoaXNcIiBmcm9tIFwiYW4gQUkgZHJhZnRlZCBpdCBhbmQgdGhlIGFkbWluXG4gKiBjbGlja2VkIEFwcGx5XCIg4oCUIHRoZSB0d28gbWVhbiB2ZXJ5IGRpZmZlcmVudCB0aGluZ3MgaW4gYW4gaW5jaWRlbnQgcmV2aWV3LlxuICogVGhlIGNvbnN0YW50IGV4aXN0cyBzbyB0aGUgbGl0ZXJhbCBpcyBub3QgcmV0eXBlZCBpbiB0d28gY29kZWJhc2VzLCB3aGVyZSBhXG4gKiB0eXBvIHdvdWxkIHNpbGVudGx5IHByb2R1Y2UgYW4gdW5xdWVyeWFibGUgdHJhaWwuXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIDIuIFRIRSBPUkctU0VUVElOR1MgQUxMT1dMSVNUXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogVGhpcyBpcyBhbiBBTExPV0xJU1QsIG5vdCBhIGRlbnlsaXN0LCBhbmQgdGhlIGRpc3RpbmN0aW9uIGlzIHRoZSB3aG9sZSBwb2ludDpcbiAqIGEgc2V0dGluZyBhZGRlZCB0byB0aGUgcGxhdGZvcm0gdG9tb3Jyb3cgaXMgVU5BVkFJTEFCTEUgdG8gdGhlIGFnZW50IHVudGlsXG4gKiBzb21lb25lIGRlbGliZXJhdGVseSBhZGRzIGl0IGhlcmUsIHJhdGhlciB0aGFuIGJlaW5nIGV4cG9zZWQgYnkgb21pc3Npb24uXG4gKiBJZiB5b3UgYXJlIHJlYWRpbmcgdGhpcyBiZWNhdXNlIGEgcHJvcG9zYWwgd2FzIHJlZnVzZWQsIHRoZSBmaXggaXMgdG8gYWRkIHRoZVxuICogZmllbGQgYmVsb3cgV0lUSCBpdHMgYHdoeWAg4oCUIG5vdCB0byBsb29zZW4ge0BsaW5rIHBpY2tBbGxvd2VkfS5cbiAqXG4gKiBBIGZpZWxkIGVhcm5zIGEgcGxhY2UgaGVyZSBvbmx5IGlmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGhvbGQuIFRoZXkgd2VyZVxuICogY2hlY2tlZCBhZ2FpbnN0IHRoZSByb3V0ZXMsIG5vdCBhc3N1bWVkOlxuICpcbiAqICAtICoqTm8gc3RlcC11cC4qKiBBIHJvdXRlIGNhcnJ5aW5nIGByZXF1aXJlU3RlcFVwYCBpcyBvdXQsIG5vIGV4Y2VwdGlvbnMuXG4gKiAgICBTdGVwLXVwIG1lYW5zIHRoZSBwbGF0Zm9ybSBhbHJlYWR5IGRlY2lkZWQgYSBsaXZlIHNlc3Npb24gaXMgbm90IGVub3VnaFxuICogICAgYXV0aG9yaXR5OyBhIGNoYXQgcHJvcG9zYWwgaXMgc3RyaWN0bHkgbGVzcy4gVGhpcyBpcyB3aGF0IGtlZXBzXG4gKiAgICBgUFVUIC9vcmdhbml6YXRpb24vYWktY29uZmlnYCBvdXQgKGl0IHBlcnNpc3RzIHBlci1vcmcgcHJvdmlkZXIgU0VDUkVUUyksXG4gKiAgICBhbG9uZyB3aXRoIHRoZSBNRkEgLyBwYXNzd29yZCAvIGF1dGhlbnRpY2F0b3IgcG9saWNpZXMsXG4gKiAgICBgUFVUIC9wbHVnaW5zL2luc3RhbGwtcG9saWN5YCwgb3JnIHJlc3RvcmUgYW5kIHRyYW5zZmVyLW93bmVyLlxuICogIC0gKipOb3QgYSBzZWN1cml0eSBjb250cm9sLioqIE1GQSAvIHBhc3N3b3JkIC8gYXV0aGVudGljYXRvciAvIGltcGVyc29uYXRpb25cbiAqICAgIHBvbGljeSwgU1NPK1NBTUwgYW5kIGl0cyBncm91cCBtYXBwaW5ncywgdmVyaWZpZWQgZG9tYWlucyBhbmQgZG9tYWluLWJhc2VkXG4gKiAgICBqb2luLCBqb2luLXJlcXVlc3QgZGVjaXNpb25zLCB0cmFuc2Zlci1vd25lciBhbmQgdGVhbSBsaWZlY3ljbGUgYXJlIEFCU0VOVFxuICogICAgaGVyZSByYXRoZXIgdGhhbiBnYXRlZCB3aXRoaW4g4oCUIFwicmVsYXggdGhlIE1GQSBwb2xpY3lcIiBpcyBwcmVjaXNlbHkgd2hhdCBhblxuICogICAgaW5qZWN0aW9uIHBheWxvYWQgYXNrcyBmb3IsIGFuZCBpdCBhcnJpdmVzIHRocm91Z2ggdGV4dCB0aGUgYWdlbnQgYWxyZWFkeVxuICogICAgcmVhZHMuIEFic2VudCBjYW5ub3QgYmUgYXJndWVkIHdpdGg7IGdhdGVkIGNhbi5cbiAqICAtICoqQ2FycmllcyBubyBzZWNyZXQgYW5kIG5vIGNhbGxiYWNrIHRhcmdldC4qKiBBbiBBUEkgdGhhdCByZXR1cm5zXG4gKiAgICBgaGFzV2ViaG9va1NlY3JldGAgaW5zdGVhZCBvZiB0aGUgc2VjcmV0IGlzIHRlbGxpbmcgeW91IHRoZSBmaWVsZCBjYW5ub3QgYmVcbiAqICAgIGRpZmZlZCwgc28gaXQgY2Fubm90IGJlIHJldmlld2VkLCBzbyBpdCBjYW5ub3QgYmUgcHJvcG9zZWQuIFdlYmhvb2sgVVJMc1xuICogICAgYW5kIGVtYWlsIGFkZHJlc3NlcyBhcmUgb3V0IGZvciB0aGUgc2FtZSByZWFzb24gcGx1cyBvbmUgbW9yZTogdGhleSBhcmVcbiAqICAgIGV4ZmlsdHJhdGlvbiB0YXJnZXRzLCBhbmQgYSBjb25maXJtYXRpb24gbWFpbCB0byBhbiBhdHRhY2tlci1jaG9zZW4gYWRkcmVzc1xuICogICAgaXMgYSBzZW5kIHRoZSBwbGF0Zm9ybSBwZXJmb3JtcyBvbiB0aGUgbW9kZWwncyBzYXktc28uXG4gKiAgLSAqKlJldmlld2FibGUgYXMgYSBkaWZmLioqIEEgc2NhbGFyIHdpdGggYSBjbG9zZWQgc2hhcGUgKGJvb2xlYW4sIGJvdW5kZWRcbiAqICAgIGludGVnZXIsIHNtYWxsIGVudW0pLiBBIGxpc3Qgb2Ygb3BhcXVlIHVzZXIgaWRzIHJlbmRlcnMgYXMgaWRzIGluIGEgY2FyZFxuICogICAgbm9ib2R5IGNhbiBjaGVjaywgc28gcmVjaXBpZW50IExJU1RTIGFyZSBvdXQgZXZlbiB0aG91Z2ggY2FkZW5jZSBpcyBpbi5cbiAqXG4gKiBFYWNoIGVudHJ5IG5hbWVzIHRoZSBBUEkgdGhhdCBhcHBsaWVzIGl0LiBUaGUgYnJvd3NlciBhcHBsaWVzIGl0IHRocm91Z2ggdGhlXG4gKiBVU0VSJ3Mgb3duIHNlc3Npb24gYW5kIHRoZSB1c2VyJ3Mgb3duIHBlcm1pc3Npb25zIOKAlCB0aGUgYWdlbnQgbmV2ZXIgd3JpdGVzIOKAlFxuICogc28gYSBwcm9wb3NhbCBhIG1lbWJlciBtYXkgbm90IGNvbW1pdCBzaW1wbHkgNDAzcyBhdCB0aGUgcm91dGUsIGV4YWN0bHkgYXMgYVxuICogaGFuZC1tYWRlIHJlcXVlc3Qgd291bGQuXG4gKlxuICogUnVsZSAxMCBsaXZlcyBpbiB7QGxpbmsgcGlja0FsbG93ZWR9OiBhIGNhbmRpZGF0ZSBjYXJyeWluZyBhIGZpZWxkIG91dHNpZGVcbiAqIHRoaXMgbGlzdCBpcyB0aGUgaW5qZWN0aW9uIHNpZ25hbCwgc28gdGhlIHJlZnVzZWQgbmFtZXMgY29tZSBiYWNrIHRvIHRoZVxuICogY2FsbGVyIHRvIGJlIGNvdW50ZWQgYW5kIGxvZ2dlZCByYXRoZXIgdGhhbiBiZWluZyBxdWlldGx5IGRyb3BwZWQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQZXJtaXNzaW9uIH0gZnJvbSAnLi9wZXJtaXNzaW9ucy5qcyc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpblNlY3VyaXR5RGlnZXN0TW9kZSB9IGZyb20gJy4vd2lyZS12b2NhYnVsYXJ5LmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFByb3ZlbmFuY2UgKHJ1bGUgNilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBUaGUgYHByb3Bvc2VkQnlgIHZhbHVlIGV2ZXJ5IGFnZW50LWRyYWZ0ZWQgY29tbWl0IHJlY29yZHMuICovXG5leHBvcnQgY29uc3QgQVNLX0FHRU5UX1BST1BPU0VSID0gJ2Fzay1hZ2VudCc7XG5cbi8qKiBUaGUgYXVkaXQgYGRldGFpbHNgIGtleSB0aGF0IGNhcnJpZXMgcHJvdmVuYW5jZS4gKi9cbmV4cG9ydCBjb25zdCBQUk9QT1NFRF9CWV9ERVRBSUxfS0VZID0gJ3Byb3Bvc2VkQnknO1xuXG4vKiogVGhlIHByb3ZlbmFuY2UgZnJhZ21lbnQgbWVyZ2VkIGludG8gYSBgUmVtb3RlQXVkaXRFdmVudC5kZXRhaWxzYC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXNrUHJvcG9zYWxQcm92ZW5hbmNlIHtcbiAgcmVhZG9ubHkgcHJvcG9zZWRCeTogdHlwZW9mIEFTS19BR0VOVF9QUk9QT1NFUjtcbn1cblxuLyoqXG4gKiBNZXJnZSBhZ2VudCBwcm92ZW5hbmNlIGludG8gYW4gYXVkaXQgZXZlbnQncyBmcmVlLWZvcm0gYGRldGFpbHNgLlxuICogUHJvdmVuYW5jZSBpcyBhcHBsaWVkIExBU1Qgc28gYSBjYWxsZXItc3VwcGxpZWQgYHByb3Bvc2VkQnlgIGNhbm5vdCBvdmVyd3JpdGVcbiAqIGl0IOKAlCB0aGUgcG9pbnQgb2YgdGhlIGZpZWxkIGlzIHRoYXQgaXQgaXMgbm90IG5lZ290aWFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc2tQcm9wb3NhbEF1ZGl0RGV0YWlscyhcbiAgZGV0YWlscz86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pixcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgQXNrUHJvcG9zYWxQcm92ZW5hbmNlIHtcbiAgcmV0dXJuIHsgLi4uZGV0YWlscywgcHJvcG9zZWRCeTogQVNLX0FHRU5UX1BST1BPU0VSIH07XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgSEVBREVSIGEgcHJvcG9zYWwgY29tbWl0IHN0YW1wcywgYW5kIHRoZSBvbmx5IGNoYW5uZWwgcHJvdmVuYW5jZVxuICogdHJhdmVscyBvbi5cbiAqXG4gKiBBIEhFQURFUiByYXRoZXIgdGhhbiBhIGJvZHkgZmllbGQsIGZvciB0aHJlZSByZWFzb25zOlxuICpcbiAqICAtICoqSXQgY2Fubm90IGNvbGxpZGUuKiogYHByb3Bvc2VkQnlgIGluIGEgYm9keSB3b3VsZCBiZSBhIG5ldyBrZXkgaW4gc2l4XG4gKiAgICBkaWZmZXJlbnQgZG9tYWluIHNjaGVtYXMg4oCUIGBQaXBlbGluZVVwZGF0ZVNjaGVtYWAsIHRoZSBwbHVnaW4vdGVtcGxhdGVcbiAqICAgIHVwZGF0ZSBzY2hlbWFzLCB0aHJlZSBub3RpZmljYXRpb24vc2V0dGluZ3Mgc2NoZW1hcyDigJQgdHdvIG9mIHdoaWNoIGFyZVxuICogICAgYC5zdHJpY3QoKWAgYW5kIHRoZSByZXN0IG9mIHdoaWNoIGZlZWQgYE9iamVjdC5rZXlzKGJvZHkpYCBzdHJhaWdodCBpbnRvXG4gKiAgICB0aGUgdXBkYXRlJ3MgY29sdW1uIGxpc3QgYW5kIHRoZSBhdWRpdCdzIGBmaWVsZHNgLiBBIGZpZWxkIG5hbWVkIGFmdGVyIGFuXG4gKiAgICBhdWRpdCBrZXkgd291bGQgdGhlbiBiZSBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgcmVhbCBvbmUsIGFuZCB0aGUgZGF5IGFcbiAqICAgIGRvbWFpbiBncm93cyBpdHMgb3duIGBwcm9wb3NlZEJ5YCB0aGUgdHdvIG1lYW5pbmdzIG1lcmdlIHNpbGVudGx5LlxuICogIC0gKipJdCBpcyB0cmFuc3BvcnQgbWV0YWRhdGEsIGFuZCBzdGF5cyBvdXQgb2YgdGhlIHBheWxvYWQuKiogTm90aGluZ1xuICogICAgZG93bnN0cmVhbSBvZiBgdmFsaWRhdGVCb2R5YCBldmVyIHNlZXMgaXQsIHNvIGl0IGNhbm5vdCBiZSBwZXJzaXN0ZWQsIGNhbm5vdFxuICogICAgd2lkZW4gYSBkaWZmLCBhbmQgY2Fubm90IHJlYWNoIGEgc2VydmljZSB0aGF0IGZvcndhcmRzIHRoZSBib2R5IG9ud2FyZC5cbiAqICAtICoqVGhlIHBsYXRmb3JtIGFscmVhZHkgZG9lcyB0aGlzLioqIGBYLVN0ZXAtVXAtVG9rZW5gIGlzIHRoZSBzYW1lIHNoYXBlIG9mXG4gKiAgICB0aGluZyDigJQgYSBwZXItcmVxdWVzdCBhc3NlcnRpb24gYWJvdXQgSE9XIHRoZSBjYWxsIHdhcyBtYWRlIHJhdGhlciB0aGFuXG4gKiAgICBXSEFUIGl0IGNoYW5nZXMg4oCUIGFuZCByaWRlcyBhIGhlYWRlciBmb3IgdGhlIHNhbWUgcmVhc29ucy5cbiAqXG4gKiBMb3dlci1jYXNlIGJlY2F1c2UgdGhhdCBpcyBob3cgTm9kZSBub3JtYWxpc2VzIGluY29taW5nIGhlYWRlciBuYW1lczsgdGhlXG4gKiBicm93c2VyIHNlbmRzIGBYLVBCLVByb3Bvc2VkLUJ5YCwgd2hpY2ggYXJyaXZlcyBoZXJlLlxuICovXG5leHBvcnQgY29uc3QgQVNLX1BST1BPU0VEX0JZX0hFQURFUiA9ICd4LXBiLXByb3Bvc2VkLWJ5JztcblxuLyoqXG4gKiBXaGF0IGEgcmVxdWVzdCdzIHByb3ZlbmFuY2UgaGVhZGVyIGNsYWltcy5cbiAqXG4gKiBgZm9yZWlnbmAgaXMgYW55IHZhbHVlIHRoYXQgaXMgbm90IEVYQUNUTFkge0BsaW5rIEFTS19BR0VOVF9QUk9QT1NFUn0g4oCUIHRoZXJlXG4gKiBpcyBvbmUgbGVnaXRpbWF0ZSBwcm9wb3NlciBhbmQgbm8gZnJlZS1mb3JtIHRleHQsIHNvIGFueXRoaW5nIGVsc2UgaXMgYSBidWdcbiAqIG9yIGEgZm9yZ2VyeSBhbmQgaXMgbmFtZWQgYXMgc3VjaCByYXRoZXIgdGhhbiBmb2xkZWQgaW50byBgbm9uZWAuXG4gKi9cbmV4cG9ydCB0eXBlIFByb3Bvc2VyQ2xhaW0gPSAnbm9uZScgfCAnYXNrLWFnZW50JyB8ICdmb3JlaWduJztcblxuLyoqXG4gKiBSZWFkIHRoZSBwcm92ZW5hbmNlIGNsYWltIG9mZiBhIHJlcXVlc3QncyBoZWFkZXIgYmFnLlxuICpcbiAqIERlbGliZXJhdGVseSBleGFjdDogbm8gdHJpbW1pbmcsIG5vIGNhc2UgZm9sZGluZywgbm8gcHJlZml4IG1hdGNoaW5nLiBUaGVcbiAqIG9ubHkgc2VuZGVyIGlzIHRoZSBicm93c2VyJ3MgY29uZmlybSBwYXRoLCB3aGljaCBzdGFtcHMgdGhlIHNoYXJlZCBjb25zdGFudCxcbiAqIHNvIGV2ZXJ5IG90aGVyIHZhbHVlIGlzIHJlZnVzZWQgcmF0aGVyIHRoYW4gcmVwYWlyZWQuIFRoaXMgaXMgd2hhdCBrZWVwcyBhXG4gKiBjbGllbnQgZnJvbSB3cml0aW5nIGFyYml0cmFyeSBhdWRpdCBgZGV0YWlsc2Ag4oCUIHRoZSBoZWFkZXIncyB3aG9sZSB2b2NhYnVsYXJ5XG4gKiBpcyBvbmUgd29yZCwgYW5kIHRoZSB3b3JkIGlzIG5vdCB0aGUgY2xpZW50J3MgdG8gY2hvb3NlLlxuICpcbiAqIFRha2VzIHRoZSBoZWFkZXIgQkFHIChgcmVxLmhlYWRlcnNgKSByYXRoZXIgdGhhbiBhIHJlcXVlc3QsIHNvIHRoaXMgbW9kdWxlXG4gKiBrZWVwcyBpdHMgemVybyBydW50aW1lIGltcG9ydHMgYW5kIHRoZSBicm93c2VyIGNhbiBzdGlsbCBpbXBvcnQgdGhlIGNvbnN0YW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZFByb3Bvc2VyQ2xhaW0oaGVhZGVyczogdW5rbm93bik6IFByb3Bvc2VyQ2xhaW0ge1xuICBjb25zdCBiYWcgPSBoZWFkZXJzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY29uc3QgcmF3ID0gYmFnICYmIHR5cGVvZiBiYWcgPT09ICdvYmplY3QnID8gYmFnW0FTS19QUk9QT1NFRF9CWV9IRUFERVJdIDogdW5kZWZpbmVkO1xuICBjb25zdCB2YWx1ZSA9IEFycmF5LmlzQXJyYXkocmF3KSA/IHJhd1swXSA6IHJhdztcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gJ25vbmUnO1xuICByZXR1cm4gdmFsdWUgPT09IEFTS19BR0VOVF9QUk9QT1NFUiA/ICdhc2stYWdlbnQnIDogJ2ZvcmVpZ24nO1xufVxuXG4vKipcbiAqIFRoZSBhdWRpdCBgZGV0YWlsc2AgZm9yIGEgd3JpdGUsIHdpdGggcHJvdmVuYW5jZSBmb2xkZWQgaW4gd2hlbiDigJQgYW5kIE9OTFlcbiAqIHdoZW4g4oCUIHRoZSByZXF1ZXN0IGNhcnJpZXMgdGhlIGFnZW50IG1hcmtlci5cbiAqXG4gKiBgZGV0YWlsc2AgaXMgd2hhdCB0aGUgSEFORExFUiBidWlsdCBhbmQgc3RheXMgYXV0aG9yaXRhdGl2ZS4gUHJvdmVuYW5jZSBpc1xuICogYWRkaXRpdmU6IHRoZSBPTkxZIGtleSBpdCBjYW4gZXZlciB3cml0ZSBpcyBgcHJvcG9zZWRCeWAsIHNvIGV2ZXJ5IGZpZWxkIHRoZVxuICogaGFuZGxlciBzZXQgc3Vydml2ZXMgdW50b3VjaGVkLCBhbmQge0BsaW5rIGFza1Byb3Bvc2FsQXVkaXREZXRhaWxzfSBhcHBsaWVzXG4gKiB0aGF0IG9uZSBrZXkgTEFTVCBzbyBhIGBwcm9wb3NlZEJ5YCBhcnJpdmluZyBmcm9tIGFueXdoZXJlIGVsc2UgY2Fubm90IHNwZWFrXG4gKiBpbiBpdHMgcGxhY2UuIEEgcmVxdWVzdCBjYXJyeWluZyBubyBtYXJrZXIsIG9yIGEgYGZvcmVpZ25gIG9uZSwgZ2V0cyB0aGVcbiAqIGhhbmRsZXIncyBkZXRhaWxzIHVuY2hhbmdlZCDigJQgYW4gb3JkaW5hcnkgZWRpdCByZWNvcmRzIG5vIGBwcm9wb3NlZEJ5YCBhdFxuICogYWxsLCB3aGljaCBpcyB0aGUgZGlzdGluY3Rpb24gdGhlIGZpZWxkIGV4aXN0cyB0byBtYWtlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFByb3Bvc2FsUHJvdmVuYW5jZShcbiAgaGVhZGVyczogdW5rbm93bixcbiAgZGV0YWlscz86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pixcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHJlYWRQcm9wb3NlckNsYWltKGhlYWRlcnMpID09PSAnYXNrLWFnZW50J1xuICAgID8gYXNrUHJvcG9zYWxBdWRpdERldGFpbHMoZGV0YWlscylcbiAgICA6IHsgLi4uZGV0YWlscyB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGhlIGFsbG93bGlzdFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEEgdmFsdWUgYW4gYWxsb3dsaXN0ZWQgb3JnIHNldHRpbmcgY2FuIGhvbGQuICovXG4vKipcbiAqIFRoZSBwcm9wb3NhbCBraW5kcyB0aGUgQXNrIGFnZW50IGNhbiBkcmFmdC5cbiAqXG4gKiBNaXJyb3JzIHRoZSBmcm9udGVuZCdzIGBQcm9wb3NhbEtpbmRgOyB0aGUgdHdvIGFyZSBwaW5uZWQgdG8gZWFjaCBvdGhlciBieVxuICogYGFzay1wcm9wb3NhbC1wZXJtaXNzaW9ucy50ZXN0LnRzYCBpbiB0aGUgZnJvbnRlbmQsIHdoaWNoIGlzIHdoZXJlIGJvdGggYXJlXG4gKiB2aXNpYmxlIGF0IG9uY2UuXG4gKi9cbmV4cG9ydCB0eXBlIEFza1Byb3Bvc2FsS2luZCA9XG4gIHwgJ3BpcGVsaW5lJ1xuICB8ICdwbHVnaW4nXG4gIHwgJ3RlbXBsYXRlJ1xuICB8ICdwaXBlbGluZS1lZGl0J1xuICB8ICdwbHVnaW4tZWRpdCdcbiAgfCAndGVtcGxhdGUtZWRpdCdcbiAgfCAnb3JnLXNldHRpbmdzLWVkaXQnXG4gIHwgJ2luc3RhbGwtY2hhbmdlLXJlcXVlc3QnXG4gIHwgJ2NvbXBsaWFuY2UtZXhlbXB0aW9uLXJlcXVlc3QnO1xuXG4vKipcbiAqIFRoZSBwZXJtaXNzaW9uIGEgY2FsbGVyIG5lZWRzIHRvIENPTU1JVCBlYWNoIHByb3Bvc2FsIGtpbmQg4oCUIHRoZSBvbmUgZmFjdCB0aGVcbiAqIGFzayBzZXJ2aWNlIGFuZCB0aGUgZGFzaGJvYXJkIG11c3QgYWdyZWUgb24sIHNvIGl0IGxpdmVzIGhlcmUgcmF0aGVyIHRoYW4gaW5cbiAqIGVpdGhlciBvZiB0aGVtLlxuICpcbiAqIGBvcmctc2V0dGluZ3MtZWRpdGAgaXMgbnVsbCBiZWNhdXNlIGl0IGhhcyBubyBzaW5nbGUgYW5zd2VyOiBpdHMgcmVxdWlyZW1lbnRcbiAqIGlzIHRoZSB1bmlvbiBvZiBgcGVybWlzc2lvbmAgb3ZlciB0aGUge0BsaW5rIE9SR19TRVRUSU5HX1BST1BPU0FMX0FMTE9XTElTVH1cbiAqIHJvd3MgdGhlIHByb3Bvc2FsIGFjdHVhbGx5IHRvdWNoZXMsIHdoaWNoIG9ubHkgdGhlIHByb3Bvc2FsIGl0c2VsZiBkZWNpZGVzLlxuICpcbiAqIE5PVCBhIGdhdGUgYW55d2hlcmUuIFRoZSBzZXJ2aWNlIHVzZXMgaXQgdG8gVEVMTCB0aGUgY2FsbGVyIChhbmQgdGhlIG1vZGVsKVxuICogd2hldGhlciBhIGRyYWZ0IGlzIGFwcGxpYWJsZTsgdGhlIGRhc2hib2FyZCB1c2VzIGl0IHRvIGRpc2FibGUgdGhlIEFwcGx5XG4gKiBidXR0b24gYW5kIG5hbWUgd2hhdCBpcyBtaXNzaW5nLiBFbmZvcmNlbWVudCBzdGF5cyB3aXRoIHRoZSBvd25pbmcgc2VydmljZSxcbiAqIHdoaWNoIHJlLWNoZWNrcyB0aGUgY2FsbGVyJ3Mgb3duIHRva2VuIG9uIHRoZSBjb21taXQuXG4gKi9cbmV4cG9ydCBjb25zdCBBU0tfUFJPUE9TQUxfUEVSTUlTU0lPTjogUmVhZG9ubHk8UmVjb3JkPEFza1Byb3Bvc2FsS2luZCwgUGVybWlzc2lvbiB8IG51bGw+PiA9IHtcbiAgJ3BpcGVsaW5lJzogJ3BpcGVsaW5lczp3cml0ZScsXG4gICdwbHVnaW4nOiAncGx1Z2luczp3cml0ZScsXG4gICd0ZW1wbGF0ZSc6ICd0ZW1wbGF0ZXM6d3JpdGUnLFxuICAncGlwZWxpbmUtZWRpdCc6ICdwaXBlbGluZXM6d3JpdGUnLFxuICAncGx1Z2luLWVkaXQnOiAncGx1Z2luczp3cml0ZScsXG4gICd0ZW1wbGF0ZS1lZGl0JzogJ3RlbXBsYXRlczp3cml0ZScsXG4gICdvcmctc2V0dGluZ3MtZWRpdCc6IG51bGwsXG4gIC8vIEZpbGluZyBhIHJlcXVlc3QsIG5vdCBtYWtpbmcgdGhlIGNoYW5nZTogYW55IG1lbWJlciB3aG8gbWF5IGluc3RhbGwgbWF5IEFTSyxcbiAgLy8gYW5kIGBwbHVnaW5faW5zdGFsbHM6bWFuYWdlYCBkZWNpZGVzLiBTYW1lIHNoYXBlIGZvciB0aGUgZXhlbXB0aW9uIGJlbG93IOKAlFxuICAvLyBgY29tcGxpYW5jZTpyZWFkYCByZXF1ZXN0cywgYGNvbXBsaWFuY2U6d3JpdGVgIGRlY2lkZXMuXG4gICdpbnN0YWxsLWNoYW5nZS1yZXF1ZXN0JzogJ3BsdWdpbnM6aW5zdGFsbCcsXG4gICdjb21wbGlhbmNlLWV4ZW1wdGlvbi1yZXF1ZXN0JzogJ2NvbXBsaWFuY2U6cmVhZCcsXG59O1xuXG5leHBvcnQgdHlwZSBPcmdTZXR0aW5nVmFsdWUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuO1xuXG4vKiogV2hpY2ggcGVyLW9yZyByZWNvcmQgKGFuZCB0aGVyZWZvcmUgd2hpY2ggQVBJKSBhIGZpZWxkIGJlbG9uZ3MgdG8uICovXG5leHBvcnQgdHlwZSBPcmdTZXR0aW5nU3VyZmFjZSA9XG4gIHwgJ3JlcG9ydGluZydcbiAgfCAnY29tcGxpYW5jZU5vdGlmaWNhdGlvbnMnXG4gIHwgJ3BsdWdpblNlY3VyaXR5Tm90aWZpY2F0aW9ucyc7XG5cbi8qKlxuICogRXZlcnkgcHJvcG9zYWJsZSBzZXR0aW5nLCBhcyBgPHN1cmZhY2U+LjxmaWVsZD5gLiBXcml0aW5nIHRoZSB1bmlvbiBvdXQgYnlcbiAqIGhhbmQgKHJhdGhlciB0aGFuIGluZmVycmluZyBpdCBmcm9tIHRoZSBhcnJheSkgaXMgZGVsaWJlcmF0ZTogdGhlIGtleSBzcGFjZVxuICogaXMgdGhlIGNvbnRyYWN0IHRoZSB0b29sIHNjaGVtYSBhbmQgdGhlIGNvbmZpcm0gaGFuZGxlciBzaGFyZSwgc28gaXQgaXNcbiAqIHN0YXRlZCBvbmNlLCBleHBsaWNpdGx5LCBhbmQgYSB0eXBvIGluIGFuIGVudHJ5IGJlbG93IGlzIGEgY29tcGlsZSBlcnJvci5cbiAqL1xuZXhwb3J0IHR5cGUgT3JnU2V0dGluZ0tleSA9XG4gIHwgJ3JlcG9ydGluZy5pbmNpZGVudFdpbmRvd0hvdXJzJ1xuICB8ICdjb21wbGlhbmNlTm90aWZpY2F0aW9ucy5ub3RpZnlPbkJsb2NrJ1xuICB8ICdjb21wbGlhbmNlTm90aWZpY2F0aW9ucy5ub3RpZnlPbldhcm5pbmcnXG4gIHwgJ2NvbXBsaWFuY2VOb3RpZmljYXRpb25zLmVtYWlsRW5hYmxlZCdcbiAgfCAnY29tcGxpYW5jZU5vdGlmaWNhdGlvbnMuZGlnZXN0TW9kZSdcbiAgfCAncGx1Z2luU2VjdXJpdHlOb3RpZmljYXRpb25zLm5vdGlmeVJlc2NhbidcbiAgfCAncGx1Z2luU2VjdXJpdHlOb3RpZmljYXRpb25zLmRpZ2VzdE1vZGUnO1xuXG4vKiogVGhlIGNsb3NlZCBzaGFwZSBhIHByb3Bvc2VkIHZhbHVlIG11c3QgbWF0Y2ggYmVmb3JlIGl0IGlzIGFjY2VwdGVkLiAqL1xuZXhwb3J0IHR5cGUgT3JnU2V0dGluZ1NoYXBlID1cbiAgfCB7IHJlYWRvbmx5IGtpbmQ6ICdib29sZWFuJyB9XG4gIHwgeyByZWFkb25seSBraW5kOiAnaW50ZWdlcic7IHJlYWRvbmx5IG1pbjogbnVtYmVyOyByZWFkb25seSBtYXg6IG51bWJlciB9XG4gIHwgeyByZWFkb25seSBraW5kOiAnZW51bSc7IHJlYWRvbmx5IHZhbHVlczogcmVhZG9ubHkgc3RyaW5nW10gfTtcblxuLyoqIE9uZSBwcm9wb3NhYmxlIG9yZyBzZXR0aW5nLiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmdTZXR0aW5nU3BlYyB7XG4gIC8qKiBTdGFibGUgcHJvcG9zYWwga2V5IOKAlCBgPHN1cmZhY2U+LjxmaWVsZD5gLiBUaGlzIGlzIHdoYXQgdGhlIG1vZGVsIG5hbWVzLiAqL1xuICByZWFkb25seSBrZXk6IE9yZ1NldHRpbmdLZXk7XG4gIHJlYWRvbmx5IHN1cmZhY2U6IE9yZ1NldHRpbmdTdXJmYWNlO1xuICAvKiogVGhlIHJlcXVlc3QtYm9keSBmaWVsZCBuYW1lIHRoZSBBUEkgZXhwZWN0cy4gKi9cbiAgcmVhZG9ubHkgZmllbGQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc2hhcGU6IE9yZ1NldHRpbmdTaGFwZTtcbiAgLyoqIFRoZSByb3V0ZSB0aGF0IGFwcGxpZXMgaXQsIGNhbGxlZCBieSB0aGUgQlJPV1NFUiB3aXRoIHRoZSB1c2VyJ3Mgc2Vzc2lvbi4gKi9cbiAgcmVhZG9ubHkgYXBpOiB7IHJlYWRvbmx5IG1ldGhvZDogJ1BVVCc7IHJlYWRvbmx5IHBhdGg6IHN0cmluZyB9O1xuICAvKiogVGhlIHBlcm1pc3Npb24gdGhhdCByb3V0ZSByZXF1aXJlcyBvZiB0aGUgY2FsbGVyLiAqL1xuICByZWFkb25seSBwZXJtaXNzaW9uOiBQZXJtaXNzaW9uO1xuICAvKiogU2hvcnQgaHVtYW4gbGFiZWwgZm9yIHRoZSBjb25maXJtIGNhcmQuICovXG4gIHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG4gIC8qKiBXSFkgdGhpcyBmaWVsZCBpcyBzYWZlIHRvIHByb3Bvc2UuIEV2ZXJ5IGVudHJ5IHN0YXRlcyBpdHMgb3duIGNhc2UuICovXG4gIHJlYWRvbmx5IHdoeTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBgZGlnZXN0TW9kZWAgdm9jYWJ1bGFyeSBpcyBNSVJST1JFRCwgbm90IGltcG9ydGVkOiB0aGlzIG1vZHVsZSBrZWVwcyB6ZXJvXG4gKiBydW50aW1lIGltcG9ydHMgc28gdGhlIGJyb3dzZXIgZW50cnkgc3RheXMgc3RhbmRhbG9uZS4gVGhlIHR5cGUgYW5ub3RhdGlvblxuICogbWFrZXMgYSBSRU1PVkVEIG1vZGUgYSBjb21waWxlIGVycm9yIGhlcmUsIGFuZCBgYXNrLXByb3Bvc2Fscy50ZXN0LnRzYCBhc3NlcnRzXG4gKiB0aGUgbGlzdCBhZ2FpbnN0IGBQTFVHSU5fU0VDVVJJVFlfRElHRVNUX01PREVTYCBzbyBhbiBBRERFRCBvbmUgY2Fubm90IGRyaWZ0XG4gKiBlaXRoZXIuXG4gKi9cbmNvbnN0IERJR0VTVF9NT0RFUzogcmVhZG9ubHkgUGx1Z2luU2VjdXJpdHlEaWdlc3RNb2RlW10gPSBbJ2ltbWVkaWF0ZScsICdkYWlseScsICd3ZWVrbHknXTtcblxuLyoqXG4gKiBUaGUgYWxsb3dsaXN0LiBBZGRpbmcgYW4gZW50cnkgaXMgYSBkZWxpYmVyYXRlIGFjdDogbmFtZSB0aGUgcm91dGUgeW91XG4gKiBjaGVja2VkLCBjb25maXJtIGl0IGNhcnJpZXMgbm8gYHJlcXVpcmVTdGVwVXBgLCBhbmQgd3JpdGUgdGhlIGB3aHlgLlxuICovXG5leHBvcnQgY29uc3QgT1JHX1NFVFRJTkdfUFJPUE9TQUxfQUxMT1dMSVNUOiByZWFkb25seSBPcmdTZXR0aW5nU3BlY1tdID0gW1xuICB7XG4gICAga2V5OiAncmVwb3J0aW5nLmluY2lkZW50V2luZG93SG91cnMnLFxuICAgIHN1cmZhY2U6ICdyZXBvcnRpbmcnLFxuICAgIGZpZWxkOiAnaW5jaWRlbnRXaW5kb3dIb3VycycsXG4gICAgc2hhcGU6IHsga2luZDogJ2ludGVnZXInLCBtaW46IDEsIG1heDogNzIwIH0sXG4gICAgYXBpOiB7IG1ldGhvZDogJ1BVVCcsIHBhdGg6ICcvcmVwb3J0cy9zZXR0aW5ncy9pbmNpZGVudHMnIH0sXG4gICAgcGVybWlzc2lvbjogJ29yZ19zZXR0aW5nczp3cml0ZScsXG4gICAgbGFiZWw6ICdJbmNpZGVudCBjb3JyZWxhdGlvbiB3aW5kb3cgKGhvdXJzKScsXG4gICAgd2h5OlxuICAgICAgJ0FuYWx5dGljcyB0dW5pbmcgb25seTogaXQgZGVjaWRlcyBob3cgbG9uZyBhZnRlciBhIGRlcGxveSBhbiBpbmNpZGVudCBpcyAnXG4gICAgICArICdhdHRyaWJ1dGVkIHRvIHRoYXQgZGVwbG95IHdoZW4gRE9SQSBtZXRyaWNzIGFyZSBjb21wdXRlZC4gSXQgZ3JhbnRzIG5vdGhpbmcsICdcbiAgICAgICsgJ3JldmVhbHMgbm90aGluZyBhbmQgcmVhY2hlcyBubyBvbmUg4oCUIHRoZSB3b3JzdCBvdXRjb21lIG9mIGEgd3JvbmcgdmFsdWUgaXMgYSAnXG4gICAgICArICdtaXNsZWFkaW5nIGNoYW5nZS1mYWlsdXJlIHJhdGUsIHdoaWNoIHRoZSBuZXh0IGVkaXQgY29ycmVjdHMuIFRoZSByb3V0ZSAnXG4gICAgICArICdyZWplY3RzIHRoZSBzaWJsaW5nIHJldGVudGlvbiBmaWVsZHMgb3V0cmlnaHQgKHRoZXkgYXJlIGJpbGxpbmctb3duZWQpLCBzbyAnXG4gICAgICArICd0aGlzIGlzIHRoZSB3aG9sZSB3cml0YWJsZSBzdXJmYWNlLiBCb3VuZGVkIGludGVnZXIsIHNvIHRoZSBkaWZmIGlzIG9uZSBudW1iZXIuJyxcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbXBsaWFuY2VOb3RpZmljYXRpb25zLm5vdGlmeU9uQmxvY2snLFxuICAgIHN1cmZhY2U6ICdjb21wbGlhbmNlTm90aWZpY2F0aW9ucycsXG4gICAgZmllbGQ6ICdub3RpZnlPbkJsb2NrJyxcbiAgICBzaGFwZTogeyBraW5kOiAnYm9vbGVhbicgfSxcbiAgICBhcGk6IHsgbWV0aG9kOiAnUFVUJywgcGF0aDogJy9jb21wbGlhbmNlL25vdGlmaWNhdGlvbi1wcmVmZXJlbmNlcycgfSxcbiAgICBwZXJtaXNzaW9uOiAnY29tcGxpYW5jZTp3cml0ZScsXG4gICAgbGFiZWw6ICdOb3RpZnkgd2hlbiBjb21wbGlhbmNlIGJsb2NrcyBhbiBhY3Rpb24nLFxuICAgIHdoeTpcbiAgICAgICdBIGRlbGl2ZXJ5IHByZWZlcmVuY2UsIG5vdCBhbiBlbmZvcmNlbWVudCBjb250cm9sOiB0aGUgYmxvY2sgaGFwcGVucyBlaXRoZXIgJ1xuICAgICAgKyAnd2F5IGFuZCB0aGUgcG9saWN5IHRoYXQgY2F1c2VkIGl0IGlzIHVuY2hhbmdlZC4gVHVybmluZyBpdCBvZmYgbWFrZXMgdGhlIG9yZyAnXG4gICAgICArICdxdWlldGVyLCBuZXZlciBtb3JlIHBlcm1pc3NpdmUuJyxcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbXBsaWFuY2VOb3RpZmljYXRpb25zLm5vdGlmeU9uV2FybmluZycsXG4gICAgc3VyZmFjZTogJ2NvbXBsaWFuY2VOb3RpZmljYXRpb25zJyxcbiAgICBmaWVsZDogJ25vdGlmeU9uV2FybmluZycsXG4gICAgc2hhcGU6IHsga2luZDogJ2Jvb2xlYW4nIH0sXG4gICAgYXBpOiB7IG1ldGhvZDogJ1BVVCcsIHBhdGg6ICcvY29tcGxpYW5jZS9ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMnIH0sXG4gICAgcGVybWlzc2lvbjogJ2NvbXBsaWFuY2U6d3JpdGUnLFxuICAgIGxhYmVsOiAnTm90aWZ5IG9uIGNvbXBsaWFuY2Ugd2FybmluZ3MnLFxuICAgIHdoeTogJ0FzIG5vdGlmeU9uQmxvY2sg4oCUIHdoaWNoIG5vbi1ibG9ja2luZyBmaW5kaW5ncyBhcmUgYW5ub3VuY2VkLCBub3Qgd2hhdCBpcyBlbmZvcmNlZC4nLFxuICB9LFxuICB7XG4gICAga2V5OiAnY29tcGxpYW5jZU5vdGlmaWNhdGlvbnMuZW1haWxFbmFibGVkJyxcbiAgICBzdXJmYWNlOiAnY29tcGxpYW5jZU5vdGlmaWNhdGlvbnMnLFxuICAgIGZpZWxkOiAnZW1haWxFbmFibGVkJyxcbiAgICBzaGFwZTogeyBraW5kOiAnYm9vbGVhbicgfSxcbiAgICBhcGk6IHsgbWV0aG9kOiAnUFVUJywgcGF0aDogJy9jb21wbGlhbmNlL25vdGlmaWNhdGlvbi1wcmVmZXJlbmNlcycgfSxcbiAgICBwZXJtaXNzaW9uOiAnY29tcGxpYW5jZTp3cml0ZScsXG4gICAgbGFiZWw6ICdTZW5kIGNvbXBsaWFuY2Ugbm90aWNlcyBieSBlbWFpbCcsXG4gICAgd2h5OlxuICAgICAgJ0Nob29zZXMgd2hldGhlciB0aGUgZXhpc3Rpbmcgbm90aWNlcyBnbyBvdXQgYnkgZW1haWwuIEl0IGRvZXMgbm90IG5hbWUgYSAnXG4gICAgICArICdyZWNpcGllbnQg4oCUIHRoZSBhZGRyZXNzIGxpc3QgaXMgcmVzb2x2ZWQgZnJvbSBvcmcgbWVtYmVyc2hpcCBhdCBzZW5kIHRpbWUg4oCUICdcbiAgICAgICsgJ3NvIGEgZmxpcHBlZCBib29sZWFuIGNhbiBuZXZlciByb3V0ZSBtYWlsIHNvbWV3aGVyZSBuZXcuJyxcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbXBsaWFuY2VOb3RpZmljYXRpb25zLmRpZ2VzdE1vZGUnLFxuICAgIHN1cmZhY2U6ICdjb21wbGlhbmNlTm90aWZpY2F0aW9ucycsXG4gICAgZmllbGQ6ICdkaWdlc3RNb2RlJyxcbiAgICBzaGFwZTogeyBraW5kOiAnZW51bScsIHZhbHVlczogRElHRVNUX01PREVTIH0sXG4gICAgYXBpOiB7IG1ldGhvZDogJ1BVVCcsIHBhdGg6ICcvY29tcGxpYW5jZS9ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMnIH0sXG4gICAgcGVybWlzc2lvbjogJ2NvbXBsaWFuY2U6d3JpdGUnLFxuICAgIGxhYmVsOiAnQ29tcGxpYW5jZSBub3RpY2UgY2FkZW5jZScsXG4gICAgd2h5OiAnQ2FkZW5jZSBvZiBhbiBleGlzdGluZyBub3RpY2UgdG8gZXhpc3RpbmcgcmVjaXBpZW50cy4gQ2xvc2VkIGVudW0sIHNvIHRoZSBkaWZmIGlzIG9uZSB3b3JkLicsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdwbHVnaW5TZWN1cml0eU5vdGlmaWNhdGlvbnMubm90aWZ5UmVzY2FuJyxcbiAgICBzdXJmYWNlOiAncGx1Z2luU2VjdXJpdHlOb3RpZmljYXRpb25zJyxcbiAgICBmaWVsZDogJ25vdGlmeVJlc2NhbicsXG4gICAgc2hhcGU6IHsga2luZDogJ2Jvb2xlYW4nIH0sXG4gICAgYXBpOiB7IG1ldGhvZDogJ1BVVCcsIHBhdGg6ICcvcGx1Z2lucy9zZWN1cml0eS1ub3RpZmljYXRpb25zJyB9LFxuICAgIHBlcm1pc3Npb246ICdvcmdfc2V0dGluZ3M6d3JpdGUnLFxuICAgIGxhYmVsOiAnTm90aWZ5IG9uIG5pZ2h0bHkgcmVzY2FuIGZpbmRpbmdzJyxcbiAgICB3aHk6XG4gICAgICAnR292ZXJucyB0aGUgTjMxIHJlc2NhbiBub3RpY2Ugb25seS4gVGhlIHNjYW4gR0FURVMgYXJlIHVudG91Y2hlZDogYSBidWlsZCB0aGF0ICdcbiAgICAgICsgJ3RyaXBzIFBMVUdJTl9WVUxOX0dBVEUgc3RpbGwgZmFpbHMgYW5kIHN0aWxsIHNlbmRzIE4zMCwgd2hpY2ggdGhpcyBmbGFnIGNhbm5vdCAnXG4gICAgICArICdzdXBwcmVzcy4gU28gaXQgY2hhbmdlcyBob3cgbm9pc3kgYW4gaW5mb3JtYXRpb25hbCBub3RpY2UgaXMsIG5vdCB3aGV0aGVyIGEgJ1xuICAgICAgKyAndnVsbmVyYWJsZSB2ZXJzaW9uIGNhbiBiZSBwdWJsaXNoZWQuJyxcbiAgfSxcbiAge1xuICAgIGtleTogJ3BsdWdpblNlY3VyaXR5Tm90aWZpY2F0aW9ucy5kaWdlc3RNb2RlJyxcbiAgICBzdXJmYWNlOiAncGx1Z2luU2VjdXJpdHlOb3RpZmljYXRpb25zJyxcbiAgICBmaWVsZDogJ2RpZ2VzdE1vZGUnLFxuICAgIHNoYXBlOiB7IGtpbmQ6ICdlbnVtJywgdmFsdWVzOiBESUdFU1RfTU9ERVMgfSxcbiAgICBhcGk6IHsgbWV0aG9kOiAnUFVUJywgcGF0aDogJy9wbHVnaW5zL3NlY3VyaXR5LW5vdGlmaWNhdGlvbnMnIH0sXG4gICAgcGVybWlzc2lvbjogJ29yZ19zZXR0aW5nczp3cml0ZScsXG4gICAgbGFiZWw6ICdQbHVnaW4gc2VjdXJpdHkgbm90aWNlIGNhZGVuY2UnLFxuICAgIHdoeTpcbiAgICAgICdDYWRlbmNlIG9mIHRoZSByZXNjYW4gbm90aWNlLiBOMzAgKFwidmVyc2lvbiBibG9ja2VkXCIpIGlzIGFsd2F5cyBpbW1lZGlhdGUgYW5kICdcbiAgICAgICsgJ2lnbm9yZXMgdGhpcyBmaWVsZCwgc28gdGhlIHVyZ2VudCBjaGFubmVsIGNhbm5vdCBiZSBzbG93ZWQgZG93bi4nLFxuICB9LFxuXTtcblxuLyoqXG4gKiBGaWVsZHMgREVMSUJFUkFURUxZIGV4Y2x1ZGVkLCB3aXRoIHRoZSByZWFzb24sIHNvIGEgZnV0dXJlIHJlYWRlciBkb2VzIG5vdFxuICogcmUtbGl0aWdhdGUgdGhlbSBhbmQgYSByZXZpZXdlciBjYW4gc2VlIHRoZXkgd2VyZSBjb25zaWRlcmVkIHJhdGhlciB0aGFuXG4gKiBtaXNzZWQuIFRoaXMgaXMgZG9jdW1lbnRhdGlvbiBvbmx5IOKAlCB7QGxpbmsgcGlja0FsbG93ZWR9IGNvbnN1bHRzIHRoZVxuICogYWxsb3dsaXN0IGFsb25lLCBhbmQgYSBmaWVsZCBhYnNlbnQgZnJvbSBCT1RIIGxpc3RzIGlzIHJlZnVzZWQgaWRlbnRpY2FsbHkuXG4gKi9cbmV4cG9ydCBjb25zdCBPUkdfU0VUVElOR19QUk9QT1NBTF9FWENMVVNJT05TOiBSZWFkb25seUFycmF5PHsgcmVhZG9ubHkgZmllbGQ6IHN0cmluZzsgcmVhZG9ubHkgd2h5OiBzdHJpbmcgfT4gPSBbXG4gIHsgZmllbGQ6ICdvcmdhbml6YXRpb24uYWlDb25maWcnLCB3aHk6ICdTdGVwLXVwIGdhdGVkIChQVVQgL29yZ2FuaXphdGlvbi9haS1jb25maWcpIGFuZCBwZXJzaXN0cyBwZXItb3JnIHByb3ZpZGVyIHNlY3JldHMuJyB9LFxuICB7IGZpZWxkOiAnb3JnYW5pemF0aW9uLm1mYVBvbGljeScsIHdoeTogJ1NlY3VyaXR5IGNvbnRyb2wgKyBzdGVwLXVwLiBMb29zZW5pbmcgaXQgcmVtb3ZlcyBhIGNvbnRyb2wgZm9yIGV2ZXJ5IG1lbWJlci4nIH0sXG4gIHsgZmllbGQ6ICdvcmdhbml6YXRpb24ucGFzc3dvcmRQb2xpY3knLCB3aHk6ICdTZWN1cml0eSBjb250cm9sICsgc3RlcC11cC4nIH0sXG4gIHsgZmllbGQ6ICdvcmdhbml6YXRpb24uYXV0aGVudGljYXRvclBvbGljeScsIHdoeTogJ1NlY3VyaXR5IGNvbnRyb2wgKyBzdGVwLXVwLicgfSxcbiAgeyBmaWVsZDogJ29yZ2FuaXphdGlvbi5pbXBlcnNvbmF0aW9uUG9saWN5Jywgd2h5OiAnU2VjdXJpdHkgY29udHJvbCArIHN0ZXAtdXA7IGRlY2lkZXMgd2hvIG91dHNpZGUgdGhlIG9yZyBtYXkgdmlldyBpdHMgZGF0YS4nIH0sXG4gIHsgZmllbGQ6ICdvcmdhbml6YXRpb24uaWRwJywgd2h5OiAnU1NPL1NBTUwgY29uZmlnOiBzZWN1cml0eSBjb250cm9sIG9uIGl0cyBvd24gY2FwYWJpbGl0eSAob3JnX2lkcDp3cml0ZSksIGFzc3VyYW5jZSArIHN0cm9uZyBzdGVwLXVwLicgfSxcbiAgeyBmaWVsZDogJ29yZ2FuaXphdGlvbi5rbXNDb25maWcnLCB3aHk6ICdLZXkgbWF0ZXJpYWwuIE93biBjYXBhYmlsaXR5IChvcmdfa21zOndyaXRlKSwgYXNzdXJhbmNlICsgc3Ryb25nIHN0ZXAtdXAuJyB9LFxuICB7IGZpZWxkOiAnb3JnYW5pemF0aW9uLmlkZW50aXR5Jywgd2h5OiAnT3JnIG5hbWUvc2x1Zzogbm8gc3RlcC11cCwgYnV0IHJlbmFtaW5nIGFuIG9yZyBpcyBhbiBpbXBlcnNvbmF0aW9uIHByaW1pdGl2ZSBhbmQgdGhlIHNsdWcgaXMgYWRkcmVzc2FibGUuJyB9LFxuICB7IGZpZWxkOiAnb3JnYW5pemF0aW9uLmRvbWFpbnMnLCB3aHk6ICdWZXJpZmllZCBkb21haW5zIGRyaXZlIGRvbWFpbi1iYXNlZCBqb2luIOKAlCB3aG8gbWF5IGJlY29tZSBhIG1lbWJlci4nIH0sXG4gIHsgZmllbGQ6ICdvcmdhbml6YXRpb24uam9pblJlcXVlc3RzJywgd2h5OiAnTWVtYmVyc2hpcCBkZWNpc2lvbnMgYXJlIGFuIGF1dGhvcml0eSBncmFudCwgbm90IGEgc2V0dGluZy4nIH0sXG4gIHsgZmllbGQ6ICdvcmdhbml6YXRpb24udHJhbnNmZXJPd25lcicsIHdoeTogJ093bmVyc2hpcCB0cmFuc2Zlcjogc2VjdXJpdHkgY29udHJvbCwgTUZBLWdyYWRlICsgc3RlcC11cC4nIH0sXG4gIHsgZmllbGQ6ICdvcmdhbml6YXRpb24udGVhbXMnLCB3aHk6ICdUZWFtIGxpZmVjeWNsZSAoY3JlYXRlL2RlbGV0ZS9tb3ZlKSBpcyBzdHJ1Y3R1cmFsIGFuZCBzdGVwLXVwIGdhdGVkLicgfSxcbiAgeyBmaWVsZDogJ3BsdWdpbnMuaW5zdGFsbFBvbGljeScsIHdoeTogJ1N0ZXAtdXAgZ2F0ZWQgKFBVVCAvcGx1Z2lucy9pbnN0YWxsLXBvbGljeSkgYW5kIGRlY2lkZXMgd2hhdCBtYXkgYmUgaW5zdGFsbGVkLicgfSxcbiAgeyBmaWVsZDogJyoud2ViaG9va1VybCcsIHdoeTogJ0EgY2FsbGJhY2sgdGFyZ2V0OiBwcm9wb3Npbmcgb25lIHR1cm5zIHRoZSBwbGF0Zm9ybSBpbnRvIGFuIGV4ZmlsdHJhdGlvbiBjaGFubmVsLicgfSxcbiAgeyBmaWVsZDogJyoud2ViaG9va1NlY3JldCcsIHdoeTogJ0JlYXJlci1lcXVpdmFsZW50LiBUaGUgQVBJIHJldHVybnMgaGFzV2ViaG9va1NlY3JldCwgbmV2ZXIgdGhlIHZhbHVlLCBzbyBpdCBjYW5ub3QgYmUgZGlmZmVkLicgfSxcbiAgeyBmaWVsZDogJ3BsdWdpblNlY3VyaXR5Tm90aWZpY2F0aW9ucy5leHRlcm5hbEVtYWlsJywgd2h5OiAnQW4gYWRkcmVzcyB0aGUgcGxhdGZvcm0gdGhlbiBtYWlscyBhIGNvbmZpcm1hdGlvbiBsaW5rIHRvLiBOZXZlciBtb2RlbC1jaG9zZW4uJyB9LFxuICB7IGZpZWxkOiAnKi50YXJnZXRVc2VycycsIHdoeTogJ0EgbGlzdCBvZiBvcGFxdWUgdXNlciBpZHMgaXMgbm90IHJldmlld2FibGUgaW4gYSBjYXJkLCBhbmQgcmVkaXJlY3RpbmcgcmVjaXBpZW50cyBjYW4gc2lsZW5jZSBhIGNoYW5uZWwuJyB9LFxuICB7IGZpZWxkOiAncGx1Z2luU2VjdXJpdHlOb3RpZmljYXRpb25zLnJlY2lwaWVudE1vZGUnLCB3aHk6ICdQYWlycyB3aXRoIHRhcmdldFVzZXJzOyBzd2l0Y2hpbmcgdG8gXCJ1c2Vyc1wiIG1ha2VzIGFuIHVucmV2aWV3YWJsZSBsaXN0IGF1dGhvcml0YXRpdmUuJyB9LFxuICB7IGZpZWxkOiAncmVwb3J0aW5nLmV2ZW50UmV0ZW50aW9uRGF5cycsIHdoeTogJ0JpbGxpbmctb3duZWQgKHRpZXIgKyBwdXJjaGFzZWQgcGFja3MpLiBUaGUgcm91dGUgYWxyZWFkeSByZWplY3RzIGl0OyBhZG1pdHRpbmcgaXQgd291bGQgYmUgYW4gZW50aXRsZW1lbnQgYnlwYXNzLicgfSxcbiAgeyBmaWVsZDogJ3JlcG9ydGluZy5kb3JhUmV0ZW50aW9uRGF5cycsIHdoeTogJ0JpbGxpbmctb3duZWQsIGFzIGFib3ZlLicgfSxcbl07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb29rdXBcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IEJZX0tFWTogUmVhZG9ubHlNYXA8c3RyaW5nLCBPcmdTZXR0aW5nU3BlYz4gPVxuICBuZXcgTWFwKE9SR19TRVRUSU5HX1BST1BPU0FMX0FMTE9XTElTVC5tYXAoKHNwZWMpID0+IFtzcGVjLmtleSwgc3BlY10pKTtcblxuLyoqIEV2ZXJ5IHByb3Bvc2FibGUga2V5IOKAlCB0aGUgZW51bSBhIHByb3Bvc2UgdG9vbCdzIGlucHV0IHNjaGVtYSBpcyBidWlsdCBmcm9tLiAqL1xuZXhwb3J0IGNvbnN0IE9SR19TRVRUSU5HX1BST1BPU0FMX0tFWVM6IHJlYWRvbmx5IE9yZ1NldHRpbmdLZXlbXSA9XG4gIE9SR19TRVRUSU5HX1BST1BPU0FMX0FMTE9XTElTVC5tYXAoKHNwZWMpID0+IHNwZWMua2V5KTtcblxuLyoqIElzIGBrZXlgIG9uIHRoZSBhbGxvd2xpc3Q/ICovXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wb3NhYmxlT3JnU2V0dGluZyhrZXk6IHN0cmluZyk6IGtleSBpcyBPcmdTZXR0aW5nS2V5IHtcbiAgcmV0dXJuIEJZX0tFWS5oYXMoa2V5KTtcbn1cblxuLyoqIFRoZSBzcGVjIGZvciBga2V5YCwgb3IgdW5kZWZpbmVkIHdoZW4gaXQgaXMgbm90IHByb3Bvc2FibGUuICovXG5leHBvcnQgZnVuY3Rpb24gb3JnU2V0dGluZ1NwZWMoa2V5OiBzdHJpbmcpOiBPcmdTZXR0aW5nU3BlYyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBCWV9LRVkuZ2V0KGtleSk7XG59XG5cbi8qKiBEb2VzIGB2YWx1ZWAgbWF0Y2ggdGhlIHNoYXBlIHRoZSBmaWVsZCBkZWNsYXJlcz8gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkT3JnU2V0dGluZ1ZhbHVlKHNwZWM6IE9yZ1NldHRpbmdTcGVjLCB2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIE9yZ1NldHRpbmdWYWx1ZSB7XG4gIGNvbnN0IHNoYXBlID0gc3BlYy5zaGFwZTtcbiAgaWYgKHNoYXBlLmtpbmQgPT09ICdib29sZWFuJykgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xuICBpZiAoc2hhcGUua2luZCA9PT0gJ2ludGVnZXInKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgJiYgdmFsdWUgPj0gc2hhcGUubWluICYmIHZhbHVlIDw9IHNoYXBlLm1heDtcbiAgfVxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBzaGFwZS52YWx1ZXMuaW5jbHVkZXModmFsdWUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gcGlja0FsbG93ZWQgKHJ1bGVzIDEsIDMgYW5kIDEwKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEEgcHJvcG9zYWwncyBzZXR0aW5ncywga2V5ZWQgYnkgYWxsb3dsaXN0IGtleS4gKi9cbmV4cG9ydCB0eXBlIE9yZ1NldHRpbmdQYXRjaCA9IFBhcnRpYWw8UmVjb3JkPE9yZ1NldHRpbmdLZXksIE9yZ1NldHRpbmdWYWx1ZT4+O1xuXG4vKiogV2hhdCB7QGxpbmsgcGlja0FsbG93ZWR9IGtlcHQsIGFuZCB3aGF0IGl0IHRocmV3IGF3YXkuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpY2tBbGxvd2VkUmVzdWx0IHtcbiAgLyoqIFRoZSBhbGxvd2xpc3RlZCwgc2hhcGUtdmFsaWQgc2V0dGluZ3MuICovXG4gIHJlYWRvbmx5IGFsbG93ZWQ6IE9yZ1NldHRpbmdQYXRjaDtcbiAgLyoqXG4gICAqIEZpZWxkIG5hbWVzIHRoZSBjYW5kaWRhdGUgY2FycmllZCB0aGF0IGFyZSBOT1Qgb24gdGhlIGFsbG93bGlzdC4gVEhJUyBpc1xuICAgKiB0aGUgaW5qZWN0aW9uIHNpZ25hbCAocnVsZSAxMCk6IGEgbGVnaXRpbWF0ZSBkcmFmdCBoYXMgbm9uZSwgc28gYSBub24tZW1wdHlcbiAgICogbGlzdCBpcyBhIGNvdW50ZXIgdG8gaW5jcmVtZW50IGFuZCBhIGxpbmUgdG8gbG9nLCBub3QgYSBzaWxlbnQgZHJvcC5cbiAgICovXG4gIHJlYWRvbmx5IHJlZnVzZWQ6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKipcbiAgICogQWxsb3dsaXN0ZWQga2V5cyB3aG9zZSB2YWx1ZSBkaWQgbm90IG1hdGNoIHRoZSBkZWNsYXJlZCBzaGFwZS4gRHJvcHBlZCB0b28sXG4gICAqIGJ1dCByZXBvcnRlZCBzZXBhcmF0ZWx5IOKAlCBhIGJhZCB2YWx1ZSBpcyBhIGRyYWZ0aW5nIG1pc3Rha2UsIG5vdCBhbiBhdHRlbXB0XG4gICAqIHRvIHJlYWNoIGEgZmllbGQgdGhlIGFnZW50IHdhcyBuZXZlciBnaXZlbi5cbiAgICovXG4gIHJlYWRvbmx5IGludmFsaWQ6IHJlYWRvbmx5IE9yZ1NldHRpbmdLZXlbXTtcbiAgLyoqIGByZWZ1c2VkLmxlbmd0aGAsIHNvIGEgY2FsbGVyIGNhbiBjb3VudCB3aXRob3V0IHJlLWRlcml2aW5nIGl0LiAqL1xuICByZWFkb25seSByZWZ1c2VkQ291bnQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBLZWVwIG9ubHkgdGhlIGFsbG93bGlzdGVkLCBzaGFwZS12YWxpZCBmaWVsZHMgb2YgYSBjYW5kaWRhdGUgcHJvcG9zYWwsIGFuZFxuICogcmVwb3J0IGV2ZXJ5dGhpbmcgZHJvcHBlZC5cbiAqXG4gKiBUaGUgcmVzdWx0J3MgYGFsbG93ZWRgIG1hcCBJUyB0aGUgY29tbWl0IHBheWxvYWQgKHJ1bGUgMyk6IHRoZSBjb25maXJtXG4gKiBoYW5kbGVyIHNlbmRzIHRoZXNlIGZpZWxkcyBhbmQgb25seSB0aGVzZSwgc28gYW55dGhpbmcgdGhlIG1vZGVsIHNsaXBwZWQgaW5cbiAqIGlzIHN0cnVjdHVyYWxseSB1bmFwcGxpYWJsZSByYXRoZXIgdGhhbiBtZXJlbHkgdW5yZW5kZXJlZC5cbiAqXG4gKiBgY2FuZGlkYXRlYCBpcyB1bnRydXN0ZWQgbW9kZWwgb3V0cHV0LCBzbyBpdCBpcyByZWFkIGRlZmVuc2l2ZWx5OiBhbnl0aGluZ1xuICogdGhhdCBpcyBub3QgYSBwbGFpbiBvYmplY3QgeWllbGRzIGFuIGVtcHR5IHJlc3VsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpY2tBbGxvd2VkKGNhbmRpZGF0ZTogdW5rbm93bik6IFBpY2tBbGxvd2VkUmVzdWx0IHtcbiAgY29uc3QgYWxsb3dlZDogT3JnU2V0dGluZ1BhdGNoID0ge307XG4gIGNvbnN0IHJlZnVzZWQ6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGludmFsaWQ6IE9yZ1NldHRpbmdLZXlbXSA9IFtdO1xuXG4gIGlmIChjYW5kaWRhdGUgJiYgdHlwZW9mIGNhbmRpZGF0ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoY2FuZGlkYXRlKSkge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNhbmRpZGF0ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpIHtcbiAgICAgIGNvbnN0IHNwZWMgPSBCWV9LRVkuZ2V0KGtleSk7XG4gICAgICBpZiAoIXNwZWMpIHsgcmVmdXNlZC5wdXNoKGtleSk7IGNvbnRpbnVlOyB9XG4gICAgICBpZiAoIWlzVmFsaWRPcmdTZXR0aW5nVmFsdWUoc3BlYywgdmFsdWUpKSB7IGludmFsaWQucHVzaChzcGVjLmtleSk7IGNvbnRpbnVlOyB9XG4gICAgICBhbGxvd2VkW3NwZWMua2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFsbG93ZWQsIHJlZnVzZWQsIGludmFsaWQsIHJlZnVzZWRDb3VudDogcmVmdXNlZC5sZW5ndGggfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIERpZmYgKyByZXF1ZXN0IHBsYW5uaW5nIChydWxlcyAzIGFuZCA3KVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIE9uZSByZXZpZXdlZCBjaGFuZ2U6IHdoYXQgdGhlIHNldHRpbmcgaXMgbm93LCBhbmQgd2hhdCBpdCB3b3VsZCBiZWNvbWUuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yZ1NldHRpbmdDaGFuZ2Uge1xuICByZWFkb25seSBzcGVjOiBPcmdTZXR0aW5nU3BlYztcbiAgcmVhZG9ubHkgZnJvbTogT3JnU2V0dGluZ1ZhbHVlIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSB0bzogT3JnU2V0dGluZ1ZhbHVlO1xufVxuXG4vKipcbiAqIFRoZSBjaGFuZ2VzIGEgcHJvcG9zYWwgYWN0dWFsbHkgbWFrZXMsIGdpdmVuIHRoZSBDVVJSRU5UIHZhbHVlcy4gQSBmaWVsZFxuICogd2hvc2UgcHJvcG9zZWQgdmFsdWUgYWxyZWFkeSBlcXVhbHMgdGhlIGN1cnJlbnQgb25lIGlzIGRyb3BwZWQg4oCUIGl0IGlzIG5vdCBhXG4gKiBjaGFuZ2UsIGFuZCByZW5kZXJpbmcgaXQgYXMgb25lIG1ha2VzIGEgZGlmZiB0aGUgdXNlciBjYW5ub3QgcmVhZC5cbiAqXG4gKiBUaGUgY29uZmlybSBoYW5kbGVyIHJlLXJ1bnMgdGhpcyBhZ2FpbnN0IGEgRlJFU0ggcmVhZCBpbW1lZGlhdGVseSBiZWZvcmVcbiAqIGNvbW1pdHRpbmcgKHJ1bGUgNyk6IHRoZXNlIHJlY29yZHMgY2Fycnkgbm8gdmVyc2lvbiBjb2x1bW4sIHNvIGlmIHRoZSBsaXN0XG4gKiB0aGF0IGNvbWVzIGJhY2sgZGlmZmVycyBmcm9tIHRoZSBvbmUgdGhlIHVzZXIgYXBwcm92ZWQsIHN0YXRlIG1vdmVkIHVuZGVyIHRoZVxuICogcHJvcG9zYWwgYW5kIHRoZSBjb21taXQgbXVzdCBiZSByZWZ1c2VkIHJhdGhlciB0aGFuIGFwcGxpZWQgYmxpbmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmT3JnU2V0dGluZ3MoXG4gIGN1cnJlbnQ6IFJlYWRvbmx5PE9yZ1NldHRpbmdQYXRjaD4sXG4gIHByb3Bvc2VkOiBSZWFkb25seTxPcmdTZXR0aW5nUGF0Y2g+LFxuKTogcmVhZG9ubHkgT3JnU2V0dGluZ0NoYW5nZVtdIHtcbiAgY29uc3QgY2hhbmdlczogT3JnU2V0dGluZ0NoYW5nZVtdID0gW107XG4gIGZvciAoY29uc3Qgc3BlYyBvZiBPUkdfU0VUVElOR19QUk9QT1NBTF9BTExPV0xJU1QpIHtcbiAgICBjb25zdCB0byA9IHByb3Bvc2VkW3NwZWMua2V5XTtcbiAgICBpZiAodG8gPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgY29uc3QgZnJvbSA9IGN1cnJlbnRbc3BlYy5rZXldO1xuICAgIGlmIChmcm9tID09PSB0bykgY29udGludWU7XG4gICAgY2hhbmdlcy5wdXNoKHsgc3BlYywgZnJvbSwgdG8gfSk7XG4gIH1cbiAgcmV0dXJuIGNoYW5nZXM7XG59XG5cbi8qKiBPbmUgQVBJIGNhbGwgdGhlIGNvbmZpcm0gaGFuZGxlciBtYWtlczogb25lIHN1cmZhY2UsIG9uZSBib2R5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmdTZXR0aW5nUmVxdWVzdCB7XG4gIHJlYWRvbmx5IHN1cmZhY2U6IE9yZ1NldHRpbmdTdXJmYWNlO1xuICByZWFkb25seSBtZXRob2Q6ICdQVVQnO1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBlcm1pc3Npb246IFBlcm1pc3Npb247XG4gIC8qKiBSZXF1ZXN0IGJvZHk6IHRoZSBBUEkncyBvd24gZmllbGQgbmFtZXMsIGNhcnJ5aW5nIG9ubHkgcmV2aWV3ZWQgdmFsdWVzLiAqL1xuICByZWFkb25seSBib2R5OiBSZWNvcmQ8c3RyaW5nLCBPcmdTZXR0aW5nVmFsdWU+O1xufVxuXG4vKipcbiAqIEdyb3VwIGFwcHJvdmVkIGNoYW5nZXMgaW50byBvbmUgcmVxdWVzdCBwZXIgc3VyZmFjZSwgdHJhbnNsYXRpbmcgcHJvcG9zYWxcbiAqIGtleXMgYmFjayB0byB0aGUgZmllbGQgbmFtZXMgZWFjaCBBUEkgZXhwZWN0cy4gT3JkZXIgZm9sbG93cyB0aGUgYWxsb3dsaXN0LFxuICogc28gdGhlIHNhbWUgcHJvcG9zYWwgYWx3YXlzIHByb2R1Y2VzIHRoZSBzYW1lIGNhbGwgc2VxdWVuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcmdTZXR0aW5nUmVxdWVzdHMoY2hhbmdlczogcmVhZG9ubHkgT3JnU2V0dGluZ0NoYW5nZVtdKTogcmVhZG9ubHkgT3JnU2V0dGluZ1JlcXVlc3RbXSB7XG4gIGNvbnN0IGJ5U3VyZmFjZSA9IG5ldyBNYXA8T3JnU2V0dGluZ1N1cmZhY2UsIE9yZ1NldHRpbmdSZXF1ZXN0PigpO1xuICBmb3IgKGNvbnN0IHNwZWMgb2YgT1JHX1NFVFRJTkdfUFJPUE9TQUxfQUxMT1dMSVNUKSB7XG4gICAgY29uc3QgY2hhbmdlID0gY2hhbmdlcy5maW5kKChjKSA9PiBjLnNwZWMua2V5ID09PSBzcGVjLmtleSk7XG4gICAgaWYgKCFjaGFuZ2UpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYnlTdXJmYWNlLmdldChzcGVjLnN1cmZhY2UpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgZXhpc3RpbmcuYm9keVtzcGVjLmZpZWxkXSA9IGNoYW5nZS50bztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBieVN1cmZhY2Uuc2V0KHNwZWMuc3VyZmFjZSwge1xuICAgICAgc3VyZmFjZTogc3BlYy5zdXJmYWNlLFxuICAgICAgbWV0aG9kOiBzcGVjLmFwaS5tZXRob2QsXG4gICAgICBwYXRoOiBzcGVjLmFwaS5wYXRoLFxuICAgICAgcGVybWlzc2lvbjogc3BlYy5wZXJtaXNzaW9uLFxuICAgICAgYm9keTogeyBbc3BlYy5maWVsZF06IGNoYW5nZS50byB9LFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBbLi4uYnlTdXJmYWNlLnZhbHVlcygpXTtcbn1cbiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
export {};
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtZXZlbnRzLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvYXVkaXQtZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBDcm9zcy1zZXJ2aWNlIGF1ZGl0IGV2ZW50cyBlbWl0dGVkIHZpYSBzdHJ1Y3R1cmVkIGxvZ3MuXG4gKlxuICogUGxhdGZvcm0ncyBvd24gYXVkaXQgZXZlbnRzICh1c2VyLmxvZ2luLCBvcmcuY3JlYXRlLCDigKYpIGxpdmUgaW4gTW9uZ29EQlxuICogdmlhIHRoZSBBdWRpdEV2ZW50IG1vZGVsIOKAlCB0aGF0J3MgYSBzZXBhcmF0ZSBwZXJzaXN0ZW5jZSBwYXRoIHNjb3BlZCB0b1xuICogdGhlIHBsYXRmb3JtIHNlcnZpY2UuIFRoZSBldmVudHMgYmVsb3cgYXJlIGVtaXR0ZWQgYnkgb3RoZXIgc2VydmljZXNcbiAqIChpbWFnZS1yZWdpc3RyeSwgZXRjLikgdmlhIHRoZSBgbG9nQXVkaXRFdmVudGAgaGVscGVyIGFzIHN0cnVjdHVyZWQgbG9nXG4gKiBsaW5lcyB3aXRoIGBldmVudENhdGVnb3J5OiAnYXVkaXQnYCwgc2NyYXBlZCBieSBMb2tpIGZvciBxdWVyeWFibGVcbiAqIGF1ZGl0IGhpc3RvcnkuXG4gKlxuICogQWRkIGEgbmV3IGV2ZW50OlxuICogICAxLiBFeHRlbmQgdGhlIHVuaW9uIHR5cGUgYmVsb3cuXG4gKiAgIDIuIERvY3VtZW50IGl0IGluIGBkb2NzL2F1ZGl0LWV2ZW50cy5tZGAsIGluY2x1ZGluZyBhbnkgcGF5bG9hZC1zcGVjaWZpY1xuICogICAgICBmaWVsZHMuXG4gKiAgIDMuIEVtaXQgdmlhIGBsb2dBdWRpdEV2ZW50KGxvZ2dlciwgeyBldmVudDogJ2V2ZW50Lm5hbWUnLCDigKYgfSlgIGZyb20gdGhlIHJvdXRlLlxuICovXG5cbi8qKlxuICogQ29ycmVsYXRpb24gY29udGV4dCBzaGFyZWQgYnkgZXZlcnkgY3Jvc3Mtc2VydmljZSBhdWRpdCBldmVudC4gT3B0aW9uYWw7XG4gKiB3aGVuIHBvcHVsYXRlZCwgdGhlc2UgbGV0IGFuIG9wZXJhdG9yXG4gKiBwaXZvdCBhIExva2kgYXVkaXQgbGluZSB0byB0aGUgb3JpZ2luYXRpbmcgSFRUUCByZXF1ZXN0IChgcmVxdWVzdElkYCkgb3IgdGhlXG4gKiBlbmQtdG8tZW5kIGRpc3RyaWJ1dGVkIHRyYWNlIChgdHJhY2VJZGApIOKAlCBhbmQgbGluZSB0aGVtIHVwIHdpdGggcGxhdGZvcm0nc1xuICogTW9uZ29EQiBhdWRpdCBldmVudHMsIHdoaWNoIGNhcnJ5IHRoZSBzYW1lIHR3byBmaWVsZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRDb3JyZWxhdGlvbiB7XG4gIC8qKiBPcmlnaW5hdGluZyByZXF1ZXN0IGlkIChwcm9wYWdhdGVkIGB4LXJlcXVlc3QtaWRgKS4gKi9cbiAgcmVxdWVzdElkPzogc3RyaW5nO1xuICAvKiogT3BlblRlbGVtZXRyeSB0cmFjZSBpZCBvZiB0aGUgYWN0aXZlIHNwYW4sIHdoZW4gdHJhY2luZyBpcyBlbmFibGVkLiAqL1xuICB0cmFjZUlkPzogc3RyaW5nO1xufVxuXG4vKiogVGFnLWNvcHkgZW1pdHRlZCBmcm9tIGltYWdlLXJlZ2lzdHJ5J3MgUE9TVCAvYXBpL2ltYWdlcy9jb3B5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyeVRhZ0NvcHlBdWRpdCBleHRlbmRzIEF1ZGl0Q29ycmVsYXRpb24ge1xuICBldmVudDogJ3JlZ2lzdHJ5LnRhZy5jb3B5JztcbiAgYWN0b3I6IHN0cmluZztcbiAgc291cmNlOiBzdHJpbmc7XG4gIHRhcmdldDogc3RyaW5nO1xuICBzb3VyY2VEaWdlc3Q6IHN0cmluZztcbiAgdGFyZ2V0RGlnZXN0OiBzdHJpbmc7XG4gIC8qKiBUcnVlIHdoZW4gdGFyZ2V0J3MgcmVwbyBzdGFydHMgd2l0aCBgc3lzdGVtL2Ag4oCUIHRoZSBoaWdoZXN0LXByaXZpbGVnZSBjYXNlLiAqL1xuICBpc1Byb21vdGlvblRvU3lzdGVtOiBib29sZWFuO1xuICBtb3VudGVkOiB7IG1hbmlmZXN0czogbnVtYmVyOyBibG9iczogbnVtYmVyIH07XG59XG5cbi8qKiBUYWctZGVsZXRlIGVtaXR0ZWQgZnJvbSBpbWFnZS1yZWdpc3RyeSdzIERFTEVURSAvYXBpL2ltYWdlcy86bmFtZS9tYW5pZmVzdHMvOnJlZmVyZW5jZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cnlUYWdEZWxldGVBdWRpdCBleHRlbmRzIEF1ZGl0Q29ycmVsYXRpb24ge1xuICBldmVudDogJ3JlZ2lzdHJ5LnRhZy5kZWxldGUnO1xuICBhY3Rvcjogc3RyaW5nO1xuICByZXBvOiBzdHJpbmc7XG4gIHJlZjogc3RyaW5nO1xuICBkaWdlc3Q6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXBvc2l0b3J5IHBydW5lIGVtaXR0ZWQgZnJvbSBpbWFnZS1yZWdpc3RyeSdzIERFTEVURSAvYXBpL2ltYWdlcy86bmFtZSDigJRcbiAqIGRlbGV0ZXMgZXZlcnkgbWFuaWZlc3QgaW4gYSByZXBvICh1c2VkIHRvIHJlbW92ZSBlbXB0eS9kZWFkIHJlcG9zIGZyb20gdGhlXG4gKiBjYXRhbG9nKS4gVW5saWtlIHRoZSB0YWctZGVsZXRlIGFib3ZlLCB0aGVyZSdzIG5vIHNpbmdsZSBgcmVmYC9gZGlnZXN0YDpcbiAqIHRoZSBjb3VudHMgc3VtbWFyaXplIHRoZSB3aG9sZSByZXBvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJ5UmVwb0RlbGV0ZUF1ZGl0IGV4dGVuZHMgQXVkaXRDb3JyZWxhdGlvbiB7XG4gIGV2ZW50OiAncmVnaXN0cnkucmVwby5kZWxldGUnO1xuICBhY3Rvcjogc3RyaW5nO1xuICByZXBvOiBzdHJpbmc7XG4gIC8qKiBDb3VudCBvZiB1bmlxdWUgbWFuaWZlc3QgZGlnZXN0cyBhY3R1YWxseSBkZWxldGVkLiAqL1xuICBkZWxldGVkTWFuaWZlc3RzOiBudW1iZXI7XG4gIC8qKiBDb3VudCBvZiB0YWdzIHRoZSByZXBvIGhlbGQgYmVmb3JlIHRoZSBwcnVuZS4gKi9cbiAgZGVsZXRlZFRhZ3M6IG51bWJlcjtcbn1cblxuLyoqIFVuaW9uIG9mIGV2ZXJ5IGNyb3NzLXNlcnZpY2UgYXVkaXQgZXZlbnQgY3VycmVudGx5IGVtaXR0ZWQuICovXG5leHBvcnQgdHlwZSBBdWRpdEV2ZW50ID0gUmVnaXN0cnlUYWdDb3B5QXVkaXQgfCBSZWdpc3RyeVRhZ0RlbGV0ZUF1ZGl0IHwgUmVnaXN0cnlSZXBvRGVsZXRlQXVkaXQ7XG4iXX0=
|
|
@@ -114,6 +114,71 @@ export declare const BUILD_SIZE_CATALOG: Readonly<Record<BuildSize, BuildSizeMet
|
|
|
114
114
|
* operator never bought into. Pinned against the `QuotaTier` union by a test.
|
|
115
115
|
*/
|
|
116
116
|
export declare const BUILD_TIER_LADDER: readonly QuotaTier[];
|
|
117
|
+
/**
|
|
118
|
+
* How many of a tier's builds run AT ONCE, across every org on that tier
|
|
119
|
+
* (`PLUGIN_BUILD_CONCURRENCY_<TIER>` overrides each row).
|
|
120
|
+
*
|
|
121
|
+
* TIER-keyed, not class-keyed, and that is the queue topology rather than a
|
|
122
|
+
* simplification: there is one BullMQ `Worker` per tier queue and both
|
|
123
|
+
* scheduling classes are served by it, so a per-class figure here could not be
|
|
124
|
+
* honoured — it would either duplicate this number or invite someone to set a
|
|
125
|
+
* value the worker cannot act on.
|
|
126
|
+
*
|
|
127
|
+
* **A ladder, not one figure.** This is the AGGREGATE bound that makes a tier's
|
|
128
|
+
* advertised per-build capacity deliverable: the cap is reachable by a single
|
|
129
|
+
* tenant, and the number of tenants reaching for it concurrently is limited
|
|
130
|
+
* here, where it can be tuned without touching the price list.
|
|
131
|
+
*
|
|
132
|
+
* It lived as a bare literal map inside the build worker until now, which is
|
|
133
|
+
* exactly how `docs/environment-variables.md` came to describe a global default
|
|
134
|
+
* that the code had stopped honouring — a figure no catalog exposes is a figure
|
|
135
|
+
* the documentation drifts away from. It sits beside `slotsByTier` and
|
|
136
|
+
* `minTier` because it is the third tier-keyed build figure, not a different
|
|
137
|
+
* kind of thing.
|
|
138
|
+
*
|
|
139
|
+
* **Distinct from the per-org slot cap, and the LOWER of the two binds.** This
|
|
140
|
+
* is pod capacity (every concurrent build drives the same buildkitd); the slot
|
|
141
|
+
* cap is fairness between tenants sharing this queue. A tier whose concurrency
|
|
142
|
+
* sits below its slot cap cannot reach that cap at all, which is why the worker
|
|
143
|
+
* warns about it on start.
|
|
144
|
+
*
|
|
145
|
+
* Monotonic across the PAID rungs only. `unlimited` sits at the bottom, not the
|
|
146
|
+
* top: it is not a purchased tier but the absence of billing, which correlates
|
|
147
|
+
* with the smallest hardware — see its own note below.
|
|
148
|
+
*/
|
|
149
|
+
export declare const BUILD_TIER_CONCURRENCY: Readonly<Record<QuotaTier, number>>;
|
|
150
|
+
/**
|
|
151
|
+
* What ONE replica may run at once if every tier queue is busy: the SUM of the
|
|
152
|
+
* ladder, because a replica starts one BullMQ Worker per tier and each carries
|
|
153
|
+
* its own concurrency.
|
|
154
|
+
*
|
|
155
|
+
* This number was never written down, and that is the point of writing it down.
|
|
156
|
+
* The incident arithmetic everyone reasoned with — "8 replicas x 4 = 32" — is
|
|
157
|
+
* the single-tier case (a catalogue load is all system-org). A mixed fleet
|
|
158
|
+
* reaches `replicas x this`, which is 13 per replica and 104 across the eight a
|
|
159
|
+
* plugin deployment scales to. The ladder's rows therefore set a fleet ceiling
|
|
160
|
+
* that nothing declared and nobody chose.
|
|
161
|
+
*
|
|
162
|
+
* `PLUGIN_MAX_BUILDS_PER_REPLICA` defaults to this, so raising a tier row cannot
|
|
163
|
+
* silently raise what one replica puts on its single buildkitd sidecar — it
|
|
164
|
+
* binds at this figure and the worker says so on start.
|
|
165
|
+
*/
|
|
166
|
+
export declare const BUILD_LADDER_CONCURRENCY_SUM: number;
|
|
167
|
+
/**
|
|
168
|
+
* This tier's default worker concurrency. Falls back to the `developer` row for
|
|
169
|
+
* an unrecognised tier, matching `buildSlotsFor` — a bad tier string must not
|
|
170
|
+
* hand out the most generous figure in the table.
|
|
171
|
+
*/
|
|
172
|
+
export declare function buildWorkerConcurrencyFor(tier: QuotaTier): number;
|
|
173
|
+
/**
|
|
174
|
+
* The env var that overrides {@link buildWorkerConcurrencyFor} for one tier.
|
|
175
|
+
*
|
|
176
|
+
* Derived rather than written out six times: the per-tier reads used to be six
|
|
177
|
+
* near-identical `envInt` lines, where a wrong cross-reference
|
|
178
|
+
* (`pro: envInt('…_PRO', tierDefault.team)`) silently takes another tier's
|
|
179
|
+
* default and no type can catch it.
|
|
180
|
+
*/
|
|
181
|
+
export declare function buildConcurrencyEnvVar(tier: QuotaTier): string;
|
|
117
182
|
/** This size's credit/vCPU multiplier; `1` for anything unrecognised. */
|
|
118
183
|
export declare function buildSizeMultiplier(size: string): number;
|
|
119
184
|
/** `Small` … `X-Large`; the raw id for anything unrecognised. */
|
|
@@ -80,9 +80,103 @@ export const BUILD_SIZE_CATALOG = {
|
|
|
80
80
|
export const BUILD_TIER_LADDER = [
|
|
81
81
|
'developer', 'pro', 'team', 'business', 'enterprise', 'unlimited',
|
|
82
82
|
];
|
|
83
|
+
/**
|
|
84
|
+
* How many of a tier's builds run AT ONCE, across every org on that tier
|
|
85
|
+
* (`PLUGIN_BUILD_CONCURRENCY_<TIER>` overrides each row).
|
|
86
|
+
*
|
|
87
|
+
* TIER-keyed, not class-keyed, and that is the queue topology rather than a
|
|
88
|
+
* simplification: there is one BullMQ `Worker` per tier queue and both
|
|
89
|
+
* scheduling classes are served by it, so a per-class figure here could not be
|
|
90
|
+
* honoured — it would either duplicate this number or invite someone to set a
|
|
91
|
+
* value the worker cannot act on.
|
|
92
|
+
*
|
|
93
|
+
* **A ladder, not one figure.** This is the AGGREGATE bound that makes a tier's
|
|
94
|
+
* advertised per-build capacity deliverable: the cap is reachable by a single
|
|
95
|
+
* tenant, and the number of tenants reaching for it concurrently is limited
|
|
96
|
+
* here, where it can be tuned without touching the price list.
|
|
97
|
+
*
|
|
98
|
+
* It lived as a bare literal map inside the build worker until now, which is
|
|
99
|
+
* exactly how `docs/environment-variables.md` came to describe a global default
|
|
100
|
+
* that the code had stopped honouring — a figure no catalog exposes is a figure
|
|
101
|
+
* the documentation drifts away from. It sits beside `slotsByTier` and
|
|
102
|
+
* `minTier` because it is the third tier-keyed build figure, not a different
|
|
103
|
+
* kind of thing.
|
|
104
|
+
*
|
|
105
|
+
* **Distinct from the per-org slot cap, and the LOWER of the two binds.** This
|
|
106
|
+
* is pod capacity (every concurrent build drives the same buildkitd); the slot
|
|
107
|
+
* cap is fairness between tenants sharing this queue. A tier whose concurrency
|
|
108
|
+
* sits below its slot cap cannot reach that cap at all, which is why the worker
|
|
109
|
+
* warns about it on start.
|
|
110
|
+
*
|
|
111
|
+
* Monotonic across the PAID rungs only. `unlimited` sits at the bottom, not the
|
|
112
|
+
* top: it is not a purchased tier but the absence of billing, which correlates
|
|
113
|
+
* with the smallest hardware — see its own note below.
|
|
114
|
+
*/
|
|
115
|
+
export const BUILD_TIER_CONCURRENCY = {
|
|
116
|
+
developer: 1,
|
|
117
|
+
pro: 2,
|
|
118
|
+
team: 2,
|
|
119
|
+
business: 3,
|
|
120
|
+
enterprise: 4,
|
|
121
|
+
/**
|
|
122
|
+
* ONE, and the lowest row — deliberately NOT the most generous.
|
|
123
|
+
*
|
|
124
|
+
* `unlimited` means "billing is not configured", which in practice is a
|
|
125
|
+
* single-node install (local, minikube, a fresh cluster), and it is also the
|
|
126
|
+
* SYSTEM ORG's tier — the org that loads the whole sample catalogue on first
|
|
127
|
+
* boot. Giving it 4 handed the highest concurrency to the tier most likely to
|
|
128
|
+
* be running on the smallest hardware.
|
|
129
|
+
*
|
|
130
|
+
* It cost an install: 8 plugin replicas x 4 = 32 concurrent builds, each
|
|
131
|
+
* asking the image registry to sign a 7-17 MiB SBOM against its 1 GiB limit.
|
|
132
|
+
* The registry was OOMKilled, and because its `/token` endpoint is also the
|
|
133
|
+
* registry login, the pushes failed too — 107 of 117 plugins never came up.
|
|
134
|
+
* The earlier default of 1 (then a global knob) had produced 95 of 119.
|
|
135
|
+
*
|
|
136
|
+
* Raise it per deployment with `PLUGIN_BUILD_CONCURRENCY_UNLIMITED` once the
|
|
137
|
+
* registry's memory and a signing bound say the fan-in is safe.
|
|
138
|
+
*/
|
|
139
|
+
unlimited: 1,
|
|
140
|
+
};
|
|
83
141
|
// ---------------------------------------------------------------------------
|
|
84
142
|
// Accessors
|
|
85
143
|
// ---------------------------------------------------------------------------
|
|
144
|
+
/**
|
|
145
|
+
* What ONE replica may run at once if every tier queue is busy: the SUM of the
|
|
146
|
+
* ladder, because a replica starts one BullMQ Worker per tier and each carries
|
|
147
|
+
* its own concurrency.
|
|
148
|
+
*
|
|
149
|
+
* This number was never written down, and that is the point of writing it down.
|
|
150
|
+
* The incident arithmetic everyone reasoned with — "8 replicas x 4 = 32" — is
|
|
151
|
+
* the single-tier case (a catalogue load is all system-org). A mixed fleet
|
|
152
|
+
* reaches `replicas x this`, which is 13 per replica and 104 across the eight a
|
|
153
|
+
* plugin deployment scales to. The ladder's rows therefore set a fleet ceiling
|
|
154
|
+
* that nothing declared and nobody chose.
|
|
155
|
+
*
|
|
156
|
+
* `PLUGIN_MAX_BUILDS_PER_REPLICA` defaults to this, so raising a tier row cannot
|
|
157
|
+
* silently raise what one replica puts on its single buildkitd sidecar — it
|
|
158
|
+
* binds at this figure and the worker says so on start.
|
|
159
|
+
*/
|
|
160
|
+
export const BUILD_LADDER_CONCURRENCY_SUM = BUILD_TIER_LADDER.reduce((n, tier) => n + BUILD_TIER_CONCURRENCY[tier], 0);
|
|
161
|
+
/**
|
|
162
|
+
* This tier's default worker concurrency. Falls back to the `developer` row for
|
|
163
|
+
* an unrecognised tier, matching `buildSlotsFor` — a bad tier string must not
|
|
164
|
+
* hand out the most generous figure in the table.
|
|
165
|
+
*/
|
|
166
|
+
export function buildWorkerConcurrencyFor(tier) {
|
|
167
|
+
return BUILD_TIER_CONCURRENCY[tier] ?? BUILD_TIER_CONCURRENCY.developer;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* The env var that overrides {@link buildWorkerConcurrencyFor} for one tier.
|
|
171
|
+
*
|
|
172
|
+
* Derived rather than written out six times: the per-tier reads used to be six
|
|
173
|
+
* near-identical `envInt` lines, where a wrong cross-reference
|
|
174
|
+
* (`pro: envInt('…_PRO', tierDefault.team)`) silently takes another tier's
|
|
175
|
+
* default and no type can catch it.
|
|
176
|
+
*/
|
|
177
|
+
export function buildConcurrencyEnvVar(tier) {
|
|
178
|
+
return `PLUGIN_BUILD_CONCURRENCY_${tier.toUpperCase()}`;
|
|
179
|
+
}
|
|
86
180
|
/** This size's credit/vCPU multiplier; `1` for anything unrecognised. */
|
|
87
181
|
export function buildSizeMultiplier(size) {
|
|
88
182
|
return BUILD_SIZE_CATALOG[size]?.multiplier ?? 1;
|
|
@@ -155,4 +249,4 @@ export function tierAllowsBuildSize(tier, size) {
|
|
|
155
249
|
export function buildSizesForTier(tier) {
|
|
156
250
|
return BUILD_SIZES.filter((s) => tierAllowsBuildSize(tier, s));
|
|
157
251
|
}
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtY2F0YWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9idWlsZC1jYXRhbG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFpQ3RDLDhFQUE4RTtBQUM5RSx5Q0FBeUM7QUFDekMsOEVBQThFO0FBRTlFOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQVUsQ0FBQztBQXVCL0QsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWlEO0lBQy9FLFFBQVEsRUFBRTtRQUNSLEtBQUssRUFBRSxVQUFVO1FBQ2pCLEtBQUssRUFBRSwyRUFBMkU7UUFDbEYsV0FBVyxFQUFFO1lBQ1gsU0FBUyxFQUFFLENBQUM7WUFDWixHQUFHLEVBQUUsQ0FBQztZQUNOLElBQUksRUFBRSxDQUFDO1lBQ1AsUUFBUSxFQUFFLENBQUM7WUFDWCxVQUFVLEVBQUUsQ0FBQztZQUNiLDBFQUEwRTtZQUMxRSxTQUFTLEVBQUUsQ0FBQztTQUNiO0tBQ0Y7SUFDRCxRQUFRLEVBQUU7UUFDUixLQUFLLEVBQUUsVUFBVTtRQUNqQixLQUFLLEVBQUUseUVBQXlFO1FBQ2hGLFdBQVcsRUFBRTtZQUNYLFNBQVMsRUFBRSxDQUFDO1lBQ1osR0FBRyxFQUFFLENBQUM7WUFDTixJQUFJLEVBQUUsQ0FBQztZQUNQLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLEVBQUU7WUFDZCxTQUFTLEVBQUUsRUFBRTtTQUNkO0tBQ0Y7Q0FDRixDQUFDO0FBRUYsOEVBQThFO0FBQzlFLDJDQUEyQztBQUMzQyw4RUFBOEU7QUFFOUUsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBVSxDQUFDO0FBcUNyRTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMs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QUFDOUQsQ0FBQztBQUVELGtGQUFrRjtBQUNsRixNQUFNLFVBQVUsaUJBQWlCLENBQUMsSUFBZTtJQUMvQyxPQUFPO1FBQ0wsUUFBUSxFQUFFLGFBQWEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDO1FBQ3pDLFFBQVEsRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztLQUMxQyxDQUFDO0FBQ0osQ0FBQztBQUVELHlDQUF5QztBQUN6QyxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFBZSxFQUFFLElBQVk7SUFDL0QsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLENBQUMsSUFBaUIsQ0FBQyxDQUFDO0lBQ25ELElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDeEIsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN2QyxNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsOEVBQThFO0lBQzlFLHFFQUFxRTtJQUNyRSxJQUFJLElBQUksR0FBRyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDM0IsT0FBTyxJQUFJLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsZ0RBQWdEO0FBQ2hELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxJQUFlO0lBQy9DLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFdoYXQgYSBidWlsZCdzIENMQVNTIGFuZCBTSVpFIGFyZSBjYWxsZWQsIHdoYXQgdGhleSBjb3N0LCBhbmQgd2hpY2ggdGllciBtYXlcbiAqIGFzayBmb3IgdGhlbSAoRDExL0QxMykuXG4gKlxuICogT05FIG1vZHVsZSBpbnN0ZWFkIG9mIHNpeCB0YWJsZXMuIFRoZSBmYWN0cyB1c2VkIHRvIGxpdmUgaW5cbiAqIGB3aXJlLXZvY2FidWxhcnkudHNgICh0aGUgdHdvIGlkIGxpc3RzIGFuZCB0aGUgc2l6ZSBtdWx0aXBsaWVycyksXG4gKiBgcXVvdGEtdGllcnMudHNgICh3aGljaCB0aWVyIGdldHMgd2hpY2ggc2l6ZSwgYW5kIHRoZSBwZXItY2xhc3Mgc2xvdCBjb3VudHMpXG4gKiBhbmQgYSBoYW5kLW1haW50YWluZWQgbWlycm9yIG9mIGFsbCBmb3VyIGluIGBmcm9udGVuZC9zcmMvbGliL2J1aWxkLXNoYXBlLnRzYFxuICog4oCUIGhlbGQgdG9nZXRoZXIgYnkgYSB0ZXN0IHRoYXQgcGFyc2VkIHRoaXMgcGFja2FnZSdzIFR5cGVTY3JpcHQgU09VUkNFIHdpdGhcbiAqIHJlZ2V4ZXMgdG8gZGV0ZWN0IGRyaWZ0LiBUaGlzIGlzIHRoZSBzYW1lIG1vdmUgYHF1b3RhLWNhdGFsb2cudHNgIG1hZGUgZm9yIHRoZVxuICogZml2ZSBmcm9udGVuZCBsYWJlbCBtYXBzLCBhbmQgZm9yIHRoZSBzYW1lIHJlYXNvbjogdGhlIGJyb3dzZXIgaW1wb3J0cyB0aGVcbiAqIGNhdGFsb2cgZGlyZWN0bHksIHNvIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBkcmlmdC5cbiAqXG4gKiBERVBFTkRFTkNZLUZSRUUsIGFuZCB0aGF0IGlzIGEgY29uc3RyYWludCByYXRoZXIgdGhhbiBhIGhhcHB5IGFjY2lkZW50LiBPbmx5XG4gKiB0eXBlLW9ubHkgaW1wb3J0cywgd2hpY2ggYXJlIGVyYXNlZCwgc28gdGhpcyBtb2R1bGUgbG9hZHMgaW4gYSBicm93c2VyOyB0aGVcbiAqIG1vbWVudCBpdCByZWFkcyBhbiBlbnYgdmFyIGl0IHN0b3BzIGJlaW5nIGltcG9ydGFibGUgYnkgdGhlIGZyb250ZW5kIGFuZCB0aGVcbiAqIG1pcnJvciBjb21lcyBiYWNrLiBFdmVyeXRoaW5nIGhlcmUgaXMgdGhlcmVmb3JlIGEgREVGQVVMVC4gVGhlIGVudiBvdmVybGF5XG4gKiAoYFBMVUdJTl9NQVhfQlVJTERTXzxUSUVSPl88Q0xBU1M+YCwgYFBMVUdJTl9CVUlMREtJVF9BRERSX1NJWkVfPFNVRkZJWD5gKVxuICogbGl2ZXMgc2VydmVyLXNpZGUsIHdoaWNoIGlzIHRoZSBzYW1lIHNwbGl0IHRoZSB0aWVyIHByZXNldHMgYWxyZWFkeSB1c2U6IGFcbiAqIGhhcmRjb2RlZCBmYWxsYmFjayBwbHVzIGEgYC9jb25maWdgIG92ZXJsYXkuXG4gKlxuICogSURTIEFSRSBBUklUSE1FVElDLCBMQUJFTFMgQVJFIFdPUkRTLiBgMC41eGAgY2FycmllcyBpdHMgb3duIG11bHRpcGxpZXIsIHNvXG4gKiBgYnVpbGRTaXplTXVsdGlwbGllcmAgaXMgY2hlY2thYmxlIGJ5IGV5ZSBhbmQgdGhlIGNyZWRpdCBtYXRoIGlzXG4gKiBzZWxmLWRvY3VtZW50aW5nOyBgU21hbGxgIC8gYFN0YW5kYXJkYCAvIGBNZWRpdW1gIC8gYExhcmdlYCAvIGBYLUxhcmdlYCBpcyB3aGF0XG4gKiBhIHBlcnNvbiByZWFkcy4gS2VlcGluZyB0aGVtIHNlcGFyYXRlIGlzIGFsc28gd2hhdCBtYWtlcyBhIHJlbmFtZSBjaGVhcDogYVxuICogbGFiZWwgaXMgb25lIGxpbmUgaGVyZSwgd2l0aCBubyB3aXJlIHZhbHVlLCBSZWRpcyBrZXksIG1ldHJpYyBsYWJlbCBvciBsZWRnZXJcbiAqIHN0cmluZyB0byBtaWdyYXRlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUXVvdGFUaWVyIH0gZnJvbSAnLi9xdW90YS10aWVycy5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2NoZWR1bGluZyBjbGFzcyDigJQgV0hFTiBhIGJ1aWxkIHN0YXJ0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogYGZsZXhpYmxlYCByYXRoZXIgdGhhbiBgYmF0Y2hgLCBgZGVmZXJyZWRgIG9yIGBzbWFsbGAuXG4gKlxuICogSXQgbmFtZXMgd2hhdCB0aGUgQ1VTVE9NRVIgdHJhZGVzIOKAlCBhIGZsZXhpYmxlIHN0YXJ0IHRpbWUg4oCUIGluc3RlYWQgb2Ygd2hhdFxuICogdGhlIHBsYXRmb3JtIGRvZXMgd2l0aCBpdCwgYW5kIGl0IGRvZXMgbm90IHJlYWQgYXMgYSBkZW1vdGlvbjogdGhpcyBjbGFzcyBpc1xuICogYXZhaWxhYmxlIG9uIGV2ZXJ5IHRpZXIgaW5jbHVkaW5nIGZyZWUsIGFuZCBgZGVmZXJyZWRgIHNvdW5kcyBicm9rZW4gd2hpbGVcbiAqIGBsb3cgcHJpb3JpdHlgIHNvdW5kcyBsaWtlIGEgcGVuYWx0eS4gYHNtYWxsYCB3YXMgcmVqZWN0ZWQgb3V0cmlnaHQgYmVjYXVzZSBpdFxuICogaXMgYSBtYWduaXR1ZGUgd29yZCBvbiBhIGxhdGVuY3kgZGltZW5zaW9uIOKAlCBgeyBidWlsZENsYXNzOiAnc21hbGwnLFxuICogYnVpbGRTaXplOiAnMngnIH1gIGlzIGxlZ2FsIGFuZCB1bnJlYWRhYmxlLlxuICovXG5leHBvcnQgY29uc3QgQlVJTERfQ0xBU1NFUyA9IFsnc3RhbmRhcmQnLCAnZmxleGlibGUnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJ1aWxkQ2xhc3MgPSAodHlwZW9mIEJVSUxEX0NMQVNTRVMpW251bWJlcl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRDbGFzc01ldGEge1xuICAvKiogV2hhdCBhIHBlcnNvbiByZWFkcy4gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqIFRoZSB0cmFkZSwgc2FpZCBpbiBvbmUgbGluZSBiZXNpZGUgdGhlIGNvbnRyb2wuICovXG4gIGJsdXJiOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbi1mbGlnaHQgYnVpbGRzIG9uZSBPUkcgbWF5IGhvbGQgaW4gdGhpcyBjbGFzcywgcGVyIHRpZXIg4oCUIHRoZSBERUZBVUxUIGZvclxuICAgKiBgUExVR0lOX01BWF9CVUlMRFNfPFRJRVI+XzxDTEFTUz5gLlxuICAgKlxuICAgKiBHcmFkZWQgYnkgdGllciByYXRoZXIgdGhhbiBvbmUgZmxhdCBmaWd1cmU6IGEgc2luZ2xlIGZpZ3VyZSBnYXZlIGEgRGV2ZWxvcGVyXG4gICAqIG9yZyB0aGUgc2FtZSB0aHJlZSBpbi1mbGlnaHQgYnVpbGRzIGFzIGFuIEVudGVycHJpc2Ugb25lLCB3aGljaCBtYWRlIHRoZVxuICAgKiBwZXItb3JnIHNlbWFwaG9yZSB0aGUgb25lIHBsYWNlIGluIHRoZSBidWlsZCBwYXRoIHRoYXQgaWdub3JlZCB3aGF0IHRoZVxuICAgKiB0ZW5hbnQgcGF5cyBmb3IuIGBmbGV4aWJsZWAgaGFzIG1vcmUgaGVhZHJvb20gdGhhbiBgc3RhbmRhcmRgIG9uIGV2ZXJ5IHJvdyxcbiAgICogYmVjYXVzZSB0aGUgY2hlYXAgY2xhc3MgaXMgd2hlcmUgdGhlIHJvb20gaGFzIHRvIGJlIGZvciBpdCB0byBzbW9vdGhcbiAgICogYW55dGhpbmcg4oCUIGEgcm93IHdoZXJlIHRoZXkgd2VyZSBlcXVhbCB3b3VsZCBtYWtlIHRoZSBjbGFzcyBwb2ludGxlc3MgdG9cbiAgICogY2hvb3NlLlxuICAgKi9cbiAgc2xvdHNCeVRpZXI6IFJlYWRvbmx5PFJlY29yZDxRdW90YVRpZXIsIG51bWJlcj4+O1xufVxuXG5leHBvcnQgY29uc3QgQlVJTERfQ0xBU1NfQ0FUQUxPRzogUmVhZG9ubHk8UmVjb3JkPEJ1aWxkQ2xhc3MsIEJ1aWxkQ2xhc3NNZXRhPj4gPSB7XG4gIHN0YW5kYXJkOiB7XG4gICAgbGFiZWw6ICdTdGFuZGFyZCcsXG4gICAgYmx1cmI6ICdTdGFydHMgYXMgc29vbiBhcyBhIHNsb3QgaXMgZnJlZS4gVXNlIGl0IGZvciBhbnl0aGluZyB5b3UgYXJlIHdhaXRpbmcgb24uJyxcbiAgICBzbG90c0J5VGllcjoge1xuICAgICAgZGV2ZWxvcGVyOiAxLFxuICAgICAgcHJvOiAyLFxuICAgICAgdGVhbTogMyxcbiAgICAgIGJ1c2luZXNzOiA1LFxuICAgICAgZW50ZXJwcmlzZTogOCxcbiAgICAgIC8vIEJpbGxpbmcgZGlzYWJsZWQ6IG5vdGhpbmcgaXMgY2FwcGVkLCBzbyB0aGUgY2VpbGluZyBpcyB0aGUgcG9vbCBpdHNlbGYuXG4gICAgICB1bmxpbWl0ZWQ6IDgsXG4gICAgfSxcbiAgfSxcbiAgZmxleGlibGU6IHtcbiAgICBsYWJlbDogJ0ZsZXhpYmxlJyxcbiAgICBibHVyYjogJ1N0YXJ0cyBsYXRlciwgaW4gZXhjaGFuZ2UgZm9yIG1vcmUgYnVpbGRzIGF0IG9uY2UuIFNhbWUgY29zdCBwZXIgYnVpbGQuJyxcbiAgICBzbG90c0J5VGllcjoge1xuICAgICAgZGV2ZWxvcGVyOiAzLFxuICAgICAgcHJvOiA0LFxuICAgICAgdGVhbTogNixcbiAgICAgIGJ1c2luZXNzOiAxMCxcbiAgICAgIGVudGVycHJpc2U6IDE2LFxuICAgICAgdW5saW1pdGVkOiAxNixcbiAgICB9LFxuICB9LFxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNYWNoaW5lIHNpemUg4oCUIEhPVyBNVUNIIENQVSBhIGJ1aWxkIGdldHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgQlVJTERfU0laRVMgPSBbJzAuNXgnLCAnMXgnLCAnMngnLCAnNHgnLCAnOHgnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJ1aWxkU2l6ZSA9ICh0eXBlb2YgQlVJTERfU0laRVMpW251bWJlcl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRTaXplTWV0YSB7XG4gIC8qKiBXaGF0IGEgcGVyc29uIHJlYWRzOiBTbWFsbCDigKYgWC1MYXJnZS4gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqIHZDUFUgcmVsYXRpdmUgdG8gdGhlIGRlcGxveW1lbnQncyBiYXNlIGZpZ3VyZSwgYW5kIHRoZSBjcmVkaXQgcmF0ZS4gKi9cbiAgbXVsdGlwbGllcjogbnVtYmVyO1xuICAvKipcbiAgICogTG93ZXN0IHRpZXIgdGhhdCBtYXkgUkVRVUVTVCB0aGlzIHNpemU7IGBudWxsYCBtZWFucyBldmVyeSB0aWVyIG1heS5cbiAgICpcbiAgICogT25lIGZpZWxkIHBlciBzaXplIHJhdGhlciB0aGFuIGEgcm93IHBlciB0aWVyLCBhbmQgdGhhdCBtYWtlcyB0aGUgbGFkZGVyJ3NcbiAgICogbW9ub3RvbmljaXR5IFNUUlVDVFVSQUw6IGEgcm93LXBlci10aWVyIHRhYmxlIGNhbiBleHByZXNzIFwiVGVhbSBoYXMgNHggYnV0XG4gICAqIEJ1c2luZXNzIGRvZXMgbm90XCIgYW5kIG5lZWRlZCBhIHRlc3QgdG8gZm9yYmlkIGl0LiBUaGlzIHNoYXBlIGNhbm5vdC5cbiAgICovXG4gIG1pblRpZXI6IFF1b3RhVGllciB8IG51bGw7XG4gIC8qKlxuICAgKiBUaGUgY2xhc3MgdGhpcyBzaXplIHBhaXJzIHdpdGggdW5sZXNzIHRoZSBjYWxsZXIgc2F5cyBvdGhlcndpc2UuXG4gICAqXG4gICAqIFdoeSBgMC41eGAgZGVmYXVsdHMgdG8gYGZsZXhpYmxlYDogYSBoYWxmLXNwZWVkIGJ1aWxkIHRha2VzIHJvdWdobHkgdHdpY2UgYXNcbiAgICogbG9uZyBhbmQgdGhlcmVmb3JlIEhPTERTIElUUyBTTE9UIHR3aWNlIGFzIGxvbmcuIE9uIERldmVsb3BlciDigJQgb25lIHN0YW5kYXJkXG4gICAqIHNsb3Qg4oCUIG9uZSBjaGVhcCBidWlsZCB3b3VsZCBibG9jayB0aGUgb25seSB1cmdlbnQtZml4IHNsb3QgZm9yIGRvdWJsZSB0aGVcbiAgICogdGltZS4gRGVmYXVsdGluZyBpdCB0byB0aGUgY2xhc3Mgd2l0aCB0aHJlZSBzbG90cyBtZWFucyBpdCBjYW5ub3QuXG4gICAqL1xuICBkZWZhdWx0Q2xhc3M6IEJ1aWxkQ2xhc3M7XG4gIC8qKlxuICAgKiBTdWZmaXggb2YgdGhpcyBzaXplJ3MgYnVpbGRraXRkIHBvb2wgb3ZlcnJpZGVcbiAgICogKGBQTFVHSU5fQlVJTERLSVRfQUREUl9TSVpFXzxTVUZGSVg+YCkuXG4gICAqXG4gICAqIERlY2xhcmVkIHJhdGhlciB0aGFuIGRlcml2ZWQgZnJvbSB0aGUgaWQsIGJlY2F1c2UgZGVyaXZpbmcgaXQgcHJvZHVjZXNcbiAgICogSUxMRUdBTCBOQU1FUzogYCcwLjV4Jy50b1VwcGVyQ2FzZSgpYCBnaXZlcyBgMC41WGAgYW5kIGEgZG90IGNhbm5vdCBhcHBlYXIgaW5cbiAgICogYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZSAodGhlIHNhbWUgcmVhc29uIGB4LWxhcmdlYCB3YXMgcmVqZWN0ZWQgYXMgYW5cbiAgICogaWQg4oCUIGAuLi5fWC1MQVJHRWAgaXMgbm90IGFuIGlkZW50aWZpZXIgZWl0aGVyKS5cbiAgICovXG4gIGVudlN1ZmZpeDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzaXplIGxhZGRlci5cbiAqXG4gKiBBIHNpemUgaXMgYSBCSUdHRVIgREFFTU9OLCBub3QgYSBmbGFnOiBgYnVpbGRjdGxgIGhhcyBubyBwZXItYnVpbGQgQ1BVIG9wdGlvbixcbiAqIGJlY2F1c2UgdGhlIENQVSBhIGJ1aWxkIG1heSB1c2UgaXMgdGhlIGJ1aWxka2l0ZCBQT0QncyBsaW1pdC4gU28gZXZlcnkgcnVuZ1xuICogYWJvdmUgb3IgYmVsb3cgYDF4YCBuZWVkcyBhIHBvb2wgb2YgaXRzIG93biwgYW5kIGEgcnVuZyB3aXRoIG5vIHBvb2wgaXNcbiAqIFJFRlVTRUQgcmF0aGVyIHRoYW4gc2lsZW50bHkgc2VydmVkIGF0IGAxeGAg4oCUIGluIGJvdGggZGlyZWN0aW9ucy4gU2VydmluZ1xuICogYDR4YCBmcm9tIHRoZSBzaGFyZWQgZGFlbW9uIHdvdWxkIGNoYXJnZSBmb3VyIHRpbWVzIGZvciBvbmUgdGltZXMgdGhlIHNwZWVkO1xuICogc2VydmluZyBgMC41eGAgZnJvbSBpdCB3b3VsZCBoYW5kIGV2ZXJ5IHRlbmFudCBmdWxsIHNwZWVkIGF0IGhhbGYgcHJpY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBCVUlMRF9TSVpFX0NBVEFMT0c6IFJlYWRvbmx5PFJlY29yZDxCdWlsZFNpemUsIEJ1aWxkU2l6ZU1ldGE+PiA9IHtcbiAgLy8gQXZhaWxhYmxlIHRvIEVWRVJZIHRpZXIsIGRlbGliZXJhdGVseS4gSXQgaXMgYSBidWRnZXQgb3B0aW9uLCBub3QgYVxuICAvLyByZXN0cmljdGlvbjogdGhlIGZyZWUgdGllciBnYWlucyBhIHJlYWwgY2hvaWNlIChzcGVuZCBsZXNzKSBpbnN0ZWFkIG9mIGFcbiAgLy8gbGlzdCBvZiBsb2Nrcy4gVGhlIGFyaXRobWV0aWMgaXMgaG9uZXN0IGluIG9uZSBkaXJlY3Rpb24g4oCUIGEgQ1BVLWJvdW5kIGJ1aWxkXG4gIC8vIHRha2VzIHR3aWNlIGFzIGxvbmcgYXQgaGFsZiB0aGUgdkNQVSBhbmQgY29zdHMgdGhlIFNBTUUsIHdoaWxlIGFuIEkvTy1ib3VuZFxuICAvLyBvbmUgY29zdHMgYWJvdXQgaGFsZi4gU28gU21hbGwgY2FuIG5ldmVyIGNvc3QgbW9yZSB0aGFuIFN0YW5kYXJkLCBhbmQgY2FuXG4gIC8vIGNvc3QgaGFsZiAoYXNzdW1pbmcgc2xvd2Rvd24gaXMgYXQgbW9zdCBsaW5lYXIsIHdoaWNoIG1lbW9yeSBwcmVzc3VyZSBjYW5cbiAgLy8gYnJlYWspLlxuICAnMC41eCc6IHsgbGFiZWw6ICdTbWFsbCcsIG11bHRpcGxpZXI6IDAuNSwgbWluVGllcjogbnVsbCwgZGVmYXVsdENsYXNzOiAnZmxleGlibGUnLCBlbnZTdWZmaXg6ICdIQUxGJyB9LFxuICAnMXgnOiB7IGxhYmVsOiAnU3RhbmRhcmQnLCBtdWx0aXBsaWVyOiAxLCBtaW5UaWVyOiBudWxsLCBkZWZhdWx0Q2xhc3M6ICdzdGFuZGFyZCcsIGVudlN1ZmZpeDogJzFYJyB9LFxuICAnMngnOiB7IGxhYmVsOiAnTWVkaXVtJywgbXVsdGlwbGllcjogMiwgbWluVGllcjogJ3RlYW0nLCBkZWZhdWx0Q2xhc3M6ICdzdGFuZGFyZCcsIGVudlN1ZmZpeDogJzJYJyB9LFxuICAnNHgnOiB7IGxhYmVsOiAnTGFyZ2UnLCBtdWx0aXBsaWVyOiA0LCBtaW5UaWVyOiAnYnVzaW5lc3MnLCBkZWZhdWx0Q2xhc3M6ICdzdGFuZGFyZCcsIGVudlN1ZmZpeDogJzRYJyB9LFxuICAnOHgnOiB7IGxhYmVsOiAnWC1MYXJnZScsIG11bHRpcGxpZXI6IDgsIG1pblRpZXI6ICdlbnRlcnByaXNlJywgZGVmYXVsdENsYXNzOiAnc3RhbmRhcmQnLCBlbnZTdWZmaXg6ICc4WCcgfSxcbn07XG5cbi8qKlxuICogVGhlIHRpZXIgbGFkZGVyLCBhc2NlbmRpbmcsIGZvciBldmFsdWF0aW5nIHtAbGluayBCdWlsZFNpemVNZXRhLm1pblRpZXJ9LlxuICpcbiAqIERlY2xhcmVkIGhlcmUgYmVjYXVzZSBhIGRlcGVuZGVuY3ktZnJlZSBtb2R1bGUgY2Fubm90IGltcG9ydCBgVkFMSURfVElFUlNgIChpdFxuICogaXMgZGVyaXZlZCBmcm9tIHRoZSBlbnYtcmVhZGluZyB0aWVyIHRhYmxlKS4gYHVubGltaXRlZGAgc2l0cyBhdCB0aGUgdG9wIHNvXG4gKiB0aGUgbm8tYmlsbGluZyBpbnN0YWxsIGdhdGVzIG5vdGhpbmcg4oCUIGEgZ2F0ZSB0aGVyZSB3b3VsZCBpbnZlbnQgYSBsaW1pdCB0aGVcbiAqIG9wZXJhdG9yIG5ldmVyIGJvdWdodCBpbnRvLiBQaW5uZWQgYWdhaW5zdCB0aGUgYFF1b3RhVGllcmAgdW5pb24gYnkgYSB0ZXN0LlxuICovXG5leHBvcnQgY29uc3QgQlVJTERfVElFUl9MQURERVI6IHJlYWRvbmx5IFF1b3RhVGllcltdID0gW1xuICAnZGV2ZWxvcGVyJywgJ3BybycsICd0ZWFtJywgJ2J1c2luZXNzJywgJ2VudGVycHJpc2UnLCAndW5saW1pdGVkJyxcbl07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQWNjZXNzb3JzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFRoaXMgc2l6ZSdzIGNyZWRpdC92Q1BVIG11bHRpcGxpZXI7IGAxYCBmb3IgYW55dGhpbmcgdW5yZWNvZ25pc2VkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2l6ZU11bHRpcGxpZXIoc2l6ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIEJVSUxEX1NJWkVfQ0FUQUxPR1tzaXplIGFzIEJ1aWxkU2l6ZV0/Lm11bHRpcGxpZXIgPz8gMTtcbn1cblxuLyoqIGBTbWFsbGAg4oCmIGBYLUxhcmdlYDsgdGhlIHJhdyBpZCBmb3IgYW55dGhpbmcgdW5yZWNvZ25pc2VkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2l6ZUxhYmVsKHNpemU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBCVUlMRF9TSVpFX0NBVEFMT0dbc2l6ZSBhcyBCdWlsZFNpemVdPy5sYWJlbCA/PyBzaXplO1xufVxuXG4vKiogYFN0YW5kYXJkYCAvIGBGbGV4aWJsZWA7IHRoZSByYXcgaWQgZm9yIGFueXRoaW5nIHVucmVjb2duaXNlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENsYXNzTGFiZWwoYnVpbGRDbGFzczogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIEJVSUxEX0NMQVNTX0NBVEFMT0dbYnVpbGRDbGFzcyBhcyBCdWlsZENsYXNzXT8ubGFiZWwgPz8gYnVpbGRDbGFzcztcbn1cblxuLyoqXG4gKiBFbnYtdmFyIHN1ZmZpeCBvZiB0aGlzIHNpemUncyBidWlsZGtpdGQgcG9vbCBvdmVycmlkZS5cbiAqXG4gKiBEZWNsYXJlZCBpbiB0aGUgY2F0YWxvZyByYXRoZXIgdGhhbiBkZXJpdmVkLCBiZWNhdXNlIGRlcml2aW5nIGl0IHByb2R1Y2VzXG4gKiBJTExFR0FMIE5BTUVTOiBgJzAuNXgnLnRvVXBwZXJDYXNlKClgIGlzIGAwLjVYYCwgYW5kIGEgZG90IGNhbm5vdCBhcHBlYXIgaW4gYW5cbiAqIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWUuIChJdCBpcyB0aGUgc2FtZSByZWFzb24gYHgtbGFyZ2VgIHdhcyByZWplY3RlZCBhcyBhblxuICogaWQg4oCUIGAuLi5fWC1MQVJHRWAgaXMgbm90IGFuIGlkZW50aWZpZXIgZWl0aGVyLikgRmFsbHMgYmFjayB0byBgMVhgLCB0aGVcbiAqIHNoYXJlZCBkYWVtb24sIGZvciBhbiB1bnJlY29nbmlzZWQgc2l6ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2l6ZUVudlN1ZmZpeChzaXplOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gQlVJTERfU0laRV9DQVRBTE9HW3NpemUgYXMgQnVpbGRTaXplXT8uZW52U3VmZml4ID8/ICcxWCc7XG59XG5cbi8qKiBUaGUgY2xhc3MgdGhpcyBzaXplIHJ1bnMgaW4gdW5sZXNzIHRoZSBjYWxsZXIgb3ZlcnJpZGVzIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRDbGFzc0ZvclNpemUoc2l6ZTogc3RyaW5nKTogQnVpbGRDbGFzcyB7XG4gIHJldHVybiBCVUlMRF9TSVpFX0NBVEFMT0dbc2l6ZSBhcyBCdWlsZFNpemVdPy5kZWZhdWx0Q2xhc3MgPz8gJ3N0YW5kYXJkJztcbn1cblxuLyoqXG4gKiBIb3cgbXVjaCBsb25nZXIgYSBidWlsZCBhdCB0aGlzIHNpemUgbWF5IHJ1biBiZWZvcmUgdGhlIHRpbWVvdXQga2lsbHMgaXQuXG4gKlxuICogU2NhbGVzIFVQIGJlbG93IGAxeGAgYW5kIG5ldmVyIGRvd24gYWJvdmUgaXQsIGFuZCB0aGUgYXN5bW1ldHJ5IGlzIHRoZSBwb2ludDpcbiAqIHRoZSB0aW1lb3V0IGlzIGEgU0FGRVRZIGJvdW5kIG9uIGEgcnVuYXdheSBidWlsZCwgbm90IGEgYnVkZ2V0LiBBdCBoYWxmIHRoZVxuICogdkNQVSBhIHRlbi1taW51dGUgYnVpbGQgYmVjb21lcyBhYm91dCB0d2VudHkgYW5kIHdvdWxkIGRpZSBvbiBhIDE1LW1pbnV0ZVxuICogYm91bmQg4oCUIHNvIFNtYWxsIHdvdWxkIHF1aWV0bHkgZmFpbCBsb25nIGJ1aWxkcyAoYXMgYSBgcmV0cnlhYmxlYCBmYWlsdXJlLCBzb1xuICogdGhlIHRlbmFudCBpcyBub3QgY2hhcmdlZCwgYnV0IGl0IGlzIHJldHJpZWQgdHdpY2UgYW5kIGRlYWQtbGV0dGVyZWQpLiBTY2FsaW5nXG4gKiBpdCBET1dOIGF0IGA0eGAgd291bGQgaW5zdGVhZCBicmVhayBJL08tYm91bmQgYnVpbGRzIHRoYXQgZ2FpbiBub3RoaW5nIGZyb21cbiAqIHRoZSBleHRyYSBDUFUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRpbWVvdXRGYWN0b3Ioc2l6ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWF4KDEsIDEgLyBidWlsZFNpemVNdWx0aXBsaWVyKHNpemUpKTtcbn1cblxuLyoqIEluLWZsaWdodCBidWlsZHMgb25lIG9yZyBvbiBgdGllcmAgbWF5IGhvbGQgaW4gYGJ1aWxkQ2xhc3NgICh0aGUgZGVmYXVsdCkuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTbG90c0Zvcih0aWVyOiBRdW90YVRpZXIsIGJ1aWxkQ2xhc3M6IEJ1aWxkQ2xhc3MpOiBudW1iZXIge1xuICBjb25zdCBtZXRhID0gQlVJTERfQ0xBU1NfQ0FUQUxPR1tidWlsZENsYXNzXSA/PyBCVUlMRF9DTEFTU19DQVRBTE9HLnN0YW5kYXJkO1xuICByZXR1cm4gbWV0YS5zbG90c0J5VGllclt0aWVyXSA/PyBtZXRhLnNsb3RzQnlUaWVyLmRldmVsb3Blcjtcbn1cblxuLyoqIEJvdGggY2xhc3Nlcycgc2xvdCBjb3VudHMgZm9yIG9uZSB0aWVyIOKAlCB0aGUgcGVyLXRpZXIgcmVhZGluZyB0aGUgVUkgd2FudHMuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTbG90c0J5Q2xhc3ModGllcjogUXVvdGFUaWVyKTogUmVhZG9ubHk8UmVjb3JkPEJ1aWxkQ2xhc3MsIG51bWJlcj4+IHtcbiAgcmV0dXJuIHtcbiAgICBzdGFuZGFyZDogYnVpbGRTbG90c0Zvcih0aWVyLCAnc3RhbmRhcmQnKSxcbiAgICBmbGV4aWJsZTogYnVpbGRTbG90c0Zvcih0aWVyLCAnZmxleGlibGUnKSxcbiAgfTtcbn1cblxuLyoqIFdoZXRoZXIgYHRpZXJgIG1heSByZXF1ZXN0IGBzaXplYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aWVyQWxsb3dzQnVpbGRTaXplKHRpZXI6IFF1b3RhVGllciwgc2l6ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG1ldGEgPSBCVUlMRF9TSVpFX0NBVEFMT0dbc2l6ZSBhcyBCdWlsZFNpemVdO1xuICBpZiAoIW1ldGEpIHJldHVybiBmYWxzZTtcbiAgaWYgKG1ldGEubWluVGllciA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGhhdmUgPSBCVUlMRF9USUVSX0xBRERFUi5pbmRleE9mKHRpZXIpO1xuICAvLyBBbiB1bnJlY29nbmlzZWQgdGllciBnZXRzIHRoZSBGTE9PUiBvZiB0aGUgbGFkZGVyIOKAlCB0aGUgc21hbGxlc3QgYWxsb3dhbmNlLFxuICAvLyBuZXZlciBldmVyeXRoaW5nLiBTYW1lIGNvbnNlcnZhdGl2ZSBjYWxsIGB0aWVyRm9yUXVldWVOYW1lYCBtYWtlcy5cbiAgaWYgKGhhdmUgPCAwKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBoYXZlID49IEJVSUxEX1RJRVJfTEFEREVSLmluZGV4T2YobWV0YS5taW5UaWVyKTtcbn1cblxuLyoqIEV2ZXJ5IHNpemUgYHRpZXJgIG1heSByZXF1ZXN0LCBhc2NlbmRpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTaXplc0ZvclRpZXIodGllcjogUXVvdGFUaWVyKTogcmVhZG9ubHkgQnVpbGRTaXplW10ge1xuICByZXR1cm4gQlVJTERfU0laRVMuZmlsdGVyKChzKSA9PiB0aWVyQWxsb3dzQnVpbGRTaXplKHRpZXIsIHMpKTtcbn1cbiJdfQ==
|
|
252
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtY2F0YWxvZy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2J1aWxkLWNhdGFsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQWlDdEMsOEVBQThFO0FBQzlFLHlDQUF5QztBQUN6Qyw4RUFBOEU7QUFFOUU7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBdUIvRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBaUQ7SUFDL0UsUUFBUSxFQUFFO1FBQ1IsS0FBSyxFQUFFLFVBQVU7UUFDakIsS0FBSyxFQUFFLDJFQUEyRTtRQUNsRixXQUFXLEVBQUU7WUFDWCxTQUFTLEVBQUUsQ0FBQztZQUNaLEdBQUcsRUFBRSxDQUFDO1lBQ04sSUFBSSxFQUFFLENBQUM7WUFDUCxRQUFRLEVBQUUsQ0FBQztZQUNYLFVBQVUsRUFBRSxDQUFDO1lBQ2IsMEVBQTBFO1lBQzFFLFNBQVMsRUFBRSxDQUFDO1NBQ2I7S0FDRjtJQUNELFFBQVEsRUFBRTtRQUNSLEtBQUssRUFBRSxVQUFVO1FBQ2pCLEtBQUssRUFBRSx5RUFBeUU7UUFDaEYsV0FBVyxFQUFFO1lBQ1gsU0FBUyxFQUFFLENBQUM7WUFDWixHQUFHLEVBQUUsQ0FBQztZQUNOLElBQUksRUFBRSxDQUFDO1lBQ1AsUUFBUSxFQUFFLEVBQUU7WUFDWixVQUFVLEVBQUUsRUFBRTtZQUNkLFNBQVMsRUFBRSxFQUFFO1NBQ2Q7S0FDRjtDQUNGLENBQUM7QUFFRiw4RUFBOEU7QUFDOUUsMkNBQTJDO0FBQzNDLDhFQUE4RTtBQUU5RSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFVLENBQUM7QUFxQ3JFOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUEr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Q0FBQyxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDeEIsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN2QyxNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsOEVBQThFO0lBQzlFLHFFQUFxRTtJQUNyRSxJQUFJLElBQUksR0FBRyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDM0IsT0FBTyxJQUFJLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsZ0RBQWdEO0FBQ2hELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxJQUFlO0lBQy9DLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFdoYXQgYSBidWlsZCdzIENMQVNTIGFuZCBTSVpFIGFyZSBjYWxsZWQsIHdoYXQgdGhleSBjb3N0LCBhbmQgd2hpY2ggdGllciBtYXlcbiAqIGFzayBmb3IgdGhlbSAoRDExL0QxMykuXG4gKlxuICogT05FIG1vZHVsZSBpbnN0ZWFkIG9mIHNpeCB0YWJsZXMuIFRoZSBmYWN0cyB1c2VkIHRvIGxpdmUgaW5cbiAqIGB3aXJlLXZvY2FidWxhcnkudHNgICh0aGUgdHdvIGlkIGxpc3RzIGFuZCB0aGUgc2l6ZSBtdWx0aXBsaWVycyksXG4gKiBgcXVvdGEtdGllcnMudHNgICh3aGljaCB0aWVyIGdldHMgd2hpY2ggc2l6ZSwgYW5kIHRoZSBwZXItY2xhc3Mgc2xvdCBjb3VudHMpXG4gKiBhbmQgYSBoYW5kLW1haW50YWluZWQgbWlycm9yIG9mIGFsbCBmb3VyIGluIGBmcm9udGVuZC9zcmMvbGliL2J1aWxkLXNoYXBlLnRzYFxuICog4oCUIGhlbGQgdG9nZXRoZXIgYnkgYSB0ZXN0IHRoYXQgcGFyc2VkIHRoaXMgcGFja2FnZSdzIFR5cGVTY3JpcHQgU09VUkNFIHdpdGhcbiAqIHJlZ2V4ZXMgdG8gZGV0ZWN0IGRyaWZ0LiBUaGlzIGlzIHRoZSBzYW1lIG1vdmUgYHF1b3RhLWNhdGFsb2cudHNgIG1hZGUgZm9yIHRoZVxuICogZml2ZSBmcm9udGVuZCBsYWJlbCBtYXBzLCBhbmQgZm9yIHRoZSBzYW1lIHJlYXNvbjogdGhlIGJyb3dzZXIgaW1wb3J0cyB0aGVcbiAqIGNhdGFsb2cgZGlyZWN0bHksIHNvIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBkcmlmdC5cbiAqXG4gKiBERVBFTkRFTkNZLUZSRUUsIGFuZCB0aGF0IGlzIGEgY29uc3RyYWludCByYXRoZXIgdGhhbiBhIGhhcHB5IGFjY2lkZW50LiBPbmx5XG4gKiB0eXBlLW9ubHkgaW1wb3J0cywgd2hpY2ggYXJlIGVyYXNlZCwgc28gdGhpcyBtb2R1bGUgbG9hZHMgaW4gYSBicm93c2VyOyB0aGVcbiAqIG1vbWVudCBpdCByZWFkcyBhbiBlbnYgdmFyIGl0IHN0b3BzIGJlaW5nIGltcG9ydGFibGUgYnkgdGhlIGZyb250ZW5kIGFuZCB0aGVcbiAqIG1pcnJvciBjb21lcyBiYWNrLiBFdmVyeXRoaW5nIGhlcmUgaXMgdGhlcmVmb3JlIGEgREVGQVVMVC4gVGhlIGVudiBvdmVybGF5XG4gKiAoYFBMVUdJTl9NQVhfQlVJTERTXzxUSUVSPl88Q0xBU1M+YCwgYFBMVUdJTl9CVUlMREtJVF9BRERSX1NJWkVfPFNVRkZJWD5gKVxuICogbGl2ZXMgc2VydmVyLXNpZGUsIHdoaWNoIGlzIHRoZSBzYW1lIHNwbGl0IHRoZSB0aWVyIHByZXNldHMgYWxyZWFkeSB1c2U6IGFcbiAqIGhhcmRjb2RlZCBmYWxsYmFjayBwbHVzIGEgYC9jb25maWdgIG92ZXJsYXkuXG4gKlxuICogSURTIEFSRSBBUklUSE1FVElDLCBMQUJFTFMgQVJFIFdPUkRTLiBgMC41eGAgY2FycmllcyBpdHMgb3duIG11bHRpcGxpZXIsIHNvXG4gKiBgYnVpbGRTaXplTXVsdGlwbGllcmAgaXMgY2hlY2thYmxlIGJ5IGV5ZSBhbmQgdGhlIGNyZWRpdCBtYXRoIGlzXG4gKiBzZWxmLWRvY3VtZW50aW5nOyBgU21hbGxgIC8gYFN0YW5kYXJkYCAvIGBNZWRpdW1gIC8gYExhcmdlYCAvIGBYLUxhcmdlYCBpcyB3aGF0XG4gKiBhIHBlcnNvbiByZWFkcy4gS2VlcGluZyB0aGVtIHNlcGFyYXRlIGlzIGFsc28gd2hhdCBtYWtlcyBhIHJlbmFtZSBjaGVhcDogYVxuICogbGFiZWwgaXMgb25lIGxpbmUgaGVyZSwgd2l0aCBubyB3aXJlIHZhbHVlLCBSZWRpcyBrZXksIG1ldHJpYyBsYWJlbCBvciBsZWRnZXJcbiAqIHN0cmluZyB0byBtaWdyYXRlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUXVvdGFUaWVyIH0gZnJvbSAnLi9xdW90YS10aWVycy5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2NoZWR1bGluZyBjbGFzcyDigJQgV0hFTiBhIGJ1aWxkIHN0YXJ0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogYGZsZXhpYmxlYCByYXRoZXIgdGhhbiBgYmF0Y2hgLCBgZGVmZXJyZWRgIG9yIGBzbWFsbGAuXG4gKlxuICogSXQgbmFtZXMgd2hhdCB0aGUgQ1VTVE9NRVIgdHJhZGVzIOKAlCBhIGZsZXhpYmxlIHN0YXJ0IHRpbWUg4oCUIGluc3RlYWQgb2Ygd2hhdFxuICogdGhlIHBsYXRmb3JtIGRvZXMgd2l0aCBpdCwgYW5kIGl0IGRvZXMgbm90IHJlYWQgYXMgYSBkZW1vdGlvbjogdGhpcyBjbGFzcyBpc1xuICogYXZhaWxhYmxlIG9uIGV2ZXJ5IHRpZXIgaW5jbHVkaW5nIGZyZWUsIGFuZCBgZGVmZXJyZWRgIHNvdW5kcyBicm9rZW4gd2hpbGVcbiAqIGBsb3cgcHJpb3JpdHlgIHNvdW5kcyBsaWtlIGEgcGVuYWx0eS4gYHNtYWxsYCB3YXMgcmVqZWN0ZWQgb3V0cmlnaHQgYmVjYXVzZSBpdFxuICogaXMgYSBtYWduaXR1ZGUgd29yZCBvbiBhIGxhdGVuY3kgZGltZW5zaW9uIOKAlCBgeyBidWlsZENsYXNzOiAnc21hbGwnLFxuICogYnVpbGRTaXplOiAnMngnIH1gIGlzIGxlZ2FsIGFuZCB1bnJlYWRhYmxlLlxuICovXG5leHBvcnQgY29uc3QgQlVJTERfQ0xBU1NFUyA9IFsnc3RhbmRhcmQnLCAnZmxleGlibGUnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJ1aWxkQ2xhc3MgPSAodHlwZW9mIEJVSUxEX0NMQVNTRVMpW251bWJlcl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRDbGFzc01ldGEge1xuICAvKiogV2hhdCBhIHBlcnNvbiByZWFkcy4gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqIFRoZSB0cmFkZSwgc2FpZCBpbiBvbmUgbGluZSBiZXNpZGUgdGhlIGNvbnRyb2wuICovXG4gIGJsdXJiOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbi1mbGlnaHQgYnVpbGRzIG9uZSBPUkcgbWF5IGhvbGQgaW4gdGhpcyBjbGFzcywgcGVyIHRpZXIg4oCUIHRoZSBERUZBVUxUIGZvclxuICAgKiBgUExVR0lOX01BWF9CVUlMRFNfPFRJRVI+XzxDTEFTUz5gLlxuICAgKlxuICAgKiBHcmFkZWQgYnkgdGllciByYXRoZXIgdGhhbiBvbmUgZmxhdCBmaWd1cmU6IGEgc2luZ2xlIGZpZ3VyZSBnYXZlIGEgRGV2ZWxvcGVyXG4gICAqIG9yZyB0aGUgc2FtZSB0aHJlZSBpbi1mbGlnaHQgYnVpbGRzIGFzIGFuIEVudGVycHJpc2Ugb25lLCB3aGljaCBtYWRlIHRoZVxuICAgKiBwZXItb3JnIHNlbWFwaG9yZSB0aGUgb25lIHBsYWNlIGluIHRoZSBidWlsZCBwYXRoIHRoYXQgaWdub3JlZCB3aGF0IHRoZVxuICAgKiB0ZW5hbnQgcGF5cyBmb3IuIGBmbGV4aWJsZWAgaGFzIG1vcmUgaGVhZHJvb20gdGhhbiBgc3RhbmRhcmRgIG9uIGV2ZXJ5IHJvdyxcbiAgICogYmVjYXVzZSB0aGUgY2hlYXAgY2xhc3MgaXMgd2hlcmUgdGhlIHJvb20gaGFzIHRvIGJlIGZvciBpdCB0byBzbW9vdGhcbiAgICogYW55dGhpbmcg4oCUIGEgcm93IHdoZXJlIHRoZXkgd2VyZSBlcXVhbCB3b3VsZCBtYWtlIHRoZSBjbGFzcyBwb2ludGxlc3MgdG9cbiAgICogY2hvb3NlLlxuICAgKi9cbiAgc2xvdHNCeVRpZXI6IFJlYWRvbmx5PFJlY29yZDxRdW90YVRpZXIsIG51bWJlcj4+O1xufVxuXG5leHBvcnQgY29uc3QgQlVJTERfQ0xBU1NfQ0FUQUxPRzogUmVhZG9ubHk8UmVjb3JkPEJ1aWxkQ2xhc3MsIEJ1aWxkQ2xhc3NNZXRhPj4gPSB7XG4gIHN0YW5kYXJkOiB7XG4gICAgbGFiZWw6ICdTdGFuZGFyZCcsXG4gICAgYmx1cmI6ICdTdGFydHMgYXMgc29vbiBhcyBhIHNsb3QgaXMgZnJlZS4gVXNlIGl0IGZvciBhbnl0aGluZyB5b3UgYXJlIHdhaXRpbmcgb24uJyxcbiAgICBzbG90c0J5VGllcjoge1xuICAgICAgZGV2ZWxvcGVyOiAxLFxuICAgICAgcHJvOiAyLFxuICAgICAgdGVhbTogMyxcbiAgICAgIGJ1c2luZXNzOiA1LFxuICAgICAgZW50ZXJwcmlzZTogOCxcbiAgICAgIC8vIEJpbGxpbmcgZGlzYWJsZWQ6IG5vdGhpbmcgaXMgY2FwcGVkLCBzbyB0aGUgY2VpbGluZyBpcyB0aGUgcG9vbCBpdHNlbGYuXG4gICAgICB1bmxpbWl0ZWQ6IDgsXG4gICAgfSxcbiAgfSxcbiAgZmxleGlibGU6IHtcbiAgICBsYWJlbDogJ0ZsZXhpYmxlJyxcbiAgICBibHVyYjogJ1N0YXJ0cyBsYXRlciwgaW4gZXhjaGFuZ2UgZm9yIG1vcmUgYnVpbGRzIGF0IG9uY2UuIFNhbWUgY29zdCBwZXIgYnVpbGQuJyxcbiAgICBzbG90c0J5VGllcjoge1xuICAgICAgZGV2ZWxvcGVyOiAzLFxuICAgICAgcHJvOiA0LFxuICAgICAgdGVhbTogNixcbiAgICAgIGJ1c2luZXNzOiAxMCxcbiAgICAgIGVudGVycHJpc2U6IDE2LFxuICAgICAgdW5saW1pdGVkOiAxNixcbiAgICB9LFxuICB9LFxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNYWNoaW5lIHNpemUg4oCUIEhPVyBNVUNIIENQVSBhIGJ1aWxkIGdldHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgQlVJTERfU0laRVMgPSBbJzAuNXgnLCAnMXgnLCAnMngnLCAnNHgnLCAnOHgnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJ1aWxkU2l6ZSA9ICh0eXBlb2YgQlVJTERfU0laRVMpW251bWJlcl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRTaXplTWV0YSB7XG4gIC8qKiBXaGF0IGEgcGVyc29uIHJlYWRzOiBTbWFsbCDigKYgWC1MYXJnZS4gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqIHZDUFUgcmVsYXRpdmUgdG8gdGhlIGRlcGxveW1lbnQncyBiYXNlIGZpZ3VyZSwgYW5kIHRoZSBjcmVkaXQgcmF0ZS4gKi9cbiAgbXVsdGlwbGllcjogbnVtYmVyO1xuICAvKipcbiAgICogTG93ZXN0IHRpZXIgdGhhdCBtYXkgUkVRVUVTVCB0aGlzIHNpemU7IGBudWxsYCBtZWFucyBldmVyeSB0aWVyIG1heS5cbiAgICpcbiAgICogT25lIGZpZWxkIHBlciBzaXplIHJhdGhlciB0aGFuIGEgcm93IHBlciB0aWVyLCBhbmQgdGhhdCBtYWtlcyB0aGUgbGFkZGVyJ3NcbiAgICogbW9ub3RvbmljaXR5IFNUUlVDVFVSQUw6IGEgcm93LXBlci10aWVyIHRhYmxlIGNhbiBleHByZXNzIFwiVGVhbSBoYXMgNHggYnV0XG4gICAqIEJ1c2luZXNzIGRvZXMgbm90XCIgYW5kIG5lZWRlZCBhIHRlc3QgdG8gZm9yYmlkIGl0LiBUaGlzIHNoYXBlIGNhbm5vdC5cbiAgICovXG4gIG1pblRpZXI6IFF1b3RhVGllciB8IG51bGw7XG4gIC8qKlxuICAgKiBUaGUgY2xhc3MgdGhpcyBzaXplIHBhaXJzIHdpdGggdW5sZXNzIHRoZSBjYWxsZXIgc2F5cyBvdGhlcndpc2UuXG4gICAqXG4gICAqIFdoeSBgMC41eGAgZGVmYXVsdHMgdG8gYGZsZXhpYmxlYDogYSBoYWxmLXNwZWVkIGJ1aWxkIHRha2VzIHJvdWdobHkgdHdpY2UgYXNcbiAgICogbG9uZyBhbmQgdGhlcmVmb3JlIEhPTERTIElUUyBTTE9UIHR3aWNlIGFzIGxvbmcuIE9uIERldmVsb3BlciDigJQgb25lIHN0YW5kYXJkXG4gICAqIHNsb3Qg4oCUIG9uZSBjaGVhcCBidWlsZCB3b3VsZCBibG9jayB0aGUgb25seSB1cmdlbnQtZml4IHNsb3QgZm9yIGRvdWJsZSB0aGVcbiAgICogdGltZS4gRGVmYXVsdGluZyBpdCB0byB0aGUgY2xhc3Mgd2l0aCB0aHJlZSBzbG90cyBtZWFucyBpdCBjYW5ub3QuXG4gICAqL1xuICBkZWZhdWx0Q2xhc3M6IEJ1aWxkQ2xhc3M7XG4gIC8qKlxuICAgKiBTdWZmaXggb2YgdGhpcyBzaXplJ3MgYnVpbGRraXRkIHBvb2wgb3ZlcnJpZGVcbiAgICogKGBQTFVHSU5fQlVJTERLSVRfQUREUl9TSVpFXzxTVUZGSVg+YCkuXG4gICAqXG4gICAqIERlY2xhcmVkIHJhdGhlciB0aGFuIGRlcml2ZWQgZnJvbSB0aGUgaWQsIGJlY2F1c2UgZGVyaXZpbmcgaXQgcHJvZHVjZXNcbiAgICogSUxMRUdBTCBOQU1FUzogYCcwLjV4Jy50b1VwcGVyQ2FzZSgpYCBnaXZlcyBgMC41WGAgYW5kIGEgZG90IGNhbm5vdCBhcHBlYXIgaW5cbiAgICogYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZSAodGhlIHNhbWUgcmVhc29uIGB4LWxhcmdlYCB3YXMgcmVqZWN0ZWQgYXMgYW5cbiAgICogaWQg4oCUIGAuLi5fWC1MQVJHRWAgaXMgbm90IGFuIGlkZW50aWZpZXIgZWl0aGVyKS5cbiAgICovXG4gIGVudlN1ZmZpeDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzaXplIGxhZGRlci5cbiAqXG4gKiBBIHNpemUgaXMgYSBCSUdHRVIgREFFTU9OLCBub3QgYSBmbGFnOiBgYnVpbGRjdGxgIGhhcyBubyBwZXItYnVpbGQgQ1BVIG9wdGlvbixcbiAqIGJlY2F1c2UgdGhlIENQVSBhIGJ1aWxkIG1heSB1c2UgaXMgdGhlIGJ1aWxka2l0ZCBQT0QncyBsaW1pdC4gU28gZXZlcnkgcnVuZ1xuICogYWJvdmUgb3IgYmVsb3cgYDF4YCBuZWVkcyBhIHBvb2wgb2YgaXRzIG93biwgYW5kIGEgcnVuZyB3aXRoIG5vIHBvb2wgaXNcbiAqIFJFRlVTRUQgcmF0aGVyIHRoYW4gc2lsZW50bHkgc2VydmVkIGF0IGAxeGAg4oCUIGluIGJvdGggZGlyZWN0aW9ucy4gU2VydmluZ1xuICogYDR4YCBmcm9tIHRoZSBzaGFyZWQgZGFlbW9uIHdvdWxkIGNoYXJnZSBmb3VyIHRpbWVzIGZvciBvbmUgdGltZXMgdGhlIHNwZWVkO1xuICogc2VydmluZyBgMC41eGAgZnJvbSBpdCB3b3VsZCBoYW5kIGV2ZXJ5IHRlbmFudCBmdWxsIHNwZWVkIGF0IGhhbGYgcHJpY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBCVUlMRF9TSVpFX0NBVEFMT0c6IFJlYWRvbmx5PFJlY29yZDxCdWlsZFNpemUsIEJ1aWxkU2l6ZU1ldGE+PiA9IHtcbiAgLy8gQXZhaWxhYmxlIHRvIEVWRVJZIHRpZXIsIGRlbGliZXJhdGVseS4gSXQgaXMgYSBidWRnZXQgb3B0aW9uLCBub3QgYVxuICAvLyByZXN0cmljdGlvbjogdGhlIGZyZWUgdGllciBnYWlucyBhIHJlYWwgY2hvaWNlIChzcGVuZCBsZXNzKSBpbnN0ZWFkIG9mIGFcbiAgLy8gbGlzdCBvZiBsb2Nrcy4gVGhlIGFyaXRobWV0aWMgaXMgaG9uZXN0IGluIG9uZSBkaXJlY3Rpb24g4oCUIGEgQ1BVLWJvdW5kIGJ1aWxkXG4gIC8vIHRha2VzIHR3aWNlIGFzIGxvbmcgYXQgaGFsZiB0aGUgdkNQVSBhbmQgY29zdHMgdGhlIFNBTUUsIHdoaWxlIGFuIEkvTy1ib3VuZFxuICAvLyBvbmUgY29zdHMgYWJvdXQgaGFsZi4gU28gU21hbGwgY2FuIG5ldmVyIGNvc3QgbW9yZSB0aGFuIFN0YW5kYXJkLCBhbmQgY2FuXG4gIC8vIGNvc3QgaGFsZiAoYXNzdW1pbmcgc2xvd2Rvd24gaXMgYXQgbW9zdCBsaW5lYXIsIHdoaWNoIG1lbW9yeSBwcmVzc3VyZSBjYW5cbiAgLy8gYnJlYWspLlxuICAnMC41eCc6IHsgbGFiZWw6ICdTbWFsbCcsIG11bHRpcGxpZXI6IDAuNSwgbWluVGllcjogbnVsbCwgZGVmYXVsdENsYXNzOiAnZmxleGlibGUnLCBlbnZTdWZmaXg6ICdIQUxGJyB9LFxuICAnMXgnOiB7IGxhYmVsOiAnU3RhbmRhcmQnLCBtdWx0aXBsaWVyOiAxLCBtaW5UaWVyOiBudWxsLCBkZWZhdWx0Q2xhc3M6ICdzdGFuZGFyZCcsIGVudlN1ZmZpeDogJzFYJyB9LFxuICAnMngnOiB7IGxhYmVsOiAnTWVkaXVtJywgbXVsdGlwbGllcjogMiwgbWluVGllcjogJ3RlYW0nLCBkZWZhdWx0Q2xhc3M6ICdzdGFuZGFyZCcsIGVudlN1ZmZpeDogJzJYJyB9LFxuICAnNHgnOiB7IGxhYmVsOiAnTGFyZ2UnLCBtdWx0aXBsaWVyOiA0LCBtaW5UaWVyOiAnYnVzaW5lc3MnLCBkZWZhdWx0Q2xhc3M6ICdzdGFuZGFyZCcsIGVudlN1ZmZpeDogJzRYJyB9LFxuICAnOHgnOiB7IGxhYmVsOiAnWC1MYXJnZScsIG11bHRpcGxpZXI6IDgsIG1pblRpZXI6ICdlbnRlcnByaXNlJywgZGVmYXVsdENsYXNzOiAnc3RhbmRhcmQnLCBlbnZTdWZmaXg6ICc4WCcgfSxcbn07XG5cbi8qKlxuICogVGhlIHRpZXIgbGFkZGVyLCBhc2NlbmRpbmcsIGZvciBldmFsdWF0aW5nIHtAbGluayBCdWlsZFNpemVNZXRhLm1pblRpZXJ9LlxuICpcbiAqIERlY2xhcmVkIGhlcmUgYmVjYXVzZSBhIGRlcGVuZGVuY3ktZnJlZSBtb2R1bGUgY2Fubm90IGltcG9ydCBgVkFMSURfVElFUlNgIChpdFxuICogaXMgZGVyaXZlZCBmcm9tIHRoZSBlbnYtcmVhZGluZyB0aWVyIHRhYmxlKS4gYHVubGltaXRlZGAgc2l0cyBhdCB0aGUgdG9wIHNvXG4gKiB0aGUgbm8tYmlsbGluZyBpbnN0YWxsIGdhdGVzIG5vdGhpbmcg4oCUIGEgZ2F0ZSB0aGVyZSB3b3VsZCBpbnZlbnQgYSBsaW1pdCB0aGVcbiAqIG9wZXJhdG9yIG5ldmVyIGJvdWdodCBpbnRvLiBQaW5uZWQgYWdhaW5zdCB0aGUgYFF1b3RhVGllcmAgdW5pb24gYnkgYSB0ZXN0LlxuICovXG5leHBvcnQgY29uc3QgQlVJTERfVElFUl9MQURERVI6IHJlYWRvbmx5IFF1b3RhVGllcltdID0gW1xuICAnZGV2ZWxvcGVyJywgJ3BybycsICd0ZWFtJywgJ2J1c2luZXNzJywgJ2VudGVycHJpc2UnLCAndW5saW1pdGVkJyxcbl07XG5cbi8qKlxuICogSG93IG1hbnkgb2YgYSB0aWVyJ3MgYnVpbGRzIHJ1biBBVCBPTkNFLCBhY3Jvc3MgZXZlcnkgb3JnIG9uIHRoYXQgdGllclxuICogKGBQTFVHSU5fQlVJTERfQ09OQ1VSUkVOQ1lfPFRJRVI+YCBvdmVycmlkZXMgZWFjaCByb3cpLlxuICpcbiAqIFRJRVIta2V5ZWQsIG5vdCBjbGFzcy1rZXllZCwgYW5kIHRoYXQgaXMgdGhlIHF1ZXVlIHRvcG9sb2d5IHJhdGhlciB0aGFuIGFcbiAqIHNpbXBsaWZpY2F0aW9uOiB0aGVyZSBpcyBvbmUgQnVsbE1RIGBXb3JrZXJgIHBlciB0aWVyIHF1ZXVlIGFuZCBib3RoXG4gKiBzY2hlZHVsaW5nIGNsYXNzZXMgYXJlIHNlcnZlZCBieSBpdCwgc28gYSBwZXItY2xhc3MgZmlndXJlIGhlcmUgY291bGQgbm90IGJlXG4gKiBob25vdXJlZCDigJQgaXQgd291bGQgZWl0aGVyIGR1cGxpY2F0ZSB0aGlzIG51bWJlciBvciBpbnZpdGUgc29tZW9uZSB0byBzZXQgYVxuICogdmFsdWUgdGhlIHdvcmtlciBjYW5ub3QgYWN0IG9uLlxuICpcbiAqICoqQSBsYWRkZXIsIG5vdCBvbmUgZmlndXJlLioqIFRoaXMgaXMgdGhlIEFHR1JFR0FURSBib3VuZCB0aGF0IG1ha2VzIGEgdGllcidzXG4gKiBhZHZlcnRpc2VkIHBlci1idWlsZCBjYXBhY2l0eSBkZWxpdmVyYWJsZTogdGhlIGNhcCBpcyByZWFjaGFibGUgYnkgYSBzaW5nbGVcbiAqIHRlbmFudCwgYW5kIHRoZSBudW1iZXIgb2YgdGVuYW50cyByZWFjaGluZyBmb3IgaXQgY29uY3VycmVudGx5IGlzIGxpbWl0ZWRcbiAqIGhlcmUsIHdoZXJlIGl0IGNhbiBiZSB0dW5lZCB3aXRob3V0IHRvdWNoaW5nIHRoZSBwcmljZSBsaXN0LlxuICpcbiAqIEl0IGxpdmVkIGFzIGEgYmFyZSBsaXRlcmFsIG1hcCBpbnNpZGUgdGhlIGJ1aWxkIHdvcmtlciB1bnRpbCBub3csIHdoaWNoIGlzXG4gKiBleGFjdGx5IGhvdyBgZG9jcy9lbnZpcm9ubWVudC12YXJpYWJsZXMubWRgIGNhbWUgdG8gZGVzY3JpYmUgYSBnbG9iYWwgZGVmYXVsdFxuICogdGhhdCB0aGUgY29kZSBoYWQgc3RvcHBlZCBob25vdXJpbmcg4oCUIGEgZmlndXJlIG5vIGNhdGFsb2cgZXhwb3NlcyBpcyBhIGZpZ3VyZVxuICogdGhlIGRvY3VtZW50YXRpb24gZHJpZnRzIGF3YXkgZnJvbS4gSXQgc2l0cyBiZXNpZGUgYHNsb3RzQnlUaWVyYCBhbmRcbiAqIGBtaW5UaWVyYCBiZWNhdXNlIGl0IGlzIHRoZSB0aGlyZCB0aWVyLWtleWVkIGJ1aWxkIGZpZ3VyZSwgbm90IGEgZGlmZmVyZW50XG4gKiBraW5kIG9mIHRoaW5nLlxuICpcbiAqICoqRGlzdGluY3QgZnJvbSB0aGUgcGVyLW9yZyBzbG90IGNhcCwgYW5kIHRoZSBMT1dFUiBvZiB0aGUgdHdvIGJpbmRzLioqIFRoaXNcbiAqIGlzIHBvZCBjYXBhY2l0eSAoZXZlcnkgY29uY3VycmVudCBidWlsZCBkcml2ZXMgdGhlIHNhbWUgYnVpbGRraXRkKTsgdGhlIHNsb3RcbiAqIGNhcCBpcyBmYWlybmVzcyBiZXR3ZWVuIHRlbmFudHMgc2hhcmluZyB0aGlzIHF1ZXVlLiBBIHRpZXIgd2hvc2UgY29uY3VycmVuY3lcbiAqIHNpdHMgYmVsb3cgaXRzIHNsb3QgY2FwIGNhbm5vdCByZWFjaCB0aGF0IGNhcCBhdCBhbGwsIHdoaWNoIGlzIHdoeSB0aGUgd29ya2VyXG4gKiB3YXJucyBhYm91dCBpdCBvbiBzdGFydC5cbiAqXG4gKiBNb25vdG9uaWMgYWNyb3NzIHRoZSBQQUlEIHJ1bmdzIG9ubHkuIGB1bmxpbWl0ZWRgIHNpdHMgYXQgdGhlIGJvdHRvbSwgbm90IHRoZVxuICogdG9wOiBpdCBpcyBub3QgYSBwdXJjaGFzZWQgdGllciBidXQgdGhlIGFic2VuY2Ugb2YgYmlsbGluZywgd2hpY2ggY29ycmVsYXRlc1xuICogd2l0aCB0aGUgc21hbGxlc3QgaGFyZHdhcmUg4oCUIHNlZSBpdHMgb3duIG5vdGUgYmVsb3cuXG4gKi9cbmV4cG9ydCBjb25zdCBCVUlMRF9USUVSX0NPTkNVUlJFTkNZOiBSZWFkb25seTxSZWNvcmQ8UXVvdGFUaWVyLCBudW1iZXI+PiA9IHtcbiAgZGV2ZWxvcGVyOiAxLFxuICBwcm86IDIsXG4gIHRlYW06IDIsXG4gIGJ1c2luZXNzOiAzLFxuICBlbnRlcnByaXNlOiA0LFxuICAvKipcbiAgICogT05FLCBhbmQgdGhlIGxvd2VzdCByb3cg4oCUIGRlbGliZXJhdGVseSBOT1QgdGhlIG1vc3QgZ2VuZXJvdXMuXG4gICAqXG4gICAqIGB1bmxpbWl0ZWRgIG1lYW5zIFwiYmlsbGluZyBpcyBub3QgY29uZmlndXJlZFwiLCB3aGljaCBpbiBwcmFjdGljZSBpcyBhXG4gICAqIHNpbmdsZS1ub2RlIGluc3RhbGwgKGxvY2FsLCBtaW5pa3ViZSwgYSBmcmVzaCBjbHVzdGVyKSwgYW5kIGl0IGlzIGFsc28gdGhlXG4gICAqIFNZU1RFTSBPUkcncyB0aWVyIOKAlCB0aGUgb3JnIHRoYXQgbG9hZHMgdGhlIHdob2xlIHNhbXBsZSBjYXRhbG9ndWUgb24gZmlyc3RcbiAgICogYm9vdC4gR2l2aW5nIGl0IDQgaGFuZGVkIHRoZSBoaWdoZXN0IGNvbmN1cnJlbmN5IHRvIHRoZSB0aWVyIG1vc3QgbGlrZWx5IHRvXG4gICAqIGJlIHJ1bm5pbmcgb24gdGhlIHNtYWxsZXN0IGhhcmR3YXJlLlxuICAgKlxuICAgKiBJdCBjb3N0IGFuIGluc3RhbGw6IDggcGx1Z2luIHJlcGxpY2FzIHggNCA9IDMyIGNvbmN1cnJlbnQgYnVpbGRzLCBlYWNoXG4gICAqIGFza2luZyB0aGUgaW1hZ2UgcmVnaXN0cnkgdG8gc2lnbiBhIDctMTcgTWlCIFNCT00gYWdhaW5zdCBpdHMgMSBHaUIgbGltaXQuXG4gICAqIFRoZSByZWdpc3RyeSB3YXMgT09NS2lsbGVkLCBhbmQgYmVjYXVzZSBpdHMgYC90b2tlbmAgZW5kcG9pbnQgaXMgYWxzbyB0aGVcbiAgICogcmVnaXN0cnkgbG9naW4sIHRoZSBwdXNoZXMgZmFpbGVkIHRvbyDigJQgMTA3IG9mIDExNyBwbHVnaW5zIG5ldmVyIGNhbWUgdXAuXG4gICAqIFRoZSBlYXJsaWVyIGRlZmF1bHQgb2YgMSAodGhlbiBhIGdsb2JhbCBrbm9iKSBoYWQgcHJvZHVjZWQgOTUgb2YgMTE5LlxuICAgKlxuICAgKiBSYWlzZSBpdCBwZXIgZGVwbG95bWVudCB3aXRoIGBQTFVHSU5fQlVJTERfQ09OQ1VSUkVOQ1lfVU5MSU1JVEVEYCBvbmNlIHRoZVxuICAgKiByZWdpc3RyeSdzIG1lbW9yeSBhbmQgYSBzaWduaW5nIGJvdW5kIHNheSB0aGUgZmFuLWluIGlzIHNhZmUuXG4gICAqL1xuICB1bmxpbWl0ZWQ6IDEsXG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEFjY2Vzc29yc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogV2hhdCBPTkUgcmVwbGljYSBtYXkgcnVuIGF0IG9uY2UgaWYgZXZlcnkgdGllciBxdWV1ZSBpcyBidXN5OiB0aGUgU1VNIG9mIHRoZVxuICogbGFkZGVyLCBiZWNhdXNlIGEgcmVwbGljYSBzdGFydHMgb25lIEJ1bGxNUSBXb3JrZXIgcGVyIHRpZXIgYW5kIGVhY2ggY2Fycmllc1xuICogaXRzIG93biBjb25jdXJyZW5jeS5cbiAqXG4gKiBUaGlzIG51bWJlciB3YXMgbmV2ZXIgd3JpdHRlbiBkb3duLCBhbmQgdGhhdCBpcyB0aGUgcG9pbnQgb2Ygd3JpdGluZyBpdCBkb3duLlxuICogVGhlIGluY2lkZW50IGFyaXRobWV0aWMgZXZlcnlvbmUgcmVhc29uZWQgd2l0aCDigJQgXCI4IHJlcGxpY2FzIHggNCA9IDMyXCIg4oCUIGlzXG4gKiB0aGUgc2luZ2xlLXRpZXIgY2FzZSAoYSBjYXRhbG9ndWUgbG9hZCBpcyBhbGwgc3lzdGVtLW9yZykuIEEgbWl4ZWQgZmxlZXRcbiAqIHJlYWNoZXMgYHJlcGxpY2FzIHggdGhpc2AsIHdoaWNoIGlzIDEzIHBlciByZXBsaWNhIGFuZCAxMDQgYWNyb3NzIHRoZSBlaWdodCBhXG4gKiBwbHVnaW4gZGVwbG95bWVudCBzY2FsZXMgdG8uIFRoZSBsYWRkZXIncyByb3dzIHRoZXJlZm9yZSBzZXQgYSBmbGVldCBjZWlsaW5nXG4gKiB0aGF0IG5vdGhpbmcgZGVjbGFyZWQgYW5kIG5vYm9keSBjaG9zZS5cbiAqXG4gKiBgUExVR0lOX01BWF9CVUlMRFNfUEVSX1JFUExJQ0FgIGRlZmF1bHRzIHRvIHRoaXMsIHNvIHJhaXNpbmcgYSB0aWVyIHJvdyBjYW5ub3RcbiAqIHNpbGVudGx5IHJhaXNlIHdoYXQgb25lIHJlcGxpY2EgcHV0cyBvbiBpdHMgc2luZ2xlIGJ1aWxka2l0ZCBzaWRlY2FyIOKAlCBpdFxuICogYmluZHMgYXQgdGhpcyBmaWd1cmUgYW5kIHRoZSB3b3JrZXIgc2F5cyBzbyBvbiBzdGFydC5cbiAqL1xuZXhwb3J0IGNvbnN0IEJVSUxEX0xBRERFUl9DT05DVVJSRU5DWV9TVU06IG51bWJlciA9XG4gIEJVSUxEX1RJRVJfTEFEREVSLnJlZHVjZSgobiwgdGllcikgPT4gbiArIEJVSUxEX1RJRVJfQ09OQ1VSUkVOQ1lbdGllcl0sIDApO1xuXG4vKipcbiAqIFRoaXMgdGllcidzIGRlZmF1bHQgd29ya2VyIGNvbmN1cnJlbmN5LiBGYWxscyBiYWNrIHRvIHRoZSBgZGV2ZWxvcGVyYCByb3cgZm9yXG4gKiBhbiB1bnJlY29nbmlzZWQgdGllciwgbWF0Y2hpbmcgYGJ1aWxkU2xvdHNGb3JgIOKAlCBhIGJhZCB0aWVyIHN0cmluZyBtdXN0IG5vdFxuICogaGFuZCBvdXQgdGhlIG1vc3QgZ2VuZXJvdXMgZmlndXJlIGluIHRoZSB0YWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkV29ya2VyQ29uY3VycmVuY3lGb3IodGllcjogUXVvdGFUaWVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIEJVSUxEX1RJRVJfQ09OQ1VSUkVOQ1lbdGllcl0gPz8gQlVJTERfVElFUl9DT05DVVJSRU5DWS5kZXZlbG9wZXI7XG59XG5cbi8qKlxuICogVGhlIGVudiB2YXIgdGhhdCBvdmVycmlkZXMge0BsaW5rIGJ1aWxkV29ya2VyQ29uY3VycmVuY3lGb3J9IGZvciBvbmUgdGllci5cbiAqXG4gKiBEZXJpdmVkIHJhdGhlciB0aGFuIHdyaXR0ZW4gb3V0IHNpeCB0aW1lczogdGhlIHBlci10aWVyIHJlYWRzIHVzZWQgdG8gYmUgc2l4XG4gKiBuZWFyLWlkZW50aWNhbCBgZW52SW50YCBsaW5lcywgd2hlcmUgYSB3cm9uZyBjcm9zcy1yZWZlcmVuY2VcbiAqIChgcHJvOiBlbnZJbnQoJ+KApl9QUk8nLCB0aWVyRGVmYXVsdC50ZWFtKWApIHNpbGVudGx5IHRha2VzIGFub3RoZXIgdGllcidzXG4gKiBkZWZhdWx0IGFuZCBubyB0eXBlIGNhbiBjYXRjaCBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ29uY3VycmVuY3lFbnZWYXIodGllcjogUXVvdGFUaWVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBQTFVHSU5fQlVJTERfQ09OQ1VSUkVOQ1lfJHt0aWVyLnRvVXBwZXJDYXNlKCl9YDtcbn1cblxuLyoqIFRoaXMgc2l6ZSdzIGNyZWRpdC92Q1BVIG11bHRpcGxpZXI7IGAxYCBmb3IgYW55dGhpbmcgdW5yZWNvZ25pc2VkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2l6ZU11bHRpcGxpZXIoc2l6ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIEJVSUxEX1NJWkVfQ0FUQUxPR1tzaXplIGFzIEJ1aWxkU2l6ZV0/Lm11bHRpcGxpZXIgPz8gMTtcbn1cblxuLyoqIGBTbWFsbGAg4oCmIGBYLUxhcmdlYDsgdGhlIHJhdyBpZCBmb3IgYW55dGhpbmcgdW5yZWNvZ25pc2VkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2l6ZUxhYmVsKHNpemU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBCVUlMRF9TSVpFX0NBVEFMT0dbc2l6ZSBhcyBCdWlsZFNpemVdPy5sYWJlbCA/PyBzaXplO1xufVxuXG4vKiogYFN0YW5kYXJkYCAvIGBGbGV4aWJsZWA7IHRoZSByYXcgaWQgZm9yIGFueXRoaW5nIHVucmVjb2duaXNlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENsYXNzTGFiZWwoYnVpbGRDbGFzczogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIEJVSUxEX0NMQVNTX0NBVEFMT0dbYnVpbGRDbGFzcyBhcyBCdWlsZENsYXNzXT8ubGFiZWwgPz8gYnVpbGRDbGFzcztcbn1cblxuLyoqXG4gKiBFbnYtdmFyIHN1ZmZpeCBvZiB0aGlzIHNpemUncyBidWlsZGtpdGQgcG9vbCBvdmVycmlkZS5cbiAqXG4gKiBEZWNsYXJlZCBpbiB0aGUgY2F0YWxvZyByYXRoZXIgdGhhbiBkZXJpdmVkLCBiZWNhdXNlIGRlcml2aW5nIGl0IHByb2R1Y2VzXG4gKiBJTExFR0FMIE5BTUVTOiBgJzAuNXgnLnRvVXBwZXJDYXNlKClgIGlzIGAwLjVYYCwgYW5kIGEgZG90IGNhbm5vdCBhcHBlYXIgaW4gYW5cbiAqIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWUuIChJdCBpcyB0aGUgc2FtZSByZWFzb24gYHgtbGFyZ2VgIHdhcyByZWplY3RlZCBhcyBhblxuICogaWQg4oCUIGAuLi5fWC1MQVJHRWAgaXMgbm90IGFuIGlkZW50aWZpZXIgZWl0aGVyLikgRmFsbHMgYmFjayB0byBgMVhgLCB0aGVcbiAqIHNoYXJlZCBkYWVtb24sIGZvciBhbiB1bnJlY29nbmlzZWQgc2l6ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2l6ZUVudlN1ZmZpeChzaXplOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gQlVJTERfU0laRV9DQVRBTE9HW3NpemUgYXMgQnVpbGRTaXplXT8uZW52U3VmZml4ID8/ICcxWCc7XG59XG5cbi8qKiBUaGUgY2xhc3MgdGhpcyBzaXplIHJ1bnMgaW4gdW5sZXNzIHRoZSBjYWxsZXIgb3ZlcnJpZGVzIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRDbGFzc0ZvclNpemUoc2l6ZTogc3RyaW5nKTogQnVpbGRDbGFzcyB7XG4gIHJldHVybiBCVUlMRF9TSVpFX0NBVEFMT0dbc2l6ZSBhcyBCdWlsZFNpemVdPy5kZWZhdWx0Q2xhc3MgPz8gJ3N0YW5kYXJkJztcbn1cblxuLyoqXG4gKiBIb3cgbXVjaCBsb25nZXIgYSBidWlsZCBhdCB0aGlzIHNpemUgbWF5IHJ1biBiZWZvcmUgdGhlIHRpbWVvdXQga2lsbHMgaXQuXG4gKlxuICogU2NhbGVzIFVQIGJlbG93IGAxeGAgYW5kIG5ldmVyIGRvd24gYWJvdmUgaXQsIGFuZCB0aGUgYXN5bW1ldHJ5IGlzIHRoZSBwb2ludDpcbiAqIHRoZSB0aW1lb3V0IGlzIGEgU0FGRVRZIGJvdW5kIG9uIGEgcnVuYXdheSBidWlsZCwgbm90IGEgYnVkZ2V0LiBBdCBoYWxmIHRoZVxuICogdkNQVSBhIHRlbi1taW51dGUgYnVpbGQgYmVjb21lcyBhYm91dCB0d2VudHkgYW5kIHdvdWxkIGRpZSBvbiBhIDE1LW1pbnV0ZVxuICogYm91bmQg4oCUIHNvIFNtYWxsIHdvdWxkIHF1aWV0bHkgZmFpbCBsb25nIGJ1aWxkcyAoYXMgYSBgcmV0cnlhYmxlYCBmYWlsdXJlLCBzb1xuICogdGhlIHRlbmFudCBpcyBub3QgY2hhcmdlZCwgYnV0IGl0IGlzIHJldHJpZWQgdHdpY2UgYW5kIGRlYWQtbGV0dGVyZWQpLiBTY2FsaW5nXG4gKiBpdCBET1dOIGF0IGA0eGAgd291bGQgaW5zdGVhZCBicmVhayBJL08tYm91bmQgYnVpbGRzIHRoYXQgZ2FpbiBub3RoaW5nIGZyb21cbiAqIHRoZSBleHRyYSBDUFUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRpbWVvdXRGYWN0b3Ioc2l6ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWF4KDEsIDEgLyBidWlsZFNpemVNdWx0aXBsaWVyKHNpemUpKTtcbn1cblxuLyoqIEluLWZsaWdodCBidWlsZHMgb25lIG9yZyBvbiBgdGllcmAgbWF5IGhvbGQgaW4gYGJ1aWxkQ2xhc3NgICh0aGUgZGVmYXVsdCkuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTbG90c0Zvcih0aWVyOiBRdW90YVRpZXIsIGJ1aWxkQ2xhc3M6IEJ1aWxkQ2xhc3MpOiBudW1iZXIge1xuICBjb25zdCBtZXRhID0gQlVJTERfQ0xBU1NfQ0FUQUxPR1tidWlsZENsYXNzXSA/PyBCVUlMRF9DTEFTU19DQVRBTE9HLnN0YW5kYXJkO1xuICByZXR1cm4gbWV0YS5zbG90c0J5VGllclt0aWVyXSA/PyBtZXRhLnNsb3RzQnlUaWVyLmRldmVsb3Blcjtcbn1cblxuLyoqIEJvdGggY2xhc3Nlcycgc2xvdCBjb3VudHMgZm9yIG9uZSB0aWVyIOKAlCB0aGUgcGVyLXRpZXIgcmVhZGluZyB0aGUgVUkgd2FudHMuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTbG90c0J5Q2xhc3ModGllcjogUXVvdGFUaWVyKTogUmVhZG9ubHk8UmVjb3JkPEJ1aWxkQ2xhc3MsIG51bWJlcj4+IHtcbiAgcmV0dXJuIHtcbiAgICBzdGFuZGFyZDogYnVpbGRTbG90c0Zvcih0aWVyLCAnc3RhbmRhcmQnKSxcbiAgICBmbGV4aWJsZTogYnVpbGRTbG90c0Zvcih0aWVyLCAnZmxleGlibGUnKSxcbiAgfTtcbn1cblxuLyoqIFdoZXRoZXIgYHRpZXJgIG1heSByZXF1ZXN0IGBzaXplYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aWVyQWxsb3dzQnVpbGRTaXplKHRpZXI6IFF1b3RhVGllciwgc2l6ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG1ldGEgPSBCVUlMRF9TSVpFX0NBVEFMT0dbc2l6ZSBhcyBCdWlsZFNpemVdO1xuICBpZiAoIW1ldGEpIHJldHVybiBmYWxzZTtcbiAgaWYgKG1ldGEubWluVGllciA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGhhdmUgPSBCVUlMRF9USUVSX0xBRERFUi5pbmRleE9mKHRpZXIpO1xuICAvLyBBbiB1bnJlY29nbmlzZWQgdGllciBnZXRzIHRoZSBGTE9PUiBvZiB0aGUgbGFkZGVyIOKAlCB0aGUgc21hbGxlc3QgYWxsb3dhbmNlLFxuICAvLyBuZXZlciBldmVyeXRoaW5nLiBTYW1lIGNvbnNlcnZhdGl2ZSBjYWxsIGB0aWVyRm9yUXVldWVOYW1lYCBtYWtlcy5cbiAgaWYgKGhhdmUgPCAwKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBoYXZlID49IEJVSUxEX1RJRVJfTEFEREVSLmluZGV4T2YobWV0YS5taW5UaWVyKTtcbn1cblxuLyoqIEV2ZXJ5IHNpemUgYHRpZXJgIG1heSByZXF1ZXN0LCBhc2NlbmRpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTaXplc0ZvclRpZXIodGllcjogUXVvdGFUaWVyKTogcmVhZG9ubHkgQnVpbGRTaXplW10ge1xuICByZXR1cm4gQlVJTERfU0laRVMuZmlsdGVyKChzKSA9PiB0aWVyQWxsb3dzQnVpbGRTaXplKHRpZXIsIHMpKTtcbn1cbiJdfQ==
|
|
@@ -16,4 +16,4 @@ export const LIFECYCLE_STAGES = ['experimental', 'production', 'deprecated'];
|
|
|
16
16
|
export const CRITICALITY_LEVELS = ['low', 'medium', 'high', 'critical'];
|
|
17
17
|
/** Whether an owner reference points at an individual user or a team/org. */
|
|
18
18
|
export const OWNER_TYPES = ['user', 'team'];
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy1tZXRhZGF0YS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2NhdGFsb2ctbWV0YWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7O0dBU0c7QUFFSCwyQ0FBMkM7QUFDM0MsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxjQUFjLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBVSxDQUFDO0FBR3RGLCtFQUErRTtBQUMvRSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBR2pGLDZFQUE2RTtBQUM3RSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBEZXZlbG9wZXItcG9ydGFsIGNhdGFsb2cgbWV0YWRhdGEgc2hhcmVkIGFjcm9zcyBjYXRhbG9nIGVudGl0aWVzXG4gKiAocGlwZWxpbmVzIGFuZCBwbHVnaW5zIHRvZGF5OyBhbnkgZnV0dXJlIGNhdGFsb2dhYmxlIGVudGl0eSBuZXh0KS5cbiAqXG4gKiBUaGVzZSBhcmUgdGhlIG93bmVyc2hpcC9saWZlY3ljbGUvY2xhc3NpZmljYXRpb24gZmllbGRzIGFuIGludGVybmFsXG4gKiBkZXZlbG9wZXIgcG9ydGFsIGtleXMgaXRzIGNhdGFsb2csIFwibXkgc2VydmljZXNcIiB2aWV3cywgYW5kIHNjb3JlY2FyZHNcbiAqIG9mZiBvZiDigJQgdGhlIGNvdW50ZXJwYXJ0IHRvIEJhY2tzdGFnZSdzIGBtZXRhZGF0YWAvYHNwZWMub3duZXJgL1xuICogYHNwZWMubGlmZWN5Y2xlYC4gS2VwdCBoZXJlIChub3QgcGVyLXNjaGVtYSkgc28gdGhlIERCIHNjaGVtYSwgdGhlIFpvZFxuICogdmFsaWRhdGlvbiwgYW5kIHRoZSBBUEkgYWxsIGRyYXcgZnJvbSBvbmUgc291cmNlIG9mIHRydXRoLlxuICovXG5cbi8qKiBMaWZlY3ljbGUgc3RhZ2Ugb2YgYSBjYXRhbG9nIGVudGl0eS4gKi9cbmV4cG9ydCBjb25zdCBMSUZFQ1lDTEVfU1RBR0VTID0gWydleHBlcmltZW50YWwnLCAncHJvZHVjdGlvbicsICdkZXByZWNhdGVkJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBMaWZlY3ljbGUgPSAodHlwZW9mIExJRkVDWUNMRV9TVEFHRVMpW251bWJlcl07XG5cbi8qKiBPcGVyYXRpb25hbCBjcml0aWNhbGl0eSBvZiBhIGNhdGFsb2cgZW50aXR5IChvcHRpb25hbC91bnNldCBieSBkZWZhdWx0KS4gKi9cbmV4cG9ydCBjb25zdCBDUklUSUNBTElUWV9MRVZFTFMgPSBbJ2xvdycsICdtZWRpdW0nLCAnaGlnaCcsICdjcml0aWNhbCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgQ3JpdGljYWxpdHkgPSAodHlwZW9mIENSSVRJQ0FMSVRZX0xFVkVMUylbbnVtYmVyXTtcblxuLyoqIFdoZXRoZXIgYW4gb3duZXIgcmVmZXJlbmNlIHBvaW50cyBhdCBhbiBpbmRpdmlkdWFsIHVzZXIgb3IgYSB0ZWFtL29yZy4gKi9cbmV4cG9ydCBjb25zdCBPV05FUl9UWVBFUyA9IFsndXNlcicsICd0ZWFtJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBPd25lclR5cGUgPSAodHlwZW9mIE9XTkVSX1RZUEVTKVtudW1iZXJdO1xuXG4vKiogQSB0aXRsZWQgZXh0ZXJuYWwgbGluayBhdHRhY2hlZCB0byBhIGNhdGFsb2cgZW50aXR5IChkb2NzLCBkYXNoYm9hcmQsIHJ1bmJvb2ssIOKApikuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUxpbmsge1xuICByZWFkb25seSB0aXRsZTogc3RyaW5nO1xuICByZWFkb25seSB1cmw6IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIGljb24gaGludCB0aGUgVUkgbWF5IG1hcCB0byBhIGdseXBoIChlLmcuICdkb2NzJywgJ2Rhc2hib2FyZCcpLiAqL1xuICByZWFkb25seSBpY29uPzogc3RyaW5nO1xufVxuXG4vKiogRnJlZS1mb3JtIHR5cGVkIGNsYXNzaWZpY2F0aW9uIGxhYmVsczogYHsgdGVhbTogJ3BheW1lbnRzJywgdGllcjogJ2dvbGQnIH1gLiAqL1xuZXhwb3J0IHR5cGUgRW50aXR5TGFiZWxzID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiJdfQ==
|