Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@aws-cdk/aws-cognito

Package Overview
Dependencies
Maintainers
5
Versions
288
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

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

Comparing version 1.25.0 to 1.26.0

test/integ.user-pool.d.ts

95

lib/user-pool.d.ts

@@ -0,1 +1,2 @@

import { IRole } from '@aws-cdk/aws-iam';
import * as lambda from '@aws-cdk/aws-lambda';

@@ -180,2 +181,66 @@ import { Construct, IResource, Resource } from '@aws-cdk/core';

}
/**
* The email verification style
*/
export declare enum VerificationEmailStyle {
/** Verify email via code */
CODE = "CONFIRM_WITH_CODE",
/** Verify email via link */
LINK = "CONFIRM_WITH_LINK"
}
/**
* User pool configuration for user self sign up.
*/
export interface UserVerificationConfig {
/**
* The email subject template for the verification email sent to the user upon sign up.
* See https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-message-templates.html to
* learn more about message templates.
* @default 'Verify your new account'
*/
readonly emailSubject?: string;
/**
* The email body template for the verification email sent to the user upon sign up.
* See https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-message-templates.html to
* learn more about message templates.
* @default 'Hello {username}, Your verification code is {####}'
*/
readonly emailBody?: string;
/**
* Emails can be verified either using a code or a link.
* Learn more at https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-email-verification-message-customization.html
* @default VerificationEmailStyle.CODE
*/
readonly emailStyle?: VerificationEmailStyle;
/**
* The message template for the verification SMS sent to the user upon sign up.
* See https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-message-templates.html to
* learn more about message templates.
* @default 'The verification code to your new account is {####}'
*/
readonly smsMessage?: string;
}
/**
* User pool configuration when administrators sign users up.
*/
export interface UserInvitationConfig {
/**
* The template to the email subject that is sent to the user when an administrator signs them up to the user pool.
* @default 'Your temporary password'
*/
readonly emailSubject?: string;
/**
* The template to the email body that is sent to the user when an administrator signs them up to the user pool.
* @default 'Your username is {username} and temporary password is {####}.'
*/
readonly emailBody?: string;
/**
* The template to the SMS message that is sent to the user when an administrator signs them up to the user pool.
* @default 'Your username is {username} and temporary password is {####}'
*/
readonly smsMessage?: string;
}
/**
* Props for the UserPool construct
*/
export interface UserPoolProps {

@@ -189,2 +254,31 @@ /**

/**
* Whether self sign up should be enabled. This can be further configured via the `selfSignUp` property.
* @default false
*/
readonly selfSignUpEnabled?: boolean;
/**
* Configuration around users signing themselves up to the user pool.
* Enable or disable self sign-up via the `selfSignUpEnabled` property.
* @default - see defaults in UserVerificationConfig
*/
readonly userVerification?: UserVerificationConfig;
/**
* Configuration around admins signing up users into a user pool.
* @default - see defaults in UserInvitationConfig
*/
readonly userInvitation?: UserInvitationConfig;
/**
* The IAM role that Cognito will assume while sending SMS messages.
* @default - a new IAM role is created
*/
readonly smsRole?: IRole;
/**
* The 'ExternalId' that Cognito service must using when assuming the `smsRole`, if the role is restricted with an 'sts:ExternalId' conditional.
* Learn more about ExternalId here - https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html
*
* This property will be ignored if `smsRole` is not specified.
* @default - No external id will be configured
*/
readonly smsRoleExternalId?: string;
/**
* Method used for user registration & sign in.

@@ -357,2 +451,3 @@ * Allows either username with aliases OR sign in with email, phone, or both.

private addLambdaPermission;
private smsConfiguration;
}

88

lib/user-pool.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const iam = require("@aws-cdk/aws-iam");
const aws_iam_1 = require("@aws-cdk/aws-iam");
const core_1 = require("@aws-cdk/core");

@@ -130,2 +130,12 @@ const cognito_generated_1 = require("./cognito.generated");

/**
* The email verification style
*/
var VerificationEmailStyle;
(function (VerificationEmailStyle) {
/** Verify email via code */
VerificationEmailStyle["CODE"] = "CONFIRM_WITH_CODE";
/** Verify email via link */
VerificationEmailStyle["LINK"] = "CONFIRM_WITH_LINK";
})(VerificationEmailStyle = exports.VerificationEmailStyle || (exports.VerificationEmailStyle = {}));
/**
* Define a Cognito User Pool

@@ -135,2 +145,3 @@ */

constructor(scope, id, props = {}) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
super(scope, id);

@@ -179,2 +190,27 @@ this.triggers = {};

}
const emailVerificationSubject = (_b = (_a = props.userVerification) === null || _a === void 0 ? void 0 : _a.emailSubject, (_b !== null && _b !== void 0 ? _b : 'Verify your new account'));
const emailVerificationMessage = (_d = (_c = props.userVerification) === null || _c === void 0 ? void 0 : _c.emailBody, (_d !== null && _d !== void 0 ? _d : 'Hello {username}, Your verification code is {####}'));
const smsVerificationMessage = (_f = (_e = props.userVerification) === null || _e === void 0 ? void 0 : _e.smsMessage, (_f !== null && _f !== void 0 ? _f : 'The verification code to your new account is {####}'));
const defaultEmailOption = (_h = (_g = props.userVerification) === null || _g === void 0 ? void 0 : _g.emailStyle, (_h !== null && _h !== void 0 ? _h : VerificationEmailStyle.CODE));
const verificationMessageTemplate = (defaultEmailOption === VerificationEmailStyle.CODE) ? {
defaultEmailOption,
emailMessage: emailVerificationMessage,
emailSubject: emailVerificationSubject,
smsMessage: smsVerificationMessage,
} : {
defaultEmailOption,
emailMessageByLink: emailVerificationMessage,
emailSubjectByLink: emailVerificationSubject,
smsMessage: smsVerificationMessage
};
const inviteMessageTemplate = {
emailMessage: (_j = props.userInvitation) === null || _j === void 0 ? void 0 : _j.emailBody,
emailSubject: (_k = props.userInvitation) === null || _k === void 0 ? void 0 : _k.emailSubject,
smsMessage: (_l = props.userInvitation) === null || _l === void 0 ? void 0 : _l.smsMessage,
};
const selfSignUpEnabled = props.selfSignUpEnabled !== undefined ? props.selfSignUpEnabled : false;
const adminCreateUserConfig = {
allowAdminCreateUserOnly: !selfSignUpEnabled,
inviteMessageTemplate: props.userInvitation !== undefined ? inviteMessageTemplate : undefined,
};
const userPool = new cognito_generated_1.CfnUserPool(this, 'Resource', {

@@ -185,3 +221,9 @@ userPoolName: props.userPoolName,

autoVerifiedAttributes: props.autoVerifiedAttributes,
lambdaConfig: core_1.Lazy.anyValue({ produce: () => this.triggers })
lambdaConfig: core_1.Lazy.anyValue({ produce: () => this.triggers }),
smsConfiguration: this.smsConfiguration(props),
adminCreateUserConfig,
emailVerificationMessage,
emailVerificationSubject,
smsVerificationMessage,
verificationMessageTemplate,
});

@@ -317,8 +359,46 @@ this.userPoolId = userPool.ref;

