@aws-cdk/aws-cloud9-alpha
Version:
The CDK Construct Library for AWS::Cloud9
207 lines • 25.4 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var _a, _b, _c;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Owner = exports.CloneRepository = exports.Ec2Environment = exports.ImageId = exports.ConnectionType = void 0;
const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const ec2 = require("aws-cdk-lib/aws-ec2");
const cdk = require("aws-cdk-lib/core");
const aws_cloud9_1 = require("aws-cdk-lib/aws-cloud9");
const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
/**
* The connection type used for connecting to an Amazon EC2 environment.
*/
var ConnectionType;
(function (ConnectionType) {
/**
* Connect through SSH
*/
ConnectionType["CONNECT_SSH"] = "CONNECT_SSH";
/**
* Connect through AWS Systems Manager
* When using SSM, service role and instance profile aren't automatically created.
* See https://docs.aws.amazon.com/cloud9/latest/user-guide/ec2-ssm.html#service-role-ssm
*/
ConnectionType["CONNECT_SSM"] = "CONNECT_SSM";
})(ConnectionType || (exports.ConnectionType = ConnectionType = {}));
/**
* The image ID used for creating an Amazon EC2 environment.
*/
var ImageId;
(function (ImageId) {
/**
* Create using Amazon Linux 2
*/
ImageId["AMAZON_LINUX_2"] = "amazonlinux-2-x86_64";
/**
* Create using Amazon Linux 2023
*/
ImageId["AMAZON_LINUX_2023"] = "amazonlinux-2023-x86_64";
/**
* Create using Ubuntu 18.04
*
* @deprecated Since Ubuntu 18.04 has ended standard support as of May 31, 2023, we recommend you choose Ubuntu 22.04.
*/
ImageId["UBUNTU_18_04"] = "ubuntu-18.04-x86_64";
/**
* Create using Ubuntu 22.04
*/
ImageId["UBUNTU_22_04"] = "ubuntu-22.04-x86_64";
})(ImageId || (exports.ImageId = ImageId = {}));
/**
* A Cloud9 Environment with Amazon EC2
* @resource AWS::Cloud9::EnvironmentEC2
*/
let Ec2Environment = class Ec2Environment extends cdk.Resource {
/**
* import from EnvironmentEc2Name
*/
static fromEc2EnvironmentName(scope, id, ec2EnvironmentName) {
class Import extends cdk.Resource {
constructor() {
super(...arguments);
this.ec2EnvironmentName = ec2EnvironmentName;
this.ec2EnvironmentArn = cdk.Stack.of(this).formatArn({
service: 'cloud9',
resource: 'environment',
resourceName: this.ec2EnvironmentName,
});
}
}
return new Import(scope, id);
}
constructor(scope, id, props) {
super(scope, id);
try {
jsiiDeprecationWarnings._aws_cdk_aws_cloud9_alpha_Ec2EnvironmentProps(props);
}
catch (error) {
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
Error.captureStackTrace(error, Ec2Environment);
}
throw error;
}
// Enhanced CDK Analytics Telemetry
(0, metadata_resource_1.addConstructMetadata)(this, props);
this.vpc = props.vpc;
if (!props.subnetSelection && this.vpc.publicSubnets.length === 0) {
throw new Error('no subnetSelection specified and no public subnet found in the vpc, please specify subnetSelection');
}
if (!props.imageId) {
throw new Error('No imageId specified, please specify imageId');
}
const vpcSubnets = props.subnetSelection ?? { subnetType: ec2.SubnetType.PUBLIC };
const c9env = new aws_cloud9_1.CfnEnvironmentEC2(this, 'Resource', {
name: props.ec2EnvironmentName,
description: props.description,
ownerArn: props.owner?.ownerArn,
instanceType: props.instanceType?.toString() ?? ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.MICRO).toString(),
subnetId: this.vpc.selectSubnets(vpcSubnets).subnetIds[0],
repositories: props.clonedRepositories ? props.clonedRepositories.map(r => ({
repositoryUrl: r.repositoryUrl,
pathComponent: r.pathComponent,
})) : undefined,
connectionType: props.connectionType ?? ConnectionType.CONNECT_SSH,
imageId: props.imageId,
automaticStopTimeMinutes: props.automaticStop?.toMinutes(),
});
this.environmentId = c9env.ref;
this.ec2EnvironmentArn = c9env.getAtt('Arn').toString();
this.ec2EnvironmentName = c9env.getAtt('Name').toString();
this.ideUrl = `https://${this.env.region}.console.aws.amazon.com/cloud9/ide/${this.environmentId}`;
}
};
exports.Ec2Environment = Ec2Environment;
_a = JSII_RTTI_SYMBOL_1;
Ec2Environment[_a] = { fqn: "@aws-cdk/aws-cloud9-alpha.Ec2Environment", version: "2.216.0-alpha.0" };
/** Uniquely identifies this class. */
Ec2Environment.PROPERTY_INJECTION_ID = '@aws-cdk.aws-cloud9-alpha.Ec2Environment';
exports.Ec2Environment = Ec2Environment = __decorate([
prop_injectable_1.propertyInjectable
], Ec2Environment);
/**
* The class for different repository providers
*/
class CloneRepository {
/**
* import repository to cloud9 environment from AWS CodeCommit
*
* @param repository the codecommit repository to clone from
* @param path the target path in cloud9 environment
*/
static fromCodeCommit(repository, path) {
return {
repositoryUrl: repository.repositoryCloneUrlHttp,
pathComponent: path,
};
}
constructor(repositoryUrl, pathComponent) {
this.repositoryUrl = repositoryUrl;
this.pathComponent = pathComponent;
}
}
exports.CloneRepository = CloneRepository;
_b = JSII_RTTI_SYMBOL_1;
CloneRepository[_b] = { fqn: "@aws-cdk/aws-cloud9-alpha.CloneRepository", version: "2.216.0-alpha.0" };
/**
* An environment owner
*
*
*/
class Owner {
/**
* Make an IAM user the environment owner
*
* User need to have AWSCloud9Administrator permissions
* @see https://docs.aws.amazon.com/cloud9/latest/user-guide/share-environment.html#share-environment-about
*
* @param user the User object to use as the environment owner
*/
static user(user) {
return { ownerArn: user.userArn };
}
/**
* Make an IAM assumed role the environment owner
*
* @param accountId The account id of the target account
* @param roleName The name of the assumed role
*/
static assumedRole(accountId, roleName) {
return { ownerArn: `arn:${cdk.Aws.PARTITION}:sts::${accountId}:assumed-role/${roleName}` };
}
/**
* Make an IAM federated user the environment owner
*
* @param accountId The AccountId of the target account
* @param userName The name of the federated user
*/
static federatedUser(accountId, userName) {
return { ownerArn: `arn:${cdk.Aws.PARTITION}:sts::${accountId}:federated-user/${userName}` };
}
/**
* Make the Account Root User the environment owner (not recommended)
*
* @param accountId the AccountId to use as the environment owner.
*/
static accountRoot(accountId) {
return { ownerArn: `arn:${cdk.Aws.PARTITION}:iam::${accountId}:root` };
}
/**
*
* @param ownerArn of environment owner.
*/
constructor(ownerArn) {
this.ownerArn = ownerArn;
}
}
exports.Owner = Owner;
_c = JSII_RTTI_SYMBOL_1;
Owner[_c] = { fqn: "@aws-cdk/aws-cloud9-alpha.Owner", version: "2.216.0-alpha.0" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlbnZpcm9ubWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFDQSwyQ0FBMkM7QUFFM0Msd0NBQXdDO0FBRXhDLHVEQUEyRDtBQUMzRCw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBc0IxRTs7R0FFRztBQUNILElBQVksY0FXWDtBQVhELFdBQVksY0FBYztJQUN4Qjs7T0FFRztJQUNILDZDQUEyQixDQUFBO0lBQzNCOzs7O09BSUc7SUFDSCw2Q0FBMkIsQ0FBQTtBQUM3QixDQUFDLEVBWFcsY0FBYyw4QkFBZCxjQUFjLFFBV3pCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLE9BbUJYO0FBbkJELFdBQVksT0FBTztJQUNqQjs7T0FFRztJQUNILGtEQUF1QyxDQUFBO0lBQ3ZDOztPQUVHO0lBQ0gsd0RBQTZDLENBQUE7SUFDN0M7Ozs7T0FJRztJQUNILCtDQUFvQyxDQUFBO0lBQ3BDOztPQUVHO0lBQ0gsK0NBQW9DLENBQUE7QUFDdEMsQ0FBQyxFQW5CVyxPQUFPLHVCQUFQLE9BQU8sUUFtQmxCO0FBbUZEOzs7R0FHRztBQUVJLElBQU0sY0FBYyxHQUFwQixNQUFNLGNBQWUsU0FBUSxHQUFHLENBQUMsUUFBUTtJQUk5Qzs7T0FFRztJQUNJLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxrQkFBMEI7UUFDM0YsTUFBTSxNQUFPLFNBQVEsR0FBRyxDQUFDLFFBQVE7WUFBakM7O2dCQUNTLHVCQUFrQixHQUFHLGtCQUFrQixDQUFDO2dCQUN4QyxzQkFBaUIsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQ3RELE9BQU8sRUFBRSxRQUFRO29CQUNqQixRQUFRLEVBQUUsYUFBYTtvQkFDdkIsWUFBWSxFQUFFLElBQUksQ0FBQyxrQkFBa0I7aUJBQ3RDLENBQUMsQ0FBQztZQUNMLENBQUM7U0FBQTtRQUNELE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQzlCO0lBK0JELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQzs7Ozs7OytDQWpEUixjQUFjOzs7O1FBa0R2QixtQ0FBbUM7UUFDbkMsSUFBQSx3Q0FBb0IsRUFBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFbEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsRSxNQUFNLElBQUksS0FBSyxDQUFDLG9HQUFvRyxDQUFDLENBQUM7UUFDeEgsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsZUFBZSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEYsTUFBTSxLQUFLLEdBQUcsSUFBSSw4QkFBaUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ3BELElBQUksRUFBRSxLQUFLLENBQUMsa0JBQWtCO1lBQzlCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixRQUFRLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRO1lBQy9CLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFO1lBQ3BJLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3pELFlBQVksRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLGFBQWE7Z0JBQzlCLGFBQWEsRUFBRSxDQUFDLENBQUMsYUFBYTthQUMvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNmLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYyxJQUFJLGNBQWMsQ0FBQyxXQUFXO1lBQ2xFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztZQUN0Qix3QkFBd0IsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRTtTQUMzRCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxzQ0FBc0MsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0tBQ3BHOztBQWpGVSx3Q0FBYzs7O0FBQ3pCLHNDQUFzQztBQUNmLG9DQUFxQixHQUFXLDBDQUEwQyxBQUFyRCxDQUFzRDt5QkFGdkYsY0FBYztJQUQxQixvQ0FBa0I7R0FDTixjQUFjLENBa0YxQjtBQUVEOztHQUVHO0FBQ0gsTUFBYSxlQUFlO0lBQzFCOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFrQyxFQUFFLElBQVk7UUFDM0UsT0FBTztZQUNMLGFBQWEsRUFBRSxVQUFVLENBQUMsc0JBQXNCO1lBQ2hELGFBQWEsRUFBRSxJQUFJO1NBQ3BCLENBQUM7S0FDSDtJQUVELFlBQW9DLGFBQXFCLEVBQWtCLGFBQXFCO1FBQTVELGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQWtCLGtCQUFhLEdBQWIsYUFBYSxDQUFRO0tBQUk7O0FBZHRHLDBDQWVDOzs7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxLQUFLO0lBQ2hCOzs7Ozs7O09BT0c7SUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQVc7UUFDNUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDbkM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBaUIsRUFBRSxRQUFnQjtRQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLFNBQVMsU0FBUyxpQkFBaUIsUUFBUSxFQUFFLEVBQUUsQ0FBQztLQUM1RjtJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFpQixFQUFFLFFBQWdCO1FBQzdELE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsU0FBUyxTQUFTLG1CQUFtQixRQUFRLEVBQUUsRUFBRSxDQUFDO0tBQzlGO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBaUI7UUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxTQUFTLFNBQVMsT0FBTyxFQUFFLENBQUM7S0FDeEU7SUFFRDs7O09BR0c7SUFDSCxZQUFvQyxRQUFnQjtRQUFoQixhQUFRLEdBQVIsUUFBUSxDQUFRO0tBQUk7O0FBOUMxRCxzQkErQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjb2RlY29tbWl0IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlY29tbWl0JztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IElVc2VyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IENmbkVudmlyb25tZW50RUMyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkOSc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5cbi8qKlxuICogQSBDbG91ZDkgRW52aXJvbm1lbnRcbiAqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUVjMkVudmlyb25tZW50IGV4dGVuZHMgY2RrLklSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgRW52aXJvbm1lbnRFYzJcbiAgICpcbiAgICogQGF0dHJpYnV0ZSBlbnZpcm9ubWVudEVjMk5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGVjMkVudmlyb25tZW50TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYXJuIG9mIHRoZSBFbnZpcm9ubWVudEVjMlxuICAgKlxuICAgKiBAYXR0cmlidXRlIGVudmlyb25tZW50RTJBcm5cbiAgICovXG4gIHJlYWRvbmx5IGVjMkVudmlyb25tZW50QXJuOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGNvbm5lY3Rpb24gdHlwZSB1c2VkIGZvciBjb25uZWN0aW5nIHRvIGFuIEFtYXpvbiBFQzIgZW52aXJvbm1lbnQuXG4gKi9cbmV4cG9ydCBlbnVtIENvbm5lY3Rpb25UeXBlIHtcbiAgLyoqXG4gICAqIENvbm5lY3QgdGhyb3VnaCBTU0hcbiAgICovXG4gIENPTk5FQ1RfU1NIID0gJ0NPTk5FQ1RfU1NIJyxcbiAgLyoqXG4gICAqIENvbm5lY3QgdGhyb3VnaCBBV1MgU3lzdGVtcyBNYW5hZ2VyXG4gICAqIFdoZW4gdXNpbmcgU1NNLCBzZXJ2aWNlIHJvbGUgYW5kIGluc3RhbmNlIHByb2ZpbGUgYXJlbid0IGF1dG9tYXRpY2FsbHkgY3JlYXRlZC5cbiAgICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZDkvbGF0ZXN0L3VzZXItZ3VpZGUvZWMyLXNzbS5odG1sI3NlcnZpY2Utcm9sZS1zc21cbiAgICovXG4gIENPTk5FQ1RfU1NNID0gJ0NPTk5FQ1RfU1NNJyxcbn1cblxuLyoqXG4gKiBUaGUgaW1hZ2UgSUQgdXNlZCBmb3IgY3JlYXRpbmcgYW4gQW1hem9uIEVDMiBlbnZpcm9ubWVudC5cbiAqL1xuZXhwb3J0IGVudW0gSW1hZ2VJZCB7XG4gIC8qKlxuICAgKiBDcmVhdGUgdXNpbmcgQW1hem9uIExpbnV4IDJcbiAgICovXG4gIEFNQVpPTl9MSU5VWF8yID0gJ2FtYXpvbmxpbnV4LTIteDg2XzY0JyxcbiAgLyoqXG4gICAqIENyZWF0ZSB1c2luZyBBbWF6b24gTGludXggMjAyM1xuICAgKi9cbiAgQU1BWk9OX0xJTlVYXzIwMjMgPSAnYW1hem9ubGludXgtMjAyMy14ODZfNjQnLFxuICAvKipcbiAgICogQ3JlYXRlIHVzaW5nIFVidW50dSAxOC4wNFxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBTaW5jZSBVYnVudHUgMTguMDQgaGFzIGVuZGVkIHN0YW5kYXJkIHN1cHBvcnQgYXMgb2YgTWF5IDMxLCAyMDIzLCB3ZSByZWNvbW1lbmQgeW91IGNob29zZSBVYnVudHUgMjIuMDQuXG4gICAqL1xuICBVQlVOVFVfMThfMDQgPSAndWJ1bnR1LTE4LjA0LXg4Nl82NCcsXG4gIC8qKlxuICAgKiBDcmVhdGUgdXNpbmcgVWJ1bnR1IDIyLjA0XG4gICAqL1xuICBVQlVOVFVfMjJfMDQgPSAndWJ1bnR1LTIyLjA0LXg4Nl82NCcsXG59XG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIEVjMkVudmlyb25tZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWMyRW52aXJvbm1lbnRQcm9wcyB7XG4gIC8qKlxuICAgKiBPd25lciBvZiB0aGUgZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIFRoZSBvd25lciBoYXMgZnVsbCBjb250cm9sIG9mIHRoZSBlbnZpcm9ubWVudCBhbmQgY2FuIGludml0ZSBhZGRpdGlvbmFsIG1lbWJlcnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVGhlIGlkZW50aXR5IHRoYXQgQ2xvdWRGb3JtYXRpb24gZXhlY3V0ZXMgdW5kZXIgd2lsbCBiZSB0aGUgb3duZXJcbiAgICovXG4gIHJlYWRvbmx5IG93bmVyPzogT3duZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGluc3RhbmNlIHRvIGNvbm5lY3QgdG8gdGhlIGVudmlyb25tZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHQyLm1pY3JvXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZVR5cGU/OiBlYzIuSW5zdGFuY2VUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgc3VibmV0U2VsZWN0aW9uIG9mIHRoZSBWUEMgdGhhdCBBV1MgQ2xvdWQ5IHdpbGwgdXNlIHRvIGNvbW11bmljYXRlIHdpdGhcbiAgICogdGhlIEFtYXpvbiBFQzIgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYWxsIHB1YmxpYyBzdWJuZXRzIG9mIHRoZSBWUEMgYXJlIHNlbGVjdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0U2VsZWN0aW9uPzogZWMyLlN1Ym5ldFNlbGVjdGlvbjtcblxuICAvKipcbiAgICogVGhlIFZQQyB0aGF0IEFXUyBDbG91ZDkgd2lsbCB1c2UgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgQW1hem9uIEVsYXN0aWMgQ29tcHV0ZSBDbG91ZCAoQW1hem9uIEVDMikgaW5zdGFuY2UuXG4gICAqXG4gICAqL1xuICByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBlbnZpcm9ubWVudFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGVjMkVudmlyb25tZW50TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogRGVzY3JpcHRpb24gb2YgdGhlIGVudmlyb25tZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIENvZGVDb21taXQgcmVwb3NpdG9yeSB0byBiZSBjbG9uZWRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkbyBub3QgY2xvbmUgYW55IHJlcG9zaXRvcnlcbiAgICovXG4gIC8vIHJlYWRvbmx5IGNsb25lZFJlcG9zaXRvcmllcz86IENsb3VkOVJlcG9zaXRvcnlbXTtcbiAgcmVhZG9ubHkgY2xvbmVkUmVwb3NpdG9yaWVzPzogQ2xvbmVSZXBvc2l0b3J5W107XG5cbiAgLyoqXG4gICAqIFRoZSBjb25uZWN0aW9uIHR5cGUgdXNlZCBmb3IgY29ubmVjdGluZyB0byBhbiBBbWF6b24gRUMyIGVudmlyb25tZW50LlxuICAgKlxuICAgKiBWYWxpZCB2YWx1ZXMgYXJlOiBDT05ORUNUX1NTSCAoZGVmYXVsdCkgYW5kIENPTk5FQ1RfU1NNIChjb25uZWN0ZWQgdGhyb3VnaCBBV1MgU3lzdGVtcyBNYW5hZ2VyKVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIENPTk5FQ1RfU1NIXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0aW9uVHlwZT86IENvbm5lY3Rpb25UeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgaW1hZ2UgSUQgdXNlZCBmb3IgY3JlYXRpbmcgYW4gQW1hem9uIEVDMiBlbnZpcm9ubWVudC5cbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlSWQ6IEltYWdlSWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgbWludXRlcyB1bnRpbCB0aGUgcnVubmluZyBpbnN0YW5jZSBpcyBzaHV0IGRvd24gYWZ0ZXIgdGhlXG4gICAqIGVudmlyb25tZW50IHdhcyBsYXN0IHVzZWQuXG4gICAqXG4gICAqIFNldHRpbmcgYSB2YWx1ZSBvZiAwIG1lYW5zIHRoZSBpbnN0YW5jZSB3aWxsIG5ldmVyIGJlIGF1dG9tYXRpY2FsbHkgc2h1dCBkb3duLlwiXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVGhlIGluc3RhbmNlIHdpbGwgbm90IGJlIHNodXQgZG93biBhdXRvbWF0aWNhbGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0b21hdGljU3RvcD86IGNkay5EdXJhdGlvbjtcbn1cblxuLyoqXG4gKiBBIENsb3VkOSBFbnZpcm9ubWVudCB3aXRoIEFtYXpvbiBFQzJcbiAqIEByZXNvdXJjZSBBV1M6OkNsb3VkOTo6RW52aXJvbm1lbnRFQzJcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIEVjMkVudmlyb25tZW50IGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSUVjMkVudmlyb25tZW50IHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtY2xvdWQ5LWFscGhhLkVjMkVudmlyb25tZW50JztcblxuICAvKipcbiAgICogaW1wb3J0IGZyb20gRW52aXJvbm1lbnRFYzJOYW1lXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21FYzJFbnZpcm9ubWVudE5hbWUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgZWMyRW52aXJvbm1lbnROYW1lOiBzdHJpbmcpOiBJRWMyRW52aXJvbm1lbnQge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIGNkay5SZXNvdXJjZSB7XG4gICAgICBwdWJsaWMgZWMyRW52aXJvbm1lbnROYW1lID0gZWMyRW52aXJvbm1lbnROYW1lO1xuICAgICAgcHVibGljIGVjMkVudmlyb25tZW50QXJuID0gY2RrLlN0YWNrLm9mKHRoaXMpLmZvcm1hdEFybih7XG4gICAgICAgIHNlcnZpY2U6ICdjbG91ZDknLFxuICAgICAgICByZXNvdXJjZTogJ2Vudmlyb25tZW50JyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiB0aGlzLmVjMkVudmlyb25tZW50TmFtZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBuYW1lIG9mIHRoaXMgQ2xvdWQ5IGVudmlyb25tZW50XG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlYzJFbnZpcm9ubWVudE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IEFSTiBvZiB0aGlzIENsb3VkOSBlbnZpcm9ubWVudFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZWMyRW52aXJvbm1lbnRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IElEIG9mIHRoaXMgQ2xvdWQ5IGVudmlyb25tZW50XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW52aXJvbm1lbnRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29tcGxldGUgSURFIFVSTCBvZiB0aGlzIENsb3VkOSBlbnZpcm9ubWVudFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlkZVVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWUEMgSURcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBFYzJFbnZpcm9ubWVudFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIHRoaXMudnBjID0gcHJvcHMudnBjO1xuICAgIGlmICghcHJvcHMuc3VibmV0U2VsZWN0aW9uICYmIHRoaXMudnBjLnB1YmxpY1N1Ym5ldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHN1Ym5ldFNlbGVjdGlvbiBzcGVjaWZpZWQgYW5kIG5vIHB1YmxpYyBzdWJuZXQgZm91bmQgaW4gdGhlIHZwYywgcGxlYXNlIHNwZWNpZnkgc3VibmV0U2VsZWN0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKCFwcm9wcy5pbWFnZUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGltYWdlSWQgc3BlY2lmaWVkLCBwbGVhc2Ugc3BlY2lmeSBpbWFnZUlkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdnBjU3VibmV0cyA9IHByb3BzLnN1Ym5ldFNlbGVjdGlvbiA/PyB7IHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBVQkxJQyB9O1xuICAgIGNvbnN0IGM5ZW52ID0gbmV3IENmbkVudmlyb25tZW50RUMyKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG5hbWU6IHByb3BzLmVjMkVudmlyb25tZW50TmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIG93bmVyQXJuOiBwcm9wcy5vd25lcj8ub3duZXJBcm4sXG4gICAgICBpbnN0YW5jZVR5cGU6IHByb3BzLmluc3RhbmNlVHlwZT8udG9TdHJpbmcoKSA/PyBlYzIuSW5zdGFuY2VUeXBlLm9mKGVjMi5JbnN0YW5jZUNsYXNzLkJVUlNUQUJMRTIsIGVjMi5JbnN0YW5jZVNpemUuTUlDUk8pLnRvU3RyaW5nKCksXG4gICAgICBzdWJuZXRJZDogdGhpcy52cGMuc2VsZWN0U3VibmV0cyh2cGNTdWJuZXRzKS5zdWJuZXRJZHNbMF0sXG4gICAgICByZXBvc2l0b3JpZXM6IHByb3BzLmNsb25lZFJlcG9zaXRvcmllcyA/IHByb3BzLmNsb25lZFJlcG9zaXRvcmllcy5tYXAociA9PiAoe1xuICAgICAgICByZXBvc2l0b3J5VXJsOiByLnJlcG9zaXRvcnlVcmwsXG4gICAgICAgIHBhdGhDb21wb25lbnQ6IHIucGF0aENvbXBvbmVudCxcbiAgICAgIH0pKSA6IHVuZGVmaW5lZCxcbiAgICAgIGNvbm5lY3Rpb25UeXBlOiBwcm9wcy5jb25uZWN0aW9uVHlwZSA/PyBDb25uZWN0aW9uVHlwZS5DT05ORUNUX1NTSCxcbiAgICAgIGltYWdlSWQ6IHByb3BzLmltYWdlSWQsXG4gICAgICBhdXRvbWF0aWNTdG9wVGltZU1pbnV0ZXM6IHByb3BzLmF1dG9tYXRpY1N0b3A/LnRvTWludXRlcygpLFxuICAgIH0pO1xuICAgIHRoaXMuZW52aXJvbm1lbnRJZCA9IGM5ZW52LnJlZjtcbiAgICB0aGlzLmVjMkVudmlyb25tZW50QXJuID0gYzllbnYuZ2V0QXR0KCdBcm4nKS50b1N0cmluZygpO1xuICAgIHRoaXMuZWMyRW52aXJvbm1lbnROYW1lID0gYzllbnYuZ2V0QXR0KCdOYW1lJykudG9TdHJpbmcoKTtcbiAgICB0aGlzLmlkZVVybCA9IGBodHRwczovLyR7dGhpcy5lbnYucmVnaW9ufS5jb25zb2xlLmF3cy5hbWF6b24uY29tL2Nsb3VkOS9pZGUvJHt0aGlzLmVudmlyb25tZW50SWR9YDtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBjbGFzcyBmb3IgZGlmZmVyZW50IHJlcG9zaXRvcnkgcHJvdmlkZXJzXG4gKi9cbmV4cG9ydCBjbGFzcyBDbG9uZVJlcG9zaXRvcnkge1xuICAvKipcbiAgICogaW1wb3J0IHJlcG9zaXRvcnkgdG8gY2xvdWQ5IGVudmlyb25tZW50IGZyb20gQVdTIENvZGVDb21taXRcbiAgICpcbiAgICogQHBhcmFtIHJlcG9zaXRvcnkgdGhlIGNvZGVjb21taXQgcmVwb3NpdG9yeSB0byBjbG9uZSBmcm9tXG4gICAqIEBwYXJhbSBwYXRoICB0aGUgdGFyZ2V0IHBhdGggaW4gY2xvdWQ5IGVudmlyb25tZW50XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Db2RlQ29tbWl0KHJlcG9zaXRvcnk6IGNvZGVjb21taXQuSVJlcG9zaXRvcnksIHBhdGg6IHN0cmluZyk6IENsb25lUmVwb3NpdG9yeSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcG9zaXRvcnlVcmw6IHJlcG9zaXRvcnkucmVwb3NpdG9yeUNsb25lVXJsSHR0cCxcbiAgICAgIHBhdGhDb21wb25lbnQ6IHBhdGgsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHJlcG9zaXRvcnlVcmw6IHN0cmluZywgcHVibGljIHJlYWRvbmx5IHBhdGhDb21wb25lbnQ6IHN0cmluZykge31cbn1cblxuLyoqXG4gKiBBbiBlbnZpcm9ubWVudCBvd25lclxuICpcbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBPd25lciB7XG4gIC8qKlxuICAgKiBNYWtlIGFuIElBTSB1c2VyIHRoZSBlbnZpcm9ubWVudCBvd25lclxuICAgKlxuICAgKiBVc2VyIG5lZWQgdG8gaGF2ZSBBV1NDbG91ZDlBZG1pbmlzdHJhdG9yIHBlcm1pc3Npb25zXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3VkOS9sYXRlc3QvdXNlci1ndWlkZS9zaGFyZS1lbnZpcm9ubWVudC5odG1sI3NoYXJlLWVudmlyb25tZW50LWFib3V0XG4gICAqXG4gICAqIEBwYXJhbSB1c2VyIHRoZSBVc2VyIG9iamVjdCB0byB1c2UgYXMgdGhlIGVudmlyb25tZW50IG93bmVyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVzZXIodXNlcjogSVVzZXIpOiBPd25lciB7XG4gICAgcmV0dXJuIHsgb3duZXJBcm46IHVzZXIudXNlckFybiB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYW4gSUFNIGFzc3VtZWQgcm9sZSB0aGUgZW52aXJvbm1lbnQgb3duZXJcbiAgICpcbiAgICogQHBhcmFtIGFjY291bnRJZCBUaGUgYWNjb3VudCBpZCBvZiB0aGUgdGFyZ2V0IGFjY291bnRcbiAgICogQHBhcmFtIHJvbGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBhc3N1bWVkIHJvbGVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXNzdW1lZFJvbGUoYWNjb3VudElkOiBzdHJpbmcsIHJvbGVOYW1lOiBzdHJpbmcpOiBPd25lciB7XG4gICAgcmV0dXJuIHsgb3duZXJBcm46IGBhcm46JHtjZGsuQXdzLlBBUlRJVElPTn06c3RzOjoke2FjY291bnRJZH06YXNzdW1lZC1yb2xlLyR7cm9sZU5hbWV9YCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYW4gSUFNIGZlZGVyYXRlZCB1c2VyIHRoZSBlbnZpcm9ubWVudCBvd25lclxuICAgKlxuICAgKiBAcGFyYW0gYWNjb3VudElkIFRoZSBBY2NvdW50SWQgb2YgdGhlIHRhcmdldCBhY2NvdW50XG4gICAqIEBwYXJhbSB1c2VyTmFtZSBUaGUgbmFtZSBvZiB0aGUgZmVkZXJhdGVkIHVzZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZmVkZXJhdGVkVXNlcihhY2NvdW50SWQ6IHN0cmluZywgdXNlck5hbWU6IHN0cmluZyk6IE93bmVyIHtcbiAgICByZXR1cm4geyBvd25lckFybjogYGFybjoke2Nkay5Bd3MuUEFSVElUSU9OfTpzdHM6OiR7YWNjb3VudElkfTpmZWRlcmF0ZWQtdXNlci8ke3VzZXJOYW1lfWAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIHRoZSBBY2NvdW50IFJvb3QgVXNlciB0aGUgZW52aXJvbm1lbnQgb3duZXIgKG5vdCByZWNvbW1lbmRlZClcbiAgICpcbiAgICogQHBhcmFtIGFjY291bnRJZCB0aGUgQWNjb3VudElkIHRvIHVzZSBhcyB0aGUgZW52aXJvbm1lbnQgb3duZXIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFjY291bnRSb290KGFjY291bnRJZDogc3RyaW5nKTogT3duZXIge1xuICAgIHJldHVybiB7IG93bmVyQXJuOiBgYXJuOiR7Y2RrLkF3cy5QQVJUSVRJT059OmlhbTo6JHthY2NvdW50SWR9OnJvb3RgIH07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIG93bmVyQXJuIG9mIGVudmlyb25tZW50IG93bmVyLlxuICAgKi9cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgb3duZXJBcm46IHN0cmluZykge31cbn1cbiJdfQ==