@arsedizioni/ars-utils 18.4.6 → 18.4.8

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.
@@ -640,5 +640,25 @@ export class SystemUtils {
640
640
  });
641
641
  return nodes;
642
642
  }
643
+ /**
644
+ * Return the flags array to be used in selections
645
+ * @param value : the new value
646
+ * @param max: the max number of flags
647
+ */
648
+ static getFlags(value, max = 30) {
649
+ if (value) {
650
+ let items = [];
651
+ let v = 1;
652
+ let m = 1 << max;
653
+ while (v < m) {
654
+ if ((value & v) === v)
655
+ items.push(v);
656
+ v = v << 1;
657
+ }
658
+ return items;
659
+ }
660
+ else
661
+ return [];
662
+ }
643
663
  }
644
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NvcmUvc3lzdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBWTVDLE1BQU0sQ0FBTixJQUFZLFVBYVg7QUFiRCxXQUFZLFVBQVU7SUFDcEIsNkNBQVMsQ0FBQTtJQUNULDJDQUFRLENBQUE7SUFDUix1RUFBc0IsQ0FBQTtJQUN0QixpRUFBbUIsQ0FBQTtJQUNuQiwyRUFBd0IsQ0FBQTtJQUN4QiwyREFBZ0IsQ0FBQTtJQUNoQixtRUFBb0IsQ0FBQTtJQUNwQixpREFBVyxDQUFBO0lBQ1gseURBQWUsQ0FBQTtJQUNmLDBEQUFnQixDQUFBO0lBQ2hCLGtEQUFZLENBQUE7SUFDWiw0REFBaUIsQ0FBQSxDQUFTLGFBQWE7QUFDekMsQ0FBQyxFQWJXLFVBQVUsS0FBVixVQUFVLFFBYXJCO0FBRUQsTUFBTSxPQUFPLFdBQVc7SUFDdEI7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBSSxLQUE2QixFQUFFLEdBQVcsRUFBRSxLQUFVO1FBQzdFLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFLLElBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDakMsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxD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RixJQUFJLENBQUMsUUFBUTtnQkFDWCxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO29CQUNqQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1QsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBEYXRlSW50ZXJ2YWwgfSBmcm9tICcuL2RlZmluaXRpb25zJztcclxuaW1wb3J0IHsgZm9ybWF0LCBwYXJzZSwgcGFyc2VJU08sIHNldEhvdXJzIH0gZnJvbSAnZGF0ZS1mbnMnO1xyXG5pbXBvcnQgeyBpdCB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZSc7XHJcbmltcG9ydCB7IGZyb21ab25lZFRpbWUgfSBmcm9tICdkYXRlLWZucy10eic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElOb2RlIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIG5hbWU/OiBzdHJpbmcgfCBudWxsO1xyXG4gIGNvdW50PzogbnVtYmVyIHwgbnVsbDtcclxuICBjaGlsZHJlbj86IElOb2RlW10gfCBudWxsO1xyXG4gIHBhcmVudD86IElOb2RlIHwgbnVsbDtcclxuICBiYWc/OiBhbnkgfCBudWxsXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZW51bSBEYXRlRm9ybWF0IHtcclxuICBTaG9ydCA9IDEsICAgICAgICAgICAgICAgIC8vIGRkL21tL3l5eXlcclxuICBMb25nID0gMiwgICAgICAgICAgICAgICAgIC8vIGQgbW1tbSB5eXl5XHJcbiAgTG9uZ1dpdGhTaG9ydE1vbnRoID0gMywgICAvLyBkIG1tbSB5eXl5XHJcbiAgTG9uZ1dpdGhXZWVrRGF5ID0gNCwgICAgICAvLyB3d3d3LCBkIG1tbW0geXl5eVxyXG4gIExvbmdXaXRoU2hvcnRXZWVrRGF5ID0gNSwgLy8gd3d3LCBkIG1tbW0geXl5eVxyXG4gIE1vbnRoQW5kWWVhciA9IDYsICAgICAgICAgLy8gbW1tIHl5eXlcclxuICBMb25nTW9udGhBbmRZZWFyID0gNywgICAgIC8vIG1tbW0geXl5eVxyXG4gIFdlZWtEYXkgPSA4LCAgICAgICAgICAgICAgLy8gd3d3IGRcclxuICBMb25nV2Vla0RheSA9IDksICAgICAgICAgIC8vIHd3d3cgZFxyXG4gIERheUFuZE1vbnRoID0gMTAsICAgICAgICAgLy8gZCBtbW1tXHJcbiAgU2hvcnRVUyA9IDExLCAgICAgICAgICAgICAvLyBtbS9kZC95eXl5XHJcbiAgU2hvcnRJU084NjAxID0gMTIgICAgICAgICAvLyB5eXl5LW1tLWRkXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTeXN0ZW1VdGlscyB7XHJcbiAgLyoqXHJcbiAgICogQXJyYXkgZmluZCBieSBrZXlcclxuICAgKiBAcGFyYW0gYXJyYXkgICAgIDogdGhlIGFycmF5IHRvIHNjYW5cclxuICAgKiBAcGFyYW0ga2V5ICAgICAgIDoga2V5IG5hbWVcclxuICAgKiBAcGFyYW0gdmFsdWUgICAgIDogdGhlIHZhbHVlIHRvIHNlYXJjaCBmb3JcclxuICAgKiBAcmV0dXJucyAgICAgICAgIDogdGhlIHByb3BlcnR5IHZhbHVlIG9yIG51bGxcclxuICAgKi9cclxuICBzdGF0aWMgYXJyYXlGaW5kQnlLZXk8VD4oYXJyYXk6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQsIGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogVCB8IG51bGwge1xyXG4gICAgaWYgKCFhcnJheSkgcmV0dXJuIG51bGw7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyYXkpIHtcclxuICAgICAgaWYgKChpdGVtIGFzIGFueSlba2V5XSA9PT0gdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcnJheSBmaW5kIGluZGV4IGJ5IGtleVxyXG4gICAqIEBwYXJhbSBhcnJheSAgIDogdGhlIGFycmF5IHRvIHNjYW5cclxuICAgKiBAcGFyYW0ga2V5ICAgICA6IHRoZSBrZXkgbmFtZVxyXG4gICAqIEBwYXJhbSB2YWx1ZSAgIDogdGhlIHZhbHVlIHRvIHNlYXJjaCBmb3JcclxuICAgKiBAcmV0dXJucyAgICAgICA6IHRoZSBhcnJheSBpbmRleCBvciAtMSBpZiBub3QgZm91bmRcclxuICAgKi9cclxuICBzdGF0aWMgYXJyYXlGaW5kSW5kZXhCeUtleTxUPihhcnJheTogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBudW1iZXIge1xyXG4gICAgaWYgKCFhcnJheSkgcmV0dXJuIC0xO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoKGFycmF5W2ldIGFzIGFueSlba2V5XSA9PT0gdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gaTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGEgdmFsdWUgZnJvbSBhbmQgYXJyYXkgbWFkZSBvZiBuYW1lfHZhbHVlIGl0ZW1zXHJcbiAgICogQHBhcmFtIGFycmF5ICAgOiB0aGUgYXJyYXkgdG8gc2NhblxyXG4gICAqIEBwYXJhbSB2YWx1ZSAgIDogdGhlIHZhbHVlIHRvIHNlYXJjaCBmb3JcclxuICAgKiBAcmV0dXJucyAgICAgICA6IHRoZSBwcm9wZXJ0eSB2YWx1ZSBvciBudWxsIGlmIG5vdCBmb3VuZFxyXG4gICAqL1xyXG4gIHN0YXRpYyBhcnJheUdldFZhbHVlPFQ+KGFycmF5OiBUW10gfCBudWxsIHwgdW5kZWZpbmVkLCB2YWx1ZTogYW55KTogYW55IHtcclxuICAgIGlmICghYXJyYXkpIHJldHVybiBudWxsO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBpdGVtID0gKGFycmF5W2ldIGFzIGFueSk7XHJcbiAgICAgIGlmIChpdGVtLnZhbHVlID09PSB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBpdGVtLm5hbWUgfHwgaXRlbS5pZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0IGl0ZW1zIHRvIG5vZGVzIGludG8gYSB0cmVlIHN0cnVjdHVyZVxyXG4gICAqIEBwYXJhbSBpdGVtcyAgIDogbGlzdCBvZiBub2Rlc1xyXG4gICAqIEBwYXJhbSBwYXJlbnQgIDogcGFyZW50IG5vZGVcclxuICAgKiBAcmV0dXJucyAgICAgICA6IGFuIGFycmF5IG9mIElOb2RlIG9iamVjdHNcclxuICAgKi9cclxuICBzdGF0aWMgYXJyYXlUb05vZGVzKGl0ZW1zOiBJTm9kZVtdLCBwYXJlbnQ6IElOb2RlID0gbnVsbCk6IElOb2RlW10ge1xyXG4gICAgY29uc3Qgbm9kZXM6IElOb2RlW10gPSBbXTtcclxuICAgIGl0ZW1zLmZvckVhY2goKG4pID0+IHtcclxuICAgICAgY29uc3Qgbm9kZTogSU5vZGUgPSB7XHJcbiAgICAgICAgaWQ6IG4uaWQudG9TdHJpbmcoKSxcclxuICAgICAgICBuYW1lOiBuLm5hbWUsXHJcbiAgICAgICAgY291bnQ6IG4uY291bnQgPyBuLmNvdW50IDogMCxcclxuICAgICAgICBjaGlsZHJlbjogbnVsbCxcclxuICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgYmFnOiBuLFxyXG4gICAgICB9O1xyXG4gICAgICBub2Rlcy5wdXNoKG5vZGUpO1xyXG4gICAgICBub2RlLmNoaWxkcmVuID1cclxuICAgICAgICBuLmNoaWxkcmVuICYmIG4uY2hpbGRyZW4ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgPyB0aGlzLmFycmF5VG9Ob2RlcyhuLmNoaWxkcmVuLCBub2RlKVxyXG4gICAgICAgICAgOiBbXTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG5vZGVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXNlZCB0byBjb3BhcmUgaXRlbXMgZHVyaW5nIGFuIGFycmF5IG9mIG9iamVjdHMgc29ydGluZ1xyXG4gICAqIEBwYXJhbSBrZXkgICAgIDogdGhlIHByb3BlcnR5IG5hbWUgdG8gc29ydCBmb3JcclxuICAgKiBAcGFyYW0gb3JkZXIgICA6IHRoZSBvcmRlciAnYXNjJyBvciAnZGVzYydcclxuICAgKiBAcmV0dXJucyAgICAgICA6IDAgaWYgZXF1YWxzLCAxIGlmIGJpZ2dlciwgLTEgaWYgbG93ZXJcclxuICAgKi9cclxuICBzdGF0aWMgYXJyYXlTb3J0Q29tcGFyZShrZXk6IHN0cmluZywgb3JkZXI6IHN0cmluZyA9IFwiYXNjXCIpIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IGZ1bmN0aW9uIGlubmVyU29ydChhOiBhbnksIGI6IGFueSkge1xyXG4gICAgICBpZiAoIWEuaGFzT3duUHJvcGVydHkoa2V5KSB8fCAhYi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgLy8gcHJvcGVydHkgZG9lc24ndCBleGlzdCBvbiBlaXRoZXIgb2JqZWN0XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdmFyQSA9IHR5cGVvZiBhW2tleV0gPT09IFwic3RyaW5nXCIgPyBhW2tleV0udG9VcHBlckNhc2UoKSA6IGFba2V5XTtcclxuICAgICAgY29uc3QgdmFyQiA9IHR5cGVvZiBiW2tleV0gPT09IFwic3RyaW5nXCIgPyBiW2tleV0udG9VcHBlckNhc2UoKSA6IGJba2V5XTtcclxuICAgICAgbGV0IGNvbXBhcmlzb24gPSAwO1xyXG4gICAgICBpZiAodmFyQSA+IHZhckIpIGNvbXBhcmlzb24gPSAxO1xyXG4gICAgICBlbHNlIGlmICh2YXJBIDwgdmFyQikgY29tcGFyaXNvbiA9IC0xO1xyXG4gICAgICByZXR1cm4gb3JkZXIgPT09IFwiZGVzY1wiID8gY29tcGFyaXNvbiAqIC0xIDogY29tcGFyaXNvbjtcclxuICAgIH07XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0IHdlaWdodFxyXG4gICAqIEBwYXJhbSBnciAgICA6IGdyYW1zXHJcbiAgICogQHJldHVybnMgICAgIDogdGhlIGZvcm1hdHRlZCBzdHJpbmdcclxuICAgKi9cclxuICBzdGF0aWMgZm9ybWF0V2VpZ2h0KGdyOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKGdyID4gMTAwMDAwMCkgcmV0dXJuIChnciAvIDEwMDAwMDApLnRvRml4ZWQoMikgKyBcIiB0XCI7XHJcbiAgICBlbHNlIGlmIChnciA+IDEwMDAwMCkgcmV0dXJuIChnciAvIDEwMDAwMCkudG9GaXhlZCgyKSArIFwiIHFcIjtcclxuICAgIGVsc2UgaWYgKGdyID4gMTAwMCkgcmV0dXJuIChnciAvIDEwMDApLnRvRml4ZWQoMikgKyBcIiBrZ1wiO1xyXG4gICAgZWxzZSByZXR1cm4gZ3IgKyBcIiBnclwiO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0IGZpbGUgc2l6ZVxyXG4gICAqIEBwYXJhbSBieXRlcyA6IG51bWJlciBvZiBieXRlc1xyXG4gICAqIEByZXR1cm5zICAgICA6IHRoZSBmb3JtYXR0ZWQgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIGZvcm1hdEZpbGVTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKGJ5dGVzID4gMTAyNDAwMCkgcmV0dXJuIChieXRlcyAvIDEwMjQwMDApLnRvRml4ZWQoMSkgKyBcIiBNQlwiO1xyXG4gICAgaWYgKGJ5dGVzID4gMTAyNCkgcmV0dXJuIChieXRlcyAvIDEwMjQpLnRvRml4ZWQoMSkgKyBcIiBLYlwiO1xyXG4gICAgcmV0dXJuIGJ5dGVzICsgXCIgYnl0ZVwiO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcGFyZSB0d28gc3RyaW5nXHJcbiAgICogQHBhcmFtIGEgICA6IHN0cmluZyBhXHJcbiAgICogQHBhcmFtIGIgICA6IHN0cmluZyBiXHJcbiAgICogQHJldHVybnMgICA6IDAgaWYgZXF1YWxzLCAxIGlmIGJpZ2dlciwgLTEgaWYgbG93ZXJcclxuICAgKi9cclxuICBzdGF0aWMgY29tcGFyZVN0cmluZyhhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBpZiAoKGEgPz8gXCJcIikudG9Mb3dlckNhc2UoKSA+IChiID8/IFwiXCIpLnRvTG93ZXJDYXNlKCkpIHJldHVybiAxO1xyXG4gICAgaWYgKChhID8/IFwiXCIpLnRvTG93ZXJDYXNlKCkgPCAoYiA/PyBcIlwiKS50b0xvd2VyQ2FzZSgpKSByZXR1cm4gLTE7XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhcGl0YWxpemUgYSBzdHJpbmdcclxuICAgKiBAcGFyYW0gcyAgIDogdGhlIHN0cmluZyB0byBjYXBpdGFsaXplXHJcbiAgICogQHJldHVybnMgICA6IHRoZSBjYXBpdGFsaXplZCBzdHJpbmcgIFxyXG4gICAqL1xyXG4gIHN0YXRpYyBjYXBpdGFsaXplKHM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXMpIHJldHVybiBudWxsO1xyXG4gICAgbGV0IGIgPSBcIlwiO1xyXG4gICAgbGV0IGNhcCA9IHRydWU7XHJcbiAgICBmb3IgKGNvbnN0IGNoYXIgb2Ygcykge1xyXG4gICAgICBpZiAoY2hhciA9PT0gXCIgXCIpIHtcclxuICAgICAgICBiICs9IGNoYXI7XHJcbiAgICAgICAgY2FwID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChjYXApIHtcclxuICAgICAgICBiICs9IGNoYXIudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBjYXAgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBiICs9IGNoYXIudG9Mb3dlckNhc2UoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcnVuY2F0ZSBhIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBzICAgICA6IHRoZSBzdHJpbmcgdG8gdHJ1bmNhdGVcclxuICAgKiBAcGFyYW0gbWF4ICAgOiB0aGUgbWF4IG51bWJlciBvZiBjaGFyc1xyXG4gICAqIEByZXR1cm5zICAgICA6IHRoZSB0cnVuY2F0ZWQgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIHRydW5jYXRlKHM6IHN0cmluZywgbWF4OiBudW1iZXIgPSA1MDApOiBzdHJpbmcge1xyXG4gICAgaWYgKCFzKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChzLmxlbmd0aCA8IG1heCkgcmV0dXJuIHM7XHJcbiAgICBsZXQgaSA9IG1heCAtIDE7XHJcbiAgICB3aGlsZSAoaSA+IDApIHtcclxuICAgICAgaWYgKHNbaV0gPT09ICcgJykgcmV0dXJuIHMuc2xpY2UoMCwgaSk7XHJcbiAgICAgIGktLTtcclxuICAgIH1cclxuICAgIHJldHVybiBzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSm9pbiBhIGxpc3Qgb2Ygc3RyaW5nc1xyXG4gICAqIEBwYXJhbSBpdGVtcyAgICAgOiB0aGUgbGlzdCBvZiBzdHJpbmdzXHJcbiAgICogQHBhcmFtIHNlcCAgICAgICA6IHRoZSBzZXBhcmF0b3Igc3RyaW5nXHJcbiAgICogQHBhcmFtIG1heCAgICAgICA6IHRoZSBtYXhpbXVtIHJlc3VsdGluZyBzdHJpbmdcclxuICAgKiBAcmV0dXJucyAgICAgICAgIDogdGhlIGpvaW5lZCBzdHJpbmdcclxuICAgKi9cclxuICBzdGF0aWMgam9pbihpdGVtczogc3RyaW5nW10sIHNlcDogc3RyaW5nID0gXCIgXCIsIG1heDogbnVtYmVyID0gMzUwKTogc3RyaW5nIHtcclxuICAgIGlmICghaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChpdGVtcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGxldCBsID0gMDtcclxuICAgICAgbGV0IHMgPSBcIlwiXHJcbiAgICAgIHdoaWxlIChzLmxlbmd0aCA8IG1heCAmJiBpdGVtcy5sZW5ndGggPiBsKSB7XHJcbiAgICAgICAgaWYgKGwgPiAwKSB7XHJcbiAgICAgICAgICBzICs9IHNlcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcyArPSBpdGVtc1tsKytdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPiBsKSB7XHJcbiAgICAgICAgcyArPSBcIi4uLlwiO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGl0ZW1zWzBdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVwbGFjZSBzdHVmZiBpbiB0ZXh0IGh0bWxcclxuICAgKiBAcGFyYW0gcyAgIDogdGhlIHN0cmluZyB0byBwcm9jZXNzXHJcbiAgICogQHJldHVybnMgICA6IHRoZSByZXBsYWNlZCBzdHJpbmcgIFxyXG4gICAqL1xyXG4gIHN0YXRpYyByZXBsYWNlQXNIdG1sKHM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByZWdleCA9IC9odHRwcz86XFwvXFwvLipbXlxcc10vaWdcclxuICAgIGNvbnN0IG0gPSByZWdleC5leGVjKHMpO1xyXG4gICAgaWYgKG0gJiYgbS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCB2ID0gbnVsbDtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdiA9IG1baV07XHJcbiAgICAgICAgcyA9IHMucmVwbGFjZSh2LCAnPGEgaHJlZj1cIicgKyB2ICsgJ1wiIHRhcmdldD1cIl9ibGFua1wiPicgKyB2ICsgJzwvYT4nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb21wYXJlIHR3byBuYW1lc1xyXG4gICAqIEBwYXJhbSBhICAgOiBuYW1lIGFcclxuICAgKiBAcGFyYW0gYiAgIDogbmFtZSBiXHJcbiAgICogQHJldHVybnMgICA6IHRydWUgaWYgYSBlcXVhbHMgYlxyXG4gICAqL1xyXG4gIHN0YXRpYyBjb21wYXJlTmFtZXMoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmIChhKSBhID0gYS50cmltKCk7XHJcbiAgICBpZiAoYikgYiA9IGIudHJpbSgpO1xyXG4gICAgaWYgKGEgJiYgYiAmJiBhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLmNvbXBhcmVTdHJpbmcoYSwgYikgPT09IDApIHJldHVybiB0cnVlO1xyXG4gICAgY29uc3QgcDEgPSBhLnNwbGl0KFwiIFwiKTtcclxuICAgIGNvbnN0IHAyID0gYi5zcGxpdChcIiBcIik7XHJcbiAgICBpZiAocDEubGVuZ3RoICE9PSBwMi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgIGxldCBtYXRjaGVzID0gcDEubGVuZ3RoO1xyXG4gICAgZm9yIChjb25zdCBzMSBvZiBwMSkge1xyXG4gICAgICBmb3IgKGNvbnN0IHMyIG9mIHAyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29tcGFyZVN0cmluZyhzMSwgczIpID09PSAwKSB7XHJcbiAgICAgICAgICBtYXRjaGVzLS07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWF0Y2hlcyA9PT0gMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENpcGhlciBhIHRleHRcclxuICAgKiBAcGFyYW0gdGV4dCAgICA6IHRoZSB0ZXh0XHJcbiAgICogQHBhcmFtIGtleSAgICAgOiB0aGUga2V5XHJcbiAgICogQHBhcmFtIHJldmVyc2UgOiB0cnVlIHRvIGRlY29kZSwgZmFsc2UgdG8gZW5jb2RlXHJcbiAgICogQHJldHVybnMgICAgICAgOnRoZSBjaXBoZXJlZCB0ZXh0XHJcbiAgICovXHJcbiAgc3RhdGljIGNpcGhlcih0ZXh0OiBzdHJpbmcsIGtleTogc3RyaW5nLCByZXZlcnNlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xyXG4gICAgLy8gU3Vycm9nYXRlIHBhaXIgbGltaXRcclxuICAgIHZhciBib3VuZCA9IDB4MTAwMDA7XHJcblxyXG4gICAgLy8gQ3JlYXRlIHN0cmluZyBmcm9tIGNoYXJhY3RlciBjb2Rlc1xyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIC8vIFR1cm4gc3RyaW5nIHRvIGNoYXJhY3RlciBjb2Rlc1xyXG4gICAgICB0ZXh0LnNwbGl0KFwiXCIpLm1hcChmdW5jdGlvbiAodjogYW55LCBpOiBudW1iZXIpIHtcclxuICAgICAgICAvLyBHZXQgcm90YXRpb24gZnJvbSBrZXlcclxuICAgICAgICB2YXIgcm90YXRpb24gPSBrZXkuY2hhckNvZGVBdChpICUga2V5Lmxlbmd0aCk7XHJcblxyXG4gICAgICAgIC8vIEFyZSB3ZSBkZWNyeXB0aW5nP1xyXG4gICAgICAgIGlmIChyZXZlcnNlKSByb3RhdGlvbiA9IC1yb3RhdGlvbjtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIGN1cnJlbnQgY2hhcmFjdGVyIGNvZGUgKyByb3RhdGlvblxyXG4gICAgICAgIHJldHVybiAodi5jaGFyQ29kZUF0KCkgKyByb3RhdGlvbiArIGJvdW5kKSAlIGJvdW5kO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb25lIGFuIG9iamVjdCB1c2luZyBKU09OXHJcbiAgICogQHBhcmFtIG9iaiA6IHRoZSBvYmxlY3QgdG8gY2xvbmVcclxuICAgKiBAcmV0dXJucyAgIDogYSBuZXcgb2JqZWN0XHJcbiAgICovXHJcbiAgc3RhdGljIGNsb25lKG9iajogYW55KTogYW55IHtcclxuICAgIGlmICghb2JqKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvbmUgYW4gb2JqZWN0IHVzaW5nIGRlZXAgY2xvbmluZ1xyXG4gICAqIEBwYXJhbSBvYmogICA6IHRoZSBvYmxlY3QgdG8gY2xvbmVcclxuICAgKiBAcmV0dXJucyAgICAgOiBhIG5ldyBvYmplY3RcclxuICAgKi9cclxuICBzdGF0aWMgZGVlcENsb25lPFQ+KG9iajogYW55LCBkZXN0OiBUID0gbnVsbCk6IFQge1xyXG4gICAgY29uc3QgY2xvbmVPYmogPSBkZXN0ID8gZGVzdCA6IChvYmouY29uc3RydWN0b3IoKSBhcyBhbnkpO1xyXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IE9iamVjdC5rZXlzKG9iaik7XHJcbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzKSB7XHJcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gb2JqW2F0dHJpYnV0ZV07XHJcbiAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09IFwib2JqZWN0XCIgJiYgcHJvcGVydHkgIT0gbnVsbCkge1xyXG4gICAgICAgIGNsb25lT2JqW2F0dHJpYnV0ZV0gPSB0aGlzLmRlZXBDbG9uZShwcm9wZXJ0eSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2xvbmVPYmpbYXR0cmlidXRlXSA9IHByb3BlcnR5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xvbmVPYmo7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgYSBzdHJpbmcgaXMgYSB2YWxpZCBVVUlEXHJcbiAgICogQHBhcmFtIHZhbHVlICAgOiB0aGUgdmFsdWUgdG8gcGFyc2VcclxuICAgKiBAcmV0dXJucyAgICAgICA6IHRydWUgaWYgaXMgYSB2YWxpZCBVVUlEXHJcbiAgICovXHJcbiAgc3RhdGljIHBhcnNlVVVJRCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCByZWdleCA9IC9eKHt8KCk/WzAtOWEtZkEtRl17OH0tKFswLTlhLWZBLUZdezR9LSl7M31bMC05YS1mQS1GXXsxMn0ofXwpKT8kLztcclxuICAgIHJldHVybiByZWdleC50ZXN0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhcnNlIGFuZCBlbnN1cmUgdGhhdCBVVUlEIGlzIG5vdCBlbXB0eVxyXG4gICAqIEBwYXJhbSB2YWx1ZSAgIDogdGhlIHZhbHVlIHRvIHBhcnNlXHJcbiAgICogQHJldHVybnMgICAgICAgOiB0cnVlIGlmIHZhbGlkIGFuZCBub3QgZW1wdHlcclxuICAgKi9cclxuICBzdGF0aWMgcGFyc2VVVUlETm90RW1wdHkodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcmVnZXggPSAvXih7fCgpPzB7OH0tKDB7NH0tKXszfTB7MTJ9KH18KSk/JC87XHJcbiAgICByZXR1cm4gdGhpcy5wYXJzZVVVSUQodmFsdWUpICYmICFyZWdleC50ZXN0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhbiBlbXB0eSBVVUlEXHJcbiAgICogQHJldHVybnMgOiB0aGUgZW1wdHkgVVVJRFxyXG4gICAqL1xyXG4gIHN0YXRpYyBlbXB0eVVVSUQoKTogc3RyaW5nIHsgcmV0dXJuIFwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IFVVSURcclxuICAgKiBAcmV0dXJucyA6IHRoZSBzdHJpbmcgVVVJRFxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZW5lcmF0ZVVVSUQoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlZ2V4ID0gL1t4eV0vZztcclxuICAgIHJldHVybiBcInh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eFwiLnJlcGxhY2UocmVnZXgsIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgIHZhciByID0gKE1hdGgucmFuZG9tKCkgKiAxNikgfCAwLFxyXG4gICAgICAgIHYgPSBjID09PSBcInhcIiA/IHIgOiAociAmIDB4MykgfCAweDg7XHJcbiAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2UgYSB0ZXh0IGFuZCByZXR1cm4gdHJ1ZSBpZiBpcyBhIHZhbGlkIGVtYWlsIG9yIG51bGxcclxuICAgKiBAcGFyYW0gdmFsdWUgOiBlbWFpbFxyXG4gICAqIEByZXR1cm5zICAgICA6IHRydWUgaWYgdGhlIGVtYWlsIGlzIHZhbGlkIG9yIGVtcHR5XHJcbiAgICovXHJcbiAgc3RhdGljIHBhcnNlRW1haWwodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHRydWU7XHJcbiAgICBjb25zdCByZWdleCA9IC8oPzpbYS16MC05KyEjJCUmJyorXFwvPT9eX2B7fH1+LV0rKD86XFwuW2EtejAtOSEjJCUmJyorXFwvPT9eX2B7fH1+LV0rKSp8XCIoPzpbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHgyMVxceDIzLVxceDViXFx4NWQtXFx4N2ZdfFxcXFxbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGUtXFx4N2ZdKSpcIilAKD86KD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1xcLikrW2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP3xcXFsoPzooPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldP3xbYS16MC05LV0qW2EtejAtOV06KD86W1xceDAxLVxceDA4XFx4MGJcXHgwY1xceDBlLVxceDFmXFx4MjEtXFx4NWFcXHg1My1cXHg3Zl18XFxcXFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZS1cXHg3Zl0pKylcXF0pL2dpXHJcbiAgICByZXR1cm4gcmVnZXgudGVzdCh2YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJzZSBhIHRleHQgYW5kIHJldHVybiB0cnVlIGlmIGlzIGEgdmFsaWQgdXJsIG9yIG51bGxcclxuICAgKiBAcGFyYW0gdmFsdWUgOiB0aGUgdXJsIHRvIHBhcnNlXHJcbiAgICogQHJldHVybnMgICAgIDogdHJ1ZSBpZiB0aGUgdXJsIGlzIHZhbGlkIG9yIGVtcHR5XHJcbiAgICovXHJcbiAgc3RhdGljIHBhcnNlVXJsKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiB0cnVlO1xyXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFxyXG4gICAgICBcIihodHRwcz86Ly8pPyhbXFxcXGRhLXouLV0rKVxcXFwuKFthLXouXXsyLDZ9KVsvXFxcXHcgLi1dKi8/XCJcclxuICAgICk7XHJcbiAgICByZXR1cm4gcmVnZXgudGVzdCh2YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZGF0ZSBwYXJ0cyBmcm9tIGEgc3RyaW5nIHZhbHVlXHJcbiAgICogQHBhcmFtIHZhbHVlICAgOiB0aGUgc3RyaW5nIHRvIHBhcnNlXHJcbiAgICogQHJldHVybnMgICAgICAgOiBhbiBhcnJheSBvZiBudW1iZXJzIHdpdGggeWVhciwgbW9udGgsIGRheVxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZXREYXRlUGFydHModmFsdWU6IHN0cmluZyk6IG51bWJlcltdIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xyXG4gICAgbGV0IHBhcnRzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgaWYgKHZhbHVlLmluZGV4T2YoXCItXCIpICE9PSAtMSkge1xyXG4gICAgICBjb25zdCBwID0gdmFsdWUuc3BsaXQoXCItXCIpO1xyXG4gICAgICBpZiAocC5sZW5ndGggIT09IDMpIHJldHVybiBudWxsO1xyXG4gICAgICBwYXJ0cyA9IFtwYXJzZUludChwWzBdKSwgcGFyc2VJbnQocFsxXSkgLSAxLCBwYXJzZUludChwWzJdKV07XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlLmluZGV4T2YoXCIvXCIpICE9PSAtMSkge1xyXG4gICAgICBjb25zdCBwID0gdmFsdWUuc3BsaXQoXCIvXCIpO1xyXG4gICAgICBpZiAocC5sZW5ndGggIT09IDMpIHJldHVybiBudWxsO1xyXG4gICAgICBwYXJ0cyA9IFtwYXJzZUludChwWzJdKSwgcGFyc2VJbnQocFsxXSkgLSAxLCBwYXJzZUludChwWzBdKV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFydHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJzZSBhIGRhdGVcclxuICAgKiBAcGFyYW0gdmFsdWUgICA6IHRoZSB2YWx1ZSB0byBjaGVja1xyXG4gICAqIEBwYXJhbSBsb2NhbGUgIDogdGhlIGxvY2FsZSB0byB1c2VcclxuICAgKiBAcmV0dXJucyAgICAgICA6IGEgdmFsaWQgRGF0ZSBvYmplY3Qgb3IgbnVsbFxyXG4gICAqL1xyXG4gIHN0YXRpYyBwYXJzZURhdGUodmFsdWU6IHN0cmluZyB8IERhdGUsIGxvY2FsZTogYW55ID0gaXQpOiBEYXRlIHtcclxuICAgIC8vIE5vIHZhbHVlIGF0IGFsbFxyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XHJcbiAgICAvLyBBIERhdGUgdmFsdWVcclxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgdmFsdWUuZ2V0VGltZSgpKSByZXR1cm4gdmFsdWU7XHJcbiAgICAvLyBQYXJzZSBrbm93biBmb3JtYXRzIHVzaW5nIGRhdGUtZm5zXHJcbiAgICBsZXQgZCA9IHBhcnNlSVNPKHZhbHVlIGFzIHN0cmluZyk7XHJcbiAgICBpZiAoZCAmJiBkLmdldFRpbWUoKSAmJiBkLmdldEZ1bGxZZWFyKCkgPiAxNzUwKSByZXR1cm4gZDtcclxuICAgIGQgPSBwYXJzZSh2YWx1ZSBhcyBzdHJpbmcsICdkZC9NTS95eXl5JywgbmV3IERhdGUoKSwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgIGlmIChkICYmIGQuZ2V0VGltZSgpICYmIGQuZ2V0RnVsbFllYXIoKSA+IDE3NTApIHJldHVybiBkO1xyXG4gICAgZCA9IHBhcnNlKHZhbHVlIGFzIHN0cmluZywgJ3l5eXktTU0tZGQnLCBuZXcgRGF0ZSgpLCB7IGxvY2FsZTogbG9jYWxlIH0pO1xyXG4gICAgaWYgKGQgJiYgZC5nZXRUaW1lKCkgJiYgZC5nZXRGdWxsWWVhcigpID4gMTc1MCkgcmV0dXJuIGQ7XHJcbiAgICAvLyBQYXJzZSB2YWx1ZXMgbWFudWFsbHlcclxuICAgIGxldCBwYXJ0cyA9IHRoaXMuZ2V0RGF0ZVBhcnRzKHZhbHVlIGFzIHN0cmluZyk7XHJcbiAgICBpZiAocGFydHNbMF0gPCAxMDApIHBhcnRzWzBdICs9IDIwMDA7XHJcbiAgICBpZiAoaXNOYU4ocGFydHNbMF0pIHx8IHBhcnRzWzBdIDwgMCB8fCBwYXJ0c1swXSA8IDE3NTApIHJldHVybiBudWxsO1xyXG4gICAgaWYgKGlzTmFOKHBhcnRzWzFdKSB8fCBwYXJ0c1sxXSA8IDApIHJldHVybiBudWxsO1xyXG4gICAgaWYgKGlzTmFOKHBhcnRzWzJdKSB8fCBwYXJ0c1syXSA8IDApIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHBhcnRzWzFdID4gMTEpIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHBhcnRzWzFdID09PSAxICYmIHBhcnRzWzJdID4gMjkpIHJldHVybiBudWxsO1xyXG4gICAgZWxzZSBpZiAocGFydHNbMV0gIT09IDEgJiYgcGFydHNbMl0gPiAzMSkgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gbmV3IERhdGUocGFydHNbMF0sIHBhcnRzWzFdLCBwYXJ0c1syXSwgMik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JtYXQgYSBkYXRlXHJcbiAgICogQHBhcmFtIHZhbHVlICAgICA6IHRoZSBkYXRlIG9yIHN0cmluZyB0byBmb3JtYXRcclxuICAgKiBAcGFyYW0gZm10ICAgICAgIDogdGhlIERhdGVGb3JtYXQgdG8gdXNlIG9yIHRoZSBzdHJpbmcgcGF0dGVyblxyXG4gICAqIEBwYXJhbSBsb2NhbGUgICAgOiB0aGUgbG9jYWxlIHRvIHVzZSAoZGVmYXVsdCBpcyBJVClcclxuICAgKiBAcmV0dXJucyAgICAgICAgIDogdGhlIGZvcm1hdHRlZCBzdHJpbmdcclxuICAgKi9cclxuICBzdGF0aWMgZm9ybWF0RGF0ZShcclxuICAgIHZhbHVlOiBEYXRlIHwgc3RyaW5nLFxyXG4gICAgZm10OiBEYXRlRm9ybWF0IHwgc3RyaW5nID0gRGF0ZUZvcm1hdC5TaG9ydCxcclxuICAgIGxvY2FsZTogYW55ID0gaXQpOiBzdHJpbmcge1xyXG4gICAgLy8gTm8gdmFsdWUgYXQgYWxsXHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcclxuICAgIC8vIEEgc3RyaW5nXHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZylcclxuICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xyXG4gICAgLy8gTm90IGEgZGF0ZSBcclxuICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiB2YWx1ZS5nZXRUaW1lKCkpKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIC8vIEZvcm1hdFxyXG4gICAgc3dpdGNoIChmbXQpIHtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LlNob3J0OiByZXR1cm4gZm9ybWF0KHZhbHVlLCBcImRkL01NL3l5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0Lkxvbmc6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiZCBNTU1NIHl5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LkxvbmdXaXRoU2hvcnRNb250aDogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJkIE1NTSB5eXl5XCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5Mb25nV2l0aFdlZWtEYXk6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiRUVFRSwgZCBNTU1NIHl5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LkxvbmdXaXRoU2hvcnRXZWVrRGF5OiByZXR1cm4gZm9ybWF0KHZhbHVlLCBcIkVFRSwgZCBNTU1NIHl5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0Lk1vbnRoQW5kWWVhcjogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJNTU0geXl5eVwiLCB7IGxvY2FsZTogbG9jYWxlIH0pO1xyXG4gICAgICBjYXNlIERhdGVGb3JtYXQuTG9uZ01vbnRoQW5kWWVhcjogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJNTU1NIHl5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LldlZWtEYXk6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiRUVFLCBkXCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5Mb25nV2Vla0RheTogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJFRUVFLCBkXCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5EYXlBbmRNb250aDogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJkIE1NTU1cIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LlNob3J0VVM6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiTU0vZGQveXl5eVwiLCB7IGxvY2FsZTogbG9jYWxlIH0pO1xyXG4gICAgICBjYXNlIERhdGVGb3JtYXQuU2hvcnRJU084NjAxOiByZXR1cm4gZm9ybWF0KHZhbHVlLCBcInl5eXktTU0tZGRcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZm9ybWF0KHZhbHVlLCBmbXQsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYW4gaXRhbGlhbiBsb2NhbCBkYXRlXHJcbiAgICogQHBhcmFtIHZhbHVlICA6IHRoZSBkYXRlXHJcbiAgICogQHJldHVybnMgICAgIDogdGhlIG5ldyBkYXRlXHJcbiAgICovXHJcbiAgc3RhdGljIHRvTG9jYWxEYXRlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKTogRGF0ZSB7XHJcbiAgICAvLyBObyB2YWx1ZSBhdCBhbGxcclxuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xyXG4gICAgLy8gQSBzdHJpbmdcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKVxyXG4gICAgICB2YWx1ZSA9IHRoaXMucGFyc2VEYXRlKHZhbHVlIGFzIHN0cmluZyk7XHJcbiAgICAvLyBOb3QgYSBkYXRlXHJcbiAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgdmFsdWUuZ2V0VGltZSgpKSkgcmV0dXJuIG51bGw7XHJcbiAgICAvLyBVcGRhdGUgZGF0ZVxyXG4gICAgcmV0dXJuIHNldEhvdXJzKHZhbHVlLCAyKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgYSBEYXRlSW50ZXJ2YWwgb2JqZWN0IGFjY29yZGluZyB0byBhIHN0cmluZ1xyXG4gICAqIEBwYXJhbSB2YWx1ZSAgICAgICA6IHN0cmluZyB2YWx1ZVxyXG4gICAqIEBwYXJhbSBpbnRlcnZhbCAgICA6IERhdGVJbnRlcnZhbCB2YWx1ZSB0byB1cGRhdGVcclxuICAgKiBAcGFyYW0gZW5kICAgICAgICAgOiB0cnVlIGlmIG11c3QgYmUgdXBkYXRlZCB0aGUgZmlyc3Qgb3IgdGhlIGVuZCB2YWx1ZSBcclxuICAgKiBAcGFyYW0gY29weSAgICAgICAgOiBjb3B5IHRoZSBzYW1lIHZhbHVlICh3b3JrcyBvbmx5IGlmIG5vdCBlbmQgZWxlbWVudClcclxuICAgKi9cclxuICBzdGF0aWMgY2hhbmdlRGF0ZUludGVydmFsKHZhbHVlOiBzdHJpbmcsIGludGVydmFsOiBEYXRlSW50ZXJ2YWwsIGVuZDogYm9vbGVhbiA9IGZhbHNlLCBjb3B5OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBsZXQgeWVhciA9IC0xO1xyXG4gICAgICBpZiAodmFsdWUubGVuZ3RoID09PSA0ICYmICh5ZWFyID0gcGFyc2VJbnQodmFsdWUpKSA+IDE3NTApIHtcclxuICAgICAgICBpZiAoIWVuZCkge1xyXG4gICAgICAgICAgaW50ZXJ2YWwuZnJvbSA9IGZyb21ab25lZFRpbWUobmV3IERhdGUoeWVhciwgMCwgMSksICdVVEMnKTtcclxuICAgICAgICAgIGludGVydmFsLnRvID0gZnJvbVpvbmVkVGltZShuZXcgRGF0ZSh5ZWFyLCAxMSwgMzEpLCAnVVRDJyk7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICBpbnRlcnZhbC50byA9IG5ldyBEYXRlKHllYXIsIDExLCAzMSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IHBhcnRzID0gdGhpcy5nZXREYXRlUGFydHModmFsdWUpO1xyXG4gICAgICAgIGlmICghcGFydHMgfHwgaXNOYU4ocGFydHNbMF0pIHx8IHBhcnRzWzBdIDwgMCB8fCBwYXJ0c1swXSA8IDE3NTApIHJldHVybjtcclxuICAgICAgICBjb25zdCBkID0gZnJvbVpvbmVkVGltZShuZXcgRGF0ZShwYXJ0c1swXSwgcGFydHNbMV0sIHBhcnRzWzJdKSwgJ1VUQycpO1xyXG4gICAgICAgIGlmIChlbmQpXHJcbiAgICAgICAgICBpbnRlcnZhbC50byA9IGQ7XHJcbiAgICAgICAgZWxzZSBpZiAoY29weSkge1xyXG4gICAgICAgICAgaW50ZXJ2YWwuZnJvbSA9IGQ7XHJcbiAgICAgICAgICBpbnRlcnZhbC50byA9IGQ7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICBpbnRlcnZhbC5mcm9tID0gZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW5jb2RlIHVybFxyXG4gICAqIEBwYXJhbSB2YWx1ZSA6IHRoZSB2YWx1ZSB0byBlbmNvZGVcclxuICAgKiBAcmV0dXJucyAgICAgOiB0aGUgdXJsIGVuY29kZWQgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIHVybEVuY29kZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVjb2RlIHVybFxyXG4gICAqIEBwYXJhbSB2YWx1ZSA6IHRoZSB1cmwgdG8gZGVjb2RlXHJcbiAgICogQHJldHVybnMgICAgIDogdGhlIGRlY29kZSB1cmwgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIHVybERlY29kZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlZ2V4ID0gL1xcKy9nO1xyXG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCgodmFsdWUgKyBcIlwiKS5yZXBsYWNlKHJlZ2V4LCBcIiUyMFwiKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYSBxdWVyeXN0cmluZyBwYXJhbWV0ZXIgdmFsdWVcclxuICAgKiBAcGFyYW0gbmFtZSAgOiB0aGUgcGFyYW1ldGVyIG5hbWVcclxuICAgKiBAcmV0dXJucyAgICAgOiB0aGUgc3RyaW5nIHZhbHVlXHJcbiAgICovXHJcbiAgc3RhdGljIGdldFF1ZXJ5U3RyaW5nVmFsdWVCeU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIoKSkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgIGlmICh1cmwuaW5jbHVkZXMoXCI/XCIpKSB7XHJcbiAgICAgIGNvbnN0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcyh7IGZyb21TdHJpbmc6IHVybC5zcGxpdChcIj9cIilbMV0gfSk7XHJcbiAgICAgIGNvbnN0IHYgPSBkZWNvZGVVUklDb21wb25lbnQoaHR0cFBhcmFtcy5nZXQobmFtZSkpO1xyXG4gICAgICBpZiAodiAhPT0gXCJudWxsXCIpIHJldHVybiB2O1xyXG4gICAgICBlbHNlIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZSBhIHBhc3N3b3JkXHJcbiAgICogQHJldHVybnMgOiB0aGUgcGFzc3dvcmQgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIGdlbmVyYXRlUGFzc3dvcmQoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJhbmRvbSA9IFwiJFwiICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoLTcpO1xyXG4gICAgbGV0IHBhc3N3b3JkID0gXCJcIjtcclxuICAgIGxldCBoYXNVcHBlckNhc2UgPSBmYWxzZTtcclxuICAgIGZvciAoY29uc3Qgcm5kIG9mIHJhbmRvbSkge1xyXG4gICAgICBpZiAoIWhhc1VwcGVyQ2FzZSAmJiBcImFiY2RlZmdoamlsbW5vcHFyc3R1dnl3eHpcIi5pbmNsdWRlcyhybmQpKSB7XHJcbiAgICAgICAgcGFzc3dvcmQgKz0gcm5kLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgaGFzVXBwZXJDYXNlID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwYXNzd29yZCArPSBybmQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghaGFzVXBwZXJDYXNlKVxyXG4gICAgICBwYXNzd29yZCA9IHBhc3N3b3JkLnN1YnN0cmluZygwLCA3KSArIFwiTVwiO1xyXG4gICAgcmV0dXJuIHBhc3N3b3JkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgY3VycmVudCBicm93c2VyIHN1cHBvcnRzIHRvdWNoXHJcbiAgICogQHJldHVybnMgOiB0cnVlIGlmIHRoZSBkaXNwbGF5IGlzIHRvdWNoYWJsZVxyXG4gICAqL1xyXG4gIHN0YXRpYyBpc1RvdWNoYWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuaXNCcm93c2VyKCkgJiYgKFxyXG4gICAgICAgIFwib250b3VjaHN0YXJ0XCIgaW4gd2luZG93IHx8XHJcbiAgICAgICAgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIGNoZWNrIHdpbGwgcHJldmVudCAnd2luZG93JyBsb2dpYyB0byBiZSBleGVjdXRlZFxyXG4gICAqIHdoaWxlIGV4ZWN1dGluZyB0aGUgc2VydmVyIHJlbmRlcmluZ1xyXG4gICAqIEByZXR1cm5zIDogdHJ1ZSBpZiB1c2luZyB0aGUgYnJvd3NlclxyXG4gICAqL1xyXG4gIHN0YXRpYyBpc0Jyb3dzZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mICh3aW5kb3cpICE9PSAndW5kZWZpbmVkJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBDb252ZXJ0IGZvbGRlcnMgaW4gYSB0cmVlIG9mIE5vZGUgb2JqZWN0LlxyXG4gKiBAcGFyYW0gZm9sZGVycyA6IHRoZSBzdWJmb2xkZXJzIGdyb3VwIG9yIG51bGwgdG8gcm9vdFxyXG4gKiBAcmV0dXJucyAgICAgICA6IGEgbm9kZSBsaXN0XHJcbiAqL1xyXG4gIHN0YXRpYyB0b05vZGVzKGZvbGRlcnM6IElOb2RlW10pOiBJTm9kZVtdIHtcclxuICAgIHJldHVybiB0aGlzLl90b05vZGVzKGZvbGRlcnMsIHVuZGVmaW5lZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0IGZvbGRlcnMgaW4gYSB0cmVlIG9mIE5vZGUgb2JqZWN0LlxyXG4gICAqIEBwYXJhbSBmb2xkZXJzIDogdGhlIGNoaWxkcmVuIGdyb3VwIG9yIG51bGwgdG8gcm9vdFxyXG4gICAqIEBwYXJhbSBwYXJlbnQgIDogdGhlIHBhcmVudCBub2RlXHJcbiAgICogQHJldHVybnMgICAgICAgOiBhIG5vZGUgbGlzdCBcclxuICAgKi9cclxuICBwcml2YXRlIHN0YXRpYyBfdG9Ob2Rlcyhmb2xkZXJzOiBJTm9kZVtdLCBwYXJlbnQ6IElOb2RlIHwgdW5kZWZpbmVkKTogSU5vZGVbXSB7XHJcbiAgICBjb25zdCBub2RlczogSU5vZGVbXSA9IFtdO1xyXG4gICAgZm9sZGVycy5mb3JFYWNoKChuOiBJTm9kZSkgPT4ge1xyXG4gICAgICBjb25zdCBub2RlOiBJTm9kZSA9IHtcclxuICAgICAgICBpZDogbi5pZCxcclxuICAgICAgICBuYW1lOiBuLm5hbWUsXHJcbiAgICAgICAgY291bnQ6IG4uY291bnQsXHJcbiAgICAgICAgcGFyZW50OiBwYXJlbnQsXHJcbiAgICAgICAgY2hpbGRyZW46IHVuZGVmaW5lZCxcclxuICAgICAgICBiYWc6IG4sXHJcbiAgICAgIH07XHJcbiAgICAgIG5vZGUuY2hpbGRyZW4gPVxyXG4gICAgICAgIG4uY2hpbGRyZW4gJiYgbi5jaGlsZHJlbi5sZW5ndGggPiAwXHJcbiAgICAgICAgICA/IHRoaXMuX3RvTm9kZXMobi5jaGlsZHJlbiwgbm9kZSlcclxuICAgICAgICAgIDogW107XHJcbiAgICAgIG5vZGVzLnB1c2gobm9kZSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBub2RlcztcclxuICB9XHJcbn1cclxuIl19
664
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NvcmUvc3lzdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBWTVDLE1BQU0sQ0FBTixJQUFZLFVBYVg7QUFiRCxXQUFZLFVBQVU7SUFDcEIsNkNBQVMsQ0FBQTtJQUNULDJDQUFRLENBQUE7SUFDUix1RUFBc0IsQ0FBQTtJQUN0QixpRUFBbUIsQ0FBQTtJQUNuQiwyRUFBd0IsQ0FBQTtJQUN4QiwyREFBZ0IsQ0FBQTtJQUNoQixtRUFBb0IsQ0FBQTtJQUNwQixpREFBVyxDQUFBO0lBQ1gseURBQWUsQ0FBQTtJQUNmLDBEQUFnQixDQUFBO0lBQ2hCLGtEQUFZLENBQUE7SUFDWiw0REFBaUIsQ0FBQSxDQUFTLGFBQWE7QUFDekMsQ0FBQyxFQWJXLFVBQVUsS0FBVixVQUFVLFFBYXJCO0FBRUQsTUFBTSxPQUFPLFdBQVc7SUFDdEI7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBSSxLQUE2QixFQUFFLEdBQVcsRUFBRSxLQUFVO1FBQzdFLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFLLElBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDakMsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxD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RixJQUFJLENBQUMsUUFBUTtnQkFDWCxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO29CQUNqQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1QsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7O0tBSUM7SUFDRCxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQWEsRUFBRSxNQUFjLEVBQUU7UUFDN0MsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksS0FBSyxHQUFhLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDVixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO1lBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNiLENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7O1lBQU0sT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBEYXRlSW50ZXJ2YWwgfSBmcm9tICcuL2RlZmluaXRpb25zJztcclxuaW1wb3J0IHsgZm9ybWF0LCBwYXJzZSwgcGFyc2VJU08sIHNldEhvdXJzIH0gZnJvbSAnZGF0ZS1mbnMnO1xyXG5pbXBvcnQgeyBpdCB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZSc7XHJcbmltcG9ydCB7IGZyb21ab25lZFRpbWUgfSBmcm9tICdkYXRlLWZucy10eic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElOb2RlIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIG5hbWU/OiBzdHJpbmcgfCBudWxsO1xyXG4gIGNvdW50PzogbnVtYmVyIHwgbnVsbDtcclxuICBjaGlsZHJlbj86IElOb2RlW10gfCBudWxsO1xyXG4gIHBhcmVudD86IElOb2RlIHwgbnVsbDtcclxuICBiYWc/OiBhbnkgfCBudWxsXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZW51bSBEYXRlRm9ybWF0IHtcclxuICBTaG9ydCA9IDEsICAgICAgICAgICAgICAgIC8vIGRkL21tL3l5eXlcclxuICBMb25nID0gMiwgICAgICAgICAgICAgICAgIC8vIGQgbW1tbSB5eXl5XHJcbiAgTG9uZ1dpdGhTaG9ydE1vbnRoID0gMywgICAvLyBkIG1tbSB5eXl5XHJcbiAgTG9uZ1dpdGhXZWVrRGF5ID0gNCwgICAgICAvLyB3d3d3LCBkIG1tbW0geXl5eVxyXG4gIExvbmdXaXRoU2hvcnRXZWVrRGF5ID0gNSwgLy8gd3d3LCBkIG1tbW0geXl5eVxyXG4gIE1vbnRoQW5kWWVhciA9IDYsICAgICAgICAgLy8gbW1tIHl5eXlcclxuICBMb25nTW9udGhBbmRZZWFyID0gNywgICAgIC8vIG1tbW0geXl5eVxyXG4gIFdlZWtEYXkgPSA4LCAgICAgICAgICAgICAgLy8gd3d3IGRcclxuICBMb25nV2Vla0RheSA9IDksICAgICAgICAgIC8vIHd3d3cgZFxyXG4gIERheUFuZE1vbnRoID0gMTAsICAgICAgICAgLy8gZCBtbW1tXHJcbiAgU2hvcnRVUyA9IDExLCAgICAgICAgICAgICAvLyBtbS9kZC95eXl5XHJcbiAgU2hvcnRJU084NjAxID0gMTIgICAgICAgICAvLyB5eXl5LW1tLWRkXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTeXN0ZW1VdGlscyB7XHJcbiAgLyoqXHJcbiAgICogQXJyYXkgZmluZCBieSBrZXlcclxuICAgKiBAcGFyYW0gYXJyYXkgICAgIDogdGhlIGFycmF5IHRvIHNjYW5cclxuICAgKiBAcGFyYW0ga2V5ICAgICAgIDoga2V5IG5hbWVcclxuICAgKiBAcGFyYW0gdmFsdWUgICAgIDogdGhlIHZhbHVlIHRvIHNlYXJjaCBmb3JcclxuICAgKiBAcmV0dXJucyAgICAgICAgIDogdGhlIHByb3BlcnR5IHZhbHVlIG9yIG51bGxcclxuICAgKi9cclxuICBzdGF0aWMgYXJyYXlGaW5kQnlLZXk8VD4oYXJyYXk6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQsIGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogVCB8IG51bGwge1xyXG4gICAgaWYgKCFhcnJheSkgcmV0dXJuIG51bGw7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyYXkpIHtcclxuICAgICAgaWYgKChpdGVtIGFzIGFueSlba2V5XSA9PT0gdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcnJheSBmaW5kIGluZGV4IGJ5IGtleVxyXG4gICAqIEBwYXJhbSBhcnJheSAgIDogdGhlIGFycmF5IHRvIHNjYW5cclxuICAgKiBAcGFyYW0ga2V5ICAgICA6IHRoZSBrZXkgbmFtZVxyXG4gICAqIEBwYXJhbSB2YWx1ZSAgIDogdGhlIHZhbHVlIHRvIHNlYXJjaCBmb3JcclxuICAgKiBAcmV0dXJucyAgICAgICA6IHRoZSBhcnJheSBpbmRleCBvciAtMSBpZiBub3QgZm91bmRcclxuICAgKi9cclxuICBzdGF0aWMgYXJyYXlGaW5kSW5kZXhCeUtleTxUPihhcnJheTogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBudW1iZXIge1xyXG4gICAgaWYgKCFhcnJheSkgcmV0dXJuIC0xO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoKGFycmF5W2ldIGFzIGFueSlba2V5XSA9PT0gdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gaTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGEgdmFsdWUgZnJvbSBhbmQgYXJyYXkgbWFkZSBvZiBuYW1lfHZhbHVlIGl0ZW1zXHJcbiAgICogQHBhcmFtIGFycmF5ICAgOiB0aGUgYXJyYXkgdG8gc2NhblxyXG4gICAqIEBwYXJhbSB2YWx1ZSAgIDogdGhlIHZhbHVlIHRvIHNlYXJjaCBmb3JcclxuICAgKiBAcmV0dXJucyAgICAgICA6IHRoZSBwcm9wZXJ0eSB2YWx1ZSBvciBudWxsIGlmIG5vdCBmb3VuZFxyXG4gICAqL1xyXG4gIHN0YXRpYyBhcnJheUdldFZhbHVlPFQ+KGFycmF5OiBUW10gfCBudWxsIHwgdW5kZWZpbmVkLCB2YWx1ZTogYW55KTogYW55IHtcclxuICAgIGlmICghYXJyYXkpIHJldHVybiBudWxsO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBpdGVtID0gKGFycmF5W2ldIGFzIGFueSk7XHJcbiAgICAgIGlmIChpdGVtLnZhbHVlID09PSB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBpdGVtLm5hbWUgfHwgaXRlbS5pZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0IGl0ZW1zIHRvIG5vZGVzIGludG8gYSB0cmVlIHN0cnVjdHVyZVxyXG4gICAqIEBwYXJhbSBpdGVtcyAgIDogbGlzdCBvZiBub2Rlc1xyXG4gICAqIEBwYXJhbSBwYXJlbnQgIDogcGFyZW50IG5vZGVcclxuICAgKiBAcmV0dXJucyAgICAgICA6IGFuIGFycmF5IG9mIElOb2RlIG9iamVjdHNcclxuICAgKi9cclxuICBzdGF0aWMgYXJyYXlUb05vZGVzKGl0ZW1zOiBJTm9kZVtdLCBwYXJlbnQ6IElOb2RlID0gbnVsbCk6IElOb2RlW10ge1xyXG4gICAgY29uc3Qgbm9kZXM6IElOb2RlW10gPSBbXTtcclxuICAgIGl0ZW1zLmZvckVhY2goKG4pID0+IHtcclxuICAgICAgY29uc3Qgbm9kZTogSU5vZGUgPSB7XHJcbiAgICAgICAgaWQ6IG4uaWQudG9TdHJpbmcoKSxcclxuICAgICAgICBuYW1lOiBuLm5hbWUsXHJcbiAgICAgICAgY291bnQ6IG4uY291bnQgPyBuLmNvdW50IDogMCxcclxuICAgICAgICBjaGlsZHJlbjogbnVsbCxcclxuICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgYmFnOiBuLFxyXG4gICAgICB9O1xyXG4gICAgICBub2Rlcy5wdXNoKG5vZGUpO1xyXG4gICAgICBub2RlLmNoaWxkcmVuID1cclxuICAgICAgICBuLmNoaWxkcmVuICYmIG4uY2hpbGRyZW4ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgPyB0aGlzLmFycmF5VG9Ob2RlcyhuLmNoaWxkcmVuLCBub2RlKVxyXG4gICAgICAgICAgOiBbXTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG5vZGVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXNlZCB0byBjb3BhcmUgaXRlbXMgZHVyaW5nIGFuIGFycmF5IG9mIG9iamVjdHMgc29ydGluZ1xyXG4gICAqIEBwYXJhbSBrZXkgICAgIDogdGhlIHByb3BlcnR5IG5hbWUgdG8gc29ydCBmb3JcclxuICAgKiBAcGFyYW0gb3JkZXIgICA6IHRoZSBvcmRlciAnYXNjJyBvciAnZGVzYydcclxuICAgKiBAcmV0dXJucyAgICAgICA6IDAgaWYgZXF1YWxzLCAxIGlmIGJpZ2dlciwgLTEgaWYgbG93ZXJcclxuICAgKi9cclxuICBzdGF0aWMgYXJyYXlTb3J0Q29tcGFyZShrZXk6IHN0cmluZywgb3JkZXI6IHN0cmluZyA9IFwiYXNjXCIpIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IGZ1bmN0aW9uIGlubmVyU29ydChhOiBhbnksIGI6IGFueSkge1xyXG4gICAgICBpZiAoIWEuaGFzT3duUHJvcGVydHkoa2V5KSB8fCAhYi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgLy8gcHJvcGVydHkgZG9lc24ndCBleGlzdCBvbiBlaXRoZXIgb2JqZWN0XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdmFyQSA9IHR5cGVvZiBhW2tleV0gPT09IFwic3RyaW5nXCIgPyBhW2tleV0udG9VcHBlckNhc2UoKSA6IGFba2V5XTtcclxuICAgICAgY29uc3QgdmFyQiA9IHR5cGVvZiBiW2tleV0gPT09IFwic3RyaW5nXCIgPyBiW2tleV0udG9VcHBlckNhc2UoKSA6IGJba2V5XTtcclxuICAgICAgbGV0IGNvbXBhcmlzb24gPSAwO1xyXG4gICAgICBpZiAodmFyQSA+IHZhckIpIGNvbXBhcmlzb24gPSAxO1xyXG4gICAgICBlbHNlIGlmICh2YXJBIDwgdmFyQikgY29tcGFyaXNvbiA9IC0xO1xyXG4gICAgICByZXR1cm4gb3JkZXIgPT09IFwiZGVzY1wiID8gY29tcGFyaXNvbiAqIC0xIDogY29tcGFyaXNvbjtcclxuICAgIH07XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0IHdlaWdodFxyXG4gICAqIEBwYXJhbSBnciAgICA6IGdyYW1zXHJcbiAgICogQHJldHVybnMgICAgIDogdGhlIGZvcm1hdHRlZCBzdHJpbmdcclxuICAgKi9cclxuICBzdGF0aWMgZm9ybWF0V2VpZ2h0KGdyOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKGdyID4gMTAwMDAwMCkgcmV0dXJuIChnciAvIDEwMDAwMDApLnRvRml4ZWQoMikgKyBcIiB0XCI7XHJcbiAgICBlbHNlIGlmIChnciA+IDEwMDAwMCkgcmV0dXJuIChnciAvIDEwMDAwMCkudG9GaXhlZCgyKSArIFwiIHFcIjtcclxuICAgIGVsc2UgaWYgKGdyID4gMTAwMCkgcmV0dXJuIChnciAvIDEwMDApLnRvRml4ZWQoMikgKyBcIiBrZ1wiO1xyXG4gICAgZWxzZSByZXR1cm4gZ3IgKyBcIiBnclwiO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0IGZpbGUgc2l6ZVxyXG4gICAqIEBwYXJhbSBieXRlcyA6IG51bWJlciBvZiBieXRlc1xyXG4gICAqIEByZXR1cm5zICAgICA6IHRoZSBmb3JtYXR0ZWQgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIGZvcm1hdEZpbGVTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKGJ5dGVzID4gMTAyNDAwMCkgcmV0dXJuIChieXRlcyAvIDEwMjQwMDApLnRvRml4ZWQoMSkgKyBcIiBNQlwiO1xyXG4gICAgaWYgKGJ5dGVzID4gMTAyNCkgcmV0dXJuIChieXRlcyAvIDEwMjQpLnRvRml4ZWQoMSkgKyBcIiBLYlwiO1xyXG4gICAgcmV0dXJuIGJ5dGVzICsgXCIgYnl0ZVwiO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcGFyZSB0d28gc3RyaW5nXHJcbiAgICogQHBhcmFtIGEgICA6IHN0cmluZyBhXHJcbiAgICogQHBhcmFtIGIgICA6IHN0cmluZyBiXHJcbiAgICogQHJldHVybnMgICA6IDAgaWYgZXF1YWxzLCAxIGlmIGJpZ2dlciwgLTEgaWYgbG93ZXJcclxuICAgKi9cclxuICBzdGF0aWMgY29tcGFyZVN0cmluZyhhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBpZiAoKGEgPz8gXCJcIikudG9Mb3dlckNhc2UoKSA+IChiID8/IFwiXCIpLnRvTG93ZXJDYXNlKCkpIHJldHVybiAxO1xyXG4gICAgaWYgKChhID8/IFwiXCIpLnRvTG93ZXJDYXNlKCkgPCAoYiA/PyBcIlwiKS50b0xvd2VyQ2FzZSgpKSByZXR1cm4gLTE7XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhcGl0YWxpemUgYSBzdHJpbmdcclxuICAgKiBAcGFyYW0gcyAgIDogdGhlIHN0cmluZyB0byBjYXBpdGFsaXplXHJcbiAgICogQHJldHVybnMgICA6IHRoZSBjYXBpdGFsaXplZCBzdHJpbmcgIFxyXG4gICAqL1xyXG4gIHN0YXRpYyBjYXBpdGFsaXplKHM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXMpIHJldHVybiBudWxsO1xyXG4gICAgbGV0IGIgPSBcIlwiO1xyXG4gICAgbGV0IGNhcCA9IHRydWU7XHJcbiAgICBmb3IgKGNvbnN0IGNoYXIgb2Ygcykge1xyXG4gICAgICBpZiAoY2hhciA9PT0gXCIgXCIpIHtcclxuICAgICAgICBiICs9IGNoYXI7XHJcbiAgICAgICAgY2FwID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChjYXApIHtcclxuICAgICAgICBiICs9IGNoYXIudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBjYXAgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBiICs9IGNoYXIudG9Mb3dlckNhc2UoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcnVuY2F0ZSBhIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBzICAgICA6IHRoZSBzdHJpbmcgdG8gdHJ1bmNhdGVcclxuICAgKiBAcGFyYW0gbWF4ICAgOiB0aGUgbWF4IG51bWJlciBvZiBjaGFyc1xyXG4gICAqIEByZXR1cm5zICAgICA6IHRoZSB0cnVuY2F0ZWQgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIHRydW5jYXRlKHM6IHN0cmluZywgbWF4OiBudW1iZXIgPSA1MDApOiBzdHJpbmcge1xyXG4gICAgaWYgKCFzKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChzLmxlbmd0aCA8IG1heCkgcmV0dXJuIHM7XHJcbiAgICBsZXQgaSA9IG1heCAtIDE7XHJcbiAgICB3aGlsZSAoaSA+IDApIHtcclxuICAgICAgaWYgKHNbaV0gPT09ICcgJykgcmV0dXJuIHMuc2xpY2UoMCwgaSk7XHJcbiAgICAgIGktLTtcclxuICAgIH1cclxuICAgIHJldHVybiBzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSm9pbiBhIGxpc3Qgb2Ygc3RyaW5nc1xyXG4gICAqIEBwYXJhbSBpdGVtcyAgICAgOiB0aGUgbGlzdCBvZiBzdHJpbmdzXHJcbiAgICogQHBhcmFtIHNlcCAgICAgICA6IHRoZSBzZXBhcmF0b3Igc3RyaW5nXHJcbiAgICogQHBhcmFtIG1heCAgICAgICA6IHRoZSBtYXhpbXVtIHJlc3VsdGluZyBzdHJpbmdcclxuICAgKiBAcmV0dXJucyAgICAgICAgIDogdGhlIGpvaW5lZCBzdHJpbmdcclxuICAgKi9cclxuICBzdGF0aWMgam9pbihpdGVtczogc3RyaW5nW10sIHNlcDogc3RyaW5nID0gXCIgXCIsIG1heDogbnVtYmVyID0gMzUwKTogc3RyaW5nIHtcclxuICAgIGlmICghaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChpdGVtcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGxldCBsID0gMDtcclxuICAgICAgbGV0IHMgPSBcIlwiXHJcbiAgICAgIHdoaWxlIChzLmxlbmd0aCA8IG1heCAmJiBpdGVtcy5sZW5ndGggPiBsKSB7XHJcbiAgICAgICAgaWYgKGwgPiAwKSB7XHJcbiAgICAgICAgICBzICs9IHNlcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcyArPSBpdGVtc1tsKytdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPiBsKSB7XHJcbiAgICAgICAgcyArPSBcIi4uLlwiO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGl0ZW1zWzBdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVwbGFjZSBzdHVmZiBpbiB0ZXh0IGh0bWxcclxuICAgKiBAcGFyYW0gcyAgIDogdGhlIHN0cmluZyB0byBwcm9jZXNzXHJcbiAgICogQHJldHVybnMgICA6IHRoZSByZXBsYWNlZCBzdHJpbmcgIFxyXG4gICAqL1xyXG4gIHN0YXRpYyByZXBsYWNlQXNIdG1sKHM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByZWdleCA9IC9odHRwcz86XFwvXFwvLipbXlxcc10vaWdcclxuICAgIGNvbnN0IG0gPSByZWdleC5leGVjKHMpO1xyXG4gICAgaWYgKG0gJiYgbS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCB2ID0gbnVsbDtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdiA9IG1baV07XHJcbiAgICAgICAgcyA9IHMucmVwbGFjZSh2LCAnPGEgaHJlZj1cIicgKyB2ICsgJ1wiIHRhcmdldD1cIl9ibGFua1wiPicgKyB2ICsgJzwvYT4nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb21wYXJlIHR3byBuYW1lc1xyXG4gICAqIEBwYXJhbSBhICAgOiBuYW1lIGFcclxuICAgKiBAcGFyYW0gYiAgIDogbmFtZSBiXHJcbiAgICogQHJldHVybnMgICA6IHRydWUgaWYgYSBlcXVhbHMgYlxyXG4gICAqL1xyXG4gIHN0YXRpYyBjb21wYXJlTmFtZXMoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmIChhKSBhID0gYS50cmltKCk7XHJcbiAgICBpZiAoYikgYiA9IGIudHJpbSgpO1xyXG4gICAgaWYgKGEgJiYgYiAmJiBhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLmNvbXBhcmVTdHJpbmcoYSwgYikgPT09IDApIHJldHVybiB0cnVlO1xyXG4gICAgY29uc3QgcDEgPSBhLnNwbGl0KFwiIFwiKTtcclxuICAgIGNvbnN0IHAyID0gYi5zcGxpdChcIiBcIik7XHJcbiAgICBpZiAocDEubGVuZ3RoICE9PSBwMi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgIGxldCBtYXRjaGVzID0gcDEubGVuZ3RoO1xyXG4gICAgZm9yIChjb25zdCBzMSBvZiBwMSkge1xyXG4gICAgICBmb3IgKGNvbnN0IHMyIG9mIHAyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29tcGFyZVN0cmluZyhzMSwgczIpID09PSAwKSB7XHJcbiAgICAgICAgICBtYXRjaGVzLS07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWF0Y2hlcyA9PT0gMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENpcGhlciBhIHRleHRcclxuICAgKiBAcGFyYW0gdGV4dCAgICA6IHRoZSB0ZXh0XHJcbiAgICogQHBhcmFtIGtleSAgICAgOiB0aGUga2V5XHJcbiAgICogQHBhcmFtIHJldmVyc2UgOiB0cnVlIHRvIGRlY29kZSwgZmFsc2UgdG8gZW5jb2RlXHJcbiAgICogQHJldHVybnMgICAgICAgOnRoZSBjaXBoZXJlZCB0ZXh0XHJcbiAgICovXHJcbiAgc3RhdGljIGNpcGhlcih0ZXh0OiBzdHJpbmcsIGtleTogc3RyaW5nLCByZXZlcnNlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xyXG4gICAgLy8gU3Vycm9nYXRlIHBhaXIgbGltaXRcclxuICAgIHZhciBib3VuZCA9IDB4MTAwMDA7XHJcblxyXG4gICAgLy8gQ3JlYXRlIHN0cmluZyBmcm9tIGNoYXJhY3RlciBjb2Rlc1xyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIC8vIFR1cm4gc3RyaW5nIHRvIGNoYXJhY3RlciBjb2Rlc1xyXG4gICAgICB0ZXh0LnNwbGl0KFwiXCIpLm1hcChmdW5jdGlvbiAodjogYW55LCBpOiBudW1iZXIpIHtcclxuICAgICAgICAvLyBHZXQgcm90YXRpb24gZnJvbSBrZXlcclxuICAgICAgICB2YXIgcm90YXRpb24gPSBrZXkuY2hhckNvZGVBdChpICUga2V5Lmxlbmd0aCk7XHJcblxyXG4gICAgICAgIC8vIEFyZSB3ZSBkZWNyeXB0aW5nP1xyXG4gICAgICAgIGlmIChyZXZlcnNlKSByb3RhdGlvbiA9IC1yb3RhdGlvbjtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIGN1cnJlbnQgY2hhcmFjdGVyIGNvZGUgKyByb3RhdGlvblxyXG4gICAgICAgIHJldHVybiAodi5jaGFyQ29kZUF0KCkgKyByb3RhdGlvbiArIGJvdW5kKSAlIGJvdW5kO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb25lIGFuIG9iamVjdCB1c2luZyBKU09OXHJcbiAgICogQHBhcmFtIG9iaiA6IHRoZSBvYmxlY3QgdG8gY2xvbmVcclxuICAgKiBAcmV0dXJucyAgIDogYSBuZXcgb2JqZWN0XHJcbiAgICovXHJcbiAgc3RhdGljIGNsb25lKG9iajogYW55KTogYW55IHtcclxuICAgIGlmICghb2JqKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvbmUgYW4gb2JqZWN0IHVzaW5nIGRlZXAgY2xvbmluZ1xyXG4gICAqIEBwYXJhbSBvYmogICA6IHRoZSBvYmxlY3QgdG8gY2xvbmVcclxuICAgKiBAcmV0dXJucyAgICAgOiBhIG5ldyBvYmplY3RcclxuICAgKi9cclxuICBzdGF0aWMgZGVlcENsb25lPFQ+KG9iajogYW55LCBkZXN0OiBUID0gbnVsbCk6IFQge1xyXG4gICAgY29uc3QgY2xvbmVPYmogPSBkZXN0ID8gZGVzdCA6IChvYmouY29uc3RydWN0b3IoKSBhcyBhbnkpO1xyXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IE9iamVjdC5rZXlzKG9iaik7XHJcbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzKSB7XHJcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gb2JqW2F0dHJpYnV0ZV07XHJcbiAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09IFwib2JqZWN0XCIgJiYgcHJvcGVydHkgIT0gbnVsbCkge1xyXG4gICAgICAgIGNsb25lT2JqW2F0dHJpYnV0ZV0gPSB0aGlzLmRlZXBDbG9uZShwcm9wZXJ0eSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2xvbmVPYmpbYXR0cmlidXRlXSA9IHByb3BlcnR5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xvbmVPYmo7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgYSBzdHJpbmcgaXMgYSB2YWxpZCBVVUlEXHJcbiAgICogQHBhcmFtIHZhbHVlICAgOiB0aGUgdmFsdWUgdG8gcGFyc2VcclxuICAgKiBAcmV0dXJucyAgICAgICA6IHRydWUgaWYgaXMgYSB2YWxpZCBVVUlEXHJcbiAgICovXHJcbiAgc3RhdGljIHBhcnNlVVVJRCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCByZWdleCA9IC9eKHt8KCk/WzAtOWEtZkEtRl17OH0tKFswLTlhLWZBLUZdezR9LSl7M31bMC05YS1mQS1GXXsxMn0ofXwpKT8kLztcclxuICAgIHJldHVybiByZWdleC50ZXN0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhcnNlIGFuZCBlbnN1cmUgdGhhdCBVVUlEIGlzIG5vdCBlbXB0eVxyXG4gICAqIEBwYXJhbSB2YWx1ZSAgIDogdGhlIHZhbHVlIHRvIHBhcnNlXHJcbiAgICogQHJldHVybnMgICAgICAgOiB0cnVlIGlmIHZhbGlkIGFuZCBub3QgZW1wdHlcclxuICAgKi9cclxuICBzdGF0aWMgcGFyc2VVVUlETm90RW1wdHkodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcmVnZXggPSAvXih7fCgpPzB7OH0tKDB7NH0tKXszfTB7MTJ9KH18KSk/JC87XHJcbiAgICByZXR1cm4gdGhpcy5wYXJzZVVVSUQodmFsdWUpICYmICFyZWdleC50ZXN0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhbiBlbXB0eSBVVUlEXHJcbiAgICogQHJldHVybnMgOiB0aGUgZW1wdHkgVVVJRFxyXG4gICAqL1xyXG4gIHN0YXRpYyBlbXB0eVVVSUQoKTogc3RyaW5nIHsgcmV0dXJuIFwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IFVVSURcclxuICAgKiBAcmV0dXJucyA6IHRoZSBzdHJpbmcgVVVJRFxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZW5lcmF0ZVVVSUQoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlZ2V4ID0gL1t4eV0vZztcclxuICAgIHJldHVybiBcInh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eFwiLnJlcGxhY2UocmVnZXgsIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgIHZhciByID0gKE1hdGgucmFuZG9tKCkgKiAxNikgfCAwLFxyXG4gICAgICAgIHYgPSBjID09PSBcInhcIiA/IHIgOiAociAmIDB4MykgfCAweDg7XHJcbiAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2UgYSB0ZXh0IGFuZCByZXR1cm4gdHJ1ZSBpZiBpcyBhIHZhbGlkIGVtYWlsIG9yIG51bGxcclxuICAgKiBAcGFyYW0gdmFsdWUgOiBlbWFpbFxyXG4gICAqIEByZXR1cm5zICAgICA6IHRydWUgaWYgdGhlIGVtYWlsIGlzIHZhbGlkIG9yIGVtcHR5XHJcbiAgICovXHJcbiAgc3RhdGljIHBhcnNlRW1haWwodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHRydWU7XHJcbiAgICBjb25zdCByZWdleCA9IC8oPzpbYS16MC05KyEjJCUmJyorXFwvPT9eX2B7fH1+LV0rKD86XFwuW2EtejAtOSEjJCUmJyorXFwvPT9eX2B7fH1+LV0rKSp8XCIoPzpbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHgyMVxceDIzLVxceDViXFx4NWQtXFx4N2ZdfFxcXFxbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGUtXFx4N2ZdKSpcIilAKD86KD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1xcLikrW2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP3xcXFsoPzooPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldP3xbYS16MC05LV0qW2EtejAtOV06KD86W1xceDAxLVxceDA4XFx4MGJcXHgwY1xceDBlLVxceDFmXFx4MjEtXFx4NWFcXHg1My1cXHg3Zl18XFxcXFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZS1cXHg3Zl0pKylcXF0pL2dpXHJcbiAgICByZXR1cm4gcmVnZXgudGVzdCh2YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJzZSBhIHRleHQgYW5kIHJldHVybiB0cnVlIGlmIGlzIGEgdmFsaWQgdXJsIG9yIG51bGxcclxuICAgKiBAcGFyYW0gdmFsdWUgOiB0aGUgdXJsIHRvIHBhcnNlXHJcbiAgICogQHJldHVybnMgICAgIDogdHJ1ZSBpZiB0aGUgdXJsIGlzIHZhbGlkIG9yIGVtcHR5XHJcbiAgICovXHJcbiAgc3RhdGljIHBhcnNlVXJsKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiB0cnVlO1xyXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFxyXG4gICAgICBcIihodHRwcz86Ly8pPyhbXFxcXGRhLXouLV0rKVxcXFwuKFthLXouXXsyLDZ9KVsvXFxcXHcgLi1dKi8/XCJcclxuICAgICk7XHJcbiAgICByZXR1cm4gcmVnZXgudGVzdCh2YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZGF0ZSBwYXJ0cyBmcm9tIGEgc3RyaW5nIHZhbHVlXHJcbiAgICogQHBhcmFtIHZhbHVlICAgOiB0aGUgc3RyaW5nIHRvIHBhcnNlXHJcbiAgICogQHJldHVybnMgICAgICAgOiBhbiBhcnJheSBvZiBudW1iZXJzIHdpdGggeWVhciwgbW9udGgsIGRheVxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZXREYXRlUGFydHModmFsdWU6IHN0cmluZyk6IG51bWJlcltdIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xyXG4gICAgbGV0IHBhcnRzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgaWYgKHZhbHVlLmluZGV4T2YoXCItXCIpICE9PSAtMSkge1xyXG4gICAgICBjb25zdCBwID0gdmFsdWUuc3BsaXQoXCItXCIpO1xyXG4gICAgICBpZiAocC5sZW5ndGggIT09IDMpIHJldHVybiBudWxsO1xyXG4gICAgICBwYXJ0cyA9IFtwYXJzZUludChwWzBdKSwgcGFyc2VJbnQocFsxXSkgLSAxLCBwYXJzZUludChwWzJdKV07XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlLmluZGV4T2YoXCIvXCIpICE9PSAtMSkge1xyXG4gICAgICBjb25zdCBwID0gdmFsdWUuc3BsaXQoXCIvXCIpO1xyXG4gICAgICBpZiAocC5sZW5ndGggIT09IDMpIHJldHVybiBudWxsO1xyXG4gICAgICBwYXJ0cyA9IFtwYXJzZUludChwWzJdKSwgcGFyc2VJbnQocFsxXSkgLSAxLCBwYXJzZUludChwWzBdKV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFydHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJzZSBhIGRhdGVcclxuICAgKiBAcGFyYW0gdmFsdWUgICA6IHRoZSB2YWx1ZSB0byBjaGVja1xyXG4gICAqIEBwYXJhbSBsb2NhbGUgIDogdGhlIGxvY2FsZSB0byB1c2VcclxuICAgKiBAcmV0dXJucyAgICAgICA6IGEgdmFsaWQgRGF0ZSBvYmplY3Qgb3IgbnVsbFxyXG4gICAqL1xyXG4gIHN0YXRpYyBwYXJzZURhdGUodmFsdWU6IHN0cmluZyB8IERhdGUsIGxvY2FsZTogYW55ID0gaXQpOiBEYXRlIHtcclxuICAgIC8vIE5vIHZhbHVlIGF0IGFsbFxyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XHJcbiAgICAvLyBBIERhdGUgdmFsdWVcclxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgdmFsdWUuZ2V0VGltZSgpKSByZXR1cm4gdmFsdWU7XHJcbiAgICAvLyBQYXJzZSBrbm93biBmb3JtYXRzIHVzaW5nIGRhdGUtZm5zXHJcbiAgICBsZXQgZCA9IHBhcnNlSVNPKHZhbHVlIGFzIHN0cmluZyk7XHJcbiAgICBpZiAoZCAmJiBkLmdldFRpbWUoKSAmJiBkLmdldEZ1bGxZZWFyKCkgPiAxNzUwKSByZXR1cm4gZDtcclxuICAgIGQgPSBwYXJzZSh2YWx1ZSBhcyBzdHJpbmcsICdkZC9NTS95eXl5JywgbmV3IERhdGUoKSwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgIGlmIChkICYmIGQuZ2V0VGltZSgpICYmIGQuZ2V0RnVsbFllYXIoKSA+IDE3NTApIHJldHVybiBkO1xyXG4gICAgZCA9IHBhcnNlKHZhbHVlIGFzIHN0cmluZywgJ3l5eXktTU0tZGQnLCBuZXcgRGF0ZSgpLCB7IGxvY2FsZTogbG9jYWxlIH0pO1xyXG4gICAgaWYgKGQgJiYgZC5nZXRUaW1lKCkgJiYgZC5nZXRGdWxsWWVhcigpID4gMTc1MCkgcmV0dXJuIGQ7XHJcbiAgICAvLyBQYXJzZSB2YWx1ZXMgbWFudWFsbHlcclxuICAgIGxldCBwYXJ0cyA9IHRoaXMuZ2V0RGF0ZVBhcnRzKHZhbHVlIGFzIHN0cmluZyk7XHJcbiAgICBpZiAocGFydHNbMF0gPCAxMDApIHBhcnRzWzBdICs9IDIwMDA7XHJcbiAgICBpZiAoaXNOYU4ocGFydHNbMF0pIHx8IHBhcnRzWzBdIDwgMCB8fCBwYXJ0c1swXSA8IDE3NTApIHJldHVybiBudWxsO1xyXG4gICAgaWYgKGlzTmFOKHBhcnRzWzFdKSB8fCBwYXJ0c1sxXSA8IDApIHJldHVybiBudWxsO1xyXG4gICAgaWYgKGlzTmFOKHBhcnRzWzJdKSB8fCBwYXJ0c1syXSA8IDApIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHBhcnRzWzFdID4gMTEpIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHBhcnRzWzFdID09PSAxICYmIHBhcnRzWzJdID4gMjkpIHJldHVybiBudWxsO1xyXG4gICAgZWxzZSBpZiAocGFydHNbMV0gIT09IDEgJiYgcGFydHNbMl0gPiAzMSkgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gbmV3IERhdGUocGFydHNbMF0sIHBhcnRzWzFdLCBwYXJ0c1syXSwgMik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JtYXQgYSBkYXRlXHJcbiAgICogQHBhcmFtIHZhbHVlICAgICA6IHRoZSBkYXRlIG9yIHN0cmluZyB0byBmb3JtYXRcclxuICAgKiBAcGFyYW0gZm10ICAgICAgIDogdGhlIERhdGVGb3JtYXQgdG8gdXNlIG9yIHRoZSBzdHJpbmcgcGF0dGVyblxyXG4gICAqIEBwYXJhbSBsb2NhbGUgICAgOiB0aGUgbG9jYWxlIHRvIHVzZSAoZGVmYXVsdCBpcyBJVClcclxuICAgKiBAcmV0dXJucyAgICAgICAgIDogdGhlIGZvcm1hdHRlZCBzdHJpbmdcclxuICAgKi9cclxuICBzdGF0aWMgZm9ybWF0RGF0ZShcclxuICAgIHZhbHVlOiBEYXRlIHwgc3RyaW5nLFxyXG4gICAgZm10OiBEYXRlRm9ybWF0IHwgc3RyaW5nID0gRGF0ZUZvcm1hdC5TaG9ydCxcclxuICAgIGxvY2FsZTogYW55ID0gaXQpOiBzdHJpbmcge1xyXG4gICAgLy8gTm8gdmFsdWUgYXQgYWxsXHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcclxuICAgIC8vIEEgc3RyaW5nXHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZylcclxuICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xyXG4gICAgLy8gTm90IGEgZGF0ZSBcclxuICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiB2YWx1ZS5nZXRUaW1lKCkpKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIC8vIEZvcm1hdFxyXG4gICAgc3dpdGNoIChmbXQpIHtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LlNob3J0OiByZXR1cm4gZm9ybWF0KHZhbHVlLCBcImRkL01NL3l5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0Lkxvbmc6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiZCBNTU1NIHl5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LkxvbmdXaXRoU2hvcnRNb250aDogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJkIE1NTSB5eXl5XCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5Mb25nV2l0aFdlZWtEYXk6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiRUVFRSwgZCBNTU1NIHl5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LkxvbmdXaXRoU2hvcnRXZWVrRGF5OiByZXR1cm4gZm9ybWF0KHZhbHVlLCBcIkVFRSwgZCBNTU1NIHl5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0Lk1vbnRoQW5kWWVhcjogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJNTU0geXl5eVwiLCB7IGxvY2FsZTogbG9jYWxlIH0pO1xyXG4gICAgICBjYXNlIERhdGVGb3JtYXQuTG9uZ01vbnRoQW5kWWVhcjogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJNTU1NIHl5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LldlZWtEYXk6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiRUVFLCBkXCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5Mb25nV2Vla0RheTogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJFRUVFLCBkXCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5EYXlBbmRNb250aDogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJkIE1NTU1cIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LlNob3J0VVM6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiTU0vZGQveXl5eVwiLCB7IGxvY2FsZTogbG9jYWxlIH0pO1xyXG4gICAgICBjYXNlIERhdGVGb3JtYXQuU2hvcnRJU084NjAxOiByZXR1cm4gZm9ybWF0KHZhbHVlLCBcInl5eXktTU0tZGRcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZm9ybWF0KHZhbHVlLCBmbXQsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYW4gaXRhbGlhbiBsb2NhbCBkYXRlXHJcbiAgICogQHBhcmFtIHZhbHVlICA6IHRoZSBkYXRlXHJcbiAgICogQHJldHVybnMgICAgIDogdGhlIG5ldyBkYXRlXHJcbiAgICovXHJcbiAgc3RhdGljIHRvTG9jYWxEYXRlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKTogRGF0ZSB7XHJcbiAgICAvLyBObyB2YWx1ZSBhdCBhbGxcclxuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xyXG4gICAgLy8gQSBzdHJpbmdcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKVxyXG4gICAgICB2YWx1ZSA9IHRoaXMucGFyc2VEYXRlKHZhbHVlIGFzIHN0cmluZyk7XHJcbiAgICAvLyBOb3QgYSBkYXRlXHJcbiAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgdmFsdWUuZ2V0VGltZSgpKSkgcmV0dXJuIG51bGw7XHJcbiAgICAvLyBVcGRhdGUgZGF0ZVxyXG4gICAgcmV0dXJuIHNldEhvdXJzKHZhbHVlLCAyKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgYSBEYXRlSW50ZXJ2YWwgb2JqZWN0IGFjY29yZGluZyB0byBhIHN0cmluZ1xyXG4gICAqIEBwYXJhbSB2YWx1ZSAgICAgICA6IHN0cmluZyB2YWx1ZVxyXG4gICAqIEBwYXJhbSBpbnRlcnZhbCAgICA6IERhdGVJbnRlcnZhbCB2YWx1ZSB0byB1cGRhdGVcclxuICAgKiBAcGFyYW0gZW5kICAgICAgICAgOiB0cnVlIGlmIG11c3QgYmUgdXBkYXRlZCB0aGUgZmlyc3Qgb3IgdGhlIGVuZCB2YWx1ZSBcclxuICAgKiBAcGFyYW0gY29weSAgICAgICAgOiBjb3B5IHRoZSBzYW1lIHZhbHVlICh3b3JrcyBvbmx5IGlmIG5vdCBlbmQgZWxlbWVudClcclxuICAgKi9cclxuICBzdGF0aWMgY2hhbmdlRGF0ZUludGVydmFsKHZhbHVlOiBzdHJpbmcsIGludGVydmFsOiBEYXRlSW50ZXJ2YWwsIGVuZDogYm9vbGVhbiA9IGZhbHNlLCBjb3B5OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBsZXQgeWVhciA9IC0xO1xyXG4gICAgICBpZiAodmFsdWUubGVuZ3RoID09PSA0ICYmICh5ZWFyID0gcGFyc2VJbnQodmFsdWUpKSA+IDE3NTApIHtcclxuICAgICAgICBpZiAoIWVuZCkge1xyXG4gICAgICAgICAgaW50ZXJ2YWwuZnJvbSA9IGZyb21ab25lZFRpbWUobmV3IERhdGUoeWVhciwgMCwgMSksICdVVEMnKTtcclxuICAgICAgICAgIGludGVydmFsLnRvID0gZnJvbVpvbmVkVGltZShuZXcgRGF0ZSh5ZWFyLCAxMSwgMzEpLCAnVVRDJyk7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICBpbnRlcnZhbC50byA9IG5ldyBEYXRlKHllYXIsIDExLCAzMSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IHBhcnRzID0gdGhpcy5nZXREYXRlUGFydHModmFsdWUpO1xyXG4gICAgICAgIGlmICghcGFydHMgfHwgaXNOYU4ocGFydHNbMF0pIHx8IHBhcnRzWzBdIDwgMCB8fCBwYXJ0c1swXSA8IDE3NTApIHJldHVybjtcclxuICAgICAgICBjb25zdCBkID0gZnJvbVpvbmVkVGltZShuZXcgRGF0ZShwYXJ0c1swXSwgcGFydHNbMV0sIHBhcnRzWzJdKSwgJ1VUQycpO1xyXG4gICAgICAgIGlmIChlbmQpXHJcbiAgICAgICAgICBpbnRlcnZhbC50byA9IGQ7XHJcbiAgICAgICAgZWxzZSBpZiAoY29weSkge1xyXG4gICAgICAgICAgaW50ZXJ2YWwuZnJvbSA9IGQ7XHJcbiAgICAgICAgICBpbnRlcnZhbC50byA9IGQ7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICBpbnRlcnZhbC5mcm9tID0gZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW5jb2RlIHVybFxyXG4gICAqIEBwYXJhbSB2YWx1ZSA6IHRoZSB2YWx1ZSB0byBlbmNvZGVcclxuICAgKiBAcmV0dXJucyAgICAgOiB0aGUgdXJsIGVuY29kZWQgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIHVybEVuY29kZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVjb2RlIHVybFxyXG4gICAqIEBwYXJhbSB2YWx1ZSA6IHRoZSB1cmwgdG8gZGVjb2RlXHJcbiAgICogQHJldHVybnMgICAgIDogdGhlIGRlY29kZSB1cmwgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIHVybERlY29kZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlZ2V4ID0gL1xcKy9nO1xyXG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCgodmFsdWUgKyBcIlwiKS5yZXBsYWNlKHJlZ2V4LCBcIiUyMFwiKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYSBxdWVyeXN0cmluZyBwYXJhbWV0ZXIgdmFsdWVcclxuICAgKiBAcGFyYW0gbmFtZSAgOiB0aGUgcGFyYW1ldGVyIG5hbWVcclxuICAgKiBAcmV0dXJucyAgICAgOiB0aGUgc3RyaW5nIHZhbHVlXHJcbiAgICovXHJcbiAgc3RhdGljIGdldFF1ZXJ5U3RyaW5nVmFsdWVCeU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIoKSkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgIGlmICh1cmwuaW5jbHVkZXMoXCI/XCIpKSB7XHJcbiAgICAgIGNvbnN0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcyh7IGZyb21TdHJpbmc6IHVybC5zcGxpdChcIj9cIilbMV0gfSk7XHJcbiAgICAgIGNvbnN0IHYgPSBkZWNvZGVVUklDb21wb25lbnQoaHR0cFBhcmFtcy5nZXQobmFtZSkpO1xyXG4gICAgICBpZiAodiAhPT0gXCJudWxsXCIpIHJldHVybiB2O1xyXG4gICAgICBlbHNlIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZSBhIHBhc3N3b3JkXHJcbiAgICogQHJldHVybnMgOiB0aGUgcGFzc3dvcmQgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIGdlbmVyYXRlUGFzc3dvcmQoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJhbmRvbSA9IFwiJFwiICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoLTcpO1xyXG4gICAgbGV0IHBhc3N3b3JkID0gXCJcIjtcclxuICAgIGxldCBoYXNVcHBlckNhc2UgPSBmYWxzZTtcclxuICAgIGZvciAoY29uc3Qgcm5kIG9mIHJhbmRvbSkge1xyXG4gICAgICBpZiAoIWhhc1VwcGVyQ2FzZSAmJiBcImFiY2RlZmdoamlsbW5vcHFyc3R1dnl3eHpcIi5pbmNsdWRlcyhybmQpKSB7XHJcbiAgICAgICAgcGFzc3dvcmQgKz0gcm5kLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgaGFzVXBwZXJDYXNlID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwYXNzd29yZCArPSBybmQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghaGFzVXBwZXJDYXNlKVxyXG4gICAgICBwYXNzd29yZCA9IHBhc3N3b3JkLnN1YnN0cmluZygwLCA3KSArIFwiTVwiO1xyXG4gICAgcmV0dXJuIHBhc3N3b3JkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgY3VycmVudCBicm93c2VyIHN1cHBvcnRzIHRvdWNoXHJcbiAgICogQHJldHVybnMgOiB0cnVlIGlmIHRoZSBkaXNwbGF5IGlzIHRvdWNoYWJsZVxyXG4gICAqL1xyXG4gIHN0YXRpYyBpc1RvdWNoYWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuaXNCcm93c2VyKCkgJiYgKFxyXG4gICAgICAgIFwib250b3VjaHN0YXJ0XCIgaW4gd2luZG93IHx8XHJcbiAgICAgICAgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIGNoZWNrIHdpbGwgcHJldmVudCAnd2luZG93JyBsb2dpYyB0byBiZSBleGVjdXRlZFxyXG4gICAqIHdoaWxlIGV4ZWN1dGluZyB0aGUgc2VydmVyIHJlbmRlcmluZ1xyXG4gICAqIEByZXR1cm5zIDogdHJ1ZSBpZiB1c2luZyB0aGUgYnJvd3NlclxyXG4gICAqL1xyXG4gIHN0YXRpYyBpc0Jyb3dzZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mICh3aW5kb3cpICE9PSAndW5kZWZpbmVkJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBDb252ZXJ0IGZvbGRlcnMgaW4gYSB0cmVlIG9mIE5vZGUgb2JqZWN0LlxyXG4gKiBAcGFyYW0gZm9sZGVycyA6IHRoZSBzdWJmb2xkZXJzIGdyb3VwIG9yIG51bGwgdG8gcm9vdFxyXG4gKiBAcmV0dXJucyAgICAgICA6IGEgbm9kZSBsaXN0XHJcbiAqL1xyXG4gIHN0YXRpYyB0b05vZGVzKGZvbGRlcnM6IElOb2RlW10pOiBJTm9kZVtdIHtcclxuICAgIHJldHVybiB0aGlzLl90b05vZGVzKGZvbGRlcnMsIHVuZGVmaW5lZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0IGZvbGRlcnMgaW4gYSB0cmVlIG9mIE5vZGUgb2JqZWN0LlxyXG4gICAqIEBwYXJhbSBmb2xkZXJzIDogdGhlIGNoaWxkcmVuIGdyb3VwIG9yIG51bGwgdG8gcm9vdFxyXG4gICAqIEBwYXJhbSBwYXJlbnQgIDogdGhlIHBhcmVudCBub2RlXHJcbiAgICogQHJldHVybnMgICAgICAgOiBhIG5vZGUgbGlzdCBcclxuICAgKi9cclxuICBwcml2YXRlIHN0YXRpYyBfdG9Ob2Rlcyhmb2xkZXJzOiBJTm9kZVtdLCBwYXJlbnQ6IElOb2RlIHwgdW5kZWZpbmVkKTogSU5vZGVbXSB7XHJcbiAgICBjb25zdCBub2RlczogSU5vZGVbXSA9IFtdO1xyXG4gICAgZm9sZGVycy5mb3JFYWNoKChuOiBJTm9kZSkgPT4ge1xyXG4gICAgICBjb25zdCBub2RlOiBJTm9kZSA9IHtcclxuICAgICAgICBpZDogbi5pZCxcclxuICAgICAgICBuYW1lOiBuLm5hbWUsXHJcbiAgICAgICAgY291bnQ6IG4uY291bnQsXHJcbiAgICAgICAgcGFyZW50OiBwYXJlbnQsXHJcbiAgICAgICAgY2hpbGRyZW46IHVuZGVmaW5lZCxcclxuICAgICAgICBiYWc6IG4sXHJcbiAgICAgIH07XHJcbiAgICAgIG5vZGUuY2hpbGRyZW4gPVxyXG4gICAgICAgIG4uY2hpbGRyZW4gJiYgbi5jaGlsZHJlbi5sZW5ndGggPiAwXHJcbiAgICAgICAgICA/IHRoaXMuX3RvTm9kZXMobi5jaGlsZHJlbiwgbm9kZSlcclxuICAgICAgICAgIDogW107XHJcbiAgICAgIG5vZGVzLnB1c2gobm9kZSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBub2RlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBSZXR1cm4gdGhlIGZsYWdzIGFycmF5IHRvIGJlIHVzZWQgaW4gc2VsZWN0aW9uc1xyXG4gKiBAcGFyYW0gdmFsdWUgOiB0aGUgbmV3IHZhbHVlXHJcbiAqIEBwYXJhbSBtYXg6IHRoZSBtYXggbnVtYmVyIG9mIGZsYWdzXHJcbiAqL1xyXG4gIHN0YXRpYyBnZXRGbGFncyh2YWx1ZTogbnVtYmVyLCBtYXg6IG51bWJlciA9IDMwKTogbnVtYmVyW10ge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIGxldCBpdGVtczogbnVtYmVyW10gPSBbXTtcclxuICAgICAgbGV0IHYgPSAxO1xyXG4gICAgICBsZXQgbSA9IDEgPDwgbWF4O1xyXG4gICAgICB3aGlsZSAodiA8IG0pIHtcclxuICAgICAgICBpZiAoKHZhbHVlICYgdikgPT09IHYpIGl0ZW1zLnB1c2godik7XHJcbiAgICAgICAgdiA9IHYgPDwgMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICB9IGVsc2UgcmV0dXJuIFtdO1xyXG4gIH1cclxufVxyXG4iXX0=