fn.addPermission(`${normalize}Cognito`, {
principal: new iam.ServicePrincipal('cognito-idp.amazonaws.com'),
principal: new aws_iam_1.ServicePrincipal('cognito-idp.amazonaws.com'),
sourceArn: this.userPoolArn
});
}
smsConfiguration(props) {
var _a;
if (props.smsRole) {
return {
snsCallerArn: props.smsRole.roleArn,
externalId: props.smsRoleExternalId
};
}
else {
const smsRoleExternalId = this.node.uniqueId.substr(0, 1223); // sts:ExternalId max length of 1224
const smsRole = (_a = props.smsRole, (_a !== null && _a !== void 0 ? _a : new aws_iam_1.Role(this, 'smsRole', {
assumedBy: new aws_iam_1.ServicePrincipal('cognito-idp.amazonaws.com', {
conditions: {
StringEquals: { 'sts:ExternalId': smsRoleExternalId }
}
}),
inlinePolicies: {
/*
* The UserPool is very particular that it must contain an 'sns:Publish' action as an inline policy.
* Ideally, a conditional that restricts this action to 'sms' protocol needs to be attached, but the UserPool deployment fails validation.
* Seems like a case of being excessively strict.
*/
'sns-publish': new aws_iam_1.PolicyDocument({
statements: [
new aws_iam_1.PolicyStatement({
actions: ['sns:Publish'],
resources: ['*'],
})
]
})
}
})));
return {
externalId: smsRoleExternalId,
snsCallerArn: smsRole.roleArn
};
}
}
}
exports.UserPool = UserPool;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1wb29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidXNlci1wb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsd0NBQXdDO0FBRXhDLHdDQUFxRTtBQUNyRSwyREFBa0Q7QUFFbEQ7Ozs7R0FJRztBQUNILElBQVksaUJBOEdYO0FBOUdELFdBQVksaUJBQWlCO0lBQzNCOztPQUVHO0lBQ0gsd0NBQW1CLENBQUE7SUFFbkI7Ozs7T0FJRztJQUNILDRDQUF1QixDQUFBO0lBRXZCOzs7T0FHRztJQUNILG9DQUFlLENBQUE7SUFFZjs7OztPQUlHO0lBQ0gsZ0RBQTJCLENBQUE7SUFFM0I7O09BRUc7SUFDSCxzQ0FBaUIsQ0FBQTtJQUVqQjs7OztPQUlHO0lBQ0gsOENBQXlCLENBQUE7SUFFekI7Ozs7O09BS0c7SUFDSCxzQ0FBaUIsQ0FBQTtJQUVqQjs7Ozs7T0FLRztJQUNILGdEQUEyQixDQUFBO0lBRTNCOzs7T0FHRztJQUNILGtDQUFhLENBQUE7SUFFYjs7O09BR0c7SUFDSCwwQ0FBcUIsQ0FBQTtJQUVyQjs7Ozs7T0FLRztJQUNILGtEQUE2QixDQUFBO0lBRTdCOzs7Ozs7T0FNRztJQUNILHdDQUFtQixDQUFBO0lBRW5COztPQUVHO0lBQ0gsOERBQXlDLENBQUE7SUFFekM7O09BRUc7SUFDSCx3Q0FBbUIsQ0FBQTtJQUVuQjs7T0FFRztJQUNILDBDQUFxQixDQUFBO0lBRXJCOzs7O09BSUc7SUFDSCw4Q0FBeUIsQ0FBQTtJQUV6Qjs7O09BR0c7SUFDSCx3Q0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBOUdXLGlCQUFpQixHQUFqQix5QkFBaUIsS0FBakIseUJBQWlCLFFBOEc1QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxVQW9CWDtBQXBCRCxXQUFZLFVBQVU7SUFDcEI7O09BRUc7SUFDSCxtREFBUSxDQUFBO0lBRVI7O09BRUc7SUFDSCw2Q0FBSyxDQUFBO0lBRUw7O09BRUc7SUFDSCw2Q0FBSyxDQUFBO0lBRUw7O09BRUc7SUFD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QyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0QsRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLFNBQVMsU0FBUyxFQUFFO1lBQ3RDLFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQywyQkFBMkIsQ0FBQztZQUNoRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBck9ELDRCQXFPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGlhbSBmcm9tICdAYXdzLWNkay9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdAYXdzLWNkay9hd3MtbGFtYmRhJztcbmltcG9ydCB7IENvbnN0cnVjdCwgSVJlc291cmNlLCBMYXp5LCBSZXNvdXJjZSB9IGZyb20gJ0Bhd3MtY2RrL2NvcmUnO1xuaW1wb3J0IHsgQ2ZuVXNlclBvb2wgfSBmcm9tICcuL2NvZ25pdG8uZ2VuZXJhdGVkJztcblxuLyoqXG4gKiBTdGFuZGFyZCBhdHRyaWJ1dGVzXG4gKiBTcGVjaWZpZWQgZm9sbG93aW5nIHRoZSBPcGVuSUQgQ29ubmVjdCBzcGVjXG4gKiBAc2VlIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1N0YW5kYXJkQ2xhaW1zXG4gKi9cbmV4cG9ydCBlbnVtIFVzZXJQb29sQXR0cmlidXRlIHtcbiAgLyoqXG4gICAqIEVuZC1Vc2VyJ3MgcHJlZmVycmVkIHBvc3RhbCBhZGRyZXNzLlxuICAgKi9cbiAgQUREUkVTUyA9ICdhZGRyZXNzJyxcblxuICAvKipcbiAgICogRW5kLVVzZXIncyBiaXJ0aGRheSwgcmVwcmVzZW50ZWQgYXMgYW4gSVNPIDg2MDE6MjAwNCBbSVNPODYwMeKAkTIwMDRdIFlZWVktTU0tREQgZm9ybWF0LlxuICAgKiBUaGUgeWVhciBNQVkgYmUgMDAwMCwgaW5kaWNhdGluZyB0aGF0IGl0IGlzIG9taXR0ZWQuXG4gICAqIFRvIHJlcHJlc2VudCBvbmx5IHRoZSB5ZWFyLCBZWVlZIGZvcm1hdCBpcyBhbGxvd2VkLlxuICAgKi9cbiAgQklSVEhEQVRFID0gJ2JpcnRoZGF0ZScsXG5cbiAgLyoqXG4gICAqIEVuZC1Vc2VyJ3MgcHJlZmVycmVkIGUtbWFpbCBhZGRyZXNzLlxuICAgKiBJdHMgdmFsdWUgTVVTVCBjb25mb3JtIHRvIHRoZSBSRkMgNTMyMiBbUkZDNTMyMl0gYWRkci1zcGVjIHN5bnRheC5cbiAgICovXG4gIEVNQUlMID0gJ2VtYWlsJyxcblxuICAvKipcbiAgICogU3VybmFtZShzKSBvciBsYXN0IG5hbWUocykgb2YgdGhlIEVuZC1Vc2VyLlxuICAgKiBOb3RlIHRoYXQgaW4gc29tZSBjdWx0dXJlcywgcGVvcGxlIGNhbiBoYXZlIG11bHRpcGxlIGZhbWlseSBuYW1lcyBvciBubyBmYW1pbHkgbmFtZTtcbiAgICogYWxsIGNhbiBiZSBwcmVzZW50LCB3aXRoIHRoZSBuYW1lcyBiZWluZyBzZXBhcmF0ZWQgYnkgc3BhY2UgY2hhcmFjdGVycy5cbiAgICovXG4gIEZBTUlMWV9OQU1FID0gJ2ZhbWlseV9uYW1lJyxcblxuICAvKipcbiAgICogRW5kLVVzZXIncyBnZW5kZXIuXG4gICAqL1xuICBHRU5ERVIgPSAnZ2VuZGVyJyxcblxuICAvKipcbiAgICogR2l2ZW4gbmFtZShzKSBvciBmaXJzdCBuYW1lKHMpIG9mIHRoZSBFbmQtVXNlci5cbiAgICogTm90ZSB0aGF0IGluIHNvbWUgY3VsdHVyZXMsIHBlb3BsZSBjYW4gaGF2ZSBtdWx0aXBsZSBnaXZlbiBuYW1lcztcbiAgICogYWxsIGNhbiBiZSBwcmVzZW50LCB3aXRoIHRoZSBuYW1lcyBiZWluZyBzZXBhcmF0ZWQgYnkgc3BhY2UgY2hhcmFjdGVycy5cbiAgICovXG4gIEdJVkVOX05BTUUgPSAnZ2l2ZW5fbmFtZScsXG5cbiAgLyoqXG4gICAqIEVuZC1Vc2VyJ3MgbG9jYWxlLCByZXByZXNlbnRlZCBhcyBhIEJDUDQ3IFtSRkM1NjQ2XSBsYW5ndWFnZSB0YWcuXG4gICAqIFRoaXMgaXMgdHlwaWNhbGx5IGFuIElTTyA2MzktMSBBbHBoYS0yIFtJU082MznigJExXSBsYW5ndWFnZSBjb2RlIGluIGxvd2VyY2FzZVxuICAgKiBhbmQgYW4gSVNPIDMxNjYtMSBBbHBoYS0yIFtJU08zMTY24oCRMV0gY291bnRyeSBjb2RlIGluIHVwcGVyY2FzZSwgc2VwYXJhdGVkIGJ5IGEgZGFzaC5cbiAgICogRm9yIGV4YW1wbGUsIGVuLVVTIG9yIGZyLUNBLlxuICAgKi9cbiAgTE9DQUxFID0gJ2xvY2FsZScsXG5cbiAgLyoqXG4gICAqIE1pZGRsZSBuYW1lKHMpIG9mIHRoZSBFbmQtVXNlci5cbiAgICogTm90ZSB0aGF0IGluIHNvbWUgY3VsdHVyZXMsIHBlb3BsZSBjYW4gaGF2ZSBtdWx0aXBsZSBtaWRkbGUgbmFtZXM7XG4gICAqIGFsbCBjYW4gYmUgcHJlc2VudCwgd2l0aCB0aGUgbmFtZXMgYmVpbmcgc2VwYXJhdGVkIGJ5IHNwYWNlIGNoYXJhY3RlcnMuXG4gICAqIEFsc28gbm90ZSB0aGF0IGluIHNvbWUgY3VsdHVyZXMsIG1pZGRsZSBuYW1lcyBhcmUgbm90IHVzZWQuXG4gICAqL1xuICBNSURETEVfTkFNRSA9ICdtaWRkbGVfbmFtZScsXG5cbiAgLyoqXG4gICAqIEVuZC1Vc2VyJ3MgZnVsbCBuYW1lIGluIGRpc3BsYXlhYmxlIGZvcm0gaW5jbHVkaW5nIGFsbCBuYW1lIHBhcnRzLFxuICAgKiBwb3NzaWJseSBpbmNsdWRpbmcgdGl0bGVzIGFuZCBzdWZmaXhlcywgb3JkZXJlZCBhY2NvcmRpbmcgdG8gdGhlIEVuZC1Vc2VyJ3MgbG9jYWxlIGFuZCBwcmVmZXJlbmNlcy5cbiAgICovXG4gIE5BTUUgPSAnbmFtZScsXG5cbiAgLyoqXG4gICAqIENhc3VhbCBuYW1lIG9mIHRoZSBFbmQtVXNlciB0aGF0IG1heSBvciBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBnaXZlbl9uYW1lLlxuICAgKiBGb3IgaW5zdGFuY2UsIGEgbmlja25hbWUgdmFsdWUgb2YgTWlrZSBtaWdodCBiZSByZXR1cm5lZCBhbG9uZ3NpZGUgYSBnaXZlbl9uYW1lIHZhbHVlIG9mIE1pY2hhZWwuXG4gICAqL1xuICBOSUNLTkFNRSA9ICduaWNrbmFtZScsXG5cbiAgLyoqXG4gICAqIEVuZC1Vc2VyJ3MgcHJlZmVycmVkIHRlbGVwaG9uZSBudW1iZXIuXG4gICAqIEUuMTY0IFtFLjE2NF0gaXMgUkVDT01NRU5ERUQgYXMgdGhlIGZvcm1hdCBvZiB0aGlzIENsYWltLCBmb3IgZXhhbXBsZSwgKzEgKDQyNSkgNTU1LTEyMTIgb3IgKzU2ICgyKSA2ODcgMjQwMC5cbiAgICogSWYgdGhlIHBob25lIG51bWJlciBjb250YWlucyBhbiBleHRlbnNpb24sIGl0IGlzIFJFQ09NTUVOREVEIHRoYXQgdGhlIGV4dGVuc2lvbiBiZSByZXByZXNlbnRlZCB1c2luZyB0aGVcbiAgICogUkZDIDM5NjYgW1JGQzM5NjZdIGV4dGVuc2lvbiBzeW50YXgsIGZvciBleGFtcGxlLCArMSAoNjA0KSA1NTUtMTIzNDtleHQ9NTY3OC5cbiAgICovXG4gIFBIT05FX05VTUJFUiA9ICdwaG9uZV9udW1iZXInLFxuXG4gIC8qKlxuICAgKiBVUkwgb2YgdGhlIEVuZC1Vc2VyJ3MgcHJvZmlsZSBwaWN0dXJlLlxuICAgKiBUaGlzIFVSTCBNVVNUIHJlZmVyIHRvIGFuIGltYWdlIGZpbGUgKGZvciBleGFtcGxlLCBhIFBORywgSlBFRywgb3IgR0lGIGltYWdlIGZpbGUpLFxuICAgKiByYXRoZXIgdGhhbiB0byBhIFdlYiBwYWdlIGNvbnRhaW5pbmcgYW4gaW1hZ2UuXG4gICAqIE5vdGUgdGhhdCB0aGlzIFVSTCBTSE9VTEQgc3BlY2lmaWNhbGx5IHJlZmVyZW5jZSBhIHByb2ZpbGUgcGhvdG8gb2YgdGhlIEVuZC1Vc2VyXG4gICAqIHN1aXRhYmxlIGZvciBkaXNwbGF5aW5nIHdoZW4gZGVzY3JpYmluZyB0aGUgRW5kLVVzZXIsIHJhdGhlciB0aGFuIGFuIGFyYml0cmFyeSBwaG90byB0YWtlbiBieSB0aGUgRW5kLVVzZXJcbiAgICovXG4gIFBJQ1RVUkUgPSAncGljdHVyZScsXG5cbiAgLyoqXG4gICAqIFNob3J0aGFuZCBuYW1lIGJ5IHdoaWNoIHRoZSBFbmQtVXNlciB3aXNoZXMgdG8gYmUgcmVmZXJyZWQgdG8uXG4gICAqL1xuICBQUkVGRVJSRURfVVNFUk5BTUUgPSAncHJlZmVycmVkX3VzZXJuYW1lJyxcblxuICAvKipcbiAgICogVVJMIG9mIHRoZSBFbmQtVXNlcidzIHByb2ZpbGUgcGFnZS4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgV2ViIHBhZ2UgU0hPVUxEIGJlIGFib3V0IHRoZSBFbmQtVXNlci5cbiAgICovXG4gIFBST0ZJTEUgPSAncHJvZmlsZScsXG5cbiAgLyoqXG4gICAqIFRoZSBFbmQtVXNlcidzIHRpbWUgem9uZVxuICAgKi9cbiAgVElNRVpPTkUgPSAnem9uZWluZm8nLFxuXG4gIC8qKlxuICAgKiBUaW1lIHRoZSBFbmQtVXNlcidzIGluZm9ybWF0aW9uIHdhcyBsYXN0IHVwZGF0ZWQuXG4gICAqIEl0cyB2YWx1ZSBpcyBhIEpTT04gbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgZnJvbSAxOTcwLTAxLTAxVDA6MDowWlxuICAgKiBhcyBtZWFzdXJlZCBpbiBVVEMgdW50aWwgdGhlIGRhdGUvdGltZS5cbiAgICovXG4gIFVQREFURURfQVQgPSAndXBkYXRlZF9hdCcsXG5cbiAgLyoqXG4gICAqIFVSTCBvZiB0aGUgRW5kLVVzZXIncyBXZWIgcGFnZSBvciBibG9nLlxuICAgKiBUaGlzIFdlYiBwYWdlIFNIT1VMRCBjb250YWluIGluZm9ybWF0aW9uIHB1Ymxpc2hlZCBieSB0aGUgRW5kLVVzZXIgb3IgYW4gb3JnYW5pemF0aW9uIHRoYXQgdGhlIEVuZC1Vc2VyIGlzIGFmZmlsaWF0ZWQgd2l0aC5cbiAgICovXG4gIFdFQlNJVEUgPSAnd2Vic2l0ZSdcbn1cblxuLyoqXG4gKiBNZXRob2RzIG9mIHVzZXIgc2lnbi1pblxuICovXG5leHBvcnQgZW51bSBTaWduSW5UeXBlIHtcbiAgLyoqXG4gICAqIEVuZC11c2VyIHdpbGwgc2lnbiBpbiB3aXRoIGEgdXNlcm5hbWUsIHdpdGggb3B0aW9uYWwgYWxpYXNlc1xuICAgKi9cbiAgVVNFUk5BTUUsXG5cbiAgLyoqXG4gICAqIEVuZC11c2VyIHdpbGwgc2lnbiBpbiB1c2luZyBhbiBlbWFpbCBhZGRyZXNzXG4gICAqL1xuICBFTUFJTCxcblxuICAvKipcbiAgICogRW5kLXVzZXIgd2lsbCBzaWduIGluIHVzaW5nIGEgcGhvbmUgbnVtYmVyXG4gICAqL1xuICBQSE9ORSxcblxuICAvKipcbiAgICogRW5kLXVzZXIgd2lsbCBzaWduIGluIHVzaW5nIGVpdGhlciBhbiBlbWFpbCBhZGRyZXNzIG9yIHBob25lIG51bWJlclxuICAgKi9cbiAgRU1BSUxfT1JfUEhPTkVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyUG9vbFRyaWdnZXJzIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYXV0aGVudGljYXRpb24gY2hhbGxlbmdlLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2VyLXBvb2wtbGFtYmRhLWNyZWF0ZS1hdXRoLWNoYWxsZW5nZS5odG1sXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVBdXRoQ2hhbGxlbmdlPzogbGFtYmRhLklGdW5jdGlvbjtcblxuICAvKipcbiAgICogQSBjdXN0b20gTWVzc2FnZSBBV1MgTGFtYmRhIHRyaWdnZXIuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8vbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzZXItcG9vbC1sYW1iZGEtY3VzdG9tLW1lc3NhZ2UuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tTWVzc2FnZT86IGxhbWJkYS5JRnVuY3Rpb247XG5cbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29nbml0by9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNlci1wb29sLWxhbWJkYS1kZWZpbmUtYXV0aC1jaGFsbGVuZ2UuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgZGVmaW5lQXV0aENoYWxsZW5nZT86IGxhbWJkYS5JRnVuY3Rpb247XG5cbiAgLyoqXG4gICAqIEEgcG9zdC1hdXRoZW50aWNhdGlvbiBBV1MgTGFtYmRhIHRyaWdnZXIuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8vbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzZXItcG9vbC1sYW1iZGEtcG9zdC1hdXRoZW50aWNhdGlvbi5odG1sXG4gICAqL1xuICByZWFkb25seSBwb3N0QXV0aGVudGljYXRpb24/OiBsYW1iZGEuSUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBBIHBvc3QtY29uZmlybWF0aW9uIEFXUyBMYW1iZGEgdHJpZ2dlci5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29nbml0by9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNlci1wb29sLWxhbWJkYS1wb3N0LWNvbmZpcm1hdGlvbi5odG1sXG4gICAqL1xuICByZWFkb25seSBwb3N0Q29uZmlybWF0aW9uPzogbGFtYmRhLklGdW5jdGlvbjtcblxuICAvKipcbiAgICogQSBwcmUtYXV0aGVudGljYXRpb24gQVdTIExhbWJkYSB0cmlnZ2VyLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2VyLXBvb2wtbGFtYmRhLXByZS1hdXRoZW50aWNhdGlvbi5odG1sXG4gICAqL1xuICByZWFkb25seSBwcmVBdXRoZW50aWNhdGlvbj86IGxhbWJkYS5JRnVuY3Rpb247XG5cbiAgLyoqXG4gICAqIEEgcHJlLXJlZ2lzdHJhdGlvbiBBV1MgTGFtYmRhIHRyaWdnZXIuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8vbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzZXItcG9vbC1sYW1iZGEtcHJlLXNpZ24tdXAuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlU2lnblVwPzogbGFtYmRhLklGdW5jdGlvbjtcblxuICAvKipcbiAgICogQSBwcmUtdG9rZW4tZ2VuZXJhdGlvbiBBV1MgTGFtYmRhIHRyaWdnZXIuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8vbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzZXItcG9vbC1sYW1iZGEtcHJlLXRva2VuLWdlbmVyYXRpb24uaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlVG9rZW5HZW5lcmF0aW9uPzogbGFtYmRhLklGdW5jdGlvbjtcblxuICAvKipcbiAgICogQSB1c2VyLW1pZ3JhdGlvbiBBV1MgTGFtYmRhIHRyaWdnZXIuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8vbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzZXItcG9vbC1sYW1iZGEtbWlncmF0ZS11c2VyLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJNaWdyYXRpb24/OiBsYW1iZGEuSUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBWZXJpZmllcyB0aGUgYXV0aGVudGljYXRpb24gY2hhbGxlbmdlIHJlc3BvbnNlLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2VyLXBvb2wtbGFtYmRhLXZlcmlmeS1hdXRoLWNoYWxsZW5nZS1yZXNwb25zZS5odG1sXG4gICAqL1xuICByZWFkb25seSB2ZXJpZnlBdXRoQ2hhbGxlbmdlUmVzcG9uc2U/OiBsYW1iZGEuSUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBJbmRleCBzaWduYXR1cmVcbiAgICovXG4gIFt0cmlnZ2VyOiBzdHJpbmddOiBsYW1iZGEuSUZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQb29sUHJvcHMge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgdXNlciBwb29sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbmFtZSBieSBDbG91ZEZvcm1hdGlvbiBhdCBkZXBsb3kgdGltZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlclBvb2xOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNZXRob2QgdXNlZCBmb3IgdXNlciByZWdpc3RyYXRpb24gJiBzaWduIGluLlxuICAgKiBBbGxvd3MgZWl0aGVyIHVzZXJuYW1lIHdpdGggYWxpYXNlcyBPUiBzaWduIGluIHdpdGggZW1haWwsIHBob25lLCBvciBib3RoLlxuICAgKlxuICAgKiBAZGVmYXVsdCBTaWduSW5UeXBlLlVzZXJuYW1lXG4gICAqL1xuICByZWFkb25seSBzaWduSW5UeXBlPzogU2lnbkluVHlwZTtcblxuICAvKipcbiAgICogQXR0cmlidXRlcyB0byBhbGxvdyBhcyB1c2VybmFtZSBhbGlhcy5cbiAgICogT25seSB2YWxpZCBpZiBzaWduSW5UeXBlIGlzIFVTRVJOQU1FXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gYWxpYXMuXG4gICAqL1xuICByZWFkb25seSB1c2VybmFtZUFsaWFzQXR0cmlidXRlcz86IFVzZXJQb29sQXR0cmlidXRlW107XG5cbiAgLyoqXG4gICAqIEF0dHJpYnV0ZXMgd2hpY2ggQ29nbml0byB3aWxsIGF1dG9tYXRpY2FsbHkgc2VuZCBhIHZlcmlmaWNhdGlvbiBtZXNzYWdlIHRvLlxuICAgKiBNdXN0IGJlIGVpdGhlciBFTUFJTCwgUEhPTkUsIG9yIGJvdGguXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gYXV0byB2ZXJpZmljYXRpb24uXG4gICAqL1xuICByZWFkb25seSBhdXRvVmVyaWZpZWRBdHRyaWJ1dGVzPzogVXNlclBvb2xBdHRyaWJ1dGVbXTtcblxuICAvKipcbiAgICogTGFtYmRhIGZ1bmN0aW9ucyB0byB1c2UgZm9yIHN1cHBvcnRlZCBDb2duaXRvIHRyaWdnZXJzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIExhbWJkYSB0cmlnZ2Vycy5cbiAgICovXG4gIHJlYWRvbmx5IGxhbWJkYVRyaWdnZXJzPzogVXNlclBvb2xUcmlnZ2Vycztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyUG9vbEF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIElEIG9mIGFuIGV4aXN0aW5nIHVzZXIgcG9vbFxuICAgKi9cbiAgcmVhZG9ubHkgdXNlclBvb2xJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBpbXBvcnRlZCB1c2VyIHBvb2xcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJQb29sQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm92aWRlciBuYW1lIG9mIHRoZSBpbXBvcnRlZCB1c2VyIHBvb2xcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJQb29sUHJvdmlkZXJOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgb2YgdGhlIGltcG9ydGVkIHVzZXIgcG9vbFxuICAgKi9cbiAgcmVhZG9ubHkgdXNlclBvb2xQcm92aWRlclVybDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElVc2VyUG9vbCBleHRlbmRzIElSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgcGh5c2ljYWwgSUQgb2YgdGhpcyB1c2VyIHBvb2wgcmVzb3VyY2VcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlclBvb2xJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoaXMgdXNlciBwb29sIHJlc291cmNlXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJQb29sQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm92aWRlciBuYW1lIG9mIHRoaXMgdXNlciBwb29sIHJlc291cmNlXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJQb29sUHJvdmlkZXJOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm92aWRlciBVUkwgb2YgdGhpcyB1c2VyIHBvb2wgcmVzb3VyY2VcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlclBvb2xQcm92aWRlclVybDogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlZmluZSBhIENvZ25pdG8gVXNlciBQb29sXG4gKi9cbmV4cG9ydCBjbGFzcyBVc2VyUG9vbCBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVVzZXJQb29sIHtcbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyB1c2VyIHBvb2wgcmVzb3VyY2VcbiAgICogQHBhcmFtIHNjb3BlIFBhcmVudCBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkIENvbnN0cnVjdCBJRFxuICAgKiBAcGFyYW0gYXR0cnMgSW1wb3J0ZWQgdXNlciBwb29sIHByb3BlcnRpZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVVzZXJQb29sQXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogVXNlclBvb2xBdHRyaWJ1dGVzKTogSVVzZXJQb29sIHtcbiAgICAvKipcbiAgICAgKiBEZWZpbmUgYSB1c2VyIHBvb2wgd2hpY2ggaGFzIGJlZW4gZGVjbGFyZWQgaW4gYW5vdGhlciBzdGFja1xuICAgICAqL1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVVzZXJQb29sIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbElkID0gYXR0cnMudXNlclBvb2xJZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbEFybiA9IGF0dHJzLnVzZXJQb29sQXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHVzZXJQb29sUHJvdmlkZXJOYW1lID0gYXR0cnMudXNlclBvb2xQcm92aWRlck5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdXNlclBvb2xQcm92aWRlclVybCA9IGF0dHJzLnVzZXJQb29sUHJvdmlkZXJVcmw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcGh5c2ljYWwgSUQgb2YgdGhpcyB1c2VyIHBvb2wgcmVzb3VyY2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHVzZXIgcG9vbFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVzZXJQb29sQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZXIgcG9vbCBwcm92aWRlciBuYW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlclBvb2xQcm92aWRlck5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVXNlciBwb29sIHByb3ZpZGVyIFVSTFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVzZXJQb29sUHJvdmlkZXJVcmw6IHN0cmluZztcblxuICBwcml2YXRlIHRyaWdnZXJzOiBDZm5Vc2VyUG9vbC5MYW1iZGFDb25maWdQcm9wZXJ0eSA9IHsgfTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVXNlclBvb2xQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGxldCBhbGlhc0F0dHJpYnV0ZXM6IFVzZXJQb29sQXR0cmlidXRlW10gfCB1bmRlZmluZWQ7XG4gICAgbGV0IHVzZXJuYW1lQXR0cmlidXRlczogVXNlclBvb2xBdHRyaWJ1dGVbXSB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChwcm9wcy51c2VybmFtZUFsaWFzQXR0cmlidXRlcyAhPSBudWxsICYmIHByb3BzLnNpZ25JblR5cGUgIT09IFNpZ25JblR5cGUuVVNFUk5BTUUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJ3VzZXJuYW1lQWxpYXNBdHRyaWJ1dGVzJyBjYW4gb25seSBiZSBzZXQgd2l0aCBhIHNpZ25JblR5cGUgb2YgJ1VTRVJOQU1FJ2ApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy51c2VybmFtZUFsaWFzQXR0cmlidXRlc1xuICAgICAgJiYgIXByb3BzLnVzZXJuYW1lQWxpYXNBdHRyaWJ1dGVzLmV2ZXJ5KGEgPT4ge1xuICAgICAgICByZXR1cm4gYSA9PT0gVXNlclBvb2xBdHRyaWJ1dGUuRU1BSUwgfHwgYSA9PT0gVXNlclBvb2xBdHRyaWJ1dGUuUEhPTkVfTlVNQkVSIHx8IGEgPT09IFVzZXJQb29sQXR0cmlidXRlLlBSRUZFUlJFRF9VU0VSTkFNRTtcbiAgICAgIH0pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCd1c2VybmFtZUFsaWFzQXR0cmlidXRlcycgY2FuIG9ubHkgaW5jbHVkZSBFTUFJTCwgUEhPTkVfTlVNQkVSLCBvciBQUkVGRVJSRURfVVNFUk5BTUVgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuYXV0b1ZlcmlmaWVkQXR0cmlidXRlc1xuICAgICAgJiYgIXByb3BzLmF1dG9WZXJpZmllZEF0dHJpYnV0ZXMuZXZlcnkoYSA9PiBhID09PSBVc2VyUG9vbEF0dHJpYnV0ZS5FTUFJTCB8fCBhID09PSBVc2VyUG9vbEF0dHJpYnV0ZS5QSE9ORV9OVU1CRVIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCdhdXRvVmVyaWZpZWRBdHRyaWJ1dGVzJyBjYW4gb25seSBpbmNsdWRlIEVNQUlMIG9yIFBIT05FX05VTUJFUmApO1xuICAgIH1cblxuICAgIHN3aXRjaCAocHJvcHMuc2lnbkluVHlwZSkge1xuICAgICAgY2FzZSBTaWduSW5UeXBlLlVTRVJOQU1FOlxuICAgICAgICBhbGlhc0F0dHJpYnV0ZXMgPSBwcm9wcy51c2VybmFtZUFsaWFzQXR0cmlidXRlcztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU2lnbkluVHlwZS5FTUFJTDpcbiAgICAgICAgdXNlcm5hbWVBdHRyaWJ1dGVzID0gW1VzZXJQb29sQXR0cmlidXRlLkVNQUlMXTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU2lnbkluVHlwZS5QSE9ORTpcbiAgICAgICAgdXNlcm5hbWVBdHRyaWJ1dGVzID0gW1VzZXJQb29sQXR0cmlidXRlLlBIT05FX05VTUJFUl07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNpZ25JblR5cGUuRU1BSUxfT1JfUEhPTkU6XG4gICAgICAgIHVzZXJuYW1lQXR0cmlidXRlcyA9IFtVc2VyUG9vbEF0dHJpYnV0ZS5FTUFJTCwgVXNlclBvb2xBdHRyaWJ1dGUuUEhPTkVfTlVNQkVSXTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFsaWFzQXR0cmlidXRlcyA9IHByb3BzLnVzZXJuYW1lQWxpYXNBdHRyaWJ1dGVzO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAocHJvcHMubGFtYmRhVHJpZ2dlcnMpIHtcbiAgICAgIGZvciAoY29uc3QgdCBvZiBPYmplY3Qua2V5cyhwcm9wcy5sYW1iZGFUcmlnZ2VycykpIHtcbiAgICAgICAgY29uc3QgdHJpZ2dlciA9IHByb3BzLmxhbWJkYVRyaWdnZXJzW3RdO1xuICAgICAgICBpZiAodHJpZ2dlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5hZGRMYW1iZGFQZXJtaXNzaW9uKHRyaWdnZXIgYXMgbGFtYmRhLklGdW5jdGlvbiwgdCk7XG4gICAgICAgICAgKHRoaXMudHJpZ2dlcnMgYXMgYW55KVt0XSA9ICh0cmlnZ2VyIGFzIGxhbWJkYS5JRnVuY3Rpb24pLmZ1bmN0aW9uQXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdXNlclBvb2wgPSBuZXcgQ2ZuVXNlclBvb2wodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgdXNlclBvb2xOYW1lOiBwcm9wcy51c2VyUG9vbE5hbWUsXG4gICAgICB1c2VybmFtZUF0dHJpYnV0ZXMsXG4gICAgICBhbGlhc0F0dHJpYnV0ZXMsXG4gICAgICBhdXRvVmVyaWZpZWRBdHRyaWJ1dGVzOiBwcm9wcy5hdXRvVmVyaWZpZWRBdHRyaWJ1dGVzLFxuICAgICAgbGFtYmRhQ29uZmlnOiBMYXp5LmFueVZhbHVlKHsgcHJvZHVjZTogKCkgPT4gdGhpcy50cmlnZ2VycyB9KVxuICAgIH0pO1xuXG4gICAgdGhpcy51c2VyUG9vbElkID0gdXNlclBvb2wucmVmO1xuICAgIHRoaXMudXNlclBvb2xBcm4gPSB1c2VyUG9vbC5hdHRyQXJuO1xuXG4gICAgdGhpcy51c2VyUG9vbFByb3ZpZGVyTmFtZSA9IHVzZXJQb29sLmF0dHJQcm92aWRlck5hbWU7XG4gICAgdGhpcy51c2VyUG9vbFByb3ZpZGVyVXJsID0gdXNlclBvb2wuYXR0clByb3ZpZGVyVXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaCAnQ3JlYXRlIEF1dGggQ2hhbGxlbmdlJyB0cmlnZ2VyXG4gICAqIEdyYW50cyBhY2Nlc3MgZnJvbSBjb2duaXRvLWlkcC5hbWF6b25hd3MuY29tIHRvIHRoZSBsYW1iZGFcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29nbml0by9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNlci1wb29sLWxhbWJkYS1jcmVhdGUtYXV0aC1jaGFsbGVuZ2UuaHRtbFxuICAgKiBAcGFyYW0gZm4gdGhlIGxhbWJkYSBmdW5jdGlvbiB0byBhdHRhY2hcbiAgICovXG4gIHB1YmxpYyBhZGRDcmVhdGVBdXRoQ2hhbGxlbmdlVHJpZ2dlcihmbjogbGFtYmRhLklGdW5jdGlvbik6IHZvaWQge1xuICAgIHRoaXMuYWRkTGFtYmRhUGVybWlzc2lvbihmbiwgJ0NyZWF0ZUF1dGhDaGFsbGVuZ2UnKTtcbiAgICB0aGlzLnRyaWdnZXJzID0geyAuLi50aGlzLnRyaWdnZXJzLCBjcmVhdGVBdXRoQ2hhbGxlbmdlOiBmbi5mdW5jdGlvbkFybiB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaCAnQ3VzdG9tIE1lc3NhZ2UnIHRyaWdnZXJcbiAgICogR3JhbnRzIGFjY2VzcyBmcm9tIGNvZ25pdG8taWRwLmFtYXpvbmF3cy5jb20gdG8gdGhlIGxhbWJkYVxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2VyLXBvb2wtbGFtYmRhLWN1c3RvbS1tZXNzYWdlLmh0bWxcbiAgICogQHBhcmFtIGZuIHRoZSBsYW1iZGEgZnVuY3Rpb24gdG8gYXR0YWNoXG4gICAqL1xuICBwdWJsaWMgYWRkQ3VzdG9tTWVzc2FnZVRyaWdnZXIoZm46IGxhbWJkYS5JRnVuY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLmFkZExhbWJkYVBlcm1pc3Npb24oZm4sICdDdXN0b21NZXNzYWdlJyk7XG4gICAgdGhpcy50cmlnZ2VycyA9IHsgLi4udGhpcy50cmlnZ2VycywgY3VzdG9tTWVzc2FnZTogZm4uZnVuY3Rpb25Bcm4gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggJ0RlZmluZSBBdXRoIENoYWxsZW5nZScgdHJpZ2dlclxuICAgKiBHcmFudHMgYWNjZXNzIGZyb20gY29nbml0by1pZHAuYW1hem9uYXdzLmNvbSB0byB0aGUgbGFtYmRhXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8vbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzZXItcG9vbC1sYW1iZGEtZGVmaW5lLWF1dGgtY2hhbGxlbmdlLmh0bWxcbiAgICogQHBhcmFtIGZuIHRoZSBsYW1iZGEgZnVuY3Rpb24gdG8gYXR0YWNoXG4gICAqL1xuICBwdWJsaWMgYWRkRGVmaW5lQXV0aENoYWxsZW5nZVRyaWdnZXIoZm46IGxhbWJkYS5JRnVuY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLmFkZExhbWJkYVBlcm1pc3Npb24oZm4sICdEZWZpbmVBdXRoQ2hhbGxlbmdlJyk7XG4gICAgdGhpcy50cmlnZ2VycyA9IHsgLi4udGhpcy50cmlnZ2VycywgZGVmaW5lQXV0aENoYWxsZW5nZTogZm4uZnVuY3Rpb25Bcm4gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggJ1Bvc3QgQXV0aGVudGljYXRpb24nIHRyaWdnZXJcbiAgICogR3JhbnRzIGFjY2VzcyBmcm9tIGNvZ25pdG8taWRwLmFtYXpvbmF3cy5jb20gdG8gdGhlIGxhbWJkYVxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2VyLXBvb2wtbGFtYmRhLXBvc3QtYXV0aGVudGljYXRpb24uaHRtbFxuICAgKiBAcGFyYW0gZm4gdGhlIGxhbWJkYSBmdW5jdGlvbiB0byBhdHRhY2hcbiAgICovXG4gIHB1YmxpYyBhZGRQb3N0QXV0aGVudGljYXRpb25UcmlnZ2VyKGZuOiBsYW1iZGEuSUZ1bmN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5hZGRMYW1iZGFQZXJtaXNzaW9uKGZuLCAnUG9zdEF1dGhlbnRpY2F0aW9uJyk7XG4gICAgdGhpcy50cmlnZ2VycyA9IHsgLi4udGhpcy50cmlnZ2VycywgcG9zdEF1dGhlbnRpY2F0aW9uOiBmbi5mdW5jdGlvbkFybiB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaCAnUG9zdCBDb25maXJtYXRpb24nIHRyaWdnZXJcbiAgICogR3JhbnRzIGFjY2VzcyBmcm9tIGNvZ25pdG8taWRwLmFtYXpvbmF3cy5jb20gdG8gdGhlIGxhbWJkYVxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2VyLXBvb2wtbGFtYmRhLXBvc3QtY29uZmlybWF0aW9uLmh0bWxcbiAgICogQHBhcmFtIGZuIHRoZSBsYW1iZGEgZnVuY3Rpb24gdG8gYXR0YWNoXG4gICAqL1xuICBwdWJsaWMgYWRkUG9zdENvbmZpcm1hdGlvblRyaWdnZXIoZm46IGxhbWJkYS5JRnVuY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLmFkZExhbWJkYVBlcm1pc3Npb24oZm4sICdQb3N0Q29uZmlybWF0aW9uJyk7XG4gICAgdGhpcy50cmlnZ2VycyA9IHsgLi4udGhpcy50cmlnZ2VycywgcG9zdENvbmZpcm1hdGlvbjogZm4uZnVuY3Rpb25Bcm4gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggJ1ByZSBBdXRoZW50aWNhdGlvbicgdHJpZ2dlclxuICAgKiBHcmFudHMgYWNjZXNzIGZyb20gY29nbml0by1pZHAuYW1hem9uYXdzLmNvbSB0byB0aGUgbGFtYmRhXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8vbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzZXItcG9vbC1sYW1iZGEtcHJlLWF1dGhlbnRpY2F0aW9uLmh0bWxcbiAgICogQHBhcmFtIGZuIHRoZSBsYW1iZGEgZnVuY3Rpb24gdG8gYXR0YWNoXG4gICAqL1xuICBwdWJsaWMgYWRkUHJlQXV0aGVudGljYXRpb25UcmlnZ2VyKGZuOiBsYW1iZGEuSUZ1bmN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5hZGRMYW1iZGFQZXJtaXNzaW9uKGZuLCAnUHJlQXV0aGVudGljYXRpb24nKTtcbiAgICB0aGlzLnRyaWdnZXJzID0geyAuLi50aGlzLnRyaWdnZXJzLCBwcmVBdXRoZW50aWNhdGlvbjogZm4uZnVuY3Rpb25Bcm4gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggJ1ByZSBTaWduIFVwJyB0cmlnZ2VyXG4gICAqIEdyYW50cyBhY2Nlc3MgZnJvbSBjb2duaXRvLWlkcC5hbWF6b25hd3MuY29tIHRvIHRoZSBsYW1iZGFcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29nbml0by9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNlci1wb29sLWxhbWJkYS1wcmUtc2lnbi11cC5odG1sXG4gICAqIEBwYXJhbSBmbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIHRvIGF0dGFjaFxuICAgKi9cbiAgcHVibGljIGFkZFByZVNpZ25VcFRyaWdnZXIoZm46IGxhbWJkYS5JRnVuY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLmFkZExhbWJkYVBlcm1pc3Npb24oZm4sICdQcmVTaWduVXAnKTtcbiAgICB0aGlzLnRyaWdnZXJzID0geyAuLi50aGlzLnRyaWdnZXJzLCBwcmVTaWduVXA6IGZuLmZ1bmN0aW9uQXJuIH07XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoICdQcmUgVG9rZW4gR2VuZXJhdGlvbicgdHJpZ2dlclxuICAgKiBHcmFudHMgYWNjZXNzIGZyb20gY29nbml0by1pZHAuYW1hem9uYXdzLmNvbSB0byB0aGUgbGFtYmRhXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8vbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzZXItcG9vbC1sYW1iZGEtcHJlLXRva2VuLWdlbmVyYXRpb24uaHRtbFxuICAgKiBAcGFyYW0gZm4gdGhlIGxhbWJkYSBmdW5jdGlvbiB0byBhdHRhY2hcbiAgICovXG4gIHB1YmxpYyBhZGRQcmVUb2tlbkdlbmVyYXRpb25UcmlnZ2VyKGZuOiBsYW1iZGEuSUZ1bmN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5hZGRMYW1iZGFQZXJtaXNzaW9uKGZuLCAnUHJlVG9rZW5HZW5lcmF0aW9uJyk7XG4gICAgdGhpcy50cmlnZ2VycyA9IHsgLi4udGhpcy50cmlnZ2VycywgcHJlVG9rZW5HZW5lcmF0aW9uOiBmbi5mdW5jdGlvbkFybiB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaCAnVXNlciBNaWdyYXRpb24nIHRyaWdnZXJcbiAgICogR3JhbnRzIGFjY2VzcyBmcm9tIGNvZ25pdG8taWRwLmFtYXpvbmF3cy5jb20gdG8gdGhlIGxhbWJkYVxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2VyLXBvb2wtbGFtYmRhLW1pZ3JhdGUtdXNlci5odG1sXG4gICAqIEBwYXJhbSBmbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIHRvIGF0dGFjaFxuICAgKi9cbiAgcHVibGljIGFkZFVzZXJNaWdyYXRpb25UcmlnZ2VyKGZuOiBsYW1iZGEuSUZ1bmN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5hZGRMYW1iZGFQZXJtaXNzaW9uKGZuLCAnVXNlck1pZ3JhdGlvbicpO1xuICAgIHRoaXMudHJpZ2dlcnMgPSB7IC4uLnRoaXMudHJpZ2dlcnMsIHVzZXJNaWdyYXRpb246IGZuLmZ1bmN0aW9uQXJuIH07XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoICdWZXJpZnkgQXV0aCBDaGFsbGVuZ2UgUmVzcG9uc2UnIHRyaWdnZXJcbiAgICogR3JhbnRzIGFjY2VzcyBmcm9tIGNvZ25pdG8taWRwLmFtYXpvbmF3cy5jb20gdG8gdGhlIGxhbWJkYVxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2VyLXBvb2wtbGFtYmRhLXZlcmlmeS1hdXRoLWNoYWxsZW5nZS1yZXNwb25zZS5odG1sXG4gICAqIEBwYXJhbSBmbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIHRvIGF0dGFjaFxuICAgKi9cbiAgcHVibGljIGFkZFZlcmlmeUF1dGhDaGFsbGVuZ2VSZXNwb25zZVRyaWdnZXIoZm46IGxhbWJkYS5JRnVuY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLmFkZExhbWJkYVBlcm1pc3Npb24oZm4sICdWZXJpZnlBdXRoQ2hhbGxlbmdlUmVzcG9uc2UnKTtcbiAgICB0aGlzLnRyaWdnZXJzID0geyAuLi50aGlzLnRyaWdnZXJzLCB2ZXJpZnlBdXRoQ2hhbGxlbmdlUmVzcG9uc2U6IGZuLmZ1bmN0aW9uQXJuIH07XG4gIH1cblxuICBwcml2YXRlIGFkZExhbWJkYVBlcm1pc3Npb24oZm46IGxhbWJkYS5JRnVuY3Rpb24sIG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vcm1hbGl6ZSA9IG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpO1xuICAgIGZuLmFkZFBlcm1pc3Npb24oYCR7bm9ybWFsaXplfUNvZ25pdG9gLCB7XG4gICAgICBwcmluY2lwYWw6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnY29nbml0by1pZHAuYW1hem9uYXdzLmNvbScpLFxuICAgICAgc291cmNlQXJuOiB0aGlzLnVzZXJQb29sQXJuXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1wb29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidXNlci1wb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsOENBQWtHO0FBRWxHLHdDQUFxRTtBQUNyRSwyREFBa0Q7QUFFbEQ7Ozs7R0FJRztBQUNILElBQVksaUJBOEdYO0FBOUdELFdBQVksaUJBQWlCO0lBQzNCOztPQUVHO0lBQ0gsd0NBQW1CLENBQUE7SUFFbkI7Ozs7T0FJRztJQUNILDRDQUF1QixDQUFBO0lBRXZCOzs7T0FHRztJQUNILG9DQUFlLENBQUE7SUFFZjs7OztPQUlHO0lBQ0gsZ0RBQTJCLENBQUE7SUFFM0I7O09BRUc7SUFDSCxzQ0FBaUIsQ0FBQTtJQUVqQjs7OztPQUlHO0lBQ0gsOENBQXlCLENBQUE7SUFFekI7Ozs7O09BS0c7SUFDSCxzQ0FBaUIsQ0FBQTtJQUVqQjs7Ozs7T0FLRztJQUNILGdEQUEyQixDQUFBO0lBRTNCOzs7T0FHRztJQUNILGtDQUFhLENBQUE7SUFFYjs7O09BR0c7SUFDSCwwQ0FBcUIsQ0FBQTtJQUVyQjs7Ozs7T0FLRztJQUNILGtEQUE2QixDQUFBO0lBRTdCOzs7Ozs7T0FNRztJQUNILHdDQUFtQixDQUFBO0lBRW5COztPQUVHO0lBQ0gsOERBQXlDLENBQUE7SUFFekM7O09BRUc7SUFDSCx3Q0FBbUIsQ0FBQTtJQUVuQjs7T0FFRztJQUNILDBDQUFxQixDQUFBO0lBRXJCOzs7O09BSUc7SUFDSCw4Q0FBeUIsQ0FBQTtJQUV6Qjs7O09BR0c7SUFDSCx3Q0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBOUdXLGlCQUFpQixHQUFqQix5QkFBaUIsS0FBakIseUJBQWlCLFFBOEc1QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxVQW9CWDtBQXBCRCxXQUFZLFVBQVU7SUFDcEI7O09BRUc7SUFDSCxtREFBUSxDQUFBO0lBRVI7O09BRUc7SUFDSCw2Q0FBSyxDQUFBO0lBRUw7O09BRUc7SUFDSCw2Q0FBSyxDQUFBO0lBRUw7O09BRUc7SUFD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LEVBQUUsSUFBSSwwQkFBZ0IsQ0FBQywyQkFBMkIsRUFBRTtvQkFDM0QsVUFBVSxFQUFFO3dCQUNWLFlBQVksRUFBRSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFO3FCQUN0RDtpQkFDRixDQUFDO2dCQUNGLGNBQWMsRUFBRTtvQkFDZDs7Ozt1QkFJRztvQkFDSCxhQUFhLEVBQUUsSUFBSSx3QkFBYyxDQUFDO3dCQUNoQyxVQUFVLEVBQUU7NEJBQ1YsSUFBSSx5QkFBZSxDQUFDO2dDQUNsQixPQUFPLEVBQUUsQ0FBRSxhQUFhLENBQUU7Z0NBQzFCLFNBQVMsRUFBRSxDQUFFLEdBQUcsQ0FBRTs2QkFDbkIsQ0FBQzt5QkFDSDtxQkFDRixDQUFDO2lCQUNIO2FBQ0YsQ0FBQyxFQUFBLENBQUM7WUFDSCxPQUFPO2dCQUNMLFVBQVUsRUFBRSxpQkFBaUI7Z0JBQzdCLFlBQVksRUFBRSxPQUFPLENBQUMsT0FBTzthQUM5QixDQUFDO1NBQ0g7SUFDSCxDQUFDO0NBQ0Y7QUE3U0QsNEJBNlNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVJvbGUsIFBvbGljeURvY3VtZW50LCBQb2xpY3lTdGF0ZW1lbnQsIFJvbGUsIFNlcnZpY2VQcmluY2lwYWwgfSBmcm9tICdAYXdzLWNkay9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdAYXdzLWNkay9hd3MtbGFtYmRhJztcbmltcG9ydCB7IENvbnN0cnVjdCwgSVJlc291cmNlLCBMYXp5LCBSZXNvdXJjZSB9IGZyb20gJ0Bhd3MtY2RrL2NvcmUnO1xuaW1wb3J0IHsgQ2ZuVXNlclBvb2wgfSBmcm9tICcuL2NvZ25pdG8uZ2VuZXJhdGVkJztcblxuLyoqXG4gKiBTdGFuZGFyZCBhdHRyaWJ1dGVzXG4gKiBTcGVjaWZpZWQgZm9sbG93aW5nIHRoZSBPcGVuSUQgQ29ubmVjdCBzcGVjXG4gKiBAc2VlIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1N0YW5kYXJkQ2xhaW1zXG4gKi9cbmV4cG9ydCBlbnVtIFVzZXJQb29sQXR0cmlidXRlIHtcbiAgLyoqXG4gICAqIEVuZC1Vc2VyJ3MgcHJlZmVycmVkIHBvc3RhbCBhZGRyZXNzLlxuICAgKi9cbiAgQUREUkVTUyA9ICdhZGRyZXNzJyxcblxuICAvKipcbiAgICogRW5kLVVzZXIncyBiaXJ0aGRheSwgcmVwcmVzZW50ZWQgYXMgYW4gSVNPIDg2MDE6MjAwNCBbSVNPODYwMeKAkTIwMDRdIFlZWVktTU0tREQgZm9ybWF0LlxuICAgKiBUaGUgeWVhciBNQVkgYmUgMDAwMCwgaW5kaWNhdGluZyB0aGF0IGl0IGlzIG9taXR0ZWQuXG4gICAqIFRvIHJlcHJlc2VudCBvbmx5IHRoZSB5ZWFyLCBZWVlZIGZvcm1hdCBpcyBhbGxvd2VkLlxuICAgKi9cbiAgQklSVEhEQVRFID0gJ2JpcnRoZGF0ZScsXG5cbiAgLyoqXG4gICAqIEVuZC1Vc2VyJ3MgcHJlZmVycmVkIGUtbWFpbCBhZGRyZXNzLlxuICAgKiBJdHMgdmFsdWUgTVVTVCBjb25mb3JtIHRvIHRoZSBSRkMgNTMyMiBbUkZDNTMyMl0gYWRkci1zcGVjIHN5bnRheC5cbiAgICovXG4gIEVNQUlMID0gJ2VtYWlsJyxcblxuICAvKipcbiAgICogU3VybmFtZShzKSBvciBsYXN0IG5hbWUocykgb2YgdGhlIEVuZC1Vc2VyLlxuICAgKiBOb3RlIHRoYXQgaW4gc29tZSBjdWx0dXJlcywgcGVvcGxlIGNhbiBoYXZlIG11bHRpcGxlIGZhbWlseSBuYW1lcyBvciBubyBmYW1pbHkgbmFtZTtcbiAgICogYWxsIGNhbiBiZSBwcmVzZW50LCB3aXRoIHRoZSBuYW1lcyBiZWluZyBzZXBhcmF0ZWQgYnkgc3BhY2UgY2hhcmFjdGVycy5cbiAgICovXG4gIEZBTUlMWV9OQU1FID0gJ2ZhbWlseV9uYW1lJyxcblxuICAvKipcbiAgICogRW5kLVVzZXIncyBnZW5kZXIuXG4gICAqL1xuICBHRU5ERVIgPSAnZ2VuZGVyJyxcblxuICAvKipcbiAgICogR2l2ZW4gbmFtZShzKSBvciBmaXJzdCBuYW1lKHMpIG9mIHRoZSBFbmQtVXNlci5cbiAgICogTm90ZSB0aGF0IGluIHNvbWUgY3VsdHVyZXMsIHBlb3BsZSBjYW4gaGF2ZSBtdWx0aXBsZSBnaXZlbiBuYW1lcztcbiAgICogYWxsIGNhbiBiZSBwcmVzZW50LCB3aXRoIHRoZSBuYW1lcyBiZWluZyBzZXBhcmF0ZWQgYnkgc3BhY2UgY2hhcmFjdGVycy5cbiAgICovXG4gIEdJVkVOX05BTUUgPSAnZ2l2ZW5fbmFtZScsXG5cbiAgLyoqXG4gICAqIEVuZC1Vc2VyJ3MgbG9jYWxlLCByZXByZXNlbnRlZCBhcyBhIEJDUDQ3IFtSRkM1NjQ2XSBsYW5ndWFnZSB0YWcuXG4gICAqIFRoaXMgaXMgdHlwaWNhbGx5IGFuIElTTyA2MzktMSBBbHBoYS0yIFtJU082MznigJExXSBsYW5ndWFnZSBjb2RlIGluIGxvd2VyY2FzZVxuICAgKiBhbmQgYW4gSVNPIDMxNjYtMSBBbHBoYS0yIFtJU08zMTY24oCRMV0gY291bnRyeSBjb2RlIGluIHVwcGVyY2FzZSwgc2VwYXJhdGVkIGJ5IGEgZGFzaC5cbiAgICogRm9yIGV4YW1wbGUsIGVuLVVTIG9yIGZyLUNBLlxuICAgKi9cbiAgTE9DQUxFID0gJ2xvY2FsZScsXG5cbiAgLyoqXG4gICAqIE1pZGRsZSBuYW1lKHMpIG9mIHRoZSBFbmQtVXNlci5cbiAgICogTm90ZSB0aGF0IGluIHNvbWUgY3VsdHVyZXMsIHBlb3BsZSBjYW4gaGF2ZSBtdWx0aXBsZSBtaWRkbGUgbmFtZXM7XG4gICAqIGFsbCBjYW4gYmUgcHJlc2VudCwgd2l0aCB0aGUgbmFtZXMgYmVpbmcgc2VwYXJhdGVkIGJ5IHNwYWNlIGNoYXJhY3RlcnMuXG4gICAqIEFsc28gbm90ZSB0aGF0IGluIHNvbWUgY3VsdHVyZXMsIG1pZGRsZSBuYW1lcyBhcmUgbm90IHVzZWQuXG4gICAqL1xuICBNSURETEVfTkFNRSA9ICdtaWRkbGVfbmFtZScsXG5cbiAgLyoqXG4gICAqIEVuZC1Vc2VyJ3MgZnVsbCBuYW1lIGluIGRpc3BsYXlhYmxlIGZvcm0gaW5jbHVkaW5nIGFsbCBuYW1lIHBhcnRzLFxuICAgKiBwb3NzaWJseSBpbmNsdWRpbmcgdGl0bGVzIGFuZCBzdWZmaXhlcywgb3JkZXJlZCBhY2NvcmRpbmcgdG8gdGhlIEVuZC1Vc2VyJ3MgbG9jYWxlIGFuZCBwcmVmZXJlbmNlcy5cbiAgICovXG4gIE5BTUUgPSAnbmFtZScsXG5cbiAgLyoqXG4gICAqIENhc3VhbCBuYW1lIG9mIHRoZSBFbmQtVXNlciB0aGF0IG1heSBvciBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBnaXZlbl9uYW1lLlxuICAgKiBGb3IgaW5zdGFuY2UsIGEgbmlja25hbWUgdmFsdWUgb2YgTWlrZSBtaWdodCBiZSByZXR1cm5lZCBhbG9uZ3NpZGUgYSBnaXZlbl9uYW1lIHZhbHVlIG9mIE1pY2hhZWwuXG4gICAqL1xuICBOSUNLTkFNRSA9ICduaWNrbmFtZScsXG5cbiAgLyoqXG4gICAqIEVuZC1Vc2VyJ3MgcHJlZmVycmVkIHRlbGVwaG9uZSBudW1iZXIuXG4gICAqIEUuMTY0IFtFLjE2NF0gaXMgUkVDT01NRU5ERUQgYXMgdGhlIGZvcm1hdCBvZiB0aGlzIENsYWltLCBmb3IgZXhhbXBsZSwgKzEgKDQyNSkgNTU1LTEyMTIgb3IgKzU2ICgyKSA2ODcgMjQwMC5cbiAgICogSWYgdGhlIHBob25lIG51bWJlciBjb250YWlucyBhbiBleHRlbnNpb24sIGl0IGlzIFJFQ09NTUVOREVEIHRoYXQgdGhlIGV4dGVuc2lvbiBiZSByZXByZXNlbnRlZCB1c2luZyB0aGVcbiAgICogUkZDIDM5NjYgW1JGQzM5NjZdIGV4dGVuc2lvbiBzeW50YXgsIGZvciBleGFtcGxlLCArMSAoNjA0KSA1NTUtMTIzNDtleHQ9NTY3OC5cbiAgICovXG4gIFBIT05FX05VTUJFUiA9ICdwaG9uZV9udW1iZXInLFxuXG4gIC8qKlxuICAgKiBVUkwgb2YgdGhlIEVuZC1Vc2VyJ3MgcHJvZmlsZSBwaWN0dXJlLlxuICAgKiBUaGlzIFVSTCBNVVNUIHJlZmVyIHRvIGFuIGltYWdlIGZpbGUgKGZvciBleGFtcGxlLCBhIFBORywgSlBFRywgb3IgR0lGIGltYWdlIGZpbGUpLFxuICAgKiByYXRoZXIgdGhhbiB0byBhIFdlYiBwYWdlIGNvbnRhaW5pbmcgYW4gaW1hZ2UuXG4gICAqIE5vdGUgdGhhdCB0aGlzIFVSTCBTSE9VTEQgc3BlY2lmaWNhbGx5IHJlZmVyZW5jZSBhIHByb2ZpbGUgcGhvdG8gb2YgdGhlIEVuZC1Vc2VyXG4gICAqIHN1aXRhYmxlIGZvciBkaXNwbGF5aW5nIHdoZW4gZGVzY3JpYmluZyB0aGUgRW5kLVVzZXIsIHJhdGhlciB0aGFuIGFuIGFyYml0cmFyeSBwaG90byB0YWtlbiBieSB0aGUgRW5kLVVzZXJcbiAgICovXG4gIFBJQ1RVUkUgPSAncGljdHVyZScsXG5cbiAgLyoqXG4gICAqIFNob3J0aGFuZCBuYW1lIGJ5IHdoaWNoIHRoZSBFbmQtVXNlciB3aXNoZXMgdG8gYmUgcmVmZXJyZWQgdG8uXG4gICAqL1xuICBQUkVGRVJSRURfVVNFUk5BTUUgPSAncHJlZmVycmVkX3VzZXJuYW1lJyxcblxuICAvKipcbiAgICogVVJMIG9mIHRoZSBFbmQtVXNlcidzIHByb2ZpbGUgcGFnZS4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgV2ViIHBhZ2UgU0hPVUxEIGJlIGFib3V0IHRoZSBFbmQtVXNlci5cbiAgICovXG4gIFBST0ZJTEUgPSAncHJvZmlsZScsXG5cbiAgLyoqXG4gICAqIFRoZSBFbmQtVXNlcidzIHRpbWUgem9uZVxuICAgKi9cbiAgVElNRVpPTkUgPSAnem9uZWluZm8nLFxuXG4gIC8qKlxuICAgKiBUaW1lIHRoZSBFbmQtVXNlcidzIGluZm9ybWF0aW9uIHdhcyBsYXN0IHVwZGF0ZWQuXG4gICAqIEl0cyB2YWx1ZSBpcyBhIEpTT04gbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgZnJvbSAxOTcwLTAxLTAxVDA6MDowWlxuICAgKiBhcyBtZWFzdXJlZCBpbiBVVEMgdW50aWwgdGhlIGRhdGUvdGltZS5cbiAgICovXG4gIFVQREFURURfQVQgPSAndXBkYXRlZF9hdCcsXG5cbiAgLyoqXG4gICAqIFVSTCBvZiB0aGUgRW5kLVVzZXIncyBXZWIgcGFnZSBvciBibG9nLlxuICAgKiBUaGlzIFdlYiBwYWdlIFNIT1VMRCBjb250YWluIGluZm9ybWF0aW9uIHB1Ymxpc2hlZCBieSB0aGUgRW5kLVVzZXIgb3IgYW4gb3JnYW5pemF0aW9uIHRoYXQgdGhlIEVuZC1Vc2VyIGlzIGFmZmlsaWF0ZWQgd2l0aC5cbiAgICovXG4gIFdFQlNJVEUgPSAnd2Vic2l0ZSdcbn1cblxuLyoqXG4gKiBNZXRob2RzIG9mIHVzZXIgc2lnbi1pblxuICovXG5leHBvcnQgZW51bSBTaWduSW5UeXBlIHtcbiAgLyoqXG4gICAqIEVuZC11c2VyIHdpbGwgc2lnbiBpbiB3aXRoIGEgdXNlcm5hbWUsIHdpdGggb3B0aW9uYWwgYWxpYXNlc1xuICAgKi9cbiAgVVNFUk5BTUUsXG5cbiAgLyoqXG4gICAqIEVuZC11c2VyIHdpbGwgc2lnbiBpbiB1c2luZyBhbiBlbWFpbCBhZGRyZXNzXG4gICAqL1xuICBFTUFJTCxcblxuICAvKipcbiAgICogRW5kLXVzZXIgd2lsbCBzaWduIGluIHVzaW5nIGEgcGhvbmUgbnVtYmVyXG4gICAqL1xuICBQSE9ORSxcblxuICAvKipcbiAgICogRW5kLXVzZXIgd2lsbCBzaWduIGluIHVzaW5nIGVpdGhlciBhbiBlbWFpbCBhZGRyZXNzIG9yIHBob25lIG51bWJlclxuICAgKi9cbiAgRU1BSUxfT1JfUEhPTkVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyUG9vbFRyaWdnZXJzIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYXV0aGVudGljYXRpb24gY2hhbGxlbmdlLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2VyLXBvb2wtbGFtYmRhLWNyZWF0ZS1hdXRoLWNoYWxsZW5nZS5odG1sXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVBdXRoQ2hhbGxlbmdlPzogbGFtYmRhLklGdW5jdGlvbjtcblxuICAvKipcbiAgICogQSBjdXN0b20gTWVzc2FnZSBBV1MgTGFtYmRhIHRyaWdnZXIuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8vbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzZXItcG9vbC1sYW1iZGEtY3VzdG9tLW1lc3NhZ2UuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tTWVzc2FnZT86IGxhbWJkYS5JRnVuY3Rpb247XG5cbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29nbml0by9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNlci1wb29sLWxhbWJkYS1kZWZpbmUtYXV0aC1jaGFsbGVuZ2UuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgZGVmaW5lQXV0aENoYWxsZW5nZT86IGxhbWJkYS5JRnVuY3Rpb247XG5cbiAgLyoqXG4gICAqIEEgcG9zdC1hdXRoZW50aWNhdGlvbiBBV1MgTGFtYmRhIHRyaWdnZXIuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8vbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzZXItcG9vbC1sYW1iZGEtcG9zdC1hdXRoZW50aWNhdGlvbi5odG1sXG4gICAqL1xuICByZWFkb25seSBwb3N0QXV0aGVudGljYXRpb24/OiBsYW1iZGEuSUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBBIHBvc3QtY29uZmlybWF0aW9uIEFXUyBMYW1iZGEgdHJpZ2dlci5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29nbml0by9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNlci1wb29sLWxhbWJkYS1wb3N0LWNvbmZpcm1hdGlvbi5odG1sXG4gICAqL1xuICByZWFkb25seSBwb3N0Q29uZmlybWF0aW9uPzogbGFtYmRhLklGdW5jdGlvbjtcblxuICAvKipcbiAgICogQSBwcmUtYXV0aGVudGljYXRpb24gQVdTIExhbWJkYSB0cmlnZ2VyLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2VyLXBvb2wtbGFtYmRhLXByZS1hdXRoZW50aWNhdGlvbi5odG1sXG4gICAqL1xuICByZWFkb25seSBwcmVBdXRoZW50aWNhdGlvbj86IGxhbWJkYS5JRnVuY3Rpb247XG5cbiAgLyoqXG4gICAqIEEgcHJlLXJlZ2lzdHJhdGlvbiBBV1MgTGFtYmRhIHRyaWdnZXIuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8vbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzZXItcG9vbC1sYW1iZGEtcHJlLXNpZ24tdXAuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlU2lnblVwPzogbGFtYmRhLklGdW5jdGlvbjtcblxuICAvKipcbiAgICogQSBwcmUtdG9rZW4tZ2VuZXJhdGlvbiBBV1MgTGFtYmRhIHRyaWdnZXIuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8vbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzZXItcG9vbC1sYW1iZGEtcHJlLXRva2VuLWdlbmVyYXRpb24uaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlVG9rZW5HZW5lcmF0aW9uPzogbGFtYmRhLklGdW5jdGlvbjtcblxuICAvKipcbiAgICogQSB1c2VyLW1pZ3JhdGlvbiBBV1MgTGFtYmRhIHRyaWdnZXIuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8vbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzZXItcG9vbC1sYW1iZGEtbWlncmF0ZS11c2VyLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJNaWdyYXRpb24/OiBsYW1iZGEuSUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBWZXJpZmllcyB0aGUgYXV0aGVudGljYXRpb24gY2hhbGxlbmdlIHJlc3BvbnNlLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2VyLXBvb2wtbGFtYmRhLXZlcmlmeS1hdXRoLWNoYWxsZW5nZS1yZXNwb25zZS5odG1sXG4gICAqL1xuICByZWFkb25seSB2ZXJpZnlBdXRoQ2hhbGxlbmdlUmVzcG9uc2U/OiBsYW1iZGEuSUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBJbmRleCBzaWduYXR1cmVcbiAgICovXG4gIFt0cmlnZ2VyOiBzdHJpbmddOiBsYW1iZGEuSUZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoZSBlbWFpbCB2ZXJpZmljYXRpb24gc3R5bGVcbiAqL1xuZXhwb3J0IGVudW0gVmVyaWZpY2F0aW9uRW1haWxTdHlsZSB7XG4gIC8qKiBWZXJpZnkgZW1haWwgdmlhIGNvZGUgKi9cbiAgQ09ERSA9ICdDT05GSVJNX1dJVEhfQ09ERScsXG4gIC8qKiBWZXJpZnkgZW1haWwgdmlhIGxpbmsgKi9cbiAgTElOSyA9ICdDT05GSVJNX1dJVEhfTElOSycsXG59XG5cbi8qKlxuICogVXNlciBwb29sIGNvbmZpZ3VyYXRpb24gZm9yIHVzZXIgc2VsZiBzaWduIHVwLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJWZXJpZmljYXRpb25Db25maWcge1xuICAvKipcbiAgICogVGhlIGVtYWlsIHN1YmplY3QgdGVtcGxhdGUgZm9yIHRoZSB2ZXJpZmljYXRpb24gZW1haWwgc2VudCB0byB0aGUgdXNlciB1cG9uIHNpZ24gdXAuXG4gICAqIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29nbml0by9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvY29nbml0by11c2VyLXBvb2wtc2V0dGluZ3MtbWVzc2FnZS10ZW1wbGF0ZXMuaHRtbCB0b1xuICAgKiBsZWFybiBtb3JlIGFib3V0IG1lc3NhZ2UgdGVtcGxhdGVzLlxuICAgKiBAZGVmYXVsdCAnVmVyaWZ5IHlvdXIgbmV3IGFjY291bnQnXG4gICAqL1xuICByZWFkb25seSBlbWFpbFN1YmplY3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBlbWFpbCBib2R5IHRlbXBsYXRlIGZvciB0aGUgdmVyaWZpY2F0aW9uIGVtYWlsIHNlbnQgdG8gdGhlIHVzZXIgdXBvbiBzaWduIHVwLlxuICAgKiBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8vbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2NvZ25pdG8tdXNlci1wb29sLXNldHRpbmdzLW1lc3NhZ2UtdGVtcGxhdGVzLmh0bWwgdG9cbiAgICogbGVhcm4gbW9yZSBhYm91dCBtZXNzYWdlIHRlbXBsYXRlcy5cbiAgICogQGRlZmF1bHQgJ0hlbGxvIHt1c2VybmFtZX0sIFlvdXIgdmVyaWZpY2F0aW9uIGNvZGUgaXMgeyMjIyN9J1xuICAgKi9cbiAgcmVhZG9ubHkgZW1haWxCb2R5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbWFpbHMgY2FuIGJlIHZlcmlmaWVkIGVpdGhlciB1c2luZyBhIGNvZGUgb3IgYSBsaW5rLlxuICAgKiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9jb2duaXRvLXVzZXItcG9vbC1zZXR0aW5ncy1lbWFpbC12ZXJpZmljYXRpb24tbWVzc2FnZS1jdXN0b21pemF0aW9uLmh0bWxcbiAgICogQGRlZmF1bHQgVmVyaWZpY2F0aW9uRW1haWxTdHlsZS5DT0RFXG4gICAqL1xuICByZWFkb25seSBlbWFpbFN0eWxlPzogVmVyaWZpY2F0aW9uRW1haWxTdHlsZTtcblxuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgdGVtcGxhdGUgZm9yIHRoZSB2ZXJpZmljYXRpb24gU01TIHNlbnQgdG8gdGhlIHVzZXIgdXBvbiBzaWduIHVwLlxuICAgKiBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8vbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2NvZ25pdG8tdXNlci1wb29sLXNldHRpbmdzLW1lc3NhZ2UtdGVtcGxhdGVzLmh0bWwgdG9cbiAgICogbGVhcm4gbW9yZSBhYm91dCBtZXNzYWdlIHRlbXBsYXRlcy5cbiAgICogQGRlZmF1bHQgJ1RoZSB2ZXJpZmljYXRpb24gY29kZSB0byB5b3VyIG5ldyBhY2NvdW50IGlzIHsjIyMjfSdcbiAgICovXG4gIHJlYWRvbmx5IHNtc01lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVXNlciBwb29sIGNvbmZpZ3VyYXRpb24gd2hlbiBhZG1pbmlzdHJhdG9ycyBzaWduIHVzZXJzIHVwLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJJbnZpdGF0aW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB0byB0aGUgZW1haWwgc3ViamVjdCB0aGF0IGlzIHNlbnQgdG8gdGhlIHVzZXIgd2hlbiBhbiBhZG1pbmlzdHJhdG9yIHNpZ25zIHRoZW0gdXAgdG8gdGhlIHVzZXIgcG9vbC5cbiAgICogQGRlZmF1bHQgJ1lvdXIgdGVtcG9yYXJ5IHBhc3N3b3JkJ1xuICAgKi9cbiAgcmVhZG9ubHkgZW1haWxTdWJqZWN0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdG8gdGhlIGVtYWlsIGJvZHkgdGhhdCBpcyBzZW50IHRvIHRoZSB1c2VyIHdoZW4gYW4gYWRtaW5pc3RyYXRvciBzaWducyB0aGVtIHVwIHRvIHRoZSB1c2VyIHBvb2wuXG4gICAqIEBkZWZhdWx0ICdZb3VyIHVzZXJuYW1lIGlzIHt1c2VybmFtZX0gYW5kIHRlbXBvcmFyeSBwYXNzd29yZCBpcyB7IyMjI30uJ1xuICAgKi9cbiAgcmVhZG9ubHkgZW1haWxCb2R5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdG8gdGhlIFNNUyBtZXNzYWdlIHRoYXQgaXMgc2VudCB0byB0aGUgdXNlciB3aGVuIGFuIGFkbWluaXN0cmF0b3Igc2lnbnMgdGhlbSB1cCB0byB0aGUgdXNlciBwb29sLlxuICAgKiBAZGVmYXVsdCAnWW91ciB1c2VybmFtZSBpcyB7dXNlcm5hbWV9IGFuZCB0ZW1wb3JhcnkgcGFzc3dvcmQgaXMgeyMjIyN9J1xuICAgKi9cbiAgcmVhZG9ubHkgc21zTWVzc2FnZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFVzZXJQb29sIGNvbnN0cnVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQb29sUHJvcHMge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgdXNlciBwb29sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbmFtZSBieSBDbG91ZEZvcm1hdGlvbiBhdCBkZXBsb3kgdGltZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlclBvb2xOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHNlbGYgc2lnbiB1cCBzaG91bGQgYmUgZW5hYmxlZC4gVGhpcyBjYW4gYmUgZnVydGhlciBjb25maWd1cmVkIHZpYSB0aGUgYHNlbGZTaWduVXBgIHByb3BlcnR5LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VsZlNpZ25VcEVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGFyb3VuZCB1c2VycyBzaWduaW5nIHRoZW1zZWx2ZXMgdXAgdG8gdGhlIHVzZXIgcG9vbC5cbiAgICogRW5hYmxlIG9yIGRpc2FibGUgc2VsZiBzaWduLXVwIHZpYSB0aGUgYHNlbGZTaWduVXBFbmFibGVkYCBwcm9wZXJ0eS5cbiAgICogQGRlZmF1bHQgLSBzZWUgZGVmYXVsdHMgaW4gVXNlclZlcmlmaWNhdGlvbkNvbmZpZ1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlclZlcmlmaWNhdGlvbj86IFVzZXJWZXJpZmljYXRpb25Db25maWc7XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gYXJvdW5kIGFkbWlucyBzaWduaW5nIHVwIHVzZXJzIGludG8gYSB1c2VyIHBvb2wuXG4gICAqIEBkZWZhdWx0IC0gc2VlIGRlZmF1bHRzIGluIFVzZXJJbnZpdGF0aW9uQ29uZmlnXG4gICAqL1xuICByZWFkb25seSB1c2VySW52aXRhdGlvbj86IFVzZXJJbnZpdGF0aW9uQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgdGhhdCBDb2duaXRvIHdpbGwgYXNzdW1lIHdoaWxlIHNlbmRpbmcgU01TIG1lc3NhZ2VzLlxuICAgKiBAZGVmYXVsdCAtIGEgbmV3IElBTSByb2xlIGlzIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHNtc1JvbGU/OiBJUm9sZTtcblxuICAvKipcbiAgICogVGhlICdFeHRlcm5hbElkJyB0aGF0IENvZ25pdG8gc2VydmljZSBtdXN0IHVzaW5nIHdoZW4gYXNzdW1pbmcgdGhlIGBzbXNSb2xlYCwgaWYgdGhlIHJvbGUgaXMgcmVzdHJpY3RlZCB3aXRoIGFuICdzdHM6RXh0ZXJuYWxJZCcgY29uZGl0aW9uYWwuXG4gICAqIExlYXJuIG1vcmUgYWJvdXQgRXh0ZXJuYWxJZCBoZXJlIC0gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL2lkX3JvbGVzX2NyZWF0ZV9mb3ItdXNlcl9leHRlcm5hbGlkLmh0bWxcbiAgICpcbiAgICogVGhpcyBwcm9wZXJ0eSB3aWxsIGJlIGlnbm9yZWQgaWYgYHNtc1JvbGVgIGlzIG5vdCBzcGVjaWZpZWQuXG4gICAqIEBkZWZhdWx0IC0gTm8gZXh0ZXJuYWwgaWQgd2lsbCBiZSBjb25maWd1cmVkXG4gICAqL1xuICByZWFkb25seSBzbXNSb2xlRXh0ZXJuYWxJZD86IHN0cmluZztcblxuICAvKipcbiAgICogTWV0aG9kIHVzZWQgZm9yIHVzZXIgcmVnaXN0cmF0aW9uICYgc2lnbiBpbi5cbiAgICogQWxsb3dzIGVpdGhlciB1c2VybmFtZSB3aXRoIGFsaWFzZXMgT1Igc2lnbiBpbiB3aXRoIGVtYWlsLCBwaG9uZSwgb3IgYm90aC5cbiAgICpcbiAgICogQGRlZmF1bHQgU2lnbkluVHlwZS5Vc2VybmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc2lnbkluVHlwZT86IFNpZ25JblR5cGU7XG5cbiAgLyoqXG4gICAqIEF0dHJpYnV0ZXMgdG8gYWxsb3cgYXMgdXNlcm5hbWUgYWxpYXMuXG4gICAqIE9ubHkgdmFsaWQgaWYgc2lnbkluVHlwZSBpcyBVU0VSTkFNRVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGFsaWFzLlxuICAgKi9cbiAgcmVhZG9ubHkgdXNlcm5hbWVBbGlhc0F0dHJpYnV0ZXM/OiBVc2VyUG9vbEF0dHJpYnV0ZVtdO1xuXG4gIC8qKlxuICAgKiBBdHRyaWJ1dGVzIHdoaWNoIENvZ25pdG8gd2lsbCBhdXRvbWF0aWNhbGx5IHNlbmQgYSB2ZXJpZmljYXRpb24gbWVzc2FnZSB0by5cbiAgICogTXVzdCBiZSBlaXRoZXIgRU1BSUwsIFBIT05FLCBvciBib3RoLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGF1dG8gdmVyaWZpY2F0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0b1ZlcmlmaWVkQXR0cmlidXRlcz86IFVzZXJQb29sQXR0cmlidXRlW107XG5cbiAgLyoqXG4gICAqIExhbWJkYSBmdW5jdGlvbnMgdG8gdXNlIGZvciBzdXBwb3J0ZWQgQ29nbml0byB0cmlnZ2Vycy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBMYW1iZGEgdHJpZ2dlcnMuXG4gICAqL1xuICByZWFkb25seSBsYW1iZGFUcmlnZ2Vycz86IFVzZXJQb29sVHJpZ2dlcnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclBvb2xBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiBhbiBleGlzdGluZyB1c2VyIHBvb2xcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJQb29sSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgaW1wb3J0ZWQgdXNlciBwb29sXG4gICAqL1xuICByZWFkb25seSB1c2VyUG9vbEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvdmlkZXIgbmFtZSBvZiB0aGUgaW1wb3J0ZWQgdXNlciBwb29sXG4gICAqL1xuICByZWFkb25seSB1c2VyUG9vbFByb3ZpZGVyTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVVJMIG9mIHRoZSBpbXBvcnRlZCB1c2VyIHBvb2xcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJQb29sUHJvdmlkZXJVcmw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVXNlclBvb2wgZXh0ZW5kcyBJUmVzb3VyY2Uge1xuICAvKipcbiAgICogVGhlIHBoeXNpY2FsIElEIG9mIHRoaXMgdXNlciBwb29sIHJlc291cmNlXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJQb29sSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGlzIHVzZXIgcG9vbCByZXNvdXJjZVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB1c2VyUG9vbEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvdmlkZXIgbmFtZSBvZiB0aGlzIHVzZXIgcG9vbCByZXNvdXJjZVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB1c2VyUG9vbFByb3ZpZGVyTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvdmlkZXIgVVJMIG9mIHRoaXMgdXNlciBwb29sIHJlc291cmNlXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJQb29sUHJvdmlkZXJVcmw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZWZpbmUgYSBDb2duaXRvIFVzZXIgUG9vbFxuICovXG5leHBvcnQgY2xhc3MgVXNlclBvb2wgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElVc2VyUG9vbCB7XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgdXNlciBwb29sIHJlc291cmNlXG4gICAqIEBwYXJhbSBzY29wZSBQYXJlbnQgY29uc3RydWN0XG4gICAqIEBwYXJhbSBpZCBDb25zdHJ1Y3QgSURcbiAgICogQHBhcmFtIGF0dHJzIEltcG9ydGVkIHVzZXIgcG9vbCBwcm9wZXJ0aWVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Vc2VyUG9vbEF0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IFVzZXJQb29sQXR0cmlidXRlcyk6IElVc2VyUG9vbCB7XG4gICAgLyoqXG4gICAgICogRGVmaW5lIGEgdXNlciBwb29sIHdoaWNoIGhhcyBiZWVuIGRlY2xhcmVkIGluIGFub3RoZXIgc3RhY2tcbiAgICAgKi9cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElVc2VyUG9vbCB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdXNlclBvb2xJZCA9IGF0dHJzLnVzZXJQb29sSWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdXNlclBvb2xBcm4gPSBhdHRycy51c2VyUG9vbEFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbFByb3ZpZGVyTmFtZSA9IGF0dHJzLnVzZXJQb29sUHJvdmlkZXJOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHVzZXJQb29sUHJvdmlkZXJVcmwgPSBhdHRycy51c2VyUG9vbFByb3ZpZGVyVXJsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHBoeXNpY2FsIElEIG9mIHRoaXMgdXNlciBwb29sIHJlc291cmNlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlclBvb2xJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSB1c2VyIHBvb2xcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2VyIHBvb2wgcHJvdmlkZXIgbmFtZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVzZXJQb29sUHJvdmlkZXJOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZXIgcG9vbCBwcm92aWRlciBVUkxcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbFByb3ZpZGVyVXJsOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSB0cmlnZ2VyczogQ2ZuVXNlclBvb2wuTGFtYmRhQ29uZmlnUHJvcGVydHkgPSB7IH07XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFVzZXJQb29sUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBsZXQgYWxpYXNBdHRyaWJ1dGVzOiBVc2VyUG9vbEF0dHJpYnV0ZVtdIHwgdW5kZWZpbmVkO1xuICAgIGxldCB1c2VybmFtZUF0dHJpYnV0ZXM6IFVzZXJQb29sQXR0cmlidXRlW10gfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAocHJvcHMudXNlcm5hbWVBbGlhc0F0dHJpYnV0ZXMgIT0gbnVsbCAmJiBwcm9wcy5zaWduSW5UeXBlICE9PSBTaWduSW5UeXBlLlVTRVJOQU1FKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCd1c2VybmFtZUFsaWFzQXR0cmlidXRlcycgY2FuIG9ubHkgYmUgc2V0IHdpdGggYSBzaWduSW5UeXBlIG9mICdVU0VSTkFNRSdgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMudXNlcm5hbWVBbGlhc0F0dHJpYnV0ZXNcbiAgICAgICYmICFwcm9wcy51c2VybmFtZUFsaWFzQXR0cmlidXRlcy5ldmVyeShhID0+IHtcbiAgICAgICAgcmV0dXJuIGEgPT09IFVzZXJQb29sQXR0cmlidXRlLkVNQUlMIHx8IGEgPT09IFVzZXJQb29sQXR0cmlidXRlLlBIT05FX05VTUJFUiB8fCBhID09PSBVc2VyUG9vbEF0dHJpYnV0ZS5QUkVGRVJSRURfVVNFUk5BTUU7XG4gICAgICB9KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAndXNlcm5hbWVBbGlhc0F0dHJpYnV0ZXMnIGNhbiBvbmx5IGluY2x1ZGUgRU1BSUwsIFBIT05FX05VTUJFUiwgb3IgUFJFRkVSUkVEX1VTRVJOQU1FYCk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmF1dG9WZXJpZmllZEF0dHJpYnV0ZXNcbiAgICAgICYmICFwcm9wcy5hdXRvVmVyaWZpZWRBdHRyaWJ1dGVzLmV2ZXJ5KGEgPT4gYSA9PT0gVXNlclBvb2xBdHRyaWJ1dGUuRU1BSUwgfHwgYSA9PT0gVXNlclBvb2xBdHRyaWJ1dGUuUEhPTkVfTlVNQkVSKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnYXV0b1ZlcmlmaWVkQXR0cmlidXRlcycgY2FuIG9ubHkgaW5jbHVkZSBFTUFJTCBvciBQSE9ORV9OVU1CRVJgKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHByb3BzLnNpZ25JblR5cGUpIHtcbiAgICAgIGNhc2UgU2lnbkluVHlwZS5VU0VSTkFNRTpcbiAgICAgICAgYWxpYXNBdHRyaWJ1dGVzID0gcHJvcHMudXNlcm5hbWVBbGlhc0F0dHJpYnV0ZXM7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNpZ25JblR5cGUuRU1BSUw6XG4gICAgICAgIHVzZXJuYW1lQXR0cmlidXRlcyA9IFtVc2VyUG9vbEF0dHJpYnV0ZS5FTUFJTF07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNpZ25JblR5cGUuUEhPTkU6XG4gICAgICAgIHVzZXJuYW1lQXR0cmlidXRlcyA9IFtVc2VyUG9vbEF0dHJpYnV0ZS5QSE9ORV9OVU1CRVJdO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTaWduSW5UeXBlLkVNQUlMX09SX1BIT05FOlxuICAgICAgICB1c2VybmFtZUF0dHJpYnV0ZXMgPSBbVXNlclBvb2xBdHRyaWJ1dGUuRU1BSUwsIFVzZXJQb29sQXR0cmlidXRlLlBIT05FX05VTUJFUl07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhbGlhc0F0dHJpYnV0ZXMgPSBwcm9wcy51c2VybmFtZUFsaWFzQXR0cmlidXRlcztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmxhbWJkYVRyaWdnZXJzKSB7XG4gICAgICBmb3IgKGNvbnN0IHQgb2YgT2JqZWN0LmtleXMocHJvcHMubGFtYmRhVHJpZ2dlcnMpKSB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXIgPSBwcm9wcy5sYW1iZGFUcmlnZ2Vyc1t0XTtcbiAgICAgICAgaWYgKHRyaWdnZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuYWRkTGFtYmRhUGVybWlzc2lvbih0cmlnZ2VyIGFzIGxhbWJkYS5JRnVuY3Rpb24sIHQpO1xuICAgICAgICAgICh0aGlzLnRyaWdnZXJzIGFzIGFueSlbdF0gPSAodHJpZ2dlciBhcyBsYW1iZGEuSUZ1bmN0aW9uKS5mdW5jdGlvbkFybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVtYWlsVmVyaWZpY2F0aW9uU3ViamVjdCA9IHByb3BzLnVzZXJWZXJpZmljYXRpb24/LmVtYWlsU3ViamVjdCA/PyAnVmVyaWZ5IHlvdXIgbmV3IGFjY291bnQnO1xuICAgIGNvbnN0IGVtYWlsVmVyaWZpY2F0aW9uTWVzc2FnZSA9IHByb3BzLnVzZXJWZXJpZmljYXRpb24/LmVtYWlsQm9keSA/PyAnSGVsbG8ge3VzZXJuYW1lfSwgWW91ciB2ZXJpZmljYXRpb24gY29kZSBpcyB7IyMjI30nO1xuICAgIGNvbnN0IHNtc1ZlcmlmaWNhdGlvbk1lc3NhZ2UgPSBwcm9wcy51c2VyVmVyaWZpY2F0aW9uPy5zbXNNZXNzYWdlID8/ICdUaGUgdmVyaWZpY2F0aW9uIGNvZGUgdG8geW91ciBuZXcgYWNjb3VudCBpcyB7IyMjI30nO1xuXG4gICAgY29uc3QgZGVmYXVsdEVtYWlsT3B0aW9uID0gcHJvcHMudXNlclZlcmlmaWNhdGlvbj8uZW1haWxTdHlsZSA/PyBWZXJpZmljYXRpb25FbWFpbFN0eWxlLkNPREU7XG4gICAgY29uc3QgdmVyaWZpY2F0aW9uTWVzc2FnZVRlbXBsYXRlOiBDZm5Vc2VyUG9vbC5WZXJpZmljYXRpb25NZXNzYWdlVGVtcGxhdGVQcm9wZXJ0eSA9XG4gICAgICAoZGVmYXVsdEVtYWlsT3B0aW9uID09PSBWZXJpZmljYXRpb25FbWFpbFN0eWxlLkNPREUpID8ge1xuICAgICAgICBkZWZhdWx0RW1haWxPcHRpb24sXG4gICAgICAgIGVtYWlsTWVzc2FnZTogZW1haWxWZXJpZmljYXRpb25NZXNzYWdlLFxuICAgICAgICBlbWFpbFN1YmplY3Q6IGVtYWlsVmVyaWZpY2F0aW9uU3ViamVjdCxcbiAgICAgICAgc21zTWVzc2FnZTogc21zVmVyaWZpY2F0aW9uTWVzc2FnZSxcbiAgICAgIH0gOiB7XG4gICAgICAgIGRlZmF1bHRFbWFpbE9wdGlvbixcbiAgICAgICAgZW1haWxNZXNzYWdlQnlMaW5rOiBlbWFpbFZlcmlmaWNhdGlvbk1lc3NhZ2UsXG4gICAgICAgIGVtYWlsU3ViamVjdEJ5TGluazogZW1haWxWZXJpZmljYXRpb25TdWJqZWN0LFxuICAgICAgICBzbXNNZXNzYWdlOiBzbXNWZXJpZmljYXRpb25NZXNzYWdlXG4gICAgICB9O1xuXG4gICAgY29uc3QgaW52aXRlTWVzc2FnZVRlbXBsYXRlOiBDZm5Vc2VyUG9vbC5JbnZpdGVNZXNzYWdlVGVtcGxhdGVQcm9wZXJ0eSA9IHtcbiAgICAgIGVtYWlsTWVzc2FnZTogcHJvcHMudXNlckludml0YXRpb24/LmVtYWlsQm9keSxcbiAgICAgIGVtYWlsU3ViamVjdDogcHJvcHMudXNlckludml0YXRpb24/LmVtYWlsU3ViamVjdCxcbiAgICAgIHNtc01lc3NhZ2U6IHByb3BzLnVzZXJJbnZpdGF0aW9uPy5zbXNNZXNzYWdlLFxuICAgIH07XG4gICAgY29uc3Qgc2VsZlNpZ25VcEVuYWJsZWQgPSBwcm9wcy5zZWxmU2lnblVwRW5hYmxlZCAhPT0gdW5kZWZpbmVkID8gcHJvcHMuc2VsZlNpZ25VcEVuYWJsZWQgOiBmYWxzZTtcbiAgICBjb25zdCBhZG1pbkNyZWF0ZVVzZXJDb25maWc6IENmblVzZXJQb29sLkFkbWluQ3JlYXRlVXNlckNvbmZpZ1Byb3BlcnR5ID0ge1xuICAgICAgYWxsb3dBZG1pbkNyZWF0ZVVzZXJPbmx5OiAhc2VsZlNpZ25VcEVuYWJsZWQsXG4gICAgICBpbnZpdGVNZXNzYWdlVGVtcGxhdGU6IHByb3BzLnVzZXJJbnZpdGF0aW9uICE9PSB1bmRlZmluZWQgPyBpbnZpdGVNZXNzYWdlVGVtcGxhdGUgOiB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIGNvbnN0IHVzZXJQb29sID0gbmV3IENmblVzZXJQb29sKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIHVzZXJQb29sTmFtZTogcHJvcHMudXNlclBvb2xOYW1lLFxuICAgICAgdXNlcm5hbWVBdHRyaWJ1dGVzLFxuICAgICAgYWxpYXNBdHRyaWJ1dGVzLFxuICAgICAgYXV0b1ZlcmlmaWVkQXR0cmlidXRlczogcHJvcHMuYXV0b1ZlcmlmaWVkQXR0cmlidXRlcyxcbiAgICAgIGxhbWJkYUNvbmZpZzogTGF6eS5hbnlWYWx1ZSh7IHByb2R1Y2U6ICgpID0+IHRoaXMudHJpZ2dlcnMgfSksXG4gICAgICBzbXNDb25maWd1cmF0aW9uOiB0aGlzLnNtc0NvbmZpZ3VyYXRpb24ocHJvcHMpLFxuICAgICAgYWRtaW5DcmVhdGVVc2VyQ29uZmlnLFxuICAgICAgZW1haWxWZXJpZmljYXRpb25NZXNzYWdlLFxuICAgICAgZW1haWxWZXJpZmljYXRpb25TdWJqZWN0LFxuICAgICAgc21zVmVyaWZpY2F0aW9uTWVzc2FnZSxcbiAgICAgIHZlcmlmaWNhdGlvbk1lc3NhZ2VUZW1wbGF0ZSxcbiAgICB9KTtcblxuICAgIHRoaXMudXNlclBvb2xJZCA9IHVzZXJQb29sLnJlZjtcbiAgICB0aGlzLnVzZXJQb29sQXJuID0gdXNlclBvb2wuYXR0ckFybjtcblxuICAgIHRoaXMudXNlclBvb2xQcm92aWRlck5hbWUgPSB1c2VyUG9vbC5hdHRyUHJvdmlkZXJOYW1lO1xuICAgIHRoaXMudXNlclBvb2xQcm92aWRlclVybCA9IHVzZXJQb29sLmF0dHJQcm92aWRlclVybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggJ0NyZWF0ZSBBdXRoIENoYWxsZW5nZScgdHJpZ2dlclxuICAgKiBHcmFudHMgYWNjZXNzIGZyb20gY29nbml0by1pZHAuYW1hem9uYXdzLmNvbSB0byB0aGUgbGFtYmRhXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8vbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzZXItcG9vbC1sYW1iZGEtY3JlYXRlLWF1dGgtY2hhbGxlbmdlLmh0bWxcbiAgICogQHBhcmFtIGZuIHRoZSBsYW1iZGEgZnVuY3Rpb24gdG8gYXR0YWNoXG4gICAqL1xuICBwdWJsaWMgYWRkQ3JlYXRlQXV0aENoYWxsZW5nZVRyaWdnZXIoZm46IGxhbWJkYS5JRnVuY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLmFkZExhbWJkYVBlcm1pc3Npb24oZm4sICdDcmVhdGVBdXRoQ2hhbGxlbmdlJyk7XG4gICAgdGhpcy50cmlnZ2VycyA9IHsgLi4udGhpcy50cmlnZ2VycywgY3JlYXRlQXV0aENoYWxsZW5nZTogZm4uZnVuY3Rpb25Bcm4gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggJ0N1c3RvbSBNZXNzYWdlJyB0cmlnZ2VyXG4gICAqIEdyYW50cyBhY2Nlc3MgZnJvbSBjb2duaXRvLWlkcC5hbWF6b25hd3MuY29tIHRvIHRoZSBsYW1iZGFcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29nbml0by9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNlci1wb29sLWxhbWJkYS1jdXN0b20tbWVzc2FnZS5odG1sXG4gICAqIEBwYXJhbSBmbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIHRvIGF0dGFjaFxuICAgKi9cbiAgcHVibGljIGFkZEN1c3RvbU1lc3NhZ2VUcmlnZ2VyKGZuOiBsYW1iZGEuSUZ1bmN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5hZGRMYW1iZGFQZXJtaXNzaW9uKGZuLCAnQ3VzdG9tTWVzc2FnZScpO1xuICAgIHRoaXMudHJpZ2dlcnMgPSB7IC4uLnRoaXMudHJpZ2dlcnMsIGN1c3RvbU1lc3NhZ2U6IGZuLmZ1bmN0aW9uQXJuIH07XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoICdEZWZpbmUgQXV0aCBDaGFsbGVuZ2UnIHRyaWdnZXJcbiAgICogR3JhbnRzIGFjY2VzcyBmcm9tIGNvZ25pdG8taWRwLmFtYXpvbmF3cy5jb20gdG8gdGhlIGxhbWJkYVxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2VyLXBvb2wtbGFtYmRhLWRlZmluZS1hdXRoLWNoYWxsZW5nZS5odG1sXG4gICAqIEBwYXJhbSBmbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIHRvIGF0dGFjaFxuICAgKi9cbiAgcHVibGljIGFkZERlZmluZUF1dGhDaGFsbGVuZ2VUcmlnZ2VyKGZuOiBsYW1iZGEuSUZ1bmN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5hZGRMYW1iZGFQZXJtaXNzaW9uKGZuLCAnRGVmaW5lQXV0aENoYWxsZW5nZScpO1xuICAgIHRoaXMudHJpZ2dlcnMgPSB7IC4uLnRoaXMudHJpZ2dlcnMsIGRlZmluZUF1dGhDaGFsbGVuZ2U6IGZuLmZ1bmN0aW9uQXJuIH07XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoICdQb3N0IEF1dGhlbnRpY2F0aW9uJyB0cmlnZ2VyXG4gICAqIEdyYW50cyBhY2Nlc3MgZnJvbSBjb2duaXRvLWlkcC5hbWF6b25hd3MuY29tIHRvIHRoZSBsYW1iZGFcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29nbml0by9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNlci1wb29sLWxhbWJkYS1wb3N0LWF1dGhlbnRpY2F0aW9uLmh0bWxcbiAgICogQHBhcmFtIGZuIHRoZSBsYW1iZGEgZnVuY3Rpb24gdG8gYXR0YWNoXG4gICAqL1xuICBwdWJsaWMgYWRkUG9zdEF1dGhlbnRpY2F0aW9uVHJpZ2dlcihmbjogbGFtYmRhLklGdW5jdGlvbik6IHZvaWQge1xuICAgIHRoaXMuYWRkTGFtYmRhUGVybWlzc2lvbihmbiwgJ1Bvc3RBdXRoZW50aWNhdGlvbicpO1xuICAgIHRoaXMudHJpZ2dlcnMgPSB7IC4uLnRoaXMudHJpZ2dlcnMsIHBvc3RBdXRoZW50aWNhdGlvbjogZm4uZnVuY3Rpb25Bcm4gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggJ1Bvc3QgQ29uZmlybWF0aW9uJyB0cmlnZ2VyXG4gICAqIEdyYW50cyBhY2Nlc3MgZnJvbSBjb2duaXRvLWlkcC5hbWF6b25hd3MuY29tIHRvIHRoZSBsYW1iZGFcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29nbml0by9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNlci1wb29sLWxhbWJkYS1wb3N0LWNvbmZpcm1hdGlvbi5odG1sXG4gICAqIEBwYXJhbSBmbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIHRvIGF0dGFjaFxuICAgKi9cbiAgcHVibGljIGFkZFBvc3RDb25maXJtYXRpb25UcmlnZ2VyKGZuOiBsYW1iZGEuSUZ1bmN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5hZGRMYW1iZGFQZXJtaXNzaW9uKGZuLCAnUG9zdENvbmZpcm1hdGlvbicpO1xuICAgIHRoaXMudHJpZ2dlcnMgPSB7IC4uLnRoaXMudHJpZ2dlcnMsIHBvc3RDb25maXJtYXRpb246IGZuLmZ1bmN0aW9uQXJuIH07XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoICdQcmUgQXV0aGVudGljYXRpb24nIHRyaWdnZXJcbiAgICogR3JhbnRzIGFjY2VzcyBmcm9tIGNvZ25pdG8taWRwLmFtYXpvbmF3cy5jb20gdG8gdGhlIGxhbWJkYVxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2VyLXBvb2wtbGFtYmRhLXByZS1hdXRoZW50aWNhdGlvbi5odG1sXG4gICAqIEBwYXJhbSBmbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIHRvIGF0dGFjaFxuICAgKi9cbiAgcHVibGljIGFkZFByZUF1dGhlbnRpY2F0aW9uVHJpZ2dlcihmbjogbGFtYmRhLklGdW5jdGlvbik6IHZvaWQge1xuICAgIHRoaXMuYWRkTGFtYmRhUGVybWlzc2lvbihmbiwgJ1ByZUF1dGhlbnRpY2F0aW9uJyk7XG4gICAgdGhpcy50cmlnZ2VycyA9IHsgLi4udGhpcy50cmlnZ2VycywgcHJlQXV0aGVudGljYXRpb246IGZuLmZ1bmN0aW9uQXJuIH07XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoICdQcmUgU2lnbiBVcCcgdHJpZ2dlclxuICAgKiBHcmFudHMgYWNjZXNzIGZyb20gY29nbml0by1pZHAuYW1hem9uYXdzLmNvbSB0byB0aGUgbGFtYmRhXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8vbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzZXItcG9vbC1sYW1iZGEtcHJlLXNpZ24tdXAuaHRtbFxuICAgKiBAcGFyYW0gZm4gdGhlIGxhbWJkYSBmdW5jdGlvbiB0byBhdHRhY2hcbiAgICovXG4gIHB1YmxpYyBhZGRQcmVTaWduVXBUcmlnZ2VyKGZuOiBsYW1iZGEuSUZ1bmN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5hZGRMYW1iZGFQZXJtaXNzaW9uKGZuLCAnUHJlU2lnblVwJyk7XG4gICAgdGhpcy50cmlnZ2VycyA9IHsgLi4udGhpcy50cmlnZ2VycywgcHJlU2lnblVwOiBmbi5mdW5jdGlvbkFybiB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaCAnUHJlIFRva2VuIEdlbmVyYXRpb24nIHRyaWdnZXJcbiAgICogR3JhbnRzIGFjY2VzcyBmcm9tIGNvZ25pdG8taWRwLmFtYXpvbmF3cy5jb20gdG8gdGhlIGxhbWJkYVxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2VyLXBvb2wtbGFtYmRhLXByZS10b2tlbi1nZW5lcmF0aW9uLmh0bWxcbiAgICogQHBhcmFtIGZuIHRoZSBsYW1iZGEgZnVuY3Rpb24gdG8gYXR0YWNoXG4gICAqL1xuICBwdWJsaWMgYWRkUHJlVG9rZW5HZW5lcmF0aW9uVHJpZ2dlcihmbjogbGFtYmRhLklGdW5jdGlvbik6IHZvaWQge1xuICAgIHRoaXMuYWRkTGFtYmRhUGVybWlzc2lvbihmbiwgJ1ByZVRva2VuR2VuZXJhdGlvbicpO1xuICAgIHRoaXMudHJpZ2dlcnMgPSB7IC4uLnRoaXMudHJpZ2dlcnMsIHByZVRva2VuR2VuZXJhdGlvbjogZm4uZnVuY3Rpb25Bcm4gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggJ1VzZXIgTWlncmF0aW9uJyB0cmlnZ2VyXG4gICAqIEdyYW50cyBhY2Nlc3MgZnJvbSBjb2duaXRvLWlkcC5hbWF6b25hd3MuY29tIHRvIHRoZSBsYW1iZGFcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29nbml0by9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNlci1wb29sLWxhbWJkYS1taWdyYXRlLXVzZXIuaHRtbFxuICAgKiBAcGFyYW0gZm4gdGhlIGxhbWJkYSBmdW5jdGlvbiB0byBhdHRhY2hcbiAgICovXG4gIHB1YmxpYyBhZGRVc2VyTWlncmF0aW9uVHJpZ2dlcihmbjogbGFtYmRhLklGdW5jdGlvbik6IHZvaWQge1xuICAgIHRoaXMuYWRkTGFtYmRhUGVybWlzc2lvbihmbiwgJ1VzZXJNaWdyYXRpb24nKTtcbiAgICB0aGlzLnRyaWdnZXJzID0geyAuLi50aGlzLnRyaWdnZXJzLCB1c2VyTWlncmF0aW9uOiBmbi5mdW5jdGlvbkFybiB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaCAnVmVyaWZ5IEF1dGggQ2hhbGxlbmdlIFJlc3BvbnNlJyB0cmlnZ2VyXG4gICAqIEdyYW50cyBhY2Nlc3MgZnJvbSBjb2duaXRvLWlkcC5hbWF6b25hd3MuY29tIHRvIHRoZSBsYW1iZGFcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29nbml0by9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNlci1wb29sLWxhbWJkYS12ZXJpZnktYXV0aC1jaGFsbGVuZ2UtcmVzcG9uc2UuaHRtbFxuICAgKiBAcGFyYW0gZm4gdGhlIGxhbWJkYSBmdW5jdGlvbiB0byBhdHRhY2hcbiAgICovXG4gIHB1YmxpYyBhZGRWZXJpZnlBdXRoQ2hhbGxlbmdlUmVzcG9uc2VUcmlnZ2VyKGZuOiBsYW1iZGEuSUZ1bmN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5hZGRMYW1iZGFQZXJtaXNzaW9uKGZuLCAnVmVyaWZ5QXV0aENoYWxsZW5nZVJlc3BvbnNlJyk7XG4gICAgdGhpcy50cmlnZ2VycyA9IHsgLi4udGhpcy50cmlnZ2VycywgdmVyaWZ5QXV0aENoYWxsZW5nZVJlc3BvbnNlOiBmbi5mdW5jdGlvbkFybiB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRMYW1iZGFQZXJtaXNzaW9uKGZuOiBsYW1iZGEuSUZ1bmN0aW9uLCBuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBub3JtYWxpemUgPSBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKTtcbiAgICBmbi5hZGRQZXJtaXNzaW9uKGAke25vcm1hbGl6ZX1Db2duaXRvYCwge1xuICAgICAgcHJpbmNpcGFsOiBuZXcgU2VydmljZVByaW5jaXBhbCgnY29nbml0by1pZHAuYW1hem9uYXdzLmNvbScpLFxuICAgICAgc291cmNlQXJuOiB0aGlzLnVzZXJQb29sQXJuXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNtc0NvbmZpZ3VyYXRpb24ocHJvcHM6IFVzZXJQb29sUHJvcHMpOiBDZm5Vc2VyUG9vbC5TbXNDb25maWd1cmF0aW9uUHJvcGVydHkge1xuICAgIGlmIChwcm9wcy5zbXNSb2xlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzbnNDYWxsZXJBcm46IHByb3BzLnNtc1JvbGUucm9sZUFybixcbiAgICAgICAgZXh0ZXJuYWxJZDogcHJvcHMuc21zUm9sZUV4dGVybmFsSWRcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNtc1JvbGVFeHRlcm5hbElkID0gdGhpcy5ub2RlLnVuaXF1ZUlkLnN1YnN0cigwLCAxMjIzKTsgLy8gc3RzOkV4dGVybmFsSWQgbWF4IGxlbmd0aCBvZiAxMjI0XG4gICAgICBjb25zdCBzbXNSb2xlID0gcHJvcHMuc21zUm9sZSA/PyBuZXcgUm9sZSh0aGlzLCAnc21zUm9sZScsIHtcbiAgICAgICAgYXNzdW1lZEJ5OiBuZXcgU2VydmljZVByaW5jaXBhbCgnY29nbml0by1pZHAuYW1hem9uYXdzLmNvbScsIHtcbiAgICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgICBTdHJpbmdFcXVhbHM6IHsgJ3N0czpFeHRlcm5hbElkJzogc21zUm9sZUV4dGVybmFsSWQgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgICAgLypcbiAgICAgICAgICAgKiBUaGUgVXNlclBvb2wgaXMgdmVyeSBwYXJ0aWN1bGFyIHRoYXQgaXQgbXVzdCBjb250YWluIGFuICdzbnM6UHVibGlzaCcgYWN0aW9uIGFzIGFuIGlubGluZSBwb2xpY3kuXG4gICAgICAgICAgICogSWRlYWxseSwgYSBjb25kaXRpb25hbCB0aGF0IHJlc3RyaWN0cyB0aGlzIGFjdGlvbiB0byAnc21zJyBwcm90b2NvbCBuZWVkcyB0byBiZSBhdHRhY2hlZCwgYnV0IHRoZSBVc2VyUG9vbCBkZXBsb3ltZW50IGZhaWxzIHZhbGlkYXRpb24uXG4gICAgICAgICAgICogU2VlbXMgbGlrZSBhIGNhc2Ugb2YgYmVpbmcgZXhjZXNzaXZlbHkgc3RyaWN0LlxuICAgICAgICAgICAqL1xuICAgICAgICAgICdzbnMtcHVibGlzaCc6IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICAgIGFjdGlvbnM6IFsgJ3NuczpQdWJsaXNoJyBdLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogWyAnKicgXSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4dGVybmFsSWQ6IHNtc1JvbGVFeHRlcm5hbElkLFxuICAgICAgICBzbnNDYWxsZXJBcm46IHNtc1JvbGUucm9sZUFyblxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==

