UNPKG

cdktg

Version:
169 lines 20.6 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.Authorization = exports.Authentication = exports.Protocol = exports.Communication = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const constructs_1 = require("constructs"); const COMMUNICATION_SYMBOL = Symbol.for("cdktg/Communication"); class Communication extends constructs_1.Construct { constructor(scope, id, props) { super(scope, id); this.id = createId(props.source.id, id); this.title = id; this.source = props.source; this.target = props.target; this.description = props.description; this.protocol = props.protocol; this.authentication = props.authentication; this.authorization = props.authorization; this.vpn = props.vpn; this.ipFiltered = props.ipFiltered; this.readonly = props.readonly; this.usage = props.usage; this.dataAssetsSent = new Set(); this.dataAssetsReceived = new Set(); } static isCommunicationl(x) { return x !== null && typeof x === "object" && COMMUNICATION_SYMBOL in x; } sends(...assets) { assets.forEach((a) => { this.dataAssetsSent.add(a); }); } receives(...assets) { assets.forEach((a) => { this.dataAssetsReceived.add(a); }); } hasDataAssets() { return this.dataAssetsSent.size > 0 || this.dataAssetsReceived.size > 0; } isEncrypted() { return [ Protocol.HTTPS, Protocol.WSS, Protocol.JDBC_ENCRYPTED, Protocol.ODBC_ENCRYPTED, Protocol.NOSQL_ACCESS_PROTOCOL_ENCRYPTED, Protocol.SQL_ACCESS_PROTOCOL_ENCRYPTED, Protocol.BINARY_ENCRYPTED, Protocol.TEXT_ENCRYPTED, Protocol.SSH, Protocol.SSH_TUNNEL, Protocol.FTPS, Protocol.SCP, Protocol.LDAPS, Protocol.REVERSE_PROXY_WEB_PROTOCOL_ENCRYPTED, Protocol.IIOP_ENCRYPTED, Protocol.JRMP_ENCRYPTED, Protocol.SMB_ENCRYPTED, Protocol.SMTP_ENCRYPTED, Protocol.POP3_ENCRYPTED, Protocol.IMAP_ENCRYPTED, ].includes(this.protocol); } isProcessLocal() { return [ Protocol.IN_PROCESS_LIBRARY_CALL, Protocol.LOCAL_FILE_ACCESS, Protocol.CONTAINER_SPAWNING, ].includes(this.protocol); } isBidirectional() { return this.dataAssetsSent.size > 0 && this.dataAssetsReceived.size > 0; } /** * @internal */ _toThreagile() { return { [this.title]: { target: this.target.id, description: this.description, protocol: this.protocol, authentication: this.authentication, authorization: this.authorization, vpn: this.vpn, ipFiltered: this.ipFiltered, readonly: this.readonly, usage: this.usage, data_assets_sent: Array.from(this.dataAssetsSent).map((a) => a.id), data_assets_received: Array.from(this.dataAssetsReceived).map((a) => a.id), }, }; } } exports.Communication = Communication; _a = JSII_RTTI_SYMBOL_1; Communication[_a] = { fqn: "cdktg.Communication", version: "0.0.40" }; function createId(sourceAssetId, title) { return sourceAssetId + ">" + title.toLowerCase(); } var Protocol; (function (Protocol) { Protocol["UNKNOEN"] = "unknown-protocol"; Protocol["HTTP"] = "http"; Protocol["HTTPS"] = "https"; Protocol["WS"] = "ws"; Protocol["WSS"] = "wss"; Protocol["REVERSE_PROXY_WEB_PROTOCOL"] = "reverse-proxy-web-protocol"; Protocol["REVERSE_PROXY_WEB_PROTOCOL_ENCRYPTED"] = "reverse-proxy-web-protocol-encrypted"; Protocol["MQTT"] = "mqtt"; Protocol["JDBC"] = "jdbc"; Protocol["JDBC_ENCRYPTED"] = "jdbc-encrypted"; Protocol["ODBC"] = "odbc"; Protocol["ODBC_ENCRYPTED"] = "odbc-encrypted"; Protocol["SQL_ACCESS_PROTOCOL"] = "sql-access-protocol"; Protocol["SQL_ACCESS_PROTOCOL_ENCRYPTED"] = "sql-access-protocol-encrypted"; Protocol["NOSQL_ACCESS_PROTOCOL"] = "nosql-access-protocol"; Protocol["NOSQL_ACCESS_PROTOCOL_ENCRYPTED"] = "nosql-access-protocol-encrypted"; Protocol["BINARY"] = "binary"; Protocol["BINARY_ENCRYPTED"] = "binary-encrypted"; Protocol["TEXT"] = "text"; Protocol["TEXT_ENCRYPTED"] = "text-encrypted"; Protocol["SSH"] = "ssh"; Protocol["SSH_TUNNEL"] = "ssh-tunnel"; Protocol["SMTP"] = "smtp"; Protocol["SMTP_ENCRYPTED"] = "smtp-encrypted"; Protocol["POP3"] = "pop3"; Protocol["POP3_ENCRYPTED"] = "pop3-encrypted"; Protocol["IMAP"] = "imap"; Protocol["IMAP_ENCRYPTED"] = "imap-encrypted"; Protocol["FTP"] = "ftp"; Protocol["FTPS"] = "ftps"; Protocol["SFTP"] = "sftp"; Protocol["SCP"] = "scp"; Protocol["LDAP"] = "ldap"; Protocol["LDAPS"] = "ldaps"; Protocol["JMS"] = "jms"; Protocol["NFS"] = "nfs"; Protocol["SMB"] = "smb"; Protocol["SMB_ENCRYPTED"] = "smb-encrypted"; Protocol["LOCAL_FILE_ACCESS"] = "local-file-access"; Protocol["NRPE"] = "nrpe"; Protocol["XMPP"] = "xmpp"; Protocol["IIOP"] = "iiop"; Protocol["IIOP_ENCRYPTED"] = "iiop-encrypted"; Protocol["JRMP"] = "jrmp"; Protocol["JRMP_ENCRYPTED"] = "jrmp-encrypted"; Protocol["IN_PROCESS_LIBRARY_CALL"] = "in-process-library-call"; Protocol["CONTAINER_SPAWNING"] = "container-spawning"; })(Protocol = exports.Protocol || (exports.Protocol = {})); var Authentication; (function (Authentication) { Authentication["NONE"] = "none"; Authentication["CREDENTIALS"] = "credentials"; Authentication["SESSION_ID"] = "session-id"; Authentication["TOKEN"] = "token"; Authentication["CLIENT_CERTIFICATE"] = "client-certificate"; Authentication["TWO_FACTOR"] = "two-factor"; Authentication["EXTERNALIZED"] = "externalized"; })(Authentication = exports.Authentication || (exports.Authentication = {})); var Authorization; (function (Authorization) { Authorization["NONE"] = "none"; Authorization["TECHNICAL_USER"] = "technical-user"; Authorization["ENDUSER_IDENTITY_PROPAGATION"] = "enduser-identity-propagation"; })(Authorization = exports.Authorization || (exports.Authorization = {})); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbXVuaWNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21tdW5pY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkNBQXVDO0FBS3ZDLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBa0IvRCxNQUFhLGFBQWMsU0FBUSxzQkFBUztJQXFCMUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUMvQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDM0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUV6QixJQUFJLENBQUMsY0FBYyxH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Q2IsdUJBQVcsQ0FBQTtJQUNYLHlCQUFhLENBQUE7SUFDYiwyQkFBZSxDQUFBO0lBQ2YsdUJBQVcsQ0FBQTtJQUNYLHVCQUFXLENBQUE7SUFDWCx1QkFBVyxDQUFBO0lBQ1gsMkNBQStCLENBQUE7SUFDL0IsbURBQXVDLENBQUE7SUFDdkMseUJBQWEsQ0FBQTtJQUNiLHlCQUFhLENBQUE7SUFDYix5QkFBYSxDQUFBO0lBQ2IsNkNBQWlDLENBQUE7SUFDakMseUJBQWEsQ0FBQTtJQUNiLDZDQUFpQyxDQUFBO0lBQ2pDLCtEQUFtRCxDQUFBO0lBQ25ELHFEQUF5QyxDQUFBO0FBQzNDLENBQUMsRUFoRFcsUUFBUSxHQUFSLGdCQUFRLEtBQVIsZ0JBQVEsUUFnRG5CO0FBRUQsSUFBWSxjQVFYO0FBUkQsV0FBWSxjQUFjO0lBQ3hCLCtCQUFhLENBQUE7SUFDYiw2Q0FBMkIsQ0FBQTtJQUMzQiwyQ0FBeUIsQ0FBQTtJQUN6QixpQ0FBZSxDQUFBO0lBQ2YsMkRBQXlDLENBQUE7SUFDekMsMkNBQXlCLENBQUE7SUFDekIsK0NBQTZCLENBQUE7QUFDL0IsQ0FBQyxFQVJXLGNBQWMsR0FBZCxzQkFBYyxLQUFkLHNCQUFjLFFBUXpCO0FBRUQsSUFBWSxhQUlYO0FBSkQsV0FBWSxhQUFhO0lBQ3ZCLDhCQUFhLENBQUE7SUFDYixrREFBaUMsQ0FBQTtJQUNqQyw4RUFBNkQsQ0FBQTtBQUMvRCxDQUFDLEVBSlcsYUFBYSxHQUFiLHFCQUFhLEtBQWIscUJBQWEsUUFJeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgRGF0YUFzc2V0IH0gZnJvbSBcIi4vZGF0YS1hc3NldFwiO1xuaW1wb3J0IHsgVGVjaG5pY2FsQXNzZXQgfSBmcm9tIFwiLi90ZWNobmljYWwtYXNzZXRcIjtcbmltcG9ydCB7IFVzYWdlIH0gZnJvbSBcIi4vdXNhZ2VcIjtcblxuY29uc3QgQ09NTVVOSUNBVElPTl9TWU1CT0wgPSBTeW1ib2wuZm9yKFwiY2RrdGcvQ29tbXVuaWNhdGlvblwiKTtcblxuZXhwb3J0IGludGVyZmFjZSBDb21tdW5pY2F0aW9uT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb3RvY29sOiBQcm90b2NvbDtcbiAgcmVhZG9ubHkgYXV0aGVudGljYXRpb246IEF1dGhlbnRpY2F0aW9uO1xuICByZWFkb25seSBhdXRob3JpemF0aW9uOiBBdXRob3JpemF0aW9uO1xuICByZWFkb25seSB2cG46IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlwRmlsdGVyZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlYWRvbmx5OiBib29sZWFuO1xuICByZWFkb25seSB1c2FnZTogVXNhZ2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbXVuaWNhdGlvblByb3BzIGV4dGVuZHMgQ29tbXVuaWNhdGlvbk9wdGlvbnMge1xuICByZWFkb25seSBzb3VyY2U6IFRlY2huaWNhbEFzc2V0O1xuICByZWFkb25seSB0YXJnZXQ6IFRlY2huaWNhbEFzc2V0O1xufVxuXG5leHBvcnQgY2xhc3MgQ29tbXVuaWNhdGlvbiBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyBzdGF0aWMgaXNDb21tdW5pY2F0aW9ubCh4OiBhbnkpOiB4IGlzIENvbW11bmljYXRpb24ge1xuICAgIHJldHVybiB4ICE9PSBudWxsICYmIHR5cGVvZiB4ID09PSBcIm9iamVjdFwiICYmIENPTU1VTklDQVRJT05fU1lNQk9MIGluIHg7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBzb3VyY2U6IFRlY2huaWNhbEFzc2V0O1xuICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0OiBUZWNobmljYWxBc3NldDtcbiAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBwcm90b2NvbDogUHJvdG9jb2w7XG4gIHB1YmxpYyByZWFkb25seSBhdXRoZW50aWNhdGlvbjogQXV0aGVudGljYXRpb247XG4gIHB1YmxpYyByZWFkb25seSBhdXRob3JpemF0aW9uOiBBdXRob3JpemF0aW9uO1xuICBwdWJsaWMgcmVhZG9ubHkgdnBuOiBib29sZWFuO1xuICBwdWJsaWMgcmVhZG9ubHkgaXBGaWx0ZXJlZDogYm9vbGVhbjtcbiAgcHVibGljIHJlYWRvbmx5IHJlYWRvbmx5OiBib29sZWFuO1xuICBwdWJsaWMgcmVhZG9ubHkgdXNhZ2U6IFVzYWdlO1xuXG4gIHByaXZhdGUgZGF0YUFzc2V0c1NlbnQ6IFNldDxEYXRhQXNzZXQ+O1xuICBwcml2YXRlIGRhdGFBc3NldHNSZWNlaXZlZDogU2V0PERhdGFBc3NldD47XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENvbW11bmljYXRpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5pZCA9IGNyZWF0ZUlkKHByb3BzLnNvdXJjZS5pZCwgaWQpO1xuICAgIHRoaXMudGl0bGUgPSBpZDtcbiAgICB0aGlzLnNvdXJjZSA9IHByb3BzLnNvdXJjZTtcbiAgICB0aGlzLnRhcmdldCA9IHByb3BzLnRhcmdldDtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gcHJvcHMuZGVzY3JpcHRpb247XG4gICAgdGhpcy5wcm90b2NvbCA9IHByb3BzLnByb3RvY29sO1xuICAgIHRoaXMuYXV0aGVudGljYXRpb24gPSBwcm9wcy5hdXRoZW50aWNhdGlvbjtcbiAgICB0aGlzLmF1dGhvcml6YXRpb24gPSBwcm9wcy5hdXRob3JpemF0aW9uO1xuICAgIHRoaXMudnBuID0gcHJvcHMudnBuO1xuICAgIHRoaXMuaXBGaWx0ZXJlZCA9IHByb3BzLmlwRmlsdGVyZWQ7XG4gICAgdGhpcy5yZWFkb25seSA9IHByb3BzLnJlYWRvbmx5O1xuICAgIHRoaXMudXNhZ2UgPSBwcm9wcy51c2FnZTtcblxuICAgIHRoaXMuZGF0YUFzc2V0c1NlbnQgPSBuZXcgU2V0PERhdGFBc3NldD4oKTtcbiAgICB0aGlzLmRhdGFBc3NldHNSZWNlaXZlZCA9IG5ldyBTZXQ8RGF0YUFzc2V0PigpO1xuICB9XG5cbiAgcHVibGljIHNlbmRzKC4uLmFzc2V0czogRGF0YUFzc2V0W10pIHtcbiAgICBhc3NldHMuZm9yRWFjaCgoYSkgPT4ge1xuICAgICAgdGhpcy5kYXRhQXNzZXRzU2VudC5hZGQoYSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVjZWl2ZXMoLi4uYXNzZXRzOiBEYXRhQXNzZXRbXSkge1xuICAgIGFzc2V0cy5mb3JFYWNoKChhKSA9PiB7XG4gICAgICB0aGlzLmRhdGFBc3NldHNSZWNlaXZlZC5hZGQoYSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaGFzRGF0YUFzc2V0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhQXNzZXRzU2VudC5zaXplID4gMCB8fCB0aGlzLmRhdGFBc3NldHNSZWNlaXZlZC5zaXplID4gMDtcbiAgfVxuXG4gIHB1YmxpYyBpc0VuY3J5cHRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gW1xuICAgICAgUHJvdG9jb2wuSFRUUFMsXG4gICAgICBQcm90b2NvbC5XU1MsXG4gICAgICBQcm90b2NvbC5KREJDX0VOQ1JZUFRFRCxcbiAgICAgIFByb3RvY29sLk9EQkNfRU5DUllQVEVELFxuICAgICAgUHJvdG9jb2wuTk9TUUxfQUNDRVNTX1BST1RPQ09MX0VOQ1JZUFRFRCxcbiAgICAgIFByb3RvY29sLlNRTF9BQ0NFU1NfUFJPVE9DT0xfRU5DUllQVEVELFxuICAgICAgUHJvdG9jb2wuQklOQVJZX0VOQ1JZUFRFRCxcbiAgICAgIFByb3RvY29sLlRFWFRfRU5DUllQVEVELFxuICAgICAgUHJvdG9jb2wuU1NILFxuICAgICAgUHJvdG9jb2wuU1NIX1RVTk5FTCxcbiAgICAgIFByb3RvY29sLkZUUFMsXG4gICAgICBQcm90b2NvbC5TQ1AsXG4gICAgICBQcm90b2NvbC5MREFQUyxcbiAgICAgIFByb3RvY29sLlJFVkVSU0VfUFJPWFlfV0VCX1BST1RPQ09MX0VOQ1JZUFRFRCxcbiAgICAgIFByb3RvY29sLklJT1BfRU5DUllQVEVELFxuICAgICAgUHJvdG9jb2wuSlJNUF9FTkNSWVBURUQsXG4gICAgICBQcm90b2NvbC5TTUJfRU5DUllQVEVELFxuICAgICAgUHJvdG9jb2wuU01UUF9FTkNSWVBURUQsXG4gICAgICBQcm90b2NvbC5QT1AzX0VOQ1JZUFRFRCxcbiAgICAgIFByb3RvY29sLklNQVBfRU5DUllQVEVELFxuICAgIF0uaW5jbHVkZXModGhpcy5wcm90b2NvbCk7XG4gIH1cblxuICBwdWJsaWMgaXNQcm9jZXNzTG9jYWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFByb3RvY29sLklOX1BST0NFU1NfTElCUkFSWV9DQUxMLFxuICAgICAgUHJvdG9jb2wuTE9DQUxfRklMRV9BQ0NFU1MsXG4gICAgICBQcm90b2NvbC5DT05UQUlORVJfU1BBV05JTkcsXG4gICAgXS5pbmNsdWRlcyh0aGlzLnByb3RvY29sKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0JpZGlyZWN0aW9uYWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUFzc2V0c1NlbnQuc2l6ZSA+IDAgJiYgdGhpcy5kYXRhQXNzZXRzUmVjZWl2ZWQuc2l6ZSA+IDA7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX3RvVGhyZWFnaWxlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy50aXRsZV06IHtcbiAgICAgICAgdGFyZ2V0OiB0aGlzLnRhcmdldC5pZCxcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICAgIHByb3RvY29sOiB0aGlzLnByb3RvY29sLFxuICAgICAgICBhdXRoZW50aWNhdGlvbjogdGhpcy5hdXRoZW50aWNhdGlvbixcbiAgICAgICAgYXV0aG9yaXphdGlvbjogdGhpcy5hdXRob3JpemF0aW9uLFxuICAgICAgICB2cG46IHRoaXMudnBuLFxuICAgICAgICBpcEZpbHRlcmVkOiB0aGlzLmlwRmlsdGVyZWQsXG4gICAgICAgIHJlYWRvbmx5OiB0aGlzLnJlYWRvbmx5LFxuICAgICAgICB1c2FnZTogdGhpcy51c2FnZSxcbiAgICAgICAgZGF0YV9hc3NldHNfc2VudDogQXJyYXkuZnJvbSh0aGlzLmRhdGFBc3NldHNTZW50KS5tYXAoKGEpID0+IGEuaWQpLFxuICAgICAgICBkYXRhX2Fzc2V0c19yZWNlaXZlZDogQXJyYXkuZnJvbSh0aGlzLmRhdGFBc3NldHNSZWNlaXZlZCkubWFwKFxuICAgICAgICAgIChhKSA9PiBhLmlkXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlSWQoc291cmNlQXNzZXRJZDogc3RyaW5nLCB0aXRsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNvdXJjZUFzc2V0SWQgKyBcIj5cIiArIHRpdGxlLnRvTG93ZXJDYXNlKCk7XG59XG5cbmV4cG9ydCBlbnVtIFByb3RvY29sIHtcbiAgVU5LTk9FTiA9IFwidW5rbm93bi1wcm90b2NvbFwiLFxuICBIVFRQID0gXCJodHRwXCIsXG4gIEhUVFBTID0gXCJodHRwc1wiLFxuICBXUyA9IFwid3NcIixcbiAgV1NTID0gXCJ3c3NcIixcbiAgUkVWRVJTRV9QUk9YWV9XRUJfUFJPVE9DT0wgPSBcInJldmVyc2UtcHJveHktd2ViLXByb3RvY29sXCIsXG4gIFJFVkVSU0VfUFJPWFlfV0VCX1BST1RPQ09MX0VOQ1JZUFRFRCA9IFwicmV2ZXJzZS1wcm94eS13ZWItcHJvdG9jb2wtZW5jcnlwdGVkXCIsXG4gIE1RVFQgPSBcIm1xdHRcIixcbiAgSkRCQyA9IFwiamRiY1wiLFxuICBKREJDX0VOQ1JZUFRFRCA9IFwiamRiYy1lbmNyeXB0ZWRcIixcbiAgT0RCQyA9IFwib2RiY1wiLFxuICBPREJDX0VOQ1JZUFRFRCA9IFwib2RiYy1lbmNyeXB0ZWRcIixcbiAgU1FMX0FDQ0VTU19QUk9UT0NPTCA9IFwic3FsLWFjY2Vzcy1wcm90b2NvbFwiLFxuICBTUUxfQUNDRVNTX1BST1RPQ09MX0VOQ1JZUFRFRCA9IFwic3FsLWFjY2Vzcy1wcm90b2NvbC1lbmNyeXB0ZWRcIixcbiAgTk9TUUxfQUNDRVNTX1BST1RPQ09MID0gXCJub3NxbC1hY2Nlc3MtcHJvdG9jb2xcIixcbiAgTk9TUUxfQUNDRVNTX1BST1RPQ09MX0VOQ1JZUFRFRCA9IFwibm9zcWwtYWNjZXNzLXByb3RvY29sLWVuY3J5cHRlZFwiLFxuICBCSU5BUlkgPSBcImJpbmFyeVwiLFxuICBCSU5BUllfRU5DUllQVEVEID0gXCJiaW5hcnktZW5jcnlwdGVkXCIsXG4gIFRFWFQgPSBcInRleHRcIixcbiAgVEVYVF9FTkNSWVBURUQgPSBcInRleHQtZW5jcnlwdGVkXCIsXG4gIFNTSCA9IFwic3NoXCIsXG4gIFNTSF9UVU5ORUwgPSBcInNzaC10dW5uZWxcIixcbiAgU01UUCA9IFwic210cFwiLFxuICBTTVRQX0VOQ1JZUFRFRCA9IFwic210cC1lbmNyeXB0ZWRcIixcbiAgUE9QMyA9IFwicG9wM1wiLFxuICBQT1AzX0VOQ1JZUFRFRCA9IFwicG9wMy1lbmNyeXB0ZWRcIixcbiAgSU1BUCA9IFwiaW1hcFwiLFxuICBJTUFQX0VOQ1JZUFRFRCA9IFwiaW1hcC1lbmNyeXB0ZWRcIixcbiAgRlRQID0gXCJmdHBcIixcbiAgRlRQUyA9IFwiZnRwc1wiLFxuICBTRlRQID0gXCJzZnRwXCIsXG4gIFNDUCA9IFwic2NwXCIsXG4gIExEQVAgPSBcImxkYXBcIixcbiAgTERBUFMgPSBcImxkYXBzXCIsXG4gIEpNUyA9IFwiam1zXCIsXG4gIE5GUyA9IFwibmZzXCIsXG4gIFNNQiA9IFwic21iXCIsXG4gIFNNQl9FTkNSWVBURUQgPSBcInNtYi1lbmNyeXB0ZWRcIixcbiAgTE9DQUxfRklMRV9BQ0NFU1MgPSBcImxvY2FsLWZpbGUtYWNjZXNzXCIsXG4gIE5SUEUgPSBcIm5ycGVcIixcbiAgWE1QUCA9IFwieG1wcFwiLFxuICBJSU9QID0gXCJpaW9wXCIsXG4gIElJT1BfRU5DUllQVEVEID0gXCJpaW9wLWVuY3J5cHRlZFwiLFxuICBKUk1QID0gXCJqcm1wXCIsXG4gIEpSTVBfRU5DUllQVEVEID0gXCJqcm1wLWVuY3J5cHRlZFwiLFxuICBJTl9QUk9DRVNTX0xJQlJBUllfQ0FMTCA9IFwiaW4tcHJvY2Vzcy1saWJyYXJ5LWNhbGxcIixcbiAgQ09OVEFJTkVSX1NQQVdOSU5HID0gXCJjb250YWluZXItc3Bhd25pbmdcIixcbn1cblxuZXhwb3J0IGVudW0gQXV0aGVudGljYXRpb24ge1xuICBOT05FID0gXCJub25lXCIsXG4gIENSRURFTlRJQUxTID0gXCJjcmVkZW50aWFsc1wiLFxuICBTRVNTSU9OX0lEID0gXCJzZXNzaW9uLWlkXCIsXG4gIFRPS0VOID0gXCJ0b2tlblwiLFxuICBDTElFTlRfQ0VSVElGSUNBVEUgPSBcImNsaWVudC1jZXJ0aWZpY2F0ZVwiLFxuICBUV09fRkFDVE9SID0gXCJ0d28tZmFjdG9yXCIsXG4gIEVYVEVSTkFMSVpFRCA9IFwiZXh0ZXJuYWxpemVkXCIsXG59XG5cbmV4cG9ydCBlbnVtIEF1dGhvcml6YXRpb24ge1xuICBOT05FID0gXCJub25lXCIsXG4gIFRFQ0hOSUNBTF9VU0VSID0gXCJ0ZWNobmljYWwtdXNlclwiLFxuICBFTkRVU0VSX0lERU5USVRZX1BST1BBR0FUSU9OID0gXCJlbmR1c2VyLWlkZW50aXR5LXByb3BhZ2F0aW9uXCIsXG59XG4iXX0=