Socket
Socket
Sign inDemoInstall

@aws-cdk/aws-kinesis

Package Overview
Dependencies
Maintainers
4
Versions
288
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@aws-cdk/aws-kinesis - npm Package Compare versions

Comparing version 0.21.0 to 0.22.0

162

lib/kinesis.generated.d.ts

@@ -15,3 +15,3 @@ import cdk = require('@aws-cdk/cdk');

*/
name?: string | cdk.Token;
name?: string;
/**

@@ -49,7 +49,7 @@ * ``AWS::Kinesis::Stream.RetentionPeriodHours``

*
* @param parent the ``cdk.Construct`` this ``CfnStream`` is a part of
* @param name the name of the resource in the ``cdk.Construct`` tree
* @param properties the properties of this ``CfnStream``
* @param scope scope in which this resource is defined
* @param id scoped id of the resource
* @param props resource properties
*/
constructor(parent: cdk.Construct, name: string, properties: CfnStreamProps);
constructor(scope: cdk.Construct, id: string, props: CfnStreamProps);
readonly propertyOverrides: CfnStreamProps;

@@ -69,3 +69,3 @@ protected renderProperties(properties: any): {

*/
encryptionType: string | cdk.Token;
encryptionType: string;
/**

@@ -75,81 +75,5 @@ * ``CfnStream.StreamEncryptionProperty.KeyId``

*/
keyId: string | cdk.Token;
keyId: string;
}
}
export declare namespace cloudformation {
/**
* @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesis-stream.html
*/
interface StreamResourceProps {
/**
* ``AWS::Kinesis::Stream.ShardCount``
* @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesis-stream.html#cfn-kinesis-stream-shardcount
*/
shardCount: number | cdk.Token;
/**
* ``AWS::Kinesis::Stream.Name``
* @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesis-stream.html#cfn-kinesis-stream-name
*/
name?: string | cdk.Token;
/**
* ``AWS::Kinesis::Stream.RetentionPeriodHours``
* @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesis-stream.html#cfn-kinesis-stream-retentionperiodhours
*/
retentionPeriodHours?: number | cdk.Token;
/**
* ``AWS::Kinesis::Stream.StreamEncryption``
* @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesis-stream.html#cfn-kinesis-stream-streamencryption
*/
streamEncryption?: StreamResource.StreamEncryptionProperty | cdk.Token;
/**
* ``AWS::Kinesis::Stream.Tags``
* @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesis-stream.html#cfn-kinesis-stream-tags
*/
tags?: Array<cdk.Tag | cdk.Token> | cdk.Token;
}
/**
* @deprecated "cloudformation.StreamResource" will be deprecated in a future release in favor of "CfnStream" (see https://github.com/awslabs/aws-cdk/issues/878)
* @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesis-stream.html
*/
class StreamResource extends cdk.Resource {
/**
* The CloudFormation resource type name for this resource class.
*/
static readonly resourceTypeName = "AWS::Kinesis::Stream";
/**
* @cloudformation_attribute Arn
*/
readonly streamArn: string;
readonly streamId: string;
/**
* Creates a new ``AWS::Kinesis::Stream``.
*
* @param parent the ``cdk.Construct`` this ``StreamResource`` is a part of
* @param name the name of the resource in the ``cdk.Construct`` tree
* @param properties the properties of this ``StreamResource``
*/
constructor(parent: cdk.Construct, name: string, properties: StreamResourceProps);
readonly propertyOverrides: StreamResourceProps;
protected renderProperties(properties: any): {
[key: string]: any;
};
}
namespace StreamResource {
/**
* @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesis-stream-streamencryption.html
*/
interface StreamEncryptionProperty {
/**
* ``StreamResource.StreamEncryptionProperty.EncryptionType``
* @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesis-stream-streamencryption.html#cfn-kinesis-stream-streamencryption-encryptiontype
*/
encryptionType: string | cdk.Token;
/**
* ``StreamResource.StreamEncryptionProperty.KeyId``
* @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesis-stream-streamencryption.html#cfn-kinesis-stream-streamencryption-keyid
*/
keyId: string | cdk.Token;
}
}
}
/**

@@ -163,3 +87,3 @@ * @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesis-streamconsumer.html

*/
consumerName: string | cdk.Token;
consumerName: string;
/**

@@ -169,3 +93,3 @@ * ``AWS::Kinesis::StreamConsumer.StreamARN``

*/
streamArn: string | cdk.Token;
streamArn: string;
}

@@ -204,7 +128,7 @@ /**

*
* @param parent the ``cdk.Construct`` this ``CfnStreamConsumer`` is a part of
* @param name the name of the resource in the ``cdk.Construct`` tree
* @param properties the properties of this ``CfnStreamConsumer``
* @param scope scope in which this resource is defined
* @param id scoped id of the resource
* @param props resource properties
*/
constructor(parent: cdk.Construct, name: string, properties: CfnStreamConsumerProps);
constructor(scope: cdk.Construct, id: string, props: CfnStreamConsumerProps);
readonly propertyOverrides: CfnStreamConsumerProps;

@@ -215,61 +139,1 @@ protected renderProperties(properties: any): {

}
export declare namespace cloudformation {
/**
* @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesis-streamconsumer.html
*/
interface StreamConsumerResourceProps {
/**
* ``AWS::Kinesis::StreamConsumer.ConsumerName``
* @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesis-streamconsumer.html#cfn-kinesis-streamconsumer-consumername
*/
consumerName: string | cdk.Token;
/**
* ``AWS::Kinesis::StreamConsumer.StreamARN``
* @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesis-streamconsumer.html#cfn-kinesis-streamconsumer-streamarn
*/
streamArn: string | cdk.Token;
}
/**
* @deprecated "cloudformation.StreamConsumerResource" will be deprecated in a future release in favor of "CfnStreamConsumer" (see https://github.com/awslabs/aws-cdk/issues/878)
* @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesis-streamconsumer.html
*/
class StreamConsumerResource extends cdk.Resource {
/**
* The CloudFormation resource type name for this resource class.
*/
static readonly resourceTypeName = "AWS::Kinesis::StreamConsumer";
/**
* @cloudformation_attribute ConsumerARN
*/
readonly streamConsumerConsumerArn: string;
/**
* @cloudformation_attribute ConsumerCreationTimestamp
*/
readonly streamConsumerConsumerCreationTimestamp: string;
/**
* @cloudformation_attribute ConsumerName
*/
readonly streamConsumerConsumerName: string;
/**
* @cloudformation_attribute ConsumerStatus
*/
readonly streamConsumerConsumerStatus: string;
/**
* @cloudformation_attribute StreamARN
*/
readonly streamConsumerStreamArn: string;
readonly streamConsumerArn: string;
/**
* Creates a new ``AWS::Kinesis::StreamConsumer``.
*
* @param parent the ``cdk.Construct`` this ``StreamConsumerResource`` is a part of
* @param name the name of the resource in the ``cdk.Construct`` tree
* @param properties the properties of this ``StreamConsumerResource``
*/
constructor(parent: cdk.Construct, name: string, properties: StreamConsumerResourceProps);
readonly propertyOverrides: StreamConsumerResourceProps;
protected renderProperties(properties: any): {
[key: string]: any;
};
}
}

91

lib/stream.d.ts

@@ -5,2 +5,44 @@ import iam = require('@aws-cdk/aws-iam');