24

package.json
{
"name": "@aws-cdk/aws-cognito",
"version": "1.25.0",
"version": "1.26.0",
"description": "The CDK Construct Library for AWS::Cognito",

@@ -65,20 +65,21 @@ "main": "lib/index.js",

"devDependencies": {
"@aws-cdk/assert": "1.25.0",
"@aws-cdk/assert": "1.26.0",
"@types/nodeunit": "^0.0.30",
"cdk-build-tools": "1.25.0",
"cfn2ts": "1.25.0",
"cdk-build-tools": "1.26.0",
"cdk-integ-tools": "1.26.0",
"cfn2ts": "1.26.0",
"jest": "^24.9.0",
"nodeunit": "^0.11.3",
"pkglint": "1.25.0"
"pkglint": "1.26.0"
},
"dependencies": {
"@aws-cdk/aws-iam": "1.25.0",
"@aws-cdk/aws-lambda": "1.25.0",
"@aws-cdk/core": "1.25.0"
"@aws-cdk/aws-iam": "1.26.0",
"@aws-cdk/aws-lambda": "1.26.0",
"@aws-cdk/core": "1.26.0"
},
"homepage": "https://github.com/aws/aws-cdk",
"peerDependencies": {
"@aws-cdk/aws-iam": "1.25.0",
"@aws-cdk/aws-lambda": "1.25.0",
"@aws-cdk/core": "1.25.0"
"@aws-cdk/aws-iam": "1.26.0",
"@aws-cdk/aws-lambda": "1.26.0",
"@aws-cdk/core": "1.26.0"
},

@@ -108,3 +109,2 @@ "jest": {},

"docs-public-apis:@aws-cdk/aws-cognito.UserPoolClient.userPoolClientName",
"docs-public-apis:@aws-cdk/aws-cognito.UserPoolProps",
"docs-public-apis:@aws-cdk/aws-cognito.UserPoolAttributes",

@@ -111,0 +111,0 @@ "docs-public-apis:@aws-cdk/aws-cognito.UserPoolClientProps"

@@ -18,2 +18,95 @@ ## Amazon Cognito Construct Library

[Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) provides
authentication, authorization, and user management for your web and mobile apps. Your users can sign in directly with a
user name and password, or through a third party such as Facebook, Amazon, Google or Apple.
The two main components of Amazon Cognito are [user
pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html) and [identity
pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html). User pools are user directories
that provide sign-up and sign-in options for your app users. Identity pools enable you to grant your users access to
other AWS services.
This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project.
## User Pools
User pools allow creating and managing your own directory of users that can sign up and sign in. They enable easy
integration with social identity providers such as Facebook, Google, Amazon, Microsoft Active Directory, etc. through
SAML.
Using the CDK, a new user pool can be created as part of the stack using the construct's constructor. You may specify
the `userPoolName` to give your own identifier to the user pool. If not, CloudFormation will generate a name.
```ts
new UserPool(this, 'myuserpool', {
userPoolName: 'myawesomeapp-userpool',
});
```
### Sign Up
Users can either be signed up by the app's administrators or can sign themselves up. Once a user has signed up, their
account needs to be confirmed. Cognito provides several ways to sign users up and confirm their accounts. Learn more
about [user sign up here](https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html).
When a user signs up, email and SMS messages are used to verify their account and contact methods. The following code
snippet configures a user pool with properties relevant to these verification messages -
```ts
new UserPool(this, 'myuserpool', {
// ...
selfSignUpEnabled: true,
userVerification: {
emailSubject: 'Verify your email for our awesome app!',
emailBody: 'Hello {username}, Thanks for signing up to our awesome app! Your verification code is {####}',
emailStyle: VerificationEmailStyle.CODE,
smsMessage: 'Hello {username}, Thanks for signing up to our awesome app! Your verification code is {####}',
}
});
```
By default, self sign up is disabled. Learn more about [email and SMS verification messages
here](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-message-customizations.html).
Besides users signing themselves up, an administrator of any user pool can sign users up. The user then receives an
invitation to join the user pool. The following code snippet configures a user pool with properties relevant to the
invitation messages -
```ts
new UserPool(this, 'myuserpool', {
// ...
userInvitation: {
emailSubject: 'Invite to join our awesome app!',
emailBody: 'Hello {username}, you have been invited to join our awesome app! Your temporary password is {####}',
smsMessage: 'Your temporary password for our awesome app is {####}'
}
});
```
All email subjects, bodies and SMS messages for both invitation and verification support Cognito's message templating.
Learn more about [message templates
here](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-message-templates.html).
### Security
Cognito sends various messages to its users via SMS, for different actions, ranging from account verification to
marketing. In order to send SMS messages, Cognito needs an IAM role that it can assume, with permissions that allow it
to send SMS messages. By default, CDK will create this IAM role but can also be explicily specified to an existing IAM
role using the `smsRole` property.
```ts
import { Role } from '@aws-cdk/aws-iam';
const poolSmsRole = new Role(this, 'userpoolsmsrole', { /* ... */ });
new UserPool(this, 'myuserpool', {
// ...
smsRole: poolSmsRole,
smsRoleExternalId: 'c87467be-4f34-11ea-b77f-2e728ce88125'
});
```
When the `smsRole` property is specified, the `smsRoleExternalId` may also be specified. The value of
`smsRoleExternalId` will be used as the `sts:ExternalId` when the Cognito service assumes the role. In turn, the role's
assume role policy should be configured to accept this value as the ExternalId. Learn more about [ExternalId
here](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html).
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
require("@aws-cdk/assert/jest");
const have_resource_1 = require("@aws-cdk/assert/lib/assertions/have-resource");
const aws_iam_1 = require("@aws-cdk/aws-iam");
const lambda = require("@aws-cdk/aws-lambda");

@@ -12,9 +14,129 @@ const core_1 = require("@aws-cdk/core");

// WHEN
new lib_1.UserPool(stack, 'Pool');
// THEN
expect(stack).toHaveResource('AWS::Cognito::UserPool', {
AdminCreateUserConfig: {
AllowAdminCreateUserOnly: true,
InviteMessageTemplate: have_resource_1.ABSENT
},
EmailVerificationMessage: 'Hello {username}, Your verification code is {####}',
EmailVerificationSubject: 'Verify your new account',
SmsVerificationMessage: 'The verification code to your new account is {####}',
VerificationMessageTemplate: {
DefaultEmailOption: 'CONFIRM_WITH_CODE',
EmailMessage: 'Hello {username}, Your verification code is {####}',
EmailSubject: 'Verify your new account',
SmsMessage: 'The verification code to your new account is {####}',
},
SmsConfiguration: {
SnsCallerArn: {
'Fn::GetAtt': ['PoolsmsRoleC3352CE6', 'Arn'],
},
ExternalId: 'Pool'
}
});
expect(stack).toHaveResourceLike('AWS::IAM::Role', {
AssumeRolePolicyDocument: {
Statement: [
{
Action: 'sts:AssumeRole',
Condition: {
StringEquals: {
'sts:ExternalId': 'Pool'
}
},
Effect: 'Allow',
Principal: {
Service: 'cognito-idp.amazonaws.com'
}
}
]
},
Policies: [
{
PolicyDocument: {
Statement: [
{
Action: 'sns:Publish',
Effect: 'Allow',
Resource: '*'
}
]
}
}
]
});
});
test('self sign up option is correctly configured', () => {
// GIVEN
const stack = new core_1.Stack();
// WHEN
new lib_1.UserPool(stack, 'Pool', {
userPoolName: 'myPool',
selfSignUpEnabled: true
});
// THEN
expect(stack).toHaveResource('AWS::Cognito::UserPool', {
AdminCreateUserConfig: {
AllowAdminCreateUserOnly: false
}
});
});
test('email verification via link is configured correctly', () => {
// GIVEN
const stack = new core_1.Stack();
// WHEN
new lib_1.UserPool(stack, 'Pool', {
userVerification: {
emailStyle: lib_1.VerificationEmailStyle.LINK
}
});
// THEN
expect(stack).toHaveResourceLike('AWS::Cognito::UserPool', {
UserPoolName: 'myPool'
EmailVerificationMessage: 'Hello {username}, Your verification code is {####}',
EmailVerificationSubject: 'Verify your new account',
VerificationMessageTemplate: {
DefaultEmailOption: 'CONFIRM_WITH_LINK',
EmailMessageByLink: 'Hello {username}, Your verification code is {####}',
EmailSubjectByLink: 'Verify your new account',
}
});
}),
test('user invitation messages are configured correctly', () => {
// GIVEN
const stack = new core_1.Stack();
// WHEN
new lib_1.UserPool(stack, 'Pool', {
userInvitation: {
emailBody: 'invitation email body',
emailSubject: 'invitation email subject',
smsMessage: 'invitation sms'
}
});
// THEN
expect(stack).toHaveResourceLike('AWS::Cognito::UserPool', {
AdminCreateUserConfig: {
InviteMessageTemplate: {
EmailMessage: 'invitation email body',
EmailSubject: 'invitation email subject',
SMSMessage: 'invitation sms'
}
}
});
});
test('smsRole property is recognized', () => {
// GIVEN
const stack = new core_1.Stack();
const role = aws_iam_1.Role.fromRoleArn(stack, 'smsRole', 'arn:aws:iam::664773442901:role/sms-role');
// WHEN
new lib_1.UserPool(stack, 'Pool', {
smsRole: role,
smsRoleExternalId: 'test-external-id'
});
// THEN
expect(stack).toHaveResourceLike('AWS::Cognito::UserPool', {
SmsConfiguration: {
ExternalId: 'test-external-id',
SnsCallerArn: role.roleArn
}
});
});

