UNPKG

awscdk-resources-mongodbatlas

Version:

MongoDB Atlas CDK Construct Library for AWS CloudFormation Resources

310 lines 72.7 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.CfnCluster = exports.AdvancedRegionConfigProviderName = exports.CfnClusterPropsEncryptionAtRestProvider = void 0; exports.toJson_CfnClusterProps = toJson_CfnClusterProps; exports.toJson_ProcessArgs = toJson_ProcessArgs; exports.toJson_CfnClusterPropsBiConnector = toJson_CfnClusterPropsBiConnector; exports.toJson_ConnectionStrings = toJson_ConnectionStrings; exports.toJson_CfnClusterPropsLabels = toJson_CfnClusterPropsLabels; exports.toJson_AdvancedReplicationSpec = toJson_AdvancedReplicationSpec; exports.toJson_Tag = toJson_Tag; exports.toJson_AdvancedRegionConfig = toJson_AdvancedRegionConfig; exports.toJson_AdvancedAutoScaling = toJson_AdvancedAutoScaling; exports.toJson_Specs = toJson_Specs; exports.toJson_DiskGb = toJson_DiskGb; exports.toJson_Compute = toJson_Compute; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); // Generated by cdk-import const cdk = require("aws-cdk-lib"); /** * Converts an object of type 'CfnClusterProps' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnClusterProps(obj) { if (obj === undefined) { return undefined; } const result = { AdvancedSettings: toJson_ProcessArgs(obj.advancedSettings), BackupEnabled: obj.backupEnabled, BiConnector: toJson_CfnClusterPropsBiConnector(obj.biConnector), ClusterType: obj.clusterType, ConnectionStrings: toJson_ConnectionStrings(obj.connectionStrings), DiskSizeGB: obj.diskSizeGb, EncryptionAtRestProvider: obj.encryptionAtRestProvider, GlobalClusterSelfManagedSharding: obj.globalClusterSelfManagedSharding, Profile: obj.profile, ProjectId: obj.projectId, Labels: obj.labels?.map((y) => toJson_CfnClusterPropsLabels(y)), MongoDBMajorVersion: obj.mongoDbMajorVersion, Name: obj.name, Paused: obj.paused, PitEnabled: obj.pitEnabled, ReplicationSpecs: obj.replicationSpecs?.map((y) => toJson_AdvancedReplicationSpec(y)), RootCertType: obj.rootCertType, VersionReleaseSystem: obj.versionReleaseSystem, TerminationProtectionEnabled: obj.terminationProtectionEnabled, Tags: obj.tags?.map((y) => toJson_Tag(y)), }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'ProcessArgs' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_ProcessArgs(obj) { if (obj === undefined) { return undefined; } const result = { DefaultReadConcern: obj.defaultReadConcern, DefaultWriteConcern: obj.defaultWriteConcern, FailIndexKeyTooLong: obj.failIndexKeyTooLong, JavascriptEnabled: obj.javascriptEnabled, MinimumEnabledTLSProtocol: obj.minimumEnabledTlsProtocol, NoTableScan: obj.noTableScan, OplogSizeMB: obj.oplogSizeMb, SampleSizeBIConnector: obj.sampleSizeBiConnector, SampleRefreshIntervalBIConnector: obj.sampleRefreshIntervalBiConnector, OplogMinRetentionHours: obj.oplogMinRetentionHours, TransactionLifetimeLimitSeconds: obj.transactionLifetimeLimitSeconds, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'CfnClusterPropsBiConnector' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnClusterPropsBiConnector(obj) { if (obj === undefined) { return undefined; } const result = { ReadPreference: obj.readPreference, Enabled: obj.enabled, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'ConnectionStrings' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_ConnectionStrings(obj) { if (obj === undefined) { return undefined; } const result = { Standard: obj.standard, StandardSrv: obj.standardSrv, Private: obj.private, PrivateSrv: obj.privateSrv, PrivateEndpoints: obj.privateEndpoints?.map((y) => y), PrivateEndpointsSrv: obj.privateEndpointsSrv?.map((y) => y), SRVShardOptimizedConnectionString: obj.srvShardOptimizedConnectionString?.map((y) => y), }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /* eslint-enable max-len, quote-props */ /** * Cloud service provider that manages your customer keys to provide an additional layer of encryption at rest for the cluster. To enable customer key management for encryption at rest, the cluster replicationSpecs[n].regionConfigs[m].{type}Specs.instanceSize setting must be M10 or higher and "backupEnabled" : false or omitted entirely. * * @schema CfnClusterPropsEncryptionAtRestProvider */ var CfnClusterPropsEncryptionAtRestProvider; (function (CfnClusterPropsEncryptionAtRestProvider) { /** AWS */ CfnClusterPropsEncryptionAtRestProvider["AWS"] = "AWS"; /** GCP */ CfnClusterPropsEncryptionAtRestProvider["GCP"] = "GCP"; /** AZURE */ CfnClusterPropsEncryptionAtRestProvider["AZURE"] = "AZURE"; /** NONE */ CfnClusterPropsEncryptionAtRestProvider["NONE"] = "NONE"; })(CfnClusterPropsEncryptionAtRestProvider || (exports.CfnClusterPropsEncryptionAtRestProvider = CfnClusterPropsEncryptionAtRestProvider = {})); /** * Converts an object of type 'CfnClusterPropsLabels' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnClusterPropsLabels(obj) { if (obj === undefined) { return undefined; } const result = { Key: obj.key, Value: obj.value, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'AdvancedReplicationSpec' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_AdvancedReplicationSpec(obj) { if (obj === undefined) { return undefined; } const result = { ID: obj.id, NumShards: obj.numShards, AdvancedRegionConfigs: obj.advancedRegionConfigs?.map((y) => toJson_AdvancedRegionConfig(y)), ZoneName: obj.zoneName, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'Tag' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_Tag(obj) { if (obj === undefined) { return undefined; } const result = { Key: obj.key, Value: obj.value, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'AdvancedRegionConfig' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_AdvancedRegionConfig(obj) { if (obj === undefined) { return undefined; } const result = { AnalyticsAutoScaling: toJson_AdvancedAutoScaling(obj.analyticsAutoScaling), AutoScaling: toJson_AdvancedAutoScaling(obj.autoScaling), RegionName: obj.regionName, BackingProviderName: obj.backingProviderName, ProviderName: obj.providerName, AnalyticsSpecs: toJson_Specs(obj.analyticsSpecs), ElectableSpecs: toJson_Specs(obj.electableSpecs), Priority: obj.priority, ReadOnlySpecs: toJson_Specs(obj.readOnlySpecs), }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'AdvancedAutoScaling' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_AdvancedAutoScaling(obj) { if (obj === undefined) { return undefined; } const result = { DiskGB: toJson_DiskGb(obj.diskGb), Compute: toJson_Compute(obj.compute), }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /* eslint-enable max-len, quote-props */ /** * @schema AdvancedRegionConfigProviderName */ var AdvancedRegionConfigProviderName; (function (AdvancedRegionConfigProviderName) { /** AWS */ AdvancedRegionConfigProviderName["AWS"] = "AWS"; /** GCP */ AdvancedRegionConfigProviderName["GCP"] = "GCP"; /** AZURE */ AdvancedRegionConfigProviderName["AZURE"] = "AZURE"; /** TENANT */ AdvancedRegionConfigProviderName["TENANT"] = "TENANT"; })(AdvancedRegionConfigProviderName || (exports.AdvancedRegionConfigProviderName = AdvancedRegionConfigProviderName = {})); /** * Converts an object of type 'Specs' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_Specs(obj) { if (obj === undefined) { return undefined; } const result = { DiskIOPS: obj.diskIops, EbsVolumeType: obj.ebsVolumeType, InstanceSize: obj.instanceSize, NodeCount: obj.nodeCount, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'DiskGb' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_DiskGb(obj) { if (obj === undefined) { return undefined; } const result = { Enabled: obj.enabled, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'Compute' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_Compute(obj) { if (obj === undefined) { return undefined; } const result = { Enabled: obj.enabled, ScaleDownEnabled: obj.scaleDownEnabled, MinInstanceSize: obj.minInstanceSize, MaxInstanceSize: obj.maxInstanceSize, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /* eslint-enable max-len, quote-props */ /** * A CloudFormation `MongoDB::Atlas::Cluster` * * @cloudformationResource MongoDB::Atlas::Cluster * @stability external */ class CfnCluster extends cdk.CfnResource { /** * Create a new `MongoDB::Atlas::Cluster`. * * @param scope - scope in which this resource is defined * @param id - scoped id of the resource * @param props - resource properties */ constructor(scope, id, props) { super(scope, id, { type: CfnCluster.CFN_RESOURCE_TYPE_NAME, properties: toJson_CfnClusterProps(props), }); this.props = props; this.attrStateName = cdk.Token.asString(this.getAtt("StateName")); this.attrMongoDBVersion = cdk.Token.asString(this.getAtt("MongoDBVersion")); this.attrCreatedDate = cdk.Token.asString(this.getAtt("CreatedDate")); this.attrId = cdk.Token.asString(this.getAtt("Id")); } } exports.CfnCluster = CfnCluster; _a = JSII_RTTI_SYMBOL_1; CfnCluster[_a] = { fqn: "awscdk-resources-mongodbatlas.CfnCluster", version: "3.10.0" }; /** * The CloudFormation resource type name for this resource class. */ CfnCluster.CFN_RESOURCE_TYPE_NAME = "MongoDB::Atlas::Cluster"; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbDEtcmVzb3VyY2VzL2NsdXN0ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQXlKQSx3REFtQ0M7QUEyRkQsZ0RBd0JDO0FBNkJELDhFQWVDO0FBK0RELDREQXFCQztBQXNDRCxvRUFlQztBQThDRCx3RUFtQkM7QUE0QkQsZ0NBZUM7QUErREQsa0VBc0JDO0FBd0JELGdFQWVDO0FBaUVELG9DQWlCQztBQXFCRCxzQ0FjQztBQTZDRCx3Q0FpQkM7O0FBLzNCRCwwQkFBMEI7QUFDMUIsbUNBQW1DO0FBb0puQzs7R0FFRztBQUNILHlDQUF5QztBQUN6QyxTQUFnQixzQkFBc0IsQ0FDcEMsR0FBZ0M7SUFFaEMsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDdEIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHO1FBQ2IsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDO1FBQzFELGFBQWEsRUFBRSxHQUFHLENBQUMsYUFBYTtRQUNoQyxXQUFXLEVBQUUsaUNBQWlDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUMvRCxXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVc7UUFDNUIsaUJBQWlCLEVBQUUsd0JBQXdCLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO1FBQ2xFLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVTtRQUMxQix3QkFBd0IsRUFBRSxHQUFHLENBQUMsd0JBQXdCO1FBQ3RELGdDQUFnQyxFQUFFLEdBQUcsQ0FBQyxnQ0FBZ0M7UUFDdEUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO1FBQ3BCLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztRQUN4QixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFD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VUFBVSxFQUFFLHNCQUFzQixDQUFDLEtBQUssQ0FBRTtTQUMzQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQzs7QUEvQ0gsZ0NBZ0RDOzs7QUEvQ0M7O0dBRUc7QUFDb0IsaUNBQXNCLEdBQUcseUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHZW5lcmF0ZWQgYnkgY2RrLWltcG9ydFxuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIFRoZSBjbHVzdGVyIHJlc291cmNlIHByb3ZpZGVzIGFjY2VzcyB0byB5b3VyIGNsdXN0ZXIgY29uZmlndXJhdGlvbnMuIFRoZSByZXNvdXJjZSBsZXRzIHlvdSBjcmVhdGUsIGVkaXQgYW5kIGRlbGV0ZSBjbHVzdGVycy4gVGhlIHJlc291cmNlIHJlcXVpcmVzIHlvdXIgUHJvamVjdCBJRC5cbiAqXG4gKiBAc2NoZW1hIENmbkNsdXN0ZXJQcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENmbkNsdXN0ZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIENmbkNsdXN0ZXJQcm9wcyNBZHZhbmNlZFNldHRpbmdzXG4gICAqL1xuICByZWFkb25seSBhZHZhbmNlZFNldHRpbmdzPzogUHJvY2Vzc0FyZ3M7XG5cbiAgLyoqXG4gICAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY2x1c3RlciBjYW4gcGVyZm9ybSBiYWNrdXBzLiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGNsdXN0ZXIgY2FuIHBlcmZvcm0gYmFja3Vwcy4gWW91IG11c3Qgc2V0IHRoaXMgdmFsdWUgdG8gdHJ1ZSBmb3IgTlZNZSBjbHVzdGVycy4gQmFja3VwIHVzZXMgQ2xvdWQgQmFja3VwcyBmb3IgZGVkaWNhdGVkIGNsdXN0ZXJzIGFuZCBTaGFyZWQgQ2x1c3RlciBCYWNrdXBzIGZvciB0ZW5hbnQgY2x1c3RlcnMuIElmIHNldCB0byBmYWxzZSwgdGhlIGNsdXN0ZXIgZG9lc24ndCB1c2UgYmFja3Vwcy5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbHVzdGVyUHJvcHMjQmFja3VwRW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgYmFja3VwRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNldHRpbmdzIG5lZWRlZCB0byBjb25maWd1cmUgdGhlIE1vbmdvREIgQ29ubmVjdG9yIGZvciBCdXNpbmVzcyBJbnRlbGxpZ2VuY2UgZm9yIHRoaXMgY2x1c3Rlci5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbHVzdGVyUHJvcHMjQmlDb25uZWN0b3JcbiAgICovXG4gIHJlYWRvbmx5IGJpQ29ubmVjdG9yPzogQ2ZuQ2x1c3RlclByb3BzQmlDb25uZWN0b3I7XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gb2Ygbm9kZXMgdGhhdCBjb21wcmlzZSB0aGUgY2x1c3Rlci5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbHVzdGVyUHJvcHMjQ2x1c3RlclR5cGVcbiAgICovXG4gIHJlYWRvbmx5IGNsdXN0ZXJUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZXQgb2YgY29ubmVjdGlvbiBzdHJpbmdzIHRoYXQgeW91ciBhcHBsaWNhdGlvbnMgdXNlIHRvIGNvbm5lY3QgdG8gdGhpcyBjbHVzdGVyLiBVc2UgdGhlIHBhcmFtZXRlcnMgaW4gdGhpcyBvYmplY3QgdG8gY29ubmVjdCB5b3VyIGFwcGxpY2F0aW9ucyB0byB0aGlzIGNsdXN0ZXIuIFNlZSB0aGUgTW9uZ29EQiBbQ29ubmVjdGlvbiBTdHJpbmcgVVJJIEZvcm1hdF0oaHR0cHM6Ly9kb2NzLm1vbmdvZGIuY29tL21hbnVhbC9yZWZlcmVuY2UvY29ubmVjdGlvbi1zdHJpbmcvKSByZWZlcmVuY2UgZm9yIGZ1cnRoZXIgZGV0YWlscy5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbHVzdGVyUHJvcHMjQ29ubmVjdGlvblN0cmluZ3NcbiAgICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25TdHJpbmdzPzogQ29ubmVjdGlvblN0cmluZ3M7XG5cbiAgLyoqXG4gICAqIFN0b3JhZ2UgY2FwYWNpdHkgdGhhdCB0aGUgaG9zdCdzIHJvb3Qgdm9sdW1lIHBvc3Nlc3NlcyBleHByZXNzZWQgaW4gZ2lnYWJ5dGVzLiBJbmNyZWFzZSB0aGlzIG51bWJlciB0byBhZGQgY2FwYWNpdHkuIE1vbmdvREIgQ2xvdWQgcmVxdWlyZXMgdGhpcyBwYXJhbWV0ZXIgaWYgeW91IHNldCByZXBsaWNhdGlvblNwZWNzLiBJZiB5b3Ugc3BlY2lmeSBhIGRpc2sgc2l6ZSBiZWxvdyB0aGUgbWluaW11bSAoMTAgR0IpLCB0aGlzIHBhcmFtZXRlciBkZWZhdWx0cyB0byB0aGUgbWluaW11bSBkaXNrIHNpemUgdmFsdWUuIFN0b3JhZ2UgY2hhcmdlIGNhbGN1bGF0aW9ucyBkZXBlbmQgb24gd2hldGhlciB5b3UgY2hvb3NlIHRoZSBkZWZhdWx0IHZhbHVlIG9yIGEgY3VzdG9tIHZhbHVlLiBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgZGlzayBzdG9yYWdlIGNhbm5vdCBleGNlZWQgNTAgdGltZXMgdGhlIG1heGltdW0gUkFNIGZvciB0aGUgc2VsZWN0ZWQgY2x1c3Rlci4gSWYgeW91IHJlcXVpcmUgbW9yZSBzdG9yYWdlIHNwYWNlLCBjb25zaWRlciB1cGdyYWRpbmcgeW91ciBjbHVzdGVyIHRvIGEgaGlnaGVyIHRpZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuQ2x1c3RlclByb3BzI0Rpc2tTaXplR0JcbiAgICovXG4gIHJlYWRvbmx5IGRpc2tTaXplR2I/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENsb3VkIHNlcnZpY2UgcHJvdmlkZXIgdGhhdCBtYW5hZ2VzIHlvdXIgY3VzdG9tZXIga2V5cyB0byBwcm92aWRlIGFuIGFkZGl0aW9uYWwgbGF5ZXIgb2YgZW5jcnlwdGlvbiBhdCByZXN0IGZvciB0aGUgY2x1c3Rlci4gVG8gZW5hYmxlIGN1c3RvbWVyIGtleSBtYW5hZ2VtZW50IGZvciBlbmNyeXB0aW9uIGF0IHJlc3QsIHRoZSBjbHVzdGVyIHJlcGxpY2F0aW9uU3BlY3Nbbl0ucmVnaW9uQ29uZmlnc1ttXS57dHlwZX1TcGVjcy5pbnN0YW5jZVNpemUgc2V0dGluZyBtdXN0IGJlIE0xMCBvciBoaWdoZXIgYW5kIFwiYmFja3VwRW5hYmxlZFwiIDogZmFsc2Ugb3Igb21pdHRlZCBlbnRpcmVseS5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbHVzdGVyUHJvcHMjRW5jcnlwdGlvbkF0UmVzdFByb3ZpZGVyXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uQXRSZXN0UHJvdmlkZXI/OiBDZm5DbHVzdGVyUHJvcHNFbmNyeXB0aW9uQXRSZXN0UHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIChPcHRpb25hbCkgRmxhZyB0aGF0IGluZGljYXRlcyBpZiBjbHVzdGVyIHVzZXMgQXRsYXMtTWFuYWdlZCBTaGFyZGluZyAoZmFsc2UsIGRlZmF1bHQpIG9yIFNlbGYtTWFuYWdlZCBTaGFyZGluZyAodHJ1ZSkuIEl0IGNhbiBvbmx5IGJlIGVuYWJsZWQgZm9yIEdsb2JhbCBDbHVzdGVycyAoYEdFT1NIQVJERURgKS4gSXQgY2Fubm90IGJlIGNoYW5nZWQgb25jZSB0aGUgY2x1c3RlciBpcyBjcmVhdGVkLiBVc2UgdGhpcyBtb2RlIGlmIHlvdSdyZSBhbiBhZHZhbmNlZCB1c2VyIGFuZCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIHRvbyByZXN0cmljdGl2ZSBmb3IgeW91ciB3b3JrbG9hZC4gSWYgeW91IHNlbGVjdCB0aGlzIG9wdGlvbiwgeW91IG11c3QgbWFudWFsbHkgY29uZmlndXJlIHRoZSBzaGFyZGluZyBzdHJhdGVneSwgbW9yZSBpbmZvIFtoZXJlXShodHRwczovL3d3dy5tb25nb2RiLmNvbS9kb2NzL2F0bGFzL3R1dG9yaWFsL2NyZWF0ZS1nbG9iYWwtY2x1c3Rlci8jc2VsZWN0LXlvdXItc2hhcmRpbmctY29uZmlndXJhdGlvbikuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuQ2x1c3RlclByb3BzI0dsb2JhbENsdXN0ZXJTZWxmTWFuYWdlZFNoYXJkaW5nXG4gICAqL1xuICByZWFkb25seSBnbG9iYWxDbHVzdGVyU2VsZk1hbmFnZWRTaGFyZGluZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFByb2ZpbGUgdXNlZCB0byBwcm92aWRlIGNyZWRlbnRpYWxzIGluZm9ybWF0aW9uLCAoYSBzZWNyZXQgd2l0aCB0aGUgY2ZuL2F0bGFzL3Byb2ZpbGUve1Byb2ZpbGV9LCBpcyByZXF1aXJlZCksIGlmIG5vdCBwcm92aWRlZCBkZWZhdWx0IGlzIHVzZWRcbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbHVzdGVyUHJvcHMjUHJvZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogVW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHByb2plY3QgdGhlIGNsdXN0ZXIgYmVsb25ncyB0by5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbHVzdGVyUHJvcHMjUHJvamVjdElkXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBrZXktdmFsdWUgcGFpcnMgYmV0d2VlbiAxIHRvIDI1NSBjaGFyYWN0ZXJzIGluIGxlbmd0aCB0aGF0IHRhZyBhbmQgY2F0ZWdvcml6ZSB0aGUgY2x1c3Rlci4gVGhlIE1vbmdvREIgQ2xvdWQgY29uc29sZSBkb2Vzbid0IGRpc3BsYXkgeW91ciBsYWJlbHMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuQ2x1c3RlclByb3BzI0xhYmVsc1xuICAgKi9cbiAgcmVhZG9ubHkgbGFiZWxzPzogQ2ZuQ2x1c3RlclByb3BzTGFiZWxzW107XG5cbiAgLyoqXG4gICAqIE1ham9yIE1vbmdvREIgdmVyc2lvbiBvZiB0aGUgY2x1c3Rlci4gTW9uZ29EQiBDbG91ZCBkZXBsb3lzIHRoZSBjbHVzdGVyIHdpdGggdGhlIGxhdGVzdCBzdGFibGUgcmVsZWFzZSBvZiB0aGUgc3BlY2lmaWVkIHZlcnNpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuQ2x1c3RlclByb3BzI01vbmdvREJNYWpvclZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IG1vbmdvRGJNYWpvclZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIHRoYXQgaWRlbnRpZmllcyB0aGUgYWR2YW5jZWQgY2x1c3Rlci5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbHVzdGVyUHJvcHMjTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNsdXN0ZXIgaXMgcGF1c2VkIG9yIG5vdC5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5DbHVzdGVyUHJvcHMjUGF1c2VkXG4gICAqL1xuICByZWFkb25seSBwYXVzZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBGbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNsdXN0ZXIgdXNlcyBjb250aW51b3VzIGNsb3VkIGJhY2t1cHMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuQ2x1c3RlclByb3BzI1BpdEVuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IHBpdEVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHNldHRpbmdzIHRoYXQgY29uZmlndXJlIHlvdXIgY2x1c3RlciByZWdpb25zLiBGb3IgR2xvYmFsIENsdXN0ZXJzLCBlYWNoIG9iamVjdCBpbiB0aGUgYXJyYXkgcmVwcmVzZW50cyBhIHpvbmUgd2hlcmUgeW91ciBjbHVzdGVycyBub2RlcyBkZXBsb3kuIEZvciBub24tR2xvYmFsIHJlcGxpY2Egc2V0cyBhbmQgc2hhcmRlZCBjbHVzdGVycywgdGhpcyBhcnJheSBoYXMgb25lIG9iamVjdCByZXByZXNlbnRpbmcgd2hlcmUgeW91ciBjbHVzdGVycyBub2RlcyBkZXBsb3kuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuQ2x1c3RlclByb3BzI1JlcGxpY2F0aW9uU3BlY3NcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxpY2F0aW9uU3BlY3M/OiBBZHZhbmNlZFJlcGxpY2F0aW9uU3BlY1tdO1xuXG4gIC8qKlxuICAgKiBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSB0aGF0IE1vbmdvREIgQ2xvdWQgY2x1c3RlciB1c2VzLiBNb25nb0RCIENsb3VkIHN1cHBvcnRzIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwLlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkNsdXN0ZXJQcm9wcyNSb290Q2VydFR5cGVcbiAgICovXG4gIHJlYWRvbmx5IHJvb3RDZXJ0VHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogTWV0aG9kIGJ5IHdoaWNoIHRoZSBjbHVzdGVyIG1haW50YWlucyB0aGUgTW9uZ29EQiB2ZXJzaW9ucy4gSWYgdmFsdWUgaXMgQ09OVElOVU9VUywgeW91IG11c3Qgbm90IHNwZWNpZnkgbW9uZ29EQk1ham9yVmVyc2lvblxuICAgKlxuICAgKiBAc2NoZW1hIENmbkNsdXN0ZXJQcm9wcyNWZXJzaW9uUmVsZWFzZVN5c3RlbVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvblJlbGVhc2VTeXN0ZW0/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0ZXJtaW5hdGlvbiBwcm90ZWN0aW9uIGlzIGVuYWJsZWQgb24gdGhlIGNsdXN0ZXIuIElmIHNldCB0byB0cnVlLCBNb25nb0RCIENsb3VkIHdvbid0IGRlbGV0ZSB0aGUgY2x1c3Rlci4gSWYgc2V0IHRvIGZhbHNlLCBNb25nb0RCIENsb3VkIHdpbGwgZGVsZXRlIHRoZSBjbHVzdGVyLlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkNsdXN0ZXJQcm9wcyNUZXJtaW5hdGlvblByb3RlY3Rpb25FbmFibGVkXG4gICAqL1xuICByZWFkb25seSB0ZXJtaW5hdGlvblByb3RlY3Rpb25FbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTGlzdCBvZiBzZXR0aW5ncyB0aGF0IGNvbmZpZ3VyZSB5b3VyIGNsdXN0ZXIgcmVnaW9ucy4gRm9yIEdsb2JhbCBDbHVzdGVycywgZWFjaCBvYmplY3QgaW4gdGhlIGFycmF5IHJlcHJlc2VudHMgYSB6b25lIHdoZXJlIHlvdXIgY2x1c3RlcnMgbm9kZXMgZGVwbG95LiBGb3Igbm9uLUdsb2JhbCByZXBsaWNhIHNldHMgYW5kIHNoYXJkZWQgY2x1c3RlcnMsIHRoaXMgYXJyYXkgaGFzIG9uZSBvYmplY3QgcmVwcmVzZW50aW5nIHdoZXJlIHlvdXIgY2x1c3RlcnMgbm9kZXMgZGVwbG95LlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkNsdXN0ZXJQcm9wcyNUYWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogVGFnW107XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0NmbkNsdXN0ZXJQcm9wcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQ2ZuQ2x1c3RlclByb3BzKFxuICBvYmo6IENmbkNsdXN0ZXJQcm9wcyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIEFkdmFuY2VkU2V0dGluZ3M6IHRvSnNvbl9Qcm9jZXNzQXJncyhvYmouYWR2YW5jZWRTZXR0aW5ncyksXG4gICAgQmFja3VwRW5hYmxlZDogb2JqLmJhY2t1cEVuYWJsZWQsXG4gICAgQmlDb25uZWN0b3I6IHRvSnNvbl9DZm5DbHVzdGVyUHJvcHNCaUNvbm5lY3RvcihvYmouYmlDb25uZWN0b3IpLFxuICAgIENsdXN0ZXJUeXBlOiBvYmouY2x1c3RlclR5cGUsXG4gICAgQ29ubmVjdGlvblN0cmluZ3M6IHRvSnNvbl9Db25uZWN0aW9uU3RyaW5ncyhvYmouY29ubmVjdGlvblN0cmluZ3MpLFxuICAgIERpc2tTaXplR0I6IG9iai5kaXNrU2l6ZUdiLFxuICAgIEVuY3J5cHRpb25BdFJlc3RQcm92aWRlcjogb2JqLmVuY3J5cHRpb25BdFJlc3RQcm92aWRlcixcbiAgICBHbG9iYWxDbHVzdGVyU2VsZk1hbmFnZWRTaGFyZGluZzogb2JqLmdsb2JhbENsdXN0ZXJTZWxmTWFuYWdlZFNoYXJkaW5nLFxuICAgIFByb2ZpbGU6IG9iai5wcm9maWxlLFxuICAgIFByb2plY3RJZDogb2JqLnByb2plY3RJZCxcbiAgICBMYWJlbHM6IG9iai5sYWJlbHM/Lm1hcCgoeSkgPT4gdG9Kc29uX0NmbkNsdXN0ZXJQcm9wc0xhYmVscyh5KSksXG4gICAgTW9uZ29EQk1ham9yVmVyc2lvbjogb2JqLm1vbmdvRGJNYWpvclZlcnNpb24sXG4gICAgTmFtZTogb2JqLm5hbWUsXG4gICAgUGF1c2VkOiBvYmoucGF1c2VkLFxuICAgIFBpdEVuYWJsZWQ6IG9iai5waXRFbmFibGVkLFxuICAgIFJlcGxpY2F0aW9uU3BlY3M6IG9iai5yZXBsaWNhdGlvblNwZWNzPy5tYXAoKHkpID0+XG4gICAgICB0b0pzb25fQWR2YW5jZWRSZXBsaWNhdGlvblNwZWMoeSlcbiAgICApLFxuICAgIFJvb3RDZXJ0VHlwZTogb2JqLnJvb3RDZXJ0VHlwZSxcbiAgICBWZXJzaW9uUmVsZWFzZVN5c3RlbTogb2JqLnZlcnNpb25SZWxlYXNlU3lzdGVtLFxuICAgIFRlcm1pbmF0aW9uUHJvdGVjdGlvbkVuYWJsZWQ6IG9iai50ZXJtaW5hdGlvblByb3RlY3Rpb25FbmFibGVkLFxuICAgIFRhZ3M6IG9iai50YWdzPy5tYXAoKHkpID0+IHRvSnNvbl9UYWcoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBZHZhbmNlZCBjb25maWd1cmF0aW9uIGRldGFpbHMgdG8gYWRkIGZvciBvbmUgY2x1c3RlciBpbiB0aGUgc3BlY2lmaWVkIHByb2plY3QuXG4gKlxuICogQHNjaGVtYSBwcm9jZXNzQXJnc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NBcmdzIHtcbiAgLyoqXG4gICAqIERlZmF1bHQgbGV2ZWwgb2YgYWNrbm93bGVkZ21lbnQgcmVxdWVzdGVkIGZyb20gTW9uZ29EQiBmb3IgcmVhZCBvcGVyYXRpb25zIHNldCBmb3IgdGhpcyBjbHVzdGVyLlxuICAgKlxuICAgKiBAc2NoZW1hIHByb2Nlc3NBcmdzI0RlZmF1bHRSZWFkQ29uY2VyblxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFJlYWRDb25jZXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IGxldmVsIG9mIGFja25vd2xlZGdtZW50IHJlcXVlc3RlZCBmcm9tIE1vbmdvREIgZm9yIHdyaXRlIG9wZXJhdGlvbnMgc2V0IGZvciB0aGlzIGNsdXN0ZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgcHJvY2Vzc0FyZ3MjRGVmYXVsdFdyaXRlQ29uY2VyblxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFdyaXRlQ29uY2Vybj86IHN0cmluZztcblxuICAvKipcbiAgICogRmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHlvdSBjYW4gaW5zZXJ0IG9yIHVwZGF0ZSBkb2N1bWVudHMgd2hlcmUgYWxsIGluZGV4ZWQgZW50cmllcyBkb24ndCBleGNlZWQgMTAyNCBieXRlcy4gSWYgeW91IHNldCB0aGlzIHRvIGZhbHNlLCBtb25nb2Qgd3JpdGVzIGRvY3VtZW50cyB0aGF0IGV4Y2VlZCB0aGlzIGxpbWl0IGJ1dCBkb2Vzbid0IGluZGV4IHRoZW0uXG4gICAqXG4gICAqIEBzY2hlbWEgcHJvY2Vzc0FyZ3MjRmFpbEluZGV4S2V5VG9vTG9uZ1xuICAgKi9cbiAgcmVhZG9ubHkgZmFpbEluZGV4S2V5VG9vTG9uZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY2x1c3RlciBhbGxvd3MgZXhlY3V0aW9uIG9mIG9wZXJhdGlvbnMgdGhhdCBwZXJmb3JtIHNlcnZlci1zaWRlIGV4ZWN1dGlvbnMgb2YgSmF2YVNjcmlwdC5cbiAgICpcbiAgICogQHNjaGVtYSBwcm9jZXNzQXJncyNKYXZhc2NyaXB0RW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgamF2YXNjcmlwdEVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSB2ZXJzaW9uIHRoYXQgdGhlIGNsdXN0ZXIgYWNjZXB0cyBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMuIENsdXN0ZXJzIHVzaW5nIFRMUyAxLjAgb3IgMS4xIHNob3VsZCBjb25zaWRlciBzZXR0aW5nIFRMUyAxLjIgYXMgdGhlIG1pbmltdW0gVExTIHByb3RvY29sIHZlcnNpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgcHJvY2Vzc0FyZ3MjTWluaW11bUVuYWJsZWRUTFNQcm90b2NvbFxuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bUVuYWJsZWRUbHNQcm90b2NvbD86IHN0cmluZztcblxuICAvKipcbiAgICogRmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBjbHVzdGVyIGRpc2FibGVzIGV4ZWN1dGluZyBhbnkgcXVlcnkgdGhhdCByZXF1aXJlcyBhIGNvbGxlY3Rpb24gc2NhbiB0byByZXR1cm4gcmVzdWx0cy5cbiAgICpcbiAgICogQHNjaGVtYSBwcm9jZXNzQXJncyNOb1RhYmxlU2NhblxuICAgKi9cbiAgcmVhZG9ubHkgbm9UYWJsZVNjYW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTdG9yYWdlIGxpbWl0IG9mIGNsdXN0ZXIncyBvcGxvZyBleHByZXNzZWQgaW4gbWVnYWJ5dGVzLiBBIHZhbHVlIG9mIG51bGwgaW5kaWNhdGVzIHRoYXQgdGhlIGNsdXN0ZXIgdXNlcyB0aGUgZGVmYXVsdCBvcGxvZyBzaXplIHRoYXQgTW9uZ29EQiBDbG91ZCBjYWxjdWxhdGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIHByb2Nlc3NBcmdzI09wbG9nU2l6ZU1CXG4gICAqL1xuICByZWFkb25seSBvcGxvZ1NpemVNYj86IG51bWJlcjtcblxuICAvKipcbiAgICogSW50ZXJ2YWwgaW4gc2Vjb25kcyBhdCB3aGljaCB0aGUgbW9uZ29zcWxkIHByb2Nlc3MgcmUtc2FtcGxlcyBkYXRhIHRvIGNyZWF0ZSBpdHMgcmVsYXRpb25hbCBzY2hlbWEuXG4gICAqXG4gICAqIEBzY2hlbWEgcHJvY2Vzc0FyZ3MjU2FtcGxlU2l6ZUJJQ29ubmVjdG9yXG4gICAqL1xuICByZWFkb25seSBzYW1wbGVTaXplQmlDb25uZWN0b3I/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBkb2N1bWVudHMgcGVyIGRhdGFiYXNlIHRvIHNhbXBsZSB3aGVuIGdhdGhlcmluZyBzY2hlbWEgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgcHJvY2Vzc0FyZ3MjU2FtcGxlUmVmcmVzaEludGVydmFsQklDb25uZWN0b3JcbiAgICovXG4gIHJlYWRvbmx5IHNhbXBsZVJlZnJlc2hJbnRlcnZhbEJpQ29ubmVjdG9yPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIHJldGVudGlvbiB3aW5kb3cgZm9yIGNsdXN0ZXIncyBvcGxvZyBleHByZXNzZWQgaW4gaG91cnMuIEEgdmFsdWUgb2YgbnVsbCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2x1c3RlciB1c2VzIHRoZSBkZWZhdWx0IG1pbmltdW0gb3Bsb2cgd2luZG93IHRoYXQgTW9uZ29EQiBDbG91ZCBjYWxjdWxhdGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIHByb2Nlc3NBcmdzI09wbG9nTWluUmV0ZW50aW9uSG91cnNcbiAgICovXG4gIHJlYWRvbmx5IG9wbG9nTWluUmV0ZW50aW9uSG91cnM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIExpZmV0aW1lLCBpbiBzZWNvbmRzLCBvZiBtdWx0aS1kb2N1bWVudCB0cmFuc2FjdGlvbnMuIEF0bGFzIGNvbnNpZGVycyB0aGUgdHJhbnNhY3Rpb25zIHRoYXQgZXhjZWVkIHRoaXMgbGltaXQgYXMgZXhwaXJlZCBhbmQgc28gYWJvcnRzIHRoZW0gdGhyb3VnaCBhIHBlcmlvZGljIGNsZWFudXAgcHJvY2Vzcy5cbiAgICpcbiAgICogQHNjaGVtYSBwcm9jZXNzQXJncyNUcmFuc2FjdGlvbkxpZmV0aW1lTGltaXRTZWNvbmRzXG4gICAqL1xuICByZWFkb25seSB0cmFuc2FjdGlvbkxpZmV0aW1lTGltaXRTZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdQcm9jZXNzQXJncycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fUHJvY2Vzc0FyZ3MoXG4gIG9iajogUHJvY2Vzc0FyZ3MgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBEZWZhdWx0UmVhZENvbmNlcm46IG9iai5kZWZhdWx0UmVhZENvbmNlcm4sXG4gICAgRGVmYXVsdFdyaXRlQ29uY2Vybjogb2JqLmRlZmF1bHRXcml0ZUNvbmNlcm4sXG4gICAgRmFpbEluZGV4S2V5VG9vTG9uZzogb2JqLmZhaWxJbmRleEtleVRvb0xvbmcsXG4gICAgSmF2YXNjcmlwdEVuYWJsZWQ6IG9iai5qYXZhc2NyaXB0RW5hYmxlZCxcbiAgICBNaW5pbXVtRW5hYmxlZFRMU1Byb3RvY29sOiBvYmoubWluaW11bUVuYWJsZWRUbHNQcm90b2NvbCxcbiAgICBOb1RhYmxlU2Nhbjogb2JqLm5vVGFibGVTY2FuLFxuICAgIE9wbG9nU2l6ZU1COiBvYmoub3Bsb2dTaXplTWIsXG4gICAgU2FtcGxlU2l6ZUJJQ29ubmVjdG9yOiBvYmouc2FtcGxlU2l6ZUJpQ29ubmVjdG9yLFxuICAgIFNhbXBsZVJlZnJlc2hJbnRlcnZhbEJJQ29ubmVjdG9yOiBvYmouc2FtcGxlUmVmcmVzaEludGVydmFsQmlDb25uZWN0b3IsXG4gICAgT3Bsb2dNaW5SZXRlbnRpb25Ib3Vyczogb2JqLm9wbG9nTWluUmV0ZW50aW9uSG91cnMsXG4gICAgVHJhbnNhY3Rpb25MaWZldGltZUxpbWl0U2Vjb25kczogb2JqLnRyYW5zYWN0aW9uTGlmZXRpbWVMaW1pdFNlY29uZHMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNldHRpbmdzIG5lZWRlZCB0byBjb25maWd1cmUgdGhlIE1vbmdvREIgQ29ubmVjdG9yIGZvciBCdXNpbmVzcyBJbnRlbGxpZ2VuY2UgZm9yIHRoaXMgY2x1c3Rlci5cbiAqXG4gKiBAc2NoZW1hIENmbkNsdXN0ZXJQcm9wc0JpQ29ubmVjdG9yXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2ZuQ2x1c3RlclByb3BzQmlDb25uZWN0b3Ige1xuICAvKipcbiAgICogRGF0YSBzb3VyY2Ugbm9kZSBkZXNpZ25hdGVkIGZvciB0aGUgTW9uZ29EQiBDb25uZWN0b3IgZm9yIEJ1c2luZXNzIEludGVsbGlnZW5jZSBvbiBNb25nb0RCIENsb3VkLiBUaGUgTW9uZ29EQiBDb25uZWN0b3IgZm9yIEJ1c2luZXNzIEludGVsbGlnZW5jZSBvbiBNb25nb0RCIENsb3VkIHJlYWRzIGRhdGEgZnJvbSB0aGUgcHJpbWFyeSwgc2Vjb25kYXJ5LCBvciBhbmFseXRpY3Mgbm9kZSBiYXNlZCBvbiB5b3VyIHJlYWQgcHJlZmVyZW5jZXMuIERlZmF1bHRzIHRvIEFOQUxZVElDUyBub2RlLCBvciBTRUNPTkRBUlkgaWYgdGhlcmUgYXJlIG5vIEFOQUxZVElDUyBub2Rlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgQU5BTFlUSUNTIG5vZGUsIG9yIFNFQ09OREFSWSBpZiB0aGVyZSBhcmUgbm8gQU5BTFlUSUNTIG5vZGVzLlxuICAgKiBAc2NoZW1hIENmbkNsdXN0ZXJQcm9wc0JpQ29ubmVjdG9yI1JlYWRQcmVmZXJlbmNlXG4gICAqL1xuICByZWFkb25seSByZWFkUHJlZmVyZW5jZT86IHN0cmluZztcblxuICAvKipcbiAgICogRmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIE1vbmdvREIgQ29ubmVjdG9yIGZvciBCdXNpbmVzcyBJbnRlbGxpZ2VuY2UgaXMgZW5hYmxlZCBvbiB0aGUgc3BlY2lmaWVkIGNsdXN0ZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuQ2x1c3RlclByb3BzQmlDb25uZWN0b3IjRW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0NmbkNsdXN0ZXJQcm9wc0JpQ29ubmVjdG9yJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9DZm5DbHVzdGVyUHJvcHNCaUNvbm5lY3RvcihcbiAgb2JqOiBDZm5DbHVzdGVyUHJvcHNCaUNvbm5lY3RvciB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIFJlYWRQcmVmZXJlbmNlOiBvYmoucmVhZFByZWZlcmVuY2UsXG4gICAgRW5hYmxlZDogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIENvbGxlY3Rpb24gb2YgVW5pZm9ybSBSZXNvdXJjZSBMb2NhdG9ycyB0aGF0IHBvaW50IHRvIHRoZSBNb25nb0RCIGRhdGFiYXNlLlxuICpcbiAqIEBzY2hlbWEgY29ubmVjdGlvblN0cmluZ3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0aW9uU3RyaW5ncyB7XG4gIC8qKlxuICAgKiBQdWJsaWMgY29ubmVjdGlvbiBzdHJpbmcgdGhhdCB5b3UgY2FuIHVzZSB0byBjb25uZWN0IHRvIHRoaXMgY2x1c3Rlci4gVGhpcyBjb25uZWN0aW9uIHN0cmluZyB1c2VzIHRoZSBtb25nb2RiOi8vIHByb3RvY29sLlxuICAgKlxuICAgKiBAc2NoZW1hIGNvbm5lY3Rpb25TdHJpbmdzI1N0YW5kYXJkXG4gICAqL1xuICByZWFkb25seSBzdGFuZGFyZD86IHN0cmluZztcblxuICAvKipcbiAgICogUHVibGljIGNvbm5lY3Rpb24gc3RyaW5nIHRoYXQgeW91IGNhbiB1c2UgdG8gY29ubmVjdCB0byB0aGlzIGNsdXN0ZXIuIFRoaXMgY29ubmVjdGlvbiBzdHJpbmcgdXNlcyB0aGUgbW9uZ29kYitzcnY6Ly8gcHJvdG9jb2wuXG4gICAqXG4gICAqIEBzY2hlbWEgY29ubmVjdGlvblN0cmluZ3MjU3RhbmRhcmRTcnZcbiAgICovXG4gIHJlYWRvbmx5IHN0YW5kYXJkU3J2Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOZXR3b3JrIHBlZXJpbmcgY29ubmVjdGlvbiBzdHJpbmdzIGZvciBlYWNoIGludGVyZmFjZSBWaXJ0dWFsIFByaXZhdGUgQ2xvdWQgKFZQQykgZW5kcG9pbnQgdGhhdCB5b3UgY29uZmlndXJlZCB0byBjb25uZWN0IHRvIHRoaXMgY2x1c3Rlci4gVGhpcyBjb25uZWN0aW9uIHN0cmluZyB1c2VzIHRoZSBtb25nb2RiK3NydjovLyBwcm90b2NvbC4gVGhlIHJlc291cmNlIHJldHVybnMgdGhpcyBwYXJhbWV0ZXIgb25jZSBzb21lb25lIGNyZWF0ZXMgYSBuZXR3b3JrIHBlZXJpbmcgY29ubmVjdGlvbiB0byB0aGlzIGNsdXN0ZXIuIFRoaXMgcHJvdG9jb2wgdGVsbHMgdGhlIGFwcGxpY2F0aW9uIHRvIGxvb2sgdXAgdGhlIGhvc3Qgc2VlZCBsaXN0IGluIHRoZSBEb21haW4gTmFtZSBTeXN0ZW0gKEROUykuIFRoaXMgbGlzdCBzeW5jaHJvbml6ZXMgd2l0aCB0aGUgbm9kZXMgaW4gYSBjbHVzdGVyLiBJZiB0aGUgY29ubmVjdGlvbiBzdHJpbmcgdXNlcyB0aGlzIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSBmb3JtYXQsIHlvdSBkb24ndCBuZWVkIHRvIGFwcGVuZCB0aGUgc2VlZCBsaXN0IG9yIGNoYW5nZSB0aGUgVVJJIGlmIHRoZSBub2RlcyBjaGFuZ2UuIFVzZSB0aGlzIFVSSSBmb3JtYXQgaWYgeW91ciBkcml2ZXIgc3VwcG9ydHMgaXQuIElmIGl0IGRvZXNuJ3QsIHVzZSBjb25uZWN0aW9uU3RyaW5ncy5wcml2YXRlLiBGb3IgQW1hem9uIFdlYiBTZXJ2aWNlcyAoQVdTKSBjbHVzdGVycywgdGhpcyByZXNvdXJjZSByZXR1cm5zIHRoaXMgcGFyYW1ldGVyIG9ubHkgaWYgeW91IGVuYWJsZSBjdXN0b20gRE5TLlxuICAgKlxuICAgKiBAc2NoZW1hIGNvbm5lY3Rpb25TdHJpbmdzI1ByaXZhdGVcbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5ldHdvcmsgcGVlcmluZyBjb25uZWN0aW9uIHN0cmluZ3MgZm9yIGVhY2ggaW50ZXJmYWNlIFZpcnR1YWwgUHJpdmF0ZSBDbG91ZCAoVlBDKSBlbmRwb2ludCB0aGF0IHlvdSBjb25maWd1cmVkIHRvIGNvbm5lY3QgdG8gdGhpcyBjbHVzdGVyLiBUaGlzIGNvbm5lY3Rpb24gc3RyaW5nIHVzZXMgdGhlIG1vbmdvZGIrc3J2Oi8vIHByb3RvY29sLiBUaGUgcmVzb3VyY2UgcmV0dXJucyB0aGlzIHBhcmFtZXRlciB3aGVuIHNvbWVvbmUgY3JlYXRlcyBhIG5ldHdvcmsgcGVlcmluZyBjb25uZWN0aW9uIHRvIHRoaXMgY2x1c3Rlci4gVGhpcyBwcm90b2NvbCB0ZWxscyB0aGUgYXBwbGljYXRpb24gdG8gbG9vayB1cCB0aGUgaG9zdCBzZWVkIGxpc3QgaW4gdGhlIERvbWFpbiBOYW1lIFN5c3RlbSAoRE5TKS4gVGhpcyBsaXN0IHN5bmNocm9uaXplcyB3aXRoIHRoZSBub2RlcyBpbiBhIGNsdXN0ZXIuIElmIHRoZSBjb25uZWN0aW9uIHN0cmluZyB1c2VzIHRoaXMgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvcm1hdCwgeW91IGRvbid0IG5lZWQgdG8gYXBwZW5kIHRoZSBzZWVkIGxpc3Qgb3IgY2hhbmdlIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgKFVSSSkgaWYgdGhlIG5vZGVzIGNoYW5nZS4gVXNlIHRoaXMgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvcm1hdCBpZiB5b3VyIGRyaXZlciBzdXBwb3J0cyBpdC4gSWYgaXQgZG9lc24ndCwgdXNlIGNvbm5lY3Rpb25TdHJpbmdzLnByaXZhdGUuIEZvciBBbWF6b24gV2ViIFNlcnZpY2VzIChBV1MpIGNsdXN0ZXJzLCB0aGlzIHBhcmFtZXRlciByZXR1cm5zIG9ubHkgaWYgeW91IGVuYWJsZSBjdXN0b20gRE5TLlxuICAgKlxuICAgKiBAc2NoZW1hIGNvbm5lY3Rpb25TdHJpbmdzI1ByaXZhdGVTcnZcbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVTcnY/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgZW5kcG9pbnQtYXdhcmUgY29ubmVjdGlvbiBzdHJpbmdzIHRoYXQgdXNlIEFXUy1ob3N0ZWQgY2x1c3RlcnMgd2l0aCBBbWF6b24gV2ViIFNlcnZpY2VzIChBV1MpIFByaXZhdGVMaW5rLiBFYWNoIGtleSBpZGVudGlmaWVzIGFuIEFtYXpvbiBXZWIgU2VydmljZXMgKEFXUykgaW50ZXJmYWNlIGVuZHBvaW50LiBFYWNoIHZhbHVlIGlkZW50aWZpZXMgdGhlIHJlbGF0ZWQgbW9uZ29kYjovLyBjb25uZWN0aW9uIHN0cmluZyB0aGF0IHlvdSB1c2UgdG8gY29ubmVjdCB0byBNb25nb0RCIENsb3VkIHRocm91Z2ggdGhlIGludGVyZmFjZSBlbmRwb2ludCB0aGF0IHRoZSBrZXkgbmFtZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgY29ubmVjdGlvblN0cmluZ3MjUHJpdmF0ZUVuZHBvaW50c1xuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZUVuZHBvaW50cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQcml2YXRlIGVuZHBvaW50LWF3YXJlIGNvbm5lY3Rpb24gc3RyaW5ncyB0aGF0IHVzZSBBV1MtaG9zdGVkIGNsdXN0ZXJzIHdpdGggQW1hem9uIFdlYiBTZXJ2aWNlcyAoQVdTKSBQcml2YXRlTGluay4gRWFjaCBrZXkgaWRlbnRpZmllcyBhbiBBbWF6b24gV2ViIFNlcnZpY2VzIChBV1MpIGludGVyZmFjZSBlbmRwb2ludC4gRWFjaCB2YWx1ZSBpZGVudGlmaWVzIHRoZSByZWxhdGVkIG1vbmdvZGI6Ly8gY29ubmVjdGlvbiBzdHJpbmcgdGhhdCB5b3UgdXNlIHRvIGNvbm5lY3QgdG8gQXRsYXMgdGhyb3VnaCB0aGUgaW50ZXJmYWNlIGVuZHBvaW50IHRoYXQgdGhlIGtleSBuYW1lcy5cbiAgICpcbiAgICogQHNjaGVtYSBjb25uZWN0aW9uU3RyaW5ncyNQcml2YXRlRW5kcG9pbnRzU3J2XG4gICAqL1xuICByZWFkb25seSBwcml2YXRlRW5kcG9pbnRzU3J2Pzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgZW5kcG9pbnQtYXdhcmUgY29ubmVjdGlvbiBzdHJpbmcgb3B0aW1pemVkIGZvciBzaGFyZGVkIGNsdXN0ZXJzIHRoYXQgdXNlcyB0aGUgYG1vbmdvZGIrc3J2Oi8vYCBwcm90b2NvbCB0byBjb25uZWN0IHRvIE1vbmdvREIgQ2xvdWQgdGhyb3VnaCBhIHByaXZhdGUgZW5kcG9pbnQuIElmIHRoZSBjb25uZWN0aW9uIHN0cmluZyB1c2VzIHRoaXMgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvcm1hdCwgeW91IGRvbid0IG5lZWQgdG8gY2hhbmdlIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgKFVSSSkgaWYgdGhlIG5vZGVzIGNoYW5nZS4gVXNlIHRoaXMgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvcm1hdCBpZiB5b3VyIGFwcGxpY2F0aW9uIGFuZCBBdGxhcyBjbHVzdGVyIHN1cHBvcnRzIGl0LiBJZiBpdCBkb2Vzbid0LCB1c2UgYW5kIGNvbnN1bHQgdGhlIGRvY3VtZW50YXRpb24gZm9yIGNvbm5lY3Rpb25TdHJpbmdzLnByaXZhdGVFbmRwb2ludFtuXS5zcnZDb25uZWN0aW9uU3RyaW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIGNvbm5lY3Rpb25TdHJpbmdzI1NSVlNoYXJkT3B0aW1pemVkQ29ubmVjdGlvblN0cmluZ1xuICAgKi9cbiAgcmVhZG9ubHkgc3J2U2hhcmRPcHRpbWl6ZWRDb25uZWN0aW9uU3RyaW5nPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0Nvbm5lY3Rpb25TdHJpbmdzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Db25uZWN0aW9uU3RyaW5ncyhcbiAgb2JqOiBDb25uZWN0aW9uU3RyaW5ncyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIFN0YW5kYXJkOiBvYmouc3RhbmRhcmQsXG4gICAgU3RhbmRhcmRTcnY6IG9iai5zdGFuZGFyZFNydixcbiAgICBQcml2YXRlOiBvYmoucHJpdmF0ZSxcbiAgICBQcml2YXRlU3J2OiBvYmoucHJpdmF0ZVNydixcbiAgICBQcml2YXRlRW5kcG9pbnRzOiBvYmoucHJpdmF0ZUVuZHBvaW50cz8ubWFwKCh5KSA9PiB5KSxcbiAgICBQcml2YXRlRW5kcG9pbnRzU3J2OiBvYmoucHJpdmF0ZUVuZHBvaW50c1Nydj8ubWFwKCh5KSA9PiB5KSxcbiAgICBTUlZTaGFyZE9wdGltaXplZENvbm5lY3Rpb25TdHJpbmc6XG4gICAgICBvYmouc3J2U2hhcmRPcHRpbWl6ZWRDb25uZWN0aW9uU3RyaW5nPy5tYXAoKHkpID0+IHkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDbG91ZCBzZXJ2aWNlIHByb3ZpZGVyIHRoYXQgbWFuYWdlcyB5b3VyIGN1c3RvbWVyIGtleXMgdG8gcHJvdmlkZSBhbiBhZGRpdGlvbmFsIGxheWVyIG9mIGVuY3J5cHRpb24gYXQgcmVzdCBmb3IgdGhlIGNsdXN0ZXIuIFRvIGVuYWJsZSBjdXN0b21lciBrZXkgbWFuYWdlbWVudCBmb3IgZW5jcnlwdGlvbiBhdCByZXN0LCB0aGUgY2x1c3RlciByZXBsaWNhdGlvblNwZWNzW25dLnJlZ2lvbkNvbmZpZ3NbbV0ue3R5cGV9U3BlY3MuaW5zdGFuY2VTaXplIHNldHRpbmcgbXVzdCBiZSBNMTAgb3IgaGlnaGVyIGFuZCBcImJhY2t1cEVuYWJsZWRcIiA6IGZhbHNlIG9yIG9taXR0ZWQgZW50aX