@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
|
@@ -263,4 +263,4 @@ export function createEnvRedisDurableEventBus(opts = {}) {
|
|
|
263
263
|
logger.info('Redis durable event bus initialized');
|
|
264
264
|
return createRedisDurableEventBus(inst, opts);
|
|
265
265
|
}
|
|
266
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYWJsZS1ldmVudC1idXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvZHVyYWJsZS1ldmVudC1idXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFFSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQW9GakQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDO0FBQzlCLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUN6QixNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQztBQUMvQixNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQztBQUNuQyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUVsQyxTQUFTLFNBQVMsQ0FBQyxLQUFhO0lBQzlCLE9BQU8sT0FBTyxLQUFLLEVBQUUsQ0FBQztBQUN4QixDQUFDO0FBRUQsc0NBQXNDO0FBQ3RDLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUFhO0lBQy9DLE9BQU8sT0FBTyxLQUFLLE1BQU0sQ0FBQztBQUM1QixDQUFDO0FBRUQsbUZBQW1GO0FBQ25GLFNBQVMsaUJBQWlCLENBQUMsRUFBVTtJQUNuQyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFB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QUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFFckYsT0FBTztnQkFDTCxLQUFLLENBQUMsSUFBSTtvQkFDUixPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUNmLHdFQUF3RTtvQkFDeEUsd0VBQXdFO29CQUN4RSx5RUFBeUU7b0JBQ3pFLE1BQU0sV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDekMsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNoRSxDQUFDO2FBQ0YsQ0FBQztRQUNKLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUFDLElBQUksR0FBd0IsRUFBRTtJQUMxRSxNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBb0IsV0FBVyxDQUFDLENBQUM7SUFDbEUsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDbkQsT0FBTywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIER1cmFibGUsIGF0LWxlYXN0LW9uY2UgZXZlbnQgYmFja2JvbmUgKFJlZGlzIFN0cmVhbXMpLlxuICpcbiAqIFRoZSBwbGF0Zm9ybSdzIGNyb3NzLXNlcnZpY2Ugc2lnbmFsbGluZyB0b2RheSBpcyBwb2ludC10by1wb2ludCBIVFRQIHBsdXNcbiAqIHBvbGxpbmcgcmVjb25jaWxlcnMgcGx1cyBhbiBJTi1QUk9DRVNTIGJlc3QtZWZmb3J0IGVtaXR0ZXIgKHtAbGluayBlbnRpdHlFdmVudHN9KS5cbiAqIFRoZXJlIGlzIG5vIGR1cmFibGUgYnVzLCBzbyBhIHNpZ25hbCBwcm9kdWNlZCBvbiBvbmUgcG9kIGlzIGVpdGhlciBkZWxpdmVyZWRcbiAqIHN5bmNocm9ub3VzbHkgb3ZlciBIVFRQIChjb3VwbGluZyArIHJldHJ5LXN0b3JtIHJpc2spIG9yIGxvc3QgaWYgdGhlIGNvbnN1bWVyXG4gKiBpcyBtb21lbnRhcmlseSBkb3duICh0aGUgcmVjb25jaWxlcnMgZXhpc3QgdG8gcGFwZXIgb3ZlciBleGFjdGx5IHRoYXQpLlxuICpcbiAqIFRoaXMgaXMgdGhhdCBtaXNzaW5nIGJ1cywgYXMgYSByZXVzYWJsZSBwcmltaXRpdmU6XG4gKiAgLSAqKnB1Ymxpc2godG9waWMsIHBheWxvYWQpKiog4oaSIGBYQUREYCBvbnRvIGEgYm91bmRlZCAoYE1BWExFTiB+YCkgcGVyLXRvcGljXG4gKiAgICBzdHJlYW0uIER1cmFibGUgYWNyb3NzIHJlc3RhcnRzLCBzaGFyZWQgYnkgYWxsIHJlcGxpY2FzLlxuICogIC0gKipzdWJzY3JpYmUoe3RvcGljLCBncm91cCwgY29uc3VtZXIsIGhhbmRsZXJ9KSoqIOKGkiBhIGBYUkVBREdST1VQYCBjb25zdW1lclxuICogICAgb24gaXRzIE9XTiBjb25uZWN0aW9uIChgZHVwbGljYXRlKClgKSwgc28gYSBibG9ja2luZyByZWFkIG5ldmVyIGRlbGF5cyBhXG4gKiAgICBwdWJsaXNoLiBDb25zdW1lciBHUk9VUFMgZ2l2ZSBhdC1sZWFzdC1vbmNlOiBlYWNoIGdyb3VwIGdldHMgZXZlcnkgbWVzc2FnZVxuICogICAgb25jZSwgYSBtZXNzYWdlIHN0YXlzIHBlbmRpbmcgdW50aWwgdGhlIGhhbmRsZXIgYFhBQ0tgcyBpdCwgYW5kIGBYQVVUT0NMQUlNYFxuICogICAgcmVjbGFpbXMgbWVzc2FnZXMgc3RyYW5kZWQgYnkgYSBjcmFzaGVkIGNvbnN1bWVyLiBBIG1lc3NhZ2UgdGhhdCBoYXMgYmVlblxuICogICAgZGVsaXZlcmVkIGBtYXhEZWxpdmVyaWVzYCB0aW1lcyB3aXRob3V0IGFuIGFjayBpcyBtb3ZlZCB0byBhIGRlYWQtbGV0dGVyXG4gKiAgICBzdHJlYW0gKGBldnQ6PHRvcGljPjpkbHFgKSBhbmQgYWNrZWQsIHNvIGEgcG9pc29uIG1lc3NhZ2UgY2FuJ3QgcmVkZWxpdmVyXG4gKiAgICBmb3JldmVyLiBNdWx0aXBsZSBncm91cHMgb24gb25lIHRvcGljID0gaW5kZXBlbmRlbnQgZmFuLW91dC5cbiAqXG4gKiBGQUlMLVNBRkUgKyBPUFQtSU4sIGV4YWN0bHkgbGlrZSB0aGUgYXVkaXQgc3Bvb2w6IHtAbGluayBjcmVhdGVFbnZSZWRpc0R1cmFibGVFdmVudEJ1c31cbiAqIHJldHVybnMgYG51bGxgIHdoZW4gUmVkaXMgaXNuJ3QgY29uZmlndXJlZCwgc28gYSBzZXJ2aWNlIHdpdGhvdXQgaXQgc2ltcGx5XG4gKiBkb2Vzbid0IHVzZSB0aGUgYnVzIChrZWVwcyB0b2RheSdzIGJlaGF2aW9yKS4gQSBwdWJsaXNoIGZhaWx1cmUgaXMgZHJvcHBlZC13aXRoLVxuICogLW1ldHJpYywgbmV2ZXIgdGhyb3duOyBhIGhhbmRsZXIgdGhyb3cgbGVhdmVzIHRoZSBtZXNzYWdlIHVuLWFja2VkIGZvciByZWRlbGl2ZXJ5LlxuICpcbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVFbnZSZWRpc0NsaWVudCB9IGZyb20gJy4vZW52LXJlZGlzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbWl0Q291bnRlciB9IGZyb20gJy4uL3V0aWxzL21ldHJpYy1lbWl0dGVyLmpzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdkdXJhYmxlLWV2ZW50LWJ1cycpO1xuXG4vKiogQSBkZWxpdmVyZWQgZXZlbnQ6IGl0cyBzdHJlYW0gaWQsIHRvcGljLCBwdWJsaXNoIHRpbWUsIGFuZCBkZWNvZGVkIHBheWxvYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50RW52ZWxvcGU8VCA9IHVua25vd24+IHtcbiAgLyoqIFJlZGlzIFN0cmVhbSBlbnRyeSBpZCAoYDxtcz4tPHNlcT5gKSDigJQgYWxzbyB0aGUgaWRlbXBvdGVuY3kgaGFuZGxlLiAqL1xuICBpZDogc3RyaW5nO1xuICB0b3BpYzogc3RyaW5nO1xuICAvKipcbiAgICogV2hlbiB0aGUgZXZlbnQgd2FzIHB1Ymxpc2hlZCAodGhlIFJlZGlzIHNlcnZlciB0aW1lIGVtYmVkZGVkIGluIHRoZSBzdHJlYW1cbiAgICogaWQpLiBBIHJlZGVsaXZlcnkga2VlcHMgaXRzIE9SSUdJTkFMIHB1Ymxpc2ggdGltZSwgc28gYSBjb25zdW1lciBhcHBseWluZ1xuICAgKiBsYXN0LXdyaXRlci13aW5zIHN0YXRlIChlLmcuIGFuIGVudGl0bGVtZW50IHN5bmMpIGNhbiBvcmRlciBldmVudHMgYnkgaXRcbiAgICogaW5zdGVhZCBvZiBieSBkZWxpdmVyeSB0aW1lIGFuZCByZWZ1c2UgdG8gbGV0IGEgc3RhbGUgcmV0cnkgb3ZlcndyaXRlIGFcbiAgICogbmV3ZXIgc3RhdGUuXG4gICAqL1xuICBwdWJsaXNoZWRBdDogRGF0ZTtcbiAgcGF5bG9hZDogVDtcbn1cblxuLyoqXG4gKiBBIHBhcnNlZCBzdHJlYW0gZW50cnksIHdoaWNoIG1heSBoYXZlIE5PIHVzYWJsZSBwYXlsb2FkLlxuICpcbiAqIFNlcGFyYXRlIGZyb20ge0BsaW5rIEV2ZW50RW52ZWxvcGV9IGJlY2F1c2UgdGhlIHR3byBhcmUgZ2VudWluZWx5IGRpZmZlcmVudCB0aGluZ3MgYW5kXG4gKiBjb25mbGF0aW5nIHRoZW0gY29zdCB0aHJlZSBgdW5kZWZpbmVkIGFzIHVua25vd24gYXMgVGAgY2FzdHM6IGFuIGVudHJ5IHdpdGggbm8gYGRgIGZpZWxkXG4gKiBvciB3aXRoIHVucGFyc2VhYmxlIEpTT04gaXMgYSBwb2lzb24gbWVzc2FnZSwgYW5kIGl0IGhhcyB0byB0cmF2ZWwgZmFyIGVub3VnaCBmb3JcbiAqIGBkZWxpdmVyKClgIHRvIEFDSyBpdCAobGVhdmluZyBpdCBwZW5kaW5nIHdvdWxkIHdlZGdlIHRoZSBncm91cCBmb3JldmVyKS4gRGVjbGFyaW5nIHRoYXRcbiAqIHBvc3NpYmlsaXR5IGhlcmUgbWVhbnMgdGhlIEFDSy13aXRob3V0LWhhbmRsaW5nIHBhdGggaXMgYSB0eXBlIE5BUlJPV0lORyByYXRoZXIgdGhhbiBhXG4gKiBydW50aW1lIGNvbnZlbnRpb24gdGhlIHR5cGUgc3lzdGVtIHdhcyBsaWVkIHRvIGFib3V0IOKAlCBhIGhhbmRsZXIgc3RpbGwgb25seSBldmVyIHNlZXNcbiAqIGBwYXlsb2FkOiBUYC5cbiAqL1xudHlwZSBQYXJzZWRFbnZlbG9wZTxUPiA9IE9taXQ8RXZlbnRFbnZlbG9wZTxUPiwgJ3BheWxvYWQnPiAmIHsgcGF5bG9hZDogVCB8IHVuZGVmaW5lZCB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIFN1YnNjcmliZU9wdGlvbnM8VCA9IHVua25vd24+IHtcbiAgLyoqIFRvcGljIChzdHJlYW0pIHRvIGNvbnN1bWUuICovXG4gIHRvcGljOiBzdHJpbmc7XG4gIC8qKiBDb25zdW1lciBncm91cCDigJQgb25lIGRlbGl2ZXJ5IHBlciBncm91cDsgZGlzdGluY3QgZ3JvdXBzIGZhbiBvdXQuICovXG4gIGdyb3VwOiBzdHJpbmc7XG4gIC8qKiBUaGlzIGNvbnN1bWVyJ3MgaWQgd2l0aGluIHRoZSBncm91cCAoZS5nLiBgJHtzZXJ2aWNlfS0ke3BpZH1gKS4gKi9cbiAgY29uc3VtZXI6IHN0cmluZztcbiAgLyoqIEFzeW5jIGhhbmRsZXIuIFJlc29sdmVzIOKHkiB0aGUgbWVzc2FnZSBpcyBhY2tlZDsgdGhyb3dzIOKHkiBsZWZ0IHBlbmRpbmcgZm9yIHJlZGVsaXZlcnkuICovXG4gIGhhbmRsZXI6IChlbnY6IEV2ZW50RW52ZWxvcGU8VD4pID0+IFByb21pc2U8dm9pZD47XG4gIC8qKiBNYXggbWVzc2FnZXMgcGVyIHJlYWQgKGRlZmF1bHQgMTYpLiAqL1xuICBiYXRjaFNpemU/OiBudW1iZXI7XG4gIC8qKiBYUkVBREdST1VQIGJsb2NrIHRpbWUgaW4gbXMgKGRlZmF1bHQgNTAwMCkuICovXG4gIGJsb2NrTXM/OiBudW1iZXI7XG4gIC8qKiBBIHBlbmRpbmcgbWVzc2FnZSBpZGxlIHRoaXMgbG9uZyAobXMpIGlzIHJlY2xhaW1lZCBmcm9tIGEgZGVhZCBjb25zdW1lciAoZGVmYXVsdCA2MDAwMCkuICovXG4gIG1pbklkbGVNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIERlbGl2ZXJpZXMgYWZ0ZXIgd2hpY2ggYW4gdW4tYWNrZWQgbWVzc2FnZSBpcyBkZWFkLWxldHRlcmVkIHRvXG4gICAqIGBldnQ6PHRvcGljPjpkbHFgIGFuZCBhY2tlZCBpbnN0ZWFkIG9mIGJlaW5nIHJlZGVsaXZlcmVkIGFnYWluIChkZWZhdWx0IDEwKS5cbiAgICovXG4gIG1heERlbGl2ZXJpZXM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRTdWJzY3JpcHRpb24ge1xuICAvKiogU3RvcCB0aGUgY29uc3VtZXIgbG9vcC4gUmVzb2x2ZXMgb25jZSB0aGUgaW4tZmxpZ2h0IHJlYWQgcmV0dXJucy4gKi9cbiAgc3RvcCgpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER1cmFibGVFdmVudEJ1cyB7XG4gIC8qKiBQdWJsaXNoIGEgcGF5bG9hZCB0byBhIHRvcGljLiBSZXR1cm5zIHRoZSBzdHJlYW0gaWQsIG9yIG51bGwgb24gZmFpbHVyZSAoZHJvcHBlZCwgbmV2ZXIgdGhyb3dzKS4gKi9cbiAgcHVibGlzaDxUPih0b3BpYzogc3RyaW5nLCBwYXlsb2FkOiBUKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPjtcbiAgLyoqIFN0YXJ0IGEgY29uc3VtZXItZ3JvdXAgcmVhZGVyIGZvciBhIHRvcGljLiBGaXJlLWFuZC1mb3JnZXQgbG9vcDsgY2FsbCBgc3RvcCgpYCB0byBlbmQgaXQuICovXG4gIHN1YnNjcmliZTxUPihvcHRzOiBTdWJzY3JpYmVPcHRpb25zPFQ+KTogRXZlbnRTdWJzY3JpcHRpb247XG59XG5cbi8qKlxuICogVGhlIHN1YnNldCBvZiBpb3JlZGlzJyBTdHJlYW0gQVBJIHRoZSBidXMgdXNlcy4gS2VwdCBtaW5pbWFsIHNvIGEgdGVzdCBjYW5cbiAqIHN1cHBseSBhbiBpbi1tZW1vcnkgZmFrZSBhbmQgc28gbWVyZWx5IGltcG9ydGluZyB0aGlzIG5ldmVyIGhhcmQtZGVwZW5kcyBvblxuICogaW9yZWRpcyAoY29uc3RydWN0ZWQgdmlhIHRoZSBzaGFyZWQgZW52IGhlbHBlcikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVkaXNTdHJlYW1DbGllbnQge1xuICB4YWRkKGtleTogc3RyaW5nLCAuLi5hcmdzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPjtcbiAgeGdyb3VwKC4uLmFyZ3M6IChzdHJpbmcgfCBudW1iZXIpW10pOiBQcm9taXNlPHVua25vd24+O1xuICB4cmVhZGdyb3VwKC4uLmFyZ3M6IChzdHJpbmcgfCBudW1iZXIpW10pOiBQcm9taXNlPHVua25vd24+O1xuICB4YWNrKGtleTogc3RyaW5nLCBncm91cDogc3RyaW5nLCAuLi5pZHM6IHN0cmluZ1tdKTogUHJvbWlzZTxudW1iZXI+O1xuICB4YXV0b2NsYWltKC4uLmFyZ3M6IChzdHJpbmcgfCBudW1iZXIpW10pOiBQcm9taXNlPHVua25vd24+O1xuICB4cGVuZGluZyhrZXk6IHN0cmluZywgZ3JvdXA6IHN0cmluZywgLi4uYXJnczogKHN0cmluZyB8IG51bWJlcilbXSk6IFByb21pc2U8dW5rbm93bj47XG4gIHhyYW5nZShrZXk6IHN0cmluZywgc3RhcnQ6IHN0cmluZywgZW5kOiBzdHJpbmcsIC4uLmFyZ3M6IChzdHJpbmcgfCBudW1iZXIpW10pOiBQcm9taXNlPHVua25vd24+O1xuICAvKiogQSBuZXcgY29ubmVjdGlvbiB3aXRoIHRoZSBzYW1lIG9wdGlvbnMg4oCUIGVhY2ggc3Vic2NyaWJlciByZWFkcyBvbiBpdHMgb3duLiAqL1xuICBkdXBsaWNhdGUoKTogUmVkaXNTdHJlYW1DbGllbnQ7XG4gIHF1aXQ/KCk6IFByb21pc2U8dW5rbm93bj47XG4gIG9uPyhldmVudDogJ2Vycm9yJywgY2I6IChlcnI6IHVua25vd24pID0+IHZvaWQpOiB1bmtub3duO1xufVxuXG5jb25zdCBERUZBVUxUX01BWExFTiA9IDEwXzAwMDtcbmNvbnN0IERFRkFVTFRfQkFUQ0ggPSAxNjtcbmNvbnN0IERFRkFVTFRfQkxPQ0tfTVMgPSA1XzAwMDtcbmNvbnN0IERFRkFVTFRfTUlOX0lETEVfTVMgPSA2MF8wMDA7XG5jb25zdCBERUZBVUxUX01BWF9ERUxJVkVSSUVTID0gMTA7XG5cbmZ1bmN0aW9uIHN0cmVhbUtleSh0b3BpYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBldnQ6JHt0b3BpY31gO1xufVxuXG4vKiogRGVhZC1sZXR0ZXIgc3RyZWFtIGZvciBhIHRvcGljLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlYWRMZXR0ZXJTdHJlYW1LZXkodG9waWM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgZXZ0OiR7dG9waWN9OmRscWA7XG59XG5cbi8qKiBQdWJsaXNoIHRpbWUgZnJvbSBhIHN0cmVhbSBpZCAoYDxtcz4tPHNlcT5gKTsgZXBvY2ggMCBmb3IgYW4gdW5wYXJzZWFibGUgaWQuICovXG5mdW5jdGlvbiBwdWJsaXNoZWRBdEZyb21JZChpZDogc3RyaW5nKTogRGF0ZSB7XG4gIGNvbnN0IG1zID0gTnVtYmVyKGlkLnNwbGl0KCctJylbMF0pO1xuICByZXR1cm4gbmV3IERhdGUoTnVtYmVyLmlzRmluaXRlKG1zKSA/IG1zIDogMCk7XG59XG5cbi8qKiBUcnVlIHdoZW4gdGhlIGVycm9yIGlzIFJlZGlzJyBcImdyb3VwIGFscmVhZHkgZXhpc3RzXCIgKGlkZW1wb3RlbnQgY3JlYXRlKS4gKi9cbmZ1bmN0aW9uIGlzQnVzeUdyb3VwKGVycjogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gZXJyb3JNZXNzYWdlKGVycikuaW5jbHVkZXMoJ0JVU1lHUk9VUCcpO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBuZXN0ZWQgYXJyYXkgc2hhcGUgWFJFQURHUk9VUCAvIFhBVVRPQ0xBSU0gcmV0dXJuIGludG8gZmxhdCBlbnZlbG9wZXMuXG4gKiBYUkVBREdST1VQOiBgW1tzdHJlYW1LZXksIFtbaWQsIFtmLCB2LCAuLi5dXSwgLi4uXV1dYC5cbiAqIFhBVVRPQ0xBSU06IGBbbmV4dEN1cnNvciwgW1tpZCwgW2YsIHYsIC4uLl1dLCAuLi5dLCBkZWxldGVkSWRzXWAuXG4gKiBXZSBzdG9yZSB0aGUgSlNPTiBwYXlsb2FkIHVuZGVyIGEgc2luZ2xlIGZpZWxkIGBkYC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VFbnRyaWVzPFQ+KHRvcGljOiBzdHJpbmcsIGVudHJpZXM6IHVua25vd24pOiBQYXJzZWRFbnZlbG9wZTxUPltdIHtcbiAgY29uc3Qgb3V0OiBQYXJzZWRFbnZlbG9wZTxUPltdID0gW107XG4gIGlmICghQXJyYXkuaXNBcnJheShlbnRyaWVzKSkgcmV0dXJuIG91dDtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGVudHJ5KSB8fCBlbnRyeS5sZW5ndGggPCAyKSBjb250aW51ZTtcbiAgICBjb25zdCBpZCA9IFN0cmluZyhlbnRyeVswXSk7XG4gICAgY29uc3QgZmllbGRzID0gZW50cnlbMV07XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGZpZWxkcykpIGNvbnRpbnVlO1xuICAgIC8vIGZpZWxkcyBpcyBbbmFtZSwgdmFsdWUsIG5hbWUsIHZhbHVlLCAuLi5dOyBmaW5kICdkJy5cbiAgICBsZXQgcmF3OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgKyAxIDwgZmllbGRzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBpZiAoU3RyaW5nKGZpZWxkc1tpXSkgPT09ICdkJykgeyByYXcgPSBTdHJpbmcoZmllbGRzW2kgKyAxXSk7IGJyZWFrOyB9XG4gICAgfVxuICAgIC8vIEEgbWlzc2luZyBgZGAgZmllbGQgKGFuIGVudHJ5IG5vdCB3cml0dGVuIGJ5IHB1Ymxpc2goKSkgT1IgYSBjb3JydXB0IEpTT05cbiAgICAvLyBwYXlsb2FkIGJvdGggeWllbGQgYW4gdW5kZWZpbmVkLXBheWxvYWQgZW52ZWxvcGUgc28gYGRlbGl2ZXIoKWAgQUNLcyBpdCDigJRcbiAgICAvLyBhIHBvaXNvbiBtZXNzYWdlIG11c3QgbmV2ZXIgd2VkZ2UgdGhlIGdyb3VwIGJ5IHN0YXlpbmcgcGVycGV0dWFsbHkgcGVuZGluZy5cbiAgICBjb25zdCBwdWJsaXNoZWRBdCA9IHB1Ymxpc2hlZEF0RnJvbUlkKGlkKTtcbiAgICBpZiAocmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG91dC5wdXNoKHsgaWQsIHRvcGljLCBwdWJsaXNoZWRBdCwgcGF5bG9hZDogdW5kZWZpbmVkIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBvdXQucHVzaCh7IGlkLCB0b3BpYywgcHVibGlzaGVkQXQsIHBheWxvYWQ6IEpTT04ucGFyc2UocmF3KSBhcyBUIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgb3V0LnB1c2goeyBpZCwgdG9waWMsIHB1Ymxpc2hlZEF0LCBwYXlsb2FkOiB1bmRlZmluZWQgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBCdWlsZCBhIGR1cmFibGUgZXZlbnQgYnVzIG92ZXIgYSBSZWRpcyBTdHJlYW1zIGNsaWVudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWRpc0R1cmFibGVFdmVudEJ1cyhcbiAgcmVkaXM6IFJlZGlzU3RyZWFtQ2xpZW50LFxuICBvcHRzOiB7IG1heExlbj86IG51bWJlciB9ID0ge30sXG4pOiBEdXJhYmxlRXZlbnRCdXMge1xuICBjb25zdCBtYXhMZW4gPSBNYXRoLm1heCgxLCBvcHRzLm1heExlbiA/PyBERUZBVUxUX01BWExFTik7XG5cbiAgcmV0dXJuIHtcbiAgICBhc3luYyBwdWJsaXNoPFQ+KHRvcGljOiBzdHJpbmcsIHBheWxvYWQ6IFQpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICAgIGNvbnN0IGtleSA9IHN0cmVhbUtleSh0b3BpYyk7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBNQVhMRU4gfiA8bj4gYm91bmRzIHRoZSBzdHJlYW0gYXBwcm94aW1hdGVseSAoY2hlYXApOyBgKmAgPSBzZXJ2ZXIgaWQuXG4gICAgICAgIGNvbnN0IGlkID0gYXdhaXQgcmVkaXMueGFkZChrZXksICdNQVhMRU4nLCAnficsIG1heExlbiwgJyonLCAnZCcsIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcbiAgICAgICAgZW1pdENvdW50ZXIoJ2V2ZW50X2J1c19wdWJsaXNoZWRfdG90YWwnLCB7IHRvcGljIH0pO1xuICAgICAgICByZXR1cm4gaWQ7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZW1pdENvdW50ZXIoJ2V2ZW50X2J1c19wdWJsaXNoX2ZhaWxlZF90b3RhbCcsIHsgdG9waWMgfSk7XG4gICAgICAgIGxvZ2dlci53YXJuKCdFdmVudCBidXMgcHVibGlzaCBmYWlsZWQgKGV2ZW50IGRyb3BwZWQpJywgeyB0b3BpYywgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH0pO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3Vic2NyaWJlPFQ+KHN1Yk9wdHM6IFN1YnNjcmliZU9wdGlvbnM8VD4pOiBFdmVudFN1YnNjcmlwdGlvbiB7XG4gICAgICBjb25zdCB7IHRvcGljLCBncm91cCwgY29uc3VtZXIsIGhhbmRsZXIgfSA9IHN1Yk9wdHM7XG4gICAgICBjb25zdCBrZXkgPSBzdHJlYW1LZXkodG9waWMpO1xuICAgICAgY29uc3QgZGxxS2V5ID0gZGVhZExldHRlclN0cmVhbUtleSh0b3BpYyk7XG4gICAgICBjb25zdCBiYXRjaCA9IE1hdGgubWF4KDEsIHN1Yk9wdHMuYmF0Y2hTaXplID8/IERFRkFVTFRfQkFUQ0gpO1xuICAgICAgY29uc3QgYmxvY2tNcyA9IE1hdGgubWF4KDAsIHN1Yk9wdHMuYmxvY2tNcyA/PyBERUZBVUxUX0JMT0NLX01TKTtcbiAgICAgIGNvbnN0IG1pbklkbGUgPSBNYXRoLm1heCgwLCBzdWJPcHRzLm1pbklkbGVNcyA/PyBERUZBVUxUX01JTl9JRExFX01TKTtcbiAgICAgIGNvbnN0IG1heERlbGl2ZXJpZXMgPSBNYXRoLm1heCgxLCBzdWJPcHRzLm1heERlbGl2ZXJpZXMgPz8gREVGQVVMVF9NQVhfREVMSVZFUklFUyk7XG5cbiAgICAgIC8vIGBYUkVBREdST1VQIEJMT0NLYCBob2xkcyBpdHMgY29ubmVjdGlvbiBmb3IgdXAgdG8gYGJsb2NrTXNgOyBvbiB0aGVcbiAgICAgIC8vIHNoYXJlZCBjbGllbnQgZXZlcnkgcHVibGlzaCBxdWV1ZWQgYmVoaW5kIGl0LiBSZWFkIG9uIGEgZGVkaWNhdGVkIG9uZS5cbiAgICAgIGNvbnN0IHJlYWRlciA9IHJlZGlzLmR1cGxpY2F0ZSgpO1xuICAgICAgLy8gQSBkdXBsaWNhdGVkIGlvcmVkaXMgY29ubmVjdGlvbiBkb2Vzbid0IGluaGVyaXQgbGlzdGVuZXJzOyB3aXRob3V0IG9uZSBhXG4gICAgICAvLyBjb25uZWN0aW9uIGVycm9yIGlzIGFuIHVuaGFuZGxlZCAnZXJyb3InIGV2ZW50IHRoYXQgY3Jhc2hlcyB0aGUgcHJvY2Vzcy5cbiAgICAgIHJlYWRlci5vbj8uKCdlcnJvcicsIChlcnIpID0+IGxvZ2dlci53YXJuKCdFdmVudCBidXMgcmVhZGVyIGNvbm5lY3Rpb24gZXJyb3InLCB7IHRvcGljLCBncm91cCwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH0pKTtcblxuICAgICAgbGV0IHN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgY29uc3QgZGVsaXZlciA9IGFzeW5jIChlbnZzOiBQYXJzZWRFbnZlbG9wZTxUPltdKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZW52IG9mIGVudnMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gVGhlIG5hcnJvd2luZyB0aGF0IHVzZWQgdG8gYmUgYSBjYXN0OiBpbnNpZGUgdGhpcyBicmFuY2ggYHBheWxvYWRgIGlzIGBUYCxcbiAgICAgICAgICAgIC8vIHNvIGBlbnZgIHJlYWxseSBpcyBhbiBFdmVudEVudmVsb3BlPFQ+IGFuZCB0aGUgaGFuZGxlcidzIHR5cGUgaXMgaG9uZXN0LlxuICAgICAgICAgICAgaWYgKGVudi5wYXlsb2FkICE9PSB1bmRlZmluZWQpIGF3YWl0IGhhbmRsZXIoZW52IGFzIEV2ZW50RW52ZWxvcGU8VD4pO1xuICAgICAgICAgICAgLy8gQWNrIG9uIHN1Y2Nlc3MgT1Igb24gYW4gdW5kZWZpbmVkIChjb3JydXB0KSBwYXlsb2FkIOKAlCBhIHBvaXNvblxuICAgICAgICAgICAgLy8gbWVzc2FnZSBtdXN0IG5vdCBibG9jayB0aGUgZ3JvdXAgZm9yZXZlci5cbiAgICAgICAgICAgIGF3YWl0IHJlYWRlci54YWNrKGtleSwgZ3JvdXAsIGVudi5pZCk7XG4gICAgICAgICAgICBlbWl0Q291bnRlcignZXZlbnRfYnVzX2RlbGl2ZXJlZF90b3RhbCcsIHsgdG9waWMsIGdyb3VwIH0pO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gTGVhdmUgaXQgcGVuZGluZyAobm8gWEFDSykg4oCUIFhBVVRPQ0xBSU0gcmVkZWxpdmVycyBpdCBhZnRlciBtaW5JZGxlLlxuICAgICAgICAgICAgZW1pdENvdW50ZXIoJ2V2ZW50X2J1c19oYW5kbGVyX2ZhaWxlZF90b3RhbCcsIHsgdG9waWMsIGdyb3VwIH0pO1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0V2ZW50IGhhbmRsZXIgZmFpbGVkOyBsZWF2aW5nIG1lc3NhZ2UgcGVuZGluZyBmb3IgcmVkZWxpdmVyeScsIHtcbiAgICAgICAgICAgICAgdG9waWMsIGdyb3VwLCBpZDogZW52LmlkLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVyciksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8qKlxuICAgICAgICogTW92ZSBldmVyeSBpZGxlIHBlbmRpbmcgbWVzc2FnZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZGVsaXZlcmVkXG4gICAgICAgKiBgbWF4RGVsaXZlcmllc2AgdGltZXMgdG8gdGhlIGRlYWQtbGV0dGVyIHN0cmVhbSBhbmQgYWNrIGl0LiBUaGUgZW50cnlcbiAgICAgICAqIGtlZXBzIGl0cyBwYXlsb2FkIHBsdXMgd2hlcmUgaXQgY2FtZSBmcm9tLCBzbyBhbiBvcGVyYXRvciBjYW4gaW5zcGVjdCBvclxuICAgICAgICogcmVwbGF5IGl0LiBJZiBjb3B5aW5nIGZhaWxzIHRoZSBtZXNzYWdlIGlzIGxlZnQgcGVuZGluZyAocmV0cmllZCBuZXh0XG4gICAgICAgKiBwYXNzKSDigJQgaXQgaXMgbmV2ZXIgYWNrZWQgd2l0aG91dCBiZWluZyBwcmVzZXJ2ZWQuXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IGRlYWRMZXR0ZXJFeGhhdXN0ZWQgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIGNvbnN0IHBlbmRpbmcgPSBhd2FpdCByZWFkZXIueHBlbmRpbmcoa2V5LCBncm91cCwgJ0lETEUnLCBtaW5JZGxlLCAnLScsICcrJywgYmF0Y2gpO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGVuZGluZykpIHJldHVybjtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHBlbmRpbmcpIHtcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocCkgfHwgcC5sZW5ndGggPCA0KSBjb250aW51ZTtcbiAgICAgICAgICBjb25zdCBpZCA9IFN0cmluZyhwWzBdKTtcbiAgICAgICAgICBjb25zdCBkZWxpdmVyaWVzID0gTnVtYmVyKHBbM10pO1xuICAgICAgICAgIGlmICghKGRlbGl2ZXJpZXMgPj0gbWF4RGVsaXZlcmllcykpIGNvbnRpbnVlO1xuICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCByZWFkZXIueHJhbmdlKGtleSwgaWQsIGlkKTtcbiAgICAgICAgICBjb25zdCBmaWVsZHMgPSBBcnJheS5pc0FycmF5KGVudHJpZXMpICYmIEFycmF5LmlzQXJyYXkoZW50cmllc1swXSkgJiYgQXJyYXkuaXNBcnJheShlbnRyaWVzWzBdWzFdKSA/IGVudHJpZXNbMF1bMV0gOiBbXTtcbiAgICAgICAgICBsZXQgcmF3ID0gJyc7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgKyAxIDwgZmllbGRzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICBpZiAoU3RyaW5nKGZpZWxkc1tpXSkgPT09ICdkJykgeyByYXcgPSBTdHJpbmcoZmllbGRzW2kgKyAxXSk7IGJyZWFrOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHJlYWRlci54YWRkKFxuICAgICAgICAgICAgZGxxS2V5LCAnTUFYTEVOJywgJ34nLCBtYXhMZW4sICcqJyxcbiAgICAgICAgICAgICdkJywgcmF3LCAnc291cmNlSWQnLCBpZCwgJ2dyb3VwJywgZ3JvdXAsICdkZWxpdmVyaWVzJywgZGVsaXZlcmllcyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGF3YWl0IHJlYWRlci54YWNrKGtleSwgZ3JvdXAsIGlkKTtcbiAgICAgICAgICBlbWl0Q291bnRlcignZXZlbnRfYnVzX2RlYWRfbGV0dGVyZWRfdG90YWwnLCB7IHRvcGljLCBncm91cCB9KTtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0V2ZW50IGV4Y2VlZGVkIG1heCBkZWxpdmVyaWVzOyBtb3ZlZCB0byBkZWFkLWxldHRlciBzdHJlYW0nLCB7XG4gICAgICAgICAgICB0b3BpYywgZ3JvdXAsIGlkLCBkZWxpdmVyaWVzLCBkZWFkTGV0dGVyU3RyZWFtOiBkbHFLZXksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIFRoZSBjb25zdW1lciBncm91cCBtdXN0IGV4aXN0IGJlZm9yZSBYUkVBREdST1VQIGNhbiBzdWNjZWVkLiBDcmVhdGluZyBpdFxuICAgICAgLy8gaXMgcmV0cmllZCBpbnNpZGUgdGhlIGxvb3A6IGF0IHN0YXJ0dXAgdGhlIGNsaWVudCBtYXkgbm90IGhhdmUgY29ubmVjdGVkXG4gICAgICAvLyB5ZXQsIGFuZCBhIHNpbmdsZSBmYWlsZWQgYXR0ZW1wdCB3b3VsZCBsZWF2ZSB0aGUgY29uc3VtZXIgcmVhZGluZyBhXG4gICAgICAvLyBncm91cCB0aGF0IHdhcyBuZXZlciBjcmVhdGVkIOKAlCBmb3JldmVyLlxuICAgICAgbGV0IGdyb3VwUmVhZHkgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGVuc3VyZUdyb3VwID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIE1LU1RSRUFNIHNvIHRoZSBzdHJlYW0gbmVlZCBub3QgZXhpc3QgeWV0OyAnJCcgPSBvbmx5IG5ldyBtZXNzYWdlcy5cbiAgICAgICAgICBhd2FpdCByZWFkZXIueGdyb3VwKCdDUkVBVEUnLCBrZXksIGdyb3VwLCAnJCcsICdNS1NUUkVBTScpO1xuICAgICAgICAgIGdyb3VwUmVhZHkgPSB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBpZiAoIWlzQnVzeUdyb3VwKGVycikpIHRocm93IGVycjtcbiAgICAgICAgICBncm91cFJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgbG9vcCA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgd2hpbGUgKCFzdG9wcGVkKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICghZ3JvdXBSZWFkeSkgYXdhaXQgZW5zdXJlR3JvdXAoKTtcbiAgICAgICAgICAgIC8vIDEpIERlYWQtbGV0dGVyIG1lc3NhZ2VzIHRoYXQgaGF2ZSBleGhhdXN0ZWQgdGhlaXIgZGVsaXZlcmllcywgdGhlblxuICAgICAgICAgICAgLy8gICAgcmVjbGFpbSB0aGUgcmVzdCBzdHJhbmRlZCBieSBhIGZhaWxlZC9jcmFzaGVkIGNvbnN1bWVyLlxuICAgICAgICAgICAgYXdhaXQgZGVhZExldHRlckV4aGF1c3RlZCgpO1xuICAgICAgICAgICAgY29uc3QgY2xhaW1lZCA9IGF3YWl0IHJlYWRlci54YXV0b2NsYWltKGtleSwgZ3JvdXAsIGNvbnN1bWVyLCBtaW5JZGxlLCAnMCcsICdDT1VOVCcsIGJhdGNoKTtcbiAgICAgICAgICAgIC8vIFhBVVRPQ0xBSU0gcmVwbHk6IFtuZXh0Q3Vyc29yLCBlbnRyaWVzLCBkZWxldGVkSWRzXVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2xhaW1lZCkgJiYgY2xhaW1lZC5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICBhd2FpdCBkZWxpdmVyKHBhcnNlRW50cmllczxUPih0b3BpYywgY2xhaW1lZFsxXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0b3BwZWQpIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyAyKSBSZWFkIG5ldywgbmV2ZXItZGVsaXZlcmVkIG1lc3NhZ2VzIGZvciB0aGlzIGdyb3VwICgnPicpLlxuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmVhZGVyLnhyZWFkZ3JvdXAoXG4gICAgICAgICAgICAgICdHUk9VUCcsIGdyb3VwLCBjb25zdW1lciwgJ0NPVU5UJywgYmF0Y2gsICdCTE9DSycsIGJsb2NrTXMsICdTVFJFQU1TJywga2V5LCAnPicsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gWFJFQURHUk9VUCByZXBseTogW1tzdHJlYW1LZXksIGVudHJpZXNdXSB8IG51bGwgKG9uIGJsb2NrIHRpbWVvdXQpXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXMpICYmIHJlcy5sZW5ndGggPiAwICYmIEFycmF5LmlzQXJyYXkocmVzWzBdKSAmJiByZXNbMF0ubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgYXdhaXQgZGVsaXZlcihwYXJzZUVudHJpZXM8VD4odG9waWMsIHJlc1swXVsxXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKHN0b3BwZWQpIGJyZWFrO1xuICAgICAgICAgICAgLy8gVGhlIHN0cmVhbSBvciBncm91cCB3YXMgZGVsZXRlZCBvdXQgZnJvbSB1bmRlciB1cyDigJQgcmVjcmVhdGUgaXQuXG4gICAgICAgICAgICBpZiAoL05PR1JPVVAvaS50ZXN0KGVycm9yTWVzc2FnZShlcnIpKSkgZ3JvdXBSZWFkeSA9IGZhbHNlO1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0V2ZW50IGJ1cyBjb25zdW1lciBsb29wIGVycm9yOyBiYWNraW5nIG9mZicsIHsgdG9waWMsIGdyb3VwLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgICAgICAgICAvLyBCYWNrIG9mZiBzbyBhIHBlcnNpc3RlbnQgUmVkaXMgZXJyb3IgZG9lc24ndCBob3Qtc3Bpbi5cbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDEwMDApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGxvb3BQcm9taXNlID0gbG9vcCgpO1xuICAgICAgbG9nZ2VyLmluZm8oJ0V2ZW50IGJ1cyBjb25zdW1lciBzdGFydGVkJywgeyB0b3BpYywgZ3JvdXAsIGNvbnN1bWVyLCBtYXhEZWxpdmVyaWVzIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhc3luYyBzdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAgIHN0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgIC8vIEF3YWl0IHRoZSBpbi1mbGlnaHQgcmVhZC9oYW5kbGVyIHNvIGEgY2FsbGVyIChlLmcuIGEgc2VydmljZSBzaHV0dGluZ1xuICAgICAgICAgIC8vIGRvd24gaXRzIERCKSBkb2Vzbid0IHJhY2UgYSBtZXNzYWdlIHN0aWxsIGJlaW5nIHByb2Nlc3NlZC4gQm91bmRlZCBieVxuICAgICAgICAgIC8vIHRoZSBYUkVBREdST1VQIEJMT0NLIHdpbmRvdy4gTmV2ZXIgcmVqZWN0cyDigJQgdGhlIGxvb3Agc3dhbGxvd3MgZXJyb3JzLlxuICAgICAgICAgIGF3YWl0IGxvb3BQcm9taXNlLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKHJlYWRlci5xdWl0Py4oKSkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIGR1cmFibGUgZXZlbnQgYnVzIGZyb20gdGhlIGFtYmllbnQgUmVkaXMgZW52IHZpYSB0aGUgc2hhcmVkXG4gKiBgY3JlYXRlRW52UmVkaXNDbGllbnRgLiBSZXR1cm5zIGBudWxsYCB3aGVuIFJlZGlzIGlzIG5vdCBjb25maWd1cmVkIOKAlCB0aGVcbiAqIGNhbGxlciB0aGVuIHJ1bnMgd2l0aG91dCBhIGJ1cyAodG9kYXkncyBIVFRQL3JlY29uY2lsZXIgYmVoYXZpb3IpLCBuZXZlclxuICogY3Jhc2hpbmcuIE9wdCBpbiB3aXRoIGEgc2luZ2xlIGJvb3QgbGluZSB3aGVyZSBhIHNlcnZpY2Ugd2FudHMgZHVyYWJsZSBldmVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbnZSZWRpc0R1cmFibGVFdmVudEJ1cyhvcHRzOiB7IG1heExlbj86IG51bWJlciB9ID0ge30pOiBEdXJhYmxlRXZlbnRCdXMgfCBudWxsIHtcbiAgY29uc3QgaW5zdCA9IGNyZWF0ZUVudlJlZGlzQ2xpZW50PFJlZGlzU3RyZWFtQ2xpZW50PignZXZlbnQtYnVzJyk7XG4gIGlmICghaW5zdCkgcmV0dXJuIG51bGw7XG4gIGxvZ2dlci5pbmZvKCdSZWRpcyBkdXJhYmxlIGV2ZW50IGJ1cyBpbml0aWFsaXplZCcpO1xuICByZXR1cm4gY3JlYXRlUmVkaXNEdXJhYmxlRXZlbnRCdXMoaW5zdCwgb3B0cyk7XG59XG4iXX0=
|
|
266
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYWJsZS1ldmVudC1idXMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9kdXJhYmxlLWV2ZW50LWJ1cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUVILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXBELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBb0ZqRCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUM7QUFDOUIsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0FBQy9CLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDO0FBQ25DLE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBRWxDLFNBQVMsU0FBUyxDQUFDLEtBQWE7SUFDOUIsT0FBTyxPQUFPLEtBQUssRUFBRSxDQUFDO0FBQ3hCLENBQUM7QUFFRCxzQ0FBc0M7QUFDdEMsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQWE7SUFDL0MsT0FBTyxPQUFPLEtBQUssTUFBTSxDQUFDO0FBQzVCLENBQUM7QUFFRCxtRkFBbUY7QUFDbkYsU0FBUyxpQkFBaUIsQ0FBQyxFQUFVO0lBQ25DLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FB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RSxRQUFRLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUVyRixPQUFPO2dCQUNMLEtBQUssQ0FBQyxJQUFJO29CQUNSLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ2Ysd0VBQXdFO29CQUN4RSx3RUFBd0U7b0JBQ3hFLHlFQUF5RTtvQkFDekUsTUFBTSxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUN6QyxNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2hFLENBQUM7YUFDRixDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsNkJBQTZCLENBQUMsSUFBSSxHQUF3QixFQUFFO0lBQzFFLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFvQixXQUFXLENBQUMsQ0FBQztJQUNsRSxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQUNuRCxPQUFPLDBCQUEwQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogRHVyYWJsZSwgYXQtbGVhc3Qtb25jZSBldmVudCBiYWNrYm9uZSAoUmVkaXMgU3RyZWFtcykuXG4gKlxuICogVGhlIHBsYXRmb3JtJ3MgY3Jvc3Mtc2VydmljZSBzaWduYWxsaW5nIHRvZGF5IGlzIHBvaW50LXRvLXBvaW50IEhUVFAgcGx1c1xuICogcG9sbGluZyByZWNvbmNpbGVycyBwbHVzIGFuIElOLVBST0NFU1MgYmVzdC1lZmZvcnQgZW1pdHRlciAoe0BsaW5rIGVudGl0eUV2ZW50c30pLlxuICogVGhlcmUgaXMgbm8gZHVyYWJsZSBidXMsIHNvIGEgc2lnbmFsIHByb2R1Y2VkIG9uIG9uZSBwb2QgaXMgZWl0aGVyIGRlbGl2ZXJlZFxuICogc3luY2hyb25vdXNseSBvdmVyIEhUVFAgKGNvdXBsaW5nICsgcmV0cnktc3Rvcm0gcmlzaykgb3IgbG9zdCBpZiB0aGUgY29uc3VtZXJcbiAqIGlzIG1vbWVudGFyaWx5IGRvd24gKHRoZSByZWNvbmNpbGVycyBleGlzdCB0byBwYXBlciBvdmVyIGV4YWN0bHkgdGhhdCkuXG4gKlxuICogVGhpcyBpcyB0aGF0IG1pc3NpbmcgYnVzLCBhcyBhIHJldXNhYmxlIHByaW1pdGl2ZTpcbiAqICAtICoqcHVibGlzaCh0b3BpYywgcGF5bG9hZCkqKiDihpIgYFhBRERgIG9udG8gYSBib3VuZGVkIChgTUFYTEVOIH5gKSBwZXItdG9waWNcbiAqICAgIHN0cmVhbS4gRHVyYWJsZSBhY3Jvc3MgcmVzdGFydHMsIHNoYXJlZCBieSBhbGwgcmVwbGljYXMuXG4gKiAgLSAqKnN1YnNjcmliZSh7dG9waWMsIGdyb3VwLCBjb25zdW1lciwgaGFuZGxlcn0pKiog4oaSIGEgYFhSRUFER1JPVVBgIGNvbnN1bWVyXG4gKiAgICBvbiBpdHMgT1dOIGNvbm5lY3Rpb24gKGBkdXBsaWNhdGUoKWApLCBzbyBhIGJsb2NraW5nIHJlYWQgbmV2ZXIgZGVsYXlzIGFcbiAqICAgIHB1Ymxpc2guIENvbnN1bWVyIEdST1VQUyBnaXZlIGF0LWxlYXN0LW9uY2U6IGVhY2ggZ3JvdXAgZ2V0cyBldmVyeSBtZXNzYWdlXG4gKiAgICBvbmNlLCBhIG1lc3NhZ2Ugc3RheXMgcGVuZGluZyB1bnRpbCB0aGUgaGFuZGxlciBgWEFDS2BzIGl0LCBhbmQgYFhBVVRPQ0xBSU1gXG4gKiAgICByZWNsYWltcyBtZXNzYWdlcyBzdHJhbmRlZCBieSBhIGNyYXNoZWQgY29uc3VtZXIuIEEgbWVzc2FnZSB0aGF0IGhhcyBiZWVuXG4gKiAgICBkZWxpdmVyZWQgYG1heERlbGl2ZXJpZXNgIHRpbWVzIHdpdGhvdXQgYW4gYWNrIGlzIG1vdmVkIHRvIGEgZGVhZC1sZXR0ZXJcbiAqICAgIHN0cmVhbSAoYGV2dDo8dG9waWM+OmRscWApIGFuZCBhY2tlZCwgc28gYSBwb2lzb24gbWVzc2FnZSBjYW4ndCByZWRlbGl2ZXJcbiAqICAgIGZvcmV2ZXIuIE11bHRpcGxlIGdyb3VwcyBvbiBvbmUgdG9waWMgPSBpbmRlcGVuZGVudCBmYW4tb3V0LlxuICpcbiAqIEZBSUwtU0FGRSArIE9QVC1JTiwgZXhhY3RseSBsaWtlIHRoZSBhdWRpdCBzcG9vbDoge0BsaW5rIGNyZWF0ZUVudlJlZGlzRHVyYWJsZUV2ZW50QnVzfVxuICogcmV0dXJucyBgbnVsbGAgd2hlbiBSZWRpcyBpc24ndCBjb25maWd1cmVkLCBzbyBhIHNlcnZpY2Ugd2l0aG91dCBpdCBzaW1wbHlcbiAqIGRvZXNuJ3QgdXNlIHRoZSBidXMgKGtlZXBzIHRvZGF5J3MgYmVoYXZpb3IpLiBBIHB1Ymxpc2ggZmFpbHVyZSBpcyBkcm9wcGVkLXdpdGgtXG4gKiAtbWV0cmljLCBuZXZlciB0aHJvd247IGEgaGFuZGxlciB0aHJvdyBsZWF2ZXMgdGhlIG1lc3NhZ2UgdW4tYWNrZWQgZm9yIHJlZGVsaXZlcnkuXG4gKlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUVudlJlZGlzQ2xpZW50IH0gZnJvbSAnLi9lbnYtcmVkaXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVtaXRDb3VudGVyIH0gZnJvbSAnLi4vdXRpbHMvbWV0cmljLWVtaXR0ZXIuanMnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ2R1cmFibGUtZXZlbnQtYnVzJyk7XG5cbi8qKiBBIGRlbGl2ZXJlZCBldmVudDogaXRzIHN0cmVhbSBpZCwgdG9waWMsIHB1Ymxpc2ggdGltZSwgYW5kIGRlY29kZWQgcGF5bG9hZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRFbnZlbG9wZTxUID0gdW5rbm93bj4ge1xuICAvKiogUmVkaXMgU3RyZWFtIGVudHJ5IGlkIChgPG1zPi08c2VxPmApIOKAlCBhbHNvIHRoZSBpZGVtcG90ZW5jeSBoYW5kbGUuICovXG4gIGlkOiBzdHJpbmc7XG4gIHRvcGljOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVuIHRoZSBldmVudCB3YXMgcHVibGlzaGVkICh0aGUgUmVkaXMgc2VydmVyIHRpbWUgZW1iZWRkZWQgaW4gdGhlIHN0cmVhbVxuICAgKiBpZCkuIEEgcmVkZWxpdmVyeSBrZWVwcyBpdHMgT1JJR0lOQUwgcHVibGlzaCB0aW1lLCBzbyBhIGNvbnN1bWVyIGFwcGx5aW5nXG4gICAqIGxhc3Qtd3JpdGVyLXdpbnMgc3RhdGUgKGUuZy4gYW4gZW50aXRsZW1lbnQgc3luYykgY2FuIG9yZGVyIGV2ZW50cyBieSBpdFxuICAgKiBpbnN0ZWFkIG9mIGJ5IGRlbGl2ZXJ5IHRpbWUgYW5kIHJlZnVzZSB0byBsZXQgYSBzdGFsZSByZXRyeSBvdmVyd3JpdGUgYVxuICAgKiBuZXdlciBzdGF0ZS5cbiAgICovXG4gIHB1Ymxpc2hlZEF0OiBEYXRlO1xuICBwYXlsb2FkOiBUO1xufVxuXG4vKipcbiAqIEEgcGFyc2VkIHN0cmVhbSBlbnRyeSwgd2hpY2ggbWF5IGhhdmUgTk8gdXNhYmxlIHBheWxvYWQuXG4gKlxuICogU2VwYXJhdGUgZnJvbSB7QGxpbmsgRXZlbnRFbnZlbG9wZX0gYmVjYXVzZSB0aGUgdHdvIGFyZSBnZW51aW5lbHkgZGlmZmVyZW50IHRoaW5ncyBhbmRcbiAqIGNvbmZsYXRpbmcgdGhlbSBjb3N0IHRocmVlIGB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBUYCBjYXN0czogYW4gZW50cnkgd2l0aCBubyBgZGAgZmllbGRcbiAqIG9yIHdpdGggdW5wYXJzZWFibGUgSlNPTiBpcyBhIHBvaXNvbiBtZXNzYWdlLCBhbmQgaXQgaGFzIHRvIHRyYXZlbCBmYXIgZW5vdWdoIGZvclxuICogYGRlbGl2ZXIoKWAgdG8gQUNLIGl0IChsZWF2aW5nIGl0IHBlbmRpbmcgd291bGQgd2VkZ2UgdGhlIGdyb3VwIGZvcmV2ZXIpLiBEZWNsYXJpbmcgdGhhdFxuICogcG9zc2liaWxpdHkgaGVyZSBtZWFucyB0aGUgQUNLLXdpdGhvdXQtaGFuZGxpbmcgcGF0aCBpcyBhIHR5cGUgTkFSUk9XSU5HIHJhdGhlciB0aGFuIGFcbiAqIHJ1bnRpbWUgY29udmVudGlvbiB0aGUgdHlwZSBzeXN0ZW0gd2FzIGxpZWQgdG8gYWJvdXQg4oCUIGEgaGFuZGxlciBzdGlsbCBvbmx5IGV2ZXIgc2Vlc1xuICogYHBheWxvYWQ6IFRgLlxuICovXG50eXBlIFBhcnNlZEVudmVsb3BlPFQ+ID0gT21pdDxFdmVudEVudmVsb3BlPFQ+LCAncGF5bG9hZCc+ICYgeyBwYXlsb2FkOiBUIHwgdW5kZWZpbmVkIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3Vic2NyaWJlT3B0aW9uczxUID0gdW5rbm93bj4ge1xuICAvKiogVG9waWMgKHN0cmVhbSkgdG8gY29uc3VtZS4gKi9cbiAgdG9waWM6IHN0cmluZztcbiAgLyoqIENvbnN1bWVyIGdyb3VwIOKAlCBvbmUgZGVsaXZlcnkgcGVyIGdyb3VwOyBkaXN0aW5jdCBncm91cHMgZmFuIG91dC4gKi9cbiAgZ3JvdXA6IHN0cmluZztcbiAgLyoqIFRoaXMgY29uc3VtZXIncyBpZCB3aXRoaW4gdGhlIGdyb3VwIChlLmcuIGAke3NlcnZpY2V9LSR7cGlkfWApLiAqL1xuICBjb25zdW1lcjogc3RyaW5nO1xuICAvKiogQXN5bmMgaGFuZGxlci4gUmVzb2x2ZXMg4oeSIHRoZSBtZXNzYWdlIGlzIGFja2VkOyB0aHJvd3Mg4oeSIGxlZnQgcGVuZGluZyBmb3IgcmVkZWxpdmVyeS4gKi9cbiAgaGFuZGxlcjogKGVudjogRXZlbnRFbnZlbG9wZTxUPikgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqIE1heCBtZXNzYWdlcyBwZXIgcmVhZCAoZGVmYXVsdCAxNikuICovXG4gIGJhdGNoU2l6ZT86IG51bWJlcjtcbiAgLyoqIFhSRUFER1JPVVAgYmxvY2sgdGltZSBpbiBtcyAoZGVmYXVsdCA1MDAwKS4gKi9cbiAgYmxvY2tNcz86IG51bWJlcjtcbiAgLyoqIEEgcGVuZGluZyBtZXNzYWdlIGlkbGUgdGhpcyBsb25nIChtcykgaXMgcmVjbGFpbWVkIGZyb20gYSBkZWFkIGNvbnN1bWVyIChkZWZhdWx0IDYwMDAwKS4gKi9cbiAgbWluSWRsZU1zPzogbnVtYmVyO1xuICAvKipcbiAgICogRGVsaXZlcmllcyBhZnRlciB3aGljaCBhbiB1bi1hY2tlZCBtZXNzYWdlIGlzIGRlYWQtbGV0dGVyZWQgdG9cbiAgICogYGV2dDo8dG9waWM+OmRscWAgYW5kIGFja2VkIGluc3RlYWQgb2YgYmVpbmcgcmVkZWxpdmVyZWQgYWdhaW4gKGRlZmF1bHQgMTApLlxuICAgKi9cbiAgbWF4RGVsaXZlcmllcz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmVudFN1YnNjcmlwdGlvbiB7XG4gIC8qKiBTdG9wIHRoZSBjb25zdW1lciBsb29wLiBSZXNvbHZlcyBvbmNlIHRoZSBpbi1mbGlnaHQgcmVhZCByZXR1cm5zLiAqL1xuICBzdG9wKCk6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVyYWJsZUV2ZW50QnVzIHtcbiAgLyoqIFB1Ymxpc2ggYSBwYXlsb2FkIHRvIGEgdG9waWMuIFJldHVybnMgdGhlIHN0cmVhbSBpZCwgb3IgbnVsbCBvbiBmYWlsdXJlIChkcm9wcGVkLCBuZXZlciB0aHJvd3MpLiAqL1xuICBwdWJsaXNoPFQ+KHRvcGljOiBzdHJpbmcsIHBheWxvYWQ6IFQpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+O1xuICAvKiogU3RhcnQgYSBjb25zdW1lci1ncm91cCByZWFkZXIgZm9yIGEgdG9waWMuIEZpcmUtYW5kLWZvcmdldCBsb29wOyBjYWxsIGBzdG9wKClgIHRvIGVuZCBpdC4gKi9cbiAgc3Vic2NyaWJlPFQ+KG9wdHM6IFN1YnNjcmliZU9wdGlvbnM8VD4pOiBFdmVudFN1YnNjcmlwdGlvbjtcbn1cblxuLyoqXG4gKiBUaGUgc3Vic2V0IG9mIGlvcmVkaXMnIFN0cmVhbSBBUEkgdGhlIGJ1cyB1c2VzLiBLZXB0IG1pbmltYWwgc28gYSB0ZXN0IGNhblxuICogc3VwcGx5IGFuIGluLW1lbW9yeSBmYWtlIGFuZCBzbyBtZXJlbHkgaW1wb3J0aW5nIHRoaXMgbmV2ZXIgaGFyZC1kZXBlbmRzIG9uXG4gKiBpb3JlZGlzIChjb25zdHJ1Y3RlZCB2aWEgdGhlIHNoYXJlZCBlbnYgaGVscGVyKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWRpc1N0cmVhbUNsaWVudCB7XG4gIHhhZGQoa2V5OiBzdHJpbmcsIC4uLmFyZ3M6IChzdHJpbmcgfCBudW1iZXIpW10pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+O1xuICB4Z3JvdXAoLi4uYXJnczogKHN0cmluZyB8IG51bWJlcilbXSk6IFByb21pc2U8dW5rbm93bj47XG4gIHhyZWFkZ3JvdXAoLi4uYXJnczogKHN0cmluZyB8IG51bWJlcilbXSk6IFByb21pc2U8dW5rbm93bj47XG4gIHhhY2soa2V5OiBzdHJpbmcsIGdyb3VwOiBzdHJpbmcsIC4uLmlkczogc3RyaW5nW10pOiBQcm9taXNlPG51bWJlcj47XG4gIHhhdXRvY2xhaW0oLi4uYXJnczogKHN0cmluZyB8IG51bWJlcilbXSk6IFByb21pc2U8dW5rbm93bj47XG4gIHhwZW5kaW5nKGtleTogc3RyaW5nLCBncm91cDogc3RyaW5nLCAuLi5hcmdzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogUHJvbWlzZTx1bmtub3duPjtcbiAgeHJhbmdlKGtleTogc3RyaW5nLCBzdGFydDogc3RyaW5nLCBlbmQ6IHN0cmluZywgLi4uYXJnczogKHN0cmluZyB8IG51bWJlcilbXSk6IFByb21pc2U8dW5rbm93bj47XG4gIC8qKiBBIG5ldyBjb25uZWN0aW9uIHdpdGggdGhlIHNhbWUgb3B0aW9ucyDigJQgZWFjaCBzdWJzY3JpYmVyIHJlYWRzIG9uIGl0cyBvd24uICovXG4gIGR1cGxpY2F0ZSgpOiBSZWRpc1N0cmVhbUNsaWVudDtcbiAgcXVpdD8oKTogUHJvbWlzZTx1bmtub3duPjtcbiAgb24/KGV2ZW50OiAnZXJyb3InLCBjYjogKGVycjogdW5rbm93bikgPT4gdm9pZCk6IHVua25vd247XG59XG5cbmNvbnN0IERFRkFVTFRfTUFYTEVOID0gMTBfMDAwO1xuY29uc3QgREVGQVVMVF9CQVRDSCA9IDE2O1xuY29uc3QgREVGQVVMVF9CTE9DS19NUyA9IDVfMDAwO1xuY29uc3QgREVGQVVMVF9NSU5fSURMRV9NUyA9IDYwXzAwMDtcbmNvbnN0IERFRkFVTFRfTUFYX0RFTElWRVJJRVMgPSAxMDtcblxuZnVuY3Rpb24gc3RyZWFtS2V5KHRvcGljOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYGV2dDoke3RvcGljfWA7XG59XG5cbi8qKiBEZWFkLWxldHRlciBzdHJlYW0gZm9yIGEgdG9waWMuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhZExldHRlclN0cmVhbUtleSh0b3BpYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBldnQ6JHt0b3BpY306ZGxxYDtcbn1cblxuLyoqIFB1Ymxpc2ggdGltZSBmcm9tIGEgc3RyZWFtIGlkIChgPG1zPi08c2VxPmApOyBlcG9jaCAwIGZvciBhbiB1bnBhcnNlYWJsZSBpZC4gKi9cbmZ1bmN0aW9uIHB1Ymxpc2hlZEF0RnJvbUlkKGlkOiBzdHJpbmcpOiBEYXRlIHtcbiAgY29uc3QgbXMgPSBOdW1iZXIoaWQuc3BsaXQoJy0nKVswXSk7XG4gIHJldHVybiBuZXcgRGF0ZShOdW1iZXIuaXNGaW5pdGUobXMpID8gbXMgOiAwKTtcbn1cblxuLyoqIFRydWUgd2hlbiB0aGUgZXJyb3IgaXMgUmVkaXMnIFwiZ3JvdXAgYWxyZWFkeSBleGlzdHNcIiAoaWRlbXBvdGVudCBjcmVhdGUpLiAqL1xuZnVuY3Rpb24gaXNCdXN5R3JvdXAoZXJyOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBlcnJvck1lc3NhZ2UoZXJyKS5pbmNsdWRlcygnQlVTWUdST1VQJyk7XG59XG5cbi8qKlxuICogUGFyc2UgdGhlIG5lc3RlZCBhcnJheSBzaGFwZSBYUkVBREdST1VQIC8gWEFVVE9DTEFJTSByZXR1cm4gaW50byBmbGF0IGVudmVsb3Blcy5cbiAqIFhSRUFER1JPVVA6IGBbW3N0cmVhbUtleSwgW1tpZCwgW2YsIHYsIC4uLl1dLCAuLi5dXV1gLlxuICogWEFVVE9DTEFJTTogYFtuZXh0Q3Vyc29yLCBbW2lkLCBbZiwgdiwgLi4uXV0sIC4uLl0sIGRlbGV0ZWRJZHNdYC5cbiAqIFdlIHN0b3JlIHRoZSBKU09OIHBheWxvYWQgdW5kZXIgYSBzaW5nbGUgZmllbGQgYGRgLlxuICovXG5mdW5jdGlvbiBwYXJzZUVudHJpZXM8VD4odG9waWM6IHN0cmluZywgZW50cmllczogdW5rbm93bik6IFBhcnNlZEVudmVsb3BlPFQ+W10ge1xuICBjb25zdCBvdXQ6IFBhcnNlZEVudmVsb3BlPFQ+W10gPSBbXTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGVudHJpZXMpKSByZXR1cm4gb3V0O1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZW50cnkpIHx8IGVudHJ5Lmxlbmd0aCA8IDIpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGlkID0gU3RyaW5nKGVudHJ5WzBdKTtcbiAgICBjb25zdCBmaWVsZHMgPSBlbnRyeVsxXTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmllbGRzKSkgY29udGludWU7XG4gICAgLy8gZmllbGRzIGlzIFtuYW1lLCB2YWx1ZSwgbmFtZSwgdmFsdWUsIC4uLl07IGZpbmQgJ2QnLlxuICAgIGxldCByYXc6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSArIDEgPCBmaWVsZHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGlmIChTdHJpbmcoZmllbGRzW2ldKSA9PT0gJ2QnKSB7IHJhdyA9IFN0cmluZyhmaWVsZHNbaSArIDFdKTsgYnJlYWs7IH1cbiAgICB9XG4gICAgLy8gQSBtaXNzaW5nIGBkYCBmaWVsZCAoYW4gZW50cnkgbm90IHdyaXR0ZW4gYnkgcHVibGlzaCgpKSBPUiBhIGNvcnJ1cHQgSlNPTlxuICAgIC8vIHBheWxvYWQgYm90aCB5aWVsZCBhbiB1bmRlZmluZWQtcGF5bG9hZCBlbnZlbG9wZSBzbyBgZGVsaXZlcigpYCBBQ0tzIGl0IOKAlFxuICAgIC8vIGEgcG9pc29uIG1lc3NhZ2UgbXVzdCBuZXZlciB3ZWRnZSB0aGUgZ3JvdXAgYnkgc3RheWluZyBwZXJwZXR1YWxseSBwZW5kaW5nLlxuICAgIGNvbnN0IHB1Ymxpc2hlZEF0ID0gcHVibGlzaGVkQXRGcm9tSWQoaWQpO1xuICAgIGlmIChyYXcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3V0LnB1c2goeyBpZCwgdG9waWMsIHB1Ymxpc2hlZEF0LCBwYXlsb2FkOiB1bmRlZmluZWQgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIG91dC5wdXNoKHsgaWQsIHRvcGljLCBwdWJsaXNoZWRBdCwgcGF5bG9hZDogSlNPTi5wYXJzZShyYXcpIGFzIFQgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBvdXQucHVzaCh7IGlkLCB0b3BpYywgcHVibGlzaGVkQXQsIHBheWxvYWQ6IHVuZGVmaW5lZCB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIEJ1aWxkIGEgZHVyYWJsZSBldmVudCBidXMgb3ZlciBhIFJlZGlzIFN0cmVhbXMgY2xpZW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlZGlzRHVyYWJsZUV2ZW50QnVzKFxuICByZWRpczogUmVkaXNTdHJlYW1DbGllbnQsXG4gIG9wdHM6IHsgbWF4TGVuPzogbnVtYmVyIH0gPSB7fSxcbik6IER1cmFibGVFdmVudEJ1cyB7XG4gIGNvbnN0IG1heExlbiA9IE1hdGgubWF4KDEsIG9wdHMubWF4TGVuID8/IERFRkFVTFRfTUFYTEVOKTtcblxuICByZXR1cm4ge1xuICAgIGFzeW5jIHB1Ymxpc2g8VD4odG9waWM6IHN0cmluZywgcGF5bG9hZDogVCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgICAgY29uc3Qga2V5ID0gc3RyZWFtS2V5KHRvcGljKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIE1BWExFTiB+IDxuPiBib3VuZHMgdGhlIHN0cmVhbSBhcHByb3hpbWF0ZWx5IChjaGVhcCk7IGAqYCA9IHNlcnZlciBpZC5cbiAgICAgICAgY29uc3QgaWQgPSBhd2FpdCByZWRpcy54YWRkKGtleSwgJ01BWExFTicsICd+JywgbWF4TGVuLCAnKicsICdkJywgSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpO1xuICAgICAgICBlbWl0Q291bnRlcignZXZlbnRfYnVzX3B1Ymxpc2hlZF90b3RhbCcsIHsgdG9waWMgfSk7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlbWl0Q291bnRlcignZXZlbnRfYnVzX3B1Ymxpc2hfZmFpbGVkX3RvdGFsJywgeyB0b3BpYyB9KTtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0V2ZW50IGJ1cyBwdWJsaXNoIGZhaWxlZCAoZXZlbnQgZHJvcHBlZCknLCB7IHRvcGljLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdWJzY3JpYmU8VD4oc3ViT3B0czogU3Vic2NyaWJlT3B0aW9uczxUPik6IEV2ZW50U3Vic2NyaXB0aW9uIHtcbiAgICAgIGNvbnN0IHsgdG9waWMsIGdyb3VwLCBjb25zdW1lciwgaGFuZGxlciB9ID0gc3ViT3B0cztcbiAgICAgIGNvbnN0IGtleSA9IHN0cmVhbUtleSh0b3BpYyk7XG4gICAgICBjb25zdCBkbHFLZXkgPSBkZWFkTGV0dGVyU3RyZWFtS2V5KHRvcGljKTtcbiAgICAgIGNvbnN0IGJhdGNoID0gTWF0aC5tYXgoMSwgc3ViT3B0cy5iYXRjaFNpemUgPz8gREVGQVVMVF9CQVRDSCk7XG4gICAgICBjb25zdCBibG9ja01zID0gTWF0aC5tYXgoMCwgc3ViT3B0cy5ibG9ja01zID8/IERFRkFVTFRfQkxPQ0tfTVMpO1xuICAgICAgY29uc3QgbWluSWRsZSA9IE1hdGgubWF4KDAsIHN1Yk9wdHMubWluSWRsZU1zID8/IERFRkFVTFRfTUlOX0lETEVfTVMpO1xuICAgICAgY29uc3QgbWF4RGVsaXZlcmllcyA9IE1hdGgubWF4KDEsIHN1Yk9wdHMubWF4RGVsaXZlcmllcyA/PyBERUZBVUxUX01BWF9ERUxJVkVSSUVTKTtcblxuICAgICAgLy8gYFhSRUFER1JPVVAgQkxPQ0tgIGhvbGRzIGl0cyBjb25uZWN0aW9uIGZvciB1cCB0byBgYmxvY2tNc2A7IG9uIHRoZVxuICAgICAgLy8gc2hhcmVkIGNsaWVudCBldmVyeSBwdWJsaXNoIHF1ZXVlZCBiZWhpbmQgaXQuIFJlYWQgb24gYSBkZWRpY2F0ZWQgb25lLlxuICAgICAgY29uc3QgcmVhZGVyID0gcmVkaXMuZHVwbGljYXRlKCk7XG4gICAgICAvLyBBIGR1cGxpY2F0ZWQgaW9yZWRpcyBjb25uZWN0aW9uIGRvZXNuJ3QgaW5oZXJpdCBsaXN0ZW5lcnM7IHdpdGhvdXQgb25lIGFcbiAgICAgIC8vIGNvbm5lY3Rpb24gZXJyb3IgaXMgYW4gdW5oYW5kbGVkICdlcnJvcicgZXZlbnQgdGhhdCBjcmFzaGVzIHRoZSBwcm9jZXNzLlxuICAgICAgcmVhZGVyLm9uPy4oJ2Vycm9yJywgKGVycikgPT4gbG9nZ2VyLndhcm4oJ0V2ZW50IGJ1cyByZWFkZXIgY29ubmVjdGlvbiBlcnJvcicsIHsgdG9waWMsIGdyb3VwLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSkpO1xuXG4gICAgICBsZXQgc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBkZWxpdmVyID0gYXN5bmMgKGVudnM6IFBhcnNlZEVudmVsb3BlPFQ+W10pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBlbnYgb2YgZW52cykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBUaGUgbmFycm93aW5nIHRoYXQgdXNlZCB0byBiZSBhIGNhc3Q6IGluc2lkZSB0aGlzIGJyYW5jaCBgcGF5bG9hZGAgaXMgYFRgLFxuICAgICAgICAgICAgLy8gc28gYGVudmAgcmVhbGx5IGlzIGFuIEV2ZW50RW52ZWxvcGU8VD4gYW5kIHRoZSBoYW5kbGVyJ3MgdHlwZSBpcyBob25lc3QuXG4gICAgICAgICAgICBpZiAoZW52LnBheWxvYWQgIT09IHVuZGVmaW5lZCkgYXdhaXQgaGFuZGxlcihlbnYgYXMgRXZlbnRFbnZlbG9wZTxUPik7XG4gICAgICAgICAgICAvLyBBY2sgb24gc3VjY2VzcyBPUiBvbiBhbiB1bmRlZmluZWQgKGNvcnJ1cHQpIHBheWxvYWQg4oCUIGEgcG9pc29uXG4gICAgICAgICAgICAvLyBtZXNzYWdlIG11c3Qgbm90IGJsb2NrIHRoZSBncm91cCBmb3JldmVyLlxuICAgICAgICAgICAgYXdhaXQgcmVhZGVyLnhhY2soa2V5LCBncm91cCwgZW52LmlkKTtcbiAgICAgICAgICAgIGVtaXRDb3VudGVyKCdldmVudF9idXNfZGVsaXZlcmVkX3RvdGFsJywgeyB0b3BpYywgZ3JvdXAgfSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBMZWF2ZSBpdCBwZW5kaW5nIChubyBYQUNLKSDigJQgWEFVVE9DTEFJTSByZWRlbGl2ZXJzIGl0IGFmdGVyIG1pbklkbGUuXG4gICAgICAgICAgICBlbWl0Q291bnRlcignZXZlbnRfYnVzX2hhbmRsZXJfZmFpbGVkX3RvdGFsJywgeyB0b3BpYywgZ3JvdXAgfSk7XG4gICAgICAgICAgICBsb2dnZXIud2FybignRXZlbnQgaGFuZGxlciBmYWlsZWQ7IGxlYXZpbmcgbWVzc2FnZSBwZW5kaW5nIGZvciByZWRlbGl2ZXJ5Jywge1xuICAgICAgICAgICAgICB0b3BpYywgZ3JvdXAsIGlkOiBlbnYuaWQsIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLyoqXG4gICAgICAgKiBNb3ZlIGV2ZXJ5IGlkbGUgcGVuZGluZyBtZXNzYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkZWxpdmVyZWRcbiAgICAgICAqIGBtYXhEZWxpdmVyaWVzYCB0aW1lcyB0byB0aGUgZGVhZC1sZXR0ZXIgc3RyZWFtIGFuZCBhY2sgaXQuIFRoZSBlbnRyeVxuICAgICAgICoga2VlcHMgaXRzIHBheWxvYWQgcGx1cyB3aGVyZSBpdCBjYW1lIGZyb20sIHNvIGFuIG9wZXJhdG9yIGNhbiBpbnNwZWN0IG9yXG4gICAgICAgKiByZXBsYXkgaXQuIElmIGNvcHlpbmcgZmFpbHMgdGhlIG1lc3NhZ2UgaXMgbGVmdCBwZW5kaW5nIChyZXRyaWVkIG5leHRcbiAgICAgICAqIHBhc3MpIOKAlCBpdCBpcyBuZXZlciBhY2tlZCB3aXRob3V0IGJlaW5nIHByZXNlcnZlZC5cbiAgICAgICAqL1xuICAgICAgY29uc3QgZGVhZExldHRlckV4aGF1c3RlZCA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgY29uc3QgcGVuZGluZyA9IGF3YWl0IHJlYWRlci54cGVuZGluZyhrZXksIGdyb3VwLCAnSURMRScsIG1pbklkbGUsICctJywgJysnLCBiYXRjaCk7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShwZW5kaW5nKSkgcmV0dXJuO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcGVuZGluZykge1xuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShwKSB8fCBwLmxlbmd0aCA8IDQpIGNvbnRpbnVlO1xuICAgICAgICAgIGNvbnN0IGlkID0gU3RyaW5nKHBbMF0pO1xuICAgICAgICAgIGNvbnN0IGRlbGl2ZXJpZXMgPSBOdW1iZXIocFszXSk7XG4gICAgICAgICAgaWYgKCEoZGVsaXZlcmllcyA+PSBtYXhEZWxpdmVyaWVzKSkgY29udGludWU7XG4gICAgICAgICAgY29uc3QgZW50cmllcyA9IGF3YWl0IHJlYWRlci54cmFuZ2Uoa2V5LCBpZCwgaWQpO1xuICAgICAgICAgIGNvbnN0IGZpZWxkcyA9IEFycmF5LmlzQXJyYXkoZW50cmllcykgJiYgQXJyYXkuaXNBcnJheShlbnRyaWVzWzBdKSAmJiBBcnJheS5pc0FycmF5KGVudHJpZXNbMF1bMV0pID8gZW50cmllc1swXVsxXSA6IFtdO1xuICAgICAgICAgIGxldCByYXcgPSAnJztcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSArIDEgPCBmaWVsZHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgIGlmIChTdHJpbmcoZmllbGRzW2ldKSA9PT0gJ2QnKSB7IHJhdyA9IFN0cmluZyhmaWVsZHNbaSArIDFdKTsgYnJlYWs7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgcmVhZGVyLnhhZGQoXG4gICAgICAgICAgICBkbHFLZXksICdNQVhMRU4nLCAnficsIG1heExlbiwgJyonLFxuICAgICAgICAgICAgJ2QnLCByYXcsICdzb3VyY2VJZCcsIGlkLCAnZ3JvdXAnLCBncm91cCwgJ2RlbGl2ZXJpZXMnLCBkZWxpdmVyaWVzLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgcmVhZGVyLnhhY2soa2V5LCBncm91cCwgaWQpO1xuICAgICAgICAgIGVtaXRDb3VudGVyKCdldmVudF9idXNfZGVhZF9sZXR0ZXJlZF90b3RhbCcsIHsgdG9waWMsIGdyb3VwIH0pO1xuICAgICAgICAgIGxvZ2dlci5lcnJvcignRXZlbnQgZXhjZWVkZWQgbWF4IGRlbGl2ZXJpZXM7IG1vdmVkIHRvIGRlYWQtbGV0dGVyIHN0cmVhbScsIHtcbiAgICAgICAgICAgIHRvcGljLCBncm91cCwgaWQsIGRlbGl2ZXJpZXMsIGRlYWRMZXR0ZXJTdHJlYW06IGRscUtleSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8gVGhlIGNvbnN1bWVyIGdyb3VwIG11c3QgZXhpc3QgYmVmb3JlIFhSRUFER1JPVVAgY2FuIHN1Y2NlZWQuIENyZWF0aW5nIGl0XG4gICAgICAvLyBpcyByZXRyaWVkIGluc2lkZSB0aGUgbG9vcDogYXQgc3RhcnR1cCB0aGUgY2xpZW50IG1heSBub3QgaGF2ZSBjb25uZWN0ZWRcbiAgICAgIC8vIHlldCwgYW5kIGEgc2luZ2xlIGZhaWxlZCBhdHRlbXB0IHdvdWxkIGxlYXZlIHRoZSBjb25zdW1lciByZWFkaW5nIGFcbiAgICAgIC8vIGdyb3VwIHRoYXQgd2FzIG5ldmVyIGNyZWF0ZWQg4oCUIGZvcmV2ZXIuXG4gICAgICBsZXQgZ3JvdXBSZWFkeSA9IGZhbHNlO1xuICAgICAgY29uc3QgZW5zdXJlR3JvdXAgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gTUtTVFJFQU0gc28gdGhlIHN0cmVhbSBuZWVkIG5vdCBleGlzdCB5ZXQ7ICckJyA9IG9ubHkgbmV3IG1lc3NhZ2VzLlxuICAgICAgICAgIGF3YWl0IHJlYWRlci54Z3JvdXAoJ0NSRUFURScsIGtleSwgZ3JvdXAsICckJywgJ01LU1RSRUFNJyk7XG4gICAgICAgICAgZ3JvdXBSZWFkeSA9IHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmICghaXNCdXN5R3JvdXAoZXJyKSkgdGhyb3cgZXJyO1xuICAgICAgICAgIGdyb3VwUmVhZHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBsb29wID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICB3aGlsZSAoIXN0b3BwZWQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKCFncm91cFJlYWR5KSBhd2FpdCBlbnN1cmVHcm91cCgpO1xuICAgICAgICAgICAgLy8gMSkgRGVhZC1sZXR0ZXIgbWVzc2FnZXMgdGhhdCBoYXZlIGV4aGF1c3RlZCB0aGVpciBkZWxpdmVyaWVzLCB0aGVuXG4gICAgICAgICAgICAvLyAgICByZWNsYWltIHRoZSByZXN0IHN0cmFuZGVkIGJ5IGEgZmFpbGVkL2NyYXNoZWQgY29uc3VtZXIuXG4gICAgICAgICAgICBhd2FpdCBkZWFkTGV0dGVyRXhoYXVzdGVkKCk7XG4gICAgICAgICAgICBjb25zdCBjbGFpbWVkID0gYXdhaXQgcmVhZGVyLnhhdXRvY2xhaW0oa2V5LCBncm91cCwgY29uc3VtZXIsIG1pbklkbGUsICcwJywgJ0NPVU5UJywgYmF0Y2gpO1xuICAgICAgICAgICAgLy8gWEFVVE9DTEFJTSByZXBseTogW25leHRDdXJzb3IsIGVudHJpZXMsIGRlbGV0ZWRJZHNdXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbGFpbWVkKSAmJiBjbGFpbWVkLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICAgIGF3YWl0IGRlbGl2ZXIocGFyc2VFbnRyaWVzPFQ+KHRvcGljLCBjbGFpbWVkWzFdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RvcHBlZCkgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIDIpIFJlYWQgbmV3LCBuZXZlci1kZWxpdmVyZWQgbWVzc2FnZXMgZm9yIHRoaXMgZ3JvdXAgKCc+JykuXG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCByZWFkZXIueHJlYWRncm91cChcbiAgICAgICAgICAgICAgJ0dST1VQJywgZ3JvdXAsIGNvbnN1bWVyLCAnQ09VTlQnLCBiYXRjaCwgJ0JMT0NLJywgYmxvY2tNcywgJ1NUUkVBTVMnLCBrZXksICc+JyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICAvLyBYUkVBREdST1VQIHJlcGx5OiBbW3N0cmVhbUtleSwgZW50cmllc11dIHwgbnVsbCAob24gYmxvY2sgdGltZW91dClcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcykgJiYgcmVzLmxlbmd0aCA+IDAgJiYgQXJyYXkuaXNBcnJheShyZXNbMF0pICYmIHJlc1swXS5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICBhd2FpdCBkZWxpdmVyKHBhcnNlRW50cmllczxUPih0b3BpYywgcmVzWzBdWzFdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoc3RvcHBlZCkgYnJlYWs7XG4gICAgICAgICAgICAvLyBUaGUgc3RyZWFtIG9yIGdyb3VwIHdhcyBkZWxldGVkIG91dCBmcm9tIHVuZGVyIHVzIOKAlCByZWNyZWF0ZSBpdC5cbiAgICAgICAgICAgIGlmICgvTk9HUk9VUC9pLnRlc3QoZXJyb3JNZXNzYWdlKGVycikpKSBncm91cFJlYWR5ID0gZmFsc2U7XG4gICAgICAgICAgICBsb2dnZXIud2FybignRXZlbnQgYnVzIGNvbnN1bWVyIGxvb3AgZXJyb3I7IGJhY2tpbmcgb2ZmJywgeyB0b3BpYywgZ3JvdXAsIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSB9KTtcbiAgICAgICAgICAgIC8vIEJhY2sgb2ZmIHNvIGEgcGVyc2lzdGVudCBSZWRpcyBlcnJvciBkb2Vzbid0IGhvdC1zcGluLlxuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgMTAwMCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgbG9vcFByb21pc2UgPSBsb29wKCk7XG4gICAgICBsb2dnZXIuaW5mbygnRXZlbnQgYnVzIGNvbnN1bWVyIHN0YXJ0ZWQnLCB7IHRvcGljLCBncm91cCwgY29uc3VtZXIsIG1heERlbGl2ZXJpZXMgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgICAgc3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgLy8gQXdhaXQgdGhlIGluLWZsaWdodCByZWFkL2hhbmRsZXIgc28gYSBjYWxsZXIgKGUuZy4gYSBzZXJ2aWNlIHNodXR0aW5nXG4gICAgICAgICAgLy8gZG93biBpdHMgREIpIGRvZXNuJ3QgcmFjZSBhIG1lc3NhZ2Ugc3RpbGwgYmVpbmcgcHJvY2Vzc2VkLiBCb3VuZGVkIGJ5XG4gICAgICAgICAgLy8gdGhlIFhSRUFER1JPVVAgQkxPQ0sgd2luZG93LiBOZXZlciByZWplY3RzIOKAlCB0aGUgbG9vcCBzd2FsbG93cyBlcnJvcnMuXG4gICAgICAgICAgYXdhaXQgbG9vcFByb21pc2UuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAgICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUocmVhZGVyLnF1aXQ/LigpKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgZHVyYWJsZSBldmVudCBidXMgZnJvbSB0aGUgYW1iaWVudCBSZWRpcyBlbnYgdmlhIHRoZSBzaGFyZWRcbiAqIGBjcmVhdGVFbnZSZWRpc0NsaWVudGAuIFJldHVybnMgYG51bGxgIHdoZW4gUmVkaXMgaXMgbm90IGNvbmZpZ3VyZWQg4oCUIHRoZVxuICogY2FsbGVyIHRoZW4gcnVucyB3aXRob3V0IGEgYnVzICh0b2RheSdzIEhUVFAvcmVjb25jaWxlciBiZWhhdmlvciksIG5ldmVyXG4gKiBjcmFzaGluZy4gT3B0IGluIHdpdGggYSBzaW5nbGUgYm9vdCBsaW5lIHdoZXJlIGEgc2VydmljZSB3YW50cyBkdXJhYmxlIGV2ZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVudlJlZGlzRHVyYWJsZUV2ZW50QnVzKG9wdHM6IHsgbWF4TGVuPzogbnVtYmVyIH0gPSB7fSk6IER1cmFibGVFdmVudEJ1cyB8IG51bGwge1xuICBjb25zdCBpbnN0ID0gY3JlYXRlRW52UmVkaXNDbGllbnQ8UmVkaXNTdHJlYW1DbGllbnQ+KCdldmVudC1idXMnKTtcbiAgaWYgKCFpbnN0KSByZXR1cm4gbnVsbDtcbiAgbG9nZ2VyLmluZm8oJ1JlZGlzIGR1cmFibGUgZXZlbnQgYnVzIGluaXRpYWxpemVkJyk7XG4gIHJldHVybiBjcmVhdGVSZWRpc0R1cmFibGVFdmVudEJ1cyhpbnN0LCBvcHRzKTtcbn1cbiJdfQ==
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { type EcosystemNotifyRequest } from '../types/ecosystem-notifications.js';
|
|
2
2
|
/** The relay path on platform. */
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Platform's internal notify-email endpoint. Named for the ENDPOINT, not for one
|
|
5
|
+
* of its callers: five services post here (billing, compliance, plugin, quota,
|
|
6
|
+
* reporting), and this was spelled three times — here, in quota's threshold
|
|
7
|
+
* notifier and in billing's offer mailer, each as its own const.
|
|
8
|
+
*/
|
|
9
|
+
export declare const NOTIFY_EMAIL_PATH = "/internal/notify-email";
|
|
4
10
|
/** What one send achieved. `ok: false` means nothing was confirmed delivered. */
|
|
5
11
|
export interface EcosystemNotifyResult {
|
|
6
12
|
ok: boolean;
|
|
@@ -24,7 +24,13 @@ import { errorMessage } from '../utils/response.js';
|
|
|
24
24
|
import { serviceEndpoint } from '../utils/service-registry.js';
|
|
25
25
|
const logger = createLogger('ecosystem-notify-client');
|
|
26
26
|
/** The relay path on platform. */
|
|
27
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Platform's internal notify-email endpoint. Named for the ENDPOINT, not for one
|
|
29
|
+
* of its callers: five services post here (billing, compliance, plugin, quota,
|
|
30
|
+
* reporting), and this was spelled three times — here, in quota's threshold
|
|
31
|
+
* notifier and in billing's offer mailer, each as its own const.
|
|
32
|
+
*/
|
|
33
|
+
export const NOTIFY_EMAIL_PATH = '/internal/notify-email';
|
|
28
34
|
/**
|
|
29
35
|
* Create the relay client. Never throws from `send` for a transport problem —
|
|
30
36
|
* it resolves `{ ok: false }` and counts `ecosystem_notification_failed_total
|
|
@@ -48,7 +54,7 @@ export function createEcosystemNotifyClient(config) {
|
|
|
48
54
|
// System-org scoped, least privilege: the relay authorizes the CALLER by
|
|
49
55
|
// its key-bound service name, not by a role or permission on the token.
|
|
50
56
|
const authorization = getServiceAuthHeader({ serviceName: config.serviceName, orgId: SYSTEM_ORG_ID, role: 'member' });
|
|
51
|
-
const response = await client.post(
|
|
57
|
+
const response = await client.post(NOTIFY_EMAIL_PATH, parsed, { headers: { Authorization: authorization } });
|
|
52
58
|
const status = response?.statusCode;
|
|
53
59
|
const ok = status !== undefined && status >= 200 && status < 300;
|
|
54
60
|
if (!ok) {
|
|
@@ -68,4 +74,4 @@ export function createEcosystemNotifyClient(config) {
|
|
|
68
74
|
},
|
|
69
75
|
};
|
|
70
76
|
}
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLW5vdGlmeS1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvZWNvc3lzdGVtLW5vdGlmeS1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTVELE9BQU8sRUFBRSwyQkFBMkIsRUFBK0IsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFL0QsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFFdkQsa0NBQWtDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLHdCQUF3QixDQUFDO0FBMEI5RDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsTUFBbUM7SUFDN0UsTUFBTSxhQUFhLEdBQWtCO1FBQ25DLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJO1FBQ3JELElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJO1FBQ3JELE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU07S0FDbEMsQ0FBQztJQUNGLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRS9DLE9BQU87UUFDTCxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQStCO1lBQ3hDLE1BQU0sTUFBTSxHQUFHLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BELElBQUksT0FBTyxNQUFNLEtBQUssUUFBUTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzdGLElBQUksQ0FBQztnQkFDSCx5RUFBeUU7Z0JBQ3pFLHdFQUF3RTtnQkFDeEUsTUFBTSxhQUFhLEdBQUcsb0JBQW9CLENBQUMsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUN0SCxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQ2hDLHFCQUFxQixFQUFFLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsRUFBRSxDQUM3RSxDQUFDO2dCQUNGLE1BQU0sTUFBTSxHQUFHLFFBQVEsRUFBRSxVQUFVLENBQUM7Z0JBQ3BDLE1BQU0sRUFBRSxHQUFHLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDO2dCQUNqRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ1IsV0FBVyxDQUFDLHFDQUFxQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO29CQUM1RSxNQUFNLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxhQUFhLEVBQUUsQ0FBQyxDQUFDO29CQUM5RyxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDcEUsQ0FBQztnQkFDRCxNQUFNLElBQUksR0FBRyxRQUFTLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDbEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQztnQkFDeEUsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxPQUFPLGNBQWMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDakcsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsV0FBVyxDQUFDLHFDQUFxQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RSxNQUFNLENBQUMsSUFBSSxDQUFDLCtCQUErQixFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2hHLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFNlbmRlciBzaWRlIG9mIHRoZSBwbHVnaW4tZWNvc3lzdGVtIG5vdGlmaWNhdGlvbiByZWxheVxuICogKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQpLlxuICpcbiAqIFBsYXRmb3JtIG93bnMgU01UUCwgdGhlIHVzZXIgZGlyZWN0b3J5IGFuZCB0aGUgUm9sZXMsIHNvIGFuIGVjb3N5c3RlbSBub3RpY2VcbiAqIGlzIE9ORSBpbnRlcm5hbCBjYWxsIOKAlCBgUE9TVCAvaW50ZXJuYWwvbm90aWZ5LWVtYWlsYCB3aXRoIGFuXG4gKiB7QGxpbmsgRWNvc3lzdGVtTm90aWZ5UmVxdWVzdH0g4oCUIGFuZCBwbGF0Zm9ybSByZXNvbHZlcyB0aGUgcmVjaXBpZW50IFJVTEVTLFxuICogYXBwbGllcyBlYWNoIHVzZXIncyBgZWNvc3lzdGVtLipgIGVtYWlsIHByZWZlcmVuY2VzLCBtYWlscyBldmVyeSByZWNpcGllbnRcbiAqIGluZGl2aWR1YWxseSBhbmQgZHJvcHMgdGhlIGluLWFwcCBjb3B5IGludG8gdGhlaXIgaW5ib3ggdGhyb3VnaCB0aGUgbWVzc2FnZVxuICogc2VydmljZS4gVGhlIGNhbGxpbmcgc2VydmljZSBuZXZlciBzZWVzIGFuIGFkZHJlc3Mgb3IgYSBtZW1iZXIgbGlzdC5cbiAqXG4gKiBUaGUgcmVxdWVzdCBpcyB2YWxpZGF0ZWQgSEVSRSB3aXRoIHRoZSBzYW1lIHBhcnNlciB0aGUgcmVsYXkgdXNlcywgc28gYVxuICogbWFsZm9ybWVkIG5vdGljZSBmYWlscyBhdCB0aGUgY2FsbCBzaXRlIHJhdGhlciB0aGFuIGFzIGEgNDAwIGF0IGZsdXNoIHRpbWUuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlU2FmZUNsaWVudCB9IGZyb20gJy4vaHR0cC1jbGllbnQuanMnO1xuaW1wb3J0IHsgZ2V0U2VydmljZUF1dGhIZWFkZXIgfSBmcm9tICcuLi9taWRkbGV3YXJlL3NlcnZpY2UtdG9rZW5zLmpzJztcbmltcG9ydCB7IFNZU1RFTV9PUkdfSUQgfSBmcm9tICcuLi9taWRkbGV3YXJlL3N5c3RlbS1vcmcuanMnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMvY29tbW9uLmpzJztcbmltcG9ydCB7IHBhcnNlRWNvc3lzdGVtTm90aWZ5UmVxdWVzdCwgdHlwZSBFY29zeXN0ZW1Ob3RpZnlSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMvZWNvc3lzdGVtLW5vdGlmaWNhdGlvbnMuanMnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVtaXRDb3VudGVyIH0gZnJvbSAnLi4vdXRpbHMvbWV0cmljLWVtaXR0ZXIuanMnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgc2VydmljZUVuZHBvaW50IH0gZnJvbSAnLi4vdXRpbHMvc2VydmljZS1yZWdpc3RyeS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignZWNvc3lzdGVtLW5vdGlmeS1jbGllbnQnKTtcblxuLyoqIFRoZSByZWxheSBwYXRoIG9uIHBsYXRmb3JtLiAqL1xuZXhwb3J0IGNvbnN0IEVDT1NZU1RFTV9OT1RJRllfUEFUSCA9ICcvaW50ZXJuYWwvbm90aWZ5LWVtYWlsJztcblxuLyoqIFdoYXQgb25lIHNlbmQgYWNoaWV2ZWQuIGBvazogZmFsc2VgIG1lYW5zIG5vdGhpbmcgd2FzIGNvbmZpcm1lZCBkZWxpdmVyZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjb3N5c3RlbU5vdGlmeVJlc3VsdCB7XG4gIG9rOiBib29sZWFuO1xuICAvKiogSFRUUCBzdGF0dXMgZnJvbSBwbGF0Zm9ybSAoYWJzZW50IHdoZW4gaXQgd2FzIHVucmVhY2hhYmxlKS4gKi9cbiAgc3RhdHVzPzogbnVtYmVyO1xuICAvKiogVXNlcnMgKGFuZCBhZGRyZXNzZXMpIHRoZSBydWxlcyByZXNvbHZlZCB0by4gKi9cbiAgcmVjaXBpZW50Q291bnQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWNvc3lzdGVtTm90aWZ5Q2xpZW50IHtcbiAgc2VuZChyZXF1ZXN0OiBFY29zeXN0ZW1Ob3RpZnlSZXF1ZXN0KTogUHJvbWlzZTxFY29zeXN0ZW1Ob3RpZnlSZXN1bHQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVjb3N5c3RlbU5vdGlmeUNsaWVudENvbmZpZyB7XG4gIC8qKiBUaGUgY2FsbGluZyBzZXJ2aWNlIOKAlCBtdXN0IGJlIG9uZSBvZiB0aGUgcmVsYXkncyBhbGxvd2VkIGNhbGxlcnMuICovXG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIC8qKiBQbGF0Zm9ybSBob3N0IChkZWZhdWx0IGVudiBQTEFURk9STV9TRVJWSUNFX0hPU1Qgb3IgJ3BsYXRmb3JtJykuICovXG4gIGhvc3Q/OiBzdHJpbmc7XG4gIC8qKiBQbGF0Zm9ybSBwb3J0IChkZWZhdWx0IGVudiBQTEFURk9STV9TRVJWSUNFX1BPUlQgb3IgMzAwMCkuICovXG4gIHBvcnQ/OiBudW1iZXI7XG4gIC8qKiBSZXF1ZXN0IHRpbWVvdXQgbXMgKGRlZmF1bHQgMTAgMDAwIOKAlCBhIGZhbi1vdXQgdG8gbWFueSByZWNpcGllbnRzKS4gKi9cbiAgdGltZW91dD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgdGhlIHJlbGF5IGNsaWVudC4gTmV2ZXIgdGhyb3dzIGZyb20gYHNlbmRgIGZvciBhIHRyYW5zcG9ydCBwcm9ibGVtIOKAlFxuICogaXQgcmVzb2x2ZXMgYHsgb2s6IGZhbHNlIH1gIGFuZCBjb3VudHMgYGVjb3N5c3RlbV9ub3RpZmljYXRpb25fZmFpbGVkX3RvdGFsXG4gKiB7ZXZlbnR9YCBzbyB0aGUgY2FsbGVyICh0aGUgZGlnZXN0IGRpc3BhdGNoZXIpIGNhbiBrZWVwIHRoZSByb3cgZm9yIHJldHJ5LlxuICogSXQgRE9FUyB0aHJvdyBmb3IgYW4gaW52YWxpZCByZXF1ZXN0OiB0aGF0IGlzIGEgcHJvZ3JhbW1pbmcgZXJyb3IsIGFuZFxuICogcmV0cnlpbmcgaXQgd291bGQgbmV2ZXIgc3VjY2VlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVjb3N5c3RlbU5vdGlmeUNsaWVudChjb25maWc6IEVjb3N5c3RlbU5vdGlmeUNsaWVudENvbmZpZyk6IEVjb3N5c3RlbU5vdGlmeUNsaWVudCB7XG4gIGNvbnN0IHNlcnZpY2VDb25maWc6IFNlcnZpY2VDb25maWcgPSB7XG4gICAgaG9zdDogY29uZmlnLmhvc3QgPz8gc2VydmljZUVuZHBvaW50KCdwbGF0Zm9ybScpLmhvc3QsXG4gICAgcG9ydDogY29uZmlnLnBvcnQgPz8gc2VydmljZUVuZHBvaW50KCdwbGF0Zm9ybScpLnBvcnQsXG4gICAgdGltZW91dDogY29uZmlnLnRpbWVvdXQgPz8gMTBfMDAwLFxuICB9O1xuICBjb25zdCBjbGllbnQgPSBjcmVhdGVTYWZlQ2xpZW50KHNlcnZpY2VDb25maWcpO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgc2VuZChyZXF1ZXN0OiBFY29zeXN0ZW1Ob3RpZnlSZXF1ZXN0KTogUHJvbWlzZTxFY29zeXN0ZW1Ob3RpZnlSZXN1bHQ+IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRWNvc3lzdGVtTm90aWZ5UmVxdWVzdChyZXF1ZXN0KTtcbiAgICAgIGlmICh0eXBlb2YgcGFyc2VkID09PSAnc3RyaW5nJykgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVjb3N5c3RlbSBub3RpZmljYXRpb246ICR7cGFyc2VkfWApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gU3lzdGVtLW9yZyBzY29wZWQsIGxlYXN0IHByaXZpbGVnZTogdGhlIHJlbGF5IGF1dGhvcml6ZXMgdGhlIENBTExFUiBieVxuICAgICAgICAvLyBpdHMga2V5LWJvdW5kIHNlcnZpY2UgbmFtZSwgbm90IGJ5IGEgcm9sZSBvciBwZXJtaXNzaW9uIG9uIHRoZSB0b2tlbi5cbiAgICAgICAgY29uc3QgYXV0aG9yaXphdGlvbiA9IGdldFNlcnZpY2VBdXRoSGVhZGVyKHsgc2VydmljZU5hbWU6IGNvbmZpZy5zZXJ2aWNlTmFtZSwgb3JnSWQ6IFNZU1RFTV9PUkdfSUQsIHJvbGU6ICdtZW1iZXInIH0pO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0PHsgZGF0YT86IHsgcmVjaXBpZW50Q291bnQ/OiBudW1iZXIgfTsgcmVjaXBpZW50Q291bnQ/OiBudW1iZXIgfT4oXG4gICAgICAgICAgRUNPU1lTVEVNX05PVElGWV9QQVRILCBwYXJzZWQsIHsgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBhdXRob3JpemF0aW9uIH0gfSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2U/LnN0YXR1c0NvZGU7XG4gICAgICAgIGNvbnN0IG9rID0gc3RhdHVzICE9PSB1bmRlZmluZWQgJiYgc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICBlbWl0Q291bnRlcignZWNvc3lzdGVtX25vdGlmaWNhdGlvbl9mYWlsZWRfdG90YWwnLCB7IGV2ZW50OiBwYXJzZWQuZXZlbnQgfSk7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oJ0Vjb3N5c3RlbSBub3RpZmljYXRpb24gbm90IGRlbGl2ZXJlZCcsIHsgZXZlbnQ6IHBhcnNlZC5ldmVudCwgc3RhdHVzOiBzdGF0dXMgPz8gJ3VucmVhY2hhYmxlJyB9KTtcbiAgICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIC4uLihzdGF0dXMgIT09IHVuZGVmaW5lZCA/IHsgc3RhdHVzIH0gOiB7fSkgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBib2R5ID0gcmVzcG9uc2UhLmJvZHkgPz8ge307XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudENvdW50ID0gYm9keS5kYXRhPy5yZWNpcGllbnRDb3VudCA/PyBib2R5LnJlY2lwaWVudENvdW50O1xuICAgICAgICByZXR1cm4geyBvazogdHJ1ZSwgc3RhdHVzLCAuLi4odHlwZW9mIHJlY2lwaWVudENvdW50ID09PSAnbnVtYmVyJyA/IHsgcmVjaXBpZW50Q291bnQgfSA6IHt9KSB9O1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVtaXRDb3VudGVyKCdlY29zeXN0ZW1fbm90aWZpY2F0aW9uX2ZhaWxlZF90b3RhbCcsIHsgZXZlbnQ6IHBhcnNlZC5ldmVudCB9KTtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0Vjb3N5c3RlbSBub3RpZmljYXRpb24gZmFpbGVkJywgeyBldmVudDogcGFyc2VkLmV2ZW50LCBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSB9O1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG4iXX0=
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLW5vdGlmeS1jbGllbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9lY29zeXN0ZW0tbm90aWZ5LWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFFSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFNUQsT0FBTyxFQUFFLDJCQUEyQixFQUErQixNQUFNLHFDQUFxQyxDQUFDO0FBQy9HLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUV2RCxrQ0FBa0M7QUFDbEM7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyx3QkFBd0IsQ0FBQztBQTBCMUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLDJCQUEyQixDQUFDLE1BQW1DO0lBQzdFLE1BQU0sYUFBYSxHQUFrQjtRQUNuQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSTtRQUNyRCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSTtRQUNyRCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNO0tBQ2xDLENBQUM7SUFDRixNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUUvQyxPQUFPO1FBQ0wsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUErQjtZQUN4QyxNQUFNLE1BQU0sR0FBRywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVE7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUM3RixJQUFJLENBQUM7Z0JBQ0gseUVBQXlFO2dCQUN6RSx3RUFBd0U7Z0JBQ3hFLE1BQU0sYUFBYSxHQUFHLG9CQUFvQixDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDdEgsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUNoQyxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLEVBQUUsQ0FDekUsQ0FBQztnQkFDRixNQUFNLE1BQU0sR0FBRyxRQUFRLEVBQUUsVUFBVSxDQUFDO2dCQUNwQyxNQUFNLEVBQUUsR0FBRyxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQztnQkFDakUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUNSLFdBQVcsQ0FBQyxxQ0FBcUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDNUUsTUFBTSxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksYUFBYSxFQUFFLENBQUMsQ0FBQztvQkFDOUcsT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BFLENBQUM7Z0JBQ0QsTUFBTSxJQUFJLEdBQUcsUUFBUyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQ3hFLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsT0FBTyxjQUFjLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2pHLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLFdBQVcsQ0FBQyxxQ0FBcUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDNUUsTUFBTSxDQUFDLElBQUksQ0FBQywrQkFBK0IsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRyxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLENBQUM7UUFDSCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBTZW5kZXIgc2lkZSBvZiB0aGUgcGx1Z2luLWVjb3N5c3RlbSBub3RpZmljYXRpb24gcmVsYXlcbiAqIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS5cbiAqXG4gKiBQbGF0Zm9ybSBvd25zIFNNVFAsIHRoZSB1c2VyIGRpcmVjdG9yeSBhbmQgdGhlIFJvbGVzLCBzbyBhbiBlY29zeXN0ZW0gbm90aWNlXG4gKiBpcyBPTkUgaW50ZXJuYWwgY2FsbCDigJQgYFBPU1QgL2ludGVybmFsL25vdGlmeS1lbWFpbGAgd2l0aCBhblxuICoge0BsaW5rIEVjb3N5c3RlbU5vdGlmeVJlcXVlc3R9IOKAlCBhbmQgcGxhdGZvcm0gcmVzb2x2ZXMgdGhlIHJlY2lwaWVudCBSVUxFUyxcbiAqIGFwcGxpZXMgZWFjaCB1c2VyJ3MgYGVjb3N5c3RlbS4qYCBlbWFpbCBwcmVmZXJlbmNlcywgbWFpbHMgZXZlcnkgcmVjaXBpZW50XG4gKiBpbmRpdmlkdWFsbHkgYW5kIGRyb3BzIHRoZSBpbi1hcHAgY29weSBpbnRvIHRoZWlyIGluYm94IHRocm91Z2ggdGhlIG1lc3NhZ2VcbiAqIHNlcnZpY2UuIFRoZSBjYWxsaW5nIHNlcnZpY2UgbmV2ZXIgc2VlcyBhbiBhZGRyZXNzIG9yIGEgbWVtYmVyIGxpc3QuXG4gKlxuICogVGhlIHJlcXVlc3QgaXMgdmFsaWRhdGVkIEhFUkUgd2l0aCB0aGUgc2FtZSBwYXJzZXIgdGhlIHJlbGF5IHVzZXMsIHNvIGFcbiAqIG1hbGZvcm1lZCBub3RpY2UgZmFpbHMgYXQgdGhlIGNhbGwgc2l0ZSByYXRoZXIgdGhhbiBhcyBhIDQwMCBhdCBmbHVzaCB0aW1lLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZVNhZmVDbGllbnQgfSBmcm9tICcuL2h0dHAtY2xpZW50LmpzJztcbmltcG9ydCB7IGdldFNlcnZpY2VBdXRoSGVhZGVyIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9zZXJ2aWNlLXRva2Vucy5qcyc7XG5pbXBvcnQgeyBTWVNURU1fT1JHX0lEIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9zeXN0ZW0tb3JnLmpzJztcbmltcG9ydCB0eXBlIHsgU2VydmljZUNvbmZpZyB9IGZyb20gJy4uL3R5cGVzL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyBwYXJzZUVjb3N5c3RlbU5vdGlmeVJlcXVlc3QsIHR5cGUgRWNvc3lzdGVtTm90aWZ5UmVxdWVzdCB9IGZyb20gJy4uL3R5cGVzL2Vjb3N5c3RlbS1ub3RpZmljYXRpb25zLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbWl0Q291bnRlciB9IGZyb20gJy4uL3V0aWxzL21ldHJpYy1lbWl0dGVyLmpzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcbmltcG9ydCB7IHNlcnZpY2VFbmRwb2ludCB9IGZyb20gJy4uL3V0aWxzL3NlcnZpY2UtcmVnaXN0cnkuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ2Vjb3N5c3RlbS1ub3RpZnktY2xpZW50Jyk7XG5cbi8qKiBUaGUgcmVsYXkgcGF0aCBvbiBwbGF0Zm9ybS4gKi9cbi8qKlxuICogUGxhdGZvcm0ncyBpbnRlcm5hbCBub3RpZnktZW1haWwgZW5kcG9pbnQuIE5hbWVkIGZvciB0aGUgRU5EUE9JTlQsIG5vdCBmb3Igb25lXG4gKiBvZiBpdHMgY2FsbGVyczogZml2ZSBzZXJ2aWNlcyBwb3N0IGhlcmUgKGJpbGxpbmcsIGNvbXBsaWFuY2UsIHBsdWdpbiwgcXVvdGEsXG4gKiByZXBvcnRpbmcpLCBhbmQgdGhpcyB3YXMgc3BlbGxlZCB0aHJlZSB0aW1lcyDigJQgaGVyZSwgaW4gcXVvdGEncyB0aHJlc2hvbGRcbiAqIG5vdGlmaWVyIGFuZCBpbiBiaWxsaW5nJ3Mgb2ZmZXIgbWFpbGVyLCBlYWNoIGFzIGl0cyBvd24gY29uc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBOT1RJRllfRU1BSUxfUEFUSCA9ICcvaW50ZXJuYWwvbm90aWZ5LWVtYWlsJztcblxuLyoqIFdoYXQgb25lIHNlbmQgYWNoaWV2ZWQuIGBvazogZmFsc2VgIG1lYW5zIG5vdGhpbmcgd2FzIGNvbmZpcm1lZCBkZWxpdmVyZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjb3N5c3RlbU5vdGlmeVJlc3VsdCB7XG4gIG9rOiBib29sZWFuO1xuICAvKiogSFRUUCBzdGF0dXMgZnJvbSBwbGF0Zm9ybSAoYWJzZW50IHdoZW4gaXQgd2FzIHVucmVhY2hhYmxlKS4gKi9cbiAgc3RhdHVzPzogbnVtYmVyO1xuICAvKiogVXNlcnMgKGFuZCBhZGRyZXNzZXMpIHRoZSBydWxlcyByZXNvbHZlZCB0by4gKi9cbiAgcmVjaXBpZW50Q291bnQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWNvc3lzdGVtTm90aWZ5Q2xpZW50IHtcbiAgc2VuZChyZXF1ZXN0OiBFY29zeXN0ZW1Ob3RpZnlSZXF1ZXN0KTogUHJvbWlzZTxFY29zeXN0ZW1Ob3RpZnlSZXN1bHQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVjb3N5c3RlbU5vdGlmeUNsaWVudENvbmZpZyB7XG4gIC8qKiBUaGUgY2FsbGluZyBzZXJ2aWNlIOKAlCBtdXN0IGJlIG9uZSBvZiB0aGUgcmVsYXkncyBhbGxvd2VkIGNhbGxlcnMuICovXG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIC8qKiBQbGF0Zm9ybSBob3N0IChkZWZhdWx0IGVudiBQTEFURk9STV9TRVJWSUNFX0hPU1Qgb3IgJ3BsYXRmb3JtJykuICovXG4gIGhvc3Q/OiBzdHJpbmc7XG4gIC8qKiBQbGF0Zm9ybSBwb3J0IChkZWZhdWx0IGVudiBQTEFURk9STV9TRVJWSUNFX1BPUlQgb3IgMzAwMCkuICovXG4gIHBvcnQ/OiBudW1iZXI7XG4gIC8qKiBSZXF1ZXN0IHRpbWVvdXQgbXMgKGRlZmF1bHQgMTAgMDAwIOKAlCBhIGZhbi1vdXQgdG8gbWFueSByZWNpcGllbnRzKS4gKi9cbiAgdGltZW91dD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgdGhlIHJlbGF5IGNsaWVudC4gTmV2ZXIgdGhyb3dzIGZyb20gYHNlbmRgIGZvciBhIHRyYW5zcG9ydCBwcm9ibGVtIOKAlFxuICogaXQgcmVzb2x2ZXMgYHsgb2s6IGZhbHNlIH1gIGFuZCBjb3VudHMgYGVjb3N5c3RlbV9ub3RpZmljYXRpb25fZmFpbGVkX3RvdGFsXG4gKiB7ZXZlbnR9YCBzbyB0aGUgY2FsbGVyICh0aGUgZGlnZXN0IGRpc3BhdGNoZXIpIGNhbiBrZWVwIHRoZSByb3cgZm9yIHJldHJ5LlxuICogSXQgRE9FUyB0aHJvdyBmb3IgYW4gaW52YWxpZCByZXF1ZXN0OiB0aGF0IGlzIGEgcHJvZ3JhbW1pbmcgZXJyb3IsIGFuZFxuICogcmV0cnlpbmcgaXQgd291bGQgbmV2ZXIgc3VjY2VlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVjb3N5c3RlbU5vdGlmeUNsaWVudChjb25maWc6IEVjb3N5c3RlbU5vdGlmeUNsaWVudENvbmZpZyk6IEVjb3N5c3RlbU5vdGlmeUNsaWVudCB7XG4gIGNvbnN0IHNlcnZpY2VDb25maWc6IFNlcnZpY2VDb25maWcgPSB7XG4gICAgaG9zdDogY29uZmlnLmhvc3QgPz8gc2VydmljZUVuZHBvaW50KCdwbGF0Zm9ybScpLmhvc3QsXG4gICAgcG9ydDogY29uZmlnLnBvcnQgPz8gc2VydmljZUVuZHBvaW50KCdwbGF0Zm9ybScpLnBvcnQsXG4gICAgdGltZW91dDogY29uZmlnLnRpbWVvdXQgPz8gMTBfMDAwLFxuICB9O1xuICBjb25zdCBjbGllbnQgPSBjcmVhdGVTYWZlQ2xpZW50KHNlcnZpY2VDb25maWcpO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgc2VuZChyZXF1ZXN0OiBFY29zeXN0ZW1Ob3RpZnlSZXF1ZXN0KTogUHJvbWlzZTxFY29zeXN0ZW1Ob3RpZnlSZXN1bHQ+IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRWNvc3lzdGVtTm90aWZ5UmVxdWVzdChyZXF1ZXN0KTtcbiAgICAgIGlmICh0eXBlb2YgcGFyc2VkID09PSAnc3RyaW5nJykgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVjb3N5c3RlbSBub3RpZmljYXRpb246ICR7cGFyc2VkfWApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gU3lzdGVtLW9yZyBzY29wZWQsIGxlYXN0IHByaXZpbGVnZTogdGhlIHJlbGF5IGF1dGhvcml6ZXMgdGhlIENBTExFUiBieVxuICAgICAgICAvLyBpdHMga2V5LWJvdW5kIHNlcnZpY2UgbmFtZSwgbm90IGJ5IGEgcm9sZSBvciBwZXJtaXNzaW9uIG9uIHRoZSB0b2tlbi5cbiAgICAgICAgY29uc3QgYXV0aG9yaXphdGlvbiA9IGdldFNlcnZpY2VBdXRoSGVhZGVyKHsgc2VydmljZU5hbWU6IGNvbmZpZy5zZXJ2aWNlTmFtZSwgb3JnSWQ6IFNZU1RFTV9PUkdfSUQsIHJvbGU6ICdtZW1iZXInIH0pO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0PHsgZGF0YT86IHsgcmVjaXBpZW50Q291bnQ/OiBudW1iZXIgfTsgcmVjaXBpZW50Q291bnQ/OiBudW1iZXIgfT4oXG4gICAgICAgICAgTk9USUZZX0VNQUlMX1BBVEgsIHBhcnNlZCwgeyBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGF1dGhvcml6YXRpb24gfSB9LFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZT8uc3RhdHVzQ29kZTtcbiAgICAgICAgY29uc3Qgb2sgPSBzdGF0dXMgIT09IHVuZGVmaW5lZCAmJiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgIGVtaXRDb3VudGVyKCdlY29zeXN0ZW1fbm90aWZpY2F0aW9uX2ZhaWxlZF90b3RhbCcsIHsgZXZlbnQ6IHBhcnNlZC5ldmVudCB9KTtcbiAgICAgICAgICBsb2dnZXIud2FybignRWNvc3lzdGVtIG5vdGlmaWNhdGlvbiBub3QgZGVsaXZlcmVkJywgeyBldmVudDogcGFyc2VkLmV2ZW50LCBzdGF0dXM6IHN0YXR1cyA/PyAndW5yZWFjaGFibGUnIH0pO1xuICAgICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgLi4uKHN0YXR1cyAhPT0gdW5kZWZpbmVkID8geyBzdGF0dXMgfSA6IHt9KSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJvZHkgPSByZXNwb25zZSEuYm9keSA/PyB7fTtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50Q291bnQgPSBib2R5LmRhdGE/LnJlY2lwaWVudENvdW50ID8/IGJvZHkucmVjaXBpZW50Q291bnQ7XG4gICAgICAgIHJldHVybiB7IG9rOiB0cnVlLCBzdGF0dXMsIC4uLih0eXBlb2YgcmVjaXBpZW50Q291bnQgPT09ICdudW1iZXInID8geyByZWNpcGllbnRDb3VudCB9IDoge30pIH07XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZW1pdENvdW50ZXIoJ2Vjb3N5c3RlbV9ub3RpZmljYXRpb25fZmFpbGVkX3RvdGFsJywgeyBldmVudDogcGFyc2VkLmV2ZW50IH0pO1xuICAgICAgICBsb2dnZXIud2FybignRWNvc3lzdGVtIG5vdGlmaWNhdGlvbiBmYWlsZWQnLCB7IGV2ZW50OiBwYXJzZWQuZXZlbnQsIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSB9KTtcbiAgICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlIH07XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -77,4 +77,4 @@ class EntityEventEmitter {
|
|
|
77
77
|
}
|
|
78
78
|
/** Singleton entity event emitter — shared across the process */
|
|
79
79
|
export const entityEvents = new EntityEventEmitter();
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWV2ZW50cy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2VudGl0eS1ldmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7QUE4QjdDLE1BQU0sa0JBQWtCO0lBQ2QsV0FBVyxHQUE0QixFQUFFLENBQUM7SUFFbEQ7O09BRUc7SUFDSCxTQUFTLENBQUMsVUFBaUM7UUFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVyxDQUFDLFVBQWlDO1FBQzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxDQUFDLEtBQWtCO1FBQ3JCLEtBQUssTUFBTSxVQUFVLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzVDLHlFQUF5RTtnQkFDekUseUVBQXlFO2dCQUN6RSw0REFBNEQ7Z0JBQzVELFdBQVcsQ0FBQyxzQ0FBc0MsRUFBRTtvQkFDbEQsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO29CQUNwQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7aUJBQzNCLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxFQUFFO29CQUM3QyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07b0JBQ3BCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztvQkFDMUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO29CQUN4QixLQUFLLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztpQkFDekIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBRUQsaUVBQWlFO0FBQ2pFLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBMaWdodHdlaWdodCBpbi1wcm9jZXNzIGV2ZW50IGVtaXR0ZXIgZm9yIGVudGl0eSBsaWZlY3ljbGUgZXZlbnRzLlxuICpcbiAqIFNlcnZpY2VzIGVtaXQgZXZlbnRzIGFmdGVyIG11dGF0aW9ucyAoY3JlYXRlL3VwZGF0ZS9kZWxldGUpIHZpYSBDcnVkU2VydmljZSBob29rcy5cbiAqIFN1YnNjcmliZXJzIHJlYWN0IGFzeW5jaHJvbm91c2x5IHRvIGVudGl0eSBjaGFuZ2VzLlxuICpcbiAqIEFjdGl2ZSBzdWJzY3JpYmVyczpcbiAqIC0gKipDb21wbGlhbmNlIGV2ZW50IHN1YnNjcmliZXIqKiAoYHJlZ2lzdGVyQ29tcGxpYW5jZUV2ZW50U3Vic2NyaWJlcigpYCkg4oCUIGZvcndhcmRzXG4gKiAgIGVudGl0eSBldmVudHMgdG8gdGhlIGNvbXBsaWFuY2Ugc2VydmljZSBmb3IgcG9zdC1tdXRhdGlvbiBydWxlIGV2YWx1YXRpb24uXG4gKiAgIFJlZ2lzdGVyZWQgYXQgc3RhcnR1cCBpbiBwbHVnaW4gYW5kIHBpcGVsaW5lIHNlcnZpY2UgaW5kZXgudHMuXG4gKlxuICogRGVzaWduOlxuICogLSBGaXJlLWFuZC1mb3JnZXQ6IGVtaXQoKSBuZXZlciB0aHJvd3MsIHN1YnNjcmliZXIgZXJyb3JzIGFyZSBsb2dnZWRcbiAqIC0gSW4tcHJvY2VzcyBvbmx5OiBubyBuZXR3b3JrLCBubyBSZWRpcywgbm8gaW5mcmFzdHJ1Y3R1cmVcbiAqIC0gU3Vic2NyaWJlcnMgcnVuIGFzeW5jOiBuZXZlciBibG9jayB0aGUgb3JpZ2luYWwgcmVxdWVzdFxuICpcbiAqIER1cmFiaWxpdHkgY29udHJhY3QgKGRlbGliZXJhdGVseSBCRVNULUVGRk9SVCk6XG4gKiAtIFRoZSBwb3N0LW11dGF0aW9uIGNvbXBsaWFuY2UgZXZhbHVhdGlvbiB0aGlzIGZlZWRzIGlzIE5PVCB0aGUgZW5mb3JjZW1lbnRcbiAqICAgZ2F0ZSDigJQgTElWRSB2YWxpZGF0aW9uIG9uIHRoZSBtdXRhdGlvbiBwYXRoIGFscmVhZHkgZW5mb3JjZXMgY29tcGxpYW5jZVxuICogICBiZWZvcmUgdGhlIHdyaXRlIGNvbW1pdHMuIFRoaXMgYXN5bmMgZmFuLW91dCBpcyBhIGNvbnZlbmllbmNlL3JlcG9ydGluZ1xuICogICBzaWduYWwsIHNvIGEgbG9zdCBkZWxpdmVyeSAoc3Vic2NyaWJlciB0aHJvdywgcHJvY2VzcyBjcmFzaCBtaWQtY2FsbGJhY2spXG4gKiAgIGRvd25ncmFkZXMgdGltZWxpbmVzcywgbm90IGNvcnJlY3RuZXNzLiBCYWNraW5nIGl0IHdpdGggdGhlIGR1cmFibGUgUmVkaXNcbiAqICAgc3Bvb2wgd291bGQgcHVsbCBuZXR3b3JrL2luZnJhIGludG8gYSBtb2R1bGUgd2hvc2Ugd2hvbGUgcG9pbnQgaXMgdG8gaGF2ZVxuICogICBub25lLCBmb3Igbm8gZW5mb3JjZW1lbnQgYmVuZWZpdCDigJQgc28gaW5zdGVhZCBhIGRyb3BwZWQgZGVsaXZlcnkgaXMgbWFkZVxuICogICBPQlNFUlZBQkxFIHZpYSB0aGUgYGVudGl0eV9ldmVudF9zdWJzY3JpYmVyX2ZhaWxlZF90b3RhbGAgY291bnRlciAoYWxlcnQgb25cbiAqICAgYSBzdXN0YWluZWQgcmF0ZSkgcmF0aGVyIHRoYW4gc2lsZW50bHkgc3dhbGxvd2VkIGF0IGRlYnVnIGxldmVsLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbWl0Q291bnRlciB9IGZyb20gJy4uL3V0aWxzL21ldHJpYy1lbWl0dGVyLmpzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdlbnRpdHktZXZlbnRzJyk7XG5cbmV4cG9ydCB0eXBlIEVudGl0eUV2ZW50VHlwZSA9ICdjcmVhdGVkJyB8ICd1cGRhdGVkJyB8ICdkZWxldGVkJztcbmV4cG9ydCB0eXBlIEVudGl0eVRhcmdldCA9ICdwbHVnaW4nIHwgJ3BpcGVsaW5lJyB8ICdtZXNzYWdlJyB8ICdvcmdhbml6YXRpb24nIHwgJ3VzZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUV2ZW50IHtcbiAgLyoqIFRoZSB0eXBlIG9mIG11dGF0aW9uIHRoYXQgb2NjdXJyZWQgKi9cbiAgZXZlbnRUeXBlOiBFbnRpdHlFdmVudFR5cGU7XG4gIC8qKiBUaGUgZW50aXR5IHR5cGUgdGhhdCB3YXMgbXV0YXRlZCAqL1xuICB0YXJnZXQ6IEVudGl0eVRhcmdldDtcbiAgLyoqIFRoZSBlbnRpdHkncyB1bmlxdWUgSUQgKi9cbiAgZW50aXR5SWQ6IHN0cmluZztcbiAgLyoqIFRoZSBvcmdhbml6YXRpb24gdGhhdCBvd25zIHRoaXMgZW50aXR5ICovXG4gIG9yZ0lkOiBzdHJpbmc7XG4gIC8qKiBPcmcg4oaSIHRlYW0gaGllcmFyY2h5OiB0aGUgb3duaW5nIG9yZydzIHBhcmVudCAocHJlc2VudCBvbmx5IHdoZW4gYG9yZ0lkYCBpc1xuICAgKiAgYSB0ZWFtKS4gTGV0cyBjb21wbGlhbmNlIGV2YWx1YXRlIHBhcmVudCBgcHJvcGFnYXRlVG9DaGlsZHJlbmAgcnVsZXMgb24gdGhlXG4gICAqICBhc3luYyBldmVudCBwYXRoLCBtYXRjaGluZyBsaXZlIHZhbGlkYXRpb24uICovXG4gIHBhcmVudE9yZ0lkPzogc3RyaW5nO1xuICAvKiogVGhlIHVzZXIgd2hvIHBlcmZvcm1lZCB0aGUgbXV0YXRpb24gKi9cbiAgdXNlcklkOiBzdHJpbmc7XG4gIC8qKiBXaGVuIHRoZSBldmVudCBvY2N1cnJlZCAqL1xuICB0aW1lc3RhbXA6IERhdGU7XG4gIC8qKiBTbmFwc2hvdCBvZiBlbnRpdHkgYXR0cmlidXRlcyAoZm9yIGNvbXBsaWFuY2UgZXZhbHVhdGlvbikgKi9cbiAgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5RXZlbnRTdWJzY3JpYmVyIHtcbiAgb25FbnRpdHlFdmVudChldmVudDogRW50aXR5RXZlbnQpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5jbGFzcyBFbnRpdHlFdmVudEVtaXR0ZXIge1xuICBwcml2YXRlIHN1YnNjcmliZXJzOiBFbnRpdHlFdmVudFN1YnNjcmliZXJbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHN1YnNjcmliZXIgdG8gcmVjZWl2ZSBlbnRpdHkgZXZlbnRzLlxuICAgKi9cbiAgc3Vic2NyaWJlKHN1YnNjcmliZXI6IEVudGl0eUV2ZW50U3Vic2NyaWJlcik6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaWJlcnMucHVzaChzdWJzY3JpYmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBzdWJzY3JpYmVyLlxuICAgKi9cbiAgdW5zdWJzY3JpYmUoc3Vic2NyaWJlcjogRW50aXR5RXZlbnRTdWJzY3JpYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpYmVycyA9IHRoaXMuc3Vic2NyaWJlcnMuZmlsdGVyKChzKSA9PiBzICE9PSBzdWJzY3JpYmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0IGFuIGVudGl0eSBldmVudCB0byBhbGwgc3Vic2NyaWJlcnMuXG4gICAqIEZpcmUtYW5kLWZvcmdldDogZXJyb3JzIGFyZSBjYXVnaHQgYW5kIGxvZ2dlZCwgbmV2ZXIgdGhyb3duLlxuICAgKi9cbiAgZW1pdChldmVudDogRW50aXR5RXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHN1YnNjcmliZXIgb2YgdGhpcy5zdWJzY3JpYmVycykge1xuICAgICAgc3Vic2NyaWJlci5vbkVudGl0eUV2ZW50KGV2ZW50KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIC8vIE1ha2UgdGhlIGRyb3Agb2JzZXJ2YWJsZSDigJQgYSBsb3N0IGFzeW5jIGNvbXBsaWFuY2UgZXZhbCBpcyBiZXN0LWVmZm9ydFxuICAgICAgICAvLyAobGl2ZSB2YWxpZGF0aW9uIGFscmVhZHkgZW5mb3JjZWQpLCBidXQgYSBzdXN0YWluZWQgZmFpbHVyZSByYXRlIGlzIGFuXG4gICAgICAgIC8vIG9wZXJhdGlvbmFsIHNpZ25hbCwgbm90IHNvbWV0aGluZyB0byBidXJ5IGF0IGRlYnVnIGxldmVsLlxuICAgICAgICBlbWl0Q291bnRlcignZW50aXR5X2V2ZW50X3N1YnNjcmliZXJfZmFpbGVkX3RvdGFsJywge1xuICAgICAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0LFxuICAgICAgICAgIGV2ZW50VHlwZTogZXZlbnQuZXZlbnRUeXBlLFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdFbnRpdHkgZXZlbnQgc3Vic2NyaWJlciBmYWlsZWQnLCB7XG4gICAgICAgICAgdGFyZ2V0OiBldmVudC50YXJnZXQsXG4gICAgICAgICAgZXZlbnRUeXBlOiBldmVudC5ldmVudFR5cGUsXG4gICAgICAgICAgZW50aXR5SWQ6IGV2ZW50LmVudGl0eUlkLFxuICAgICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHN1YnNjcmliZXIgY291bnQgKGZvciB0ZXN0aW5nL2RpYWdub3N0aWNzKS5cbiAgICovXG4gIGdldCBzdWJzY3JpYmVyQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdWJzY3JpYmVycy5sZW5ndGg7XG4gIH1cbn1cblxuLyoqIFNpbmdsZXRvbiBlbnRpdHkgZXZlbnQgZW1pdHRlciDigJQgc2hhcmVkIGFjcm9zcyB0aGUgcHJvY2VzcyAqL1xuZXhwb3J0IGNvbnN0IGVudGl0eUV2ZW50cyA9IG5ldyBFbnRpdHlFdmVudEVtaXR0ZXIoKTtcbiJdfQ==
|
|
@@ -263,4 +263,4 @@ export async function incrWindow(redis, key, windowMs) {
|
|
|
263
263
|
const n = await redis.eval(INCR_WINDOW_SCRIPT, 1, key, Math.max(1, Math.ceil(windowMs)));
|
|
264
264
|
return Number(n);
|
|
265
265
|
}
|
|
266
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LXJlZGlzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2Vudi1yZWRpcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFekM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFFSCxvRUFBb0U7QUFDcEUsTUFBTSxPQUFPLGdCQUFpQixTQUFRLEtBQUs7SUFDekMsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBaUJEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEdBQXVCO0lBQ3BELElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDcEIsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ3ZFLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsTUFBTSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENB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IEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbW9kdWxlJztcblxuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdlbnYtcmVkaXMnKTtcblxuLyoqXG4gKiBUaGUgT05FIHBsYWNlIFJlZGlzIGNvbm5lY3Rpb24gc2V0dGluZ3MgYXJlIHJlYWQgZnJvbSB0aGUgZW52aXJvbm1lbnQuXG4gKlxuICogVHdvIHNoYXBlcywgZXhhY3RseSBvbmUgb2Ygd2hpY2ggbWF5IGJlIHNldDpcbiAqXG4gKiAtICoqU3RhbmRhbG9uZSoqIOKAlCBgUkVESVNfVVJMYCAoYHJlZGlzOi8vaG9zdDo2Mzc5Wy9kYl1gLCBvciBgcmVkaXNzOi8vYCBmb3JcbiAqICAgVExTKS4gQ3JlZGVudGlhbHMgbWF5IHNpdCBpbiB0aGUgVVJMIG9yIGluIGBSRURJU19QQVNTV09SRGAuXG4gKiAtICoqSEEgKFNlbnRpbmVsKSoqIOKAlCBgUkVESVNfU0VOVElORUxTYCAoY29tbWEtc2VwYXJhdGVkIGBob3N0OnBvcnRgKSBwbHVzXG4gKiAgIGBSRURJU19TRU5USU5FTF9NQVNURVJgIChkZWZhdWx0IGBteW1hc3RlcmApIGFuZCBvcHRpb25hbFxuICogICBgUkVESVNfU0VOVElORUxfUEFTU1dPUkRgLiBgUkVESVNfUEFTU1dPUkRgIGF1dGhlbnRpY2F0ZXMgdG8gdGhlIGRhdGEgbm9kZXMuXG4gKiAgIGlvcmVkaXMgZm9sbG93cyB0aGUgbWFzdGVyIGFjcm9zcyBhIGZhaWxvdmVyLlxuICpcbiAqIE5laXRoZXIgc2V0IOKGkiBSZWRpcyBpcyBvZmYsIGFuZCBlYWNoIGNhbGxlciBkZWdyYWRlcyB0byBpdHMgZG9jdW1lbnRlZFxuICogbm8tUmVkaXMgYmVoYXZpb3IuXG4gKlxuICogYFJFRElTX0hPU1RgIC8gYFJFRElTX1BPUlRgIGFyZSBub3QgcmVhZC4gYFJFRElTX0hPU1RgIGlzIHJlZnVzZWQgb3V0cmlnaHQgc28gYVxuICogc3RhbGUgY29uZmlnIGZhaWxzIGF0IHN0YXJ0dXAgaW5zdGVhZCBvZiBzaWxlbnRseSBydW5uaW5nIHdpdGhvdXQgUmVkaXMuXG4gKiBgUkVESVNfUE9SVGAgY2FuJ3QgYmUgcmVmdXNlZDogS3ViZXJuZXRlcyBpbmplY3RzIGBSRURJU19QT1JUPXRjcDovLzxpcD46NjM3OWBcbiAqIGludG8gZXZlcnkgcG9kIGluIGEgbmFtZXNwYWNlIHdpdGggYSBTZXJ2aWNlIG5hbWVkIGByZWRpc2AsIHdoaWNoIGlzIGV4YWN0bHlcbiAqIHdoeSBhIGhvc3QvcG9ydCBwYWlyIHdhcyB1bnNhZmUgdG8gcGFyc2UuXG4gKlxuICogTWlzY29uZmlndXJhdGlvbiB0aHJvd3Mge0BsaW5rIFJlZGlzQ29uZmlnRXJyb3J9LiBXcml0ZXJzIGFuZCByZWFkZXJzIG9mIHRoZVxuICogc2FtZSBrZXlzIChyZXZvY2F0aW9uLCBzdGVwLXVwLCBsZWFkZXIgbG9ja3MpIG11c3QgcmVzb2x2ZSBSZWRpcyBpZGVudGljYWxseTtcbiAqIGEgY29uZmlnIHRoYXQgcXVpZXRseSByZXNvbHZlZCB0byBcIm5vIFJlZGlzXCIgb24gb25lIHNpZGUgaXMgaG93IHJldm9jYXRpb25cbiAqIG9uY2UgZGlkIG5vdGhpbmcgYXQgYWxsLlxuICovXG5cbi8qKiBUaHJvd24gZm9yIGEgUmVkaXMgZW52aXJvbm1lbnQgdGhhdCBjYW4ndCBiZSB1c2VkIGFzIHdyaXR0ZW4uICovXG5leHBvcnQgY2xhc3MgUmVkaXNDb25maWdFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1JlZGlzQ29uZmlnRXJyb3InO1xuICB9XG59XG5cbi8qKiBSZXNvbHZlZCBjb25uZWN0aW9uLCBpbmRlcGVuZGVudCBvZiBhbnkgY2xpZW50IGxpYnJhcnkuICovXG5leHBvcnQgdHlwZSBSZWRpc0Nvbm5lY3Rpb24gPVxuICB8IHtcbiAgICBtb2RlOiAnc2VudGluZWwnO1xuICAgIHNlbnRpbmVsczogQXJyYXk8eyBob3N0OiBzdHJpbmc7IHBvcnQ6IG51bWJlciB9PjtcbiAgICBtYXN0ZXJOYW1lOiBzdHJpbmc7XG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gICAgc2VudGluZWxQYXNzd29yZD86IHN0cmluZztcbiAgfVxuICB8IHtcbiAgICBtb2RlOiAndXJsJztcbiAgICB1cmw6IHN0cmluZztcbiAgICBwYXNzd29yZD86IHN0cmluZztcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSBgUkVESVNfU0VOVElORUxTYCBpbnRvIGB7IGhvc3QsIHBvcnQgfVtdYC4gQmxhbmsgZW50cmllcyBhcmUgc2tpcHBlZCBhbmRcbiAqIGEgbWlzc2luZyBwb3J0IG1lYW5zIHRoZSBTZW50aW5lbCBkZWZhdWx0IDI2Mzc5OyBhIHBvcnQgdGhhdCBpc24ndCBhIHZhbGlkXG4gKiBUQ1AgcG9ydCBpcyBhIGNvbmZpZ3VyYXRpb24gZXJyb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNlbnRpbmVscyhyYXc6IHN0cmluZyB8IHVuZGVmaW5lZCk6IEFycmF5PHsgaG9zdDogc3RyaW5nOyBwb3J0OiBudW1iZXIgfT4ge1xuICBpZiAoIXJhdykgcmV0dXJuIFtdO1xuICByZXR1cm4gcmF3LnNwbGl0KCcsJykubWFwKChzKSA9PiBzLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pLm1hcCgoZW50cnkpID0+IHtcbiAgICBjb25zdCBpZHggPSBlbnRyeS5sYXN0SW5kZXhPZignOicpO1xuICAgIGNvbnN0IGhvc3QgPSBpZHggPT09IC0xID8gZW50cnkgOiBlbnRyeS5zbGljZSgwLCBpZHgpO1xuICAgIGNvbnN0IHBvcnRUZXh0ID0gaWR4ID09PSAtMSA/ICcnIDogZW50cnkuc2xpY2UoaWR4ICsgMSk7XG4gICAgY29uc3QgcG9ydCA9IHBvcnRUZXh0ID09PSAnJyA/IDI2Mzc5IDogTnVtYmVyKHBvcnRUZXh0KTtcbiAgICBpZiAoIWhvc3QgfHwgIU51bWJlci5pc0ludGVnZXIocG9ydCkgfHwgcG9ydCA8IDEgfHwgcG9ydCA+IDY1NTM1KSB7XG4gICAgICB0aHJvdyBuZXcgUmVkaXNDb25maWdFcnJvcihgUkVESVNfU0VOVElORUxTIGVudHJ5IFwiJHtlbnRyeX1cIiBpcyBub3QgaG9zdDpwb3J0YCk7XG4gICAgfVxuICAgIHJldHVybiB7IGhvc3QsIHBvcnQgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgUmVkaXMgY29ubmVjdGlvbiBmcm9tIGBlbnZgLCBvciBgbnVsbGAgd2hlbiBSZWRpcyBpc24ndFxuICogY29uZmlndXJlZC4gVGhyb3dzIHtAbGluayBSZWRpc0NvbmZpZ0Vycm9yfSBmb3IgYW4gdW51c2FibGUgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVSZWRpc0Nvbm5lY3Rpb24oZW52OiBOb2RlSlMuUHJvY2Vzc0VudiA9IHByb2Nlc3MuZW52KTogUmVkaXNDb25uZWN0aW9uIHwgbnVsbCB7XG4gIGlmIChlbnYuUkVESVNfSE9TVCkge1xuICAgIHRocm93IG5ldyBSZWRpc0NvbmZpZ0Vycm9yKFxuICAgICAgJ1JFRElTX0hPU1QgaXMgbm90IHN1cHBvcnRlZC4gU2V0IFJFRElTX1VSTD1yZWRpczovLzxob3N0Pjo8cG9ydD4gKG9yIFJFRElTX1NFTlRJTkVMUyBmb3IgSEEpIGFuZCByZW1vdmUgUkVESVNfSE9TVC9SRURJU19QT1JULicsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHNlbnRpbmVscyA9IHBhcnNlU2VudGluZWxzKGVudi5SRURJU19TRU5USU5FTFMpO1xuICBjb25zdCB1cmwgPSBlbnYuUkVESVNfVVJMPy50cmltKCk7XG4gIGNvbnN0IHBhc3N3b3JkID0gZW52LlJFRElTX1BBU1NXT1JEIHx8IHVuZGVmaW5lZDtcblxuICBpZiAoc2VudGluZWxzLmxlbmd0aCA+IDAgJiYgdXJsKSB7XG4gICAgdGhyb3cgbmV3IFJlZGlzQ29uZmlnRXJyb3IoJ1NldCBSRURJU19VUkwgb3IgUkVESVNfU0VOVElORUxTLCBub3QgYm90aC4nKTtcbiAgfVxuXG4gIGlmIChzZW50aW5lbHMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiAnc2VudGluZWwnLFxuICAgICAgc2VudGluZWxzLFxuICAgICAgbWFzdGVyTmFtZTogZW52LlJFRElTX1NFTlRJTkVMX01BU1RFUiB8fCAnbXltYXN0ZXInLFxuICAgICAgcGFzc3dvcmQsXG4gICAgICBzZW50aW5lbFBhc3N3b3JkOiBlbnYuUkVESVNfU0VOVElORUxfUEFTU1dPUkQgfHwgdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBpZiAodXJsKSB7XG4gICAgbGV0IHBhcnNlZDogVVJMO1xuICAgIHRyeSB7XG4gICAgICBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgUmVkaXNDb25maWdFcnJvcignUkVESVNfVVJMIGlzIG5vdCBhIHZhbGlkIFVSTCAoZXhwZWN0ZWQgcmVkaXM6Ly88aG9zdD46PHBvcnQ+KS4nKTtcbiAgICB9XG4gICAgaWYgKHBhcnNlZC5wcm90b2NvbCAhPT0gJ3JlZGlzOicgJiYgcGFyc2VkLnByb3RvY29sICE9PSAncmVkaXNzOicpIHtcbiAgICAgIHRocm93IG5ldyBSZWRpc0NvbmZpZ0Vycm9yKGBSRURJU19VUkwgbXVzdCB1c2UgcmVkaXM6Ly8gb3IgcmVkaXNzOi8vLCBnb3QgJHtwYXJzZWQucHJvdG9jb2x9Ly9gKTtcbiAgICB9XG4gICAgaWYgKCFwYXJzZWQuaG9zdG5hbWUpIHRocm93IG5ldyBSZWRpc0NvbmZpZ0Vycm9yKCdSRURJU19VUkwgaGFzIG5vIGhvc3QuJyk7XG4gICAgcmV0dXJuIHsgbW9kZTogJ3VybCcsIHVybCwgcGFzc3dvcmQgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKiogQSBsb2ctc2FmZSBkZXNjcmlwdGlvbiBvZiBhIGNvbm5lY3Rpb24gKG5ldmVyIGluY2x1ZGVzIGNyZWRlbnRpYWxzKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXNjcmliZVJlZGlzQ29ubmVjdGlvbihjb25uOiBSZWRpc0Nvbm5lY3Rpb24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGlmIChjb25uLm1vZGUgPT09ICdzZW50aW5lbCcpIHtcbiAgICByZXR1cm4geyBtb2RlOiAnc2VudGluZWwnLCBtYXN0ZXI6IGNvbm4ubWFzdGVyTmFtZSwgc2VudGluZWxzOiBjb25uLnNlbnRpbmVscy5sZW5ndGggfTtcbiAgfVxuICBjb25zdCB1ID0gbmV3IFVSTChjb25uLnVybCk7XG4gIHJldHVybiB7IG1vZGU6ICd1cmwnLCBob3N0OiB1Lmhvc3RuYW1lLCBwb3J0OiB1LnBvcnQgfHwgJzYzNzknLCB0bHM6IHUucHJvdG9jb2wgPT09ICdyZWRpc3M6JyB9O1xufVxuXG50eXBlIFJlZGlzQ3RvcjxUPiA9IG5ldyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBUO1xuXG5mdW5jdGlvbiBsb2FkSW9yZWRpczxUPigpOiBSZWRpc0N0b3I8VD4ge1xuICBjb25zdCByZXEgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG4gIGNvbnN0IG1vZCA9IHJlcSgnaW9yZWRpcycpIGFzIHsgUmVkaXM/OiBSZWRpc0N0b3I8VD47IGRlZmF1bHQ/OiBSZWRpc0N0b3I8VD4gfTtcbiAgcmV0dXJuIChtb2QuUmVkaXMgPz8gbW9kLmRlZmF1bHQgPz8gbW9kKSBhcyBSZWRpc0N0b3I8VD47XG59XG5cbi8qKlxuICogQ29uc3RydWN0IGFuIGlvcmVkaXMgY2xpZW50IGZvciBhIHJlc29sdmVkIGNvbm5lY3Rpb24uIGBvcHRpb25zYCBhcmUgbWVyZ2VkXG4gKiBpbnRvIHRoZSBjbGllbnQgb3B0aW9ucyAoZS5nLiBgeyBkYiwgbWF4UmV0cmllc1BlclJlcXVlc3Q6IG51bGwgfWAgZm9yIEJ1bGxNUSkuXG4gKiBBbiBgZXJyb3JgIGxpc3RlbmVyIGlzIGFsd2F5cyBhdHRhY2hlZCBzbyBhIGRyb3BwZWQgY29ubmVjdGlvbiBpcyBsb2dnZWRcbiAqIHJhdGhlciB0aGFuIHN1cmZhY2luZyBhcyBhbiB1bmhhbmRsZWQgYCdlcnJvcidgIGV2ZW50IHRoYXQgY3Jhc2hlcyBOb2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVkaXNDbGllbnQ8VCA9IHVua25vd24+KFxuICBjb25uOiBSZWRpc0Nvbm5lY3Rpb24sXG4gIGxhYmVsOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30sXG4pOiBUIHtcbiAgY29uc3QgQ3RvciA9IGxvYWRJb3JlZGlzPFQ+KCk7XG4gIGNvbnN0IGF1dGggPSBjb25uLnBhc3N3b3JkID8geyBwYXNzd29yZDogY29ubi5wYXNzd29yZCB9IDoge307XG4gIGNvbnN0IGluc3QgPSBjb25uLm1vZGUgPT09ICdzZW50aW5lbCdcbiAgICA/IG5ldyBDdG9yKHtcbiAgICAgIHNlbnRpbmVsczogY29ubi5zZW50aW5lbHMsXG4gICAgICBuYW1lOiBjb25uLm1hc3Rlck5hbWUsXG4gICAgICAuLi4oY29ubi5zZW50aW5lbFBhc3N3b3JkID8geyBzZW50aW5lbFBhc3N3b3JkOiBjb25uLnNlbnRpbmVsUGFzc3dvcmQgfSA6IHt9KSxcbiAgICAgIC4uLmF1dGgsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pXG4gICAgOiBuZXcgQ3Rvcihjb25uLnVybCwgeyAuLi5hdXRoLCAuLi5vcHRpb25zIH0pO1xuICAoaW5zdCBhcyB1bmtub3duIGFzIHsgb246IChldnQ6IHN0cmluZywgY2I6IChlOiB1bmtub3duKSA9PiB2b2lkKSA9PiB2b2lkIH0pXG4gICAgLm9uKCdlcnJvcicsIChlKSA9PiBsb2dnZXIud2FybihgUmVkaXMgJHtsYWJlbH0gY2xpZW50IGVycm9yYCwgeyBlcnJvcjogZXJyb3JNZXNzYWdlKGUpIH0pKTtcbiAgcmV0dXJuIGluc3Q7XG59XG5cbi8qKlxuICogVGhlIHNoYXJlZCBhcHBsaWNhdGlvbiBSZWRpcyBjbGllbnQ6IGBudWxsYCB3aGVuIFJlZGlzIGlzbid0IGNvbmZpZ3VyZWQsIHNvXG4gKiB0aGUgY2FsbGVyIGRlZ3JhZGVzIHRvIGl0cyBuby1SZWRpcyBiZWhhdmlvci5cbiAqXG4gKiBDb21tYW5kcyBmYWlsIGZhc3QgKGBtYXhSZXRyaWVzUGVyUmVxdWVzdDogMWAsIG5vIG9mZmxpbmUgcXVldWUpIGJlY2F1c2UgdGhlXG4gKiByZXF1ZXN0LXBhdGggY2FsbGVycyBhcmUgYmVzdC1lZmZvcnQgb3IgZmFpbCBjbG9zZWQgb24gdGhlaXIgb3duIHRlcm1zIOKAlCBhXG4gKiByZXF1ZXN0IG11c3Qgbm90IGhhbmcgYmVoaW5kIGEgUmVkaXMgb3V0YWdlLiBUaGF0IGluY2x1ZGVzIHRoZSBtb21lbnRzIGJlZm9yZVxuICogdGhlIGZpcnN0IGNvbm5lY3Rpb24gY29tcGxldGVzOiBhIGJhY2tncm91bmQgY2FsbGVyIHRoYXQgcnVucyBhdCBzdGFydHVwIG11c3RcbiAqIGVpdGhlciB0b2xlcmF0ZSBhIHJlamVjdGVkIGNvbW1hbmQgb3Igd2FpdCB3aXRoIHtAbGluayB3aGVuUmVkaXNSZWFkeX0uXG4gKlxuICogVGhyb3dzIHtAbGluayBSZWRpc0NvbmZpZ0Vycm9yfSBmb3IgYSBiYWQgY29uZmlndXJhdGlvbiwgYW5kIGlmIFJlZGlzIGlzXG4gKiBjb25maWd1cmVkIGJ1dCBgaW9yZWRpc2AgY2FuJ3QgYmUgbG9hZGVkIOKAlCBib3RoIGFyZSBkZXBsb3ltZW50IGVycm9ycyB0aGF0XG4gKiBtdXN0IG5vdCBxdWlldGx5IHR1cm4gUmVkaXMtYmFja2VkIGd1YXJhbnRlZXMgb2ZmLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW52UmVkaXNDbGllbnQ8VCA9IHVua25vd24+KFxuICBsYWJlbDogc3RyaW5nLFxuICBvcHRzOiB7IHJlYWR5R2F0ZT86IGJvb2xlYW47IHJlYWR5VGltZW91dE1zPzogbnVtYmVyIH0gPSB7fSxcbik6IFQgfCBudWxsIHtcbiAgY29uc3QgY29ubiA9IHJlc29sdmVSZWRpc0Nvbm5lY3Rpb24oKTtcbiAgaWYgKCFjb25uKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgaW5zdCA9IGNyZWF0ZVJlZGlzQ2xpZW50PFQ+KGNvbm4sIGxhYmVsLCB7IG1heFJldHJpZXNQZXJSZXF1ZXN0OiAxLCBlbmFibGVPZmZsaW5lUXVldWU6IGZhbHNlIH0pO1xuICBsb2dnZXIuaW5mbyhgUmVkaXMgJHtsYWJlbH0gY2xpZW50IGNyZWF0ZWRgLCBkZXNjcmliZVJlZGlzQ29ubmVjdGlvbihjb25uKSk7XG4gIHJldHVybiBvcHRzLnJlYWR5R2F0ZSA9PT0gZmFsc2VcbiAgICA/IGluc3RcbiAgICA6IHdpdGhSZWFkeUdhdGUoaW5zdCBhcyBUICYgUmVhZHlBd2FyZVJlZGlzLCBjcmVhdGVSZWRpc1JlYWR5R2F0ZShpbnN0IGFzIFJlYWR5QXdhcmVSZWRpcywgb3B0cy5yZWFkeVRpbWVvdXRNcykpO1xufVxuXG4vKiogQ2xpZW50IG1ldGhvZHMgdGhhdCBhcmUgc3luY2hyb25vdXMsIG1hbmFnZSB0aGUgY29ubmVjdGlvbiBpdHNlbGYsIG9yIGJ1aWxkXG4gKiAgYSBiYXRjaCDigJQgbmV2ZXIgZGVmZXJyZWQgYmVoaW5kIHRoZSByZWFkaW5lc3MgZ2F0ZS4gKi9cbmNvbnN0IFVOR0FURURfTUVUSE9EUzogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAnb24nLCAnb25jZScsICdvZmYnLCAnYWRkTGlzdGVuZXInLCAncmVtb3ZlTGlzdGVuZXInLCAncmVtb3ZlQWxsTGlzdGVuZXJzJywgJ2VtaXQnLFxuICAnbGlzdGVuZXJzJywgJ2xpc3RlbmVyQ291bnQnLCAnc2V0TWF4TGlzdGVuZXJzJywgJ2dldE1heExpc3RlbmVycycsICdwcmVwZW5kTGlzdGVuZXInLFxuICAnY29ubmVjdCcsICdkaXNjb25uZWN0JywgJ3F1aXQnLCAnZHVwbGljYXRlJywgJ3BpcGVsaW5lJywgJ211bHRpJywgJ2RlZmluZUNvbW1hbmQnLFxuXSk7XG5cbi8qKlxuICogV3JhcCBhIG5vLW9mZmxpbmUtcXVldWUgY2xpZW50IHNvIGV2ZXJ5IGNvbW1hbmQgZmlyc3Qgd2FpdHMgKGJvdW5kZWQsIG5ldmVyXG4gKiByZWplY3Rpbmcg4oCUIHNlZSB7QGxpbmsgY3JlYXRlUmVkaXNSZWFkeUdhdGV9KSBmb3IgdGhlIGNvbm5lY3Rpb24uIFdpdGhvdXQgaXRcbiAqIHRoZSBmaXJzdCBjb21tYW5kIGEgY2FsbGVyIGlzc3VlcyByaWdodCBhZnRlciBhIGxhenkgY29uc3RydWN0aW9uIGlzIHJlamVjdGVkXG4gKiBvdXRyaWdodCwgZS5nLiBhIHN0YXJ0dXAgY29uc3VtZXItZ3JvdXAgY3JlYXRlIG9yIHRoZSBmaXJzdCBpZGVtcG90ZW5jeSBjaGVjay5cbiAqL1xuZnVuY3Rpb24gd2l0aFJlYWR5R2F0ZTxUIGV4dGVuZHMgb2JqZWN0PihjbGllbnQ6IFQsIHJlYWR5OiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogVCB7XG4gIHJldHVybiBuZXcgUHJveHkoY2xpZW50LCB7XG4gICAgZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcik7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJyB8fCBVTkdBVEVEX01FVEhPRFMuaGFzKHByb3ApKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyB2YWx1ZS5iaW5kKHRhcmdldCkgOiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgIGF3YWl0IHJlYWR5KCk7XG4gICAgICAgIHJldHVybiAodmFsdWUgYXMgKC4uLmE6IHVua25vd25bXSkgPT4gdW5rbm93bikuYXBwbHkodGFyZ2V0LCBhcmdzKTtcbiAgICAgIH07XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKiBUaGUgc3Vic2V0IG9mIGlvcmVkaXMgbmVlZGVkIHRvIHdhaXQgZm9yIGEgY29ubmVjdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhZHlBd2FyZVJlZGlzIHtcbiAgc3RhdHVzPzogc3RyaW5nO1xuICBvbmNlPyhldmVudDogc3RyaW5nLCBjYjogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdm9pZCk6IHVua25vd247XG4gIG9mZj8oZXZlbnQ6IHN0cmluZywgY2I6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHZvaWQpOiB1bmtub3duO1xufVxuXG4vKipcbiAqIFJlc29sdmUgb25jZSBgY2xpZW50YCBpcyBjb25uZWN0ZWQgYW5kIHJlYWR5IGZvciBjb21tYW5kcywgb3IgcmVqZWN0IGFmdGVyXG4gKiBgdGltZW91dE1zYC4gRm9yIHN0YXJ0dXAgd29yayAoY3JlYXRpbmcgYSBjb25zdW1lciBncm91cCwgc3Vic2NyaWJpbmcpIHRoYXRcbiAqIG90aGVyd2lzZSByYWNlcyB0aGUgZmlyc3QgY29ubmVjdGlvbi4gQSBjbGllbnQgd2l0aG91dCBpb3JlZGlzJyBgc3RhdHVzYFxuICogKGUuZy4gYSB0ZXN0IGRvdWJsZSkgY291bnRzIGFzIHJlYWR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2hlblJlZGlzUmVhZHkoY2xpZW50OiBSZWFkeUF3YXJlUmVkaXMsIHRpbWVvdXRNcyA9IDMwXzAwMCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoY2xpZW50LnN0YXR1cyA9PT0gdW5kZWZpbmVkIHx8IGNsaWVudC5zdGF0dXMgPT09ICdyZWFkeScgfHwgIWNsaWVudC5vbmNlKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgb25SZWFkeSA9ICgpID0+IHsgY2xlYXJUaW1lb3V0KHRpbWVyKTsgcmVzb2x2ZSgpOyB9O1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGllbnQub2ZmPy4oJ3JlYWR5Jywgb25SZWFkeSk7XG4gICAgICByZWplY3QobmV3IEVycm9yKGBSZWRpcyBub3QgcmVhZHkgYWZ0ZXIgJHt0aW1lb3V0TXN9bXNgKSk7XG4gICAgfSwgdGltZW91dE1zKTtcbiAgICB0aW1lci51bnJlZj8uKCk7XG4gICAgY2xpZW50Lm9uY2UhKCdyZWFkeScsIG9uUmVhZHkpO1xuICB9KTtcbn1cblxuLyoqIERlZmF1bHQgYm91bmQgZm9yIHtAbGluayBjcmVhdGVSZWRpc1JlYWR5R2F0ZX06IHNob3J0IGVub3VnaCBmb3IgYSByZXF1ZXN0IHBhdGguICovXG5leHBvcnQgY29uc3QgUkVRVUVTVF9QQVRIX1JFRElTX1JFQURZX1RJTUVPVVRfTVMgPSAyXzAwMDtcblxuLyoqXG4gKiBBIHJlcXVlc3QtcGF0aCByZWFkaW5lc3MgZ2F0ZSBmb3IgYSBsYXppbHkgYnVpbHQgZW52IFJlZGlzIGNsaWVudC5cbiAqXG4gKiBUaGUgZW52IGNsaWVudCBoYXMgbm8gb2ZmbGluZSBxdWV1ZSwgc28gYSBjb21tYW5kIGlzc3VlZCBiZWZvcmUgdGhlIGZpcnN0XG4gKiBjb25uZWN0aW9uIGNvbXBsZXRlcyBpcyByZWplY3RlZCBvdXRyaWdodCDigJQgdGhlIGZpcnN0IHJlcXVlc3QgYWZ0ZXIgYSBsYXp5XG4gKiBjb25zdHJ1Y3Rpb24gd291bGQgb3RoZXJ3aXNlIGhpdCB0aGF0IHJlamVjdGlvbiAoZS5nLiB0aGUgZmlyc3Qgc3RlcC11cCBwZXJcbiAqIHBvZCBmYWlsaW5nLCBvciB0aGUgZmlyc3QgaW1wZXJzb25hdGlvbiBjaGVjayByZWFkaW5nIFwidW5hdmFpbGFibGVcIikuXG4gKlxuICogVGhlIHJldHVybmVkIGZ1bmN0aW9uIHJlc29sdmVzIG9uY2UgdGhlIGNsaWVudCBpcyByZWFkeSwgb3IgYWZ0ZXJcbiAqIGB0aW1lb3V0TXNgIOKAlCBpdCBORVZFUiByZWplY3RzOiB0aGUgY2FsbGVyIHRoZW4gcnVucyBpdHMgY29tbWFuZCBhbmQga2VlcHMgaXRzXG4gKiBvd24gZmFpbC1vcGVuIC8gZmFpbC1jbG9zZWQgc2VtYW50aWNzLiBDb25jdXJyZW50IGNhbGxlcnMgc2hhcmUgb25lIHdhaXQuIEFmdGVyXG4gKiBhIHdhaXQgdGltZXMgb3V0IChSZWRpcyBnZW51aW5lbHkgZG93bikgbGF0ZXIgY2FsbHMgc3RvcCB3YWl0aW5nIHVudGlsIHRoZVxuICogY2xpZW50IHJlcG9ydHMgYHJlYWR5YCBhZ2Fpbiwgc28gYW4gb3V0YWdlIGNvc3RzIG9uZSBib3VuZGVkIHdhaXQgaW5zdGVhZCBvZlxuICogYWRkaW5nIGB0aW1lb3V0TXNgIHRvIGV2ZXJ5IHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWRpc1JlYWR5R2F0ZShcbiAgY2xpZW50OiBSZWFkeUF3YXJlUmVkaXMsXG4gIHRpbWVvdXRNcyA9IFJFUVVFU1RfUEFUSF9SRURJU19SRUFEWV9USU1FT1VUX01TLFxuKTogKCkgPT4gUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBpbmZsaWdodDogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuICBsZXQgZ2F2ZVVwID0gZmFsc2U7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKGNsaWVudC5zdGF0dXMgPT09IHVuZGVmaW5lZCB8fCBjbGllbnQuc3RhdHVzID09PSAncmVhZHknIHx8ICFjbGllbnQub25jZSkge1xuICAgICAgZ2F2ZVVwID0gZmFsc2U7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIGlmIChnYXZlVXApIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBpZiAoIWluZmxpZ2h0KSB7XG4gICAgICBpbmZsaWdodCA9IHdoZW5SZWRpc1JlYWR5KGNsaWVudCwgdGltZW91dE1zKVxuICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIGdhdmVVcCA9IHRydWU7XG4gICAgICAgICAgLy8gUmUtYXJtIHRoZSB3YWl0IG9uY2UgdGhlIGNvbm5lY3Rpb24gY29tZXMgYmFjay5cbiAgICAgICAgICBjbGllbnQub25jZSEoJ3JlYWR5JywgKCkgPT4geyBnYXZlVXAgPSBmYWxzZTsgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHsgaW5mbGlnaHQgPSBudWxsOyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGluZmxpZ2h0O1xuICB9O1xufVxuXG4vKiogVGhlIHN1YnNldCBvZiBpb3JlZGlzIG5lZWRlZCBieSB7QGxpbmsgaW5jcldpbmRvd30uICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZGlzRXZhbENsaWVudCB7XG4gIGV2YWwoc2NyaXB0OiBzdHJpbmcsIG51bUtleXM6IG51bWJlciwgLi4uYXJnczogKHN0cmluZyB8IG51bWJlcilbXSk6IFByb21pc2U8dW5rbm93bj47XG59XG5cbi8qKlxuICogSU5DUiBhIGZpeGVkLXdpbmRvdyBjb3VudGVyIGFuZCBtYWtlIHN1cmUgaXQgY2FycmllcyBhIFRUTCwgYXRvbWljYWxseS5cbiAqXG4gKiBBIHNlcGFyYXRlIGBJTkNSYCB0aGVuIGBFWFBJUkVgIGlzIG5vdCBhdG9taWM6IGlmIHRoZSBFWFBJUkUgaXMgbG9zdCAoYVxuICogY29ubmVjdGlvbiBkcm9wLCBhIGZhaWxvdmVyIGJldHdlZW4gdGhlIHR3byBjb21tYW5kcykgdGhlIGtleSBuZXZlciBleHBpcmVzXG4gKiBhbmQgdGhlIGNvdW50ZXIgc3RheXMgb3ZlciBpdHMgbGltaXQgZm9yZXZlci4gVGhlIHNjcmlwdCBhbHNvIGhlYWxzIGEga2V5XG4gKiB0aGF0IHNvbWVob3cgbGFja3MgYSBUVEwgKGBQVFRMYCA9IC0xKSByYXRoZXIgdGhhbiBvbmx5IHNldHRpbmcgaXQgb24gdGhlXG4gKiBmaXJzdCBoaXQuXG4gKi9cbmNvbnN0IElOQ1JfV0lORE9XX1NDUklQVCA9IGBcbmxvY2FsIG4gPSByZWRpcy5jYWxsKCdJTkNSJywgS0VZU1sxXSlcbmlmIG4gPT0gMSBvciByZWRpcy5jYWxsKCdQVFRMJywgS0VZU1sxXSkgPCAwIHRoZW5cbiAgcmVkaXMuY2FsbCgnUEVYUElSRScsIEtFWVNbMV0sIEFSR1ZbMV0pXG5lbmRcbnJldHVybiBuYDtcblxuLyoqXG4gKiBJbmNyZW1lbnQgYGtleWAgd2l0aGluIGEgd2luZG93IG9mIGB3aW5kb3dNc2AgYW5kIHJldHVybiB0aGUgbmV3IGNvdW50LlxuICogVGhyb3dzIHdoZW4gUmVkaXMgZXJyb3JzIOKAlCBjYWxsZXJzIGNob29zZSB0aGVpciBvd24gZmFpbHVyZSBwb2xpY3kuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbmNyV2luZG93KHJlZGlzOiBSZWRpc0V2YWxDbGllbnQsIGtleTogc3RyaW5nLCB3aW5kb3dNczogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgY29uc3QgbiA9IGF3YWl0IHJlZGlzLmV2YWwoSU5DUl9XSU5ET1dfU0NSSVBULCAxLCBrZXksIE1hdGgubWF4KDEsIE1hdGguY2VpbCh3aW5kb3dNcykpKTtcbiAgcmV0dXJuIE51bWJlcihuKTtcbn1cbiJdfQ==
|
|
266
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LXJlZGlzLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvZW52LXJlZGlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUV2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXBELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUV6Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUVILG9FQUFvRTtBQUNwRSxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsS0FBSztJQUN6QyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0NBQ0Y7QUFpQkQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsR0FBdUI7SUFDcEQsSUFBSSxDQUFDLEdBQUc7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNwQixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDdkUsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxNQUFNLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FB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dXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdtb2R1bGUnO1xuXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ2Vudi1yZWRpcycpO1xuXG4vKipcbiAqIFRoZSBPTkUgcGxhY2UgUmVkaXMgY29ubmVjdGlvbiBzZXR0aW5ncyBhcmUgcmVhZCBmcm9tIHRoZSBlbnZpcm9ubWVudC5cbiAqXG4gKiBUd28gc2hhcGVzLCBleGFjdGx5IG9uZSBvZiB3aGljaCBtYXkgYmUgc2V0OlxuICpcbiAqIC0gKipTdGFuZGFsb25lKiog4oCUIGBSRURJU19VUkxgIChgcmVkaXM6Ly9ob3N0OjYzNzlbL2RiXWAsIG9yIGByZWRpc3M6Ly9gIGZvclxuICogICBUTFMpLiBDcmVkZW50aWFscyBtYXkgc2l0IGluIHRoZSBVUkwgb3IgaW4gYFJFRElTX1BBU1NXT1JEYC5cbiAqIC0gKipIQSAoU2VudGluZWwpKiog4oCUIGBSRURJU19TRU5USU5FTFNgIChjb21tYS1zZXBhcmF0ZWQgYGhvc3Q6cG9ydGApIHBsdXNcbiAqICAgYFJFRElTX1NFTlRJTkVMX01BU1RFUmAgKGRlZmF1bHQgYG15bWFzdGVyYCkgYW5kIG9wdGlvbmFsXG4gKiAgIGBSRURJU19TRU5USU5FTF9QQVNTV09SRGAuIGBSRURJU19QQVNTV09SRGAgYXV0aGVudGljYXRlcyB0byB0aGUgZGF0YSBub2Rlcy5cbiAqICAgaW9yZWRpcyBmb2xsb3dzIHRoZSBtYXN0ZXIgYWNyb3NzIGEgZmFpbG92ZXIuXG4gKlxuICogTmVpdGhlciBzZXQg4oaSIFJlZGlzIGlzIG9mZiwgYW5kIGVhY2ggY2FsbGVyIGRlZ3JhZGVzIHRvIGl0cyBkb2N1bWVudGVkXG4gKiBuby1SZWRpcyBiZWhhdmlvci5cbiAqXG4gKiBgUkVESVNfSE9TVGAgLyBgUkVESVNfUE9SVGAgYXJlIG5vdCByZWFkLiBgUkVESVNfSE9TVGAgaXMgcmVmdXNlZCBvdXRyaWdodCBzbyBhXG4gKiBzdGFsZSBjb25maWcgZmFpbHMgYXQgc3RhcnR1cCBpbnN0ZWFkIG9mIHNpbGVudGx5IHJ1bm5pbmcgd2l0aG91dCBSZWRpcy5cbiAqIGBSRURJU19QT1JUYCBjYW4ndCBiZSByZWZ1c2VkOiBLdWJlcm5ldGVzIGluamVjdHMgYFJFRElTX1BPUlQ9dGNwOi8vPGlwPjo2Mzc5YFxuICogaW50byBldmVyeSBwb2QgaW4gYSBuYW1lc3BhY2Ugd2l0aCBhIFNlcnZpY2UgbmFtZWQgYHJlZGlzYCwgd2hpY2ggaXMgZXhhY3RseVxuICogd2h5IGEgaG9zdC9wb3J0IHBhaXIgd2FzIHVuc2FmZSB0byBwYXJzZS5cbiAqXG4gKiBNaXNjb25maWd1cmF0aW9uIHRocm93cyB7QGxpbmsgUmVkaXNDb25maWdFcnJvcn0uIFdyaXRlcnMgYW5kIHJlYWRlcnMgb2YgdGhlXG4gKiBzYW1lIGtleXMgKHJldm9jYXRpb24sIHN0ZXAtdXAsIGxlYWRlciBsb2NrcykgbXVzdCByZXNvbHZlIFJlZGlzIGlkZW50aWNhbGx5O1xuICogYSBjb25maWcgdGhhdCBxdWlldGx5IHJlc29sdmVkIHRvIFwibm8gUmVkaXNcIiBvbiBvbmUgc2lkZSBpcyBob3cgcmV2b2NhdGlvblxuICogb25jZSBkaWQgbm90aGluZyBhdCBhbGwuXG4gKi9cblxuLyoqIFRocm93biBmb3IgYSBSZWRpcyBlbnZpcm9ubWVudCB0aGF0IGNhbid0IGJlIHVzZWQgYXMgd3JpdHRlbi4gKi9cbmV4cG9ydCBjbGFzcyBSZWRpc0NvbmZpZ0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnUmVkaXNDb25maWdFcnJvcic7XG4gIH1cbn1cblxuLyoqIFJlc29sdmVkIGNvbm5lY3Rpb24sIGluZGVwZW5kZW50IG9mIGFueSBjbGllbnQgbGlicmFyeS4gKi9cbmV4cG9ydCB0eXBlIFJlZGlzQ29ubmVjdGlvbiA9XG4gIHwge1xuICAgIG1vZGU6ICdzZW50aW5lbCc7XG4gICAgc2VudGluZWxzOiBBcnJheTx7IGhvc3Q6IHN0cmluZzsgcG9ydDogbnVtYmVyIH0+O1xuICAgIG1hc3Rlck5hbWU6IHN0cmluZztcbiAgICBwYXNzd29yZD86IHN0cmluZztcbiAgICBzZW50aW5lbFBhc3N3b3JkPzogc3RyaW5nO1xuICB9XG4gIHwge1xuICAgIG1vZGU6ICd1cmwnO1xuICAgIHVybDogc3RyaW5nO1xuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xuICB9O1xuXG4vKipcbiAqIFBhcnNlIGBSRURJU19TRU5USU5FTFNgIGludG8gYHsgaG9zdCwgcG9ydCB9W11gLiBCbGFuayBlbnRyaWVzIGFyZSBza2lwcGVkIGFuZFxuICogYSBtaXNzaW5nIHBvcnQgbWVhbnMgdGhlIFNlbnRpbmVsIGRlZmF1bHQgMjYzNzk7IGEgcG9ydCB0aGF0IGlzbid0IGEgdmFsaWRcbiAqIFRDUCBwb3J0IGlzIGEgY29uZmlndXJhdGlvbiBlcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2VudGluZWxzKHJhdzogc3RyaW5nIHwgdW5kZWZpbmVkKTogQXJyYXk8eyBob3N0OiBzdHJpbmc7IHBvcnQ6IG51bWJlciB9PiB7XG4gIGlmICghcmF3KSByZXR1cm4gW107XG4gIHJldHVybiByYXcuc3BsaXQoJywnKS5tYXAoKHMpID0+IHMudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikubWFwKChlbnRyeSkgPT4ge1xuICAgIGNvbnN0IGlkeCA9IGVudHJ5Lmxhc3RJbmRleE9mKCc6Jyk7XG4gICAgY29uc3QgaG9zdCA9IGlkeCA9PT0gLTEgPyBlbnRyeSA6IGVudHJ5LnNsaWNlKDAsIGlkeCk7XG4gICAgY29uc3QgcG9ydFRleHQgPSBpZHggPT09IC0xID8gJycgOiBlbnRyeS5zbGljZShpZHggKyAxKTtcbiAgICBjb25zdCBwb3J0ID0gcG9ydFRleHQgPT09ICcnID8gMjYzNzkgOiBOdW1iZXIocG9ydFRleHQpO1xuICAgIGlmICghaG9zdCB8fCAhTnVtYmVyLmlzSW50ZWdlcihwb3J0KSB8fCBwb3J0IDwgMSB8fCBwb3J0ID4gNjU1MzUpIHtcbiAgICAgIHRocm93IG5ldyBSZWRpc0NvbmZpZ0Vycm9yKGBSRURJU19TRU5USU5FTFMgZW50cnkgXCIke2VudHJ5fVwiIGlzIG5vdCBob3N0OnBvcnRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgaG9zdCwgcG9ydCB9O1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBSZWRpcyBjb25uZWN0aW9uIGZyb20gYGVudmAsIG9yIGBudWxsYCB3aGVuIFJlZGlzIGlzbid0XG4gKiBjb25maWd1cmVkLiBUaHJvd3Mge0BsaW5rIFJlZGlzQ29uZmlnRXJyb3J9IGZvciBhbiB1bnVzYWJsZSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVJlZGlzQ29ubmVjdGlvbihlbnY6IE5vZGVKUy5Qcm9jZXNzRW52ID0gcHJvY2Vzcy5lbnYpOiBSZWRpc0Nvbm5lY3Rpb24gfCBudWxsIHtcbiAgaWYgKGVudi5SRURJU19IT1NUKSB7XG4gICAgdGhyb3cgbmV3IFJlZGlzQ29uZmlnRXJyb3IoXG4gICAgICAnUkVESVNfSE9TVCBpcyBub3Qgc3VwcG9ydGVkLiBTZXQgUkVESVNfVVJMPXJlZGlzOi8vPGhvc3Q+Ojxwb3J0PiAob3IgUkVESVNfU0VOVElORUxTIGZvciBIQSkgYW5kIHJlbW92ZSBSRURJU19IT1NUL1JFRElTX1BPUlQuJyxcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgc2VudGluZWxzID0gcGFyc2VTZW50aW5lbHMoZW52LlJFRElTX1NFTlRJTkVMUyk7XG4gIGNvbnN0IHVybCA9IGVudi5SRURJU19VUkw/LnRyaW0oKTtcbiAgY29uc3QgcGFzc3dvcmQgPSBlbnYuUkVESVNfUEFTU1dPUkQgfHwgdW5kZWZpbmVkO1xuXG4gIGlmIChzZW50aW5lbHMubGVuZ3RoID4gMCAmJiB1cmwpIHtcbiAgICB0aHJvdyBuZXcgUmVkaXNDb25maWdFcnJvcignU2V0IFJFRElTX1VSTCBvciBSRURJU19TRU5USU5FTFMsIG5vdCBib3RoLicpO1xuICB9XG5cbiAgaWYgKHNlbnRpbmVscy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6ICdzZW50aW5lbCcsXG4gICAgICBzZW50aW5lbHMsXG4gICAgICBtYXN0ZXJOYW1lOiBlbnYuUkVESVNfU0VOVElORUxfTUFTVEVSIHx8ICdteW1hc3RlcicsXG4gICAgICBwYXNzd29yZCxcbiAgICAgIHNlbnRpbmVsUGFzc3dvcmQ6IGVudi5SRURJU19TRU5USU5FTF9QQVNTV09SRCB8fCB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGlmICh1cmwpIHtcbiAgICBsZXQgcGFyc2VkOiBVUkw7XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBSZWRpc0NvbmZpZ0Vycm9yKCdSRURJU19VUkwgaXMgbm90IGEgdmFsaWQgVVJMIChleHBlY3RlZCByZWRpczovLzxob3N0Pjo8cG9ydD4pLicpO1xuICAgIH1cbiAgICBpZiAocGFyc2VkLnByb3RvY29sICE9PSAncmVkaXM6JyAmJiBwYXJzZWQucHJvdG9jb2wgIT09ICdyZWRpc3M6Jykge1xuICAgICAgdGhyb3cgbmV3IFJlZGlzQ29uZmlnRXJyb3IoYFJFRElTX1VSTCBtdXN0IHVzZSByZWRpczovLyBvciByZWRpc3M6Ly8sIGdvdCAke3BhcnNlZC5wcm90b2NvbH0vL2ApO1xuICAgIH1cbiAgICBpZiAoIXBhcnNlZC5ob3N0bmFtZSkgdGhyb3cgbmV3IFJlZGlzQ29uZmlnRXJyb3IoJ1JFRElTX1VSTCBoYXMgbm8gaG9zdC4nKTtcbiAgICByZXR1cm4geyBtb2RlOiAndXJsJywgdXJsLCBwYXNzd29yZCB9O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKiBBIGxvZy1zYWZlIGRlc2NyaXB0aW9uIG9mIGEgY29ubmVjdGlvbiAobmV2ZXIgaW5jbHVkZXMgY3JlZGVudGlhbHMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlUmVkaXNDb25uZWN0aW9uKGNvbm46IFJlZGlzQ29ubmVjdGlvbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgaWYgKGNvbm4ubW9kZSA9PT0gJ3NlbnRpbmVsJykge1xuICAgIHJldHVybiB7IG1vZGU6ICdzZW50aW5lbCcsIG1hc3RlcjogY29ubi5tYXN0ZXJOYW1lLCBzZW50aW5lbHM6IGNvbm4uc2VudGluZWxzLmxlbmd0aCB9O1xuICB9XG4gIGNvbnN0IHUgPSBuZXcgVVJMKGNvbm4udXJsKTtcbiAgcmV0dXJuIHsgbW9kZTogJ3VybCcsIGhvc3Q6IHUuaG9zdG5hbWUsIHBvcnQ6IHUucG9ydCB8fCAnNjM3OScsIHRsczogdS5wcm90b2NvbCA9PT0gJ3JlZGlzczonIH07XG59XG5cbnR5cGUgUmVkaXNDdG9yPFQ+ID0gbmV3ICguLi5hcmdzOiB1bmtub3duW10pID0+IFQ7XG5cbmZ1bmN0aW9uIGxvYWRJb3JlZGlzPFQ+KCk6IFJlZGlzQ3RvcjxUPiB7XG4gIGNvbnN0IHJlcSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcbiAgY29uc3QgbW9kID0gcmVxKCdpb3JlZGlzJykgYXMgeyBSZWRpcz86IFJlZGlzQ3RvcjxUPjsgZGVmYXVsdD86IFJlZGlzQ3RvcjxUPiB9O1xuICByZXR1cm4gKG1vZC5SZWRpcyA/PyBtb2QuZGVmYXVsdCA/PyBtb2QpIGFzIFJlZGlzQ3RvcjxUPjtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgYW4gaW9yZWRpcyBjbGllbnQgZm9yIGEgcmVzb2x2ZWQgY29ubmVjdGlvbi4gYG9wdGlvbnNgIGFyZSBtZXJnZWRcbiAqIGludG8gdGhlIGNsaWVudCBvcHRpb25zIChlLmcuIGB7IGRiLCBtYXhSZXRyaWVzUGVyUmVxdWVzdDogbnVsbCB9YCBmb3IgQnVsbE1RKS5cbiAqIEFuIGBlcnJvcmAgbGlzdGVuZXIgaXMgYWx3YXlzIGF0dGFjaGVkIHNvIGEgZHJvcHBlZCBjb25uZWN0aW9uIGlzIGxvZ2dlZFxuICogcmF0aGVyIHRoYW4gc3VyZmFjaW5nIGFzIGFuIHVuaGFuZGxlZCBgJ2Vycm9yJ2AgZXZlbnQgdGhhdCBjcmFzaGVzIE5vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWRpc0NsaWVudDxUID0gdW5rbm93bj4oXG4gIGNvbm46IFJlZGlzQ29ubmVjdGlvbixcbiAgbGFiZWw6IHN0cmluZyxcbiAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSxcbik6IFQge1xuICBjb25zdCBDdG9yID0gbG9hZElvcmVkaXM8VD4oKTtcbiAgY29uc3QgYXV0aCA9IGNvbm4ucGFzc3dvcmQgPyB7IHBhc3N3b3JkOiBjb25uLnBhc3N3b3JkIH0gOiB7fTtcbiAgY29uc3QgaW5zdCA9IGNvbm4ubW9kZSA9PT0gJ3NlbnRpbmVsJ1xuICAgID8gbmV3IEN0b3Ioe1xuICAgICAgc2VudGluZWxzOiBjb25uLnNlbnRpbmVscyxcbiAgICAgIG5hbWU6IGNvbm4ubWFzdGVyTmFtZSxcbiAgICAgIC4uLihjb25uLnNlbnRpbmVsUGFzc3dvcmQgPyB7IHNlbnRpbmVsUGFzc3dvcmQ6IGNvbm4uc2VudGluZWxQYXNzd29yZCB9IDoge30pLFxuICAgICAgLi4uYXV0aCxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSlcbiAgICA6IG5ldyBDdG9yKGNvbm4udXJsLCB7IC4uLmF1dGgsIC4uLm9wdGlvbnMgfSk7XG4gIChpbnN0IGFzIHVua25vd24gYXMgeyBvbjogKGV2dDogc3RyaW5nLCBjYjogKGU6IHVua25vd24pID0+IHZvaWQpID0+IHZvaWQgfSlcbiAgICAub24oJ2Vycm9yJywgKGUpID0+IGxvZ2dlci53YXJuKGBSZWRpcyAke2xhYmVsfSBjbGllbnQgZXJyb3JgLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UoZSkgfSkpO1xuICByZXR1cm4gaW5zdDtcbn1cblxuLyoqXG4gKiBUaGUgc2hhcmVkIGFwcGxpY2F0aW9uIFJlZGlzIGNsaWVudDogYG51bGxgIHdoZW4gUmVkaXMgaXNuJ3QgY29uZmlndXJlZCwgc29cbiAqIHRoZSBjYWxsZXIgZGVncmFkZXMgdG8gaXRzIG5vLVJlZGlzIGJlaGF2aW9yLlxuICpcbiAqIENvbW1hbmRzIGZhaWwgZmFzdCAoYG1heFJldHJpZXNQZXJSZXF1ZXN0OiAxYCwgbm8gb2ZmbGluZSBxdWV1ZSkgYmVjYXVzZSB0aGVcbiAqIHJlcXVlc3QtcGF0aCBjYWxsZXJzIGFyZSBiZXN0LWVmZm9ydCBvciBmYWlsIGNsb3NlZCBvbiB0aGVpciBvd24gdGVybXMg4oCUIGFcbiAqIHJlcXVlc3QgbXVzdCBub3QgaGFuZyBiZWhpbmQgYSBSZWRpcyBvdXRhZ2UuIFRoYXQgaW5jbHVkZXMgdGhlIG1vbWVudHMgYmVmb3JlXG4gKiB0aGUgZmlyc3QgY29ubmVjdGlvbiBjb21wbGV0ZXM6IGEgYmFja2dyb3VuZCBjYWxsZXIgdGhhdCBydW5zIGF0IHN0YXJ0dXAgbXVzdFxuICogZWl0aGVyIHRvbGVyYXRlIGEgcmVqZWN0ZWQgY29tbWFuZCBvciB3YWl0IHdpdGgge0BsaW5rIHdoZW5SZWRpc1JlYWR5fS5cbiAqXG4gKiBUaHJvd3Mge0BsaW5rIFJlZGlzQ29uZmlnRXJyb3J9IGZvciBhIGJhZCBjb25maWd1cmF0aW9uLCBhbmQgaWYgUmVkaXMgaXNcbiAqIGNvbmZpZ3VyZWQgYnV0IGBpb3JlZGlzYCBjYW4ndCBiZSBsb2FkZWQg4oCUIGJvdGggYXJlIGRlcGxveW1lbnQgZXJyb3JzIHRoYXRcbiAqIG11c3Qgbm90IHF1aWV0bHkgdHVybiBSZWRpcy1iYWNrZWQgZ3VhcmFudGVlcyBvZmYuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbnZSZWRpc0NsaWVudDxUID0gdW5rbm93bj4oXG4gIGxhYmVsOiBzdHJpbmcsXG4gIG9wdHM6IHsgcmVhZHlHYXRlPzogYm9vbGVhbjsgcmVhZHlUaW1lb3V0TXM/OiBudW1iZXIgfSA9IHt9LFxuKTogVCB8IG51bGwge1xuICBjb25zdCBjb25uID0gcmVzb2x2ZVJlZGlzQ29ubmVjdGlvbigpO1xuICBpZiAoIWNvbm4pIHJldHVybiBudWxsO1xuICBjb25zdCBpbnN0ID0gY3JlYXRlUmVkaXNDbGllbnQ8VD4oY29ubiwgbGFiZWwsIHsgbWF4UmV0cmllc1BlclJlcXVlc3Q6IDEsIGVuYWJsZU9mZmxpbmVRdWV1ZTogZmFsc2UgfSk7XG4gIGxvZ2dlci5pbmZvKGBSZWRpcyAke2xhYmVsfSBjbGllbnQgY3JlYXRlZGAsIGRlc2NyaWJlUmVkaXNDb25uZWN0aW9uKGNvbm4pKTtcbiAgcmV0dXJuIG9wdHMucmVhZHlHYXRlID09PSBmYWxzZVxuICAgID8gaW5zdFxuICAgIDogd2l0aFJlYWR5R2F0ZShpbnN0IGFzIFQgJiBSZWFkeUF3YXJlUmVkaXMsIGNyZWF0ZVJlZGlzUmVhZHlHYXRlKGluc3QgYXMgUmVhZHlBd2FyZVJlZGlzLCBvcHRzLnJlYWR5VGltZW91dE1zKSk7XG59XG5cbi8qKiBDbGllbnQgbWV0aG9kcyB0aGF0IGFyZSBzeW5jaHJvbm91cywgbWFuYWdlIHRoZSBjb25uZWN0aW9uIGl0c2VsZiwgb3IgYnVpbGRcbiAqICBhIGJhdGNoIOKAlCBuZXZlciBkZWZlcnJlZCBiZWhpbmQgdGhlIHJlYWRpbmVzcyBnYXRlLiAqL1xuY29uc3QgVU5HQVRFRF9NRVRIT0RTOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICdvbicsICdvbmNlJywgJ29mZicsICdhZGRMaXN0ZW5lcicsICdyZW1vdmVMaXN0ZW5lcicsICdyZW1vdmVBbGxMaXN0ZW5lcnMnLCAnZW1pdCcsXG4gICdsaXN0ZW5lcnMnLCAnbGlzdGVuZXJDb3VudCcsICdzZXRNYXhMaXN0ZW5lcnMnLCAnZ2V0TWF4TGlzdGVuZXJzJywgJ3ByZXBlbmRMaXN0ZW5lcicsXG4gICdjb25uZWN0JywgJ2Rpc2Nvbm5lY3QnLCAncXVpdCcsICdkdXBsaWNhdGUnLCAncGlwZWxpbmUnLCAnbXVsdGknLCAnZGVmaW5lQ29tbWFuZCcsXG5dKTtcblxuLyoqXG4gKiBXcmFwIGEgbm8tb2ZmbGluZS1xdWV1ZSBjbGllbnQgc28gZXZlcnkgY29tbWFuZCBmaXJzdCB3YWl0cyAoYm91bmRlZCwgbmV2ZXJcbiAqIHJlamVjdGluZyDigJQgc2VlIHtAbGluayBjcmVhdGVSZWRpc1JlYWR5R2F0ZX0pIGZvciB0aGUgY29ubmVjdGlvbi4gV2l0aG91dCBpdFxuICogdGhlIGZpcnN0IGNvbW1hbmQgYSBjYWxsZXIgaXNzdWVzIHJpZ2h0IGFmdGVyIGEgbGF6eSBjb25zdHJ1Y3Rpb24gaXMgcmVqZWN0ZWRcbiAqIG91dHJpZ2h0LCBlLmcuIGEgc3RhcnR1cCBjb25zdW1lci1ncm91cCBjcmVhdGUgb3IgdGhlIGZpcnN0IGlkZW1wb3RlbmN5IGNoZWNrLlxuICovXG5mdW5jdGlvbiB3aXRoUmVhZHlHYXRlPFQgZXh0ZW5kcyBvYmplY3Q+KGNsaWVudDogVCwgcmVhZHk6ICgpID0+IFByb21pc2U8dm9pZD4pOiBUIHtcbiAgcmV0dXJuIG5ldyBQcm94eShjbGllbnQsIHtcbiAgICBnZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHByb3AgIT09ICdzdHJpbmcnIHx8IFVOR0FURURfTUVUSE9EUy5oYXMocHJvcCkpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLmJpbmQodGFyZ2V0KSA6IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgICAgYXdhaXQgcmVhZHkoKTtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSBhcyAoLi4uYTogdW5rbm93bltdKSA9PiB1bmtub3duKS5hcHBseSh0YXJnZXQsIGFyZ3MpO1xuICAgICAgfTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqIFRoZSBzdWJzZXQgb2YgaW9yZWRpcyBuZWVkZWQgdG8gd2FpdCBmb3IgYSBjb25uZWN0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFkeUF3YXJlUmVkaXMge1xuICBzdGF0dXM/OiBzdHJpbmc7XG4gIG9uY2U/KGV2ZW50OiBzdHJpbmcsIGNiOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB2b2lkKTogdW5rbm93bjtcbiAgb2ZmPyhldmVudDogc3RyaW5nLCBjYjogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdm9pZCk6IHVua25vd247XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvbmNlIGBjbGllbnRgIGlzIGNvbm5lY3RlZCBhbmQgcmVhZHkgZm9yIGNvbW1hbmRzLCBvciByZWplY3QgYWZ0ZXJcbiAqIGB0aW1lb3V0TXNgLiBGb3Igc3RhcnR1cCB3b3JrIChjcmVhdGluZyBhIGNvbnN1bWVyIGdyb3VwLCBzdWJzY3JpYmluZykgdGhhdFxuICogb3RoZXJ3aXNlIHJhY2VzIHRoZSBmaXJzdCBjb25uZWN0aW9uLiBBIGNsaWVudCB3aXRob3V0IGlvcmVkaXMnIGBzdGF0dXNgXG4gKiAoZS5nLiBhIHRlc3QgZG91YmxlKSBjb3VudHMgYXMgcmVhZHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGVuUmVkaXNSZWFkeShjbGllbnQ6IFJlYWR5QXdhcmVSZWRpcywgdGltZW91dE1zID0gMzBfMDAwKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChjbGllbnQuc3RhdHVzID09PSB1bmRlZmluZWQgfHwgY2xpZW50LnN0YXR1cyA9PT0gJ3JlYWR5JyB8fCAhY2xpZW50Lm9uY2UpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBvblJlYWR5ID0gKCkgPT4geyBjbGVhclRpbWVvdXQodGltZXIpOyByZXNvbHZlKCk7IH07XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNsaWVudC5vZmY/LigncmVhZHknLCBvblJlYWR5KTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoYFJlZGlzIG5vdCByZWFkeSBhZnRlciAke3RpbWVvdXRNc31tc2ApKTtcbiAgICB9LCB0aW1lb3V0TXMpO1xuICAgIHRpbWVyLnVucmVmPy4oKTtcbiAgICBjbGllbnQub25jZSEoJ3JlYWR5Jywgb25SZWFkeSk7XG4gIH0pO1xufVxuXG4vKiogRGVmYXVsdCBib3VuZCBmb3Ige0BsaW5rIGNyZWF0ZVJlZGlzUmVhZHlHYXRlfTogc2hvcnQgZW5vdWdoIGZvciBhIHJlcXVlc3QgcGF0aC4gKi9cbmV4cG9ydCBjb25zdCBSRVFVRVNUX1BBVEhfUkVESVNfUkVBRFlfVElNRU9VVF9NUyA9IDJfMDAwO1xuXG4vKipcbiAqIEEgcmVxdWVzdC1wYXRoIHJlYWRpbmVzcyBnYXRlIGZvciBhIGxhemlseSBidWlsdCBlbnYgUmVkaXMgY2xpZW50LlxuICpcbiAqIFRoZSBlbnYgY2xpZW50IGhhcyBubyBvZmZsaW5lIHF1ZXVlLCBzbyBhIGNvbW1hbmQgaXNzdWVkIGJlZm9yZSB0aGUgZmlyc3RcbiAqIGNvbm5lY3Rpb24gY29tcGxldGVzIGlzIHJlamVjdGVkIG91dHJpZ2h0IOKAlCB0aGUgZmlyc3QgcmVxdWVzdCBhZnRlciBhIGxhenlcbiAqIGNvbnN0cnVjdGlvbiB3b3VsZCBvdGhlcndpc2UgaGl0IHRoYXQgcmVqZWN0aW9uIChlLmcuIHRoZSBmaXJzdCBzdGVwLXVwIHBlclxuICogcG9kIGZhaWxpbmcsIG9yIHRoZSBmaXJzdCBpbXBlcnNvbmF0aW9uIGNoZWNrIHJlYWRpbmcgXCJ1bmF2YWlsYWJsZVwiKS5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gcmVzb2x2ZXMgb25jZSB0aGUgY2xpZW50IGlzIHJlYWR5LCBvciBhZnRlclxuICogYHRpbWVvdXRNc2Ag4oCUIGl0IE5FVkVSIHJlamVjdHM6IHRoZSBjYWxsZXIgdGhlbiBydW5zIGl0cyBjb21tYW5kIGFuZCBrZWVwcyBpdHNcbiAqIG93biBmYWlsLW9wZW4gLyBmYWlsLWNsb3NlZCBzZW1hbnRpY3MuIENvbmN1cnJlbnQgY2FsbGVycyBzaGFyZSBvbmUgd2FpdC4gQWZ0ZXJcbiAqIGEgd2FpdCB0aW1lcyBvdXQgKFJlZGlzIGdlbnVpbmVseSBkb3duKSBsYXRlciBjYWxscyBzdG9wIHdhaXRpbmcgdW50aWwgdGhlXG4gKiBjbGllbnQgcmVwb3J0cyBgcmVhZHlgIGFnYWluLCBzbyBhbiBvdXRhZ2UgY29zdHMgb25lIGJvdW5kZWQgd2FpdCBpbnN0ZWFkIG9mXG4gKiBhZGRpbmcgYHRpbWVvdXRNc2AgdG8gZXZlcnkgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlZGlzUmVhZHlHYXRlKFxuICBjbGllbnQ6IFJlYWR5QXdhcmVSZWRpcyxcbiAgdGltZW91dE1zID0gUkVRVUVTVF9QQVRIX1JFRElTX1JFQURZX1RJTUVPVVRfTVMsXG4pOiAoKSA9PiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IGluZmxpZ2h0OiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG4gIGxldCBnYXZlVXAgPSBmYWxzZTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAoY2xpZW50LnN0YXR1cyA9PT0gdW5kZWZpbmVkIHx8IGNsaWVudC5zdGF0dXMgPT09ICdyZWFkeScgfHwgIWNsaWVudC5vbmNlKSB7XG4gICAgICBnYXZlVXAgPSBmYWxzZTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgaWYgKGdhdmVVcCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIGlmICghaW5mbGlnaHQpIHtcbiAgICAgIGluZmxpZ2h0ID0gd2hlblJlZGlzUmVhZHkoY2xpZW50LCB0aW1lb3V0TXMpXG4gICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgZ2F2ZVVwID0gdHJ1ZTtcbiAgICAgICAgICAvLyBSZS1hcm0gdGhlIHdhaXQgb25jZSB0aGUgY29ubmVjdGlvbiBjb21lcyBiYWNrLlxuICAgICAgICAgIGNsaWVudC5vbmNlISgncmVhZHknLCAoKSA9PiB7IGdhdmVVcCA9IGZhbHNlOyB9KTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4geyBpbmZsaWdodCA9IG51bGw7IH0pO1xuICAgIH1cbiAgICByZXR1cm4gaW5mbGlnaHQ7XG4gIH07XG59XG5cbi8qKiBUaGUgc3Vic2V0IG9mIGlvcmVkaXMgbmVlZGVkIGJ5IHtAbGluayBpbmNyV2luZG93fS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVkaXNFdmFsQ2xpZW50IHtcbiAgZXZhbChzY3JpcHQ6IHN0cmluZywgbnVtS2V5czogbnVtYmVyLCAuLi5hcmdzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogUHJvbWlzZTx1bmtub3duPjtcbn1cblxuLyoqXG4gKiBJTkNSIGEgZml4ZWQtd2luZG93IGNvdW50ZXIgYW5kIG1ha2Ugc3VyZSBpdCBjYXJyaWVzIGEgVFRMLCBhdG9taWNhbGx5LlxuICpcbiAqIEEgc2VwYXJhdGUgYElOQ1JgIHRoZW4gYEVYUElSRWAgaXMgbm90IGF0b21pYzogaWYgdGhlIEVYUElSRSBpcyBsb3N0IChhXG4gKiBjb25uZWN0aW9uIGRyb3AsIGEgZmFpbG92ZXIgYmV0d2VlbiB0aGUgdHdvIGNvbW1hbmRzKSB0aGUga2V5IG5ldmVyIGV4cGlyZXNcbiAqIGFuZCB0aGUgY291bnRlciBzdGF5cyBvdmVyIGl0cyBsaW1pdCBmb3JldmVyLiBUaGUgc2NyaXB0IGFsc28gaGVhbHMgYSBrZXlcbiAqIHRoYXQgc29tZWhvdyBsYWNrcyBhIFRUTCAoYFBUVExgID0gLTEpIHJhdGhlciB0aGFuIG9ubHkgc2V0dGluZyBpdCBvbiB0aGVcbiAqIGZpcnN0IGhpdC5cbiAqL1xuY29uc3QgSU5DUl9XSU5ET1dfU0NSSVBUID0gYFxubG9jYWwgbiA9IHJlZGlzLmNhbGwoJ0lOQ1InLCBLRVlTWzFdKVxuaWYgbiA9PSAxIG9yIHJlZGlzLmNhbGwoJ1BUVEwnLCBLRVlTWzFdKSA8IDAgdGhlblxuICByZWRpcy5jYWxsKCdQRVhQSVJFJywgS0VZU1sxXSwgQVJHVlsxXSlcbmVuZFxucmV0dXJuIG5gO1xuXG4vKipcbiAqIEluY3JlbWVudCBga2V5YCB3aXRoaW4gYSB3aW5kb3cgb2YgYHdpbmRvd01zYCBhbmQgcmV0dXJuIHRoZSBuZXcgY291bnQuXG4gKiBUaHJvd3Mgd2hlbiBSZWRpcyBlcnJvcnMg4oCUIGNhbGxlcnMgY2hvb3NlIHRoZWlyIG93biBmYWlsdXJlIHBvbGljeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluY3JXaW5kb3cocmVkaXM6IFJlZGlzRXZhbENsaWVudCwga2V5OiBzdHJpbmcsIHdpbmRvd01zOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xuICBjb25zdCBuID0gYXdhaXQgcmVkaXMuZXZhbChJTkNSX1dJTkRPV19TQ1JJUFQsIDEsIGtleSwgTWF0aC5tYXgoMSwgTWF0aC5jZWlsKHdpbmRvd01zKSkpO1xuICByZXR1cm4gTnVtYmVyKG4pO1xufVxuIl19
|