@@ -28,3 +150,3 @@ test('support tags', () => {

});
core_1.Tag.add(pool, "PoolTag", "PoolParty");
core_1.Tag.add(pool, 'PoolTag', 'PoolParty');
// THEN

@@ -34,3 +156,3 @@ expect(stack).toHaveResourceLike('AWS::Cognito::UserPool', {

UserPoolTags: {
PoolTag: "PoolParty",
PoolTag: 'PoolParty',
}

@@ -205,2 +327,2 @@ });

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1wb29sLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1c2VyLXBvb2wudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGdDQUE4QjtBQUM5Qiw4Q0FBOEM7QUFDOUMsd0NBQTJDO0FBQzNDLGdDQUFpRTtBQUVqRSxRQUFRLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRTtJQUN6QixJQUFJLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtRQUN6QixRQUFRO1FBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSxZQUFLLEVBQUUsQ0FBQztRQUUxQixPQUFPO1FBQ1AsSUFBSSxjQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUMxQixZQUFZLEVBQUUsUUFBUTtTQUN2QixDQUFDLENBQUM7UUFFSCxPQUFPO1FBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixDQUFDLHdCQUF3QixFQUFFO1lBQ3pELFlBQVksRUFBRSxRQUFRO1NBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7UUFDeEIsUUFBUTtRQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBSyxFQUFFLENBQUM7UUFFMUIsT0FBTztRQUNQLE1BQU0sSUFBSSxHQUFHLElBQUksY0FBUSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDdkMsWUFBWSxFQUFFLFFBQVE7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsVUFBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRXRDLE9BQU87UUFDUCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUMsd0JBQXdCLEVBQUU7WUFDekQsWUFBWSxFQUFFLFFBQVE7WUFDdEIsWUFBWSxFQUFFO2dCQUNaLE9BQU8sRUFBRSxXQUFXO2FBQ3JCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxD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SUFBSSxjQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtnQkFDMUIsVUFBVSxFQUFFLGdCQUFVLENBQUMsUUFBUTtnQkFDL0IsdUJBQXVCLEVBQUUsQ0FBRSx1QkFBaUIsQ0FBQyxVQUFVLENBQUU7YUFDMUQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLHVGQUF1RixDQUFDLENBQUM7SUFDdEcsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMscUVBQXFFLEVBQUUsR0FBRyxFQUFFO1FBQy9FLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBSyxFQUFFLENBQUM7UUFFMUIsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksY0FBUSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7Z0JBQzFCLFVBQVUsRUFBRSxnQkFBVSxDQUFDLEtBQUs7Z0JBQzVCLHNCQUFzQixFQUFFLENBQUUsdUJBQWlCLENBQUMsS0FBSyxFQUFFLHVCQUFpQixDQUFDLE1BQU0sQ0FBRTthQUM5RSxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsaUVBQWlFLENBQUMsQ0FBQztJQUNoRixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdAYXdzLWNkay9hc3NlcnQvamVzdCc7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnQGF3cy1jZGsvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBTdGFjaywgVGFnIH0gZnJvbSAnQGF3cy1jZGsvY29yZSc7XG5pbXBvcnQgeyBTaWduSW5UeXBlLCBVc2VyUG9vbCwgVXNlclBvb2xBdHRyaWJ1dGUgfSBmcm9tICcuLi9saWInO1xuXG5kZXNjcmliZSgnVXNlciBQb29sJywgKCkgPT4ge1xuICB0ZXN0KCdkZWZhdWx0IHNldHVwJywgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICAgIC8vIFdIRU5cbiAgICBuZXcgVXNlclBvb2woc3RhY2ssICdQb29sJywge1xuICAgICAgdXNlclBvb2xOYW1lOiAnbXlQb29sJyxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3Qoc3RhY2spLnRvSGF2ZVJlc291cmNlTGlrZSgnQVdTOjpDb2duaXRvOjpVc2VyUG9vbCcsIHtcbiAgICAgIFVzZXJQb29sTmFtZTogJ215UG9vbCdcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnc3VwcG9ydCB0YWdzJywgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCBwb29sID0gbmV3IFVzZXJQb29sKHN0YWNrLCAnUG9vbCcsIHtcbiAgICAgIHVzZXJQb29sTmFtZTogJ215UG9vbCcsXG4gICAgfSk7XG4gICAgVGFnLmFkZChwb29sLCBcIlBvb2xUYWdcIiwgXCJQb29sUGFydHlcIik7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZUxpa2UoJ0FXUzo6Q29nbml0bzo6VXNlclBvb2wnLCB7XG4gICAgICBVc2VyUG9vbE5hbWU6ICdteVBvb2wnLFxuICAgICAgVXNlclBvb2xUYWdzOiB7XG4gICAgICAgIFBvb2xUYWc6IFwiUG9vbFBhcnR5XCIsXG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2xhbWJkYSB0cmlnZ2VycyBhcmUgZGVmaW5lZCcsICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgY29uc3QgZm4gPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHN0YWNrLCAnTXlMYW1iZGEnLCB7XG4gICAgICBjb2RlOiBuZXcgbGFtYmRhLklubGluZUNvZGUoJ2ZvbycpLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzEwX1gsXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgcG9vbCA9IG5ldyBVc2VyUG9vbChzdGFjaywgJ1Bvb2wnLCB7XG4gICAgICBsYW1iZGFUcmlnZ2Vyczoge1xuICAgICAgICBwcmVTaWduVXA6IGZuXG4gICAgICB9XG4gICAgfSk7XG4gICAgcG9vbC5hZGRDdXN0b21NZXNzYWdlVHJpZ2dlcihmbik7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZUxpa2UoJ0FXUzo6Q29nbml0bzo6VXNlclBvb2wnLCB7XG4gICAgICBMYW1iZGFDb25maWc6IHtcbiAgICAgICAgUHJlU2lnblVwOiBzdGFjay5yZXNvbHZlKGZuLmZ1bmN0aW9uQXJuKSxcbiAgICAgICAgQ3VzdG9tTWVzc2FnZTogc3RhY2sucmVzb2x2ZShmbi5mdW5jdGlvbkFybilcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnb24qIEFQSSBjb3JyZWN0bHkgYXBwZW5kcyB0cmlnZ2VycycsICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgICBjb25zdCBjcmVhdGVBdXRoQ2hhbGxlbmdlTGFtYmRhRm4gPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHN0YWNrLCAnY3JlYXRlQXV0aENoYWxsZW5nZUxhbWJkYScsIHtcbiAgICAgIGNvZGU6IG5ldyBsYW1iZGEuSW5saW5lQ29kZSgnZm9vJyksXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMTBfWCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGN1c3RvbU1lc3NhZ2VMYW1iZGFGbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24oc3RhY2ssICdjdXN0b21NZXNzYWdlTGFtYmRhJywge1xuICAgICAgY29kZTogbmV3IGxhbWJkYS5JbmxpbmVDb2RlKCdmb28nKSxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xMF9YLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVmaW5lQXV0aENoYWxsZW5nZUxhbWJkYUZuID0gbmV3IGxhbWJkYS5GdW5jdGlvbihzdGFjaywgJ2RlZmluZUF1dGhDaGFsbGVuZ2VMYW1iZGEnLCB7XG4gICAgICBjb2RlOiBuZXcgbGFtYmRhLklubGluZUNvZGUoJ2ZvbycpLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzEwX1gsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwb3N0QXV0aGVudGljYXRpb25MYW1iZGFGbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24oc3RhY2ssICdwb3N0QXV0aGVudGljYXRpb25MYW1iZGEnLCB7XG4gICAgICBjb2RlOiBuZXcgbGFtYmRhLklubGluZUNvZGUoJ2ZvbycpLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzEwX1gsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwb3N0Q29uZmlybWF0aW9uTGFtYmRhRm4gPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHN0YWNrLCAncG9zdENvbmZpcm1hdGlvbkxhbWJkYScsIHtcbiAgICAgIGNvZGU6IG5ldyBsYW1iZGEuSW5saW5lQ29kZSgnZm9vJyksXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMTBfWCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHByZUF1dGhlbnRpY2F0aW9uTGFtYmRhRm4gPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHN0YWNrLCAncHJlQXV0aGVudGljYXRpb25MYW1iZGEnLCB7XG4gICAgICBjb2RlOiBuZXcgbGFtYmRhLklubGluZUNvZGUoJ2ZvbycpLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzEwX1gsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwcmVTaWduVXBMYW1iZGFGbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24oc3RhY2ssICdwcmVTaWduVXBMYW1iZGEnLCB7XG4gICAgICBjb2RlOiBuZXcgbGFtYmRhLklubGluZUNvZGUoJ2ZvbycpLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzEwX1gsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwcmVUb2tlbkdlbmVyYXRpb25MYW1iZGFGbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24oc3RhY2ssICdwcmVUb2tlbkdlbmVyYXRpb25MYW1iZGEnLCB7XG4gICAgICBjb2RlOiBuZXcgbGFtYmRhLklubGluZUNvZGUoJ2ZvbycpLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzEwX1gsXG4gICAgfSk7XG5cbiAgICBjb25zdCB1c2VyTWlncmF0aW9uTGFtYmRhRm4gPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHN0YWNrLCAndXNlck1pZ3JhdGlvbkxhbWJkYScsIHtcbiAgICAgIGNvZGU6IG5ldyBsYW1iZGEuSW5saW5lQ29kZSgnZm9vJyksXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMTBfWCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHZlcmlmeUF1dGhDaGFsbGVuZ2VSZXNwb25zZUxhbWJkYUZuID0gbmV3IGxhbWJkYS5GdW5jdGlvbihzdGFjaywgJ3ZlcmlmeUF1dGhDaGFsbGVuZ2VSZXNwb25zZUxhbWJkYScsIHtcbiAgICAgIGNvZGU6IG5ldyBsYW1iZGEuSW5saW5lQ29kZSgnZm9vJyksXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMTBfWCxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCBwb29sID0gbmV3IFVzZXJQb29sKHN0YWNrLCAnUG9vbCcsIHsgfSk7XG4gICAgcG9vbC5hZGRDcmVhdGVBdXRoQ2hhbGxlbmdlVHJpZ2dlcihjcmVhdGVBdXRoQ2hhbGxlbmdlTGFtYmRhRm4pO1xuICAgIHBvb2wuYWRkQ3VzdG9tTWVzc2FnZVRyaWdnZXIoY3VzdG9tTWVzc2FnZUxhbWJkYUZuKTtcbiAgICBwb29sLmFkZERlZmluZUF1dGhDaGFsbGVuZ2VUcmlnZ2VyKGRlZmluZUF1dGhDaGFsbGVuZ2VMYW1iZGFGbik7XG4gICAgcG9vbC5hZGRQb3N0QXV0aGVudGljYXRpb25UcmlnZ2VyKHBvc3RBdXRoZW50aWNhdGlvbkxhbWJkYUZuKTtcbiAgICBwb29sLmFkZFBvc3RDb25maXJtYXRpb25UcmlnZ2VyKHBvc3RDb25maXJtYXRpb25MYW1iZGFGbik7XG4gICAgcG9vbC5hZGRQcmVBdXRoZW50aWNhdGlvblRyaWdnZXIocHJlQXV0aGVudGljYXRpb25MYW1iZGFGbik7XG4gICAgcG9vbC5hZGRQcmVTaWduVXBUcmlnZ2VyKHByZVNpZ25VcExhbWJkYUZuKTtcbiAgICBwb29sLmFkZFByZVRva2VuR2VuZXJhdGlvblRyaWdnZXIocHJlVG9rZW5HZW5lcmF0aW9uTGFtYmRhRm4pO1xuICAgIHBvb2wuYWRkVXNlck1pZ3JhdGlvblRyaWdnZXIodXNlck1pZ3JhdGlvbkxhbWJkYUZuKTtcbiAgICBwb29sLmFkZFZlcmlmeUF1dGhDaGFsbGVuZ2VSZXNwb25zZVRyaWdnZXIodmVyaWZ5QXV0aENoYWxsZW5nZVJlc3BvbnNlTGFtYmRhRm4pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChzdGFjaykudG9IYXZlUmVzb3VyY2VMaWtlKCdBV1M6OkNvZ25pdG86OlVzZXJQb29sJywge1xuICAgICAgTGFtYmRhQ29uZmlnOiB7XG4gICAgICAgIENyZWF0ZUF1dGhDaGFsbGVuZ2U6IHN0YWNrLnJlc29sdmUoY3JlYXRlQXV0aENoYWxsZW5nZUxhbWJkYUZuLmZ1bmN0aW9uQXJuKSxcbiAgICAgICAgQ3VzdG9tTWVzc2FnZTogc3RhY2sucmVzb2x2ZShjdXN0b21NZXNzYWdlTGFtYmRhRm4uZnVuY3Rpb25Bcm4pLFxuICAgICAgICBEZWZpbmVBdXRoQ2hhbGxlbmdlOiBzdGFjay5yZXNvbHZlKGRlZmluZUF1dGhDaGFsbGVuZ2VMYW1iZGFGbi5mdW5jdGlvbkFybiksXG4gICAgICAgIFBvc3RBdXRoZW50aWNhdGlvbjogc3RhY2sucmVzb2x2ZShwb3N0QXV0aGVudGljYXRpb25MYW1iZGFGbi5mdW5jdGlvbkFybiksXG4gICAgICAgIFBvc3RDb25maXJtYXRpb246IHN0YWNrLnJlc29sdmUocG9zdENvbmZpcm1hdGlvbkxhbWJkYUZuLmZ1bmN0aW9uQXJuKSxcbiAgICAgICAgUHJlQXV0aGVudGljYXRpb246IHN0YWNrLnJlc29sdmUocHJlQXV0aGVudGljYXRpb25MYW1iZGFGbi5mdW5jdGlvbkFybiksXG4gICAgICAgIFByZVNpZ25VcDogc3RhY2sucmVzb2x2ZShwcmVTaWduVXBMYW1iZGFGbi5mdW5jdGlvbkFybiksXG4gICAgICAgIFByZVRva2VuR2VuZXJhdGlvbjogc3RhY2sucmVzb2x2ZShwcmVUb2tlbkdlbmVyYXRpb25MYW1iZGFGbi5mdW5jdGlvbkFybiksXG4gICAgICAgIFVzZXJNaWdyYXRpb246IHN0YWNrLnJlc29sdmUodXNlck1pZ3JhdGlvbkxhbWJkYUZuLmZ1bmN0aW9uQXJuKSxcbiAgICAgICAgVmVyaWZ5QXV0aENoYWxsZW5nZVJlc3BvbnNlOiBzdGFjay5yZXNvbHZlKHZlcmlmeUF1dGhDaGFsbGVuZ2VSZXNwb25zZUxhbWJkYUZuLmZ1bmN0aW9uQXJuKVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdsYW1iZGFzIGFyZSBnaXZlbiBjb2duaXRvIHNlcnZpY2UgZ3JhbnQnLCAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgIGNvbnN0IGZuID0gbmV3IGxhbWJkYS5GdW5jdGlvbihzdGFjaywgJ015TGFtYmRhJywge1xuICAgICAgY29kZTogbmV3IGxhbWJkYS5JbmxpbmVDb2RlKCdmb28nKSxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xMF9YLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIG5ldyBVc2VyUG9vbChzdGFjaywgJ1Bvb2wnLCB7XG4gICAgICBsYW1iZGFUcmlnZ2Vyczoge1xuICAgICAgICBwcmVTaWduVXA6IGZuXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZUxpa2UoJ0FXUzo6TGFtYmRhOjpQZXJtaXNzaW9uJywge1xuICAgICAgRnVuY3Rpb25OYW1lOiBzdGFjay5yZXNvbHZlKGZuLmZ1bmN0aW9uQXJuKSxcbiAgICAgIFByaW5jaXBhbDogJ2NvZ25pdG8taWRwLmFtYXpvbmF3cy5jb20nXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3NldCBzaWduIGluIHR5cGUnLCAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gICAgLy8gV0hFTlxuICAgIG5ldyBVc2VyUG9vbChzdGFjaywgJ1Bvb2wnLCB7XG4gICAgICBzaWduSW5UeXBlOiBTaWduSW5UeXBlLkVNQUlMLFxuICAgICAgYXV0b1ZlcmlmaWVkQXR0cmlidXRlczogWyBVc2VyUG9vbEF0dHJpYnV0ZS5FTUFJTCBdXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZUxpa2UoJ0FXUzo6Q29nbml0bzo6VXNlclBvb2wnLCB7XG4gICAgICBVc2VybmFtZUF0dHJpYnV0ZXM6IFsgJ2VtYWlsJyBdLFxuICAgICAgQXV0b1ZlcmlmaWVkQXR0cmlidXRlczogWyAnZW1haWwnIF1cbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgndXNlcm5hbWVBbGlhc0F0dHJpYnV0ZXMgcmVxdWlyZSBzaWduSW5UeXBlIG9mIFVTRVJOQU1FJywgKCkgPT4ge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgbmV3IFVzZXJQb29sKHN0YWNrLCAnUG9vbCcsIHtcbiAgICAgICAgc2lnbkluVHlwZTogU2lnbkluVHlwZS5FTUFJTCxcbiAgICAgICAgdXNlcm5hbWVBbGlhc0F0dHJpYnV0ZXM6IFsgVXNlclBvb2xBdHRyaWJ1dGUuUFJFRkVSUkVEX1VTRVJOQU1FIF1cbiAgICAgIH0pO1xuICAgIH0pLnRvVGhyb3coLyd1c2VybmFtZUFsaWFzQXR0cmlidXRlcycgY2FuIG9ubHkgYmUgc2V0IHdpdGggYSBzaWduSW5UeXBlIG9mICdVU0VSTkFNRScvKTtcbiAgfSk7XG5cbiAgdGVzdCgndXNlcm5hbWVBbGlhc0F0dHJpYnV0ZXMgbXVzdCBiZSBvbmUgb3IgbW9yZSBvZiBFTUFJTCwgUEhPTkVfTlVNQkVSLCBvciBQUkVGRVJSRURfVVNFUk5BTUUnLCAoKSA9PiB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBuZXcgVXNlclBvb2woc3RhY2ssICdQb29sJywge1xuICAgICAgICBzaWduSW5UeXBlOiBTaWduSW5UeXBlLlVTRVJOQU1FLFxuICAgICAgICB1c2VybmFtZUFsaWFzQXR0cmlidXRlczogWyBVc2VyUG9vbEF0dHJpYnV0ZS5HSVZFTl9OQU1FIF1cbiAgICAgIH0pO1xuICAgIH0pLnRvVGhyb3coLyd1c2VybmFtZUFsaWFzQXR0cmlidXRlcycgY2FuIG9ubHkgaW5jbHVkZSBFTUFJTCwgUEhPTkVfTlVNQkVSLCBvciBQUkVGRVJSRURfVVNFUk5BTUUvKTtcbiAgfSk7XG5cbiAgdGVzdCgnYXV0b1ZlcmlmaWVkQXR0cmlidXRlcyBtdXN0IGJlIG9uZSBvciBtb3JlIG9mIEVNQUlMIG9yIFBIT05FX05VTUJFUicsICgpID0+IHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIG5ldyBVc2VyUG9vbChzdGFjaywgJ1Bvb2wnLCB7XG4gICAgICAgIHNpZ25JblR5cGU6IFNpZ25JblR5cGUuRU1BSUwsXG4gICAgICAgIGF1dG9WZXJpZmllZEF0dHJpYnV0ZXM6IFsgVXNlclBvb2xBdHRyaWJ1dGUuRU1BSUwsIFVzZXJQb29sQXR0cmlidXRlLkdFTkRFUiBdXG4gICAgICB9KTtcbiAgICB9KS50b1Rocm93KC8nYXV0b1ZlcmlmaWVkQXR0cmlidXRlcycgY2FuIG9ubHkgaW5jbHVkZSBFTUFJTCBvciBQSE9ORV9OVU1CRVIvKTtcbiAgfSk7XG59KTsiXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1wb29sLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1c2VyLXBvb2wudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGdDQUE4QjtBQUM5QixnRkFBc0U7QUFDdEUsOENBQXdDO0FBQ3hDLDhDQUE4QztBQUM5Qyx3Q0FBMkM7QUFDM0MsZ0NBQXlGO0FBRXpGLFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO0lBQ3pCLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO1FBQ3pCLFFBQVE7UUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLFlBQUssRUFBRSxDQUFDO1FBRTFCLE9BQU87UUFDUCxJQUFJLGNBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFNUIsT0FBTztRQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsd0JBQXdCLEVBQUU7WUFDckQscUJBQXFCLEVBQUU7Z0JBQ3JCLHdCQUF3QixFQUFFLElBQUk7Z0JBQzlCLHFCQUFxQixFQUFFLHNCQUFNO2FBQzlCO1lBQ0Qsd0JBQXdCLEVBQUUsb0RBQW9EO1lBQzlFLHdCQUF3QixFQUFFLHlCQUF5QjtZQUNuRCxzQkFBc0IsRUFBRSxxREFBcUQ7WUFDN0UsMkJBQTJCLEVBQUU7Z0JBQzNCLGtCQUFrQixFQUFFLG1CQUFtQjtnQkFDdkMsWUFBWSxFQUFFLG9EQUFvRDtnQkFDbEUsWUFBWSxFQUFFLHlCQUF5QjtnQkFDdkMsVUFBVSxFQUFFLHFEQUFxRDthQUNsRTtZQUNELGdCQUFnQixFQUFFO2dCQUNoQixZQUFZLEVBQUU7b0JBQ1osWUFBWSxFQUFFLENBQUUscUJBQXFCLEVBQUUsS0FBSyxDQUFFO2lCQUMvQztnQkFDRCxVQUFVLEVBQUUsTUFBTTthQUNuQjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRTtZQUNqRCx3QkFBd0IsRUFBRTtn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LElBQUksQ0FBQyxxRUFBcUUsRUFBRSxHQUFHLEVBQUU7UUFDL0UsTUFBTSxLQUFLLEdBQUcsSUFBSSxZQUFLLEVBQUUsQ0FBQztRQUUxQixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxjQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtnQkFDMUIsVUFBVSxFQUFFLGdCQUFVLENBQUMsS0FBSztnQkFDNUIsc0JBQXNCLEVBQUUsQ0FBRSx1QkFBaUIsQ0FBQyxLQUFLLEVBQUUsdUJBQWlCLENBQUMsTUFBTSxDQUFFO2FBQzlFLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO0lBQ2hGLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ0Bhd3MtY2RrL2Fzc2VydC9qZXN0JztcbmltcG9ydCB7IEFCU0VOVCB9IGZyb20gJ0Bhd3MtY2RrL2Fzc2VydC9saWIvYXNzZXJ0aW9ucy9oYXZlLXJlc291cmNlJztcbmltcG9ydCB7IFJvbGUgfSBmcm9tICdAYXdzLWNkay9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdAYXdzLWNkay9hd3MtbGFtYmRhJztcbmltcG9ydCB7IFN0YWNrLCBUYWcgfSBmcm9tICdAYXdzLWNkay9jb3JlJztcbmltcG9ydCB7IFNpZ25JblR5cGUsIFVzZXJQb29sLCBVc2VyUG9vbEF0dHJpYnV0ZSwgVmVyaWZpY2F0aW9uRW1haWxTdHlsZSB9IGZyb20gJy4uL2xpYic7XG5cbmRlc2NyaWJlKCdVc2VyIFBvb2wnLCAoKSA9PiB7XG4gIHRlc3QoJ2RlZmF1bHQgc2V0dXAnLCAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gICAgLy8gV0hFTlxuICAgIG5ldyBVc2VyUG9vbChzdGFjaywgJ1Bvb2wnKTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3Qoc3RhY2spLnRvSGF2ZVJlc291cmNlKCdBV1M6OkNvZ25pdG86OlVzZXJQb29sJywge1xuICAgICAgQWRtaW5DcmVhdGVVc2VyQ29uZmlnOiB7XG4gICAgICAgIEFsbG93QWRtaW5DcmVhdGVVc2VyT25seTogdHJ1ZSxcbiAgICAgICAgSW52aXRlTWVzc2FnZVRlbXBsYXRlOiBBQlNFTlRcbiAgICAgIH0sXG4gICAgICBFbWFpbFZlcmlmaWNhdGlvbk1lc3NhZ2U6ICdIZWxsbyB7dXNlcm5hbWV9LCBZb3VyIHZlcmlmaWNhdGlvbiBjb2RlIGlzIHsjIyMjfScsXG4gICAgICBFbWFpbFZlcmlmaWNhdGlvblN1YmplY3Q6ICdWZXJpZnkgeW91ciBuZXcgYWNjb3VudCcsXG4gICAgICBTbXNWZXJpZmljYXRpb25NZXNzYWdlOiAnVGhlIHZlcmlmaWNhdGlvbiBjb2RlIHRvIHlvdXIgbmV3IGFjY291bnQgaXMgeyMjIyN9JyxcbiAgICAgIFZlcmlmaWNhdGlvbk1lc3NhZ2VUZW1wbGF0ZToge1xuICAgICAgICBEZWZhdWx0RW1haWxPcHRpb246ICdDT05GSVJNX1dJVEhfQ09ERScsXG4gICAgICAgIEVtYWlsTWVzc2FnZTogJ0hlbGxvIHt1c2VybmFtZX0sIFlvdXIgdmVyaWZpY2F0aW9uIGNvZGUgaXMgeyMjIyN9JyxcbiAgICAgICAgRW1haWxTdWJqZWN0OiAnVmVyaWZ5IHlvdXIgbmV3IGFjY291bnQnLFxuICAgICAgICBTbXNNZXNzYWdlOiAnVGhlIHZlcmlmaWNhdGlvbiBjb2RlIHRvIHlvdXIgbmV3IGFjY291bnQgaXMgeyMjIyN9JyxcbiAgICAgIH0sXG4gICAgICBTbXNDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIFNuc0NhbGxlckFybjoge1xuICAgICAgICAgICdGbjo6R2V0QXR0JzogWyAnUG9vbHNtc1JvbGVDMzM1MkNFNicsICdBcm4nIF0sXG4gICAgICAgIH0sXG4gICAgICAgIEV4dGVybmFsSWQ6ICdQb29sJ1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZUxpa2UoJ0FXUzo6SUFNOjpSb2xlJywge1xuICAgICAgQXNzdW1lUm9sZVBvbGljeURvY3VtZW50OiB7XG4gICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIEFjdGlvbjogJ3N0czpBc3N1bWVSb2xlJyxcbiAgICAgICAgICAgIENvbmRpdGlvbjoge1xuICAgICAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgICAgICAnc3RzOkV4dGVybmFsSWQnOiAnUG9vbCdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgIFByaW5jaXBhbDoge1xuICAgICAgICAgICAgICBTZXJ2aWNlOiAnY29nbml0by1pZHAuYW1hem9uYXdzLmNvbSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBQb2xpY2llczogW1xuICAgICAgICB7XG4gICAgICAgICAgUG9saWN5RG9jdW1lbnQ6IHtcbiAgICAgICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgQWN0aW9uOiAnc25zOlB1Ymxpc2gnLFxuICAgICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgICBSZXNvdXJjZTogJyonXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnc2VsZiBzaWduIHVwIG9wdGlvbiBpcyBjb3JyZWN0bHkgY29uZmlndXJlZCcsICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgICAvLyBXSEVOXG4gICAgbmV3IFVzZXJQb29sKHN0YWNrLCAnUG9vbCcsIHtcbiAgICAgIHNlbGZTaWduVXBFbmFibGVkOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZSgnQVdTOjpDb2duaXRvOjpVc2VyUG9vbCcsIHtcbiAgICAgIEFkbWluQ3JlYXRlVXNlckNvbmZpZzoge1xuICAgICAgICBBbGxvd0FkbWluQ3JlYXRlVXNlck9ubHk6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2VtYWlsIHZlcmlmaWNhdGlvbiB2aWEgbGluayBpcyBjb25maWd1cmVkIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgICAvLyBXSEVOXG4gICAgbmV3IFVzZXJQb29sKHN0YWNrLCAnUG9vbCcsIHtcbiAgICAgIHVzZXJWZXJpZmljYXRpb246IHtcbiAgICAgICAgZW1haWxTdHlsZTogVmVyaWZpY2F0aW9uRW1haWxTdHlsZS5MSU5LXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZUxpa2UoJ0FXUzo6Q29nbml0bzo6VXNlclBvb2wnLCB7XG4gICAgICBFbWFpbFZlcmlmaWNhdGlvbk1lc3NhZ2U6ICdIZWxsbyB7dXNlcm5hbWV9LCBZb3VyIHZlcmlmaWNhdGlvbiBjb2RlIGlzIHsjIyMjfScsXG4gICAgICBFbWFpbFZlcmlmaWNhdGlvblN1YmplY3Q6ICdWZXJpZnkgeW91ciBuZXcgYWNjb3VudCcsXG4gICAgICBWZXJpZmljYXRpb25NZXNzYWdlVGVtcGxhdGU6IHtcbiAgICAgICAgRGVmYXVsdEVtYWlsT3B0aW9uOiAnQ09ORklSTV9XSVRIX0xJTksnLFxuICAgICAgICBFbWFpbE1lc3NhZ2VCeUxpbms6ICdIZWxsbyB7dXNlcm5hbWV9LCBZb3VyIHZlcmlmaWNhdGlvbiBjb2RlIGlzIHsjIyMjfScsXG4gICAgICAgIEVtYWlsU3ViamVjdEJ5TGluazogJ1ZlcmlmeSB5b3VyIG5ldyBhY2NvdW50JyxcbiAgICAgIH1cbiAgICB9KTtcbiAgfSksXG5cbiAgdGVzdCgndXNlciBpbnZpdGF0aW9uIG1lc3NhZ2VzIGFyZSBjb25maWd1cmVkIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgICAvLyBXSEVOXG4gICAgbmV3IFVzZXJQb29sKHN0YWNrLCAnUG9vbCcsIHtcbiAgICAgIHVzZXJJbnZpdGF0aW9uOiB7XG4gICAgICAgIGVtYWlsQm9keTogJ2ludml0YXRpb24gZW1haWwgYm9keScsXG4gICAgICAgIGVtYWlsU3ViamVjdDogJ2ludml0YXRpb24gZW1haWwgc3ViamVjdCcsXG4gICAgICAgIHNtc01lc3NhZ2U6ICdpbnZpdGF0aW9uIHNtcydcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3Qoc3RhY2spLnRvSGF2ZVJlc291cmNlTGlrZSgnQVdTOjpDb2duaXRvOjpVc2VyUG9vbCcsIHtcbiAgICAgIEFkbWluQ3JlYXRlVXNlckNvbmZpZzoge1xuICAgICAgICBJbnZpdGVNZXNzYWdlVGVtcGxhdGU6IHtcbiAgICAgICAgICBFbWFpbE1lc3NhZ2U6ICdpbnZpdGF0aW9uIGVtYWlsIGJvZHknLFxuICAgICAgICAgIEVtYWlsU3ViamVjdDogJ2ludml0YXRpb24gZW1haWwgc3ViamVjdCcsXG4gICAgICAgICAgU01TTWVzc2FnZTogJ2ludml0YXRpb24gc21zJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3Ntc1JvbGUgcHJvcGVydHkgaXMgcmVjb2duaXplZCcsICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgY29uc3Qgcm9sZSA9IFJvbGUuZnJvbVJvbGVBcm4oc3RhY2ssICdzbXNSb2xlJywgJ2Fybjphd3M6aWFtOjo2NjQ3NzM0NDI5MDE6cm9sZS9zbXMtcm9sZScpO1xuXG4gICAgLy8gV0hFTlxuICAgIG5ldyBVc2VyUG9vbChzdGFjaywgJ1Bvb2wnLCB7XG4gICAgICBzbXNSb2xlOiByb2xlLFxuICAgICAgc21zUm9sZUV4dGVybmFsSWQ6ICd0ZXN0LWV4dGVybmFsLWlkJ1xuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChzdGFjaykudG9IYXZlUmVzb3VyY2VMaWtlKCdBV1M6OkNvZ25pdG86OlVzZXJQb29sJywge1xuICAgICAgU21zQ29uZmlndXJhdGlvbjoge1xuICAgICAgICBFeHRlcm5hbElkOiAndGVzdC1leHRlcm5hbC1pZCcsXG4gICAgICAgIFNuc0NhbGxlckFybjogcm9sZS5yb2xlQXJuXG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3N1cHBvcnQgdGFncycsICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgcG9vbCA9IG5ldyBVc2VyUG9vbChzdGFjaywgJ1Bvb2wnLCB7XG4gICAgICB1c2VyUG9vbE5hbWU6ICdteVBvb2wnLFxuICAgIH0pO1xuICAgIFRhZy5hZGQocG9vbCwgJ1Bvb2xUYWcnLCAnUG9vbFBhcnR5Jyk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZUxpa2UoJ0FXUzo6Q29nbml0bzo6VXNlclBvb2wnLCB7XG4gICAgICBVc2VyUG9vbE5hbWU6ICdteVBvb2wnLFxuICAgICAgVXNlclBvb2xUYWdzOiB7XG4gICAgICAgIFBvb2xUYWc6ICdQb29sUGFydHknLFxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdsYW1iZGEgdHJpZ2dlcnMgYXJlIGRlZmluZWQnLCAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgIGNvbnN0IGZuID0gbmV3IGxhbWJkYS5GdW5jdGlvbihzdGFjaywgJ015TGFtYmRhJywge1xuICAgICAgY29kZTogbmV3IGxhbWJkYS5JbmxpbmVDb2RlKCdmb28nKSxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xMF9YLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IHBvb2wgPSBuZXcgVXNlclBvb2woc3RhY2ssICdQb29sJywge1xuICAgICAgbGFtYmRhVHJpZ2dlcnM6IHtcbiAgICAgICAgcHJlU2lnblVwOiBmblxuICAgICAgfVxuICAgIH0pO1xuICAgIHBvb2wuYWRkQ3VzdG9tTWVzc2FnZVRyaWdnZXIoZm4pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChzdGFjaykudG9IYXZlUmVzb3VyY2VMaWtlKCdBV1M6OkNvZ25pdG86OlVzZXJQb29sJywge1xuICAgICAgTGFtYmRhQ29uZmlnOiB7XG4gICAgICAgIFByZVNpZ25VcDogc3RhY2sucmVzb2x2ZShmbi5mdW5jdGlvbkFybiksXG4gICAgICAgIEN1c3RvbU1lc3NhZ2U6IHN0YWNrLnJlc29sdmUoZm4uZnVuY3Rpb25Bcm4pXG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ29uKiBBUEkgY29ycmVjdGx5IGFwcGVuZHMgdHJpZ2dlcnMnLCAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gICAgY29uc3QgY3JlYXRlQXV0aENoYWxsZW5nZUxhbWJkYUZuID0gbmV3IGxhbWJkYS5GdW5jdGlvbihzdGFjaywgJ2NyZWF0ZUF1dGhDaGFsbGVuZ2VMYW1iZGEnLCB7XG4gICAgICBjb2RlOiBuZXcgbGFtYmRhLklubGluZUNvZGUoJ2ZvbycpLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzEwX1gsXG4gICAgfSk7XG5cbiAgICBjb25zdCBjdXN0b21NZXNzYWdlTGFtYmRhRm4gPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHN0YWNrLCAnY3VzdG9tTWVzc2FnZUxhbWJkYScsIHtcbiAgICAgIGNvZGU6IG5ldyBsYW1iZGEuSW5saW5lQ29kZSgnZm9vJyksXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMTBfWCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlZmluZUF1dGhDaGFsbGVuZ2VMYW1iZGFGbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24oc3RhY2ssICdkZWZpbmVBdXRoQ2hhbGxlbmdlTGFtYmRhJywge1xuICAgICAgY29kZTogbmV3IGxhbWJkYS5JbmxpbmVDb2RlKCdmb28nKSxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xMF9YLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcG9zdEF1dGhlbnRpY2F0aW9uTGFtYmRhRm4gPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHN0YWNrLCAncG9zdEF1dGhlbnRpY2F0aW9uTGFtYmRhJywge1xuICAgICAgY29kZTogbmV3IGxhbWJkYS5JbmxpbmVDb2RlKCdmb28nKSxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xMF9YLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcG9zdENvbmZpcm1hdGlvbkxhbWJkYUZuID0gbmV3IGxhbWJkYS5GdW5jdGlvbihzdGFjaywgJ3Bvc3RDb25maXJtYXRpb25MYW1iZGEnLCB7XG4gICAgICBjb2RlOiBuZXcgbGFtYmRhLklubGluZUNvZGUoJ2ZvbycpLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzEwX1gsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwcmVBdXRoZW50aWNhdGlvbkxhbWJkYUZuID0gbmV3IGxhbWJkYS5GdW5jdGlvbihzdGFjaywgJ3ByZUF1dGhlbnRpY2F0aW9uTGFtYmRhJywge1xuICAgICAgY29kZTogbmV3IGxhbWJkYS5JbmxpbmVDb2RlKCdmb28nKSxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xMF9YLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcHJlU2lnblVwTGFtYmRhRm4gPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHN0YWNrLCAncHJlU2lnblVwTGFtYmRhJywge1xuICAgICAgY29kZTogbmV3IGxhbWJkYS5JbmxpbmVDb2RlKCdmb28nKSxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xMF9YLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcHJlVG9rZW5HZW5lcmF0aW9uTGFtYmRhRm4gPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHN0YWNrLCAncHJlVG9rZW5HZW5lcmF0aW9uTGFtYmRhJywge1xuICAgICAgY29kZTogbmV3IGxhbWJkYS5JbmxpbmVDb2RlKCdmb28nKSxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xMF9YLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdXNlck1pZ3JhdGlvbkxhbWJkYUZuID0gbmV3IGxhbWJkYS5GdW5jdGlvbihzdGFjaywgJ3VzZXJNaWdyYXRpb25MYW1iZGEnLCB7XG4gICAgICBjb2RlOiBuZXcgbGFtYmRhLklubGluZUNvZGUoJ2ZvbycpLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzEwX1gsXG4gICAgfSk7XG5cbiAgICBjb25zdCB2ZXJpZnlBdXRoQ2hhbGxlbmdlUmVzcG9uc2VMYW1iZGFGbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24oc3RhY2ssICd2ZXJpZnlBdXRoQ2hhbGxlbmdlUmVzcG9uc2VMYW1iZGEnLCB7XG4gICAgICBjb2RlOiBuZXcgbGFtYmRhLklubGluZUNvZGUoJ2ZvbycpLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzEwX1gsXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgcG9vbCA9IG5ldyBVc2VyUG9vbChzdGFjaywgJ1Bvb2wnLCB7IH0pO1xuICAgIHBvb2wuYWRkQ3JlYXRlQXV0aENoYWxsZW5nZVRyaWdnZXIoY3JlYXRlQXV0aENoYWxsZW5nZUxhbWJkYUZuKTtcbiAgICBwb29sLmFkZEN1c3RvbU1lc3NhZ2VUcmlnZ2VyKGN1c3RvbU1lc3NhZ2VMYW1iZGFGbik7XG4gICAgcG9vbC5hZGREZWZpbmVBdXRoQ2hhbGxlbmdlVHJpZ2dlcihkZWZpbmVBdXRoQ2hhbGxlbmdlTGFtYmRhRm4pO1xuICAgIHBvb2wuYWRkUG9zdEF1dGhlbnRpY2F0aW9uVHJpZ2dlcihwb3N0QXV0aGVudGljYXRpb25MYW1iZGFGbik7XG4gICAgcG9vbC5hZGRQb3N0Q29uZmlybWF0aW9uVHJpZ2dlcihwb3N0Q29uZmlybWF0aW9uTGFtYmRhRm4pO1xuICAgIHBvb2wuYWRkUHJlQXV0aGVudGljYXRpb25UcmlnZ2VyKHByZUF1dGhlbnRpY2F0aW9uTGFtYmRhRm4pO1xuICAgIHBvb2wuYWRkUHJlU2lnblVwVHJpZ2dlcihwcmVTaWduVXBMYW1iZGFGbik7XG4gICAgcG9vbC5hZGRQcmVUb2tlbkdlbmVyYXRpb25UcmlnZ2VyKHByZVRva2VuR2VuZXJhdGlvbkxhbWJkYUZuKTtcbiAgICBwb29sLmFkZFVzZXJNaWdyYXRpb25UcmlnZ2VyKHVzZXJNaWdyYXRpb25MYW1iZGFGbik7XG4gICAgcG9vbC5hZGRWZXJpZnlBdXRoQ2hhbGxlbmdlUmVzcG9uc2VUcmlnZ2VyKHZlcmlmeUF1dGhDaGFsbGVuZ2VSZXNwb25zZUxhbWJkYUZuKTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3Qoc3RhY2spLnRvSGF2ZVJlc291cmNlTGlrZSgnQVdTOjpDb2duaXRvOjpVc2VyUG9vbCcsIHtcbiAgICAgIExhbWJkYUNvbmZpZzoge1xuICAgICAgICBDcmVhdGVBdXRoQ2hhbGxlbmdlOiBzdGFjay5yZXNvbHZlKGNyZWF0ZUF1dGhDaGFsbGVuZ2VMYW1iZGFGbi5mdW5jdGlvbkFybiksXG4gICAgICAgIEN1c3RvbU1lc3NhZ2U6IHN0YWNrLnJlc29sdmUoY3VzdG9tTWVzc2FnZUxhbWJkYUZuLmZ1bmN0aW9uQXJuKSxcbiAgICAgICAgRGVmaW5lQXV0aENoYWxsZW5nZTogc3RhY2sucmVzb2x2ZShkZWZpbmVBdXRoQ2hhbGxlbmdlTGFtYmRhRm4uZnVuY3Rpb25Bcm4pLFxuICAgICAgICBQb3N0QXV0aGVudGljYXRpb246IHN0YWNrLnJlc29sdmUocG9zdEF1dGhlbnRpY2F0aW9uTGFtYmRhRm4uZnVuY3Rpb25Bcm4pLFxuICAgICAgICBQb3N0Q29uZmlybWF0aW9uOiBzdGFjay5yZXNvbHZlKHBvc3RDb25maXJtYXRpb25MYW1iZGFGbi5mdW5jdGlvbkFybiksXG4gICAgICAgIFByZUF1dGhlbnRpY2F0aW9uOiBzdGFjay5yZXNvbHZlKHByZUF1dGhlbnRpY2F0aW9uTGFtYmRhRm4uZnVuY3Rpb25Bcm4pLFxuICAgICAgICBQcmVTaWduVXA6IHN0YWNrLnJlc29sdmUocHJlU2lnblVwTGFtYmRhRm4uZnVuY3Rpb25Bcm4pLFxuICAgICAgICBQcmVUb2tlbkdlbmVyYXRpb246IHN0YWNrLnJlc29sdmUocHJlVG9rZW5HZW5lcmF0aW9uTGFtYmRhRm4uZnVuY3Rpb25Bcm4pLFxuICAgICAgICBVc2VyTWlncmF0aW9uOiBzdGFjay5yZXNvbHZlKHVzZXJNaWdyYXRpb25MYW1iZGFGbi5mdW5jdGlvbkFybiksXG4gICAgICAgIFZlcmlmeUF1dGhDaGFsbGVuZ2VSZXNwb25zZTogc3RhY2sucmVzb2x2ZSh2ZXJpZnlBdXRoQ2hhbGxlbmdlUmVzcG9uc2VMYW1iZGFGbi5mdW5jdGlvbkFybilcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnbGFtYmRhcyBhcmUgZ2l2ZW4gY29nbml0byBzZXJ2aWNlIGdyYW50JywgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICBjb25zdCBmbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24oc3RhY2ssICdNeUxhbWJkYScsIHtcbiAgICAgIGNvZGU6IG5ldyBsYW1iZGEuSW5saW5lQ29kZSgnZm9vJyksXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMTBfWCxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBuZXcgVXNlclBvb2woc3RhY2ssICdQb29sJywge1xuICAgICAgbGFtYmRhVHJpZ2dlcnM6IHtcbiAgICAgICAgcHJlU2lnblVwOiBmblxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChzdGFjaykudG9IYXZlUmVzb3VyY2VMaWtlKCdBV1M6OkxhbWJkYTo6UGVybWlzc2lvbicsIHtcbiAgICAgIEZ1bmN0aW9uTmFtZTogc3RhY2sucmVzb2x2ZShmbi5mdW5jdGlvbkFybiksXG4gICAgICBQcmluY2lwYWw6ICdjb2duaXRvLWlkcC5hbWF6b25hd3MuY29tJ1xuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdzZXQgc2lnbiBpbiB0eXBlJywgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICAgIC8vIFdIRU5cbiAgICBuZXcgVXNlclBvb2woc3RhY2ssICdQb29sJywge1xuICAgICAgc2lnbkluVHlwZTogU2lnbkluVHlwZS5FTUFJTCxcbiAgICAgIGF1dG9WZXJpZmllZEF0dHJpYnV0ZXM6IFsgVXNlclBvb2xBdHRyaWJ1dGUuRU1BSUwgXVxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChzdGFjaykudG9IYXZlUmVzb3VyY2VMaWtlKCdBV1M6OkNvZ25pdG86OlVzZXJQb29sJywge1xuICAgICAgVXNlcm5hbWVBdHRyaWJ1dGVzOiBbICdlbWFpbCcgXSxcbiAgICAgIEF1dG9WZXJpZmllZEF0dHJpYnV0ZXM6IFsgJ2VtYWlsJyBdXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3VzZXJuYW1lQWxpYXNBdHRyaWJ1dGVzIHJlcXVpcmUgc2lnbkluVHlwZSBvZiBVU0VSTkFNRScsICgpID0+IHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIG5ldyBVc2VyUG9vbChzdGFjaywgJ1Bvb2wnLCB7XG4gICAgICAgIHNpZ25JblR5cGU6IFNpZ25JblR5cGUuRU1BSUwsXG4gICAgICAgIHVzZXJuYW1lQWxpYXNBdHRyaWJ1dGVzOiBbIFVzZXJQb29sQXR0cmlidXRlLlBSRUZFUlJFRF9VU0VSTkFNRSBdXG4gICAgICB9KTtcbiAgICB9KS50b1Rocm93KC8ndXNlcm5hbWVBbGlhc0F0dHJpYnV0ZXMnIGNhbiBvbmx5IGJlIHNldCB3aXRoIGEgc2lnbkluVHlwZSBvZiAnVVNFUk5BTUUnLyk7XG4gIH0pO1xuXG4gIHRlc3QoJ3VzZXJuYW1lQWxpYXNBdHRyaWJ1dGVzIG11c3QgYmUgb25lIG9yIG1vcmUgb2YgRU1BSUwsIFBIT05FX05VTUJFUiwgb3IgUFJFRkVSUkVEX1VTRVJOQU1FJywgKCkgPT4ge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgbmV3IFVzZXJQb29sKHN0YWNrLCAnUG9vbCcsIHtcbiAgICAgICAgc2lnbkluVHlwZTogU2lnbkluVHlwZS5VU0VSTkFNRSxcbiAgICAgICAgdXNlcm5hbWVBbGlhc0F0dHJpYnV0ZXM6IFsgVXNlclBvb2xBdHRyaWJ1dGUuR0lWRU5fTkFNRSBdXG4gICAgICB9KTtcbiAgICB9KS50b1Rocm93KC8ndXNlcm5hbWVBbGlhc0F0dHJpYnV0ZXMnIGNhbiBvbmx5IGluY2x1ZGUgRU1BSUwsIFBIT05FX05VTUJFUiwgb3IgUFJFRkVSUkVEX1VTRVJOQU1FLyk7XG4gIH0pO1xuXG4gIHRlc3QoJ2F1dG9WZXJpZmllZEF0dHJpYnV0ZXMgbXVzdCBiZSBvbmUgb3IgbW9yZSBvZiBFTUFJTCBvciBQSE9ORV9OVU1CRVInLCAoKSA9PiB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBuZXcgVXNlclBvb2woc3RhY2ssICdQb29sJywge1xuICAgICAgICBzaWduSW5UeXBlOiBTaWduSW5UeXBlLkVNQUlMLFxuICAgICAgICBhdXRvVmVyaWZpZWRBdHRyaWJ1dGVzOiBbIFVzZXJQb29sQXR0cmlidXRlLkVNQUlMLCBVc2VyUG9vbEF0dHJpYnV0ZS5HRU5ERVIgXVxuICAgICAgfSk7XG4gICAgfSkudG9UaHJvdygvJ2F1dG9WZXJpZmllZEF0dHJpYnV0ZXMnIGNhbiBvbmx5IGluY2x1ZGUgRU1BSUwgb3IgUEhPTkVfTlVNQkVSLyk7XG4gIH0pO1xufSk7Il19

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 too big to display

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