UNPKG

awscdk-resources-mongodbatlas

Version:

MongoDB Atlas CDK Construct Library for AWS CloudFormation Resources

293 lines 50.8 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.CfnDataLakes = exports.DataLakeDatabaseDataSourceViewDefaultFormat = exports.DataLakeDataProcessRegionViewRegion = exports.DataLakeDataProcessRegionViewCloudProvider = void 0; exports.toJson_CfnDataLakesProps = toJson_CfnDataLakesProps; exports.toJson_DataLakeCloudProviderConfigView = toJson_DataLakeCloudProviderConfigView; exports.toJson_DataLakeDataProcessRegionView = toJson_DataLakeDataProcessRegionView; exports.toJson_DataLakeStorageView = toJson_DataLakeStorageView; exports.toJson_DataLakeAwsCloudProviderConfigView = toJson_DataLakeAwsCloudProviderConfigView; exports.toJson_DataLakeDatabaseView = toJson_DataLakeDatabaseView; exports.toJson_StoreDetail = toJson_StoreDetail; exports.toJson_DataLakeDatabaseCollectionView = toJson_DataLakeDatabaseCollectionView; exports.toJson_DataLakeViewView = toJson_DataLakeViewView; exports.toJson_DataLakeDatabaseDataSourceView = toJson_DataLakeDatabaseDataSourceView; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); // Generated by cdk-import const cdk = require("aws-cdk-lib"); /** * Converts an object of type 'CfnDataLakesProps' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnDataLakesProps(obj) { if (obj === undefined) { return undefined; } const result = { CloudProviderConfig: toJson_DataLakeCloudProviderConfigView(obj.cloudProviderConfig), DataProcessRegion: toJson_DataLakeDataProcessRegionView(obj.dataProcessRegion), EndDate: obj.endDate, ProjectId: obj.projectId, Profile: obj.profile, SkipRoleValidation: obj.skipRoleValidation, Storage: toJson_DataLakeStorageView(obj.storage), TenantName: obj.tenantName, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'DataLakeCloudProviderConfigView' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_DataLakeCloudProviderConfigView(obj) { if (obj === undefined) { return undefined; } const result = { Aws: toJson_DataLakeAwsCloudProviderConfigView(obj.aws), }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'DataLakeDataProcessRegionView' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_DataLakeDataProcessRegionView(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 'DataLakeStorageView' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_DataLakeStorageView(obj) { if (obj === undefined) { return undefined; } const result = { Databases: obj.databases?.map((y) => toJson_DataLakeDatabaseView(y)), Stores: obj.stores?.map((y) => toJson_StoreDetail(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 'DataLakeAwsCloudProviderConfigView' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_DataLakeAwsCloudProviderConfigView(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] }), {}); } /* eslint-enable max-len, quote-props */ /** * Name of the cloud service that hosts the data lake's data stores. * * @schema DataLakeDataProcessRegionViewCloudProvider */ var DataLakeDataProcessRegionViewCloudProvider; (function (DataLakeDataProcessRegionViewCloudProvider) { /** AWS */ DataLakeDataProcessRegionViewCloudProvider["AWS"] = "AWS"; /** GCP */ DataLakeDataProcessRegionViewCloudProvider["GCP"] = "GCP"; /** AZURE */ DataLakeDataProcessRegionViewCloudProvider["AZURE"] = "AZURE"; /** TENANT */ DataLakeDataProcessRegionViewCloudProvider["TENANT"] = "TENANT"; /** SERVERLESS */ DataLakeDataProcessRegionViewCloudProvider["SERVERLESS"] = "SERVERLESS"; })(DataLakeDataProcessRegionViewCloudProvider || (exports.DataLakeDataProcessRegionViewCloudProvider = DataLakeDataProcessRegionViewCloudProvider = {})); /** * Name of the region to which the data lake routes client connections. * * @schema DataLakeDataProcessRegionViewRegion */ var DataLakeDataProcessRegionViewRegion; (function (DataLakeDataProcessRegionViewRegion) { /** DUBLIN_IRL */ DataLakeDataProcessRegionViewRegion["DUBLIN_IRL"] = "DUBLIN_IRL"; /** FRANKFURT_DEU */ DataLakeDataProcessRegionViewRegion["FRANKFURT_DEU"] = "FRANKFURT_DEU"; /** LONDON_GBR */ DataLakeDataProcessRegionViewRegion["LONDON_GBR"] = "LONDON_GBR"; /** MUMBAI_IND */ DataLakeDataProcessRegionViewRegion["MUMBAI_IND"] = "MUMBAI_IND"; /** OREGON_USA */ DataLakeDataProcessRegionViewRegion["OREGON_USA"] = "OREGON_USA"; /** SYDNEY_AUS */ DataLakeDataProcessRegionViewRegion["SYDNEY_AUS"] = "SYDNEY_AUS"; /** VIRGINIA_USA */ DataLakeDataProcessRegionViewRegion["VIRGINIA_USA"] = "VIRGINIA_USA"; })(DataLakeDataProcessRegionViewRegion || (exports.DataLakeDataProcessRegionViewRegion = DataLakeDataProcessRegionViewRegion = {})); /** * Converts an object of type 'DataLakeDatabaseView' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_DataLakeDatabaseView(obj) { if (obj === undefined) { return undefined; } const result = { Collections: obj.collections?.map((y) => toJson_DataLakeDatabaseCollectionView(y)), MaxWildcardCollections: obj.maxWildcardCollections, Name: obj.name, Views: obj.views?.map((y) => toJson_DataLakeViewView(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 'StoreDetail' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_StoreDetail(obj) { if (obj === undefined) { return undefined; } const result = { Name: obj.name, Provider: obj.provider, Region: obj.region, Bucket: obj.bucket, Prefix: obj.prefix, Delimiter: obj.delimiter, IncludeTags: obj.includeTags, AdditionalStorageClasses: obj.additionalStorageClasses?.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 'DataLakeDatabaseCollectionView' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_DataLakeDatabaseCollectionView(obj) { if (obj === undefined) { return undefined; } const result = { DataSources: obj.dataSources?.map((y) => toJson_DataLakeDatabaseDataSourceView(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 'DataLakeViewView' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_DataLakeViewView(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 'DataLakeDatabaseDataSourceView' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_DataLakeDatabaseDataSourceView(obj) { if (obj === undefined) { return undefined; } const result = { AllowInsecure: obj.allowInsecure, Collection: obj.collection, CollectionRegex: obj.collectionRegex, Database: obj.database, DefaultFormat: obj.defaultFormat, Path: obj.path, 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] }), {}); } /* eslint-enable max-len, quote-props */ /** * File format that MongoDB Cloud uses if it encounters a file without a file extension while searching **storeName**. * * @schema DataLakeDatabaseDataSourceViewDefaultFormat */ var DataLakeDatabaseDataSourceViewDefaultFormat; (function (DataLakeDatabaseDataSourceViewDefaultFormat) { /** .avro */ DataLakeDatabaseDataSourceViewDefaultFormat["AVRO"] = ".avro"; /** .avro.gz */ DataLakeDatabaseDataSourceViewDefaultFormat["AVRO_GZ"] = ".avro.gz"; /** .bson */ DataLakeDatabaseDataSourceViewDefaultFormat["BSON"] = ".bson"; /** .bson.gz */ DataLakeDatabaseDataSourceViewDefaultFormat["BSON_GZ"] = ".bson.gz"; /** .csv */ DataLakeDatabaseDataSourceViewDefaultFormat["CSV"] = ".csv"; /** .json */ DataLakeDatabaseDataSourceViewDefaultFormat["JSON"] = ".json"; /** .json.gz */ DataLakeDatabaseDataSourceViewDefaultFormat["JSON_GZ"] = ".json.gz"; /** .orc */ DataLakeDatabaseDataSourceViewDefaultFormat["ORC"] = ".orc"; /** .tsv */ DataLakeDatabaseDataSourceViewDefaultFormat["TSV"] = ".tsv"; /** .tsv.gz */ DataLakeDatabaseDataSourceViewDefaultFormat["TSV_GZ"] = ".tsv.gz"; })(DataLakeDatabaseDataSourceViewDefaultFormat || (exports.DataLakeDatabaseDataSourceViewDefaultFormat = DataLakeDatabaseDataSourceViewDefaultFormat = {})); /** * A CloudFormation `MongoDB::Atlas::DataLakes` * * @cloudformationResource MongoDB::Atlas::DataLakes * @stability external */ class CfnDataLakes extends cdk.CfnResource { /** * Create a new `MongoDB::Atlas::DataLakes`. * * @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: CfnDataLakes.CFN_RESOURCE_TYPE_NAME, properties: toJson_CfnDataLakesProps(props), }); this.props = props; this.attrStartDate = cdk.Token.asNumber(this.getAtt("StartDate")); this.attrHostnames = cdk.Token.asList(this.getAtt("Hostnames")); this.attrState = cdk.Token.asString(this.getAtt("State")); } } exports.CfnDataLakes = CfnDataLakes; _a = JSII_RTTI_SYMBOL_1; CfnDataLakes[_a] = { fqn: "awscdk-resources-mongodbatlas.CfnDataLakes", version: "3.13.0" }; /** * The CloudFormation resource type name for this resource class. */ CfnDataLakes.CFN_RESOURCE_TYPE_NAME = "MongoDB::Atlas::DataLakes"; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbDEtcmVzb3VyY2VzL2RhdGFsYWtlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBdUVBLDREQXlCQztBQW1CRCx3RkFjQztBQTBCRCxvRkFlQztBQTBCRCxnRUFlQztBQStDRCw4RkFrQkM7QUFnRkQsa0VBbUJDO0FBc0VELGdEQXFCQztBQTBCRCxzRkFpQkM7QUFpQ0QsMERBZ0JDO0FBb0VELHNGQXFCQzs7QUF2b0JELDBCQUEwQjtBQUMxQixtQ0FBbUM7QUFrRW5DOztHQUVHO0FBQ0gseUNBQXlDO0FBQ3pDLFNBQWdCLHdCQUF3QixDQUN0QyxHQUFrQztJQUVsQyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN0QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUc7UUFDYixtQkFBbUIsRUFBRSxzQ0FBc0MsQ0FDekQsR0FBRyxDQUFDLG1CQUFtQixDQUN4QjtRQUNELGlCQUFpQixFQUFFLG9DQUFvQyxDQUNyRCxHQUFHLENBQUMsaUJBQWlCLENBQ3RCO1FBQ0QsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO1FBQ3BCLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztRQUN4QixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87UUFDcEIsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLGtCQUFrQjtRQUMxQyxPQUFPLEVBQUUsMEJBQTBCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUNoRCxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVU7S0FDM0IsQ0FBQztJQUNGLDBCQUEwQjtJQUMxQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUNsQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxD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RywyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdlbmVyYXRlZCBieSBjZGstaW1wb3J0XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbi8qKlxuICogUmV0dXJucywgYWRkcywgZWRpdHMsIGFuZCByZW1vdmVzIEZlZGVyYXRlZCBEYXRhYmFzZSBJbnN0YW5jZXMuXG4gKlxuICogQHNjaGVtYSBDZm5EYXRhTGFrZXNQcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENmbkRhdGFMYWtlc1Byb3BzIHtcbiAgLyoqXG4gICAqIENsb3VkIHByb3ZpZGVyIGxpbmtlZCB0byB0aGlzIGRhdGEgbGFrZS5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5EYXRhTGFrZXNQcm9wcyNDbG91ZFByb3ZpZGVyQ29uZmlnXG4gICAqL1xuICByZWFkb25seSBjbG91ZFByb3ZpZGVyQ29uZmlnPzogRGF0YUxha2VDbG91ZFByb3ZpZGVyQ29uZmlnVmlldztcblxuICAvKipcbiAgICogSW5mb3JtYXRpb24gYWJvdXQgdGhlIGNsb3VkIHByb3ZpZGVyIHJlZ2lvbiB0byB3aGljaCB0aGUgZGF0YSBsYWtlIHJvdXRlcyBjbGllbnQgY29ubmVjdGlvbnMuIE1vbmdvREIgQ2xvdWQgc3VwcG9ydHMgQVdTIG9ubHkuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuRGF0YUxha2VzUHJvcHMjRGF0YVByb2Nlc3NSZWdpb25cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFQcm9jZXNzUmVnaW9uPzogRGF0YUxha2VEYXRhUHJvY2Vzc1JlZ2lvblZpZXc7XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcCB0aGF0IHNwZWNpZmllcyB0aGUgZW5kIHBvaW50IGZvciB0aGUgcmFuZ2Ugb2YgbG9nIG1lc3NhZ2VzIHRvIGRvd25sb2FkLiAgTW9uZ29EQiBDbG91ZCBleHByZXNzZXMgdGhpcyB0aW1lc3RhbXAgaW4gdGhlIG51bWJlciBvZiBzZWNvbmRzIHRoYXQgaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBVTklYIGVwb2NoLlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkRhdGFMYWtlc1Byb3BzI0VuZERhdGVcbiAgICovXG4gIHJlYWRvbmx5IGVuZERhdGU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSAyNC1oZXhhZGVjaW1hbCBkaWdpdCBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIHlvdXIgcHJvamVjdC5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5EYXRhTGFrZXNQcm9wcyNQcm9qZWN0SWRcbiAgICovXG4gIHJlYWRvbmx5IHByb2plY3RJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByb2ZpbGUgaXMgZGVmaW5lZCBpbiBBV1MgU2VjcmV0IG1hbmFnZXIuIFNlZSBbU2VjcmV0IE1hbmFnZXIgUHJvZmlsZSBzZXR1cF0oLi4vLi4vLi4vZXhhbXBsZXMvcHJvZmlsZS1zZWNyZXQueWFtbCkuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuRGF0YUxha2VzUHJvcHMjUHJvZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogRmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoaXMgcmVxdWVzdCBzaG91bGQgY2hlY2sgaWYgdGhlIHJlcXVlc3RpbmcgSUFNIHJvbGUgY2FuIHJlYWQgZnJvbSB0aGUgUzMgYnVja2V0LiBBV1MgY2hlY2tzIGlmIHRoZSByb2xlIGNhbiBsaXN0IHRoZSBvYmplY3RzIGluIHRoZSBidWNrZXQgYmVmb3JlIHdyaXRpbmcgdG8gaXQuIFNvbWUgSUFNIHJvbGVzIG9ubHkgbmVlZCB3cml0ZSBwZXJtaXNzaW9ucy4gVGhpcyBmbGFnIGFsbG93cyB5b3UgdG8gc2tpcCB0aGF0IGNoZWNrLlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkRhdGFMYWtlc1Byb3BzI1NraXBSb2xlVmFsaWRhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcFJvbGVWYWxpZGF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCBkYXRhIHN0b3JlIGFuZCBpdHMgbWFwcGluZyB0byBNb25nb0RCIENsb3VkIGRhdGFiYXNlcy5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5EYXRhTGFrZXNQcm9wcyNTdG9yYWdlXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlPzogRGF0YUxha2VTdG9yYWdlVmlldztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBGZWRlcmF0ZWQgRGF0YWJhc2UgdG8gcmVtb3ZlLlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkRhdGFMYWtlc1Byb3BzI1RlbmFudE5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHRlbmFudE5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0NmbkRhdGFMYWtlc1Byb3BzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9DZm5EYXRhTGFrZXNQcm9wcyhcbiAgb2JqOiBDZm5EYXRhTGFrZXNQcm9wcyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIENsb3VkUHJvdmlkZXJDb25maWc6IHRvSnNvbl9EYXRhTGFrZUNsb3VkUHJvdmlkZXJDb25maWdWaWV3KFxuICAgICAgb2JqLmNsb3VkUHJvdmlkZXJDb25maWdcbiAgICApLFxuICAgIERhdGFQcm9jZXNzUmVnaW9uOiB0b0pzb25fRGF0YUxha2VEYXRhUHJvY2Vzc1JlZ2lvblZpZXcoXG4gICAgICBvYmouZGF0YVByb2Nlc3NSZWdpb25cbiAgICApLFxuICAgIEVuZERhdGU6IG9iai5lbmREYXRlLFxuICAgIFByb2plY3RJZDogb2JqLnByb2plY3RJZCxcbiAgICBQcm9maWxlOiBvYmoucHJvZmlsZSxcbiAgICBTa2lwUm9sZVZhbGlkYXRpb246IG9iai5za2lwUm9sZVZhbGlkYXRpb24sXG4gICAgU3RvcmFnZTogdG9Kc29uX0RhdGFMYWtlU3RvcmFnZVZpZXcob2JqLnN0b3JhZ2UpLFxuICAgIFRlbmFudE5hbWU6IG9iai50ZW5hbnROYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIERhdGFMYWtlQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhTGFrZUNsb3VkUHJvdmlkZXJDb25maWdWaWV3IHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGNsb3VkIHNlcnZpY2UgdGhhdCBob3N0cyB0aGUgZGF0YSBsYWtlJ3MgZGF0YSBzdG9yZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YUxha2VDbG91ZFByb3ZpZGVyQ29uZmlnVmlldyNBd3NcbiAgICovXG4gIHJlYWRvbmx5IGF3cz86IERhdGFMYWtlQXdzQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0RhdGFMYWtlQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0RhdGFMYWtlQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXcoXG4gIG9iajogRGF0YUxha2VDbG91ZFByb3ZpZGVyQ29uZmlnVmlldyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIEF3czogdG9Kc29uX0RhdGFMYWtlQXdzQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXcob2JqLmF3cyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRGF0YUxha2VEYXRhUHJvY2Vzc1JlZ2lvblZpZXdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhTGFrZURhdGFQcm9jZXNzUmVnaW9uVmlldyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBjbG91ZCBzZXJ2aWNlIHRoYXQgaG9zdHMgdGhlIGRhdGEgbGFrZSdzIGRhdGEgc3RvcmVzLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlRGF0YVByb2Nlc3NSZWdpb25WaWV3I0Nsb3VkUHJvdmlkZXJcbiAgICovXG4gIHJlYWRvbmx5IGNsb3VkUHJvdmlkZXI/OiBEYXRhTGFrZURhdGFQcm9jZXNzUmVnaW9uVmlld0Nsb3VkUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHJlZ2lvbiB0byB3aGljaCB0aGUgZGF0YSBsYWtlIHJvdXRlcyBjbGllbnQgY29ubmVjdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YUxha2VEYXRhUHJvY2Vzc1JlZ2lvblZpZXcjUmVnaW9uXG4gICAqL1xuICByZWFkb25seSByZWdpb24/OiBEYXRhTGFrZURhdGFQcm9jZXNzUmVnaW9uVmlld1JlZ2lvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRGF0YUxha2VEYXRhUHJvY2Vzc1JlZ2lvblZpZXcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0RhdGFMYWtlRGF0YVByb2Nlc3NSZWdpb25WaWV3KFxuICBvYmo6IERhdGFMYWtlRGF0YVByb2Nlc3NSZWdpb25WaWV3IHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgQ2xvdWRQcm92aWRlcjogb2JqLmNsb3VkUHJvdmlkZXIsXG4gICAgUmVnaW9uOiBvYmoucmVnaW9uLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIERhdGFMYWtlU3RvcmFnZVZpZXdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhTGFrZVN0b3JhZ2VWaWV3IHtcbiAgLyoqXG4gICAqIEFycmF5IHRoYXQgY29udGFpbnMgdGhlIHF1ZXJ5YWJsZSBkYXRhYmFzZXMgYW5kIGNvbGxlY3Rpb25zIGZvciB0aGlzIGRhdGEgbGFrZS5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhTGFrZVN0b3JhZ2VWaWV3I0RhdGFiYXNlc1xuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2VzPzogRGF0YUxha2VEYXRhYmFzZVZpZXdbXTtcblxuICAvKipcbiAgICogQXJyYXkgdGhhdCBjb250YWlucyB0aGUgZGF0YSBzdG9yZXMgZm9yIHRoZSBkYXRhIGxha2UuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YUxha2VTdG9yYWdlVmlldyNTdG9yZXNcbiAgICovXG4gIHJlYWRvbmx5IHN0b3Jlcz86IFN0b3JlRGV0YWlsW107XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0RhdGFMYWtlU3RvcmFnZVZpZXcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0RhdGFMYWtlU3RvcmFnZVZpZXcoXG4gIG9iajogRGF0YUxha2VTdG9yYWdlVmlldyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIERhdGFiYXNlczogb2JqLmRhdGFiYXNlcz8ubWFwKCh5KSA9PiB0b0pzb25fRGF0YUxha2VEYXRhYmFzZVZpZXcoeSkpLFxuICAgIFN0b3Jlczogb2JqLnN0b3Jlcz8ubWFwKCh5KSA9PiB0b0pzb25fU3RvcmVEZXRhaWwoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIERhdGFMYWtlQVdTQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhTGFrZUF3c0Nsb3VkUHJvdmlkZXJDb25maWdWaWV3IHtcbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgSWRlbnRpdHkgYW5kIEFjY2VzcyBNYW5hZ2VtZW50IChJQU0pIHJvbGUgdGhhdCB0aGUgZGF0YSBsYWtlIGFzc3VtZXMgd2hlbiBhY2Nlc3NpbmcgdGhlIGRhdGEgc3RvcmVzLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlQVdTQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXcjRXh0ZXJuYWxJZFxuICAgKi9cbiAgcmVhZG9ubHkgZXh0ZXJuYWxJZD86IHN0cmluZztcblxuICAvKipcbiAgICogQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIElkZW50aXR5IGFuZCBBY2Nlc3MgTWFuYWdlbWVudCAoSUFNKSByb2xlIHRoYXQgdGhlIGRhdGEgbGFrZSBhc3N1bWVzIHdoZW4gYWNjZXNzaW5nIGRhdGEgc3RvcmVzLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlQVdTQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXcjSWFtQXNzdW1lZFJvbGVBUk5cbiAgICovXG4gIHJlYWRvbmx5IGlhbUFzc3VtZWRSb2xlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgdXNlciB0aGF0IHRoZSBkYXRhIGxha2UgYXNzdW1lcyB3aGVuIGFjY2Vzc2luZyBkYXRhIHN0b3Jlcy5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhTGFrZUFXU0Nsb3VkUHJvdmlkZXJDb25maWdWaWV3I0lhbVVzZXJBUk5cbiAgICovXG4gIHJlYWRvbmx5IGlhbVVzZXJBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSByb2xlIHRoYXQgdGhlIGRhdGEgbGFrZSBjYW4gdXNlIHRvIGFjY2VzcyB0aGUgZGF0YSBzdG9yZXMuUmVxdWlyZWQgaWYgc3BlY2lmeWluZyBjbG91ZFByb3ZpZGVyQ29uZmlnLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlQVdTQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXcjUm9sZUlkXG4gICAqL1xuICByZWFkb25seSByb2xlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIFMzIGRhdGEgYnVja2V0IHRoYXQgdGhlIHByb3ZpZGVkIHJvbGUgSUQgaXMgYXV0aG9yaXplZCB0byBhY2Nlc3MuUmVxdWlyZWQgaWYgc3BlY2lmeWluZyBjbG91ZFByb3ZpZGVyQ29uZmlnLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlQVdTQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXcjVGVzdFMzQnVja2V0XG4gICAqL1xuICByZWFkb25seSB0ZXN0UzNCdWNrZXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0RhdGFMYWtlQXdzQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0RhdGFMYWtlQXdzQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXcoXG4gIG9iajogRGF0YUxha2VBd3NDbG91ZFByb3ZpZGVyQ29uZmlnVmlldyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIEV4dGVybmFsSWQ6IG9iai5leHRlcm5hbElkLFxuICAgIElhbUFzc3VtZWRSb2xlQVJOOiBvYmouaWFtQXNzdW1lZFJvbGVBcm4sXG4gICAgSWFtVXNlckFSTjogb2JqLmlhbVVzZXJBcm4sXG4gICAgUm9sZUlkOiBvYmoucm9sZUlkLFxuICAgIFRlc3RTM0J1Y2tldDogb2JqLnRlc3RTM0J1Y2tldCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogTmFtZSBvZiB0aGUgY2xvdWQgc2VydmljZSB0aGF0IGhvc3RzIHRoZSBkYXRhIGxha2UncyBkYXRhIHN0b3Jlcy5cbiAqXG4gKiBAc2NoZW1hIERhdGFMYWtlRGF0YVByb2Nlc3NSZWdpb25WaWV3Q2xvdWRQcm92aWRlclxuICovXG5leHBvcnQgZW51bSBEYXRhTGFrZURhdGFQcm9jZXNzUmVnaW9uVmlld0Nsb3VkUHJvdmlkZXIge1xuICAvKiogQVdTICovXG4gIEFXUyA9IFwiQVdTXCIsXG4gIC8qKiBHQ1AgKi9cbiAgR0NQID0gXCJHQ1BcIixcbiAgLyoqIEFaVVJFICovXG4gIEFaVVJFID0gXCJBWlVSRVwiLFxuICAvKiogVEVOQU5UICovXG4gIFRFTkFOVCA9IFwiVEVOQU5UXCIsXG4gIC8qKiBTRVJWRVJMRVNTICovXG4gIFNFUlZFUkxFU1MgPSBcIlNFUlZFUkxFU1NcIixcbn1cblxuLyoqXG4gKiBOYW1lIG9mIHRoZSByZWdpb24gdG8gd2hpY2ggdGhlIGRhdGEgbGFrZSByb3V0ZXMgY2xpZW50IGNvbm5lY3Rpb25zLlxuICpcbiAqIEBzY2hlbWEgRGF0YUxha2VEYXRhUHJvY2Vzc1JlZ2lvblZpZXdSZWdpb25cbiAqL1xuZXhwb3J0IGVudW0gRGF0YUxha2VEYXRhUHJvY2Vzc1JlZ2lvblZpZXdSZWdpb24ge1xuICAvKiogRFVCTElOX0lSTCAqL1xuICBEVUJMSU5fSVJMID0gXCJEVUJMSU5fSVJMXCIsXG4gIC8qKiBGUkFOS0ZVUlRfREVVICovXG4gIEZSQU5LRlVSVF9ERVUgPSBcIkZSQU5LRlVSVF9ERVVcIixcbiAgLyoqIExPTkRPTl9HQlIgKi9cbiAgTE9ORE9OX0dCUiA9IFwiTE9ORE9OX0dCUlwiLFxuICAvKiogTVVNQkFJX0lORCAqL1xuICBNVU1CQUlfSU5EID0gXCJNVU1CQUlfSU5EXCIsXG4gIC8qKiBPUkVHT05fVVNBICovXG4gIE9SRUdPTl9VU0EgPSBcIk9SRUdPTl9VU0FcIixcbiAgLyoqIFNZRE5FWV9BVVMgKi9cbiAgU1lETkVZX0FVUyA9IFwiU1lETkVZX0FVU1wiLFxuICAvKiogVklSR0lOSUFfVVNBICovXG4gIFZJUkdJTklBX1VTQSA9IFwiVklSR0lOSUFfVVNBXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBEYXRhTGFrZURhdGFiYXNlVmlld1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFMYWtlRGF0YWJhc2VWaWV3IHtcbiAgLyoqXG4gICAqIEFycmF5IG9mIGNvbGxlY3Rpb25zIGFuZCBkYXRhIHNvdXJjZXMgdGhhdCBtYXAgdG8gYSBgYHN0b3Jlc2BgIGRhdGEgc3RvcmUuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YUxha2VEYXRhYmFzZVZpZXcjQ29sbGVjdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGNvbGxlY3Rpb25zPzogRGF0YUxha2VEYXRhYmFzZUNvbGxlY3Rpb25WaWV3W107XG5cbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHdpbGRjYXJkIGNvbGxlY3Rpb25zIGluIHRoZSBkYXRhYmFzZS4gVGhpcyBvbmx5IGFwcGxpZXMgdG8gUzMgZGF0YSBzb3VyY2VzLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlRGF0YWJhc2VWaWV3I01heFdpbGRjYXJkQ29sbGVjdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG1heFdpbGRjYXJkQ29sbGVjdGlvbnM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIHRoYXQgaWRlbnRpZmllcyB0aGUgZGF0YWJhc2UgdG8gd2hpY2ggdGhlIGRhdGEgbGFrZSBtYXBzIGRhdGEuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YUxha2VEYXRhYmFzZVZpZXcjTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQXJyYXkgb2YgYWdncmVnYXRpb24gcGlwZWxpbmVzIHRoYXQgYXBwbHkgdG8gdGhlIGNvbGxlY3Rpb24uIFRoaXMgb25seSBhcHBsaWVzIHRvIFMzIGRhdGEgc291cmNlcy5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhTGFrZURhdGFiYXNlVmlldyNWaWV3c1xuICAgKi9cbiAgcmVhZG9ubHkgdmlld3M/OiBEYXRhTGFrZVZpZXdWaWV3W107XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0RhdGFMYWtlRGF0YWJhc2VWaWV3JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9EYXRhTGFrZURhdGFiYXNlVmlldyhcbiAgb2JqOiBEYXRhTGFrZURhdGFiYXNlVmlldyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIENvbGxlY3Rpb25zOiBvYmouY29sbGVjdGlvbnM/Lm1hcCgoeSkgPT5cbiAgICAgIHRvSnNvbl9EYXRhTGFrZURhdGFiYXNlQ29sbGVjdGlvblZpZXcoeSlcbiAgICApLFxuICAgIE1heFdpbGRjYXJkQ29sbGVjdGlvbnM6IG9iai5tYXhXaWxkY2FyZENvbGxlY3Rpb25zLFxuICAgIE5hbWU6IG9iai5uYW1lLFxuICAgIFZpZXdzOiBvYmoudmlld3M/Lm1hcCgoeSkgPT4gdG9Kc29uX0RhdGFMYWtlVmlld1ZpZXcoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBlYWNoIGRhdGEgc3RvcmUgYW5kIGl0cyBtYXBwaW5nIHRvIE1vbmdvREIgQ2xvdWQgZGF0YWJhc2VzLlxuICpcbiAqIEBzY2hlbWEgU3RvcmVEZXRhaWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yZURldGFpbCB7XG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIGRhdGEgc3RvcmUuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RvcmVEZXRhaWwjTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBGZWRlcmF0ZWQgRGF0YWJhc2UgdG8gdXBkYXRlLlxuICAgKlxuICAgKiBAc2NoZW1hIFN0b3JlRGV0YWlsI1Byb3ZpZGVyXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBGZWRlcmF0ZWQgRGF0YWJhc2UgdG8gdXBkYXRlLlxuICAgKlxuICAgKiBAc2NoZW1hIFN0b3JlRGV0YWlsI1JlZ2lvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIEZlZGVyYXRlZCBEYXRhYmFzZSB0byB1cGRhdGUuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RvcmVEZXRhaWwjQnVja2V0XG4gICAqL1xuICByZWFkb25seSBidWNrZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIHRoYXQgaWRlbnRpZmllcyB0aGUgRmVkZXJhdGVkIERhdGFiYXNlIHRvIHVwZGF0ZS5cbiAgICpcbiAgICogQHNjaGVtYSBTdG9yZURldGFpbCNQcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBGZWRlcmF0ZWQgRGF0YWJhc2UgdG8gdXBkYXRlLlxuICAgKlxuICAgKiBAc2NoZW1hIFN0b3JlRGV0YWlsI0RlbGltaXRlclxuICAgKi9cbiAgcmVhZG9ubHkgZGVsaW1pdGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIEZlZGVyYXRlZCBEYXRhYmFzZSB0byB1cGRhdGUuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RvcmVEZXRhaWwjSW5jbHVkZVRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVUYWdzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBGZWRlcmF0ZWQgRGF0YWJhc2UgdG8gdXBkYXRlLlxuICAgKlxuICAgKiBAc2NoZW1hIFN0b3JlRGV0YWlsI0FkZGl0aW9uYWxTdG9yYWdlQ2xhc3Nlc1xuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFN0b3JhZ2VDbGFzc2VzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1N0b3JlRGV0YWlsJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9TdG9yZURldGFpbChcbiAgb2JqOiBTdG9yZURldGFpbCB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIE5hbWU6IG9iai5uYW1lLFxuICAgIFByb3ZpZGVyOiBvYmoucHJvdmlkZXIsXG4gICAgUmVnaW9uOiBvYmoucmVnaW9uLFxuICAgIEJ1Y2tldDogb2JqLmJ1Y2tldCxcbiAgICBQcmVmaXg6IG9iai5wcmVmaXgsXG4gICAgRGVsaW1pdGVyOiBvYmouZGVsaW1pdGVyLFxuICAgIEluY2x1ZGVUYWdzOiBvYmouaW5jbHVkZVRhZ3MsXG4gICAgQWRkaXRpb25hbFN0b3JhZ2VDbGFzc2VzOiBvYmouYWRkaXRpb25hbFN0b3JhZ2VDbGFzc2VzPy5tYXAoKHkpID0+IHkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIERhdGFMYWtlRGF0YWJhc2VDb2xsZWN0aW9uVmlld1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFMYWtlRGF0YWJhc2VDb2xsZWN0aW9uVmlldyB7XG4gIC8qKlxuICAgKiBBcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIHN0b3JlcyB0aGF0IG1hcCB0byBhIGNvbGxlY3Rpb24gZm9yIHRoaXMgZGF0YSBsYWtlLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlRGF0YWJhc2VDb2xsZWN0aW9uVmlldyNEYXRhU291cmNlc1xuICAgKi9cbiAgcmVhZG9ubHkgZGF0YVNvdXJjZXM/OiBEYXRhTGFrZURhdGFiYXNlRGF0YVNvdXJjZVZpZXdbXTtcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBjb2xsZWN0aW9uIHRvIHdoaWNoIE1vbmdvREIgQ2xvdWQgbWFwcyB0aGUgZGF0YSBpbiB0aGUgZGF0YSBzdG9yZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YUxha2VEYXRhYmFzZUNvbGxlY3Rpb25WaWV3I05hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0RhdGFMYWtlRGF0YWJhc2VDb2xsZWN0aW9uVmlldycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRGF0YUxha2VEYXRhYmFzZUNvbGxlY3Rpb25WaWV3KFxuICBvYmo6IERhdGFMYWtlRGF0YWJhc2VDb2xsZWN0aW9uVmlldyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIERhdGFTb3VyY2VzOiBvYmouZGF0YVNvdXJjZXM/Lm1hcCgoeSkgPT5cbiAgICAgIHRvSnNvbl9EYXRhTGFrZURhdGFiYXNlRGF0YVNvdXJjZVZpZXcoeSlcbiAgICApLFxuICAgIE5hbWU6IG9iai5uYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIERhdGFMYWtlVmlld1ZpZXdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhTGFrZVZpZXdWaWV3IHtcbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIHRoYXQgaWRlbnRpZmllcyB0aGUgdmlldywgd2hpY2ggY29ycmVzcG9uZHMgdG8gYW4gYWdncmVnYXRpb24gcGlwZWxpbmUgb24gYSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlVmlld1ZpZXcjTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQWdncmVnYXRpb24gcGlwZWxpbmUgc3RhZ2VzIHRvIGFwcGx5IHRvIHRoZSBzb3VyY2UgY29sbGVjdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhTGFrZVZpZXdWaWV3I1BpcGVsaW5lXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZT86IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBzb3VyY2UgY29sbGVjdGlvbiBmb3IgdGhlIHZpZXcuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YUxha2VWaWV3VmlldyNTb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRGF0YUxha2VWaWV3VmlldycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRGF0YUxha2VWaWV3VmlldyhcbiAgb2JqOiBEYXRhTGFrZVZpZXdWaWV3IHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgTmFtZTogb2JqLm5hbWUsXG4gICAgUGlwZWxpbmU6IG9iai5waXBlbGluZSxcbiAgICBTb3VyY2U6IG9iai5zb3VyY2UsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRGF0YUxha2VEYXRhYmFzZURhdGFTb3VyY2VWaWV3XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUxha2VEYXRhYmFzZURhdGFTb3VyY2VWaWV3IHtcbiAgLyoqXG4gICAqIEZsYWcgdGhhdCB2YWxpZGF0ZXMgdGhlIHNjaGVtZSBpbiB0aGUgc3BlY2lmaWVkIFVSTHMuIElmIGB0cnVlYCwgYWxsb3dzIGluc2VjdXJlIGBIVFRQYCBzY2hlbWUsIGRvZXNuJ3QgdmVyaWZ5IHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZSBjaGFpbiBhbmQgaG9zdG5hbWUsIGFuZCBhY2NlcHRzIGFueSBjZXJ0aWZpY2F0ZSB3aXRoIGFueSBob3N0bmFtZSBwcmVzZW50ZWQgYnkgdGhlIHNlcnZlci4gSWYgYGZhbHNlYCwgYWxsb3dzIHNlY3VyZSBgSFRUUFNgIHNjaGVtZSBvbmx5LlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlRGF0YWJhc2VEYXRhU291cmNlVmlldyNBbGxvd0luc2VjdXJlXG4gICAqL1xuICByZWFkb25seSBhbGxvd0luc2VjdXJlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBjb2xsZWN0aW9uIGluIHRoZSBkYXRhYmFzZS4gRm9yIGNyZWF0aW5nIGEgd2lsZGNhcmQgKGAqYCkgY29sbGVjdGlvbiwgeW91IG11c3Qgb21pdCB0aGlzIHBhcmFtZXRlci5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhTGFrZURhdGFiYXNlRGF0YVNvdXJjZVZpZXcjQ29sbGVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgY29sbGVjdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUmVnZXggcGF0dGVybiB0byB1c2UgZm9yIGNyZWF0aW5nIHRoZSB3aWxkY2FyZCAoKikgY29sbGVjdGlvbi4gVG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgcmVnZXggc3ludGF4LCBzZWUgW0dvIHByb2dyYW1taW5nIGxhbmd1YWdlXShodHRwczovL3BrZy5nby5kZXYvcmVnZXhwKS5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhTGFrZURhdGFiYXNlRGF0YVNvdXJjZVZpZXcjQ29sbGVjdGlvblJlZ2V4XG4gICAqL1xuICByZWFkb25seSBjb2xsZWN0aW9uUmVnZXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIHRoYXQgaWRlbnRpZmllcyB0aGUgZGF0YWJhc2UsIHdoaWNoIGNvbnRhaW5zIHRoZSBjb2xsZWN0aW9uIGluIHRoZSBjbHVzdGVyLiBZb3UgbXVzdCBvbWl0IHRoaXMgcGFyYW1ldGVyIHRvIGdlbmVyYXRlIHdpbGRjYXJkIChgKmApIGNvbGxlY3Rpb25zIGZvciBkeW5hbWljYWxseSBnZW5lcmF0ZWQgZGF0YWJhc2VzLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlRGF0YWJhc2VEYXRhU291cmNlVmlldyNEYXRhYmFzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbGUgZm9ybWF0IHRoYXQgTW9uZ29EQiBDbG91ZCB1c2VzIGlmIGl0IGVuY291bnRlcnMgYSBmaWxlIHdpdGhvdXQgYSBmaWxlIGV4dGVuc2lvbiB3aGlsZSBzZWFyY2hpbmcgKipzdG9yZU5hbWUqKi5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhTGFrZURhdGFiYXNlRGF0YVNvdXJjZVZpZXcjRGVmYXVsdEZvcm1hdFxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEZvcm1hdD86IERhdGFMYWtlRGF0YWJhc2VEYXRhU291cmNlVmlld0RlZmF1bHRGb3JtYXQ7XG5cbiAgLyoqXG4gICAqIEZpbGUgcGF0aCB0aGF0IGNvbnRyb2xzIGhvdyBNb25nb0RCIENsb3VkIHNlYXJjaGVzIGZvciBhbmQgcGFyc2VzIGZpbGVzIGluIHRoZSAqKnN0b3JlTmFtZSoqIGJlZm9yZSBtYXBwaW5nIHRoZW0gdG8gYSBjb2xsZWN0aW9uLlNwZWNpZnkgYGAvYGAgdG8gY2FwdHVyZSBhbGwgZmlsZXMgYW5kIGZvbGRlcnMgZnJvbSB0aGUgYGBwcmVmaXhgYCBwYXRoLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlRGF0YWJhc2VEYXRhU291cmNlVmlldyNQYXRoXG4gICAqL1xuICByZWFkb25seSBwYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIGRhdGEgc3RvcmUgdGhhdCBNb25nb0RCIENsb3VkIG1hcHMgdG8gdGhlIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YUxha2VEYXRhYmFzZURhdGFTb3VyY2VWaWV3I1N0b3JlTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVUkxzIG9mIHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGRhdGEgZmlsZXMuIFlvdSBjYW4ndCBzcGVjaWZ5IFVSTHMgdGhhdCByZXF1aXJlIGF1dGhlbnRpY2F0aW9uLiBBdGxhcyBEYXRhIExha2UgY3JlYXRlcyBhIHBhcnRpdGlvbiBmb3IgZWFjaCBVUkwuIElmIGVtcHR5IG9yIG9taXR0ZWQsIERhdGEgTGFrZSB1c2VzIHRoZSBVUkxzIGZyb20gdGhlIHN0b3JlIHNwZWNpZmllZCBpbiB0aGUgKipkYXRhU291cmNlcy5zdG9yZU5hbWUqKiBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YUxha2VEYXRhYmFzZURhdGFTb3VyY2VWaWV3I1VybHNcbiAgICovXG4gIHJlYWRvbmx5IHVybHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRGF0YUxha2VEYXRhYmFzZURhdGFTb3VyY2VWaWV3JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9EYXRhTGFrZURhdGFiYXNlRGF0YVNvdXJjZVZpZXcoXG4gIG9iajogRGF0YUxha2VEYXRhYmFzZURhdGFTb3VyY2VWaWV3IHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgQWxsb3dJbnNlY3VyZTogb2JqLmFsbG93SW5zZWN1cmUsXG4gICAgQ29sbGVjdGlvbjogb2JqLmNvbGxlY3Rpb24sXG4gICAgQ29sbGVjdGlvblJlZ2V4OiBvYmouY29sbGVjdGlvblJlZ2V4LFxuICAgIERhdGFiYXNlOiBvYmouZGF0YWJhc2UsXG4gICAgRGVmYXVsdEZvcm1hdDogb2JqLmRlZmF1bHRGb3JtYXQsXG4gICAgUGF0aDogb2JqLnBhdGgsXG4gICAgU3RvcmVOYW1lOiBvYmouc3RvcmVOYW1lLFxuICAgIFVybHM6IG9iai51cmxzPy5tYXAoKHkpID0+IHkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBGaWxlIGZvcm1hdCB0aGF0IE1vbmdvREIgQ2xvdWQgdXNlcyBpZiBpdCBlbmNvdW50ZXJzIGEgZmlsZSB3aXRob3V0IGEgZmlsZSBleHRlbnNpb24gd2hpbGUgc2VhcmNoaW5nICoqc3RvcmVOYW1lKiouXG4gKlxuICogQHNjaGVtYSBEYXRhTGFrZURhdGFiYXNlRGF0YVNvdXJjZVZpZXdEZWZhdWx0Rm9ybWF0XG4gKi9cbmV4cG9ydCBlbnVtIERhdGFMYWtlRGF0YWJhc2VEYXRhU291cmNlVmlld0RlZmF1bHRGb3JtYXQge1xuICAvKiogLmF2cm8gKi9cbiAgQVZSTyA9IFwiLmF2cm9cIixcbiAgLyoqIC5hdnJvLmd6ICovXG4gIEFWUk9fR1ogPSBcIi5hdnJvLmd6XCIsXG4gIC8qKiAuYnNvbiAqL1xuICBCU09OID0gXCIuYnNvblwiLFxuICAvKiogLmJzb24uZ3ogKi9cbiAgQlNPTl9HWiA9IFwiLmJzb24uZ3pcIixcbiAgLyoqIC5jc3YgKi9cbiAgQ1NWID0gXCIuY3N2XCIsXG4gIC8qKiAuanNvbiAqL1xuICBKU09OID0gXCIuanNvblwiLFxuICAvKiogLmpzb24uZ3ogKi9cbiAgSlNPTl9HWiA9IFwiLmpzb24uZ3pcIixcbiAgLyoqIC5vcmMgKi9cbiAgT1JDID0gXCIub3JjXCIsXG4gIC8qKiAudHN2ICovXG4gIFRTViA9IFwiLnRzdlwiLFxuICAvKiogLnRzdi5neiAqL1xuICBUU1ZfR1ogPSBcIi50c3YuZ3pcIixcbn1cblxuLyoqXG4gKiBBIENsb3VkRm9ybWF0aW9uIGBNb25nb0RCOjpBdGxhczo6RGF0YUxha2VzYFxuICpcbiAqIEBjbG91ZGZvcm1hdGlvblJlc291cmNlIE1vbmdvREI6OkF0bGFzOjpEYXRhTGFrZXNcbiAqIEBzdGFiaWxpdHkgZXh0ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIENmbkRhdGFMYWtlcyBleHRlbmRzIGNkay5DZm5SZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgdHlwZSBuYW1lIGZvciB0aGlzIHJlc291cmNlIGNsYXNzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDRk5fUkVTT1VSQ0VfVFlQRV9OQU1FID0gXCJNb25nb0RCOjpBdGxhczo6RGF0YUxha2VzXCI7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlIHByb3BzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByb3BzOiBDZm5EYXRhTGFrZXNQcm9wcztcblxuICAvKipcbiAgICogQXR0cmlidXRlIGBNb25nb0RCOjpBdGxhczo6RGF0YUxha2VzLlN0YXJ0RGF0ZWBcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhdHRyU3RhcnREYXRlOiBudW1iZXI7XG4gIC8qKlxuICAgKiBBdHRyaWJ1dGUgYE1vbmdvREI6OkF0bGFzOjpEYXRhTGFrZXMuSG9zdG5hbWVzYFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF0dHJIb3N0bmFtZXM6IHN0cmluZ1tdO1xuICAvKipcbiAgICogQXR0cmlidXRlIGBNb25nb0RCOjpBdGxhczo6RGF0YUxha2VzLlN0YXRlYFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF0dHJTdGF0ZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgYE1vbmdvREI6OkF0bGFzOjpEYXRhTGFrZXNgLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBpbiB3aGljaCB0aGlzIHJlc291cmNlIGlzIGRlZmluZWRcbiAgICogQHBhcmFtIGl