Socket
Socket
Sign inDemoInstall

@aws-sdk/middleware-stack

Package Overview
Dependencies
Maintainers
5
Versions
120
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@aws-sdk/middleware-stack - npm Package Compare versions

Comparing version 1.0.0-gamma.4 to 1.0.0-gamma.5

dist/es/index.d.ts

17

CHANGELOG.md

@@ -6,2 +6,19 @@ # Change Log

# [1.0.0-gamma.5](https://github.com/aws/aws-sdk-js-v3/compare/@aws-sdk/middleware-stack@1.0.0-gamma.4...@aws-sdk/middleware-stack@1.0.0-gamma.5) (2020-08-04)
### Features
* build command ([#1407](https://github.com/aws/aws-sdk-js-v3/issues/1407)) ([81b2e87](https://github.com/aws/aws-sdk-js-v3/commit/81b2e87067642a8cea8649cbdb2c342ca9fb6ac6))
* refactor middleware stack ([#1398](https://github.com/aws/aws-sdk-js-v3/issues/1398)) ([9fedaa9](https://github.com/aws/aws-sdk-js-v3/commit/9fedaa9696ff1ecf5d1e92b28b34d573583a7842))
### BREAKING CHANGES
* addRelativeTo() now doesn't require step in options. The middleware will be injected to the same step as the toMiddleware
# [1.0.0-gamma.4](https://github.com/aws/aws-sdk-js-v3/compare/@aws-sdk/middleware-stack@1.0.0-gamma.3...@aws-sdk/middleware-stack@1.0.0-gamma.4) (2020-07-21)

@@ -8,0 +25,0 @@

53

dist/cjs/MiddlewareStack.d.ts

@@ -1,51 +0,2 @@

import { AbsoluteLocation, BuildHandlerOptions, BuildMiddleware, DeserializeHandler, DeserializeHandlerOptions, DeserializeMiddleware, FinalizeRequestHandlerOptions, FinalizeRequestMiddleware, Handler, HandlerExecutionContext, InitializeHandlerOptions, InitializeMiddleware, MiddlewareStack as IMiddlewareStack, MiddlewareType, Pluggable, RelativeLocation, SerializeHandlerOptions, SerializeMiddleware } from "@aws-sdk/types";
export interface MiddlewareStack<Input extends object, Output extends object> extends IMiddlewareStack<Input, Output> {
}
export declare class MiddlewareStack<Input extends object, Output extends object> {
private readonly absoluteEntries;
private readonly relativeEntries;
private entriesNameMap;
add(middleware: InitializeMiddleware<Input, Output>, options?: InitializeHandlerOptions & AbsoluteLocation): void;
add(middleware: SerializeMiddleware<Input, Output>, options: SerializeHandlerOptions & AbsoluteLocation): void;
add(middleware: BuildMiddleware<Input, Output>, options: BuildHandlerOptions & AbsoluteLocation): void;
add(middleware: FinalizeRequestMiddleware<Input, Output>, options: FinalizeRequestHandlerOptions & AbsoluteLocation): void;
add(middleware: DeserializeMiddleware<Input, Output>, options: DeserializeHandlerOptions & AbsoluteLocation): void;
addRelativeTo(middleware: InitializeMiddleware<Input, Output>, options: InitializeHandlerOptions & RelativeLocation<Input, Output>): void;
addRelativeTo(middleware: SerializeMiddleware<Input, Output>, options: SerializeHandlerOptions & RelativeLocation<Input, Output>): void;
addRelativeTo(middleware: BuildMiddleware<Input, Output>, options: BuildHandlerOptions & RelativeLocation<Input, Output>): void;
addRelativeTo(middleware: FinalizeRequestMiddleware<Input, Output>, options: FinalizeRequestHandlerOptions & RelativeLocation<Input, Output>): void;
addRelativeTo(middleware: DeserializeMiddleware<Input, Output>, options: DeserializeHandlerOptions & RelativeLocation<Input, Output>): void;
private sort;
clone(): IMiddlewareStack<Input, Output>;
concat<InputType extends Input, OutputType extends Output>(from: IMiddlewareStack<InputType, OutputType>): MiddlewareStack<InputType, OutputType>;
remove(toRemove: MiddlewareType<Input, Output> | string): boolean;
private removeByName;
private removeByReference;
removeByTag(toRemove: string): boolean;
use(plugin: Pluggable<Input, Output>): void;
/**
* Resolve relative middleware entries to multiple double linked lists
* depicting the relative location of middleware. Only middleware that have
* direct or transitive relation will form a linked list.
*
* This function normalizes relative middleware into 2 categories of linked
* lists. (1) linked list that have absolute-located middleware on one end.
* These middleware will be resolved accordingly before or after the absolute-
* located middleware. (2) Linked list that have no absolute-located middleware
* on any end. They will be resolved to corresponding step with normal priority
*
* The 2 types of linked list will return as a tuple
*/
private normalizeRelativeEntries;
/**
* Get a final list of middleware in the order of being executed in the resolved handler.
* If relative entries list is not empty, those entries will be added to final middleware
* list with rules below:
* 1. if `toMiddleware` exists in the specific `step`, the middleware will be inserted before
* or after the specified `toMiddleware`
* 2. if `toMiddleware` doesn't exist in the specific `step`, the middleware will be appended
* to specific `step` with priority of `normal`
*/
private getMiddlewareList;
resolve<InputType extends Input, OutputType extends Output>(handler: DeserializeHandler<InputType, OutputType>, context: HandlerExecutionContext): Handler<InputType, OutputType>;
}
import { MiddlewareStack } from "@aws-sdk/types";
export declare const constructStack: <Input extends object, Output extends object>() => MiddlewareStack<Input, Output>;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MiddlewareStack = void 0;
exports.constructStack = void 0;
var tslib_1 = require("tslib");
var MiddlewareStack = /** @class */ (function () {
function MiddlewareStack() {
this.absoluteEntries = [];
this.relativeEntries = [];
this.entriesNameMap = {};
}
MiddlewareStack.prototype.add = function (middleware, options) {
if (options === void 0) { options = {}; }
var name = options.name, _a = options.step, step = _a === void 0 ? "initialize" : _a, tags = options.tags, _b = options.priority, priority = _b === void 0 ? "normal" : _b;
var entry = {
name: name,
step: step,
tags: tags,
priority: priority,
middleware: middleware,
};
if (name) {
if (Object.prototype.hasOwnProperty.call(this.entriesNameMap, name)) {
throw new Error("Duplicated middleware name '" + name + "'");
}
this.entriesNameMap[name] = entry;
}
this.absoluteEntries.push(entry);
};
MiddlewareStack.prototype.addRelativeTo = function (middleware, options) {
var _a = options.step, step = _a === void 0 ? "initialize" : _a, name = options.name, tags = options.tags, relation = options.relation, toMiddleware = options.toMiddleware;
var entry = {
middleware: middleware,
step: step,
name: name,
tags: tags,
next: relation === "before" ? toMiddleware : undefined,
prev: relation === "after" ? toMiddleware : undefined,
};
if (name) {
if (Object.prototype.hasOwnProperty.call(this.entriesNameMap, name)) {
throw new Error("Duplicated middleware name '" + name + "'");
}
this.entriesNameMap[name] = entry;
}
this.relativeEntries.push(entry);
};
MiddlewareStack.prototype.sort = function (entries) {
//reverse before sorting so that middleware of same step will execute in
//the order of being added
exports.constructStack = function () {
var absoluteEntries = [];
var relativeEntries = [];
var entriesNameSet = new Set();
var sort = function (entries) {
return entries.sort(function (a, b) {

@@ -55,282 +15,181 @@ return stepWeights[b.step] - stepWeights[a.step] ||

};
MiddlewareStack.prototype.clone = function () {
var _a, _b;
var clone = new MiddlewareStack();
(_a = clone.absoluteEntries).push.apply(_a, tslib_1.__spread(this.absoluteEntries));
(_b = clone.relativeEntries).push.apply(_b, tslib_1.__spread(this.relativeEntries));
clone.entriesNameMap = tslib_1.__assign({}, this.entriesNameMap);
return clone;
var removeByName = function (toRemove) {
var isRemoved = false;
var filterCb = function (entry) {
if (entry.name && entry.name === toRemove) {
isRemoved = true;
entriesNameSet.delete(toRemove);
return false;
}
return true;
};
absoluteEntries = absoluteEntries.filter(filterCb);
relativeEntries = relativeEntries.filter(filterCb);
return isRemoved;
};
MiddlewareStack.prototype.concat = function (from) {
var _a, _b;
var clone = new MiddlewareStack();
clone.entriesNameMap = tslib_1.__assign({}, this.entriesNameMap);
// IMiddlewareStack interface doesn't contain private members variables
// like `entriesNameMap`, but in fact the function expects `MiddlewareStack`
// class instance. So here we cast it.
var _from = from;
for (var name in _from.entriesNameMap) {
if (clone.entriesNameMap[name]) {
throw new Error("Duplicated middleware name '" + name + "'");
var removeByReference = function (toRemove) {
var isRemoved = false;
var filterCb = function (entry) {
if (entry.middleware === toRemove) {
isRemoved = true;
if (entry.name)
entriesNameSet.delete(entry.name);
return false;
}
clone.entriesNameMap[name] = _from.entriesNameMap[name];
}
(_a = clone.absoluteEntries).push.apply(_a, tslib_1.__spread(this.absoluteEntries, _from.absoluteEntries));
(_b = clone.relativeEntries).push.apply(_b, tslib_1.__spread(this.relativeEntries, _from.relativeEntries));
return clone;
return true;
};
absoluteEntries = absoluteEntries.filter(filterCb);
relativeEntries = relativeEntries.filter(filterCb);
return isRemoved;
};
MiddlewareStack.prototype.remove = function (toRemove) {
if (typeof toRemove === "string")
return this.removeByName(toRemove);
else
return this.removeByReference(toRemove);
var cloneTo = function (toStack) {
absoluteEntries.forEach(function (entry) {
//@ts-ignore
toStack.add(entry.middleware, tslib_1.__assign({}, entry));
});
relativeEntries.forEach(function (entry) {
//@ts-ignore
toStack.addRelativeTo(entry.middleware, tslib_1.__assign({}, entry));
});
return toStack;
};
MiddlewareStack.prototype.removeByName = function (toRemove) {
for (var i = this.absoluteEntries.length - 1; i >= 0; i--) {
if (this.absoluteEntries[i].name && this.absoluteEntries[i].name === toRemove) {
this.absoluteEntries.splice(i, 1);
delete this.entriesNameMap[toRemove];
return true;
var expandRelativeMiddlewareList = function (from) {
var expandedMiddlewareList = [];
from.before.forEach(function (entry) {
if (entry.before.length === 0 && entry.after.length === 0) {
expandedMiddlewareList.push(entry);
}
}
for (var i = this.relativeEntries.length - 1; i >= 0; i--) {
if (this.relativeEntries[i].name && this.relativeEntries[i].name === toRemove) {
this.relativeEntries.splice(i, 1);
delete this.entriesNameMap[toRemove];
return true;
else {
expandedMiddlewareList.push.apply(expandedMiddlewareList, tslib_1.__spread(expandRelativeMiddlewareList(entry)));
}
}
return false;
};
MiddlewareStack.prototype.removeByReference = function (toRemove) {
for (var i = this.absoluteEntries.length - 1; i >= 0; i--) {
if (this.absoluteEntries[i].middleware === toRemove) {
var name = this.absoluteEntries[i].name;
if (name)
delete this.entriesNameMap[name];
this.absoluteEntries.splice(i, 1);
return true;
});
expandedMiddlewareList.push(from);
from.after.reverse().forEach(function (entry) {
if (entry.before.length === 0 && entry.after.length === 0) {
expandedMiddlewareList.push(entry);
}
}
for (var i = this.relativeEntries.length - 1; i >= 0; i--) {
if (this.relativeEntries[i].middleware === toRemove) {
var name = this.relativeEntries[i].name;
if (name)
delete this.entriesNameMap[name];
this.relativeEntries.splice(i, 1);
return true;
else {
expandedMiddlewareList.push.apply(expandedMiddlewareList, tslib_1.__spread(expandRelativeMiddlewareList(entry)));
}
}
return false;
});
return expandedMiddlewareList;
};
MiddlewareStack.prototype.removeByTag = function (toRemove) {
var removed = false;
for (var i = this.absoluteEntries.length - 1; i >= 0; i--) {
var _a = this.absoluteEntries[i], tags = _a.tags, name = _a.name;
if (tags && tags.indexOf(toRemove) > -1) {
this.absoluteEntries.splice(i, 1);
if (name)
delete this.entriesNameMap[name];
removed = true;
}
}
for (var i = this.relativeEntries.length - 1; i >= 0; i--) {
var _b = this.relativeEntries[i], tags = _b.tags, name = _b.name;
if (tags && tags.indexOf(toRemove) > -1) {
this.relativeEntries.splice(i, 1);
if (name)
delete this.entriesNameMap[name];
removed = true;
}
}
return removed;
};
MiddlewareStack.prototype.use = function (plugin) {
plugin.applyToStack(this);
};
/**
* Resolve relative middleware entries to multiple double linked lists
* depicting the relative location of middleware. Only middleware that have
* direct or transitive relation will form a linked list.
*
* This function normalizes relative middleware into 2 categories of linked
* lists. (1) linked list that have absolute-located middleware on one end.
* These middleware will be resolved accordingly before or after the absolute-
* located middleware. (2) Linked list that have no absolute-located middleware
* on any end. They will be resolved to corresponding step with normal priority
*
* The 2 types of linked list will return as a tuple
* Get a final list of middleware in the order of being executed in the resolved handler.
*/
MiddlewareStack.prototype.normalizeRelativeEntries = function () {
var e_1, _a;
var absoluteMiddlewareNamesMap = this.absoluteEntries
.filter(function (entry) { return entry.name; })
.reduce(function (accumulator, entry) {
accumulator[entry.name] = entry;
return accumulator;
}, {});
var normalized = this.relativeEntries.map(function (entry) {
return (tslib_1.__assign(tslib_1.__assign({}, entry), { priority: null, next: undefined, prev: undefined }));
var getMiddlewareList = function () {
var normalizedAbsoluteEntries = [];
var normalizedRelativeEntries = [];
var normalizedEntriesNameMap = {};
absoluteEntries.forEach(function (entry) {
var normalizedEntry = tslib_1.__assign(tslib_1.__assign({}, entry), { before: [], after: [] });
if (normalizedEntry.name)
normalizedEntriesNameMap[normalizedEntry.name] = normalizedEntry;
normalizedAbsoluteEntries.push(normalizedEntry);
});
var relativeMiddlewareNamesMap = normalized
.filter(function (entry) { return entry.name; })
.reduce(function (accumulator, entry) {
accumulator[entry.name] = entry;
return accumulator;
}, {});
var anchors = {};
for (var i = 0; i < this.relativeEntries.length; i++) {
var _b = this.relativeEntries[i], prev = _b.prev, next = _b.next;
var resolvedCurr = normalized[i];
//either prev or next is set
if (prev) {
if (absoluteMiddlewareNamesMap[prev] && absoluteMiddlewareNamesMap[prev].step === resolvedCurr.step) {
if (!anchors[prev])
anchors[prev] = {};
resolvedCurr.next = anchors[prev].next;
if (anchors[prev].next)
anchors[prev].next.prev = resolvedCurr;
anchors[prev].next = resolvedCurr;
relativeEntries.forEach(function (entry) {
var normalizedEntry = tslib_1.__assign(tslib_1.__assign({}, entry), { before: [], after: [] });
if (normalizedEntry.name)
normalizedEntriesNameMap[normalizedEntry.name] = normalizedEntry;
normalizedRelativeEntries.push(normalizedEntry);
});
normalizedRelativeEntries.forEach(function (entry) {
if (entry.toMiddleware) {
var toMiddleware = normalizedEntriesNameMap[entry.toMiddleware];
if (toMiddleware === undefined) {
throw new Error(entry.toMiddleware + " is not found when adding " + (entry.name || "anonymous") + " middleware " + entry.relation + " " + entry.toMiddleware);
}
else if (relativeMiddlewareNamesMap[prev] && relativeMiddlewareNamesMap[prev].step === resolvedCurr.step) {
var resolvedPrev = relativeMiddlewareNamesMap[prev];
if (resolvedPrev.next === resolvedCurr)
continue;
resolvedCurr.next = resolvedPrev.next;
resolvedPrev.next = resolvedCurr;
if (resolvedCurr.next)
resolvedCurr.next.prev = resolvedCurr;
resolvedCurr.prev = resolvedPrev;
if (entry.relation === "after") {
toMiddleware.after.push(entry);
}
if (entry.relation === "before") {
toMiddleware.before.push(entry);
}
}
else if (next) {
if (absoluteMiddlewareNamesMap[next] && absoluteMiddlewareNamesMap[next].step === resolvedCurr.step) {
if (!anchors[next])
anchors[next] = {};
resolvedCurr.prev = anchors[next].prev;
if (anchors[next].prev)
anchors[next].prev.next = resolvedCurr;
anchors[next].prev = resolvedCurr;
});
var mainChain = sort(normalizedAbsoluteEntries)
.map(expandRelativeMiddlewareList)
.reduce(function (wholeList, expendedMiddlewareList) {
// TODO: Replace it with Array.flat();
wholeList.push.apply(wholeList, tslib_1.__spread(expendedMiddlewareList));
return wholeList;
}, []);
return mainChain.map(function (entry) { return entry.middleware; });
};
var stack = {
add: function (middleware, options) {
if (options === void 0) { options = {}; }
var name = options.name;
var entry = tslib_1.__assign({ step: "initialize", priority: "normal", middleware: middleware }, options);
if (name) {
if (entriesNameSet.has(name)) {
throw new Error("Duplicate middleware name '" + name + "'");
}
else if (relativeMiddlewareNamesMap[next] && relativeMiddlewareNamesMap[next].step === resolvedCurr.step) {
var resolvedNext = relativeMiddlewareNamesMap[next];
if (resolvedNext.prev === resolvedCurr)
continue;
resolvedCurr.prev = resolvedNext.prev;
resolvedNext.prev = resolvedCurr;
if (resolvedCurr.prev)
resolvedCurr.prev.next = resolvedCurr;
resolvedCurr.next = resolvedNext;
entriesNameSet.add(name);
}
absoluteEntries.push(entry);
},
addRelativeTo: function (middleware, options) {
var name = options.name;
var entry = tslib_1.__assign({ middleware: middleware }, options);
if (name) {
if (entriesNameSet.has(name)) {
throw new Error("Duplicated middleware name '" + name + "'");
}
entriesNameSet.add(name);
}
}
// get the head of the relative middleware linked list that have
// no transitive relation to absolute middleware.
var orphanedRelativeEntries = [];
var visited = new WeakSet();
try {
for (var _c = tslib_1.__values(Object.keys(anchors)), _d = _c.next(); !_d.done; _d = _c.next()) {
var anchorName = _d.value;
var _e = anchors[anchorName], prev = _e.prev, next = _e.next;
while (prev) {
visited.add(prev);
prev = prev.prev;
relativeEntries.push(entry);
},
clone: function () { return cloneTo(exports.constructStack()); },
use: function (plugin) {
plugin.applyToStack(stack);
},
remove: function (toRemove) {
if (typeof toRemove === "string")
return removeByName(toRemove);
else
return removeByReference(toRemove);
},
removeByTag: function (toRemove) {
var isRemoved = false;
var filterCb = function (entry) {
var tags = entry.tags, name = entry.name;
if (tags && tags.includes(toRemove)) {
if (name)
entriesNameSet.delete(name);
isRemoved = true;
return false;
}
while (next) {
visited.add(next);
next = next.next;
return true;
};
absoluteEntries = absoluteEntries.filter(filterCb);
relativeEntries = relativeEntries.filter(filterCb);
return isRemoved;
},
concat: function (from) {
var cloned = cloneTo(exports.constructStack());
cloned.use(from);
return cloned;
},
applyToStack: cloneTo,
resolve: function (handler, context) {
var e_1, _a;
try {
for (var _b = tslib_1.__values(getMiddlewareList().reverse()), _c = _b.next(); !_c.done; _c = _b.next()) {
var middleware = _c.value;
handler = middleware(handler, context);
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
}
finally { if (e_1) throw e_1.error; }
}
for (var i = 0; i < normalized.length; i++) {
var entry = normalized[i];
if (visited.has(entry))
continue;
if (!entry.prev)
orphanedRelativeEntries.push(entry);
while (entry && !visited.has(entry)) {
visited.add(entry);
entry = entry.next;
}
}
return [orphanedRelativeEntries, anchors];
};
/**
* Get a final list of middleware in the order of being executed in the resolved handler.
* If relative entries list is not empty, those entries will be added to final middleware
* list with rules below:
* 1. if `toMiddleware` exists in the specific `step`, the middleware will be inserted before
* or after the specified `toMiddleware`
* 2. if `toMiddleware` doesn't exist in the specific `step`, the middleware will be appended
* to specific `step` with priority of `normal`
*/
MiddlewareStack.prototype.getMiddlewareList = function () {
var e_2, _a;
var middlewareList = [];
var _b = tslib_1.__read(this.normalizeRelativeEntries(), 2), orphanedRelativeEntries = _b[0], anchors = _b[1];
var entryList = tslib_1.__spread(this.absoluteEntries, orphanedRelativeEntries);
entryList = this.sort(entryList);
try {
for (var entryList_1 = tslib_1.__values(entryList), entryList_1_1 = entryList_1.next(); !entryList_1_1.done; entryList_1_1 = entryList_1.next()) {
var entry = entryList_1_1.value;
var defaultAnchorValue = { prev: undefined, next: undefined };
var _c = entry.name ? anchors[entry.name] || defaultAnchorValue : defaultAnchorValue, prev = _c.prev, next = _c.next;
var relativeEntry = prev;
//reverse relative entry linked list and add to ordered handler list
while (relativeEntry === null || relativeEntry === void 0 ? void 0 : relativeEntry.prev) {
relativeEntry = relativeEntry.prev;
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
while (relativeEntry) {
middlewareList.push(relativeEntry.middleware);
relativeEntry = relativeEntry.next;
}
middlewareList.push(entry.middleware);
var orphanedEntry = entry;
while (orphanedEntry.next) {
middlewareList.push(orphanedEntry.next.middleware);
orphanedEntry = orphanedEntry.next;
}
relativeEntry = next;
while (relativeEntry) {
middlewareList.push(relativeEntry.middleware);
relativeEntry = relativeEntry.next;
}
finally { if (e_1) throw e_1.error; }
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (entryList_1_1 && !entryList_1_1.done && (_a = entryList_1.return)) _a.call(entryList_1);
}
finally { if (e_2) throw e_2.error; }
}
return middlewareList.reverse();
return handler;
},
};
MiddlewareStack.prototype.resolve = function (handler, context) {
var e_3, _a;
try {
for (var _b = tslib_1.__values(this.getMiddlewareList()), _c = _b.next(); !_c.done; _c = _b.next()) {
var middleware = _c.value;
handler = middleware(handler, context);
}
}
catch (e_3_1) { e_3 = { error: e_3_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_3) throw e_3.error; }
}
return handler;
};
return MiddlewareStack;
}());
exports.MiddlewareStack = MiddlewareStack;
return stack;
};
var stepWeights = {

@@ -348,2 +207,2 @@ initialize: 5,

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlkZGxld2FyZVN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL01pZGRsZXdhcmVTdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBb0NBO0lBQUE7UUFDbUIsb0JBQWUsR0FBMEMsRUFBRSxDQUFDO1FBQzVELG9CQUFlLEdBQWtELEVBQUUsQ0FBQztRQUM3RSxtQkFBYyxHQUVsQixFQUFFLENBQUM7SUFpVlQsQ0FBQztJQWxVQyw2QkFBRyxHQUFILFVBQUksVUFBeUMsRUFBRSxPQUErQztRQUEvQyx3QkFBQSxFQUFBLFlBQStDO1FBQ3BGLElBQUEsSUFBSSxHQUFxRCxPQUFPLEtBQTVELEVBQUUsS0FBbUQsT0FBTyxLQUF2QyxFQUFuQixJQUFJLG1CQUFHLFlBQVksS0FBQSxFQUFFLElBQUksR0FBMEIsT0FBTyxLQUFqQyxFQUFFLEtBQXdCLE9BQU8sU0FBWixFQUFuQixRQUFRLG1CQUFHLFFBQVEsS0FBQSxDQUFhO1FBQ3pFLElBQU0sS0FBSyxHQUFtQztZQUM1QyxJQUFJLE1BQUE7WUFDSixJQUFJLE1BQUE7WUFDSixJQUFJLE1BQUE7WUFDSixRQUFRLFVBQUE7WUFDUixVQUFVLFlBQUE7U0FDWCxDQUFDO1FBQ0YsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNuRSxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUErQixJQUFJLE1BQUcsQ0FBQyxDQUFDO2FBQ3pEO1lBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDbkM7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBMkJELHVDQUFhLEdBQWIsVUFDRSxVQUF5QyxFQUN6QyxPQUF5RDtRQUVqRCxJQUFBLEtB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QUFrQztJQUNyRCxJQUFJLEVBQUUsQ0FBQztJQUNQLE1BQU0sRUFBRSxDQUFDO0lBQ1QsR0FBRyxFQUFFLENBQUM7Q0FDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWJzb2x1dGVMb2NhdGlvbixcbiAgQnVpbGRIYW5kbGVyT3B0aW9ucyxcbiAgQnVpbGRNaWRkbGV3YXJlLFxuICBEZXNlcmlhbGl6ZUhhbmRsZXIsXG4gIERlc2VyaWFsaXplSGFuZGxlck9wdGlvbnMsXG4gIERlc2VyaWFsaXplTWlkZGxld2FyZSxcbiAgRmluYWxpemVSZXF1ZXN0SGFuZGxlck9wdGlvbnMsXG4gIEZpbmFsaXplUmVxdWVzdE1pZGRsZXdhcmUsXG4gIEhhbmRsZXIsXG4gIEhhbmRsZXJFeGVjdXRpb25Db250ZXh0LFxuICBIYW5kbGVyT3B0aW9ucyxcbiAgSW5pdGlhbGl6ZUhhbmRsZXJPcHRpb25zLFxuICBJbml0aWFsaXplTWlkZGxld2FyZSxcbiAgTWlkZGxld2FyZVN0YWNrIGFzIElNaWRkbGV3YXJlU3RhY2ssXG4gIE1pZGRsZXdhcmVUeXBlLFxuICBQbHVnZ2FibGUsXG4gIFByaW9yaXR5LFxuICBSZWxhdGl2ZUxvY2F0aW9uLFxuICBTZXJpYWxpemVIYW5kbGVyT3B0aW9ucyxcbiAgU2VyaWFsaXplTWlkZGxld2FyZSxcbiAgU3RlcCxcbn0gZnJvbSBcIkBhd3Mtc2RrL3R5cGVzXCI7XG5cbmltcG9ydCB7XG4gIE1pZGRsZXdhcmVFbnRyeSxcbiAgTmFtZWRNaWRkbGV3YXJlRW50cmllc01hcCxcbiAgTmFtZWRSZWxhdGl2ZUVudHJpZXNNYXAsXG4gIE5vcm1hbGl6ZWRSZWxhdGl2ZUVudHJ5LFxuICBOb3JtYWxpemluZ0VudHJ5UmVzdWx0LFxuICBSZWxhdGl2ZU1pZGRsZXdhcmVBbmNob3IsXG4gIFJlbGF0aXZlTWlkZGxld2FyZUVudHJ5LFxufSBmcm9tIFwiLi90eXBlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1pZGRsZXdhcmVTdGFjazxJbnB1dCBleHRlbmRzIG9iamVjdCwgT3V0cHV0IGV4dGVuZHMgb2JqZWN0PiBleHRlbmRzIElNaWRkbGV3YXJlU3RhY2s8SW5wdXQsIE91dHB1dD4ge31cblxuZXhwb3J0IGNsYXNzIE1pZGRsZXdhcmVTdGFjazxJbnB1dCBleHRlbmRzIG9iamVjdCwgT3V0cHV0IGV4dGVuZHMgb2JqZWN0PiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWJzb2x1dGVFbnRyaWVzOiBBcnJheTxNaWRkbGV3YXJlRW50cnk8SW5wdXQsIE91dHB1dD4+ID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVsYXRpdmVFbnRyaWVzOiBBcnJheTxSZWxhdGl2ZU1pZGRsZXdhcmVFbnRyeTxJbnB1dCwgT3V0cHV0Pj4gPSBbXTtcbiAgcHJpdmF0ZSBlbnRyaWVzTmFtZU1hcDoge1xuICAgIFttaWRkbGV3YXJlTmFtZTogc3RyaW5nXTogTWlkZGxld2FyZUVudHJ5PElucHV0LCBPdXRwdXQ+IHwgUmVsYXRpdmVNaWRkbGV3YXJlRW50cnk8SW5wdXQsIE91dHB1dD47XG4gIH0gPSB7fTtcblxuICBhZGQobWlkZGxld2FyZTogSW5pdGlhbGl6ZU1pZGRsZXdhcmU8SW5wdXQsIE91dHB1dD4sIG9wdGlvbnM/OiBJbml0aWFsaXplSGFuZGxlck9wdGlvbnMgJiBBYnNvbHV0ZUxvY2F0aW9uKTogdm9pZDtcblxuICBhZGQobWlkZGxld2FyZTogU2VyaWFsaXplTWlkZGxld2FyZTxJbnB1dCwgT3V0cHV0Piwgb3B0aW9uczogU2VyaWFsaXplSGFuZGxlck9wdGlvbnMgJiBBYnNvbHV0ZUxvY2F0aW9uKTogdm9pZDtcblxuICBhZGQobWlkZGxld2FyZTogQnVpbGRNaWRkbGV3YXJlPElucHV0LCBPdXRwdXQ+LCBvcHRpb25zOiBCdWlsZEhhbmRsZXJPcHRpb25zICYgQWJzb2x1dGVMb2NhdGlvbik6IHZvaWQ7XG5cbiAgYWRkKFxuICAgIG1pZGRsZXdhcmU6IEZpbmFsaXplUmVxdWVzdE1pZGRsZXdhcmU8SW5wdXQsIE91dHB1dD4sXG4gICAgb3B0aW9uczogRmluYWxpemVSZXF1ZXN0SGFuZGxlck9wdGlvbnMgJiBBYnNvbHV0ZUxvY2F0aW9uXG4gICk6IHZvaWQ7XG5cbiAgYWRkKG1pZGRsZXdhcmU6IERlc2VyaWFsaXplTWlkZGxld2FyZTxJbnB1dCwgT3V0cHV0Piwgb3B0aW9uczogRGVzZXJpYWxpemVIYW5kbGVyT3B0aW9ucyAmIEFic29sdXRlTG9jYXRpb24pOiB2b2lkO1xuXG4gIGFkZChtaWRkbGV3YXJlOiBNaWRkbGV3YXJlVHlwZTxJbnB1dCwgT3V0cHV0Piwgb3B0aW9uczogSGFuZGxlck9wdGlvbnMgJiBBYnNvbHV0ZUxvY2F0aW9uID0ge30pOiB2b2lkIHtcbiAgICBjb25zdCB7IG5hbWUsIHN0ZXAgPSBcImluaXRpYWxpemVcIiwgdGFncywgcHJpb3JpdHkgPSBcIm5vcm1hbFwiIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGVudHJ5OiBNaWRkbGV3YXJlRW50cnk8SW5wdXQsIE91dHB1dD4gPSB7XG4gICAgICBuYW1lLFxuICAgICAgc3RlcCxcbiAgICAgIHRhZ3MsXG4gICAgICBwcmlvcml0eSxcbiAgICAgIG1pZGRsZXdhcmUsXG4gICAgfTtcbiAgICBpZiAobmFtZSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmVudHJpZXNOYW1lTWFwLCBuYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZWQgbWlkZGxld2FyZSBuYW1lICcke25hbWV9J2ApO1xuICAgICAgfVxuICAgICAgdGhpcy5lbnRyaWVzTmFtZU1hcFtuYW1lXSA9IGVudHJ5O1xuICAgIH1cbiAgICB0aGlzLmFic29sdXRlRW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGFkZFJlbGF0aXZlVG8oXG4gICAgbWlkZGxld2FyZTogSW5pdGlhbGl6ZU1pZGRsZXdhcmU8SW5wdXQsIE91dHB1dD4sXG4gICAgb3B0aW9uczogSW5pdGlhbGl6ZUhhbmRsZXJPcHRpb25zICYgUmVsYXRpdmVMb2NhdGlvbjxJbnB1dCwgT3V0cHV0PlxuICApOiB2b2lkO1xuXG4gIGFkZFJlbGF0aXZlVG8oXG4gICAgbWlkZGxld2FyZTogU2VyaWFsaXplTWlkZGxld2FyZTxJbnB1dCwgT3V0cHV0PixcbiAgICBvcHRpb25zOiBTZXJpYWxpemVIYW5kbGVyT3B0aW9ucyAmIFJlbGF0aXZlTG9jYXRpb248SW5wdXQsIE91dHB1dD5cbiAgKTogdm9pZDtcblxuICBhZGRSZWxhdGl2ZVRvKFxuICAgIG1pZGRsZXdhcmU6IEJ1aWxkTWlkZGxld2FyZTxJbnB1dCwgT3V0cHV0PixcbiAgICBvcHRpb25zOiBCdWlsZEhhbmRsZXJPcHRpb25zICYgUmVsYXRpdmVMb2NhdGlvbjxJbnB1dCwgT3V0cHV0PlxuICApOiB2b2lkO1xuXG4gIGFkZFJlbGF0aXZlVG8oXG4gICAgbWlkZGxld2FyZTogRmluYWxpemVSZXF1ZXN0TWlkZGxld2FyZTxJbnB1dCwgT3V0cHV0PixcbiAgICBvcHRpb25zOiBGaW5hbGl6ZVJlcXVlc3RIYW5kbGVyT3B0aW9ucyAmIFJlbGF0aXZlTG9jYXRpb248SW5wdXQsIE91dHB1dD5cbiAgKTogdm9pZDtcblxuICBhZGRSZWxhdGl2ZVRvKFxuICAgIG1pZGRsZXdhcmU6IERlc2VyaWFsaXplTWlkZGxld2FyZTxJbnB1dCwgT3V0cHV0PixcbiAgICBvcHRpb25zOiBEZXNlcmlhbGl6ZUhhbmRsZXJPcHRpb25zICYgUmVsYXRpdmVMb2NhdGlvbjxJbnB1dCwgT3V0cHV0PlxuICApOiB2b2lkO1xuXG4gIGFkZFJlbGF0aXZlVG8oXG4gICAgbWlkZGxld2FyZTogTWlkZGxld2FyZVR5cGU8SW5wdXQsIE91dHB1dD4sXG4gICAgb3B0aW9uczogSGFuZGxlck9wdGlvbnMgJiBSZWxhdGl2ZUxvY2F0aW9uPElucHV0LCBPdXRwdXQ+XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHsgc3RlcCA9IFwiaW5pdGlhbGl6ZVwiLCBuYW1lLCB0YWdzLCByZWxhdGlvbiwgdG9NaWRkbGV3YXJlIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGVudHJ5OiBSZWxhdGl2ZU1pZGRsZXdhcmVFbnRyeTxJbnB1dCwgT3V0cHV0PiA9IHtcbiAgICAgIG1pZGRsZXdhcmUsXG4gICAgICBzdGVwLFxuICAgICAgbmFtZSxcbiAgICAgIHRhZ3MsXG4gICAgICBuZXh0OiByZWxhdGlvbiA9PT0gXCJiZWZvcmVcIiA/IHRvTWlkZGxld2FyZSA6IHVuZGVmaW5lZCxcbiAgICAgIHByZXY6IHJlbGF0aW9uID09PSBcImFmdGVyXCIgPyB0b01pZGRsZXdhcmUgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgICBpZiAobmFtZSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmVudHJpZXNOYW1lTWFwLCBuYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZWQgbWlkZGxld2FyZSBuYW1lICcke25hbWV9J2ApO1xuICAgICAgfVxuICAgICAgdGhpcy5lbnRyaWVzTmFtZU1hcFtuYW1lXSA9IGVudHJ5O1xuICAgIH1cbiAgICB0aGlzLnJlbGF0aXZlRW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIHByaXZhdGUgc29ydChcbiAgICBlbnRyaWVzOiBBcnJheTxNaWRkbGV3YXJlRW50cnk8SW5wdXQsIE91dHB1dD4gfCBOb3JtYWxpemVkUmVsYXRpdmVFbnRyeTxJbnB1dCwgT3V0cHV0Pj5cbiAgKTogQXJyYXk8TWlkZGxld2FyZUVudHJ5PElucHV0LCBPdXRwdXQ+IHwgTm9ybWFsaXplZFJlbGF0aXZlRW50cnk8SW5wdXQsIE91dHB1dD4+IHtcbiAgICAvL3JldmVyc2UgYmVmb3JlIHNvcnRpbmcgc28gdGhhdCBtaWRkbGV3YXJlIG9mIHNhbWUgc3RlcCB3aWxsIGV4ZWN1dGUgaW5cbiAgICAvL3RoZSBvcmRlciBvZiBiZWluZyBhZGRlZFxuICAgIHJldHVybiBlbnRyaWVzLnNvcnQoXG4gICAgICAoYSwgYikgPT5cbiAgICAgICAgc3RlcFdlaWdodHNbYi5zdGVwXSAtIHN0ZXBXZWlnaHRzW2Euc3RlcF0gfHxcbiAgICAgICAgcHJpb3JpdHlXZWlnaHRzW2IucHJpb3JpdHkgfHwgXCJub3JtYWxcIl0gLSBwcmlvcml0eVdlaWdodHNbYS5wcmlvcml0eSB8fCBcIm5vcm1hbFwiXVxuICAgICk7XG4gIH1cblxuICBjbG9uZSgpOiBJTWlkZGxld2FyZVN0YWNrPElucHV0LCBPdXRwdXQ+IHtcbiAgICBjb25zdCBjbG9uZSA9IG5ldyBNaWRkbGV3YXJlU3RhY2s8SW5wdXQsIE91dHB1dD4oKTtcbiAgICBjbG9uZS5hYnNvbHV0ZUVudHJpZXMucHVzaCguLi50aGlzLmFic29sdXRlRW50cmllcyk7XG4gICAgY2xvbmUucmVsYXRpdmVFbnRyaWVzLnB1c2goLi4udGhpcy5yZWxhdGl2ZUVudHJpZXMpO1xuICAgIGNsb25lLmVudHJpZXNOYW1lTWFwID0geyAuLi50aGlzLmVudHJpZXNOYW1lTWFwIH07XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgY29uY2F0PElucHV0VHlwZSBleHRlbmRzIElucHV0LCBPdXRwdXRUeXBlIGV4dGVuZHMgT3V0cHV0PihcbiAgICBmcm9tOiBJTWlkZGxld2FyZVN0YWNrPElucHV0VHlwZSwgT3V0cHV0VHlwZT5cbiAgKTogTWlkZGxld2FyZVN0YWNrPElucHV0VHlwZSwgT3V0cHV0VHlwZT4ge1xuICAgIGNvbnN0IGNsb25lID0gbmV3IE1pZGRsZXdhcmVTdGFjazxJbnB1dFR5cGUsIE91dHB1dFR5cGU+KCk7XG4gICAgY2xvbmUuZW50cmllc05hbWVNYXAgPSB7IC4uLih0aGlzLmVudHJpZXNOYW1lTWFwIGFzIGFueSkgfTtcbiAgICAvLyBJTWlkZGxld2FyZVN0YWNrIGludGVyZmFjZSBkb2Vzbid0IGNvbnRhaW4gcHJpdmF0ZSBtZW1iZXJzIHZhcmlhYmxlc1xuICAgIC8vIGxpa2UgYGVudHJpZXNOYW1lTWFwYCwgYnV0IGluIGZhY3QgdGhlIGZ1bmN0aW9uIGV4cGVjdHMgYE1pZGRsZXdhcmVTdGFja2BcbiAgICAvLyBjbGFzcyBpbnN0YW5jZS4gU28gaGVyZSB3ZSBjYXN0IGl0LlxuICAgIGNvbnN0IF9mcm9tID0gZnJvbSBhcyBNaWRkbGV3YXJlU3RhY2s8SW5wdXRUeXBlLCBPdXRwdXRUeXBlPjtcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gX2Zyb20uZW50cmllc05hbWVNYXApIHtcbiAgICAgIGlmIChjbG9uZS5lbnRyaWVzTmFtZU1hcFtuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZWQgbWlkZGxld2FyZSBuYW1lICcke25hbWV9J2ApO1xuICAgICAgfVxuICAgICAgY2xvbmUuZW50cmllc05hbWVNYXBbbmFtZV0gPSBfZnJvbS5lbnRyaWVzTmFtZU1hcFtuYW1lXTtcbiAgICB9XG4gICAgY2xvbmUuYWJzb2x1dGVFbnRyaWVzLnB1c2goLi4uKHRoaXMuYWJzb2x1dGVFbnRyaWVzIGFzIGFueSksIC4uLl9mcm9tLmFic29sdXRlRW50cmllcyk7XG4gICAgY2xvbmUucmVsYXRpdmVFbnRyaWVzLnB1c2goLi4uKHRoaXMucmVsYXRpdmVFbnRyaWVzIGFzIGFueSksIC4uLl9mcm9tLnJlbGF0aXZlRW50cmllcyk7XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgcmVtb3ZlKHRvUmVtb3ZlOiBNaWRkbGV3YXJlVHlwZTxJbnB1dCwgT3V0cHV0PiB8IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdG9SZW1vdmUgPT09IFwic3RyaW5nXCIpIHJldHVybiB0aGlzLnJlbW92ZUJ5TmFtZSh0b1JlbW92ZSk7XG4gICAgZWxzZSByZXR1cm4gdGhpcy5yZW1vdmVCeVJlZmVyZW5jZSh0b1JlbW92ZSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUJ5TmFtZSh0b1JlbW92ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgZm9yIChsZXQgaSA9IHRoaXMuYWJzb2x1dGVFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAodGhpcy5hYnNvbHV0ZUVudHJpZXNbaV0ubmFtZSAmJiB0aGlzLmFic29sdXRlRW50cmllc1tpXS5uYW1lID09PSB0b1JlbW92ZSkge1xuICAgICAgICB0aGlzLmFic29sdXRlRW50cmllcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmVudHJpZXNOYW1lTWFwW3RvUmVtb3ZlXTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSB0aGlzLnJlbGF0aXZlRW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKHRoaXMucmVsYXRpdmVFbnRyaWVzW2ldLm5hbWUgJiYgdGhpcy5yZWxhdGl2ZUVudHJpZXNbaV0ubmFtZSA9PT0gdG9SZW1vdmUpIHtcbiAgICAgICAgdGhpcy5yZWxhdGl2ZUVudHJpZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICBkZWxldGUgdGhpcy5lbnRyaWVzTmFtZU1hcFt0b1JlbW92ZV07XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUJ5UmVmZXJlbmNlKHRvUmVtb3ZlOiBNaWRkbGV3YXJlVHlwZTxJbnB1dCwgT3V0cHV0Pik6IGJvb2xlYW4ge1xuICAgIGZvciAobGV0IGkgPSB0aGlzLmFic29sdXRlRW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKHRoaXMuYWJzb2x1dGVFbnRyaWVzW2ldLm1pZGRsZXdhcmUgPT09IHRvUmVtb3ZlKSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSB9ID0gdGhpcy5hYnNvbHV0ZUVudHJpZXNbaV07XG4gICAgICAgIGlmIChuYW1lKSBkZWxldGUgdGhpcy5lbnRyaWVzTmFtZU1hcFtuYW1lXTtcbiAgICAgICAgdGhpcy5hYnNvbHV0ZUVudHJpZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IHRoaXMucmVsYXRpdmVFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAodGhpcy5yZWxhdGl2ZUVudHJpZXNbaV0ubWlkZGxld2FyZSA9PT0gdG9SZW1vdmUpIHtcbiAgICAgICAgY29uc3QgeyBuYW1lIH0gPSB0aGlzLnJlbGF0aXZlRW50cmllc1tpXTtcbiAgICAgICAgaWYgKG5hbWUpIGRlbGV0ZSB0aGlzLmVudHJpZXNOYW1lTWFwW25hbWVdO1xuICAgICAgICB0aGlzLnJlbGF0aXZlRW50cmllcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZW1vdmVCeVRhZyh0b1JlbW92ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgbGV0IHJlbW92ZWQgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gdGhpcy5hYnNvbHV0ZUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IHsgdGFncywgbmFtZSB9ID0gdGhpcy5hYnNvbHV0ZUVudHJpZXNbaV07XG4gICAgICBpZiAodGFncyAmJiB0YWdzLmluZGV4T2YodG9SZW1vdmUpID4gLTEpIHtcbiAgICAgICAgdGhpcy5hYnNvbHV0ZUVudHJpZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICBpZiAobmFtZSkgZGVsZXRlIHRoaXMuZW50cmllc05hbWVNYXBbbmFtZV07XG4gICAgICAgIHJlbW92ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBpID0gdGhpcy5yZWxhdGl2ZUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IHsgdGFncywgbmFtZSB9ID0gdGhpcy5yZWxhdGl2ZUVudHJpZXNbaV07XG4gICAgICBpZiAodGFncyAmJiB0YWdzLmluZGV4T2YodG9SZW1vdmUpID4gLTEpIHtcbiAgICAgICAgdGhpcy5yZWxhdGl2ZUVudHJpZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICBpZiAobmFtZSkgZGVsZXRlIHRoaXMuZW50cmllc05hbWVNYXBbbmFtZV07XG4gICAgICAgIHJlbW92ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVtb3ZlZDtcbiAgfVxuXG4gIHVzZShwbHVnaW46IFBsdWdnYWJsZTxJbnB1dCwgT3V0cHV0Pikge1xuICAgIHBsdWdpbi5hcHBseVRvU3RhY2sodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSByZWxhdGl2ZSBtaWRkbGV3YXJlIGVudHJpZXMgdG8gbXVsdGlwbGUgZG91YmxlIGxpbmtlZCBsaXN0c1xuICAgKiBkZXBpY3RpbmcgdGhlIHJlbGF0aXZlIGxvY2F0aW9uIG9mIG1pZGRsZXdhcmUuIE9ubHkgbWlkZGxld2FyZSB0aGF0IGhhdmVcbiAgICogZGlyZWN0IG9yIHRyYW5zaXRpdmUgcmVsYXRpb24gd2lsbCBmb3JtIGEgbGlua2VkIGxpc3QuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gbm9ybWFsaXplcyByZWxhdGl2ZSBtaWRkbGV3YXJlIGludG8gMiBjYXRlZ29yaWVzIG9mIGxpbmtlZFxuICAgKiBsaXN0cy4gKDEpIGxpbmtlZCBsaXN0IHRoYXQgaGF2ZSBhYnNvbHV0ZS1sb2NhdGVkIG1pZGRsZXdhcmUgb24gb25lIGVuZC5cbiAgICogVGhlc2UgbWlkZGxld2FyZSB3aWxsIGJlIHJlc29sdmVkIGFjY29yZGluZ2x5IGJlZm9yZSBvciBhZnRlciB0aGUgYWJzb2x1dGUtXG4gICAqIGxvY2F0ZWQgbWlkZGxld2FyZS4gKDIpIExpbmtlZCBsaXN0IHRoYXQgaGF2ZSBubyBhYnNvbHV0ZS1sb2NhdGVkIG1pZGRsZXdhcmVcbiAgICogb24gYW55IGVuZC4gVGhleSB3aWxsIGJlIHJlc29sdmVkIHRvIGNvcnJlc3BvbmRpbmcgc3RlcCB3aXRoIG5vcm1hbCBwcmlvcml0eVxuICAgKlxuICAgKiBUaGUgMiB0eXBlcyBvZiBsaW5rZWQgbGlzdCB3aWxsIHJldHVybiBhcyBhIHR1cGxlXG4gICAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZVJlbGF0aXZlRW50cmllcygpOiBOb3JtYWxpemluZ0VudHJ5UmVzdWx0PElucHV0LCBPdXRwdXQ+IHtcbiAgICBjb25zdCBhYnNvbHV0ZU1pZGRsZXdhcmVOYW1lc01hcCA9IHRoaXMuYWJzb2x1dGVFbnRyaWVzXG4gICAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSlcbiAgICAgIC5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBlbnRyeSkgPT4ge1xuICAgICAgICBhY2N1bXVsYXRvcltlbnRyeS5uYW1lIV0gPSBlbnRyeTtcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgICAgfSwge30gYXMgTmFtZWRNaWRkbGV3YXJlRW50cmllc01hcDxJbnB1dCwgT3V0cHV0Pik7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRoaXMucmVsYXRpdmVFbnRyaWVzLm1hcChcbiAgICAgIChlbnRyeSkgPT5cbiAgICAgICAgKHtcbiAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICBwcmlvcml0eTogbnVsbCxcbiAgICAgICAgICBuZXh0OiB1bmRlZmluZWQsXG4gICAgICAgICAgcHJldjogdW5kZWZpbmVkLFxuICAgICAgICB9IGFzIE5vcm1hbGl6ZWRSZWxhdGl2ZUVudHJ5PElucHV0LCBPdXRwdXQ+KVxuICAgICk7XG4gICAgY29uc3QgcmVsYXRpdmVNaWRkbGV3YXJlTmFtZXNNYXAgPSBub3JtYWxpemVkXG4gICAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSlcbiAgICAgIC5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBlbnRyeSkgPT4ge1xuICAgICAgICBhY2N1bXVsYXRvcltlbnRyeS5uYW1lIV0gPSBlbnRyeTtcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgICAgfSwge30gYXMgTmFtZWRSZWxhdGl2ZUVudHJpZXNNYXA8SW5wdXQsIE91dHB1dD4pO1xuXG4gICAgY29uc3QgYW5jaG9yczogUmVsYXRpdmVNaWRkbGV3YXJlQW5jaG9yPElucHV0LCBPdXRwdXQ+ID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJlbGF0aXZlRW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgeyBwcmV2LCBuZXh0IH0gPSB0aGlzLnJlbGF0aXZlRW50cmllc1tpXTtcbiAgICAgIGNvbnN0IHJlc29sdmVkQ3VyciA9IG5vcm1hbGl6ZWRbaV07XG4gICAgICAvL2VpdGhlciBwcmV2IG9yIG5leHQgaXMgc2V0XG4gICAgICBpZiAocHJldikge1xuICAgICAgICBpZiAoYWJzb2x1dGVNaWRkbGV3YXJlTmFtZXNNYXBbcHJldl0gJiYgYWJzb2x1dGVNaWRkbGV3YXJlTmFtZXNNYXBbcHJldl0uc3RlcCA9PT0gcmVzb2x2ZWRDdXJyLnN0ZXApIHtcbiAgICAgICAgICBpZiAoIWFuY2hvcnNbcHJldl0pIGFuY2hvcnNbcHJldl0gPSB7fTtcbiAgICAgICAgICByZXNvbHZlZEN1cnIubmV4dCA9IGFuY2hvcnNbcHJldl0ubmV4dDtcbiAgICAgICAgICBpZiAoYW5jaG9yc1twcmV2XS5uZXh0KSBhbmNob3JzW3ByZXZdLm5leHQhLnByZXYgPSByZXNvbHZlZEN1cnI7XG4gICAgICAgICAgYW5jaG9yc1twcmV2XS5uZXh0ID0gcmVzb2x2ZWRDdXJyO1xuICAgICAgICB9IGVsc2UgaWYgKHJlbGF0aXZlTWlkZGxld2FyZU5hbWVzTWFwW3ByZXZdICYmIHJlbGF0aXZlTWlkZGxld2FyZU5hbWVzTWFwW3ByZXZdLnN0ZXAgPT09IHJlc29sdmVkQ3Vyci5zdGVwKSB7XG4gICAgICAgICAgY29uc3QgcmVzb2x2ZWRQcmV2ID0gcmVsYXRpdmVNaWRkbGV3YXJlTmFtZXNNYXBbcHJldl07XG4gICAgICAgICAgaWYgKHJlc29sdmVkUHJldi5uZXh0ID09PSByZXNvbHZlZEN1cnIpIGNvbnRpbnVlO1xuICAgICAgICAgIHJlc29sdmVkQ3Vyci5uZXh0ID0gcmVzb2x2ZWRQcmV2Lm5leHQ7XG4gICAgICAgICAgcmVzb2x2ZWRQcmV2Lm5leHQgPSByZXNvbHZlZEN1cnI7XG4gICAgICAgICAgaWYgKHJlc29sdmVkQ3Vyci5uZXh0KSByZXNvbHZlZEN1cnIubmV4dC5wcmV2ID0gcmVzb2x2ZWRDdXJyO1xuICAgICAgICAgIHJlc29sdmVkQ3Vyci5wcmV2ID0gcmVzb2x2ZWRQcmV2O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5leHQpIHtcbiAgICAgICAgaWYgKGFic29sdXRlTWlkZGxld2FyZU5hbWVzTWFwW25leHRdICYmIGFic29sdXRlTWlkZGxld2FyZU5hbWVzTWFwW25leHRdLnN0ZXAgPT09IHJlc29sdmVkQ3Vyci5zdGVwKSB7XG4gICAgICAgICAgaWYgKCFhbmNob3JzW25leHRdKSBhbmNob3JzW25leHRdID0ge307XG4gICAgICAgICAgcmVzb2x2ZWRDdXJyLnByZXYgPSBhbmNob3JzW25leHRdLnByZXY7XG4gICAgICAgICAgaWYgKGFuY2hvcnNbbmV4dF0ucHJldikgYW5jaG9yc1tuZXh0XS5wcmV2IS5uZXh0ID0gcmVzb2x2ZWRDdXJyO1xuICAgICAgICAgIGFuY2hvcnNbbmV4dF0ucHJldiA9IHJlc29sdmVkQ3VycjtcbiAgICAgICAgfSBlbHNlIGlmIChyZWxhdGl2ZU1pZGRsZXdhcmVOYW1lc01hcFtuZXh0XSAmJiByZWxhdGl2ZU1pZGRsZXdhcmVOYW1lc01hcFtuZXh0XS5zdGVwID09PSByZXNvbHZlZEN1cnIuc3RlcCkge1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkTmV4dCA9IHJlbGF0aXZlTWlkZGxld2FyZU5hbWVzTWFwW25leHRdO1xuICAgICAgICAgIGlmIChyZXNvbHZlZE5leHQucHJldiA9PT0gcmVzb2x2ZWRDdXJyKSBjb250aW51ZTtcbiAgICAgICAgICByZXNvbHZlZEN1cnIucHJldiA9IHJlc29sdmVkTmV4dC5wcmV2O1xuICAgICAgICAgIHJlc29sdmVkTmV4dC5wcmV2ID0gcmVzb2x2ZWRDdXJyO1xuICAgICAgICAgIGlmIChyZXNvbHZlZEN1cnIucHJldikgcmVzb2x2ZWRDdXJyLnByZXYubmV4dCA9IHJlc29sdmVkQ3VycjtcbiAgICAgICAgICByZXNvbHZlZEN1cnIubmV4dCA9IHJlc29sdmVkTmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBnZXQgdGhlIGhlYWQgb2YgdGhlIHJlbGF0aXZlIG1pZGRsZXdhcmUgbGlua2VkIGxpc3QgdGhhdCBoYXZlXG4gICAgLy8gbm8gdHJhbnNpdGl2ZSByZWxhdGlvbiB0byBhYnNvbHV0ZSBtaWRkbGV3YXJlLlxuICAgIGNvbnN0IG9ycGhhbmVkUmVsYXRpdmVFbnRyaWVzOiBBcnJheTxOb3JtYWxpemVkUmVsYXRpdmVFbnRyeTxJbnB1dCwgT3V0cHV0Pj4gPSBbXTtcbiAgICBjb25zdCB2aXNpdGVkOiBXZWFrU2V0PE5vcm1hbGl6ZWRSZWxhdGl2ZUVudHJ5PElucHV0LCBPdXRwdXQ+PiA9IG5ldyBXZWFrU2V0KCk7XG4gICAgZm9yIChjb25zdCBhbmNob3JOYW1lIG9mIE9iamVjdC5rZXlzKGFuY2hvcnMpKSB7XG4gICAgICBsZXQgeyBwcmV2LCBuZXh0IH0gPSBhbmNob3JzW2FuY2hvck5hbWVdO1xuICAgICAgd2hpbGUgKHByZXYpIHtcbiAgICAgICAgdmlzaXRlZC5hZGQocHJldik7XG4gICAgICAgIHByZXYgPSBwcmV2LnByZXY7XG4gICAgICB9XG4gICAgICB3aGlsZSAobmV4dCkge1xuICAgICAgICB2aXNpdGVkLmFkZChuZXh0KTtcbiAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub3JtYWxpemVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgZW50cnk6IE5vcm1hbGl6ZWRSZWxhdGl2ZUVudHJ5PElucHV0LCBPdXRwdXQ+IHwgdW5kZWZpbmVkID0gbm9ybWFsaXplZFtpXTtcbiAgICAgIGlmICh2aXNpdGVkLmhhcyhlbnRyeSkpIGNvbnRpbnVlO1xuICAgICAgaWYgKCFlbnRyeS5wcmV2KSBvcnBoYW5lZFJlbGF0aXZlRW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICAgIHdoaWxlIChlbnRyeSAmJiAhdmlzaXRlZC5oYXMoZW50cnkpKSB7XG4gICAgICAgIHZpc2l0ZWQuYWRkKGVudHJ5KTtcbiAgICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW29ycGhhbmVkUmVsYXRpdmVFbnRyaWVzLCBhbmNob3JzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBmaW5hbCBsaXN0IG9mIG1pZGRsZXdhcmUgaW4gdGhlIG9yZGVyIG9mIGJlaW5nIGV4ZWN1dGVkIGluIHRoZSByZXNvbHZlZCBoYW5kbGVyLlxuICAgKiBJZiByZWxhdGl2ZSBlbnRyaWVzIGxpc3QgaXMgbm90IGVtcHR5LCB0aG9zZSBlbnRyaWVzIHdpbGwgYmUgYWRkZWQgdG8gZmluYWwgbWlkZGxld2FyZVxuICAgKiBsaXN0IHdpdGggcnVsZXMgYmVsb3c6XG4gICAqIDEuIGlmIGB0b01pZGRsZXdhcmVgIGV4aXN0cyBpbiB0aGUgc3BlY2lmaWMgYHN0ZXBgLCB0aGUgbWlkZGxld2FyZSB3aWxsIGJlIGluc2VydGVkIGJlZm9yZVxuICAgKiAgICAgb3IgYWZ0ZXIgdGhlIHNwZWNpZmllZCBgdG9NaWRkbGV3YXJlYFxuICAgKiAyLiBpZiBgdG9NaWRkbGV3YXJlYCBkb2Vzbid0IGV4aXN0IGluIHRoZSBzcGVjaWZpYyBgc3RlcGAsIHRoZSBtaWRkbGV3YXJlIHdpbGwgYmUgYXBwZW5kZWRcbiAgICogICAgIHRvIHNwZWNpZmljIGBzdGVwYCB3aXRoIHByaW9yaXR5IG9mIGBub3JtYWxgXG4gICAqL1xuICBwcml2YXRlIGdldE1pZGRsZXdhcmVMaXN0KCk6IEFycmF5PE1pZGRsZXdhcmVUeXBlPElucHV0LCBPdXRwdXQ+PiB7XG4gICAgY29uc3QgbWlkZGxld2FyZUxpc3Q6IEFycmF5PE1pZGRsZXdhcmVUeXBlPElucHV0LCBPdXRwdXQ+PiA9IFtdO1xuICAgIGNvbnN0IFtvcnBoYW5lZFJlbGF0aXZlRW50cmllcywgYW5jaG9yc10gPSB0aGlzLm5vcm1hbGl6ZVJlbGF0aXZlRW50cmllcygpO1xuICAgIGxldCBlbnRyeUxpc3QgPSBbLi4udGhpcy5hYnNvbHV0ZUVudHJpZXMsIC4uLm9ycGhhbmVkUmVsYXRpdmVFbnRyaWVzXTtcbiAgICBlbnRyeUxpc3QgPSB0aGlzLnNvcnQoZW50cnlMaXN0KTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJ5TGlzdCkge1xuICAgICAgY29uc3QgZGVmYXVsdEFuY2hvclZhbHVlID0geyBwcmV2OiB1bmRlZmluZWQsIG5leHQ6IHVuZGVmaW5lZCB9O1xuICAgICAgY29uc3QgeyBwcmV2LCBuZXh0IH0gPSBlbnRyeS5uYW1lID8gYW5jaG9yc1tlbnRyeS5uYW1lXSB8fCBkZWZhdWx0QW5jaG9yVmFsdWUgOiBkZWZhdWx0QW5jaG9yVmFsdWU7XG4gICAgICBsZXQgcmVsYXRpdmVFbnRyeSA9IHByZXY7XG4gICAgICAvL3JldmVyc2UgcmVsYXRpdmUgZW50cnkgbGlua2VkIGxpc3QgYW5kIGFkZCB0byBvcmRlcmVkIGhhbmRsZXIgbGlzdFxuICAgICAgd2hpbGUgKHJlbGF0aXZlRW50cnk/LnByZXYpIHtcbiAgICAgICAgcmVsYXRpdmVFbnRyeSA9IHJlbGF0aXZlRW50cnkucHJldjtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChyZWxhdGl2ZUVudHJ5KSB7XG4gICAgICAgIG1pZGRsZXdhcmVMaXN0LnB1c2gocmVsYXRpdmVFbnRyeS5taWRkbGV3YXJlKTtcbiAgICAgICAgcmVsYXRpdmVFbnRyeSA9IHJlbGF0aXZlRW50cnkubmV4dDtcbiAgICAgIH1cbiAgICAgIG1pZGRsZXdhcmVMaXN0LnB1c2goZW50cnkubWlkZGxld2FyZSk7XG4gICAgICBsZXQgb3JwaGFuZWRFbnRyeSA9IGVudHJ5IGFzIGFueTtcbiAgICAgIHdoaWxlICgob3JwaGFuZWRFbnRyeSBhcyBhbnkpLm5leHQpIHtcbiAgICAgICAgbWlkZGxld2FyZUxpc3QucHVzaCgob3JwaGFuZWRFbnRyeSBhcyBhbnkpLm5leHQubWlkZGxld2FyZSk7XG4gICAgICAgIG9ycGhhbmVkRW50cnkgPSAob3JwaGFuZWRFbnRyeSBhcyBhbnkpLm5leHQ7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZUVudHJ5ID0gbmV4dDtcbiAgICAgIHdoaWxlIChyZWxhdGl2ZUVudHJ5KSB7XG4gICAgICAgIG1pZGRsZXdhcmVMaXN0LnB1c2gocmVsYXRpdmVFbnRyeS5taWRkbGV3YXJlKTtcbiAgICAgICAgcmVsYXRpdmVFbnRyeSA9IHJlbGF0aXZlRW50cnkubmV4dDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1pZGRsZXdhcmVMaXN0LnJldmVyc2UoKTtcbiAgfVxuXG4gIHJlc29sdmU8SW5wdXRUeXBlIGV4dGVuZHMgSW5wdXQsIE91dHB1dFR5cGUgZXh0ZW5kcyBPdXRwdXQ+KFxuICAgIGhhbmRsZXI6IERlc2VyaWFsaXplSGFuZGxlcjxJbnB1dFR5cGUsIE91dHB1dFR5cGU+LFxuICAgIGNvbnRleHQ6IEhhbmRsZXJFeGVjdXRpb25Db250ZXh0XG4gICk6IEhhbmRsZXI8SW5wdXRUeXBlLCBPdXRwdXRUeXBlPiB7XG4gICAgZm9yIChjb25zdCBtaWRkbGV3YXJlIG9mIHRoaXMuZ2V0TWlkZGxld2FyZUxpc3QoKSkge1xuICAgICAgaGFuZGxlciA9IG1pZGRsZXdhcmUoaGFuZGxlciBhcyBIYW5kbGVyPElucHV0LCBPdXRwdXRUeXBlPiwgY29udGV4dCkgYXMgYW55O1xuICAgIH1cblxuICAgIHJldHVybiBoYW5kbGVyIGFzIEhhbmRsZXI8SW5wdXRUeXBlLCBPdXRwdXRUeXBlPjtcbiAgfVxufVxuXG5jb25zdCBzdGVwV2VpZ2h0czogeyBba2V5IGluIFN0ZXBdOiBudW1iZXIgfSA9IHtcbiAgaW5pdGlhbGl6ZTogNSxcbiAgc2VyaWFsaXplOiA0LFxuICBidWlsZDogMyxcbiAgZmluYWxpemVSZXF1ZXN0OiAyLFxuICBkZXNlcmlhbGl6ZTogMSxcbn07XG5cbmNvbnN0IHByaW9yaXR5V2VpZ2h0czogeyBba2V5IGluIFByaW9yaXR5XTogbnVtYmVyIH0gPSB7XG4gIGhpZ2g6IDMsXG4gIG5vcm1hbDogMixcbiAgbG93OiAxLFxufTtcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlkZGxld2FyZVN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL01pZGRsZXdhcmVTdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBZ0JhLFFBQUEsY0FBYyxHQUFHO0lBQzVCLElBQUksZUFBZSxHQUE2QyxFQUFFLENBQUM7SUFDbkUsSUFBSSxlQUFlLEdBQTZDLEVBQUUsQ0FBQztJQUNuRSxJQUFNLGNBQWMsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUU5QyxJQUFNLElBQUksR0FBRyxVQUFtRCxPQUFZO1FBQzFFLE9BQUEsT0FBTyxDQUFDLElBQUksQ0FDVixVQUFDLENBQUMsRUFBRSxDQUFDO1lBQ0gsT0FBQSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUN6QyxlQUFlLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUM7UUFEakYsQ0FDaUYsQ0FDcEY7SUFKRCxDQUlDLENBQUM7SUFFSixJQUFNLFlBQVksR0FBRyxVQUFDLFFBQWdCO1FBQ3BDLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFNLFFBQVEsR0FBRyxVQUFDLEtBQXFDO1lBQ3JELElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtnQkFDekMsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDakIsY0FBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDaEMsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO1FBQ0YsZUFBZSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkQsZUFBZSxHQUFHLGVBQWUsQ0FBQyxN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QUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25ELGVBQWUsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25ELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxNQUFNLEVBQUUsVUFDTixJQUE0QztZQUU1QyxJQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsc0JBQWMsRUFBeUIsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakIsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVELFlBQVksRUFBRSxPQUFPO1FBRXJCLE9BQU8sRUFBRSxVQUNQLE9BQWtELEVBQ2xELE9BQWdDOzs7Z0JBRWhDLEtBQXlCLElBQUEsS0FBQSxpQkFBQSxpQkFBaUIsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFBLGdCQUFBLDRCQUFFO29CQUFuRCxJQUFNLFVBQVUsV0FBQTtvQkFDbkIsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFxQyxFQUFFLE9BQU8sQ0FBUSxDQUFDO2lCQUM3RTs7Ozs7Ozs7O1lBQ0QsT0FBTyxPQUF5QyxDQUFDO1FBQ25ELENBQUM7S0FDRixDQUFDO0lBQ0YsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7QUFFRixJQUFNLFdBQVcsR0FBOEI7SUFDN0MsVUFBVSxFQUFFLENBQUM7SUFDYixTQUFTLEVBQUUsQ0FBQztJQUNaLEtBQUssRUFBRSxDQUFDO0lBQ1IsZUFBZSxFQUFFLENBQUM7SUFDbEIsV0FBVyxFQUFFLENBQUM7Q0FDZixDQUFDO0FBRUYsSUFBTSxlQUFlLEdBQWtDO0lBQ3JELElBQUksRUFBRSxDQUFDO0lBQ1AsTUFBTSxFQUFFLENBQUM7SUFDVCxHQUFHLEVBQUUsQ0FBQztDQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBYnNvbHV0ZUxvY2F0aW9uLFxuICBEZXNlcmlhbGl6ZUhhbmRsZXIsXG4gIEhhbmRsZXIsXG4gIEhhbmRsZXJFeGVjdXRpb25Db250ZXh0LFxuICBIYW5kbGVyT3B0aW9ucyxcbiAgTWlkZGxld2FyZVN0YWNrLFxuICBNaWRkbGV3YXJlVHlwZSxcbiAgUGx1Z2dhYmxlLFxuICBQcmlvcml0eSxcbiAgUmVsYXRpdmVMb2NhdGlvbixcbiAgU3RlcCxcbn0gZnJvbSBcIkBhd3Mtc2RrL3R5cGVzXCI7XG5cbmltcG9ydCB7IEFic29sdXRlTWlkZGxld2FyZUVudHJ5LCBNaWRkbGV3YXJlRW50cnksIE5vcm1hbGl6ZWQsIFJlbGF0aXZlTWlkZGxld2FyZUVudHJ5IH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdFN0YWNrID0gPElucHV0IGV4dGVuZHMgb2JqZWN0LCBPdXRwdXQgZXh0ZW5kcyBvYmplY3Q+KCk6IE1pZGRsZXdhcmVTdGFjazxJbnB1dCwgT3V0cHV0PiA9PiB7XG4gIGxldCBhYnNvbHV0ZUVudHJpZXM6IEFic29sdXRlTWlkZGxld2FyZUVudHJ5PElucHV0LCBPdXRwdXQ+W10gPSBbXTtcbiAgbGV0IHJlbGF0aXZlRW50cmllczogUmVsYXRpdmVNaWRkbGV3YXJlRW50cnk8SW5wdXQsIE91dHB1dD5bXSA9IFtdO1xuICBjb25zdCBlbnRyaWVzTmFtZVNldDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cbiAgY29uc3Qgc29ydCA9IDxUIGV4dGVuZHMgQWJzb2x1dGVNaWRkbGV3YXJlRW50cnk8SW5wdXQsIE91dHB1dD4+KGVudHJpZXM6IFRbXSk6IFRbXSA9PlxuICAgIGVudHJpZXMuc29ydChcbiAgICAgIChhLCBiKSA9PlxuICAgICAgICBzdGVwV2VpZ2h0c1tiLnN0ZXBdIC0gc3RlcFdlaWdodHNbYS5zdGVwXSB8fFxuICAgICAgICBwcmlvcml0eVdlaWdodHNbYi5wcmlvcml0eSB8fCBcIm5vcm1hbFwiXSAtIHByaW9yaXR5V2VpZ2h0c1thLnByaW9yaXR5IHx8IFwibm9ybWFsXCJdXG4gICAgKTtcblxuICBjb25zdCByZW1vdmVCeU5hbWUgPSAodG9SZW1vdmU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIGxldCBpc1JlbW92ZWQgPSBmYWxzZTtcbiAgICBjb25zdCBmaWx0ZXJDYiA9IChlbnRyeTogTWlkZGxld2FyZUVudHJ5PElucHV0LCBPdXRwdXQ+KTogYm9vbGVhbiA9PiB7XG4gICAgICBpZiAoZW50cnkubmFtZSAmJiBlbnRyeS5uYW1lID09PSB0b1JlbW92ZSkge1xuICAgICAgICBpc1JlbW92ZWQgPSB0cnVlO1xuICAgICAgICBlbnRyaWVzTmFtZVNldC5kZWxldGUodG9SZW1vdmUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGFic29sdXRlRW50cmllcyA9IGFic29sdXRlRW50cmllcy5maWx0ZXIoZmlsdGVyQ2IpO1xuICAgIHJlbGF0aXZlRW50cmllcyA9IHJlbGF0aXZlRW50cmllcy5maWx0ZXIoZmlsdGVyQ2IpO1xuICAgIHJldHVybiBpc1JlbW92ZWQ7XG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlQnlSZWZlcmVuY2UgPSAodG9SZW1vdmU6IE1pZGRsZXdhcmVUeXBlPElucHV0LCBPdXRwdXQ+KTogYm9vbGVhbiA9PiB7XG4gICAgbGV0IGlzUmVtb3ZlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGZpbHRlckNiID0gKGVudHJ5OiBNaWRkbGV3YXJlRW50cnk8SW5wdXQsIE91dHB1dD4pOiBib29sZWFuID0+IHtcbiAgICAgIGlmIChlbnRyeS5taWRkbGV3YXJlID09PSB0b1JlbW92ZSkge1xuICAgICAgICBpc1JlbW92ZWQgPSB0cnVlO1xuICAgICAgICBpZiAoZW50cnkubmFtZSkgZW50cmllc05hbWVTZXQuZGVsZXRlKGVudHJ5Lm5hbWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGFic29sdXRlRW50cmllcyA9IGFic29sdXRlRW50cmllcy5maWx0ZXIoZmlsdGVyQ2IpO1xuICAgIHJlbGF0aXZlRW50cmllcyA9IHJlbGF0aXZlRW50cmllcy5maWx0ZXIoZmlsdGVyQ2IpO1xuICAgIHJldHVybiBpc1JlbW92ZWQ7XG4gIH07XG5cbiAgY29uc3QgY2xvbmVUbyA9IDxJbnB1dFR5cGUgZXh0ZW5kcyBJbnB1dCwgT3V0cHV0VHlwZSBleHRlbmRzIE91dHB1dD4oXG4gICAgdG9TdGFjazogTWlkZGxld2FyZVN0YWNrPElucHV0VHlwZSwgT3V0cHV0VHlwZT5cbiAgKTogTWlkZGxld2FyZVN0YWNrPElucHV0VHlwZSwgT3V0cHV0VHlwZT4gPT4ge1xuICAgIGFic29sdXRlRW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICB0b1N0YWNrLmFkZChlbnRyeS5taWRkbGV3YXJlLCB7IC4uLmVudHJ5IH0pO1xuICAgIH0pO1xuICAgIHJlbGF0aXZlRW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICB0b1N0YWNrLmFkZFJlbGF0aXZlVG8oZW50cnkubWlkZGxld2FyZSwgeyAuLi5lbnRyeSB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gdG9TdGFjaztcbiAgfTtcblxuICBjb25zdCBleHBhbmRSZWxhdGl2ZU1pZGRsZXdhcmVMaXN0ID0gKFxuICAgIGZyb206IE5vcm1hbGl6ZWQ8TWlkZGxld2FyZUVudHJ5PElucHV0LCBPdXRwdXQ+LCBJbnB1dCwgT3V0cHV0PlxuICApOiBNaWRkbGV3YXJlRW50cnk8SW5wdXQsIE91dHB1dD5bXSA9PiB7XG4gICAgY29uc3QgZXhwYW5kZWRNaWRkbGV3YXJlTGlzdDogTWlkZGxld2FyZUVudHJ5PElucHV0LCBPdXRwdXQ+W10gPSBbXTtcbiAgICBmcm9tLmJlZm9yZS5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgaWYgKGVudHJ5LmJlZm9yZS5sZW5ndGggPT09IDAgJiYgZW50cnkuYWZ0ZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGV4cGFuZGVkTWlkZGxld2FyZUxpc3QucHVzaChlbnRyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleHBhbmRlZE1pZGRsZXdhcmVMaXN0LnB1c2goLi4uZXhwYW5kUmVsYXRpdmVNaWRkbGV3YXJlTGlzdChlbnRyeSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGV4cGFuZGVkTWlkZGxld2FyZUxpc3QucHVzaChmcm9tKTtcbiAgICBmcm9tLmFmdGVyLnJldmVyc2UoKS5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgaWYgKGVudHJ5LmJlZm9yZS5sZW5ndGggPT09IDAgJiYgZW50cnkuYWZ0ZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGV4cGFuZGVkTWlkZGxld2FyZUxpc3QucHVzaChlbnRyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleHBhbmRlZE1pZGRsZXdhcmVMaXN0LnB1c2goLi4uZXhwYW5kUmVsYXRpdmVNaWRkbGV3YXJlTGlzdChlbnRyeSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBleHBhbmRlZE1pZGRsZXdhcmVMaXN0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgYSBmaW5hbCBsaXN0IG9mIG1pZGRsZXdhcmUgaW4gdGhlIG9yZGVyIG9mIGJlaW5nIGV4ZWN1dGVkIGluIHRoZSByZXNvbHZlZCBoYW5kbGVyLlxuICAgKi9cbiAgY29uc3QgZ2V0TWlkZGxld2FyZUxpc3QgPSAoKTogQXJyYXk8TWlkZGxld2FyZVR5cGU8SW5wdXQsIE91dHB1dD4+ID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkQWJzb2x1dGVFbnRyaWVzOiBOb3JtYWxpemVkPEFic29sdXRlTWlkZGxld2FyZUVudHJ5PElucHV0LCBPdXRwdXQ+LCBJbnB1dCwgT3V0cHV0PltdID0gW107XG4gICAgY29uc3Qgbm9ybWFsaXplZFJlbGF0aXZlRW50cmllczogTm9ybWFsaXplZDxSZWxhdGl2ZU1pZGRsZXdhcmVFbnRyeTxJbnB1dCwgT3V0cHV0PiwgSW5wdXQsIE91dHB1dD5bXSA9IFtdO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRFbnRyaWVzTmFtZU1hcDoge1xuICAgICAgW21pZGRsZXdhcmVOYW1lOiBzdHJpbmddOiBOb3JtYWxpemVkPE1pZGRsZXdhcmVFbnRyeTxJbnB1dCwgT3V0cHV0PiwgSW5wdXQsIE91dHB1dD47XG4gICAgfSA9IHt9O1xuXG4gICAgYWJzb2x1dGVFbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkRW50cnkgPSB7XG4gICAgICAgIC4uLmVudHJ5LFxuICAgICAgICBiZWZvcmU6IFtdLFxuICAgICAgICBhZnRlcjogW10sXG4gICAgICB9O1xuICAgICAgaWYgKG5vcm1hbGl6ZWRFbnRyeS5uYW1lKSBub3JtYWxpemVkRW50cmllc05hbWVNYXBbbm9ybWFsaXplZEVudHJ5Lm5hbWVdID0gbm9ybWFsaXplZEVudHJ5O1xuICAgICAgbm9ybWFsaXplZEFic29sdXRlRW50cmllcy5wdXNoKG5vcm1hbGl6ZWRFbnRyeSk7XG4gICAgfSk7XG5cbiAgICByZWxhdGl2ZUVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRFbnRyeSA9IHtcbiAgICAgICAgLi4uZW50cnksXG4gICAgICAgIGJlZm9yZTogW10sXG4gICAgICAgIGFmdGVyOiBbXSxcbiAgICAgIH07XG4gICAgICBpZiAobm9ybWFsaXplZEVudHJ5Lm5hbWUpIG5vcm1hbGl6ZWRFbnRyaWVzTmFtZU1hcFtub3JtYWxpemVkRW50cnkubmFtZV0gPSBub3JtYWxpemVkRW50cnk7XG4gICAgICBub3JtYWxpemVkUmVsYXRpdmVFbnRyaWVzLnB1c2gobm9ybWFsaXplZEVudHJ5KTtcbiAgICB9KTtcblxuICAgIG5vcm1hbGl6ZWRSZWxhdGl2ZUVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgIGlmIChlbnRyeS50b01pZGRsZXdhcmUpIHtcbiAgICAgICAgY29uc3QgdG9NaWRkbGV3YXJlID0gbm9ybWFsaXplZEVudHJpZXNOYW1lTWFwW2VudHJ5LnRvTWlkZGxld2FyZV07XG4gICAgICAgIGlmICh0b01pZGRsZXdhcmUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGAke2VudHJ5LnRvTWlkZGxld2FyZX0gaXMgbm90IGZvdW5kIHdoZW4gYWRkaW5nICR7ZW50cnkubmFtZSB8fCBcImFub255bW91c1wifSBtaWRkbGV3YXJlICR7ZW50cnkucmVsYXRpb259ICR7XG4gICAgICAgICAgICAgIGVudHJ5LnRvTWlkZGxld2FyZVxuICAgICAgICAgICAgfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRyeS5yZWxhdGlvbiA9PT0gXCJhZnRlclwiKSB7XG4gICAgICAgICAgdG9NaWRkbGV3YXJlLmFmdGVyLnB1c2goZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRyeS5yZWxhdGlvbiA9PT0gXCJiZWZvcmVcIikge1xuICAgICAgICAgIHRvTWlkZGxld2FyZS5iZWZvcmUucHVzaChlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IG1haW5DaGFpbiA9IHNvcnQobm9ybWFsaXplZEFic29sdXRlRW50cmllcylcbiAgICAgIC5tYXAoZXhwYW5kUmVsYXRpdmVNaWRkbGV3YXJlTGlzdClcbiAgICAgIC5yZWR1Y2UoKHdob2xlTGlzdCwgZXhwZW5kZWRNaWRkbGV3YXJlTGlzdCkgPT4ge1xuICAgICAgICAvLyBUT0RPOiBSZXBsYWNlIGl0IHdpdGggQXJyYXkuZmxhdCgpO1xuICAgICAgICB3aG9sZUxpc3QucHVzaCguLi5leHBlbmRlZE1pZGRsZXdhcmVMaXN0KTtcbiAgICAgICAgcmV0dXJuIHdob2xlTGlzdDtcbiAgICAgIH0sIFtdIGFzIE1pZGRsZXdhcmVFbnRyeTxJbnB1dCwgT3V0cHV0PltdKTtcbiAgICByZXR1cm4gbWFpbkNoYWluLm1hcCgoZW50cnkpID0+IGVudHJ5Lm1pZGRsZXdhcmUpO1xuICB9O1xuXG4gIGNvbnN0IHN0YWNrID0ge1xuICAgIGFkZDogKG1pZGRsZXdhcmU6IE1pZGRsZXdhcmVUeXBlPElucHV0LCBPdXRwdXQ+LCBvcHRpb25zOiBIYW5kbGVyT3B0aW9ucyAmIEFic29sdXRlTG9jYXRpb24gPSB7fSkgPT4ge1xuICAgICAgY29uc3QgeyBuYW1lIH0gPSBvcHRpb25zO1xuICAgICAgY29uc3QgZW50cnk6IEFic29sdXRlTWlkZGxld2FyZUVudHJ5PElucHV0LCBPdXRwdXQ+ID0ge1xuICAgICAgICBzdGVwOiBcImluaXRpYWxpemVcIixcbiAgICAgICAgcHJpb3JpdHk6IFwibm9ybWFsXCIsXG4gICAgICAgIG1pZGRsZXdhcmUsXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB9O1xuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgaWYgKGVudHJpZXNOYW1lU2V0LmhhcyhuYW1lKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIG1pZGRsZXdhcmUgbmFtZSAnJHtuYW1lfSdgKTtcbiAgICAgICAgfVxuICAgICAgICBlbnRyaWVzTmFtZVNldC5hZGQobmFtZSk7XG4gICAgICB9XG4gICAgICBhYnNvbHV0ZUVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgfSxcblxuICAgIGFkZFJlbGF0aXZlVG86IChtaWRkbGV3YXJlOiBNaWRkbGV3YXJlVHlwZTxJbnB1dCwgT3V0cHV0Piwgb3B0aW9uczogSGFuZGxlck9wdGlvbnMgJiBSZWxhdGl2ZUxvY2F0aW9uKSA9PiB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IG9wdGlvbnM7XG4gICAgICBjb25zdCBlbnRyeTogUmVsYXRpdmVNaWRkbGV3YXJlRW50cnk8SW5wdXQsIE91dHB1dD4gPSB7XG4gICAgICAgIG1pZGRsZXdhcmUsXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB9O1xuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgaWYgKGVudHJpZXNOYW1lU2V0LmhhcyhuYW1lKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlZCBtaWRkbGV3YXJlIG5hbWUgJyR7bmFtZX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgZW50cmllc05hbWVTZXQuYWRkKG5hbWUpO1xuICAgICAgfVxuICAgICAgcmVsYXRpdmVFbnRyaWVzLnB1c2goZW50cnkpO1xuICAgIH0sXG5cbiAgICBjbG9uZTogKCkgPT4gY2xvbmVUbyhjb25zdHJ1Y3RTdGFjazxJbnB1dCwgT3V0cHV0PigpKSxcblxuICAgIHVzZTogKHBsdWdpbjogUGx1Z2dhYmxlPElucHV0LCBPdXRwdXQ+KSA9PiB7XG4gICAgICBwbHVnaW4uYXBwbHlUb1N0YWNrKHN0YWNrKTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlOiAodG9SZW1vdmU6IE1pZGRsZXdhcmVUeXBlPElucHV0LCBPdXRwdXQ+IHwgc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgICBpZiAodHlwZW9mIHRvUmVtb3ZlID09PSBcInN0cmluZ1wiKSByZXR1cm4gcmVtb3ZlQnlOYW1lKHRvUmVtb3ZlKTtcbiAgICAgIGVsc2UgcmV0dXJuIHJlbW92ZUJ5UmVmZXJlbmNlKHRvUmVtb3ZlKTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlQnlUYWc6ICh0b1JlbW92ZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgICBsZXQgaXNSZW1vdmVkID0gZmFsc2U7XG4gICAgICBjb25zdCBmaWx0ZXJDYiA9IChlbnRyeTogTWlkZGxld2FyZUVudHJ5PElucHV0LCBPdXRwdXQ+KTogYm9vbGVhbiA9PiB7XG4gICAgICAgIGNvbnN0IHsgdGFncywgbmFtZSB9ID0gZW50cnk7XG4gICAgICAgIGlmICh0YWdzICYmIHRhZ3MuaW5jbHVkZXModG9SZW1vdmUpKSB7XG4gICAgICAgICAgaWYgKG5hbWUpIGVudHJpZXNOYW1lU2V0LmRlbGV0ZShuYW1lKTtcbiAgICAgICAgICBpc1JlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH07XG4gICAgICBhYnNvbHV0ZUVudHJpZXMgPSBhYnNvbHV0ZUVudHJpZXMuZmlsdGVyKGZpbHRlckNiKTtcbiAgICAgIHJlbGF0aXZlRW50cmllcyA9IHJlbGF0aXZlRW50cmllcy5maWx0ZXIoZmlsdGVyQ2IpO1xuICAgICAgcmV0dXJuIGlzUmVtb3ZlZDtcbiAgICB9LFxuXG4gICAgY29uY2F0OiA8SW5wdXRUeXBlIGV4dGVuZHMgSW5wdXQsIE91dHB1dFR5cGUgZXh0ZW5kcyBPdXRwdXQ+KFxuICAgICAgZnJvbTogTWlkZGxld2FyZVN0YWNrPElucHV0VHlwZSwgT3V0cHV0VHlwZT5cbiAgICApOiBNaWRkbGV3YXJlU3RhY2s8SW5wdXRUeXBlLCBPdXRwdXRUeXBlPiA9PiB7XG4gICAgICBjb25zdCBjbG9uZWQgPSBjbG9uZVRvKGNvbnN0cnVjdFN0YWNrPElucHV0VHlwZSwgT3V0cHV0VHlwZT4oKSk7XG4gICAgICBjbG9uZWQudXNlKGZyb20pO1xuICAgICAgcmV0dXJuIGNsb25lZDtcbiAgICB9LFxuXG4gICAgYXBwbHlUb1N0YWNrOiBjbG9uZVRvLFxuXG4gICAgcmVzb2x2ZTogPElucHV0VHlwZSBleHRlbmRzIElucHV0LCBPdXRwdXRUeXBlIGV4dGVuZHMgT3V0cHV0PihcbiAgICAgIGhhbmRsZXI6IERlc2VyaWFsaXplSGFuZGxlcjxJbnB1dFR5cGUsIE91dHB1dFR5cGU+LFxuICAgICAgY29udGV4dDogSGFuZGxlckV4ZWN1dGlvbkNvbnRleHRcbiAgICApOiBIYW5kbGVyPElucHV0VHlwZSwgT3V0cHV0VHlwZT4gPT4ge1xuICAgICAgZm9yIChjb25zdCBtaWRkbGV3YXJlIG9mIGdldE1pZGRsZXdhcmVMaXN0KCkucmV2ZXJzZSgpKSB7XG4gICAgICAgIGhhbmRsZXIgPSBtaWRkbGV3YXJlKGhhbmRsZXIgYXMgSGFuZGxlcjxJbnB1dCwgT3V0cHV0VHlwZT4sIGNvbnRleHQpIGFzIGFueTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYW5kbGVyIGFzIEhhbmRsZXI8SW5wdXRUeXBlLCBPdXRwdXRUeXBlPjtcbiAgICB9LFxuICB9O1xuICByZXR1cm4gc3RhY2s7XG59O1xuXG5jb25zdCBzdGVwV2VpZ2h0czogeyBba2V5IGluIFN0ZXBdOiBudW1iZXIgfSA9IHtcbiAgaW5pdGlhbGl6ZTogNSxcbiAgc2VyaWFsaXplOiA0LFxuICBidWlsZDogMyxcbiAgZmluYWxpemVSZXF1ZXN0OiAyLFxuICBkZXNlcmlhbGl6ZTogMSxcbn07XG5cbmNvbnN0IHByaW9yaXR5V2VpZ2h0czogeyBba2V5IGluIFByaW9yaXR5XTogbnVtYmVyIH0gPSB7XG4gIGhpZ2g6IDMsXG4gIG5vcm1hbDogMixcbiAgbG93OiAxLFxufTtcbiJdfQ==

@@ -1,13 +0,15 @@

import { HandlerOptions, MiddlewareType, Priority, Step } from "@aws-sdk/types";
import { AbsoluteLocation, HandlerOptions, MiddlewareType, Priority, RelativeLocation, Step } from "@aws-sdk/types";
export interface MiddlewareEntry<Input extends object, Output extends object> extends HandlerOptions {
step: Step;
middleware: MiddlewareType<Input, Output>;
priority: Priority;
}
export interface RelativeMiddlewareEntry<Input extends object, Output extends object> extends HandlerOptions {
export interface AbsoluteMiddlewareEntry<Input extends object, Output extends object> extends MiddlewareEntry<Input, Output>, AbsoluteLocation {
step: Step;
middleware: MiddlewareType<Input, Output>;
next?: string;
prev?: string;
priority: Priority;
}
export interface RelativeMiddlewareEntry<Input extends object, Output extends object> extends MiddlewareEntry<Input, Output>, RelativeLocation {
}
export declare type Normalized<T extends MiddlewareEntry<Input, Output>, Input extends object = {}, Output extends object = {}> = T & {
after: Normalized<RelativeMiddlewareEntry<Input, Output>, Input, Output>[];
before: Normalized<RelativeMiddlewareEntry<Input, Output>, Input, Output>[];
};
export interface NormalizedRelativeEntry<Input extends object, Output extends object> extends HandlerOptions {

@@ -23,11 +25,1 @@ step: Step;

};
export declare type NamedRelativeEntriesMap<Input extends object, Output extends object> = {
[key: string]: NormalizedRelativeEntry<Input, Output>;
};
export declare type RelativeMiddlewareAnchor<Input extends object, Output extends object> = {
[name: string]: {
prev?: NormalizedRelativeEntry<Input, Output>;
next?: NormalizedRelativeEntry<Input, Output>;
};
};
export declare type NormalizingEntryResult<Input extends object, Output extends object> = [Array<NormalizedRelativeEntry<Input, Output>>, RelativeMiddlewareAnchor<Input, Output>];
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhhbmRsZXJPcHRpb25zLCBNaWRkbGV3YXJlVHlwZSwgUHJpb3JpdHksIFN0ZXAgfSBmcm9tIFwiQGF3cy1zZGsvdHlwZXNcIjtcbmV4cG9ydCBpbnRlcmZhY2UgTWlkZGxld2FyZUVudHJ5PElucHV0IGV4dGVuZHMgb2JqZWN0LCBPdXRwdXQgZXh0ZW5kcyBvYmplY3Q+IGV4dGVuZHMgSGFuZGxlck9wdGlvbnMge1xuICBzdGVwOiBTdGVwO1xuICBtaWRkbGV3YXJlOiBNaWRkbGV3YXJlVHlwZTxJbnB1dCwgT3V0cHV0PjtcbiAgcHJpb3JpdHk6IFByaW9yaXR5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbGF0aXZlTWlkZGxld2FyZUVudHJ5PElucHV0IGV4dGVuZHMgb2JqZWN0LCBPdXRwdXQgZXh0ZW5kcyBvYmplY3Q+IGV4dGVuZHMgSGFuZGxlck9wdGlvbnMge1xuICBzdGVwOiBTdGVwO1xuICBtaWRkbGV3YXJlOiBNaWRkbGV3YXJlVHlwZTxJbnB1dCwgT3V0cHV0PjtcbiAgbmV4dD86IHN0cmluZztcbiAgcHJldj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3JtYWxpemVkUmVsYXRpdmVFbnRyeTxJbnB1dCBleHRlbmRzIG9iamVjdCwgT3V0cHV0IGV4dGVuZHMgb2JqZWN0PiBleHRlbmRzIEhhbmRsZXJPcHRpb25zIHtcbiAgc3RlcDogU3RlcDtcbiAgbWlkZGxld2FyZTogTWlkZGxld2FyZVR5cGU8SW5wdXQsIE91dHB1dD47XG4gIG5leHQ/OiBOb3JtYWxpemVkUmVsYXRpdmVFbnRyeTxJbnB1dCwgT3V0cHV0PjtcbiAgcHJldj86IE5vcm1hbGl6ZWRSZWxhdGl2ZUVudHJ5PElucHV0LCBPdXRwdXQ+O1xuICBwcmlvcml0eTogbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgTmFtZWRNaWRkbGV3YXJlRW50cmllc01hcDxJbnB1dCBleHRlbmRzIG9iamVjdCwgT3V0cHV0IGV4dGVuZHMgb2JqZWN0PiA9IHtcbiAgW2tleTogc3RyaW5nXTogTWlkZGxld2FyZUVudHJ5PElucHV0LCBPdXRwdXQ+O1xufTtcblxuZXhwb3J0IHR5cGUgTmFtZWRSZWxhdGl2ZUVudHJpZXNNYXA8SW5wdXQgZXh0ZW5kcyBvYmplY3QsIE91dHB1dCBleHRlbmRzIG9iamVjdD4gPSB7XG4gIFtrZXk6IHN0cmluZ106IE5vcm1hbGl6ZWRSZWxhdGl2ZUVudHJ5PElucHV0LCBPdXRwdXQ+O1xufTtcblxuZXhwb3J0IHR5cGUgUmVsYXRpdmVNaWRkbGV3YXJlQW5jaG9yPElucHV0IGV4dGVuZHMgb2JqZWN0LCBPdXRwdXQgZXh0ZW5kcyBvYmplY3Q+ID0ge1xuICBbbmFtZTogc3RyaW5nXToge1xuICAgIHByZXY/OiBOb3JtYWxpemVkUmVsYXRpdmVFbnRyeTxJbnB1dCwgT3V0cHV0PjtcbiAgICBuZXh0PzogTm9ybWFsaXplZFJlbGF0aXZlRW50cnk8SW5wdXQsIE91dHB1dD47XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBOb3JtYWxpemluZ0VudHJ5UmVzdWx0PElucHV0IGV4dGVuZHMgb2JqZWN0LCBPdXRwdXQgZXh0ZW5kcyBvYmplY3Q+ID0gW1xuICBBcnJheTxOb3JtYWxpemVkUmVsYXRpdmVFbnRyeTxJbnB1dCwgT3V0cHV0Pj4sXG4gIFJlbGF0aXZlTWlkZGxld2FyZUFuY2hvcjxJbnB1dCwgT3V0cHV0PlxuXTtcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic29sdXRlTG9jYXRpb24sIEhhbmRsZXJPcHRpb25zLCBNaWRkbGV3YXJlVHlwZSwgUHJpb3JpdHksIFJlbGF0aXZlTG9jYXRpb24sIFN0ZXAgfSBmcm9tIFwiQGF3cy1zZGsvdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBNaWRkbGV3YXJlRW50cnk8SW5wdXQgZXh0ZW5kcyBvYmplY3QsIE91dHB1dCBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBIYW5kbGVyT3B0aW9ucyB7XG4gIG1pZGRsZXdhcmU6IE1pZGRsZXdhcmVUeXBlPElucHV0LCBPdXRwdXQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFic29sdXRlTWlkZGxld2FyZUVudHJ5PElucHV0IGV4dGVuZHMgb2JqZWN0LCBPdXRwdXQgZXh0ZW5kcyBvYmplY3Q+XG4gIGV4dGVuZHMgTWlkZGxld2FyZUVudHJ5PElucHV0LCBPdXRwdXQ+LFxuICAgIEFic29sdXRlTG9jYXRpb24ge1xuICBzdGVwOiBTdGVwO1xuICBwcmlvcml0eTogUHJpb3JpdHk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVsYXRpdmVNaWRkbGV3YXJlRW50cnk8SW5wdXQgZXh0ZW5kcyBvYmplY3QsIE91dHB1dCBleHRlbmRzIG9iamVjdD5cbiAgZXh0ZW5kcyBNaWRkbGV3YXJlRW50cnk8SW5wdXQsIE91dHB1dD4sXG4gICAgUmVsYXRpdmVMb2NhdGlvbiB7fVxuXG5leHBvcnQgdHlwZSBOb3JtYWxpemVkPFxuICBUIGV4dGVuZHMgTWlkZGxld2FyZUVudHJ5PElucHV0LCBPdXRwdXQ+LFxuICBJbnB1dCBleHRlbmRzIG9iamVjdCA9IHt9LFxuICBPdXRwdXQgZXh0ZW5kcyBvYmplY3QgPSB7fVxuPiA9IFQgJiB7XG4gIGFmdGVyOiBOb3JtYWxpemVkPFJlbGF0aXZlTWlkZGxld2FyZUVudHJ5PElucHV0LCBPdXRwdXQ+LCBJbnB1dCwgT3V0cHV0PltdO1xuICBiZWZvcmU6IE5vcm1hbGl6ZWQ8UmVsYXRpdmVNaWRkbGV3YXJlRW50cnk8SW5wdXQsIE91dHB1dD4sIElucHV0LCBPdXRwdXQ+W107XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vcm1hbGl6ZWRSZWxhdGl2ZUVudHJ5PElucHV0IGV4dGVuZHMgb2JqZWN0LCBPdXRwdXQgZXh0ZW5kcyBvYmplY3Q+IGV4dGVuZHMgSGFuZGxlck9wdGlvbnMge1xuICBzdGVwOiBTdGVwO1xuICBtaWRkbGV3YXJlOiBNaWRkbGV3YXJlVHlwZTxJbnB1dCwgT3V0cHV0PjtcbiAgbmV4dD86IE5vcm1hbGl6ZWRSZWxhdGl2ZUVudHJ5PElucHV0LCBPdXRwdXQ+O1xuICBwcmV2PzogTm9ybWFsaXplZFJlbGF0aXZlRW50cnk8SW5wdXQsIE91dHB1dD47XG4gIHByaW9yaXR5OiBudWxsO1xufVxuXG5leHBvcnQgdHlwZSBOYW1lZE1pZGRsZXdhcmVFbnRyaWVzTWFwPElucHV0IGV4dGVuZHMgb2JqZWN0LCBPdXRwdXQgZXh0ZW5kcyBvYmplY3Q+ID0ge1xuICBba2V5OiBzdHJpbmddOiBNaWRkbGV3YXJlRW50cnk8SW5wdXQsIE91dHB1dD47XG59O1xuIl19
{
"name": "@aws-sdk/middleware-stack",
"version": "1.0.0-gamma.4",
"version": "1.0.0-gamma.5",
"description": "Provides a means for composing multiple middleware functions into a single handler",

@@ -10,2 +10,3 @@ "scripts": {

"build:es": "tsc -p tsconfig.es.json",
"build": "yarn build:es && yarn build:cjs",
"test": "jest"

@@ -23,3 +24,3 @@ },

"dependencies": {
"@aws-sdk/types": "1.0.0-gamma.3",
"@aws-sdk/types": "1.0.0-gamma.4",
"tslib": "^1.8.0"

@@ -26,0 +27,0 @@ },

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc