UNPKG

awscdk-resources-mongodbatlas

Version:

MongoDB Atlas CDK Construct Library for AWS CloudFormation Resources

205 lines 30.3 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.CfnStreamInstance = exports.DbRoleToExecuteType = exports.StreamsConnectionType = exports.StreamsDataProcessRegionCloudProvider = void 0; exports.toJson_CfnStreamInstanceProps = toJson_CfnStreamInstanceProps; exports.toJson_StreamsDataProcessRegion = toJson_StreamsDataProcessRegion; exports.toJson_StreamConfig = toJson_StreamConfig; exports.toJson_StreamsConnection = toJson_StreamsConnection; exports.toJson_StreamsKafkaAuthentication = toJson_StreamsKafkaAuthentication; exports.toJson_StreamsKafkaSecurity = toJson_StreamsKafkaSecurity; exports.toJson_DbRoleToExecute = toJson_DbRoleToExecute; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); // Generated by cdk-import const cdk = require("aws-cdk-lib"); /** * Converts an object of type 'CfnStreamInstanceProps' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnStreamInstanceProps(obj) { if (obj === undefined) { return undefined; } const result = { Profile: obj.profile, InstanceName: obj.instanceName, DataProcessRegion: toJson_StreamsDataProcessRegion(obj.dataProcessRegion), StreamConfig: toJson_StreamConfig(obj.streamConfig), Connections: obj.connections?.map((y) => toJson_StreamsConnection(y)), ProjectId: obj.projectId, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'StreamsDataProcessRegion' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_StreamsDataProcessRegion(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 'StreamConfig' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_StreamConfig(obj) { if (obj === undefined) { return undefined; } const result = { Tier: obj.tier, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'StreamsConnection' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_StreamsConnection(obj) { if (obj === undefined) { return undefined; } const result = { Name: obj.name, Type: obj.type, Authentication: toJson_StreamsKafkaAuthentication(obj.authentication), BootstrapServers: obj.bootstrapServers, Security: toJson_StreamsKafkaSecurity(obj.security), ClusterName: obj.clusterName, DbRoleToExecute: toJson_DbRoleToExecute(obj.dbRoleToExecute), }; // 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 */ /** * Label that identifies the cloud service provider where MongoDB Cloud performs stream processing. Currently, this parameter supports AWS only. * * @schema StreamsDataProcessRegionCloudProvider */ var StreamsDataProcessRegionCloudProvider; (function (StreamsDataProcessRegionCloudProvider) { /** AWS */ StreamsDataProcessRegionCloudProvider["AWS"] = "AWS"; /** GCP */ StreamsDataProcessRegionCloudProvider["GCP"] = "GCP"; /** AZURE */ StreamsDataProcessRegionCloudProvider["AZURE"] = "AZURE"; /** TENANT */ StreamsDataProcessRegionCloudProvider["TENANT"] = "TENANT"; /** SERVERLESS */ StreamsDataProcessRegionCloudProvider["SERVERLESS"] = "SERVERLESS"; })(StreamsDataProcessRegionCloudProvider || (exports.StreamsDataProcessRegionCloudProvider = StreamsDataProcessRegionCloudProvider = {})); /** * Type of the connection. Can be either Cluster or Kafka. * * @schema StreamsConnectionType */ var StreamsConnectionType; (function (StreamsConnectionType) { /** Kafka */ StreamsConnectionType["KAFKA"] = "Kafka"; /** Cluster */ StreamsConnectionType["CLUSTER"] = "Cluster"; /** Sample */ StreamsConnectionType["SAMPLE"] = "Sample"; })(StreamsConnectionType || (exports.StreamsConnectionType = StreamsConnectionType = {})); /** * Converts an object of type 'StreamsKafkaAuthentication' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_StreamsKafkaAuthentication(obj) { if (obj === undefined) { return undefined; } const result = { Mechanism: obj.mechanism, Username: obj.username, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'StreamsKafkaSecurity' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_StreamsKafkaSecurity(obj) { if (obj === undefined) { return undefined; } const result = { BrokerPublicCertificate: obj.brokerPublicCertificate, Protocol: obj.protocol, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'DbRoleToExecute' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_DbRoleToExecute(obj) { if (obj === undefined) { return undefined; } const result = { Role: obj.role, Type: obj.type, }; // 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 */ /** * Type of the DB role. Can be either BuiltIn or Custom. * * @schema DbRoleToExecuteType */ var DbRoleToExecuteType; (function (DbRoleToExecuteType) { /** BUILT_IN */ DbRoleToExecuteType["BUILT_IN"] = "BUILT_IN"; /** CUSTOM */ DbRoleToExecuteType["CUSTOM"] = "CUSTOM"; })(DbRoleToExecuteType || (exports.DbRoleToExecuteType = DbRoleToExecuteType = {})); /** * A CloudFormation `MongoDB::Atlas::StreamInstance` * * @cloudformationResource MongoDB::Atlas::StreamInstance * @stability external */ class CfnStreamInstance extends cdk.CfnResource { /** * Create a new `MongoDB::Atlas::StreamInstance`. * * @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: CfnStreamInstance.CFN_RESOURCE_TYPE_NAME, properties: toJson_CfnStreamInstanceProps(props), }); this.props = props; this.attrId = cdk.Token.asString(this.getAtt("Id")); this.attrHostnames = cdk.Token.asList(this.getAtt("Hostnames")); } } exports.CfnStreamInstance = CfnStreamInstance; _a = JSII_RTTI_SYMBOL_1; CfnStreamInstance[_a] = { fqn: "awscdk-resources-mongodbatlas.CfnStreamInstance", version: "3.13.0" }; /** * The CloudFormation resource type name for this resource class. */ CfnStreamInstance.CFN_RESOURCE_TYPE_NAME = "MongoDB::Atlas::StreamInstance"; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbDEtcmVzb3VyY2VzL3N0cmVhbS1pbnN0YW5jZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBbURBLHNFQW1CQztBQTBCRCwwRUFlQztBQXFCRCxrREFjQztBQXlERCw0REFvQkM7QUE0REQsOEVBZUM7QUE0QkQsa0VBZUM7QUE0QkQsd0RBZUM7O0FBaFlELDBCQUEwQjtBQUMxQixtQ0FBbUM7QUE4Q25DOztHQUVHO0FBQ0gseUNBQXlDO0FBQ3pDLFNBQWdCLDZCQUE2QixDQUMzQyxHQUF1QztJQUV2QyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN0QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUc7UUFDYixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87UUFDcEIsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZO1FBQzlCLGlCQUFpQixFQUFFLCtCQUErQixDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztRQUN6RSxZQUFZLEVBQUUsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztRQUNuRCxXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztLQUN6QixDQUFDO0lBQ0YsMEJBQTBCO0lBQzFCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQ2xDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFD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QUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUMzRCxFQUFFLENBQ0gsQ0FBQztBQUNKLENBQUM7QUFDRCx3Q0FBd0M7QUFFeEM7Ozs7R0FJRztBQUNILElBQVksbUJBS1g7QUFMRCxXQUFZLG1CQUFtQjtJQUM3QixlQUFlO0lBQ2YsNENBQXFCLENBQUE7SUFDckIsYUFBYTtJQUNiLHdDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFMVyxtQkFBbUIsbUNBQW5CLG1CQUFtQixRQUs5QjtBQUVEOzs7OztHQUtHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSxHQUFHLENBQUMsV0FBVztJQXFCcEQ7Ozs7OztPQU1HO0lBQ0gsWUFDRSxLQUEyQixFQUMzQixFQUFVLEVBQ1YsS0FBNkI7UUFFN0IsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixJQUFJLEVBQUUsaUJBQWlCLENBQUMsc0JBQXNCO1lBQzlDLFVBQVUsRUFBRSw2QkFBNkIsQ0FBQyxLQUFLLENBQUU7U0FDbEQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQzs7QUExQ0gsOENBMkNDOzs7QUExQ0M7O0dBRUc7QUFDb0Isd0NBQXNCLEdBQzNDLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR2VuZXJhdGVkIGJ5IGNkay1pbXBvcnRcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuLyoqXG4gKiBSZXR1cm5zLCBhZGRzLCBlZGl0cywgYW5kIHJlbW92ZXMgQXRsYXMgU3RyZWFtIFByb2Nlc3NpbmcgSW5zdGFuY2VzLlxuICpcbiAqIEBzY2hlbWEgQ2ZuU3RyZWFtSW5zdGFuY2VQcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENmblN0cmVhbUluc3RhbmNlUHJvcHMge1xuICAvKipcbiAgICogVGhlIHByb2ZpbGUgaXMgZGVmaW5lZCBpbiBBV1MgU2VjcmV0IG1hbmFnZXIuIFNlZSBbU2VjcmV0IE1hbmFnZXIgUHJvZmlsZSBzZXR1cF0oLi4vLi4vLi4vZXhhbXBsZXMvcHJvZmlsZS1zZWNyZXQueWFtbCkuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuU3RyZWFtSW5zdGFuY2VQcm9wcyNQcm9maWxlXG4gICAqL1xuICByZWFkb25seSBwcm9maWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIHN0cmVhbSBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIENmblN0cmVhbUluc3RhbmNlUHJvcHMjSW5zdGFuY2VOYW1lXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBDZm5TdHJlYW1JbnN0YW5jZVByb3BzI0RhdGFQcm9jZXNzUmVnaW9uXG4gICAqL1xuICByZWFkb25seSBkYXRhUHJvY2Vzc1JlZ2lvbjogU3RyZWFtc0RhdGFQcm9jZXNzUmVnaW9uO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIENmblN0cmVhbUluc3RhbmNlUHJvcHMjU3RyZWFtQ29uZmlnXG4gICAqL1xuICByZWFkb25seSBzdHJlYW1Db25maWc6IFN0cmVhbUNvbmZpZztcblxuICAvKipcbiAgICogQHNjaGVtYSBDZm5TdHJlYW1JbnN0YW5jZVByb3BzI0Nvbm5lY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0aW9ucz86IFN0cmVhbXNDb25uZWN0aW9uW107XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSAyNC1oZXhhZGVjaW1hbCBjaGFyYWN0ZXIgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyB0aGUgcHJvamVjdC5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5TdHJlYW1JbnN0YW5jZVByb3BzI1Byb2plY3RJZFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdElkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0NmblN0cmVhbUluc3RhbmNlUHJvcHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0NmblN0cmVhbUluc3RhbmNlUHJvcHMoXG4gIG9iajogQ2ZuU3RyZWFtSW5zdGFuY2VQcm9wcyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIFByb2ZpbGU6IG9iai5wcm9maWxlLFxuICAgIEluc3RhbmNlTmFtZTogb2JqLmluc3RhbmNlTmFtZSxcbiAgICBEYXRhUHJvY2Vzc1JlZ2lvbjogdG9Kc29uX1N0cmVhbXNEYXRhUHJvY2Vzc1JlZ2lvbihvYmouZGF0YVByb2Nlc3NSZWdpb24pLFxuICAgIFN0cmVhbUNvbmZpZzogdG9Kc29uX1N0cmVhbUNvbmZpZyhvYmouc3RyZWFtQ29uZmlnKSxcbiAgICBDb25uZWN0aW9uczogb2JqLmNvbm5lY3Rpb25zPy5tYXAoKHkpID0+IHRvSnNvbl9TdHJlYW1zQ29ubmVjdGlvbih5KSksXG4gICAgUHJvamVjdElkOiBvYmoucHJvamVjdElkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xvdWQgcHJvdmlkZXIgcmVnaW9uIGluIHdoaWNoIE1vbmdvREIgQ2xvdWQgcHJvY2Vzc2VzIHRoZSBzdHJlYW0uXG4gKlxuICogQHNjaGVtYSBTdHJlYW1zRGF0YVByb2Nlc3NSZWdpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1zRGF0YVByb2Nlc3NSZWdpb24ge1xuICAvKipcbiAgICogTGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBjbG91ZCBzZXJ2aWNlIHByb3ZpZGVyIHdoZXJlIE1vbmdvREIgQ2xvdWQgcGVyZm9ybXMgc3RyZWFtIHByb2Nlc3NpbmcuIEN1cnJlbnRseSwgdGhpcyBwYXJhbWV0ZXIgc3VwcG9ydHMgQVdTIG9ubHkuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RyZWFtc0RhdGFQcm9jZXNzUmVnaW9uI0Nsb3VkUHJvdmlkZXJcbiAgICovXG4gIHJlYWRvbmx5IGNsb3VkUHJvdmlkZXI6IFN0cmVhbXNEYXRhUHJvY2Vzc1JlZ2lvbkNsb3VkUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgU3RyZWFtc0RhdGFQcm9jZXNzUmVnaW9uI1JlZ2lvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1N0cmVhbXNEYXRhUHJvY2Vzc1JlZ2lvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fU3RyZWFtc0RhdGFQcm9jZXNzUmVnaW9uKFxuICBvYmo6IFN0cmVhbXNEYXRhUHJvY2Vzc1JlZ2lvbiB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIENsb3VkUHJvdmlkZXI6IG9iai5jbG91ZFByb3ZpZGVyLFxuICAgIFJlZ2lvbjogb2JqLnJlZ2lvbixcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhbiBBdGxhcyBTdHJlYW0gUHJvY2Vzc2luZyBJbnN0YW5jZS5cbiAqXG4gKiBAc2NoZW1hIFN0cmVhbUNvbmZpZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbUNvbmZpZyB7XG4gIC8qKlxuICAgKiBTZWxlY3RlZCB0aWVyIGZvciB0aGUgU3RyZWFtIEluc3RhbmNlLiBDb25maWd1cmVzIE1lbW9yeSAvIFZDUFUgYWxsb3dhbmNlcy5cbiAgICpcbiAgICogQHNjaGVtYSBTdHJlYW1Db25maWcjVGllclxuICAgKi9cbiAgcmVhZG9ubHkgdGllcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnU3RyZWFtQ29uZmlnJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9TdHJlYW1Db25maWcoXG4gIG9iajogU3RyZWFtQ29uZmlnIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgVGllcjogb2JqLnRpZXIsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNldHRpbmdzIHRoYXQgZGVmaW5lIGEgY29ubmVjdGlvbiB0byBhbiBleHRlcm5hbCBkYXRhIHN0b3JlLlxuICpcbiAqIEBzY2hlbWEgU3RyZWFtc0Nvbm5lY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1zQ29ubmVjdGlvbiB7XG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIHN0cmVhbSBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIFN0cmVhbXNDb25uZWN0aW9uI05hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGNvbm5lY3Rpb24uIENhbiBiZSBlaXRoZXIgQ2x1c3RlciBvciBLYWZrYS5cbiAgICpcbiAgICogQHNjaGVtYSBTdHJlYW1zQ29ubmVjdGlvbiNUeXBlXG4gICAqL1xuICByZWFkb25seSB0eXBlPzogU3RyZWFtc0Nvbm5lY3Rpb25UeXBlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFN0cmVhbXNDb25uZWN0aW9uI0F1dGhlbnRpY2F0aW9uXG4gICAqL1xuICByZWFkb25seSBhdXRoZW50aWNhdGlvbj86IFN0cmVhbXNLYWZrYUF1dGhlbnRpY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBDb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBzZXJ2ZXIgYWRkcmVzc2VzLlxuICAgKlxuICAgKiBAc2NoZW1hIFN0cmVhbXNDb25uZWN0aW9uI0Jvb3RzdHJhcFNlcnZlcnNcbiAgICovXG4gIHJlYWRvbmx5IGJvb3RzdHJhcFNlcnZlcnM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgU3RyZWFtc0Nvbm5lY3Rpb24jU2VjdXJpdHlcbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5PzogU3RyZWFtc0thZmthU2VjdXJpdHk7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGNsdXN0ZXIgY29uZmlndXJlZCBmb3IgdGhpcyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIFN0cmVhbXNDb25uZWN0aW9uI0NsdXN0ZXJOYW1lXG4gICAqL1xuICByZWFkb25seSBjbHVzdGVyTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBTdHJlYW1zQ29ubmVjdGlvbiNEYlJvbGVUb0V4ZWN1dGVcbiAgICovXG4gIHJlYWRvbmx5IGRiUm9sZVRvRXhlY3V0ZT86IERiUm9sZVRvRXhlY3V0ZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnU3RyZWFtc0Nvbm5lY3Rpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1N0cmVhbXNDb25uZWN0aW9uKFxuICBvYmo6IFN0cmVhbXNDb25uZWN0aW9uIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgTmFtZTogb2JqLm5hbWUsXG4gICAgVHlwZTogb2JqLnR5cGUsXG4gICAgQXV0aGVudGljYXRpb246IHRvSnNvbl9TdHJlYW1zS2Fma2FBdXRoZW50aWNhdGlvbihvYmouYXV0aGVudGljYXRpb24pLFxuICAgIEJvb3RzdHJhcFNlcnZlcnM6IG9iai5ib290c3RyYXBTZXJ2ZXJzLFxuICAgIFNlY3VyaXR5OiB0b0pzb25fU3RyZWFtc0thZmthU2VjdXJpdHkob2JqLnNlY3VyaXR5KSxcbiAgICBDbHVzdGVyTmFtZTogb2JqLmNsdXN0ZXJOYW1lLFxuICAgIERiUm9sZVRvRXhlY3V0ZTogdG9Kc29uX0RiUm9sZVRvRXhlY3V0ZShvYmouZGJSb2xlVG9FeGVjdXRlKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogTGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBjbG91ZCBzZXJ2aWNlIHByb3ZpZGVyIHdoZXJlIE1vbmdvREIgQ2xvdWQgcGVyZm9ybXMgc3RyZWFtIHByb2Nlc3NpbmcuIEN1cnJlbnRseSwgdGhpcyBwYXJhbWV0ZXIgc3VwcG9ydHMgQVdTIG9ubHkuXG4gKlxuICogQHNjaGVtYSBTdHJlYW1zRGF0YVByb2Nlc3NSZWdpb25DbG91ZFByb3ZpZGVyXG4gKi9cbmV4cG9ydCBlbnVtIFN0cmVhbXNEYXRhUHJvY2Vzc1JlZ2lvbkNsb3VkUHJvdmlkZXIge1xuICAvKiogQVdTICovXG4gIEFXUyA9IFwiQVdTXCIsXG4gIC8qKiBHQ1AgKi9cbiAgR0NQID0gXCJHQ1BcIixcbiAgLyoqIEFaVVJFICovXG4gIEFaVVJFID0gXCJBWlVSRVwiLFxuICAvKiogVEVOQU5UICovXG4gIFRFTkFOVCA9IFwiVEVOQU5UXCIsXG4gIC8qKiBTRVJWRVJMRVNTICovXG4gIFNFUlZFUkxFU1MgPSBcIlNFUlZFUkxFU1NcIixcbn1cblxuLyoqXG4gKiBUeXBlIG9mIHRoZSBjb25uZWN0aW9uLiBDYW4gYmUgZWl0aGVyIENsdXN0ZXIgb3IgS2Fma2EuXG4gKlxuICogQHNjaGVtYSBTdHJlYW1zQ29ubmVjdGlvblR5cGVcbiAqL1xuZXhwb3J0IGVudW0gU3RyZWFtc0Nvbm5lY3Rpb25UeXBlIHtcbiAgLyoqIEthZmthICovXG4gIEtBRktBID0gXCJLYWZrYVwiLFxuICAvKiogQ2x1c3RlciAqL1xuICBDTFVTVEVSID0gXCJDbHVzdGVyXCIsXG4gIC8qKiBTYW1wbGUgKi9cbiAgU0FNUExFID0gXCJTYW1wbGVcIixcbn1cblxuLyoqXG4gKiBVc2VyIGNyZWRlbnRpYWxzIHJlcXVpcmVkIHRvIGNvbm5lY3QgdG8gYSBLYWZrYSBDbHVzdGVyLiBJbmNsdWRlcyB0aGUgYXV0aGVudGljYXRpb24gdHlwZSwgYXMgd2VsbCBhcyB0aGUgcGFyYW1ldGVycyBmb3IgdGhhdCBhdXRoZW50aWNhdGlvbiBtb2RlLlxuICpcbiAqIEBzY2hlbWEgU3RyZWFtc0thZmthQXV0aGVudGljYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1zS2Fma2FBdXRoZW50aWNhdGlvbiB7XG4gIC8qKlxuICAgKiBTdHlsZSBvZiBhdXRoZW50aWNhdGlvbi4gQ2FuIGJlIG9uZSBvZiBQTEFJTiwgU0NSQU0tMjU2LCBvciBTQ1JBTS01MTIuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RyZWFtc0thZmthQXV0aGVudGljYXRpb24jTWVjaGFuaXNtXG4gICAqL1xuICByZWFkb25seSBtZWNoYW5pc20/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZXJuYW1lIG9mIHRoZSBhY2NvdW50IHRvIGNvbm5lY3QgdG8gdGhlIEthZmthIGNsdXN0ZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RyZWFtc0thZmthQXV0aGVudGljYXRpb24jVXNlcm5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdTdHJlYW1zS2Fma2FBdXRoZW50aWNhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fU3RyZWFtc0thZmthQXV0aGVudGljYXRpb24oXG4gIG9iajogU3RyZWFtc0thZmthQXV0aGVudGljYXRpb24gfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBNZWNoYW5pc206IG9iai5tZWNoYW5pc20sXG4gICAgVXNlcm5hbWU6IG9iai51c2VybmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgdGhlIHNlY3VyZSB0cmFuc3BvcnQgY29ubmVjdGlvbiB0byBLYWZrYS4gRm9yIFNTTCwgdGhpcyBjYW4gaW5jbHVkZSB0aGUgdHJ1c3RlZCBjZXJ0aWZpY2F0ZSB0byB1c2UuXG4gKlxuICogQHNjaGVtYSBTdHJlYW1zS2Fma2FTZWN1cml0eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbXNLYWZrYVNlY3VyaXR5IHtcbiAgLyoqXG4gICAqIEEgdHJ1c3RlZCwgcHVibGljIHg1MDkgY2VydGlmaWNhdGUgZm9yIGNvbm5lY3RpbmcgdG8gS2Fma2Egb3ZlciBTU0wuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RyZWFtc0thZmthU2VjdXJpdHkjQnJva2VyUHVibGljQ2VydGlmaWNhdGVcbiAgICovXG4gIHJlYWRvbmx5IGJyb2tlclB1YmxpY0NlcnRpZmljYXRlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXNjcmliZXMgdGhlIHRyYW5zcG9ydCB0eXBlLiBDYW4gYmUgZWl0aGVyIFBMQUlOVEVYVCBvciBTU0wuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RyZWFtc0thZmthU2VjdXJpdHkjUHJvdG9jb2xcbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdTdHJlYW1zS2Fma2FTZWN1cml0eScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fU3RyZWFtc0thZmthU2VjdXJpdHkoXG4gIG9iajogU3RyZWFtc0thZmthU2VjdXJpdHkgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBCcm9rZXJQdWJsaWNDZXJ0aWZpY2F0ZTogb2JqLmJyb2tlclB1YmxpY0NlcnRpZmljYXRlLFxuICAgIFByb3RvY29sOiBvYmoucHJvdG9jb2wsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIGEgQnVpbHQgaW4gb3IgQ3VzdG9tIERCIFJvbGUgdG8gY29ubmVjdCB0byBhbiBBdGxhcyBDbHVzdGVyLlxuICpcbiAqIEBzY2hlbWEgREJSb2xlVG9FeGVjdXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGJSb2xlVG9FeGVjdXRlIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSByb2xlIHRvIHVzZS4gQ2FuIGJlIGEgYnVpbHQgaW4gcm9sZSBvciBhIGN1c3RvbSByb2xlLlxuICAgKlxuICAgKiBAc2NoZW1hIERCUm9sZVRvRXhlY3V0ZSNSb2xlXG4gICAqL1xuICByZWFkb25seSByb2xlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBEQiByb2xlLiBDYW4gYmUgZWl0aGVyIEJ1aWx0SW4gb3IgQ3VzdG9tLlxuICAgKlxuICAgKiBAc2NoZW1hIERCUm9sZVRvRXhlY3V0ZSNUeXBlXG4gICAqL1xuICByZWFkb25seSB0eXBlPzogRGJSb2xlVG9FeGVjdXRlVHlwZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRGJSb2xlVG9FeGVjdXRlJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9EYlJvbGVUb0V4ZWN1dGUoXG4gIG9iajogRGJSb2xlVG9FeGVjdXRlIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgUm9sZTogb2JqLnJvbGUsXG4gICAgVHlwZTogb2JqLnR5cGUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFR5cGUgb2YgdGhlIERCIHJvbGUuIENhbiBiZSBlaXRoZXIgQnVpbHRJbiBvciBDdXN0b20uXG4gKlxuICogQHNjaGVtYSBEYlJvbGVUb0V4ZWN1dGVUeXBlXG4gKi9cbmV4cG9ydCBlbnVtIERiUm9sZVRvRXhlY3V0ZVR5cGUge1xuICAvKiogQlVJTFRfSU4gKi9cbiAgQlVJTFRfSU4gPSBcIkJVSUxUX0lOXCIsXG4gIC8qKiBDVVNUT00gKi9cbiAgQ1VTVE9NID0gXCJDVVNUT01cIixcbn1cblxuLyoqXG4gKiBBIENsb3VkRm9ybWF0aW9uIGBNb25nb0RCOjpBdGxhczo6U3RyZWFtSW5zdGFuY2VgXG4gKlxuICogQGNsb3VkZm9ybWF0aW9uUmVzb3VyY2UgTW9uZ29EQjo6QXRsYXM6OlN0cmVhbUluc3RhbmNlXG4gKiBAc3RhYmlsaXR5IGV4dGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBDZm5TdHJlYW1JbnN0YW5jZSBleHRlbmRzIGNkay5DZm5SZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgdHlwZSBuYW1lIGZvciB0aGlzIHJlc291cmNlIGNsYXNzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDRk5fUkVTT1VSQ0VfVFlQRV9OQU1FID1cbiAgICBcIk1vbmdvREI6OkF0bGFzOjpTdHJlYW1JbnN0YW5jZVwiO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSBwcm9wcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogQ2ZuU3RyZWFtSW5zdGFuY2VQcm9wcztcblxuICAvKipcbiAgICogQXR0cmlidXRlIGBNb25nb0RCOjpBdGxhczo6U3RyZWFtSW5zdGFuY2UuSWRgXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXR0cklkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBdHRyaWJ1dGUgYE1vbmdvREI6OkF0bGFzOjpTdHJlYW1JbnN0YW5jZS5Ib3N0bmFtZXNgXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXR0ckhvc3RuYW1lczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBgTW9uZ29EQjo6QXRsYXM6OlN0cmVhbUluc3RhbmNlYC5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gc2NvcGUgaW4gd2hpY2ggdGhpcyByZXNvdXJjZSBpcyBkZWZpbmVkXG4gICAqIEBwYXJhbSBpZCAgICAtIHNjb3BlZCBpZCBvZiB0aGUgcmVzb3VyY2VcbiAgICogQHBhcmFtIHByb3BzIC0gcmVzb3VyY2UgcHJvcGVydGllc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IENmblN0cmVhbUluc3RhbmNlUHJvcHNcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICB0eXBlOiBDZm5TdHJlYW1JbnN0YW5jZS5DRk5fUkVTT1VSQ0VfVFlQRV9OQU1FLFxuICAgICAgcHJvcGVydGllczogdG9Kc29uX0NmblN0cmVhbUluc3RhbmNlUHJvcHMocHJvcHMpISxcbiAgICB9KTtcblxuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMuYXR0cklkID0gY2RrLlRva2VuLmFzU3RyaW5nKHRoaXMuZ2V0QXR0KFwiSWRcIikpO1xuICAgIHRoaXMuYXR0ckhvc3RuYW1lcyA9IGNkay5Ub2tlbi5hc0xpc3QodGhpcy5nZXRBdHQoXCJIb3N0bmFtZXNcIikpO1xuICB9XG59XG4iXX0=