UNPKG

aws-cdk

Version:

CDK Toolkit, the command line tool for CDK apps

364 lines 99.7 kB
"use strict"; 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 SDK_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.SDK = void 0; const client_appsync_1 = require("@aws-sdk/client-appsync"); const client_cloudformation_1 = require("@aws-sdk/client-cloudformation"); const client_cloudwatch_logs_1 = require("@aws-sdk/client-cloudwatch-logs"); const client_codebuild_1 = require("@aws-sdk/client-codebuild"); const client_ec2_1 = require("@aws-sdk/client-ec2"); const client_ecr_1 = require("@aws-sdk/client-ecr"); const client_ecs_1 = require("@aws-sdk/client-ecs"); const client_elastic_load_balancing_v2_1 = require("@aws-sdk/client-elastic-load-balancing-v2"); const client_iam_1 = require("@aws-sdk/client-iam"); const client_kms_1 = require("@aws-sdk/client-kms"); const client_lambda_1 = require("@aws-sdk/client-lambda"); const client_route_53_1 = require("@aws-sdk/client-route-53"); const client_s3_1 = require("@aws-sdk/client-s3"); const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager"); const client_sfn_1 = require("@aws-sdk/client-sfn"); const client_ssm_1 = require("@aws-sdk/client-ssm"); const client_sts_1 = require("@aws-sdk/client-sts"); const lib_storage_1 = require("@aws-sdk/lib-storage"); const middleware_endpoint_1 = require("@smithy/middleware-endpoint"); const util_retry_1 = require("@smithy/util-retry"); const account_cache_1 = require("./account-cache"); const cached_1 = require("./cached"); const user_agent_1 = require("./user-agent"); const logging_1 = require("../../logging"); const error_1 = require("../../toolkit/error"); const error_2 = require("../../util/error"); const tracing_1 = require("../../util/tracing"); /** * Base functionality of SDK without credential fetching */ let SDK = SDK_1 = class SDK { constructor(credProvider, region, requestHandler, logger) { this.credProvider = credProvider; /** * STS is used to check credential validity, don't do too many retries. */ this.stsRetryStrategy = new util_retry_1.ConfiguredRetryStrategy(3, (attempt) => 100 * (2 ** attempt)); /** * Whether we have proof that the credentials have not expired * * We need to do some manual plumbing around this because the JS SDKv2 treats `ExpiredToken` * as retriable and we have hefty retries on CFN calls making the CLI hang for a good 15 minutes * if the credentials have expired. */ this._credentialsValidated = false; this.config = { region, credentials: credProvider, requestHandler, retryStrategy: new util_retry_1.ConfiguredRetryStrategy(7, (attempt) => 300 * (2 ** attempt)), customUserAgent: (0, user_agent_1.defaultCliUserAgent)(), logger, }; this.currentRegion = region; } appendCustomUserAgent(userAgentData) { if (!userAgentData) { return; } const currentCustomUserAgent = this.config.customUserAgent; this.config.customUserAgent = currentCustomUserAgent ? `${currentCustomUserAgent} ${userAgentData}` : userAgentData; } removeCustomUserAgent(userAgentData) { this.config.customUserAgent = this.config.customUserAgent?.replace(userAgentData, ''); } appsync() { const client = new client_appsync_1.AppSyncClient(this.config); return { getSchemaCreationStatus: (input) => client.send(new client_appsync_1.GetSchemaCreationStatusCommand(input)), startSchemaCreation: (input) => client.send(new client_appsync_1.StartSchemaCreationCommand(input)), updateApiKey: (input) => client.send(new client_appsync_1.UpdateApiKeyCommand(input)), updateFunction: (input) => client.send(new client_appsync_1.UpdateFunctionCommand(input)), updateResolver: (input) => client.send(new client_appsync_1.UpdateResolverCommand(input)), // Pagination Functions listFunctions: async (input) => { const functions = Array(); const paginator = (0, client_appsync_1.paginateListFunctions)({ client }, input); for await (const page of paginator) { functions.push(...(page.functions || [])); } return functions; }, }; } cloudFormation() { const client = new client_cloudformation_1.CloudFormationClient({ ...this.config, retryStrategy: new util_retry_1.ConfiguredRetryStrategy(11, (attempt) => 1000 * (2 ** attempt)), }); return { continueUpdateRollback: async (input) => client.send(new client_cloudformation_1.ContinueUpdateRollbackCommand(input)), createChangeSet: (input) => client.send(new client_cloudformation_1.CreateChangeSetCommand(input)), createGeneratedTemplate: (input) => client.send(new client_cloudformation_1.CreateGeneratedTemplateCommand(input)), createStack: (input) => client.send(new client_cloudformation_1.CreateStackCommand(input)), deleteChangeSet: (input) => client.send(new client_cloudformation_1.DeleteChangeSetCommand(input)), deleteGeneratedTemplate: (input) => client.send(new client_cloudformation_1.DeleteGeneratedTemplateCommand(input)), deleteStack: (input) => client.send(new client_cloudformation_1.DeleteStackCommand(input)), describeChangeSet: (input) => client.send(new client_cloudformation_1.DescribeChangeSetCommand(input)), describeGeneratedTemplate: (input) => client.send(new client_cloudformation_1.DescribeGeneratedTemplateCommand(input)), describeResourceScan: (input) => client.send(new client_cloudformation_1.DescribeResourceScanCommand(input)), describeStacks: (input) => client.send(new client_cloudformation_1.DescribeStacksCommand(input)), describeStackResources: (input) => client.send(new client_cloudformation_1.DescribeStackResourcesCommand(input)), executeChangeSet: (input) => client.send(new client_cloudformation_1.ExecuteChangeSetCommand(input)), getGeneratedTemplate: (input) => client.send(new client_cloudformation_1.GetGeneratedTemplateCommand(input)), getTemplate: (input) => client.send(new client_cloudformation_1.GetTemplateCommand(input)), getTemplateSummary: (input) => client.send(new client_cloudformation_1.GetTemplateSummaryCommand(input)), listExports: (input) => client.send(new client_cloudformation_1.ListExportsCommand(input)), listResourceScanRelatedResources: (input) => client.send(new client_cloudformation_1.ListResourceScanRelatedResourcesCommand(input)), listResourceScanResources: (input) => client.send(new client_cloudformation_1.ListResourceScanResourcesCommand(input)), listResourceScans: (input) => client.send(new client_cloudformation_1.ListResourceScansCommand(input)), listStacks: (input) => client.send(new client_cloudformation_1.ListStacksCommand(input)), rollbackStack: (input) => client.send(new client_cloudformation_1.RollbackStackCommand(input)), startResourceScan: (input) => client.send(new client_cloudformation_1.StartResourceScanCommand(input)), updateStack: (input) => client.send(new client_cloudformation_1.UpdateStackCommand(input)), updateTerminationProtection: (input) => client.send(new client_cloudformation_1.UpdateTerminationProtectionCommand(input)), describeStackEvents: (input) => { return client.send(new client_cloudformation_1.DescribeStackEventsCommand(input)); }, listStackResources: async (input) => { const stackResources = Array(); const paginator = (0, client_cloudformation_1.paginateListStackResources)({ client }, input); for await (const page of paginator) { stackResources.push(...(page?.StackResourceSummaries || [])); } return stackResources; }, }; } cloudWatchLogs() { const client = new client_cloudwatch_logs_1.CloudWatchLogsClient(this.config); return { describeLogGroups: (input) => client.send(new client_cloudwatch_logs_1.DescribeLogGroupsCommand(input)), filterLogEvents: (input) => client.send(new client_cloudwatch_logs_1.FilterLogEventsCommand(input)), }; } codeBuild() { const client = new client_codebuild_1.CodeBuildClient(this.config); return { updateProject: (input) => client.send(new client_codebuild_1.UpdateProjectCommand(input)), }; } ec2() { const client = new client_ec2_1.EC2Client(this.config); return { describeAvailabilityZones: (input) => client.send(new client_ec2_1.DescribeAvailabilityZonesCommand(input)), describeImages: (input) => client.send(new client_ec2_1.DescribeImagesCommand(input)), describeInstances: (input) => client.send(new client_ec2_1.DescribeInstancesCommand(input)), describeRouteTables: (input) => client.send(new client_ec2_1.DescribeRouteTablesCommand(input)), describeSecurityGroups: (input) => client.send(new client_ec2_1.DescribeSecurityGroupsCommand(input)), describeSubnets: (input) => client.send(new client_ec2_1.DescribeSubnetsCommand(input)), describeVpcEndpointServices: (input) => client.send(new client_ec2_1.DescribeVpcEndpointServicesCommand(input)), describeVpcs: (input) => client.send(new client_ec2_1.DescribeVpcsCommand(input)), describeVpnGateways: (input) => client.send(new client_ec2_1.DescribeVpnGatewaysCommand(input)), }; } ecr() { const client = new client_ecr_1.ECRClient(this.config); return { batchDeleteImage: (input) => client.send(new client_ecr_1.BatchDeleteImageCommand(input)), batchGetImage: (input) => client.send(new client_ecr_1.BatchGetImageCommand(input)), createRepository: (input) => client.send(new client_ecr_1.CreateRepositoryCommand(input)), describeImages: (input) => client.send(new client_ecr_1.DescribeImagesCommand(input)), describeRepositories: (input) => client.send(new client_ecr_1.DescribeRepositoriesCommand(input)), getAuthorizationToken: (input) => client.send(new client_ecr_1.GetAuthorizationTokenCommand(input)), listImages: (input) => client.send(new client_ecr_1.ListImagesCommand(input)), putImage: (input) => client.send(new client_ecr_1.PutImageCommand(input)), putImageScanningConfiguration: (input) => client.send(new client_ecr_1.PutImageScanningConfigurationCommand(input)), }; } ecs() { const client = new client_ecs_1.ECSClient(this.config); return { listClusters: (input) => client.send(new client_ecs_1.ListClustersCommand(input)), registerTaskDefinition: (input) => client.send(new client_ecs_1.RegisterTaskDefinitionCommand(input)), updateService: (input) => client.send(new client_ecs_1.UpdateServiceCommand(input)), // Waiters waitUntilServicesStable: (input) => { return (0, client_ecs_1.waitUntilServicesStable)({ client, maxWaitTime: 600, minDelay: 6, maxDelay: 6, }, input); }, }; } elbv2() { const client = new client_elastic_load_balancing_v2_1.ElasticLoadBalancingV2Client(this.config); return { describeListeners: (input) => client.send(new client_elastic_load_balancing_v2_1.DescribeListenersCommand(input)), describeLoadBalancers: (input) => client.send(new client_elastic_load_balancing_v2_1.DescribeLoadBalancersCommand(input)), describeTags: (input) => client.send(new client_elastic_load_balancing_v2_1.DescribeTagsCommand(input)), // Pagination Functions paginateDescribeListeners: async (input) => { const listeners = Array(); const paginator = (0, client_elastic_load_balancing_v2_1.paginateDescribeListeners)({ client }, input); for await (const page of paginator) { listeners.push(...(page?.Listeners || [])); } return listeners; }, paginateDescribeLoadBalancers: async (input) => { const loadBalancers = Array(); const paginator = (0, client_elastic_load_balancing_v2_1.paginateDescribeLoadBalancers)({ client }, input); for await (const page of paginator) { loadBalancers.push(...(page?.LoadBalancers || [])); } return loadBalancers; }, }; } iam() { const client = new client_iam_1.IAMClient(this.config); return { createPolicy: (input) => client.send(new client_iam_1.CreatePolicyCommand(input)), getPolicy: (input) => client.send(new client_iam_1.GetPolicyCommand(input)), getRole: (input) => client.send(new client_iam_1.GetRoleCommand(input)), }; } kms() { const client = new client_kms_1.KMSClient(this.config); return { describeKey: (input) => client.send(new client_kms_1.DescribeKeyCommand(input)), listAliases: (input) => client.send(new client_kms_1.ListAliasesCommand(input)), }; } lambda() { const client = new client_lambda_1.LambdaClient(this.config); return { invokeCommand: (input) => client.send(new client_lambda_1.InvokeCommand(input)), publishVersion: (input) => client.send(new client_lambda_1.PublishVersionCommand(input)), updateAlias: (input) => client.send(new client_lambda_1.UpdateAliasCommand(input)), updateFunctionCode: (input) => client.send(new client_lambda_1.UpdateFunctionCodeCommand(input)), updateFunctionConfiguration: (input) => client.send(new client_lambda_1.UpdateFunctionConfigurationCommand(input)), // Waiters waitUntilFunctionUpdated: (delaySeconds, input) => { return (0, client_lambda_1.waitUntilFunctionUpdatedV2)({ client, maxDelay: delaySeconds, minDelay: delaySeconds, maxWaitTime: delaySeconds * 60, }, input); }, }; } route53() { const client = new client_route_53_1.Route53Client(this.config); return { getHostedZone: (input) => client.send(new client_route_53_1.GetHostedZoneCommand(input)), listHostedZones: (input) => client.send(new client_route_53_1.ListHostedZonesCommand(input)), listHostedZonesByName: (input) => client.send(new client_route_53_1.ListHostedZonesByNameCommand(input)), }; } s3() { const client = new client_s3_1.S3Client(this.config); return { deleteObjects: (input) => client.send(new client_s3_1.DeleteObjectsCommand({ ...input, ChecksumAlgorithm: 'SHA256', })), deleteObjectTagging: (input) => client.send(new client_s3_1.DeleteObjectTaggingCommand(input)), getBucketEncryption: (input) => client.send(new client_s3_1.GetBucketEncryptionCommand(input)), getBucketLocation: (input) => client.send(new client_s3_1.GetBucketLocationCommand(input)), getObject: (input) => client.send(new client_s3_1.GetObjectCommand(input)), getObjectTagging: (input) => client.send(new client_s3_1.GetObjectTaggingCommand(input)), listObjectsV2: (input) => client.send(new client_s3_1.ListObjectsV2Command(input)), putObjectTagging: (input) => client.send(new client_s3_1.PutObjectTaggingCommand({ ...input, ChecksumAlgorithm: 'SHA256', })), upload: (input) => { try { const upload = new lib_storage_1.Upload({ client, params: { ...input, ChecksumAlgorithm: 'SHA256' }, }); return upload.done(); } catch (e) { throw new error_1.AuthenticationError(`Upload failed: ${(0, error_2.formatErrorMessage)(e)}`); } }, }; } secretsManager() { const client = new client_secrets_manager_1.SecretsManagerClient(this.config); return { getSecretValue: (input) => client.send(new client_secrets_manager_1.GetSecretValueCommand(input)), }; } ssm() { const client = new client_ssm_1.SSMClient(this.config); return { getParameter: (input) => client.send(new client_ssm_1.GetParameterCommand(input)), }; } stepFunctions() { const client = new client_sfn_1.SFNClient(this.config); return { updateStateMachine: (input) => client.send(new client_sfn_1.UpdateStateMachineCommand(input)), }; } /** * The AWS SDK v3 requires a client config and a command in order to get an endpoint for * any given service. */ async getUrlSuffix(region) { const cfn = new client_cloudformation_1.CloudFormationClient({ region }); const endpoint = await (0, middleware_endpoint_1.getEndpointFromInstructions)({}, client_cloudformation_1.DescribeStackResourcesCommand, { ...cfn.config }); return endpoint.url.hostname.split(`${region}.`).pop(); } async currentAccount() { return (0, cached_1.cachedAsync)(this, CURRENT_ACCOUNT_KEY, async () => { const creds = await this.credProvider(); return SDK_1.accountCache.fetch(creds.accessKeyId, async () => { // if we don't have one, resolve from STS and store in cache. (0, logging_1.debug)('Looking up default account ID from STS'); const client = new client_sts_1.STSClient({ ...this.config, retryStrategy: this.stsRetryStrategy, }); const command = new client_sts_1.GetCallerIdentityCommand({}); const result = await client.send(command); const accountId = result.Account; const partition = result.Arn.split(':')[1]; if (!accountId) { throw new error_1.AuthenticationError("STS didn't return an account ID"); } (0, logging_1.debug)('Default account ID:', accountId); // Save another STS call later if this one already succeeded this._credentialsValidated = true; return { accountId, partition }; }); }); } /** * Make sure the the current credentials are not expired */ async validateCredentials() { if (this._credentialsValidated) { return; } const client = new client_sts_1.STSClient({ ...this.config, retryStrategy: this.stsRetryStrategy }); await client.send(new client_sts_1.GetCallerIdentityCommand({})); this._credentialsValidated = true; } }; exports.SDK = SDK; SDK.accountCache = new account_cache_1.AccountAccessKeyCache(); exports.SDK = SDK = SDK_1 = __decorate([ tracing_1.traceMethods ], SDK); const CURRENT_ACCOUNT_KEY = Symbol('current_account_key'); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2RrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSw0REFvQmlDO0FBQ2pDLDBFQW1Gd0M7QUFDeEMsNEVBUXlDO0FBQ3pDLGdFQUttQztBQUNuQyxvREE2QjZCO0FBQzdCLG9EQTZCNkI7QUFDN0Isb0RBYTZCO0FBQzdCLGdHQWVtRDtBQUNuRCxvREFXNkI7QUFDN0Isb0RBUTZCO0FBQzdCLDBEQWtCZ0M7QUFDaEMsOERBV2tDO0FBQ2xDLGtEQTRCNEI7QUFDNUIsNEVBS3lDO0FBQ3pDLG9EQUs2QjtBQUM3QixvREFLNkI7QUFDN0Isb0RBQTBFO0FBQzFFLHNEQUE4QztBQUM5QyxxRUFBMEU7QUFHMUUsbURBQTZEO0FBRTdELG1EQUF3RDtBQUN4RCxxQ0FBdUM7QUFFdkMsNkNBQW1EO0FBQ25ELDJDQUFzQztBQUN0QywrQ0FBMEQ7QUFDMUQsNENBQXNEO0FBQ3RELGdEQUFrRDtBQXFNbEQ7O0dBRUc7QUFFSSxJQUFNLEdBQUcsV0FBVCxNQUFNLEdBQUc7SUFxQmQsWUFDbUIsWUFBMkMsRUFDNUQsTUFBYyxFQUNkLGNBQXNDLEVBQ3RDLE1BQWU7UUFIRSxpQkFBWSxHQUFaLFlBQVksQ0FBK0I7UUFmOUQ7O1dBRUc7UUFDYyxxQkFBZ0IsR0FBRyxJQUFJLG9DQUF1QixDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFdEc7Ozs7OztXQU1HO1FBQ0ssMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBUXBDLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixNQUFNO1lBQ04sV0FBVyxFQUFFLFlBQVk7WUFDekIsY0FBYztZQUNkLGFBQWEsRUFBRSxJQUFJLG9DQUF1QixDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJ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QUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO2dCQUNsQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsbUJBQW1CO1FBQzlCLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDL0IsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLHNCQUFTLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDdkYsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUkscUNBQXdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO0lBQ3BDLENBQUM7O0FBM2NVLGtCQUFHO0FBQ1UsZ0JBQVksR0FBRyxJQUFJLHFDQUFxQixFQUFFLEFBQTlCLENBQStCO2NBRHhELEdBQUc7SUFEZixzQkFBWTtHQUNBLEdBQUcsQ0E0Y2Y7QUFFRCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXBwU3luY0NsaWVudCxcbiAgRnVuY3Rpb25Db25maWd1cmF0aW9uLFxuICBHZXRTY2hlbWFDcmVhdGlvblN0YXR1c0NvbW1hbmQsXG4gIHR5cGUgR2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgR2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNDb21tYW5kT3V0cHV0LFxuICB0eXBlIExpc3RGdW5jdGlvbnNDb21tYW5kSW5wdXQsXG4gIHBhZ2luYXRlTGlzdEZ1bmN0aW9ucyxcbiAgU3RhcnRTY2hlbWFDcmVhdGlvbkNvbW1hbmQsXG4gIHR5cGUgU3RhcnRTY2hlbWFDcmVhdGlvbkNvbW1hbmRJbnB1dCxcbiAgdHlwZSBTdGFydFNjaGVtYUNyZWF0aW9uQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlQXBpS2V5Q29tbWFuZCxcbiAgdHlwZSBVcGRhdGVBcGlLZXlDb21tYW5kSW5wdXQsXG4gIHR5cGUgVXBkYXRlQXBpS2V5Q29tbWFuZE91dHB1dCxcbiAgVXBkYXRlRnVuY3Rpb25Db21tYW5kLFxuICB0eXBlIFVwZGF0ZUZ1bmN0aW9uQ29tbWFuZElucHV0LFxuICB0eXBlIFVwZGF0ZUZ1bmN0aW9uQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlUmVzb2x2ZXJDb21tYW5kLFxuICB0eXBlIFVwZGF0ZVJlc29sdmVyQ29tbWFuZElucHV0LFxuICB0eXBlIFVwZGF0ZVJlc29sdmVyQ29tbWFuZE91dHB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWFwcHN5bmMnO1xuaW1wb3J0IHtcbiAgQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIENvbnRpbnVlVXBkYXRlUm9sbGJhY2tDb21tYW5kLFxuICBDb250aW51ZVVwZGF0ZVJvbGxiYWNrQ29tbWFuZElucHV0LFxuICBDb250aW51ZVVwZGF0ZVJvbGxiYWNrQ29tbWFuZE91dHB1dCxcbiAgQ3JlYXRlQ2hhbmdlU2V0Q29tbWFuZCxcbiAgdHlwZSBDcmVhdGVDaGFuZ2VTZXRDb21tYW5kSW5wdXQsXG4gIHR5cGUgQ3JlYXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dCxcbiAgQ3JlYXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kLFxuICB0eXBlIENyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICB0eXBlIENyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dCxcbiAgQ3JlYXRlU3RhY2tDb21tYW5kLFxuICB0eXBlIENyZWF0ZVN0YWNrQ29tbWFuZElucHV0LFxuICB0eXBlIENyZWF0ZVN0YWNrQ29tbWFuZE91dHB1dCxcbiAgRGVsZXRlQ2hhbmdlU2V0Q29tbWFuZCxcbiAgdHlwZSBEZWxldGVDaGFuZ2VTZXRDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVsZXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dCxcbiAgRGVsZXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kLFxuICB0eXBlIERlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICB0eXBlIERlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dCxcbiAgRGVsZXRlU3RhY2tDb21tYW5kLFxuICB0eXBlIERlbGV0ZVN0YWNrQ29tbWFuZElucHV0LFxuICB0eXBlIERlbGV0ZVN0YWNrQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVSZXNvdXJjZVNjYW5Db21tYW5kLFxuICB0eXBlIERlc2NyaWJlUmVzb3VyY2VTY2FuQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlUmVzb3VyY2VTY2FuQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVTdGFja0V2ZW50c0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVTdGFja0V2ZW50c0NvbW1hbmRJbnB1dCxcbiAgRGVzY3JpYmVTdGFja0V2ZW50c0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kLFxuICBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZElucHV0LFxuICBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVTdGFja3NDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlU3RhY2tzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlU3RhY2tzQ29tbWFuZE91dHB1dCxcbiAgRXhlY3V0ZUNoYW5nZVNldENvbW1hbmQsXG4gIHR5cGUgRXhlY3V0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCxcbiAgdHlwZSBFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dCxcbiAgR2V0R2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kLFxuICB0eXBlIEdldEdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICB0eXBlIEdldEdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dCxcbiAgR2V0VGVtcGxhdGVDb21tYW5kLFxuICB0eXBlIEdldFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICB0eXBlIEdldFRlbXBsYXRlQ29tbWFuZE91dHB1dCxcbiAgR2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZCxcbiAgdHlwZSBHZXRUZW1wbGF0ZVN1bW1hcnlDb21tYW5kSW5wdXQsXG4gIHR5cGUgR2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZE91dHB1dCxcbiAgTGlzdEV4cG9ydHNDb21tYW5kLFxuICB0eXBlIExpc3RFeHBvcnRzQ29tbWFuZElucHV0LFxuICB0eXBlIExpc3RFeHBvcnRzQ29tbWFuZE91dHB1dCxcbiAgTGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXNDb21tYW5kLFxuICB0eXBlIExpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzQ29tbWFuZElucHV0LFxuICB0eXBlIExpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzQ29tbWFuZE91dHB1dCxcbiAgTGlzdFJlc291cmNlU2NhblJlc291cmNlc0NvbW1hbmQsXG4gIHR5cGUgTGlzdFJlc291cmNlU2NhblJlc291cmNlc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBMaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzQ29tbWFuZE91dHB1dCxcbiAgTGlzdFJlc291cmNlU2NhbnNDb21tYW5kLFxuICB0eXBlIExpc3RSZXNvdXJjZVNjYW5zQ29tbWFuZElucHV0LFxuICB0eXBlIExpc3RSZXNvdXJjZVNjYW5zQ29tbWFuZE91dHB1dCxcbiAgdHlwZSBMaXN0U3RhY2tSZXNvdXJjZXNDb21tYW5kSW5wdXQsXG4gIExpc3RTdGFja3NDb21tYW5kLFxuICBMaXN0U3RhY2tzQ29tbWFuZElucHV0LFxuICBMaXN0U3RhY2tzQ29tbWFuZE91dHB1dCxcbiAgcGFnaW5hdGVMaXN0U3RhY2tSZXNvdXJjZXMsXG4gIFJvbGxiYWNrU3RhY2tDb21tYW5kLFxuICBSb2xsYmFja1N0YWNrQ29tbWFuZElucHV0LFxuICBSb2xsYmFja1N0YWNrQ29tbWFuZE91dHB1dCxcbiAgU3RhY2tSZXNvdXJjZVN1bW1hcnksXG4gIFN0YXJ0UmVzb3VyY2VTY2FuQ29tbWFuZCxcbiAgdHlwZSBTdGFydFJlc291cmNlU2NhbkNvbW1hbmRJbnB1dCxcbiAgdHlwZSBTdGFydFJlc291cmNlU2NhbkNvbW1hbmRPdXRwdXQsXG4gIFVwZGF0ZVN0YWNrQ29tbWFuZCxcbiAgdHlwZSBVcGRhdGVTdGFja0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBVcGRhdGVTdGFja0NvbW1hbmRPdXRwdXQsXG4gIFVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbkNvbW1hbmQsXG4gIHR5cGUgVXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uQ29tbWFuZElucHV0LFxuICB0eXBlIFVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbkNvbW1hbmRPdXRwdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQge1xuICBDbG91ZFdhdGNoTG9nc0NsaWVudCxcbiAgRGVzY3JpYmVMb2dHcm91cHNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlTG9nR3JvdXBzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlTG9nR3JvdXBzQ29tbWFuZE91dHB1dCxcbiAgRmlsdGVyTG9nRXZlbnRzQ29tbWFuZCxcbiAgRmlsdGVyTG9nRXZlbnRzQ29tbWFuZElucHV0LFxuICBGaWx0ZXJMb2dFdmVudHNDb21tYW5kT3V0cHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWR3YXRjaC1sb2dzJztcbmltcG9ydCB7XG4gIENvZGVCdWlsZENsaWVudCxcbiAgVXBkYXRlUHJvamVjdENvbW1hbmQsXG4gIHR5cGUgVXBkYXRlUHJvamVjdENvbW1hbmRJbnB1dCxcbiAgdHlwZSBVcGRhdGVQcm9qZWN0Q29tbWFuZE91dHB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNvZGVidWlsZCc7XG5pbXBvcnQge1xuICBEZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlQXZhaWxhYmlsaXR5Wm9uZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZUltYWdlc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVJbWFnZXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVJbWFnZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZUluc3RhbmNlc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVJbnN0YW5jZXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVJbnN0YW5jZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlUm91dGVUYWJsZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlU2VjdXJpdHlHcm91cHNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVN1Ym5ldHNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlU3VibmV0c0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVN1Ym5ldHNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlVnBjRW5kcG9pbnRTZXJ2aWNlc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVZwY3NDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlVnBjc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVZwY3NDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlVnBuR2F0ZXdheXNDb21tYW5kT3V0cHV0LFxuICBFQzJDbGllbnQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lYzInO1xuaW1wb3J0IHtcbiAgQmF0Y2hEZWxldGVJbWFnZUNvbW1hbmQsXG4gIEJhdGNoRGVsZXRlSW1hZ2VDb21tYW5kSW5wdXQsXG4gIEJhdGNoRGVsZXRlSW1hZ2VDb21tYW5kT3V0cHV0LFxuICBDcmVhdGVSZXBvc2l0b3J5Q29tbWFuZCxcbiAgdHlwZSBDcmVhdGVSZXBvc2l0b3J5Q29tbWFuZElucHV0LFxuICB0eXBlIENyZWF0ZVJlcG9zaXRvcnlDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZUltYWdlc0NvbW1hbmQgYXMgRUNSRGVzY3JpYmVJbWFnZXNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlSW1hZ2VzQ29tbWFuZElucHV0IGFzIEVDUkRlc2NyaWJlSW1hZ2VzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlSW1hZ2VzQ29tbWFuZE91dHB1dCBhcyBFQ1JEZXNjcmliZUltYWdlc0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlUmVwb3NpdG9yaWVzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmRPdXRwdXQsXG4gIEVDUkNsaWVudCxcbiAgR2V0QXV0aG9yaXphdGlvblRva2VuQ29tbWFuZCxcbiAgdHlwZSBHZXRBdXRob3JpemF0aW9uVG9rZW5Db21tYW5kSW5wdXQsXG4gIHR5cGUgR2V0QXV0aG9yaXphdGlvblRva2VuQ29tbWFuZE91dHB1dCxcbiAgTGlzdEltYWdlc0NvbW1hbmQsXG4gIExpc3RJbWFnZXNDb21tYW5kSW5wdXQsXG4gIExpc3RJbWFnZXNDb21tYW5kT3V0cHV0LFxuICBQdXRJbWFnZUNvbW1hbmQsXG4gIFB1dEltYWdlQ29tbWFuZElucHV0LFxuICBQdXRJbWFnZUNvbW1hbmRPdXRwdXQsXG4gIFB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uQ29tbWFuZCxcbiAgdHlwZSBQdXRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbkNvbW1hbmRJbnB1dCxcbiAgdHlwZSBQdXRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbkNvbW1hbmRPdXRwdXQsXG4gIEJhdGNoR2V0SW1hZ2VDb21tYW5kSW5wdXQsXG4gIEJhdGNoR2V0SW1hZ2VDb21tYW5kLFxuICBCYXRjaEdldEltYWdlQ29tbWFuZE91dHB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjcic7XG5pbXBvcnQge1xuICBEZXNjcmliZVNlcnZpY2VzQ29tbWFuZElucHV0LFxuICBFQ1NDbGllbnQsXG4gIExpc3RDbHVzdGVyc0NvbW1hbmQsXG4gIHR5cGUgTGlzdENsdXN0ZXJzQ29tbWFuZElucHV0LFxuICB0eXBlIExpc3RDbHVzdGVyc0NvbW1hbmRPdXRwdXQsXG4gIFJlZ2lzdGVyVGFza0RlZmluaXRpb25Db21tYW5kLFxuICBSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZElucHV0LFxuICB0eXBlIFJlZ2lzdGVyVGFza0RlZmluaXRpb25Db21tYW5kT3V0cHV0LFxuICBVcGRhdGVTZXJ2aWNlQ29tbWFuZCxcbiAgdHlwZSBVcGRhdGVTZXJ2aWNlQ29tbWFuZElucHV0LFxuICB0eXBlIFVwZGF0ZVNlcnZpY2VDb21tYW5kT3V0cHV0LFxuICB3YWl0VW50aWxTZXJ2aWNlc1N0YWJsZSxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjcyc7XG5pbXBvcnQge1xuICBEZXNjcmliZUxpc3RlbmVyc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVMaXN0ZW5lcnNDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVMaXN0ZW5lcnNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZUxvYWRCYWxhbmNlcnNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZUxvYWRCYWxhbmNlcnNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVRhZ3NDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlVGFnc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVRhZ3NDb21tYW5kT3V0cHV0LFxuICBFbGFzdGljTG9hZEJhbGFuY2luZ1YyQ2xpZW50LFxuICBMaXN0ZW5lcixcbiAgTG9hZEJhbGFuY2VyLFxuICBwYWdpbmF0ZURlc2NyaWJlTGlzdGVuZXJzLFxuICBwYWdpbmF0ZURlc2NyaWJlTG9hZEJhbGFuY2Vycyxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVsYXN0aWMtbG9hZC1