UNPKG

awscdk-resources-mongodbatlas

Version:

MongoDB Atlas CDK Construct Library for AWS CloudFormation Resources

239 lines 45.6 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.CfnFederatedDatabaseInstance = void 0; exports.toJson_CfnFederatedDatabaseInstanceProps = toJson_CfnFederatedDatabaseInstanceProps; exports.toJson_CloudProviderConfig = toJson_CloudProviderConfig; exports.toJson_DataProcessRegion = toJson_DataProcessRegion; exports.toJson_Storage = toJson_Storage; exports.toJson_Database = toJson_Database; exports.toJson_Store = toJson_Store; exports.toJson_Collection = toJson_Collection; exports.toJson_View = toJson_View; exports.toJson_ReadPreference = toJson_ReadPreference; exports.toJson_DataSource = toJson_DataSource; exports.toJson_TagSet = toJson_TagSet; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); // Generated by cdk-import const cdk = require("aws-cdk-lib"); /** * Converts an object of type 'CfnFederatedDatabaseInstanceProps' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnFederatedDatabaseInstanceProps(obj) { if (obj === undefined) { return undefined; } const result = { CloudProviderConfig: toJson_CloudProviderConfig(obj.cloudProviderConfig), DataProcessRegion: toJson_DataProcessRegion(obj.dataProcessRegion), ProjectId: obj.projectId, TenantName: obj.tenantName, SkipRoleValidation: obj.skipRoleValidation, Storage: toJson_Storage(obj.storage), Profile: obj.profile, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'CloudProviderConfig' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CloudProviderConfig(obj) { if (obj === undefined) { return undefined; } const result = { ExternalId: obj.externalId, IamAssumedRoleARN: obj.iamAssumedRoleArn, IamUserARN: obj.iamUserArn, RoleId: obj.roleId, TestS3Bucket: obj.testS3Bucket, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'DataProcessRegion' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_DataProcessRegion(obj) { if (obj === undefined) { return undefined; } const result = { CloudProvider: obj.cloudProvider, Region: obj.region, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'Storage' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_Storage(obj) { if (obj === undefined) { return undefined; } const result = { Databases: obj.databases?.map((y) => toJson_Database(y)), Stores: obj.stores?.map((y) => toJson_Store(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 'Database' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_Database(obj) { if (obj === undefined) { return undefined; } const result = { Collections: obj.collections?.map((y) => toJson_Collection(y)), MaxWildcardCollections: obj.maxWildcardCollections, Name: obj.name, Views: obj.views?.map((y) => toJson_View(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 'Store' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_Store(obj) { if (obj === undefined) { return undefined; } const result = { Name: obj.name, Provider: obj.provider, ClusterName: obj.clusterName, ProjectId: obj.projectId, ReadPreference: toJson_ReadPreference(obj.readPreference), }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'Collection' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_Collection(obj) { if (obj === undefined) { return undefined; } const result = { DataSources: obj.dataSources?.map((y) => toJson_DataSource(y)), Name: obj.name, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'View' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_View(obj) { if (obj === undefined) { return undefined; } const result = { Name: obj.name, Pipeline: obj.pipeline, Source: obj.source, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'ReadPreference' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_ReadPreference(obj) { if (obj === undefined) { return undefined; } const result = { Mode: obj.mode, MaxStalenessSeconds: obj.maxStalenessSeconds, TagSets: obj.tagSets?.map((y) => y?.map((x) => toJson_TagSet(x))), }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'DataSource' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_DataSource(obj) { if (obj === undefined) { return undefined; } const result = { AllowInsecure: obj.allowInsecure, Collection: obj.collection, CollectionRegex: obj.collectionRegex, Database: obj.database, DatabaseRegex: obj.databaseRegex, DefaultFormat: obj.defaultFormat, Path: obj.path, ProvenanceFieldName: obj.provenanceFieldName, StoreName: obj.storeName, Urls: obj.urls?.map((y) => 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 'TagSet' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_TagSet(obj) { if (obj === undefined) { return undefined; } const result = { Name: obj.name, Value: obj.value, }; // 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::FederatedDatabaseInstance` * * @cloudformationResource MongoDB::Atlas::FederatedDatabaseInstance * @stability external */ class CfnFederatedDatabaseInstance extends cdk.CfnResource { /** * Create a new `MongoDB::Atlas::FederatedDatabaseInstance`. * * @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: CfnFederatedDatabaseInstance.CFN_RESOURCE_TYPE_NAME, properties: toJson_CfnFederatedDatabaseInstanceProps(props), }); this.props = props; this.attrHostNames = cdk.Token.asList(this.getAtt("HostNames")); this.attrState = cdk.Token.asString(this.getAtt("State")); } } exports.CfnFederatedDatabaseInstance = CfnFederatedDatabaseInstance; _a = JSII_RTTI_SYMBOL_1; CfnFederatedDatabaseInstance[_a] = { fqn: "awscdk-resources-mongodbatlas.CfnFederatedDatabaseInstance", version: "3.13.0" }; /** * The CloudFormation resource type name for this resource class. */ CfnFederatedDatabaseInstance.CFN_RESOURCE_TYPE_NAME = "MongoDB::Atlas::FederatedDatabaseInstance"; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbDEtcmVzb3VyY2VzL2ZlZGVyYXRlZC1kYXRhYmFzZS1pbnN0YW5jZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBZ0VBLDRGQW9CQztBQWlERCxnRUFrQkM7QUE0QkQsNERBZUM7QUE0QkQsd0NBZUM7QUF3Q0QsMENBaUJDO0FBaURELG9DQWtCQztBQTBCRCw4Q0FlQztBQWlDRCxrQ0FnQkM7QUFrQ0Qsc0RBZ0JDO0FBa0ZELDhDQXVCQztBQTBCRCxzQ0FlQzs7QUF2b0JELDBCQUEwQjtBQUMxQixtQ0FBbUM7QUEyRG5DOztHQUVHO0FBQ0gseUNBQXlDO0FBQ3pDLFNBQWdCLHdDQUF3QyxDQUN0RCxHQUFrRDtJQUVsRCxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN0QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUc7UUFDYixtQkFBbUIsRUFBRSwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7UUFDeEUsaUJBQWlCLEVBQUUsd0JBQXdCLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO1FBQ2xFLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztRQUN4QixVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVU7UUFDMUIsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLGtCQUFrQjtRQUMxQyxPQUFPLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDcEMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO0tBQ3JCLENBQUM7SUFDRiwwQkFBMEI7SUFDMUIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FDbEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQzNELEVBQUUsQ0FDSCxDQUFDO0FBQ0osQ0FBQztBQTZDRDs7R0FFRztBQUNILHlDQUF5QztBQUN6QyxTQUFnQiwwQkFBMEIsQ0FDeEMsR0FBb0M7SUFFcEMsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDdEIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHO1FBQ2IsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVO1FBQzFCLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxpQkFBaUI7UUFDeEMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVO1FBQzFCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtRQUNsQixZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVk7S0FDL0IsQ0FBQztJQUNGLDBCQUEwQjtJQUMxQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUNsQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDM0QsRUFBRSxDQUNILENBQUM7QUFDSixDQUFDO0FBd0JEOztHQUVHO0FBQ0gseUNBQXlDO0FBQ3pDLFNBQWdCLHdCQUF3QixDQUN0QyxHQUFrQztJQUVsQyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN0QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUc7UUFDYixhQUFhLEVBQUUsR0FBRyxDQUFDLGFBQWE7UUFDaEMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO0tBQ25CLENBQUM7SUFDRiwwQkFBMEI7SUFDMUIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FDbEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQzNELEVBQUUsQ0FDSCxDQUFDO0FBQ0osQ0FBQztBQXdCRDs7R0FFRztBQUNILHlDQUF5QztBQUN6QyxTQUFnQixjQUFjLENBQzVCLEdBQXdCO0lBRXhCLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRztRQUNiLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2hELENBQUM7SUFDRiwwQkFBMEI7SUFDMUIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FDbEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQzNELEVBQUUsQ0FDSCxDQUFDO0FBQ0osQ0FBQztBQW9DRDs7R0FFRztBQUNILHlDQUF5QztBQUN6QyxTQUFnQixlQUFlLENBQzdCLEdBQXlCO0lBRXpCLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRztRQUNiLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUQsc0JBQXNCLEVBQUUsR0FBRyxDQUFDLHNCQUFzQjtRQUNsRCxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7UUFDZCxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM3QyxDQUFDO0lBQ0YsMEJBQTBCO0lBQzFCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQ2xDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUMzRCxFQUFFLENBQ0gsQ0FBQztBQUNKLENBQUM7QUE2Q0Q7O0dBRUc7QUFDSCx5Q0FBeUM7QUFDekMsU0FBZ0IsWUFBWSxDQUMxQixHQUFzQjtJQUV0QixJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN0QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUc7UUFDYixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7UUFDZCxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7UUFDdEIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXO1FBQzVCLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztRQUN4QixjQUFjLEVBQUUscUJBQXFCLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQztLQUMxRCxDQUFDO0lBQ0YsMEJBQTBCO0lBQzFCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQ2xDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUMzRCxFQUFFLENBQ0gsQ0FBQztBQUNKLENBQUM7QUFzQkQ7O0dBRUc7QUFDSCx5Q0FBeUM7QUFDekMsU0FBZ0IsaUJBQWlCLENBQy9CLEdBQTJCO0lBRTNCLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRztRQUNiLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUQsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO0tBQ2YsQ0FBQztJQUNGLDBCQUEwQjtJQUMxQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUNsQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDM0QsRUFBRSxDQUNILENBQUM7QUFDSixDQUFDO0FBNkJEOztHQUVHO0FBQ0gseUNBQXlDO0FBQ3pDLFNBQWdCLFdBQVcsQ0FDekIsR0FBcUI7SUFFckIsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDdEIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHO1FBQ2IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO1FBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1FBQ3RCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtLQUNuQixDQUFDO0lBQ0YsMEJBQTBCO0lBQzFCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQ2xDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUMzRCxFQUFFLENBQ0gsQ0FBQztBQUNKLENBQUM7QUE4QkQ7O0dBRUc7QUFDSCx5Q0FBeUM7QUFDekMsU0FBZ0IscUJBQXFCLENBQ25DLEdBQStCO0lBRS9CLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRztRQUNiLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtRQUNkLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxtQkFBbUI7UUFDNUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNsRSxDQUFDO0lBQ0YsMEJBQTBCO0lBQzFCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQ2xDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUMzRCxFQUFFLENBQ0gsQ0FBQztBQUNKLENBQUM7QUE4RUQ7O0dBRUc7QUFDSCx5Q0FBeUM7QUFDekMsU0FBZ0IsaUJBQWlCLENBQy9CLEdBQTJCO0lBRTNCLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRztRQUNiLGFBQWEsRUFBRSxHQUFHLENBQUMsYUFBYTtRQUNoQyxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVU7UUFDMUIsZUFBZSxFQUFFLEdBQUcsQ0FBQyxlQUFlO1FBQ3BDLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtRQUN0QixhQUFhLEVBQUUsR0FBRyxDQUFDLGFBQWE7UUFDaEMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxhQUFhO1FBQ2hDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtRQUNkLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxtQkFBbUI7UUFDNUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO1FBQ3hCLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQzlCLENBQUM7SUFDRiwwQkFBMEI7SUFDMUIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FDbEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQzNELEVBQUUsQ0FDSCxDQUFDO0FBQ0osQ0FBQztBQXNCRDs7R0FFRztBQUNILHlDQUF5QztBQUN6QyxTQUFnQixhQUFhLENBQzNCLEdBQXVCO0lBRXZCLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRztRQUNiLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtRQUNkLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztLQUNqQixDQUFDO0lBQ0YsMEJBQTBCO0lBQzFCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQ2xDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUMzRCxFQUFFLENBQ0gsQ0FBQztBQUNKLENBQUM7QUFDRCx3Q0FBd0M7QUFFeEM7Ozs7O0dBS0c7QUFDSCxNQUFhLDRCQUE2QixTQUFRLEdBQUcsQ0FBQyxXQUFXO0lBcUIvRDs7Ozs7O09BTUc7SUFDSCxZQUNFLEtBQTJCLEVBQzNCLEVBQVUsRUFDVixLQUF3QztRQUV4QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLElBQUksRUFBRSw0QkFBNEIsQ0FBQyxzQkFBc0I7WUFDekQsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLEtBQUssQ0FBRTtTQUM3RCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDOztBQTFDSCxvRUEyQ0M7OztBQTFDQzs7R0FFRztBQUNvQixtREFBc0IsR0FDM0MsMkNBQTJDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHZW5lcmF0ZWQgYnkgY2RrLWltcG9ydFxuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIFJldHVybnMsIGFkZHMsIGVkaXRzLCBhbmQgcmVtb3ZlcyBGZWRlcmF0ZWQgRGF0YWJhc2UgSW5zdGFuY2VzLlxuICpcbiAqIEBzY2hlbWEgQ2ZuRmVkZXJhdGVkRGF0YWJhc2VJbnN0YW5jZVByb3BzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2ZuRmVkZXJhdGVkRGF0YWJhc2VJbnN0YW5jZVByb3BzIHtcbiAgLyoqXG4gICAqIENsb3VkIHByb3ZpZGVyIGxpbmtlZCB0byB0aGlzIGRhdGEgbGFrZS5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5GZWRlcmF0ZWREYXRhYmFzZUluc3RhbmNlUHJvcHMjQ2xvdWRQcm92aWRlckNvbmZpZ1xuICAgKi9cbiAgcmVhZG9ubHkgY2xvdWRQcm92aWRlckNvbmZpZz86IENsb3VkUHJvdmlkZXJDb25maWc7XG5cbiAgLyoqXG4gICAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjbG91ZCBwcm92aWRlciByZWdpb24gdG8gd2hpY2ggdGhlIGRhdGEgbGFrZSByb3V0ZXMgY2xpZW50IGNvbm5lY3Rpb25zLiBNb25nb0RCIENsb3VkIHN1cHBvcnRzIEFXUyBvbmx5LlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkZlZGVyYXRlZERhdGFiYXNlSW5zdGFuY2VQcm9wcyNEYXRhUHJvY2Vzc1JlZ2lvblxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YVByb2Nlc3NSZWdpb24/OiBEYXRhUHJvY2Vzc1JlZ2lvbjtcblxuICAvKipcbiAgICogVW5pcXVlIDI0LWhleGFkZWNpbWFsIGRpZ2l0IHN0cmluZyB0aGF0IGlkZW50aWZpZXMgeW91ciBwcm9qZWN0LlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkZlZGVyYXRlZERhdGFiYXNlSW5zdGFuY2VQcm9wcyNQcm9qZWN0SWRcbiAgICovXG4gIHJlYWRvbmx5IHByb2plY3RJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIGRhdGEgZmVkZXJhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5GZWRlcmF0ZWREYXRhYmFzZUluc3RhbmNlUHJvcHMjVGVuYW50TmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgdGVuYW50TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyByZXF1ZXN0IHNob3VsZCBjaGVjayBpZiB0aGUgcmVxdWVzdGluZyBJQU0gcm9sZSBjYW4gcmVhZCBmcm9tIHRoZSBTMyBidWNrZXQuIEFXUyBjaGVja3MgaWYgdGhlIHJvbGUgY2FuIGxpc3QgdGhlIG9iamVjdHMgaW4gdGhlIGJ1Y2tldCBiZWZvcmUgd3JpdGluZyB0byBpdC4gU29tZSBJQU0gcm9sZXMgb25seSBuZWVkIHdyaXRlIHBlcm1pc3Npb25zLiBUaGlzIGZsYWcgYWxsb3dzIHlvdSB0byBza2lwIHRoYXQgY2hlY2suXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuRmVkZXJhdGVkRGF0YWJhc2VJbnN0YW5jZVByb3BzI1NraXBSb2xlVmFsaWRhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcFJvbGVWYWxpZGF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCBkYXRhIHN0b3JlIGFuZCBpdHMgbWFwcGluZyB0byBNb25nb0RCIENsb3VkIGRhdGFiYXNlcy5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5GZWRlcmF0ZWREYXRhYmFzZUluc3RhbmNlUHJvcHMjU3RvcmFnZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZT86IFN0b3JhZ2U7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9maWxlIGlzIGRlZmluZWQgaW4gQVdTIFNlY3JldCBtYW5hZ2VyLiBTZWUgW1NlY3JldCBNYW5hZ2VyIFByb2ZpbGUgc2V0dXBdKC4uLy4uLy4uL2V4YW1wbGVzL3Byb2ZpbGUtc2VjcmV0LnlhbWwpLlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkZlZGVyYXRlZERhdGFiYXNlSW5zdGFuY2VQcm9wcyNQcm9maWxlXG4gICAqL1xuICByZWFkb25seSBwcm9maWxlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdDZm5GZWRlcmF0ZWREYXRhYmFzZUluc3RhbmNlUHJvcHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0NmbkZlZGVyYXRlZERhdGFiYXNlSW5zdGFuY2VQcm9wcyhcbiAgb2JqOiBDZm5GZWRlcmF0ZWREYXRhYmFzZUluc3RhbmNlUHJvcHMgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBDbG91ZFByb3ZpZGVyQ29uZmlnOiB0b0pzb25fQ2xvdWRQcm92aWRlckNvbmZpZyhvYmouY2xvdWRQcm92aWRlckNvbmZpZyksXG4gICAgRGF0YVByb2Nlc3NSZWdpb246IHRvSnNvbl9EYXRhUHJvY2Vzc1JlZ2lvbihvYmouZGF0YVByb2Nlc3NSZWdpb24pLFxuICAgIFByb2plY3RJZDogb2JqLnByb2plY3RJZCxcbiAgICBUZW5hbnROYW1lOiBvYmoudGVuYW50TmFtZSxcbiAgICBTa2lwUm9sZVZhbGlkYXRpb246IG9iai5za2lwUm9sZVZhbGlkYXRpb24sXG4gICAgU3RvcmFnZTogdG9Kc29uX1N0b3JhZ2Uob2JqLnN0b3JhZ2UpLFxuICAgIFByb2ZpbGU6IG9iai5wcm9maWxlLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDbG91ZCBwcm92aWRlciBsaW5rZWQgdG8gdGhpcyBkYXRhIGxha2UuLlxuICpcbiAqIEBzY2hlbWEgQ2xvdWRQcm92aWRlckNvbmZpZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkUHJvdmlkZXJDb25maWcge1xuICAvKipcbiAgICogVW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJvbGUgdGhhdCB0aGUgZGF0YSBsYWtlIGNhbiB1c2UgdG8gYWNjZXNzIHRoZSBkYXRhIHN0b3Jlcy5SZXF1aXJlZCBpZiBzcGVjaWZ5aW5nIGNsb3VkUHJvdmlkZXJDb25maWcuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2xvdWRQcm92aWRlckNvbmZpZyNFeHRlcm5hbElkXG4gICAqL1xuICByZWFkb25seSBleHRlcm5hbElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgSWRlbnRpdHkgYW5kIEFjY2VzcyBNYW5hZ2VtZW50IChJQU0pIHJvbGUgdGhhdCB0aGUgZGF0YSBsYWtlIGFzc3VtZXMgd2hlbiBhY2Nlc3NpbmcgZGF0YSBzdG9yZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2xvdWRQcm92aWRlckNvbmZpZyNJYW1Bc3N1bWVkUm9sZUFSTlxuICAgKi9cbiAgcmVhZG9ubHkgaWFtQXNzdW1lZFJvbGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSB1c2VyIHRoYXQgdGhlIGRhdGEgbGFrZSBhc3N1bWVzIHdoZW4gYWNjZXNzaW5nIGRhdGEgc3RvcmVzLlxuICAgKlxuICAgKiBAc2NoZW1hIENsb3VkUHJvdmlkZXJDb25maWcjSWFtVXNlckFSTlxuICAgKi9cbiAgcmVhZG9ubHkgaWFtVXNlckFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJvbGUgdGhhdCB0aGUgZGF0YSBsYWtlIGNhbiB1c2UgdG8gYWNjZXNzIHRoZSBkYXRhIHN0b3Jlcy5SZXF1aXJlZCBpZiBzcGVjaWZ5aW5nIGNsb3VkUHJvdmlkZXJDb25maWcuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2xvdWRQcm92aWRlckNvbmZpZyNSb2xlSWRcbiAgICovXG4gIHJlYWRvbmx5IHJvbGVJZD86IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgUzMgZGF0YSBidWNrZXQgdGhhdCB0aGUgcHJvdmlkZWQgcm9sZSBJRCBpcyBhdXRob3JpemVkIHRvIGFjY2Vzcy5SZXF1aXJlZCBpZiBzcGVjaWZ5aW5nIGNsb3VkUHJvdmlkZXJDb25maWcuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2xvdWRQcm92aWRlckNvbmZpZyNUZXN0UzNCdWNrZXRcbiAgICovXG4gIHJlYWRvbmx5IHRlc3RTM0J1Y2tldD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ2xvdWRQcm92aWRlckNvbmZpZycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQ2xvdWRQcm92aWRlckNvbmZpZyhcbiAgb2JqOiBDbG91ZFByb3ZpZGVyQ29uZmlnIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgRXh0ZXJuYWxJZDogb2JqLmV4dGVybmFsSWQsXG4gICAgSWFtQXNzdW1lZFJvbGVBUk46IG9iai5pYW1Bc3N1bWVkUm9sZUFybixcbiAgICBJYW1Vc2VyQVJOOiBvYmouaWFtVXNlckFybixcbiAgICBSb2xlSWQ6IG9iai5yb2xlSWQsXG4gICAgVGVzdFMzQnVja2V0OiBvYmoudGVzdFMzQnVja2V0LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xvdWQgcHJvdmlkZXIgcmVnaW9uIHRvIHdoaWNoIHRoZSBkYXRhIGxha2Ugcm91dGVzIGNsaWVudCBjb25uZWN0aW9ucy4gTW9uZ29EQiBDbG91ZCBzdXBwb3J0cyBBV1Mgb25seS5cbiAqXG4gKiBAc2NoZW1hIERhdGFQcm9jZXNzUmVnaW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVByb2Nlc3NSZWdpb24ge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgY2xvdWQgc2VydmljZSB0aGF0IGhvc3RzIHRoZSBkYXRhIGxha2UncyBkYXRhIHN0b3Jlcy5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhUHJvY2Vzc1JlZ2lvbiNDbG91ZFByb3ZpZGVyXG4gICAqL1xuICByZWFkb25seSBjbG91ZFByb3ZpZGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSByZWdpb24gdG8gd2hpY2ggdGhlIGRhdGEgbGFrZSByb3V0ZXMgY2xpZW50IGNvbm5lY3Rpb25zLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFQcm9jZXNzUmVnaW9uI1JlZ2lvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0RhdGFQcm9jZXNzUmVnaW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9EYXRhUHJvY2Vzc1JlZ2lvbihcbiAgb2JqOiBEYXRhUHJvY2Vzc1JlZ2lvbiB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIENsb3VkUHJvdmlkZXI6IG9iai5jbG91ZFByb3ZpZGVyLFxuICAgIFJlZ2lvbjogb2JqLnJlZ2lvbixcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCBkYXRhIHN0b3JlIGFuZCBpdHMgbWFwcGluZyB0byBNb25nb0RCIENsb3VkIGRhdGFiYXNlcy5cbiAqXG4gKiBAc2NoZW1hIFN0b3JhZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlIHtcbiAgLyoqXG4gICAqIEFycmF5IHRoYXQgY29udGFpbnMgdGhlIHF1ZXJ5YWJsZSBkYXRhYmFzZXMgYW5kIGNvbGxlY3Rpb25zIGZvciB0aGlzIGRhdGEgbGFrZS5cbiAgICpcbiAgICogQHNjaGVtYSBTdG9yYWdlI0RhdGFiYXNlc1xuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2VzPzogRGF0YWJhc2VbXTtcblxuICAvKipcbiAgICogQXJyYXkgdGhhdCBjb250YWlucyB0aGUgZGF0YSBzdG9yZXMgZm9yIHRoZSBkYXRhIGxha2UuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RvcmFnZSNTdG9yZXNcbiAgICovXG4gIHJlYWRvbmx5IHN0b3Jlcz86IFN0b3JlW107XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1N0b3JhZ2UnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1N0b3JhZ2UoXG4gIG9iajogU3RvcmFnZSB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIERhdGFiYXNlczogb2JqLmRhdGFiYXNlcz8ubWFwKCh5KSA9PiB0b0pzb25fRGF0YWJhc2UoeSkpLFxuICAgIFN0b3Jlczogb2JqLnN0b3Jlcz8ubWFwKCh5KSA9PiB0b0pzb25fU3RvcmUoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIERhdGFiYXNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2Uge1xuICAvKipcbiAgICogQXJyYXkgb2YgY29sbGVjdGlvbnMgYW5kIGRhdGEgc291cmNlcyB0aGF0IG1hcCB0byBhIHN0b3JlcyBkYXRhIHN0b3JlLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFiYXNlI0NvbGxlY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBjb2xsZWN0aW9ucz86IENvbGxlY3Rpb25bXTtcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygd2lsZGNhcmQgY29sbGVjdGlvbnMgaW4gdGhlIGRhdGFiYXNlLiBUaGlzIG9ubHkgYXBwbGllcyB0byBTMyBkYXRhIHNvdXJjZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YWJhc2UjTWF4V2lsZGNhcmRDb2xsZWN0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF4V2lsZGNhcmRDb2xsZWN0aW9ucz86IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBkYXRhYmFzZSB0byB3aGljaCB0aGUgZGF0YSBsYWtlIG1hcHMgZGF0YS5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhYmFzZSNOYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBcnJheSBvZiBhZ2dyZWdhdGlvbiBwaXBlbGluZXMgdGhhdCBhcHBseSB0byB0aGUgY29sbGVjdGlvbi4gVGhpcyBvbmx5IGFwcGxpZXMgdG8gUzMgZGF0YSBzb3VyY2VzLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFiYXNlI1ZpZXdzXG4gICAqL1xuICByZWFkb25seSB2aWV3cz86IFZpZXdbXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRGF0YWJhc2UnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0RhdGFiYXNlKFxuICBvYmo6IERhdGFiYXNlIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgQ29sbGVjdGlvbnM6IG9iai5jb2xsZWN0aW9ucz8ubWFwKCh5KSA9PiB0b0pzb25fQ29sbGVjdGlvbih5KSksXG4gICAgTWF4V2lsZGNhcmRDb2xsZWN0aW9uczogb2JqLm1heFdpbGRjYXJkQ29sbGVjdGlvbnMsXG4gICAgTmFtZTogb2JqLm5hbWUsXG4gICAgVmlld3M6IG9iai52aWV3cz8ubWFwKCh5KSA9PiB0b0pzb25fVmlldyh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEFycmF5IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgc3RvcmVzIGZvciB0aGUgZGF0YSBsYWtlLlxuICpcbiAqIEBzY2hlbWEgU3RvcmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yZSB7XG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIGRhdGEgc3RvcmUuIFRoZSBkYXRhYmFzZXMuW25dLmNvbGxlY3Rpb25zLltuXS5kYXRhU291cmNlcy5bbl0uc3RvcmVOYW1lIGZpZWxkIHJlZmVyZW5jZXMgdGhpcyB2YWx1ZXMgYXMgcGFydCBvZiB0aGUgbWFwcGluZyBjb25maWd1cmF0aW9uLiBUbyB1c2UgTW9uZ29EQiBDbG91ZCBhcyBhIGRhdGEgc3RvcmUsIHRoZSBkYXRhIGxha2UgcmVxdWlyZXMgYSBzZXJ2ZXJsZXNzIGluc3RhbmNlIG9yIGFuIE0xMCBvciBoaWdoZXIgY2x1c3Rlci5cbiAgICpcbiAgICogQHNjaGVtYSBTdG9yZSNOYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbGxvd2VkIHZhbHVlcyBhdGxhcywgaHR0cCwgb25saW5lX2FyY2hpdmUsIHMzIGFuZCBEYXRhTGFrZUF6dXJlQmxvYlN0b3JlLlxuICAgKlxuICAgKiBAc2NoZW1hIFN0b3JlI1Byb3ZpZGVyXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgb2YgdGhlIE1vbmdvREIgQ2xvdWQgY2x1c3RlciBvbiB3aGljaCB0aGUgc3RvcmUgaXMgYmFzZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RvcmUjQ2x1c3Rlck5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGNsdXN0ZXJOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVbmlxdWUgMjQtaGV4YWRlY2ltYWwgZGlnaXQgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyB0aGUgcHJvamVjdC5SZWdleCBeKFthLWYwLTldezI0fSkkIC5cbiAgICpcbiAgICogQHNjaGVtYSBTdG9yZSNQcm9qZWN0SWRcbiAgICovXG4gIHJlYWRvbmx5IHByb2plY3RJZD86IHN0cmluZztcblxuICAvKipcbiAgICogTW9uZ29EQiBDbG91ZCBjbHVzdGVyIHJlYWQgcHJlZmVyZW5jZSwgd2hpY2ggZGVzY3JpYmVzIGhvdyB0byByb3V0ZSByZWFkIHJlcXVlc3RzIHRvIHRoZSBjbHVzdGVyLlxuICAgKlxuICAgKiBAc2NoZW1hIFN0b3JlI1JlYWRQcmVmZXJlbmNlXG4gICAqL1xuICByZWFkb25seSByZWFkUHJlZmVyZW5jZT86IFJlYWRQcmVmZXJlbmNlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdTdG9yZScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fU3RvcmUoXG4gIG9iajogU3RvcmUgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBOYW1lOiBvYmoubmFtZSxcbiAgICBQcm92aWRlcjogb2JqLnByb3ZpZGVyLFxuICAgIENsdXN0ZXJOYW1lOiBvYmouY2x1c3Rlck5hbWUsXG4gICAgUHJvamVjdElkOiBvYmoucHJvamVjdElkLFxuICAgIFJlYWRQcmVmZXJlbmNlOiB0b0pzb25fUmVhZFByZWZlcmVuY2Uob2JqLnJlYWRQcmVmZXJlbmNlKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQXJyYXkgb2YgY29sbGVjdGlvbnMgYW5kIGRhdGEgc291cmNlcyB0aGF0IG1hcCB0byBhIHN0b3JlcyBkYXRhIHN0b3JlLlxuICpcbiAqIEBzY2hlbWEgQ29sbGVjdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb24ge1xuICAvKipcbiAgICogQXJyYXkgdGhhdCBjb250YWlucyB0aGUgZGF0YSBzdG9yZXMgdGhhdCBtYXAgdG8gYSBjb2xsZWN0aW9uIGZvciB0aGlzIGRhdGEgbGFrZS5cbiAgICpcbiAgICogQHNjaGVtYSBDb2xsZWN0aW9uI0RhdGFTb3VyY2VzXG4gICAqL1xuICByZWFkb25seSBkYXRhU291cmNlcz86IERhdGFTb3VyY2VbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBDb2xsZWN0aW9uI05hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0NvbGxlY3Rpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0NvbGxlY3Rpb24oXG4gIG9iajogQ29sbGVjdGlvbiB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIERhdGFTb3VyY2VzOiBvYmouZGF0YVNvdXJjZXM/Lm1hcCgoeSkgPT4gdG9Kc29uX0RhdGFTb3VyY2UoeSkpLFxuICAgIE5hbWU6IG9iai5uYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIFZpZXdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWaWV3IHtcbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIHRoYXQgaWRlbnRpZmllcyB0aGUgdmlldywgd2hpY2ggY29ycmVzcG9uZHMgdG8gYW4gYWdncmVnYXRpb24gcGlwZWxpbmUgb24gYSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIFZpZXcjTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQWdncmVnYXRpb24gcGlwZWxpbmUgc3RhZ2VzIHRvIGFwcGx5IHRvIHRoZSBzb3VyY2UgY29sbGVjdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBWaWV3I1BpcGVsaW5lXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZT86IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBzb3VyY2UgY29sbGVjdGlvbiBmb3IgdGhlIHZpZXcuXG4gICAqXG4gICAqIEBzY2hlbWEgVmlldyNTb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVmlldycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVmlldyhcbiAgb2JqOiBWaWV3IHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgTmFtZTogb2JqLm5hbWUsXG4gICAgUGlwZWxpbmU6IG9iai5waXBlbGluZSxcbiAgICBTb3VyY2U6IG9iai5zb3VyY2UsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgUmVhZFByZWZlcmVuY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFkUHJlZmVyZW5jZSB7XG4gIC8qKlxuICAgKiBcInByaW1hcnlcIiBcInByaW1hcnlQcmVmZXJyZWRcIiBcInNlY29uZGFyeVwiIFwic2Vjb25kYXJ5UHJlZmVycmVkXCIgXCJuZWFyZXN0XCJcbiAgICogUmVhZCBwcmVmZXJlbmNlIG1vZGUgdGhhdCBzcGVjaWZpZXMgdG8gd2hpY2ggcmVwbGljYSBzZXQgbWVtYmVyIHRvIHJvdXRlIHRoZSByZWFkIHJlcXVlc3RzLlxuICAgKlxuICAgKiBAc2NoZW1hIFJlYWRQcmVmZXJlbmNlI01vZGVcbiAgICovXG4gIHJlYWRvbmx5IG1vZGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gcmVwbGljYXRpb24gbGFnLCBvciBzdGFsZW5lc3MsIGZvciByZWFkcyBmcm9tIHNlY29uZGFyaWVzLlxuICAgKlxuICAgKiBAc2NoZW1hIFJlYWRQcmVmZXJlbmNlI01heFN0YWxlbmVzc1NlY29uZHNcbiAgICovXG4gIHJlYWRvbmx5IG1heFN0YWxlbmVzc1NlY29uZHM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpc3QgdGhhdCBjb250YWlucyB0YWcgc2V0cyBvciB0YWcgc3BlY2lmaWNhdGlvbiBkb2N1bWVudHMuIElmIHNwZWNpZmllZCwgQXRsYXMgRGF0YSBMYWtlIHJvdXRlcyByZWFkIHJlcXVlc3RzIHRvIHJlcGxpY2Egc2V0IG1lbWJlciBvciBtZW1iZXJzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIHRhZ3MuXG4gICAqXG4gICAqIEBzY2hlbWEgUmVhZFByZWZlcmVuY2UjVGFnU2V0c1xuICAgKi9cbiAgcmVhZG9ubHkgdGFnU2V0cz86IFRhZ1NldFtdW107XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1JlYWRQcmVmZXJlbmNlJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9SZWFkUHJlZmVyZW5jZShcbiAgb2JqOiBSZWFkUHJlZmVyZW5jZSB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIE1vZGU6IG9iai5tb2RlLFxuICAgIE1heFN0YWxlbmVzc1NlY29uZHM6IG9iai5tYXhTdGFsZW5lc3NTZWNvbmRzLFxuICAgIFRhZ1NldHM6IG9iai50YWdTZXRzPy5tYXAoKHkpID0+IHk/Lm1hcCgoeCkgPT4gdG9Kc29uX1RhZ1NldCh4KSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIERhdGFTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhU291cmNlIHtcbiAgLyoqXG4gICAqIEZsYWcgdGhhdCB2YWxpZGF0ZXMgdGhlIHNjaGVtZSBpbiB0aGUgc3BlY2lmaWVkIFVSTHMuIElmIHRydWUsIGFsbG93cyBpbnNlY3VyZSBIVFRQIHNjaGVtZSwgZG9lc24ndCB2ZXJpZnkgdGhlIHNlcnZlcidzIGNlcnRpZmljYXRlIGNoYWluIGFuZCBob3N0bmFtZSwgYW5kIGFjY2VwdHMgYW55IGNlcnRpZmljYXRlIHdpdGggYW55IGhvc3RuYW1lIHByZXNlbnRlZCBieSB0aGUgc2VydmVyLiBJZiBmYWxzZSwgYWxsb3dzIHNlY3VyZSBIVFRQUyBzY2hlbWUgb25seS5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhU291cmNlI0FsbG93SW5zZWN1cmVcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93SW5zZWN1cmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIGNvbGxlY3Rpb24gaW4gdGhlIGRhdGFiYXNlLiBGb3IgY3JlYXRpbmcgYSB3aWxkY2FyZCAoKikgY29sbGVjdGlvbiwgeW91IG11c3Qgb21pdCB0aGlzIHBhcmFtZXRlci5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhU291cmNlI0NvbGxlY3Rpb25cbiAgICovXG4gIHJlYWRvbmx5IGNvbGxlY3Rpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlZ2V4IHBhdHRlcm4gdG8gdXNlIGZvciBjcmVhdGluZyB0aGUgd2lsZGNhcmQgKCopIGNvbGxlY3Rpb24uIFRvIGxlYXJuIG1vcmUgYWJvdXQgdGhlIHJlZ2V4IHN5bnRheCwgc2VlIEdvIHByb2dyYW1taW5nIGxhbmd1YWdlLiggaHR0cHM6Ly9wa2cuZ28uZGV2L3JlZ2V4cCApLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFTb3VyY2UjQ29sbGVjdGlvblJlZ2V4XG4gICAqL1xuICByZWFkb25seSBjb2xsZWN0aW9uUmVnZXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIHRoYXQgaWRlbnRpZmllcyB0aGUgZGF0YWJhc2UsIHdoaWNoIGNvbnRhaW5zIHRoZSBjb2xsZWN0aW9uIGluIHRoZSBjbHVzdGVyLiBZb3UgbXVzdCBvbWl0IHRoaXMgcGFyYW1ldGVyIHRvIGdlbmVyYXRlIHdpbGRjYXJkICgqKSBjb2xsZWN0aW9ucyBmb3IgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIGRhdGFiYXNlcy5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhU291cmNlI0RhdGFiYXNlXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZT86IHN0cmluZztcblxuICAvKipcbiAgICogUmVnZXggcGF0dGVybiB0byB1c2UgZm9yIGNyZWF0aW5nIHRoZSB3aWxkY2FyZCAoKikgY29sbGVjdGlvbi4gVG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgcmVnZXggc3ludGF4LCBzZWUgR28gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuKCBodHRwczovL3BrZy5nby5kZXYvcmVnZXhwICkuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YVNvdXJjZSNEYXRhYmFzZVJlZ2V4XG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZVJlZ2V4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGaWxlIGZvcm1hdCB0aGF0IE1vbmdvREIgQ2xvdWQgdXNlcyBpZiBpdCBlbmNvdW50ZXJzIGEgZmlsZSB3aXRob3V0IGEgZmlsZSBleHRlbnNpb24gd2hpbGUgc2VhcmNoaW5nIHN0b3JlTmFtZS5FbnVtOiBcIi5hdnJvXCIgXCIuYXZyby5iejJcIiBcIi5hdnJvLmd6XCIgXCIuYnNvblwiIFwiLmJzb24uYnoyXCIgXCIuYnNvbi5nelwiIFwiLmJzb254XCIgXCIuY3N2XCIgXCIuY3N2LmJ6MlwiIFwiLmNzdi5nelwiIFwiLmpzb25cIiBcIi5qc29uLmJ6MlwiIFwiLmpzb24uZ3pcIiBcIi5vcmNcIiBcIi5wYXJxdWV0XCIgXCIudHN2XCIgXCIudHN2LmJ6MlwiIFwiLnRzdi5nelwiXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YVNvdXJjZSNEZWZhdWx0Rm9ybWF0XG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Rm9ybWF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGaWxlIHBhdGggdGhhdCBjb250cm9scyBob3cgTW9uZ29EQiBDbG91ZCBzZWFyY2hlcyBmb3IgYW5kIHBhcnNlcyBmaWxlcyBpbiB0aGUgc3RvcmVOYW1lIGJlZm9yZSBtYXBwaW5nIHRoZW0gdG8gYSBjb2xsZWN0aW9uLlNwZWNpZnkgLyB0byBjYXB0dXJlIGFsbCBmaWxlcyBhbmQgZm9sZGVycyBmcm9tIHRoZSBwcmVmaXggcGF0aC5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhU291cmNlI1BhdGhcbiAgICovXG4gIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgZm9yIHRoZSBmaWVsZCB0aGF0IGluY2x1ZGVzIHRoZSBwcm92ZW5hbmNlIG9mIHRoZSBkb2N1bWVudHMgaW4gdGhlIHJlc3VsdHMuIE1vbmdvREIgQ2xvdWQgcmV0dXJucyBkaWZmZXJlbnQgZmllbGRzIGluIHRoZSByZXN1bHRzIGZvciBlYWNoIHN1cHBvcnRlZCBwcm92aWRlci5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhU291cmNlI1Byb3ZlbmFuY2VGaWVsZE5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHByb3ZlbmFuY2VGaWVsZE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIHRoYXQgaWRlbnRpZmllcyB0aGUgZGF0YSBzdG9yZSB0aGF0IE1vbmdvREIgQ2xvdWQgbWFwcyB0byB0aGUgY29sbGVjdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhU291cmNlI1N0b3JlTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVUkxzIG9mIHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGRhdGEgZmlsZXMuIFlvdSBjYW4ndCBzcGVjaWZ5IFVSTHMgdGhhdCByZXF1aXJlIGF1dGhlbnRpY2F0aW9uLiBBdGxhcyBEYXRhIExha2UgY3JlYXRlcyBhIHBhcnRpdGlvbiBmb3IgZWFjaCBVUkwuIElmIGVtcHR5IG9yIG9taXR0ZWQsIERhdGEgTGFrZSB1c2VzIHRoZSBVUkxzIGZyb20gdGhlIHN0b3JlIHNwZWNpZmllZCBpbiB0aGUgZGF0YVNvdXJjZXMuc3RvcmVOYW1lIHBhcmFtZXRlci5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhU291cmNlI1VybHNcbiAgICovXG4gIHJlYWRvbmx5IHVybHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRGF0YVNvdXJjZScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRGF0YVNvdXJjZShcbiAgb2JqOiBEYXRhU291cmNlIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgQWxsb3dJbnNlY3VyZTogb2JqLmFsbG93SW5zZWN1cmUsXG4gICAgQ29sbGVjdGlvbjogb2JqLmNvbGxlY3Rpb24sXG4gICAgQ29sbGVjdGlvblJlZ2V4OiBvYmouY29sbGVjdGlvblJlZ2V4LFxuICAgIERhdGFiYXNlOiBvYmouZGF0YWJhc2UsXG4gICAgRGF0YWJhc2VSZWdleDogb2JqLmRhdGFiYXNlUmVnZXgsXG4gICAgRGVmYXVsdEZvcm1hdDogb2JqLmRlZmF1bHRGb3JtYXQsXG4gICAgUGF0aDogb2JqLnBhdGgsXG4gICAgUHJvdmVuYW5jZUZpZWxkTmFtZTogb2JqLnByb3ZlbmFuY2VGaWVsZE5hbWUsXG4gICAgU3RvcmVOYW1lOiBvYmouc3RvcmVOYW1lLFxuICAgIFVybHM6IG9iai51cmxzPy5tYXAoKHkpID0+IHkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIFRhZ1NldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZ1NldCB7XG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCBvZiB0aGUgdGFnLlxuICAgKlxuICAgKiBAc2NoZW1hIFRhZ1NldCNOYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCBvZiB0aGUgdGFnLlxuICAgKlxuICAgKiBAc2NoZW1hIFRhZ1NldCNWYWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1RhZ1NldCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVGFnU2V0KFxuICBvYmo6IFRhZ1NldCB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIE5hbWU6IG9iai5uYW1lLFxuICAgIFZhbHVlOiBvYmoudmFsdWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgQ2xvdWRGb3JtYXRpb24gYE1vbmdvREI6OkF0bGFzOjpGZWRlcmF0ZWREYXRhYmFzZUluc3RhbmNlYFxuICpcbiAqIEBjbG91ZGZvcm1hdGlvblJlc291cmNlIE1vbmdvREI6OkF0bGFzOjpGZWRlcmF0ZWREYXRhYmFzZUluc3RhbmNlXG4gKiBAc3RhYmlsaXR5IGV4dGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBDZm5GZWRlcmF0ZWREYXRhYmFzZUluc3RhbmNlIGV4dGVuZHMgY2RrLkNmblJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSB0eXBlIG5hbWUgZm9yIHRoaXMgcmVzb3VyY2UgY2xhc3MuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENGTl9SRVNPVVJDRV9UWVBFX05BTUUgPVxuICAgIFwiTW9uZ29EQjo6QXRsYXM6OkZlZGVyYXRlZERhdGFiYXNlSW5zdGFuY2VcIjtcblxuICAvKipcbiAgICogUmVzb3VyY2UgcHJvcHMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IENmbkZlZGVyYXRlZERhdGFiYXNlSW5zdGFuY2VQcm9wcztcblxuICAvKipcbiAgICogQXR0cmlidXRlIGBNb25nb0RCOjpBdGxhczo6RmVkZXJhdGVkRGF0YWJhc2VJbnN0YW5jZS5Ib3N0TmFtZXNgXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXR0ckhvc3ROYW1lczogc3RyaW5nW107XG4gIC8qKlxuICAgKiBBdHRyaWJ1dGUgYE1vbmdvREI6OkF0bGFzOjpGZWRlcmF0ZWREYXRhYmFzZUluc3RhbmNlLlN0YXRlYFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF0dHJTdGF0ZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgYE1vbmdvREI6OkF0bGFzOjpGZWRlcmF0ZWREYXRhYmFzZUluc3RhbmNlYC5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gc2NvcGUgaW4gd2hpY2ggdGhpcyByZXNvdXJjZSBpcyBkZWZpbmVkXG4gICAqIEBwYXJhbSBpZCAgICAtIHNjb3BlZCBpZCBvZiB0aGUgcmVzb3VyY2VcbiAgICogQHBhcmFtIHByb3BzIC0gcmVzb3VyY2UgcHJvcGVydGllc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IENmbkZlZGVyYXRlZERhdGFiYXNlSW5zdGFuY2VQcm9wc1xuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHR5cGU6IENmbkZlZGVyYXRlZERhdGFiYXNlSW5zdGFuY2UuQ0ZOX1JFU09VUkNFX1RZUEVfTkFNRSxcbiAgICAgIHByb3BlcnRpZXM6IHRvSnNvbl9DZm5GZWRlcmF0ZWREYXRhYmFzZUluc3RhbmNlUHJvcHMocHJvcHMpISxcbiAgICB9KTtcblxuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMuYXR0ckhvc3ROYW1lcyA9IGNkay5Ub2tlbi5hc0xpc3QodGhpcy5nZXRBdHQoXCJIb3N0TmFtZXNcIikpO1xuICAgIHRoaXMuYXR0clN0YXRlID0gY2RrLlRva2VuLmFzU3RyaW5nKHRoaXMuZ2V0QXR0KFwiU3RhdGVcIikpO1xuICB9XG59XG4iXX0=