haya-select 1.0.93 → 1.0.94
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/select/index.js
CHANGED
|
@@ -193,7 +193,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
193
193
|
setup() {
|
|
194
194
|
const { t } = Config.current().getUseTranslate()();
|
|
195
195
|
this.t = t;
|
|
196
|
-
if (this.props.values) {
|
|
196
|
+
if (Array.isArray(this.props.values)) {
|
|
197
197
|
for (const value of this.props.values) {
|
|
198
198
|
if (typeof value == "undefined") {
|
|
199
199
|
throw new Error("HayaSelect: Undefined given as value");
|
|
@@ -241,7 +241,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
241
241
|
}, [this.tt.callOptionsPositionAboveIfOutsideScreen, this.s.optionsContainerLayout]);
|
|
242
242
|
useEffect(() => {
|
|
243
243
|
const currentOptionIds = this.s.currentOptions?.map((currentOption) => currentOption.value);
|
|
244
|
-
if (this.props.values && anythingDifferent(currentOptionIds, this.props.values) && typeof this.props.options == "function") {
|
|
244
|
+
if (Array.isArray(this.props.values) && anythingDifferent(currentOptionIds, this.props.values) && typeof this.props.options == "function") {
|
|
245
245
|
this.setCurrentFromGivenValues();
|
|
246
246
|
}
|
|
247
247
|
}, [this.props.values]);
|
|
@@ -316,10 +316,12 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
316
316
|
getValues = () => ("values" in this.props) ? this.p.values : this.s.currentOptions.map((currentOption) => currentOption.value);
|
|
317
317
|
getCurrentOptions = () => {
|
|
318
318
|
if ("values" in this.props && typeof this.props.values != "undefined") {
|
|
319
|
-
if (Array.isArray(this.
|
|
319
|
+
if (Array.isArray(this.p.values) && this.p.values.length === 0)
|
|
320
|
+
return [];
|
|
321
|
+
if (Array.isArray(this.props.options) && Array.isArray(this.p.values)) {
|
|
320
322
|
return this.p.values.map((value) => this.p.options.find((option) => option.value == value));
|
|
321
323
|
}
|
|
322
|
-
else if (this.s.loadedOptions && this.
|
|
324
|
+
else if (this.s.loadedOptions && Array.isArray(this.p.values)) {
|
|
323
325
|
return this.p.values.map((value) => {
|
|
324
326
|
let foundOption = this.s.loadedOptions.find((option) => option.value == value);
|
|
325
327
|
if (!foundOption) {
|
|
@@ -331,10 +333,10 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
331
333
|
return foundOption;
|
|
332
334
|
});
|
|
333
335
|
}
|
|
334
|
-
else if (typeof this.props.options == "function"
|
|
336
|
+
else if (typeof this.props.options == "function") {
|
|
335
337
|
// Options haven't been loaded yet.
|
|
336
338
|
}
|
|
337
|
-
else if (this.
|
|
339
|
+
else if (Array.isArray(this.p.values)) {
|
|
338
340
|
return this.p.values.map((value) => ({ value }));
|
|
339
341
|
}
|
|
340
342
|
}
|
|
@@ -1088,6 +1090,12 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
1088
1090
|
};
|
|
1089
1091
|
async setCurrentFromGivenValues() {
|
|
1090
1092
|
const { options, values } = this.p;
|
|
1093
|
+
if (Array.isArray(values) && values.length === 0) {
|
|
1094
|
+
if (this.s.currentOptions?.length) {
|
|
1095
|
+
this.setState({ currentOptions: [] });
|
|
1096
|
+
}
|
|
1097
|
+
return;
|
|
1098
|
+
}
|
|
1091
1099
|
const result = await options({ page: this.getActivePage(), values });
|
|
1092
1100
|
const { options: currentOptions } = this.parseOptionsResult(result);
|
|
1093
1101
|
const currentValues = currentOptions?.map((currentOption) => currentOption.value);
|
|
@@ -1097,4 +1105,4 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
1097
1105
|
}
|
|
1098
1106
|
}
|
|
1099
1107
|
}));
|
|
1100
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VsZWN0L2luZGV4LmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQTtBQUNwRSxPQUFPLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDbEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxJQUFJLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDekUsT0FBTyxLQUFLLEVBQUMsRUFBQyxJQUFJLEVBQUMsU0FBUyxFQUFDLE1BQU0sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUNqRCxPQUFPLEVBQUMsY0FBYyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBQ3hGLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQTtBQUMvQixPQUFPLGVBQWUsTUFBTSx1Q0FBdUMsQ0FBQTtBQUNuRSxPQUFPLGNBQWMsTUFBTSxtREFBbUQsQ0FBQTtBQUM5RSxPQUFPLGdCQUFnQixNQUFNLHFEQUFxRCxDQUFBO0FBQ2xGLE9BQU8sSUFBSSxNQUFNLHNDQUFzQyxDQUFBO0FBQ3ZELE9BQU8sTUFBTSxNQUFNLFVBQVUsQ0FBQTtBQUM3QixPQUFPLFdBQVcsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN4QyxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUE7QUFDbEMsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUE7QUFDN0MsT0FBTyxVQUFVLE1BQU0sMEJBQTBCLENBQUE7QUFDakQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUNuQyxPQUFPLGdCQUFnQixNQUFNLHVCQUF1QixDQUFBO0FBQ3BELE9BQU8sZUFBZSxNQUFNLHFDQUFxQyxDQUFBO0FBRWpFLE1BQU0sTUFBTSxHQUFHLEVB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QyxhQUFhLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUMsY0FBYyxFQUFDLENBQUMsQ0FBQTtRQUNqQyxDQUFDO0lBQ0gsQ0FBQztDQUNGLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthbnl0aGluZ0RpZmZlcmVudH0gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL2J1aWxkL2RpZmYtdXRpbHNcIlxuaW1wb3J0IENvbmZpZyBmcm9tIFwiLi4vY29uZmlnLmpzXCJcbmltcG9ydCB7ZGlnLGRpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IHtEaW1lbnNpb25zLFBsYXRmb3JtLFByZXNzYWJsZSxUZXh0SW5wdXQsVmlld30gZnJvbSBcInJlYWN0LW5hdGl2ZVwiXG5pbXBvcnQgUmVhY3Qse21lbW8sdXNlRWZmZWN0LHVzZVJlZn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7c2hhcGVDb21wb25lbnQsU2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9zaGFwZS1jb21wb25lbnQuanNcIlxuaW1wb3J0IGRlYm91bmNlIGZyb20gXCJkZWJvdW5jZVwiXG5pbXBvcnQgRm9udEF3ZXNvbWVJY29uIGZyb20gXCJyZWFjdC1uYXRpdmUtdmVjdG9yLWljb25zL0ZvbnRBd2Vzb21lXCJcbmltcG9ydCBpZEZvckNvbXBvbmVudCBmcm9tIFwiQGthc3Blcm5qL2FwaS1tYWtlci9idWlsZC9pbnB1dHMvaWQtZm9yLWNvbXBvbmVudFwiXG5pbXBvcnQgbmFtZUZvckNvbXBvbmVudCBmcm9tIFwiQGthc3Blcm5qL2FwaS1tYWtlci9idWlsZC9pbnB1dHMvbmFtZS1mb3ItY29tcG9uZW50XCJcbmltcG9ydCBUZXh0IGZyb20gXCJAa2FzcGVybmovYXBpLW1ha2VyL2J1aWxkL3V0aWxzL3RleHRcIlxuaW1wb3J0IE9wdGlvbiBmcm9tIFwiLi9vcHRpb25cIlxuaW1wb3J0IE9wdGlvbkdyb3VwIGZyb20gXCIuL29wdGlvbi1ncm91cFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBwcm9wVHlwZXNFeGFjdCBmcm9tIFwicHJvcC10eXBlcy1leGFjdFwiXG5pbXBvcnQgUmVuZGVySHRtbCBmcm9tIFwicmVhY3QtbmF0aXZlLXJlbmRlci1odG1sXCJcbmltcG9ydCB7UG9ydGFsfSBmcm9tIFwiY29uam9pbnRtZW50XCJcbmltcG9ydCB1c2VFdmVudExpc3RlbmVyIGZyb20gXCJ5YS11c2UtZXZlbnQtbGlzdGVuZXJcIlxuaW1wb3J0IHVzZVByZXNzT3V0c2lkZSBmcm9tIFwib3V0c2lkZS1leWUvYnVpbGQvdXNlLXByZXNzLW91dHNpZGVcIlxuXG5jb25zdCBzdHlsZXMgPSB7fVxuY29uc3QgZGF0YVNldHMgPSB7fVxuY29uc3QgcGFnaW5hdGlvbkJ1dHRvbkRhdGFTZXRzID0ge31cbmNvbnN0IHBhZ2luYXRpb25CdXR0b25TdHlsZXMgPSB7fVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RUb2dnbGVPcHRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpY29uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdE9wdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd8bnVtYmVyfSB2YWx1ZVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFt0ZXh0XVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtjb250ZW50XVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtjdXJyZW50Q29udGVudF1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2Rpc2FibGVkXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtodG1sXVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtyaWdodF1cbiAqXG4gKiBBZGRpdGlvbmFsIG9wdGlvbiBwcm9wcyBhcmUgYWxsb3dlZDsgSGF5YVNlbGVjdCBvbmx5IHVzZXMgdGhlIGtleXMgYWJvdmUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0T3B0aW9uc1Jlc3VsdFxuICogQHByb3BlcnR5IHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn0gb3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFt0b3RhbENvdW50XVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwYWdlXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwYWdlU2l6ZV1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RQcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFthdHRyaWJ1dGVdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NsYXNzTmFtZV1cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbZGVmYXVsdFRvZ2dsZWRdXG4gKiBAcHJvcGVydHkge3N0cmluZ3xudW1iZXJ9IFtkZWZhdWx0VmFsdWVdXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZ3xudW1iZXI+fSBbZGVmYXVsdFZhbHVlc11cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59IFtkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNdXG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW2lkXVxuICogQHByb3BlcnR5IHtvYmplY3R9IFttb2RlbF1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbXVsdGlwbGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbmFtZV1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogaW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbbm9PcHRpb25zVGV4dF1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oaW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnQ9KTogdm9pZH0gW29uQmx1cl1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oaW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnQ9KTogdm9pZH0gW29uQ2hhbmdlXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihBcnJheTxzdHJpbmd8bnVtYmVyPj0pOiB2b2lkfSBbb25DaGFuZ2VWYWx1ZV1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oaW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnQ9KTogdm9pZH0gW29uRm9jdXNdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IHZvaWR9IFtvbk9wdGlvbnNDbG9zZWRdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKG9iamVjdCk6IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW29wdGlvbkNvbnRlbnRdXG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fGZ1bmN0aW9uKCk6IChBcnJheTxIYXlhU2VsZWN0T3B0aW9uPnxIYXlhU2VsZWN0T3B0aW9uc1Jlc3VsdCl9IG9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gb3B0aW9uc0Fic29sdXRlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG9wdGlvbnNQb3J0YWxcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbb3B0aW9uc1dpZHRoXVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtwbGFjZWhvbGRlcl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3JdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NlbGVjdGVkSG92ZXJCYWNrZ3JvdW5kQ29sb3JdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHNlYXJjaFxuICogQHByb3BlcnR5IHtvYmplY3R9IFtzdHlsZXNdXG4gKiBAcHJvcGVydHkge29iamVjdH0gW3RvZ2dsZWRdXG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RUb2dnbGVPcHRpb24+fSBbdG9nZ2xlT3B0aW9uc11cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdHJhbnNwYXJlbnRcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nfG51bWJlcj59IFt2YWx1ZXNdXG4gKi9cblxuLyoqIEByZXR1cm5zIHtzdHJpbmd9ICovXG5jb25zdCBuYW1lRm9yQ29tcG9uZW50V2l0aE11bHRpcGxlID0gKGNvbXBvbmVudCkgPT4ge1xuICBsZXQgbmFtZSA9IG5hbWVGb3JDb21wb25lbnQoY29tcG9uZW50KVxuXG4gIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gY29tcG9uZW50LmdldEN1cnJlbnRPcHRpb25zKClcblxuICBpZiAoY29tcG9uZW50LnByb3BzLm11bHRpcGxlICYmIG5hbWUgJiYgY3VycmVudE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgIG5hbWUgKz0gXCJbXVwiXG4gIH1cblxuICByZXR1cm4gbmFtZVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFBhZ2luYXRpb25QYWdlQnV0dG9uUHJvcHNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWN0aXZlXG4gKiBAcHJvcGVydHkge251bWJlcn0gcGFnZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihudW1iZXIpOiB2b2lkfSBvblBhZ2VTZWxlY3RlZFxuICovXG5cbi8qKiBAZXh0ZW5kcyB7U2hhcGVDb21wb25lbnQ8UGFnaW5hdGlvblBhZ2VCdXR0b25Qcm9wcz59ICovXG5jb25zdCBQYWdpbmF0aW9uUGFnZUJ1dHRvbiA9IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgUGFnaW5hdGlvblBhZ2VCdXR0b24gZXh0ZW5kcyBTaGFwZUNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSBwcm9wVHlwZXNFeGFjdCh7XG4gICAgYWN0aXZlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIHBhZ2U6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICBvblBhZ2VTZWxlY3RlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICB9KVxuXG4gIC8qKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudCAqL1xuICBvblByZXNzID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQ/LigpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uPy4oKVxuXG4gICAgdGhpcy5wLm9uUGFnZVNlbGVjdGVkKHRoaXMucC5wYWdlKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHthY3RpdmUsIHBhZ2V9ID0gdGhpcy5wXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFByZXNzYWJsZVxuICAgICAgICBkYXRhU2V0PXtwYWdpbmF0aW9uQnV0dG9uRGF0YVNldHNbYHBhZ2luYXRpb25QYWdlLSR7cGFnZX1gXSB8fD0ge2NsYXNzOiBcInBhZ2luYXRpb24tcGFnZVwiLCBwYWdlfX1cbiAgICAgICAgZGlzYWJsZWQ9e2FjdGl2ZX1cbiAgICAgICAgb25QcmVzcz17dGhpcy50dC5vblByZXNzfVxuICAgICAgICBzdHlsZT17cGFnaW5hdGlvbkJ1dHRvblN0eWxlc1tgcGFnaW5hdGlvblBhZ2VCdXR0b24tJHthY3RpdmV9YF0gfHw9IHtcbiAgICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogYWN0aXZlID8gXCIjMGYxNzJhXCIgOiBcIiNlMmU4ZjBcIixcbiAgICAgICAgICBib3JkZXJSYWRpdXM6IDk5OSxcbiAgICAgICAgICBoZWlnaHQ6IDI4LFxuICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgIG1hcmdpbkhvcml6b250YWw6IDQsXG4gICAgICAgICAgd2lkdGg6IDI4XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxUZXh0XG4gICAgICAgICAgc3R5bGU9e3BhZ2luYXRpb25CdXR0b25TdHlsZXNbYHBhZ2luYXRpb25QYWdlVGV4dC0ke2FjdGl2ZX1gXSB8fD0ge1xuICAgICAgICAgICAgY29sb3I6IGFjdGl2ZSA/IFwiI2Y4ZmFmY1wiIDogXCIjMzM0MTU1XCIsXG4gICAgICAgICAgICBmb250U2l6ZTogMTIsXG4gICAgICAgICAgICBmb250V2VpZ2h0OiA2MDBcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge3BhZ2V9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvUHJlc3NhYmxlPlxuICAgIClcbiAgfVxufSkpXG5cbi8qKiBAZXh0ZW5kcyB7U2hhcGVDb21wb25lbnQ8SGF5YVNlbGVjdFByb3BzPn0gKi9cbmV4cG9ydCBkZWZhdWx0IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgSGF5YVNlbGVjdCBleHRlbmRzIFNoYXBlQ29tcG9uZW50IHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgbm9PcHRpb25zVGV4dDogbnVsbCxcbiAgICBvbkJsdXI6IG51bGwsXG4gICAgb25Gb2N1czogbnVsbCxcbiAgICBvcHRpb25zQWJzb2x1dGU6IHRydWUsXG4gICAgb3B0aW9uc1BvcnRhbDogdHJ1ZSxcbiAgICBvcHRpb25zV2lkdGg6IG51bGwsXG4gICAgc2VhcmNoOiBmYWxzZSxcbiAgICB0cmFuc3BhcmVudDogZmFsc2VcbiAgfVxuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSBwcm9wVHlwZXNFeGFjdCh7XG4gICAgYXR0cmlidXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkZWZhdWx0VG9nZ2xlZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgICBkZWZhdWx0VmFsdWVzOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgaWQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIG1vZGVsOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbm9PcHRpb25zVGV4dDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25DaGFuZ2VWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25PcHRpb25zQ2xvc2VkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvcHRpb25Db250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgICAgIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIGNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBjdXJyZW50Q29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgaHRtbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgcmlnaHQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgICB0ZXh0OiBQcm9wVHlwZXMubm9kZSxcbiAgICAgICAgdmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKS5pc1JlcXVpcmVkXG4gICAgICB9KSksXG4gICAgICBQcm9wVHlwZXMuZnVuY1xuICAgIF0pLmlzUmVxdWlyZWQsXG4gICAgb3B0aW9uc0Fic29sdXRlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIG9wdGlvbnNQb3J0YWw6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgb3B0aW9uc1dpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMubm9kZSxcbiAgICBzZWxlY3RlZEJhY2tncm91bmRDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWxlY3RlZEhvdmVyQmFja2dyb3VuZENvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlYXJjaDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBzdHlsZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgdG9nZ2xlZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB0b2dnbGVPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaWNvbjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbiAgICB9KSksXG4gICAgdHJhbnNwYXJlbnQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgdmFsdWVzOiBQcm9wVHlwZXMuYXJyYXlcbiAgfSlcblxuICBjYWxsT3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4gPSBmYWxzZVxuICBzZWFyY2hUZXh0VmFsdWUgPSBcIlwiXG4gIHQgPSBDb25maWcuY3VycmVudCgpLmdldFVzZVRyYW5zbGF0ZSgpKCkudFxuICB3aW5kb3dXaWR0aCA9IERpbWVuc2lvbnMuZ2V0KFwid2luZG93XCIpLndpZHRoXG4gIHdpbmRvd0hlaWdodCA9IERpbWVuc2lvbnMuZ2V0KFwid2luZG93XCIpLmhlaWdodFxuXG4gIHNldHVwKCkge1xuICAgIGNvbnN0IHt0fSA9IENvbmZpZy5jdXJyZW50KCkuZ2V0VXNlVHJhbnNsYXRlKCkoKVxuXG4gICAgdGhpcy50ID0gdFxuXG4gICAgaWYgKHRoaXMucHJvcHMudmFsdWVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMucHJvcHMudmFsdWVzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkhheWFTZWxlY3Q6IFVuZGVmaW5lZCBnaXZlbiBhcyB2YWx1ZVwiKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXRJbnN0YW5jZSh7XG4gICAgICBlbmRPZlNlbGVjdFJlZjogdXNlUmVmKCksXG4gICAgICBvcHRpb25zQ29udGFpbmVyUmVmOiB1c2VSZWYoKSxcbiAgICAgIHBhZ2VJbnB1dFJlZjogdXNlUmVmKCksXG4gICAgICBzZWFyY2hUZXh0SW5wdXRSZWY6IHVzZVJlZigpLFxuICAgICAgc2VsZWN0Q29udGFpbmVyUmVmOiB1c2VSZWYoKVxuICAgIH0pXG4gICAgdGhpcy51c2VTdGF0ZXMoe1xuICAgICAgY3VycmVudE9wdGlvbnM6ICgpID0+IHRoaXMuZGVmYXVsdEN1cnJlbnRPcHRpb25zKCksXG4gICAgICBzZWxlY3RDb250YWluZXJMYXlvdXQ6IG51bGwsXG4gICAgICBlbmRPZlNlbGVjdExheW91dDogbnVsbCxcbiAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgIGxvYWRlZE9wdGlvbnM6ICgpID0+IHRoaXMuZGVmYXVsdExvYWRlZE9wdGlvbnMoKSxcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBwYWdlSW5wdXRBY3RpdmU6IGZhbHNlLFxuICAgICAgcGFnZUlucHV0VmFsdWU6IFwiXCIsXG4gICAgICBwYWdlU2l6ZTogbnVsbCxcbiAgICAgIG9wZW5lZDogZmFsc2UsXG4gICAgICBvcHRpb25zQ29udGFpbmVyTGF5b3V0OiBudWxsLFxuICAgICAgb3B0aW9uc1BsYWNlbWVudDogdW5kZWZpbmVkLFxuICAgICAgb3B0aW9uc1RvcDogdW5kZWZpbmVkLFxuICAgICAgb3B0aW9uc1Zpc2liaWxpdHk6IHVuZGVmaW5lZCxcbiAgICAgIG9wdGlvbnNXaWR0aDogdW5kZWZpbmVkLFxuICAgICAgc2Nyb2xsTGVmdDogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IDogbnVsbCxcbiAgICAgIHNjcm9sbFRvcDogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgOiBudWxsLFxuICAgICAgdG90YWxDb3VudDogbnVsbCxcbiAgICAgIHRvZ2dsZWQ6ICgpID0+IHRoaXMuZGVmYXVsdFRvZ2dsZWQoKVxuICAgIH0pXG5cbiAgICBjb25zdCB3aW5kb3dUYXJnZXQgPSBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiICYmIHR5cGVvZiB3aW5kb3cgIT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IG51bGxcblxuICAgIHVzZUV2ZW50TGlzdGVuZXIoRGltZW5zaW9ucywgXCJjaGFuZ2VcIiwgdGhpcy50dC5vbkRpbWVuc2lvbnNDaGFuZ2UpXG4gICAgdXNlUHJlc3NPdXRzaWRlKHRoaXMudHQub3B0aW9uc0NvbnRhaW5lclJlZiwgdGhpcy50dC5vblByZXNzT3V0c2lkZU9wdGlvbnMpXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3dUYXJnZXQsIFwicmVzaXplXCIsIHRoaXMudHQub25Bbnl0aGluZ1Jlc2l6ZWREZWJvdW5jZWQpXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3dUYXJnZXQsIFwic2Nyb2xsXCIsIHRoaXMudHQub25Bbnl0aGluZ1Njcm9sbGVkRGVib3VuY2VkKVxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnR0LmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiAmJiB0aGlzLnMub3B0aW9uc0NvbnRhaW5lckxheW91dCkge1xuICAgICAgICB0aGlzLmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiA9IGZhbHNlXG4gICAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4oKVxuICAgICAgfVxuICAgIH0sIFt0aGlzLnR0LmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiwgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXRdKVxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRPcHRpb25JZHMgPSB0aGlzLnMuY3VycmVudE9wdGlvbnM/Lm1hcCgoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSlcblxuICAgICAgaWYgKHRoaXMucHJvcHMudmFsdWVzICYmIGFueXRoaW5nRGlmZmVyZW50KGN1cnJlbnRPcHRpb25JZHMsIHRoaXMucHJvcHMudmFsdWVzKSAmJiB0eXBlb2YgdGhpcy5wcm9wcy5vcHRpb25zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLnNldEN1cnJlbnRGcm9tR2l2ZW5WYWx1ZXMoKVxuICAgICAgfVxuICAgIH0sIFt0aGlzLnByb3BzLnZhbHVlc10pXG4gIH1cblxuICB0cmFuc2xhdGUobXNnSUQpIHtcbiAgICBpZiAobXNnSUQuc3RhcnRzV2l0aChcIi5cIikpIHtcbiAgICAgIHJldHVybiB0aGlzLnQoYGhheWFfc2VsZWN0JHttc2dJRH1gKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy50KG1zZ0lEKVxuICAgIH1cbiAgfVxuXG4gIGRlZmF1bHRDdXJyZW50T3B0aW9ucygpIHtcbiAgICBjb25zdCB7ZGVmYXVsdFZhbHVlLCBkZWZhdWx0VmFsdWVzLCB2YWx1ZXN9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHtvcHRpb25zfSA9IHRoaXMucFxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpKSByZXR1cm4gW11cblxuICAgIHJldHVybiBvcHRpb25zLmZpbHRlcigoe3ZhbHVlfSkgPT5cbiAgICAgIChkZWZhdWx0VmFsdWUgJiYgdmFsdWUgPT0gZGVmYXVsdFZhbHVlKSB8fFxuICAgICAgICAoZGVmYXVsdFZhbHVlcyAmJiBkZWZhdWx0VmFsdWVzLmluY2x1ZGVzKHZhbHVlKSkgfHxcbiAgICAgICAgKHZhbHVlcyAmJiB2YWx1ZXMuaW5jbHVkZXModmFsdWUpKVxuICAgIClcbiAgfVxuXG4gIGRlZmF1bHRMb2FkZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IHtvcHRpb25zfSA9IHRoaXMucFxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSBvZiBvcHRpb25zOiAke3R5cGVvZiBvcHRpb25zfWApXG4gIH1cblxuICAvKiogQHJldHVybnMge251bWJlcn0gKi9cbiAgZ2V0QWN0aXZlUGFnZSA9ICgpID0+IHRoaXMucy5wYWdlIHx8IDFcblxuICAvKipcbiAgICogQHBhcmFtIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPnxIYXlhU2VsZWN0T3B0aW9uc1Jlc3VsdH0gcmVzdWx0XG4gICAqIEByZXR1cm5zIHtIYXlhU2VsZWN0T3B0aW9uc1Jlc3VsdH1cbiAgICovXG4gIHBhcnNlT3B0aW9uc1Jlc3VsdChyZXN1bHQpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSByZXR1cm4ge29wdGlvbnM6IHJlc3VsdH1cblxuICAgIGlmIChyZXN1bHQgJiYgQXJyYXkuaXNBcnJheShyZXN1bHQub3B0aW9ucykpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGlvbnM6IHJlc3VsdC5vcHRpb25zLFxuICAgICAgICB0b3RhbENvdW50OiByZXN1bHQudG90YWxDb3VudCxcbiAgICAgICAgcGFnZTogcmVzdWx0LnBhZ2UsXG4gICAgICAgIHBhZ2VTaXplOiByZXN1bHQucGFnZVNpemVcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gb3B0aW9ucyByZXN1bHQ6ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbXNcbiAgICogQHBhcmFtIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn0gcGFyYW1zLm9wdGlvbnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXJhbXMucGFnZV1cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXJhbXMucGFnZVNpemVdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcGFyYW1zLnRvdGFsQ291bnRdXG4gICAqIEByZXR1cm5zIHtudW1iZXJ8bnVsbH1cbiAgICovXG4gIHJlc29sdmVQYWdlU2l6ZSh7b3B0aW9ucywgcGFnZSwgcGFnZVNpemUsIHRvdGFsQ291bnR9KSB7XG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZShwYWdlU2l6ZSkgJiYgcGFnZVNpemUgPiAwKSByZXR1cm4gcGFnZVNpemVcblxuICAgIGlmIChOdW1iZXIuaXNGaW5pdGUodGhpcy5zLnBhZ2VTaXplKSAmJiB0aGlzLnMucGFnZVNpemUgPiAwICYmIHBhZ2UgIT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMucy5wYWdlU2l6ZVxuICAgIH1cblxuICAgIGlmIChOdW1iZXIuaXNGaW5pdGUodG90YWxDb3VudCkgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zKSAmJiBvcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmxlbmd0aFxuICAgIH1cblxuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodGhpcy5zLnBhZ2VTaXplKSAmJiB0aGlzLnMucGFnZVNpemUgPiAwID8gdGhpcy5zLnBhZ2VTaXplIDogbnVsbFxuICB9XG5cbiAgZGVmYXVsdFRvZ2dsZWQgPSAoKSA9PiAoXCJ0b2dnbGVkXCIgaW4gdGhpcy5wcm9wcykgPyB0aGlzLnAudG9nZ2xlZCA6IHRoaXMucHJvcHMuZGVmYXVsdFRvZ2dsZWQgfHwge31cbiAgZ2V0VG9nZ2xlZCA9ICgpID0+IChcInRvZ2dsZWRcIiBpbiB0aGlzLnByb3BzKSA/IHRoaXMucC50b2dnbGVkIDogdGhpcy5zLnRvZ2dsZWRcbiAgZ2V0VmFsdWVzID0gKCkgPT4gKFwidmFsdWVzXCIgaW4gdGhpcy5wcm9wcykgPyB0aGlzLnAudmFsdWVzIDogdGhpcy5zLmN1cnJlbnRPcHRpb25zLm1hcCgoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSlcbiAgZ2V0Q3VycmVudE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgaWYgKFwidmFsdWVzXCIgaW4gdGhpcy5wcm9wcyAmJiB0eXBlb2YgdGhpcy5wcm9wcy52YWx1ZXMgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy5vcHRpb25zKSAmJiB0aGlzLnByb3BzLnZhbHVlcykge1xuICAgICAgICByZXR1cm4gdGhpcy5wLnZhbHVlcy5tYXAoKHZhbHVlKSA9PiB0aGlzLnAub3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PSB2YWx1ZSkpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMucy5sb2FkZWRPcHRpb25zICYmIHRoaXMucHJvcHMudmFsdWVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnAudmFsdWVzLm1hcCgodmFsdWUpID0+IHtcbiAgICAgICAgICBsZXQgZm91bmRPcHRpb24gPSB0aGlzLnMubG9hZGVkT3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PSB2YWx1ZSlcblxuICAgICAgICAgIGlmICghZm91bmRPcHRpb24pIHtcbiAgICAgICAgICAgIGZvdW5kT3B0aW9uID0gdGhpcy5zLmN1cnJlbnRPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09IHZhbHVlKVxuXG4gICAgICAgICAgICBpZiAoIWZvdW5kT3B0aW9uKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgYENvdWxkbid0IGZpbmQgb3B0aW9uOiAke3ZhbHVlfSBpbiBsb2FkZWRPcHRpb25zIG9yIHN0YXRlIGN1cnJlbnRPcHRpb25zYCxcbiAgICAgICAgICAgICAgICB7c3RhdGVMb2FkZWRPcHRpb25zOiB0aGlzLnMubG9hZGVkT3B0aW9ucywgc3RhdGVDdXJyZW50T3B0aW9uczogdGhpcy5zLmN1cnJlbnRPcHRpb25zLCBwcm9wc09wdGlvbnM6IHRoaXMucHJvcHMub3B0aW9uc31cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmb3VuZE9wdGlvblxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vcHRpb25zID09IFwiZnVuY3Rpb25cIiAmJiB0aGlzLnByb3BzLnZhbHVlcykge1xuICAgICAgICAvLyBPcHRpb25zIGhhdmVuJ3QgYmVlbiBsb2FkZWQgeWV0LlxuICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnZhbHVlcykge1xuICAgICAgICByZXR1cm4gdGhpcy5wLnZhbHVlcy5tYXAoKHZhbHVlKSA9PiAoe3ZhbHVlfSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucy5jdXJyZW50T3B0aW9uc1xuICB9XG5cbiAgZ2V0Q3VycmVudE9wdGlvblZhbHVlcygpIHtcbiAgICBpZiAoXCJ2YWx1ZXNcIiBpbiB0aGlzLnByb3BzKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnAudmFsdWVzKSA/IHRoaXMucC52YWx1ZXMgOiBbXVxuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gdGhpcy5nZXRDdXJyZW50T3B0aW9ucygpXG5cbiAgICBpZiAoIWN1cnJlbnRPcHRpb25zKSByZXR1cm4gW11cblxuICAgIHJldHVybiBjdXJyZW50T3B0aW9uc1xuICAgICAgLm1hcCgob3B0aW9uKSA9PiBvcHRpb24/LnZhbHVlKVxuICAgICAgLmZpbHRlcigodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSAhPSBcInVuZGVmaW5lZFwiKVxuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3Qge2F0dHJpYnV0ZSwgZGVmYXVsdFZhbHVlLCBkZWZhdWx0VmFsdWVzLCBkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnMsIG1vZGVsLCBvcHRpb25zfSA9IHRoaXMucHJvcHNcblxuICAgIGlmICgoKGRlZmF1bHRWYWx1ZSB8fCBkZWZhdWx0VmFsdWVzIHx8IGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9ucykgfHwgKGF0dHJpYnV0ZSAmJiBtb2RlbCkpICYmIHR5cGVvZiBvcHRpb25zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5sb2FkRGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zQ2FsbGJhY2soKVxuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHt9XG5cbiAgICBpZiAoXCJ0b2dnbGVkXCIgaW4gdGhpcy5wcm9wcykge1xuICAgICAgY29uc3QgbmV3VG9nZ2xlZCA9IHRoaXMucC50b2dnbGVkXG5cbiAgICAgIGlmIChhbnl0aGluZ0RpZmZlcmVudCh0aGlzLnN0YXRlLnRvZ2dsZWQsIG5ld1RvZ2dsZWQpKSB7XG4gICAgICAgIG5ld1N0YXRlLnRvZ2dsZWQgPSBuZXdUb2dnbGVkXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKG5ld1N0YXRlKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKVxuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7ZW5kT2ZTZWxlY3RSZWZ9ID0gdGhpcy50dFxuICAgIGNvbnN0IHt0cmFuc3BhcmVudH0gPSB0aGlzLnBcbiAgICBjb25zdCB7Y2xhc3NOYW1lLCBwbGFjZWhvbGRlciwgdG9nZ2xlT3B0aW9uc30gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge29wZW5lZCwgb3B0aW9uc1BsYWNlbWVudH0gPSB0aGlzLnNcbiAgICBjb25zdCBjdXJyZW50T3B0aW9ucyA9IHRoaXMuZ2V0Q3VycmVudE9wdGlvbnMoKVxuICAgIGNvbnN0IGlkID0gaWRGb3JDb21wb25lbnQodGhpcylcblxuICAgIGNvbnN0IHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsID0gey4uLnRoaXMuc3R5bGluZ0ZvcihcInNlbGVjdENvbnRhaW5lclwiLCB7XG4gICAgICBmbGV4RGlyZWN0aW9uOiBcInJvd1wiLFxuICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdHJhbnNwYXJlbnQgPyB1bmRlZmluZWQgOiBcIiNmZmZcIixcbiAgICAgIGJvcmRlcjogdHJhbnNwYXJlbnQgPyB1bmRlZmluZWQgOiBcIjFweCBzb2xpZCAjOTk5XCIsXG4gICAgICBib3JkZXJSYWRpdXM6IHRyYW5zcGFyZW50ID8gdW5kZWZpbmVkIDogNCxcbiAgICAgIGNvbG9yOiBcIiMwMDBcIixcbiAgICAgIGN1cnNvcjogXCJwb2ludGVyXCIsXG4gICAgICBwYWRkaW5nVG9wOiA1LFxuICAgICAgcGFkZGluZ0JvdHRvbTogNSxcbiAgICAgIHBhZGRpbmdMZWZ0OiA1XG4gICAgfSwgW3RyYW5zcGFyZW50XSl9XG5cbiAgICBpZiAob3BlbmVkKSB7XG4gICAgICAvLyBQcmV2ZW50IHNlbGVjdCBmcm9tIGNoYW5naW5nIHNpemUgb25jZSB0aGUgY29udGVudCBpcyByZXBsYWNlZCB3aXRoIHNlYXJjaCB0ZXh0IG9uY2Ugb3BlbmVkXG4gICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5oZWlnaHQgPSB0aGlzLnMuaGVpZ2h0XG5cbiAgICAgIGNvbnN0IGJhc2VCb3JkZXJSYWRpdXMgPSBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJSYWRpdXNcblxuICAgICAgaWYgKG9wdGlvbnNQbGFjZW1lbnQgPT0gXCJhYm92ZVwiKSB7XG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclRvcExlZnRSYWRpdXMgPSAwXG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gMFxuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IGJhc2VCb3JkZXJSYWRpdXNcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IGJhc2VCb3JkZXJSYWRpdXNcblxuICAgICAgICBkZWxldGUgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyUmFkaXVzXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnNQbGFjZW1lbnQgPT0gXCJiZWxvd1wiKSB7XG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclRvcExlZnRSYWRpdXMgPSBiYXNlQm9yZGVyUmFkaXVzXG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gYmFzZUJvcmRlclJhZGl1c1xuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IDBcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IDBcblxuICAgICAgICBkZWxldGUgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyUmFkaXVzXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIGRhdGFTZXQ9e3RoaXMuY2FjaGUoXCJyb290Vmlld0RhdGFTZXRcIiwge1xuICAgICAgICAgIGNsYXNzOiBjbGFzc05hbWUsXG4gICAgICAgICAgY29tcG9uZW50OiBcImhheWEtc2VsZWN0XCIsXG4gICAgICAgICAgaWQsXG4gICAgICAgICAgb3BlbmVkLFxuICAgICAgICAgIG9wdGlvbnNQbGFjZW1lbnQsXG4gICAgICAgICAgdG9nZ2xlczogQm9vbGVhbih0b2dnbGVPcHRpb25zKVxuICAgICAgICB9LCBbY2xhc3NOYW1lLCBpZCwgb3BlbmVkLCBvcHRpb25zUGxhY2VtZW50LCBCb29sZWFuKHRvZ2dsZU9wdGlvbnMpXSl9XG4gICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJtYWluXCIpfVxuICAgICAgPlxuICAgICAgICA8UHJlc3NhYmxlXG4gICAgICAgICAgZGF0YVNldD17dGhpcy5zZWxlY3RDb250YWluZXJEYXRhU2V0IHx8PSB7Y2xhc3M6IFwic2VsZWN0LWNvbnRhaW5lclwifX1cbiAgICAgICAgICBvbkxheW91dD17dGhpcy50dC5vblNlbGVjdENvbnRhaW5lckxheW91dH1cbiAgICAgICAgICBvblByZXNzPXt0aGlzLnR0Lm9uU2VsZWN0Q2xpY2tlZH1cbiAgICAgICAgICByZWY9e3RoaXMudHQuc2VsZWN0Q29udGFpbmVyUmVmfVxuICAgICAgICAgIHN0eWxlPXtzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbH1cbiAgICAgICAgPlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBkYXRhU2V0PXt0aGlzLmN1cnJlbnRTZWxlY3RlZERhdGFTZXQgfHw9IHtjbGFzczogXCJjdXJyZW50LXNlbGVjdGVkXCJ9fVxuICAgICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcImN1cnJlbnRTZWxlY3RlZFwiLCB0aGlzLmN1cnJlbnRTZWxlY3RlZFN0eWxlIHx8PSB7d2lkdGg6IFwiY2FsYygxMDAlIC0gMjVweClcIiwgZmxleFdyYXA6IFwid3JhcFwiLCBvdmVyZmxvdzogXCJoaWRkZW5cIn0pfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtvcGVuZWQgJiZcbiAgICAgICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgICAgIGRhdGFTZXQ9e3RoaXMuc2VhcmNoVGV4dElucHV0RGF0YVNldCB8fD0ge2NsYXNzOiBcInNlYXJjaC10ZXh0LWlucHV0XCJ9fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlVGV4dD17dGhpcy50dC5vbkNoYW5nZVNlYXJjaFRleHR9XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMudHJhbnNsYXRlKFwiLnNlYXJjaF9kb3RfZG90X2RvdFwiKX1cbiAgICAgICAgICAgICAgICByZWY9e3RoaXMudHQuc2VhcmNoVGV4dElucHV0UmVmfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJzZWFyY2hUZXh0SW5wdXRcIiwgdGhpcy5zZWFyY2hUZXh0SW5wdXRTdHlsZSB8fD0ge1xuICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwLFxuICAgICAgICAgICAgICAgICAgb3V0bGluZTogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXt0aGlzLnNlYXJjaFRleHRWYWx1ZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHshb3BlbmVkICYmXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2N1cnJlbnRPcHRpb25zLmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgICAgICA8VGV4dCBudW1iZXJPZkxpbmVzPXsxfSBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwibm90aGluZ1NlbGVjdGVkXCIsIHRoaXMubm90aGluZ1NlbGVjdGVkU3R5bGUgfHw9IHtjb2xvcjogXCJncmV5XCJ9KX0+XG4gICAgICAgICAgICAgICAgICAgIHtwbGFjZWhvbGRlciB8fCB0aGlzLnRyYW5zbGF0ZShcIi5ub3RoaW5nX3NlbGVjdGVkXCIpfVxuICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7Y3VycmVudE9wdGlvbnMubGVuZ3RoID09IDAgJiYgUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiAmJlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGlkPXtpZEZvckNvbXBvbmVudCh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgbmFtZT17bmFtZUZvckNvbXBvbmVudFdpdGhNdWx0aXBsZSh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9ucy5tYXAoKGN1cnJlbnRPcHRpb24pID0+XG4gICAgICAgICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICAgICAgICBkYXRhU2V0PXt0aGlzLmN1cnJlbnRPcHRpb25EYXRhU2V0IHx8PSB7Y2xhc3M6IFwiY3VycmVudC1vcHRpb25cIn19XG4gICAgICAgICAgICAgICAgICAgIGtleT17Y3VycmVudE9wdGlvbi5rZXkgfHwgYGN1cnJlbnQtdmFsdWUtJHtjdXJyZW50T3B0aW9uLnZhbHVlfWB9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJjdXJyZW50T3B0aW9uXCIsIHttYXJnaW5SaWdodDogNn0pfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7Y3VycmVudE9wdGlvbi50eXBlID09IFwiZ3JvdXBcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJjdXJyZW50T3B0aW9uR3JvdXBcIiwgdGhpcy5jdXJyZW50T3B0aW9uR3JvdXBTdHlsZSB8fD0ge2ZvbnRXZWlnaHQ6IFwiYm9sZFwifSl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcImN1cnJlbnRPcHRpb25Hcm91cFRleHRcIil9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3VycmVudE9wdGlvbi50ZXh0fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB7Y3VycmVudE9wdGlvbi50eXBlICE9IFwiZ3JvdXBcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7UGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiAmJiBuYW1lRm9yQ29tcG9uZW50V2l0aE11bHRpcGxlKHRoaXMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtpZEZvckNvbXBvbmVudCh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtuYW1lRm9yQ29tcG9uZW50V2l0aE11bHRpcGxlKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtkaWdnKGN1cnJlbnRPcHRpb24sIFwidmFsdWVcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcmVzZW50T3B0aW9uKGN1cnJlbnRPcHRpb24sIFwiY3VycmVudFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgZGF0YVNldD17dGhpcy5jaGV2cm9uQ29udGFpbmVyRGF0YVNldCB8fD0ge2NsYXNzOiBcImNoZXZyb24tY29udGFpbmVyXCJ9fVxuICAgICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcImNoZXZyb25Db250YWluZXJcIiwgdGhpcy5jaGV2cm9uQ29udGFpbmVyU3R5bGUgfHw9IHtcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICAgICAgICAgIG1hcmdpbkxlZnQ6IFwiYXV0b1wiLFxuICAgICAgICAgICAgICBtYXJnaW5SaWdodDogOFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEZvbnRBd2Vzb21lSWNvbiBuYW1lPXtvcGVuZWQgPyBcImNoZXZyb24tdXBcIiA6IFwiY2hldnJvbi1kb3duXCJ9IHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJjaGV2cm9uXCIsIHRoaXMuY2hldnJvblN0eWxlIHx8PSB7Zm9udFNpemU6IDEyfSl9IC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBkYXRhU2V0PXt0aGlzLmVuZE9mU2VsZWN0RGF0YVNldCB8fD0ge2NsYXNzOiBcImVuZC1vZi1zZWxlY3RcIn19XG4gICAgICAgICAgb25MYXlvdXQ9e3RoaXMudHQub25FbmRPZlNlbGVjdExheW91dH1cbiAgICAgICAgICByZWY9e2VuZE9mU2VsZWN0UmVmfVxuICAgICAgICAvPlxuICAgICAgICB7b3BlbmVkICYmIHRoaXMucC5vcHRpb25zUG9ydGFsICYmXG4gICAgICAgICAgPFBvcnRhbD5cbiAgICAgICAgICAgIHt0aGlzLm9wdGlvbnNDb250YWluZXIoKX1cbiAgICAgICAgICA8L1BvcnRhbD5cbiAgICAgICAgfVxuICAgICAgICB7b3BlbmVkICYmICF0aGlzLnAub3B0aW9uc1BvcnRhbCAmJlxuICAgICAgICAgIDxWaWV3PlxuICAgICAgICAgICAge3RoaXMub3B0aW9uc0NvbnRhaW5lcigpfVxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgfVxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIGRlZmF1bHRWYWx1ZXMgKCkge1xuICAgIGNvbnN0IHthdHRyaWJ1dGUsIGRlZmF1bHRWYWx1ZSwgZGVmYXVsdFZhbHVlcywgZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zLCBtb2RlbH0gPSB0aGlzLnByb3BzXG5cbiAgICBpZiAoZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zKSByZXR1cm4gZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zXG4gICAgaWYgKGRlZmF1bHRWYWx1ZSkgcmV0dXJuIGRlZmF1bHRWYWx1ZVxuICAgIGlmIChkZWZhdWx0VmFsdWVzKSByZXR1cm4gZGVmYXVsdFZhbHVlc1xuXG4gICAgaWYgKGF0dHJpYnV0ZSAmJiBtb2RlbCkge1xuICAgICAgaWYgKCEoYXR0cmlidXRlIGluIG1vZGVsKSkgdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIGF0dHJpYnV0ZSBvbiAke21vZGVsLm1vZGVsQ2xhc3NEYXRhKCkubmFtZX06ICR7YXR0cmlidXRlfWApXG5cbiAgICAgIHJldHVybiBtb2RlbFthdHRyaWJ1dGVdKClcbiAgICB9XG4gIH1cblxuICBpc0FjdGl2ZSgpIHtcbiAgICBpZiAodGhpcy50dC5lbmRPZlNlbGVjdFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgYXN5bmMgbG9hZERlZmF1bHRWYWx1ZXNGcm9tT3B0aW9uc0NhbGxiYWNrKCkge1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZXMgPSB0aGlzLmRlZmF1bHRWYWx1ZXMoKVxuXG4gICAgaWYgKCFkZWZhdWx0VmFsdWVzKSByZXR1cm5cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucHJvcHMub3B0aW9ucyh7XG4gICAgICBzZWFyY2hWYWx1ZTogdGhpcy5nZXRTZWFyY2hUZXh0KCksXG4gICAgICBwYWdlOiB0aGlzLmdldEFjdGl2ZVBhZ2UoKSxcbiAgICAgIHZhbHVlczogZGVmYXVsdFZhbHVlc1xuICAgIH0pXG5cbiAgICBjb25zdCB7b3B0aW9uc30gPSB0aGlzLnBhcnNlT3B0aW9uc1Jlc3VsdChyZXN1bHQpXG5cbiAgICB0aGlzLnNldFN0YXRlKHtjdXJyZW50T3B0aW9uczogdGhpcy5zdGF0ZS5jdXJyZW50T3B0aW9ucy5jb25jYXQob3B0aW9ucyl9KVxuICB9XG5cbiAgbG9hZE9wdGlvbnMgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qge29wdGlvbnN9ID0gdGhpcy5wXG4gICAgY29uc3Qgc2VhcmNoVmFsdWUgPSB0aGlzLmdldFNlYXJjaFRleHQoKVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRPcHRpb25zRnJvbUFycmF5KG9wdGlvbnMsIHNlYXJjaFZhbHVlKVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wdGlvbnMoe3NlYXJjaFZhbHVlLCBwYWdlOiB0aGlzLmdldEFjdGl2ZVBhZ2UoKX0pXG4gICAgY29uc3Qge29wdGlvbnM6IGxvYWRlZE9wdGlvbnMsIHBhZ2UsIHBhZ2VTaXplLCB0b3RhbENvdW50fSA9IHRoaXMucGFyc2VPcHRpb25zUmVzdWx0KHJlc3VsdClcbiAgICBjb25zdCByZXNvbHZlZFBhZ2UgPSBOdW1iZXIuaXNGaW5pdGUocGFnZSkgPyBwYWdlIDogdGhpcy5nZXRBY3RpdmVQYWdlKClcbiAgICBjb25zdCByZXNvbHZlZFBhZ2VTaXplID0gdGhpcy5yZXNvbHZlUGFnZVNpemUoe29wdGlvbnM6IGxvYWRlZE9wdGlvbnMsIHBhZ2U6IHJlc29sdmVkUGFnZSwgcGFnZVNpemUsIHRvdGFsQ291bnR9KVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBsb2FkZWRPcHRpb25zLFxuICAgICAgcGFnZTogcmVzb2x2ZWRQYWdlLFxuICAgICAgcGFnZUlucHV0QWN0aXZlOiBmYWxzZSxcbiAgICAgIHBhZ2VJbnB1dFZhbHVlOiBcIlwiLFxuICAgICAgcGFnZVNpemU6IE51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSA/IHJlc29sdmVkUGFnZVNpemUgOiBudWxsLFxuICAgICAgdG90YWxDb3VudDogTnVtYmVyLmlzRmluaXRlKHRvdGFsQ291bnQpID8gdG90YWxDb3VudCA6IG51bGxcbiAgICB9KVxuICB9XG5cbiAgaGF5YVNlbGVjdE9wdGlvbih7a2V5LCBsb2FkZWRPcHRpb259KSB7XG4gICAgaWYgKGxvYWRlZE9wdGlvbi50eXBlID09IFwiZ3JvdXBcIikge1xuICAgICAgcmV0dXJuIDxPcHRpb25Hcm91cCBrZXk9e2tleX0gb3B0aW9uPXtsb2FkZWRPcHRpb259IC8+XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxPcHRpb25cbiAgICAgICAgY3VycmVudE9wdGlvblZhbHVlcz17dGhpcy5nZXRDdXJyZW50T3B0aW9uVmFsdWVzKCl9XG4gICAgICAgIGljb249e3RoaXMuaWNvbkZvck9wdGlvbihsb2FkZWRPcHRpb24pfVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgb3B0aW9uPXtsb2FkZWRPcHRpb259XG4gICAgICAgIG9uT3B0aW9uQ2xpY2tlZD17dGhpcy50dC5vbk9wdGlvbkNsaWNrZWR9XG4gICAgICAgIHByZXNlbnRPcHRpb249e3RoaXMudHQucHJlc2VudE9wdGlvbn1cbiAgICAgICAgc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3I9e3RoaXMucHJvcHMuc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3J9XG4gICAgICAgIHNlbGVjdGVkSG92ZXJCYWNrZ3JvdW5kQ29sb3I9e3RoaXMucHJvcHMuc2VsZWN0ZWRIb3ZlckJhY2tncm91bmRDb2xvcn1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgbG9hZE9wdGlvbnNGcm9tQXJyYXkob3B0aW9ucywgc2VhcmNoVmFsdWUpIHtcbiAgICBjb25zdCBsb3dlclNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWU/LnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBsb2FkZWRPcHRpb25zID0gb3B0aW9ucy5maWx0ZXIoKHt0ZXh0fSkgPT4gIWxvd2VyU2VhcmNoVmFsdWUgfHwgdGV4dD8udG9Mb3dlckNhc2UoKT8uaW5jbHVkZXMobG93ZXJTZWFyY2hWYWx1ZSkpXG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGxvYWRlZE9wdGlvbnMsXG4gICAgICBwYWdlOiAxLFxuICAgICAgcGFnZUlucHV0QWN0aXZlOiBmYWxzZSxcbiAgICAgIHBhZ2VJbnB1dFZhbHVlOiBcIlwiLFxuICAgICAgcGFnZVNpemU6IG51bGwsXG4gICAgICB0b3RhbENvdW50OiBudWxsXG4gICAgfSlcbiAgfVxuXG4gIG9uRGltZW5zaW9uc0NoYW5nZSA9ICh7d2luZG93fSkgPT4ge1xuICAgIHRoaXMud2luZG93V2lkdGggPSB3aW5kb3cud2lkdGhcbiAgICB0aGlzLndpbmRvd0hlaWdodCA9IHdpbmRvdy5oZWlnaHRcbiAgfVxuXG4gIG9uU2VsZWN0Q29udGFpbmVyTGF5b3V0ID0gKGUpID0+IHRoaXMuc2V0U3RhdGUoe3NlbGVjdENvbnRhaW5lckxheW91dDogT2JqZWN0LmFzc2lnbih7fSwgZGlnZyhlLCBcIm5hdGl2ZUV2ZW50XCIsIFwibGF5b3V0XCIpKX0pXG4gIG9uRW5kT2ZTZWxlY3RMYXlvdXQgPSAoZSkgPT4ge1xuICAgIGNvbnN0IGVuZE9mU2VsZWN0TGF5b3V0ID0gT2JqZWN0LmFzc2lnbih7fSwgZGlnZyhlLCBcIm5hdGl2ZUV2ZW50XCIsIFwibGF5b3V0XCIpKVxuICAgIGNvbnN0IG5ld1N0YXRlID0ge2VuZE9mU2VsZWN0TGF5b3V0fVxuXG4gICAgaWYgKHRoaXMucy5vcGVuZWQgJiYgZW5kT2ZTZWxlY3RMYXlvdXQ/LndpZHRoKSB7XG4gICAgICBuZXdTdGF0ZS5vcHRpb25zV2lkdGggPSBlbmRPZlNlbGVjdExheW91dC53aWR0aFxuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnMub3BlbmVkICYmIHRoaXMucy5vcHRpb25zQ29udGFpbmVyTGF5b3V0KSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4oKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgb25PcHRpb25zQ29udGFpbmVyTGF5b3V0ID0gKGUpID0+IHRoaXMuc2V0U3RhdGUoe29wdGlvbnNDb250YWluZXJMYXlvdXQ6IE9iamVjdC5hc3NpZ24oe30sIGRpZ2coZSwgXCJuYXRpdmVFdmVudFwiLCBcImxheW91dFwiKSl9KVxuXG4gIG9uU2VsZWN0Q2xpY2tlZCA9IChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgY29uc3Qge29wZW5lZH0gPSB0aGlzLnNcblxuICAgIGlmIChvcGVuZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VPcHRpb25zKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuT3B0aW9ucygpXG4gICAgfVxuICB9XG5cbiAgb25TZWFyY2hUZXh0SW5wdXRDaGFuZ2VkRGVib3VuY2VkID0gZGVib3VuY2UodGhpcy50dC5sb2FkT3B0aW9ucywgMjAwKVxuXG4gIGNsb3NlT3B0aW9ucygpIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgIGxvYWRlZE9wdGlvbnM6IHVuZGVmaW5lZCxcbiAgICAgIG9wZW5lZDogZmFsc2UsXG4gICAgICBvcHRpb25zQ29udGFpbmVyTGF5b3V0OiBudWxsLFxuICAgICAgcGFnZTogMSxcbiAgICAgIHBhZ2VJbnB1dEFjdGl2ZTogZmFsc2UsXG4gICAgICBwYWdlSW5wdXRWYWx1ZTogXCJcIixcbiAgICAgIHBhZ2VTaXplOiBudWxsLFxuICAgICAgdG90YWxDb3VudDogbnVsbFxuICAgIH0pXG5cbiAgICBpZiAodGhpcy5wcm9wcy5vbk9wdGlvbnNDbG9zZWQpIHtcbiAgICAgIHRoaXMucHJvcHMub25PcHRpb25zQ2xvc2VkKHtvcHRpb25zOiB0aGlzLmdldEN1cnJlbnRPcHRpb25zKCl9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLnAub25CbHVyKSB0aGlzLnAub25CbHVyKClcbiAgfVxuXG4gIGdldFNlYXJjaFRleHQgPSAoKSA9PiB0aGlzLnNlYXJjaFRleHRWYWx1ZSB8fCBcIlwiXG5cbiAgcmVzZXRTZWFyY2hUZXh0SW5wdXQgPSAoKSA9PiB7XG4gICAgdGhpcy5zZWFyY2hUZXh0VmFsdWUgPSBcIlwiXG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLnR0LnNlYXJjaFRleHRJbnB1dFJlZi5jdXJyZW50XG5cbiAgICBpZiAoaW5wdXQ/LmNsZWFyKSB7XG4gICAgICBpbnB1dC5jbGVhcigpXG4gICAgfSBlbHNlIGlmIChpbnB1dD8uc2V0TmF0aXZlUHJvcHMpIHtcbiAgICAgIGlucHV0LnNldE5hdGl2ZVByb3BzKHt0ZXh0OiBcIlwifSlcbiAgICB9IGVsc2UgaWYgKGlucHV0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBpbnB1dC52YWx1ZSA9IFwiXCJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElnbm9yZSBpZiB0aGUgcmVmIGRvZXNuJ3Qgc3VwcG9ydCBkaXJlY3QgdmFsdWUgYXNzaWdubWVudC5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZVNlYXJjaFRleHQgPSAoc2VhcmNoVGV4dCkgPT4ge1xuICAgIHRoaXMuc2VhcmNoVGV4dFZhbHVlID0gc2VhcmNoVGV4dFxuXG4gICAgaWYgKHRoaXMucy5wYWdlICE9IDEpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe3BhZ2U6IDEsIHBhZ2VJbnB1dEFjdGl2ZTogZmFsc2UsIHBhZ2VJbnB1dFZhbHVlOiBcIlwifSwgdGhpcy50dC5vblNlYXJjaFRleHRJbnB1dENoYW5nZWREZWJvdW5jZWQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHQub25TZWFyY2hUZXh0SW5wdXRDaGFuZ2VkRGVib3VuY2VkKClcbiAgICB9XG4gIH1cblxuICBvcGVuT3B0aW9ucygpIHtcbiAgICB0aGlzLnNlYXJjaFRleHRWYWx1ZSA9IFwiXCJcbiAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbkJlbG93KClcbiAgICB0aGlzLmxvYWRPcHRpb25zKClcbiAgICB0aGlzLmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiA9IHRydWVcbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge1xuICAgICAgICBoZWlnaHQ6IHRoaXMucy5zZWxlY3RDb250YWluZXJMYXlvdXQuaGVpZ2h0LFxuICAgICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICAgIHNjcm9sbExlZnQ6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCA6IG51bGwsXG4gICAgICAgIHNjcm9sbFRvcDogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgOiBudWxsXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc2V0U2VhcmNoVGV4dElucHV0KClcbiAgICAgICAgdGhpcy5mb2N1c1RleHRJbnB1dCgpXG4gICAgICB9XG4gICAgKVxuXG4gICAgaWYgKHRoaXMucC5vbkZvY3VzKSB0aGlzLnAub25Gb2N1cygpXG4gIH1cblxuICBmb2N1c1RleHRJbnB1dCA9ICgpID0+IGRpZ2codGhpcy50dC5zZWFyY2hUZXh0SW5wdXRSZWYsIFwiY3VycmVudFwiKT8uZm9jdXMoKVxuXG4gIHNldE9wdGlvbnNQb3NpdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuaXNBY3RpdmUoKSkge1xuICAgICAgcmV0dXJuIC8vIERlYm91bmNlIGFmdGVyIHVuLW1vdW50IGhhbmRlbGluZy5cbiAgICB9XG5cbiAgICB0aGlzLmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiA9IHRydWVcbiAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbkJlbG93KClcbiAgfVxuXG4gIHNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuKCkge1xuICAgIGNvbnN0IHt3aW5kb3dIZWlnaHR9ID0gdGhpcy50dFxuICAgIGNvbnN0IHtvcHRpb25zQ29udGFpbmVyTGF5b3V0fSA9IHRoaXMuc1xuICAgIGNvbnN0IGVuZE9mU2VsZWN0TGF5b3V0ID0gdGhpcy5zLmVuZE9mU2VsZWN0TGF5b3V0XG5cbiAgICBpZiAoIWVuZE9mU2VsZWN0TGF5b3V0KSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtvcHRpb25zVmlzaWJpbGl0eTogXCJ2aXNpYmxlXCJ9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9uc1RvcCA9IGVuZE9mU2VsZWN0TGF5b3V0LnRvcFxuICAgIGNvbnN0IG9wdGlvbnNUb3RhbEJvdHRvbVBvc2l0aW9uID0gb3B0aW9uc0NvbnRhaW5lckxheW91dC5oZWlnaHQgKyBvcHRpb25zVG9wXG4gICAgY29uc3Qgd2luZG93SGVpZ2h0V2l0aFNjcm9sbCA9IHdpbmRvd0hlaWdodCArIHRoaXMucy5zY3JvbGxUb3BcblxuICAgIGlmICh3aW5kb3dIZWlnaHRXaXRoU2Nyb2xsIDwgb3B0aW9uc1RvdGFsQm90dG9tUG9zaXRpb24pIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmUoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtvcHRpb25zVmlzaWJpbGl0eTogXCJ2aXNpYmxlXCJ9KVxuICAgIH1cbiAgfVxuXG4gIHNldE9wdGlvbnNQb3NpdGlvbkFib3ZlKCkge1xuICAgIGNvbnN0IHtlbmRPZlNlbGVjdExheW91dH0gPSB0aGlzLnNcblxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgb3B0aW9uc1BsYWNlbWVudDogXCJhYm92ZVwiLFxuICAgICAgICBvcHRpb25zVmlzaWJpbGl0eTogXCJ2aXNpYmxlXCIsXG4gICAgICAgIG9wdGlvbnNXaWR0aDogZW5kT2ZTZWxlY3RMYXlvdXQ/LndpZHRoXG4gICAgICB9LFxuICAgICAgKCkgPT4gdGhpcy5mb2N1c1RleHRJbnB1dCgpXG4gICAgKVxuICB9XG5cbiAgc2V0T3B0aW9uc1Bvc2l0aW9uQmVsb3coKSB7XG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICBvcHRpb25zUGxhY2VtZW50OiBcImJlbG93XCIsXG4gICAgICAgIG9wdGlvbnNWaXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICBvcHRpb25zV2lkdGg6IHRoaXMucy5lbmRPZlNlbGVjdExheW91dD8ud2lkdGhcbiAgICAgIH0sXG4gICAgICAoKSA9PiB0aGlzLmZvY3VzVGV4dElucHV0KClcbiAgICApXG4gIH1cblxuICBvbkFueXRoaW5nUmVzaXplZCA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5zLm9wZW5lZCkge1xuICAgICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb24oKVxuICAgIH1cbiAgfVxuXG4gIG9uQW55dGhpbmdSZXNpemVkRGVib3VuY2VkID0gZGVib3VuY2UodGhpcy50dC5vbkFueXRoaW5nUmVzaXplZCwgMjUpXG5cbiAgb25Bbnl0aGluZ1Njcm9sbGVkID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnMub3BlbmVkKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2Nyb2xsTGVmdDogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IDogbnVsbCxcbiAgICAgICAgc2Nyb2xsVG9wOiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA6IG51bGxcbiAgICAgIH0pXG4gICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbigpXG4gICAgfVxuICB9XG5cbiAgb25Bbnl0aGluZ1Njcm9sbGVkRGVib3VuY2VkID0gZGVib3VuY2UodGhpcy50dC5vbkFueXRoaW5nU2Nyb2xsZWQsIDI1KVxuXG4gIG9uUHJlc3NPdXRzaWRlT3B0aW9ucyA9ICgpID0+IHtcbiAgICAvLyBJZiBvcHRpb25zIGFyZSBvcGVuIGFuZCBhIGNsaWNrIGlzIG1hZGUgb3V0c2lkZSBvZiB0aGUgb3B0aW9ucyBjb250YWluZXJcbiAgICBpZiAodGhpcy5zLm9wZW5lZCkge1xuICAgICAgdGhpcy5jbG9zZU9wdGlvbnMoKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7bnVtYmVyfG51bGx9ICovXG4gIHBhZ2luYXRpb25Ub3RhbFBhZ2VzKCkge1xuICAgIGNvbnN0IHt0b3RhbENvdW50fSA9IHRoaXMuc1xuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodG90YWxDb3VudCkgfHwgdG90YWxDb3VudCA8PSAwKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLnJlc29sdmVQYWdlU2l6ZSh7XG4gICAgICBvcHRpb25zOiB0aGlzLnMubG9hZGVkT3B0aW9ucyB8fCBbXSxcbiAgICAgIHBhZ2U6IHRoaXMuZ2V0QWN0aXZlUGFnZSgpLFxuICAgICAgcGFnZVNpemU6IHRoaXMucy5wYWdlU2l6ZSxcbiAgICAgIHRvdGFsQ291bnRcbiAgICB9KVxuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocGFnZVNpemUpIHx8IHBhZ2VTaXplIDw9IDApIHJldHVybiBudWxsXG5cbiAgICByZXR1cm4gTWF0aC5jZWlsKHRvdGFsQ291bnQgLyBwYWdlU2l6ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWxQYWdlc1xuICAgKiBAcmV0dXJucyB7QXJyYXk8e2tleTogc3RyaW5nLCB0eXBlOiBcInBhZ2VcInxcImVsbGlwc2lzXCIsIHZhbHVlPzogbnVtYmVyfT59XG4gICAqL1xuICBwYWdpbmF0aW9uUGFnZUl0ZW1zKHRvdGFsUGFnZXMpIHtcbiAgICBjb25zdCBjdXJyZW50UGFnZSA9IHRoaXMuZ2V0QWN0aXZlUGFnZSgpXG4gICAgY29uc3QgaXRlbXMgPSBbXVxuICAgIGNvbnN0IGFkZFBhZ2UgPSAocGFnZSkgPT4gaXRlbXMucHVzaCh7a2V5OiBgcGFnZS0ke3BhZ2V9YCwgdHlwZTogXCJwYWdlXCIsIHZhbHVlOiBwYWdlfSlcbiAgICBjb25zdCBhZGRFbGxpcHNpcyA9IChrZXkpID0+IGl0ZW1zLnB1c2goe2tleSwgdHlwZTogXCJlbGxpcHNpc1wifSlcblxuICAgIGlmICh0b3RhbFBhZ2VzIDw9IDcpIHtcbiAgICAgIGZvciAobGV0IHBhZ2UgPSAxOyBwYWdlIDw9IHRvdGFsUGFnZXM7IHBhZ2UgKz0gMSkge1xuICAgICAgICBhZGRQYWdlKHBhZ2UpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpdGVtc1xuICAgIH1cblxuICAgIGFkZFBhZ2UoMSlcblxuICAgIGNvbnN0IHdpbmRvd1NpemUgPSAyXG4gICAgbGV0IHN0YXJ0ID0gTWF0aC5tYXgoMiwgY3VycmVudFBhZ2UgLSB3aW5kb3dTaXplKVxuICAgIGxldCBlbmQgPSBNYXRoLm1pbih0b3RhbFBhZ2VzIC0gMSwgY3VycmVudFBhZ2UgKyB3aW5kb3dTaXplKVxuXG4gICAgaWYgKGN1cnJlbnRQYWdlIDw9IDMpIHtcbiAgICAgIHN0YXJ0ID0gMlxuICAgICAgZW5kID0gTWF0aC5taW4odG90YWxQYWdlcyAtIDEsIDUpXG4gICAgfSBlbHNlIGlmIChjdXJyZW50UGFnZSA+PSB0b3RhbFBhZ2VzIC0gMikge1xuICAgICAgZW5kID0gdG90YWxQYWdlcyAtIDFcbiAgICAgIHN0YXJ0ID0gTWF0aC5tYXgoMiwgdG90YWxQYWdlcyAtIDQpXG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gMikgYWRkRWxsaXBzaXMoXCJlbGxpcHNpcy1zdGFydFwiKVxuXG4gICAgZm9yIChsZXQgcGFnZSA9IHN0YXJ0OyBwYWdlIDw9IGVuZDsgcGFnZSArPSAxKSB7XG4gICAgICBhZGRQYWdlKHBhZ2UpXG4gICAgfVxuXG4gICAgaWYgKGVuZCA8IHRvdGFsUGFnZXMgLSAxKSBhZGRFbGxpcHNpcyhcImVsbGlwc2lzLWVuZFwiKVxuXG4gICAgYWRkUGFnZSh0b3RhbFBhZ2VzKVxuXG4gICAgcmV0dXJuIGl0ZW1zXG4gIH1cblxuICAvKiogQHBhcmFtIHtudW1iZXJ9IHBhZ2UgKi9cbiAgc2V0UGFnaW5hdGlvblBhZ2UgPSAocGFnZSkgPT4ge1xuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSB0aGlzLnBhZ2luYXRpb25Ub3RhbFBhZ2VzKClcblxuICAgIGlmICghdG90YWxQYWdlcykgcmV0dXJuXG5cbiAgICBjb25zdCBuZXh0UGFnZSA9IE1hdGgubWluKE1hdGgubWF4KE1hdGguZmxvb3IocGFnZSksIDEpLCB0b3RhbFBhZ2VzKVxuXG4gICAgaWYgKG5leHRQYWdlID09IHRoaXMuZ2V0QWN0aXZlUGFnZSgpKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtwYWdlSW5wdXRBY3RpdmU6IGZhbHNlLCBwYWdlSW5wdXRWYWx1ZTogXCJcIn0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHtwYWdlOiBuZXh0UGFnZSwgcGFnZUlucHV0QWN0aXZlOiBmYWxzZSwgcGFnZUlucHV0VmFsdWU6IFwiXCJ9LCB0aGlzLnR0LmxvYWRPcHRpb25zKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50ICovXG4gIG9uUGFnaW5hdGlvblByZXZQcmVzc2VkID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQ/LigpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uPy4oKVxuXG4gICAgdGhpcy5zZXRQYWdpbmF0aW9uUGFnZSh0aGlzLmdldEFjdGl2ZVBhZ2UoKSAtIDEpXG4gIH1cblxuICAvKiogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnQgKi9cbiAgb25QYWdpbmF0aW9uTmV4dFByZXNzZWQgPSAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdD8uKClcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24/LigpXG5cbiAgICB0aGlzLnNldFBhZ2luYXRpb25QYWdlKHRoaXMuZ2V0QWN0aXZlUGFnZSgpICsgMSlcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudCAqL1xuICBvblBhZ2luYXRpb25MYWJlbFByZXNzZWQgPSAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdD8uKClcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24/LigpXG5cbiAgICBpZiAodGhpcy5zLnBhZ2VJbnB1dEFjdGl2ZSkgcmV0dXJuXG5cbiAgICB0aGlzLnNldFN0YXRlKHtwYWdlSW5wdXRBY3RpdmU6IHRydWUsIHBhZ2VJbnB1dFZhbHVlOiBTdHJpbmcodGhpcy5nZXRBY3RpdmVQYWdlKCkpfSwgKCkgPT4ge1xuICAgICAgdGhpcy50dC5wYWdlSW5wdXRSZWYuY3VycmVudD8uZm9jdXM/LigpXG4gICAgfSlcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgKi9cbiAgb25QYWdpbmF0aW9uSW5wdXRDaGFuZ2UgPSAodmFsdWUpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtwYWdlSW5wdXRWYWx1ZTogdmFsdWV9KVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50ICovXG4gIG9uUGFnaW5hdGlvbklucHV0Qmx1ciA9IChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0Py4oKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbj8uKClcblxuICAgIHRoaXMuc2V0U3RhdGUoe3BhZ2VJbnB1dEFjdGl2ZTogZmFsc2UsIHBhZ2VJbnB1dFZhbHVlOiBcIlwifSlcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudCAqL1xuICBvblBhZ2luYXRpb25JbnB1dFN1Ym1pdCA9IChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0Py4oKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbj8uKClcblxuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSB0aGlzLnBhZ2luYXRpb25Ub3RhbFBhZ2VzKClcblxuICAgIGlmICghdG90YWxQYWdlcykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7cGFnZUlucHV0QWN0aXZlOiBmYWxzZSwgcGFnZUlucHV0VmFsdWU6IFwiXCJ9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFBhZ2UgPSBOdW1iZXIodGhpcy5zLnBhZ2VJbnB1dFZhbHVlKVxuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobmV4dFBhZ2UpKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtwYWdlSW5wdXRBY3RpdmU6IGZhbHNlLCBwYWdlSW5wdXRWYWx1ZTogXCJcIn0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnNldFBhZ2luYXRpb25QYWdlKG5leHRQYWdlKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV8bnVsbH0gKi9cbiAgcGFnaW5hdGlvbkNvbnRyb2xzKCkge1xuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSB0aGlzLnBhZ2luYXRpb25Ub3RhbFBhZ2VzKClcblxuICAgIGlmICghdG90YWxQYWdlcyB8fCB0b3RhbFBhZ2VzIDw9IDEpIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBjdXJyZW50UGFnZSA9IHRoaXMuZ2V0QWN0aXZlUGFnZSgpXG4gICAgY29uc3QgcHJldkRpc2FibGVkID0gY3VycmVudFBhZ2UgPD0gMVxuICAgIGNvbnN0IG5leHREaXNhYmxlZCA9IGN1cnJlbnRQYWdlID49IHRvdGFsUGFnZXNcblxuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1xuICAgICAgICBkYXRhU2V0PXtkYXRhU2V0cy5wYWdpbmF0aW9uQ29udGFpbmVyIHx8PSB7Y2xhc3M6IFwib3B0aW9ucy1wYWdpbmF0aW9uXCJ9fVxuICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25Db250YWluZXIgfHw9IHtcbiAgICAgICAgICBib3JkZXJUb3A6IFwiMXB4IHNvbGlkICNlMmU4ZjBcIixcbiAgICAgICAgICBwYWRkaW5nOiA4XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgZGF0YVNldD17ZGF0YVNldHMucGFnaW5hdGlvbkhlYWRlciB8fD0ge2NsYXNzOiBcInBhZ2luYXRpb24taGVhZGVyXCJ9fVxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbkhlYWRlciB8fD0ge2ZsZXhEaXJlY3Rpb246IFwicm93XCIsIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsIGp1c3RpZnlDb250ZW50OiBcInNwYWNlLWJldHdlZW5cIn19XG4gICAgICAgID5cbiAgICAgICAgICA8UHJlc3NhYmxlXG4gICAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0cy5wYWdpbmF0aW9uUHJldkJ1dHRvbiB8fD0ge2NsYXNzOiBcInBhZ2luYXRpb24tcHJldlwifX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtwcmV2RGlzYWJsZWR9XG4gICAgICAgICAgICBvblByZXNzPXt0aGlzLnR0Lm9uUGFnaW5hdGlvblByZXZQcmVzc2VkfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlc1tgcGFnaW5hdGlvbk5hdkJ1dHRvbi0ke3ByZXZEaXNhYmxlZH1gXSB8fD0ge1xuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI2Y4ZmFmY1wiLFxuICAgICAgICAgICAgICBib3JkZXI6IFwiMXB4IHNvbGlkICNjYmQ1ZTFcIixcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA4LFxuICAgICAgICAgICAgICBoZWlnaHQ6IDMwLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgb3BhY2l0eTogcHJldkRpc2FibGVkID8gMC40IDogMSxcbiAgICAgICAgICAgICAgd2lkdGg6IDMwXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxGb250QXdlc29tZUljb25cbiAgICAgICAgICAgICAgbmFtZT1cImNoZXZyb24tbGVmdFwiXG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbk5hdkljb24gfHw9IHtjb2xvcjogXCIjMzM0MTU1XCIsIGZvbnRTaXplOiAxMn19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzLnBhZ2luYXRpb25MYWJlbCB8fD0ge2NsYXNzOiBcInBhZ2luYXRpb24tbGFiZWxcIn19XG4gICAgICAgICAgICBvblByZXNzPXt0aGlzLnR0Lm9uUGFnaW5hdGlvbkxhYmVsUHJlc3NlZH1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbkxhYmVsQnV0dG9uIHx8PSB7XG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjZjFmNWY5XCIsXG4gICAgICAgICAgICAgIGJvcmRlcjogXCIxcHggc29saWQgI2NiZDVlMVwiLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDE0LFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgbWluV2lkdGg6IDE0MCxcbiAgICAgICAgICAgICAgcGFkZGluZ0hvcml6b250YWw6IDEwLFxuICAgICAgICAgICAgICBwYWRkaW5nVmVydGljYWw6IDZcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgeyF0aGlzLnMucGFnZUlucHV0QWN0aXZlICYmXG4gICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uTGFiZWxUZXh0IHx8PSB7XG4gICAgICAgICAgICAgICAgICBjb2xvcjogXCIjMGYxNzJhXCIsXG4gICAgICAgICAgICAgICAgICBmb250U2l6ZTogMTIsXG4gICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiA2MDBcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgUGFnZSB7Y3VycmVudFBhZ2V9IG9mIHt0b3RhbFBhZ2VzfVxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB7dGhpcy5zLnBhZ2VJbnB1dEFjdGl2ZSAmJlxuICAgICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgICAgZGF0YVNldD17ZGF0YVNldHMucGFnaW5hdGlvbklucHV0IHx8PSB7Y2xhc3M6IFwicGFnaW5hdGlvbi1pbnB1dFwifX1cbiAgICAgICAgICAgICAgICBrZXlib2FyZFR5cGU9XCJudW1iZXItcGFkXCJcbiAgICAgICAgICAgICAgICBvbkJsdXI9e3RoaXMudHQub25QYWdpbmF0aW9uSW5wdXRCbHVyfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlVGV4dD17dGhpcy50dC5vblBhZ2luYXRpb25JbnB1dENoYW5nZX1cbiAgICAgICAgICAgICAgICBvblN1Ym1pdEVkaXRpbmc9e3RoaXMudHQub25QYWdpbmF0aW9uSW5wdXRTdWJtaXR9XG4gICAgICAgICAgICAgICAgcmVmPXt0aGlzLnR0LnBhZ2VJbnB1dFJlZn1cbiAgICAgICAgICAgICAgICBzZWxlY3RUZXh0T25Gb2N1c1xuICAgICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbklucHV0U3R5bGUgfHw9IHtcbiAgICAgICAgICAgICAgICAgIGJvcmRlcjogMCxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiBcIiMwZjE3MmFcIixcbiAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxMixcbiAgICAgICAgICAgICAgICAgIG91dGxpbmU6IFwibm9uZVwiLFxuICAgICAgICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA4MFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMucy5wYWdlSW5wdXRWYWx1ZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgICA8UHJlc3NhYmxlXG4gICAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0cy5wYWdpbmF0aW9uTmV4dEJ1dHRvbiB8fD0ge2NsYXNzOiBcInBhZ2luYXRpb24tbmV4dFwifX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtuZXh0RGlzYWJsZWR9XG4gICAgICAgICAgICBvblByZXNzPXt0aGlzLnR0Lm9uUGFnaW5hdGlvbk5leHRQcmVzc2VkfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlc1tgcGFnaW5hdGlvbk5hdkJ1dHRvbi0ke25leHREaXNhYmxlZH1gXSB8fD0ge1xuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI2Y4ZmFmY1wiLFxuICAgICAgICAgICAgICBib3JkZXI6IFwiMXB4IHNvbGlkICNjYmQ1ZTFcIixcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA4LFxuICAgICAgICAgICAgICBoZWlnaHQ6IDMwLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgb3BhY2l0eTogbmV4dERpc2FibGVkID8gMC40IDogMSxcbiAgICAgICAgICAgICAgd2lkdGg6IDMwXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxGb250QXdlc29tZUljb25cbiAgICAgICAgICAgICAgbmFtZT1cImNoZXZyb24tcmlnaHRcIlxuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25OYXZJY29uIHx8PSB7Y29sb3I6IFwiIzMzNDE1NVwiLCBmb250U2l6ZTogMTJ9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzLnBhZ2luYXRpb25QYWdlcyB8fD0ge2NsYXNzOiBcInBhZ2luYXRpb24tcGFnZXNcIn19XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uUGFnZXMgfHw9IHtcbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246IFwicm93XCIsXG4gICAgICAgICAgICBmbGV4V3JhcDogXCJ3cmFwXCIsXG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgICAgIG1hcmdpblRvcDogOFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5wYWdpbmF0aW9uUGFnZUl0ZW1zKHRvdGFsUGFnZXMpLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PSBcImVsbGlwc2lzXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICAgICAgZGF0YVNldD17ZGF0YVNldHNbYHBhZ2luYXRpb25FbGxpcHNpcy0ke2l0ZW0ua2V5fWBdIHx8PSB7Y2xhc3M6IFwicGFnaW5hdGlvbi1lbGxpcHNpc1wifX1cbiAgICAgICAgICAgICAgICAgIGtleT17aXRlbS5rZXl9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25FbGxpcHNpcyB8fD0ge3BhZGRpbmdIb3Jpem9udGFsOiA2fX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25FbGxpcHNpc1RleHQgfHw9IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCIjNjQ3NDhiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IDEyLFxuICAgICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDYwMFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAuLi5cbiAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPFBhZ2luYXRpb25QYWdlQnV0dG9uXG4gICAgICAgICAgICAgICAgYWN0aXZlPXtpdGVtLnZhbHVlID09IGN1cnJlbnRQYWdlfVxuICAgICAgICAgICAgICAgIGtleT17aXRlbS5rZXl9XG4gICAgICAgICAgICAgICAgb25QYWdlU2VsZWN0ZWQ9e3RoaXMudHQuc2V0UGFnaW5hdGlvblBhZ2V9XG4gICAgICAgICAgICAgICAgcGFnZT17aXRlbS52YWx1ZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIG9wdGlvbnNDb250YWluZXIoKSB7XG4gICAgY29uc3Qge3NlbGVjdENvbnRhaW5lckxheW91dCwgbG9hZGVkT3B0aW9ucywgZW5kT2ZTZWxlY3RMYXlvdXQsIG9wdGlvbnNDb250YWluZXJMYXlvdXQsIG9wdGlvbnNQbGFjZW1lbnQsIG9wdGlvbnNWaXNpYmlsaXR5fSA9IHRoaXMuc1xuICAgIGxldCBsZWZ0LCB0b3BcblxuICAgIGxldCBzdHlsZSA9IHtcbiAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICB6SW5kZXg6IDk5OTk5LFxuICAgICAgZWxldmF0aW9uOiA5OTk5OSxcbiAgICAgIHZpc2liaWxpdHk6IG9wdGlvbnNWaXNpYmlsaXR5LFxuICAgICAgd2lkdGg6IHRoaXMucC5vcHRpb25zV2lkdGggfHwgdGhpcy5zLm9wdGlvbnNXaWR0aCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjZmZmXCIsXG4gICAgICBib3JkZXI6IFwiMXB4IHNvbGlkICM5OTlcIixcbiAgICAgIG1heEhlaWdodDogMzAwLFxuICAgICAgb3ZlcmZsb3dZOiBcImF1dG9cIlxuICAgIH1cblxuICAgIGlmICghdGhpcy5wLm9wdGlvbnNQb3J0YWwpIHtcbiAgICAgIHN0eWxlLnRvcCA9IDBcbiAgICAgIHN0eWxlLmxlZnQgPSAwXG4gICAgfSBlbHNlIGlmICghdGhpcy5wLm9wdGlvbnNBYnNvbHV0ZSkge1xuICAgICAgc3R5bGUubGVmdCA9IDBcbiAgICAgIHN0eWxlLmJvdHRvbSA9IDBcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnNQbGFjZW1lbnQgPT0gXCJiZWxvd1wiKSB7XG4gICAgICBpZiAoUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIikge1xuICAgICAgICAvLyBvbkxheW91dCB0b3AgdmFsdWUgaXMgc29tZXRpbWVzIG5lZ2F0aXZlIHNvIHVzZSBicm93c2VyIEpTIHRvIGdldCBpdCBpbnN0ZWFkXG4gICAgICAgIHRvcCA9IGRpZ2codGhpcy50dC5lbmRPZlNlbGVjdFJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBcInRvcFwiKSArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgKyAxXG5cbiAgICAgICAgLy8gb25MYXlvdXQgbGVmdCB2YWx1ZXMgZG9lc24ndCBhbHdheXMgdXBkYXRlIHdoZW4gY2hhbmdlZFxuICAgICAgICBsZWZ0ID0gZGlnZyh0aGlzLnR0LmVuZE9mU2VsZWN0UmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIFwibGVmdFwiKSArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWZ0ID0gdGhpcy5zLmVuZE9mU2VsZWN0TGF5b3V0LmxlZnRcbiAgICAgICAgdG9wID0gc2VsZWN0Q29udGFpbmVyTGF5b3V0LnRvcFxuICAgICAgfVxuXG4gICAgICBzdHlsZS5sZWZ0ID0gbGVmdFxuICAgICAgc3R5bGUudG9wID0gdG9wIC0gMlxuICAgIH0gZWxzZSBpZiAob3B0aW9uc1BsYWNlbWVudCA9PSBcImFib3ZlXCIpIHtcbiAgICAgIGlmIChQbGF0Zm9ybS5PUyA9PSBcIndlYlwiKSB7XG4gICAgICAgIC8vIG9uTGF5b3V0IHRvcCB2YWx1ZSBpcyBzb21ldGltZXMgbmVnYXRpdmUgc28gdXNlIGJyb3dzZXIgSlMgdG8gZ2V0IGl0IGluc3RlYWRcbiAgICAgICAgdG9wID0gZGlnZyh0aGlzLnR0LnNlbGVjdENvbnRhaW5lclJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBcInRvcFwiKSArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3BcblxuICAgICAgICAvLyBvbkxheW91dCBsZWZ0IHZhbHVlcyBkb2Vzbid0IGFsd2F5cyB1cGRhdGUgd2hlbiBjaGFuZ2VkXG4gICAgICAgIGxlZnQgPSBkaWdnKHRoaXMudHQuc2VsZWN0Q29udGFpbmVyUmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIFwibGVmdFwiKSArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWZ0ID0gZW5kT2ZTZWxlY3RMYXlvdXQubGVmdFxuICAgICAgICB0b3AgPSBzZWxlY3RDb250YWluZXJMYXlvdXQudG9wXG4gICAgICB9XG5cbiAgICAgIHN0eWxlLmxlZnQgPSBsZWZ0XG4gICAgICBzdHlsZS50b3AgPSB0b3AgLSBvcHRpb25zQ29udGFpbmVyTGF5b3V0LmhlaWdodCArIDFcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtvbnduIG9wdGlvbnMgcGxhY2VtZW50OiAke29wdGlvbnNQbGFjZW1lbnR9YClcbiAgICB9XG5cbiAgICBzdHlsZSA9IHRoaXMuc3R5bGluZ0ZvcihcIm9wdGlvbnNDb250YWluZXJcIiwgc3R5bGUsIFtsZWZ0LCB0b3AsIHN0eWxlLnZpc2liaWxpdHksIHN0eWxlLndpZHRoXSlcblxuICAgIGNvbnN0IGlkID0gaWRGb3JDb21wb25lbnQodGhpcylcblxuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1xuICAgICAgICBkYXRhU2V0PXt0aGlzLmNhY2hlKFwib3B0aW9uc0NvbnRhaW5lckRhdGFTZXRcIiwge2NsYXNzOiBcIm9wdGlvbnMtY29udGFpbmVyXCIsIGlkLCByb2xlOiBcImRpYWxvZ1wifSwgW2lkXSl9XG4gICAgICAgIG9uTGF5b3V0PXt0aGlzLnR0Lm9uT3B0aW9uc0NvbnRhaW5lckxheW91dH1cbiAgICAgICAgcmVmPXt0aGlzLnR0Lm9wdGlvbnNDb250YWluZXJSZWZ9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgID5cbiAgICAgICAge2xvYWRlZE9wdGlvbnM/Lm1hcCgobG9hZGVkT3B0aW9uKSA9PlxuICAgICAgICAgIHRoaXMuaGF5YVNlbGVjdE9wdGlvbih7XG4gICAgICAgICAgICBrZXk6IGxvYWRlZE9wdGlvbi5rZXkgfHwgYGxvYWRlZC1vcHRpb24tJHtsb2FkZWRPcHRpb24udmFsdWV9YCxcbiAgICAgICAgICAgIGxvYWRlZE9wdGlvblxuICAgICAgICAgIH0pXG4gICAgICAgICl9XG4gICAgICAgIHtsb2FkZWRPcHRpb25zPy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICA8VmlldyBkYXRhU2V0PXt0aGlzLm5vT3B0aW9uc0NvbnRhaW5lckRhdGFTZXQgfHw9IHtjbGFzczogXCJuby1vcHRpb25zLWNvbnRhaW5lclwifX0+XG4gICAgICAgICAgICA8VGV4dD57dGhpcy5wLm5vT3B0aW9uc1RleHQgPyB0aGlzLnAubm9PcHRpb25zVGV4dCgpIDogdGhpcy50cmFuc2xhdGUoXCIubm9fb3B0aW9uc19mb3VuZFwiKX08L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICB9XG4gICAgICAgIHt0aGlzLnBhZ2luYXRpb25Db250cm9scygpfVxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIG9uT3B0aW9uQ2xpY2tlZCA9IChldmVudCwgbG9hZGVkT3B0aW9uKSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICBjb25zdCB7b25DaGFuZ2UsIHRvZ2dsZU9wdGlvbnN9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHttdWx0aXBsZX0gPSB0aGlzLnBcbiAgICBjb25zdCBjdXJyZW50T3B0aW9ucyA9IHRoaXMuZ2V0Q3VycmVudE9wdGlvbnMoKVxuICAgIGNvbnN0IHRvZ2dsZWQgPSB0aGlzLmdldFRvZ2dsZWQoKVxuICAgIGNvbnN0IG5ld1N0YXRlID0ge31cbiAgICBjb25zdCBleGlzdGluZ09wdGlvbiA9IGN1cnJlbnRPcHRpb25zLmZpbmQoKGN1cnJlbnRPcHRpb24pID0+IGN1cnJlbnRPcHRpb24udmFsdWUgPT0gbG9hZGVkT3B0aW9uLnZhbHVlKVxuICAgIGNvbnN0IG5ld1RvZ2dsZWQgPSB7Li4udG9nZ2xlZH1cbiAgICBsZXQgbmV3Q3VycmVudE9wdGlvbnNcblxuICAgIGlmIChleGlzdGluZ09wdGlvbikge1xuICAgICAgaWYgKHRvZ2dsZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFRvZ2dsZSA9IHRvZ2dsZWRbbG9hZGVkT3B0aW9uLnZhbHVlXVxuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0b2dnbGVPcHRpb25zLmZpbmRJbmRleCgoZWxlbWVudCkgPT4gZWxlbWVudC52YWx1ZSA9PSBjdXJyZW50VG9nZ2xlKVxuXG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPj0gKHRvZ2dsZU9wdGlvbnMubGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgICAvLyBObyBuZXh0IHRvZ2dsZWQgLSByZW1vdmUgdG9nZ2xlZCBhbmQgb3B0aW9uXG4gICAgICAgICAgZGVsZXRlIG5ld1RvZ2dsZWRbbG9hZGVkT3B0aW9uLnZhbHVlXVxuXG4gICAgICAgICAgbmV3Q3VycmVudE9wdGlvbnMgPSBjdXJyZW50T3B0aW9ucy5maWx0ZXIoKGN1cnJlbnRPcHRpb24pID0+IGN1cnJlbnRPcHRpb24udmFsdWUgIT0gbG9hZGVkT3B0aW9uLnZhbHVlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFscmVhZHkgdG9nZ2xlZCAtIHNldCB0byBuZXh0IHRvZ2dsZVxuICAgICAgICAgIG5ld1RvZ2dsZWRbbG9hZGVkT3B0aW9uLnZhbHVlXSA9IGRpZ2codG9nZ2xlT3B0aW9ucywgY3VycmVudEluZGV4ICsgMSwgXCJ2YWx1ZVwiKVxuICAgICAgICB9XG5cbiAgICAgICAgbmV3U3RhdGUudG9nZ2xlZCA9IG5ld1RvZ2dsZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIGN1cnJlbnQgb3B0aW9uc1xuICAgICAgICBuZXdDdXJyZW50T3B0aW9ucyA9IGN1cnJlbnRPcHRpb25zLmZpbHRlcigoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSAhPSBsb2FkZWRPcHRpb24udmFsdWUpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZSBjbGlja2VkIG9wdGlvbiBpcyBkaXNhYmxlZFxuICAgICAgaWYgKGxvYWRlZE9wdGlvbi5kaXNhYmxlZCkgcmV0dXJuXG5cbiAgICAgIGlmICh0b2dnbGVPcHRpb25zKSB7XG4gICAgICAgIC8vIFNldCBmcmVzaCB0b2dnbGVcbiAgICAgICAgbmV3VG9nZ2xlZFtsb2FkZWRPcHRpb24udmFsdWVdID0gdG9nZ2xlT3B0aW9uc1swXS52YWx1ZVxuICAgICAgICBuZXdTdGF0ZS50b2dnbGVkID0gbmV3VG9nZ2xlZFxuICAgICAgfVxuXG4gICAgICBpZiAobXVsdGlwbGUgfHwgdG9nZ2xlT3B0aW9ucykge1xuICAgICAgICBuZXdDdXJyZW50T3B0aW9ucyA9IGN1cnJlbnRPcHRpb25zLmNvbmNhdChbbG9hZGVkT3B0aW9uXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld0N1cnJlbnRPcHRpb25zID0gW2xvYWRlZE9wdGlvbl1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXCJ2YWx1ZXNcIiBpbiB0aGlzLnByb3BzICYmIHRoaXMucHJvcHMudmFsdWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGN1cnJlbnRPcHRpb25zIGFyZSBjb250cm9sbGVkIGFuZCBhIHVzZU1lbW8gY2FsbGJhY2sgaXMgaGFuZGVsaW5nIHNldHRpbmcgY3VycmVudCBvcHRpb25zLlxuICAgIH0gZWxzZSBpZiAobmV3Q3VycmVudE9wdGlvbnMpIHtcbiAgICAgIG5ld1N0YXRlLmN1cnJlbnRPcHRpb25zID0gbmV3Q3VycmVudE9wdGlvbnNcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0gbmV3Q3VycmVudE9wdGlvbnMgfHwgY3VycmVudE9wdGlvbnNcblxuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgb25DaGFuZ2Uoe1xuICAgICAgICBldmVudCxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgdG9nZ2xlczogbmV3VG9nZ2xlZFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZVZhbHVlKSB7XG4gICAgICBsZXQgb3B0aW9uVmFsdWVcblxuICAgICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICAgIG9wdGlvblZhbHVlID0gb3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9uVmFsdWUgPSBkaWcob3B0aW9ucywgMCwgXCJ2YWx1ZVwiKVxuICAgICAgfVxuXG4gICAgICB0aGlzLnAub25DaGFuZ2VWYWx1ZShvcHRpb25WYWx1ZSlcbiAgICB9XG5cbiAgICBpZiAoIW11bHRpcGxlKSB0aGlzLmNsb3NlT3B0aW9ucygpXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSlcbiAgfVxuXG4gIHN0eWxpbmdGb3Ioc3R5bGluZ05hbWUsIHN0eWxlID0ge30sIGNhY2hlcyA9IFtdKSB7XG4gICAgbGV0IGN1c3RvbVN0eWxpbmcgPSBkaWcodGhpcywgXCJwcm9wc1wiLCBcInN0eWxlc1wiLCBzdHlsaW5nTmFtZSlcblxuICAgIGlmICh0eXBlb2YgY3VzdG9tU3R5bGluZyA9PSBcImZ1bmN0aW9uXCIpIGN1c3RvbVN0eWxpbmcgPSBjdXN0b21TdHlsaW5nKHtzdGF0ZTogdGhpcy5zdGF0ZSwgc3R5bGV9KVxuXG4gICAgaWYgKGN1c3RvbVN0eWxpbmcpIHtcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHN0eWxlLCBjdXN0b21TdHlsaW5nKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNhY2hlKGBzdHlsaW5nRm9yLSR7c3R5bGluZ05hbWV9YCwgc3R5bGUsIGNhY2hlcylcbiAgfVxuXG4gIGljb25Gb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgY29uc3Qge3RvZ2dsZU9wdGlvbnN9ID0gdGhpcy5wcm9wcyB8fCB7fVxuICAgIGNvbnN0IHRvZ2dsZWQgPSB0aGlzLmdldFRvZ2dsZWQoKVxuXG4gICAgaWYgKHRvZ2dsZU9wdGlvbnMgJiYgKG9wdGlvbi52YWx1ZSBpbiB0b2dnbGVkKSkge1xuICAgICAgY29uc3QgdG9nZ2xlZFZhbHVlID0gdG9nZ2xlZFtvcHRpb24udmFsdWVdXG4gICAgICBjb25zdCB0b2dnbGVkT3B0aW9uID0gdG9nZ2xlT3B0aW9ucy5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50LnZhbHVlID09IHRvZ2dsZWRWYWx1ZSlcblxuICAgICAgaWYgKCF0b2dnbGVkT3B0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCBhIHRvZ2dsZSBvcHRpb24gZm9yIHZhbHVlOiAke3RvZ2dsZWRWYWx1ZX1gKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdG9nZ2xlZE9wdGlvbi5pY29uXG4gICAgfVxuICB9XG5cbiAgcHJlc2VudE9wdGlvbiA9IChvcHRpb24sIG1vZGUpID0+IHtcbiAgICBjb25zdCB7b3B0aW9uQ29udGVudCwgdG9nZ2xlT3B0aW9uc30gPSB0aGlzLnByb3BzIHx8IHt9XG4gICAgY29uc3QgdG9nZ2xlZCA9IHRoaXMuZ2V0VG9nZ2xlZCgpXG4gICAgY29uc3QgaWNvbiA9IHRoaXMuaWNvbkZvck9wdGlvbihvcHRpb24pXG4gICAgY29uc3QgdG9nZ2xlVmFsdWUgPSB0b2dnbGVkW29wdGlvbi52YWx1ZV1cbiAgICBjb25zdCB0b2dnbGVPcHRpb24gPSB0b2dnbGVPcHRpb25zPy5maW5kKCh0b2dnbGVPcHRpb25JKSA9PiB0b2dnbGVPcHRpb25JLnZhbHVlID09IHRvZ2dsZVZhbHVlKVxuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5nZXRDdXJyZW50T3B0aW9uVmFsdWVzKCkuc29tZSgodmFsdWUpID0+IHZhbHVlID09IG9wdGlvbi52YWx1ZSlcbiAgICBsZXQgc3R5bGVcbiAgICBsZXQgY29udGVudE5vZGVcblxuICAgIGlmIChtb2RlID09IFwiY3VycmVudFwiKSB7XG4gICAgICBzdHlsZSA9IHRoaXMuc3R5bGluZ0ZvcihcImN1cnJlbnRPcHRpb25QcmVzZW50YXRpb25UZXh0XCIsIHtmbGV4OiAxLCB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwifSlcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGUgPSB0aGlzLnN0eWxpbmdGb3IoXCJvcHRpb25QcmVzZW50YXRpb25UZXh0XCIsIHtmbGV4OiAxLCB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwifSlcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgZGF0YVNldD17dGhpcy5jYWNoZShcInByZXNlbnRPcHRpb25WaWV3RGF0YVNldFwiLCB7XG4gICAgICAgICAgdGV4dDogb3B0aW9uLnRleHQsXG4gICAgICAgICAgdG9nZ2xlSWNvbjogdG9nZ2xlT3B0aW9uPy5pY29uLFxuICAgICAgICAgIHRvZ2dsZVZhbHVlOiB0b2dnbGVPcHRpb24/LnZhbHVlLFxuICAgICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWVcbiAgICAgICAgfSwgW29wdGlvbi50ZXh0LCBvcHRpb24udmFsdWUsIHRvZ2dsZU9wdGlvbj8uaWNvbiwgdG9nZ2xlT3B0aW9uPy52YWx1ZV0pfVxuICAgICAgICBzdHlsZT17dGhpcy5jYWNoZShcIm9wdGlvblByZXNlbnRhdGlvblN0eWxlXCIsIHtmbGV4RGlyZWN0aW9uOiBcInJvd1wiLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwifSl9XG4gICAgICAgIHRlc3RJRD1cIm9wdGlvbi1wcmVzZW50YXRpb25cIlxuICAgICAgPlxuICAgICAgICB7dG9nZ2xlT3B0aW9ucyAmJiAhKG9wdGlvbi52YWx1ZSBpbiB0b2dnbGVkKSAmJlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBzdHlsZT17dGhpcy5jYWNoZShcInRvZ2dsZUljb25QbGFjZWhvbGRlclN0eWxlXCIsIHt3aWR0aDogMjB9KX1cbiAgICAgICAgICAgIHRlc3RJRD1cInRvZ2dsZS1pY29uLXBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIHt0b2dnbGVPcHRpb25zICYmIChvcHRpb24udmFsdWUgaW4gdG9nZ2xlZCkgJiZcbiAgICAgICAgICA8VmlldyBzdHlsZT17dGhpcy5jYWNoZShcInRvZ2dsZUljb25Db250YWluZXJTdHlsZVwiLCB7YWxpZ25JdGVtczogXCJjZW50ZXJcIiwganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsIHdpZHRoOiAyMH0pfT5cbiAgICAgICAgICAgIDxGb250QXdlc29tZUljb25cbiAgICAgICAgICAgICAgbmFtZT17aWNvbn1cbiAgICAgICAgICAgICAgdGVzdElEPVwidG9nZ2xlLWljb25cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIH1cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvbkNvbnRlbnQpIHtcbiAgICAgICAgICAgIGNvbnRlbnROb2RlID0gb3B0aW9uQ29udGVudCh7aWNvbiwgbW9kZSwgb3B0aW9uLCBzZWxlY3RlZCwgdG9nZ2xlT3B0aW9uLCB0b2dnbGVWYWx1ZSwgdG9nZ2xlZH0pXG4gICAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IFwiY3VycmVudFwiICYmIG9wdGlvbi5jdXJyZW50Q29udGVudCkge1xuICAgICAgICAgICAgY29udGVudE5vZGUgPSBvcHRpb24uY3VycmVudENvbnRlbnQoKVxuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLmNvbnRlbnQpIHtcbiAgICAgICAgICAgIGNvbnRlbnROb2RlID0gb3B0aW9uLmNvbnRlbnQoKVxuICAgICAgICAgIH0gZWxzZSBpZiAoXCJodG1sXCIgaW4gb3B0aW9uICYmIFBsYXRmb3JtLk9TICE9IFwid2ViXCIpIHtcbiAgICAgICAgICAgIGNvbnRlbnROb2RlID0gPFJlbmRlckh0bWwgc291cmNlPXt7aHRtbDogZGlnZyhvcHRpb24sIFwiaHRtbFwiKX19IC8+XG4gICAgICAgICAgfSBlbHNlIGlmIChcImh0bWxcIiBpbiBvcHRpb24gJiYgUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIikge1xuICAgICAgICAgICAgY29udGVudE5vZGUgPSA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7X19odG1sOiBkaWdnKG9wdGlvbiwgXCJodG1sXCIpfX0gLz5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGVudE5vZGUgPSAoXG4gICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgICAgICAgIHRlc3RJRD1cIm9wdGlvbi1wcmVzZW50YXRpb24tdGV4dFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7b3B0aW9uLnRleHR9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3RoaXMuY2FjaGUoXCJvcHRpb25QcmVzZW50YXRpb25Db250ZW50U3R5bGVcIiwge2ZsZXg6IDF9KX0+XG4gICAgICAgICAgICAgICAge2NvbnRlbnROb2RlfVxuICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgIHtvcHRpb24ucmlnaHQgJiZcbiAgICAgICAgICAgICAgICA8VmlldyBzdHlsZT17dGhpcy5jYWNoZShcIm9wdGlvblByZXNlbnRhdGlvblJpZ2h0U3R5bGVcIiwge2FsaWduSXRlbXM6IFwiY2VudGVyXCIsIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLCBtYXJnaW5MZWZ0OiA4fSl9PlxuICAgICAgICAgICAgICAgICAge29wdGlvbi5yaWdodH1cbiAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgIClcbiAgICAgICAgfSkoKX1cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICBhc3luYyBzZXRDdXJyZW50RnJvbUdpdmVuVmFsdWVzKCkge1xuICAgIGNvbnN0IHtvcHRpb25zLCB2YWx1ZXN9ID0gdGhpcy5wXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3B0aW9ucyh7cGFnZTogdGhpcy5nZXRBY3RpdmVQYWdlKCksIHZhbHVlc30pXG4gICAgY29uc3Qge29wdGlvbnM6IGN1cnJlbnRPcHRpb25zfSA9IHRoaXMucGFyc2VPcHRpb25zUmVzdWx0KHJlc3VsdClcbiAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gY3VycmVudE9wdGlvbnM/Lm1hcCgoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSlcbiAgICBjb25zdCBzdGF0ZVZhbHVlcyA9IHRoaXMucy5jdXJyZW50T3B0aW9ucz8ubWFwKChjdXJyZW50T3B0aW9uKSA9PiBjdXJyZW50T3B0aW9uLnZhbHVlKVxuXG4gICAgaWYgKGFueXRoaW5nRGlmZmVyZW50KGN1cnJlbnRWYWx1ZXMsIHN0YXRlVmFsdWVzKSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7Y3VycmVudE9wdGlvbnN9KVxuICAgIH1cbiAgfVxufSkpXG4iXX0=
|
|
1108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VsZWN0L2luZGV4LmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQTtBQUNwRSxPQUFPLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDbEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxJQUFJLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDekUsT0FBTyxLQUFLLEVBQUMsRUFBQyxJQUFJLEVBQUMsU0FBUyxFQUFDLE1BQU0sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUNqRCxPQUFPLEVBQUMsY0FBYyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBQ3hGLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQTtBQUMvQixPQUFPLGVBQWUsTUFBTSx1Q0FBdUMsQ0FBQTtBQUNuRSxPQUFPLGNBQWMsTUFBTSxtREFBbUQsQ0FBQTtBQUM5RSxPQUFPLGdCQUFnQixNQUFNLHFEQUFxRCxDQUFBO0FBQ2xGLE9BQU8sSUFBSSxNQUFNLHNDQUFzQyxDQUFBO0FBQ3ZELE9BQU8sTUFBTSxNQUFNLFVBQVUsQ0FBQTtBQUM3QixPQUFPLFdBQVcsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN4QyxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUE7QUFDbEMsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUE7QUFDN0MsT0FBTyxVQUFVLE1BQU0sMEJBQTBCLENBQUE7QUFDakQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUNuQyxPQUFPLGdCQUFnQixNQUFNLHVCQUF1QixDQUFBO0FBQ3BELE9BQU8sZUFBZSxNQUFNLHFDQUFxQyxDQUFBO0FBRWpFLE1BQU0sTUFBTSxHQUFHLEVB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QUFjLEVBQUUsRUFBRSxFQUFDLENBQUMsQ0FBQTtZQUNyQyxDQUFDO1lBRUQsT0FBTTtRQUNSLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUNsRSxNQUFNLEVBQUMsT0FBTyxFQUFFLGNBQWMsRUFBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNqRSxNQUFNLGFBQWEsR0FBRyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDakYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFdEYsSUFBSSxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUMsY0FBYyxFQUFDLENBQUMsQ0FBQTtRQUNqQyxDQUFDO0lBQ0gsQ0FBQztDQUNGLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthbnl0aGluZ0RpZmZlcmVudH0gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL2J1aWxkL2RpZmYtdXRpbHNcIlxuaW1wb3J0IENvbmZpZyBmcm9tIFwiLi4vY29uZmlnLmpzXCJcbmltcG9ydCB7ZGlnLGRpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IHtEaW1lbnNpb25zLFBsYXRmb3JtLFByZXNzYWJsZSxUZXh0SW5wdXQsVmlld30gZnJvbSBcInJlYWN0LW5hdGl2ZVwiXG5pbXBvcnQgUmVhY3Qse21lbW8sdXNlRWZmZWN0LHVzZVJlZn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7c2hhcGVDb21wb25lbnQsU2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9zaGFwZS1jb21wb25lbnQuanNcIlxuaW1wb3J0IGRlYm91bmNlIGZyb20gXCJkZWJvdW5jZVwiXG5pbXBvcnQgRm9udEF3ZXNvbWVJY29uIGZyb20gXCJyZWFjdC1uYXRpdmUtdmVjdG9yLWljb25zL0ZvbnRBd2Vzb21lXCJcbmltcG9ydCBpZEZvckNvbXBvbmVudCBmcm9tIFwiQGthc3Blcm5qL2FwaS1tYWtlci9idWlsZC9pbnB1dHMvaWQtZm9yLWNvbXBvbmVudFwiXG5pbXBvcnQgbmFtZUZvckNvbXBvbmVudCBmcm9tIFwiQGthc3Blcm5qL2FwaS1tYWtlci9idWlsZC9pbnB1dHMvbmFtZS1mb3ItY29tcG9uZW50XCJcbmltcG9ydCBUZXh0IGZyb20gXCJAa2FzcGVybmovYXBpLW1ha2VyL2J1aWxkL3V0aWxzL3RleHRcIlxuaW1wb3J0IE9wdGlvbiBmcm9tIFwiLi9vcHRpb25cIlxuaW1wb3J0IE9wdGlvbkdyb3VwIGZyb20gXCIuL29wdGlvbi1ncm91cFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBwcm9wVHlwZXNFeGFjdCBmcm9tIFwicHJvcC10eXBlcy1leGFjdFwiXG5pbXBvcnQgUmVuZGVySHRtbCBmcm9tIFwicmVhY3QtbmF0aXZlLXJlbmRlci1odG1sXCJcbmltcG9ydCB7UG9ydGFsfSBmcm9tIFwiY29uam9pbnRtZW50XCJcbmltcG9ydCB1c2VFdmVudExpc3RlbmVyIGZyb20gXCJ5YS11c2UtZXZlbnQtbGlzdGVuZXJcIlxuaW1wb3J0IHVzZVByZXNzT3V0c2lkZSBmcm9tIFwib3V0c2lkZS1leWUvYnVpbGQvdXNlLXByZXNzLW91dHNpZGVcIlxuXG5jb25zdCBzdHlsZXMgPSB7fVxuY29uc3QgZGF0YVNldHMgPSB7fVxuY29uc3QgcGFnaW5hdGlvbkJ1dHRvbkRhdGFTZXRzID0ge31cbmNvbnN0IHBhZ2luYXRpb25CdXR0b25TdHlsZXMgPSB7fVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RUb2dnbGVPcHRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpY29uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdE9wdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd8bnVtYmVyfSB2YWx1ZVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFt0ZXh0XVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtjb250ZW50XVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtjdXJyZW50Q29udGVudF1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2Rpc2FibGVkXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtodG1sXVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtyaWdodF1cbiAqXG4gKiBBZGRpdGlvbmFsIG9wdGlvbiBwcm9wcyBhcmUgYWxsb3dlZDsgSGF5YVNlbGVjdCBvbmx5IHVzZXMgdGhlIGtleXMgYWJvdmUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0T3B0aW9uc1Jlc3VsdFxuICogQHByb3BlcnR5IHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn0gb3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFt0b3RhbENvdW50XVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwYWdlXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwYWdlU2l6ZV1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RQcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFthdHRyaWJ1dGVdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NsYXNzTmFtZV1cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbZGVmYXVsdFRvZ2dsZWRdXG4gKiBAcHJvcGVydHkge3N0cmluZ3xudW1iZXJ9IFtkZWZhdWx0VmFsdWVdXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZ3xudW1iZXI+fSBbZGVmYXVsdFZhbHVlc11cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59IFtkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNdXG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW2lkXVxuICogQHByb3BlcnR5IHtvYmplY3R9IFttb2RlbF1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbXVsdGlwbGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbmFtZV1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogaW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbbm9PcHRpb25zVGV4dF1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oaW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnQ9KTogdm9pZH0gW29uQmx1cl1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oaW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnQ9KTogdm9pZH0gW29uQ2hhbmdlXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihBcnJheTxzdHJpbmd8bnVtYmVyPj0pOiB2b2lkfSBbb25DaGFuZ2VWYWx1ZV1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oaW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnQ9KTogdm9pZH0gW29uRm9jdXNdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IHZvaWR9IFtvbk9wdGlvbnNDbG9zZWRdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKG9iamVjdCk6IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW29wdGlvbkNvbnRlbnRdXG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fGZ1bmN0aW9uKCk6IChBcnJheTxIYXlhU2VsZWN0T3B0aW9uPnxIYXlhU2VsZWN0T3B0aW9uc1Jlc3VsdCl9IG9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gb3B0aW9uc0Fic29sdXRlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG9wdGlvbnNQb3J0YWxcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbb3B0aW9uc1dpZHRoXVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtwbGFjZWhvbGRlcl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3JdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NlbGVjdGVkSG92ZXJCYWNrZ3JvdW5kQ29sb3JdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHNlYXJjaFxuICogQHByb3BlcnR5IHtvYmplY3R9IFtzdHlsZXNdXG4gKiBAcHJvcGVydHkge29iamVjdH0gW3RvZ2dsZWRdXG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RUb2dnbGVPcHRpb24+fSBbdG9nZ2xlT3B0aW9uc11cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdHJhbnNwYXJlbnRcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nfG51bWJlcj59IFt2YWx1ZXNdXG4gKi9cblxuLyoqIEByZXR1cm5zIHtzdHJpbmd9ICovXG5jb25zdCBuYW1lRm9yQ29tcG9uZW50V2l0aE11bHRpcGxlID0gKGNvbXBvbmVudCkgPT4ge1xuICBsZXQgbmFtZSA9IG5hbWVGb3JDb21wb25lbnQoY29tcG9uZW50KVxuXG4gIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gY29tcG9uZW50LmdldEN1cnJlbnRPcHRpb25zKClcblxuICBpZiAoY29tcG9uZW50LnByb3BzLm11bHRpcGxlICYmIG5hbWUgJiYgY3VycmVudE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgIG5hbWUgKz0gXCJbXVwiXG4gIH1cblxuICByZXR1cm4gbmFtZVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFBhZ2luYXRpb25QYWdlQnV0dG9uUHJvcHNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWN0aXZlXG4gKiBAcHJvcGVydHkge251bWJlcn0gcGFnZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihudW1iZXIpOiB2b2lkfSBvblBhZ2VTZWxlY3RlZFxuICovXG5cbi8qKiBAZXh0ZW5kcyB7U2hhcGVDb21wb25lbnQ8UGFnaW5hdGlvblBhZ2VCdXR0b25Qcm9wcz59ICovXG5jb25zdCBQYWdpbmF0aW9uUGFnZUJ1dHRvbiA9IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgUGFnaW5hdGlvblBhZ2VCdXR0b24gZXh0ZW5kcyBTaGFwZUNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSBwcm9wVHlwZXNFeGFjdCh7XG4gICAgYWN0aXZlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIHBhZ2U6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICBvblBhZ2VTZWxlY3RlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICB9KVxuXG4gIC8qKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudCAqL1xuICBvblByZXNzID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQ/LigpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uPy4oKVxuXG4gICAgdGhpcy5wLm9uUGFnZVNlbGVjdGVkKHRoaXMucC5wYWdlKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHthY3RpdmUsIHBhZ2V9ID0gdGhpcy5wXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFByZXNzYWJsZVxuICAgICAgICBkYXRhU2V0PXtwYWdpbmF0aW9uQnV0dG9uRGF0YVNldHNbYHBhZ2luYXRpb25QYWdlLSR7cGFnZX1gXSB8fD0ge2NsYXNzOiBcInBhZ2luYXRpb24tcGFnZVwiLCBwYWdlfX1cbiAgICAgICAgZGlzYWJsZWQ9e2FjdGl2ZX1cbiAgICAgICAgb25QcmVzcz17dGhpcy50dC5vblByZXNzfVxuICAgICAgICBzdHlsZT17cGFnaW5hdGlvbkJ1dHRvblN0eWxlc1tgcGFnaW5hdGlvblBhZ2VCdXR0b24tJHthY3RpdmV9YF0gfHw9IHtcbiAgICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogYWN0aXZlID8gXCIjMGYxNzJhXCIgOiBcIiNlMmU4ZjBcIixcbiAgICAgICAgICBib3JkZXJSYWRpdXM6IDk5OSxcbiAgICAgICAgICBoZWlnaHQ6IDI4LFxuICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgIG1hcmdpbkhvcml6b250YWw6IDQsXG4gICAgICAgICAgd2lkdGg6IDI4XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxUZXh0XG4gICAgICAgICAgc3R5bGU9e3BhZ2luYXRpb25CdXR0b25TdHlsZXNbYHBhZ2luYXRpb25QYWdlVGV4dC0ke2FjdGl2ZX1gXSB8fD0ge1xuICAgICAgICAgICAgY29sb3I6IGFjdGl2ZSA/IFwiI2Y4ZmFmY1wiIDogXCIjMzM0MTU1XCIsXG4gICAgICAgICAgICBmb250U2l6ZTogMTIsXG4gICAgICAgICAgICBmb250V2VpZ2h0OiA2MDBcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge3BhZ2V9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvUHJlc3NhYmxlPlxuICAgIClcbiAgfVxufSkpXG5cbi8qKiBAZXh0ZW5kcyB7U2hhcGVDb21wb25lbnQ8SGF5YVNlbGVjdFByb3BzPn0gKi9cbmV4cG9ydCBkZWZhdWx0IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgSGF5YVNlbGVjdCBleHRlbmRzIFNoYXBlQ29tcG9uZW50IHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgbm9PcHRpb25zVGV4dDogbnVsbCxcbiAgICBvbkJsdXI6IG51bGwsXG4gICAgb25Gb2N1czogbnVsbCxcbiAgICBvcHRpb25zQWJzb2x1dGU6IHRydWUsXG4gICAgb3B0aW9uc1BvcnRhbDogdHJ1ZSxcbiAgICBvcHRpb25zV2lkdGg6IG51bGwsXG4gICAgc2VhcmNoOiBmYWxzZSxcbiAgICB0cmFuc3BhcmVudDogZmFsc2VcbiAgfVxuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSBwcm9wVHlwZXNFeGFjdCh7XG4gICAgYXR0cmlidXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkZWZhdWx0VG9nZ2xlZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgICBkZWZhdWx0VmFsdWVzOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgaWQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIG1vZGVsOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbm9PcHRpb25zVGV4dDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25DaGFuZ2VWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25PcHRpb25zQ2xvc2VkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvcHRpb25Db250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgICAgIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIGNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBjdXJyZW50Q29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgaHRtbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgcmlnaHQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgICB0ZXh0OiBQcm9wVHlwZXMubm9kZSxcbiAgICAgICAgdmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKS5pc1JlcXVpcmVkXG4gICAgICB9KSksXG4gICAgICBQcm9wVHlwZXMuZnVuY1xuICAgIF0pLmlzUmVxdWlyZWQsXG4gICAgb3B0aW9uc0Fic29sdXRlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIG9wdGlvbnNQb3J0YWw6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgb3B0aW9uc1dpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMubm9kZSxcbiAgICBzZWxlY3RlZEJhY2tncm91bmRDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWxlY3RlZEhvdmVyQmFja2dyb3VuZENvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlYXJjaDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBzdHlsZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgdG9nZ2xlZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB0b2dnbGVPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaWNvbjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbiAgICB9KSksXG4gICAgdHJhbnNwYXJlbnQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgdmFsdWVzOiBQcm9wVHlwZXMuYXJyYXlcbiAgfSlcblxuICBjYWxsT3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4gPSBmYWxzZVxuICBzZWFyY2hUZXh0VmFsdWUgPSBcIlwiXG4gIHQgPSBDb25maWcuY3VycmVudCgpLmdldFVzZVRyYW5zbGF0ZSgpKCkudFxuICB3aW5kb3dXaWR0aCA9IERpbWVuc2lvbnMuZ2V0KFwid2luZG93XCIpLndpZHRoXG4gIHdpbmRvd0hlaWdodCA9IERpbWVuc2lvbnMuZ2V0KFwid2luZG93XCIpLmhlaWdodFxuXG4gIHNldHVwKCkge1xuICAgIGNvbnN0IHt0fSA9IENvbmZpZy5jdXJyZW50KCkuZ2V0VXNlVHJhbnNsYXRlKCkoKVxuXG4gICAgdGhpcy50ID0gdFxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy52YWx1ZXMpKSB7XG4gICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMucHJvcHMudmFsdWVzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkhheWFTZWxlY3Q6IFVuZGVmaW5lZCBnaXZlbiBhcyB2YWx1ZVwiKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXRJbnN0YW5jZSh7XG4gICAgICBlbmRPZlNlbGVjdFJlZjogdXNlUmVmKCksXG4gICAgICBvcHRpb25zQ29udGFpbmVyUmVmOiB1c2VSZWYoKSxcbiAgICAgIHBhZ2VJbnB1dFJlZjogdXNlUmVmKCksXG4gICAgICBzZWFyY2hUZXh0SW5wdXRSZWY6IHVzZVJlZigpLFxuICAgICAgc2VsZWN0Q29udGFpbmVyUmVmOiB1c2VSZWYoKVxuICAgIH0pXG4gICAgdGhpcy51c2VTdGF0ZXMoe1xuICAgICAgY3VycmVudE9wdGlvbnM6ICgpID0+IHRoaXMuZGVmYXVsdEN1cnJlbnRPcHRpb25zKCksXG4gICAgICBzZWxlY3RDb250YWluZXJMYXlvdXQ6IG51bGwsXG4gICAgICBlbmRPZlNlbGVjdExheW91dDogbnVsbCxcbiAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgIGxvYWRlZE9wdGlvbnM6ICgpID0+IHRoaXMuZGVmYXVsdExvYWRlZE9wdGlvbnMoKSxcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBwYWdlSW5wdXRBY3RpdmU6IGZhbHNlLFxuICAgICAgcGFnZUlucHV0VmFsdWU6IFwiXCIsXG4gICAgICBwYWdlU2l6ZTogbnVsbCxcbiAgICAgIG9wZW5lZDogZmFsc2UsXG4gICAgICBvcHRpb25zQ29udGFpbmVyTGF5b3V0OiBudWxsLFxuICAgICAgb3B0aW9uc1BsYWNlbWVudDogdW5kZWZpbmVkLFxuICAgICAgb3B0aW9uc1RvcDogdW5kZWZpbmVkLFxuICAgICAgb3B0aW9uc1Zpc2liaWxpdHk6IHVuZGVmaW5lZCxcbiAgICAgIG9wdGlvbnNXaWR0aDogdW5kZWZpbmVkLFxuICAgICAgc2Nyb2xsTGVmdDogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IDogbnVsbCxcbiAgICAgIHNjcm9sbFRvcDogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgOiBudWxsLFxuICAgICAgdG90YWxDb3VudDogbnVsbCxcbiAgICAgIHRvZ2dsZWQ6ICgpID0+IHRoaXMuZGVmYXVsdFRvZ2dsZWQoKVxuICAgIH0pXG5cbiAgICBjb25zdCB3aW5kb3dUYXJnZXQgPSBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiICYmIHR5cGVvZiB3aW5kb3cgIT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IG51bGxcblxuICAgIHVzZUV2ZW50TGlzdGVuZXIoRGltZW5zaW9ucywgXCJjaGFuZ2VcIiwgdGhpcy50dC5vbkRpbWVuc2lvbnNDaGFuZ2UpXG4gICAgdXNlUHJlc3NPdXRzaWRlKHRoaXMudHQub3B0aW9uc0NvbnRhaW5lclJlZiwgdGhpcy50dC5vblByZXNzT3V0c2lkZU9wdGlvbnMpXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3dUYXJnZXQsIFwicmVzaXplXCIsIHRoaXMudHQub25Bbnl0aGluZ1Jlc2l6ZWREZWJvdW5jZWQpXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3dUYXJnZXQsIFwic2Nyb2xsXCIsIHRoaXMudHQub25Bbnl0aGluZ1Njcm9sbGVkRGVib3VuY2VkKVxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnR0LmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiAmJiB0aGlzLnMub3B0aW9uc0NvbnRhaW5lckxheW91dCkge1xuICAgICAgICB0aGlzLmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiA9IGZhbHNlXG4gICAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4oKVxuICAgICAgfVxuICAgIH0sIFt0aGlzLnR0LmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiwgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXRdKVxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRPcHRpb25JZHMgPSB0aGlzLnMuY3VycmVudE9wdGlvbnM/Lm1hcCgoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSlcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy52YWx1ZXMpICYmIGFueXRoaW5nRGlmZmVyZW50KGN1cnJlbnRPcHRpb25JZHMsIHRoaXMucHJvcHMudmFsdWVzKSAmJiB0eXBlb2YgdGhpcy5wcm9wcy5vcHRpb25zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLnNldEN1cnJlbnRGcm9tR2l2ZW5WYWx1ZXMoKVxuICAgICAgfVxuICAgIH0sIFt0aGlzLnByb3BzLnZhbHVlc10pXG4gIH1cblxuICB0cmFuc2xhdGUobXNnSUQpIHtcbiAgICBpZiAobXNnSUQuc3RhcnRzV2l0aChcIi5cIikpIHtcbiAgICAgIHJldHVybiB0aGlzLnQoYGhheWFfc2VsZWN0JHttc2dJRH1gKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy50KG1zZ0lEKVxuICAgIH1cbiAgfVxuXG4gIGRlZmF1bHRDdXJyZW50T3B0aW9ucygpIHtcbiAgICBjb25zdCB7ZGVmYXVsdFZhbHVlLCBkZWZhdWx0VmFsdWVzLCB2YWx1ZXN9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHtvcHRpb25zfSA9IHRoaXMucFxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpKSByZXR1cm4gW11cblxuICAgIHJldHVybiBvcHRpb25zLmZpbHRlcigoe3ZhbHVlfSkgPT5cbiAgICAgIChkZWZhdWx0VmFsdWUgJiYgdmFsdWUgPT0gZGVmYXVsdFZhbHVlKSB8fFxuICAgICAgICAoZGVmYXVsdFZhbHVlcyAmJiBkZWZhdWx0VmFsdWVzLmluY2x1ZGVzKHZhbHVlKSkgfHxcbiAgICAgICAgKHZhbHVlcyAmJiB2YWx1ZXMuaW5jbHVkZXModmFsdWUpKVxuICAgIClcbiAgfVxuXG4gIGRlZmF1bHRMb2FkZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IHtvcHRpb25zfSA9IHRoaXMucFxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSBvZiBvcHRpb25zOiAke3R5cGVvZiBvcHRpb25zfWApXG4gIH1cblxuICAvKiogQHJldHVybnMge251bWJlcn0gKi9cbiAgZ2V0QWN0aXZlUGFnZSA9ICgpID0+IHRoaXMucy5wYWdlIHx8IDFcblxuICAvKipcbiAgICogQHBhcmFtIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPnxIYXlhU2VsZWN0T3B0aW9uc1Jlc3VsdH0gcmVzdWx0XG4gICAqIEByZXR1cm5zIHtIYXlhU2VsZWN0T3B0aW9uc1Jlc3VsdH1cbiAgICovXG4gIHBhcnNlT3B0aW9uc1Jlc3VsdChyZXN1bHQpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSByZXR1cm4ge29wdGlvbnM6IHJlc3VsdH1cblxuICAgIGlmIChyZXN1bHQgJiYgQXJyYXkuaXNBcnJheShyZXN1bHQub3B0aW9ucykpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGlvbnM6IHJlc3VsdC5vcHRpb25zLFxuICAgICAgICB0b3RhbENvdW50OiByZXN1bHQudG90YWxDb3VudCxcbiAgICAgICAgcGFnZTogcmVzdWx0LnBhZ2UsXG4gICAgICAgIHBhZ2VTaXplOiByZXN1bHQucGFnZVNpemVcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gb3B0aW9ucyByZXN1bHQ6ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbXNcbiAgICogQHBhcmFtIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn0gcGFyYW1zLm9wdGlvbnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXJhbXMucGFnZV1cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXJhbXMucGFnZVNpemVdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcGFyYW1zLnRvdGFsQ291bnRdXG4gICAqIEByZXR1cm5zIHtudW1iZXJ8bnVsbH1cbiAgICovXG4gIHJlc29sdmVQYWdlU2l6ZSh7b3B0aW9ucywgcGFnZSwgcGFnZVNpemUsIHRvdGFsQ291bnR9KSB7XG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZShwYWdlU2l6ZSkgJiYgcGFnZVNpemUgPiAwKSByZXR1cm4gcGFnZVNpemVcblxuICAgIGlmIChOdW1iZXIuaXNGaW5pdGUodGhpcy5zLnBhZ2VTaXplKSAmJiB0aGlzLnMucGFnZVNpemUgPiAwICYmIHBhZ2UgIT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMucy5wYWdlU2l6ZVxuICAgIH1cblxuICAgIGlmIChOdW1iZXIuaXNGaW5pdGUodG90YWxDb3VudCkgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zKSAmJiBvcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmxlbmd0aFxuICAgIH1cblxuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodGhpcy5zLnBhZ2VTaXplKSAmJiB0aGlzLnMucGFnZVNpemUgPiAwID8gdGhpcy5zLnBhZ2VTaXplIDogbnVsbFxuICB9XG5cbiAgZGVmYXVsdFRvZ2dsZWQgPSAoKSA9PiAoXCJ0b2dnbGVkXCIgaW4gdGhpcy5wcm9wcykgPyB0aGlzLnAudG9nZ2xlZCA6IHRoaXMucHJvcHMuZGVmYXVsdFRvZ2dsZWQgfHwge31cbiAgZ2V0VG9nZ2xlZCA9ICgpID0+IChcInRvZ2dsZWRcIiBpbiB0aGlzLnByb3BzKSA/IHRoaXMucC50b2dnbGVkIDogdGhpcy5zLnRvZ2dsZWRcbiAgZ2V0VmFsdWVzID0gKCkgPT4gKFwidmFsdWVzXCIgaW4gdGhpcy5wcm9wcykgPyB0aGlzLnAudmFsdWVzIDogdGhpcy5zLmN1cnJlbnRPcHRpb25zLm1hcCgoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSlcbiAgZ2V0Q3VycmVudE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgaWYgKFwidmFsdWVzXCIgaW4gdGhpcy5wcm9wcyAmJiB0eXBlb2YgdGhpcy5wcm9wcy52YWx1ZXMgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wLnZhbHVlcykgJiYgdGhpcy5wLnZhbHVlcy5sZW5ndGggPT09IDApIHJldHVybiBbXVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLm9wdGlvbnMpICYmIEFycmF5LmlzQXJyYXkodGhpcy5wLnZhbHVlcykpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucC52YWx1ZXMubWFwKCh2YWx1ZSkgPT4gdGhpcy5wLm9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT0gdmFsdWUpKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnMubG9hZGVkT3B0aW9ucyAmJiBBcnJheS5pc0FycmF5KHRoaXMucC52YWx1ZXMpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnAudmFsdWVzLm1hcCgodmFsdWUpID0+IHtcbiAgICAgICAgICBsZXQgZm91bmRPcHRpb24gPSB0aGlzLnMubG9hZGVkT3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PSB2YWx1ZSlcblxuICAgICAgICAgIGlmICghZm91bmRPcHRpb24pIHtcbiAgICAgICAgICAgIGZvdW5kT3B0aW9uID0gdGhpcy5zLmN1cnJlbnRPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09IHZhbHVlKVxuXG4gICAgICAgICAgICBpZiAoIWZvdW5kT3B0aW9uKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgYENvdWxkbid0IGZpbmQgb3B0aW9uOiAke3ZhbHVlfSBpbiBsb2FkZWRPcHRpb25zIG9yIHN0YXRlIGN1cnJlbnRPcHRpb25zYCxcbiAgICAgICAgICAgICAgICB7c3RhdGVMb2FkZWRPcHRpb25zOiB0aGlzLnMubG9hZGVkT3B0aW9ucywgc3RhdGVDdXJyZW50T3B0aW9uczogdGhpcy5zLmN1cnJlbnRPcHRpb25zLCBwcm9wc09wdGlvbnM6IHRoaXMucHJvcHMub3B0aW9uc31cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmb3VuZE9wdGlvblxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vcHRpb25zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAvLyBPcHRpb25zIGhhdmVuJ3QgYmVlbiBsb2FkZWQgeWV0LlxuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoaXMucC52YWx1ZXMpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnAudmFsdWVzLm1hcCgodmFsdWUpID0+ICh7dmFsdWV9KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zLmN1cnJlbnRPcHRpb25zXG4gIH1cblxuICBnZXRDdXJyZW50T3B0aW9uVmFsdWVzKCkge1xuICAgIGlmIChcInZhbHVlc1wiIGluIHRoaXMucHJvcHMpIHtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucC52YWx1ZXMpID8gdGhpcy5wLnZhbHVlcyA6IFtdXG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudE9wdGlvbnMgPSB0aGlzLmdldEN1cnJlbnRPcHRpb25zKClcblxuICAgIGlmICghY3VycmVudE9wdGlvbnMpIHJldHVybiBbXVxuXG4gICAgcmV0dXJuIGN1cnJlbnRPcHRpb25zXG4gICAgICAubWFwKChvcHRpb24pID0+IG9wdGlvbj8udmFsdWUpXG4gICAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlICE9IFwidW5kZWZpbmVkXCIpXG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7YXR0cmlidXRlLCBkZWZhdWx0VmFsdWUsIGRlZmF1bHRWYWx1ZXMsIGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9ucywgbW9kZWwsIG9wdGlvbnN9ID0gdGhpcy5wcm9wc1xuXG4gICAgaWYgKCgoZGVmYXVsdFZhbHVlIHx8IGRlZmF1bHRWYWx1ZXMgfHwgZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zKSB8fCAoYXR0cmlidXRlICYmIG1vZGVsKSkgJiYgdHlwZW9mIG9wdGlvbnMgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLmxvYWREZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNDYWxsYmFjaygpXG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge31cblxuICAgIGlmIChcInRvZ2dsZWRcIiBpbiB0aGlzLnByb3BzKSB7XG4gICAgICBjb25zdCBuZXdUb2dnbGVkID0gdGhpcy5wLnRvZ2dsZWRcblxuICAgICAgaWYgKGFueXRoaW5nRGlmZmVyZW50KHRoaXMuc3RhdGUudG9nZ2xlZCwgbmV3VG9nZ2xlZCkpIHtcbiAgICAgICAgbmV3U3RhdGUudG9nZ2xlZCA9IG5ld1RvZ2dsZWRcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMobmV3U3RhdGUpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUpXG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtlbmRPZlNlbGVjdFJlZn0gPSB0aGlzLnR0XG4gICAgY29uc3Qge3RyYW5zcGFyZW50fSA9IHRoaXMucFxuICAgIGNvbnN0IHtjbGFzc05hbWUsIHBsYWNlaG9sZGVyLCB0b2dnbGVPcHRpb25zfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7b3BlbmVkLCBvcHRpb25zUGxhY2VtZW50fSA9IHRoaXMuc1xuICAgIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gdGhpcy5nZXRDdXJyZW50T3B0aW9ucygpXG4gICAgY29uc3QgaWQgPSBpZEZvckNvbXBvbmVudCh0aGlzKVxuXG4gICAgY29uc3Qgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwgPSB7Li4udGhpcy5zdHlsaW5nRm9yKFwic2VsZWN0Q29udGFpbmVyXCIsIHtcbiAgICAgIGZsZXhEaXJlY3Rpb246IFwicm93XCIsXG4gICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0cmFuc3BhcmVudCA/IHVuZGVmaW5lZCA6IFwiI2ZmZlwiLFxuICAgICAgYm9yZGVyOiB0cmFuc3BhcmVudCA/IHVuZGVmaW5lZCA6IFwiMXB4IHNvbGlkICM5OTlcIixcbiAgICAgIGJvcmRlclJhZGl1czogdHJhbnNwYXJlbnQgPyB1bmRlZmluZWQgOiA0LFxuICAgICAgY29sb3I6IFwiIzAwMFwiLFxuICAgICAgY3Vyc29yOiBcInBvaW50ZXJcIixcbiAgICAgIHBhZGRpbmdUb3A6IDUsXG4gICAgICBwYWRkaW5nQm90dG9tOiA1LFxuICAgICAgcGFkZGluZ0xlZnQ6IDVcbiAgICB9LCBbdHJhbnNwYXJlbnRdKX1cblxuICAgIGlmIChvcGVuZWQpIHtcbiAgICAgIC8vIFByZXZlbnQgc2VsZWN0IGZyb20gY2hhbmdpbmcgc2l6ZSBvbmNlIHRoZSBjb250ZW50IGlzIHJlcGxhY2VkIHdpdGggc2VhcmNoIHRleHQgb25jZSBvcGVuZWRcbiAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmhlaWdodCA9IHRoaXMucy5oZWlnaHRcblxuICAgICAgY29uc3QgYmFzZUJvcmRlclJhZGl1cyA9IHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclJhZGl1c1xuXG4gICAgICBpZiAob3B0aW9uc1BsYWNlbWVudCA9PSBcImFib3ZlXCIpIHtcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyVG9wTGVmdFJhZGl1cyA9IDBcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSAwXG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzID0gYmFzZUJvcmRlclJhZGl1c1xuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzID0gYmFzZUJvcmRlclJhZGl1c1xuXG4gICAgICAgIGRlbGV0ZSBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJSYWRpdXNcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9uc1BsYWNlbWVudCA9PSBcImJlbG93XCIpIHtcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyVG9wTGVmdFJhZGl1cyA9IGJhc2VCb3JkZXJSYWRpdXNcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSBiYXNlQm9yZGVyUmFkaXVzXG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzID0gMFxuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzID0gMFxuXG4gICAgICAgIGRlbGV0ZSBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJSYWRpdXNcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgZGF0YVNldD17dGhpcy5jYWNoZShcInJvb3RWaWV3RGF0YVNldFwiLCB7XG4gICAgICAgICAgY2xhc3M6IGNsYXNzTmFtZSxcbiAgICAgICAgICBjb21wb25lbnQ6IFwiaGF5YS1zZWxlY3RcIixcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBvcGVuZWQsXG4gICAgICAgICAgb3B0aW9uc1BsYWNlbWVudCxcbiAgICAgICAgICB0b2dnbGVzOiBCb29sZWFuKHRvZ2dsZU9wdGlvbnMpXG4gICAgICAgIH0sIFtjbGFzc05hbWUsIGlkLCBvcGVuZWQsIG9wdGlvbnNQbGFjZW1lbnQsIEJvb2xlYW4odG9nZ2xlT3B0aW9ucyldKX1cbiAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcIm1haW5cIil9XG4gICAgICA+XG4gICAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgICBkYXRhU2V0PXt0aGlzLnNlbGVjdENvbnRhaW5lckRhdGFTZXQgfHw9IHtjbGFzczogXCJzZWxlY3QtY29udGFpbmVyXCJ9fVxuICAgICAgICAgIG9uTGF5b3V0PXt0aGlzLnR0Lm9uU2VsZWN0Q29udGFpbmVyTGF5b3V0fVxuICAgICAgICAgIG9uUHJlc3M9e3RoaXMudHQub25TZWxlY3RDbGlja2VkfVxuICAgICAgICAgIHJlZj17dGhpcy50dC5zZWxlY3RDb250YWluZXJSZWZ9XG4gICAgICAgICAgc3R5bGU9e3NlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsfVxuICAgICAgICA+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIGRhdGFTZXQ9e3RoaXMuY3VycmVudFNlbGVjdGVkRGF0YVNldCB8fD0ge2NsYXNzOiBcImN1cnJlbnQtc2VsZWN0ZWRcIn19XG4gICAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwiY3VycmVudFNlbGVjdGVkXCIsIHRoaXMuY3VycmVudFNlbGVjdGVkU3R5bGUgfHw9IHt3aWR0aDogXCJjYWxjKDEwMCUgLSAyNXB4KVwiLCBmbGV4V3JhcDogXCJ3cmFwXCIsIG92ZXJmbG93OiBcImhpZGRlblwifSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge29wZW5lZCAmJlxuICAgICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgICAgZGF0YVNldD17dGhpcy5zZWFyY2hUZXh0SW5wdXREYXRhU2V0IHx8PSB7Y2xhc3M6IFwic2VhcmNoLXRleHQtaW5wdXRcIn19XG4gICAgICAgICAgICAgICAgb25DaGFuZ2VUZXh0PXt0aGlzLnR0Lm9uQ2hhbmdlU2VhcmNoVGV4dH1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dGhpcy50cmFuc2xhdGUoXCIuc2VhcmNoX2RvdF9kb3RfZG90XCIpfVxuICAgICAgICAgICAgICAgIHJlZj17dGhpcy50dC5zZWFyY2hUZXh0SW5wdXRSZWZ9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcInNlYXJjaFRleHRJbnB1dFwiLCB0aGlzLnNlYXJjaFRleHRJbnB1dFN0eWxlIHx8PSB7XG4gICAgICAgICAgICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgICAgICAgICAgICBib3JkZXI6IDAsXG4gICAgICAgICAgICAgICAgICBvdXRsaW5lOiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuc2VhcmNoVGV4dFZhbHVlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeyFvcGVuZWQgJiZcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7Y3VycmVudE9wdGlvbnMubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgICAgIDxUZXh0IG51bWJlck9mTGluZXM9ezF9IHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJub3RoaW5nU2VsZWN0ZWRcIiwgdGhpcy5ub3RoaW5nU2VsZWN0ZWRTdHlsZSB8fD0ge2NvbG9yOiBcImdyZXlcIn0pfT5cbiAgICAgICAgICAgICAgICAgICAge3BsYWNlaG9sZGVyIHx8IHRoaXMudHJhbnNsYXRlKFwiLm5vdGhpbmdfc2VsZWN0ZWRcIil9XG4gICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9ucy5sZW5ndGggPT0gMCAmJiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiICYmXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgaWQ9e2lkRm9yQ29tcG9uZW50KHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICBuYW1lPXtuYW1lRm9yQ29tcG9uZW50V2l0aE11bHRpcGxlKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge2N1cnJlbnRPcHRpb25zLm1hcCgoY3VycmVudE9wdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAgICAgIGRhdGFTZXQ9e3RoaXMuY3VycmVudE9wdGlvbkRhdGFTZXQgfHw9IHtjbGFzczogXCJjdXJyZW50LW9wdGlvblwifX1cbiAgICAgICAgICAgICAgICAgICAga2V5PXtjdXJyZW50T3B0aW9uLmtleSB8fCBgY3VycmVudC12YWx1ZS0ke2N1cnJlbnRPcHRpb24udmFsdWV9YH1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcImN1cnJlbnRPcHRpb25cIiwge21hcmdpblJpZ2h0OiA2fSl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9uLnR5cGUgPT0gXCJncm91cFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcImN1cnJlbnRPcHRpb25Hcm91cFwiLCB0aGlzLmN1cnJlbnRPcHRpb25Hcm91cFN0eWxlIHx8PSB7Zm9udFdlaWdodDogXCJib2xkXCJ9KX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwiY3VycmVudE9wdGlvbkdyb3VwVGV4dFwiKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9uLnRleHR9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9uLnR5cGUgIT0gXCJncm91cFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtQbGF0Zm9ybS5PUyA9PSBcIndlYlwiICYmIG5hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUodGhpcykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2lkRm9yQ29tcG9uZW50KHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e25hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2RpZ2coY3VycmVudE9wdGlvbiwgXCJ2YWx1ZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnByZXNlbnRPcHRpb24oY3VycmVudE9wdGlvbiwgXCJjdXJyZW50XCIpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBkYXRhU2V0PXt0aGlzLmNoZXZyb25Db250YWluZXJEYXRhU2V0IHx8PSB7Y2xhc3M6IFwiY2hldnJvbi1jb250YWluZXJcIn19XG4gICAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwiY2hldnJvbkNvbnRhaW5lclwiLCB0aGlzLmNoZXZyb25Db250YWluZXJTdHlsZSB8fD0ge1xuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgbWFyZ2luTGVmdDogXCJhdXRvXCIsXG4gICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiA4XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uIG5hbWU9e29wZW5lZCA/IFwiY2hldnJvbi11cFwiIDogXCJjaGV2cm9uLWRvd25cIn0gc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcImNoZXZyb25cIiwgdGhpcy5jaGV2cm9uU3R5bGUgfHw9IHtmb250U2l6ZTogMTJ9KX0gLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIGRhdGFTZXQ9e3RoaXMuZW5kT2ZTZWxlY3REYXRhU2V0IHx8PSB7Y2xhc3M6IFwiZW5kLW9mLXNlbGVjdFwifX1cbiAgICAgICAgICBvbkxheW91dD17dGhpcy50dC5vbkVuZE9mU2VsZWN0TGF5b3V0fVxuICAgICAgICAgIHJlZj17ZW5kT2ZTZWxlY3RSZWZ9XG4gICAgICAgIC8+XG4gICAgICAgIHtvcGVuZWQgJiYgdGhpcy5wLm9wdGlvbnNQb3J0YWwgJiZcbiAgICAgICAgICA8UG9ydGFsPlxuICAgICAgICAgICAge3RoaXMub3B0aW9uc0NvbnRhaW5lcigpfVxuICAgICAgICAgIDwvUG9ydGFsPlxuICAgICAgICB9XG4gICAgICAgIHtvcGVuZWQgJiYgIXRoaXMucC5vcHRpb25zUG9ydGFsICYmXG4gICAgICAgICAgPFZpZXc+XG4gICAgICAgICAgICB7dGhpcy5vcHRpb25zQ29udGFpbmVyKCl9XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICB9XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgZGVmYXVsdFZhbHVlcyAoKSB7XG4gICAgY29uc3Qge2F0dHJpYnV0ZSwgZGVmYXVsdFZhbHVlLCBkZWZhdWx0VmFsdWVzLCBkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnMsIG1vZGVsfSA9IHRoaXMucHJvcHNcblxuICAgIGlmIChkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnMpIHJldHVybiBkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNcbiAgICBpZiAoZGVmYXVsdFZhbHVlKSByZXR1cm4gZGVmYXVsdFZhbHVlXG4gICAgaWYgKGRlZmF1bHRWYWx1ZXMpIHJldHVybiBkZWZhdWx0VmFsdWVzXG5cbiAgICBpZiAoYXR0cmlidXRlICYmIG1vZGVsKSB7XG4gICAgICBpZiAoIShhdHRyaWJ1dGUgaW4gbW9kZWwpKSB0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggYXR0cmlidXRlIG9uICR7bW9kZWwubW9kZWxDbGFzc0RhdGEoKS5uYW1lfTogJHthdHRyaWJ1dGV9YClcblxuICAgICAgcmV0dXJuIG1vZGVsW2F0dHJpYnV0ZV0oKVxuICAgIH1cbiAgfVxuXG4gIGlzQWN0aXZlKCkge1xuICAgIGlmICh0aGlzLnR0LmVuZE9mU2VsZWN0UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBhc3luYyBsb2FkRGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zQ2FsbGJhY2soKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlcyA9IHRoaXMuZGVmYXVsdFZhbHVlcygpXG5cbiAgICBpZiAoIWRlZmF1bHRWYWx1ZXMpIHJldHVyblxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9wcy5vcHRpb25zKHtcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLmdldFNlYXJjaFRleHQoKSxcbiAgICAgIHBhZ2U6IHRoaXMuZ2V0QWN0aXZlUGFnZSgpLFxuICAgICAgdmFsdWVzOiBkZWZhdWx0VmFsdWVzXG4gICAgfSlcblxuICAgIGNvbnN0IHtvcHRpb25zfSA9IHRoaXMucGFyc2VPcHRpb25zUmVzdWx0KHJlc3VsdClcblxuICAgIHRoaXMuc2V0U3RhdGUoe2N1cnJlbnRPcHRpb25zOiB0aGlzLnN0YXRlLmN1cnJlbnRPcHRpb25zLmNvbmNhdChvcHRpb25zKX0pXG4gIH1cblxuICBsb2FkT3B0aW9ucyA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7b3B0aW9uc30gPSB0aGlzLnBcbiAgICBjb25zdCBzZWFyY2hWYWx1ZSA9IHRoaXMuZ2V0U2VhcmNoVGV4dCgpXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZE9wdGlvbnNGcm9tQXJyYXkob3B0aW9ucywgc2VhcmNoVmFsdWUpXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3B0aW9ucyh7c2VhcmNoVmFsdWUsIHBhZ2U6IHRoaXMuZ2V0QWN0aXZlUGFnZSgpfSlcbiAgICBjb25zdCB7b3B0aW9uczogbG9hZGVkT3B0aW9ucywgcGFnZSwgcGFnZVNpemUsIHRvdGFsQ291bnR9ID0gdGhpcy5wYXJzZU9wdGlvbnNSZXN1bHQocmVzdWx0KVxuICAgIGNvbnN0IHJlc29sdmVkUGFnZSA9IE51bWJlci5pc0Zpbml0ZShwYWdlKSA/IHBhZ2UgOiB0aGlzLmdldEFjdGl2ZVBhZ2UoKVxuICAgIGNvbnN0IHJlc29sdmVkUGFnZVNpemUgPSB0aGlzLnJlc29sdmVQYWdlU2l6ZSh7b3B0aW9uczogbG9hZGVkT3B0aW9ucywgcGFnZTogcmVzb2x2ZWRQYWdlLCBwYWdlU2l6ZSwgdG90YWxDb3VudH0pXG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGxvYWRlZE9wdGlvbnMsXG4gICAgICBwYWdlOiByZXNvbHZlZFBhZ2UsXG4gICAgICBwYWdlSW5wdXRBY3RpdmU6IGZhbHNlLFxuICAgICAgcGFnZUlucHV0VmFsdWU6IFwiXCIsXG4gICAgICBwYWdlU2l6ZTogTnVtYmVyLmlzRmluaXRlKHRvdGFsQ291bnQpID8gcmVzb2x2ZWRQYWdlU2l6ZSA6IG51bGwsXG4gICAgICB0b3RhbENvdW50OiBOdW1iZXIuaXNGaW5pdGUodG90YWxDb3VudCkgPyB0b3RhbENvdW50IDogbnVsbFxuICAgIH0pXG4gIH1cblxuICBoYXlhU2VsZWN0T3B0aW9uKHtrZXksIGxvYWRlZE9wdGlvbn0pIHtcbiAgICBpZiAobG9hZGVkT3B0aW9uLnR5cGUgPT0gXCJncm91cFwiKSB7XG4gICAgICByZXR1cm4gPE9wdGlvbkdyb3VwIGtleT17a2V5fSBvcHRpb249e2xvYWRlZE9wdGlvbn0gLz5cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPE9wdGlvblxuICAgICAgICBjdXJyZW50T3B0aW9uVmFsdWVzPXt0aGlzLmdldEN1cnJlbnRPcHRpb25WYWx1ZXMoKX1cbiAgICAgICAgaWNvbj17dGhpcy5pY29uRm9yT3B0aW9uKGxvYWRlZE9wdGlvbil9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBvcHRpb249e2xvYWRlZE9wdGlvbn1cbiAgICAgICAgb25PcHRpb25DbGlja2VkPXt0aGlzLnR0Lm9uT3B0aW9uQ2xpY2tlZH1cbiAgICAgICAgcHJlc2VudE9wdGlvbj17dGhpcy50dC5wcmVzZW50T3B0aW9ufVxuICAgICAgICBzZWxlY3RlZEJhY2tncm91bmRDb2xvcj17dGhpcy5wcm9wcy5zZWxlY3RlZEJhY2tncm91bmRDb2xvcn1cbiAgICAgICAgc2VsZWN0ZWRIb3ZlckJhY2tncm91bmRDb2xvcj17dGhpcy5wcm9wcy5zZWxlY3RlZEhvdmVyQmFja2dyb3VuZENvbG9yfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBsb2FkT3B0aW9uc0Zyb21BcnJheShvcHRpb25zLCBzZWFyY2hWYWx1ZSkge1xuICAgIGNvbnN0IGxvd2VyU2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZT8udG9Mb3dlckNhc2UoKVxuICAgIGNvbnN0IGxvYWRlZE9wdGlvbnMgPSBvcHRpb25zLmZpbHRlcigoe3RleHR9KSA9PiAhbG93ZXJTZWFyY2hWYWx1ZSB8fCB0ZXh0Py50b0xvd2VyQ2FzZSgpPy5pbmNsdWRlcyhsb3dlclNlYXJjaFZhbHVlKSlcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgbG9hZGVkT3B0aW9ucyxcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBwYWdlSW5wdXRBY3RpdmU6IGZhbHNlLFxuICAgICAgcGFnZUlucHV0VmFsdWU6IFwiXCIsXG4gICAgICBwYWdlU2l6ZTogbnVsbCxcbiAgICAgIHRvdGFsQ291bnQ6IG51bGxcbiAgICB9KVxuICB9XG5cbiAgb25EaW1lbnNpb25zQ2hhbmdlID0gKHt3aW5kb3d9KSA9PiB7XG4gICAgdGhpcy53aW5kb3dXaWR0aCA9IHdpbmRvdy53aWR0aFxuICAgIHRoaXMud2luZG93SGVpZ2h0ID0gd2luZG93LmhlaWdodFxuICB9XG5cbiAgb25TZWxlY3RDb250YWluZXJMYXlvdXQgPSAoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7c2VsZWN0Q29udGFpbmVyTGF5b3V0OiBPYmplY3QuYXNzaWduKHt9LCBkaWdnKGUsIFwibmF0aXZlRXZlbnRcIiwgXCJsYXlvdXRcIikpfSlcbiAgb25FbmRPZlNlbGVjdExheW91dCA9IChlKSA9PiB7XG4gICAgY29uc3QgZW5kT2ZTZWxlY3RMYXlvdXQgPSBPYmplY3QuYXNzaWduKHt9LCBkaWdnKGUsIFwibmF0aXZlRXZlbnRcIiwgXCJsYXlvdXRcIikpXG4gICAgY29uc3QgbmV3U3RhdGUgPSB7ZW5kT2ZTZWxlY3RMYXlvdXR9XG5cbiAgICBpZiAodGhpcy5zLm9wZW5lZCAmJiBlbmRPZlNlbGVjdExheW91dD8ud2lkdGgpIHtcbiAgICAgIG5ld1N0YXRlLm9wdGlvbnNXaWR0aCA9IGVuZE9mU2VsZWN0TGF5b3V0LndpZHRoXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucy5vcGVuZWQgJiYgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXQpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbigpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICBvbk9wdGlvbnNDb250YWluZXJMYXlvdXQgPSAoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7b3B0aW9uc0NvbnRhaW5lckxheW91dDogT2JqZWN0LmFzc2lnbih7fSwgZGlnZyhlLCBcIm5hdGl2ZUV2ZW50XCIsIFwibGF5b3V0XCIpKX0pXG5cbiAgb25TZWxlY3RDbGlja2VkID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICBjb25zdCB7b3BlbmVkfSA9IHRoaXMuc1xuXG4gICAgaWYgKG9wZW5lZCkge1xuICAgICAgdGhpcy5jbG9zZU9wdGlvbnMoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wZW5PcHRpb25zKClcbiAgICB9XG4gIH1cblxuICBvblNlYXJjaFRleHRJbnB1dENoYW5nZWREZWJvdW5jZWQgPSBkZWJvdW5jZSh0aGlzLnR0LmxvYWRPcHRpb25zLCAyMDApXG5cbiAgY2xvc2VPcHRpb25zKCkge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaGVpZ2h0OiBudWxsLFxuICAgICAgbG9hZGVkT3B0aW9uczogdW5kZWZpbmVkLFxuICAgICAgb3BlbmVkOiBmYWxzZSxcbiAgICAgIG9wdGlvbnNDb250YWluZXJMYXlvdXQ6IG51bGwsXG4gICAgICBwYWdlOiAxLFxuICAgICAgcGFnZUlucHV0QWN0aXZlOiBmYWxzZSxcbiAgICAgIHBhZ2VJbnB1dFZhbHVlOiBcIlwiLFxuICAgICAgcGFnZVNpemU6IG51bGwsXG4gICAgICB0b3RhbENvdW50OiBudWxsXG4gICAgfSlcblxuICAgIGlmICh0aGlzLnByb3BzLm9uT3B0aW9uc0Nsb3NlZCkge1xuICAgICAgdGhpcy5wcm9wcy5vbk9wdGlvbnNDbG9zZWQoe29wdGlvbnM6IHRoaXMuZ2V0Q3VycmVudE9wdGlvbnMoKX0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucC5vbkJsdXIpIHRoaXMucC5vbkJsdXIoKVxuICB9XG5cbiAgZ2V0U2VhcmNoVGV4dCA9ICgpID0+IHRoaXMuc2VhcmNoVGV4dFZhbHVlIHx8IFwiXCJcblxuICByZXNldFNlYXJjaFRleHRJbnB1dCA9ICgpID0+IHtcbiAgICB0aGlzLnNlYXJjaFRleHRWYWx1ZSA9IFwiXCJcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMudHQuc2VhcmNoVGV4dElucHV0UmVmLmN1cnJlbnRcblxuICAgIGlmIChpbnB1dD8uY2xlYXIpIHtcbiAgICAgIGlucHV0LmNsZWFyKClcbiAgICB9IGVsc2UgaWYgKGlucHV0Py5zZXROYXRpdmVQcm9wcykge1xuICAgICAgaW5wdXQuc2V0TmF0aXZlUHJvcHMoe3RleHQ6IFwiXCJ9KVxuICAgIH0gZWxzZSBpZiAoaW5wdXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlucHV0LnZhbHVlID0gXCJcIlxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWdub3JlIGlmIHRoZSByZWYgZG9lc24ndCBzdXBwb3J0IGRpcmVjdCB2YWx1ZSBhc3NpZ25tZW50LlxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlU2VhcmNoVGV4dCA9IChzZWFyY2hUZXh0KSA9PiB7XG4gICAgdGhpcy5zZWFyY2hUZXh0VmFsdWUgPSBzZWFyY2hUZXh0XG5cbiAgICBpZiAodGhpcy5zLnBhZ2UgIT0gMSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7cGFnZTogMSwgcGFnZUlucHV0QWN0aXZlOiBmYWxzZSwgcGFnZUlucHV0VmFsdWU6IFwiXCJ9LCB0aGlzLnR0Lm9uU2VhcmNoVGV4dElucHV0Q2hhbmdlZERlYm91bmNlZClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50dC5vblNlYXJjaFRleHRJbnB1dENoYW5nZWREZWJvdW5jZWQoKVxuICAgIH1cbiAgfVxuXG4gIG9wZW5PcHRpb25zKCkge1xuICAgIHRoaXMuc2VhcmNoVGV4dFZhbHVlID0gXCJcIlxuICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uQmVsb3coKVxuICAgIHRoaXMubG9hZE9wdGlvbnMoKVxuICAgIHRoaXMuY2FsbE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuID0gdHJ1ZVxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIGhlaWdodDogdGhpcy5zLnNlbGVjdENvbnRhaW5lckxheW91dC5oZWlnaHQsXG4gICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgc2Nyb2xsTGVmdDogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IDogbnVsbCxcbiAgICAgICAgc2Nyb2xsVG9wOiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA6IG51bGxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzZXRTZWFyY2hUZXh0SW5wdXQoKVxuICAgICAgICB0aGlzLmZvY3VzVGV4dElucHV0KClcbiAgICAgIH1cbiAgICApXG5cbiAgICBpZiAodGhpcy5wLm9uRm9jdXMpIHRoaXMucC5vbkZvY3VzKClcbiAgfVxuXG4gIGZvY3VzVGV4dElucHV0ID0gKCkgPT4gZGlnZyh0aGlzLnR0LnNlYXJjaFRleHRJbnB1dFJlZiwgXCJjdXJyZW50XCIpPy5mb2N1cygpXG5cbiAgc2V0T3B0aW9uc1Bvc2l0aW9uKCkge1xuICAgIGlmICghdGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgICByZXR1cm4gLy8gRGVib3VuY2UgYWZ0ZXIgdW4tbW91bnQgaGFuZGVsaW5nLlxuICAgIH1cblxuICAgIHRoaXMuY2FsbE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuID0gdHJ1ZVxuICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uQmVsb3coKVxuICB9XG5cbiAgc2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4oKSB7XG4gICAgY29uc3Qge3dpbmRvd0hlaWdodH0gPSB0aGlzLnR0XG4gICAgY29uc3Qge29wdGlvbnNDb250YWluZXJMYXlvdXR9ID0gdGhpcy5zXG4gICAgY29uc3QgZW5kT2ZTZWxlY3RMYXlvdXQgPSB0aGlzLnMuZW5kT2ZTZWxlY3RMYXlvdXRcblxuICAgIGlmICghZW5kT2ZTZWxlY3RMYXlvdXQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe29wdGlvbnNWaXNpYmlsaXR5OiBcInZpc2libGVcIn0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zVG9wID0gZW5kT2ZTZWxlY3RMYXlvdXQudG9wXG4gICAgY29uc3Qgb3B0aW9uc1RvdGFsQm90dG9tUG9zaXRpb24gPSBvcHRpb25zQ29udGFpbmVyTGF5b3V0LmhlaWdodCArIG9wdGlvbnNUb3BcbiAgICBjb25zdCB3aW5kb3dIZWlnaHRXaXRoU2Nyb2xsID0gd2luZG93SGVpZ2h0ICsgdGhpcy5zLnNjcm9sbFRvcFxuXG4gICAgaWYgKHdpbmRvd0hlaWdodFdpdGhTY3JvbGwgPCBvcHRpb25zVG90YWxCb3R0b21Qb3NpdGlvbikge1xuICAgICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb25BYm92ZSgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe29wdGlvbnNWaXNpYmlsaXR5OiBcInZpc2libGVcIn0pXG4gICAgfVxuICB9XG5cbiAgc2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmUoKSB7XG4gICAgY29uc3Qge2VuZE9mU2VsZWN0TGF5b3V0fSA9IHRoaXMuc1xuXG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICBvcHRpb25zUGxhY2VtZW50OiBcImFib3ZlXCIsXG4gICAgICAgIG9wdGlvbnNWaXNpYmlsaXR5OiBcInZpc2libGVcIixcbiAgICAgICAgb3B0aW9uc1dpZHRoOiBlbmRPZlNlbGVjdExheW91dD8ud2lkdGhcbiAgICAgIH0sXG4gICAgICAoKSA9PiB0aGlzLmZvY3VzVGV4dElucHV0KClcbiAgICApXG4gIH1cblxuICBzZXRPcHRpb25zUG9zaXRpb25CZWxvdygpIHtcbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge1xuICAgICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICAgIG9wdGlvbnNQbGFjZW1lbnQ6IFwiYmVsb3dcIixcbiAgICAgICAgb3B0aW9uc1Zpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgICAgIG9wdGlvbnNXaWR0aDogdGhpcy5zLmVuZE9mU2VsZWN0TGF5b3V0Py53aWR0aFxuICAgICAgfSxcbiAgICAgICgpID0+IHRoaXMuZm9jdXNUZXh0SW5wdXQoKVxuICAgIClcbiAgfVxuXG4gIG9uQW55dGhpbmdSZXNpemVkID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnMub3BlbmVkKSB7XG4gICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbigpXG4gICAgfVxuICB9XG5cbiAgb25Bbnl0aGluZ1Jlc2l6ZWREZWJvdW5jZWQgPSBkZWJvdW5jZSh0aGlzLnR0Lm9uQW55dGhpbmdSZXNpemVkLCAyNSlcblxuICBvbkFueXRoaW5nU2Nyb2xsZWQgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMucy5vcGVuZWQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzY3JvbGxMZWZ0OiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgOiBudWxsLFxuICAgICAgICBzY3JvbGxUb3A6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIDogbnVsbFxuICAgICAgfSlcbiAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uKClcbiAgICB9XG4gIH1cblxuICBvbkFueXRoaW5nU2Nyb2xsZWREZWJvdW5jZWQgPSBkZWJvdW5jZSh0aGlzLnR0Lm9uQW55dGhpbmdTY3JvbGxlZCwgMjUpXG5cbiAgb25QcmVzc091dHNpZGVPcHRpb25zID0gKCkgPT4ge1xuICAgIC8vIElmIG9wdGlvbnMgYXJlIG9wZW4gYW5kIGEgY2xpY2sgaXMgbWFkZSBvdXRzaWRlIG9mIHRoZSBvcHRpb25zIGNvbnRhaW5lclxuICAgIGlmICh0aGlzLnMub3BlbmVkKSB7XG4gICAgICB0aGlzLmNsb3NlT3B0aW9ucygpXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtudW1iZXJ8bnVsbH0gKi9cbiAgcGFnaW5hdGlvblRvdGFsUGFnZXMoKSB7XG4gICAgY29uc3Qge3RvdGFsQ291bnR9ID0gdGhpcy5zXG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSB8fCB0b3RhbENvdW50IDw9IDApIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMucmVzb2x2ZVBhZ2VTaXplKHtcbiAgICAgIG9wdGlvbnM6IHRoaXMucy5sb2FkZWRPcHRpb25zIHx8IFtdLFxuICAgICAgcGFnZTogdGhpcy5nZXRBY3RpdmVQYWdlKCksXG4gICAgICBwYWdlU2l6ZTogdGhpcy5zLnBhZ2VTaXplLFxuICAgICAgdG90YWxDb3VudFxuICAgIH0pXG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShwYWdlU2l6ZSkgfHwgcGFnZVNpemUgPD0gMCkgcmV0dXJuIG51bGxcblxuICAgIHJldHVybiBNYXRoLmNlaWwodG90YWxDb3VudCAvIHBhZ2VTaXplKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFBhZ2VzXG4gICAqIEByZXR1cm5zIHtBcnJheTx7a2V5OiBzdHJpbmcsIHR5cGU6IFwicGFnZVwifFwiZWxsaXBzaXNcIiwgdmFsdWU/OiBudW1iZXJ9Pn1cbiAgICovXG4gIHBhZ2luYXRpb25QYWdlSXRlbXModG90YWxQYWdlcykge1xuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5nZXRBY3RpdmVQYWdlKClcbiAgICBjb25zdCBpdGVtcyA9IFtdXG4gICAgY29uc3QgYWRkUGFnZSA9IChwYWdlKSA9PiBpdGVtcy5wdXNoKHtrZXk6IGBwYWdlLSR7cGFnZX1gLCB0eXBlOiBcInBhZ2VcIiwgdmFsdWU6IHBhZ2V9KVxuICAgIGNvbnN0IGFkZEVsbGlwc2lzID0gKGtleSkgPT4gaXRlbXMucHVzaCh7a2V5LCB0eXBlOiBcImVsbGlwc2lzXCJ9KVxuXG4gICAgaWYgKHRvdGFsUGFnZXMgPD0gNykge1xuICAgICAgZm9yIChsZXQgcGFnZSA9IDE7IHBhZ2UgPD0gdG90YWxQYWdlczsgcGFnZSArPSAxKSB7XG4gICAgICAgIGFkZFBhZ2UocGFnZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGl0ZW1zXG4gICAgfVxuXG4gICAgYWRkUGFnZSgxKVxuXG4gICAgY29uc3Qgd2luZG93U2l6ZSA9IDJcbiAgICBsZXQgc3RhcnQgPSBNYXRoLm1heCgyLCBjdXJyZW50UGFnZSAtIHdpbmRvd1NpemUpXG4gICAgbGV0IGVuZCA9IE1hdGgubWluKHRvdGFsUGFnZXMgLSAxLCBjdXJyZW50UGFnZSArIHdpbmRvd1NpemUpXG5cbiAgICBpZiAoY3VycmVudFBhZ2UgPD0gMykge1xuICAgICAgc3RhcnQgPSAyXG4gICAgICBlbmQgPSBNYXRoLm1pbih0b3RhbFBhZ2VzIC0gMSwgNSlcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlID49IHRvdGFsUGFnZXMgLSAyKSB7XG4gICAgICBlbmQgPSB0b3RhbFBhZ2VzIC0gMVxuICAgICAgc3RhcnQgPSBNYXRoLm1heCgyLCB0b3RhbFBhZ2VzIC0gNClcbiAgICB9XG5cbiAgICBpZiAoc3RhcnQgPiAyKSBhZGRFbGxpcHNpcyhcImVsbGlwc2lzLXN0YXJ0XCIpXG5cbiAgICBmb3IgKGxldCBwYWdlID0gc3RhcnQ7IHBhZ2UgPD0gZW5kOyBwYWdlICs9IDEpIHtcbiAgICAgIGFkZFBhZ2UocGFnZSlcbiAgICB9XG5cbiAgICBpZiAoZW5kIDwgdG90YWxQYWdlcyAtIDEpIGFkZEVsbGlwc2lzKFwiZWxsaXBzaXMtZW5kXCIpXG5cbiAgICBhZGRQYWdlKHRvdGFsUGFnZXMpXG5cbiAgICByZXR1cm4gaXRlbXNcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge251bWJlcn0gcGFnZSAqL1xuICBzZXRQYWdpbmF0aW9uUGFnZSA9IChwYWdlKSA9PiB7XG4gICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMucGFnaW5hdGlvblRvdGFsUGFnZXMoKVxuXG4gICAgaWYgKCF0b3RhbFBhZ2VzKSByZXR1cm5cblxuICAgIGNvbnN0IG5leHRQYWdlID0gTWF0aC5taW4oTWF0aC5tYXgoTWF0aC5mbG9vcihwYWdlKSwgMSksIHRvdGFsUGFnZXMpXG5cbiAgICBpZiAobmV4dFBhZ2UgPT0gdGhpcy5nZXRBY3RpdmVQYWdlKCkpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe3BhZ2VJbnB1dEFjdGl2ZTogZmFsc2UsIHBhZ2VJbnB1dFZhbHVlOiBcIlwifSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoe3BhZ2U6IG5leHRQYWdlLCBwYWdlSW5wdXRBY3RpdmU6IGZhbHNlLCBwYWdlSW5wdXRWYWx1ZTogXCJcIn0sIHRoaXMudHQubG9hZE9wdGlvbnMpXG4gIH1cblxuICAvKiogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnQgKi9cbiAgb25QYWdpbmF0aW9uUHJldlByZXNzZWQgPSAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdD8uKClcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24/LigpXG5cbiAgICB0aGlzLnNldFBhZ2luYXRpb25QYWdlKHRoaXMuZ2V0QWN0aXZlUGFnZSgpIC0gMSlcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudCAqL1xuICBvblBhZ2luYXRpb25OZXh0UHJlc3NlZCA9IChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0Py4oKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbj8uKClcblxuICAgIHRoaXMuc2V0UGFnaW5hdGlvblBhZ2UodGhpcy5nZXRBY3RpdmVQYWdlKCkgKyAxKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50ICovXG4gIG9uUGFnaW5hdGlvbkxhYmVsUHJlc3NlZCA9IChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0Py4oKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbj8uKClcblxuICAgIGlmICh0aGlzLnMucGFnZUlucHV0QWN0aXZlKSByZXR1cm5cblxuICAgIHRoaXMuc2V0U3RhdGUoe3BhZ2VJbnB1dEFjdGl2ZTogdHJ1ZSwgcGFnZUlucHV0VmFsdWU6IFN0cmluZyh0aGlzLmdldEFjdGl2ZVBhZ2UoKSl9LCAoKSA9PiB7XG4gICAgICB0aGlzLnR0LnBhZ2VJbnB1dFJlZi5jdXJyZW50Py5mb2N1cz8uKClcbiAgICB9KVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAqL1xuICBvblBhZ2luYXRpb25JbnB1dENoYW5nZSA9ICh2YWx1ZSkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe3BhZ2VJbnB1dFZhbHVlOiB2YWx1ZX0pXG4gIH1cblxuICAvKiogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnQgKi9cbiAgb25QYWdpbmF0aW9uSW5wdXRCbHVyID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQ/LigpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uPy4oKVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7cGFnZUlucHV0QWN0aXZlOiBmYWxzZSwgcGFnZUlucHV0VmFsdWU6IFwiXCJ9KVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50ICovXG4gIG9uUGFnaW5hdGlvbklucHV0U3VibWl0ID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQ/LigpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uPy4oKVxuXG4gICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMucGFnaW5hdGlvblRvdGFsUGFnZXMoKVxuXG4gICAgaWYgKCF0b3RhbFBhZ2VzKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtwYWdlSW5wdXRBY3RpdmU6IGZhbHNlLCBwYWdlSW5wdXRWYWx1ZTogXCJcIn0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBuZXh0UGFnZSA9IE51bWJlcih0aGlzLnMucGFnZUlucHV0VmFsdWUpXG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShuZXh0UGFnZSkpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe3BhZ2VJbnB1dEFjdGl2ZTogZmFsc2UsIHBhZ2VJbnB1dFZhbHVlOiBcIlwifSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc2V0UGFnaW5hdGlvblBhZ2UobmV4dFBhZ2UpXG4gIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZXxudWxsfSAqL1xuICBwYWdpbmF0aW9uQ29udHJvbHMoKSB7XG4gICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMucGFnaW5hdGlvblRvdGFsUGFnZXMoKVxuXG4gICAgaWYgKCF0b3RhbFBhZ2VzIHx8IHRvdGFsUGFnZXMgPD0gMSkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5nZXRBY3RpdmVQYWdlKClcbiAgICBjb25zdCBwcmV2RGlzYWJsZWQgPSBjdXJyZW50UGFnZSA8PSAxXG4gICAgY29uc3QgbmV4dERpc2FibGVkID0gY3VycmVudFBhZ2UgPj0gdG90YWxQYWdlc1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzLnBhZ2luYXRpb25Db250YWluZXIgfHw9IHtjbGFzczogXCJvcHRpb25zLXBhZ2luYXRpb25cIn19XG4gICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbkNvbnRhaW5lciB8fD0ge1xuICAgICAgICAgIGJvcmRlclRvcDogXCIxcHggc29saWQgI2UyZThmMFwiLFxuICAgICAgICAgIHBhZGRpbmc6IDhcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0cy5wYWdpbmF0aW9uSGVhZGVyIHx8PSB7Y2xhc3M6IFwicGFnaW5hdGlvbi1oZWFkZXJcIn19XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uSGVhZGVyIHx8PSB7ZmxleERpcmVjdGlvbjogXCJyb3dcIiwgYWxpZ25JdGVtczogXCJjZW50ZXJcIiwganVzdGlmeUNvbnRlbnQ6IFwic3BhY2UtYmV0d2VlblwifX1cbiAgICAgICAgPlxuICAgICAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzLnBhZ2luYXRpb25QcmV2QnV0dG9uIHx8PSB7Y2xhc3M6IFwicGFnaW5hdGlvbi1wcmV2XCJ9fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3ByZXZEaXNhYmxlZH1cbiAgICAgICAgICAgIG9uUHJlc3M9e3RoaXMudHQub25QYWdpbmF0aW9uUHJldlByZXNzZWR9XG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzW2BwYWdpbmF0aW9uTmF2QnV0dG9uLSR7cHJldkRpc2FibGVkfWBdIHx8PSB7XG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjZjhmYWZjXCIsXG4gICAgICAgICAgICAgIGJvcmRlcjogXCIxcHggc29saWQgI2NiZDVlMVwiLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDgsXG4gICAgICAgICAgICAgIGhlaWdodDogMzAsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBvcGFjaXR5OiBwcmV2RGlzYWJsZWQgPyAwLjQgOiAxLFxuICAgICAgICAgICAgICB3aWR0aDogMzBcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEZvbnRBd2Vzb21lSWNvblxuICAgICAgICAgICAgICBuYW1lPVwiY2hldnJvbi1sZWZ0XCJcbiAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uTmF2SWNvbiB8fD0ge2NvbG9yOiBcIiMzMzQxNTVcIiwgZm9udFNpemU6IDEyfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgICAgZGF0YVNldD17ZGF0YVNldHMucGFnaW5hdGlvbkxhYmVsIHx8PSB7Y2xhc3M6IFwicGFnaW5hdGlvbi1sYWJlbFwifX1cbiAgICAgICAgICAgIG9uUHJlc3M9e3RoaXMudHQub25QYWdpbmF0aW9uTGFiZWxQcmVzc2VkfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uTGFiZWxCdXR0b24gfHw9IHtcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNmMWY1ZjlcIixcbiAgICAgICAgICAgICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjY2JkNWUxXCIsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMTQsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBtaW5XaWR0aDogMTQwLFxuICAgICAgICAgICAgICBwYWRkaW5nSG9yaXpvbnRhbDogMTAsXG4gICAgICAgICAgICAgIHBhZGRpbmdWZXJ0aWNhbDogNlxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7IXRoaXMucy5wYWdlSW5wdXRBY3RpdmUgJiZcbiAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25MYWJlbFRleHQgfHw9IHtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiBcIiMwZjE3MmFcIixcbiAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxMixcbiAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDYwMFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBQYWdlIHtjdXJyZW50UGFnZX0gb2Yge3RvdGFsUGFnZXN9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHt0aGlzLnMucGFnZUlucHV0QWN0aXZlICYmXG4gICAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0cy5wYWdpbmF0aW9uSW5wdXQgfHw9IHtjbGFzczogXCJwYWdpbmF0aW9uLWlucHV0XCJ9fVxuICAgICAgICAgICAgICAgIGtleWJvYXJkVHlwZT1cIm51bWJlci1wYWRcIlxuICAgICAgICAgICAgICAgIG9uQmx1cj17dGhpcy50dC5vblBhZ2luYXRpb25JbnB1dEJsdXJ9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2VUZXh0PXt0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0Q2hhbmdlfVxuICAgICAgICAgICAgICAgIG9uU3VibWl0RWRpdGluZz17dGhpcy50dC5vblBhZ2luYXRpb25JbnB1dFN1Ym1pdH1cbiAgICAgICAgICAgICAgICByZWY9e3RoaXMudHQucGFnZUlucHV0UmVmfVxuICAgICAgICAgICAgICAgIHNlbGVjdFRleHRPbkZvY3VzXG4gICAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uSW5wdXRTdHlsZSB8fD0ge1xuICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwLFxuICAgICAgICAgICAgICAgICAgY29sb3I6IFwiIzBmMTcyYVwiLFxuICAgICAgICAgICAgICAgICAgZm9udFNpemU6IDEyLFxuICAgICAgICAgICAgICAgICAgb3V0bGluZTogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDgwXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zLnBhZ2VJbnB1dFZhbHVlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzLnBhZ2luYXRpb25OZXh0QnV0dG9uIHx8PSB7Y2xhc3M6IFwicGFnaW5hdGlvbi1uZXh0XCJ9fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e25leHREaXNhYmxlZH1cbiAgICAgICAgICAgIG9uUHJlc3M9e3RoaXMudHQub25QYWdpbmF0aW9uTmV4dFByZXNzZWR9XG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzW2BwYWdpbmF0aW9uTmF2QnV0dG9uLSR7bmV4dERpc2FibGVkfWBdIHx8PSB7XG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjZjhmYWZjXCIsXG4gICAgICAgICAgICAgIGJvcmRlcjogXCIxcHggc29saWQgI2NiZDVlMVwiLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDgsXG4gICAgICAgICAgICAgIGhlaWdodDogMzAsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBvcGFjaXR5OiBuZXh0RGlzYWJsZWQgPyAwLjQgOiAxLFxuICAgICAgICAgICAgICB3aWR0aDogMzBcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEZvbnRBd2Vzb21lSWNvblxuICAgICAgICAgICAgICBuYW1lPVwiY2hldnJvbi1yaWdodFwiXG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbk5hdkljb24gfHw9IHtjb2xvcjogXCIjMzM0MTU1XCIsIGZvbnRTaXplOiAxMn19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgZGF0YVNldD17ZGF0YVNldHMucGFnaW5hdGlvblBhZ2VzIHx8PSB7Y2xhc3M6IFwicGFnaW5hdGlvbi1wYWdlc1wifX1cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25QYWdlcyB8fD0ge1xuICAgICAgICAgICAgZmxleERpcmVjdGlvbjogXCJyb3dcIixcbiAgICAgICAgICAgIGZsZXhXcmFwOiBcIndyYXBcIixcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgbWFyZ2luVG9wOiA4XG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnBhZ2luYXRpb25QYWdlSXRlbXModG90YWxQYWdlcykubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS50eXBlID09IFwiZWxsaXBzaXNcIikge1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0c1tgcGFnaW5hdGlvbkVsbGlwc2lzLSR7aXRlbS5rZXl9YF0gfHw9IHtjbGFzczogXCJwYWdpbmF0aW9uLWVsbGlwc2lzXCJ9fVxuICAgICAgICAgICAgICAgICAga2V5PXtpdGVtLmtleX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbkVsbGlwc2lzIHx8PSB7cGFkZGluZ0hvcml6b250YWw6IDZ9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbkVsbGlwc2lzVGV4dCB8fD0ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcIiM2NDc0OGJcIixcbiAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogMTIsXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogNjAwXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIC4uLlxuICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8UGFnaW5hdGlvblBhZ2VCdXR0b25cbiAgICAgICAgICAgICAgICBhY3RpdmU9e2l0ZW0udmFsdWUgPT0gY3VycmVudFBhZ2V9XG4gICAgICAgICAgICAgICAga2V5PXtpdGVtLmtleX1cbiAgICAgICAgICAgICAgICBvblBhZ2VTZWxlY3RlZD17dGhpcy50dC5zZXRQYWdpbmF0aW9uUGFnZX1cbiAgICAgICAgICAgICAgICBwYWdlPXtpdGVtLnZhbHVlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pfVxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgb3B0aW9uc0NvbnRhaW5lcigpIHtcbiAgICBjb25zdCB7c2VsZWN0Q29udGFpbmVyTGF5b3V0LCBsb2FkZWRPcHRpb25zLCBlbmRPZlNlbGVjdExheW91dCwgb3B0aW9uc0NvbnRhaW5lckxheW91dCwgb3B0aW9uc1BsYWNlbWVudCwgb3B0aW9uc1Zpc2liaWxpdHl9ID0gdGhpcy5zXG4gICAgbGV0IGxlZnQsIHRvcFxuXG4gICAgbGV0IHN0eWxlID0ge1xuICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgIHpJbmRleDogOTk5OTksXG4gICAgICBlbGV2YXRpb246IDk5OTk5LFxuICAgICAgdmlzaWJpbGl0eTogb3B0aW9uc1Zpc2liaWxpdHksXG4gICAgICB3aWR0aDogdGhpcy5wLm9wdGlvbnNXaWR0aCB8fCB0aGlzLnMub3B0aW9uc1dpZHRoLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNmZmZcIixcbiAgICAgIGJvcmRlcjogXCIxcHggc29saWQgIzk5OVwiLFxuICAgICAgbWF4SGVpZ2h0OiAzMDAsXG4gICAgICBvdmVyZmxvd1k6IFwiYXV0b1wiXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnAub3B0aW9uc1BvcnRhbCkge1xuICAgICAgc3R5bGUudG9wID0gMFxuICAgICAgc3R5bGUubGVmdCA9IDBcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnAub3B0aW9uc0Fic29sdXRlKSB7XG4gICAgICBzdHlsZS5sZWZ0ID0gMFxuICAgICAgc3R5bGUuYm90dG9tID0gMFxuICAgIH0gZWxzZSBpZiAob3B0aW9uc1BsYWNlbWVudCA9PSBcImJlbG93XCIpIHtcbiAgICAgIGlmIChQbGF0Zm9ybS5PUyA9PSBcIndlYlwiKSB7XG4gICAgICAgIC8vIG9uTGF5b3V0IHRvcCB2YWx1ZSBpcyBzb21ldGltZXMgbmVnYXRpdmUgc28gdXNlIGJyb3dzZXIgSlMgdG8gZ2V0IGl0IGluc3RlYWRcbiAgICAgICAgdG9wID0gZGlnZyh0aGlzLnR0LmVuZE9mU2VsZWN0UmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIFwidG9wXCIpICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCArIDFcblxuICAgICAgICAvLyBvbkxheW91dCBsZWZ0IHZhbHVlcyBkb2Vzbid0IGFsd2F5cyB1cGRhdGUgd2hlbiBjaGFuZ2VkXG4gICAgICAgIGxlZnQgPSBkaWdnKHRoaXMudHQuZW5kT2ZTZWxlY3RSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgXCJsZWZ0XCIpICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxlZnQgPSB0aGlzLnMuZW5kT2ZTZWxlY3RMYXlvdXQubGVmdFxuICAgICAgICB0b3AgPSBzZWxlY3RDb250YWluZXJMYXlvdXQudG9wXG4gICAgICB9XG5cbiAgICAgIHN0eWxlLmxlZnQgPSBsZWZ0XG4gICAgICBzdHlsZS50b3AgPSB0b3AgLSAyXG4gICAgfSBlbHNlIGlmIChvcHRpb25zUGxhY2VtZW50ID09IFwiYWJvdmVcIikge1xuICAgICAgaWYgKFBsYXRmb3JtLk9TID09IFwid2ViXCIpIHtcbiAgICAgICAgLy8gb25MYXlvdXQgdG9wIHZhbHVlIGlzIHNvbWV0aW1lcyBuZWdhdGl2ZSBzbyB1c2UgYnJvd3NlciBKUyB0byBnZXQgaXQgaW5zdGVhZFxuICAgICAgICB0b3AgPSBkaWdnKHRoaXMudHQuc2VsZWN0Q29udGFpbmVyUmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIFwidG9wXCIpICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcFxuXG4gICAgICAgIC8vIG9uTGF5b3V0IGxlZnQgdmFsdWVzIGRvZXNuJ3QgYWx3YXlzIHVwZGF0ZSB3aGVuIGNoYW5nZWRcbiAgICAgICAgbGVmdCA9IGRpZ2codGhpcy50dC5zZWxlY3RDb250YWluZXJSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgXCJsZWZ0XCIpICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxlZnQgPSBlbmRPZlNlbGVjdExheW91dC5sZWZ0XG4gICAgICAgIHRvcCA9IHNlbGVjdENvbnRhaW5lckxheW91dC50b3BcbiAgICAgIH1cblxuICAgICAgc3R5bGUubGVmdCA9IGxlZnRcbiAgICAgIHN0eWxlLnRvcCA9IHRvcCAtIG9wdGlvbnNDb250YWluZXJMYXlvdXQuaGVpZ2h0ICsgMVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua29ud24gb3B0aW9ucyBwbGFjZW1lbnQ6ICR7b3B0aW9uc1BsYWNlbWVudH1gKVxuICAgIH1cblxuICAgIHN0eWxlID0gdGhpcy5zdHlsaW5nRm9yKFwib3B0aW9uc0NvbnRhaW5lclwiLCBzdHlsZSwgW2xlZnQsIHRvcCwgc3R5bGUudmlzaWJpbGl0eSwgc3R5bGUud2lkdGhdKVxuXG4gICAgY29uc3QgaWQgPSBpZEZvckNvbXBvbmVudCh0aGlzKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIGRhdGFTZXQ9e3RoaXMuY2FjaGUoXCJvcHRpb25zQ29udGFpbmVyRGF0YVNldFwiLCB7Y2xhc3M6IFwib3B0aW9ucy1jb250YWluZXJcIiwgaWQsIHJvbGU6IFwiZGlhbG9nXCJ9LCBbaWRdKX1cbiAgICAgICAgb25MYXlvdXQ9e3RoaXMudHQub25PcHRpb25zQ29udGFpbmVyTGF5b3V0fVxuICAgICAgICByZWY9e3RoaXMudHQub3B0aW9uc0NvbnRhaW5lclJlZn1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgPlxuICAgICAgICB7bG9hZGVkT3B0aW9ucz8ubWFwKChsb2FkZWRPcHRpb24pID0+XG4gICAgICAgICAgdGhpcy5oYXlhU2VsZWN0T3B0aW9uKHtcbiAgICAgICAgICAgIGtleTogbG9hZGVkT3B0aW9uLmtleSB8fCBgbG9hZGVkLW9wdGlvbi0ke2xvYWRlZE9wdGlvbi52YWx1ZX1gLFxuICAgICAgICAgICAgbG9hZGVkT3B0aW9uXG4gICAgICAgICAgfSlcbiAgICAgICAgKX1cbiAgICAgICAge2xvYWRlZE9wdGlvbnM/Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgIDxWaWV3IGRhdGFTZXQ9e3RoaXMubm9PcHRpb25zQ29udGFpbmVyRGF0YVNldCB8fD0ge2NsYXNzOiBcIm5vLW9wdGlvbnMtY29udGFpbmVyXCJ9fT5cbiAgICAgICAgICAgIDxUZXh0Pnt0aGlzLnAubm9PcHRpb25zVGV4dCA/IHRoaXMucC5ub09wdGlvbnNUZXh0KCkgOiB0aGlzLnRyYW5zbGF0ZShcIi5ub19vcHRpb25zX2ZvdW5kXCIpfTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIH1cbiAgICAgICAge3RoaXMucGFnaW5hdGlvbkNvbnRyb2xzKCl9XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgb25PcHRpb25DbGlja2VkID0gKGV2ZW50LCBsb2FkZWRPcHRpb24pID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcblxuICAgIGNvbnN0IHtvbkNoYW5nZSwgdG9nZ2xlT3B0aW9uc30gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge211bHRpcGxlfSA9IHRoaXMucFxuICAgIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gdGhpcy5nZXRDdXJyZW50T3B0aW9ucygpXG4gICAgY29uc3QgdG9nZ2xlZCA9IHRoaXMuZ2V0VG9nZ2xlZCgpXG4gICAgY29uc3QgbmV3U3RhdGUgPSB7fVxuICAgIGNvbnN0IGV4aXN0aW5nT3B0aW9uID0gY3VycmVudE9wdGlvbnMuZmluZCgoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSA9PSBsb2FkZWRPcHRpb24udmFsdWUpXG4gICAgY29uc3QgbmV3VG9nZ2xlZCA9IHsuLi50b2dnbGVkfVxuICAgIGxldCBuZXdDdXJyZW50T3B0aW9uc1xuXG4gICAgaWYgKGV4aXN0aW5nT3B0aW9uKSB7XG4gICAgICBpZiAodG9nZ2xlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBjdXJyZW50VG9nZ2xlID0gdG9nZ2xlZFtsb2FkZWRPcHRpb24udmFsdWVdXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRvZ2dsZU9wdGlvbnMuZmluZEluZGV4KChlbGVtZW50KSA9PiBlbGVtZW50LnZhbHVlID09IGN1cnJlbnRUb2dnbGUpXG5cbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA+PSAodG9nZ2xlT3B0aW9ucy5sZW5ndGggLSAxKSkge1xuICAgICAgICAgIC8vIE5vIG5leHQgdG9nZ2xlZCAtIHJlbW92ZSB0b2dnbGVkIGFuZCBvcHRpb25cbiAgICAgICAgICBkZWxldGUgbmV3VG9nZ2xlZFtsb2FkZWRPcHRpb24udmFsdWVdXG5cbiAgICAgICAgICBuZXdDdXJyZW50T3B0aW9ucyA9IGN1cnJlbnRPcHRpb25zLmZpbHRlcigoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSAhPSBsb2FkZWRPcHRpb24udmFsdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQWxyZWFkeSB0b2dnbGVkIC0gc2V0IHRvIG5leHQgdG9nZ2xlXG4gICAgICAgICAgbmV3VG9nZ2xlZFtsb2FkZWRPcHRpb24udmFsdWVdID0gZGlnZyh0b2dnbGVPcHRpb25zLCBjdXJyZW50SW5kZXggKyAxLCBcInZhbHVlXCIpXG4gICAgICAgIH1cblxuICAgICAgICBuZXdTdGF0ZS50b2dnbGVkID0gbmV3VG9nZ2xlZFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIGZyb20gY3VycmVudCBvcHRpb25zXG4gICAgICAgIG5ld0N1cnJlbnRPcHRpb25zID0gY3VycmVudE9wdGlvbnMuZmlsdGVyKChjdXJyZW50T3B0aW9uKSA9PiBjdXJyZW50T3B0aW9uLnZhbHVlICE9IGxvYWRlZE9wdGlvbi52YWx1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIGNsaWNrZWQgb3B0aW9uIGlzIGRpc2FibGVkXG4gICAgICBpZiAobG9hZGVkT3B0aW9uLmRpc2FibGVkKSByZXR1cm5cblxuICAgICAgaWYgKHRvZ2dsZU9wdGlvbnMpIHtcbiAgICAgICAgLy8gU2V0IGZyZXNoIHRvZ2dsZVxuICAgICAgICBuZXdUb2dnbGVkW2xvYWRlZE9wdGlvbi52YWx1ZV0gPSB0b2dnbGVPcHRpb25zWzBdLnZhbHVlXG4gICAgICAgIG5ld1N0YXRlLnRvZ2dsZWQgPSBuZXdUb2dnbGVkXG4gICAgICB9XG5cbiAgICAgIGlmIChtdWx0aXBsZSB8fCB0b2dnbGVPcHRpb25zKSB7XG4gICAgICAgIG5ld0N1cnJlbnRPcHRpb25zID0gY3VycmVudE9wdGlvbnMuY29uY2F0KFtsb2FkZWRPcHRpb25dKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3Q3VycmVudE9wdGlvbnMgPSBbbG9hZGVkT3B0aW9uXVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcInZhbHVlc1wiIGluIHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy52YWx1ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gY3VycmVudE9wdGlvbnMgYXJlIGNvbnRyb2xsZWQgYW5kIGEgdXNlTWVtbyBjYWxsYmFjayBpcyBoYW5kZWxpbmcgc2V0dGluZyBjdXJyZW50IG9wdGlvbnMuXG4gICAgfSBlbHNlIGlmIChuZXdDdXJyZW50T3B0aW9ucykge1xuICAgICAgbmV3U3RhdGUuY3VycmVudE9wdGlvbnMgPSBuZXdDdXJyZW50T3B0aW9uc1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSBuZXdDdXJyZW50T3B0aW9ucyB8fCBjdXJyZW50T3B0aW9uc1xuXG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICBvbkNoYW5nZSh7XG4gICAgICAgIGV2ZW50LFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICB0b2dnbGVzOiBuZXdUb2dnbGVkXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlVmFsdWUpIHtcbiAgICAgIGxldCBvcHRpb25WYWx1ZVxuXG4gICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgb3B0aW9uVmFsdWUgPSBvcHRpb25zLm1hcCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25WYWx1ZSA9IGRpZyhvcHRpb25zLCAwLCBcInZhbHVlXCIpXG4gICAgICB9XG5cbiAgICAgIHRoaXMucC5vbkNoYW5nZVZhbHVlKG9wdGlvblZhbHVlKVxuICAgIH1cblxuICAgIGlmICghbXVsdGlwbGUpIHRoaXMuY2xvc2VPcHRpb25zKClcbiAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKVxuICB9XG5cbiAgc3R5bGluZ0ZvcihzdHlsaW5nTmFtZSwgc3R5bGUgPSB7fSwgY2FjaGVzID0gW10pIHtcbiAgICBsZXQgY3VzdG9tU3R5bGluZyA9IGRpZyh0aGlzLCBcInByb3BzXCIsIFwic3R5bGVzXCIsIHN0eWxpbmdOYW1lKVxuXG4gICAgaWYgKHR5cGVvZiBjdXN0b21TdHlsaW5nID09IFwiZnVuY3Rpb25cIikgY3VzdG9tU3R5bGluZyA9IGN1c3RvbVN0eWxpbmcoe3N0YXRlOiB0aGlzLnN0YXRlLCBzdHlsZX0pXG5cbiAgICBpZiAoY3VzdG9tU3R5bGluZykge1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oc3R5bGUsIGN1c3RvbVN0eWxpbmcpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGUoYHN0eWxpbmdGb3ItJHtzdHlsaW5nTmFtZX1gLCBzdHlsZSwgY2FjaGVzKVxuICB9XG5cbiAgaWNvbkZvck9wdGlvbihvcHRpb24pIHtcbiAgICBjb25zdCB7dG9nZ2xlT3B0aW9uc30gPSB0aGlzLnByb3BzIHx8IHt9XG4gICAgY29uc3QgdG9nZ2xlZCA9IHRoaXMuZ2V0VG9nZ2xlZCgpXG5cbiAgICBpZiAodG9nZ2xlT3B0aW9ucyAmJiAob3B0aW9uLnZhbHVlIGluIHRvZ2dsZWQpKSB7XG4gICAgICBjb25zdCB0b2dnbGVkVmFsdWUgPSB0b2dnbGVkW29wdGlvbi52YWx1ZV1cbiAgICAgIGNvbnN0IHRvZ2dsZWRPcHRpb24gPSB0b2dnbGVPcHRpb25zLmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQudmFsdWUgPT0gdG9nZ2xlZFZhbHVlKVxuXG4gICAgICBpZiAoIXRvZ2dsZWRPcHRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBmaW5kIGEgdG9nZ2xlIG9wdGlvbiBmb3IgdmFsdWU6ICR7dG9nZ2xlZFZhbHVlfWApXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0b2dnbGVkT3B0aW9uLmljb25cbiAgICB9XG4gIH1cblxuICBwcmVzZW50T3B0aW9uID0gKG9wdGlvbiwgbW9kZSkgPT4ge1xuICAgIGNvbnN0IHtvcHRpb25Db250ZW50LCB0b2dnbGVPcHRpb25zfSA9IHRoaXMucHJvcHMgfHwge31cbiAgICBjb25zdCB0b2dnbGVkID0gdGhpcy5nZXRUb2dnbGVkKClcbiAgICBjb25zdCBpY29uID0gdGhpcy5pY29uRm9yT3B0aW9uKG9wdGlvbilcbiAgICBjb25zdCB0b2dnbGVWYWx1ZSA9IHRvZ2dsZWRbb3B0aW9uLnZhbHVlXVxuICAgIGNvbnN0IHRvZ2dsZU9wdGlvbiA9IHRvZ2dsZU9wdGlvbnM/LmZpbmQoKHRvZ2dsZU9wdGlvbkkpID0+IHRvZ2dsZU9wdGlvbkkudmFsdWUgPT0gdG9nZ2xlVmFsdWUpXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmdldEN1cnJlbnRPcHRpb25WYWx1ZXMoKS5zb21lKCh2YWx1ZSkgPT4gdmFsdWUgPT0gb3B0aW9uLnZhbHVlKVxuICAgIGxldCBzdHlsZVxuICAgIGxldCBjb250ZW50Tm9kZVxuXG4gICAgaWYgKG1vZGUgPT0gXCJjdXJyZW50XCIpIHtcbiAgICAgIHN0eWxlID0gdGhpcy5zdHlsaW5nRm9yKFwiY3VycmVudE9wdGlvblByZXNlbnRhdGlvblRleHRcIiwge2ZsZXg6IDEsIHdoaXRlU3BhY2U6IFwibm93cmFwXCJ9KVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZSA9IHRoaXMuc3R5bGluZ0ZvcihcIm9wdGlvblByZXNlbnRhdGlvblRleHRcIiwge2ZsZXg6IDEsIHdoaXRlU3BhY2U6IFwibm93cmFwXCJ9KVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1xuICAgICAgICBkYXRhU2V0PXt0aGlzLmNhY2hlKFwicHJlc2VudE9wdGlvblZpZXdEYXRhU2V0XCIsIHtcbiAgICAgICAgICB0ZXh0OiBvcHRpb24udGV4dCxcbiAgICAgICAgICB0b2dnbGVJY29uOiB0b2dnbGVPcHRpb24/Lmljb24sXG4gICAgICAgICAgdG9nZ2xlVmFsdWU6IHRvZ2dsZU9wdGlvbj8udmFsdWUsXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbi52YWx1ZVxuICAgICAgICB9LCBbb3B0aW9uLnRleHQsIG9wdGlvbi52YWx1ZSwgdG9nZ2xlT3B0aW9uPy5pY29uLCB0b2dnbGVPcHRpb24/LnZhbHVlXSl9XG4gICAgICAgIHN0eWxlPXt0aGlzLmNhY2hlKFwib3B0aW9uUHJlc2VudGF0aW9uU3R5bGVcIiwge2ZsZXhEaXJlY3Rpb246IFwicm93XCIsIGFsaWduSXRlbXM6IFwiY2VudGVyXCJ9KX1cbiAgICAgICAgdGVzdElEPVwib3B0aW9uLXByZXNlbnRhdGlvblwiXG4gICAgICA+XG4gICAgICAgIHt0b2dnbGVPcHRpb25zICYmICEob3B0aW9uLnZhbHVlIGluIHRvZ2dsZWQpICYmXG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXt0aGlzLmNhY2hlKFwidG9nZ2xlSWNvblBsYWNlaG9sZGVyU3R5bGVcIiwge3dpZHRoOiAyMH0pfVxuICAgICAgICAgICAgdGVzdElEPVwidG9nZ2xlLWljb24tcGxhY2Vob2xkZXJcIlxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgICAge3RvZ2dsZU9wdGlvbnMgJiYgKG9wdGlvbi52YWx1ZSBpbiB0b2dnbGVkKSAmJlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXt0aGlzLmNhY2hlKFwidG9nZ2xlSWNvbkNvbnRhaW5lclN0eWxlXCIsIHthbGlnbkl0ZW1zOiBcImNlbnRlclwiLCBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIiwgd2lkdGg6IDIwfSl9PlxuICAgICAgICAgICAgPEZvbnRBd2Vzb21lSWNvblxuICAgICAgICAgICAgICBuYW1lPXtpY29ufVxuICAgICAgICAgICAgICB0ZXN0SUQ9XCJ0b2dnbGUtaWNvblwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgfVxuICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICBpZiAob3B0aW9uQ29udGVudCkge1xuICAgICAgICAgICAgY29udGVudE5vZGUgPSBvcHRpb25Db250ZW50KHtpY29uLCBtb2RlLCBvcHRpb24sIHNlbGVjdGVkLCB0b2dnbGVPcHRpb24sIHRvZ2dsZVZhbHVlLCB0b2dnbGVkfSlcbiAgICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gXCJjdXJyZW50XCIgJiYgb3B0aW9uLmN1cnJlbnRDb250ZW50KSB7XG4gICAgICAgICAgICBjb250ZW50Tm9kZSA9IG9wdGlvbi5jdXJyZW50Q29udGVudCgpXG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb24uY29udGVudCkge1xuICAgICAgICAgICAgY29udGVudE5vZGUgPSBvcHRpb24uY29udGVudCgpXG4gICAgICAgICAgfSBlbHNlIGlmIChcImh0bWxcIiBpbiBvcHRpb24gJiYgUGxhdGZvcm0uT1MgIT0gXCJ3ZWJcIikge1xuICAgICAgICAgICAgY29udGVudE5vZGUgPSA8UmVuZGVySHRtbCBzb3VyY2U9e3todG1sOiBkaWdnKG9wdGlvbiwgXCJodG1sXCIpfX0gLz5cbiAgICAgICAgICB9IGVsc2UgaWYgKFwiaHRtbFwiIGluIG9wdGlvbiAmJiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiKSB7XG4gICAgICAgICAgICBjb250ZW50Tm9kZSA9IDxkaXYgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tfX2h0bWw6IGRpZ2cob3B0aW9uLCBcImh0bWxcIil9fSAvPlxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZW50Tm9kZSA9IChcbiAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgICAgICAgICAgdGVzdElEPVwib3B0aW9uLXByZXNlbnRhdGlvbi10ZXh0XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtvcHRpb24udGV4dH1cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8VmlldyBzdHlsZT17dGhpcy5jYWNoZShcIm9wdGlvblByZXNlbnRhdGlvbkNvbnRlbnRTdHlsZVwiLCB7ZmxleDogMX0pfT5cbiAgICAgICAgICAgICAgICB7Y29udGVudE5vZGV9XG4gICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAge29wdGlvbi5yaWdodCAmJlxuICAgICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt0aGlzLmNhY2hlKFwib3B0aW9uUHJlc2VudGF0aW9uUmlnaHRTdHlsZVwiLCB7YWxpZ25JdGVtczogXCJjZW50ZXJcIiwganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsIG1hcmdpbkxlZnQ6IDh9KX0+XG4gICAgICAgICAgICAgICAgICB7b3B0aW9uLnJpZ2h0fVxuICAgICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKVxuICAgICAgICB9KSgpfVxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIGFzeW5jIHNldEN1cnJlbnRGcm9tR2l2ZW5WYWx1ZXMoKSB7XG4gICAgY29uc3Qge29wdGlvbnMsIHZhbHVlc30gPSB0aGlzLnBcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykgJiYgdmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaWYgKHRoaXMucy5jdXJyZW50T3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2N1cnJlbnRPcHRpb25zOiBbXX0pXG4gICAgICB9XG5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wdGlvbnMoe3BhZ2U6IHRoaXMuZ2V0QWN0aXZlUGFnZSgpLCB2YWx1ZXN9KVxuICAgIGNvbnN0IHtvcHRpb25zOiBjdXJyZW50T3B0aW9uc30gPSB0aGlzLnBhcnNlT3B0aW9uc1Jlc3VsdChyZXN1bHQpXG4gICAgY29uc3QgY3VycmVudFZhbHVlcyA9IGN1cnJlbnRPcHRpb25zPy5tYXAoKGN1cnJlbnRPcHRpb24pID0+IGN1cnJlbnRPcHRpb24udmFsdWUpXG4gICAgY29uc3Qgc3RhdGVWYWx1ZXMgPSB0aGlzLnMuY3VycmVudE9wdGlvbnM/Lm1hcCgoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSlcblxuICAgIGlmIChhbnl0aGluZ0RpZmZlcmVudChjdXJyZW50VmFsdWVzLCBzdGF0ZVZhbHVlcykpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe2N1cnJlbnRPcHRpb25zfSlcbiAgICB9XG4gIH1cbn0pKVxuIl19
|
|
@@ -13,13 +13,13 @@ export default class HayaSelectSystemTestHelper {
|
|
|
13
13
|
searchInputSelector: string;
|
|
14
14
|
/** @returns {Promise<void>} */
|
|
15
15
|
open(): Promise<void>;
|
|
16
|
+
_optionsContainerSelector: any;
|
|
16
17
|
/** @returns {Promise<void>} */
|
|
17
18
|
close(): Promise<void>;
|
|
18
19
|
/** @returns {Promise<boolean>} */
|
|
19
20
|
isOpen(): Promise<boolean>;
|
|
20
21
|
/** @returns {Promise<string>} */
|
|
21
22
|
optionsContainerSelector(): Promise<string>;
|
|
22
|
-
_optionsContainerSelector: any;
|
|
23
23
|
/** @returns {Promise<string[]>} */
|
|
24
24
|
optionTexts(): Promise<string[]>;
|
|
25
25
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-test-helpers.d.ts","sourceRoot":"","sources":["../src/system-test-helpers.js"],"names":[],"mappings":"AAEA,wFAAwF;AAExF;;GAEG;AACH;IACE,yDAAyD;IACzD,qBADY,iCAAiC,EAmB5C;IANC,gBAA4B;IAC5B,eAAoB;IACpB,qBAA+C;IAC/C,0BAA8E;IAC9E,gCAAqF;IACrF,4BAAkF;IAGpF,+BAA+B;IAC/B,QADc,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"system-test-helpers.d.ts","sourceRoot":"","sources":["../src/system-test-helpers.js"],"names":[],"mappings":"AAEA,wFAAwF;AAExF;;GAEG;AACH;IACE,yDAAyD;IACzD,qBADY,iCAAiC,EAmB5C;IANC,gBAA4B;IAC5B,eAAoB;IACpB,qBAA+C;IAC/C,0BAA8E;IAC9E,gCAAqF;IACrF,4BAAkF;IAGpF,+BAA+B;IAC/B,QADc,OAAO,CAAC,IAAI,CAAC,CAK1B;IADC,+BAAqC;IAGvC,+BAA+B;IAC/B,SADc,OAAO,CAAC,IAAI,CAAC,CAU1B;IAED,kCAAkC;IAClC,UADc,OAAO,CAAC,OAAO,CAAC,CAO7B;IAED,iCAAiC;IACjC,4BADc,OAAO,CAAC,MAAM,CAAC,CAe5B;IAED,mCAAmC;IACnC,eADc,OAAO,CAAC,MAAM,EAAE,CAAC,CAM9B;IAED;;;OAGG;IACH,mDAHW;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAC,MAAM,CAAA;KAAC,mBACpD,OAAO,CAAC,IAAI,CAAC,CA2DzB;CACF;gDA9Ia;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC"}
|
|
@@ -25,6 +25,7 @@ export default class HayaSelectSystemTestHelper {
|
|
|
25
25
|
async open() {
|
|
26
26
|
await this.systemTest.click(this.selectContainerSelector);
|
|
27
27
|
await this.systemTest.find(this.searchInputSelector);
|
|
28
|
+
this._optionsContainerSelector = null;
|
|
28
29
|
}
|
|
29
30
|
/** @returns {Promise<void>} */
|
|
30
31
|
async close() {
|
|
@@ -76,33 +77,40 @@ export default class HayaSelectSystemTestHelper {
|
|
|
76
77
|
throw new Error(`Unexpected selectOption criteria: ${extraKeys.join(", ")}`);
|
|
77
78
|
}
|
|
78
79
|
if (typeof value != "undefined") {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
await waitFor({ timeout: 5000 }, async () => {
|
|
81
|
+
const optionsContainerSelector = await this.optionsContainerSelector();
|
|
82
|
+
const option = await this.systemTest.find(`${optionsContainerSelector} [data-class='select-option'][data-value='${value}']`, { useBaseSelector: false });
|
|
83
|
+
await this.systemTest.click(option);
|
|
84
|
+
});
|
|
82
85
|
return;
|
|
83
86
|
}
|
|
84
87
|
if (typeof index == "number") {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
await waitFor({ timeout: 5000 }, async () => {
|
|
89
|
+
const optionsContainerSelector = await this.optionsContainerSelector();
|
|
90
|
+
const options = await this.systemTest.all(`${optionsContainerSelector} [data-class='select-option']`, { useBaseSelector: false });
|
|
91
|
+
const option = options[index];
|
|
92
|
+
if (!option)
|
|
93
|
+
throw new Error(`No option at index: ${index}`);
|
|
94
|
+
await this.systemTest.click(option);
|
|
95
|
+
});
|
|
91
96
|
return;
|
|
92
97
|
}
|
|
93
98
|
if (text) {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
99
|
+
await waitFor({ timeout: 5000 }, async () => {
|
|
100
|
+
const optionsContainerSelector = await this.optionsContainerSelector();
|
|
101
|
+
const options = await this.systemTest.all(`${optionsContainerSelector} [data-class='select-option']`, { useBaseSelector: false });
|
|
102
|
+
for (const option of options) {
|
|
103
|
+
const optionText = (await option.getText()).trim();
|
|
104
|
+
if (optionText === text) {
|
|
105
|
+
await this.systemTest.click(option);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
101
108
|
}
|
|
102
|
-
|
|
103
|
-
|
|
109
|
+
throw new Error(`No option found with text: ${text}`);
|
|
110
|
+
});
|
|
111
|
+
return;
|
|
104
112
|
}
|
|
105
113
|
throw new Error("Expected value, text, or index when selecting an option");
|
|
106
114
|
}
|
|
107
115
|
}
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLXRlc3QtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zeXN0ZW0tdGVzdC1oZWxwZXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sT0FBTyxNQUFNLDRCQUE0QixDQUFBO0FBRWhELHdGQUF3RjtBQUV4Rjs7R0FFRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sMEJBQTBCO0lBQzdDLHlEQUF5RDtJQUN6RCxZQUFZLE9BQU87UUFDakIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUNyRixDQUFDO1FBRUQsTUFBTSxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxRQUFRLEVBQUMsR0FBRyxPQUFPLENBQUE7UUFDakQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDL0YsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsaUJBQWlCLE1BQU0sSUFBSSxDQUFBO1FBQy9DLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLGlDQUFpQyxDQUFBO1FBQzlFLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLGtDQUFrQyxDQUFBO1FBQ3JGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLG1DQUFtQyxDQUFBO0lBQ3BG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SSxFQUFFLENBQUM7WUFDVCxNQUFNLHdCQUF3QixHQUFHLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUE7WUFDdEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLHdCQUF3QiwrQkFBK0IsRUFBRSxFQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFBO1lBRS9ILEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtnQkFFbEQsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQ3hCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7b0JBQ25DLE9BQU07Z0JBQ1IsQ0FBQztZQUNILENBQUM7WUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQ3ZELENBQUM7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUE7SUFDNUUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHdhaXRGb3IgZnJvbSBcImF3YWl0ZXJ5L2J1aWxkL3dhaXQtZm9yLmpzXCJcblxuLyoqIEB0eXBlZGVmIHt7c3lzdGVtVGVzdDogb2JqZWN0LCB0ZXN0SWQ6IHN0cmluZ319IEhheWFTZWxlY3RTeXN0ZW1UZXN0SGVscGVyT3B0aW9ucyAqL1xuXG4vKipcbiAqIFN5c3RlbSB0ZXN0IGhlbHBlciBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBIYXlhU2VsZWN0IGluc3RhbmNlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGF5YVNlbGVjdFN5c3RlbVRlc3RIZWxwZXIge1xuICAvKiogQHBhcmFtIHtIYXlhU2VsZWN0U3lzdGVtVGVzdEhlbHBlck9wdGlvbnN9IG9wdGlvbnMgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBvcHRpb25zIGZvciBIYXlhU2VsZWN0U3lzdGVtVGVzdEhlbHBlciwgZ290OiAke29wdGlvbnN9YClcbiAgICB9XG5cbiAgICBjb25zdCB7c3lzdGVtVGVzdCwgdGVzdElkLCAuLi5yZXN0QXJnc30gPSBvcHRpb25zXG4gICAgY29uc3QgZXh0cmFLZXlzID0gT2JqZWN0LmtleXMocmVzdEFyZ3MpXG5cbiAgICBpZiAoZXh0cmFLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBvcHRpb25zIGZvciBIYXlhU2VsZWN0U3lzdGVtVGVzdEhlbHBlcjogJHtleHRyYUtleXMuam9pbihcIiwgXCIpfWApXG4gICAgfVxuXG4gICAgdGhpcy5zeXN0ZW1UZXN0ID0gc3lzdGVtVGVzdFxuICAgIHRoaXMudGVzdElkID0gdGVzdElkXG4gICAgdGhpcy5yb290U2VsZWN0b3IgPSBgW2RhdGEtdGVzdGlkPScke3Rlc3RJZH0nXWBcbiAgICB0aGlzLmNvbXBvbmVudFNlbGVjdG9yID0gYCR7dGhpcy5yb290U2VsZWN0b3J9IFtkYXRhLWNvbXBvbmVudD0naGF5YS1zZWxlY3QnXWBcbiAgICB0aGlzLnNlbGVjdENvbnRhaW5lclNlbGVjdG9yID0gYCR7dGhpcy5yb290U2VsZWN0b3J9IFtkYXRhLWNsYXNzPSdzZWxlY3QtY29udGFpbmVyJ11gXG4gICAgdGhpcy5zZWFyY2hJbnB1dFNlbGVjdG9yID0gYCR7dGhpcy5yb290U2VsZWN0b3J9IFtkYXRhLWNsYXNzPSdzZWFyY2gtdGV4dC1pbnB1dCddYFxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAqL1xuICBhc3luYyBvcGVuKCkge1xuICAgIGF3YWl0IHRoaXMuc3lzdGVtVGVzdC5jbGljayh0aGlzLnNlbGVjdENvbnRhaW5lclNlbGVjdG9yKVxuICAgIGF3YWl0IHRoaXMuc3lzdGVtVGVzdC5maW5kKHRoaXMuc2VhcmNoSW5wdXRTZWxlY3RvcilcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gKi9cbiAgYXN5bmMgY2xvc2UoKSB7XG4gICAgYXdhaXQgdGhpcy5zeXN0ZW1UZXN0LmNsaWNrKHRoaXMuc2VsZWN0Q29udGFpbmVyU2VsZWN0b3IpXG4gICAgYXdhaXQgd2FpdEZvcih7dGltZW91dDogNTAwMH0sIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaElucHV0cyA9IGF3YWl0IHRoaXMuc3lzdGVtVGVzdC5hbGwodGhpcy5zZWFyY2hJbnB1dFNlbGVjdG9yLCB7dGltZW91dDogMCwgdmlzaWJsZTogZmFsc2V9KVxuXG4gICAgICBpZiAoc2VhcmNoSW5wdXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VhcmNoIGlucHV0IGlzIHN0aWxsIHZpc2libGVcIilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAqL1xuICBhc3luYyBpc09wZW4oKSB7XG4gICAgY29uc3Qgc2NvdW5kcmVsID0gYXdhaXQgdGhpcy5zeXN0ZW1UZXN0LmdldFNjb3VuZHJlbENsaWVudCgpXG5cbiAgICByZXR1cm4gYXdhaXQgc2NvdW5kcmVsLmV2YWxSZXN1bHQoYFxuICAgICAgcmV0dXJuIEJvb2xlYW4oZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigke0pTT04uc3RyaW5naWZ5KHRoaXMuc2VhcmNoSW5wdXRTZWxlY3Rvcil9KSlcbiAgICBgKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59ICovXG4gIGFzeW5jIG9wdGlvbnNDb250YWluZXJTZWxlY3RvcigpIHtcbiAgICBpZiAodGhpcy5fb3B0aW9uc0NvbnRhaW5lclNlbGVjdG9yKSByZXR1cm4gdGhpcy5fb3B0aW9uc0NvbnRhaW5lclNlbGVjdG9yXG5cbiAgICBjb25zdCBzY291bmRyZWwgPSBhd2FpdCB0aGlzLnN5c3RlbVRlc3QuZ2V0U2NvdW5kcmVsQ2xpZW50KClcbiAgICBjb25zdCBzZWxlY3RvciA9IGF3YWl0IHNjb3VuZHJlbC5ldmFsUmVzdWx0KGBcbiAgICAgIGNvbnN0IHJvb3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCR7SlNPTi5zdHJpbmdpZnkodGhpcy5jb21wb25lbnRTZWxlY3Rvcil9KSB8fFxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCR7SlNPTi5zdHJpbmdpZnkodGhpcy5yb290U2VsZWN0b3IpfSlcbiAgICAgIGNvbnN0IGlkID0gcm9vdD8uZGF0YXNldD8uaWRcbiAgICAgIHJldHVybiBpZCA/IFwiW2RhdGEtY2xhc3M9J29wdGlvbnMtY29udGFpbmVyJ11bZGF0YS1pZD0nXCIgKyBpZCArIFwiJ11cIiA6IG51bGxcbiAgICBgKVxuXG4gICAgdGhpcy5fb3B0aW9uc0NvbnRhaW5lclNlbGVjdG9yID0gc2VsZWN0b3IgfHwgXCJbZGF0YS1jbGFzcz0nb3B0aW9ucy1jb250YWluZXInXVwiXG5cbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uc0NvbnRhaW5lclNlbGVjdG9yXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fSAqL1xuICBhc3luYyBvcHRpb25UZXh0cygpIHtcbiAgICBjb25zdCBvcHRpb25zQ29udGFpbmVyU2VsZWN0b3IgPSBhd2FpdCB0aGlzLm9wdGlvbnNDb250YWluZXJTZWxlY3RvcigpXG4gICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IHRoaXMuc3lzdGVtVGVzdC5hbGwoYCR7b3B0aW9uc0NvbnRhaW5lclNlbGVjdG9yfSBbZGF0YS1jbGFzcz0nc2VsZWN0LW9wdGlvbiddYCwge3VzZUJhc2VTZWxlY3RvcjogZmFsc2V9KVxuXG4gICAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKG9wdGlvbnMubWFwKGFzeW5jIChvcHRpb24pID0+IChhd2FpdCBvcHRpb24uZ2V0VGV4dCgpKS50cmltKCkpKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e2luZGV4PzogbnVtYmVyLCB0ZXh0Pzogc3RyaW5nLCB2YWx1ZT86IHN0cmluZ3xudW1iZXJ9fSBjcml0ZXJpYVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHNlbGVjdE9wdGlvbih7aW5kZXgsIHRleHQsIHZhbHVlLCAuLi5yZXN0QXJnc30gPSB7fSkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBjcml0ZXJpYSBmb3Igc2VsZWN0T3B0aW9uLCBnb3Q6IHVuZGVmaW5lZFwiKVxuICAgIH1cblxuICAgIGNvbnN0IGV4dHJhS2V5cyA9IE9iamVjdC5rZXlzKHJlc3RBcmdzKVxuXG4gICAgaWYgKGV4dHJhS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc2VsZWN0T3B0aW9uIGNyaXRlcmlhOiAke2V4dHJhS2V5cy5qb2luKFwiLCBcIil9YClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnNDb250YWluZXJTZWxlY3RvciA9IGF3YWl0IHRoaXMub3B0aW9uc0NvbnRhaW5lclNlbGVjdG9yKClcbiAgICAgIGNvbnN0IG9wdGlvbiA9IGF3YWl0IHRoaXMuc3lzdGVtVGVzdC5maW5kKFxuICAgICAgICBgJHtvcHRpb25zQ29udGFpbmVyU2VsZWN0b3J9IFtkYXRhLWNsYXNzPSdzZWxlY3Qtb3B0aW9uJ11bZGF0YS12YWx1ZT0nJHt2YWx1ZX0nXWAsXG4gICAgICAgIHt1c2VCYXNlU2VsZWN0b3I6IGZhbHNlfVxuICAgICAgKVxuICAgICAgYXdhaXQgdGhpcy5zeXN0ZW1UZXN0LmNsaWNrKG9wdGlvbilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5kZXggPT0gXCJudW1iZXJcIikge1xuICAgICAgY29uc3Qgb3B0aW9uc0NvbnRhaW5lclNlbGVjdG9yID0gYXdhaXQgdGhpcy5vcHRpb25zQ29udGFpbmVyU2VsZWN0b3IoKVxuICAgICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IHRoaXMuc3lzdGVtVGVzdC5hbGwoYCR7b3B0aW9uc0NvbnRhaW5lclNlbGVjdG9yfSBbZGF0YS1jbGFzcz0nc2VsZWN0LW9wdGlvbiddYCwge3VzZUJhc2VTZWxlY3RvcjogZmFsc2V9KVxuICAgICAgY29uc3Qgb3B0aW9uID0gb3B0aW9uc1tpbmRleF1cblxuICAgICAgaWYgKCFvcHRpb24pIHRocm93IG5ldyBFcnJvcihgTm8gb3B0aW9uIGF0IGluZGV4OiAke2luZGV4fWApXG5cbiAgICAgIGF3YWl0IHRoaXMuc3lzdGVtVGVzdC5jbGljayhvcHRpb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGV4dCkge1xuICAgICAgY29uc3Qgb3B0aW9uc0NvbnRhaW5lclNlbGVjdG9yID0gYXdhaXQgdGhpcy5vcHRpb25zQ29udGFpbmVyU2VsZWN0b3IoKVxuICAgICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IHRoaXMuc3lzdGVtVGVzdC5hbGwoYCR7b3B0aW9uc0NvbnRhaW5lclNlbGVjdG9yfSBbZGF0YS1jbGFzcz0nc2VsZWN0LW9wdGlvbiddYCwge3VzZUJhc2VTZWxlY3RvcjogZmFsc2V9KVxuXG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvblRleHQgPSAoYXdhaXQgb3B0aW9uLmdldFRleHQoKSkudHJpbSgpXG5cbiAgICAgICAgaWYgKG9wdGlvblRleHQgPT09IHRleHQpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnN5c3RlbVRlc3QuY2xpY2sob3B0aW9uKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gb3B0aW9uIGZvdW5kIHdpdGggdGV4dDogJHt0ZXh0fWApXG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgdmFsdWUsIHRleHQsIG9yIGluZGV4IHdoZW4gc2VsZWN0aW5nIGFuIG9wdGlvblwiKVxuICB9XG59XG4iXX0=
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLXRlc3QtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zeXN0ZW0tdGVzdC1oZWxwZXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sT0FBTyxNQUFNLDRCQUE0QixDQUFBO0FBRWhELHdGQUF3RjtBQUV4Rjs7R0FFRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sMEJBQTBCO0lBQzdDLHlEQUF5RDtJQUN6RCxZQUFZLE9BQU87UUFDakIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUNyRixDQUFDO1FBRUQsTUFBTSxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxRQUFRLEVBQUMsR0FBRyxPQUFPLENBQUE7UUFDakQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDL0YsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsaUJBQWlCLE1BQU0sSUFBSSxDQUFBO1FBQy9DLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLGlDQUFpQyxDQUFBO1FBQzlFLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLGtDQUFrQyxDQUFBO1FBQ3JGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLG1DQUFtQyxDQUFBO0lBQ3BG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IGZyb20gXCJhd2FpdGVyeS9idWlsZC93YWl0LWZvci5qc1wiXG5cbi8qKiBAdHlwZWRlZiB7e3N5c3RlbVRlc3Q6IG9iamVjdCwgdGVzdElkOiBzdHJpbmd9fSBIYXlhU2VsZWN0U3lzdGVtVGVzdEhlbHBlck9wdGlvbnMgKi9cblxuLyoqXG4gKiBTeXN0ZW0gdGVzdCBoZWxwZXIgZm9yIGludGVyYWN0aW5nIHdpdGggSGF5YVNlbGVjdCBpbnN0YW5jZXMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhheWFTZWxlY3RTeXN0ZW1UZXN0SGVscGVyIHtcbiAgLyoqIEBwYXJhbSB7SGF5YVNlbGVjdFN5c3RlbVRlc3RIZWxwZXJPcHRpb25zfSBvcHRpb25zICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgb3B0aW9ucyBmb3IgSGF5YVNlbGVjdFN5c3RlbVRlc3RIZWxwZXIsIGdvdDogJHtvcHRpb25zfWApXG4gICAgfVxuXG4gICAgY29uc3Qge3N5c3RlbVRlc3QsIHRlc3RJZCwgLi4ucmVzdEFyZ3N9ID0gb3B0aW9uc1xuICAgIGNvbnN0IGV4dHJhS2V5cyA9IE9iamVjdC5rZXlzKHJlc3RBcmdzKVxuXG4gICAgaWYgKGV4dHJhS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgb3B0aW9ucyBmb3IgSGF5YVNlbGVjdFN5c3RlbVRlc3RIZWxwZXI6ICR7ZXh0cmFLZXlzLmpvaW4oXCIsIFwiKX1gKVxuICAgIH1cblxuICAgIHRoaXMuc3lzdGVtVGVzdCA9IHN5c3RlbVRlc3RcbiAgICB0aGlzLnRlc3RJZCA9IHRlc3RJZFxuICAgIHRoaXMucm9vdFNlbGVjdG9yID0gYFtkYXRhLXRlc3RpZD0nJHt0ZXN0SWR9J11gXG4gICAgdGhpcy5jb21wb25lbnRTZWxlY3RvciA9IGAke3RoaXMucm9vdFNlbGVjdG9yfSBbZGF0YS1jb21wb25lbnQ9J2hheWEtc2VsZWN0J11gXG4gICAgdGhpcy5zZWxlY3RDb250YWluZXJTZWxlY3RvciA9IGAke3RoaXMucm9vdFNlbGVjdG9yfSBbZGF0YS1jbGFzcz0nc2VsZWN0LWNvbnRhaW5lciddYFxuICAgIHRoaXMuc2VhcmNoSW5wdXRTZWxlY3RvciA9IGAke3RoaXMucm9vdFNlbGVjdG9yfSBbZGF0YS1jbGFzcz0nc2VhcmNoLXRleHQtaW5wdXQnXWBcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gKi9cbiAgYXN5bmMgb3BlbigpIHtcbiAgICBhd2FpdCB0aGlzLnN5c3RlbVRlc3QuY2xpY2sodGhpcy5zZWxlY3RDb250YWluZXJTZWxlY3RvcilcbiAgICBhd2FpdCB0aGlzLnN5c3RlbVRlc3QuZmluZCh0aGlzLnNlYXJjaElucHV0U2VsZWN0b3IpXG4gICAgdGhpcy5fb3B0aW9uc0NvbnRhaW5lclNlbGVjdG9yID0gbnVsbFxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAqL1xuICBhc3luYyBjbG9zZSgpIHtcbiAgICBhd2FpdCB0aGlzLnN5c3RlbVRlc3QuY2xpY2sodGhpcy5zZWxlY3RDb250YWluZXJTZWxlY3RvcilcbiAgICBhd2FpdCB3YWl0Rm9yKHt0aW1lb3V0OiA1MDAwfSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoSW5wdXRzID0gYXdhaXQgdGhpcy5zeXN0ZW1UZXN0LmFsbCh0aGlzLnNlYXJjaElucHV0U2VsZWN0b3IsIHt0aW1lb3V0OiAwLCB2aXNpYmxlOiBmYWxzZX0pXG5cbiAgICAgIGlmIChzZWFyY2hJbnB1dHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTZWFyY2ggaW5wdXQgaXMgc3RpbGwgdmlzaWJsZVwiKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59ICovXG4gIGFzeW5jIGlzT3BlbigpIHtcbiAgICBjb25zdCBzY291bmRyZWwgPSBhd2FpdCB0aGlzLnN5c3RlbVRlc3QuZ2V0U2NvdW5kcmVsQ2xpZW50KClcblxuICAgIHJldHVybiBhd2FpdCBzY291bmRyZWwuZXZhbFJlc3VsdChgXG4gICAgICByZXR1cm4gQm9vbGVhbihkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCR7SlNPTi5zdHJpbmdpZnkodGhpcy5zZWFyY2hJbnB1dFNlbGVjdG9yKX0pKVxuICAgIGApXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gKi9cbiAgYXN5bmMgb3B0aW9uc0NvbnRhaW5lclNlbGVjdG9yKCkge1xuICAgIGlmICh0aGlzLl9vcHRpb25zQ29udGFpbmVyU2VsZWN0b3IpIHJldHVybiB0aGlzLl9vcHRpb25zQ29udGFpbmVyU2VsZWN0b3JcblxuICAgIGNvbnN0IHNjb3VuZHJlbCA9IGF3YWl0IHRoaXMuc3lzdGVtVGVzdC5nZXRTY291bmRyZWxDbGllbnQoKVxuICAgIGNvbnN0IHNlbGVjdG9yID0gYXdhaXQgc2NvdW5kcmVsLmV2YWxSZXN1bHQoYFxuICAgICAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJHtKU09OLnN0cmluZ2lmeSh0aGlzLmNvbXBvbmVudFNlbGVjdG9yKX0pIHx8XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJHtKU09OLnN0cmluZ2lmeSh0aGlzLnJvb3RTZWxlY3Rvcil9KVxuICAgICAgY29uc3QgaWQgPSByb290Py5kYXRhc2V0Py5pZFxuICAgICAgcmV0dXJuIGlkID8gXCJbZGF0YS1jbGFzcz0nb3B0aW9ucy1jb250YWluZXInXVtkYXRhLWlkPSdcIiArIGlkICsgXCInXVwiIDogbnVsbFxuICAgIGApXG5cbiAgICB0aGlzLl9vcHRpb25zQ29udGFpbmVyU2VsZWN0b3IgPSBzZWxlY3RvciB8fCBcIltkYXRhLWNsYXNzPSdvcHRpb25zLWNvbnRhaW5lciddXCJcblxuICAgIHJldHVybiB0aGlzLl9vcHRpb25zQ29udGFpbmVyU2VsZWN0b3JcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmdbXT59ICovXG4gIGFzeW5jIG9wdGlvblRleHRzKCkge1xuICAgIGNvbnN0IG9wdGlvbnNDb250YWluZXJTZWxlY3RvciA9IGF3YWl0IHRoaXMub3B0aW9uc0NvbnRhaW5lclNlbGVjdG9yKClcbiAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgdGhpcy5zeXN0ZW1UZXN0LmFsbChgJHtvcHRpb25zQ29udGFpbmVyU2VsZWN0b3J9IFtkYXRhLWNsYXNzPSdzZWxlY3Qtb3B0aW9uJ11gLCB7dXNlQmFzZVNlbGVjdG9yOiBmYWxzZX0pXG5cbiAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwob3B0aW9ucy5tYXAoYXN5bmMgKG9wdGlvbikgPT4gKGF3YWl0IG9wdGlvbi5nZXRUZXh0KCkpLnRyaW0oKSkpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7aW5kZXg/OiBudW1iZXIsIHRleHQ/OiBzdHJpbmcsIHZhbHVlPzogc3RyaW5nfG51bWJlcn19IGNyaXRlcmlhXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgc2VsZWN0T3B0aW9uKHtpbmRleCwgdGV4dCwgdmFsdWUsIC4uLnJlc3RBcmdzfSA9IHt9KSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGNyaXRlcmlhIGZvciBzZWxlY3RPcHRpb24sIGdvdDogdW5kZWZpbmVkXCIpXG4gICAgfVxuXG4gICAgY29uc3QgZXh0cmFLZXlzID0gT2JqZWN0LmtleXMocmVzdEFyZ3MpXG5cbiAgICBpZiAoZXh0cmFLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBzZWxlY3RPcHRpb24gY3JpdGVyaWE6ICR7ZXh0cmFLZXlzLmpvaW4oXCIsIFwiKX1gKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgYXdhaXQgd2FpdEZvcih7dGltZW91dDogNTAwMH0sIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9uc0NvbnRhaW5lclNlbGVjdG9yID0gYXdhaXQgdGhpcy5vcHRpb25zQ29udGFpbmVyU2VsZWN0b3IoKVxuICAgICAgICBjb25zdCBvcHRpb24gPSBhd2FpdCB0aGlzLnN5c3RlbVRlc3QuZmluZChcbiAgICAgICAgICBgJHtvcHRpb25zQ29udGFpbmVyU2VsZWN0b3J9IFtkYXRhLWNsYXNzPSdzZWxlY3Qtb3B0aW9uJ11bZGF0YS12YWx1ZT0nJHt2YWx1ZX0nXWAsXG4gICAgICAgICAge3VzZUJhc2VTZWxlY3RvcjogZmFsc2V9XG4gICAgICAgIClcblxuICAgICAgICBhd2FpdCB0aGlzLnN5c3RlbVRlc3QuY2xpY2sob3B0aW9uKVxuICAgICAgfSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5kZXggPT0gXCJudW1iZXJcIikge1xuICAgICAgYXdhaXQgd2FpdEZvcih7dGltZW91dDogNTAwMH0sIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9uc0NvbnRhaW5lclNlbGVjdG9yID0gYXdhaXQgdGhpcy5vcHRpb25zQ29udGFpbmVyU2VsZWN0b3IoKVxuICAgICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgdGhpcy5zeXN0ZW1UZXN0LmFsbChgJHtvcHRpb25zQ29udGFpbmVyU2VsZWN0b3J9IFtkYXRhLWNsYXNzPSdzZWxlY3Qtb3B0aW9uJ11gLCB7dXNlQmFzZVNlbGVjdG9yOiBmYWxzZX0pXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbnNbaW5kZXhdXG5cbiAgICAgICAgaWYgKCFvcHRpb24pIHRocm93IG5ldyBFcnJvcihgTm8gb3B0aW9uIGF0IGluZGV4OiAke2luZGV4fWApXG5cbiAgICAgICAgYXdhaXQgdGhpcy5zeXN0ZW1UZXN0LmNsaWNrKG9wdGlvbilcbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGV4dCkge1xuICAgICAgYXdhaXQgd2FpdEZvcih7dGltZW91dDogNTAwMH0sIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9uc0NvbnRhaW5lclNlbGVjdG9yID0gYXdhaXQgdGhpcy5vcHRpb25zQ29udGFpbmVyU2VsZWN0b3IoKVxuICAgICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgdGhpcy5zeXN0ZW1UZXN0LmFsbChgJHtvcHRpb25zQ29udGFpbmVyU2VsZWN0b3J9IFtkYXRhLWNsYXNzPSdzZWxlY3Qtb3B0aW9uJ11gLCB7dXNlQmFzZVNlbGVjdG9yOiBmYWxzZX0pXG5cbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIGNvbnN0IG9wdGlvblRleHQgPSAoYXdhaXQgb3B0aW9uLmdldFRleHQoKSkudHJpbSgpXG5cbiAgICAgICAgICBpZiAob3B0aW9uVGV4dCA9PT0gdGV4dCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zeXN0ZW1UZXN0LmNsaWNrKG9wdGlvbilcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gb3B0aW9uIGZvdW5kIHdpdGggdGV4dDogJHt0ZXh0fWApXG4gICAgICB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgdmFsdWUsIHRleHQsIG9yIGluZGV4IHdoZW4gc2VsZWN0aW5nIGFuIG9wdGlvblwiKVxuICB9XG59XG4iXX0=
|