Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@dataform/core

Package Overview
Dependencies
Maintainers
2
Versions
250
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@dataform/core - npm Package Compare versions

Comparing version 1.1.2 to 1.2.0

adapters/sqldatawarehouse.d.ts

7

adapters/base.js

@@ -14,4 +14,3 @@ (function (factory) {

where(query, where) {
return `select * from (
${query})
return `select * from (${query}) as subquery
where ${where}`;

@@ -33,3 +32,3 @@ }

select ${columns.join(",")}
from (${query})`;
from (${query}) as insertions`;
}

@@ -42,2 +41,2 @@ dropIfExists(target, type) {

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvcmUvYWRhcHRlcnMvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQUVBLE1BQXNCLE9BQU87UUFDcEIsS0FBSyxDQUFDLEtBQWEsRUFBRSxLQUFhO1lBQ3ZDLE9BQU87VUFDRCxLQUFLO2dCQUNDLEtBQUssRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFFTSxhQUFhLENBQUMsSUFBWTtZQUMvQixJQUFJLElBQUksSUFBSSxhQUFhLEVBQUU7Z0JBQ3pCLE9BQU8sT0FBTyxDQUFDO2FBQ2hCO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRU0saUJBQWlCLENBQUMsSUFBWTtZQUNuQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNoRSxDQUFDO1FBRU0sVUFBVSxDQUFDLE1BQXdCLEVBQUUsT0FBaUIsRUFBRSxLQUFhO1lBQzFFLE9BQU87b0JBQ1MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7U0FDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7ZUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztjQUNsQixLQUFLLEdBQUcsQ0FBQztRQUNyQixDQUFDO1FBRU0sWUFBWSxDQUFDLE1BQXdCLEVBQUUsSUFBWTtZQUN4RCxPQUFPLFFBQVEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUM3RSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUNwRCxFQUFFLENBQUM7UUFDTCxDQUFDO0tBR0Y7SUFqQ0QsMEJBaUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGF0YWZvcm0gfSBmcm9tIFwiQGRhdGFmb3JtL3Byb3Rvc1wiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWRhcHRlciB7XG4gIHB1YmxpYyB3aGVyZShxdWVyeTogc3RyaW5nLCB3aGVyZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGBzZWxlY3QgKiBmcm9tIChcbiAgICAgICAgJHtxdWVyeX0pXG4gICAgICAgIHdoZXJlICR7d2hlcmV9YDtcbiAgfVxuXG4gIHB1YmxpYyBiYXNlVGFibGVUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIGlmICh0eXBlID09IFwiaW5jcmVtZW50YWxcIikge1xuICAgICAgcmV0dXJuIFwidGFibGVcIjtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBwdWJsaWMgb3Bwb3NpdGVUYWJsZVR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZVRhYmxlVHlwZSh0eXBlKSA9PSBcInRhYmxlXCIgPyBcInZpZXdcIiA6IFwidGFibGVcIjtcbiAgfVxuXG4gIHB1YmxpYyBpbnNlcnRJbnRvKHRhcmdldDogZGF0YWZvcm0uSVRhcmdldCwgY29sdW1uczogc3RyaW5nW10sIHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYFxuICAgICAgaW5zZXJ0IGludG8gJHt0aGlzLnJlc29sdmVUYXJnZXQodGFyZ2V0KX1cbiAgICAgICgke2NvbHVtbnMuam9pbihcIixcIil9KVxuICAgICAgc2VsZWN0ICR7Y29sdW1ucy5qb2luKFwiLFwiKX1cbiAgICAgIGZyb20gKCR7cXVlcnl9KWA7XG4gIH1cblxuICBwdWJsaWMgZHJvcElmRXhpc3RzKHRhcmdldDogZGF0YWZvcm0uSVRhcmdldCwgdHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGBkcm9wICR7dGhpcy5iYXNlVGFibGVUeXBlKHR5cGUpfSBpZiBleGlzdHMgJHt0aGlzLnJlc29sdmVUYXJnZXQodGFyZ2V0KX0gJHtcbiAgICAgIHRoaXMuYmFzZVRhYmxlVHlwZSh0eXBlKSA9PSBcInRhYmxlXCIgPyBcImNhc2NhZGVcIiA6IFwiXCJcbiAgICB9YDtcbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCByZXNvbHZlVGFyZ2V0KHRhcmdldDogZGF0YWZvcm0uSVRhcmdldCk6IHN0cmluZztcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvcmUvYWRhcHRlcnMvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQUVBLE1BQXNCLE9BQU87UUFDcEIsS0FBSyxDQUFDLEtBQWEsRUFBRSxLQUFhO1lBQ3ZDLE9BQU8sa0JBQWtCLEtBQUs7Z0JBQ2xCLEtBQUssRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFFTSxhQUFhLENBQUMsSUFBWTtZQUMvQixJQUFJLElBQUksSUFBSSxhQUFhLEVBQUU7Z0JBQ3pCLE9BQU8sT0FBTyxDQUFDO2FBQ2hCO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRU0saUJBQWlCLENBQUMsSUFBWTtZQUNuQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNoRSxDQUFDO1FBRU0sVUFBVSxDQUFDLE1BQXdCLEVBQUUsT0FBaUIsRUFBRSxLQUFhO1lBQzFFLE9BQU87b0JBQ1MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7U0FDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7ZUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztjQUNsQixLQUFLLGlCQUFpQixDQUFDO1FBQ25DLENBQUM7UUFFTSxZQUFZLENBQUMsTUFBd0IsRUFBRSxJQUFZO1lBQ3hELE9BQU8sUUFBUSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQzdFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQ3BELEVBQUUsQ0FBQztRQUNMLENBQUM7S0FHRjtJQWhDRCwwQkFnQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkYXRhZm9ybSB9IGZyb20gXCJAZGF0YWZvcm0vcHJvdG9zXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBZGFwdGVyIHtcbiAgcHVibGljIHdoZXJlKHF1ZXJ5OiBzdHJpbmcsIHdoZXJlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYHNlbGVjdCAqIGZyb20gKCR7cXVlcnl9KSBhcyBzdWJxdWVyeVxuICAgICAgICB3aGVyZSAke3doZXJlfWA7XG4gIH1cblxuICBwdWJsaWMgYmFzZVRhYmxlVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZSA9PSBcImluY3JlbWVudGFsXCIpIHtcbiAgICAgIHJldHVybiBcInRhYmxlXCI7XG4gICAgfVxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgcHVibGljIG9wcG9zaXRlVGFibGVUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmJhc2VUYWJsZVR5cGUodHlwZSkgPT0gXCJ0YWJsZVwiID8gXCJ2aWV3XCIgOiBcInRhYmxlXCI7XG4gIH1cblxuICBwdWJsaWMgaW5zZXJ0SW50byh0YXJnZXQ6IGRhdGFmb3JtLklUYXJnZXQsIGNvbHVtbnM6IHN0cmluZ1tdLCBxdWVyeTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGBcbiAgICAgIGluc2VydCBpbnRvICR7dGhpcy5yZXNvbHZlVGFyZ2V0KHRhcmdldCl9XG4gICAgICAoJHtjb2x1bW5zLmpvaW4oXCIsXCIpfSlcbiAgICAgIHNlbGVjdCAke2NvbHVtbnMuam9pbihcIixcIil9XG4gICAgICBmcm9tICgke3F1ZXJ5fSkgYXMgaW5zZXJ0aW9uc2A7XG4gIH1cblxuICBwdWJsaWMgZHJvcElmRXhpc3RzKHRhcmdldDogZGF0YWZvcm0uSVRhcmdldCwgdHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGBkcm9wICR7dGhpcy5iYXNlVGFibGVUeXBlKHR5cGUpfSBpZiBleGlzdHMgJHt0aGlzLnJlc29sdmVUYXJnZXQodGFyZ2V0KX0gJHtcbiAgICAgIHRoaXMuYmFzZVRhYmxlVHlwZSh0eXBlKSA9PSBcInRhYmxlXCIgPyBcImNhc2NhZGVcIiA6IFwiXCJcbiAgICB9YDtcbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCByZXNvbHZlVGFyZ2V0KHRhcmdldDogZGF0YWZvcm0uSVRhcmdldCk6IHN0cmluZztcbn1cbiJdfQ==
/// <amd-module name="@dataform/core/adapters/index" />
import { Tasks } from "@dataform/core/tasks";
import { dataform } from "@dataform/protos";
import { Tasks } from "../tasks";
export interface IAdapter {

@@ -16,3 +16,4 @@ resolveTarget(target: dataform.ITarget): string;

REDSHIFT = "redshift",
SNOWFLAKE = "snowflake"
SNOWFLAKE = "snowflake",
SQLDATAWAREHOUSE = "sqldatawarehouse"
}

@@ -25,4 +26,5 @@ export declare function supportsCancel(warehouseType: WarehouseType): boolean;

[WarehouseType.SNOWFLAKE]: ("username" | "password" | "databaseName" | "accountId" | "role" | "warehouse")[];
[WarehouseType.SQLDATAWAREHOUSE]: ("port" | "username" | "password" | "server" | "database")[];
};
export declare function register(warehouseType: string, c: AdapterConstructor<IAdapter>): void;
export declare function create(projectConfig: dataform.IProjectConfig): IAdapter;

@@ -7,3 +7,3 @@ (function (factory) {

else if (typeof define === "function" && define.amd) {
define("@dataform/core/adapters/index", ["require", "exports", "@dataform/core/adapters/bigquery", "@dataform/core/adapters/redshift", "@dataform/core/adapters/snowflake"], factory);
define("@dataform/core/adapters/index", ["require", "exports", "@dataform/core/adapters/bigquery", "@dataform/core/adapters/redshift", "@dataform/core/adapters/snowflake", "@dataform/core/adapters/sqldatawarehouse"], factory);
}

@@ -16,2 +16,3 @@ })(function (require, exports) {

const snowflake_1 = require("@dataform/core/adapters/snowflake");
const sqldatawarehouse_1 = require("@dataform/core/adapters/sqldatawarehouse");
var WarehouseType;

@@ -23,5 +24,9 @@ (function (WarehouseType) {

WarehouseType["SNOWFLAKE"] = "snowflake";
WarehouseType["SQLDATAWAREHOUSE"] = "sqldatawarehouse";
})(WarehouseType = exports.WarehouseType || (exports.WarehouseType = {}));
const CANCELLATION_SUPPORTED = [WarehouseType.BIGQUERY, WarehouseType.SQLDATAWAREHOUSE];
function supportsCancel(warehouseType) {
return warehouseType === WarehouseType.BIGQUERY;
return CANCELLATION_SUPPORTED.some(w => {
return w === warehouseType;
});
}

@@ -48,2 +53,9 @@ exports.supportsCancel = supportsCancel;

];
const requiredSQLDataWarehouseProps = [
"server",
"port",
"username",
"password",
"database"
];
exports.requiredWarehouseProps = {

@@ -53,3 +65,4 @@ [WarehouseType.BIGQUERY]: requiredBigQueryWarehouseProps,

[WarehouseType.REDSHIFT]: requiredJdbcWarehouseProps,
[WarehouseType.SNOWFLAKE]: requiredSnowflakeWarehouseProps
[WarehouseType.SNOWFLAKE]: requiredSnowflakeWarehouseProps,
[WarehouseType.SQLDATAWAREHOUSE]: requiredSQLDataWarehouseProps
};

@@ -72,3 +85,4 @@ const registry = {};

register("snowflake", snowflake_1.SnowflakeAdapter);
register("sqldatawarehouse", sqldatawarehouse_1.SQLDataWarehouseAdapter);
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb3JlL2FkYXB0ZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBRUEsK0RBQTZDO0lBQzdDLCtEQUE2QztJQUM3QyxpRUFBK0M7SUFvQi9DLElBQVksYUFLWDtJQUxELFdBQVksYUFBYTtRQUN2QixzQ0FBcUIsQ0FBQTtRQUNyQixzQ0FBcUIsQ0FBQTtRQUNyQixzQ0FBcUIsQ0FBQTtRQUNyQix3Q0FBdUIsQ0FBQTtJQUN6QixDQUFDLEVBTFcsYUFBYSxHQUFiLHFCQUFhLEtBQWIscUJBQWEsUUFLeEI7SUFFRCxTQUFnQixjQUFjLENBQUMsYUFBNEI7UUFDekQsT0FBTyxhQUFhLEtBQUssYUFBYSxDQUFDLFFBQVEsQ0FBQztJQUNsRCxDQUFDO0lBRkQsd0NBRUM7SUFFRCxNQUFNLDhCQUE4QixHQUFvQztRQUN0RSxXQUFXO1FBQ1gsYUFBYTtLQUNkLENBQUM7SUFDRixNQUFNLDBCQUEwQixHQUFnQztRQUM5RCxNQUFNO1FBQ04sTUFBTTtRQUNOLFVBQVU7UUFDVixVQUFVO1FBQ1YsY0FBYztLQUNmLENBQUM7SUFDRixNQUFNLCtCQUErQixHQUFxQztRQUN4RSxXQUFXO1FBQ1gsVUFBVTtRQUNWLFVBQVU7UUFDVixNQUFNO1FBQ04sY0FBYztRQUNkLFdBQVc7S0FDWixDQUFDO0lBRVcsUUFBQSxzQkFBc0IsR0FBRztRQUNwQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSw4QkFBOEI7UUFDeEQsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsMEJBQTBCO1FBQ3BELENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLDBCQUEwQjtRQUNwRCxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSwrQkFBK0I7S0FDM0QsQ0FBQztJQUVGLE1BQU0sUUFBUSxHQUE4RCxFQUFFLENBQUM7SUFFL0UsU0FBZ0IsUUFBUSxDQUFDLGFBQXFCLEVBQUUsQ0FBK0I7UUFDN0UsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRkQsNEJBRUM7SUFFRCxTQUFnQixNQUFNLENBQUMsYUFBc0M7UUFDM0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDdEMsTUFBTSxLQUFLLENBQUMsMEJBQTBCLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1NBQ2xFO1FBQ0QsT0FBTyxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUxELHdCQUtDO0lBRUQsUUFBUSxDQUFDLFVBQVUsRUFBRSwwQkFBZSxDQUFDLENBQUM7SUFJdEMsUUFBUSxDQUFDLFVBQVUsRUFBRSwwQkFBZSxDQUFDLENBQUM7SUFDdEMsUUFBUSxDQUFDLFVBQVUsRUFBRSwwQkFBZSxDQUFDLENBQUM7SUFDdEMsUUFBUSxDQUFDLFdBQVcsRUFBRSw0QkFBZ0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGF0YWZvcm0gfSBmcm9tIFwiQGRhdGFmb3JtL3Byb3Rvc1wiO1xuaW1wb3J0IHsgVGFza3MgfSBmcm9tIFwiLi4vdGFza3NcIjtcbmltcG9ydCB7IEJpZ1F1ZXJ5QWRhcHRlciB9IGZyb20gXCIuL2JpZ3F1ZXJ5XCI7XG5pbXBvcnQgeyBSZWRzaGlmdEFkYXB0ZXIgfSBmcm9tIFwiLi9yZWRzaGlmdFwiO1xuaW1wb3J0IHsgU25vd2ZsYWtlQWRhcHRlciB9IGZyb20gXCIuL3Nub3dmbGFrZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElBZGFwdGVyIHtcbiAgcmVzb2x2ZVRhcmdldCh0YXJnZXQ6IGRhdGFmb3JtLklUYXJnZXQpOiBzdHJpbmc7XG5cbiAgcHVibGlzaFRhc2tzKFxuICAgIHRhYmxlOiBkYXRhZm9ybS5JVGFibGUsXG4gICAgcnVuQ29uZmlnOiBkYXRhZm9ybS5JUnVuQ29uZmlnLFxuICAgIHRhYmxlTWV0YWRhdGE6IGRhdGFmb3JtLklUYWJsZU1ldGFkYXRhXG4gICk6IFRhc2tzO1xuICBhc3NlcnRUYXNrcyhhc3NlcnRpb246IGRhdGFmb3JtLklBc3NlcnRpb24sIHByb2plY3RDb25maWc6IGRhdGFmb3JtLklQcm9qZWN0Q29uZmlnKTogVGFza3M7XG5cbiAgZHJvcElmRXhpc3RzKHRhcmdldDogZGF0YWZvcm0uSVRhcmdldCwgdHlwZTogc3RyaW5nKTogc3RyaW5nO1xuICBiYXNlVGFibGVUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQWRhcHRlckNvbnN0cnVjdG9yPFQgZXh0ZW5kcyBJQWRhcHRlcj4gPSBuZXcgKFxuICBwcm9qZWN0Q29uZmlnOiBkYXRhZm9ybS5JUHJvamVjdENvbmZpZ1xuKSA9PiBUO1xuXG5leHBvcnQgZW51bSBXYXJlaG91c2VUeXBlIHtcbiAgQklHUVVFUlkgPSBcImJpZ3F1ZXJ5XCIsXG4gIFBPU1RHUkVTID0gXCJwb3N0Z3Jlc1wiLFxuICBSRURTSElGVCA9IFwicmVkc2hpZnRcIixcbiAgU05PV0ZMQUtFID0gXCJzbm93Zmxha2VcIlxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNDYW5jZWwod2FyZWhvdXNlVHlwZTogV2FyZWhvdXNlVHlwZSkge1xuICByZXR1cm4gd2FyZWhvdXNlVHlwZSA9PT0gV2FyZWhvdXNlVHlwZS5CSUdRVUVSWTtcbn1cblxuY29uc3QgcmVxdWlyZWRCaWdRdWVyeVdhcmVob3VzZVByb3BzOiBBcnJheTxrZXlvZiBkYXRhZm9ybS5JQmlnUXVlcnk+ID0gW1xuICBcInByb2plY3RJZFwiLFxuICBcImNyZWRlbnRpYWxzXCJcbl07XG5jb25zdCByZXF1aXJlZEpkYmNXYXJlaG91c2VQcm9wczogQXJyYXk8a2V5b2YgZGF0YWZvcm0uSUpEQkM+ID0gW1xuICBcImhvc3RcIixcbiAgXCJwb3J0XCIsXG4gIFwidXNlcm5hbWVcIixcbiAgXCJwYXNzd29yZFwiLFxuICBcImRhdGFiYXNlTmFtZVwiXG5dO1xuY29uc3QgcmVxdWlyZWRTbm93Zmxha2VXYXJlaG91c2VQcm9wczogQXJyYXk8a2V5b2YgZGF0YWZvcm0uSVNub3dmbGFrZT4gPSBbXG4gIFwiYWNjb3VudElkXCIsXG4gIFwidXNlcm5hbWVcIixcbiAgXCJwYXNzd29yZFwiLFxuICBcInJvbGVcIixcbiAgXCJkYXRhYmFzZU5hbWVcIixcbiAgXCJ3YXJlaG91c2VcIlxuXTtcblxuZXhwb3J0IGNvbnN0IHJlcXVpcmVkV2FyZWhvdXNlUHJvcHMgPSB7XG4gIFtXYXJlaG91c2VUeXBlLkJJR1FVRVJZXTogcmVxdWlyZWRCaWdRdWVyeVdhcmVob3VzZVByb3BzLFxuICBbV2FyZWhvdXNlVHlwZS5QT1NUR1JFU106IHJlcXVpcmVkSmRiY1dhcmVob3VzZVByb3BzLFxuICBbV2FyZWhvdXNlVHlwZS5SRURTSElGVF06IHJlcXVpcmVkSmRiY1dhcmVob3VzZVByb3BzLFxuICBbV2FyZWhvdXNlVHlwZS5TTk9XRkxBS0VdOiByZXF1aXJlZFNub3dmbGFrZVdhcmVob3VzZVByb3BzXG59O1xuXG5jb25zdCByZWdpc3RyeTogeyBbd2FyZWhvdXNlVHlwZTogc3RyaW5nXTogQWRhcHRlckNvbnN0cnVjdG9yPElBZGFwdGVyPiB9ID0ge307XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlcih3YXJlaG91c2VUeXBlOiBzdHJpbmcsIGM6IEFkYXB0ZXJDb25zdHJ1Y3RvcjxJQWRhcHRlcj4pIHtcbiAgcmVnaXN0cnlbd2FyZWhvdXNlVHlwZV0gPSBjO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKHByb2plY3RDb25maWc6IGRhdGFmb3JtLklQcm9qZWN0Q29uZmlnKTogSUFkYXB0ZXIge1xuICBpZiAoIXJlZ2lzdHJ5W3Byb2plY3RDb25maWcud2FyZWhvdXNlXSkge1xuICAgIHRocm93IEVycm9yKGBVbnN1cHBvcnRlZCB3YXJlaG91c2U6ICR7cHJvamVjdENvbmZpZy53YXJlaG91c2V9YCk7XG4gIH1cbiAgcmV0dXJuIG5ldyByZWdpc3RyeVtwcm9qZWN0Q29uZmlnLndhcmVob3VzZV0ocHJvamVjdENvbmZpZyk7XG59XG5cbnJlZ2lzdGVyKFwiYmlncXVlcnlcIiwgQmlnUXVlcnlBZGFwdGVyKTtcbi8vIFRPRE86IFRoZSByZWRzaGlmdCBjbGllbnQgbGlicmFyeSBoYXBwZW5zIHRvIHdvcmsgd2VsbCBmb3IgcG9zdGdyZXMsIGJ1dCB3ZSBzaG91bGQgcHJvYmFibHlcbi8vIG5vdCBiZSByZWx5aW5nIG9uIHRoYXQgYmVoYXZpb3VyLiBBdCBzb21lIHBvaW50IHdlIHNob3VsZCByZXBsYWNlIHRoaXMgd2l0aCBhIGZpcnN0LWNsYXNzXG4vLyBQb3N0Z3Jlc0FkYXB0ZXIuXG5yZWdpc3RlcihcInBvc3RncmVzXCIsIFJlZHNoaWZ0QWRhcHRlcik7XG5yZWdpc3RlcihcInJlZHNoaWZ0XCIsIFJlZHNoaWZ0QWRhcHRlcik7XG5yZWdpc3RlcihcInNub3dmbGFrZVwiLCBTbm93Zmxha2VBZGFwdGVyKTtcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb3JlL2FkYXB0ZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBQUEsK0RBQW1FO0lBQ25FLCtEQUFtRTtJQUNuRSxpRUFBcUU7SUFDckUsK0VBQW1GO0lBc0JuRixJQUFZLGFBTVg7SUFORCxXQUFZLGFBQWE7UUFDdkIsc0NBQXFCLENBQUE7UUFDckIsc0NBQXFCLENBQUE7UUFDckIsc0NBQXFCLENBQUE7UUFDckIsd0NBQXVCLENBQUE7UUFDdkIsc0RBQXFDLENBQUE7SUFDdkMsQ0FBQyxFQU5XLGFBQWEsR0FBYixxQkFBYSxLQUFiLHFCQUFhLFFBTXhCO0lBRUQsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFeEYsU0FBZ0IsY0FBYyxDQUFDLGFBQTRCO1FBQ3pELE9BQU8sc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sQ0FBQyxLQUFLLGFBQWEsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFKRCx3Q0FJQztJQUVELE1BQU0sOEJBQThCLEdBQW9DO1FBQ3RFLFdBQVc7UUFDWCxhQUFhO0tBQ2QsQ0FBQztJQUNGLE1BQU0sMEJBQTBCLEdBQWdDO1FBQzlELE1BQU07UUFDTixNQUFNO1FBQ04sVUFBVTtRQUNWLFVBQVU7UUFDVixjQUFjO0tBQ2YsQ0FBQztJQUNGLE1BQU0sK0JBQStCLEdBQXFDO1FBQ3hFLFdBQVc7UUFDWCxVQUFVO1FBQ1YsVUFBVTtRQUNWLE1BQU07UUFDTixjQUFjO1FBQ2QsV0FBVztLQUNaLENBQUM7SUFDRixNQUFNLDZCQUE2QixHQUE0QztRQUM3RSxRQUFRO1FBQ1IsTUFBTTtRQUNOLFVBQVU7UUFDVixVQUFVO1FBQ1YsVUFBVTtLQUNYLENBQUM7SUFFVyxRQUFBLHNCQUFzQixHQUFHO1FBQ3BDLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLDhCQUE4QjtRQUN4RCxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSwwQkFBMEI7UUFDcEQsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsMEJBQTBCO1FBQ3BELENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLCtCQUErQjtRQUMxRCxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLDZCQUE2QjtLQUNoRSxDQUFDO0lBRUYsTUFBTSxRQUFRLEdBQThELEVBQUUsQ0FBQztJQUUvRSxTQUFnQixRQUFRLENBQUMsYUFBcUIsRUFBRSxDQUErQjtRQUM3RSxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFGRCw0QkFFQztJQUVELFNBQWdCLE1BQU0sQ0FBQyxhQUFzQztRQUMzRCxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN0QyxNQUFNLEtBQUssQ0FBQywwQkFBMEIsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7U0FDbEU7UUFDRCxPQUFPLElBQUksUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBTEQsd0JBS0M7SUFFRCxRQUFRLENBQUMsVUFBVSxFQUFFLDBCQUFlLENBQUMsQ0FBQztJQUl0QyxRQUFRLENBQUMsVUFBVSxFQUFFLDBCQUFlLENBQUMsQ0FBQztJQUN0QyxRQUFRLENBQUMsVUFBVSxFQUFFLDBCQUFlLENBQUMsQ0FBQztJQUN0QyxRQUFRLENBQUMsV0FBVyxFQUFFLDRCQUFnQixDQUFDLENBQUM7SUFDeEMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLDBDQUF1QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCaWdRdWVyeUFkYXB0ZXIgfSBmcm9tIFwiQGRhdGFmb3JtL2NvcmUvYWRhcHRlcnMvYmlncXVlcnlcIjtcbmltcG9ydCB7IFJlZHNoaWZ0QWRhcHRlciB9IGZyb20gXCJAZGF0YWZvcm0vY29yZS9hZGFwdGVycy9yZWRzaGlmdFwiO1xuaW1wb3J0IHsgU25vd2ZsYWtlQWRhcHRlciB9IGZyb20gXCJAZGF0YWZvcm0vY29yZS9hZGFwdGVycy9zbm93Zmxha2VcIjtcbmltcG9ydCB7IFNRTERhdGFXYXJlaG91c2VBZGFwdGVyIH0gZnJvbSBcIkBkYXRhZm9ybS9jb3JlL2FkYXB0ZXJzL3NxbGRhdGF3YXJlaG91c2VcIjtcbmltcG9ydCB7IFRhc2tzIH0gZnJvbSBcIkBkYXRhZm9ybS9jb3JlL3Rhc2tzXCI7XG5pbXBvcnQgeyBkYXRhZm9ybSB9IGZyb20gXCJAZGF0YWZvcm0vcHJvdG9zXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFkYXB0ZXIge1xuICByZXNvbHZlVGFyZ2V0KHRhcmdldDogZGF0YWZvcm0uSVRhcmdldCk6IHN0cmluZztcblxuICBwdWJsaXNoVGFza3MoXG4gICAgdGFibGU6IGRhdGFmb3JtLklUYWJsZSxcbiAgICBydW5Db25maWc6IGRhdGFmb3JtLklSdW5Db25maWcsXG4gICAgdGFibGVNZXRhZGF0YTogZGF0YWZvcm0uSVRhYmxlTWV0YWRhdGFcbiAgKTogVGFza3M7XG4gIGFzc2VydFRhc2tzKGFzc2VydGlvbjogZGF0YWZvcm0uSUFzc2VydGlvbiwgcHJvamVjdENvbmZpZzogZGF0YWZvcm0uSVByb2plY3RDb25maWcpOiBUYXNrcztcblxuICBkcm9wSWZFeGlzdHModGFyZ2V0OiBkYXRhZm9ybS5JVGFyZ2V0LCB0eXBlOiBzdHJpbmcpOiBzdHJpbmc7XG4gIGJhc2VUYWJsZVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBBZGFwdGVyQ29uc3RydWN0b3I8VCBleHRlbmRzIElBZGFwdGVyPiA9IG5ldyAoXG4gIHByb2plY3RDb25maWc6IGRhdGFmb3JtLklQcm9qZWN0Q29uZmlnXG4pID0+IFQ7XG5cbmV4cG9ydCBlbnVtIFdhcmVob3VzZVR5cGUge1xuICBCSUdRVUVSWSA9IFwiYmlncXVlcnlcIixcbiAgUE9TVEdSRVMgPSBcInBvc3RncmVzXCIsXG4gIFJFRFNISUZUID0gXCJyZWRzaGlmdFwiLFxuICBTTk9XRkxBS0UgPSBcInNub3dmbGFrZVwiLFxuICBTUUxEQVRBV0FSRUhPVVNFID0gXCJzcWxkYXRhd2FyZWhvdXNlXCJcbn1cblxuY29uc3QgQ0FOQ0VMTEFUSU9OX1NVUFBPUlRFRCA9IFtXYXJlaG91c2VUeXBlLkJJR1FVRVJZLCBXYXJlaG91c2VUeXBlLlNRTERBVEFXQVJFSE9VU0VdO1xuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNDYW5jZWwod2FyZWhvdXNlVHlwZTogV2FyZWhvdXNlVHlwZSkge1xuICByZXR1cm4gQ0FOQ0VMTEFUSU9OX1NVUFBPUlRFRC5zb21lKHcgPT4ge1xuICAgIHJldHVybiB3ID09PSB3YXJlaG91c2VUeXBlO1xuICB9KTtcbn1cblxuY29uc3QgcmVxdWlyZWRCaWdRdWVyeVdhcmVob3VzZVByb3BzOiBBcnJheTxrZXlvZiBkYXRhZm9ybS5JQmlnUXVlcnk+ID0gW1xuICBcInByb2plY3RJZFwiLFxuICBcImNyZWRlbnRpYWxzXCJcbl07XG5jb25zdCByZXF1aXJlZEpkYmNXYXJlaG91c2VQcm9wczogQXJyYXk8a2V5b2YgZGF0YWZvcm0uSUpEQkM+ID0gW1xuICBcImhvc3RcIixcbiAgXCJwb3J0XCIsXG4gIFwidXNlcm5hbWVcIixcbiAgXCJwYXNzd29yZFwiLFxuICBcImRhdGFiYXNlTmFtZVwiXG5dO1xuY29uc3QgcmVxdWlyZWRTbm93Zmxha2VXYXJlaG91c2VQcm9wczogQXJyYXk8a2V5b2YgZGF0YWZvcm0uSVNub3dmbGFrZT4gPSBbXG4gIFwiYWNjb3VudElkXCIsXG4gIFwidXNlcm5hbWVcIixcbiAgXCJwYXNzd29yZFwiLFxuICBcInJvbGVcIixcbiAgXCJkYXRhYmFzZU5hbWVcIixcbiAgXCJ3YXJlaG91c2VcIlxuXTtcbmNvbnN0IHJlcXVpcmVkU1FMRGF0YVdhcmVob3VzZVByb3BzOiBBcnJheTxrZXlvZiBkYXRhZm9ybS5JU1FMRGF0YVdhcmVob3VzZT4gPSBbXG4gIFwic2VydmVyXCIsXG4gIFwicG9ydFwiLFxuICBcInVzZXJuYW1lXCIsXG4gIFwicGFzc3dvcmRcIixcbiAgXCJkYXRhYmFzZVwiXG5dO1xuXG5leHBvcnQgY29uc3QgcmVxdWlyZWRXYXJlaG91c2VQcm9wcyA9IHtcbiAgW1dhcmVob3VzZVR5cGUuQklHUVVFUlldOiByZXF1aXJlZEJpZ1F1ZXJ5V2FyZWhvdXNlUHJvcHMsXG4gIFtXYXJlaG91c2VUeXBlLlBPU1RHUkVTXTogcmVxdWlyZWRKZGJjV2FyZWhvdXNlUHJvcHMsXG4gIFtXYXJlaG91c2VUeXBlLlJFRFNISUZUXTogcmVxdWlyZWRKZGJjV2FyZWhvdXNlUHJvcHMsXG4gIFtXYXJlaG91c2VUeXBlLlNOT1dGTEFLRV06IHJlcXVpcmVkU25vd2ZsYWtlV2FyZWhvdXNlUHJvcHMsXG4gIFtXYXJlaG91c2VUeXBlLlNRTERBVEFXQVJFSE9VU0VdOiByZXF1aXJlZFNRTERhdGFXYXJlaG91c2VQcm9wc1xufTtcblxuY29uc3QgcmVnaXN0cnk6IHsgW3dhcmVob3VzZVR5cGU6IHN0cmluZ106IEFkYXB0ZXJDb25zdHJ1Y3RvcjxJQWRhcHRlcj4gfSA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXIod2FyZWhvdXNlVHlwZTogc3RyaW5nLCBjOiBBZGFwdGVyQ29uc3RydWN0b3I8SUFkYXB0ZXI+KSB7XG4gIHJlZ2lzdHJ5W3dhcmVob3VzZVR5cGVdID0gYztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZShwcm9qZWN0Q29uZmlnOiBkYXRhZm9ybS5JUHJvamVjdENvbmZpZyk6IElBZGFwdGVyIHtcbiAgaWYgKCFyZWdpc3RyeVtwcm9qZWN0Q29uZmlnLndhcmVob3VzZV0pIHtcbiAgICB0aHJvdyBFcnJvcihgVW5zdXBwb3J0ZWQgd2FyZWhvdXNlOiAke3Byb2plY3RDb25maWcud2FyZWhvdXNlfWApO1xuICB9XG4gIHJldHVybiBuZXcgcmVnaXN0cnlbcHJvamVjdENvbmZpZy53YXJlaG91c2VdKHByb2plY3RDb25maWcpO1xufVxuXG5yZWdpc3RlcihcImJpZ3F1ZXJ5XCIsIEJpZ1F1ZXJ5QWRhcHRlcik7XG4vLyBUT0RPOiBUaGUgcmVkc2hpZnQgY2xpZW50IGxpYnJhcnkgaGFwcGVucyB0byB3b3JrIHdlbGwgZm9yIHBvc3RncmVzLCBidXQgd2Ugc2hvdWxkIHByb2JhYmx5XG4vLyBub3QgYmUgcmVseWluZyBvbiB0aGF0IGJlaGF2aW91ci4gQXQgc29tZSBwb2ludCB3ZSBzaG91bGQgcmVwbGFjZSB0aGlzIHdpdGggYSBmaXJzdC1jbGFzc1xuLy8gUG9zdGdyZXNBZGFwdGVyLlxucmVnaXN0ZXIoXCJwb3N0Z3Jlc1wiLCBSZWRzaGlmdEFkYXB0ZXIpO1xucmVnaXN0ZXIoXCJyZWRzaGlmdFwiLCBSZWRzaGlmdEFkYXB0ZXIpO1xucmVnaXN0ZXIoXCJzbm93Zmxha2VcIiwgU25vd2ZsYWtlQWRhcHRlcik7XG5yZWdpc3RlcihcInNxbGRhdGF3YXJlaG91c2VcIiwgU1FMRGF0YVdhcmVob3VzZUFkYXB0ZXIpO1xuIl19
{
"version": "1.1.2",
"version": "1.2.0",
"homepage": "https://github.com/dataform-co/dataform",

@@ -24,3 +24,3 @@ "license": "MIT",

"dependencies": {
"@dataform/protos": "1.1.2",
"@dataform/protos": "1.2.0",
"moo": "^0.5.0",

@@ -27,0 +27,0 @@ "protobufjs": "^6.8.8"

@@ -96,2 +96,6 @@ (function (factory) {

}
if (actionOptions.sqlxConfig.sqldatawarehouse &&
!this.isDatasetType(actionOptions.sqlxConfig.type)) {
this.compileError("Actions may only specify 'sqldatawarehouse: { ... }' if they create a dataset.");
}
if (actionOptions.sqlxConfig.bigquery && !this.isDatasetType(actionOptions.sqlxConfig.type)) {

@@ -281,2 +285,2 @@ this.compileError("Actions may only specify 'bigquery: { ... }' if they create a dataset.");

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc2Vzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQUFBLDBEQUFvRDtJQUNwRCx3REFBNEU7SUFDNUUsd0RBQTRFO0lBQzVFLDhDQUE4QztJQUM5Qyw0Q0FBNEM7SUFDNUMsOENBQThDO0lBQzlDLDZDQUE0QztJQXVCNUMsU0FBZ0IscUJBQXFCLENBQUMsT0FBMkI7UUFDL0QsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLDJCQUEyQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FDM0YsQ0FBQztJQUNKLENBQUM7SUFKRCxzREFJQztJQUVELFNBQVMsMkJBQTJCLENBQ2xDLFdBQXFCLEVBQ3JCLFdBQXVDO1FBRXZDLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFO1lBQ25DLE9BQU87Z0JBQ0wsaUJBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7b0JBQy9CLFdBQVc7b0JBQ1gsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCLENBQUM7YUFDSCxDQUFDO1NBQ0g7UUFDRCxNQUFNLGdCQUFnQixHQUFpQyxXQUFXLENBQUMsV0FBVztZQUM1RSxDQUFDLENBQUM7Z0JBQ0UsaUJBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7b0JBQy9CLFdBQVcsRUFBRSxXQUFXLENBQUMsV0FBVztvQkFDcEMsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCLENBQUM7YUFDSDtZQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENB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LENBQUMsQ0FBQztZQUVILE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUM7UUFFTSxhQUFhLENBQUMsSUFBSTtZQUN2QixPQUFPLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLE9BQU8sSUFBSSxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksS0FBSyxhQUFhLENBQUM7UUFDNUYsQ0FBQztRQUVPLHVCQUF1QixDQUFDLElBQVk7WUFFMUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdkUsTUFBTSxPQUFPLEdBQUcsb0dBQW9HLElBQUksR0FBRyxDQUFDO2dCQUM1SCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7YUFDdkM7UUFDSCxDQUFDO1FBRU8scUJBQXFCLENBQUMsSUFBWTtZQUV4QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3BCLE1BQU0sT0FBTyxHQUFHLGtDQUFrQyxJQUFJLEdBQUcsQ0FBQztnQkFDMUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQ3ZDO1FBQ0gsQ0FBQztLQUNGO0lBMVRELDBCQTBUQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFkYXB0ZXJzIGZyb20gXCJAZGF0YWZvcm0vY29yZS9hZGFwdGVyc1wiO1xuaW1wb3J0IHsgQUNvbmZpZywgQUNvbnRleHRhYmxlLCBBc3NlcnRpb24gfSBmcm9tIFwiQGRhdGFmb3JtL2NvcmUvYXNzZXJ0aW9uXCI7XG5pbXBvcnQgeyBPQ29uZmlnLCBPQ29udGV4dGFibGUsIE9wZXJhdGlvbiB9IGZyb20gXCJAZGF0YWZvcm0vY29yZS9vcGVyYXRpb25cIjtcbmltcG9ydCAqIGFzIHRhYmxlIGZyb20gXCJAZGF0YWZvcm0vY29yZS90YWJsZVwiO1xuaW1wb3J0ICogYXMgdGVzdCBmcm9tIFwiQGRhdGFmb3JtL2NvcmUvdGVzdFwiO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIkBkYXRhZm9ybS9jb3JlL3V0aWxzXCI7XG5pbXBvcnQgeyBkYXRhZm9ybSB9IGZyb20gXCJAZGF0YWZvcm0vcHJvdG9zXCI7XG5cbmludGVyZmFjZSBJQWN0aW9uUHJvdG8ge1xuICBuYW1lPzogc3RyaW5nO1xuICBmaWxlTmFtZT86IHN0cmluZztcbiAgZGVwZW5kZW5jaWVzPzogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJU3FseENvbmZpZyBleHRlbmRzIHRhYmxlLlRDb25maWcsIEFDb25maWcsIE9Db25maWcsIHRlc3QuVENvbmZpZyB7XG4gIHR5cGU6IFwidmlld1wiIHwgXCJ0YWJsZVwiIHwgXCJpbmxpbmVcIiB8IFwiaW5jcmVtZW50YWxcIiB8IFwiYXNzZXJ0aW9uXCIgfCBcIm9wZXJhdGlvbnNcIiB8IFwidGVzdFwiO1xuICBzY2hlbWE/OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29sdW1uc0Rlc2NyaXB0b3Ige1xuICBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgSVJlY29yZERlc2NyaXB0b3I7XG59XG5cbmludGVyZmFjZSBJUmVjb3JkRGVzY3JpcHRvciB7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjb2x1bW5zPzogSUNvbHVtbnNEZXNjcmlwdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9Db2x1bW5Qcm90b0FycmF5KGNvbHVtbnM6IElDb2x1bW5zRGVzY3JpcHRvcik6IGRhdGFmb3JtLklDb2x1bW5EZXNjcmlwdG9yW10ge1xuICByZXR1cm4gdXRpbHMuZmxhdHRlbihcbiAgICBPYmplY3Qua2V5cyhjb2x1bW5zKS5tYXAoY29sdW1uID0+IG1hcENvbHVtbkRlc2NyaXB0aW9uVG9Qcm90byhbY29sdW1uXSwgY29sdW1uc1tjb2x1bW5dKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gbWFwQ29sdW1uRGVzY3JpcHRpb25Ub1Byb3RvKFxuICBjdXJyZW50UGF0aDogc3RyaW5nW10sXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBJUmVjb3JkRGVzY3JpcHRvclxuKTogZGF0YWZvcm0uSUNvbHVtbkRlc2NyaXB0b3JbXSB7XG4gIGlmICh0eXBlb2YgZGVzY3JpcHRpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gW1xuICAgICAgZGF0YWZvcm0uQ29sdW1uRGVzY3JpcHRvci5jcmVhdGUoe1xuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgcGF0aDogY3VycmVudFBhdGhcbiAgICAgIH0pXG4gICAgXTtcbiAgfVxuICBjb25zdCBjb2x1bW5EZXNjcmlwdG9yOiBkYXRhZm9ybS5JQ29sdW1uRGVzY3JpcHRvcltdID0gZGVzY3JpcHRpb24uZGVzY3JpcHRpb25cbiAgICA/IFtcbiAgICAgICAgZGF0YWZvcm0uQ29sdW1uRGVzY3JpcHRvci5jcmVhdGUoe1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbi5kZXNjcmlwdGlvbixcbiAgICAgICAgICBwYXRoOiBjdXJyZW50UGF0aFxuICAgICAgICB9KVxuICAgICAgXVxuICAgIDogW107XG4gIGNvbnN0IG5lc3RlZENvbHVtbnMgPSBkZXNjcmlwdGlvbi5jb2x1bW5zID8gT2JqZWN0LmtleXMoZGVzY3JpcHRpb24uY29sdW1ucykgOiBbXTtcbiAgcmV0dXJuIGNvbHVtbkRlc2NyaXB0b3IuY29uY2F0KFxuICAgIHV0aWxzLmZsYXR0ZW4oXG4gICAgICBuZXN0ZWRDb2x1bW5zLm1hcChuZXN0ZWRDb2x1bW4gPT5cbiAgICAgICAgbWFwQ29sdW1uRGVzY3JpcHRpb25Ub1Byb3RvKFxuICAgICAgICAgIGN1cnJlbnRQYXRoLmNvbmNhdChbbmVzdGVkQ29sdW1uXSksXG4gICAgICAgICAgZGVzY3JpcHRpb24uY29sdW1uc1tuZXN0ZWRDb2x1bW5dXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBjbGFzcyBTZXNzaW9uIHtcbiAgcHVibGljIHJvb3REaXI6IHN0cmluZztcblxuICBwdWJsaWMgY29uZmlnOiBkYXRhZm9ybS5JUHJvamVjdENvbmZpZztcblxuICBwdWJsaWMgdGFibGVzOiB7IFtuYW1lOiBzdHJpbmddOiB0YWJsZS5UYWJsZSB9O1xuICBwdWJsaWMgb3BlcmF0aW9uczogeyBbbmFtZTogc3RyaW5nXTogT3BlcmF0aW9uIH07XG4gIHB1YmxpYyBhc3NlcnRpb25zOiB7IFtuYW1lOiBzdHJpbmddOiBBc3NlcnRpb24gfTtcbiAgcHVibGljIHRlc3RzOiB7IFtuYW1lOiBzdHJpbmddOiB0ZXN0LlRlc3QgfTtcblxuICBwdWJsaWMgZ3JhcGhFcnJvcnM6IGRhdGFmb3JtLklHcmFwaEVycm9ycztcblxuICBjb25zdHJ1Y3Rvcihyb290RGlyOiBzdHJpbmcsIHByb2plY3RDb25maWc/OiBkYXRhZm9ybS5JUHJvamVjdENvbmZpZykge1xuICAgIHRoaXMuaW5pdChyb290RGlyLCBwcm9qZWN0Q29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0KHJvb3REaXI6IHN0cmluZywgcHJvamVjdENvbmZpZz86IGRhdGFmb3JtLklQcm9qZWN0Q29uZmlnKSB7XG4gICAgdGhpcy5yb290RGlyID0gcm9vdERpcjtcbiAgICB0aGlzLmNvbmZpZyA9IHByb2plY3RDb25maWcgfHwge1xuICAgICAgZGVmYXVsdFNjaGVtYTogXCJkYXRhZm9ybVwiLFxuICAgICAgYXNzZXJ0aW9uU2NoZW1hOiBcImRhdGFmb3JtX2Fzc2VydGlvbnNcIlxuICAgIH07XG4gICAgdGhpcy50YWJsZXMgPSB7fTtcbiAgICB0aGlzLm9wZXJhdGlvbnMgPSB7fTtcbiAgICB0aGlzLmFzc2VydGlvbnMgPSB7fTtcbiAgICB0aGlzLnRlc3RzID0ge307XG4gICAgdGhpcy5ncmFwaEVycm9ycyA9IHsgY29tcGlsYXRpb25FcnJvcnM6IFtdIH07XG4gIH1cblxuICBwdWJsaWMgYWRhcHRlcigpOiBhZGFwdGVycy5JQWRhcHRlciB7XG4gICAgcmV0dXJuIGFkYXB0ZXJzLmNyZWF0ZSh0aGlzLmNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgc3FseEFjdGlvbihhY3Rpb25PcHRpb25zOiB7XG4gICAgc3FseENvbmZpZzogSVNxbHhDb25maWc7XG4gICAgc3FsU3RhdGVtZW50Q291bnQ6IG51bWJlcjtcbiAgICBoYXNJbmNyZW1lbnRhbDogYm9vbGVhbjtcbiAgICBoYXNQcmVPcGVyYXRpb25zOiBib29sZWFuO1xuICAgIGhhc1Bvc3RPcGVyYXRpb25zOiBib29sZWFuO1xuICAgIGhhc0lucHV0czogYm9vbGVhbjtcbiAgfSkge1xuICAgIGlmIChhY3Rpb25PcHRpb25zLnNxbFN0YXRlbWVudENvdW50ID4gMSAmJiBhY3Rpb25PcHRpb25zLnNxbHhDb25maWcudHlwZSAhPT0gXCJvcGVyYXRpb25zXCIpIHtcbiAgICAgIHRoaXMuY29tcGlsZUVycm9yKFxuICAgICAgICBcIkFjdGlvbnMgbWF5IG9ubHkgY29udGFpbiBtb3JlIHRoYW4gb25lIFNRTCBzdGF0ZW1lbnQgaWYgdGhleSBhcmUgb2YgdHlwZSAnb3BlcmF0aW9ucycuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy5oYXNPdXRwdXQgJiZcbiAgICAgIChhY3Rpb25PcHRpb25zLnNxbHhDb25maWcudHlwZSAhPT0gXCJvcGVyYXRpb25zXCIgfHxcbiAgICAgICAgdGhpcy5pc0RhdGFzZXRUeXBlKGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy50eXBlKSlcbiAgICApIHtcbiAgICAgIHRoaXMuY29tcGlsZUVycm9yKFxuICAgICAgICBcIkFjdGlvbnMgbWF5IG9ubHkgc3BlY2lmeSAnaGFzT3V0cHV0OiB0cnVlJyBpZiB0aGV5IGFyZSBvZiB0eXBlICdvcGVyYXRpb25zJyBvciBjcmVhdGUgYSBkYXRhc2V0LlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBhY3Rpb25PcHRpb25zLnNxbHhDb25maWcuY29sdW1ucyAmJlxuICAgICAgISh0aGlzLmlzRGF0YXNldFR5cGUoYWN0aW9uT3B0aW9ucy5zcWx4Q29uZmlnLnR5cGUpIHx8IGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy5oYXNPdXRwdXQpXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbXBpbGVFcnJvcihcIkFjdGlvbnMgbWF5IG9ubHkgc3BlY2lmeSAnY29sdW1ucycgaWYgdGhleSBjcmVhdGUgYSBkYXRhc2V0LlwiKTtcbiAgICB9XG4gICAgaWYgKGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy5wcm90ZWN0ZWQgJiYgYWN0aW9uT3B0aW9ucy5zcWx4Q29uZmlnLnR5cGUgIT09IFwiaW5jcmVtZW50YWxcIikge1xuICAgICAgdGhpcy5jb21waWxlRXJyb3IoXG4gICAgICAgIFwiQWN0aW9ucyBtYXkgb25seSBzcGVjaWZ5ICdwcm90ZWN0ZWQ6IHRydWUnIGlmIHRoZXkgYXJlIG9mIHR5cGUgJ2luY3JlbWVudGFsJy5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFjdGlvbk9wdGlvbnMuaGFzSW5jcmVtZW50YWwgJiYgYWN0aW9uT3B0aW9ucy5zcWx4Q29uZmlnLnR5cGUgIT09IFwiaW5jcmVtZW50YWxcIikge1xuICAgICAgdGhpcy5jb21waWxlRXJyb3IoXG4gICAgICAgIFwiQWN0aW9ucyBtYXkgb25seSBpbmNsdWRlIGluY3JlbWVudGFsX3doZXJlIGlmIHRoZXkgYXJlIG9mIHR5cGUgJ2luY3JlbWVudGFsJy5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy5kYXRhc2V0ICYmIGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy50eXBlICE9PSBcInRlc3RcIikge1xuICAgICAgdGhpcy5jb21waWxlRXJyb3IoXCJBY3Rpb25zIG1heSBvbmx5IHNwZWNpZnkgJ2RhdGFzZXQnIGlmIHRoZXkgYXJlIG9mIHR5cGUgJ3Rlc3QnLlwiKTtcbiAgICB9XG4gICAgaWYgKCFhY3Rpb25PcHRpb25zLnNxbHhDb25maWcuZGF0YXNldCAmJiBhY3Rpb25PcHRpb25zLnNxbHhDb25maWcudHlwZSA9PT0gXCJ0ZXN0XCIpIHtcbiAgICAgIHRoaXMuY29tcGlsZUVycm9yKFwiQWN0aW9ucyBtdXN0IHNwZWNpZnkgJ2RhdGFzZXQnIGlmIHRoZXkgYXJlIG9mIHR5cGUgJ3Rlc3QnLlwiKTtcbiAgICB9XG4gICAgaWYgKGFjdGlvbk9wdGlvbnMuaGFzSW5wdXRzICYmIGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy50eXBlICE9PSBcInRlc3RcIikge1xuICAgICAgdGhpcy5jb21waWxlRXJyb3IoXCJBY3Rpb25zIG1heSBvbmx5IGluY2x1ZGUgaW5wdXQgYmxvY2tzIGlmIHRoZXkgYXJlIG9mIHR5cGUgJ3Rlc3QnLlwiKTtcbiAgICB9XG4gICAgaWYgKGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy5kaXNhYmxlZCAmJiAhdGhpcy5pc0RhdGFzZXRUeXBlKGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy50eXBlKSkge1xuICAgICAgdGhpcy5jb21waWxlRXJyb3IoXCJBY3Rpb25zIG1heSBvbmx5IHNwZWNpZnkgJ2Rpc2FibGVkOiB0cnVlJyBpZiB0aGV5IGNyZWF0ZSBhIGRhdGFzZXQuXCIpO1xuICAgIH1cbiAgICBpZiAoYWN0aW9uT3B0aW9ucy5zcWx4Q29uZmlnLnJlZHNoaWZ0ICYmICF0aGlzLmlzRGF0YXNldFR5cGUoYWN0aW9uT3B0aW9ucy5zcWx4Q29uZmlnLnR5cGUpKSB7XG4gICAgICB0aGlzLmNvbXBpbGVFcnJvcihcIkFjdGlvbnMgbWF5IG9ubHkgc3BlY2lmeSAncmVkc2hpZnQ6IHsgLi4uIH0nIGlmIHRoZXkgY3JlYXRlIGEgZGF0YXNldC5cIik7XG4gICAgfVxuICAgIGlmIChhY3Rpb25PcHRpb25zLnNxbHhDb25maWcuYmlncXVlcnkgJiYgIXRoaXMuaXNEYXRhc2V0VHlwZShhY3Rpb25PcHRpb25zLnNxbHhDb25maWcudHlwZSkpIHtcbiAgICAgIHRoaXMuY29tcGlsZUVycm9yKFwiQWN0aW9ucyBtYXkgb25seSBzcGVjaWZ5ICdiaWdxdWVyeTogeyAuLi4gfScgaWYgdGhleSBjcmVhdGUgYSBkYXRhc2V0LlwiKTtcbiAgICB9XG4gICAgaWYgKGFjdGlvbk9wdGlvbnMuaGFzUHJlT3BlcmF0aW9ucyAmJiAhdGhpcy5pc0RhdGFzZXRUeXBlKGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy50eXBlKSkge1xuICAgICAgdGhpcy5jb21waWxlRXJyb3IoXCJBY3Rpb25zIG1heSBvbmx5IGluY2x1ZGUgcHJlX29wZXJhdGlvbnMgaWYgdGhleSBjcmVhdGUgYSBkYXRhc2V0LlwiKTtcbiAgICB9XG4gICAgaWYgKGFjdGlvbk9wdGlvbnMuaGFzUG9zdE9wZXJhdGlvbnMgJiYgIXRoaXMuaXNEYXRhc2V0VHlwZShhY3Rpb25PcHRpb25zLnNxbHhDb25maWcudHlwZSkpIHtcbiAgICAgIHRoaXMuY29tcGlsZUVycm9yKFwiQWN0aW9ucyBtYXkgb25seSBpbmNsdWRlIHBvc3Rfb3BlcmF0aW9ucyBpZiB0aGV5IGNyZWF0ZSBhIGRhdGFzZXQuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGlvbiA9ICgoKSA9PiB7XG4gICAgICBzd2l0Y2ggKGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJ2aWV3XCI6XG4gICAgICAgIGNhc2UgXCJ0YWJsZVwiOlxuICAgICAgICBjYXNlIFwiaW5saW5lXCI6XG4gICAgICAgIGNhc2UgXCJpbmNyZW1lbnRhbFwiOlxuICAgICAgICAgIHJldHVybiB0aGlzLnB1Ymxpc2goYWN0aW9uT3B0aW9ucy5zcWx4Q29uZmlnLm5hbWUpO1xuICAgICAgICBjYXNlIFwiYXNzZXJ0aW9uXCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0KGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy5uYW1lKTtcbiAgICAgICAgY2FzZSBcIm9wZXJhdGlvbnNcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5vcGVyYXRlKGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy5uYW1lKTtcbiAgICAgICAgY2FzZSBcInRlc3RcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy50ZXN0KGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy5uYW1lKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBhY3Rpb24gdHlwZTogJHthY3Rpb25PcHRpb25zLnNxbHhDb25maWcudHlwZX1gKTtcbiAgICAgIH1cbiAgICB9KSgpLmNvbmZpZyhhY3Rpb25PcHRpb25zLnNxbHhDb25maWcpO1xuXG4gICAgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIHRlc3QuVGVzdCkge1xuICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoIShhY3Rpb24gaW5zdGFuY2VvZiBPcGVyYXRpb24pIHx8IGFjdGlvbi5wcm90by5oYXNPdXRwdXQpIHtcbiAgICAgIGNvbnN0IGZpbmFsU2NoZW1hID1cbiAgICAgICAgYWN0aW9uT3B0aW9ucy5zcWx4Q29uZmlnLnNjaGVtYSB8fFxuICAgICAgICAoYWN0aW9uT3B0aW9ucy5zcWx4Q29uZmlnLnR5cGUgPT09IFwiYXNzZXJ0aW9uXCJcbiAgICAgICAgICA/IHRoaXMuY29uZmlnLmFzc2VydGlvblNjaGVtYVxuICAgICAgICAgIDogdGhpcy5jb25maWcuZGVmYXVsdFNjaGVtYSk7XG4gICAgICBhY3Rpb24ucHJvdG8udGFyZ2V0ID0gdGhpcy50YXJnZXQoYWN0aW9uT3B0aW9ucy5zcWx4Q29uZmlnLm5hbWUsIGZpbmFsU2NoZW1hKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIGFjdGlvbi5wcm90by50YXJnZXQ7XG4gICAgfVxuICAgIHJldHVybiBhY3Rpb247XG4gIH1cblxuICBwdWJsaWMgdGFyZ2V0KHRhcmdldDogc3RyaW5nLCBkZWZhdWx0U2NoZW1hPzogc3RyaW5nKTogZGF0YWZvcm0uSVRhcmdldCB7XG4gICAgY29uc3Qgc3VmZml4ID0gISF0aGlzLmNvbmZpZy5zY2hlbWFTdWZmaXggPyBgXyR7dGhpcy5jb25maWcuc2NoZW1hU3VmZml4fWAgOiBcIlwiO1xuXG4gICAgaWYgKHRhcmdldC5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICAgIGNvbnN0IFtzY2hlbWEsIG5hbWVdID0gdGFyZ2V0LnNwbGl0KFwiLlwiKTtcbiAgICAgIHJldHVybiBkYXRhZm9ybS5UYXJnZXQuY3JlYXRlKHsgbmFtZSwgc2NoZW1hOiBzY2hlbWEgKyBzdWZmaXggfSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhZm9ybS5UYXJnZXQuY3JlYXRlKHtcbiAgICAgIG5hbWU6IHRhcmdldCxcbiAgICAgIHNjaGVtYTogKGRlZmF1bHRTY2hlbWEgfHwgdGhpcy5jb25maWcuZGVmYXVsdFNjaGVtYSkgKyBzdWZmaXhcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZXNvbHZlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlc1tuYW1lXTtcbiAgICBjb25zdCBvcGVyYXRpb24gPVxuICAgICAgISF0aGlzLm9wZXJhdGlvbnNbbmFtZV0gJiYgdGhpcy5vcGVyYXRpb25zW25hbWVdLmhhc091dHB1dCAmJiB0aGlzLm9wZXJhdGlvbnNbbmFtZV07XG5cbiAgICBpZiAodGFibGUgJiYgdGFibGUucHJvdG8udHlwZSA9PT0gXCJpbmxpbmVcIikge1xuICAgICAgLy8gVE9ETzogUHJldHR5IHN1cmUgdGhpcyBpcyBicm9rZW4gYXMgdGhlIHByb3RvLnF1ZXJ5IHZhbHVlIG1heSBub3RcbiAgICAgIC8vIGJlIHNldCB5ZXQgYXMgaXQgaGFwcGVucyBkdXJpbmcgY29tcGlsYXRpb24uIFdlIHNob3VsZCBldmFsdXRlIHRoZSBxdWVyeSBoZXJlLlxuICAgICAgcmV0dXJuIGAoJHt0YWJsZS5wcm90by5xdWVyeX0pYDtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhc2V0ID0gdGFibGUgfHwgb3BlcmF0aW9uO1xuICAgIC8vIFRPRE86IFdlIGZhbGwgYmFjayB0byB1c2luZyB0aGUgcGxhaW4gJ25hbWUnIGhlcmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggcHJvamVjdHMgdGhhdCB1c2UgLnNxbCBmaWxlcy5cbiAgICAvLyBJbiB0aGVzZSBwcm9qZWN0cywgdGhpcyBzZXNzaW9uIG1heSBub3Qga25vdyBhYm91dCBhbGwgYWN0aW9ucyAoeWV0KSwgYW5kIHRodXMgd2UgbmVlZCB0byBmYWxsIGJhY2sgdG8gYXNzdW1pbmdcbiAgICAvLyB0aGF0IHRoZSB0YXJnZXQgKndpbGwqIGV4aXN0IGluIHRoZSBmdXR1cmUuIE9uY2Ugd2UgYnJlYWsgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCAuc3FsIGZpbGVzLCB3ZSBzaG91bGQgcmVtb3ZlXG4gICAgLy8gdGhlIGNvZGUgdGhhdCBjYWxscyAndGhpcy50YXJnZXQoLi4uKScgYmVsb3csIGFuZCBhcHBlbmQgYSBjb21waWxlIGVycm9yIGlmIHdlIGNhbid0IGZpbmQgYSBkYXRhc2V0IHdob3NlIG5hbWUgaXMgJ25hbWUnLlxuICAgIGNvbnN0IHRhcmdldCA9IGRhdGFzZXQgPyBkYXRhc2V0LnByb3RvLnRhcmdldCA6IHRoaXMudGFyZ2V0KG5hbWUpO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIoKS5yZXNvbHZlVGFyZ2V0KHRhcmdldCk7XG4gIH1cblxuICBwdWJsaWMgb3BlcmF0ZShuYW1lOiBzdHJpbmcsIHF1ZXJpZXM/OiBPQ29udGV4dGFibGU8c3RyaW5nIHwgc3RyaW5nW10+KTogT3BlcmF0aW9uIHtcbiAgICB0aGlzLmNoZWNrQWN0aW9uTmFtZUlzVW51c2VkKG5hbWUpO1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IG5ldyBPcGVyYXRpb24oKTtcbiAgICBvcGVyYXRpb24uc2Vzc2lvbiA9IHRoaXM7XG4gICAgb3BlcmF0aW9uLnByb3RvLm5hbWUgPSBuYW1lO1xuICAgIG9wZXJhdGlvbi5wcm90by50YXJnZXQgPSB0aGlzLnRhcmdldChuYW1lKTtcbiAgICBpZiAocXVlcmllcykge1xuICAgICAgb3BlcmF0aW9uLnF1ZXJpZXMocXVlcmllcyk7XG4gICAgfVxuICAgIG9wZXJhdGlvbi5wcm90by5maWxlTmFtZSA9IHV0aWxzLmdldENhbGxlckZpbGUodGhpcy5yb290RGlyKTtcbiAgICAvLyBBZGQgaXQgdG8gZ2xvYmFsIGluZGV4LlxuICAgIHRoaXMub3BlcmF0aW9uc1tuYW1lXSA9IG9wZXJhdGlvbjtcbiAgICByZXR1cm4gb3BlcmF0aW9uO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2goXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHF1ZXJ5T3JDb25maWc/OiB0YWJsZS5UQ29udGV4dGFibGU8c3RyaW5nPiB8IHRhYmxlLlRDb25maWdcbiAgKTogdGFibGUuVGFibGUge1xuICAgIHRoaXMuY2hlY2tBY3Rpb25OYW1lSXNVbnVzZWQobmFtZSk7XG4gICAgY29uc3QgbmV3VGFibGUgPSBuZXcgdGFibGUuVGFibGUoKTtcbiAgICBuZXdUYWJsZS5zZXNzaW9uID0gdGhpcztcbiAgICBuZXdUYWJsZS5wcm90by5uYW1lID0gbmFtZTtcbiAgICBuZXdUYWJsZS5wcm90by50YXJnZXQgPSB0aGlzLnRhcmdldChuYW1lKTtcbiAgICBpZiAoISFxdWVyeU9yQ29uZmlnKSB7XG4gICAgICBpZiAodHlwZW9mIHF1ZXJ5T3JDb25maWcgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgbmV3VGFibGUuY29uZmlnKHF1ZXJ5T3JDb25maWcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3VGFibGUucXVlcnkocXVlcnlPckNvbmZpZyk7XG4gICAgICB9XG4gICAgfVxuICAgIG5ld1RhYmxlLnByb3RvLmZpbGVOYW1lID0gdXRpbHMuZ2V0Q2FsbGVyRmlsZSh0aGlzLnJvb3REaXIpO1xuICAgIC8vIEFkZCBpdCB0byBnbG9iYWwgaW5kZXguXG4gICAgdGhpcy50YWJsZXNbbmFtZV0gPSBuZXdUYWJsZTtcbiAgICByZXR1cm4gbmV3VGFibGU7XG4gIH1cblxuICBwdWJsaWMgYXNzZXJ0KG5hbWU6IHN0cmluZywgcXVlcnk/OiBBQ29udGV4dGFibGU8c3RyaW5nPik6IEFzc2VydGlvbiB7XG4gICAgdGhpcy5jaGVja0FjdGlvbk5hbWVJc1VudXNlZChuYW1lKTtcbiAgICBjb25zdCBhc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKCk7XG4gICAgYXNzZXJ0aW9uLnNlc3Npb24gPSB0aGlzO1xuICAgIGFzc2VydGlvbi5wcm90by5uYW1lID0gbmFtZTtcbiAgICBhc3NlcnRpb24ucHJvdG8udGFyZ2V0ID0gdGhpcy50YXJnZXQobmFtZSwgdGhpcy5jb25maWcuYXNzZXJ0aW9uU2NoZW1hKTtcbiAgICBpZiAocXVlcnkpIHtcbiAgICAgIGFzc2VydGlvbi5xdWVyeShxdWVyeSk7XG4gICAgfVxuICAgIGFzc2VydGlvbi5wcm90by5maWxlTmFtZSA9IHV0aWxzLmdldENhbGxlckZpbGUodGhpcy5yb290RGlyKTtcbiAgICAvLyBBZGQgaXQgdG8gZ2xvYmFsIGluZGV4LlxuICAgIHRoaXMuYXNzZXJ0aW9uc1tuYW1lXSA9IGFzc2VydGlvbjtcbiAgICByZXR1cm4gYXNzZXJ0aW9uO1xuICB9XG5cbiAgcHVibGljIHRlc3QobmFtZTogc3RyaW5nKTogdGVzdC5UZXN0IHtcbiAgICB0aGlzLmNoZWNrVGVzdE5hbWVJc1VudXNlZChuYW1lKTtcbiAgICBjb25zdCBuZXdUZXN0ID0gbmV3IHRlc3QuVGVzdCgpO1xuICAgIG5ld1Rlc3Quc2Vzc2lvbiA9IHRoaXM7XG4gICAgbmV3VGVzdC5wcm90by5uYW1lID0gbmFtZTtcbiAgICBuZXdUZXN0LnByb3RvLmZpbGVOYW1lID0gdXRpbHMuZ2V0Q2FsbGVyRmlsZSh0aGlzLnJvb3REaXIpO1xuICAgIC8vIEFkZCBpdCB0byBnbG9iYWwgaW5kZXguXG4gICAgdGhpcy50ZXN0c1tuYW1lXSA9IG5ld1Rlc3Q7XG4gICAgcmV0dXJuIG5ld1Rlc3Q7XG4gIH1cblxuICBwdWJsaWMgY29tcGlsZUVycm9yKGVycjogRXJyb3IgfCBzdHJpbmcsIHBhdGg/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGggfHwgdXRpbHMuZ2V0Q2FsbGVyRmlsZSh0aGlzLnJvb3REaXIpIHx8IF9fZmlsZW5hbWU7XG5cbiAgICBjb25zdCBjb21waWxlRXJyb3IgPSBkYXRhZm9ybS5Db21waWxhdGlvbkVycm9yLmNyZWF0ZSh7XG4gICAgICBmaWxlTmFtZVxuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgZXJyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBjb21waWxlRXJyb3IubWVzc2FnZSA9IGVycjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tcGlsZUVycm9yLm1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICAgIGNvbXBpbGVFcnJvci5zdGFjayA9IGVyci5zdGFjaztcbiAgICB9XG4gICAgdGhpcy5ncmFwaEVycm9ycy5jb21waWxhdGlvbkVycm9ycy5wdXNoKGNvbXBpbGVFcnJvcik7XG4gIH1cblxuICBwdWJsaWMgY29tcGlsZUdyYXBoQ2h1bms8VD4ocGFydDoge1xuICAgIFtuYW1lOiBzdHJpbmddOiB7IHByb3RvOiBJQWN0aW9uUHJvdG87IGNvbXBpbGUoKTogVCB9O1xuICB9KTogVFtdIHtcbiAgICBjb25zdCBjb21waWxlZENodW5rczogVFtdID0gW107XG5cbiAgICBPYmplY3Qua2V5cyhwYXJ0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb21waWxlZENodW5rID0gcGFydFtrZXldLmNvbXBpbGUoKTtcbiAgICAgICAgY29tcGlsZWRDaHVua3MucHVzaChjb21waWxlZENodW5rKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5jb21waWxlRXJyb3IoZSwgcGFydFtrZXldLnByb3RvLmZpbGVOYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjb21waWxlZENodW5rcztcbiAgfVxuXG4gIHB1YmxpYyBjb21waWxlKCk6IGRhdGFmb3JtLklDb21waWxlZEdyYXBoIHtcbiAgICBjb25zdCBjb21waWxlZEdyYXBoID0gZGF0YWZvcm0uQ29tcGlsZWRHcmFwaC5jcmVhdGUoe1xuICAgICAgcHJvamVjdENvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICB0YWJsZXM6IHRoaXMuY29tcGlsZUdyYXBoQ2h1bmsodGhpcy50YWJsZXMpLFxuICAgICAgb3BlcmF0aW9uczogdGhpcy5jb21waWxlR3JhcGhDaHVuayh0aGlzLm9wZXJhdGlvbnMpLFxuICAgICAgYXNzZXJ0aW9uczogdGhpcy5jb21waWxlR3JhcGhDaHVuayh0aGlzLmFzc2VydGlvbnMpLFxuICAgICAgdGVzdHM6IHRoaXMuY29tcGlsZUdyYXBoQ2h1bmsodGhpcy50ZXN0cyksXG4gICAgICBncmFwaEVycm9yczogdGhpcy5ncmFwaEVycm9yc1xuICAgIH0pO1xuXG4gICAgLy8gRXhwYW5kIGFjdGlvbiBkZXBlbmRlbmN5IHdpbGRjYXJkcy5cblxuICAgIGNvbnN0IGFsbEFjdGlvbnM6IElBY3Rpb25Qcm90b1tdID0gW10uY29uY2F0KFxuICAgICAgY29tcGlsZWRHcmFwaC50YWJsZXMsXG4gICAgICBjb21waWxlZEdyYXBoLmFzc2VydGlvbnMsXG4gICAgICBjb21waWxlZEdyYXBoLm9wZXJhdGlvbnNcbiAgICApO1xuICAgIGNvbnN0IGFsbEFjdGlvbk5hbWVzID0gYWxsQWN0aW9ucy5tYXAoYWN0aW9uID0+IGFjdGlvbi5uYW1lKTtcblxuICAgIGFsbEFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgICAgY29uc3QgdW5pcXVlRGVwZW5kZW5jaWVzOiB7IFtkZXBlbmRlbmN5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcbiAgICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IGFjdGlvbi5kZXBlbmRlbmNpZXMgfHwgW107XG4gICAgICAvLyBBZGQgbm9uLXdpbGRjYXJkIGRlcHMgbm9ybWFsbHkuXG4gICAgICBkZXBlbmRlbmNpZXNcbiAgICAgICAgLmZpbHRlcihkZXBlbmRlbmN5ID0+ICFkZXBlbmRlbmN5LmluY2x1ZGVzKFwiKlwiKSlcbiAgICAgICAgLmZvckVhY2goZGVwZW5kZW5jeSA9PiAodW5pcXVlRGVwZW5kZW5jaWVzW2RlcGVuZGVuY3ldID0gdHJ1ZSkpO1xuICAgICAgLy8gTWF0Y2ggd2lsZGNhcmQgZGVwcyBhZ2FpbnN0IGFsbCBhY3Rpb24gbmFtZXMuXG4gICAgICB1dGlsc1xuICAgICAgICAubWF0Y2hQYXR0ZXJucyhkZXBlbmRlbmNpZXMuZmlsdGVyKGQgPT4gZC5pbmNsdWRlcyhcIipcIikpLCBhbGxBY3Rpb25OYW1lcylcbiAgICAgICAgLmZvckVhY2goZGVwZW5kZW5jeSA9PiAodW5pcXVlRGVwZW5kZW5jaWVzW2RlcGVuZGVuY3ldID0gdHJ1ZSkpO1xuICAgICAgYWN0aW9uLmRlcGVuZGVuY2llcyA9IE9iamVjdC5rZXlzKHVuaXF1ZURlcGVuZGVuY2llcyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29tcGlsZWRHcmFwaDtcbiAgfVxuXG4gIHB1YmxpYyBpc0RhdGFzZXRUeXBlKHR5cGUpIHtcbiAgICByZXR1cm4gdHlwZSA9PT0gXCJ2aWV3XCIgfHwgdHlwZSA9PT0gXCJ0YWJsZVwiIHx8IHR5cGUgPT09IFwiaW5saW5lXCIgfHwgdHlwZSA9PT0gXCJpbmNyZW1lbnRhbFwiO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0FjdGlvbk5hbWVJc1VudXNlZChuYW1lOiBzdHJpbmcpIHtcbiAgICAvLyBDaGVjayBmb3IgZHVwbGljYXRlIG5hbWVzXG4gICAgaWYgKHRoaXMudGFibGVzW25hbWVdIHx8IHRoaXMub3BlcmF0aW9uc1tuYW1lXSB8fCB0aGlzLmFzc2VydGlvbnNbbmFtZV0pIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgRHVwbGljYXRlIGFjdGlvbiBuYW1lIGRldGVjdGVkLiBOYW1lcyBtdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgdGFibGVzLCBhc3NlcnRpb25zLCBhbmQgb3BlcmF0aW9uczogXCIke25hbWV9XCJgO1xuICAgICAgdGhpcy5jb21waWxlRXJyb3IobmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrVGVzdE5hbWVJc1VudXNlZChuYW1lOiBzdHJpbmcpIHtcbiAgICAvLyBDaGVjayBmb3IgZHVwbGljYXRlIG5hbWVzXG4gICAgaWYgKHRoaXMudGVzdHNbbmFtZV0pIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgRHVwbGljYXRlIHRlc3QgbmFtZSBkZXRlY3RlZDogXCIke25hbWV9XCJgO1xuICAgICAgdGhpcy5jb21waWxlRXJyb3IobmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc2Vzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQUFBLDBEQUFvRDtJQUNwRCx3REFBNEU7SUFDNUUsd0RBQTRFO0lBQzVFLDhDQUE4QztJQUM5Qyw0Q0FBNEM7SUFDNUMsOENBQThDO0lBQzlDLDZDQUE0QztJQXVCNUMsU0FBZ0IscUJBQXFCLENBQUMsT0FBMkI7UUFDL0QsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLDJCQUEyQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FDM0YsQ0FBQztJQUNKLENBQUM7SUFKRCxzREFJQztJQUVELFNBQVMsMkJBQTJCLENBQ2xDLFdBQXFCLEVBQ3JCLFdBQXVDO1FBRXZDLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFO1lBQ25DLE9BQU87Z0JBQ0wsaUJBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7b0JBQy9CLFdBQVc7b0JBQ1gsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCLENBQUM7YUFDSCxDQUFDO1NBQ0g7UUFDRCxNQUFNLGdCQUFnQixHQUFpQyxXQUFXLENBQUMsV0FBVztZQUM1RSxDQUFDLENBQUM7Z0JBQ0UsaUJBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7b0JBQy9CLFdBQVcsRUFBRSxXQUFXLENBQUMsV0FBVztvQkFDcEMsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCLENBQUM7YUFDSDtZQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENB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QU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDbEUsTUFBTSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDeEQsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDO1FBRU0sYUFBYSxDQUFDLElBQUk7WUFDdkIsT0FBTyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxPQUFPLElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLEtBQUssYUFBYSxDQUFDO1FBQzVGLENBQUM7UUFFTyx1QkFBdUIsQ0FBQyxJQUFZO1lBRTFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3ZFLE1BQU0sT0FBTyxHQUFHLG9HQUFvRyxJQUFJLEdBQUcsQ0FBQztnQkFDNUgsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQ3ZDO1FBQ0gsQ0FBQztRQUVPLHFCQUFxQixDQUFDLElBQVk7WUFFeEMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNwQixNQUFNLE9BQU8sR0FBRyxrQ0FBa0MsSUFBSSxHQUFHLENBQUM7Z0JBQzFELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUN2QztRQUNILENBQUM7S0FDRjtJQWxVRCwwQkFrVUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhZGFwdGVycyBmcm9tIFwiQGRhdGFmb3JtL2NvcmUvYWRhcHRlcnNcIjtcbmltcG9ydCB7IEFDb25maWcsIEFDb250ZXh0YWJsZSwgQXNzZXJ0aW9uIH0gZnJvbSBcIkBkYXRhZm9ybS9jb3JlL2Fzc2VydGlvblwiO1xuaW1wb3J0IHsgT0NvbmZpZywgT0NvbnRleHRhYmxlLCBPcGVyYXRpb24gfSBmcm9tIFwiQGRhdGFmb3JtL2NvcmUvb3BlcmF0aW9uXCI7XG5pbXBvcnQgKiBhcyB0YWJsZSBmcm9tIFwiQGRhdGFmb3JtL2NvcmUvdGFibGVcIjtcbmltcG9ydCAqIGFzIHRlc3QgZnJvbSBcIkBkYXRhZm9ybS9jb3JlL3Rlc3RcIjtcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gXCJAZGF0YWZvcm0vY29yZS91dGlsc1wiO1xuaW1wb3J0IHsgZGF0YWZvcm0gfSBmcm9tIFwiQGRhdGFmb3JtL3Byb3Rvc1wiO1xuXG5pbnRlcmZhY2UgSUFjdGlvblByb3RvIHtcbiAgbmFtZT86IHN0cmluZztcbiAgZmlsZU5hbWU/OiBzdHJpbmc7XG4gIGRlcGVuZGVuY2llcz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSVNxbHhDb25maWcgZXh0ZW5kcyB0YWJsZS5UQ29uZmlnLCBBQ29uZmlnLCBPQ29uZmlnLCB0ZXN0LlRDb25maWcge1xuICB0eXBlOiBcInZpZXdcIiB8IFwidGFibGVcIiB8IFwiaW5saW5lXCIgfCBcImluY3JlbWVudGFsXCIgfCBcImFzc2VydGlvblwiIHwgXCJvcGVyYXRpb25zXCIgfCBcInRlc3RcIjtcbiAgc2NoZW1hPzogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbHVtbnNEZXNjcmlwdG9yIHtcbiAgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IElSZWNvcmREZXNjcmlwdG9yO1xufVxuXG5pbnRlcmZhY2UgSVJlY29yZERlc2NyaXB0b3Ige1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgY29sdW1ucz86IElDb2x1bW5zRGVzY3JpcHRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvQ29sdW1uUHJvdG9BcnJheShjb2x1bW5zOiBJQ29sdW1uc0Rlc2NyaXB0b3IpOiBkYXRhZm9ybS5JQ29sdW1uRGVzY3JpcHRvcltdIHtcbiAgcmV0dXJuIHV0aWxzLmZsYXR0ZW4oXG4gICAgT2JqZWN0LmtleXMoY29sdW1ucykubWFwKGNvbHVtbiA9PiBtYXBDb2x1bW5EZXNjcmlwdGlvblRvUHJvdG8oW2NvbHVtbl0sIGNvbHVtbnNbY29sdW1uXSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIG1hcENvbHVtbkRlc2NyaXB0aW9uVG9Qcm90byhcbiAgY3VycmVudFBhdGg6IHN0cmluZ1tdLFxuICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgSVJlY29yZERlc2NyaXB0b3Jcbik6IGRhdGFmb3JtLklDb2x1bW5EZXNjcmlwdG9yW10ge1xuICBpZiAodHlwZW9mIGRlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGRhdGFmb3JtLkNvbHVtbkRlc2NyaXB0b3IuY3JlYXRlKHtcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIHBhdGg6IGN1cnJlbnRQYXRoXG4gICAgICB9KVxuICAgIF07XG4gIH1cbiAgY29uc3QgY29sdW1uRGVzY3JpcHRvcjogZGF0YWZvcm0uSUNvbHVtbkRlc2NyaXB0b3JbXSA9IGRlc2NyaXB0aW9uLmRlc2NyaXB0aW9uXG4gICAgPyBbXG4gICAgICAgIGRhdGFmb3JtLkNvbHVtbkRlc2NyaXB0b3IuY3JlYXRlKHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24uZGVzY3JpcHRpb24sXG4gICAgICAgICAgcGF0aDogY3VycmVudFBhdGhcbiAgICAgICAgfSlcbiAgICAgIF1cbiAgICA6IFtdO1xuICBjb25zdCBuZXN0ZWRDb2x1bW5zID0gZGVzY3JpcHRpb24uY29sdW1ucyA/IE9iamVjdC5rZXlzKGRlc2NyaXB0aW9uLmNvbHVtbnMpIDogW107XG4gIHJldHVybiBjb2x1bW5EZXNjcmlwdG9yLmNvbmNhdChcbiAgICB1dGlscy5mbGF0dGVuKFxuICAgICAgbmVzdGVkQ29sdW1ucy5tYXAobmVzdGVkQ29sdW1uID0+XG4gICAgICAgIG1hcENvbHVtbkRlc2NyaXB0aW9uVG9Qcm90byhcbiAgICAgICAgICBjdXJyZW50UGF0aC5jb25jYXQoW25lc3RlZENvbHVtbl0pLFxuICAgICAgICAgIGRlc2NyaXB0aW9uLmNvbHVtbnNbbmVzdGVkQ29sdW1uXVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgY2xhc3MgU2Vzc2lvbiB7XG4gIHB1YmxpYyByb290RGlyOiBzdHJpbmc7XG5cbiAgcHVibGljIGNvbmZpZzogZGF0YWZvcm0uSVByb2plY3RDb25maWc7XG5cbiAgcHVibGljIHRhYmxlczogeyBbbmFtZTogc3RyaW5nXTogdGFibGUuVGFibGUgfTtcbiAgcHVibGljIG9wZXJhdGlvbnM6IHsgW25hbWU6IHN0cmluZ106IE9wZXJhdGlvbiB9O1xuICBwdWJsaWMgYXNzZXJ0aW9uczogeyBbbmFtZTogc3RyaW5nXTogQXNzZXJ0aW9uIH07XG4gIHB1YmxpYyB0ZXN0czogeyBbbmFtZTogc3RyaW5nXTogdGVzdC5UZXN0IH07XG5cbiAgcHVibGljIGdyYXBoRXJyb3JzOiBkYXRhZm9ybS5JR3JhcGhFcnJvcnM7XG5cbiAgY29uc3RydWN0b3Iocm9vdERpcjogc3RyaW5nLCBwcm9qZWN0Q29uZmlnPzogZGF0YWZvcm0uSVByb2plY3RDb25maWcpIHtcbiAgICB0aGlzLmluaXQocm9vdERpciwgcHJvamVjdENvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgaW5pdChyb290RGlyOiBzdHJpbmcsIHByb2plY3RDb25maWc/OiBkYXRhZm9ybS5JUHJvamVjdENvbmZpZykge1xuICAgIHRoaXMucm9vdERpciA9IHJvb3REaXI7XG4gICAgdGhpcy5jb25maWcgPSBwcm9qZWN0Q29uZmlnIHx8IHtcbiAgICAgIGRlZmF1bHRTY2hlbWE6IFwiZGF0YWZvcm1cIixcbiAgICAgIGFzc2VydGlvblNjaGVtYTogXCJkYXRhZm9ybV9hc3NlcnRpb25zXCJcbiAgICB9O1xuICAgIHRoaXMudGFibGVzID0ge307XG4gICAgdGhpcy5vcGVyYXRpb25zID0ge307XG4gICAgdGhpcy5hc3NlcnRpb25zID0ge307XG4gICAgdGhpcy50ZXN0cyA9IHt9O1xuICAgIHRoaXMuZ3JhcGhFcnJvcnMgPSB7IGNvbXBpbGF0aW9uRXJyb3JzOiBbXSB9O1xuICB9XG5cbiAgcHVibGljIGFkYXB0ZXIoKTogYWRhcHRlcnMuSUFkYXB0ZXIge1xuICAgIHJldHVybiBhZGFwdGVycy5jcmVhdGUodGhpcy5jb25maWcpO1xuICB9XG5cbiAgcHVibGljIHNxbHhBY3Rpb24oYWN0aW9uT3B0aW9uczoge1xuICAgIHNxbHhDb25maWc6IElTcWx4Q29uZmlnO1xuICAgIHNxbFN0YXRlbWVudENvdW50OiBudW1iZXI7XG4gICAgaGFzSW5jcmVtZW50YWw6IGJvb2xlYW47XG4gICAgaGFzUHJlT3BlcmF0aW9uczogYm9vbGVhbjtcbiAgICBoYXNQb3N0T3BlcmF0aW9uczogYm9vbGVhbjtcbiAgICBoYXNJbnB1dHM6IGJvb2xlYW47XG4gIH0pIHtcbiAgICBpZiAoYWN0aW9uT3B0aW9ucy5zcWxTdGF0ZW1lbnRDb3VudCA+IDEgJiYgYWN0aW9uT3B0aW9ucy5zcWx4Q29uZmlnLnR5cGUgIT09IFwib3BlcmF0aW9uc1wiKSB7XG4gICAgICB0aGlzLmNvbXBpbGVFcnJvcihcbiAgICAgICAgXCJBY3Rpb25zIG1heSBvbmx5IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBTUUwgc3RhdGVtZW50IGlmIHRoZXkgYXJlIG9mIHR5cGUgJ29wZXJhdGlvbnMnLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBhY3Rpb25PcHRpb25zLnNxbHhDb25maWcuaGFzT3V0cHV0ICYmXG4gICAgICAoYWN0aW9uT3B0aW9ucy5zcWx4Q29uZmlnLnR5cGUgIT09IFwib3BlcmF0aW9uc1wiIHx8XG4gICAgICAgIHRoaXMuaXNEYXRhc2V0VHlwZShhY3Rpb25PcHRpb25zLnNxbHhDb25maWcudHlwZSkpXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbXBpbGVFcnJvcihcbiAgICAgICAgXCJBY3Rpb25zIG1heSBvbmx5IHNwZWNpZnkgJ2hhc091dHB1dDogdHJ1ZScgaWYgdGhleSBhcmUgb2YgdHlwZSAnb3BlcmF0aW9ucycgb3IgY3JlYXRlIGEgZGF0YXNldC5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgYWN0aW9uT3B0aW9ucy5zcWx4Q29uZmlnLmNvbHVtbnMgJiZcbiAgICAgICEodGhpcy5pc0RhdGFzZXRUeXBlKGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy50eXBlKSB8fCBhY3Rpb25PcHRpb25zLnNxbHhDb25maWcuaGFzT3V0cHV0KVxuICAgICkge1xuICAgICAgdGhpcy5jb21waWxlRXJyb3IoXCJBY3Rpb25zIG1heSBvbmx5IHNwZWNpZnkgJ2NvbHVtbnMnIGlmIHRoZXkgY3JlYXRlIGEgZGF0YXNldC5cIik7XG4gICAgfVxuICAgIGlmIChhY3Rpb25PcHRpb25zLnNxbHhDb25maWcucHJvdGVjdGVkICYmIGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy50eXBlICE9PSBcImluY3JlbWVudGFsXCIpIHtcbiAgICAgIHRoaXMuY29tcGlsZUVycm9yKFxuICAgICAgICBcIkFjdGlvbnMgbWF5IG9ubHkgc3BlY2lmeSAncHJvdGVjdGVkOiB0cnVlJyBpZiB0aGV5IGFyZSBvZiB0eXBlICdpbmNyZW1lbnRhbCcuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhY3Rpb25PcHRpb25zLmhhc0luY3JlbWVudGFsICYmIGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy50eXBlICE9PSBcImluY3JlbWVudGFsXCIpIHtcbiAgICAgIHRoaXMuY29tcGlsZUVycm9yKFxuICAgICAgICBcIkFjdGlvbnMgbWF5IG9ubHkgaW5jbHVkZSBpbmNyZW1lbnRhbF93aGVyZSBpZiB0aGV5IGFyZSBvZiB0eXBlICdpbmNyZW1lbnRhbCcuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhY3Rpb25PcHRpb25zLnNxbHhDb25maWcuZGF0YXNldCAmJiBhY3Rpb25PcHRpb25zLnNxbHhDb25maWcudHlwZSAhPT0gXCJ0ZXN0XCIpIHtcbiAgICAgIHRoaXMuY29tcGlsZUVycm9yKFwiQWN0aW9ucyBtYXkgb25seSBzcGVjaWZ5ICdkYXRhc2V0JyBpZiB0aGV5IGFyZSBvZiB0eXBlICd0ZXN0Jy5cIik7XG4gICAgfVxuICAgIGlmICghYWN0aW9uT3B0aW9ucy5zcWx4Q29uZmlnLmRhdGFzZXQgJiYgYWN0aW9uT3B0aW9ucy5zcWx4Q29uZmlnLnR5cGUgPT09IFwidGVzdFwiKSB7XG4gICAgICB0aGlzLmNvbXBpbGVFcnJvcihcIkFjdGlvbnMgbXVzdCBzcGVjaWZ5ICdkYXRhc2V0JyBpZiB0aGV5IGFyZSBvZiB0eXBlICd0ZXN0Jy5cIik7XG4gICAgfVxuICAgIGlmIChhY3Rpb25PcHRpb25zLmhhc0lucHV0cyAmJiBhY3Rpb25PcHRpb25zLnNxbHhDb25maWcudHlwZSAhPT0gXCJ0ZXN0XCIpIHtcbiAgICAgIHRoaXMuY29tcGlsZUVycm9yKFwiQWN0aW9ucyBtYXkgb25seSBpbmNsdWRlIGlucHV0IGJsb2NrcyBpZiB0aGV5IGFyZSBvZiB0eXBlICd0ZXN0Jy5cIik7XG4gICAgfVxuICAgIGlmIChhY3Rpb25PcHRpb25zLnNxbHhDb25maWcuZGlzYWJsZWQgJiYgIXRoaXMuaXNEYXRhc2V0VHlwZShhY3Rpb25PcHRpb25zLnNxbHhDb25maWcudHlwZSkpIHtcbiAgICAgIHRoaXMuY29tcGlsZUVycm9yKFwiQWN0aW9ucyBtYXkgb25seSBzcGVjaWZ5ICdkaXNhYmxlZDogdHJ1ZScgaWYgdGhleSBjcmVhdGUgYSBkYXRhc2V0LlwiKTtcbiAgICB9XG4gICAgaWYgKGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy5yZWRzaGlmdCAmJiAhdGhpcy5pc0RhdGFzZXRUeXBlKGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy50eXBlKSkge1xuICAgICAgdGhpcy5jb21waWxlRXJyb3IoXCJBY3Rpb25zIG1heSBvbmx5IHNwZWNpZnkgJ3JlZHNoaWZ0OiB7IC4uLiB9JyBpZiB0aGV5IGNyZWF0ZSBhIGRhdGFzZXQuXCIpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBhY3Rpb25PcHRpb25zLnNxbHhDb25maWcuc3FsZGF0YXdhcmVob3VzZSAmJlxuICAgICAgIXRoaXMuaXNEYXRhc2V0VHlwZShhY3Rpb25PcHRpb25zLnNxbHhDb25maWcudHlwZSlcbiAgICApIHtcbiAgICAgIHRoaXMuY29tcGlsZUVycm9yKFxuICAgICAgICBcIkFjdGlvbnMgbWF5IG9ubHkgc3BlY2lmeSAnc3FsZGF0YXdhcmVob3VzZTogeyAuLi4gfScgaWYgdGhleSBjcmVhdGUgYSBkYXRhc2V0LlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWN0aW9uT3B0aW9ucy5zcWx4Q29uZmlnLmJpZ3F1ZXJ5ICYmICF0aGlzLmlzRGF0YXNldFR5cGUoYWN0aW9uT3B0aW9ucy5zcWx4Q29uZmlnLnR5cGUpKSB7XG4gICAgICB0aGlzLmNvbXBpbGVFcnJvcihcIkFjdGlvbnMgbWF5IG9ubHkgc3BlY2lmeSAnYmlncXVlcnk6IHsgLi4uIH0nIGlmIHRoZXkgY3JlYXRlIGEgZGF0YXNldC5cIik7XG4gICAgfVxuICAgIGlmIChhY3Rpb25PcHRpb25zLmhhc1ByZU9wZXJhdGlvbnMgJiYgIXRoaXMuaXNEYXRhc2V0VHlwZShhY3Rpb25PcHRpb25zLnNxbHhDb25maWcudHlwZSkpIHtcbiAgICAgIHRoaXMuY29tcGlsZUVycm9yKFwiQWN0aW9ucyBtYXkgb25seSBpbmNsdWRlIHByZV9vcGVyYXRpb25zIGlmIHRoZXkgY3JlYXRlIGEgZGF0YXNldC5cIik7XG4gICAgfVxuICAgIGlmIChhY3Rpb25PcHRpb25zLmhhc1Bvc3RPcGVyYXRpb25zICYmICF0aGlzLmlzRGF0YXNldFR5cGUoYWN0aW9uT3B0aW9ucy5zcWx4Q29uZmlnLnR5cGUpKSB7XG4gICAgICB0aGlzLmNvbXBpbGVFcnJvcihcIkFjdGlvbnMgbWF5IG9ubHkgaW5jbHVkZSBwb3N0X29wZXJhdGlvbnMgaWYgdGhleSBjcmVhdGUgYSBkYXRhc2V0LlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBhY3Rpb24gPSAoKCkgPT4ge1xuICAgICAgc3dpdGNoIChhY3Rpb25PcHRpb25zLnNxbHhDb25maWcudHlwZSkge1xuICAgICAgICBjYXNlIFwidmlld1wiOlxuICAgICAgICBjYXNlIFwidGFibGVcIjpcbiAgICAgICAgY2FzZSBcImlubGluZVwiOlxuICAgICAgICBjYXNlIFwiaW5jcmVtZW50YWxcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5wdWJsaXNoKGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy5uYW1lKTtcbiAgICAgICAgY2FzZSBcImFzc2VydGlvblwiOlxuICAgICAgICAgIHJldHVybiB0aGlzLmFzc2VydChhY3Rpb25PcHRpb25zLnNxbHhDb25maWcubmFtZSk7XG4gICAgICAgIGNhc2UgXCJvcGVyYXRpb25zXCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMub3BlcmF0ZShhY3Rpb25PcHRpb25zLnNxbHhDb25maWcubmFtZSk7XG4gICAgICAgIGNhc2UgXCJ0ZXN0XCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMudGVzdChhY3Rpb25PcHRpb25zLnNxbHhDb25maWcubmFtZSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgYWN0aW9uIHR5cGU6ICR7YWN0aW9uT3B0aW9ucy5zcWx4Q29uZmlnLnR5cGV9YCk7XG4gICAgICB9XG4gICAgfSkoKS5jb25maWcoYWN0aW9uT3B0aW9ucy5zcWx4Q29uZmlnKTtcblxuICAgIGlmIChhY3Rpb24gaW5zdGFuY2VvZiB0ZXN0LlRlc3QpIHtcbiAgICAgIHJldHVybiBhY3Rpb247XG4gICAgfVxuXG4gICAgaWYgKCEoYWN0aW9uIGluc3RhbmNlb2YgT3BlcmF0aW9uKSB8fCBhY3Rpb24ucHJvdG8uaGFzT3V0cHV0KSB7XG4gICAgICBjb25zdCBmaW5hbFNjaGVtYSA9XG4gICAgICAgIGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy5zY2hlbWEgfHxcbiAgICAgICAgKGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy50eXBlID09PSBcImFzc2VydGlvblwiXG4gICAgICAgICAgPyB0aGlzLmNvbmZpZy5hc3NlcnRpb25TY2hlbWFcbiAgICAgICAgICA6IHRoaXMuY29uZmlnLmRlZmF1bHRTY2hlbWEpO1xuICAgICAgYWN0aW9uLnByb3RvLnRhcmdldCA9IHRoaXMudGFyZ2V0KGFjdGlvbk9wdGlvbnMuc3FseENvbmZpZy5uYW1lLCBmaW5hbFNjaGVtYSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSBhY3Rpb24ucHJvdG8udGFyZ2V0O1xuICAgIH1cbiAgICByZXR1cm4gYWN0aW9uO1xuICB9XG5cbiAgcHVibGljIHRhcmdldCh0YXJnZXQ6IHN0cmluZywgZGVmYXVsdFNjaGVtYT86IHN0cmluZyk6IGRhdGFmb3JtLklUYXJnZXQge1xuICAgIGNvbnN0IHN1ZmZpeCA9ICEhdGhpcy5jb25maWcuc2NoZW1hU3VmZml4ID8gYF8ke3RoaXMuY29uZmlnLnNjaGVtYVN1ZmZpeH1gIDogXCJcIjtcblxuICAgIGlmICh0YXJnZXQuaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgICBjb25zdCBbc2NoZW1hLCBuYW1lXSA9IHRhcmdldC5zcGxpdChcIi5cIik7XG4gICAgICByZXR1cm4gZGF0YWZvcm0uVGFyZ2V0LmNyZWF0ZSh7IG5hbWUsIHNjaGVtYTogc2NoZW1hICsgc3VmZml4IH0pO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YWZvcm0uVGFyZ2V0LmNyZWF0ZSh7XG4gICAgICBuYW1lOiB0YXJnZXQsXG4gICAgICBzY2hlbWE6IChkZWZhdWx0U2NoZW1hIHx8IHRoaXMuY29uZmlnLmRlZmF1bHRTY2hlbWEpICsgc3VmZml4XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVzb2x2ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZXNbbmFtZV07XG4gICAgY29uc3Qgb3BlcmF0aW9uID1cbiAgICAgICEhdGhpcy5vcGVyYXRpb25zW25hbWVdICYmIHRoaXMub3BlcmF0aW9uc1tuYW1lXS5oYXNPdXRwdXQgJiYgdGhpcy5vcGVyYXRpb25zW25hbWVdO1xuXG4gICAgaWYgKHRhYmxlICYmIHRhYmxlLnByb3RvLnR5cGUgPT09IFwiaW5saW5lXCIpIHtcbiAgICAgIC8vIFRPRE86IFByZXR0eSBzdXJlIHRoaXMgaXMgYnJva2VuIGFzIHRoZSBwcm90by5xdWVyeSB2YWx1ZSBtYXkgbm90XG4gICAgICAvLyBiZSBzZXQgeWV0IGFzIGl0IGhhcHBlbnMgZHVyaW5nIGNvbXBpbGF0aW9uLiBXZSBzaG91bGQgZXZhbHV0ZSB0aGUgcXVlcnkgaGVyZS5cbiAgICAgIHJldHVybiBgKCR7dGFibGUucHJvdG8ucXVlcnl9KWA7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YXNldCA9IHRhYmxlIHx8IG9wZXJhdGlvbjtcbiAgICAvLyBUT0RPOiBXZSBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIHBsYWluICduYW1lJyBoZXJlIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHByb2plY3RzIHRoYXQgdXNlIC5zcWwgZmlsZXMuXG4gICAgLy8gSW4gdGhlc2UgcHJvamVjdHMsIHRoaXMgc2Vzc2lvbiBtYXkgbm90IGtub3cgYWJvdXQgYWxsIGFjdGlvbnMgKHlldCksIGFuZCB0aHVzIHdlIG5lZWQgdG8gZmFsbCBiYWNrIHRvIGFzc3VtaW5nXG4gICAgLy8gdGhhdCB0aGUgdGFyZ2V0ICp3aWxsKiBleGlzdCBpbiB0aGUgZnV0dXJlLiBPbmNlIHdlIGJyZWFrIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggLnNxbCBmaWxlcywgd2Ugc2hvdWxkIHJlbW92ZVxuICAgIC8vIHRoZSBjb2RlIHRoYXQgY2FsbHMgJ3RoaXMudGFyZ2V0KC4uLiknIGJlbG93LCBhbmQgYXBwZW5kIGEgY29tcGlsZSBlcnJvciBpZiB3ZSBjYW4ndCBmaW5kIGEgZGF0YXNldCB3aG9zZSBuYW1lIGlzICduYW1lJy5cbiAgICBjb25zdCB0YXJnZXQgPSBkYXRhc2V0ID8gZGF0YXNldC5wcm90by50YXJnZXQgOiB0aGlzLnRhcmdldChuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyKCkucmVzb2x2ZVRhcmdldCh0YXJnZXQpO1xuICB9XG5cbiAgcHVibGljIG9wZXJhdGUobmFtZTogc3RyaW5nLCBxdWVyaWVzPzogT0NvbnRleHRhYmxlPHN0cmluZyB8IHN0cmluZ1tdPik6IE9wZXJhdGlvbiB7XG4gICAgdGhpcy5jaGVja0FjdGlvbk5hbWVJc1VudXNlZChuYW1lKTtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBuZXcgT3BlcmF0aW9uKCk7XG4gICAgb3BlcmF0aW9uLnNlc3Npb24gPSB0aGlzO1xuICAgIG9wZXJhdGlvbi5wcm90by5uYW1lID0gbmFtZTtcbiAgICBvcGVyYXRpb24ucHJvdG8udGFyZ2V0ID0gdGhpcy50YXJnZXQobmFtZSk7XG4gICAgaWYgKHF1ZXJpZXMpIHtcbiAgICAgIG9wZXJhdGlvbi5xdWVyaWVzKHF1ZXJpZXMpO1xuICAgIH1cbiAgICBvcGVyYXRpb24ucHJvdG8uZmlsZU5hbWUgPSB1dGlscy5nZXRDYWxsZXJGaWxlKHRoaXMucm9vdERpcik7XG4gICAgLy8gQWRkIGl0IHRvIGdsb2JhbCBpbmRleC5cbiAgICB0aGlzLm9wZXJhdGlvbnNbbmFtZV0gPSBvcGVyYXRpb247XG4gICAgcmV0dXJuIG9wZXJhdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBwdWJsaXNoKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVyeU9yQ29uZmlnPzogdGFibGUuVENvbnRleHRhYmxlPHN0cmluZz4gfCB0YWJsZS5UQ29uZmlnXG4gICk6IHRhYmxlLlRhYmxlIHtcbiAgICB0aGlzLmNoZWNrQWN0aW9uTmFtZUlzVW51c2VkKG5hbWUpO1xuICAgIGNvbnN0IG5ld1RhYmxlID0gbmV3IHRhYmxlLlRhYmxlKCk7XG4gICAgbmV3VGFibGUuc2Vzc2lvbiA9IHRoaXM7XG4gICAgbmV3VGFibGUucHJvdG8ubmFtZSA9IG5hbWU7XG4gICAgbmV3VGFibGUucHJvdG8udGFyZ2V0ID0gdGhpcy50YXJnZXQobmFtZSk7XG4gICAgaWYgKCEhcXVlcnlPckNvbmZpZykge1xuICAgICAgaWYgKHR5cGVvZiBxdWVyeU9yQ29uZmlnID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIG5ld1RhYmxlLmNvbmZpZyhxdWVyeU9yQ29uZmlnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1RhYmxlLnF1ZXJ5KHF1ZXJ5T3JDb25maWcpO1xuICAgICAgfVxuICAgIH1cbiAgICBuZXdUYWJsZS5wcm90by5maWxlTmFtZSA9IHV0aWxzLmdldENhbGxlckZpbGUodGhpcy5yb290RGlyKTtcbiAgICAvLyBBZGQgaXQgdG8gZ2xvYmFsIGluZGV4LlxuICAgIHRoaXMudGFibGVzW25hbWVdID0gbmV3VGFibGU7XG4gICAgcmV0dXJuIG5ld1RhYmxlO1xuICB9XG5cbiAgcHVibGljIGFzc2VydChuYW1lOiBzdHJpbmcsIHF1ZXJ5PzogQUNvbnRleHRhYmxlPHN0cmluZz4pOiBBc3NlcnRpb24ge1xuICAgIHRoaXMuY2hlY2tBY3Rpb25OYW1lSXNVbnVzZWQobmFtZSk7XG4gICAgY29uc3QgYXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICAgIGFzc2VydGlvbi5zZXNzaW9uID0gdGhpcztcbiAgICBhc3NlcnRpb24ucHJvdG8ubmFtZSA9IG5hbWU7XG4gICAgYXNzZXJ0aW9uLnByb3RvLnRhcmdldCA9IHRoaXMudGFyZ2V0KG5hbWUsIHRoaXMuY29uZmlnLmFzc2VydGlvblNjaGVtYSk7XG4gICAgaWYgKHF1ZXJ5KSB7XG4gICAgICBhc3NlcnRpb24ucXVlcnkocXVlcnkpO1xuICAgIH1cbiAgICBhc3NlcnRpb24ucHJvdG8uZmlsZU5hbWUgPSB1dGlscy5nZXRDYWxsZXJGaWxlKHRoaXMucm9vdERpcik7XG4gICAgLy8gQWRkIGl0IHRvIGdsb2JhbCBpbmRleC5cbiAgICB0aGlzLmFzc2VydGlvbnNbbmFtZV0gPSBhc3NlcnRpb247XG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfVxuXG4gIHB1YmxpYyB0ZXN0KG5hbWU6IHN0cmluZyk6IHRlc3QuVGVzdCB7XG4gICAgdGhpcy5jaGVja1Rlc3ROYW1lSXNVbnVzZWQobmFtZSk7XG4gICAgY29uc3QgbmV3VGVzdCA9IG5ldyB0ZXN0LlRlc3QoKTtcbiAgICBuZXdUZXN0LnNlc3Npb24gPSB0aGlzO1xuICAgIG5ld1Rlc3QucHJvdG8ubmFtZSA9IG5hbWU7XG4gICAgbmV3VGVzdC5wcm90by5maWxlTmFtZSA9IHV0aWxzLmdldENhbGxlckZpbGUodGhpcy5yb290RGlyKTtcbiAgICAvLyBBZGQgaXQgdG8gZ2xvYmFsIGluZGV4LlxuICAgIHRoaXMudGVzdHNbbmFtZV0gPSBuZXdUZXN0O1xuICAgIHJldHVybiBuZXdUZXN0O1xuICB9XG5cbiAgcHVibGljIGNvbXBpbGVFcnJvcihlcnI6IEVycm9yIHwgc3RyaW5nLCBwYXRoPzogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsZU5hbWUgPSBwYXRoIHx8IHV0aWxzLmdldENhbGxlckZpbGUodGhpcy5yb290RGlyKSB8fCBfX2ZpbGVuYW1lO1xuXG4gICAgY29uc3QgY29tcGlsZUVycm9yID0gZGF0YWZvcm0uQ29tcGlsYXRpb25FcnJvci5jcmVhdGUoe1xuICAgICAgZmlsZU5hbWVcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIGVyciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY29tcGlsZUVycm9yLm1lc3NhZ2UgPSBlcnI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBpbGVFcnJvci5tZXNzYWdlID0gZXJyLm1lc3NhZ2U7XG4gICAgICBjb21waWxlRXJyb3Iuc3RhY2sgPSBlcnIuc3RhY2s7XG4gICAgfVxuICAgIHRoaXMuZ3JhcGhFcnJvcnMuY29tcGlsYXRpb25FcnJvcnMucHVzaChjb21waWxlRXJyb3IpO1xuICB9XG5cbiAgcHVibGljIGNvbXBpbGVHcmFwaENodW5rPFQ+KHBhcnQ6IHtcbiAgICBbbmFtZTogc3RyaW5nXTogeyBwcm90bzogSUFjdGlvblByb3RvOyBjb21waWxlKCk6IFQgfTtcbiAgfSk6IFRbXSB7XG4gICAgY29uc3QgY29tcGlsZWRDaHVua3M6IFRbXSA9IFtdO1xuXG4gICAgT2JqZWN0LmtleXMocGFydCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29tcGlsZWRDaHVuayA9IHBhcnRba2V5XS5jb21waWxlKCk7XG4gICAgICAgIGNvbXBpbGVkQ2h1bmtzLnB1c2goY29tcGlsZWRDaHVuayk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuY29tcGlsZUVycm9yKGUsIHBhcnRba2V5XS5wcm90by5maWxlTmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29tcGlsZWRDaHVua3M7XG4gIH1cblxuICBwdWJsaWMgY29tcGlsZSgpOiBkYXRhZm9ybS5JQ29tcGlsZWRHcmFwaCB7XG4gICAgY29uc3QgY29tcGlsZWRHcmFwaCA9IGRhdGFmb3JtLkNvbXBpbGVkR3JhcGguY3JlYXRlKHtcbiAgICAgIHByb2plY3RDb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgdGFibGVzOiB0aGlzLmNvbXBpbGVHcmFwaENodW5rKHRoaXMudGFibGVzKSxcbiAgICAgIG9wZXJhdGlvbnM6IHRoaXMuY29tcGlsZUdyYXBoQ2h1bmsodGhpcy5vcGVyYXRpb25zKSxcbiAgICAgIGFzc2VydGlvbnM6IHRoaXMuY29tcGlsZUdyYXBoQ2h1bmsodGhpcy5hc3NlcnRpb25zKSxcbiAgICAgIHRlc3RzOiB0aGlzLmNvbXBpbGVHcmFwaENodW5rKHRoaXMudGVzdHMpLFxuICAgICAgZ3JhcGhFcnJvcnM6IHRoaXMuZ3JhcGhFcnJvcnNcbiAgICB9KTtcblxuICAgIC8vIEV4cGFuZCBhY3Rpb24gZGVwZW5kZW5jeSB3aWxkY2FyZHMuXG5cbiAgICBjb25zdCBhbGxBY3Rpb25zOiBJQWN0aW9uUHJvdG9bXSA9IFtdLmNvbmNhdChcbiAgICAgIGNvbXBpbGVkR3JhcGgudGFibGVzLFxuICAgICAgY29tcGlsZWRHcmFwaC5hc3NlcnRpb25zLFxuICAgICAgY29tcGlsZWRHcmFwaC5vcGVyYXRpb25zXG4gICAgKTtcbiAgICBjb25zdCBhbGxBY3Rpb25OYW1lcyA9IGFsbEFjdGlvbnMubWFwKGFjdGlvbiA9PiBhY3Rpb24ubmFtZSk7XG5cbiAgICBhbGxBY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICAgIGNvbnN0IHVuaXF1ZURlcGVuZGVuY2llczogeyBbZGVwZW5kZW5jeTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG4gICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBhY3Rpb24uZGVwZW5kZW5jaWVzIHx8IFtdO1xuICAgICAgLy8gQWRkIG5vbi13aWxkY2FyZCBkZXBzIG5vcm1hbGx5LlxuICAgICAgZGVwZW5kZW5jaWVzXG4gICAgICAgIC5maWx0ZXIoZGVwZW5kZW5jeSA9PiAhZGVwZW5kZW5jeS5pbmNsdWRlcyhcIipcIikpXG4gICAgICAgIC5mb3JFYWNoKGRlcGVuZGVuY3kgPT4gKHVuaXF1ZURlcGVuZGVuY2llc1tkZXBlbmRlbmN5XSA9IHRydWUpKTtcbiAgICAgIC8vIE1hdGNoIHdpbGRjYXJkIGRlcHMgYWdhaW5zdCBhbGwgYWN0aW9uIG5hbWVzLlxuICAgICAgdXRpbHNcbiAgICAgICAgLm1hdGNoUGF0dGVybnMoZGVwZW5kZW5jaWVzLmZpbHRlcihkID0+IGQuaW5jbHVkZXMoXCIqXCIpKSwgYWxsQWN0aW9uTmFtZXMpXG4gICAgICAgIC5mb3JFYWNoKGRlcGVuZGVuY3kgPT4gKHVuaXF1ZURlcGVuZGVuY2llc1tkZXBlbmRlbmN5XSA9IHRydWUpKTtcbiAgICAgIGFjdGlvbi5kZXBlbmRlbmNpZXMgPSBPYmplY3Qua2V5cyh1bmlxdWVEZXBlbmRlbmNpZXMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbXBpbGVkR3JhcGg7XG4gIH1cblxuICBwdWJsaWMgaXNEYXRhc2V0VHlwZSh0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgPT09IFwidmlld1wiIHx8IHR5cGUgPT09IFwidGFibGVcIiB8fCB0eXBlID09PSBcImlubGluZVwiIHx8IHR5cGUgPT09IFwiaW5jcmVtZW50YWxcIjtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tBY3Rpb25OYW1lSXNVbnVzZWQobmFtZTogc3RyaW5nKSB7XG4gICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBuYW1lc1xuICAgIGlmICh0aGlzLnRhYmxlc1tuYW1lXSB8fCB0aGlzLm9wZXJhdGlvbnNbbmFtZV0gfHwgdGhpcy5hc3NlcnRpb25zW25hbWVdKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYER1cGxpY2F0ZSBhY3Rpb24gbmFtZSBkZXRlY3RlZC4gTmFtZXMgbXVzdCBiZSB1bmlxdWUgYWNyb3NzIHRhYmxlcywgYXNzZXJ0aW9ucywgYW5kIG9wZXJhdGlvbnM6IFwiJHtuYW1lfVwiYDtcbiAgICAgIHRoaXMuY29tcGlsZUVycm9yKG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1Rlc3ROYW1lSXNVbnVzZWQobmFtZTogc3RyaW5nKSB7XG4gICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBuYW1lc1xuICAgIGlmICh0aGlzLnRlc3RzW25hbWVdKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYER1cGxpY2F0ZSB0ZXN0IG5hbWUgZGV0ZWN0ZWQ6IFwiJHtuYW1lfVwiYDtcbiAgICAgIHRoaXMuY29tcGlsZUVycm9yKG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgfVxuICB9XG59XG4iXX0=

@@ -35,2 +35,3 @@ /// <amd-module name="@dataform/core/table" />

bigquery?: dataform.IBigQueryOptions;
sqldatawarehouse?: dataform.ISQLDataWarehouseOptions;
}

@@ -51,2 +52,3 @@ export declare class Table {

disabled(): this;
sqldatawarehouse(sqlDataWarehouse: dataform.ISQLDataWarehouseOptions): this;
redshift(redshift: dataform.IRedshiftOptions): this;

@@ -53,0 +55,0 @@ bigquery(bigquery: dataform.IBigQueryOptions): this;

@@ -36,2 +36,3 @@ (function (factory) {

"redshift",
"sqlDataWarehouse",
"preOps",

@@ -70,2 +71,5 @@ "postOps",

}
if (config.sqldatawarehouse) {
this.sqldatawarehouse(config.sqldatawarehouse);
}
if (config.tags) {

@@ -106,2 +110,6 @@ this.tags(config.tags);

}
sqldatawarehouse(sqlDataWarehouse) {
this.proto.sqlDataWarehouse = protos_1.dataform.SQLDataWarehouseOptions.create(sqlDataWarehouse);
return this;
}
redshift(redshift) {

@@ -248,2 +256,2 @@ this.proto.redshift = protos_1.dataform.RedshiftOptions.create(redshift);

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3RhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBQUEsb0RBQTRGO0lBQzVGLDZDQUE0QztJQUU1QyxJQUFZLFVBS1g7SUFMRCxXQUFZLFVBQVU7UUFDcEIsNkJBQWUsQ0FBQTtRQUNmLDJCQUFhLENBQUE7UUFDYix5Q0FBMkIsQ0FBQTtRQUMzQiwrQkFBaUIsQ0FBQTtJQUNuQixDQUFDLEVBTFcsVUFBVSxHQUFWLGtCQUFVLEtBQVYsa0JBQVUsUUFLckI7SUFDRCxJQUFZLGNBSVg7SUFKRCxXQUFZLGNBQWM7UUFDeEIsK0JBQWEsQ0FBQTtRQUNiLDZCQUFXLENBQUE7UUFDWCw2QkFBVyxDQUFBO0lBQ2IsQ0FBQyxFQUpXLGNBQWMsR0FBZCxzQkFBYyxLQUFkLHNCQUFjLFFBSXpCO0lBQ0QsSUFBWSxjQUdYO0lBSEQsV0FBWSxjQUFjO1FBQ3hCLHVDQUFxQixDQUFBO1FBQ3JCLDZDQUEyQixDQUFBO0lBQzdCLENBQUMsRUFIVyxjQUFjLEdBQWQsc0JBQWMsS0FBZCxzQkFBYyxRQUd6QjtJQUVZLFFBQUEsWUFBWSxHQUVyQjtRQUNGLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ25CLFVBQVU7WUFDVixVQUFVO1lBQ1YsUUFBUTtZQUNSLFNBQVM7WUFDVCxrQkFBa0I7WUFDbEIsVUFBVTtZQUNWLE9BQU87U0FDUjtLQUNGLENBQUM7SUFrQkYsTUFBYSxLQUFLO1FBQWxCO1lBQ1MsVUFBSyxHQUFtQixpQkFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBQ25ELElBQUksRUFBRSxNQUFNO2dCQUNaLFFBQVEsRUFBRSxLQUFLO2dCQUNmLElBQUksRUFBRSxFQUFFO2FBQ1QsQ0FBQyxDQUFDO1lBUUssc0JBQWlCLEdBQTJDLEVBQUUsQ0FBQztZQUMvRCx1QkFBa0IsR0FBMkMsRUFBRSxDQUFDO1FBK0kxRSxDQUFDO1FB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QztRQUVNLFFBQVEsQ0FBQyxRQUFtQztZQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFTSxZQUFZLENBQUMsSUFBWTtZQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFTSxLQUFLLENBQUksS0FBc0I7WUFDcEMsSUFBSSxPQUFPLEtBQUssS0FBSyxVQUFVLEVBQUU7Z0JBQy9CLE9BQVEsS0FBYSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzdCO2lCQUFNO2dCQUNMLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7UUFDSCxDQUFDO1FBQ00sSUFBSSxDQUFDLElBQWM7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO0tBQ0Y7SUF0RkQsb0NBc0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUNvbHVtbnNEZXNjcmlwdG9yLCBtYXBUb0NvbHVtblByb3RvQXJyYXksIFNlc3Npb24gfSBmcm9tIFwiQGRhdGFmb3JtL2NvcmUvc2Vzc2lvblwiO1xuaW1wb3J0IHsgZGF0YWZvcm0gfSBmcm9tIFwiQGRhdGFmb3JtL3Byb3Rvc1wiO1xuXG5leHBvcnQgZW51bSBUYWJsZVR5cGVzIHtcbiAgVEFCTEUgPSBcInRhYmxlXCIsXG4gIFZJRVcgPSBcInZpZXdcIixcbiAgSU5DUkVNRU5UQUwgPSBcImluY3JlbWVudGFsXCIsXG4gIElOTElORSA9IFwiaW5saW5lXCJcbn1cbmV4cG9ydCBlbnVtIERpc3RTdHlsZVR5cGVzIHtcbiAgRVZFTiA9IFwiZXZlblwiLFxuICBLRVkgPSBcImtleVwiLFxuICBBTEwgPSBcImFsbFwiXG59XG5leHBvcnQgZW51bSBTb3J0U3R5bGVUeXBlcyB7XG4gIENPTVBPVU5EID0gXCJjb21wb3VuZFwiLFxuICBJTlRFUkxFQVZFRCA9IFwiaW50ZXJsZWF2ZWRcIlxufVxuXG5leHBvcnQgY29uc3QgaWdub3JlZFByb3BzOiB7XG4gIFt0YWJsZVR5cGU6IHN0cmluZ106IEFycmF5PGtleW9mIGRhdGFmb3JtLklUYWJsZT47XG59ID0ge1xuICBbVGFibGVUeXBlcy5JTkxJTkVdOiBbXG4gICAgXCJiaWdxdWVyeVwiLFxuICAgIFwicmVkc2hpZnRcIixcbiAgICBcInByZU9wc1wiLFxuICAgIFwicG9zdE9wc1wiLFxuICAgIFwiYWN0aW9uRGVzY3JpcHRvclwiLFxuICAgIFwiZGlzYWJsZWRcIixcbiAgICBcIndoZXJlXCJcbiAgXVxufTtcblxudHlwZSBWYWx1ZU9mPFQ+ID0gVFtrZXlvZiBUXTtcbmV4cG9ydCB0eXBlIFRDb250ZXh0YWJsZTxUPiA9IFQgfCAoKGN0eDogVGFibGVDb250ZXh0KSA9PiBUKTtcbmV4cG9ydCB0eXBlIFRhYmxlVHlwZSA9IFZhbHVlT2Y8VGFibGVUeXBlcz47XG5cbmV4cG9ydCBpbnRlcmZhY2UgVENvbmZpZyB7XG4gIHR5cGU/OiBUYWJsZVR5cGU7XG4gIGRlcGVuZGVuY2llcz86IHN0cmluZyB8IHN0cmluZ1tdO1xuICB0YWdzPzogc3RyaW5nW107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjb2x1bW5zPzogSUNvbHVtbnNEZXNjcmlwdG9yO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHByb3RlY3RlZD86IGJvb2xlYW47XG4gIHJlZHNoaWZ0PzogZGF0YWZvcm0uSVJlZHNoaWZ0T3B0aW9ucztcbiAgYmlncXVlcnk/OiBkYXRhZm9ybS5JQmlnUXVlcnlPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgVGFibGUge1xuICBwdWJsaWMgcHJvdG86IGRhdGFmb3JtLlRhYmxlID0gZGF0YWZvcm0uVGFibGUuY3JlYXRlKHtcbiAgICB0eXBlOiBcInZpZXdcIixcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgdGFnczogW11cbiAgfSk7XG5cbiAgLy8gSG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgU2Vzc2lvbiBpbnN0YW5jZS5cbiAgcHVibGljIHNlc3Npb246IFNlc3Npb247XG5cbiAgLy8gV2UgZGVsYXkgY29udGV4dGlmaWNhdGlvbiB1bnRpbCB0aGUgZmluYWwgY29tcGlsZSBzdGVwLCBzbyBob2xkIHRoZXNlIGhlcmUgZm9yIG5vdy5cbiAgcHVibGljIGNvbnRleHRhYmxlUXVlcnk6IFRDb250ZXh0YWJsZTxzdHJpbmc+O1xuICBwcml2YXRlIGNvbnRleHRhYmxlV2hlcmU6IFRDb250ZXh0YWJsZTxzdHJpbmc+O1xuICBwcml2YXRlIGNvbnRleHRhYmxlUHJlT3BzOiBBcnJheTxUQ29udGV4dGFibGU8c3RyaW5nIHwgc3RyaW5nW10+PiA9IFtdO1xuICBwcml2YXRlIGNvbnRleHRhYmxlUG9zdE9wczogQXJyYXk8VENvbnRleHRhYmxlPHN0cmluZyB8IHN0cmluZ1tdPj4gPSBbXTtcblxuICBwdWJsaWMgY29uZmlnKGNvbmZpZzogVENvbmZpZykge1xuICAgIGlmIChjb25maWcudHlwZSkge1xuICAgICAgdGhpcy50eXBlKGNvbmZpZy50eXBlKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5kZXBlbmRlbmNpZXMpIHtcbiAgICAgIHRoaXMuZGVwZW5kZW5jaWVzKGNvbmZpZy5kZXBlbmRlbmNpZXMpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmRpc2FibGVkKCk7XG4gICAgfVxuICAgIGlmIChjb25maWcucmVkc2hpZnQpIHtcbiAgICAgIHRoaXMucmVkc2hpZnQoY29uZmlnLnJlZHNoaWZ0KTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5iaWdxdWVyeSkge1xuICAgICAgdGhpcy5iaWdxdWVyeShjb25maWcuYmlncXVlcnkpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnRhZ3MpIHtcbiAgICAgIHRoaXMudGFncyhjb25maWcudGFncyk7XG4gICAgfVxuICAgIGlmIChjb25maWcuZGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb24oY29uZmlnLmRlc2NyaXB0aW9uKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5jb2x1bW5zKSB7XG4gICAgICB0aGlzLmNvbHVtbnMoY29uZmlnLmNvbHVtbnMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIHR5cGUodHlwZTogVGFibGVUeXBlKSB7XG4gICAgdGhpcy5wcm90by50eXBlID0gdHlwZSBhcyBzdHJpbmc7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgcXVlcnkocXVlcnk6IFRDb250ZXh0YWJsZTxzdHJpbmc+KSB7XG4gICAgdGhpcy5jb250ZXh0YWJsZVF1ZXJ5ID0gcXVlcnk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgd2hlcmUod2hlcmU6IFRDb250ZXh0YWJsZTxzdHJpbmc+KSB7XG4gICAgdGhpcy5jb250ZXh0YWJsZVdoZXJlID0gd2hlcmU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgcHJlT3BzKHByZXM6IFRDb250ZXh0YWJsZTxzdHJpbmcgfCBzdHJpbmdbXT4pIHtcbiAgICB0aGlzLmNvbnRleHRhYmxlUHJlT3BzLnB1c2gocHJlcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgcG9zdE9wcyhwb3N0czogVENvbnRleHRhYmxlPHN0cmluZyB8IHN0cmluZ1tdPikge1xuICAgIHRoaXMuY29udGV4dGFibGVQb3N0T3BzLnB1c2gocG9zdHMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGRpc2FibGVkKCkge1xuICAgIHRoaXMucHJvdG8uZGlzYWJsZWQgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIHJlZHNoaWZ0KHJlZHNoaWZ0OiBkYXRhZm9ybS5JUmVkc2hpZnRPcHRpb25zKSB7XG4gICAgdGhpcy5wcm90by5yZWRzaGlmdCA9IGRhdGFmb3JtLlJlZHNoaWZ0T3B0aW9ucy5jcmVhdGUocmVkc2hpZnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGJpZ3F1ZXJ5KGJpZ3F1ZXJ5OiBkYXRhZm9ybS5JQmlnUXVlcnlPcHRpb25zKSB7XG4gICAgdGhpcy5wcm90by5iaWdxdWVyeSA9IGRhdGFmb3JtLkJpZ1F1ZXJ5T3B0aW9ucy5jcmVhdGUoYmlncXVlcnkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGRlcGVuZGVuY2llcyh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICBjb25zdCBuZXdEZXBlbmRlbmNpZXMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyBbdmFsdWVdIDogdmFsdWU7XG4gICAgbmV3RGVwZW5kZW5jaWVzLmZvckVhY2goZCA9PiB7XG4gICAgICBjb25zdCB0YWJsZSA9IHRoaXMuc2Vzc2lvbi50YWJsZXNbZF07XG5cbiAgICAgIGlmICghIXRhYmxlICYmIHRhYmxlLnByb3RvLnR5cGUgPT09IFwiaW5saW5lXCIpIHtcbiAgICAgICAgdGFibGUucHJvdG8uZGVwZW5kZW5jaWVzLmZvckVhY2goY2hpbGREZXAgPT4gdGhpcy5hZGREZXBlbmRlbmN5KGNoaWxkRGVwKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFkZERlcGVuZGVuY3koZCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgdGFncyh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICBjb25zdCBuZXdUYWdzID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gW3ZhbHVlXSA6IHZhbHVlO1xuICAgIG5ld1RhZ3MuZm9yRWFjaCh0ID0+IHtcbiAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5zZXNzaW9uLnRhYmxlc1t0XTtcbiAgICAgIHRoaXMucHJvdG8udGFncy5wdXNoKHQpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMucHJvdG8uYWN0aW9uRGVzY3JpcHRvcikge1xuICAgICAgdGhpcy5wcm90by5hY3Rpb25EZXNjcmlwdG9yID0ge307XG4gICAgfVxuICAgIHRoaXMucHJvdG8uYWN0aW9uRGVzY3JpcHRvci5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGNvbHVtbnMoY29sdW1uczogSUNvbHVtbnNEZXNjcmlwdG9yKSB7XG4gICAgaWYgKCF0aGlzLnByb3RvLmFjdGlvbkRlc2NyaXB0b3IpIHtcbiAgICAgIHRoaXMucHJvdG8uYWN0aW9uRGVzY3JpcHRvciA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnByb3RvLmFjdGlvbkRlc2NyaXB0b3IuY29sdW1ucyA9IG1hcFRvQ29sdW1uUHJvdG9BcnJheShjb2x1bW5zKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBjb21waWxlKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgVGFibGVDb250ZXh0KHRoaXMpO1xuXG4gICAgdGhpcy5wcm90by5xdWVyeSA9IGNvbnRleHQuYXBwbHkodGhpcy5jb250ZXh0YWJsZVF1ZXJ5KTtcblxuICAgIGlmICh0aGlzLmNvbnRleHRhYmxlV2hlcmUpIHtcbiAgICAgIHRoaXMucHJvdG8ud2hlcmUgPSBjb250ZXh0LmFwcGx5KHRoaXMuY29udGV4dGFibGVXaGVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb250ZXh0YWJsZVByZU9wcy5mb3JFYWNoKGNvbnRleHRhYmxlUHJlT3BzID0+IHtcbiAgICAgIGNvbnN0IGFwcGxpZWRQcmVzID0gY29udGV4dC5hcHBseShjb250ZXh0YWJsZVByZU9wcyk7XG4gICAgICB0aGlzLnByb3RvLnByZU9wcyA9ICh0aGlzLnByb3RvLnByZU9wcyB8fCBbXSkuY29uY2F0KFxuICAgICAgICB0eXBlb2YgYXBwbGllZFByZXMgPT0gXCJzdHJpbmdcIiA/IFthcHBsaWVkUHJlc10gOiBhcHBsaWVkUHJlc1xuICAgICAgKTtcbiAgICB9KTtcbiAgICB0aGlzLmNvbnRleHRhYmxlUHJlT3BzID0gW107XG5cbiAgICB0aGlzLmNvbnRleHRhYmxlUG9zdE9wcy5mb3JFYWNoKGNvbnRleHRhYmxlUG9zdE9wcyA9PiB7XG4gICAgICBjb25zdCBhcHBsaWVkUG9zdHMgPSBjb250ZXh0LmFwcGx5KGNvbnRleHRhYmxlUG9zdE9wcyk7XG4gICAgICB0aGlzLnByb3RvLnBvc3RPcHMgPSAodGhpcy5wcm90by5wb3N0T3BzIHx8IFtdKS5jb25jYXQoXG4gICAgICAgIHR5cGVvZiBhcHBsaWVkUG9zdHMgPT0gXCJzdHJpbmdcIiA/IFthcHBsaWVkUG9zdHNdIDogYXBwbGllZFBvc3RzXG4gICAgICApO1xuICAgIH0pO1xuICAgIHRoaXMuY29udGV4dGFibGVQb3N0T3BzID0gW107XG5cbiAgICByZXR1cm4gdGhpcy5wcm90bztcbiAgfVxuXG4gIHByaXZhdGUgYWRkRGVwZW5kZW5jeShkZXBlbmRlbmN5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm90by5kZXBlbmRlbmNpZXMuaW5kZXhPZihkZXBlbmRlbmN5KSA8IDApIHtcbiAgICAgIHRoaXMucHJvdG8uZGVwZW5kZW5jaWVzLnB1c2goZGVwZW5kZW5jeSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlQ29udGV4dCB7XG4gIGNvbmZpZzogKGNvbmZpZzogVENvbmZpZykgPT4gc3RyaW5nO1xuICBzZWxmOiAoKSA9PiBzdHJpbmc7XG4gIG5hbWU6ICgpID0+IHN0cmluZztcbiAgcmVmOiAobmFtZTogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIHJlc29sdmU6IChuYW1lOiBzdHJpbmcpID0+IHN0cmluZztcbiAgdHlwZTogKHR5cGU6IFRhYmxlVHlwZSkgPT4gc3RyaW5nO1xuICB3aGVyZTogKHdoZXJlOiBUQ29udGV4dGFibGU8c3RyaW5nPikgPT4gc3RyaW5nO1xuICBwcmVPcHM6IChzdGF0ZW1lbnQ6IFRDb250ZXh0YWJsZTxzdHJpbmcgfCBzdHJpbmdbXT4pID0+IHN0cmluZztcbiAgcG9zdE9wczogKHN0YXRlbWVudDogVENvbnRleHRhYmxlPHN0cmluZyB8IHN0cmluZ1tdPikgPT4gc3RyaW5nO1xuICBkaXNhYmxlZDogKCkgPT4gc3RyaW5nO1xuICByZWRzaGlmdDogKHJlZHNoaWZ0OiBkYXRhZm9ybS5JUmVkc2hpZnRPcHRpb25zKSA9PiBzdHJpbmc7XG4gIGJpZ3F1ZXJ5OiAoYmlncXVlcnk6IGRhdGFmb3JtLklCaWdRdWVyeU9wdGlvbnMpID0+IHN0cmluZztcbiAgZGVwZW5kZW5jaWVzOiAobmFtZTogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIGFwcGx5OiA8VD4odmFsdWU6IFRDb250ZXh0YWJsZTxUPikgPT4gVDtcbiAgdGFnczogKG5hbWU6IHN0cmluZyB8IHN0cmluZ1tdKSA9PiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZUNvbnRleHQgaW1wbGVtZW50cyBJVGFibGVDb250ZXh0IHtcbiAgcHJpdmF0ZSB0YWJsZT86IFRhYmxlO1xuXG4gIGNvbnN0cnVjdG9yKHRhYmxlOiBUYWJsZSkge1xuICAgIHRoaXMudGFibGUgPSB0YWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBjb25maWcoY29uZmlnOiBUQ29uZmlnKSB7XG4gICAgdGhpcy50YWJsZS5jb25maWcoY29uZmlnKTtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHB1YmxpYyBzZWxmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZSh0aGlzLnRhYmxlLnByb3RvLm5hbWUpO1xuICB9XG5cbiAgcHVibGljIG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5wcm90by5uYW1lO1xuICB9XG5cbiAgcHVibGljIHJlZihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgQWN0aW9uIG5hbWUgaXMgbm90IHNwZWNpZmllZGA7XG4gICAgICB0aGlzLnRhYmxlLnNlc3Npb24uY29tcGlsZUVycm9yKG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICB0aGlzLnRhYmxlLmRlcGVuZGVuY2llcyhuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlKG5hbWUpO1xuICB9XG5cbiAgcHVibGljIHJlc29sdmUobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuc2Vzc2lvbi5yZXNvbHZlKG5hbWUpO1xuICB9XG5cbiAgcHVibGljIHR5cGUodHlwZTogVGFibGVUeXBlKSB7XG4gICAgdGhpcy50YWJsZS50eXBlKHR5cGUpO1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHVibGljIHdoZXJlKHdoZXJlOiBUQ29udGV4dGFibGU8c3RyaW5nPikge1xuICAgIHRoaXMudGFibGUud2hlcmUod2hlcmUpO1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHVibGljIHByZU9wcyhzdGF0ZW1lbnQ6IFRDb250ZXh0YWJsZTxzdHJpbmcgfCBzdHJpbmdbXT4pIHtcbiAgICB0aGlzLnRhYmxlLnByZU9wcyhzdGF0ZW1lbnQpO1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHVibGljIHBvc3RPcHMoc3RhdGVtZW50OiBUQ29udGV4dGFibGU8c3RyaW5nIHwgc3RyaW5nW10+KSB7XG4gICAgdGhpcy50YWJsZS5wb3N0T3BzKHN0YXRlbWVudCk7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBwdWJsaWMgZGlzYWJsZWQoKSB7XG4gICAgdGhpcy50YWJsZS5kaXNhYmxlZCgpO1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHVibGljIHJlZHNoaWZ0KHJlZHNoaWZ0OiBkYXRhZm9ybS5JUmVkc2hpZnRPcHRpb25zKSB7XG4gICAgdGhpcy50YWJsZS5yZWRzaGlmdChyZWRzaGlmdCk7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBwdWJsaWMgYmlncXVlcnkoYmlncXVlcnk6IGRhdGFmb3JtLklCaWdRdWVyeU9wdGlvbnMpIHtcbiAgICB0aGlzLnRhYmxlLmJpZ3F1ZXJ5KGJpZ3F1ZXJ5KTtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHB1YmxpYyBkZXBlbmRlbmNpZXMobmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy50YWJsZS5kZXBlbmRlbmNpZXMobmFtZSk7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBwdWJsaWMgYXBwbHk8VD4odmFsdWU6IFRDb250ZXh0YWJsZTxUPik6IFQge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuICh2YWx1ZSBhcyBhbnkpKHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG4gIHB1YmxpYyB0YWdzKHRhZ3M6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy50YWJsZS50YWdzKHRhZ3MpO1xuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3RhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBQUEsb0RBQTRGO0lBQzVGLDZDQUE0QztJQUU1QyxJQUFZLFVBS1g7SUFMRCxXQUFZLFVBQVU7UUFDcEIsNkJBQWUsQ0FBQTtRQUNmLDJCQUFhLENBQUE7UUFDYix5Q0FBMkIsQ0FBQTtRQUMzQiwrQkFBaUIsQ0FBQTtJQUNuQixDQUFDLEVBTFcsVUFBVSxHQUFWLGtCQUFVLEtBQVYsa0JBQVUsUUFLckI7SUFDRCxJQUFZLGNBSVg7SUFKRCxXQUFZLGNBQWM7UUFDeEIsK0JBQWEsQ0FBQTtRQUNiLDZCQUFXLENBQUE7UUFDWCw2QkFBVyxDQUFBO0lBQ2IsQ0FBQyxFQUpXLGNBQWMsR0FBZCxzQkFBYyxLQUFkLHNCQUFjLFFBSXpCO0lBQ0QsSUFBWSxjQUdYO0lBSEQsV0FBWSxjQUFjO1FBQ3hCLHVDQUFxQixDQUFBO1FBQ3JCLDZDQUEyQixDQUFBO0lBQzdCLENBQUMsRUFIVyxjQUFjLEdBQWQsc0JBQWMsS0FBZCxzQkFBYyxRQUd6QjtJQUVZLFFBQUEsWUFBWSxHQUVyQjtRQUNGLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ25CLFVBQVU7WUFDVixVQUFVO1lBQ1Ysa0JBQWtCO1lBQ2xCLFFBQVE7WUFDUixTQUFTO1lBQ1Qsa0JBQWtCO1lBQ2xCLFVBQVU7WUFDVixPQUFPO1NBQ1I7S0FDRixDQUFDO0lBbUJGLE1BQWEsS0FBSztRQUFsQjtZQUNTLFVBQUssR0FBbUIsaUJBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO2dCQUNuRCxJQUFJLEVBQUUsTUFBTTtnQkFDWixRQUFRLEVBQUUsS0FBSztnQkFDZixJQUFJLEVBQUUsRUFBRTthQUNULENBQUMsQ0FBQztZQVFLLHNCQUFpQixHQUEyQyxFQUFFLENBQUM7WUFDL0QsdUJBQWtCLEdBQTJDLEVBQUUsQ0FBQztR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QyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlCLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVNLFFBQVE7WUFDYixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVNLFFBQVEsQ0FBQyxRQUFtQztZQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFTSxRQUFRLENBQUMsUUFBbUM7WUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUIsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRU0sWUFBWSxDQUFDLElBQVk7WUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRU0sS0FBSyxDQUFJLEtBQXNCO1lBQ3BDLElBQUksT0FBTyxLQUFLLEtBQUssVUFBVSxFQUFFO2dCQUMvQixPQUFRLEtBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM3QjtpQkFBTTtnQkFDTCxPQUFPLEtBQUssQ0FBQzthQUNkO1FBQ0gsQ0FBQztRQUNNLElBQUksQ0FBQyxJQUFjO1lBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztLQUNGO0lBdEZELG9DQXNGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElDb2x1bW5zRGVzY3JpcHRvciwgbWFwVG9Db2x1bW5Qcm90b0FycmF5LCBTZXNzaW9uIH0gZnJvbSBcIkBkYXRhZm9ybS9jb3JlL3Nlc3Npb25cIjtcbmltcG9ydCB7IGRhdGFmb3JtIH0gZnJvbSBcIkBkYXRhZm9ybS9wcm90b3NcIjtcblxuZXhwb3J0IGVudW0gVGFibGVUeXBlcyB7XG4gIFRBQkxFID0gXCJ0YWJsZVwiLFxuICBWSUVXID0gXCJ2aWV3XCIsXG4gIElOQ1JFTUVOVEFMID0gXCJpbmNyZW1lbnRhbFwiLFxuICBJTkxJTkUgPSBcImlubGluZVwiXG59XG5leHBvcnQgZW51bSBEaXN0U3R5bGVUeXBlcyB7XG4gIEVWRU4gPSBcImV2ZW5cIixcbiAgS0VZID0gXCJrZXlcIixcbiAgQUxMID0gXCJhbGxcIlxufVxuZXhwb3J0IGVudW0gU29ydFN0eWxlVHlwZXMge1xuICBDT01QT1VORCA9IFwiY29tcG91bmRcIixcbiAgSU5URVJMRUFWRUQgPSBcImludGVybGVhdmVkXCJcbn1cblxuZXhwb3J0IGNvbnN0IGlnbm9yZWRQcm9wczoge1xuICBbdGFibGVUeXBlOiBzdHJpbmddOiBBcnJheTxrZXlvZiBkYXRhZm9ybS5JVGFibGU+O1xufSA9IHtcbiAgW1RhYmxlVHlwZXMuSU5MSU5FXTogW1xuICAgIFwiYmlncXVlcnlcIixcbiAgICBcInJlZHNoaWZ0XCIsXG4gICAgXCJzcWxEYXRhV2FyZWhvdXNlXCIsXG4gICAgXCJwcmVPcHNcIixcbiAgICBcInBvc3RPcHNcIixcbiAgICBcImFjdGlvbkRlc2NyaXB0b3JcIixcbiAgICBcImRpc2FibGVkXCIsXG4gICAgXCJ3aGVyZVwiXG4gIF1cbn07XG5cbnR5cGUgVmFsdWVPZjxUPiA9IFRba2V5b2YgVF07XG5leHBvcnQgdHlwZSBUQ29udGV4dGFibGU8VD4gPSBUIHwgKChjdHg6IFRhYmxlQ29udGV4dCkgPT4gVCk7XG5leHBvcnQgdHlwZSBUYWJsZVR5cGUgPSBWYWx1ZU9mPFRhYmxlVHlwZXM+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFRDb25maWcge1xuICB0eXBlPzogVGFibGVUeXBlO1xuICBkZXBlbmRlbmNpZXM/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgdGFncz86IHN0cmluZ1tdO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgY29sdW1ucz86IElDb2x1bW5zRGVzY3JpcHRvcjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBwcm90ZWN0ZWQ/OiBib29sZWFuO1xuICByZWRzaGlmdD86IGRhdGFmb3JtLklSZWRzaGlmdE9wdGlvbnM7XG4gIGJpZ3F1ZXJ5PzogZGF0YWZvcm0uSUJpZ1F1ZXJ5T3B0aW9ucztcbiAgc3FsZGF0YXdhcmVob3VzZT86IGRhdGFmb3JtLklTUUxEYXRhV2FyZWhvdXNlT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxlIHtcbiAgcHVibGljIHByb3RvOiBkYXRhZm9ybS5UYWJsZSA9IGRhdGFmb3JtLlRhYmxlLmNyZWF0ZSh7XG4gICAgdHlwZTogXCJ2aWV3XCIsXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIHRhZ3M6IFtdXG4gIH0pO1xuXG4gIC8vIEhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFNlc3Npb24gaW5zdGFuY2UuXG4gIHB1YmxpYyBzZXNzaW9uOiBTZXNzaW9uO1xuXG4gIC8vIFdlIGRlbGF5IGNvbnRleHRpZmljYXRpb24gdW50aWwgdGhlIGZpbmFsIGNvbXBpbGUgc3RlcCwgc28gaG9sZCB0aGVzZSBoZXJlIGZvciBub3cuXG4gIHB1YmxpYyBjb250ZXh0YWJsZVF1ZXJ5OiBUQ29udGV4dGFibGU8c3RyaW5nPjtcbiAgcHJpdmF0ZSBjb250ZXh0YWJsZVdoZXJlOiBUQ29udGV4dGFibGU8c3RyaW5nPjtcbiAgcHJpdmF0ZSBjb250ZXh0YWJsZVByZU9wczogQXJyYXk8VENvbnRleHRhYmxlPHN0cmluZyB8IHN0cmluZ1tdPj4gPSBbXTtcbiAgcHJpdmF0ZSBjb250ZXh0YWJsZVBvc3RPcHM6IEFycmF5PFRDb250ZXh0YWJsZTxzdHJpbmcgfCBzdHJpbmdbXT4+ID0gW107XG5cbiAgcHVibGljIGNvbmZpZyhjb25maWc6IFRDb25maWcpIHtcbiAgICBpZiAoY29uZmlnLnR5cGUpIHtcbiAgICAgIHRoaXMudHlwZShjb25maWcudHlwZSk7XG4gICAgfVxuICAgIGlmIChjb25maWcuZGVwZW5kZW5jaWVzKSB7XG4gICAgICB0aGlzLmRlcGVuZGVuY2llcyhjb25maWcuZGVwZW5kZW5jaWVzKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5kaXNhYmxlZCgpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnJlZHNoaWZ0KSB7XG4gICAgICB0aGlzLnJlZHNoaWZ0KGNvbmZpZy5yZWRzaGlmdCk7XG4gICAgfVxuICAgIGlmIChjb25maWcuYmlncXVlcnkpIHtcbiAgICAgIHRoaXMuYmlncXVlcnkoY29uZmlnLmJpZ3F1ZXJ5KTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5zcWxkYXRhd2FyZWhvdXNlKSB7XG4gICAgICB0aGlzLnNxbGRhdGF3YXJlaG91c2UoY29uZmlnLnNxbGRhdGF3YXJlaG91c2UpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnRhZ3MpIHtcbiAgICAgIHRoaXMudGFncyhjb25maWcudGFncyk7XG4gICAgfVxuICAgIGlmIChjb25maWcuZGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb24oY29uZmlnLmRlc2NyaXB0aW9uKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5jb2x1bW5zKSB7XG4gICAgICB0aGlzLmNvbHVtbnMoY29uZmlnLmNvbHVtbnMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIHR5cGUodHlwZTogVGFibGVUeXBlKSB7XG4gICAgdGhpcy5wcm90by50eXBlID0gdHlwZSBhcyBzdHJpbmc7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgcXVlcnkocXVlcnk6IFRDb250ZXh0YWJsZTxzdHJpbmc+KSB7XG4gICAgdGhpcy5jb250ZXh0YWJsZVF1ZXJ5ID0gcXVlcnk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgd2hlcmUod2hlcmU6IFRDb250ZXh0YWJsZTxzdHJpbmc+KSB7XG4gICAgdGhpcy5jb250ZXh0YWJsZVdoZXJlID0gd2hlcmU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgcHJlT3BzKHByZXM6IFRDb250ZXh0YWJsZTxzdHJpbmcgfCBzdHJpbmdbXT4pIHtcbiAgICB0aGlzLmNvbnRleHRhYmxlUHJlT3BzLnB1c2gocHJlcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgcG9zdE9wcyhwb3N0czogVENvbnRleHRhYmxlPHN0cmluZyB8IHN0cmluZ1tdPikge1xuICAgIHRoaXMuY29udGV4dGFibGVQb3N0T3BzLnB1c2gocG9zdHMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGRpc2FibGVkKCkge1xuICAgIHRoaXMucHJvdG8uZGlzYWJsZWQgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIHNxbGRhdGF3YXJlaG91c2Uoc3FsRGF0YVdhcmVob3VzZTogZGF0YWZvcm0uSVNRTERhdGFXYXJlaG91c2VPcHRpb25zKSB7XG4gICAgdGhpcy5wcm90by5zcWxEYXRhV2FyZWhvdXNlID0gZGF0YWZvcm0uU1FMRGF0YVdhcmVob3VzZU9wdGlvbnMuY3JlYXRlKHNxbERhdGFXYXJlaG91c2UpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIHJlZHNoaWZ0KHJlZHNoaWZ0OiBkYXRhZm9ybS5JUmVkc2hpZnRPcHRpb25zKSB7XG4gICAgdGhpcy5wcm90by5yZWRzaGlmdCA9IGRhdGFmb3JtLlJlZHNoaWZ0T3B0aW9ucy5jcmVhdGUocmVkc2hpZnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGJpZ3F1ZXJ5KGJpZ3F1ZXJ5OiBkYXRhZm9ybS5JQmlnUXVlcnlPcHRpb25zKSB7XG4gICAgdGhpcy5wcm90by5iaWdxdWVyeSA9IGRhdGFmb3JtLkJpZ1F1ZXJ5T3B0aW9ucy5jcmVhdGUoYmlncXVlcnkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGRlcGVuZGVuY2llcyh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICBjb25zdCBuZXdEZXBlbmRlbmNpZXMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyBbdmFsdWVdIDogdmFsdWU7XG4gICAgbmV3RGVwZW5kZW5jaWVzLmZvckVhY2goZCA9PiB7XG4gICAgICBjb25zdCB0YWJsZSA9IHRoaXMuc2Vzc2lvbi50YWJsZXNbZF07XG5cbiAgICAgIGlmICghIXRhYmxlICYmIHRhYmxlLnByb3RvLnR5cGUgPT09IFwiaW5saW5lXCIpIHtcbiAgICAgICAgdGFibGUucHJvdG8uZGVwZW5kZW5jaWVzLmZvckVhY2goY2hpbGREZXAgPT4gdGhpcy5hZGREZXBlbmRlbmN5KGNoaWxkRGVwKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFkZERlcGVuZGVuY3koZCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgdGFncyh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICBjb25zdCBuZXdUYWdzID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gW3ZhbHVlXSA6IHZhbHVlO1xuICAgIG5ld1RhZ3MuZm9yRWFjaCh0ID0+IHtcbiAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5zZXNzaW9uLnRhYmxlc1t0XTtcbiAgICAgIHRoaXMucHJvdG8udGFncy5wdXNoKHQpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMucHJvdG8uYWN0aW9uRGVzY3JpcHRvcikge1xuICAgICAgdGhpcy5wcm90by5hY3Rpb25EZXNjcmlwdG9yID0ge307XG4gICAgfVxuICAgIHRoaXMucHJvdG8uYWN0aW9uRGVzY3JpcHRvci5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGNvbHVtbnMoY29sdW1uczogSUNvbHVtbnNEZXNjcmlwdG9yKSB7XG4gICAgaWYgKCF0aGlzLnByb3RvLmFjdGlvbkRlc2NyaXB0b3IpIHtcbiAgICAgIHRoaXMucHJvdG8uYWN0aW9uRGVzY3JpcHRvciA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnByb3RvLmFjdGlvbkRlc2NyaXB0b3IuY29sdW1ucyA9IG1hcFRvQ29sdW1uUHJvdG9BcnJheShjb2x1bW5zKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBjb21waWxlKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgVGFibGVDb250ZXh0KHRoaXMpO1xuXG4gICAgdGhpcy5wcm90by5xdWVyeSA9IGNvbnRleHQuYXBwbHkodGhpcy5jb250ZXh0YWJsZVF1ZXJ5KTtcblxuICAgIGlmICh0aGlzLmNvbnRleHRhYmxlV2hlcmUpIHtcbiAgICAgIHRoaXMucHJvdG8ud2hlcmUgPSBjb250ZXh0LmFwcGx5KHRoaXMuY29udGV4dGFibGVXaGVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb250ZXh0YWJsZVByZU9wcy5mb3JFYWNoKGNvbnRleHRhYmxlUHJlT3BzID0+IHtcbiAgICAgIGNvbnN0IGFwcGxpZWRQcmVzID0gY29udGV4dC5hcHBseShjb250ZXh0YWJsZVByZU9wcyk7XG4gICAgICB0aGlzLnByb3RvLnByZU9wcyA9ICh0aGlzLnByb3RvLnByZU9wcyB8fCBbXSkuY29uY2F0KFxuICAgICAgICB0eXBlb2YgYXBwbGllZFByZXMgPT0gXCJzdHJpbmdcIiA/IFthcHBsaWVkUHJlc10gOiBhcHBsaWVkUHJlc1xuICAgICAgKTtcbiAgICB9KTtcbiAgICB0aGlzLmNvbnRleHRhYmxlUHJlT3BzID0gW107XG5cbiAgICB0aGlzLmNvbnRleHRhYmxlUG9zdE9wcy5mb3JFYWNoKGNvbnRleHRhYmxlUG9zdE9wcyA9PiB7XG4gICAgICBjb25zdCBhcHBsaWVkUG9zdHMgPSBjb250ZXh0LmFwcGx5KGNvbnRleHRhYmxlUG9zdE9wcyk7XG4gICAgICB0aGlzLnByb3RvLnBvc3RPcHMgPSAodGhpcy5wcm90by5wb3N0T3BzIHx8IFtdKS5jb25jYXQoXG4gICAgICAgIHR5cGVvZiBhcHBsaWVkUG9zdHMgPT0gXCJzdHJpbmdcIiA/IFthcHBsaWVkUG9zdHNdIDogYXBwbGllZFBvc3RzXG4gICAgICApO1xuICAgIH0pO1xuICAgIHRoaXMuY29udGV4dGFibGVQb3N0T3BzID0gW107XG5cbiAgICByZXR1cm4gdGhpcy5wcm90bztcbiAgfVxuXG4gIHByaXZhdGUgYWRkRGVwZW5kZW5jeShkZXBlbmRlbmN5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm90by5kZXBlbmRlbmNpZXMuaW5kZXhPZihkZXBlbmRlbmN5KSA8IDApIHtcbiAgICAgIHRoaXMucHJvdG8uZGVwZW5kZW5jaWVzLnB1c2goZGVwZW5kZW5jeSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlQ29udGV4dCB7XG4gIGNvbmZpZzogKGNvbmZpZzogVENvbmZpZykgPT4gc3RyaW5nO1xuICBzZWxmOiAoKSA9PiBzdHJpbmc7XG4gIG5hbWU6ICgpID0+IHN0cmluZztcbiAgcmVmOiAobmFtZTogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIHJlc29sdmU6IChuYW1lOiBzdHJpbmcpID0+IHN0cmluZztcbiAgdHlwZTogKHR5cGU6IFRhYmxlVHlwZSkgPT4gc3RyaW5nO1xuICB3aGVyZTogKHdoZXJlOiBUQ29udGV4dGFibGU8c3RyaW5nPikgPT4gc3RyaW5nO1xuICBwcmVPcHM6IChzdGF0ZW1lbnQ6IFRDb250ZXh0YWJsZTxzdHJpbmcgfCBzdHJpbmdbXT4pID0+IHN0cmluZztcbiAgcG9zdE9wczogKHN0YXRlbWVudDogVENvbnRleHRhYmxlPHN0cmluZyB8IHN0cmluZ1tdPikgPT4gc3RyaW5nO1xuICBkaXNhYmxlZDogKCkgPT4gc3RyaW5nO1xuICByZWRzaGlmdDogKHJlZHNoaWZ0OiBkYXRhZm9ybS5JUmVkc2hpZnRPcHRpb25zKSA9PiBzdHJpbmc7XG4gIGJpZ3F1ZXJ5OiAoYmlncXVlcnk6IGRhdGFmb3JtLklCaWdRdWVyeU9wdGlvbnMpID0+IHN0cmluZztcbiAgZGVwZW5kZW5jaWVzOiAobmFtZTogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIGFwcGx5OiA8VD4odmFsdWU6IFRDb250ZXh0YWJsZTxUPikgPT4gVDtcbiAgdGFnczogKG5hbWU6IHN0cmluZyB8IHN0cmluZ1tdKSA9PiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZUNvbnRleHQgaW1wbGVtZW50cyBJVGFibGVDb250ZXh0IHtcbiAgcHJpdmF0ZSB0YWJsZT86IFRhYmxlO1xuXG4gIGNvbnN0cnVjdG9yKHRhYmxlOiBUYWJsZSkge1xuICAgIHRoaXMudGFibGUgPSB0YWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBjb25maWcoY29uZmlnOiBUQ29uZmlnKSB7XG4gICAgdGhpcy50YWJsZS5jb25maWcoY29uZmlnKTtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHB1YmxpYyBzZWxmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZSh0aGlzLnRhYmxlLnByb3RvLm5hbWUpO1xuICB9XG5cbiAgcHVibGljIG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5wcm90by5uYW1lO1xuICB9XG5cbiAgcHVibGljIHJlZihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgQWN0aW9uIG5hbWUgaXMgbm90IHNwZWNpZmllZGA7XG4gICAgICB0aGlzLnRhYmxlLnNlc3Npb24uY29tcGlsZUVycm9yKG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICB0aGlzLnRhYmxlLmRlcGVuZGVuY2llcyhuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlKG5hbWUpO1xuICB9XG5cbiAgcHVibGljIHJlc29sdmUobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuc2Vzc2lvbi5yZXNvbHZlKG5hbWUpO1xuICB9XG5cbiAgcHVibGljIHR5cGUodHlwZTogVGFibGVUeXBlKSB7XG4gICAgdGhpcy50YWJsZS50eXBlKHR5cGUpO1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHVibGljIHdoZXJlKHdoZXJlOiBUQ29udGV4dGFibGU8c3RyaW5nPikge1xuICAgIHRoaXMudGFibGUud2hlcmUod2hlcmUpO1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHVibGljIHByZU9wcyhzdGF0ZW1lbnQ6IFRDb250ZXh0YWJsZTxzdHJpbmcgfCBzdHJpbmdbXT4pIHtcbiAgICB0aGlzLnRhYmxlLnByZU9wcyhzdGF0ZW1lbnQpO1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHVibGljIHBvc3RPcHMoc3RhdGVtZW50OiBUQ29udGV4dGFibGU8c3RyaW5nIHwgc3RyaW5nW10+KSB7XG4gICAgdGhpcy50YWJsZS5wb3N0T3BzKHN0YXRlbWVudCk7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBwdWJsaWMgZGlzYWJsZWQoKSB7XG4gICAgdGhpcy50YWJsZS5kaXNhYmxlZCgpO1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHVibGljIHJlZHNoaWZ0KHJlZHNoaWZ0OiBkYXRhZm9ybS5JUmVkc2hpZnRPcHRpb25zKSB7XG4gICAgdGhpcy50YWJsZS5yZWRzaGlmdChyZWRzaGlmdCk7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBwdWJsaWMgYmlncXVlcnkoYmlncXVlcnk6IGRhdGFmb3JtLklCaWdRdWVyeU9wdGlvbnMpIHtcbiAgICB0aGlzLnRhYmxlLmJpZ3F1ZXJ5KGJpZ3F1ZXJ5KTtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHB1YmxpYyBkZXBlbmRlbmNpZXMobmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy50YWJsZS5kZXBlbmRlbmNpZXMobmFtZSk7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBwdWJsaWMgYXBwbHk8VD4odmFsdWU6IFRDb250ZXh0YWJsZTxUPik6IFQge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuICh2YWx1ZSBhcyBhbnkpKHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG4gIHB1YmxpYyB0YWdzKHRhZ3M6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy50YWJsZS50YWdzKHRhZ3MpO1xuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG4iXX0=

@@ -14,2 +14,3 @@ (function (factory) {

const table_1 = require("@dataform/core/table");
const SQL_DATA_WAREHOUSE_DIST_HASH_REGEXP = new RegExp("HASH\\s*\\(\\s*\\w*\\s*\\)\\s*");
function relativePath(path, base) {

@@ -157,2 +158,11 @@ if (base.length == 0) {

}
if (action.sqlDataWarehouse && action.sqlDataWarehouse.distribution) {
const distribution = action.sqlDataWarehouse.distribution.toUpperCase();
if (distribution !== "REPLICATE" &&
distribution !== "ROUND_ROBIN" &&
!SQL_DATA_WAREHOUSE_DIST_HASH_REGEXP.test(distribution)) {
const message = `Invalid value for sqldatawarehouse distribution: "${distribution}"`;
validationErrors.push(protos_1.dataform.ValidationError.create({ message, actionName }));
}
}
if (!!action.redshift) {

@@ -218,2 +228,2 @@ if (Object.keys(action.redshift).length === 0 ||

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBQUEsNkNBQTRDO0lBQzVDLGdEQUFtRjtJQUVuRixTQUFnQixZQUFZLENBQUMsSUFBWSxFQUFFLElBQVk7UUFDckQsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNwQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVCLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQjthQUFNO1lBQ0wsT0FBTyxRQUFRLENBQUM7U0FDakI7SUFDSCxDQUFDO0lBVkQsb0NBVUM7SUFFRCxTQUFnQixZQUFZLENBQUMsSUFBWTtRQUN2QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLE9BQU8sVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFIRCxvQ0FHQztJQUVELFNBQWdCLG9CQUFvQixDQUFDLEtBQWE7UUFDaEQsT0FBTyxLQUFLO2FBQ1QsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7YUFDaEIsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7YUFDaEIsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBTEQsb0RBS0M7SUFFRCxTQUFnQixhQUFhLENBQUMsUUFBa0IsRUFBRSxNQUFnQjtRQUNoRSxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUMxQixPQUFPLENBQUMsRUFBRSxDQUNSLElBQUksTUFBTSxDQUNSLEdBQUc7WUFDRCxPQUFPO2lCQUNKLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLENBQUM7aUJBQ3JDLEtBQUssQ0FBQyxHQUFHLENBQUM7aUJBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNiLEdBQUcsQ0FDTixDQUNKLENBQUM7UUFDRixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBYkQsc0NBYUM7SUFFRCxTQUFnQixhQUFhLENBQUMsT0FBZTtRQUMzQyxJQUFJLFFBQWdCLENBQUM7UUFDckIsTUFBTSxLQUFLLEdBQUcsZUFBZSxFQUFFLENBQUM7UUFDaEMsT0FBTyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ25CLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDYixTQUFTO2FBQ1Y7WUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDL0IsU0FBUzthQUNWO1lBQ0QsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUNyQyxTQUFTO2FBQ1Y7WUFDRCxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRTtnQkFDeEUsU0FBUzthQUNWO1lBQ0QsTUFBTTtTQUNQO1FBQ0QsT0FBTyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFwQkQsc0NBb0JDO0lBRUQsU0FBUyxlQUFlO1FBQ3RCLE1BQU0seUJBQXlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDO1FBQzFELElBQUk7WUFDRixLQUFLLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3ZDLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxDQUFDO1lBQ0YsT0FBUSxJQUFJLEtBQUssRUFBRSxDQUFDLEtBQXNDLENBQUM7U0FDNUQ7Z0JBQVM7WUFDUixLQUFLLENBQUMsaUJBQWlCLEdBQUcseUJBQXlCLENBQUM7U0FDckQ7SUFDSCxDQUFDO0lBRUQsU0FBZ0IsY0FBYyxDQUFDLEtBQThCO1FBQzNELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwQyxPQUFPLENBQ0wsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLElBQUksV0FBVyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDM0UsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLElBQUksV0FBVyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FDMUUsQ0FBQztJQUNKLENBQUM7SUFQRCx3Q0FPQztJQUVELFNBQVMsa0JBQWtCLENBQUMsS0FBSztRQUMvQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQ3RCLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7YUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxTQUFTLHdCQUF3QixDQUFDLElBQVM7UUFDekMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxPQUFPLENBQ0wsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDaEYsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUN6QixDQUFDO0lBQ0osQ0FBQztJQUVELFNBQWdCLFFBQVEsQ0FBQyxhQUFzQztRQUM3RCxNQUFNLGdCQUFnQixHQUFnQyxFQUFFLENBQUM7UUFHekQsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FDMUIsYUFBYSxDQUFDLE1BQU0sRUFDcEIsYUFBYSxDQUFDLFVBQVUsRUFDeEIsYUFBYSxDQUFDLFVBQVUsQ0FDekIsQ0FBQztRQUNGLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFHN0QsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMxQixJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM1RSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUMvQixNQUFNLE9BQU8sR0FBRyxvR0FBb0csTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDO2dCQUNuSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsaUJBQVEsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNqRjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxhQUFhLEdBQWtELEVBQUUsQ0FBQztRQUN4RSxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFHcEUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMxQixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQy9CLENBQUMsTUFBTSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQy9DLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQzFDLE1BQU0sT0FBTyxHQUFHLHNDQUFzQyxNQUFNLENBQUMsSUFBSSxpQkFBaUIsVUFBVSx5QkFBeUIsQ0FBQztvQkFDdEgsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGlCQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ2pGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUdILE1BQU0sYUFBYSxHQUFHLENBQ3BCLE1BQWlDLEVBQ2pDLFVBQXVDLEVBQzlCLEVBQUU7WUFDWCxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNuQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUMvQixNQUFNLE9BQU8sR0FBRywyQ0FBMkMsVUFBVTtxQkFDbEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztxQkFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQztnQkFDbkMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGlCQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hGLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzFDLE9BQU8sYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFDLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtnQkFDcEMsTUFBTTthQUNQO1NBQ0Y7UUFHRCxhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNwQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBRy9CLElBQ0UsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJO2dCQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQVUsQ0FBQztxQkFDcEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsa0JBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDM0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDOUI7Z0JBQ0EsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLENBQUMsa0JBQVUsQ0FBQyxDQUFDO2dCQUN2RCxNQUFNLE9BQU8sR0FBRyxtRUFBbUUsZUFBZSxFQUFFLENBQUM7Z0JBQ3JHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxpQkFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ2pGO1lBR0QsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGtCQUFVLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUMxRixNQUFNLE9BQU8sR0FBRywwR0FBMEcsQ0FBQztnQkFDM0gsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGlCQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDakY7WUFHRCxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUNyQixJQUNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO29CQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQ2hDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQzdELEVBQ0Q7b0JBQ0EsTUFBTSxPQUFPLEdBQUcsdUNBQXVDLENBQUM7b0JBQ3hELGdCQUFnQixDQUFDLElBQUksQ0FBQyxpQkFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNqRjtnQkFDRCxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7Z0JBRTFCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7b0JBQ3hELE1BQU0sS0FBSyxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUN6RixNQUFNLEtBQUssR0FBRyxFQUFFLFNBQVMsRUFBRSxzQkFBYyxFQUFFLENBQUM7b0JBQzVDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztpQkFDdkM7Z0JBQ0QsSUFDRSxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVM7b0JBQ3pCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQzdEO29CQUNBLE1BQU0sS0FBSyxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUMzRixNQUFNLEtBQUssR0FBRyxFQUFFLFNBQVMsRUFBRSxzQkFBYyxFQUFFLENBQUM7b0JBQzVDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztpQkFDdkM7Z0JBRUQsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFOzRCQUMvQyxNQUFNLE9BQU8sR0FBRyxhQUFhLEdBQUcsa0JBQWtCLENBQUM7NEJBQ25ELGdCQUFnQixDQUFDLElBQUksQ0FBQyxpQkFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO3lCQUNqRjtvQkFDSCxDQUFDLENBQUMsQ0FBQztvQkFFSCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQ3JDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3JDLElBQ0UsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDOzRCQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztpQ0FDckIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lDQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUNuQzs0QkFDQSxNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDOzRCQUN6RCxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsSUFBSSxrREFBa0QsZ0JBQWdCLEVBQUUsQ0FBQzs0QkFDNUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGlCQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7eUJBQ2pGO29CQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFHRCxJQUFJLENBQUMsQ0FBQyxvQkFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDL0Isb0JBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO29CQUM5QyxJQUFJLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO3dCQUNqRCxNQUFNLE9BQU8sR0FBRyxrQ0FBa0MsV0FBVyxzREFBc0QsTUFBTSxDQUFDLElBQUksd0JBQXdCLENBQUM7d0JBQ3ZKLGdCQUFnQixDQUFDLElBQUksQ0FBQyxpQkFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUNqRjtnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLGlCQUFpQixHQUNyQixhQUFhLENBQUMsV0FBVyxJQUFJLGFBQWEsQ0FBQyxXQUFXLENBQUMsaUJBQWlCO1lBQ3RFLENBQUMsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLGlCQUFpQjtZQUM3QyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVQsT0FBTyxpQkFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQXBKRCw0QkFvSkM7SUFFRCxTQUFnQixPQUFPLENBQUksV0FBa0I7UUFDM0MsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBa0IsRUFBRSxZQUFpQixFQUFFLEVBQUU7WUFDbEUsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUM7SUFKRCwwQkFJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRhdGFmb3JtIH0gZnJvbSBcIkBkYXRhZm9ybS9wcm90b3NcIjtcbmltcG9ydCB7IERpc3RTdHlsZVR5cGVzLCBpZ25vcmVkUHJvcHMsIFNvcnRTdHlsZVR5cGVzLCBUYWJsZVR5cGVzIH0gZnJvbSBcIi4vdGFibGVcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbGF0aXZlUGF0aChwYXRoOiBzdHJpbmcsIGJhc2U6IHN0cmluZykge1xuICBpZiAoYmFzZS5sZW5ndGggPT0gMCkge1xuICAgIHJldHVybiBwYXRoO1xuICB9XG4gIGNvbnN0IHN0cmlwcGVkID0gcGF0aC5zdWJzdHIoYmFzZS5sZW5ndGgpO1xuICBpZiAoc3RyaXBwZWQuc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICByZXR1cm4gc3RyaXBwZWQuc3Vic3RyKDEpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdHJpcHBlZDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFzZUZpbGVuYW1lKHBhdGg6IHN0cmluZykge1xuICBjb25zdCBwYXRoU3BsaXRzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gIHJldHVybiBwYXRoU3BsaXRzW3BhdGhTcGxpdHMubGVuZ3RoIC0gMV0uc3BsaXQoXCIuXCIpWzBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVOYW1lRnJpZW5kbHkodmFsdWU6IHN0cmluZykge1xuICByZXR1cm4gdmFsdWVcbiAgICAucmVwbGFjZShcIi1cIiwgXCJcIilcbiAgICAucmVwbGFjZShcIkBcIiwgXCJcIilcbiAgICAucmVwbGFjZShcIi9cIiwgXCJcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFBhdHRlcm5zKHBhdHRlcm5zOiBzdHJpbmdbXSwgdmFsdWVzOiBzdHJpbmdbXSkge1xuICBjb25zdCByZWdleHBzID0gcGF0dGVybnMubWFwKFxuICAgIHBhdHRlcm4gPT5cbiAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgIFwiXlwiICtcbiAgICAgICAgICBwYXR0ZXJuXG4gICAgICAgICAgICAucmVwbGFjZSgvWy4rP14ke30oKXxbXFxdXFxcXF0vZywgXCJcXFxcJCZcIilcbiAgICAgICAgICAgIC5zcGxpdChcIipcIilcbiAgICAgICAgICAgIC5qb2luKFwiLipcIikgK1xuICAgICAgICAgIFwiJFwiXG4gICAgICApXG4gICk7XG4gIHJldHVybiB2YWx1ZXMuZmlsdGVyKHZhbHVlID0+IHJlZ2V4cHMuZmlsdGVyKHJlZ2V4cCA9PiByZWdleHAudGVzdCh2YWx1ZSkpLmxlbmd0aCA+IDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FsbGVyRmlsZShyb290RGlyOiBzdHJpbmcpIHtcbiAgbGV0IGxhc3RmaWxlOiBzdHJpbmc7XG4gIGNvbnN0IHN0YWNrID0gZ2V0Q3VycmVudFN0YWNrKCk7XG4gIHdoaWxlIChzdGFjay5sZW5ndGgpIHtcbiAgICBsYXN0ZmlsZSA9IHN0YWNrLnNoaWZ0KCkuZ2V0RmlsZU5hbWUoKTtcbiAgICBpZiAoIWxhc3RmaWxlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCFsYXN0ZmlsZS5pbmNsdWRlcyhyb290RGlyKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChsYXN0ZmlsZS5pbmNsdWRlcyhcIm5vZGVfbW9kdWxlc1wiKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICghKGxhc3RmaWxlLmluY2x1ZGVzKFwiZGVmaW5pdGlvbnMvXCIpIHx8IGxhc3RmaWxlLmluY2x1ZGVzKFwibW9kZWxzL1wiKSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4gcmVsYXRpdmVQYXRoKGxhc3RmaWxlLCByb290RGlyKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFN0YWNrKCk6IE5vZGVKUy5DYWxsU2l0ZVtdIHtcbiAgY29uc3Qgb3JpZ2luYWxQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlO1xuICB0cnkge1xuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gKGVyciwgc3RhY2spID0+IHtcbiAgICAgIHJldHVybiBzdGFjaztcbiAgICB9O1xuICAgIHJldHVybiAobmV3IEVycm9yKCkuc3RhY2sgYXMgdW5rbm93bikgYXMgTm9kZUpTLkNhbGxTaXRlW107XG4gIH0gZmluYWxseSB7XG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBvcmlnaW5hbFByZXBhcmVTdGFja1RyYWNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncmFwaEhhc0Vycm9ycyhncmFwaDogZGF0YWZvcm0uSUNvbXBpbGVkR3JhcGgpIHtcbiAgY29uc3QgZ3JhcGhFcnJvcnMgPSB2YWxpZGF0ZShncmFwaCk7XG5cbiAgcmV0dXJuIChcbiAgICAoZ3JhcGhFcnJvcnMuY29tcGlsYXRpb25FcnJvcnMgJiYgZ3JhcGhFcnJvcnMuY29tcGlsYXRpb25FcnJvcnMubGVuZ3RoID4gMCkgfHxcbiAgICAoZ3JhcGhFcnJvcnMudmFsaWRhdGlvbkVycm9ycyAmJiBncmFwaEVycm9ycy52YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCA+IDApXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldFByZWRlZmluZWRUeXBlcyh0eXBlcyk6IHN0cmluZyB7XG4gIHJldHVybiBPYmplY3Qua2V5cyh0eXBlcylcbiAgICAubWFwKGtleSA9PiBgXCIke3R5cGVzW2tleV19XCJgKVxuICAgIC5qb2luKFwiIHwgXCIpO1xufVxuXG5mdW5jdGlvbiBvYmplY3RFeGlzdHNPcklzTm9uRW1wdHkocHJvcDogYW55KTogYm9vbGVhbiB7XG4gIGlmICghcHJvcCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgKEFycmF5LmlzQXJyYXkocHJvcCkgJiYgISFwcm9wLmxlbmd0aCkgfHxcbiAgICAoIUFycmF5LmlzQXJyYXkocHJvcCkgJiYgdHlwZW9mIHByb3AgPT09IFwib2JqZWN0XCIgJiYgISFPYmplY3Qua2V5cyhwcm9wKS5sZW5ndGgpIHx8XG4gICAgdHlwZW9mIHByb3AgIT09IFwib2JqZWN0XCJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlKGNvbXBpbGVkR3JhcGg6IGRhdGFmb3JtLklDb21waWxlZEdyYXBoKTogZGF0YWZvcm0uSUdyYXBoRXJyb3JzIHtcbiAgY29uc3QgdmFsaWRhdGlvbkVycm9yczogZGF0YWZvcm0uSVZhbGlkYXRpb25FcnJvcltdID0gW107XG5cbiAgLy8gQ2hlY2sgdGhlcmUgYXJlbid0IGFueSBkdXBsaWNhdGUgbmFtZXMuXG4gIGNvbnN0IGFsbEFjdGlvbnMgPSBbXS5jb25jYXQoXG4gICAgY29tcGlsZWRHcmFwaC50YWJsZXMsXG4gICAgY29tcGlsZWRHcmFwaC5hc3NlcnRpb25zLFxuICAgIGNvbXBpbGVkR3JhcGgub3BlcmF0aW9uc1xuICApO1xuICBjb25zdCBhbGxBY3Rpb25OYW1lcyA9IGFsbEFjdGlvbnMubWFwKGFjdGlvbiA9PiBhY3Rpb24ubmFtZSk7XG5cbiAgLy8gQ2hlY2sgdGhlcmUgYXJlIG5vIGR1cGxpY2F0ZSBhY3Rpb24gbmFtZXMuXG4gIGFsbEFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgIGlmIChhbGxBY3Rpb25zLmZpbHRlcihzdWJBY3Rpb24gPT4gc3ViQWN0aW9uLm5hbWUgPT0gYWN0aW9uLm5hbWUpLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IGFjdGlvbk5hbWUgPSBhY3Rpb24ubmFtZTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgRHVwbGljYXRlIGFjdGlvbiBuYW1lIGRldGVjdGVkLCBuYW1lcyBtdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgdGFibGVzLCBhc3NlcnRpb25zLCBhbmQgb3BlcmF0aW9uczogXCIke2FjdGlvbi5uYW1lfVwiYDtcbiAgICAgIHZhbGlkYXRpb25FcnJvcnMucHVzaChkYXRhZm9ybS5WYWxpZGF0aW9uRXJyb3IuY3JlYXRlKHsgbWVzc2FnZSwgYWN0aW9uTmFtZSB9KSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBhY3Rpb25zQnlOYW1lOiB7IFtuYW1lOiBzdHJpbmddOiBkYXRhZm9ybS5JRXhlY3V0aW9uQWN0aW9uIH0gPSB7fTtcbiAgYWxsQWN0aW9ucy5mb3JFYWNoKGFjdGlvbiA9PiAoYWN0aW9uc0J5TmFtZVthY3Rpb24ubmFtZV0gPSBhY3Rpb24pKTtcblxuICAvLyBDaGVjayBhbGwgZGVwZW5kZW5jaWVzIGFjdHVhbGx5IGV4aXN0LlxuICBhbGxBY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICBjb25zdCBhY3Rpb25OYW1lID0gYWN0aW9uLm5hbWU7XG4gICAgKGFjdGlvbi5kZXBlbmRlbmNpZXMgfHwgW10pLmZvckVhY2goZGVwZW5kZW5jeSA9PiB7XG4gICAgICBpZiAoYWxsQWN0aW9uTmFtZXMuaW5kZXhPZihkZXBlbmRlbmN5KSA8IDApIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBNaXNzaW5nIGRlcGVuZGVuY3kgZGV0ZWN0ZWQ6IE5vZGUgXCIke2FjdGlvbi5uYW1lfVwiIGRlcGVuZHMgb24gXCIke2RlcGVuZGVuY3l9XCIgd2hpY2ggZG9lcyBub3QgZXhpc3QuYDtcbiAgICAgICAgdmFsaWRhdGlvbkVycm9ycy5wdXNoKGRhdGFmb3JtLlZhbGlkYXRpb25FcnJvci5jcmVhdGUoeyBtZXNzYWdlLCBhY3Rpb25OYW1lIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQ2hlY2sgZm9yIGNpcmN1bGFyIGRlcGVuZGVuY2llcy5cbiAgY29uc3QgY2hlY2tDaXJjdWxhciA9IChcbiAgICBhY3Rpb246IGRhdGFmb3JtLklFeGVjdXRpb25BY3Rpb24sXG4gICAgZGVwZW5kZW50czogZGF0YWZvcm0uSUV4ZWN1dGlvbkFjdGlvbltdXG4gICk6IGJvb2xlYW4gPT4ge1xuICAgIGlmIChkZXBlbmRlbnRzLmluZGV4T2YoYWN0aW9uKSA+PSAwKSB7XG4gICAgICBjb25zdCBhY3Rpb25OYW1lID0gYWN0aW9uLm5hbWU7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYENpcmN1bGFyIGRlcGVuZGVuY3kgZGV0ZWN0ZWQgaW4gY2hhaW46IFske2RlcGVuZGVudHNcbiAgICAgICAgLm1hcChkID0+IGQubmFtZSlcbiAgICAgICAgLmpvaW4oXCIgPiBcIil9ID4gJHthY3Rpb24ubmFtZX1dYDtcbiAgICAgIHZhbGlkYXRpb25FcnJvcnMucHVzaChkYXRhZm9ybS5WYWxpZGF0aW9uRXJyb3IuY3JlYXRlKHsgbWVzc2FnZSwgYWN0aW9uTmFtZSB9KSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIChhY3Rpb24uZGVwZW5kZW5jaWVzIHx8IFtdKS5zb21lKGQgPT4ge1xuICAgICAgcmV0dXJuIGFjdGlvbnNCeU5hbWVbZF0gJiYgY2hlY2tDaXJjdWxhcihhY3Rpb25zQnlOYW1lW2RdLCBkZXBlbmRlbnRzLmNvbmNhdChbYWN0aW9uXSkpO1xuICAgIH0pO1xuICB9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsQWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChjaGVja0NpcmN1bGFyKGFsbEFjdGlvbnNbaV0sIFtdKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy8gVGFibGUgdmFsaWRhdGlvblxuICBjb21waWxlZEdyYXBoLnRhYmxlcy5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgY29uc3QgYWN0aW9uTmFtZSA9IGFjdGlvbi5uYW1lO1xuXG4gICAgLy8gdHlwZVxuICAgIGlmIChcbiAgICAgICEhYWN0aW9uLnR5cGUgJiZcbiAgICAgIE9iamVjdC5rZXlzKFRhYmxlVHlwZXMpXG4gICAgICAgIC5tYXAoa2V5ID0+IFRhYmxlVHlwZXNba2V5XSlcbiAgICAgICAgLmluZGV4T2YoYWN0aW9uLnR5cGUpID09PSAtMVxuICAgICkge1xuICAgICAgY29uc3QgcHJlZGVmaW5lZFR5cGVzID0gZ2V0UHJlZGVmaW5lZFR5cGVzKFRhYmxlVHlwZXMpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBXcm9uZyB0eXBlIG9mIHRhYmxlIGRldGVjdGVkLiBTaG91bGQgb25seSB1c2UgcHJlZGVmaW5lZCB0eXBlczogJHtwcmVkZWZpbmVkVHlwZXN9YDtcbiAgICAgIHZhbGlkYXRpb25FcnJvcnMucHVzaChkYXRhZm9ybS5WYWxpZGF0aW9uRXJyb3IuY3JlYXRlKHsgbWVzc2FnZSwgYWN0aW9uTmFtZSB9KSk7XG4gICAgfVxuXG4gICAgLy8gXCJ3aGVyZVwiIHByb3BlcnR5XG4gICAgaWYgKGFjdGlvbi50eXBlID09PSBUYWJsZVR5cGVzLklOQ1JFTUVOVEFMICYmICghYWN0aW9uLndoZXJlIHx8IGFjdGlvbi53aGVyZS5sZW5ndGggPT09IDApKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYFwid2hlcmVcIiBwcm9wZXJ0eSBpcyBub3QgZGVmaW5lZC4gV2l0aCB0aGUgdHlwZSDigJxpbmNyZW1lbnRhbOKAnSB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlIHByb3BlcnR5IOKAnHdoZXJl4oCdIWA7XG4gICAgICB2YWxpZGF0aW9uRXJyb3JzLnB1c2goZGF0YWZvcm0uVmFsaWRhdGlvbkVycm9yLmNyZWF0ZSh7IG1lc3NhZ2UsIGFjdGlvbk5hbWUgfSkpO1xuICAgIH1cblxuICAgIC8vIHJlZHNoaWZ0IGNvbmZpZ1xuICAgIGlmICghIWFjdGlvbi5yZWRzaGlmdCkge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3Qua2V5cyhhY3Rpb24ucmVkc2hpZnQpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICBPYmplY3Qua2V5cyhhY3Rpb24ucmVkc2hpZnQpLmV2ZXJ5KFxuICAgICAgICAgIGtleSA9PiAhYWN0aW9uLnJlZHNoaWZ0W2tleV0gfHwgIWFjdGlvbi5yZWRzaGlmdFtrZXldLmxlbmd0aFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBNaXNzaW5nIHByb3BlcnRpZXMgaW4gcmVkc2hpZnQgY29uZmlnYDtcbiAgICAgICAgdmFsaWRhdGlvbkVycm9ycy5wdXNoKGRhdGFmb3JtLlZhbGlkYXRpb25FcnJvci5jcmVhdGUoeyBtZXNzYWdlLCBhY3Rpb25OYW1lIH0pKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlZHNoaWZ0Q29uZmlnID0gW107XG5cbiAgICAgIGlmIChhY3Rpb24ucmVkc2hpZnQuZGlzdFN0eWxlIHx8IGFjdGlvbi5yZWRzaGlmdC5kaXN0S2V5KSB7XG4gICAgICAgIGNvbnN0IHByb3BzID0geyBkaXN0U3R5bGU6IGFjdGlvbi5yZWRzaGlmdC5kaXN0U3R5bGUsIGRpc3RLZXk6IGFjdGlvbi5yZWRzaGlmdC5kaXN0S2V5IH07XG4gICAgICAgIGNvbnN0IHR5cGVzID0geyBkaXN0U3R5bGU6IERpc3RTdHlsZVR5cGVzIH07XG4gICAgICAgIHJlZHNoaWZ0Q29uZmlnLnB1c2goeyBwcm9wcywgdHlwZXMgfSk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGFjdGlvbi5yZWRzaGlmdC5zb3J0U3R5bGUgfHxcbiAgICAgICAgKGFjdGlvbi5yZWRzaGlmdC5zb3J0S2V5cyAmJiBhY3Rpb24ucmVkc2hpZnQuc29ydEtleXMubGVuZ3RoKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHByb3BzID0geyBzb3J0U3R5bGU6IGFjdGlvbi5yZWRzaGlmdC5zb3J0U3R5bGUsIHNvcnRLZXlzOiBhY3Rpb24ucmVkc2hpZnQuc29ydEtleXMgfTtcbiAgICAgICAgY29uc3QgdHlwZXMgPSB7IHNvcnRTdHlsZTogU29ydFN0eWxlVHlwZXMgfTtcbiAgICAgICAgcmVkc2hpZnRDb25maWcucHVzaCh7IHByb3BzLCB0eXBlcyB9KTtcbiAgICAgIH1cblxuICAgICAgcmVkc2hpZnRDb25maWcuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMoaXRlbS5wcm9wcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGlmICghaXRlbS5wcm9wc1trZXldIHx8ICFpdGVtLnByb3BzW2tleV0ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYFByb3BlcnR5IFwiJHtrZXl9XCIgaXMgbm90IGRlZmluZWRgO1xuICAgICAgICAgICAgdmFsaWRhdGlvbkVycm9ycy5wdXNoKGRhdGFmb3JtLlZhbGlkYXRpb25FcnJvci5jcmVhdGUoeyBtZXNzYWdlLCBhY3Rpb25OYW1lIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKGl0ZW0udHlwZXMpLmZvckVhY2godHlwZSA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudEVudW0gPSBpdGVtLnR5cGVzW3R5cGVdO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICEhaXRlbS5wcm9wc1t0eXBlXSAmJlxuICAgICAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudEVudW0pXG4gICAgICAgICAgICAgIC5tYXAoa2V5ID0+IGN1cnJlbnRFbnVtW2tleV0pXG4gICAgICAgICAgICAgIC5pbmRleE9mKGl0ZW0ucHJvcHNbdHlwZV0pID09PSAtMVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgcHJlZGVmaW5lZFZhbHVlcyA9IGdldFByZWRlZmluZWRUeXBlcyhjdXJyZW50RW51bSk7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYFdyb25nIHZhbHVlIG9mIFwiJHt0eXBlfVwiIHByb3BlcnR5LiBTaG91bGQgb25seSB1c2UgcHJlZGVmaW5lZCB2YWx1ZXM6ICR7cHJlZGVmaW5lZFZhbHVlc31gO1xuICAgICAgICAgICAgdmFsaWRhdGlvbkVycm9ycy5wdXNoKGRhdGFmb3JtLlZhbGlkYXRpb25FcnJvci5jcmVhdGUoeyBtZXNzYWdlLCBhY3Rpb25OYW1lIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gaWdub3JlZCBwcm9wZXJ0aWVzIGluIHRhYmxlc1xuICAgIGlmICghIWlnbm9yZWRQcm9wc1thY3Rpb24udHlwZV0pIHtcbiAgICAgIGlnbm9yZWRQcm9wc1thY3Rpb24udHlwZV0uZm9yRWFjaChpZ25vcmVkUHJvcCA9PiB7XG4gICAgICAgIGlmIChvYmplY3RFeGlzdHNPcklzTm9uRW1wdHkoYWN0aW9uW2lnbm9yZWRQcm9wXSkpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYFVudXNlZCBwcm9wZXJ0eSB3YXMgZGV0ZWN0ZWQ6IFwiJHtpZ25vcmVkUHJvcH1cIi4gVGhpcyBwcm9wZXJ0eSBpcyBub3QgdXNlZCBmb3IgdGFibGVzIHdpdGggdHlwZSBcIiR7YWN0aW9uLnR5cGV9XCIgYW5kIHdpbGwgYmUgaWdub3JlZC5gO1xuICAgICAgICAgIHZhbGlkYXRpb25FcnJvcnMucHVzaChkYXRhZm9ybS5WYWxpZGF0aW9uRXJyb3IuY3JlYXRlKHsgbWVzc2FnZSwgYWN0aW9uTmFtZSB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgY29tcGlsYXRpb25FcnJvcnMgPVxuICAgIGNvbXBpbGVkR3JhcGguZ3JhcGhFcnJvcnMgJiYgY29tcGlsZWRHcmFwaC5ncmFwaEVycm9ycy5jb21waWxhdGlvbkVycm9yc1xuICAgICAgPyBjb21waWxlZEdyYXBoLmdyYXBoRXJyb3JzLmNvbXBpbGF0aW9uRXJyb3JzXG4gICAgICA6IFtdO1xuXG4gIHJldHVybiBkYXRhZm9ybS5HcmFwaEVycm9ycy5jcmVhdGUoeyB2YWxpZGF0aW9uRXJyb3JzLCBjb21waWxhdGlvbkVycm9ycyB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW48VD4obmVzdGVkQXJyYXk6IFRbXVtdKSB7XG4gIHJldHVybiBuZXN0ZWRBcnJheS5yZWR1Y2UoKHByZXZpb3VzVmFsdWU6IFRbXSwgY3VycmVudFZhbHVlOiBUW10pID0+IHtcbiAgICByZXR1cm4gcHJldmlvdXNWYWx1ZS5jb25jYXQoY3VycmVudFZhbHVlKTtcbiAgfSwgW10pO1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBQUEsNkNBQTRDO0lBQzVDLGdEQUFtRjtJQUVuRixNQUFNLG1DQUFtQyxHQUFHLElBQUksTUFBTSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFFekYsU0FBZ0IsWUFBWSxDQUFDLElBQVksRUFBRSxJQUFZO1FBQ3JELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDcEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM1QixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0I7YUFBTTtZQUNMLE9BQU8sUUFBUSxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQVZELG9DQVVDO0lBRUQsU0FBZ0IsWUFBWSxDQUFDLElBQVk7UUFDdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxPQUFPLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBSEQsb0NBR0M7SUFFRCxTQUFnQixvQkFBb0IsQ0FBQyxLQUFhO1FBQ2hELE9BQU8sS0FBSzthQUNULE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO2FBQ2hCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO2FBQ2hCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUxELG9EQUtDO0lB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LEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBSkQsMEJBSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkYXRhZm9ybSB9IGZyb20gXCJAZGF0YWZvcm0vcHJvdG9zXCI7XG5pbXBvcnQgeyBEaXN0U3R5bGVUeXBlcywgaWdub3JlZFByb3BzLCBTb3J0U3R5bGVUeXBlcywgVGFibGVUeXBlcyB9IGZyb20gXCIuL3RhYmxlXCI7XG5cbmNvbnN0IFNRTF9EQVRBX1dBUkVIT1VTRV9ESVNUX0hBU0hfUkVHRVhQID0gbmV3IFJlZ0V4cChcIkhBU0hcXFxccypcXFxcKFxcXFxzKlxcXFx3KlxcXFxzKlxcXFwpXFxcXHMqXCIpO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVsYXRpdmVQYXRoKHBhdGg6IHN0cmluZywgYmFzZTogc3RyaW5nKSB7XG4gIGlmIChiYXNlLmxlbmd0aCA9PSAwKSB7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cbiAgY29uc3Qgc3RyaXBwZWQgPSBwYXRoLnN1YnN0cihiYXNlLmxlbmd0aCk7XG4gIGlmIChzdHJpcHBlZC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgIHJldHVybiBzdHJpcHBlZC5zdWJzdHIoMSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0cmlwcGVkO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYXNlRmlsZW5hbWUocGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IHBhdGhTcGxpdHMgPSBwYXRoLnNwbGl0KFwiL1wiKTtcbiAgcmV0dXJuIHBhdGhTcGxpdHNbcGF0aFNwbGl0cy5sZW5ndGggLSAxXS5zcGxpdChcIi5cIilbMF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZU5hbWVGcmllbmRseSh2YWx1ZTogc3RyaW5nKSB7XG4gIHJldHVybiB2YWx1ZVxuICAgIC5yZXBsYWNlKFwiLVwiLCBcIlwiKVxuICAgIC5yZXBsYWNlKFwiQFwiLCBcIlwiKVxuICAgIC5yZXBsYWNlKFwiL1wiLCBcIlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoUGF0dGVybnMocGF0dGVybnM6IHN0cmluZ1tdLCB2YWx1ZXM6IHN0cmluZ1tdKSB7XG4gIGNvbnN0IHJlZ2V4cHMgPSBwYXR0ZXJucy5tYXAoXG4gICAgcGF0dGVybiA9PlxuICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgXCJeXCIgK1xuICAgICAgICAgIHBhdHRlcm5cbiAgICAgICAgICAgIC5yZXBsYWNlKC9bLis/XiR7fSgpfFtcXF1cXFxcXS9nLCBcIlxcXFwkJlwiKVxuICAgICAgICAgICAgLnNwbGl0KFwiKlwiKVxuICAgICAgICAgICAgLmpvaW4oXCIuKlwiKSArXG4gICAgICAgICAgXCIkXCJcbiAgICAgIClcbiAgKTtcbiAgcmV0dXJuIHZhbHVlcy5maWx0ZXIodmFsdWUgPT4gcmVnZXhwcy5maWx0ZXIocmVnZXhwID0+IHJlZ2V4cC50ZXN0KHZhbHVlKSkubGVuZ3RoID4gMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYWxsZXJGaWxlKHJvb3REaXI6IHN0cmluZykge1xuICBsZXQgbGFzdGZpbGU6IHN0cmluZztcbiAgY29uc3Qgc3RhY2sgPSBnZXRDdXJyZW50U3RhY2soKTtcbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgIGxhc3RmaWxlID0gc3RhY2suc2hpZnQoKS5nZXRGaWxlTmFtZSgpO1xuICAgIGlmICghbGFzdGZpbGUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoIWxhc3RmaWxlLmluY2x1ZGVzKHJvb3REaXIpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGxhc3RmaWxlLmluY2x1ZGVzKFwibm9kZV9tb2R1bGVzXCIpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCEobGFzdGZpbGUuaW5jbHVkZXMoXCJkZWZpbml0aW9ucy9cIikgfHwgbGFzdGZpbGUuaW5jbHVkZXMoXCJtb2RlbHMvXCIpKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiByZWxhdGl2ZVBhdGgobGFzdGZpbGUsIHJvb3REaXIpO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50U3RhY2soKTogTm9kZUpTLkNhbGxTaXRlW10ge1xuICBjb25zdCBvcmlnaW5hbFByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7XG4gIHRyeSB7XG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSAoZXJyLCBzdGFjaykgPT4ge1xuICAgICAgcmV0dXJuIHN0YWNrO1xuICAgIH07XG4gICAgcmV0dXJuIChuZXcgRXJyb3IoKS5zdGFjayBhcyB1bmtub3duKSBhcyBOb2RlSlMuQ2FsbFNpdGVbXTtcbiAgfSBmaW5hbGx5IHtcbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IG9yaWdpbmFsUHJlcGFyZVN0YWNrVHJhY2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdyYXBoSGFzRXJyb3JzKGdyYXBoOiBkYXRhZm9ybS5JQ29tcGlsZWRHcmFwaCkge1xuICBjb25zdCBncmFwaEVycm9ycyA9IHZhbGlkYXRlKGdyYXBoKTtcblxuICByZXR1cm4gKFxuICAgIChncmFwaEVycm9ycy5jb21waWxhdGlvbkVycm9ycyAmJiBncmFwaEVycm9ycy5jb21waWxhdGlvbkVycm9ycy5sZW5ndGggPiAwKSB8fFxuICAgIChncmFwaEVycm9ycy52YWxpZGF0aW9uRXJyb3JzICYmIGdyYXBoRXJyb3JzLnZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMClcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJlZGVmaW5lZFR5cGVzKHR5cGVzKTogc3RyaW5nIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHR5cGVzKVxuICAgIC5tYXAoa2V5ID0+IGBcIiR7dHlwZXNba2V5XX1cImApXG4gICAgLmpvaW4oXCIgfCBcIik7XG59XG5cbmZ1bmN0aW9uIG9iamVjdEV4aXN0c09ySXNOb25FbXB0eShwcm9wOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKCFwcm9wKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICAoQXJyYXkuaXNBcnJheShwcm9wKSAmJiAhIXByb3AubGVuZ3RoKSB8fFxuICAgICghQXJyYXkuaXNBcnJheShwcm9wKSAmJiB0eXBlb2YgcHJvcCA9PT0gXCJvYmplY3RcIiAmJiAhIU9iamVjdC5rZXlzKHByb3ApLmxlbmd0aCkgfHxcbiAgICB0eXBlb2YgcHJvcCAhPT0gXCJvYmplY3RcIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGUoY29tcGlsZWRHcmFwaDogZGF0YWZvcm0uSUNvbXBpbGVkR3JhcGgpOiBkYXRhZm9ybS5JR3JhcGhFcnJvcnMge1xuICBjb25zdCB2YWxpZGF0aW9uRXJyb3JzOiBkYXRhZm9ybS5JVmFsaWRhdGlvbkVycm9yW10gPSBbXTtcblxuICAvLyBDaGVjayB0aGVyZSBhcmVuJ3QgYW55IGR1cGxpY2F0ZSBuYW1lcy5cbiAgY29uc3QgYWxsQWN0aW9ucyA9IFtdLmNvbmNhdChcbiAgICBjb21waWxlZEdyYXBoLnRhYmxlcyxcbiAgICBjb21waWxlZEdyYXBoLmFzc2VydGlvbnMsXG4gICAgY29tcGlsZWRHcmFwaC5vcGVyYXRpb25zXG4gICk7XG4gIGNvbnN0IGFsbEFjdGlvbk5hbWVzID0gYWxsQWN0aW9ucy5tYXAoYWN0aW9uID0+IGFjdGlvbi5uYW1lKTtcblxuICAvLyBDaGVjayB0aGVyZSBhcmUgbm8gZHVwbGljYXRlIGFjdGlvbiBuYW1lcy5cbiAgYWxsQWN0aW9ucy5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgaWYgKGFsbEFjdGlvbnMuZmlsdGVyKHN1YkFjdGlvbiA9PiBzdWJBY3Rpb24ubmFtZSA9PSBhY3Rpb24ubmFtZSkubGVuZ3RoID4gMSkge1xuICAgICAgY29uc3QgYWN0aW9uTmFtZSA9IGFjdGlvbi5uYW1lO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBEdXBsaWNhdGUgYWN0aW9uIG5hbWUgZGV0ZWN0ZWQsIG5hbWVzIG11c3QgYmUgdW5pcXVlIGFjcm9zcyB0YWJsZXMsIGFzc2VydGlvbnMsIGFuZCBvcGVyYXRpb25zOiBcIiR7YWN0aW9uLm5hbWV9XCJgO1xuICAgICAgdmFsaWRhdGlvbkVycm9ycy5wdXNoKGRhdGFmb3JtLlZhbGlkYXRpb25FcnJvci5jcmVhdGUoeyBtZXNzYWdlLCBhY3Rpb25OYW1lIH0pKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGFjdGlvbnNCeU5hbWU6IHsgW25hbWU6IHN0cmluZ106IGRhdGFmb3JtLklFeGVjdXRpb25BY3Rpb24gfSA9IHt9O1xuICBhbGxBY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IChhY3Rpb25zQnlOYW1lW2FjdGlvbi5uYW1lXSA9IGFjdGlvbikpO1xuXG4gIC8vIENoZWNrIGFsbCBkZXBlbmRlbmNpZXMgYWN0dWFsbHkgZXhpc3QuXG4gIGFsbEFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgIGNvbnN0IGFjdGlvbk5hbWUgPSBhY3Rpb24ubmFtZTtcbiAgICAoYWN0aW9uLmRlcGVuZGVuY2llcyB8fCBbXSkuZm9yRWFjaChkZXBlbmRlbmN5ID0+IHtcbiAgICAgIGlmIChhbGxBY3Rpb25OYW1lcy5pbmRleE9mKGRlcGVuZGVuY3kpIDwgMCkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gYE1pc3NpbmcgZGVwZW5kZW5jeSBkZXRlY3RlZDogTm9kZSBcIiR7YWN0aW9uLm5hbWV9XCIgZGVwZW5kcyBvbiBcIiR7ZGVwZW5kZW5jeX1cIiB3aGljaCBkb2VzIG5vdCBleGlzdC5gO1xuICAgICAgICB2YWxpZGF0aW9uRXJyb3JzLnB1c2goZGF0YWZvcm0uVmFsaWRhdGlvbkVycm9yLmNyZWF0ZSh7IG1lc3NhZ2UsIGFjdGlvbk5hbWUgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICAvLyBDaGVjayBmb3IgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICBjb25zdCBjaGVja0NpcmN1bGFyID0gKFxuICAgIGFjdGlvbjogZGF0YWZvcm0uSUV4ZWN1dGlvbkFjdGlvbixcbiAgICBkZXBlbmRlbnRzOiBkYXRhZm9ybS5JRXhlY3V0aW9uQWN0aW9uW11cbiAgKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKGRlcGVuZGVudHMuaW5kZXhPZihhY3Rpb24pID49IDApIHtcbiAgICAgIGNvbnN0IGFjdGlvbk5hbWUgPSBhY3Rpb24ubmFtZTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgQ2lyY3VsYXIgZGVwZW5kZW5jeSBkZXRlY3RlZCBpbiBjaGFpbjogWyR7ZGVwZW5kZW50c1xuICAgICAgICAubWFwKGQgPT4gZC5uYW1lKVxuICAgICAgICAuam9pbihcIiA+IFwiKX0gPiAke2FjdGlvbi5uYW1lfV1gO1xuICAgICAgdmFsaWRhdGlvbkVycm9ycy5wdXNoKGRhdGFmb3JtLlZhbGlkYXRpb25FcnJvci5jcmVhdGUoeyBtZXNzYWdlLCBhY3Rpb25OYW1lIH0pKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gKGFjdGlvbi5kZXBlbmRlbmNpZXMgfHwgW10pLnNvbWUoZCA9PiB7XG4gICAgICByZXR1cm4gYWN0aW9uc0J5TmFtZVtkXSAmJiBjaGVja0NpcmN1bGFyKGFjdGlvbnNCeU5hbWVbZF0sIGRlcGVuZGVudHMuY29uY2F0KFthY3Rpb25dKSk7XG4gICAgfSk7XG4gIH07XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxBY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGNoZWNrQ2lyY3VsYXIoYWxsQWN0aW9uc1tpXSwgW10pKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyBUYWJsZSB2YWxpZGF0aW9uXG4gIGNvbXBpbGVkR3JhcGgudGFibGVzLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICBjb25zdCBhY3Rpb25OYW1lID0gYWN0aW9uLm5hbWU7XG5cbiAgICAvLyB0eXBlXG4gICAgaWYgKFxuICAgICAgISFhY3Rpb24udHlwZSAmJlxuICAgICAgT2JqZWN0LmtleXMoVGFibGVUeXBlcylcbiAgICAgICAgLm1hcChrZXkgPT4gVGFibGVUeXBlc1trZXldKVxuICAgICAgICAuaW5kZXhPZihhY3Rpb24udHlwZSkgPT09IC0xXG4gICAgKSB7XG4gICAgICBjb25zdCBwcmVkZWZpbmVkVHlwZXMgPSBnZXRQcmVkZWZpbmVkVHlwZXMoVGFibGVUeXBlcyk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYFdyb25nIHR5cGUgb2YgdGFibGUgZGV0ZWN0ZWQuIFNob3VsZCBvbmx5IHVzZSBwcmVkZWZpbmVkIHR5cGVzOiAke3ByZWRlZmluZWRUeXBlc31gO1xuICAgICAgdmFsaWRhdGlvbkVycm9ycy5wdXNoKGRhdGFmb3JtLlZhbGlkYXRpb25FcnJvci5jcmVhdGUoeyBtZXNzYWdlLCBhY3Rpb25OYW1lIH0pKTtcbiAgICB9XG5cbiAgICAvLyBcIndoZXJlXCIgcHJvcGVydHlcbiAgICBpZiAoYWN0aW9uLnR5cGUgPT09IFRhYmxlVHlwZXMuSU5DUkVNRU5UQUwgJiYgKCFhY3Rpb24ud2hlcmUgfHwgYWN0aW9uLndoZXJlLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgXCJ3aGVyZVwiIHByb3BlcnR5IGlzIG5vdCBkZWZpbmVkLiBXaXRoIHRoZSB0eXBlIOKAnGluY3JlbWVudGFs4oCdIHlvdSBtdXN0IGFsc28gc3BlY2lmeSB0aGUgcHJvcGVydHkg4oCcd2hlcmXigJ0hYDtcbiAgICAgIHZhbGlkYXRpb25FcnJvcnMucHVzaChkYXRhZm9ybS5WYWxpZGF0aW9uRXJyb3IuY3JlYXRlKHsgbWVzc2FnZSwgYWN0aW9uTmFtZSB9KSk7XG4gICAgfVxuXG4gICAgLy8gc3FsZGF0YXdhcmVob3VzZSBjb25maWdcbiAgICBpZiAoYWN0aW9uLnNxbERhdGFXYXJlaG91c2UgJiYgYWN0aW9uLnNxbERhdGFXYXJlaG91c2UuZGlzdHJpYnV0aW9uKSB7XG4gICAgICBjb25zdCBkaXN0cmlidXRpb24gPSBhY3Rpb24uc3FsRGF0YVdhcmVob3VzZS5kaXN0cmlidXRpb24udG9VcHBlckNhc2UoKTtcblxuICAgICAgaWYgKFxuICAgICAgICBkaXN0cmlidXRpb24gIT09IFwiUkVQTElDQVRFXCIgJiZcbiAgICAgICAgZGlzdHJpYnV0aW9uICE9PSBcIlJPVU5EX1JPQklOXCIgJiZcbiAgICAgICAgIVNRTF9EQVRBX1dBUkVIT1VTRV9ESVNUX0hBU0hfUkVHRVhQLnRlc3QoZGlzdHJpYnV0aW9uKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgSW52YWxpZCB2YWx1ZSBmb3Igc3FsZGF0YXdhcmVob3VzZSBkaXN0cmlidXRpb246IFwiJHtkaXN0cmlidXRpb259XCJgO1xuICAgICAgICB2YWxpZGF0aW9uRXJyb3JzLnB1c2goZGF0YWZvcm0uVmFsaWRhdGlvbkVycm9yLmNyZWF0ZSh7IG1lc3NhZ2UsIGFjdGlvbk5hbWUgfSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlZHNoaWZ0IGNvbmZpZ1xuICAgIGlmICghIWFjdGlvbi5yZWRzaGlmdCkge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3Qua2V5cyhhY3Rpb24ucmVkc2hpZnQpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICBPYmplY3Qua2V5cyhhY3Rpb24ucmVkc2hpZnQpLmV2ZXJ5KFxuICAgICAgICAgIGtleSA9PiAhYWN0aW9uLnJlZHNoaWZ0W2tleV0gfHwgIWFjdGlvbi5yZWRzaGlmdFtrZXldLmxlbmd0aFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBNaXNzaW5nIHByb3BlcnRpZXMgaW4gcmVkc2hpZnQgY29uZmlnYDtcbiAgICAgICAgdmFsaWRhdGlvbkVycm9ycy5wdXNoKGRhdGFmb3JtLlZhbGlkYXRpb25FcnJvci5jcmVhdGUoeyBtZXNzYWdlLCBhY3Rpb25OYW1lIH0pKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlZHNoaWZ0Q29uZmlnID0gW107XG5cbiAgICAgIGlmIChhY3Rpb24ucmVkc2hpZnQuZGlzdFN0eWxlIHx8IGFjdGlvbi5yZWRzaGlmdC5kaXN0S2V5KSB7XG4gICAgICAgIGNvbnN0IHByb3BzID0geyBkaXN0U3R5bGU6IGFjdGlvbi5yZWRzaGlmdC5kaXN0U3R5bGUsIGRpc3RLZXk6IGFjdGlvbi5yZWRzaGlmdC5kaXN0S2V5IH07XG4gICAgICAgIGNvbnN0IHR5cGVzID0geyBkaXN0U3R5bGU6IERpc3RTdHlsZVR5cGVzIH07XG4gICAgICAgIHJlZHNoaWZ0Q29uZmlnLnB1c2goeyBwcm9wcywgdHlwZXMgfSk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGFjdGlvbi5yZWRzaGlmdC5zb3J0U3R5bGUgfHxcbiAgICAgICAgKGFjdGlvbi5yZWRzaGlmdC5zb3J0S2V5cyAmJiBhY3Rpb24ucmVkc2hpZnQuc29ydEtleXMubGVuZ3RoKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHByb3BzID0geyBzb3J0U3R5bGU6IGFjdGlvbi5yZWRzaGlmdC5zb3J0U3R5bGUsIHNvcnRLZXlzOiBhY3Rpb24ucmVkc2hpZnQuc29ydEtleXMgfTtcbiAgICAgICAgY29uc3QgdHlwZXMgPSB7IHNvcnRTdHlsZTogU29ydFN0eWxlVHlwZXMgfTtcbiAgICAgICAgcmVkc2hpZnRDb25maWcucHVzaCh7IHByb3BzLCB0eXBlcyB9KTtcbiAgICAgIH1cblxuICAgICAgcmVkc2hpZnRDb25maWcuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMoaXRlbS5wcm9wcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGlmICghaXRlbS5wcm9wc1trZXldIHx8ICFpdGVtLnByb3BzW2tleV0ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYFByb3BlcnR5IFwiJHtrZXl9XCIgaXMgbm90IGRlZmluZWRgO1xuICAgICAgICAgICAgdmFsaWRhdGlvbkVycm9ycy5wdXNoKGRhdGFmb3JtLlZhbGlkYXRpb25FcnJvci5jcmVhdGUoeyBtZXNzYWdlLCBhY3Rpb25OYW1lIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKGl0ZW0udHlwZXMpLmZvckVhY2godHlwZSA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudEVudW0gPSBpdGVtLnR5cGVzW3R5cGVdO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICEhaXRlbS5wcm9wc1t0eXBlXSAmJlxuICAgICAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudEVudW0pXG4gICAgICAgICAgICAgIC5tYXAoa2V5ID0+IGN1cnJlbnRFbnVtW2tleV0pXG4gICAgICAgICAgICAgIC5pbmRleE9mKGl0ZW0ucHJvcHNbdHlwZV0pID09PSAtMVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgcHJlZGVmaW5lZFZhbHVlcyA9IGdldFByZWRlZmluZWRUeXBlcyhjdXJyZW50RW51bSk7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYFdyb25nIHZhbHVlIG9mIFwiJHt0eXBlfVwiIHByb3BlcnR5LiBTaG91bGQgb25seSB1c2UgcHJlZGVmaW5lZCB2YWx1ZXM6ICR7cHJlZGVmaW5lZFZhbHVlc31gO1xuICAgICAgICAgICAgdmFsaWRhdGlvbkVycm9ycy5wdXNoKGRhdGFmb3JtLlZhbGlkYXRpb25FcnJvci5jcmVhdGUoeyBtZXNzYWdlLCBhY3Rpb25OYW1lIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gaWdub3JlZCBwcm9wZXJ0aWVzIGluIHRhYmxlc1xuICAgIGlmICghIWlnbm9yZWRQcm9wc1thY3Rpb24udHlwZV0pIHtcbiAgICAgIGlnbm9yZWRQcm9wc1thY3Rpb24udHlwZV0uZm9yRWFjaChpZ25vcmVkUHJvcCA9PiB7XG4gICAgICAgIGlmIChvYmplY3RFeGlzdHNPcklzTm9uRW1wdHkoYWN0aW9uW2lnbm9yZWRQcm9wXSkpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYFVudXNlZCBwcm9wZXJ0eSB3YXMgZGV0ZWN0ZWQ6IFwiJHtpZ25vcmVkUHJvcH1cIi4gVGhpcyBwcm9wZXJ0eSBpcyBub3QgdXNlZCBmb3IgdGFibGVzIHdpdGggdHlwZSBcIiR7YWN0aW9uLnR5cGV9XCIgYW5kIHdpbGwgYmUgaWdub3JlZC5gO1xuICAgICAgICAgIHZhbGlkYXRpb25FcnJvcnMucHVzaChkYXRhZm9ybS5WYWxpZGF0aW9uRXJyb3IuY3JlYXRlKHsgbWVzc2FnZSwgYWN0aW9uTmFtZSB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgY29tcGlsYXRpb25FcnJvcnMgPVxuICAgIGNvbXBpbGVkR3JhcGguZ3JhcGhFcnJvcnMgJiYgY29tcGlsZWRHcmFwaC5ncmFwaEVycm9ycy5jb21waWxhdGlvbkVycm9yc1xuICAgICAgPyBjb21waWxlZEdyYXBoLmdyYXBoRXJyb3JzLmNvbXBpbGF0aW9uRXJyb3JzXG4gICAgICA6IFtdO1xuXG4gIHJldHVybiBkYXRhZm9ybS5HcmFwaEVycm9ycy5jcmVhdGUoeyB2YWxpZGF0aW9uRXJyb3JzLCBjb21waWxhdGlvbkVycm9ycyB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW48VD4obmVzdGVkQXJyYXk6IFRbXVtdKSB7XG4gIHJldHVybiBuZXN0ZWRBcnJheS5yZWR1Y2UoKHByZXZpb3VzVmFsdWU6IFRbXSwgY3VycmVudFZhbHVlOiBUW10pID0+IHtcbiAgICByZXR1cm4gcHJldmlvdXNWYWx1ZS5jb25jYXQoY3VycmVudFZhbHVlKTtcbiAgfSwgW10pO1xufVxuIl19
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc