@firestartr/cli 1.30.0 → 1.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/{_loadurl.js → _loadurl.mjs} +11 -8
- package/build/index.js +1186 -802
- package/build/provisioner/dist-cdktf/index.js +89 -7
- package/build/provisioner/dist-cdktf/index.js.map +1 -1
- package/build/provisioner/dist-cdktf/src/resources/github_repository/helpers/AdditionalBranchesHelper.d.ts +1 -0
- package/build/provisioner/dist-cdktf/src/resources/github_repository/helpers/AdditionalBranchesHelper.js +62 -0
- package/build/provisioner/dist-cdktf/src/resources/github_repository/index.d.ts +1 -0
- package/build/provisioner/dist-cdktf/src/resources/github_repository/index.js +22 -0
- package/build/provisioner/dist-cdktf/src/resources/resource.d.ts +1 -0
- package/build/provisioner/dist-cdktf/src/resources/resource.js +2 -0
- package/build/provisioner/dist-cdktf/tsconfig.cdktf.tsbuildinfo +1 -1
- package/package.json +1 -1
package/build/index.js
CHANGED
|
@@ -116214,7 +116214,7 @@ exports.KubernetesObjectApi = KubernetesObjectApi;
|
|
|
116214
116214
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
116215
116215
|
exports.OpenIDConnectAuth = void 0;
|
|
116216
116216
|
const tslib_1 = __nccwpck_require__(33714);
|
|
116217
|
-
const oidc = tslib_1.__importStar(__nccwpck_require__(
|
|
116217
|
+
const oidc = tslib_1.__importStar(__nccwpck_require__(91188));
|
|
116218
116218
|
const rfc4648_1 = __nccwpck_require__(53367);
|
|
116219
116219
|
const util_1 = __nccwpck_require__(73837);
|
|
116220
116220
|
class OidcClient {
|
|
@@ -119169,7 +119169,7 @@ module.exports = __toCommonJS(dist_src_exports);
|
|
|
119169
119169
|
var import_universal_user_agent = __nccwpck_require__(65212);
|
|
119170
119170
|
|
|
119171
119171
|
// pkg/dist-src/version.js
|
|
119172
|
-
var VERSION = "9.0.
|
|
119172
|
+
var VERSION = "9.0.6";
|
|
119173
119173
|
|
|
119174
119174
|
// pkg/dist-src/defaults.js
|
|
119175
119175
|
var userAgent = `octokit-endpoint.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`;
|
|
@@ -119274,9 +119274,9 @@ function addQueryParameters(url, parameters) {
|
|
|
119274
119274
|
}
|
|
119275
119275
|
|
|
119276
119276
|
// pkg/dist-src/util/extract-url-variable-names.js
|
|
119277
|
-
var urlVariableRegex = /\{[^}]+\}/g;
|
|
119277
|
+
var urlVariableRegex = /\{[^{}}]+\}/g;
|
|
119278
119278
|
function removeNonChars(variableName) {
|
|
119279
|
-
return variableName.replace(
|
|
119279
|
+
return variableName.replace(/(?:^\W+)|(?:(?<!\W)\W+$)/g, "").split(/,/);
|
|
119280
119280
|
}
|
|
119281
119281
|
function extractUrlVariableNames(url) {
|
|
119282
119282
|
const matches = url.match(urlVariableRegex);
|
|
@@ -119462,7 +119462,7 @@ function parse(options) {
|
|
|
119462
119462
|
}
|
|
119463
119463
|
if (url.endsWith("/graphql")) {
|
|
119464
119464
|
if (options.mediaType.previews?.length) {
|
|
119465
|
-
const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || [];
|
|
119465
|
+
const previewsFromAcceptHeader = headers.accept.match(/(?<![\w-])[\w-]+(?=-preview)/g) || [];
|
|
119466
119466
|
headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map((preview) => {
|
|
119467
119467
|
const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json";
|
|
119468
119468
|
return `application/vnd.github.${preview}-preview${format}`;
|
|
@@ -122302,7 +122302,7 @@ var RequestError = class extends Error {
|
|
|
122302
122302
|
if (options.request.headers.authorization) {
|
|
122303
122303
|
requestCopy.headers = Object.assign({}, options.request.headers, {
|
|
122304
122304
|
authorization: options.request.headers.authorization.replace(
|
|
122305
|
-
/ .*$/,
|
|
122305
|
+
/(?<! ) .*$/,
|
|
122306
122306
|
" [REDACTED]"
|
|
122307
122307
|
)
|
|
122308
122308
|
});
|
|
@@ -122370,7 +122370,7 @@ var import_endpoint = __nccwpck_require__(68773);
|
|
|
122370
122370
|
var import_universal_user_agent = __nccwpck_require__(65212);
|
|
122371
122371
|
|
|
122372
122372
|
// pkg/dist-src/version.js
|
|
122373
|
-
var VERSION = "8.4.
|
|
122373
|
+
var VERSION = "8.4.1";
|
|
122374
122374
|
|
|
122375
122375
|
// pkg/dist-src/is-plain-object.js
|
|
122376
122376
|
function isPlainObject(value) {
|
|
@@ -122429,7 +122429,7 @@ function fetchWrapper(requestOptions) {
|
|
|
122429
122429
|
headers[keyAndValue[0]] = keyAndValue[1];
|
|
122430
122430
|
}
|
|
122431
122431
|
if ("deprecation" in headers) {
|
|
122432
|
-
const matches = headers.link && headers.link.match(/<([
|
|
122432
|
+
const matches = headers.link && headers.link.match(/<([^<>]+)>; rel="deprecation"/);
|
|
122433
122433
|
const deprecationLink = matches && matches.pop();
|
|
122434
122434
|
log.warn(
|
|
122435
122435
|
`[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}`
|
|
@@ -148344,7 +148344,7 @@ class ApiObject extends constructs_1.Construct {
|
|
|
148344
148344
|
}
|
|
148345
148345
|
}
|
|
148346
148346
|
exports.ApiObject = ApiObject;
|
|
148347
|
-
ApiObject[_a] = { fqn: "cdk8s.ApiObject", version: "2.69.
|
|
148347
|
+
ApiObject[_a] = { fqn: "cdk8s.ApiObject", version: "2.69.57" };
|
|
148348
148348
|
function parseApiGroup(apiVersion) {
|
|
148349
148349
|
const v = apiVersion.split('/');
|
|
148350
148350
|
// no group means "core"
|
|
@@ -148559,7 +148559,7 @@ class App extends constructs_1.Construct {
|
|
|
148559
148559
|
}
|
|
148560
148560
|
exports.App = App;
|
|
148561
148561
|
_a = JSII_RTTI_SYMBOL_1;
|
|
148562
|
-
App[_a] = { fqn: "cdk8s.App", version: "2.69.
|
|
148562
|
+
App[_a] = { fqn: "cdk8s.App", version: "2.69.57" };
|
|
148563
148563
|
function validate(app, cache) {
|
|
148564
148564
|
const errors = [];
|
|
148565
148565
|
for (const child of cache.findAll(app.node)) {
|
|
@@ -148773,7 +148773,7 @@ class Chart extends constructs_1.Construct {
|
|
|
148773
148773
|
}
|
|
148774
148774
|
}
|
|
148775
148775
|
exports.Chart = Chart;
|
|
148776
|
-
Chart[_a] = { fqn: "cdk8s.Chart", version: "2.69.
|
|
148776
|
+
Chart[_a] = { fqn: "cdk8s.Chart", version: "2.69.57" };
|
|
148777
148777
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2hhcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBbUQ7QUFDbkQsNkNBQXlDO0FBQ3pDLCtCQUE0QjtBQUM1QixtQ0FBZ0M7QUFFaEMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMvQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7QUE2QjFCLE1BQWEsS0FBTSxTQUFRLHNCQUFTO0lBQ2xDOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQU07UUFDMUIsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLE9BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLElBQUksWUFBWSxJQUFJLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsMkJBQUMsTUFBTSxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQVU7UUFDcEMsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQWE7UUFDNUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDckIsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFrQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFpQkQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUFvQixFQUFHO1FBQy9ELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLEtBQUssQ0FBQyx5QkFBeUIsSUFBSSxLQUFLLENBQUM7UUFFM0UsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFXLE1BQU07UUFDZixPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BbUJHO0lBQ0ksa0JBQWtCLENBQUMsU0FBb0I7UUFDNUMsT0FBTyxhQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRTtZQUNqQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsMEJBQTBCO1lBQzdDLE1BQU0sRUFBRSxTQUFTLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ25ELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGFBQWEsQ0FBQyxHQUFHLFlBQTBCO1FBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU07UUFDWCxPQUFPLFNBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQWtCLEVBQUUsQ0FBQyxDQUFDLFlBQVksc0JBQVMsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7O0FBeEhILHNCQXlIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQXBpT2JqZWN0IH0gZnJvbSAnLi9hcGktb2JqZWN0JztcbmltcG9ydCB7IEFwcCB9IGZyb20gJy4vYXBwJztcbmltcG9ydCB7IE5hbWVzIH0gZnJvbSAnLi9uYW1lcyc7XG5cbmNvbnN0IENIQVJUX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ2NkazhzLkNoYXJ0Jyk7XG5jb25zdCBDUk9OSk9CID0gJ0Nyb25Kb2InO1xuXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0UHJvcHMge1xuICAvKipcbiAgICogVGhlIGRlZmF1bHQgbmFtZXNwYWNlIGZvciBhbGwgb2JqZWN0cyBkZWZpbmVkIGluIHRoaXMgY2hhcnQgKGRpcmVjdGx5IG9yXG4gICAqIGluZGlyZWN0bHkpLiBUaGlzIG5hbWVzcGFjZSB3aWxsIG9ubHkgYXBwbHkgdG8gb2JqZWN0cyB0aGF0IGRvbid0IGhhdmUgYVxuICAgKiBgbmFtZXNwYWNlYCBleHBsaWNpdGx5IGRlZmluZWQgZm9yIHRoZW0uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gbmFtZXNwYWNlIGlzIHN5bnRoZXNpemVkICh1c3VhbGx5IHRoaXMgaW1wbGllcyBcImRlZmF1bHRcIilcbiAgICovXG4gIHJlYWRvbmx5IG5hbWVzcGFjZT86IHN0cmluZztcblxuICAvKipcbiAgICogTGFiZWxzIHRvIGFwcGx5IHRvIGFsbCByZXNvdXJjZXMgaW4gdGhpcyBjaGFydC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjb21tb24gbGFiZWxzXG4gICAqL1xuICByZWFkb25seSBsYWJlbHM/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogVGhlIGF1dG9nZW5lcmF0ZWQgcmVzb3VyY2UgbmFtZSBieSBkZWZhdWx0IGlzIHN1ZmZpeGVkIHdpdGggYSBzdGFibGUgaGFzaFxuICAgKiBvZiB0aGUgY29uc3RydWN0IHBhdGguIFNldHRpbmcgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIGRyb3BzIHRoZSBoYXNoIHN1ZmZpeC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRpc2FibGVSZXNvdXJjZU5hbWVIYXNoZXM/OiBib29sZWFuO1xuXG59XG5cbmV4cG9ydCBjbGFzcyBDaGFydCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGEgQ2hhcnQuXG4gICAqXG4gICAqIFdlIGRvIGF0dHJpYnV0ZSBkZXRlY3Rpb24gc2luY2Ugd2UgY2FuJ3QgcmVsaWFibHkgdXNlICdpbnN0YW5jZW9mJy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNDaGFydCh4OiBhbnkpOiB4IGlzIENoYXJ0IHtcbiAgICByZXR1cm4geCAhPT0gbnVsbCAmJiB0eXBlb2YoeCkgPT09ICdvYmplY3QnICYmIENIQVJUX1NZTUJPTCBpbiB4O1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudHMgYGluc3RhbmNlb2YgQ2hhcnRgIHVzaW5nIHRoZSBtb3JlIHJlbGlhYmxlIGBDaGFydC5pc0NoYXJ0YCBzdGF0aWMgbWV0aG9kXG4gICAqXG4gICAqIEBwYXJhbSBvIFRoZSBvYmplY3QgdG8gY2hlY2tcbiAgICogQGludGVybmFsXG4gICAqL1xuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0obzogdW5rbm93bikge1xuICAgIHJldHVybiBDaGFydC5pc0NoYXJ0KG8pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBjaGFydCBpbiB3aGljaCBhIG5vZGUgaXMgZGVmaW5lZC5cbiAgICogQHBhcmFtIGMgYSBjb25zdHJ1Y3Qgbm9kZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZihjOiBJQ29uc3RydWN0KTogQ2hhcnQge1xuICAgIGlmIChDaGFydC5pc0NoYXJ0KGMpKSB7XG4gICAgICByZXR1cm4gYztcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSBjLm5vZGUuc2NvcGUgYXMgQ29uc3RydWN0O1xuICAgIGlmICghcGFyZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBmaW5kIGEgcGFyZW50IGNoYXJ0IChkaXJlY3RseSBvciBpbmRpcmVjdGx5KScpO1xuICAgIH1cblxuICAgIHJldHVybiBDaGFydC5vZihwYXJlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IG5hbWVzcGFjZSBmb3IgYWxsIG9iamVjdHMgaW4gdGhpcyBjaGFydC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lc3BhY2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENoYXJ0LWxldmVsIGxhYmVscy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xhYmVscz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIHJlc291cmNlIG5hbWVzIGluIHRoZSBjaGFydCBoYXZlIHRoZSBzdWZmaXhlZCBoYXNoLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzYWJsZVJlc291cmNlTmFtZUhhc2hlcz86IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENoYXJ0UHJvcHMgPSB7IH0pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMubmFtZXNwYWNlID0gcHJvcHMubmFtZXNwYWNlO1xuICAgIHRoaXMuX2xhYmVscyA9IHByb3BzLmxhYmVscyA/PyB7fTtcbiAgICB0aGlzLl9kaXNhYmxlUmVzb3VyY2VOYW1lSGFzaGVzID0gcHJvcHMuZGlzYWJsZVJlc291cmNlTmFtZUhhc2hlcyA/PyBmYWxzZTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBDSEFSVF9TWU1CT0wsIHsgdmFsdWU6IHRydWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogTGFiZWxzIGFwcGxpZWQgdG8gYWxsIHJlc291cmNlcyBpbiB0aGlzIGNoYXJ0LlxuICAgKlxuICAgKiBUaGlzIGlzIGFuIGltbXV0YWJsZSBjb3B5LlxuICAgKi9cbiAgcHVibGljIGdldCBsYWJlbHMoKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2xhYmVscyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIGFwcC11bmlxdWUgbmFtZSBmb3IgYW4gb2JqZWN0IGdpdmVuIGl0J3MgY29uc3RydWN0IG5vZGUgcGF0aC5cbiAgICpcbiAgICogRGlmZmVyZW50IHJlc291cmNlIHR5cGVzIG1heSBoYXZlIGRpZmZlcmVudCBjb25zdHJhaW50cyBvbiBuYW1lc1xuICAgKiAoYG1ldGFkYXRhLm5hbWVgKS4gVGhlIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIG5hbWUgZ2VuZXJhdG9yIHdhc1xuICAgKiBjb21wYXRpYmxlIHdpdGggRE5TX1NVQkRPTUFJTiBidXQgbm90IHdpdGggRE5TX0xBQkVMLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgYERlcGxveW1lbnRgIG5hbWVzIG11c3QgY29tcGx5IHdpdGggRE5TX1NVQkRPTUFJTiB3aGlsZVxuICAgKiBgU2VydmljZWAgbmFtZXMgbXVzdCBjb21wbHkgd2l0aCBETlNfTEFCRUwuXG4gICAqXG4gICAqIFNpbmNlIHRoZXJlIGlzIG5vIGZvcm1hbCBzcGVjaWZpY2F0aW9uIGZvciB0aGlzLCB0aGUgZGVmYXVsdCBuYW1lXG4gICAqIGdlbmVyYXRpb24gc2NoZW1lIGZvciBrdWJlcm5ldGVzIG9iamVjdHMgaW4gY2RrOHMgd2FzIGNoYW5nZWQgdG8gRE5TX0xBQkVMLFxuICAgKiBzaW5jZSBpdOKAmXMgdGhlIGNvbW1vbiBkZW5vbWluYXRvciBmb3IgYWxsIGt1YmVybmV0ZXMgcmVzb3VyY2VzXG4gICAqIChzdXBwb3NlZGx5KS5cbiAgICpcbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCBpZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgb2JqZWN0IG5hbWVzIGF0IHRoZVxuICAgKiBjaGFydCBsZXZlbC5cbiAgICpcbiAgICogQHBhcmFtIGFwaU9iamVjdCBUaGUgQVBJIG9iamVjdCB0byBnZW5lcmF0ZSBhIG5hbWUgZm9yLlxuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlT2JqZWN0TmFtZShhcGlPYmplY3Q6IEFwaU9iamVjdCkge1xuICAgIHJldHVybiBOYW1lcy50b0Ruc0xhYmVsKGFwaU9iamVjdCwge1xuICAgICAgaW5jbHVkZUhhc2g6ICF0aGlzLl9kaXNhYmxlUmVzb3VyY2VOYW1lSGFzaGVzLFxuICAgICAgbWF4TGVuOiBhcGlPYmplY3Qua2luZCA9PSBDUk9OSk9CID8gNTIgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZGVwZW5kZW5jeSBiZXR3ZWVuIHRoaXMgQ2hhcnQgYW5kIG90aGVyIGNvbnN0cnVjdHMuXG4gICAqIFRoZXNlIGNhbiBiZSBvdGhlciBBcGlPYmplY3RzLCBDaGFydHMsIG9yIGN1c3RvbS5cbiAgICpcbiAgICogQHBhcmFtIGRlcGVuZGVuY2llcyB0aGUgZGVwZW5kZW5jaWVzIHRvIGFkZC5cbiAgICovXG4gIHB1YmxpYyBhZGREZXBlbmRlbmN5KC4uLmRlcGVuZGVuY2llczogSUNvbnN0cnVjdFtdKSB7XG4gICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3koLi4uZGVwZW5kZW5jaWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoaXMgY2hhcnQgdG8gYSBzZXQgb2YgS3ViZXJuZXRlcyBKU09OIHJlc291cmNlcy5cbiAgICogQHJldHVybnMgYXJyYXkgb2YgcmVzb3VyY2UgbWFuaWZlc3RzXG4gICAqL1xuICBwdWJsaWMgdG9Kc29uKCk6IGFueVtdIHtcbiAgICByZXR1cm4gQXBwLl9zeW50aENoYXJ0KHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIHRoZSBpbmNsdWRlZCBBUEkgb2JqZWN0cy5cbiAgICovXG4gIGdldCBhcGlPYmplY3RzKCk6IEFwaU9iamVjdFtdIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlLmNoaWxkcmVuLmZpbHRlcigobyk6IG8gaXMgQXBpT2JqZWN0ID0+IG8gaW5zdGFuY2VvZiBBcGlPYmplY3QpO1xuICB9XG59XG4iXX0=
|
|
148778
148778
|
|
|
148779
148779
|
/***/ }),
|
|
@@ -148845,7 +148845,7 @@ class Cron {
|
|
|
148845
148845
|
}
|
|
148846
148846
|
exports.Cron = Cron;
|
|
148847
148847
|
_a = JSII_RTTI_SYMBOL_1;
|
|
148848
|
-
Cron[_a] = { fqn: "cdk8s.Cron", version: "2.69.
|
|
148848
|
+
Cron[_a] = { fqn: "cdk8s.Cron", version: "2.69.57" };
|
|
148849
148849
|
function fallback(x, def) {
|
|
148850
148850
|
return x ?? def;
|
|
148851
148851
|
}
|
|
@@ -148934,7 +148934,7 @@ class DependencyGraph {
|
|
|
148934
148934
|
}
|
|
148935
148935
|
exports.DependencyGraph = DependencyGraph;
|
|
148936
148936
|
_a = JSII_RTTI_SYMBOL_1;
|
|
148937
|
-
DependencyGraph[_a] = { fqn: "cdk8s.DependencyGraph", version: "2.69.
|
|
148937
|
+
DependencyGraph[_a] = { fqn: "cdk8s.DependencyGraph", version: "2.69.57" };
|
|
148938
148938
|
/**
|
|
148939
148939
|
* Represents a vertex in the graph.
|
|
148940
148940
|
*
|
|
@@ -149027,7 +149027,7 @@ class DependencyVertex {
|
|
|
149027
149027
|
}
|
|
149028
149028
|
exports.DependencyVertex = DependencyVertex;
|
|
149029
149029
|
_b = JSII_RTTI_SYMBOL_1;
|
|
149030
|
-
DependencyVertex[_b] = { fqn: "cdk8s.DependencyVertex", version: "2.69.
|
|
149030
|
+
DependencyVertex[_b] = { fqn: "cdk8s.DependencyVertex", version: "2.69.57" };
|
|
149031
149031
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kZW5jeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kZXBlbmRlbmN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBR0E7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBYSxlQUFlO0lBSTFCLFlBQVksSUFBVTtRQUVwQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUU1QyxNQUFNLEtBQUssR0FBcUMsRUFBRSxDQUFDO1FBRW5ELFNBQVMsU0FBUyxDQUFDLFNBQXFCO1lBQ3RDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUVELFNBQVMsU0FBUyxDQUFDLFNBQXFCO1lBQ3RDLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELG9DQUFvQztRQUNwQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQy9CLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7UUFDaEIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNuQyxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLENBQUM7UUFDSCxDQUFDO1FBRUQscUNBQXFDO1FBQ3JDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFFdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxH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Q2QsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBRWYsQ0FBQztJQUVILENBQUM7O0FBeEdILDRDQXlHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vZGUsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGRlcGVuZGVuY3kgZ3JhcGggZm9yIGEgZ2l2ZW4gTm9kZS5cbiAqXG4gKiBUaGlzIGdyYXBoIGluY2x1ZGVzIHRoZSBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhbGwgbm9kZXMgaW4gdGhlXG4gKiBub2RlIChjb25zdHJ1Y3QpIHN1Yi10cmVlIHdobydzIHJvb3QgaXMgdGhpcyBOb2RlLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIG1lYW5zIHRoYXQgbG9uZWx5IG5vZGVzIChubyBkZXBlbmRlbmNpZXMgYW5kIG5vIGRlcGVuZGFudHMpIGFyZSBhbHNvIGluY2x1ZGVkIGluIHRoaXMgZ3JhcGggYXNcbiAqIGNoaWxkbGVzcyBjaGlsZHJlbiBvZiB0aGUgcm9vdCBub2RlIG9mIHRoZSBncmFwaC5cbiAqXG4gKiBUaGUgZ3JhcGggZG9lcyBub3QgaW5jbHVkZSBjcm9zcy1zY29wZSBkZXBlbmRlbmNpZXMuIFRoYXQgaXMsIGlmIGEgY2hpbGQgb24gdGhlIGN1cnJlbnQgc2NvcGUgZGVwZW5kcyBvbiBhIG5vZGVcbiAqIGZyb20gYSBkaWZmZXJlbnQgc2NvcGUsIHRoYXQgcmVsYXRpb25zaGlwIGlzIG5vdCByZXByZXNlbnRlZCBpbiB0aGlzIGdyYXBoLlxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIERlcGVuZGVuY3lHcmFwaCB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZm9zdGVyUGFyZW50OiBEZXBlbmRlbmN5VmVydGV4O1xuXG4gIGNvbnN0cnVjdG9yKG5vZGU6IE5vZGUpIHtcblxuICAgIHRoaXMuX2Zvc3RlclBhcmVudCA9IG5ldyBEZXBlbmRlbmN5VmVydGV4KCk7XG5cbiAgICBjb25zdCBub2RlczogUmVjb3JkPHN0cmluZywgRGVwZW5kZW5jeVZlcnRleD4gPSB7fTtcblxuICAgIGZ1bmN0aW9uIHB1dFZlcnRleChjb25zdHJ1Y3Q6IElDb25zdHJ1Y3QpIHtcbiAgICAgIG5vZGVzW2NvbnN0cnVjdC5ub2RlLnBhdGhdID0gbmV3IERlcGVuZGVuY3lWZXJ0ZXgoY29uc3RydWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRWZXJ0ZXgoY29uc3RydWN0OiBJQ29uc3RydWN0KTogRGVwZW5kZW5jeVZlcnRleCB7XG4gICAgICByZXR1cm4gbm9kZXNbY29uc3RydWN0Lm5vZGUucGF0aF07XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIGFsbCB2ZXJ0aWNlcyBvZiB0aGUgZ3JhcGguXG4gICAgZm9yIChjb25zdCBuIG9mIG5vZGUuZmluZEFsbCgpKSB7XG4gICAgICBwdXRWZXJ0ZXgobik7XG4gICAgfVxuXG4gICAgY29uc3QgZGVwcyA9IFtdO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5maW5kQWxsKCkpIHtcbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIGNoaWxkLm5vZGUuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGRlcHMucHVzaCh7IHNvdXJjZTogY2hpbGQsIHRhcmdldDogZGVwIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNyZWF0ZSBhbGwgdGhlIGVkZ2VzIG9mIHRoZSBncmFwaC5cbiAgICBmb3IgKGNvbnN0IGRlcCBvZiBkZXBzKSB7XG5cbiAgICAgIGlmICghZ2V0VmVydGV4KGRlcC50YXJnZXQpKSB7XG4gICAgICAgIC8vIGRvbnQgY3Jvc3Mgc2NvcGUgYm91bmRhcmllcy5cbiAgICAgICAgLy8gc2luY2UgY2hhcnRzIG9ubHkgcmVuZGVycyBpdHMgb3duIGNoaWxkcmVuLCB0aGlzIGlzIG9rIGFuZFxuICAgICAgICAvLyBoYXMgdGhlIGJlbmVmaXQgb2Ygc2ltcGxpZnlpbmcgdGhlIGdyYXBoLiB3ZSBzaG91bGQgcmVjb25zaWRlciB0aGlzIGJlaGF2aW9yIHdoZW4gbW92aW5nXG4gICAgICAgIC8vIHRvIGEgbW9yZSBnZW5lcmFsIHB1cnBvc2UgdXNlLWNhc2UuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VyY2VEZXBOb2RlID0gZ2V0VmVydGV4KGRlcC5zb3VyY2UpO1xuICAgICAgY29uc3QgdGFyZ2V0RGVwTm9kZSA9IGdldFZlcnRleChkZXAudGFyZ2V0KTtcblxuICAgICAgc291cmNlRGVwTm9kZS5hZGRDaGlsZCh0YXJnZXREZXBOb2RlKTtcblxuICAgIH1cblxuICAgIC8vIGNyZWF0ZSB0aGUgcm9vdC5cbiAgICBmb3IgKGNvbnN0IG4gb2YgT2JqZWN0LnZhbHVlcyhub2RlcykpIHtcbiAgICAgIGlmIChuLmluYm91bmQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIG9ycGhhbnMgYXJlIGRlcGVuZGVuY3kgcm9vdHMuIGxldHMgYWRvcHQgdGhlbSFcbiAgICAgICAgdGhpcy5fZm9zdGVyUGFyZW50LmFkZENoaWxkKG4pO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHJvb3Qgb2YgdGhlIGdyYXBoLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhpcyB2ZXJ0ZXggd2lsbCBhbHdheXMgaGF2ZSBgbnVsbGAgYXMgaXRzIGAudmFsdWVgIHNpbmNlIGl0IGlzIGFuIGFydGlmaWNhbCByb290XG4gICAqIHRoYXQgYmluZHMgYWxsIHRoZSBjb25uZWN0ZWQgc3BhY2VzIG9mIHRoZSBncmFwaC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcm9vdCgpOiBEZXBlbmRlbmN5VmVydGV4IHtcbiAgICByZXR1cm4gdGhpcy5fZm9zdGVyUGFyZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgVmVydGV4LnRvcG9sb2d5KClcbiAgICovXG4gIHB1YmxpYyB0b3BvbG9neSgpOiBJQ29uc3RydWN0W10ge1xuICAgIHJldHVybiB0aGlzLl9mb3N0ZXJQYXJlbnQudG9wb2xvZ3koKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSB2ZXJ0ZXggaW4gdGhlIGdyYXBoLlxuICpcbiAqIFRoZSB2YWx1ZSBvZiBlYWNoIHZlcnRleCBpcyBhbiBgSUNvbnN0cnVjdGAgdGhhdCBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgYC52YWx1ZWAgZ2V0dGVyLlxuICovXG5leHBvcnQgY2xhc3MgRGVwZW5kZW5jeVZlcnRleCB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdmFsdWU6IElDb25zdHJ1Y3QgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoaWxkcmVuOiBTZXQ8RGVwZW5kZW5jeVZlcnRleD4gPSBuZXcgU2V0PERlcGVuZGVuY3lWZXJ0ZXg+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhcmVudHM6IFNldDxEZXBlbmRlbmN5VmVydGV4PiA9IG5ldyBTZXQ8RGVwZW5kZW5jeVZlcnRleD4oKTtcblxuICBjb25zdHJ1Y3Rvcih2YWx1ZTogSUNvbnN0cnVjdCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgSUNvbnN0cnVjdCB0aGlzIGdyYXBoIHZlcnRleCByZXByZXNlbnRzLlxuICAgKlxuICAgKiBgbnVsbGAgaW4gY2FzZSB0aGlzIGlzIHRoZSByb290IG9mIHRoZSBncmFwaC5cbiAgICovXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogSUNvbnN0cnVjdCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNoaWxkcmVuIG9mIHRoZSB2ZXJ0ZXggKGkuZSBkZXBlbmRlbmNpZXMpXG4gICAqL1xuICBwdWJsaWMgZ2V0IG91dGJvdW5kKCk6IEFycmF5PERlcGVuZGVuY3lWZXJ0ZXg+IHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9jaGlsZHJlbik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcGFyZW50cyBvZiB0aGUgdmVydGV4IChpLmUgZGVwZW5kYW50cylcbiAgICovXG4gIHB1YmxpYyBnZXQgaW5ib3VuZCgpOiBBcnJheTxEZXBlbmRlbmN5VmVydGV4PiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fcGFyZW50cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHRvcG9sb2dpY2FsbHkgc29ydGVkIGFycmF5IG9mIHRoZSBjb25zdHJ1Y3RzIGluIHRoZSBzdWItZ3JhcGguXG4gICAqL1xuICBwdWJsaWMgdG9wb2xvZ3koKTogSUNvbnN0cnVjdFtdIHtcblxuICAgIGNvbnN0IGZvdW5kID0gbmV3IFNldDxEZXBlbmRlbmN5VmVydGV4PigpO1xuICAgIGNvbnN0IHRvcG9sb2d5OiBEZXBlbmRlbmN5VmVydGV4W10gPSBbXTtcblxuICAgIGZ1bmN0aW9uIHZpc2l0KG46IERlcGVuZGVuY3lWZXJ0ZXgpIHtcbiAgICAgIGZvciAoY29uc3QgYyBvZiBuLm91dGJvdW5kKSB7XG4gICAgICAgIHZpc2l0KGMpO1xuICAgICAgfVxuICAgICAgaWYgKCFmb3VuZC5oYXMobikpIHtcbiAgICAgICAgdG9wb2xvZ3kucHVzaChuKTtcbiAgICAgICAgZm91bmQuYWRkKG4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZpc2l0KHRoaXMpO1xuXG4gICAgcmV0dXJuIHRvcG9sb2d5LmZpbHRlcihkID0+IGQudmFsdWUpLm1hcChkID0+IGQudmFsdWUhKTtcblxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB2ZXJ0ZXggYXMgYSBkZXBlbmRlbmN5IG9mIHRoZSBjdXJyZW50IG5vZGUuXG4gICAqIEFsc28gdXBkYXRlcyB0aGUgcGFyZW50cyBvZiBgZGVwYCwgc28gdGhhdCBpdCBjb250YWlucyB0aGlzIG5vZGUgYXMgYSBwYXJlbnQuXG4gICAqXG4gICAqIFRoaXMgb3BlcmF0aW9uIHdpbGwgZmFpbCBpbiBjYXNlIGl0IGNyZWF0ZXMgYSBjeWNsZSBpbiB0aGUgZ3JhcGguXG4gICAqXG4gICAqIEBwYXJhbSBkZXAgVGhlIGRlcGVuZGVuY3lcbiAgICovXG4gIHB1YmxpYyBhZGRDaGlsZChkZXA6IERlcGVuZGVuY3lWZXJ0ZXgpIHtcblxuICAgIGNvbnN0IGN5Y2xlOiBEZXBlbmRlbmN5VmVydGV4W10gPSBkZXAuZmluZFJvdXRlKHRoaXMpO1xuICAgIGlmIChjeWNsZS5sZW5ndGggIT09IDApIHtcbiAgICAgIGN5Y2xlLnB1c2goZGVwKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGVwZW5kZW5jeSBjeWNsZSBkZXRlY3RlZDogJHtjeWNsZS5maWx0ZXIoZCA9PiBkLnZhbHVlKS5tYXAoZCA9PiBkLnZhbHVlIS5ub2RlLnBhdGgpLmpvaW4oJyA9PiAnKX1gKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGlsZHJlbi5hZGQoZGVwKTtcbiAgICBkZXAuYWRkUGFyZW50KHRoaXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRQYXJlbnQoZGVwOiBEZXBlbmRlbmN5VmVydGV4KSB7XG4gICAgdGhpcy5fcGFyZW50cy5hZGQoZGVwKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFJvdXRlKGRzdDogRGVwZW5kZW5jeVZlcnRleCk6IERlcGVuZGVuY3lWZXJ0ZXhbXSB7XG5cbiAgICBjb25zdCByb3V0ZTogRGVwZW5kZW5jeVZlcnRleFtdID0gW107XG4gICAgdmlzaXQodGhpcyk7XG4gICAgcmV0dXJuIHJvdXRlO1xuXG4gICAgZnVuY3Rpb24gdmlzaXQobjogRGVwZW5kZW5jeVZlcnRleCk6IGJvb2xlYW4ge1xuICAgICAgcm91dGUucHVzaChuKTtcbiAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgZm9yIChjb25zdCBjIG9mIG4ub3V0Ym91bmQpIHtcbiAgICAgICAgaWYgKGMgPT09IGRzdCkge1xuICAgICAgICAgIHJvdXRlLnB1c2goYyk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZm91bmQgPSB2aXNpdChjKTtcbiAgICAgIH1cbiAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgcm91dGUucG9wKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm91bmQ7XG5cbiAgICB9XG5cbiAgfVxufVxuIl19
|
|
149032
149032
|
|
|
149033
149033
|
/***/ }),
|
|
@@ -149236,7 +149236,7 @@ class Duration {
|
|
|
149236
149236
|
}
|
|
149237
149237
|
exports.Duration = Duration;
|
|
149238
149238
|
_a = JSII_RTTI_SYMBOL_1;
|
|
149239
|
-
Duration[_a] = { fqn: "cdk8s.Duration", version: "2.69.
|
|
149239
|
+
Duration[_a] = { fqn: "cdk8s.Duration", version: "2.69.57" };
|
|
149240
149240
|
class TimeUnit {
|
|
149241
149241
|
constructor(label, inMillis) {
|
|
149242
149242
|
this.label = label;
|
|
@@ -149332,7 +149332,7 @@ class Helm extends include_1.Include {
|
|
|
149332
149332
|
}
|
|
149333
149333
|
exports.Helm = Helm;
|
|
149334
149334
|
_a = JSII_RTTI_SYMBOL_1;
|
|
149335
|
-
Helm[_a] = { fqn: "cdk8s.Helm", version: "2.69.
|
|
149335
|
+
Helm[_a] = { fqn: "cdk8s.Helm", version: "2.69.57" };
|
|
149336
149336
|
function renderTemplate(workdir, prog, args) {
|
|
149337
149337
|
const helm = _child_process_1._child_process.spawnSync(prog, args, {
|
|
149338
149338
|
maxBuffer: MAX_HELM_BUFFER,
|
|
@@ -149396,7 +149396,7 @@ class Include extends constructs_1.Construct {
|
|
|
149396
149396
|
}
|
|
149397
149397
|
exports.Include = Include;
|
|
149398
149398
|
_a = JSII_RTTI_SYMBOL_1;
|
|
149399
|
-
Include[_a] = { fqn: "cdk8s.Include", version: "2.69.
|
|
149399
|
+
Include[_a] = { fqn: "cdk8s.Include", version: "2.69.57" };
|
|
149400
149400
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmNsdWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkNBQXVDO0FBQ3ZDLDZDQUF5QztBQUN6QyxpQ0FBOEI7QUFXOUI7Ozs7OztHQU1HO0FBQ0gsTUFBYSxPQUFRLFNBQVEsc0JBQVM7SUFDcEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFtQjtRQUMzRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sT0FBTyxHQUFHLFdBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXJDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7WUFDMUIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksU0FBUyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBRXpELHdDQUF3QztZQUN4QyxNQUFNLEtBQUssR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25HLElBQUksc0JBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQWtCLEVBQUUsQ0FBQyxDQUFDLFlBQVksc0JBQVMsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7O0FBckJILDBCQXNCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQXBpT2JqZWN0IH0gZnJvbSAnLi9hcGktb2JqZWN0JztcbmltcG9ydCB7IFlhbWwgfSBmcm9tICcuL3lhbWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEluY2x1ZGVQcm9wcyB7XG4gIC8qKlxuICAgKiBMb2NhbCBmaWxlIHBhdGggb3IgVVJMIHdoaWNoIGluY2x1ZGVzIGEgS3ViZXJuZXRlcyBZQU1MIG1hbmlmZXN0LlxuICAgKlxuICAgKiBAZXhhbXBsZSBteW1hbmlmZXN0LnlhbWxcbiAgICovXG4gIHJlYWRvbmx5IHVybDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlYWRzIGEgWUFNTCBtYW5pZmVzdCBmcm9tIGEgZmlsZSBvciBhIFVSTCBhbmQgZGVmaW5lcyBhbGwgcmVzb3VyY2VzIGFzIEFQSVxuICogb2JqZWN0cyB3aXRoaW4gdGhlIGRlZmluZWQgc2NvcGUuXG4gKlxuICogVGhlIG5hbWVzIChgbWV0YWRhdGEubmFtZWApIG9mIGltcG9ydGVkIHJlc291cmNlcyB3aWxsIGJlIHByZXNlcnZlZCBhcy1pc1xuICogZnJvbSB0aGUgbWFuaWZlc3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbmNsdWRlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEluY2x1ZGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBvYmplY3RzID0gWWFtbC5sb2FkKHByb3BzLnVybCk7XG5cbiAgICBsZXQgb3JkZXIgPSAwO1xuICAgIGZvciAoY29uc3Qgb2JqIG9mIG9iamVjdHMpIHtcbiAgICAgIGNvbnN0IG9iam5hbWUgPSBvYmoubWV0YWRhdGE/Lm5hbWUgPz8gYG9iamVjdCR7b3JkZXIrK31gO1xuXG4gICAgICAvLyByZW5kZXIgYW4gaWQ6IG5hbWVbLWtpbmRdWy1uYW1lc3BhY2VdXG4gICAgICBjb25zdCBvYmppZCA9IFtvYmpuYW1lLCBvYmoua2luZD8udG9Mb3dlckNhc2UoKSwgb2JqLm1ldGFkYXRhPy5uYW1lc3BhY2VdLmZpbHRlcih4ID0+IHgpLmpvaW4oJy0nKTtcbiAgICAgIG5ldyBBcGlPYmplY3QodGhpcywgb2JqaWQsIG9iaik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIHRoZSBpbmNsdWRlZCBBUEkgb2JqZWN0cy5cbiAgICovXG4gIHB1YmxpYyBnZXQgYXBpT2JqZWN0cygpOiBBcGlPYmplY3RbXSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZS5jaGlsZHJlbi5maWx0ZXIoKG8pOiBvIGlzIEFwaU9iamVjdCA9PiBvIGluc3RhbmNlb2YgQXBpT2JqZWN0KTtcbiAgfVxufVxuIl19
|
|
149401
149401
|
|
|
149402
149402
|
/***/ }),
|
|
@@ -149534,7 +149534,7 @@ class JsonPatch {
|
|
|
149534
149534
|
}
|
|
149535
149535
|
exports.JsonPatch = JsonPatch;
|
|
149536
149536
|
_a = JSII_RTTI_SYMBOL_1;
|
|
149537
|
-
JsonPatch[_a] = { fqn: "cdk8s.JsonPatch", version: "2.69.
|
|
149537
|
+
JsonPatch[_a] = { fqn: "cdk8s.JsonPatch", version: "2.69.57" };
|
|
149538
149538
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1wYXRjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9qc29uLXBhdGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscURBQW1FO0FBRW5FOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBYSxTQUFTO0lBQ3BCOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFhLEVBQUUsR0FBRyxHQUFnQjtRQUNwRCxNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFVLEVBQUMsUUFBUSxFQUFFLElBQUEsMkJBQVMsRUFBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFFLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFZLEVBQUUsS0FBVSxJQUFJLE9BQU8sSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVqRzs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBWSxJQUFJLE9BQU8sSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXBGOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVksRUFBRSxLQUFVLElBQUksT0FBTyxJQUFJLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXpHOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFZLEVBQUUsSUFBWSxJQUFJLE9BQU8sSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVwRzs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFZLEVBQUUsSUFBWSxJQUFJLE9BQU8sSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVwRzs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBWSxFQUFFLEtBQVUsSUFBSSxPQUFPLElBQUksU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFbkcsWUFBcUMsU0FBb0I7UUFBcEIsY0FBUyxHQUFULFNBQVMsQ0FBVztJQUFHLENBQUM7SUFFN0Q7Ozs7T0FJRztJQUNJLE9BQU87UUFDWixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQzs7QUFwRUgsOEJBcUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXBwbHlQYXRjaCwgZGVlcENsb25lLCBPcGVyYXRpb24gfSBmcm9tICdmYXN0LWpzb24tcGF0Y2gnO1xuXG4vKipcbiAqIFV0aWxpdHkgZm9yIGFwcGx5aW5nIFJGQy02OTAyIEpTT04tUGF0Y2ggdG8gYSBkb2N1bWVudC5cbiAqXG4gKiBVc2UgdGhlIHRoZSBgSnNvblBhdGNoLmFwcGx5KGRvYywgLi4ub3BzKWAgZnVuY3Rpb24gdG8gYXBwbHkgYSBzZXQgb2ZcbiAqIG9wZXJhdGlvbnMgdG8gYSBKU09OIGRvY3VtZW50IGFuZCByZXR1cm4gdGhlIHJlc3VsdC5cbiAqXG4gKiBPcGVyYXRpb25zIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSBmYWN0b3J5IG1ldGhvZHMgYEpzb25QYXRjaC5hZGQoKWAsXG4gKiBgSnNvblBhdGNoLnJlbW92ZSgpYCwgZXRjLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICpjb25zdCBvdXRwdXQgPSBKc29uUGF0Y2guYXBwbHkoaW5wdXQsXG4gKiAgSnNvblBhdGNoLnJlcGxhY2UoJy93b3JsZC9oaS90aGVyZScsICdnb29kYnllJyksXG4gKiAgSnNvblBhdGNoLmFkZCgnL3dvcmxkL2Zvby8nLCAnYm9vbScpLFxuICogIEpzb25QYXRjaC5yZW1vdmUoJy9oZWxsbycpKTtcbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBKc29uUGF0Y2gge1xuICAvKipcbiAgICogQXBwbGllcyBhIHNldCBvZiBKU09OLVBhdGNoIChSRkMtNjkwMikgb3BlcmF0aW9ucyB0byBgZG9jdW1lbnRgIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuXG4gICAqIEBwYXJhbSBkb2N1bWVudCBUaGUgZG9jdW1lbnQgdG8gcGF0Y2hcbiAgICogQHBhcmFtIG9wcyBUaGUgb3BlcmF0aW9ucyB0byBhcHBseVxuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IGRvY3VtZW50XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFwcGx5KGRvY3VtZW50OiBhbnksIC4uLm9wczogSnNvblBhdGNoW10pOiBhbnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGFwcGx5UGF0Y2goZG9jdW1lbnQsIGRlZXBDbG9uZShvcHMubWFwKG8gPT4gby5fdG9Kc29uKCkpKSk7XG4gICAgcmV0dXJuIHJlc3VsdC5uZXdEb2N1bWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgdmFsdWUgdG8gYW4gb2JqZWN0IG9yIGluc2VydHMgaXQgaW50byBhbiBhcnJheS4gSW4gdGhlIGNhc2Ugb2YgYW5cbiAgICogYXJyYXksIHRoZSB2YWx1ZSBpcyBpbnNlcnRlZCBiZWZvcmUgdGhlIGdpdmVuIGluZGV4LiBUaGUgLSBjaGFyYWN0ZXIgY2FuIGJlXG4gICAqIHVzZWQgaW5zdGVhZCBvZiBhbiBpbmRleCB0byBpbnNlcnQgYXQgdGhlIGVuZCBvZiBhbiBhcnJheS5cbiAgICpcbiAgICogQGV4YW1wbGUgSnNvblBhdGNoLmFkZCgnL2Jpc2N1aXRzLzEnLCB7IFwibmFtZVwiOiBcIkdpbmdlciBOdXRcIiB9KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhZGQocGF0aDogc3RyaW5nLCB2YWx1ZTogYW55KSB7IHJldHVybiBuZXcgSnNvblBhdGNoKHsgb3A6ICdhZGQnLCBwYXRoLCB2YWx1ZSB9KTsgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgdmFsdWUgZnJvbSBhbiBvYmplY3Qgb3IgYXJyYXkuXG4gICAqXG4gICAqIEBleGFtcGxlIEpzb25QYXRjaC5yZW1vdmUoJy9iaXNjdWl0cycpXG4gICAqIEBleGFtcGxlIEpzb25QYXRjaC5yZW1vdmUoJy9iaXNjdWl0cy8wJylcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVtb3ZlKHBhdGg6IHN0cmluZykgeyByZXR1cm4gbmV3IEpzb25QYXRjaCh7IG9wOiAncmVtb3ZlJywgcGF0aCB9KTsgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhIHZhbHVlLiBFcXVpdmFsZW50IHRvIGEg4oCccmVtb3Zl4oCdIGZvbGxvd2VkIGJ5IGFuIOKAnGFkZOKAnS5cbiAgICpcbiAgICogQGV4YW1wbGUgSnNvblBhdGNoLnJlcGxhY2UoJy9iaXNjdWl0cy8wL25hbWUnLCAnQ2hvY29sYXRlIERpZ2VzdGl2ZScpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlcGxhY2UocGF0aDogc3RyaW5nLCB2YWx1ZTogYW55KSB7IHJldHVybiBuZXcgSnNvblBhdGNoKHsgb3A6ICdyZXBsYWNlJywgcGF0aCwgdmFsdWUgfSk7IH1cblxuICAvKipcbiAgICogQ29waWVzIGEgdmFsdWUgZnJvbSBvbmUgbG9jYXRpb24gdG8gYW5vdGhlciB3aXRoaW4gdGhlIEpTT04gZG9jdW1lbnQuIEJvdGhcbiAgICogZnJvbSBhbmQgcGF0aCBhcmUgSlNPTiBQb2ludGVycy5cbiAgICpcbiAgICogQGV4YW1wbGUgSnNvblBhdGNoLmNvcHkoJy9iaXNjdWl0cy8wJywgJy9iZXN0X2Jpc2N1aXQnKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb3B5KGZyb206IHN0cmluZywgcGF0aDogc3RyaW5nKSB7IHJldHVybiBuZXcgSnNvblBhdGNoKHsgb3A6ICdjb3B5JywgZnJvbSwgcGF0aCB9KTsgfVxuXG4gIC8qKlxuICAgKiBNb3ZlcyBhIHZhbHVlIGZyb20gb25lIGxvY2F0aW9uIHRvIHRoZSBvdGhlci4gQm90aCBmcm9tIGFuZCBwYXRoIGFyZSBKU09OIFBvaW50ZXJzLlxuICAgKlxuICAgKiBAZXhhbXBsZSBKc29uUGF0Y2gubW92ZSgnL2Jpc2N1aXRzJywgJy9jb29raWVzJylcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbW92ZShmcm9tOiBzdHJpbmcsIHBhdGg6IHN0cmluZykgeyByZXR1cm4gbmV3IEpzb25QYXRjaCh7IG9wOiAnbW92ZScsIGZyb20sIHBhdGggfSk7IH1cblxuICAvKipcbiAgICogVGVzdHMgdGhhdCB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIHNldCBpbiB0aGUgZG9jdW1lbnQuIElmIHRoZSB0ZXN0IGZhaWxzLFxuICAgKiB0aGVuIHRoZSBwYXRjaCBhcyBhIHdob2xlIHNob3VsZCBub3QgYXBwbHkuXG4gICAqXG4gICAqIEBleGFtcGxlIEpzb25QYXRjaC50ZXN0KCcvYmVzdF9iaXNjdWl0L25hbWUnLCAnQ2hvY28gTGVpYm5peicpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHRlc3QocGF0aDogc3RyaW5nLCB2YWx1ZTogYW55KSB7IHJldHVybiBuZXcgSnNvblBhdGNoKHsgb3A6ICd0ZXN0JywgcGF0aCwgdmFsdWUgfSk7IH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3BlcmF0aW9uOiBPcGVyYXRpb24pIHt9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhpcyBKU09OIHBhdGNoIG9wZXJhdGlvbi5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX3RvSnNvbigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm9wZXJhdGlvbjtcbiAgfVxufSJdfQ==
|
|
149539
149539
|
|
|
149540
149540
|
/***/ }),
|
|
@@ -149561,7 +149561,7 @@ class Lazy {
|
|
|
149561
149561
|
}
|
|
149562
149562
|
exports.Lazy = Lazy;
|
|
149563
149563
|
_a = JSII_RTTI_SYMBOL_1;
|
|
149564
|
-
Lazy[_a] = { fqn: "cdk8s.Lazy", version: "2.69.
|
|
149564
|
+
Lazy[_a] = { fqn: "cdk8s.Lazy", version: "2.69.57" };
|
|
149565
149565
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9sYXp5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsTUFBYSxJQUFJO0lBQ1IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFzQjtRQUN0QyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBbUIsQ0FBQztJQUM5QyxDQUFDO0lBRUQsWUFBcUMsUUFBc0I7UUFBdEIsYUFBUSxHQUFSLFFBQVEsQ0FBYztJQUFHLENBQUM7SUFFeEQsT0FBTztRQUNaLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQyxDQUFDOztBQVRILG9CQVVDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIExhenkge1xuICBwdWJsaWMgc3RhdGljIGFueShwcm9kdWNlcjogSUFueVByb2R1Y2VyKTogYW55IHtcbiAgICByZXR1cm4gbmV3IExhenkocHJvZHVjZXIpIGFzIHVua25vd24gYXMgYW55O1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb2R1Y2VyOiBJQW55UHJvZHVjZXIpIHt9XG5cbiAgcHVibGljIHByb2R1Y2UoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9kdWNlci5wcm9kdWNlKCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQW55UHJvZHVjZXIge1xuICBwcm9kdWNlKCk6IGFueTtcbn1cblxuXG4iXX0=
|
|
149566
149566
|
|
|
149567
149567
|
/***/ }),
|
|
@@ -149660,7 +149660,7 @@ class ApiObjectMetadataDefinition {
|
|
|
149660
149660
|
}
|
|
149661
149661
|
exports.ApiObjectMetadataDefinition = ApiObjectMetadataDefinition;
|
|
149662
149662
|
_a = JSII_RTTI_SYMBOL_1;
|
|
149663
|
-
ApiObjectMetadataDefinition[_a] = { fqn: "cdk8s.ApiObjectMetadataDefinition", version: "2.69.
|
|
149663
|
+
ApiObjectMetadataDefinition[_a] = { fqn: "cdk8s.ApiObjectMetadataDefinition", version: "2.69.57" };
|
|
149664
149664
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbWV0YWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBd0M7QUFFeEMsdUNBQW9DO0FBbUhwQzs7R0FFRztBQUNILE1BQWEsMkJBQTJCO0lBOEN0QyxZQUFZLE9BQTJDO1FBQ3JELElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDcEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkYsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ25DLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUM7UUFFckMsK0VBQStFO1FBQy9FLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxRQUFRLENBQUMsR0FBVyxFQUFFLEtBQWE7UUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVEsQ0FBQyxHQUFXO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxhQUFhLENBQUMsR0FBVyxFQUFFLEtBQWE7UUFDN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxhQUFhLENBQUMsR0FBRyxVQUFvQjtRQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksaUJBQWlCLENBQUMsS0FBcUI7UUFDNUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxHQUFHLENBQUMsR0FBVyxFQUFFLEtBQVU7UUFDaEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNO1FBQ1gsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLElBQUEscUJBQWEsRUFBQyxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRyxPQUFPLFFBQVEsQ0FBQyxJQUFBLGlCQUFPLEVBQUMsRUFBRSxFQUFFO1lBQzFCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQjtZQUM3QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDckMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3BCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsQ0FBQzs7QUFqSUgsa0VBa0lDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2FuaXRpemVWYWx1ZSB9IGZyb20gJy4vX3V0aWwnO1xuaW1wb3J0IHsgQXBpT2JqZWN0IH0gZnJvbSAnLi9hcGktb2JqZWN0JztcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICcuL3Jlc29sdmUnO1xuXG4vKipcbiAqIE1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9iamVjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlPYmplY3RNZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlLCBuYW1lc3BhY2UtZ2xvYmFsLCBuYW1lIG9mIHRoaXMgb2JqZWN0IGluc2lkZSB0aGUgS3ViZXJuZXRlc1xuICAgKiBjbHVzdGVyLlxuICAgKlxuICAgKiBOb3JtYWxseSwgeW91IHNob3VsZG4ndCBzcGVjaWZ5IG5hbWVzIGZvciBvYmplY3RzIGFuZCBsZXQgdGhlIENESyBnZW5lcmF0ZVxuICAgKiBhIG5hbWUgZm9yIHlvdSB0aGF0IGlzIGFwcGxpY2F0aW9uLXVuaXF1ZS4gVGhlIG5hbWVzIENESyBnZW5lcmF0ZXMgYXJlXG4gICAqIGNvbXBvc2VkIGZyb20gdGhlIGNvbnN0cnVjdCBwYXRoIGNvbXBvbmVudHMsIHNlcGFyYXRlZCBieSBkb3RzIGFuZCBhIHN1ZmZpeFxuICAgKiB0aGF0IGlzIGJhc2VkIG9uIGEgaGFzaCBvZiB0aGUgZW50aXJlIHBhdGgsIHRvIGVuc3VyZSB1bmlxdWVuZXNzLlxuICAgKlxuICAgKiBZb3UgY2FuIHN1cHBseSBjdXN0b20gbmFtZSBhbGxvY2F0aW9uIGxvZ2ljIGJ5IG92ZXJyaWRpbmcgdGhlXG4gICAqIGBjaGFydC5nZW5lcmF0ZU9iamVjdE5hbWVgIG1ldGhvZC5cbiAgICpcbiAgICogSWYgeW91IHVzZSBhbiBleHBsaWNpdCBuYW1lIGhlcmUsIGJlYXIgaW4gbWluZCB0aGF0IHRoaXMgcmVkdWNlcyB0aGVcbiAgICogY29tcG9zYWJpbGl0eSBvZiB5b3VyIGNvbnN0cnVjdCBiZWNhdXNlIGl0IHdvbid0IGJlIHBvc3NpYmxlIHRvIGluY2x1ZGVcbiAgICogbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBpbiBhbnkgYXBwLiBUaGVyZWZvcmUgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvXG4gICAqIGxlYXZlIHRoaXMgdW5zcGVjaWZpZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYW4gYXBwLXVuaXF1ZSBuYW1lIGdlbmVyYXRlZCBieSB0aGUgY2hhcnRcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFubm90YXRpb25zIGlzIGFuIHVuc3RydWN0dXJlZCBrZXkgdmFsdWUgbWFwIHN0b3JlZCB3aXRoIGEgcmVzb3VyY2UgdGhhdCBtYXkgYmUgc2V0IGJ5IGV4dGVybmFsIHRvb2xzIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBhcmJpdHJhcnkgbWV0YWRhdGEuIFRoZXkgYXJlIG5vdCBxdWVyeWFibGUgYW5kIHNob3VsZCBiZVxuICAgKiBwcmVzZXJ2ZWQgd2hlbiBtb2RpZnlpbmcgb2JqZWN0cy5cbiAgICpcbiAgICogQHNlZSBodHRwOi8va3ViZXJuZXRlcy5pby9kb2NzL3VzZXItZ3VpZGUvYW5ub3RhdGlvbnNcbiAgICogQGRlZmF1bHQgLSBObyBhbm5vdGF0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IGFubm90YXRpb25zPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogTWFwIG9mIHN0cmluZyBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBvcmdhbml6ZSBhbmQgY2F0ZWdvcml6ZSAoc2NvcGUgYW5kIHNlbGVjdCkgb2JqZWN0cy5cbiAgICogTWF5IG1hdGNoIHNlbGVjdG9ycyBvZiByZXBsaWNhdGlvbiBjb250cm9sbGVycyBhbmQgc2VydmljZXMuXG4gICAqXG4gICAqIEBzZWUgaHR0cDovL2t1YmVybmV0ZXMuaW8vZG9jcy91c2VyLWd1aWRlL2xhYmVsc1xuICAgKiBAZGVmYXVsdCAtIE5vIGxhYmVscy5cbiAgICovXG4gIHJlYWRvbmx5IGxhYmVscz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIE5hbWVzcGFjZSBkZWZpbmVzIHRoZSBzcGFjZSB3aXRoaW4gZWFjaCBuYW1lIG11c3QgYmUgdW5pcXVlLiBBbiBlbXB0eSBuYW1lc3BhY2UgaXMgZXF1aXZhbGVudCB0byB0aGUgXCJkZWZhdWx0XCIgbmFtZXNwYWNlLCBidXQgXCJkZWZhdWx0XCIgaXMgdGhlIGNhbm9uaWNhbCByZXByZXNlbnRhdGlvbi5cbiAgICogTm90IGFsbCBvYmplY3RzIGFyZSByZXF1aXJlZCB0byBiZSBzY29wZWQgdG8gYSBuYW1lc3BhY2UgLSB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZCBmb3IgdGhvc2Ugb2JqZWN0cyB3aWxsIGJlIGVtcHR5LiBNdXN0IGJlIGEgRE5TX0xBQkVMLiBDYW5ub3QgYmUgdXBkYXRlZC4gTW9yZSBpbmZvOiBodHRwOi8va3ViZXJuZXRlcy5pby9kb2NzL3VzZXItZ3VpZGUvbmFtZXNwYWNlc1xuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgKHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlICdkZWZhdWx0JyBuYW1lc3BhY2UpXG4gICAqL1xuICByZWFkb25seSBuYW1lc3BhY2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWVzcGFjZWQga2V5cyB0aGF0IHRlbGwgS3ViZXJuZXRlcyB0byB3YWl0IHVudGlsIHNwZWNpZmljIGNvbmRpdGlvbnMgYXJlXG4gICAqIG1ldCBiZWZvcmUgaXQgZnVsbHkgZGVsZXRlcyByZXNvdXJjZXMgbWFya2VkIGZvciBkZWxldGlvbi5cbiAgICpcbiAgICogTXVzdCBiZSBlbXB0eSBiZWZvcmUgdGhlIG9iamVjdCBpcyBkZWxldGVkIGZyb20gdGhlIHJlZ2lzdHJ5LiBFYWNoIGVudHJ5IGlzXG4gICAqIGFuIGlkZW50aWZpZXIgZm9yIHRoZSByZXNwb25zaWJsZSBjb21wb25lbnQgdGhhdCB3aWxsIHJlbW92ZSB0aGUgZW50cnkgZnJvbVxuICAgKiB0aGUgbGlzdC4gSWYgdGhlIGRlbGV0aW9uVGltZXN0YW1wIG9mIHRoZSBvYmplY3QgaXMgbm9uLW5pbCwgZW50cmllcyBpblxuICAgKiB0aGlzIGxpc3QgY2FuIG9ubHkgYmUgcmVtb3ZlZC4gRmluYWxpemVycyBtYXkgYmUgcHJvY2Vzc2VkIGFuZCByZW1vdmVkIGluXG4gICAqIGFueSBvcmRlci4gIE9yZGVyIGlzIE5PVCBlbmZvcmNlZCBiZWNhdXNlIGl0IGludHJvZHVjZXMgc2lnbmlmaWNhbnQgcmlzayBvZlxuICAgKiBzdHVjayBmaW5hbGl6ZXJzLiBmaW5hbGl6ZXJzIGlzIGEgc2hhcmVkIGZpZWxkLCBhbnkgYWN0b3Igd2l0aCBwZXJtaXNzaW9uXG4gICAqIGNhbiByZW9yZGVyIGl0LiBJZiB0aGUgZmluYWxpemVyIGxpc3QgaXMgcHJvY2Vzc2VkIGluIG9yZGVyLCB0aGVuIHRoaXMgY2FuXG4gICAqIGxlYWQgdG8gYSBzaXR1YXRpb24gaW4gd2hpY2ggdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgdGhlIGZpcnN0XG4gICAqIGZpbmFsaXplciBpbiB0aGUgbGlzdCBpcyB3YWl0aW5nIGZvciBhIHNpZ25hbCAoZmllbGQgdmFsdWUsIGV4dGVybmFsXG4gICAqIHN5c3RlbSwgb3Igb3RoZXIpIHByb2R1Y2VkIGJ5IGEgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBhIGZpbmFsaXplciBsYXRlclxuICAgKiBpbiB0aGUgbGlzdCwgcmVzdWx0aW5nIGluIGEgZGVhZGxvY2suIFdpdGhvdXQgZW5mb3JjZWQgb3JkZXJpbmcgZmluYWxpemVyc1xuICAgKiBhcmUgZnJlZSB0byBvcmRlciBhbW9uZ3N0IHRoZW1zZWx2ZXMgYW5kIGFyZSBub3QgdnVsbmVyYWJsZSB0byBvcmRlcmluZ1xuICAgKiBjaGFuZ2VzIGluIHRoZSBsaXN0LlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL292ZXJ2aWV3L3dvcmtpbmctd2l0aC1vYmplY3RzL2ZpbmFsaXplcnMvXG4gICAqIEBkZWZhdWx0IC0gTm8gZmluYWxpemVycy5cbiAgICovXG4gIHJlYWRvbmx5IGZpbmFsaXplcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTGlzdCBvZiBvYmplY3RzIGRlcGVuZGVkIGJ5IHRoaXMgb2JqZWN0LiBJZiBBTEwgb2JqZWN0cyBpbiB0aGUgbGlzdCBoYXZlXG4gICAqIGJlZW4gZGVsZXRlZCwgdGhpcyBvYmplY3Qgd2lsbCBiZSBnYXJiYWdlIGNvbGxlY3RlZC4gSWYgdGhpcyBvYmplY3QgaXNcbiAgICogbWFuYWdlZCBieSBhIGNvbnRyb2xsZXIsIHRoZW4gYW4gZW50cnkgaW4gdGhpcyBsaXN0IHdpbGwgcG9pbnQgdG8gdGhpc1xuICAgKiBjb250cm9sbGVyLCB3aXRoIHRoZSBjb250cm9sbGVyIGZpZWxkIHNldCB0byB0cnVlLiBUaGVyZSBjYW5ub3QgYmUgbW9yZVxuICAgKiB0aGFuIG9uZSBtYW5hZ2luZyBjb250cm9sbGVyLlxuICAgKlxuICAgKiBLdWJlcm5ldGVzIHNldHMgdGhlIHZhbHVlIG9mIHRoaXMgZmllbGQgYXV0b21hdGljYWxseSBmb3Igb2JqZWN0cyB0aGF0IGFyZVxuICAgKiBkZXBlbmRlbnRzIG9mIG90aGVyIG9iamVjdHMgbGlrZSBSZXBsaWNhU2V0cywgRGFlbW9uU2V0cywgRGVwbG95bWVudHMsIEpvYnNcbiAgICogYW5kIENyb25Kb2JzLCBhbmQgUmVwbGljYXRpb25Db250cm9sbGVycy4gWW91IGNhbiBhbHNvIGNvbmZpZ3VyZSB0aGVzZVxuICAgKiByZWxhdGlvbnNoaXBzIG1hbnVhbGx5IGJ5IGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxkLiBIb3dldmVyLCB5b3VcbiAgICogdXN1YWxseSBkb24ndCBuZWVkIHRvIGFuZCBjYW4gYWxsb3cgS3ViZXJuZXRlcyB0byBhdXRvbWF0aWNhbGx5IG1hbmFnZSB0aGVcbiAgICogcmVsYXRpb25zaGlwcy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9vdmVydmlldy93b3JraW5nLXdpdGgtb2JqZWN0cy9vd25lcnMtZGVwZW5kZW50cy9cbiAgICogQGRlZmF1bHQgLSBhdXRvbWF0aWNhbGx5IHNldCBieSBLdWJlcm5ldGVzXG4gICAqL1xuICByZWFkb25seSBvd25lclJlZmVyZW5jZXM/OiBPd25lclJlZmVyZW5jZVtdO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIG1ldGFkYXRhIGF0dHJpYnV0ZXMuXG4gICAqIEBqc2lpIGlnbm9yZVxuICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jZGs4cy10ZWFtL2NkazhzLWNvcmUvaXNzdWVzLzEyOTdcbiAgICovXG4gIHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgQXBpT2JqZWN0TWV0YWRhdGFEZWZpbml0aW9uYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlPYmplY3RNZXRhZGF0YURlZmluaXRpb25PcHRpb25zIGV4dGVuZHMgQXBpT2JqZWN0TWV0YWRhdGEge1xuXG4gIC8qKlxuICAgKiBXaGljaCBBcGlPYmplY3QgaW5zdGFuY2UgaXMgdGhlIG1ldGFkYXRhIGF0dGFjaGVkIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBpT2JqZWN0OiBBcGlPYmplY3Q7XG5cbn1cblxuLyoqXG4gKiBPYmplY3QgbWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBjbGFzcyBBcGlPYmplY3RNZXRhZGF0YURlZmluaXRpb24ge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFQSSBvYmplY3QuXG4gICAqXG4gICAqIElmIGEgbmFtZSBpcyBzcGVjaWZpZWQgaW4gYG1ldGFkYXRhLm5hbWVgIHRoaXMgd2lsbCBiZSB0aGUgbmFtZSByZXR1cm5lZC5cbiAgICogT3RoZXJ3aXNlLCBhIG5hbWUgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgY2FsbGluZ1xuICAgKiBgQ2hhcnQub2YodGhpcykuZ2VuZXJhdGVkT2JqZWN0TmFtZSh0aGlzKWAsIHdoaWNoIGJ5IGRlZmF1bHQgdXNlcyB0aGVcbiAgICogY29uc3RydWN0IHBhdGggdG8gZ2VuZXJhdGUgYSBETlMtY29tcGF0aWJsZSBuYW1lIGZvciB0aGUgcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9iamVjdCdzIG5hbWVzcGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lc3BhY2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExhYmVscyBhc3NvY2lhdGVkIHdpdGggdGhpcyBvYmplY3QuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGxhYmVsczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQW5ub3RhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb2JqZWN0LlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBhbm5vdGF0aW9uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogRmluYWxpemVycyBhc3NvY2lhdGVkIHdpdGggdGhpcyBvYmplY3QuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGZpbmFsaXplcnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBPd25lciByZWZlcmVuY2VzIHNldCBmb3IgdGhpcyBvYmplY3QuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG93bmVyUmVmZXJlbmNlczogT3duZXJSZWZlcmVuY2VbXTtcblxuICAvKipcbiAgICogVGhlIEFwaU9iamVjdCB0aGlzIG1ldGFkYXRhIGlzIGF0dGFjaGVkIHRvLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBhcGlPYmplY3Q6IEFwaU9iamVjdDtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBtZXRhZGF0YSBhdHRyaWJ1dGVzIHBhc3NlZCB0aHJvdWdoIGBvcHRpb25zYC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2FkZGl0aW9uYWxBdHRyaWJ1dGVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEFwaU9iamVjdE1ldGFkYXRhRGVmaW5pdGlvbk9wdGlvbnMpIHtcbiAgICB0aGlzLm5hbWUgPSBvcHRpb25zLm5hbWU7XG4gICAgdGhpcy5sYWJlbHMgPSB7IC4uLihvcHRpb25zLmxhYmVscyA/PyB7fSkgfTtcbiAgICB0aGlzLmFubm90YXRpb25zID0geyAuLi4ob3B0aW9ucy5hbm5vdGF0aW9ucyA/PyB7fSkgfTtcbiAgICB0aGlzLm5hbWVzcGFjZSA9IG9wdGlvbnMubmFtZXNwYWNlO1xuICAgIHRoaXMuZmluYWxpemVycyA9IG9wdGlvbnMuZmluYWxpemVycyA/IFsuLi5vcHRpb25zLmZpbmFsaXplcnNdIDogW107XG4gICAgdGhpcy5vd25lclJlZmVyZW5jZXMgPSBvcHRpb25zLm93bmVyUmVmZXJlbmNlcyA/IFsuLi5vcHRpb25zLm93bmVyUmVmZXJlbmNlc10gOiBbXTtcbiAgICB0aGlzLmFwaU9iamVjdCA9IG9wdGlvbnMuYXBpT2JqZWN0O1xuICAgIHRoaXMuX2FkZGl0aW9uYWxBdHRyaWJ1dGVzID0gb3B0aW9ucztcblxuICAgIC8vIG90aGVyd2lzZSBhcGlPYmplY3QgaXMgcGFzc2VkIHRvIHRoZSByZXNvbHZpbmcgbG9naWMsIHdoaWNoIGV4cGVjdGFkbHkgZmFpbHNcbiAgICBkZWxldGUgdGhpcy5fYWRkaXRpb25hbEF0dHJpYnV0ZXMuYXBpT2JqZWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGxhYmVsLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleS5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGFkZExhYmVsKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5sYWJlbHNba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIGEgdmFsdWUgb2YgYSBsYWJlbCBvciB1bmRlZmluZWRcbiAgICogQHBhcmFtIGtleSB0aGUgbGFiZWxcbiAgICovXG4gIHB1YmxpYyBnZXRMYWJlbChrZXk6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxzW2tleV07XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGFubm90YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5LlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgYWRkQW5ub3RhdGlvbihrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuYW5ub3RhdGlvbnNba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBvbmUgb3IgbW9yZSBmaW5hbGl6ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gZmluYWxpemVycyB0aGUgZmluYWxpemVyc1xuICAgKi9cbiAgcHVibGljIGFkZEZpbmFsaXplcnMoLi4uZmluYWxpemVyczogc3RyaW5nW10pIHtcbiAgICB0aGlzLmZpbmFsaXplcnMucHVzaCguLi5maW5hbGl6ZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gb3duZXIuXG4gICAqXG4gICAqIEBwYXJhbSBvd25lciB0aGUgb3duZXJcbiAgICovXG4gIHB1YmxpYyBhZGRPd25lclJlZmVyZW5jZShvd25lcjogT3duZXJSZWZlcmVuY2UpIHtcbiAgICB0aGlzLm93bmVyUmVmZXJlbmNlcy5wdXNoKG93bmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGFyYml0cmFyeSBrZXkvdmFsdWUgdG8gdGhlIG9iamVjdCBtZXRhZGF0YS5cbiAgICogQHBhcmFtIGtleSBNZXRhZGF0YSBrZXlcbiAgICogQHBhcmFtIHZhbHVlIE1ldGFkYXRhIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgYWRkKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fYWRkaXRpb25hbEF0dHJpYnV0ZXNba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bnRoZXNpemVzIGEgazhzIE9iamVjdE1ldGEgZm9yIHRoaXMgbWV0YWRhdGEgc2V0LlxuICAgKi9cbiAgcHVibGljIHRvSnNvbigpIHtcbiAgICBjb25zdCBzYW5pdGl6ZSA9ICh4OiBhbnkpID0+IHNhbml0aXplVmFsdWUoeCwgeyBmaWx0ZXJFbXB0eUFycmF5czogdHJ1ZSwgZmlsdGVyRW1wdHlPYmplY3RzOiB0cnVlIH0pO1xuICAgIHJldHVybiBzYW5pdGl6ZShyZXNvbHZlKFtdLCB7XG4gICAgICAuLi50aGlzLl9hZGRpdGlvbmFsQXR0cmlidXRlcyxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIG5hbWVzcGFjZTogdGhpcy5uYW1lc3BhY2UsXG4gICAgICBhbm5vdGF0aW9uczogdGhpcy5hbm5vdGF0aW9ucyxcbiAgICAgIGZpbmFsaXplcnM6IHRoaXMuZmluYWxpemVycyxcbiAgICAgIG93bmVyUmVmZXJlbmNlczogdGhpcy5vd25lclJlZmVyZW5jZXMsXG4gICAgICBsYWJlbHM6IHRoaXMubGFiZWxzLFxuICAgIH0sIHRoaXMuYXBpT2JqZWN0KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBPd25lclJlZmVyZW5jZSBjb250YWlucyBlbm91Z2ggaW5mb3JtYXRpb24gdG8gbGV0IHlvdSBpZGVudGlmeSBhbiBvd25pbmdcbiAqIG9iamVjdC4gQW4gb3duaW5nIG9iamVjdCBtdXN0IGJlIGluIHRoZSBzYW1lIG5hbWVzcGFjZSBhcyB0aGUgZGVwZW5kZW50LCBvclxuICogYmUgY2x1c3Rlci1zY29wZWQsIHNvIHRoZXJlIGlzIG5vIG5hbWVzcGFjZSBmaWVsZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPd25lclJlZmVyZW5jZSB7XG4gIC8qKlxuICAgKiBBUEkgdmVyc2lvbiBvZiB0aGUgcmVmZXJlbnQuXG4gICAqL1xuICByZWFkb25seSBhcGlWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHRydWUsIEFORCBpZiB0aGUgb3duZXIgaGFzIHRoZSBcImZvcmVncm91bmREZWxldGlvblwiIGZpbmFsaXplciwgdGhlbiB0aGVcbiAgICogb3duZXIgY2Fubm90IGJlIGRlbGV0ZWQgZnJvbSB0aGUga2V5LXZhbHVlIHN0b3JlIHVudGlsIHRoaXMgcmVmZXJlbmNlIGlzXG4gICAqIHJlbW92ZWQuIERlZmF1bHRzIHRvIGZhbHNlLiBUbyBzZXQgdGhpcyBmaWVsZCwgYSB1c2VyIG5lZWRzIFwiZGVsZXRlXCJcbiAgICogcGVybWlzc2lvbiBvZiB0aGUgb3duZXIsIG90aGVyd2lzZSA0MjIgKFVucHJvY2Vzc2FibGUgRW50aXR5KSB3aWxsIGJlXG4gICAqIHJldHVybmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZS4gVG8gc2V0IHRoaXMgZmllbGQsIGEgdXNlciBuZWVkcyBcImRlbGV0ZVwiIHBlcm1pc3Npb24gb2YgdGhlXG4gICAqIG93bmVyLCBvdGhlcndpc2UgNDIyIChVbnByb2Nlc3NhYmxlIEVudGl0eSkgd2lsbCBiZSByZXR1cm5lZC5cbiAgICovXG4gIHJlYWRvbmx5IGJsb2NrT3duZXJEZWxldGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHRydWUsIHRoaXMgcmVmZXJlbmNlIHBvaW50cyB0byB0aGUgbWFuYWdpbmcgY29udHJvbGxlci5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRyb2xsZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBLaW5kIG9mIHRoZSByZWZlcmVudC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kc1xuICAgKi9cbiAgcmVhZG9ubHkga2luZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSByZWZlcmVudC5cbiAgICpcbiAgICogQHNlZSBodHRwOi8va3ViZXJuZXRlcy5pby9kb2NzL3VzZXItZ3VpZGUvaWRlbnRpZmllcnMjbmFtZXNcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVUlEIG9mIHRoZSByZWZlcmVudC5cbiAgICpcbiAgICogQHNlZSBodHRwOi8va3ViZXJuZXRlcy5pby9kb2NzL3VzZXItZ3VpZGUvaWRlbnRpZmllcnMjdWlkc1xuICAgKi9cbiAgcmVhZG9ubHkgdWlkOiBzdHJpbmc7XG5cbn1cbiJdfQ==
|
|
149665
149665
|
|
|
149666
149666
|
/***/ }),
|
|
@@ -149791,7 +149791,7 @@ class Names {
|
|
|
149791
149791
|
}
|
|
149792
149792
|
exports.Names = Names;
|
|
149793
149793
|
_a = JSII_RTTI_SYMBOL_1;
|
|
149794
|
-
Names[_a] = { fqn: "cdk8s.Names", version: "2.69.
|
|
149794
|
+
Names[_a] = { fqn: "cdk8s.Names", version: "2.69.57" };
|
|
149795
149795
|
function omitDuplicates(value, index, components) {
|
|
149796
149796
|
return value !== components[index - 1];
|
|
149797
149797
|
}
|
|
@@ -149883,7 +149883,7 @@ class ResolutionContext {
|
|
|
149883
149883
|
}
|
|
149884
149884
|
exports.ResolutionContext = ResolutionContext;
|
|
149885
149885
|
_a = JSII_RTTI_SYMBOL_1;
|
|
149886
|
-
ResolutionContext[_a] = { fqn: "cdk8s.ResolutionContext", version: "2.69.
|
|
149886
|
+
ResolutionContext[_a] = { fqn: "cdk8s.ResolutionContext", version: "2.69.57" };
|
|
149887
149887
|
/**
|
|
149888
149888
|
* Resolvers instanecs of `Lazy`.
|
|
149889
149889
|
*/
|
|
@@ -149897,7 +149897,7 @@ class LazyResolver {
|
|
|
149897
149897
|
}
|
|
149898
149898
|
exports.LazyResolver = LazyResolver;
|
|
149899
149899
|
_b = JSII_RTTI_SYMBOL_1;
|
|
149900
|
-
LazyResolver[_b] = { fqn: "cdk8s.LazyResolver", version: "2.69.
|
|
149900
|
+
LazyResolver[_b] = { fqn: "cdk8s.LazyResolver", version: "2.69.57" };
|
|
149901
149901
|
/**
|
|
149902
149902
|
* Resolves implicit tokens.
|
|
149903
149903
|
*/
|
|
@@ -149911,7 +149911,7 @@ class ImplicitTokenResolver {
|
|
|
149911
149911
|
}
|
|
149912
149912
|
exports.ImplicitTokenResolver = ImplicitTokenResolver;
|
|
149913
149913
|
_c = JSII_RTTI_SYMBOL_1;
|
|
149914
|
-
ImplicitTokenResolver[_c] = { fqn: "cdk8s.ImplicitTokenResolver", version: "2.69.
|
|
149914
|
+
ImplicitTokenResolver[_c] = { fqn: "cdk8s.ImplicitTokenResolver", version: "2.69.57" };
|
|
149915
149915
|
/**
|
|
149916
149916
|
* Resolves union types that allow using either number or string (as generated by the CLI).
|
|
149917
149917
|
*
|
|
@@ -149932,7 +149932,7 @@ class NumberStringUnionResolver {
|
|
|
149932
149932
|
}
|
|
149933
149933
|
exports.NumberStringUnionResolver = NumberStringUnionResolver;
|
|
149934
149934
|
_d = JSII_RTTI_SYMBOL_1;
|
|
149935
|
-
NumberStringUnionResolver[_d] = { fqn: "cdk8s.NumberStringUnionResolver", version: "2.69.
|
|
149935
|
+
NumberStringUnionResolver[_d] = { fqn: "cdk8s.NumberStringUnionResolver", version: "2.69.57" };
|
|
149936
149936
|
NumberStringUnionResolver.TYPES = ['number', 'string'];
|
|
149937
149937
|
/**
|
|
149938
149938
|
* Resolves any value attached to a specific ApiObject.
|
|
@@ -150068,7 +150068,7 @@ class Size {
|
|
|
150068
150068
|
}
|
|
150069
150069
|
exports.Size = Size;
|
|
150070
150070
|
_a = JSII_RTTI_SYMBOL_1;
|
|
150071
|
-
Size[_a] = { fqn: "cdk8s.Size", version: "2.69.
|
|
150071
|
+
Size[_a] = { fqn: "cdk8s.Size", version: "2.69.57" };
|
|
150072
150072
|
/**
|
|
150073
150073
|
* Rounding behaviour when converting between units of `Size`.
|
|
150074
150074
|
*/
|
|
@@ -150173,7 +150173,7 @@ class Testing {
|
|
|
150173
150173
|
}
|
|
150174
150174
|
exports.Testing = Testing;
|
|
150175
150175
|
_a = JSII_RTTI_SYMBOL_1;
|
|
150176
|
-
Testing[_a] = { fqn: "cdk8s.Testing", version: "2.69.
|
|
150176
|
+
Testing[_a] = { fqn: "cdk8s.Testing", version: "2.69.57" };
|
|
150177
150177
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90ZXN0aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsK0JBQXNDO0FBQ3RDLG1DQUFnQztBQUVoQzs7R0FFRztBQUNILE1BQWEsT0FBTztJQUNsQjs7O09BR0c7SUFDSSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQWdCO1FBQ2hDLElBQUksTUFBYyxDQUFDO1FBQ25CLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDbkYsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFDRCxPQUFPLElBQUksU0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsS0FBSztRQUNqQixPQUFPLElBQUksYUFBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQVk7UUFDOUIsT0FBTyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELDBCQUEwQjtJQUMxQjtRQUNFLE9BQU87SUFDVCxDQUFDOztBQWhDSCwwQkFpQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQXBwLCBBcHBQcm9wcyB9IGZyb20gJy4vYXBwJztcbmltcG9ydCB7IENoYXJ0IH0gZnJvbSAnLi9jaGFydCc7XG5cbi8qKlxuICogVGVzdGluZyB1dGlsaXRpZXMgZm9yIGNkazhzIGFwcGxpY2F0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlc3Rpbmcge1xuICAvKipcbiAgICogUmV0dXJucyBhbiBhcHAgZm9yIHRlc3Rpbmcgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAqIC0gT3V0cHV0IGRpcmVjdG9yeSBpcyBhIHRlbXAgZGlyLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhcHAocHJvcHM/OiBBcHBQcm9wcykge1xuICAgIGxldCBvdXRkaXI6IHN0cmluZztcbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIG91dGRpciA9IHByb3BzLm91dGRpciA/PyBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksICdjZGs4cy5vdXRkaXIuJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRkaXIgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksICdjZGs4cy5vdXRkaXIuJykpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEFwcCh7IG91dGRpciwgLi4ucHJvcHMgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgYSBDaGFydCB0aGF0IGNhbiBiZSB1c2VkIGZvciB0ZXN0c1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjaGFydCgpIHtcbiAgICByZXR1cm4gbmV3IENoYXJ0KHRoaXMuYXBwKCksICd0ZXN0Jyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgS3ViZXJuZXRlcyBtYW5pZmVzdCBzeW50aGVzaXplZCBmcm9tIHRoaXMgY2hhcnQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHN5bnRoKGNoYXJ0OiBDaGFydCk6IGFueVtdIHtcbiAgICByZXR1cm4gY2hhcnQudG9Kc29uKCk7XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHJldHVybjtcbiAgfVxufVxuIl19
|
|
150178
150178
|
|
|
150179
150179
|
/***/ }),
|
|
@@ -150282,19 +150282,19 @@ class Yaml {
|
|
|
150282
150282
|
}
|
|
150283
150283
|
exports.Yaml = Yaml;
|
|
150284
150284
|
_a = JSII_RTTI_SYMBOL_1;
|
|
150285
|
-
Yaml[_a] = { fqn: "cdk8s.Yaml", version: "2.69.
|
|
150285
|
+
Yaml[_a] = { fqn: "cdk8s.Yaml", version: "2.69.57" };
|
|
150286
150286
|
/**
|
|
150287
150287
|
* Loads a url (or file) and returns the contents.
|
|
150288
150288
|
* This method spawns a child process in order to perform an http call synchronously.
|
|
150289
150289
|
*/
|
|
150290
150290
|
function loadurl(url) {
|
|
150291
|
-
const script = __nccwpck_require__.ab + "_loadurl.
|
|
150292
|
-
return (0, child_process_1.execFileSync)(process.execPath, [__nccwpck_require__.ab + "_loadurl.
|
|
150291
|
+
const script = __nccwpck_require__.ab + "_loadurl.mjs";
|
|
150292
|
+
return (0, child_process_1.execFileSync)(process.execPath, [__nccwpck_require__.ab + "_loadurl.mjs", url], {
|
|
150293
150293
|
encoding: 'utf-8',
|
|
150294
150294
|
maxBuffer: MAX_DOWNLOAD_BUFFER,
|
|
150295
150295
|
}).toString();
|
|
150296
150296
|
}
|
|
150297
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
150297
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWFtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy95YW1sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaURBQTZDO0FBQzdDLHlCQUF5QjtBQUN6Qix5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLDZCQUE2QjtBQUU3QixNQUFNLG1CQUFtQixHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBRTdDLG9IQUFvSDtBQUNwSCx1RUFBdUU7QUFDdkUsMEVBQTBFO0FBQzFFLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBRWhDOztHQUVHO0FBQ0gsTUFBYSxJQUFJO0lBQ2Y7O09BRUc7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLElBQVc7UUFDckMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQWdCLEVBQUUsSUFBVztRQUM5QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDckMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQVc7UUFDcEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUNiLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUNuSCxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQVc7UUFDM0IsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFCLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBaUI7UUFDbEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWhDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUU7WUFDM0MsT0FBTyxFQUFFLGlCQUFpQjtTQUMzQixDQUFDLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBTyxDQUFDO1FBRWhDLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDL0MsdUJBQXVCO1lBQ3ZCLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUFDLFNBQVM7WUFBQyxDQUFDO1lBQ3BDLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUFDLFNBQVM7WUFBQyxDQUFDO1lBQy9CLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUFDLFNBQVM7WUFBQyxDQUFDO1lBQ3pELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFBQyxTQUFTO1lBQUMsQ0FBQztZQUU3RSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSDtRQUNFLE9BQU87SUFDVCxDQUFDOztBQWpGSCxvQkFrRkM7OztBQUVEOzs7R0FHRztBQUNILFNBQVMsT0FBTyxDQUFDLEdBQVc7SUFDMUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDcEQsT0FBTyxJQUFBLDRCQUFZLEVBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRTtRQUNuRCxRQUFRLEVBQUUsT0FBTztRQUNqQixTQUFTLEVBQUUsbUJBQW1CO0tBQy9CLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlY0ZpbGVTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgWUFNTCBmcm9tICd5YW1sJztcblxuY29uc3QgTUFYX0RPV05MT0FEX0JVRkZFUiA9IDEwICogMTAyNCAqIDEwMjQ7XG5cbi8vIFNldCBkZWZhdWx0IFlBTUwgc2NoZW1hIHRvIDEuMS4gVGhpcyBlbnN1cmVzIHNhdmVkIFlBTUwgaXMgYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIG90aGVyIHBhcnNlcnMsIHN1Y2ggYXMgUHlZQU1MXG4vLyBJdCBhbHNvIGVuc3VyZXMgdGhhdCBvY3RhbCBudW1iZXJzIGluIHRoZSBmb3JtIGAwNzc1YCB3aWxsIGJlIHBhcnNlZFxuLy8gY29ycmVjdGx5IG9uIFlBTUwgbG9hZC4gKHNlZSBodHRwczovL2dpdGh1Yi5jb20vZWVtZWxpL3lhbWwvaXNzdWVzLzIwNSlcbmNvbnN0IHlhbWxTY2hlbWFWZXJzaW9uID0gJzEuMSc7XG5cbi8qKlxuICogWUFNTCB1dGlsaXRpZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBZYW1sIHtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgc3RyaW5naWZ5KGRvY1ssIGRvYywgLi4uXSlgXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZvcm1hdE9iamVjdHMoZG9jczogYW55W10pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0cmluZ2lmeSguLi5kb2NzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBhIHNldCBvZiBvYmplY3RzIGFzIGEgbXVsdGktZG9jdW1lbnQgWUFNTCBmaWxlLlxuICAgKiBAcGFyYW0gZmlsZVBhdGggVGhlIG91dHB1dCBwYXRoXG4gICAqIEBwYXJhbSBkb2NzIFRoZSBzZXQgb2Ygb2JqZWN0c1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzYXZlKGZpbGVQYXRoOiBzdHJpbmcsIGRvY3M6IGFueVtdKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuc3RyaW5naWZ5KC4uLmRvY3MpO1xuICAgIGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGRhdGEsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdHJpbmdpZnkgYSBkb2N1bWVudCAob3IgbXVsdGlwbGUgZG9jdW1lbnRzKSBpbnRvIFlBTUxcbiAgICpcbiAgICogV2UgY29udmVydCB1bmRlZmluZWQgdmFsdWVzIHRvIG51bGwsIGJ1dCBpZ25vcmUgYW55IGRvY3VtZW50cyB0aGF0IGFyZVxuICAgKiB1bmRlZmluZWQuXG4gICAqXG4gICAqIEBwYXJhbSBkb2NzIEEgc2V0IG9mIG9iamVjdHMgdG8gY29udmVydCB0byBZQU1MXG4gICAqIEByZXR1cm5zIGEgWUFNTCBzdHJpbmcuIE11bHRpcGxlIGRvY3MgYXJlIHNlcGFyYXRlZCBieSBgLS0tYC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3RyaW5naWZ5KC4uLmRvY3M6IGFueVtdKSB7XG4gICAgcmV0dXJuIGRvY3MubWFwKFxuICAgICAgciA9PiByID09PSB1bmRlZmluZWQgPyAnXFxuJyA6IFlBTUwuc3RyaW5naWZ5KHIsIHsga2VlcFVuZGVmaW5lZDogdHJ1ZSwgbGluZVdpZHRoOiAwLCB2ZXJzaW9uOiB5YW1sU2NoZW1hVmVyc2lvbiB9KSxcbiAgICApLmpvaW4oJy0tLVxcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGEgc2V0IG9mIFlBTUwgZG9jdW1lbnRzIGludG8gYSB0ZW1wIGZpbGUgKGluIC90bXApXG4gICAqXG4gICAqIEByZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSB0ZW1wb3JhcnkgZmlsZVxuICAgKiBAcGFyYW0gZG9jcyB0aGUgc2V0IG9mIGRvY3VtZW50cyB0byBzYXZlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHRtcChkb2NzOiBhbnlbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgdG1wZGlyID0gZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKG9zLnRtcGRpcigpLCAnY2RrOHMtJykpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRtcGRpciwgJ3RlbXAueWFtbCcpO1xuICAgIFlhbWwuc2F2ZShmaWxlUGF0aCwgZG9jcyk7XG4gICAgcmV0dXJuIGZpbGVQYXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIERvd25sb2FkcyBhIHNldCBvZiBZQU1MIGRvY3VtZW50cyAoazhzIG1hbmlmZXN0IGZvciBleGFtcGxlKSBmcm9tIGEgVVJMIG9yXG4gICAqIGEgZmlsZSBhbmQgcmV0dXJucyB0aGVtIGFzIGphdmFzY3JpcHQgb2JqZWN0cy5cbiAgICpcbiAgICogRW1wdHkgZG9jdW1lbnRzIGFyZSBmaWx0ZXJlZCBvdXQuXG4gICAqXG4gICAqIEBwYXJhbSB1cmxPckZpbGUgYSBVUkwgb2YgYSBmaWxlIHBhdGggdG8gbG9hZCBmcm9tXG4gICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIG9iamVjdHMsIGVhY2ggcmVwcmVzZW50cyBhIGRvY3VtZW50IGluc2lkZSB0aGUgWUFNTFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBsb2FkKHVybE9yRmlsZTogc3RyaW5nKTogYW55W10ge1xuICAgIGNvbnN0IGJvZHkgPSBsb2FkdXJsKHVybE9yRmlsZSk7XG5cbiAgICBjb25zdCBvYmplY3RzID0gWUFNTC5wYXJzZUFsbERvY3VtZW50cyhib2R5LCB7XG4gICAgICB2ZXJzaW9uOiB5YW1sU2NoZW1hVmVyc2lvbixcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgQXJyYXk8YW55PigpO1xuXG4gICAgZm9yIChjb25zdCBvYmogb2Ygb2JqZWN0cy5tYXAoeCA9PiB4LnRvSlNPTigpKSkge1xuICAgICAgLy8gc2tpcCBlbXB0eSBkb2N1bWVudHNcbiAgICAgIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyBjb250aW51ZTsgfVxuICAgICAgaWYgKG9iaiA9PT0gbnVsbCkgeyBjb250aW51ZTsgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSAmJiBvYmoubGVuZ3RoID09PSAwKSB7IGNvbnRpbnVlOyB9XG4gICAgICBpZiAodHlwZW9mIChvYmopID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMCkgeyBjb250aW51ZTsgfVxuXG4gICAgICByZXN1bHQucHVzaChvYmopO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVXRpbGl0eSBjbGFzcy5cbiAgICovXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgcmV0dXJuO1xuICB9XG59XG5cbi8qKlxuICogTG9hZHMgYSB1cmwgKG9yIGZpbGUpIGFuZCByZXR1cm5zIHRoZSBjb250ZW50cy5cbiAqIFRoaXMgbWV0aG9kIHNwYXducyBhIGNoaWxkIHByb2Nlc3MgaW4gb3JkZXIgdG8gcGVyZm9ybSBhbiBodHRwIGNhbGwgc3luY2hyb25vdXNseS5cbiAqL1xuZnVuY3Rpb24gbG9hZHVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNjcmlwdCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICdfbG9hZHVybC5tanMnKTtcbiAgcmV0dXJuIGV4ZWNGaWxlU3luYyhwcm9jZXNzLmV4ZWNQYXRoLCBbc2NyaXB0LCB1cmxdLCB7XG4gICAgZW5jb2Rpbmc6ICd1dGYtOCcsXG4gICAgbWF4QnVmZmVyOiBNQVhfRE9XTkxPQURfQlVGRkVSLFxuICB9KS50b1N0cmluZygpO1xufVxuIl19
|
|
150298
150298
|
|
|
150299
150299
|
/***/ }),
|
|
150300
150300
|
|
|
@@ -224043,7 +224043,7 @@ class Sender {
|
|
|
224043
224043
|
/**
|
|
224044
224044
|
* Sends a frame.
|
|
224045
224045
|
*
|
|
224046
|
-
* @param {Buffer[]} list The frame to send
|
|
224046
|
+
* @param {(Buffer | String)[]} list The frame to send
|
|
224047
224047
|
* @param {Function} [cb] Callback
|
|
224048
224048
|
* @private
|
|
224049
224049
|
*/
|
|
@@ -224100,8 +224100,10 @@ function onError(sender, err, cb) {
|
|
|
224100
224100
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
224101
224101
|
|
|
224102
224102
|
"use strict";
|
|
224103
|
+
/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^WebSocket$" }] */
|
|
224103
224104
|
|
|
224104
224105
|
|
|
224106
|
+
const WebSocket = __nccwpck_require__(69427);
|
|
224105
224107
|
const { Duplex } = __nccwpck_require__(12781);
|
|
224106
224108
|
|
|
224107
224109
|
/**
|
|
@@ -228140,9 +228142,9 @@ exports.TFWorkspaceRefCR = new RegExp(`\\$\\{\\{\\s*references\\.(${regModuleNam
|
|
|
228140
228142
|
"use strict";
|
|
228141
228143
|
|
|
228142
228144
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
228143
|
-
exports.
|
|
228144
|
-
exports.
|
|
228145
|
-
exports.toJson_TfResultSpecReference = exports.TfResultSpecAction = exports.toJson_TfResultSpec = exports.toJson_TfResultProps = exports.TfResult = exports.FirestartrTerraformWorkspacePlanSpecContextProvidersRefKind = exports.FirestartrTerraformWorkspacePlanSpecContextBackendRefKind = exports.FirestartrTerraformWorkspacePlanSpecReferencesRefKind = exports.toJson_FirestartrTerraformWorkspacePlanSpecContextProvidersRef = exports.toJson_FirestartrTerraformWorkspacePlanSpecContextBackendRef = exports.toJson_FirestartrTerraformWorkspacePlanSpecWriteConnectionSecretToRefOutputs = exports.toJson_FirestartrTerraformWorkspacePlanSpecReferencesRef = exports.toJson_FirestartrTerraformWorkspacePlanSpecContextProviders = void 0;
|
|
228145
|
+
exports.toJson_FirestartrGithubRepositorySpecPagesSource = exports.toJson_FirestartrGithubRepositorySpecActionsOidc = exports.toJson_FirestartrGithubRepositorySpecRepoAdditionalBranches = exports.FirestartrGithubRepositorySpecRepoVisibility = exports.toJson_FirestartrGithubRepositorySpecFirestartrTechnology = exports.toJson_FirestartrGithubRepositorySpecContextProvider = exports.toJson_FirestartrGithubRepositorySpecContextBackend = exports.toJson_FirestartrGithubRepositorySpecWriteConnectionSecretToRef = exports.toJson_FirestartrGithubRepositorySpecBranchProtections = exports.toJson_FirestartrGithubRepositorySpecPermissions = exports.toJson_FirestartrGithubRepositorySpecPages = exports.toJson_FirestartrGithubRepositorySpecActions = exports.toJson_FirestartrGithubRepositorySpecRepo = exports.toJson_FirestartrGithubRepositorySpecFirestartr = exports.toJson_FirestartrGithubRepositorySpecContext = exports.toJson_FirestartrGithubRepositorySpec = exports.toJson_FirestartrGithubRepositoryProps = exports.FirestartrGithubRepository = exports.FirestartrGithubMembershipSpecContextProviderRefKind = exports.FirestartrGithubMembershipSpecContextBackendRefKind = exports.toJson_FirestartrGithubMembershipSpecContextProviderRef = exports.toJson_FirestartrGithubMembershipSpecContextBackendRef = exports.toJson_FirestartrGithubMembershipSpecWriteConnectionSecretToRefOutputs = exports.toJson_FirestartrGithubMembershipSpecContextProvider = exports.toJson_FirestartrGithubMembershipSpecContextBackend = exports.toJson_FirestartrGithubMembershipSpecWriteConnectionSecretToRef = exports.toJson_FirestartrGithubMembershipSpecFirestartr = exports.toJson_FirestartrGithubMembershipSpecContext = exports.FirestartrGithubMembershipSpecRole = exports.toJson_FirestartrGithubMembershipSpec = exports.toJson_FirestartrGithubMembershipProps = exports.FirestartrGithubMembership = exports.FirestartrGithubGroupSpecContextProviderRefKind = exports.FirestartrGithubGroupSpecContextBackendRefKind = exports.toJson_FirestartrGithubGroupSpecContextProviderRef = exports.toJson_FirestartrGithubGroupSpecContextBackendRef = exports.toJson_FirestartrGithubGroupSpecWriteConnectionSecretToRefOutputs = exports.toJson_FirestartrGithubGroupSpecContextProvider = exports.toJson_FirestartrGithubGroupSpecContextBackend = exports.toJson_FirestartrGithubGroupSpecMembersRef = exports.toJson_FirestartrGithubGroupSpecParentTeamRef = exports.toJson_FirestartrGithubGroupSpecWriteConnectionSecretToRef = exports.toJson_FirestartrGithubGroupSpecFirestartr = exports.toJson_FirestartrGithubGroupSpecContext = exports.toJson_FirestartrGithubGroupSpecMembers = exports.toJson_FirestartrGithubGroupSpecParentTeam = exports.FirestartrGithubGroupSpecPrivacy = exports.toJson_FirestartrGithubGroupSpec = exports.toJson_FirestartrGithubGroupProps = exports.FirestartrGithubGroup = void 0;
|
|
228146
|
+
exports.toJson_FirestartrTerraformWorkspacePlanSpecWriteConnectionSecretToRef = exports.toJson_FirestartrTerraformWorkspacePlanSpecReferences = exports.FirestartrTerraformWorkspacePlanSpecSource = exports.toJson_FirestartrTerraformWorkspacePlanSpecFirestartr = exports.toJson_FirestartrTerraformWorkspacePlanSpecContext = exports.toJson_FirestartrTerraformWorkspacePlanSpec = exports.toJson_FirestartrTerraformWorkspacePlanProps = exports.FirestartrTerraformWorkspacePlan = exports.FirestartrTerraformWorkspaceSpecContextProvidersRefKind = exports.FirestartrTerraformWorkspaceSpecContextBackendRefKind = exports.FirestartrTerraformWorkspaceSpecReferencesRefKind = exports.toJson_FirestartrTerraformWorkspaceSpecContextProvidersRef = exports.toJson_FirestartrTerraformWorkspaceSpecContextBackendRef = exports.toJson_FirestartrTerraformWorkspaceSpecWriteConnectionSecretToRefOutputs = exports.toJson_FirestartrTerraformWorkspaceSpecReferencesRef = exports.toJson_FirestartrTerraformWorkspaceSpecContextProviders = exports.toJson_FirestartrTerraformWorkspaceSpecContextBackend = exports.toJson_FirestartrTerraformWorkspaceSpecWriteConnectionSecretToRef = exports.toJson_FirestartrTerraformWorkspaceSpecReferences = exports.FirestartrTerraformWorkspaceSpecSource = exports.toJson_FirestartrTerraformWorkspaceSpecFirestartr = exports.toJson_FirestartrTerraformWorkspaceSpecContext = exports.toJson_FirestartrTerraformWorkspaceSpec = exports.toJson_FirestartrTerraformWorkspaceProps = exports.FirestartrTerraformWorkspace = exports.toJson_FirestartrProviderConfigSpecSecretsSecretRef = exports.toJson_FirestartrProviderConfigSpecSecrets = exports.toJson_FirestartrProviderConfigSpec = exports.toJson_FirestartrProviderConfigProps = exports.FirestartrProviderConfig = exports.FirestartrGithubRepositoryFeatureSpecContextProviderRefKind = exports.FirestartrGithubRepositoryFeatureSpecContextBackendRefKind = exports.toJson_FirestartrGithubRepositoryFeatureSpecContextProviderRef = exports.toJson_FirestartrGithubRepositoryFeatureSpecContextBackendRef = exports.toJson_FirestartrGithubRepositoryFeatureSpecRepositoryTargetRef = exports.toJson_FirestartrGithubRepositoryFeatureSpecContextProvider = exports.toJson_FirestartrGithubRepositoryFeatureSpecContextBackend = exports.toJson_FirestartrGithubRepositoryFeatureSpecFiles = exports.toJson_FirestartrGithubRepositoryFeatureSpecRepositoryTarget = exports.toJson_FirestartrGithubRepositoryFeatureSpecContext = exports.toJson_FirestartrGithubRepositoryFeatureSpecFirestartr = exports.toJson_FirestartrGithubRepositoryFeatureSpec = exports.toJson_FirestartrGithubRepositoryFeatureProps = exports.FirestartrGithubRepositoryFeature = exports.FirestartrGithubRepositorySpecContextProviderRefKind = exports.FirestartrGithubRepositorySpecContextBackendRefKind = exports.toJson_FirestartrGithubRepositorySpecContextProviderRef = exports.toJson_FirestartrGithubRepositorySpecContextBackendRef = exports.toJson_FirestartrGithubRepositorySpecWriteConnectionSecretToRefOutputs = exports.toJson_FirestartrGithubRepositorySpecPermissionsRef = void 0;
|
|
228147
|
+
exports.toJson_TfResultSpecReference = exports.TfResultSpecAction = exports.toJson_TfResultSpec = exports.toJson_TfResultProps = exports.TfResult = exports.FirestartrTerraformWorkspacePlanSpecContextProvidersRefKind = exports.FirestartrTerraformWorkspacePlanSpecContextBackendRefKind = exports.FirestartrTerraformWorkspacePlanSpecReferencesRefKind = exports.toJson_FirestartrTerraformWorkspacePlanSpecContextProvidersRef = exports.toJson_FirestartrTerraformWorkspacePlanSpecContextBackendRef = exports.toJson_FirestartrTerraformWorkspacePlanSpecWriteConnectionSecretToRefOutputs = exports.toJson_FirestartrTerraformWorkspacePlanSpecReferencesRef = exports.toJson_FirestartrTerraformWorkspacePlanSpecContextProviders = exports.toJson_FirestartrTerraformWorkspacePlanSpecContextBackend = void 0;
|
|
228146
228148
|
// generated by cdk8s
|
|
228147
228149
|
const cdk8s_1 = __nccwpck_require__(77228);
|
|
228148
228150
|
/**
|
|
@@ -228789,6 +228791,7 @@ exports.toJson_FirestartrGithubRepositorySpecFirestartr = toJson_FirestartrGithu
|
|
|
228789
228791
|
*/
|
|
228790
228792
|
/* eslint-disable max-len, quote-props */
|
|
228791
228793
|
function toJson_FirestartrGithubRepositorySpecRepo(obj) {
|
|
228794
|
+
var _a;
|
|
228792
228795
|
if (obj === undefined) {
|
|
228793
228796
|
return undefined;
|
|
228794
228797
|
}
|
|
@@ -228807,6 +228810,7 @@ function toJson_FirestartrGithubRepositorySpecRepo(obj) {
|
|
|
228807
228810
|
'pages': obj.pages,
|
|
228808
228811
|
'visibility': obj.visibility,
|
|
228809
228812
|
'defaultBranch': obj.defaultBranch,
|
|
228813
|
+
'additionalBranches': (_a = obj.additionalBranches) === null || _a === void 0 ? void 0 : _a.map(y => toJson_FirestartrGithubRepositorySpecRepoAdditionalBranches(y)),
|
|
228810
228814
|
'codeowners': obj.codeowners,
|
|
228811
228815
|
};
|
|
228812
228816
|
// filter undefined values
|
|
@@ -228959,6 +228963,22 @@ var FirestartrGithubRepositorySpecRepoVisibility;
|
|
|
228959
228963
|
/** internal */
|
|
228960
228964
|
FirestartrGithubRepositorySpecRepoVisibility["INTERNAL"] = "internal";
|
|
228961
228965
|
})(FirestartrGithubRepositorySpecRepoVisibility = exports.FirestartrGithubRepositorySpecRepoVisibility || (exports.FirestartrGithubRepositorySpecRepoVisibility = {}));
|
|
228966
|
+
/**
|
|
228967
|
+
* Converts an object of type 'FirestartrGithubRepositorySpecRepoAdditionalBranches' to JSON representation.
|
|
228968
|
+
*/
|
|
228969
|
+
/* eslint-disable max-len, quote-props */
|
|
228970
|
+
function toJson_FirestartrGithubRepositorySpecRepoAdditionalBranches(obj) {
|
|
228971
|
+
if (obj === undefined) {
|
|
228972
|
+
return undefined;
|
|
228973
|
+
}
|
|
228974
|
+
const result = {
|
|
228975
|
+
'name': obj.name,
|
|
228976
|
+
'orphan': obj.orphan,
|
|
228977
|
+
};
|
|
228978
|
+
// filter undefined values
|
|
228979
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : (Object.assign(Object.assign({}, r), { [i[0]]: i[1] })), {});
|
|
228980
|
+
}
|
|
228981
|
+
exports.toJson_FirestartrGithubRepositorySpecRepoAdditionalBranches = toJson_FirestartrGithubRepositorySpecRepoAdditionalBranches;
|
|
228962
228982
|
/**
|
|
228963
228983
|
* Converts an object of type 'FirestartrGithubRepositorySpecActionsOidc' to JSON representation.
|
|
228964
228984
|
*/
|
|
@@ -230083,7 +230103,7 @@ function toJson_TfResultSpecReference(obj) {
|
|
|
230083
230103
|
}
|
|
230084
230104
|
exports.toJson_TfResultSpecReference = toJson_TfResultSpecReference;
|
|
230085
230105
|
/* eslint-enable max-len, quote-props */
|
|
230086
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZXN0YXJ0ci5kZXYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9pbXBvcnRzL2ZpcmVzdGFydHIuZGV2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUJBQXFCO0FBQ3JCLGlDQUF1RTtBQUl2RTs7OztHQUlHO0FBQ0gsTUFBYSxxQkFBc0IsU0FBUSxpQkFBUztJQVNsRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQW9DLEVBQUU7UUFDM0QsdUNBQ0sscUJBQXFCLENBQUMsR0FBRyxHQUN6QixpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsRUFDM0M7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFtQixLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUFvQyxFQUFFO1FBQ3JGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxrQ0FDVixxQkFBcUIsQ0FBQyxHQUFHLEdBQ3pCLEtBQUssRUFDUixDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTTtRQUNYLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUVoQyx1Q0FDSyxxQkFBcUIsQ0FBQyxHQUFHLEdBQ3pCLGlDQUFpQyxDQUFDLFFBQVEsQ0FBQyxFQUM5QztJQUNKLENBQUM7O0FBN0NEOztHQUVHO0FBQ29CLHlCQUFHLEdBQXFCO0lBQzdDLFVBQVUsRUFBRSxtQkFBbUI7SUFDL0IsSUFBSSxFQUFFLHVCQUF1QjtDQUM5QixDQUFBO0FBUFUsc0RBQXFCO0FBbUVsQzs7R0FFRztBQUNILHlDQUF5QztBQUN6QyxTQUFnQixpQ0FBaUMsQ0FBQyxHQUEyQztJQUMzRixJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7UUFBRSxPQUFPLFNBQVMsQ0FBQztLQUFFO0lBQzVDLE1BQU0sTUFBTSxHQUFHO1FBQ2IsVUFBVSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1FBQ3hCLE1BQU0sRUFBRSxnQ0FBZ0MsQ0FBQyxHQUFHLENB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LEtBQWxCLDBCQUFrQixRQVc3QjtBQWtCRDs7R0FFRztBQUNILHlDQUF5QztBQUN6QyxTQUFnQiw0QkFBNEIsQ0FBQyxHQUFzQztJQUNqRixJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7UUFBRSxPQUFPLFNBQVMsQ0FBQztLQUFFO0lBQzVDLE1BQU0sTUFBTSxHQUFHO1FBQ2IsU0FBUyxFQUFFLEdBQUcsQ0FBQyxPQUFPO1FBQ3RCLFNBQVMsRUFBRSxHQUFHLENBQUMsT0FBTztLQUN2QixDQUFDO0lBQ0YsMEJBQTBCO0lBQzFCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQ0FBTSxDQUFDLEtBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxRyxDQUFDO0FBUkQsb0VBUUM7QUFDRCx3Q0FBd0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBnZW5lcmF0ZWQgYnkgY2RrOHNcbmltcG9ydCB7IEFwaU9iamVjdCwgQXBpT2JqZWN0TWV0YWRhdGEsIEdyb3VwVmVyc2lvbktpbmQgfSBmcm9tICdjZGs4cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuXG4vKipcbiAqIEEgcmVzb3VyY2UgdG8gaGFuZGxlIEdpdEh1YiBncm91cHNcbiAqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFxuICovXG5leHBvcnQgY2xhc3MgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdmaXJlc3RhcnRyLmRldi92MScsXG4gICAga2luZDogJ0ZpcmVzdGFydHJHaXRodWJHcm91cCcsXG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEZpcmVzdGFydHJHaXRodWJHcm91cFByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5GaXJlc3RhcnRyR2l0aHViR3JvdXAuR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFByb3BzKHByb3BzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcIkZpcmVzdGFydHJHaXRodWJHcm91cFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4uRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBLdWJlcm5ldGVzIEpTT04uXG4gICAqL1xuICBwdWJsaWMgdG9Kc29uKCk6IGFueSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBzdXBlci50b0pzb24oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5GaXJlc3RhcnRyR2l0aHViR3JvdXAuR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFByb3BzKHJlc29sdmVkKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgR2l0SHViIGdyb3Vwc1xuICpcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXAjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogQXBpT2JqZWN0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJHcm91cFByb3BzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBQcm9wcyhvYmo6IEZpcmVzdGFydHJHaXRodWJHcm91cFByb3BzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbWV0YWRhdGEnOiBvYmoubWV0YWRhdGEsXG4gICAgJ3NwZWMnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlYyhvYmouc3BlYyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlYyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWMjb3JnXG4gICAqL1xuICByZWFkb25seSBvcmc6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjI3ByaXZhY3lcbiAgICovXG4gIHJlYWRvbmx5IHByaXZhY3k6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNQcml2YWN5O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWMjZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWMjcGFyZW50VGVhbVxuICAgKi9cbiAgcmVhZG9ubHkgcGFyZW50VGVhbT86IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNQYXJlbnRUZWFtO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWMjbWVtYmVyc1xuICAgKi9cbiAgcmVhZG9ubHkgbWVtYmVyczogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnNbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjI2NvbnRleHRcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWMjZmlyZXN0YXJ0clxuICAgKi9cbiAgcmVhZG9ubHkgZmlyZXN0YXJ0cjogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0ZpcmVzdGFydHI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlYyN3cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZlxuICAgKi9cbiAgcmVhZG9ubHkgd3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWY6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjKG9iajogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlYyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ29yZyc6IG9iai5vcmcsXG4gICAgJ3ByaXZhY3knOiBvYmoucHJpdmFjeSxcbiAgICAnZGVzY3JpcHRpb24nOiBvYmouZGVzY3JpcHRpb24sXG4gICAgJ3BhcmVudFRlYW0nOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1BhcmVudFRlYW0ob2JqLnBhcmVudFRlYW0pLFxuICAgICdtZW1iZXJzJzogb2JqLm1lbWJlcnM/Lm1hcCh5ID0+IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjTWVtYmVycyh5KSksXG4gICAgJ2NvbnRleHQnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHQob2JqLmNvbnRleHQpLFxuICAgICdmaXJlc3RhcnRyJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNGaXJlc3RhcnRyKG9iai5maXJlc3RhcnRyKSxcbiAgICAnd3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKG9iai53cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUHJpdmFjeVxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUHJpdmFjeSB7XG4gIC8qKiBjbG9zZWQgKi9cbiAgQ0xPU0VEID0gXCJjbG9zZWRcIixcbiAgLyoqIHNlY3JldCAqL1xuICBTRUNSRVQgPSBcInNlY3JldFwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1BhcmVudFRlYW1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUGFyZW50VGVhbSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNQYXJlbnRUZWFtI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUGFyZW50VGVhbVJlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUGFyZW50VGVhbScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1BhcmVudFRlYW0ob2JqOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUGFyZW50VGVhbSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUGFyZW50VGVhbVJlZihvYmoucmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNNZW1iZXJzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjTWVtYmVycyNyZWZcbiAgICovXG4gIHJlYWRvbmx5IHJlZjogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnNSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNNZW1iZXJzKG9iajogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnNSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHQjYmFja2VuZFxuICAgKi9cbiAgcmVhZG9ubHkgYmFja2VuZDogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRCYWNrZW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0I3Byb3ZpZGVyXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlcjogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlcjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHQob2JqOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2JhY2tlbmQnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRCYWNrZW5kKG9iai5iYWNrZW5kKSxcbiAgICAncHJvdmlkZXInOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlcihvYmoucHJvdmlkZXIpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0ZpcmVzdGFydHJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjRmlyZXN0YXJ0ciB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNGaXJlc3RhcnRyI3RmU3RhdGVLZXlcbiAgICovXG4gIHJlYWRvbmx5IHRmU3RhdGVLZXk/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0ZpcmVzdGFydHInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNGaXJlc3RhcnRyKG9iajogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0ZpcmVzdGFydHIgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICd0ZlN0YXRlS2V5Jzogb2JqLnRmU3RhdGVLZXksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYjb3V0cHV0c1xuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0cz86IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHNbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZihvYmo6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAnb3V0cHV0cyc6IG9iai5vdXRwdXRzPy5tYXAoeSA9PiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUGFyZW50VGVhbVJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNQYXJlbnRUZWFtUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1BhcmVudFRlYW1SZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNQYXJlbnRUZWFtUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUGFyZW50VGVhbVJlZiNuZWVkc1NlY3JldFxuICAgKi9cbiAgcmVhZG9ubHkgbmVlZHNTZWNyZXQ6IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1BhcmVudFRlYW1SZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNQYXJlbnRUZWFtUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1BhcmVudFRlYW1SZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAnbmVlZHNTZWNyZXQnOiBvYmoubmVlZHNTZWNyZXQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjTWVtYmVyc1JlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNNZW1iZXJzUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnNSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNNZW1iZXJzUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjTWVtYmVyc1JlZiNuZWVkc1NlY3JldFxuICAgKi9cbiAgcmVhZG9ubHkgbmVlZHNTZWNyZXQ6IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnNSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNNZW1iZXJzUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnNSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAnbmVlZHNTZWNyZXQnOiBvYmoubmVlZHNTZWNyZXQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmQge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmQjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZFJlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZChvYmo6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmRSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlciB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0UHJvdmlkZXIjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0UHJvdmlkZXJSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlcihvYmo6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0UHJvdmlkZXIgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlclJlZihvYmoucmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMob2JqOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZFJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZFJlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZFJlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZFJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRCYWNrZW5kUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmRSZWYob2JqOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmRSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0UHJvdmlkZXJSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlclJlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlclJlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kIHtcbiAgLyoqIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZyAqL1xuICBGSVJFU1RBUlRSX1BST1ZJREVSX0NPTkZJRyA9IFwiRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcgKi9cbiAgRklSRVNUQVJUUl9QUk9WSURFUl9DT05GSUcgPSBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiLFxufVxuXG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgR2l0SHViIG1lbWJlcnNoaXBzIHRvIGEgR2l0SHViIG9yZ2FuaXphdGlvbi5cbiAqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwXG4gKi9cbmV4cG9ydCBjbGFzcyBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcCBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcIkZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdmaXJlc3RhcnRyLmRldi92MScsXG4gICAga2luZDogJ0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXAuR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwUHJvcHMocHJvcHMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLkZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBLdWJlcm5ldGVzIEpTT04uXG4gICAqL1xuICBwdWJsaWMgdG9Kc29uKCk6IGFueSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBzdXBlci50b0pzb24oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcC5HVkssXG4gICAgICAuLi50b0pzb25fRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBQcm9wcyhyZXNvbHZlZCksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEEgcmVzb3VyY2UgdG8gaGFuZGxlIEdpdEh1YiBtZW1iZXJzaGlwcyB0byBhIEdpdEh1YiBvcmdhbml6YXRpb24uXG4gKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE6IEFwaU9iamVjdE1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlYztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFByb3BzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFByb3BzKG9iajogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBQcm9wcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ21ldGFkYXRhJzogb2JqLm1ldGFkYXRhLFxuICAgICdzcGVjJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlYyhvYmouc3BlYyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMjb3JnXG4gICAqL1xuICByZWFkb25seSBvcmc6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMjcm9sZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZTogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjUm9sZTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMjY29udGV4dFxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dDogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMjZmlyZXN0YXJ0clxuICAgKi9cbiAgcmVhZG9ubHkgZmlyZXN0YXJ0cjogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjRmlyZXN0YXJ0cjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMjd3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZcbiAgICovXG4gIHJlYWRvbmx5IHdyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmPzogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMob2JqOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdvcmcnOiBvYmoub3JnLFxuICAgICdyb2xlJzogb2JqLnJvbGUsXG4gICAgJ2NvbnRleHQnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dChvYmouY29udGV4dCksXG4gICAgJ2ZpcmVzdGFydHInOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjRmlyZXN0YXJ0cihvYmouZmlyZXN0YXJ0ciksXG4gICAgJ3dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKG9iai53cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNSb2xlXG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY1JvbGUge1xuICAvKiogbWVtYmVyICovXG4gIE1FTUJFUiA9IFwibWVtYmVyXCIsXG4gIC8qKiBhZG1pbiAqL1xuICBBRE1JTiA9IFwiYWRtaW5cIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dCNiYWNrZW5kXG4gICAqL1xuICByZWFkb25seSBiYWNrZW5kOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0I3Byb3ZpZGVyXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlcjogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHQob2JqOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYmFja2VuZCc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZChvYmouYmFja2VuZCksXG4gICAgJ3Byb3ZpZGVyJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlcihvYmoucHJvdmlkZXIpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjRmlyZXN0YXJ0clxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0ZpcmVzdGFydHIge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNGaXJlc3RhcnRyI3RmU3RhdGVLZXlcbiAgICovXG4gIHJlYWRvbmx5IHRmU3RhdGVLZXk6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNGaXJlc3RhcnRyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNGaXJlc3RhcnRyKG9iajogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjRmlyZXN0YXJ0ciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3RmU3RhdGVLZXknOiBvYmoudGZTdGF0ZUtleSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYjb3V0cHV0c1xuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0czogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ291dHB1dHMnOiBvYmoub3V0cHV0cz8ubWFwKHkgPT4gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dEJhY2tlbmQjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZChvYmo6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXJSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXIob2JqOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXIgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzI2tleVxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMob2JqOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dEJhY2tlbmRSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZFJlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZFJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dEJhY2tlbmRSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dEJhY2tlbmRSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlclJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlclJlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlclJlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXJSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlclJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXJSZWYob2JqOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXJSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZFJlZktpbmQge1xuICAvKiogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnICovXG4gIEZJUkVTVEFSVFJfUFJPVklERVJfQ09ORklHID0gXCJGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlclJlZktpbmRcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcgKi9cbiAgRklSRVNUQVJUUl9QUk9WSURFUl9DT05GSUcgPSBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiLFxufVxuXG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgdGhlIEdpdEh1YiByZXBvcyBvZiBhbiBvcmdhbml6YXRpb24uXG4gKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVxuICovXG5leHBvcnQgY2xhc3MgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnkgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnZmlyZXN0YXJ0ci5kZXYvdjEnLFxuICAgIGtpbmQ6ICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeScsXG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnkuR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5UHJvcHMocHJvcHMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5UHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4uRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnkuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIEt1YmVybmV0ZXMgSlNPTi5cbiAgICovXG4gIHB1YmxpYyB0b0pzb24oKTogYW55IHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHN1cGVyLnRvSnNvbigpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5LkdWSyxcbiAgICAgIC4uLnRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVByb3BzKHJlc29sdmVkKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgdGhlIEdpdEh1YiByZXBvcyBvZiBhbiBvcmdhbml6YXRpb24uXG4gKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5UHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeSNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBBcGlPYmplY3RNZXRhZGF0YTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeSNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjPzogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5UHJvcHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5UHJvcHMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVByb3BzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbWV0YWRhdGEnOiBvYmoubWV0YWRhdGEsXG4gICAgJ3NwZWMnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjKG9iai5zcGVjKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNvcmdcbiAgICovXG4gIHJlYWRvbmx5IG9yZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNjb250ZXh0XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNmaXJlc3RhcnRyXG4gICAqL1xuICByZWFkb25seSBmaXJlc3RhcnRyOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNyZXBvXG4gICAqL1xuICByZWFkb25seSByZXBvOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNhY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBhY3Rpb25zOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNwYWdlc1xuICAgKi9cbiAgcmVhZG9ubHkgcGFnZXM/OiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlcztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWMjcGVybWlzc2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25zOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9uc1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNicmFuY2hQcm90ZWN0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgYnJhbmNoUHJvdGVjdGlvbnM6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0JyYW5jaFByb3RlY3Rpb25zW107XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjI3dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmXG4gICAqL1xuICByZWFkb25seSB3cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZjogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdvcmcnOiBvYmoub3JnLFxuICAgICdjb250ZXh0JzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHQob2JqLmNvbnRleHQpLFxuICAgICdmaXJlc3RhcnRyJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHIob2JqLmZpcmVzdGFydHIpLFxuICAgICdyZXBvJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8ob2JqLnJlcG8pLFxuICAgICdhY3Rpb25zJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnMob2JqLmFjdGlvbnMpLFxuICAgICdwYWdlcyc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlcyhvYmoucGFnZXMpLFxuICAgICdwZXJtaXNzaW9ucyc6IG9iai5wZXJtaXNzaW9ucz8ubWFwKHkgPT4gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zKHkpKSxcbiAgICAnYnJhbmNoUHJvdGVjdGlvbnMnOiBvYmouYnJhbmNoUHJvdGVjdGlvbnM/Lm1hcCh5ID0+IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNCcmFuY2hQcm90ZWN0aW9ucyh5KSksXG4gICAgJ3dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKG9iai53cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHQjYmFja2VuZFxuICAgKi9cbiAgcmVhZG9ubHkgYmFja2VuZDogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dCNwcm92aWRlclxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXI6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlcjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0KG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2JhY2tlbmQnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmQob2JqLmJhY2tlbmQpLFxuICAgICdwcm92aWRlcic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXIob2JqLnByb3ZpZGVyKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjRmlyZXN0YXJ0ciN0ZlN0YXRlS2V5XG4gICAqL1xuICByZWFkb25seSB0ZlN0YXRlS2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjRmlyZXN0YXJ0ciN0ZWNobm9sb2d5XG4gICAqL1xuICByZWFkb25seSB0ZWNobm9sb2d5OiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyVGVjaG5vbG9neTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjRmlyZXN0YXJ0ciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3RmU3RhdGVLZXknOiBvYmoudGZTdGF0ZUtleSxcbiAgICAndGVjaG5vbG9neSc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyVGVjaG5vbG9neShvYmoudGVjaG5vbG9neSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jYWxsb3dNZXJnZUNvbW1pdFxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dNZXJnZUNvbW1pdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyNhbGxvd1NxdWFzaE1lcmdlXG4gICAqL1xuICByZWFkb25seSBhbGxvd1NxdWFzaE1lcmdlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvI2FsbG93UmViYXNlTWVyZ2VcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93UmViYXNlTWVyZ2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jYWxsb3dBdXRvTWVyZ2VcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93QXV0b01lcmdlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvI2RlbGV0ZUJyYW5jaE9uTWVyZ2VcbiAgICovXG4gIHJlYWRvbmx5IGRlbGV0ZUJyYW5jaE9uTWVyZ2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jYXV0b0luaXRcbiAgICovXG4gIHJlYWRvbmx5IGF1dG9Jbml0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvI2FyY2hpdmVPbkRlc3Ryb3lcbiAgICovXG4gIHJlYWRvbmx5IGFyY2hpdmVPbkRlc3Ryb3k/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jYWxsb3dVcGRhdGVCcmFuY2hcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93VXBkYXRlQnJhbmNoPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvI2hhc0lzc3Vlc1xuICAgKi9cbiAgcmVhZG9ubHkgaGFzSXNzdWVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvI2hhc1dpa2lcbiAgICovXG4gIHJlYWRvbmx5IGhhc1dpa2k/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jcGFnZXNcbiAgICovXG4gIHJlYWRvbmx5IHBhZ2VzPzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jdmlzaWJpbGl0eVxuICAgKi9cbiAgcmVhZG9ubHkgdmlzaWJpbGl0eTogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwb1Zpc2liaWxpdHk7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyNkZWZhdWx0QnJhbmNoXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0QnJhbmNoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyNjb2Rlb3duZXJzXG4gICAqL1xuICByZWFkb25seSBjb2Rlb3duZXJzPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8ob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZGVzY3JpcHRpb24nOiBvYmouZGVzY3JpcHRpb24sXG4gICAgJ2FsbG93TWVyZ2VDb21taXQnOiBvYmouYWxsb3dNZXJnZUNvbW1pdCxcbiAgICAnYWxsb3dTcXVhc2hNZXJnZSc6IG9iai5hbGxvd1NxdWFzaE1lcmdlLFxuICAgICdhbGxvd1JlYmFzZU1lcmdlJzogb2JqLmFsbG93UmViYXNlTWVyZ2UsXG4gICAgJ2FsbG93QXV0b01lcmdlJzogb2JqLmFsbG93QXV0b01lcmdlLFxuICAgICdkZWxldGVCcmFuY2hPbk1lcmdlJzogb2JqLmRlbGV0ZUJyYW5jaE9uTWVyZ2UsXG4gICAgJ2F1dG9Jbml0Jzogb2JqLmF1dG9Jbml0LFxuICAgICdhcmNoaXZlT25EZXN0cm95Jzogb2JqLmFyY2hpdmVPbkRlc3Ryb3ksXG4gICAgJ2FsbG93VXBkYXRlQnJhbmNoJzogb2JqLmFsbG93VXBkYXRlQnJhbmNoLFxuICAgICdoYXNJc3N1ZXMnOiBvYmouaGFzSXNzdWVzLFxuICAgICdoYXNXaWtpJzogb2JqLmhhc1dpa2ksXG4gICAgJ3BhZ2VzJzogb2JqLnBhZ2VzLFxuICAgICd2aXNpYmlsaXR5Jzogb2JqLnZpc2liaWxpdHksXG4gICAgJ2RlZmF1bHRCcmFuY2gnOiBvYmouZGVmYXVsdEJyYW5jaCxcbiAgICAnY29kZW93bmVycyc6IG9iai5jb2Rlb3duZXJzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQWN0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zI29pZGNcbiAgICovXG4gIHJlYWRvbmx5IG9pZGM6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnNPaWRjO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnb2lkYyc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zT2lkYyhvYmoub2lkYyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGFnZXMjY25hbWVcbiAgICovXG4gIHJlYWRvbmx5IGNuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzI3NvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlPzogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGFnZXNTb3VyY2U7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGFnZXMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGFnZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdjbmFtZSc6IG9iai5jbmFtZSxcbiAgICAnc291cmNlJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzU291cmNlKG9iai5zb3VyY2UpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9ucyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zI3JvbGVcbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnMjY29sbGFib3JhdG9yXG4gICAqL1xuICByZWFkb25seSBjb2xsYWJvcmF0b3I/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnMjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY/OiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9uc1JlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9ucycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9ucyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JvbGUnOiBvYmoucm9sZSxcbiAgICAnY29sbGFib3JhdG9yJzogb2JqLmNvbGxhYm9yYXRvcixcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQnJhbmNoUHJvdGVjdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNCcmFuY2hQcm90ZWN0aW9ucyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0JyYW5jaFByb3RlY3Rpb25zI2JyYW5jaFxuICAgKi9cbiAgcmVhZG9ubHkgYnJhbmNoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQnJhbmNoUHJvdGVjdGlvbnMjc3RhdHVzQ2hlY2tzXG4gICAqL1xuICByZWFkb25seSBzdGF0dXNDaGVja3M/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNCcmFuY2hQcm90ZWN0aW9ucyNyZXF1aXJlZFJldmlld2Vyc0NvdW50XG4gICAqL1xuICByZWFkb25seSByZXF1aXJlZFJldmlld2Vyc0NvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0JyYW5jaFByb3RlY3Rpb25zI3JlcXVpcmVkQ29kZW93bmVyc1Jldmlld2Vyc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZWRDb2Rlb3duZXJzUmV2aWV3ZXJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNCcmFuY2hQcm90ZWN0aW9ucyNlbmZvcmNlQWRtaW5zXG4gICAqL1xuICByZWFkb25seSBlbmZvcmNlQWRtaW5zPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNCcmFuY2hQcm90ZWN0aW9ucyNyZXF1aXJlU2lnbmVkQ29tbWl0c1xuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZVNpZ25lZENvbW1pdHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0JyYW5jaFByb3RlY3Rpb25zI3JlcXVpcmVDb252ZXJzYXRpb25SZXNvbHV0aW9uXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlQ29udmVyc2F0aW9uUmVzb2x1dGlvbj86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQnJhbmNoUHJvdGVjdGlvbnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0JyYW5jaFByb3RlY3Rpb25zKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQnJhbmNoUHJvdGVjdGlvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdicmFuY2gnOiBvYmouYnJhbmNoLFxuICAgICdzdGF0dXNDaGVja3MnOiBvYmouc3RhdHVzQ2hlY2tzPy5tYXAoeSA9PiB5KSxcbiAgICAncmVxdWlyZWRSZXZpZXdlcnNDb3VudCc6IG9iai5yZXF1aXJlZFJldmlld2Vyc0NvdW50LFxuICAgICdyZXF1aXJlZENvZGVvd25lcnNSZXZpZXdlcnMnOiBvYmoucmVxdWlyZWRDb2Rlb3duZXJzUmV2aWV3ZXJzLFxuICAgICdlbmZvcmNlQWRtaW5zJzogb2JqLmVuZm9yY2VBZG1pbnMsXG4gICAgJ3JlcXVpcmVTaWduZWRDb21taXRzJzogb2JqLnJlcXVpcmVTaWduZWRDb21taXRzLFxuICAgICdyZXF1aXJlQ29udmVyc2F0aW9uUmVzb2x1dGlvbic6IG9iai5yZXF1aXJlQ29udmVyc2F0aW9uUmVzb2x1dGlvbixcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYjb3V0cHV0c1xuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0czogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ291dHB1dHMnOiBvYmoub3V0cHV0cz8ubWFwKHkgPT4gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmQjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZChvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXJSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXIob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXIgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjRmlyZXN0YXJ0clRlY2hub2xvZ3lcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyVGVjaG5vbG9neSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHJUZWNobm9sb2d5I3N0YWNrXG4gICAqL1xuICByZWFkb25seSBzdGFjaz86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyVGVjaG5vbG9neSN2ZXJzaW9uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHJUZWNobm9sb2d5JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyVGVjaG5vbG9neShvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHJUZWNobm9sb2d5IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnc3RhY2snOiBvYmouc3RhY2ssXG4gICAgJ3ZlcnNpb24nOiBvYmoudmVyc2lvbixcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG9WaXNpYmlsaXR5XG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG9WaXNpYmlsaXR5IHtcbiAgLyoqIHByaXZhdGUgKi9cbiAgUFJJVkFURSA9IFwicHJpdmF0ZVwiLFxuICAvKiogcHVibGljICovXG4gIFBVQkxJQyA9IFwicHVibGljXCIsXG4gIC8qKiBpbnRlcm5hbCAqL1xuICBJTlRFUk5BTCA9IFwiaW50ZXJuYWxcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnNPaWRjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQWN0aW9uc09pZGMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zT2lkYyN1c2VEZWZhdWx0XG4gICAqL1xuICByZWFkb25seSB1c2VEZWZhdWx0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnNPaWRjI2luY2x1ZGVDbGFpbUtleXNcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVDbGFpbUtleXM6IHN0cmluZ1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnNPaWRjJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zT2lkYyhvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnNPaWRjIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAndXNlRGVmYXVsdCc6IG9iai51c2VEZWZhdWx0LFxuICAgICdpbmNsdWRlQ2xhaW1LZXlzJzogb2JqLmluY2x1ZGVDbGFpbUtleXM/Lm1hcCh5ID0+IHkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGFnZXNTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlc1NvdXJjZSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzU291cmNlI2JyYW5jaFxuICAgKi9cbiAgcmVhZG9ubHkgYnJhbmNoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzU291cmNlI3BhdGhcbiAgICovXG4gIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGFnZXNTb3VyY2UnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzU291cmNlKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGFnZXNTb3VyY2UgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdicmFuY2gnOiBvYmouYnJhbmNoLFxuICAgICdwYXRoJzogb2JqLnBhdGgsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9uc1JlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnNSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9uc1JlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zUmVmI25lZWRzU2VjcmV0XG4gICAqL1xuICByZWFkb25seSBuZWVkc1NlY3JldD86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnNSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnNSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAnbmVlZHNTZWNyZXQnOiBvYmoubmVlZHNTZWNyZXQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyhvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IG9iai5rZXksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZFJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmRSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZFJlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmRSZWYob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZFJlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlclJlZktpbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXJSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlclJlZihvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlclJlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kXG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcgKi9cbiAgRklSRVNUQVJUUl9QUk9WSURFUl9DT05GSUcgPSBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXJSZWZLaW5kIHtcbiAgLyoqIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZyAqL1xuICBGSVJFU1RBUlRSX1BST1ZJREVSX0NPTkZJRyA9IFwiRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnXCIsXG59XG5cblxuLyoqXG4gKiBBIHJlc291cmNlIHRvIGhhbmRsZSBmZWF0dXJlcyBmb3IgR2l0SHViIHJlcG9zLlxuICpcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlXG4gKi9cbmV4cG9ydCBjbGFzcyBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmUgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2ZpcmVzdGFydHIuZGV2L3YxJyxcbiAgICBraW5kOiAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlUHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZS5HVkssXG4gICAgICAuLi50b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlUHJvcHMocHJvcHMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmUuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIEt1YmVybmV0ZXMgSlNPTi5cbiAgICovXG4gIHB1YmxpYyB0b0pzb24oKTogYW55IHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHN1cGVyLnRvSnNvbigpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZS5HVkssXG4gICAgICAuLi50b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlUHJvcHMocmVzb2x2ZWQpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBIHJlc291cmNlIHRvIGhhbmRsZSBmZWF0dXJlcyBmb3IgR2l0SHViIHJlcG9zLlxuICpcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmUjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogQXBpT2JqZWN0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVByb3BzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVQcm9wcyhvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVByb3BzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbWV0YWRhdGEnOiBvYmoubWV0YWRhdGEsXG4gICAgJ3NwZWMnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlYyhvYmouc3BlYyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlYyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWMjZmlyZXN0YXJ0clxuICAgKi9cbiAgcmVhZG9ubHkgZmlyZXN0YXJ0cj86IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaXJlc3RhcnRyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWMjdHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWMjb3JnXG4gICAqL1xuICByZWFkb25seSBvcmc6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjI2NvbnRleHRcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWMjdmVyc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWMjcmVwb3NpdG9yeVRhcmdldFxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3NpdG9yeVRhcmdldDogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlYyNmaWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXM6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaWxlc1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZmlyZXN0YXJ0cic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjRmlyZXN0YXJ0cihvYmouZmlyZXN0YXJ0ciksXG4gICAgJ3R5cGUnOiBvYmoudHlwZSxcbiAgICAnb3JnJzogb2JqLm9yZyxcbiAgICAnY29udGV4dCc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dChvYmouY29udGV4dCksXG4gICAgJ3ZlcnNpb24nOiBvYmoudmVyc2lvbixcbiAgICAncmVwb3NpdG9yeVRhcmdldCc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldChvYmoucmVwb3NpdG9yeVRhcmdldCksXG4gICAgJ2ZpbGVzJzogb2JqLmZpbGVzPy5tYXAoeSA9PiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpbGVzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaXJlc3RhcnRyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpcmVzdGFydHIge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjRmlyZXN0YXJ0ciN0ZlN0YXRlS2V5XG4gICAqL1xuICByZWFkb25seSB0ZlN0YXRlS2V5OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpcmVzdGFydHInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaXJlc3RhcnRyKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpcmVzdGFydHIgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICd0ZlN0YXRlS2V5Jzogb2JqLnRmU3RhdGVLZXksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHQjYmFja2VuZFxuICAgKi9cbiAgcmVhZG9ubHkgYmFja2VuZDogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0I3Byb3ZpZGVyXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlcjogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlcjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHQob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2JhY2tlbmQnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kKG9iai5iYWNrZW5kKSxcbiAgICAncHJvdmlkZXInOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlcihvYmoucHJvdmlkZXIpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0I3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldFJlZjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldCNicmFuY2hcbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaDogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldChvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0UmVmKG9iai5yZWYpLFxuICAgICdicmFuY2gnOiBvYmouYnJhbmNoLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpbGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpbGVzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpbGVzI3BhdGhcbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjRmlsZXMjdXNlck1hbmFnZWRcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJNYW5hZ2VkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaWxlcyNjb250ZW50XG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpbGVzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjRmlsZXMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjRmlsZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdwYXRoJzogb2JqLnBhdGgsXG4gICAgJ3VzZXJNYW5hZ2VkJzogb2JqLnVzZXJNYW5hZ2VkLFxuICAgICdjb250ZW50Jzogb2JqLmNvbnRlbnQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmQge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmQjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZFJlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZChvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlciB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXIjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXJSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlcihvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXIgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclJlZihvYmoucmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0UmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXRSZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldFJlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXRSZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0UmVmI25lZWRzU2VjcmV0XG4gICAqL1xuICByZWFkb25seSBuZWVkc1NlY3JldDogYm9vbGVhbjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldFJlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXRSZWYob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldFJlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICduZWVkc1NlY3JldCc6IG9iai5uZWVkc1NlY3JldCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZFJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZFJlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZFJlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZFJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRSZWYob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXJSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclJlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclJlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kIHtcbiAgLyoqIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZyAqL1xuICBGSVJFU1RBUlRSX1BST1ZJREVSX0NPTkZJRyA9IFwiRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcgKi9cbiAgRklSRVNUQVJUUl9QUk9WSURFUl9DT05GSUcgPSBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiLFxufVxuXG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgYmFja2VuZCBhbmQgcHJvdmlkZXIgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1xuICovXG5leHBvcnQgY2xhc3MgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdmaXJlc3RhcnRyLmRldi92MScsXG4gICAga2luZDogJ0ZpcmVzdGFydHJQcm92aWRlckNvbmZpZycsXG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1Byb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnLkdWSyxcbiAgICAgIC4uLnRvSnNvbl9GaXJlc3RhcnRyUHJvdmlkZXJDb25maWdQcm9wcyhwcm9wcyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5GaXJlc3RhcnRyUHJvdmlkZXJDb25maWcuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIEt1YmVybmV0ZXMgSlNPTi5cbiAgICovXG4gIHB1YmxpYyB0b0pzb24oKTogYW55IHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHN1cGVyLnRvSnNvbigpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJQcm92aWRlckNvbmZpZy5HVkssXG4gICAgICAuLi50b0pzb25fRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnUHJvcHMocmVzb2x2ZWQpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBIHJlc291cmNlIHRvIGhhbmRsZSBiYWNrZW5kIGFuZCBwcm92aWRlciBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhOiBBcGlPYmplY3RNZXRhZGF0YTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYzogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlYztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdQcm9wcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnUHJvcHMob2JqOiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdQcm9wcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ21ldGFkYXRhJzogb2JqLm1ldGFkYXRhLFxuICAgICdzcGVjJzogdG9Kc29uX0ZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWMob2JqLnNwZWMpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjI3R5cGVcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjI3NvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlYyN2ZXJzaW9uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlYyNjb25maWdcbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWMjaW5saW5lXG4gICAqL1xuICByZWFkb25seSBpbmxpbmU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlYyNlbnZcbiAgICovXG4gIHJlYWRvbmx5IGVudj86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjI3NlY3JldHNcbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldHM/OiB7IFtrZXk6IHN0cmluZ106IEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNTZWNyZXRzIH07XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlYycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlYyhvYmo6IEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICd0eXBlJzogb2JqLnR5cGUsXG4gICAgJ3NvdXJjZSc6IG9iai5zb3VyY2UsXG4gICAgJ3ZlcnNpb24nOiBvYmoudmVyc2lvbixcbiAgICAnY29uZmlnJzogb2JqLmNvbmZpZyxcbiAgICAnaW5saW5lJzogb2JqLmlubGluZSxcbiAgICAnZW52Jzogb2JqLmVudixcbiAgICAnc2VjcmV0cyc6ICgob2JqLnNlY3JldHMpID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKG9iai5zZWNyZXRzKS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogdG9Kc29uX0ZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNTZWNyZXRzKGlbMV0pIH0pLCB7fSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0cyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNTZWNyZXRzI3NlY3JldFJlZlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0UmVmOiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0c1NlY3JldFJlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0cycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHMob2JqOiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0cyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3NlY3JldFJlZic6IHRvSnNvbl9GaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0c1NlY3JldFJlZihvYmouc2VjcmV0UmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNTZWNyZXRzU2VjcmV0UmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHNTZWNyZXRSZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0c1NlY3JldFJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHNTZWNyZXRSZWYjbmFtZXNwYWNlXG4gICAqL1xuICByZWFkb25seSBuYW1lc3BhY2U6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0c1NlY3JldFJlZiNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNTZWNyZXRzU2VjcmV0UmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0c1NlY3JldFJlZihvYmo6IEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNTZWNyZXRzU2VjcmV0UmVmIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICduYW1lc3BhY2UnOiBvYmoubmFtZXNwYWNlLFxuICAgICdrZXknOiBvYmoua2V5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG5cbi8qKlxuICogQSB3b3Jrc3BhY2UgdG8gaGFuZGxlIFRlcnJhZm9ybSBjb2RlXG4gKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlXG4gKi9cbmV4cG9ydCBjbGFzcyBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnZmlyZXN0YXJ0ci5kZXYvdjEnLFxuICAgIGtpbmQ6ICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2UuR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQcm9wcyhwcm9wcyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2UuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIEt1YmVybmV0ZXMgSlNPTi5cbiAgICovXG4gIHB1YmxpYyB0b0pzb24oKTogYW55IHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHN1cGVyLnRvSnNvbigpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2UuR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQcm9wcyhyZXNvbHZlZCksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEEgd29ya3NwYWNlIHRvIGhhbmRsZSBUZXJyYWZvcm0gY29kZVxuICpcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2UjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhOiBBcGlPYmplY3RNZXRhZGF0YTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQcm9wcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVByb3BzKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVByb3BzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbWV0YWRhdGEnOiBvYmoubWV0YWRhdGEsXG4gICAgJ3NwZWMnOiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWMob2JqLnNwZWMpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlYyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjI2NvbnRleHRcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ/OiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWMjZmlyZXN0YXJ0clxuICAgKi9cbiAgcmVhZG9ubHkgZmlyZXN0YXJ0cjogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNGaXJlc3RhcnRyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjI21vZHVsZVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjI3NvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlPzogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNTb3VyY2U7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWMjdmFsdWVzXG4gICAqL1xuICByZWFkb25seSB2YWx1ZXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWMjcmVmZXJlbmNlc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVmZXJlbmNlcz86IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjUmVmZXJlbmNlc1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjI3dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmXG4gICAqL1xuICByZWFkb25seSB3cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZj86IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdjb250ZXh0JzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dChvYmouY29udGV4dCksXG4gICAgJ2ZpcmVzdGFydHInOiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNGaXJlc3RhcnRyKG9iai5maXJlc3RhcnRyKSxcbiAgICAnbW9kdWxlJzogb2JqLm1vZHVsZSxcbiAgICAnc291cmNlJzogb2JqLnNvdXJjZSxcbiAgICAndmFsdWVzJzogb2JqLnZhbHVlcyxcbiAgICAncmVmZXJlbmNlcyc6IG9iai5yZWZlcmVuY2VzPy5tYXAoeSA9PiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzKHkpKSxcbiAgICAnd3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYnOiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZihvYmoud3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0I2JhY2tlbmRcbiAgICovXG4gIHJlYWRvbmx5IGJhY2tlbmQ6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0I3Byb3ZpZGVyc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXJzOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dChvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2JhY2tlbmQnOiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZChvYmouYmFja2VuZCksXG4gICAgJ3Byb3ZpZGVycyc6IG9iai5wcm92aWRlcnM/Lm1hcCh5ID0+IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNGaXJlc3RhcnRyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNGaXJlc3RhcnRyIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNGaXJlc3RhcnRyI3RmU3RhdGVLZXlcbiAgICovXG4gIHJlYWRvbmx5IHRmU3RhdGVLZXk6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0ZpcmVzdGFydHInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjRmlyZXN0YXJ0cihvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjRmlyZXN0YXJ0ciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3RmU3RhdGVLZXknOiBvYmoudGZTdGF0ZUtleSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjU291cmNlXG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjU291cmNlIHtcbiAgLyoqIFJlbW90ZSAqL1xuICBSRU1PVEUgPSBcIlJlbW90ZVwiLFxuICAvKiogSW5saW5lICovXG4gIElOTElORSA9IFwiSW5saW5lXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXMjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXMjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY/OiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXMob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYjb3V0cHV0c1xuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0czogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHNbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAnb3V0cHV0cyc6IG9iai5vdXRwdXRzPy5tYXAoeSA9PiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmQge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmQob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnMjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFByb3ZpZGVyc1JlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFByb3ZpZGVycyhvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFByb3ZpZGVycyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNSZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzUmVmS2luZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNSZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjUmVmZXJlbmNlc1JlZiNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjUmVmZXJlbmNlc1JlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzUmVmKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzUmVmIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2luZCc6IG9iai5raW5kLFxuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ2tleSc6IG9iai5rZXksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IG9iai5rZXksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZFJlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZFJlZktpbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZFJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZFJlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZFJlZihvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFByb3ZpZGVyc1JlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFByb3ZpZGVyc1JlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFByb3ZpZGVyc1JlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFByb3ZpZGVyc1JlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNSZWYob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjUmVmZXJlbmNlc1JlZktpbmRcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlICovXG4gIEZJUkVTVEFSVFJfVEVSUkFGT1JNX1dPUktTUEFDRSA9IFwiRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVwiLFxuICAvKiogRXh0ZXJuYWxTZWNyZXQgKi9cbiAgRVhURVJOQUxfU0VDUkVUID0gXCJFeHRlcm5hbFNlY3JldFwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZFJlZktpbmRcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZFJlZktpbmQge1xuICAvKiogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnICovXG4gIEZJUkVTVEFSVFJfUFJPVklERVJfQ09ORklHID0gXCJGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFByb3ZpZGVyc1JlZktpbmRcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcgKi9cbiAgRklSRVNUQVJUUl9QUk9WSURFUl9DT05GSUcgPSBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiLFxufVxuXG5cbi8qKlxuICogQSB3b3Jrc3BhY2UgdG8gaGFuZGxlIFRlcnJhZm9ybSBjb2RlXG4gKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblxuICovXG5leHBvcnQgY2xhc3MgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW4gZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnZmlyZXN0YXJ0ci5kZXYvdjEnLFxuICAgIGtpbmQ6ICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhbicsXG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5cIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5Qcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuLkdWSyxcbiAgICAgIC4uLnRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblByb3BzKHByb3BzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcIkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhbi5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gS3ViZXJuZXRlcyBKU09OLlxuICAgKi9cbiAgcHVibGljIHRvSnNvbigpOiBhbnkge1xuICAgIGNvbnN0IHJlc29sdmVkID0gc3VwZXIudG9Kc29uKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW4uR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuUHJvcHMocmVzb2x2ZWQpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBIHdvcmtzcGFjZSB0byBoYW5kbGUgVGVycmFmb3JtIGNvZGVcbiAqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5Qcm9wcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YTogQXBpT2JqZWN0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW4jc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYzogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuUHJvcHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuUHJvcHMob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblByb3BzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbWV0YWRhdGEnOiBvYmoubWV0YWRhdGEsXG4gICAgJ3NwZWMnOiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjKG9iai5zcGVjKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlYyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlYyNjb250ZXh0XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0PzogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWMjZmlyZXN0YXJ0clxuICAgKi9cbiAgcmVhZG9ubHkgZmlyZXN0YXJ0cjogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjRmlyZXN0YXJ0cjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWMjbW9kdWxlXG4gICAqL1xuICByZWFkb25seSBtb2R1bGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjI3NvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlPzogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjU291cmNlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlYyN2YWx1ZXNcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlcz86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWMjcmVmZXJlbmNlc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVmZXJlbmNlcz86IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXNbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWMjd3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZcbiAgICovXG4gIHJlYWRvbmx5IHdyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmPzogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWMob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdjb250ZXh0JzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHQob2JqLmNvbnRleHQpLFxuICAgICdmaXJlc3RhcnRyJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0ZpcmVzdGFydHIob2JqLmZpcmVzdGFydHIpLFxuICAgICdtb2R1bGUnOiBvYmoubW9kdWxlLFxuICAgICdzb3VyY2UnOiBvYmouc291cmNlLFxuICAgICd2YWx1ZXMnOiBvYmoudmFsdWVzLFxuICAgICdyZWZlcmVuY2VzJzogb2JqLnJlZmVyZW5jZXM/Lm1hcCh5ID0+IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzKHkpKSxcbiAgICAnd3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYnOiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYob2JqLndyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dCNiYWNrZW5kXG4gICAqL1xuICByZWFkb25seSBiYWNrZW5kOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0I3Byb3ZpZGVyc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXJzOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dChvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdiYWNrZW5kJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kKG9iai5iYWNrZW5kKSxcbiAgICAncHJvdmlkZXJzJzogb2JqLnByb3ZpZGVycz8ubWFwKHkgPT4gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjRmlyZXN0YXJ0clxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0ZpcmVzdGFydHIge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNGaXJlc3RhcnRyI3RmU3RhdGVLZXlcbiAgICovXG4gIHJlYWRvbmx5IHRmU3RhdGVLZXk6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNGaXJlc3RhcnRyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNGaXJlc3RhcnRyKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjRmlyZXN0YXJ0ciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3RmU3RhdGVLZXknOiBvYmoudGZTdGF0ZUtleSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1NvdXJjZVxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNTb3VyY2Uge1xuICAvKiogUmVtb3RlICovXG4gIFJFTU9URSA9IFwiUmVtb3RlXCIsXG4gIC8qKiBJbmxpbmUgKi9cbiAgSU5MSU5FID0gXCJJbmxpbmVcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlcyNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXMjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY/OiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXMob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlc1JlZihvYmoucmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYjb3V0cHV0c1xuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0czogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ291dHB1dHMnOiBvYmoub3V0cHV0cz8ubWFwKHkgPT4gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmQjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZChvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dFByb3ZpZGVyc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnMob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnNSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlc1JlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXNSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlc1JlZktpbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlc1JlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlc1JlZiNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXNSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXNSZWYob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzUmVmIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2luZCc6IG9iai5raW5kLFxuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ2tleSc6IG9iai5rZXksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyhvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IG9iai5rZXksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZFJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmRSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZFJlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmRSZWYob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZFJlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dFByb3ZpZGVyc1JlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnNSZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnNSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnNSZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnNSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnNSZWYob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzUmVmIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2luZCc6IG9iai5raW5kLFxuICAgICduYW1lJzogb2JqLm5hbWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlICovXG4gIEZJUkVTVEFSVFJfVEVSUkFGT1JNX1dPUktTUEFDRSA9IFwiRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVwiLFxuICAvKiogRXh0ZXJuYWxTZWNyZXQgKi9cbiAgRVhURVJOQUxfU0VDUkVUID0gXCJFeHRlcm5hbFNlY3JldFwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kXG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcgKi9cbiAgRklSRVNUQVJUUl9QUk9WSURFUl9DT05GSUcgPSBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dFByb3ZpZGVyc1JlZktpbmRcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dFByb3ZpZGVyc1JlZktpbmQge1xuICAvKiogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnICovXG4gIEZJUkVTVEFSVFJfUFJPVklERVJfQ09ORklHID0gXCJGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdcIixcbn1cblxuXG4vKipcbiAqIEEgcmVzb3VyY2UgdG8gaGFuZGxlIFRlcnJhZm9ybSByZXN1bHRzLlxuICpcbiAqIEBzY2hlbWEgVEZSZXN1bHRcbiAqL1xuZXhwb3J0IGNsYXNzIFRmUmVzdWx0IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiVEZSZXN1bHRcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2ZpcmVzdGFydHIuZGV2L3YxJyxcbiAgICBraW5kOiAnVEZSZXN1bHQnLFxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcIlRGUmVzdWx0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IFRmUmVzdWx0UHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLlRmUmVzdWx0LkdWSyxcbiAgICAgIC4uLnRvSnNvbl9UZlJlc3VsdFByb3BzKHByb3BzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcIlRGUmVzdWx0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBUZlJlc3VsdFByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLlRmUmVzdWx0LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBLdWJlcm5ldGVzIEpTT04uXG4gICAqL1xuICBwdWJsaWMgdG9Kc29uKCk6IGFueSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBzdXBlci50b0pzb24oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5UZlJlc3VsdC5HVkssXG4gICAgICAuLi50b0pzb25fVGZSZXN1bHRQcm9wcyhyZXNvbHZlZCksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEEgcmVzb3VyY2UgdG8gaGFuZGxlIFRlcnJhZm9ybSByZXN1bHRzLlxuICpcbiAqIEBzY2hlbWEgVEZSZXN1bHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZlJlc3VsdFByb3BzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgVEZSZXN1bHQjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogQXBpT2JqZWN0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgVEZSZXN1bHQjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYz86IFRmUmVzdWx0U3BlYztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdUZlJlc3VsdFByb3BzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9UZlJlc3VsdFByb3BzKG9iajogVGZSZXN1bHRQcm9wcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ21ldGFkYXRhJzogb2JqLm1ldGFkYXRhLFxuICAgICdzcGVjJzogdG9Kc29uX1RmUmVzdWx0U3BlYyhvYmouc3BlYyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBUZlJlc3VsdFNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZlJlc3VsdFNwZWMge1xuICAvKipcbiAgICogQHNjaGVtYSBUZlJlc3VsdFNwZWMjYWN0aW9uXG4gICAqL1xuICByZWFkb25seSBhY3Rpb24/OiBUZlJlc3VsdFNwZWNBY3Rpb247XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgVGZSZXN1bHRTcGVjI3JlZmVyZW5jZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVmZXJlbmNlPzogVGZSZXN1bHRTcGVjUmVmZXJlbmNlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFRmUmVzdWx0U3BlYyNyZXN1bHRcbiAgICovXG4gIHJlYWRvbmx5IHJlc3VsdD86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdUZlJlc3VsdFNwZWMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1RmUmVzdWx0U3BlYyhvYmo6IFRmUmVzdWx0U3BlYyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FjdGlvbic6IG9iai5hY3Rpb24sXG4gICAgJ3JlZmVyZW5jZSc6IHRvSnNvbl9UZlJlc3VsdFNwZWNSZWZlcmVuY2Uob2JqLnJlZmVyZW5jZSksXG4gICAgJ3Jlc3VsdCc6IG9iai5yZXN1bHQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBUZlJlc3VsdFNwZWNBY3Rpb25cbiAqL1xuZXhwb3J0IGVudW0gVGZSZXN1bHRTcGVjQWN0aW9uIHtcbiAgLyoqIGluaXQgKi9cbiAgSU5JVCA9IFwiaW5pdFwiLFxuICAvKiogcGxhbiAqL1xuICBQTEFOID0gXCJwbGFuXCIsXG4gIC8qKiBhcHBseSAqL1xuICBBUFBMWSA9IFwiYXBwbHlcIixcbiAgLyoqIGRlc3Ryb3kgKi9cbiAgREVTVFJPWSA9IFwiZGVzdHJveVwiLFxuICAvKiogc3ludGggKi9cbiAgU1lOVEggPSBcInN5bnRoXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBUZlJlc3VsdFNwZWNSZWZlcmVuY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZlJlc3VsdFNwZWNSZWZlcmVuY2Uge1xuICAvKipcbiAgICogQHNjaGVtYSBUZlJlc3VsdFNwZWNSZWZlcmVuY2UjcmVmS2luZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVmS2luZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFRmUmVzdWx0U3BlY1JlZmVyZW5jZSNyZWZOYW1lXG4gICAqL1xuICByZWFkb25seSByZWZOYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVGZSZXN1bHRTcGVjUmVmZXJlbmNlJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9UZlJlc3VsdFNwZWNSZWZlcmVuY2Uob2JqOiBUZlJlc3VsdFNwZWNSZWZlcmVuY2UgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWZLaW5kJzogb2JqLnJlZktpbmQsXG4gICAgJ3JlZk5hbWUnOiBvYmoucmVmTmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuIl19
|
|
230106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZXN0YXJ0ci5kZXYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9pbXBvcnRzL2ZpcmVzdGFydHIuZGV2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUJBQXFCO0FBQ3JCLGlDQUF1RTtBQUl2RTs7OztHQUlHO0FBQ0gsTUFBYSxxQkFBc0IsU0FBUSxpQkFBUztJQVNsRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQW9DLEVBQUU7UUFDM0QsdUNBQ0sscUJBQXFCLENBQUMsR0FBRyxHQUN6QixpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsRUFDM0M7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFtQixLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUFvQyxFQUFFO1FBQ3JGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxrQ0FDVixxQkFBcUIsQ0FBQyxHQUFHLEdBQ3pCLEtBQUssRUFDUixDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTTtRQUNYLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUVoQyx1Q0FDSyxxQkFBcUIsQ0FBQyxHQUFHLEdBQ3pCLGlDQUFpQyxDQUFDLFFBQVEsQ0FBQyxFQUM5QztJQUNKLENBQUM7O0FBN0NEOztHQUVHO0FBQ29CLHlCQUFHLEdBQXFCO0lBQzdDLFVBQVUsRUFBRSxtQkFBbUI7SUFDL0IsSUFBSSxFQUFFLHVCQUF1QjtDQUM5QixDQUFBO0FBUFUsc0RBQXFCO0FBbUVsQzs7R0FFRztBQUNILHlDQUF5QztBQUN6QyxTQUFnQixpQ0FBaUMsQ0FBQyxHQUEyQztJQUMzRixJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7UUFBRSxPQUFPLFNBQVMsQ0FBQztLQUFFO0lBQzVDLE1BQU0sTUFBTSxHQUFHO1FBQ2IsVUFBVSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1FBQ3hCLE1BQU0sRUFBRSxnQ0FBZ0MsQ0FBQyxHQUFHLENB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QUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQ0FBTSxDQUFDLEtBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxRyxDQUFDO0FBUkQsb0VBUUM7QUFDRCx3Q0FBd0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBnZW5lcmF0ZWQgYnkgY2RrOHNcbmltcG9ydCB7IEFwaU9iamVjdCwgQXBpT2JqZWN0TWV0YWRhdGEsIEdyb3VwVmVyc2lvbktpbmQgfSBmcm9tICdjZGs4cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuXG4vKipcbiAqIEEgcmVzb3VyY2UgdG8gaGFuZGxlIEdpdEh1YiBncm91cHNcbiAqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFxuICovXG5leHBvcnQgY2xhc3MgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdmaXJlc3RhcnRyLmRldi92MScsXG4gICAga2luZDogJ0ZpcmVzdGFydHJHaXRodWJHcm91cCcsXG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEZpcmVzdGFydHJHaXRodWJHcm91cFByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5GaXJlc3RhcnRyR2l0aHViR3JvdXAuR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFByb3BzKHByb3BzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcIkZpcmVzdGFydHJHaXRodWJHcm91cFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4uRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBLdWJlcm5ldGVzIEpTT04uXG4gICAqL1xuICBwdWJsaWMgdG9Kc29uKCk6IGFueSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBzdXBlci50b0pzb24oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5GaXJlc3RhcnRyR2l0aHViR3JvdXAuR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFByb3BzKHJlc29sdmVkKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgR2l0SHViIGdyb3Vwc1xuICpcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXAjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogQXBpT2JqZWN0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJHcm91cFByb3BzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBQcm9wcyhvYmo6IEZpcmVzdGFydHJHaXRodWJHcm91cFByb3BzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbWV0YWRhdGEnOiBvYmoubWV0YWRhdGEsXG4gICAgJ3NwZWMnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlYyhvYmouc3BlYyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlYyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWMjb3JnXG4gICAqL1xuICByZWFkb25seSBvcmc6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjI3ByaXZhY3lcbiAgICovXG4gIHJlYWRvbmx5IHByaXZhY3k6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNQcml2YWN5O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWMjZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWMjcGFyZW50VGVhbVxuICAgKi9cbiAgcmVhZG9ubHkgcGFyZW50VGVhbT86IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNQYXJlbnRUZWFtO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWMjbWVtYmVyc1xuICAgKi9cbiAgcmVhZG9ubHkgbWVtYmVyczogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnNbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjI2NvbnRleHRcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWMjZmlyZXN0YXJ0clxuICAgKi9cbiAgcmVhZG9ubHkgZmlyZXN0YXJ0cjogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0ZpcmVzdGFydHI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlYyN3cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZlxuICAgKi9cbiAgcmVhZG9ubHkgd3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWY6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjKG9iajogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlYyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ29yZyc6IG9iai5vcmcsXG4gICAgJ3ByaXZhY3knOiBvYmoucHJpdmFjeSxcbiAgICAnZGVzY3JpcHRpb24nOiBvYmouZGVzY3JpcHRpb24sXG4gICAgJ3BhcmVudFRlYW0nOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1BhcmVudFRlYW0ob2JqLnBhcmVudFRlYW0pLFxuICAgICdtZW1iZXJzJzogb2JqLm1lbWJlcnM/Lm1hcCh5ID0+IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjTWVtYmVycyh5KSksXG4gICAgJ2NvbnRleHQnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHQob2JqLmNvbnRleHQpLFxuICAgICdmaXJlc3RhcnRyJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNGaXJlc3RhcnRyKG9iai5maXJlc3RhcnRyKSxcbiAgICAnd3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKG9iai53cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUHJpdmFjeVxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUHJpdmFjeSB7XG4gIC8qKiBjbG9zZWQgKi9cbiAgQ0xPU0VEID0gXCJjbG9zZWRcIixcbiAgLyoqIHNlY3JldCAqL1xuICBTRUNSRVQgPSBcInNlY3JldFwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1BhcmVudFRlYW1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUGFyZW50VGVhbSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNQYXJlbnRUZWFtI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUGFyZW50VGVhbVJlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUGFyZW50VGVhbScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1BhcmVudFRlYW0ob2JqOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUGFyZW50VGVhbSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUGFyZW50VGVhbVJlZihvYmoucmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNNZW1iZXJzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjTWVtYmVycyNyZWZcbiAgICovXG4gIHJlYWRvbmx5IHJlZjogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnNSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNNZW1iZXJzKG9iajogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnNSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHQjYmFja2VuZFxuICAgKi9cbiAgcmVhZG9ubHkgYmFja2VuZDogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRCYWNrZW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0I3Byb3ZpZGVyXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlcjogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlcjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHQob2JqOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2JhY2tlbmQnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRCYWNrZW5kKG9iai5iYWNrZW5kKSxcbiAgICAncHJvdmlkZXInOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlcihvYmoucHJvdmlkZXIpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0ZpcmVzdGFydHJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjRmlyZXN0YXJ0ciB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNGaXJlc3RhcnRyI3RmU3RhdGVLZXlcbiAgICovXG4gIHJlYWRvbmx5IHRmU3RhdGVLZXk/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0ZpcmVzdGFydHInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNGaXJlc3RhcnRyKG9iajogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0ZpcmVzdGFydHIgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICd0ZlN0YXRlS2V5Jzogb2JqLnRmU3RhdGVLZXksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYjb3V0cHV0c1xuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0cz86IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHNbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZihvYmo6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAnb3V0cHV0cyc6IG9iai5vdXRwdXRzPy5tYXAoeSA9PiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUGFyZW50VGVhbVJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNQYXJlbnRUZWFtUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1BhcmVudFRlYW1SZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNQYXJlbnRUZWFtUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUGFyZW50VGVhbVJlZiNuZWVkc1NlY3JldFxuICAgKi9cbiAgcmVhZG9ubHkgbmVlZHNTZWNyZXQ6IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1BhcmVudFRlYW1SZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNQYXJlbnRUZWFtUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1BhcmVudFRlYW1SZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAnbmVlZHNTZWNyZXQnOiBvYmoubmVlZHNTZWNyZXQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjTWVtYmVyc1JlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNNZW1iZXJzUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnNSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNNZW1iZXJzUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjTWVtYmVyc1JlZiNuZWVkc1NlY3JldFxuICAgKi9cbiAgcmVhZG9ubHkgbmVlZHNTZWNyZXQ6IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnNSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNNZW1iZXJzUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnNSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAnbmVlZHNTZWNyZXQnOiBvYmoubmVlZHNTZWNyZXQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmQge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmQjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZFJlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZChvYmo6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmRSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlciB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0UHJvdmlkZXIjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0UHJvdmlkZXJSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlcihvYmo6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0UHJvdmlkZXIgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlclJlZihvYmoucmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMob2JqOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZFJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZFJlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZFJlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZFJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRCYWNrZW5kUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmRSZWYob2JqOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmRSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0UHJvdmlkZXJSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlclJlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlclJlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kIHtcbiAgLyoqIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZyAqL1xuICBGSVJFU1RBUlRSX1BST1ZJREVSX0NPTkZJRyA9IFwiRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcgKi9cbiAgRklSRVNUQVJUUl9QUk9WSURFUl9DT05GSUcgPSBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiLFxufVxuXG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgR2l0SHViIG1lbWJlcnNoaXBzIHRvIGEgR2l0SHViIG9yZ2FuaXphdGlvbi5cbiAqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwXG4gKi9cbmV4cG9ydCBjbGFzcyBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcCBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcIkZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdmaXJlc3RhcnRyLmRldi92MScsXG4gICAga2luZDogJ0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXAuR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwUHJvcHMocHJvcHMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLkZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBLdWJlcm5ldGVzIEpTT04uXG4gICAqL1xuICBwdWJsaWMgdG9Kc29uKCk6IGFueSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBzdXBlci50b0pzb24oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcC5HVkssXG4gICAgICAuLi50b0pzb25fRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBQcm9wcyhyZXNvbHZlZCksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEEgcmVzb3VyY2UgdG8gaGFuZGxlIEdpdEh1YiBtZW1iZXJzaGlwcyB0byBhIEdpdEh1YiBvcmdhbml6YXRpb24uXG4gKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE6IEFwaU9iamVjdE1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlYztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFByb3BzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFByb3BzKG9iajogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBQcm9wcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ21ldGFkYXRhJzogb2JqLm1ldGFkYXRhLFxuICAgICdzcGVjJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlYyhvYmouc3BlYyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMjb3JnXG4gICAqL1xuICByZWFkb25seSBvcmc6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMjcm9sZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZTogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjUm9sZTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMjY29udGV4dFxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dDogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMjZmlyZXN0YXJ0clxuICAgKi9cbiAgcmVhZG9ubHkgZmlyZXN0YXJ0cjogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjRmlyZXN0YXJ0cjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMjd3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZcbiAgICovXG4gIHJlYWRvbmx5IHdyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmPzogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMob2JqOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdvcmcnOiBvYmoub3JnLFxuICAgICdyb2xlJzogb2JqLnJvbGUsXG4gICAgJ2NvbnRleHQnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dChvYmouY29udGV4dCksXG4gICAgJ2ZpcmVzdGFydHInOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjRmlyZXN0YXJ0cihvYmouZmlyZXN0YXJ0ciksXG4gICAgJ3dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKG9iai53cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNSb2xlXG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY1JvbGUge1xuICAvKiogbWVtYmVyICovXG4gIE1FTUJFUiA9IFwibWVtYmVyXCIsXG4gIC8qKiBhZG1pbiAqL1xuICBBRE1JTiA9IFwiYWRtaW5cIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dCNiYWNrZW5kXG4gICAqL1xuICByZWFkb25seSBiYWNrZW5kOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0I3Byb3ZpZGVyXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlcjogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHQob2JqOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYmFja2VuZCc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZChvYmouYmFja2VuZCksXG4gICAgJ3Byb3ZpZGVyJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlcihvYmoucHJvdmlkZXIpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjRmlyZXN0YXJ0clxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0ZpcmVzdGFydHIge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNGaXJlc3RhcnRyI3RmU3RhdGVLZXlcbiAgICovXG4gIHJlYWRvbmx5IHRmU3RhdGVLZXk6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNGaXJlc3RhcnRyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNGaXJlc3RhcnRyKG9iajogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjRmlyZXN0YXJ0ciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3RmU3RhdGVLZXknOiBvYmoudGZTdGF0ZUtleSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYjb3V0cHV0c1xuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0czogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ291dHB1dHMnOiBvYmoub3V0cHV0cz8ubWFwKHkgPT4gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dEJhY2tlbmQjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZChvYmo6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXJSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXIob2JqOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXIgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzI2tleVxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMob2JqOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dEJhY2tlbmRSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZFJlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZFJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dEJhY2tlbmRSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dEJhY2tlbmRSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlclJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlclJlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlclJlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXJSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlclJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXJSZWYob2JqOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXJSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZFJlZktpbmQge1xuICAvKiogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnICovXG4gIEZJUkVTVEFSVFJfUFJPVklERVJfQ09ORklHID0gXCJGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlclJlZktpbmRcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcgKi9cbiAgRklSRVNUQVJUUl9QUk9WSURFUl9DT05GSUcgPSBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiLFxufVxuXG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgdGhlIEdpdEh1YiByZXBvcyBvZiBhbiBvcmdhbml6YXRpb24uXG4gKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVxuICovXG5leHBvcnQgY2xhc3MgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnkgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnZmlyZXN0YXJ0ci5kZXYvdjEnLFxuICAgIGtpbmQ6ICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeScsXG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnkuR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5UHJvcHMocHJvcHMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5UHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4uRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnkuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIEt1YmVybmV0ZXMgSlNPTi5cbiAgICovXG4gIHB1YmxpYyB0b0pzb24oKTogYW55IHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHN1cGVyLnRvSnNvbigpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5LkdWSyxcbiAgICAgIC4uLnRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVByb3BzKHJlc29sdmVkKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgdGhlIEdpdEh1YiByZXBvcyBvZiBhbiBvcmdhbml6YXRpb24uXG4gKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5UHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeSNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBBcGlPYmplY3RNZXRhZGF0YTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeSNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjPzogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5UHJvcHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5UHJvcHMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVByb3BzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbWV0YWRhdGEnOiBvYmoubWV0YWRhdGEsXG4gICAgJ3NwZWMnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjKG9iai5zcGVjKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNvcmdcbiAgICovXG4gIHJlYWRvbmx5IG9yZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNjb250ZXh0XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNmaXJlc3RhcnRyXG4gICAqL1xuICByZWFkb25seSBmaXJlc3RhcnRyOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNyZXBvXG4gICAqL1xuICByZWFkb25seSByZXBvOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNhY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBhY3Rpb25zOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNwYWdlc1xuICAgKi9cbiAgcmVhZG9ubHkgcGFnZXM/OiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlcztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWMjcGVybWlzc2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25zOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9uc1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNicmFuY2hQcm90ZWN0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgYnJhbmNoUHJvdGVjdGlvbnM6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0JyYW5jaFByb3RlY3Rpb25zW107XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjI3dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmXG4gICAqL1xuICByZWFkb25seSB3cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZjogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdvcmcnOiBvYmoub3JnLFxuICAgICdjb250ZXh0JzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHQob2JqLmNvbnRleHQpLFxuICAgICdmaXJlc3RhcnRyJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHIob2JqLmZpcmVzdGFydHIpLFxuICAgICdyZXBvJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8ob2JqLnJlcG8pLFxuICAgICdhY3Rpb25zJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnMob2JqLmFjdGlvbnMpLFxuICAgICdwYWdlcyc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlcyhvYmoucGFnZXMpLFxuICAgICdwZXJtaXNzaW9ucyc6IG9iai5wZXJtaXNzaW9ucz8ubWFwKHkgPT4gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zKHkpKSxcbiAgICAnYnJhbmNoUHJvdGVjdGlvbnMnOiBvYmouYnJhbmNoUHJvdGVjdGlvbnM/Lm1hcCh5ID0+IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNCcmFuY2hQcm90ZWN0aW9ucyh5KSksXG4gICAgJ3dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKG9iai53cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHQjYmFja2VuZFxuICAgKi9cbiAgcmVhZG9ubHkgYmFja2VuZDogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dCNwcm92aWRlclxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXI6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlcjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0KG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2JhY2tlbmQnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmQob2JqLmJhY2tlbmQpLFxuICAgICdwcm92aWRlcic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXIob2JqLnByb3ZpZGVyKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjRmlyZXN0YXJ0ciN0ZlN0YXRlS2V5XG4gICAqL1xuICByZWFkb25seSB0ZlN0YXRlS2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjRmlyZXN0YXJ0ciN0ZWNobm9sb2d5XG4gICAqL1xuICByZWFkb25seSB0ZWNobm9sb2d5OiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyVGVjaG5vbG9neTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjRmlyZXN0YXJ0ciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3RmU3RhdGVLZXknOiBvYmoudGZTdGF0ZUtleSxcbiAgICAndGVjaG5vbG9neSc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyVGVjaG5vbG9neShvYmoudGVjaG5vbG9neSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jYWxsb3dNZXJnZUNvbW1pdFxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dNZXJnZUNvbW1pdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyNhbGxvd1NxdWFzaE1lcmdlXG4gICAqL1xuICByZWFkb25seSBhbGxvd1NxdWFzaE1lcmdlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvI2FsbG93UmViYXNlTWVyZ2VcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93UmViYXNlTWVyZ2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jYWxsb3dBdXRvTWVyZ2VcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93QXV0b01lcmdlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvI2RlbGV0ZUJyYW5jaE9uTWVyZ2VcbiAgICovXG4gIHJlYWRvbmx5IGRlbGV0ZUJyYW5jaE9uTWVyZ2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jYXV0b0luaXRcbiAgICovXG4gIHJlYWRvbmx5IGF1dG9Jbml0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvI2FyY2hpdmVPbkRlc3Ryb3lcbiAgICovXG4gIHJlYWRvbmx5IGFyY2hpdmVPbkRlc3Ryb3k/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jYWxsb3dVcGRhdGVCcmFuY2hcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93VXBkYXRlQnJhbmNoPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvI2hhc0lzc3Vlc1xuICAgKi9cbiAgcmVhZG9ubHkgaGFzSXNzdWVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvI2hhc1dpa2lcbiAgICovXG4gIHJlYWRvbmx5IGhhc1dpa2k/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jcGFnZXNcbiAgICovXG4gIHJlYWRvbmx5IHBhZ2VzPzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jdmlzaWJpbGl0eVxuICAgKi9cbiAgcmVhZG9ubHkgdmlzaWJpbGl0eTogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwb1Zpc2liaWxpdHk7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyNkZWZhdWx0QnJhbmNoXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0QnJhbmNoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyNhZGRpdGlvbmFsQnJhbmNoZXNcbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxCcmFuY2hlcz86IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG9BZGRpdGlvbmFsQnJhbmNoZXNbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvI2NvZGVvd25lcnNcbiAgICovXG4gIHJlYWRvbmx5IGNvZGVvd25lcnM/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyhvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkZXNjcmlwdGlvbic6IG9iai5kZXNjcmlwdGlvbixcbiAgICAnYWxsb3dNZXJnZUNvbW1pdCc6IG9iai5hbGxvd01lcmdlQ29tbWl0LFxuICAgICdhbGxvd1NxdWFzaE1lcmdlJzogb2JqLmFsbG93U3F1YXNoTWVyZ2UsXG4gICAgJ2FsbG93UmViYXNlTWVyZ2UnOiBvYmouYWxsb3dSZWJhc2VNZXJnZSxcbiAgICAnYWxsb3dBdXRvTWVyZ2UnOiBvYmouYWxsb3dBdXRvTWVyZ2UsXG4gICAgJ2RlbGV0ZUJyYW5jaE9uTWVyZ2UnOiBvYmouZGVsZXRlQnJhbmNoT25NZXJnZSxcbiAgICAnYXV0b0luaXQnOiBvYmouYXV0b0luaXQsXG4gICAgJ2FyY2hpdmVPbkRlc3Ryb3knOiBvYmouYXJjaGl2ZU9uRGVzdHJveSxcbiAgICAnYWxsb3dVcGRhdGVCcmFuY2gnOiBvYmouYWxsb3dVcGRhdGVCcmFuY2gsXG4gICAgJ2hhc0lzc3Vlcyc6IG9iai5oYXNJc3N1ZXMsXG4gICAgJ2hhc1dpa2knOiBvYmouaGFzV2lraSxcbiAgICAncGFnZXMnOiBvYmoucGFnZXMsXG4gICAgJ3Zpc2liaWxpdHknOiBvYmoudmlzaWJpbGl0eSxcbiAgICAnZGVmYXVsdEJyYW5jaCc6IG9iai5kZWZhdWx0QnJhbmNoLFxuICAgICdhZGRpdGlvbmFsQnJhbmNoZXMnOiBvYmouYWRkaXRpb25hbEJyYW5jaGVzPy5tYXAoeSA9PiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwb0FkZGl0aW9uYWxCcmFuY2hlcyh5KSksXG4gICAgJ2NvZGVvd25lcnMnOiBvYmouY29kZW93bmVycyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQWN0aW9ucyNvaWRjXG4gICAqL1xuICByZWFkb25seSBvaWRjOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zT2lkYztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQWN0aW9ucyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ29pZGMnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQWN0aW9uc09pZGMob2JqLm9pZGMpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGFnZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzI2NuYW1lXG4gICAqL1xuICByZWFkb25seSBjbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlcyNzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZT86IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzU291cmNlO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlcyhvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnY25hbWUnOiBvYmouY25hbWUsXG4gICAgJ3NvdXJjZSc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlc1NvdXJjZShvYmouc291cmNlKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9ucyNyb2xlXG4gICAqL1xuICByZWFkb25seSByb2xlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zI2NvbGxhYm9yYXRvclxuICAgKi9cbiAgcmVhZG9ubHkgY29sbGFib3JhdG9yPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmPzogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnNSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyb2xlJzogb2JqLnJvbGUsXG4gICAgJ2NvbGxhYm9yYXRvcic6IG9iai5jb2xsYWJvcmF0b3IsXG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9uc1JlZihvYmoucmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0JyYW5jaFByb3RlY3Rpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQnJhbmNoUHJvdGVjdGlvbnMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNCcmFuY2hQcm90ZWN0aW9ucyNicmFuY2hcbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0JyYW5jaFByb3RlY3Rpb25zI3N0YXR1c0NoZWNrc1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzQ2hlY2tzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQnJhbmNoUHJvdGVjdGlvbnMjcmVxdWlyZWRSZXZpZXdlcnNDb3VudFxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZWRSZXZpZXdlcnNDb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNCcmFuY2hQcm90ZWN0aW9ucyNyZXF1aXJlZENvZGVvd25lcnNSZXZpZXdlcnNcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVkQ29kZW93bmVyc1Jldmlld2Vycz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQnJhbmNoUHJvdGVjdGlvbnMjZW5mb3JjZUFkbWluc1xuICAgKi9cbiAgcmVhZG9ubHkgZW5mb3JjZUFkbWlucz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQnJhbmNoUHJvdGVjdGlvbnMjcmVxdWlyZVNpZ25lZENvbW1pdHNcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVTaWduZWRDb21taXRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNCcmFuY2hQcm90ZWN0aW9ucyNyZXF1aXJlQ29udmVyc2F0aW9uUmVzb2x1dGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZUNvbnZlcnNhdGlvblJlc29sdXRpb24/OiBib29sZWFuO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0JyYW5jaFByb3RlY3Rpb25zJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNCcmFuY2hQcm90ZWN0aW9ucyhvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0JyYW5jaFByb3RlY3Rpb25zIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYnJhbmNoJzogb2JqLmJyYW5jaCxcbiAgICAnc3RhdHVzQ2hlY2tzJzogb2JqLnN0YXR1c0NoZWNrcz8ubWFwKHkgPT4geSksXG4gICAgJ3JlcXVpcmVkUmV2aWV3ZXJzQ291bnQnOiBvYmoucmVxdWlyZWRSZXZpZXdlcnNDb3VudCxcbiAgICAncmVxdWlyZWRDb2Rlb3duZXJzUmV2aWV3ZXJzJzogb2JqLnJlcXVpcmVkQ29kZW93bmVyc1Jldmlld2VycyxcbiAgICAnZW5mb3JjZUFkbWlucyc6IG9iai5lbmZvcmNlQWRtaW5zLFxuICAgICdyZXF1aXJlU2lnbmVkQ29tbWl0cyc6IG9iai5yZXF1aXJlU2lnbmVkQ29tbWl0cyxcbiAgICAncmVxdWlyZUNvbnZlcnNhdGlvblJlc29sdXRpb24nOiBvYmoucmVxdWlyZUNvbnZlcnNhdGlvblJlc29sdXRpb24sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmI291dHB1dHNcbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dHM6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0c1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZihvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICdvdXRwdXRzJzogb2JqLm91dHB1dHM/Lm1hcCh5ID0+IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZFJlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmQob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZFJlZihvYmoucmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlciB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlciNyZWZcbiAgICovXG4gIHJlYWRvbmx5IHJlZjogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlclJlZihvYmoucmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHJUZWNobm9sb2d5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjRmlyZXN0YXJ0clRlY2hub2xvZ3kge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyVGVjaG5vbG9neSNzdGFja1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2s/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjRmlyZXN0YXJ0clRlY2hub2xvZ3kjdmVyc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyVGVjaG5vbG9neScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjRmlyZXN0YXJ0clRlY2hub2xvZ3kob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyVGVjaG5vbG9neSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3N0YWNrJzogb2JqLnN0YWNrLFxuICAgICd2ZXJzaW9uJzogb2JqLnZlcnNpb24sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvVmlzaWJpbGl0eVxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvVmlzaWJpbGl0eSB7XG4gIC8qKiBwcml2YXRlICovXG4gIFBSSVZBVEUgPSBcInByaXZhdGVcIixcbiAgLyoqIHB1YmxpYyAqL1xuICBQVUJMSUMgPSBcInB1YmxpY1wiLFxuICAvKiogaW50ZXJuYWwgKi9cbiAgSU5URVJOQUwgPSBcImludGVybmFsXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvQWRkaXRpb25hbEJyYW5jaGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwb0FkZGl0aW9uYWxCcmFuY2hlcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYWRkaXRpb25hbCBicmFuY2hcbiAgICpcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvQWRkaXRpb25hbEJyYW5jaGVzI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGFkZGl0aW9uYWwgYnJhbmNoIGlzIG9ycGhhbmVkXG4gICAqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwb0FkZGl0aW9uYWxCcmFuY2hlcyNvcnBoYW5cbiAgICovXG4gIHJlYWRvbmx5IG9ycGhhbj86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwb0FkZGl0aW9uYWxCcmFuY2hlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwb0FkZGl0aW9uYWxCcmFuY2hlcyhvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG9BZGRpdGlvbmFsQnJhbmNoZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ29ycGhhbic6IG9iai5vcnBoYW4sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zT2lkY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnNPaWRjIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQWN0aW9uc09pZGMjdXNlRGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgdXNlRGVmYXVsdDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zT2lkYyNpbmNsdWRlQ2xhaW1LZXlzXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlQ2xhaW1LZXlzOiBzdHJpbmdbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zT2lkYycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQWN0aW9uc09pZGMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zT2lkYyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3VzZURlZmF1bHQnOiBvYmoudXNlRGVmYXVsdCxcbiAgICAnaW5jbHVkZUNsYWltS2V5cyc6IG9iai5pbmNsdWRlQ2xhaW1LZXlzPy5tYXAoeSA9PiB5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzU291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGFnZXNTb3VyY2Uge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlc1NvdXJjZSNicmFuY2hcbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlc1NvdXJjZSNwYXRoXG4gICAqL1xuICByZWFkb25seSBwYXRoPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzU291cmNlJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlc1NvdXJjZShvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzU291cmNlIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYnJhbmNoJzogb2JqLmJyYW5jaCxcbiAgICAncGF0aCc6IG9iai5wYXRoLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnNSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9uc1JlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnNSZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9uc1JlZiNuZWVkc1NlY3JldFxuICAgKi9cbiAgcmVhZG9ubHkgbmVlZHNTZWNyZXQ/OiBib29sZWFuO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9uc1JlZihvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zUmVmIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2luZCc6IG9iai5raW5kLFxuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ25lZWRzU2VjcmV0Jzogb2JqLm5lZWRzU2VjcmV0LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzI2tleVxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmRSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZFJlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZFJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmRSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmRSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlclJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlclJlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlclJlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXJSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlclJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXJSZWYob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXJSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZFJlZktpbmQge1xuICAvKiogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnICovXG4gIEZJUkVTVEFSVFJfUFJPVklERVJfQ09ORklHID0gXCJGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlclJlZktpbmRcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcgKi9cbiAgRklSRVNUQVJUUl9QUk9WSURFUl9DT05GSUcgPSBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiLFxufVxuXG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgZmVhdHVyZXMgZm9yIEdpdEh1YiByZXBvcy5cbiAqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVxuICovXG5leHBvcnQgY2xhc3MgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdmaXJlc3RhcnRyLmRldi92MScsXG4gICAga2luZDogJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZScsXG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmUuR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVByb3BzKHByb3BzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcIkZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4uRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBLdWJlcm5ldGVzIEpTT04uXG4gICAqL1xuICBwdWJsaWMgdG9Kc29uKCk6IGFueSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBzdXBlci50b0pzb24oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmUuR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVByb3BzKHJlc29sdmVkKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgZmVhdHVyZXMgZm9yIEdpdEh1YiByZXBvcy5cbiAqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVByb3BzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IEFwaU9iamVjdE1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZSNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjPzogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlYztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVQcm9wcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlUHJvcHMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVQcm9wcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ21ldGFkYXRhJzogb2JqLm1ldGFkYXRhLFxuICAgICdzcGVjJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWMob2JqLnNwZWMpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjI2ZpcmVzdGFydHJcbiAgICovXG4gIHJlYWRvbmx5IGZpcmVzdGFydHI/OiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjRmlyZXN0YXJ0cjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjI3R5cGVcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjI29yZ1xuICAgKi9cbiAgcmVhZG9ubHkgb3JnOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlYyNjb250ZXh0XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjI3ZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjI3JlcG9zaXRvcnlUYXJnZXRcbiAgICovXG4gIHJlYWRvbmx5IHJlcG9zaXRvcnlUYXJnZXQ6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWMjZmlsZXNcbiAgICovXG4gIHJlYWRvbmx5IGZpbGVzOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjRmlsZXNbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlYyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2ZpcmVzdGFydHInOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpcmVzdGFydHIob2JqLmZpcmVzdGFydHIpLFxuICAgICd0eXBlJzogb2JqLnR5cGUsXG4gICAgJ29yZyc6IG9iai5vcmcsXG4gICAgJ2NvbnRleHQnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHQob2JqLmNvbnRleHQpLFxuICAgICd2ZXJzaW9uJzogb2JqLnZlcnNpb24sXG4gICAgJ3JlcG9zaXRvcnlUYXJnZXQnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXQob2JqLnJlcG9zaXRvcnlUYXJnZXQpLFxuICAgICdmaWxlcyc6IG9iai5maWxlcz8ubWFwKHkgPT4gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaWxlcyh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjRmlyZXN0YXJ0clxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaXJlc3RhcnRyIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpcmVzdGFydHIjdGZTdGF0ZUtleVxuICAgKi9cbiAgcmVhZG9ubHkgdGZTdGF0ZUtleTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaXJlc3RhcnRyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjRmlyZXN0YXJ0cihvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaXJlc3RhcnRyIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAndGZTdGF0ZUtleSc6IG9iai50ZlN0YXRlS2V5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0I2JhY2tlbmRcbiAgICovXG4gIHJlYWRvbmx5IGJhY2tlbmQ6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dCNwcm92aWRlclxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXI6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXI7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0KG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdiYWNrZW5kJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZChvYmouYmFja2VuZCksXG4gICAgJ3Byb3ZpZGVyJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXIob2JqLnByb3ZpZGVyKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXQge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldCNyZWZcbiAgICovXG4gIHJlYWRvbmx5IHJlZjogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXRSZWY7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXQjYnJhbmNoXG4gICAqL1xuICByZWFkb25seSBicmFuY2g6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXQob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldFJlZihvYmoucmVmKSxcbiAgICAnYnJhbmNoJzogb2JqLmJyYW5jaCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaWxlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaWxlcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaWxlcyNwYXRoXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpbGVzI3VzZXJNYW5hZ2VkXG4gICAqL1xuICByZWFkb25seSB1c2VyTWFuYWdlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjRmlsZXMjY29udGVudFxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaWxlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpbGVzKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpbGVzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncGF0aCc6IG9iai5wYXRoLFxuICAgICd1c2VyTWFuYWdlZCc6IG9iai51c2VyTWFuYWdlZCxcbiAgICAnY29udGVudCc6IG9iai5jb250ZW50LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmQob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXIge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXIob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXJSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldFJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0UmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXRSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0UmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldFJlZiNuZWVkc1NlY3JldFxuICAgKi9cbiAgcmVhZG9ubHkgbmVlZHNTZWNyZXQ6IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXRSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0UmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXRSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAnbmVlZHNTZWNyZXQnOiBvYmoubmVlZHNTZWNyZXQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRSZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRSZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZFJlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kUmVmIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2luZCc6IG9iai5raW5kLFxuICAgICduYW1lJzogb2JqLm5hbWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclJlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXJSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclJlZktpbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclJlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclJlZihvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXJSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZFJlZktpbmRcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcgKi9cbiAgRklSRVNUQVJUUl9QUk9WSURFUl9DT05GSUcgPSBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclJlZktpbmRcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclJlZktpbmQge1xuICAvKiogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnICovXG4gIEZJUkVTVEFSVFJfUFJPVklERVJfQ09ORklHID0gXCJGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdcIixcbn1cblxuXG4vKipcbiAqIEEgcmVzb3VyY2UgdG8gaGFuZGxlIGJhY2tlbmQgYW5kIHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdcbiAqL1xuZXhwb3J0IGNsYXNzIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZyBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnZmlyZXN0YXJ0ci5kZXYvdjEnLFxuICAgIGtpbmQ6ICdGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcnLFxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJQcm92aWRlckNvbmZpZy5HVkssXG4gICAgICAuLi50b0pzb25fRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnUHJvcHMocHJvcHMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4uRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBLdWJlcm5ldGVzIEpTT04uXG4gICAqL1xuICBwdWJsaWMgdG9Kc29uKCk6IGFueSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBzdXBlci50b0pzb24oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5GaXJlc3RhcnRyUHJvdmlkZXJDb25maWcuR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1Byb3BzKHJlc29sdmVkKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgYmFja2VuZCBhbmQgcHJvdmlkZXIgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1Byb3BzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YTogQXBpT2JqZWN0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM6IEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWM7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnUHJvcHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1Byb3BzKG9iajogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnUHJvcHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdtZXRhZGF0YSc6IG9iai5tZXRhZGF0YSxcbiAgICAnc3BlYyc6IHRvSnNvbl9GaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjKG9iai5zcGVjKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlYyN0eXBlXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlYyNzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWMjdmVyc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWMjY29uZmlnXG4gICAqL1xuICByZWFkb25seSBjb25maWc6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjI2lubGluZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5saW5lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWMjZW52XG4gICAqL1xuICByZWFkb25seSBlbnY/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlYyNzZWNyZXRzXG4gICAqL1xuICByZWFkb25seSBzZWNyZXRzPzogeyBba2V5OiBzdHJpbmddOiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0cyB9O1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWMob2JqOiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAndHlwZSc6IG9iai50eXBlLFxuICAgICdzb3VyY2UnOiBvYmouc291cmNlLFxuICAgICd2ZXJzaW9uJzogb2JqLnZlcnNpb24sXG4gICAgJ2NvbmZpZyc6IG9iai5jb25maWcsXG4gICAgJ2lubGluZSc6IG9iai5pbmxpbmUsXG4gICAgJ2Vudic6IG9iai5lbnYsXG4gICAgJ3NlY3JldHMnOiAoKG9iai5zZWNyZXRzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouc2VjcmV0cykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IHRvSnNvbl9GaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0cyhpWzFdKSB9KSwge30pKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNTZWNyZXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0cyNzZWNyZXRSZWZcbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldFJlZjogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHNTZWNyZXRSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNTZWNyZXRzKG9iajogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdzZWNyZXRSZWYnOiB0b0pzb25fRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHNTZWNyZXRSZWYob2JqLnNlY3JldFJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0c1NlY3JldFJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNTZWNyZXRzU2VjcmV0UmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHNTZWNyZXRSZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNTZWNyZXRzU2VjcmV0UmVmI25hbWVzcGFjZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHNTZWNyZXRSZWYja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0c1NlY3JldFJlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHNTZWNyZXRSZWYob2JqOiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0c1NlY3JldFJlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAnbmFtZXNwYWNlJzogb2JqLm5hbWVzcGFjZSxcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuXG4vKipcbiAqIEEgd29ya3NwYWNlIHRvIGhhbmRsZSBUZXJyYWZvcm0gY29kZVxuICpcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVxuICovXG5leHBvcnQgY2xhc3MgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcIkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2ZpcmVzdGFydHIuZGV2L3YxJyxcbiAgICBraW5kOiAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZScsXG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlLkdWSyxcbiAgICAgIC4uLnRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUHJvcHMocHJvcHMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBLdWJlcm5ldGVzIEpTT04uXG4gICAqL1xuICBwdWJsaWMgdG9Kc29uKCk6IGFueSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBzdXBlci50b0pzb24oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlLkdWSyxcbiAgICAgIC4uLnRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUHJvcHMocmVzb2x2ZWQpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBIHdvcmtzcGFjZSB0byBoYW5kbGUgVGVycmFmb3JtIGNvZGVcbiAqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YTogQXBpT2JqZWN0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZSNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlYztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUHJvcHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQcm9wcyhvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQcm9wcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ21ldGFkYXRhJzogb2JqLm1ldGFkYXRhLFxuICAgICdzcGVjJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjKG9iai5zcGVjKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlYyNjb250ZXh0XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0PzogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjI2ZpcmVzdGFydHJcbiAgICovXG4gIHJlYWRvbmx5IGZpcmVzdGFydHI6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjRmlyZXN0YXJ0cjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlYyNtb2R1bGVcbiAgICovXG4gIHJlYWRvbmx5IG1vZHVsZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlYyNzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZT86IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjU291cmNlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjI3ZhbHVlc1xuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjI3JlZmVyZW5jZXNcbiAgICovXG4gIHJlYWRvbmx5IHJlZmVyZW5jZXM/OiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlYyN3cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZlxuICAgKi9cbiAgcmVhZG9ubHkgd3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWY/OiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlYyhvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnY29udGV4dCc6IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHQob2JqLmNvbnRleHQpLFxuICAgICdmaXJlc3RhcnRyJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjRmlyZXN0YXJ0cihvYmouZmlyZXN0YXJ0ciksXG4gICAgJ21vZHVsZSc6IG9iai5tb2R1bGUsXG4gICAgJ3NvdXJjZSc6IG9iai5zb3VyY2UsXG4gICAgJ3ZhbHVlcyc6IG9iai52YWx1ZXMsXG4gICAgJ3JlZmVyZW5jZXMnOiBvYmoucmVmZXJlbmNlcz8ubWFwKHkgPT4gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjUmVmZXJlbmNlcyh5KSksXG4gICAgJ3dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYob2JqLndyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dCNiYWNrZW5kXG4gICAqL1xuICByZWFkb25seSBiYWNrZW5kOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dCNwcm92aWRlcnNcbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyczogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHQob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdiYWNrZW5kJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmQob2JqLmJhY2tlbmQpLFxuICAgICdwcm92aWRlcnMnOiBvYmoucHJvdmlkZXJzPy5tYXAoeSA9PiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjRmlyZXN0YXJ0clxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjRmlyZXN0YXJ0ciB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjRmlyZXN0YXJ0ciN0ZlN0YXRlS2V5XG4gICAqL1xuICByZWFkb25seSB0ZlN0YXRlS2V5OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNGaXJlc3RhcnRyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0ZpcmVzdGFydHIob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0ZpcmVzdGFydHIgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICd0ZlN0YXRlS2V5Jzogb2JqLnRmU3RhdGVLZXksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1NvdXJjZVxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1NvdXJjZSB7XG4gIC8qKiBSZW1vdGUgKi9cbiAgUkVNT1RFID0gXCJSZW1vdGVcIixcbiAgLyoqIElubGluZSAqL1xuICBJTkxJTkUgPSBcIklubGluZVwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmPzogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjUmVmZXJlbmNlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmI291dHB1dHNcbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dHM6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZihvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ291dHB1dHMnOiBvYmoub3V0cHV0cz8ubWFwKHkgPT4gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZCNyZWZcbiAgICovXG4gIHJlYWRvbmx5IHJlZjogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZFJlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnMob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjUmVmZXJlbmNlc1JlZktpbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNSZWYja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjUmVmZXJlbmNlc1JlZihvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjUmVmZXJlbmNlc1JlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICdrZXknOiBvYmoua2V5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzI2tleVxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZFJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRSZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRSZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRSZWYob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kUmVmIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2luZCc6IG9iai5raW5kLFxuICAgICduYW1lJzogb2JqLm5hbWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNSZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzUmVmS2luZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNSZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFByb3ZpZGVyc1JlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzUmVmKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzUmVmIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2luZCc6IG9iai5raW5kLFxuICAgICduYW1lJzogb2JqLm5hbWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNSZWZLaW5kXG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjUmVmZXJlbmNlc1JlZktpbmQge1xuICAvKiogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZSAqL1xuICBGSVJFU1RBUlRSX1RFUlJBRk9STV9XT1JLU1BBQ0UgPSBcIkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VcIixcbiAgLyoqIEV4dGVybmFsU2VjcmV0ICovXG4gIEVYVEVSTkFMX1NFQ1JFVCA9IFwiRXh0ZXJuYWxTZWNyZXRcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kXG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kIHtcbiAgLyoqIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZyAqL1xuICBGSVJFU1RBUlRSX1BST1ZJREVSX0NPTkZJRyA9IFwiRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNSZWZLaW5kXG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFByb3ZpZGVyc1JlZktpbmQge1xuICAvKiogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnICovXG4gIEZJUkVTVEFSVFJfUFJPVklERVJfQ09ORklHID0gXCJGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdcIixcbn1cblxuXG4vKipcbiAqIEEgd29ya3NwYWNlIHRvIGhhbmRsZSBUZXJyYWZvcm0gY29kZVxuICpcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5cbiAqL1xuZXhwb3J0IGNsYXNzIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5cIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2ZpcmVzdGFydHIuZGV2L3YxJyxcbiAgICBraW5kOiAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW4nLFxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcIkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhbi5HVkssXG4gICAgICAuLi50b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5Qcm9wcyhwcm9wcyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4uRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW4uR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIEt1YmVybmV0ZXMgSlNPTi5cbiAgICovXG4gIHB1YmxpYyB0b0pzb24oKTogYW55IHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHN1cGVyLnRvSnNvbigpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuLkdWSyxcbiAgICAgIC4uLnRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblByb3BzKHJlc29sdmVkKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQSB3b3Jrc3BhY2UgdG8gaGFuZGxlIFRlcnJhZm9ybSBjb2RlXG4gKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhbiNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE6IEFwaU9iamVjdE1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlYztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblByb3BzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblByb3BzKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5Qcm9wcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ21ldGFkYXRhJzogb2JqLm1ldGFkYXRhLFxuICAgICdzcGVjJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlYyhvYmouc3BlYyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWMjY29udGV4dFxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dD86IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjI2ZpcmVzdGFydHJcbiAgICovXG4gIHJlYWRvbmx5IGZpcmVzdGFydHI6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0ZpcmVzdGFydHI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjI21vZHVsZVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlYyNzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZT86IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1NvdXJjZTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWMjdmFsdWVzXG4gICAqL1xuICByZWFkb25seSB2YWx1ZXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjI3JlZmVyZW5jZXNcbiAgICovXG4gIHJlYWRvbmx5IHJlZmVyZW5jZXM/OiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzW107XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjI3dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmXG4gICAqL1xuICByZWFkb25seSB3cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZj86IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlYycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnY29udGV4dCc6IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0KG9iai5jb250ZXh0KSxcbiAgICAnZmlyZXN0YXJ0cic6IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNGaXJlc3RhcnRyKG9iai5maXJlc3RhcnRyKSxcbiAgICAnbW9kdWxlJzogb2JqLm1vZHVsZSxcbiAgICAnc291cmNlJzogb2JqLnNvdXJjZSxcbiAgICAndmFsdWVzJzogb2JqLnZhbHVlcyxcbiAgICAncmVmZXJlbmNlcyc6IG9iai5yZWZlcmVuY2VzPy5tYXAoeSA9PiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlcyh5KSksXG4gICAgJ3dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKG9iai53cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHQjYmFja2VuZFxuICAgKi9cbiAgcmVhZG9ubHkgYmFja2VuZDogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dCNwcm92aWRlcnNcbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyczogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dFByb3ZpZGVyc1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHQob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYmFja2VuZCc6IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZChvYmouYmFja2VuZCksXG4gICAgJ3Byb3ZpZGVycyc6IG9iai5wcm92aWRlcnM/Lm1hcCh5ID0+IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0ZpcmVzdGFydHJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNGaXJlc3RhcnRyIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjRmlyZXN0YXJ0ciN0ZlN0YXRlS2V5XG4gICAqL1xuICByZWFkb25seSB0ZlN0YXRlS2V5OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjRmlyZXN0YXJ0cicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjRmlyZXN0YXJ0cihvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0ZpcmVzdGFydHIgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICd0ZlN0YXRlS2V5Jzogb2JqLnRmU3RhdGVLZXksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNTb3VyY2VcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjU291cmNlIHtcbiAgLyoqIFJlbW90ZSAqL1xuICBSRU1PVEUgPSBcIlJlbW90ZVwiLFxuICAvKiogSW5saW5lICovXG4gIElOTElORSA9IFwiSW5saW5lXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXMjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmPzogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlc1JlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXNSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmI291dHB1dHNcbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dHM6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0c1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZihvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICdvdXRwdXRzJzogb2JqLm91dHB1dHM/Lm1hcCh5ID0+IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZFJlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmQob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZFJlZihvYmoucmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dFByb3ZpZGVycyNyZWZcbiAgICovXG4gIHJlYWRvbmx5IHJlZjogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dFByb3ZpZGVyc1JlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dFByb3ZpZGVycyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlc1JlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXNSZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXNSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXNSZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXNSZWYja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzUmVmKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlc1JlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICdrZXknOiBvYmoua2V5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzI2tleVxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmRSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZFJlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZFJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmRSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kUmVmKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmRSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnNSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dFByb3ZpZGVyc1JlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzUmVmS2luZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzUmVmKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dFByb3ZpZGVyc1JlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlc1JlZktpbmRcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlc1JlZktpbmQge1xuICAvKiogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZSAqL1xuICBGSVJFU1RBUlRSX1RFUlJBRk9STV9XT1JLU1BBQ0UgPSBcIkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VcIixcbiAgLyoqIEV4dGVybmFsU2VjcmV0ICovXG4gIEVYVEVSTkFMX1NFQ1JFVCA9IFwiRXh0ZXJuYWxTZWNyZXRcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZFJlZktpbmQge1xuICAvKiogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnICovXG4gIEZJUkVTVEFSVFJfUFJPVklERVJfQ09ORklHID0gXCJGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnNSZWZLaW5kXG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnNSZWZLaW5kIHtcbiAgLyoqIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZyAqL1xuICBGSVJFU1RBUlRSX1BST1ZJREVSX0NPTkZJRyA9IFwiRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnXCIsXG59XG5cblxuLyoqXG4gKiBBIHJlc291cmNlIHRvIGhhbmRsZSBUZXJyYWZvcm0gcmVzdWx0cy5cbiAqXG4gKiBAc2NoZW1hIFRGUmVzdWx0XG4gKi9cbmV4cG9ydCBjbGFzcyBUZlJlc3VsdCBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcIlRGUmVzdWx0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdmaXJlc3RhcnRyLmRldi92MScsXG4gICAga2luZDogJ1RGUmVzdWx0JyxcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJURlJlc3VsdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBUZlJlc3VsdFByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5UZlJlc3VsdC5HVkssXG4gICAgICAuLi50b0pzb25fVGZSZXN1bHRQcm9wcyhwcm9wcyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJURlJlc3VsdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVGZSZXN1bHRQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5UZlJlc3VsdC5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gS3ViZXJuZXRlcyBKU09OLlxuICAgKi9cbiAgcHVibGljIHRvSnNvbigpOiBhbnkge1xuICAgIGNvbnN0IHJlc29sdmVkID0gc3VwZXIudG9Kc29uKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uVGZSZXN1bHQuR1ZLLFxuICAgICAgLi4udG9Kc29uX1RmUmVzdWx0UHJvcHMocmVzb2x2ZWQpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBIHJlc291cmNlIHRvIGhhbmRsZSBUZXJyYWZvcm0gcmVzdWx0cy5cbiAqXG4gKiBAc2NoZW1hIFRGUmVzdWx0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGZSZXN1bHRQcm9wcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIFRGUmVzdWx0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IEFwaU9iamVjdE1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFRGUmVzdWx0I3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBUZlJlc3VsdFNwZWM7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVGZSZXN1bHRQcm9wcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVGZSZXN1bHRQcm9wcyhvYmo6IFRmUmVzdWx0UHJvcHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdtZXRhZGF0YSc6IG9iai5tZXRhZGF0YSxcbiAgICAnc3BlYyc6IHRvSnNvbl9UZlJlc3VsdFNwZWMob2JqLnNwZWMpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgVGZSZXN1bHRTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGZSZXN1bHRTcGVjIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgVGZSZXN1bHRTcGVjI2FjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aW9uPzogVGZSZXN1bHRTcGVjQWN0aW9uO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFRmUmVzdWx0U3BlYyNyZWZlcmVuY2VcbiAgICovXG4gIHJlYWRvbmx5IHJlZmVyZW5jZT86IFRmUmVzdWx0U3BlY1JlZmVyZW5jZTtcblxuICAvKipcbiAgICogQHNjaGVtYSBUZlJlc3VsdFNwZWMjcmVzdWx0XG4gICAqL1xuICByZWFkb25seSByZXN1bHQ/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVGZSZXN1bHRTcGVjJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9UZlJlc3VsdFNwZWMob2JqOiBUZlJlc3VsdFNwZWMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhY3Rpb24nOiBvYmouYWN0aW9uLFxuICAgICdyZWZlcmVuY2UnOiB0b0pzb25fVGZSZXN1bHRTcGVjUmVmZXJlbmNlKG9iai5yZWZlcmVuY2UpLFxuICAgICdyZXN1bHQnOiBvYmoucmVzdWx0LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgVGZSZXN1bHRTcGVjQWN0aW9uXG4gKi9cbmV4cG9ydCBlbnVtIFRmUmVzdWx0U3BlY0FjdGlvbiB7XG4gIC8qKiBpbml0ICovXG4gIElOSVQgPSBcImluaXRcIixcbiAgLyoqIHBsYW4gKi9cbiAgUExBTiA9IFwicGxhblwiLFxuICAvKiogYXBwbHkgKi9cbiAgQVBQTFkgPSBcImFwcGx5XCIsXG4gIC8qKiBkZXN0cm95ICovXG4gIERFU1RST1kgPSBcImRlc3Ryb3lcIixcbiAgLyoqIHN5bnRoICovXG4gIFNZTlRIID0gXCJzeW50aFwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgVGZSZXN1bHRTcGVjUmVmZXJlbmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGZSZXN1bHRTcGVjUmVmZXJlbmNlIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgVGZSZXN1bHRTcGVjUmVmZXJlbmNlI3JlZktpbmRcbiAgICovXG4gIHJlYWRvbmx5IHJlZktpbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBUZlJlc3VsdFNwZWNSZWZlcmVuY2UjcmVmTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVmTmFtZTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1RmUmVzdWx0U3BlY1JlZmVyZW5jZScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVGZSZXN1bHRTcGVjUmVmZXJlbmNlKG9iajogVGZSZXN1bHRTcGVjUmVmZXJlbmNlIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVmS2luZCc6IG9iai5yZWZLaW5kLFxuICAgICdyZWZOYW1lJzogb2JqLnJlZk5hbWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbiJdfQ==
|
|
230087
230107
|
|
|
230088
230108
|
/***/ }),
|
|
230089
230109
|
|
|
@@ -231085,6 +231105,7 @@ class GithubRepositoryChart extends base_1.BaseGithubChart {
|
|
|
231085
231105
|
visibility: claim.providers.github.visibility,
|
|
231086
231106
|
defaultBranch: (_j = (_h = claim.providers.github) === null || _h === void 0 ? void 0 : _h.branchStrategy) === null || _j === void 0 ? void 0 : _j.defaultBranch,
|
|
231087
231107
|
codeowners: (0, repositoryClaimUtils_1.createCodeOwnersData)(claim),
|
|
231108
|
+
additionalBranches: claim.providers.github.additionalBranches || [],
|
|
231088
231109
|
},
|
|
231089
231110
|
actions,
|
|
231090
231111
|
permissions: this.createPermissions(claim),
|
|
@@ -231164,7 +231185,7 @@ class GithubRepositoryChart extends base_1.BaseGithubChart {
|
|
|
231164
231185
|
}
|
|
231165
231186
|
}
|
|
231166
231187
|
exports.GithubRepositoryChart = GithubRepositoryChart;
|
|
231167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3NpdG9yeUNoYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NoYXJ0cy9naXRodWIvcmVwb3NpdG9yeUNoYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLHlEQUFzRDtBQUN0RCwyRUFLMEM7QUFDMUMsb0VBR3lDO0FBSXpDLG9FQUFvQztBQUNwQyxpQ0FBeUM7QUFFekMsTUFBYSxxQkFBc0IsU0FBUSxzQkFBZTtJQUN4RCxRQUFROztRQUNOLE1BQU0sS0FBSyxHQUEyQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELE1BQU0sWUFBWSxHQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFbkQsTUFBTSxPQUFPLEdBQUc7WUFDZCxJQUFJLEVBQUU7Z0JBQ0osVUFBVSxFQUFFLE1BQUEsTUFBQSxNQUFBLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSwwQ0FBRSxPQUFPLDBDQUFFLElBQUksMENBQUUsVUFBVTtnQkFDN0QsZ0JBQWdCLEVBQ2QsTUFBQSxNQUFBLE1BQUEsTUFBQSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sMENBQUUsT0FBTywwQ0FBRSxJQUFJLDBDQUFFLGdCQUFnQixtQ0FBSSxFQUFFO2FBQ2hFO1NBQ0YsQ0FBQztRQUVGLElBQUksVUFBVSxHQUEyRDtZQUN2RSxRQUFRLEVBQUU7Z0JBQ1IsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUk7Z0JBQ2pDLFdBQVcsRUFBRTtvQkFDWCxDQUFDLHdCQUFNLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFDeEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUk7aUJBQzdDO2FBQ0Y7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osR0FBRyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFB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QUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFOUQsSUFBSSxLQUFLLENBQUMsYUFBYTtZQUNyQixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUEsMENBQW1CLEVBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRXRFLElBQUksS0FBSyxDQUFDLFlBQVk7WUFDcEIsS0FBSyxNQUFNLFVBQVUsSUFBSSxLQUFLLENBQUMsWUFBWTtnQkFDekMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFBLDBDQUFtQixFQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBRWxFLFFBQVEsY0FBYyxFQUFFO1lBQ3RCLEtBQUssTUFBTTtnQkFDVCxXQUFXLENBQUMsSUFBSSxDQUNkLElBQUEsMENBQW1CLEVBQ2pCLFNBQVMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLEVBQ3pDLE1BQU0sQ0FDUCxDQUNGLENBQUM7Z0JBQ0YsTUFBTTtZQUNSLEtBQUssWUFBWTtnQkFDZixXQUFXLENBQUMsSUFBSSxDQUNkLElBQUEsMENBQW1CLEVBQ2pCLFNBQVMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLEVBQ3pDLFVBQVUsQ0FDWCxDQUNGLENBQUM7Z0JBQ0YsTUFBTTtTQUNUO1FBRUQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVc7UUFPVCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BDLENBQUM7Q0FDRjtBQTVMRCxzREE0TEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcGlPYmplY3QsIEdyb3VwVmVyc2lvbktpbmQgfSBmcm9tICdjZGs4cyc7XG5pbXBvcnQgeyBGZWF0dXJlUmVwb0NoYXJ0IH0gZnJvbSAnLi9mZWF0dXJlUmVwb0NoYXJ0JztcbmltcG9ydCB7XG4gIFBlcm1pc3Npb24sXG4gIENvbGxhYm9yYXRvclBlcm1pc3Npb24sXG4gIGNyZWF0ZUNvZGVPd25lcnNEYXRhLFxuICBjcmVhdGVQZXJtaXNzaW9uRm9yLFxufSBmcm9tICcuLi8uLi91dGlscy9yZXBvc2l0b3J5Q2xhaW1VdGlscyc7XG5pbXBvcnQge1xuICBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeSxcbiAgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlQcm9wcyxcbn0gZnJvbSAnLi4vLi4vLi4vaW1wb3J0cy9maXJlc3RhcnRyLmRldic7XG5pbXBvcnQgeyBJR2l0aHViUmVwb3NpdG9yeUNsYWltIH0gZnJvbSAnLi4vLi4vY2xhaW1zL2dpdGh1Yi9yZXBvc2l0b3J5JztcbmltcG9ydCB7IElHaXRodWJSZXBvc2l0b3J5RmVhdHVyZUNsYWltIH0gZnJvbSAnLi4vLi4vY2xhaW1zL2dpdGh1Yi9yZXBvc2l0b3J5RmVhdHVyZSc7XG5pbXBvcnQgeyBJVW5pdGlhbGl6ZWRTdGF0ZUtleSB9IGZyb20gJy4uLy4uL2NsYWltcy9iYXNlJztcbmltcG9ydCBjb21tb24gZnJvbSAnY2F0YWxvZ19jb21tb24nO1xuaW1wb3J0IHsgQmFzZUdpdGh1YkNoYXJ0IH0gZnJvbSAnLi9iYXNlJztcblxuZXhwb3J0IGNsYXNzIEdpdGh1YlJlcG9zaXRvcnlDaGFydCBleHRlbmRzIEJhc2VHaXRodWJDaGFydCB7XG4gIHRlbXBsYXRlKCk6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5UHJvcHMgfCBJVW5pdGlhbGl6ZWRTdGF0ZUtleSB7XG4gICAgY29uc3QgY2xhaW06IElHaXRodWJSZXBvc2l0b3J5Q2xhaW0gPSB0aGlzLmdldCgnY2xhaW0nKTtcbiAgICBjb25zdCBmaXJlc3RhcnRySWQ6IGFueSA9IHRoaXMuZ2V0KCdmaXJlc3RhcnRySWQnKTtcblxuICAgIGNvbnN0IGFjdGlvbnMgPSB7XG4gICAgICBvaWRjOiB7XG4gICAgICAgIHVzZURlZmF1bHQ6IGNsYWltLnByb3ZpZGVycy5naXRodWI/LmFjdGlvbnM/Lm9pZGM/LnVzZURlZmF1bHQsXG4gICAgICAgIGluY2x1ZGVDbGFpbUtleXM6XG4gICAgICAgICAgY2xhaW0ucHJvdmlkZXJzLmdpdGh1Yj8uYWN0aW9ucz8ub2lkYz8uaW5jbHVkZUNsYWltS2V5cyA/PyBbXSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGxldCBjclRlbXBsYXRlOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVByb3BzIHwgSVVuaXRpYWxpemVkU3RhdGVLZXkgPSB7XG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBuYW1lOiBjbGFpbS5wcm92aWRlcnMuZ2l0aHViLm5hbWUsXG4gICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgW2NvbW1vbi5nZW5lcmljLmdldEZpcmVzdGFydHJBbm5vdGF0aW9uKCdicmFuY2hTdHJhdGVneScpXTpcbiAgICAgICAgICAgIGNsYWltLnByb3ZpZGVycy5naXRodWIuYnJhbmNoU3RyYXRlZ3kubmFtZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzcGVjOiB7XG4gICAgICAgIG9yZzogY2xhaW0ucHJvdmlkZXJzLmdpdGh1Yi5vcmcsXG4gICAgICAgIGZpcmVzdGFydHI6IHtcbiAgICAgICAgICB0ZlN0YXRlS2V5OiBmaXJlc3RhcnRySWQgfHwgJycsXG4gICAgICAgICAgdGVjaG5vbG9neTogY2xhaW0ucHJvdmlkZXJzLmdpdGh1Yi50ZWNobm9sb2d5LFxuICAgICAgICB9LFxuICAgICAgICByZXBvOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246IGNsYWltLnByb3ZpZGVycy5naXRodWIuZGVzY3JpcHRpb24sXG4gICAgICAgICAgYWxsb3dNZXJnZUNvbW1pdDogY2xhaW0ucHJvdmlkZXJzLmdpdGh1Yi5hbGxvd01lcmdlQ29tbWl0LFxuICAgICAgICAgIGFsbG93U3F1YXNoTWVyZ2U6IGNsYWltLnByb3ZpZGVycy5naXRodWIuYWxsb3dTcXVhc2hNZXJnZSxcbiAgICAgICAgICBhbGxvd1JlYmFzZU1lcmdlOiBjbGFpbS5wcm92aWRlcnMuZ2l0aHViLmFsbG93UmViYXNlTWVyZ2UsXG4gICAgICAgICAgYWxsb3dBdXRvTWVyZ2U6IGNsYWltLnByb3ZpZGVycy5naXRodWIuYWxsb3dBdXRvTWVyZ2UsXG4gICAgICAgICAgZGVsZXRlQnJhbmNoT25NZXJnZTogY2xhaW0ucHJvdmlkZXJzLmdpdGh1Yi5kZWxldGVCcmFuY2hPbk1lcmdlLFxuICAgICAgICAgIGF1dG9Jbml0OiBjbGFpbS5wcm92aWRlcnMuZ2l0aHViLmF1dG9Jbml0LFxuICAgICAgICAgIGFyY2hpdmVPbkRlc3Ryb3k6IGNsYWltLnByb3ZpZGVycy5naXRodWIuYXJjaGl2ZU9uRGVzdHJveSxcbiAgICAgICAgICBhbGxvd1VwZGF0ZUJyYW5jaDogY2xhaW0ucHJvdmlkZXJzLmdpdGh1Yi5hbGxvd1VwZGF0ZUJyYW5jaCxcbiAgICAgICAgICBoYXNJc3N1ZXM6IGNsYWltLnByb3ZpZGVycy5naXRodWIuaGFzSXNzdWVzLFxuICAgICAgICAgIHZpc2liaWxpdHk6IGNsYWltLnByb3ZpZGVycy5naXRodWIudmlzaWJpbGl0eSxcbiAgICAgICAgICBkZWZhdWx0QnJhbmNoOiBjbGFpbS5wcm92aWRlcnMuZ2l0aHViPy5icmFuY2hTdHJhdGVneT8uZGVmYXVsdEJyYW5jaCxcbiAgICAgICAgICBjb2Rlb3duZXJzOiBjcmVhdGVDb2RlT3duZXJzRGF0YShjbGFpbSksXG4gICAgICAgIH0sXG4gICAgICAgIGFjdGlvbnMsXG4gICAgICAgIHBlcm1pc3Npb25zOiB0aGlzLmNyZWF0ZVBlcm1pc3Npb25zKGNsYWltKSxcbiAgICAgICAgcGFnZXM6IGNsYWltLnByb3ZpZGVycy5naXRodWIucGFnZXMsXG4gICAgICAgIGJyYW5jaFByb3RlY3Rpb25zOiBbXSxcbiAgICAgICAgd3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWY6IHtcbiAgICAgICAgICBuYW1lOiBgZmlyZXN0YXJ0cmdpdGh1YnJlcG9zaXRvcnktJHtjbGFpbS5uYW1lfS1vdXRwdXRzYC50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICAgIHsga2V5OiAnaWQnIH0sXG4gICAgICAgICAgICB7IGtleTogJ25vZGVJZCcgfSxcbiAgICAgICAgICAgIHsga2V5OiAnZnVsbE5hbWUnIH0sXG4gICAgICAgICAgICB7IGtleTogJ2h0bWxVcmwnIH0sXG4gICAgICAgICAgICB7IGtleTogJ3NzaENsb25lVXJsJyB9LFxuICAgICAgICAgICAgeyBrZXk6ICdwcmltYXJ5TGFuZ3VhZ2UnIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIC8vIFdlIGRvIHRoaXMgdG8gcmVtb3ZlIHVuZGVmaW5lZCB2YXJpYWJsZXMgZnJvbSB0aGUgdGVtcGxhdGVcbiAgICBjclRlbXBsYXRlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjclRlbXBsYXRlLCBudWxsLCAyKSk7XG5cbiAgICByZXR1cm4gY3JUZW1wbGF0ZTtcbiAgfVxuXG4gIGFzeW5jIHJlbmRlcigpIHtcbiAgICBhd2FpdCBzdXBlci5yZW5kZXIoKTtcblxuICAgIGF3YWl0IHRoaXMucG9zdFJlbmRlckZlYXR1cmVzKHRoaXMuZ2V0KCdyZW5kZXJlZC1jcicpKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ3ZrKCk6IEdyb3VwVmVyc2lvbktpbmQge1xuICAgIHJldHVybiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeS5HVks7XG4gIH1cblxuICBhc3luYyBwb3N0UmVuZGVyRmVhdHVyZXMoY3I6IGFueSkge1xuICAgIGNvbnN0IGZlYXR1cmVzUGF0Y2hlczogYW55W10gPSB0aGlzLmdldCgncGF0Y2hlcycpLmZpbHRlcigocGF0Y2g6IGFueSkgPT5cbiAgICAgIHBhdGNoLmlkZW50aWZ5KCkubWF0Y2goL15mZWF0dXJlXFwvLyksXG4gICAgKTtcblxuICAgIGNvbnN0IGZlYXR1cmVzOiB7XG4gICAgICBjbGFpbTogeyBraW5kOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9O1xuICAgICAgY2hhcnQ6IEFwaU9iamVjdDtcbiAgICB9W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgZmVhdHVyZVBhdGNoIG9mIGZlYXR1cmVzUGF0Y2hlcykge1xuICAgICAgY29uc3QgZmVhdHVyZUNsYWltOiBJR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVDbGFpbSA9XG4gICAgICAgIGF3YWl0IGZlYXR1cmVQYXRjaC5wb3N0KGNyKTtcblxuICAgICAgY29uc3QgcmVuZGVyZWRGZWF0dXJlID0gYXdhaXQgKFxuICAgICAgICBhd2FpdCBuZXcgRmVhdHVyZVJlcG9DaGFydChcbiAgICAgICAgICB0aGlzLFxuXG4gICAgICAgICAgZmVhdHVyZUNsYWltLm5hbWUsXG5cbiAgICAgICAgICBjci5zcGVjLmZpcmVzdGFydHIudGZTdGF0ZUtleSxcblxuICAgICAgICAgIGZlYXR1cmVDbGFpbSxcblxuICAgICAgICAgIFtdLFxuXG4gICAgICAgICAgY3IsXG4gICAgICAgICkucmVuZGVyKClcbiAgICAgICkucG9zdFJlbmRlcmVyKFtdKTtcblxuICAgICAgZmVhdHVyZXMucHVzaCh7XG4gICAgICAgIGNsYWltOiB7XG4gICAgICAgICAga2luZDogZmVhdHVyZUNsYWltLmtpbmQsXG5cbiAgICAgICAgICBuYW1lOiBmZWF0dXJlQ2xhaW0ubmFtZSxcbiAgICAgICAgfSxcblxuICAgICAgICBjaGFydDogcmVuZGVyZWRGZWF0dXJlLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXQoXG4gICAgICAnZmVhdHVyZXMnLFxuXG4gICAgICBmZWF0dXJlcyxcbiAgICApO1xuICB9XG5cbiAgaW5zdGFuY2VBcGlPYmplY3QodGVtcGxhdGU6IGFueSk6IEFwaU9iamVjdCB7XG4gICAgcmV0dXJuIG5ldyBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeShcbiAgICAgIHRoaXMsXG4gICAgICB0ZW1wbGF0ZS5tZXRhZGF0YS5uYW1lLFxuICAgICAgdGVtcGxhdGUsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhpcyBtZXRob2QgY3JlYXRlcyB0aGUgcGVybWlzc2lvbnMgZGF0YSBmb3IgdGhlIHJlcG9zaXRvcnlcbiAgICogQHBhcmFtIGNsYWltXG4gICAqIEByZXR1cm5zIFBlcm1pc3Npb25bXVxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVQZXJtaXNzaW9ucyhcbiAgICBjbGFpbTogYW55LFxuICApOiAoUGVybWlzc2lvbiB8IENvbGxhYm9yYXRvclBlcm1pc3Npb24pW10ge1xuICAgIGNvbnN0IHBlcm1pc3Npb25zOiAoUGVybWlzc2lvbiB8IENvbGxhYm9yYXRvclBlcm1pc3Npb24pW10gPSBbXTtcblxuICAgIGNvbnN0IG9yZ1Blcm1pc3Npb25zOiAnbm9uZScgfCAndmlldycgfCAnY29udHJpYnV0ZScgPVxuICAgICAgY2xhaW0ucHJvdmlkZXJzLmdpdGh1Yi5vcmdQZXJtaXNzaW9ucztcblxuICAgIGlmIChjbGFpbS5vd25lcilcbiAgICAgIHBlcm1pc3Npb25zLnB1c2goY3JlYXRlUGVybWlzc2lvbkZvcihjbGFpbS5vd25lciwgJ2FkbWluJykpO1xuXG4gICAgaWYgKGNsYWltLnBsYXRmb3JtT3duZXIpXG4gICAgICBwZXJtaXNzaW9ucy5wdXNoKGNyZWF0ZVBlcm1pc3Npb25Gb3IoY2xhaW0ucGxhdGZvcm1Pd25lciwgJ2FkbWluJykpO1xuXG4gICAgaWYgKGNsYWltLm1haW50YWluZWRCeSlcbiAgICAgIGZvciAoY29uc3QgbWFpbnRhaW5lciBvZiBjbGFpbS5tYWludGFpbmVkQnkpXG4gICAgICAgIHBlcm1pc3Npb25zLnB1c2goY3JlYXRlUGVybWlzc2lvbkZvcihtYWludGFpbmVyLCAnbWFpbnRhaW4nKSk7XG5cbiAgICBzd2l0Y2ggKG9yZ1Blcm1pc3Npb25zKSB7XG4gICAgICBjYXNlICd2aWV3JzpcbiAgICAgICAgcGVybWlzc2lvbnMucHVzaChcbiAgICAgICAgICBjcmVhdGVQZXJtaXNzaW9uRm9yKFxuICAgICAgICAgICAgYGdyb3VwOiR7Y2xhaW0ucHJvdmlkZXJzLmdpdGh1Yi5vcmd9LWFsbGAsXG4gICAgICAgICAgICAncHVsbCcsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjb250cmlidXRlJzpcbiAgICAgICAgcGVybWlzc2lvbnMucHVzaChcbiAgICAgICAgICBjcmVhdGVQZXJtaXNzaW9uRm9yKFxuICAgICAgICAgICAgYGdyb3VwOiR7Y2xhaW0ucHJvdmlkZXJzLmdpdGh1Yi5vcmd9LWFsbGAsXG4gICAgICAgICAgICAnbWFpbnRhaW4nLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBwZXJtaXNzaW9ucztcbiAgfVxuXG4gIGV4dHJhQ2hhcnRzKCk6IHtcbiAgICBjbGFpbToge1xuICAgICAga2luZDogc3RyaW5nO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgIH07XG4gICAgY2hhcnQ6IEFwaU9iamVjdDtcbiAgfVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoJ2ZlYXR1cmVzJykgfHwgW107XG4gIH1cbn1cbiJdfQ==
|
|
231188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3NpdG9yeUNoYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NoYXJ0cy9naXRodWIvcmVwb3NpdG9yeUNoYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLHlEQUFzRDtBQUN0RCwyRUFLMEM7QUFDMUMsb0VBR3lDO0FBSXpDLG9FQUFvQztBQUNwQyxpQ0FBeUM7QUFFekMsTUFBYSxxQkFBc0IsU0FBUSxzQkFBZTtJQUN4RCxRQUFROztRQUNOLE1BQU0sS0FBSyxHQUEyQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELE1BQU0sWUFBWSxHQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFbkQsTUFBTSxPQUFPLEdBQUc7WUFDZCxJQUFJLEVBQUU7Z0JBQ0osVUFBVSxFQUFFLE1BQUEsTUFBQSxNQUFBLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSwwQ0FBRSxPQUFPLDBDQUFFLElBQUksMENBQUUsVUFBVTtnQkFDN0QsZ0JBQWdCLEVBQ2QsTUFBQSxNQUFBLE1BQUEsTUFBQSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sMENBQUUsT0FBTywwQ0FBRSxJQUFJLDBDQUFFLGdCQUFnQixtQ0FBSSxFQUFFO2FBQ2hFO1NBQ0YsQ0FBQztRQUVGLElBQUksVUFBVSxHQUEyRDtZQUN2RSxRQUFRLEVBQUU7Z0JBQ1IsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUk7Z0JBQ2pDLFdBQVcsRUFBRTtvQkFDWCxDQUFDLHdCQUFNLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFDeEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUk7aUJBQzdDO2FBQ0Y7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osR0FBRyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFB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eEMsSUFBSSxLQUFLLENBQUMsS0FBSztZQUNiLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBQSwwQ0FBbUIsRUFBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFOUQsSUFBSSxLQUFLLENBQUMsYUFBYTtZQUNyQixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUEsMENBQW1CLEVBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRXRFLElBQUksS0FBSyxDQUFDLFlBQVk7WUFDcEIsS0FBSyxNQUFNLFVBQVUsSUFBSSxLQUFLLENBQUMsWUFBWTtnQkFDekMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFBLDBDQUFtQixFQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBRWxFLFFBQVEsY0FBYyxFQUFFO1lBQ3RCLEtBQUssTUFBTTtnQkFDVCxXQUFXLENBQUMsSUFBSSxDQUNkLElBQUEsMENBQW1CLEVBQ2pCLFNBQVMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLEVBQ3pDLE1BQU0sQ0FDUCxDQUNGLENBQUM7Z0JBQ0YsTUFBTTtZQUNSLEtBQUssWUFBWTtnQkFDZixXQUFXLENBQUMsSUFBSSxDQUNkLElBQUEsMENBQW1CLEVBQ2pCLFNBQVMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLEVBQ3pDLFVBQVUsQ0FDWCxDQUNGLENBQUM7Z0JBQ0YsTUFBTTtTQUNUO1FBRUQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVc7UUFPVCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BDLENBQUM7Q0FDRjtBQTdMRCxzREE2TEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcGlPYmplY3QsIEdyb3VwVmVyc2lvbktpbmQgfSBmcm9tICdjZGs4cyc7XG5pbXBvcnQgeyBGZWF0dXJlUmVwb0NoYXJ0IH0gZnJvbSAnLi9mZWF0dXJlUmVwb0NoYXJ0JztcbmltcG9ydCB7XG4gIFBlcm1pc3Npb24sXG4gIENvbGxhYm9yYXRvclBlcm1pc3Npb24sXG4gIGNyZWF0ZUNvZGVPd25lcnNEYXRhLFxuICBjcmVhdGVQZXJtaXNzaW9uRm9yLFxufSBmcm9tICcuLi8uLi91dGlscy9yZXBvc2l0b3J5Q2xhaW1VdGlscyc7XG5pbXBvcnQge1xuICBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeSxcbiAgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlQcm9wcyxcbn0gZnJvbSAnLi4vLi4vLi4vaW1wb3J0cy9maXJlc3RhcnRyLmRldic7XG5pbXBvcnQgeyBJR2l0aHViUmVwb3NpdG9yeUNsYWltIH0gZnJvbSAnLi4vLi4vY2xhaW1zL2dpdGh1Yi9yZXBvc2l0b3J5JztcbmltcG9ydCB7IElHaXRodWJSZXBvc2l0b3J5RmVhdHVyZUNsYWltIH0gZnJvbSAnLi4vLi4vY2xhaW1zL2dpdGh1Yi9yZXBvc2l0b3J5RmVhdHVyZSc7XG5pbXBvcnQgeyBJVW5pdGlhbGl6ZWRTdGF0ZUtleSB9IGZyb20gJy4uLy4uL2NsYWltcy9iYXNlJztcbmltcG9ydCBjb21tb24gZnJvbSAnY2F0YWxvZ19jb21tb24nO1xuaW1wb3J0IHsgQmFzZUdpdGh1YkNoYXJ0IH0gZnJvbSAnLi9iYXNlJztcblxuZXhwb3J0IGNsYXNzIEdpdGh1YlJlcG9zaXRvcnlDaGFydCBleHRlbmRzIEJhc2VHaXRodWJDaGFydCB7XG4gIHRlbXBsYXRlKCk6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5UHJvcHMgfCBJVW5pdGlhbGl6ZWRTdGF0ZUtleSB7XG4gICAgY29uc3QgY2xhaW06IElHaXRodWJSZXBvc2l0b3J5Q2xhaW0gPSB0aGlzLmdldCgnY2xhaW0nKTtcbiAgICBjb25zdCBmaXJlc3RhcnRySWQ6IGFueSA9IHRoaXMuZ2V0KCdmaXJlc3RhcnRySWQnKTtcblxuICAgIGNvbnN0IGFjdGlvbnMgPSB7XG4gICAgICBvaWRjOiB7XG4gICAgICAgIHVzZURlZmF1bHQ6IGNsYWltLnByb3ZpZGVycy5naXRodWI/LmFjdGlvbnM/Lm9pZGM/LnVzZURlZmF1bHQsXG4gICAgICAgIGluY2x1ZGVDbGFpbUtleXM6XG4gICAgICAgICAgY2xhaW0ucHJvdmlkZXJzLmdpdGh1Yj8uYWN0aW9ucz8ub2lkYz8uaW5jbHVkZUNsYWltS2V5cyA/PyBbXSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGxldCBjclRlbXBsYXRlOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVByb3BzIHwgSVVuaXRpYWxpemVkU3RhdGVLZXkgPSB7XG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBuYW1lOiBjbGFpbS5wcm92aWRlcnMuZ2l0aHViLm5hbWUsXG4gICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgW2NvbW1vbi5nZW5lcmljLmdldEZpcmVzdGFydHJBbm5vdGF0aW9uKCdicmFuY2hTdHJhdGVneScpXTpcbiAgICAgICAgICAgIGNsYWltLnByb3ZpZGVycy5naXRodWIuYnJhbmNoU3RyYXRlZ3kubmFtZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzcGVjOiB7XG4gICAgICAgIG9yZzogY2xhaW0ucHJvdmlkZXJzLmdpdGh1Yi5vcmcsXG4gICAgICAgIGZpcmVzdGFydHI6IHtcbiAgICAgICAgICB0ZlN0YXRlS2V5OiBmaXJlc3RhcnRySWQgfHwgJycsXG4gICAgICAgICAgdGVjaG5vbG9neTogY2xhaW0ucHJvdmlkZXJzLmdpdGh1Yi50ZWNobm9sb2d5LFxuICAgICAgICB9LFxuICAgICAgICByZXBvOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246IGNsYWltLnByb3ZpZGVycy5naXRodWIuZGVzY3JpcHRpb24sXG4gICAgICAgICAgYWxsb3dNZXJnZUNvbW1pdDogY2xhaW0ucHJvdmlkZXJzLmdpdGh1Yi5hbGxvd01lcmdlQ29tbWl0LFxuICAgICAgICAgIGFsbG93U3F1YXNoTWVyZ2U6IGNsYWltLnByb3ZpZGVycy5naXRodWIuYWxsb3dTcXVhc2hNZXJnZSxcbiAgICAgICAgICBhbGxvd1JlYmFzZU1lcmdlOiBjbGFpbS5wcm92aWRlcnMuZ2l0aHViLmFsbG93UmViYXNlTWVyZ2UsXG4gICAgICAgICAgYWxsb3dBdXRvTWVyZ2U6IGNsYWltLnByb3ZpZGVycy5naXRodWIuYWxsb3dBdXRvTWVyZ2UsXG4gICAgICAgICAgZGVsZXRlQnJhbmNoT25NZXJnZTogY2xhaW0ucHJvdmlkZXJzLmdpdGh1Yi5kZWxldGVCcmFuY2hPbk1lcmdlLFxuICAgICAgICAgIGF1dG9Jbml0OiBjbGFpbS5wcm92aWRlcnMuZ2l0aHViLmF1dG9Jbml0LFxuICAgICAgICAgIGFyY2hpdmVPbkRlc3Ryb3k6IGNsYWltLnByb3ZpZGVycy5naXRodWIuYXJjaGl2ZU9uRGVzdHJveSxcbiAgICAgICAgICBhbGxvd1VwZGF0ZUJyYW5jaDogY2xhaW0ucHJvdmlkZXJzLmdpdGh1Yi5hbGxvd1VwZGF0ZUJyYW5jaCxcbiAgICAgICAgICBoYXNJc3N1ZXM6IGNsYWltLnByb3ZpZGVycy5naXRodWIuaGFzSXNzdWVzLFxuICAgICAgICAgIHZpc2liaWxpdHk6IGNsYWltLnByb3ZpZGVycy5naXRodWIudmlzaWJpbGl0eSxcbiAgICAgICAgICBkZWZhdWx0QnJhbmNoOiBjbGFpbS5wcm92aWRlcnMuZ2l0aHViPy5icmFuY2hTdHJhdGVneT8uZGVmYXVsdEJyYW5jaCxcbiAgICAgICAgICBjb2Rlb3duZXJzOiBjcmVhdGVDb2RlT3duZXJzRGF0YShjbGFpbSksXG4gICAgICAgICAgYWRkaXRpb25hbEJyYW5jaGVzOiBjbGFpbS5wcm92aWRlcnMuZ2l0aHViLmFkZGl0aW9uYWxCcmFuY2hlcyB8fCBbXSxcbiAgICAgICAgfSxcbiAgICAgICAgYWN0aW9ucyxcbiAgICAgICAgcGVybWlzc2lvbnM6IHRoaXMuY3JlYXRlUGVybWlzc2lvbnMoY2xhaW0pLFxuICAgICAgICBwYWdlczogY2xhaW0ucHJvdmlkZXJzLmdpdGh1Yi5wYWdlcyxcbiAgICAgICAgYnJhbmNoUHJvdGVjdGlvbnM6IFtdLFxuICAgICAgICB3cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZjoge1xuICAgICAgICAgIG5hbWU6IGBmaXJlc3RhcnRyZ2l0aHVicmVwb3NpdG9yeS0ke2NsYWltLm5hbWV9LW91dHB1dHNgLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgICAgeyBrZXk6ICdpZCcgfSxcbiAgICAgICAgICAgIHsga2V5OiAnbm9kZUlkJyB9LFxuICAgICAgICAgICAgeyBrZXk6ICdmdWxsTmFtZScgfSxcbiAgICAgICAgICAgIHsga2V5OiAnaHRtbFVybCcgfSxcbiAgICAgICAgICAgIHsga2V5OiAnc3NoQ2xvbmVVcmwnIH0sXG4gICAgICAgICAgICB7IGtleTogJ3ByaW1hcnlMYW5ndWFnZScgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gV2UgZG8gdGhpcyB0byByZW1vdmUgdW5kZWZpbmVkIHZhcmlhYmxlcyBmcm9tIHRoZSB0ZW1wbGF0ZVxuICAgIGNyVGVtcGxhdGUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNyVGVtcGxhdGUsIG51bGwsIDIpKTtcblxuICAgIHJldHVybiBjclRlbXBsYXRlO1xuICB9XG5cbiAgYXN5bmMgcmVuZGVyKCkge1xuICAgIGF3YWl0IHN1cGVyLnJlbmRlcigpO1xuXG4gICAgYXdhaXQgdGhpcy5wb3N0UmVuZGVyRmVhdHVyZXModGhpcy5nZXQoJ3JlbmRlcmVkLWNyJykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBndmsoKTogR3JvdXBWZXJzaW9uS2luZCB7XG4gICAgcmV0dXJuIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5LkdWSztcbiAgfVxuXG4gIGFzeW5jIHBvc3RSZW5kZXJGZWF0dXJlcyhjcjogYW55KSB7XG4gICAgY29uc3QgZmVhdHVyZXNQYXRjaGVzOiBhbnlbXSA9IHRoaXMuZ2V0KCdwYXRjaGVzJykuZmlsdGVyKChwYXRjaDogYW55KSA9PlxuICAgICAgcGF0Y2guaWRlbnRpZnkoKS5tYXRjaCgvXmZlYXR1cmVcXC8vKSxcbiAgICApO1xuXG4gICAgY29uc3QgZmVhdHVyZXM6IHtcbiAgICAgIGNsYWltOiB7IGtpbmQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH07XG4gICAgICBjaGFydDogQXBpT2JqZWN0O1xuICAgIH1bXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBmZWF0dXJlUGF0Y2ggb2YgZmVhdHVyZXNQYXRjaGVzKSB7XG4gICAgICBjb25zdCBmZWF0dXJlQ2xhaW06IElHaXRodWJSZXBvc2l0b3J5RmVhdHVyZUNsYWltID1cbiAgICAgICAgYXdhaXQgZmVhdHVyZVBhdGNoLnBvc3QoY3IpO1xuXG4gICAgICBjb25zdCByZW5kZXJlZEZlYXR1cmUgPSBhd2FpdCAoXG4gICAgICAgIGF3YWl0IG5ldyBGZWF0dXJlUmVwb0NoYXJ0KFxuICAgICAgICAgIHRoaXMsXG5cbiAgICAgICAgICBmZWF0dXJlQ2xhaW0ubmFtZSxcblxuICAgICAgICAgIGNyLnNwZWMuZmlyZXN0YXJ0ci50ZlN0YXRlS2V5LFxuXG4gICAgICAgICAgZmVhdHVyZUNsYWltLFxuXG4gICAgICAgICAgW10sXG5cbiAgICAgICAgICBjcixcbiAgICAgICAgKS5yZW5kZXIoKVxuICAgICAgKS5wb3N0UmVuZGVyZXIoW10pO1xuXG4gICAgICBmZWF0dXJlcy5wdXNoKHtcbiAgICAgICAgY2xhaW06IHtcbiAgICAgICAgICBraW5kOiBmZWF0dXJlQ2xhaW0ua2luZCxcblxuICAgICAgICAgIG5hbWU6IGZlYXR1cmVDbGFpbS5uYW1lLFxuICAgICAgICB9LFxuXG4gICAgICAgIGNoYXJ0OiByZW5kZXJlZEZlYXR1cmUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnNldChcbiAgICAgICdmZWF0dXJlcycsXG5cbiAgICAgIGZlYXR1cmVzLFxuICAgICk7XG4gIH1cblxuICBpbnN0YW5jZUFwaU9iamVjdCh0ZW1wbGF0ZTogYW55KTogQXBpT2JqZWN0IHtcbiAgICByZXR1cm4gbmV3IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5KFxuICAgICAgdGhpcyxcbiAgICAgIHRlbXBsYXRlLm1ldGFkYXRhLm5hbWUsXG4gICAgICB0ZW1wbGF0ZSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGlzIG1ldGhvZCBjcmVhdGVzIHRoZSBwZXJtaXNzaW9ucyBkYXRhIGZvciB0aGUgcmVwb3NpdG9yeVxuICAgKiBAcGFyYW0gY2xhaW1cbiAgICogQHJldHVybnMgUGVybWlzc2lvbltdXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZVBlcm1pc3Npb25zKFxuICAgIGNsYWltOiBhbnksXG4gICk6IChQZXJtaXNzaW9uIHwgQ29sbGFib3JhdG9yUGVybWlzc2lvbilbXSB7XG4gICAgY29uc3QgcGVybWlzc2lvbnM6IChQZXJtaXNzaW9uIHwgQ29sbGFib3JhdG9yUGVybWlzc2lvbilbXSA9IFtdO1xuXG4gICAgY29uc3Qgb3JnUGVybWlzc2lvbnM6ICdub25lJyB8ICd2aWV3JyB8ICdjb250cmlidXRlJyA9XG4gICAgICBjbGFpbS5wcm92aWRlcnMuZ2l0aHViLm9yZ1Blcm1pc3Npb25zO1xuXG4gICAgaWYgKGNsYWltLm93bmVyKVxuICAgICAgcGVybWlzc2lvbnMucHVzaChjcmVhdGVQZXJtaXNzaW9uRm9yKGNsYWltLm93bmVyLCAnYWRtaW4nKSk7XG5cbiAgICBpZiAoY2xhaW0ucGxhdGZvcm1Pd25lcilcbiAgICAgIHBlcm1pc3Npb25zLnB1c2goY3JlYXRlUGVybWlzc2lvbkZvcihjbGFpbS5wbGF0Zm9ybU93bmVyLCAnYWRtaW4nKSk7XG5cbiAgICBpZiAoY2xhaW0ubWFpbnRhaW5lZEJ5KVxuICAgICAgZm9yIChjb25zdCBtYWludGFpbmVyIG9mIGNsYWltLm1haW50YWluZWRCeSlcbiAgICAgICAgcGVybWlzc2lvbnMucHVzaChjcmVhdGVQZXJtaXNzaW9uRm9yKG1haW50YWluZXIsICdtYWludGFpbicpKTtcblxuICAgIHN3aXRjaCAob3JnUGVybWlzc2lvbnMpIHtcbiAgICAgIGNhc2UgJ3ZpZXcnOlxuICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFxuICAgICAgICAgIGNyZWF0ZVBlcm1pc3Npb25Gb3IoXG4gICAgICAgICAgICBgZ3JvdXA6JHtjbGFpbS5wcm92aWRlcnMuZ2l0aHViLm9yZ30tYWxsYCxcbiAgICAgICAgICAgICdwdWxsJyxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NvbnRyaWJ1dGUnOlxuICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKFxuICAgICAgICAgIGNyZWF0ZVBlcm1pc3Npb25Gb3IoXG4gICAgICAgICAgICBgZ3JvdXA6JHtjbGFpbS5wcm92aWRlcnMuZ2l0aHViLm9yZ30tYWxsYCxcbiAgICAgICAgICAgICdtYWludGFpbicsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBlcm1pc3Npb25zO1xuICB9XG5cbiAgZXh0cmFDaGFydHMoKToge1xuICAgIGNsYWltOiB7XG4gICAgICBraW5kOiBzdHJpbmc7XG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgfTtcbiAgICBjaGFydDogQXBpT2JqZWN0O1xuICB9W10ge1xuICAgIHJldHVybiB0aGlzLmdldCgnZmVhdHVyZXMnKSB8fCBbXTtcbiAgfVxufVxuIl19
|
|
231168
231189
|
|
|
231169
231190
|
/***/ }),
|
|
231170
231191
|
|
|
@@ -244178,6 +244199,7 @@ const user_1 = __importDefault(__nccwpck_require__(52851));
|
|
|
244178
244199
|
const pull_request_1 = __importDefault(__nccwpck_require__(64670));
|
|
244179
244200
|
const auth_1 = __importDefault(__nccwpck_require__(7745));
|
|
244180
244201
|
const issues_1 = __importDefault(__nccwpck_require__(75934));
|
|
244202
|
+
const branches_1 = __importDefault(__nccwpck_require__(76954));
|
|
244181
244203
|
const auth_2 = __nccwpck_require__(7745);
|
|
244182
244204
|
exports["default"] = {
|
|
244183
244205
|
org: organization_1.default,
|
|
@@ -244190,6 +244212,7 @@ exports["default"] = {
|
|
|
244190
244212
|
auth: auth_1.default,
|
|
244191
244213
|
pulls: pull_request_1.default,
|
|
244192
244214
|
issues: issues_1.default,
|
|
244215
|
+
branches: branches_1.default,
|
|
244193
244216
|
};
|
|
244194
244217
|
|
|
244195
244218
|
|
|
@@ -244259,6 +244282,86 @@ exports.getOctokitForOrg = getOctokitForOrg;
|
|
|
244259
244282
|
exports["default"] = { getOctokitForOrg };
|
|
244260
244283
|
|
|
244261
244284
|
|
|
244285
|
+
/***/ }),
|
|
244286
|
+
|
|
244287
|
+
/***/ 76954:
|
|
244288
|
+
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
|
244289
|
+
|
|
244290
|
+
"use strict";
|
|
244291
|
+
|
|
244292
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
244293
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
244294
|
+
};
|
|
244295
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
244296
|
+
exports.createOrphanBranch = exports.createBranch = exports.getBranch = exports.listBranches = void 0;
|
|
244297
|
+
const auth_1 = __nccwpck_require__(7745);
|
|
244298
|
+
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
244299
|
+
const messageLog = (0, debug_1.default)('firestartr:github:branches');
|
|
244300
|
+
const SHA1_EMPTY_TREE = '4b825dc642cb6eb9a060e54bf8d69288fbee4904';
|
|
244301
|
+
async function listBranches(repo, owner = 'prefapp') {
|
|
244302
|
+
messageLog(`Getting branches for ${owner}/${repo}`);
|
|
244303
|
+
const octokit = await (0, auth_1.getOctokitForOrg)(owner);
|
|
244304
|
+
const response = await octokit.rest.repos.listBranches({
|
|
244305
|
+
owner,
|
|
244306
|
+
repo,
|
|
244307
|
+
per_page: 100,
|
|
244308
|
+
page: 0,
|
|
244309
|
+
});
|
|
244310
|
+
return response.data;
|
|
244311
|
+
}
|
|
244312
|
+
exports.listBranches = listBranches;
|
|
244313
|
+
async function getBranch(repo, branch, owner = 'prefapp') {
|
|
244314
|
+
messageLog(`Getting branch ${branch} for ${owner}/${repo}`);
|
|
244315
|
+
const octokit = await (0, auth_1.getOctokitForOrg)(owner);
|
|
244316
|
+
const response = await octokit.rest.repos.getBranch({
|
|
244317
|
+
owner,
|
|
244318
|
+
repo,
|
|
244319
|
+
branch,
|
|
244320
|
+
});
|
|
244321
|
+
return response.data;
|
|
244322
|
+
}
|
|
244323
|
+
exports.getBranch = getBranch;
|
|
244324
|
+
async function createBranch(repo, branch, sha, owner = 'prefapp') {
|
|
244325
|
+
messageLog(`Creating branch ${branch} for ${owner}/${repo}`);
|
|
244326
|
+
const octokit = await (0, auth_1.getOctokitForOrg)(owner);
|
|
244327
|
+
const response = await octokit.rest.git.createRef({
|
|
244328
|
+
owner,
|
|
244329
|
+
repo,
|
|
244330
|
+
ref: `refs/heads/${branch}`,
|
|
244331
|
+
sha,
|
|
244332
|
+
});
|
|
244333
|
+
return response.data;
|
|
244334
|
+
}
|
|
244335
|
+
exports.createBranch = createBranch;
|
|
244336
|
+
async function createOrphanBranch(repo, branch, owner = 'prefapp') {
|
|
244337
|
+
messageLog(`Creating orphan branch ${branch} for ${owner}/${repo}`);
|
|
244338
|
+
const octokit = await (0, auth_1.getOctokitForOrg)(owner);
|
|
244339
|
+
// Create a commit with an empty tree
|
|
244340
|
+
const { data: commit } = await octokit.request('POST /repos/{owner}/{repo}/git/commits', {
|
|
244341
|
+
owner,
|
|
244342
|
+
repo,
|
|
244343
|
+
message: `Inicializando rama huérfana ${branch}`,
|
|
244344
|
+
tree: SHA1_EMPTY_TREE,
|
|
244345
|
+
parents: [],
|
|
244346
|
+
});
|
|
244347
|
+
// Create a reference to the commit
|
|
244348
|
+
const response = await octokit.request('POST /repos/{owner}/{repo}/git/refs', {
|
|
244349
|
+
owner,
|
|
244350
|
+
repo,
|
|
244351
|
+
ref: `refs/heads/${branch}`,
|
|
244352
|
+
sha: commit.sha,
|
|
244353
|
+
});
|
|
244354
|
+
return response.data;
|
|
244355
|
+
}
|
|
244356
|
+
exports.createOrphanBranch = createOrphanBranch;
|
|
244357
|
+
exports["default"] = {
|
|
244358
|
+
listBranches,
|
|
244359
|
+
getBranch,
|
|
244360
|
+
createBranch,
|
|
244361
|
+
createOrphanBranch,
|
|
244362
|
+
};
|
|
244363
|
+
|
|
244364
|
+
|
|
244262
244365
|
/***/ }),
|
|
244263
244366
|
|
|
244264
244367
|
/***/ 75934:
|
|
@@ -251571,6 +251674,76 @@ class FirestartrGithubMembership extends resource_1.Resource {
|
|
|
251571
251674
|
exports.FirestartrGithubMembership = FirestartrGithubMembership;
|
|
251572
251675
|
|
|
251573
251676
|
|
|
251677
|
+
/***/ }),
|
|
251678
|
+
|
|
251679
|
+
/***/ 98864:
|
|
251680
|
+
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
|
251681
|
+
|
|
251682
|
+
"use strict";
|
|
251683
|
+
|
|
251684
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
251685
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
251686
|
+
};
|
|
251687
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
251688
|
+
exports.provisionAdditionalBranches = void 0;
|
|
251689
|
+
const github_1 = __importDefault(__nccwpck_require__(39759));
|
|
251690
|
+
// Main function to provision additional branches
|
|
251691
|
+
async function provisionAdditionalBranches(cr) {
|
|
251692
|
+
//Debug: Inspect the cr
|
|
251693
|
+
//console.log('Received CR in provisionAdditionalBranches:', JSON.stringify(cr, null, 2));
|
|
251694
|
+
// Verify that the cr and its properties exist
|
|
251695
|
+
if (!cr || !cr.spec || !cr.spec.repo) {
|
|
251696
|
+
console.log('Invalid cr object:', JSON.stringify(cr, null, 2));
|
|
251697
|
+
return;
|
|
251698
|
+
}
|
|
251699
|
+
// Obtain the additional branches from the repository configuration
|
|
251700
|
+
const branches = cr.spec.repo.additionalBranches;
|
|
251701
|
+
//console.log('Branches assigned:', JSON.stringify(branches, null, 2));
|
|
251702
|
+
if (!Array.isArray(branches)) {
|
|
251703
|
+
console.log('No additional branches found or branches is not an array');
|
|
251704
|
+
return;
|
|
251705
|
+
}
|
|
251706
|
+
const repoName = cr.metadata.annotations['firestartr.dev/external-name'];
|
|
251707
|
+
const org = cr.spec.org;
|
|
251708
|
+
// Process each branch individually
|
|
251709
|
+
for (const branch of branches) {
|
|
251710
|
+
//console.log('Processing branch:', JSON.stringify(branch, null, 2));
|
|
251711
|
+
try {
|
|
251712
|
+
// Try to obtain the branch
|
|
251713
|
+
await github_1.default.branches.getBranch(repoName, branch.name, org);
|
|
251714
|
+
// If not error is thrown, the branch already exists
|
|
251715
|
+
console.log(`Branch ${branch.name} already exists in ${org}/${repoName}, skipping...`);
|
|
251716
|
+
}
|
|
251717
|
+
catch (error) {
|
|
251718
|
+
// If error is a 404, we can create the branch
|
|
251719
|
+
if (error.status === 404) {
|
|
251720
|
+
if (branch.orphan) {
|
|
251721
|
+
await github_1.default.branches.createOrphanBranch(repoName, branch.name, org);
|
|
251722
|
+
console.log(`Created orphan branch ${branch.name} in ${org}/${repoName}`);
|
|
251723
|
+
}
|
|
251724
|
+
else {
|
|
251725
|
+
await provisionRegularBranch(repoName, branch.name, cr.spec.repo.defaultBranch, org);
|
|
251726
|
+
console.log(`Created regular branch ${branch.name} in ${org}/${repoName}`);
|
|
251727
|
+
}
|
|
251728
|
+
}
|
|
251729
|
+
else {
|
|
251730
|
+
// If error is not a 404, we throw it
|
|
251731
|
+
throw error;
|
|
251732
|
+
}
|
|
251733
|
+
}
|
|
251734
|
+
}
|
|
251735
|
+
}
|
|
251736
|
+
exports.provisionAdditionalBranches = provisionAdditionalBranches;
|
|
251737
|
+
// function to provision a regular branch
|
|
251738
|
+
async function provisionRegularBranch(repo, branchName, sourceBranch, org) {
|
|
251739
|
+
// Obtaining the sha of the source branch
|
|
251740
|
+
const sourceBranchData = await github_1.default.branches.getBranch(repo, sourceBranch, org);
|
|
251741
|
+
const sha = sourceBranchData.commit.sha;
|
|
251742
|
+
// Create the new branch
|
|
251743
|
+
await github_1.default.branches.createBranch(repo, branchName, sha, org);
|
|
251744
|
+
}
|
|
251745
|
+
|
|
251746
|
+
|
|
251574
251747
|
/***/ }),
|
|
251575
251748
|
|
|
251576
251749
|
/***/ 45567:
|
|
@@ -251585,6 +251758,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
251585
251758
|
exports.FirestartrGithubRepository = void 0;
|
|
251586
251759
|
const resource_1 = __nccwpck_require__(44317);
|
|
251587
251760
|
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
251761
|
+
const AdditionalBranchesHelper_1 = __nccwpck_require__(98864);
|
|
251588
251762
|
const log = (0, debug_1.default)('firestartr:provisioner:github_repository');
|
|
251589
251763
|
class FirestartrGithubRepository extends resource_1.Resource {
|
|
251590
251764
|
static kind() {
|
|
@@ -251611,6 +251785,27 @@ class FirestartrGithubRepository extends resource_1.Resource {
|
|
|
251611
251785
|
log('UNKNOWN');
|
|
251612
251786
|
}
|
|
251613
251787
|
}
|
|
251788
|
+
async postprocess() {
|
|
251789
|
+
const cr = this.get('main_artifact');
|
|
251790
|
+
switch (this.get('operation')) {
|
|
251791
|
+
case 'CREATE':
|
|
251792
|
+
case 'UPDATE':
|
|
251793
|
+
log('CREATE & UPDATE');
|
|
251794
|
+
await (0, AdditionalBranchesHelper_1.provisionAdditionalBranches)(cr);
|
|
251795
|
+
break;
|
|
251796
|
+
case 'DELETE':
|
|
251797
|
+
log('DELETED');
|
|
251798
|
+
break;
|
|
251799
|
+
case 'IMPORT':
|
|
251800
|
+
log('IMPORT');
|
|
251801
|
+
break;
|
|
251802
|
+
case 'IMPORT_SKIP_PLAN':
|
|
251803
|
+
log('IMPORT_SKIP_PLAN');
|
|
251804
|
+
break;
|
|
251805
|
+
default:
|
|
251806
|
+
log('UNKNOWN');
|
|
251807
|
+
}
|
|
251808
|
+
}
|
|
251614
251809
|
}
|
|
251615
251810
|
exports.FirestartrGithubRepository = FirestartrGithubRepository;
|
|
251616
251811
|
|
|
@@ -251692,6 +251887,7 @@ class Resource {
|
|
|
251692
251887
|
await this.preprocess();
|
|
251693
251888
|
await this.synth();
|
|
251694
251889
|
await this.runTerraform();
|
|
251890
|
+
await this.postprocess();
|
|
251695
251891
|
}
|
|
251696
251892
|
artifact() {
|
|
251697
251893
|
return this.get('main_artifact');
|
|
@@ -251729,6 +251925,7 @@ class Resource {
|
|
|
251729
251925
|
this.set('output', output);
|
|
251730
251926
|
}
|
|
251731
251927
|
async preprocess() { }
|
|
251928
|
+
async postprocess() { }
|
|
251732
251929
|
crs() { }
|
|
251733
251930
|
env() { }
|
|
251734
251931
|
set(k, v) {
|
|
@@ -283912,8 +284109,13 @@ const SafeEval = {
|
|
|
283912
284109
|
return ast.value;
|
|
283913
284110
|
},
|
|
283914
284111
|
evalMemberExpression(ast, subs) {
|
|
283915
|
-
const prop =
|
|
283916
|
-
:
|
|
284112
|
+
const prop = String(
|
|
284113
|
+
// NOTE: `String(value)` throws error when
|
|
284114
|
+
// value has overwritten the toString method to return non-string
|
|
284115
|
+
// i.e. `value = {toString: () => []}`
|
|
284116
|
+
ast.computed ? SafeEval.evalAst(ast.property) // `object[property]`
|
|
284117
|
+
: ast.property.name // `object.property` property is Identifier
|
|
284118
|
+
);
|
|
283917
284119
|
const obj = SafeEval.evalAst(ast.object, subs);
|
|
283918
284120
|
if (obj === undefined || obj === null) {
|
|
283919
284121
|
throw TypeError(`Cannot read properties of ${obj} (reading '${prop}')`);
|
|
@@ -284690,7 +284892,7 @@ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{val
|
|
|
284690
284892
|
|
|
284691
284893
|
/***/ }),
|
|
284692
284894
|
|
|
284693
|
-
/***/
|
|
284895
|
+
/***/ 91188:
|
|
284694
284896
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => {
|
|
284695
284897
|
|
|
284696
284898
|
"use strict";
|
|
@@ -284730,8 +284932,10 @@ __nccwpck_require__.d(__webpack_exports__, {
|
|
|
284730
284932
|
"genericGrantRequest": () => (/* binding */ genericGrantRequest),
|
|
284731
284933
|
"getDPoPHandle": () => (/* binding */ getDPoPHandle),
|
|
284732
284934
|
"getJwksCache": () => (/* binding */ getJwksCache),
|
|
284935
|
+
"initiateBackchannelAuthentication": () => (/* binding */ initiateBackchannelAuthentication),
|
|
284733
284936
|
"initiateDeviceAuthorization": () => (/* binding */ initiateDeviceAuthorization),
|
|
284734
284937
|
"modifyAssertion": () => (/* binding */ build_modifyAssertion),
|
|
284938
|
+
"pollBackchannelAuthenticationGrant": () => (/* binding */ pollBackchannelAuthenticationGrant),
|
|
284735
284939
|
"pollDeviceAuthorizationGrant": () => (/* binding */ pollDeviceAuthorizationGrant),
|
|
284736
284940
|
"randomDPoPKeyPair": () => (/* binding */ randomDPoPKeyPair),
|
|
284737
284941
|
"randomNonce": () => (/* binding */ randomNonce),
|
|
@@ -284751,7 +284955,7 @@ __nccwpck_require__.d(__webpack_exports__, {
|
|
|
284751
284955
|
let USER_AGENT;
|
|
284752
284956
|
if (typeof navigator === 'undefined' || !navigator.userAgent?.startsWith?.('Mozilla/5.0 ')) {
|
|
284753
284957
|
const NAME = 'oauth4webapi';
|
|
284754
|
-
const VERSION = 'v3.1
|
|
284958
|
+
const VERSION = 'v3.3.1';
|
|
284755
284959
|
USER_AGENT = `${NAME}/${VERSION}`;
|
|
284756
284960
|
}
|
|
284757
284961
|
function looseInstanceOf(input, expected) {
|
|
@@ -284780,11 +284984,11 @@ const customFetch = Symbol();
|
|
|
284780
284984
|
const modifyAssertion = Symbol();
|
|
284781
284985
|
const jweDecrypt = Symbol();
|
|
284782
284986
|
const build_jwksCache = Symbol();
|
|
284783
|
-
const
|
|
284987
|
+
const build_encoder = new TextEncoder();
|
|
284784
284988
|
const decoder = new TextDecoder();
|
|
284785
284989
|
function buf(input) {
|
|
284786
284990
|
if (typeof input === 'string') {
|
|
284787
|
-
return
|
|
284991
|
+
return build_encoder.encode(input);
|
|
284788
284992
|
}
|
|
284789
284993
|
return decoder.decode(input);
|
|
284790
284994
|
}
|
|
@@ -284812,7 +285016,7 @@ function decodeBase64Url(input) {
|
|
|
284812
285016
|
throw CodedTypeError('The input to be decoded is not correctly encoded.', ERR_INVALID_ARG_VALUE, cause);
|
|
284813
285017
|
}
|
|
284814
285018
|
}
|
|
284815
|
-
function
|
|
285019
|
+
function build_b64u(input) {
|
|
284816
285020
|
if (typeof input === 'string') {
|
|
284817
285021
|
return decodeBase64Url(input);
|
|
284818
285022
|
}
|
|
@@ -284971,12 +285175,12 @@ async function processDiscoveryResponse(expectedIssuerIdentifier, response) {
|
|
|
284971
285175
|
throw OPE('"response" is not a conform Authorization Server Metadata response (unexpected HTTP status code)', RESPONSE_IS_NOT_CONFORM, response);
|
|
284972
285176
|
}
|
|
284973
285177
|
assertReadableResponse(response);
|
|
284974
|
-
assertApplicationJson(response);
|
|
284975
285178
|
let json;
|
|
284976
285179
|
try {
|
|
284977
285180
|
json = await response.json();
|
|
284978
285181
|
}
|
|
284979
285182
|
catch (cause) {
|
|
285183
|
+
assertApplicationJson(response);
|
|
284980
285184
|
throw OPE('failed to parse "response" body as JSON', PARSE_ERROR, cause);
|
|
284981
285185
|
}
|
|
284982
285186
|
if (!isJsonObject(json)) {
|
|
@@ -285017,7 +285221,7 @@ function assertContentType(response, contentType) {
|
|
|
285017
285221
|
}
|
|
285018
285222
|
}
|
|
285019
285223
|
function randomBytes() {
|
|
285020
|
-
return
|
|
285224
|
+
return build_b64u(crypto.getRandomValues(new Uint8Array(32)));
|
|
285021
285225
|
}
|
|
285022
285226
|
function generateRandomCodeVerifier() {
|
|
285023
285227
|
return randomBytes();
|
|
@@ -285030,7 +285234,7 @@ function generateRandomNonce() {
|
|
|
285030
285234
|
}
|
|
285031
285235
|
async function calculatePKCECodeChallenge(codeVerifier) {
|
|
285032
285236
|
assertString(codeVerifier, 'codeVerifier');
|
|
285033
|
-
return
|
|
285237
|
+
return build_b64u(await crypto.subtle.digest('SHA-256', buf(codeVerifier)));
|
|
285034
285238
|
}
|
|
285035
285239
|
function getKeyAndKid(input) {
|
|
285036
285240
|
if (input instanceof CryptoKey) {
|
|
@@ -285196,11 +285400,11 @@ function ClientSecretJwt(clientSecret, options) {
|
|
|
285196
285400
|
const header = { alg: 'HS256' };
|
|
285197
285401
|
const payload = clientAssertionPayload(as, client);
|
|
285198
285402
|
modify?.(header, payload);
|
|
285199
|
-
const data = `${
|
|
285403
|
+
const data = `${build_b64u(buf(JSON.stringify(header)))}.${build_b64u(buf(JSON.stringify(payload)))}`;
|
|
285200
285404
|
const hmac = await crypto.subtle.sign(key.algorithm, key, buf(data));
|
|
285201
285405
|
body.set('client_id', client.client_id);
|
|
285202
285406
|
body.set('client_assertion_type', 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer');
|
|
285203
|
-
body.set('client_assertion', `${data}.${
|
|
285407
|
+
body.set('client_assertion', `${data}.${build_b64u(new Uint8Array(hmac))}`);
|
|
285204
285408
|
};
|
|
285205
285409
|
}
|
|
285206
285410
|
function None() {
|
|
@@ -285215,8 +285419,8 @@ async function signJwt(header, payload, key) {
|
|
|
285215
285419
|
if (!key.usages.includes('sign')) {
|
|
285216
285420
|
throw CodedTypeError('CryptoKey instances used for signing assertions must include "sign" in their "usages"', ERR_INVALID_ARG_VALUE);
|
|
285217
285421
|
}
|
|
285218
|
-
const input = `${
|
|
285219
|
-
const signature =
|
|
285422
|
+
const input = `${build_b64u(buf(JSON.stringify(header)))}.${build_b64u(buf(JSON.stringify(payload)))}`;
|
|
285423
|
+
const signature = build_b64u(await crypto.subtle.sign(keyToSubtle(key), key, buf(input)));
|
|
285220
285424
|
return `${input}.${signature}`;
|
|
285221
285425
|
}
|
|
285222
285426
|
async function issueRequestObject(as, client, parameters, privateKey, options) {
|
|
@@ -285352,6 +285556,7 @@ class DPoPHandler {
|
|
|
285352
285556
|
#clockSkew;
|
|
285353
285557
|
#modifyAssertion;
|
|
285354
285558
|
#map;
|
|
285559
|
+
#jkt;
|
|
285355
285560
|
constructor(client, keyPair, options) {
|
|
285356
285561
|
assertPrivateKey(keyPair?.privateKey, '"DPoP.privateKey"');
|
|
285357
285562
|
assertPublicKey(keyPair?.publicKey, '"DPoP.publicKey"');
|
|
@@ -285381,6 +285586,27 @@ class DPoPHandler {
|
|
|
285381
285586
|
}
|
|
285382
285587
|
this.#map.set(key, val);
|
|
285383
285588
|
}
|
|
285589
|
+
async calculateThumbprint() {
|
|
285590
|
+
if (!this.#jkt) {
|
|
285591
|
+
const jwk = await crypto.subtle.exportKey('jwk', this.#publicKey);
|
|
285592
|
+
let components;
|
|
285593
|
+
switch (jwk.kty) {
|
|
285594
|
+
case 'EC':
|
|
285595
|
+
components = { crv: jwk.crv, kty: jwk.kty, x: jwk.x, y: jwk.y };
|
|
285596
|
+
break;
|
|
285597
|
+
case 'OKP':
|
|
285598
|
+
components = { crv: jwk.crv, kty: jwk.kty, x: jwk.x };
|
|
285599
|
+
break;
|
|
285600
|
+
case 'RSA':
|
|
285601
|
+
components = { e: jwk.e, kty: jwk.kty, n: jwk.n };
|
|
285602
|
+
break;
|
|
285603
|
+
default:
|
|
285604
|
+
throw new UnsupportedOperationError('unsupported JWK', { cause: { jwk } });
|
|
285605
|
+
}
|
|
285606
|
+
this.#jkt ||= build_b64u(await crypto.subtle.digest({ name: 'SHA-256' }, buf(JSON.stringify(components))));
|
|
285607
|
+
}
|
|
285608
|
+
return this.#jkt;
|
|
285609
|
+
}
|
|
285384
285610
|
async addProof(url, headers, htm, accessToken) {
|
|
285385
285611
|
this.#header ||= {
|
|
285386
285612
|
alg: keyToJws(this.#privateKey),
|
|
@@ -285395,7 +285621,7 @@ class DPoPHandler {
|
|
|
285395
285621
|
htm,
|
|
285396
285622
|
nonce,
|
|
285397
285623
|
htu: `${url.origin}${url.pathname}`,
|
|
285398
|
-
ath: accessToken ?
|
|
285624
|
+
ath: accessToken ? build_b64u(await crypto.subtle.digest('SHA-256', buf(accessToken))) : undefined,
|
|
285399
285625
|
};
|
|
285400
285626
|
this.#modifyAssertion?.(this.#header, payload);
|
|
285401
285627
|
headers.set('dpop', await signJwt(this.#header, payload, this.#privateKey));
|
|
@@ -285537,28 +285763,15 @@ async function processPushedAuthorizationResponse(as, client, response) {
|
|
|
285537
285763
|
if (!looseInstanceOf(response, Response)) {
|
|
285538
285764
|
throw CodedTypeError('"response" must be an instance of Response', ERR_INVALID_ARG_TYPE);
|
|
285539
285765
|
}
|
|
285540
|
-
|
|
285541
|
-
|
|
285542
|
-
throw new WWWAuthenticateChallengeError('server responded with a challenge in the WWW-Authenticate HTTP Header', { cause: challenges, response });
|
|
285543
|
-
}
|
|
285544
|
-
if (response.status !== 201) {
|
|
285545
|
-
let err;
|
|
285546
|
-
if ((err = await handleOAuthBodyError(response))) {
|
|
285547
|
-
await response.body?.cancel();
|
|
285548
|
-
throw new ResponseBodyError('server responded with an error in the response body', {
|
|
285549
|
-
cause: err,
|
|
285550
|
-
response,
|
|
285551
|
-
});
|
|
285552
|
-
}
|
|
285553
|
-
throw OPE('"response" is not a conform Pushed Authorization Request Endpoint response (unexpected HTTP status code)', RESPONSE_IS_NOT_CONFORM, response);
|
|
285554
|
-
}
|
|
285766
|
+
checkAuthenticationChallenges(response);
|
|
285767
|
+
await checkOAuthBodyError(response, 201, 'Pushed Authorization Request Endpoint');
|
|
285555
285768
|
assertReadableResponse(response);
|
|
285556
|
-
assertApplicationJson(response);
|
|
285557
285769
|
let json;
|
|
285558
285770
|
try {
|
|
285559
285771
|
json = await response.json();
|
|
285560
285772
|
}
|
|
285561
285773
|
catch (cause) {
|
|
285774
|
+
assertApplicationJson(response);
|
|
285562
285775
|
throw OPE('failed to parse "response" body as JSON', PARSE_ERROR, cause);
|
|
285563
285776
|
}
|
|
285564
285777
|
if (!isJsonObject(json)) {
|
|
@@ -285574,6 +285787,33 @@ async function processPushedAuthorizationResponse(as, client, response) {
|
|
|
285574
285787
|
json.expires_in = expiresIn;
|
|
285575
285788
|
return json;
|
|
285576
285789
|
}
|
|
285790
|
+
async function parseOAuthResponseErrorBody(response) {
|
|
285791
|
+
if (response.status > 399 && response.status < 500) {
|
|
285792
|
+
assertReadableResponse(response);
|
|
285793
|
+
assertApplicationJson(response);
|
|
285794
|
+
try {
|
|
285795
|
+
const json = await response.clone().json();
|
|
285796
|
+
if (isJsonObject(json) && typeof json.error === 'string' && json.error.length) {
|
|
285797
|
+
return json;
|
|
285798
|
+
}
|
|
285799
|
+
}
|
|
285800
|
+
catch { }
|
|
285801
|
+
}
|
|
285802
|
+
return undefined;
|
|
285803
|
+
}
|
|
285804
|
+
async function checkOAuthBodyError(response, expected, label) {
|
|
285805
|
+
if (response.status !== expected) {
|
|
285806
|
+
let err;
|
|
285807
|
+
if ((err = await parseOAuthResponseErrorBody(response))) {
|
|
285808
|
+
await response.body?.cancel();
|
|
285809
|
+
throw new ResponseBodyError('server responded with an error in the response body', {
|
|
285810
|
+
cause: err,
|
|
285811
|
+
response,
|
|
285812
|
+
});
|
|
285813
|
+
}
|
|
285814
|
+
throw OPE(`"response" is not a conform ${label} response (unexpected HTTP status code)`, RESPONSE_IS_NOT_CONFORM, response);
|
|
285815
|
+
}
|
|
285816
|
+
}
|
|
285577
285817
|
function assertDPoP(option) {
|
|
285578
285818
|
if (!branded.has(option)) {
|
|
285579
285819
|
throw CodedTypeError('"options.DPoP" is not a valid DPoPHandle', ERR_INVALID_ARG_VALUE);
|
|
@@ -285605,13 +285845,9 @@ async function resourceRequest(accessToken, method, url, headers, body, options)
|
|
|
285605
285845
|
return response;
|
|
285606
285846
|
}
|
|
285607
285847
|
async function protectedResourceRequest(accessToken, method, url, headers, body, options) {
|
|
285608
|
-
|
|
285609
|
-
|
|
285610
|
-
|
|
285611
|
-
throw new WWWAuthenticateChallengeError('server responded with a challenge in the WWW-Authenticate HTTP Header', { cause: challenges, response });
|
|
285612
|
-
}
|
|
285613
|
-
return response;
|
|
285614
|
-
});
|
|
285848
|
+
const response = await resourceRequest(accessToken, method, url, headers, body, options);
|
|
285849
|
+
checkAuthenticationChallenges(response);
|
|
285850
|
+
return response;
|
|
285615
285851
|
}
|
|
285616
285852
|
async function userInfoRequest(as, client, accessToken, options) {
|
|
285617
285853
|
assertAs(as);
|
|
@@ -285749,10 +285985,7 @@ async function processUserInfoResponse(as, client, expectedSubject, response, op
|
|
|
285749
285985
|
if (!looseInstanceOf(response, Response)) {
|
|
285750
285986
|
throw CodedTypeError('"response" must be an instance of Response', ERR_INVALID_ARG_TYPE);
|
|
285751
285987
|
}
|
|
285752
|
-
|
|
285753
|
-
if ((challenges = parseWwwAuthenticateChallenges(response))) {
|
|
285754
|
-
throw new WWWAuthenticateChallengeError('server responded with a challenge in the WWW-Authenticate HTTP Header', { cause: challenges, response });
|
|
285755
|
-
}
|
|
285988
|
+
checkAuthenticationChallenges(response);
|
|
285756
285989
|
if (response.status !== 200) {
|
|
285757
285990
|
throw OPE('"response" is not a conform UserInfo Endpoint response (unexpected HTTP status code)', RESPONSE_IS_NOT_CONFORM, response);
|
|
285758
285991
|
}
|
|
@@ -285769,11 +286002,11 @@ async function processUserInfoResponse(as, client, expectedSubject, response, op
|
|
|
285769
286002
|
if (client.userinfo_signed_response_alg) {
|
|
285770
286003
|
throw OPE('JWT UserInfo Response expected', JWT_USERINFO_EXPECTED, response);
|
|
285771
286004
|
}
|
|
285772
|
-
assertApplicationJson(response);
|
|
285773
286005
|
try {
|
|
285774
286006
|
json = await response.json();
|
|
285775
286007
|
}
|
|
285776
286008
|
catch (cause) {
|
|
286009
|
+
assertApplicationJson(response);
|
|
285777
286010
|
throw OPE('failed to parse "response" body as JSON', PARSE_ERROR, cause);
|
|
285778
286011
|
}
|
|
285779
286012
|
}
|
|
@@ -285846,13 +286079,13 @@ async function validateApplicationLevelSignature(as, ref, options) {
|
|
|
285846
286079
|
throw CodedTypeError('"ref" does not contain a processed JWT Response to verify the signature of', ERR_INVALID_ARG_VALUE);
|
|
285847
286080
|
}
|
|
285848
286081
|
const { 0: protectedHeader, 1: payload, 2: encodedSignature } = jwtRefs.get(ref).split('.');
|
|
285849
|
-
const header = JSON.parse(buf(
|
|
286082
|
+
const header = JSON.parse(buf(build_b64u(protectedHeader)));
|
|
285850
286083
|
if (header.alg.startsWith('HS')) {
|
|
285851
286084
|
throw new UnsupportedOperationError('unsupported JWS algorithm', { cause: { alg: header.alg } });
|
|
285852
286085
|
}
|
|
285853
286086
|
let key;
|
|
285854
286087
|
key = await getPublicSigKeyFromIssuerJwksUri(as, options, header);
|
|
285855
|
-
await validateJwsSignature(protectedHeader, payload, key,
|
|
286088
|
+
await validateJwsSignature(protectedHeader, payload, key, build_b64u(encodedSignature));
|
|
285856
286089
|
}
|
|
285857
286090
|
async function processGenericAccessTokenResponse(as, client, response, additionalRequiredIdTokenClaims, options) {
|
|
285858
286091
|
assertAs(as);
|
|
@@ -285860,28 +286093,15 @@ async function processGenericAccessTokenResponse(as, client, response, additiona
|
|
|
285860
286093
|
if (!looseInstanceOf(response, Response)) {
|
|
285861
286094
|
throw CodedTypeError('"response" must be an instance of Response', ERR_INVALID_ARG_TYPE);
|
|
285862
286095
|
}
|
|
285863
|
-
|
|
285864
|
-
|
|
285865
|
-
throw new WWWAuthenticateChallengeError('server responded with a challenge in the WWW-Authenticate HTTP Header', { cause: challenges, response });
|
|
285866
|
-
}
|
|
285867
|
-
if (response.status !== 200) {
|
|
285868
|
-
let err;
|
|
285869
|
-
if ((err = await handleOAuthBodyError(response))) {
|
|
285870
|
-
await response.body?.cancel();
|
|
285871
|
-
throw new ResponseBodyError('server responded with an error in the response body', {
|
|
285872
|
-
cause: err,
|
|
285873
|
-
response,
|
|
285874
|
-
});
|
|
285875
|
-
}
|
|
285876
|
-
throw OPE('"response" is not a conform Token Endpoint response (unexpected HTTP status code)', RESPONSE_IS_NOT_CONFORM, response);
|
|
285877
|
-
}
|
|
286096
|
+
checkAuthenticationChallenges(response);
|
|
286097
|
+
await checkOAuthBodyError(response, 200, 'Token Endpoint');
|
|
285878
286098
|
assertReadableResponse(response);
|
|
285879
|
-
assertApplicationJson(response);
|
|
285880
286099
|
let json;
|
|
285881
286100
|
try {
|
|
285882
286101
|
json = await response.json();
|
|
285883
286102
|
}
|
|
285884
286103
|
catch (cause) {
|
|
286104
|
+
assertApplicationJson(response);
|
|
285885
286105
|
throw OPE('failed to parse "response" body as JSON', PARSE_ERROR, cause);
|
|
285886
286106
|
}
|
|
285887
286107
|
if (!isJsonObject(json)) {
|
|
@@ -285947,6 +286167,12 @@ async function processGenericAccessTokenResponse(as, client, response, additiona
|
|
|
285947
286167
|
}
|
|
285948
286168
|
return json;
|
|
285949
286169
|
}
|
|
286170
|
+
function checkAuthenticationChallenges(response) {
|
|
286171
|
+
let challenges;
|
|
286172
|
+
if ((challenges = parseWwwAuthenticateChallenges(response))) {
|
|
286173
|
+
throw new WWWAuthenticateChallengeError('server responded with a challenge in the WWW-Authenticate HTTP Header', { cause: challenges, response });
|
|
286174
|
+
}
|
|
286175
|
+
}
|
|
285950
286176
|
async function processRefreshTokenResponse(as, client, response, options) {
|
|
285951
286177
|
return processGenericAccessTokenResponse(as, client, response, undefined, options);
|
|
285952
286178
|
}
|
|
@@ -286189,21 +286415,8 @@ async function processRevocationResponse(response) {
|
|
|
286189
286415
|
if (!looseInstanceOf(response, Response)) {
|
|
286190
286416
|
throw CodedTypeError('"response" must be an instance of Response', ERR_INVALID_ARG_TYPE);
|
|
286191
286417
|
}
|
|
286192
|
-
|
|
286193
|
-
|
|
286194
|
-
throw new WWWAuthenticateChallengeError('server responded with a challenge in the WWW-Authenticate HTTP Header', { cause: challenges, response });
|
|
286195
|
-
}
|
|
286196
|
-
if (response.status !== 200) {
|
|
286197
|
-
let err;
|
|
286198
|
-
if ((err = await handleOAuthBodyError(response))) {
|
|
286199
|
-
await response.body?.cancel();
|
|
286200
|
-
throw new ResponseBodyError('server responded with an error in the response body', {
|
|
286201
|
-
cause: err,
|
|
286202
|
-
response,
|
|
286203
|
-
});
|
|
286204
|
-
}
|
|
286205
|
-
throw OPE('"response" is not a conform Revocation Endpoint response (unexpected HTTP status code)', RESPONSE_IS_NOT_CONFORM, response);
|
|
286206
|
-
}
|
|
286418
|
+
checkAuthenticationChallenges(response);
|
|
286419
|
+
await checkOAuthBodyError(response, 200, 'Revocation Endpoint');
|
|
286207
286420
|
return undefined;
|
|
286208
286421
|
}
|
|
286209
286422
|
function assertReadableResponse(response) {
|
|
@@ -286233,21 +286446,8 @@ async function processIntrospectionResponse(as, client, response, options) {
|
|
|
286233
286446
|
if (!looseInstanceOf(response, Response)) {
|
|
286234
286447
|
throw CodedTypeError('"response" must be an instance of Response', ERR_INVALID_ARG_TYPE);
|
|
286235
286448
|
}
|
|
286236
|
-
|
|
286237
|
-
|
|
286238
|
-
throw new WWWAuthenticateChallengeError('server responded with a challenge in the WWW-Authenticate HTTP Header', { cause: challenges, response });
|
|
286239
|
-
}
|
|
286240
|
-
if (response.status !== 200) {
|
|
286241
|
-
let err;
|
|
286242
|
-
if ((err = await handleOAuthBodyError(response))) {
|
|
286243
|
-
await response.body?.cancel();
|
|
286244
|
-
throw new ResponseBodyError('server responded with an error in the response body', {
|
|
286245
|
-
cause: err,
|
|
286246
|
-
response,
|
|
286247
|
-
});
|
|
286248
|
-
}
|
|
286249
|
-
throw OPE('"response" is not a conform Introspection Endpoint response (unexpected HTTP status code)', RESPONSE_IS_NOT_CONFORM, response);
|
|
286250
|
-
}
|
|
286449
|
+
checkAuthenticationChallenges(response);
|
|
286450
|
+
await checkOAuthBodyError(response, 200, 'Introspection Endpoint');
|
|
286251
286451
|
let json;
|
|
286252
286452
|
if (getContentType(response) === 'application/token-introspection+jwt') {
|
|
286253
286453
|
assertReadableResponse(response);
|
|
@@ -286266,11 +286466,11 @@ async function processIntrospectionResponse(as, client, response, options) {
|
|
|
286266
286466
|
}
|
|
286267
286467
|
else {
|
|
286268
286468
|
assertReadableResponse(response);
|
|
286269
|
-
assertApplicationJson(response);
|
|
286270
286469
|
try {
|
|
286271
286470
|
json = await response.json();
|
|
286272
286471
|
}
|
|
286273
286472
|
catch (cause) {
|
|
286473
|
+
assertApplicationJson(response);
|
|
286274
286474
|
throw OPE('failed to parse "response" body as JSON', PARSE_ERROR, cause);
|
|
286275
286475
|
}
|
|
286276
286476
|
if (!isJsonObject(json)) {
|
|
@@ -286306,12 +286506,12 @@ async function processJwksResponse(response) {
|
|
|
286306
286506
|
throw OPE('"response" is not a conform JSON Web Key Set response (unexpected HTTP status code)', RESPONSE_IS_NOT_CONFORM, response);
|
|
286307
286507
|
}
|
|
286308
286508
|
assertReadableResponse(response);
|
|
286309
|
-
assertContentTypes(response, 'application/json', 'application/jwk-set+json');
|
|
286310
286509
|
let json;
|
|
286311
286510
|
try {
|
|
286312
286511
|
json = await response.json();
|
|
286313
286512
|
}
|
|
286314
286513
|
catch (cause) {
|
|
286514
|
+
assertContentTypes(response, 'application/json', 'application/jwk-set+json');
|
|
286315
286515
|
throw OPE('failed to parse "response" body as JSON', PARSE_ERROR, cause);
|
|
286316
286516
|
}
|
|
286317
286517
|
if (!isJsonObject(json)) {
|
|
@@ -286325,21 +286525,7 @@ async function processJwksResponse(response) {
|
|
|
286325
286525
|
}
|
|
286326
286526
|
return json;
|
|
286327
286527
|
}
|
|
286328
|
-
|
|
286329
|
-
if (response.status > 399 && response.status < 500) {
|
|
286330
|
-
assertReadableResponse(response);
|
|
286331
|
-
assertApplicationJson(response);
|
|
286332
|
-
try {
|
|
286333
|
-
const json = await response.clone().json();
|
|
286334
|
-
if (isJsonObject(json) && typeof json.error === 'string' && json.error.length) {
|
|
286335
|
-
return json;
|
|
286336
|
-
}
|
|
286337
|
-
}
|
|
286338
|
-
catch { }
|
|
286339
|
-
}
|
|
286340
|
-
return undefined;
|
|
286341
|
-
}
|
|
286342
|
-
function build_supported(alg) {
|
|
286528
|
+
function supported(alg) {
|
|
286343
286529
|
switch (alg) {
|
|
286344
286530
|
case 'PS256':
|
|
286345
286531
|
case 'ES256':
|
|
@@ -286358,7 +286544,7 @@ function build_supported(alg) {
|
|
|
286358
286544
|
}
|
|
286359
286545
|
}
|
|
286360
286546
|
function checkSupportedJwsAlg(header) {
|
|
286361
|
-
if (!
|
|
286547
|
+
if (!supported(header.alg)) {
|
|
286362
286548
|
throw new UnsupportedOperationError('unsupported JWS "alg" identifier', {
|
|
286363
286549
|
cause: { alg: header.alg },
|
|
286364
286550
|
});
|
|
@@ -286444,7 +286630,7 @@ async function validateJwt(jws, checkAlg, clockSkew, clockTolerance, decryptJwt)
|
|
|
286444
286630
|
}
|
|
286445
286631
|
let header;
|
|
286446
286632
|
try {
|
|
286447
|
-
header = JSON.parse(buf(
|
|
286633
|
+
header = JSON.parse(buf(build_b64u(protectedHeader)));
|
|
286448
286634
|
}
|
|
286449
286635
|
catch (cause) {
|
|
286450
286636
|
throw OPE('failed to parse JWT Header body as base64url encoded JSON', PARSE_ERROR, cause);
|
|
@@ -286460,7 +286646,7 @@ async function validateJwt(jws, checkAlg, clockSkew, clockTolerance, decryptJwt)
|
|
|
286460
286646
|
}
|
|
286461
286647
|
let claims;
|
|
286462
286648
|
try {
|
|
286463
|
-
claims = JSON.parse(buf(
|
|
286649
|
+
claims = JSON.parse(buf(build_b64u(payload)));
|
|
286464
286650
|
}
|
|
286465
286651
|
catch (cause) {
|
|
286466
286652
|
throw OPE('failed to parse JWT Payload body as base64url encoded JSON', PARSE_ERROR, cause);
|
|
@@ -286525,7 +286711,7 @@ async function validateJwtAuthResponse(as, client, parameters, expectedState, op
|
|
|
286525
286711
|
.then(validateIssuer.bind(undefined, as))
|
|
286526
286712
|
.then(validateAudience.bind(undefined, client.client_id));
|
|
286527
286713
|
const { 0: protectedHeader, 1: payload, 2: encodedSignature } = jwt.split('.');
|
|
286528
|
-
const signature =
|
|
286714
|
+
const signature = build_b64u(encodedSignature);
|
|
286529
286715
|
const key = await getPublicSigKeyFromIssuerJwksUri(as, options, header);
|
|
286530
286716
|
await validateJwsSignature(protectedHeader, payload, key, signature);
|
|
286531
286717
|
const result = new URLSearchParams();
|
|
@@ -286560,7 +286746,7 @@ async function idTokenHash(data, header, claimName) {
|
|
|
286560
286746
|
throw new UnsupportedOperationError(`unsupported JWS algorithm for ${claimName} calculation`, { cause: { alg: header.alg } });
|
|
286561
286747
|
}
|
|
286562
286748
|
const digest = await crypto.subtle.digest(algorithm, buf(data));
|
|
286563
|
-
return
|
|
286749
|
+
return build_b64u(digest.slice(0, digest.byteLength / 2));
|
|
286564
286750
|
}
|
|
286565
286751
|
async function idTokenHashMatches(data, actual, header, claimName) {
|
|
286566
286752
|
const expected = await idTokenHash(data, header, claimName);
|
|
@@ -286691,7 +286877,7 @@ async function validateHybridResponse(as, client, parameters, expectedNonce, exp
|
|
|
286691
286877
|
}
|
|
286692
286878
|
}
|
|
286693
286879
|
const { 0: protectedHeader, 1: payload, 2: encodedSignature } = jwt.split('.');
|
|
286694
|
-
const signature =
|
|
286880
|
+
const signature = build_b64u(encodedSignature);
|
|
286695
286881
|
const key = await getPublicSigKeyFromIssuerJwksUri(as, options, header);
|
|
286696
286882
|
await validateJwsSignature(protectedHeader, payload, key, signature);
|
|
286697
286883
|
if ((await idTokenHashMatches(code, claims.c_hash, header, 'c_hash')) !== true) {
|
|
@@ -286862,28 +287048,15 @@ async function processDeviceAuthorizationResponse(as, client, response) {
|
|
|
286862
287048
|
if (!looseInstanceOf(response, Response)) {
|
|
286863
287049
|
throw CodedTypeError('"response" must be an instance of Response', ERR_INVALID_ARG_TYPE);
|
|
286864
287050
|
}
|
|
286865
|
-
|
|
286866
|
-
|
|
286867
|
-
throw new WWWAuthenticateChallengeError('server responded with a challenge in the WWW-Authenticate HTTP Header', { cause: challenges, response });
|
|
286868
|
-
}
|
|
286869
|
-
if (response.status !== 200) {
|
|
286870
|
-
let err;
|
|
286871
|
-
if ((err = await handleOAuthBodyError(response))) {
|
|
286872
|
-
await response.body?.cancel();
|
|
286873
|
-
throw new ResponseBodyError('server responded with an error in the response body', {
|
|
286874
|
-
cause: err,
|
|
286875
|
-
response,
|
|
286876
|
-
});
|
|
286877
|
-
}
|
|
286878
|
-
throw OPE('"response" is not a conform Device Authorization Endpoint response (unexpected HTTP status code)', RESPONSE_IS_NOT_CONFORM, response);
|
|
286879
|
-
}
|
|
287051
|
+
checkAuthenticationChallenges(response);
|
|
287052
|
+
await checkOAuthBodyError(response, 200, 'Device Authorization Endpoint');
|
|
286880
287053
|
assertReadableResponse(response);
|
|
286881
|
-
assertApplicationJson(response);
|
|
286882
287054
|
let json;
|
|
286883
287055
|
try {
|
|
286884
287056
|
json = await response.json();
|
|
286885
287057
|
}
|
|
286886
287058
|
catch (cause) {
|
|
287059
|
+
assertApplicationJson(response);
|
|
286887
287060
|
throw OPE('failed to parse "response" body as JSON', PARSE_ERROR, cause);
|
|
286888
287061
|
}
|
|
286889
287062
|
if (!isJsonObject(json)) {
|
|
@@ -286954,7 +287127,7 @@ async function validateDPoP(request, accessToken, accessTokenClaims, options) {
|
|
|
286954
287127
|
throw OPE('operation indicated DPoP use but the JWT Access Token has no jkt confirmation claim', INVALID_REQUEST, { claims: accessTokenClaims });
|
|
286955
287128
|
}
|
|
286956
287129
|
const clockSkew = getClockSkew(options);
|
|
286957
|
-
const proof = await validateJwt(headerValue, checkSigningAlgorithm.bind(undefined, options?.signingAlgorithms, undefined,
|
|
287130
|
+
const proof = await validateJwt(headerValue, checkSigningAlgorithm.bind(undefined, options?.signingAlgorithms, undefined, supported), clockSkew, getClockTolerance(options), undefined)
|
|
286958
287131
|
.then(checkJwtType.bind(undefined, 'dpop+jwt'))
|
|
286959
287132
|
.then(validatePresence.bind(undefined, ['iat', 'jti', 'ath', 'htm', 'htu']));
|
|
286960
287133
|
const now = epochTime() + clockSkew;
|
|
@@ -286982,7 +287155,7 @@ async function validateDPoP(request, accessToken, accessTokenClaims, options) {
|
|
|
286982
287155
|
});
|
|
286983
287156
|
}
|
|
286984
287157
|
{
|
|
286985
|
-
const expected =
|
|
287158
|
+
const expected = build_b64u(await crypto.subtle.digest('SHA-256', buf(accessToken)));
|
|
286986
287159
|
if (proof.claims.ath !== expected) {
|
|
286987
287160
|
throw OPE('DPoP Proof ath mismatch', JWT_CLAIM_COMPARISON, {
|
|
286988
287161
|
expected,
|
|
@@ -287019,7 +287192,7 @@ async function validateDPoP(request, accessToken, accessTokenClaims, options) {
|
|
|
287019
287192
|
default:
|
|
287020
287193
|
throw new UnsupportedOperationError('unsupported JWK key type', { cause: proof.header.jwk });
|
|
287021
287194
|
}
|
|
287022
|
-
const expected =
|
|
287195
|
+
const expected = build_b64u(await crypto.subtle.digest('SHA-256', buf(JSON.stringify(components))));
|
|
287023
287196
|
if (accessTokenClaims.cnf.jkt !== expected) {
|
|
287024
287197
|
throw OPE('JWT Access Token confirmation mismatch', JWT_CLAIM_COMPARISON, {
|
|
287025
287198
|
expected,
|
|
@@ -287029,7 +287202,7 @@ async function validateDPoP(request, accessToken, accessTokenClaims, options) {
|
|
|
287029
287202
|
}
|
|
287030
287203
|
}
|
|
287031
287204
|
const { 0: protectedHeader, 1: payload, 2: encodedSignature } = headerValue.split('.');
|
|
287032
|
-
const signature =
|
|
287205
|
+
const signature = build_b64u(encodedSignature);
|
|
287033
287206
|
const { jwk, alg } = proof.header;
|
|
287034
287207
|
if (!jwk) {
|
|
287035
287208
|
throw OPE('DPoP Proof is missing the jwk header parameter', INVALID_REQUEST, {
|
|
@@ -287084,7 +287257,7 @@ async function validateJwtAccessToken(as, request, expectedAudience, options) {
|
|
|
287084
287257
|
if (options?.requireDPoP || scheme === 'dpop' || request.headers.has('dpop')) {
|
|
287085
287258
|
requiredClaims.push('cnf');
|
|
287086
287259
|
}
|
|
287087
|
-
const { claims, header } = await validateJwt(accessToken, checkSigningAlgorithm.bind(undefined, options?.signingAlgorithms, undefined,
|
|
287260
|
+
const { claims, header } = await validateJwt(accessToken, checkSigningAlgorithm.bind(undefined, options?.signingAlgorithms, undefined, supported), getClockSkew(options), getClockTolerance(options), undefined)
|
|
287088
287261
|
.then(checkJwtType.bind(undefined, 'at+jwt'))
|
|
287089
287262
|
.then(validatePresence.bind(undefined, requiredClaims))
|
|
287090
287263
|
.then(validateIssuer.bind(undefined, as))
|
|
@@ -287114,7 +287287,7 @@ async function validateJwtAccessToken(as, request, expectedAudience, options) {
|
|
|
287114
287287
|
}
|
|
287115
287288
|
}
|
|
287116
287289
|
const { 0: protectedHeader, 1: payload, 2: encodedSignature } = accessToken.split('.');
|
|
287117
|
-
const signature =
|
|
287290
|
+
const signature = build_b64u(encodedSignature);
|
|
287118
287291
|
const key = await getPublicSigKeyFromIssuerJwksUri(as, options, header);
|
|
287119
287292
|
await validateJwsSignature(protectedHeader, payload, key, signature);
|
|
287120
287293
|
if (options?.requireDPoP ||
|
|
@@ -287131,25 +287304,71 @@ function reassignRSCode(err) {
|
|
|
287131
287304
|
}
|
|
287132
287305
|
throw err;
|
|
287133
287306
|
}
|
|
287307
|
+
async function backchannelAuthenticationRequest(as, client, clientAuthentication, parameters, options) {
|
|
287308
|
+
assertAs(as);
|
|
287309
|
+
assertClient(client);
|
|
287310
|
+
const url = resolveEndpoint(as, 'backchannel_authentication_endpoint', client.use_mtls_endpoint_aliases, options?.[allowInsecureRequests] !== true);
|
|
287311
|
+
const body = new URLSearchParams(parameters);
|
|
287312
|
+
body.set('client_id', client.client_id);
|
|
287313
|
+
const headers = prepareHeaders(options?.headers);
|
|
287314
|
+
headers.set('accept', 'application/json');
|
|
287315
|
+
return authenticatedRequest(as, client, clientAuthentication, url, body, headers, options);
|
|
287316
|
+
}
|
|
287317
|
+
async function processBackchannelAuthenticationResponse(as, client, response) {
|
|
287318
|
+
assertAs(as);
|
|
287319
|
+
assertClient(client);
|
|
287320
|
+
if (!looseInstanceOf(response, Response)) {
|
|
287321
|
+
throw CodedTypeError('"response" must be an instance of Response', ERR_INVALID_ARG_TYPE);
|
|
287322
|
+
}
|
|
287323
|
+
checkAuthenticationChallenges(response);
|
|
287324
|
+
await checkOAuthBodyError(response, 200, 'Backchannel Authentication Endpoint');
|
|
287325
|
+
assertReadableResponse(response);
|
|
287326
|
+
let json;
|
|
287327
|
+
try {
|
|
287328
|
+
json = await response.json();
|
|
287329
|
+
}
|
|
287330
|
+
catch (cause) {
|
|
287331
|
+
assertApplicationJson(response);
|
|
287332
|
+
throw OPE('failed to parse "response" body as JSON', PARSE_ERROR, cause);
|
|
287333
|
+
}
|
|
287334
|
+
if (!isJsonObject(json)) {
|
|
287335
|
+
throw OPE('"response" body must be a top level object', INVALID_RESPONSE, { body: json });
|
|
287336
|
+
}
|
|
287337
|
+
assertString(json.auth_req_id, '"response" body "auth_req_id" property', INVALID_RESPONSE, {
|
|
287338
|
+
body: json,
|
|
287339
|
+
});
|
|
287340
|
+
let expiresIn = typeof json.expires_in !== 'number' ? parseFloat(json.expires_in) : json.expires_in;
|
|
287341
|
+
assertNumber(expiresIn, false, '"response" body "expires_in" property', INVALID_RESPONSE, {
|
|
287342
|
+
body: json,
|
|
287343
|
+
});
|
|
287344
|
+
json.expires_in = expiresIn;
|
|
287345
|
+
if (json.interval !== undefined) {
|
|
287346
|
+
assertNumber(json.interval, false, '"response" body "interval" property', INVALID_RESPONSE, {
|
|
287347
|
+
body: json,
|
|
287348
|
+
});
|
|
287349
|
+
}
|
|
287350
|
+
return json;
|
|
287351
|
+
}
|
|
287352
|
+
async function backchannelAuthenticationGrantRequest(as, client, clientAuthentication, authReqId, options) {
|
|
287353
|
+
assertAs(as);
|
|
287354
|
+
assertClient(client);
|
|
287355
|
+
assertString(authReqId, '"authReqId"');
|
|
287356
|
+
const parameters = new URLSearchParams(options?.additionalParameters);
|
|
287357
|
+
parameters.set('auth_req_id', authReqId);
|
|
287358
|
+
return tokenEndpointRequest(as, client, clientAuthentication, 'urn:openid:params:grant-type:ciba', parameters, options);
|
|
287359
|
+
}
|
|
287360
|
+
async function processBackchannelAuthenticationGrantResponse(as, client, response, options) {
|
|
287361
|
+
return processGenericAccessTokenResponse(as, client, response, undefined, options);
|
|
287362
|
+
}
|
|
287134
287363
|
const _nopkce = Symbol();
|
|
287135
287364
|
const _nodiscoverycheck = Symbol();
|
|
287136
287365
|
const _expectedIssuer = Symbol();
|
|
287137
287366
|
//# sourceMappingURL=index.js.map
|
|
287138
|
-
|
|
287139
|
-
var external_node_buffer_ = __nccwpck_require__(72254);
|
|
287140
|
-
// EXTERNAL MODULE: external "node:crypto"
|
|
287141
|
-
var external_node_crypto_ = __nccwpck_require__(6005);
|
|
287142
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/node/esm/runtime/digest.js
|
|
287143
|
-
|
|
287144
|
-
const digest = (algorithm, data) => (0,external_node_crypto_.createHash)(algorithm).update(data).digest();
|
|
287145
|
-
/* harmony default export */ const runtime_digest = (digest);
|
|
287146
|
-
|
|
287147
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/node/esm/lib/buffer_utils.js
|
|
287148
|
-
|
|
287367
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/buffer_utils.js
|
|
287149
287368
|
const buffer_utils_encoder = new TextEncoder();
|
|
287150
287369
|
const buffer_utils_decoder = new TextDecoder();
|
|
287151
287370
|
const MAX_INT32 = 2 ** 32;
|
|
287152
|
-
function
|
|
287371
|
+
function concat(...buffers) {
|
|
287153
287372
|
const size = buffers.reduce((acc, { length }) => acc + length, 0);
|
|
287154
287373
|
const buf = new Uint8Array(size);
|
|
287155
287374
|
let i = 0;
|
|
@@ -287159,9 +287378,6 @@ function buffer_utils_concat(...buffers) {
|
|
|
287159
287378
|
}
|
|
287160
287379
|
return buf;
|
|
287161
287380
|
}
|
|
287162
|
-
function buffer_utils_p2s(alg, p2sInput) {
|
|
287163
|
-
return buffer_utils_concat(buffer_utils_encoder.encode(alg), new Uint8Array([0]), p2sInput);
|
|
287164
|
-
}
|
|
287165
287381
|
function writeUInt32BE(buf, value, offset) {
|
|
287166
287382
|
if (value < 0 || value >= MAX_INT32) {
|
|
287167
287383
|
throw new RangeError(`value must be >= 0 and <= ${MAX_INT32 - 1}. Received ${value}`);
|
|
@@ -287181,39 +287397,64 @@ function uint32be(value) {
|
|
|
287181
287397
|
writeUInt32BE(buf, value);
|
|
287182
287398
|
return buf;
|
|
287183
287399
|
}
|
|
287184
|
-
|
|
287185
|
-
|
|
287400
|
+
|
|
287401
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/base64.js
|
|
287402
|
+
function base64_encodeBase64(input) {
|
|
287403
|
+
if (Uint8Array.prototype.toBase64) {
|
|
287404
|
+
return input.toBase64();
|
|
287405
|
+
}
|
|
287406
|
+
const CHUNK_SIZE = 0x8000;
|
|
287407
|
+
const arr = [];
|
|
287408
|
+
for (let i = 0; i < input.length; i += CHUNK_SIZE) {
|
|
287409
|
+
arr.push(String.fromCharCode.apply(null, input.subarray(i, i + CHUNK_SIZE)));
|
|
287410
|
+
}
|
|
287411
|
+
return btoa(arr.join(''));
|
|
287186
287412
|
}
|
|
287187
|
-
|
|
287188
|
-
|
|
287189
|
-
|
|
287190
|
-
for (let iter = 0; iter < iterations; iter++) {
|
|
287191
|
-
const buf = new Uint8Array(4 + secret.length + value.length);
|
|
287192
|
-
buf.set(uint32be(iter + 1));
|
|
287193
|
-
buf.set(secret, 4);
|
|
287194
|
-
buf.set(value, 4 + secret.length);
|
|
287195
|
-
res.set(await runtime_digest('sha256', buf), iter * 32);
|
|
287413
|
+
function decodeBase64(encoded) {
|
|
287414
|
+
if (Uint8Array.fromBase64) {
|
|
287415
|
+
return Uint8Array.fromBase64(encoded);
|
|
287196
287416
|
}
|
|
287197
|
-
|
|
287417
|
+
const binary = atob(encoded);
|
|
287418
|
+
const bytes = new Uint8Array(binary.length);
|
|
287419
|
+
for (let i = 0; i < binary.length; i++) {
|
|
287420
|
+
bytes[i] = binary.charCodeAt(i);
|
|
287421
|
+
}
|
|
287422
|
+
return bytes;
|
|
287198
287423
|
}
|
|
287199
287424
|
|
|
287200
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/
|
|
287425
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/util/base64url.js
|
|
287201
287426
|
|
|
287202
287427
|
|
|
287203
|
-
function
|
|
287428
|
+
function decode(input) {
|
|
287429
|
+
if (Uint8Array.fromBase64) {
|
|
287430
|
+
return Uint8Array.fromBase64(typeof input === 'string' ? input : buffer_utils_decoder.decode(input), {
|
|
287431
|
+
alphabet: 'base64url',
|
|
287432
|
+
});
|
|
287433
|
+
}
|
|
287204
287434
|
let encoded = input;
|
|
287205
287435
|
if (encoded instanceof Uint8Array) {
|
|
287206
287436
|
encoded = buffer_utils_decoder.decode(encoded);
|
|
287207
287437
|
}
|
|
287208
|
-
|
|
287438
|
+
encoded = encoded.replace(/-/g, '+').replace(/_/g, '/').replace(/\s/g, '');
|
|
287439
|
+
try {
|
|
287440
|
+
return decodeBase64(encoded);
|
|
287441
|
+
}
|
|
287442
|
+
catch {
|
|
287443
|
+
throw new TypeError('The input to be decoded is not correctly encoded.');
|
|
287444
|
+
}
|
|
287445
|
+
}
|
|
287446
|
+
function encode(input) {
|
|
287447
|
+
let unencoded = input;
|
|
287448
|
+
if (typeof unencoded === 'string') {
|
|
287449
|
+
unencoded = encoder.encode(unencoded);
|
|
287450
|
+
}
|
|
287451
|
+
if (Uint8Array.prototype.toBase64) {
|
|
287452
|
+
return unencoded.toBase64({ alphabet: 'base64url', omitPadding: true });
|
|
287453
|
+
}
|
|
287454
|
+
return encodeBase64(unencoded).replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
|
|
287209
287455
|
}
|
|
287210
|
-
const encode = (input) => Buffer.from(input).toString('base64url');
|
|
287211
|
-
const decodeBase64 = (input) => new Uint8Array(Buffer.from(input, 'base64'));
|
|
287212
|
-
const encodeBase64 = (input) => Buffer.from(input).toString('base64');
|
|
287213
|
-
|
|
287214
|
-
const decode = (input) => new Uint8Array(external_node_buffer_.Buffer.from(normalize(input), 'base64url'));
|
|
287215
287456
|
|
|
287216
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/
|
|
287457
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/util/errors.js
|
|
287217
287458
|
class JOSEError extends Error {
|
|
287218
287459
|
static code = 'ERR_JOSE_GENERIC';
|
|
287219
287460
|
code = 'ERR_JOSE_GENERIC';
|
|
@@ -287253,7 +287494,7 @@ class JOSEAlgNotAllowed extends JOSEError {
|
|
|
287253
287494
|
static code = 'ERR_JOSE_ALG_NOT_ALLOWED';
|
|
287254
287495
|
code = 'ERR_JOSE_ALG_NOT_ALLOWED';
|
|
287255
287496
|
}
|
|
287256
|
-
class
|
|
287497
|
+
class JOSENotSupported extends JOSEError {
|
|
287257
287498
|
static code = 'ERR_JOSE_NOT_SUPPORTED';
|
|
287258
287499
|
code = 'ERR_JOSE_NOT_SUPPORTED';
|
|
287259
287500
|
}
|
|
@@ -287314,8 +287555,7 @@ class JWSSignatureVerificationFailed extends (/* unused pure expression or super
|
|
|
287314
287555
|
}
|
|
287315
287556
|
}
|
|
287316
287557
|
|
|
287317
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/
|
|
287318
|
-
|
|
287558
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/iv.js
|
|
287319
287559
|
|
|
287320
287560
|
function bitLength(alg) {
|
|
287321
287561
|
switch (alg) {
|
|
@@ -287331,87 +287571,30 @@ function bitLength(alg) {
|
|
|
287331
287571
|
case 'A256CBC-HS512':
|
|
287332
287572
|
return 128;
|
|
287333
287573
|
default:
|
|
287334
|
-
throw new
|
|
287574
|
+
throw new JOSENotSupported(`Unsupported JWE Algorithm: ${alg}`);
|
|
287335
287575
|
}
|
|
287336
287576
|
}
|
|
287337
|
-
/* harmony default export */ const iv = ((alg) =>
|
|
287577
|
+
/* harmony default export */ const iv = ((alg) => crypto.getRandomValues(new Uint8Array(bitLength(alg) >> 3)));
|
|
287338
287578
|
|
|
287339
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/
|
|
287579
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/check_iv_length.js
|
|
287340
287580
|
|
|
287341
287581
|
|
|
287342
|
-
const
|
|
287582
|
+
/* harmony default export */ const check_iv_length = ((enc, iv) => {
|
|
287343
287583
|
if (iv.length << 3 !== bitLength(enc)) {
|
|
287344
287584
|
throw new JWEInvalid('Invalid Initialization Vector length');
|
|
287345
287585
|
}
|
|
287346
|
-
};
|
|
287347
|
-
/* harmony default export */ const check_iv_length = (checkIvLength);
|
|
287348
|
-
|
|
287349
|
-
;// CONCATENATED MODULE: external "node:util"
|
|
287350
|
-
const external_node_util_namespaceObject = require("node:util");
|
|
287351
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/node/esm/runtime/is_key_object.js
|
|
287352
|
-
|
|
287353
|
-
/* harmony default export */ const is_key_object = ((obj) => external_node_util_namespaceObject.types.isKeyObject(obj));
|
|
287354
|
-
|
|
287355
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/node/esm/runtime/check_cek_length.js
|
|
287586
|
+
});
|
|
287356
287587
|
|
|
287588
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/check_cek_length.js
|
|
287357
287589
|
|
|
287358
|
-
const
|
|
287359
|
-
|
|
287360
|
-
|
|
287361
|
-
|
|
287362
|
-
case 'A192CBC-HS384':
|
|
287363
|
-
case 'A256CBC-HS512':
|
|
287364
|
-
expected = parseInt(enc.slice(-3), 10);
|
|
287365
|
-
break;
|
|
287366
|
-
case 'A128GCM':
|
|
287367
|
-
case 'A192GCM':
|
|
287368
|
-
case 'A256GCM':
|
|
287369
|
-
expected = parseInt(enc.slice(1, 4), 10);
|
|
287370
|
-
break;
|
|
287371
|
-
default:
|
|
287372
|
-
throw new errors_JOSENotSupported(`Content Encryption Algorithm ${enc} is not supported either by JOSE or your javascript runtime`);
|
|
287373
|
-
}
|
|
287374
|
-
if (cek instanceof Uint8Array) {
|
|
287375
|
-
const actual = cek.byteLength << 3;
|
|
287376
|
-
if (actual !== expected) {
|
|
287377
|
-
throw new JWEInvalid(`Invalid Content Encryption Key length. Expected ${expected} bits, got ${actual} bits`);
|
|
287378
|
-
}
|
|
287379
|
-
return;
|
|
287590
|
+
/* harmony default export */ const check_cek_length = ((cek, expected) => {
|
|
287591
|
+
const actual = cek.byteLength << 3;
|
|
287592
|
+
if (actual !== expected) {
|
|
287593
|
+
throw new JWEInvalid(`Invalid Content Encryption Key length. Expected ${expected} bits, got ${actual} bits`);
|
|
287380
287594
|
}
|
|
287381
|
-
|
|
287382
|
-
const actual = cek.symmetricKeySize << 3;
|
|
287383
|
-
if (actual !== expected) {
|
|
287384
|
-
throw new JWEInvalid(`Invalid Content Encryption Key length. Expected ${expected} bits, got ${actual} bits`);
|
|
287385
|
-
}
|
|
287386
|
-
return;
|
|
287387
|
-
}
|
|
287388
|
-
throw new TypeError('Invalid Content Encryption Key type');
|
|
287389
|
-
};
|
|
287390
|
-
/* harmony default export */ const check_cek_length = (checkCekLength);
|
|
287391
|
-
|
|
287392
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/node/esm/runtime/timing_safe_equal.js
|
|
287393
|
-
|
|
287394
|
-
const timingSafeEqual = external_node_crypto_.timingSafeEqual;
|
|
287395
|
-
/* harmony default export */ const timing_safe_equal = (timingSafeEqual);
|
|
287396
|
-
|
|
287397
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/node/esm/runtime/cbc_tag.js
|
|
287398
|
-
|
|
287399
|
-
|
|
287400
|
-
function cbcTag(aad, iv, ciphertext, macSize, macKey, keySize) {
|
|
287401
|
-
const macData = buffer_utils_concat(aad, iv, ciphertext, uint64be(aad.length << 3));
|
|
287402
|
-
const hmac = (0,external_node_crypto_.createHmac)(`sha${macSize}`, macKey);
|
|
287403
|
-
hmac.update(macData);
|
|
287404
|
-
return hmac.digest().slice(0, keySize >> 3);
|
|
287405
|
-
}
|
|
287406
|
-
|
|
287407
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/node/esm/runtime/webcrypto.js
|
|
287408
|
-
|
|
287409
|
-
|
|
287410
|
-
const webcrypto = external_node_crypto_.webcrypto;
|
|
287411
|
-
/* harmony default export */ const runtime_webcrypto = (webcrypto);
|
|
287412
|
-
const webcrypto_isCryptoKey = (key) => external_node_util_namespaceObject.types.isCryptoKey(key);
|
|
287595
|
+
});
|
|
287413
287596
|
|
|
287414
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/
|
|
287597
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/crypto_key.js
|
|
287415
287598
|
function unusable(name, prop = 'algorithm.name') {
|
|
287416
287599
|
return new TypeError(`CryptoKey does not support this operation, its ${prop} must be ${name}`);
|
|
287417
287600
|
}
|
|
@@ -287421,7 +287604,7 @@ function isAlgorithm(algorithm, name) {
|
|
|
287421
287604
|
function getHashLength(hash) {
|
|
287422
287605
|
return parseInt(hash.name.slice(4), 10);
|
|
287423
287606
|
}
|
|
287424
|
-
function
|
|
287607
|
+
function getNamedCurve(alg) {
|
|
287425
287608
|
switch (alg) {
|
|
287426
287609
|
case 'ES256':
|
|
287427
287610
|
return 'P-256';
|
|
@@ -287433,23 +287616,12 @@ function crypto_key_getNamedCurve(alg) {
|
|
|
287433
287616
|
throw new Error('unreachable');
|
|
287434
287617
|
}
|
|
287435
287618
|
}
|
|
287436
|
-
function checkUsage(key,
|
|
287437
|
-
if (
|
|
287438
|
-
|
|
287439
|
-
if (usages.length > 2) {
|
|
287440
|
-
const last = usages.pop();
|
|
287441
|
-
msg += `one of ${usages.join(', ')}, or ${last}.`;
|
|
287442
|
-
}
|
|
287443
|
-
else if (usages.length === 2) {
|
|
287444
|
-
msg += `one of ${usages[0]} or ${usages[1]}.`;
|
|
287445
|
-
}
|
|
287446
|
-
else {
|
|
287447
|
-
msg += `${usages[0]}.`;
|
|
287448
|
-
}
|
|
287449
|
-
throw new TypeError(msg);
|
|
287619
|
+
function checkUsage(key, usage) {
|
|
287620
|
+
if (usage && !key.usages.includes(usage)) {
|
|
287621
|
+
throw new TypeError(`CryptoKey does not support this operation, its usages must include ${usage}.`);
|
|
287450
287622
|
}
|
|
287451
287623
|
}
|
|
287452
|
-
function checkSigCryptoKey(key, alg,
|
|
287624
|
+
function checkSigCryptoKey(key, alg, usage) {
|
|
287453
287625
|
switch (alg) {
|
|
287454
287626
|
case 'HS256':
|
|
287455
287627
|
case 'HS384':
|
|
@@ -287484,10 +287656,10 @@ function checkSigCryptoKey(key, alg, ...usages) {
|
|
|
287484
287656
|
throw unusable(`SHA-${expected}`, 'algorithm.hash');
|
|
287485
287657
|
break;
|
|
287486
287658
|
}
|
|
287659
|
+
case 'Ed25519':
|
|
287487
287660
|
case 'EdDSA': {
|
|
287488
|
-
if (key.algorithm
|
|
287489
|
-
throw unusable('Ed25519
|
|
287490
|
-
}
|
|
287661
|
+
if (!isAlgorithm(key.algorithm, 'Ed25519'))
|
|
287662
|
+
throw unusable('Ed25519');
|
|
287491
287663
|
break;
|
|
287492
287664
|
}
|
|
287493
287665
|
case 'ES256':
|
|
@@ -287495,7 +287667,7 @@ function checkSigCryptoKey(key, alg, ...usages) {
|
|
|
287495
287667
|
case 'ES512': {
|
|
287496
287668
|
if (!isAlgorithm(key.algorithm, 'ECDSA'))
|
|
287497
287669
|
throw unusable('ECDSA');
|
|
287498
|
-
const expected =
|
|
287670
|
+
const expected = getNamedCurve(alg);
|
|
287499
287671
|
const actual = key.algorithm.namedCurve;
|
|
287500
287672
|
if (actual !== expected)
|
|
287501
287673
|
throw unusable(expected, 'algorithm.namedCurve');
|
|
@@ -287504,9 +287676,9 @@ function checkSigCryptoKey(key, alg, ...usages) {
|
|
|
287504
287676
|
default:
|
|
287505
287677
|
throw new TypeError('CryptoKey does not support this operation');
|
|
287506
287678
|
}
|
|
287507
|
-
checkUsage(key,
|
|
287679
|
+
checkUsage(key, usage);
|
|
287508
287680
|
}
|
|
287509
|
-
function
|
|
287681
|
+
function crypto_key_checkEncCryptoKey(key, alg, usage) {
|
|
287510
287682
|
switch (alg) {
|
|
287511
287683
|
case 'A128GCM':
|
|
287512
287684
|
case 'A192GCM':
|
|
@@ -287534,10 +287706,9 @@ function checkEncCryptoKey(key, alg, ...usages) {
|
|
|
287534
287706
|
switch (key.algorithm.name) {
|
|
287535
287707
|
case 'ECDH':
|
|
287536
287708
|
case 'X25519':
|
|
287537
|
-
case 'X448':
|
|
287538
287709
|
break;
|
|
287539
287710
|
default:
|
|
287540
|
-
throw unusable('ECDH
|
|
287711
|
+
throw unusable('ECDH or X25519');
|
|
287541
287712
|
}
|
|
287542
287713
|
break;
|
|
287543
287714
|
}
|
|
@@ -287562,10 +287733,10 @@ function checkEncCryptoKey(key, alg, ...usages) {
|
|
|
287562
287733
|
default:
|
|
287563
287734
|
throw new TypeError('CryptoKey does not support this operation');
|
|
287564
287735
|
}
|
|
287565
|
-
checkUsage(key,
|
|
287736
|
+
checkUsage(key, usage);
|
|
287566
287737
|
}
|
|
287567
287738
|
|
|
287568
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/
|
|
287739
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/invalid_key_input.js
|
|
287569
287740
|
function message(msg, actual, ...types) {
|
|
287570
287741
|
types = types.filter(Boolean);
|
|
287571
287742
|
if (types.length > 2) {
|
|
@@ -287598,31 +287769,23 @@ function withAlg(alg, actual, ...types) {
|
|
|
287598
287769
|
return message(`Key for the ${alg} algorithm must be `, actual, ...types);
|
|
287599
287770
|
}
|
|
287600
287771
|
|
|
287601
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/
|
|
287602
|
-
|
|
287603
|
-
|
|
287604
|
-
|
|
287605
|
-
|
|
287606
|
-
return ciphers.has(algorithm);
|
|
287607
|
-
});
|
|
287608
|
-
|
|
287609
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/node/esm/runtime/is_key_like.js
|
|
287610
|
-
|
|
287611
|
-
|
|
287612
|
-
/* harmony default export */ const is_key_like = ((key) => is_key_object(key) || webcrypto_isCryptoKey(key));
|
|
287613
|
-
const is_key_like_types = ['KeyObject'];
|
|
287614
|
-
if (globalThis.CryptoKey || runtime_webcrypto?.CryptoKey) {
|
|
287615
|
-
is_key_like_types.push('CryptoKey');
|
|
287772
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/is_key_like.js
|
|
287773
|
+
function is_key_like_assertCryptoKey(key) {
|
|
287774
|
+
if (!isCryptoKey(key)) {
|
|
287775
|
+
throw new Error('CryptoKey instance expected');
|
|
287776
|
+
}
|
|
287616
287777
|
}
|
|
287778
|
+
function isCryptoKey(key) {
|
|
287779
|
+
return key?.[Symbol.toStringTag] === 'CryptoKey';
|
|
287780
|
+
}
|
|
287781
|
+
function isKeyObject(key) {
|
|
287782
|
+
return key?.[Symbol.toStringTag] === 'KeyObject';
|
|
287783
|
+
}
|
|
287784
|
+
/* harmony default export */ const is_key_like = ((key) => {
|
|
287785
|
+
return isCryptoKey(key) || isKeyObject(key);
|
|
287786
|
+
});
|
|
287617
287787
|
|
|
287618
|
-
|
|
287619
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/node/esm/runtime/decrypt.js
|
|
287620
|
-
|
|
287621
|
-
|
|
287622
|
-
|
|
287623
|
-
|
|
287624
|
-
|
|
287625
|
-
|
|
287788
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/decrypt.js
|
|
287626
287789
|
|
|
287627
287790
|
|
|
287628
287791
|
|
|
@@ -287630,22 +287793,39 @@ if (globalThis.CryptoKey || runtime_webcrypto?.CryptoKey) {
|
|
|
287630
287793
|
|
|
287631
287794
|
|
|
287632
287795
|
|
|
287633
|
-
function
|
|
287634
|
-
|
|
287635
|
-
|
|
287636
|
-
cek = cek.export();
|
|
287796
|
+
async function timingSafeEqual(a, b) {
|
|
287797
|
+
if (!(a instanceof Uint8Array)) {
|
|
287798
|
+
throw new TypeError('First argument must be a buffer');
|
|
287637
287799
|
}
|
|
287638
|
-
|
|
287639
|
-
|
|
287640
|
-
|
|
287641
|
-
const algorithm =
|
|
287642
|
-
|
|
287643
|
-
|
|
287800
|
+
if (!(b instanceof Uint8Array)) {
|
|
287801
|
+
throw new TypeError('Second argument must be a buffer');
|
|
287802
|
+
}
|
|
287803
|
+
const algorithm = { name: 'HMAC', hash: 'SHA-256' };
|
|
287804
|
+
const key = (await crypto.subtle.generateKey(algorithm, false, ['sign']));
|
|
287805
|
+
const aHmac = new Uint8Array(await crypto.subtle.sign(algorithm, key, a));
|
|
287806
|
+
const bHmac = new Uint8Array(await crypto.subtle.sign(algorithm, key, b));
|
|
287807
|
+
let out = 0;
|
|
287808
|
+
let i = -1;
|
|
287809
|
+
while (++i < 32) {
|
|
287810
|
+
out |= aHmac[i] ^ bHmac[i];
|
|
287644
287811
|
}
|
|
287645
|
-
|
|
287812
|
+
return out === 0;
|
|
287813
|
+
}
|
|
287814
|
+
async function cbcDecrypt(enc, cek, ciphertext, iv, tag, aad) {
|
|
287815
|
+
if (!(cek instanceof Uint8Array)) {
|
|
287816
|
+
throw new TypeError(invalid_key_input(cek, 'Uint8Array'));
|
|
287817
|
+
}
|
|
287818
|
+
const keySize = parseInt(enc.slice(1, 4), 10);
|
|
287819
|
+
const encKey = await crypto.subtle.importKey('raw', cek.subarray(keySize >> 3), 'AES-CBC', false, ['decrypt']);
|
|
287820
|
+
const macKey = await crypto.subtle.importKey('raw', cek.subarray(0, keySize >> 3), {
|
|
287821
|
+
hash: `SHA-${keySize << 1}`,
|
|
287822
|
+
name: 'HMAC',
|
|
287823
|
+
}, false, ['sign']);
|
|
287824
|
+
const macData = concat(aad, iv, ciphertext, uint64be(aad.length << 3));
|
|
287825
|
+
const expectedTag = new Uint8Array((await crypto.subtle.sign('HMAC', macKey, macData)).slice(0, keySize >> 3));
|
|
287646
287826
|
let macCheckPassed;
|
|
287647
287827
|
try {
|
|
287648
|
-
macCheckPassed =
|
|
287828
|
+
macCheckPassed = await timingSafeEqual(tag, expectedTag);
|
|
287649
287829
|
}
|
|
287650
287830
|
catch {
|
|
287651
287831
|
}
|
|
@@ -287654,8 +287834,7 @@ function cbcDecrypt(enc, cek, ciphertext, iv, tag, aad) {
|
|
|
287654
287834
|
}
|
|
287655
287835
|
let plaintext;
|
|
287656
287836
|
try {
|
|
287657
|
-
|
|
287658
|
-
plaintext = buffer_utils_concat(decipher.update(ciphertext), decipher.final());
|
|
287837
|
+
plaintext = new Uint8Array(await crypto.subtle.decrypt({ iv, name: 'AES-CBC' }, encKey, ciphertext));
|
|
287659
287838
|
}
|
|
287660
287839
|
catch {
|
|
287661
287840
|
}
|
|
@@ -287664,37 +287843,30 @@ function cbcDecrypt(enc, cek, ciphertext, iv, tag, aad) {
|
|
|
287664
287843
|
}
|
|
287665
287844
|
return plaintext;
|
|
287666
287845
|
}
|
|
287667
|
-
function gcmDecrypt(enc, cek, ciphertext, iv, tag, aad) {
|
|
287668
|
-
|
|
287669
|
-
|
|
287670
|
-
|
|
287671
|
-
|
|
287846
|
+
async function gcmDecrypt(enc, cek, ciphertext, iv, tag, aad) {
|
|
287847
|
+
let encKey;
|
|
287848
|
+
if (cek instanceof Uint8Array) {
|
|
287849
|
+
encKey = await crypto.subtle.importKey('raw', cek, 'AES-GCM', false, ['decrypt']);
|
|
287850
|
+
}
|
|
287851
|
+
else {
|
|
287852
|
+
crypto_key_checkEncCryptoKey(cek, enc, 'decrypt');
|
|
287853
|
+
encKey = cek;
|
|
287672
287854
|
}
|
|
287673
287855
|
try {
|
|
287674
|
-
|
|
287675
|
-
|
|
287676
|
-
|
|
287677
|
-
|
|
287678
|
-
|
|
287679
|
-
|
|
287680
|
-
decipher.final();
|
|
287681
|
-
return plaintext;
|
|
287856
|
+
return new Uint8Array(await crypto.subtle.decrypt({
|
|
287857
|
+
additionalData: aad,
|
|
287858
|
+
iv,
|
|
287859
|
+
name: 'AES-GCM',
|
|
287860
|
+
tagLength: 128,
|
|
287861
|
+
}, encKey, concat(ciphertext, tag)));
|
|
287682
287862
|
}
|
|
287683
287863
|
catch {
|
|
287684
287864
|
throw new JWEDecryptionFailed();
|
|
287685
287865
|
}
|
|
287686
287866
|
}
|
|
287687
|
-
const decrypt = (enc, cek, ciphertext, iv, tag, aad) => {
|
|
287688
|
-
|
|
287689
|
-
|
|
287690
|
-
checkEncCryptoKey(cek, enc, 'decrypt');
|
|
287691
|
-
key = external_node_crypto_.KeyObject.from(cek);
|
|
287692
|
-
}
|
|
287693
|
-
else if (cek instanceof Uint8Array || is_key_object(cek)) {
|
|
287694
|
-
key = cek;
|
|
287695
|
-
}
|
|
287696
|
-
else {
|
|
287697
|
-
throw new TypeError(invalid_key_input(cek, ...is_key_like_types, 'Uint8Array'));
|
|
287867
|
+
/* harmony default export */ const decrypt = (async (enc, cek, ciphertext, iv, tag, aad) => {
|
|
287868
|
+
if (!isCryptoKey(cek) && !(cek instanceof Uint8Array)) {
|
|
287869
|
+
throw new TypeError(invalid_key_input(cek, 'CryptoKey', 'KeyObject', 'Uint8Array', 'JSON Web Key'));
|
|
287698
287870
|
}
|
|
287699
287871
|
if (!iv) {
|
|
287700
287872
|
throw new JWEInvalid('JWE Initialization Vector missing');
|
|
@@ -287702,25 +287874,27 @@ const decrypt = (enc, cek, ciphertext, iv, tag, aad) => {
|
|
|
287702
287874
|
if (!tag) {
|
|
287703
287875
|
throw new JWEInvalid('JWE Authentication Tag missing');
|
|
287704
287876
|
}
|
|
287705
|
-
check_cek_length(enc, key);
|
|
287706
287877
|
check_iv_length(enc, iv);
|
|
287707
287878
|
switch (enc) {
|
|
287708
287879
|
case 'A128CBC-HS256':
|
|
287709
287880
|
case 'A192CBC-HS384':
|
|
287710
287881
|
case 'A256CBC-HS512':
|
|
287711
|
-
|
|
287882
|
+
if (cek instanceof Uint8Array)
|
|
287883
|
+
check_cek_length(cek, parseInt(enc.slice(-3), 10));
|
|
287884
|
+
return cbcDecrypt(enc, cek, ciphertext, iv, tag, aad);
|
|
287712
287885
|
case 'A128GCM':
|
|
287713
287886
|
case 'A192GCM':
|
|
287714
287887
|
case 'A256GCM':
|
|
287715
|
-
|
|
287888
|
+
if (cek instanceof Uint8Array)
|
|
287889
|
+
check_cek_length(cek, parseInt(enc.slice(1, 4), 10));
|
|
287890
|
+
return gcmDecrypt(enc, cek, ciphertext, iv, tag, aad);
|
|
287716
287891
|
default:
|
|
287717
|
-
throw new
|
|
287892
|
+
throw new JOSENotSupported('Unsupported JWE Content Encryption Algorithm');
|
|
287718
287893
|
}
|
|
287719
|
-
};
|
|
287720
|
-
/* harmony default export */ const runtime_decrypt = (decrypt);
|
|
287894
|
+
});
|
|
287721
287895
|
|
|
287722
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/
|
|
287723
|
-
const
|
|
287896
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/is_disjoint.js
|
|
287897
|
+
/* harmony default export */ const is_disjoint = ((...headers) => {
|
|
287724
287898
|
const sources = headers.filter(Boolean);
|
|
287725
287899
|
if (sources.length === 0 || sources.length === 1) {
|
|
287726
287900
|
return true;
|
|
@@ -287740,14 +287914,13 @@ const isDisjoint = (...headers) => {
|
|
|
287740
287914
|
}
|
|
287741
287915
|
}
|
|
287742
287916
|
return true;
|
|
287743
|
-
};
|
|
287744
|
-
/* harmony default export */ const is_disjoint = (isDisjoint);
|
|
287917
|
+
});
|
|
287745
287918
|
|
|
287746
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/
|
|
287919
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/is_object.js
|
|
287747
287920
|
function isObjectLike(value) {
|
|
287748
287921
|
return typeof value === 'object' && value !== null;
|
|
287749
287922
|
}
|
|
287750
|
-
|
|
287923
|
+
/* harmony default export */ const is_object = ((input) => {
|
|
287751
287924
|
if (!isObjectLike(input) || Object.prototype.toString.call(input) !== '[object Object]') {
|
|
287752
287925
|
return false;
|
|
287753
287926
|
}
|
|
@@ -287759,345 +287932,165 @@ function isObject(input) {
|
|
|
287759
287932
|
proto = Object.getPrototypeOf(proto);
|
|
287760
287933
|
}
|
|
287761
287934
|
return Object.getPrototypeOf(input) === proto;
|
|
287762
|
-
}
|
|
287763
|
-
|
|
287764
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/node/esm/runtime/aeskw.js
|
|
287765
|
-
|
|
287766
|
-
|
|
287767
|
-
|
|
287768
|
-
|
|
287769
|
-
|
|
287770
|
-
|
|
287771
|
-
|
|
287772
|
-
|
|
287935
|
+
});
|
|
287773
287936
|
|
|
287937
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/aeskw.js
|
|
287774
287938
|
|
|
287775
287939
|
function checkKeySize(key, alg) {
|
|
287776
|
-
if (key.
|
|
287940
|
+
if (key.algorithm.length !== parseInt(alg.slice(1, 4), 10)) {
|
|
287777
287941
|
throw new TypeError(`Invalid key size for alg: ${alg}`);
|
|
287778
287942
|
}
|
|
287779
287943
|
}
|
|
287780
|
-
function
|
|
287781
|
-
if (is_key_object(key)) {
|
|
287782
|
-
return key;
|
|
287783
|
-
}
|
|
287944
|
+
function getCryptoKey(key, alg, usage) {
|
|
287784
287945
|
if (key instanceof Uint8Array) {
|
|
287785
|
-
return (
|
|
287786
|
-
}
|
|
287787
|
-
if (webcrypto_isCryptoKey(key)) {
|
|
287788
|
-
checkEncCryptoKey(key, alg, usage);
|
|
287789
|
-
return external_node_crypto_.KeyObject.from(key);
|
|
287790
|
-
}
|
|
287791
|
-
throw new TypeError(invalid_key_input(key, ...is_key_like_types, 'Uint8Array'));
|
|
287792
|
-
}
|
|
287793
|
-
const aeskw_wrap = (alg, key, cek) => {
|
|
287794
|
-
const size = parseInt(alg.slice(1, 4), 10);
|
|
287795
|
-
const algorithm = `aes${size}-wrap`;
|
|
287796
|
-
if (!supported(algorithm)) {
|
|
287797
|
-
throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);
|
|
287798
|
-
}
|
|
287799
|
-
const keyObject = ensureKeyObject(key, alg, 'wrapKey');
|
|
287800
|
-
checkKeySize(keyObject, alg);
|
|
287801
|
-
const cipher = createCipheriv(algorithm, keyObject, Buffer.alloc(8, 0xa6));
|
|
287802
|
-
return concat(cipher.update(cek), cipher.final());
|
|
287803
|
-
};
|
|
287804
|
-
const unwrap = (alg, key, encryptedKey) => {
|
|
287805
|
-
const size = parseInt(alg.slice(1, 4), 10);
|
|
287806
|
-
const algorithm = `aes${size}-wrap`;
|
|
287807
|
-
if (!runtime_ciphers(algorithm)) {
|
|
287808
|
-
throw new errors_JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);
|
|
287946
|
+
return crypto.subtle.importKey('raw', key, 'AES-KW', true, [usage]);
|
|
287809
287947
|
}
|
|
287810
|
-
|
|
287811
|
-
|
|
287812
|
-
const cipher = (0,external_node_crypto_.createDecipheriv)(algorithm, keyObject, external_node_buffer_.Buffer.alloc(8, 0xa6));
|
|
287813
|
-
return buffer_utils_concat(cipher.update(encryptedKey), cipher.final());
|
|
287814
|
-
};
|
|
287815
|
-
|
|
287816
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/node/esm/lib/is_jwk.js
|
|
287817
|
-
|
|
287818
|
-
function isJWK(key) {
|
|
287819
|
-
return isObject(key) && typeof key.kty === 'string';
|
|
287948
|
+
crypto_key_checkEncCryptoKey(key, alg, usage);
|
|
287949
|
+
return key;
|
|
287820
287950
|
}
|
|
287821
|
-
function
|
|
287822
|
-
|
|
287951
|
+
async function wrap(alg, key, cek) {
|
|
287952
|
+
const cryptoKey = await getCryptoKey(key, alg, 'wrapKey');
|
|
287953
|
+
checkKeySize(cryptoKey, alg);
|
|
287954
|
+
const cryptoKeyCek = await crypto.subtle.importKey('raw', cek, { hash: 'SHA-256', name: 'HMAC' }, true, ['sign']);
|
|
287955
|
+
return new Uint8Array(await crypto.subtle.wrapKey('raw', cryptoKeyCek, cryptoKey, 'AES-KW'));
|
|
287823
287956
|
}
|
|
287824
|
-
function
|
|
287825
|
-
|
|
287957
|
+
async function unwrap(alg, key, encryptedKey) {
|
|
287958
|
+
const cryptoKey = await getCryptoKey(key, alg, 'unwrapKey');
|
|
287959
|
+
checkKeySize(cryptoKey, alg);
|
|
287960
|
+
const cryptoKeyCek = await crypto.subtle.unwrapKey('raw', encryptedKey, cryptoKey, 'AES-KW', { hash: 'SHA-256', name: 'HMAC' }, true, ['sign']);
|
|
287961
|
+
return new Uint8Array(await crypto.subtle.exportKey('raw', cryptoKeyCek));
|
|
287826
287962
|
}
|
|
287827
|
-
function isSecretJWK(key) {
|
|
287828
|
-
return isJWK(key) && key.kty === 'oct' && typeof key.k === 'string';
|
|
287829
|
-
}
|
|
287830
|
-
|
|
287831
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/node/esm/runtime/get_named_curve.js
|
|
287832
|
-
|
|
287833
|
-
|
|
287834
|
-
|
|
287835
|
-
|
|
287836
|
-
|
|
287837
|
-
|
|
287838
|
-
|
|
287839
|
-
const weakMap = new WeakMap();
|
|
287840
|
-
const namedCurveToJOSE = (namedCurve) => {
|
|
287841
|
-
switch (namedCurve) {
|
|
287842
|
-
case 'prime256v1':
|
|
287843
|
-
return 'P-256';
|
|
287844
|
-
case 'secp384r1':
|
|
287845
|
-
return 'P-384';
|
|
287846
|
-
case 'secp521r1':
|
|
287847
|
-
return 'P-521';
|
|
287848
|
-
case 'secp256k1':
|
|
287849
|
-
return 'secp256k1';
|
|
287850
|
-
default:
|
|
287851
|
-
throw new errors_JOSENotSupported('Unsupported key curve for this operation');
|
|
287852
|
-
}
|
|
287853
|
-
};
|
|
287854
|
-
const get_named_curve_getNamedCurve = (kee, raw) => {
|
|
287855
|
-
let key;
|
|
287856
|
-
if (webcrypto_isCryptoKey(kee)) {
|
|
287857
|
-
key = external_node_crypto_.KeyObject.from(kee);
|
|
287858
|
-
}
|
|
287859
|
-
else if (is_key_object(kee)) {
|
|
287860
|
-
key = kee;
|
|
287861
|
-
}
|
|
287862
|
-
else if (isJWK(kee)) {
|
|
287863
|
-
return kee.crv;
|
|
287864
|
-
}
|
|
287865
|
-
else {
|
|
287866
|
-
throw new TypeError(invalid_key_input(kee, ...is_key_like_types));
|
|
287867
|
-
}
|
|
287868
|
-
if (key.type === 'secret') {
|
|
287869
|
-
throw new TypeError('only "private" or "public" type keys can be used for this operation');
|
|
287870
|
-
}
|
|
287871
|
-
switch (key.asymmetricKeyType) {
|
|
287872
|
-
case 'ed25519':
|
|
287873
|
-
case 'ed448':
|
|
287874
|
-
return `Ed${key.asymmetricKeyType.slice(2)}`;
|
|
287875
|
-
case 'x25519':
|
|
287876
|
-
case 'x448':
|
|
287877
|
-
return `X${key.asymmetricKeyType.slice(1)}`;
|
|
287878
|
-
case 'ec': {
|
|
287879
|
-
const namedCurve = key.asymmetricKeyDetails.namedCurve;
|
|
287880
|
-
if (raw) {
|
|
287881
|
-
return namedCurve;
|
|
287882
|
-
}
|
|
287883
|
-
return namedCurveToJOSE(namedCurve);
|
|
287884
|
-
}
|
|
287885
|
-
default:
|
|
287886
|
-
throw new TypeError('Invalid asymmetric key type for this operation');
|
|
287887
|
-
}
|
|
287888
|
-
};
|
|
287889
|
-
/* harmony default export */ const get_named_curve = (get_named_curve_getNamedCurve);
|
|
287890
|
-
|
|
287891
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/node/esm/runtime/ecdhes.js
|
|
287892
|
-
|
|
287893
|
-
|
|
287894
|
-
|
|
287895
|
-
|
|
287896
|
-
|
|
287897
287963
|
|
|
287964
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/digest.js
|
|
287965
|
+
/* harmony default export */ const digest = (async (algorithm, data) => {
|
|
287966
|
+
const subtleDigest = `SHA-${algorithm.slice(-3)}`;
|
|
287967
|
+
return new Uint8Array(await crypto.subtle.digest(subtleDigest, data));
|
|
287968
|
+
});
|
|
287898
287969
|
|
|
287970
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/ecdhes.js
|
|
287899
287971
|
|
|
287900
287972
|
|
|
287901
287973
|
|
|
287902
|
-
|
|
287903
|
-
|
|
287904
|
-
|
|
287905
|
-
|
|
287906
|
-
|
|
287907
|
-
|
|
287908
|
-
|
|
287909
|
-
|
|
287910
|
-
|
|
287911
|
-
|
|
287912
|
-
|
|
287913
|
-
|
|
287914
|
-
}
|
|
287915
|
-
let privateKey;
|
|
287916
|
-
if (webcrypto_isCryptoKey(privateKee)) {
|
|
287917
|
-
checkEncCryptoKey(privateKee, 'ECDH', 'deriveBits');
|
|
287918
|
-
privateKey = external_node_crypto_.KeyObject.from(privateKee);
|
|
287974
|
+
function lengthAndInput(input) {
|
|
287975
|
+
return concat(uint32be(input.length), input);
|
|
287976
|
+
}
|
|
287977
|
+
async function concatKdf(secret, bits, value) {
|
|
287978
|
+
const iterations = Math.ceil((bits >> 3) / 32);
|
|
287979
|
+
const res = new Uint8Array(iterations * 32);
|
|
287980
|
+
for (let iter = 0; iter < iterations; iter++) {
|
|
287981
|
+
const buf = new Uint8Array(4 + secret.length + value.length);
|
|
287982
|
+
buf.set(uint32be(iter + 1));
|
|
287983
|
+
buf.set(secret, 4);
|
|
287984
|
+
buf.set(value, 4 + secret.length);
|
|
287985
|
+
res.set(await digest('sha256', buf), iter * 32);
|
|
287919
287986
|
}
|
|
287920
|
-
|
|
287921
|
-
|
|
287987
|
+
return res.slice(0, bits >> 3);
|
|
287988
|
+
}
|
|
287989
|
+
async function deriveKey(publicKey, privateKey, algorithm, keyLength, apu = new Uint8Array(0), apv = new Uint8Array(0)) {
|
|
287990
|
+
crypto_key_checkEncCryptoKey(publicKey, 'ECDH');
|
|
287991
|
+
crypto_key_checkEncCryptoKey(privateKey, 'ECDH', 'deriveBits');
|
|
287992
|
+
const value = concat(lengthAndInput(buffer_utils_encoder.encode(algorithm)), lengthAndInput(apu), lengthAndInput(apv), uint32be(keyLength));
|
|
287993
|
+
let length;
|
|
287994
|
+
if (publicKey.algorithm.name === 'X25519') {
|
|
287995
|
+
length = 256;
|
|
287922
287996
|
}
|
|
287923
287997
|
else {
|
|
287924
|
-
|
|
287998
|
+
length =
|
|
287999
|
+
Math.ceil(parseInt(publicKey.algorithm.namedCurve.slice(-3), 10) / 8) << 3;
|
|
287925
288000
|
}
|
|
287926
|
-
const
|
|
287927
|
-
|
|
288001
|
+
const sharedSecret = new Uint8Array(await crypto.subtle.deriveBits({
|
|
288002
|
+
name: publicKey.algorithm.name,
|
|
288003
|
+
public: publicKey,
|
|
288004
|
+
}, privateKey, length));
|
|
287928
288005
|
return concatKdf(sharedSecret, keyLength, value);
|
|
287929
288006
|
}
|
|
287930
|
-
|
|
287931
|
-
|
|
287932
|
-
|
|
287933
|
-
|
|
287934
|
-
|
|
287935
|
-
|
|
287936
|
-
key = kee;
|
|
287937
|
-
}
|
|
287938
|
-
else {
|
|
287939
|
-
throw new TypeError(invalidKeyInput(kee, ...types));
|
|
287940
|
-
}
|
|
287941
|
-
switch (key.asymmetricKeyType) {
|
|
287942
|
-
case 'x25519':
|
|
287943
|
-
return ecdhes_generateKeyPair('x25519');
|
|
287944
|
-
case 'x448': {
|
|
287945
|
-
return ecdhes_generateKeyPair('x448');
|
|
287946
|
-
}
|
|
287947
|
-
case 'ec': {
|
|
287948
|
-
const namedCurve = getNamedCurve(key);
|
|
287949
|
-
return ecdhes_generateKeyPair('ec', { namedCurve });
|
|
287950
|
-
}
|
|
288007
|
+
function allowed(key) {
|
|
288008
|
+
switch (key.algorithm.namedCurve) {
|
|
288009
|
+
case 'P-256':
|
|
288010
|
+
case 'P-384':
|
|
288011
|
+
case 'P-521':
|
|
288012
|
+
return true;
|
|
287951
288013
|
default:
|
|
287952
|
-
|
|
288014
|
+
return key.algorithm.name === 'X25519';
|
|
287953
288015
|
}
|
|
287954
288016
|
}
|
|
287955
|
-
const ecdhAllowed = (key) => ['P-256', 'P-384', 'P-521', 'X25519', 'X448'].includes(get_named_curve(key));
|
|
287956
|
-
|
|
287957
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/node/esm/lib/check_p2s.js
|
|
287958
|
-
|
|
287959
|
-
function check_p2s_checkP2s(p2s) {
|
|
287960
|
-
if (!(p2s instanceof Uint8Array) || p2s.length < 8) {
|
|
287961
|
-
throw new JWEInvalid('PBES2 Salt Input must be 8 or more octets');
|
|
287962
|
-
}
|
|
287963
|
-
}
|
|
287964
|
-
|
|
287965
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/node/esm/runtime/pbes2kw.js
|
|
287966
|
-
|
|
287967
288017
|
|
|
288018
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/pbes2kw.js
|
|
287968
288019
|
|
|
287969
288020
|
|
|
287970
288021
|
|
|
287971
288022
|
|
|
287972
288023
|
|
|
287973
|
-
|
|
287974
|
-
|
|
287975
|
-
|
|
287976
|
-
|
|
287977
|
-
|
|
287978
|
-
const pbkdf2 = (0,external_node_util_namespaceObject.promisify)(external_node_crypto_.pbkdf2);
|
|
287979
|
-
function getPassword(key, alg) {
|
|
287980
|
-
if (is_key_object(key)) {
|
|
287981
|
-
return key.export();
|
|
287982
|
-
}
|
|
288024
|
+
function pbes2kw_getCryptoKey(key, alg) {
|
|
287983
288025
|
if (key instanceof Uint8Array) {
|
|
287984
|
-
return key;
|
|
287985
|
-
}
|
|
287986
|
-
if (webcrypto_isCryptoKey(key)) {
|
|
287987
|
-
checkEncCryptoKey(key, alg, 'deriveBits', 'deriveKey');
|
|
287988
|
-
return external_node_crypto_.KeyObject.from(key).export();
|
|
288026
|
+
return crypto.subtle.importKey('raw', key, 'PBKDF2', false, ['deriveBits']);
|
|
287989
288027
|
}
|
|
287990
|
-
|
|
288028
|
+
crypto_key_checkEncCryptoKey(key, alg, 'deriveBits');
|
|
288029
|
+
return key;
|
|
287991
288030
|
}
|
|
287992
|
-
const
|
|
287993
|
-
|
|
288031
|
+
const concatSalt = (alg, p2sInput) => concat(buffer_utils_encoder.encode(alg), new Uint8Array([0]), p2sInput);
|
|
288032
|
+
async function pbes2kw_deriveKey(p2s, alg, p2c, key) {
|
|
288033
|
+
if (!(p2s instanceof Uint8Array) || p2s.length < 8) {
|
|
288034
|
+
throw new JWEInvalid('PBES2 Salt Input must be 8 or more octets');
|
|
288035
|
+
}
|
|
287994
288036
|
const salt = concatSalt(alg, p2s);
|
|
287995
|
-
const keylen = parseInt(alg.slice(13, 16), 10)
|
|
287996
|
-
const
|
|
287997
|
-
|
|
287998
|
-
|
|
287999
|
-
|
|
288000
|
-
|
|
288001
|
-
|
|
288002
|
-
|
|
288003
|
-
|
|
288004
|
-
|
|
288005
|
-
|
|
288006
|
-
const
|
|
288007
|
-
|
|
288008
|
-
};
|
|
288009
|
-
|
|
288010
|
-
|
|
288037
|
+
const keylen = parseInt(alg.slice(13, 16), 10);
|
|
288038
|
+
const subtleAlg = {
|
|
288039
|
+
hash: `SHA-${alg.slice(8, 11)}`,
|
|
288040
|
+
iterations: p2c,
|
|
288041
|
+
name: 'PBKDF2',
|
|
288042
|
+
salt,
|
|
288043
|
+
};
|
|
288044
|
+
const cryptoKey = await pbes2kw_getCryptoKey(key, alg);
|
|
288045
|
+
return new Uint8Array(await crypto.subtle.deriveBits(subtleAlg, cryptoKey, keylen));
|
|
288046
|
+
}
|
|
288047
|
+
async function pbes2kw_wrap(alg, key, cek, p2c = 2048, p2s = crypto.getRandomValues(new Uint8Array(16))) {
|
|
288048
|
+
const derived = await pbes2kw_deriveKey(p2s, alg, p2c, key);
|
|
288049
|
+
const encryptedKey = await aeskw.wrap(alg.slice(-6), derived, cek);
|
|
288050
|
+
return { encryptedKey, p2c, p2s: b64u(p2s) };
|
|
288051
|
+
}
|
|
288052
|
+
async function pbes2kw_unwrap(alg, key, encryptedKey, p2c, p2s) {
|
|
288053
|
+
const derived = await pbes2kw_deriveKey(p2s, alg, p2c, key);
|
|
288054
|
+
return unwrap(alg.slice(-6), derived, encryptedKey);
|
|
288055
|
+
}
|
|
288011
288056
|
|
|
288012
|
-
|
|
288013
|
-
|
|
288014
|
-
|
|
288015
|
-
|
|
288016
|
-
|
|
288017
|
-
|
|
288018
|
-
else {
|
|
288019
|
-
modulusLength = Buffer.from(key.n, 'base64url').byteLength << 3;
|
|
288057
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/check_key_length.js
|
|
288058
|
+
/* harmony default export */ const check_key_length = ((alg, key) => {
|
|
288059
|
+
if (alg.startsWith('RS') || alg.startsWith('PS')) {
|
|
288060
|
+
const { modulusLength } = key.algorithm;
|
|
288061
|
+
if (typeof modulusLength !== 'number' || modulusLength < 2048) {
|
|
288062
|
+
throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`);
|
|
288020
288063
|
}
|
|
288021
288064
|
}
|
|
288022
|
-
catch { }
|
|
288023
|
-
if (typeof modulusLength !== 'number' || modulusLength < 2048) {
|
|
288024
|
-
throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`);
|
|
288025
|
-
}
|
|
288026
288065
|
});
|
|
288027
288066
|
|
|
288028
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/
|
|
288029
|
-
|
|
288030
|
-
|
|
288031
|
-
|
|
288067
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/rsaes.js
|
|
288032
288068
|
|
|
288033
288069
|
|
|
288034
288070
|
|
|
288035
|
-
|
|
288036
|
-
|
|
288037
|
-
const checkKey = (key, alg) => {
|
|
288038
|
-
if (key.asymmetricKeyType !== 'rsa') {
|
|
288039
|
-
throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa');
|
|
288040
|
-
}
|
|
288041
|
-
check_key_length(key, alg);
|
|
288042
|
-
};
|
|
288043
|
-
const RSA1_5 = (0,external_node_util_namespaceObject.deprecate)(() => external_node_crypto_.constants.RSA_PKCS1_PADDING, 'The RSA1_5 "alg" (JWE Algorithm) is deprecated and will be removed in the next major revision.');
|
|
288044
|
-
const resolvePadding = (alg) => {
|
|
288071
|
+
const subtleAlgorithm = (alg) => {
|
|
288045
288072
|
switch (alg) {
|
|
288046
288073
|
case 'RSA-OAEP':
|
|
288047
288074
|
case 'RSA-OAEP-256':
|
|
288048
288075
|
case 'RSA-OAEP-384':
|
|
288049
288076
|
case 'RSA-OAEP-512':
|
|
288050
|
-
return
|
|
288051
|
-
case 'RSA1_5':
|
|
288052
|
-
return RSA1_5();
|
|
288077
|
+
return 'RSA-OAEP';
|
|
288053
288078
|
default:
|
|
288054
|
-
|
|
288079
|
+
throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);
|
|
288055
288080
|
}
|
|
288056
288081
|
};
|
|
288057
|
-
|
|
288058
|
-
|
|
288059
|
-
|
|
288060
|
-
|
|
288061
|
-
|
|
288062
|
-
|
|
288063
|
-
|
|
288064
|
-
|
|
288065
|
-
|
|
288066
|
-
return 'sha512';
|
|
288067
|
-
default:
|
|
288068
|
-
return undefined;
|
|
288069
|
-
}
|
|
288070
|
-
};
|
|
288071
|
-
function rsaes_ensureKeyObject(key, alg, ...usages) {
|
|
288072
|
-
if (is_key_object(key)) {
|
|
288073
|
-
return key;
|
|
288074
|
-
}
|
|
288075
|
-
if (webcrypto_isCryptoKey(key)) {
|
|
288076
|
-
checkEncCryptoKey(key, alg, ...usages);
|
|
288077
|
-
return external_node_crypto_.KeyObject.from(key);
|
|
288078
|
-
}
|
|
288079
|
-
throw new TypeError(invalid_key_input(key, ...is_key_like_types));
|
|
288082
|
+
async function rsaes_encrypt(alg, key, cek) {
|
|
288083
|
+
checkEncCryptoKey(key, alg, 'encrypt');
|
|
288084
|
+
checkKeyLength(alg, key);
|
|
288085
|
+
return new Uint8Array(await crypto.subtle.encrypt(subtleAlgorithm(alg), key, cek));
|
|
288086
|
+
}
|
|
288087
|
+
async function rsaes_decrypt(alg, key, encryptedKey) {
|
|
288088
|
+
crypto_key_checkEncCryptoKey(key, alg, 'decrypt');
|
|
288089
|
+
check_key_length(alg, key);
|
|
288090
|
+
return new Uint8Array(await crypto.subtle.decrypt(subtleAlgorithm(alg), key, encryptedKey));
|
|
288080
288091
|
}
|
|
288081
|
-
const rsaes_encrypt = (alg, key, cek) => {
|
|
288082
|
-
const padding = resolvePadding(alg);
|
|
288083
|
-
const oaepHash = resolveOaepHash(alg);
|
|
288084
|
-
const keyObject = rsaes_ensureKeyObject(key, alg, 'wrapKey', 'encrypt');
|
|
288085
|
-
checkKey(keyObject, alg);
|
|
288086
|
-
return publicEncrypt({ key: keyObject, oaepHash, padding }, cek);
|
|
288087
|
-
};
|
|
288088
|
-
const rsaes_decrypt = (alg, key, encryptedKey) => {
|
|
288089
|
-
const padding = resolvePadding(alg);
|
|
288090
|
-
const oaepHash = resolveOaepHash(alg);
|
|
288091
|
-
const keyObject = rsaes_ensureKeyObject(key, alg, 'unwrapKey', 'decrypt');
|
|
288092
|
-
checkKey(keyObject, alg);
|
|
288093
|
-
return (0,external_node_crypto_.privateDecrypt)({ key: keyObject, oaepHash, padding }, encryptedKey);
|
|
288094
|
-
};
|
|
288095
|
-
|
|
288096
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/node/esm/runtime/normalize_key.js
|
|
288097
|
-
/* harmony default export */ const normalize_key = ({});
|
|
288098
|
-
|
|
288099
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/node/esm/lib/cek.js
|
|
288100
288092
|
|
|
288093
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/cek.js
|
|
288101
288094
|
|
|
288102
288095
|
function cek_bitLength(alg) {
|
|
288103
288096
|
switch (alg) {
|
|
@@ -288113,22 +288106,108 @@ function cek_bitLength(alg) {
|
|
|
288113
288106
|
case 'A256CBC-HS512':
|
|
288114
288107
|
return 512;
|
|
288115
288108
|
default:
|
|
288116
|
-
throw new
|
|
288109
|
+
throw new JOSENotSupported(`Unsupported JWE Algorithm: ${alg}`);
|
|
288117
288110
|
}
|
|
288118
288111
|
}
|
|
288119
|
-
/* harmony default export */ const lib_cek = ((alg) =>
|
|
288112
|
+
/* harmony default export */ const lib_cek = ((alg) => crypto.getRandomValues(new Uint8Array(cek_bitLength(alg) >> 3)));
|
|
288120
288113
|
|
|
288121
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/
|
|
288114
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/jwk_to_key.js
|
|
288122
288115
|
|
|
288123
|
-
|
|
288124
|
-
|
|
288125
|
-
|
|
288116
|
+
function subtleMapping(jwk) {
|
|
288117
|
+
let algorithm;
|
|
288118
|
+
let keyUsages;
|
|
288119
|
+
switch (jwk.kty) {
|
|
288120
|
+
case 'RSA': {
|
|
288121
|
+
switch (jwk.alg) {
|
|
288122
|
+
case 'PS256':
|
|
288123
|
+
case 'PS384':
|
|
288124
|
+
case 'PS512':
|
|
288125
|
+
algorithm = { name: 'RSA-PSS', hash: `SHA-${jwk.alg.slice(-3)}` };
|
|
288126
|
+
keyUsages = jwk.d ? ['sign'] : ['verify'];
|
|
288127
|
+
break;
|
|
288128
|
+
case 'RS256':
|
|
288129
|
+
case 'RS384':
|
|
288130
|
+
case 'RS512':
|
|
288131
|
+
algorithm = { name: 'RSASSA-PKCS1-v1_5', hash: `SHA-${jwk.alg.slice(-3)}` };
|
|
288132
|
+
keyUsages = jwk.d ? ['sign'] : ['verify'];
|
|
288133
|
+
break;
|
|
288134
|
+
case 'RSA-OAEP':
|
|
288135
|
+
case 'RSA-OAEP-256':
|
|
288136
|
+
case 'RSA-OAEP-384':
|
|
288137
|
+
case 'RSA-OAEP-512':
|
|
288138
|
+
algorithm = {
|
|
288139
|
+
name: 'RSA-OAEP',
|
|
288140
|
+
hash: `SHA-${parseInt(jwk.alg.slice(-3), 10) || 1}`,
|
|
288141
|
+
};
|
|
288142
|
+
keyUsages = jwk.d ? ['decrypt', 'unwrapKey'] : ['encrypt', 'wrapKey'];
|
|
288143
|
+
break;
|
|
288144
|
+
default:
|
|
288145
|
+
throw new JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
|
|
288146
|
+
}
|
|
288147
|
+
break;
|
|
288148
|
+
}
|
|
288149
|
+
case 'EC': {
|
|
288150
|
+
switch (jwk.alg) {
|
|
288151
|
+
case 'ES256':
|
|
288152
|
+
algorithm = { name: 'ECDSA', namedCurve: 'P-256' };
|
|
288153
|
+
keyUsages = jwk.d ? ['sign'] : ['verify'];
|
|
288154
|
+
break;
|
|
288155
|
+
case 'ES384':
|
|
288156
|
+
algorithm = { name: 'ECDSA', namedCurve: 'P-384' };
|
|
288157
|
+
keyUsages = jwk.d ? ['sign'] : ['verify'];
|
|
288158
|
+
break;
|
|
288159
|
+
case 'ES512':
|
|
288160
|
+
algorithm = { name: 'ECDSA', namedCurve: 'P-521' };
|
|
288161
|
+
keyUsages = jwk.d ? ['sign'] : ['verify'];
|
|
288162
|
+
break;
|
|
288163
|
+
case 'ECDH-ES':
|
|
288164
|
+
case 'ECDH-ES+A128KW':
|
|
288165
|
+
case 'ECDH-ES+A192KW':
|
|
288166
|
+
case 'ECDH-ES+A256KW':
|
|
288167
|
+
algorithm = { name: 'ECDH', namedCurve: jwk.crv };
|
|
288168
|
+
keyUsages = jwk.d ? ['deriveBits'] : [];
|
|
288169
|
+
break;
|
|
288170
|
+
default:
|
|
288171
|
+
throw new JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
|
|
288172
|
+
}
|
|
288173
|
+
break;
|
|
288174
|
+
}
|
|
288175
|
+
case 'OKP': {
|
|
288176
|
+
switch (jwk.alg) {
|
|
288177
|
+
case 'Ed25519':
|
|
288178
|
+
case 'EdDSA':
|
|
288179
|
+
algorithm = { name: 'Ed25519' };
|
|
288180
|
+
keyUsages = jwk.d ? ['sign'] : ['verify'];
|
|
288181
|
+
break;
|
|
288182
|
+
case 'ECDH-ES':
|
|
288183
|
+
case 'ECDH-ES+A128KW':
|
|
288184
|
+
case 'ECDH-ES+A192KW':
|
|
288185
|
+
case 'ECDH-ES+A256KW':
|
|
288186
|
+
algorithm = { name: jwk.crv };
|
|
288187
|
+
keyUsages = jwk.d ? ['deriveBits'] : [];
|
|
288188
|
+
break;
|
|
288189
|
+
default:
|
|
288190
|
+
throw new JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
|
|
288191
|
+
}
|
|
288192
|
+
break;
|
|
288193
|
+
}
|
|
288194
|
+
default:
|
|
288195
|
+
throw new JOSENotSupported('Invalid or unsupported JWK "kty" (Key Type) Parameter value');
|
|
288126
288196
|
}
|
|
288127
|
-
return
|
|
288128
|
-
}
|
|
288129
|
-
/* harmony default export */ const jwk_to_key = (
|
|
288197
|
+
return { algorithm, keyUsages };
|
|
288198
|
+
}
|
|
288199
|
+
/* harmony default export */ const jwk_to_key = (async (jwk) => {
|
|
288200
|
+
if (!jwk.alg) {
|
|
288201
|
+
throw new TypeError('"alg" argument is required when "jwk.alg" is not present');
|
|
288202
|
+
}
|
|
288203
|
+
const { algorithm, keyUsages } = subtleMapping(jwk);
|
|
288204
|
+
const keyData = { ...jwk };
|
|
288205
|
+
delete keyData.alg;
|
|
288206
|
+
delete keyData.use;
|
|
288207
|
+
return crypto.subtle.importKey('jwk', keyData, algorithm, jwk.ext ?? (jwk.d ? false : true), jwk.key_ops ?? keyUsages);
|
|
288208
|
+
});
|
|
288130
288209
|
|
|
288131
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/
|
|
288210
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/key/import.js
|
|
288132
288211
|
|
|
288133
288212
|
|
|
288134
288213
|
|
|
@@ -288152,11 +288231,13 @@ async function importPKCS8(pkcs8, alg, options) {
|
|
|
288152
288231
|
}
|
|
288153
288232
|
return fromPKCS8(pkcs8, alg, options);
|
|
288154
288233
|
}
|
|
288155
|
-
async function importJWK(jwk, alg) {
|
|
288156
|
-
if (!
|
|
288234
|
+
async function importJWK(jwk, alg, options) {
|
|
288235
|
+
if (!is_object(jwk)) {
|
|
288157
288236
|
throw new TypeError('JWK must be an object');
|
|
288158
288237
|
}
|
|
288159
|
-
|
|
288238
|
+
let ext;
|
|
288239
|
+
alg ??= jwk.alg;
|
|
288240
|
+
ext ??= options?.extractable ?? jwk.ext;
|
|
288160
288241
|
switch (jwk.kty) {
|
|
288161
288242
|
case 'oct':
|
|
288162
288243
|
if (typeof jwk.k !== 'string' || !jwk.k) {
|
|
@@ -288164,97 +288245,18 @@ async function importJWK(jwk, alg) {
|
|
|
288164
288245
|
}
|
|
288165
288246
|
return decode(jwk.k);
|
|
288166
288247
|
case 'RSA':
|
|
288167
|
-
if (jwk.oth !== undefined) {
|
|
288168
|
-
throw new
|
|
288248
|
+
if ('oth' in jwk && jwk.oth !== undefined) {
|
|
288249
|
+
throw new JOSENotSupported('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');
|
|
288169
288250
|
}
|
|
288170
288251
|
case 'EC':
|
|
288171
288252
|
case 'OKP':
|
|
288172
|
-
return jwk_to_key({ ...jwk, alg });
|
|
288253
|
+
return jwk_to_key({ ...jwk, alg, ext });
|
|
288173
288254
|
default:
|
|
288174
|
-
throw new
|
|
288255
|
+
throw new JOSENotSupported('Unsupported "kty" (Key Type) Parameter value');
|
|
288175
288256
|
}
|
|
288176
288257
|
}
|
|
288177
288258
|
|
|
288178
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/
|
|
288179
|
-
|
|
288180
|
-
|
|
288181
|
-
|
|
288182
|
-
const tag = (key) => key?.[Symbol.toStringTag];
|
|
288183
|
-
const jwkMatchesOp = (alg, key, usage) => {
|
|
288184
|
-
if (key.use !== undefined && key.use !== 'sig') {
|
|
288185
|
-
throw new TypeError('Invalid key for this operation, when present its use must be sig');
|
|
288186
|
-
}
|
|
288187
|
-
if (key.key_ops !== undefined && key.key_ops.includes?.(usage) !== true) {
|
|
288188
|
-
throw new TypeError(`Invalid key for this operation, when present its key_ops must include ${usage}`);
|
|
288189
|
-
}
|
|
288190
|
-
if (key.alg !== undefined && key.alg !== alg) {
|
|
288191
|
-
throw new TypeError(`Invalid key for this operation, when present its alg must be ${alg}`);
|
|
288192
|
-
}
|
|
288193
|
-
return true;
|
|
288194
|
-
};
|
|
288195
|
-
const symmetricTypeCheck = (alg, key, usage, allowJwk) => {
|
|
288196
|
-
if (key instanceof Uint8Array)
|
|
288197
|
-
return;
|
|
288198
|
-
if (allowJwk && isJWK(key)) {
|
|
288199
|
-
if (isSecretJWK(key) && jwkMatchesOp(alg, key, usage))
|
|
288200
|
-
return;
|
|
288201
|
-
throw new TypeError(`JSON Web Key for symmetric algorithms must have JWK "kty" (Key Type) equal to "oct" and the JWK "k" (Key Value) present`);
|
|
288202
|
-
}
|
|
288203
|
-
if (!is_key_like(key)) {
|
|
288204
|
-
throw new TypeError(withAlg(alg, key, ...is_key_like_types, 'Uint8Array', allowJwk ? 'JSON Web Key' : null));
|
|
288205
|
-
}
|
|
288206
|
-
if (key.type !== 'secret') {
|
|
288207
|
-
throw new TypeError(`${tag(key)} instances for symmetric algorithms must be of type "secret"`);
|
|
288208
|
-
}
|
|
288209
|
-
};
|
|
288210
|
-
const asymmetricTypeCheck = (alg, key, usage, allowJwk) => {
|
|
288211
|
-
if (allowJwk && isJWK(key)) {
|
|
288212
|
-
switch (usage) {
|
|
288213
|
-
case 'sign':
|
|
288214
|
-
if (isPrivateJWK(key) && jwkMatchesOp(alg, key, usage))
|
|
288215
|
-
return;
|
|
288216
|
-
throw new TypeError(`JSON Web Key for this operation be a private JWK`);
|
|
288217
|
-
case 'verify':
|
|
288218
|
-
if (isPublicJWK(key) && jwkMatchesOp(alg, key, usage))
|
|
288219
|
-
return;
|
|
288220
|
-
throw new TypeError(`JSON Web Key for this operation be a public JWK`);
|
|
288221
|
-
}
|
|
288222
|
-
}
|
|
288223
|
-
if (!is_key_like(key)) {
|
|
288224
|
-
throw new TypeError(withAlg(alg, key, ...is_key_like_types, allowJwk ? 'JSON Web Key' : null));
|
|
288225
|
-
}
|
|
288226
|
-
if (key.type === 'secret') {
|
|
288227
|
-
throw new TypeError(`${tag(key)} instances for asymmetric algorithms must not be of type "secret"`);
|
|
288228
|
-
}
|
|
288229
|
-
if (usage === 'sign' && key.type === 'public') {
|
|
288230
|
-
throw new TypeError(`${tag(key)} instances for asymmetric algorithm signing must be of type "private"`);
|
|
288231
|
-
}
|
|
288232
|
-
if (usage === 'decrypt' && key.type === 'public') {
|
|
288233
|
-
throw new TypeError(`${tag(key)} instances for asymmetric algorithm decryption must be of type "private"`);
|
|
288234
|
-
}
|
|
288235
|
-
if (key.algorithm && usage === 'verify' && key.type === 'private') {
|
|
288236
|
-
throw new TypeError(`${tag(key)} instances for asymmetric algorithm verifying must be of type "public"`);
|
|
288237
|
-
}
|
|
288238
|
-
if (key.algorithm && usage === 'encrypt' && key.type === 'private') {
|
|
288239
|
-
throw new TypeError(`${tag(key)} instances for asymmetric algorithm encryption must be of type "public"`);
|
|
288240
|
-
}
|
|
288241
|
-
};
|
|
288242
|
-
function checkKeyType(allowJwk, alg, key, usage) {
|
|
288243
|
-
const symmetric = alg.startsWith('HS') ||
|
|
288244
|
-
alg === 'dir' ||
|
|
288245
|
-
alg.startsWith('PBES2') ||
|
|
288246
|
-
/^A\d{3}(?:GCM)?KW$/.test(alg);
|
|
288247
|
-
if (symmetric) {
|
|
288248
|
-
symmetricTypeCheck(alg, key, usage, allowJwk);
|
|
288249
|
-
}
|
|
288250
|
-
else {
|
|
288251
|
-
asymmetricTypeCheck(alg, key, usage, allowJwk);
|
|
288252
|
-
}
|
|
288253
|
-
}
|
|
288254
|
-
/* harmony default export */ const check_key_type = (checkKeyType.bind(undefined, false));
|
|
288255
|
-
const checkKeyTypeWithJwk = checkKeyType.bind(undefined, true);
|
|
288256
|
-
|
|
288257
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/node/esm/lib/aesgcmkw.js
|
|
288259
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/aesgcmkw.js
|
|
288258
288260
|
|
|
288259
288261
|
|
|
288260
288262
|
|
|
@@ -288263,17 +288265,16 @@ async function aesgcmkw_wrap(alg, key, cek, iv) {
|
|
|
288263
288265
|
const wrapped = await encrypt(jweAlgorithm, cek, key, iv, new Uint8Array(0));
|
|
288264
288266
|
return {
|
|
288265
288267
|
encryptedKey: wrapped.ciphertext,
|
|
288266
|
-
iv:
|
|
288267
|
-
tag:
|
|
288268
|
+
iv: b64u(wrapped.iv),
|
|
288269
|
+
tag: b64u(wrapped.tag),
|
|
288268
288270
|
};
|
|
288269
288271
|
}
|
|
288270
288272
|
async function aesgcmkw_unwrap(alg, key, encryptedKey, iv, tag) {
|
|
288271
288273
|
const jweAlgorithm = alg.slice(0, 7);
|
|
288272
|
-
return
|
|
288274
|
+
return decrypt(jweAlgorithm, key, encryptedKey, iv, tag, new Uint8Array(0));
|
|
288273
288275
|
}
|
|
288274
288276
|
|
|
288275
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/
|
|
288276
|
-
|
|
288277
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/decrypt_key_management.js
|
|
288277
288278
|
|
|
288278
288279
|
|
|
288279
288280
|
|
|
@@ -288285,9 +288286,7 @@ async function aesgcmkw_unwrap(alg, key, encryptedKey, iv, tag) {
|
|
|
288285
288286
|
|
|
288286
288287
|
|
|
288287
288288
|
|
|
288288
|
-
|
|
288289
|
-
check_key_type(alg, key, 'decrypt');
|
|
288290
|
-
key = (await normalize_key.normalizePrivateKey?.(key, alg)) || key;
|
|
288289
|
+
/* harmony default export */ const decrypt_key_management = (async (alg, key, encryptedKey, joseHeader, options) => {
|
|
288291
288290
|
switch (alg) {
|
|
288292
288291
|
case 'dir': {
|
|
288293
288292
|
if (encryptedKey !== undefined)
|
|
@@ -288300,11 +288299,13 @@ async function decryptKeyManagement(alg, key, encryptedKey, joseHeader, options)
|
|
|
288300
288299
|
case 'ECDH-ES+A128KW':
|
|
288301
288300
|
case 'ECDH-ES+A192KW':
|
|
288302
288301
|
case 'ECDH-ES+A256KW': {
|
|
288303
|
-
if (!
|
|
288302
|
+
if (!is_object(joseHeader.epk))
|
|
288304
288303
|
throw new JWEInvalid(`JOSE Header "epk" (Ephemeral Public Key) missing or invalid`);
|
|
288305
|
-
|
|
288306
|
-
|
|
288304
|
+
is_key_like_assertCryptoKey(key);
|
|
288305
|
+
if (!allowed(key))
|
|
288306
|
+
throw new JOSENotSupported('ECDH with the provided key is not allowed or not supported by your javascript runtime');
|
|
288307
288307
|
const epk = await importJWK(joseHeader.epk, alg);
|
|
288308
|
+
is_key_like_assertCryptoKey(epk);
|
|
288308
288309
|
let partyUInfo;
|
|
288309
288310
|
let partyVInfo;
|
|
288310
288311
|
if (joseHeader.apu !== undefined) {
|
|
@@ -288334,13 +288335,13 @@ async function decryptKeyManagement(alg, key, encryptedKey, joseHeader, options)
|
|
|
288334
288335
|
throw new JWEInvalid('JWE Encrypted Key missing');
|
|
288335
288336
|
return unwrap(alg.slice(-6), sharedSecret, encryptedKey);
|
|
288336
288337
|
}
|
|
288337
|
-
case 'RSA1_5':
|
|
288338
288338
|
case 'RSA-OAEP':
|
|
288339
288339
|
case 'RSA-OAEP-256':
|
|
288340
288340
|
case 'RSA-OAEP-384':
|
|
288341
288341
|
case 'RSA-OAEP-512': {
|
|
288342
288342
|
if (encryptedKey === undefined)
|
|
288343
288343
|
throw new JWEInvalid('JWE Encrypted Key missing');
|
|
288344
|
+
is_key_like_assertCryptoKey(key);
|
|
288344
288345
|
return rsaes_decrypt(alg, key, encryptedKey);
|
|
288345
288346
|
}
|
|
288346
288347
|
case 'PBES2-HS256+A128KW':
|
|
@@ -288362,7 +288363,7 @@ async function decryptKeyManagement(alg, key, encryptedKey, joseHeader, options)
|
|
|
288362
288363
|
catch {
|
|
288363
288364
|
throw new JWEInvalid('Failed to base64url decode the p2s');
|
|
288364
288365
|
}
|
|
288365
|
-
return
|
|
288366
|
+
return pbes2kw_unwrap(alg, key, encryptedKey, joseHeader.p2c, p2s);
|
|
288366
288367
|
}
|
|
288367
288368
|
case 'A128KW':
|
|
288368
288369
|
case 'A192KW':
|
|
@@ -288397,15 +288398,14 @@ async function decryptKeyManagement(alg, key, encryptedKey, joseHeader, options)
|
|
|
288397
288398
|
return aesgcmkw_unwrap(alg, key, encryptedKey, iv, tag);
|
|
288398
288399
|
}
|
|
288399
288400
|
default: {
|
|
288400
|
-
throw new
|
|
288401
|
+
throw new JOSENotSupported('Invalid or unsupported "alg" (JWE Algorithm) header value');
|
|
288401
288402
|
}
|
|
288402
288403
|
}
|
|
288403
|
-
}
|
|
288404
|
-
/* harmony default export */ const decrypt_key_management = (decryptKeyManagement);
|
|
288404
|
+
});
|
|
288405
288405
|
|
|
288406
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/
|
|
288406
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/validate_crit.js
|
|
288407
288407
|
|
|
288408
|
-
|
|
288408
|
+
/* harmony default export */ const validate_crit = ((Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) => {
|
|
288409
288409
|
if (joseHeader.crit !== undefined && protectedHeader?.crit === undefined) {
|
|
288410
288410
|
throw new Err('"crit" (Critical) Header Parameter MUST be integrity protected');
|
|
288411
288411
|
}
|
|
@@ -288426,7 +288426,7 @@ function validateCrit(Err, recognizedDefault, recognizedOption, protectedHeader,
|
|
|
288426
288426
|
}
|
|
288427
288427
|
for (const parameter of protectedHeader.crit) {
|
|
288428
288428
|
if (!recognized.has(parameter)) {
|
|
288429
|
-
throw new
|
|
288429
|
+
throw new JOSENotSupported(`Extension Header Parameter "${parameter}" is not recognized`);
|
|
288430
288430
|
}
|
|
288431
288431
|
if (joseHeader[parameter] === undefined) {
|
|
288432
288432
|
throw new Err(`Extension Header Parameter "${parameter}" is missing`);
|
|
@@ -288436,11 +288436,10 @@ function validateCrit(Err, recognizedDefault, recognizedOption, protectedHeader,
|
|
|
288436
288436
|
}
|
|
288437
288437
|
}
|
|
288438
288438
|
return new Set(protectedHeader.crit);
|
|
288439
|
-
}
|
|
288440
|
-
/* harmony default export */ const validate_crit = (validateCrit);
|
|
288439
|
+
});
|
|
288441
288440
|
|
|
288442
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/
|
|
288443
|
-
const
|
|
288441
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/validate_algorithms.js
|
|
288442
|
+
/* harmony default export */ const validate_algorithms = ((option, algorithms) => {
|
|
288444
288443
|
if (algorithms !== undefined &&
|
|
288445
288444
|
(!Array.isArray(algorithms) || algorithms.some((s) => typeof s !== 'string'))) {
|
|
288446
288445
|
throw new TypeError(`"${option}" option must be an array of strings`);
|
|
@@ -288449,10 +288448,320 @@ const validateAlgorithms = (option, algorithms) => {
|
|
|
288449
288448
|
return undefined;
|
|
288450
288449
|
}
|
|
288451
288450
|
return new Set(algorithms);
|
|
288451
|
+
});
|
|
288452
|
+
|
|
288453
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/is_jwk.js
|
|
288454
|
+
|
|
288455
|
+
function isJWK(key) {
|
|
288456
|
+
return is_object(key) && typeof key.kty === 'string';
|
|
288457
|
+
}
|
|
288458
|
+
function isPrivateJWK(key) {
|
|
288459
|
+
return key.kty !== 'oct' && typeof key.d === 'string';
|
|
288460
|
+
}
|
|
288461
|
+
function isPublicJWK(key) {
|
|
288462
|
+
return key.kty !== 'oct' && typeof key.d === 'undefined';
|
|
288463
|
+
}
|
|
288464
|
+
function isSecretJWK(key) {
|
|
288465
|
+
return key.kty === 'oct' && typeof key.k === 'string';
|
|
288466
|
+
}
|
|
288467
|
+
|
|
288468
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/normalize_key.js
|
|
288469
|
+
|
|
288470
|
+
|
|
288471
|
+
|
|
288472
|
+
|
|
288473
|
+
let cache;
|
|
288474
|
+
const handleJWK = async (key, jwk, alg, freeze = false) => {
|
|
288475
|
+
cache ||= new WeakMap();
|
|
288476
|
+
let cached = cache.get(key);
|
|
288477
|
+
if (cached?.[alg]) {
|
|
288478
|
+
return cached[alg];
|
|
288479
|
+
}
|
|
288480
|
+
const cryptoKey = await jwk_to_key({ ...jwk, alg });
|
|
288481
|
+
if (freeze)
|
|
288482
|
+
Object.freeze(key);
|
|
288483
|
+
if (!cached) {
|
|
288484
|
+
cache.set(key, { [alg]: cryptoKey });
|
|
288485
|
+
}
|
|
288486
|
+
else {
|
|
288487
|
+
cached[alg] = cryptoKey;
|
|
288488
|
+
}
|
|
288489
|
+
return cryptoKey;
|
|
288490
|
+
};
|
|
288491
|
+
const handleKeyObject = (keyObject, alg) => {
|
|
288492
|
+
cache ||= new WeakMap();
|
|
288493
|
+
let cached = cache.get(keyObject);
|
|
288494
|
+
if (cached?.[alg]) {
|
|
288495
|
+
return cached[alg];
|
|
288496
|
+
}
|
|
288497
|
+
const isPublic = keyObject.type === 'public';
|
|
288498
|
+
const extractable = isPublic ? true : false;
|
|
288499
|
+
let cryptoKey;
|
|
288500
|
+
if (keyObject.asymmetricKeyType === 'x25519') {
|
|
288501
|
+
switch (alg) {
|
|
288502
|
+
case 'ECDH-ES':
|
|
288503
|
+
case 'ECDH-ES+A128KW':
|
|
288504
|
+
case 'ECDH-ES+A192KW':
|
|
288505
|
+
case 'ECDH-ES+A256KW':
|
|
288506
|
+
break;
|
|
288507
|
+
default:
|
|
288508
|
+
throw new TypeError('given KeyObject instance cannot be used for this algorithm');
|
|
288509
|
+
}
|
|
288510
|
+
cryptoKey = keyObject.toCryptoKey(keyObject.asymmetricKeyType, extractable, isPublic ? [] : ['deriveBits']);
|
|
288511
|
+
}
|
|
288512
|
+
if (keyObject.asymmetricKeyType === 'ed25519') {
|
|
288513
|
+
if (alg !== 'EdDSA' && alg !== 'Ed25519') {
|
|
288514
|
+
throw new TypeError('given KeyObject instance cannot be used for this algorithm');
|
|
288515
|
+
}
|
|
288516
|
+
cryptoKey = keyObject.toCryptoKey(keyObject.asymmetricKeyType, extractable, [
|
|
288517
|
+
isPublic ? 'verify' : 'sign',
|
|
288518
|
+
]);
|
|
288519
|
+
}
|
|
288520
|
+
if (keyObject.asymmetricKeyType === 'rsa') {
|
|
288521
|
+
let hash;
|
|
288522
|
+
switch (alg) {
|
|
288523
|
+
case 'RSA-OAEP':
|
|
288524
|
+
hash = 'SHA-1';
|
|
288525
|
+
break;
|
|
288526
|
+
case 'RS256':
|
|
288527
|
+
case 'PS256':
|
|
288528
|
+
case 'RSA-OAEP-256':
|
|
288529
|
+
hash = 'SHA-256';
|
|
288530
|
+
break;
|
|
288531
|
+
case 'RS384':
|
|
288532
|
+
case 'PS384':
|
|
288533
|
+
case 'RSA-OAEP-384':
|
|
288534
|
+
hash = 'SHA-384';
|
|
288535
|
+
break;
|
|
288536
|
+
case 'RS512':
|
|
288537
|
+
case 'PS512':
|
|
288538
|
+
case 'RSA-OAEP-512':
|
|
288539
|
+
hash = 'SHA-512';
|
|
288540
|
+
break;
|
|
288541
|
+
default:
|
|
288542
|
+
throw new TypeError('given KeyObject instance cannot be used for this algorithm');
|
|
288543
|
+
}
|
|
288544
|
+
if (alg.startsWith('RSA-OAEP')) {
|
|
288545
|
+
return keyObject.toCryptoKey({
|
|
288546
|
+
name: 'RSA-OAEP',
|
|
288547
|
+
hash,
|
|
288548
|
+
}, extractable, isPublic ? ['encrypt'] : ['decrypt']);
|
|
288549
|
+
}
|
|
288550
|
+
cryptoKey = keyObject.toCryptoKey({
|
|
288551
|
+
name: alg.startsWith('PS') ? 'RSA-PSS' : 'RSASSA-PKCS1-v1_5',
|
|
288552
|
+
hash,
|
|
288553
|
+
}, extractable, [isPublic ? 'verify' : 'sign']);
|
|
288554
|
+
}
|
|
288555
|
+
if (keyObject.asymmetricKeyType === 'ec') {
|
|
288556
|
+
const nist = new Map([
|
|
288557
|
+
['prime256v1', 'P-256'],
|
|
288558
|
+
['secp384r1', 'P-384'],
|
|
288559
|
+
['secp521r1', 'P-521'],
|
|
288560
|
+
]);
|
|
288561
|
+
const namedCurve = nist.get(keyObject.asymmetricKeyDetails?.namedCurve);
|
|
288562
|
+
if (!namedCurve) {
|
|
288563
|
+
throw new TypeError('given KeyObject instance cannot be used for this algorithm');
|
|
288564
|
+
}
|
|
288565
|
+
if (alg === 'ES256' && namedCurve === 'P-256') {
|
|
288566
|
+
cryptoKey = keyObject.toCryptoKey({
|
|
288567
|
+
name: 'ECDSA',
|
|
288568
|
+
namedCurve,
|
|
288569
|
+
}, extractable, [isPublic ? 'verify' : 'sign']);
|
|
288570
|
+
}
|
|
288571
|
+
if (alg === 'ES384' && namedCurve === 'P-384') {
|
|
288572
|
+
cryptoKey = keyObject.toCryptoKey({
|
|
288573
|
+
name: 'ECDSA',
|
|
288574
|
+
namedCurve,
|
|
288575
|
+
}, extractable, [isPublic ? 'verify' : 'sign']);
|
|
288576
|
+
}
|
|
288577
|
+
if (alg === 'ES512' && namedCurve === 'P-521') {
|
|
288578
|
+
cryptoKey = keyObject.toCryptoKey({
|
|
288579
|
+
name: 'ECDSA',
|
|
288580
|
+
namedCurve,
|
|
288581
|
+
}, extractable, [isPublic ? 'verify' : 'sign']);
|
|
288582
|
+
}
|
|
288583
|
+
if (alg.startsWith('ECDH-ES')) {
|
|
288584
|
+
cryptoKey = keyObject.toCryptoKey({
|
|
288585
|
+
name: 'ECDH',
|
|
288586
|
+
namedCurve,
|
|
288587
|
+
}, extractable, isPublic ? [] : ['deriveBits']);
|
|
288588
|
+
}
|
|
288589
|
+
}
|
|
288590
|
+
if (!cryptoKey) {
|
|
288591
|
+
throw new TypeError('given KeyObject instance cannot be used for this algorithm');
|
|
288592
|
+
}
|
|
288593
|
+
if (!cached) {
|
|
288594
|
+
cache.set(keyObject, { [alg]: cryptoKey });
|
|
288595
|
+
}
|
|
288596
|
+
else {
|
|
288597
|
+
cached[alg] = cryptoKey;
|
|
288598
|
+
}
|
|
288599
|
+
return cryptoKey;
|
|
288452
288600
|
};
|
|
288453
|
-
/* harmony default export */ const
|
|
288601
|
+
/* harmony default export */ const normalize_key = (async (key, alg) => {
|
|
288602
|
+
if (key instanceof Uint8Array) {
|
|
288603
|
+
return key;
|
|
288604
|
+
}
|
|
288605
|
+
if (isCryptoKey(key)) {
|
|
288606
|
+
return key;
|
|
288607
|
+
}
|
|
288608
|
+
if (isKeyObject(key)) {
|
|
288609
|
+
if (key.type === 'secret') {
|
|
288610
|
+
return key.export();
|
|
288611
|
+
}
|
|
288612
|
+
if ('toCryptoKey' in key && typeof key.toCryptoKey === 'function') {
|
|
288613
|
+
try {
|
|
288614
|
+
return handleKeyObject(key, alg);
|
|
288615
|
+
}
|
|
288616
|
+
catch (err) {
|
|
288617
|
+
if (err instanceof TypeError) {
|
|
288618
|
+
throw err;
|
|
288619
|
+
}
|
|
288620
|
+
}
|
|
288621
|
+
}
|
|
288622
|
+
let jwk = key.export({ format: 'jwk' });
|
|
288623
|
+
return handleJWK(key, jwk, alg);
|
|
288624
|
+
}
|
|
288625
|
+
if (isJWK(key)) {
|
|
288626
|
+
if (key.k) {
|
|
288627
|
+
return decode(key.k);
|
|
288628
|
+
}
|
|
288629
|
+
return handleJWK(key, key, alg, true);
|
|
288630
|
+
}
|
|
288631
|
+
throw new Error('unreachable');
|
|
288632
|
+
});
|
|
288633
|
+
|
|
288634
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/lib/check_key_type.js
|
|
288635
|
+
|
|
288636
|
+
|
|
288637
|
+
|
|
288638
|
+
const tag = (key) => key?.[Symbol.toStringTag];
|
|
288639
|
+
const jwkMatchesOp = (alg, key, usage) => {
|
|
288640
|
+
if (key.use !== undefined) {
|
|
288641
|
+
let expected;
|
|
288642
|
+
switch (usage) {
|
|
288643
|
+
case 'sign':
|
|
288644
|
+
case 'verify':
|
|
288645
|
+
expected = 'sig';
|
|
288646
|
+
break;
|
|
288647
|
+
case 'encrypt':
|
|
288648
|
+
case 'decrypt':
|
|
288649
|
+
expected = 'enc';
|
|
288650
|
+
break;
|
|
288651
|
+
}
|
|
288652
|
+
if (key.use !== expected) {
|
|
288653
|
+
throw new TypeError(`Invalid key for this operation, its "use" must be "${expected}" when present`);
|
|
288654
|
+
}
|
|
288655
|
+
}
|
|
288656
|
+
if (key.alg !== undefined && key.alg !== alg) {
|
|
288657
|
+
throw new TypeError(`Invalid key for this operation, its "alg" must be "${alg}" when present`);
|
|
288658
|
+
}
|
|
288659
|
+
if (Array.isArray(key.key_ops)) {
|
|
288660
|
+
let expectedKeyOp;
|
|
288661
|
+
switch (true) {
|
|
288662
|
+
case usage === 'sign' || usage === 'verify':
|
|
288663
|
+
case alg === 'dir':
|
|
288664
|
+
case alg.includes('CBC-HS'):
|
|
288665
|
+
expectedKeyOp = usage;
|
|
288666
|
+
break;
|
|
288667
|
+
case alg.startsWith('PBES2'):
|
|
288668
|
+
expectedKeyOp = 'deriveBits';
|
|
288669
|
+
break;
|
|
288670
|
+
case /^A\d{3}(?:GCM)?(?:KW)?$/.test(alg):
|
|
288671
|
+
if (!alg.includes('GCM') && alg.endsWith('KW')) {
|
|
288672
|
+
expectedKeyOp = usage === 'encrypt' ? 'wrapKey' : 'unwrapKey';
|
|
288673
|
+
}
|
|
288674
|
+
else {
|
|
288675
|
+
expectedKeyOp = usage;
|
|
288676
|
+
}
|
|
288677
|
+
break;
|
|
288678
|
+
case usage === 'encrypt' && alg.startsWith('RSA'):
|
|
288679
|
+
expectedKeyOp = 'wrapKey';
|
|
288680
|
+
break;
|
|
288681
|
+
case usage === 'decrypt':
|
|
288682
|
+
expectedKeyOp = alg.startsWith('RSA') ? 'unwrapKey' : 'deriveBits';
|
|
288683
|
+
break;
|
|
288684
|
+
}
|
|
288685
|
+
if (expectedKeyOp && key.key_ops?.includes?.(expectedKeyOp) === false) {
|
|
288686
|
+
throw new TypeError(`Invalid key for this operation, its "key_ops" must include "${expectedKeyOp}" when present`);
|
|
288687
|
+
}
|
|
288688
|
+
}
|
|
288689
|
+
return true;
|
|
288690
|
+
};
|
|
288691
|
+
const symmetricTypeCheck = (alg, key, usage) => {
|
|
288692
|
+
if (key instanceof Uint8Array)
|
|
288693
|
+
return;
|
|
288694
|
+
if (isJWK(key)) {
|
|
288695
|
+
if (isSecretJWK(key) && jwkMatchesOp(alg, key, usage))
|
|
288696
|
+
return;
|
|
288697
|
+
throw new TypeError(`JSON Web Key for symmetric algorithms must have JWK "kty" (Key Type) equal to "oct" and the JWK "k" (Key Value) present`);
|
|
288698
|
+
}
|
|
288699
|
+
if (!is_key_like(key)) {
|
|
288700
|
+
throw new TypeError(withAlg(alg, key, 'CryptoKey', 'KeyObject', 'JSON Web Key', 'Uint8Array'));
|
|
288701
|
+
}
|
|
288702
|
+
if (key.type !== 'secret') {
|
|
288703
|
+
throw new TypeError(`${tag(key)} instances for symmetric algorithms must be of type "secret"`);
|
|
288704
|
+
}
|
|
288705
|
+
};
|
|
288706
|
+
const asymmetricTypeCheck = (alg, key, usage) => {
|
|
288707
|
+
if (isJWK(key)) {
|
|
288708
|
+
switch (usage) {
|
|
288709
|
+
case 'decrypt':
|
|
288710
|
+
case 'sign':
|
|
288711
|
+
if (isPrivateJWK(key) && jwkMatchesOp(alg, key, usage))
|
|
288712
|
+
return;
|
|
288713
|
+
throw new TypeError(`JSON Web Key for this operation be a private JWK`);
|
|
288714
|
+
case 'encrypt':
|
|
288715
|
+
case 'verify':
|
|
288716
|
+
if (isPublicJWK(key) && jwkMatchesOp(alg, key, usage))
|
|
288717
|
+
return;
|
|
288718
|
+
throw new TypeError(`JSON Web Key for this operation be a public JWK`);
|
|
288719
|
+
}
|
|
288720
|
+
}
|
|
288721
|
+
if (!is_key_like(key)) {
|
|
288722
|
+
throw new TypeError(withAlg(alg, key, 'CryptoKey', 'KeyObject', 'JSON Web Key'));
|
|
288723
|
+
}
|
|
288724
|
+
if (key.type === 'secret') {
|
|
288725
|
+
throw new TypeError(`${tag(key)} instances for asymmetric algorithms must not be of type "secret"`);
|
|
288726
|
+
}
|
|
288727
|
+
if (key.type === 'public') {
|
|
288728
|
+
switch (usage) {
|
|
288729
|
+
case 'sign':
|
|
288730
|
+
throw new TypeError(`${tag(key)} instances for asymmetric algorithm signing must be of type "private"`);
|
|
288731
|
+
case 'decrypt':
|
|
288732
|
+
throw new TypeError(`${tag(key)} instances for asymmetric algorithm decryption must be of type "private"`);
|
|
288733
|
+
default:
|
|
288734
|
+
break;
|
|
288735
|
+
}
|
|
288736
|
+
}
|
|
288737
|
+
if (key.type === 'private') {
|
|
288738
|
+
switch (usage) {
|
|
288739
|
+
case 'verify':
|
|
288740
|
+
throw new TypeError(`${tag(key)} instances for asymmetric algorithm verifying must be of type "public"`);
|
|
288741
|
+
case 'encrypt':
|
|
288742
|
+
throw new TypeError(`${tag(key)} instances for asymmetric algorithm encryption must be of type "public"`);
|
|
288743
|
+
default:
|
|
288744
|
+
break;
|
|
288745
|
+
}
|
|
288746
|
+
}
|
|
288747
|
+
};
|
|
288748
|
+
/* harmony default export */ const check_key_type = ((alg, key, usage) => {
|
|
288749
|
+
const symmetric = alg.startsWith('HS') ||
|
|
288750
|
+
alg === 'dir' ||
|
|
288751
|
+
alg.startsWith('PBES2') ||
|
|
288752
|
+
/^A(?:128|192|256)(?:GCM)?(?:KW)?$/.test(alg) ||
|
|
288753
|
+
/^A(?:128|192|256)CBC-HS(?:256|384|512)$/.test(alg);
|
|
288754
|
+
if (symmetric) {
|
|
288755
|
+
symmetricTypeCheck(alg, key, usage);
|
|
288756
|
+
}
|
|
288757
|
+
else {
|
|
288758
|
+
asymmetricTypeCheck(alg, key, usage);
|
|
288759
|
+
}
|
|
288760
|
+
});
|
|
288761
|
+
|
|
288762
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/jwe/flattened/decrypt.js
|
|
288763
|
+
|
|
288454
288764
|
|
|
288455
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/node/esm/jwe/flattened/decrypt.js
|
|
288456
288765
|
|
|
288457
288766
|
|
|
288458
288767
|
|
|
@@ -288464,7 +288773,7 @@ const validateAlgorithms = (option, algorithms) => {
|
|
|
288464
288773
|
|
|
288465
288774
|
|
|
288466
288775
|
async function flattenedDecrypt(jwe, key, options) {
|
|
288467
|
-
if (!
|
|
288776
|
+
if (!is_object(jwe)) {
|
|
288468
288777
|
throw new JWEInvalid('Flattened JWE must be an object');
|
|
288469
288778
|
}
|
|
288470
288779
|
if (jwe.protected === undefined && jwe.header === undefined && jwe.unprotected === undefined) {
|
|
@@ -288488,10 +288797,10 @@ async function flattenedDecrypt(jwe, key, options) {
|
|
|
288488
288797
|
if (jwe.aad !== undefined && typeof jwe.aad !== 'string') {
|
|
288489
288798
|
throw new JWEInvalid('JWE AAD incorrect type');
|
|
288490
288799
|
}
|
|
288491
|
-
if (jwe.header !== undefined && !
|
|
288800
|
+
if (jwe.header !== undefined && !is_object(jwe.header)) {
|
|
288492
288801
|
throw new JWEInvalid('JWE Shared Unprotected Header incorrect type');
|
|
288493
288802
|
}
|
|
288494
|
-
if (jwe.unprotected !== undefined && !
|
|
288803
|
+
if (jwe.unprotected !== undefined && !is_object(jwe.unprotected)) {
|
|
288495
288804
|
throw new JWEInvalid('JWE Per-Recipient Unprotected Header incorrect type');
|
|
288496
288805
|
}
|
|
288497
288806
|
let parsedProt;
|
|
@@ -288514,7 +288823,7 @@ async function flattenedDecrypt(jwe, key, options) {
|
|
|
288514
288823
|
};
|
|
288515
288824
|
validate_crit(JWEInvalid, new Map(), options?.crit, parsedProt, joseHeader);
|
|
288516
288825
|
if (joseHeader.zip !== undefined) {
|
|
288517
|
-
throw new
|
|
288826
|
+
throw new JOSENotSupported('JWE "zip" (Compression Algorithm) Header Parameter is not supported.');
|
|
288518
288827
|
}
|
|
288519
288828
|
const { alg, enc } = joseHeader;
|
|
288520
288829
|
if (typeof alg !== 'string' || !alg) {
|
|
@@ -288547,12 +288856,14 @@ async function flattenedDecrypt(jwe, key, options) {
|
|
|
288547
288856
|
key = await key(parsedProt, jwe);
|
|
288548
288857
|
resolvedKey = true;
|
|
288549
288858
|
}
|
|
288859
|
+
check_key_type(alg === 'dir' ? enc : alg, key, 'decrypt');
|
|
288860
|
+
const k = await normalize_key(key, alg);
|
|
288550
288861
|
let cek;
|
|
288551
288862
|
try {
|
|
288552
|
-
cek = await decrypt_key_management(alg,
|
|
288863
|
+
cek = await decrypt_key_management(alg, k, encryptedKey, joseHeader, options);
|
|
288553
288864
|
}
|
|
288554
288865
|
catch (err) {
|
|
288555
|
-
if (err instanceof TypeError || err instanceof JWEInvalid || err instanceof
|
|
288866
|
+
if (err instanceof TypeError || err instanceof JWEInvalid || err instanceof JOSENotSupported) {
|
|
288556
288867
|
throw err;
|
|
288557
288868
|
}
|
|
288558
288869
|
cek = lib_cek(enc);
|
|
@@ -288578,7 +288889,7 @@ async function flattenedDecrypt(jwe, key, options) {
|
|
|
288578
288889
|
const protectedHeader = buffer_utils_encoder.encode(jwe.protected ?? '');
|
|
288579
288890
|
let additionalData;
|
|
288580
288891
|
if (jwe.aad !== undefined) {
|
|
288581
|
-
additionalData =
|
|
288892
|
+
additionalData = concat(protectedHeader, buffer_utils_encoder.encode('.'), buffer_utils_encoder.encode(jwe.aad));
|
|
288582
288893
|
}
|
|
288583
288894
|
else {
|
|
288584
288895
|
additionalData = protectedHeader;
|
|
@@ -288590,7 +288901,7 @@ async function flattenedDecrypt(jwe, key, options) {
|
|
|
288590
288901
|
catch {
|
|
288591
288902
|
throw new JWEInvalid('Failed to base64url decode the ciphertext');
|
|
288592
288903
|
}
|
|
288593
|
-
const plaintext = await
|
|
288904
|
+
const plaintext = await decrypt(enc, cek, ciphertext, iv, tag, additionalData);
|
|
288594
288905
|
const result = { plaintext };
|
|
288595
288906
|
if (jwe.protected !== undefined) {
|
|
288596
288907
|
result.protectedHeader = parsedProt;
|
|
@@ -288610,12 +288921,12 @@ async function flattenedDecrypt(jwe, key, options) {
|
|
|
288610
288921
|
result.unprotectedHeader = jwe.header;
|
|
288611
288922
|
}
|
|
288612
288923
|
if (resolvedKey) {
|
|
288613
|
-
return { ...result, key };
|
|
288924
|
+
return { ...result, key: k };
|
|
288614
288925
|
}
|
|
288615
288926
|
return result;
|
|
288616
288927
|
}
|
|
288617
288928
|
|
|
288618
|
-
;// CONCATENATED MODULE: ../../node_modules/jose/dist/
|
|
288929
|
+
;// CONCATENATED MODULE: ../../node_modules/jose/dist/webapi/jwe/compact/decrypt.js
|
|
288619
288930
|
|
|
288620
288931
|
|
|
288621
288932
|
|
|
@@ -288652,7 +288963,7 @@ let headers;
|
|
|
288652
288963
|
let build_USER_AGENT;
|
|
288653
288964
|
if (typeof navigator === 'undefined' || !navigator.userAgent?.startsWith?.('Mozilla/5.0 ')) {
|
|
288654
288965
|
const NAME = 'openid-client';
|
|
288655
|
-
const VERSION = 'v6.
|
|
288966
|
+
const VERSION = 'v6.3.4';
|
|
288656
288967
|
build_USER_AGENT = `${NAME}/${VERSION}`;
|
|
288657
288968
|
headers = { 'user-agent': build_USER_AGENT };
|
|
288658
288969
|
}
|
|
@@ -288977,11 +289288,10 @@ function selectCryptoKeyForDecryption(keys, alg, kid, epk) {
|
|
|
288977
289288
|
return key.key;
|
|
288978
289289
|
}
|
|
288979
289290
|
async function build_decrypt(keys, jwe, contentEncryptionAlgorithms, keyManagementAlgorithms) {
|
|
288980
|
-
return build_decoder.decode((await compactDecrypt(jwe,
|
|
289291
|
+
return build_decoder.decode((await compactDecrypt(jwe, (header) => {
|
|
288981
289292
|
const { kid, alg, epk } = header;
|
|
288982
289293
|
return selectCryptoKeyForDecryption(keys, alg, kid, epk);
|
|
288983
|
-
}, { keyManagementAlgorithms, contentEncryptionAlgorithms })
|
|
288984
|
-
.catch((err) => {
|
|
289294
|
+
}, { keyManagementAlgorithms, contentEncryptionAlgorithms }).catch((err) => {
|
|
288985
289295
|
if (err instanceof JOSEError) {
|
|
288986
289296
|
throw e('decryption failed', err, 'OAUTH_DECRYPTION_FAILED');
|
|
288987
289297
|
}
|
|
@@ -289187,6 +289497,80 @@ async function initiateDeviceAuthorization(config, parameters) {
|
|
|
289187
289497
|
.then((response) => processDeviceAuthorizationResponse(as, c, response))
|
|
289188
289498
|
.catch(errorHandler);
|
|
289189
289499
|
}
|
|
289500
|
+
async function initiateBackchannelAuthentication(config, parameters) {
|
|
289501
|
+
checkConfig(config);
|
|
289502
|
+
const { as, c, auth, fetch, tlsOnly, timeout } = build_int(config);
|
|
289503
|
+
return backchannelAuthenticationRequest(as, c, auth, parameters, {
|
|
289504
|
+
[customFetch]: fetch,
|
|
289505
|
+
[allowInsecureRequests]: !tlsOnly,
|
|
289506
|
+
headers: new Headers(headers),
|
|
289507
|
+
signal: build_signal(timeout),
|
|
289508
|
+
})
|
|
289509
|
+
.then((response) => processBackchannelAuthenticationResponse(as, c, response))
|
|
289510
|
+
.catch(errorHandler);
|
|
289511
|
+
}
|
|
289512
|
+
async function pollBackchannelAuthenticationGrant(config, backchannelAuthenticationResponse, parameters, options) {
|
|
289513
|
+
checkConfig(config);
|
|
289514
|
+
parameters = new URLSearchParams(parameters);
|
|
289515
|
+
let interval = backchannelAuthenticationResponse.interval ?? 5;
|
|
289516
|
+
const pollingSignal = options?.signal ??
|
|
289517
|
+
AbortSignal.timeout(backchannelAuthenticationResponse.expires_in * 1000);
|
|
289518
|
+
try {
|
|
289519
|
+
pollingSignal.throwIfAborted();
|
|
289520
|
+
}
|
|
289521
|
+
catch (err) {
|
|
289522
|
+
errorHandler(err);
|
|
289523
|
+
}
|
|
289524
|
+
await wait(interval);
|
|
289525
|
+
const { as, c, auth, fetch, tlsOnly, nonRepudiation, timeout, decrypt } = build_int(config);
|
|
289526
|
+
const response = await backchannelAuthenticationGrantRequest(as, c, auth, backchannelAuthenticationResponse.auth_req_id, {
|
|
289527
|
+
[customFetch]: fetch,
|
|
289528
|
+
[allowInsecureRequests]: !tlsOnly,
|
|
289529
|
+
additionalParameters: parameters,
|
|
289530
|
+
DPoP: options?.DPoP,
|
|
289531
|
+
headers: new Headers(headers),
|
|
289532
|
+
signal: pollingSignal.aborted ? pollingSignal : build_signal(timeout),
|
|
289533
|
+
})
|
|
289534
|
+
.catch(errorHandler);
|
|
289535
|
+
const p = processBackchannelAuthenticationGrantResponse(as, c, response, {
|
|
289536
|
+
[jweDecrypt]: decrypt,
|
|
289537
|
+
});
|
|
289538
|
+
let result;
|
|
289539
|
+
try {
|
|
289540
|
+
result = await p;
|
|
289541
|
+
}
|
|
289542
|
+
catch (err) {
|
|
289543
|
+
if (retryable(err, options)) {
|
|
289544
|
+
return pollBackchannelAuthenticationGrant(config, {
|
|
289545
|
+
...backchannelAuthenticationResponse,
|
|
289546
|
+
interval,
|
|
289547
|
+
}, parameters, {
|
|
289548
|
+
...options,
|
|
289549
|
+
signal: pollingSignal,
|
|
289550
|
+
flag: retry,
|
|
289551
|
+
});
|
|
289552
|
+
}
|
|
289553
|
+
if (err instanceof ResponseBodyError) {
|
|
289554
|
+
switch (err.error) {
|
|
289555
|
+
case 'slow_down':
|
|
289556
|
+
interval += 5;
|
|
289557
|
+
case 'authorization_pending':
|
|
289558
|
+
return pollBackchannelAuthenticationGrant(config, {
|
|
289559
|
+
...backchannelAuthenticationResponse,
|
|
289560
|
+
interval,
|
|
289561
|
+
}, parameters, {
|
|
289562
|
+
...options,
|
|
289563
|
+
signal: pollingSignal,
|
|
289564
|
+
flag: undefined,
|
|
289565
|
+
});
|
|
289566
|
+
}
|
|
289567
|
+
}
|
|
289568
|
+
errorHandler(err);
|
|
289569
|
+
}
|
|
289570
|
+
result.id_token && (await nonRepudiation?.(response));
|
|
289571
|
+
addHelpers(result);
|
|
289572
|
+
return result;
|
|
289573
|
+
}
|
|
289190
289574
|
function build_allowInsecureRequests(config) {
|
|
289191
289575
|
build_int(config).tlsOnly = false;
|
|
289192
289576
|
}
|