UNPKG

@aws-cdk/aws-glue-alpha

Version:

The CDK Construct Library for AWS::Glue

153 lines 19.5 kB
"use strict"; var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) { var useValue = arguments.length > 2; for (var i = 0; i < initializers.length; i++) { value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); } return useValue ? value : void 0; }; var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); var _, done = false; for (var i = decorators.length - 1; i >= 0; i--) { var context = {}; for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; for (var p in contextIn.access) context.access[p] = contextIn.access[p]; context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); if (kind === "accessor") { if (result === void 0) continue; if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } } if (target) Object.defineProperty(target, contextIn.name, descriptor); done = true; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.RayJob = void 0; const jsiiDeprecationWarnings = require("../../.warnings.jsii.js"); const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const aws_glue_1 = require("aws-cdk-lib/aws-glue"); const core_1 = require("aws-cdk-lib/core"); const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal"); const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource"); const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable"); const job_1 = require("./job"); const constants_1 = require("../constants"); /** * Ray Jobs class * * Glue Ray jobs use worker type Z.2X and Glue version 4.0. * These are not overrideable since these are the only configuration that * Glue Ray jobs currently support. The runtime defaults to Ray2.4 and min * workers defaults to 3. */ let RayJob = (() => { let _classDecorators = [prop_injectable_1.propertyInjectable]; let _classDescriptor; let _classExtraInitializers = []; let _classThis; let _classSuper = job_1.Job; let _instanceExtraInitializers = []; let _get_jobArn_decorators; let _get_jobName_decorators; var RayJob = class extends _classSuper { static { _classThis = this; } static { const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0; _get_jobArn_decorators = [helpers_internal_1.memoizedGetter]; _get_jobName_decorators = [helpers_internal_1.memoizedGetter]; __esDecorate(this, null, _get_jobArn_decorators, { kind: "getter", name: "jobArn", static: false, private: false, access: { has: obj => "jobArn" in obj, get: obj => obj.jobArn }, metadata: _metadata }, null, _instanceExtraInitializers); __esDecorate(this, null, _get_jobName_decorators, { kind: "getter", name: "jobName", static: false, private: false, access: { has: obj => "jobName" in obj, get: obj => obj.jobName }, metadata: _metadata }, null, _instanceExtraInitializers); __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); RayJob = _classThis = _classDescriptor.value; if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); } static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.RayJob", version: "2.257.0-alpha.0" }; /** Uniquely identifies this class. */ static PROPERTY_INJECTION_ID = '@aws-cdk.aws-glue-alpha.RayJob'; role = __runInitializers(this, _instanceExtraInitializers); grantPrincipal; resource; /** * RayJob constructor */ constructor(scope, id, props) { super(scope, id, { physicalName: props.jobName, }); try { jsiiDeprecationWarnings._aws_cdk_aws_glue_alpha_RayJobProps(props); } catch (error) { if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") { Error.captureStackTrace(error, RayJob); } throw error; } // Enhanced CDK Analytics Telemetry (0, metadata_resource_1.addConstructMetadata)(this, props); // Set up role and permissions for principal this.role = props.role; this.grantPrincipal = this.role; // Enable CloudWatch metrics and continuous logging by default as a best practice const continuousLoggingArgs = this.setupContinuousLogging(this.role, props.continuousLogging); // Conditionally include metrics arguments (default to enabled for backward compatibility) const profilingMetricsArgs = (props.enableMetrics ?? true) ? { '--enable-metrics': '' } : {}; const observabilityMetricsArgs = (props.enableObservabilityMetrics ?? true) ? { '--enable-observability-metrics': 'true' } : {}; // Combine command line arguments into a single line item const defaultArguments = { ...this.checkNoReservedArgs(props.defaultArguments), ...continuousLoggingArgs, ...profilingMetricsArgs, ...observabilityMetricsArgs, }; if (props.workerType && props.workerType !== constants_1.WorkerType.Z_2X) { throw new core_1.ValidationError((0, helpers_internal_1.lit) `RayJobsOnlySupportZ2XWorkerType`, 'Ray jobs only support Z.2X worker type', this); } this.resource = new aws_glue_1.CfnJob(this, 'Resource', { name: props.jobName, description: props.description, role: this.role.roleArn, command: { name: constants_1.JobType.RAY, scriptLocation: this.codeS3ObjectUrl(props.script), runtime: props.runtime ? props.runtime : constants_1.Runtime.RAY_TWO_FOUR, }, glueVersion: constants_1.GlueVersion.V4_0, workerType: props.workerType ? props.workerType : constants_1.WorkerType.Z_2X, numberOfWorkers: props.numberOfWorkers ? props.numberOfWorkers : 3, maxRetries: props.jobRunQueuingEnabled ? 0 : props.maxRetries, jobRunQueuingEnabled: props.jobRunQueuingEnabled ? props.jobRunQueuingEnabled : false, executionProperty: props.maxConcurrentRuns ? { maxConcurrentRuns: props.maxConcurrentRuns } : undefined, timeout: props.timeout?.toMinutes(), connections: props.connections ? { connections: props.connections.map((connection) => connection.connectionName) } : undefined, securityConfiguration: props.securityConfiguration?.securityConfigurationName, tags: props.tags, defaultArguments, }); } get jobArn() { return this.buildJobArn(this, this.jobName); } get jobName() { return this.getResourceNameAttribute(this.resource.ref); } static { __runInitializers(_classThis, _classExtraInitializers); } }; return RayJob = _classThis; })(); exports.RayJob = RayJob; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF5LWpvYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJheS1qb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbURBQThDO0FBRTlDLDJDQUFtRDtBQUNuRCw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLDBFQUEwRTtBQUcxRSwrQkFBNEI7QUFDNUIsNENBQXlFO0FBNEN6RTs7Ozs7OztHQU9HO0lBRVUsTUFBTTs0QkFEbEIsb0NBQWtCOzs7O3NCQUNTLFNBQUc7Ozs7c0JBQVgsU0FBUSxXQUFHOzs7O3NDQStENUIsaUNBQWM7dUNBS2QsaUNBQWM7WUFKZix5S0FBVyxNQUFNLDZEQUVoQjtZQUdELDRLQUFXLE9BQU8sNkRBRWpCO1lBdkVILDZLQXdFQzs7Ozs7UUF2RUMsc0NBQXNDO1FBQy9CLE1BQU0sQ0FBVSxxQkFBcUIsR0FBVyxnQ0FBZ0MsQ0FBQztRQUN4RSxJQUFJLEdBSFQsbURBQU0sQ0FHZTtRQUNoQixjQUFjLENBQWlCO1FBQ3ZDLFFBQVEsQ0FBUztRQUV6Qjs7V0FFRztRQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBa0I7WUFDMUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7Z0JBQ2YsWUFBWSxFQUFFLEtBQUssQ0FBQyxPQUFPO2FBQzVCLENBQUMsQ0FBQzs7Ozs7O21EQWJNLE1BQU07Ozs7WUFjZixtQ0FBbUM7WUFDbkMsSUFBQSx3Q0FBb0IsRUFBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFbEMsNENBQTRDO1lBQzVDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFFaEMsaUZBQWlGO1lBQ2pGLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUs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QUM7U0FDSjtRQUdELElBQVcsTUFBTTtZQUNmLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzdDO1FBR0QsSUFBVyxPQUFPO1lBQ2hCLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekQ7O1lBdkVVLHVEQUFNOzs7OztBQUFOLHdCQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2ZuSm9iIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWdsdWUnO1xuaW1wb3J0IHR5cGUgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IG1lbW9pemVkR2V0dGVyLCBsaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IEpvYlByb3BzIH0gZnJvbSAnLi9qb2InO1xuaW1wb3J0IHsgSm9iIH0gZnJvbSAnLi9qb2InO1xuaW1wb3J0IHsgSm9iVHlwZSwgR2x1ZVZlcnNpb24sIFdvcmtlclR5cGUsIFJ1bnRpbWUgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGEgUmF5IEdsdWUgam9iXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmF5Sm9iUHJvcHMgZXh0ZW5kcyBKb2JQcm9wcyB7XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBSYXkgcnVudGltZSBlbnZpcm9ubWVudCB2ZXJzaW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gUnVudGltZSB2ZXJzaW9uIHdpbGwgZGVmYXVsdCB0byBSYXkyLjRcbiAgICovXG4gIHJlYWRvbmx5IHJ1bnRpbWU/OiBSdW50aW1lO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciBqb2IgcnVuIHF1ZXVpbmcgaXMgZW5hYmxlZCBmb3IgdGhlIGpvYiBydW5zIGZvciB0aGlzIGpvYi5cbiAgICogQSB2YWx1ZSBvZiB0cnVlIG1lYW5zIGpvYiBydW4gcXVldWluZyBpcyBlbmFibGVkIGZvciB0aGUgam9iIHJ1bnMuXG4gICAqIElmIGZhbHNlIG9yIG5vdCBwb3B1bGF0ZWQsIHRoZSBqb2IgcnVucyB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGZvciBxdWV1ZWluZy5cbiAgICogSWYgdGhpcyBmaWVsZCBkb2VzIG5vdCBtYXRjaCB0aGUgdmFsdWUgc2V0IGluIHRoZSBqb2IgcnVuLCB0aGVuIHRoZSB2YWx1ZSBmcm9tXG4gICAqIHRoZSBqb2IgcnVuIGZpZWxkIHdpbGwgYmUgdXNlZC4gVGhpcyBwcm9wZXJ0eSBtdXN0IGJlIHNldCB0byBmYWxzZSBmb3IgZmxleCBqb2JzLlxuICAgKiBJZiB0aGlzIHByb3BlcnR5IGlzIGVuYWJsZWQsIG1heFJldHJpZXMgbXVzdCBiZSBzZXQgdG8gemVyby5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBqb2IgcnVuIHF1ZXVpbmdcbiAgICovXG4gIHJlYWRvbmx5IGpvYlJ1blF1ZXVpbmdFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlIHByb2ZpbGluZyBtZXRyaWNzIGZvciB0aGUgR2x1ZSBqb2IuXG4gICAqXG4gICAqIFdoZW4gZW5hYmxlZCwgYWRkcyAnLS1lbmFibGUtbWV0cmljcycgdG8gam9iIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlTWV0cmljcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvYnNlcnZhYmlsaXR5IG1ldHJpY3MgZm9yIHRoZSBHbHVlIGpvYi5cbiAgICpcbiAgICogV2hlbiBlbmFibGVkLCBhZGRzICctLWVuYWJsZS1vYnNlcnZhYmlsaXR5LW1ldHJpY3MnOiAndHJ1ZScgdG8gam9iIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlT2JzZXJ2YWJpbGl0eU1ldHJpY3M/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJheSBKb2JzIGNsYXNzXG4gKlxuICogR2x1ZSBSYXkgam9icyB1c2Ugd29ya2VyIHR5cGUgWi4yWCBhbmQgR2x1ZSB2ZXJzaW9uIDQuMC5cbiAqIFRoZXNlIGFyZSBub3Qgb3ZlcnJpZGVhYmxlIHNpbmNlIHRoZXNlIGFyZSB0aGUgb25seSBjb25maWd1cmF0aW9uIHRoYXRcbiAqIEdsdWUgUmF5IGpvYnMgY3VycmVudGx5IHN1cHBvcnQuIFRoZSBydW50aW1lIGRlZmF1bHRzIHRvIFJheTIuNCBhbmQgbWluXG4gKiB3b3JrZXJzIGRlZmF1bHRzIHRvIDMuXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBSYXlKb2IgZXh0ZW5kcyBKb2Ige1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1nbHVlLWFscGhhLlJheUpvYic7XG4gIHB1YmxpYyByZWFkb25seSByb2xlOiBpYW0uSVJvbGU7XG4gIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG4gIHByaXZhdGUgcmVzb3VyY2U6IENmbkpvYjtcblxuICAvKipcbiAgICogUmF5Sm9iIGNvbnN0cnVjdG9yXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmF5Sm9iUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuam9iTmFtZSxcbiAgICB9KTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIC8vIFNldCB1cCByb2xlIGFuZCBwZXJtaXNzaW9ucyBmb3IgcHJpbmNpcGFsXG4gICAgdGhpcy5yb2xlID0gcHJvcHMucm9sZTtcbiAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5yb2xlO1xuXG4gICAgLy8gRW5hYmxlIENsb3VkV2F0Y2ggbWV0cmljcyBhbmQgY29udGludW91cyBsb2dnaW5nIGJ5IGRlZmF1bHQgYXMgYSBiZXN0IHByYWN0aWNlXG4gICAgY29uc3QgY29udGludW91c0xvZ2dpbmdBcmdzID0gdGhpcy5zZXR1cENvbnRpbnVvdXNMb2dnaW5nKHRoaXMucm9sZSwgcHJvcHMuY29udGludW91c0xvZ2dpbmcpO1xuXG4gICAgLy8gQ29uZGl0aW9uYWxseSBpbmNsdWRlIG1ldHJpY3MgYXJndW1lbnRzIChkZWZhdWx0IHRvIGVuYWJsZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpXG4gICAgY29uc3QgcHJvZmlsaW5nTWV0cmljc0FyZ3MgPSAocHJvcHMuZW5hYmxlTWV0cmljcyA/PyB0cnVlKSA/IHsgJy0tZW5hYmxlLW1ldHJpY3MnOiAnJyB9IDoge307XG4gICAgY29uc3Qgb2JzZXJ2YWJpbGl0eU1ldHJpY3NBcmdzID0gKHByb3BzLmVuYWJsZU9ic2VydmFiaWxpdHlNZXRyaWNzID8/IHRydWUpID8geyAnLS1lbmFibGUtb2JzZXJ2YWJpbGl0eS1tZXRyaWNzJzogJ3RydWUnIH0gOiB7fTtcblxuICAgIC8vIENvbWJpbmUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBpbnRvIGEgc2luZ2xlIGxpbmUgaXRlbVxuICAgIGNvbnN0IGRlZmF1bHRBcmd1bWVudHMgPSB7XG4gICAgICAuLi50aGlzLmNoZWNrTm9SZXNlcnZlZEFyZ3MocHJvcHMuZGVmYXVsdEFyZ3VtZW50cyksXG4gICAgICAuLi5jb250aW51b3VzTG9nZ2luZ0FyZ3MsXG4gICAgICAuLi5wcm9maWxpbmdNZXRyaWNzQXJncyxcbiAgICAgIC4uLm9ic2VydmFiaWxpdHlNZXRyaWNzQXJncyxcbiAgICB9O1xuXG4gICAgaWYgKHByb3BzLndvcmtlclR5cGUgJiYgcHJvcHMud29ya2VyVHlwZSAhPT0gV29ya2VyVHlwZS5aXzJYKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBSYXlKb2JzT25seVN1cHBvcnRaMlhXb3JrZXJUeXBlYCwgJ1JheSBqb2JzIG9ubHkgc3VwcG9ydCBaLjJYIHdvcmtlciB0eXBlJywgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBDZm5Kb2IodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogcHJvcHMuam9iTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIHJvbGU6IHRoaXMucm9sZS5yb2xlQXJuLFxuICAgICAgY29tbWFuZDoge1xuICAgICAgICBuYW1lOiBKb2JUeXBlLlJBWSxcbiAgICAgICAgc2NyaXB0TG9jYXRpb246IHRoaXMuY29kZVMzT2JqZWN0VXJsKHByb3BzLnNjcmlwdCksXG4gICAgICAgIHJ1bnRpbWU6IHByb3BzLnJ1bnRpbWUgPyBwcm9wcy5ydW50aW1lIDogUnVudGltZS5SQVlfVFdPX0ZPVVIsXG4gICAgICB9LFxuICAgICAgZ2x1ZVZlcnNpb246IEdsdWVWZXJzaW9uLlY0XzAsXG4gICAgICB3b3JrZXJUeXBlOiBwcm9wcy53b3JrZXJUeXBlID8gcHJvcHMud29ya2VyVHlwZSA6IFdvcmtlclR5cGUuWl8yWCxcbiAgICAgIG51bWJlck9mV29ya2VyczogcHJvcHMubnVtYmVyT2ZXb3JrZXJzID8gcHJvcHMubnVtYmVyT2ZXb3JrZXJzOiAzLFxuICAgICAgbWF4UmV0cmllczogcHJvcHMuam9iUnVuUXVldWluZ0VuYWJsZWQgPyAwIDogcHJvcHMubWF4UmV0cmllcyxcbiAgICAgIGpvYlJ1blF1ZXVpbmdFbmFibGVkOiBwcm9wcy5qb2JSdW5RdWV1aW5nRW5hYmxlZCA/IHByb3BzLmpvYlJ1blF1ZXVpbmdFbmFibGVkIDogZmFsc2UsXG4gICAgICBleGVjdXRpb25Qcm9wZXJ0eTogcHJvcHMubWF4Q29uY3VycmVudFJ1bnMgPyB7IG1heENvbmN1cnJlbnRSdW5zOiBwcm9wcy5tYXhDb25jdXJyZW50UnVucyB9IDogdW5kZWZpbmVkLFxuICAgICAgdGltZW91dDogcHJvcHMudGltZW91dD8udG9NaW51dGVzKCksXG4gICAgICBjb25uZWN0aW9uczogcHJvcHMuY29ubmVjdGlvbnMgPyB7IGNvbm5lY3Rpb25zOiBwcm9wcy5jb25uZWN0aW9ucy5tYXAoKGNvbm5lY3Rpb24pID0+IGNvbm5lY3Rpb24uY29ubmVjdGlvbk5hbWUpIH0gOiB1bmRlZmluZWQsXG4gICAgICBzZWN1cml0eUNvbmZpZ3VyYXRpb246IHByb3BzLnNlY3VyaXR5Q29uZmlndXJhdGlvbj8uc2VjdXJpdHlDb25maWd1cmF0aW9uTmFtZSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgICBkZWZhdWx0QXJndW1lbnRzLFxuICAgIH0pO1xuICB9XG5cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgam9iQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRKb2JBcm4odGhpcywgdGhpcy5qb2JOYW1lKTtcbiAgfVxuXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IGpvYk5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZU5hbWVBdHRyaWJ1dGUodGhpcy5yZXNvdXJjZS5yZWYpO1xuICB9XG59XG4iXX0=