import cdk = require('@aws-cdk/cdk');
export interface IStream extends cdk.IConstruct, logs.ILogSubscriptionDestination {
/**
* The ARN of the stream.
*/
readonly streamArn: string;
/**
* The name of the stream
*/
readonly streamName: string;
/**
* Optional KMS encryption key associated with this stream.
*/
readonly encryptionKey?: kms.IEncryptionKey;
/**
* Exports this stream from the stack.
*/
export(): StreamImportProps;
/**
* Grant read permissions for this stream and its contents to an IAM
* principal (Role/Group/User).
*
* If an encryption key is used, permission to ues the key to decrypt the
* contents of the stream will also be granted.
*/
grantRead(identity?: iam.IPrincipal): void;
/**
* Grant write permissions for this stream and its contents to an IAM
* principal (Role/Group/User).
*
* If an encryption key is used, permission to ues the key to encrypt the
* contents of the stream will also be granted.
*/
grantWrite(identity?: iam.IPrincipal): void;
/**
* Grants read/write permissions for this stream and its contents to an IAM
* principal (Role/Group/User).
*
* If an encryption key is used, permission to use the key for
* encrypt/decrypt will also be granted.
*/
grantReadWrite(identity?: iam.IPrincipal): void;
}
/**

@@ -11,3 +53,3 @@ * A reference to a stream. The easiest way to instantiate is to call

*/
export interface StreamRefProps {
export interface StreamImportProps {
/**

@@ -20,3 +62,3 @@ * The ARN of the stream.

*/
encryptionKey?: kms.EncryptionKeyRefProps;
encryptionKey?: kms.EncryptionKeyImportProps;
}

@@ -32,3 +74,3 @@ /**

*
* StreamRef.import(this, 'MyImportedStream', { streamArn: ... });
* Stream.import(this, 'MyImportedStream', { streamArn: ... });
*

@@ -38,16 +80,7 @@ * You can also export a stream and import it into another stack:

* const ref = myStream.export();
* StreamRef.import(this, 'MyImportedStream', ref);
* Stream.import(this, 'MyImportedStream', ref);
*
*/
export declare abstract class StreamRef extends cdk.Construct implements logs.ILogSubscriptionDestination {
export declare abstract class StreamBase extends cdk.Construct implements IStream {
/**
* Creates a Stream construct that represents an external stream.
*
* @param parent The parent creating construct (usually `this`).
* @param name The construct's name.
* @param ref A StreamRefProps object. Can be obtained from a call to
* `stream.export()`.
*/
static import(parent: cdk.Construct, name: string, props: StreamRefProps): StreamRef;
/**
* The ARN of the stream.

@@ -63,3 +96,3 @@ */

*/
abstract readonly encryptionKey?: kms.EncryptionKeyRef;
abstract readonly encryptionKey?: kms.IEncryptionKey;
/**

@@ -69,7 +102,4 @@ * The role that can be used by CloudWatch logs to write to this stream

private cloudWatchLogsRole?;
abstract export(): StreamImportProps;
/**
* Exports this stream from the stack.
*/
export(): StreamRefProps;
/**
* Grant write permissions for this stream and its contents to an IAM

@@ -98,3 +128,3 @@ * principal (Role/Group/User).

grantReadWrite(identity?: iam.IPrincipal): void;
logSubscriptionDestination(sourceLogGroup: logs.LogGroupRef): logs.LogSubscriptionDestination;
logSubscriptionDestination(sourceLogGroup: logs.ILogGroup): logs.LogSubscriptionDestination;
/**

@@ -139,3 +169,3 @@ * Generate a CloudWatch Logs Destination and return the properties in the form o a subscription destination

*/
encryptionKey?: kms.EncryptionKeyRef;
encryptionKey?: kms.IEncryptionKey;
}

@@ -145,9 +175,22 @@ /**

*/
export declare class Stream extends StreamRef {
export declare class Stream extends StreamBase {
/**
* Creates a Stream construct that represents an external stream.
*
* @param scope The parent creating construct (usually `this`).
* @param id The construct's name.
* @param ref A `StreamAttributes` object. Can be obtained from a call to
* `stream.export()`.
*/
static import(scope: cdk.Construct, id: string, props: StreamImportProps): IStream;
readonly streamArn: string;
readonly streamName: string;
readonly encryptionKey?: kms.EncryptionKeyRef;
readonly encryptionKey?: kms.IEncryptionKey;
private readonly stream;
constructor(parent: cdk.Construct, name: string, props?: StreamProps);
constructor(scope: cdk.Construct, id: string, props?: StreamProps);
/**
* Exports this stream from the stack.
*/
export(): StreamImportProps;
/**
* Set up key properties and return the Stream encryption property from the

@@ -154,0 +197,0 @@ * user's configuration.

@@ -17,3 +17,3 @@ "use strict";

*
* StreamRef.import(this, 'MyImportedStream', { streamArn: ... });
* Stream.import(this, 'MyImportedStream', { streamArn: ... });
*

@@ -23,27 +23,7 @@ * You can also export a stream and import it into another stack:

* const ref = myStream.export();
* StreamRef.import(this, 'MyImportedStream', ref);
* Stream.import(this, 'MyImportedStream', ref);
*
*/
class StreamRef extends cdk.Construct {
class StreamBase extends cdk.Construct {
/**
* Creates a Stream construct that represents an external stream.
*
* @param parent The parent creating construct (usually `this`).
* @param name The construct's name.
* @param ref A StreamRefProps object. Can be obtained from a call to
* `stream.export()`.
*/
static import(parent, name, props) {
return new ImportedStreamRef(parent, name, props);
}
/**
* Exports this stream from the stack.
*/
export() {
return {
streamArn: new cdk.Output(this, 'StreamArn', { value: this.streamArn }).makeImportValue().toString(),
encryptionKey: this.encryptionKey ? this.encryptionKey.export() : undefined,
};
}
/**
* Grant write permissions for this stream and its contents to an IAM

@@ -122,5 +102,6 @@ * principal (Role/Group/User).

if (!this.cloudWatchLogsRole) {
const stack = cdk.Stack.find(this);
// Create a role to be assumed by CWL that can write to this stream and pass itself.
this.cloudWatchLogsRole = new iam.Role(this, 'CloudWatchLogsCanPutRecords', {
assumedBy: new iam.ServicePrincipal(new cdk.FnConcat('logs.', new cdk.AwsRegion(), '.amazonaws.com').toString()),
assumedBy: new iam.ServicePrincipal(`logs.${stack.region}.amazonaws.com`)
});

@@ -146,3 +127,4 @@ this.cloudWatchLogsRole.addToPolicy(new iam.PolicyStatement().addAction('kinesis:PutRecord').addResource(this.streamArn));

crossAccountLogSubscriptionDestination(sourceLogGroup) {
const sourceStack = cdk.Stack.find(sourceLogGroup);
const sourceLogGroupConstruct = sourceLogGroup;
const sourceStack = cdk.Stack.find(sourceLogGroupConstruct);
const thisStack = cdk.Stack.find(this);

@@ -154,3 +136,6 @@ if (!sourceStack.env.account || !thisStack.env.account) {

// combination of (stream, loggroup).
const uniqueId = new cdk.HashedAddressingScheme().allocateAddress([sourceLogGroup.path.replace('/', ''), sourceStack.env.account]);
const uniqueId = new cdk.HashedAddressingScheme().allocateAddress([
sourceLogGroupConstruct.node.path.replace('/', ''),
sourceStack.env.account
]);
// The destination lives in the target account

@@ -179,9 +164,20 @@ const dest = new logs.CrossAccountDestination(this, `CWLDestination${uniqueId}`, {

}
exports.StreamRef = StreamRef;
exports.StreamBase = StreamBase;
/**
* A Kinesis stream. Can be encrypted with a KMS key.
*/
class Stream extends StreamRef {
constructor(parent, name, props = {}) {
super(parent, name);
class Stream extends StreamBase {
/**
* Creates a Stream construct that represents an external stream.
*
* @param scope The parent creating construct (usually `this`).
* @param id The construct's name.
* @param ref A `StreamAttributes` object. Can be obtained from a call to
* `stream.export()`.
*/
static import(scope, id, props) {
return new ImportedStream(scope, id, props);
}
constructor(scope, id, props = {}) {
super(scope, id);
const shardCount = props.shardCount || 1;

@@ -203,6 +199,15 @@ const retentionPeriodHours = props.retentionPeriodHours || 24;

if (props.streamName) {
this.addMetadata('aws:cdk:hasPhysicalName', props.streamName);
this.node.addMetadata('aws:cdk:hasPhysicalName', props.streamName);
}
}
/**
* Exports this stream from the stack.
*/
export() {
return {
streamArn: new cdk.Output(this, 'StreamArn', { value: this.streamArn }).makeImportValue().toString(),
encryptionKey: this.encryptionKey ? this.encryptionKey.export() : undefined,
};
}
/**
* Set up key properties and return the Stream encryption property from the

@@ -223,3 +228,3 @@ * user's configuration.

const encryptionKey = props.encryptionKey || new kms.EncryptionKey(this, 'Key', {
description: `Created by ${this.path}`
description: `Created by ${this.node.path}`
});

@@ -251,10 +256,12 @@ const streamEncryption = {

})(StreamEncryption = exports.StreamEncryption || (exports.StreamEncryption = {}));
class ImportedStreamRef extends StreamRef {
constructor(parent, name, props) {
super(parent, name);
class ImportedStream extends StreamBase {
constructor(scope, id, props) {
super(scope, id);
this.props = props;
this.streamArn = props.streamArn;
// Get the name from the ARN
this.streamName = cdk.ArnUtils.parse(props.streamArn).resourceName;
this.streamName = cdk.Stack.find(this).parseArn(props.streamArn).resourceName;
if (props.encryptionKey) {
this.encryptionKey = kms.EncryptionKeyRef.import(parent, 'Key', props.encryptionKey);
// TODO: import "scope" should be changed to "this"
this.encryptionKey = kms.EncryptionKey.import(scope, 'Key', props.encryptionKey);
}

@@ -265,3 +272,6 @@ else {

}
export() {
return this.props;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsd0NBQXlDO0FBQ3pDLHdDQUF5QztBQUN6QywwQ0FBMkM7QUFDM0Msb0NBQXFDO0FBQ3JDLDJEQUFnRDtBQW1CaEQ7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFzQixTQUFVLFNBQVEsR0FBRyxDQUFDLFNBQVM7SUFDbkQ7Ozs7Ozs7T0FPRztJQUNJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBcUIsRUFBRSxJQUFZLEVBQUUsS0FBcUI7UUFDN0UsT0FBTyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQXNCRDs7T0FFRztJQUNJLE1BQU07UUFDWCxPQUFPO1lBQ0wsU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsRUFBRTtZQUNwRyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUM1RSxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFNBQVMsQ0FBQyxRQUF5QjtRQUN4QyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FDUixRQUFRLEVBQ1I7WUFDRSxhQUFhLEVBQUU7Z0JBQ2Isd0JBQXdCO2dCQUN4QixvQkFBb0I7Z0JBQ3BCLDBCQUEwQjthQUMzQjtZQUNELFVBQVUsRUFBRTtnQkFDVixhQUFhO2FBQ2Q7U0FDRixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksVUFBVSxDQUFDLFFBQXlCO1FBQ3pDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUNSLFFBQVEsRUFDUjtZQUNFLGFBQWEsRUFBRTtnQkFDYix3QkFBd0I7Z0JBQ3hCLG1CQUFtQjtnQkFDbkIsb0JBQW9CO2FBQ3JCO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLHFCQUFxQjtnQkFDckIsYUFBYTthQUNkO1NBQ0YsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGNBQWMsQ0FBQyxRQUF5QjtRQUM3QyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FDUixRQUFRLEVBQ1I7WUFDRSxhQUFhLEVBQUU7Z0JBQ2Isd0JBQXdCO2dCQUN4QixvQkFBb0I7Z0JBQ3BCLDBCQUEwQjtnQkFDMUIsbUJBQW1CO2dCQUNuQixvQkFBb0I7YUFDckI7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsYUFBYTtnQkFDYixxQkFBcUI7Z0JBQ3JCLGFBQWE7YUFDZDtTQUNGLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTSwwQkFBMEIsQ0FBQyxjQUFnQztRQUNoRSxxSUFBcUk7UUFDckksSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUM1QixvRkFBb0Y7WUFDcEYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsNkJBQTZCLEVBQUU7Z0JBQzFFLFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLGdCQUFnQixDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDakgsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDMUgsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ3ZJO1FBRUQsZ0dBQWdHO1FBQ2hHLG1FQUFtRTtRQUNuRSxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNuRCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2Qyx5RkFBeUY7UUFDekYsa0RBQWtEO1FBQ2xELE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBRXRFLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQUMsc0NBQXNDLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDcEU7UUFFRCxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7T0FFRztJQUNLLHNDQUFzQyxDQUFDLGNBQWdDO1FBQzdFLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXZDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFO1lBQ3RELE1BQU0sSUFBSSxLQUFLLENBQUMsa0hBQWtILENBQUMsQ0FBQztTQUNySTtRQUVELHNGQUFzRjtRQUN0RixxQ0FBcUM7UUFDckMsTUFBTSxRQUFRLEdBQUksSUFBSSxHQUFHLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFRLENBQUMsQ0FBQyxDQUFDO1FBRXJJLDhDQUE4QztRQUM5QyxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLFFBQVEsRUFBRSxFQUFFO1lBQy9FLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFtQjtTQUMvQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLGVBQWUsRUFBRTthQUN2QyxTQUFTLENBQUMsNEJBQTRCLENBQUM7YUFDdkMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7YUFDL0MsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUV0QixPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU8sS0FBSyxDQUFDLFFBQXdCLEVBQUUsT0FBMEQ7UUFDaEcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxlQUFlLEVBQUU7YUFDM0MsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7YUFDM0IsVUFBVSxDQUFDLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFFekMsc0RBQXNEO1FBQ3RELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLGVBQWUsRUFBRTtpQkFDM0MsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO2lCQUN0QyxVQUFVLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztTQUN2QztJQUNILENBQUM7Q0FDRjtBQW5NRCw4QkFtTUM7QUEwQ0Q7O0dBRUc7QUFDSCxNQUFhLE1BQU8sU0FBUSxTQUFTO0lBT25DLFlBQVksTUFBcUIsRUFBRSxJQUFZLEVBQUUsUUFBcUIsRUFBRTtRQUN0RSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXBCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixJQUFJLEVBQUUsQ0FBQztRQUM5RCxJQUFJLG9CQUFvQixHQUFHLEVBQUUsSUFBSSxvQkFBb0IsR0FBRyxHQUFHLEVBQUU7WUFDM0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1NBQzFFO1FBRUQsTUFBTSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLDZCQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUM1QyxJQUFJLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDdEIsb0JBQW9CO1lBQ3BCLFVBQVU7WUFDVixnQkFBZ0I7U0FDakIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUN2QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBRW5DLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUFFLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQUU7SUFDMUYsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGVBQWUsQ0FBQyxLQUFrQjtRQUt4QywwQkFBMEI7UUFDMUIsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLFVBQVUsSUFBSSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUM7UUFFeEUsMkRBQTJEO1FBQzNELElBQUksY0FBYyxLQUFLLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFO1lBQ2xFLE1BQU0sSUFBSSxLQUFLLENBQUMsMEVBQTBFLGNBQWMsR0FBRyxDQUFDLENBQUM7U0FDOUc7UUFFRCxJQUFJLGNBQWMsS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUU7WUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLENBQUM7U0FDbEU7UUFFRCxJQUFJLGNBQWMsS0FBSyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUU7WUFDM0MsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtnQkFDOUUsV0FBVyxFQUFFLGNBQWMsSUFBSSxDQUFDLElBQUksRUFBRTthQUN2QyxDQUFDLENBQUM7WUFFSCxNQUFNLGdCQUFnQixHQUF1QztnQkFDM0QsY0FBYyxFQUFFLEtBQUs7Z0JBQ3JCLEtBQUssRUFBRSxhQUFhLENBQUMsTUFBTTthQUM1QixDQUFDO1lBQ0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1NBQzVDO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDO0NBQ0Y7QUFsRUQsd0JBa0VDO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGdCQVdYO0FBWEQsV0FBWSxnQkFBZ0I7SUFDMUI7O09BRUc7SUFDSCx3Q0FBb0IsQ0FBQTtJQUVwQjs7O09BR0c7SUFDSCwrQkFBVyxDQUFBO0FBQ2IsQ0FBQyxFQVhXLGdCQUFnQixHQUFoQix3QkFBZ0IsS0FBaEIsd0JBQWdCLFFBVzNCO0FBRUQsTUFBTSxpQkFBa0IsU0FBUSxTQUFTO0lBS3ZDLFlBQVksTUFBcUIsRUFBRSxJQUFZLEVBQUUsS0FBcUI7UUFDcEUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVwQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFFakMsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQWEsQ0FBQztRQUVwRSxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3RGO2FBQU07WUFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztTQUNoQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpYW0gPSByZXF1aXJlKCdAYXdzLWNkay9hd3MtaWFtJyk7XG5pbXBvcnQga21zID0gcmVxdWlyZSgnQGF3cy1jZGsvYXdzLWttcycpO1xuaW1wb3J0IGxvZ3MgPSByZXF1aXJlKCdAYXdzLWNkay9hd3MtbG9ncycpO1xuaW1wb3J0IGNkayA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2NkaycpO1xuaW1wb3J0IHsgQ2ZuU3RyZWFtIH0gZnJvbSAnLi9raW5lc2lzLmdlbmVyYXRlZCc7XG5cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gYSBzdHJlYW0uIFRoZSBlYXNpZXN0IHdheSB0byBpbnN0YW50aWF0ZSBpcyB0byBjYWxsXG4gKiBgc3RyZWFtLmV4cG9ydCgpYC4gVGhlbiwgdGhlIGNvbnN1bWVyIGNhbiB1c2UgYFN0cmVhbS5pbXBvcnQodGhpcywgcmVmKWAgYW5kXG4gKiBnZXQgYSBgU3RyZWFtYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1SZWZQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBzdHJlYW0uXG4gICAqL1xuICBzdHJlYW1Bcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEtNUyBrZXkgc2VjdXJpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJlYW0gaWYgZW5jcnlwdGlvbiBpcyBlbmFibGVkLlxuICAgKi9cbiAgZW5jcnlwdGlvbktleT86IGttcy5FbmNyeXB0aW9uS2V5UmVmUHJvcHM7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIEtpbmVzaXMgU3RyZWFtLlxuICpcbiAqIFN0cmVhbXMgY2FuIGJlIGVpdGhlciBkZWZpbmVkIHdpdGhpbiB0aGlzIHN0YWNrOlxuICpcbiAqICAgbmV3IFN0cmVhbSh0aGlzLCAnTXlTdHJlYW0nLCB7IHByb3BzIH0pO1xuICpcbiAqIE9yIGltcG9ydGVkIGZyb20gYW4gZXhpc3Rpbmcgc3RyZWFtOlxuICpcbiAqICAgU3RyZWFtUmVmLmltcG9ydCh0aGlzLCAnTXlJbXBvcnRlZFN0cmVhbScsIHsgc3RyZWFtQXJuOiAuLi4gfSk7XG4gKlxuICogWW91IGNhbiBhbHNvIGV4cG9ydCBhIHN0cmVhbSBhbmQgaW1wb3J0IGl0IGludG8gYW5vdGhlciBzdGFjazpcbiAqXG4gKiAgIGNvbnN0IHJlZiA9IG15U3RyZWFtLmV4cG9ydCgpO1xuICogICBTdHJlYW1SZWYuaW1wb3J0KHRoaXMsICdNeUltcG9ydGVkU3RyZWFtJywgcmVmKTtcbiAqXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTdHJlYW1SZWYgZXh0ZW5kcyBjZGsuQ29uc3RydWN0IGltcGxlbWVudHMgbG9ncy5JTG9nU3Vic2NyaXB0aW9uRGVzdGluYXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIFN0cmVhbSBjb25zdHJ1Y3QgdGhhdCByZXByZXNlbnRzIGFuIGV4dGVybmFsIHN0cmVhbS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IGNyZWF0aW5nIGNvbnN0cnVjdCAodXN1YWxseSBgdGhpc2ApLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgY29uc3RydWN0J3MgbmFtZS5cbiAgICogQHBhcmFtIHJlZiBBIFN0cmVhbVJlZlByb3BzIG9iamVjdC4gQ2FuIGJlIG9idGFpbmVkIGZyb20gYSBjYWxsIHRvXG4gICAqIGBzdHJlYW0uZXhwb3J0KClgLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpbXBvcnQocGFyZW50OiBjZGsuQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBTdHJlYW1SZWZQcm9wcyk6IFN0cmVhbVJlZiB7XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZFN0cmVhbVJlZihwYXJlbnQsIG5hbWUsIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgc3RyZWFtQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzdHJlYW1cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBzdHJlYW1OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIEtNUyBlbmNyeXB0aW9uIGtleSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZW5jcnlwdGlvbktleT86IGttcy5FbmNyeXB0aW9uS2V5UmVmO1xuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSB0aGF0IGNhbiBiZSB1c2VkIGJ5IENsb3VkV2F0Y2ggbG9ncyB0byB3cml0ZSB0byB0aGlzIHN0cmVhbVxuICAgKi9cbiAgcHJpdmF0ZSBjbG91ZFdhdGNoTG9nc1JvbGU/OiBpYW0uUm9sZTtcblxuICAvKipcbiAgICogRXhwb3J0cyB0aGlzIHN0cmVhbSBmcm9tIHRoZSBzdGFjay5cbiAgICovXG4gIHB1YmxpYyBleHBvcnQoKTogU3RyZWFtUmVmUHJvcHMge1xuICAgIHJldHVybiB7XG4gICAgICBzdHJlYW1Bcm46IG5ldyBjZGsuT3V0cHV0KHRoaXMsICdTdHJlYW1Bcm4nLCB7IHZhbHVlOiB0aGlzLnN0cmVhbUFybiB9KS5tYWtlSW1wb3J0VmFsdWUoKS50b1N0cmluZygpLFxuICAgICAgZW5jcnlwdGlvbktleTogdGhpcy5lbmNyeXB0aW9uS2V5ID8gdGhpcy5lbmNyeXB0aW9uS2V5LmV4cG9ydCgpIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgd3JpdGUgcGVybWlzc2lvbnMgZm9yIHRoaXMgc3RyZWFtIGFuZCBpdHMgY29udGVudHMgdG8gYW4gSUFNXG4gICAqIHByaW5jaXBhbCAoUm9sZS9Hcm91cC9Vc2VyKS5cbiAgICpcbiAgICogSWYgYW4gZW5jcnlwdGlvbiBrZXkgaXMgdXNlZCwgcGVybWlzc2lvbiB0byB1ZXMgdGhlIGtleSB0byBkZWNyeXB0IHRoZVxuICAgKiBjb250ZW50cyBvZiB0aGUgc3RyZWFtIHdpbGwgYWxzbyBiZSBncmFudGVkLlxuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZChpZGVudGl0eT86IGlhbS5JUHJpbmNpcGFsKSB7XG4gICAgaWYgKCFpZGVudGl0eSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmdyYW50KFxuICAgICAgaWRlbnRpdHksXG4gICAgICB7XG4gICAgICAgIHN0cmVhbUFjdGlvbnM6IFtcbiAgICAgICAgICAna2luZXNpczpEZXNjcmliZVN0cmVhbScsXG4gICAgICAgICAgJ2tpbmVzaXM6R2V0UmVjb3JkcycsXG4gICAgICAgICAgJ2tpbmVzaXM6R2V0U2hhcmRJdGVyYXRvcidcbiAgICAgICAgXSxcbiAgICAgICAga2V5QWN0aW9uczogW1xuICAgICAgICAgICdrbXM6RGVjcnlwdCdcbiAgICAgICAgXVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyBmb3IgdGhpcyBzdHJlYW0gYW5kIGl0cyBjb250ZW50cyB0byBhbiBJQU1cbiAgICogcHJpbmNpcGFsIChSb2xlL0dyb3VwL1VzZXIpLlxuICAgKlxuICAgKiBJZiBhbiBlbmNyeXB0aW9uIGtleSBpcyB1c2VkLCBwZXJtaXNzaW9uIHRvIHVlcyB0aGUga2V5IHRvIGRlY3J5cHQgdGhlXG4gICAqIGNvbnRlbnRzIG9mIHRoZSBzdHJlYW0gd2lsbCBhbHNvIGJlIGdyYW50ZWQuXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRXcml0ZShpZGVudGl0eT86IGlhbS5JUHJpbmNpcGFsKSB7XG4gICAgaWYgKCFpZGVudGl0eSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhbnQoXG4gICAgICBpZGVudGl0eSxcbiAgICAgIHtcbiAgICAgICAgc3RyZWFtQWN0aW9uczogW1xuICAgICAgICAgICdraW5lc2lzOkRlc2NyaWJlU3RyZWFtJyxcbiAgICAgICAgICAna2luZXNpczpQdXRSZWNvcmQnLFxuICAgICAgICAgICdraW5lc2lzOlB1dFJlY29yZHMnXG4gICAgICAgIF0sXG4gICAgICAgIGtleUFjdGlvbnM6IFtcbiAgICAgICAgICAna21zOkdlbmVyYXRlRGF0YUtleScsXG4gICAgICAgICAgJ2ttczpFbmNyeXB0J1xuICAgICAgICBdXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcmVhZC93cml0ZSBwZXJtaXNzaW9ucyBmb3IgdGhpcyBzdHJlYW0gYW5kIGl0cyBjb250ZW50cyB0byBhbiBJQU1cbiAgICogcHJpbmNpcGFsIChSb2xlL0dyb3VwL1VzZXIpLlxuICAgKlxuICAgKiBJZiBhbiBlbmNyeXB0aW9uIGtleSBpcyB1c2VkLCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUga2V5IGZvclxuICAgKiBlbmNyeXB0L2RlY3J5cHQgd2lsbCBhbHNvIGJlIGdyYW50ZWQuXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkV3JpdGUoaWRlbnRpdHk/OiBpYW0uSVByaW5jaXBhbCkge1xuICAgIGlmICghaWRlbnRpdHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5ncmFudChcbiAgICAgIGlkZW50aXR5LFxuICAgICAge1xuICAgICAgICBzdHJlYW1BY3Rpb25zOiBbXG4gICAgICAgICAgJ2tpbmVzaXM6RGVzY3JpYmVTdHJlYW0nLFxuICAgICAgICAgICdraW5lc2lzOkdldFJlY29yZHMnLFxuICAgICAgICAgICdraW5lc2lzOkdldFNoYXJkSXRlcmF0b3InLFxuICAgICAgICAgICdraW5lc2lzOlB1dFJlY29yZCcsXG4gICAgICAgICAgJ2tpbmVzaXM6UHV0UmVjb3JkcydcbiAgICAgICAgXSxcbiAgICAgICAga2V5QWN0aW9uczogW1xuICAgICAgICAgICdrbXM6RGVjcnlwdCcsXG4gICAgICAgICAgJ2ttczpHZW5lcmF0ZURhdGFLZXknLFxuICAgICAgICAgICdrbXM6RW5jcnlwdCdcbiAgICAgICAgXVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbG9nU3Vic2NyaXB0aW9uRGVzdGluYXRpb24oc291cmNlTG9nR3JvdXA6IGxvZ3MuTG9nR3JvdXBSZWYpOiBsb2dzLkxvZ1N1YnNjcmlwdGlvbkRlc3RpbmF0aW9uIHtcbiAgICAvLyBGb2xsb3dpbmcgZXhhbXBsZSBmcm9tIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9sb2dzL1N1YnNjcmlwdGlvbkZpbHRlcnMuaHRtbCNEZXN0aW5hdGlvbktpbmVzaXNFeGFtcGxlXG4gICAgaWYgKCF0aGlzLmNsb3VkV2F0Y2hMb2dzUm9sZSkge1xuICAgICAgLy8gQ3JlYXRlIGEgcm9sZSB0byBiZSBhc3N1bWVkIGJ5IENXTCB0aGF0IGNhbiB3cml0ZSB0byB0aGlzIHN0cmVhbSBhbmQgcGFzcyBpdHNlbGYuXG4gICAgICB0aGlzLmNsb3VkV2F0Y2hMb2dzUm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnQ2xvdWRXYXRjaExvZ3NDYW5QdXRSZWNvcmRzJywge1xuICAgICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbChuZXcgY2RrLkZuQ29uY2F0KCdsb2dzLicsIG5ldyBjZGsuQXdzUmVnaW9uKCksICcuYW1hem9uYXdzLmNvbScpLnRvU3RyaW5nKCkpLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmNsb3VkV2F0Y2hMb2dzUm9sZS5hZGRUb1BvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCgpLmFkZEFjdGlvbigna2luZXNpczpQdXRSZWNvcmQnKS5hZGRSZXNvdXJjZSh0aGlzLnN0cmVhbUFybikpO1xuICAgICAgdGhpcy5jbG91ZFdhdGNoTG9nc1JvbGUuYWRkVG9Qb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoKS5hZGRBY3Rpb24oJ2lhbTpQYXNzUm9sZScpLmFkZFJlc291cmNlKHRoaXMuY2xvdWRXYXRjaExvZ3NSb2xlLnJvbGVBcm4pKTtcbiAgICB9XG5cbiAgICAvLyBXZSd2ZSBub3cgbWFkZSBpdCBwb3NzaWJsZSBmb3IgQ2xvdWRXYXRjaCBldmVudHMgdG8gd3JpdGUgdG8gdXMuIEluIGNhc2UgdGhlIExvZ0dyb3VwIGlzIGluIGFcbiAgICAvLyBkaWZmZXJlbnQgYWNjb3VudCwgd2UgbXVzdCBhZGQgYSBEZXN0aW5hdGlvbiBpbiBiZXR3ZWVuIGFzIHdlbGwuXG4gICAgY29uc3Qgc291cmNlU3RhY2sgPSBjZGsuU3RhY2suZmluZChzb3VyY2VMb2dHcm91cCk7XG4gICAgY29uc3QgdGhpc1N0YWNrID0gY2RrLlN0YWNrLmZpbmQodGhpcyk7XG5cbiAgICAvLyBDYXNlIGNvbnNpZGVyZWQ6IGlmIGJvdGggYWNjb3VudHMgYXJlIHVuZGVmaW5lZCwgd2UgY2FuJ3QgbWFrZSBhbnkgYXNzdW1wdGlvbnMuIEJldHRlclxuICAgIC8vIHRvIGFzc3VtZSB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuXG4gICAgY29uc3Qgc2FtZUFjY291bnQgPSBzb3VyY2VTdGFjay5lbnYuYWNjb3VudCA9PT0gdGhpc1N0YWNrLmVudi5hY2NvdW50O1xuXG4gICAgaWYgKCFzYW1lQWNjb3VudCkge1xuICAgICAgcmV0dXJuIHRoaXMuY3Jvc3NBY2NvdW50TG9nU3Vic2NyaXB0aW9uRGVzdGluYXRpb24oc291cmNlTG9nR3JvdXApO1xuICAgIH1cblxuICAgIHJldHVybiB7IGFybjogdGhpcy5zdHJlYW1Bcm4sIHJvbGU6IHRoaXMuY2xvdWRXYXRjaExvZ3NSb2xlIH07XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBDbG91ZFdhdGNoIExvZ3MgRGVzdGluYXRpb24gYW5kIHJldHVybiB0aGUgcHJvcGVydGllcyBpbiB0aGUgZm9ybSBvIGEgc3Vic2NyaXB0aW9uIGRlc3RpbmF0aW9uXG4gICAqL1xuICBwcml2YXRlIGNyb3NzQWNjb3VudExvZ1N1YnNjcmlwdGlvbkRlc3RpbmF0aW9uKHNvdXJjZUxvZ0dyb3VwOiBsb2dzLkxvZ0dyb3VwUmVmKTogbG9ncy5Mb2dTdWJzY3JpcHRpb25EZXN0aW5hdGlvbiB7XG4gICAgY29uc3Qgc291cmNlU3RhY2sgPSBjZGsuU3RhY2suZmluZChzb3VyY2VMb2dHcm91cCk7XG4gICAgY29uc3QgdGhpc1N0YWNrID0gY2RrLlN0YWNrLmZpbmQodGhpcyk7XG5cbiAgICBpZiAoIXNvdXJjZVN0YWNrLmVudi5hY2NvdW50IHx8ICF0aGlzU3RhY2suZW52LmFjY291bnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3Vic2NyaXB0aW9uRmlsdGVyIHN0YWNrIGFuZCBEZXN0aW5hdGlvbiBzdGFjayBtdXN0IGVpdGhlciBib3RoIGhhdmUgYWNjb3VudHMgZGVmaW5lZCwgb3IgYm90aCBub3QgaGF2ZSBhY2NvdW50cycpO1xuICAgIH1cblxuICAgIC8vIFRha2Ugc29tZSBlZmZvcnQgdG8gY29uc3RydWN0IGEgdW5pcXVlIElEIGZvciB0aGUgZGVzdGluYXRpb24gdGhhdCBpcyB1bmlxdWUgdG8gdGhlXG4gICAgLy8gY29tYmluYXRpb24gb2YgKHN0cmVhbSwgbG9nZ3JvdXApLlxuICAgIGNvbnN0IHVuaXF1ZUlkID0gIG5ldyBjZGsuSGFzaGVkQWRkcmVzc2luZ1NjaGVtZSgpLmFsbG9jYXRlQWRkcmVzcyhbc291cmNlTG9nR3JvdXAucGF0aC5yZXBsYWNlKCcvJywgJycpLCBzb3VyY2VTdGFjay5lbnYuYWNjb3VudCFdKTtcblxuICAgIC8vIFRoZSBkZXN0aW5hdGlvbiBsaXZlcyBpbiB0aGUgdGFyZ2V0IGFjY291bnRcbiAgICBjb25zdCBkZXN0ID0gbmV3IGxvZ3MuQ3Jvc3NBY2NvdW50RGVzdGluYXRpb24odGhpcywgYENXTERlc3RpbmF0aW9uJHt1bmlxdWVJZH1gLCB7XG4gICAgICB0YXJnZXRBcm46IHRoaXMuc3RyZWFtQXJuLFxuICAgICAgcm9sZTogdGhpcy5jbG91ZFdhdGNoTG9nc1JvbGUhXG4gICAgfSk7XG5cbiAgICBkZXN0LmFkZFRvUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KClcbiAgICAgIC5hZGRBY3Rpb24oJ2xvZ3M6UHV0U3Vic2NyaXB0aW9uRmlsdGVyJylcbiAgICAgIC5hZGRBd3NBY2NvdW50UHJpbmNpcGFsKHNvdXJjZVN0YWNrLmVudi5hY2NvdW50KVxuICAgICAgLmFkZEFsbFJlc291cmNlcygpKTtcblxuICAgIHJldHVybiBkZXN0LmxvZ1N1YnNjcmlwdGlvbkRlc3RpbmF0aW9uKHNvdXJjZUxvZ0dyb3VwKTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JhbnQoaWRlbnRpdHk6IGlhbS5JUHJpbmNpcGFsLCBhY3Rpb25zOiB7IHN0cmVhbUFjdGlvbnM6IHN0cmluZ1tdLCBrZXlBY3Rpb25zOiBzdHJpbmdbXSB9KSB7XG4gICAgaWRlbnRpdHkuYWRkVG9Qb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoKVxuICAgICAgLmFkZFJlc291cmNlKHRoaXMuc3RyZWFtQXJuKVxuICAgICAgLmFkZEFjdGlvbnMoLi4uYWN0aW9ucy5zdHJlYW1BY3Rpb25zKSk7XG5cbiAgICAvLyBncmFudCBrZXkgcGVybWlzc2lvbnMgaWYgdGhlcmUncyBhbiBhc3NvY2lhdGVkIGtleS5cbiAgICBpZiAodGhpcy5lbmNyeXB0aW9uS2V5KSB7XG4gICAgICBpZGVudGl0eS5hZGRUb1BvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCgpXG4gICAgICAgIC5hZGRSZXNvdXJjZSh0aGlzLmVuY3J5cHRpb25LZXkua2V5QXJuKVxuICAgICAgICAuYWRkQWN0aW9ucyguLi5hY3Rpb25zLmtleUFjdGlvbnMpKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1Qcm9wcyB7XG4gIC8qKlxuICAgKiBFbmZvcmNlcyBhIHBhcnRpY3VsYXIgcGh5c2ljYWwgc3RyZWFtIG5hbWUuXG4gICAqIEBkZWZhdWx0IDxnZW5lcmF0ZWQ+XG4gICAqL1xuICBzdHJlYW1OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGhvdXJzIGZvciB0aGUgZGF0YSByZWNvcmRzIHRoYXQgYXJlIHN0b3JlZCBpbiBzaGFyZHMgdG8gcmVtYWluIGFjY2Vzc2libGUuXG4gICAqIEBkZWZhdWx0IDI0XG4gICAqL1xuICByZXRlbnRpb25QZXJpb2RIb3Vycz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBzaGFyZHMgZm9yIHRoZSBzdHJlYW0uXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHNoYXJkQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBraW5kIG9mIHNlcnZlci1zaWRlIGVuY3J5cHRpb24gdG8gYXBwbHkgdG8gdGhpcyBzdHJlYW0uXG4gICAqXG4gICAqIElmIHlvdSBjaG9vc2UgS01TLCB5b3UgY2FuIHNwZWNpZnkgYSBLTVMga2V5IHZpYSBgZW5jcnlwdGlvbktleWAuIElmXG4gICAqIGVuY3J5cHRpb24ga2V5IGlzIG5vdCBzcGVjaWZpZWQsIGEga2V5IHdpbGwgYXV0b21hdGljYWxseSBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBVbmVuY3J5cHRlZFxuICAgKi9cbiAgZW5jcnlwdGlvbj86IFN0cmVhbUVuY3J5cHRpb247XG5cbiAgLyoqXG4gICAqIEV4dGVybmFsIEtNUyBrZXkgdG8gdXNlIGZvciBzdHJlYW0gZW5jcnlwdGlvbi5cbiAgICpcbiAgICogVGhlICdlbmNyeXB0aW9uJyBwcm9wZXJ0eSBtdXN0IGJlIHNldCB0byBcIkttc1wiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBJZiBlbmNyeXB0aW9uIGlzIHNldCB0byBcIkttc1wiIGFuZCB0aGlzIHByb3BlcnR5IGlzIHVuZGVmaW5lZCwgYVxuICAgKiBuZXcgS01TIGtleSB3aWxsIGJlIGNyZWF0ZWQgYW5kIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN0cmVhbS5cbiAgICovXG4gIGVuY3J5cHRpb25LZXk/OiBrbXMuRW5jcnlwdGlvbktleVJlZjtcbn1cblxuLyoqXG4gKiBBIEtpbmVzaXMgc3RyZWFtLiBDYW4gYmUgZW5jcnlwdGVkIHdpdGggYSBLTVMga2V5LlxuICovXG5leHBvcnQgY2xhc3MgU3RyZWFtIGV4dGVuZHMgU3RyZWFtUmVmIHtcbiAgcHVibGljIHJlYWRvbmx5IHN0cmVhbUFybjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgc3RyZWFtTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgZW5jcnlwdGlvbktleT86IGttcy5FbmNyeXB0aW9uS2V5UmVmO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RyZWFtOiBDZm5TdHJlYW07XG5cbiAgY29uc3RydWN0b3IocGFyZW50OiBjZGsuQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBTdHJlYW1Qcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIocGFyZW50LCBuYW1lKTtcblxuICAgIGNvbnN0IHNoYXJkQ291bnQgPSBwcm9wcy5zaGFyZENvdW50IHx8IDE7XG4gICAgY29uc3QgcmV0ZW50aW9uUGVyaW9kSG91cnMgPSBwcm9wcy5yZXRlbnRpb25QZXJpb2RIb3VycyB8fCAyNDtcbiAgICBpZiAocmV0ZW50aW9uUGVyaW9kSG91cnMgPCAyNCAmJiByZXRlbnRpb25QZXJpb2RIb3VycyA+IDE2OCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmV0ZW50aW9uUGVyaW9kSG91cnMgbXVzdCBiZSBiZXR3ZWVuIDI0IGFuZCAxNjggaG91cnNcIik7XG4gICAgfVxuXG4gICAgY29uc3QgeyBzdHJlYW1FbmNyeXB0aW9uLCBlbmNyeXB0aW9uS2V5IH0gPSB0aGlzLnBhcnNlRW5jcnlwdGlvbihwcm9wcyk7XG5cbiAgICB0aGlzLnN0cmVhbSA9IG5ldyBDZm5TdHJlYW0odGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBuYW1lOiBwcm9wcy5zdHJlYW1OYW1lLFxuICAgICAgcmV0ZW50aW9uUGVyaW9kSG91cnMsXG4gICAgICBzaGFyZENvdW50LFxuICAgICAgc3RyZWFtRW5jcnlwdGlvblxuICAgIH0pO1xuICAgIHRoaXMuc3RyZWFtQXJuID0gdGhpcy5zdHJlYW0uc3RyZWFtQXJuO1xuICAgIHRoaXMuc3RyZWFtTmFtZSA9IHRoaXMuc3RyZWFtLnN0cmVhbUlkO1xuICAgIHRoaXMuZW5jcnlwdGlvbktleSA9IGVuY3J5cHRpb25LZXk7XG5cbiAgICBpZiAocHJvcHMuc3RyZWFtTmFtZSkgeyB0aGlzLmFkZE1ldGFkYXRhKCdhd3M6Y2RrOmhhc1BoeXNpY2FsTmFtZScsIHByb3BzLnN0cmVhbU5hbWUpOyB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHVwIGtleSBwcm9wZXJ0aWVzIGFuZCByZXR1cm4gdGhlIFN0cmVhbSBlbmNyeXB0aW9uIHByb3BlcnR5IGZyb20gdGhlXG4gICAqIHVzZXIncyBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZUVuY3J5cHRpb24ocHJvcHM6IFN0cmVhbVByb3BzKToge1xuICAgIHN0cmVhbUVuY3J5cHRpb24/OiBDZm5TdHJlYW0uU3RyZWFtRW5jcnlwdGlvblByb3BlcnR5LFxuICAgIGVuY3J5cHRpb25LZXk/OiBrbXMuRW5jcnlwdGlvbktleVJlZlxuICB9IHtcblxuICAgIC8vIGRlZmF1bHQgdG8gdW5lbmNyeXB0ZWQuXG4gICAgY29uc3QgZW5jcnlwdGlvblR5cGUgPSBwcm9wcy5lbmNyeXB0aW9uIHx8IFN0cmVhbUVuY3J5cHRpb24uVW5lbmNyeXB0ZWQ7XG5cbiAgICAvLyBpZiBlbmNyeXB0aW9uIGtleSBpcyBzZXQsIGVuY3J5cHRpb24gbXVzdCBiZSBzZXQgdG8gS01TLlxuICAgIGlmIChlbmNyeXB0aW9uVHlwZSAhPT0gU3RyZWFtRW5jcnlwdGlvbi5LbXMgJiYgcHJvcHMuZW5jcnlwdGlvbktleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBlbmNyeXB0aW9uS2V5IGlzIHNwZWNpZmllZCwgc28gJ2VuY3J5cHRpb24nIG11c3QgYmUgc2V0IHRvIEtNUyAodmFsdWU6ICR7ZW5jcnlwdGlvblR5cGV9KWApO1xuICAgIH1cblxuICAgIGlmIChlbmNyeXB0aW9uVHlwZSA9PT0gU3RyZWFtRW5jcnlwdGlvbi5VbmVuY3J5cHRlZCkge1xuICAgICAgcmV0dXJuIHsgc3RyZWFtRW5jcnlwdGlvbjogdW5kZWZpbmVkLCBlbmNyeXB0aW9uS2V5OiB1bmRlZmluZWQgfTtcbiAgICB9XG5cbiAgICBpZiAoZW5jcnlwdGlvblR5cGUgPT09IFN0cmVhbUVuY3J5cHRpb24uS21zKSB7XG4gICAgICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gcHJvcHMuZW5jcnlwdGlvbktleSB8fCBuZXcga21zLkVuY3J5cHRpb25LZXkodGhpcywgJ0tleScsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IGBDcmVhdGVkIGJ5ICR7dGhpcy5wYXRofWBcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzdHJlYW1FbmNyeXB0aW9uOiBDZm5TdHJlYW0uU3RyZWFtRW5jcnlwdGlvblByb3BlcnR5ID0ge1xuICAgICAgICBlbmNyeXB0aW9uVHlwZTogJ0tNUycsXG4gICAgICAgIGtleUlkOiBlbmNyeXB0aW9uS2V5LmtleUFyblxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IGVuY3J5cHRpb25LZXksIHN0cmVhbUVuY3J5cHRpb24gfTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgJ2VuY3J5cHRpb25UeXBlJzogJHtlbmNyeXB0aW9uVHlwZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIFdoYXQga2luZCBvZiBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHRvIGFwcGx5IHRvIHRoaXMgc3RyZWFtXG4gKi9cbmV4cG9ydCBlbnVtIFN0cmVhbUVuY3J5cHRpb24ge1xuICAvKipcbiAgICogUmVjb3JkcyBpbiB0aGUgc3RyZWFtIGFyZSBub3QgZW5jcnlwdGVkLlxuICAgKi9cbiAgVW5lbmNyeXB0ZWQgPSAnTk9ORScsXG5cbiAgLyoqXG4gICAqIFNlcnZlci1zaWRlIGVuY3J5cHRpb24gd2l0aCBhIEtNUyBrZXkgbWFuYWdlZCBieSB0aGUgdXNlci5cbiAgICogSWYgYGVuY3J5cHRpb25LZXlgIGlzIHNwZWNpZmllZCwgdGhpcyBrZXkgd2lsbCBiZSB1c2VkLCBvdGhlcndpc2UsIG9uZSB3aWxsIGJlIGRlZmluZWQuXG4gICAqL1xuICBLbXMgPSAnS01TJyxcbn1cblxuY2xhc3MgSW1wb3J0ZWRTdHJlYW1SZWYgZXh0ZW5kcyBTdHJlYW1SZWYge1xuICBwdWJsaWMgcmVhZG9ubHkgc3RyZWFtQXJuOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBzdHJlYW1OYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBlbmNyeXB0aW9uS2V5Pzoga21zLkVuY3J5cHRpb25LZXlSZWY7XG5cbiAgY29uc3RydWN0b3IocGFyZW50OiBjZGsuQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBTdHJlYW1SZWZQcm9wcykge1xuICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG5cbiAgICB0aGlzLnN0cmVhbUFybiA9IHByb3BzLnN0cmVhbUFybjtcblxuICAgIC8vIEdldCB0aGUgbmFtZSBmcm9tIHRoZSBBUk5cbiAgICB0aGlzLnN0cmVhbU5hbWUgPSBjZGsuQXJuVXRpbHMucGFyc2UocHJvcHMuc3RyZWFtQXJuKS5yZXNvdXJjZU5hbWUhO1xuXG4gICAgaWYgKHByb3BzLmVuY3J5cHRpb25LZXkpIHtcbiAgICAgIHRoaXMuZW5jcnlwdGlvbktleSA9IGttcy5FbmNyeXB0aW9uS2V5UmVmLmltcG9ydChwYXJlbnQsICdLZXknLCBwcm9wcy5lbmNyeXB0aW9uS2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbmNyeXB0aW9uS2V5ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsd0NBQXlDO0FBQ3pDLHdDQUF5QztBQUN6QywwQ0FBMkM7QUFDM0Msb0NBQXFDO0FBQ3JDLDJEQUFnRDtBQW9FaEQ7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFzQixVQUFXLFNBQVEsR0FBRyxDQUFDLFNBQVM7SUF1QnBEOzs7Ozs7T0FNRztJQUNJLFNBQVMsQ0FBQyxRQUF5QjtRQUN4QyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FDUixRQUFRLEVBQ1I7WUFDRSxhQUFhLEVBQUU7Z0JBQ2Isd0JBQXdCO2dCQUN4QixvQkFBb0I7Z0JBQ3BCLDBCQUEwQjthQUMzQjtZQUNELFVBQVUsRUFBRTtnQkFDVixhQUFhO2FBQ2Q7U0FDRixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksVUFBVSxDQUFDLFFBQXlCO1FBQ3pDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUNSLFFBQVEsRUFDUjtZQUNFLGFBQWEsRUFBRTtnQkFDYix3QkFBd0I7Z0JBQ3hCLG1CQUFtQjtnQkFDbkIsb0JBQW9CO2FBQ3JCO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLHFCQUFxQjtnQkFDckIsYUFBYTthQUNkO1NBQ0YsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGNBQWMsQ0FBQyxRQUF5QjtRQUM3QyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FDUixRQUFRLEVBQ1I7WUFDRSxhQUFhLEVBQUU7Z0JBQ2Isd0JBQXdCO2dCQUN4QixvQkFBb0I7Z0JBQ3BCLDBCQUEwQjtnQkFDMUIsbUJBQW1CO2dCQUNuQixvQkFBb0I7YUFD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T0FFRztJQUNILHdDQUFvQixDQUFBO0lBRXBCOzs7T0FHRztJQUNILCtCQUFXLENBQUE7QUFDYixDQUFDLEVBWFcsZ0JBQWdCLEdBQWhCLHdCQUFnQixLQUFoQix3QkFBZ0IsUUFXM0I7QUFFRCxNQUFNLGNBQWUsU0FBUSxVQUFVO0lBS3JDLFlBQVksS0FBb0IsRUFBRSxFQUFVLEVBQW1CLEtBQXdCO1FBQ3JGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFENEMsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFHckYsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBRWpDLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBYSxDQUFDO1FBRS9FLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRTtZQUN2QixtREFBbUQ7WUFDbkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNsRjthQUFNO1lBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRU0sTUFBTTtRQUNYLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaWFtID0gcmVxdWlyZSgnQGF3cy1jZGsvYXdzLWlhbScpO1xuaW1wb3J0IGttcyA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2F3cy1rbXMnKTtcbmltcG9ydCBsb2dzID0gcmVxdWlyZSgnQGF3cy1jZGsvYXdzLWxvZ3MnKTtcbmltcG9ydCBjZGsgPSByZXF1aXJlKCdAYXdzLWNkay9jZGsnKTtcbmltcG9ydCB7IENmblN0cmVhbSB9IGZyb20gJy4va2luZXNpcy5nZW5lcmF0ZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdHJlYW0gZXh0ZW5kcyBjZGsuSUNvbnN0cnVjdCwgbG9ncy5JTG9nU3Vic2NyaXB0aW9uRGVzdGluYXRpb24ge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgc3RyZWFtLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RyZWFtQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzdHJlYW1cbiAgICovXG4gIHJlYWRvbmx5IHN0cmVhbU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgS01TIGVuY3J5cHRpb24ga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBrbXMuSUVuY3J5cHRpb25LZXk7XG5cbiAgLyoqXG4gICAqIEV4cG9ydHMgdGhpcyBzdHJlYW0gZnJvbSB0aGUgc3RhY2suXG4gICAqL1xuICBleHBvcnQoKTogU3RyZWFtSW1wb3J0UHJvcHM7XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgZm9yIHRoaXMgc3RyZWFtIGFuZCBpdHMgY29udGVudHMgdG8gYW4gSUFNXG4gICAqIHByaW5jaXBhbCAoUm9sZS9Hcm91cC9Vc2VyKS5cbiAgICpcbiAgICogSWYgYW4gZW5jcnlwdGlvbiBrZXkgaXMgdXNlZCwgcGVybWlzc2lvbiB0byB1ZXMgdGhlIGtleSB0byBkZWNyeXB0IHRoZVxuICAgKiBjb250ZW50cyBvZiB0aGUgc3RyZWFtIHdpbGwgYWxzbyBiZSBncmFudGVkLlxuICAgKi9cbiAgZ3JhbnRSZWFkKGlkZW50aXR5PzogaWFtLklQcmluY2lwYWwpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBHcmFudCB3cml0ZSBwZXJtaXNzaW9ucyBmb3IgdGhpcyBzdHJlYW0gYW5kIGl0cyBjb250ZW50cyB0byBhbiBJQU1cbiAgICogcHJpbmNpcGFsIChSb2xlL0dyb3VwL1VzZXIpLlxuICAgKlxuICAgKiBJZiBhbiBlbmNyeXB0aW9uIGtleSBpcyB1c2VkLCBwZXJtaXNzaW9uIHRvIHVlcyB0aGUga2V5IHRvIGVuY3J5cHQgdGhlXG4gICAqIGNvbnRlbnRzIG9mIHRoZSBzdHJlYW0gd2lsbCBhbHNvIGJlIGdyYW50ZWQuXG4gICAqL1xuICBncmFudFdyaXRlKGlkZW50aXR5PzogaWFtLklQcmluY2lwYWwpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBHcmFudHMgcmVhZC93cml0ZSBwZXJtaXNzaW9ucyBmb3IgdGhpcyBzdHJlYW0gYW5kIGl0cyBjb250ZW50cyB0byBhbiBJQU1cbiAgICogcHJpbmNpcGFsIChSb2xlL0dyb3VwL1VzZXIpLlxuICAgKlxuICAgKiBJZiBhbiBlbmNyeXB0aW9uIGtleSBpcyB1c2VkLCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUga2V5IGZvclxuICAgKiBlbmNyeXB0L2RlY3J5cHQgd2lsbCBhbHNvIGJlIGdyYW50ZWQuXG4gICAqL1xuICBncmFudFJlYWRXcml0ZShpZGVudGl0eT86IGlhbS5JUHJpbmNpcGFsKTogdm9pZDtcbn1cblxuLyoqXG4gKiBBIHJlZmVyZW5jZSB0byBhIHN0cmVhbS4gVGhlIGVhc2llc3Qgd2F5IHRvIGluc3RhbnRpYXRlIGlzIHRvIGNhbGxcbiAqIGBzdHJlYW0uZXhwb3J0KClgLiBUaGVuLCB0aGUgY29uc3VtZXIgY2FuIHVzZSBgU3RyZWFtLmltcG9ydCh0aGlzLCByZWYpYCBhbmRcbiAqIGdldCBhIGBTdHJlYW1gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbUltcG9ydFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHN0cmVhbS5cbiAgICovXG4gIHN0cmVhbUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgS01TIGtleSBzZWN1cmluZyB0aGUgY29udGVudHMgb2YgdGhlIHN0cmVhbSBpZiBlbmNyeXB0aW9uIGlzIGVuYWJsZWQuXG4gICAqL1xuICBlbmNyeXB0aW9uS2V5Pzoga21zLkVuY3J5cHRpb25LZXlJbXBvcnRQcm9wcztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgS2luZXNpcyBTdHJlYW0uXG4gKlxuICogU3RyZWFtcyBjYW4gYmUgZWl0aGVyIGRlZmluZWQgd2l0aGluIHRoaXMgc3RhY2s6XG4gKlxuICogICBuZXcgU3RyZWFtKHRoaXMsICdNeVN0cmVhbScsIHsgcHJvcHMgfSk7XG4gKlxuICogT3IgaW1wb3J0ZWQgZnJvbSBhbiBleGlzdGluZyBzdHJlYW06XG4gKlxuICogICBTdHJlYW0uaW1wb3J0KHRoaXMsICdNeUltcG9ydGVkU3RyZWFtJywgeyBzdHJlYW1Bcm46IC4uLiB9KTtcbiAqXG4gKiBZb3UgY2FuIGFsc28gZXhwb3J0IGEgc3RyZWFtIGFuZCBpbXBvcnQgaXQgaW50byBhbm90aGVyIHN0YWNrOlxuICpcbiAqICAgY29uc3QgcmVmID0gbXlTdHJlYW0uZXhwb3J0KCk7XG4gKiAgIFN0cmVhbS5pbXBvcnQodGhpcywgJ015SW1wb3J0ZWRTdHJlYW0nLCByZWYpO1xuICpcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN0cmVhbUJhc2UgZXh0ZW5kcyBjZGsuQ29uc3RydWN0IGltcGxlbWVudHMgSVN0cmVhbSB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgc3RyZWFtQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzdHJlYW1cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBzdHJlYW1OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIEtNUyBlbmNyeXB0aW9uIGtleSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZW5jcnlwdGlvbktleT86IGttcy5JRW5jcnlwdGlvbktleTtcblxuICAvKipcbiAgICogVGhlIHJvbGUgdGhhdCBjYW4gYmUgdXNlZCBieSBDbG91ZFdhdGNoIGxvZ3MgdG8gd3JpdGUgdG8gdGhpcyBzdHJlYW1cbiAgICovXG4gIHByaXZhdGUgY2xvdWRXYXRjaExvZ3NSb2xlPzogaWFtLlJvbGU7XG5cbiAgcHVibGljIGFic3RyYWN0IGV4cG9ydCgpOiBTdHJlYW1JbXBvcnRQcm9wcztcblxuICAvKipcbiAgICogR3JhbnQgd3JpdGUgcGVybWlzc2lvbnMgZm9yIHRoaXMgc3RyZWFtIGFuZCBpdHMgY29udGVudHMgdG8gYW4gSUFNXG4gICAqIHByaW5jaXBhbCAoUm9sZS9Hcm91cC9Vc2VyKS5cbiAgICpcbiAgICogSWYgYW4gZW5jcnlwdGlvbiBrZXkgaXMgdXNlZCwgcGVybWlzc2lvbiB0byB1ZXMgdGhlIGtleSB0byBkZWNyeXB0IHRoZVxuICAgKiBjb250ZW50cyBvZiB0aGUgc3RyZWFtIHdpbGwgYWxzbyBiZSBncmFudGVkLlxuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZChpZGVudGl0eT86IGlhbS5JUHJpbmNpcGFsKSB7XG4gICAgaWYgKCFpZGVudGl0eSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmdyYW50KFxuICAgICAgaWRlbnRpdHksXG4gICAgICB7XG4gICAgICAgIHN0cmVhbUFjdGlvbnM6IFtcbiAgICAgICAgICAna2luZXNpczpEZXNjcmliZVN0cmVhbScsXG4gICAgICAgICAgJ2tpbmVzaXM6R2V0UmVjb3JkcycsXG4gICAgICAgICAgJ2tpbmVzaXM6R2V0U2hhcmRJdGVyYXRvcidcbiAgICAgICAgXSxcbiAgICAgICAga2V5QWN0aW9uczogW1xuICAgICAgICAgICdrbXM6RGVjcnlwdCdcbiAgICAgICAgXVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyBmb3IgdGhpcyBzdHJlYW0gYW5kIGl0cyBjb250ZW50cyB0byBhbiBJQU1cbiAgICogcHJpbmNpcGFsIChSb2xlL0dyb3VwL1VzZXIpLlxuICAgKlxuICAgKiBJZiBhbiBlbmNyeXB0aW9uIGtleSBpcyB1c2VkLCBwZXJtaXNzaW9uIHRvIHVlcyB0aGUga2V5IHRvIGRlY3J5cHQgdGhlXG4gICAqIGNvbnRlbnRzIG9mIHRoZSBzdHJlYW0gd2lsbCBhbHNvIGJlIGdyYW50ZWQuXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRXcml0ZShpZGVudGl0eT86IGlhbS5JUHJpbmNpcGFsKSB7XG4gICAgaWYgKCFpZGVudGl0eSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhbnQoXG4gICAgICBpZGVudGl0eSxcbiAgICAgIHtcbiAgICAgICAgc3RyZWFtQWN0aW9uczogW1xuICAgICAgICAgICdraW5lc2lzOkRlc2NyaWJlU3RyZWFtJyxcbiAgICAgICAgICAna2luZXNpczpQdXRSZWNvcmQnLFxuICAgICAgICAgICdraW5lc2lzOlB1dFJlY29yZHMnXG4gICAgICAgIF0sXG4gICAgICAgIGtleUFjdGlvbnM6IFtcbiAgICAgICAgICAna21zOkdlbmVyYXRlRGF0YUtleScsXG4gICAgICAgICAgJ2ttczpFbmNyeXB0J1xuICAgICAgICBdXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcmVhZC93cml0ZSBwZXJtaXNzaW9ucyBmb3IgdGhpcyBzdHJlYW0gYW5kIGl0cyBjb250ZW50cyB0byBhbiBJQU1cbiAgICogcHJpbmNpcGFsIChSb2xlL0dyb3VwL1VzZXIpLlxuICAgKlxuICAgKiBJZiBhbiBlbmNyeXB0aW9uIGtleSBpcyB1c2VkLCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUga2V5IGZvclxuICAgKiBlbmNyeXB0L2RlY3J5cHQgd2lsbCBhbHNvIGJlIGdyYW50ZWQuXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkV3JpdGUoaWRlbnRpdHk/OiBpYW0uSVByaW5jaXBhbCkge1xuICAgIGlmICghaWRlbnRpdHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5ncmFudChcbiAgICAgIGlkZW50aXR5LFxuICAgICAge1xuICAgICAgICBzdHJlYW1BY3Rpb25zOiBbXG4gICAgICAgICAgJ2tpbmVzaXM6RGVzY3JpYmVTdHJlYW0nLFxuICAgICAgICAgICdraW5lc2lzOkdldFJlY29yZHMnLFxuICAgICAgICAgICdraW5lc2lzOkdldFNoYXJkSXRlcmF0b3InLFxuICAgICAgICAgICdraW5lc2lzOlB1dFJlY29yZCcsXG4gICAgICAgICAgJ2tpbmVzaXM6UHV0UmVjb3JkcydcbiAgICAgICAgXSxcbiAgICAgICAga2V5QWN0aW9uczogW1xuICAgICAgICAgICdrbXM6RGVjcnlwdCcsXG4gICAgICAgICAgJ2ttczpHZW5lcmF0ZURhdGFLZXknLFxuICAgICAgICAgICdrbXM6RW5jcnlwdCdcbiAgICAgICAgXVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbG9nU3Vic2NyaXB0aW9uRGVzdGluYXRpb24oc291cmNlTG9nR3JvdXA6IGxvZ3MuSUxvZ0dyb3VwKTogbG9ncy5Mb2dTdWJzY3JpcHRpb25EZXN0aW5hdGlvbiB7XG4gICAgLy8gRm9sbG93aW5nIGV4YW1wbGUgZnJvbSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbG9ncy9TdWJzY3JpcHRpb25GaWx0ZXJzLmh0bWwjRGVzdGluYXRpb25LaW5lc2lzRXhhbXBsZVxuICAgIGlmICghdGhpcy5jbG91ZFdhdGNoTG9nc1JvbGUpIHtcbiAgICAgIGNvbnN0IHN0YWNrID0gY2RrLlN0YWNrLmZpbmQodGhpcyk7XG4gICAgICAvLyBDcmVhdGUgYSByb2xlIHRvIGJlIGFzc3VtZWQgYnkgQ1dMIHRoYXQgY2FuIHdyaXRlIHRvIHRoaXMgc3RyZWFtIGFuZCBwYXNzIGl0c2VsZi5cbiAgICAgIHRoaXMuY2xvdWRXYXRjaExvZ3NSb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdDbG91ZFdhdGNoTG9nc0NhblB1dFJlY29yZHMnLCB7XG4gICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKGBsb2dzLiR7c3RhY2sucmVnaW9ufS5hbWF6b25hd3MuY29tYClcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jbG91ZFdhdGNoTG9nc1JvbGUuYWRkVG9Qb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoKS5hZGRBY3Rpb24oJ2tpbmVzaXM6UHV0UmVjb3JkJykuYWRkUmVzb3VyY2UodGhpcy5zdHJlYW1Bcm4pKTtcbiAgICAgIHRoaXMuY2xvdWRXYXRjaExvZ3NSb2xlLmFkZFRvUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KCkuYWRkQWN0aW9uKCdpYW06UGFzc1JvbGUnKS5hZGRSZXNvdXJjZSh0aGlzLmNsb3VkV2F0Y2hMb2dzUm9sZS5yb2xlQXJuKSk7XG4gICAgfVxuXG4gICAgLy8gV2UndmUgbm93IG1hZGUgaXQgcG9zc2libGUgZm9yIENsb3VkV2F0Y2ggZXZlbnRzIHRvIHdyaXRlIHRvIHVzLiBJbiBjYXNlIHRoZSBMb2dHcm91cCBpcyBpbiBhXG4gICAgLy8gZGlmZmVyZW50IGFjY291bnQsIHdlIG11c3QgYWRkIGEgRGVzdGluYXRpb24gaW4gYmV0d2VlbiBhcyB3ZWxsLlxuICAgIGNvbnN0IHNvdXJjZVN0YWNrID0gY2RrLlN0YWNrLmZpbmQoc291cmNlTG9nR3JvdXAgYXMgYW55KTtcbiAgICBjb25zdCB0aGlzU3RhY2sgPSBjZGsuU3RhY2suZmluZCh0aGlzKTtcblxuICAgIC8vIENhc2UgY29uc2lkZXJlZDogaWYgYm90aCBhY2NvdW50cyBhcmUgdW5kZWZpbmVkLCB3ZSBjYW4ndCBtYWtlIGFueSBhc3N1bXB0aW9ucy4gQmV0dGVyXG4gICAgLy8gdG8gYXNzdW1lIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC5cbiAgICBjb25zdCBzYW1lQWNjb3VudCA9IHNvdXJjZVN0YWNrLmVudi5hY2NvdW50ID09PSB0aGlzU3RhY2suZW52LmFjY291bnQ7XG5cbiAgICBpZiAoIXNhbWVBY2NvdW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5jcm9zc0FjY291bnRMb2dTdWJzY3JpcHRpb25EZXN0aW5hdGlvbihzb3VyY2VMb2dHcm91cCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgYXJuOiB0aGlzLnN0cmVhbUFybiwgcm9sZTogdGhpcy5jbG91ZFdhdGNoTG9nc1JvbGUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIENsb3VkV2F0Y2ggTG9ncyBEZXN0aW5hdGlvbiBhbmQgcmV0dXJuIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSBmb3JtIG8gYSBzdWJzY3JpcHRpb24gZGVzdGluYXRpb25cbiAgICovXG4gIHByaXZhdGUgY3Jvc3NBY2NvdW50TG9nU3Vic2NyaXB0aW9uRGVzdGluYXRpb24oc291cmNlTG9nR3JvdXA6IGxvZ3MuSUxvZ0dyb3VwKTogbG9ncy5Mb2dTdWJzY3JpcHRpb25EZXN0aW5hdGlvbiB7XG4gICAgY29uc3Qgc291cmNlTG9nR3JvdXBDb25zdHJ1Y3Q6IGNkay5Db25zdHJ1Y3QgPSBzb3VyY2VMb2dHcm91cCBhcyBhbnk7XG4gICAgY29uc3Qgc291cmNlU3RhY2sgPSBjZGsuU3RhY2suZmluZChzb3VyY2VMb2dHcm91cENvbnN0cnVjdCk7XG4gICAgY29uc3QgdGhpc1N0YWNrID0gY2RrLlN0YWNrLmZpbmQodGhpcyk7XG5cbiAgICBpZiAoIXNvdXJjZVN0YWNrLmVudi5hY2NvdW50IHx8ICF0aGlzU3RhY2suZW52LmFjY291bnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3Vic2NyaXB0aW9uRmlsdGVyIHN0YWNrIGFuZCBEZXN0aW5hdGlvbiBzdGFjayBtdXN0IGVpdGhlciBib3RoIGhhdmUgYWNjb3VudHMgZGVmaW5lZCwgb3IgYm90aCBub3QgaGF2ZSBhY2NvdW50cycpO1xuICAgIH1cblxuICAgIC8vIFRha2Ugc29tZSBlZmZvcnQgdG8gY29uc3RydWN0IGEgdW5pcXVlIElEIGZvciB0aGUgZGVzdGluYXRpb24gdGhhdCBpcyB1bmlxdWUgdG8gdGhlXG4gICAgLy8gY29tYmluYXRpb24gb2YgKHN0cmVhbSwgbG9nZ3JvdXApLlxuICAgIGNvbnN0IHVuaXF1ZUlkID0gIG5ldyBjZGsuSGFzaGVkQWRkcmVzc2luZ1NjaGVtZSgpLmFsbG9jYXRlQWRkcmVzcyhbXG4gICAgICBzb3VyY2VMb2dHcm91cENvbnN0cnVjdC5ub2RlLnBhdGgucmVwbGFjZSgnLycsICcnKSxcbiAgICAgIHNvdXJjZVN0YWNrLmVudi5hY2NvdW50IVxuICAgIF0pO1xuXG4gICAgLy8gVGhlIGRlc3RpbmF0aW9uIGxpdmVzIGluIHRoZSB0YXJnZXQgYWNjb3VudFxuICAgIGNvbnN0IGRlc3QgPSBuZXcgbG9ncy5Dcm9zc0FjY291bnREZXN0aW5hdGlvbih0aGlzLCBgQ1dMRGVzdGluYXRpb24ke3VuaXF1ZUlkfWAsIHtcbiAgICAgIHRhcmdldEFybjogdGhpcy5zdHJlYW1Bcm4sXG4gICAgICByb2xlOiB0aGlzLmNsb3VkV2F0Y2hMb2dzUm9sZSFcbiAgICB9KTtcblxuICAgIGRlc3QuYWRkVG9Qb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoKVxuICAgICAgLmFkZEFjdGlvbignbG9nczpQdXRTdWJzY3JpcHRpb25GaWx0ZXInKVxuICAgICAgLmFkZEF3c0FjY291bnRQcmluY2lwYWwoc291cmNlU3RhY2suZW52LmFjY291bnQpXG4gICAgICAuYWRkQWxsUmVzb3VyY2VzKCkpO1xuXG4gICAgcmV0dXJuIGRlc3QubG9nU3Vic2NyaXB0aW9uRGVzdGluYXRpb24oc291cmNlTG9nR3JvdXApO1xuICB9XG5cbiAgcHJpdmF0ZSBncmFudChpZGVudGl0eTogaWFtLklQcmluY2lwYWwsIGFjdGlvbnM6IHsgc3RyZWFtQWN0aW9uczogc3RyaW5nW10sIGtleUFjdGlvbnM6IHN0cmluZ1tdIH0pIHtcbiAgICBpZGVudGl0eS5hZGRUb1BvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCgpXG4gICAgICAuYWRkUmVzb3VyY2UodGhpcy5zdHJlYW1Bcm4pXG4gICAgICAuYWRkQWN0aW9ucyguLi5hY3Rpb25zLnN0cmVhbUFjdGlvbnMpKTtcblxuICAgIC8vIGdyYW50IGtleSBwZXJtaXNzaW9ucyBpZiB0aGVyZSdzIGFuIGFzc29jaWF0ZWQga2V5LlxuICAgIGlmICh0aGlzLmVuY3J5cHRpb25LZXkpIHtcbiAgICAgIGlkZW50aXR5LmFkZFRvUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KClcbiAgICAgICAgLmFkZFJlc291cmNlKHRoaXMuZW5jcnlwdGlvbktleS5rZXlBcm4pXG4gICAgICAgIC5hZGRBY3Rpb25zKC4uLmFjdGlvbnMua2V5QWN0aW9ucykpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbVByb3BzIHtcbiAgLyoqXG4gICAqIEVuZm9yY2VzIGEgcGFydGljdWxhciBwaHlzaWNhbCBzdHJlYW0gbmFtZS5cbiAgICogQGRlZmF1bHQgPGdlbmVyYXRlZD5cbiAgICovXG4gIHN0cmVhbU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgaG91cnMgZm9yIHRoZSBkYXRhIHJlY29yZHMgdGhhdCBhcmUgc3RvcmVkIGluIHNoYXJkcyB0byByZW1haW4gYWNjZXNzaWJsZS5cbiAgICogQGRlZmF1bHQgMjRcbiAgICovXG4gIHJldGVudGlvblBlcmlvZEhvdXJzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHNoYXJkcyBmb3IgdGhlIHN0cmVhbS5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgc2hhcmRDb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGtpbmQgb2Ygc2VydmVyLXNpZGUgZW5jcnlwdGlvbiB0byBhcHBseSB0byB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogSWYgeW91IGNob29zZSBLTVMsIHlvdSBjYW4gc3BlY2lmeSBhIEtNUyBrZXkgdmlhIGBlbmNyeXB0aW9uS2V5YC4gSWZcbiAgICogZW5jcnlwdGlvbiBrZXkgaXMgbm90IHNwZWNpZmllZCwgYSBrZXkgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFVuZW5jcnlwdGVkXG4gICAqL1xuICBlbmNyeXB0aW9uPzogU3RyZWFtRW5jcnlwdGlvbjtcblxuICAvKipcbiAgICogRXh0ZXJuYWwgS01TIGtleSB0byB1c2UgZm9yIHN0cmVhbSBlbmNyeXB0aW9uLlxuICAgKlxuICAgKiBUaGUgJ2VuY3J5cHRpb24nIHByb3BlcnR5IG11c3QgYmUgc2V0IHRvIFwiS21zXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IElmIGVuY3J5cHRpb24gaXMgc2V0IHRvIFwiS21zXCIgYW5kIHRoaXMgcHJvcGVydHkgaXMgdW5kZWZpbmVkLCBhXG4gICAqIG5ldyBLTVMga2V5IHdpbGwgYmUgY3JlYXRlZCBhbmQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3RyZWFtLlxuICAgKi9cbiAgZW5jcnlwdGlvbktleT86IGttcy5JRW5jcnlwdGlvbktleTtcbn1cblxuLyoqXG4gKiBBIEtpbmVzaXMgc3RyZWFtLiBDYW4gYmUgZW5jcnlwdGVkIHdpdGggYSBLTVMga2V5LlxuICovXG5leHBvcnQgY2xhc3MgU3RyZWFtIGV4dGVuZHMgU3RyZWFtQmFzZSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgU3RyZWFtIGNvbnN0cnVjdCB0aGF0IHJlcHJlc2VudHMgYW4gZXh0ZXJuYWwgc3RyZWFtLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBjcmVhdGluZyBjb25zdHJ1Y3QgKHVzdWFsbHkgYHRoaXNgKS5cbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBuYW1lLlxuICAgKiBAcGFyYW0gcmVmIEEgYFN0cmVhbUF0dHJpYnV0ZXNgIG9iamVjdC4gQ2FuIGJlIG9idGFpbmVkIGZyb20gYSBjYWxsIHRvXG4gICAqIGBzdHJlYW0uZXhwb3J0KClgLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpbXBvcnQoc2NvcGU6IGNkay5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTdHJlYW1JbXBvcnRQcm9wcyk6IElTdHJlYW0ge1xuICAgIHJldHVybiBuZXcgSW1wb3J0ZWRTdHJlYW0oc2NvcGUsIGlkLCBwcm9wcyk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgc3RyZWFtQXJuOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBzdHJlYW1OYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBlbmNyeXB0aW9uS2V5Pzoga21zLklFbmNyeXB0aW9uS2V5O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RyZWFtOiBDZm5TdHJlYW07XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNkay5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTdHJlYW1Qcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHNoYXJkQ291bnQgPSBwcm9wcy5zaGFyZENvdW50IHx8IDE7XG4gICAgY29uc3QgcmV0ZW50aW9uUGVyaW9kSG91cnMgPSBwcm9wcy5yZXRlbnRpb25QZXJpb2RIb3VycyB8fCAyNDtcbiAgICBpZiAocmV0ZW50aW9uUGVyaW9kSG91cnMgPCAyNCAmJiByZXRlbnRpb25QZXJpb2RIb3VycyA+IDE2OCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmV0ZW50aW9uUGVyaW9kSG91cnMgbXVzdCBiZSBiZXR3ZWVuIDI0IGFuZCAxNjggaG91cnNcIik7XG4gICAgfVxuXG4gICAgY29uc3QgeyBzdHJlYW1FbmNyeXB0aW9uLCBlbmNyeXB0aW9uS2V5IH0gPSB0aGlzLnBhcnNlRW5jcnlwdGlvbihwcm9wcyk7XG5cbiAgICB0aGlzLnN0cmVhbSA9IG5ldyBDZm5TdHJlYW0odGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBuYW1lOiBwcm9wcy5zdHJlYW1OYW1lLFxuICAgICAgcmV0ZW50aW9uUGVyaW9kSG91cnMsXG4gICAgICBzaGFyZENvdW50LFxuICAgICAgc3RyZWFtRW5jcnlwdGlvblxuICAgIH0pO1xuICAgIHRoaXMuc3RyZWFtQXJuID0gdGhpcy5zdHJlYW0uc3RyZWFtQXJuO1xuICAgIHRoaXMuc3RyZWFtTmFtZSA9IHRoaXMuc3RyZWFtLnN0cmVhbUlkO1xuICAgIHRoaXMuZW5jcnlwdGlvbktleSA9IGVuY3J5cHRpb25LZXk7XG5cbiAgICBpZiAocHJvcHMuc3RyZWFtTmFtZSkgeyB0aGlzLm5vZGUuYWRkTWV0YWRhdGEoJ2F3czpjZGs6aGFzUGh5c2ljYWxOYW1lJywgcHJvcHMuc3RyZWFtTmFtZSk7IH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnRzIHRoaXMgc3RyZWFtIGZyb20gdGhlIHN0YWNrLlxuICAgKi9cbiAgcHVibGljIGV4cG9ydCgpOiBTdHJlYW1JbXBvcnRQcm9wcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0cmVhbUFybjogbmV3IGNkay5PdXRwdXQodGhpcywgJ1N0cmVhbUFybicsIHsgdmFsdWU6IHRoaXMuc3RyZWFtQXJuIH0pLm1ha2VJbXBvcnRWYWx1ZSgpLnRvU3RyaW5nKCksXG4gICAgICBlbmNyeXB0aW9uS2V5OiB0aGlzLmVuY3J5cHRpb25LZXkgPyB0aGlzLmVuY3J5cHRpb25LZXkuZXhwb3J0KCkgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdXAga2V5IHByb3BlcnRpZXMgYW5kIHJldHVybiB0aGUgU3RyZWFtIGVuY3J5cHRpb24gcHJvcGVydHkgZnJvbSB0aGVcbiAgICogdXNlcidzIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwcml2YXRlIHBhcnNlRW5jcnlwdGlvbihwcm9wczogU3RyZWFtUHJvcHMpOiB7XG4gICAgc3RyZWFtRW5jcnlwdGlvbj86IENmblN0cmVhbS5TdHJlYW1FbmNyeXB0aW9uUHJvcGVydHksXG4gICAgZW5jcnlwdGlvbktleT86IGttcy5JRW5jcnlwdGlvbktleVxuICB9IHtcblxuICAgIC8vIGRlZmF1bHQgdG8gdW5lbmNyeXB0ZWQuXG4gICAgY29uc3QgZW5jcnlwdGlvblR5cGUgPSBwcm9wcy5lbmNyeXB0aW9uIHx8IFN0cmVhbUVuY3J5cHRpb24uVW5lbmNyeXB0ZWQ7XG5cbiAgICAvLyBpZiBlbmNyeXB0aW9uIGtleSBpcyBzZXQsIGVuY3J5cHRpb24gbXVzdCBiZSBzZXQgdG8gS01TLlxuICAgIGlmIChlbmNyeXB0aW9uVHlwZSAhPT0gU3RyZWFtRW5jcnlwdGlvbi5LbXMgJiYgcHJvcHMuZW5jcnlwdGlvbktleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBlbmNyeXB0aW9uS2V5IGlzIHNwZWNpZmllZCwgc28gJ2VuY3J5cHRpb24nIG11c3QgYmUgc2V0IHRvIEtNUyAodmFsdWU6ICR7ZW5jcnlwdGlvblR5cGV9KWApO1xuICAgIH1cblxuICAgIGlmIChlbmNyeXB0aW9uVHlwZSA9PT0gU3RyZWFtRW5jcnlwdGlvbi5VbmVuY3J5cHRlZCkge1xuICAgICAgcmV0dXJuIHsgc3RyZWFtRW5jcnlwdGlvbjogdW5kZWZpbmVkLCBlbmNyeXB0aW9uS2V5OiB1bmRlZmluZWQgfTtcbiAgICB9XG5cbiAgICBpZiAoZW5jcnlwdGlvblR5cGUgPT09IFN0cmVhbUVuY3J5cHRpb24uS21zKSB7XG4gICAgICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gcHJvcHMuZW5jcnlwdGlvbktleSB8fCBuZXcga21zLkVuY3J5cHRpb25LZXkodGhpcywgJ0tleScsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IGBDcmVhdGVkIGJ5ICR7dGhpcy5ub2RlLnBhdGh9YFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHN0cmVhbUVuY3J5cHRpb246IENmblN0cmVhbS5TdHJlYW1FbmNyeXB0aW9uUHJvcGVydHkgPSB7XG4gICAgICAgIGVuY3J5cHRpb25UeXBlOiAnS01TJyxcbiAgICAgICAga2V5SWQ6IGVuY3J5cHRpb25LZXkua2V5QXJuXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgZW5jcnlwdGlvbktleSwgc3RyZWFtRW5jcnlwdGlvbiB9O1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCAnZW5jcnlwdGlvblR5cGUnOiAke2VuY3J5cHRpb25UeXBlfWApO1xuICB9XG59XG5cbi8qKlxuICogV2hhdCBraW5kIG9mIHNlcnZlci1zaWRlIGVuY3J5cHRpb24gdG8gYXBwbHkgdG8gdGhpcyBzdHJlYW1cbiAqL1xuZXhwb3J0IGVudW0gU3RyZWFtRW5jcnlwdGlvbiB7XG4gIC8qKlxuICAgKiBSZWNvcmRzIGluIHRoZSBzdHJlYW0gYXJlIG5vdCBlbmNyeXB0ZWQuXG4gICAqL1xuICBVbmVuY3J5cHRlZCA9ICdOT05FJyxcblxuICAvKipcbiAgICogU2VydmVyLXNpZGUgZW5jcnlwdGlvbiB3aXRoIGEgS01TIGtleSBtYW5hZ2VkIGJ5IHRoZSB1c2VyLlxuICAgKiBJZiBgZW5jcnlwdGlvbktleWAgaXMgc3BlY2lmaWVkLCB0aGlzIGtleSB3aWxsIGJlIHVzZWQsIG90aGVyd2lzZSwgb25lIHdpbGwgYmUgZGVmaW5lZC5cbiAgICovXG4gIEttcyA9ICdLTVMnLFxufVxuXG5jbGFzcyBJbXBvcnRlZFN0cmVhbSBleHRlbmRzIFN0cmVhbUJhc2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgc3RyZWFtQXJuOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBzdHJlYW1OYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBlbmNyeXB0aW9uS2V5Pzoga21zLklFbmNyeXB0aW9uS2V5O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjZGsuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBTdHJlYW1JbXBvcnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnN0cmVhbUFybiA9IHByb3BzLnN0cmVhbUFybjtcblxuICAgIC8vIEdldCB0aGUgbmFtZSBmcm9tIHRoZSBBUk5cbiAgICB0aGlzLnN0cmVhbU5hbWUgPSBjZGsuU3RhY2suZmluZCh0aGlzKS5wYXJzZUFybihwcm9wcy5zdHJlYW1Bcm4pLnJlc291cmNlTmFtZSE7XG5cbiAgICBpZiAocHJvcHMuZW5jcnlwdGlvbktleSkge1xuICAgICAgLy8gVE9ETzogaW1wb3J0IFwic2NvcGVcIiBzaG91bGQgYmUgY2hhbmdlZCB0byBcInRoaXNcIlxuICAgICAgdGhpcy5lbmNyeXB0aW9uS2V5ID0ga21zLkVuY3J5cHRpb25LZXkuaW1wb3J0KHNjb3BlLCAnS2V5JywgcHJvcHMuZW5jcnlwdGlvbktleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5jcnlwdGlvbktleSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZXhwb3J0KCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzO1xuICB9XG59XG4iXX0=
{
"name": "@aws-cdk/aws-kinesis",
"version": "0.21.0",
"version": "0.22.0",
"description": "CDK Constructs for AWS Kinesis",

@@ -36,3 +36,5 @@ "main": "lib/index.js",

"pkglint": "pkglint -f",
"package": "cdk-package"
"package": "cdk-package",
"awslint": "cdk-awslint",
"cfn2ts": "cfn2ts"
},

@@ -55,19 +57,19 @@ "cdk-build": {

"devDependencies": {
"@aws-cdk/assert": "^0.21.0",
"cdk-build-tools": "^0.21.0",
"cfn2ts": "^0.21.0",
"pkglint": "^0.21.0"
"@aws-cdk/assert": "^0.22.0",
"cdk-build-tools": "^0.22.0",
"cfn2ts": "^0.22.0",
"pkglint": "^0.22.0"
},
"dependencies": {
"@aws-cdk/aws-iam": "^0.21.0",
"@aws-cdk/aws-kms": "^0.21.0",
"@aws-cdk/aws-logs": "^0.21.0",
"@aws-cdk/cdk": "^0.21.0"
"@aws-cdk/aws-iam": "^0.22.0",
"@aws-cdk/aws-kms": "^0.22.0",
"@aws-cdk/aws-logs": "^0.22.0",
"@aws-cdk/cdk": "^0.22.0"
},
"homepage": "https://github.com/awslabs/aws-cdk",
"peerDependencies": {
"@aws-cdk/aws-iam": "^0.21.0",
"@aws-cdk/aws-kms": "^0.21.0",
"@aws-cdk/aws-logs": "^0.21.0",
"@aws-cdk/cdk": "^0.21.0"
"@aws-cdk/aws-iam": "^0.22.0",
"@aws-cdk/aws-kms": "^0.22.0",
"@aws-cdk/aws-logs": "^0.22.0",
"@aws-cdk/cdk": "^0.22.0"
},

@@ -74,0 +76,0 @@ "engines": {

@@ -25,5 +25,29 @@ {

"strictNullChecks": true,
"target": "ES2018"
"target": "ES2018",
"composite": true
},
"include": [
"**/*.ts"
],
"exclude": [
"node_modules"
],
"references": [
{
"path": "../aws-iam"
},
{
"path": "../aws-kms"
},
{
"path": "../aws-logs"
},
{
"path": "../cdk"
},
{
"path": "../assert"
}
],
"_generated_by_jsii_": "Generated by jsii - safe to delete, and ideally should be in .gitignore"
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc