@milkio/vite-plugin-milkio 1.3.7 → 1.3.9

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.
Files changed (2) hide show
  1. package/index.js +3 -3
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -9547,7 +9547,7 @@ function useVitePluginMilkio(options) {
9547
9547
  req.on("end", () => {
9548
9548
  const method = req.method ?? "GET";
9549
9549
  const body = bodyChunks ? Buffer.concat(bodyChunks) : bodyBuffer;
9550
- const bodyText = body ? body.toString("utf-8") : "";
9550
+ const bodyText = body ? Buffer.from(body).toString("utf-8") : "";
9551
9551
  const reqUrl = req.url ?? "/";
9552
9552
  const protocol = req.encrypted ? "https" : "http";
9553
9553
  const host = req.headers.host ?? "localhost";
@@ -9763,5 +9763,5 @@ export {
9763
9763
  useVitePluginMilkio
9764
9764
  };
9765
9765
 
9766
- //# debugId=B2E97BFBDAE8BED064756E2164756E21
9767
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL2xpYi9wYXJzZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL2xpYi9jcmVhdGUtZGF0ZXRpbWUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL2xpYi9mb3JtYXQtbnVtLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaWFybmEvdG9tbC9saWIvY3JlYXRlLWRhdGV0aW1lLWZsb2F0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaWFybmEvdG9tbC9saWIvY3JlYXRlLWRhdGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL2xpYi9jcmVhdGUtdGltZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGlhcm5hL3RvbWwvbGliL3RvbWwtcGFyc2VyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaWFybmEvdG9tbC9wYXJzZS1wcmV0dHktZXJyb3IuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL3BhcnNlLXN0cmluZy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGlhcm5hL3RvbWwvcGFyc2UtYXN5bmMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL3BhcnNlLXN0cmVhbS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGlhcm5hL3RvbWwvcGFyc2UuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL3N0cmluZ2lmeS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGlhcm5hL3RvbWwvdG9tbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvdW5pdmVyc2FsaWZ5L2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9wb2x5ZmlsbHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL2xlZ2FjeS1zdHJlYW1zLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9jbG9uZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvZ3JhY2VmdWwtZnMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9mcy9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21rZGlycy91dGlscy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21rZGlycy9tYWtlLWRpci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21rZGlycy9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3BhdGgtZXhpc3RzL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvdXRpbC91dGltZXMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi91dGlsL3N0YXQuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi91dGlsL2FzeW5jLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS9jb3B5LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS9jb3B5LXN5bmMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9jb3B5L2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvcmVtb3ZlL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW1wdHkvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvZmlsZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9saW5rLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL3N5bWxpbmstcGF0aHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvc3ltbGluay10eXBlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL3N5bWxpbmsuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2pzb25maWxlL3V0aWxzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9qc29uZmlsZS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2pzb24vanNvbmZpbGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9vdXRwdXQtZmlsZS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2pzb24vb3V0cHV0LWpzb24uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL291dHB1dC1qc29uLXN5bmMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbW92ZS9tb3ZlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbW92ZS9tb3ZlLXN5bmMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9tb3ZlL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvaW5kZXguanMiLCAiLi4vaW5kZXgudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhbGFuY2VkLW1hdGNoL2Rpc3QvZXNtL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9icmFjZS1leHBhbnNpb24vZGlzdC9lc20vaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2VzbS9hc3NlcnQtdmFsaWQtcGF0dGVybi5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbWluaW1hdGNoL2Rpc3QvZXNtL2JyYWNlLWV4cHJlc3Npb25zLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvZGlzdC9lc20vdW5lc2NhcGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2VzbS9hc3QuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2VzbS9lc2NhcGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2VzbS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2VzbS9nbG9iLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9scnUtY2FjaGUvZGlzdC9lc20vbm9kZS9pbmRleC5taW4uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3BhdGgtc2N1cnJ5L2Rpc3QvZXNtL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9taW5pcGFzcy9kaXN0L2VzbS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2VzbS9wYXR0ZXJuLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvZXNtL2lnbm9yZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2VzbS9wcm9jZXNzb3IuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dsb2IvZGlzdC9lc20vd2Fsa2VyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvZXNtL2hhcy1tYWdpYy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2VzbS9pbmRleC5qcyIsICIuLi9hZGFwdGVycy9lZGdlLW9uZS50cyIsICIuLi9hZGFwdGVycy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIndXNlIHN0cmljdCdcbmNvbnN0IFBhcnNlckVORCA9IDB4MTEwMDAwXG5jbGFzcyBQYXJzZXJFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgY29uc3RydWN0b3IgKG1zZywgZmlsZW5hbWUsIGxpbmVudW1iZXIpIHtcbiAgICBzdXBlcignW1BhcnNlckVycm9yXSAnICsgbXNnLCBmaWxlbmFtZSwgbGluZW51bWJlcilcbiAgICB0aGlzLm5hbWUgPSAnUGFyc2VyRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1BhcnNlckVycm9yJ1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUGFyc2VyRXJyb3IpXG4gIH1cbn1cbmNsYXNzIFN0YXRlIHtcbiAgY29uc3RydWN0b3IgKHBhcnNlcikge1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyXG4gICAgdGhpcy5idWYgPSAnJ1xuICAgIHRoaXMucmV0dXJuZWQgPSBudWxsXG4gICAgdGhpcy5yZXN1bHQgPSBudWxsXG4gICAgdGhpcy5yZXN1bHRUYWJsZSA9IG51bGxcbiAgICB0aGlzLnJlc3VsdEFyciA9IG51bGxcbiAgfVxufVxuY2xhc3MgUGFyc2VyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMucG9zID0gMFxuICAgIHRoaXMuY29sID0gMFxuICAgIHRoaXMubGluZSA9IDBcbiAgICB0aGlzLm9iaiA9IHt9XG4gICAgdGhpcy5jdHggPSB0aGlzLm9ialxuICAgIHRoaXMuc3RhY2sgPSBbXVxuICAgIHRoaXMuX2J1ZiA9ICcnXG4gICAgdGhpcy5jaGFyID0gbnVsbFxuICAgIHRoaXMuaWkgPSAwXG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdGF0ZSh0aGlzLnBhcnNlU3RhcnQpXG4gIH1cblxuICBwYXJzZSAoc3RyKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCB8fCBzdHIubGVuZ3RoID09IG51bGwpIHJldHVyblxuXG4gICAgdGhpcy5fYnVmID0gU3RyaW5nKHN0cilcbiAgICB0aGlzLmlpID0gLTFcbiAgICB0aGlzLmNoYXIgPSAtMVxuICAgIGxldCBnZXROZXh0XG4gICAgd2hpbGUgKGdldE5leHQgPT09IGZhbHNlIHx8IHRoaXMubmV4dENoYXIoKSkge1xuICAgICAgZ2V0TmV4dCA9IHRoaXMucnVuT25lKClcbiAgICB9XG4gICAgdGhpcy5fYnVmID0gbnVsbFxuICB9XG4gIG5leHRDaGFyICgpIHtcbiAgICBpZiAodGhpcy5jaGFyID09PSAweDBBKSB7XG4gICAgICArK3RoaXMubGluZVxuICAgICAgdGhpcy5jb2wgPSAtMVxuICAgIH1cbiAgICArK3RoaXMuaWlcbiAgICB0aGlzLmNoYXIgPSB0aGlzLl9idWYuY29kZVBvaW50QXQodGhpcy5paSlcbiAgICArK3RoaXMucG9zXG4gICAgKyt0aGlzLmNvbFxuICAgIHJldHVybiB0aGlzLmhhdmVCdWZmZXIoKVxuICB9XG4gIGhhdmVCdWZmZXIgKCkge1xuICAgIHJldHVybiB0aGlzLmlpIDwgdGhpcy5fYnVmLmxlbmd0aFxuICB9XG4gIHJ1bk9uZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUucGFyc2VyLmNhbGwodGhpcywgdGhpcy5zdGF0ZS5yZXR1cm5lZClcbiAgfVxuICBmaW5pc2ggKCkge1xuICAgIHRoaXMuY2hhciA9IFBhcnNlckVORFxuICAgIGxldCBsYXN0XG4gICAgZG8ge1xuICAgICAgbGFzdCA9IHRoaXMuc3RhdGUucGFyc2VyXG4gICAgICB0aGlzLnJ1bk9uZSgpXG4gICAgfSB3aGlsZSAodGhpcy5zdGF0ZS5wYXJzZXIgIT09IGxhc3QpXG5cbiAgICB0aGlzLmN0eCA9IG51bGxcbiAgICB0aGlzLnN0YXRlID0gbnVsbFxuICAgIHRoaXMuX2J1ZiA9IG51bGxcblxuICAgIHJldHVybiB0aGlzLm9ialxuICB9XG4gIG5leHQgKGZuKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgUGFyc2VyRXJyb3IoJ1RyaWVkIHRvIHNldCBzdGF0ZSB0byBub24tZXhpc3RlbnQgc3RhdGU6ICcgKyBKU09OLnN0cmluZ2lmeShmbikpXG4gICAgdGhpcy5zdGF0ZS5wYXJzZXIgPSBmblxuICB9XG4gIGdvdG8gKGZuKSB7XG4gICAgdGhpcy5uZXh0KGZuKVxuICAgIHJldHVybiB0aGlzLnJ1bk9uZSgpXG4gIH1cbiAgY2FsbCAoZm4sIHJldHVybldpdGgpIHtcbiAgICBpZiAocmV0dXJuV2l0aCkgdGhpcy5uZXh0KHJldHVybldpdGgpXG4gICAgdGhpcy5zdGFjay5wdXNoKHRoaXMuc3RhdGUpXG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdGF0ZShmbilcbiAgfVxuICBjYWxsTm93IChmbiwgcmV0dXJuV2l0aCkge1xuICAgIHRoaXMuY2FsbChmbiwgcmV0dXJuV2l0aClcbiAgICByZXR1cm4gdGhpcy5ydW5PbmUoKVxuICB9XG4gIHJldHVybiAodmFsdWUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA9PT0gMCkgdGhyb3cgdGhpcy5lcnJvcihuZXcgUGFyc2VyRXJyb3IoJ1N0YWNrIHVuZGVyZmxvdycpKVxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB2YWx1ZSA9IHRoaXMuc3RhdGUuYnVmXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuc3RhY2sucG9wKClcbiAgICB0aGlzLnN0YXRlLnJldHVybmVkID0gdmFsdWVcbiAgfVxuICByZXR1cm5Ob3cgKHZhbHVlKSB7XG4gICAgdGhpcy5yZXR1cm4odmFsdWUpXG4gICAgcmV0dXJuIHRoaXMucnVuT25lKClcbiAgfVxuICBjb25zdW1lICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0aGlzLmNoYXIgPT09IFBhcnNlckVORCkgdGhyb3cgdGhpcy5lcnJvcihuZXcgUGFyc2VyRXJyb3IoJ1VuZXhwZWN0ZWQgZW5kLW9mLWJ1ZmZlcicpKVxuICAgIHRoaXMuc3RhdGUuYnVmICs9IHRoaXMuX2J1Zlt0aGlzLmlpXVxuICB9XG4gIGVycm9yIChlcnIpIHtcbiAgICBlcnIubGluZSA9IHRoaXMubGluZVxuICAgIGVyci5jb2wgPSB0aGlzLmNvbFxuICAgIGVyci5wb3MgPSB0aGlzLnBvc1xuICAgIHJldHVybiBlcnJcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBwYXJzZVN0YXJ0ICgpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VyRXJyb3IoJ011c3QgZGVjbGFyZSBhIHBhcnNlU3RhcnQgbWV0aG9kJylcbiAgfVxufVxuUGFyc2VyLkVORCA9IFBhcnNlckVORFxuUGFyc2VyLkVycm9yID0gUGFyc2VyRXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gUGFyc2VyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSB2YWx1ZSA9PiB7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSlcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChpc05hTihkYXRlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgRGF0ZXRpbWUnKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBkYXRlXG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IChkLCBudW0pID0+IHtcbiAgbnVtID0gU3RyaW5nKG51bSlcbiAgd2hpbGUgKG51bS5sZW5ndGggPCBkKSBudW0gPSAnMCcgKyBudW1cbiAgcmV0dXJuIG51bVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbmNvbnN0IGYgPSByZXF1aXJlKCcuL2Zvcm1hdC1udW0uanMnKVxuXG5jbGFzcyBGbG9hdGluZ0RhdGVUaW1lIGV4dGVuZHMgRGF0ZSB7XG4gIGNvbnN0cnVjdG9yICh2YWx1ZSkge1xuICAgIHN1cGVyKHZhbHVlICsgJ1onKVxuICAgIHRoaXMuaXNGbG9hdGluZyA9IHRydWVcbiAgfVxuICB0b0lTT1N0cmluZyAoKSB7XG4gICAgY29uc3QgZGF0ZSA9IGAke3RoaXMuZ2V0VVRDRnVsbFllYXIoKX0tJHtmKDIsIHRoaXMuZ2V0VVRDTW9udGgoKSArIDEpfS0ke2YoMiwgdGhpcy5nZXRVVENEYXRlKCkpfWBcbiAgICBjb25zdCB0aW1lID0gYCR7ZigyLCB0aGlzLmdldFVUQ0hvdXJzKCkpfToke2YoMiwgdGhpcy5nZXRVVENNaW51dGVzKCkpfToke2YoMiwgdGhpcy5nZXRVVENTZWNvbmRzKCkpfS4ke2YoMywgdGhpcy5nZXRVVENNaWxsaXNlY29uZHMoKSl9YFxuICAgIHJldHVybiBgJHtkYXRlfVQke3RpbWV9YFxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmFsdWUgPT4ge1xuICBjb25zdCBkYXRlID0gbmV3IEZsb2F0aW5nRGF0ZVRpbWUodmFsdWUpXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNOYU4oZGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIERhdGV0aW1lJylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0ZVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuY29uc3QgZiA9IHJlcXVpcmUoJy4vZm9ybWF0LW51bS5qcycpXG5jb25zdCBEYXRlVGltZSA9IGdsb2JhbC5EYXRlXG5cbmNsYXNzIERhdGUgZXh0ZW5kcyBEYXRlVGltZSB7XG4gIGNvbnN0cnVjdG9yICh2YWx1ZSkge1xuICAgIHN1cGVyKHZhbHVlKVxuICAgIHRoaXMuaXNEYXRlID0gdHJ1ZVxuICB9XG4gIHRvSVNPU3RyaW5nICgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5nZXRVVENGdWxsWWVhcigpfS0ke2YoMiwgdGhpcy5nZXRVVENNb250aCgpICsgMSl9LSR7ZigyLCB0aGlzLmdldFVUQ0RhdGUoKSl9YFxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmFsdWUgPT4ge1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNOYU4oZGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIERhdGV0aW1lJylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0ZVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuY29uc3QgZiA9IHJlcXVpcmUoJy4vZm9ybWF0LW51bS5qcycpXG5cbmNsYXNzIFRpbWUgZXh0ZW5kcyBEYXRlIHtcbiAgY29uc3RydWN0b3IgKHZhbHVlKSB7XG4gICAgc3VwZXIoYDAwMDAtMDEtMDFUJHt2YWx1ZX1aYClcbiAgICB0aGlzLmlzVGltZSA9IHRydWVcbiAgfVxuICB0b0lTT1N0cmluZyAoKSB7XG4gICAgcmV0dXJuIGAke2YoMiwgdGhpcy5nZXRVVENIb3VycygpKX06JHtmKDIsIHRoaXMuZ2V0VVRDTWludXRlcygpKX06JHtmKDIsIHRoaXMuZ2V0VVRDU2Vjb25kcygpKX0uJHtmKDMsIHRoaXMuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpfWBcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZhbHVlID0+IHtcbiAgY29uc3QgZGF0ZSA9IG5ldyBUaW1lKHZhbHVlKVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzTmFOKGRhdGUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBEYXRldGltZScpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRhdGVcbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbi8qIGVzbGludC1kaXNhYmxlIG5vLW5ldy13cmFwcGVycywgbm8tZXZhbCwgY2FtZWxjYXNlLCBvcGVyYXRvci1saW5lYnJlYWsgKi9cbm1vZHVsZS5leHBvcnRzID0gbWFrZVBhcnNlckNsYXNzKHJlcXVpcmUoJy4vcGFyc2VyLmpzJykpXG5tb2R1bGUuZXhwb3J0cy5tYWtlUGFyc2VyQ2xhc3MgPSBtYWtlUGFyc2VyQ2xhc3NcblxuY2xhc3MgVG9tbEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobXNnKSB7XG4gICAgc3VwZXIobXNnKVxuICAgIHRoaXMubmFtZSA9ICdUb21sRXJyb3InXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFRvbWxFcnJvcilcbiAgICB0aGlzLmZyb21UT01MID0gdHJ1ZVxuICAgIHRoaXMud3JhcHBlZCA9IG51bGxcbiAgfVxufVxuVG9tbEVycm9yLndyYXAgPSBlcnIgPT4ge1xuICBjb25zdCB0ZXJyID0gbmV3IFRvbWxFcnJvcihlcnIubWVzc2FnZSlcbiAgdGVyci5jb2RlID0gZXJyLmNvZGVcbiAgdGVyci53cmFwcGVkID0gZXJyXG4gIHJldHVybiB0ZXJyXG59XG5tb2R1bGUuZXhwb3J0cy5Ub21sRXJyb3IgPSBUb21sRXJyb3JcblxuY29uc3QgY3JlYXRlRGF0ZVRpbWUgPSByZXF1aXJlKCcuL2NyZWF0ZS1kYXRldGltZS5qcycpXG5jb25zdCBjcmVhdGVEYXRlVGltZUZsb2F0ID0gcmVxdWlyZSgnLi9jcmVhdGUtZGF0ZXRpbWUtZmxvYXQuanMnKVxuY29uc3QgY3JlYXRlRGF0ZSA9IHJlcXVpcmUoJy4vY3JlYXRlLWRhdGUuanMnKVxuY29uc3QgY3JlYXRlVGltZSA9IHJlcXVpcmUoJy4vY3JlYXRlLXRpbWUuanMnKVxuXG5jb25zdCBDVFJMX0kgPSAweDA5XG5jb25zdCBDVFJMX0ogPSAweDBBXG5jb25zdCBDVFJMX00gPSAweDBEXG5jb25zdCBDVFJMX0NIQVJfQk9VTkRBUlkgPSAweDFGIC8vIHRoZSBsYXN0IG5vbi1jaGFyYWN0ZXIgaW4gdGhlIGxhdGluMSByZWdpb24gb2YgdW5pY29kZSwgZXhjZXB0IERFTFxuY29uc3QgQ0hBUl9TUCA9IDB4MjBcbmNvbnN0IENIQVJfUVVPVCA9IDB4MjJcbmNvbnN0IENIQVJfTlVNID0gMHgyM1xuY29uc3QgQ0hBUl9BUE9TID0gMHgyN1xuY29uc3QgQ0hBUl9QTFVTID0gMHgyQlxuY29uc3QgQ0hBUl9DT01NQSA9IDB4MkNcbmNvbnN0IENIQVJfSFlQSEVOID0gMHgyRFxuY29uc3QgQ0hBUl9QRVJJT0QgPSAweDJFXG5jb25zdCBDSEFSXzAgPSAweDMwXG5jb25zdCBDSEFSXzEgPSAweDMxXG5jb25zdCBDSEFSXzcgPSAweDM3XG5jb25zdCBDSEFSXzkgPSAweDM5XG5jb25zdCBDSEFSX0NPTE9OID0gMHgzQVxuY29uc3QgQ0hBUl9FUVVBTFMgPSAweDNEXG5jb25zdCBDSEFSX0EgPSAweDQxXG5jb25zdCBDSEFSX0UgPSAweDQ1XG5jb25zdCBDSEFSX0YgPSAweDQ2XG5jb25zdCBDSEFSX1QgPSAweDU0XG5jb25zdCBDSEFSX1UgPSAweDU1XG5jb25zdCBDSEFSX1ogPSAweDVBXG5jb25zdCBDSEFSX0xPV0JBUiA9IDB4NUZcbmNvbnN0IENIQVJfYSA9IDB4NjFcbmNvbnN0IENIQVJfYiA9IDB4NjJcbmNvbnN0IENIQVJfZSA9IDB4NjVcbmNvbnN0IENIQVJfZiA9IDB4NjZcbmNvbnN0IENIQVJfaSA9IDB4NjlcbmNvbnN0IENIQVJfbCA9IDB4NkNcbmNvbnN0IENIQVJfbiA9IDB4NkVcbmNvbnN0IENIQVJfbyA9IDB4NkZcbmNvbnN0IENIQVJfciA9IDB4NzJcbmNvbnN0IENIQVJfcyA9IDB4NzNcbmNvbnN0IENIQVJfdCA9IDB4NzRcbmNvbnN0IENIQVJfdSA9IDB4NzVcbmNvbnN0IENIQVJfeCA9IDB4NzhcbmNvbnN0IENIQVJfeiA9IDB4N0FcbmNvbnN0IENIQVJfTENVQiA9IDB4N0JcbmNvbnN0IENIQVJfUkNVQiA9IDB4N0RcbmNvbnN0IENIQVJfTFNRQiA9IDB4NUJcbmNvbnN0IENIQVJfQlNPTCA9IDB4NUNcbmNvbnN0IENIQVJfUlNRQiA9IDB4NURcbmNvbnN0IENIQVJfREVMID0gMHg3RlxuY29uc3QgU1VSUk9HQVRFX0ZJUlNUID0gMHhEODAwXG5jb25zdCBTVVJST0dBVEVfTEFTVCA9IDB4REZGRlxuXG5jb25zdCBlc2NhcGVzID0ge1xuICBbQ0hBUl9iXTogJ1xcdTAwMDgnLFxuICBbQ0hBUl90XTogJ1xcdTAwMDknLFxuICBbQ0hBUl9uXTogJ1xcdTAwMEEnLFxuICBbQ0hBUl9mXTogJ1xcdTAwMEMnLFxuICBbQ0hBUl9yXTogJ1xcdTAwMEQnLFxuICBbQ0hBUl9RVU9UXTogJ1xcdTAwMjInLFxuICBbQ0hBUl9CU09MXTogJ1xcdTAwNUMnXG59XG5cbmZ1bmN0aW9uIGlzRGlnaXQgKGNwKSB7XG4gIHJldHVybiBjcCA+PSBDSEFSXzAgJiYgY3AgPD0gQ0hBUl85XG59XG5mdW5jdGlvbiBpc0hleGl0IChjcCkge1xuICByZXR1cm4gKGNwID49IENIQVJfQSAmJiBjcCA8PSBDSEFSX0YpIHx8IChjcCA+PSBDSEFSX2EgJiYgY3AgPD0gQ0hBUl9mKSB8fCAoY3AgPj0gQ0hBUl8wICYmIGNwIDw9IENIQVJfOSlcbn1cbmZ1bmN0aW9uIGlzQml0IChjcCkge1xuICByZXR1cm4gY3AgPT09IENIQVJfMSB8fCBjcCA9PT0gQ0hBUl8wXG59XG5mdW5jdGlvbiBpc09jdGl0IChjcCkge1xuICByZXR1cm4gKGNwID49IENIQVJfMCAmJiBjcCA8PSBDSEFSXzcpXG59XG5mdW5jdGlvbiBpc0FscGhhTnVtUXVvdGVIeXBoZW4gKGNwKSB7XG4gIHJldHVybiAoY3AgPj0gQ0hBUl9BICYmIGNwIDw9IENIQVJfWilcbiAgICAgIHx8IChjcCA+PSBDSEFSX2EgJiYgY3AgPD0gQ0hBUl96KVxuICAgICAgfHwgKGNwID49IENIQVJfMCAmJiBjcCA8PSBDSEFSXzkpXG4gICAgICB8fCBjcCA9PT0gQ0hBUl9BUE9TXG4gICAgICB8fCBjcCA9PT0gQ0hBUl9RVU9UXG4gICAgICB8fCBjcCA9PT0gQ0hBUl9MT1dCQVJcbiAgICAgIHx8IGNwID09PSBDSEFSX0hZUEhFTlxufVxuZnVuY3Rpb24gaXNBbHBoYU51bUh5cGhlbiAoY3ApIHtcbiAgcmV0dXJuIChjcCA+PSBDSEFSX0EgJiYgY3AgPD0gQ0hBUl9aKVxuICAgICAgfHwgKGNwID49IENIQVJfYSAmJiBjcCA8PSBDSEFSX3opXG4gICAgICB8fCAoY3AgPj0gQ0hBUl8wICYmIGNwIDw9IENIQVJfOSlcbiAgICAgIHx8IGNwID09PSBDSEFSX0xPV0JBUlxuICAgICAgfHwgY3AgPT09IENIQVJfSFlQSEVOXG59XG5jb25zdCBfdHlwZSA9IFN5bWJvbCgndHlwZScpXG5jb25zdCBfZGVjbGFyZWQgPSBTeW1ib2woJ2RlY2xhcmVkJylcblxuY29uc3QgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG5jb25zdCBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eVxuY29uc3QgZGVzY3JpcHRvciA9IHtjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkfVxuXG5mdW5jdGlvbiBoYXNLZXkgKG9iaiwga2V5KSB7XG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgcmV0dXJuIHRydWVcbiAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycpIGRlZmluZVByb3BlcnR5KG9iaiwgJ19fcHJvdG9fXycsIGRlc2NyaXB0b3IpXG4gIHJldHVybiBmYWxzZVxufVxuXG5jb25zdCBJTkxJTkVfVEFCTEUgPSBTeW1ib2woJ2lubGluZS10YWJsZScpXG5mdW5jdGlvbiBJbmxpbmVUYWJsZSAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSwge1xuICAgIFtfdHlwZV06IHt2YWx1ZTogSU5MSU5FX1RBQkxFfVxuICB9KVxufVxuZnVuY3Rpb24gaXNJbmxpbmVUYWJsZSAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIChvYmopICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBvYmpbX3R5cGVdID09PSBJTkxJTkVfVEFCTEVcbn1cblxuY29uc3QgVEFCTEUgPSBTeW1ib2woJ3RhYmxlJylcbmZ1bmN0aW9uIFRhYmxlICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHt9LCB7XG4gICAgW190eXBlXToge3ZhbHVlOiBUQUJMRX0sXG4gICAgW19kZWNsYXJlZF06IHt2YWx1ZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlfVxuICB9KVxufVxuZnVuY3Rpb24gaXNUYWJsZSAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIChvYmopICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBvYmpbX3R5cGVdID09PSBUQUJMRVxufVxuXG5jb25zdCBfY29udGVudFR5cGUgPSBTeW1ib2woJ2NvbnRlbnQtdHlwZScpXG5jb25zdCBJTkxJTkVfTElTVCA9IFN5bWJvbCgnaW5saW5lLWxpc3QnKVxuZnVuY3Rpb24gSW5saW5lTGlzdCAodHlwZSkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoW10sIHtcbiAgICBbX3R5cGVdOiB7dmFsdWU6IElOTElORV9MSVNUfSxcbiAgICBbX2NvbnRlbnRUeXBlXToge3ZhbHVlOiB0eXBlfVxuICB9KVxufVxuZnVuY3Rpb24gaXNJbmxpbmVMaXN0IChvYmopIHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2YgKG9iaikgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIG9ialtfdHlwZV0gPT09IElOTElORV9MSVNUXG59XG5cbmNvbnN0IExJU1QgPSBTeW1ib2woJ2xpc3QnKVxuZnVuY3Rpb24gTGlzdCAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhbXSwge1xuICAgIFtfdHlwZV06IHt2YWx1ZTogTElTVH1cbiAgfSlcbn1cbmZ1bmN0aW9uIGlzTGlzdCAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIChvYmopICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBvYmpbX3R5cGVdID09PSBMSVNUXG59XG5cbi8vIGluIGFuIGV2YWwsIHRvIGxldCBidW5kbGVycyBub3Qgc2x1cnAgaW4gYSB1dGlsIHByb3h5XG5sZXQgX2N1c3RvbVxudHJ5IHtcbiAgY29uc3QgdXRpbEluc3BlY3QgPSBldmFsKFwicmVxdWlyZSgndXRpbCcpLmluc3BlY3RcIilcbiAgX2N1c3RvbSA9IHV0aWxJbnNwZWN0LmN1c3RvbVxufSBjYXRjaCAoXykge1xuICAvKiBldmFsIHJlcXVpcmUgbm90IGF2YWlsYWJsZSBpbiB0cmFuc3BpbGVkIGJ1bmRsZSAqL1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNvbnN0IF9pbnNwZWN0ID0gX2N1c3RvbSB8fCAnaW5zcGVjdCdcblxuY2xhc3MgQm94ZWRCaWdJbnQge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy52YWx1ZSA9IGdsb2JhbC5CaWdJbnQuYXNJbnROKDY0LCB2YWx1ZSlcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIF90eXBlLCB7dmFsdWU6IElOVEVHRVJ9KVxuICB9XG4gIGlzTmFOICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSA9PT0gbnVsbFxuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMudmFsdWUpXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgW19pbnNwZWN0XSAoKSB7XG4gICAgcmV0dXJuIGBbQmlnSW50OiAke3RoaXMudG9TdHJpbmcoKX1dfWBcbiAgfVxuICB2YWx1ZU9mICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVxuICB9XG59XG5cbmNvbnN0IElOVEVHRVIgPSBTeW1ib2woJ2ludGVnZXInKVxuZnVuY3Rpb24gSW50ZWdlciAodmFsdWUpIHtcbiAgbGV0IG51bSA9IE51bWJlcih2YWx1ZSlcbiAgLy8gLTAgaXMgYSBmbG9hdCB0aGluZywgbm90IGFuIGludCB0aGluZ1xuICBpZiAoT2JqZWN0LmlzKG51bSwgLTApKSBudW0gPSAwXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChnbG9iYWwuQmlnSW50ICYmICFOdW1iZXIuaXNTYWZlSW50ZWdlcihudW0pKSB7XG4gICAgcmV0dXJuIG5ldyBCb3hlZEJpZ0ludCh2YWx1ZSlcbiAgfSBlbHNlIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuZXcgTnVtYmVyKG51bSksIHtcbiAgICAgIGlzTmFOOiB7dmFsdWU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlzTmFOKHRoaXMpIH19LFxuICAgICAgW190eXBlXToge3ZhbHVlOiBJTlRFR0VSfSxcbiAgICAgIFtfaW5zcGVjdF06IHt2YWx1ZTogKCkgPT4gYFtJbnRlZ2VyOiAke3ZhbHVlfV1gfVxuICAgIH0pXG4gIH1cbn1cbmZ1bmN0aW9uIGlzSW50ZWdlciAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIChvYmopICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBvYmpbX3R5cGVdID09PSBJTlRFR0VSXG59XG5cbmNvbnN0IEZMT0FUID0gU3ltYm9sKCdmbG9hdCcpXG5mdW5jdGlvbiBGbG9hdCAodmFsdWUpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG5ldyBOdW1iZXIodmFsdWUpLCB7XG4gICAgW190eXBlXToge3ZhbHVlOiBGTE9BVH0sXG4gICAgW19pbnNwZWN0XToge3ZhbHVlOiAoKSA9PiBgW0Zsb2F0OiAke3ZhbHVlfV1gfVxuICB9KVxufVxuZnVuY3Rpb24gaXNGbG9hdCAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIChvYmopICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBvYmpbX3R5cGVdID09PSBGTE9BVFxufVxuXG5mdW5jdGlvbiB0b21sVHlwZSAodmFsdWUpIHtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWx1ZVxuICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnbnVsbCdcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gJ2RhdGV0aW1lJ1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKF90eXBlIGluIHZhbHVlKSB7XG4gICAgICBzd2l0Y2ggKHZhbHVlW190eXBlXSkge1xuICAgICAgICBjYXNlIElOTElORV9UQUJMRTogcmV0dXJuICdpbmxpbmUtdGFibGUnXG4gICAgICAgIGNhc2UgSU5MSU5FX0xJU1Q6IHJldHVybiAnaW5saW5lLWxpc3QnXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGNhc2UgVEFCTEU6IHJldHVybiAndGFibGUnXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGNhc2UgTElTVDogcmV0dXJuICdsaXN0J1xuICAgICAgICBjYXNlIEZMT0FUOiByZXR1cm4gJ2Zsb2F0J1xuICAgICAgICBjYXNlIElOVEVHRVI6IHJldHVybiAnaW50ZWdlcidcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHR5cGVcbn1cblxuZnVuY3Rpb24gbWFrZVBhcnNlckNsYXNzIChQYXJzZXIpIHtcbiAgY2xhc3MgVE9NTFBhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgc3VwZXIoKVxuICAgICAgdGhpcy5jdHggPSB0aGlzLm9iaiA9IFRhYmxlKClcbiAgICB9XG5cbiAgICAvKiBNQVRDSCBIRUxQRVIgKi9cbiAgICBhdEVuZE9mV29yZCAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGFyID09PSBDSEFSX05VTSB8fCB0aGlzLmNoYXIgPT09IENUUkxfSSB8fCB0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5hdEVuZE9mTGluZSgpXG4gICAgfVxuICAgIGF0RW5kT2ZMaW5lICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoYXIgPT09IFBhcnNlci5FTkQgfHwgdGhpcy5jaGFyID09PSBDVFJMX0ogfHwgdGhpcy5jaGFyID09PSBDVFJMX01cbiAgICB9XG5cbiAgICBwYXJzZVN0YXJ0ICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IFBhcnNlci5FTkQpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xTUUIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlVGFibGVPckxpc3QpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9OVU0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlQ29tbWVudClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDVFJMX0ogfHwgdGhpcy5jaGFyID09PSBDSEFSX1NQIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9JIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9NKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9IGVsc2UgaWYgKGlzQWxwaGFOdW1RdW90ZUh5cGhlbih0aGlzLmNoYXIpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUFzc2lnblN0YXRlbWVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcihgVW5rbm93biBjaGFyYWN0ZXIgXCIke3RoaXMuY2hhcn1cImApKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhFTFBFUiwgdGhpcyBzdHJpcHMgYW55IHdoaXRlc3BhY2UgYW5kIGNvbW1lbnRzIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmVcbiAgICAvLyB0aGVuIFJFVFVSTlMuIExhc3Qgc3RhdGUgaW4gYSBwcm9kdWN0aW9uLlxuICAgIHBhcnNlV2hpdGVzcGFjZVRvRU9MICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kgfHwgdGhpcy5jaGFyID09PSBDVFJMX00pIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX05VTSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VDb21tZW50KVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IFBhcnNlci5FTkQgfHwgdGhpcy5jaGFyID09PSBDVFJMX0opIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW5leHBlY3RlZCBjaGFyYWN0ZXIsIGV4cGVjdGVkIG9ubHkgd2hpdGVzcGFjZSBvciBjb21tZW50cyB0aWxsIGVuZCBvZiBsaW5lJykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogQVNTSUdOTUVOVDoga2V5ID0gdmFsdWUgKi9cbiAgICBwYXJzZUFzc2lnblN0YXRlbWVudCAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWxsTm93KHRoaXMucGFyc2VBc3NpZ24sIHRoaXMucmVjb3JkQXNzaWduU3RhdGVtZW50KVxuICAgIH1cbiAgICByZWNvcmRBc3NpZ25TdGF0ZW1lbnQgKGt2KSB7XG4gICAgICBsZXQgdGFyZ2V0ID0gdGhpcy5jdHhcbiAgICAgIGxldCBmaW5hbEtleSA9IGt2LmtleS5wb3AoKVxuICAgICAgZm9yIChsZXQga3cgb2Yga3Yua2V5KSB7XG4gICAgICAgIGlmIChoYXNLZXkodGFyZ2V0LCBrdykgJiYgKCFpc1RhYmxlKHRhcmdldFtrd10pIHx8IHRhcmdldFtrd11bX2RlY2xhcmVkXSkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBleGlzdGluZyBrZXlcIikpXG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W2t3XSA9IHRhcmdldFtrd10gfHwgVGFibGUoKVxuICAgICAgfVxuICAgICAgaWYgKGhhc0tleSh0YXJnZXQsIGZpbmFsS2V5KSkge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBleGlzdGluZyBrZXlcIikpXG4gICAgICB9XG4gICAgICAvLyB1bmJveCBvdXIgbnVtYmVyc1xuICAgICAgaWYgKGlzSW50ZWdlcihrdi52YWx1ZSkgfHwgaXNGbG9hdChrdi52YWx1ZSkpIHtcbiAgICAgICAgdGFyZ2V0W2ZpbmFsS2V5XSA9IGt2LnZhbHVlLnZhbHVlT2YoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W2ZpbmFsS2V5XSA9IGt2LnZhbHVlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VXaGl0ZXNwYWNlVG9FT0wpXG4gICAgfVxuXG4gICAgLyogQVNTU0lHTk1FTlQgZXhwcmVzc2lvbiwga2V5ID0gdmFsdWUgcG9zc2libHkgaW5zaWRlIGFuIGlubGluZSB0YWJsZSAqL1xuICAgIHBhcnNlQXNzaWduICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUtleXdvcmQsIHRoaXMucmVjb3JkQXNzaWduS2V5d29yZClcbiAgICB9XG4gICAgcmVjb3JkQXNzaWduS2V5d29yZCAoa2V5KSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5yZXN1bHRUYWJsZSkge1xuICAgICAgICB0aGlzLnN0YXRlLnJlc3VsdFRhYmxlLnB1c2goa2V5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5yZXN1bHRUYWJsZSA9IFtrZXldXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VBc3NpZ25LZXl3b3JkUHJlRG90KVxuICAgIH1cbiAgICBwYXJzZUFzc2lnbktleXdvcmRQcmVEb3QgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9QRVJJT0QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlQXNzaWduS2V5d29yZFBvc3REb3QpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciAhPT0gQ0hBUl9TUCAmJiB0aGlzLmNoYXIgIT09IENUUkxfSSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VBc3NpZ25FcXVhbClcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VBc3NpZ25LZXl3b3JkUG9zdERvdCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyICE9PSBDSEFSX1NQICYmIHRoaXMuY2hhciAhPT0gQ1RSTF9JKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUtleXdvcmQsIHRoaXMucmVjb3JkQXNzaWduS2V5d29yZClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZUFzc2lnbkVxdWFsICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfRVFVQUxTKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUFzc2lnblByZVZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciwgZXhwZWN0ZWQgXCI9XCInKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VBc3NpZ25QcmVWYWx1ZSAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1NQIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9JKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsTm93KHRoaXMucGFyc2VWYWx1ZSwgdGhpcy5yZWNvcmRBc3NpZ25WYWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmVjb3JkQXNzaWduVmFsdWUgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coe2tleTogdGhpcy5zdGF0ZS5yZXN1bHRUYWJsZSwgdmFsdWU6IHZhbHVlfSlcbiAgICB9XG5cbiAgICAvKiBDT01NRU5UUzogIy4uLmVvbCAqL1xuICAgIHBhcnNlQ29tbWVudCAoKSB7XG4gICAgICBkbyB7XG4gICAgICAgIGlmICh0aGlzLmNoYXIgPT09IFBhcnNlci5FTkQgfHwgdGhpcy5jaGFyID09PSBDVFJMX0opIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm4oKVxuICAgICAgICB9XG4gICAgICB9IHdoaWxlICh0aGlzLm5leHRDaGFyKCkpXG4gICAgfVxuXG4gICAgLyogVEFCTEVTIEFORCBMSVNUUywgW2Zvb10gYW5kIFtbZm9vXV0gKi9cbiAgICBwYXJzZVRhYmxlT3JMaXN0ICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTFNRQikge1xuICAgICAgICB0aGlzLm5leHQodGhpcy5wYXJzZUxpc3QpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VUYWJsZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBUQUJMRSBbZm9vLmJhci5iYXpdICovXG4gICAgcGFyc2VUYWJsZSAoKSB7XG4gICAgICB0aGlzLmN0eCA9IHRoaXMub2JqXG4gICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VUYWJsZU5leHQpXG4gICAgfVxuICAgIHBhcnNlVGFibGVOZXh0ICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUtleXdvcmQsIHRoaXMucGFyc2VUYWJsZU1vcmUpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlVGFibGVNb3JlIChrZXl3b3JkKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1NQIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9JKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9SU1FCKSB7XG4gICAgICAgIGlmIChoYXNLZXkodGhpcy5jdHgsIGtleXdvcmQpICYmICghaXNUYWJsZSh0aGlzLmN0eFtrZXl3b3JkXSkgfHwgdGhpcy5jdHhba2V5d29yZF1bX2RlY2xhcmVkXSkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBleGlzdGluZyBrZXlcIikpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmN0eFtrZXl3b3JkXSA9IHRoaXMuY3R4W2tleXdvcmRdIHx8IFRhYmxlKClcbiAgICAgICAgICB0aGlzLmN0eFtfZGVjbGFyZWRdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZVdoaXRlc3BhY2VUb0VPTClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1BFUklPRCkge1xuICAgICAgICBpZiAoIWhhc0tleSh0aGlzLmN0eCwga2V5d29yZCkpIHtcbiAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY3R4W2tleXdvcmRdID0gVGFibGUoKVxuICAgICAgICB9IGVsc2UgaWYgKGlzVGFibGUodGhpcy5jdHhba2V5d29yZF0pKSB7XG4gICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmN0eFtrZXl3b3JkXVxuICAgICAgICB9IGVsc2UgaWYgKGlzTGlzdCh0aGlzLmN0eFtrZXl3b3JkXSkpIHtcbiAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY3R4W2tleXdvcmRdW3RoaXMuY3R4W2tleXdvcmRdLmxlbmd0aCAtIDFdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKFwiQ2FuJ3QgcmVkZWZpbmUgZXhpc3Rpbmcga2V5XCIpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZVRhYmxlTmV4dClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW5leHBlY3RlZCBjaGFyYWN0ZXIsIGV4cGVjdGVkIHdoaXRlc3BhY2UsIC4gb3IgXScpKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qIExJU1QgW1thLmIuY11dICovXG4gICAgcGFyc2VMaXN0ICgpIHtcbiAgICAgIHRoaXMuY3R4ID0gdGhpcy5vYmpcbiAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZUxpc3ROZXh0KVxuICAgIH1cbiAgICBwYXJzZUxpc3ROZXh0ICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUtleXdvcmQsIHRoaXMucGFyc2VMaXN0TW9yZSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VMaXN0TW9yZSAoa2V5d29yZCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9TUCB8fCB0aGlzLmNoYXIgPT09IENUUkxfSSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUlNRQikge1xuICAgICAgICBpZiAoIWhhc0tleSh0aGlzLmN0eCwga2V5d29yZCkpIHtcbiAgICAgICAgICB0aGlzLmN0eFtrZXl3b3JkXSA9IExpc3QoKVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0lubGluZUxpc3QodGhpcy5jdHhba2V5d29yZF0pKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKFwiQ2FuJ3QgZXh0ZW5kIGFuIGlubGluZSBhcnJheVwiKSlcbiAgICAgICAgfSBlbHNlIGlmIChpc0xpc3QodGhpcy5jdHhba2V5d29yZF0pKSB7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IFRhYmxlKClcbiAgICAgICAgICB0aGlzLmN0eFtrZXl3b3JkXS5wdXNoKG5leHQpXG4gICAgICAgICAgdGhpcy5jdHggPSBuZXh0XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKFwiQ2FuJ3QgcmVkZWZpbmUgYW4gZXhpc3Rpbmcga2V5XCIpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUxpc3RFbmQpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9QRVJJT0QpIHtcbiAgICAgICAgaWYgKCFoYXNLZXkodGhpcy5jdHgsIGtleXdvcmQpKSB7XG4gICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmN0eFtrZXl3b3JkXSA9IFRhYmxlKClcbiAgICAgICAgfSBlbHNlIGlmIChpc0lubGluZUxpc3QodGhpcy5jdHhba2V5d29yZF0pKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKFwiQ2FuJ3QgZXh0ZW5kIGFuIGlubGluZSBhcnJheVwiKSlcbiAgICAgICAgfSBlbHNlIGlmIChpc0lubGluZVRhYmxlKHRoaXMuY3R4W2tleXdvcmRdKSkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcihcIkNhbid0IGV4dGVuZCBhbiBpbmxpbmUgdGFibGVcIikpXG4gICAgICAgIH0gZWxzZSBpZiAoaXNMaXN0KHRoaXMuY3R4W2tleXdvcmRdKSkge1xuICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jdHhba2V5d29yZF1bdGhpcy5jdHhba2V5d29yZF0ubGVuZ3RoIC0gMV1cbiAgICAgICAgfSBlbHNlIGlmIChpc1RhYmxlKHRoaXMuY3R4W2tleXdvcmRdKSkge1xuICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jdHhba2V5d29yZF1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBhbiBleGlzdGluZyBrZXlcIikpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTGlzdE5leHQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyLCBleHBlY3RlZCB3aGl0ZXNwYWNlLCAuIG9yIF0nKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VMaXN0RW5kIChrZXl3b3JkKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1JTUUIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlV2hpdGVzcGFjZVRvRU9MKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciwgZXhwZWN0ZWQgd2hpdGVzcGFjZSwgLiBvciBdJykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogVkFMVUUgc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIGlubGluZSBsaXN0LCBpbmxpbmUgb2JqZWN0ICovXG4gICAgcGFyc2VWYWx1ZSAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBQYXJzZXIuRU5EKSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignS2V5IHdpdGhvdXQgdmFsdWUnKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1FVT1QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlRG91YmxlU3RyaW5nKVxuICAgICAgfSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0FQT1MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlU2luZ2xlU3RyaW5nKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfSFlQSEVOIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9QTFVTKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZU51bWJlclNpZ24pXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9pKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUluZilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTmFuKVxuICAgICAgfSBlbHNlIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTnVtYmVyT3JEYXRlVGltZSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX3QgfHwgdGhpcy5jaGFyID09PSBDSEFSX2YpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlQm9vbGVhbilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xTUUIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlSW5saW5lTGlzdCwgdGhpcy5yZWNvcmRWYWx1ZSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xDVUIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlSW5saW5lVGFibGUsIHRoaXMucmVjb3JkVmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyLCBleHBlY3Rpbmcgc3RyaW5nLCBudW1iZXIsIGRhdGV0aW1lLCBib29sZWFuLCBpbmxpbmUgYXJyYXkgb3IgaW5saW5lIHRhYmxlJykpXG4gICAgICB9XG4gICAgfVxuICAgIHJlY29yZFZhbHVlICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KHZhbHVlKVxuICAgIH1cblxuICAgIHBhcnNlSW5mICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfbikge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VJbmYyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciwgZXhwZWN0ZWQgXCJpbmZcIiwgXCIraW5mXCIgb3IgXCItaW5mXCInKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VJbmYyICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfZikge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5idWYgPT09ICctJykge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJldHVybigtSW5maW5pdHkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKEluZmluaXR5KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyLCBleHBlY3RlZCBcImluZlwiLCBcIitpbmZcIiBvciBcIi1pbmZcIicpKVxuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlTmFuICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VOYW4yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciwgZXhwZWN0ZWQgXCJuYW5cIicpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU5hbjIgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybihOYU4pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyLCBleHBlY3RlZCBcIm5hblwiJykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogS0VZUywgYmFyZXdvcmRzIG9yIGJhc2ljLCBsaXRlcmFsLCBvciBkb3R0ZWQgKi9cbiAgICBwYXJzZUtleXdvcmQgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9RVU9UKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUJhc2ljU3RyaW5nKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfQVBPUykge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VMaXRlcmFsU3RyaW5nKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlQmFyZUtleSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBLRVlTOiBiYXJld29yZHMgKi9cbiAgICBwYXJzZUJhcmVLZXkgKCkge1xuICAgICAgZG8ge1xuICAgICAgICBpZiAodGhpcy5jaGFyID09PSBQYXJzZXIuRU5EKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdLZXkgZW5kZWQgd2l0aG91dCB2YWx1ZScpKVxuICAgICAgICB9IGVsc2UgaWYgKGlzQWxwaGFOdW1IeXBoZW4odGhpcy5jaGFyKSkge1xuICAgICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5idWYubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdFbXB0eSBiYXJlIGtleXMgYXJlIG5vdCBhbGxvd2VkJykpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KClcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAodGhpcy5uZXh0Q2hhcigpKVxuICAgIH1cblxuICAgIC8qIFNUUklOR1MsIHNpbmdsZSBxdW90ZWQgKGxpdGVyYWwpICovXG4gICAgcGFyc2VTaW5nbGVTdHJpbmcgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9BUE9TKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUxpdGVyYWxNdWx0aVN0cmluZ01heWJlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTGl0ZXJhbFN0cmluZylcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VMaXRlcmFsU3RyaW5nICgpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9BUE9TKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmF0RW5kT2ZMaW5lKCkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VudGVybWluYXRlZCBzdHJpbmcnKSlcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfREVMIHx8ICh0aGlzLmNoYXIgPD0gQ1RSTF9DSEFSX0JPVU5EQVJZICYmIHRoaXMuY2hhciAhPT0gQ1RSTF9JKSkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3JDb250cm9sQ2hhckluU3RyaW5nKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICB9XG4gICAgICB9IHdoaWxlICh0aGlzLm5leHRDaGFyKCkpXG4gICAgfVxuICAgIHBhcnNlTGl0ZXJhbE11bHRpU3RyaW5nTWF5YmUgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9BUE9TKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUxpdGVyYWxNdWx0aVN0cmluZylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdygpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTGl0ZXJhbE11bHRpU3RyaW5nICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENUUkxfTSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENUUkxfSikge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VMaXRlcmFsTXVsdGlTdHJpbmdDb250ZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTGl0ZXJhbE11bHRpU3RyaW5nQ29udGVudClcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VMaXRlcmFsTXVsdGlTdHJpbmdDb250ZW50ICgpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9BUE9TKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTGl0ZXJhbE11bHRpRW5kKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gUGFyc2VyLkVORCkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW50ZXJtaW5hdGVkIG11bHRpLWxpbmUgc3RyaW5nJykpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0RFTCB8fCAodGhpcy5jaGFyIDw9IENUUkxfQ0hBUl9CT1VOREFSWSAmJiB0aGlzLmNoYXIgIT09IENUUkxfSSAmJiB0aGlzLmNoYXIgIT09IENUUkxfSiAmJiB0aGlzLmNoYXIgIT09IENUUkxfTSkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yQ29udHJvbENoYXJJblN0cmluZygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAodGhpcy5uZXh0Q2hhcigpKVxuICAgIH1cbiAgICBwYXJzZUxpdGVyYWxNdWx0aUVuZCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0FQT1MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTGl0ZXJhbE11bHRpRW5kMilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUuYnVmICs9IFwiJ1wiXG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZUxpdGVyYWxNdWx0aVN0cmluZ0NvbnRlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTGl0ZXJhbE11bHRpRW5kMiAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0FQT1MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUuYnVmICs9IFwiJydcIlxuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VMaXRlcmFsTXVsdGlTdHJpbmdDb250ZW50KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qIFNUUklOR1MgZG91YmxlIHF1b3RlZCAqL1xuICAgIHBhcnNlRG91YmxlU3RyaW5nICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUVVPVCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VNdWx0aVN0cmluZ01heWJlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlQmFzaWNTdHJpbmcpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlQmFzaWNTdHJpbmcgKCkge1xuICAgICAgZG8ge1xuICAgICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0JTT0wpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VFc2NhcGUsIHRoaXMucmVjb3JkRXNjYXBlUmVwbGFjZW1lbnQpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1FVT1QpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm4oKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXRFbmRPZkxpbmUoKSkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW50ZXJtaW5hdGVkIHN0cmluZycpKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9ERUwgfHwgKHRoaXMuY2hhciA8PSBDVFJMX0NIQVJfQk9VTkRBUlkgJiYgdGhpcy5jaGFyICE9PSBDVFJMX0kpKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvckNvbnRyb2xDaGFySW5TdHJpbmcoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIH1cbiAgICAgIH0gd2hpbGUgKHRoaXMubmV4dENoYXIoKSlcbiAgICB9XG4gICAgcmVjb3JkRXNjYXBlUmVwbGFjZW1lbnQgKHJlcGxhY2VtZW50KSB7XG4gICAgICB0aGlzLnN0YXRlLmJ1ZiArPSByZXBsYWNlbWVudFxuICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlQmFzaWNTdHJpbmcpXG4gICAgfVxuICAgIHBhcnNlTXVsdGlTdHJpbmdNYXliZSAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1FVT1QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTXVsdGlTdHJpbmcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU11bHRpU3RyaW5nICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENUUkxfTSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENUUkxfSikge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VNdWx0aVN0cmluZ0NvbnRlbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VNdWx0aVN0cmluZ0NvbnRlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTXVsdGlTdHJpbmdDb250ZW50ICgpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9CU09MKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlTXVsdGlFc2NhcGUsIHRoaXMucmVjb3JkTXVsdGlFc2NhcGVSZXBsYWNlbWVudClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUVVPVCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU11bHRpRW5kKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gUGFyc2VyLkVORCkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW50ZXJtaW5hdGVkIG11bHRpLWxpbmUgc3RyaW5nJykpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0RFTCB8fCAodGhpcy5jaGFyIDw9IENUUkxfQ0hBUl9CT1VOREFSWSAmJiB0aGlzLmNoYXIgIT09IENUUkxfSSAmJiB0aGlzLmNoYXIgIT09IENUUkxfSiAmJiB0aGlzLmNoYXIgIT09IENUUkxfTSkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yQ29udHJvbENoYXJJblN0cmluZygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAodGhpcy5uZXh0Q2hhcigpKVxuICAgIH1cbiAgICBlcnJvckNvbnRyb2xDaGFySW5TdHJpbmcgKCkge1xuICAgICAgbGV0IGRpc3BsYXlDb2RlID0gJ1xcXFx1MDAnXG4gICAgICBpZiAodGhpcy5jaGFyIDwgMTYpIHtcbiAgICAgICAgZGlzcGxheUNvZGUgKz0gJzAnXG4gICAgICB9XG4gICAgICBkaXNwbGF5Q29kZSArPSB0aGlzLmNoYXIudG9TdHJpbmcoMTYpXG5cbiAgICAgIHJldHVybiB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoYENvbnRyb2wgY2hhcmFjdGVycyAoY29kZXMgPCAweDFmIGFuZCAweDdmKSBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaW5ncywgdXNlICR7ZGlzcGxheUNvZGV9IGluc3RlYWRgKSlcbiAgICB9XG4gICAgcmVjb3JkTXVsdGlFc2NhcGVSZXBsYWNlbWVudCAocmVwbGFjZW1lbnQpIHtcbiAgICAgIHRoaXMuc3RhdGUuYnVmICs9IHJlcGxhY2VtZW50XG4gICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VNdWx0aVN0cmluZ0NvbnRlbnQpXG4gICAgfVxuICAgIHBhcnNlTXVsdGlFbmQgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9RVU9UKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU11bHRpRW5kMilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUuYnVmICs9ICdcIidcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTXVsdGlTdHJpbmdDb250ZW50KVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU11bHRpRW5kMiAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1FVT1QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUuYnVmICs9ICdcIlwiJ1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VNdWx0aVN0cmluZ0NvbnRlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTXVsdGlFc2NhcGUgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ1RSTF9NIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9KKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU11bHRpVHJpbSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1NQIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9JKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZVByZU11bHRpVHJpbSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZUVzY2FwZSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VQcmVNdWx0aVRyaW0gKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9TUCB8fCB0aGlzLmNoYXIgPT09IENUUkxfSSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENUUkxfTSB8fCB0aGlzLmNoYXIgPT09IENUUkxfSikge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VNdWx0aVRyaW0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCBlc2NhcGUgd2hpdGVzcGFjZVwiKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VNdWx0aVRyaW0gKCkge1xuICAgICAgLy8gZXhwbGljaXRseSB3aGl0ZXNwYWNlIGhlcmUsIEVORCBzaG91bGQgZm9sbG93IHRoZSBzYW1lIHBhdGggYXMgY2hhcnNcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENUUkxfSiB8fCB0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kgfHwgdGhpcy5jaGFyID09PSBDVFJMX00pIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdygpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlRXNjYXBlICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgaW4gZXNjYXBlcykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm4oZXNjYXBlc1t0aGlzLmNoYXJdKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfdSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VTbWFsbFVuaWNvZGUsIHRoaXMucGFyc2VVbmljb2RlUmV0dXJuKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfVSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VMYXJnZVVuaWNvZGUsIHRoaXMucGFyc2VVbmljb2RlUmV0dXJuKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmtub3duIGVzY2FwZSBjaGFyYWN0ZXI6ICcgKyB0aGlzLmNoYXIpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVVuaWNvZGVSZXR1cm4gKGNoYXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvZGVQb2ludCA9IHBhcnNlSW50KGNoYXIsIDE2KVxuICAgICAgICBpZiAoY29kZVBvaW50ID49IFNVUlJPR0FURV9GSVJTVCAmJiBjb2RlUG9pbnQgPD0gU1VSUk9HQVRFX0xBU1QpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0ludmFsaWQgdW5pY29kZSwgY2hhcmFjdGVyIGluIHJhbmdlIDB4RDgwMCAtIDB4REZGRiBpcyByZXNlcnZlZCcpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdyhTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IoVG9tbEVycm9yLndyYXAoZXJyKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VTbWFsbFVuaWNvZGUgKCkge1xuICAgICAgaWYgKCFpc0hleGl0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiB1bmljb2RlIHNlcXVlbmNlLCBleHBlY3RlZCBoZXgnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPj0gNCkgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VMYXJnZVVuaWNvZGUgKCkge1xuICAgICAgaWYgKCFpc0hleGl0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiB1bmljb2RlIHNlcXVlbmNlLCBleHBlY3RlZCBoZXgnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPj0gOCkgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBOVU1CRVJTICovXG4gICAgcGFyc2VOdW1iZXJTaWduICgpIHtcbiAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VNYXliZVNpZ25lZEluZk9yTmFuKVxuICAgIH1cbiAgICBwYXJzZU1heWJlU2lnbmVkSW5mT3JOYW4gKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9pKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUluZilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTmFuKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbE5vdyh0aGlzLnBhcnNlTm9VbmRlciwgdGhpcy5wYXJzZU51bWJlckludGVnZXJTdGFydClcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VOdW1iZXJJbnRlZ2VyU3RhcnQgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl8wKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU51bWJlckludGVnZXJFeHBvbmVudE9yRGVjaW1hbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZU51bWJlckludGVnZXIpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTnVtYmVySW50ZWdlckV4cG9uZW50T3JEZWNpbWFsICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUEVSSU9EKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZU5vVW5kZXIsIHRoaXMucGFyc2VOdW1iZXJGbG9hdClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0UgfHwgdGhpcy5jaGFyID09PSBDSEFSX2UpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTnVtYmVyRXhwb25lbnRTaWduKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KEludGVnZXIodGhpcy5zdGF0ZS5idWYpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU51bWJlckludGVnZXIgKCkge1xuICAgICAgaWYgKGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTE9XQkFSKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZU5vVW5kZXIpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9FIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9lKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU51bWJlckV4cG9uZW50U2lnbilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1BFUklPRCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVyLCB0aGlzLnBhcnNlTnVtYmVyRmxvYXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBJbnRlZ2VyKHRoaXMuc3RhdGUuYnVmKVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHJlc3VsdC5pc05hTigpKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIG51bWJlcicpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdyhyZXN1bHQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VOb1VuZGVyICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTE9XQkFSIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9QRVJJT0QgfHwgdGhpcy5jaGFyID09PSBDSEFSX0UgfHwgdGhpcy5jaGFyID09PSBDSEFSX2UpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciwgZXhwZWN0ZWQgZGlnaXQnKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hdEVuZE9mV29yZCgpKSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW5jb21wbGV0ZSBudW1iZXInKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdygpXG4gICAgfVxuICAgIHBhcnNlTm9VbmRlckhleE9jdEJpbkxpdGVyYWwgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9MT1dCQVIgfHwgdGhpcy5jaGFyID09PSBDSEFSX1BFUklPRCkge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyLCBleHBlY3RlZCBkaWdpdCcpKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmF0RW5kT2ZXb3JkKCkpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbmNvbXBsZXRlIG51bWJlcicpKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KClcbiAgICB9XG4gICAgcGFyc2VOdW1iZXJGbG9hdCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xPV0JBUikge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVyLCB0aGlzLnBhcnNlTnVtYmVyRmxvYXQpXG4gICAgICB9IGVsc2UgaWYgKGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfRSB8fCB0aGlzLmNoYXIgPT09IENIQVJfZSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VOdW1iZXJFeHBvbmVudFNpZ24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coRmxvYXQodGhpcy5zdGF0ZS5idWYpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU51bWJlckV4cG9uZW50U2lnbiAoKSB7XG4gICAgICBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZU51bWJlckV4cG9uZW50KVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfSFlQSEVOIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9QTFVTKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHRoaXMuY2FsbCh0aGlzLnBhcnNlTm9VbmRlciwgdGhpcy5wYXJzZU51bWJlckV4cG9uZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciwgZXhwZWN0ZWQgLSwgKyBvciBkaWdpdCcpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU51bWJlckV4cG9uZW50ICgpIHtcbiAgICAgIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xPV0JBUikge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KEZsb2F0KHRoaXMuc3RhdGUuYnVmKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBOVU1CRVJTIG9yIERBVEVUSU1FUyAgKi9cbiAgICBwYXJzZU51bWJlck9yRGF0ZVRpbWUgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl8wKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU51bWJlckJhc2VPckRhdGVUaW1lKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTnVtYmVyT3JEYXRlVGltZU9ubHkpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTnVtYmVyT3JEYXRlVGltZU9ubHkgKCkge1xuICAgICAgLy8gbm90ZSwgaWYgdHdvIHplcm9zIGFyZSBpbiBhIHJvdyB0aGVuIGl0IE1VU1QgYmUgYSBkYXRlXG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xPV0JBUikge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVyLCB0aGlzLnBhcnNlTnVtYmVySW50ZWdlcilcbiAgICAgIH0gZWxzZSBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPiA0KSB0aGlzLm5leHQodGhpcy5wYXJzZU51bWJlckludGVnZXIpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9FIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9lKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU51bWJlckV4cG9uZW50U2lnbilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1BFUklPRCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVyLCB0aGlzLnBhcnNlTnVtYmVyRmxvYXQpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9IWVBIRU4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlRGF0ZVRpbWUpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9DT0xPTikge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VPbmx5VGltZUhvdXIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coSW50ZWdlcih0aGlzLnN0YXRlLmJ1ZikpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlRGF0ZVRpbWVPbmx5ICgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPCA0KSB7XG4gICAgICAgIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lKClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfQ09MT04pIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VPbmx5VGltZUhvdXIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdFeHBlY3RlZCBkaWdpdCB3aGlsZSBwYXJzaW5nIHllYXIgcGFydCBvZiBhIGRhdGUnKSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9IWVBIRU4pIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VEYXRlVGltZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0V4cGVjdGVkIGh5cGhlbiAoLSkgd2hpbGUgcGFyc2luZyB5ZWFyIHBhcnQgb2YgZGF0ZScpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTnVtYmVyQmFzZU9yRGF0ZVRpbWUgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9iKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZU5vVW5kZXJIZXhPY3RCaW5MaXRlcmFsLCB0aGlzLnBhcnNlSW50ZWdlckJpbilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX28pIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlTm9VbmRlckhleE9jdEJpbkxpdGVyYWwsIHRoaXMucGFyc2VJbnRlZ2VyT2N0KVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfeCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVySGV4T2N0QmluTGl0ZXJhbCwgdGhpcy5wYXJzZUludGVnZXJIZXgpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9QRVJJT0QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTnVtYmVySW50ZWdlcilcbiAgICAgIH0gZWxzZSBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZURhdGVUaW1lT25seSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdyhJbnRlZ2VyKHRoaXMuc3RhdGUuYnVmKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VJbnRlZ2VySGV4ICgpIHtcbiAgICAgIGlmIChpc0hleGl0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xPV0JBUikge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVySGV4T2N0QmluTGl0ZXJhbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IEludGVnZXIodGhpcy5zdGF0ZS5idWYpXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocmVzdWx0LmlzTmFOKCkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0ludmFsaWQgbnVtYmVyJykpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KHJlc3VsdClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZUludGVnZXJPY3QgKCkge1xuICAgICAgaWYgKGlzT2N0aXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTE9XQkFSKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZU5vVW5kZXJIZXhPY3RCaW5MaXRlcmFsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gSW50ZWdlcih0aGlzLnN0YXRlLmJ1ZilcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChyZXN1bHQuaXNOYU4oKSkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW52YWxpZCBudW1iZXInKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3cocmVzdWx0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlSW50ZWdlckJpbiAoKSB7XG4gICAgICBpZiAoaXNCaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTE9XQkFSKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZU5vVW5kZXJIZXhPY3RCaW5MaXRlcmFsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gSW50ZWdlcih0aGlzLnN0YXRlLmJ1ZilcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChyZXN1bHQuaXNOYU4oKSkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW52YWxpZCBudW1iZXInKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3cocmVzdWx0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogREFURVRJTUUgKi9cbiAgICBwYXJzZURhdGVUaW1lICgpIHtcbiAgICAgIC8vIHdlIGVudGVyIGhlcmUgaGF2aW5nIGp1c3QgY29uc3VtZWQgdGhlIHllYXIgYW5kIGFib3V0IHRvIGNvbnN1bWUgdGhlIGh5cGhlblxuICAgICAgaWYgKHRoaXMuc3RhdGUuYnVmLmxlbmd0aCA8IDQpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdZZWFycyBsZXNzIHRoYW4gMTAwMCBtdXN0IGJlIHplcm8gcGFkZGVkIHRvIGZvdXIgY2hhcmFjdGVycycpKVxuICAgICAgfVxuICAgICAgdGhpcy5zdGF0ZS5yZXN1bHQgPSB0aGlzLnN0YXRlLmJ1ZlxuICAgICAgdGhpcy5zdGF0ZS5idWYgPSAnJ1xuICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlRGF0ZU1vbnRoKVxuICAgIH1cbiAgICBwYXJzZURhdGVNb250aCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0hZUEhFTikge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5idWYubGVuZ3RoIDwgMikge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignTW9udGhzIGxlc3MgdGhhbiAxMCBtdXN0IGJlIHplcm8gcGFkZGVkIHRvIHR3byBjaGFyYWN0ZXJzJykpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZS5yZXN1bHQgKz0gJy0nICsgdGhpcy5zdGF0ZS5idWZcbiAgICAgICAgdGhpcy5zdGF0ZS5idWYgPSAnJ1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VEYXRlRGF5KVxuICAgICAgfSBlbHNlIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW5jb21wbGV0ZSBkYXRldGltZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZURhdGVEYXkgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9UIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9TUCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5idWYubGVuZ3RoIDwgMikge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignRGF5cyBsZXNzIHRoYW4gMTAgbXVzdCBiZSB6ZXJvIHBhZGRlZCB0byB0d28gY2hhcmFjdGVycycpKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUucmVzdWx0ICs9ICctJyArIHRoaXMuc3RhdGUuYnVmXG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlU3RhcnRUaW1lSG91cilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hdEVuZE9mV29yZCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdyhjcmVhdGVEYXRlKHRoaXMuc3RhdGUucmVzdWx0ICsgJy0nICsgdGhpcy5zdGF0ZS5idWYpKVxuICAgICAgfSBlbHNlIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW5jb21wbGV0ZSBkYXRldGltZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVN0YXJ0VGltZUhvdXIgKCkge1xuICAgICAgaWYgKHRoaXMuYXRFbmRPZldvcmQoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coY3JlYXRlRGF0ZSh0aGlzLnN0YXRlLnJlc3VsdCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VUaW1lSG91cilcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VUaW1lSG91ciAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdIb3VycyBsZXNzIHRoYW4gMTAgbXVzdCBiZSB6ZXJvIHBhZGRlZCB0byB0d28gY2hhcmFjdGVycycpKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUucmVzdWx0ICs9ICdUJyArIHRoaXMuc3RhdGUuYnVmXG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlVGltZU1pbilcbiAgICAgIH0gZWxzZSBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0luY29tcGxldGUgZGF0ZXRpbWUnKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VUaW1lTWluICgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPCAyICYmIGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPT09IDIgJiYgdGhpcy5jaGFyID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIHRoaXMuc3RhdGUucmVzdWx0ICs9ICc6JyArIHRoaXMuc3RhdGUuYnVmXG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlVGltZVNlYylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW5jb21wbGV0ZSBkYXRldGltZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVRpbWVTZWMgKCkge1xuICAgICAgaWYgKGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5idWYubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgdGhpcy5zdGF0ZS5yZXN1bHQgKz0gJzonICsgdGhpcy5zdGF0ZS5idWZcbiAgICAgICAgICB0aGlzLnN0YXRlLmJ1ZiA9ICcnXG4gICAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlVGltZVpvbmVPckZyYWN0aW9uKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0luY29tcGxldGUgZGF0ZXRpbWUnKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZU9ubHlUaW1lSG91ciAoKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9DT0xPTikge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5idWYubGVuZ3RoIDwgMikge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSG91cnMgbGVzcyB0aGFuIDEwIG11c3QgYmUgemVybyBwYWRkZWQgdG8gdHdvIGNoYXJhY3RlcnMnKSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlLnJlc3VsdCA9IHRoaXMuc3RhdGUuYnVmXG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlT25seVRpbWVNaW4pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0luY29tcGxldGUgdGltZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU9ubHlUaW1lTWluICgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPCAyICYmIGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPT09IDIgJiYgdGhpcy5jaGFyID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIHRoaXMuc3RhdGUucmVzdWx0ICs9ICc6JyArIHRoaXMuc3RhdGUuYnVmXG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlT25seVRpbWVTZWMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0luY29tcGxldGUgdGltZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU9ubHlUaW1lU2VjICgpIHtcbiAgICAgIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuYnVmLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU9ubHlUaW1lRnJhY3Rpb25NYXliZSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbmNvbXBsZXRlIHRpbWUnKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VPbmx5VGltZUZyYWN0aW9uTWF5YmUgKCkge1xuICAgICAgdGhpcy5zdGF0ZS5yZXN1bHQgKz0gJzonICsgdGhpcy5zdGF0ZS5idWZcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUEVSSU9EKSB7XG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgdGhpcy5uZXh0KHRoaXMucGFyc2VPbmx5VGltZUZyYWN0aW9uKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKGNyZWF0ZVRpbWUodGhpcy5zdGF0ZS5yZXN1bHQpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU9ubHlUaW1lRnJhY3Rpb24gKCkge1xuICAgICAgaWYgKGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmF0RW5kT2ZXb3JkKCkpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuYnVmLmxlbmd0aCA9PT0gMCkgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdFeHBlY3RlZCBkaWdpdCBpbiBtaWxsaXNlY29uZHMnKSlcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KGNyZWF0ZVRpbWUodGhpcy5zdGF0ZS5yZXN1bHQgKyAnLicgKyB0aGlzLnN0YXRlLmJ1ZikpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyIGluIGRhdGV0aW1lLCBleHBlY3RlZCBwZXJpb2QgKC4pLCBtaW51cyAoLSksIHBsdXMgKCspIG9yIFonKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZVRpbWVab25lT3JGcmFjdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1BFUklPRCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICB0aGlzLm5leHQodGhpcy5wYXJzZURhdGVUaW1lRnJhY3Rpb24pXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9IWVBIRU4gfHwgdGhpcy5jaGFyID09PSBDSEFSX1BMVVMpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgdGhpcy5uZXh0KHRoaXMucGFyc2VUaW1lWm9uZUhvdXIpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9aKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybihjcmVhdGVEYXRlVGltZSh0aGlzLnN0YXRlLnJlc3VsdCArIHRoaXMuc3RhdGUuYnVmKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hdEVuZE9mV29yZCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdyhjcmVhdGVEYXRlVGltZUZsb2F0KHRoaXMuc3RhdGUucmVzdWx0ICsgdGhpcy5zdGF0ZS5idWYpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciBpbiBkYXRldGltZSwgZXhwZWN0ZWQgcGVyaW9kICguKSwgbWludXMgKC0pLCBwbHVzICgrKSBvciBaJykpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlRGF0ZVRpbWVGcmFjdGlvbiAoKSB7XG4gICAgICBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUuYnVmLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0V4cGVjdGVkIGRpZ2l0IGluIG1pbGxpc2Vjb25kcycpKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfSFlQSEVOIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9QTFVTKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHRoaXMubmV4dCh0aGlzLnBhcnNlVGltZVpvbmVIb3VyKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfWikge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm4oY3JlYXRlRGF0ZVRpbWUodGhpcy5zdGF0ZS5yZXN1bHQgKyB0aGlzLnN0YXRlLmJ1ZikpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYXRFbmRPZldvcmQoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coY3JlYXRlRGF0ZVRpbWVGbG9hdCh0aGlzLnN0YXRlLnJlc3VsdCArIHRoaXMuc3RhdGUuYnVmKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW5leHBlY3RlZCBjaGFyYWN0ZXIgaW4gZGF0ZXRpbWUsIGV4cGVjdGVkIHBlcmlvZCAoLiksIG1pbnVzICgtKSwgcGx1cyAoKykgb3IgWicpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVRpbWVab25lSG91ciAoKSB7XG4gICAgICBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIC8vIEZJWE1FOiBObyBtb3JlIHJlZ2V4cHNcbiAgICAgICAgaWYgKC9cXGRcXGQkLy50ZXN0KHRoaXMuc3RhdGUuYnVmKSkgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlVGltZVpvbmVTZXApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyIGluIGRhdGV0aW1lLCBleHBlY3RlZCBkaWdpdCcpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVRpbWVab25lU2VwICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfQ09MT04pIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgdGhpcy5uZXh0KHRoaXMucGFyc2VUaW1lWm9uZU1pbilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW5leHBlY3RlZCBjaGFyYWN0ZXIgaW4gZGF0ZXRpbWUsIGV4cGVjdGVkIGNvbG9uJykpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlVGltZVpvbmVNaW4gKCkge1xuICAgICAgaWYgKGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICBpZiAoL1xcZFxcZCQvLnRlc3QodGhpcy5zdGF0ZS5idWYpKSByZXR1cm4gdGhpcy5yZXR1cm4oY3JlYXRlRGF0ZVRpbWUodGhpcy5zdGF0ZS5yZXN1bHQgKyB0aGlzLnN0YXRlLmJ1ZikpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyIGluIGRhdGV0aW1lLCBleHBlY3RlZCBkaWdpdCcpKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qIEJPT0xFQU4gKi9cbiAgICBwYXJzZUJvb2xlYW4gKCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfdCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VUcnVlX3IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9mKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUZhbHNlX2EpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlVHJ1ZV9yICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfcikge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VUcnVlX3UpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0ludmFsaWQgYm9vbGVhbiwgZXhwZWN0ZWQgdHJ1ZSBvciBmYWxzZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVRydWVfdSAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX3UpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlVHJ1ZV9lKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGJvb2xlYW4sIGV4cGVjdGVkIHRydWUgb3IgZmFsc2UnKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VUcnVlX2UgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybih0cnVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGJvb2xlYW4sIGV4cGVjdGVkIHRydWUgb3IgZmFsc2UnKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZUZhbHNlX2EgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9hKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUZhbHNlX2wpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0ludmFsaWQgYm9vbGVhbiwgZXhwZWN0ZWQgdHJ1ZSBvciBmYWxzZScpKVxuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlRmFsc2VfbCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX2wpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlRmFsc2VfcylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW52YWxpZCBib29sZWFuLCBleHBlY3RlZCB0cnVlIG9yIGZhbHNlJykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VGYWxzZV9zICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfcykge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VGYWxzZV9lKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGJvb2xlYW4sIGV4cGVjdGVkIHRydWUgb3IgZmFsc2UnKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZUZhbHNlX2UgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybihmYWxzZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW52YWxpZCBib29sZWFuLCBleHBlY3RlZCB0cnVlIG9yIGZhbHNlJykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogSU5MSU5FIExJU1RTICovXG4gICAgcGFyc2VJbmxpbmVMaXN0ICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kgfHwgdGhpcy5jaGFyID09PSBDVFJMX00gfHwgdGhpcy5jaGFyID09PSBDVFJMX0opIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBQYXJzZXIuRU5EKSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW50ZXJtaW5hdGVkIGlubGluZSBhcnJheScpKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTlVNKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZUNvbW1lbnQpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9SU1FCKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybih0aGlzLnN0YXRlLnJlc3VsdEFyciB8fCBJbmxpbmVMaXN0KCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsTm93KHRoaXMucGFyc2VWYWx1ZSwgdGhpcy5yZWNvcmRJbmxpbmVMaXN0VmFsdWUpXG4gICAgICB9XG4gICAgfVxuICAgIHJlY29yZElubGluZUxpc3RWYWx1ZSAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLnJlc3VsdEFycikge1xuICAgICAgICBjb25zdCBsaXN0VHlwZSA9IHRoaXMuc3RhdGUucmVzdWx0QXJyW19jb250ZW50VHlwZV1cbiAgICAgICAgY29uc3QgdmFsdWVUeXBlID0gdG9tbFR5cGUodmFsdWUpXG4gICAgICAgIGlmIChsaXN0VHlwZSAhPT0gdmFsdWVUeXBlKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKGBJbmxpbmUgbGlzdHMgbXVzdCBiZSBhIHNpbmdsZSB0eXBlLCBub3QgYSBtaXggb2YgJHtsaXN0VHlwZX0gYW5kICR7dmFsdWVUeXBlfWApKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YXRlLnJlc3VsdEFyciA9IElubGluZUxpc3QodG9tbFR5cGUodmFsdWUpKVxuICAgICAgfVxuICAgICAgaWYgKGlzRmxvYXQodmFsdWUpIHx8IGlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgICAgLy8gdW5ib3ggbm93IHRoYXQgd2UndmUgdmVyaWZpZWQgdGhleSdyZSBva1xuICAgICAgICB0aGlzLnN0YXRlLnJlc3VsdEFyci5wdXNoKHZhbHVlLnZhbHVlT2YoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUucmVzdWx0QXJyLnB1c2godmFsdWUpXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VJbmxpbmVMaXN0TmV4dClcbiAgICB9XG4gICAgcGFyc2VJbmxpbmVMaXN0TmV4dCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1NQIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9JIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9NIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9KKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9OVU0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlQ29tbWVudClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0NPTU1BKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUlubGluZUxpc3QpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9SU1FCKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZUlubGluZUxpc3QpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyLCBleHBlY3RlZCB3aGl0ZXNwYWNlLCBjb21tYSAoLCkgb3IgY2xvc2UgYnJhY2tldCAoXSknKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBJTkxJTkUgVEFCTEUgKi9cbiAgICBwYXJzZUlubGluZVRhYmxlICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBQYXJzZXIuRU5EIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9OVU0gfHwgdGhpcy5jaGFyID09PSBDVFJMX0ogfHwgdGhpcy5jaGFyID09PSBDVFJMX00pIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbnRlcm1pbmF0ZWQgaW5saW5lIGFycmF5JykpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9SQ1VCKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybih0aGlzLnN0YXRlLnJlc3VsdFRhYmxlIHx8IElubGluZVRhYmxlKCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGUucmVzdWx0VGFibGUpIHRoaXMuc3RhdGUucmVzdWx0VGFibGUgPSBJbmxpbmVUYWJsZSgpXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUFzc2lnbiwgdGhpcy5yZWNvcmRJbmxpbmVUYWJsZVZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgICByZWNvcmRJbmxpbmVUYWJsZVZhbHVlIChrdikge1xuICAgICAgbGV0IHRhcmdldCA9IHRoaXMuc3RhdGUucmVzdWx0VGFibGVcbiAgICAgIGxldCBmaW5hbEtleSA9IGt2LmtleS5wb3AoKVxuICAgICAgZm9yIChsZXQga3cgb2Yga3Yua2V5KSB7XG4gICAgICAgIGlmIChoYXNLZXkodGFyZ2V0LCBrdykgJiYgKCFpc1RhYmxlKHRhcmdldFtrd10pIHx8IHRhcmdldFtrd11bX2RlY2xhcmVkXSkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBleGlzdGluZyBrZXlcIikpXG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W2t3XSA9IHRhcmdldFtrd10gfHwgVGFibGUoKVxuICAgICAgfVxuICAgICAgaWYgKGhhc0tleSh0YXJnZXQsIGZpbmFsS2V5KSkge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBleGlzdGluZyBrZXlcIikpXG4gICAgICB9XG4gICAgICBpZiAoaXNJbnRlZ2VyKGt2LnZhbHVlKSB8fCBpc0Zsb2F0KGt2LnZhbHVlKSkge1xuICAgICAgICB0YXJnZXRbZmluYWxLZXldID0ga3YudmFsdWUudmFsdWVPZigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbZmluYWxLZXldID0ga3YudmFsdWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZUlubGluZVRhYmxlTmV4dClcbiAgICB9XG4gICAgcGFyc2VJbmxpbmVUYWJsZU5leHQgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9TUCB8fCB0aGlzLmNoYXIgPT09IENUUkxfSSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IFBhcnNlci5FTkQgfHwgdGhpcy5jaGFyID09PSBDSEFSX05VTSB8fCB0aGlzLmNoYXIgPT09IENUUkxfSiB8fCB0aGlzLmNoYXIgPT09IENUUkxfTSkge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VudGVybWluYXRlZCBpbmxpbmUgYXJyYXknKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0NPTU1BKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUlubGluZVRhYmxlKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUkNVQikge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VJbmxpbmVUYWJsZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIsIGV4cGVjdGVkIHdoaXRlc3BhY2UsIGNvbW1hICgsKSBvciBjbG9zZSBicmFja2V0IChdKScpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gVE9NTFBhcnNlclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gcHJldHR5RXJyb3JcblxuZnVuY3Rpb24gcHJldHR5RXJyb3IgKGVyciwgYnVmKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoZXJyLnBvcyA9PSBudWxsIHx8IGVyci5saW5lID09IG51bGwpIHJldHVybiBlcnJcbiAgbGV0IG1zZyA9IGVyci5tZXNzYWdlXG4gIG1zZyArPSBgIGF0IHJvdyAke2Vyci5saW5lICsgMX0sIGNvbCAke2Vyci5jb2wgKyAxfSwgcG9zICR7ZXJyLnBvc306XFxuYFxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChidWYgJiYgYnVmLnNwbGl0KSB7XG4gICAgY29uc3QgbGluZXMgPSBidWYuc3BsaXQoL1xcbi8pXG4gICAgY29uc3QgbGluZU51bVdpZHRoID0gU3RyaW5nKE1hdGgubWluKGxpbmVzLmxlbmd0aCwgZXJyLmxpbmUgKyAzKSkubGVuZ3RoXG4gICAgbGV0IGxpbmVQYWRkaW5nID0gJyAnXG4gICAgd2hpbGUgKGxpbmVQYWRkaW5nLmxlbmd0aCA8IGxpbmVOdW1XaWR0aCkgbGluZVBhZGRpbmcgKz0gJyAnXG4gICAgZm9yIChsZXQgaWkgPSBNYXRoLm1heCgwLCBlcnIubGluZSAtIDEpOyBpaSA8IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgZXJyLmxpbmUgKyAyKTsgKytpaSkge1xuICAgICAgbGV0IGxpbmVOdW0gPSBTdHJpbmcoaWkgKyAxKVxuICAgICAgaWYgKGxpbmVOdW0ubGVuZ3RoIDwgbGluZU51bVdpZHRoKSBsaW5lTnVtID0gJyAnICsgbGluZU51bVxuICAgICAgaWYgKGVyci5saW5lID09PSBpaSkge1xuICAgICAgICBtc2cgKz0gbGluZU51bSArICc+ICcgKyBsaW5lc1tpaV0gKyAnXFxuJ1xuICAgICAgICBtc2cgKz0gbGluZVBhZGRpbmcgKyAnICAnXG4gICAgICAgIGZvciAobGV0IGhoID0gMDsgaGggPCBlcnIuY29sOyArK2hoKSB7XG4gICAgICAgICAgbXNnICs9ICcgJ1xuICAgICAgICB9XG4gICAgICAgIG1zZyArPSAnXlxcbidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1zZyArPSBsaW5lTnVtICsgJzogJyArIGxpbmVzW2lpXSArICdcXG4nXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGVyci5tZXNzYWdlID0gbXNnICsgJ1xcbidcbiAgcmV0dXJuIGVyclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gcGFyc2VTdHJpbmdcblxuY29uc3QgVE9NTFBhcnNlciA9IHJlcXVpcmUoJy4vbGliL3RvbWwtcGFyc2VyLmpzJylcbmNvbnN0IHByZXR0eUVycm9yID0gcmVxdWlyZSgnLi9wYXJzZS1wcmV0dHktZXJyb3IuanMnKVxuXG5mdW5jdGlvbiBwYXJzZVN0cmluZyAoc3RyKSB7XG4gIGlmIChnbG9iYWwuQnVmZmVyICYmIGdsb2JhbC5CdWZmZXIuaXNCdWZmZXIoc3RyKSkge1xuICAgIHN0ciA9IHN0ci50b1N0cmluZygndXRmOCcpXG4gIH1cbiAgY29uc3QgcGFyc2VyID0gbmV3IFRPTUxQYXJzZXIoKVxuICB0cnkge1xuICAgIHBhcnNlci5wYXJzZShzdHIpXG4gICAgcmV0dXJuIHBhcnNlci5maW5pc2goKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBwcmV0dHlFcnJvcihlcnIsIHN0cilcbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gcGFyc2VBc3luY1xuXG5jb25zdCBUT01MUGFyc2VyID0gcmVxdWlyZSgnLi9saWIvdG9tbC1wYXJzZXIuanMnKVxuY29uc3QgcHJldHR5RXJyb3IgPSByZXF1aXJlKCcuL3BhcnNlLXByZXR0eS1lcnJvci5qcycpXG5cbmZ1bmN0aW9uIHBhcnNlQXN5bmMgKHN0ciwgb3B0cykge1xuICBpZiAoIW9wdHMpIG9wdHMgPSB7fVxuICBjb25zdCBpbmRleCA9IDBcbiAgY29uc3QgYmxvY2tzaXplID0gb3B0cy5ibG9ja3NpemUgfHwgNDA5NjBcbiAgY29uc3QgcGFyc2VyID0gbmV3IFRPTUxQYXJzZXIoKVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHNldEltbWVkaWF0ZShwYXJzZUFzeW5jTmV4dCwgaW5kZXgsIGJsb2Nrc2l6ZSwgcmVzb2x2ZSwgcmVqZWN0KVxuICB9KVxuICBmdW5jdGlvbiBwYXJzZUFzeW5jTmV4dCAoaW5kZXgsIGJsb2Nrc2l6ZSwgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgaWYgKGluZGV4ID49IHN0ci5sZW5ndGgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKHBhcnNlci5maW5pc2goKSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KHByZXR0eUVycm9yKGVyciwgc3RyKSlcbiAgICAgIH1cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlci5wYXJzZShzdHIuc2xpY2UoaW5kZXgsIGluZGV4ICsgYmxvY2tzaXplKSlcbiAgICAgIHNldEltbWVkaWF0ZShwYXJzZUFzeW5jTmV4dCwgaW5kZXggKyBibG9ja3NpemUsIGJsb2Nrc2l6ZSwgcmVzb2x2ZSwgcmVqZWN0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmVqZWN0KHByZXR0eUVycm9yKGVyciwgc3RyKSlcbiAgICB9XG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlU3RyZWFtXG5cbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCBUT01MUGFyc2VyID0gcmVxdWlyZSgnLi9saWIvdG9tbC1wYXJzZXIuanMnKVxuXG5mdW5jdGlvbiBwYXJzZVN0cmVhbSAoc3RtKSB7XG4gIGlmIChzdG0pIHtcbiAgICByZXR1cm4gcGFyc2VSZWFkYWJsZShzdG0pXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtKHN0bSlcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVJlYWRhYmxlIChzdG0pIHtcbiAgY29uc3QgcGFyc2VyID0gbmV3IFRPTUxQYXJzZXIoKVxuICBzdG0uc2V0RW5jb2RpbmcoJ3V0ZjgnKVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCByZWFkYWJsZVxuICAgIGxldCBlbmRlZCA9IGZhbHNlXG4gICAgbGV0IGVycm9yZWQgPSBmYWxzZVxuICAgIGZ1bmN0aW9uIGZpbmlzaCAoKSB7XG4gICAgICBlbmRlZCA9IHRydWVcbiAgICAgIGlmIChyZWFkYWJsZSkgcmV0dXJuXG4gICAgICB0cnkge1xuICAgICAgICByZXNvbHZlKHBhcnNlci5maW5pc2goKSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZWplY3QoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBlcnJvciAoZXJyKSB7XG4gICAgICBlcnJvcmVkID0gdHJ1ZVxuICAgICAgcmVqZWN0KGVycilcbiAgICB9XG4gICAgc3RtLm9uY2UoJ2VuZCcsIGZpbmlzaClcbiAgICBzdG0ub25jZSgnZXJyb3InLCBlcnJvcilcbiAgICByZWFkTmV4dCgpXG5cbiAgICBmdW5jdGlvbiByZWFkTmV4dCAoKSB7XG4gICAgICByZWFkYWJsZSA9IHRydWVcbiAgICAgIGxldCBkYXRhXG4gICAgICB3aGlsZSAoKGRhdGEgPSBzdG0ucmVhZCgpKSAhPT0gbnVsbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcnNlci5wYXJzZShkYXRhKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3IoZXJyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZWFkYWJsZSA9IGZhbHNlXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChlbmRlZCkgcmV0dXJuIGZpbmlzaCgpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChlcnJvcmVkKSByZXR1cm5cbiAgICAgIHN0bS5vbmNlKCdyZWFkYWJsZScsIHJlYWROZXh0KVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcGFyc2VUcmFuc2Zvcm0gKCkge1xuICBjb25zdCBwYXJzZXIgPSBuZXcgVE9NTFBhcnNlcigpXG4gIHJldHVybiBuZXcgc3RyZWFtLlRyYW5zZm9ybSh7XG4gICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICB0cmFuc2Zvcm0gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlci5wYXJzZShjaHVuay50b1N0cmluZyhlbmNvZGluZykpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIH1cbiAgICAgIGNiKClcbiAgICB9LFxuICAgIGZsdXNoIChjYikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5wdXNoKHBhcnNlci5maW5pc2goKSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgICAgfVxuICAgICAgY2IoKVxuICAgIH1cbiAgfSlcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vcGFyc2Utc3RyaW5nLmpzJylcbm1vZHVsZS5leHBvcnRzLmFzeW5jID0gcmVxdWlyZSgnLi9wYXJzZS1hc3luYy5qcycpXG5tb2R1bGUuZXhwb3J0cy5zdHJlYW0gPSByZXF1aXJlKCcuL3BhcnNlLXN0cmVhbS5qcycpXG5tb2R1bGUuZXhwb3J0cy5wcmV0dHlFcnJvciA9IHJlcXVpcmUoJy4vcGFyc2UtcHJldHR5LWVycm9yLmpzJylcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ2lmeVxubW9kdWxlLmV4cG9ydHMudmFsdWUgPSBzdHJpbmdpZnlJbmxpbmVcblxuZnVuY3Rpb24gc3RyaW5naWZ5IChvYmopIHtcbiAgaWYgKG9iaiA9PT0gbnVsbCkgdGhyb3cgdHlwZUVycm9yKCdudWxsJylcbiAgaWYgKG9iaiA9PT0gdm9pZCAoMCkpIHRocm93IHR5cGVFcnJvcigndW5kZWZpbmVkJylcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB0aHJvdyB0eXBlRXJyb3IodHlwZW9mIG9iailcblxuICBpZiAodHlwZW9mIG9iai50b0pTT04gPT09ICdmdW5jdGlvbicpIG9iaiA9IG9iai50b0pTT04oKVxuICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsXG4gIGNvbnN0IHR5cGUgPSB0b21sVHlwZShvYmopXG4gIGlmICh0eXBlICE9PSAndGFibGUnKSB0aHJvdyB0eXBlRXJyb3IodHlwZSlcbiAgcmV0dXJuIHN0cmluZ2lmeU9iamVjdCgnJywgJycsIG9iailcbn1cblxuZnVuY3Rpb24gdHlwZUVycm9yICh0eXBlKSB7XG4gIHJldHVybiBuZXcgRXJyb3IoJ0NhbiBvbmx5IHN0cmluZ2lmeSBvYmplY3RzLCBub3QgJyArIHR5cGUpXG59XG5cbmZ1bmN0aW9uIGFycmF5T25lVHlwZUVycm9yICgpIHtcbiAgcmV0dXJuIG5ldyBFcnJvcihcIkFycmF5IHZhbHVlcyBjYW4ndCBoYXZlIG1peGVkIHR5cGVzXCIpXG59XG5cbmZ1bmN0aW9uIGdldElubGluZUtleXMgKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5maWx0ZXIoa2V5ID0+IGlzSW5saW5lKG9ialtrZXldKSlcbn1cbmZ1bmN0aW9uIGdldENvbXBsZXhLZXlzIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikuZmlsdGVyKGtleSA9PiAhaXNJbmxpbmUob2JqW2tleV0pKVxufVxuXG5mdW5jdGlvbiB0b0pTT04gKG9iaikge1xuICBsZXQgbm9iaiA9IEFycmF5LmlzQXJyYXkob2JqKSA/IFtdIDogT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgJ19fcHJvdG9fXycpID8ge1snX19wcm90b19fJ106IHVuZGVmaW5lZH0gOiB7fVxuICBmb3IgKGxldCBwcm9wIG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICBpZiAob2JqW3Byb3BdICYmIHR5cGVvZiBvYmpbcHJvcF0udG9KU09OID09PSAnZnVuY3Rpb24nICYmICEoJ3RvSVNPU3RyaW5nJyBpbiBvYmpbcHJvcF0pKSB7XG4gICAgICBub2JqW3Byb3BdID0gb2JqW3Byb3BdLnRvSlNPTigpXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vYmpbcHJvcF0gPSBvYmpbcHJvcF1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vYmpcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5T2JqZWN0IChwcmVmaXgsIGluZGVudCwgb2JqKSB7XG4gIG9iaiA9IHRvSlNPTihvYmopXG4gIHZhciBpbmxpbmVLZXlzXG4gIHZhciBjb21wbGV4S2V5c1xuICBpbmxpbmVLZXlzID0gZ2V0SW5saW5lS2V5cyhvYmopXG4gIGNvbXBsZXhLZXlzID0gZ2V0Q29tcGxleEtleXMob2JqKVxuICB2YXIgcmVzdWx0ID0gW11cbiAgdmFyIGlubGluZUluZGVudCA9IGluZGVudCB8fCAnJ1xuICBpbmxpbmVLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICB2YXIgdHlwZSA9IHRvbWxUeXBlKG9ialtrZXldKVxuICAgIGlmICh0eXBlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlICE9PSAnbnVsbCcpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGlubGluZUluZGVudCArIHN0cmluZ2lmeUtleShrZXkpICsgJyA9ICcgKyBzdHJpbmdpZnlBbnlJbmxpbmUob2JqW2tleV0sIHRydWUpKVxuICAgIH1cbiAgfSlcbiAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSByZXN1bHQucHVzaCgnJylcbiAgdmFyIGNvbXBsZXhJbmRlbnQgPSBwcmVmaXggJiYgaW5saW5lS2V5cy5sZW5ndGggPiAwID8gaW5kZW50ICsgJyAgJyA6ICcnXG4gIGNvbXBsZXhLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICByZXN1bHQucHVzaChzdHJpbmdpZnlDb21wbGV4KHByZWZpeCwgY29tcGxleEluZGVudCwga2V5LCBvYmpba2V5XSkpXG4gIH0pXG4gIHJldHVybiByZXN1bHQuam9pbignXFxuJylcbn1cblxuZnVuY3Rpb24gaXNJbmxpbmUgKHZhbHVlKSB7XG4gIHN3aXRjaCAodG9tbFR5cGUodmFsdWUpKSB7XG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICBjYXNlICdudWxsJzpcbiAgICBjYXNlICdpbnRlZ2VyJzpcbiAgICBjYXNlICduYW4nOlxuICAgIGNhc2UgJ2Zsb2F0JzpcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgIGNhc2UgJ2RhdGV0aW1lJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgY2FzZSAnYXJyYXknOlxuICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA9PT0gMCB8fCB0b21sVHlwZSh2YWx1ZVswXSkgIT09ICd0YWJsZSdcbiAgICBjYXNlICd0YWJsZSc6XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIHRvbWxUeXBlICh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAndW5kZWZpbmVkJ1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdudWxsJ1xuICAvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC10eXBlb2YgKi9cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnIHx8IChOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSAmJiAhT2JqZWN0LmlzKHZhbHVlLCAtMCkpKSB7XG4gICAgcmV0dXJuICdpbnRlZ2VyJ1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gJ2Zsb2F0J1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuICdib29sZWFuJ1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gJ3N0cmluZydcbiAgfSBlbHNlIGlmICgndG9JU09TdHJpbmcnIGluIHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzTmFOKHZhbHVlKSA/ICd1bmRlZmluZWQnIDogJ2RhdGV0aW1lJ1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuICdhcnJheSdcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJ3RhYmxlJ1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUtleSAoa2V5KSB7XG4gIHZhciBrZXlTdHIgPSBTdHJpbmcoa2V5KVxuICBpZiAoL15bLUEtWmEtejAtOV9dKyQvLnRlc3Qoa2V5U3RyKSkge1xuICAgIHJldHVybiBrZXlTdHJcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5QmFzaWNTdHJpbmcoa2V5U3RyKVxuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUJhc2ljU3RyaW5nIChzdHIpIHtcbiAgcmV0dXJuICdcIicgKyBlc2NhcGVTdHJpbmcoc3RyKS5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJykgKyAnXCInXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUxpdGVyYWxTdHJpbmcgKHN0cikge1xuICByZXR1cm4gXCInXCIgKyBzdHIgKyBcIidcIlxufVxuXG5mdW5jdGlvbiBudW1wYWQgKG51bSwgc3RyKSB7XG4gIHdoaWxlIChzdHIubGVuZ3RoIDwgbnVtKSBzdHIgPSAnMCcgKyBzdHJcbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcgKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcbiAgICAucmVwbGFjZSgvW1xcYl0vZywgJ1xcXFxiJylcbiAgICAucmVwbGFjZSgvXFx0L2csICdcXFxcdCcpXG4gICAgLnJlcGxhY2UoL1xcbi9nLCAnXFxcXG4nKVxuICAgIC5yZXBsYWNlKC9cXGYvZywgJ1xcXFxmJylcbiAgICAucmVwbGFjZSgvXFxyL2csICdcXFxccicpXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29udHJvbC1yZWdleCAqL1xuICAgIC5yZXBsYWNlKC8oW1xcdTAwMDAtXFx1MDAxZlxcdTAwN2ZdKS8sIGMgPT4gJ1xcXFx1JyArIG51bXBhZCg0LCBjLmNvZGVQb2ludEF0KDApLnRvU3RyaW5nKDE2KSkpXG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1jb250cm9sLXJlZ2V4ICovXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeU11bHRpbGluZVN0cmluZyAoc3RyKSB7XG4gIGxldCBlc2NhcGVkID0gc3RyLnNwbGl0KC9cXG4vKS5tYXAoc3RyID0+IHtcbiAgICByZXR1cm4gZXNjYXBlU3RyaW5nKHN0cikucmVwbGFjZSgvXCIoPz1cIlwiKS9nLCAnXFxcXFwiJylcbiAgfSkuam9pbignXFxuJylcbiAgaWYgKGVzY2FwZWQuc2xpY2UoLTEpID09PSAnXCInKSBlc2NhcGVkICs9ICdcXFxcXFxuJ1xuICByZXR1cm4gJ1wiXCJcIlxcbicgKyBlc2NhcGVkICsgJ1wiXCJcIidcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5QW55SW5saW5lICh2YWx1ZSwgbXVsdGlsaW5lT2spIHtcbiAgbGV0IHR5cGUgPSB0b21sVHlwZSh2YWx1ZSlcbiAgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKG11bHRpbGluZU9rICYmIC9cXG4vLnRlc3QodmFsdWUpKSB7XG4gICAgICB0eXBlID0gJ3N0cmluZy1tdWx0aWxpbmUnXG4gICAgfSBlbHNlIGlmICghL1tcXGJcXHRcXG5cXGZcXHInXS8udGVzdCh2YWx1ZSkgJiYgL1wiLy50ZXN0KHZhbHVlKSkge1xuICAgICAgdHlwZSA9ICdzdHJpbmctbGl0ZXJhbCdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0cmluZ2lmeUlubGluZSh2YWx1ZSwgdHlwZSlcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5SW5saW5lICh2YWx1ZSwgdHlwZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCF0eXBlKSB0eXBlID0gdG9tbFR5cGUodmFsdWUpXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3N0cmluZy1tdWx0aWxpbmUnOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeU11bHRpbGluZVN0cmluZyh2YWx1ZSlcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeUJhc2ljU3RyaW5nKHZhbHVlKVxuICAgIGNhc2UgJ3N0cmluZy1saXRlcmFsJzpcbiAgICAgIHJldHVybiBzdHJpbmdpZnlMaXRlcmFsU3RyaW5nKHZhbHVlKVxuICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeUludGVnZXIodmFsdWUpXG4gICAgY2FzZSAnZmxvYXQnOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeUZsb2F0KHZhbHVlKVxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeUJvb2xlYW4odmFsdWUpXG4gICAgY2FzZSAnZGF0ZXRpbWUnOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeURhdGV0aW1lKHZhbHVlKVxuICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIHJldHVybiBzdHJpbmdpZnlJbmxpbmVBcnJheSh2YWx1ZS5maWx0ZXIoXyA9PiB0b21sVHlwZShfKSAhPT0gJ251bGwnICYmIHRvbWxUeXBlKF8pICE9PSAndW5kZWZpbmVkJyAmJiB0b21sVHlwZShfKSAhPT0gJ25hbicpKVxuICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgIHJldHVybiBzdHJpbmdpZnlJbmxpbmVUYWJsZSh2YWx1ZSlcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyB0eXBlRXJyb3IodHlwZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlJbnRlZ2VyICh2YWx1ZSkge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBzZWN1cml0eS9kZXRlY3QtdW5zYWZlLXJlZ2V4ICovXG4gIHJldHVybiBTdHJpbmcodmFsdWUpLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csICdfJylcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5RmxvYXQgKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICByZXR1cm4gJ2luZidcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gLUluZmluaXR5KSB7XG4gICAgcmV0dXJuICctaW5mJ1xuICB9IGVsc2UgaWYgKE9iamVjdC5pcyh2YWx1ZSwgTmFOKSkge1xuICAgIHJldHVybiAnbmFuJ1xuICB9IGVsc2UgaWYgKE9iamVjdC5pcyh2YWx1ZSwgLTApKSB7XG4gICAgcmV0dXJuICctMC4wJ1xuICB9XG4gIHZhciBjaHVua3MgPSBTdHJpbmcodmFsdWUpLnNwbGl0KCcuJylcbiAgdmFyIGludCA9IGNodW5rc1swXVxuICB2YXIgZGVjID0gY2h1bmtzWzFdIHx8IDBcbiAgcmV0dXJuIHN0cmluZ2lmeUludGVnZXIoaW50KSArICcuJyArIGRlY1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlCb29sZWFuICh2YWx1ZSkge1xuICByZXR1cm4gU3RyaW5nKHZhbHVlKVxufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlEYXRldGltZSAodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKClcbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIgKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUgPT09ICdmbG9hdCcgfHwgdHlwZSA9PT0gJ2ludGVnZXInXG59XG5mdW5jdGlvbiBhcnJheVR5cGUgKHZhbHVlcykge1xuICB2YXIgY29udGVudFR5cGUgPSB0b21sVHlwZSh2YWx1ZXNbMF0pXG4gIGlmICh2YWx1ZXMuZXZlcnkoXyA9PiB0b21sVHlwZShfKSA9PT0gY29udGVudFR5cGUpKSByZXR1cm4gY29udGVudFR5cGVcbiAgLy8gbWl4ZWQgaW50ZWdlci9mbG9hdCwgZW1pdCBhcyBmbG9hdHNcbiAgaWYgKHZhbHVlcy5ldmVyeShfID0+IGlzTnVtYmVyKHRvbWxUeXBlKF8pKSkpIHJldHVybiAnZmxvYXQnXG4gIHJldHVybiAnbWl4ZWQnXG59XG5mdW5jdGlvbiB2YWxpZGF0ZUFycmF5ICh2YWx1ZXMpIHtcbiAgY29uc3QgdHlwZSA9IGFycmF5VHlwZSh2YWx1ZXMpXG4gIGlmICh0eXBlID09PSAnbWl4ZWQnKSB7XG4gICAgdGhyb3cgYXJyYXlPbmVUeXBlRXJyb3IoKVxuICB9XG4gIHJldHVybiB0eXBlXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUlubGluZUFycmF5ICh2YWx1ZXMpIHtcbiAgdmFsdWVzID0gdG9KU09OKHZhbHVlcylcbiAgY29uc3QgdHlwZSA9IHZhbGlkYXRlQXJyYXkodmFsdWVzKVxuICB2YXIgcmVzdWx0ID0gJ1snXG4gIHZhciBzdHJpbmdpZmllZCA9IHZhbHVlcy5tYXAoXyA9PiBzdHJpbmdpZnlJbmxpbmUoXywgdHlwZSkpXG4gIGlmIChzdHJpbmdpZmllZC5qb2luKCcsICcpLmxlbmd0aCA+IDYwIHx8IC9cXG4vLnRlc3Qoc3RyaW5naWZpZWQpKSB7XG4gICAgcmVzdWx0ICs9ICdcXG4gICcgKyBzdHJpbmdpZmllZC5qb2luKCcsXFxuICAnKSArICdcXG4nXG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ICs9ICcgJyArIHN0cmluZ2lmaWVkLmpvaW4oJywgJykgKyAoc3RyaW5naWZpZWQubGVuZ3RoID4gMCA/ICcgJyA6ICcnKVxuICB9XG4gIHJldHVybiByZXN1bHQgKyAnXSdcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5SW5saW5lVGFibGUgKHZhbHVlKSB7XG4gIHZhbHVlID0gdG9KU09OKHZhbHVlKVxuICB2YXIgcmVzdWx0ID0gW11cbiAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goa2V5ID0+IHtcbiAgICByZXN1bHQucHVzaChzdHJpbmdpZnlLZXkoa2V5KSArICcgPSAnICsgc3RyaW5naWZ5QW55SW5saW5lKHZhbHVlW2tleV0sIGZhbHNlKSlcbiAgfSlcbiAgcmV0dXJuICd7ICcgKyByZXN1bHQuam9pbignLCAnKSArIChyZXN1bHQubGVuZ3RoID4gMCA/ICcgJyA6ICcnKSArICd9J1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlDb21wbGV4IChwcmVmaXgsIGluZGVudCwga2V5LCB2YWx1ZSkge1xuICB2YXIgdmFsdWVUeXBlID0gdG9tbFR5cGUodmFsdWUpXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh2YWx1ZVR5cGUgPT09ICdhcnJheScpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5QXJyYXlPZlRhYmxlcyhwcmVmaXgsIGluZGVudCwga2V5LCB2YWx1ZSlcbiAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICd0YWJsZScpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5Q29tcGxleFRhYmxlKHByZWZpeCwgaW5kZW50LCBrZXksIHZhbHVlKVxuICB9IGVsc2Uge1xuICAgIHRocm93IHR5cGVFcnJvcih2YWx1ZVR5cGUpXG4gIH1cbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5QXJyYXlPZlRhYmxlcyAocHJlZml4LCBpbmRlbnQsIGtleSwgdmFsdWVzKSB7XG4gIHZhbHVlcyA9IHRvSlNPTih2YWx1ZXMpXG4gIHZhbGlkYXRlQXJyYXkodmFsdWVzKVxuICB2YXIgZmlyc3RWYWx1ZVR5cGUgPSB0b21sVHlwZSh2YWx1ZXNbMF0pXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoZmlyc3RWYWx1ZVR5cGUgIT09ICd0YWJsZScpIHRocm93IHR5cGVFcnJvcihmaXJzdFZhbHVlVHlwZSlcbiAgdmFyIGZ1bGxLZXkgPSBwcmVmaXggKyBzdHJpbmdpZnlLZXkoa2V5KVxuICB2YXIgcmVzdWx0ID0gJydcbiAgdmFsdWVzLmZvckVhY2godGFibGUgPT4ge1xuICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkgcmVzdWx0ICs9ICdcXG4nXG4gICAgcmVzdWx0ICs9IGluZGVudCArICdbWycgKyBmdWxsS2V5ICsgJ11dXFxuJ1xuICAgIHJlc3VsdCArPSBzdHJpbmdpZnlPYmplY3QoZnVsbEtleSArICcuJywgaW5kZW50LCB0YWJsZSlcbiAgfSlcbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlDb21wbGV4VGFibGUgKHByZWZpeCwgaW5kZW50LCBrZXksIHZhbHVlKSB7XG4gIHZhciBmdWxsS2V5ID0gcHJlZml4ICsgc3RyaW5naWZ5S2V5KGtleSlcbiAgdmFyIHJlc3VsdCA9ICcnXG4gIGlmIChnZXRJbmxpbmVLZXlzKHZhbHVlKS5sZW5ndGggPiAwKSB7XG4gICAgcmVzdWx0ICs9IGluZGVudCArICdbJyArIGZ1bGxLZXkgKyAnXVxcbidcbiAgfVxuICByZXR1cm4gcmVzdWx0ICsgc3RyaW5naWZ5T2JqZWN0KGZ1bGxLZXkgKyAnLicsIGluZGVudCwgdmFsdWUpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UuanMnKVxuZXhwb3J0cy5zdHJpbmdpZnkgPSByZXF1aXJlKCcuL3N0cmluZ2lmeS5qcycpXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmZyb21DYWxsYmFjayA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBhcmdzLnB1c2goKGVyciwgcmVzKSA9PiAoZXJyICE9IG51bGwpID8gcmVqZWN0KGVycikgOiByZXNvbHZlKHJlcykpXG4gICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9KVxuICAgIH1cbiAgfSwgJ25hbWUnLCB7IHZhbHVlOiBmbi5uYW1lIH0pXG59XG5cbmV4cG9ydHMuZnJvbVByb21pc2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGNvbnN0IGNiID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdXG4gICAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgZWxzZSB7XG4gICAgICBhcmdzLnBvcCgpXG4gICAgICBmbi5hcHBseSh0aGlzLCBhcmdzKS50aGVuKHIgPT4gY2IobnVsbCwgciksIGNiKVxuICAgIH1cbiAgfSwgJ25hbWUnLCB7IHZhbHVlOiBmbi5uYW1lIH0pXG59XG4iLAogICAgInZhciBjb25zdGFudHMgPSByZXF1aXJlKCdjb25zdGFudHMnKVxuXG52YXIgb3JpZ0N3ZCA9IHByb2Nlc3MuY3dkXG52YXIgY3dkID0gbnVsbFxuXG52YXIgcGxhdGZvcm0gPSBwcm9jZXNzLmVudi5HUkFDRUZVTF9GU19QTEFURk9STSB8fCBwcm9jZXNzLnBsYXRmb3JtXG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24oKSB7XG4gIGlmICghY3dkKVxuICAgIGN3ZCA9IG9yaWdDd2QuY2FsbChwcm9jZXNzKVxuICByZXR1cm4gY3dkXG59XG50cnkge1xuICBwcm9jZXNzLmN3ZCgpXG59IGNhdGNoIChlcikge31cblxuLy8gVGhpcyBjaGVjayBpcyBuZWVkZWQgdW50aWwgbm9kZS5qcyAxMiBpcyByZXF1aXJlZFxuaWYgKHR5cGVvZiBwcm9jZXNzLmNoZGlyID09PSAnZnVuY3Rpb24nKSB7XG4gIHZhciBjaGRpciA9IHByb2Nlc3MuY2hkaXJcbiAgcHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkKSB7XG4gICAgY3dkID0gbnVsbFxuICAgIGNoZGlyLmNhbGwocHJvY2VzcywgZClcbiAgfVxuICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YocHJvY2Vzcy5jaGRpciwgY2hkaXIpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hcblxuZnVuY3Rpb24gcGF0Y2ggKGZzKSB7XG4gIC8vIChyZS0paW1wbGVtZW50IHNvbWUgdGhpbmdzIHRoYXQgYXJlIGtub3duIGJ1c3RlZCBvciBtaXNzaW5nLlxuXG4gIC8vIGxjaG1vZCwgYnJva2VuIHByaW9yIHRvIDAuNi4yXG4gIC8vIGJhY2stcG9ydCB0aGUgZml4IGhlcmUuXG4gIGlmIChjb25zdGFudHMuaGFzT3duUHJvcGVydHkoJ09fU1lNTElOSycpICYmXG4gICAgICBwcm9jZXNzLnZlcnNpb24ubWF0Y2goL152MFxcLjZcXC5bMC0yXXxedjBcXC41XFwuLykpIHtcbiAgICBwYXRjaExjaG1vZChmcylcbiAgfVxuXG4gIC8vIGx1dGltZXMgaW1wbGVtZW50YXRpb24sIG9yIG5vLW9wXG4gIGlmICghZnMubHV0aW1lcykge1xuICAgIHBhdGNoTHV0aW1lcyhmcylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9pc2FhY3Mvbm9kZS1ncmFjZWZ1bC1mcy9pc3N1ZXMvNFxuICAvLyBDaG93biBzaG91bGQgbm90IGZhaWwgb24gZWludmFsIG9yIGVwZXJtIGlmIG5vbi1yb290LlxuICAvLyBJdCBzaG91bGQgbm90IGZhaWwgb24gZW5vc3lzIGV2ZXIsIGFzIHRoaXMganVzdCBpbmRpY2F0ZXNcbiAgLy8gdGhhdCBhIGZzIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgaW50ZW5kZWQgb3BlcmF0aW9uLlxuXG4gIGZzLmNob3duID0gY2hvd25GaXgoZnMuY2hvd24pXG4gIGZzLmZjaG93biA9IGNob3duRml4KGZzLmZjaG93bilcbiAgZnMubGNob3duID0gY2hvd25GaXgoZnMubGNob3duKVxuXG4gIGZzLmNobW9kID0gY2htb2RGaXgoZnMuY2htb2QpXG4gIGZzLmZjaG1vZCA9IGNobW9kRml4KGZzLmZjaG1vZClcbiAgZnMubGNobW9kID0gY2htb2RGaXgoZnMubGNobW9kKVxuXG4gIGZzLmNob3duU3luYyA9IGNob3duRml4U3luYyhmcy5jaG93blN5bmMpXG4gIGZzLmZjaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMuZmNob3duU3luYylcbiAgZnMubGNob3duU3luYyA9IGNob3duRml4U3luYyhmcy5sY2hvd25TeW5jKVxuXG4gIGZzLmNobW9kU3luYyA9IGNobW9kRml4U3luYyhmcy5jaG1vZFN5bmMpXG4gIGZzLmZjaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMuZmNobW9kU3luYylcbiAgZnMubGNobW9kU3luYyA9IGNobW9kRml4U3luYyhmcy5sY2htb2RTeW5jKVxuXG4gIGZzLnN0YXQgPSBzdGF0Rml4KGZzLnN0YXQpXG4gIGZzLmZzdGF0ID0gc3RhdEZpeChmcy5mc3RhdClcbiAgZnMubHN0YXQgPSBzdGF0Rml4KGZzLmxzdGF0KVxuXG4gIGZzLnN0YXRTeW5jID0gc3RhdEZpeFN5bmMoZnMuc3RhdFN5bmMpXG4gIGZzLmZzdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLmZzdGF0U3luYylcbiAgZnMubHN0YXRTeW5jID0gc3RhdEZpeFN5bmMoZnMubHN0YXRTeW5jKVxuXG4gIC8vIGlmIGxjaG1vZC9sY2hvd24gZG8gbm90IGV4aXN0LCB0aGVuIG1ha2UgdGhlbSBuby1vcHNcbiAgaWYgKGZzLmNobW9kICYmICFmcy5sY2htb2QpIHtcbiAgICBmcy5sY2htb2QgPSBmdW5jdGlvbiAocGF0aCwgbW9kZSwgY2IpIHtcbiAgICAgIGlmIChjYikgcHJvY2Vzcy5uZXh0VGljayhjYilcbiAgICB9XG4gICAgZnMubGNobW9kU3luYyA9IGZ1bmN0aW9uICgpIHt9XG4gIH1cbiAgaWYgKGZzLmNob3duICYmICFmcy5sY2hvd24pIHtcbiAgICBmcy5sY2hvd24gPSBmdW5jdGlvbiAocGF0aCwgdWlkLCBnaWQsIGNiKSB7XG4gICAgICBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpXG4gICAgfVxuICAgIGZzLmxjaG93blN5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICB9XG5cbiAgLy8gb24gV2luZG93cywgQS9WIHNvZnR3YXJlIGNhbiBsb2NrIHRoZSBkaXJlY3RvcnksIGNhdXNpbmcgdGhpc1xuICAvLyB0byBmYWlsIHdpdGggYW4gRUFDQ0VTIG9yIEVQRVJNIGlmIHRoZSBkaXJlY3RvcnkgY29udGFpbnMgbmV3bHlcbiAgLy8gY3JlYXRlZCBmaWxlcy4gIFRyeSBhZ2FpbiBvbiBmYWlsdXJlLCBmb3IgdXAgdG8gNjAgc2Vjb25kcy5cblxuICAvLyBTZXQgdGhlIHRpbWVvdXQgdGhpcyBsb25nIGJlY2F1c2Ugc29tZSBXaW5kb3dzIEFudGktVmlydXMsIHN1Y2ggYXMgUGFyaXR5XG4gIC8vIGJpdDksIG1heSBsb2NrIGZpbGVzIGZvciB1cCB0byBhIG1pbnV0ZSwgY2F1c2luZyBucG0gcGFja2FnZSBpbnN0YWxsXG4gIC8vIGZhaWx1cmVzLiBBbHNvLCB0YWtlIGNhcmUgdG8geWllbGQgdGhlIHNjaGVkdWxlci4gV2luZG93cyBzY2hlZHVsaW5nIGdpdmVzXG4gIC8vIENQVSB0byBhIGJ1c3kgbG9vcGluZyBwcm9jZXNzLCB3aGljaCBjYW4gY2F1c2UgdGhlIHByb2dyYW0gY2F1c2luZyB0aGUgbG9ja1xuICAvLyBjb250ZW50aW9uIHRvIGJlIHN0YXJ2ZWQgb2YgQ1BVIGJ5IG5vZGUsIHNvIHRoZSBjb250ZW50aW9uIGRvZXNuJ3QgcmVzb2x2ZS5cbiAgaWYgKHBsYXRmb3JtID09PSBcIndpbjMyXCIpIHtcbiAgICBmcy5yZW5hbWUgPSB0eXBlb2YgZnMucmVuYW1lICE9PSAnZnVuY3Rpb24nID8gZnMucmVuYW1lXG4gICAgOiAoZnVuY3Rpb24gKGZzJHJlbmFtZSkge1xuICAgICAgZnVuY3Rpb24gcmVuYW1lIChmcm9tLCB0bywgY2IpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKVxuICAgICAgICB2YXIgYmFja29mZiA9IDA7XG4gICAgICAgIGZzJHJlbmFtZShmcm9tLCB0bywgZnVuY3Rpb24gQ0IgKGVyKSB7XG4gICAgICAgICAgaWYgKGVyXG4gICAgICAgICAgICAgICYmIChlci5jb2RlID09PSBcIkVBQ0NFU1wiIHx8IGVyLmNvZGUgPT09IFwiRVBFUk1cIiB8fCBlci5jb2RlID09PSBcIkVCVVNZXCIpXG4gICAgICAgICAgICAgICYmIERhdGUubm93KCkgLSBzdGFydCA8IDYwMDAwKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBmcy5zdGF0KHRvLCBmdW5jdGlvbiAoc3RhdGVyLCBzdCkge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZXIgJiYgc3RhdGVyLmNvZGUgPT09IFwiRU5PRU5UXCIpXG4gICAgICAgICAgICAgICAgICBmcyRyZW5hbWUoZnJvbSwgdG8sIENCKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICBjYihlcilcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sIGJhY2tvZmYpXG4gICAgICAgICAgICBpZiAoYmFja29mZiA8IDEwMClcbiAgICAgICAgICAgICAgYmFja29mZiArPSAxMDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNiKSBjYihlcilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIE9iamVjdC5zZXRQcm90b3R5cGVPZihyZW5hbWUsIGZzJHJlbmFtZSlcbiAgICAgIHJldHVybiByZW5hbWVcbiAgICB9KShmcy5yZW5hbWUpXG4gIH1cblxuICAvLyBpZiByZWFkKCkgcmV0dXJucyBFQUdBSU4sIHRoZW4ganVzdCB0cnkgaXQgYWdhaW4uXG4gIGZzLnJlYWQgPSB0eXBlb2YgZnMucmVhZCAhPT0gJ2Z1bmN0aW9uJyA/IGZzLnJlYWRcbiAgOiAoZnVuY3Rpb24gKGZzJHJlYWQpIHtcbiAgICBmdW5jdGlvbiByZWFkIChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrXykge1xuICAgICAgdmFyIGNhbGxiYWNrXG4gICAgICBpZiAoY2FsbGJhY2tfICYmIHR5cGVvZiBjYWxsYmFja18gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIGVhZ0NvdW50ZXIgPSAwXG4gICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKGVyLCBfLCBfXykge1xuICAgICAgICAgIGlmIChlciAmJiBlci5jb2RlID09PSAnRUFHQUlOJyAmJiBlYWdDb3VudGVyIDwgMTApIHtcbiAgICAgICAgICAgIGVhZ0NvdW50ZXIgKytcbiAgICAgICAgICAgIHJldHVybiBmcyRyZWFkLmNhbGwoZnMsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhbGxiYWNrXy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmcyRyZWFkLmNhbGwoZnMsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLy8gVGhpcyBlbnN1cmVzIGB1dGlsLnByb21pc2lmeWAgd29ya3MgYXMgaXQgZG9lcyBmb3IgbmF0aXZlIGBmcy5yZWFkYC5cbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YocmVhZCwgZnMkcmVhZClcbiAgICByZXR1cm4gcmVhZFxuICB9KShmcy5yZWFkKVxuXG4gIGZzLnJlYWRTeW5jID0gdHlwZW9mIGZzLnJlYWRTeW5jICE9PSAnZnVuY3Rpb24nID8gZnMucmVhZFN5bmNcbiAgOiAoZnVuY3Rpb24gKGZzJHJlYWRTeW5jKSB7IHJldHVybiBmdW5jdGlvbiAoZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uKSB7XG4gICAgdmFyIGVhZ0NvdW50ZXIgPSAwXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBmcyRyZWFkU3luYy5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24pXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBpZiAoZXIuY29kZSA9PT0gJ0VBR0FJTicgJiYgZWFnQ291bnRlciA8IDEwKSB7XG4gICAgICAgICAgZWFnQ291bnRlciArK1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJcbiAgICAgIH1cbiAgICB9XG4gIH19KShmcy5yZWFkU3luYylcblxuICBmdW5jdGlvbiBwYXRjaExjaG1vZCAoZnMpIHtcbiAgICBmcy5sY2htb2QgPSBmdW5jdGlvbiAocGF0aCwgbW9kZSwgY2FsbGJhY2spIHtcbiAgICAgIGZzLm9wZW4oIHBhdGhcbiAgICAgICAgICAgICAsIGNvbnN0YW50cy5PX1dST05MWSB8IGNvbnN0YW50cy5PX1NZTUxJTktcbiAgICAgICAgICAgICAsIG1vZGVcbiAgICAgICAgICAgICAsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVycilcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICAvLyBwcmVmZXIgdG8gcmV0dXJuIHRoZSBjaG1vZCBlcnJvciwgaWYgb25lIG9jY3VycyxcbiAgICAgICAgLy8gYnV0IHN0aWxsIHRyeSB0byBjbG9zZSwgYW5kIHJlcG9ydCBjbG9zaW5nIGVycm9ycyBpZiB0aGV5IG9jY3VyLlxuICAgICAgICBmcy5mY2htb2QoZmQsIG1vZGUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICBmcy5jbG9zZShmZCwgZnVuY3Rpb24oZXJyMikge1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhlcnIgfHwgZXJyMilcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBmcy5sY2htb2RTeW5jID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUpIHtcbiAgICAgIHZhciBmZCA9IGZzLm9wZW5TeW5jKHBhdGgsIGNvbnN0YW50cy5PX1dST05MWSB8IGNvbnN0YW50cy5PX1NZTUxJTkssIG1vZGUpXG5cbiAgICAgIC8vIHByZWZlciB0byByZXR1cm4gdGhlIGNobW9kIGVycm9yLCBpZiBvbmUgb2NjdXJzLFxuICAgICAgLy8gYnV0IHN0aWxsIHRyeSB0byBjbG9zZSwgYW5kIHJlcG9ydCBjbG9zaW5nIGVycm9ycyBpZiB0aGV5IG9jY3VyLlxuICAgICAgdmFyIHRocmV3ID0gdHJ1ZVxuICAgICAgdmFyIHJldFxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0ID0gZnMuZmNobW9kU3luYyhmZCwgbW9kZSlcbiAgICAgICAgdGhyZXcgPSBmYWxzZVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHRocmV3KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgICB9IGNhdGNoIChlcikge31cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXRcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXRjaEx1dGltZXMgKGZzKSB7XG4gICAgaWYgKGNvbnN0YW50cy5oYXNPd25Qcm9wZXJ0eShcIk9fU1lNTElOS1wiKSAmJiBmcy5mdXRpbWVzKSB7XG4gICAgICBmcy5sdXRpbWVzID0gZnVuY3Rpb24gKHBhdGgsIGF0LCBtdCwgY2IpIHtcbiAgICAgICAgZnMub3BlbihwYXRoLCBjb25zdGFudHMuT19TWU1MSU5LLCBmdW5jdGlvbiAoZXIsIGZkKSB7XG4gICAgICAgICAgaWYgKGVyKSB7XG4gICAgICAgICAgICBpZiAoY2IpIGNiKGVyKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGZzLmZ1dGltZXMoZmQsIGF0LCBtdCwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgICAgICBmcy5jbG9zZShmZCwgZnVuY3Rpb24gKGVyMikge1xuICAgICAgICAgICAgICBpZiAoY2IpIGNiKGVyIHx8IGVyMilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZnMubHV0aW1lc1N5bmMgPSBmdW5jdGlvbiAocGF0aCwgYXQsIG10KSB7XG4gICAgICAgIHZhciBmZCA9IGZzLm9wZW5TeW5jKHBhdGgsIGNvbnN0YW50cy5PX1NZTUxJTkspXG4gICAgICAgIHZhciByZXRcbiAgICAgICAgdmFyIHRocmV3ID0gdHJ1ZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldCA9IGZzLmZ1dGltZXNTeW5jKGZkLCBhdCwgbXQpXG4gICAgICAgICAgdGhyZXcgPSBmYWxzZVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmICh0aHJldykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICAgICAgfSBjYXRjaCAoZXIpIHt9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldFxuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmIChmcy5mdXRpbWVzKSB7XG4gICAgICBmcy5sdXRpbWVzID0gZnVuY3Rpb24gKF9hLCBfYiwgX2MsIGNiKSB7IGlmIChjYikgcHJvY2Vzcy5uZXh0VGljayhjYikgfVxuICAgICAgZnMubHV0aW1lc1N5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNobW9kRml4IChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBtb2RlLCBjYikge1xuICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCBtb2RlLCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgaWYgKGNob3duRXJPayhlcikpIGVyID0gbnVsbFxuICAgICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2htb2RGaXhTeW5jIChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBtb2RlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG1vZGUpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBpZiAoIWNob3duRXJPayhlcikpIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBmdW5jdGlvbiBjaG93bkZpeCAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdWlkLCBnaWQsIGNiKSB7XG4gICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIHVpZCwgZ2lkLCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgaWYgKGNob3duRXJPayhlcikpIGVyID0gbnVsbFxuICAgICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hvd25GaXhTeW5jIChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCB1aWQsIGdpZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCB1aWQsIGdpZClcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGlmICghY2hvd25Fck9rKGVyKSkgdGhyb3cgZXJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdGF0Rml4IChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIE5vZGUgZXJyb25lb3VzbHkgcmV0dXJuZWQgc2lnbmVkIGludGVnZXJzIGZvclxuICAgIC8vIHVpZCArIGdpZC5cbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucywgY2IpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnNcbiAgICAgICAgb3B0aW9ucyA9IG51bGxcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrIChlciwgc3RhdHMpIHtcbiAgICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgICAgaWYgKHN0YXRzLnVpZCA8IDApIHN0YXRzLnVpZCArPSAweDEwMDAwMDAwMFxuICAgICAgICAgIGlmIChzdGF0cy5naWQgPCAwKSBzdGF0cy5naWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zID8gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAgICAgICA6IG9yaWcuY2FsbChmcywgdGFyZ2V0LCBjYWxsYmFjaylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdGF0Rml4U3luYyAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBOb2RlIGVycm9uZW91c2x5IHJldHVybmVkIHNpZ25lZCBpbnRlZ2VycyBmb3JcbiAgICAvLyB1aWQgKyBnaWQuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBzdGF0cyA9IG9wdGlvbnMgPyBvcmlnLmNhbGwoZnMsIHRhcmdldCwgb3B0aW9ucylcbiAgICAgICAgOiBvcmlnLmNhbGwoZnMsIHRhcmdldClcbiAgICAgIGlmIChzdGF0cykge1xuICAgICAgICBpZiAoc3RhdHMudWlkIDwgMCkgc3RhdHMudWlkICs9IDB4MTAwMDAwMDAwXG4gICAgICAgIGlmIChzdGF0cy5naWQgPCAwKSBzdGF0cy5naWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0cztcbiAgICB9XG4gIH1cblxuICAvLyBFTk9TWVMgbWVhbnMgdGhhdCB0aGUgZnMgZG9lc24ndCBzdXBwb3J0IHRoZSBvcC4gSnVzdCBpZ25vcmVcbiAgLy8gdGhhdCwgYmVjYXVzZSBpdCBkb2Vzbid0IG1hdHRlci5cbiAgLy9cbiAgLy8gaWYgdGhlcmUncyBubyBnZXR1aWQsIG9yIGlmIGdldHVpZCgpIGlzIHNvbWV0aGluZyBvdGhlclxuICAvLyB0aGFuIDAsIGFuZCB0aGUgZXJyb3IgaXMgRUlOVkFMIG9yIEVQRVJNLCB0aGVuIGp1c3QgaWdub3JlXG4gIC8vIGl0LlxuICAvL1xuICAvLyBUaGlzIHNwZWNpZmljIGNhc2UgaXMgYSBzaWxlbnQgZmFpbHVyZSBpbiBjcCwgaW5zdGFsbCwgdGFyLFxuICAvLyBhbmQgbW9zdCBvdGhlciB1bml4IHRvb2xzIHRoYXQgbWFuYWdlIHBlcm1pc3Npb25zLlxuICAvL1xuICAvLyBXaGVuIHJ1bm5pbmcgYXMgcm9vdCwgb3IgaWYgb3RoZXIgdHlwZXMgb2YgZXJyb3JzIGFyZVxuICAvLyBlbmNvdW50ZXJlZCwgdGhlbiBpdCdzIHN0cmljdC5cbiAgZnVuY3Rpb24gY2hvd25Fck9rIChlcikge1xuICAgIGlmICghZXIpXG4gICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgaWYgKGVyLmNvZGUgPT09IFwiRU5PU1lTXCIpXG4gICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgdmFyIG5vbnJvb3QgPSAhcHJvY2Vzcy5nZXR1aWQgfHwgcHJvY2Vzcy5nZXR1aWQoKSAhPT0gMFxuICAgIGlmIChub25yb290KSB7XG4gICAgICBpZiAoZXIuY29kZSA9PT0gXCJFSU5WQUxcIiB8fCBlci5jb2RlID09PSBcIkVQRVJNXCIpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsCiAgICAidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxlZ2FjeVxuXG5mdW5jdGlvbiBsZWdhY3kgKGZzKSB7XG4gIHJldHVybiB7XG4gICAgUmVhZFN0cmVhbTogUmVhZFN0cmVhbSxcbiAgICBXcml0ZVN0cmVhbTogV3JpdGVTdHJlYW1cbiAgfVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVhZFN0cmVhbSkpIHJldHVybiBuZXcgUmVhZFN0cmVhbShwYXRoLCBvcHRpb25zKTtcblxuICAgIFN0cmVhbS5jYWxsKHRoaXMpO1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLmZkID0gbnVsbDtcbiAgICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5mbGFncyA9ICdyJztcbiAgICB0aGlzLm1vZGUgPSA0Mzg7IC8qPTA2NjYqL1xuICAgIHRoaXMuYnVmZmVyU2l6ZSA9IDY0ICogMTAyNDtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gTWl4aW4gb3B0aW9ucyBpbnRvIHRoaXNcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICB0aGlzW2tleV0gPSBvcHRpb25zW2tleV07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5jb2RpbmcpIHRoaXMuc2V0RW5jb2RpbmcodGhpcy5lbmNvZGluZyk7XG5cbiAgICBpZiAodGhpcy5zdGFydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLnN0YXJ0KSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignc3RhcnQgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5lbmQgPSBJbmZpbml0eTtcbiAgICAgIH0gZWxzZSBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLmVuZCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ2VuZCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0YXJ0ID4gdGhpcy5lbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGFydCBtdXN0IGJlIDw9IGVuZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmQgIT09IG51bGwpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYuX3JlYWQoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZzLm9wZW4odGhpcy5wYXRoLCB0aGlzLmZsYWdzLCB0aGlzLm1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICBzZWxmLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2VsZi5mZCA9IGZkO1xuICAgICAgc2VsZi5lbWl0KCdvcGVuJywgZmQpO1xuICAgICAgc2VsZi5fcmVhZCgpO1xuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBXcml0ZVN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBXcml0ZVN0cmVhbSkpIHJldHVybiBuZXcgV3JpdGVTdHJlYW0ocGF0aCwgb3B0aW9ucyk7XG5cbiAgICBTdHJlYW0uY2FsbCh0aGlzKTtcblxuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5mZCA9IG51bGw7XG4gICAgdGhpcy53cml0YWJsZSA9IHRydWU7XG5cbiAgICB0aGlzLmZsYWdzID0gJ3cnO1xuICAgIHRoaXMuZW5jb2RpbmcgPSAnYmluYXJ5JztcbiAgICB0aGlzLm1vZGUgPSA0Mzg7IC8qPTA2NjYqL1xuICAgIHRoaXMuYnl0ZXNXcml0dGVuID0gMDtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gTWl4aW4gb3B0aW9ucyBpbnRvIHRoaXNcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICB0aGlzW2tleV0gPSBvcHRpb25zW2tleV07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgdGhpcy5zdGFydCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ3N0YXJ0IG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnN0YXJ0IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0IG11c3QgYmUgPj0gemVybycpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgfVxuXG4gICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgdGhpcy5fcXVldWUgPSBbXTtcblxuICAgIGlmICh0aGlzLmZkID09PSBudWxsKSB7XG4gICAgICB0aGlzLl9vcGVuID0gZnMub3BlbjtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goW3RoaXMuX29wZW4sIHRoaXMucGF0aCwgdGhpcy5mbGFncywgdGhpcy5tb2RlLCB1bmRlZmluZWRdKTtcbiAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVcblxudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iai5fX3Byb3RvX19cbn1cblxuZnVuY3Rpb24gY2xvbmUgKG9iaikge1xuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKVxuICAgIHJldHVybiBvYmpcblxuICBpZiAob2JqIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgIHZhciBjb3B5ID0geyBfX3Byb3RvX186IGdldFByb3RvdHlwZU9mKG9iaikgfVxuICBlbHNlXG4gICAgdmFyIGNvcHkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29weSwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSlcbiAgfSlcblxuICByZXR1cm4gY29weVxufVxuIiwKICAgICJ2YXIgZnMgPSByZXF1aXJlKCdmcycpXG52YXIgcG9seWZpbGxzID0gcmVxdWlyZSgnLi9wb2x5ZmlsbHMuanMnKVxudmFyIGxlZ2FjeSA9IHJlcXVpcmUoJy4vbGVnYWN5LXN0cmVhbXMuanMnKVxudmFyIGNsb25lID0gcmVxdWlyZSgnLi9jbG9uZS5qcycpXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gbm9kZSAwLnggcG9seWZpbGwgKi9cbnZhciBncmFjZWZ1bFF1ZXVlXG52YXIgcHJldmlvdXNTeW1ib2xcblxuLyogaXN0YW5idWwgaWdub3JlIGVsc2UgLSBub2RlIDAueCBwb2x5ZmlsbCAqL1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5mb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgZ3JhY2VmdWxRdWV1ZSA9IFN5bWJvbC5mb3IoJ2dyYWNlZnVsLWZzLnF1ZXVlJylcbiAgLy8gVGhpcyBpcyB1c2VkIGluIHRlc3RpbmcgYnkgZnV0dXJlIHZlcnNpb25zXG4gIHByZXZpb3VzU3ltYm9sID0gU3ltYm9sLmZvcignZ3JhY2VmdWwtZnMucHJldmlvdXMnKVxufSBlbHNlIHtcbiAgZ3JhY2VmdWxRdWV1ZSA9ICdfX19ncmFjZWZ1bC1mcy5xdWV1ZSdcbiAgcHJldmlvdXNTeW1ib2wgPSAnX19fZ3JhY2VmdWwtZnMucHJldmlvdXMnXG59XG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuZnVuY3Rpb24gcHVibGlzaFF1ZXVlKGNvbnRleHQsIHF1ZXVlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb250ZXh0LCBncmFjZWZ1bFF1ZXVlLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBxdWV1ZVxuICAgIH1cbiAgfSlcbn1cblxudmFyIGRlYnVnID0gbm9vcFxuaWYgKHV0aWwuZGVidWdsb2cpXG4gIGRlYnVnID0gdXRpbC5kZWJ1Z2xvZygnZ2ZzNCcpXG5lbHNlIGlmICgvXFxiZ2ZzNFxcYi9pLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJykpXG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG0gPSB1dGlsLmZvcm1hdC5hcHBseSh1dGlsLCBhcmd1bWVudHMpXG4gICAgbSA9ICdHRlM0OiAnICsgbS5zcGxpdCgvXFxuLykuam9pbignXFxuR0ZTNDogJylcbiAgICBjb25zb2xlLmVycm9yKG0pXG4gIH1cblxuLy8gT25jZSB0aW1lIGluaXRpYWxpemF0aW9uXG5pZiAoIWZzW2dyYWNlZnVsUXVldWVdKSB7XG4gIC8vIFRoaXMgcXVldWUgY2FuIGJlIHNoYXJlZCBieSBtdWx0aXBsZSBsb2FkZWQgaW5zdGFuY2VzXG4gIHZhciBxdWV1ZSA9IGdsb2JhbFtncmFjZWZ1bFF1ZXVlXSB8fCBbXVxuICBwdWJsaXNoUXVldWUoZnMsIHF1ZXVlKVxuXG4gIC8vIFBhdGNoIGZzLmNsb3NlL2Nsb3NlU3luYyB0byBzaGFyZWQgcXVldWUgdmVyc2lvbiwgYmVjYXVzZSB3ZSBuZWVkXG4gIC8vIHRvIHJldHJ5KCkgd2hlbmV2ZXIgYSBjbG9zZSBoYXBwZW5zICphbnl3aGVyZSogaW4gdGhlIHByb2dyYW0uXG4gIC8vIFRoaXMgaXMgZXNzZW50aWFsIHdoZW4gbXVsdGlwbGUgZ3JhY2VmdWwtZnMgaW5zdGFuY2VzIGFyZVxuICAvLyBpbiBwbGF5IGF0IHRoZSBzYW1lIHRpbWUuXG4gIGZzLmNsb3NlID0gKGZ1bmN0aW9uIChmcyRjbG9zZSkge1xuICAgIGZ1bmN0aW9uIGNsb3NlIChmZCwgY2IpIHtcbiAgICAgIHJldHVybiBmcyRjbG9zZS5jYWxsKGZzLCBmZCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGdyYWNlZnVsLWZzIHNoYXJlZCBxdWV1ZVxuICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgIHJlc2V0UXVldWUoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9KVxuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbG9zZSwgcHJldmlvdXNTeW1ib2wsIHtcbiAgICAgIHZhbHVlOiBmcyRjbG9zZVxuICAgIH0pXG4gICAgcmV0dXJuIGNsb3NlXG4gIH0pKGZzLmNsb3NlKVxuXG4gIGZzLmNsb3NlU3luYyA9IChmdW5jdGlvbiAoZnMkY2xvc2VTeW5jKSB7XG4gICAgZnVuY3Rpb24gY2xvc2VTeW5jIChmZCkge1xuICAgICAgLy8gVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBncmFjZWZ1bC1mcyBzaGFyZWQgcXVldWVcbiAgICAgIGZzJGNsb3NlU3luYy5hcHBseShmcywgYXJndW1lbnRzKVxuICAgICAgcmVzZXRRdWV1ZSgpXG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsb3NlU3luYywgcHJldmlvdXNTeW1ib2wsIHtcbiAgICAgIHZhbHVlOiBmcyRjbG9zZVN5bmNcbiAgICB9KVxuICAgIHJldHVybiBjbG9zZVN5bmNcbiAgfSkoZnMuY2xvc2VTeW5jKVxuXG4gIGlmICgvXFxiZ2ZzNFxcYi9pLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJykpIHtcbiAgICBwcm9jZXNzLm9uKCdleGl0JywgZnVuY3Rpb24oKSB7XG4gICAgICBkZWJ1Zyhmc1tncmFjZWZ1bFF1ZXVlXSlcbiAgICAgIHJlcXVpcmUoJ2Fzc2VydCcpLmVxdWFsKGZzW2dyYWNlZnVsUXVldWVdLmxlbmd0aCwgMClcbiAgICB9KVxuICB9XG59XG5cbmlmICghZ2xvYmFsW2dyYWNlZnVsUXVldWVdKSB7XG4gIHB1Ymxpc2hRdWV1ZShnbG9iYWwsIGZzW2dyYWNlZnVsUXVldWVdKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaChjbG9uZShmcykpXG5pZiAocHJvY2Vzcy5lbnYuVEVTVF9HUkFDRUZVTF9GU19HTE9CQUxfUEFUQ0ggJiYgIWZzLl9fcGF0Y2hlZCkge1xuICAgIG1vZHVsZS5leHBvcnRzID0gcGF0Y2goZnMpXG4gICAgZnMuX19wYXRjaGVkID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcGF0Y2ggKGZzKSB7XG4gIC8vIEV2ZXJ5dGhpbmcgdGhhdCByZWZlcmVuY2VzIHRoZSBvcGVuKCkgZnVuY3Rpb24gbmVlZHMgdG8gYmUgaW4gaGVyZVxuICBwb2x5ZmlsbHMoZnMpXG4gIGZzLmdyYWNlZnVsaWZ5ID0gcGF0Y2hcblxuICBmcy5jcmVhdGVSZWFkU3RyZWFtID0gY3JlYXRlUmVhZFN0cmVhbVxuICBmcy5jcmVhdGVXcml0ZVN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtXG4gIHZhciBmcyRyZWFkRmlsZSA9IGZzLnJlYWRGaWxlXG4gIGZzLnJlYWRGaWxlID0gcmVhZEZpbGVcbiAgZnVuY3Rpb24gcmVhZEZpbGUgKHBhdGgsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJHJlYWRGaWxlKHBhdGgsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kcmVhZEZpbGUgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRyZWFkRmlsZShwYXRoLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJHJlYWRGaWxlLCBbcGF0aCwgb3B0aW9ucywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkd3JpdGVGaWxlID0gZnMud3JpdGVGaWxlXG4gIGZzLndyaXRlRmlsZSA9IHdyaXRlRmlsZVxuICBmdW5jdGlvbiB3cml0ZUZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJHdyaXRlRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJHdyaXRlRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJHdyaXRlRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJHdyaXRlRmlsZSwgW3BhdGgsIGRhdGEsIG9wdGlvbnMsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJGFwcGVuZEZpbGUgPSBmcy5hcHBlbmRGaWxlXG4gIGlmIChmcyRhcHBlbmRGaWxlKVxuICAgIGZzLmFwcGVuZEZpbGUgPSBhcHBlbmRGaWxlXG4gIGZ1bmN0aW9uIGFwcGVuZEZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJGFwcGVuZEZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRhcHBlbmRGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkYXBwZW5kRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJGFwcGVuZEZpbGUsIFtwYXRoLCBkYXRhLCBvcHRpb25zLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyRjb3B5RmlsZSA9IGZzLmNvcHlGaWxlXG4gIGlmIChmcyRjb3B5RmlsZSlcbiAgICBmcy5jb3B5RmlsZSA9IGNvcHlGaWxlXG4gIGZ1bmN0aW9uIGNvcHlGaWxlIChzcmMsIGRlc3QsIGZsYWdzLCBjYikge1xuICAgIGlmICh0eXBlb2YgZmxhZ3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNiID0gZmxhZ3NcbiAgICAgIGZsYWdzID0gMFxuICAgIH1cbiAgICByZXR1cm4gZ28kY29weUZpbGUoc3JjLCBkZXN0LCBmbGFncywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRjb3B5RmlsZSAoc3JjLCBkZXN0LCBmbGFncywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJGNvcHlGaWxlKHNyYywgZGVzdCwgZmxhZ3MsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kY29weUZpbGUsIFtzcmMsIGRlc3QsIGZsYWdzLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyRyZWFkZGlyID0gZnMucmVhZGRpclxuICBmcy5yZWFkZGlyID0gcmVhZGRpclxuICB2YXIgbm9SZWFkZGlyT3B0aW9uVmVyc2lvbnMgPSAvXnZbMC01XVxcLi9cbiAgZnVuY3Rpb24gcmVhZGRpciAocGF0aCwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICB2YXIgZ28kcmVhZGRpciA9IG5vUmVhZGRpck9wdGlvblZlcnNpb25zLnRlc3QocHJvY2Vzcy52ZXJzaW9uKVxuICAgICAgPyBmdW5jdGlvbiBnbyRyZWFkZGlyIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICAgIHJldHVybiBmcyRyZWFkZGlyKHBhdGgsIGZzJHJlYWRkaXJDYWxsYmFjayhcbiAgICAgICAgICBwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lXG4gICAgICAgICkpXG4gICAgICB9XG4gICAgICA6IGZ1bmN0aW9uIGdvJHJlYWRkaXIgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZzJHJlYWRkaXIocGF0aCwgb3B0aW9ucywgZnMkcmVhZGRpckNhbGxiYWNrKFxuICAgICAgICAgIHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWVcbiAgICAgICAgKSlcbiAgICAgIH1cblxuICAgIHJldHVybiBnbyRyZWFkZGlyKHBhdGgsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZnMkcmVhZGRpckNhbGxiYWNrIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGVyciwgZmlsZXMpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbXG4gICAgICAgICAgICBnbyRyZWFkZGlyLFxuICAgICAgICAgICAgW3BhdGgsIG9wdGlvbnMsIGNiXSxcbiAgICAgICAgICAgIGVycixcbiAgICAgICAgICAgIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLFxuICAgICAgICAgICAgRGF0ZS5ub3coKVxuICAgICAgICAgIF0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5zb3J0KVxuICAgICAgICAgICAgZmlsZXMuc29ydCgpXG5cbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuY2FsbCh0aGlzLCBlcnIsIGZpbGVzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb2Nlc3MudmVyc2lvbi5zdWJzdHIoMCwgNCkgPT09ICd2MC44Jykge1xuICAgIHZhciBsZWdTdHJlYW1zID0gbGVnYWN5KGZzKVxuICAgIFJlYWRTdHJlYW0gPSBsZWdTdHJlYW1zLlJlYWRTdHJlYW1cbiAgICBXcml0ZVN0cmVhbSA9IGxlZ1N0cmVhbXMuV3JpdGVTdHJlYW1cbiAgfVxuXG4gIHZhciBmcyRSZWFkU3RyZWFtID0gZnMuUmVhZFN0cmVhbVxuICBpZiAoZnMkUmVhZFN0cmVhbSkge1xuICAgIFJlYWRTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShmcyRSZWFkU3RyZWFtLnByb3RvdHlwZSlcbiAgICBSZWFkU3RyZWFtLnByb3RvdHlwZS5vcGVuID0gUmVhZFN0cmVhbSRvcGVuXG4gIH1cblxuICB2YXIgZnMkV3JpdGVTdHJlYW0gPSBmcy5Xcml0ZVN0cmVhbVxuICBpZiAoZnMkV3JpdGVTdHJlYW0pIHtcbiAgICBXcml0ZVN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGZzJFdyaXRlU3RyZWFtLnByb3RvdHlwZSlcbiAgICBXcml0ZVN0cmVhbS5wcm90b3R5cGUub3BlbiA9IFdyaXRlU3RyZWFtJG9wZW5cbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ1JlYWRTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gUmVhZFN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBSZWFkU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdXcml0ZVN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBXcml0ZVN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBXcml0ZVN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcblxuICAvLyBsZWdhY3kgbmFtZXNcbiAgdmFyIEZpbGVSZWFkU3RyZWFtID0gUmVhZFN0cmVhbVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdGaWxlUmVhZFN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBGaWxlUmVhZFN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBGaWxlUmVhZFN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcbiAgdmFyIEZpbGVXcml0ZVN0cmVhbSA9IFdyaXRlU3RyZWFtXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ0ZpbGVXcml0ZVN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBGaWxlV3JpdGVTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgRmlsZVdyaXRlU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFJlYWRTdHJlYW0pXG4gICAgICByZXR1cm4gZnMkUmVhZFN0cmVhbS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIFJlYWRTdHJlYW0uYXBwbHkoT2JqZWN0LmNyZWF0ZShSZWFkU3RyZWFtLnByb3RvdHlwZSksIGFyZ3VtZW50cylcbiAgfVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0kb3BlbiAoKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgb3Blbih0aGF0LnBhdGgsIHRoYXQuZmxhZ3MsIHRoYXQubW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgaWYgKHRoYXQuYXV0b0Nsb3NlKVxuICAgICAgICAgIHRoYXQuZGVzdHJveSgpXG5cbiAgICAgICAgdGhhdC5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoYXQuZmQgPSBmZFxuICAgICAgICB0aGF0LmVtaXQoJ29wZW4nLCBmZClcbiAgICAgICAgdGhhdC5yZWFkKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gV3JpdGVTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFdyaXRlU3RyZWFtKVxuICAgICAgcmV0dXJuIGZzJFdyaXRlU3RyZWFtLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRoaXNcbiAgICBlbHNlXG4gICAgICByZXR1cm4gV3JpdGVTdHJlYW0uYXBwbHkoT2JqZWN0LmNyZWF0ZShXcml0ZVN0cmVhbS5wcm90b3R5cGUpLCBhcmd1bWVudHMpXG4gIH1cblxuICBmdW5jdGlvbiBXcml0ZVN0cmVhbSRvcGVuICgpIHtcbiAgICB2YXIgdGhhdCA9IHRoaXNcbiAgICBvcGVuKHRoYXQucGF0aCwgdGhhdC5mbGFncywgdGhhdC5tb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICB0aGF0LmRlc3Ryb3koKVxuICAgICAgICB0aGF0LmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhhdC5mZCA9IGZkXG4gICAgICAgIHRoYXQuZW1pdCgnb3BlbicsIGZkKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVSZWFkU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBmcy5SZWFkU3RyZWFtKHBhdGgsIG9wdGlvbnMpXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVXcml0ZVN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgZnMuV3JpdGVTdHJlYW0ocGF0aCwgb3B0aW9ucylcbiAgfVxuXG4gIHZhciBmcyRvcGVuID0gZnMub3BlblxuICBmcy5vcGVuID0gb3BlblxuICBmdW5jdGlvbiBvcGVuIChwYXRoLCBmbGFncywgbW9kZSwgY2IpIHtcbiAgICBpZiAodHlwZW9mIG1vZGUgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG1vZGUsIG1vZGUgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kb3BlbihwYXRoLCBmbGFncywgbW9kZSwgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRvcGVuIChwYXRoLCBmbGFncywgbW9kZSwgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJG9wZW4ocGF0aCwgZmxhZ3MsIG1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJG9wZW4sIFtwYXRoLCBmbGFncywgbW9kZSwgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnNcbn1cblxuZnVuY3Rpb24gZW5xdWV1ZSAoZWxlbSkge1xuICBkZWJ1ZygnRU5RVUVVRScsIGVsZW1bMF0ubmFtZSwgZWxlbVsxXSlcbiAgZnNbZ3JhY2VmdWxRdWV1ZV0ucHVzaChlbGVtKVxuICByZXRyeSgpXG59XG5cbi8vIGtlZXAgdHJhY2sgb2YgdGhlIHRpbWVvdXQgYmV0d2VlbiByZXRyeSgpIGNhbGxzXG52YXIgcmV0cnlUaW1lclxuXG4vLyByZXNldCB0aGUgc3RhcnRUaW1lIGFuZCBsYXN0VGltZSB0byBub3dcbi8vIHRoaXMgcmVzZXRzIHRoZSBzdGFydCBvZiB0aGUgNjAgc2Vjb25kIG92ZXJhbGwgdGltZW91dCBhcyB3ZWxsIGFzIHRoZVxuLy8gZGVsYXkgYmV0d2VlbiBhdHRlbXB0cyBzbyB0aGF0IHdlJ2xsIHJldHJ5IHRoZXNlIGpvYnMgc29vbmVyXG5mdW5jdGlvbiByZXNldFF1ZXVlICgpIHtcbiAgdmFyIG5vdyA9IERhdGUubm93KClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmc1tncmFjZWZ1bFF1ZXVlXS5sZW5ndGg7ICsraSkge1xuICAgIC8vIGVudHJpZXMgdGhhdCBhcmUgb25seSBhIGxlbmd0aCBvZiAyIGFyZSBmcm9tIGFuIG9sZGVyIHZlcnNpb24sIGRvbid0XG4gICAgLy8gYm90aGVyIG1vZGlmeWluZyB0aG9zZSBzaW5jZSB0aGV5J2xsIGJlIHJldHJpZWQgYW55d2F5LlxuICAgIGlmIChmc1tncmFjZWZ1bFF1ZXVlXVtpXS5sZW5ndGggPiAyKSB7XG4gICAgICBmc1tncmFjZWZ1bFF1ZXVlXVtpXVszXSA9IG5vdyAvLyBzdGFydFRpbWVcbiAgICAgIGZzW2dyYWNlZnVsUXVldWVdW2ldWzRdID0gbm93IC8vIGxhc3RUaW1lXG4gICAgfVxuICB9XG4gIC8vIGNhbGwgcmV0cnkgdG8gbWFrZSBzdXJlIHdlJ3JlIGFjdGl2ZWx5IHByb2Nlc3NpbmcgdGhlIHF1ZXVlXG4gIHJldHJ5KClcbn1cblxuZnVuY3Rpb24gcmV0cnkgKCkge1xuICAvLyBjbGVhciB0aGUgdGltZXIgYW5kIHJlbW92ZSBpdCB0byBoZWxwIHByZXZlbnQgdW5pbnRlbmRlZCBjb25jdXJyZW5jeVxuICBjbGVhclRpbWVvdXQocmV0cnlUaW1lcilcbiAgcmV0cnlUaW1lciA9IHVuZGVmaW5lZFxuXG4gIGlmIChmc1tncmFjZWZ1bFF1ZXVlXS5sZW5ndGggPT09IDApXG4gICAgcmV0dXJuXG5cbiAgdmFyIGVsZW0gPSBmc1tncmFjZWZ1bFF1ZXVlXS5zaGlmdCgpXG4gIHZhciBmbiA9IGVsZW1bMF1cbiAgdmFyIGFyZ3MgPSBlbGVtWzFdXG4gIC8vIHRoZXNlIGl0ZW1zIG1heSBiZSB1bnNldCBpZiB0aGV5IHdlcmUgYWRkZWQgYnkgYW4gb2xkZXIgZ3JhY2VmdWwtZnNcbiAgdmFyIGVyciA9IGVsZW1bMl1cbiAgdmFyIHN0YXJ0VGltZSA9IGVsZW1bM11cbiAgdmFyIGxhc3RUaW1lID0gZWxlbVs0XVxuXG4gIC8vIGlmIHdlIGRvbid0IGhhdmUgYSBzdGFydFRpbWUgd2UgaGF2ZSBubyB3YXkgb2Yga25vd2luZyBpZiB3ZSd2ZSB3YWl0ZWRcbiAgLy8gbG9uZyBlbm91Z2gsIHNvIGdvIGFoZWFkIGFuZCByZXRyeSB0aGlzIGl0ZW0gbm93XG4gIGlmIChzdGFydFRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIGRlYnVnKCdSRVRSWScsIGZuLm5hbWUsIGFyZ3MpXG4gICAgZm4uYXBwbHkobnVsbCwgYXJncylcbiAgfSBlbHNlIGlmIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lID49IDYwMDAwKSB7XG4gICAgLy8gaXQncyBiZWVuIG1vcmUgdGhhbiA2MCBzZWNvbmRzIHRvdGFsLCBiYWlsIG5vd1xuICAgIGRlYnVnKCdUSU1FT1VUJywgZm4ubmFtZSwgYXJncylcbiAgICB2YXIgY2IgPSBhcmdzLnBvcCgpXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiLmNhbGwobnVsbCwgZXJyKVxuICB9IGVsc2Uge1xuICAgIC8vIHRoZSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHRoZSBsYXN0IGF0dGVtcHQgYW5kIHJpZ2h0IG5vd1xuICAgIHZhciBzaW5jZUF0dGVtcHQgPSBEYXRlLm5vdygpIC0gbGFzdFRpbWVcbiAgICAvLyB0aGUgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiB3aGVuIHdlIGZpcnN0IHRyaWVkLCBhbmQgd2hlbiB3ZSBsYXN0IHRyaWVkXG4gICAgLy8gcm91bmRlZCB1cCB0byBhdCBsZWFzdCAxXG4gICAgdmFyIHNpbmNlU3RhcnQgPSBNYXRoLm1heChsYXN0VGltZSAtIHN0YXJ0VGltZSwgMSlcbiAgICAvLyBiYWNrb2ZmLiB3YWl0IGxvbmdlciB0aGFuIHRoZSB0b3RhbCB0aW1lIHdlJ3ZlIGJlZW4gcmV0cnlpbmcsIGJ1dCBvbmx5XG4gICAgLy8gdXAgdG8gYSBtYXhpbXVtIG9mIDEwMG1zXG4gICAgdmFyIGRlc2lyZWREZWxheSA9IE1hdGgubWluKHNpbmNlU3RhcnQgKiAxLjIsIDEwMClcbiAgICAvLyBpdCdzIGJlZW4gbG9uZyBlbm91Z2ggc2luY2UgdGhlIGxhc3QgcmV0cnksIGRvIGl0IGFnYWluXG4gICAgaWYgKHNpbmNlQXR0ZW1wdCA+PSBkZXNpcmVkRGVsYXkpIHtcbiAgICAgIGRlYnVnKCdSRVRSWScsIGZuLm5hbWUsIGFyZ3MpXG4gICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbc3RhcnRUaW1lXSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIHdlIGNhbid0IGRvIHRoaXMgam9iIHlldCwgcHVzaCBpdCB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZVxuICAgICAgLy8gYW5kIGxldCB0aGUgbmV4dCBpdGVyYXRpb24gY2hlY2sgYWdhaW5cbiAgICAgIGZzW2dyYWNlZnVsUXVldWVdLnB1c2goZWxlbSlcbiAgICB9XG4gIH1cblxuICAvLyBzY2hlZHVsZSBvdXIgbmV4dCBydW4gaWYgb25lIGlzbid0IGFscmVhZHkgc2NoZWR1bGVkXG4gIGlmIChyZXRyeVRpbWVyID09PSB1bmRlZmluZWQpIHtcbiAgICByZXRyeVRpbWVyID0gc2V0VGltZW91dChyZXRyeSwgMClcbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbi8vIFRoaXMgaXMgYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub3JtYWxpemUvbXpcbi8vIENvcHlyaWdodCAoYykgMjAxNC0yMDE2IEpvbmF0aGFuIE9uZyBtZUBqb25nbGViZXJyeS5jb20gYW5kIENvbnRyaWJ1dG9yc1xuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5cbmNvbnN0IGFwaSA9IFtcbiAgJ2FjY2VzcycsXG4gICdhcHBlbmRGaWxlJyxcbiAgJ2NobW9kJyxcbiAgJ2Nob3duJyxcbiAgJ2Nsb3NlJyxcbiAgJ2NvcHlGaWxlJyxcbiAgJ2NwJyxcbiAgJ2ZjaG1vZCcsXG4gICdmY2hvd24nLFxuICAnZmRhdGFzeW5jJyxcbiAgJ2ZzdGF0JyxcbiAgJ2ZzeW5jJyxcbiAgJ2Z0cnVuY2F0ZScsXG4gICdmdXRpbWVzJyxcbiAgJ2dsb2InLFxuICAnbGNobW9kJyxcbiAgJ2xjaG93bicsXG4gICdsdXRpbWVzJyxcbiAgJ2xpbmsnLFxuICAnbHN0YXQnLFxuICAnbWtkaXInLFxuICAnbWtkdGVtcCcsXG4gICdvcGVuJyxcbiAgJ29wZW5kaXInLFxuICAncmVhZGRpcicsXG4gICdyZWFkRmlsZScsXG4gICdyZWFkbGluaycsXG4gICdyZWFscGF0aCcsXG4gICdyZW5hbWUnLFxuICAncm0nLFxuICAncm1kaXInLFxuICAnc3RhdCcsXG4gICdzdGF0ZnMnLFxuICAnc3ltbGluaycsXG4gICd0cnVuY2F0ZScsXG4gICd1bmxpbmsnLFxuICAndXRpbWVzJyxcbiAgJ3dyaXRlRmlsZSdcbl0uZmlsdGVyKGtleSA9PiB7XG4gIC8vIFNvbWUgY29tbWFuZHMgYXJlIG5vdCBhdmFpbGFibGUgb24gc29tZSBzeXN0ZW1zLiBFeDpcbiAgLy8gZnMuY3Agd2FzIGFkZGVkIGluIE5vZGUuanMgdjE2LjcuMFxuICAvLyBmcy5zdGF0ZnMgd2FzIGFkZGVkIGluIE5vZGUgdjE5LjYuMCwgdjE4LjE1LjBcbiAgLy8gZnMuZ2xvYiB3YXMgYWRkZWQgaW4gTm9kZS5qcyB2MjIuMC4wXG4gIC8vIGZzLmxjaG93biBpcyBub3QgYXZhaWxhYmxlIG9uIGF0IGxlYXN0IHNvbWUgTGludXhcbiAgcmV0dXJuIHR5cGVvZiBmc1trZXldID09PSAnZnVuY3Rpb24nXG59KVxuXG4vLyBFeHBvcnQgY2xvbmVkIGZzOlxuT2JqZWN0LmFzc2lnbihleHBvcnRzLCBmcylcblxuLy8gVW5pdmVyc2FsaWZ5IGFzeW5jIG1ldGhvZHM6XG5hcGkuZm9yRWFjaChtZXRob2QgPT4ge1xuICBleHBvcnRzW21ldGhvZF0gPSB1KGZzW21ldGhvZF0pXG59KVxuXG4vLyBXZSBkaWZmZXIgZnJvbSBtei9mcyBpbiB0aGF0IHdlIHN0aWxsIHNoaXAgdGhlIG9sZCwgYnJva2VuLCBmcy5leGlzdHMoKVxuLy8gc2luY2Ugd2UgYXJlIGEgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgdGhlIG5hdGl2ZSBtb2R1bGVcbmV4cG9ydHMuZXhpc3RzID0gZnVuY3Rpb24gKGZpbGVuYW1lLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZzLmV4aXN0cyhmaWxlbmFtZSwgY2FsbGJhY2spXG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHJldHVybiBmcy5leGlzdHMoZmlsZW5hbWUsIHJlc29sdmUpXG4gIH0pXG59XG5cbi8vIGZzLnJlYWQoKSwgZnMud3JpdGUoKSwgZnMucmVhZHYoKSwgJiBmcy53cml0ZXYoKSBuZWVkIHNwZWNpYWwgdHJlYXRtZW50IGR1ZSB0byBtdWx0aXBsZSBjYWxsYmFjayBhcmdzXG5cbmV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnMucmVhZChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKVxuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZnMucmVhZChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIChlcnIsIGJ5dGVzUmVhZCwgYnVmZmVyKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgIHJlc29sdmUoeyBieXRlc1JlYWQsIGJ1ZmZlciB9KVxuICAgIH0pXG4gIH0pXG59XG5cbi8vIEZ1bmN0aW9uIHNpZ25hdHVyZSBjYW4gYmVcbi8vIGZzLndyaXRlKGZkLCBidWZmZXJbLCBvZmZzZXRbLCBsZW5ndGhbLCBwb3NpdGlvbl1dXSwgY2FsbGJhY2spXG4vLyBPUlxuLy8gZnMud3JpdGUoZmQsIHN0cmluZ1ssIHBvc2l0aW9uWywgZW5jb2RpbmddXSwgY2FsbGJhY2spXG4vLyBXZSBuZWVkIHRvIGhhbmRsZSBib3RoIGNhc2VzLCBzbyB3ZSB1c2UgLi4uYXJnc1xuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChmZCwgYnVmZmVyLCAuLi5hcmdzKSB7XG4gIGlmICh0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZzLndyaXRlKGZkLCBidWZmZXIsIC4uLmFyZ3MpXG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGZzLndyaXRlKGZkLCBidWZmZXIsIC4uLmFyZ3MsIChlcnIsIGJ5dGVzV3JpdHRlbiwgYnVmZmVyKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgIHJlc29sdmUoeyBieXRlc1dyaXR0ZW4sIGJ1ZmZlciB9KVxuICAgIH0pXG4gIH0pXG59XG5cbi8vIEZ1bmN0aW9uIHNpZ25hdHVyZSBpc1xuLy8gcy5yZWFkdihmZCwgYnVmZmVyc1ssIHBvc2l0aW9uXSwgY2FsbGJhY2spXG4vLyBXZSBuZWVkIHRvIGhhbmRsZSB0aGUgb3B0aW9uYWwgYXJnLCBzbyB3ZSB1c2UgLi4uYXJnc1xuZXhwb3J0cy5yZWFkdiA9IGZ1bmN0aW9uIChmZCwgYnVmZmVycywgLi4uYXJncykge1xuICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmcy5yZWFkdihmZCwgYnVmZmVycywgLi4uYXJncylcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZnMucmVhZHYoZmQsIGJ1ZmZlcnMsIC4uLmFyZ3MsIChlcnIsIGJ5dGVzUmVhZCwgYnVmZmVycykgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICByZXNvbHZlKHsgYnl0ZXNSZWFkLCBidWZmZXJzIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLy8gRnVuY3Rpb24gc2lnbmF0dXJlIGlzXG4vLyBzLndyaXRldihmZCwgYnVmZmVyc1ssIHBvc2l0aW9uXSwgY2FsbGJhY2spXG4vLyBXZSBuZWVkIHRvIGhhbmRsZSB0aGUgb3B0aW9uYWwgYXJnLCBzbyB3ZSB1c2UgLi4uYXJnc1xuZXhwb3J0cy53cml0ZXYgPSBmdW5jdGlvbiAoZmQsIGJ1ZmZlcnMsIC4uLmFyZ3MpIHtcbiAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnMud3JpdGV2KGZkLCBidWZmZXJzLCAuLi5hcmdzKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBmcy53cml0ZXYoZmQsIGJ1ZmZlcnMsIC4uLmFyZ3MsIChlcnIsIGJ5dGVzV3JpdHRlbiwgYnVmZmVycykgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICByZXNvbHZlKHsgYnl0ZXNXcml0dGVuLCBidWZmZXJzIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLy8gZnMucmVhbHBhdGgubmF0aXZlIHNvbWV0aW1lcyBub3QgYXZhaWxhYmxlIGlmIGZzIGlzIG1vbmtleS1wYXRjaGVkXG5pZiAodHlwZW9mIGZzLnJlYWxwYXRoLm5hdGl2ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICBleHBvcnRzLnJlYWxwYXRoLm5hdGl2ZSA9IHUoZnMucmVhbHBhdGgubmF0aXZlKVxufSBlbHNlIHtcbiAgcHJvY2Vzcy5lbWl0V2FybmluZyhcbiAgICAnZnMucmVhbHBhdGgubmF0aXZlIGlzIG5vdCBhIGZ1bmN0aW9uLiBJcyBmcyBiZWluZyBtb25rZXktcGF0Y2hlZD8nLFxuICAgICdXYXJuaW5nJywgJ2ZzLWV4dHJhLVdBUk4wMDAzJ1xuICApXG59XG4iLAogICAgIi8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL21ha2UtZGlyXG4vLyBDb3B5cmlnaHQgKGMpIFNpbmRyZSBTb3JodXMgPHNpbmRyZXNvcmh1c0BnbWFpbC5jb20+IChzaW5kcmVzb3JodXMuY29tKVxuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4ndXNlIHN0cmljdCdcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy84OTg3XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbGlidXYvbGlidXYvcHVsbC8xMDg4XG5tb2R1bGUuZXhwb3J0cy5jaGVja1BhdGggPSBmdW5jdGlvbiBjaGVja1BhdGggKHB0aCkge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGNvbnN0IHBhdGhIYXNJbnZhbGlkV2luQ2hhcmFjdGVycyA9IC9bPD46XCJ8PypdLy50ZXN0KHB0aC5yZXBsYWNlKHBhdGgucGFyc2UocHRoKS5yb290LCAnJykpXG5cbiAgICBpZiAocGF0aEhhc0ludmFsaWRXaW5DaGFyYWN0ZXJzKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgUGF0aCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnM6ICR7cHRofWApXG4gICAgICBlcnJvci5jb2RlID0gJ0VJTlZBTCdcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCB7IGNoZWNrUGF0aCB9ID0gcmVxdWlyZSgnLi91dGlscycpXG5cbmNvbnN0IGdldE1vZGUgPSBvcHRpb25zID0+IHtcbiAgY29uc3QgZGVmYXVsdHMgPSB7IG1vZGU6IDBvNzc3IH1cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnbnVtYmVyJykgcmV0dXJuIG9wdGlvbnNcbiAgcmV0dXJuICh7IC4uLmRlZmF1bHRzLCAuLi5vcHRpb25zIH0pLm1vZGVcbn1cblxubW9kdWxlLmV4cG9ydHMubWFrZURpciA9IGFzeW5jIChkaXIsIG9wdGlvbnMpID0+IHtcbiAgY2hlY2tQYXRoKGRpcilcblxuICByZXR1cm4gZnMubWtkaXIoZGlyLCB7XG4gICAgbW9kZTogZ2V0TW9kZShvcHRpb25zKSxcbiAgICByZWN1cnNpdmU6IHRydWVcbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMubWFrZURpclN5bmMgPSAoZGlyLCBvcHRpb25zKSA9PiB7XG4gIGNoZWNrUGF0aChkaXIpXG5cbiAgcmV0dXJuIGZzLm1rZGlyU3luYyhkaXIsIHtcbiAgICBtb2RlOiBnZXRNb2RlKG9wdGlvbnMpLFxuICAgIHJlY3Vyc2l2ZTogdHJ1ZVxuICB9KVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QgeyBtYWtlRGlyOiBfbWFrZURpciwgbWFrZURpclN5bmMgfSA9IHJlcXVpcmUoJy4vbWFrZS1kaXInKVxuY29uc3QgbWFrZURpciA9IHUoX21ha2VEaXIpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBta2RpcnM6IG1ha2VEaXIsXG4gIG1rZGlyc1N5bmM6IG1ha2VEaXJTeW5jLFxuICAvLyBhbGlhc1xuICBta2RpcnA6IG1ha2VEaXIsXG4gIG1rZGlycFN5bmM6IG1ha2VEaXJTeW5jLFxuICBlbnN1cmVEaXI6IG1ha2VEaXIsXG4gIGVuc3VyZURpclN5bmM6IG1ha2VEaXJTeW5jXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcblxuZnVuY3Rpb24gcGF0aEV4aXN0cyAocGF0aCkge1xuICByZXR1cm4gZnMuYWNjZXNzKHBhdGgpLnRoZW4oKCkgPT4gdHJ1ZSkuY2F0Y2goKCkgPT4gZmFsc2UpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXRoRXhpc3RzOiB1KHBhdGhFeGlzdHMpLFxuICBwYXRoRXhpc3RzU3luYzogZnMuZXhpc3RzU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcblxuYXN5bmMgZnVuY3Rpb24gdXRpbWVzTWlsbGlzIChwYXRoLCBhdGltZSwgbXRpbWUpIHtcbiAgY29uc3QgZmQgPSBhd2FpdCBmcy5vcGVuKHBhdGgsICdyKycpXG5cbiAgbGV0IGVycm9yID0gbnVsbFxuXG4gIHRyeSB7XG4gICAgYXdhaXQgZnMuZnV0aW1lcyhmZCwgYXRpbWUsIG10aW1lKVxuICB9IGNhdGNoIChmdXRpbWVzRXJyKSB7XG4gICAgZXJyb3IgPSBmdXRpbWVzRXJyXG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLmNsb3NlKGZkKVxuICAgIH0gY2F0Y2ggKGNsb3NlRXJyKSB7XG4gICAgICBpZiAoIWVycm9yKSBlcnJvciA9IGNsb3NlRXJyXG4gICAgfVxuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGltZXNNaWxsaXNTeW5jIChwYXRoLCBhdGltZSwgbXRpbWUpIHtcbiAgY29uc3QgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCAncisnKVxuXG4gIGxldCBlcnJvciA9IG51bGxcblxuICB0cnkge1xuICAgIGZzLmZ1dGltZXNTeW5jKGZkLCBhdGltZSwgbXRpbWUpXG4gIH0gY2F0Y2ggKGZ1dGltZXNFcnIpIHtcbiAgICBlcnJvciA9IGZ1dGltZXNFcnJcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgIH0gY2F0Y2ggKGNsb3NlRXJyKSB7XG4gICAgICBpZiAoIWVycm9yKSBlcnJvciA9IGNsb3NlRXJyXG4gICAgfVxuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdXRpbWVzTWlsbGlzOiB1KHV0aW1lc01pbGxpcyksXG4gIHV0aW1lc01pbGxpc1N5bmNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnLi4vZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5cbmZ1bmN0aW9uIGdldFN0YXRzIChzcmMsIGRlc3QsIG9wdHMpIHtcbiAgY29uc3Qgc3RhdEZ1bmMgPSBvcHRzLmRlcmVmZXJlbmNlXG4gICAgPyAoZmlsZSkgPT4gZnMuc3RhdChmaWxlLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgIDogKGZpbGUpID0+IGZzLmxzdGF0KGZpbGUsIHsgYmlnaW50OiB0cnVlIH0pXG4gIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgc3RhdEZ1bmMoc3JjKSxcbiAgICBzdGF0RnVuYyhkZXN0KS5jYXRjaChlcnIgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuIG51bGxcbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIF0pLnRoZW4oKFtzcmNTdGF0LCBkZXN0U3RhdF0pID0+ICh7IHNyY1N0YXQsIGRlc3RTdGF0IH0pKVxufVxuXG5mdW5jdGlvbiBnZXRTdGF0c1N5bmMgKHNyYywgZGVzdCwgb3B0cykge1xuICBsZXQgZGVzdFN0YXRcbiAgY29uc3Qgc3RhdEZ1bmMgPSBvcHRzLmRlcmVmZXJlbmNlXG4gICAgPyAoZmlsZSkgPT4gZnMuc3RhdFN5bmMoZmlsZSwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgICA6IChmaWxlKSA9PiBmcy5sc3RhdFN5bmMoZmlsZSwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgY29uc3Qgc3JjU3RhdCA9IHN0YXRGdW5jKHNyYylcbiAgdHJ5IHtcbiAgICBkZXN0U3RhdCA9IHN0YXRGdW5jKGRlc3QpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHJldHVybiB7IHNyY1N0YXQsIGRlc3RTdGF0OiBudWxsIH1cbiAgICB0aHJvdyBlcnJcbiAgfVxuICByZXR1cm4geyBzcmNTdGF0LCBkZXN0U3RhdCB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNoZWNrUGF0aHMgKHNyYywgZGVzdCwgZnVuY05hbWUsIG9wdHMpIHtcbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gYXdhaXQgZ2V0U3RhdHMoc3JjLCBkZXN0LCBvcHRzKVxuICBpZiAoZGVzdFN0YXQpIHtcbiAgICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgICAgY29uc3Qgc3JjQmFzZU5hbWUgPSBwYXRoLmJhc2VuYW1lKHNyYylcbiAgICAgIGNvbnN0IGRlc3RCYXNlTmFtZSA9IHBhdGguYmFzZW5hbWUoZGVzdClcbiAgICAgIGlmIChmdW5jTmFtZSA9PT0gJ21vdmUnICYmXG4gICAgICAgIHNyY0Jhc2VOYW1lICE9PSBkZXN0QmFzZU5hbWUgJiZcbiAgICAgICAgc3JjQmFzZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gZGVzdEJhc2VOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIHsgc3JjU3RhdCwgZGVzdFN0YXQsIGlzQ2hhbmdpbmdDYXNlOiB0cnVlIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4nKVxuICAgIH1cbiAgICBpZiAoc3JjU3RhdC5pc0RpcmVjdG9yeSgpICYmICFkZXN0U3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBkaXJlY3RvcnkgJyR7c3JjfScuYClcbiAgICB9XG4gICAgaWYgKCFzcmNTdGF0LmlzRGlyZWN0b3J5KCkgJiYgZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIGRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBub24tZGlyZWN0b3J5ICcke3NyY30nLmApXG4gICAgfVxuICB9XG5cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSAmJiBpc1NyY1N1YmRpcihzcmMsIGRlc3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSlcbiAgfVxuXG4gIHJldHVybiB7IHNyY1N0YXQsIGRlc3RTdGF0IH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQYXRoc1N5bmMgKHNyYywgZGVzdCwgZnVuY05hbWUsIG9wdHMpIHtcbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gZ2V0U3RhdHNTeW5jKHNyYywgZGVzdCwgb3B0cylcblxuICBpZiAoZGVzdFN0YXQpIHtcbiAgICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgICAgY29uc3Qgc3JjQmFzZU5hbWUgPSBwYXRoLmJhc2VuYW1lKHNyYylcbiAgICAgIGNvbnN0IGRlc3RCYXNlTmFtZSA9IHBhdGguYmFzZW5hbWUoZGVzdClcbiAgICAgIGlmIChmdW5jTmFtZSA9PT0gJ21vdmUnICYmXG4gICAgICAgIHNyY0Jhc2VOYW1lICE9PSBkZXN0QmFzZU5hbWUgJiZcbiAgICAgICAgc3JjQmFzZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gZGVzdEJhc2VOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIHsgc3JjU3RhdCwgZGVzdFN0YXQsIGlzQ2hhbmdpbmdDYXNlOiB0cnVlIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4nKVxuICAgIH1cbiAgICBpZiAoc3JjU3RhdC5pc0RpcmVjdG9yeSgpICYmICFkZXN0U3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBkaXJlY3RvcnkgJyR7c3JjfScuYClcbiAgICB9XG4gICAgaWYgKCFzcmNTdGF0LmlzRGlyZWN0b3J5KCkgJiYgZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIGRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBub24tZGlyZWN0b3J5ICcke3NyY30nLmApXG4gICAgfVxuICB9XG5cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSAmJiBpc1NyY1N1YmRpcihzcmMsIGRlc3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSlcbiAgfVxuICByZXR1cm4geyBzcmNTdGF0LCBkZXN0U3RhdCB9XG59XG5cbi8vIHJlY3Vyc2l2ZWx5IGNoZWNrIGlmIGRlc3QgcGFyZW50IGlzIGEgc3ViZGlyZWN0b3J5IG9mIHNyYy5cbi8vIEl0IHdvcmtzIGZvciBhbGwgZmlsZSB0eXBlcyBpbmNsdWRpbmcgc3ltbGlua3Mgc2luY2UgaXRcbi8vIGNoZWNrcyB0aGUgc3JjIGFuZCBkZXN0IGlub2Rlcy4gSXQgc3RhcnRzIGZyb20gdGhlIGRlZXBlc3Rcbi8vIHBhcmVudCBhbmQgc3RvcHMgb25jZSBpdCByZWFjaGVzIHRoZSBzcmMgcGFyZW50IG9yIHRoZSByb290IHBhdGguXG5hc3luYyBmdW5jdGlvbiBjaGVja1BhcmVudFBhdGhzIChzcmMsIHNyY1N0YXQsIGRlc3QsIGZ1bmNOYW1lKSB7XG4gIGNvbnN0IHNyY1BhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoc3JjKSlcbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoZGVzdCkpXG4gIGlmIChkZXN0UGFyZW50ID09PSBzcmNQYXJlbnQgfHwgZGVzdFBhcmVudCA9PT0gcGF0aC5wYXJzZShkZXN0UGFyZW50KS5yb290KSByZXR1cm5cblxuICBsZXQgZGVzdFN0YXRcbiAgdHJ5IHtcbiAgICBkZXN0U3RhdCA9IGF3YWl0IGZzLnN0YXQoZGVzdFBhcmVudCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuXG4gICAgdGhyb3cgZXJyXG4gIH1cblxuICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2coc3JjLCBkZXN0LCBmdW5jTmFtZSkpXG4gIH1cblxuICByZXR1cm4gY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3RQYXJlbnQsIGZ1bmNOYW1lKVxufVxuXG5mdW5jdGlvbiBjaGVja1BhcmVudFBhdGhzU3luYyAoc3JjLCBzcmNTdGF0LCBkZXN0LCBmdW5jTmFtZSkge1xuICBjb25zdCBzcmNQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKHNyYykpXG4gIGNvbnN0IGRlc3RQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKGRlc3QpKVxuICBpZiAoZGVzdFBhcmVudCA9PT0gc3JjUGFyZW50IHx8IGRlc3RQYXJlbnQgPT09IHBhdGgucGFyc2UoZGVzdFBhcmVudCkucm9vdCkgcmV0dXJuXG4gIGxldCBkZXN0U3RhdFxuICB0cnkge1xuICAgIGRlc3RTdGF0ID0gZnMuc3RhdFN5bmMoZGVzdFBhcmVudCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuXG4gICAgdGhyb3cgZXJyXG4gIH1cbiAgaWYgKGFyZUlkZW50aWNhbChzcmNTdGF0LCBkZXN0U3RhdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKHNyYywgZGVzdCwgZnVuY05hbWUpKVxuICB9XG4gIHJldHVybiBjaGVja1BhcmVudFBhdGhzU3luYyhzcmMsIHNyY1N0YXQsIGRlc3RQYXJlbnQsIGZ1bmNOYW1lKVxufVxuXG5mdW5jdGlvbiBhcmVJZGVudGljYWwgKHNyY1N0YXQsIGRlc3RTdGF0KSB7XG4gIC8vIHN0YXQuZGV2IGNhbiBiZSAwbiBvbiB3aW5kb3dzIHdoZW4gbm9kZSB2ZXJzaW9uID49IDIyLngueFxuICByZXR1cm4gZGVzdFN0YXQuaW5vICE9PSB1bmRlZmluZWQgJiYgZGVzdFN0YXQuZGV2ICE9PSB1bmRlZmluZWQgJiYgZGVzdFN0YXQuaW5vID09PSBzcmNTdGF0LmlubyAmJiBkZXN0U3RhdC5kZXYgPT09IHNyY1N0YXQuZGV2XG59XG5cbi8vIHJldHVybiB0cnVlIGlmIGRlc3QgaXMgYSBzdWJkaXIgb2Ygc3JjLCBvdGhlcndpc2UgZmFsc2UuXG4vLyBJdCBvbmx5IGNoZWNrcyB0aGUgcGF0aCBzdHJpbmdzLlxuZnVuY3Rpb24gaXNTcmNTdWJkaXIgKHNyYywgZGVzdCkge1xuICBjb25zdCBzcmNBcnIgPSBwYXRoLnJlc29sdmUoc3JjKS5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKGkgPT4gaSlcbiAgY29uc3QgZGVzdEFyciA9IHBhdGgucmVzb2x2ZShkZXN0KS5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKGkgPT4gaSlcbiAgcmV0dXJuIHNyY0Fyci5ldmVyeSgoY3VyLCBpKSA9PiBkZXN0QXJyW2ldID09PSBjdXIpXG59XG5cbmZ1bmN0aW9uIGVyck1zZyAoc3JjLCBkZXN0LCBmdW5jTmFtZSkge1xuICByZXR1cm4gYENhbm5vdCAke2Z1bmNOYW1lfSAnJHtzcmN9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke2Rlc3R9Jy5gXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBjaGVja1BhdGhzXG4gIGNoZWNrUGF0aHM6IHUoY2hlY2tQYXRocyksXG4gIGNoZWNrUGF0aHNTeW5jLFxuICAvLyBjaGVja1BhcmVudFxuICBjaGVja1BhcmVudFBhdGhzOiB1KGNoZWNrUGFyZW50UGF0aHMpLFxuICBjaGVja1BhcmVudFBhdGhzU3luYyxcbiAgLy8gTWlzY1xuICBpc1NyY1N1YmRpcixcbiAgYXJlSWRlbnRpY2FsXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzEwNTZcbi8vIFBlcmZvcm1pbmcgcGFyYWxsZWwgb3BlcmF0aW9ucyBvbiBlYWNoIGl0ZW0gb2YgYW4gYXN5bmMgaXRlcmF0b3IgaXNcbi8vIHN1cnByaXNpbmdseSBoYXJkOyB5b3UgbmVlZCB0byBoYXZlIGhhbmRsZXJzIGluIHBsYWNlIHRvIGF2b2lkIGdldHRpbmcgYW5cbi8vIFVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25XYXJuaW5nLlxuLy8gTk9URTogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwcmVzZW50bHkgaGFuZGxlIHJldHVybiB2YWx1ZXMsIG9ubHkgZXJyb3JzXG5hc3luYyBmdW5jdGlvbiBhc3luY0l0ZXJhdG9yQ29uY3VycmVudFByb2Nlc3MgKGl0ZXJhdG9yLCBmbikge1xuICBjb25zdCBwcm9taXNlcyA9IFtdXG4gIGZvciBhd2FpdCAoY29uc3QgaXRlbSBvZiBpdGVyYXRvcikge1xuICAgIHByb21pc2VzLnB1c2goXG4gICAgICBmbihpdGVtKS50aGVuKFxuICAgICAgICAoKSA9PiBudWxsLFxuICAgICAgICAoZXJyKSA9PiBlcnIgPz8gbmV3IEVycm9yKCd1bmtub3duIGVycm9yJylcbiAgICAgIClcbiAgICApXG4gIH1cbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgcHJvbWlzZXMubWFwKChwcm9taXNlKSA9PlxuICAgICAgcHJvbWlzZS50aGVuKChwb3NzaWJsZUVycikgPT4ge1xuICAgICAgICBpZiAocG9zc2libGVFcnIgIT09IG51bGwpIHRocm93IHBvc3NpYmxlRXJyXG4gICAgICB9KVxuICAgIClcbiAgKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXN5bmNJdGVyYXRvckNvbmN1cnJlbnRQcm9jZXNzXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IHsgbWtkaXJzIH0gPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxuY29uc3QgeyBwYXRoRXhpc3RzIH0gPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpXG5jb25zdCB7IHV0aW1lc01pbGxpcyB9ID0gcmVxdWlyZSgnLi4vdXRpbC91dGltZXMnKVxuY29uc3Qgc3RhdCA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5jb25zdCB7IGFzeW5jSXRlcmF0b3JDb25jdXJyZW50UHJvY2VzcyB9ID0gcmVxdWlyZSgnLi4vdXRpbC9hc3luYycpXG5cbmFzeW5jIGZ1bmN0aW9uIGNvcHkgKHNyYywgZGVzdCwgb3B0cyA9IHt9KSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdHMgPSB7IGZpbHRlcjogb3B0cyB9XG4gIH1cblxuICBvcHRzLmNsb2JiZXIgPSAnY2xvYmJlcicgaW4gb3B0cyA/ICEhb3B0cy5jbG9iYmVyIDogdHJ1ZSAvLyBkZWZhdWx0IHRvIHRydWUgZm9yIG5vd1xuICBvcHRzLm92ZXJ3cml0ZSA9ICdvdmVyd3JpdGUnIGluIG9wdHMgPyAhIW9wdHMub3ZlcndyaXRlIDogb3B0cy5jbG9iYmVyIC8vIG92ZXJ3cml0ZSBmYWxscyBiYWNrIHRvIGNsb2JiZXJcblxuICAvLyBXYXJuIGFib3V0IHVzaW5nIHByZXNlcnZlVGltZXN0YW1wcyBvbiAzMi1iaXQgbm9kZVxuICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMgJiYgcHJvY2Vzcy5hcmNoID09PSAnaWEzMicpIHtcbiAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKFxuICAgICAgJ1VzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcXG5cXG4nICtcbiAgICAgICdcXHRzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjknLFxuICAgICAgJ1dhcm5pbmcnLCAnZnMtZXh0cmEtV0FSTjAwMDEnXG4gICAgKVxuICB9XG5cbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gYXdhaXQgc3RhdC5jaGVja1BhdGhzKHNyYywgZGVzdCwgJ2NvcHknLCBvcHRzKVxuXG4gIGF3YWl0IHN0YXQuY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3QsICdjb3B5JylcblxuICBjb25zdCBpbmNsdWRlID0gYXdhaXQgcnVuRmlsdGVyKHNyYywgZGVzdCwgb3B0cylcblxuICBpZiAoIWluY2x1ZGUpIHJldHVyblxuXG4gIC8vIGNoZWNrIGlmIHRoZSBwYXJlbnQgb2YgZGVzdCBleGlzdHMsIGFuZCBjcmVhdGUgaXQgaWYgaXQgZG9lc24ndCBleGlzdFxuICBjb25zdCBkZXN0UGFyZW50ID0gcGF0aC5kaXJuYW1lKGRlc3QpXG4gIGNvbnN0IGRpckV4aXN0cyA9IGF3YWl0IHBhdGhFeGlzdHMoZGVzdFBhcmVudClcbiAgaWYgKCFkaXJFeGlzdHMpIHtcbiAgICBhd2FpdCBta2RpcnMoZGVzdFBhcmVudClcbiAgfVxuXG4gIGF3YWl0IGdldFN0YXRzQW5kUGVyZm9ybUNvcHkoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuRmlsdGVyIChzcmMsIGRlc3QsIG9wdHMpIHtcbiAgaWYgKCFvcHRzLmZpbHRlcikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIG9wdHMuZmlsdGVyKHNyYywgZGVzdClcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0U3RhdHNBbmRQZXJmb3JtQ29weSAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBjb25zdCBzdGF0Rm4gPSBvcHRzLmRlcmVmZXJlbmNlID8gZnMuc3RhdCA6IGZzLmxzdGF0XG4gIGNvbnN0IHNyY1N0YXQgPSBhd2FpdCBzdGF0Rm4oc3JjKVxuXG4gIGlmIChzcmNTdGF0LmlzRGlyZWN0b3J5KCkpIHJldHVybiBvbkRpcihzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuXG4gIGlmIChcbiAgICBzcmNTdGF0LmlzRmlsZSgpIHx8XG4gICAgc3JjU3RhdC5pc0NoYXJhY3RlckRldmljZSgpIHx8XG4gICAgc3JjU3RhdC5pc0Jsb2NrRGV2aWNlKClcbiAgKSByZXR1cm4gb25GaWxlKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG5cbiAgaWYgKHNyY1N0YXQuaXNTeW1ib2xpY0xpbmsoKSkgcmV0dXJuIG9uTGluayhkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICBpZiAoc3JjU3RhdC5pc1NvY2tldCgpKSB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgc29ja2V0IGZpbGU6ICR7c3JjfWApXG4gIGlmIChzcmNTdGF0LmlzRklGTygpKSB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgRklGTyBwaXBlOiAke3NyY31gKVxuICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmlsZTogJHtzcmN9YClcbn1cblxuYXN5bmMgZnVuY3Rpb24gb25GaWxlIChzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmICghZGVzdFN0YXQpIHJldHVybiBjb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG5cbiAgaWYgKG9wdHMub3ZlcndyaXRlKSB7XG4gICAgYXdhaXQgZnMudW5saW5rKGRlc3QpXG4gICAgcmV0dXJuIGNvcHlGaWxlKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cylcbiAgfVxuICBpZiAob3B0cy5lcnJvck9uRXhpc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2Rlc3R9JyBhbHJlYWR5IGV4aXN0c2ApXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY29weUZpbGUgKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBhd2FpdCBmcy5jb3B5RmlsZShzcmMsIGRlc3QpXG4gIGlmIChvcHRzLnByZXNlcnZlVGltZXN0YW1wcykge1xuICAgIC8vIE1ha2Ugc3VyZSB0aGUgZmlsZSBpcyB3cml0YWJsZSBiZWZvcmUgc2V0dGluZyB0aGUgdGltZXN0YW1wXG4gICAgLy8gb3RoZXJ3aXNlIG9wZW4gZmFpbHMgd2l0aCBFUEVSTSB3aGVuIGludm9rZWQgd2l0aCAncisnXG4gICAgLy8gKHRocm91Z2ggdXRpbWVzIGNhbGwpXG4gICAgaWYgKGZpbGVJc05vdFdyaXRhYmxlKHNyY1N0YXQubW9kZSkpIHtcbiAgICAgIGF3YWl0IG1ha2VGaWxlV3JpdGFibGUoZGVzdCwgc3JjU3RhdC5tb2RlKVxuICAgIH1cblxuICAgIC8vIFNldCB0aW1lc3RhbXBzIGFuZCBtb2RlIGNvcnJlc3BvbmRpbmdseVxuXG4gICAgLy8gTm90ZSB0aGF0IFRoZSBpbml0aWFsIHNyY1N0YXQuYXRpbWUgY2Fubm90IGJlIHRydXN0ZWRcbiAgICAvLyBiZWNhdXNlIGl0IGlzIG1vZGlmaWVkIGJ5IHRoZSByZWFkKDIpIHN5c3RlbSBjYWxsXG4gICAgLy8gKFNlZSBodHRwczovL25vZGVqcy5vcmcvYXBpL2ZzLmh0bWwjZnNfc3RhdF90aW1lX3ZhbHVlcylcbiAgICBjb25zdCB1cGRhdGVkU3JjU3RhdCA9IGF3YWl0IGZzLnN0YXQoc3JjKVxuICAgIGF3YWl0IHV0aW1lc01pbGxpcyhkZXN0LCB1cGRhdGVkU3JjU3RhdC5hdGltZSwgdXBkYXRlZFNyY1N0YXQubXRpbWUpXG4gIH1cblxuICByZXR1cm4gZnMuY2htb2QoZGVzdCwgc3JjU3RhdC5tb2RlKVxufVxuXG5mdW5jdGlvbiBmaWxlSXNOb3RXcml0YWJsZSAoc3JjTW9kZSkge1xuICByZXR1cm4gKHNyY01vZGUgJiAwbzIwMCkgPT09IDBcbn1cblxuZnVuY3Rpb24gbWFrZUZpbGVXcml0YWJsZSAoZGVzdCwgc3JjTW9kZSkge1xuICByZXR1cm4gZnMuY2htb2QoZGVzdCwgc3JjTW9kZSB8IDBvMjAwKVxufVxuXG5hc3luYyBmdW5jdGlvbiBvbkRpciAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICAvLyB0aGUgZGVzdCBkaXJlY3RvcnkgbWlnaHQgbm90IGV4aXN0LCBjcmVhdGUgaXRcbiAgaWYgKCFkZXN0U3RhdCkge1xuICAgIGF3YWl0IGZzLm1rZGlyKGRlc3QpXG4gIH1cblxuICAvLyBpdGVyYXRlIHRocm91Z2ggdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0byBjb3B5IGV2ZXJ5dGhpbmdcbiAgYXdhaXQgYXN5bmNJdGVyYXRvckNvbmN1cnJlbnRQcm9jZXNzKGF3YWl0IGZzLm9wZW5kaXIoc3JjKSwgYXN5bmMgKGl0ZW0pID0+IHtcbiAgICBjb25zdCBzcmNJdGVtID0gcGF0aC5qb2luKHNyYywgaXRlbS5uYW1lKVxuICAgIGNvbnN0IGRlc3RJdGVtID0gcGF0aC5qb2luKGRlc3QsIGl0ZW0ubmFtZSlcblxuICAgIGNvbnN0IGluY2x1ZGUgPSBhd2FpdCBydW5GaWx0ZXIoc3JjSXRlbSwgZGVzdEl0ZW0sIG9wdHMpXG4gICAgLy8gb25seSBjb3B5IHRoZSBpdGVtIGlmIGl0IG1hdGNoZXMgdGhlIGZpbHRlciBmdW5jdGlvblxuICAgIGlmIChpbmNsdWRlKSB7XG4gICAgICBjb25zdCB7IGRlc3RTdGF0IH0gPSBhd2FpdCBzdGF0LmNoZWNrUGF0aHMoc3JjSXRlbSwgZGVzdEl0ZW0sICdjb3B5Jywgb3B0cylcbiAgICAgIC8vIElmIHRoZSBpdGVtIGlzIGEgY29weWFibGUgZmlsZSwgYGdldFN0YXRzQW5kUGVyZm9ybUNvcHlgIHdpbGwgY29weSBpdFxuICAgICAgLy8gSWYgdGhlIGl0ZW0gaXMgYSBkaXJlY3RvcnksIGBnZXRTdGF0c0FuZFBlcmZvcm1Db3B5YCB3aWxsIGNhbGwgYG9uRGlyYCByZWN1cnNpdmVseVxuICAgICAgYXdhaXQgZ2V0U3RhdHNBbmRQZXJmb3JtQ29weShkZXN0U3RhdCwgc3JjSXRlbSwgZGVzdEl0ZW0sIG9wdHMpXG4gICAgfVxuICB9KVxuXG4gIGlmICghZGVzdFN0YXQpIHtcbiAgICBhd2FpdCBmcy5jaG1vZChkZXN0LCBzcmNTdGF0Lm1vZGUpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gb25MaW5rIChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGxldCByZXNvbHZlZFNyYyA9IGF3YWl0IGZzLnJlYWRsaW5rKHNyYylcbiAgaWYgKG9wdHMuZGVyZWZlcmVuY2UpIHtcbiAgICByZXNvbHZlZFNyYyA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCByZXNvbHZlZFNyYylcbiAgfVxuICBpZiAoIWRlc3RTdGF0KSB7XG4gICAgcmV0dXJuIGZzLnN5bWxpbmsocmVzb2x2ZWRTcmMsIGRlc3QpXG4gIH1cblxuICBsZXQgcmVzb2x2ZWREZXN0ID0gbnVsbFxuICB0cnkge1xuICAgIHJlc29sdmVkRGVzdCA9IGF3YWl0IGZzLnJlYWRsaW5rKGRlc3QpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBkZXN0IGV4aXN0cyBhbmQgaXMgYSByZWd1bGFyIGZpbGUgb3IgZGlyZWN0b3J5LFxuICAgIC8vIFdpbmRvd3MgbWF5IHRocm93IFVOS05PV04gZXJyb3IuIElmIGRlc3QgYWxyZWFkeSBleGlzdHMsXG4gICAgLy8gZnMgdGhyb3dzIGVycm9yIGFueXdheSwgc28gbm8gbmVlZCB0byBndWFyZCBhZ2FpbnN0IGl0IGhlcmUuXG4gICAgaWYgKGUuY29kZSA9PT0gJ0VJTlZBTCcgfHwgZS5jb2RlID09PSAnVU5LTk9XTicpIHJldHVybiBmcy5zeW1saW5rKHJlc29sdmVkU3JjLCBkZXN0KVxuICAgIHRocm93IGVcbiAgfVxuICBpZiAob3B0cy5kZXJlZmVyZW5jZSkge1xuICAgIHJlc29sdmVkRGVzdCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCByZXNvbHZlZERlc3QpXG4gIH1cbiAgLy8gSWYgYm90aCBzeW1saW5rcyByZXNvbHZlIHRvIHRoZSBzYW1lIHRhcmdldCwgdGhleSBhcmUgc3RpbGwgZGlzdGluY3Qgc3ltbGlua3NcbiAgLy8gdGhhdCBjYW4gYmUgY29waWVkL292ZXJ3cml0dGVuLiBPbmx5IGNoZWNrIHN1YmRpcmVjdG9yeSBjb25zdHJhaW50cyB3aGVuXG4gIC8vIHRoZSByZXNvbHZlZCBwYXRocyBhcmUgZGlmZmVyZW50LlxuICBpZiAocmVzb2x2ZWRTcmMgIT09IHJlc29sdmVkRGVzdCkge1xuICAgIGlmIChzdGF0LmlzU3JjU3ViZGlyKHJlc29sdmVkU3JjLCByZXNvbHZlZERlc3QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke3Jlc29sdmVkU3JjfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtyZXNvbHZlZERlc3R9Jy5gKVxuICAgIH1cblxuICAgIC8vIGRvIG5vdCBjb3B5IGlmIHNyYyBpcyBhIHN1YmRpciBvZiBkZXN0IHNpbmNlIHVubGlua2luZ1xuICAgIC8vIGRlc3QgaW4gdGhpcyBjYXNlIHdvdWxkIHJlc3VsdCBpbiByZW1vdmluZyBzcmMgY29udGVudHNcbiAgICAvLyBhbmQgdGhlcmVmb3JlIGEgYnJva2VuIHN5bWxpbmsgd291bGQgYmUgY3JlYXRlZC5cbiAgICBpZiAoc3RhdC5pc1NyY1N1YmRpcihyZXNvbHZlZERlc3QsIHJlc29sdmVkU3JjKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlICcke3Jlc29sdmVkRGVzdH0nIHdpdGggJyR7cmVzb2x2ZWRTcmN9Jy5gKVxuICAgIH1cbiAgfVxuXG4gIC8vIGNvcHkgdGhlIGxpbmtcbiAgYXdhaXQgZnMudW5saW5rKGRlc3QpXG4gIHJldHVybiBmcy5zeW1saW5rKHJlc29sdmVkU3JjLCBkZXN0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgbWtkaXJzU3luYyA9IHJlcXVpcmUoJy4uL21rZGlycycpLm1rZGlyc1N5bmNcbmNvbnN0IHV0aW1lc01pbGxpc1N5bmMgPSByZXF1aXJlKCcuLi91dGlsL3V0aW1lcycpLnV0aW1lc01pbGxpc1N5bmNcbmNvbnN0IHN0YXQgPSByZXF1aXJlKCcuLi91dGlsL3N0YXQnKVxuXG5mdW5jdGlvbiBjb3B5U3luYyAoc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdHMgPSB7IGZpbHRlcjogb3B0cyB9XG4gIH1cblxuICBvcHRzID0gb3B0cyB8fCB7fVxuICBvcHRzLmNsb2JiZXIgPSAnY2xvYmJlcicgaW4gb3B0cyA/ICEhb3B0cy5jbG9iYmVyIDogdHJ1ZSAvLyBkZWZhdWx0IHRvIHRydWUgZm9yIG5vd1xuICBvcHRzLm92ZXJ3cml0ZSA9ICdvdmVyd3JpdGUnIGluIG9wdHMgPyAhIW9wdHMub3ZlcndyaXRlIDogb3B0cy5jbG9iYmVyIC8vIG92ZXJ3cml0ZSBmYWxscyBiYWNrIHRvIGNsb2JiZXJcblxuICAvLyBXYXJuIGFib3V0IHVzaW5nIHByZXNlcnZlVGltZXN0YW1wcyBvbiAzMi1iaXQgbm9kZVxuICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMgJiYgcHJvY2Vzcy5hcmNoID09PSAnaWEzMicpIHtcbiAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKFxuICAgICAgJ1VzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcXG5cXG4nICtcbiAgICAgICdcXHRzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjknLFxuICAgICAgJ1dhcm5pbmcnLCAnZnMtZXh0cmEtV0FSTjAwMDInXG4gICAgKVxuICB9XG5cbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gc3RhdC5jaGVja1BhdGhzU3luYyhzcmMsIGRlc3QsICdjb3B5Jywgb3B0cylcbiAgc3RhdC5jaGVja1BhcmVudFBhdGhzU3luYyhzcmMsIHNyY1N0YXQsIGRlc3QsICdjb3B5JylcbiAgaWYgKG9wdHMuZmlsdGVyICYmICFvcHRzLmZpbHRlcihzcmMsIGRlc3QpKSByZXR1cm5cbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGguZGlybmFtZShkZXN0KVxuICBpZiAoIWZzLmV4aXN0c1N5bmMoZGVzdFBhcmVudCkpIG1rZGlyc1N5bmMoZGVzdFBhcmVudClcbiAgcmV0dXJuIGdldFN0YXRzKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIGdldFN0YXRzIChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGNvbnN0IHN0YXRTeW5jID0gb3B0cy5kZXJlZmVyZW5jZSA/IGZzLnN0YXRTeW5jIDogZnMubHN0YXRTeW5jXG4gIGNvbnN0IHNyY1N0YXQgPSBzdGF0U3luYyhzcmMpXG5cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIG9uRGlyKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIGVsc2UgaWYgKHNyY1N0YXQuaXNGaWxlKCkgfHxcbiAgICAgICAgICAgc3JjU3RhdC5pc0NoYXJhY3RlckRldmljZSgpIHx8XG4gICAgICAgICAgIHNyY1N0YXQuaXNCbG9ja0RldmljZSgpKSByZXR1cm4gb25GaWxlKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIGVsc2UgaWYgKHNyY1N0YXQuaXNTeW1ib2xpY0xpbmsoKSkgcmV0dXJuIG9uTGluayhkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICBlbHNlIGlmIChzcmNTdGF0LmlzU29ja2V0KCkpIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBzb2NrZXQgZmlsZTogJHtzcmN9YClcbiAgZWxzZSBpZiAoc3JjU3RhdC5pc0ZJRk8oKSkgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29weSBhIEZJRk8gcGlwZTogJHtzcmN9YClcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZpbGU6ICR7c3JjfWApXG59XG5cbmZ1bmN0aW9uIG9uRmlsZSAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAoIWRlc3RTdGF0KSByZXR1cm4gY29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICByZXR1cm4gbWF5Q29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxufVxuXG5mdW5jdGlvbiBtYXlDb3B5RmlsZSAoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmIChvcHRzLm92ZXJ3cml0ZSkge1xuICAgIGZzLnVubGlua1N5bmMoZGVzdClcbiAgICByZXR1cm4gY29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICB9IGVsc2UgaWYgKG9wdHMuZXJyb3JPbkV4aXN0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAnJHtkZXN0fScgYWxyZWFkeSBleGlzdHNgKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvcHlGaWxlIChzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgZnMuY29weUZpbGVTeW5jKHNyYywgZGVzdClcbiAgaWYgKG9wdHMucHJlc2VydmVUaW1lc3RhbXBzKSBoYW5kbGVUaW1lc3RhbXBzKHNyY1N0YXQubW9kZSwgc3JjLCBkZXN0KVxuICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjU3RhdC5tb2RlKVxufVxuXG5mdW5jdGlvbiBoYW5kbGVUaW1lc3RhbXBzIChzcmNNb2RlLCBzcmMsIGRlc3QpIHtcbiAgLy8gTWFrZSBzdXJlIHRoZSBmaWxlIGlzIHdyaXRhYmxlIGJlZm9yZSBzZXR0aW5nIHRoZSB0aW1lc3RhbXBcbiAgLy8gb3RoZXJ3aXNlIG9wZW4gZmFpbHMgd2l0aCBFUEVSTSB3aGVuIGludm9rZWQgd2l0aCAncisnXG4gIC8vICh0aHJvdWdoIHV0aW1lcyBjYWxsKVxuICBpZiAoZmlsZUlzTm90V3JpdGFibGUoc3JjTW9kZSkpIG1ha2VGaWxlV3JpdGFibGUoZGVzdCwgc3JjTW9kZSlcbiAgcmV0dXJuIHNldERlc3RUaW1lc3RhbXBzKHNyYywgZGVzdClcbn1cblxuZnVuY3Rpb24gZmlsZUlzTm90V3JpdGFibGUgKHNyY01vZGUpIHtcbiAgcmV0dXJuIChzcmNNb2RlICYgMG8yMDApID09PSAwXG59XG5cbmZ1bmN0aW9uIG1ha2VGaWxlV3JpdGFibGUgKGRlc3QsIHNyY01vZGUpIHtcbiAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY01vZGUgfCAwbzIwMClcbn1cblxuZnVuY3Rpb24gc2V0RGVzdE1vZGUgKGRlc3QsIHNyY01vZGUpIHtcbiAgcmV0dXJuIGZzLmNobW9kU3luYyhkZXN0LCBzcmNNb2RlKVxufVxuXG5mdW5jdGlvbiBzZXREZXN0VGltZXN0YW1wcyAoc3JjLCBkZXN0KSB7XG4gIC8vIFRoZSBpbml0aWFsIHNyY1N0YXQuYXRpbWUgY2Fubm90IGJlIHRydXN0ZWRcbiAgLy8gYmVjYXVzZSBpdCBpcyBtb2RpZmllZCBieSB0aGUgcmVhZCgyKSBzeXN0ZW0gY2FsbFxuICAvLyAoU2VlIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvZnMuaHRtbCNmc19zdGF0X3RpbWVfdmFsdWVzKVxuICBjb25zdCB1cGRhdGVkU3JjU3RhdCA9IGZzLnN0YXRTeW5jKHNyYylcbiAgcmV0dXJuIHV0aW1lc01pbGxpc1N5bmMoZGVzdCwgdXBkYXRlZFNyY1N0YXQuYXRpbWUsIHVwZGF0ZWRTcmNTdGF0Lm10aW1lKVxufVxuXG5mdW5jdGlvbiBvbkRpciAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAoIWRlc3RTdGF0KSByZXR1cm4gbWtEaXJBbmRDb3B5KHNyY1N0YXQubW9kZSwgc3JjLCBkZXN0LCBvcHRzKVxuICByZXR1cm4gY29weURpcihzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIG1rRGlyQW5kQ29weSAoc3JjTW9kZSwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGZzLm1rZGlyU3luYyhkZXN0KVxuICBjb3B5RGlyKHNyYywgZGVzdCwgb3B0cylcbiAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY01vZGUpXG59XG5cbmZ1bmN0aW9uIGNvcHlEaXIgKHNyYywgZGVzdCwgb3B0cykge1xuICBjb25zdCBkaXIgPSBmcy5vcGVuZGlyU3luYyhzcmMpXG5cbiAgdHJ5IHtcbiAgICBsZXQgZGlyZW50XG5cbiAgICB3aGlsZSAoKGRpcmVudCA9IGRpci5yZWFkU3luYygpKSAhPT0gbnVsbCkge1xuICAgICAgY29weURpckl0ZW0oZGlyZW50Lm5hbWUsIHNyYywgZGVzdCwgb3B0cylcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgZGlyLmNsb3NlU3luYygpXG4gIH1cbn1cblxuZnVuY3Rpb24gY29weURpckl0ZW0gKGl0ZW0sIHNyYywgZGVzdCwgb3B0cykge1xuICBjb25zdCBzcmNJdGVtID0gcGF0aC5qb2luKHNyYywgaXRlbSlcbiAgY29uc3QgZGVzdEl0ZW0gPSBwYXRoLmpvaW4oZGVzdCwgaXRlbSlcbiAgaWYgKG9wdHMuZmlsdGVyICYmICFvcHRzLmZpbHRlcihzcmNJdGVtLCBkZXN0SXRlbSkpIHJldHVyblxuICBjb25zdCB7IGRlc3RTdGF0IH0gPSBzdGF0LmNoZWNrUGF0aHNTeW5jKHNyY0l0ZW0sIGRlc3RJdGVtLCAnY29weScsIG9wdHMpXG4gIHJldHVybiBnZXRTdGF0cyhkZXN0U3RhdCwgc3JjSXRlbSwgZGVzdEl0ZW0sIG9wdHMpXG59XG5cbmZ1bmN0aW9uIG9uTGluayAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBsZXQgcmVzb2x2ZWRTcmMgPSBmcy5yZWFkbGlua1N5bmMoc3JjKVxuICBpZiAob3B0cy5kZXJlZmVyZW5jZSkge1xuICAgIHJlc29sdmVkU3JjID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHJlc29sdmVkU3JjKVxuICB9XG5cbiAgaWYgKCFkZXN0U3RhdCkge1xuICAgIHJldHVybiBmcy5zeW1saW5rU3luYyhyZXNvbHZlZFNyYywgZGVzdClcbiAgfSBlbHNlIHtcbiAgICBsZXQgcmVzb2x2ZWREZXN0XG4gICAgdHJ5IHtcbiAgICAgIHJlc29sdmVkRGVzdCA9IGZzLnJlYWRsaW5rU3luYyhkZXN0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gZGVzdCBleGlzdHMgYW5kIGlzIGEgcmVndWxhciBmaWxlIG9yIGRpcmVjdG9yeSxcbiAgICAgIC8vIFdpbmRvd3MgbWF5IHRocm93IFVOS05PV04gZXJyb3IuIElmIGRlc3QgYWxyZWFkeSBleGlzdHMsXG4gICAgICAvLyBmcyB0aHJvd3MgZXJyb3IgYW55d2F5LCBzbyBubyBuZWVkIHRvIGd1YXJkIGFnYWluc3QgaXQgaGVyZS5cbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VJTlZBTCcgfHwgZXJyLmNvZGUgPT09ICdVTktOT1dOJykgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHJlc29sdmVkU3JjLCBkZXN0KVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGlmIChvcHRzLmRlcmVmZXJlbmNlKSB7XG4gICAgICByZXNvbHZlZERlc3QgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVzb2x2ZWREZXN0KVxuICAgIH1cbiAgICAvLyBJZiBib3RoIHN5bWxpbmtzIHJlc29sdmUgdG8gdGhlIHNhbWUgdGFyZ2V0LCB0aGV5IGFyZSBzdGlsbCBkaXN0aW5jdCBzeW1saW5rc1xuICAgIC8vIHRoYXQgY2FuIGJlIGNvcGllZC9vdmVyd3JpdHRlbi4gT25seSBjaGVjayBzdWJkaXJlY3RvcnkgY29uc3RyYWludHMgd2hlblxuICAgIC8vIHRoZSByZXNvbHZlZCBwYXRocyBhcmUgZGlmZmVyZW50LlxuICAgIGlmIChyZXNvbHZlZFNyYyAhPT0gcmVzb2x2ZWREZXN0KSB7XG4gICAgICBpZiAoc3RhdC5pc1NyY1N1YmRpcihyZXNvbHZlZFNyYywgcmVzb2x2ZWREZXN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke3Jlc29sdmVkU3JjfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtyZXNvbHZlZERlc3R9Jy5gKVxuICAgICAgfVxuXG4gICAgICAvLyBwcmV2ZW50IGNvcHkgaWYgc3JjIGlzIGEgc3ViZGlyIG9mIGRlc3Qgc2luY2UgdW5saW5raW5nXG4gICAgICAvLyBkZXN0IGluIHRoaXMgY2FzZSB3b3VsZCByZXN1bHQgaW4gcmVtb3Zpbmcgc3JjIGNvbnRlbnRzXG4gICAgICAvLyBhbmQgdGhlcmVmb3JlIGEgYnJva2VuIHN5bWxpbmsgd291bGQgYmUgY3JlYXRlZC5cbiAgICAgIGlmIChzdGF0LmlzU3JjU3ViZGlyKHJlc29sdmVkRGVzdCwgcmVzb2x2ZWRTcmMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtyZXNvbHZlZERlc3R9JyB3aXRoICcke3Jlc29sdmVkU3JjfScuYClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHlMaW5rKHJlc29sdmVkU3JjLCBkZXN0KVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvcHlMaW5rIChyZXNvbHZlZFNyYywgZGVzdCkge1xuICBmcy51bmxpbmtTeW5jKGRlc3QpXG4gIHJldHVybiBmcy5zeW1saW5rU3luYyhyZXNvbHZlZFNyYywgZGVzdClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3luY1xuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29weTogdShyZXF1aXJlKCcuL2NvcHknKSksXG4gIGNvcHlTeW5jOiByZXF1aXJlKCcuL2NvcHktc3luYycpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcblxuZnVuY3Rpb24gcmVtb3ZlIChwYXRoLCBjYWxsYmFjaykge1xuICBmcy5ybShwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSwgY2FsbGJhY2spXG59XG5cbmZ1bmN0aW9uIHJlbW92ZVN5bmMgKHBhdGgpIHtcbiAgZnMucm1TeW5jKHBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcmVtb3ZlOiB1KHJlbW92ZSksXG4gIHJlbW92ZVN5bmNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBta2RpciA9IHJlcXVpcmUoJy4uL21rZGlycycpXG5jb25zdCByZW1vdmUgPSByZXF1aXJlKCcuLi9yZW1vdmUnKVxuXG5jb25zdCBlbXB0eURpciA9IHUoYXN5bmMgZnVuY3Rpb24gZW1wdHlEaXIgKGRpcikge1xuICBsZXQgaXRlbXNcbiAgdHJ5IHtcbiAgICBpdGVtcyA9IGF3YWl0IGZzLnJlYWRkaXIoZGlyKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbWtkaXIubWtkaXJzKGRpcilcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLmFsbChpdGVtcy5tYXAoaXRlbSA9PiByZW1vdmUucmVtb3ZlKHBhdGguam9pbihkaXIsIGl0ZW0pKSkpXG59KVxuXG5mdW5jdGlvbiBlbXB0eURpclN5bmMgKGRpcikge1xuICBsZXQgaXRlbXNcbiAgdHJ5IHtcbiAgICBpdGVtcyA9IGZzLnJlYWRkaXJTeW5jKGRpcilcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuICB9XG5cbiAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICBpdGVtID0gcGF0aC5qb2luKGRpciwgaXRlbSlcbiAgICByZW1vdmUucmVtb3ZlU3luYyhpdGVtKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW1wdHlEaXJTeW5jLFxuICBlbXB0eWRpclN5bmM6IGVtcHR5RGlyU3luYyxcbiAgZW1wdHlEaXIsXG4gIGVtcHR5ZGlyOiBlbXB0eURpclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlRmlsZSAoZmlsZSkge1xuICBsZXQgc3RhdHNcbiAgdHJ5IHtcbiAgICBzdGF0cyA9IGF3YWl0IGZzLnN0YXQoZmlsZSlcbiAgfSBjYXRjaCB7IH1cbiAgaWYgKHN0YXRzICYmIHN0YXRzLmlzRmlsZSgpKSByZXR1cm5cblxuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSlcblxuICBsZXQgZGlyU3RhdHMgPSBudWxsXG4gIHRyeSB7XG4gICAgZGlyU3RhdHMgPSBhd2FpdCBmcy5zdGF0KGRpcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gaWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBtYWtlIGl0XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgYXdhaXQgbWtkaXIubWtkaXJzKGRpcilcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlLCAnJylcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cblxuICBpZiAoZGlyU3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlLCAnJylcbiAgfSBlbHNlIHtcbiAgICAvLyBwYXJlbnQgaXMgbm90IGEgZGlyZWN0b3J5XG4gICAgLy8gVGhpcyBpcyBqdXN0IHRvIGNhdXNlIGFuIGludGVybmFsIEVOT1RESVIgZXJyb3IgdG8gYmUgdGhyb3duXG4gICAgYXdhaXQgZnMucmVhZGRpcihkaXIpXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRmlsZVN5bmMgKGZpbGUpIHtcbiAgbGV0IHN0YXRzXG4gIHRyeSB7XG4gICAgc3RhdHMgPSBmcy5zdGF0U3luYyhmaWxlKVxuICB9IGNhdGNoIHsgfVxuICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNGaWxlKCkpIHJldHVyblxuXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuICB0cnkge1xuICAgIGlmICghZnMuc3RhdFN5bmMoZGlyKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAvLyBwYXJlbnQgaXMgbm90IGEgZGlyZWN0b3J5XG4gICAgICAvLyBUaGlzIGlzIGp1c3QgdG8gY2F1c2UgYW4gaW50ZXJuYWwgRU5PVERJUiBlcnJvciB0byBiZSB0aHJvd25cbiAgICAgIGZzLnJlYWRkaXJTeW5jKGRpcilcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIElmIHRoZSBzdGF0IGNhbGwgYWJvdmUgZmFpbGVkIGJlY2F1c2UgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgaXRcbiAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnRU5PRU5UJykgbWtkaXIubWtkaXJzU3luYyhkaXIpXG4gICAgZWxzZSB0aHJvdyBlcnJcbiAgfVxuXG4gIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgJycpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVGaWxlOiB1KGNyZWF0ZUZpbGUpLFxuICBjcmVhdGVGaWxlU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHsgcGF0aEV4aXN0cyB9ID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKVxuY29uc3QgeyBhcmVJZGVudGljYWwgfSA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUxpbmsgKHNyY3BhdGgsIGRzdHBhdGgpIHtcbiAgbGV0IGRzdFN0YXRcbiAgdHJ5IHtcbiAgICBkc3RTdGF0ID0gYXdhaXQgZnMubHN0YXQoZHN0cGF0aCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgfSBjYXRjaCB7XG4gICAgLy8gaWdub3JlIGVycm9yXG4gIH1cblxuICBsZXQgc3JjU3RhdFxuICB0cnkge1xuICAgIHNyY1N0YXQgPSBhd2FpdCBmcy5sc3RhdChzcmNwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZUxpbmsnKVxuICAgIHRocm93IGVyclxuICB9XG5cbiAgaWYgKGRzdFN0YXQgJiYgYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRzdFN0YXQpKSByZXR1cm5cblxuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcblxuICBjb25zdCBkaXJFeGlzdHMgPSBhd2FpdCBwYXRoRXhpc3RzKGRpcilcblxuICBpZiAoIWRpckV4aXN0cykge1xuICAgIGF3YWl0IG1rZGlyLm1rZGlycyhkaXIpXG4gIH1cblxuICBhd2FpdCBmcy5saW5rKHNyY3BhdGgsIGRzdHBhdGgpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpbmtTeW5jIChzcmNwYXRoLCBkc3RwYXRoKSB7XG4gIGxldCBkc3RTdGF0XG4gIHRyeSB7XG4gICAgZHN0U3RhdCA9IGZzLmxzdGF0U3luYyhkc3RwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICB9IGNhdGNoIHt9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzcmNTdGF0ID0gZnMubHN0YXRTeW5jKHNyY3BhdGgsIHsgYmlnaW50OiB0cnVlIH0pXG4gICAgaWYgKGRzdFN0YXQgJiYgYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRzdFN0YXQpKSByZXR1cm5cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyLm1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKCdsc3RhdCcsICdlbnN1cmVMaW5rJylcbiAgICB0aHJvdyBlcnJcbiAgfVxuXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICBjb25zdCBkaXJFeGlzdHMgPSBmcy5leGlzdHNTeW5jKGRpcilcbiAgaWYgKGRpckV4aXN0cykgcmV0dXJuIGZzLmxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgpXG4gIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuXG4gIHJldHVybiBmcy5saW5rU3luYyhzcmNwYXRoLCBkc3RwYXRoKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY3JlYXRlTGluazogdShjcmVhdGVMaW5rKSxcbiAgY3JlYXRlTGlua1N5bmNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGZzID0gcmVxdWlyZSgnLi4vZnMnKVxuY29uc3QgeyBwYXRoRXhpc3RzIH0gPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0d28gdHlwZXMgb2YgcGF0aHMsIG9uZSByZWxhdGl2ZSB0byBzeW1saW5rLCBhbmQgb25lXG4gKiByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gQ2hlY2tzIGlmIHBhdGggaXMgYWJzb2x1dGUgb3JcbiAqIHJlbGF0aXZlLiBJZiB0aGUgcGF0aCBpcyByZWxhdGl2ZSwgdGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIHBhdGggaXNcbiAqIHJlbGF0aXZlIHRvIHN5bWxpbmsgb3IgcmVsYXRpdmUgdG8gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gVGhpcyBpcyBhblxuICogaW5pdGlhdGl2ZSB0byBmaW5kIGEgc21hcnRlciBgc3JjcGF0aGAgdG8gc3VwcGx5IHdoZW4gYnVpbGRpbmcgc3ltbGlua3MuXG4gKiBUaGlzIGFsbG93cyB5b3UgdG8gZGV0ZXJtaW5lIHdoaWNoIHBhdGggdG8gdXNlIG91dCBvZiBvbmUgb2YgdGhyZWUgcG9zc2libGVcbiAqIHR5cGVzIG9mIHNvdXJjZSBwYXRocy4gVGhlIGZpcnN0IGlzIGFuIGFic29sdXRlIHBhdGguIFRoaXMgaXMgZGV0ZWN0ZWQgYnlcbiAqIGBwYXRoLmlzQWJzb2x1dGUoKWAuIFdoZW4gYW4gYWJzb2x1dGUgcGF0aCBpcyBwcm92aWRlZCwgaXQgaXMgY2hlY2tlZCB0b1xuICogc2VlIGlmIGl0IGV4aXN0cy4gSWYgaXQgZG9lcyBpdCdzIHVzZWQsIGlmIG5vdCBhbiBlcnJvciBpcyByZXR1cm5lZFxuICogKGNhbGxiYWNrKS8gdGhyb3duIChzeW5jKS4gVGhlIG90aGVyIHR3byBvcHRpb25zIGZvciBgc3JjcGF0aGAgYXJlIGFcbiAqIHJlbGF0aXZlIHVybC4gQnkgZGVmYXVsdCBOb2RlJ3MgYGZzLnN5bWxpbmtgIHdvcmtzIGJ5IGNyZWF0aW5nIGEgc3ltbGlua1xuICogdXNpbmcgYGRzdHBhdGhgIGFuZCBleHBlY3RzIHRoZSBgc3JjcGF0aGAgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIG5ld2x5XG4gKiBjcmVhdGVkIHN5bWxpbmsuIElmIHlvdSBwcm92aWRlIGEgYHNyY3BhdGhgIHRoYXQgZG9lcyBub3QgZXhpc3Qgb24gdGhlIGZpbGVcbiAqIHN5c3RlbSBpdCByZXN1bHRzIGluIGEgYnJva2VuIHN5bWxpbmsuIFRvIG1pbmltaXplIHRoaXMsIHRoZSBmdW5jdGlvblxuICogY2hlY2tzIHRvIHNlZSBpZiB0aGUgJ3JlbGF0aXZlIHRvIHN5bWxpbmsnIHNvdXJjZSBmaWxlIGV4aXN0cywgYW5kIGlmIGl0XG4gKiBkb2VzIGl0IHdpbGwgdXNlIGl0LiBJZiBpdCBkb2VzIG5vdCwgaXQgY2hlY2tzIGlmIHRoZXJlJ3MgYSBmaWxlIHRoYXRcbiAqIGV4aXN0cyB0aGF0IGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBpZiBkb2VzIGl0cyB1c2VkLlxuICogVGhpcyBwcmVzZXJ2ZXMgdGhlIGV4cGVjdGF0aW9ucyBvZiB0aGUgb3JpZ2luYWwgZnMuc3ltbGluayBzcGVjIGFuZCBhZGRzXG4gKiB0aGUgYWJpbGl0eSB0byBwYXNzIGluIGByZWxhdGl2ZSB0byBjdXJyZW50IHdvcmtpbmcgZGlyZWNvdHJ5YCBwYXRocy5cbiAqL1xuXG5hc3luYyBmdW5jdGlvbiBzeW1saW5rUGF0aHMgKHNyY3BhdGgsIGRzdHBhdGgpIHtcbiAgaWYgKHBhdGguaXNBYnNvbHV0ZShzcmNwYXRoKSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5sc3RhdChzcmNwYXRoKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKCdsc3RhdCcsICdlbnN1cmVTeW1saW5rJylcbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgfVxuICB9XG5cbiAgY29uc3QgZHN0ZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gIGNvbnN0IHJlbGF0aXZlVG9Ec3QgPSBwYXRoLmpvaW4oZHN0ZGlyLCBzcmNwYXRoKVxuXG4gIGNvbnN0IGV4aXN0cyA9IGF3YWl0IHBhdGhFeGlzdHMocmVsYXRpdmVUb0RzdClcbiAgaWYgKGV4aXN0cykge1xuICAgIHJldHVybiB7XG4gICAgICB0b0N3ZDogcmVsYXRpdmVUb0RzdCxcbiAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5sc3RhdChzcmNwYXRoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZVN5bWxpbmsnKVxuICAgIHRocm93IGVyclxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICB0b0RzdDogcGF0aC5yZWxhdGl2ZShkc3RkaXIsIHNyY3BhdGgpXG4gIH1cbn1cblxuZnVuY3Rpb24gc3ltbGlua1BhdGhzU3luYyAoc3JjcGF0aCwgZHN0cGF0aCkge1xuICBpZiAocGF0aC5pc0Fic29sdXRlKHNyY3BhdGgpKSB7XG4gICAgY29uc3QgZXhpc3RzID0gZnMuZXhpc3RzU3luYyhzcmNwYXRoKVxuICAgIGlmICghZXhpc3RzKSB0aHJvdyBuZXcgRXJyb3IoJ2Fic29sdXRlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QnKVxuICAgIHJldHVybiB7XG4gICAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgfVxuICB9XG5cbiAgY29uc3QgZHN0ZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gIGNvbnN0IHJlbGF0aXZlVG9Ec3QgPSBwYXRoLmpvaW4oZHN0ZGlyLCBzcmNwYXRoKVxuICBjb25zdCBleGlzdHMgPSBmcy5leGlzdHNTeW5jKHJlbGF0aXZlVG9Ec3QpXG4gIGlmIChleGlzdHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9Dd2Q6IHJlbGF0aXZlVG9Ec3QsXG4gICAgICB0b0RzdDogc3JjcGF0aFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNyY0V4aXN0cyA9IGZzLmV4aXN0c1N5bmMoc3JjcGF0aClcbiAgaWYgKCFzcmNFeGlzdHMpIHRocm93IG5ldyBFcnJvcigncmVsYXRpdmUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCcpXG4gIHJldHVybiB7XG4gICAgdG9Dd2Q6IHNyY3BhdGgsXG4gICAgdG9Ec3Q6IHBhdGgucmVsYXRpdmUoZHN0ZGlyLCBzcmNwYXRoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzeW1saW5rUGF0aHM6IHUoc3ltbGlua1BhdGhzKSxcbiAgc3ltbGlua1BhdGhzU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcblxuYXN5bmMgZnVuY3Rpb24gc3ltbGlua1R5cGUgKHNyY3BhdGgsIHR5cGUpIHtcbiAgaWYgKHR5cGUpIHJldHVybiB0eXBlXG5cbiAgbGV0IHN0YXRzXG4gIHRyeSB7XG4gICAgc3RhdHMgPSBhd2FpdCBmcy5sc3RhdChzcmNwYXRoKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJ2ZpbGUnXG4gIH1cblxuICByZXR1cm4gKHN0YXRzICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpID8gJ2RpcicgOiAnZmlsZSdcbn1cblxuZnVuY3Rpb24gc3ltbGlua1R5cGVTeW5jIChzcmNwYXRoLCB0eXBlKSB7XG4gIGlmICh0eXBlKSByZXR1cm4gdHlwZVxuXG4gIGxldCBzdGF0c1xuICB0cnkge1xuICAgIHN0YXRzID0gZnMubHN0YXRTeW5jKHNyY3BhdGgpXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAnZmlsZSdcbiAgfVxuICByZXR1cm4gKHN0YXRzICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpID8gJ2RpcicgOiAnZmlsZSdcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN5bWxpbmtUeXBlOiB1KHN5bWxpbmtUeXBlKSxcbiAgc3ltbGlua1R5cGVTeW5jXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGZzID0gcmVxdWlyZSgnLi4vZnMnKVxuXG5jb25zdCB7IG1rZGlycywgbWtkaXJzU3luYyB9ID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcblxuY29uc3QgeyBzeW1saW5rUGF0aHMsIHN5bWxpbmtQYXRoc1N5bmMgfSA9IHJlcXVpcmUoJy4vc3ltbGluay1wYXRocycpXG5jb25zdCB7IHN5bWxpbmtUeXBlLCBzeW1saW5rVHlwZVN5bmMgfSA9IHJlcXVpcmUoJy4vc3ltbGluay10eXBlJylcblxuY29uc3QgeyBwYXRoRXhpc3RzIH0gPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpXG5cbmNvbnN0IHsgYXJlSWRlbnRpY2FsIH0gPSByZXF1aXJlKCcuLi91dGlsL3N0YXQnKVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVTeW1saW5rIChzcmNwYXRoLCBkc3RwYXRoLCB0eXBlKSB7XG4gIGxldCBzdGF0c1xuICB0cnkge1xuICAgIHN0YXRzID0gYXdhaXQgZnMubHN0YXQoZHN0cGF0aClcbiAgfSBjYXRjaCB7IH1cblxuICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgIC8vIFdoZW4gc3JjcGF0aCBpcyByZWxhdGl2ZSwgcmVzb2x2ZSBpdCByZWxhdGl2ZSB0byBkc3RwYXRoJ3MgZGlyZWN0b3J5XG4gICAgLy8gKHN0YW5kYXJkIHN5bWxpbmsgYmVoYXZpb3IpIG9yIGZhbGwgYmFjayB0byBjd2QgaWYgdGhhdCBkb2Vzbid0IGV4aXN0XG4gICAgbGV0IHNyY1N0YXRcbiAgICBpZiAocGF0aC5pc0Fic29sdXRlKHNyY3BhdGgpKSB7XG4gICAgICBzcmNTdGF0ID0gYXdhaXQgZnMuc3RhdChzcmNwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkc3RkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgICAgIGNvbnN0IHJlbGF0aXZlVG9Ec3QgPSBwYXRoLmpvaW4oZHN0ZGlyLCBzcmNwYXRoKVxuICAgICAgdHJ5IHtcbiAgICAgICAgc3JjU3RhdCA9IGF3YWl0IGZzLnN0YXQocmVsYXRpdmVUb0RzdCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBzcmNTdGF0ID0gYXdhaXQgZnMuc3RhdChzcmNwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRzdFN0YXQgPSBhd2FpdCBmcy5zdGF0KGRzdHBhdGgsIHsgYmlnaW50OiB0cnVlIH0pXG4gICAgaWYgKGFyZUlkZW50aWNhbChzcmNTdGF0LCBkc3RTdGF0KSkgcmV0dXJuXG4gIH1cblxuICBjb25zdCByZWxhdGl2ZSA9IGF3YWl0IHN5bWxpbmtQYXRocyhzcmNwYXRoLCBkc3RwYXRoKVxuICBzcmNwYXRoID0gcmVsYXRpdmUudG9Ec3RcbiAgY29uc3QgdG9UeXBlID0gYXdhaXQgc3ltbGlua1R5cGUocmVsYXRpdmUudG9Dd2QsIHR5cGUpXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuXG4gIGlmICghKGF3YWl0IHBhdGhFeGlzdHMoZGlyKSkpIHtcbiAgICBhd2FpdCBta2RpcnMoZGlyKVxuICB9XG5cbiAgcmV0dXJuIGZzLnN5bWxpbmsoc3JjcGF0aCwgZHN0cGF0aCwgdG9UeXBlKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTeW1saW5rU3luYyAoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSkge1xuICBsZXQgc3RhdHNcbiAgdHJ5IHtcbiAgICBzdGF0cyA9IGZzLmxzdGF0U3luYyhkc3RwYXRoKVxuICB9IGNhdGNoIHsgfVxuICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgIC8vIFdoZW4gc3JjcGF0aCBpcyByZWxhdGl2ZSwgcmVzb2x2ZSBpdCByZWxhdGl2ZSB0byBkc3RwYXRoJ3MgZGlyZWN0b3J5XG4gICAgLy8gKHN0YW5kYXJkIHN5bWxpbmsgYmVoYXZpb3IpIG9yIGZhbGwgYmFjayB0byBjd2QgaWYgdGhhdCBkb2Vzbid0IGV4aXN0XG4gICAgbGV0IHNyY1N0YXRcbiAgICBpZiAocGF0aC5pc0Fic29sdXRlKHNyY3BhdGgpKSB7XG4gICAgICBzcmNTdGF0ID0gZnMuc3RhdFN5bmMoc3JjcGF0aCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZHN0ZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gICAgICBjb25zdCByZWxhdGl2ZVRvRHN0ID0gcGF0aC5qb2luKGRzdGRpciwgc3JjcGF0aClcbiAgICAgIHRyeSB7XG4gICAgICAgIHNyY1N0YXQgPSBmcy5zdGF0U3luYyhyZWxhdGl2ZVRvRHN0LCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHNyY1N0YXQgPSBmcy5zdGF0U3luYyhzcmNwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRzdFN0YXQgPSBmcy5zdGF0U3luYyhkc3RwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgIGlmIChhcmVJZGVudGljYWwoc3JjU3RhdCwgZHN0U3RhdCkpIHJldHVyblxuICB9XG5cbiAgY29uc3QgcmVsYXRpdmUgPSBzeW1saW5rUGF0aHNTeW5jKHNyY3BhdGgsIGRzdHBhdGgpXG4gIHNyY3BhdGggPSByZWxhdGl2ZS50b0RzdFxuICB0eXBlID0gc3ltbGlua1R5cGVTeW5jKHJlbGF0aXZlLnRvQ3dkLCB0eXBlKVxuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgY29uc3QgZXhpc3RzID0gZnMuZXhpc3RzU3luYyhkaXIpXG4gIGlmIChleGlzdHMpIHJldHVybiBmcy5zeW1saW5rU3luYyhzcmNwYXRoLCBkc3RwYXRoLCB0eXBlKVxuICBta2RpcnNTeW5jKGRpcilcbiAgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVTeW1saW5rOiB1KGNyZWF0ZVN5bWxpbmspLFxuICBjcmVhdGVTeW1saW5rU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBjcmVhdGVGaWxlLCBjcmVhdGVGaWxlU3luYyB9ID0gcmVxdWlyZSgnLi9maWxlJylcbmNvbnN0IHsgY3JlYXRlTGluaywgY3JlYXRlTGlua1N5bmMgfSA9IHJlcXVpcmUoJy4vbGluaycpXG5jb25zdCB7IGNyZWF0ZVN5bWxpbmssIGNyZWF0ZVN5bWxpbmtTeW5jIH0gPSByZXF1aXJlKCcuL3N5bWxpbmsnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gZmlsZVxuICBjcmVhdGVGaWxlLFxuICBjcmVhdGVGaWxlU3luYyxcbiAgZW5zdXJlRmlsZTogY3JlYXRlRmlsZSxcbiAgZW5zdXJlRmlsZVN5bmM6IGNyZWF0ZUZpbGVTeW5jLFxuICAvLyBsaW5rXG4gIGNyZWF0ZUxpbmssXG4gIGNyZWF0ZUxpbmtTeW5jLFxuICBlbnN1cmVMaW5rOiBjcmVhdGVMaW5rLFxuICBlbnN1cmVMaW5rU3luYzogY3JlYXRlTGlua1N5bmMsXG4gIC8vIHN5bWxpbmtcbiAgY3JlYXRlU3ltbGluayxcbiAgY3JlYXRlU3ltbGlua1N5bmMsXG4gIGVuc3VyZVN5bWxpbms6IGNyZWF0ZVN5bWxpbmssXG4gIGVuc3VyZVN5bWxpbmtTeW5jOiBjcmVhdGVTeW1saW5rU3luY1xufVxuIiwKICAgICJmdW5jdGlvbiBzdHJpbmdpZnkgKG9iaiwgeyBFT0wgPSAnXFxuJywgZmluYWxFT0wgPSB0cnVlLCByZXBsYWNlciA9IG51bGwsIHNwYWNlcyB9ID0ge30pIHtcbiAgY29uc3QgRU9GID0gZmluYWxFT0wgPyBFT0wgOiAnJ1xuICBjb25zdCBzdHIgPSBKU09OLnN0cmluZ2lmeShvYmosIHJlcGxhY2VyLCBzcGFjZXMpXG5cbiAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ29udmVydGluZyAke3R5cGVvZiBvYmp9IHZhbHVlIHRvIEpTT04gaXMgbm90IHN1cHBvcnRlZGApXG4gIH1cblxuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcbi9nLCBFT0wpICsgRU9GXG59XG5cbmZ1bmN0aW9uIHN0cmlwQm9tIChjb250ZW50KSB7XG4gIC8vIHdlIGRvIHRoaXMgYmVjYXVzZSBKU09OLnBhcnNlIHdvdWxkIGNvbnZlcnQgaXQgdG8gYSB1dGY4IHN0cmluZyBpZiBlbmNvZGluZyB3YXNuJ3Qgc3BlY2lmaWVkXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoY29udGVudCkpIGNvbnRlbnQgPSBjb250ZW50LnRvU3RyaW5nKCd1dGY4JylcbiAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZSgvXlxcdUZFRkYvLCAnJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IHN0cmluZ2lmeSwgc3RyaXBCb20gfVxuIiwKICAgICJsZXQgX2ZzXG50cnkge1xuICBfZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG59IGNhdGNoIChfKSB7XG4gIF9mcyA9IHJlcXVpcmUoJ2ZzJylcbn1cbmNvbnN0IHVuaXZlcnNhbGlmeSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpXG5jb25zdCB7IHN0cmluZ2lmeSwgc3RyaXBCb20gfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuXG5hc3luYyBmdW5jdGlvbiBfcmVhZEZpbGUgKGZpbGUsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHNob3VsZFRocm93ID0gJ3Rocm93cycgaW4gb3B0aW9ucyA/IG9wdGlvbnMudGhyb3dzIDogdHJ1ZVxuXG4gIGxldCBkYXRhID0gYXdhaXQgdW5pdmVyc2FsaWZ5LmZyb21DYWxsYmFjayhmcy5yZWFkRmlsZSkoZmlsZSwgb3B0aW9ucylcblxuICBkYXRhID0gc3RyaXBCb20oZGF0YSlcblxuICBsZXQgb2JqXG4gIHRyeSB7XG4gICAgb2JqID0gSlNPTi5wYXJzZShkYXRhLCBvcHRpb25zID8gb3B0aW9ucy5yZXZpdmVyIDogbnVsbClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgICBlcnIubWVzc2FnZSA9IGAke2ZpbGV9OiAke2Vyci5tZXNzYWdlfWBcbiAgICAgIHRocm93IGVyclxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuY29uc3QgcmVhZEZpbGUgPSB1bml2ZXJzYWxpZnkuZnJvbVByb21pc2UoX3JlYWRGaWxlKVxuXG5mdW5jdGlvbiByZWFkRmlsZVN5bmMgKGZpbGUsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHNob3VsZFRocm93ID0gJ3Rocm93cycgaW4gb3B0aW9ucyA/IG9wdGlvbnMudGhyb3dzIDogdHJ1ZVxuXG4gIHRyeSB7XG4gICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZSwgb3B0aW9ucylcbiAgICBjb250ZW50ID0gc3RyaXBCb20oY29udGVudClcbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50LCBvcHRpb25zLnJldml2ZXIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChzaG91bGRUaHJvdykge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBgJHtmaWxlfTogJHtlcnIubWVzc2FnZX1gXG4gICAgICB0aHJvdyBlcnJcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX3dyaXRlRmlsZSAoZmlsZSwgb2JqLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShvYmosIG9wdGlvbnMpXG5cbiAgYXdhaXQgdW5pdmVyc2FsaWZ5LmZyb21DYWxsYmFjayhmcy53cml0ZUZpbGUpKGZpbGUsIHN0ciwgb3B0aW9ucylcbn1cblxuY29uc3Qgd3JpdGVGaWxlID0gdW5pdmVyc2FsaWZ5LmZyb21Qcm9taXNlKF93cml0ZUZpbGUpXG5cbmZ1bmN0aW9uIHdyaXRlRmlsZVN5bmMgKGZpbGUsIG9iaiwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGZzID0gb3B0aW9ucy5mcyB8fCBfZnNcblxuICBjb25zdCBzdHIgPSBzdHJpbmdpZnkob2JqLCBvcHRpb25zKVxuICAvLyBub3Qgc3VyZSBpZiBmcy53cml0ZUZpbGVTeW5jIHJldHVybnMgYW55dGhpbmcsIGJ1dCBqdXN0IGluIGNhc2VcbiAgcmV0dXJuIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG4vLyBOT1RFOiBkbyBub3QgY2hhbmdlIHRoaXMgZXhwb3J0IGZvcm1hdDsgcmVxdWlyZWQgZm9yIEVTTSBjb21wYXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtanNvbmZpbGUvcHVsbC8xNjIgZm9yIGRldGFpbHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICByZWFkRmlsZSxcbiAgcmVhZEZpbGVTeW5jLFxuICB3cml0ZUZpbGUsXG4gIHdyaXRlRmlsZVN5bmNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGpzb25GaWxlID0gcmVxdWlyZSgnanNvbmZpbGUnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8ganNvbmZpbGUgZXhwb3J0c1xuICByZWFkSnNvbjoganNvbkZpbGUucmVhZEZpbGUsXG4gIHJlYWRKc29uU3luYzoganNvbkZpbGUucmVhZEZpbGVTeW5jLFxuICB3cml0ZUpzb246IGpzb25GaWxlLndyaXRlRmlsZSxcbiAgd3JpdGVKc29uU3luYzoganNvbkZpbGUud3JpdGVGaWxlU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcblxuYXN5bmMgZnVuY3Rpb24gb3V0cHV0RmlsZSAoZmlsZSwgZGF0YSwgZW5jb2RpbmcgPSAndXRmLTgnKSB7XG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuXG4gIGlmICghKGF3YWl0IHBhdGhFeGlzdHMoZGlyKSkpIHtcbiAgICBhd2FpdCBta2Rpci5ta2RpcnMoZGlyKVxuICB9XG5cbiAgcmV0dXJuIGZzLndyaXRlRmlsZShmaWxlLCBkYXRhLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gb3V0cHV0RmlsZVN5bmMgKGZpbGUsIC4uLmFyZ3MpIHtcbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG4gIGlmICghZnMuZXhpc3RzU3luYyhkaXIpKSB7XG4gICAgbWtkaXIubWtkaXJzU3luYyhkaXIpXG4gIH1cblxuICBmcy53cml0ZUZpbGVTeW5jKGZpbGUsIC4uLmFyZ3MpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBvdXRwdXRGaWxlOiB1KG91dHB1dEZpbGUpLFxuICBvdXRwdXRGaWxlU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJ2pzb25maWxlL3V0aWxzJylcbmNvbnN0IHsgb3V0cHV0RmlsZSB9ID0gcmVxdWlyZSgnLi4vb3V0cHV0LWZpbGUnKVxuXG5hc3luYyBmdW5jdGlvbiBvdXRwdXRKc29uIChmaWxlLCBkYXRhLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KGRhdGEsIG9wdGlvbnMpXG5cbiAgYXdhaXQgb3V0cHV0RmlsZShmaWxlLCBzdHIsIG9wdGlvbnMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3V0cHV0SnNvblxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJ2pzb25maWxlL3V0aWxzJylcbmNvbnN0IHsgb3V0cHV0RmlsZVN5bmMgfSA9IHJlcXVpcmUoJy4uL291dHB1dC1maWxlJylcblxuZnVuY3Rpb24gb3V0cHV0SnNvblN5bmMgKGZpbGUsIGRhdGEsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KGRhdGEsIG9wdGlvbnMpXG5cbiAgb3V0cHV0RmlsZVN5bmMoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG91dHB1dEpzb25TeW5jXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcbmNvbnN0IGpzb25GaWxlID0gcmVxdWlyZSgnLi9qc29uZmlsZScpXG5cbmpzb25GaWxlLm91dHB1dEpzb24gPSB1KHJlcXVpcmUoJy4vb3V0cHV0LWpzb24nKSlcbmpzb25GaWxlLm91dHB1dEpzb25TeW5jID0gcmVxdWlyZSgnLi9vdXRwdXQtanNvbi1zeW5jJylcbi8vIGFsaWFzZXNcbmpzb25GaWxlLm91dHB1dEpTT04gPSBqc29uRmlsZS5vdXRwdXRKc29uXG5qc29uRmlsZS5vdXRwdXRKU09OU3luYyA9IGpzb25GaWxlLm91dHB1dEpzb25TeW5jXG5qc29uRmlsZS53cml0ZUpTT04gPSBqc29uRmlsZS53cml0ZUpzb25cbmpzb25GaWxlLndyaXRlSlNPTlN5bmMgPSBqc29uRmlsZS53cml0ZUpzb25TeW5jXG5qc29uRmlsZS5yZWFkSlNPTiA9IGpzb25GaWxlLnJlYWRKc29uXG5qc29uRmlsZS5yZWFkSlNPTlN5bmMgPSBqc29uRmlsZS5yZWFkSnNvblN5bmNcblxubW9kdWxlLmV4cG9ydHMgPSBqc29uRmlsZVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCB7IGNvcHkgfSA9IHJlcXVpcmUoJy4uL2NvcHknKVxuY29uc3QgeyByZW1vdmUgfSA9IHJlcXVpcmUoJy4uL3JlbW92ZScpXG5jb25zdCB7IG1rZGlycCB9ID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHsgcGF0aEV4aXN0cyB9ID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKVxuY29uc3Qgc3RhdCA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5cbmFzeW5jIGZ1bmN0aW9uIG1vdmUgKHNyYywgZGVzdCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG92ZXJ3cml0ZSA9IG9wdHMub3ZlcndyaXRlIHx8IG9wdHMuY2xvYmJlciB8fCBmYWxzZVxuXG4gIGNvbnN0IHsgc3JjU3RhdCwgaXNDaGFuZ2luZ0Nhc2UgPSBmYWxzZSB9ID0gYXdhaXQgc3RhdC5jaGVja1BhdGhzKHNyYywgZGVzdCwgJ21vdmUnLCBvcHRzKVxuXG4gIGF3YWl0IHN0YXQuY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3QsICdtb3ZlJylcblxuICAvLyBJZiB0aGUgcGFyZW50IG9mIGRlc3QgaXMgbm90IHJvb3QsIG1ha2Ugc3VyZSBpdCBleGlzdHMgYmVmb3JlIHByb2NlZWRpbmdcbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGguZGlybmFtZShkZXN0KVxuICBjb25zdCBwYXJzZWRQYXJlbnRQYXRoID0gcGF0aC5wYXJzZShkZXN0UGFyZW50KVxuICBpZiAocGFyc2VkUGFyZW50UGF0aC5yb290ICE9PSBkZXN0UGFyZW50KSB7XG4gICAgYXdhaXQgbWtkaXJwKGRlc3RQYXJlbnQpXG4gIH1cblxuICByZXR1cm4gZG9SZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGlzQ2hhbmdpbmdDYXNlKVxufVxuXG5hc3luYyBmdW5jdGlvbiBkb1JlbmFtZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGlzQ2hhbmdpbmdDYXNlKSB7XG4gIGlmICghaXNDaGFuZ2luZ0Nhc2UpIHtcbiAgICBpZiAob3ZlcndyaXRlKSB7XG4gICAgICBhd2FpdCByZW1vdmUoZGVzdClcbiAgICB9IGVsc2UgaWYgKGF3YWl0IHBhdGhFeGlzdHMoZGVzdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGVzdCBhbHJlYWR5IGV4aXN0cy4nKVxuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVHJ5IHcvIHJlbmFtZSBmaXJzdCwgYW5kIHRyeSBjb3B5ICsgcmVtb3ZlIGlmIEVYREVWXG4gICAgYXdhaXQgZnMucmVuYW1lKHNyYywgZGVzdClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlICE9PSAnRVhERVYnKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgYXdhaXQgbW92ZUFjcm9zc0RldmljZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSlcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBtb3ZlQWNyb3NzRGV2aWNlIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSkge1xuICBjb25zdCBvcHRzID0ge1xuICAgIG92ZXJ3cml0ZSxcbiAgICBlcnJvck9uRXhpc3Q6IHRydWUsXG4gICAgcHJlc2VydmVUaW1lc3RhbXBzOiB0cnVlXG4gIH1cblxuICBhd2FpdCBjb3B5KHNyYywgZGVzdCwgb3B0cylcbiAgcmV0dXJuIHJlbW92ZShzcmMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbW92ZVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBjb3B5U3luYyA9IHJlcXVpcmUoJy4uL2NvcHknKS5jb3B5U3luY1xuY29uc3QgcmVtb3ZlU3luYyA9IHJlcXVpcmUoJy4uL3JlbW92ZScpLnJlbW92ZVN5bmNcbmNvbnN0IG1rZGlycFN5bmMgPSByZXF1aXJlKCcuLi9ta2RpcnMnKS5ta2RpcnBTeW5jXG5jb25zdCBzdGF0ID0gcmVxdWlyZSgnLi4vdXRpbC9zdGF0JylcblxuZnVuY3Rpb24gbW92ZVN5bmMgKHNyYywgZGVzdCwgb3B0cykge1xuICBvcHRzID0gb3B0cyB8fCB7fVxuICBjb25zdCBvdmVyd3JpdGUgPSBvcHRzLm92ZXJ3cml0ZSB8fCBvcHRzLmNsb2JiZXIgfHwgZmFsc2VcblxuICBjb25zdCB7IHNyY1N0YXQsIGlzQ2hhbmdpbmdDYXNlID0gZmFsc2UgfSA9IHN0YXQuY2hlY2tQYXRoc1N5bmMoc3JjLCBkZXN0LCAnbW92ZScsIG9wdHMpXG4gIHN0YXQuY2hlY2tQYXJlbnRQYXRoc1N5bmMoc3JjLCBzcmNTdGF0LCBkZXN0LCAnbW92ZScpXG4gIGlmICghaXNQYXJlbnRSb290KGRlc3QpKSBta2RpcnBTeW5jKHBhdGguZGlybmFtZShkZXN0KSlcbiAgcmV0dXJuIGRvUmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBpc0NoYW5naW5nQ2FzZSlcbn1cblxuZnVuY3Rpb24gaXNQYXJlbnRSb290IChkZXN0KSB7XG4gIGNvbnN0IHBhcmVudCA9IHBhdGguZGlybmFtZShkZXN0KVxuICBjb25zdCBwYXJzZWRQYXRoID0gcGF0aC5wYXJzZShwYXJlbnQpXG4gIHJldHVybiBwYXJzZWRQYXRoLnJvb3QgPT09IHBhcmVudFxufVxuXG5mdW5jdGlvbiBkb1JlbmFtZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGlzQ2hhbmdpbmdDYXNlKSB7XG4gIGlmIChpc0NoYW5naW5nQ2FzZSkgcmV0dXJuIHJlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSlcbiAgaWYgKG92ZXJ3cml0ZSkge1xuICAgIHJlbW92ZVN5bmMoZGVzdClcbiAgICByZXR1cm4gcmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlKVxuICB9XG4gIGlmIChmcy5leGlzdHNTeW5jKGRlc3QpKSB0aHJvdyBuZXcgRXJyb3IoJ2Rlc3QgYWxyZWFkeSBleGlzdHMuJylcbiAgcmV0dXJuIHJlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSlcbn1cblxuZnVuY3Rpb24gcmVuYW1lIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSkge1xuICB0cnkge1xuICAgIGZzLnJlbmFtZVN5bmMoc3JjLCBkZXN0KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLmNvZGUgIT09ICdFWERFVicpIHRocm93IGVyclxuICAgIHJldHVybiBtb3ZlQWNyb3NzRGV2aWNlKHNyYywgZGVzdCwgb3ZlcndyaXRlKVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdmVBY3Jvc3NEZXZpY2UgKHNyYywgZGVzdCwgb3ZlcndyaXRlKSB7XG4gIGNvbnN0IG9wdHMgPSB7XG4gICAgb3ZlcndyaXRlLFxuICAgIGVycm9yT25FeGlzdDogdHJ1ZSxcbiAgICBwcmVzZXJ2ZVRpbWVzdGFtcHM6IHRydWVcbiAgfVxuICBjb3B5U3luYyhzcmMsIGRlc3QsIG9wdHMpXG4gIHJldHVybiByZW1vdmVTeW5jKHNyYylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtb3ZlU3luY1xuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbW92ZTogdShyZXF1aXJlKCcuL21vdmUnKSksXG4gIG1vdmVTeW5jOiByZXF1aXJlKCcuL21vdmUtc3luYycpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gRXhwb3J0IHByb21pc2VpZmllZCBncmFjZWZ1bC1mczpcbiAgLi4ucmVxdWlyZSgnLi9mcycpLFxuICAvLyBFeHBvcnQgZXh0cmEgbWV0aG9kczpcbiAgLi4ucmVxdWlyZSgnLi9jb3B5JyksXG4gIC4uLnJlcXVpcmUoJy4vZW1wdHknKSxcbiAgLi4ucmVxdWlyZSgnLi9lbnN1cmUnKSxcbiAgLi4ucmVxdWlyZSgnLi9qc29uJyksXG4gIC4uLnJlcXVpcmUoJy4vbWtkaXJzJyksXG4gIC4uLnJlcXVpcmUoJy4vbW92ZScpLFxuICAuLi5yZXF1aXJlKCcuL291dHB1dC1maWxlJyksXG4gIC4uLnJlcXVpcmUoJy4vcGF0aC1leGlzdHMnKSxcbiAgLi4ucmVxdWlyZSgnLi9yZW1vdmUnKVxufVxuIiwKICAgICJpbXBvcnQgVE9NTCBmcm9tIFwiQGlhcm5hL3RvbWxcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBjd2QsIGVudiB9IGZyb20gXCJub2RlOnByb2Nlc3NcIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB0eXBlIHsgSW5jb21pbmdNZXNzYWdlLCBTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCJub2RlOmh0dHBcIjtcbmltcG9ydCB0eXBlIHsgUGx1Z2luT3B0aW9uIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgYWRhcHRlcnMgfSBmcm9tIFwiLi9hZGFwdGVycy9pbmRleC50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlVml0ZVBsdWdpbk1pbGtpbyhvcHRpb25zPzoge1xuICAgIG91dHB1dEZvcm1hdD86IFwiZXNtXCIgfCBcImNqc1wiO1xufSkge1xuICAgIGxldCBvdXREaXIgPSBcImRpc3RcIjtcblxuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IFwidml0ZS1wbHVnaW4tbWlsa2lvXCIsXG4gICAgICAgIGFzeW5jIGNvbmZpZ3VyZVNlcnZlcihzZXJ2ZXIpIHtcbiAgICAgICAgICAgIGxldCBtaWxraW9Qcm9taXNlOiBQcm9taXNlPGFueT4gfCBudWxsID0gbnVsbDtcblxuICAgICAgICAgICAgY29uc3QgZ2V0TWlsa2lvID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghbWlsa2lvUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICBtaWxraW9Qcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcCA9IGF3YWl0IHNlcnZlci5zc3JMb2FkTW9kdWxlKFwiaW5kZXgudHNcIiwgeyBmaXhTdGFja3RyYWNlOiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBhcHAuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0OiBOdW1iZXIoZW52Lk1JTEtJT19QT1JUKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wOiBCb29sZWFuKGVudi5DT09LQk9PS19CQVNFX1VSTCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hFbnY6IChrZXk6IHN0cmluZykgPT4gZW52W2tleV0gPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBtaWxraW9Qcm9taXNlO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgZW52TW9kZSA9IGVudi5DT09LQk9PS19NT0RFID8/IChlbnYuQ09PS0JPT0tfREVWRUxPUCA9PT0gXCJFTkFCTEVcIiA/IFwiZGV2ZWxvcG1lbnRcIiA6IFwicHJvZHVjdGlvblwiKTtcblxuICAgICAgICAgICAgLy8gQ2FjaGUgZm9yIHBhdGhBcnJheSB0byBhdm9pZCByZXBlYXRlZCBzcGxpdCgpIG9uIHNhbWUgcGF0aG5hbWVcbiAgICAgICAgICAgIGxldCBsYXN0UGF0aG5hbWUgPSBcIlwiO1xuICAgICAgICAgICAgbGV0IGxhc3RQYXRoQXJyYXk6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgICAgIHNlcnZlci5taWRkbGV3YXJlcy51c2UoYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWlsa2lvID0gYXdhaXQgZ2V0TWlsa2lvKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlYWQgYm9keSBjaHVua3NcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJvZHlCdWZmZXI6IEJ1ZmZlciB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYm9keUNodW5rczogQnVmZmVyW10gfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uKFwiZGF0YVwiLCAoY2h1bms6IEJ1ZmZlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHlCdWZmZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5QnVmZmVyID0gY2h1bms7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5Q2h1bmtzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlDaHVua3MgPSBbYm9keUJ1ZmZlciwgY2h1bmtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5QnVmZmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5Q2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXRob2QgPSByZXEubWV0aG9kID8/IFwiR0VUXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gYm9keUNodW5rcyA/IEJ1ZmZlci5jb25jYXQoYm9keUNodW5rcykgOiBib2R5QnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keVRleHQgPSBib2R5ID8gYm9keS50b1N0cmluZyhcInV0Zi04XCIpIDogXCJcIjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVpbGQgZnVsbCBVUkwgZm9yIHN0YW5kYXJkIFJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcVVybCA9IHJlcS51cmwgPz8gXCIvXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm90b2NvbCA9IChyZXEgYXMgYW55KS5lbmNyeXB0ZWQgPyBcImh0dHBzXCIgOiBcImh0dHBcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhvc3QgPSByZXEuaGVhZGVycy5ob3N0ID8/IFwibG9jYWxob3N0XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdWxsVXJsID0gYCR7cHJvdG9jb2x9Oi8vJHtob3N0fSR7cmVxVXJsfWA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1aWxkIHN0YW5kYXJkIEhlYWRlcnMgZnJvbSBOb2RlLmpzIGluY29taW5nIGhlYWRlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVxLmhlYWRlcnMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdmFsdWUpIGhlYWRlcnMuYXBwZW5kKGtleSwgdik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgQWJvcnRDb250cm9sbGVyIGZvciBzdHJlYW0gcmVxdWVzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU3RyZWFtID0gcmVxLmhlYWRlcnMuYWNjZXB0Py5zdGFydHNXaXRoKFwidGV4dC9ldmVudC1zdHJlYW1cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWduYWwgPSBpc1N0cmVhbSA/ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLm9uKFwiY2xvc2VcIiwgKCkgPT4geyBhYy5hYm9ydCgpOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWMuc2lnbmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkoKSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29uc3RydWN0IHN0YW5kYXJkIFJlcXVlc3Qgb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoZnVsbFVybCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IG1ldGhvZCAhPT0gXCJHRVRcIiAmJiBtZXRob2QgIT09IFwiSEVBRFwiID8gKGJvZHkgYXMgQm9keUluaXQgfCBudWxsKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXR0YWNoIHByZS1yZWFkIGRhdGEgZm9yIEZhc3QgUGF0aCBvcHRpbWl6YXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHFJbmRleCA9IHJlcVVybC5pbmRleE9mKFwiP1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhuYW1lID0gcUluZGV4ID49IDAgPyByZXFVcmwuc3Vic3RyaW5nKDAsIHFJbmRleCkgOiByZXFVcmw7XG4gICAgICAgICAgICAgICAgICAgICAgICAocmVxdWVzdCBhcyBhbnkpLl9fYm9keVRleHQgPSBib2R5VGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0IGFzIGFueSkuX19wYXRobmFtZSA9IHBhdGhuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhdGhBcnJheTogc3RyaW5nW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGF0aG5hbWUgPT09IGxhc3RQYXRobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhBcnJheSA9IGxhc3RQYXRoQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhBcnJheSA9IHBhdGhuYW1lLmxlbmd0aCA+IDEgPyBwYXRobmFtZS5zdWJzdHJpbmcoMSkuc3BsaXQoXCIvXCIpIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFBhdGhuYW1lID0gcGF0aG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFBhdGhBcnJheSA9IHBhdGhBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0IGFzIGFueSkuX19wYXRoQXJyYXkgPSBwYXRoQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAocmVxdWVzdCBhcyBhbnkpLl9fb3JpZ2luID0gcmVxLmhlYWRlcnMub3JpZ2luID8/IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAocmVxdWVzdCBhcyBhbnkpLl9faXNBY3Rpb24gPSAhaXNTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbGtpby5saXN0ZW5lci5mZXRjaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY6IGVudixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZNb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1Jlc3BvbnNlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5fX3Jhd1Jlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy53cml0ZUhlYWQocmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzQm9keSA9IHJlc3BvbnNlLmJvZHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzQm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5lbmQoQnVmZmVyLmZyb20ocmVzQm9keSwgJ3V0Zi04JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc0JvZHkgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IEJ1ZmZlci5pc0J1ZmZlcihyZXNCb2R5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmVuZChyZXNCb2R5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNCb2R5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5lbmQoQnVmZmVyLmZyb20ocmVzQm9keSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc0JvZHkgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNCb2R5LmFycmF5QnVmZmVyKCkudGhlbigoYWI6IEFycmF5QnVmZmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmVuZChCdWZmZXIuZnJvbShhYikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzQm9keSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuZW5kKHJlc0JvZHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhbmRhcmQgUmVzcG9uc2Ugb2JqZWN0IHBhdGggKHN0cmVhbSwgT1BUSU9OUywgZXRjLilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzSGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHJlc3BvbnNlLmhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gcmVzSGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gcmVzSGVhZGVyc1trZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4aXN0aW5nKSkgZXhpc3RpbmcucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSByZXNIZWFkZXJzW2tleV0gPSBbZXhpc3RpbmcsIHZhbHVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzSGVhZGVyc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLndyaXRlSGVhZChyZXNwb25zZS5zdGF0dXMsIHJlc0hlYWRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuYm9keSAhPSBudWxsICYmIHJlcS5tZXRob2QgIT09IFwiSEVBRFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5LmdldFJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHVtcCA9ICgpOiBQcm9taXNlPHZvaWQ+ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlYWQoKS50aGVuKCh7IGRvbmUsIHZhbHVlIH06IHsgZG9uZTogYm9vbGVhbjsgdmFsdWU/OiBVaW50OEFycmF5IH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHsgcmVzLmVuZCgpOyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLndyaXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1bXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXMuaGVhZGVyc1NlbnQpIHJlcy53cml0ZUhlYWQoNTAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuZW5kKFwiSW50ZXJuYWwgU2VydmVyIEVycm9yXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikgc2VydmVyLnNzckZpeFN0YWNrdHJhY2UoZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGNvbmZpZyhjb25maWcsIHsgY29tbWFuZCB9KSB7XG4gICAgICAgICAgICBpZiAoY29tbWFuZCAhPT0gXCJidWlsZFwiKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0ID0gYXdhaXQgZ2V0Q29va2Jvb2tUb21sUHJvamVjdCgpO1xuXG4gICAgICAgICAgICAvLyBjb25maWcuYnVpbGRcbiAgICAgICAgICAgIGlmICghY29uZmlnLmJ1aWxkKSBjb25maWcuYnVpbGQgPSB7fTtcbiAgICAgICAgICAgIGNvbmZpZy5idWlsZC5zc3IgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLmJ1aWxkLnNvdXJjZW1hcCA9IFwiaW5saW5lXCI7XG4gICAgICAgICAgICBjb25maWcuYnVpbGQudGFyZ2V0ID0gXCJlczIwMjRcIjtcbiAgICAgICAgICAgIC8vIGNvbmZpZy5idWlsZC5yb2xsdXBPcHRpb25zXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5idWlsZC5yb2xsdXBPcHRpb25zKSBjb25maWcuYnVpbGQucm9sbHVwT3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgLy8gY29uZmlnLmJ1aWxkLnJvbGx1cE9wdGlvbnMub3V0cHV0XG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5idWlsZC5yb2xsdXBPcHRpb25zLm91dHB1dCkgY29uZmlnLmJ1aWxkLnJvbGx1cE9wdGlvbnMub3V0cHV0ID0ge307XG4gICAgICAgICAgICAvLyBjb25maWcuYnVpbGQucm9sbHVwT3B0aW9ucy5pbnB1dFxuICAgICAgICAgICAgY29uZmlnLmJ1aWxkLnJvbGx1cE9wdGlvbnMuaW5wdXQgPSB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IFwiLm1pbGtpby9ydW4udHNcIixcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmICghcHJvamVjdC5hZGFwdGVyKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZvcm1hdDogXCJlc21cIiB8IFwiY2pzXCIgPSBcImVzbVwiO1xuICAgICAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgIGxldCBtb2RlOiBcImNodW5rXCIgfCBcImJ1bmRsZVwiID0gXCJidW5kbGVcIjtcbiAgICAgICAgICAgICAgICBpZiAocHJvamVjdC5ydW50aW1lID09PSBcIm5vZGVcIikge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBvcHRpb25zPy5vdXRwdXRGb3JtYXQgPz8gXCJjanNcIjtcbiAgICAgICAgICAgICAgICAgICAgbW9kZSA9IFwiY2h1bmtcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByb2plY3QucnVudGltZSA9PT0gXCJkZW5vXCIgfHwgcHJvamVjdC5ydW50aW1lID09PSBcImJ1blwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IG9wdGlvbnM/Lm91dHB1dEZvcm1hdCA/PyBcImVzbVwiO1xuICAgICAgICAgICAgICAgICAgICBtb2RlID0gXCJjaHVua1wiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJydW50aW1lIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBvdXRwdXQgb2YgQXJyYXkuaXNBcnJheShjb25maWcuYnVpbGQucm9sbHVwT3B0aW9ucy5vdXRwdXQpID8gY29uZmlnLmJ1aWxkLnJvbGx1cE9wdGlvbnMub3V0cHV0IDogW2NvbmZpZy5idWlsZC5yb2xsdXBPcHRpb25zLm91dHB1dF0pIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmZvcm1hdCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnByZXNlcnZlTW9kdWxlcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFkYXB0ZXIgb2YgYWRhcHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFkYXB0ZXIubmFtZSA9PT0gcHJvamVjdC5hZGFwdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFkYXB0ZXIuYWRhcHRlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmJ1aWxkLnJvbGx1cE9wdGlvbnMuaW5wdXQgPSByZXN1bHQuaW5wdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuYnVpbGQucm9sbHVwT3B0aW9ucy5vdXRwdXQgPSByZXN1bHQub3V0cHV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFmaW5kKSB0aHJvdyBuZXcgRXJyb3IoYGFkYXB0ZXIgXCIke3Byb2plY3QuYWRhcHRlcn1cIiBub3QgZm91bmRgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY29uZmlnLnNlcnZlclxuICAgICAgICAgICAgaWYgKCFjb25maWcuc2VydmVyKSBjb25maWcuc2VydmVyID0ge307XG4gICAgICAgICAgICAvLyBjb25maWcuc2VydmVyLm1pZGRsZXdhcmVNb2RlXG4gICAgICAgICAgICBjb25maWcuc2VydmVyLmhtciA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBjb25maWcub3B0aW1pemVEZXBzXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5vcHRpbWl6ZURlcHMpIGNvbmZpZy5vcHRpbWl6ZURlcHMgPSB7fTtcbiAgICAgICAgICAgIGNvbmZpZy5vcHRpbWl6ZURlcHMubm9EaXNjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFjb25maWcub3B0aW1pemVEZXBzLmV4Y2x1ZGUpIGNvbmZpZy5vcHRpbWl6ZURlcHMuZXhjbHVkZSA9IFtdO1xuICAgICAgICAgICAgY29uZmlnLm9wdGltaXplRGVwcy5leGNsdWRlLnB1c2goXCJAZWxlY3RyaWMtc3FsL3BnbGl0ZVwiKTtcblxuICAgICAgICAgICAgLy8gY29uZmlnLndvcmtlclxuICAgICAgICAgICAgaWYgKCFjb25maWcud29ya2VyKSBjb25maWcud29ya2VyID0ge307XG4gICAgICAgICAgICBjb25maWcud29ya2VyLmZvcm1hdCA9IFwiZXNcIjtcblxuICAgICAgICAgICAgLy8gY29uZmlnLnJlc29sdmVcbiAgICAgICAgICAgIGlmICghY29uZmlnLnJlc29sdmUpIGNvbmZpZy5yZXNvbHZlID0ge307XG4gICAgICAgICAgICAvLyBjb25maWcucmVzb2x2ZS5hbGlhc1xuICAgICAgICAgICAgY29uZmlnLnJlc29sdmUuYWxpYXMgPSB7XG4gICAgICAgICAgICAgICAgLi4uY29uZmlnLnJlc29sdmUuYWxpYXMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBjb25maWcuc3NyXG4gICAgICAgICAgICBjb25maWcuc3NyID0ge1xuICAgICAgICAgICAgICAgIG5vRXh0ZXJuYWw6IGdldE5vRXh0ZXJuYWwoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgY29uZmlnUmVzb2x2ZWQocmVzb2x2ZWRDb25maWcpIHtcbiAgICAgICAgICAgIG91dERpciA9IHJlc29sdmVkQ29uZmlnLmJ1aWxkLm91dERpciB8fCBcImRpc3RcIjtcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyB3cml0ZUJ1bmRsZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbihjd2QoKSwgb3V0RGlyLCBcIi5naXRrZWVwXCIpO1xuICAgICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCBcIlwiLCBcInV0Zi04XCIpO1xuICAgICAgICB9LFxuICAgIH0gc2F0aXNmaWVzIFBsdWdpbk9wdGlvbjtcbn1cblxuZnVuY3Rpb24gZ2V0Tm9FeHRlcm5hbCgpIHtcbiAgICAvLyBidW5cbiAgICBjb25zdCBidW4gPSBbXCJidW5cIiwgL15idW46L107XG5cbiAgICAvLyBub2RlX21vZHVsZXNcbiAgICBsZXQgbm9kZU1vZHVsZXMgPSBbLi4uKGV4aXN0c1N5bmMoam9pbihjd2QoKSwgXCJub2RlX21vZHVsZXNcIikpID8gcmVhZGRpclN5bmMoam9pbihjd2QoKSwgXCJub2RlX21vZHVsZXNcIikpIDogW10pLCAuLi4oZXhpc3RzU3luYyhqb2luKGN3ZCgpLCBcIi4uXCIsIFwiLi5cIiwgXCJub2RlX21vZHVsZXNcIikpID8gcmVhZGRpclN5bmMoam9pbihjd2QoKSwgXCIuLlwiLCBcIi4uXCIsIFwibm9kZV9tb2R1bGVzXCIpKSA6IFtdKV0uZmlsdGVyKChkZXBlbmRlbmN5KSA9PiAhZGVwZW5kZW5jeS5zdGFydHNXaXRoKFwiLlwiKSk7XG4gICAgLy8gZWxlY3Ryb24gZXhjbHVkZVxuICAgIG5vZGVNb2R1bGVzID0gbm9kZU1vZHVsZXMuZmlsdGVyKChkZXBlbmRlbmN5KSA9PiBkZXBlbmRlbmN5ICE9PSBcImVsZWN0cm9uXCIpO1xuICAgIC8vIHN0YXJ0c1dpdGggQFxuICAgIGNvbnN0IG5vZGVNb2R1bGVzUmVnRXhwID0gbm9kZU1vZHVsZXMubWFwKChkZXBlbmRlbmN5KSA9PiAoZGVwZW5kZW5jeS5zdGFydHNXaXRoKFwiQFwiKSA/IG5ldyBSZWdFeHAoYF4ke2RlcGVuZGVuY3l9L2ApIDogZGVwZW5kZW5jeSkpO1xuXG4gICAgcmV0dXJuIFsuLi5idW4sIC4uLm5vZGVNb2R1bGVzUmVnRXhwXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0Q29va2Jvb2tUb21sUHJvamVjdCgpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGNvb2tib29rVG9tbFJhdyA9IGF3YWl0IHJlYWRGaWxlKGpvaW4oY3dkKCksIFwiLi5cIiwgXCIuLlwiLCBcImNvb2tib29rLnRvbWxcIiksIFwidXRmLThcIik7XG4gICAgY29uc3QgY29va2Jvb2tUb21sID0gVE9NTC5wYXJzZShjb29rYm9va1RvbWxSYXcpO1xuICAgIGxldCBwcm9qZWN0OiBhbnk7XG4gICAgZm9yIChjb25zdCBwcm9qZWN0TmFtZSBpbiBjb29rYm9va1RvbWwucHJvamVjdHMgYXMgYW55KSB7XG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9TZWxmQ29tcGFyZTogPGV4cGxhbmF0aW9uPlxuICAgICAgICBpZiAoam9pbihjd2QoKSkgIT09IGpvaW4oY3dkKCksIFwiLi5cIiwgcHJvamVjdE5hbWUpKSBjb250aW51ZTtcbiAgICAgICAgcHJvamVjdCA9IChjb29rYm9va1RvbWwucHJvamVjdHMgYXMgYW55KVtwcm9qZWN0TmFtZV07XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoIXByb2plY3QpIHRocm93IG5ldyBFcnJvcihcIlByb2plY3Qgbm90IGZvdW5kIGluIGNvb2tib29rLnRvbWxcIik7XG4gICAgcmV0dXJuIHByb2plY3Q7XG59XG4iLAogICAgImV4cG9ydCBjb25zdCBiYWxhbmNlZCA9IChhLCBiLCBzdHIpID0+IHtcbiAgICBjb25zdCBtYSA9IGEgaW5zdGFuY2VvZiBSZWdFeHAgPyBtYXliZU1hdGNoKGEsIHN0cikgOiBhO1xuICAgIGNvbnN0IG1iID0gYiBpbnN0YW5jZW9mIFJlZ0V4cCA/IG1heWJlTWF0Y2goYiwgc3RyKSA6IGI7XG4gICAgY29uc3QgciA9IG1hICE9PSBudWxsICYmIG1iICE9IG51bGwgJiYgcmFuZ2UobWEsIG1iLCBzdHIpO1xuICAgIHJldHVybiAociAmJiB7XG4gICAgICAgIHN0YXJ0OiByWzBdLFxuICAgICAgICBlbmQ6IHJbMV0sXG4gICAgICAgIHByZTogc3RyLnNsaWNlKDAsIHJbMF0pLFxuICAgICAgICBib2R5OiBzdHIuc2xpY2UoclswXSArIG1hLmxlbmd0aCwgclsxXSksXG4gICAgICAgIHBvc3Q6IHN0ci5zbGljZShyWzFdICsgbWIubGVuZ3RoKSxcbiAgICB9KTtcbn07XG5jb25zdCBtYXliZU1hdGNoID0gKHJlZywgc3RyKSA9PiB7XG4gICAgY29uc3QgbSA9IHN0ci5tYXRjaChyZWcpO1xuICAgIHJldHVybiBtID8gbVswXSA6IG51bGw7XG59O1xuZXhwb3J0IGNvbnN0IHJhbmdlID0gKGEsIGIsIHN0cikgPT4ge1xuICAgIGxldCBiZWdzLCBiZWcsIGxlZnQsIHJpZ2h0ID0gdW5kZWZpbmVkLCByZXN1bHQ7XG4gICAgbGV0IGFpID0gc3RyLmluZGV4T2YoYSk7XG4gICAgbGV0IGJpID0gc3RyLmluZGV4T2YoYiwgYWkgKyAxKTtcbiAgICBsZXQgaSA9IGFpO1xuICAgIGlmIChhaSA+PSAwICYmIGJpID4gMCkge1xuICAgICAgICBpZiAoYSA9PT0gYikge1xuICAgICAgICAgICAgcmV0dXJuIFthaSwgYmldO1xuICAgICAgICB9XG4gICAgICAgIGJlZ3MgPSBbXTtcbiAgICAgICAgbGVmdCA9IHN0ci5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpID49IDAgJiYgIXJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGkgPT09IGFpKSB7XG4gICAgICAgICAgICAgICAgYmVncy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIGFpID0gc3RyLmluZGV4T2YoYSwgaSArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmVncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByID0gYmVncy5wb3AoKTtcbiAgICAgICAgICAgICAgICBpZiAociAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbciwgYmldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYmVnID0gYmVncy5wb3AoKTtcbiAgICAgICAgICAgICAgICBpZiAoYmVnICE9PSB1bmRlZmluZWQgJiYgYmVnIDwgbGVmdCkge1xuICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gYmVnO1xuICAgICAgICAgICAgICAgICAgICByaWdodCA9IGJpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBiaSA9IHN0ci5pbmRleE9mKGIsIGkgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkgPSBhaSA8IGJpICYmIGFpID49IDAgPyBhaSA6IGJpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiZWdzLmxlbmd0aCAmJiByaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBbbGVmdCwgcmlnaHRdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJpbXBvcnQgeyBiYWxhbmNlZCB9IGZyb20gJ2JhbGFuY2VkLW1hdGNoJztcbmNvbnN0IGVzY1NsYXNoID0gJ1xcMFNMQVNIJyArIE1hdGgucmFuZG9tKCkgKyAnXFwwJztcbmNvbnN0IGVzY09wZW4gPSAnXFwwT1BFTicgKyBNYXRoLnJhbmRvbSgpICsgJ1xcMCc7XG5jb25zdCBlc2NDbG9zZSA9ICdcXDBDTE9TRScgKyBNYXRoLnJhbmRvbSgpICsgJ1xcMCc7XG5jb25zdCBlc2NDb21tYSA9ICdcXDBDT01NQScgKyBNYXRoLnJhbmRvbSgpICsgJ1xcMCc7XG5jb25zdCBlc2NQZXJpb2QgPSAnXFwwUEVSSU9EJyArIE1hdGgucmFuZG9tKCkgKyAnXFwwJztcbmNvbnN0IGVzY1NsYXNoUGF0dGVybiA9IG5ldyBSZWdFeHAoZXNjU2xhc2gsICdnJyk7XG5jb25zdCBlc2NPcGVuUGF0dGVybiA9IG5ldyBSZWdFeHAoZXNjT3BlbiwgJ2cnKTtcbmNvbnN0IGVzY0Nsb3NlUGF0dGVybiA9IG5ldyBSZWdFeHAoZXNjQ2xvc2UsICdnJyk7XG5jb25zdCBlc2NDb21tYVBhdHRlcm4gPSBuZXcgUmVnRXhwKGVzY0NvbW1hLCAnZycpO1xuY29uc3QgZXNjUGVyaW9kUGF0dGVybiA9IG5ldyBSZWdFeHAoZXNjUGVyaW9kLCAnZycpO1xuY29uc3Qgc2xhc2hQYXR0ZXJuID0gL1xcXFxcXFxcL2c7XG5jb25zdCBvcGVuUGF0dGVybiA9IC9cXFxcey9nO1xuY29uc3QgY2xvc2VQYXR0ZXJuID0gL1xcXFx9L2c7XG5jb25zdCBjb21tYVBhdHRlcm4gPSAvXFxcXCwvZztcbmNvbnN0IHBlcmlvZFBhdHRlcm4gPSAvXFxcXFxcLi9nO1xuZXhwb3J0IGNvbnN0IEVYUEFOU0lPTl9NQVggPSAxMDBfMDAwO1xuZnVuY3Rpb24gbnVtZXJpYyhzdHIpIHtcbiAgICByZXR1cm4gIWlzTmFOKHN0cikgPyBwYXJzZUludChzdHIsIDEwKSA6IHN0ci5jaGFyQ29kZUF0KDApO1xufVxuZnVuY3Rpb24gZXNjYXBlQnJhY2VzKHN0cikge1xuICAgIHJldHVybiBzdHJcbiAgICAgICAgLnJlcGxhY2Uoc2xhc2hQYXR0ZXJuLCBlc2NTbGFzaClcbiAgICAgICAgLnJlcGxhY2Uob3BlblBhdHRlcm4sIGVzY09wZW4pXG4gICAgICAgIC5yZXBsYWNlKGNsb3NlUGF0dGVybiwgZXNjQ2xvc2UpXG4gICAgICAgIC5yZXBsYWNlKGNvbW1hUGF0dGVybiwgZXNjQ29tbWEpXG4gICAgICAgIC5yZXBsYWNlKHBlcmlvZFBhdHRlcm4sIGVzY1BlcmlvZCk7XG59XG5mdW5jdGlvbiB1bmVzY2FwZUJyYWNlcyhzdHIpIHtcbiAgICByZXR1cm4gc3RyXG4gICAgICAgIC5yZXBsYWNlKGVzY1NsYXNoUGF0dGVybiwgJ1xcXFwnKVxuICAgICAgICAucmVwbGFjZShlc2NPcGVuUGF0dGVybiwgJ3snKVxuICAgICAgICAucmVwbGFjZShlc2NDbG9zZVBhdHRlcm4sICd9JylcbiAgICAgICAgLnJlcGxhY2UoZXNjQ29tbWFQYXR0ZXJuLCAnLCcpXG4gICAgICAgIC5yZXBsYWNlKGVzY1BlcmlvZFBhdHRlcm4sICcuJyk7XG59XG4vKipcbiAqIEJhc2ljYWxseSBqdXN0IHN0ci5zcGxpdChcIixcIiksIGJ1dCBoYW5kbGluZyBjYXNlc1xuICogd2hlcmUgd2UgaGF2ZSBuZXN0ZWQgYnJhY2VkIHNlY3Rpb25zLCB3aGljaCBzaG91bGQgYmVcbiAqIHRyZWF0ZWQgYXMgaW5kaXZpZHVhbCBtZW1iZXJzLCBsaWtlIHthLHtiLGN9LGR9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ29tbWFQYXJ0cyhzdHIpIHtcbiAgICBpZiAoIXN0cikge1xuICAgICAgICByZXR1cm4gWycnXTtcbiAgICB9XG4gICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICBjb25zdCBtID0gYmFsYW5jZWQoJ3snLCAnfScsIHN0cik7XG4gICAgaWYgKCFtKSB7XG4gICAgICAgIHJldHVybiBzdHIuc3BsaXQoJywnKTtcbiAgICB9XG4gICAgY29uc3QgeyBwcmUsIGJvZHksIHBvc3QgfSA9IG07XG4gICAgY29uc3QgcCA9IHByZS5zcGxpdCgnLCcpO1xuICAgIHBbcC5sZW5ndGggLSAxXSArPSAneycgKyBib2R5ICsgJ30nO1xuICAgIGNvbnN0IHBvc3RQYXJ0cyA9IHBhcnNlQ29tbWFQYXJ0cyhwb3N0KTtcbiAgICBpZiAocG9zdC5sZW5ndGgpIHtcbiAgICAgICAgO1xuICAgICAgICBwW3AubGVuZ3RoIC0gMV0gKz0gcG9zdFBhcnRzLnNoaWZ0KCk7XG4gICAgICAgIHAucHVzaC5hcHBseShwLCBwb3N0UGFydHMpO1xuICAgIH1cbiAgICBwYXJ0cy5wdXNoLmFwcGx5KHBhcnRzLCBwKTtcbiAgICByZXR1cm4gcGFydHM7XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kKHN0ciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFzdHIpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCB7IG1heCA9IEVYUEFOU0lPTl9NQVggfSA9IG9wdGlvbnM7XG4gICAgLy8gSSBkb24ndCBrbm93IHdoeSBCYXNoIDQuMyBkb2VzIHRoaXMsIGJ1dCBpdCBkb2VzLlxuICAgIC8vIEFueXRoaW5nIHN0YXJ0aW5nIHdpdGgge30gd2lsbCBoYXZlIHRoZSBmaXJzdCB0d28gYnl0ZXMgcHJlc2VydmVkXG4gICAgLy8gYnV0ICpvbmx5KiBhdCB0aGUgdG9wIGxldmVsLCBzbyB7fSxhfWIgd2lsbCBub3QgZXhwYW5kIHRvIGFueXRoaW5nLFxuICAgIC8vIGJ1dCBhe30sYn1jIHdpbGwgYmUgZXhwYW5kZWQgdG8gW2F9YyxhYmNdLlxuICAgIC8vIE9uZSBjb3VsZCBhcmd1ZSB0aGF0IHRoaXMgaXMgYSBidWcgaW4gQmFzaCwgYnV0IHNpbmNlIHRoZSBnb2FsIG9mXG4gICAgLy8gdGhpcyBtb2R1bGUgaXMgdG8gbWF0Y2ggQmFzaCdzIHJ1bGVzLCB3ZSBlc2NhcGUgYSBsZWFkaW5nIHt9XG4gICAgaWYgKHN0ci5zbGljZSgwLCAyKSA9PT0gJ3t9Jykge1xuICAgICAgICBzdHIgPSAnXFxcXHtcXFxcfScgKyBzdHIuc2xpY2UoMik7XG4gICAgfVxuICAgIHJldHVybiBleHBhbmRfKGVzY2FwZUJyYWNlcyhzdHIpLCBtYXgsIHRydWUpLm1hcCh1bmVzY2FwZUJyYWNlcyk7XG59XG5mdW5jdGlvbiBlbWJyYWNlKHN0cikge1xuICAgIHJldHVybiAneycgKyBzdHIgKyAnfSc7XG59XG5mdW5jdGlvbiBpc1BhZGRlZChlbCkge1xuICAgIHJldHVybiAvXi0/MFxcZC8udGVzdChlbCk7XG59XG5mdW5jdGlvbiBsdGUoaSwgeSkge1xuICAgIHJldHVybiBpIDw9IHk7XG59XG5mdW5jdGlvbiBndGUoaSwgeSkge1xuICAgIHJldHVybiBpID49IHk7XG59XG5mdW5jdGlvbiBleHBhbmRfKHN0ciwgbWF4LCBpc1RvcCkge1xuICAgIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gICAgY29uc3QgZXhwYW5zaW9ucyA9IFtdO1xuICAgIGNvbnN0IG0gPSBiYWxhbmNlZCgneycsICd9Jywgc3RyKTtcbiAgICBpZiAoIW0pXG4gICAgICAgIHJldHVybiBbc3RyXTtcbiAgICAvLyBubyBuZWVkIHRvIGV4cGFuZCBwcmUsIHNpbmNlIGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgZnJlZSBvZiBicmFjZS1zZXRzXG4gICAgY29uc3QgcHJlID0gbS5wcmU7XG4gICAgY29uc3QgcG9zdCA9IG0ucG9zdC5sZW5ndGggPyBleHBhbmRfKG0ucG9zdCwgbWF4LCBmYWxzZSkgOiBbJyddO1xuICAgIGlmICgvXFwkJC8udGVzdChtLnByZSkpIHtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBwb3N0Lmxlbmd0aCAmJiBrIDwgbWF4OyBrKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvbiA9IHByZSArICd7JyArIG0uYm9keSArICd9JyArIHBvc3Rba107XG4gICAgICAgICAgICBleHBhbnNpb25zLnB1c2goZXhwYW5zaW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgaXNOdW1lcmljU2VxdWVuY2UgPSAvXi0/XFxkK1xcLlxcLi0/XFxkKyg/OlxcLlxcLi0/XFxkKyk/JC8udGVzdChtLmJvZHkpO1xuICAgICAgICBjb25zdCBpc0FscGhhU2VxdWVuY2UgPSAvXlthLXpBLVpdXFwuXFwuW2EtekEtWl0oPzpcXC5cXC4tP1xcZCspPyQvLnRlc3QobS5ib2R5KTtcbiAgICAgICAgY29uc3QgaXNTZXF1ZW5jZSA9IGlzTnVtZXJpY1NlcXVlbmNlIHx8IGlzQWxwaGFTZXF1ZW5jZTtcbiAgICAgICAgY29uc3QgaXNPcHRpb25zID0gbS5ib2R5LmluZGV4T2YoJywnKSA+PSAwO1xuICAgICAgICBpZiAoIWlzU2VxdWVuY2UgJiYgIWlzT3B0aW9ucykge1xuICAgICAgICAgICAgLy8ge2F9LGJ9XG4gICAgICAgICAgICBpZiAobS5wb3N0Lm1hdGNoKC8sKD8hLCkuKlxcfS8pKSB7XG4gICAgICAgICAgICAgICAgc3RyID0gbS5wcmUgKyAneycgKyBtLmJvZHkgKyBlc2NDbG9zZSArIG0ucG9zdDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwYW5kXyhzdHIsIG1heCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW3N0cl07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG47XG4gICAgICAgIGlmIChpc1NlcXVlbmNlKSB7XG4gICAgICAgICAgICBuID0gbS5ib2R5LnNwbGl0KC9cXC5cXC4vKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG4gPSBwYXJzZUNvbW1hUGFydHMobS5ib2R5KTtcbiAgICAgICAgICAgIGlmIChuLmxlbmd0aCA9PT0gMSAmJiBuWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyB4e3thLGJ9fXkgPT0+IHh7YX15IHh7Yn15XG4gICAgICAgICAgICAgICAgbiA9IGV4cGFuZF8oblswXSwgbWF4LCBmYWxzZSkubWFwKGVtYnJhY2UpO1xuICAgICAgICAgICAgICAgIC8vWFhYIGlzIHRoaXMgbmVjZXNzYXJ5PyBDYW4ndCBzZWVtIHRvIGhpdCBpdCBpbiB0ZXN0cy5cbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICBpZiAobi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc3QubWFwKHAgPT4gbS5wcmUgKyBuWzBdICsgcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgbiBpcyB0aGUgcGFydHMsIGFuZCB3ZSBrbm93IGl0J3Mgbm90IGEgY29tbWEgc2V0XG4gICAgICAgIC8vIHdpdGggYSBzaW5nbGUgZW50cnkuXG4gICAgICAgIGxldCBOO1xuICAgICAgICBpZiAoaXNTZXF1ZW5jZSAmJiBuWzBdICE9PSB1bmRlZmluZWQgJiYgblsxXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCB4ID0gbnVtZXJpYyhuWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBudW1lcmljKG5bMV0pO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heChuWzBdLmxlbmd0aCwgblsxXS5sZW5ndGgpO1xuICAgICAgICAgICAgbGV0IGluY3IgPSBuLmxlbmd0aCA9PT0gMyAmJiBuWzJdICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgICAgIE1hdGgubWF4KE1hdGguYWJzKG51bWVyaWMoblsyXSkpLCAxKVxuICAgICAgICAgICAgICAgIDogMTtcbiAgICAgICAgICAgIGxldCB0ZXN0ID0gbHRlO1xuICAgICAgICAgICAgY29uc3QgcmV2ZXJzZSA9IHkgPCB4O1xuICAgICAgICAgICAgaWYgKHJldmVyc2UpIHtcbiAgICAgICAgICAgICAgICBpbmNyICo9IC0xO1xuICAgICAgICAgICAgICAgIHRlc3QgPSBndGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYWQgPSBuLnNvbWUoaXNQYWRkZWQpO1xuICAgICAgICAgICAgTiA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHg7IHRlc3QoaSwgeSkgJiYgTi5sZW5ndGggPCBtYXg7IGkgKz0gaW5jcikge1xuICAgICAgICAgICAgICAgIGxldCBjO1xuICAgICAgICAgICAgICAgIGlmIChpc0FscGhhU2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgYyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYyA9IFN0cmluZyhpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVlZCA9IHdpZHRoIC0gYy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmVlZCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB6ID0gbmV3IEFycmF5KG5lZWQgKyAxKS5qb2luKCcwJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAnLScgKyB6ICsgYy5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSB6ICsgYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgTi5wdXNoKGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgTiA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgTi5wdXNoLmFwcGx5KE4sIGV4cGFuZF8obltqXSwgbWF4LCBmYWxzZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgTi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBwb3N0Lmxlbmd0aCAmJiBleHBhbnNpb25zLmxlbmd0aCA8IG1heDsgaysrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwYW5zaW9uID0gcHJlICsgTltqXSArIHBvc3Rba107XG4gICAgICAgICAgICAgICAgaWYgKCFpc1RvcCB8fCBpc1NlcXVlbmNlIHx8IGV4cGFuc2lvbikge1xuICAgICAgICAgICAgICAgICAgICBleHBhbnNpb25zLnB1c2goZXhwYW5zaW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV4cGFuc2lvbnM7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgImNvbnN0IE1BWF9QQVRURVJOX0xFTkdUSCA9IDEwMjQgKiA2NDtcbmV4cG9ydCBjb25zdCBhc3NlcnRWYWxpZFBhdHRlcm4gPSAocGF0dGVybikgPT4ge1xuICAgIGlmICh0eXBlb2YgcGF0dGVybiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBwYXR0ZXJuJyk7XG4gICAgfVxuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA+IE1BWF9QQVRURVJOX0xFTkdUSCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXR0ZXJuIGlzIHRvbyBsb25nJyk7XG4gICAgfVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFzc2VydC12YWxpZC1wYXR0ZXJuLmpzLm1hcCIsCiAgICAiLy8gdHJhbnNsYXRlIHRoZSB2YXJpb3VzIHBvc2l4IGNoYXJhY3RlciBjbGFzc2VzIGludG8gdW5pY29kZSBwcm9wZXJ0aWVzXG4vLyB0aGlzIHdvcmtzIGFjcm9zcyBhbGwgdW5pY29kZSBsb2NhbGVzXG4vLyB7IDxwb3NpeCBjbGFzcz46IFs8dHJhbnNsYXRpb24+LCAvdSBmbGFnIHJlcXVpcmVkLCBuZWdhdGVkXVxuY29uc3QgcG9zaXhDbGFzc2VzID0ge1xuICAgICdbOmFsbnVtOl0nOiBbJ1xcXFxwe0x9XFxcXHB7Tmx9XFxcXHB7TmR9JywgdHJ1ZV0sXG4gICAgJ1s6YWxwaGE6XSc6IFsnXFxcXHB7TH1cXFxccHtObH0nLCB0cnVlXSxcbiAgICAnWzphc2NpaTpdJzogWydcXFxceCcgKyAnMDAtXFxcXHgnICsgJzdmJywgZmFsc2VdLFxuICAgICdbOmJsYW5rOl0nOiBbJ1xcXFxwe1pzfVxcXFx0JywgdHJ1ZV0sXG4gICAgJ1s6Y250cmw6XSc6IFsnXFxcXHB7Q2N9JywgdHJ1ZV0sXG4gICAgJ1s6ZGlnaXQ6XSc6IFsnXFxcXHB7TmR9JywgdHJ1ZV0sXG4gICAgJ1s6Z3JhcGg6XSc6IFsnXFxcXHB7Wn1cXFxccHtDfScsIHRydWUsIHRydWVdLFxuICAgICdbOmxvd2VyOl0nOiBbJ1xcXFxwe0xsfScsIHRydWVdLFxuICAgICdbOnByaW50Ol0nOiBbJ1xcXFxwe0N9JywgdHJ1ZV0sXG4gICAgJ1s6cHVuY3Q6XSc6IFsnXFxcXHB7UH0nLCB0cnVlXSxcbiAgICAnWzpzcGFjZTpdJzogWydcXFxccHtafVxcXFx0XFxcXHJcXFxcblxcXFx2XFxcXGYnLCB0cnVlXSxcbiAgICAnWzp1cHBlcjpdJzogWydcXFxccHtMdX0nLCB0cnVlXSxcbiAgICAnWzp3b3JkOl0nOiBbJ1xcXFxwe0x9XFxcXHB7Tmx9XFxcXHB7TmR9XFxcXHB7UGN9JywgdHJ1ZV0sXG4gICAgJ1s6eGRpZ2l0Ol0nOiBbJ0EtRmEtZjAtOScsIGZhbHNlXSxcbn07XG4vLyBvbmx5IG5lZWQgdG8gZXNjYXBlIGEgZmV3IHRoaW5ncyBpbnNpZGUgb2YgYnJhY2UgZXhwcmVzc2lvbnNcbi8vIGVzY2FwZXM6IFsgXFwgXSAtXG5jb25zdCBicmFjZUVzY2FwZSA9IChzKSA9PiBzLnJlcGxhY2UoL1tbXFxdXFxcXC1dL2csICdcXFxcJCYnKTtcbi8vIGVzY2FwZSBhbGwgcmVnZXhwIG1hZ2ljIGNoYXJhY3RlcnNcbmNvbnN0IHJlZ2V4cEVzY2FwZSA9IChzKSA9PiBzLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uLFxcXFxeJHwjXFxzXS9nLCAnXFxcXCQmJyk7XG4vLyBldmVyeXRoaW5nIGhhcyBhbHJlYWR5IGJlZW4gZXNjYXBlZCwgd2UganVzdCBoYXZlIHRvIGpvaW5cbmNvbnN0IHJhbmdlc1RvU3RyaW5nID0gKHJhbmdlcykgPT4gcmFuZ2VzLmpvaW4oJycpO1xuLy8gdGFrZXMgYSBnbG9iIHN0cmluZyBhdCBhIHBvc2l4IGJyYWNlIGV4cHJlc3Npb24sIGFuZCByZXR1cm5zXG4vLyBhbiBlcXVpdmFsZW50IHJlZ3VsYXIgZXhwcmVzc2lvbiBzb3VyY2UsIGFuZCBib29sZWFuIGluZGljYXRpbmdcbi8vIHdoZXRoZXIgdGhlIC91IGZsYWcgbmVlZHMgdG8gYmUgYXBwbGllZCwgYW5kIHRoZSBudW1iZXIgb2YgY2hhcnNcbi8vIGNvbnN1bWVkIHRvIHBhcnNlIHRoZSBjaGFyYWN0ZXIgY2xhc3MuXG4vLyBUaGlzIGFsc28gcmVtb3ZlcyBvdXQgb2Ygb3JkZXIgcmFuZ2VzLCBhbmQgcmV0dXJucyAoJC4pIGlmIHRoZVxuLy8gZW50aXJlIGNsYXNzIGp1c3Qgbm8gZ29vZC5cbmV4cG9ydCBjb25zdCBwYXJzZUNsYXNzID0gKGdsb2IsIHBvc2l0aW9uKSA9PiB7XG4gICAgY29uc3QgcG9zID0gcG9zaXRpb247XG4gICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgaWYgKGdsb2IuY2hhckF0KHBvcykgIT09ICdbJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbiBhIGJyYWNlIGV4cHJlc3Npb24nKTtcbiAgICB9XG4gICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICBjb25zdCByYW5nZXMgPSBbXTtcbiAgICBjb25zdCBuZWdzID0gW107XG4gICAgbGV0IGkgPSBwb3MgKyAxO1xuICAgIGxldCBzYXdTdGFydCA9IGZhbHNlO1xuICAgIGxldCB1ZmxhZyA9IGZhbHNlO1xuICAgIGxldCBlc2NhcGluZyA9IGZhbHNlO1xuICAgIGxldCBuZWdhdGUgPSBmYWxzZTtcbiAgICBsZXQgZW5kUG9zID0gcG9zO1xuICAgIGxldCByYW5nZVN0YXJ0ID0gJyc7XG4gICAgV0hJTEU6IHdoaWxlIChpIDwgZ2xvYi5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYyA9IGdsb2IuY2hhckF0KGkpO1xuICAgICAgICBpZiAoKGMgPT09ICchJyB8fCBjID09PSAnXicpICYmIGkgPT09IHBvcyArIDEpIHtcbiAgICAgICAgICAgIG5lZ2F0ZSA9IHRydWU7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gJ10nICYmIHNhd1N0YXJ0ICYmICFlc2NhcGluZykge1xuICAgICAgICAgICAgZW5kUG9zID0gaSArIDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzYXdTdGFydCA9IHRydWU7XG4gICAgICAgIGlmIChjID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgIGlmICghZXNjYXBpbmcpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXNjYXBlZCBcXCBjaGFyLCBmYWxsIHRocm91Z2ggYW5kIHRyZWF0IGxpa2Ugbm9ybWFsIGNoYXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gJ1snICYmICFlc2NhcGluZykge1xuICAgICAgICAgICAgLy8gZWl0aGVyIGEgcG9zaXggY2xhc3MsIGEgY29sbGF0aW9uIGVxdWl2YWxlbnQsIG9yIGp1c3QgYSBbXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtjbHMsIFt1bmlwLCB1LCBuZWddXSBvZiBPYmplY3QuZW50cmllcyhwb3NpeENsYXNzZXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdsb2Iuc3RhcnRzV2l0aChjbHMsIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGludmFsaWQsIFthLVtdIGlzIGZpbmUsIGJ1dCBub3QgW2EtWzphbHBoYV1dXG4gICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyckLicsIGZhbHNlLCBnbG9iLmxlbmd0aCAtIHBvcywgdHJ1ZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaSArPSBjbHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmVnKVxuICAgICAgICAgICAgICAgICAgICAgICAgbmVncy5wdXNoKHVuaXApO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMucHVzaCh1bmlwKTtcbiAgICAgICAgICAgICAgICAgICAgdWZsYWcgPSB1ZmxhZyB8fCB1O1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBXSElMRTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm93IGl0J3MganVzdCBhIG5vcm1hbCBjaGFyYWN0ZXIsIGVmZmVjdGl2ZWx5XG4gICAgICAgIGVzY2FwaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChyYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAvLyB0aHJvdyB0aGlzIHJhbmdlIGF3YXkgaWYgaXQncyBub3QgdmFsaWQsIGJ1dCBvdGhlcnNcbiAgICAgICAgICAgIC8vIGNhbiBzdGlsbCBtYXRjaC5cbiAgICAgICAgICAgIGlmIChjID4gcmFuZ2VTdGFydCkge1xuICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKGJyYWNlRXNjYXBlKHJhbmdlU3RhcnQpICsgJy0nICsgYnJhY2VFc2NhcGUoYykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gcmFuZ2VTdGFydCkge1xuICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKGJyYWNlRXNjYXBlKGMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJhbmdlU3RhcnQgPSAnJztcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdyBtaWdodCBiZSB0aGUgc3RhcnQgb2YgYSByYW5nZS5cbiAgICAgICAgLy8gY2FuIGJlIGVpdGhlciBjLWQgb3IgYy1dIG9yIGM8bW9yZS4uLj5dIG9yIGNdIGF0IHRoaXMgcG9pbnRcbiAgICAgICAgaWYgKGdsb2Iuc3RhcnRzV2l0aCgnLV0nLCBpICsgMSkpIHtcbiAgICAgICAgICAgIHJhbmdlcy5wdXNoKGJyYWNlRXNjYXBlKGMgKyAnLScpKTtcbiAgICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnbG9iLnN0YXJ0c1dpdGgoJy0nLCBpICsgMSkpIHtcbiAgICAgICAgICAgIHJhbmdlU3RhcnQgPSBjO1xuICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm90IHRoZSBzdGFydCBvZiBhIHJhbmdlLCBqdXN0IGEgc2luZ2xlIGNoYXJhY3RlclxuICAgICAgICByYW5nZXMucHVzaChicmFjZUVzY2FwZShjKSk7XG4gICAgICAgIGkrKztcbiAgICB9XG4gICAgaWYgKGVuZFBvcyA8IGkpIHtcbiAgICAgICAgLy8gZGlkbid0IHNlZSB0aGUgZW5kIG9mIHRoZSBjbGFzcywgbm90IGEgdmFsaWQgY2xhc3MsXG4gICAgICAgIC8vIGJ1dCBtaWdodCBzdGlsbCBiZSB2YWxpZCBhcyBhIGxpdGVyYWwgbWF0Y2guXG4gICAgICAgIHJldHVybiBbJycsIGZhbHNlLCAwLCBmYWxzZV07XG4gICAgfVxuICAgIC8vIGlmIHdlIGdvdCBubyByYW5nZXMgYW5kIG5vIG5lZ2F0ZXMsIHRoZW4gd2UgaGF2ZSBhIHJhbmdlIHRoYXRcbiAgICAvLyBjYW5ub3QgcG9zc2libHkgbWF0Y2ggYW55dGhpbmcsIGFuZCB0aGF0IHBvaXNvbnMgdGhlIHdob2xlIGdsb2JcbiAgICBpZiAoIXJhbmdlcy5sZW5ndGggJiYgIW5lZ3MubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbJyQuJywgZmFsc2UsIGdsb2IubGVuZ3RoIC0gcG9zLCB0cnVlXTtcbiAgICB9XG4gICAgLy8gaWYgd2UgZ290IG9uZSBwb3NpdGl2ZSByYW5nZSwgYW5kIGl0J3MgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGVuIHRoYXQnc1xuICAgIC8vIG5vdCBhY3R1YWxseSBhIG1hZ2ljIHBhdHRlcm4sIGl0J3MganVzdCB0aGF0IG9uZSBsaXRlcmFsIGNoYXJhY3Rlci5cbiAgICAvLyB3ZSBzaG91bGQgbm90IHRyZWF0IHRoYXQgYXMgXCJtYWdpY1wiLCB3ZSBzaG91bGQganVzdCByZXR1cm4gdGhlIGxpdGVyYWxcbiAgICAvLyBjaGFyYWN0ZXIuIFtfXSBpcyBhIHBlcmZlY3RseSB2YWxpZCB3YXkgdG8gZXNjYXBlIGdsb2IgbWFnaWMgY2hhcnMuXG4gICAgaWYgKG5lZ3MubGVuZ3RoID09PSAwICYmXG4gICAgICAgIHJhbmdlcy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgL15cXFxcPy4kLy50ZXN0KHJhbmdlc1swXSkgJiZcbiAgICAgICAgIW5lZ2F0ZSkge1xuICAgICAgICBjb25zdCByID0gcmFuZ2VzWzBdLmxlbmd0aCA9PT0gMiA/IHJhbmdlc1swXS5zbGljZSgtMSkgOiByYW5nZXNbMF07XG4gICAgICAgIHJldHVybiBbcmVnZXhwRXNjYXBlKHIpLCBmYWxzZSwgZW5kUG9zIC0gcG9zLCBmYWxzZV07XG4gICAgfVxuICAgIGNvbnN0IHNyYW5nZXMgPSAnWycgKyAobmVnYXRlID8gJ14nIDogJycpICsgcmFuZ2VzVG9TdHJpbmcocmFuZ2VzKSArICddJztcbiAgICBjb25zdCBzbmVncyA9ICdbJyArIChuZWdhdGUgPyAnJyA6ICdeJykgKyByYW5nZXNUb1N0cmluZyhuZWdzKSArICddJztcbiAgICBjb25zdCBjb21iID0gcmFuZ2VzLmxlbmd0aCAmJiBuZWdzLmxlbmd0aCA/ICcoJyArIHNyYW5nZXMgKyAnfCcgKyBzbmVncyArICcpJ1xuICAgICAgICA6IHJhbmdlcy5sZW5ndGggPyBzcmFuZ2VzXG4gICAgICAgICAgICA6IHNuZWdzO1xuICAgIHJldHVybiBbY29tYiwgdWZsYWcsIGVuZFBvcyAtIHBvcywgdHJ1ZV07XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnJhY2UtZXhwcmVzc2lvbnMuanMubWFwIiwKICAgICIvKipcbiAqIFVuLWVzY2FwZSBhIHN0cmluZyB0aGF0IGhhcyBiZWVuIGVzY2FwZWQgd2l0aCB7QGxpbmsgZXNjYXBlfS5cbiAqXG4gKiBJZiB0aGUge0BsaW5rIE1pbmltYXRjaE9wdGlvbnMud2luZG93c1BhdGhzTm9Fc2NhcGV9IG9wdGlvbiBpcyB1c2VkLCB0aGVuXG4gKiBzcXVhcmUtYnJhY2tldCBlc2NhcGVzIGFyZSByZW1vdmVkLCBidXQgbm90IGJhY2tzbGFzaCBlc2NhcGVzLlxuICpcbiAqIEZvciBleGFtcGxlLCBpdCB3aWxsIHR1cm4gdGhlIHN0cmluZyBgJ1sqXSdgIGludG8gYCpgLCBidXQgaXQgd2lsbCBub3RcbiAqIHR1cm4gYCdcXFxcKidgIGludG8gYCcqJ2AsIGJlY2F1c2UgYFxcYCBpcyBhIHBhdGggc2VwYXJhdG9yIGluXG4gKiBgd2luZG93c1BhdGhzTm9Fc2NhcGVgIG1vZGUuXG4gKlxuICogV2hlbiBgd2luZG93c1BhdGhzTm9Fc2NhcGVgIGlzIG5vdCBzZXQsIHRoZW4gYm90aCBzcXVhcmUtYnJhY2tldCBlc2NhcGVzIGFuZFxuICogYmFja3NsYXNoIGVzY2FwZXMgYXJlIHJlbW92ZWQuXG4gKlxuICogU2xhc2hlcyAoYW5kIGJhY2tzbGFzaGVzIGluIGB3aW5kb3dzUGF0aHNOb0VzY2FwZWAgbW9kZSkgY2Fubm90IGJlIGVzY2FwZWRcbiAqIG9yIHVuZXNjYXBlZC5cbiAqXG4gKiBXaGVuIGBtYWdpY2FsQnJhY2VzYCBpcyBub3Qgc2V0LCBlc2NhcGVzIG9mIGJyYWNlcyAoYHtgIGFuZCBgfWApIHdpbGwgbm90IGJlXG4gKiB1bmVzY2FwZWQuXG4gKi9cbmV4cG9ydCBjb25zdCB1bmVzY2FwZSA9IChzLCB7IHdpbmRvd3NQYXRoc05vRXNjYXBlID0gZmFsc2UsIG1hZ2ljYWxCcmFjZXMgPSB0cnVlLCB9ID0ge30pID0+IHtcbiAgICBpZiAobWFnaWNhbEJyYWNlcykge1xuICAgICAgICByZXR1cm4gd2luZG93c1BhdGhzTm9Fc2NhcGUgP1xuICAgICAgICAgICAgcy5yZXBsYWNlKC9cXFsoW14vXFxcXF0pXFxdL2csICckMScpXG4gICAgICAgICAgICA6IHNcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvKCg/IVxcXFwpLnxeKVxcWyhbXi9cXFxcXSlcXF0vZywgJyQxJDInKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcKFteL10pL2csICckMScpO1xuICAgIH1cbiAgICByZXR1cm4gd2luZG93c1BhdGhzTm9Fc2NhcGUgP1xuICAgICAgICBzLnJlcGxhY2UoL1xcWyhbXi9cXFxce31dKVxcXS9nLCAnJDEnKVxuICAgICAgICA6IHNcbiAgICAgICAgICAgIC5yZXBsYWNlKC8oKD8hXFxcXCkufF4pXFxbKFteL1xcXFx7fV0pXFxdL2csICckMSQyJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcKFteL3t9XSkvZywgJyQxJyk7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dW5lc2NhcGUuanMubWFwIiwKICAgICIvLyBwYXJzZSBhIHNpbmdsZSBwYXRoIHBvcnRpb25cbnZhciBfYTtcbmltcG9ydCB7IHBhcnNlQ2xhc3MgfSBmcm9tICcuL2JyYWNlLWV4cHJlc3Npb25zLmpzJztcbmltcG9ydCB7IHVuZXNjYXBlIH0gZnJvbSAnLi91bmVzY2FwZS5qcyc7XG5jb25zdCB0eXBlcyA9IG5ldyBTZXQoWychJywgJz8nLCAnKycsICcqJywgJ0AnXSk7XG5jb25zdCBpc0V4dGdsb2JUeXBlID0gKGMpID0+IHR5cGVzLmhhcyhjKTtcbmNvbnN0IGlzRXh0Z2xvYkFTVCA9IChjKSA9PiBpc0V4dGdsb2JUeXBlKGMudHlwZSk7XG4vLyBNYXAgb2Ygd2hpY2ggZXh0Z2xvYiB0eXBlcyBjYW4gYWRvcHQgdGhlIGNoaWxkcmVuIG9mIGEgbmVzdGVkIGV4dGdsb2Jcbi8vXG4vLyBhbnl0aGluZyBidXQgISBjYW4gYWRvcHQgYSBtYXRjaGluZyB0eXBlOlxuLy8gKyhhfCsoYnxjKXxkKSA9PiArKGF8YnxjfGQpXG4vLyAqKGF8KihifGMpfGQpID0+ICooYXxifGN8ZClcbi8vIEAoYXxAKGJ8Yyl8ZCkgPT4gQChhfGJ8Y3xkKVxuLy8gPyhhfD8oYnxjKXxkKSA9PiA/KGF8YnxjfGQpXG4vL1xuLy8gKiBjYW4gYWRvcHQgYW55dGhpbmcsIGJlY2F1c2UgMCBvciByZXBldGl0aW9uIGlzIGFsbG93ZWRcbi8vICooYXw/KGJ8Yyl8ZCkgPT4gKihhfGJ8Y3xkKVxuLy8gKihhfCsoYnxjKXxkKSA9PiAqKGF8YnxjfGQpXG4vLyAqKGF8QChifGMpfGQpID0+ICooYXxifGN8ZClcbi8vXG4vLyArIGNhbiBhZG9wdCBALCBiZWNhdXNlIDEgb3IgcmVwZXRpdGlvbiBpcyBhbGxvd2VkXG4vLyArKGF8QChifGMpfGQpID0+ICsoYXxifGN8ZClcbi8vXG4vLyArIGFuZCBAIENBTk5PVCBhZG9wdCAqLCBiZWNhdXNlIDAgd291bGQgYmUgYWxsb3dlZFxuLy8gKyhhfCooYnxjKXxkKSA9PiB3b3VsZCBtYXRjaCBcIlwiLCBvbiAqKGJ8Yylcbi8vIEAoYXwqKGJ8Yyl8ZCkgPT4gd291bGQgbWF0Y2ggXCJcIiwgb24gKihifGMpXG4vL1xuLy8gKyBhbmQgQCBDQU5OT1QgYWRvcHQgPywgYmVjYXVzZSAwIHdvdWxkIGJlIGFsbG93ZWRcbi8vICsoYXw/KGJ8Yyl8ZCkgPT4gd291bGQgbWF0Y2ggXCJcIiwgb24gPyhifGMpXG4vLyBAKGF8PyhifGMpfGQpID0+IHdvdWxkIG1hdGNoIFwiXCIsIG9uID8oYnxjKVxuLy9cbi8vID8gY2FuIGFkb3B0IEAsIGJlY2F1c2UgMCBvciAxIGlzIGFsbG93ZWRcbi8vID8oYXxAKGJ8Yyl8ZCkgPT4gPyhhfGJ8Y3xkKVxuLy9cbi8vID8gYW5kIEAgQ0FOTk9UIGFkb3B0ICogb3IgKywgYmVjYXVzZSA+MSB3b3VsZCBiZSBhbGxvd2VkXG4vLyA/KGF8KihifGMpfGQpID0+IHdvdWxkIG1hdGNoIGJiYiBvbiAqKGJ8Yylcbi8vIEAoYXwqKGJ8Yyl8ZCkgPT4gd291bGQgbWF0Y2ggYmJiIG9uICooYnxjKVxuLy8gPyhhfCsoYnxjKXxkKSA9PiB3b3VsZCBtYXRjaCBiYmIgb24gKyhifGMpXG4vLyBAKGF8KyhifGMpfGQpID0+IHdvdWxkIG1hdGNoIGJiYiBvbiArKGJ8Yylcbi8vXG4vLyAhIENBTk5PVCBhZG9wdCAhIChub3RoaW5nIGVsc2UgY2FuIGVpdGhlcilcbi8vICEoYXwhKGJ8Yyl8ZCkgPT4gIShhfGJ8Y3xkKSB3b3VsZCBmYWlsIHRvIG1hdGNoIG9uIGIgKG5vdCBub3QgYnxjKVxuLy9cbi8vICEgY2FuIGFkb3B0IEBcbi8vICEoYXxAKGJ8Yyl8ZCkgPT4gIShhfGJ8Y3xkKVxuLy9cbi8vICEgQ0FOTk9UIGFkb3B0ICpcbi8vICEoYXwqKGJ8Yyl8ZCkgPT4gIShhfGJ8Y3xkKSB3b3VsZCBtYXRjaCBvbiBiYmIsIG5vdCBhbGxvd2VkXG4vL1xuLy8gISBDQU5OT1QgYWRvcHQgK1xuLy8gIShhfCsoYnxjKXxkKSA9PiAhKGF8YnxjfGQpIHdvdWxkIG1hdGNoIG9uIGJiYiwgbm90IGFsbG93ZWRcbi8vXG4vLyAhIENBTk5PVCBhZG9wdCA/XG4vLyB4IShhfD8oYnxjKXxkKSA9PiB4IShhfGJ8Y3xkKSB3b3VsZCBmYWlsIHRvIG1hdGNoIFwieFwiXG5jb25zdCBhZG9wdGlvbk1hcCA9IG5ldyBNYXAoW1xuICAgIFsnIScsIFsnQCddXSxcbiAgICBbJz8nLCBbJz8nLCAnQCddXSxcbiAgICBbJ0AnLCBbJ0AnXV0sXG4gICAgWycqJywgWycqJywgJysnLCAnPycsICdAJ11dLFxuICAgIFsnKycsIFsnKycsICdAJ11dLFxuXSk7XG4vLyBuZXN0ZWQgZXh0Z2xvYnMgdGhhdCBjYW4gYmUgYWRvcHRlZCBpbiwgYnV0IHdpdGggdGhlIGFkZGl0aW9uIG9mXG4vLyBhIGJsYW5rICcnIGVsZW1lbnQuXG5jb25zdCBhZG9wdGlvbldpdGhTcGFjZU1hcCA9IG5ldyBNYXAoW1xuICAgIFsnIScsIFsnPyddXSxcbiAgICBbJ0AnLCBbJz8nXV0sXG4gICAgWycrJywgWyc/JywgJyonXV0sXG5dKTtcbi8vIHVuaW9uIG9mIHRoZSBwcmV2aW91cyB0d28gbWFwc1xuY29uc3QgYWRvcHRpb25BbnlNYXAgPSBuZXcgTWFwKFtcbiAgICBbJyEnLCBbJz8nLCAnQCddXSxcbiAgICBbJz8nLCBbJz8nLCAnQCddXSxcbiAgICBbJ0AnLCBbJz8nLCAnQCddXSxcbiAgICBbJyonLCBbJyonLCAnKycsICc/JywgJ0AnXV0sXG4gICAgWycrJywgWycrJywgJ0AnLCAnPycsICcqJ11dLFxuXSk7XG4vLyBFeHRnbG9icyB0aGF0IGNhbiB0YWtlIG92ZXIgdGhlaXIgcGFyZW50IGlmIHRoZXkgYXJlIHRoZSBvbmx5IGNoaWxkXG4vLyB0aGUga2V5IGlzIHBhcmVudCwgdmFsdWUgbWFwcyBjaGlsZCB0byByZXN1bHRpbmcgZXh0Z2xvYiBwYXJlbnQgdHlwZVxuLy8gJ0AnIGlzIG9taXR0ZWQgYmVjYXVzZSBpdCdzIGEgc3BlY2lhbCBjYXNlLiBBbiBgQGAgZXh0Z2xvYiB3aXRoIGEgc2luZ2xlXG4vLyBtZW1iZXIgY2FuIGFsd2F5cyBiZSB1c3VycGVkIGJ5IHRoYXQgc3VicGF0dGVybi5cbmNvbnN0IHVzdXJwTWFwID0gbmV3IE1hcChbXG4gICAgWychJywgbmV3IE1hcChbWychJywgJ0AnXV0pXSxcbiAgICBbXG4gICAgICAgICc/JyxcbiAgICAgICAgbmV3IE1hcChbXG4gICAgICAgICAgICBbJyonLCAnKiddLFxuICAgICAgICAgICAgWycrJywgJyonXSxcbiAgICAgICAgXSksXG4gICAgXSxcbiAgICBbXG4gICAgICAgICdAJyxcbiAgICAgICAgbmV3IE1hcChbXG4gICAgICAgICAgICBbJyEnLCAnISddLFxuICAgICAgICAgICAgWyc/JywgJz8nXSxcbiAgICAgICAgICAgIFsnQCcsICdAJ10sXG4gICAgICAgICAgICBbJyonLCAnKiddLFxuICAgICAgICAgICAgWycrJywgJysnXSxcbiAgICAgICAgXSksXG4gICAgXSxcbiAgICBbXG4gICAgICAgICcrJyxcbiAgICAgICAgbmV3IE1hcChbXG4gICAgICAgICAgICBbJz8nLCAnKiddLFxuICAgICAgICAgICAgWycqJywgJyonXSxcbiAgICAgICAgXSksXG4gICAgXSxcbl0pO1xuLy8gUGF0dGVybnMgdGhhdCBnZXQgcHJlcGVuZGVkIHRvIGJpbmQgdG8gdGhlIHN0YXJ0IG9mIGVpdGhlciB0aGVcbi8vIGVudGlyZSBzdHJpbmcsIG9yIGp1c3QgYSBzaW5nbGUgcGF0aCBwb3J0aW9uLCB0byBwcmV2ZW50IGRvdHNcbi8vIGFuZC9vciB0cmF2ZXJzYWwgcGF0dGVybnMsIHdoZW4gbmVlZGVkLlxuLy8gRXh0cyBkb24ndCBuZWVkIHRoZSBeIG9yIC8gYml0LCBiZWNhdXNlIHRoZSByb290IGJpbmRzIHRoYXQgYWxyZWFkeS5cbmNvbnN0IHN0YXJ0Tm9UcmF2ZXJzYWwgPSAnKD8hKD86XnwvKVxcXFwuXFxcXC4/KD86JHwvKSknO1xuY29uc3Qgc3RhcnROb0RvdCA9ICcoPyFcXFxcLiknO1xuLy8gY2hhcmFjdGVycyB0aGF0IGluZGljYXRlIGEgc3RhcnQgb2YgcGF0dGVybiBuZWVkcyB0aGUgXCJubyBkb3RzXCIgYml0LFxuLy8gYmVjYXVzZSBhIGRvdCAqbWlnaHQqIGJlIG1hdGNoZWQuICggaXMgbm90IGluIHRoZSBsaXN0LCBiZWNhdXNlIGluXG4vLyB0aGUgY2FzZSBvZiBhIGNoaWxkIGV4dGdsb2IsIGl0IHdpbGwgaGFuZGxlIHRoZSBwcmV2ZW50aW9uIGl0c2VsZi5cbmNvbnN0IGFkZFBhdHRlcm5TdGFydCA9IG5ldyBTZXQoWydbJywgJy4nXSk7XG4vLyBjYXNlcyB3aGVyZSB0cmF2ZXJzYWwgaXMgQS1PSywgbm8gZG90IHByZXZlbnRpb24gbmVlZGVkXG5jb25zdCBqdXN0RG90cyA9IG5ldyBTZXQoWycuLicsICcuJ10pO1xuY29uc3QgcmVTcGVjaWFscyA9IG5ldyBTZXQoJygpLip7fSs/W11eJFxcXFwhJyk7XG5jb25zdCByZWdFeHBFc2NhcGUgPSAocykgPT4gcy5yZXBsYWNlKC9bLVtcXF17fSgpKis/LixcXFxcXiR8I1xcc10vZywgJ1xcXFwkJicpO1xuLy8gYW55IHNpbmdsZSB0aGluZyBvdGhlciB0aGFuIC9cbmNvbnN0IHFtYXJrID0gJ1teL10nO1xuLy8gKiA9PiBhbnkgbnVtYmVyIG9mIGNoYXJhY3RlcnNcbmNvbnN0IHN0YXIgPSBxbWFyayArICcqPyc7XG4vLyB1c2UgKyB3aGVuIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgKnNvbWV0aGluZyogbWF0Y2hlcywgYmVjYXVzZSB0aGUgKiBpc1xuLy8gdGhlIG9ubHkgdGhpbmcgaW4gdGhlIHBhdGggcG9ydGlvbi5cbmNvbnN0IHN0YXJOb0VtcHR5ID0gcW1hcmsgKyAnKz8nO1xuLy8gcmVtb3ZlIHRoZSBcXCBjaGFycyB0aGF0IHdlIGFkZGVkIGlmIHdlIGVuZCB1cCBkb2luZyBhIG5vbm1hZ2ljIGNvbXBhcmVcbi8vIGNvbnN0IGRlc2xhc2ggPSAoczogc3RyaW5nKSA9PiBzLnJlcGxhY2UoL1xcXFwoLikvZywgJyQxJylcbmxldCBJRCA9IDA7XG5leHBvcnQgY2xhc3MgQVNUIHtcbiAgICB0eXBlO1xuICAgICNyb290O1xuICAgICNoYXNNYWdpYztcbiAgICAjdWZsYWcgPSBmYWxzZTtcbiAgICAjcGFydHMgPSBbXTtcbiAgICAjcGFyZW50O1xuICAgICNwYXJlbnRJbmRleDtcbiAgICAjbmVncztcbiAgICAjZmlsbGVkTmVncyA9IGZhbHNlO1xuICAgICNvcHRpb25zO1xuICAgICN0b1N0cmluZztcbiAgICAvLyBzZXQgdG8gdHJ1ZSBpZiBpdCdzIGFuIGV4dGdsb2Igd2l0aCBubyBjaGlsZHJlblxuICAgIC8vICh3aGljaCByZWFsbHkgbWVhbnMgb25lIGNoaWxkIG9mICcnKVxuICAgICNlbXB0eUV4dCA9IGZhbHNlO1xuICAgIGlkID0gKytJRDtcbiAgICBnZXQgZGVwdGgoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jcGFyZW50Py5kZXB0aCA/PyAtMSkgKyAxO1xuICAgIH1cbiAgICBbU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKV0oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnQEB0eXBlJzogJ0FTVCcsXG4gICAgICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHJvb3Q6IHRoaXMuI3Jvb3QuaWQsXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMuI3BhcmVudD8uaWQsXG4gICAgICAgICAgICBkZXB0aDogdGhpcy5kZXB0aCxcbiAgICAgICAgICAgIHBhcnRzTGVuZ3RoOiB0aGlzLiNwYXJ0cy5sZW5ndGgsXG4gICAgICAgICAgICBwYXJ0czogdGhpcy4jcGFydHMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHR5cGUsIHBhcmVudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIC8vIGV4dGdsb2JzIGFyZSBpbmhlcmVudGx5IG1hZ2ljYWxcbiAgICAgICAgaWYgKHR5cGUpXG4gICAgICAgICAgICB0aGlzLiNoYXNNYWdpYyA9IHRydWU7XG4gICAgICAgIHRoaXMuI3BhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy4jcm9vdCA9IHRoaXMuI3BhcmVudCA/IHRoaXMuI3BhcmVudC4jcm9vdCA6IHRoaXM7XG4gICAgICAgIHRoaXMuI29wdGlvbnMgPSB0aGlzLiNyb290ID09PSB0aGlzID8gb3B0aW9ucyA6IHRoaXMuI3Jvb3QuI29wdGlvbnM7XG4gICAgICAgIHRoaXMuI25lZ3MgPSB0aGlzLiNyb290ID09PSB0aGlzID8gW10gOiB0aGlzLiNyb290LiNuZWdzO1xuICAgICAgICBpZiAodHlwZSA9PT0gJyEnICYmICF0aGlzLiNyb290LiNmaWxsZWROZWdzKVxuICAgICAgICAgICAgdGhpcy4jbmVncy5wdXNoKHRoaXMpO1xuICAgICAgICB0aGlzLiNwYXJlbnRJbmRleCA9IHRoaXMuI3BhcmVudCA/IHRoaXMuI3BhcmVudC4jcGFydHMubGVuZ3RoIDogMDtcbiAgICB9XG4gICAgZ2V0IGhhc01hZ2ljKCkge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMuI2hhc01hZ2ljICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jaGFzTWFnaWM7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLiNwYXJ0cykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChwLnR5cGUgfHwgcC5oYXNNYWdpYylcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuI2hhc01hZ2ljID0gdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm90ZTogd2lsbCBiZSB1bmRlZmluZWQgdW50aWwgd2UgZ2VuZXJhdGUgdGhlIHJlZ2V4cCBzcmMgYW5kIGZpbmQgb3V0XG4gICAgICAgIHJldHVybiB0aGlzLiNoYXNNYWdpYztcbiAgICB9XG4gICAgLy8gcmVjb25zdHJ1Y3RzIHRoZSBwYXR0ZXJuXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdG9TdHJpbmcgIT09IHVuZGVmaW5lZCA/IHRoaXMuI3RvU3RyaW5nXG4gICAgICAgICAgICA6ICF0aGlzLnR5cGUgP1xuICAgICAgICAgICAgICAgICh0aGlzLiN0b1N0cmluZyA9IHRoaXMuI3BhcnRzLm1hcChwID0+IFN0cmluZyhwKSkuam9pbignJykpXG4gICAgICAgICAgICAgICAgOiAodGhpcy4jdG9TdHJpbmcgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJygnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI3BhcnRzLm1hcChwID0+IFN0cmluZyhwKSkuam9pbignfCcpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcpJykpO1xuICAgIH1cbiAgICAjZmlsbE5lZ3MoKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcyAhPT0gdGhpcy4jcm9vdClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2hvdWxkIG9ubHkgY2FsbCBvbiByb290Jyk7XG4gICAgICAgIGlmICh0aGlzLiNmaWxsZWROZWdzKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIC8vIGNhbGwgdG9TdHJpbmcoKSBvbmNlIHRvIGZpbGwgdGhpcyBvdXRcbiAgICAgICAgdGhpcy50b1N0cmluZygpO1xuICAgICAgICB0aGlzLiNmaWxsZWROZWdzID0gdHJ1ZTtcbiAgICAgICAgbGV0IG47XG4gICAgICAgIHdoaWxlICgobiA9IHRoaXMuI25lZ3MucG9wKCkpKSB7XG4gICAgICAgICAgICBpZiAobi50eXBlICE9PSAnIScpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAvLyB3YWxrIHVwIHRoZSB0cmVlLCBhcHBlbmRpbmcgZXZlcnRoaW5nIHRoYXQgY29tZXMgQUZURVIgcGFyZW50SW5kZXhcbiAgICAgICAgICAgIGxldCBwID0gbjtcbiAgICAgICAgICAgIGxldCBwcCA9IHAuI3BhcmVudDtcbiAgICAgICAgICAgIHdoaWxlIChwcCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBwLiNwYXJlbnRJbmRleCArIDE7ICFwcC50eXBlICYmIGkgPCBwcC4jcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIG4uI3BhcnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cmluZyBwYXJ0IGluIGV4dGdsb2IgQVNUPz8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0LmNvcHlJbihwcC4jcGFydHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHAgPSBwcDtcbiAgICAgICAgICAgICAgICBwcCA9IHAuI3BhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcHVzaCguLi5wYXJ0cykge1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcGFydHMpIHtcbiAgICAgICAgICAgIGlmIChwID09PSAnJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICEocCBpbnN0YW5jZW9mIF9hICYmIHAuI3BhcmVudCA9PT0gdGhpcykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcGFydDogJyArIHApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHRoaXMuI3BhcnRzLnB1c2gocCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCByZXQgPSB0aGlzLnR5cGUgPT09IG51bGwgP1xuICAgICAgICAgICAgdGhpcy4jcGFydHNcbiAgICAgICAgICAgICAgICAuc2xpY2UoKVxuICAgICAgICAgICAgICAgIC5tYXAocCA9PiAodHlwZW9mIHAgPT09ICdzdHJpbmcnID8gcCA6IHAudG9KU09OKCkpKVxuICAgICAgICAgICAgOiBbdGhpcy50eXBlLCAuLi50aGlzLiNwYXJ0cy5tYXAocCA9PiBwLnRvSlNPTigpKV07XG4gICAgICAgIGlmICh0aGlzLmlzU3RhcnQoKSAmJiAhdGhpcy50eXBlKVxuICAgICAgICAgICAgcmV0LnVuc2hpZnQoW10pO1xuICAgICAgICBpZiAodGhpcy5pc0VuZCgpICYmXG4gICAgICAgICAgICAodGhpcyA9PT0gdGhpcy4jcm9vdCB8fFxuICAgICAgICAgICAgICAgICh0aGlzLiNyb290LiNmaWxsZWROZWdzICYmIHRoaXMuI3BhcmVudD8udHlwZSA9PT0gJyEnKSkpIHtcbiAgICAgICAgICAgIHJldC5wdXNoKHt9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICBpc1N0YXJ0KCkge1xuICAgICAgICBpZiAodGhpcy4jcm9vdCA9PT0gdGhpcylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyBpZiAodGhpcy50eXBlKSByZXR1cm4gISF0aGlzLiNwYXJlbnQ/LmlzU3RhcnQoKVxuICAgICAgICBpZiAoIXRoaXMuI3BhcmVudD8uaXNTdGFydCgpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy4jcGFyZW50SW5kZXggPT09IDApXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gaWYgZXZlcnl0aGluZyBBSEVBRCBvZiB0aGlzIGlzIGEgbmVnYXRpb24sIHRoZW4gaXQncyBzdGlsbCB0aGUgXCJzdGFydFwiXG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLiNwYXJlbnQ7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy4jcGFyZW50SW5kZXg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcHAgPSBwLiNwYXJ0c1tpXTtcbiAgICAgICAgICAgIGlmICghKHBwIGluc3RhbmNlb2YgX2EgJiYgcHAudHlwZSA9PT0gJyEnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaXNFbmQoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyb290ID09PSB0aGlzKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLiNwYXJlbnQ/LnR5cGUgPT09ICchJylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMuI3BhcmVudD8uaXNFbmQoKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcGFyZW50Py5pc0VuZCgpO1xuICAgICAgICAvLyBpZiBub3Qgcm9vdCwgaXQnbGwgYWx3YXlzIGhhdmUgYSBwYXJlbnRcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGNvbnN0IHBsID0gdGhpcy4jcGFyZW50ID8gdGhpcy4jcGFyZW50LiNwYXJ0cy5sZW5ndGggOiAwO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICByZXR1cm4gdGhpcy4jcGFyZW50SW5kZXggPT09IHBsIC0gMTtcbiAgICB9XG4gICAgY29weUluKHBhcnQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHRoaXMucHVzaChwYXJ0KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5wdXNoKHBhcnQuY2xvbmUodGhpcykpO1xuICAgIH1cbiAgICBjbG9uZShwYXJlbnQpIHtcbiAgICAgICAgY29uc3QgYyA9IG5ldyBfYSh0aGlzLnR5cGUsIHBhcmVudCk7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLiNwYXJ0cykge1xuICAgICAgICAgICAgYy5jb3B5SW4ocCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfVxuICAgIHN0YXRpYyAjcGFyc2VBU1Qoc3RyLCBhc3QsIHBvcywgb3B0LCBleHREZXB0aCkge1xuICAgICAgICBjb25zdCBtYXhEZXB0aCA9IG9wdC5tYXhFeHRnbG9iUmVjdXJzaW9uID8/IDI7XG4gICAgICAgIGxldCBlc2NhcGluZyA9IGZhbHNlO1xuICAgICAgICBsZXQgaW5CcmFjZSA9IGZhbHNlO1xuICAgICAgICBsZXQgYnJhY2VTdGFydCA9IC0xO1xuICAgICAgICBsZXQgYnJhY2VOZWcgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFzdC50eXBlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBvdXRzaWRlIG9mIGEgZXh0Z2xvYiwgYXBwZW5kIHVudGlsIHdlIGZpbmQgYSBzdGFydFxuICAgICAgICAgICAgbGV0IGkgPSBwb3M7XG4gICAgICAgICAgICBsZXQgYWNjID0gJyc7XG4gICAgICAgICAgICB3aGlsZSAoaSA8IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gc3RyLmNoYXJBdChpKyspO1xuICAgICAgICAgICAgICAgIC8vIHN0aWxsIGFjY3VtdWxhdGUgZXNjYXBlcyBhdCB0aGlzIHBvaW50LCBidXQgd2UgZG8gaWdub3JlXG4gICAgICAgICAgICAgICAgLy8gc3RhcnRzIHRoYXQgYXJlIGVzY2FwZWRcbiAgICAgICAgICAgICAgICBpZiAoZXNjYXBpbmcgfHwgYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gIWVzY2FwaW5nO1xuICAgICAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbkJyYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSBicmFjZVN0YXJ0ICsgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdeJyB8fCBjID09PSAnIScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFjZU5lZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gJ10nICYmICEoaSA9PT0gYnJhY2VTdGFydCArIDIgJiYgYnJhY2VOZWcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbkJyYWNlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjID09PSAnWycpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5CcmFjZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyYWNlU3RhcnQgPSBpO1xuICAgICAgICAgICAgICAgICAgICBicmFjZU5lZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgdG8gY2hlY2sgZm9yIGFkb3B0aW9uIGhlcmUsIGJlY2F1c2UgdGhhdCdzXG4gICAgICAgICAgICAgICAgLy8gZG9uZSBhdCB0aGUgb3RoZXIgcmVjdXJzaW9uIHBvaW50LlxuICAgICAgICAgICAgICAgIGNvbnN0IGRvUmVjdXJzZSA9ICFvcHQubm9leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNFeHRnbG9iVHlwZShjKSAmJlxuICAgICAgICAgICAgICAgICAgICBzdHIuY2hhckF0KGkpID09PSAnKCcgJiZcbiAgICAgICAgICAgICAgICAgICAgZXh0RGVwdGggPD0gbWF4RGVwdGg7XG4gICAgICAgICAgICAgICAgaWYgKGRvUmVjdXJzZSkge1xuICAgICAgICAgICAgICAgICAgICBhc3QucHVzaChhY2MpO1xuICAgICAgICAgICAgICAgICAgICBhY2MgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXh0ID0gbmV3IF9hKGMsIGFzdCk7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBfYS4jcGFyc2VBU1Qoc3RyLCBleHQsIGksIG9wdCwgZXh0RGVwdGggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgYXN0LnB1c2goZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXN0LnB1c2goYWNjKTtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNvbWUga2luZCBvZiBleHRnbG9iLCBwb3MgaXMgYXQgdGhlIChcbiAgICAgICAgLy8gZmluZCB0aGUgbmV4dCB8IG9yIClcbiAgICAgICAgbGV0IGkgPSBwb3MgKyAxO1xuICAgICAgICBsZXQgcGFydCA9IG5ldyBfYShudWxsLCBhc3QpO1xuICAgICAgICBjb25zdCBwYXJ0cyA9IFtdO1xuICAgICAgICBsZXQgYWNjID0gJyc7XG4gICAgICAgIHdoaWxlIChpIDwgc3RyLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgYyA9IHN0ci5jaGFyQXQoaSsrKTtcbiAgICAgICAgICAgIC8vIHN0aWxsIGFjY3VtdWxhdGUgZXNjYXBlcyBhdCB0aGlzIHBvaW50LCBidXQgd2UgZG8gaWdub3JlXG4gICAgICAgICAgICAvLyBzdGFydHMgdGhhdCBhcmUgZXNjYXBlZFxuICAgICAgICAgICAgaWYgKGVzY2FwaW5nIHx8IGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gIWVzY2FwaW5nO1xuICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGluQnJhY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gYnJhY2VTdGFydCArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdeJyB8fCBjID09PSAnIScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyYWNlTmVnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjID09PSAnXScgJiYgIShpID09PSBicmFjZVN0YXJ0ICsgMiAmJiBicmFjZU5lZykpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5CcmFjZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGMgPT09ICdbJykge1xuICAgICAgICAgICAgICAgIGluQnJhY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyYWNlU3RhcnQgPSBpO1xuICAgICAgICAgICAgICAgIGJyYWNlTmVnID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkb1JlY3Vyc2UgPSAhb3B0Lm5vZXh0ICYmXG4gICAgICAgICAgICAgICAgaXNFeHRnbG9iVHlwZShjKSAmJlxuICAgICAgICAgICAgICAgIHN0ci5jaGFyQXQoaSkgPT09ICcoJyAmJlxuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAtIHRoZSBtYXhEZXB0aCBpcyBzdWZmaWNpZW50IGhlcmUgKi9cbiAgICAgICAgICAgICAgICAoZXh0RGVwdGggPD0gbWF4RGVwdGggfHwgKGFzdCAmJiBhc3QuI2NhbkFkb3B0VHlwZShjKSkpO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIGlmIChkb1JlY3Vyc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXB0aEFkZCA9IGFzdCAmJiBhc3QuI2NhbkFkb3B0VHlwZShjKSA/IDAgOiAxO1xuICAgICAgICAgICAgICAgIHBhcnQucHVzaChhY2MpO1xuICAgICAgICAgICAgICAgIGFjYyA9ICcnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4dCA9IG5ldyBfYShjLCBwYXJ0KTtcbiAgICAgICAgICAgICAgICBwYXJ0LnB1c2goZXh0KTtcbiAgICAgICAgICAgICAgICBpID0gX2EuI3BhcnNlQVNUKHN0ciwgZXh0LCBpLCBvcHQsIGV4dERlcHRoICsgZGVwdGhBZGQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09ICd8Jykge1xuICAgICAgICAgICAgICAgIHBhcnQucHVzaChhY2MpO1xuICAgICAgICAgICAgICAgIGFjYyA9ICcnO1xuICAgICAgICAgICAgICAgIHBhcnRzLnB1c2gocGFydCk7XG4gICAgICAgICAgICAgICAgcGFydCA9IG5ldyBfYShudWxsLCBhc3QpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09ICcpJykge1xuICAgICAgICAgICAgICAgIGlmIChhY2MgPT09ICcnICYmIGFzdC4jcGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzdC4jZW1wdHlFeHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJ0LnB1c2goYWNjKTtcbiAgICAgICAgICAgICAgICBhY2MgPSAnJztcbiAgICAgICAgICAgICAgICBhc3QucHVzaCguLi5wYXJ0cywgcGFydCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgfVxuICAgICAgICAvLyB1bmZpbmlzaGVkIGV4dGdsb2JcbiAgICAgICAgLy8gaWYgd2UgZ290IGhlcmUsIGl0IHdhcyBhIG1hbGZvcm1lZCBleHRnbG9iISBub3QgYW4gZXh0Z2xvYiwgYnV0XG4gICAgICAgIC8vIG1heWJlIHNvbWV0aGluZyBlbHNlIGluIHRoZXJlLlxuICAgICAgICBhc3QudHlwZSA9IG51bGw7XG4gICAgICAgIGFzdC4jaGFzTWFnaWMgPSB1bmRlZmluZWQ7XG4gICAgICAgIGFzdC4jcGFydHMgPSBbc3RyLnN1YnN0cmluZyhwb3MgLSAxKV07XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgICAjY2FuQWRvcHRXaXRoU3BhY2UoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NhbkFkb3B0KGNoaWxkLCBhZG9wdGlvbldpdGhTcGFjZU1hcCk7XG4gICAgfVxuICAgICNjYW5BZG9wdChjaGlsZCwgbWFwID0gYWRvcHRpb25NYXApIHtcbiAgICAgICAgaWYgKCFjaGlsZCB8fFxuICAgICAgICAgICAgdHlwZW9mIGNoaWxkICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICAgICAgY2hpbGQudHlwZSAhPT0gbnVsbCB8fFxuICAgICAgICAgICAgY2hpbGQuI3BhcnRzLmxlbmd0aCAhPT0gMSB8fFxuICAgICAgICAgICAgdGhpcy50eXBlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ2MgPSBjaGlsZC4jcGFydHNbMF07XG4gICAgICAgIGlmICghZ2MgfHwgdHlwZW9mIGdjICE9PSAnb2JqZWN0JyB8fCBnYy50eXBlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuI2NhbkFkb3B0VHlwZShnYy50eXBlLCBtYXApO1xuICAgIH1cbiAgICAjY2FuQWRvcHRUeXBlKGMsIG1hcCA9IGFkb3B0aW9uQW55TWFwKSB7XG4gICAgICAgIHJldHVybiAhIW1hcC5nZXQodGhpcy50eXBlKT8uaW5jbHVkZXMoYyk7XG4gICAgfVxuICAgICNhZG9wdFdpdGhTcGFjZShjaGlsZCwgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgZ2MgPSBjaGlsZC4jcGFydHNbMF07XG4gICAgICAgIGNvbnN0IGJsYW5rID0gbmV3IF9hKG51bGwsIGdjLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICBibGFuay4jcGFydHMucHVzaCgnJyk7XG4gICAgICAgIGdjLnB1c2goYmxhbmspO1xuICAgICAgICB0aGlzLiNhZG9wdChjaGlsZCwgaW5kZXgpO1xuICAgIH1cbiAgICAjYWRvcHQoY2hpbGQsIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IGdjID0gY2hpbGQuI3BhcnRzWzBdO1xuICAgICAgICB0aGlzLiNwYXJ0cy5zcGxpY2UoaW5kZXgsIDEsIC4uLmdjLiNwYXJ0cyk7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBnYy4jcGFydHMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICAgICAgcC4jcGFyZW50ID0gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiN0b1N0cmluZyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgI2NhblVzdXJwVHlwZShjKSB7XG4gICAgICAgIGNvbnN0IG0gPSB1c3VycE1hcC5nZXQodGhpcy50eXBlKTtcbiAgICAgICAgcmV0dXJuICEhbT8uaGFzKGMpO1xuICAgIH1cbiAgICAjY2FuVXN1cnAoY2hpbGQpIHtcbiAgICAgICAgaWYgKCFjaGlsZCB8fFxuICAgICAgICAgICAgdHlwZW9mIGNoaWxkICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICAgICAgY2hpbGQudHlwZSAhPT0gbnVsbCB8fFxuICAgICAgICAgICAgY2hpbGQuI3BhcnRzLmxlbmd0aCAhPT0gMSB8fFxuICAgICAgICAgICAgdGhpcy50eXBlID09PSBudWxsIHx8XG4gICAgICAgICAgICB0aGlzLiNwYXJ0cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBnYyA9IGNoaWxkLiNwYXJ0c1swXTtcbiAgICAgICAgaWYgKCFnYyB8fCB0eXBlb2YgZ2MgIT09ICdvYmplY3QnIHx8IGdjLnR5cGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy4jY2FuVXN1cnBUeXBlKGdjLnR5cGUpO1xuICAgIH1cbiAgICAjdXN1cnAoY2hpbGQpIHtcbiAgICAgICAgY29uc3QgbSA9IHVzdXJwTWFwLmdldCh0aGlzLnR5cGUpO1xuICAgICAgICBjb25zdCBnYyA9IGNoaWxkLiNwYXJ0c1swXTtcbiAgICAgICAgY29uc3QgbnQgPSBtPy5nZXQoZ2MudHlwZSk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAtIGltcG9zc2libGUgKi9cbiAgICAgICAgaWYgKCFudClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy4jcGFydHMgPSBnYy4jcGFydHM7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLiNwYXJ0cykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHAuI3BhcmVudCA9IHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50eXBlID0gbnQ7XG4gICAgICAgIHRoaXMuI3RvU3RyaW5nID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLiNlbXB0eUV4dCA9IGZhbHNlO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbUdsb2IocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGFzdCA9IG5ldyBfYShudWxsLCB1bmRlZmluZWQsIG9wdGlvbnMpO1xuICAgICAgICBfYS4jcGFyc2VBU1QocGF0dGVybiwgYXN0LCAwLCBvcHRpb25zLCAwKTtcbiAgICAgICAgcmV0dXJuIGFzdDtcbiAgICB9XG4gICAgLy8gcmV0dXJucyB0aGUgcmVndWxhciBleHByZXNzaW9uIGlmIHRoZXJlJ3MgbWFnaWMsIG9yIHRoZSB1bmVzY2FwZWRcbiAgICAvLyBzdHJpbmcgaWYgbm90LlxuICAgIHRvTU1QYXR0ZXJuKCkge1xuICAgICAgICAvLyBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gcm9vdFxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMgIT09IHRoaXMuI3Jvb3QpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcm9vdC50b01NUGF0dGVybigpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICBjb25zdCBnbG9iID0gdGhpcy50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBbcmUsIGJvZHksIGhhc01hZ2ljLCB1ZmxhZ10gPSB0aGlzLnRvUmVnRXhwU291cmNlKCk7XG4gICAgICAgIC8vIGlmIHdlJ3JlIGluIG5vY2FzZSBtb2RlLCBhbmQgbm90IG5vY2FzZU1hZ2ljT25seSwgdGhlbiB3ZSBkb1xuICAgICAgICAvLyBzdGlsbCBuZWVkIGEgcmVndWxhciBleHByZXNzaW9uIGlmIHdlIGhhdmUgdG8gY2FzZS1pbnNlbnNpdGl2ZWx5XG4gICAgICAgIC8vIG1hdGNoIGNhcGl0YWwvbG93ZXJjYXNlIGNoYXJhY3RlcnMuXG4gICAgICAgIGNvbnN0IGFueU1hZ2ljID0gaGFzTWFnaWMgfHxcbiAgICAgICAgICAgIHRoaXMuI2hhc01hZ2ljIHx8XG4gICAgICAgICAgICAodGhpcy4jb3B0aW9ucy5ub2Nhc2UgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jb3B0aW9ucy5ub2Nhc2VNYWdpY09ubHkgJiZcbiAgICAgICAgICAgICAgICBnbG9iLnRvVXBwZXJDYXNlKCkgIT09IGdsb2IudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmICghYW55TWFnaWMpIHtcbiAgICAgICAgICAgIHJldHVybiBib2R5O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZsYWdzID0gKHRoaXMuI29wdGlvbnMubm9jYXNlID8gJ2knIDogJycpICsgKHVmbGFnID8gJ3UnIDogJycpO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgUmVnRXhwKGBeJHtyZX0kYCwgZmxhZ3MpLCB7XG4gICAgICAgICAgICBfc3JjOiByZSxcbiAgICAgICAgICAgIF9nbG9iOiBnbG9iLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNvcHRpb25zO1xuICAgIH1cbiAgICAvLyByZXR1cm5zIHRoZSBzdHJpbmcgbWF0Y2gsIHRoZSByZWdleHAgc291cmNlLCB3aGV0aGVyIHRoZXJlJ3MgbWFnaWNcbiAgICAvLyBpbiB0aGUgcmVnZXhwIChzbyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyByZXF1aXJlZCkgYW5kIHdoZXRoZXIgb3JcbiAgICAvLyBub3QgdGhlIHVmbGFnIGlzIG5lZWRlZCBmb3IgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAoZm9yIHBvc2l4IGNsYXNzZXMpXG4gICAgLy8gVE9ETzogaW5zdGVhZCBvZiBpbmplY3RpbmcgdGhlIHN0YXJ0L2VuZCBhdCB0aGlzIHBvaW50LCBqdXN0IHJldHVyblxuICAgIC8vIHRoZSBCT0RZIG9mIHRoZSByZWdleHAsIGFsb25nIHdpdGggdGhlIHN0YXJ0L2VuZCBwb3J0aW9ucyBzdWl0YWJsZVxuICAgIC8vIGZvciBiaW5kaW5nIHRoZSBzdGFydC9lbmQgaW4gZWl0aGVyIGEgam9pbmVkIGZ1bGwtcGF0aCBtYWtlUmUgY29udGV4dFxuICAgIC8vICh3aGVyZSB3ZSBiaW5kIHRvIChefC8pLCBvciBhIHN0YW5kYWxvbmUgbWF0Y2hQYXJ0IGNvbnRleHQgKHdoZXJlXG4gICAgLy8gd2UgYmluZCB0byBeLCBhbmQgbm90IC8pLiAgT3RoZXJ3aXNlIHNsYXNoZXMgZ2V0IGR1cGVkIVxuICAgIC8vXG4gICAgLy8gSW4gcGFydC1tYXRjaGluZyBtb2RlLCB0aGUgc3RhcnQgaXM6XG4gICAgLy8gLSBpZiBub3QgaXNTdGFydDogbm90aGluZ1xuICAgIC8vIC0gaWYgdHJhdmVyc2FsIHBvc3NpYmxlLCBidXQgbm90IGFsbG93ZWQ6IF4oPyFcXC5cXC4/JClcbiAgICAvLyAtIGlmIGRvdHMgYWxsb3dlZCBvciBub3QgcG9zc2libGU6IF5cbiAgICAvLyAtIGlmIGRvdHMgcG9zc2libGUgYW5kIG5vdCBhbGxvd2VkOiBeKD8hXFwuKVxuICAgIC8vIGVuZCBpczpcbiAgICAvLyAtIGlmIG5vdCBpc0VuZCgpOiBub3RoaW5nXG4gICAgLy8gLSBlbHNlOiAkXG4gICAgLy9cbiAgICAvLyBJbiBmdWxsLXBhdGggbWF0Y2hpbmcgbW9kZSwgd2UgcHV0IHRoZSBzbGFzaCBhdCB0aGUgU1RBUlQgb2YgdGhlXG4gICAgLy8gcGF0dGVybiwgc28gc3RhcnQgaXM6XG4gICAgLy8gLSBpZiBmaXJzdCBwYXR0ZXJuOiBzYW1lIGFzIHBhcnQtbWF0Y2hpbmcgbW9kZVxuICAgIC8vIC0gaWYgbm90IGlzU3RhcnQoKTogbm90aGluZ1xuICAgIC8vIC0gaWYgdHJhdmVyc2FsIHBvc3NpYmxlLCBidXQgbm90IGFsbG93ZWQ6IC8oPyFcXC5cXC4/KD86JHwvKSlcbiAgICAvLyAtIGlmIGRvdHMgYWxsb3dlZCBvciBub3QgcG9zc2libGU6IC9cbiAgICAvLyAtIGlmIGRvdHMgcG9zc2libGUgYW5kIG5vdCBhbGxvd2VkOiAvKD8hXFwuKVxuICAgIC8vIGVuZCBpczpcbiAgICAvLyAtIGlmIGxhc3QgcGF0dGVybiwgc2FtZSBhcyBwYXJ0LW1hdGNoaW5nIG1vZGVcbiAgICAvLyAtIGVsc2Ugbm90aGluZ1xuICAgIC8vXG4gICAgLy8gQWx3YXlzIHB1dCB0aGUgKD86JHwvKSBvbiBuZWdhdGVkIHRhaWxzLCB0aG91Z2gsIGJlY2F1c2UgdGhhdCBoYXMgdG8gYmVcbiAgICAvLyB0aGVyZSB0byBiaW5kIHRoZSBlbmQgb2YgdGhlIG5lZ2F0ZWQgcGF0dGVybiBwb3J0aW9uLCBhbmQgaXQncyBlYXNpZXIgdG9cbiAgICAvLyBqdXN0IHN0aWNrIGl0IGluIG5vdyByYXRoZXIgdGhhbiB0cnkgdG8gaW5qZWN0IGl0IGxhdGVyIGluIHRoZSBtaWRkbGUgb2ZcbiAgICAvLyB0aGUgcGF0dGVybi5cbiAgICAvL1xuICAgIC8vIFdlIGNhbiBqdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgZW5kLCBhbmQgbGVhdmUgaXQgdXAgdG8gdGhlIGNhbGxlclxuICAgIC8vIHRvIGtub3cgd2hldGhlciBpdCdzIGdvaW5nIHRvIGJlIHVzZWQgam9pbmVkIG9yIGluIHBhcnRzLlxuICAgIC8vIEFuZCwgaWYgdGhlIHN0YXJ0IGlzIGFkanVzdGVkIHNsaWdodGx5LCBjYW4gZG8gdGhlIHNhbWUgdGhlcmU6XG4gICAgLy8gLSBpZiBub3QgaXNTdGFydDogbm90aGluZ1xuICAgIC8vIC0gaWYgdHJhdmVyc2FsIHBvc3NpYmxlLCBidXQgbm90IGFsbG93ZWQ6ICg/Oi98XikoPyFcXC5cXC4/JClcbiAgICAvLyAtIGlmIGRvdHMgYWxsb3dlZCBvciBub3QgcG9zc2libGU6ICg/Oi98XilcbiAgICAvLyAtIGlmIGRvdHMgcG9zc2libGUgYW5kIG5vdCBhbGxvd2VkOiAoPzovfF4pKD8hXFwuKVxuICAgIC8vXG4gICAgLy8gQnV0IGl0J3MgYmV0dGVyIHRvIGhhdmUgYSBzaW1wbGVyIGJpbmRpbmcgd2l0aG91dCBhIGNvbmRpdGlvbmFsLCBmb3JcbiAgICAvLyBwZXJmb3JtYW5jZSwgc28gcHJvYmFibHkgYmV0dGVyIHRvIHJldHVybiBib3RoIHN0YXJ0IG9wdGlvbnMuXG4gICAgLy9cbiAgICAvLyBUaGVuIHRoZSBjYWxsZXIganVzdCBpZ25vcmVzIHRoZSBlbmQgaWYgaXQncyBub3QgdGhlIGZpcnN0IHBhdHRlcm4sXG4gICAgLy8gYW5kIHRoZSBzdGFydCBhbHdheXMgZ2V0cyBhcHBsaWVkLlxuICAgIC8vXG4gICAgLy8gQnV0IHRoYXQncyBhbHdheXMgZ29pbmcgdG8gYmUgJCBpZiBpdCdzIHRoZSBlbmRpbmcgcGF0dGVybiwgb3Igbm90aGluZyxcbiAgICAvLyBzbyB0aGUgY2FsbGVyIGNhbiBqdXN0IGF0dGFjaCAkIGF0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4gd2hlbiBidWlsZGluZy5cbiAgICAvL1xuICAgIC8vIFNvIHRoZSB0b2RvIGlzOlxuICAgIC8vIC0gYmV0dGVyIGRldGVjdCB3aGF0IGtpbmQgb2Ygc3RhcnQgaXMgbmVlZGVkXG4gICAgLy8gLSByZXR1cm4gYm90aCBmbGF2b3JzIG9mIHN0YXJ0aW5nIHBhdHRlcm5cbiAgICAvLyAtIGF0dGFjaCAkIGF0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4gd2hlbiBjcmVhdGluZyB0aGUgYWN0dWFsIFJlZ0V4cFxuICAgIC8vXG4gICAgLy8gQWgsIGJ1dCB3YWl0LCBubywgdGhhdCBhbGwgb25seSBhcHBsaWVzIHRvIHRoZSByb290IHdoZW4gdGhlIGZpcnN0IHBhdHRlcm5cbiAgICAvLyBpcyBub3QgYW4gZXh0Z2xvYi4gSWYgdGhlIGZpcnN0IHBhdHRlcm4gSVMgYW4gZXh0Z2xvYiwgdGhlbiB3ZSBuZWVkIGFsbFxuICAgIC8vIHRoYXQgZG90IHByZXZlbnRpb24gYml6IHRvIGxpdmUgaW4gdGhlIGV4dGdsb2IgcG9ydGlvbnMsIGJlY2F1c2UgZWdcbiAgICAvLyArKCp8LngqKSBjYW4gbWF0Y2ggLnh5IGJ1dCBub3QgLnl4LlxuICAgIC8vXG4gICAgLy8gU28sIHJldHVybiB0aGUgdHdvIGZsYXZvcnMgaWYgaXQncyAjcm9vdCBhbmQgdGhlIGZpcnN0IGNoaWxkIGlzIG5vdCBhblxuICAgIC8vIEFTVCwgb3RoZXJ3aXNlIGxlYXZlIGl0IHRvIHRoZSBjaGlsZCBBU1QgdG8gaGFuZGxlIGl0LCBhbmQgdGhlcmUsXG4gICAgLy8gdXNlIHRoZSAoPzpefC8pIHN0eWxlIG9mIHN0YXJ0IGJpbmRpbmcuXG4gICAgLy9cbiAgICAvLyBFdmVuIHNpbXBsaWZpZWQgZnVydGhlcjpcbiAgICAvLyAtIFNpbmNlIHRoZSBzdGFydCBmb3IgYSBqb2luIGlzIGVnIC8oPyFcXC4pIGFuZCB0aGUgc3RhcnQgZm9yIGEgcGFydFxuICAgIC8vIGlzIF4oPyFcXC4pLCB3ZSBjYW4ganVzdCBwcmVwZW5kICg/IVxcLikgdG8gdGhlIHBhdHRlcm4gKGVpdGhlciByb290XG4gICAgLy8gb3Igc3RhcnQgb3Igd2hhdGV2ZXIpIGFuZCBwcmVwZW5kIF4gb3IgLyBhdCB0aGUgUmVnZXhwIGNvbnN0cnVjdGlvbi5cbiAgICB0b1JlZ0V4cFNvdXJjZShhbGxvd0RvdCkge1xuICAgICAgICBjb25zdCBkb3QgPSBhbGxvd0RvdCA/PyAhIXRoaXMuI29wdGlvbnMuZG90O1xuICAgICAgICBpZiAodGhpcy4jcm9vdCA9PT0gdGhpcykge1xuICAgICAgICAgICAgdGhpcy4jZmxhdHRlbigpO1xuICAgICAgICAgICAgdGhpcy4jZmlsbE5lZ3MoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRXh0Z2xvYkFTVCh0aGlzKSkge1xuICAgICAgICAgICAgY29uc3Qgbm9FbXB0eSA9IHRoaXMuaXNTdGFydCgpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5pc0VuZCgpICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI3BhcnRzLnNvbWUocyA9PiB0eXBlb2YgcyAhPT0gJ3N0cmluZycpO1xuICAgICAgICAgICAgY29uc3Qgc3JjID0gdGhpcy4jcGFydHNcbiAgICAgICAgICAgICAgICAubWFwKHAgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtyZSwgXywgaGFzTWFnaWMsIHVmbGFnXSA9IHR5cGVvZiBwID09PSAnc3RyaW5nJyA/XG4gICAgICAgICAgICAgICAgICAgIF9hLiNwYXJzZUdsb2IocCwgdGhpcy4jaGFzTWFnaWMsIG5vRW1wdHkpXG4gICAgICAgICAgICAgICAgICAgIDogcC50b1JlZ0V4cFNvdXJjZShhbGxvd0RvdCk7XG4gICAgICAgICAgICAgICAgdGhpcy4jaGFzTWFnaWMgPSB0aGlzLiNoYXNNYWdpYyB8fCBoYXNNYWdpYztcbiAgICAgICAgICAgICAgICB0aGlzLiN1ZmxhZyA9IHRoaXMuI3VmbGFnIHx8IHVmbGFnO1xuICAgICAgICAgICAgICAgIHJldHVybiByZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KCkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuI3BhcnRzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBzdHJpbmcgdGhhdCB3aWxsIG1hdGNoIHRoZSBzdGFydCBvZiB0aGUgcGF0dGVybixcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gd2UgbmVlZCB0byBwcm90ZWN0IGFnYWluc3QgZG90cyBhbmQgc3VjaC5cbiAgICAgICAgICAgICAgICAgICAgLy8gJy4nIGFuZCAnLi4nIGNhbm5vdCBtYXRjaCB1bmxlc3MgdGhlIHBhdHRlcm4gaXMgdGhhdCBleGFjdGx5LFxuICAgICAgICAgICAgICAgICAgICAvLyBldmVuIGlmIGl0IHN0YXJ0cyB3aXRoIC4gb3IgZG90OnRydWUgaXMgc2V0LlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3RUcmF2QWxsb3dlZCA9IHRoaXMuI3BhcnRzLmxlbmd0aCA9PT0gMSAmJiBqdXN0RG90cy5oYXModGhpcy4jcGFydHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRvdFRyYXZBbGxvd2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHMgPSBhZGRQYXR0ZXJuU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBoYXZlIGEgcG9zc2liaWxpdHkgb2YgbWF0Y2hpbmcgLiBvciAuLixcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBwcmV2ZW50IHRoYXQuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZWVkTm9UcmF2ID0gXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkb3RzIGFyZSBhbGxvd2VkLCBhbmQgdGhlIHBhdHRlcm4gc3RhcnRzIHdpdGggWyBvciAuXG4gICAgICAgICAgICAgICAgICAgICAgICAoZG90ICYmIGFwcy5oYXMoc3JjLmNoYXJBdCgwKSkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHBhdHRlcm4gc3RhcnRzIHdpdGggXFwuLCBhbmQgdGhlbiBbIG9yIC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3JjLnN0YXJ0c1dpdGgoJ1xcXFwuJykgJiYgYXBzLmhhcyhzcmMuY2hhckF0KDIpKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcGF0dGVybiBzdGFydHMgd2l0aCBcXC5cXC4sIGFuZCB0aGVuIFsgb3IgLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzcmMuc3RhcnRzV2l0aCgnXFxcXC5cXFxcLicpICYmIGFwcy5oYXMoc3JjLmNoYXJBdCg0KSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gbmVlZCB0byBwcmV2ZW50IGRvdHMgaWYgaXQgY2FuJ3QgbWF0Y2ggYSBkb3QsIG9yIGlmIGFcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1Yi1wYXR0ZXJuIHdpbGwgYmUgcHJldmVudGluZyBpdCBhbnl3YXkuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZWVkTm9Eb3QgPSAhZG90ICYmICFhbGxvd0RvdCAmJiBhcHMuaGFzKHNyYy5jaGFyQXQoMCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWROb1RyYXYgPyBzdGFydE5vVHJhdmVyc2FsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbmVlZE5vRG90ID8gc3RhcnROb0RvdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFwcGVuZCB0aGUgXCJlbmQgb2YgcGF0aCBwb3J0aW9uXCIgcGF0dGVybiB0byBuZWdhdGlvbiB0YWlsc1xuICAgICAgICAgICAgbGV0IGVuZCA9ICcnO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNFbmQoKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuI3Jvb3QuI2ZpbGxlZE5lZ3MgJiZcbiAgICAgICAgICAgICAgICB0aGlzLiNwYXJlbnQ/LnR5cGUgPT09ICchJykge1xuICAgICAgICAgICAgICAgIGVuZCA9ICcoPzokfFxcXFwvKSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmaW5hbCA9IHN0YXJ0ICsgc3JjICsgZW5kO1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBmaW5hbCxcbiAgICAgICAgICAgICAgICB1bmVzY2FwZShzcmMpLFxuICAgICAgICAgICAgICAgICh0aGlzLiNoYXNNYWdpYyA9ICEhdGhpcy4jaGFzTWFnaWMpLFxuICAgICAgICAgICAgICAgIHRoaXMuI3VmbGFnLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgYm9keSAqdHdpY2UqIGlmIGl0J3MgYSByZXBlYXQgcGF0dGVyblxuICAgICAgICAvLyBhdCB0aGUgc3RhcnQsIG9uY2UgaW4gbm9kb3QgbW9kZSwgdGhlbiBhZ2FpbiBpbiBkb3QgbW9kZSwgc28gYVxuICAgICAgICAvLyBwYXR0ZXJuIGxpa2UgKig/KSBjYW4gbWF0Y2ggJ3gueSdcbiAgICAgICAgY29uc3QgcmVwZWF0ZWQgPSB0aGlzLnR5cGUgPT09ICcqJyB8fCB0aGlzLnR5cGUgPT09ICcrJztcbiAgICAgICAgLy8gc29tZSBraW5kIG9mIGV4dGdsb2JcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnR5cGUgPT09ICchJyA/ICcoPzooPyEoPzonIDogJyg/Oic7XG4gICAgICAgIGxldCBib2R5ID0gdGhpcy4jcGFydHNUb1JlZ0V4cChkb3QpO1xuICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KCkgJiYgdGhpcy5pc0VuZCgpICYmICFib2R5ICYmIHRoaXMudHlwZSAhPT0gJyEnKSB7XG4gICAgICAgICAgICAvLyBpbnZhbGlkIGV4dGdsb2IsIGhhcyB0byBhdCBsZWFzdCBiZSAqc29tZXRoaW5nKiBwcmVzZW50LCBpZiBpdCdzXG4gICAgICAgICAgICAvLyB0aGUgZW50aXJlIHBhdGggcG9ydGlvbi5cbiAgICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgICAgICAgICBtZS4jcGFydHMgPSBbc107XG4gICAgICAgICAgICBtZS50eXBlID0gbnVsbDtcbiAgICAgICAgICAgIG1lLiNoYXNNYWdpYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBbcywgdW5lc2NhcGUodGhpcy50b1N0cmluZygpKSwgZmFsc2UsIGZhbHNlXTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYm9keURvdEFsbG93ZWQgPSAhcmVwZWF0ZWQgfHwgYWxsb3dEb3QgfHwgZG90IHx8ICFzdGFydE5vRG90ID9cbiAgICAgICAgICAgICcnXG4gICAgICAgICAgICA6IHRoaXMuI3BhcnRzVG9SZWdFeHAodHJ1ZSk7XG4gICAgICAgIGlmIChib2R5RG90QWxsb3dlZCA9PT0gYm9keSkge1xuICAgICAgICAgICAgYm9keURvdEFsbG93ZWQgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9keURvdEFsbG93ZWQpIHtcbiAgICAgICAgICAgIGJvZHkgPSBgKD86JHtib2R5fSkoPzoke2JvZHlEb3RBbGxvd2VkfSkqP2A7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYW4gZW1wdHkgISgpIGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0byBhIHN0YXJOb0VtcHR5XG4gICAgICAgIGxldCBmaW5hbCA9ICcnO1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnIScgJiYgdGhpcy4jZW1wdHlFeHQpIHtcbiAgICAgICAgICAgIGZpbmFsID0gKHRoaXMuaXNTdGFydCgpICYmICFkb3QgPyBzdGFydE5vRG90IDogJycpICsgc3Rhck5vRW1wdHk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjbG9zZSA9IHRoaXMudHlwZSA9PT0gJyEnID9cbiAgICAgICAgICAgICAgICAvLyAhKCkgbXVzdCBtYXRjaCBzb21ldGhpbmcsYnV0ICEoeCkgY2FuIG1hdGNoICcnXG4gICAgICAgICAgICAgICAgJykpJyArXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmlzU3RhcnQoKSAmJiAhZG90ICYmICFhbGxvd0RvdCA/IHN0YXJ0Tm9Eb3QgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICBzdGFyICtcbiAgICAgICAgICAgICAgICAgICAgJyknXG4gICAgICAgICAgICAgICAgOiB0aGlzLnR5cGUgPT09ICdAJyA/ICcpJ1xuICAgICAgICAgICAgICAgICAgICA6IHRoaXMudHlwZSA9PT0gJz8nID8gJyk/J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnR5cGUgPT09ICcrJyAmJiBib2R5RG90QWxsb3dlZCA/ICcpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy50eXBlID09PSAnKicgJiYgYm9keURvdEFsbG93ZWQgPyBgKT9gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYCkke3RoaXMudHlwZX1gO1xuICAgICAgICAgICAgZmluYWwgPSBzdGFydCArIGJvZHkgKyBjbG9zZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgZmluYWwsXG4gICAgICAgICAgICB1bmVzY2FwZShib2R5KSxcbiAgICAgICAgICAgICh0aGlzLiNoYXNNYWdpYyA9ICEhdGhpcy4jaGFzTWFnaWMpLFxuICAgICAgICAgICAgdGhpcy4jdWZsYWcsXG4gICAgICAgIF07XG4gICAgfVxuICAgICNmbGF0dGVuKCkge1xuICAgICAgICBpZiAoIWlzRXh0Z2xvYkFTVCh0aGlzKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXMuI3BhcnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBwLiNmbGF0dGVuKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZG8gdXAgdG8gMTAgcGFzc2VzIHRvIGZsYXR0ZW4gYXMgbXVjaCBhcyBwb3NzaWJsZVxuICAgICAgICAgICAgbGV0IGl0ZXJhdGlvbnMgPSAwO1xuICAgICAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuI3BhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLiNwYXJ0c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYy4jZmxhdHRlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI2NhbkFkb3B0KGMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2Fkb3B0KGMsIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy4jY2FuQWRvcHRXaXRoU3BhY2UoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jYWRvcHRXaXRoU3BhY2UoYywgaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLiNjYW5Vc3VycChjKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiN1c3VycChjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKCFkb25lICYmICsraXRlcmF0aW9ucyA8IDEwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiN0b1N0cmluZyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgI3BhcnRzVG9SZWdFeHAoZG90KSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwYXJ0c1xuICAgICAgICAgICAgLm1hcChwID0+IHtcbiAgICAgICAgICAgIC8vIGV4dGdsb2IgQVNUcyBzaG91bGQgb25seSBjb250YWluIHBhcmVudCBBU1RzXG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cmluZyB0eXBlIGluIGV4dGdsb2IgYXN0Pz8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAvLyBjYW4gaWdub3JlIGhhc01hZ2ljLCBiZWNhdXNlIGV4dGdsb2JzIGFyZSBhbHJlYWR5IGFsd2F5cyBtYWdpY1xuICAgICAgICAgICAgY29uc3QgW3JlLCBfLCBfaGFzTWFnaWMsIHVmbGFnXSA9IHAudG9SZWdFeHBTb3VyY2UoZG90KTtcbiAgICAgICAgICAgIHRoaXMuI3VmbGFnID0gdGhpcy4jdWZsYWcgfHwgdWZsYWc7XG4gICAgICAgICAgICByZXR1cm4gcmU7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKHAgPT4gISh0aGlzLmlzU3RhcnQoKSAmJiB0aGlzLmlzRW5kKCkpIHx8ICEhcClcbiAgICAgICAgICAgIC5qb2luKCd8Jyk7XG4gICAgfVxuICAgIHN0YXRpYyAjcGFyc2VHbG9iKGdsb2IsIGhhc01hZ2ljLCBub0VtcHR5ID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IGVzY2FwaW5nID0gZmFsc2U7XG4gICAgICAgIGxldCByZSA9ICcnO1xuICAgICAgICBsZXQgdWZsYWcgPSBmYWxzZTtcbiAgICAgICAgLy8gbXVsdGlwbGUgc3RhcnMgdGhhdCBhcmVuJ3QgZ2xvYnN0YXJzIGNvYWxlc2NlIGludG8gb25lICpcbiAgICAgICAgbGV0IGluU3RhciA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdsb2IubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBnbG9iLmNoYXJBdChpKTtcbiAgICAgICAgICAgIGlmIChlc2NhcGluZykge1xuICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmUgKz0gKHJlU3BlY2lhbHMuaGFzKGMpID8gJ1xcXFwnIDogJycpICsgYztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnKicpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5TdGFyKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpblN0YXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlICs9IG5vRW1wdHkgJiYgL15bKl0rJC8udGVzdChnbG9iKSA/IHN0YXJOb0VtcHR5IDogc3RhcjtcbiAgICAgICAgICAgICAgICBoYXNNYWdpYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpblN0YXIgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gZ2xvYi5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlICs9ICdcXFxcXFxcXCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlc2NhcGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09ICdbJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtzcmMsIG5lZWRVZmxhZywgY29uc3VtZWQsIG1hZ2ljXSA9IHBhcnNlQ2xhc3MoZ2xvYiwgaSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnN1bWVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlICs9IHNyYztcbiAgICAgICAgICAgICAgICAgICAgdWZsYWcgPSB1ZmxhZyB8fCBuZWVkVWZsYWc7XG4gICAgICAgICAgICAgICAgICAgIGkgKz0gY29uc3VtZWQgLSAxO1xuICAgICAgICAgICAgICAgICAgICBoYXNNYWdpYyA9IGhhc01hZ2ljIHx8IG1hZ2ljO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJz8nKSB7XG4gICAgICAgICAgICAgICAgcmUgKz0gcW1hcms7XG4gICAgICAgICAgICAgICAgaGFzTWFnaWMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmUgKz0gcmVnRXhwRXNjYXBlKGMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcmUsIHVuZXNjYXBlKGdsb2IpLCAhIWhhc01hZ2ljLCB1ZmxhZ107XG4gICAgfVxufVxuX2EgPSBBU1Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hc3QuanMubWFwIiwKICAgICIvKipcbiAqIEVzY2FwZSBhbGwgbWFnaWMgY2hhcmFjdGVycyBpbiBhIGdsb2IgcGF0dGVybi5cbiAqXG4gKiBJZiB0aGUge0BsaW5rIE1pbmltYXRjaE9wdGlvbnMud2luZG93c1BhdGhzTm9Fc2NhcGV9XG4gKiBvcHRpb24gaXMgdXNlZCwgdGhlbiBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkIGJ5IHdyYXBwaW5nIGluIGBbXWAsIGJlY2F1c2VcbiAqIGEgbWFnaWMgY2hhcmFjdGVyIHdyYXBwZWQgaW4gYSBjaGFyYWN0ZXIgY2xhc3MgY2FuIG9ubHkgYmUgc2F0aXNmaWVkIGJ5XG4gKiB0aGF0IGV4YWN0IGNoYXJhY3Rlci4gIEluIHRoaXMgbW9kZSwgYFxcYCBpcyBfbm90XyBlc2NhcGVkLCBiZWNhdXNlIGl0IGlzXG4gKiBub3QgaW50ZXJwcmV0ZWQgYXMgYSBtYWdpYyBjaGFyYWN0ZXIsIGJ1dCBpbnN0ZWFkIGFzIGEgcGF0aCBzZXBhcmF0b3IuXG4gKlxuICogSWYgdGhlIHtAbGluayBNaW5pbWF0Y2hPcHRpb25zLm1hZ2ljYWxCcmFjZXN9IG9wdGlvbiBpcyB1c2VkLFxuICogdGhlbiBicmFjZXMgKGB7YCBhbmQgYH1gKSB3aWxsIGJlIGVzY2FwZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBlc2NhcGUgPSAocywgeyB3aW5kb3dzUGF0aHNOb0VzY2FwZSA9IGZhbHNlLCBtYWdpY2FsQnJhY2VzID0gZmFsc2UsIH0gPSB7fSkgPT4ge1xuICAgIC8vIGRvbid0IG5lZWQgdG8gZXNjYXBlICtAISBiZWNhdXNlIHdlIGVzY2FwZSB0aGUgcGFyZW5zXG4gICAgLy8gdGhhdCBtYWtlIHRob3NlIG1hZ2ljLCBhbmQgZXNjYXBpbmcgISBhcyBbIV0gaXNuJ3QgdmFsaWQsXG4gICAgLy8gYmVjYXVzZSBbIV1dIGlzIGEgdmFsaWQgZ2xvYiBjbGFzcyBtZWFuaW5nIG5vdCAnXScuXG4gICAgaWYgKG1hZ2ljYWxCcmFjZXMpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvd3NQYXRoc05vRXNjYXBlID9cbiAgICAgICAgICAgIHMucmVwbGFjZSgvWz8qKClbXFxde31dL2csICdbJCZdJylcbiAgICAgICAgICAgIDogcy5yZXBsYWNlKC9bPyooKVtcXF1cXFxce31dL2csICdcXFxcJCYnKTtcbiAgICB9XG4gICAgcmV0dXJuIHdpbmRvd3NQYXRoc05vRXNjYXBlID9cbiAgICAgICAgcy5yZXBsYWNlKC9bPyooKVtcXF1dL2csICdbJCZdJylcbiAgICAgICAgOiBzLnJlcGxhY2UoL1s/KigpW1xcXVxcXFxdL2csICdcXFxcJCYnKTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lc2NhcGUuanMubWFwIiwKICAgICJpbXBvcnQgeyBleHBhbmQgfSBmcm9tICdicmFjZS1leHBhbnNpb24nO1xuaW1wb3J0IHsgYXNzZXJ0VmFsaWRQYXR0ZXJuIH0gZnJvbSAnLi9hc3NlcnQtdmFsaWQtcGF0dGVybi5qcyc7XG5pbXBvcnQgeyBBU1QgfSBmcm9tICcuL2FzdC5qcyc7XG5pbXBvcnQgeyBlc2NhcGUgfSBmcm9tICcuL2VzY2FwZS5qcyc7XG5pbXBvcnQgeyB1bmVzY2FwZSB9IGZyb20gJy4vdW5lc2NhcGUuanMnO1xuZXhwb3J0IGNvbnN0IG1pbmltYXRjaCA9IChwLCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBhc3NlcnRWYWxpZFBhdHRlcm4ocGF0dGVybik7XG4gICAgLy8gc2hvcnRjdXQ6IGNvbW1lbnRzIG1hdGNoIG5vdGhpbmcuXG4gICAgaWYgKCFvcHRpb25zLm5vY29tbWVudCAmJiBwYXR0ZXJuLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucykubWF0Y2gocCk7XG59O1xuLy8gT3B0aW1pemVkIGNoZWNraW5nIGZvciB0aGUgbW9zdCBjb21tb24gZ2xvYiBwYXR0ZXJucy5cbmNvbnN0IHN0YXJEb3RFeHRSRSA9IC9eXFwqKyhbXitAIT8qWyhdKikkLztcbmNvbnN0IHN0YXJEb3RFeHRUZXN0ID0gKGV4dCkgPT4gKGYpID0+ICFmLnN0YXJ0c1dpdGgoJy4nKSAmJiBmLmVuZHNXaXRoKGV4dCk7XG5jb25zdCBzdGFyRG90RXh0VGVzdERvdCA9IChleHQpID0+IChmKSA9PiBmLmVuZHNXaXRoKGV4dCk7XG5jb25zdCBzdGFyRG90RXh0VGVzdE5vY2FzZSA9IChleHQpID0+IHtcbiAgICBleHQgPSBleHQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGYpID0+ICFmLnN0YXJ0c1dpdGgoJy4nKSAmJiBmLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBzdGFyRG90RXh0VGVzdE5vY2FzZURvdCA9IChleHQpID0+IHtcbiAgICBleHQgPSBleHQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGYpID0+IGYudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHN0YXJEb3RTdGFyUkUgPSAvXlxcKitcXC5cXCorJC87XG5jb25zdCBzdGFyRG90U3RhclRlc3QgPSAoZikgPT4gIWYuc3RhcnRzV2l0aCgnLicpICYmIGYuaW5jbHVkZXMoJy4nKTtcbmNvbnN0IHN0YXJEb3RTdGFyVGVzdERvdCA9IChmKSA9PiBmICE9PSAnLicgJiYgZiAhPT0gJy4uJyAmJiBmLmluY2x1ZGVzKCcuJyk7XG5jb25zdCBkb3RTdGFyUkUgPSAvXlxcLlxcKiskLztcbmNvbnN0IGRvdFN0YXJUZXN0ID0gKGYpID0+IGYgIT09ICcuJyAmJiBmICE9PSAnLi4nICYmIGYuc3RhcnRzV2l0aCgnLicpO1xuY29uc3Qgc3RhclJFID0gL15cXCorJC87XG5jb25zdCBzdGFyVGVzdCA9IChmKSA9PiBmLmxlbmd0aCAhPT0gMCAmJiAhZi5zdGFydHNXaXRoKCcuJyk7XG5jb25zdCBzdGFyVGVzdERvdCA9IChmKSA9PiBmLmxlbmd0aCAhPT0gMCAmJiBmICE9PSAnLicgJiYgZiAhPT0gJy4uJztcbmNvbnN0IHFtYXJrc1JFID0gL15cXD8rKFteK0AhPypbKF0qKT8kLztcbmNvbnN0IHFtYXJrc1Rlc3ROb2Nhc2UgPSAoWyQwLCBleHQgPSAnJ10pID0+IHtcbiAgICBjb25zdCBub2V4dCA9IHFtYXJrc1Rlc3ROb0V4dChbJDBdKTtcbiAgICBpZiAoIWV4dClcbiAgICAgICAgcmV0dXJuIG5vZXh0O1xuICAgIGV4dCA9IGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoZikgPT4gbm9leHQoZikgJiYgZi50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3QgcW1hcmtzVGVzdE5vY2FzZURvdCA9IChbJDAsIGV4dCA9ICcnXSkgPT4ge1xuICAgIGNvbnN0IG5vZXh0ID0gcW1hcmtzVGVzdE5vRXh0RG90KFskMF0pO1xuICAgIGlmICghZXh0KVxuICAgICAgICByZXR1cm4gbm9leHQ7XG4gICAgZXh0ID0gZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIChmKSA9PiBub2V4dChmKSAmJiBmLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBxbWFya3NUZXN0RG90ID0gKFskMCwgZXh0ID0gJyddKSA9PiB7XG4gICAgY29uc3Qgbm9leHQgPSBxbWFya3NUZXN0Tm9FeHREb3QoWyQwXSk7XG4gICAgcmV0dXJuICFleHQgPyBub2V4dCA6IChmKSA9PiBub2V4dChmKSAmJiBmLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3QgcW1hcmtzVGVzdCA9IChbJDAsIGV4dCA9ICcnXSkgPT4ge1xuICAgIGNvbnN0IG5vZXh0ID0gcW1hcmtzVGVzdE5vRXh0KFskMF0pO1xuICAgIHJldHVybiAhZXh0ID8gbm9leHQgOiAoZikgPT4gbm9leHQoZikgJiYgZi5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHFtYXJrc1Rlc3ROb0V4dCA9IChbJDBdKSA9PiB7XG4gICAgY29uc3QgbGVuID0gJDAubGVuZ3RoO1xuICAgIHJldHVybiAoZikgPT4gZi5sZW5ndGggPT09IGxlbiAmJiAhZi5zdGFydHNXaXRoKCcuJyk7XG59O1xuY29uc3QgcW1hcmtzVGVzdE5vRXh0RG90ID0gKFskMF0pID0+IHtcbiAgICBjb25zdCBsZW4gPSAkMC5sZW5ndGg7XG4gICAgcmV0dXJuIChmKSA9PiBmLmxlbmd0aCA9PT0gbGVuICYmIGYgIT09ICcuJyAmJiBmICE9PSAnLi4nO1xufTtcbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuY29uc3QgZGVmYXVsdFBsYXRmb3JtID0gKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiBwcm9jZXNzID9cbiAgICAodHlwZW9mIHByb2Nlc3MuZW52ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICBwcm9jZXNzLmVudiAmJlxuICAgICAgICBwcm9jZXNzLmVudi5fX01JTklNQVRDSF9URVNUSU5HX1BMQVRGT1JNX18pIHx8XG4gICAgICAgIHByb2Nlc3MucGxhdGZvcm1cbiAgICA6ICdwb3NpeCcpO1xuY29uc3QgcGF0aCA9IHtcbiAgICB3aW4zMjogeyBzZXA6ICdcXFxcJyB9LFxuICAgIHBvc2l4OiB7IHNlcDogJy8nIH0sXG59O1xuLyogYzggaWdub3JlIHN0b3AgKi9cbmV4cG9ydCBjb25zdCBzZXAgPSBkZWZhdWx0UGxhdGZvcm0gPT09ICd3aW4zMicgPyBwYXRoLndpbjMyLnNlcCA6IHBhdGgucG9zaXguc2VwO1xubWluaW1hdGNoLnNlcCA9IHNlcDtcbmV4cG9ydCBjb25zdCBHTE9CU1RBUiA9IFN5bWJvbCgnZ2xvYnN0YXIgKionKTtcbm1pbmltYXRjaC5HTE9CU1RBUiA9IEdMT0JTVEFSO1xuLy8gYW55IHNpbmdsZSB0aGluZyBvdGhlciB0aGFuIC9cbi8vIGRvbid0IG5lZWQgdG8gZXNjYXBlIC8gd2hlbiB1c2luZyBuZXcgUmVnRXhwKClcbmNvbnN0IHFtYXJrID0gJ1teL10nO1xuLy8gKiA9PiBhbnkgbnVtYmVyIG9mIGNoYXJhY3RlcnNcbmNvbnN0IHN0YXIgPSBxbWFyayArICcqPyc7XG4vLyAqKiB3aGVuIGRvdHMgYXJlIGFsbG93ZWQuICBBbnl0aGluZyBnb2VzLCBleGNlcHQgLi4gYW5kIC5cbi8vIG5vdCAoXiBvciAvIGZvbGxvd2VkIGJ5IG9uZSBvciB0d28gZG90cyBmb2xsb3dlZCBieSAkIG9yIC8pLFxuLy8gZm9sbG93ZWQgYnkgYW55dGhpbmcsIGFueSBudW1iZXIgb2YgdGltZXMuXG5jb25zdCB0d29TdGFyRG90ID0gJyg/Oig/ISg/OlxcXFwvfF4pKD86XFxcXC57MSwyfSkoJHxcXFxcLykpLikqPyc7XG4vLyBub3QgYSBeIG9yIC8gZm9sbG93ZWQgYnkgYSBkb3QsXG4vLyBmb2xsb3dlZCBieSBhbnl0aGluZywgYW55IG51bWJlciBvZiB0aW1lcy5cbmNvbnN0IHR3b1N0YXJOb0RvdCA9ICcoPzooPyEoPzpcXFxcL3xeKVxcXFwuKS4pKj8nO1xuZXhwb3J0IGNvbnN0IGZpbHRlciA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IChwKSA9PiBtaW5pbWF0Y2gocCwgcGF0dGVybiwgb3B0aW9ucyk7XG5taW5pbWF0Y2guZmlsdGVyID0gZmlsdGVyO1xuY29uc3QgZXh0ID0gKGEsIGIgPSB7fSkgPT4gT2JqZWN0LmFzc2lnbih7fSwgYSwgYik7XG5leHBvcnQgY29uc3QgZGVmYXVsdHMgPSAoZGVmKSA9PiB7XG4gICAgaWYgKCFkZWYgfHwgdHlwZW9mIGRlZiAhPT0gJ29iamVjdCcgfHwgIU9iamVjdC5rZXlzKGRlZikubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBtaW5pbWF0Y2g7XG4gICAgfVxuICAgIGNvbnN0IG9yaWcgPSBtaW5pbWF0Y2g7XG4gICAgY29uc3QgbSA9IChwLCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG9yaWcocCwgcGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG0sIHtcbiAgICAgICAgTWluaW1hdGNoOiBjbGFzcyBNaW5pbWF0Y2ggZXh0ZW5kcyBvcmlnLk1pbmltYXRjaCB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgICAgICBzdXBlcihwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0aWMgZGVmYXVsdHMob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnLmRlZmF1bHRzKGV4dChkZWYsIG9wdGlvbnMpKS5NaW5pbWF0Y2g7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIEFTVDogY2xhc3MgQVNUIGV4dGVuZHMgb3JpZy5BU1Qge1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBjb25zdHJ1Y3Rvcih0eXBlLCBwYXJlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgICAgIHN1cGVyKHR5cGUsIHBhcmVudCwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHN0YXRpYyBmcm9tR2xvYihwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZy5BU1QuZnJvbUdsb2IocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1bmVzY2FwZTogKHMsIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy51bmVzY2FwZShzLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIGVzY2FwZTogKHMsIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy5lc2NhcGUocywgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBmaWx0ZXI6IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG9yaWcuZmlsdGVyKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgZGVmYXVsdHM6IChvcHRpb25zKSA9PiBvcmlnLmRlZmF1bHRzKGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgbWFrZVJlOiAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLm1ha2VSZShwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIGJyYWNlRXhwYW5kOiAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLmJyYWNlRXhwYW5kKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgbWF0Y2g6IChsaXN0LCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG9yaWcubWF0Y2gobGlzdCwgcGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBzZXA6IG9yaWcuc2VwLFxuICAgICAgICBHTE9CU1RBUjogR0xPQlNUQVIsXG4gICAgfSk7XG59O1xubWluaW1hdGNoLmRlZmF1bHRzID0gZGVmYXVsdHM7XG4vLyBCcmFjZSBleHBhbnNpb246XG4vLyBhe2IsY31kIC0+IGFiZCBhY2Rcbi8vIGF7Yix9YyAtPiBhYmMgYWNcbi8vIGF7MC4uM31kIC0+IGEwZCBhMWQgYTJkIGEzZFxuLy8gYXtiLGN7ZCxlfWZ9ZyAtPiBhYmcgYWNkZmcgYWNlZmdcbi8vIGF7YixjfWR7ZSxmfWcgLT4gYWJkZWcgYWNkZWcgYWJkZWcgYWJkZmdcbi8vXG4vLyBJbnZhbGlkIHNldHMgYXJlIG5vdCBleHBhbmRlZC5cbi8vIGF7Mi4ufWIgLT4gYXsyLi59YlxuLy8gYXtifWMgLT4gYXtifWNcbmV4cG9ydCBjb25zdCBicmFjZUV4cGFuZCA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBhc3NlcnRWYWxpZFBhdHRlcm4ocGF0dGVybik7XG4gICAgLy8gVGhhbmtzIHRvIFlldGluZyBMaSA8aHR0cHM6Ly9naXRodWIuY29tL3lldGluZ2xpPiBmb3JcbiAgICAvLyBpbXByb3ZpbmcgdGhpcyByZWdleHAgdG8gYXZvaWQgYSBSZURPUyB2dWxuZXJhYmlsaXR5LlxuICAgIGlmIChvcHRpb25zLm5vYnJhY2UgfHwgIS9cXHsoPzooPyFcXHspLikqXFx9Ly50ZXN0KHBhdHRlcm4pKSB7XG4gICAgICAgIC8vIHNob3J0Y3V0LiBubyBuZWVkIHRvIGV4cGFuZC5cbiAgICAgICAgcmV0dXJuIFtwYXR0ZXJuXTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGFuZChwYXR0ZXJuLCB7IG1heDogb3B0aW9ucy5icmFjZUV4cGFuZE1heCB9KTtcbn07XG5taW5pbWF0Y2guYnJhY2VFeHBhbmQgPSBicmFjZUV4cGFuZDtcbi8vIHBhcnNlIGEgY29tcG9uZW50IG9mIHRoZSBleHBhbmRlZCBzZXQuXG4vLyBBdCB0aGlzIHBvaW50LCBubyBwYXR0ZXJuIG1heSBjb250YWluIFwiL1wiIGluIGl0XG4vLyBzbyB3ZSdyZSBnb2luZyB0byByZXR1cm4gYSAyZCBhcnJheSwgd2hlcmUgZWFjaCBlbnRyeSBpcyB0aGUgZnVsbFxuLy8gcGF0dGVybiwgc3BsaXQgb24gJy8nLCBhbmQgdGhlbiB0dXJuZWQgaW50byBhIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbi8vIEEgcmVnZXhwIGlzIG1hZGUgYXQgdGhlIGVuZCB3aGljaCBqb2lucyBlYWNoIGFycmF5IHdpdGggYW5cbi8vIGVzY2FwZWQgLywgYW5kIGFub3RoZXIgZnVsbCBvbmUgd2hpY2ggam9pbnMgZWFjaCByZWdleHAgd2l0aCB8LlxuLy9cbi8vIEZvbGxvd2luZyB0aGUgbGVhZCBvZiBCYXNoIDQuMSwgbm90ZSB0aGF0IFwiKipcIiBvbmx5IGhhcyBzcGVjaWFsIG1lYW5pbmdcbi8vIHdoZW4gaXQgaXMgdGhlICpvbmx5KiB0aGluZyBpbiBhIHBhdGggcG9ydGlvbi4gIE90aGVyd2lzZSwgYW55IHNlcmllc1xuLy8gb2YgKiBpcyBlcXVpdmFsZW50IHRvIGEgc2luZ2xlICouICBHbG9ic3RhciBiZWhhdmlvciBpcyBlbmFibGVkIGJ5XG4vLyBkZWZhdWx0LCBhbmQgY2FuIGJlIGRpc2FibGVkIGJ5IHNldHRpbmcgb3B0aW9ucy5ub2dsb2JzdGFyLlxuZXhwb3J0IGNvbnN0IG1ha2VSZSA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucykubWFrZVJlKCk7XG5taW5pbWF0Y2gubWFrZVJlID0gbWFrZVJlO1xuZXhwb3J0IGNvbnN0IG1hdGNoID0gKGxpc3QsIHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IG1tID0gbmV3IE1pbmltYXRjaChwYXR0ZXJuLCBvcHRpb25zKTtcbiAgICBsaXN0ID0gbGlzdC5maWx0ZXIoZiA9PiBtbS5tYXRjaChmKSk7XG4gICAgaWYgKG1tLm9wdGlvbnMubm9udWxsICYmICFsaXN0Lmxlbmd0aCkge1xuICAgICAgICBsaXN0LnB1c2gocGF0dGVybik7XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xufTtcbm1pbmltYXRjaC5tYXRjaCA9IG1hdGNoO1xuLy8gcmVwbGFjZSBzdHVmZiBsaWtlIFxcKiB3aXRoICpcbmNvbnN0IGdsb2JNYWdpYyA9IC9bPypdfFsrQCFdXFwoLio/XFwpfFxcW3xcXF0vO1xuY29uc3QgcmVnRXhwRXNjYXBlID0gKHMpID0+IHMucmVwbGFjZSgvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2csICdcXFxcJCYnKTtcbmV4cG9ydCBjbGFzcyBNaW5pbWF0Y2gge1xuICAgIG9wdGlvbnM7XG4gICAgc2V0O1xuICAgIHBhdHRlcm47XG4gICAgd2luZG93c1BhdGhzTm9Fc2NhcGU7XG4gICAgbm9uZWdhdGU7XG4gICAgbmVnYXRlO1xuICAgIGNvbW1lbnQ7XG4gICAgZW1wdHk7XG4gICAgcHJlc2VydmVNdWx0aXBsZVNsYXNoZXM7XG4gICAgcGFydGlhbDtcbiAgICBnbG9iU2V0O1xuICAgIGdsb2JQYXJ0cztcbiAgICBub2Nhc2U7XG4gICAgaXNXaW5kb3dzO1xuICAgIHBsYXRmb3JtO1xuICAgIHdpbmRvd3NOb01hZ2ljUm9vdDtcbiAgICBtYXhHbG9ic3RhclJlY3Vyc2lvbjtcbiAgICByZWdleHA7XG4gICAgY29uc3RydWN0b3IocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGFzc2VydFZhbGlkUGF0dGVybihwYXR0ZXJuKTtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMubWF4R2xvYnN0YXJSZWN1cnNpb24gPSBvcHRpb25zLm1heEdsb2JzdGFyUmVjdXJzaW9uID8/IDIwMDtcbiAgICAgICAgdGhpcy5wYXR0ZXJuID0gcGF0dGVybjtcbiAgICAgICAgdGhpcy5wbGF0Zm9ybSA9IG9wdGlvbnMucGxhdGZvcm0gfHwgZGVmYXVsdFBsYXRmb3JtO1xuICAgICAgICB0aGlzLmlzV2luZG93cyA9IHRoaXMucGxhdGZvcm0gPT09ICd3aW4zMic7XG4gICAgICAgIC8vIGF2b2lkIHRoZSBhbm5veWluZyBkZXByZWNhdGlvbiBmbGFnIGxvbFxuICAgICAgICBjb25zdCBhd2UgPSAoJ2FsbG93V2luZG93JyArICdzRXNjYXBlJyk7XG4gICAgICAgIHRoaXMud2luZG93c1BhdGhzTm9Fc2NhcGUgPVxuICAgICAgICAgICAgISFvcHRpb25zLndpbmRvd3NQYXRoc05vRXNjYXBlIHx8IG9wdGlvbnNbYXdlXSA9PT0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlKSB7XG4gICAgICAgICAgICB0aGlzLnBhdHRlcm4gPSB0aGlzLnBhdHRlcm4ucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXMgPSAhIW9wdGlvbnMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXM7XG4gICAgICAgIHRoaXMucmVnZXhwID0gbnVsbDtcbiAgICAgICAgdGhpcy5uZWdhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub25lZ2F0ZSA9ICEhb3B0aW9ucy5ub25lZ2F0ZTtcbiAgICAgICAgdGhpcy5jb21tZW50ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wYXJ0aWFsID0gISFvcHRpb25zLnBhcnRpYWw7XG4gICAgICAgIHRoaXMubm9jYXNlID0gISF0aGlzLm9wdGlvbnMubm9jYXNlO1xuICAgICAgICB0aGlzLndpbmRvd3NOb01hZ2ljUm9vdCA9XG4gICAgICAgICAgICBvcHRpb25zLndpbmRvd3NOb01hZ2ljUm9vdCAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICBvcHRpb25zLndpbmRvd3NOb01hZ2ljUm9vdFxuICAgICAgICAgICAgICAgIDogISEodGhpcy5pc1dpbmRvd3MgJiYgdGhpcy5ub2Nhc2UpO1xuICAgICAgICB0aGlzLmdsb2JTZXQgPSBbXTtcbiAgICAgICAgdGhpcy5nbG9iUGFydHMgPSBbXTtcbiAgICAgICAgdGhpcy5zZXQgPSBbXTtcbiAgICAgICAgLy8gbWFrZSB0aGUgc2V0IG9mIHJlZ2V4cHMgZXRjLlxuICAgICAgICB0aGlzLm1ha2UoKTtcbiAgICB9XG4gICAgaGFzTWFnaWMoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubWFnaWNhbEJyYWNlcyAmJiB0aGlzLnNldC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgdGhpcy5zZXQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBkZWJ1ZyguLi5fKSB7IH1cbiAgICBtYWtlKCkge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5wYXR0ZXJuO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAvLyBlbXB0eSBwYXR0ZXJucyBhbmQgY29tbWVudHMgbWF0Y2ggbm90aGluZy5cbiAgICAgICAgaWYgKCFvcHRpb25zLm5vY29tbWVudCAmJiBwYXR0ZXJuLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICAgICAgICB0aGlzLmNvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcGF0dGVybikge1xuICAgICAgICAgICAgdGhpcy5lbXB0eSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gc3RlcCAxOiBmaWd1cmUgb3V0IG5lZ2F0aW9uLCBldGMuXG4gICAgICAgIHRoaXMucGFyc2VOZWdhdGUoKTtcbiAgICAgICAgLy8gc3RlcCAyOiBleHBhbmQgYnJhY2VzXG4gICAgICAgIHRoaXMuZ2xvYlNldCA9IFsuLi5uZXcgU2V0KHRoaXMuYnJhY2VFeHBhbmQoKSldO1xuICAgICAgICBpZiAob3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICAgICAgLy9veGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgdGhpcy5kZWJ1ZyA9ICguLi5hcmdzKSA9PiBjb25zb2xlLmVycm9yKC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCB0aGlzLmdsb2JTZXQpO1xuICAgICAgICAvLyBzdGVwIDM6IG5vdyB3ZSBoYXZlIGEgc2V0LCBzbyB0dXJuIGVhY2ggb25lIGludG8gYSBzZXJpZXMgb2ZcbiAgICAgICAgLy8gcGF0aC1wb3J0aW9uIG1hdGNoaW5nIHBhdHRlcm5zLlxuICAgICAgICAvLyBUaGVzZSB3aWxsIGJlIHJlZ2V4cHMsIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBcIioqXCIsIHdoaWNoIGlzXG4gICAgICAgIC8vIHNldCB0byB0aGUgR0xPQlNUQVIgb2JqZWN0IGZvciBnbG9ic3RhciBiZWhhdmlvcixcbiAgICAgICAgLy8gYW5kIHdpbGwgbm90IGNvbnRhaW4gYW55IC8gY2hhcmFjdGVyc1xuICAgICAgICAvL1xuICAgICAgICAvLyBGaXJzdCwgd2UgcHJlcHJvY2VzcyB0byBtYWtlIHRoZSBnbG9iIHBhdHRlcm4gc2V0cyBhIGJpdCBzaW1wbGVyXG4gICAgICAgIC8vIGFuZCBkZWR1cGVkLiAgVGhlcmUgYXJlIHNvbWUgcGVyZi1raWxsaW5nIHBhdHRlcm5zIHRoYXQgY2FuIGNhdXNlXG4gICAgICAgIC8vIHByb2JsZW1zIHdpdGggYSBnbG9iIHdhbGssIGJ1dCB3ZSBjYW4gc2ltcGxpZnkgdGhlbSBkb3duIGEgYml0LlxuICAgICAgICBjb25zdCByYXdHbG9iUGFydHMgPSB0aGlzLmdsb2JTZXQubWFwKHMgPT4gdGhpcy5zbGFzaFNwbGl0KHMpKTtcbiAgICAgICAgdGhpcy5nbG9iUGFydHMgPSB0aGlzLnByZXByb2Nlc3MocmF3R2xvYlBhcnRzKTtcbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sIHRoaXMuZ2xvYlBhcnRzKTtcbiAgICAgICAgLy8gZ2xvYiAtLT4gcmVnZXhwc1xuICAgICAgICBsZXQgc2V0ID0gdGhpcy5nbG9iUGFydHMubWFwKChzLCBfLCBfXykgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNXaW5kb3dzICYmIHRoaXMud2luZG93c05vTWFnaWNSb290KSB7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgaXQncyBhIGRyaXZlIG9yIHVuYyBwYXRoLlxuICAgICAgICAgICAgICAgIGNvbnN0IGlzVU5DID0gc1swXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgc1sxXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgKHNbMl0gPT09ICc/JyB8fCAhZ2xvYk1hZ2ljLnRlc3Qoc1syXSkpICYmXG4gICAgICAgICAgICAgICAgICAgICFnbG9iTWFnaWMudGVzdChzWzNdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0RyaXZlID0gL15bYS16XTovaS50ZXN0KHNbMF0pO1xuICAgICAgICAgICAgICAgIGlmIChpc1VOQykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucy5zbGljZSgwLCA0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnMuc2xpY2UoNCkubWFwKHNzID0+IHRoaXMucGFyc2Uoc3MpKSxcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNEcml2ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3NbMF0sIC4uLnMuc2xpY2UoMSkubWFwKHNzID0+IHRoaXMucGFyc2Uoc3MpKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHMubWFwKHNzID0+IHRoaXMucGFyc2Uoc3MpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCBzZXQpO1xuICAgICAgICAvLyBmaWx0ZXIgb3V0IGV2ZXJ5dGhpbmcgdGhhdCBkaWRuJ3QgY29tcGlsZSBwcm9wZXJseS5cbiAgICAgICAgdGhpcy5zZXQgPSBzZXQuZmlsdGVyKHMgPT4gcy5pbmRleE9mKGZhbHNlKSA9PT0gLTEpO1xuICAgICAgICAvLyBkbyBub3QgdHJlYXQgdGhlID8gaW4gVU5DIHBhdGhzIGFzIG1hZ2ljXG4gICAgICAgIGlmICh0aGlzLmlzV2luZG93cykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNldC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSB0aGlzLnNldFtpXTtcbiAgICAgICAgICAgICAgICBpZiAocFswXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgcFsxXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nbG9iUGFydHNbaV1bMl0gPT09ICc/JyAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcFszXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgL15bYS16XTokL2kudGVzdChwWzNdKSkge1xuICAgICAgICAgICAgICAgICAgICBwWzJdID0gJz8nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgdGhpcy5zZXQpO1xuICAgIH1cbiAgICAvLyB2YXJpb3VzIHRyYW5zZm9ybXMgdG8gZXF1aXZhbGVudCBwYXR0ZXJuIHNldHMgdGhhdCBhcmVcbiAgICAvLyBmYXN0ZXIgdG8gcHJvY2VzcyBpbiBhIGZpbGVzeXN0ZW0gd2Fsay4gIFRoZSBnb2FsIGlzIHRvXG4gICAgLy8gZWxpbWluYXRlIHdoYXQgd2UgY2FuLCBhbmQgcHVzaCBhbGwgKiogcGF0dGVybnMgYXMgZmFyXG4gICAgLy8gdG8gdGhlIHJpZ2h0IGFzIHBvc3NpYmxlLCBldmVuIGlmIGl0IGluY3JlYXNlcyB0aGUgbnVtYmVyXG4gICAgLy8gb2YgcGF0dGVybnMgdGhhdCB3ZSBoYXZlIHRvIHByb2Nlc3MuXG4gICAgcHJlcHJvY2VzcyhnbG9iUGFydHMpIHtcbiAgICAgICAgLy8gaWYgd2UncmUgbm90IGluIGdsb2JzdGFyIG1vZGUsIHRoZW4gdHVybiAqKiBpbnRvICpcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub2dsb2JzdGFyKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnRzZXQgb2YgZ2xvYlBhcnRzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwYXJ0c2V0Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0c2V0W2pdID09PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0c2V0W2pdID0gJyonO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgb3B0aW1pemF0aW9uTGV2ZWwgPSAxIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGlmIChvcHRpbWl6YXRpb25MZXZlbCA+PSAyKSB7XG4gICAgICAgICAgICAvLyBhZ2dyZXNzaXZlIG9wdGltaXphdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgZnMgd2Fsa2luZ1xuICAgICAgICAgICAgZ2xvYlBhcnRzID0gdGhpcy5maXJzdFBoYXNlUHJlUHJvY2VzcyhnbG9iUGFydHMpO1xuICAgICAgICAgICAgZ2xvYlBhcnRzID0gdGhpcy5zZWNvbmRQaGFzZVByZVByb2Nlc3MoZ2xvYlBhcnRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpbWl6YXRpb25MZXZlbCA+PSAxKSB7XG4gICAgICAgICAgICAvLyBqdXN0IGJhc2ljIG9wdGltaXphdGlvbnMgdG8gcmVtb3ZlIHNvbWUgLi4gcGFydHNcbiAgICAgICAgICAgIGdsb2JQYXJ0cyA9IHRoaXMubGV2ZWxPbmVPcHRpbWl6ZShnbG9iUGFydHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8ganVzdCBjb2xsYXBzZSBtdWx0aXBsZSAqKiBwb3J0aW9ucyBpbnRvIG9uZVxuICAgICAgICAgICAgZ2xvYlBhcnRzID0gdGhpcy5hZGphc2NlbnRHbG9ic3Rhck9wdGltaXplKGdsb2JQYXJ0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdsb2JQYXJ0cztcbiAgICB9XG4gICAgLy8ganVzdCBnZXQgcmlkIG9mIGFkamFzY2VudCAqKiBwb3J0aW9uc1xuICAgIGFkamFzY2VudEdsb2JzdGFyT3B0aW1pemUoZ2xvYlBhcnRzKSB7XG4gICAgICAgIHJldHVybiBnbG9iUGFydHMubWFwKHBhcnRzID0+IHtcbiAgICAgICAgICAgIGxldCBncyA9IC0xO1xuICAgICAgICAgICAgd2hpbGUgKC0xICE9PSAoZ3MgPSBwYXJ0cy5pbmRleE9mKCcqKicsIGdzICsgMSkpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGkgPSBncztcbiAgICAgICAgICAgICAgICB3aGlsZSAocGFydHNbaSArIDFdID09PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGkgIT09IGdzKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShncywgaSAtIGdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFydHM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBnZXQgcmlkIG9mIGFkamFzY2VudCAqKiBhbmQgcmVzb2x2ZSAuLiBwb3J0aW9uc1xuICAgIGxldmVsT25lT3B0aW1pemUoZ2xvYlBhcnRzKSB7XG4gICAgICAgIHJldHVybiBnbG9iUGFydHMubWFwKHBhcnRzID0+IHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMucmVkdWNlKChzZXQsIHBhcnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gc2V0W3NldC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAocGFydCA9PT0gJyoqJyAmJiBwcmV2ID09PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ICYmIHByZXYgIT09ICcuLicgJiYgcHJldiAhPT0gJy4nICYmIHByZXYgIT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldC5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0LnB1c2gocGFydCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNldDtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPT09IDAgPyBbJyddIDogcGFydHM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZXZlbFR3b0ZpbGVPcHRpbWl6ZShwYXJ0cykge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFydHMpKSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHRoaXMuc2xhc2hTcGxpdChwYXJ0cyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRpZFNvbWV0aGluZyA9IGZhbHNlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBkaWRTb21ldGhpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIDxwcmU+LzxlPi88cmVzdD4gLT4gPHByZT4vPHJlc3Q+XG4gICAgICAgICAgICBpZiAoIXRoaXMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbaV07XG4gICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IHNxdWVlemUgb3V0IFVOQyBwYXR0ZXJuc1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMSAmJiBwID09PSAnJyAmJiBwYXJ0c1swXSA9PT0gJycpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT09ICcuJyB8fCBwID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFydHNbMF0gPT09ICcuJyAmJlxuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5sZW5ndGggPT09IDIgJiZcbiAgICAgICAgICAgICAgICAgICAgKHBhcnRzWzFdID09PSAnLicgfHwgcGFydHNbMV0gPT09ICcnKSkge1xuICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wb3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyA8cHJlPi88cD4vLi4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgbGV0IGRkID0gMDtcbiAgICAgICAgICAgIHdoaWxlICgtMSAhPT0gKGRkID0gcGFydHMuaW5kZXhPZignLi4nLCBkZCArIDEpKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXJ0c1tkZCAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChwICYmXG4gICAgICAgICAgICAgICAgICAgIHAgIT09ICcuJyAmJlxuICAgICAgICAgICAgICAgICAgICBwICE9PSAnLi4nICYmXG4gICAgICAgICAgICAgICAgICAgIHAgIT09ICcqKicgJiZcbiAgICAgICAgICAgICAgICAgICAgISh0aGlzLmlzV2luZG93cyAmJiAvXlthLXpdOiQvaS50ZXN0KHApKSkge1xuICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoZGQgLSAxLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgZGQgLT0gMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGRpZFNvbWV0aGluZyk7XG4gICAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPT09IDAgPyBbJyddIDogcGFydHM7XG4gICAgfVxuICAgIC8vIEZpcnN0IHBoYXNlOiBzaW5nbGUtcGF0dGVybiBwcm9jZXNzaW5nXG4gICAgLy8gPHByZT4gaXMgMSBvciBtb3JlIHBvcnRpb25zXG4gICAgLy8gPHJlc3Q+IGlzIDEgb3IgbW9yZSBwb3J0aW9uc1xuICAgIC8vIDxwPiBpcyBhbnkgcG9ydGlvbiBvdGhlciB0aGFuIC4sIC4uLCAnJywgb3IgKipcbiAgICAvLyA8ZT4gaXMgLiBvciAnJ1xuICAgIC8vXG4gICAgLy8gKiovLi4gaXMgKmJydXRhbCogZm9yIGZpbGVzeXN0ZW0gd2Fsa2luZyBwZXJmb3JtYW5jZSwgYmVjYXVzZVxuICAgIC8vIGl0IGVmZmVjdGl2ZWx5IHJlc2V0cyB0aGUgcmVjdXJzaXZlIHdhbGsgZWFjaCB0aW1lIGl0IG9jY3VycyxcbiAgICAvLyBhbmQgKiogY2Fubm90IGJlIHJlZHVjZWQgb3V0IGJ5IGEgLi4gcGF0dGVybiBwYXJ0IGxpa2UgYSByZWdleHBcbiAgICAvLyBvciBtb3N0IHN0cmluZ3MgKG90aGVyIHRoYW4gLi4sIC4sIGFuZCAnJykgY2FuIGJlLlxuICAgIC8vXG4gICAgLy8gPHByZT4vKiovLi4vPHA+LzxwPi88cmVzdD4gLT4gezxwcmU+Ly4uLzxwPi88cD4vPHJlc3Q+LDxwcmU+LyoqLzxwPi88cD4vPHJlc3Q+fVxuICAgIC8vIDxwcmU+LzxlPi88cmVzdD4gLT4gPHByZT4vPHJlc3Q+XG4gICAgLy8gPHByZT4vPHA+Ly4uLzxyZXN0PiAtPiA8cHJlPi88cmVzdD5cbiAgICAvLyAqKi8qKi88cmVzdD4gLT4gKiovPHJlc3Q+XG4gICAgLy9cbiAgICAvLyAqKi8qLzxyZXN0PiAtPiAqLyoqLzxyZXN0PiA8PT0gbm90IHZhbGlkIGJlY2F1c2UgKiogZG9lc24ndCBmb2xsb3dcbiAgICAvLyB0aGlzIFdPVUxEIGJlIGFsbG93ZWQgaWYgKiogZGlkIGZvbGxvdyBzeW1saW5rcywgb3IgKiBkaWRuJ3RcbiAgICBmaXJzdFBoYXNlUHJlUHJvY2VzcyhnbG9iUGFydHMpIHtcbiAgICAgICAgbGV0IGRpZFNvbWV0aGluZyA9IGZhbHNlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBkaWRTb21ldGhpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIDxwcmU+LyoqLy4uLzxwPi88cD4vPHJlc3Q+IC0+IHs8cHJlPi8uLi88cD4vPHA+LzxyZXN0Piw8cHJlPi8qKi88cD4vPHA+LzxyZXN0Pn1cbiAgICAgICAgICAgIGZvciAobGV0IHBhcnRzIG9mIGdsb2JQYXJ0cykge1xuICAgICAgICAgICAgICAgIGxldCBncyA9IC0xO1xuICAgICAgICAgICAgICAgIHdoaWxlICgtMSAhPT0gKGdzID0gcGFydHMuaW5kZXhPZignKionLCBncyArIDEpKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZ3NzID0gZ3M7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChwYXJ0c1tnc3MgKyAxXSA9PT0gJyoqJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gPHByZT4vKiovKiovPHJlc3Q+IC0+IDxwcmU+LyoqLzxyZXN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgZ3NzKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gZWcsIGlmIGdzIGlzIDIgYW5kIGdzcyBpcyA0LCB0aGF0IG1lYW5zIHdlIGhhdmUgMyAqKlxuICAgICAgICAgICAgICAgICAgICAvLyBwYXJ0cywgYW5kIGNhbiByZW1vdmUgMiBvZiB0aGVtLlxuICAgICAgICAgICAgICAgICAgICBpZiAoZ3NzID4gZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShncyArIDEsIGdzcyAtIGdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dCA9IHBhcnRzW2dzICsgMV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXJ0c1tncyArIDJdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwMiA9IHBhcnRzW2dzICsgM107XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICE9PSAnLi4nKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcCA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwID09PSAnLi4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAhcDIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHAyID09PSAnLicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHAyID09PSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAvLyBlZGl0IHBhcnRzIGluIHBsYWNlLCBhbmQgcHVzaCB0aGUgbmV3IG9uZVxuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoZ3MsIDEpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvdGhlciA9IHBhcnRzLnNsaWNlKDApO1xuICAgICAgICAgICAgICAgICAgICBvdGhlcltnc10gPSAnKionO1xuICAgICAgICAgICAgICAgICAgICBnbG9iUGFydHMucHVzaChvdGhlcik7XG4gICAgICAgICAgICAgICAgICAgIGdzLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIDxwcmU+LzxlPi88cmVzdD4gLT4gPHByZT4vPHJlc3Q+XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBzcXVlZXplIG91dCBVTkMgcGF0dGVybnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAxICYmIHAgPT09ICcnICYmIHBhcnRzWzBdID09PSAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwID09PSAnLicgfHwgcCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRzWzBdID09PSAnLicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnRzWzFdID09PSAnLicgfHwgcGFydHNbMV0gPT09ICcnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIDxwcmU+LzxwPi8uLi88cmVzdD4gLT4gPHByZT4vPHJlc3Q+XG4gICAgICAgICAgICAgICAgbGV0IGRkID0gMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoLTEgIT09IChkZCA9IHBhcnRzLmluZGV4T2YoJy4uJywgZGQgKyAxKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IHBhcnRzW2RkIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChwICYmIHAgIT09ICcuJyAmJiBwICE9PSAnLi4nICYmIHAgIT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZWVkRG90ID0gZGQgPT09IDEgJiYgcGFydHNbZGQgKyAxXSA9PT0gJyoqJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwbGluID0gbmVlZERvdCA/IFsnLiddIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoZGQgLSAxLCAyLCAuLi5zcGxpbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLnB1c2goJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGQgLT0gMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoZGlkU29tZXRoaW5nKTtcbiAgICAgICAgcmV0dXJuIGdsb2JQYXJ0cztcbiAgICB9XG4gICAgLy8gc2Vjb25kIHBoYXNlOiBtdWx0aS1wYXR0ZXJuIGRlZHVwZXNcbiAgICAvLyB7PHByZT4vKi88cmVzdD4sPHByZT4vPHA+LzxyZXN0Pn0gLT4gPHByZT4vKi88cmVzdD5cbiAgICAvLyB7PHByZT4vPHJlc3Q+LDxwcmU+LzxyZXN0Pn0gLT4gPHByZT4vPHJlc3Q+XG4gICAgLy8gezxwcmU+LyoqLzxyZXN0Piw8cHJlPi88cmVzdD59IC0+IDxwcmU+LyoqLzxyZXN0PlxuICAgIC8vXG4gICAgLy8gezxwcmU+LyoqLzxyZXN0Piw8cHJlPi8qKi88cD4vPHJlc3Q+fSAtPiA8cHJlPi8qKi88cmVzdD5cbiAgICAvLyBeLS0gbm90IHZhbGlkIGJlY2F1c2UgKiogZG9lbnMndCBmb2xsb3cgc3ltbGlua3NcbiAgICBzZWNvbmRQaGFzZVByZVByb2Nlc3MoZ2xvYlBhcnRzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2xvYlBhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgZ2xvYlBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IHRoaXMucGFydHNNYXRjaChnbG9iUGFydHNbaV0sIGdsb2JQYXJ0c1tqXSwgIXRoaXMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXMpO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGdsb2JQYXJ0c1tpXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBnbG9iUGFydHNbal0gPSBtYXRjaGVkO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdsb2JQYXJ0cy5maWx0ZXIoZ3MgPT4gZ3MubGVuZ3RoKTtcbiAgICB9XG4gICAgcGFydHNNYXRjaChhLCBiLCBlbXB0eUdTTWF0Y2ggPSBmYWxzZSkge1xuICAgICAgICBsZXQgYWkgPSAwO1xuICAgICAgICBsZXQgYmkgPSAwO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGxldCB3aGljaCA9ICcnO1xuICAgICAgICB3aGlsZSAoYWkgPCBhLmxlbmd0aCAmJiBiaSA8IGIubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoYVthaV0gPT09IGJbYmldKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2god2hpY2ggPT09ICdiJyA/IGJbYmldIDogYVthaV0pO1xuICAgICAgICAgICAgICAgIGFpKys7XG4gICAgICAgICAgICAgICAgYmkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGVtcHR5R1NNYXRjaCAmJiBhW2FpXSA9PT0gJyoqJyAmJiBiW2JpXSA9PT0gYVthaSArIDFdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYVthaV0pO1xuICAgICAgICAgICAgICAgIGFpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChlbXB0eUdTTWF0Y2ggJiYgYltiaV0gPT09ICcqKicgJiYgYVthaV0gPT09IGJbYmkgKyAxXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGJbYmldKTtcbiAgICAgICAgICAgICAgICBiaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYVthaV0gPT09ICcqJyAmJlxuICAgICAgICAgICAgICAgIGJbYmldICYmXG4gICAgICAgICAgICAgICAgKHRoaXMub3B0aW9ucy5kb3QgfHwgIWJbYmldLnN0YXJ0c1dpdGgoJy4nKSkgJiZcbiAgICAgICAgICAgICAgICBiW2JpXSAhPT0gJyoqJykge1xuICAgICAgICAgICAgICAgIGlmICh3aGljaCA9PT0gJ2InKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgd2hpY2ggPSAnYSc7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYVthaV0pO1xuICAgICAgICAgICAgICAgIGFpKys7XG4gICAgICAgICAgICAgICAgYmkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJbYmldID09PSAnKicgJiZcbiAgICAgICAgICAgICAgICBhW2FpXSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLm9wdGlvbnMuZG90IHx8ICFhW2FpXS5zdGFydHNXaXRoKCcuJykpICYmXG4gICAgICAgICAgICAgICAgYVthaV0gIT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICBpZiAod2hpY2ggPT09ICdhJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIHdoaWNoID0gJ2InO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGJbYmldKTtcbiAgICAgICAgICAgICAgICBhaSsrO1xuICAgICAgICAgICAgICAgIGJpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgd2UgZmFsbCBvdXQgb2YgdGhlIGxvb3AsIGl0IG1lYW5zIHRoZXkgdHdvIGFyZSBpZGVudGljYWxcbiAgICAgICAgLy8gYXMgbG9uZyBhcyB0aGVpciBsZW5ndGhzIG1hdGNoXG4gICAgICAgIHJldHVybiBhLmxlbmd0aCA9PT0gYi5sZW5ndGggJiYgcmVzdWx0O1xuICAgIH1cbiAgICBwYXJzZU5lZ2F0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubm9uZWdhdGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSB0aGlzLnBhdHRlcm47XG4gICAgICAgIGxldCBuZWdhdGUgPSBmYWxzZTtcbiAgICAgICAgbGV0IG5lZ2F0ZU9mZnNldCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0dGVybi5sZW5ndGggJiYgcGF0dGVybi5jaGFyQXQoaSkgPT09ICchJzsgaSsrKSB7XG4gICAgICAgICAgICBuZWdhdGUgPSAhbmVnYXRlO1xuICAgICAgICAgICAgbmVnYXRlT2Zmc2V0Kys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5lZ2F0ZU9mZnNldClcbiAgICAgICAgICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm4uc2xpY2UobmVnYXRlT2Zmc2V0KTtcbiAgICAgICAgdGhpcy5uZWdhdGUgPSBuZWdhdGU7XG4gICAgfVxuICAgIC8vIHNldCBwYXJ0aWFsIHRvIHRydWUgdG8gdGVzdCBpZiwgZm9yIGV4YW1wbGUsXG4gICAgLy8gXCIvYS9iXCIgbWF0Y2hlcyB0aGUgc3RhcnQgb2YgXCIvKi9iLyovZFwiXG4gICAgLy8gUGFydGlhbCBtZWFucywgaWYgeW91IHJ1biBvdXQgb2YgZmlsZSBiZWZvcmUgeW91IHJ1blxuICAgIC8vIG91dCBvZiBwYXR0ZXJuLCB0aGVuIHRoYXQncyBmaW5lLCBhcyBsb25nIGFzIGFsbFxuICAgIC8vIHRoZSBwYXJ0cyBtYXRjaC5cbiAgICBtYXRjaE9uZShmaWxlLCBwYXR0ZXJuLCBwYXJ0aWFsID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IGZpbGVTdGFydEluZGV4ID0gMDtcbiAgICAgICAgbGV0IHBhdHRlcm5TdGFydEluZGV4ID0gMDtcbiAgICAgICAgLy8gVU5DIHBhdGhzIGxpa2UgLy8/L1g6Ly4uLiBjYW4gbWF0Y2ggWDovLi4uIGFuZCB2aWNlIHZlcnNhXG4gICAgICAgIC8vIERyaXZlIGxldHRlcnMgaW4gYWJzb2x1dGUgZHJpdmUgb3IgdW5jIHBhdGhzIGFyZSBhbHdheXMgY29tcGFyZWRcbiAgICAgICAgLy8gY2FzZS1pbnNlbnNpdGl2ZWx5LlxuICAgICAgICBpZiAodGhpcy5pc1dpbmRvd3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVEcml2ZSA9IHR5cGVvZiBmaWxlWzBdID09PSAnc3RyaW5nJyAmJiAvXlthLXpdOiQvaS50ZXN0KGZpbGVbMF0pO1xuICAgICAgICAgICAgY29uc3QgZmlsZVVOQyA9ICFmaWxlRHJpdmUgJiZcbiAgICAgICAgICAgICAgICBmaWxlWzBdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgIGZpbGVbMV0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgZmlsZVsyXSA9PT0gJz8nICYmXG4gICAgICAgICAgICAgICAgL15bYS16XTokL2kudGVzdChmaWxlWzNdKTtcbiAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5Ecml2ZSA9IHR5cGVvZiBwYXR0ZXJuWzBdID09PSAnc3RyaW5nJyAmJiAvXlthLXpdOiQvaS50ZXN0KHBhdHRlcm5bMF0pO1xuICAgICAgICAgICAgY29uc3QgcGF0dGVyblVOQyA9ICFwYXR0ZXJuRHJpdmUgJiZcbiAgICAgICAgICAgICAgICBwYXR0ZXJuWzBdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgIHBhdHRlcm5bMV0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgcGF0dGVyblsyXSA9PT0gJz8nICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHBhdHRlcm5bM10gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgL15bYS16XTokL2kudGVzdChwYXR0ZXJuWzNdKTtcbiAgICAgICAgICAgIGNvbnN0IGZkaSA9IGZpbGVVTkMgPyAzXG4gICAgICAgICAgICAgICAgOiBmaWxlRHJpdmUgPyAwXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgcGRpID0gcGF0dGVyblVOQyA/IDNcbiAgICAgICAgICAgICAgICA6IHBhdHRlcm5Ecml2ZSA/IDBcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZkaSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHBkaSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbZmQsIHBkXSA9IFtcbiAgICAgICAgICAgICAgICAgICAgZmlsZVtmZGldLFxuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuW3BkaV0sXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAvLyBzdGFydCBtYXRjaGluZyBhdCB0aGUgZHJpdmUgbGV0dGVyIGluZGV4IG9mIGVhY2hcbiAgICAgICAgICAgICAgICBpZiAoZmQudG9Mb3dlckNhc2UoKSA9PT0gcGQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuW3BkaV0gPSBmZDtcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVyblN0YXJ0SW5kZXggPSBwZGk7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVTdGFydEluZGV4ID0gZmRpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyByZXNvbHZlIGFuZCByZWR1Y2UgLiBhbmQgLi4gcG9ydGlvbnMgaW4gdGhlIGZpbGUgYXMgd2VsbC5cbiAgICAgICAgLy8gZG9uJ3QgbmVlZCB0byBkbyB0aGUgc2Vjb25kIHBoYXNlLCBiZWNhdXNlIGl0J3Mgb25seSBvbmUgc3RyaW5nW11cbiAgICAgICAgY29uc3QgeyBvcHRpbWl6YXRpb25MZXZlbCA9IDEgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgaWYgKG9wdGltaXphdGlvbkxldmVsID49IDIpIHtcbiAgICAgICAgICAgIGZpbGUgPSB0aGlzLmxldmVsVHdvRmlsZU9wdGltaXplKGZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXR0ZXJuLmluY2x1ZGVzKEdMT0JTVEFSKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI21hdGNoR2xvYnN0YXIoZmlsZSwgcGF0dGVybiwgcGFydGlhbCwgZmlsZVN0YXJ0SW5kZXgsIHBhdHRlcm5TdGFydEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy4jbWF0Y2hPbmUoZmlsZSwgcGF0dGVybiwgcGFydGlhbCwgZmlsZVN0YXJ0SW5kZXgsIHBhdHRlcm5TdGFydEluZGV4KTtcbiAgICB9XG4gICAgI21hdGNoR2xvYnN0YXIoZmlsZSwgcGF0dGVybiwgcGFydGlhbCwgZmlsZUluZGV4LCBwYXR0ZXJuSW5kZXgpIHtcbiAgICAgICAgLy8gc3BsaXQgdGhlIHBhdHRlcm4gaW50byBoZWFkLCB0YWlsLCBhbmQgbWlkZGxlIG9mICoqIGRlbGltaXRlZCBwYXJ0c1xuICAgICAgICBjb25zdCBmaXJzdGdzID0gcGF0dGVybi5pbmRleE9mKEdMT0JTVEFSLCBwYXR0ZXJuSW5kZXgpO1xuICAgICAgICBjb25zdCBsYXN0Z3MgPSBwYXR0ZXJuLmxhc3RJbmRleE9mKEdMT0JTVEFSKTtcbiAgICAgICAgLy8gc3BsaXQgdGhlIHBhdHRlcm4gdXAgaW50byBnbG9ic3Rhci1kZWxpbWl0ZWQgc2VjdGlvbnNcbiAgICAgICAgLy8gdGhlIHRhaWwgaGFzIHRvIGJlIGF0IHRoZSBlbmQsIGFuZCB0aGUgb3RoZXJzIGp1c3QgaGF2ZVxuICAgICAgICAvLyB0byBiZSBmb3VuZCBpbiBvcmRlciBmcm9tIHRoZSBoZWFkLlxuICAgICAgICBjb25zdCBbaGVhZCwgYm9keSwgdGFpbF0gPSBwYXJ0aWFsID9cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuLnNsaWNlKHBhdHRlcm5JbmRleCwgZmlyc3RncyksXG4gICAgICAgICAgICAgICAgcGF0dGVybi5zbGljZShmaXJzdGdzICsgMSksXG4gICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICBdXG4gICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuLnNsaWNlKHBhdHRlcm5JbmRleCwgZmlyc3RncyksXG4gICAgICAgICAgICAgICAgcGF0dGVybi5zbGljZShmaXJzdGdzICsgMSwgbGFzdGdzKSxcbiAgICAgICAgICAgICAgICBwYXR0ZXJuLnNsaWNlKGxhc3RncyArIDEpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgLy8gY2hlY2sgdGhlIGhlYWQsIGZyb20gdGhlIGN1cnJlbnQgZmlsZS9wYXR0ZXJuIGluZGV4LlxuICAgICAgICBpZiAoaGVhZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVIZWFkID0gZmlsZS5zbGljZShmaWxlSW5kZXgsIGZpbGVJbmRleCArIGhlYWQubGVuZ3RoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy4jbWF0Y2hPbmUoZmlsZUhlYWQsIGhlYWQsIHBhcnRpYWwsIDAsIDApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsZUluZGV4ICs9IGhlYWQubGVuZ3RoO1xuICAgICAgICAgICAgcGF0dGVybkluZGV4ICs9IGhlYWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdyB3ZSBrbm93IHRoZSBoZWFkIG1hdGNoZXMhXG4gICAgICAgIC8vIGlmIHRoZSBsYXN0IHBvcnRpb24gaXMgbm90IGVtcHR5LCBpdCBNVVNUIG1hdGNoIHRoZSBlbmRcbiAgICAgICAgLy8gY2hlY2sgdGhlIHRhaWxcbiAgICAgICAgbGV0IGZpbGVUYWlsTWF0Y2ggPSAwO1xuICAgICAgICBpZiAodGFpbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIGlmIGhlYWQgKyB0YWlsID4gZmlsZSwgdGhlbiB3ZSBjYW5ub3QgcG9zc2libHkgbWF0Y2hcbiAgICAgICAgICAgIGlmICh0YWlsLmxlbmd0aCArIGZpbGVJbmRleCA+IGZpbGUubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIC8vIHRyeSB0byBtYXRjaCB0aGUgdGFpbFxuICAgICAgICAgICAgbGV0IHRhaWxTdGFydCA9IGZpbGUubGVuZ3RoIC0gdGFpbC5sZW5ndGg7XG4gICAgICAgICAgICBpZiAodGhpcy4jbWF0Y2hPbmUoZmlsZSwgdGFpbCwgcGFydGlhbCwgdGFpbFN0YXJ0LCAwKSkge1xuICAgICAgICAgICAgICAgIGZpbGVUYWlsTWF0Y2ggPSB0YWlsLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGFmZm9yZGFuY2UgZm9yIHN0dWZmIGxpa2UgYS8qKi8qIG1hdGNoaW5nIGEvYi9cbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgbGFzdCBmaWxlIHBvcnRpb24gaXMgJycsIGFuZCB0aGVyZSdzIG1vcmUgdG8gdGhlIHBhdHRlcm5cbiAgICAgICAgICAgICAgICAvLyB0aGVuIHRyeSB3aXRob3V0IHRoZSAnJyBiaXQuXG4gICAgICAgICAgICAgICAgaWYgKGZpbGVbZmlsZS5sZW5ndGggLSAxXSAhPT0gJycgfHxcbiAgICAgICAgICAgICAgICAgICAgZmlsZUluZGV4ICsgdGFpbC5sZW5ndGggPT09IGZpbGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGFpbFN0YXJ0LS07XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLiNtYXRjaE9uZShmaWxlLCB0YWlsLCBwYXJ0aWFsLCB0YWlsU3RhcnQsIDApKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmlsZVRhaWxNYXRjaCA9IHRhaWwubGVuZ3RoICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBub3cgd2Uga25vdyB0aGUgdGFpbCBtYXRjaGVzIVxuICAgICAgICAvLyB0aGUgbWlkZGxlIGlzIHplcm8gb3IgbW9yZSBwb3J0aW9ucyB3cmFwcGVkIGluICoqLCBwb3NzaWJseVxuICAgICAgICAvLyBjb250YWluaW5nIG1vcmUgKiogc2VjdGlvbnMuXG4gICAgICAgIC8vIHNvIGEvKiovYi8qKi9jLyoqL2QgaGFzIGJlY29tZSAqKi9iLyoqL2MvKipcbiAgICAgICAgLy8gaWYgaXQncyBlbXB0eSwgaXQgbWVhbnMgYS8qKi9iLCBqdXN0IHZlcmlmeSB3ZSBoYXZlIG5vIGJhZCBkb3RzXG4gICAgICAgIC8vIGlmIHRoZXJlJ3Mgbm8gdGFpbCwgc28gaXQgZW5kcyBvbiAvKiosIHRoZW4gd2UgbXVzdCBoYXZlICpzb21ldGhpbmcqXG4gICAgICAgIC8vIGFmdGVyIHRoZSBoZWFkLCBvciBpdCdzIG5vdCBhIG1hdGNcbiAgICAgICAgaWYgKCFib2R5Lmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IHNhd1NvbWUgPSAhIWZpbGVUYWlsTWF0Y2g7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gZmlsZUluZGV4OyBpIDwgZmlsZS5sZW5ndGggLSBmaWxlVGFpbE1hdGNoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmID0gU3RyaW5nKGZpbGVbaV0pO1xuICAgICAgICAgICAgICAgIHNhd1NvbWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChmID09PSAnLicgfHxcbiAgICAgICAgICAgICAgICAgICAgZiA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAgICAgICAoIXRoaXMub3B0aW9ucy5kb3QgJiYgZi5zdGFydHNXaXRoKCcuJykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpbiBwYXJ0aWFsIG1vZGUsIHdlIGp1c3QgbmVlZCB0byBnZXQgcGFzdCBhbGwgZmlsZSBwYXJ0c1xuICAgICAgICAgICAgcmV0dXJuIHBhcnRpYWwgfHwgc2F3U29tZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBub3cgd2Uga25vdyB0aGF0IHRoZXJlJ3Mgb25lIG9yIG1vcmUgYm9keSBzZWN0aW9ucywgd2hpY2ggY2FuXG4gICAgICAgIC8vIGJlIG1hdGNoZWQgYW55d2hlcmUgZnJvbSB0aGUgMCBpbmRleCAoYmVjYXVzZSB0aGUgaGVhZCB3YXMgcHJ1bmVkKVxuICAgICAgICAvLyB0aHJvdWdoIHRvIHRoZSBsZW5ndGgtZmlsZVRhaWxNYXRjaCBpbmRleC5cbiAgICAgICAgLy8gc3BsaXQgdGhlIGJvZHkgdXAgaW50byBzZWN0aW9ucywgYW5kIG5vdGUgdGhlIG1pbmltdW0gaW5kZXggaXQgY2FuXG4gICAgICAgIC8vIGJlIGZvdW5kIGF0IChzdGFydCB3aXRoIHRoZSBsZW5ndGggb2YgYWxsIHByZXZpb3VzIHNlZ21lbnRzKVxuICAgICAgICAvLyBbc2VjdGlvbiwgYmVmb3JlLCBhZnRlcl1cbiAgICAgICAgY29uc3QgYm9keVNlZ21lbnRzID0gW1tbXSwgMF1dO1xuICAgICAgICBsZXQgY3VycmVudEJvZHkgPSBib2R5U2VnbWVudHNbMF07XG4gICAgICAgIGxldCBub25Hc1BhcnRzID0gMDtcbiAgICAgICAgY29uc3Qgbm9uR3NQYXJ0c1N1bXMgPSBbMF07XG4gICAgICAgIGZvciAoY29uc3QgYiBvZiBib2R5KSB7XG4gICAgICAgICAgICBpZiAoYiA9PT0gR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICBub25Hc1BhcnRzU3Vtcy5wdXNoKG5vbkdzUGFydHMpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRCb2R5ID0gW1tdLCAwXTtcbiAgICAgICAgICAgICAgICBib2R5U2VnbWVudHMucHVzaChjdXJyZW50Qm9keSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Qm9keVswXS5wdXNoKGIpO1xuICAgICAgICAgICAgICAgIG5vbkdzUGFydHMrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgaSA9IGJvZHlTZWdtZW50cy5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCBmaWxlTGVuZ3RoID0gZmlsZS5sZW5ndGggLSBmaWxlVGFpbE1hdGNoO1xuICAgICAgICBmb3IgKGNvbnN0IGIgb2YgYm9keVNlZ21lbnRzKSB7XG4gICAgICAgICAgICBiWzFdID0gZmlsZUxlbmd0aCAtIChub25Hc1BhcnRzU3Vtc1tpLS1dICsgYlswXS5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIXRoaXMuI21hdGNoR2xvYlN0YXJCb2R5U2VjdGlvbnMoZmlsZSwgYm9keVNlZ21lbnRzLCBmaWxlSW5kZXgsIDAsIHBhcnRpYWwsIDAsICEhZmlsZVRhaWxNYXRjaCk7XG4gICAgfVxuICAgIC8vIHJldHVybiBmYWxzZSBmb3IgXCJub3BlLCBub3QgbWF0Y2hpbmdcIlxuICAgIC8vIHJldHVybiBudWxsIGZvciBcIm5vdCBtYXRjaGluZywgY2Fubm90IGtlZXAgdHJ5aW5nXCJcbiAgICAjbWF0Y2hHbG9iU3RhckJvZHlTZWN0aW9ucyhmaWxlLCBcbiAgICAvLyBwYXR0ZXJuIHNlY3Rpb24sIGxhc3QgcG9zc2libGUgcG9zaXRpb24gZm9yIGl0XG4gICAgYm9keVNlZ21lbnRzLCBmaWxlSW5kZXgsIGJvZHlJbmRleCwgcGFydGlhbCwgZ2xvYlN0YXJEZXB0aCwgc2F3VGFpbCkge1xuICAgICAgICAvLyB0YWtlIHRoZSBmaXJzdCBib2R5IHNlZ21lbnQsIGFuZCB3YWxrIGZyb20gZmlsZUluZGV4IHRvIGl0cyBcImFmdGVyXCJcbiAgICAgICAgLy8gdmFsdWUgYXQgdGhlIGVuZFxuICAgICAgICAvLyBJZiBpdCBkb2Vzbid0IG1hdGNoIGF0IHRoYXQgcG9zaXRpb24sIHdlIGluY3JlbWVudCwgdW50aWwgd2UgaGl0XG4gICAgICAgIC8vIHRoYXQgZmluYWwgcG9zc2libGUgcG9zaXRpb24sIGFuZCBnaXZlIHVwLlxuICAgICAgICAvLyBJZiBpdCBkb2VzIG1hdGNoLCB0aGVuIGFkdmFuY2UgYW5kIHRyeSB0byByZXN0LlxuICAgICAgICAvLyBJZiBhbnkgb2YgdGhlbSBmYWlsIHdlIGtlZXAgd2Fsa2luZyBmb3J3YXJkLlxuICAgICAgICAvLyB0aGlzIGlzIHN0aWxsIGEgYml0IHJlY3Vyc2l2ZWx5IHBhaW5mdWwsIGJ1dCBpdCdzIG1vcmUgY29uc3RyYWluZWRcbiAgICAgICAgLy8gdGhhbiBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbnMsIGJlY2F1c2Ugd2UgbmV2ZXIgdGVzdCBzb21ldGhpbmcgdGhhdFxuICAgICAgICAvLyBjYW4ndCBwb3NzaWJseSBiZSBhIHZhbGlkIG1hdGNoaW5nIGNvbmRpdGlvbi5cbiAgICAgICAgY29uc3QgYnMgPSBib2R5U2VnbWVudHNbYm9keUluZGV4XTtcbiAgICAgICAgaWYgKCFicykge1xuICAgICAgICAgICAgLy8ganVzdCBtYWtlIHN1cmUgdGhhdCB0aGVyZSdzIG5vIGJhZCBkb3RzXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gZmlsZUluZGV4OyBpIDwgZmlsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHNhd1RhaWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGYgPSBmaWxlW2ldO1xuICAgICAgICAgICAgICAgIGlmIChmID09PSAnLicgfHxcbiAgICAgICAgICAgICAgICAgICAgZiA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAgICAgICAoIXRoaXMub3B0aW9ucy5kb3QgJiYgZi5zdGFydHNXaXRoKCcuJykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2F3VGFpbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBoYXZlIGEgbm9uLWdsb2JzdGFyIGJvZHkgc2VjdGlvbiB0byB0ZXN0XG4gICAgICAgIGNvbnN0IFtib2R5LCBhZnRlcl0gPSBicztcbiAgICAgICAgd2hpbGUgKGZpbGVJbmRleCA8PSBhZnRlcikge1xuICAgICAgICAgICAgY29uc3QgbSA9IHRoaXMuI21hdGNoT25lKGZpbGUuc2xpY2UoMCwgZmlsZUluZGV4ICsgYm9keS5sZW5ndGgpLCBib2R5LCBwYXJ0aWFsLCBmaWxlSW5kZXgsIDApO1xuICAgICAgICAgICAgLy8gaWYgbGltaXQgZXhjZWVkZWQsIG5vIG1hdGNoLiBpbnRlbnRpb25hbCBmYWxzZSBuZWdhdGl2ZSxcbiAgICAgICAgICAgIC8vIGFjY2VwdGFibGUgYnJlYWsgaW4gY29ycmVjdG5lc3MgZm9yIHNlY3VyaXR5LlxuICAgICAgICAgICAgaWYgKG0gJiYgZ2xvYlN0YXJEZXB0aCA8IHRoaXMubWF4R2xvYnN0YXJSZWN1cnNpb24pIHtcbiAgICAgICAgICAgICAgICAvLyBtYXRjaCEgc2VlIGlmIHRoZSByZXN0IG1hdGNoLiBpZiBzbywgd2UncmUgZG9uZSFcbiAgICAgICAgICAgICAgICBjb25zdCBzdWIgPSB0aGlzLiNtYXRjaEdsb2JTdGFyQm9keVNlY3Rpb25zKGZpbGUsIGJvZHlTZWdtZW50cywgZmlsZUluZGV4ICsgYm9keS5sZW5ndGgsIGJvZHlJbmRleCArIDEsIHBhcnRpYWwsIGdsb2JTdGFyRGVwdGggKyAxLCBzYXdUYWlsKTtcbiAgICAgICAgICAgICAgICBpZiAoc3ViICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ViO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGYgPSBmaWxlW2ZpbGVJbmRleF07XG4gICAgICAgICAgICBpZiAoZiA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgZiA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAgICghdGhpcy5vcHRpb25zLmRvdCAmJiBmLnN0YXJ0c1dpdGgoJy4nKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWxlSW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICAvLyB3YWxrZWQgb2ZmLiBubyBwb2ludCBjb250aW51aW5nXG4gICAgICAgIHJldHVybiBwYXJ0aWFsIHx8IG51bGw7XG4gICAgfVxuICAgICNtYXRjaE9uZShmaWxlLCBwYXR0ZXJuLCBwYXJ0aWFsLCBmaWxlSW5kZXgsIHBhdHRlcm5JbmRleCkge1xuICAgICAgICBsZXQgZmk7XG4gICAgICAgIGxldCBwaTtcbiAgICAgICAgbGV0IHBsO1xuICAgICAgICBsZXQgZmw7XG4gICAgICAgIGZvciAoZmkgPSBmaWxlSW5kZXgsXG4gICAgICAgICAgICBwaSA9IHBhdHRlcm5JbmRleCxcbiAgICAgICAgICAgIGZsID0gZmlsZS5sZW5ndGgsXG4gICAgICAgICAgICBwbCA9IHBhdHRlcm4ubGVuZ3RoOyBmaSA8IGZsICYmIHBpIDwgcGw7IGZpKyssIHBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoJ21hdGNoT25lIGxvb3AnKTtcbiAgICAgICAgICAgIGxldCBwID0gcGF0dGVybltwaV07XG4gICAgICAgICAgICBsZXQgZiA9IGZpbGVbZmldO1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhwYXR0ZXJuLCBwLCBmKTtcbiAgICAgICAgICAgIC8vIHNob3VsZCBiZSBpbXBvc3NpYmxlLlxuICAgICAgICAgICAgLy8gc29tZSBpbnZhbGlkIHJlZ2V4cCBzdHVmZiBpbiB0aGUgc2V0LlxuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAocCA9PT0gZmFsc2UgfHwgcCA9PT0gR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgLy8gc29tZXRoaW5nIG90aGVyIHRoYW4gKipcbiAgICAgICAgICAgIC8vIG5vbi1tYWdpYyBwYXR0ZXJucyBqdXN0IGhhdmUgdG8gbWF0Y2ggZXhhY3RseVxuICAgICAgICAgICAgLy8gcGF0dGVybnMgd2l0aCBtYWdpYyBoYXZlIGJlZW4gdHVybmVkIGludG8gcmVnZXhwcy5cbiAgICAgICAgICAgIGxldCBoaXQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaGl0ID0gZiA9PT0gcDtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdzdHJpbmcgbWF0Y2gnLCBwLCBmLCBoaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaGl0ID0gcC50ZXN0KGYpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ3BhdHRlcm4gbWF0Y2gnLCBwLCBmLCBoaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFoaXQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdGU6IGVuZGluZyBpbiAvIG1lYW5zIHRoYXQgd2UnbGwgZ2V0IGEgZmluYWwgXCJcIlxuICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLiAgVGhpcyBjYW4gb25seSBtYXRjaCBhXG4gICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgXCJcIiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLlxuICAgICAgICAvLyBJZiB0aGUgZmlsZSBlbmRzIGluIC8sIHRoZW4gaXQgY2FuIG9ubHkgbWF0Y2ggYVxuICAgICAgICAvLyBhIHBhdHRlcm4gdGhhdCBlbmRzIGluIC8sIHVubGVzcyB0aGUgcGF0dGVybiBqdXN0XG4gICAgICAgIC8vIGRvZXNuJ3QgaGF2ZSBhbnkgbW9yZSBmb3IgaXQuIEJ1dCwgYS9iLyBzaG91bGQgKm5vdCpcbiAgICAgICAgLy8gbWF0Y2ggXCJhL2IvKlwiLCBldmVuIHRob3VnaCBcIlwiIG1hdGNoZXMgYWdhaW5zdCB0aGVcbiAgICAgICAgLy8gW14vXSo/IHBhdHRlcm4sIGV4Y2VwdCBpbiBwYXJ0aWFsIG1vZGUsIHdoZXJlIGl0IG1pZ2h0XG4gICAgICAgIC8vIHNpbXBseSBub3QgYmUgcmVhY2hlZCB5ZXQuXG4gICAgICAgIC8vIEhvd2V2ZXIsIGEvYi8gc2hvdWxkIHN0aWxsIHNhdGlzZnkgYS8qXG4gICAgICAgIC8vIG5vdyBlaXRoZXIgd2UgZmVsbCBvZmYgdGhlIGVuZCBvZiB0aGUgcGF0dGVybiwgb3Igd2UncmUgZG9uZS5cbiAgICAgICAgaWYgKGZpID09PSBmbCAmJiBwaSA9PT0gcGwpIHtcbiAgICAgICAgICAgIC8vIHJhbiBvdXQgb2YgcGF0dGVybiBhbmQgZmlsZW5hbWUgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAgICAgICAgIC8vIGFuIGV4YWN0IGhpdCFcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZpID09PSBmbCkge1xuICAgICAgICAgICAgLy8gcmFuIG91dCBvZiBmaWxlLCBidXQgc3RpbGwgaGFkIHBhdHRlcm4gbGVmdC5cbiAgICAgICAgICAgIC8vIHRoaXMgaXMgb2sgaWYgd2UncmUgZG9pbmcgdGhlIG1hdGNoIGFzIHBhcnQgb2ZcbiAgICAgICAgICAgIC8vIGEgZ2xvYiBmcyB0cmF2ZXJzYWwuXG4gICAgICAgICAgICByZXR1cm4gcGFydGlhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwaSA9PT0gcGwpIHtcbiAgICAgICAgICAgIC8vIHJhbiBvdXQgb2YgcGF0dGVybiwgc3RpbGwgaGF2ZSBmaWxlIGxlZnQuXG4gICAgICAgICAgICAvLyB0aGlzIGlzIG9ubHkgYWNjZXB0YWJsZSBpZiB3ZSdyZSBvbiB0aGUgdmVyeSBsYXN0XG4gICAgICAgICAgICAvLyBlbXB0eSBzZWdtZW50IG9mIGEgZmlsZSB3aXRoIGEgdHJhaWxpbmcgc2xhc2guXG4gICAgICAgICAgICAvLyBhLyogc2hvdWxkIG1hdGNoIGEvYi9cbiAgICAgICAgICAgIHJldHVybiBmaSA9PT0gZmwgLSAxICYmIGZpbGVbZmldID09PSAnJztcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gc2hvdWxkIGJlIHVucmVhY2hhYmxlLlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3dGY/Jyk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICB9XG4gICAgYnJhY2VFeHBhbmQoKSB7XG4gICAgICAgIHJldHVybiBicmFjZUV4cGFuZCh0aGlzLnBhdHRlcm4sIHRoaXMub3B0aW9ucyk7XG4gICAgfVxuICAgIHBhcnNlKHBhdHRlcm4pIHtcbiAgICAgICAgYXNzZXJ0VmFsaWRQYXR0ZXJuKHBhdHRlcm4pO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAvLyBzaG9ydGN1dHNcbiAgICAgICAgaWYgKHBhdHRlcm4gPT09ICcqKicpXG4gICAgICAgICAgICByZXR1cm4gR0xPQlNUQVI7XG4gICAgICAgIGlmIChwYXR0ZXJuID09PSAnJylcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgLy8gZmFyIGFuZCBhd2F5LCB0aGUgbW9zdCBjb21tb24gZ2xvYiBwYXR0ZXJuIHBhcnRzIGFyZVxuICAgICAgICAvLyAqLCAqLiosIGFuZCAqLjxleHQ+ICBBZGQgYSBmYXN0IGNoZWNrIG1ldGhvZCBmb3IgdGhvc2UuXG4gICAgICAgIGxldCBtO1xuICAgICAgICBsZXQgZmFzdFRlc3QgPSBudWxsO1xuICAgICAgICBpZiAoKG0gPSBwYXR0ZXJuLm1hdGNoKHN0YXJSRSkpKSB7XG4gICAgICAgICAgICBmYXN0VGVzdCA9IG9wdGlvbnMuZG90ID8gc3RhclRlc3REb3QgOiBzdGFyVGVzdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgobSA9IHBhdHRlcm4ubWF0Y2goc3RhckRvdEV4dFJFKSkpIHtcbiAgICAgICAgICAgIGZhc3RUZXN0ID0gKG9wdGlvbnMubm9jYXNlID9cbiAgICAgICAgICAgICAgICBvcHRpb25zLmRvdCA/XG4gICAgICAgICAgICAgICAgICAgIHN0YXJEb3RFeHRUZXN0Tm9jYXNlRG90XG4gICAgICAgICAgICAgICAgICAgIDogc3RhckRvdEV4dFRlc3ROb2Nhc2VcbiAgICAgICAgICAgICAgICA6IG9wdGlvbnMuZG90ID8gc3RhckRvdEV4dFRlc3REb3RcbiAgICAgICAgICAgICAgICAgICAgOiBzdGFyRG90RXh0VGVzdCkobVsxXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKG0gPSBwYXR0ZXJuLm1hdGNoKHFtYXJrc1JFKSkpIHtcbiAgICAgICAgICAgIGZhc3RUZXN0ID0gKG9wdGlvbnMubm9jYXNlID9cbiAgICAgICAgICAgICAgICBvcHRpb25zLmRvdCA/XG4gICAgICAgICAgICAgICAgICAgIHFtYXJrc1Rlc3ROb2Nhc2VEb3RcbiAgICAgICAgICAgICAgICAgICAgOiBxbWFya3NUZXN0Tm9jYXNlXG4gICAgICAgICAgICAgICAgOiBvcHRpb25zLmRvdCA/IHFtYXJrc1Rlc3REb3RcbiAgICAgICAgICAgICAgICAgICAgOiBxbWFya3NUZXN0KShtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgobSA9IHBhdHRlcm4ubWF0Y2goc3RhckRvdFN0YXJSRSkpKSB7XG4gICAgICAgICAgICBmYXN0VGVzdCA9IG9wdGlvbnMuZG90ID8gc3RhckRvdFN0YXJUZXN0RG90IDogc3RhckRvdFN0YXJUZXN0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChtID0gcGF0dGVybi5tYXRjaChkb3RTdGFyUkUpKSkge1xuICAgICAgICAgICAgZmFzdFRlc3QgPSBkb3RTdGFyVGVzdDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZSA9IEFTVC5mcm9tR2xvYihwYXR0ZXJuLCB0aGlzLm9wdGlvbnMpLnRvTU1QYXR0ZXJuKCk7XG4gICAgICAgIGlmIChmYXN0VGVzdCAmJiB0eXBlb2YgcmUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAvLyBBdm9pZHMgb3ZlcnJpZGluZyBpbiBmcm96ZW4gZW52aXJvbm1lbnRzXG4gICAgICAgICAgICBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHJlLCAndGVzdCcsIHsgdmFsdWU6IGZhc3RUZXN0IH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZTtcbiAgICB9XG4gICAgbWFrZVJlKCkge1xuICAgICAgICBpZiAodGhpcy5yZWdleHAgfHwgdGhpcy5yZWdleHAgPT09IGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVnZXhwO1xuICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCB0aGlzLnNldCBpcyBhIDJkIGFycmF5IG9mIHBhcnRpYWxcbiAgICAgICAgLy8gcGF0dGVybiBzdHJpbmdzLCBvciBcIioqXCIuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEl0J3MgYmV0dGVyIHRvIHVzZSAubWF0Y2goKS4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkbid0XG4gICAgICAgIC8vIGJlIHVzZWQsIHJlYWxseSwgYnV0IGl0J3MgcHJldHR5IGNvbnZlbmllbnQgc29tZXRpbWVzLFxuICAgICAgICAvLyB3aGVuIHlvdSBqdXN0IHdhbnQgdG8gd29yayB3aXRoIGEgcmVnZXguXG4gICAgICAgIGNvbnN0IHNldCA9IHRoaXMuc2V0O1xuICAgICAgICBpZiAoIXNldC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucmVnZXhwID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWdleHA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgdHdvU3RhciA9IG9wdGlvbnMubm9nbG9ic3RhciA/IHN0YXJcbiAgICAgICAgICAgIDogb3B0aW9ucy5kb3QgPyB0d29TdGFyRG90XG4gICAgICAgICAgICAgICAgOiB0d29TdGFyTm9Eb3Q7XG4gICAgICAgIGNvbnN0IGZsYWdzID0gbmV3IFNldChvcHRpb25zLm5vY2FzZSA/IFsnaSddIDogW10pO1xuICAgICAgICAvLyByZWdleHBpZnkgbm9uLWdsb2JzdGFyIHBhdHRlcm5zXG4gICAgICAgIC8vIGlmICoqIGlzIG9ubHkgaXRlbSwgdGhlbiB3ZSBqdXN0IGRvIG9uZSB0d29TdGFyXG4gICAgICAgIC8vIGlmICoqIGlzIGZpcnN0LCBhbmQgdGhlcmUgYXJlIG1vcmUsIHByZXBlbmQgKFxcL3x0d29TdGFyXFwvKT8gdG8gbmV4dFxuICAgICAgICAvLyBpZiAqKiBpcyBsYXN0LCBhcHBlbmQgKFxcL3R3b1N0YXJ8KSB0byBwcmV2aW91c1xuICAgICAgICAvLyBpZiAqKiBpcyBpbiB0aGUgbWlkZGxlLCBhcHBlbmQgKFxcL3xcXC90d29TdGFyXFwvKSB0byBwcmV2aW91c1xuICAgICAgICAvLyB0aGVuIGZpbHRlciBvdXQgR0xPQlNUQVIgc3ltYm9sc1xuICAgICAgICBsZXQgcmUgPSBzZXRcbiAgICAgICAgICAgIC5tYXAocGF0dGVybiA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcCA9IHBhdHRlcm4ubWFwKHAgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZiBvZiBwLmZsYWdzLnNwbGl0KCcnKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLmFkZChmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0eXBlb2YgcCA9PT0gJ3N0cmluZycgPyByZWdFeHBFc2NhcGUocClcbiAgICAgICAgICAgICAgICAgICAgOiBwID09PSBHTE9CU1RBUiA/IEdMT0JTVEFSXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHAuX3NyYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBwLmZvckVhY2goKHAsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gcHBbaSArIDFdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXYgPSBwcFtpIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKHAgIT09IEdMT0JTVEFSIHx8IHByZXYgPT09IEdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHByZXYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkICYmIG5leHQgIT09IEdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcFtpICsgMV0gPSAnKD86XFxcXC98JyArIHR3b1N0YXIgKyAnXFxcXC8pPycgKyBuZXh0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHBbaV0gPSB0d29TdGFyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5leHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBwcFtpIC0gMV0gPSBwcmV2ICsgJyg/OlxcXFwvfFxcXFwvJyArIHR3b1N0YXIgKyAnKT8nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuZXh0ICE9PSBHTE9CU1RBUikge1xuICAgICAgICAgICAgICAgICAgICBwcFtpIC0gMV0gPSBwcmV2ICsgJyg/OlxcXFwvfFxcXFwvJyArIHR3b1N0YXIgKyAnXFxcXC8pJyArIG5leHQ7XG4gICAgICAgICAgICAgICAgICAgIHBwW2kgKyAxXSA9IEdMT0JTVEFSO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBwcC5maWx0ZXIocCA9PiBwICE9PSBHTE9CU1RBUik7XG4gICAgICAgICAgICAvLyBGb3IgcGFydGlhbCBtYXRjaGVzLCB3ZSBuZWVkIHRvIG1ha2UgdGhlIHBhdHRlcm4gbWF0Y2hcbiAgICAgICAgICAgIC8vIGFueSBwcmVmaXggb2YgdGhlIGZ1bGwgcGF0aC4gV2UgZG8gdGhpcyBieSBnZW5lcmF0aW5nXG4gICAgICAgICAgICAvLyBhbHRlcm5hdGl2ZSBwYXR0ZXJucyB0aGF0IG1hdGNoIHByb2dyZXNzaXZlbHkgbG9uZ2VyIHByZWZpeGVzLlxuICAgICAgICAgICAgaWYgKHRoaXMucGFydGlhbCAmJiBmaWx0ZXJlZC5sZW5ndGggPj0gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZWZpeGVzID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gZmlsdGVyZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4ZXMucHVzaChmaWx0ZXJlZC5zbGljZSgwLCBpKS5qb2luKCcvJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJyg/OicgKyBwcmVmaXhlcy5qb2luKCd8JykgKyAnKSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQuam9pbignLycpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJ3wnKTtcbiAgICAgICAgLy8gbmVlZCB0byB3cmFwIGluIHBhcmVucyBpZiB3ZSBoYWQgbW9yZSB0aGFuIG9uZSB0aGluZyB3aXRoIHwsXG4gICAgICAgIC8vIG90aGVyd2lzZSBvbmx5IHRoZSBmaXJzdCB3aWxsIGJlIGFuY2hvcmVkIHRvIF4gYW5kIHRoZSBsYXN0IHRvICRcbiAgICAgICAgY29uc3QgW29wZW4sIGNsb3NlXSA9IHNldC5sZW5ndGggPiAxID8gWycoPzonLCAnKSddIDogWycnLCAnJ107XG4gICAgICAgIC8vIG11c3QgbWF0Y2ggZW50aXJlIHBhdHRlcm5cbiAgICAgICAgLy8gZW5kaW5nIGluIGEgKiBvciAqKiB3aWxsIG1ha2UgaXQgbGVzcyBzdHJpY3QuXG4gICAgICAgIHJlID0gJ14nICsgb3BlbiArIHJlICsgY2xvc2UgKyAnJCc7XG4gICAgICAgIC8vIEluIHBhcnRpYWwgbW9kZSwgJy8nIHNob3VsZCBhbHdheXMgbWF0Y2ggYXMgaXQncyBhIHZhbGlkIHByZWZpeCBmb3IgYW55IHBhdHRlcm5cbiAgICAgICAgaWYgKHRoaXMucGFydGlhbCkge1xuICAgICAgICAgICAgcmUgPSAnXig/OlxcXFwvfCcgKyBvcGVuICsgcmUuc2xpY2UoMSwgLTEpICsgY2xvc2UgKyAnKSQnO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNhbiBtYXRjaCBhbnl0aGluZywgYXMgbG9uZyBhcyBpdCdzIG5vdCB0aGlzLlxuICAgICAgICBpZiAodGhpcy5uZWdhdGUpXG4gICAgICAgICAgICByZSA9ICdeKD8hJyArIHJlICsgJykuKyQnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5yZWdleHAgPSBuZXcgUmVnRXhwKHJlLCBbLi4uZmxhZ3NdLmpvaW4oJycpKTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIC8vIHNob3VsZCBiZSBpbXBvc3NpYmxlXG4gICAgICAgICAgICB0aGlzLnJlZ2V4cCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2V4cDtcbiAgICB9XG4gICAgc2xhc2hTcGxpdChwKSB7XG4gICAgICAgIC8vIGlmIHAgc3RhcnRzIHdpdGggLy8gb24gd2luZG93cywgd2UgcHJlc2VydmUgdGhhdFxuICAgICAgICAvLyBzbyB0aGF0IFVOQyBwYXRocyBhcmVuJ3QgYnJva2VuLiAgT3RoZXJ3aXNlLCBhbnkgbnVtYmVyIG9mXG4gICAgICAgIC8vIC8gY2hhcmFjdGVycyBhcmUgY29hbGVzY2VkIGludG8gb25lLCB1bmxlc3NcbiAgICAgICAgLy8gcHJlc2VydmVNdWx0aXBsZVNsYXNoZXMgaXMgc2V0IHRvIHRydWUuXG4gICAgICAgIGlmICh0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gcC5zcGxpdCgnLycpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaXNXaW5kb3dzICYmIC9eXFwvXFwvW14vXSsvLnRlc3QocCkpIHtcbiAgICAgICAgICAgIC8vIGFkZCBhbiBleHRyYSAnJyBmb3IgdGhlIG9uZSB3ZSBsb3NlXG4gICAgICAgICAgICByZXR1cm4gWycnLCAuLi5wLnNwbGl0KC9cXC8rLyldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHAuc3BsaXQoL1xcLysvKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtYXRjaChmLCBwYXJ0aWFsID0gdGhpcy5wYXJ0aWFsKSB7XG4gICAgICAgIHRoaXMuZGVidWcoJ21hdGNoJywgZiwgdGhpcy5wYXR0ZXJuKTtcbiAgICAgICAgLy8gc2hvcnQtY2lyY3VpdCBpbiB0aGUgY2FzZSBvZiBidXN0ZWQgdGhpbmdzLlxuICAgICAgICAvLyBjb21tZW50cywgZXRjLlxuICAgICAgICBpZiAodGhpcy5jb21tZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZW1wdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBmID09PSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZiA9PT0gJy8nICYmIHBhcnRpYWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIC8vIHdpbmRvd3M6IG5lZWQgdG8gdXNlIC8sIG5vdCBcXFxuICAgICAgICBpZiAodGhpcy5pc1dpbmRvd3MpIHtcbiAgICAgICAgICAgIGYgPSBmLnNwbGl0KCdcXFxcJykuam9pbignLycpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRyZWF0IHRoZSB0ZXN0IHBhdGggYXMgYSBzZXQgb2YgcGF0aHBhcnRzLlxuICAgICAgICBjb25zdCBmZiA9IHRoaXMuc2xhc2hTcGxpdChmKTtcbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sICdzcGxpdCcsIGZmKTtcbiAgICAgICAgLy8ganVzdCBPTkUgb2YgdGhlIHBhdHRlcm4gc2V0cyBpbiB0aGlzLnNldCBuZWVkcyB0byBtYXRjaFxuICAgICAgICAvLyBpbiBvcmRlciBmb3IgaXQgdG8gYmUgdmFsaWQuICBJZiBuZWdhdGluZywgdGhlbiBqdXN0IG9uZVxuICAgICAgICAvLyBtYXRjaCBtZWFucyB0aGF0IHdlIGhhdmUgZmFpbGVkLlxuICAgICAgICAvLyBFaXRoZXIgd2F5LCByZXR1cm4gb24gdGhlIGZpcnN0IGhpdC5cbiAgICAgICAgY29uc3Qgc2V0ID0gdGhpcy5zZXQ7XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCAnc2V0Jywgc2V0KTtcbiAgICAgICAgLy8gRmluZCB0aGUgYmFzZW5hbWUgb2YgdGhlIHBhdGggYnkgbG9va2luZyBmb3IgdGhlIGxhc3Qgbm9uLWVtcHR5IHNlZ21lbnRcbiAgICAgICAgbGV0IGZpbGVuYW1lID0gZmZbZmYubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICghZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBmZi5sZW5ndGggLSAyOyAhZmlsZW5hbWUgJiYgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IGZmW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBzZXQpIHtcbiAgICAgICAgICAgIGxldCBmaWxlID0gZmY7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5tYXRjaEJhc2UgJiYgcGF0dGVybi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBmaWxlID0gW2ZpbGVuYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGhpdCA9IHRoaXMubWF0Y2hPbmUoZmlsZSwgcGF0dGVybiwgcGFydGlhbCk7XG4gICAgICAgICAgICBpZiAoaGl0KSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZmxpcE5lZ2F0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLm5lZ2F0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBkaWRuJ3QgZ2V0IGFueSBoaXRzLiAgdGhpcyBpcyBzdWNjZXNzIGlmIGl0J3MgYSBuZWdhdGl2ZVxuICAgICAgICAvLyBwYXR0ZXJuLCBmYWlsdXJlIG90aGVyd2lzZS5cbiAgICAgICAgaWYgKG9wdGlvbnMuZmxpcE5lZ2F0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5lZ2F0ZTtcbiAgICB9XG4gICAgc3RhdGljIGRlZmF1bHRzKGRlZikge1xuICAgICAgICByZXR1cm4gbWluaW1hdGNoLmRlZmF1bHRzKGRlZikuTWluaW1hdGNoO1xuICAgIH1cbn1cbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuZXhwb3J0IHsgQVNUIH0gZnJvbSAnLi9hc3QuanMnO1xuZXhwb3J0IHsgZXNjYXBlIH0gZnJvbSAnLi9lc2NhcGUuanMnO1xuZXhwb3J0IHsgdW5lc2NhcGUgfSBmcm9tICcuL3VuZXNjYXBlLmpzJztcbi8qIGM4IGlnbm9yZSBzdG9wICovXG5taW5pbWF0Y2guQVNUID0gQVNUO1xubWluaW1hdGNoLk1pbmltYXRjaCA9IE1pbmltYXRjaDtcbm1pbmltYXRjaC5lc2NhcGUgPSBlc2NhcGU7XG5taW5pbWF0Y2gudW5lc2NhcGUgPSB1bmVzY2FwZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgTWluaW1hdGNoIH0gZnJvbSAnbWluaW1hdGNoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBQYXRoU2N1cnJ5LCBQYXRoU2N1cnJ5RGFyd2luLCBQYXRoU2N1cnJ5UG9zaXgsIFBhdGhTY3VycnlXaW4zMiwgfSBmcm9tICdwYXRoLXNjdXJyeSc7XG5pbXBvcnQgeyBQYXR0ZXJuIH0gZnJvbSAnLi9wYXR0ZXJuLmpzJztcbmltcG9ydCB7IEdsb2JTdHJlYW0sIEdsb2JXYWxrZXIgfSBmcm9tICcuL3dhbGtlci5qcyc7XG4vLyBpZiBubyBwcm9jZXNzIGdsb2JhbCwganVzdCBjYWxsIGl0IGxpbnV4LlxuLy8gc28gd2UgZGVmYXVsdCB0byBjYXNlLXNlbnNpdGl2ZSwgLyBzZXBhcmF0b3JzXG5jb25zdCBkZWZhdWx0UGxhdGZvcm0gPSAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmXG4gICAgcHJvY2VzcyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnBsYXRmb3JtID09PSAnc3RyaW5nJykgP1xuICAgIHByb2Nlc3MucGxhdGZvcm1cbiAgICA6ICdsaW51eCc7XG4vKipcbiAqIEFuIG9iamVjdCB0aGF0IGNhbiBwZXJmb3JtIGdsb2IgcGF0dGVybiB0cmF2ZXJzYWxzLlxuICovXG5leHBvcnQgY2xhc3MgR2xvYiB7XG4gICAgYWJzb2x1dGU7XG4gICAgY3dkO1xuICAgIHJvb3Q7XG4gICAgZG90O1xuICAgIGRvdFJlbGF0aXZlO1xuICAgIGZvbGxvdztcbiAgICBpZ25vcmU7XG4gICAgbWFnaWNhbEJyYWNlcztcbiAgICBtYXJrO1xuICAgIG1hdGNoQmFzZTtcbiAgICBtYXhEZXB0aDtcbiAgICBub2JyYWNlO1xuICAgIG5vY2FzZTtcbiAgICBub2RpcjtcbiAgICBub2V4dDtcbiAgICBub2dsb2JzdGFyO1xuICAgIHBhdHRlcm47XG4gICAgcGxhdGZvcm07XG4gICAgcmVhbHBhdGg7XG4gICAgc2N1cnJ5O1xuICAgIHN0YXQ7XG4gICAgc2lnbmFsO1xuICAgIHdpbmRvd3NQYXRoc05vRXNjYXBlO1xuICAgIHdpdGhGaWxlVHlwZXM7XG4gICAgaW5jbHVkZUNoaWxkTWF0Y2hlcztcbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgICovXG4gICAgb3B0cztcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBwYXJzZWQgaW1tdXRhYmxlIHtAbGluayBQYXR0ZXJufSBvYmplY3RzLlxuICAgICAqL1xuICAgIHBhdHRlcm5zO1xuICAgIC8qKlxuICAgICAqIEFsbCBvcHRpb25zIGFyZSBzdG9yZWQgYXMgcHJvcGVydGllcyBvbiB0aGUgYEdsb2JgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIFNlZSB7QGxpbmsgR2xvYk9wdGlvbnN9IGZvciBmdWxsIG9wdGlvbnMgZGVzY3JpcHRpb25zLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IGEgcHJldmlvdXMgYEdsb2JgIG9iamVjdCBjYW4gYmUgcGFzc2VkIGFzIHRoZVxuICAgICAqIGBHbG9iT3B0aW9uc2AgdG8gYW5vdGhlciBgR2xvYmAgaW5zdGFudGlhdGlvbiB0byByZS11c2Ugc2V0dGluZ3NcbiAgICAgKiBhbmQgY2FjaGVzIHdpdGggYSBuZXcgcGF0dGVybi5cbiAgICAgKlxuICAgICAqIFRyYXZlcnNhbCBmdW5jdGlvbnMgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0byBydW4gdGhlIHdhbGtcbiAgICAgKiBhZ2Fpbi5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwYXR0ZXJuLCBvcHRzKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoIW9wdHMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdnbG9iIG9wdGlvbnMgcmVxdWlyZWQnKTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy53aXRoRmlsZVR5cGVzID0gISFvcHRzLndpdGhGaWxlVHlwZXM7XG4gICAgICAgIHRoaXMuc2lnbmFsID0gb3B0cy5zaWduYWw7XG4gICAgICAgIHRoaXMuZm9sbG93ID0gISFvcHRzLmZvbGxvdztcbiAgICAgICAgdGhpcy5kb3QgPSAhIW9wdHMuZG90O1xuICAgICAgICB0aGlzLmRvdFJlbGF0aXZlID0gISFvcHRzLmRvdFJlbGF0aXZlO1xuICAgICAgICB0aGlzLm5vZGlyID0gISFvcHRzLm5vZGlyO1xuICAgICAgICB0aGlzLm1hcmsgPSAhIW9wdHMubWFyaztcbiAgICAgICAgaWYgKCFvcHRzLmN3ZCkge1xuICAgICAgICAgICAgdGhpcy5jd2QgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRzLmN3ZCBpbnN0YW5jZW9mIFVSTCB8fCBvcHRzLmN3ZC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcbiAgICAgICAgICAgIG9wdHMuY3dkID0gZmlsZVVSTFRvUGF0aChvcHRzLmN3ZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jd2QgPSBvcHRzLmN3ZCB8fCAnJztcbiAgICAgICAgdGhpcy5yb290ID0gb3B0cy5yb290O1xuICAgICAgICB0aGlzLm1hZ2ljYWxCcmFjZXMgPSAhIW9wdHMubWFnaWNhbEJyYWNlcztcbiAgICAgICAgdGhpcy5ub2JyYWNlID0gISFvcHRzLm5vYnJhY2U7XG4gICAgICAgIHRoaXMubm9leHQgPSAhIW9wdHMubm9leHQ7XG4gICAgICAgIHRoaXMucmVhbHBhdGggPSAhIW9wdHMucmVhbHBhdGg7XG4gICAgICAgIHRoaXMuYWJzb2x1dGUgPSBvcHRzLmFic29sdXRlO1xuICAgICAgICB0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMgPSBvcHRzLmluY2x1ZGVDaGlsZE1hdGNoZXMgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLm5vZ2xvYnN0YXIgPSAhIW9wdHMubm9nbG9ic3RhcjtcbiAgICAgICAgdGhpcy5tYXRjaEJhc2UgPSAhIW9wdHMubWF0Y2hCYXNlO1xuICAgICAgICB0aGlzLm1heERlcHRoID1cbiAgICAgICAgICAgIHR5cGVvZiBvcHRzLm1heERlcHRoID09PSAnbnVtYmVyJyA/IG9wdHMubWF4RGVwdGggOiBJbmZpbml0eTtcbiAgICAgICAgdGhpcy5zdGF0ID0gISFvcHRzLnN0YXQ7XG4gICAgICAgIHRoaXMuaWdub3JlID0gb3B0cy5pZ25vcmU7XG4gICAgICAgIGlmICh0aGlzLndpdGhGaWxlVHlwZXMgJiYgdGhpcy5hYnNvbHV0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBzZXQgYWJzb2x1dGUgYW5kIHdpdGhGaWxlVHlwZXM6dHJ1ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHBhdHRlcm4gPSBbcGF0dGVybl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSA9XG4gICAgICAgICAgICAhIW9wdHMud2luZG93c1BhdGhzTm9Fc2NhcGUgfHxcbiAgICAgICAgICAgICAgICBvcHRzLmFsbG93V2luZG93c0VzY2FwZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlKSB7XG4gICAgICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5tYXAocCA9PiBwLnJlcGxhY2UoL1xcXFwvZywgJy8nKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF0Y2hCYXNlKSB7XG4gICAgICAgICAgICBpZiAob3B0cy5ub2dsb2JzdGFyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYmFzZSBtYXRjaGluZyByZXF1aXJlcyBnbG9ic3RhcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ubWFwKHAgPT4gKHAuaW5jbHVkZXMoJy8nKSA/IHAgOiBgLi8qKi8ke3B9YCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm47XG4gICAgICAgIHRoaXMucGxhdGZvcm0gPSBvcHRzLnBsYXRmb3JtIHx8IGRlZmF1bHRQbGF0Zm9ybTtcbiAgICAgICAgdGhpcy5vcHRzID0geyAuLi5vcHRzLCBwbGF0Zm9ybTogdGhpcy5wbGF0Zm9ybSB9O1xuICAgICAgICBpZiAob3B0cy5zY3VycnkpIHtcbiAgICAgICAgICAgIHRoaXMuc2N1cnJ5ID0gb3B0cy5zY3Vycnk7XG4gICAgICAgICAgICBpZiAob3B0cy5ub2Nhc2UgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIG9wdHMubm9jYXNlICE9PSBvcHRzLnNjdXJyeS5ub2Nhc2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vY2FzZSBvcHRpb24gY29udHJhZGljdHMgcHJvdmlkZWQgc2N1cnJ5IG9wdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgU2N1cnJ5ID0gb3B0cy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IFBhdGhTY3VycnlXaW4zMlxuICAgICAgICAgICAgICAgIDogb3B0cy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicgPyBQYXRoU2N1cnJ5RGFyd2luXG4gICAgICAgICAgICAgICAgICAgIDogb3B0cy5wbGF0Zm9ybSA/IFBhdGhTY3VycnlQb3NpeFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBQYXRoU2N1cnJ5O1xuICAgICAgICAgICAgdGhpcy5zY3VycnkgPSBuZXcgU2N1cnJ5KHRoaXMuY3dkLCB7XG4gICAgICAgICAgICAgICAgbm9jYXNlOiBvcHRzLm5vY2FzZSxcbiAgICAgICAgICAgICAgICBmczogb3B0cy5mcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubm9jYXNlID0gdGhpcy5zY3Vycnkubm9jYXNlO1xuICAgICAgICAvLyBJZiB5b3UgZG8gbm9jYXNlOnRydWUgb24gYSBjYXNlLXNlbnNpdGl2ZSBmaWxlIHN5c3RlbSwgdGhlblxuICAgICAgICAvLyB3ZSBuZWVkIHRvIHVzZSByZWdleHBzIGluc3RlYWQgb2Ygc3RyaW5ncyBmb3Igbm9uLW1hZ2ljXG4gICAgICAgIC8vIHBhdGggcG9ydGlvbnMsIGJlY2F1c2Ugc3RhdHRpbmcgYGFCY2Agd29uJ3QgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgLy8gZm9yIHRoZSBmaWxlIGBBYkNgIGZvciBleGFtcGxlLlxuICAgICAgICBjb25zdCBub2Nhc2VNYWdpY09ubHkgPSB0aGlzLnBsYXRmb3JtID09PSAnZGFyd2luJyB8fCB0aGlzLnBsYXRmb3JtID09PSAnd2luMzInO1xuICAgICAgICBjb25zdCBtbW8gPSB7XG4gICAgICAgICAgICAvLyBkZWZhdWx0IG5vY2FzZSBiYXNlZCBvbiBwbGF0Zm9ybVxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgICAgIGRvdDogdGhpcy5kb3QsXG4gICAgICAgICAgICBtYXRjaEJhc2U6IHRoaXMubWF0Y2hCYXNlLFxuICAgICAgICAgICAgbm9icmFjZTogdGhpcy5ub2JyYWNlLFxuICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgIG5vY2FzZU1hZ2ljT25seSxcbiAgICAgICAgICAgIG5vY29tbWVudDogdHJ1ZSxcbiAgICAgICAgICAgIG5vZXh0OiB0aGlzLm5vZXh0LFxuICAgICAgICAgICAgbm9uZWdhdGU6IHRydWUsXG4gICAgICAgICAgICBvcHRpbWl6YXRpb25MZXZlbDogMixcbiAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgd2luZG93c1BhdGhzTm9Fc2NhcGU6IHRoaXMud2luZG93c1BhdGhzTm9Fc2NhcGUsXG4gICAgICAgICAgICBkZWJ1ZzogISF0aGlzLm9wdHMuZGVidWcsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG1tcyA9IHRoaXMucGF0dGVybi5tYXAocCA9PiBuZXcgTWluaW1hdGNoKHAsIG1tbykpO1xuICAgICAgICBjb25zdCBbbWF0Y2hTZXQsIGdsb2JQYXJ0c10gPSBtbXMucmVkdWNlKChzZXQsIG0pID0+IHtcbiAgICAgICAgICAgIHNldFswXS5wdXNoKC4uLm0uc2V0KTtcbiAgICAgICAgICAgIHNldFsxXS5wdXNoKC4uLm0uZ2xvYlBhcnRzKTtcbiAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgIH0sIFtbXSwgW11dKTtcbiAgICAgICAgdGhpcy5wYXR0ZXJucyA9IG1hdGNoU2V0Lm1hcCgoc2V0LCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBnID0gZ2xvYlBhcnRzW2ldO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAoIWcpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBhdHRlcm4gb2JqZWN0Jyk7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQYXR0ZXJuKHNldCwgZywgMCwgdGhpcy5wbGF0Zm9ybSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyB3YWxrKCkge1xuICAgICAgICAvLyBXYWxrZXJzIGFsd2F5cyByZXR1cm4gYXJyYXkgb2YgUGF0aCBvYmplY3RzLCBzbyB3ZSBqdXN0IGhhdmUgdG9cbiAgICAgICAgLy8gY29lcmNlIHRoZW0gaW50byB0aGUgcmlnaHQgc2hhcGUuICBJdCB3aWxsIGhhdmUgYWxyZWFkeSBjYWxsZWRcbiAgICAgICAgLy8gcmVhbHBhdGgoKSBpZiB0aGUgb3B0aW9uIHdhcyBzZXQgdG8gZG8gc28sIHNvIHdlIGtub3cgdGhhdCdzIGNhY2hlZC5cbiAgICAgICAgLy8gc3RhcnQgb3V0IGtub3dpbmcgdGhlIGN3ZCwgYXQgbGVhc3RcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLihhd2FpdCBuZXcgR2xvYldhbGtlcih0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgICAgICAgbWF4RGVwdGg6IHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgICAgIDogSW5maW5pdHksXG4gICAgICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlQ2hpbGRNYXRjaGVzOiB0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMsXG4gICAgICAgICAgICB9KS53YWxrKCkpLFxuICAgICAgICBdO1xuICAgIH1cbiAgICB3YWxrU3luYygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLm5ldyBHbG9iV2Fsa2VyKHRoaXMucGF0dGVybnMsIHRoaXMuc2N1cnJ5LmN3ZCwge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICAgICAgICBtYXhEZXB0aDogdGhpcy5tYXhEZXB0aCAhPT0gSW5maW5pdHkgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1heERlcHRoICsgdGhpcy5zY3VycnkuY3dkLmRlcHRoKClcbiAgICAgICAgICAgICAgICAgICAgOiBJbmZpbml0eSxcbiAgICAgICAgICAgICAgICBwbGF0Zm9ybTogdGhpcy5wbGF0Zm9ybSxcbiAgICAgICAgICAgICAgICBub2Nhc2U6IHRoaXMubm9jYXNlLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM6IHRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyxcbiAgICAgICAgICAgIH0pLndhbGtTeW5jKCksXG4gICAgICAgIF07XG4gICAgfVxuICAgIHN0cmVhbSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBHbG9iU3RyZWFtKHRoaXMucGF0dGVybnMsIHRoaXMuc2N1cnJ5LmN3ZCwge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgICAgbWF4RGVwdGg6IHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ID9cbiAgICAgICAgICAgICAgICB0aGlzLm1heERlcHRoICsgdGhpcy5zY3VycnkuY3dkLmRlcHRoKClcbiAgICAgICAgICAgICAgICA6IEluZmluaXR5LFxuICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICBub2Nhc2U6IHRoaXMubm9jYXNlLFxuICAgICAgICAgICAgaW5jbHVkZUNoaWxkTWF0Y2hlczogdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzLFxuICAgICAgICB9KS5zdHJlYW0oKTtcbiAgICB9XG4gICAgc3RyZWFtU3luYygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBHbG9iU3RyZWFtKHRoaXMucGF0dGVybnMsIHRoaXMuc2N1cnJ5LmN3ZCwge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgICAgbWF4RGVwdGg6IHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ID9cbiAgICAgICAgICAgICAgICB0aGlzLm1heERlcHRoICsgdGhpcy5zY3VycnkuY3dkLmRlcHRoKClcbiAgICAgICAgICAgICAgICA6IEluZmluaXR5LFxuICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICBub2Nhc2U6IHRoaXMubm9jYXNlLFxuICAgICAgICAgICAgaW5jbHVkZUNoaWxkTWF0Y2hlczogdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzLFxuICAgICAgICB9KS5zdHJlYW1TeW5jKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgc3luYyBpdGVyYXRpb24gZnVuY3Rpb24uIFJldHVybnMgYSBHZW5lcmF0b3IgdGhhdFxuICAgICAqIGl0ZXJhdGVzIG92ZXIgdGhlIHJlc3VsdHMuXG4gICAgICovXG4gICAgaXRlcmF0ZVN5bmMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmVhbVN5bmMoKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVyYXRlU3luYygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IGFzeW5jIGl0ZXJhdGlvbiBmdW5jdGlvbi4gUmV0dXJucyBhbiBBc3luY0dlbmVyYXRvciB0aGF0XG4gICAgICogaXRlcmF0ZXMgb3ZlciB0aGUgcmVzdWx0cy5cbiAgICAgKi9cbiAgICBpdGVyYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJlYW0oKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcbiAgICB9XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0ZSgpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdsb2IuanMubWFwIiwKICAgICJpbXBvcnR7dHJhY2luZ0NoYW5uZWwgYXMgRyxjaGFubmVsIGFzIFB9ZnJvbVwibm9kZTpkaWFnbm9zdGljc19jaGFubmVsXCI7dmFyIFM9UChcImxydS1jYWNoZTptZXRyaWNzXCIpLFc9RyhcImxydS1jYWNoZVwiKTt2YXIgTD10eXBlb2YgcGVyZm9ybWFuY2U9PVwib2JqZWN0XCImJnBlcmZvcm1hbmNlJiZ0eXBlb2YgcGVyZm9ybWFuY2Uubm93PT1cImZ1bmN0aW9uXCI/cGVyZm9ybWFuY2U6RGF0ZTt2YXIgRD0oKT0+Uy5oYXNTdWJzY3JpYmVyc3x8Vy5oYXNTdWJzY3JpYmVycyxVPW5ldyBTZXQsTT10eXBlb2YgcHJvY2Vzcz09XCJvYmplY3RcIiYmcHJvY2Vzcz9wcm9jZXNzOnt9LGs9KHUsZSx0LGkpPT57dHlwZW9mIE0uZW1pdFdhcm5pbmc9PVwiZnVuY3Rpb25cIj9NLmVtaXRXYXJuaW5nKHUsZSx0LGkpOmNvbnNvbGUuZXJyb3IoYFske3R9XSAke2V9OiAke3V9YCl9LEg9dT0+IVUuaGFzKHUpO3ZhciBUPXU9PiEhdSYmdT09PU1hdGguZmxvb3IodSkmJnU+MCYmaXNGaW5pdGUodSksaj11PT5UKHUpP3U8PU1hdGgucG93KDIsOCk/VWludDhBcnJheTp1PD1NYXRoLnBvdygyLDE2KT9VaW50MTZBcnJheTp1PD1NYXRoLnBvdygyLDMyKT9VaW50MzJBcnJheTp1PD1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUj9POm51bGw6bnVsbCxPPWNsYXNzIGV4dGVuZHMgQXJyYXl7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5maWxsKDApfX0sUj1jbGFzcyB1e2hlYXA7bGVuZ3RoO3N0YXRpYyNvPSExO3N0YXRpYyBjcmVhdGUoZSl7bGV0IHQ9aihlKTtpZighdClyZXR1cm5bXTt1LiNvPSEwO2xldCBpPW5ldyB1KGUsdCk7cmV0dXJuIHUuI289ITEsaX1jb25zdHJ1Y3RvcihlLHQpe2lmKCF1LiNvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnN0YW50aWF0ZSBTdGFjayB1c2luZyBTdGFjay5jcmVhdGUobilcIik7dGhpcy5oZWFwPW5ldyB0KGUpLHRoaXMubGVuZ3RoPTB9cHVzaChlKXt0aGlzLmhlYXBbdGhpcy5sZW5ndGgrK109ZX1wb3AoKXtyZXR1cm4gdGhpcy5oZWFwWy0tdGhpcy5sZW5ndGhdfX0sST1jbGFzcyB1eyNvOyNjOyNTOyNPOyN3OyNNOyNJOyNtO2dldCBwZXJmKCl7cmV0dXJuIHRoaXMuI219dHRsO3R0bFJlc29sdXRpb247dHRsQXV0b3B1cmdlO3VwZGF0ZUFnZU9uR2V0O3VwZGF0ZUFnZU9uSGFzO2FsbG93U3RhbGU7bm9EaXNwb3NlT25TZXQ7bm9VcGRhdGVUVEw7bWF4RW50cnlTaXplO3NpemVDYWxjdWxhdGlvbjtub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb247bm9EZWxldGVPblN0YWxlR2V0O2FsbG93U3RhbGVPbkZldGNoQWJvcnQ7YWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb247aWdub3JlRmV0Y2hBYm9ydDtiYWNrZ3JvdW5kRmV0Y2hTaXplOyNuOyNiOyNzOyNpOyN0OyNsOyN1OyNhOyNoOyN5OyNyOyNfOyNGOyNkOyNnOyNUOyNVOyNmOyN4O3N0YXRpYyB1bnNhZmVFeHBvc2VJbnRlcm5hbHMoZSl7cmV0dXJue3N0YXJ0czplLiNGLHR0bHM6ZS4jZCxhdXRvcHVyZ2VUaW1lcnM6ZS4jZyxzaXplczplLiNfLGtleU1hcDplLiNzLGtleUxpc3Q6ZS4jaSx2YWxMaXN0OmUuI3QsbmV4dDplLiNsLHByZXY6ZS4jdSxnZXQgaGVhZCgpe3JldHVybiBlLiNhfSxnZXQgdGFpbCgpe3JldHVybiBlLiNofSxmcmVlOmUuI3ksaXNCYWNrZ3JvdW5kRmV0Y2g6dD0+ZS4jZSh0KSxiYWNrZ3JvdW5kRmV0Y2g6KHQsaSxzLG4pPT5lLiNQKHQsaSxzLG4pLG1vdmVUb1RhaWw6dD0+ZS4jTCh0KSxpbmRleGVzOnQ9PmUuI0EodCkscmluZGV4ZXM6dD0+ZS4jeih0KSxpc1N0YWxlOnQ9PmUuI3AodCl9fWdldCBtYXgoKXtyZXR1cm4gdGhpcy4jb31nZXQgbWF4U2l6ZSgpe3JldHVybiB0aGlzLiNjfWdldCBjYWxjdWxhdGVkU2l6ZSgpe3JldHVybiB0aGlzLiNifWdldCBzaXplKCl7cmV0dXJuIHRoaXMuI259Z2V0IGZldGNoTWV0aG9kKCl7cmV0dXJuIHRoaXMuI019Z2V0IG1lbW9NZXRob2QoKXtyZXR1cm4gdGhpcy4jSX1nZXQgZGlzcG9zZSgpe3JldHVybiB0aGlzLiNTfWdldCBvbkluc2VydCgpe3JldHVybiB0aGlzLiNPfWdldCBkaXNwb3NlQWZ0ZXIoKXtyZXR1cm4gdGhpcy4jd31jb25zdHJ1Y3RvcihlKXtsZXR7bWF4OnQ9MCx0dGw6aSx0dGxSZXNvbHV0aW9uOnM9MSx0dGxBdXRvcHVyZ2U6bix1cGRhdGVBZ2VPbkdldDpyLHVwZGF0ZUFnZU9uSGFzOmgsYWxsb3dTdGFsZTphLGRpc3Bvc2U6byxvbkluc2VydDpkLGRpc3Bvc2VBZnRlcjp5LG5vRGlzcG9zZU9uU2V0Ol8sbm9VcGRhdGVUVEw6YyxtYXhTaXplOmc9MCxtYXhFbnRyeVNpemU6Zj0wLHNpemVDYWxjdWxhdGlvbjpiLGZldGNoTWV0aG9kOmwsbWVtb01ldGhvZDp3LG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbjpGLG5vRGVsZXRlT25TdGFsZUdldDptLGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uOnAsYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydDpBLGlnbm9yZUZldGNoQWJvcnQ6eixiYWNrZ3JvdW5kRmV0Y2hTaXplOkM9MSxwZXJmOkV9PWU7aWYodGhpcy5iYWNrZ3JvdW5kRmV0Y2hTaXplPUMsRSE9PXZvaWQgMCYmdHlwZW9mIEU/Lm5vdyE9XCJmdW5jdGlvblwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJwZXJmIG9wdGlvbiBtdXN0IGhhdmUgYSBub3coKSBtZXRob2QgaWYgc3BlY2lmaWVkXCIpO2lmKHRoaXMuI209RT8/TCx0IT09MCYmIVQodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm1heCBvcHRpb24gbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXJcIik7bGV0IHY9dD9qKHQpOkFycmF5O2lmKCF2KXRocm93IG5ldyBFcnJvcihcImludmFsaWQgbWF4IHZhbHVlOiBcIit0KTtpZih0aGlzLiNvPXQsdGhpcy4jYz1nLHRoaXMubWF4RW50cnlTaXplPWZ8fHRoaXMuI2MsdGhpcy5zaXplQ2FsY3VsYXRpb249Yix0aGlzLnNpemVDYWxjdWxhdGlvbil7aWYoIXRoaXMuI2MmJiF0aGlzLm1heEVudHJ5U2l6ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiY2Fubm90IHNldCBzaXplQ2FsY3VsYXRpb24gd2l0aG91dCBzZXR0aW5nIG1heFNpemUgb3IgbWF4RW50cnlTaXplXCIpO2lmKHR5cGVvZiB0aGlzLnNpemVDYWxjdWxhdGlvbiE9XCJmdW5jdGlvblwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJzaXplQ2FsY3VsYXRpb24gc2V0IHRvIG5vbi1mdW5jdGlvblwiKX1pZih3IT09dm9pZCAwJiZ0eXBlb2YgdyE9XCJmdW5jdGlvblwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJtZW1vTWV0aG9kIG11c3QgYmUgYSBmdW5jdGlvbiBpZiBkZWZpbmVkXCIpO2lmKHRoaXMuI0k9dyxsIT09dm9pZCAwJiZ0eXBlb2YgbCE9XCJmdW5jdGlvblwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJmZXRjaE1ldGhvZCBtdXN0IGJlIGEgZnVuY3Rpb24gaWYgc3BlY2lmaWVkXCIpO2lmKHRoaXMuI009bCx0aGlzLiNVPSEhbCx0aGlzLiNzPW5ldyBNYXAsdGhpcy4jaT1BcnJheS5mcm9tKHtsZW5ndGg6dH0pLmZpbGwodm9pZCAwKSx0aGlzLiN0PUFycmF5LmZyb20oe2xlbmd0aDp0fSkuZmlsbCh2b2lkIDApLHRoaXMuI2w9bmV3IHYodCksdGhpcy4jdT1uZXcgdih0KSx0aGlzLiNhPTAsdGhpcy4jaD0wLHRoaXMuI3k9Ui5jcmVhdGUodCksdGhpcy4jbj0wLHRoaXMuI2I9MCx0eXBlb2Ygbz09XCJmdW5jdGlvblwiJiYodGhpcy4jUz1vKSx0eXBlb2YgZD09XCJmdW5jdGlvblwiJiYodGhpcy4jTz1kKSx0eXBlb2YgeT09XCJmdW5jdGlvblwiPyh0aGlzLiN3PXksdGhpcy4jcj1bXSk6KHRoaXMuI3c9dm9pZCAwLHRoaXMuI3I9dm9pZCAwKSx0aGlzLiNUPSEhdGhpcy4jUyx0aGlzLiN4PSEhdGhpcy4jTyx0aGlzLiNmPSEhdGhpcy4jdyx0aGlzLm5vRGlzcG9zZU9uU2V0PSEhXyx0aGlzLm5vVXBkYXRlVFRMPSEhYyx0aGlzLm5vRGVsZXRlT25GZXRjaFJlamVjdGlvbj0hIUYsdGhpcy5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbj0hIXAsdGhpcy5hbGxvd1N0YWxlT25GZXRjaEFib3J0PSEhQSx0aGlzLmlnbm9yZUZldGNoQWJvcnQ9ISF6LHRoaXMubWF4RW50cnlTaXplIT09MCl7aWYodGhpcy4jYyE9PTAmJiFUKHRoaXMuI2MpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJtYXhTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNwZWNpZmllZFwiKTtpZighVCh0aGlzLm1heEVudHJ5U2l6ZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm1heEVudHJ5U2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBzcGVjaWZpZWRcIik7dGhpcy4jWCgpfWlmKHRoaXMuYWxsb3dTdGFsZT0hIWEsdGhpcy5ub0RlbGV0ZU9uU3RhbGVHZXQ9ISFtLHRoaXMudXBkYXRlQWdlT25HZXQ9ISFyLHRoaXMudXBkYXRlQWdlT25IYXM9ISFoLHRoaXMudHRsUmVzb2x1dGlvbj1UKHMpfHxzPT09MD9zOjEsdGhpcy50dGxBdXRvcHVyZ2U9ISFuLHRoaXMudHRsPWl8fDAsdGhpcy50dGwpe2lmKCFUKHRoaXMudHRsKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwidHRsIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNwZWNpZmllZFwiKTt0aGlzLiNrKCl9aWYodGhpcy4jbz09PTAmJnRoaXMudHRsPT09MCYmdGhpcy4jYz09PTApdGhyb3cgbmV3IFR5cGVFcnJvcihcIkF0IGxlYXN0IG9uZSBvZiBtYXgsIG1heFNpemUsIG9yIHR0bCBpcyByZXF1aXJlZFwiKTtpZighdGhpcy50dGxBdXRvcHVyZ2UmJiF0aGlzLiNvJiYhdGhpcy4jYyl7bGV0IHg9XCJMUlVfQ0FDSEVfVU5CT1VOREVEXCI7SCh4KSYmKFUuYWRkKHgpLGsoXCJUVEwgY2FjaGluZyB3aXRob3V0IHR0bEF1dG9wdXJnZSwgbWF4LCBvciBtYXhTaXplIGNhbiByZXN1bHQgaW4gdW5ib3VuZGVkIG1lbW9yeSBjb25zdW1wdGlvbi5cIixcIlVuYm91bmRlZENhY2hlV2FybmluZ1wiLHgsdSkpfX1nZXRSZW1haW5pbmdUVEwoZSl7cmV0dXJuIHRoaXMuI3MuaGFzKGUpPzEvMDowfSNrKCl7bGV0IGU9bmV3IE8odGhpcy4jbyksdD1uZXcgTyh0aGlzLiNvKTt0aGlzLiNkPWUsdGhpcy4jRj10O2xldCBpPXRoaXMudHRsQXV0b3B1cmdlP0FycmF5LmZyb20oe2xlbmd0aDp0aGlzLiNvfSk6dm9pZCAwO3RoaXMuI2c9aSx0aGlzLiNIPShoLGEsbz10aGlzLiNtLm5vdygpKT0+e3RbaF09YSE9PTA/bzowLGVbaF09YSxzKGgsYSl9LHRoaXMuI0Q9aD0+e3RbaF09ZVtoXSE9PTA/dGhpcy4jbS5ub3coKTowLHMoaCxlW2hdKX07bGV0IHM9dGhpcy50dGxBdXRvcHVyZ2U/KGgsYSk9PntpZihpPy5baF0mJihjbGVhclRpbWVvdXQoaVtoXSksaVtoXT12b2lkIDApLGEmJmEhPT0wJiZpKXtsZXQgbz1zZXRUaW1lb3V0KCgpPT57dGhpcy4jcChoKSYmdGhpcy4jRSh0aGlzLiNpW2hdLFwiZXhwaXJlXCIpfSxhKzEpO28udW5yZWYmJm8udW5yZWYoKSxpW2hdPW99fTooKT0+e307dGhpcy4jdj0oaCxhKT0+e2lmKGVbYV0pe2xldCBvPWVbYV0sZD10W2FdO2lmKCFvfHwhZClyZXR1cm47aC50dGw9byxoLnN0YXJ0PWQsaC5ub3c9bnx8cigpO2xldCB5PWgubm93LWQ7aC5yZW1haW5pbmdUVEw9by15fX07bGV0IG49MCxyPSgpPT57bGV0IGg9dGhpcy4jbS5ub3coKTtpZih0aGlzLnR0bFJlc29sdXRpb24+MCl7bj1oO2xldCBhPXNldFRpbWVvdXQoKCk9Pm49MCx0aGlzLnR0bFJlc29sdXRpb24pO2EudW5yZWYmJmEudW5yZWYoKX1yZXR1cm4gaH07dGhpcy5nZXRSZW1haW5pbmdUVEw9aD0+e2xldCBhPXRoaXMuI3MuZ2V0KGgpO2lmKGE9PT12b2lkIDApcmV0dXJuIDA7bGV0IG89ZVthXSxkPXRbYV07aWYoIW98fCFkKXJldHVybiAxLzA7bGV0IHk9KG58fHIoKSktZDtyZXR1cm4gby15fSx0aGlzLiNwPWg9PntsZXQgYT10W2hdLG89ZVtoXTtyZXR1cm4hIW8mJiEhYSYmKG58fHIoKSktYT5vfX0jRD0oKT0+e307I3Y9KCk9Pnt9OyNIPSgpPT57fTsjcD0oKT0+ITE7I1goKXtsZXQgZT1uZXcgTyh0aGlzLiNvKTt0aGlzLiNiPTAsdGhpcy4jXz1lLHRoaXMuI1I9dD0+e3RoaXMuI2ItPWVbdF0sZVt0XT0wfSx0aGlzLiNOPSh0LGkscyxuKT0+e2lmKCFUKHMpKXtpZih0aGlzLiNlKGkpKXJldHVybiB0aGlzLmJhY2tncm91bmRGZXRjaFNpemU7aWYobil7aWYodHlwZW9mIG4hPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgVHlwZUVycm9yKFwic2l6ZUNhbGN1bGF0aW9uIG11c3QgYmUgYSBmdW5jdGlvblwiKTtpZihzPW4oaSx0KSwhVChzKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwic2l6ZUNhbGN1bGF0aW9uIHJldHVybiBpbnZhbGlkIChleHBlY3QgcG9zaXRpdmUgaW50ZWdlcilcIil9ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzaXplIHZhbHVlIChtdXN0IGJlIHBvc2l0aXZlIGludGVnZXIpLiBXaGVuIG1heFNpemUgb3IgbWF4RW50cnlTaXplIGlzIHVzZWQsIHNpemVDYWxjdWxhdGlvbiBvciBzaXplIG11c3QgYmUgc2V0LlwiKX1yZXR1cm4gc30sdGhpcy4jaj0odCxpLHMpPT57aWYoZVt0XT1pLHRoaXMuI2Mpe2xldCBuPXRoaXMuI2MtZVt0XTtmb3IoO3RoaXMuI2I+bjspdGhpcy4jRyghMCl9dGhpcy4jYis9ZVt0XSxzJiYocy5lbnRyeVNpemU9aSxzLnRvdGFsQ2FsY3VsYXRlZFNpemU9dGhpcy4jYil9fSNSPWU9Pnt9OyNqPShlLHQsaSk9Pnt9OyNOPShlLHQsaSxzKT0+e2lmKGl8fHMpdGhyb3cgbmV3IFR5cGVFcnJvcihcImNhbm5vdCBzZXQgc2l6ZSB3aXRob3V0IHNldHRpbmcgbWF4U2l6ZSBvciBtYXhFbnRyeVNpemUgb24gY2FjaGVcIik7cmV0dXJuIDB9OyojQSh7YWxsb3dTdGFsZTplPXRoaXMuYWxsb3dTdGFsZX09e30pe2lmKHRoaXMuI24pZm9yKGxldCB0PXRoaXMuI2g7dGhpcy4jVih0KSYmKChlfHwhdGhpcy4jcCh0KSkmJih5aWVsZCB0KSx0IT09dGhpcy4jYSk7KXQ9dGhpcy4jdVt0XX0qI3ooe2FsbG93U3RhbGU6ZT10aGlzLmFsbG93U3RhbGV9PXt9KXtpZih0aGlzLiNuKWZvcihsZXQgdD10aGlzLiNhO3RoaXMuI1YodCkmJigoZXx8IXRoaXMuI3AodCkpJiYoeWllbGQgdCksdCE9PXRoaXMuI2gpOyl0PXRoaXMuI2xbdF19I1YoZSl7cmV0dXJuIGUhPT12b2lkIDAmJnRoaXMuI3MuZ2V0KHRoaXMuI2lbZV0pPT09ZX0qZW50cmllcygpe2ZvcihsZXQgZSBvZiB0aGlzLiNBKCkpdGhpcy4jdFtlXSE9PXZvaWQgMCYmdGhpcy4jaVtlXSE9PXZvaWQgMCYmIXRoaXMuI2UodGhpcy4jdFtlXSkmJih5aWVsZFt0aGlzLiNpW2VdLHRoaXMuI3RbZV1dKX0qcmVudHJpZXMoKXtmb3IobGV0IGUgb2YgdGhpcy4jeigpKXRoaXMuI3RbZV0hPT12b2lkIDAmJnRoaXMuI2lbZV0hPT12b2lkIDAmJiF0aGlzLiNlKHRoaXMuI3RbZV0pJiYoeWllbGRbdGhpcy4jaVtlXSx0aGlzLiN0W2VdXSl9KmtleXMoKXtmb3IobGV0IGUgb2YgdGhpcy4jQSgpKXtsZXQgdD10aGlzLiNpW2VdO3QhPT12b2lkIDAmJiF0aGlzLiNlKHRoaXMuI3RbZV0pJiYoeWllbGQgdCl9fSpya2V5cygpe2ZvcihsZXQgZSBvZiB0aGlzLiN6KCkpe2xldCB0PXRoaXMuI2lbZV07dCE9PXZvaWQgMCYmIXRoaXMuI2UodGhpcy4jdFtlXSkmJih5aWVsZCB0KX19KnZhbHVlcygpe2ZvcihsZXQgZSBvZiB0aGlzLiNBKCkpdGhpcy4jdFtlXSE9PXZvaWQgMCYmIXRoaXMuI2UodGhpcy4jdFtlXSkmJih5aWVsZCB0aGlzLiN0W2VdKX0qcnZhbHVlcygpe2ZvcihsZXQgZSBvZiB0aGlzLiN6KCkpdGhpcy4jdFtlXSE9PXZvaWQgMCYmIXRoaXMuI2UodGhpcy4jdFtlXSkmJih5aWVsZCB0aGlzLiN0W2VdKX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLmVudHJpZXMoKX1bU3ltYm9sLnRvU3RyaW5nVGFnXT1cIkxSVUNhY2hlXCI7ZmluZChlLHQ9e30pe2ZvcihsZXQgaSBvZiB0aGlzLiNBKCkpe2xldCBzPXRoaXMuI3RbaV0sbj10aGlzLiNlKHMpP3MuX19zdGFsZVdoaWxlRmV0Y2hpbmc6cztpZihuIT09dm9pZCAwJiZlKG4sdGhpcy4jaVtpXSx0aGlzKSlyZXR1cm4gdGhpcy4jQyh0aGlzLiNpW2ldLHQpfX1mb3JFYWNoKGUsdD10aGlzKXtmb3IobGV0IGkgb2YgdGhpcy4jQSgpKXtsZXQgcz10aGlzLiN0W2ldLG49dGhpcy4jZShzKT9zLl9fc3RhbGVXaGlsZUZldGNoaW5nOnM7biE9PXZvaWQgMCYmZS5jYWxsKHQsbix0aGlzLiNpW2ldLHRoaXMpfX1yZm9yRWFjaChlLHQ9dGhpcyl7Zm9yKGxldCBpIG9mIHRoaXMuI3ooKSl7bGV0IHM9dGhpcy4jdFtpXSxuPXRoaXMuI2Uocyk/cy5fX3N0YWxlV2hpbGVGZXRjaGluZzpzO24hPT12b2lkIDAmJmUuY2FsbCh0LG4sdGhpcy4jaVtpXSx0aGlzKX19cHVyZ2VTdGFsZSgpe2xldCBlPSExO2ZvcihsZXQgdCBvZiB0aGlzLiN6KHthbGxvd1N0YWxlOiEwfSkpdGhpcy4jcCh0KSYmKHRoaXMuI0UodGhpcy4jaVt0XSxcImV4cGlyZVwiKSxlPSEwKTtyZXR1cm4gZX1pbmZvKGUpe2xldCB0PXRoaXMuI3MuZ2V0KGUpO2lmKHQ9PT12b2lkIDApcmV0dXJuO2xldCBpPXRoaXMuI3RbdF0scz10aGlzLiNlKGkpP2kuX19zdGFsZVdoaWxlRmV0Y2hpbmc6aTtpZihzPT09dm9pZCAwKXJldHVybjtsZXQgbj17dmFsdWU6c307aWYodGhpcy4jZCYmdGhpcy4jRil7bGV0IHI9dGhpcy4jZFt0XSxoPXRoaXMuI0ZbdF07aWYociYmaCl7bGV0IGE9ci0odGhpcy4jbS5ub3coKS1oKTtuLnR0bD1hLG4uc3RhcnQ9RGF0ZS5ub3coKX19cmV0dXJuIHRoaXMuI18mJihuLnNpemU9dGhpcy4jX1t0XSksbn1kdW1wKCl7bGV0IGU9W107Zm9yKGxldCB0IG9mIHRoaXMuI0Eoe2FsbG93U3RhbGU6ITB9KSl7bGV0IGk9dGhpcy4jaVt0XSxzPXRoaXMuI3RbdF0sbj10aGlzLiNlKHMpP3MuX19zdGFsZVdoaWxlRmV0Y2hpbmc6cztpZihuPT09dm9pZCAwfHxpPT09dm9pZCAwKWNvbnRpbnVlO2xldCByPXt2YWx1ZTpufTtpZih0aGlzLiNkJiZ0aGlzLiNGKXtyLnR0bD10aGlzLiNkW3RdO2xldCBoPXRoaXMuI20ubm93KCktdGhpcy4jRlt0XTtyLnN0YXJ0PU1hdGguZmxvb3IoRGF0ZS5ub3coKS1oKX10aGlzLiNfJiYoci5zaXplPXRoaXMuI19bdF0pLGUudW5zaGlmdChbaSxyXSl9cmV0dXJuIGV9bG9hZChlKXt0aGlzLmNsZWFyKCk7Zm9yKGxldFt0LGldb2YgZSl7aWYoaS5zdGFydCl7bGV0IHM9RGF0ZS5ub3coKS1pLnN0YXJ0O2kuc3RhcnQ9dGhpcy4jbS5ub3coKS1zfXRoaXMuI1codCxpLnZhbHVlLGkpfX1zZXQoZSx0LGk9e30pe2xldHtzdGF0dXM6cz1TLmhhc1N1YnNjcmliZXJzP3t9OnZvaWQgMH09aTtpLnN0YXR1cz1zLHMmJihzLm9wPVwic2V0XCIscy5rZXk9ZSx0IT09dm9pZCAwJiYocy52YWx1ZT10KSxzLmNhY2hlPXRoaXMpO2xldCBuPXRoaXMuI1coZSx0LGkpO3JldHVybiBzJiZTLmhhc1N1YnNjcmliZXJzJiZTLnB1Ymxpc2gocyksbn0jVyhlLHQsaSxzKXtsZXR7dHRsOm49dGhpcy50dGwsc3RhcnQ6cixub0Rpc3Bvc2VPblNldDpoPXRoaXMubm9EaXNwb3NlT25TZXQsc2l6ZUNhbGN1bGF0aW9uOmE9dGhpcy5zaXplQ2FsY3VsYXRpb24sc3RhdHVzOm99PWksZD10aGlzLiNlKHQpO2lmKHQ9PT12b2lkIDApcmV0dXJuIG8mJihvLnNldD1cImRlbGV0ZWRcIiksdGhpcy5kZWxldGUoZSksdGhpcztsZXR7bm9VcGRhdGVUVEw6eT10aGlzLm5vVXBkYXRlVFRMfT1pO28mJiFkJiYoby52YWx1ZT10KTtsZXQgXz10aGlzLiNOKGUsdCxpLnNpemV8fDAsYSxvKTtpZih0aGlzLm1heEVudHJ5U2l6ZSYmXz50aGlzLm1heEVudHJ5U2l6ZSlyZXR1cm4gdGhpcy4jRShlLFwic2V0XCIpLG8mJihvLnNldD1cIm1pc3NcIixvLm1heEVudHJ5U2l6ZUV4Y2VlZGVkPSEwKSx0aGlzO2xldCBjPXRoaXMuI249PT0wP3ZvaWQgMDp0aGlzLiNzLmdldChlKTtpZihjPT09dm9pZCAwKWM9dGhpcy4jbj09PTA/dGhpcy4jaDp0aGlzLiN5Lmxlbmd0aCE9PTA/dGhpcy4jeS5wb3AoKTp0aGlzLiNuPT09dGhpcy4jbz90aGlzLiNHKCExKTp0aGlzLiNuLHRoaXMuI2lbY109ZSx0aGlzLiN0W2NdPXQsdGhpcy4jcy5zZXQoZSxjKSx0aGlzLiNsW3RoaXMuI2hdPWMsdGhpcy4jdVtjXT10aGlzLiNoLHRoaXMuI2g9Yyx0aGlzLiNuKyssdGhpcy4jaihjLF8sbyksbyYmKG8uc2V0PVwiYWRkXCIpLHk9ITEsdGhpcy4jeCYmIWQmJnRoaXMuI08/Lih0LGUsXCJhZGRcIik7ZWxzZXt0aGlzLiNMKGMpO2xldCBnPXRoaXMuI3RbY107aWYodCE9PWcpe2lmKCFoKWlmKHRoaXMuI2UoZykpe2chPT1zJiZnLl9fYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcihcInJlcGxhY2VkXCIpKTtsZXR7X19zdGFsZVdoaWxlRmV0Y2hpbmc6Zn09ZztmIT09dm9pZCAwJiZmIT09dCYmKHRoaXMuI1QmJnRoaXMuI1M/LihmLGUsXCJzZXRcIiksdGhpcy4jZiYmdGhpcy4jcj8ucHVzaChbZixlLFwic2V0XCJdKSl9ZWxzZSB0aGlzLiNUJiZ0aGlzLiNTPy4oZyxlLFwic2V0XCIpLHRoaXMuI2YmJnRoaXMuI3I/LnB1c2goW2csZSxcInNldFwiXSk7aWYodGhpcy4jUihjKSx0aGlzLiNqKGMsXyxvKSx0aGlzLiN0W2NdPXQsIWQpe2xldCBmPWcmJnRoaXMuI2UoZyk/Zy5fX3N0YWxlV2hpbGVGZXRjaGluZzpnLGI9Zj09PXZvaWQgMD9cImFkZFwiOnQhPT1mP1wicmVwbGFjZVwiOlwidXBkYXRlXCI7byYmKG8uc2V0PWIsZiE9PXZvaWQgMCYmKG8ub2xkVmFsdWU9ZikpLHRoaXMuI3gmJnRoaXMub25JbnNlcnQ/Lih0LGUsYil9fWVsc2UgZHx8KG8mJihvLnNldD1cInVwZGF0ZVwiKSx0aGlzLiN4JiZ0aGlzLm9uSW5zZXJ0Py4odCxlLFwidXBkYXRlXCIpKX1pZihuIT09MCYmIXRoaXMuI2QmJnRoaXMuI2soKSx0aGlzLiNkJiYoeXx8dGhpcy4jSChjLG4sciksbyYmdGhpcy4jdihvLGMpKSwhaCYmdGhpcy4jZiYmdGhpcy4jcil7bGV0IGc9dGhpcy4jcixmO2Zvcig7Zj1nPy5zaGlmdCgpOyl0aGlzLiN3Py4oLi4uZil9cmV0dXJuIHRoaXN9cG9wKCl7dHJ5e2Zvcig7dGhpcy4jbjspe2xldCBlPXRoaXMuI3RbdGhpcy4jYV07aWYodGhpcy4jRyghMCksdGhpcy4jZShlKSl7aWYoZS5fX3N0YWxlV2hpbGVGZXRjaGluZylyZXR1cm4gZS5fX3N0YWxlV2hpbGVGZXRjaGluZ31lbHNlIGlmKGUhPT12b2lkIDApcmV0dXJuIGV9fWZpbmFsbHl7aWYodGhpcy4jZiYmdGhpcy4jcil7bGV0IGU9dGhpcy4jcix0O2Zvcig7dD1lPy5zaGlmdCgpOyl0aGlzLiN3Py4oLi4udCl9fX0jRyhlKXtsZXQgdD10aGlzLiNhLGk9dGhpcy4jaVt0XSxzPXRoaXMuI3RbdF0sbj10aGlzLiNlKHMpO24mJnMuX19hYm9ydENvbnRyb2xsZXIuYWJvcnQobmV3IEVycm9yKFwiZXZpY3RlZFwiKSk7bGV0IHI9bj9zLl9fc3RhbGVXaGlsZUZldGNoaW5nOnM7cmV0dXJuKHRoaXMuI1R8fHRoaXMuI2YpJiZyIT09dm9pZCAwJiYodGhpcy4jVCYmdGhpcy4jUz8uKHIsaSxcImV2aWN0XCIpLHRoaXMuI2YmJnRoaXMuI3I/LnB1c2goW3IsaSxcImV2aWN0XCJdKSksdGhpcy4jUih0KSx0aGlzLiNnPy5bdF0mJihjbGVhclRpbWVvdXQodGhpcy4jZ1t0XSksdGhpcy4jZ1t0XT12b2lkIDApLGUmJih0aGlzLiNpW3RdPXZvaWQgMCx0aGlzLiN0W3RdPXZvaWQgMCx0aGlzLiN5LnB1c2godCkpLHRoaXMuI249PT0xPyh0aGlzLiNhPXRoaXMuI2g9MCx0aGlzLiN5Lmxlbmd0aD0wKTp0aGlzLiNhPXRoaXMuI2xbdF0sdGhpcy4jcy5kZWxldGUoaSksdGhpcy4jbi0tLHR9aGFzKGUsdD17fSl7bGV0e3N0YXR1czppPVMuaGFzU3Vic2NyaWJlcnM/e306dm9pZCAwfT10O3Quc3RhdHVzPWksaSYmKGkub3A9XCJoYXNcIixpLmtleT1lLGkuY2FjaGU9dGhpcyk7bGV0IHM9dGhpcy4jWShlLHQpO3JldHVybiBTLmhhc1N1YnNjcmliZXJzJiZTLnB1Ymxpc2goaSksc30jWShlLHQ9e30pe2xldHt1cGRhdGVBZ2VPbkhhczppPXRoaXMudXBkYXRlQWdlT25IYXMsc3RhdHVzOnN9PXQsbj10aGlzLiNzLmdldChlKTtpZihuIT09dm9pZCAwKXtsZXQgcj10aGlzLiN0W25dO2lmKHRoaXMuI2UocikmJnIuX19zdGFsZVdoaWxlRmV0Y2hpbmc9PT12b2lkIDApcmV0dXJuITE7aWYodGhpcy4jcChuKSlzJiYocy5oYXM9XCJzdGFsZVwiLHRoaXMuI3YocyxuKSk7ZWxzZSByZXR1cm4gaSYmdGhpcy4jRChuKSxzJiYocy5oYXM9XCJoaXRcIix0aGlzLiN2KHMsbikpLCEwfWVsc2UgcyYmKHMuaGFzPVwibWlzc1wiKTtyZXR1cm4hMX1wZWVrKGUsdD17fSl7bGV0e3N0YXR1czppPUQoKT97fTp2b2lkIDB9PXQ7aSYmKGkub3A9XCJwZWVrXCIsaS5rZXk9ZSxpLmNhY2hlPXRoaXMpLHQuc3RhdHVzPWk7bGV0IHM9dGhpcy4jSihlLHQpO3JldHVybiBTLmhhc1N1YnNjcmliZXJzJiZTLnB1Ymxpc2goaSksc30jSihlLHQpe2xldHtzdGF0dXM6aSxhbGxvd1N0YWxlOnM9dGhpcy5hbGxvd1N0YWxlfT10LG49dGhpcy4jcy5nZXQoZSk7aWYobj09PXZvaWQgMHx8IXMmJnRoaXMuI3Aobikpe2kmJihpLnBlZWs9bj09PXZvaWQgMD9cIm1pc3NcIjpcInN0YWxlXCIpO3JldHVybn1sZXQgcj10aGlzLiN0W25dLGg9dGhpcy4jZShyKT9yLl9fc3RhbGVXaGlsZUZldGNoaW5nOnI7cmV0dXJuIGkmJihoIT09dm9pZCAwPyhpLnBlZWs9XCJoaXRcIixpLnZhbHVlPWgpOmkucGVlaz1cIm1pc3NcIiksaH0jUChlLHQsaSxzKXtsZXQgbj10PT09dm9pZCAwP3ZvaWQgMDp0aGlzLiN0W3RdO2lmKHRoaXMuI2UobikpcmV0dXJuIG47bGV0IHI9bmV3IEFib3J0Q29udHJvbGxlcix7c2lnbmFsOmh9PWk7aD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsKCk9PnIuYWJvcnQoaC5yZWFzb24pLHtzaWduYWw6ci5zaWduYWx9KTtsZXQgYT17c2lnbmFsOnIuc2lnbmFsLG9wdGlvbnM6aSxjb250ZXh0OnN9LG89KGYsYj0hMSk9PntsZXR7YWJvcnRlZDpsfT1yLnNpZ25hbCx3PWkuaWdub3JlRmV0Y2hBYm9ydCYmZiE9PXZvaWQgMCxGPWkuaWdub3JlRmV0Y2hBYm9ydHx8ISEoaS5hbGxvd1N0YWxlT25GZXRjaEFib3J0JiZmIT09dm9pZCAwKTtpZihpLnN0YXR1cyYmKGwmJiFiPyhpLnN0YXR1cy5mZXRjaEFib3J0ZWQ9ITAsaS5zdGF0dXMuZmV0Y2hFcnJvcj1yLnNpZ25hbC5yZWFzb24sdyYmKGkuc3RhdHVzLmZldGNoQWJvcnRJZ25vcmVkPSEwKSk6aS5zdGF0dXMuZmV0Y2hSZXNvbHZlZD0hMCksbCYmIXcmJiFiKXJldHVybiB5KHIuc2lnbmFsLnJlYXNvbixGKTtsZXQgbT1jLHA9dGhpcy4jdFt0XTtyZXR1cm4ocD09PWN8fHA9PT12b2lkIDAmJncmJmIpJiYoZj09PXZvaWQgMD9tLl9fc3RhbGVXaGlsZUZldGNoaW5nIT09dm9pZCAwP3RoaXMuI3RbdF09bS5fX3N0YWxlV2hpbGVGZXRjaGluZzp0aGlzLiNFKGUsXCJmZXRjaFwiKTooaS5zdGF0dXMmJihpLnN0YXR1cy5mZXRjaFVwZGF0ZWQ9ITApLHRoaXMuI1coZSxmLGEub3B0aW9ucyxtKSkpLGZ9LGQ9Zj0+KGkuc3RhdHVzJiYoaS5zdGF0dXMuZmV0Y2hSZWplY3RlZD0hMCxpLnN0YXR1cy5mZXRjaEVycm9yPWYpLHkoZiwhMSkpLHk9KGYsYik9PntsZXR7YWJvcnRlZDpsfT1yLnNpZ25hbCx3PWwmJmkuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCxGPXd8fGkuYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24sbT1GfHxpLm5vRGVsZXRlT25GZXRjaFJlamVjdGlvbixwPWM7aWYodGhpcy4jdFt0XT09PWMmJighbXx8IWImJnAuX19zdGFsZVdoaWxlRmV0Y2hpbmc9PT12b2lkIDA/dGhpcy4jRShlLFwiZmV0Y2hcIik6d3x8KHRoaXMuI3RbdF09cC5fX3N0YWxlV2hpbGVGZXRjaGluZykpLEYpcmV0dXJuIGkuc3RhdHVzJiZwLl9fc3RhbGVXaGlsZUZldGNoaW5nIT09dm9pZCAwJiYoaS5zdGF0dXMucmV0dXJuZWRTdGFsZT0hMCkscC5fX3N0YWxlV2hpbGVGZXRjaGluZztpZihwLl9fcmV0dXJuZWQ9PT1wKXRocm93IGZ9LF89KGYsYik9PntsZXQgbD10aGlzLiNNPy4oZSxuLGEpO3Iuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCgpPT57KCFpLmlnbm9yZUZldGNoQWJvcnR8fGkuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCkmJihmKHZvaWQgMCksaS5hbGxvd1N0YWxlT25GZXRjaEFib3J0JiYoZj13PT5vKHcsITApKSl9KSxsJiZsIGluc3RhbmNlb2YgUHJvbWlzZT9sLnRoZW4odz0+Zih3PT09dm9pZCAwP3ZvaWQgMDp3KSxiKTpsIT09dm9pZCAwJiZmKGwpfTtpLnN0YXR1cyYmKGkuc3RhdHVzLmZldGNoRGlzcGF0Y2hlZD0hMCk7bGV0IGM9bmV3IFByb21pc2UoXykudGhlbihvLGQpLGc9T2JqZWN0LmFzc2lnbihjLHtfX2Fib3J0Q29udHJvbGxlcjpyLF9fc3RhbGVXaGlsZUZldGNoaW5nOm4sX19yZXR1cm5lZDp2b2lkIDB9KTtyZXR1cm4gdD09PXZvaWQgMD8odGhpcy4jVyhlLGcsey4uLmEub3B0aW9ucyxzdGF0dXM6dm9pZCAwfSksdD10aGlzLiNzLmdldChlKSk6dGhpcy4jdFt0XT1nLGd9I2UoZSl7aWYoIXRoaXMuI1UpcmV0dXJuITE7bGV0IHQ9ZTtyZXR1cm4hIXQmJnQgaW5zdGFuY2VvZiBQcm9taXNlJiZ0Lmhhc093blByb3BlcnR5KFwiX19zdGFsZVdoaWxlRmV0Y2hpbmdcIikmJnQuX19hYm9ydENvbnRyb2xsZXIgaW5zdGFuY2VvZiBBYm9ydENvbnRyb2xsZXJ9ZmV0Y2goZSx0PXt9KXtsZXQgaT1XLmhhc1N1YnNjcmliZXJzLHtzdGF0dXM6cz1EKCk/e306dm9pZCAwfT10O3Quc3RhdHVzPXMscyYmdC5jb250ZXh0JiYocy5jb250ZXh0PXQuY29udGV4dCk7bGV0IG49dGhpcy4jQihlLHQpO3JldHVybiBzJiZpJiYocy50cmFjZT0hMCxXLnRyYWNlUHJvbWlzZSgoKT0+bixzKS5jYXRjaCgoKT0+e30pKSxufWFzeW5jI0IoZSx0PXt9KXtsZXR7YWxsb3dTdGFsZTppPXRoaXMuYWxsb3dTdGFsZSx1cGRhdGVBZ2VPbkdldDpzPXRoaXMudXBkYXRlQWdlT25HZXQsbm9EZWxldGVPblN0YWxlR2V0Om49dGhpcy5ub0RlbGV0ZU9uU3RhbGVHZXQsdHRsOnI9dGhpcy50dGwsbm9EaXNwb3NlT25TZXQ6aD10aGlzLm5vRGlzcG9zZU9uU2V0LHNpemU6YT0wLHNpemVDYWxjdWxhdGlvbjpvPXRoaXMuc2l6ZUNhbGN1bGF0aW9uLG5vVXBkYXRlVFRMOmQ9dGhpcy5ub1VwZGF0ZVRUTCxub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb246eT10aGlzLm5vRGVsZXRlT25GZXRjaFJlamVjdGlvbixhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbjpfPXRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24saWdub3JlRmV0Y2hBYm9ydDpjPXRoaXMuaWdub3JlRmV0Y2hBYm9ydCxhbGxvd1N0YWxlT25GZXRjaEFib3J0Omc9dGhpcy5hbGxvd1N0YWxlT25GZXRjaEFib3J0LGNvbnRleHQ6Zixmb3JjZVJlZnJlc2g6Yj0hMSxzdGF0dXM6bCxzaWduYWw6d309dDtpZihsJiYobC5vcD1cImZldGNoXCIsbC5rZXk9ZSxiJiYobC5mb3JjZVJlZnJlc2g9ITApLGwuY2FjaGU9dGhpcyksIXRoaXMuI1UpcmV0dXJuIGwmJihsLmZldGNoPVwiZ2V0XCIpLHRoaXMuI0MoZSx7YWxsb3dTdGFsZTppLHVwZGF0ZUFnZU9uR2V0OnMsbm9EZWxldGVPblN0YWxlR2V0Om4sc3RhdHVzOmx9KTtsZXQgRj17YWxsb3dTdGFsZTppLHVwZGF0ZUFnZU9uR2V0OnMsbm9EZWxldGVPblN0YWxlR2V0Om4sdHRsOnIsbm9EaXNwb3NlT25TZXQ6aCxzaXplOmEsc2l6ZUNhbGN1bGF0aW9uOm8sbm9VcGRhdGVUVEw6ZCxub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb246eSxhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbjpfLGFsbG93U3RhbGVPbkZldGNoQWJvcnQ6ZyxpZ25vcmVGZXRjaEFib3J0OmMsc3RhdHVzOmwsc2lnbmFsOnd9LG09dGhpcy4jcy5nZXQoZSk7aWYobT09PXZvaWQgMCl7bCYmKGwuZmV0Y2g9XCJtaXNzXCIpO2xldCBwPXRoaXMuI1AoZSxtLEYsZik7cmV0dXJuIHAuX19yZXR1cm5lZD1wfWVsc2V7bGV0IHA9dGhpcy4jdFttXTtpZih0aGlzLiNlKHApKXtsZXQgdj1pJiZwLl9fc3RhbGVXaGlsZUZldGNoaW5nIT09dm9pZCAwO3JldHVybiBsJiYobC5mZXRjaD1cImluZmxpZ2h0XCIsdiYmKGwucmV0dXJuZWRTdGFsZT0hMCkpLHY/cC5fX3N0YWxlV2hpbGVGZXRjaGluZzpwLl9fcmV0dXJuZWQ9cH1sZXQgQT10aGlzLiNwKG0pO2lmKCFiJiYhQSlyZXR1cm4gbCYmKGwuZmV0Y2g9XCJoaXRcIiksdGhpcy4jTChtKSxzJiZ0aGlzLiNEKG0pLGwmJnRoaXMuI3YobCxtKSxwO2xldCB6PXRoaXMuI1AoZSxtLEYsZiksRT16Ll9fc3RhbGVXaGlsZUZldGNoaW5nIT09dm9pZCAwJiZpO3JldHVybiBsJiYobC5mZXRjaD1BP1wic3RhbGVcIjpcInJlZnJlc2hcIixFJiZBJiYobC5yZXR1cm5lZFN0YWxlPSEwKSksRT96Ll9fc3RhbGVXaGlsZUZldGNoaW5nOnouX19yZXR1cm5lZD16fX1mb3JjZUZldGNoKGUsdD17fSl7bGV0IGk9Vy5oYXNTdWJzY3JpYmVycyx7c3RhdHVzOnM9RCgpP3t9OnZvaWQgMH09dDt0LnN0YXR1cz1zLHMmJnQuY29udGV4dCYmKHMuY29udGV4dD10LmNvbnRleHQpO2xldCBuPXRoaXMuI0soZSx0KTtyZXR1cm4gcyYmaSYmKHMudHJhY2U9ITAsVy50cmFjZVByb21pc2UoKCk9Pm4scykuY2F0Y2goKCk9Pnt9KSksbn1hc3luYyNLKGUsdD17fSl7bGV0IGk9YXdhaXQgdGhpcy4jQihlLHQpO2lmKGk9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKFwiZmV0Y2goKSByZXR1cm5lZCB1bmRlZmluZWRcIik7cmV0dXJuIGl9bWVtbyhlLHQ9e30pe2xldHtzdGF0dXM6aT1TLmhhc1N1YnNjcmliZXJzP3t9OnZvaWQgMH09dDt0LnN0YXR1cz1pLGkmJihpLm9wPVwibWVtb1wiLGkua2V5PWUsdC5jb250ZXh0JiYoaS5jb250ZXh0PXQuY29udGV4dCksaS5jYWNoZT10aGlzKTtsZXQgcz10aGlzLiNRKGUsdCk7cmV0dXJuIGkmJihpLnZhbHVlPXMpLFMuaGFzU3Vic2NyaWJlcnMmJlMucHVibGlzaChpKSxzfSNRKGUsdD17fSl7bGV0IGk9dGhpcy4jSTtpZighaSl0aHJvdyBuZXcgRXJyb3IoXCJubyBtZW1vTWV0aG9kIHByb3ZpZGVkIHRvIGNvbnN0cnVjdG9yXCIpO2xldHtjb250ZXh0OnMsc3RhdHVzOm4sZm9yY2VSZWZyZXNoOnIsLi4uaH09dDtuJiZyJiYobi5mb3JjZVJlZnJlc2g9ITApO2xldCBhPXRoaXMuI0MoZSxoKSxvPXJ8fGE9PT12b2lkIDA7aWYobiYmKG4ubWVtbz1vP1wibWlzc1wiOlwiaGl0XCIsb3x8KG4udmFsdWU9YSkpLCFvKXJldHVybiBhO2xldCBkPWkoZSxhLHtvcHRpb25zOmgsY29udGV4dDpzfSk7cmV0dXJuIG4mJihuLnZhbHVlPWQpLHRoaXMuI1coZSxkLGgpLGR9Z2V0KGUsdD17fSl7bGV0e3N0YXR1czppPVMuaGFzU3Vic2NyaWJlcnM/e306dm9pZCAwfT10O3Quc3RhdHVzPWksaSYmKGkub3A9XCJnZXRcIixpLmtleT1lLGkuY2FjaGU9dGhpcyk7bGV0IHM9dGhpcy4jQyhlLHQpO3JldHVybiBpJiYocyE9PXZvaWQgMCYmKGkudmFsdWU9cyksUy5oYXNTdWJzY3JpYmVycyYmUy5wdWJsaXNoKGkpKSxzfSNDKGUsdD17fSl7bGV0e2FsbG93U3RhbGU6aT10aGlzLmFsbG93U3RhbGUsdXBkYXRlQWdlT25HZXQ6cz10aGlzLnVwZGF0ZUFnZU9uR2V0LG5vRGVsZXRlT25TdGFsZUdldDpuPXRoaXMubm9EZWxldGVPblN0YWxlR2V0LHN0YXR1czpyfT10LGg9dGhpcy4jcy5nZXQoZSk7aWYoaD09PXZvaWQgMCl7ciYmKHIuZ2V0PVwibWlzc1wiKTtyZXR1cm59bGV0IGE9dGhpcy4jdFtoXSxvPXRoaXMuI2UoYSk7cmV0dXJuIHImJnRoaXMuI3YocixoKSx0aGlzLiNwKGgpP28/KHImJihyLmdldD1cInN0YWxlLWZldGNoaW5nXCIpLGkmJmEuX19zdGFsZVdoaWxlRmV0Y2hpbmchPT12b2lkIDA/KHImJihyLnJldHVybmVkU3RhbGU9ITApLGEuX19zdGFsZVdoaWxlRmV0Y2hpbmcpOnZvaWQgMCk6KG58fHRoaXMuI0UoZSxcImV4cGlyZVwiKSxyJiYoci5nZXQ9XCJzdGFsZVwiKSxpPyhyJiYoci5yZXR1cm5lZFN0YWxlPSEwKSxhKTp2b2lkIDApOihyJiYoci5nZXQ9bz9cImZldGNoaW5nXCI6XCJoaXRcIiksdGhpcy4jTChoKSxzJiZ0aGlzLiNEKGgpLG8/YS5fX3N0YWxlV2hpbGVGZXRjaGluZzphKX0jJChlLHQpe3RoaXMuI3VbdF09ZSx0aGlzLiNsW2VdPXR9I0woZSl7ZSE9PXRoaXMuI2gmJihlPT09dGhpcy4jYT90aGlzLiNhPXRoaXMuI2xbZV06dGhpcy4jJCh0aGlzLiN1W2VdLHRoaXMuI2xbZV0pLHRoaXMuIyQodGhpcy4jaCxlKSx0aGlzLiNoPWUpfWRlbGV0ZShlKXtyZXR1cm4gdGhpcy4jRShlLFwiZGVsZXRlXCIpfSNFKGUsdCl7Uy5oYXNTdWJzY3JpYmVycyYmUy5wdWJsaXNoKHtvcDpcImRlbGV0ZVwiLGRlbGV0ZTp0LGtleTplLGNhY2hlOnRoaXN9KTtsZXQgaT0hMTtpZih0aGlzLiNuIT09MCl7bGV0IHM9dGhpcy4jcy5nZXQoZSk7aWYocyE9PXZvaWQgMClpZih0aGlzLiNnPy5bc10mJihjbGVhclRpbWVvdXQodGhpcy4jZz8uW3NdKSx0aGlzLiNnW3NdPXZvaWQgMCksaT0hMCx0aGlzLiNuPT09MSl0aGlzLiNxKHQpO2Vsc2V7dGhpcy4jUihzKTtsZXQgbj10aGlzLiN0W3NdO2lmKHRoaXMuI2Uobik/bi5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoXCJkZWxldGVkXCIpKToodGhpcy4jVHx8dGhpcy4jZikmJih0aGlzLiNUJiZ0aGlzLiNTPy4obixlLHQpLHRoaXMuI2YmJnRoaXMuI3I/LnB1c2goW24sZSx0XSkpLHRoaXMuI3MuZGVsZXRlKGUpLHRoaXMuI2lbc109dm9pZCAwLHRoaXMuI3Rbc109dm9pZCAwLHM9PT10aGlzLiNoKXRoaXMuI2g9dGhpcy4jdVtzXTtlbHNlIGlmKHM9PT10aGlzLiNhKXRoaXMuI2E9dGhpcy4jbFtzXTtlbHNle2xldCByPXRoaXMuI3Vbc107dGhpcy4jbFtyXT10aGlzLiNsW3NdO2xldCBoPXRoaXMuI2xbc107dGhpcy4jdVtoXT10aGlzLiN1W3NdfXRoaXMuI24tLSx0aGlzLiN5LnB1c2gocyl9fWlmKHRoaXMuI2YmJnRoaXMuI3I/Lmxlbmd0aCl7bGV0IHM9dGhpcy4jcixuO2Zvcig7bj1zPy5zaGlmdCgpOyl0aGlzLiN3Py4oLi4ubil9cmV0dXJuIGl9Y2xlYXIoKXtyZXR1cm4gdGhpcy4jcShcImRlbGV0ZVwiKX0jcShlKXtmb3IobGV0IHQgb2YgdGhpcy4jeih7YWxsb3dTdGFsZTohMH0pKXtsZXQgaT10aGlzLiN0W3RdO2lmKHRoaXMuI2UoaSkpaS5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoXCJkZWxldGVkXCIpKTtlbHNle2xldCBzPXRoaXMuI2lbdF07dGhpcy4jVCYmdGhpcy4jUz8uKGkscyxlKSx0aGlzLiNmJiZ0aGlzLiNyPy5wdXNoKFtpLHMsZV0pfX1pZih0aGlzLiNzLmNsZWFyKCksdGhpcy4jdC5maWxsKHZvaWQgMCksdGhpcy4jaS5maWxsKHZvaWQgMCksdGhpcy4jZCYmdGhpcy4jRil7dGhpcy4jZC5maWxsKDApLHRoaXMuI0YuZmlsbCgwKTtmb3IobGV0IHQgb2YgdGhpcy4jZz8/W10pdCE9PXZvaWQgMCYmY2xlYXJUaW1lb3V0KHQpO3RoaXMuI2c/LmZpbGwodm9pZCAwKX1pZih0aGlzLiNfJiZ0aGlzLiNfLmZpbGwoMCksdGhpcy4jYT0wLHRoaXMuI2g9MCx0aGlzLiN5Lmxlbmd0aD0wLHRoaXMuI2I9MCx0aGlzLiNuPTAsdGhpcy4jZiYmdGhpcy4jcil7bGV0IHQ9dGhpcy4jcixpO2Zvcig7aT10Py5zaGlmdCgpOyl0aGlzLiN3Py4oLi4uaSl9fX07ZXhwb3J0e0kgYXMgTFJVQ2FjaGV9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWluLmpzLm1hcFxuIiwKICAgICJpbXBvcnQgeyBMUlVDYWNoZSB9IGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQgeyBwb3NpeCwgd2luMzIgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IGxzdGF0U3luYywgcmVhZGRpciBhcyByZWFkZGlyQ0IsIHJlYWRkaXJTeW5jLCByZWFkbGlua1N5bmMsIHJlYWxwYXRoU3luYyBhcyBycHMsIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgYWN0dWFsRlMgZnJvbSAnbm9kZTpmcyc7XG5jb25zdCByZWFscGF0aFN5bmMgPSBycHMubmF0aXZlO1xuLy8gVE9ETzogdGVzdCBwZXJmIG9mIGZzL3Byb21pc2VzIHJlYWxwYXRoIHZzIHJlYWxwYXRoQ0IsXG4vLyBzaW5jZSB0aGUgcHJvbWlzZXMgb25lIHVzZXMgcmVhbHBhdGgubmF0aXZlXG5pbXBvcnQgeyBsc3RhdCwgcmVhZGRpciwgcmVhZGxpbmssIHJlYWxwYXRoIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBNaW5pcGFzcyB9IGZyb20gJ21pbmlwYXNzJztcbmNvbnN0IGRlZmF1bHRGUyA9IHtcbiAgICBsc3RhdFN5bmMsXG4gICAgcmVhZGRpcjogcmVhZGRpckNCLFxuICAgIHJlYWRkaXJTeW5jLFxuICAgIHJlYWRsaW5rU3luYyxcbiAgICByZWFscGF0aFN5bmMsXG4gICAgcHJvbWlzZXM6IHtcbiAgICAgICAgbHN0YXQsXG4gICAgICAgIHJlYWRkaXIsXG4gICAgICAgIHJlYWRsaW5rLFxuICAgICAgICByZWFscGF0aCxcbiAgICB9LFxufTtcbi8vIGlmIHRoZXkganVzdCBnYXZlIHVzIHJlcXVpcmUoJ2ZzJykgdGhlbiB1c2Ugb3VyIGRlZmF1bHRcbmNvbnN0IGZzRnJvbU9wdGlvbiA9IChmc09wdGlvbikgPT4gIWZzT3B0aW9uIHx8IGZzT3B0aW9uID09PSBkZWZhdWx0RlMgfHwgZnNPcHRpb24gPT09IGFjdHVhbEZTID9cbiAgICBkZWZhdWx0RlNcbiAgICA6IHtcbiAgICAgICAgLi4uZGVmYXVsdEZTLFxuICAgICAgICAuLi5mc09wdGlvbixcbiAgICAgICAgcHJvbWlzZXM6IHtcbiAgICAgICAgICAgIC4uLmRlZmF1bHRGUy5wcm9taXNlcyxcbiAgICAgICAgICAgIC4uLihmc09wdGlvbi5wcm9taXNlcyB8fCB7fSksXG4gICAgICAgIH0sXG4gICAgfTtcbi8vIHR1cm4gc29tZXRoaW5nIGxpa2UgLy8/L2M6LyBpbnRvIGM6XFxcbmNvbnN0IHVuY0RyaXZlUmVnZXhwID0gL15cXFxcXFxcXFxcP1xcXFwoW2Etel06KVxcXFw/JC9pO1xuY29uc3QgdW5jVG9Ecml2ZSA9IChyb290UGF0aCkgPT4gcm9vdFBhdGgucmVwbGFjZSgvXFwvL2csICdcXFxcJykucmVwbGFjZSh1bmNEcml2ZVJlZ2V4cCwgJyQxXFxcXCcpO1xuLy8gd2luZG93cyBwYXRocyBhcmUgc2VwYXJhdGVkIGJ5IGVpdGhlciAvIG9yIFxcXG5jb25zdCBlaXRoZXJTZXAgPSAvW1xcXFxcXC9dLztcbmNvbnN0IFVOS05PV04gPSAwOyAvLyBtYXkgbm90IGV2ZW4gZXhpc3QsIGZvciBhbGwgd2Uga25vd1xuY29uc3QgSUZJRk8gPSAwYjAwMDE7XG5jb25zdCBJRkNIUiA9IDBiMDAxMDtcbmNvbnN0IElGRElSID0gMGIwMTAwO1xuY29uc3QgSUZCTEsgPSAwYjAxMTA7XG5jb25zdCBJRlJFRyA9IDBiMTAwMDtcbmNvbnN0IElGTE5LID0gMGIxMDEwO1xuY29uc3QgSUZTT0NLID0gMGIxMTAwO1xuY29uc3QgSUZNVCA9IDBiMTExMTtcbi8vIG1hc2sgdG8gdW5zZXQgbG93IDQgYml0c1xuY29uc3QgSUZNVF9VTktOT1dOID0gfklGTVQ7XG4vLyBzZXQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IGNhbGxpbmcgcmVhZGRpcigpIGFuZCBnZXR0aW5nIGVudHJpZXMuXG5jb25zdCBSRUFERElSX0NBTExFRCA9IDBiMDAwMF8wMDAxXzAwMDA7XG4vLyBzZXQgYWZ0ZXIgYSBzdWNjZXNzZnVsIGxzdGF0KClcbmNvbnN0IExTVEFUX0NBTExFRCA9IDBiMDAwMF8wMDEwXzAwMDA7XG4vLyBzZXQgaWYgYW4gZW50cnkgKG9yIG9uZSBvZiBpdHMgcGFyZW50cykgaXMgZGVmaW5pdGVseSBub3QgYSBkaXJcbmNvbnN0IEVOT1RESVIgPSAwYjAwMDBfMDEwMF8wMDAwO1xuLy8gc2V0IGlmIGFuIGVudHJ5IChvciBvbmUgb2YgaXRzIHBhcmVudHMpIGRvZXMgbm90IGV4aXN0XG4vLyAoY2FuIGFsc28gYmUgc2V0IG9uIGxzdGF0IGVycm9ycyBsaWtlIEVBQ0NFUyBvciBFTkFNRVRPT0xPTkcpXG5jb25zdCBFTk9FTlQgPSAwYjAwMDBfMTAwMF8wMDAwO1xuLy8gY2Fubm90IGhhdmUgY2hpbGQgZW50cmllcyAtLSBhbHNvIHZlcmlmeSAmSUZNVCBpcyBlaXRoZXIgSUZESVIgb3IgSUZMTktcbi8vIHNldCBpZiB3ZSBmYWlsIHRvIHJlYWRsaW5rXG5jb25zdCBFTk9SRUFETElOSyA9IDBiMDAwMV8wMDAwXzAwMDA7XG4vLyBzZXQgaWYgd2Uga25vdyByZWFscGF0aCgpIHdpbGwgZmFpbFxuY29uc3QgRU5PUkVBTFBBVEggPSAwYjAwMTBfMDAwMF8wMDAwO1xuY29uc3QgRU5PQ0hJTEQgPSBFTk9URElSIHwgRU5PRU5UIHwgRU5PUkVBTFBBVEg7XG5jb25zdCBUWVBFTUFTSyA9IDBiMDAxMV8xMTExXzExMTE7XG5jb25zdCBlbnRUb1R5cGUgPSAocykgPT4gcy5pc0ZpbGUoKSA/IElGUkVHXG4gICAgOiBzLmlzRGlyZWN0b3J5KCkgPyBJRkRJUlxuICAgICAgICA6IHMuaXNTeW1ib2xpY0xpbmsoKSA/IElGTE5LXG4gICAgICAgICAgICA6IHMuaXNDaGFyYWN0ZXJEZXZpY2UoKSA/IElGQ0hSXG4gICAgICAgICAgICAgICAgOiBzLmlzQmxvY2tEZXZpY2UoKSA/IElGQkxLXG4gICAgICAgICAgICAgICAgICAgIDogcy5pc1NvY2tldCgpID8gSUZTT0NLXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHMuaXNGSUZPKCkgPyBJRklGT1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogVU5LTk9XTjtcbi8vIG5vcm1hbGl6ZSB1bmljb2RlIHBhdGggbmFtZXNcbmNvbnN0IG5vcm1hbGl6ZUNhY2hlID0gbmV3IExSVUNhY2hlKHsgbWF4OiAyICoqIDEyIH0pO1xuY29uc3Qgbm9ybWFsaXplID0gKHMpID0+IHtcbiAgICBjb25zdCBjID0gbm9ybWFsaXplQ2FjaGUuZ2V0KHMpO1xuICAgIGlmIChjKVxuICAgICAgICByZXR1cm4gYztcbiAgICBjb25zdCBuID0gcy5ub3JtYWxpemUoJ05GS0QnKTtcbiAgICBub3JtYWxpemVDYWNoZS5zZXQocywgbik7XG4gICAgcmV0dXJuIG47XG59O1xuY29uc3Qgbm9ybWFsaXplTm9jYXNlQ2FjaGUgPSBuZXcgTFJVQ2FjaGUoeyBtYXg6IDIgKiogMTIgfSk7XG5jb25zdCBub3JtYWxpemVOb2Nhc2UgPSAocykgPT4ge1xuICAgIGNvbnN0IGMgPSBub3JtYWxpemVOb2Nhc2VDYWNoZS5nZXQocyk7XG4gICAgaWYgKGMpXG4gICAgICAgIHJldHVybiBjO1xuICAgIGNvbnN0IG4gPSBub3JtYWxpemUocy50b0xvd2VyQ2FzZSgpKTtcbiAgICBub3JtYWxpemVOb2Nhc2VDYWNoZS5zZXQocywgbik7XG4gICAgcmV0dXJuIG47XG59O1xuLyoqXG4gKiBBbiBMUlVDYWNoZSBmb3Igc3RvcmluZyByZXNvbHZlZCBwYXRoIHN0cmluZ3Mgb3IgUGF0aCBvYmplY3RzLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNvbHZlQ2FjaGUgZXh0ZW5kcyBMUlVDYWNoZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHsgbWF4OiAyNTYgfSk7XG4gICAgfVxufVxuLy8gSW4gb3JkZXIgdG8gcHJldmVudCBibG93aW5nIG91dCB0aGUganMgaGVhcCBieSBhbGxvY2F0aW5nIGh1bmRyZWRzIG9mXG4vLyB0aG91c2FuZHMgb2YgUGF0aCBlbnRyaWVzIHdoZW4gd2Fsa2luZyBleHRyZW1lbHkgbGFyZ2UgdHJlZXMsIHRoZSBcImNoaWxkcmVuXCJcbi8vIGluIHRoaXMgdHJlZSBhcmUgcmVwcmVzZW50ZWQgYnkgc3RvcmluZyBhbiBhcnJheSBvZiBQYXRoIGVudHJpZXMgaW4gYW5cbi8vIExSVUNhY2hlLCBpbmRleGVkIGJ5IHRoZSBwYXJlbnQuICBBdCBhbnkgdGltZSwgUGF0aC5jaGlsZHJlbigpIG1heSByZXR1cm4gYW5cbi8vIGVtcHR5IGFycmF5LCBpbmRpY2F0aW5nIHRoYXQgaXQgZG9lc24ndCBrbm93IGFib3V0IGFueSBvZiBpdHMgY2hpbGRyZW4sIGFuZFxuLy8gdGh1cyBoYXMgdG8gcmVidWlsZCB0aGF0IGNhY2hlLiAgVGhpcyBpcyBmaW5lLCBpdCBqdXN0IG1lYW5zIHRoYXQgd2UgZG9uJ3Rcbi8vIGJlbmVmaXQgYXMgbXVjaCBmcm9tIGhhdmluZyB0aGUgY2FjaGVkIGVudHJpZXMsIGJ1dCBodWdlIGRpcmVjdG9yeSB3YWxrc1xuLy8gZG9uJ3QgYmxvdyBvdXQgdGhlIHN0YWNrLCBhbmQgc21hbGxlciBvbmVzIGFyZSBzdGlsbCBhcyBmYXN0IGFzIHBvc3NpYmxlLlxuLy9cbi8vSXQgZG9lcyBpbXBvc2Ugc29tZSBjb21wbGV4aXR5IHdoZW4gYnVpbGRpbmcgdXAgdGhlIHJlYWRkaXIgZGF0YSwgYmVjYXVzZSB3ZVxuLy9uZWVkIHRvIHBhc3MgYSByZWZlcmVuY2UgdG8gdGhlIGNoaWxkcmVuIGFycmF5IHRoYXQgd2Ugc3RhcnRlZCB3aXRoLlxuLyoqXG4gKiBhbiBMUlVDYWNoZSBmb3Igc3RvcmluZyBjaGlsZCBlbnRyaWVzLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBDaGlsZHJlbkNhY2hlIGV4dGVuZHMgTFJVQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yKG1heFNpemUgPSAxNiAqIDEwMjQpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbWF4U2l6ZSxcbiAgICAgICAgICAgIC8vIHBhcmVudCArIGNoaWxkcmVuXG4gICAgICAgICAgICBzaXplQ2FsY3VsYXRpb246IGEgPT4gYS5sZW5ndGggKyAxLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5jb25zdCBzZXRBc0N3ZCA9IFN5bWJvbCgnUGF0aFNjdXJyeSBzZXRBc0N3ZCcpO1xuLyoqXG4gKiBQYXRoIG9iamVjdHMgYXJlIHNvcnQgb2YgbGlrZSBhIHN1cGVyLXBvd2VyZWRcbiAqIHtAbGluayBodHRwczovL25vZGVqcy5vcmcvZG9jcy9sYXRlc3QvYXBpL2ZzLmh0bWwjY2xhc3MtZnNkaXJlbnQgZnMuRGlyZW50fVxuICpcbiAqIEVhY2ggb25lIHJlcHJlc2VudHMgYSBzaW5nbGUgZmlsZXN5c3RlbSBlbnRyeSBvbiBkaXNrLCB3aGljaCBtYXkgb3IgbWF5IG5vdFxuICogZXhpc3QuIEl0IGluY2x1ZGVzIG1ldGhvZHMgZm9yIHJlYWRpbmcgdmFyaW91cyB0eXBlcyBvZiBpbmZvcm1hdGlvbiB2aWFcbiAqIGxzdGF0LCByZWFkbGluaywgYW5kIHJlYWRkaXIsIGFuZCBjYWNoZXMgYWxsIGluZm9ybWF0aW9uIHRvIHRoZSBncmVhdGVzdFxuICogZGVncmVlIHBvc3NpYmxlLlxuICpcbiAqIE5vdGUgdGhhdCBmcyBvcGVyYXRpb25zIHRoYXQgd291bGQgbm9ybWFsbHkgdGhyb3cgd2lsbCBpbnN0ZWFkIHJldHVybiBhblxuICogXCJlbXB0eVwiIHZhbHVlLiBUaGlzIGlzIGluIG9yZGVyIHRvIHByZXZlbnQgZXhjZXNzaXZlIG92ZXJoZWFkIGZyb20gZXJyb3JcbiAqIHN0YWNrIHRyYWNlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhdGhCYXNlIHtcbiAgICAvKipcbiAgICAgKiB0aGUgYmFzZW5hbWUgb2YgdGhpcyBwYXRoXG4gICAgICpcbiAgICAgKiAqKkltcG9ydGFudCoqOiAqYWx3YXlzKiB0ZXN0IHRoZSBwYXRoIG5hbWUgYWdhaW5zdCBhbnkgdGVzdCBzdHJpbmdcbiAgICAgKiB1c2luZ3RoZSB7QGxpbmsgaXNOYW1lZH0gbWV0aG9kLCBhbmQgbm90IGJ5IGRpcmVjdGx5IGNvbXBhcmluZyB0aGlzXG4gICAgICogc3RyaW5nLiBPdGhlcndpc2UsIHVuaWNvZGUgcGF0aCBzdHJpbmdzIHRoYXQgdGhlIHN5c3RlbSBzZWVzIGFzIGlkZW50aWNhbFxuICAgICAqIHdpbGwgbm90IGJlIHByb3Blcmx5IHRyZWF0ZWQgYXMgdGhlIHNhbWUgcGF0aCwgbGVhZGluZyB0byBpbmNvcnJlY3RcbiAgICAgKiBiZWhhdmlvciBhbmQgcG9zc2libGUgc2VjdXJpdHkgaXNzdWVzLlxuICAgICAqL1xuICAgIG5hbWU7XG4gICAgLyoqXG4gICAgICogdGhlIFBhdGggZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGUgcGF0aCByb290LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcm9vdDtcbiAgICAvKipcbiAgICAgKiBBbGwgcm9vdHMgZm91bmQgd2l0aGluIHRoZSBjdXJyZW50IFBhdGhTY3VycnkgZmFtaWx5XG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICByb290cztcbiAgICAvKipcbiAgICAgKiBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IHBhdGgsIG9yIHVuZGVmaW5lZCBpbiB0aGUgY2FzZSBvZiByb290IGVudHJpZXNcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHBhcmVudDtcbiAgICAvKipcbiAgICAgKiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBwYXRocyBhcmUgY29tcGFyZWQgY2FzZS1pbnNlbnNpdGl2ZWx5XG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbm9jYXNlO1xuICAgIC8qKlxuICAgICAqIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoaXMgcGF0aCBpcyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICAgICAqIG9mIHRoZSBQYXRoU2N1cnJ5IGNvbGxlY3Rpb24gdGhhdCBjb250YWlucyBpdC5cbiAgICAgKi9cbiAgICBpc0NXRCA9IGZhbHNlO1xuICAgIC8vIHBvdGVudGlhbCBkZWZhdWx0IGZzIG92ZXJyaWRlXG4gICAgI2ZzO1xuICAgIC8vIFN0YXRzIGZpZWxkc1xuICAgICNkZXY7XG4gICAgZ2V0IGRldigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2RldjtcbiAgICB9XG4gICAgI21vZGU7XG4gICAgZ2V0IG1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNtb2RlO1xuICAgIH1cbiAgICAjbmxpbms7XG4gICAgZ2V0IG5saW5rKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbmxpbms7XG4gICAgfVxuICAgICN1aWQ7XG4gICAgZ2V0IHVpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3VpZDtcbiAgICB9XG4gICAgI2dpZDtcbiAgICBnZXQgZ2lkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jZ2lkO1xuICAgIH1cbiAgICAjcmRldjtcbiAgICBnZXQgcmRldigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3JkZXY7XG4gICAgfVxuICAgICNibGtzaXplO1xuICAgIGdldCBibGtzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYmxrc2l6ZTtcbiAgICB9XG4gICAgI2lubztcbiAgICBnZXQgaW5vKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jaW5vO1xuICAgIH1cbiAgICAjc2l6ZTtcbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3NpemU7XG4gICAgfVxuICAgICNibG9ja3M7XG4gICAgZ2V0IGJsb2NrcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2Jsb2NrcztcbiAgICB9XG4gICAgI2F0aW1lTXM7XG4gICAgZ2V0IGF0aW1lTXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNhdGltZU1zO1xuICAgIH1cbiAgICAjbXRpbWVNcztcbiAgICBnZXQgbXRpbWVNcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI210aW1lTXM7XG4gICAgfVxuICAgICNjdGltZU1zO1xuICAgIGdldCBjdGltZU1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY3RpbWVNcztcbiAgICB9XG4gICAgI2JpcnRodGltZU1zO1xuICAgIGdldCBiaXJ0aHRpbWVNcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2JpcnRodGltZU1zO1xuICAgIH1cbiAgICAjYXRpbWU7XG4gICAgZ2V0IGF0aW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYXRpbWU7XG4gICAgfVxuICAgICNtdGltZTtcbiAgICBnZXQgbXRpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNtdGltZTtcbiAgICB9XG4gICAgI2N0aW1lO1xuICAgIGdldCBjdGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2N0aW1lO1xuICAgIH1cbiAgICAjYmlydGh0aW1lO1xuICAgIGdldCBiaXJ0aHRpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNiaXJ0aHRpbWU7XG4gICAgfVxuICAgICNtYXRjaE5hbWU7XG4gICAgI2RlcHRoO1xuICAgICNmdWxscGF0aDtcbiAgICAjZnVsbHBhdGhQb3NpeDtcbiAgICAjcmVsYXRpdmU7XG4gICAgI3JlbGF0aXZlUG9zaXg7XG4gICAgI3R5cGU7XG4gICAgI2NoaWxkcmVuO1xuICAgICNsaW5rVGFyZ2V0O1xuICAgICNyZWFscGF0aDtcbiAgICAvKipcbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIERpcmVudCBjbGFzcyBhcyBvZlxuICAgICAqIE5vZGUgdjIwLCB3aGVyZSBEaXJlbnRbJ3BhcmVudFBhdGgnXSByZWZlcnMgdG8gdGhlIHBhdGggb2YgdGhlXG4gICAgICogZGlyZWN0b3J5IHRoYXQgd2FzIHBhc3NlZCB0byByZWFkZGlyLiBGb3Igcm9vdCBlbnRyaWVzLCBpdCdzIHRoZSBwYXRoXG4gICAgICogdG8gdGhlIGVudHJ5IGl0c2VsZi5cbiAgICAgKi9cbiAgICBnZXQgcGFyZW50UGF0aCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnBhcmVudCB8fCB0aGlzKS5mdWxscGF0aCgpO1xuICAgIH1cbiAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAvKipcbiAgICAgKiBEZXByZWNhdGVkIGFsaWFzIGZvciBEaXJlbnRbJ3BhcmVudFBhdGgnXSBTb21ld2hhdCBjb3VudGVyaW50dWl0aXZlbHksXG4gICAgICogdGhpcyBwcm9wZXJ0eSByZWZlcnMgdG8gdGhlICpwYXJlbnQqIHBhdGgsIG5vdCB0aGUgcGF0aCBvYmplY3QgaXRzZWxmLlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBnZXQgcGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50UGF0aDtcbiAgICB9XG4gICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAvKipcbiAgICAgKiBEbyBub3QgY3JlYXRlIG5ldyBQYXRoIG9iamVjdHMgZGlyZWN0bHkuICBUaGV5IHNob3VsZCBhbHdheXMgYmUgYWNjZXNzZWRcbiAgICAgKiB2aWEgdGhlIFBhdGhTY3VycnkgY2xhc3Mgb3Igb3RoZXIgbWV0aG9kcyBvbiB0aGUgUGF0aCBjbGFzcy5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHR5cGUgPSBVTktOT1dOLCByb290LCByb290cywgbm9jYXNlLCBjaGlsZHJlbiwgb3B0cykge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLiNtYXRjaE5hbWUgPSBub2Nhc2UgPyBub3JtYWxpemVOb2Nhc2UobmFtZSkgOiBub3JtYWxpemUobmFtZSk7XG4gICAgICAgIHRoaXMuI3R5cGUgPSB0eXBlICYgVFlQRU1BU0s7XG4gICAgICAgIHRoaXMubm9jYXNlID0gbm9jYXNlO1xuICAgICAgICB0aGlzLnJvb3RzID0gcm9vdHM7XG4gICAgICAgIHRoaXMucm9vdCA9IHJvb3QgfHwgdGhpcztcbiAgICAgICAgdGhpcy4jY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgICAgdGhpcy4jZnVsbHBhdGggPSBvcHRzLmZ1bGxwYXRoO1xuICAgICAgICB0aGlzLiNyZWxhdGl2ZSA9IG9wdHMucmVsYXRpdmU7XG4gICAgICAgIHRoaXMuI3JlbGF0aXZlUG9zaXggPSBvcHRzLnJlbGF0aXZlUG9zaXg7XG4gICAgICAgIHRoaXMucGFyZW50ID0gb3B0cy5wYXJlbnQ7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy4jZnMgPSB0aGlzLnBhcmVudC4jZnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNmcyA9IGZzRnJvbU9wdGlvbihvcHRzLmZzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBkZXB0aCBvZiB0aGUgUGF0aCBvYmplY3QgZnJvbSBpdHMgcm9vdC5cbiAgICAgKlxuICAgICAqIEZvciBleGFtcGxlLCBhIHBhdGggYXQgYC9mb28vYmFyYCB3b3VsZCBoYXZlIGEgZGVwdGggb2YgMi5cbiAgICAgKi9cbiAgICBkZXB0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI2RlcHRoICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jZGVwdGg7XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI2RlcHRoID0gMCk7XG4gICAgICAgIHJldHVybiAodGhpcy4jZGVwdGggPSB0aGlzLnBhcmVudC5kZXB0aCgpICsgMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNoaWxkcmVuQ2FjaGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjaGlsZHJlbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBQYXRoIG9iamVjdCByZWZlcmVuY2VkIGJ5IHRoZSBzdHJpbmcgcGF0aCwgcmVzb2x2ZWQgZnJvbSB0aGlzIFBhdGhcbiAgICAgKi9cbiAgICByZXNvbHZlKHBhdGgpIHtcbiAgICAgICAgaWYgKCFwYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb290UGF0aCA9IHRoaXMuZ2V0Um9vdFN0cmluZyhwYXRoKTtcbiAgICAgICAgY29uc3QgZGlyID0gcGF0aC5zdWJzdHJpbmcocm9vdFBhdGgubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgZGlyUGFydHMgPSBkaXIuc3BsaXQodGhpcy5zcGxpdFNlcCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJvb3RQYXRoID9cbiAgICAgICAgICAgIHRoaXMuZ2V0Um9vdChyb290UGF0aCkuI3Jlc29sdmVQYXJ0cyhkaXJQYXJ0cylcbiAgICAgICAgICAgIDogdGhpcy4jcmVzb2x2ZVBhcnRzKGRpclBhcnRzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgI3Jlc29sdmVQYXJ0cyhkaXJQYXJ0cykge1xuICAgICAgICBsZXQgcCA9IHRoaXM7XG4gICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBkaXJQYXJ0cykge1xuICAgICAgICAgICAgcCA9IHAuY2hpbGQocGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNhY2hlZCBjaGlsZHJlbiBQYXRoIG9iamVjdHMsIGlmIHN0aWxsIGF2YWlsYWJsZS4gIElmIHRoZXlcbiAgICAgKiBoYXZlIGZhbGxlbiBvdXQgb2YgdGhlIGNhY2hlLCB0aGVuIHJldHVybnMgYW4gZW1wdHkgYXJyYXksIGFuZCByZXNldHMgdGhlXG4gICAgICogUkVBRERJUl9DQUxMRUQgYml0LCBzbyB0aGF0IGZ1dHVyZSBjYWxscyB0byByZWFkZGlyKCkgd2lsbCByZXF1aXJlIGFuIGZzXG4gICAgICogbG9va3VwLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY2hpbGRyZW4oKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuI2NoaWxkcmVuLmdldCh0aGlzKTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IE9iamVjdC5hc3NpZ24oW10sIHsgcHJvdmlzaW9uYWw6IDAgfSk7XG4gICAgICAgIHRoaXMuI2NoaWxkcmVuLnNldCh0aGlzLCBjaGlsZHJlbik7XG4gICAgICAgIHRoaXMuI3R5cGUgJj0gflJFQURESVJfQ0FMTEVEO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc29sdmVzIGEgcGF0aCBwb3J0aW9uIGFuZCByZXR1cm5zIG9yIGNyZWF0ZXMgdGhlIGNoaWxkIFBhdGguXG4gICAgICpcbiAgICAgKiBSZXR1cm5zIGB0aGlzYCBpZiBwYXRoUGFydCBpcyBgJydgIG9yIGAnLidgLCBvciBgcGFyZW50YCBpZiBwYXRoUGFydCBpc1xuICAgICAqIGAnLi4nYC5cbiAgICAgKlxuICAgICAqIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuICBJZiBgcGF0aFBhcnRgIGNvbnRhaW5zIGFueSBwYXRoXG4gICAgICogc2VwYXJhdG9ycywgaXQgd2lsbCBsZWFkIHRvIHVuc2FmZSB1bmRlZmluZWQgYmVoYXZpb3IuXG4gICAgICpcbiAgICAgKiBVc2UgYFBhdGgucmVzb2x2ZSgpYCBpbnN0ZWFkLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY2hpbGQocGF0aFBhcnQsIG9wdHMpIHtcbiAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSAnJyB8fCBwYXRoUGFydCA9PT0gJy4nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFBhcnQgPT09ICcuLicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudCB8fCB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmQgdGhlIGNoaWxkXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5ub2Nhc2UgPyBub3JtYWxpemVOb2Nhc2UocGF0aFBhcnQpIDogbm9ybWFsaXplKHBhdGhQYXJ0KTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAocC4jbWF0Y2hOYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGlkbid0IGZpbmQgaXQsIGNyZWF0ZSBwcm92aXNpb25hbCBjaGlsZCwgc2luY2UgaXQgbWlnaHQgbm90XG4gICAgICAgIC8vIGFjdHVhbGx5IGV4aXN0LiAgSWYgd2Uga25vdyB0aGUgcGFyZW50IGlzbid0IGEgZGlyLCB0aGVuXG4gICAgICAgIC8vIGluIGZhY3QgaXQgQ0FOJ1QgZXhpc3QuXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnBhcmVudCA/IHRoaXMuc2VwIDogJyc7XG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gdGhpcy4jZnVsbHBhdGggPyB0aGlzLiNmdWxscGF0aCArIHMgKyBwYXRoUGFydCA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcGNoaWxkID0gdGhpcy5uZXdDaGlsZChwYXRoUGFydCwgVU5LTk9XTiwge1xuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgICAgIHBhcmVudDogdGhpcyxcbiAgICAgICAgICAgIGZ1bGxwYXRoLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzLmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcGNoaWxkLiN0eXBlIHw9IEVOT0VOVDtcbiAgICAgICAgfVxuICAgICAgICAvLyBkb24ndCBoYXZlIHRvIHVwZGF0ZSBwcm92aXNpb25hbCwgYmVjYXVzZSBpZiB3ZSBoYXZlIHJlYWwgY2hpbGRyZW4sXG4gICAgICAgIC8vIHRoZW4gcHJvdmlzaW9uYWwgaXMgc2V0IHRvIGNoaWxkcmVuLmxlbmd0aCwgb3RoZXJ3aXNlIGEgbG93ZXIgbnVtYmVyXG4gICAgICAgIGNoaWxkcmVuLnB1c2gocGNoaWxkKTtcbiAgICAgICAgcmV0dXJuIHBjaGlsZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgY3dkLiBJZiBpdCBkb2VzIG5vdCBzaGFyZSBhbiBhbmNlc3RvciB3aXRoXG4gICAgICogdGhlIGN3ZCwgdGhlbiB0aGlzIGVuZHMgdXAgYmVpbmcgZXF1aXZhbGVudCB0byB0aGUgZnVsbHBhdGgoKVxuICAgICAqL1xuICAgIHJlbGF0aXZlKCkge1xuICAgICAgICBpZiAodGhpcy5pc0NXRClcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgaWYgKHRoaXMuI3JlbGF0aXZlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZWxhdGl2ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmICghcCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNyZWxhdGl2ZSA9IHRoaXMubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHYgPSBwLnJlbGF0aXZlKCk7XG4gICAgICAgIHJldHVybiBwdiArICghcHYgfHwgIXAucGFyZW50ID8gJycgOiB0aGlzLnNlcCkgKyBuYW1lO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSBjd2QsIHVzaW5nIC8gYXMgdGhlIHBhdGggc2VwYXJhdG9yLlxuICAgICAqIElmIGl0IGRvZXMgbm90IHNoYXJlIGFuIGFuY2VzdG9yIHdpdGhcbiAgICAgKiB0aGUgY3dkLCB0aGVuIHRoaXMgZW5kcyB1cCBiZWluZyBlcXVpdmFsZW50IHRvIHRoZSBmdWxscGF0aFBvc2l4KClcbiAgICAgKiBPbiBwb3NpeCBzeXN0ZW1zLCB0aGlzIGlzIGlkZW50aWNhbCB0byByZWxhdGl2ZSgpLlxuICAgICAqL1xuICAgIHJlbGF0aXZlUG9zaXgoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlcCA9PT0gJy8nKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVsYXRpdmUoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNDV0QpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIGlmICh0aGlzLiNyZWxhdGl2ZVBvc2l4ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcmVsYXRpdmVQb3NpeDtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMucGFyZW50O1xuICAgICAgICBpZiAoIXApIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jcmVsYXRpdmVQb3NpeCA9IHRoaXMuZnVsbHBhdGhQb3NpeCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwdiA9IHAucmVsYXRpdmVQb3NpeCgpO1xuICAgICAgICByZXR1cm4gcHYgKyAoIXB2IHx8ICFwLnBhcmVudCA/ICcnIDogJy8nKSArIG5hbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBmdWxseSByZXNvbHZlZCBwYXRoIHN0cmluZyBmb3IgdGhpcyBQYXRoIGVudHJ5XG4gICAgICovXG4gICAgZnVsbHBhdGgoKSB7XG4gICAgICAgIGlmICh0aGlzLiNmdWxscGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jZnVsbHBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMucGFyZW50O1xuICAgICAgICBpZiAoIXApIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jZnVsbHBhdGggPSB0aGlzLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHB2ID0gcC5mdWxscGF0aCgpO1xuICAgICAgICBjb25zdCBmcCA9IHB2ICsgKCFwLnBhcmVudCA/ICcnIDogdGhpcy5zZXApICsgbmFtZTtcbiAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aCA9IGZwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT24gcGxhdGZvcm1zIG90aGVyIHRoYW4gd2luZG93cywgdGhpcyBpcyBpZGVudGljYWwgdG8gZnVsbHBhdGguXG4gICAgICpcbiAgICAgKiBPbiB3aW5kb3dzLCB0aGlzIGlzIG92ZXJyaWRkZW4gdG8gcmV0dXJuIHRoZSBmb3J3YXJkLXNsYXNoIGZvcm0gb2YgdGhlXG4gICAgICogZnVsbCBVTkMgcGF0aC5cbiAgICAgKi9cbiAgICBmdWxscGF0aFBvc2l4KCkge1xuICAgICAgICBpZiAodGhpcy4jZnVsbHBhdGhQb3NpeCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2Z1bGxwYXRoUG9zaXg7XG4gICAgICAgIGlmICh0aGlzLnNlcCA9PT0gJy8nKVxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aFBvc2l4ID0gdGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgcCA9IHRoaXMuZnVsbHBhdGgoKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICAgICAgICBpZiAoL15bYS16XTpcXC8vaS50ZXN0KHApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aFBvc2l4ID0gYC8vPy8ke3B9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuI2Z1bGxwYXRoUG9zaXggPSBwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGNvbnN0IHBmcHAgPSBwLmZ1bGxwYXRoUG9zaXgoKTtcbiAgICAgICAgY29uc3QgZnBwID0gcGZwcCArICghcGZwcCB8fCAhcC5wYXJlbnQgPyAnJyA6ICcvJykgKyB0aGlzLm5hbWU7XG4gICAgICAgIHJldHVybiAodGhpcy4jZnVsbHBhdGhQb3NpeCA9IGZwcCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBQYXRoIG9mIGFuIHVua25vd24gdHlwZT9cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB3ZSBtaWdodCBrbm93ICpzb21ldGhpbmcqIGFib3V0IGl0IGlmIHRoZXJlIGhhcyBiZWVuIGEgcHJldmlvdXNcbiAgICAgKiBmaWxlc3lzdGVtIG9wZXJhdGlvbiwgZm9yIGV4YW1wbGUgdGhhdCBpdCBkb2VzIG5vdCBleGlzdCwgb3IgaXMgbm90IGFcbiAgICAgKiBsaW5rLCBvciB3aGV0aGVyIGl0IGhhcyBjaGlsZCBlbnRyaWVzLlxuICAgICAqL1xuICAgIGlzVW5rbm93bigpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IFVOS05PV047XG4gICAgfVxuICAgIGlzVHlwZSh0eXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2BpcyR7dHlwZX1gXSgpO1xuICAgIH1cbiAgICBnZXRUeXBlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuaXNVbmtub3duKCkgPyAnVW5rbm93bidcbiAgICAgICAgICAgIDogdGhpcy5pc0RpcmVjdG9yeSgpID8gJ0RpcmVjdG9yeSdcbiAgICAgICAgICAgICAgICA6IHRoaXMuaXNGaWxlKCkgPyAnRmlsZSdcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmlzU3ltYm9saWNMaW5rKCkgPyAnU3ltYm9saWNMaW5rJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmlzRklGTygpID8gJ0ZJRk8nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmlzQ2hhcmFjdGVyRGV2aWNlKCkgPyAnQ2hhcmFjdGVyRGV2aWNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaXNCbG9ja0RldmljZSgpID8gJ0Jsb2NrRGV2aWNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAvKiBjOCBpZ25vcmUgc3RhcnQgKi8gdGhpcy5pc1NvY2tldCgpID8gJ1NvY2tldCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdVbmtub3duJyk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBQYXRoIGEgcmVndWxhciBmaWxlP1xuICAgICAqL1xuICAgIGlzRmlsZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGUkVHO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgUGF0aCBhIGRpcmVjdG9yeT9cbiAgICAgKi9cbiAgICBpc0RpcmVjdG9yeSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGRElSO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgcGF0aCBhIGNoYXJhY3RlciBkZXZpY2U/XG4gICAgICovXG4gICAgaXNDaGFyYWN0ZXJEZXZpY2UoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBJRkNIUjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIHBhdGggYSBibG9jayBkZXZpY2U/XG4gICAgICovXG4gICAgaXNCbG9ja0RldmljZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGQkxLO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgcGF0aCBhIEZJRk8gcGlwZT9cbiAgICAgKi9cbiAgICBpc0ZJRk8oKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBJRklGTztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIHBhdGggYSBzb2NrZXQ/XG4gICAgICovXG4gICAgaXNTb2NrZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBJRlNPQ0s7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBwYXRoIGEgc3ltYm9saWMgbGluaz9cbiAgICAgKi9cbiAgICBpc1N5bWJvbGljTGluaygpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZMTkspID09PSBJRkxOSztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBlbnRyeSBpZiBpdCBoYXMgYmVlbiBzdWJqZWN0IG9mIGEgc3VjY2Vzc2Z1bCBsc3RhdCwgb3JcbiAgICAgKiB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogRG9lcyBub3QgcmVhZCB0aGUgZmlsZXN5c3RlbSwgc28gYW4gdW5kZWZpbmVkIHJlc3VsdCAqY291bGQqIHNpbXBseVxuICAgICAqIG1lYW4gdGhhdCB3ZSBoYXZlbid0IGNhbGxlZCBsc3RhdCBvbiBpdC5cbiAgICAgKi9cbiAgICBsc3RhdENhY2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3R5cGUgJiBMU1RBVF9DQUxMRUQgPyB0aGlzIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGNhY2hlZCBsaW5rIHRhcmdldCBpZiB0aGUgZW50cnkgaGFzIGJlZW4gdGhlIHN1YmplY3Qgb2YgYVxuICAgICAqIHN1Y2Nlc3NmdWwgcmVhZGxpbmssIG9yIHVuZGVmaW5lZCBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiBEb2VzIG5vdCByZWFkIHRoZSBmaWxlc3lzdGVtLCBzbyBhbiB1bmRlZmluZWQgcmVzdWx0ICpjb3VsZCoganVzdCBtZWFuIHdlXG4gICAgICogZG9uJ3QgaGF2ZSBhbnkgY2FjaGVkIGRhdGEuIE9ubHkgdXNlIGl0IGlmIHlvdSBhcmUgdmVyeSBzdXJlIHRoYXQgYVxuICAgICAqIHJlYWRsaW5rKCkgaGFzIGJlZW4gY2FsbGVkIGF0IHNvbWUgcG9pbnQuXG4gICAgICovXG4gICAgcmVhZGxpbmtDYWNoZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNsaW5rVGFyZ2V0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjYWNoZWQgcmVhbHBhdGggdGFyZ2V0IGlmIHRoZSBlbnRyeSBoYXMgYmVlbiB0aGUgc3ViamVjdFxuICAgICAqIG9mIGEgc3VjY2Vzc2Z1bCByZWFscGF0aCwgb3IgdW5kZWZpbmVkIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIERvZXMgbm90IHJlYWQgdGhlIGZpbGVzeXN0ZW0sIHNvIGFuIHVuZGVmaW5lZCByZXN1bHQgKmNvdWxkKiBqdXN0IG1lYW4gd2VcbiAgICAgKiBkb24ndCBoYXZlIGFueSBjYWNoZWQgZGF0YS4gT25seSB1c2UgaXQgaWYgeW91IGFyZSB2ZXJ5IHN1cmUgdGhhdCBhXG4gICAgICogcmVhbHBhdGgoKSBoYXMgYmVlbiBjYWxsZWQgYXQgc29tZSBwb2ludC5cbiAgICAgKi9cbiAgICByZWFscGF0aENhY2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3JlYWxwYXRoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjYWNoZWQgY2hpbGQgUGF0aCBlbnRyaWVzIGFycmF5IGlmIHRoZSBlbnRyeSBoYXMgYmVlbiB0aGVcbiAgICAgKiBzdWJqZWN0IG9mIGEgc3VjY2Vzc2Z1bCByZWFkZGlyKCksIG9yIFtdIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIERvZXMgbm90IHJlYWQgdGhlIGZpbGVzeXN0ZW0sIHNvIGFuIGVtcHR5IGFycmF5ICpjb3VsZCoganVzdCBtZWFuIHdlXG4gICAgICogZG9uJ3QgaGF2ZSBhbnkgY2FjaGVkIGRhdGEuIE9ubHkgdXNlIGl0IGlmIHlvdSBhcmUgdmVyeSBzdXJlIHRoYXQgYVxuICAgICAqIHJlYWRkaXIoKSBoYXMgYmVlbiBjYWxsZWQgcmVjZW50bHkgZW5vdWdoIHRvIHN0aWxsIGJlIHZhbGlkLlxuICAgICAqL1xuICAgIHJlYWRkaXJDYWNoZWQoKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBpdCdzIHdvcnRoIHRyeWluZyB0byByZWFkbGluay4gIEllLCB3ZSBkb24ndCAoeWV0KSBoYXZlXG4gICAgICogYW55IGluZGljYXRpb24gdGhhdCByZWFkbGluayB3aWxsIGRlZmluaXRlbHkgZmFpbC5cbiAgICAgKlxuICAgICAqIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhdGggaXMga25vd24gdG8gbm90IGJlIGEgc3ltbGluaywgaWYgYSBwcmV2aW91c1xuICAgICAqIHJlYWRsaW5rIGZhaWxlZCwgb3IgaWYgdGhlIGVudHJ5IGRvZXMgbm90IGV4aXN0LlxuICAgICAqL1xuICAgIGNhblJlYWRsaW5rKCkge1xuICAgICAgICBpZiAodGhpcy4jbGlua1RhcmdldClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBjYXNlcyB3aGVyZSBpdCBjYW5ub3QgcG9zc2libHkgc3VjY2VlZFxuICAgICAgICBjb25zdCBpZm10ID0gdGhpcy4jdHlwZSAmIElGTVQ7XG4gICAgICAgIHJldHVybiAhKChpZm10ICE9PSBVTktOT1dOICYmIGlmbXQgIT09IElGTE5LKSB8fFxuICAgICAgICAgICAgdGhpcy4jdHlwZSAmIEVOT1JFQURMSU5LIHx8XG4gICAgICAgICAgICB0aGlzLiN0eXBlICYgRU5PRU5UKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRydWUgaWYgcmVhZGRpciBoYXMgcHJldmlvdXNseSBiZWVuIHN1Y2Nlc3NmdWxseSBjYWxsZWQgb24gdGhpc1xuICAgICAqIHBhdGgsIGluZGljYXRpbmcgdGhhdCBjYWNoZWRSZWFkZGlyKCkgaXMgbGlrZWx5IHZhbGlkLlxuICAgICAqL1xuICAgIGNhbGxlZFJlYWRkaXIoKSB7XG4gICAgICAgIHJldHVybiAhISh0aGlzLiN0eXBlICYgUkVBRERJUl9DQUxMRUQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhdGggaXMga25vd24gdG8gbm90IGV4aXN0LiBUaGF0IGlzLCBhIHByZXZpb3VzIGxzdGF0XG4gICAgICogb3IgcmVhZGRpciBmYWlsZWQgdG8gdmVyaWZ5IGl0cyBleGlzdGVuY2Ugd2hlbiB0aGF0IHdvdWxkIGhhdmUgYmVlblxuICAgICAqIGV4cGVjdGVkLCBvciBhIHBhcmVudCBlbnRyeSB3YXMgbWFya2VkIGVpdGhlciBlbm9lbnQgb3IgZW5vdGRpci5cbiAgICAgKi9cbiAgICBpc0VOT0VOVCgpIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuI3R5cGUgJiBFTk9FTlQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0aCBpcyBhIG1hdGNoIGZvciB0aGUgZ2l2ZW4gcGF0aCBuYW1lLiAgVGhpcyBoYW5kbGVzXG4gICAgICogY2FzZSBzZW5zaXRpdml0eSBhbmQgdW5pY29kZSBub3JtYWxpemF0aW9uLlxuICAgICAqXG4gICAgICogTm90ZTogZXZlbiBvbiBjYXNlLXNlbnNpdGl2ZSBzeXN0ZW1zLCBpdCBpcyAqKm5vdCoqIHNhZmUgdG8gdGVzdCB0aGVcbiAgICAgKiBlcXVhbGl0eSBvZiB0aGUgYC5uYW1lYCBwcm9wZXJ0eSB0byBkZXRlcm1pbmUgd2hldGhlciBhIGdpdmVuIHBhdGhuYW1lXG4gICAgICogbWF0Y2hlcywgZHVlIHRvIHVuaWNvZGUgbm9ybWFsaXphdGlvbiBtaXNtYXRjaGVzLlxuICAgICAqXG4gICAgICogQWx3YXlzIHVzZSB0aGlzIG1ldGhvZCBpbnN0ZWFkIG9mIHRlc3RpbmcgdGhlIGBwYXRoLm5hbWVgIHByb3BlcnR5XG4gICAgICogZGlyZWN0bHkuXG4gICAgICovXG4gICAgaXNOYW1lZChuKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5ub2Nhc2UgP1xuICAgICAgICAgICAgdGhpcy4jbWF0Y2hOYW1lID09PSBub3JtYWxpemUobilcbiAgICAgICAgICAgIDogdGhpcy4jbWF0Y2hOYW1lID09PSBub3JtYWxpemVOb2Nhc2Uobik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgUGF0aCBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgdGFyZ2V0IG9mIGEgc3ltYm9saWMgbGluay5cbiAgICAgKlxuICAgICAqIElmIHRoZSBQYXRoIGlzIG5vdCBhIHN5bWJvbGljIGxpbmssIG9yIGlmIHRoZSByZWFkbGluayBjYWxsIGZhaWxzIGZvciBhbnlcbiAgICAgKiByZWFzb24sIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogUmVzdWx0IGlzIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dGRhdGVkIGlmIHRoZSBmaWxlc3lzdGVtIGlzIG11dGF0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgcmVhZGxpbmsoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuI2xpbmtUYXJnZXQ7XG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNhblJlYWRsaW5rKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIC8vIGFscmVhZHkgY292ZXJlZCBieSB0aGUgY2FuUmVhZGxpbmsgdGVzdCwgaGVyZSBmb3IgdHMgZ3J1bXBsZXNcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVhZCA9IGF3YWl0IHRoaXMuI2ZzLnByb21pc2VzLnJlYWRsaW5rKHRoaXMuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICBjb25zdCBsaW5rVGFyZ2V0ID0gKGF3YWl0IHRoaXMucGFyZW50LnJlYWxwYXRoKCkpPy5yZXNvbHZlKHJlYWQpO1xuICAgICAgICAgICAgaWYgKGxpbmtUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuI2xpbmtUYXJnZXQgPSBsaW5rVGFyZ2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAgIHRoaXMuI3JlYWRsaW5rRmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU3luY2hyb25vdXMge0BsaW5rIFBhdGhCYXNlLnJlYWRsaW5rfVxuICAgICAqL1xuICAgIHJlYWRsaW5rU3luYygpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4jbGlua1RhcmdldDtcbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGxpbmsoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgLy8gYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBjYW5SZWFkbGluayB0ZXN0LCBoZXJlIGZvciB0cyBncnVtcGxlc1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZWFkID0gdGhpcy4jZnMucmVhZGxpbmtTeW5jKHRoaXMuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICBjb25zdCBsaW5rVGFyZ2V0ID0gdGhpcy5wYXJlbnQucmVhbHBhdGhTeW5jKCk/LnJlc29sdmUocmVhZCk7XG4gICAgICAgICAgICBpZiAobGlua1RhcmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy4jbGlua1RhcmdldCA9IGxpbmtUYXJnZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgdGhpcy4jcmVhZGxpbmtGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjcmVhZGRpclN1Y2Nlc3MoY2hpbGRyZW4pIHtcbiAgICAgICAgLy8gc3VjY2VlZGVkLCBtYXJrIHJlYWRkaXIgY2FsbGVkIGJpdFxuICAgICAgICB0aGlzLiN0eXBlIHw9IFJFQURESVJfQ0FMTEVEO1xuICAgICAgICAvLyBtYXJrIGFsbCByZW1haW5pbmcgcHJvdmlzaW9uYWwgY2hpbGRyZW4gYXMgRU5PRU5UXG4gICAgICAgIGZvciAobGV0IHAgPSBjaGlsZHJlbi5wcm92aXNpb25hbDsgcCA8IGNoaWxkcmVuLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gY2hpbGRyZW5bcF07XG4gICAgICAgICAgICBpZiAoYylcbiAgICAgICAgICAgICAgICBjLiNtYXJrRU5PRU5UKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI21hcmtFTk9FTlQoKSB7XG4gICAgICAgIC8vIG1hcmsgYXMgVU5LTk9XTiBhbmQgRU5PRU5UXG4gICAgICAgIGlmICh0aGlzLiN0eXBlICYgRU5PRU5UKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLiN0eXBlID0gKHRoaXMuI3R5cGUgfCBFTk9FTlQpICYgSUZNVF9VTktOT1dOO1xuICAgICAgICB0aGlzLiNtYXJrQ2hpbGRyZW5FTk9FTlQoKTtcbiAgICB9XG4gICAgI21hcmtDaGlsZHJlbkVOT0VOVCgpIHtcbiAgICAgICAgLy8gYWxsIGNoaWxkcmVuIGFyZSBwcm92aXNpb25hbCBhbmQgZG8gbm90IGV4aXN0XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICBjaGlsZHJlbi5wcm92aXNpb25hbCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgcC4jbWFya0VOT0VOVCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgICNtYXJrRU5PUkVBTFBBVEgoKSB7XG4gICAgICAgIHRoaXMuI3R5cGUgfD0gRU5PUkVBTFBBVEg7XG4gICAgICAgIHRoaXMuI21hcmtFTk9URElSKCk7XG4gICAgfVxuICAgIC8vIHNhdmUgdGhlIGluZm9ybWF0aW9uIHdoZW4gd2Uga25vdyB0aGUgZW50cnkgaXMgbm90IGEgZGlyXG4gICAgI21hcmtFTk9URElSKCkge1xuICAgICAgICAvLyBlbnRyeSBpcyBub3QgYSBkaXJlY3RvcnksIHNvIGFueSBjaGlsZHJlbiBjYW4ndCBleGlzdC5cbiAgICAgICAgLy8gdGhpcyAqc2hvdWxkKiBiZSBpbXBvc3NpYmxlLCBzaW5jZSBhbnkgY2hpbGRyZW4gY3JlYXRlZFxuICAgICAgICAvLyBhZnRlciBpdCdzIGJlZW4gbWFya2VkIEVOT1RESVIgc2hvdWxkIGJlIG1hcmtlZCBFTk9FTlQsXG4gICAgICAgIC8vIHNvIGl0IHdvbid0IGV2ZW4gZ2V0IHRvIHRoaXMgcG9pbnQuXG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcy4jdHlwZSAmIEVOT1RESVIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIGxldCB0ID0gdGhpcy4jdHlwZTtcbiAgICAgICAgLy8gdGhpcyBjb3VsZCBoYXBwZW4gaWYgd2Ugc3RhdCBhIGRpciwgdGhlbiBkZWxldGUgaXQsXG4gICAgICAgIC8vIHRoZW4gdHJ5IHRvIHJlYWQgaXQgb3Igb25lIG9mIGl0cyBjaGlsZHJlbi5cbiAgICAgICAgaWYgKCh0ICYgSUZNVCkgPT09IElGRElSKVxuICAgICAgICAgICAgdCAmPSBJRk1UX1VOS05PV047XG4gICAgICAgIHRoaXMuI3R5cGUgPSB0IHwgRU5PVERJUjtcbiAgICAgICAgdGhpcy4jbWFya0NoaWxkcmVuRU5PRU5UKCk7XG4gICAgfVxuICAgICNyZWFkZGlyRmFpbChjb2RlID0gJycpIHtcbiAgICAgICAgLy8gbWFya0VOT1RESVIgYW5kIG1hcmtFTk9FTlQgYWxzbyBzZXQgcHJvdmlzaW9uYWw9MFxuICAgICAgICBpZiAoY29kZSA9PT0gJ0VOT1RESVInIHx8IGNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9URElSKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9FTlQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4oKS5wcm92aXNpb25hbCA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI2xzdGF0RmFpbChjb2RlID0gJycpIHtcbiAgICAgICAgLy8gV2luZG93cyBqdXN0IHJhaXNlcyBFTk9FTlQgaW4gdGhpcyBjYXNlLCBkaXNhYmxlIGZvciB3aW4gQ0lcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmIChjb2RlID09PSAnRU5PVERJUicpIHtcbiAgICAgICAgICAgIC8vIGFscmVhZHkga25vdyBpdCBoYXMgYSBwYXJlbnQgYnkgdGhpcyBwb2ludFxuICAgICAgICAgICAgY29uc3QgcCA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgcC4jbWFya0VOT1RESVIoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9FTlQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjcmVhZGxpbmtGYWlsKGNvZGUgPSAnJykge1xuICAgICAgICBsZXQgdGVyID0gdGhpcy4jdHlwZTtcbiAgICAgICAgdGVyIHw9IEVOT1JFQURMSU5LO1xuICAgICAgICBpZiAoY29kZSA9PT0gJ0VOT0VOVCcpXG4gICAgICAgICAgICB0ZXIgfD0gRU5PRU5UO1xuICAgICAgICAvLyB3aW5kb3dzIGdldHMgYSB3ZWlyZCBlcnJvciB3aGVuIHlvdSB0cnkgdG8gcmVhZGxpbmsgYSBmaWxlXG4gICAgICAgIGlmIChjb2RlID09PSAnRUlOVkFMJyB8fCBjb2RlID09PSAnVU5LTk9XTicpIHtcbiAgICAgICAgICAgIC8vIGV4aXN0cywgYnV0IG5vdCBhIHN5bWxpbmssIHdlIGRvbid0IGtub3cgV0hBVCBpdCBpcywgc28gcmVtb3ZlXG4gICAgICAgICAgICAvLyBhbGwgSUZNVCBiaXRzLlxuICAgICAgICAgICAgdGVyICY9IElGTVRfVU5LTk9XTjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiN0eXBlID0gdGVyO1xuICAgICAgICAvLyB3aW5kb3dzIGp1c3QgZ2V0cyBFTk9FTlQgaW4gdGhpcyBjYXNlLiAgV2UgZG8gY292ZXIgdGhlIGNhc2UsXG4gICAgICAgIC8vIGp1c3QgZGlzYWJsZWQgYmVjYXVzZSBpdCdzIGltcG9zc2libGUgb24gV2luZG93cyBDSVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKGNvZGUgPT09ICdFTk9URElSJyAmJiB0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuI21hcmtFTk9URElSKCk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICB9XG4gICAgI3JlYWRkaXJBZGRDaGlsZChlLCBjKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jcmVhZGRpck1heWJlUHJvbW90ZUNoaWxkKGUsIGMpIHx8XG4gICAgICAgICAgICB0aGlzLiNyZWFkZGlyQWRkTmV3Q2hpbGQoZSwgYykpO1xuICAgIH1cbiAgICAjcmVhZGRpckFkZE5ld0NoaWxkKGUsIGMpIHtcbiAgICAgICAgLy8gYWxsb2MgbmV3IGVudHJ5IGF0IGhlYWQsIHNvIGl0J3MgbmV2ZXIgcHJvdmlzaW9uYWxcbiAgICAgICAgY29uc3QgdHlwZSA9IGVudFRvVHlwZShlKTtcbiAgICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLm5ld0NoaWxkKGUubmFtZSwgdHlwZSwgeyBwYXJlbnQ6IHRoaXMgfSk7XG4gICAgICAgIGNvbnN0IGlmbXQgPSBjaGlsZC4jdHlwZSAmIElGTVQ7XG4gICAgICAgIGlmIChpZm10ICE9PSBJRkRJUiAmJiBpZm10ICE9PSBJRkxOSyAmJiBpZm10ICE9PSBVTktOT1dOKSB7XG4gICAgICAgICAgICBjaGlsZC4jdHlwZSB8PSBFTk9URElSO1xuICAgICAgICB9XG4gICAgICAgIGMudW5zaGlmdChjaGlsZCk7XG4gICAgICAgIGMucHJvdmlzaW9uYWwrKztcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICAjcmVhZGRpck1heWJlUHJvbW90ZUNoaWxkKGUsIGMpIHtcbiAgICAgICAgZm9yIChsZXQgcCA9IGMucHJvdmlzaW9uYWw7IHAgPCBjLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBjb25zdCBwY2hpbGQgPSBjW3BdO1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubm9jYXNlID8gbm9ybWFsaXplTm9jYXNlKGUubmFtZSkgOiBub3JtYWxpemUoZS5uYW1lKTtcbiAgICAgICAgICAgIGlmIChuYW1lICE9PSBwY2hpbGQuI21hdGNoTmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3JlYWRkaXJQcm9tb3RlQ2hpbGQoZSwgcGNoaWxkLCBwLCBjKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjcmVhZGRpclByb21vdGVDaGlsZChlLCBwLCBpbmRleCwgYykge1xuICAgICAgICBjb25zdCB2ID0gcC5uYW1lO1xuICAgICAgICAvLyByZXRhaW4gYW55IG90aGVyIGZsYWdzLCBidXQgc2V0IGlmbXQgZnJvbSBkaXJlbnRcbiAgICAgICAgcC4jdHlwZSA9IChwLiN0eXBlICYgSUZNVF9VTktOT1dOKSB8IGVudFRvVHlwZShlKTtcbiAgICAgICAgLy8gY2FzZSBzZW5zaXRpdml0eSBmaXhpbmcgd2hlbiB3ZSBsZWFybiB0aGUgdHJ1ZSBuYW1lLlxuICAgICAgICBpZiAodiAhPT0gZS5uYW1lKVxuICAgICAgICAgICAgcC5uYW1lID0gZS5uYW1lO1xuICAgICAgICAvLyBqdXN0IGFkdmFuY2UgcHJvdmlzaW9uYWwgaW5kZXggKHBvdGVudGlhbGx5IG9mZiB0aGUgbGlzdCksXG4gICAgICAgIC8vIG90aGVyd2lzZSB3ZSBoYXZlIHRvIHNwbGljZS9wb3AgaXQgb3V0IGFuZCByZS1pbnNlcnQgYXQgaGVhZFxuICAgICAgICBpZiAoaW5kZXggIT09IGMucHJvdmlzaW9uYWwpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gYy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgICAgIGMucG9wKCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgYy51bnNoaWZ0KHApO1xuICAgICAgICB9XG4gICAgICAgIGMucHJvdmlzaW9uYWwrKztcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGwgbHN0YXQoKSBvbiB0aGlzIFBhdGgsIGFuZCB1cGRhdGUgYWxsIGtub3duIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlXG4gICAgICogZGV0ZXJtaW5lZC5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB1bmxpa2UgYGZzLmxzdGF0KClgLCB0aGUgcmV0dXJuZWQgdmFsdWUgZG9lcyBub3QgY29udGFpbiBzb21lXG4gICAgICogaW5mb3JtYXRpb24sIHN1Y2ggYXMgYG1vZGVgLCBgZGV2YCwgYG5saW5rYCwgYW5kIGBpbm9gLiAgSWYgdGhhdFxuICAgICAqIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkLCB5b3Ugd2lsbCBuZWVkIHRvIGNhbGwgYGZzLmxzdGF0YCB5b3Vyc2VsZi5cbiAgICAgKlxuICAgICAqIElmIHRoZSBQYXRoIHJlZmVycyB0byBhIG5vbmV4aXN0ZW50IGZpbGUsIG9yIGlmIHRoZSBsc3RhdCBjYWxsIGZhaWxzIGZvclxuICAgICAqIGFueSByZWFzb24sIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLiAgT3RoZXJ3aXNlIHRoZSB1cGRhdGVkIFBhdGggb2JqZWN0IGlzXG4gICAgICogcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHRzIGFyZSBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXQgb2YgZGF0ZSBpZiB0aGUgZmlsZXN5c3RlbSBpc1xuICAgICAqIG11dGF0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgbHN0YXQoKSB7XG4gICAgICAgIGlmICgodGhpcy4jdHlwZSAmIEVOT0VOVCkgPT09IDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jYXBwbHlTdGF0KGF3YWl0IHRoaXMuI2ZzLnByb21pc2VzLmxzdGF0KHRoaXMuZnVsbHBhdGgoKSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jbHN0YXRGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHN5bmNocm9ub3VzIHtAbGluayBQYXRoQmFzZS5sc3RhdH1cbiAgICAgKi9cbiAgICBsc3RhdFN5bmMoKSB7XG4gICAgICAgIGlmICgodGhpcy4jdHlwZSAmIEVOT0VOVCkgPT09IDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jYXBwbHlTdGF0KHRoaXMuI2ZzLmxzdGF0U3luYyh0aGlzLmZ1bGxwYXRoKCkpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI2xzdGF0RmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAjYXBwbHlTdGF0KHN0KSB7XG4gICAgICAgIGNvbnN0IHsgYXRpbWUsIGF0aW1lTXMsIGJpcnRodGltZSwgYmlydGh0aW1lTXMsIGJsa3NpemUsIGJsb2NrcywgY3RpbWUsIGN0aW1lTXMsIGRldiwgZ2lkLCBpbm8sIG1vZGUsIG10aW1lLCBtdGltZU1zLCBubGluaywgcmRldiwgc2l6ZSwgdWlkLCB9ID0gc3Q7XG4gICAgICAgIHRoaXMuI2F0aW1lID0gYXRpbWU7XG4gICAgICAgIHRoaXMuI2F0aW1lTXMgPSBhdGltZU1zO1xuICAgICAgICB0aGlzLiNiaXJ0aHRpbWUgPSBiaXJ0aHRpbWU7XG4gICAgICAgIHRoaXMuI2JpcnRodGltZU1zID0gYmlydGh0aW1lTXM7XG4gICAgICAgIHRoaXMuI2Jsa3NpemUgPSBibGtzaXplO1xuICAgICAgICB0aGlzLiNibG9ja3MgPSBibG9ja3M7XG4gICAgICAgIHRoaXMuI2N0aW1lID0gY3RpbWU7XG4gICAgICAgIHRoaXMuI2N0aW1lTXMgPSBjdGltZU1zO1xuICAgICAgICB0aGlzLiNkZXYgPSBkZXY7XG4gICAgICAgIHRoaXMuI2dpZCA9IGdpZDtcbiAgICAgICAgdGhpcy4jaW5vID0gaW5vO1xuICAgICAgICB0aGlzLiNtb2RlID0gbW9kZTtcbiAgICAgICAgdGhpcy4jbXRpbWUgPSBtdGltZTtcbiAgICAgICAgdGhpcy4jbXRpbWVNcyA9IG10aW1lTXM7XG4gICAgICAgIHRoaXMuI25saW5rID0gbmxpbms7XG4gICAgICAgIHRoaXMuI3JkZXYgPSByZGV2O1xuICAgICAgICB0aGlzLiNzaXplID0gc2l6ZTtcbiAgICAgICAgdGhpcy4jdWlkID0gdWlkO1xuICAgICAgICBjb25zdCBpZm10ID0gZW50VG9UeXBlKHN0KTtcbiAgICAgICAgLy8gcmV0YWluIGFueSBvdGhlciBmbGFncywgYnV0IHNldCB0aGUgaWZtdFxuICAgICAgICB0aGlzLiN0eXBlID0gKHRoaXMuI3R5cGUgJiBJRk1UX1VOS05PV04pIHwgaWZtdCB8IExTVEFUX0NBTExFRDtcbiAgICAgICAgaWYgKGlmbXQgIT09IFVOS05PV04gJiYgaWZtdCAhPT0gSUZESVIgJiYgaWZtdCAhPT0gSUZMTkspIHtcbiAgICAgICAgICAgIHRoaXMuI3R5cGUgfD0gRU5PVERJUjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjb25SZWFkZGlyQ0IgPSBbXTtcbiAgICAjcmVhZGRpckNCSW5GbGlnaHQgPSBmYWxzZTtcbiAgICAjY2FsbE9uUmVhZGRpckNCKGNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuI3JlYWRkaXJDQkluRmxpZ2h0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGNicyA9IHRoaXMuI29uUmVhZGRpckNCLnNsaWNlKCk7XG4gICAgICAgIHRoaXMuI29uUmVhZGRpckNCLmxlbmd0aCA9IDA7XG4gICAgICAgIGNicy5mb3JFYWNoKGNiID0+IGNiKG51bGwsIGNoaWxkcmVuKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YW5kYXJkIG5vZGUtc3R5bGUgY2FsbGJhY2sgaW50ZXJmYWNlIHRvIGdldCBsaXN0IG9mIGRpcmVjdG9yeSBlbnRyaWVzLlxuICAgICAqXG4gICAgICogSWYgdGhlIFBhdGggY2Fubm90IG9yIGRvZXMgbm90IGNvbnRhaW4gYW55IGNoaWxkcmVuLCB0aGVuIGFuIGVtcHR5IGFycmF5XG4gICAgICogaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHRzIGFyZSBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXQgb2YgZGF0ZSBpZiB0aGUgZmlsZXN5c3RlbSBpc1xuICAgICAqIG11dGF0ZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2IgVGhlIGNhbGxiYWNrIGNhbGxlZCB3aXRoIChlciwgZW50cmllcykuICBOb3RlIHRoYXQgdGhlIGBlcmBcbiAgICAgKiBwYXJhbSBpcyBzb21ld2hhdCBleHRyYW5lb3VzLCBhcyBhbGwgcmVhZGRpcigpIGVycm9ycyBhcmUgaGFuZGxlZCBhbmRcbiAgICAgKiBzaW1wbHkgcmVzdWx0IGluIGFuIGVtcHR5IHNldCBvZiBlbnRyaWVzIGJlaW5nIHJldHVybmVkLlxuICAgICAqIEBwYXJhbSBhbGxvd1phbGdvIEJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IGltbWVkaWF0ZWx5IGtub3duIHJlc3VsdHMgc2hvdWxkXG4gICAgICogKm5vdCogYmUgZGVmZXJyZWQgd2l0aCBgcXVldWVNaWNyb3Rhc2tgLiBEZWZhdWx0cyB0byBgZmFsc2VgLiBSZWxlYXNlXG4gICAgICogemFsZ28gYXQgeW91ciBwZXJpbCwgdGhlIGRhcmsgcG9ueSBsb3JkIGlzIGRldmlvdXMgYW5kIHVuZm9yZ2l2aW5nLlxuICAgICAqL1xuICAgIHJlYWRkaXJDQihjYiwgYWxsb3daYWxnbyA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIGlmIChhbGxvd1phbGdvKVxuICAgICAgICAgICAgICAgIGNiKG51bGwsIFtdKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYihudWxsLCBbXSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICBpZiAodGhpcy5jYWxsZWRSZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgICAgICAgICBpZiAoYWxsb3daYWxnbylcbiAgICAgICAgICAgICAgICBjYihudWxsLCBjKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYihudWxsLCBjKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB6YWxnbyBhdCB0aGlzIHBvaW50LlxuICAgICAgICB0aGlzLiNvblJlYWRkaXJDQi5wdXNoKGNiKTtcbiAgICAgICAgaWYgKHRoaXMuI3JlYWRkaXJDQkluRmxpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jcmVhZGRpckNCSW5GbGlnaHQgPSB0cnVlO1xuICAgICAgICAvLyBlbHNlIHJlYWQgdGhlIGRpcmVjdG9yeSwgZmlsbCB1cCBjaGlsZHJlblxuICAgICAgICAvLyBkZS1wcm92aXNpb25hbGl6ZSBhbnkgcHJvdmlzaW9uYWwgY2hpbGRyZW4uXG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gdGhpcy5mdWxscGF0aCgpO1xuICAgICAgICB0aGlzLiNmcy5yZWFkZGlyKGZ1bGxwYXRoLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSwgKGVyLCBlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyRmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wcm92aXNpb25hbCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZ2V0IGFuIGVycm9yLCB3ZSBhbHdheXMgZ2V0IGVudHJpZXMuXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpckFkZENoaWxkKGUsIGNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpclN1Y2Nlc3MoY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jY2FsbE9uUmVhZGRpckNCKGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAjYXN5bmNSZWFkZGlySW5GbGlnaHQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFuIGFycmF5IG9mIGtub3duIGNoaWxkIGVudHJpZXMuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgUGF0aCBjYW5ub3Qgb3IgZG9lcyBub3QgY29udGFpbiBhbnkgY2hpbGRyZW4sIHRoZW4gYW4gZW1wdHkgYXJyYXlcbiAgICAgKiBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdHMgYXJlIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dCBvZiBkYXRlIGlmIHRoZSBmaWxlc3lzdGVtIGlzXG4gICAgICogbXV0YXRlZC5cbiAgICAgKi9cbiAgICBhc3luYyByZWFkZGlyKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGlmICh0aGlzLmNhbGxlZFJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbHNlIHJlYWQgdGhlIGRpcmVjdG9yeSwgZmlsbCB1cCBjaGlsZHJlblxuICAgICAgICAvLyBkZS1wcm92aXNpb25hbGl6ZSBhbnkgcHJvdmlzaW9uYWwgY2hpbGRyZW4uXG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gdGhpcy5mdWxscGF0aCgpO1xuICAgICAgICBpZiAodGhpcy4jYXN5bmNSZWFkZGlySW5GbGlnaHQpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuI2FzeW5jUmVhZGRpckluRmxpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBsZXQgcmVzb2x2ZSA9ICgpID0+IHsgfTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB0aGlzLiNhc3luY1JlYWRkaXJJbkZsaWdodCA9IG5ldyBQcm9taXNlKHJlcyA9PiAocmVzb2x2ZSA9IHJlcykpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgYXdhaXQgdGhpcy4jZnMucHJvbWlzZXMucmVhZGRpcihmdWxscGF0aCwge1xuICAgICAgICAgICAgICAgICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJBZGRDaGlsZChlLCBjaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJTdWNjZXNzKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3Zpc2lvbmFsID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI2FzeW5jUmVhZGRpckluRmxpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHN5bmNocm9ub3VzIHtAbGluayBQYXRoQmFzZS5yZWFkZGlyfVxuICAgICAqL1xuICAgIHJlYWRkaXJTeW5jKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGlmICh0aGlzLmNhbGxlZFJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbHNlIHJlYWQgdGhlIGRpcmVjdG9yeSwgZmlsbCB1cCBjaGlsZHJlblxuICAgICAgICAvLyBkZS1wcm92aXNpb25hbGl6ZSBhbnkgcHJvdmlzaW9uYWwgY2hpbGRyZW4uXG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gdGhpcy5mdWxscGF0aCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIHRoaXMuI2ZzLnJlYWRkaXJTeW5jKGZ1bGxwYXRoLCB7XG4gICAgICAgICAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpckFkZENoaWxkKGUsIGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJTdWNjZXNzKGNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgY2hpbGRyZW4ucHJvdmlzaW9uYWwgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgfVxuICAgIGNhblJlYWRkaXIoKSB7XG4gICAgICAgIGlmICh0aGlzLiN0eXBlICYgRU5PQ0hJTEQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGlmbXQgPSBJRk1UICYgdGhpcy4jdHlwZTtcbiAgICAgICAgLy8gd2UgYWx3YXlzIHNldCBFTk9URElSIHdoZW4gc2V0dGluZyBJRk1ULCBzbyBzaG91bGQgYmUgaW1wb3NzaWJsZVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKCEoaWZtdCA9PT0gVU5LTk9XTiB8fCBpZm10ID09PSBJRkRJUiB8fCBpZm10ID09PSBJRkxOSykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSB7XG4gICAgICAgIHJldHVybiAoKHRoaXMuI3R5cGUgJiBJRkRJUikgPT09IElGRElSICYmXG4gICAgICAgICAgICAhKHRoaXMuI3R5cGUgJiBFTk9DSElMRCkgJiZcbiAgICAgICAgICAgICFkaXJzLmhhcyh0aGlzKSAmJlxuICAgICAgICAgICAgKCF3YWxrRmlsdGVyIHx8IHdhbGtGaWx0ZXIodGhpcykpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBQYXRoIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHBhdGggYXMgcmVzb2x2ZWRcbiAgICAgKiBieSByZWFscGF0aCgzKS5cbiAgICAgKlxuICAgICAqIElmIHRoZSByZWFscGF0aCBjYWxsIGZhaWxzIGZvciBhbnkgcmVhc29uLCBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdCBpcyBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXRkYXRlZCBpZiB0aGUgZmlsZXN5c3RlbSBpcyBtdXRhdGVkLlxuICAgICAqIE9uIHN1Y2Nlc3MsIHJldHVybnMgYSBQYXRoIG9iamVjdC5cbiAgICAgKi9cbiAgICBhc3luYyByZWFscGF0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI3JlYWxwYXRoKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3JlYWxwYXRoO1xuICAgICAgICBpZiAoKEVOT1JFQUxQQVRIIHwgRU5PUkVBRExJTksgfCBFTk9FTlQpICYgdGhpcy4jdHlwZSlcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBycCA9IGF3YWl0IHRoaXMuI2ZzLnByb21pc2VzLnJlYWxwYXRoKHRoaXMuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI3JlYWxwYXRoID0gdGhpcy5yZXNvbHZlKHJwKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9SRUFMUEFUSCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN5bmNocm9ub3VzIHtAbGluayByZWFscGF0aH1cbiAgICAgKi9cbiAgICByZWFscGF0aFN5bmMoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyZWFscGF0aClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZWFscGF0aDtcbiAgICAgICAgaWYgKChFTk9SRUFMUEFUSCB8IEVOT1JFQURMSU5LIHwgRU5PRU5UKSAmIHRoaXMuI3R5cGUpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcnAgPSB0aGlzLiNmcy5yZWFscGF0aFN5bmModGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jcmVhbHBhdGggPSB0aGlzLnJlc29sdmUocnApKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoXykge1xuICAgICAgICAgICAgdGhpcy4jbWFya0VOT1JFQUxQQVRIKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRvIG1hcmsgdGhpcyBQYXRoIG9iamVjdCBhcyB0aGUgc2N1cnJ5IGN3ZCxcbiAgICAgKiBjYWxsZWQgYnkge0BsaW5rIFBhdGhTY3VycnkjY2hkaXJ9XG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBbc2V0QXNDd2RdKG9sZEN3ZCkge1xuICAgICAgICBpZiAob2xkQ3dkID09PSB0aGlzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBvbGRDd2QuaXNDV0QgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0NXRCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSBuZXcgU2V0KFtdKTtcbiAgICAgICAgbGV0IHJwID0gW107XG4gICAgICAgIGxldCBwID0gdGhpcztcbiAgICAgICAgd2hpbGUgKHAgJiYgcC5wYXJlbnQpIHtcbiAgICAgICAgICAgIGNoYW5nZWQuYWRkKHApO1xuICAgICAgICAgICAgcC4jcmVsYXRpdmUgPSBycC5qb2luKHRoaXMuc2VwKTtcbiAgICAgICAgICAgIHAuI3JlbGF0aXZlUG9zaXggPSBycC5qb2luKCcvJyk7XG4gICAgICAgICAgICBwID0gcC5wYXJlbnQ7XG4gICAgICAgICAgICBycC5wdXNoKCcuLicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdyB1bi1tZW1vaXplIHBhcmVudHMgb2Ygb2xkIGN3ZFxuICAgICAgICBwID0gb2xkQ3dkO1xuICAgICAgICB3aGlsZSAocCAmJiBwLnBhcmVudCAmJiAhY2hhbmdlZC5oYXMocCkpIHtcbiAgICAgICAgICAgIHAuI3JlbGF0aXZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcC4jcmVsYXRpdmVQb3NpeCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHAgPSBwLnBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogUGF0aCBjbGFzcyB1c2VkIG9uIHdpbjMyIHN5c3RlbXNcbiAqXG4gKiBVc2VzIGAnXFxcXCdgIGFzIHRoZSBwYXRoIHNlcGFyYXRvciBmb3IgcmV0dXJuZWQgcGF0aHMsIGVpdGhlciBgJ1xcXFwnYCBvciBgJy8nYFxuICogYXMgdGhlIHBhdGggc2VwYXJhdG9yIGZvciBwYXJzaW5nIHBhdGhzLlxuICovXG5leHBvcnQgY2xhc3MgUGF0aFdpbjMyIGV4dGVuZHMgUGF0aEJhc2Uge1xuICAgIC8qKlxuICAgICAqIFNlcGFyYXRvciBmb3IgZ2VuZXJhdGluZyBwYXRoIHN0cmluZ3MuXG4gICAgICovXG4gICAgc2VwID0gJ1xcXFwnO1xuICAgIC8qKlxuICAgICAqIFNlcGFyYXRvciBmb3IgcGFyc2luZyBwYXRoIHN0cmluZ3MuXG4gICAgICovXG4gICAgc3BsaXRTZXAgPSBlaXRoZXJTZXA7XG4gICAgLyoqXG4gICAgICogRG8gbm90IGNyZWF0ZSBuZXcgUGF0aCBvYmplY3RzIGRpcmVjdGx5LiAgVGhleSBzaG91bGQgYWx3YXlzIGJlIGFjY2Vzc2VkXG4gICAgICogdmlhIHRoZSBQYXRoU2N1cnJ5IGNsYXNzIG9yIG90aGVyIG1ldGhvZHMgb24gdGhlIFBhdGggY2xhc3MuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB0eXBlID0gVU5LTk9XTiwgcm9vdCwgcm9vdHMsIG5vY2FzZSwgY2hpbGRyZW4sIG9wdHMpIHtcbiAgICAgICAgc3VwZXIobmFtZSwgdHlwZSwgcm9vdCwgcm9vdHMsIG5vY2FzZSwgY2hpbGRyZW4sIG9wdHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBuZXdDaGlsZChuYW1lLCB0eXBlID0gVU5LTk9XTiwgb3B0cyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBuZXcgUGF0aFdpbjMyKG5hbWUsIHR5cGUsIHRoaXMucm9vdCwgdGhpcy5yb290cywgdGhpcy5ub2Nhc2UsIHRoaXMuY2hpbGRyZW5DYWNoZSgpLCBvcHRzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZ2V0Um9vdFN0cmluZyhwYXRoKSB7XG4gICAgICAgIHJldHVybiB3aW4zMi5wYXJzZShwYXRoKS5yb290O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBnZXRSb290KHJvb3RQYXRoKSB7XG4gICAgICAgIHJvb3RQYXRoID0gdW5jVG9Ecml2ZShyb290UGF0aC50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgaWYgKHJvb3RQYXRoID09PSB0aGlzLnJvb3QubmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdDtcbiAgICAgICAgfVxuICAgICAgICAvLyBvaywgbm90IHRoYXQgb25lLCBjaGVjayBpZiBpdCBtYXRjaGVzIGFub3RoZXIgd2Uga25vdyBhYm91dFxuICAgICAgICBmb3IgKGNvbnN0IFtjb21wYXJlLCByb290XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnJvb3RzKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2FtZVJvb3Qocm9vdFBhdGgsIGNvbXBhcmUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLnJvb3RzW3Jvb3RQYXRoXSA9IHJvb3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyd2lzZSwgaGF2ZSB0byBjcmVhdGUgYSBuZXcgb25lLlxuICAgICAgICByZXR1cm4gKHRoaXMucm9vdHNbcm9vdFBhdGhdID0gbmV3IFBhdGhTY3VycnlXaW4zMihyb290UGF0aCwgdGhpcykucm9vdCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHNhbWVSb290KHJvb3RQYXRoLCBjb21wYXJlID0gdGhpcy5yb290Lm5hbWUpIHtcbiAgICAgICAgLy8gd2luZG93cyBjYW4gKHJhcmVseSkgaGF2ZSBjYXNlLXNlbnNpdGl2ZSBmaWxlc3lzdGVtLCBidXRcbiAgICAgICAgLy8gVU5DIGFuZCBkcml2ZSBsZXR0ZXJzIGFyZSBhbHdheXMgY2FzZS1pbnNlbnNpdGl2ZSwgYW5kIGNhbm9uaWNhbGx5XG4gICAgICAgIC8vIHJlcHJlc2VudGVkIHVwcGVyY2FzZS5cbiAgICAgICAgcm9vdFBhdGggPSByb290UGF0aFxuICAgICAgICAgICAgLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXC8vZywgJ1xcXFwnKVxuICAgICAgICAgICAgLnJlcGxhY2UodW5jRHJpdmVSZWdleHAsICckMVxcXFwnKTtcbiAgICAgICAgcmV0dXJuIHJvb3RQYXRoID09PSBjb21wYXJlO1xuICAgIH1cbn1cbi8qKlxuICogUGF0aCBjbGFzcyB1c2VkIG9uIGFsbCBwb3NpeCBzeXN0ZW1zLlxuICpcbiAqIFVzZXMgYCcvJ2AgYXMgdGhlIHBhdGggc2VwYXJhdG9yLlxuICovXG5leHBvcnQgY2xhc3MgUGF0aFBvc2l4IGV4dGVuZHMgUGF0aEJhc2Uge1xuICAgIC8qKlxuICAgICAqIHNlcGFyYXRvciBmb3IgcGFyc2luZyBwYXRoIHN0cmluZ3NcbiAgICAgKi9cbiAgICBzcGxpdFNlcCA9ICcvJztcbiAgICAvKipcbiAgICAgKiBzZXBhcmF0b3IgZm9yIGdlbmVyYXRpbmcgcGF0aCBzdHJpbmdzXG4gICAgICovXG4gICAgc2VwID0gJy8nO1xuICAgIC8qKlxuICAgICAqIERvIG5vdCBjcmVhdGUgbmV3IFBhdGggb2JqZWN0cyBkaXJlY3RseS4gIFRoZXkgc2hvdWxkIGFsd2F5cyBiZSBhY2Nlc3NlZFxuICAgICAqIHZpYSB0aGUgUGF0aFNjdXJyeSBjbGFzcyBvciBvdGhlciBtZXRob2RzIG9uIHRoZSBQYXRoIGNsYXNzLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmFtZSwgdHlwZSA9IFVOS05PV04sIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKG5hbWUsIHR5cGUsIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZ2V0Um9vdFN0cmluZyhwYXRoKSB7XG4gICAgICAgIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoJy8nKSA/ICcvJyA6ICcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBnZXRSb290KF9yb290UGF0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb290O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBuZXdDaGlsZChuYW1lLCB0eXBlID0gVU5LTk9XTiwgb3B0cyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBuZXcgUGF0aFBvc2l4KG5hbWUsIHR5cGUsIHRoaXMucm9vdCwgdGhpcy5yb290cywgdGhpcy5ub2Nhc2UsIHRoaXMuY2hpbGRyZW5DYWNoZSgpLCBvcHRzKTtcbiAgICB9XG59XG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgUGF0aFNjdXJyeSBjbGFzc2VzLCBwcm92aWRpbmcgdGhlIGludGVyZmFjZSBmb3IgcGF0aFxuICogcmVzb2x1dGlvbiBhbmQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLlxuICpcbiAqIFR5cGljYWxseSwgeW91IHNob3VsZCAqbm90KiBpbnN0YW50aWF0ZSB0aGlzIGNsYXNzIGRpcmVjdGx5LCBidXQgcmF0aGVyIG9uZVxuICogb2YgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGNsYXNzZXMsIG9yIHRoZSBleHBvcnRlZCB7QGxpbmsgUGF0aFNjdXJyeX0gd2hpY2hcbiAqIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHBsYXRmb3JtLlxuICovXG5leHBvcnQgY2xhc3MgUGF0aFNjdXJyeUJhc2Uge1xuICAgIC8qKlxuICAgICAqIFRoZSByb290IFBhdGggZW50cnkgZm9yIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9mIHRoaXMgU2N1cnJ5XG4gICAgICovXG4gICAgcm9vdDtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyaW5nIHBhdGggZm9yIHRoZSByb290IG9mIHRoaXMgU2N1cnJ5J3MgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICAgICAqL1xuICAgIHJvb3RQYXRoO1xuICAgIC8qKlxuICAgICAqIEEgY29sbGVjdGlvbiBvZiBhbGwgcm9vdHMgZW5jb3VudGVyZWQsIHJlZmVyZW5jZWQgYnkgcm9vdFBhdGhcbiAgICAgKi9cbiAgICByb290cztcbiAgICAvKipcbiAgICAgKiBUaGUgUGF0aCBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgUGF0aFNjdXJyeSdzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gICAgICovXG4gICAgY3dkO1xuICAgICNyZXNvbHZlQ2FjaGU7XG4gICAgI3Jlc29sdmVQb3NpeENhY2hlO1xuICAgICNjaGlsZHJlbjtcbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIHBhdGggY29tcGFyaXNvbnMgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuICAgICAqXG4gICAgICogRGVmYXVsdHMgdHJ1ZSBvbiBEYXJ3aW4gYW5kIFdpbmRvd3Mgc3lzdGVtcywgZmFsc2UgZWxzZXdoZXJlLlxuICAgICAqL1xuICAgIG5vY2FzZTtcbiAgICAjZnM7XG4gICAgLyoqXG4gICAgICogVGhpcyBjbGFzcyBzaG91bGQgbm90IGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseS5cbiAgICAgKlxuICAgICAqIFVzZSBQYXRoU2N1cnJ5V2luMzIsIFBhdGhTY3VycnlEYXJ3aW4sIFBhdGhTY3VycnlQb3NpeCwgb3IgUGF0aFNjdXJyeVxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY3dkID0gcHJvY2Vzcy5jd2QoKSwgcGF0aEltcGwsIHNlcCwgeyBub2Nhc2UsIGNoaWxkcmVuQ2FjaGVTaXplID0gMTYgKiAxMDI0LCBmcyA9IGRlZmF1bHRGUywgfSA9IHt9KSB7XG4gICAgICAgIHRoaXMuI2ZzID0gZnNGcm9tT3B0aW9uKGZzKTtcbiAgICAgICAgaWYgKGN3ZCBpbnN0YW5jZW9mIFVSTCB8fCBjd2Quc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XG4gICAgICAgICAgICBjd2QgPSBmaWxlVVJMVG9QYXRoKGN3ZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVzb2x2ZSBhbmQgc3BsaXQgcm9vdCwgYW5kIHRoZW4gYWRkIHRvIHRoZSBzdG9yZS5cbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgb25seSB0aW1lIHdlIGNhbGwgcGF0aC5yZXNvbHZlKClcbiAgICAgICAgY29uc3QgY3dkUGF0aCA9IHBhdGhJbXBsLnJlc29sdmUoY3dkKTtcbiAgICAgICAgdGhpcy5yb290cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMucm9vdFBhdGggPSB0aGlzLnBhcnNlUm9vdFBhdGgoY3dkUGF0aCk7XG4gICAgICAgIHRoaXMuI3Jlc29sdmVDYWNoZSA9IG5ldyBSZXNvbHZlQ2FjaGUoKTtcbiAgICAgICAgdGhpcy4jcmVzb2x2ZVBvc2l4Q2FjaGUgPSBuZXcgUmVzb2x2ZUNhY2hlKCk7XG4gICAgICAgIHRoaXMuI2NoaWxkcmVuID0gbmV3IENoaWxkcmVuQ2FjaGUoY2hpbGRyZW5DYWNoZVNpemUpO1xuICAgICAgICBjb25zdCBzcGxpdCA9IGN3ZFBhdGguc3Vic3RyaW5nKHRoaXMucm9vdFBhdGgubGVuZ3RoKS5zcGxpdChzZXApO1xuICAgICAgICAvLyByZXNvbHZlKCcvJykgbGVhdmVzICcnLCBzcGxpdHMgdG8gWycnXSwgd2UgZG9uJ3Qgd2FudCB0aGF0LlxuICAgICAgICBpZiAoc3BsaXQubGVuZ3RoID09PSAxICYmICFzcGxpdFswXSkge1xuICAgICAgICAgICAgc3BsaXQucG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmIChub2Nhc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbXVzdCBwcm92aWRlIG5vY2FzZSBzZXR0aW5nIHRvIFBhdGhTY3VycnlCYXNlIGN0b3InKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLm5vY2FzZSA9IG5vY2FzZTtcbiAgICAgICAgdGhpcy5yb290ID0gdGhpcy5uZXdSb290KHRoaXMuI2ZzKTtcbiAgICAgICAgdGhpcy5yb290c1t0aGlzLnJvb3RQYXRoXSA9IHRoaXMucm9vdDtcbiAgICAgICAgbGV0IHByZXYgPSB0aGlzLnJvb3Q7XG4gICAgICAgIGxldCBsZW4gPSBzcGxpdC5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCBqb2luU2VwID0gcGF0aEltcGwuc2VwO1xuICAgICAgICBsZXQgYWJzID0gdGhpcy5yb290UGF0aDtcbiAgICAgICAgbGV0IHNhd0ZpcnN0ID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBzcGxpdCkge1xuICAgICAgICAgICAgY29uc3QgbCA9IGxlbi0tO1xuICAgICAgICAgICAgcHJldiA9IHByZXYuY2hpbGQocGFydCwge1xuICAgICAgICAgICAgICAgIHJlbGF0aXZlOiBuZXcgQXJyYXkobCkuZmlsbCgnLi4nKS5qb2luKGpvaW5TZXApLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUG9zaXg6IG5ldyBBcnJheShsKS5maWxsKCcuLicpLmpvaW4oJy8nKSxcbiAgICAgICAgICAgICAgICBmdWxscGF0aDogKGFicyArPSAoc2F3Rmlyc3QgPyAnJyA6IGpvaW5TZXApICsgcGFydCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNhd0ZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN3ZCA9IHByZXY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgZGVwdGggb2YgYSBwcm92aWRlZCBwYXRoLCBzdHJpbmcsIG9yIHRoZSBjd2RcbiAgICAgKi9cbiAgICBkZXB0aChwYXRoID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcGF0aCA9IHRoaXMuY3dkLnJlc29sdmUocGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhdGguZGVwdGgoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBjYWNoZSBvZiBjaGlsZCBlbnRyaWVzLiAgRXhwb3NlZCBzbyBzdWJjbGFzc2VzIGNhbiBjcmVhdGVcbiAgICAgKiBjaGlsZCBQYXRoIG9iamVjdHMgaW4gYSBwbGF0Zm9ybS1zcGVjaWZpYyB3YXkuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjaGlsZHJlbkNhY2hlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY2hpbGRyZW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgb25lIG9yIG1vcmUgcGF0aCBzdHJpbmdzIHRvIGEgcmVzb2x2ZWQgc3RyaW5nXG4gICAgICpcbiAgICAgKiBTYW1lIGludGVyZmFjZSBhcyByZXF1aXJlKCdwYXRoJykucmVzb2x2ZS5cbiAgICAgKlxuICAgICAqIE11Y2ggZmFzdGVyIHRoYW4gcGF0aC5yZXNvbHZlKCkgd2hlbiBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZm9yIHRoZSBzYW1lXG4gICAgICogcGF0aCwgYmVjYXVzZSB0aGUgcmVzb2x2ZWQgUGF0aCBvYmplY3RzIGFyZSBjYWNoZWQuICBNdWNoIHNsb3dlclxuICAgICAqIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICByZXNvbHZlKC4uLnBhdGhzKSB7XG4gICAgICAgIC8vIGZpcnN0IGZpZ3VyZSBvdXQgdGhlIG1pbmltdW0gbnVtYmVyIG9mIHBhdGhzIHdlIGhhdmUgdG8gdGVzdFxuICAgICAgICAvLyB3ZSBhbHdheXMgc3RhcnQgYXQgY3dkLCBidXQgYW55IGFic29sdXRlcyB3aWxsIGJ1bXAgdGhlIHN0YXJ0XG4gICAgICAgIGxldCByID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSBwYXRocy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgcCA9IHBhdGhzW2ldO1xuICAgICAgICAgICAgaWYgKCFwIHx8IHAgPT09ICcuJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHIgPSByID8gYCR7cH0vJHtyfWAgOiBwO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNBYnNvbHV0ZShwKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuI3Jlc29sdmVDYWNoZS5nZXQocik7XG4gICAgICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmN3ZC5yZXNvbHZlKHIpLmZ1bGxwYXRoKCk7XG4gICAgICAgIHRoaXMuI3Jlc29sdmVDYWNoZS5zZXQociwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzb2x2ZSBvbmUgb3IgbW9yZSBwYXRoIHN0cmluZ3MgdG8gYSByZXNvbHZlZCBzdHJpbmcsIHJldHVybmluZ1xuICAgICAqIHRoZSBwb3NpeCBwYXRoLiAgSWRlbnRpY2FsIHRvIC5yZXNvbHZlKCkgb24gcG9zaXggc3lzdGVtcywgYnV0IG9uXG4gICAgICogd2luZG93cyB3aWxsIHJldHVybiBhIGZvcndhcmQtc2xhc2ggc2VwYXJhdGVkIFVOQyBwYXRoLlxuICAgICAqXG4gICAgICogU2FtZSBpbnRlcmZhY2UgYXMgcmVxdWlyZSgncGF0aCcpLnJlc29sdmUuXG4gICAgICpcbiAgICAgKiBNdWNoIGZhc3RlciB0aGFuIHBhdGgucmVzb2x2ZSgpIHdoZW4gY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciB0aGUgc2FtZVxuICAgICAqIHBhdGgsIGJlY2F1c2UgdGhlIHJlc29sdmVkIFBhdGggb2JqZWN0cyBhcmUgY2FjaGVkLiAgTXVjaCBzbG93ZXJcbiAgICAgKiBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcmVzb2x2ZVBvc2l4KC4uLnBhdGhzKSB7XG4gICAgICAgIC8vIGZpcnN0IGZpZ3VyZSBvdXQgdGhlIG1pbmltdW0gbnVtYmVyIG9mIHBhdGhzIHdlIGhhdmUgdG8gdGVzdFxuICAgICAgICAvLyB3ZSBhbHdheXMgc3RhcnQgYXQgY3dkLCBidXQgYW55IGFic29sdXRlcyB3aWxsIGJ1bXAgdGhlIHN0YXJ0XG4gICAgICAgIGxldCByID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSBwYXRocy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgcCA9IHBhdGhzW2ldO1xuICAgICAgICAgICAgaWYgKCFwIHx8IHAgPT09ICcuJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHIgPSByID8gYCR7cH0vJHtyfWAgOiBwO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNBYnNvbHV0ZShwKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuI3Jlc29sdmVQb3NpeENhY2hlLmdldChyKTtcbiAgICAgICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY3dkLnJlc29sdmUocikuZnVsbHBhdGhQb3NpeCgpO1xuICAgICAgICB0aGlzLiNyZXNvbHZlUG9zaXhDYWNoZS5zZXQociwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZmluZCB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSBjd2QgdG8gdGhlIHN1cHBsaWVkIHBhdGggc3RyaW5nIG9yIGVudHJ5XG4gICAgICovXG4gICAgcmVsYXRpdmUoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkucmVsYXRpdmUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZmluZCB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSBjd2QgdG8gdGhlIHN1cHBsaWVkIHBhdGggc3RyaW5nIG9yXG4gICAgICogZW50cnksIHVzaW5nIC8gYXMgdGhlIHBhdGggZGVsaW1pdGVyLCBldmVuIG9uIFdpbmRvd3MuXG4gICAgICovXG4gICAgcmVsYXRpdmVQb3NpeChlbnRyeSA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeS5yZWxhdGl2ZVBvc2l4KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgYmFzZW5hbWUgZm9yIHRoZSBwcm92aWRlZCBzdHJpbmcgb3IgUGF0aCBvYmplY3RcbiAgICAgKi9cbiAgICBiYXNlbmFtZShlbnRyeSA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeS5uYW1lO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGRpcm5hbWUgZm9yIHRoZSBwcm92aWRlZCBzdHJpbmcgb3IgUGF0aCBvYmplY3RcbiAgICAgKi9cbiAgICBkaXJuYW1lKGVudHJ5ID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChlbnRyeS5wYXJlbnQgfHwgZW50cnkpLmZ1bGxwYXRoKCk7XG4gICAgfVxuICAgIGFzeW5jIHJlYWRkaXIoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzIH0gPSBvcHRzO1xuICAgICAgICBpZiAoIWVudHJ5LmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcCA9IGF3YWl0IGVudHJ5LnJlYWRkaXIoKTtcbiAgICAgICAgICAgIHJldHVybiB3aXRoRmlsZVR5cGVzID8gcCA6IHAubWFwKGUgPT4gZS5uYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWFkZGlyU3luYyhlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgPSB0cnVlIH0gPSBvcHRzO1xuICAgICAgICBpZiAoIWVudHJ5LmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpdGhGaWxlVHlwZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBlbnRyeS5yZWFkZGlyU3luYygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnJlYWRkaXJTeW5jKCkubWFwKGUgPT4gZS5uYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsIGxzdGF0KCkgb24gdGhlIHN0cmluZyBvciBQYXRoIG9iamVjdCwgYW5kIHVwZGF0ZSBhbGwga25vd25cbiAgICAgKiBpbmZvcm1hdGlvbiB0aGF0IGNhbiBiZSBkZXRlcm1pbmVkLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IHVubGlrZSBgZnMubHN0YXQoKWAsIHRoZSByZXR1cm5lZCB2YWx1ZSBkb2VzIG5vdCBjb250YWluIHNvbWVcbiAgICAgKiBpbmZvcm1hdGlvbiwgc3VjaCBhcyBgbW9kZWAsIGBkZXZgLCBgbmxpbmtgLCBhbmQgYGlub2AuICBJZiB0aGF0XG4gICAgICogaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQsIHlvdSB3aWxsIG5lZWQgdG8gY2FsbCBgZnMubHN0YXRgIHlvdXJzZWxmLlxuICAgICAqXG4gICAgICogSWYgdGhlIFBhdGggcmVmZXJzIHRvIGEgbm9uZXhpc3RlbnQgZmlsZSwgb3IgaWYgdGhlIGxzdGF0IGNhbGwgZmFpbHMgZm9yXG4gICAgICogYW55IHJlYXNvbiwgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuICBPdGhlcndpc2UgdGhlIHVwZGF0ZWQgUGF0aCBvYmplY3QgaXNcbiAgICAgKiByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdHMgYXJlIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dCBvZiBkYXRlIGlmIHRoZSBmaWxlc3lzdGVtIGlzXG4gICAgICogbXV0YXRlZC5cbiAgICAgKi9cbiAgICBhc3luYyBsc3RhdChlbnRyeSA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeS5sc3RhdCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBzeW5jaHJvbm91cyB7QGxpbmsgUGF0aFNjdXJyeUJhc2UubHN0YXR9XG4gICAgICovXG4gICAgbHN0YXRTeW5jKGVudHJ5ID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5LmxzdGF0U3luYygpO1xuICAgIH1cbiAgICBhc3luYyByZWFkbGluayhlbnRyeSA9IHRoaXMuY3dkLCB7IHdpdGhGaWxlVHlwZXMgfSA9IHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogZmFsc2UsXG4gICAgfSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICB3aXRoRmlsZVR5cGVzID0gZW50cnkud2l0aEZpbGVUeXBlcztcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZSA9IGF3YWl0IGVudHJ5LnJlYWRsaW5rKCk7XG4gICAgICAgIHJldHVybiB3aXRoRmlsZVR5cGVzID8gZSA6IGU/LmZ1bGxwYXRoKCk7XG4gICAgfVxuICAgIHJlYWRsaW5rU3luYyhlbnRyeSA9IHRoaXMuY3dkLCB7IHdpdGhGaWxlVHlwZXMgfSA9IHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogZmFsc2UsXG4gICAgfSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICB3aXRoRmlsZVR5cGVzID0gZW50cnkud2l0aEZpbGVUeXBlcztcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZSA9IGVudHJ5LnJlYWRsaW5rU3luYygpO1xuICAgICAgICByZXR1cm4gd2l0aEZpbGVUeXBlcyA/IGUgOiBlPy5mdWxscGF0aCgpO1xuICAgIH1cbiAgICBhc3luYyByZWFscGF0aChlbnRyeSA9IHRoaXMuY3dkLCB7IHdpdGhGaWxlVHlwZXMgfSA9IHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogZmFsc2UsXG4gICAgfSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICB3aXRoRmlsZVR5cGVzID0gZW50cnkud2l0aEZpbGVUeXBlcztcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZSA9IGF3YWl0IGVudHJ5LnJlYWxwYXRoKCk7XG4gICAgICAgIHJldHVybiB3aXRoRmlsZVR5cGVzID8gZSA6IGU/LmZ1bGxwYXRoKCk7XG4gICAgfVxuICAgIHJlYWxwYXRoU3luYyhlbnRyeSA9IHRoaXMuY3dkLCB7IHdpdGhGaWxlVHlwZXMgfSA9IHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogZmFsc2UsXG4gICAgfSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICB3aXRoRmlsZVR5cGVzID0gZW50cnkud2l0aEZpbGVUeXBlcztcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZSA9IGVudHJ5LnJlYWxwYXRoU3luYygpO1xuICAgICAgICByZXR1cm4gd2l0aEZpbGVUeXBlcyA/IGUgOiBlPy5mdWxscGF0aCgpO1xuICAgIH1cbiAgICBhc3luYyB3YWxrKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyA9IHRydWUsIGZvbGxvdyA9IGZhbHNlLCBmaWx0ZXIsIHdhbGtGaWx0ZXIsIH0gPSBvcHRzO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCh3aXRoRmlsZVR5cGVzID8gZW50cnkgOiBlbnRyeS5mdWxscGF0aCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXJzID0gbmV3IFNldCgpO1xuICAgICAgICBjb25zdCB3YWxrID0gKGRpciwgY2IpID0+IHtcbiAgICAgICAgICAgIGRpcnMuYWRkKGRpcik7XG4gICAgICAgICAgICBkaXIucmVhZGRpckNCKChlciwgZW50cmllcykgPT4ge1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgIGlmIChlcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2IoZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgIGxldCBsZW4gPSBlbnRyaWVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAoIWxlbilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC0tbGVuID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh3aXRoRmlsZVR5cGVzID8gZSA6IGUuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGxvdyAmJiBlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucmVhbHBhdGgoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHIgPT4gKHI/LmlzVW5rbm93bigpID8gci5sc3RhdCgpIDogcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ociA9PiByPy5zaG91bGRXYWxrKGRpcnMsIHdhbGtGaWx0ZXIpID8gd2FsayhyLCBuZXh0KSA6IG5leHQoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5zaG91bGRXYWxrKGRpcnMsIHdhbGtGaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FsayhlLCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRydWUpOyAvLyB6YWxnb29vb29vb1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzdGFydCA9IGVudHJ5O1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgICAgICB3YWxrKHN0YXJ0LCBlciA9PiB7XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgaWYgKGVyKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqKGVyKTtcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgIHJlcyhyZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgd2Fsa1N5bmMoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSwgZm9sbG93ID0gZmFsc2UsIGZpbHRlciwgd2Fsa0ZpbHRlciwgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGVudHJ5KSkge1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHdpdGhGaWxlVHlwZXMgPyBlbnRyeSA6IGVudHJ5LmZ1bGxwYXRoKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpcnMgPSBuZXcgU2V0KFtlbnRyeV0pO1xuICAgICAgICBmb3IgKGNvbnN0IGRpciBvZiBkaXJzKSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gZGlyLnJlYWRkaXJTeW5jKCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2god2l0aEZpbGVUeXBlcyA/IGUgOiBlLmZ1bGxwYXRoKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgciA9IGU7XG4gICAgICAgICAgICAgICAgaWYgKGUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShmb2xsb3cgJiYgKHIgPSBlLnJlYWxwYXRoU3luYygpKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHIuaXNVbmtub3duKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByLmxzdGF0U3luYygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoci5zaG91bGRXYWxrKGRpcnMsIHdhbGtGaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcnMuYWRkKHIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3VwcG9ydCBmb3IgYGZvciBhd2FpdGBcbiAgICAgKlxuICAgICAqIEFsaWFzIGZvciB7QGxpbmsgUGF0aFNjdXJyeUJhc2UuaXRlcmF0ZX1cbiAgICAgKlxuICAgICAqIE5vdGU6IEFzIG9mIE5vZGUgMTksIHRoaXMgaXMgdmVyeSBzbG93LCBjb21wYXJlZCB0byBvdGhlciBtZXRob2RzIG9mXG4gICAgICogd2Fsa2luZy4gIENvbnNpZGVyIHVzaW5nIHtAbGluayBQYXRoU2N1cnJ5QmFzZS5zdHJlYW19IGlmIG1lbW9yeSBvdmVyaGVhZFxuICAgICAqIGFuZCBiYWNrcHJlc3N1cmUgYXJlIGNvbmNlcm5zLCBvciB7QGxpbmsgUGF0aFNjdXJyeUJhc2Uud2Fsa30gaWYgbm90LlxuICAgICAqL1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZXJhdGUoKTtcbiAgICB9XG4gICAgaXRlcmF0ZShlbnRyeSA9IHRoaXMuY3dkLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgLy8gaXRlcmF0aW5nIGFzeW5jIG92ZXIgdGhlIHN0cmVhbSBpcyBzaWduaWZpY2FudGx5IG1vcmUgcGVyZm9ybWFudCxcbiAgICAgICAgLy8gZXNwZWNpYWxseSBpbiB0aGUgd2FybS1jYWNoZSBzY2VuYXJpbywgYmVjYXVzZSBpdCBidWZmZXJzIHVwIGRpcmVjdG9yeVxuICAgICAgICAvLyBlbnRyaWVzIGluIHRoZSBiYWNrZ3JvdW5kIGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgYSB5aWVsZCBmb3IgZWFjaCBvbmUuXG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtKGVudHJ5LCBvcHRpb25zKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXRlcmF0aW5nIG92ZXIgYSBQYXRoU2N1cnJ5IHBlcmZvcm1zIGEgc3luY2hyb25vdXMgd2Fsay5cbiAgICAgKlxuICAgICAqIEFsaWFzIGZvciB7QGxpbmsgUGF0aFNjdXJyeUJhc2UuaXRlcmF0ZVN5bmN9XG4gICAgICovXG4gICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZXJhdGVTeW5jKCk7XG4gICAgfVxuICAgICppdGVyYXRlU3luYyhlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgPSB0cnVlLCBmb2xsb3cgPSBmYWxzZSwgZmlsdGVyLCB3YWxrRmlsdGVyLCB9ID0gb3B0cztcbiAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGVudHJ5KSkge1xuICAgICAgICAgICAgeWllbGQgd2l0aEZpbGVUeXBlcyA/IGVudHJ5IDogZW50cnkuZnVsbHBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXJzID0gbmV3IFNldChbZW50cnldKTtcbiAgICAgICAgZm9yIChjb25zdCBkaXIgb2YgZGlycykge1xuICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IGRpci5yZWFkZGlyU3luYygpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgd2l0aEZpbGVUeXBlcyA/IGUgOiBlLmZ1bGxwYXRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCByID0gZTtcbiAgICAgICAgICAgICAgICBpZiAoZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGZvbGxvdyAmJiAociA9IGUucmVhbHBhdGhTeW5jKCkpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoci5pc1Vua25vd24oKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHIubHN0YXRTeW5jKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyLnNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlycy5hZGQocik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHN0cmVhbShlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgPSB0cnVlLCBmb2xsb3cgPSBmYWxzZSwgZmlsdGVyLCB3YWxrRmlsdGVyLCB9ID0gb3B0cztcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IG5ldyBNaW5pcGFzcyh7IG9iamVjdE1vZGU6IHRydWUgfSk7XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHJlc3VsdHMud3JpdGUod2l0aEZpbGVUeXBlcyA/IGVudHJ5IDogZW50cnkuZnVsbHBhdGgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgY29uc3QgcXVldWUgPSBbZW50cnldO1xuICAgICAgICBsZXQgcHJvY2Vzc2luZyA9IDA7XG4gICAgICAgIGNvbnN0IHByb2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICB3aGlsZSAoIXBhdXNlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpciA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFkaXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NpbmcgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2Nlc3NpbmcrKztcbiAgICAgICAgICAgICAgICBkaXJzLmFkZChkaXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9uUmVhZGRpciA9IChlciwgZW50cmllcywgZGlkUmVhbHBhdGhzID0gZmFsc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzLmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9sbG93ICYmICFkaWRSZWFscGF0aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVhbHBhdGgoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHIpID0+IHI/LmlzVW5rbm93bigpID8gci5sc3RhdCgpIDogcikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9taXNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiBvblJlYWRkaXIobnVsbCwgZW50cmllcywgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKGUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cy53cml0ZSh3aXRoRmlsZVR5cGVzID8gZSA6IGUuZnVsbHBhdGgoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZy0tO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IGUucmVhbHBhdGhDYWNoZWQoKSB8fCBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLnB1c2gocik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhdXNlZCAmJiAhcmVzdWx0cy5mbG93aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLm9uY2UoJ2RyYWluJywgcHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gemFsZ28gY29udGFpbm1lbnRcbiAgICAgICAgICAgICAgICBsZXQgc3luYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZGlyLnJlYWRkaXJDQihvblJlYWRkaXIsIHRydWUpO1xuICAgICAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcHJvY2VzcygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgc3RyZWFtU3luYyhlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgPSB0cnVlLCBmb2xsb3cgPSBmYWxzZSwgZmlsdGVyLCB3YWxrRmlsdGVyLCB9ID0gb3B0cztcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IG5ldyBNaW5pcGFzcyh7IG9iamVjdE1vZGU6IHRydWUgfSk7XG4gICAgICAgIGNvbnN0IGRpcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHJlc3VsdHMud3JpdGUod2l0aEZpbGVUeXBlcyA/IGVudHJ5IDogZW50cnkuZnVsbHBhdGgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVldWUgPSBbZW50cnldO1xuICAgICAgICBsZXQgcHJvY2Vzc2luZyA9IDA7XG4gICAgICAgIGNvbnN0IHByb2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICB3aGlsZSAoIXBhdXNlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpciA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFkaXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NpbmcgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2Nlc3NpbmcrKztcbiAgICAgICAgICAgICAgICBkaXJzLmFkZChkaXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBkaXIucmVhZGRpclN5bmMoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cy53cml0ZSh3aXRoRmlsZVR5cGVzID8gZSA6IGUuZnVsbHBhdGgoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2Nlc3NpbmctLTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgciA9IGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGZvbGxvdyAmJiAociA9IGUucmVhbHBhdGhTeW5jKCkpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLmlzVW5rbm93bigpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIubHN0YXRTeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHIuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaChyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXVzZWQgJiYgIXJlc3VsdHMuZmxvd2luZylcbiAgICAgICAgICAgICAgICByZXN1bHRzLm9uY2UoJ2RyYWluJywgcHJvY2Vzcyk7XG4gICAgICAgIH07XG4gICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIGNoZGlyKHBhdGggPSB0aGlzLmN3ZCkge1xuICAgICAgICBjb25zdCBvbGRDd2QgPSB0aGlzLmN3ZDtcbiAgICAgICAgdGhpcy5jd2QgPSB0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycgPyB0aGlzLmN3ZC5yZXNvbHZlKHBhdGgpIDogcGF0aDtcbiAgICAgICAgdGhpcy5jd2Rbc2V0QXNDd2RdKG9sZEN3ZCk7XG4gICAgfVxufVxuLyoqXG4gKiBXaW5kb3dzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBQYXRoU2N1cnJ5QmFzZX1cbiAqXG4gKiBEZWZhdWx0cyB0byBjYXNlIGluc2Vuc2l0dmUsIHVzZXMgYCdcXFxcJ2AgdG8gZ2VuZXJhdGUgcGF0aCBzdHJpbmdzLiAgVXNlc1xuICoge0BsaW5rIFBhdGhXaW4zMn0gZm9yIFBhdGggb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhdGhTY3VycnlXaW4zMiBleHRlbmRzIFBhdGhTY3VycnlCYXNlIHtcbiAgICAvKipcbiAgICAgKiBzZXBhcmF0b3IgZm9yIGdlbmVyYXRpbmcgcGF0aCBzdHJpbmdzXG4gICAgICovXG4gICAgc2VwID0gJ1xcXFwnO1xuICAgIGNvbnN0cnVjdG9yKGN3ZCA9IHByb2Nlc3MuY3dkKCksIG9wdHMgPSB7fSkge1xuICAgICAgICBjb25zdCB7IG5vY2FzZSA9IHRydWUgfSA9IG9wdHM7XG4gICAgICAgIHN1cGVyKGN3ZCwgd2luMzIsICdcXFxcJywgeyAuLi5vcHRzLCBub2Nhc2UgfSk7XG4gICAgICAgIHRoaXMubm9jYXNlID0gbm9jYXNlO1xuICAgICAgICBmb3IgKGxldCBwID0gdGhpcy5jd2Q7IHA7IHAgPSBwLnBhcmVudCkge1xuICAgICAgICAgICAgcC5ub2Nhc2UgPSB0aGlzLm5vY2FzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwYXJzZVJvb3RQYXRoKGRpcikge1xuICAgICAgICAvLyBpZiB0aGUgcGF0aCBzdGFydHMgd2l0aCBhIHNpbmdsZSBzZXBhcmF0b3IsIGl0J3Mgbm90IGEgVU5DLCBhbmQgd2UnbGxcbiAgICAgICAgLy8ganVzdCBnZXQgc2VwYXJhdG9yIGFzIHRoZSByb290LCBhbmQgZHJpdmVGcm9tVU5DIHdpbGwgcmV0dXJuIFxcXG4gICAgICAgIC8vIEluIHRoYXQgY2FzZSwgbW91bnQgXFwgb24gdGhlIHJvb3QgZnJvbSB0aGUgY3dkLlxuICAgICAgICByZXR1cm4gd2luMzIucGFyc2UoZGlyKS5yb290LnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG5ld1Jvb3QoZnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXRoV2luMzIodGhpcy5yb290UGF0aCwgSUZESVIsIHVuZGVmaW5lZCwgdGhpcy5yb290cywgdGhpcy5ub2Nhc2UsIHRoaXMuY2hpbGRyZW5DYWNoZSgpLCB7IGZzIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgcGF0aCBzdHJpbmcgaXMgYW4gYWJzb2x1dGUgcGF0aFxuICAgICAqL1xuICAgIGlzQWJzb2x1dGUocCkge1xuICAgICAgICByZXR1cm4gKHAuc3RhcnRzV2l0aCgnLycpIHx8IHAuc3RhcnRzV2l0aCgnXFxcXCcpIHx8IC9eW2Etel06KFxcL3xcXFxcKS9pLnRlc3QocCkpO1xuICAgIH1cbn1cbi8qKlxuICoge0BsaW5rIFBhdGhTY3VycnlCYXNlfSBpbXBsZW1lbnRhdGlvbiBmb3IgYWxsIHBvc2l4IHN5c3RlbXMgb3RoZXIgdGhhbiBEYXJ3aW4uXG4gKlxuICogRGVmYXVsdHMgdG8gY2FzZS1zZW5zaXRpdmUgbWF0Y2hpbmcsIHVzZXMgYCcvJ2AgdG8gZ2VuZXJhdGUgcGF0aCBzdHJpbmdzLlxuICpcbiAqIFVzZXMge0BsaW5rIFBhdGhQb3NpeH0gZm9yIFBhdGggb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhdGhTY3VycnlQb3NpeCBleHRlbmRzIFBhdGhTY3VycnlCYXNlIHtcbiAgICAvKipcbiAgICAgKiBzZXBhcmF0b3IgZm9yIGdlbmVyYXRpbmcgcGF0aCBzdHJpbmdzXG4gICAgICovXG4gICAgc2VwID0gJy8nO1xuICAgIGNvbnN0cnVjdG9yKGN3ZCA9IHByb2Nlc3MuY3dkKCksIG9wdHMgPSB7fSkge1xuICAgICAgICBjb25zdCB7IG5vY2FzZSA9IGZhbHNlIH0gPSBvcHRzO1xuICAgICAgICBzdXBlcihjd2QsIHBvc2l4LCAnLycsIHsgLi4ub3B0cywgbm9jYXNlIH0pO1xuICAgICAgICB0aGlzLm5vY2FzZSA9IG5vY2FzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcGFyc2VSb290UGF0aChfZGlyKSB7XG4gICAgICAgIHJldHVybiAnLyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG5ld1Jvb3QoZnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXRoUG9zaXgodGhpcy5yb290UGF0aCwgSUZESVIsIHVuZGVmaW5lZCwgdGhpcy5yb290cywgdGhpcy5ub2Nhc2UsIHRoaXMuY2hpbGRyZW5DYWNoZSgpLCB7IGZzIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgcGF0aCBzdHJpbmcgaXMgYW4gYWJzb2x1dGUgcGF0aFxuICAgICAqL1xuICAgIGlzQWJzb2x1dGUocCkge1xuICAgICAgICByZXR1cm4gcC5zdGFydHNXaXRoKCcvJyk7XG4gICAgfVxufVxuLyoqXG4gKiB7QGxpbmsgUGF0aFNjdXJyeUJhc2V9IGltcGxlbWVudGF0aW9uIGZvciBEYXJ3aW4gKG1hY09TKSBzeXN0ZW1zLlxuICpcbiAqIERlZmF1bHRzIHRvIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2hpbmcsIHVzZXMgYCcvJ2AgZm9yIGdlbmVyYXRpbmcgcGF0aFxuICogc3RyaW5ncy5cbiAqXG4gKiBVc2VzIHtAbGluayBQYXRoUG9zaXh9IGZvciBQYXRoIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXRoU2N1cnJ5RGFyd2luIGV4dGVuZHMgUGF0aFNjdXJyeVBvc2l4IHtcbiAgICBjb25zdHJ1Y3Rvcihjd2QgPSBwcm9jZXNzLmN3ZCgpLCBvcHRzID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBub2Nhc2UgPSB0cnVlIH0gPSBvcHRzO1xuICAgICAgICBzdXBlcihjd2QsIHsgLi4ub3B0cywgbm9jYXNlIH0pO1xuICAgIH1cbn1cbi8qKlxuICogRGVmYXVsdCB7QGxpbmsgUGF0aEJhc2V9IGltcGxlbWVudGF0aW9uIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS5cbiAqXG4gKiB7QGxpbmsgUGF0aFdpbjMyfSBvbiBXaW5kb3dzIHN5c3RlbXMsIHtAbGluayBQYXRoUG9zaXh9IG9uIGFsbCBvdGhlcnMuXG4gKi9cbmV4cG9ydCBjb25zdCBQYXRoID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IFBhdGhXaW4zMiA6IFBhdGhQb3NpeDtcbi8qKlxuICogRGVmYXVsdCB7QGxpbmsgUGF0aFNjdXJyeUJhc2V9IGltcGxlbWVudGF0aW9uIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS5cbiAqXG4gKiB7QGxpbmsgUGF0aFNjdXJyeVdpbjMyfSBvbiBXaW5kb3dzIHN5c3RlbXMsIHtAbGluayBQYXRoU2N1cnJ5RGFyd2lufSBvblxuICogRGFyd2luIChtYWNPUykgc3lzdGVtcywge0BsaW5rIFBhdGhTY3VycnlQb3NpeH0gb24gYWxsIG90aGVycy5cbiAqL1xuZXhwb3J0IGNvbnN0IFBhdGhTY3VycnkgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gUGF0aFNjdXJyeVdpbjMyXG4gICAgOiBwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJyA/IFBhdGhTY3VycnlEYXJ3aW5cbiAgICAgICAgOiBQYXRoU2N1cnJ5UG9zaXg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgImNvbnN0IHByb2MgPSB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2Vzc1xuICAgID8gcHJvY2Vzc1xuICAgIDoge1xuICAgICAgICBzdGRvdXQ6IG51bGwsXG4gICAgICAgIHN0ZGVycjogbnVsbCxcbiAgICB9O1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnbm9kZTpldmVudHMnO1xuaW1wb3J0IFN0cmVhbSBmcm9tICdub2RlOnN0cmVhbSc7XG5pbXBvcnQgeyBTdHJpbmdEZWNvZGVyIH0gZnJvbSAnbm9kZTpzdHJpbmdfZGVjb2Rlcic7XG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBhcmd1bWVudCBpcyBhIE1pbmlwYXNzIHN0cmVhbSwgTm9kZSBzdHJlYW0sIG9yIHNvbWV0aGluZ1xuICogZWxzZSB0aGF0IE1pbmlwYXNzIGNhbiBpbnRlcmFjdCB3aXRoLlxuICovXG5leHBvcnQgY29uc3QgaXNTdHJlYW0gPSAocykgPT4gISFzICYmXG4gICAgdHlwZW9mIHMgPT09ICdvYmplY3QnICYmXG4gICAgKHMgaW5zdGFuY2VvZiBNaW5pcGFzcyB8fFxuICAgICAgICBzIGluc3RhbmNlb2YgU3RyZWFtIHx8XG4gICAgICAgIGlzUmVhZGFibGUocykgfHxcbiAgICAgICAgaXNXcml0YWJsZShzKSk7XG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBhcmd1bWVudCBpcyBhIHZhbGlkIHtAbGluayBNaW5pcGFzcy5SZWFkYWJsZX1cbiAqL1xuZXhwb3J0IGNvbnN0IGlzUmVhZGFibGUgPSAocykgPT4gISFzICYmXG4gICAgdHlwZW9mIHMgPT09ICdvYmplY3QnICYmXG4gICAgcyBpbnN0YW5jZW9mIEV2ZW50RW1pdHRlciAmJlxuICAgIHR5cGVvZiBzLnBpcGUgPT09ICdmdW5jdGlvbicgJiZcbiAgICAvLyBub2RlIGNvcmUgV3JpdGFibGUgc3RyZWFtcyBoYXZlIGEgcGlwZSgpIG1ldGhvZCwgYnV0IGl0IHRocm93c1xuICAgIHMucGlwZSAhPT0gU3RyZWFtLldyaXRhYmxlLnByb3RvdHlwZS5waXBlO1xuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYSB2YWxpZCB7QGxpbmsgTWluaXBhc3MuV3JpdGFibGV9XG4gKi9cbmV4cG9ydCBjb25zdCBpc1dyaXRhYmxlID0gKHMpID0+ICEhcyAmJlxuICAgIHR5cGVvZiBzID09PSAnb2JqZWN0JyAmJlxuICAgIHMgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIgJiZcbiAgICB0eXBlb2Ygcy53cml0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBzLmVuZCA9PT0gJ2Z1bmN0aW9uJztcbmNvbnN0IEVPRiA9IFN5bWJvbCgnRU9GJyk7XG5jb25zdCBNQVlCRV9FTUlUX0VORCA9IFN5bWJvbCgnbWF5YmVFbWl0RW5kJyk7XG5jb25zdCBFTUlUVEVEX0VORCA9IFN5bWJvbCgnZW1pdHRlZEVuZCcpO1xuY29uc3QgRU1JVFRJTkdfRU5EID0gU3ltYm9sKCdlbWl0dGluZ0VuZCcpO1xuY29uc3QgRU1JVFRFRF9FUlJPUiA9IFN5bWJvbCgnZW1pdHRlZEVycm9yJyk7XG5jb25zdCBDTE9TRUQgPSBTeW1ib2woJ2Nsb3NlZCcpO1xuY29uc3QgUkVBRCA9IFN5bWJvbCgncmVhZCcpO1xuY29uc3QgRkxVU0ggPSBTeW1ib2woJ2ZsdXNoJyk7XG5jb25zdCBGTFVTSENIVU5LID0gU3ltYm9sKCdmbHVzaENodW5rJyk7XG5jb25zdCBFTkNPRElORyA9IFN5bWJvbCgnZW5jb2RpbmcnKTtcbmNvbnN0IERFQ09ERVIgPSBTeW1ib2woJ2RlY29kZXInKTtcbmNvbnN0IEZMT1dJTkcgPSBTeW1ib2woJ2Zsb3dpbmcnKTtcbmNvbnN0IFBBVVNFRCA9IFN5bWJvbCgncGF1c2VkJyk7XG5jb25zdCBSRVNVTUUgPSBTeW1ib2woJ3Jlc3VtZScpO1xuY29uc3QgQlVGRkVSID0gU3ltYm9sKCdidWZmZXInKTtcbmNvbnN0IFBJUEVTID0gU3ltYm9sKCdwaXBlcycpO1xuY29uc3QgQlVGRkVSTEVOR1RIID0gU3ltYm9sKCdidWZmZXJMZW5ndGgnKTtcbmNvbnN0IEJVRkZFUlBVU0ggPSBTeW1ib2woJ2J1ZmZlclB1c2gnKTtcbmNvbnN0IEJVRkZFUlNISUZUID0gU3ltYm9sKCdidWZmZXJTaGlmdCcpO1xuY29uc3QgT0JKRUNUTU9ERSA9IFN5bWJvbCgnb2JqZWN0TW9kZScpO1xuLy8gaW50ZXJuYWwgZXZlbnQgd2hlbiBzdHJlYW0gaXMgZGVzdHJveWVkXG5jb25zdCBERVNUUk9ZRUQgPSBTeW1ib2woJ2Rlc3Ryb3llZCcpO1xuLy8gaW50ZXJuYWwgZXZlbnQgd2hlbiBzdHJlYW0gaGFzIGFuIGVycm9yXG5jb25zdCBFUlJPUiA9IFN5bWJvbCgnZXJyb3InKTtcbmNvbnN0IEVNSVREQVRBID0gU3ltYm9sKCdlbWl0RGF0YScpO1xuY29uc3QgRU1JVEVORCA9IFN5bWJvbCgnZW1pdEVuZCcpO1xuY29uc3QgRU1JVEVORDIgPSBTeW1ib2woJ2VtaXRFbmQyJyk7XG5jb25zdCBBU1lOQyA9IFN5bWJvbCgnYXN5bmMnKTtcbmNvbnN0IEFCT1JUID0gU3ltYm9sKCdhYm9ydCcpO1xuY29uc3QgQUJPUlRFRCA9IFN5bWJvbCgnYWJvcnRlZCcpO1xuY29uc3QgU0lHTkFMID0gU3ltYm9sKCdzaWduYWwnKTtcbmNvbnN0IERBVEFMSVNURU5FUlMgPSBTeW1ib2woJ2RhdGFMaXN0ZW5lcnMnKTtcbmNvbnN0IERJU0NBUkRFRCA9IFN5bWJvbCgnZGlzY2FyZGVkJyk7XG5jb25zdCBkZWZlciA9IChmbikgPT4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmbik7XG5jb25zdCBub2RlZmVyID0gKGZuKSA9PiBmbigpO1xuY29uc3QgaXNFbmRpc2ggPSAoZXYpID0+IGV2ID09PSAnZW5kJyB8fCBldiA9PT0gJ2ZpbmlzaCcgfHwgZXYgPT09ICdwcmVmaW5pc2gnO1xuY29uc3QgaXNBcnJheUJ1ZmZlckxpa2UgPSAoYikgPT4gYiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8XG4gICAgKCEhYiAmJlxuICAgICAgICB0eXBlb2YgYiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgYi5jb25zdHJ1Y3RvciAmJlxuICAgICAgICBiLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdBcnJheUJ1ZmZlcicgJiZcbiAgICAgICAgYi5ieXRlTGVuZ3RoID49IDApO1xuY29uc3QgaXNBcnJheUJ1ZmZlclZpZXcgPSAoYikgPT4gIUJ1ZmZlci5pc0J1ZmZlcihiKSAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcoYik7XG4vKipcbiAqIEludGVybmFsIGNsYXNzIHJlcHJlc2VudGluZyBhIHBpcGUgdG8gYSBkZXN0aW5hdGlvbiBzdHJlYW0uXG4gKlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIFBpcGUge1xuICAgIHNyYztcbiAgICBkZXN0O1xuICAgIG9wdHM7XG4gICAgb25kcmFpbjtcbiAgICBjb25zdHJ1Y3RvcihzcmMsIGRlc3QsIG9wdHMpIHtcbiAgICAgICAgdGhpcy5zcmMgPSBzcmM7XG4gICAgICAgIHRoaXMuZGVzdCA9IGRlc3Q7XG4gICAgICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgICAgIHRoaXMub25kcmFpbiA9ICgpID0+IHNyY1tSRVNVTUVdKCk7XG4gICAgICAgIHRoaXMuZGVzdC5vbignZHJhaW4nLCB0aGlzLm9uZHJhaW4pO1xuICAgIH1cbiAgICB1bnBpcGUoKSB7XG4gICAgICAgIHRoaXMuZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCB0aGlzLm9uZHJhaW4pO1xuICAgIH1cbiAgICAvLyBvbmx5IGhlcmUgZm9yIHRoZSBwcm90b3R5cGVcbiAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICBwcm94eUVycm9ycyhfZXIpIHsgfVxuICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgZW5kKCkge1xuICAgICAgICB0aGlzLnVucGlwZSgpO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmVuZClcbiAgICAgICAgICAgIHRoaXMuZGVzdC5lbmQoKTtcbiAgICB9XG59XG4vKipcbiAqIEludGVybmFsIGNsYXNzIHJlcHJlc2VudGluZyBhIHBpcGUgdG8gYSBkZXN0aW5hdGlvbiBzdHJlYW0gd2hlcmVcbiAqIGVycm9ycyBhcmUgcHJveGllZC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgUGlwZVByb3h5RXJyb3JzIGV4dGVuZHMgUGlwZSB7XG4gICAgdW5waXBlKCkge1xuICAgICAgICB0aGlzLnNyYy5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCB0aGlzLnByb3h5RXJyb3JzKTtcbiAgICAgICAgc3VwZXIudW5waXBlKCk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHNyYywgZGVzdCwgb3B0cykge1xuICAgICAgICBzdXBlcihzcmMsIGRlc3QsIG9wdHMpO1xuICAgICAgICB0aGlzLnByb3h5RXJyb3JzID0gKGVyKSA9PiB0aGlzLmRlc3QuZW1pdCgnZXJyb3InLCBlcik7XG4gICAgICAgIHNyYy5vbignZXJyb3InLCB0aGlzLnByb3h5RXJyb3JzKTtcbiAgICB9XG59XG5jb25zdCBpc09iamVjdE1vZGVPcHRpb25zID0gKG8pID0+ICEhby5vYmplY3RNb2RlO1xuY29uc3QgaXNFbmNvZGluZ09wdGlvbnMgPSAobykgPT4gIW8ub2JqZWN0TW9kZSAmJiAhIW8uZW5jb2RpbmcgJiYgby5lbmNvZGluZyAhPT0gJ2J1ZmZlcic7XG4vKipcbiAqIE1haW4gZXhwb3J0LCB0aGUgTWluaXBhc3MgY2xhc3NcbiAqXG4gKiBgUlR5cGVgIGlzIHRoZSB0eXBlIG9mIGRhdGEgZW1pdHRlZCwgZGVmYXVsdHMgdG8gQnVmZmVyXG4gKlxuICogYFdUeXBlYCBpcyB0aGUgdHlwZSBvZiBkYXRhIHRvIGJlIHdyaXR0ZW4sIGlmIFJUeXBlIGlzIGJ1ZmZlciBvciBzdHJpbmcsXG4gKiB0aGVuIGFueSB7QGxpbmsgTWluaXBhc3MuQ29udGlndW91c0RhdGF9IGlzIGFsbG93ZWQuXG4gKlxuICogYEV2ZW50c2AgaXMgdGhlIHNldCBvZiBldmVudCBoYW5kbGVyIHNpZ25hdHVyZXMgdGhhdCB0aGlzIG9iamVjdFxuICogd2lsbCBlbWl0LCBzZWUge0BsaW5rIE1pbmlwYXNzLkV2ZW50c31cbiAqL1xuZXhwb3J0IGNsYXNzIE1pbmlwYXNzIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgICBbRkxPV0lOR10gPSBmYWxzZTtcbiAgICBbUEFVU0VEXSA9IGZhbHNlO1xuICAgIFtQSVBFU10gPSBbXTtcbiAgICBbQlVGRkVSXSA9IFtdO1xuICAgIFtPQkpFQ1RNT0RFXTtcbiAgICBbRU5DT0RJTkddO1xuICAgIFtBU1lOQ107XG4gICAgW0RFQ09ERVJdO1xuICAgIFtFT0ZdID0gZmFsc2U7XG4gICAgW0VNSVRURURfRU5EXSA9IGZhbHNlO1xuICAgIFtFTUlUVElOR19FTkRdID0gZmFsc2U7XG4gICAgW0NMT1NFRF0gPSBmYWxzZTtcbiAgICBbRU1JVFRFRF9FUlJPUl0gPSBudWxsO1xuICAgIFtCVUZGRVJMRU5HVEhdID0gMDtcbiAgICBbREVTVFJPWUVEXSA9IGZhbHNlO1xuICAgIFtTSUdOQUxdO1xuICAgIFtBQk9SVEVEXSA9IGZhbHNlO1xuICAgIFtEQVRBTElTVEVORVJTXSA9IDA7XG4gICAgW0RJU0NBUkRFRF0gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBzdHJlYW0gY2FuIGJlIHdyaXR0ZW5cbiAgICAgKi9cbiAgICB3cml0YWJsZSA9IHRydWU7XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgc3RyZWFtIGNhbiBiZSByZWFkXG4gICAgICovXG4gICAgcmVhZGFibGUgPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIElmIGBSVHlwZWAgaXMgQnVmZmVyLCB0aGVuIG9wdGlvbnMgZG8gbm90IG5lZWQgdG8gYmUgcHJvdmlkZWQuXG4gICAgICogT3RoZXJ3aXNlLCBhbiBvcHRpb25zIG9iamVjdCBtdXN0IGJlIHByb3ZpZGVkIHRvIHNwZWNpZnkgZWl0aGVyXG4gICAgICoge0BsaW5rIE1pbmlwYXNzLlNoYXJlZE9wdGlvbnMub2JqZWN0TW9kZX0gb3JcbiAgICAgKiB7QGxpbmsgTWluaXBhc3MuU2hhcmVkT3B0aW9ucy5lbmNvZGluZ30sIGFzIGFwcHJvcHJpYXRlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChhcmdzWzBdIHx8XG4gICAgICAgICAgICB7fSk7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGlmIChvcHRpb25zLm9iamVjdE1vZGUgJiYgdHlwZW9mIG9wdGlvbnMuZW5jb2RpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFbmNvZGluZyBhbmQgb2JqZWN0TW9kZSBtYXkgbm90IGJlIHVzZWQgdG9nZXRoZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNPYmplY3RNb2RlT3B0aW9ucyhvcHRpb25zKSkge1xuICAgICAgICAgICAgdGhpc1tPQkpFQ1RNT0RFXSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzW0VOQ09ESU5HXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNFbmNvZGluZ09wdGlvbnMob3B0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXNbRU5DT0RJTkddID0gb3B0aW9ucy5lbmNvZGluZztcbiAgICAgICAgICAgIHRoaXNbT0JKRUNUTU9ERV0gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXNbT0JKRUNUTU9ERV0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXNbRU5DT0RJTkddID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzW0FTWU5DXSA9ICEhb3B0aW9ucy5hc3luYztcbiAgICAgICAgdGhpc1tERUNPREVSXSA9IHRoaXNbRU5DT0RJTkddXG4gICAgICAgICAgICA/IG5ldyBTdHJpbmdEZWNvZGVyKHRoaXNbRU5DT0RJTkddKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAvL0B0cy1pZ25vcmUgLSBwcml2YXRlIG9wdGlvbiBmb3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZGVidWdFeHBvc2VCdWZmZXIgPT09IHRydWUpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYnVmZmVyJywgeyBnZXQ6ICgpID0+IHRoaXNbQlVGRkVSXSB9KTtcbiAgICAgICAgfVxuICAgICAgICAvL0B0cy1pZ25vcmUgLSBwcml2YXRlIG9wdGlvbiBmb3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZGVidWdFeHBvc2VQaXBlcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdwaXBlcycsIHsgZ2V0OiAoKSA9PiB0aGlzW1BJUEVTXSB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHNpZ25hbCB9ID0gb3B0aW9ucztcbiAgICAgICAgaWYgKHNpZ25hbCkge1xuICAgICAgICAgICAgdGhpc1tTSUdOQUxdID0gc2lnbmFsO1xuICAgICAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tBQk9SVF0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+IHRoaXNbQUJPUlRdKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgb2YgZGF0YSBzdG9yZWQgaW4gdGhlIGJ1ZmZlciB3YWl0aW5nIHRvIGJlIHJlYWQuXG4gICAgICpcbiAgICAgKiBGb3IgQnVmZmVyIHN0cmluZ3MsIHRoaXMgd2lsbCBiZSB0aGUgdG90YWwgYnl0ZSBsZW5ndGguXG4gICAgICogRm9yIHN0cmluZyBlbmNvZGluZyBzdHJlYW1zLCB0aGlzIHdpbGwgYmUgdGhlIHN0cmluZyBjaGFyYWN0ZXIgbGVuZ3RoLFxuICAgICAqIGFjY29yZGluZyB0byBKYXZhU2NyaXB0J3MgYHN0cmluZy5sZW5ndGhgIGxvZ2ljLlxuICAgICAqIEZvciBvYmplY3RNb2RlIHN0cmVhbXMsIHRoaXMgaXMgYSBjb3VudCBvZiB0aGUgaXRlbXMgd2FpdGluZyB0byBiZVxuICAgICAqIGVtaXR0ZWQuXG4gICAgICovXG4gICAgZ2V0IGJ1ZmZlckxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbQlVGRkVSTEVOR1RIXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGBCdWZmZXJFbmNvZGluZ2AgY3VycmVudGx5IGluIHVzZSwgb3IgYG51bGxgXG4gICAgICovXG4gICAgZ2V0IGVuY29kaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tFTkNPRElOR107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIC0gVGhpcyBpcyBhIHJlYWQgb25seSBwcm9wZXJ0eVxuICAgICAqL1xuICAgIHNldCBlbmNvZGluZyhfZW5jKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb2RpbmcgbXVzdCBiZSBzZXQgYXQgaW5zdGFudGlhdGlvbiB0aW1lJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIC0gRW5jb2RpbmcgbWF5IG9ubHkgYmUgc2V0IGF0IGluc3RhbnRpYXRpb24gdGltZVxuICAgICAqL1xuICAgIHNldEVuY29kaW5nKF9lbmMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvZGluZyBtdXN0IGJlIHNldCBhdCBpbnN0YW50aWF0aW9uIHRpbWUnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJ1ZSBpZiB0aGlzIGlzIGFuIG9iamVjdE1vZGUgc3RyZWFtXG4gICAgICovXG4gICAgZ2V0IG9iamVjdE1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW09CSkVDVE1PREVdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCAtIFRoaXMgaXMgYSByZWFkLW9ubHkgcHJvcGVydHlcbiAgICAgKi9cbiAgICBzZXQgb2JqZWN0TW9kZShfb20pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvYmplY3RNb2RlIG11c3QgYmUgc2V0IGF0IGluc3RhbnRpYXRpb24gdGltZScpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoaXMgaXMgYW4gYXN5bmMgc3RyZWFtXG4gICAgICovXG4gICAgZ2V0IFsnYXN5bmMnXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbQVNZTkNdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSB0byBtYWtlIHRoaXMgc3RyZWFtIGFzeW5jLlxuICAgICAqXG4gICAgICogT25jZSBzZXQsIGl0IGNhbm5vdCBiZSB1bnNldCwgYXMgdGhpcyB3b3VsZCBwb3RlbnRpYWxseSBjYXVzZSBpbmNvcnJlY3RcbiAgICAgKiBiZWhhdmlvci4gIEllLCBhIHN5bmMgc3RyZWFtIGNhbiBiZSBtYWRlIGFzeW5jLCBidXQgYW4gYXN5bmMgc3RyZWFtXG4gICAgICogY2Fubm90IGJlIHNhZmVseSBtYWRlIHN5bmMuXG4gICAgICovXG4gICAgc2V0IFsnYXN5bmMnXShhKSB7XG4gICAgICAgIHRoaXNbQVNZTkNdID0gdGhpc1tBU1lOQ10gfHwgISFhO1xuICAgIH1cbiAgICAvLyBkcm9wIGV2ZXJ5dGhpbmcgYW5kIGdldCBvdXQgb2YgdGhlIGZsb3cgY29tcGxldGVseVxuICAgIFtBQk9SVF0oKSB7XG4gICAgICAgIHRoaXNbQUJPUlRFRF0gPSB0cnVlO1xuICAgICAgICB0aGlzLmVtaXQoJ2Fib3J0JywgdGhpc1tTSUdOQUxdPy5yZWFzb24pO1xuICAgICAgICB0aGlzLmRlc3Ryb3kodGhpc1tTSUdOQUxdPy5yZWFzb24pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUcnVlIGlmIHRoZSBzdHJlYW0gaGFzIGJlZW4gYWJvcnRlZC5cbiAgICAgKi9cbiAgICBnZXQgYWJvcnRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbQUJPUlRFRF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE5vLW9wIHNldHRlci4gU3RyZWFtIGFib3J0ZWQgc3RhdHVzIGlzIHNldCB2aWEgdGhlIEFib3J0U2lnbmFsIHByb3ZpZGVkXG4gICAgICogaW4gdGhlIGNvbnN0cnVjdG9yIG9wdGlvbnMuXG4gICAgICovXG4gICAgc2V0IGFib3J0ZWQoXykgeyB9XG4gICAgd3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICAgICAgICBpZiAodGhpc1tBQk9SVEVEXSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXNbRU9GXSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignd3JpdGUgYWZ0ZXIgZW5kJyk7XG4gICAgICAgIGlmICh0aGlzW0RFU1RST1lFRF0pIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBPYmplY3QuYXNzaWduKG5ldyBFcnJvcignQ2Fubm90IGNhbGwgd3JpdGUgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCcpLCB7IGNvZGU6ICdFUlJfU1RSRUFNX0RFU1RST1lFRCcgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2IgPSBlbmNvZGluZztcbiAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0ZjgnO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZW5jb2RpbmcpXG4gICAgICAgICAgICBlbmNvZGluZyA9ICd1dGY4JztcbiAgICAgICAgY29uc3QgZm4gPSB0aGlzW0FTWU5DXSA/IGRlZmVyIDogbm9kZWZlcjtcbiAgICAgICAgLy8gY29udmVydCBhcnJheSBidWZmZXJzIGFuZCB0eXBlZCBhcnJheSB2aWV3cyBpbnRvIGJ1ZmZlcnNcbiAgICAgICAgLy8gYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLCB3ZSBtYXkgd2FudCB0byBkbyB0aGUgb3Bwb3NpdGUhXG4gICAgICAgIC8vIGxlYXZlIHN0cmluZ3MgYW5kIGJ1ZmZlcnMgYXMtaXNcbiAgICAgICAgLy8gYW55dGhpbmcgaXMgb25seSBhbGxvd2VkIGlmIGluIG9iamVjdCBtb2RlLCBzbyB0aHJvd1xuICAgICAgICBpZiAoIXRoaXNbT0JKRUNUTU9ERV0gJiYgIUJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpIHtcbiAgICAgICAgICAgIGlmIChpc0FycmF5QnVmZmVyVmlldyhjaHVuaykpIHtcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgLSBzaW5mdWwgdW5zYWZlIHR5cGUgY2hhbmdpbmdcbiAgICAgICAgICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLmJ1ZmZlciwgY2h1bmsuYnl0ZU9mZnNldCwgY2h1bmsuYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0FycmF5QnVmZmVyTGlrZShjaHVuaykpIHtcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgLSBzaW5mdWwgdW5zYWZlIHR5cGUgY2hhbmdpbmdcbiAgICAgICAgICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjaHVuayAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vbi1jb250aWd1b3VzIGRhdGEgd3JpdHRlbiB0byBub24tb2JqZWN0TW9kZSBzdHJlYW0nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBoYW5kbGUgb2JqZWN0IG1vZGUgdXAgZnJvbnQsIHNpbmNlIGl0J3Mgc2ltcGxlclxuICAgICAgICAvLyB0aGlzIHlpZWxkcyBiZXR0ZXIgcGVyZm9ybWFuY2UsIGZld2VyIGNoZWNrcyBsYXRlci5cbiAgICAgICAgaWYgKHRoaXNbT0JKRUNUTU9ERV0pIHtcbiAgICAgICAgICAgIC8vIG1heWJlIGltcG9zc2libGU/XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICh0aGlzW0ZMT1dJTkddICYmIHRoaXNbQlVGRkVSTEVOR1RIXSAhPT0gMClcbiAgICAgICAgICAgICAgICB0aGlzW0ZMVVNIXSh0cnVlKTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICBpZiAodGhpc1tGTE9XSU5HXSlcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJQVVNIXShjaHVuayk7XG4gICAgICAgICAgICBpZiAodGhpc1tCVUZGRVJMRU5HVEhdICE9PSAwKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncmVhZGFibGUnKTtcbiAgICAgICAgICAgIGlmIChjYilcbiAgICAgICAgICAgICAgICBmbihjYik7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1tGTE9XSU5HXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhdCB0aGlzIHBvaW50IHRoZSBjaHVuayBpcyBhIGJ1ZmZlciBvciBzdHJpbmdcbiAgICAgICAgLy8gZG9uJ3QgYnVmZmVyIGl0IHVwIG9yIHNlbmQgaXQgdG8gdGhlIGRlY29kZXJcbiAgICAgICAgaWYgKCFjaHVuay5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdyZWFkYWJsZScpO1xuICAgICAgICAgICAgaWYgKGNiKVxuICAgICAgICAgICAgICAgIGZuKGNiKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW0ZMT1dJTkddO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZhc3QtcGF0aCB3cml0aW5nIHN0cmluZ3Mgb2Ygc2FtZSBlbmNvZGluZyB0byBhIHN0cmVhbSB3aXRoXG4gICAgICAgIC8vIGFuIGVtcHR5IGJ1ZmZlciwgc2tpcHBpbmcgdGhlIGJ1ZmZlci9kZWNvZGVyIGRhbmNlXG4gICAgICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAvLyB1bmxlc3MgaXQgaXMgYSBzdHJpbmcgYWxyZWFkeSByZWFkeSBmb3IgdXMgdG8gdXNlXG4gICAgICAgICAgICAhKGVuY29kaW5nID09PSB0aGlzW0VOQ09ESU5HXSAmJiAhdGhpc1tERUNPREVSXT8ubGFzdE5lZWQpKSB7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgLSBzaW5mdWwgdW5zYWZlIHR5cGUgY2hhbmdlXG4gICAgICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykgJiYgdGhpc1tFTkNPRElOR10pIHtcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSAtIHNpbmZ1bCB1bnNhZmUgdHlwZSBjaGFuZ2VcbiAgICAgICAgICAgIGNodW5rID0gdGhpc1tERUNPREVSXS53cml0ZShjaHVuayk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90ZTogZmx1c2hpbmcgQ0FOIHBvdGVudGlhbGx5IHN3aXRjaCB1cyBpbnRvIG5vdC1mbG93aW5nIG1vZGVcbiAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10gJiYgdGhpc1tCVUZGRVJMRU5HVEhdICE9PSAwKVxuICAgICAgICAgICAgdGhpc1tGTFVTSF0odHJ1ZSk7XG4gICAgICAgIGlmICh0aGlzW0ZMT1dJTkddKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzW0JVRkZFUlBVU0hdKGNodW5rKTtcbiAgICAgICAgaWYgKHRoaXNbQlVGRkVSTEVOR1RIXSAhPT0gMClcbiAgICAgICAgICAgIHRoaXMuZW1pdCgncmVhZGFibGUnKTtcbiAgICAgICAgaWYgKGNiKVxuICAgICAgICAgICAgZm4oY2IpO1xuICAgICAgICByZXR1cm4gdGhpc1tGTE9XSU5HXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTG93LWxldmVsIGV4cGxpY2l0IHJlYWQgbWV0aG9kLlxuICAgICAqXG4gICAgICogSW4gb2JqZWN0TW9kZSwgdGhlIGFyZ3VtZW50IGlzIGlnbm9yZWQsIGFuZCBvbmUgaXRlbSBpcyByZXR1cm5lZCBpZlxuICAgICAqIGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIGBuYCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIChvciBpbiB0aGUgY2FzZSBvZiBlbmNvZGluZyBzdHJlYW1zLFxuICAgICAqIGNoYXJhY3RlcnMpIHRvIGNvbnN1bWUuIElmIGBuYCBpcyBub3QgcHJvdmlkZWQsIHRoZW4gdGhlIGVudGlyZSBidWZmZXJcbiAgICAgKiBpcyByZXR1cm5lZCwgb3IgYG51bGxgIGlzIHJldHVybmVkIGlmIG5vIGRhdGEgaXMgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogSWYgYG5gIGlzIGdyZWF0ZXIgdGhhdCB0aGUgYW1vdW50IG9mIGRhdGEgaW4gdGhlIGludGVybmFsIGJ1ZmZlcixcbiAgICAgKiB0aGVuIGBudWxsYCBpcyByZXR1cm5lZC5cbiAgICAgKi9cbiAgICByZWFkKG4pIHtcbiAgICAgICAgaWYgKHRoaXNbREVTVFJPWUVEXSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB0aGlzW0RJU0NBUkRFRF0gPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXNbQlVGRkVSTEVOR1RIXSA9PT0gMCB8fFxuICAgICAgICAgICAgbiA9PT0gMCB8fFxuICAgICAgICAgICAgKG4gJiYgbiA+IHRoaXNbQlVGRkVSTEVOR1RIXSkpIHtcbiAgICAgICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpc1tPQkpFQ1RNT0RFXSlcbiAgICAgICAgICAgIG4gPSBudWxsO1xuICAgICAgICBpZiAodGhpc1tCVUZGRVJdLmxlbmd0aCA+IDEgJiYgIXRoaXNbT0JKRUNUTU9ERV0pIHtcbiAgICAgICAgICAgIC8vIG5vdCBvYmplY3QgbW9kZSwgc28gaWYgd2UgaGF2ZSBhbiBlbmNvZGluZywgdGhlbiBSVHlwZSBpcyBzdHJpbmdcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgbXVzdCBiZSBCdWZmZXJcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSXSA9IFtcbiAgICAgICAgICAgICAgICAodGhpc1tFTkNPRElOR11cbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzW0JVRkZFUl0uam9pbignJylcbiAgICAgICAgICAgICAgICAgICAgOiBCdWZmZXIuY29uY2F0KHRoaXNbQlVGRkVSXSwgdGhpc1tCVUZGRVJMRU5HVEhdKSksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldCA9IHRoaXNbUkVBRF0obiB8fCBudWxsLCB0aGlzW0JVRkZFUl1bMF0pO1xuICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICBbUkVBRF0obiwgY2h1bmspIHtcbiAgICAgICAgaWYgKHRoaXNbT0JKRUNUTU9ERV0pXG4gICAgICAgICAgICB0aGlzW0JVRkZFUlNISUZUXSgpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBjaHVuaztcbiAgICAgICAgICAgIGlmIChuID09PSBjLmxlbmd0aCB8fCBuID09PSBudWxsKVxuICAgICAgICAgICAgICAgIHRoaXNbQlVGRkVSU0hJRlRdKCk7XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgYyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUl1bMF0gPSBjLnNsaWNlKG4pO1xuICAgICAgICAgICAgICAgIGNodW5rID0gYy5zbGljZSgwLCBuKTtcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gLT0gbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXNbQlVGRkVSXVswXSA9IGMuc3ViYXJyYXkobik7XG4gICAgICAgICAgICAgICAgY2h1bmsgPSBjLnN1YmFycmF5KDAsIG4pO1xuICAgICAgICAgICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSAtPSBuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICAgICAgaWYgKCF0aGlzW0JVRkZFUl0ubGVuZ3RoICYmICF0aGlzW0VPRl0pXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2RyYWluJyk7XG4gICAgICAgIHJldHVybiBjaHVuaztcbiAgICB9XG4gICAgZW5kKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2IgPSBjaHVuaztcbiAgICAgICAgICAgIGNodW5rID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgICAgICAgICBlbmNvZGluZyA9ICd1dGY4JztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2h1bmsgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRoaXMud3JpdGUoY2h1bmssIGVuY29kaW5nKTtcbiAgICAgICAgaWYgKGNiKVxuICAgICAgICAgICAgdGhpcy5vbmNlKCdlbmQnLCBjYik7XG4gICAgICAgIHRoaXNbRU9GXSA9IHRydWU7XG4gICAgICAgIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgICAgICAgLy8gaWYgd2UgaGF2ZW4ndCB3cml0dGVuIGFueXRoaW5nLCB0aGVuIGdvIGFoZWFkIGFuZCBlbWl0LFxuICAgICAgICAvLyBldmVuIGlmIHdlJ3JlIG5vdCByZWFkaW5nLlxuICAgICAgICAvLyB3ZSdsbCByZS1lbWl0IGlmIGEgbmV3ICdlbmQnIGxpc3RlbmVyIGlzIGFkZGVkIGFueXdheS5cbiAgICAgICAgLy8gVGhpcyBtYWtlcyBNUCBtb3JlIHN1aXRhYmxlIHRvIHdyaXRlLW9ubHkgdXNlIGNhc2VzLlxuICAgICAgICBpZiAodGhpc1tGTE9XSU5HXSB8fCAhdGhpc1tQQVVTRURdKVxuICAgICAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIGRvbid0IGxldCB0aGUgaW50ZXJuYWwgcmVzdW1lIGJlIG92ZXJ3cml0dGVuXG4gICAgW1JFU1VNRV0oKSB7XG4gICAgICAgIGlmICh0aGlzW0RFU1RST1lFRF0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghdGhpc1tEQVRBTElTVEVORVJTXSAmJiAhdGhpc1tQSVBFU10ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzW0RJU0NBUkRFRF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXNbUEFVU0VEXSA9IGZhbHNlO1xuICAgICAgICB0aGlzW0ZMT1dJTkddID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbWl0KCdyZXN1bWUnKTtcbiAgICAgICAgaWYgKHRoaXNbQlVGRkVSXS5sZW5ndGgpXG4gICAgICAgICAgICB0aGlzW0ZMVVNIXSgpO1xuICAgICAgICBlbHNlIGlmICh0aGlzW0VPRl0pXG4gICAgICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2RyYWluJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc3VtZSB0aGUgc3RyZWFtIGlmIGl0IGlzIGN1cnJlbnRseSBpbiBhIHBhdXNlZCBzdGF0ZVxuICAgICAqXG4gICAgICogSWYgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIHBpcGUgZGVzdGluYXRpb25zIG9yIGBkYXRhYCBldmVudCBsaXN0ZW5lcnMsXG4gICAgICogdGhpcyB3aWxsIHBsYWNlIHRoZSBzdHJlYW0gaW4gYSBcImRpc2NhcmRlZFwiIHN0YXRlLCB3aGVyZSBhbGwgZGF0YSB3aWxsXG4gICAgICogYmUgdGhyb3duIGF3YXkuIFRoZSBkaXNjYXJkZWQgc3RhdGUgaXMgcmVtb3ZlZCBpZiBhIHBpcGUgZGVzdGluYXRpb24gb3JcbiAgICAgKiBkYXRhIGhhbmRsZXIgaXMgYWRkZWQsIGlmIHBhdXNlKCkgaXMgY2FsbGVkLCBvciBpZiBhbnkgc3luY2hyb25vdXMgb3JcbiAgICAgKiBhc3luY2hyb25vdXMgaXRlcmF0aW9uIGlzIHN0YXJ0ZWQuXG4gICAgICovXG4gICAgcmVzdW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tSRVNVTUVdKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhdXNlIHRoZSBzdHJlYW1cbiAgICAgKi9cbiAgICBwYXVzZSgpIHtcbiAgICAgICAgdGhpc1tGTE9XSU5HXSA9IGZhbHNlO1xuICAgICAgICB0aGlzW1BBVVNFRF0gPSB0cnVlO1xuICAgICAgICB0aGlzW0RJU0NBUkRFRF0gPSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgc3RyZWFtIGhhcyBiZWVuIGZvcmNpYmx5IGRlc3Ryb3llZFxuICAgICAqL1xuICAgIGdldCBkZXN0cm95ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0RFU1RST1lFRF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlIHN0cmVhbSBpcyBjdXJyZW50bHkgaW4gYSBmbG93aW5nIHN0YXRlLCBtZWFuaW5nIHRoYXRcbiAgICAgKiBhbnkgd3JpdGVzIHdpbGwgYmUgaW1tZWRpYXRlbHkgZW1pdHRlZC5cbiAgICAgKi9cbiAgICBnZXQgZmxvd2luZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbRkxPV0lOR107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlIHN0cmVhbSBpcyBjdXJyZW50bHkgaW4gYSBwYXVzZWQgc3RhdGVcbiAgICAgKi9cbiAgICBnZXQgcGF1c2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tQQVVTRURdO1xuICAgIH1cbiAgICBbQlVGRkVSUFVTSF0oY2h1bmspIHtcbiAgICAgICAgaWYgKHRoaXNbT0JKRUNUTU9ERV0pXG4gICAgICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gKz0gMTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgdGhpc1tCVUZGRVJdLnB1c2goY2h1bmspO1xuICAgIH1cbiAgICBbQlVGRkVSU0hJRlRdKCkge1xuICAgICAgICBpZiAodGhpc1tPQkpFQ1RNT0RFXSlcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSAtPSAxO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gLT0gdGhpc1tCVUZGRVJdWzBdLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXNbQlVGRkVSXS5zaGlmdCgpO1xuICAgIH1cbiAgICBbRkxVU0hdKG5vRHJhaW4gPSBmYWxzZSkge1xuICAgICAgICBkbyB7IH0gd2hpbGUgKHRoaXNbRkxVU0hDSFVOS10odGhpc1tCVUZGRVJTSElGVF0oKSkgJiZcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSXS5sZW5ndGgpO1xuICAgICAgICBpZiAoIW5vRHJhaW4gJiYgIXRoaXNbQlVGRkVSXS5sZW5ndGggJiYgIXRoaXNbRU9GXSlcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZHJhaW4nKTtcbiAgICB9XG4gICAgW0ZMVVNIQ0hVTktdKGNodW5rKSB7XG4gICAgICAgIHRoaXMuZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICAgICAgcmV0dXJuIHRoaXNbRkxPV0lOR107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBpcGUgYWxsIGRhdGEgZW1pdHRlZCBieSB0aGlzIHN0cmVhbSBpbnRvIHRoZSBkZXN0aW5hdGlvbiBwcm92aWRlZC5cbiAgICAgKlxuICAgICAqIFRyaWdnZXJzIHRoZSBmbG93IG9mIGRhdGEuXG4gICAgICovXG4gICAgcGlwZShkZXN0LCBvcHRzKSB7XG4gICAgICAgIGlmICh0aGlzW0RFU1RST1lFRF0pXG4gICAgICAgICAgICByZXR1cm4gZGVzdDtcbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGVuZGVkID0gdGhpc1tFTUlUVEVEX0VORF07XG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgICAgICBpZiAoZGVzdCA9PT0gcHJvYy5zdGRvdXQgfHwgZGVzdCA9PT0gcHJvYy5zdGRlcnIpXG4gICAgICAgICAgICBvcHRzLmVuZCA9IGZhbHNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBvcHRzLmVuZCA9IG9wdHMuZW5kICE9PSBmYWxzZTtcbiAgICAgICAgb3B0cy5wcm94eUVycm9ycyA9ICEhb3B0cy5wcm94eUVycm9ycztcbiAgICAgICAgLy8gcGlwaW5nIGFuIGVuZGVkIHN0cmVhbSBlbmRzIGltbWVkaWF0ZWx5XG4gICAgICAgIGlmIChlbmRlZCkge1xuICAgICAgICAgICAgaWYgKG9wdHMuZW5kKVxuICAgICAgICAgICAgICAgIGRlc3QuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBcImFzXCIgaGVyZSBqdXN0IGlnbm9yZXMgdGhlIFdUeXBlLCB3aGljaCBwaXBlcyBkb24ndCBjYXJlIGFib3V0LFxuICAgICAgICAgICAgLy8gc2luY2UgdGhleSdyZSBvbmx5IGNvbnN1bWluZyBmcm9tIHVzLCBhbmQgd3JpdGluZyB0byB0aGUgZGVzdFxuICAgICAgICAgICAgdGhpc1tQSVBFU10ucHVzaCghb3B0cy5wcm94eUVycm9yc1xuICAgICAgICAgICAgICAgID8gbmV3IFBpcGUodGhpcywgZGVzdCwgb3B0cylcbiAgICAgICAgICAgICAgICA6IG5ldyBQaXBlUHJveHlFcnJvcnModGhpcywgZGVzdCwgb3B0cykpO1xuICAgICAgICAgICAgaWYgKHRoaXNbQVNZTkNdKVxuICAgICAgICAgICAgICAgIGRlZmVyKCgpID0+IHRoaXNbUkVTVU1FXSgpKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzW1JFU1VNRV0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRnVsbHkgdW5ob29rIGEgcGlwZWQgZGVzdGluYXRpb24gc3RyZWFtLlxuICAgICAqXG4gICAgICogSWYgdGhlIGRlc3RpbmF0aW9uIHN0cmVhbSB3YXMgdGhlIG9ubHkgY29uc3VtZXIgb2YgdGhpcyBzdHJlYW0gKGllLFxuICAgICAqIHRoZXJlIGFyZSBubyBvdGhlciBwaXBlZCBkZXN0aW5hdGlvbnMgb3IgYCdkYXRhJ2AgZXZlbnQgbGlzdGVuZXJzKVxuICAgICAqIHRoZW4gdGhlIGZsb3cgb2YgZGF0YSB3aWxsIHN0b3AgdW50aWwgdGhlcmUgaXMgYW5vdGhlciBjb25zdW1lciBvclxuICAgICAqIHtAbGluayBNaW5pcGFzcyNyZXN1bWV9IGlzIGV4cGxpY2l0bHkgY2FsbGVkLlxuICAgICAqL1xuICAgIHVucGlwZShkZXN0KSB7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzW1BJUEVTXS5maW5kKHAgPT4gcC5kZXN0ID09PSBkZXN0KTtcbiAgICAgICAgaWYgKHApIHtcbiAgICAgICAgICAgIGlmICh0aGlzW1BJUEVTXS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpc1tGTE9XSU5HXSAmJiB0aGlzW0RBVEFMSVNURU5FUlNdID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbRkxPV0lOR10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpc1tQSVBFU10gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzW1BJUEVTXS5zcGxpY2UodGhpc1tQSVBFU10uaW5kZXhPZihwKSwgMSk7XG4gICAgICAgICAgICBwLnVucGlwZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciB7QGxpbmsgTWluaXBhc3Mjb259XG4gICAgICovXG4gICAgYWRkTGlzdGVuZXIoZXYsIGhhbmRsZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub24oZXYsIGhhbmRsZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNb3N0bHkgaWRlbnRpY2FsIHRvIGBFdmVudEVtaXR0ZXIub25gLCB3aXRoIHRoZSBmb2xsb3dpbmdcbiAgICAgKiBiZWhhdmlvciBkaWZmZXJlbmNlcyB0byBwcmV2ZW50IGRhdGEgbG9zcyBhbmQgdW5uZWNlc3NhcnkgaGFuZ3M6XG4gICAgICpcbiAgICAgKiAtIEFkZGluZyBhICdkYXRhJyBldmVudCBoYW5kbGVyIHdpbGwgdHJpZ2dlciB0aGUgZmxvdyBvZiBkYXRhXG4gICAgICpcbiAgICAgKiAtIEFkZGluZyBhICdyZWFkYWJsZScgZXZlbnQgaGFuZGxlciB3aGVuIHRoZXJlIGlzIGRhdGEgd2FpdGluZyB0byBiZSByZWFkXG4gICAgICogICB3aWxsIGNhdXNlICdyZWFkYWJsZScgdG8gYmUgZW1pdHRlZCBpbW1lZGlhdGVseS5cbiAgICAgKlxuICAgICAqIC0gQWRkaW5nIGFuICdlbmRpc2gnIGV2ZW50IGhhbmRsZXIgKCdlbmQnLCAnZmluaXNoJywgZXRjLikgd2hpY2ggaGFzXG4gICAgICogICBhbHJlYWR5IHBhc3NlZCB3aWxsIGNhdXNlIHRoZSBldmVudCB0byBiZSBlbWl0dGVkIGltbWVkaWF0ZWx5IGFuZCBhbGxcbiAgICAgKiAgIGhhbmRsZXJzIHJlbW92ZWQuXG4gICAgICpcbiAgICAgKiAtIEFkZGluZyBhbiAnZXJyb3InIGV2ZW50IGhhbmRsZXIgYWZ0ZXIgYW4gZXJyb3IgaGFzIGJlZW4gZW1pdHRlZCB3aWxsXG4gICAgICogICBjYXVzZSB0aGUgZXZlbnQgdG8gYmUgcmUtZW1pdHRlZCBpbW1lZGlhdGVseSB3aXRoIHRoZSBlcnJvciBwcmV2aW91c2x5XG4gICAgICogICByYWlzZWQuXG4gICAgICovXG4gICAgb24oZXYsIGhhbmRsZXIpIHtcbiAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIub24oZXYsIGhhbmRsZXIpO1xuICAgICAgICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzW0RBVEFMSVNURU5FUlNdKys7XG4gICAgICAgICAgICBpZiAoIXRoaXNbUElQRVNdLmxlbmd0aCAmJiAhdGhpc1tGTE9XSU5HXSkge1xuICAgICAgICAgICAgICAgIHRoaXNbUkVTVU1FXSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAncmVhZGFibGUnICYmIHRoaXNbQlVGRkVSTEVOR1RIXSAhPT0gMCkge1xuICAgICAgICAgICAgc3VwZXIuZW1pdCgncmVhZGFibGUnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0VuZGlzaChldikgJiYgdGhpc1tFTUlUVEVEX0VORF0pIHtcbiAgICAgICAgICAgIHN1cGVyLmVtaXQoZXYpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoZXYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAnZXJyb3InICYmIHRoaXNbRU1JVFRFRF9FUlJPUl0pIHtcbiAgICAgICAgICAgIGNvbnN0IGggPSBoYW5kbGVyO1xuICAgICAgICAgICAgaWYgKHRoaXNbQVNZTkNdKVxuICAgICAgICAgICAgICAgIGRlZmVyKCgpID0+IGguY2FsbCh0aGlzLCB0aGlzW0VNSVRURURfRVJST1JdKSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgaC5jYWxsKHRoaXMsIHRoaXNbRU1JVFRFRF9FUlJPUl0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciB7QGxpbmsgTWluaXBhc3Mjb2ZmfVxuICAgICAqL1xuICAgIHJlbW92ZUxpc3RlbmVyKGV2LCBoYW5kbGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9mZihldiwgaGFuZGxlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1vc3RseSBpZGVudGljYWwgdG8gYEV2ZW50RW1pdHRlci5vZmZgXG4gICAgICpcbiAgICAgKiBJZiBhICdkYXRhJyBldmVudCBoYW5kbGVyIGlzIHJlbW92ZWQsIGFuZCBpdCB3YXMgdGhlIGxhc3QgY29uc3VtZXJcbiAgICAgKiAoaWUsIHRoZXJlIGFyZSBubyBwaXBlIGRlc3RpbmF0aW9ucyBvciBvdGhlciAnZGF0YScgZXZlbnQgbGlzdGVuZXJzKSxcbiAgICAgKiB0aGVuIHRoZSBmbG93IG9mIGRhdGEgd2lsbCBzdG9wIHVudGlsIHRoZXJlIGlzIGFub3RoZXIgY29uc3VtZXIgb3JcbiAgICAgKiB7QGxpbmsgTWluaXBhc3MjcmVzdW1lfSBpcyBleHBsaWNpdGx5IGNhbGxlZC5cbiAgICAgKi9cbiAgICBvZmYoZXYsIGhhbmRsZXIpIHtcbiAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIub2ZmKGV2LCBoYW5kbGVyKTtcbiAgICAgICAgLy8gaWYgd2UgcHJldmlvdXNseSBoYWQgbGlzdGVuZXJzLCBhbmQgbm93IHdlIGRvbid0LCBhbmQgd2UgZG9uJ3RcbiAgICAgICAgLy8gaGF2ZSBhbnkgcGlwZXMsIHRoZW4gc3RvcCB0aGUgZmxvdywgdW5sZXNzIGl0J3MgYmVlbiBleHBsaWNpdGx5XG4gICAgICAgIC8vIHB1dCBpbiBhIGRpc2NhcmRlZCBmbG93aW5nIHN0YXRlIHZpYSBzdHJlYW0ucmVzdW1lKCkuXG4gICAgICAgIGlmIChldiA9PT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICB0aGlzW0RBVEFMSVNURU5FUlNdID0gdGhpcy5saXN0ZW5lcnMoJ2RhdGEnKS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAodGhpc1tEQVRBTElTVEVORVJTXSA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICF0aGlzW0RJU0NBUkRFRF0gJiZcbiAgICAgICAgICAgICAgICAhdGhpc1tQSVBFU10ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tGTE9XSU5HXSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1vc3RseSBpZGVudGljYWwgdG8gYEV2ZW50RW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnNgXG4gICAgICpcbiAgICAgKiBJZiBhbGwgJ2RhdGEnIGV2ZW50IGhhbmRsZXJzIGFyZSByZW1vdmVkLCBhbmQgdGhleSB3ZXJlIHRoZSBsYXN0IGNvbnN1bWVyXG4gICAgICogKGllLCB0aGVyZSBhcmUgbm8gcGlwZSBkZXN0aW5hdGlvbnMpLCB0aGVuIHRoZSBmbG93IG9mIGRhdGEgd2lsbCBzdG9wXG4gICAgICogdW50aWwgdGhlcmUgaXMgYW5vdGhlciBjb25zdW1lciBvciB7QGxpbmsgTWluaXBhc3MjcmVzdW1lfSBpcyBleHBsaWNpdGx5XG4gICAgICogY2FsbGVkLlxuICAgICAqL1xuICAgIHJlbW92ZUFsbExpc3RlbmVycyhldikge1xuICAgICAgICBjb25zdCByZXQgPSBzdXBlci5yZW1vdmVBbGxMaXN0ZW5lcnMoZXYpO1xuICAgICAgICBpZiAoZXYgPT09ICdkYXRhJyB8fCBldiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzW0RBVEFMSVNURU5FUlNdID0gMDtcbiAgICAgICAgICAgIGlmICghdGhpc1tESVNDQVJERURdICYmICF0aGlzW1BJUEVTXS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzW0ZMT1dJTkddID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgJ2VuZCcgZXZlbnQgaGFzIGJlZW4gZW1pdHRlZFxuICAgICAqL1xuICAgIGdldCBlbWl0dGVkRW5kKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tFTUlUVEVEX0VORF07XG4gICAgfVxuICAgIFtNQVlCRV9FTUlUX0VORF0oKSB7XG4gICAgICAgIGlmICghdGhpc1tFTUlUVElOR19FTkRdICYmXG4gICAgICAgICAgICAhdGhpc1tFTUlUVEVEX0VORF0gJiZcbiAgICAgICAgICAgICF0aGlzW0RFU1RST1lFRF0gJiZcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSXS5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgIHRoaXNbRU9GXSkge1xuICAgICAgICAgICAgdGhpc1tFTUlUVElOR19FTkRdID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZW5kJyk7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3ByZWZpbmlzaCcpO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdmaW5pc2gnKTtcbiAgICAgICAgICAgIGlmICh0aGlzW0NMT1NFRF0pXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdjbG9zZScpO1xuICAgICAgICAgICAgdGhpc1tFTUlUVElOR19FTkRdID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogTW9zdGx5IGlkZW50aWNhbCB0byBgRXZlbnRFbWl0dGVyLmVtaXRgLCB3aXRoIHRoZSBmb2xsb3dpbmdcbiAgICAgKiBiZWhhdmlvciBkaWZmZXJlbmNlcyB0byBwcmV2ZW50IGRhdGEgbG9zcyBhbmQgdW5uZWNlc3NhcnkgaGFuZ3M6XG4gICAgICpcbiAgICAgKiBJZiB0aGUgc3RyZWFtIGhhcyBiZWVuIGRlc3Ryb3llZCwgYW5kIHRoZSBldmVudCBpcyBzb21ldGhpbmcgb3RoZXJcbiAgICAgKiB0aGFuICdjbG9zZScgb3IgJ2Vycm9yJywgdGhlbiBgZmFsc2VgIGlzIHJldHVybmVkIGFuZCBubyBoYW5kbGVyc1xuICAgICAqIGFyZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZXZlbnQgaXMgJ2VuZCcsIGFuZCBoYXMgYWxyZWFkeSBiZWVuIGVtaXR0ZWQsIHRoZW4gdGhlIGV2ZW50XG4gICAgICogaXMgaWdub3JlZC4gSWYgdGhlIHN0cmVhbSBpcyBpbiBhIHBhdXNlZCBvciBub24tZmxvd2luZyBzdGF0ZSwgdGhlblxuICAgICAqIHRoZSBldmVudCB3aWxsIGJlIGRlZmVycmVkIHVudGlsIGRhdGEgZmxvdyByZXN1bWVzLiBJZiB0aGUgc3RyZWFtIGlzXG4gICAgICogYXN5bmMsIHRoZW4gaGFuZGxlcnMgd2lsbCBiZSBjYWxsZWQgb24gdGhlIG5leHQgdGljayByYXRoZXIgdGhhblxuICAgICAqIGltbWVkaWF0ZWx5LlxuICAgICAqXG4gICAgICogSWYgdGhlIGV2ZW50IGlzICdjbG9zZScsIGFuZCAnZW5kJyBoYXMgbm90IHlldCBiZWVuIGVtaXR0ZWQsIHRoZW5cbiAgICAgKiB0aGUgZXZlbnQgd2lsbCBiZSBkZWZlcnJlZCB1bnRpbCBhZnRlciAnZW5kJyBpcyBlbWl0dGVkLlxuICAgICAqXG4gICAgICogSWYgdGhlIGV2ZW50IGlzICdlcnJvcicsIGFuZCBhbiBBYm9ydFNpZ25hbCB3YXMgcHJvdmlkZWQgZm9yIHRoZSBzdHJlYW0sXG4gICAgICogYW5kIHRoZXJlIGFyZSBubyBsaXN0ZW5lcnMsIHRoZW4gdGhlIGV2ZW50IGlzIGlnbm9yZWQsIG1hdGNoaW5nIHRoZVxuICAgICAqIGJlaGF2aW9yIG9mIG5vZGUgY29yZSBzdHJlYW1zIGluIHRoZSBwcmVzZW5zZSBvZiBhbiBBYm9ydFNpZ25hbC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBldmVudCBpcyAnZmluaXNoJyBvciAncHJlZmluaXNoJywgdGhlbiBhbGwgbGlzdGVuZXJzIHdpbGwgYmVcbiAgICAgKiByZW1vdmVkIGFmdGVyIGVtaXR0aW5nIHRoZSBldmVudCwgdG8gcHJldmVudCBkb3VibGUtZmlyaW5nLlxuICAgICAqL1xuICAgIGVtaXQoZXYsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGFyZ3NbMF07XG4gICAgICAgIC8vIGVycm9yIGFuZCBjbG9zZSBhcmUgb25seSBldmVudHMgYWxsb3dlZCBhZnRlciBjYWxsaW5nIGRlc3Ryb3koKVxuICAgICAgICBpZiAoZXYgIT09ICdlcnJvcicgJiZcbiAgICAgICAgICAgIGV2ICE9PSAnY2xvc2UnICYmXG4gICAgICAgICAgICBldiAhPT0gREVTVFJPWUVEICYmXG4gICAgICAgICAgICB0aGlzW0RFU1RST1lFRF0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRoaXNbT0JKRUNUTU9ERV0gJiYgIWRhdGFcbiAgICAgICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICAgICAgOiB0aGlzW0FTWU5DXVxuICAgICAgICAgICAgICAgICAgICA/IChkZWZlcigoKSA9PiB0aGlzW0VNSVREQVRBXShkYXRhKSksIHRydWUpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpc1tFTUlUREFUQV0oZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdlbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1tFTUlURU5EXSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAnY2xvc2UnKSB7XG4gICAgICAgICAgICB0aGlzW0NMT1NFRF0gPSB0cnVlO1xuICAgICAgICAgICAgLy8gZG9uJ3QgZW1pdCBjbG9zZSBiZWZvcmUgJ2VuZCcgYW5kICdmaW5pc2gnXG4gICAgICAgICAgICBpZiAoIXRoaXNbRU1JVFRFRF9FTkRdICYmICF0aGlzW0RFU1RST1lFRF0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIuZW1pdCgnY2xvc2UnKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdjbG9zZScpO1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgdGhpc1tFTUlUVEVEX0VSUk9SXSA9IGRhdGE7XG4gICAgICAgICAgICBzdXBlci5lbWl0KEVSUk9SLCBkYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9ICF0aGlzW1NJR05BTF0gfHwgdGhpcy5saXN0ZW5lcnMoJ2Vycm9yJykubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyBzdXBlci5lbWl0KCdlcnJvcicsIGRhdGEpXG4gICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAncmVzdW1lJykge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIuZW1pdCgncmVzdW1lJyk7XG4gICAgICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ2ZpbmlzaCcgfHwgZXYgPT09ICdwcmVmaW5pc2gnKSB7XG4gICAgICAgICAgICBjb25zdCByZXQgPSBzdXBlci5lbWl0KGV2KTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGV2KTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29tZSBvdGhlciB1bmtub3duIGV2ZW50XG4gICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLmVtaXQoZXYsIC4uLmFyZ3MpO1xuICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICBbRU1JVERBVEFdKGRhdGEpIHtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXNbUElQRVNdKSB7XG4gICAgICAgICAgICBpZiAocC5kZXN0LndyaXRlKGRhdGEpID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0ID0gdGhpc1tESVNDQVJERURdID8gZmFsc2UgOiBzdXBlci5lbWl0KCdkYXRhJywgZGF0YSk7XG4gICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIFtFTUlURU5EXSgpIHtcbiAgICAgICAgaWYgKHRoaXNbRU1JVFRFRF9FTkRdKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzW0VNSVRURURfRU5EXSA9IHRydWU7XG4gICAgICAgIHRoaXMucmVhZGFibGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRoaXNbQVNZTkNdXG4gICAgICAgICAgICA/IChkZWZlcigoKSA9PiB0aGlzW0VNSVRFTkQyXSgpKSwgdHJ1ZSlcbiAgICAgICAgICAgIDogdGhpc1tFTUlURU5EMl0oKTtcbiAgICB9XG4gICAgW0VNSVRFTkQyXSgpIHtcbiAgICAgICAgaWYgKHRoaXNbREVDT0RFUl0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzW0RFQ09ERVJdLmVuZCgpO1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpc1tQSVBFU10pIHtcbiAgICAgICAgICAgICAgICAgICAgcC5kZXN0LndyaXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXNbRElTQ0FSREVEXSlcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIuZW1pdCgnZGF0YScsIGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzW1BJUEVTXSkge1xuICAgICAgICAgICAgcC5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXQgPSBzdXBlci5lbWl0KCdlbmQnKTtcbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2VuZCcpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2YgYWxsIGVtaXR0ZWQgZGF0YSBvbmNlXG4gICAgICogdGhlIHN0cmVhbSBlbmRzLlxuICAgICAqL1xuICAgIGFzeW5jIGNvbGxlY3QoKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IE9iamVjdC5hc3NpZ24oW10sIHtcbiAgICAgICAgICAgIGRhdGFMZW5ndGg6IDAsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXRoaXNbT0JKRUNUTU9ERV0pXG4gICAgICAgICAgICBidWYuZGF0YUxlbmd0aCA9IDA7XG4gICAgICAgIC8vIHNldCB0aGUgcHJvbWlzZSBmaXJzdCwgaW4gY2FzZSBhbiBlcnJvciBpcyByYWlzZWRcbiAgICAgICAgLy8gYnkgdHJpZ2dlcmluZyB0aGUgZmxvdyBoZXJlLlxuICAgICAgICBjb25zdCBwID0gdGhpcy5wcm9taXNlKCk7XG4gICAgICAgIHRoaXMub24oJ2RhdGEnLCBjID0+IHtcbiAgICAgICAgICAgIGJ1Zi5wdXNoKGMpO1xuICAgICAgICAgICAgaWYgKCF0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgICAgIGJ1Zi5kYXRhTGVuZ3RoICs9IGMubGVuZ3RoO1xuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgcDtcbiAgICAgICAgcmV0dXJuIGJ1ZjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjb25jYXRlbmF0aW9uIG9mIGFsbCBlbWl0dGVkIGRhdGFcbiAgICAgKiBvbmNlIHRoZSBzdHJlYW0gZW5kcy5cbiAgICAgKlxuICAgICAqIE5vdCBhbGxvd2VkIG9uIG9iamVjdE1vZGUgc3RyZWFtcy5cbiAgICAgKi9cbiAgICBhc3luYyBjb25jYXQoKSB7XG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBjb25jYXQgaW4gb2JqZWN0TW9kZScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJ1ZiA9IGF3YWl0IHRoaXMuY29sbGVjdCgpO1xuICAgICAgICByZXR1cm4gKHRoaXNbRU5DT0RJTkddXG4gICAgICAgICAgICA/IGJ1Zi5qb2luKCcnKVxuICAgICAgICAgICAgOiBCdWZmZXIuY29uY2F0KGJ1ZiwgYnVmLmRhdGFMZW5ndGgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgdm9pZCBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgc3RyZWFtIGVuZHMuXG4gICAgICovXG4gICAgYXN5bmMgcHJvbWlzZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMub24oREVTVFJPWUVELCAoKSA9PiByZWplY3QobmV3IEVycm9yKCdzdHJlYW0gZGVzdHJveWVkJykpKTtcbiAgICAgICAgICAgIHRoaXMub24oJ2Vycm9yJywgZXIgPT4gcmVqZWN0KGVyKSk7XG4gICAgICAgICAgICB0aGlzLm9uKCdlbmQnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXN5bmNocm9ub3VzIGBmb3IgYXdhaXQgb2ZgIGl0ZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIFRoaXMgd2lsbCBjb250aW51ZSBlbWl0dGluZyBhbGwgY2h1bmtzIHVudGlsIHRoZSBzdHJlYW0gdGVybWluYXRlcy5cbiAgICAgKi9cbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAvLyBzZXQgdGhpcyB1cCBmcm9udCwgaW4gY2FzZSB0aGUgY29uc3VtZXIgZG9lc24ndCBjYWxsIG5leHQoKVxuICAgICAgICAvLyByaWdodCBhd2F5LlxuICAgICAgICB0aGlzW0RJU0NBUkRFRF0gPSBmYWxzZTtcbiAgICAgICAgbGV0IHN0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgc3RvcCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgICAgICAgIHN0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0b3BwZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3AoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMucmVhZCgpO1xuICAgICAgICAgICAgaWYgKHJlcyAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgZG9uZTogZmFsc2UsIHZhbHVlOiByZXMgfSk7XG4gICAgICAgICAgICBpZiAodGhpc1tFT0ZdKVxuICAgICAgICAgICAgICAgIHJldHVybiBzdG9wKCk7XG4gICAgICAgICAgICBsZXQgcmVzb2x2ZTtcbiAgICAgICAgICAgIGxldCByZWplY3Q7XG4gICAgICAgICAgICBjb25zdCBvbmVyciA9IChlcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdkYXRhJywgb25kYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZW5kJywgb25lbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKERFU1RST1lFRCwgb25kZXN0cm95KTtcbiAgICAgICAgICAgICAgICBzdG9wKCk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBvbmRhdGEgPSAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZXJyb3InLCBvbmVycik7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2VuZCcsIG9uZW5kKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZihERVNUUk9ZRUQsIG9uZGVzdHJveSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoeyB2YWx1ZSwgZG9uZTogISF0aGlzW0VPRl0gfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgb25lbmQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2Vycm9yJywgb25lcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdkYXRhJywgb25kYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZihERVNUUk9ZRUQsIG9uZGVzdHJveSk7XG4gICAgICAgICAgICAgICAgc3RvcCgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoeyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IG9uZGVzdHJveSA9ICgpID0+IG9uZXJyKG5ldyBFcnJvcignc3RyZWFtIGRlc3Ryb3llZCcpKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QgPSByZWo7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSA9IHJlcztcbiAgICAgICAgICAgICAgICB0aGlzLm9uY2UoREVTVFJPWUVELCBvbmRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgIHRoaXMub25jZSgnZXJyb3InLCBvbmVycik7XG4gICAgICAgICAgICAgICAgdGhpcy5vbmNlKCdlbmQnLCBvbmVuZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbmNlKCdkYXRhJywgb25kYXRhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIHRocm93OiBzdG9wLFxuICAgICAgICAgICAgcmV0dXJuOiBzdG9wLFxuICAgICAgICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jRGlzcG9zZV06IGFzeW5jICgpID0+IHsgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3luY2hyb25vdXMgYGZvciBvZmAgaXRlcmF0aW9uLlxuICAgICAqXG4gICAgICogVGhlIGl0ZXJhdGlvbiB3aWxsIHRlcm1pbmF0ZSB3aGVuIHRoZSBpbnRlcm5hbCBidWZmZXIgcnVucyBvdXQsIGV2ZW5cbiAgICAgKiBpZiB0aGUgc3RyZWFtIGhhcyBub3QgeWV0IHRlcm1pbmF0ZWQuXG4gICAgICovXG4gICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIC8vIHNldCB0aGlzIHVwIGZyb250LCBpbiBjYXNlIHRoZSBjb25zdW1lciBkb2Vzbid0IGNhbGwgbmV4dCgpXG4gICAgICAgIC8vIHJpZ2h0IGF3YXkuXG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICBsZXQgc3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBzdG9wID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgICAgICAgdGhpcy5vZmYoRVJST1IsIHN0b3ApO1xuICAgICAgICAgICAgdGhpcy5vZmYoREVTVFJPWUVELCBzdG9wKTtcbiAgICAgICAgICAgIHRoaXMub2ZmKCdlbmQnLCBzdG9wKTtcbiAgICAgICAgICAgIHN0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0b3BwZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3AoKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZWFkKCk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBzdG9wKCkgOiB7IGRvbmU6IGZhbHNlLCB2YWx1ZSB9O1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uY2UoJ2VuZCcsIHN0b3ApO1xuICAgICAgICB0aGlzLm9uY2UoRVJST1IsIHN0b3ApO1xuICAgICAgICB0aGlzLm9uY2UoREVTVFJPWUVELCBzdG9wKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5leHQsXG4gICAgICAgICAgICB0aHJvdzogc3RvcCxcbiAgICAgICAgICAgIHJldHVybjogc3RvcCxcbiAgICAgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtTeW1ib2wuZGlzcG9zZV06ICgpID0+IHsgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVzdHJveSBhIHN0cmVhbSwgcHJldmVudGluZyBpdCBmcm9tIGJlaW5nIHVzZWQgZm9yIGFueSBmdXJ0aGVyIHB1cnBvc2UuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgc3RyZWFtIGhhcyBhIGBjbG9zZSgpYCBtZXRob2QsIHRoZW4gaXQgd2lsbCBiZSBjYWxsZWQgb25cbiAgICAgKiBkZXN0cnVjdGlvbi5cbiAgICAgKlxuICAgICAqIEFmdGVyIGRlc3RydWN0aW9uLCBhbnkgYXR0ZW1wdCB0byB3cml0ZSBkYXRhLCByZWFkIGRhdGEsIG9yIGVtaXQgbW9zdFxuICAgICAqIGV2ZW50cyB3aWxsIGJlIGlnbm9yZWQuXG4gICAgICpcbiAgICAgKiBJZiBhbiBlcnJvciBhcmd1bWVudCBpcyBwcm92aWRlZCwgdGhlbiBpdCB3aWxsIGJlIGVtaXR0ZWQgaW4gYW5cbiAgICAgKiAnZXJyb3InIGV2ZW50LlxuICAgICAqL1xuICAgIGRlc3Ryb3koZXIpIHtcbiAgICAgICAgaWYgKHRoaXNbREVTVFJPWUVEXSkge1xuICAgICAgICAgICAgaWYgKGVyKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KERFU1RST1lFRCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzW0RFU1RST1lFRF0gPSB0cnVlO1xuICAgICAgICB0aGlzW0RJU0NBUkRFRF0gPSB0cnVlO1xuICAgICAgICAvLyB0aHJvdyBhd2F5IGFsbCBidWZmZXJlZCBkYXRhLCBpdCdzIG5ldmVyIGNvbWluZyBvdXRcbiAgICAgICAgdGhpc1tCVUZGRVJdLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSA9IDA7XG4gICAgICAgIGNvbnN0IHdjID0gdGhpcztcbiAgICAgICAgaWYgKHR5cGVvZiB3Yy5jbG9zZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdGhpc1tDTE9TRURdKVxuICAgICAgICAgICAgd2MuY2xvc2UoKTtcbiAgICAgICAgaWYgKGVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAgICAgLy8gaWYgbm8gZXJyb3IgdG8gZW1pdCwgc3RpbGwgcmVqZWN0IHBlbmRpbmcgcHJvbWlzZXNcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5lbWl0KERFU1RST1lFRCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIGlzU3RyZWFtfVxuICAgICAqXG4gICAgICogRm9ybWVyIGV4cG9ydCBsb2NhdGlvbiwgbWFpbnRhaW5lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXQgaXNTdHJlYW0oKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmVhbTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIi8vIHRoaXMgaXMganVzdCBhIHZlcnkgbGlnaHQgd3JhcHBlciBhcm91bmQgMiBhcnJheXMgd2l0aCBhbiBvZmZzZXQgaW5kZXhcbmltcG9ydCB7IEdMT0JTVEFSIH0gZnJvbSAnbWluaW1hdGNoJztcbmNvbnN0IGlzUGF0dGVybkxpc3QgPSAocGwpID0+IHBsLmxlbmd0aCA+PSAxO1xuY29uc3QgaXNHbG9iTGlzdCA9IChnbCkgPT4gZ2wubGVuZ3RoID49IDE7XG4vKipcbiAqIEFuIGltbXV0YWJsZS1pc2ggdmlldyBvbiBhbiBhcnJheSBvZiBnbG9iIHBhcnRzIGFuZCB0aGVpciBwYXJzZWRcbiAqIHJlc3VsdHNcbiAqL1xuZXhwb3J0IGNsYXNzIFBhdHRlcm4ge1xuICAgICNwYXR0ZXJuTGlzdDtcbiAgICAjZ2xvYkxpc3Q7XG4gICAgI2luZGV4O1xuICAgIGxlbmd0aDtcbiAgICAjcGxhdGZvcm07XG4gICAgI3Jlc3Q7XG4gICAgI2dsb2JTdHJpbmc7XG4gICAgI2lzRHJpdmU7XG4gICAgI2lzVU5DO1xuICAgICNpc0Fic29sdXRlO1xuICAgICNmb2xsb3dHbG9ic3RhciA9IHRydWU7XG4gICAgY29uc3RydWN0b3IocGF0dGVybkxpc3QsIGdsb2JMaXN0LCBpbmRleCwgcGxhdGZvcm0pIHtcbiAgICAgICAgaWYgKCFpc1BhdHRlcm5MaXN0KHBhdHRlcm5MaXN0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW1wdHkgcGF0dGVybiBsaXN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0dsb2JMaXN0KGdsb2JMaXN0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW1wdHkgZ2xvYiBsaXN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdsb2JMaXN0Lmxlbmd0aCAhPT0gcGF0dGVybkxpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtaXNtYXRjaGVkIHBhdHRlcm4gbGlzdCBhbmQgZ2xvYiBsaXN0IGxlbmd0aHMnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxlbmd0aCA9IHBhdHRlcm5MaXN0Lmxlbmd0aDtcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW5kZXggb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jcGF0dGVybkxpc3QgPSBwYXR0ZXJuTGlzdDtcbiAgICAgICAgdGhpcy4jZ2xvYkxpc3QgPSBnbG9iTGlzdDtcbiAgICAgICAgdGhpcy4jaW5kZXggPSBpbmRleDtcbiAgICAgICAgdGhpcy4jcGxhdGZvcm0gPSBwbGF0Zm9ybTtcbiAgICAgICAgLy8gbm9ybWFsaXplIHJvb3QgZW50cmllcyBvZiBhYnNvbHV0ZSBwYXR0ZXJucyBvbiBpbml0aWFsIGNyZWF0aW9uLlxuICAgICAgICBpZiAodGhpcy4jaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIC8vIGM6ID0+IFsnYzovJ11cbiAgICAgICAgICAgIC8vIEM6LyA9PiBbJ0M6LyddXG4gICAgICAgICAgICAvLyBDOi94ID0+IFsnQzovJywgJ3gnXVxuICAgICAgICAgICAgLy8gLy9ob3N0L3NoYXJlID0+IFsnLy9ob3N0L3NoYXJlLyddXG4gICAgICAgICAgICAvLyAvL2hvc3Qvc2hhcmUvID0+IFsnLy9ob3N0L3NoYXJlLyddXG4gICAgICAgICAgICAvLyAvL2hvc3Qvc2hhcmUveCA9PiBbJy8vaG9zdC9zaGFyZS8nLCAneCddXG4gICAgICAgICAgICAvLyAvZXRjID0+IFsnLycsICdldGMnXVxuICAgICAgICAgICAgLy8gLyA9PiBbJy8nXVxuICAgICAgICAgICAgaWYgKHRoaXMuaXNVTkMoKSkge1xuICAgICAgICAgICAgICAgIC8vICcnIC8gJycgLyAnaG9zdCcgLyAnc2hhcmUnXG4gICAgICAgICAgICAgICAgY29uc3QgW3AwLCBwMSwgcDIsIHAzLCAuLi5wcmVzdF0gPSB0aGlzLiNwYXR0ZXJuTGlzdDtcbiAgICAgICAgICAgICAgICBjb25zdCBbZzAsIGcxLCBnMiwgZzMsIC4uLmdyZXN0XSA9IHRoaXMuI2dsb2JMaXN0O1xuICAgICAgICAgICAgICAgIGlmIChwcmVzdFswXSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZW5kcyBpbiAvXG4gICAgICAgICAgICAgICAgICAgIHByZXN0LnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGdyZXN0LnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBbcDAsIHAxLCBwMiwgcDMsICcnXS5qb2luKCcvJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZyA9IFtnMCwgZzEsIGcyLCBnMywgJyddLmpvaW4oJy8nKTtcbiAgICAgICAgICAgICAgICB0aGlzLiNwYXR0ZXJuTGlzdCA9IFtwLCAuLi5wcmVzdF07XG4gICAgICAgICAgICAgICAgdGhpcy4jZ2xvYkxpc3QgPSBbZywgLi4uZ3Jlc3RdO1xuICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy4jcGF0dGVybkxpc3QubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5pc0RyaXZlKCkgfHwgdGhpcy5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbcDEsIC4uLnByZXN0XSA9IHRoaXMuI3BhdHRlcm5MaXN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IFtnMSwgLi4uZ3Jlc3RdID0gdGhpcy4jZ2xvYkxpc3Q7XG4gICAgICAgICAgICAgICAgaWYgKHByZXN0WzBdID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBlbmRzIGluIC9cbiAgICAgICAgICAgICAgICAgICAgcHJlc3Quc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgZ3Jlc3Quc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHAxICsgJy8nO1xuICAgICAgICAgICAgICAgIGNvbnN0IGcgPSBnMSArICcvJztcbiAgICAgICAgICAgICAgICB0aGlzLiNwYXR0ZXJuTGlzdCA9IFtwLCAuLi5wcmVzdF07XG4gICAgICAgICAgICAgICAgdGhpcy4jZ2xvYkxpc3QgPSBbZywgLi4uZ3Jlc3RdO1xuICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy4jcGF0dGVybkxpc3QubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgcGFyc2VkIGxpc3Qgb2YgcGF0dGVybnNcbiAgICAgKi9cbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGF0dGVybkxpc3RbdGhpcy4jaW5kZXhdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIG9mIGlmIHBhdHRlcm4oKSByZXR1cm5zIGEgc3RyaW5nXG4gICAgICovXG4gICAgaXNTdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdGhpcy4jcGF0dGVybkxpc3RbdGhpcy4jaW5kZXhdID09PSAnc3RyaW5nJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBvZiBpZiBwYXR0ZXJuKCkgcmV0dXJucyBHTE9CU1RBUlxuICAgICAqL1xuICAgIGlzR2xvYnN0YXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwYXR0ZXJuTGlzdFt0aGlzLiNpbmRleF0gPT09IEdMT0JTVEFSO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHBhdHRlcm4oKSByZXR1cm5zIGEgcmVnZXhwXG4gICAgICovXG4gICAgaXNSZWdFeHAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwYXR0ZXJuTGlzdFt0aGlzLiNpbmRleF0gaW5zdGFuY2VvZiBSZWdFeHA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSAvLWpvaW5lZCBzZXQgb2YgZ2xvYiBwYXJ0cyB0aGF0IG1ha2UgdXAgdGhpcyBwYXR0ZXJuXG4gICAgICovXG4gICAgZ2xvYlN0cmluZygpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiNnbG9iU3RyaW5nID1cbiAgICAgICAgICAgIHRoaXMuI2dsb2JTdHJpbmcgfHxcbiAgICAgICAgICAgICAgICAodGhpcy4jaW5kZXggPT09IDAgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQWJzb2x1dGUoKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNnbG9iTGlzdFswXSArIHRoaXMuI2dsb2JMaXN0LnNsaWNlKDEpLmpvaW4oJy8nKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLiNnbG9iTGlzdC5qb2luKCcvJylcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLiNnbG9iTGlzdC5zbGljZSh0aGlzLiNpbmRleCkuam9pbignLycpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlcmUgYXJlIG1vcmUgcGF0dGVybiBwYXJ0cyBhZnRlciB0aGlzIG9uZVxuICAgICAqL1xuICAgIGhhc01vcmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCA+IHRoaXMuI2luZGV4ICsgMTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gYWZ0ZXIgdGhpcyBwYXJ0LCBvciBudWxsIGlmIHRoaXMgaXMgdGhlIGVuZFxuICAgICAqL1xuICAgIHJlc3QoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyZXN0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcmVzdDtcbiAgICAgICAgaWYgKCF0aGlzLmhhc01vcmUoKSlcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jcmVzdCA9IG51bGwpO1xuICAgICAgICB0aGlzLiNyZXN0ID0gbmV3IFBhdHRlcm4odGhpcy4jcGF0dGVybkxpc3QsIHRoaXMuI2dsb2JMaXN0LCB0aGlzLiNpbmRleCArIDEsIHRoaXMuI3BsYXRmb3JtKTtcbiAgICAgICAgdGhpcy4jcmVzdC4jaXNBYnNvbHV0ZSA9IHRoaXMuI2lzQWJzb2x1dGU7XG4gICAgICAgIHRoaXMuI3Jlc3QuI2lzVU5DID0gdGhpcy4jaXNVTkM7XG4gICAgICAgIHRoaXMuI3Jlc3QuI2lzRHJpdmUgPSB0aGlzLiNpc0RyaXZlO1xuICAgICAgICByZXR1cm4gdGhpcy4jcmVzdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgcGF0dGVybiByZXByZXNlbnRzIGEgLy91bmMvcGF0aC8gb24gd2luZG93c1xuICAgICAqL1xuICAgIGlzVU5DKCkge1xuICAgICAgICBjb25zdCBwbCA9IHRoaXMuI3BhdHRlcm5MaXN0O1xuICAgICAgICByZXR1cm4gdGhpcy4jaXNVTkMgIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICB0aGlzLiNpc1VOQ1xuICAgICAgICAgICAgOiAodGhpcy4jaXNVTkMgPVxuICAgICAgICAgICAgICAgIHRoaXMuI3BsYXRmb3JtID09PSAnd2luMzInICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2luZGV4ID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIHBsWzBdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgICAgICBwbFsxXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBsWzJdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAhIXBsWzJdICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwbFszXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgISFwbFszXSk7XG4gICAgfVxuICAgIC8vIHBhdHRlcm4gbGlrZSBDOi8uLi5cbiAgICAvLyBzcGxpdCA9IFsnQzonLCAuLi5dXG4gICAgLy8gWFhYOiB3b3VsZCBiZSBuaWNlIHRvIGhhbmRsZSBwYXR0ZXJucyBsaWtlIGBjOipgIHRvIHRlc3QgdGhlIGN3ZFxuICAgIC8vIGluIGM6IGZvciAqLCBidXQgSSBkb24ndCBrbm93IG9mIGEgd2F5IHRvIGV2ZW4gZmlndXJlIG91dCB3aGF0IHRoYXRcbiAgICAvLyBjd2QgaXMgd2l0aG91dCBhY3R1YWxseSBjaGRpcidpbmcgaW50byBpdD9cbiAgICAvKipcbiAgICAgKiBUcnVlIGlmIHRoZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEgZHJpdmUgbGV0dGVyIG9uIFdpbmRvd3NcbiAgICAgKi9cbiAgICBpc0RyaXZlKCkge1xuICAgICAgICBjb25zdCBwbCA9IHRoaXMuI3BhdHRlcm5MaXN0O1xuICAgICAgICByZXR1cm4gdGhpcy4jaXNEcml2ZSAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgIHRoaXMuI2lzRHJpdmVcbiAgICAgICAgICAgIDogKHRoaXMuI2lzRHJpdmUgPVxuICAgICAgICAgICAgICAgIHRoaXMuI3BsYXRmb3JtID09PSAnd2luMzInICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2luZGV4ID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcGxbMF0gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgIC9eW2Etel06JC9pLnRlc3QocGxbMF0pKTtcbiAgICB9XG4gICAgLy8gcGF0dGVybiA9ICcvJyBvciAnLy4uLicgb3IgJy94Ly4uLidcbiAgICAvLyBzcGxpdCA9IFsnJywgJyddIG9yIFsnJywgLi4uXSBvciBbJycsICd4JywgLi4uXVxuICAgIC8vIERyaXZlIGFuZCBVTkMgYm90aCBjb25zaWRlcmVkIGFic29sdXRlIG9uIHdpbmRvd3NcbiAgICAvKipcbiAgICAgKiBUcnVlIGlmIHRoZSBwYXR0ZXJuIGlzIHJvb3RlZCBvbiBhbiBhYnNvbHV0ZSBwYXRoXG4gICAgICovXG4gICAgaXNBYnNvbHV0ZSgpIHtcbiAgICAgICAgY29uc3QgcGwgPSB0aGlzLiNwYXR0ZXJuTGlzdDtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2lzQWJzb2x1dGUgIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICB0aGlzLiNpc0Fic29sdXRlXG4gICAgICAgICAgICA6ICh0aGlzLiNpc0Fic29sdXRlID1cbiAgICAgICAgICAgICAgICAocGxbMF0gPT09ICcnICYmIHBsLmxlbmd0aCA+IDEpIHx8XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNEcml2ZSgpIHx8XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNVTkMoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGNvbnN1bWUgdGhlIHJvb3Qgb2YgdGhlIHBhdHRlcm4sIGFuZCByZXR1cm4gaXRcbiAgICAgKi9cbiAgICByb290KCkge1xuICAgICAgICBjb25zdCBwID0gdGhpcy4jcGF0dGVybkxpc3RbMF07XG4gICAgICAgIHJldHVybiAodHlwZW9mIHAgPT09ICdzdHJpbmcnICYmIHRoaXMuaXNBYnNvbHV0ZSgpICYmIHRoaXMuI2luZGV4ID09PSAwKSA/XG4gICAgICAgICAgICBwXG4gICAgICAgICAgICA6ICcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIGN1cnJlbnQgZ2xvYnN0YXIgcGF0dGVybiBpcyBhbGxvd2VkIHRvIGZvbGxvd1xuICAgICAqIGEgc3ltYm9saWMgbGluay5cbiAgICAgKi9cbiAgICBjaGVja0ZvbGxvd0dsb2JzdGFyKCkge1xuICAgICAgICByZXR1cm4gISh0aGlzLiNpbmRleCA9PT0gMCB8fFxuICAgICAgICAgICAgIXRoaXMuaXNHbG9ic3RhcigpIHx8XG4gICAgICAgICAgICAhdGhpcy4jZm9sbG93R2xvYnN0YXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYXJrIHRoYXQgdGhlIGN1cnJlbnQgZ2xvYnN0YXIgcGF0dGVybiBpcyBmb2xsb3dpbmcgYSBzeW1ib2xpYyBsaW5rXG4gICAgICovXG4gICAgbWFya0ZvbGxvd0dsb2JzdGFyKCkge1xuICAgICAgICBpZiAodGhpcy4jaW5kZXggPT09IDAgfHwgIXRoaXMuaXNHbG9ic3RhcigpIHx8ICF0aGlzLiNmb2xsb3dHbG9ic3RhcilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpcy4jZm9sbG93R2xvYnN0YXIgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0dGVybi5qcy5tYXAiLAogICAgIi8vIGdpdmUgaXQgYSBwYXR0ZXJuLCBhbmQgaXQnbGwgYmUgYWJsZSB0byB0ZWxsIHlvdSBpZlxuLy8gYSBnaXZlbiBwYXRoIHNob3VsZCBiZSBpZ25vcmVkLlxuLy8gSWdub3JpbmcgYSBwYXRoIGlnbm9yZXMgaXRzIGNoaWxkcmVuIGlmIHRoZSBwYXR0ZXJuIGVuZHMgaW4gLyoqXG4vLyBJZ25vcmVzIGFyZSBhbHdheXMgcGFyc2VkIGluIGRvdDp0cnVlIG1vZGVcbmltcG9ydCB7IE1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgeyBQYXR0ZXJuIH0gZnJvbSAnLi9wYXR0ZXJuLmpzJztcbmNvbnN0IGRlZmF1bHRQbGF0Zm9ybSA9ICh0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiZcbiAgICBwcm9jZXNzICYmXG4gICAgdHlwZW9mIHByb2Nlc3MucGxhdGZvcm0gPT09ICdzdHJpbmcnKSA/XG4gICAgcHJvY2Vzcy5wbGF0Zm9ybVxuICAgIDogJ2xpbnV4Jztcbi8qKlxuICogQ2xhc3MgdXNlZCB0byBwcm9jZXNzIGlnbm9yZWQgcGF0dGVybnNcbiAqL1xuZXhwb3J0IGNsYXNzIElnbm9yZSB7XG4gICAgcmVsYXRpdmU7XG4gICAgcmVsYXRpdmVDaGlsZHJlbjtcbiAgICBhYnNvbHV0ZTtcbiAgICBhYnNvbHV0ZUNoaWxkcmVuO1xuICAgIHBsYXRmb3JtO1xuICAgIG1tb3B0cztcbiAgICBjb25zdHJ1Y3RvcihpZ25vcmVkLCB7IG5vYnJhY2UsIG5vY2FzZSwgbm9leHQsIG5vZ2xvYnN0YXIsIHBsYXRmb3JtID0gZGVmYXVsdFBsYXRmb3JtLCB9KSB7XG4gICAgICAgIHRoaXMucmVsYXRpdmUgPSBbXTtcbiAgICAgICAgdGhpcy5hYnNvbHV0ZSA9IFtdO1xuICAgICAgICB0aGlzLnJlbGF0aXZlQ2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5hYnNvbHV0ZUNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMucGxhdGZvcm0gPSBwbGF0Zm9ybTtcbiAgICAgICAgdGhpcy5tbW9wdHMgPSB7XG4gICAgICAgICAgICBkb3Q6IHRydWUsXG4gICAgICAgICAgICBub2JyYWNlLFxuICAgICAgICAgICAgbm9jYXNlLFxuICAgICAgICAgICAgbm9leHQsXG4gICAgICAgICAgICBub2dsb2JzdGFyLFxuICAgICAgICAgICAgb3B0aW1pemF0aW9uTGV2ZWw6IDIsXG4gICAgICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgICAgIG5vY29tbWVudDogdHJ1ZSxcbiAgICAgICAgICAgIG5vbmVnYXRlOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IGlnbiBvZiBpZ25vcmVkKVxuICAgICAgICAgICAgdGhpcy5hZGQoaWduKTtcbiAgICB9XG4gICAgYWRkKGlnbikge1xuICAgICAgICAvLyB0aGlzIGlzIGEgbGl0dGxlIHdlaXJkLCBidXQgaXQgZ2l2ZXMgdXMgYSBjbGVhbiBzZXQgb2Ygb3B0aW1pemVkXG4gICAgICAgIC8vIG1pbmltYXRjaCBtYXRjaGVycywgd2l0aG91dCBnZXR0aW5nIHRyaXBwZWQgdXAgaWYgb25lIG9mIHRoZW1cbiAgICAgICAgLy8gZW5kcyBpbiAvKiogaW5zaWRlIGEgYnJhY2Ugc2VjdGlvbiwgYW5kIGl0J3Mgb25seSBpbmVmZmljaWVudCBhdFxuICAgICAgICAvLyB0aGUgc3RhcnQgb2YgdGhlIHdhbGssIG5vdCBhbG9uZyBpdC5cbiAgICAgICAgLy8gSXQnZCBiZSBuaWNlIGlmIHRoZSBQYXR0ZXJuIGNsYXNzIGp1c3QgaGFkIGEgLnRlc3QoKSBtZXRob2QsIGJ1dFxuICAgICAgICAvLyBoYW5kbGluZyBnbG9ic3RhcnMgaXMgYSBiaXQgb2YgYSBwaXRhLCBhbmQgdGhhdCBjb2RlIGFscmVhZHkgbGl2ZXNcbiAgICAgICAgLy8gaW4gbWluaW1hdGNoIGFueXdheS5cbiAgICAgICAgLy8gQW5vdGhlciB3YXkgd291bGQgYmUgaWYgbWF5YmUgTWluaW1hdGNoIGNvdWxkIHRha2UgaXRzIHNldC9nbG9iUGFydHNcbiAgICAgICAgLy8gYXMgYW4gb3B0aW9uLCBhbmQgdGhlbiB3ZSBjb3VsZCBhdCBsZWFzdCBqdXN0IHVzZSBQYXR0ZXJuIHRvIHRlc3RcbiAgICAgICAgLy8gZm9yIGFic29sdXRlLW5lc3MuXG4gICAgICAgIC8vIFlldCBhbm90aGVyIHdheSwgTWluaW1hdGNoIGNvdWxkIHRha2UgYW4gYXJyYXkgb2YgZ2xvYiBzdHJpbmdzLCBhbmRcbiAgICAgICAgLy8gYSBjd2Qgb3B0aW9uLCBhbmQgZG8gdGhlIHJpZ2h0IHRoaW5nLlxuICAgICAgICBjb25zdCBtbSA9IG5ldyBNaW5pbWF0Y2goaWduLCB0aGlzLm1tb3B0cyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW0uc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBtbS5zZXRbaV07XG4gICAgICAgICAgICBjb25zdCBnbG9iUGFydHMgPSBtbS5nbG9iUGFydHNbaV07XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICghcGFyc2VkIHx8ICFnbG9iUGFydHMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcGF0dGVybiBvYmplY3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHN0cmlwIG9mZiBsZWFkaW5nIC4vIHBvcnRpb25zXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL25vZGUtZ2xvYi9pc3N1ZXMvNTcwXG4gICAgICAgICAgICB3aGlsZSAocGFyc2VkWzBdID09PSAnLicgJiYgZ2xvYlBhcnRzWzBdID09PSAnLicpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBnbG9iUGFydHMuc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICBjb25zdCBwID0gbmV3IFBhdHRlcm4ocGFyc2VkLCBnbG9iUGFydHMsIDAsIHRoaXMucGxhdGZvcm0pO1xuICAgICAgICAgICAgY29uc3QgbSA9IG5ldyBNaW5pbWF0Y2gocC5nbG9iU3RyaW5nKCksIHRoaXMubW1vcHRzKTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZ2xvYlBhcnRzW2dsb2JQYXJ0cy5sZW5ndGggLSAxXSA9PT0gJyoqJztcbiAgICAgICAgICAgIGNvbnN0IGFic29sdXRlID0gcC5pc0Fic29sdXRlKCk7XG4gICAgICAgICAgICBpZiAoYWJzb2x1dGUpXG4gICAgICAgICAgICAgICAgdGhpcy5hYnNvbHV0ZS5wdXNoKG0pO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMucmVsYXRpdmUucHVzaChtKTtcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGlmIChhYnNvbHV0ZSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hYnNvbHV0ZUNoaWxkcmVuLnB1c2gobSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlQ2hpbGRyZW4ucHVzaChtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZ25vcmVkKHApIHtcbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSBwLmZ1bGxwYXRoKCk7XG4gICAgICAgIGNvbnN0IGZ1bGxwYXRocyA9IGAke2Z1bGxwYXRofS9gO1xuICAgICAgICBjb25zdCByZWxhdGl2ZSA9IHAucmVsYXRpdmUoKSB8fCAnLic7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlcyA9IGAke3JlbGF0aXZlfS9gO1xuICAgICAgICBmb3IgKGNvbnN0IG0gb2YgdGhpcy5yZWxhdGl2ZSkge1xuICAgICAgICAgICAgaWYgKG0ubWF0Y2gocmVsYXRpdmUpIHx8IG0ubWF0Y2gocmVsYXRpdmVzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IG0gb2YgdGhpcy5hYnNvbHV0ZSkge1xuICAgICAgICAgICAgaWYgKG0ubWF0Y2goZnVsbHBhdGgpIHx8IG0ubWF0Y2goZnVsbHBhdGhzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNoaWxkcmVuSWdub3JlZChwKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gcC5mdWxscGF0aCgpICsgJy8nO1xuICAgICAgICBjb25zdCByZWxhdGl2ZSA9IChwLnJlbGF0aXZlKCkgfHwgJy4nKSArICcvJztcbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHRoaXMucmVsYXRpdmVDaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKG0ubWF0Y2gocmVsYXRpdmUpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiB0aGlzLmFic29sdXRlQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChtLm1hdGNoKGZ1bGxwYXRoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWdub3JlLmpzLm1hcCIsCiAgICAiLy8gc3luY2hyb25vdXMgdXRpbGl0eSBmb3IgZmlsdGVyaW5nIGVudHJpZXMgYW5kIGNhbGN1bGF0aW5nIHN1YndhbGtzXG5pbXBvcnQgeyBHTE9CU1RBUiB9IGZyb20gJ21pbmltYXRjaCc7XG4vKipcbiAqIEEgY2FjaGUgb2Ygd2hpY2ggcGF0dGVybnMgaGF2ZSBiZWVuIHByb2Nlc3NlZCBmb3IgYSBnaXZlbiBQYXRoXG4gKi9cbmV4cG9ydCBjbGFzcyBIYXNXYWxrZWRDYWNoZSB7XG4gICAgc3RvcmU7XG4gICAgY29uc3RydWN0b3Ioc3RvcmUgPSBuZXcgTWFwKCkpIHtcbiAgICAgICAgdGhpcy5zdG9yZSA9IHN0b3JlO1xuICAgIH1cbiAgICBjb3B5KCkge1xuICAgICAgICByZXR1cm4gbmV3IEhhc1dhbGtlZENhY2hlKG5ldyBNYXAodGhpcy5zdG9yZSkpO1xuICAgIH1cbiAgICBoYXNXYWxrZWQodGFyZ2V0LCBwYXR0ZXJuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmdldCh0YXJnZXQuZnVsbHBhdGgoKSk/LmhhcyhwYXR0ZXJuLmdsb2JTdHJpbmcoKSk7XG4gICAgfVxuICAgIHN0b3JlV2Fsa2VkKHRhcmdldCwgcGF0dGVybikge1xuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHRhcmdldC5mdWxscGF0aCgpO1xuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnN0b3JlLmdldChmdWxscGF0aCk7XG4gICAgICAgIGlmIChjYWNoZWQpXG4gICAgICAgICAgICBjYWNoZWQuYWRkKHBhdHRlcm4uZ2xvYlN0cmluZygpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXQoZnVsbHBhdGgsIG5ldyBTZXQoW3BhdHRlcm4uZ2xvYlN0cmluZygpXSkpO1xuICAgIH1cbn1cbi8qKlxuICogQSByZWNvcmQgb2Ygd2hpY2ggcGF0aHMgaGF2ZSBiZWVuIG1hdGNoZWQgaW4gYSBnaXZlbiB3YWxrIHN0ZXAsXG4gKiBhbmQgd2hldGhlciB0aGV5IG9ubHkgYXJlIGNvbnNpZGVyZWQgYSBtYXRjaCBpZiB0aGV5IGFyZSBhIGRpcmVjdG9yeSxcbiAqIGFuZCB3aGV0aGVyIHRoZWlyIGFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggc2hvdWxkIGJlIHJldHVybmVkLlxuICovXG5leHBvcnQgY2xhc3MgTWF0Y2hSZWNvcmQge1xuICAgIHN0b3JlID0gbmV3IE1hcCgpO1xuICAgIGFkZCh0YXJnZXQsIGFic29sdXRlLCBpZkRpcikge1xuICAgICAgICBjb25zdCBuID0gKGFic29sdXRlID8gMiA6IDApIHwgKGlmRGlyID8gMSA6IDApO1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zdG9yZS5nZXQodGFyZ2V0KTtcbiAgICAgICAgdGhpcy5zdG9yZS5zZXQodGFyZ2V0LCBjdXJyZW50ID09PSB1bmRlZmluZWQgPyBuIDogbiAmIGN1cnJlbnQpO1xuICAgIH1cbiAgICAvLyBtYXRjaCwgYWJzb2x1dGUsIGlmZGlyXG4gICAgZW50cmllcygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnN0b3JlLmVudHJpZXMoKV0ubWFwKChbcGF0aCwgbl0pID0+IFtcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAhIShuICYgMiksXG4gICAgICAgICAgICAhIShuICYgMSksXG4gICAgICAgIF0pO1xuICAgIH1cbn1cbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIHBhdHRlcm5zIHRoYXQgbXVzdCBiZSBwcm9jZXNzZWQgaW4gYSBzdWJzZXF1ZW50IHN0ZXBcbiAqIGZvciBhIGdpdmVuIHBhdGguXG4gKi9cbmV4cG9ydCBjbGFzcyBTdWJXYWxrcyB7XG4gICAgc3RvcmUgPSBuZXcgTWFwKCk7XG4gICAgYWRkKHRhcmdldCwgcGF0dGVybikge1xuICAgICAgICBpZiAoIXRhcmdldC5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdWJzID0gdGhpcy5zdG9yZS5nZXQodGFyZ2V0KTtcbiAgICAgICAgaWYgKHN1YnMpIHtcbiAgICAgICAgICAgIGlmICghc3Vicy5maW5kKHAgPT4gcC5nbG9iU3RyaW5nKCkgPT09IHBhdHRlcm4uZ2xvYlN0cmluZygpKSkge1xuICAgICAgICAgICAgICAgIHN1YnMucHVzaChwYXR0ZXJuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNldCh0YXJnZXQsIFtwYXR0ZXJuXSk7XG4gICAgfVxuICAgIGdldCh0YXJnZXQpIHtcbiAgICAgICAgY29uc3Qgc3VicyA9IHRoaXMuc3RvcmUuZ2V0KHRhcmdldCk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoIXN1YnMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYXR0ZW1wdGluZyB0byB3YWxrIHVua25vd24gcGF0aCcpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHJldHVybiBzdWJzO1xuICAgIH1cbiAgICBlbnRyaWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5rZXlzKCkubWFwKGsgPT4gW2ssIHRoaXMuc3RvcmUuZ2V0KGspXSk7XG4gICAgfVxuICAgIGtleXMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5zdG9yZS5rZXlzKCldLmZpbHRlcih0ID0+IHQuY2FuUmVhZGRpcigpKTtcbiAgICB9XG59XG4vKipcbiAqIFRoZSBjbGFzcyB0aGF0IHByb2Nlc3NlcyBwYXR0ZXJucyBmb3IgYSBnaXZlbiBwYXRoLlxuICpcbiAqIEhhbmRsZXMgY2hpbGQgZW50cnkgZmlsdGVyaW5nLCBhbmQgZGV0ZXJtaW5pbmcgd2hldGhlciBhIHBhdGgnc1xuICogZGlyZWN0b3J5IGNvbnRlbnRzIG11c3QgYmUgcmVhZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFByb2Nlc3NvciB7XG4gICAgaGFzV2Fsa2VkQ2FjaGU7XG4gICAgbWF0Y2hlcyA9IG5ldyBNYXRjaFJlY29yZCgpO1xuICAgIHN1YndhbGtzID0gbmV3IFN1YldhbGtzKCk7XG4gICAgcGF0dGVybnM7XG4gICAgZm9sbG93O1xuICAgIGRvdDtcbiAgICBvcHRzO1xuICAgIGNvbnN0cnVjdG9yKG9wdHMsIGhhc1dhbGtlZENhY2hlKSB7XG4gICAgICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgICAgIHRoaXMuZm9sbG93ID0gISFvcHRzLmZvbGxvdztcbiAgICAgICAgdGhpcy5kb3QgPSAhIW9wdHMuZG90O1xuICAgICAgICB0aGlzLmhhc1dhbGtlZENhY2hlID1cbiAgICAgICAgICAgIGhhc1dhbGtlZENhY2hlID8gaGFzV2Fsa2VkQ2FjaGUuY29weSgpIDogbmV3IEhhc1dhbGtlZENhY2hlKCk7XG4gICAgfVxuICAgIHByb2Nlc3NQYXR0ZXJucyh0YXJnZXQsIHBhdHRlcm5zKSB7XG4gICAgICAgIHRoaXMucGF0dGVybnMgPSBwYXR0ZXJucztcbiAgICAgICAgY29uc3QgcHJvY2Vzc2luZ1NldCA9IHBhdHRlcm5zLm1hcChwID0+IFt0YXJnZXQsIHBdKTtcbiAgICAgICAgLy8gbWFwIG9mIHBhdGhzIHRvIHRoZSBtYWdpYy1zdGFydGluZyBzdWJ3YWxrcyB0aGV5IG5lZWQgdG8gd2Fsa1xuICAgICAgICAvLyBmaXJzdCBpdGVtIGluIHBhdHRlcm5zIGlzIHRoZSBmaWx0ZXJcbiAgICAgICAgZm9yIChsZXQgW3QsIHBhdHRlcm5dIG9mIHByb2Nlc3NpbmdTZXQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzV2Fsa2VkQ2FjaGUuc3RvcmVXYWxrZWQodCwgcGF0dGVybik7XG4gICAgICAgICAgICBjb25zdCByb290ID0gcGF0dGVybi5yb290KCk7XG4gICAgICAgICAgICBjb25zdCBhYnNvbHV0ZSA9IHBhdHRlcm4uaXNBYnNvbHV0ZSgpICYmIHRoaXMub3B0cy5hYnNvbHV0ZSAhPT0gZmFsc2U7XG4gICAgICAgICAgICAvLyBzdGFydCBhYnNvbHV0ZSBwYXR0ZXJucyBhdCByb290XG4gICAgICAgICAgICBpZiAocm9vdCkge1xuICAgICAgICAgICAgICAgIHQgPSB0LnJlc29sdmUocm9vdCA9PT0gJy8nICYmIHRoaXMub3B0cy5yb290ICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdHMucm9vdFxuICAgICAgICAgICAgICAgICAgICA6IHJvb3QpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3QgPSBwYXR0ZXJuLnJlc3QoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZCh0LCB0cnVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9IHJlc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuaXNFTk9FTlQoKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCBwO1xuICAgICAgICAgICAgbGV0IHJlc3Q7XG4gICAgICAgICAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgd2hpbGUgKHR5cGVvZiAocCA9IHBhdHRlcm4ucGF0dGVybigpKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAocmVzdCA9IHBhdHRlcm4ucmVzdCgpKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGMgPSB0LnJlc29sdmUocCk7XG4gICAgICAgICAgICAgICAgdCA9IGM7XG4gICAgICAgICAgICAgICAgcGF0dGVybiA9IHJlc3Q7XG4gICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwID0gcGF0dGVybi5wYXR0ZXJuKCk7XG4gICAgICAgICAgICByZXN0ID0gcGF0dGVybi5yZXN0KCk7XG4gICAgICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1dhbGtlZENhY2hlLmhhc1dhbGtlZCh0LCBwYXR0ZXJuKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNXYWxrZWRDYWNoZS5zdG9yZVdhbGtlZCh0LCBwYXR0ZXJuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG5vdyB3ZSBoYXZlIGVpdGhlciBhIGZpbmFsIHN0cmluZyBmb3IgYSBrbm93biBlbnRyeSxcbiAgICAgICAgICAgIC8vIG1vcmUgc3RyaW5ncyBmb3IgYW4gdW5rbm93biBlbnRyeSxcbiAgICAgICAgICAgIC8vIG9yIGEgcGF0dGVybiBzdGFydGluZyB3aXRoIG1hZ2ljLCBtb3VudGVkIG9uIHQuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gbXVzdCBub3QgYmUgZmluYWwgZW50cnksIG90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlXG4gICAgICAgICAgICAgICAgLy8gY29uY2F0ZW5hdGVkIGl0IGVhcmxpZXIuXG4gICAgICAgICAgICAgICAgY29uc3QgaWZEaXIgPSBwID09PSAnLi4nIHx8IHAgPT09ICcnIHx8IHAgPT09ICcuJztcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKHQucmVzb2x2ZShwKSwgYWJzb2x1dGUsIGlmRGlyKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHAgPT09IEdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgbm8gcmVzdCwgbWF0Y2ggYW5kIHN1YndhbGsgcGF0dGVyblxuICAgICAgICAgICAgICAgIC8vIGlmIHJlc3QsIHByb2Nlc3MgcmVzdCBhbmQgc3Vid2FsayBwYXR0ZXJuXG4gICAgICAgICAgICAgICAgLy8gaWYgaXQncyBhIHN5bWxpbmssIGJ1dCB3ZSBkaWRuJ3QgZ2V0IGhlcmUgYnkgd2F5IG9mIGFcbiAgICAgICAgICAgICAgICAvLyBnbG9ic3RhciBtYXRjaCAobWVhbmluZyBpdCdzIHRoZSBmaXJzdCB0aW1lIFRISVMgZ2xvYnN0YXJcbiAgICAgICAgICAgICAgICAvLyBoYXMgdHJhdmVyc2VkIGEgc3ltbGluayksIHRoZW4gd2UgZm9sbG93IGl0LiBPdGhlcndpc2UsIHN0b3AuXG4gICAgICAgICAgICAgICAgaWYgKCF0LmlzU3ltYm9saWNMaW5rKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2xsb3cgfHxcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybi5jaGVja0ZvbGxvd0dsb2JzdGFyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQodCwgcGF0dGVybik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJwID0gcmVzdD8ucGF0dGVybigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJyZXN0ID0gcmVzdD8ucmVzdCgpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzdCB8fCAoKHJwID09PSAnJyB8fCBycCA9PT0gJy4nKSAmJiAhcnJlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgSEFTIHRvIGJlIGEgZGlyIGlmIGl0IGVuZHMgaW4gKiovIG9yICoqLy5cbiAgICAgICAgICAgICAgICAgICAgLy8gYnV0IGVuZGluZyBpbiAqKiB3aWxsIG1hdGNoIGZpbGVzIGFzIHdlbGwuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQodCwgYWJzb2x1dGUsIHJwID09PSAnJyB8fCBycCA9PT0gJy4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChycCA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB3b3VsZCBtZWFuIHlvdSdyZSBtYXRjaGluZyAqKi8uLiBhdCB0aGUgZnMgcm9vdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBubyB0aGFua3MsIEknbSBub3QgZ29ubmEgdGVzdCB0aGF0IHNwZWNpZmljIGNhc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRwID0gdC5wYXJlbnQgfHwgdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJyZXN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQodHAsIGFic29sdXRlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLmhhc1dhbGtlZENhY2hlLmhhc1dhbGtlZCh0cCwgcnJlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQodHAsIHJyZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZCh0LCBwYXR0ZXJuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc3Vid2Fsa1RhcmdldHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YndhbGtzLmtleXMoKTtcbiAgICB9XG4gICAgY2hpbGQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvY2Vzc29yKHRoaXMub3B0cywgdGhpcy5oYXNXYWxrZWRDYWNoZSk7XG4gICAgfVxuICAgIC8vIHJldHVybiBhIG5ldyBQcm9jZXNzb3IgY29udGFpbmluZyB0aGUgc3Vid2Fsa3MgZm9yIGVhY2hcbiAgICAvLyBjaGlsZCBlbnRyeSwgYW5kIGEgc2V0IG9mIG1hdGNoZXMsIGFuZFxuICAgIC8vIGEgaGFzV2Fsa2VkQ2FjaGUgdGhhdCdzIGEgY29weSBvZiB0aGlzIG9uZVxuICAgIC8vIHRoZW4gd2UncmUgZ29pbmcgdG8gY2FsbFxuICAgIGZpbHRlckVudHJpZXMocGFyZW50LCBlbnRyaWVzKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gdGhpcy5zdWJ3YWxrcy5nZXQocGFyZW50KTtcbiAgICAgICAgLy8gcHV0IG1hdGNoZXMgYW5kIGVudHJ5IHdhbGtzIGludG8gdGhlIHJlc3VsdHMgcHJvY2Vzc29yXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmNoaWxkKCk7XG4gICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhYnNvbHV0ZSA9IHBhdHRlcm4uaXNBYnNvbHV0ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXR0ZXJuLnBhdHRlcm4oKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN0ID0gcGF0dGVybi5yZXN0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHAgPT09IEdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMudGVzdEdsb2JzdGFyKGUsIHBhdHRlcm4sIHJlc3QsIGFic29sdXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnRlc3RSZWdFeHAoZSwgcCwgcmVzdCwgYWJzb2x1dGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy50ZXN0U3RyaW5nKGUsIHAsIHJlc3QsIGFic29sdXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHRlc3RHbG9ic3RhcihlLCBwYXR0ZXJuLCByZXN0LCBhYnNvbHV0ZSkge1xuICAgICAgICBpZiAodGhpcy5kb3QgfHwgIWUubmFtZS5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgICAgIGlmICghcGF0dGVybi5oYXNNb3JlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKGUsIGFic29sdXRlLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSdyZSBpbiBmb2xsb3cgbW9kZSBvciBpdCdzIG5vdCBhIHN5bWxpbmssIGp1c3Qga2VlcFxuICAgICAgICAgICAgICAgIC8vIHRlc3RpbmcgdGhlIHNhbWUgcGF0dGVybi4gSWYgdGhlcmUncyBtb3JlIGFmdGVyIHRoZSBnbG9ic3RhcixcbiAgICAgICAgICAgICAgICAvLyB0aGVuIHRoaXMgc3ltbGluayBjb25zdW1lcyB0aGUgZ2xvYnN0YXIuIElmIG5vdCwgdGhlbiB3ZSBjYW5cbiAgICAgICAgICAgICAgICAvLyBmb2xsb3cgYXQgbW9zdCBPTkUgc3ltbGluayBhbG9uZyB0aGUgd2F5LCBzbyB3ZSBtYXJrIGl0LCB3aGljaFxuICAgICAgICAgICAgICAgIC8vIGFsc28gY2hlY2tzIHRvIGVuc3VyZSB0aGF0IGl0IHdhc24ndCBhbHJlYWR5IG1hcmtlZC5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb2xsb3cgfHwgIWUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlLCBwYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN0ICYmIHBhdHRlcm4uY2hlY2tGb2xsb3dHbG9ic3RhcigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlLCByZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwYXR0ZXJuLm1hcmtGb2xsb3dHbG9ic3RhcigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlLCBwYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB0aGUgTkVYVCB0aGluZyBtYXRjaGVzIHRoaXMgZW50cnksIHRoZW4gYWxzbyBhZGRcbiAgICAgICAgLy8gdGhlIHJlc3QuXG4gICAgICAgIGlmIChyZXN0KSB7XG4gICAgICAgICAgICBjb25zdCBycCA9IHJlc3QucGF0dGVybigpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBycCA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAvLyBkb3RzIGFuZCBlbXB0eSB3ZXJlIGhhbmRsZWQgYWxyZWFkeVxuICAgICAgICAgICAgICAgIHJwICE9PSAnLi4nICYmXG4gICAgICAgICAgICAgICAgcnAgIT09ICcnICYmXG4gICAgICAgICAgICAgICAgcnAgIT09ICcuJykge1xuICAgICAgICAgICAgICAgIHRoaXMudGVzdFN0cmluZyhlLCBycCwgcmVzdC5yZXN0KCksIGFic29sdXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJwID09PSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgY29uc3QgZXAgPSBlLnBhcmVudCB8fCBlO1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZXAsIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocnAgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlc3RSZWdFeHAoZSwgcnAsIHJlc3QucmVzdCgpLCBhYnNvbHV0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGVzdFJlZ0V4cChlLCBwLCByZXN0LCBhYnNvbHV0ZSkge1xuICAgICAgICBpZiAoIXAudGVzdChlLm5hbWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXJlc3QpIHtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQoZSwgYWJzb2x1dGUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKGUsIHJlc3QpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRlc3RTdHJpbmcoZSwgcCwgcmVzdCwgYWJzb2x1dGUpIHtcbiAgICAgICAgLy8gc2hvdWxkIG5ldmVyIGhhcHBlbj9cbiAgICAgICAgaWYgKCFlLmlzTmFtZWQocCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghcmVzdCkge1xuICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZChlLCBhYnNvbHV0ZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZSwgcmVzdCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm9jZXNzb3IuanMubWFwIiwKICAgICIvKipcbiAqIFNpbmdsZS11c2UgdXRpbGl0eSBjbGFzc2VzIHRvIHByb3ZpZGUgZnVuY3Rpb25hbGl0eSB0byB0aGUge0BsaW5rIEdsb2J9XG4gKiBtZXRob2RzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuaW1wb3J0IHsgTWluaXBhc3MgfSBmcm9tICdtaW5pcGFzcyc7XG5pbXBvcnQgeyBJZ25vcmUgfSBmcm9tICcuL2lnbm9yZS5qcyc7XG5pbXBvcnQgeyBQcm9jZXNzb3IgfSBmcm9tICcuL3Byb2Nlc3Nvci5qcyc7XG5jb25zdCBtYWtlSWdub3JlID0gKGlnbm9yZSwgb3B0cykgPT4gdHlwZW9mIGlnbm9yZSA9PT0gJ3N0cmluZycgPyBuZXcgSWdub3JlKFtpZ25vcmVdLCBvcHRzKVxuICAgIDogQXJyYXkuaXNBcnJheShpZ25vcmUpID8gbmV3IElnbm9yZShpZ25vcmUsIG9wdHMpXG4gICAgICAgIDogaWdub3JlO1xuLyoqXG4gKiBiYXNpYyB3YWxraW5nIHV0aWxpdGllcyB0aGF0IGFsbCB0aGUgZ2xvYiB3YWxrZXIgdHlwZXMgdXNlXG4gKi9cbmV4cG9ydCBjbGFzcyBHbG9iVXRpbCB7XG4gICAgcGF0aDtcbiAgICBwYXR0ZXJucztcbiAgICBvcHRzO1xuICAgIHNlZW4gPSBuZXcgU2V0KCk7XG4gICAgcGF1c2VkID0gZmFsc2U7XG4gICAgYWJvcnRlZCA9IGZhbHNlO1xuICAgICNvblJlc3VtZSA9IFtdO1xuICAgICNpZ25vcmU7XG4gICAgI3NlcDtcbiAgICBzaWduYWw7XG4gICAgbWF4RGVwdGg7XG4gICAgaW5jbHVkZUNoaWxkTWF0Y2hlcztcbiAgICBjb25zdHJ1Y3RvcihwYXR0ZXJucywgcGF0aCwgb3B0cykge1xuICAgICAgICB0aGlzLnBhdHRlcm5zID0gcGF0dGVybnM7XG4gICAgICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgICAgIHRoaXMuI3NlcCA9ICFvcHRzLnBvc2l4ICYmIG9wdHMucGxhdGZvcm0gPT09ICd3aW4zMicgPyAnXFxcXCcgOiAnLyc7XG4gICAgICAgIHRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyA9IG9wdHMuaW5jbHVkZUNoaWxkTWF0Y2hlcyAhPT0gZmFsc2U7XG4gICAgICAgIGlmIChvcHRzLmlnbm9yZSB8fCAhdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzKSB7XG4gICAgICAgICAgICB0aGlzLiNpZ25vcmUgPSBtYWtlSWdub3JlKG9wdHMuaWdub3JlID8/IFtdLCBvcHRzKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMuI2lnbm9yZS5hZGQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtID0gJ2Nhbm5vdCBpZ25vcmUgY2hpbGQgbWF0Y2hlcywgaWdub3JlIGxhY2tzIGFkZCgpIG1ldGhvZC4nO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBpZ25vcmUsIGFsd2F5cyBzZXQgd2l0aCBtYXhEZXB0aCwgYnV0IGl0J3Mgb3B0aW9uYWwgb24gdGhlXG4gICAgICAgIC8vIEdsb2JPcHRpb25zIHR5cGVcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIHRoaXMubWF4RGVwdGggPSBvcHRzLm1heERlcHRoIHx8IEluZmluaXR5O1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICBpZiAob3B0cy5zaWduYWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2lnbmFsID0gb3B0cy5zaWduYWw7XG4gICAgICAgICAgICB0aGlzLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLiNvblJlc3VtZS5sZW5ndGggPSAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI2lnbm9yZWQocGF0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWVuLmhhcyhwYXRoKSB8fCAhIXRoaXMuI2lnbm9yZT8uaWdub3JlZD8uKHBhdGgpO1xuICAgIH1cbiAgICAjY2hpbGRyZW5JZ25vcmVkKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy4jaWdub3JlPy5jaGlsZHJlbklnbm9yZWQ/LihwYXRoKTtcbiAgICB9XG4gICAgLy8gYmFja3ByZXNzdXJlIG1lY2hhbmlzbVxuICAgIHBhdXNlKCkge1xuICAgICAgICB0aGlzLnBhdXNlZCA9IHRydWU7XG4gICAgfVxuICAgIHJlc3VtZSgpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IGZuID0gdW5kZWZpbmVkO1xuICAgICAgICB3aGlsZSAoIXRoaXMucGF1c2VkICYmIChmbiA9IHRoaXMuI29uUmVzdW1lLnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uUmVzdW1lKGZuKSB7XG4gICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICghdGhpcy5wYXVzZWQpIHtcbiAgICAgICAgICAgIGZuKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgdGhpcy4jb25SZXN1bWUucHVzaChmbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gZG8gdGhlIHJlcXVpc2l0ZSByZWFscGF0aC9zdGF0IGNoZWNraW5nLCBhbmQgcmV0dXJuIHRoZSBwYXRoXG4gICAgLy8gdG8gYWRkIG9yIHVuZGVmaW5lZCB0byBmaWx0ZXIgaXQgb3V0LlxuICAgIGFzeW5jIG1hdGNoQ2hlY2soZSwgaWZEaXIpIHtcbiAgICAgICAgaWYgKGlmRGlyICYmIHRoaXMub3B0cy5ub2RpcilcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBycGM7XG4gICAgICAgIGlmICh0aGlzLm9wdHMucmVhbHBhdGgpIHtcbiAgICAgICAgICAgIHJwYyA9IGUucmVhbHBhdGhDYWNoZWQoKSB8fCAoYXdhaXQgZS5yZWFscGF0aCgpKTtcbiAgICAgICAgICAgIGlmICghcnBjKVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBlID0gcnBjO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5lZWRTdGF0ID0gZS5pc1Vua25vd24oKSB8fCB0aGlzLm9wdHMuc3RhdDtcbiAgICAgICAgY29uc3QgcyA9IG5lZWRTdGF0ID8gYXdhaXQgZS5sc3RhdCgpIDogZTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5mb2xsb3cgJiYgdGhpcy5vcHRzLm5vZGlyICYmIHM/LmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGF3YWl0IHMucmVhbHBhdGgoKTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgaWYgKHRhcmdldCAmJiAodGFyZ2V0LmlzVW5rbm93bigpIHx8IHRoaXMub3B0cy5zdGF0KSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRhcmdldC5sc3RhdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5tYXRjaENoZWNrVGVzdChzLCBpZkRpcik7XG4gICAgfVxuICAgIG1hdGNoQ2hlY2tUZXN0KGUsIGlmRGlyKSB7XG4gICAgICAgIHJldHVybiAoZSAmJlxuICAgICAgICAgICAgKHRoaXMubWF4RGVwdGggPT09IEluZmluaXR5IHx8IGUuZGVwdGgoKSA8PSB0aGlzLm1heERlcHRoKSAmJlxuICAgICAgICAgICAgKCFpZkRpciB8fCBlLmNhblJlYWRkaXIoKSkgJiZcbiAgICAgICAgICAgICghdGhpcy5vcHRzLm5vZGlyIHx8ICFlLmlzRGlyZWN0b3J5KCkpICYmXG4gICAgICAgICAgICAoIXRoaXMub3B0cy5ub2RpciB8fFxuICAgICAgICAgICAgICAgICF0aGlzLm9wdHMuZm9sbG93IHx8XG4gICAgICAgICAgICAgICAgIWUuaXNTeW1ib2xpY0xpbmsoKSB8fFxuICAgICAgICAgICAgICAgICFlLnJlYWxwYXRoQ2FjaGVkKCk/LmlzRGlyZWN0b3J5KCkpICYmXG4gICAgICAgICAgICAhdGhpcy4jaWdub3JlZChlKSkgP1xuICAgICAgICAgICAgZVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIG1hdGNoQ2hlY2tTeW5jKGUsIGlmRGlyKSB7XG4gICAgICAgIGlmIChpZkRpciAmJiB0aGlzLm9wdHMubm9kaXIpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcnBjO1xuICAgICAgICBpZiAodGhpcy5vcHRzLnJlYWxwYXRoKSB7XG4gICAgICAgICAgICBycGMgPSBlLnJlYWxwYXRoQ2FjaGVkKCkgfHwgZS5yZWFscGF0aFN5bmMoKTtcbiAgICAgICAgICAgIGlmICghcnBjKVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBlID0gcnBjO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5lZWRTdGF0ID0gZS5pc1Vua25vd24oKSB8fCB0aGlzLm9wdHMuc3RhdDtcbiAgICAgICAgY29uc3QgcyA9IG5lZWRTdGF0ID8gZS5sc3RhdFN5bmMoKSA6IGU7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZm9sbG93ICYmIHRoaXMub3B0cy5ub2RpciAmJiBzPy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBzLnJlYWxwYXRoU3luYygpO1xuICAgICAgICAgICAgaWYgKHRhcmdldCAmJiAodGFyZ2V0Py5pc1Vua25vd24oKSB8fCB0aGlzLm9wdHMuc3RhdCkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQubHN0YXRTeW5jKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hDaGVja1Rlc3QocywgaWZEaXIpO1xuICAgIH1cbiAgICBtYXRjaEZpbmlzaChlLCBhYnNvbHV0ZSkge1xuICAgICAgICBpZiAodGhpcy4jaWdub3JlZChlKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLy8gd2Uga25vdyB3ZSBoYXZlIGFuIGlnbm9yZSBpZiB0aGlzIGlzIGZhbHNlLCBidXQgVFMgZG9lc24ndFxuICAgICAgICBpZiAoIXRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyAmJiB0aGlzLiNpZ25vcmU/LmFkZCkge1xuICAgICAgICAgICAgY29uc3QgaWduID0gYCR7ZS5yZWxhdGl2ZVBvc2l4KCl9LyoqYDtcbiAgICAgICAgICAgIHRoaXMuI2lnbm9yZS5hZGQoaWduKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhYnMgPSB0aGlzLm9wdHMuYWJzb2x1dGUgPT09IHVuZGVmaW5lZCA/IGFic29sdXRlIDogdGhpcy5vcHRzLmFic29sdXRlO1xuICAgICAgICB0aGlzLnNlZW4uYWRkKGUpO1xuICAgICAgICBjb25zdCBtYXJrID0gdGhpcy5vcHRzLm1hcmsgJiYgZS5pc0RpcmVjdG9yeSgpID8gdGhpcy4jc2VwIDogJyc7XG4gICAgICAgIC8vIG9rLCB3ZSBoYXZlIHdoYXQgd2UgbmVlZCFcbiAgICAgICAgaWYgKHRoaXMub3B0cy53aXRoRmlsZVR5cGVzKSB7XG4gICAgICAgICAgICB0aGlzLm1hdGNoRW1pdChlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhYnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFicyA9IHRoaXMub3B0cy5wb3NpeCA/IGUuZnVsbHBhdGhQb3NpeCgpIDogZS5mdWxscGF0aCgpO1xuICAgICAgICAgICAgdGhpcy5tYXRjaEVtaXQoYWJzICsgbWFyayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZWwgPSB0aGlzLm9wdHMucG9zaXggPyBlLnJlbGF0aXZlUG9zaXgoKSA6IGUucmVsYXRpdmUoKTtcbiAgICAgICAgICAgIGNvbnN0IHByZSA9IHRoaXMub3B0cy5kb3RSZWxhdGl2ZSAmJiAhcmVsLnN0YXJ0c1dpdGgoJy4uJyArIHRoaXMuI3NlcCkgP1xuICAgICAgICAgICAgICAgICcuJyArIHRoaXMuI3NlcFxuICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoRW1pdCghcmVsID8gJy4nICsgbWFyayA6IHByZSArIHJlbCArIG1hcmspO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIG1hdGNoKGUsIGFic29sdXRlLCBpZkRpcikge1xuICAgICAgICBjb25zdCBwID0gYXdhaXQgdGhpcy5tYXRjaENoZWNrKGUsIGlmRGlyKTtcbiAgICAgICAgaWYgKHApXG4gICAgICAgICAgICB0aGlzLm1hdGNoRmluaXNoKHAsIGFic29sdXRlKTtcbiAgICB9XG4gICAgbWF0Y2hTeW5jKGUsIGFic29sdXRlLCBpZkRpcikge1xuICAgICAgICBjb25zdCBwID0gdGhpcy5tYXRjaENoZWNrU3luYyhlLCBpZkRpcik7XG4gICAgICAgIGlmIChwKVxuICAgICAgICAgICAgdGhpcy5tYXRjaEZpbmlzaChwLCBhYnNvbHV0ZSk7XG4gICAgfVxuICAgIHdhbGtDQih0YXJnZXQsIHBhdHRlcm5zLCBjYikge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy53YWxrQ0IyKHRhcmdldCwgcGF0dGVybnMsIG5ldyBQcm9jZXNzb3IodGhpcy5vcHRzKSwgY2IpO1xuICAgIH1cbiAgICB3YWxrQ0IyKHRhcmdldCwgcGF0dGVybnMsIHByb2Nlc3NvciwgY2IpIHtcbiAgICAgICAgaWYgKHRoaXMuI2NoaWxkcmVuSWdub3JlZCh0YXJnZXQpKVxuICAgICAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIGlmICh0aGlzLnBhdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5vblJlc3VtZSgoKSA9PiB0aGlzLndhbGtDQjIodGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLCBjYikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3Nvci5wcm9jZXNzUGF0dGVybnModGFyZ2V0LCBwYXR0ZXJucyk7XG4gICAgICAgIC8vIGRvbmUgcHJvY2Vzc2luZy4gIGFsbCBvZiB0aGUgYWJvdmUgaXMgc3luYywgY2FuIGJlIGFic3RyYWN0ZWQgb3V0LlxuICAgICAgICAvLyBzdWJ3YWxrcyBpcyBhIG1hcCBvZiBwYXRocyB0byB0aGUgZW50cnkgZmlsdGVycyB0aGV5IG5lZWRcbiAgICAgICAgLy8gbWF0Y2hlcyBpcyBhIG1hcCBvZiBwYXRocyB0byBbYWJzb2x1dGUsIGlmRGlyXSB0dXBsZXMuXG4gICAgICAgIGxldCB0YXNrcyA9IDE7XG4gICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoLS10YXNrcyA9PT0gMClcbiAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IFttLCBhYnNvbHV0ZSwgaWZEaXJdIG9mIHByb2Nlc3Nvci5tYXRjaGVzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lnbm9yZWQobSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB0YXNrcysrO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChtLCBhYnNvbHV0ZSwgaWZEaXIpLnRoZW4oKCkgPT4gbmV4dCgpKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHQgb2YgcHJvY2Vzc29yLnN1YndhbGtUYXJnZXRzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSAmJiB0LmRlcHRoKCkgPj0gdGhpcy5tYXhEZXB0aCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuQ2FjaGVkID0gdC5yZWFkZGlyQ2FjaGVkKCk7XG4gICAgICAgICAgICBpZiAodC5jYWxsZWRSZWFkZGlyKCkpXG4gICAgICAgICAgICAgICAgdGhpcy53YWxrQ0IzKHQsIGNoaWxkcmVuQ2FjaGVkLCBwcm9jZXNzb3IsIG5leHQpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdC5yZWFkZGlyQ0IoKF8sIGVudHJpZXMpID0+IHRoaXMud2Fsa0NCMyh0LCBlbnRyaWVzLCBwcm9jZXNzb3IsIG5leHQpLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfVxuICAgIHdhbGtDQjModGFyZ2V0LCBlbnRyaWVzLCBwcm9jZXNzb3IsIGNiKSB7XG4gICAgICAgIHByb2Nlc3NvciA9IHByb2Nlc3Nvci5maWx0ZXJFbnRyaWVzKHRhcmdldCwgZW50cmllcyk7XG4gICAgICAgIGxldCB0YXNrcyA9IDE7XG4gICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoLS10YXNrcyA9PT0gMClcbiAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IFttLCBhYnNvbHV0ZSwgaWZEaXJdIG9mIHByb2Nlc3Nvci5tYXRjaGVzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lnbm9yZWQobSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB0YXNrcysrO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChtLCBhYnNvbHV0ZSwgaWZEaXIpLnRoZW4oKCkgPT4gbmV4dCgpKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFt0YXJnZXQsIHBhdHRlcm5zXSBvZiBwcm9jZXNzb3Iuc3Vid2Fsa3MuZW50cmllcygpKSB7XG4gICAgICAgICAgICB0YXNrcysrO1xuICAgICAgICAgICAgdGhpcy53YWxrQ0IyKHRhcmdldCwgcGF0dGVybnMsIHByb2Nlc3Nvci5jaGlsZCgpLCBuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfVxuICAgIHdhbGtDQlN5bmModGFyZ2V0LCBwYXR0ZXJucywgY2IpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRoaXMud2Fsa0NCMlN5bmModGFyZ2V0LCBwYXR0ZXJucywgbmV3IFByb2Nlc3Nvcih0aGlzLm9wdHMpLCBjYik7XG4gICAgfVxuICAgIHdhbGtDQjJTeW5jKHRhcmdldCwgcGF0dGVybnMsIHByb2Nlc3NvciwgY2IpIHtcbiAgICAgICAgaWYgKHRoaXMuI2NoaWxkcmVuSWdub3JlZCh0YXJnZXQpKVxuICAgICAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIGlmICh0aGlzLnBhdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5vblJlc3VtZSgoKSA9PiB0aGlzLndhbGtDQjJTeW5jKHRhcmdldCwgcGF0dGVybnMsIHByb2Nlc3NvciwgY2IpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzb3IucHJvY2Vzc1BhdHRlcm5zKHRhcmdldCwgcGF0dGVybnMpO1xuICAgICAgICAvLyBkb25lIHByb2Nlc3NpbmcuICBhbGwgb2YgdGhlIGFib3ZlIGlzIHN5bmMsIGNhbiBiZSBhYnN0cmFjdGVkIG91dC5cbiAgICAgICAgLy8gc3Vid2Fsa3MgaXMgYSBtYXAgb2YgcGF0aHMgdG8gdGhlIGVudHJ5IGZpbHRlcnMgdGhleSBuZWVkXG4gICAgICAgIC8vIG1hdGNoZXMgaXMgYSBtYXAgb2YgcGF0aHMgdG8gW2Fic29sdXRlLCBpZkRpcl0gdHVwbGVzLlxuICAgICAgICBsZXQgdGFza3MgPSAxO1xuICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKC0tdGFza3MgPT09IDApXG4gICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBbbSwgYWJzb2x1dGUsIGlmRGlyXSBvZiBwcm9jZXNzb3IubWF0Y2hlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNpZ25vcmVkKG0pKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGhpcy5tYXRjaFN5bmMobSwgYWJzb2x1dGUsIGlmRGlyKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHQgb2YgcHJvY2Vzc29yLnN1YndhbGtUYXJnZXRzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSAmJiB0LmRlcHRoKCkgPj0gdGhpcy5tYXhEZXB0aCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdC5yZWFkZGlyU3luYygpO1xuICAgICAgICAgICAgdGhpcy53YWxrQ0IzU3luYyh0LCBjaGlsZHJlbiwgcHJvY2Vzc29yLCBuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfVxuICAgIHdhbGtDQjNTeW5jKHRhcmdldCwgZW50cmllcywgcHJvY2Vzc29yLCBjYikge1xuICAgICAgICBwcm9jZXNzb3IgPSBwcm9jZXNzb3IuZmlsdGVyRW50cmllcyh0YXJnZXQsIGVudHJpZXMpO1xuICAgICAgICBsZXQgdGFza3MgPSAxO1xuICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKC0tdGFza3MgPT09IDApXG4gICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBbbSwgYWJzb2x1dGUsIGlmRGlyXSBvZiBwcm9jZXNzb3IubWF0Y2hlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNpZ25vcmVkKG0pKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGhpcy5tYXRjaFN5bmMobSwgYWJzb2x1dGUsIGlmRGlyKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFt0YXJnZXQsIHBhdHRlcm5zXSBvZiBwcm9jZXNzb3Iuc3Vid2Fsa3MuZW50cmllcygpKSB7XG4gICAgICAgICAgICB0YXNrcysrO1xuICAgICAgICAgICAgdGhpcy53YWxrQ0IyU3luYyh0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IuY2hpbGQoKSwgbmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBHbG9iV2Fsa2VyIGV4dGVuZHMgR2xvYlV0aWwge1xuICAgIG1hdGNoZXMgPSBuZXcgU2V0KCk7XG4gICAgY29uc3RydWN0b3IocGF0dGVybnMsIHBhdGgsIG9wdHMpIHtcbiAgICAgICAgc3VwZXIocGF0dGVybnMsIHBhdGgsIG9wdHMpO1xuICAgIH1cbiAgICBtYXRjaEVtaXQoZSkge1xuICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKGUpO1xuICAgIH1cbiAgICBhc3luYyB3YWxrKCkge1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICB0aHJvdyB0aGlzLnNpZ25hbC5yZWFzb247XG4gICAgICAgIGlmICh0aGlzLnBhdGguaXNVbmtub3duKCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucGF0aC5sc3RhdCgpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgdGhpcy53YWxrQ0IodGhpcy5wYXRoLCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlaih0aGlzLnNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzKHRoaXMubWF0Y2hlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXRjaGVzO1xuICAgIH1cbiAgICB3YWxrU3luYygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgdGhyb3cgdGhpcy5zaWduYWwucmVhc29uO1xuICAgICAgICBpZiAodGhpcy5wYXRoLmlzVW5rbm93bigpKSB7XG4gICAgICAgICAgICB0aGlzLnBhdGgubHN0YXRTeW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm90aGluZyBmb3IgdGhlIGNhbGxiYWNrIHRvIGRvLCBiZWNhdXNlIHRoaXMgbmV2ZXIgcGF1c2VzXG4gICAgICAgIHRoaXMud2Fsa0NCU3luYyh0aGlzLnBhdGgsIHRoaXMucGF0dGVybnMsICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgICAgICB0aHJvdyB0aGlzLnNpZ25hbC5yZWFzb247XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXRjaGVzO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBHbG9iU3RyZWFtIGV4dGVuZHMgR2xvYlV0aWwge1xuICAgIHJlc3VsdHM7XG4gICAgY29uc3RydWN0b3IocGF0dGVybnMsIHBhdGgsIG9wdHMpIHtcbiAgICAgICAgc3VwZXIocGF0dGVybnMsIHBhdGgsIG9wdHMpO1xuICAgICAgICB0aGlzLnJlc3VsdHMgPSBuZXcgTWluaXBhc3Moe1xuICAgICAgICAgICAgc2lnbmFsOiB0aGlzLnNpZ25hbCxcbiAgICAgICAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc3VsdHMub24oJ2RyYWluJywgKCkgPT4gdGhpcy5yZXN1bWUoKSk7XG4gICAgICAgIHRoaXMucmVzdWx0cy5vbigncmVzdW1lJywgKCkgPT4gdGhpcy5yZXN1bWUoKSk7XG4gICAgfVxuICAgIG1hdGNoRW1pdChlKSB7XG4gICAgICAgIHRoaXMucmVzdWx0cy53cml0ZShlKTtcbiAgICAgICAgaWYgKCF0aGlzLnJlc3VsdHMuZmxvd2luZylcbiAgICAgICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICB9XG4gICAgc3RyZWFtKCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnBhdGg7XG4gICAgICAgIGlmICh0YXJnZXQuaXNVbmtub3duKCkpIHtcbiAgICAgICAgICAgIHRhcmdldC5sc3RhdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMud2Fsa0NCKHRhcmdldCwgdGhpcy5wYXR0ZXJucywgKCkgPT4gdGhpcy5yZXN1bHRzLmVuZCgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53YWxrQ0IodGFyZ2V0LCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB0aGlzLnJlc3VsdHMuZW5kKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHM7XG4gICAgfVxuICAgIHN0cmVhbVN5bmMoKSB7XG4gICAgICAgIGlmICh0aGlzLnBhdGguaXNVbmtub3duKCkpIHtcbiAgICAgICAgICAgIHRoaXMucGF0aC5sc3RhdFN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndhbGtDQlN5bmModGhpcy5wYXRoLCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB0aGlzLnJlc3VsdHMuZW5kKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdhbGtlci5qcy5tYXAiLAogICAgImltcG9ydCB7IE1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBwYXR0ZXJucyBwcm92aWRlZCBjb250YWluIGFueSBtYWdpYyBnbG9iIGNoYXJhY3RlcnMsXG4gKiBnaXZlbiB0aGUgb3B0aW9ucyBwcm92aWRlZC5cbiAqXG4gKiBCcmFjZSBleHBhbnNpb24gaXMgbm90IGNvbnNpZGVyZWQgXCJtYWdpY1wiIHVubGVzcyB0aGUgYG1hZ2ljYWxCcmFjZXNgIG9wdGlvblxuICogaXMgc2V0LCBhcyBicmFjZSBleHBhbnNpb24ganVzdCB0dXJucyBvbmUgc3RyaW5nIGludG8gYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIFNvIGEgcGF0dGVybiBsaWtlIGAneHthLGJ9eSdgIHdvdWxkIHJldHVybiBgZmFsc2VgLCBiZWNhdXNlIGAneGF5J2AgYW5kXG4gKiBgJ3hieSdgIGJvdGggZG8gbm90IGNvbnRhaW4gYW55IG1hZ2ljIGdsb2IgY2hhcmFjdGVycywgYW5kIGl0J3MgdHJlYXRlZCB0aGVcbiAqIHNhbWUgYXMgaWYgeW91IGhhZCBjYWxsZWQgaXQgb24gYFsneGF5JywgJ3hieSddYC4gV2hlbiBgbWFnaWNhbEJyYWNlczp0cnVlYFxuICogaXMgaW4gdGhlIG9wdGlvbnMsIGJyYWNlIGV4cGFuc2lvbiBfaXNfIHRyZWF0ZWQgYXMgYSBwYXR0ZXJuIGhhdmluZyBtYWdpYy5cbiAqL1xuZXhwb3J0IGNvbnN0IGhhc01hZ2ljID0gKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwYXR0ZXJuKSkge1xuICAgICAgICBwYXR0ZXJuID0gW3BhdHRlcm5dO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHAgb2YgcGF0dGVybikge1xuICAgICAgICBpZiAobmV3IE1pbmltYXRjaChwLCBvcHRpb25zKS5oYXNNYWdpYygpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYXMtbWFnaWMuanMubWFwIiwKICAgICJpbXBvcnQgeyBlc2NhcGUsIHVuZXNjYXBlIH0gZnJvbSAnbWluaW1hdGNoJztcbmltcG9ydCB7IEdsb2IgfSBmcm9tICcuL2dsb2IuanMnO1xuaW1wb3J0IHsgaGFzTWFnaWMgfSBmcm9tICcuL2hhcy1tYWdpYy5qcyc7XG5leHBvcnQgeyBlc2NhcGUsIHVuZXNjYXBlIH0gZnJvbSAnbWluaW1hdGNoJztcbmV4cG9ydCB7IEdsb2IgfSBmcm9tICcuL2dsb2IuanMnO1xuZXhwb3J0IHsgaGFzTWFnaWMgfSBmcm9tICcuL2hhcy1tYWdpYy5qcyc7XG5leHBvcnQgeyBJZ25vcmUgfSBmcm9tICcuL2lnbm9yZS5qcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2xvYlN0cmVhbVN5bmMocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBHbG9iKHBhdHRlcm4sIG9wdGlvbnMpLnN0cmVhbVN5bmMoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnbG9iU3RyZWFtKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgR2xvYihwYXR0ZXJuLCBvcHRpb25zKS5zdHJlYW0oKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnbG9iU3luYyhwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gbmV3IEdsb2IocGF0dGVybiwgb3B0aW9ucykud2Fsa1N5bmMoKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdsb2JfKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgR2xvYihwYXR0ZXJuLCBvcHRpb25zKS53YWxrKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2xvYkl0ZXJhdGVTeW5jKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgR2xvYihwYXR0ZXJuLCBvcHRpb25zKS5pdGVyYXRlU3luYygpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdsb2JJdGVyYXRlKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgR2xvYihwYXR0ZXJuLCBvcHRpb25zKS5pdGVyYXRlKCk7XG59XG4vLyBhbGlhc2VzOiBnbG9iLnN5bmMuc3RyZWFtKCkgZ2xvYi5zdHJlYW0uc3luYygpIGdsb2Iuc3luYygpIGV0Y1xuZXhwb3J0IGNvbnN0IHN0cmVhbVN5bmMgPSBnbG9iU3RyZWFtU3luYztcbmV4cG9ydCBjb25zdCBzdHJlYW0gPSBPYmplY3QuYXNzaWduKGdsb2JTdHJlYW0sIHsgc3luYzogZ2xvYlN0cmVhbVN5bmMgfSk7XG5leHBvcnQgY29uc3QgaXRlcmF0ZVN5bmMgPSBnbG9iSXRlcmF0ZVN5bmM7XG5leHBvcnQgY29uc3QgaXRlcmF0ZSA9IE9iamVjdC5hc3NpZ24oZ2xvYkl0ZXJhdGUsIHtcbiAgICBzeW5jOiBnbG9iSXRlcmF0ZVN5bmMsXG59KTtcbmV4cG9ydCBjb25zdCBzeW5jID0gT2JqZWN0LmFzc2lnbihnbG9iU3luYywge1xuICAgIHN0cmVhbTogZ2xvYlN0cmVhbVN5bmMsXG4gICAgaXRlcmF0ZTogZ2xvYkl0ZXJhdGVTeW5jLFxufSk7XG5leHBvcnQgY29uc3QgZ2xvYiA9IE9iamVjdC5hc3NpZ24oZ2xvYl8sIHtcbiAgICBnbG9iOiBnbG9iXyxcbiAgICBnbG9iU3luYyxcbiAgICBzeW5jLFxuICAgIGdsb2JTdHJlYW0sXG4gICAgc3RyZWFtLFxuICAgIGdsb2JTdHJlYW1TeW5jLFxuICAgIHN0cmVhbVN5bmMsXG4gICAgZ2xvYkl0ZXJhdGUsXG4gICAgaXRlcmF0ZSxcbiAgICBnbG9iSXRlcmF0ZVN5bmMsXG4gICAgaXRlcmF0ZVN5bmMsXG4gICAgR2xvYixcbiAgICBoYXNNYWdpYyxcbiAgICBlc2NhcGUsXG4gICAgdW5lc2NhcGUsXG59KTtcbmdsb2IuZ2xvYiA9IGdsb2I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgImltcG9ydCB7IGdsb2IgfSBmcm9tIFwiZ2xvYlwiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGVudiB9IGZyb20gXCJub2RlOnByb2Nlc3NcIjtcbmltcG9ydCB0eXBlIHsgTWlsa2lvQWRhcHRlciwgVml0ZUlucHV0LCBWaXRlT3V0cHV0IH0gZnJvbSBcIi4vaW5kZXgudHNcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcblxuY29uc3QgYWRhcHRlck5hbWUgPSBcImVkZ2Utb25lXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBlZGdlT25lQWRhcHRlcigpOiBNaWxraW9BZGFwdGVyIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBhZGFwdGVyTmFtZSxcbiAgICBhZGFwdGVyOiBhc3luYyAob3B0aW9uczoge30pID0+IHtcbiAgICAgIC8qKlxuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKiBAc3RlcCBpbnB1dFxuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IGlucHV0OiBWaXRlSW5wdXQgPSB7fTtcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBnbG9iKFwibW9kdWxlcy8qKi8qLnthY3Rpb24sc3RyZWFtfS50c1wiKTtcbiAgICAgIGNvbnN0IHRhc2tzOiBBcnJheTxQcm9taXNlPHZvaWQ+PiA9IFtdO1xuICAgICAgZm9yIChjb25zdCBtb2R1bGVQYXRoIG9mIHJlc3VsdHMpIHtcbiAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aFNwbGl0ID0gbW9kdWxlUGF0aFxuICAgICAgICAgICAgICAucmVwbGFjZUFsbChcIlxcXFxcIiwgXCIvXCIpXG4gICAgICAgICAgICAgIC5zbGljZSgwLCBtb2R1bGVQYXRoLmxlbmd0aCAtIDEwKSAvLyAxMCA9PT0gXCIuYWN0aW9uLnRzXCIubGVuZ3RoIG9yIFwiLnN0cmVhbS50c1wiLmxlbmd0aFxuICAgICAgICAgICAgICAuc3BsaXQoXCIvXCIpXG4gICAgICAgICAgICAgIC5zbGljZSgxKTtcbiAgICAgICAgICAgIGNvbnN0IGxldmVsID0gcGF0aFNwbGl0Lmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBwYXRoU3BsaXQuam9pbihcIi9cIik7XG4gICAgICAgICAgICBjb25zdCBiYWNrVG9Sb290ID0gXCIuLi9cIi5yZXBlYXQobGV2ZWwgKyAxKTtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlc0ZvbGRlciA9IGAubWlsa2lvL2dlbmVyYXRlZC9yb3V0ZXMvbW9kdWxlX18ke3BhdGgucmVwbGFjZUFsbChcIi9cIiwgXCJfX1wiKS5yZXBsYWNlQWxsKFwiLVwiLCBcIl9cIil9YDtcblxuICAgICAgICAgICAgLy8gVHJhdmVyc2UgdGhlIHJvdXRlcyBnZW5lcmF0ZWQgaW4gdGhlIGRpcmVjdG9yeSBhbmQgc2VsZWN0IHRoZSBsYXRlc3QgcGllY2Ugb2YgZGF0YVxuICAgICAgICAgICAgY29uc3Qgcm91dGVzRm9sZGVyRmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHJvdXRlc0ZvbGRlcik7XG4gICAgICAgICAgICBpZiAocm91dGVzRm9sZGVyRmlsZXMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoYE5vIHJvdXRlcyBmb3VuZCBpbiAke3JvdXRlc0ZvbGRlcn1gKTtcbiAgICAgICAgICAgIC8vIFJldHJpZXZlIHRoZSBmdWxsIHBhdGhzIGFuZCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgYWxsIGZpbGVzXG4gICAgICAgICAgICBjb25zdCBmaWxlc1dpdGhTdGF0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICByb3V0ZXNGb2xkZXJGaWxlcy5tYXAoYXN5bmMgKGZpbGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4ocm91dGVzRm9sZGVyLCBmaWxlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZzLnN0YXQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGZpbGVQYXRoLCBiaXJ0aFRpbWU6IHN0YXRzLmJpcnRodGltZSB9O1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCByb3V0ZVBhdGggPSBmaWxlc1dpdGhTdGF0cy5zb3J0KChhLCBiKSA9PiBiLmJpcnRoVGltZS5nZXRUaW1lKCkgLSBhLmJpcnRoVGltZS5nZXRUaW1lKCkpLmF0KDApPy5maWxlUGF0aDtcbiAgICAgICAgICAgIGlmICghcm91dGVQYXRoKSB0aHJvdyBuZXcgRXJyb3IoYE5vIHJvdXRlcyBmb3VuZCBpbiAke3JvdXRlc0ZvbGRlcn1gKTtcblxuICAgICAgICAgICAgY29uc3QgZ2VuZXJhdGVkUGF0aCA9IGAubWlsa2lvLyR7YWRhcHRlck5hbWV9LyR7cGF0aH0udHNgO1xuICAgICAgICAgICAgYXdhaXQgZnMub3V0cHV0RmlsZShcbiAgICAgICAgICAgICAgZ2VuZXJhdGVkUGF0aCxcbiAgICAgICAgICAgICAgYGltcG9ydCB7IGNyZWF0ZSB9IGZyb20gXCIke2JhY2tUb1Jvb3R9aW5kZXgudHNcIjtcbmltcG9ydCByb3V0ZVNjaGVtYSBmcm9tIFwiJHtiYWNrVG9Sb290fSR7cm91dGVQYXRoLnJlcGxhY2VBbGwoXCJcXFxcXCIsIFwiL1wiKX1cIjtcblxuY29uc3Qgd29ybGQgPSBjcmVhdGUoe1xuICBkZXZlbG9wOiAke2Vudi5DT09LQk9PS19ERVZFTE9QID09PSBcIkVOQUJMRVwiID8gXCJ0cnVlXCIgOiBcImZhbHNlXCJ9LFxufSk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvblJlcXVlc3QoY29udGV4dCkge1xuICByZXR1cm4gYXdhaXQgKGF3YWl0IHdvcmxkKS5saXN0ZW5lci5mZXRjaCh7XG4gICAgcmVxdWVzdDogY29udGV4dC5yZXF1ZXN0LFxuICAgIGVudjogY29udGV4dC5lbnYsXG4gICAgZW52TW9kZTogXCIke2Vudi5NT0RFID8/IFwiZGV2ZWxvcG1lbnRcIn1cIixcbiAgICByb3V0ZVNjaGVtYSxcbiAgfSk7XG59YCxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlucHV0W3BhdGhdID0gZ2VuZXJhdGVkUGF0aDtcbiAgICAgICAgICB9KSgpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGFza3MpO1xuXG4gICAgICAvKipcbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICogQHN0ZXAgb3V0cHV0XG4gICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAqL1xuICAgICAgY29uc3Qgb3V0cHV0OiBWaXRlT3V0cHV0ID0ge307XG4gICAgICBvdXRwdXQuZW50cnlGaWxlTmFtZXMgPSBcImZ1bmN0aW9ucy9bbmFtZV0uanNcIjtcbiAgICAgIG91dHB1dC5jaHVua0ZpbGVOYW1lcyA9IFwiZnVuY3Rpb25zLy5taWxraW8vW25hbWVdLVtoYXNoXS5qc1wiO1xuICAgICAgb3V0cHV0LmFzc2V0RmlsZU5hbWVzID0gXCJmdW5jdGlvbnMvLm1pbGtpby9bbmFtZV0tW2hhc2hdW2V4dG5hbWVdXCI7XG4gICAgICBvdXRwdXQuc291cmNlbWFwID0gXCJpbmxpbmVcIjtcbiAgICAgIG91dHB1dC5wcmVzZXJ2ZU1vZHVsZXMgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHsgaW5wdXQsIG91dHB1dCB9O1xuICAgIH0sXG4gIH0gc2F0aXNmaWVzIE1pbGtpb0FkYXB0ZXI7XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgVXNlckNvbmZpZyB9IGZyb20gXCJ2aXRlXCI7XG5pbXBvcnQgeyBlZGdlT25lQWRhcHRlciB9IGZyb20gXCIuL2VkZ2Utb25lLnRzXCI7XG5cbmV4cG9ydCB0eXBlIFZpdGVJbnB1dCA9IEV4Y2x1ZGU8RXhjbHVkZTxVc2VyQ29uZmlnW1wiYnVpbGRcIl0sIHVuZGVmaW5lZD5bXCJyb2xsdXBPcHRpb25zXCJdLCB1bmRlZmluZWQ+W1wiaW5wdXRcIl07XG5leHBvcnQgdHlwZSBWaXRlT3V0cHV0ID0gRXhjbHVkZTxFeGNsdWRlPFVzZXJDb25maWdbXCJidWlsZFwiXSwgdW5kZWZpbmVkPltcInJvbGx1cE9wdGlvbnNcIl0sIHVuZGVmaW5lZD5bXCJvdXRwdXRcIl07XG5cbmV4cG9ydCB0eXBlIE1pbGtpb0FkYXB0ZXIgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgYWRhcHRlcjogKG9wdGlvbnM6IHt9KSA9PiBQcm9taXNlPHtcbiAgICBpbnB1dDogVml0ZUlucHV0O1xuICAgIG91dHB1dDogVml0ZU91dHB1dDtcbiAgfT47XG59O1xuXG5leHBvcnQgY29uc3QgYWRhcHRlcnM6IEFycmF5PE1pbGtpb0FkYXB0ZXI+ID0gW2VkZ2VPbmVBZGFwdGVyKCldO1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBQ0EsSUFBTSxZQUFZO0FBQUE7QUFBQSxFQUNsQixNQUFNLG9CQUFvQixNQUFNO0FBQUEsSUFFOUIsV0FBWSxDQUFDLEtBQUssVUFBVSxZQUFZO0FBQUEsTUFDdEMsTUFBTSxtQkFBbUIsS0FBSyxVQUFVLFVBQVU7QUFBQSxNQUNsRCxL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RUFBb0I7QUFBQSxFQUFHO0FBQUEsRUFBRztBQUFBLEVBQUc7QUFBQSxFQUFHO0FBQUEsRUFBRztBQUFBLEVBQUc7QUFBQSxFQUFHO0FBQUEsRUFBRztBQUFBLEVBQUc7QUFBQSxFQUFHO0FBQUEsRUFBRztBQUFBLEVBQUc7QUFBQSxFQUFHO0FBQUEsRUFBRztBQUFBLEVBQUc7QUFBQSxFQUFHO0FBQUEsRUFBRztBQUFBLEVBQUc7QUFBQSxTQUFVLHFCQUFxQixDQUFDLEdBQUU7QUFBQSxJQUFDLE9BQU0sRUFBQyxRQUFPLEVBQUUsSUFBRyxNQUFLLEVBQUUsSUFBRyxpQkFBZ0IsRUFBRSxJQUFHLE9BQU0sRUFBRSxJQUFHLFFBQU8sRUFBRSxJQUFHLFNBQVEsRUFBRSxJQUFHLFNBQVEsRUFBRSxJQUFHLE1BQUssRUFBRSxJQUFHLE1BQUssRUFBRSxRQUFPLElBQUksR0FBRTtBQUFBLE1BQUMsT0FBTyxFQUFFO0FBQUEsV0FBUSxJQUFJLEdBQUU7QUFBQSxNQUFDLE9BQU8sRUFBRTtBQUFBLE9BQUksTUFBSyxFQUFFLElBQUcsbUJBQWtCLE9BQUcsRUFBRSxHQUFHLENBQUMsR0FBRSxpQkFBZ0IsQ0FBQyxHQUFFLEdBQUUsR0FBRSxNQUFJLEVBQUUsR0FBRyxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsWUFBVyxPQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUUsU0FBUSxPQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUUsVUFBUyxPQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUUsU0FBUSxPQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUM7QUFBQTtBQUFBLE1BQU0sR0FBRyxHQUFFO0FBQUEsSUFBQyxPQUFPLEtBQUs7QUFBQTtBQUFBLE1BQU8sT0FBTyxHQUFFO0FBQUEsSUFBQyxPQUFPLEtBQUs7QUFBQTtBQUFBLE1BQU8sY0FBYyxHQUFFO0FBQUEsSUFBQyxPQUFPLEtBQUs7QUFBQTtBQUFBLE1BQU8sSUFBSSxHQUFFO0FBQUEsSUFBQyxPQUFPLEtBQUs7QUFBQTtBQUFBLE1BQU8sV0FBVyxHQUFFO0FBQUEsSUFBQyxP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RSxlQUFlLENBQUMsR0FBRTtBQUFBLElBQUMsT0FBTyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUUsSUFBRSxJQUFFO0FBQUE7QUFBQSxFQUFFLEVBQUUsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRSxJQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7QUFBQSxJQUFFLEtBQUssS0FBRyxHQUFFLEtBQUssS0FBRztBQUFBLElBQUUsSUFBSSxJQUFFLEtBQUssZUFBYSxNQUFNLEtBQUssRUFBQyxRQUFPLEtBQUssR0FBRSxDQUFDLElBQU87QUFBQSxJQUFFLEtBQUssS0FBRyxHQUFFLEtBQUssS0FBRyxDQUFDLEdBQUUsR0FBRSxJQUFFLEtBQUssR0FBRyxJQUFJLE1BQUk7QUFBQSxNQUFDLEVBQUUsS0FBRyxNQUFJLElBQUUsSUFBRSxHQUFFLEVBQUUsS0FBRyxHQUFFLEVBQUUsR0FBRSxDQUFDO0FBQUEsT0FBRyxLQUFLLEtBQUcsT0FBRztBQUFBLE1BQUMsRUFBRSxLQUFHLEVBQUUsT0FBSyxJQUFFLEtBQUssR0FBRyxJQUFJLElBQUUsR0FBRSxFQUFFLEdBQUUsRUFBRSxFQUFFO0FBQUE7QUFBQSxJQUFHLElBQUksSUFBRSxLQUFLLGVBQWEsQ0FBQyxHQUFFLE1BQUk7QUFBQSxNQUFDLElBQUcsSUFBSSxPQUFLLGFBQWEsRUFBRSxFQUFFLEdBQUUsRUFBRSxLQUFRLFlBQUcsS0FBRyxNQUFJLEtBQUcsR0FBRTtBQUFBLFFBQUMsSUFBSSxJQUFFLFdBQVcsTUFBSTtBQUFBLFVBQUMsS0FBSyxHQUFHLENBQUMsS0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUcsUUFBUTtBQUFBLFdBQUcsSUFBRSxDQUFDO0FBQUEsUUFBRSxFQUFFLFNBQU8sRUFBRSxNQUFNLEdBQUUsRUFBRSxLQUFHO0FBQUEsTUFBQztBQUFBLFFBQUcsTUFBSTtBQUFBLElBQUcsS0FBSyxLQUFHLENBQUMsR0FBRSxNQUFJO0FBQUEsTUFBQyxJQUFHLEVBQUUsSUFBRztBQUFBLFFBQUMsSUFBSSxJQUFFLEVBQUUsSUFBRyxJQUFFLEVBQUU7QUFBQSxRQUFHLElBQUcsQ0FBQyxLQUFHLENBQUM7QUFBQSxVQUFFO0FBQUEsUUFBTyxFQUFFLE1BQUksR0FBRSxFQUFFLFFBQU0sR0FBRSxFQUFFLE1BQUksS0FBRyxFQUFFO0FBQUEsUUFBRSxJQUFJLElBQUUsRUFBRSxNQUFJO0FBQUEsUUFBRSxFQUFFLGVBQWEsSUFBRTtBQUFBLE1BQUM7QUFBQTtBQUFBLElBQUcsSUFBSSxJQUFFLEdBQUUsSUFBRSxNQUFJO0FBQUEsTUFBQyxJQUFJLElBQUUsS0FBSyxHQUFHLElBQUk7QUFBQSxNQUFFLElBQUcsS0FBSyxnQkFBYyxHQUFFO0FBQUEsUUFBQyxJQUFFO0FBQUEsUUFBRSxJQUFJLElBQUUsV0FBVyxNQUFJLElBQUUsR0FBRSxLQUFLLGFBQWE7QUFBQSxRQUFFLEVBQUUsU0FBTyxFQUFFLE1BQU07QUFBQSxNQUFDO0FBQUEsTUFBQyxPQUFPO0FBQUE7QUFBQSxJQUFHLEtBQUssa0JBQWdCLE9BQUc7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQUEsTUFBRSxJQUFHLE1BQVM7QUFBQSxRQUFFLE9BQU87QUFBQSxNQUFFLElBQUksSUFBRSxFQUFFLElBQUcsSUFBRSxFQUFFO0FBQUEsTUFBRyxJQUFHLENBQUMsS0FBRyxDQUFDO0FBQUEsUUFBRSxPQUFPLElBQUU7QUFBQSxNQUFFLElBQUksS0FBRyxLQUFHLEVBQUUsS0FBRztBQUFBLE1BQUUsT0FBTyxJQUFFO0FBQUEsT0FBRyxLQUFLLEtBQUcsT0FBRztBQUFBLE1BQUMsSUFBSSxJQUFFLEVBQUUsSUFBRyxJQUFFLEVBQUU7QUFBQSxNQUFHLE9BQU0sQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE1BQUksS0FBRyxFQUFFLEtBQUcsSUFBRTtBQUFBO0FBQUE7QUFBQSxFQUFHLEtBQUcsTUFBSTtBQUFBLEVBQUcsS0FBRyxNQUFJO0FBQUEsRUFBRyxLQUFHLE1BQUk7QUFBQSxFQUFHLEtBQUcsTUFBSTtBQUFBLEVBQUcsRUFBRSxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUFBLElBQUUsS0FBSyxLQUFHLEdBQUUsS0FBSyxLQUFHLEdBQUUsS0FBSyxLQUFHLE9BQUc7QUFBQSxNQUFDLEtBQUssTUFBSSxFQUFFLElBQUcsRUFBRSxLQUFHO0FBQUEsT0FBRyxLQUFLLEtBQUcsQ0FBQyxHQUFFLEdBQUUsR0FBRSxNQUFJO0FBQUEsTUFBQyxJQUFHLENBQUMsRUFBRSxDQUFDLEdBQUU7QUFBQSxRQUFDLElBQUcsS0FBSyxHQUFHLENBQUM7QUFBQSxVQUFFLE9BQU8sS0FBSztBQUFBLFFBQW9CLElBQUcsR0FBRTtBQUFBLFVBQUMsSUFBRyxPQUFPLEtBQUc7QUFBQSxZQUFXLE1BQU0sSUFBSSxVQUFVLG9DQUFvQztBQUFBLFVBQUUsSUFBRyxJQUFFLEVBQUUsR0FBRSxDQUFDLEdBQUUsQ0FBQyxFQUFFLENBQUM7QUFBQSxZQUFFLE1BQU0sSUFBSSxVQUFVLDBEQUEwRDtBQUFBLFFBQUMsRUFBTTtBQUFBLGdCQUFNLElBQUksVUFBVSwySEFBMkg7QUFBQSxNQUFDO0FBQUEsTUFBQyxPQUFPO0FBQUEsT0FBRyxLQUFLLEtBQUcsQ0FBQyxHQUFFLEdBQUUsTUFBSTtBQUFBLE1BQUMsSUFBRyxFQUFFLEtBQUcsR0FBRSxLQUFLLElBQUc7QUFBQSxRQUFDLElBQUksSUFBRSxLQUFLLEtBQUcsRUFBRTtBQUFBLFFBQUcsTUFBSyxLQUFLLEtBQUc7QUFBQSxVQUFHLEtBQUssR0FBRyxJQUFFO0FBQUEsTUFBQztBQUFBLE1BQUMsS0FBSyxNQUFJLEVBQUUsSUFBRyxNQUFJLEVBQUUsWUFBVSxHQUFFLEVBQUUsc0JBQW9CLEtBQUs7QUFBQTtBQUFBO0FBQUEsRUFBSyxLQUFHLE9BQUc7QUFBQSxFQUFHLEtBQUcsQ0FBQyxHQUFFLEdBQUUsTUFBSTtBQUFBLEVBQUcsS0FBRyxDQUFDLEdBQUUsR0FBRSxHQUFFLE1BQUk7QUFBQSxJQUFDLElBQUcsS0FBRztBQUFBLE1BQUUsTUFBTSxJQUFJLFVBQVUsa0VBQWtFO0FBQUEsSUFBRSxPQUFPO0FBQUE7QUFBQSxHQUFJLEVBQUUsR0FBRSxZQUFXLElBQUUsS0FBSyxlQUFZLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBRyxLQUFLO0FBQUEsTUFBRyxTQUFRLElBQUUsS0FBSyxHQUFHLEtBQUssR0FBRyxDQUFDLE9BQUssS0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLE9BQUssTUFBTSxJQUFHLE1BQUksS0FBSztBQUFBLFFBQUssSUFBRSxLQUFLLEdBQUc7QUFBQTtBQUFBLEdBQUksRUFBRSxHQUFFLFlBQVcsSUFBRSxLQUFLLGVBQVksQ0FBQyxHQUFFO0FBQUEsSUFBQyxJQUFHLEtBQUs7QUFBQSxNQUFHLFNBQVEsSUFBRSxLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUMsT0FBSyxLQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsT0FBSyxNQUFNLElBQUcsTUFBSSxLQUFLO0FBQUEsUUFBSyxJQUFFLEtBQUssR0FBRztBQUFBO0FBQUEsRUFBRyxFQUFFLENBQUMsR0FBRTtBQUFBLElBQUMsT0FBTyxNQUFTLGFBQUcsS0FBSyxHQUFHLElBQUksS0FBSyxHQUFHLEVBQUUsTUFBSTtBQUFBO0FBQUEsR0FBRyxPQUFPLEdBQUU7QUFBQSxJQUFDLFNBQVEsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUFFLEtBQUssR0FBRyxPQUFVLGFBQUcsS0FBSyxHQUFHLE9BQVUsYUFBRyxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsRUFBRSxNQUFJLE1BQUssQ0FBQyxLQUFLLEdBQUcsSUFBRyxLQUFLLEdBQUcsRUFBRTtBQUFBO0FBQUEsR0FBSSxRQUFRLEdBQUU7QUFBQSxJQUFDLFNBQVEsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUFFLEtBQUssR0FBRyxPQUFVLGFBQUcsS0FBSyxHQUFHLE9BQVUsYUFBRyxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsRUFBRSxNQUFJLE1BQUssQ0FBQyxLQUFLLEdBQUcsSUFBRyxLQUFLLEdBQUcsRUFBRTtBQUFBO0FBQUEsR0FBSSxJQUFJLEdBQUU7QUFBQSxJQUFDLFNBQVEsS0FBSyxLQUFLLEdBQUcsR0FBRTtBQUFBLE1BQUMsSUFBSSxJQUFFLEtBQUssR0FBRztBQUFBLE1BQUcsTUFBUyxhQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxFQUFFLE1BQUksTUFBTTtBQUFBLElBQUU7QUFBQTtBQUFBLEdBQUcsS0FBSyxHQUFFO0FBQUEsSUFBQyxTQUFRLEtBQUssS0FBSyxHQUFHLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLEdBQUc7QUFBQSxNQUFHLE1BQVMsYUFBRyxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsRUFBRSxNQUFJLE1BQU07QUFBQSxJQUFFO0FBQUE7QUFBQSxHQUFHLE1BQU0sR0FBRTtBQUFBLElBQUMsU0FBUSxLQUFLLEtBQUssR0FBRztBQUFBLE1BQUUsS0FBSyxHQUFHLE9BQVUsYUFBRyxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsRUFBRSxNQUFJLE1BQU0sS0FBSyxHQUFHO0FBQUE7QUFBQSxHQUFLLE9BQU8sR0FBRTtBQUFBLElBQUMsU0FBUSxLQUFLLEtBQUssR0FBRztBQUFBLE1BQUUsS0FBSyxHQUFHLE9BQVUsYUFBRyxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsRUFBRSxNQUFJLE1BQU0sS0FBSyxHQUFHO0FBQUE7QUFBQSxHQUFLLE9BQU8sU0FBUyxHQUFFO0FBQUEsSUFBQyxPQUFPLEtBQUssUUFBUTtBQUFBO0FBQUEsR0FBRyxPQUFPLGVBQWE7QUFBQSxFQUFXLElBQUksQ0FBQyxHQUFFLElBQUUsQ0FBQyxHQUFFO0FBQUEsSUFBQyxTQUFRLEtBQUssS0FBSyxHQUFHLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLEdBQUcsSUFBRyxJQUFFLEtBQUssR0FBRyxDQUFDLElBQUUsRUFBRSx1QkFBcUI7QUFBQSxNQUFFLElBQUcsTUFBUyxhQUFHLEVBQUUsR0FBRSxLQUFLLEdBQUcsSUFBRyxJQUFJO0FBQUEsUUFBRSxPQUFPLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBRyxDQUFDO0FBQUEsSUFBQztBQUFBO0FBQUEsRUFBRSxPQUFPLENBQUMsR0FBRSxJQUFFLE1BQUs7QUFBQSxJQUFDLFNBQVEsS0FBSyxLQUFLLEdBQUcsR0FBRTtBQUFBLE1BQUMsSUFBSSxJQUFFLEtBQUssR0FBRyxJQUFHLElBQUUsS0FBSyxHQUFHLENBQUMsSUFBRSxFQUFFLHVCQUFxQjtBQUFBLE1BQUUsTUFBUyxhQUFHLEVBQUUsS0FBSyxHQUFFLEdBQUUsS0FBSyxHQUFHLElBQUcsSUFBSTtBQUFBLElBQUM7QUFBQTtBQUFBLEVBQUUsUUFBUSxDQUFDLEdBQUUsSUFBRSxNQUFLO0FBQUEsSUFBQyxTQUFRLEtBQUssS0FBSyxHQUFHLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLEdBQUcsSUFBRyxJQUFFLEtBQUssR0FBRyxDQUFDLElBQUUsRUFBRSx1QkFBcUI7QUFBQSxNQUFFLE1BQVMsYUFBRyxFQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRyxJQUFHLElBQUk7QUFBQSxJQUFDO0FBQUE7QUFBQSxFQUFFLFVBQVUsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFO0FBQUEsSUFBRyxTQUFRLEtBQUssS0FBSyxHQUFHLEVBQUMsWUFBVyxLQUFFLENBQUM7QUFBQSxNQUFFLEtBQUssR0FBRyxDQUFDLE1BQUksS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFHLFFBQVEsR0FBRSxJQUFFO0FBQUEsSUFBSSxPQUFPO0FBQUE7QUFBQSxFQUFFLElBQUksQ0FBQyxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsS0FBSyxHQUFHLElBQUksQ0FBQztBQUFBLElBQUUsSUFBRyxNQUFTO0FBQUEsTUFBRTtBQUFBLElBQU8sSUFBSSxJQUFFLEtBQUssR0FBRyxJQUFHLElBQUUsS0FBSyxHQUFHLENBQUMsSUFBRSxFQUFFLHVCQUFxQjtBQUFBLElBQUUsSUFBRyxNQUFTO0FBQUEsTUFBRTtBQUFBLElBQU8sSUFBSSxJQUFFLEVBQUMsT0FBTSxFQUFDO0FBQUEsSUFBRSxJQUFHLEtBQUssTUFBSSxLQUFLLElBQUc7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLEdBQUcsSUFBRyxJQUFFLEtBQUssR0FBRztBQUFBLE1BQUcsSUFBRyxLQUFHLEdBQUU7QUFBQSxRQUFDLElBQUksSUFBRSxLQUFHLEtBQUssR0FBRyxJQUFJLElBQUU7QUFBQSxRQUFHLEVBQUUsTUFBSSxHQUFFLEVBQUUsUUFBTSxLQUFLLElBQUk7QUFBQSxNQUFDO0FBQUEsSUFBQztBQUFBLElBQUMsT0FBTyxLQUFLLE9BQUssRUFBRSxPQUFLLEtBQUssR0FBRyxLQUFJO0FBQUE7QUFBQSxFQUFFLElBQUksR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLENBQUM7QUFBQSxJQUFFLFNBQVEsS0FBSyxLQUFLLEdBQUcsRUFBQyxZQUFXLEtBQUUsQ0FBQyxHQUFFO0FBQUEsTUFBQyxJQUFJLElBQUUsS0FBSyxHQUFHLElBQUcsSUFBRSxLQUFLLEdBQUcsSUFBRyxJQUFFLEtBQUssR0FBRyxDQUFDLElBQUUsRUFBRSx1QkFBcUI7QUFBQSxNQUFFLElBQUcsTUFBUyxhQUFHLE1BQVM7QUFBQSxRQUFFO0FBQUEsTUFBUyxJQUFJLElBQUUsRUFBQyxPQUFNLEVBQUM7QUFBQSxNQUFFLElBQUcsS0FBSyxNQUFJLEtBQUssSUFBRztBQUFBLFFBQUMsRUFBRSxNQUFJLEtBQUssR0FBRztBQUFBLFFBQUcsSUFBSSxJQUFFLEtBQUssR0FBRyxJQUFJLElBQUUsS0FBSyxHQUFHO0FBQUEsUUFBRyxFQUFFLFFBQU0sS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFFLENBQUM7QUFBQSxNQUFDO0FBQUEsTUFBQyxLQUFLLE9BQUssRUFBRSxPQUFLLEtBQUssR0FBRyxLQUFJLEVBQUUsUUFBUSxDQUFDLEdBQUUsQ0FBQyxDQUFDO0FBQUEsSUFBQztBQUFBLElBQUMsT0FBTztBQUFBO0FBQUEsRUFBRSxJQUFJLENBQUMsR0FBRTtBQUFBLElBQUMsS0FBSyxNQUFNO0FBQUEsSUFBRSxVQUFRLEdBQUUsTUFBSyxHQUFFO0FBQUEsTUFBQyxJQUFHLEVBQUUsT0FBTTtBQUFBLFFBQUMsSUFBSSxJQUFFLEtBQUssSUFBSSxJQUFFLEVBQUU7QUFBQSxRQUFNLEVBQUUsUUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFFO0FBQUEsTUFBQztBQUFBLE1BQUMsS0FBSyxHQUFHLEdBQUUsRUFBRSxPQUFNLENBQUM7QUFBQSxJQUFDO0FBQUE7QUFBQSxFQUFFLEdBQUcsQ0FBQyxHQUFFLEdBQUUsSUFBRSxDQUFDLEdBQUU7QUFBQSxJQUFDLE1BQUksUUFBTyxJQUFFLEVBQUUsaUJBQWUsQ0FBQyxJQUFPLGNBQUc7QUFBQSxJQUFFLEVBQUUsU0FBTyxHQUFFLE1BQUksRUFBRSxLQUFHLE9BQU0sRUFBRSxNQUFJLEdBQUUsTUFBUyxjQUFJLEVBQUUsUUFBTSxJQUFHLEVBQUUsUUFBTTtBQUFBLElBQU0sSUFBSSxJQUFFLEtBQUssR0FBRyxHQUFFLEdBQUUsQ0FBQztBQUFBLElBQUUsT0FBTyxLQUFHLEVBQUUsa0JBQWdCLEVBQUUsUUFBUSxDQUFDLEdBQUU7QUFBQTtBQUFBLEVBQUUsRUFBRSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQSxJQUFDLE1BQUksS0FBSSxJQUFFLEtBQUssS0FBSSxPQUFNLEdBQUUsZ0JBQWUsSUFBRSxLQUFLLGdCQUFlLGlCQUFnQixJQUFFLEtBQUssaUJBQWdCLFFBQU8sTUFBRyxHQUFFLElBQUUsS0FBSyxHQUFHLENBQUM7QUFBQSxJQUFFLElBQUcsTUFBUztBQUFBLE1BQUUsT0FBTyxNQUFJLEVBQUUsTUFBSSxZQUFXLEtBQUssT0FBTyxDQUFDLEdBQUU7QUFBQSxJQUFLLE1BQUksYUFBWSxJQUFFLEtBQUssZ0JBQWE7QUFBQSxJQUFFLEtBQUcsQ0FBQyxNQUFJLEVBQUUsUUFBTTtBQUFBLElBQUcsSUFBSSxJQUFFLEtBQUssR0FBRyxHQUFFLEdBQUUsRUFBRSxRQUFNLEdBQUUsR0FBRSxDQUFDO0FBQUEsSUFBRSxJQUFHLEtBQUssZ0JBQWMsSUFBRSxLQUFLO0FBQUEsTUFBYSxPQUFPLEtBQUssR0FBRyxHQUFFLEtBQUssR0FBRSxNQUFJLEVBQUUsTUFBSSxRQUFPLEVBQUUsdUJBQXFCLE9BQUk7QUFBQSxJQUFLLElBQUksSUFBRSxLQUFLLE9BQUssSUFBTyxZQUFFLEtBQUssR0FBRyxJQUFJLENBQUM7QUFBQSxJQUFFLElBQUcsTUFBUztBQUFBLE1BQUUsSUFBRSxLQUFLLE9BQUssSUFBRSxLQUFLLEtBQUcsS0FBSyxHQUFHLFdBQVMsSUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFFLEtBQUssT0FBSyxLQUFLLEtBQUcsS0FBSyxHQUFHLEtBQUUsSUFBRSxLQUFLLElBQUcsS0FBSyxHQUFHLEtBQUcsR0FBRSxLQUFLLEdBQUcsS0FBRyxHQUFFLEtBQUssR0FBRyxJQUFJLEdBQUUsQ0FBQyxHQUFFLEtBQUssR0FBRyxLQUFLLE1BQUksR0FBRSxLQUFLLEdBQUcsS0FBRyxLQUFLLElBQUcsS0FBSyxLQUFHLEdBQUUsS0FBSyxNQUFLLEtBQUssR0FBRyxHQUFFLEdBQUUsQ0FBQyxHQUFFLE1BQUksRUFBRSxNQUFJLFFBQU8sSUFBRSxPQUFHLEtBQUssTUFBSSxDQUFDLEtBQUcsS0FBSyxLQUFLLEdBQUUsR0FBRSxLQUFLO0FBQUEsSUFBTTtBQUFBLE1BQUMsS0FBSyxHQUFHLENBQUM7QUFBQSxNQUFFLElBQUksSUFBRSxLQUFLLEdBQUc7QUFBQSxNQUFHLElBQUcsTUFBSSxHQUFFO0FBQUEsUUFBQyxJQUFHLENBQUM7QUFBQSxVQUFFLElBQUcsS0FBSyxHQUFHLENBQUMsR0FBRTtBQUFBLFlBQUMsTUFBSSxLQUFHLEVBQUUsa0JBQWtCLE1BQU0sSUFBSSxNQUFNLFVBQVUsQ0FBQztBQUFBLFlBQUUsTUFBSSxzQkFBcUIsTUFBRztBQUFBLFlBQUUsTUFBUyxhQUFHLE1BQUksTUFBSSxLQUFLLE1BQUksS0FBSyxLQUFLLEdBQUUsR0FBRSxLQUFLLEdBQUUsS0FBSyxNQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsR0FBRSxHQUFFLEtBQUssQ0FBQztBQUFBLFVBQUUsRUFBTTtBQUFBLGlCQUFLLE1BQUksS0FBSyxLQUFLLEdBQUUsR0FBRSxLQUFLLEdBQUUsS0FBSyxNQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsR0FBRSxHQUFFLEtBQUssQ0FBQztBQUFBLFFBQUUsSUFBRyxLQUFLLEdBQUcsQ0FBQyxHQUFFLEtBQUssR0FBRyxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUssR0FBRyxLQUFHLEdBQUUsQ0FBQyxHQUFFO0FBQUEsVUFBQyxJQUFJLElBQUUsS0FBRyxLQUFLLEdBQUcsQ0FBQyxJQUFFLEVBQUUsdUJBQXFCLEdBQUUsSUFBRSxNQUFTLFlBQUUsUUFBTSxNQUFJLElBQUUsWUFBVTtBQUFBLFVBQVMsTUFBSSxFQUFFLE1BQUksR0FBRSxNQUFTLGNBQUksRUFBRSxXQUFTLEtBQUksS0FBSyxNQUFJLEtBQUssV0FBVyxHQUFFLEdBQUUsQ0FBQztBQUFBLFFBQUM7QUFBQSxNQUFDLEVBQU07QUFBQSxjQUFJLE1BQUksRUFBRSxNQUFJLFdBQVUsS0FBSyxNQUFJLEtBQUssV0FBVyxHQUFFLEdBQUUsUUFBUTtBQUFBO0FBQUEsSUFBRyxJQUFHLE1BQUksS0FBRyxDQUFDLEtBQUssTUFBSSxLQUFLLEdBQUcsR0FBRSxLQUFLLE9BQUssS0FBRyxLQUFLLEdBQUcsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEtBQUssR0FBRyxHQUFFLENBQUMsSUFBRyxDQUFDLEtBQUcsS0FBSyxNQUFJLEtBQUssSUFBRztBQUFBLE1BQUMsSUFBSSxJQUFFLEtBQUssSUFBRztBQUFBLE1BQUUsTUFBSyxJQUFFLEdBQUcsTUFBTTtBQUFBLFFBQUcsS0FBSyxLQUFLLEdBQUcsQ0FBQztBQUFBLElBQUM7QUFBQSxJQUFDLE9BQU87QUFBQTtBQUFBLEVBQUssR0FBRyxHQUFFO0FBQUEsSUFBQyxJQUFHO0FBQUEsTUFBQyxNQUFLLEtBQUssTUFBSTtBQUFBLFFBQUMsSUFBSSxJQUFFLEtBQUssR0FBRyxLQUFLO0FBQUEsUUFBSSxJQUFHLEtBQUssR0FBRyxJQUFFLEdBQUUsS0FBSyxHQUFHLENBQUMsR0FBRTtBQUFBLFVBQUMsSUFBRyxFQUFFO0FBQUEsWUFBcUIsT0FBTyxFQUFFO0FBQUEsUUFBb0IsRUFBTSxTQUFHLE1BQVM7QUFBQSxVQUFFLE9BQU87QUFBQSxNQUFDO0FBQUEsY0FBRTtBQUFBLE1BQVEsSUFBRyxLQUFLLE1BQUksS0FBSyxJQUFHO0FBQUEsUUFBQyxJQUFJLElBQUUsS0FBSyxJQUFHO0FBQUEsUUFBRSxNQUFLLElBQUUsR0FBRyxNQUFNO0FBQUEsVUFBRyxLQUFLLEtBQUssR0FBRyxDQUFDO0FBQUEsTUFBQztBQUFBO0FBQUE7QUFBQSxFQUFHLEVBQUUsQ0FBQyxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsS0FBSyxJQUFHLElBQUUsS0FBSyxHQUFHLElBQUcsSUFBRSxLQUFLLEdBQUcsSUFBRyxJQUFFLEtBQUssR0FBRyxDQUFDO0FBQUEsSUFBRSxLQUFHLEVBQUUsa0JBQWtCLE1BQU0sSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUFBLElBQUUsSUFBSSxJQUFFLElBQUUsRUFBRSx1QkFBcUI7QUFBQSxJQUFFLFFBQU8sS0FBSyxNQUFJLEtBQUssT0FBSyxNQUFTLGNBQUksS0FBSyxNQUFJLEtBQUssS0FBSyxHQUFFLEdBQUUsT0FBTyxHQUFFLEtBQUssTUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUUsR0FBRSxPQUFPLENBQUMsSUFBRyxLQUFLLEdBQUcsQ0FBQyxHQUFFLEtBQUssS0FBSyxPQUFLLGFBQWEsS0FBSyxHQUFHLEVBQUUsR0FBRSxLQUFLLEdBQUcsS0FBUSxZQUFHLE1BQUksS0FBSyxHQUFHLEtBQVEsV0FBRSxLQUFLLEdBQUcsS0FBUSxXQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBRyxLQUFLLE9BQUssS0FBRyxLQUFLLEtBQUcsS0FBSyxLQUFHLEdBQUUsS0FBSyxHQUFHLFNBQU8sS0FBRyxLQUFLLEtBQUcsS0FBSyxHQUFHLElBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFFLEtBQUssTUFBSztBQUFBO0FBQUEsRUFBRSxHQUFHLENBQUMsR0FBRSxJQUFFLENBQUMsR0FBRTtBQUFBLElBQUMsTUFBSSxRQUFPLElBQUUsRUFBRSxpQkFBZSxDQUFDLElBQU8sY0FBRztBQUFBLElBQUUsRUFBRSxTQUFPLEdBQUUsTUFBSSxFQUFFLEtBQUcsT0FBTSxFQUFFLE1BQUksR0FBRSxFQUFFLFFBQU07QUFBQSxJQUFNLElBQUksSUFBRSxLQUFLLEdBQUcsR0FBRSxDQUFDO0FBQUEsSUFBRSxPQUFPLEVBQUUsa0JBQWdCLEVBQUUsUUFBUSxDQUFDLEdBQUU7QUFBQTtBQUFBLEVBQUUsRUFBRSxDQUFDLEdBQUUsSUFBRSxDQUFDLEdBQUU7QUFBQSxJQUFDLE1BQUksZ0JBQWUsSUFBRSxLQUFLLGdCQUFlLFFBQU8sTUFBRyxHQUFFLElBQUUsS0FBSyxHQUFHLElBQUksQ0FBQztBQUFBLElBQUUsSUFBRyxNQUFTLFdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLEdBQUc7QUFBQSxNQUFHLElBQUcsS0FBSyxHQUFHLENBQUMsS0FBRyxFQUFFLHlCQUE0QjtBQUFBLFFBQUUsT0FBTTtBQUFBLE1BQUcsSUFBRyxLQUFLLEdBQUcsQ0FBQztBQUFBLFFBQUUsTUFBSSxFQUFFLE1BQUksU0FBUSxLQUFLLEdBQUcsR0FBRSxDQUFDO0FBQUEsTUFBUTtBQUFBLGVBQU8sS0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFFLE1BQUksRUFBRSxNQUFJLE9BQU0sS0FBSyxHQUFHLEdBQUUsQ0FBQyxJQUFHO0FBQUEsSUFBRSxFQUFNO0FBQUEsWUFBSSxFQUFFLE1BQUk7QUFBQSxJQUFRLE9BQU07QUFBQTtBQUFBLEVBQUcsSUFBSSxDQUFDLEdBQUUsSUFBRSxDQUFDLEdBQUU7QUFBQSxJQUFDLE1BQUksUUFBTyxJQUFFLEVBQUUsSUFBRSxDQUFDLElBQU8sY0FBRztBQUFBLElBQUUsTUFBSSxFQUFFLEtBQUcsUUFBTyxFQUFFLE1BQUksR0FBRSxFQUFFLFFBQU0sT0FBTSxFQUFFLFNBQU87QUFBQSxJQUFFLElBQUksSUFBRSxLQUFLLEdBQUcsR0FBRSxDQUFDO0FBQUEsSUFBRSxPQUFPLEVBQUUsa0JBQWdCLEVBQUUsUUFBUSxDQUFDLEdBQUU7QUFBQTtBQUFBLEVBQUUsRUFBRSxDQUFDLEdBQUUsR0FBRTtBQUFBLElBQUMsTUFB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QUFLLEdBQUcsQ0FBQyxHQUFFLElBQUUsRUFBRSx1QkFBcUI7QUFBQTtBQUFBLEVBQUcsRUFBRSxDQUFDLEdBQUUsR0FBRTtBQUFBLElBQUMsS0FBSyxHQUFHLEtBQUcsR0FBRSxLQUFLLEdBQUcsS0FBRztBQUFBO0FBQUEsRUFBRSxFQUFFLENBQUMsR0FBRTtBQUFBLElBQUMsTUFBSSxLQUFLLE9BQUssTUFBSSxLQUFLLEtBQUcsS0FBSyxLQUFHLEtBQUssR0FBRyxLQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBRyxLQUFLLEdBQUcsRUFBRSxHQUFFLEtBQUssR0FBRyxLQUFLLElBQUcsQ0FBQyxHQUFFLEtBQUssS0FBRztBQUFBO0FBQUEsRUFBRyxNQUFNLENBQUMsR0FBRTtBQUFBLElBQUMsT0FBTyxLQUFLLEdBQUcsR0FBRSxRQUFRO0FBQUE7QUFBQSxFQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUU7QUFBQSxJQUFDLEVBQUUsa0JBQWdCLEVBQUUsUUFBUSxFQUFDLElBQUcsVUFBUyxRQUFPLEdBQUUsS0FBSSxHQUFFLE9BQU0sS0FBSSxDQUFDO0FBQUEsSUFBRSxJQUFJLElBQUU7QUFBQSxJQUFHLElBQUcsS0FBSyxPQUFLLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQUEsTUFBRSxJQUFHLE1BQVM7QUFBQSxRQUFFLElBQUcsS0FBSyxLQUFLLE9BQUssYUFBYSxLQUFLLEtBQUssRUFBRSxHQUFFLEtBQUssR0FBRyxLQUFRLFlBQUcsSUFBRSxNQUFHLEtBQUssT0FBSztBQUFBLFVBQUUsS0FBSyxHQUFHLENBQUM7QUFBQSxRQUFNO0FBQUEsVUFBQyxLQUFLLEdBQUcsQ0FBQztBQUFBLFVBQUUsSUFBSSxJQUFFLEtBQUssR0FBRztBQUFBLFVBQUcsSUFBRyxLQUFLLEdBQUcsQ0FBQyxJQUFFLEVBQUUsa0JBQWtCLE1BQU0sSUFBSSxNQUFNLFNBQVMsQ0FBQyxLQUFHLEtBQUssTUFBSSxLQUFLLFFBQU0sS0FBSyxNQUFJLEtBQUssS0FBSyxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUssTUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUUsR0FBRSxDQUFDLENBQUMsSUFBRyxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUUsS0FBSyxHQUFHLEtBQVEsV0FBRSxLQUFLLEdBQUcsS0FBUSxXQUFFLE1BQUksS0FBSztBQUFBLFlBQUcsS0FBSyxLQUFHLEtBQUssR0FBRztBQUFBLFVBQVEsU0FBRyxNQUFJLEtBQUs7QUFBQSxZQUFHLEtBQUssS0FBRyxLQUFLLEdBQUc7QUFBQSxVQUFPO0FBQUEsWUFBQyxJQUFJLElBQUUsS0FBSyxHQUFHO0FBQUEsWUFBRyxLQUFLLEdBQUcsS0FBRyxLQUFLLEdBQUc7QUFBQSxZQUFHLElBQUksSUFBRSxLQUFLLEdBQUc7QUFBQSxZQUFHLEtBQUssR0FBRyxLQUFHLEtBQUssR0FBRztBQUFBO0FBQUEsVUFBRyxLQUFLLE1BQUssS0FBSyxHQUFHLEtBQUssQ0FBQztBQUFBO0FBQUEsSUFBRTtBQUFBLElBQUMsSUFBRyxLQUFLLE1BQUksS0FBSyxJQUFJLFFBQU87QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLElBQUc7QUFBQSxNQUFFLE1BQUssSUFBRSxHQUFHLE1BQU07QUFBQSxRQUFHLEtBQUssS0FBSyxHQUFHLENBQUM7QUFBQSxJQUFDO0FBQUEsSUFBQyxPQUFPO0FBQUE7QUFBQSxFQUFFLEtBQUssR0FBRTtBQUFBLElBQUMsT0FBTyxLQUFLLEdBQUcsUUFBUTtBQUFBO0FBQUEsRUFBRSxFQUFFLENBQUMsR0FBRTtBQUFBLElBQUMsU0FBUSxLQUFLLEtBQUssR0FBRyxFQUFDLFlBQVcsS0FBRSxDQUFDLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLEdBQUc7QUFBQSxNQUFHLElBQUcsS0FBSyxHQUFHLENBQUM7QUFBQSxRQUFFLEVBQUUsa0JBQWtCLE1BQU0sSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUFBLE1BQU07QUFBQSxRQUFDLElBQUksSUFBRSxLQUFLLEdBQUc7QUFBQSxRQUFHLEtBQUssTUFBSSxLQUFLLEtBQUssR0FB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
9766
+ //# debugId=E7C8E9637525899C64756E2164756E21
9767
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL2xpYi9wYXJzZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL2xpYi9jcmVhdGUtZGF0ZXRpbWUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL2xpYi9mb3JtYXQtbnVtLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaWFybmEvdG9tbC9saWIvY3JlYXRlLWRhdGV0aW1lLWZsb2F0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaWFybmEvdG9tbC9saWIvY3JlYXRlLWRhdGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL2xpYi9jcmVhdGUtdGltZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGlhcm5hL3RvbWwvbGliL3RvbWwtcGFyc2VyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaWFybmEvdG9tbC9wYXJzZS1wcmV0dHktZXJyb3IuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL3BhcnNlLXN0cmluZy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGlhcm5hL3RvbWwvcGFyc2UtYXN5bmMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL3BhcnNlLXN0cmVhbS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGlhcm5hL3RvbWwvcGFyc2UuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL3N0cmluZ2lmeS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGlhcm5hL3RvbWwvdG9tbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvdW5pdmVyc2FsaWZ5L2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9wb2x5ZmlsbHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL2xlZ2FjeS1zdHJlYW1zLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9jbG9uZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvZ3JhY2VmdWwtZnMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9mcy9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21rZGlycy91dGlscy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21rZGlycy9tYWtlLWRpci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21rZGlycy9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3BhdGgtZXhpc3RzL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvdXRpbC91dGltZXMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi91dGlsL3N0YXQuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi91dGlsL2FzeW5jLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS9jb3B5LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS9jb3B5LXN5bmMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9jb3B5L2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvcmVtb3ZlL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW1wdHkvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvZmlsZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9saW5rLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL3N5bWxpbmstcGF0aHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvc3ltbGluay10eXBlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL3N5bWxpbmsuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2pzb25maWxlL3V0aWxzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9qc29uZmlsZS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2pzb24vanNvbmZpbGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9vdXRwdXQtZmlsZS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2pzb24vb3V0cHV0LWpzb24uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL291dHB1dC1qc29uLXN5bmMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbW92ZS9tb3ZlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbW92ZS9tb3ZlLXN5bmMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9tb3ZlL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvaW5kZXguanMiLCAiLi4vaW5kZXgudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhbGFuY2VkLW1hdGNoL2Rpc3QvZXNtL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9icmFjZS1leHBhbnNpb24vZGlzdC9lc20vaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2VzbS9hc3NlcnQtdmFsaWQtcGF0dGVybi5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbWluaW1hdGNoL2Rpc3QvZXNtL2JyYWNlLWV4cHJlc3Npb25zLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvZGlzdC9lc20vdW5lc2NhcGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2VzbS9hc3QuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2VzbS9lc2NhcGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2VzbS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2VzbS9nbG9iLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9scnUtY2FjaGUvZGlzdC9lc20vbm9kZS9pbmRleC5taW4uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3BhdGgtc2N1cnJ5L2Rpc3QvZXNtL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9taW5pcGFzcy9kaXN0L2VzbS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2VzbS9wYXR0ZXJuLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvZXNtL2lnbm9yZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2VzbS9wcm9jZXNzb3IuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dsb2IvZGlzdC9lc20vd2Fsa2VyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvZXNtL2hhcy1tYWdpYy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2VzbS9pbmRleC5qcyIsICIuLi9hZGFwdGVycy9lZGdlLW9uZS50cyIsICIuLi9hZGFwdGVycy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIndXNlIHN0cmljdCdcbmNvbnN0IFBhcnNlckVORCA9IDB4MTEwMDAwXG5jbGFzcyBQYXJzZXJFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgY29uc3RydWN0b3IgKG1zZywgZmlsZW5hbWUsIGxpbmVudW1iZXIpIHtcbiAgICBzdXBlcignW1BhcnNlckVycm9yXSAnICsgbXNnLCBmaWxlbmFtZSwgbGluZW51bWJlcilcbiAgICB0aGlzLm5hbWUgPSAnUGFyc2VyRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1BhcnNlckVycm9yJ1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUGFyc2VyRXJyb3IpXG4gIH1cbn1cbmNsYXNzIFN0YXRlIHtcbiAgY29uc3RydWN0b3IgKHBhcnNlcikge1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyXG4gICAgdGhpcy5idWYgPSAnJ1xuICAgIHRoaXMucmV0dXJuZWQgPSBudWxsXG4gICAgdGhpcy5yZXN1bHQgPSBudWxsXG4gICAgdGhpcy5yZXN1bHRUYWJsZSA9IG51bGxcbiAgICB0aGlzLnJlc3VsdEFyciA9IG51bGxcbiAgfVxufVxuY2xhc3MgUGFyc2VyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMucG9zID0gMFxuICAgIHRoaXMuY29sID0gMFxuICAgIHRoaXMubGluZSA9IDBcbiAgICB0aGlzLm9iaiA9IHt9XG4gICAgdGhpcy5jdHggPSB0aGlzLm9ialxuICAgIHRoaXMuc3RhY2sgPSBbXVxuICAgIHRoaXMuX2J1ZiA9ICcnXG4gICAgdGhpcy5jaGFyID0gbnVsbFxuICAgIHRoaXMuaWkgPSAwXG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdGF0ZSh0aGlzLnBhcnNlU3RhcnQpXG4gIH1cblxuICBwYXJzZSAoc3RyKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCB8fCBzdHIubGVuZ3RoID09IG51bGwpIHJldHVyblxuXG4gICAgdGhpcy5fYnVmID0gU3RyaW5nKHN0cilcbiAgICB0aGlzLmlpID0gLTFcbiAgICB0aGlzLmNoYXIgPSAtMVxuICAgIGxldCBnZXROZXh0XG4gICAgd2hpbGUgKGdldE5leHQgPT09IGZhbHNlIHx8IHRoaXMubmV4dENoYXIoKSkge1xuICAgICAgZ2V0TmV4dCA9IHRoaXMucnVuT25lKClcbiAgICB9XG4gICAgdGhpcy5fYnVmID0gbnVsbFxuICB9XG4gIG5leHRDaGFyICgpIHtcbiAgICBpZiAodGhpcy5jaGFyID09PSAweDBBKSB7XG4gICAgICArK3RoaXMubGluZVxuICAgICAgdGhpcy5jb2wgPSAtMVxuICAgIH1cbiAgICArK3RoaXMuaWlcbiAgICB0aGlzLmNoYXIgPSB0aGlzLl9idWYuY29kZVBvaW50QXQodGhpcy5paSlcbiAgICArK3RoaXMucG9zXG4gICAgKyt0aGlzLmNvbFxuICAgIHJldHVybiB0aGlzLmhhdmVCdWZmZXIoKVxuICB9XG4gIGhhdmVCdWZmZXIgKCkge1xuICAgIHJldHVybiB0aGlzLmlpIDwgdGhpcy5fYnVmLmxlbmd0aFxuICB9XG4gIHJ1bk9uZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUucGFyc2VyLmNhbGwodGhpcywgdGhpcy5zdGF0ZS5yZXR1cm5lZClcbiAgfVxuICBmaW5pc2ggKCkge1xuICAgIHRoaXMuY2hhciA9IFBhcnNlckVORFxuICAgIGxldCBsYXN0XG4gICAgZG8ge1xuICAgICAgbGFzdCA9IHRoaXMuc3RhdGUucGFyc2VyXG4gICAgICB0aGlzLnJ1bk9uZSgpXG4gICAgfSB3aGlsZSAodGhpcy5zdGF0ZS5wYXJzZXIgIT09IGxhc3QpXG5cbiAgICB0aGlzLmN0eCA9IG51bGxcbiAgICB0aGlzLnN0YXRlID0gbnVsbFxuICAgIHRoaXMuX2J1ZiA9IG51bGxcblxuICAgIHJldHVybiB0aGlzLm9ialxuICB9XG4gIG5leHQgKGZuKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgUGFyc2VyRXJyb3IoJ1RyaWVkIHRvIHNldCBzdGF0ZSB0byBub24tZXhpc3RlbnQgc3RhdGU6ICcgKyBKU09OLnN0cmluZ2lmeShmbikpXG4gICAgdGhpcy5zdGF0ZS5wYXJzZXIgPSBmblxuICB9XG4gIGdvdG8gKGZuKSB7XG4gICAgdGhpcy5uZXh0KGZuKVxuICAgIHJldHVybiB0aGlzLnJ1bk9uZSgpXG4gIH1cbiAgY2FsbCAoZm4sIHJldHVybldpdGgpIHtcbiAgICBpZiAocmV0dXJuV2l0aCkgdGhpcy5uZXh0KHJldHVybldpdGgpXG4gICAgdGhpcy5zdGFjay5wdXNoKHRoaXMuc3RhdGUpXG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdGF0ZShmbilcbiAgfVxuICBjYWxsTm93IChmbiwgcmV0dXJuV2l0aCkge1xuICAgIHRoaXMuY2FsbChmbiwgcmV0dXJuV2l0aClcbiAgICByZXR1cm4gdGhpcy5ydW5PbmUoKVxuICB9XG4gIHJldHVybiAodmFsdWUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA9PT0gMCkgdGhyb3cgdGhpcy5lcnJvcihuZXcgUGFyc2VyRXJyb3IoJ1N0YWNrIHVuZGVyZmxvdycpKVxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB2YWx1ZSA9IHRoaXMuc3RhdGUuYnVmXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuc3RhY2sucG9wKClcbiAgICB0aGlzLnN0YXRlLnJldHVybmVkID0gdmFsdWVcbiAgfVxuICByZXR1cm5Ob3cgKHZhbHVlKSB7XG4gICAgdGhpcy5yZXR1cm4odmFsdWUpXG4gICAgcmV0dXJuIHRoaXMucnVuT25lKClcbiAgfVxuICBjb25zdW1lICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0aGlzLmNoYXIgPT09IFBhcnNlckVORCkgdGhyb3cgdGhpcy5lcnJvcihuZXcgUGFyc2VyRXJyb3IoJ1VuZXhwZWN0ZWQgZW5kLW9mLWJ1ZmZlcicpKVxuICAgIHRoaXMuc3RhdGUuYnVmICs9IHRoaXMuX2J1Zlt0aGlzLmlpXVxuICB9XG4gIGVycm9yIChlcnIpIHtcbiAgICBlcnIubGluZSA9IHRoaXMubGluZVxuICAgIGVyci5jb2wgPSB0aGlzLmNvbFxuICAgIGVyci5wb3MgPSB0aGlzLnBvc1xuICAgIHJldHVybiBlcnJcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBwYXJzZVN0YXJ0ICgpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VyRXJyb3IoJ011c3QgZGVjbGFyZSBhIHBhcnNlU3RhcnQgbWV0aG9kJylcbiAgfVxufVxuUGFyc2VyLkVORCA9IFBhcnNlckVORFxuUGFyc2VyLkVycm9yID0gUGFyc2VyRXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gUGFyc2VyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSB2YWx1ZSA9PiB7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSlcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChpc05hTihkYXRlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgRGF0ZXRpbWUnKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBkYXRlXG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IChkLCBudW0pID0+IHtcbiAgbnVtID0gU3RyaW5nKG51bSlcbiAgd2hpbGUgKG51bS5sZW5ndGggPCBkKSBudW0gPSAnMCcgKyBudW1cbiAgcmV0dXJuIG51bVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbmNvbnN0IGYgPSByZXF1aXJlKCcuL2Zvcm1hdC1udW0uanMnKVxuXG5jbGFzcyBGbG9hdGluZ0RhdGVUaW1lIGV4dGVuZHMgRGF0ZSB7XG4gIGNvbnN0cnVjdG9yICh2YWx1ZSkge1xuICAgIHN1cGVyKHZhbHVlICsgJ1onKVxuICAgIHRoaXMuaXNGbG9hdGluZyA9IHRydWVcbiAgfVxuICB0b0lTT1N0cmluZyAoKSB7XG4gICAgY29uc3QgZGF0ZSA9IGAke3RoaXMuZ2V0VVRDRnVsbFllYXIoKX0tJHtmKDIsIHRoaXMuZ2V0VVRDTW9udGgoKSArIDEpfS0ke2YoMiwgdGhpcy5nZXRVVENEYXRlKCkpfWBcbiAgICBjb25zdCB0aW1lID0gYCR7ZigyLCB0aGlzLmdldFVUQ0hvdXJzKCkpfToke2YoMiwgdGhpcy5nZXRVVENNaW51dGVzKCkpfToke2YoMiwgdGhpcy5nZXRVVENTZWNvbmRzKCkpfS4ke2YoMywgdGhpcy5nZXRVVENNaWxsaXNlY29uZHMoKSl9YFxuICAgIHJldHVybiBgJHtkYXRlfVQke3RpbWV9YFxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmFsdWUgPT4ge1xuICBjb25zdCBkYXRlID0gbmV3IEZsb2F0aW5nRGF0ZVRpbWUodmFsdWUpXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNOYU4oZGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIERhdGV0aW1lJylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0ZVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuY29uc3QgZiA9IHJlcXVpcmUoJy4vZm9ybWF0LW51bS5qcycpXG5jb25zdCBEYXRlVGltZSA9IGdsb2JhbC5EYXRlXG5cbmNsYXNzIERhdGUgZXh0ZW5kcyBEYXRlVGltZSB7XG4gIGNvbnN0cnVjdG9yICh2YWx1ZSkge1xuICAgIHN1cGVyKHZhbHVlKVxuICAgIHRoaXMuaXNEYXRlID0gdHJ1ZVxuICB9XG4gIHRvSVNPU3RyaW5nICgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5nZXRVVENGdWxsWWVhcigpfS0ke2YoMiwgdGhpcy5nZXRVVENNb250aCgpICsgMSl9LSR7ZigyLCB0aGlzLmdldFVUQ0RhdGUoKSl9YFxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmFsdWUgPT4ge1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNOYU4oZGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIERhdGV0aW1lJylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0ZVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuY29uc3QgZiA9IHJlcXVpcmUoJy4vZm9ybWF0LW51bS5qcycpXG5cbmNsYXNzIFRpbWUgZXh0ZW5kcyBEYXRlIHtcbiAgY29uc3RydWN0b3IgKHZhbHVlKSB7XG4gICAgc3VwZXIoYDAwMDAtMDEtMDFUJHt2YWx1ZX1aYClcbiAgICB0aGlzLmlzVGltZSA9IHRydWVcbiAgfVxuICB0b0lTT1N0cmluZyAoKSB7XG4gICAgcmV0dXJuIGAke2YoMiwgdGhpcy5nZXRVVENIb3VycygpKX06JHtmKDIsIHRoaXMuZ2V0VVRDTWludXRlcygpKX06JHtmKDIsIHRoaXMuZ2V0VVRDU2Vjb25kcygpKX0uJHtmKDMsIHRoaXMuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpfWBcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZhbHVlID0+IHtcbiAgY29uc3QgZGF0ZSA9IG5ldyBUaW1lKHZhbHVlKVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzTmFOKGRhdGUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBEYXRldGltZScpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRhdGVcbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbi8qIGVzbGludC1kaXNhYmxlIG5vLW5ldy13cmFwcGVycywgbm8tZXZhbCwgY2FtZWxjYXNlLCBvcGVyYXRvci1saW5lYnJlYWsgKi9cbm1vZHVsZS5leHBvcnRzID0gbWFrZVBhcnNlckNsYXNzKHJlcXVpcmUoJy4vcGFyc2VyLmpzJykpXG5tb2R1bGUuZXhwb3J0cy5tYWtlUGFyc2VyQ2xhc3MgPSBtYWtlUGFyc2VyQ2xhc3NcblxuY2xhc3MgVG9tbEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobXNnKSB7XG4gICAgc3VwZXIobXNnKVxuICAgIHRoaXMubmFtZSA9ICdUb21sRXJyb3InXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFRvbWxFcnJvcilcbiAgICB0aGlzLmZyb21UT01MID0gdHJ1ZVxuICAgIHRoaXMud3JhcHBlZCA9IG51bGxcbiAgfVxufVxuVG9tbEVycm9yLndyYXAgPSBlcnIgPT4ge1xuICBjb25zdCB0ZXJyID0gbmV3IFRvbWxFcnJvcihlcnIubWVzc2FnZSlcbiAgdGVyci5jb2RlID0gZXJyLmNvZGVcbiAgdGVyci53cmFwcGVkID0gZXJyXG4gIHJldHVybiB0ZXJyXG59XG5tb2R1bGUuZXhwb3J0cy5Ub21sRXJyb3IgPSBUb21sRXJyb3JcblxuY29uc3QgY3JlYXRlRGF0ZVRpbWUgPSByZXF1aXJlKCcuL2NyZWF0ZS1kYXRldGltZS5qcycpXG5jb25zdCBjcmVhdGVEYXRlVGltZUZsb2F0ID0gcmVxdWlyZSgnLi9jcmVhdGUtZGF0ZXRpbWUtZmxvYXQuanMnKVxuY29uc3QgY3JlYXRlRGF0ZSA9IHJlcXVpcmUoJy4vY3JlYXRlLWRhdGUuanMnKVxuY29uc3QgY3JlYXRlVGltZSA9IHJlcXVpcmUoJy4vY3JlYXRlLXRpbWUuanMnKVxuXG5jb25zdCBDVFJMX0kgPSAweDA5XG5jb25zdCBDVFJMX0ogPSAweDBBXG5jb25zdCBDVFJMX00gPSAweDBEXG5jb25zdCBDVFJMX0NIQVJfQk9VTkRBUlkgPSAweDFGIC8vIHRoZSBsYXN0IG5vbi1jaGFyYWN0ZXIgaW4gdGhlIGxhdGluMSByZWdpb24gb2YgdW5pY29kZSwgZXhjZXB0IERFTFxuY29uc3QgQ0hBUl9TUCA9IDB4MjBcbmNvbnN0IENIQVJfUVVPVCA9IDB4MjJcbmNvbnN0IENIQVJfTlVNID0gMHgyM1xuY29uc3QgQ0hBUl9BUE9TID0gMHgyN1xuY29uc3QgQ0hBUl9QTFVTID0gMHgyQlxuY29uc3QgQ0hBUl9DT01NQSA9IDB4MkNcbmNvbnN0IENIQVJfSFlQSEVOID0gMHgyRFxuY29uc3QgQ0hBUl9QRVJJT0QgPSAweDJFXG5jb25zdCBDSEFSXzAgPSAweDMwXG5jb25zdCBDSEFSXzEgPSAweDMxXG5jb25zdCBDSEFSXzcgPSAweDM3XG5jb25zdCBDSEFSXzkgPSAweDM5XG5jb25zdCBDSEFSX0NPTE9OID0gMHgzQVxuY29uc3QgQ0hBUl9FUVVBTFMgPSAweDNEXG5jb25zdCBDSEFSX0EgPSAweDQxXG5jb25zdCBDSEFSX0UgPSAweDQ1XG5jb25zdCBDSEFSX0YgPSAweDQ2XG5jb25zdCBDSEFSX1QgPSAweDU0XG5jb25zdCBDSEFSX1UgPSAweDU1XG5jb25zdCBDSEFSX1ogPSAweDVBXG5jb25zdCBDSEFSX0xPV0JBUiA9IDB4NUZcbmNvbnN0IENIQVJfYSA9IDB4NjFcbmNvbnN0IENIQVJfYiA9IDB4NjJcbmNvbnN0IENIQVJfZSA9IDB4NjVcbmNvbnN0IENIQVJfZiA9IDB4NjZcbmNvbnN0IENIQVJfaSA9IDB4NjlcbmNvbnN0IENIQVJfbCA9IDB4NkNcbmNvbnN0IENIQVJfbiA9IDB4NkVcbmNvbnN0IENIQVJfbyA9IDB4NkZcbmNvbnN0IENIQVJfciA9IDB4NzJcbmNvbnN0IENIQVJfcyA9IDB4NzNcbmNvbnN0IENIQVJfdCA9IDB4NzRcbmNvbnN0IENIQVJfdSA9IDB4NzVcbmNvbnN0IENIQVJfeCA9IDB4NzhcbmNvbnN0IENIQVJfeiA9IDB4N0FcbmNvbnN0IENIQVJfTENVQiA9IDB4N0JcbmNvbnN0IENIQVJfUkNVQiA9IDB4N0RcbmNvbnN0IENIQVJfTFNRQiA9IDB4NUJcbmNvbnN0IENIQVJfQlNPTCA9IDB4NUNcbmNvbnN0IENIQVJfUlNRQiA9IDB4NURcbmNvbnN0IENIQVJfREVMID0gMHg3RlxuY29uc3QgU1VSUk9HQVRFX0ZJUlNUID0gMHhEODAwXG5jb25zdCBTVVJST0dBVEVfTEFTVCA9IDB4REZGRlxuXG5jb25zdCBlc2NhcGVzID0ge1xuICBbQ0hBUl9iXTogJ1xcdTAwMDgnLFxuICBbQ0hBUl90XTogJ1xcdTAwMDknLFxuICBbQ0hBUl9uXTogJ1xcdTAwMEEnLFxuICBbQ0hBUl9mXTogJ1xcdTAwMEMnLFxuICBbQ0hBUl9yXTogJ1xcdTAwMEQnLFxuICBbQ0hBUl9RVU9UXTogJ1xcdTAwMjInLFxuICBbQ0hBUl9CU09MXTogJ1xcdTAwNUMnXG59XG5cbmZ1bmN0aW9uIGlzRGlnaXQgKGNwKSB7XG4gIHJldHVybiBjcCA+PSBDSEFSXzAgJiYgY3AgPD0gQ0hBUl85XG59XG5mdW5jdGlvbiBpc0hleGl0IChjcCkge1xuICByZXR1cm4gKGNwID49IENIQVJfQSAmJiBjcCA8PSBDSEFSX0YpIHx8IChjcCA+PSBDSEFSX2EgJiYgY3AgPD0gQ0hBUl9mKSB8fCAoY3AgPj0gQ0hBUl8wICYmIGNwIDw9IENIQVJfOSlcbn1cbmZ1bmN0aW9uIGlzQml0IChjcCkge1xuICByZXR1cm4gY3AgPT09IENIQVJfMSB8fCBjcCA9PT0gQ0hBUl8wXG59XG5mdW5jdGlvbiBpc09jdGl0IChjcCkge1xuICByZXR1cm4gKGNwID49IENIQVJfMCAmJiBjcCA8PSBDSEFSXzcpXG59XG5mdW5jdGlvbiBpc0FscGhhTnVtUXVvdGVIeXBoZW4gKGNwKSB7XG4gIHJldHVybiAoY3AgPj0gQ0hBUl9BICYmIGNwIDw9IENIQVJfWilcbiAgICAgIHx8IChjcCA+PSBDSEFSX2EgJiYgY3AgPD0gQ0hBUl96KVxuICAgICAgfHwgKGNwID49IENIQVJfMCAmJiBjcCA8PSBDSEFSXzkpXG4gICAgICB8fCBjcCA9PT0gQ0hBUl9BUE9TXG4gICAgICB8fCBjcCA9PT0gQ0hBUl9RVU9UXG4gICAgICB8fCBjcCA9PT0gQ0hBUl9MT1dCQVJcbiAgICAgIHx8IGNwID09PSBDSEFSX0hZUEhFTlxufVxuZnVuY3Rpb24gaXNBbHBoYU51bUh5cGhlbiAoY3ApIHtcbiAgcmV0dXJuIChjcCA+PSBDSEFSX0EgJiYgY3AgPD0gQ0hBUl9aKVxuICAgICAgfHwgKGNwID49IENIQVJfYSAmJiBjcCA8PSBDSEFSX3opXG4gICAgICB8fCAoY3AgPj0gQ0hBUl8wICYmIGNwIDw9IENIQVJfOSlcbiAgICAgIHx8IGNwID09PSBDSEFSX0xPV0JBUlxuICAgICAgfHwgY3AgPT09IENIQVJfSFlQSEVOXG59XG5jb25zdCBfdHlwZSA9IFN5bWJvbCgndHlwZScpXG5jb25zdCBfZGVjbGFyZWQgPSBTeW1ib2woJ2RlY2xhcmVkJylcblxuY29uc3QgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG5jb25zdCBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eVxuY29uc3QgZGVzY3JpcHRvciA9IHtjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkfVxuXG5mdW5jdGlvbiBoYXNLZXkgKG9iaiwga2V5KSB7XG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgcmV0dXJuIHRydWVcbiAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycpIGRlZmluZVByb3BlcnR5KG9iaiwgJ19fcHJvdG9fXycsIGRlc2NyaXB0b3IpXG4gIHJldHVybiBmYWxzZVxufVxuXG5jb25zdCBJTkxJTkVfVEFCTEUgPSBTeW1ib2woJ2lubGluZS10YWJsZScpXG5mdW5jdGlvbiBJbmxpbmVUYWJsZSAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSwge1xuICAgIFtfdHlwZV06IHt2YWx1ZTogSU5MSU5FX1RBQkxFfVxuICB9KVxufVxuZnVuY3Rpb24gaXNJbmxpbmVUYWJsZSAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIChvYmopICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBvYmpbX3R5cGVdID09PSBJTkxJTkVfVEFCTEVcbn1cblxuY29uc3QgVEFCTEUgPSBTeW1ib2woJ3RhYmxlJylcbmZ1bmN0aW9uIFRhYmxlICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHt9LCB7XG4gICAgW190eXBlXToge3ZhbHVlOiBUQUJMRX0sXG4gICAgW19kZWNsYXJlZF06IHt2YWx1ZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlfVxuICB9KVxufVxuZnVuY3Rpb24gaXNUYWJsZSAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIChvYmopICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBvYmpbX3R5cGVdID09PSBUQUJMRVxufVxuXG5jb25zdCBfY29udGVudFR5cGUgPSBTeW1ib2woJ2NvbnRlbnQtdHlwZScpXG5jb25zdCBJTkxJTkVfTElTVCA9IFN5bWJvbCgnaW5saW5lLWxpc3QnKVxuZnVuY3Rpb24gSW5saW5lTGlzdCAodHlwZSkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoW10sIHtcbiAgICBbX3R5cGVdOiB7dmFsdWU6IElOTElORV9MSVNUfSxcbiAgICBbX2NvbnRlbnRUeXBlXToge3ZhbHVlOiB0eXBlfVxuICB9KVxufVxuZnVuY3Rpb24gaXNJbmxpbmVMaXN0IChvYmopIHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2YgKG9iaikgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIG9ialtfdHlwZV0gPT09IElOTElORV9MSVNUXG59XG5cbmNvbnN0IExJU1QgPSBTeW1ib2woJ2xpc3QnKVxuZnVuY3Rpb24gTGlzdCAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhbXSwge1xuICAgIFtfdHlwZV06IHt2YWx1ZTogTElTVH1cbiAgfSlcbn1cbmZ1bmN0aW9uIGlzTGlzdCAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIChvYmopICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBvYmpbX3R5cGVdID09PSBMSVNUXG59XG5cbi8vIGluIGFuIGV2YWwsIHRvIGxldCBidW5kbGVycyBub3Qgc2x1cnAgaW4gYSB1dGlsIHByb3h5XG5sZXQgX2N1c3RvbVxudHJ5IHtcbiAgY29uc3QgdXRpbEluc3BlY3QgPSBldmFsKFwicmVxdWlyZSgndXRpbCcpLmluc3BlY3RcIilcbiAgX2N1c3RvbSA9IHV0aWxJbnNwZWN0LmN1c3RvbVxufSBjYXRjaCAoXykge1xuICAvKiBldmFsIHJlcXVpcmUgbm90IGF2YWlsYWJsZSBpbiB0cmFuc3BpbGVkIGJ1bmRsZSAqL1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNvbnN0IF9pbnNwZWN0ID0gX2N1c3RvbSB8fCAnaW5zcGVjdCdcblxuY2xhc3MgQm94ZWRCaWdJbnQge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy52YWx1ZSA9IGdsb2JhbC5CaWdJbnQuYXNJbnROKDY0LCB2YWx1ZSlcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIF90eXBlLCB7dmFsdWU6IElOVEVHRVJ9KVxuICB9XG4gIGlzTmFOICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSA9PT0gbnVsbFxuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMudmFsdWUpXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgW19pbnNwZWN0XSAoKSB7XG4gICAgcmV0dXJuIGBbQmlnSW50OiAke3RoaXMudG9TdHJpbmcoKX1dfWBcbiAgfVxuICB2YWx1ZU9mICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVxuICB9XG59XG5cbmNvbnN0IElOVEVHRVIgPSBTeW1ib2woJ2ludGVnZXInKVxuZnVuY3Rpb24gSW50ZWdlciAodmFsdWUpIHtcbiAgbGV0IG51bSA9IE51bWJlcih2YWx1ZSlcbiAgLy8gLTAgaXMgYSBmbG9hdCB0aGluZywgbm90IGFuIGludCB0aGluZ1xuICBpZiAoT2JqZWN0LmlzKG51bSwgLTApKSBudW0gPSAwXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChnbG9iYWwuQmlnSW50ICYmICFOdW1iZXIuaXNTYWZlSW50ZWdlcihudW0pKSB7XG4gICAgcmV0dXJuIG5ldyBCb3hlZEJpZ0ludCh2YWx1ZSlcbiAgfSBlbHNlIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuZXcgTnVtYmVyKG51bSksIHtcbiAgICAgIGlzTmFOOiB7dmFsdWU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlzTmFOKHRoaXMpIH19LFxuICAgICAgW190eXBlXToge3ZhbHVlOiBJTlRFR0VSfSxcbiAgICAgIFtfaW5zcGVjdF06IHt2YWx1ZTogKCkgPT4gYFtJbnRlZ2VyOiAke3ZhbHVlfV1gfVxuICAgIH0pXG4gIH1cbn1cbmZ1bmN0aW9uIGlzSW50ZWdlciAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIChvYmopICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBvYmpbX3R5cGVdID09PSBJTlRFR0VSXG59XG5cbmNvbnN0IEZMT0FUID0gU3ltYm9sKCdmbG9hdCcpXG5mdW5jdGlvbiBGbG9hdCAodmFsdWUpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG5ldyBOdW1iZXIodmFsdWUpLCB7XG4gICAgW190eXBlXToge3ZhbHVlOiBGTE9BVH0sXG4gICAgW19pbnNwZWN0XToge3ZhbHVlOiAoKSA9PiBgW0Zsb2F0OiAke3ZhbHVlfV1gfVxuICB9KVxufVxuZnVuY3Rpb24gaXNGbG9hdCAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIChvYmopICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBvYmpbX3R5cGVdID09PSBGTE9BVFxufVxuXG5mdW5jdGlvbiB0b21sVHlwZSAodmFsdWUpIHtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWx1ZVxuICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnbnVsbCdcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gJ2RhdGV0aW1lJ1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKF90eXBlIGluIHZhbHVlKSB7XG4gICAgICBzd2l0Y2ggKHZhbHVlW190eXBlXSkge1xuICAgICAgICBjYXNlIElOTElORV9UQUJMRTogcmV0dXJuICdpbmxpbmUtdGFibGUnXG4gICAgICAgIGNhc2UgSU5MSU5FX0xJU1Q6IHJldHVybiAnaW5saW5lLWxpc3QnXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGNhc2UgVEFCTEU6IHJldHVybiAndGFibGUnXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGNhc2UgTElTVDogcmV0dXJuICdsaXN0J1xuICAgICAgICBjYXNlIEZMT0FUOiByZXR1cm4gJ2Zsb2F0J1xuICAgICAgICBjYXNlIElOVEVHRVI6IHJldHVybiAnaW50ZWdlcidcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHR5cGVcbn1cblxuZnVuY3Rpb24gbWFrZVBhcnNlckNsYXNzIChQYXJzZXIpIHtcbiAgY2xhc3MgVE9NTFBhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgc3VwZXIoKVxuICAgICAgdGhpcy5jdHggPSB0aGlzLm9iaiA9IFRhYmxlKClcbiAgICB9XG5cbiAgICAvKiBNQVRDSCBIRUxQRVIgKi9cbiAgICBhdEVuZE9mV29yZCAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGFyID09PSBDSEFSX05VTSB8fCB0aGlzLmNoYXIgPT09IENUUkxfSSB8fCB0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5hdEVuZE9mTGluZSgpXG4gICAgfVxuICAgIGF0RW5kT2ZMaW5lICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoYXIgPT09IFBhcnNlci5FTkQgfHwgdGhpcy5jaGFyID09PSBDVFJMX0ogfHwgdGhpcy5jaGFyID09PSBDVFJMX01cbiAgICB9XG5cbiAgICBwYXJzZVN0YXJ0ICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IFBhcnNlci5FTkQpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xTUUIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlVGFibGVPckxpc3QpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9OVU0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlQ29tbWVudClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDVFJMX0ogfHwgdGhpcy5jaGFyID09PSBDSEFSX1NQIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9JIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9NKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9IGVsc2UgaWYgKGlzQWxwaGFOdW1RdW90ZUh5cGhlbih0aGlzLmNoYXIpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUFzc2lnblN0YXRlbWVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcihgVW5rbm93biBjaGFyYWN0ZXIgXCIke3RoaXMuY2hhcn1cImApKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhFTFBFUiwgdGhpcyBzdHJpcHMgYW55IHdoaXRlc3BhY2UgYW5kIGNvbW1lbnRzIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmVcbiAgICAvLyB0aGVuIFJFVFVSTlMuIExhc3Qgc3RhdGUgaW4gYSBwcm9kdWN0aW9uLlxuICAgIHBhcnNlV2hpdGVzcGFjZVRvRU9MICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kgfHwgdGhpcy5jaGFyID09PSBDVFJMX00pIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX05VTSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VDb21tZW50KVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IFBhcnNlci5FTkQgfHwgdGhpcy5jaGFyID09PSBDVFJMX0opIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW5leHBlY3RlZCBjaGFyYWN0ZXIsIGV4cGVjdGVkIG9ubHkgd2hpdGVzcGFjZSBvciBjb21tZW50cyB0aWxsIGVuZCBvZiBsaW5lJykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogQVNTSUdOTUVOVDoga2V5ID0gdmFsdWUgKi9cbiAgICBwYXJzZUFzc2lnblN0YXRlbWVudCAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWxsTm93KHRoaXMucGFyc2VBc3NpZ24sIHRoaXMucmVjb3JkQXNzaWduU3RhdGVtZW50KVxuICAgIH1cbiAgICByZWNvcmRBc3NpZ25TdGF0ZW1lbnQgKGt2KSB7XG4gICAgICBsZXQgdGFyZ2V0ID0gdGhpcy5jdHhcbiAgICAgIGxldCBmaW5hbEtleSA9IGt2LmtleS5wb3AoKVxuICAgICAgZm9yIChsZXQga3cgb2Yga3Yua2V5KSB7XG4gICAgICAgIGlmIChoYXNLZXkodGFyZ2V0LCBrdykgJiYgKCFpc1RhYmxlKHRhcmdldFtrd10pIHx8IHRhcmdldFtrd11bX2RlY2xhcmVkXSkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBleGlzdGluZyBrZXlcIikpXG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W2t3XSA9IHRhcmdldFtrd10gfHwgVGFibGUoKVxuICAgICAgfVxuICAgICAgaWYgKGhhc0tleSh0YXJnZXQsIGZpbmFsS2V5KSkge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBleGlzdGluZyBrZXlcIikpXG4gICAgICB9XG4gICAgICAvLyB1bmJveCBvdXIgbnVtYmVyc1xuICAgICAgaWYgKGlzSW50ZWdlcihrdi52YWx1ZSkgfHwgaXNGbG9hdChrdi52YWx1ZSkpIHtcbiAgICAgICAgdGFyZ2V0W2ZpbmFsS2V5XSA9IGt2LnZhbHVlLnZhbHVlT2YoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W2ZpbmFsS2V5XSA9IGt2LnZhbHVlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VXaGl0ZXNwYWNlVG9FT0wpXG4gICAgfVxuXG4gICAgLyogQVNTU0lHTk1FTlQgZXhwcmVzc2lvbiwga2V5ID0gdmFsdWUgcG9zc2libHkgaW5zaWRlIGFuIGlubGluZSB0YWJsZSAqL1xuICAgIHBhcnNlQXNzaWduICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUtleXdvcmQsIHRoaXMucmVjb3JkQXNzaWduS2V5d29yZClcbiAgICB9XG4gICAgcmVjb3JkQXNzaWduS2V5d29yZCAoa2V5KSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5yZXN1bHRUYWJsZSkge1xuICAgICAgICB0aGlzLnN0YXRlLnJlc3VsdFRhYmxlLnB1c2goa2V5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5yZXN1bHRUYWJsZSA9IFtrZXldXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VBc3NpZ25LZXl3b3JkUHJlRG90KVxuICAgIH1cbiAgICBwYXJzZUFzc2lnbktleXdvcmRQcmVEb3QgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9QRVJJT0QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlQXNzaWduS2V5d29yZFBvc3REb3QpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciAhPT0gQ0hBUl9TUCAmJiB0aGlzLmNoYXIgIT09IENUUkxfSSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VBc3NpZ25FcXVhbClcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VBc3NpZ25LZXl3b3JkUG9zdERvdCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyICE9PSBDSEFSX1NQICYmIHRoaXMuY2hhciAhPT0gQ1RSTF9JKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUtleXdvcmQsIHRoaXMucmVjb3JkQXNzaWduS2V5d29yZClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZUFzc2lnbkVxdWFsICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfRVFVQUxTKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUFzc2lnblByZVZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciwgZXhwZWN0ZWQgXCI9XCInKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VBc3NpZ25QcmVWYWx1ZSAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1NQIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9JKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsTm93KHRoaXMucGFyc2VWYWx1ZSwgdGhpcy5yZWNvcmRBc3NpZ25WYWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmVjb3JkQXNzaWduVmFsdWUgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coe2tleTogdGhpcy5zdGF0ZS5yZXN1bHRUYWJsZSwgdmFsdWU6IHZhbHVlfSlcbiAgICB9XG5cbiAgICAvKiBDT01NRU5UUzogIy4uLmVvbCAqL1xuICAgIHBhcnNlQ29tbWVudCAoKSB7XG4gICAgICBkbyB7XG4gICAgICAgIGlmICh0aGlzLmNoYXIgPT09IFBhcnNlci5FTkQgfHwgdGhpcy5jaGFyID09PSBDVFJMX0opIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm4oKVxuICAgICAgICB9XG4gICAgICB9IHdoaWxlICh0aGlzLm5leHRDaGFyKCkpXG4gICAgfVxuXG4gICAgLyogVEFCTEVTIEFORCBMSVNUUywgW2Zvb10gYW5kIFtbZm9vXV0gKi9cbiAgICBwYXJzZVRhYmxlT3JMaXN0ICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTFNRQikge1xuICAgICAgICB0aGlzLm5leHQodGhpcy5wYXJzZUxpc3QpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VUYWJsZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBUQUJMRSBbZm9vLmJhci5iYXpdICovXG4gICAgcGFyc2VUYWJsZSAoKSB7XG4gICAgICB0aGlzLmN0eCA9IHRoaXMub2JqXG4gICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VUYWJsZU5leHQpXG4gICAgfVxuICAgIHBhcnNlVGFibGVOZXh0ICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUtleXdvcmQsIHRoaXMucGFyc2VUYWJsZU1vcmUpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlVGFibGVNb3JlIChrZXl3b3JkKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1NQIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9JKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9SU1FCKSB7XG4gICAgICAgIGlmIChoYXNLZXkodGhpcy5jdHgsIGtleXdvcmQpICYmICghaXNUYWJsZSh0aGlzLmN0eFtrZXl3b3JkXSkgfHwgdGhpcy5jdHhba2V5d29yZF1bX2RlY2xhcmVkXSkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBleGlzdGluZyBrZXlcIikpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmN0eFtrZXl3b3JkXSA9IHRoaXMuY3R4W2tleXdvcmRdIHx8IFRhYmxlKClcbiAgICAgICAgICB0aGlzLmN0eFtfZGVjbGFyZWRdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZVdoaXRlc3BhY2VUb0VPTClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1BFUklPRCkge1xuICAgICAgICBpZiAoIWhhc0tleSh0aGlzLmN0eCwga2V5d29yZCkpIHtcbiAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY3R4W2tleXdvcmRdID0gVGFibGUoKVxuICAgICAgICB9IGVsc2UgaWYgKGlzVGFibGUodGhpcy5jdHhba2V5d29yZF0pKSB7XG4gICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmN0eFtrZXl3b3JkXVxuICAgICAgICB9IGVsc2UgaWYgKGlzTGlzdCh0aGlzLmN0eFtrZXl3b3JkXSkpIHtcbiAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY3R4W2tleXdvcmRdW3RoaXMuY3R4W2tleXdvcmRdLmxlbmd0aCAtIDFdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKFwiQ2FuJ3QgcmVkZWZpbmUgZXhpc3Rpbmcga2V5XCIpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZVRhYmxlTmV4dClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW5leHBlY3RlZCBjaGFyYWN0ZXIsIGV4cGVjdGVkIHdoaXRlc3BhY2UsIC4gb3IgXScpKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qIExJU1QgW1thLmIuY11dICovXG4gICAgcGFyc2VMaXN0ICgpIHtcbiAgICAgIHRoaXMuY3R4ID0gdGhpcy5vYmpcbiAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZUxpc3ROZXh0KVxuICAgIH1cbiAgICBwYXJzZUxpc3ROZXh0ICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUtleXdvcmQsIHRoaXMucGFyc2VMaXN0TW9yZSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VMaXN0TW9yZSAoa2V5d29yZCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9TUCB8fCB0aGlzLmNoYXIgPT09IENUUkxfSSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUlNRQikge1xuICAgICAgICBpZiAoIWhhc0tleSh0aGlzLmN0eCwga2V5d29yZCkpIHtcbiAgICAgICAgICB0aGlzLmN0eFtrZXl3b3JkXSA9IExpc3QoKVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0lubGluZUxpc3QodGhpcy5jdHhba2V5d29yZF0pKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKFwiQ2FuJ3QgZXh0ZW5kIGFuIGlubGluZSBhcnJheVwiKSlcbiAgICAgICAgfSBlbHNlIGlmIChpc0xpc3QodGhpcy5jdHhba2V5d29yZF0pKSB7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IFRhYmxlKClcbiAgICAgICAgICB0aGlzLmN0eFtrZXl3b3JkXS5wdXNoKG5leHQpXG4gICAgICAgICAgdGhpcy5jdHggPSBuZXh0XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKFwiQ2FuJ3QgcmVkZWZpbmUgYW4gZXhpc3Rpbmcga2V5XCIpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUxpc3RFbmQpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9QRVJJT0QpIHtcbiAgICAgICAgaWYgKCFoYXNLZXkodGhpcy5jdHgsIGtleXdvcmQpKSB7XG4gICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmN0eFtrZXl3b3JkXSA9IFRhYmxlKClcbiAgICAgICAgfSBlbHNlIGlmIChpc0lubGluZUxpc3QodGhpcy5jdHhba2V5d29yZF0pKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKFwiQ2FuJ3QgZXh0ZW5kIGFuIGlubGluZSBhcnJheVwiKSlcbiAgICAgICAgfSBlbHNlIGlmIChpc0lubGluZVRhYmxlKHRoaXMuY3R4W2tleXdvcmRdKSkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcihcIkNhbid0IGV4dGVuZCBhbiBpbmxpbmUgdGFibGVcIikpXG4gICAgICAgIH0gZWxzZSBpZiAoaXNMaXN0KHRoaXMuY3R4W2tleXdvcmRdKSkge1xuICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jdHhba2V5d29yZF1bdGhpcy5jdHhba2V5d29yZF0ubGVuZ3RoIC0gMV1cbiAgICAgICAgfSBlbHNlIGlmIChpc1RhYmxlKHRoaXMuY3R4W2tleXdvcmRdKSkge1xuICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jdHhba2V5d29yZF1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBhbiBleGlzdGluZyBrZXlcIikpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTGlzdE5leHQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyLCBleHBlY3RlZCB3aGl0ZXNwYWNlLCAuIG9yIF0nKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VMaXN0RW5kIChrZXl3b3JkKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1JTUUIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlV2hpdGVzcGFjZVRvRU9MKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciwgZXhwZWN0ZWQgd2hpdGVzcGFjZSwgLiBvciBdJykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogVkFMVUUgc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIGlubGluZSBsaXN0LCBpbmxpbmUgb2JqZWN0ICovXG4gICAgcGFyc2VWYWx1ZSAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBQYXJzZXIuRU5EKSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignS2V5IHdpdGhvdXQgdmFsdWUnKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1FVT1QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlRG91YmxlU3RyaW5nKVxuICAgICAgfSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0FQT1MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlU2luZ2xlU3RyaW5nKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfSFlQSEVOIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9QTFVTKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZU51bWJlclNpZ24pXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9pKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUluZilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTmFuKVxuICAgICAgfSBlbHNlIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTnVtYmVyT3JEYXRlVGltZSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX3QgfHwgdGhpcy5jaGFyID09PSBDSEFSX2YpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlQm9vbGVhbilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xTUUIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlSW5saW5lTGlzdCwgdGhpcy5yZWNvcmRWYWx1ZSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xDVUIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlSW5saW5lVGFibGUsIHRoaXMucmVjb3JkVmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyLCBleHBlY3Rpbmcgc3RyaW5nLCBudW1iZXIsIGRhdGV0aW1lLCBib29sZWFuLCBpbmxpbmUgYXJyYXkgb3IgaW5saW5lIHRhYmxlJykpXG4gICAgICB9XG4gICAgfVxuICAgIHJlY29yZFZhbHVlICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KHZhbHVlKVxuICAgIH1cblxuICAgIHBhcnNlSW5mICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfbikge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VJbmYyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciwgZXhwZWN0ZWQgXCJpbmZcIiwgXCIraW5mXCIgb3IgXCItaW5mXCInKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VJbmYyICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfZikge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5idWYgPT09ICctJykge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJldHVybigtSW5maW5pdHkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKEluZmluaXR5KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyLCBleHBlY3RlZCBcImluZlwiLCBcIitpbmZcIiBvciBcIi1pbmZcIicpKVxuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlTmFuICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VOYW4yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciwgZXhwZWN0ZWQgXCJuYW5cIicpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU5hbjIgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybihOYU4pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyLCBleHBlY3RlZCBcIm5hblwiJykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogS0VZUywgYmFyZXdvcmRzIG9yIGJhc2ljLCBsaXRlcmFsLCBvciBkb3R0ZWQgKi9cbiAgICBwYXJzZUtleXdvcmQgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9RVU9UKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUJhc2ljU3RyaW5nKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfQVBPUykge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VMaXRlcmFsU3RyaW5nKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlQmFyZUtleSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBLRVlTOiBiYXJld29yZHMgKi9cbiAgICBwYXJzZUJhcmVLZXkgKCkge1xuICAgICAgZG8ge1xuICAgICAgICBpZiAodGhpcy5jaGFyID09PSBQYXJzZXIuRU5EKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdLZXkgZW5kZWQgd2l0aG91dCB2YWx1ZScpKVxuICAgICAgICB9IGVsc2UgaWYgKGlzQWxwaGFOdW1IeXBoZW4odGhpcy5jaGFyKSkge1xuICAgICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5idWYubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdFbXB0eSBiYXJlIGtleXMgYXJlIG5vdCBhbGxvd2VkJykpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KClcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAodGhpcy5uZXh0Q2hhcigpKVxuICAgIH1cblxuICAgIC8qIFNUUklOR1MsIHNpbmdsZSBxdW90ZWQgKGxpdGVyYWwpICovXG4gICAgcGFyc2VTaW5nbGVTdHJpbmcgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9BUE9TKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUxpdGVyYWxNdWx0aVN0cmluZ01heWJlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTGl0ZXJhbFN0cmluZylcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VMaXRlcmFsU3RyaW5nICgpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9BUE9TKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmF0RW5kT2ZMaW5lKCkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VudGVybWluYXRlZCBzdHJpbmcnKSlcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfREVMIHx8ICh0aGlzLmNoYXIgPD0gQ1RSTF9DSEFSX0JPVU5EQVJZICYmIHRoaXMuY2hhciAhPT0gQ1RSTF9JKSkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3JDb250cm9sQ2hhckluU3RyaW5nKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICB9XG4gICAgICB9IHdoaWxlICh0aGlzLm5leHRDaGFyKCkpXG4gICAgfVxuICAgIHBhcnNlTGl0ZXJhbE11bHRpU3RyaW5nTWF5YmUgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9BUE9TKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUxpdGVyYWxNdWx0aVN0cmluZylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdygpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTGl0ZXJhbE11bHRpU3RyaW5nICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENUUkxfTSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENUUkxfSikge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VMaXRlcmFsTXVsdGlTdHJpbmdDb250ZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTGl0ZXJhbE11bHRpU3RyaW5nQ29udGVudClcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VMaXRlcmFsTXVsdGlTdHJpbmdDb250ZW50ICgpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9BUE9TKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTGl0ZXJhbE11bHRpRW5kKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gUGFyc2VyLkVORCkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW50ZXJtaW5hdGVkIG11bHRpLWxpbmUgc3RyaW5nJykpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0RFTCB8fCAodGhpcy5jaGFyIDw9IENUUkxfQ0hBUl9CT1VOREFSWSAmJiB0aGlzLmNoYXIgIT09IENUUkxfSSAmJiB0aGlzLmNoYXIgIT09IENUUkxfSiAmJiB0aGlzLmNoYXIgIT09IENUUkxfTSkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yQ29udHJvbENoYXJJblN0cmluZygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAodGhpcy5uZXh0Q2hhcigpKVxuICAgIH1cbiAgICBwYXJzZUxpdGVyYWxNdWx0aUVuZCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0FQT1MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTGl0ZXJhbE11bHRpRW5kMilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUuYnVmICs9IFwiJ1wiXG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZUxpdGVyYWxNdWx0aVN0cmluZ0NvbnRlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTGl0ZXJhbE11bHRpRW5kMiAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0FQT1MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUuYnVmICs9IFwiJydcIlxuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VMaXRlcmFsTXVsdGlTdHJpbmdDb250ZW50KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qIFNUUklOR1MgZG91YmxlIHF1b3RlZCAqL1xuICAgIHBhcnNlRG91YmxlU3RyaW5nICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUVVPVCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VNdWx0aVN0cmluZ01heWJlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlQmFzaWNTdHJpbmcpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlQmFzaWNTdHJpbmcgKCkge1xuICAgICAgZG8ge1xuICAgICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0JTT0wpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VFc2NhcGUsIHRoaXMucmVjb3JkRXNjYXBlUmVwbGFjZW1lbnQpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1FVT1QpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm4oKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXRFbmRPZkxpbmUoKSkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW50ZXJtaW5hdGVkIHN0cmluZycpKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9ERUwgfHwgKHRoaXMuY2hhciA8PSBDVFJMX0NIQVJfQk9VTkRBUlkgJiYgdGhpcy5jaGFyICE9PSBDVFJMX0kpKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvckNvbnRyb2xDaGFySW5TdHJpbmcoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIH1cbiAgICAgIH0gd2hpbGUgKHRoaXMubmV4dENoYXIoKSlcbiAgICB9XG4gICAgcmVjb3JkRXNjYXBlUmVwbGFjZW1lbnQgKHJlcGxhY2VtZW50KSB7XG4gICAgICB0aGlzLnN0YXRlLmJ1ZiArPSByZXBsYWNlbWVudFxuICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlQmFzaWNTdHJpbmcpXG4gICAgfVxuICAgIHBhcnNlTXVsdGlTdHJpbmdNYXliZSAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1FVT1QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTXVsdGlTdHJpbmcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU11bHRpU3RyaW5nICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENUUkxfTSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENUUkxfSikge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VNdWx0aVN0cmluZ0NvbnRlbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VNdWx0aVN0cmluZ0NvbnRlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTXVsdGlTdHJpbmdDb250ZW50ICgpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9CU09MKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlTXVsdGlFc2NhcGUsIHRoaXMucmVjb3JkTXVsdGlFc2NhcGVSZXBsYWNlbWVudClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUVVPVCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU11bHRpRW5kKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gUGFyc2VyLkVORCkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW50ZXJtaW5hdGVkIG11bHRpLWxpbmUgc3RyaW5nJykpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0RFTCB8fCAodGhpcy5jaGFyIDw9IENUUkxfQ0hBUl9CT1VOREFSWSAmJiB0aGlzLmNoYXIgIT09IENUUkxfSSAmJiB0aGlzLmNoYXIgIT09IENUUkxfSiAmJiB0aGlzLmNoYXIgIT09IENUUkxfTSkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yQ29udHJvbENoYXJJblN0cmluZygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAodGhpcy5uZXh0Q2hhcigpKVxuICAgIH1cbiAgICBlcnJvckNvbnRyb2xDaGFySW5TdHJpbmcgKCkge1xuICAgICAgbGV0IGRpc3BsYXlDb2RlID0gJ1xcXFx1MDAnXG4gICAgICBpZiAodGhpcy5jaGFyIDwgMTYpIHtcbiAgICAgICAgZGlzcGxheUNvZGUgKz0gJzAnXG4gICAgICB9XG4gICAgICBkaXNwbGF5Q29kZSArPSB0aGlzLmNoYXIudG9TdHJpbmcoMTYpXG5cbiAgICAgIHJldHVybiB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoYENvbnRyb2wgY2hhcmFjdGVycyAoY29kZXMgPCAweDFmIGFuZCAweDdmKSBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaW5ncywgdXNlICR7ZGlzcGxheUNvZGV9IGluc3RlYWRgKSlcbiAgICB9XG4gICAgcmVjb3JkTXVsdGlFc2NhcGVSZXBsYWNlbWVudCAocmVwbGFjZW1lbnQpIHtcbiAgICAgIHRoaXMuc3RhdGUuYnVmICs9IHJlcGxhY2VtZW50XG4gICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VNdWx0aVN0cmluZ0NvbnRlbnQpXG4gICAgfVxuICAgIHBhcnNlTXVsdGlFbmQgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9RVU9UKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU11bHRpRW5kMilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUuYnVmICs9ICdcIidcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTXVsdGlTdHJpbmdDb250ZW50KVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU11bHRpRW5kMiAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1FVT1QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUuYnVmICs9ICdcIlwiJ1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VNdWx0aVN0cmluZ0NvbnRlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTXVsdGlFc2NhcGUgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ1RSTF9NIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9KKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU11bHRpVHJpbSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1NQIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9JKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZVByZU11bHRpVHJpbSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZUVzY2FwZSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VQcmVNdWx0aVRyaW0gKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9TUCB8fCB0aGlzLmNoYXIgPT09IENUUkxfSSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENUUkxfTSB8fCB0aGlzLmNoYXIgPT09IENUUkxfSikge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VNdWx0aVRyaW0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCBlc2NhcGUgd2hpdGVzcGFjZVwiKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VNdWx0aVRyaW0gKCkge1xuICAgICAgLy8gZXhwbGljaXRseSB3aGl0ZXNwYWNlIGhlcmUsIEVORCBzaG91bGQgZm9sbG93IHRoZSBzYW1lIHBhdGggYXMgY2hhcnNcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENUUkxfSiB8fCB0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kgfHwgdGhpcy5jaGFyID09PSBDVFJMX00pIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdygpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlRXNjYXBlICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgaW4gZXNjYXBlcykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm4oZXNjYXBlc1t0aGlzLmNoYXJdKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfdSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VTbWFsbFVuaWNvZGUsIHRoaXMucGFyc2VVbmljb2RlUmV0dXJuKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfVSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VMYXJnZVVuaWNvZGUsIHRoaXMucGFyc2VVbmljb2RlUmV0dXJuKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmtub3duIGVzY2FwZSBjaGFyYWN0ZXI6ICcgKyB0aGlzLmNoYXIpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVVuaWNvZGVSZXR1cm4gKGNoYXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvZGVQb2ludCA9IHBhcnNlSW50KGNoYXIsIDE2KVxuICAgICAgICBpZiAoY29kZVBvaW50ID49IFNVUlJPR0FURV9GSVJTVCAmJiBjb2RlUG9pbnQgPD0gU1VSUk9HQVRFX0xBU1QpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0ludmFsaWQgdW5pY29kZSwgY2hhcmFjdGVyIGluIHJhbmdlIDB4RDgwMCAtIDB4REZGRiBpcyByZXNlcnZlZCcpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdyhTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IoVG9tbEVycm9yLndyYXAoZXJyKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VTbWFsbFVuaWNvZGUgKCkge1xuICAgICAgaWYgKCFpc0hleGl0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiB1bmljb2RlIHNlcXVlbmNlLCBleHBlY3RlZCBoZXgnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPj0gNCkgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VMYXJnZVVuaWNvZGUgKCkge1xuICAgICAgaWYgKCFpc0hleGl0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiB1bmljb2RlIHNlcXVlbmNlLCBleHBlY3RlZCBoZXgnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPj0gOCkgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBOVU1CRVJTICovXG4gICAgcGFyc2VOdW1iZXJTaWduICgpIHtcbiAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VNYXliZVNpZ25lZEluZk9yTmFuKVxuICAgIH1cbiAgICBwYXJzZU1heWJlU2lnbmVkSW5mT3JOYW4gKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9pKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUluZilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTmFuKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbE5vdyh0aGlzLnBhcnNlTm9VbmRlciwgdGhpcy5wYXJzZU51bWJlckludGVnZXJTdGFydClcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VOdW1iZXJJbnRlZ2VyU3RhcnQgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl8wKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU51bWJlckludGVnZXJFeHBvbmVudE9yRGVjaW1hbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZU51bWJlckludGVnZXIpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTnVtYmVySW50ZWdlckV4cG9uZW50T3JEZWNpbWFsICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUEVSSU9EKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZU5vVW5kZXIsIHRoaXMucGFyc2VOdW1iZXJGbG9hdClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0UgfHwgdGhpcy5jaGFyID09PSBDSEFSX2UpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTnVtYmVyRXhwb25lbnRTaWduKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KEludGVnZXIodGhpcy5zdGF0ZS5idWYpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU51bWJlckludGVnZXIgKCkge1xuICAgICAgaWYgKGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTE9XQkFSKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZU5vVW5kZXIpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9FIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9lKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU51bWJlckV4cG9uZW50U2lnbilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1BFUklPRCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVyLCB0aGlzLnBhcnNlTnVtYmVyRmxvYXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBJbnRlZ2VyKHRoaXMuc3RhdGUuYnVmKVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHJlc3VsdC5pc05hTigpKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIG51bWJlcicpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdyhyZXN1bHQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VOb1VuZGVyICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTE9XQkFSIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9QRVJJT0QgfHwgdGhpcy5jaGFyID09PSBDSEFSX0UgfHwgdGhpcy5jaGFyID09PSBDSEFSX2UpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciwgZXhwZWN0ZWQgZGlnaXQnKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hdEVuZE9mV29yZCgpKSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW5jb21wbGV0ZSBudW1iZXInKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdygpXG4gICAgfVxuICAgIHBhcnNlTm9VbmRlckhleE9jdEJpbkxpdGVyYWwgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9MT1dCQVIgfHwgdGhpcy5jaGFyID09PSBDSEFSX1BFUklPRCkge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyLCBleHBlY3RlZCBkaWdpdCcpKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmF0RW5kT2ZXb3JkKCkpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbmNvbXBsZXRlIG51bWJlcicpKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KClcbiAgICB9XG4gICAgcGFyc2VOdW1iZXJGbG9hdCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xPV0JBUikge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVyLCB0aGlzLnBhcnNlTnVtYmVyRmxvYXQpXG4gICAgICB9IGVsc2UgaWYgKGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfRSB8fCB0aGlzLmNoYXIgPT09IENIQVJfZSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VOdW1iZXJFeHBvbmVudFNpZ24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coRmxvYXQodGhpcy5zdGF0ZS5idWYpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU51bWJlckV4cG9uZW50U2lnbiAoKSB7XG4gICAgICBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZU51bWJlckV4cG9uZW50KVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfSFlQSEVOIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9QTFVTKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHRoaXMuY2FsbCh0aGlzLnBhcnNlTm9VbmRlciwgdGhpcy5wYXJzZU51bWJlckV4cG9uZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciwgZXhwZWN0ZWQgLSwgKyBvciBkaWdpdCcpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU51bWJlckV4cG9uZW50ICgpIHtcbiAgICAgIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xPV0JBUikge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KEZsb2F0KHRoaXMuc3RhdGUuYnVmKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBOVU1CRVJTIG9yIERBVEVUSU1FUyAgKi9cbiAgICBwYXJzZU51bWJlck9yRGF0ZVRpbWUgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl8wKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU51bWJlckJhc2VPckRhdGVUaW1lKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTnVtYmVyT3JEYXRlVGltZU9ubHkpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTnVtYmVyT3JEYXRlVGltZU9ubHkgKCkge1xuICAgICAgLy8gbm90ZSwgaWYgdHdvIHplcm9zIGFyZSBpbiBhIHJvdyB0aGVuIGl0IE1VU1QgYmUgYSBkYXRlXG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xPV0JBUikge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVyLCB0aGlzLnBhcnNlTnVtYmVySW50ZWdlcilcbiAgICAgIH0gZWxzZSBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPiA0KSB0aGlzLm5leHQodGhpcy5wYXJzZU51bWJlckludGVnZXIpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9FIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9lKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU51bWJlckV4cG9uZW50U2lnbilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1BFUklPRCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVyLCB0aGlzLnBhcnNlTnVtYmVyRmxvYXQpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9IWVBIRU4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlRGF0ZVRpbWUpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9DT0xPTikge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VPbmx5VGltZUhvdXIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coSW50ZWdlcih0aGlzLnN0YXRlLmJ1ZikpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlRGF0ZVRpbWVPbmx5ICgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPCA0KSB7XG4gICAgICAgIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lKClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfQ09MT04pIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VPbmx5VGltZUhvdXIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdFeHBlY3RlZCBkaWdpdCB3aGlsZSBwYXJzaW5nIHllYXIgcGFydCBvZiBhIGRhdGUnKSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9IWVBIRU4pIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VEYXRlVGltZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0V4cGVjdGVkIGh5cGhlbiAoLSkgd2hpbGUgcGFyc2luZyB5ZWFyIHBhcnQgb2YgZGF0ZScpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTnVtYmVyQmFzZU9yRGF0ZVRpbWUgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9iKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZU5vVW5kZXJIZXhPY3RCaW5MaXRlcmFsLCB0aGlzLnBhcnNlSW50ZWdlckJpbilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX28pIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlTm9VbmRlckhleE9jdEJpbkxpdGVyYWwsIHRoaXMucGFyc2VJbnRlZ2VyT2N0KVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfeCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVySGV4T2N0QmluTGl0ZXJhbCwgdGhpcy5wYXJzZUludGVnZXJIZXgpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9QRVJJT0QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTnVtYmVySW50ZWdlcilcbiAgICAgIH0gZWxzZSBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZURhdGVUaW1lT25seSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdyhJbnRlZ2VyKHRoaXMuc3RhdGUuYnVmKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VJbnRlZ2VySGV4ICgpIHtcbiAgICAgIGlmIChpc0hleGl0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xPV0JBUikge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVySGV4T2N0QmluTGl0ZXJhbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IEludGVnZXIodGhpcy5zdGF0ZS5idWYpXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocmVzdWx0LmlzTmFOKCkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0ludmFsaWQgbnVtYmVyJykpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KHJlc3VsdClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZUludGVnZXJPY3QgKCkge1xuICAgICAgaWYgKGlzT2N0aXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTE9XQkFSKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZU5vVW5kZXJIZXhPY3RCaW5MaXRlcmFsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gSW50ZWdlcih0aGlzLnN0YXRlLmJ1ZilcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChyZXN1bHQuaXNOYU4oKSkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW52YWxpZCBudW1iZXInKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3cocmVzdWx0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlSW50ZWdlckJpbiAoKSB7XG4gICAgICBpZiAoaXNCaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTE9XQkFSKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZU5vVW5kZXJIZXhPY3RCaW5MaXRlcmFsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gSW50ZWdlcih0aGlzLnN0YXRlLmJ1ZilcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChyZXN1bHQuaXNOYU4oKSkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW52YWxpZCBudW1iZXInKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3cocmVzdWx0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogREFURVRJTUUgKi9cbiAgICBwYXJzZURhdGVUaW1lICgpIHtcbiAgICAgIC8vIHdlIGVudGVyIGhlcmUgaGF2aW5nIGp1c3QgY29uc3VtZWQgdGhlIHllYXIgYW5kIGFib3V0IHRvIGNvbnN1bWUgdGhlIGh5cGhlblxuICAgICAgaWYgKHRoaXMuc3RhdGUuYnVmLmxlbmd0aCA8IDQpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdZZWFycyBsZXNzIHRoYW4gMTAwMCBtdXN0IGJlIHplcm8gcGFkZGVkIHRvIGZvdXIgY2hhcmFjdGVycycpKVxuICAgICAgfVxuICAgICAgdGhpcy5zdGF0ZS5yZXN1bHQgPSB0aGlzLnN0YXRlLmJ1ZlxuICAgICAgdGhpcy5zdGF0ZS5idWYgPSAnJ1xuICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlRGF0ZU1vbnRoKVxuICAgIH1cbiAgICBwYXJzZURhdGVNb250aCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0hZUEhFTikge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5idWYubGVuZ3RoIDwgMikge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignTW9udGhzIGxlc3MgdGhhbiAxMCBtdXN0IGJlIHplcm8gcGFkZGVkIHRvIHR3byBjaGFyYWN0ZXJzJykpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZS5yZXN1bHQgKz0gJy0nICsgdGhpcy5zdGF0ZS5idWZcbiAgICAgICAgdGhpcy5zdGF0ZS5idWYgPSAnJ1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VEYXRlRGF5KVxuICAgICAgfSBlbHNlIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW5jb21wbGV0ZSBkYXRldGltZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZURhdGVEYXkgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9UIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9TUCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5idWYubGVuZ3RoIDwgMikge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignRGF5cyBsZXNzIHRoYW4gMTAgbXVzdCBiZSB6ZXJvIHBhZGRlZCB0byB0d28gY2hhcmFjdGVycycpKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUucmVzdWx0ICs9ICctJyArIHRoaXMuc3RhdGUuYnVmXG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlU3RhcnRUaW1lSG91cilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hdEVuZE9mV29yZCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdyhjcmVhdGVEYXRlKHRoaXMuc3RhdGUucmVzdWx0ICsgJy0nICsgdGhpcy5zdGF0ZS5idWYpKVxuICAgICAgfSBlbHNlIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW5jb21wbGV0ZSBkYXRldGltZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVN0YXJ0VGltZUhvdXIgKCkge1xuICAgICAgaWYgKHRoaXMuYXRFbmRPZldvcmQoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coY3JlYXRlRGF0ZSh0aGlzLnN0YXRlLnJlc3VsdCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VUaW1lSG91cilcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VUaW1lSG91ciAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdIb3VycyBsZXNzIHRoYW4gMTAgbXVzdCBiZSB6ZXJvIHBhZGRlZCB0byB0d28gY2hhcmFjdGVycycpKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUucmVzdWx0ICs9ICdUJyArIHRoaXMuc3RhdGUuYnVmXG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlVGltZU1pbilcbiAgICAgIH0gZWxzZSBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0luY29tcGxldGUgZGF0ZXRpbWUnKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VUaW1lTWluICgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPCAyICYmIGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPT09IDIgJiYgdGhpcy5jaGFyID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIHRoaXMuc3RhdGUucmVzdWx0ICs9ICc6JyArIHRoaXMuc3RhdGUuYnVmXG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlVGltZVNlYylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW5jb21wbGV0ZSBkYXRldGltZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVRpbWVTZWMgKCkge1xuICAgICAgaWYgKGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5idWYubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgdGhpcy5zdGF0ZS5yZXN1bHQgKz0gJzonICsgdGhpcy5zdGF0ZS5idWZcbiAgICAgICAgICB0aGlzLnN0YXRlLmJ1ZiA9ICcnXG4gICAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlVGltZVpvbmVPckZyYWN0aW9uKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0luY29tcGxldGUgZGF0ZXRpbWUnKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZU9ubHlUaW1lSG91ciAoKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9DT0xPTikge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5idWYubGVuZ3RoIDwgMikge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSG91cnMgbGVzcyB0aGFuIDEwIG11c3QgYmUgemVybyBwYWRkZWQgdG8gdHdvIGNoYXJhY3RlcnMnKSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlLnJlc3VsdCA9IHRoaXMuc3RhdGUuYnVmXG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlT25seVRpbWVNaW4pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0luY29tcGxldGUgdGltZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU9ubHlUaW1lTWluICgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPCAyICYmIGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPT09IDIgJiYgdGhpcy5jaGFyID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIHRoaXMuc3RhdGUucmVzdWx0ICs9ICc6JyArIHRoaXMuc3RhdGUuYnVmXG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlT25seVRpbWVTZWMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0luY29tcGxldGUgdGltZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU9ubHlUaW1lU2VjICgpIHtcbiAgICAgIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuYnVmLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU9ubHlUaW1lRnJhY3Rpb25NYXliZSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbmNvbXBsZXRlIHRpbWUnKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VPbmx5VGltZUZyYWN0aW9uTWF5YmUgKCkge1xuICAgICAgdGhpcy5zdGF0ZS5yZXN1bHQgKz0gJzonICsgdGhpcy5zdGF0ZS5idWZcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUEVSSU9EKSB7XG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgdGhpcy5uZXh0KHRoaXMucGFyc2VPbmx5VGltZUZyYWN0aW9uKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKGNyZWF0ZVRpbWUodGhpcy5zdGF0ZS5yZXN1bHQpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU9ubHlUaW1lRnJhY3Rpb24gKCkge1xuICAgICAgaWYgKGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmF0RW5kT2ZXb3JkKCkpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuYnVmLmxlbmd0aCA9PT0gMCkgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdFeHBlY3RlZCBkaWdpdCBpbiBtaWxsaXNlY29uZHMnKSlcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KGNyZWF0ZVRpbWUodGhpcy5zdGF0ZS5yZXN1bHQgKyAnLicgKyB0aGlzLnN0YXRlLmJ1ZikpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyIGluIGRhdGV0aW1lLCBleHBlY3RlZCBwZXJpb2QgKC4pLCBtaW51cyAoLSksIHBsdXMgKCspIG9yIFonKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZVRpbWVab25lT3JGcmFjdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1BFUklPRCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICB0aGlzLm5leHQodGhpcy5wYXJzZURhdGVUaW1lRnJhY3Rpb24pXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9IWVBIRU4gfHwgdGhpcy5jaGFyID09PSBDSEFSX1BMVVMpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgdGhpcy5uZXh0KHRoaXMucGFyc2VUaW1lWm9uZUhvdXIpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9aKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybihjcmVhdGVEYXRlVGltZSh0aGlzLnN0YXRlLnJlc3VsdCArIHRoaXMuc3RhdGUuYnVmKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hdEVuZE9mV29yZCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdyhjcmVhdGVEYXRlVGltZUZsb2F0KHRoaXMuc3RhdGUucmVzdWx0ICsgdGhpcy5zdGF0ZS5idWYpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciBpbiBkYXRldGltZSwgZXhwZWN0ZWQgcGVyaW9kICguKSwgbWludXMgKC0pLCBwbHVzICgrKSBvciBaJykpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlRGF0ZVRpbWVGcmFjdGlvbiAoKSB7XG4gICAgICBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUuYnVmLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0V4cGVjdGVkIGRpZ2l0IGluIG1pbGxpc2Vjb25kcycpKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfSFlQSEVOIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9QTFVTKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHRoaXMubmV4dCh0aGlzLnBhcnNlVGltZVpvbmVIb3VyKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfWikge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm4oY3JlYXRlRGF0ZVRpbWUodGhpcy5zdGF0ZS5yZXN1bHQgKyB0aGlzLnN0YXRlLmJ1ZikpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYXRFbmRPZldvcmQoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coY3JlYXRlRGF0ZVRpbWVGbG9hdCh0aGlzLnN0YXRlLnJlc3VsdCArIHRoaXMuc3RhdGUuYnVmKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW5leHBlY3RlZCBjaGFyYWN0ZXIgaW4gZGF0ZXRpbWUsIGV4cGVjdGVkIHBlcmlvZCAoLiksIG1pbnVzICgtKSwgcGx1cyAoKykgb3IgWicpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVRpbWVab25lSG91ciAoKSB7XG4gICAgICBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIC8vIEZJWE1FOiBObyBtb3JlIHJlZ2V4cHNcbiAgICAgICAgaWYgKC9cXGRcXGQkLy50ZXN0KHRoaXMuc3RhdGUuYnVmKSkgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlVGltZVpvbmVTZXApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyIGluIGRhdGV0aW1lLCBleHBlY3RlZCBkaWdpdCcpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVRpbWVab25lU2VwICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfQ09MT04pIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgdGhpcy5uZXh0KHRoaXMucGFyc2VUaW1lWm9uZU1pbilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW5leHBlY3RlZCBjaGFyYWN0ZXIgaW4gZGF0ZXRpbWUsIGV4cGVjdGVkIGNvbG9uJykpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlVGltZVpvbmVNaW4gKCkge1xuICAgICAgaWYgKGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICBpZiAoL1xcZFxcZCQvLnRlc3QodGhpcy5zdGF0ZS5idWYpKSByZXR1cm4gdGhpcy5yZXR1cm4oY3JlYXRlRGF0ZVRpbWUodGhpcy5zdGF0ZS5yZXN1bHQgKyB0aGlzLnN0YXRlLmJ1ZikpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyIGluIGRhdGV0aW1lLCBleHBlY3RlZCBkaWdpdCcpKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qIEJPT0xFQU4gKi9cbiAgICBwYXJzZUJvb2xlYW4gKCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfdCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VUcnVlX3IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9mKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUZhbHNlX2EpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlVHJ1ZV9yICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfcikge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VUcnVlX3UpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0ludmFsaWQgYm9vbGVhbiwgZXhwZWN0ZWQgdHJ1ZSBvciBmYWxzZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVRydWVfdSAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX3UpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlVHJ1ZV9lKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGJvb2xlYW4sIGV4cGVjdGVkIHRydWUgb3IgZmFsc2UnKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VUcnVlX2UgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybih0cnVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGJvb2xlYW4sIGV4cGVjdGVkIHRydWUgb3IgZmFsc2UnKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZUZhbHNlX2EgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9hKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUZhbHNlX2wpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0ludmFsaWQgYm9vbGVhbiwgZXhwZWN0ZWQgdHJ1ZSBvciBmYWxzZScpKVxuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlRmFsc2VfbCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX2wpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlRmFsc2VfcylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW52YWxpZCBib29sZWFuLCBleHBlY3RlZCB0cnVlIG9yIGZhbHNlJykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VGYWxzZV9zICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfcykge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VGYWxzZV9lKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGJvb2xlYW4sIGV4cGVjdGVkIHRydWUgb3IgZmFsc2UnKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZUZhbHNlX2UgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybihmYWxzZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW52YWxpZCBib29sZWFuLCBleHBlY3RlZCB0cnVlIG9yIGZhbHNlJykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogSU5MSU5FIExJU1RTICovXG4gICAgcGFyc2VJbmxpbmVMaXN0ICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kgfHwgdGhpcy5jaGFyID09PSBDVFJMX00gfHwgdGhpcy5jaGFyID09PSBDVFJMX0opIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBQYXJzZXIuRU5EKSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW50ZXJtaW5hdGVkIGlubGluZSBhcnJheScpKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTlVNKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZUNvbW1lbnQpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9SU1FCKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybih0aGlzLnN0YXRlLnJlc3VsdEFyciB8fCBJbmxpbmVMaXN0KCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsTm93KHRoaXMucGFyc2VWYWx1ZSwgdGhpcy5yZWNvcmRJbmxpbmVMaXN0VmFsdWUpXG4gICAgICB9XG4gICAgfVxuICAgIHJlY29yZElubGluZUxpc3RWYWx1ZSAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLnJlc3VsdEFycikge1xuICAgICAgICBjb25zdCBsaXN0VHlwZSA9IHRoaXMuc3RhdGUucmVzdWx0QXJyW19jb250ZW50VHlwZV1cbiAgICAgICAgY29uc3QgdmFsdWVUeXBlID0gdG9tbFR5cGUodmFsdWUpXG4gICAgICAgIGlmIChsaXN0VHlwZSAhPT0gdmFsdWVUeXBlKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKGBJbmxpbmUgbGlzdHMgbXVzdCBiZSBhIHNpbmdsZSB0eXBlLCBub3QgYSBtaXggb2YgJHtsaXN0VHlwZX0gYW5kICR7dmFsdWVUeXBlfWApKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YXRlLnJlc3VsdEFyciA9IElubGluZUxpc3QodG9tbFR5cGUodmFsdWUpKVxuICAgICAgfVxuICAgICAgaWYgKGlzRmxvYXQodmFsdWUpIHx8IGlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgICAgLy8gdW5ib3ggbm93IHRoYXQgd2UndmUgdmVyaWZpZWQgdGhleSdyZSBva1xuICAgICAgICB0aGlzLnN0YXRlLnJlc3VsdEFyci5wdXNoKHZhbHVlLnZhbHVlT2YoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUucmVzdWx0QXJyLnB1c2godmFsdWUpXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VJbmxpbmVMaXN0TmV4dClcbiAgICB9XG4gICAgcGFyc2VJbmxpbmVMaXN0TmV4dCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1NQIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9JIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9NIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9KKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9OVU0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlQ29tbWVudClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0NPTU1BKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUlubGluZUxpc3QpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9SU1FCKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZUlubGluZUxpc3QpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyLCBleHBlY3RlZCB3aGl0ZXNwYWNlLCBjb21tYSAoLCkgb3IgY2xvc2UgYnJhY2tldCAoXSknKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBJTkxJTkUgVEFCTEUgKi9cbiAgICBwYXJzZUlubGluZVRhYmxlICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBQYXJzZXIuRU5EIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9OVU0gfHwgdGhpcy5jaGFyID09PSBDVFJMX0ogfHwgdGhpcy5jaGFyID09PSBDVFJMX00pIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbnRlcm1pbmF0ZWQgaW5saW5lIGFycmF5JykpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9SQ1VCKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybih0aGlzLnN0YXRlLnJlc3VsdFRhYmxlIHx8IElubGluZVRhYmxlKCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGUucmVzdWx0VGFibGUpIHRoaXMuc3RhdGUucmVzdWx0VGFibGUgPSBJbmxpbmVUYWJsZSgpXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUFzc2lnbiwgdGhpcy5yZWNvcmRJbmxpbmVUYWJsZVZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgICByZWNvcmRJbmxpbmVUYWJsZVZhbHVlIChrdikge1xuICAgICAgbGV0IHRhcmdldCA9IHRoaXMuc3RhdGUucmVzdWx0VGFibGVcbiAgICAgIGxldCBmaW5hbEtleSA9IGt2LmtleS5wb3AoKVxuICAgICAgZm9yIChsZXQga3cgb2Yga3Yua2V5KSB7XG4gICAgICAgIGlmIChoYXNLZXkodGFyZ2V0LCBrdykgJiYgKCFpc1RhYmxlKHRhcmdldFtrd10pIHx8IHRhcmdldFtrd11bX2RlY2xhcmVkXSkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBleGlzdGluZyBrZXlcIikpXG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W2t3XSA9IHRhcmdldFtrd10gfHwgVGFibGUoKVxuICAgICAgfVxuICAgICAgaWYgKGhhc0tleSh0YXJnZXQsIGZpbmFsS2V5KSkge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBleGlzdGluZyBrZXlcIikpXG4gICAgICB9XG4gICAgICBpZiAoaXNJbnRlZ2VyKGt2LnZhbHVlKSB8fCBpc0Zsb2F0KGt2LnZhbHVlKSkge1xuICAgICAgICB0YXJnZXRbZmluYWxLZXldID0ga3YudmFsdWUudmFsdWVPZigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbZmluYWxLZXldID0ga3YudmFsdWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZUlubGluZVRhYmxlTmV4dClcbiAgICB9XG4gICAgcGFyc2VJbmxpbmVUYWJsZU5leHQgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9TUCB8fCB0aGlzLmNoYXIgPT09IENUUkxfSSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IFBhcnNlci5FTkQgfHwgdGhpcy5jaGFyID09PSBDSEFSX05VTSB8fCB0aGlzLmNoYXIgPT09IENUUkxfSiB8fCB0aGlzLmNoYXIgPT09IENUUkxfTSkge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VudGVybWluYXRlZCBpbmxpbmUgYXJyYXknKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0NPTU1BKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUlubGluZVRhYmxlKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUkNVQikge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VJbmxpbmVUYWJsZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIsIGV4cGVjdGVkIHdoaXRlc3BhY2UsIGNvbW1hICgsKSBvciBjbG9zZSBicmFja2V0IChdKScpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gVE9NTFBhcnNlclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gcHJldHR5RXJyb3JcblxuZnVuY3Rpb24gcHJldHR5RXJyb3IgKGVyciwgYnVmKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoZXJyLnBvcyA9PSBudWxsIHx8IGVyci5saW5lID09IG51bGwpIHJldHVybiBlcnJcbiAgbGV0IG1zZyA9IGVyci5tZXNzYWdlXG4gIG1zZyArPSBgIGF0IHJvdyAke2Vyci5saW5lICsgMX0sIGNvbCAke2Vyci5jb2wgKyAxfSwgcG9zICR7ZXJyLnBvc306XFxuYFxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChidWYgJiYgYnVmLnNwbGl0KSB7XG4gICAgY29uc3QgbGluZXMgPSBidWYuc3BsaXQoL1xcbi8pXG4gICAgY29uc3QgbGluZU51bVdpZHRoID0gU3RyaW5nKE1hdGgubWluKGxpbmVzLmxlbmd0aCwgZXJyLmxpbmUgKyAzKSkubGVuZ3RoXG4gICAgbGV0IGxpbmVQYWRkaW5nID0gJyAnXG4gICAgd2hpbGUgKGxpbmVQYWRkaW5nLmxlbmd0aCA8IGxpbmVOdW1XaWR0aCkgbGluZVBhZGRpbmcgKz0gJyAnXG4gICAgZm9yIChsZXQgaWkgPSBNYXRoLm1heCgwLCBlcnIubGluZSAtIDEpOyBpaSA8IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgZXJyLmxpbmUgKyAyKTsgKytpaSkge1xuICAgICAgbGV0IGxpbmVOdW0gPSBTdHJpbmcoaWkgKyAxKVxuICAgICAgaWYgKGxpbmVOdW0ubGVuZ3RoIDwgbGluZU51bVdpZHRoKSBsaW5lTnVtID0gJyAnICsgbGluZU51bVxuICAgICAgaWYgKGVyci5saW5lID09PSBpaSkge1xuICAgICAgICBtc2cgKz0gbGluZU51bSArICc+ICcgKyBsaW5lc1tpaV0gKyAnXFxuJ1xuICAgICAgICBtc2cgKz0gbGluZVBhZGRpbmcgKyAnICAnXG4gICAgICAgIGZvciAobGV0IGhoID0gMDsgaGggPCBlcnIuY29sOyArK2hoKSB7XG4gICAgICAgICAgbXNnICs9ICcgJ1xuICAgICAgICB9XG4gICAgICAgIG1zZyArPSAnXlxcbidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1zZyArPSBsaW5lTnVtICsgJzogJyArIGxpbmVzW2lpXSArICdcXG4nXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGVyci5tZXNzYWdlID0gbXNnICsgJ1xcbidcbiAgcmV0dXJuIGVyclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gcGFyc2VTdHJpbmdcblxuY29uc3QgVE9NTFBhcnNlciA9IHJlcXVpcmUoJy4vbGliL3RvbWwtcGFyc2VyLmpzJylcbmNvbnN0IHByZXR0eUVycm9yID0gcmVxdWlyZSgnLi9wYXJzZS1wcmV0dHktZXJyb3IuanMnKVxuXG5mdW5jdGlvbiBwYXJzZVN0cmluZyAoc3RyKSB7XG4gIGlmIChnbG9iYWwuQnVmZmVyICYmIGdsb2JhbC5CdWZmZXIuaXNCdWZmZXIoc3RyKSkge1xuICAgIHN0ciA9IHN0ci50b1N0cmluZygndXRmOCcpXG4gIH1cbiAgY29uc3QgcGFyc2VyID0gbmV3IFRPTUxQYXJzZXIoKVxuICB0cnkge1xuICAgIHBhcnNlci5wYXJzZShzdHIpXG4gICAgcmV0dXJuIHBhcnNlci5maW5pc2goKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBwcmV0dHlFcnJvcihlcnIsIHN0cilcbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gcGFyc2VBc3luY1xuXG5jb25zdCBUT01MUGFyc2VyID0gcmVxdWlyZSgnLi9saWIvdG9tbC1wYXJzZXIuanMnKVxuY29uc3QgcHJldHR5RXJyb3IgPSByZXF1aXJlKCcuL3BhcnNlLXByZXR0eS1lcnJvci5qcycpXG5cbmZ1bmN0aW9uIHBhcnNlQXN5bmMgKHN0ciwgb3B0cykge1xuICBpZiAoIW9wdHMpIG9wdHMgPSB7fVxuICBjb25zdCBpbmRleCA9IDBcbiAgY29uc3QgYmxvY2tzaXplID0gb3B0cy5ibG9ja3NpemUgfHwgNDA5NjBcbiAgY29uc3QgcGFyc2VyID0gbmV3IFRPTUxQYXJzZXIoKVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHNldEltbWVkaWF0ZShwYXJzZUFzeW5jTmV4dCwgaW5kZXgsIGJsb2Nrc2l6ZSwgcmVzb2x2ZSwgcmVqZWN0KVxuICB9KVxuICBmdW5jdGlvbiBwYXJzZUFzeW5jTmV4dCAoaW5kZXgsIGJsb2Nrc2l6ZSwgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgaWYgKGluZGV4ID49IHN0ci5sZW5ndGgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKHBhcnNlci5maW5pc2goKSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KHByZXR0eUVycm9yKGVyciwgc3RyKSlcbiAgICAgIH1cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlci5wYXJzZShzdHIuc2xpY2UoaW5kZXgsIGluZGV4ICsgYmxvY2tzaXplKSlcbiAgICAgIHNldEltbWVkaWF0ZShwYXJzZUFzeW5jTmV4dCwgaW5kZXggKyBibG9ja3NpemUsIGJsb2Nrc2l6ZSwgcmVzb2x2ZSwgcmVqZWN0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmVqZWN0KHByZXR0eUVycm9yKGVyciwgc3RyKSlcbiAgICB9XG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlU3RyZWFtXG5cbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCBUT01MUGFyc2VyID0gcmVxdWlyZSgnLi9saWIvdG9tbC1wYXJzZXIuanMnKVxuXG5mdW5jdGlvbiBwYXJzZVN0cmVhbSAoc3RtKSB7XG4gIGlmIChzdG0pIHtcbiAgICByZXR1cm4gcGFyc2VSZWFkYWJsZShzdG0pXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtKHN0bSlcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVJlYWRhYmxlIChzdG0pIHtcbiAgY29uc3QgcGFyc2VyID0gbmV3IFRPTUxQYXJzZXIoKVxuICBzdG0uc2V0RW5jb2RpbmcoJ3V0ZjgnKVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCByZWFkYWJsZVxuICAgIGxldCBlbmRlZCA9IGZhbHNlXG4gICAgbGV0IGVycm9yZWQgPSBmYWxzZVxuICAgIGZ1bmN0aW9uIGZpbmlzaCAoKSB7XG4gICAgICBlbmRlZCA9IHRydWVcbiAgICAgIGlmIChyZWFkYWJsZSkgcmV0dXJuXG4gICAgICB0cnkge1xuICAgICAgICByZXNvbHZlKHBhcnNlci5maW5pc2goKSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZWplY3QoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBlcnJvciAoZXJyKSB7XG4gICAgICBlcnJvcmVkID0gdHJ1ZVxuICAgICAgcmVqZWN0KGVycilcbiAgICB9XG4gICAgc3RtLm9uY2UoJ2VuZCcsIGZpbmlzaClcbiAgICBzdG0ub25jZSgnZXJyb3InLCBlcnJvcilcbiAgICByZWFkTmV4dCgpXG5cbiAgICBmdW5jdGlvbiByZWFkTmV4dCAoKSB7XG4gICAgICByZWFkYWJsZSA9IHRydWVcbiAgICAgIGxldCBkYXRhXG4gICAgICB3aGlsZSAoKGRhdGEgPSBzdG0ucmVhZCgpKSAhPT0gbnVsbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcnNlci5wYXJzZShkYXRhKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3IoZXJyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZWFkYWJsZSA9IGZhbHNlXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChlbmRlZCkgcmV0dXJuIGZpbmlzaCgpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChlcnJvcmVkKSByZXR1cm5cbiAgICAgIHN0bS5vbmNlKCdyZWFkYWJsZScsIHJlYWROZXh0KVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcGFyc2VUcmFuc2Zvcm0gKCkge1xuICBjb25zdCBwYXJzZXIgPSBuZXcgVE9NTFBhcnNlcigpXG4gIHJldHVybiBuZXcgc3RyZWFtLlRyYW5zZm9ybSh7XG4gICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICB0cmFuc2Zvcm0gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlci5wYXJzZShjaHVuay50b1N0cmluZyhlbmNvZGluZykpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIH1cbiAgICAgIGNiKClcbiAgICB9LFxuICAgIGZsdXNoIChjYikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5wdXNoKHBhcnNlci5maW5pc2goKSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgICAgfVxuICAgICAgY2IoKVxuICAgIH1cbiAgfSlcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vcGFyc2Utc3RyaW5nLmpzJylcbm1vZHVsZS5leHBvcnRzLmFzeW5jID0gcmVxdWlyZSgnLi9wYXJzZS1hc3luYy5qcycpXG5tb2R1bGUuZXhwb3J0cy5zdHJlYW0gPSByZXF1aXJlKCcuL3BhcnNlLXN0cmVhbS5qcycpXG5tb2R1bGUuZXhwb3J0cy5wcmV0dHlFcnJvciA9IHJlcXVpcmUoJy4vcGFyc2UtcHJldHR5LWVycm9yLmpzJylcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ2lmeVxubW9kdWxlLmV4cG9ydHMudmFsdWUgPSBzdHJpbmdpZnlJbmxpbmVcblxuZnVuY3Rpb24gc3RyaW5naWZ5IChvYmopIHtcbiAgaWYgKG9iaiA9PT0gbnVsbCkgdGhyb3cgdHlwZUVycm9yKCdudWxsJylcbiAgaWYgKG9iaiA9PT0gdm9pZCAoMCkpIHRocm93IHR5cGVFcnJvcigndW5kZWZpbmVkJylcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB0aHJvdyB0eXBlRXJyb3IodHlwZW9mIG9iailcblxuICBpZiAodHlwZW9mIG9iai50b0pTT04gPT09ICdmdW5jdGlvbicpIG9iaiA9IG9iai50b0pTT04oKVxuICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsXG4gIGNvbnN0IHR5cGUgPSB0b21sVHlwZShvYmopXG4gIGlmICh0eXBlICE9PSAndGFibGUnKSB0aHJvdyB0eXBlRXJyb3IodHlwZSlcbiAgcmV0dXJuIHN0cmluZ2lmeU9iamVjdCgnJywgJycsIG9iailcbn1cblxuZnVuY3Rpb24gdHlwZUVycm9yICh0eXBlKSB7XG4gIHJldHVybiBuZXcgRXJyb3IoJ0NhbiBvbmx5IHN0cmluZ2lmeSBvYmplY3RzLCBub3QgJyArIHR5cGUpXG59XG5cbmZ1bmN0aW9uIGFycmF5T25lVHlwZUVycm9yICgpIHtcbiAgcmV0dXJuIG5ldyBFcnJvcihcIkFycmF5IHZhbHVlcyBjYW4ndCBoYXZlIG1peGVkIHR5cGVzXCIpXG59XG5cbmZ1bmN0aW9uIGdldElubGluZUtleXMgKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5maWx0ZXIoa2V5ID0+IGlzSW5saW5lKG9ialtrZXldKSlcbn1cbmZ1bmN0aW9uIGdldENvbXBsZXhLZXlzIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikuZmlsdGVyKGtleSA9PiAhaXNJbmxpbmUob2JqW2tleV0pKVxufVxuXG5mdW5jdGlvbiB0b0pTT04gKG9iaikge1xuICBsZXQgbm9iaiA9IEFycmF5LmlzQXJyYXkob2JqKSA/IFtdIDogT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgJ19fcHJvdG9fXycpID8ge1snX19wcm90b19fJ106IHVuZGVmaW5lZH0gOiB7fVxuICBmb3IgKGxldCBwcm9wIG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICBpZiAob2JqW3Byb3BdICYmIHR5cGVvZiBvYmpbcHJvcF0udG9KU09OID09PSAnZnVuY3Rpb24nICYmICEoJ3RvSVNPU3RyaW5nJyBpbiBvYmpbcHJvcF0pKSB7XG4gICAgICBub2JqW3Byb3BdID0gb2JqW3Byb3BdLnRvSlNPTigpXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vYmpbcHJvcF0gPSBvYmpbcHJvcF1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vYmpcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5T2JqZWN0IChwcmVmaXgsIGluZGVudCwgb2JqKSB7XG4gIG9iaiA9IHRvSlNPTihvYmopXG4gIHZhciBpbmxpbmVLZXlzXG4gIHZhciBjb21wbGV4S2V5c1xuICBpbmxpbmVLZXlzID0gZ2V0SW5saW5lS2V5cyhvYmopXG4gIGNvbXBsZXhLZXlzID0gZ2V0Q29tcGxleEtleXMob2JqKVxuICB2YXIgcmVzdWx0ID0gW11cbiAgdmFyIGlubGluZUluZGVudCA9IGluZGVudCB8fCAnJ1xuICBpbmxpbmVLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICB2YXIgdHlwZSA9IHRvbWxUeXBlKG9ialtrZXldKVxuICAgIGlmICh0eXBlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlICE9PSAnbnVsbCcpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGlubGluZUluZGVudCArIHN0cmluZ2lmeUtleShrZXkpICsgJyA9ICcgKyBzdHJpbmdpZnlBbnlJbmxpbmUob2JqW2tleV0sIHRydWUpKVxuICAgIH1cbiAgfSlcbiAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSByZXN1bHQucHVzaCgnJylcbiAgdmFyIGNvbXBsZXhJbmRlbnQgPSBwcmVmaXggJiYgaW5saW5lS2V5cy5sZW5ndGggPiAwID8gaW5kZW50ICsgJyAgJyA6ICcnXG4gIGNvbXBsZXhLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICByZXN1bHQucHVzaChzdHJpbmdpZnlDb21wbGV4KHByZWZpeCwgY29tcGxleEluZGVudCwga2V5LCBvYmpba2V5XSkpXG4gIH0pXG4gIHJldHVybiByZXN1bHQuam9pbignXFxuJylcbn1cblxuZnVuY3Rpb24gaXNJbmxpbmUgKHZhbHVlKSB7XG4gIHN3aXRjaCAodG9tbFR5cGUodmFsdWUpKSB7XG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICBjYXNlICdudWxsJzpcbiAgICBjYXNlICdpbnRlZ2VyJzpcbiAgICBjYXNlICduYW4nOlxuICAgIGNhc2UgJ2Zsb2F0JzpcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgIGNhc2UgJ2RhdGV0aW1lJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgY2FzZSAnYXJyYXknOlxuICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA9PT0gMCB8fCB0b21sVHlwZSh2YWx1ZVswXSkgIT09ICd0YWJsZSdcbiAgICBjYXNlICd0YWJsZSc6XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIHRvbWxUeXBlICh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAndW5kZWZpbmVkJ1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdudWxsJ1xuICAvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC10eXBlb2YgKi9cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnIHx8IChOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSAmJiAhT2JqZWN0LmlzKHZhbHVlLCAtMCkpKSB7XG4gICAgcmV0dXJuICdpbnRlZ2VyJ1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gJ2Zsb2F0J1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuICdib29sZWFuJ1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gJ3N0cmluZydcbiAgfSBlbHNlIGlmICgndG9JU09TdHJpbmcnIGluIHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzTmFOKHZhbHVlKSA/ICd1bmRlZmluZWQnIDogJ2RhdGV0aW1lJ1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuICdhcnJheSdcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJ3RhYmxlJ1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUtleSAoa2V5KSB7XG4gIHZhciBrZXlTdHIgPSBTdHJpbmcoa2V5KVxuICBpZiAoL15bLUEtWmEtejAtOV9dKyQvLnRlc3Qoa2V5U3RyKSkge1xuICAgIHJldHVybiBrZXlTdHJcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5QmFzaWNTdHJpbmcoa2V5U3RyKVxuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUJhc2ljU3RyaW5nIChzdHIpIHtcbiAgcmV0dXJuICdcIicgKyBlc2NhcGVTdHJpbmcoc3RyKS5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJykgKyAnXCInXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUxpdGVyYWxTdHJpbmcgKHN0cikge1xuICByZXR1cm4gXCInXCIgKyBzdHIgKyBcIidcIlxufVxuXG5mdW5jdGlvbiBudW1wYWQgKG51bSwgc3RyKSB7XG4gIHdoaWxlIChzdHIubGVuZ3RoIDwgbnVtKSBzdHIgPSAnMCcgKyBzdHJcbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcgKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcbiAgICAucmVwbGFjZSgvW1xcYl0vZywgJ1xcXFxiJylcbiAgICAucmVwbGFjZSgvXFx0L2csICdcXFxcdCcpXG4gICAgLnJlcGxhY2UoL1xcbi9nLCAnXFxcXG4nKVxuICAgIC5yZXBsYWNlKC9cXGYvZywgJ1xcXFxmJylcbiAgICAucmVwbGFjZSgvXFxyL2csICdcXFxccicpXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29udHJvbC1yZWdleCAqL1xuICAgIC5yZXBsYWNlKC8oW1xcdTAwMDAtXFx1MDAxZlxcdTAwN2ZdKS8sIGMgPT4gJ1xcXFx1JyArIG51bXBhZCg0LCBjLmNvZGVQb2ludEF0KDApLnRvU3RyaW5nKDE2KSkpXG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1jb250cm9sLXJlZ2V4ICovXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeU11bHRpbGluZVN0cmluZyAoc3RyKSB7XG4gIGxldCBlc2NhcGVkID0gc3RyLnNwbGl0KC9cXG4vKS5tYXAoc3RyID0+IHtcbiAgICByZXR1cm4gZXNjYXBlU3RyaW5nKHN0cikucmVwbGFjZSgvXCIoPz1cIlwiKS9nLCAnXFxcXFwiJylcbiAgfSkuam9pbignXFxuJylcbiAgaWYgKGVzY2FwZWQuc2xpY2UoLTEpID09PSAnXCInKSBlc2NhcGVkICs9ICdcXFxcXFxuJ1xuICByZXR1cm4gJ1wiXCJcIlxcbicgKyBlc2NhcGVkICsgJ1wiXCJcIidcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5QW55SW5saW5lICh2YWx1ZSwgbXVsdGlsaW5lT2spIHtcbiAgbGV0IHR5cGUgPSB0b21sVHlwZSh2YWx1ZSlcbiAgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKG11bHRpbGluZU9rICYmIC9cXG4vLnRlc3QodmFsdWUpKSB7XG4gICAgICB0eXBlID0gJ3N0cmluZy1tdWx0aWxpbmUnXG4gICAgfSBlbHNlIGlmICghL1tcXGJcXHRcXG5cXGZcXHInXS8udGVzdCh2YWx1ZSkgJiYgL1wiLy50ZXN0KHZhbHVlKSkge1xuICAgICAgdHlwZSA9ICdzdHJpbmctbGl0ZXJhbCdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0cmluZ2lmeUlubGluZSh2YWx1ZSwgdHlwZSlcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5SW5saW5lICh2YWx1ZSwgdHlwZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCF0eXBlKSB0eXBlID0gdG9tbFR5cGUodmFsdWUpXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3N0cmluZy1tdWx0aWxpbmUnOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeU11bHRpbGluZVN0cmluZyh2YWx1ZSlcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeUJhc2ljU3RyaW5nKHZhbHVlKVxuICAgIGNhc2UgJ3N0cmluZy1saXRlcmFsJzpcbiAgICAgIHJldHVybiBzdHJpbmdpZnlMaXRlcmFsU3RyaW5nKHZhbHVlKVxuICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeUludGVnZXIodmFsdWUpXG4gICAgY2FzZSAnZmxvYXQnOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeUZsb2F0KHZhbHVlKVxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeUJvb2xlYW4odmFsdWUpXG4gICAgY2FzZSAnZGF0ZXRpbWUnOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeURhdGV0aW1lKHZhbHVlKVxuICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIHJldHVybiBzdHJpbmdpZnlJbmxpbmVBcnJheSh2YWx1ZS5maWx0ZXIoXyA9PiB0b21sVHlwZShfKSAhPT0gJ251bGwnICYmIHRvbWxUeXBlKF8pICE9PSAndW5kZWZpbmVkJyAmJiB0b21sVHlwZShfKSAhPT0gJ25hbicpKVxuICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgIHJldHVybiBzdHJpbmdpZnlJbmxpbmVUYWJsZSh2YWx1ZSlcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyB0eXBlRXJyb3IodHlwZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlJbnRlZ2VyICh2YWx1ZSkge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBzZWN1cml0eS9kZXRlY3QtdW5zYWZlLXJlZ2V4ICovXG4gIHJldHVybiBTdHJpbmcodmFsdWUpLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csICdfJylcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5RmxvYXQgKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICByZXR1cm4gJ2luZidcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gLUluZmluaXR5KSB7XG4gICAgcmV0dXJuICctaW5mJ1xuICB9IGVsc2UgaWYgKE9iamVjdC5pcyh2YWx1ZSwgTmFOKSkge1xuICAgIHJldHVybiAnbmFuJ1xuICB9IGVsc2UgaWYgKE9iamVjdC5pcyh2YWx1ZSwgLTApKSB7XG4gICAgcmV0dXJuICctMC4wJ1xuICB9XG4gIHZhciBjaHVua3MgPSBTdHJpbmcodmFsdWUpLnNwbGl0KCcuJylcbiAgdmFyIGludCA9IGNodW5rc1swXVxuICB2YXIgZGVjID0gY2h1bmtzWzFdIHx8IDBcbiAgcmV0dXJuIHN0cmluZ2lmeUludGVnZXIoaW50KSArICcuJyArIGRlY1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlCb29sZWFuICh2YWx1ZSkge1xuICByZXR1cm4gU3RyaW5nKHZhbHVlKVxufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlEYXRldGltZSAodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKClcbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIgKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUgPT09ICdmbG9hdCcgfHwgdHlwZSA9PT0gJ2ludGVnZXInXG59XG5mdW5jdGlvbiBhcnJheVR5cGUgKHZhbHVlcykge1xuICB2YXIgY29udGVudFR5cGUgPSB0b21sVHlwZSh2YWx1ZXNbMF0pXG4gIGlmICh2YWx1ZXMuZXZlcnkoXyA9PiB0b21sVHlwZShfKSA9PT0gY29udGVudFR5cGUpKSByZXR1cm4gY29udGVudFR5cGVcbiAgLy8gbWl4ZWQgaW50ZWdlci9mbG9hdCwgZW1pdCBhcyBmbG9hdHNcbiAgaWYgKHZhbHVlcy5ldmVyeShfID0+IGlzTnVtYmVyKHRvbWxUeXBlKF8pKSkpIHJldHVybiAnZmxvYXQnXG4gIHJldHVybiAnbWl4ZWQnXG59XG5mdW5jdGlvbiB2YWxpZGF0ZUFycmF5ICh2YWx1ZXMpIHtcbiAgY29uc3QgdHlwZSA9IGFycmF5VHlwZSh2YWx1ZXMpXG4gIGlmICh0eXBlID09PSAnbWl4ZWQnKSB7XG4gICAgdGhyb3cgYXJyYXlPbmVUeXBlRXJyb3IoKVxuICB9XG4gIHJldHVybiB0eXBlXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUlubGluZUFycmF5ICh2YWx1ZXMpIHtcbiAgdmFsdWVzID0gdG9KU09OKHZhbHVlcylcbiAgY29uc3QgdHlwZSA9IHZhbGlkYXRlQXJyYXkodmFsdWVzKVxuICB2YXIgcmVzdWx0ID0gJ1snXG4gIHZhciBzdHJpbmdpZmllZCA9IHZhbHVlcy5tYXAoXyA9PiBzdHJpbmdpZnlJbmxpbmUoXywgdHlwZSkpXG4gIGlmIChzdHJpbmdpZmllZC5qb2luKCcsICcpLmxlbmd0aCA+IDYwIHx8IC9cXG4vLnRlc3Qoc3RyaW5naWZpZWQpKSB7XG4gICAgcmVzdWx0ICs9ICdcXG4gICcgKyBzdHJpbmdpZmllZC5qb2luKCcsXFxuICAnKSArICdcXG4nXG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ICs9ICcgJyArIHN0cmluZ2lmaWVkLmpvaW4oJywgJykgKyAoc3RyaW5naWZpZWQubGVuZ3RoID4gMCA/ICcgJyA6ICcnKVxuICB9XG4gIHJldHVybiByZXN1bHQgKyAnXSdcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5SW5saW5lVGFibGUgKHZhbHVlKSB7XG4gIHZhbHVlID0gdG9KU09OKHZhbHVlKVxuICB2YXIgcmVzdWx0ID0gW11cbiAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goa2V5ID0+IHtcbiAgICByZXN1bHQucHVzaChzdHJpbmdpZnlLZXkoa2V5KSArICcgPSAnICsgc3RyaW5naWZ5QW55SW5saW5lKHZhbHVlW2tleV0sIGZhbHNlKSlcbiAgfSlcbiAgcmV0dXJuICd7ICcgKyByZXN1bHQuam9pbignLCAnKSArIChyZXN1bHQubGVuZ3RoID4gMCA/ICcgJyA6ICcnKSArICd9J1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlDb21wbGV4IChwcmVmaXgsIGluZGVudCwga2V5LCB2YWx1ZSkge1xuICB2YXIgdmFsdWVUeXBlID0gdG9tbFR5cGUodmFsdWUpXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh2YWx1ZVR5cGUgPT09ICdhcnJheScpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5QXJyYXlPZlRhYmxlcyhwcmVmaXgsIGluZGVudCwga2V5LCB2YWx1ZSlcbiAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICd0YWJsZScpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5Q29tcGxleFRhYmxlKHByZWZpeCwgaW5kZW50LCBrZXksIHZhbHVlKVxuICB9IGVsc2Uge1xuICAgIHRocm93IHR5cGVFcnJvcih2YWx1ZVR5cGUpXG4gIH1cbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5QXJyYXlPZlRhYmxlcyAocHJlZml4LCBpbmRlbnQsIGtleSwgdmFsdWVzKSB7XG4gIHZhbHVlcyA9IHRvSlNPTih2YWx1ZXMpXG4gIHZhbGlkYXRlQXJyYXkodmFsdWVzKVxuICB2YXIgZmlyc3RWYWx1ZVR5cGUgPSB0b21sVHlwZSh2YWx1ZXNbMF0pXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoZmlyc3RWYWx1ZVR5cGUgIT09ICd0YWJsZScpIHRocm93IHR5cGVFcnJvcihmaXJzdFZhbHVlVHlwZSlcbiAgdmFyIGZ1bGxLZXkgPSBwcmVmaXggKyBzdHJpbmdpZnlLZXkoa2V5KVxuICB2YXIgcmVzdWx0ID0gJydcbiAgdmFsdWVzLmZvckVhY2godGFibGUgPT4ge1xuICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkgcmVzdWx0ICs9ICdcXG4nXG4gICAgcmVzdWx0ICs9IGluZGVudCArICdbWycgKyBmdWxsS2V5ICsgJ11dXFxuJ1xuICAgIHJlc3VsdCArPSBzdHJpbmdpZnlPYmplY3QoZnVsbEtleSArICcuJywgaW5kZW50LCB0YWJsZSlcbiAgfSlcbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlDb21wbGV4VGFibGUgKHByZWZpeCwgaW5kZW50LCBrZXksIHZhbHVlKSB7XG4gIHZhciBmdWxsS2V5ID0gcHJlZml4ICsgc3RyaW5naWZ5S2V5KGtleSlcbiAgdmFyIHJlc3VsdCA9ICcnXG4gIGlmIChnZXRJbmxpbmVLZXlzKHZhbHVlKS5sZW5ndGggPiAwKSB7XG4gICAgcmVzdWx0ICs9IGluZGVudCArICdbJyArIGZ1bGxLZXkgKyAnXVxcbidcbiAgfVxuICByZXR1cm4gcmVzdWx0ICsgc3RyaW5naWZ5T2JqZWN0KGZ1bGxLZXkgKyAnLicsIGluZGVudCwgdmFsdWUpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UuanMnKVxuZXhwb3J0cy5zdHJpbmdpZnkgPSByZXF1aXJlKCcuL3N0cmluZ2lmeS5qcycpXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmZyb21DYWxsYmFjayA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBhcmdzLnB1c2goKGVyciwgcmVzKSA9PiAoZXJyICE9IG51bGwpID8gcmVqZWN0KGVycikgOiByZXNvbHZlKHJlcykpXG4gICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9KVxuICAgIH1cbiAgfSwgJ25hbWUnLCB7IHZhbHVlOiBmbi5uYW1lIH0pXG59XG5cbmV4cG9ydHMuZnJvbVByb21pc2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGNvbnN0IGNiID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdXG4gICAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgZWxzZSB7XG4gICAgICBhcmdzLnBvcCgpXG4gICAgICBmbi5hcHBseSh0aGlzLCBhcmdzKS50aGVuKHIgPT4gY2IobnVsbCwgciksIGNiKVxuICAgIH1cbiAgfSwgJ25hbWUnLCB7IHZhbHVlOiBmbi5uYW1lIH0pXG59XG4iLAogICAgInZhciBjb25zdGFudHMgPSByZXF1aXJlKCdjb25zdGFudHMnKVxuXG52YXIgb3JpZ0N3ZCA9IHByb2Nlc3MuY3dkXG52YXIgY3dkID0gbnVsbFxuXG52YXIgcGxhdGZvcm0gPSBwcm9jZXNzLmVudi5HUkFDRUZVTF9GU19QTEFURk9STSB8fCBwcm9jZXNzLnBsYXRmb3JtXG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24oKSB7XG4gIGlmICghY3dkKVxuICAgIGN3ZCA9IG9yaWdDd2QuY2FsbChwcm9jZXNzKVxuICByZXR1cm4gY3dkXG59XG50cnkge1xuICBwcm9jZXNzLmN3ZCgpXG59IGNhdGNoIChlcikge31cblxuLy8gVGhpcyBjaGVjayBpcyBuZWVkZWQgdW50aWwgbm9kZS5qcyAxMiBpcyByZXF1aXJlZFxuaWYgKHR5cGVvZiBwcm9jZXNzLmNoZGlyID09PSAnZnVuY3Rpb24nKSB7XG4gIHZhciBjaGRpciA9IHByb2Nlc3MuY2hkaXJcbiAgcHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkKSB7XG4gICAgY3dkID0gbnVsbFxuICAgIGNoZGlyLmNhbGwocHJvY2VzcywgZClcbiAgfVxuICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YocHJvY2Vzcy5jaGRpciwgY2hkaXIpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hcblxuZnVuY3Rpb24gcGF0Y2ggKGZzKSB7XG4gIC8vIChyZS0paW1wbGVtZW50IHNvbWUgdGhpbmdzIHRoYXQgYXJlIGtub3duIGJ1c3RlZCBvciBtaXNzaW5nLlxuXG4gIC8vIGxjaG1vZCwgYnJva2VuIHByaW9yIHRvIDAuNi4yXG4gIC8vIGJhY2stcG9ydCB0aGUgZml4IGhlcmUuXG4gIGlmIChjb25zdGFudHMuaGFzT3duUHJvcGVydHkoJ09fU1lNTElOSycpICYmXG4gICAgICBwcm9jZXNzLnZlcnNpb24ubWF0Y2goL152MFxcLjZcXC5bMC0yXXxedjBcXC41XFwuLykpIHtcbiAgICBwYXRjaExjaG1vZChmcylcbiAgfVxuXG4gIC8vIGx1dGltZXMgaW1wbGVtZW50YXRpb24sIG9yIG5vLW9wXG4gIGlmICghZnMubHV0aW1lcykge1xuICAgIHBhdGNoTHV0aW1lcyhmcylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9pc2FhY3Mvbm9kZS1ncmFjZWZ1bC1mcy9pc3N1ZXMvNFxuICAvLyBDaG93biBzaG91bGQgbm90IGZhaWwgb24gZWludmFsIG9yIGVwZXJtIGlmIG5vbi1yb290LlxuICAvLyBJdCBzaG91bGQgbm90IGZhaWwgb24gZW5vc3lzIGV2ZXIsIGFzIHRoaXMganVzdCBpbmRpY2F0ZXNcbiAgLy8gdGhhdCBhIGZzIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgaW50ZW5kZWQgb3BlcmF0aW9uLlxuXG4gIGZzLmNob3duID0gY2hvd25GaXgoZnMuY2hvd24pXG4gIGZzLmZjaG93biA9IGNob3duRml4KGZzLmZjaG93bilcbiAgZnMubGNob3duID0gY2hvd25GaXgoZnMubGNob3duKVxuXG4gIGZzLmNobW9kID0gY2htb2RGaXgoZnMuY2htb2QpXG4gIGZzLmZjaG1vZCA9IGNobW9kRml4KGZzLmZjaG1vZClcbiAgZnMubGNobW9kID0gY2htb2RGaXgoZnMubGNobW9kKVxuXG4gIGZzLmNob3duU3luYyA9IGNob3duRml4U3luYyhmcy5jaG93blN5bmMpXG4gIGZzLmZjaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMuZmNob3duU3luYylcbiAgZnMubGNob3duU3luYyA9IGNob3duRml4U3luYyhmcy5sY2hvd25TeW5jKVxuXG4gIGZzLmNobW9kU3luYyA9IGNobW9kRml4U3luYyhmcy5jaG1vZFN5bmMpXG4gIGZzLmZjaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMuZmNobW9kU3luYylcbiAgZnMubGNobW9kU3luYyA9IGNobW9kRml4U3luYyhmcy5sY2htb2RTeW5jKVxuXG4gIGZzLnN0YXQgPSBzdGF0Rml4KGZzLnN0YXQpXG4gIGZzLmZzdGF0ID0gc3RhdEZpeChmcy5mc3RhdClcbiAgZnMubHN0YXQgPSBzdGF0Rml4KGZzLmxzdGF0KVxuXG4gIGZzLnN0YXRTeW5jID0gc3RhdEZpeFN5bmMoZnMuc3RhdFN5bmMpXG4gIGZzLmZzdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLmZzdGF0U3luYylcbiAgZnMubHN0YXRTeW5jID0gc3RhdEZpeFN5bmMoZnMubHN0YXRTeW5jKVxuXG4gIC8vIGlmIGxjaG1vZC9sY2hvd24gZG8gbm90IGV4aXN0LCB0aGVuIG1ha2UgdGhlbSBuby1vcHNcbiAgaWYgKGZzLmNobW9kICYmICFmcy5sY2htb2QpIHtcbiAgICBmcy5sY2htb2QgPSBmdW5jdGlvbiAocGF0aCwgbW9kZSwgY2IpIHtcbiAgICAgIGlmIChjYikgcHJvY2Vzcy5uZXh0VGljayhjYilcbiAgICB9XG4gICAgZnMubGNobW9kU3luYyA9IGZ1bmN0aW9uICgpIHt9XG4gIH1cbiAgaWYgKGZzLmNob3duICYmICFmcy5sY2hvd24pIHtcbiAgICBmcy5sY2hvd24gPSBmdW5jdGlvbiAocGF0aCwgdWlkLCBnaWQsIGNiKSB7XG4gICAgICBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpXG4gICAgfVxuICAgIGZzLmxjaG93blN5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICB9XG5cbiAgLy8gb24gV2luZG93cywgQS9WIHNvZnR3YXJlIGNhbiBsb2NrIHRoZSBkaXJlY3RvcnksIGNhdXNpbmcgdGhpc1xuICAvLyB0byBmYWlsIHdpdGggYW4gRUFDQ0VTIG9yIEVQRVJNIGlmIHRoZSBkaXJlY3RvcnkgY29udGFpbnMgbmV3bHlcbiAgLy8gY3JlYXRlZCBmaWxlcy4gIFRyeSBhZ2FpbiBvbiBmYWlsdXJlLCBmb3IgdXAgdG8gNjAgc2Vjb25kcy5cblxuICAvLyBTZXQgdGhlIHRpbWVvdXQgdGhpcyBsb25nIGJlY2F1c2Ugc29tZSBXaW5kb3dzIEFudGktVmlydXMsIHN1Y2ggYXMgUGFyaXR5XG4gIC8vIGJpdDksIG1heSBsb2NrIGZpbGVzIGZvciB1cCB0byBhIG1pbnV0ZSwgY2F1c2luZyBucG0gcGFja2FnZSBpbnN0YWxsXG4gIC8vIGZhaWx1cmVzLiBBbHNvLCB0YWtlIGNhcmUgdG8geWllbGQgdGhlIHNjaGVkdWxlci4gV2luZG93cyBzY2hlZHVsaW5nIGdpdmVzXG4gIC8vIENQVSB0byBhIGJ1c3kgbG9vcGluZyBwcm9jZXNzLCB3aGljaCBjYW4gY2F1c2UgdGhlIHByb2dyYW0gY2F1c2luZyB0aGUgbG9ja1xuICAvLyBjb250ZW50aW9uIHRvIGJlIHN0YXJ2ZWQgb2YgQ1BVIGJ5IG5vZGUsIHNvIHRoZSBjb250ZW50aW9uIGRvZXNuJ3QgcmVzb2x2ZS5cbiAgaWYgKHBsYXRmb3JtID09PSBcIndpbjMyXCIpIHtcbiAgICBmcy5yZW5hbWUgPSB0eXBlb2YgZnMucmVuYW1lICE9PSAnZnVuY3Rpb24nID8gZnMucmVuYW1lXG4gICAgOiAoZnVuY3Rpb24gKGZzJHJlbmFtZSkge1xuICAgICAgZnVuY3Rpb24gcmVuYW1lIChmcm9tLCB0bywgY2IpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKVxuICAgICAgICB2YXIgYmFja29mZiA9IDA7XG4gICAgICAgIGZzJHJlbmFtZShmcm9tLCB0bywgZnVuY3Rpb24gQ0IgKGVyKSB7XG4gICAgICAgICAgaWYgKGVyXG4gICAgICAgICAgICAgICYmIChlci5jb2RlID09PSBcIkVBQ0NFU1wiIHx8IGVyLmNvZGUgPT09IFwiRVBFUk1cIiB8fCBlci5jb2RlID09PSBcIkVCVVNZXCIpXG4gICAgICAgICAgICAgICYmIERhdGUubm93KCkgLSBzdGFydCA8IDYwMDAwKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBmcy5zdGF0KHRvLCBmdW5jdGlvbiAoc3RhdGVyLCBzdCkge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZXIgJiYgc3RhdGVyLmNvZGUgPT09IFwiRU5PRU5UXCIpXG4gICAgICAgICAgICAgICAgICBmcyRyZW5hbWUoZnJvbSwgdG8sIENCKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICBjYihlcilcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sIGJhY2tvZmYpXG4gICAgICAgICAgICBpZiAoYmFja29mZiA8IDEwMClcbiAgICAgICAgICAgICAgYmFja29mZiArPSAxMDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNiKSBjYihlcilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIE9iamVjdC5zZXRQcm90b3R5cGVPZihyZW5hbWUsIGZzJHJlbmFtZSlcbiAgICAgIHJldHVybiByZW5hbWVcbiAgICB9KShmcy5yZW5hbWUpXG4gIH1cblxuICAvLyBpZiByZWFkKCkgcmV0dXJucyBFQUdBSU4sIHRoZW4ganVzdCB0cnkgaXQgYWdhaW4uXG4gIGZzLnJlYWQgPSB0eXBlb2YgZnMucmVhZCAhPT0gJ2Z1bmN0aW9uJyA/IGZzLnJlYWRcbiAgOiAoZnVuY3Rpb24gKGZzJHJlYWQpIHtcbiAgICBmdW5jdGlvbiByZWFkIChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrXykge1xuICAgICAgdmFyIGNhbGxiYWNrXG4gICAgICBpZiAoY2FsbGJhY2tfICYmIHR5cGVvZiBjYWxsYmFja18gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIGVhZ0NvdW50ZXIgPSAwXG4gICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKGVyLCBfLCBfXykge1xuICAgICAgICAgIGlmIChlciAmJiBlci5jb2RlID09PSAnRUFHQUlOJyAmJiBlYWdDb3VudGVyIDwgMTApIHtcbiAgICAgICAgICAgIGVhZ0NvdW50ZXIgKytcbiAgICAgICAgICAgIHJldHVybiBmcyRyZWFkLmNhbGwoZnMsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhbGxiYWNrXy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmcyRyZWFkLmNhbGwoZnMsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLy8gVGhpcyBlbnN1cmVzIGB1dGlsLnByb21pc2lmeWAgd29ya3MgYXMgaXQgZG9lcyBmb3IgbmF0aXZlIGBmcy5yZWFkYC5cbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YocmVhZCwgZnMkcmVhZClcbiAgICByZXR1cm4gcmVhZFxuICB9KShmcy5yZWFkKVxuXG4gIGZzLnJlYWRTeW5jID0gdHlwZW9mIGZzLnJlYWRTeW5jICE9PSAnZnVuY3Rpb24nID8gZnMucmVhZFN5bmNcbiAgOiAoZnVuY3Rpb24gKGZzJHJlYWRTeW5jKSB7IHJldHVybiBmdW5jdGlvbiAoZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uKSB7XG4gICAgdmFyIGVhZ0NvdW50ZXIgPSAwXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBmcyRyZWFkU3luYy5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24pXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBpZiAoZXIuY29kZSA9PT0gJ0VBR0FJTicgJiYgZWFnQ291bnRlciA8IDEwKSB7XG4gICAgICAgICAgZWFnQ291bnRlciArK1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJcbiAgICAgIH1cbiAgICB9XG4gIH19KShmcy5yZWFkU3luYylcblxuICBmdW5jdGlvbiBwYXRjaExjaG1vZCAoZnMpIHtcbiAgICBmcy5sY2htb2QgPSBmdW5jdGlvbiAocGF0aCwgbW9kZSwgY2FsbGJhY2spIHtcbiAgICAgIGZzLm9wZW4oIHBhdGhcbiAgICAgICAgICAgICAsIGNvbnN0YW50cy5PX1dST05MWSB8IGNvbnN0YW50cy5PX1NZTUxJTktcbiAgICAgICAgICAgICAsIG1vZGVcbiAgICAgICAgICAgICAsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVycilcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICAvLyBwcmVmZXIgdG8gcmV0dXJuIHRoZSBjaG1vZCBlcnJvciwgaWYgb25lIG9jY3VycyxcbiAgICAgICAgLy8gYnV0IHN0aWxsIHRyeSB0byBjbG9zZSwgYW5kIHJlcG9ydCBjbG9zaW5nIGVycm9ycyBpZiB0aGV5IG9jY3VyLlxuICAgICAgICBmcy5mY2htb2QoZmQsIG1vZGUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICBmcy5jbG9zZShmZCwgZnVuY3Rpb24oZXJyMikge1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhlcnIgfHwgZXJyMilcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBmcy5sY2htb2RTeW5jID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUpIHtcbiAgICAgIHZhciBmZCA9IGZzLm9wZW5TeW5jKHBhdGgsIGNvbnN0YW50cy5PX1dST05MWSB8IGNvbnN0YW50cy5PX1NZTUxJTkssIG1vZGUpXG5cbiAgICAgIC8vIHByZWZlciB0byByZXR1cm4gdGhlIGNobW9kIGVycm9yLCBpZiBvbmUgb2NjdXJzLFxuICAgICAgLy8gYnV0IHN0aWxsIHRyeSB0byBjbG9zZSwgYW5kIHJlcG9ydCBjbG9zaW5nIGVycm9ycyBpZiB0aGV5IG9jY3VyLlxuICAgICAgdmFyIHRocmV3ID0gdHJ1ZVxuICAgICAgdmFyIHJldFxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0ID0gZnMuZmNobW9kU3luYyhmZCwgbW9kZSlcbiAgICAgICAgdGhyZXcgPSBmYWxzZVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHRocmV3KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgICB9IGNhdGNoIChlcikge31cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXRcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXRjaEx1dGltZXMgKGZzKSB7XG4gICAgaWYgKGNvbnN0YW50cy5oYXNPd25Qcm9wZXJ0eShcIk9fU1lNTElOS1wiKSAmJiBmcy5mdXRpbWVzKSB7XG4gICAgICBmcy5sdXRpbWVzID0gZnVuY3Rpb24gKHBhdGgsIGF0LCBtdCwgY2IpIHtcbiAgICAgICAgZnMub3BlbihwYXRoLCBjb25zdGFudHMuT19TWU1MSU5LLCBmdW5jdGlvbiAoZXIsIGZkKSB7XG4gICAgICAgICAgaWYgKGVyKSB7XG4gICAgICAgICAgICBpZiAoY2IpIGNiKGVyKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGZzLmZ1dGltZXMoZmQsIGF0LCBtdCwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgICAgICBmcy5jbG9zZShmZCwgZnVuY3Rpb24gKGVyMikge1xuICAgICAgICAgICAgICBpZiAoY2IpIGNiKGVyIHx8IGVyMilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZnMubHV0aW1lc1N5bmMgPSBmdW5jdGlvbiAocGF0aCwgYXQsIG10KSB7XG4gICAgICAgIHZhciBmZCA9IGZzLm9wZW5TeW5jKHBhdGgsIGNvbnN0YW50cy5PX1NZTUxJTkspXG4gICAgICAgIHZhciByZXRcbiAgICAgICAgdmFyIHRocmV3ID0gdHJ1ZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldCA9IGZzLmZ1dGltZXNTeW5jKGZkLCBhdCwgbXQpXG4gICAgICAgICAgdGhyZXcgPSBmYWxzZVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmICh0aHJldykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICAgICAgfSBjYXRjaCAoZXIpIHt9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldFxuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmIChmcy5mdXRpbWVzKSB7XG4gICAgICBmcy5sdXRpbWVzID0gZnVuY3Rpb24gKF9hLCBfYiwgX2MsIGNiKSB7IGlmIChjYikgcHJvY2Vzcy5uZXh0VGljayhjYikgfVxuICAgICAgZnMubHV0aW1lc1N5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNobW9kRml4IChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBtb2RlLCBjYikge1xuICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCBtb2RlLCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgaWYgKGNob3duRXJPayhlcikpIGVyID0gbnVsbFxuICAgICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2htb2RGaXhTeW5jIChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBtb2RlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG1vZGUpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBpZiAoIWNob3duRXJPayhlcikpIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBmdW5jdGlvbiBjaG93bkZpeCAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdWlkLCBnaWQsIGNiKSB7XG4gICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIHVpZCwgZ2lkLCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgaWYgKGNob3duRXJPayhlcikpIGVyID0gbnVsbFxuICAgICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hvd25GaXhTeW5jIChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCB1aWQsIGdpZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCB1aWQsIGdpZClcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGlmICghY2hvd25Fck9rKGVyKSkgdGhyb3cgZXJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdGF0Rml4IChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIE5vZGUgZXJyb25lb3VzbHkgcmV0dXJuZWQgc2lnbmVkIGludGVnZXJzIGZvclxuICAgIC8vIHVpZCArIGdpZC5cbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucywgY2IpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnNcbiAgICAgICAgb3B0aW9ucyA9IG51bGxcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrIChlciwgc3RhdHMpIHtcbiAgICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgICAgaWYgKHN0YXRzLnVpZCA8IDApIHN0YXRzLnVpZCArPSAweDEwMDAwMDAwMFxuICAgICAgICAgIGlmIChzdGF0cy5naWQgPCAwKSBzdGF0cy5naWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zID8gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAgICAgICA6IG9yaWcuY2FsbChmcywgdGFyZ2V0LCBjYWxsYmFjaylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdGF0Rml4U3luYyAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBOb2RlIGVycm9uZW91c2x5IHJldHVybmVkIHNpZ25lZCBpbnRlZ2VycyBmb3JcbiAgICAvLyB1aWQgKyBnaWQuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBzdGF0cyA9IG9wdGlvbnMgPyBvcmlnLmNhbGwoZnMsIHRhcmdldCwgb3B0aW9ucylcbiAgICAgICAgOiBvcmlnLmNhbGwoZnMsIHRhcmdldClcbiAgICAgIGlmIChzdGF0cykge1xuICAgICAgICBpZiAoc3RhdHMudWlkIDwgMCkgc3RhdHMudWlkICs9IDB4MTAwMDAwMDAwXG4gICAgICAgIGlmIChzdGF0cy5naWQgPCAwKSBzdGF0cy5naWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0cztcbiAgICB9XG4gIH1cblxuICAvLyBFTk9TWVMgbWVhbnMgdGhhdCB0aGUgZnMgZG9lc24ndCBzdXBwb3J0IHRoZSBvcC4gSnVzdCBpZ25vcmVcbiAgLy8gdGhhdCwgYmVjYXVzZSBpdCBkb2Vzbid0IG1hdHRlci5cbiAgLy9cbiAgLy8gaWYgdGhlcmUncyBubyBnZXR1aWQsIG9yIGlmIGdldHVpZCgpIGlzIHNvbWV0aGluZyBvdGhlclxuICAvLyB0aGFuIDAsIGFuZCB0aGUgZXJyb3IgaXMgRUlOVkFMIG9yIEVQRVJNLCB0aGVuIGp1c3QgaWdub3JlXG4gIC8vIGl0LlxuICAvL1xuICAvLyBUaGlzIHNwZWNpZmljIGNhc2UgaXMgYSBzaWxlbnQgZmFpbHVyZSBpbiBjcCwgaW5zdGFsbCwgdGFyLFxuICAvLyBhbmQgbW9zdCBvdGhlciB1bml4IHRvb2xzIHRoYXQgbWFuYWdlIHBlcm1pc3Npb25zLlxuICAvL1xuICAvLyBXaGVuIHJ1bm5pbmcgYXMgcm9vdCwgb3IgaWYgb3RoZXIgdHlwZXMgb2YgZXJyb3JzIGFyZVxuICAvLyBlbmNvdW50ZXJlZCwgdGhlbiBpdCdzIHN0cmljdC5cbiAgZnVuY3Rpb24gY2hvd25Fck9rIChlcikge1xuICAgIGlmICghZXIpXG4gICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgaWYgKGVyLmNvZGUgPT09IFwiRU5PU1lTXCIpXG4gICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgdmFyIG5vbnJvb3QgPSAhcHJvY2Vzcy5nZXR1aWQgfHwgcHJvY2Vzcy5nZXR1aWQoKSAhPT0gMFxuICAgIGlmIChub25yb290KSB7XG4gICAgICBpZiAoZXIuY29kZSA9PT0gXCJFSU5WQUxcIiB8fCBlci5jb2RlID09PSBcIkVQRVJNXCIpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsCiAgICAidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxlZ2FjeVxuXG5mdW5jdGlvbiBsZWdhY3kgKGZzKSB7XG4gIHJldHVybiB7XG4gICAgUmVhZFN0cmVhbTogUmVhZFN0cmVhbSxcbiAgICBXcml0ZVN0cmVhbTogV3JpdGVTdHJlYW1cbiAgfVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVhZFN0cmVhbSkpIHJldHVybiBuZXcgUmVhZFN0cmVhbShwYXRoLCBvcHRpb25zKTtcblxuICAgIFN0cmVhbS5jYWxsKHRoaXMpO1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLmZkID0gbnVsbDtcbiAgICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5mbGFncyA9ICdyJztcbiAgICB0aGlzLm1vZGUgPSA0Mzg7IC8qPTA2NjYqL1xuICAgIHRoaXMuYnVmZmVyU2l6ZSA9IDY0ICogMTAyNDtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gTWl4aW4gb3B0aW9ucyBpbnRvIHRoaXNcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICB0aGlzW2tleV0gPSBvcHRpb25zW2tleV07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5jb2RpbmcpIHRoaXMuc2V0RW5jb2RpbmcodGhpcy5lbmNvZGluZyk7XG5cbiAgICBpZiAodGhpcy5zdGFydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLnN0YXJ0KSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignc3RhcnQgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5lbmQgPSBJbmZpbml0eTtcbiAgICAgIH0gZWxzZSBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLmVuZCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ2VuZCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0YXJ0ID4gdGhpcy5lbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGFydCBtdXN0IGJlIDw9IGVuZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmQgIT09IG51bGwpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYuX3JlYWQoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZzLm9wZW4odGhpcy5wYXRoLCB0aGlzLmZsYWdzLCB0aGlzLm1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICBzZWxmLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2VsZi5mZCA9IGZkO1xuICAgICAgc2VsZi5lbWl0KCdvcGVuJywgZmQpO1xuICAgICAgc2VsZi5fcmVhZCgpO1xuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBXcml0ZVN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBXcml0ZVN0cmVhbSkpIHJldHVybiBuZXcgV3JpdGVTdHJlYW0ocGF0aCwgb3B0aW9ucyk7XG5cbiAgICBTdHJlYW0uY2FsbCh0aGlzKTtcblxuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5mZCA9IG51bGw7XG4gICAgdGhpcy53cml0YWJsZSA9IHRydWU7XG5cbiAgICB0aGlzLmZsYWdzID0gJ3cnO1xuICAgIHRoaXMuZW5jb2RpbmcgPSAnYmluYXJ5JztcbiAgICB0aGlzLm1vZGUgPSA0Mzg7IC8qPTA2NjYqL1xuICAgIHRoaXMuYnl0ZXNXcml0dGVuID0gMDtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gTWl4aW4gb3B0aW9ucyBpbnRvIHRoaXNcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICB0aGlzW2tleV0gPSBvcHRpb25zW2tleV07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgdGhpcy5zdGFydCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ3N0YXJ0IG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnN0YXJ0IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0IG11c3QgYmUgPj0gemVybycpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgfVxuXG4gICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgdGhpcy5fcXVldWUgPSBbXTtcblxuICAgIGlmICh0aGlzLmZkID09PSBudWxsKSB7XG4gICAgICB0aGlzLl9vcGVuID0gZnMub3BlbjtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goW3RoaXMuX29wZW4sIHRoaXMucGF0aCwgdGhpcy5mbGFncywgdGhpcy5tb2RlLCB1bmRlZmluZWRdKTtcbiAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVcblxudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iai5fX3Byb3RvX19cbn1cblxuZnVuY3Rpb24gY2xvbmUgKG9iaikge1xuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKVxuICAgIHJldHVybiBvYmpcblxuICBpZiAob2JqIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgIHZhciBjb3B5ID0geyBfX3Byb3RvX186IGdldFByb3RvdHlwZU9mKG9iaikgfVxuICBlbHNlXG4gICAgdmFyIGNvcHkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29weSwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSlcbiAgfSlcblxuICByZXR1cm4gY29weVxufVxuIiwKICAgICJ2YXIgZnMgPSByZXF1aXJlKCdmcycpXG52YXIgcG9seWZpbGxzID0gcmVxdWlyZSgnLi9wb2x5ZmlsbHMuanMnKVxudmFyIGxlZ2FjeSA9IHJlcXVpcmUoJy4vbGVnYWN5LXN0cmVhbXMuanMnKVxudmFyIGNsb25lID0gcmVxdWlyZSgnLi9jbG9uZS5qcycpXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gbm9kZSAwLnggcG9seWZpbGwgKi9cbnZhciBncmFjZWZ1bFF1ZXVlXG52YXIgcHJldmlvdXNTeW1ib2xcblxuLyogaXN0YW5idWwgaWdub3JlIGVsc2UgLSBub2RlIDAueCBwb2x5ZmlsbCAqL1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5mb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgZ3JhY2VmdWxRdWV1ZSA9IFN5bWJvbC5mb3IoJ2dyYWNlZnVsLWZzLnF1ZXVlJylcbiAgLy8gVGhpcyBpcyB1c2VkIGluIHRlc3RpbmcgYnkgZnV0dXJlIHZlcnNpb25zXG4gIHByZXZpb3VzU3ltYm9sID0gU3ltYm9sLmZvcignZ3JhY2VmdWwtZnMucHJldmlvdXMnKVxufSBlbHNlIHtcbiAgZ3JhY2VmdWxRdWV1ZSA9ICdfX19ncmFjZWZ1bC1mcy5xdWV1ZSdcbiAgcHJldmlvdXNTeW1ib2wgPSAnX19fZ3JhY2VmdWwtZnMucHJldmlvdXMnXG59XG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuZnVuY3Rpb24gcHVibGlzaFF1ZXVlKGNvbnRleHQsIHF1ZXVlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb250ZXh0LCBncmFjZWZ1bFF1ZXVlLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBxdWV1ZVxuICAgIH1cbiAgfSlcbn1cblxudmFyIGRlYnVnID0gbm9vcFxuaWYgKHV0aWwuZGVidWdsb2cpXG4gIGRlYnVnID0gdXRpbC5kZWJ1Z2xvZygnZ2ZzNCcpXG5lbHNlIGlmICgvXFxiZ2ZzNFxcYi9pLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJykpXG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG0gPSB1dGlsLmZvcm1hdC5hcHBseSh1dGlsLCBhcmd1bWVudHMpXG4gICAgbSA9ICdHRlM0OiAnICsgbS5zcGxpdCgvXFxuLykuam9pbignXFxuR0ZTNDogJylcbiAgICBjb25zb2xlLmVycm9yKG0pXG4gIH1cblxuLy8gT25jZSB0aW1lIGluaXRpYWxpemF0aW9uXG5pZiAoIWZzW2dyYWNlZnVsUXVldWVdKSB7XG4gIC8vIFRoaXMgcXVldWUgY2FuIGJlIHNoYXJlZCBieSBtdWx0aXBsZSBsb2FkZWQgaW5zdGFuY2VzXG4gIHZhciBxdWV1ZSA9IGdsb2JhbFtncmFjZWZ1bFF1ZXVlXSB8fCBbXVxuICBwdWJsaXNoUXVldWUoZnMsIHF1ZXVlKVxuXG4gIC8vIFBhdGNoIGZzLmNsb3NlL2Nsb3NlU3luYyB0byBzaGFyZWQgcXVldWUgdmVyc2lvbiwgYmVjYXVzZSB3ZSBuZWVkXG4gIC8vIHRvIHJldHJ5KCkgd2hlbmV2ZXIgYSBjbG9zZSBoYXBwZW5zICphbnl3aGVyZSogaW4gdGhlIHByb2dyYW0uXG4gIC8vIFRoaXMgaXMgZXNzZW50aWFsIHdoZW4gbXVsdGlwbGUgZ3JhY2VmdWwtZnMgaW5zdGFuY2VzIGFyZVxuICAvLyBpbiBwbGF5IGF0IHRoZSBzYW1lIHRpbWUuXG4gIGZzLmNsb3NlID0gKGZ1bmN0aW9uIChmcyRjbG9zZSkge1xuICAgIGZ1bmN0aW9uIGNsb3NlIChmZCwgY2IpIHtcbiAgICAgIHJldHVybiBmcyRjbG9zZS5jYWxsKGZzLCBmZCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGdyYWNlZnVsLWZzIHNoYXJlZCBxdWV1ZVxuICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgIHJlc2V0UXVldWUoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9KVxuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbG9zZSwgcHJldmlvdXNTeW1ib2wsIHtcbiAgICAgIHZhbHVlOiBmcyRjbG9zZVxuICAgIH0pXG4gICAgcmV0dXJuIGNsb3NlXG4gIH0pKGZzLmNsb3NlKVxuXG4gIGZzLmNsb3NlU3luYyA9IChmdW5jdGlvbiAoZnMkY2xvc2VTeW5jKSB7XG4gICAgZnVuY3Rpb24gY2xvc2VTeW5jIChmZCkge1xuICAgICAgLy8gVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBncmFjZWZ1bC1mcyBzaGFyZWQgcXVldWVcbiAgICAgIGZzJGNsb3NlU3luYy5hcHBseShmcywgYXJndW1lbnRzKVxuICAgICAgcmVzZXRRdWV1ZSgpXG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsb3NlU3luYywgcHJldmlvdXNTeW1ib2wsIHtcbiAgICAgIHZhbHVlOiBmcyRjbG9zZVN5bmNcbiAgICB9KVxuICAgIHJldHVybiBjbG9zZVN5bmNcbiAgfSkoZnMuY2xvc2VTeW5jKVxuXG4gIGlmICgvXFxiZ2ZzNFxcYi9pLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJykpIHtcbiAgICBwcm9jZXNzLm9uKCdleGl0JywgZnVuY3Rpb24oKSB7XG4gICAgICBkZWJ1Zyhmc1tncmFjZWZ1bFF1ZXVlXSlcbiAgICAgIHJlcXVpcmUoJ2Fzc2VydCcpLmVxdWFsKGZzW2dyYWNlZnVsUXVldWVdLmxlbmd0aCwgMClcbiAgICB9KVxuICB9XG59XG5cbmlmICghZ2xvYmFsW2dyYWNlZnVsUXVldWVdKSB7XG4gIHB1Ymxpc2hRdWV1ZShnbG9iYWwsIGZzW2dyYWNlZnVsUXVldWVdKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaChjbG9uZShmcykpXG5pZiAocHJvY2Vzcy5lbnYuVEVTVF9HUkFDRUZVTF9GU19HTE9CQUxfUEFUQ0ggJiYgIWZzLl9fcGF0Y2hlZCkge1xuICAgIG1vZHVsZS5leHBvcnRzID0gcGF0Y2goZnMpXG4gICAgZnMuX19wYXRjaGVkID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcGF0Y2ggKGZzKSB7XG4gIC8vIEV2ZXJ5dGhpbmcgdGhhdCByZWZlcmVuY2VzIHRoZSBvcGVuKCkgZnVuY3Rpb24gbmVlZHMgdG8gYmUgaW4gaGVyZVxuICBwb2x5ZmlsbHMoZnMpXG4gIGZzLmdyYWNlZnVsaWZ5ID0gcGF0Y2hcblxuICBmcy5jcmVhdGVSZWFkU3RyZWFtID0gY3JlYXRlUmVhZFN0cmVhbVxuICBmcy5jcmVhdGVXcml0ZVN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtXG4gIHZhciBmcyRyZWFkRmlsZSA9IGZzLnJlYWRGaWxlXG4gIGZzLnJlYWRGaWxlID0gcmVhZEZpbGVcbiAgZnVuY3Rpb24gcmVhZEZpbGUgKHBhdGgsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJHJlYWRGaWxlKHBhdGgsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kcmVhZEZpbGUgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRyZWFkRmlsZShwYXRoLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJHJlYWRGaWxlLCBbcGF0aCwgb3B0aW9ucywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkd3JpdGVGaWxlID0gZnMud3JpdGVGaWxlXG4gIGZzLndyaXRlRmlsZSA9IHdyaXRlRmlsZVxuICBmdW5jdGlvbiB3cml0ZUZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJHdyaXRlRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJHdyaXRlRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJHdyaXRlRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJHdyaXRlRmlsZSwgW3BhdGgsIGRhdGEsIG9wdGlvbnMsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJGFwcGVuZEZpbGUgPSBmcy5hcHBlbmRGaWxlXG4gIGlmIChmcyRhcHBlbmRGaWxlKVxuICAgIGZzLmFwcGVuZEZpbGUgPSBhcHBlbmRGaWxlXG4gIGZ1bmN0aW9uIGFwcGVuZEZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJGFwcGVuZEZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRhcHBlbmRGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkYXBwZW5kRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJGFwcGVuZEZpbGUsIFtwYXRoLCBkYXRhLCBvcHRpb25zLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyRjb3B5RmlsZSA9IGZzLmNvcHlGaWxlXG4gIGlmIChmcyRjb3B5RmlsZSlcbiAgICBmcy5jb3B5RmlsZSA9IGNvcHlGaWxlXG4gIGZ1bmN0aW9uIGNvcHlGaWxlIChzcmMsIGRlc3QsIGZsYWdzLCBjYikge1xuICAgIGlmICh0eXBlb2YgZmxhZ3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNiID0gZmxhZ3NcbiAgICAgIGZsYWdzID0gMFxuICAgIH1cbiAgICByZXR1cm4gZ28kY29weUZpbGUoc3JjLCBkZXN0LCBmbGFncywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRjb3B5RmlsZSAoc3JjLCBkZXN0LCBmbGFncywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJGNvcHlGaWxlKHNyYywgZGVzdCwgZmxhZ3MsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kY29weUZpbGUsIFtzcmMsIGRlc3QsIGZsYWdzLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyRyZWFkZGlyID0gZnMucmVhZGRpclxuICBmcy5yZWFkZGlyID0gcmVhZGRpclxuICB2YXIgbm9SZWFkZGlyT3B0aW9uVmVyc2lvbnMgPSAvXnZbMC01XVxcLi9cbiAgZnVuY3Rpb24gcmVhZGRpciAocGF0aCwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICB2YXIgZ28kcmVhZGRpciA9IG5vUmVhZGRpck9wdGlvblZlcnNpb25zLnRlc3QocHJvY2Vzcy52ZXJzaW9uKVxuICAgICAgPyBmdW5jdGlvbiBnbyRyZWFkZGlyIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICAgIHJldHVybiBmcyRyZWFkZGlyKHBhdGgsIGZzJHJlYWRkaXJDYWxsYmFjayhcbiAgICAgICAgICBwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lXG4gICAgICAgICkpXG4gICAgICB9XG4gICAgICA6IGZ1bmN0aW9uIGdvJHJlYWRkaXIgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZzJHJlYWRkaXIocGF0aCwgb3B0aW9ucywgZnMkcmVhZGRpckNhbGxiYWNrKFxuICAgICAgICAgIHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWVcbiAgICAgICAgKSlcbiAgICAgIH1cblxuICAgIHJldHVybiBnbyRyZWFkZGlyKHBhdGgsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZnMkcmVhZGRpckNhbGxiYWNrIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGVyciwgZmlsZXMpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbXG4gICAgICAgICAgICBnbyRyZWFkZGlyLFxuICAgICAgICAgICAgW3BhdGgsIG9wdGlvbnMsIGNiXSxcbiAgICAgICAgICAgIGVycixcbiAgICAgICAgICAgIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLFxuICAgICAgICAgICAgRGF0ZS5ub3coKVxuICAgICAgICAgIF0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5zb3J0KVxuICAgICAgICAgICAgZmlsZXMuc29ydCgpXG5cbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuY2FsbCh0aGlzLCBlcnIsIGZpbGVzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb2Nlc3MudmVyc2lvbi5zdWJzdHIoMCwgNCkgPT09ICd2MC44Jykge1xuICAgIHZhciBsZWdTdHJlYW1zID0gbGVnYWN5KGZzKVxuICAgIFJlYWRTdHJlYW0gPSBsZWdTdHJlYW1zLlJlYWRTdHJlYW1cbiAgICBXcml0ZVN0cmVhbSA9IGxlZ1N0cmVhbXMuV3JpdGVTdHJlYW1cbiAgfVxuXG4gIHZhciBmcyRSZWFkU3RyZWFtID0gZnMuUmVhZFN0cmVhbVxuICBpZiAoZnMkUmVhZFN0cmVhbSkge1xuICAgIFJlYWRTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShmcyRSZWFkU3RyZWFtLnByb3RvdHlwZSlcbiAgICBSZWFkU3RyZWFtLnByb3RvdHlwZS5vcGVuID0gUmVhZFN0cmVhbSRvcGVuXG4gIH1cblxuICB2YXIgZnMkV3JpdGVTdHJlYW0gPSBmcy5Xcml0ZVN0cmVhbVxuICBpZiAoZnMkV3JpdGVTdHJlYW0pIHtcbiAgICBXcml0ZVN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGZzJFdyaXRlU3RyZWFtLnByb3RvdHlwZSlcbiAgICBXcml0ZVN0cmVhbS5wcm90b3R5cGUub3BlbiA9IFdyaXRlU3RyZWFtJG9wZW5cbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ1JlYWRTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gUmVhZFN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBSZWFkU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdXcml0ZVN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBXcml0ZVN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBXcml0ZVN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcblxuICAvLyBsZWdhY3kgbmFtZXNcbiAgdmFyIEZpbGVSZWFkU3RyZWFtID0gUmVhZFN0cmVhbVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdGaWxlUmVhZFN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBGaWxlUmVhZFN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBGaWxlUmVhZFN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcbiAgdmFyIEZpbGVXcml0ZVN0cmVhbSA9IFdyaXRlU3RyZWFtXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ0ZpbGVXcml0ZVN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBGaWxlV3JpdGVTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgRmlsZVdyaXRlU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFJlYWRTdHJlYW0pXG4gICAgICByZXR1cm4gZnMkUmVhZFN0cmVhbS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIFJlYWRTdHJlYW0uYXBwbHkoT2JqZWN0LmNyZWF0ZShSZWFkU3RyZWFtLnByb3RvdHlwZSksIGFyZ3VtZW50cylcbiAgfVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0kb3BlbiAoKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgb3Blbih0aGF0LnBhdGgsIHRoYXQuZmxhZ3MsIHRoYXQubW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgaWYgKHRoYXQuYXV0b0Nsb3NlKVxuICAgICAgICAgIHRoYXQuZGVzdHJveSgpXG5cbiAgICAgICAgdGhhdC5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoYXQuZmQgPSBmZFxuICAgICAgICB0aGF0LmVtaXQoJ29wZW4nLCBmZClcbiAgICAgICAgdGhhdC5yZWFkKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gV3JpdGVTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFdyaXRlU3RyZWFtKVxuICAgICAgcmV0dXJuIGZzJFdyaXRlU3RyZWFtLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRoaXNcbiAgICBlbHNlXG4gICAgICByZXR1cm4gV3JpdGVTdHJlYW0uYXBwbHkoT2JqZWN0LmNyZWF0ZShXcml0ZVN0cmVhbS5wcm90b3R5cGUpLCBhcmd1bWVudHMpXG4gIH1cblxuICBmdW5jdGlvbiBXcml0ZVN0cmVhbSRvcGVuICgpIHtcbiAgICB2YXIgdGhhdCA9IHRoaXNcbiAgICBvcGVuKHRoYXQucGF0aCwgdGhhdC5mbGFncywgdGhhdC5tb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICB0aGF0LmRlc3Ryb3koKVxuICAgICAgICB0aGF0LmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhhdC5mZCA9IGZkXG4gICAgICAgIHRoYXQuZW1pdCgnb3BlbicsIGZkKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVSZWFkU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBmcy5SZWFkU3RyZWFtKHBhdGgsIG9wdGlvbnMpXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVXcml0ZVN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgZnMuV3JpdGVTdHJlYW0ocGF0aCwgb3B0aW9ucylcbiAgfVxuXG4gIHZhciBmcyRvcGVuID0gZnMub3BlblxuICBmcy5vcGVuID0gb3BlblxuICBmdW5jdGlvbiBvcGVuIChwYXRoLCBmbGFncywgbW9kZSwgY2IpIHtcbiAgICBpZiAodHlwZW9mIG1vZGUgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG1vZGUsIG1vZGUgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kb3BlbihwYXRoLCBmbGFncywgbW9kZSwgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRvcGVuIChwYXRoLCBmbGFncywgbW9kZSwgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJG9wZW4ocGF0aCwgZmxhZ3MsIG1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJG9wZW4sIFtwYXRoLCBmbGFncywgbW9kZSwgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnNcbn1cblxuZnVuY3Rpb24gZW5xdWV1ZSAoZWxlbSkge1xuICBkZWJ1ZygnRU5RVUVVRScsIGVsZW1bMF0ubmFtZSwgZWxlbVsxXSlcbiAgZnNbZ3JhY2VmdWxRdWV1ZV0ucHVzaChlbGVtKVxuICByZXRyeSgpXG59XG5cbi8vIGtlZXAgdHJhY2sgb2YgdGhlIHRpbWVvdXQgYmV0d2VlbiByZXRyeSgpIGNhbGxzXG52YXIgcmV0cnlUaW1lclxuXG4vLyByZXNldCB0aGUgc3RhcnRUaW1lIGFuZCBsYXN0VGltZSB0byBub3dcbi8vIHRoaXMgcmVzZXRzIHRoZSBzdGFydCBvZiB0aGUgNjAgc2Vjb25kIG92ZXJhbGwgdGltZW91dCBhcyB3ZWxsIGFzIHRoZVxuLy8gZGVsYXkgYmV0d2VlbiBhdHRlbXB0cyBzbyB0aGF0IHdlJ2xsIHJldHJ5IHRoZXNlIGpvYnMgc29vbmVyXG5mdW5jdGlvbiByZXNldFF1ZXVlICgpIHtcbiAgdmFyIG5vdyA9IERhdGUubm93KClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmc1tncmFjZWZ1bFF1ZXVlXS5sZW5ndGg7ICsraSkge1xuICAgIC8vIGVudHJpZXMgdGhhdCBhcmUgb25seSBhIGxlbmd0aCBvZiAyIGFyZSBmcm9tIGFuIG9sZGVyIHZlcnNpb24sIGRvbid0XG4gICAgLy8gYm90aGVyIG1vZGlmeWluZyB0aG9zZSBzaW5jZSB0aGV5J2xsIGJlIHJldHJpZWQgYW55d2F5LlxuICAgIGlmIChmc1tncmFjZWZ1bFF1ZXVlXVtpXS5sZW5ndGggPiAyKSB7XG4gICAgICBmc1tncmFjZWZ1bFF1ZXVlXVtpXVszXSA9IG5vdyAvLyBzdGFydFRpbWVcbiAgICAgIGZzW2dyYWNlZnVsUXVldWVdW2ldWzRdID0gbm93IC8vIGxhc3RUaW1lXG4gICAgfVxuICB9XG4gIC8vIGNhbGwgcmV0cnkgdG8gbWFrZSBzdXJlIHdlJ3JlIGFjdGl2ZWx5IHByb2Nlc3NpbmcgdGhlIHF1ZXVlXG4gIHJldHJ5KClcbn1cblxuZnVuY3Rpb24gcmV0cnkgKCkge1xuICAvLyBjbGVhciB0aGUgdGltZXIgYW5kIHJlbW92ZSBpdCB0byBoZWxwIHByZXZlbnQgdW5pbnRlbmRlZCBjb25jdXJyZW5jeVxuICBjbGVhclRpbWVvdXQocmV0cnlUaW1lcilcbiAgcmV0cnlUaW1lciA9IHVuZGVmaW5lZFxuXG4gIGlmIChmc1tncmFjZWZ1bFF1ZXVlXS5sZW5ndGggPT09IDApXG4gICAgcmV0dXJuXG5cbiAgdmFyIGVsZW0gPSBmc1tncmFjZWZ1bFF1ZXVlXS5zaGlmdCgpXG4gIHZhciBmbiA9IGVsZW1bMF1cbiAgdmFyIGFyZ3MgPSBlbGVtWzFdXG4gIC8vIHRoZXNlIGl0ZW1zIG1heSBiZSB1bnNldCBpZiB0aGV5IHdlcmUgYWRkZWQgYnkgYW4gb2xkZXIgZ3JhY2VmdWwtZnNcbiAgdmFyIGVyciA9IGVsZW1bMl1cbiAgdmFyIHN0YXJ0VGltZSA9IGVsZW1bM11cbiAgdmFyIGxhc3RUaW1lID0gZWxlbVs0XVxuXG4gIC8vIGlmIHdlIGRvbid0IGhhdmUgYSBzdGFydFRpbWUgd2UgaGF2ZSBubyB3YXkgb2Yga25vd2luZyBpZiB3ZSd2ZSB3YWl0ZWRcbiAgLy8gbG9uZyBlbm91Z2gsIHNvIGdvIGFoZWFkIGFuZCByZXRyeSB0aGlzIGl0ZW0gbm93XG4gIGlmIChzdGFydFRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIGRlYnVnKCdSRVRSWScsIGZuLm5hbWUsIGFyZ3MpXG4gICAgZm4uYXBwbHkobnVsbCwgYXJncylcbiAgfSBlbHNlIGlmIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lID49IDYwMDAwKSB7XG4gICAgLy8gaXQncyBiZWVuIG1vcmUgdGhhbiA2MCBzZWNvbmRzIHRvdGFsLCBiYWlsIG5vd1xuICAgIGRlYnVnKCdUSU1FT1VUJywgZm4ubmFtZSwgYXJncylcbiAgICB2YXIgY2IgPSBhcmdzLnBvcCgpXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiLmNhbGwobnVsbCwgZXJyKVxuICB9IGVsc2Uge1xuICAgIC8vIHRoZSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHRoZSBsYXN0IGF0dGVtcHQgYW5kIHJpZ2h0IG5vd1xuICAgIHZhciBzaW5jZUF0dGVtcHQgPSBEYXRlLm5vdygpIC0gbGFzdFRpbWVcbiAgICAvLyB0aGUgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiB3aGVuIHdlIGZpcnN0IHRyaWVkLCBhbmQgd2hlbiB3ZSBsYXN0IHRyaWVkXG4gICAgLy8gcm91bmRlZCB1cCB0byBhdCBsZWFzdCAxXG4gICAgdmFyIHNpbmNlU3RhcnQgPSBNYXRoLm1heChsYXN0VGltZSAtIHN0YXJ0VGltZSwgMSlcbiAgICAvLyBiYWNrb2ZmLiB3YWl0IGxvbmdlciB0aGFuIHRoZSB0b3RhbCB0aW1lIHdlJ3ZlIGJlZW4gcmV0cnlpbmcsIGJ1dCBvbmx5XG4gICAgLy8gdXAgdG8gYSBtYXhpbXVtIG9mIDEwMG1zXG4gICAgdmFyIGRlc2lyZWREZWxheSA9IE1hdGgubWluKHNpbmNlU3RhcnQgKiAxLjIsIDEwMClcbiAgICAvLyBpdCdzIGJlZW4gbG9uZyBlbm91Z2ggc2luY2UgdGhlIGxhc3QgcmV0cnksIGRvIGl0IGFnYWluXG4gICAgaWYgKHNpbmNlQXR0ZW1wdCA+PSBkZXNpcmVkRGVsYXkpIHtcbiAgICAgIGRlYnVnKCdSRVRSWScsIGZuLm5hbWUsIGFyZ3MpXG4gICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbc3RhcnRUaW1lXSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIHdlIGNhbid0IGRvIHRoaXMgam9iIHlldCwgcHVzaCBpdCB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZVxuICAgICAgLy8gYW5kIGxldCB0aGUgbmV4dCBpdGVyYXRpb24gY2hlY2sgYWdhaW5cbiAgICAgIGZzW2dyYWNlZnVsUXVldWVdLnB1c2goZWxlbSlcbiAgICB9XG4gIH1cblxuICAvLyBzY2hlZHVsZSBvdXIgbmV4dCBydW4gaWYgb25lIGlzbid0IGFscmVhZHkgc2NoZWR1bGVkXG4gIGlmIChyZXRyeVRpbWVyID09PSB1bmRlZmluZWQpIHtcbiAgICByZXRyeVRpbWVyID0gc2V0VGltZW91dChyZXRyeSwgMClcbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbi8vIFRoaXMgaXMgYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub3JtYWxpemUvbXpcbi8vIENvcHlyaWdodCAoYykgMjAxNC0yMDE2IEpvbmF0aGFuIE9uZyBtZUBqb25nbGViZXJyeS5jb20gYW5kIENvbnRyaWJ1dG9yc1xuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5cbmNvbnN0IGFwaSA9IFtcbiAgJ2FjY2VzcycsXG4gICdhcHBlbmRGaWxlJyxcbiAgJ2NobW9kJyxcbiAgJ2Nob3duJyxcbiAgJ2Nsb3NlJyxcbiAgJ2NvcHlGaWxlJyxcbiAgJ2NwJyxcbiAgJ2ZjaG1vZCcsXG4gICdmY2hvd24nLFxuICAnZmRhdGFzeW5jJyxcbiAgJ2ZzdGF0JyxcbiAgJ2ZzeW5jJyxcbiAgJ2Z0cnVuY2F0ZScsXG4gICdmdXRpbWVzJyxcbiAgJ2dsb2InLFxuICAnbGNobW9kJyxcbiAgJ2xjaG93bicsXG4gICdsdXRpbWVzJyxcbiAgJ2xpbmsnLFxuICAnbHN0YXQnLFxuICAnbWtkaXInLFxuICAnbWtkdGVtcCcsXG4gICdvcGVuJyxcbiAgJ29wZW5kaXInLFxuICAncmVhZGRpcicsXG4gICdyZWFkRmlsZScsXG4gICdyZWFkbGluaycsXG4gICdyZWFscGF0aCcsXG4gICdyZW5hbWUnLFxuICAncm0nLFxuICAncm1kaXInLFxuICAnc3RhdCcsXG4gICdzdGF0ZnMnLFxuICAnc3ltbGluaycsXG4gICd0cnVuY2F0ZScsXG4gICd1bmxpbmsnLFxuICAndXRpbWVzJyxcbiAgJ3dyaXRlRmlsZSdcbl0uZmlsdGVyKGtleSA9PiB7XG4gIC8vIFNvbWUgY29tbWFuZHMgYXJlIG5vdCBhdmFpbGFibGUgb24gc29tZSBzeXN0ZW1zLiBFeDpcbiAgLy8gZnMuY3Agd2FzIGFkZGVkIGluIE5vZGUuanMgdjE2LjcuMFxuICAvLyBmcy5zdGF0ZnMgd2FzIGFkZGVkIGluIE5vZGUgdjE5LjYuMCwgdjE4LjE1LjBcbiAgLy8gZnMuZ2xvYiB3YXMgYWRkZWQgaW4gTm9kZS5qcyB2MjIuMC4wXG4gIC8vIGZzLmxjaG93biBpcyBub3QgYXZhaWxhYmxlIG9uIGF0IGxlYXN0IHNvbWUgTGludXhcbiAgcmV0dXJuIHR5cGVvZiBmc1trZXldID09PSAnZnVuY3Rpb24nXG59KVxuXG4vLyBFeHBvcnQgY2xvbmVkIGZzOlxuT2JqZWN0LmFzc2lnbihleHBvcnRzLCBmcylcblxuLy8gVW5pdmVyc2FsaWZ5IGFzeW5jIG1ldGhvZHM6XG5hcGkuZm9yRWFjaChtZXRob2QgPT4ge1xuICBleHBvcnRzW21ldGhvZF0gPSB1KGZzW21ldGhvZF0pXG59KVxuXG4vLyBXZSBkaWZmZXIgZnJvbSBtei9mcyBpbiB0aGF0IHdlIHN0aWxsIHNoaXAgdGhlIG9sZCwgYnJva2VuLCBmcy5leGlzdHMoKVxuLy8gc2luY2Ugd2UgYXJlIGEgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgdGhlIG5hdGl2ZSBtb2R1bGVcbmV4cG9ydHMuZXhpc3RzID0gZnVuY3Rpb24gKGZpbGVuYW1lLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZzLmV4aXN0cyhmaWxlbmFtZSwgY2FsbGJhY2spXG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHJldHVybiBmcy5leGlzdHMoZmlsZW5hbWUsIHJlc29sdmUpXG4gIH0pXG59XG5cbi8vIGZzLnJlYWQoKSwgZnMud3JpdGUoKSwgZnMucmVhZHYoKSwgJiBmcy53cml0ZXYoKSBuZWVkIHNwZWNpYWwgdHJlYXRtZW50IGR1ZSB0byBtdWx0aXBsZSBjYWxsYmFjayBhcmdzXG5cbmV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnMucmVhZChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKVxuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZnMucmVhZChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIChlcnIsIGJ5dGVzUmVhZCwgYnVmZmVyKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgIHJlc29sdmUoeyBieXRlc1JlYWQsIGJ1ZmZlciB9KVxuICAgIH0pXG4gIH0pXG59XG5cbi8vIEZ1bmN0aW9uIHNpZ25hdHVyZSBjYW4gYmVcbi8vIGZzLndyaXRlKGZkLCBidWZmZXJbLCBvZmZzZXRbLCBsZW5ndGhbLCBwb3NpdGlvbl1dXSwgY2FsbGJhY2spXG4vLyBPUlxuLy8gZnMud3JpdGUoZmQsIHN0cmluZ1ssIHBvc2l0aW9uWywgZW5jb2RpbmddXSwgY2FsbGJhY2spXG4vLyBXZSBuZWVkIHRvIGhhbmRsZSBib3RoIGNhc2VzLCBzbyB3ZSB1c2UgLi4uYXJnc1xuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChmZCwgYnVmZmVyLCAuLi5hcmdzKSB7XG4gIGlmICh0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZzLndyaXRlKGZkLCBidWZmZXIsIC4uLmFyZ3MpXG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGZzLndyaXRlKGZkLCBidWZmZXIsIC4uLmFyZ3MsIChlcnIsIGJ5dGVzV3JpdHRlbiwgYnVmZmVyKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgIHJlc29sdmUoeyBieXRlc1dyaXR0ZW4sIGJ1ZmZlciB9KVxuICAgIH0pXG4gIH0pXG59XG5cbi8vIEZ1bmN0aW9uIHNpZ25hdHVyZSBpc1xuLy8gcy5yZWFkdihmZCwgYnVmZmVyc1ssIHBvc2l0aW9uXSwgY2FsbGJhY2spXG4vLyBXZSBuZWVkIHRvIGhhbmRsZSB0aGUgb3B0aW9uYWwgYXJnLCBzbyB3ZSB1c2UgLi4uYXJnc1xuZXhwb3J0cy5yZWFkdiA9IGZ1bmN0aW9uIChmZCwgYnVmZmVycywgLi4uYXJncykge1xuICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmcy5yZWFkdihmZCwgYnVmZmVycywgLi4uYXJncylcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZnMucmVhZHYoZmQsIGJ1ZmZlcnMsIC4uLmFyZ3MsIChlcnIsIGJ5dGVzUmVhZCwgYnVmZmVycykgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICByZXNvbHZlKHsgYnl0ZXNSZWFkLCBidWZmZXJzIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLy8gRnVuY3Rpb24gc2lnbmF0dXJlIGlzXG4vLyBzLndyaXRldihmZCwgYnVmZmVyc1ssIHBvc2l0aW9uXSwgY2FsbGJhY2spXG4vLyBXZSBuZWVkIHRvIGhhbmRsZSB0aGUgb3B0aW9uYWwgYXJnLCBzbyB3ZSB1c2UgLi4uYXJnc1xuZXhwb3J0cy53cml0ZXYgPSBmdW5jdGlvbiAoZmQsIGJ1ZmZlcnMsIC4uLmFyZ3MpIHtcbiAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnMud3JpdGV2KGZkLCBidWZmZXJzLCAuLi5hcmdzKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBmcy53cml0ZXYoZmQsIGJ1ZmZlcnMsIC4uLmFyZ3MsIChlcnIsIGJ5dGVzV3JpdHRlbiwgYnVmZmVycykgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICByZXNvbHZlKHsgYnl0ZXNXcml0dGVuLCBidWZmZXJzIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLy8gZnMucmVhbHBhdGgubmF0aXZlIHNvbWV0aW1lcyBub3QgYXZhaWxhYmxlIGlmIGZzIGlzIG1vbmtleS1wYXRjaGVkXG5pZiAodHlwZW9mIGZzLnJlYWxwYXRoLm5hdGl2ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICBleHBvcnRzLnJlYWxwYXRoLm5hdGl2ZSA9IHUoZnMucmVhbHBhdGgubmF0aXZlKVxufSBlbHNlIHtcbiAgcHJvY2Vzcy5lbWl0V2FybmluZyhcbiAgICAnZnMucmVhbHBhdGgubmF0aXZlIGlzIG5vdCBhIGZ1bmN0aW9uLiBJcyBmcyBiZWluZyBtb25rZXktcGF0Y2hlZD8nLFxuICAgICdXYXJuaW5nJywgJ2ZzLWV4dHJhLVdBUk4wMDAzJ1xuICApXG59XG4iLAogICAgIi8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL21ha2UtZGlyXG4vLyBDb3B5cmlnaHQgKGMpIFNpbmRyZSBTb3JodXMgPHNpbmRyZXNvcmh1c0BnbWFpbC5jb20+IChzaW5kcmVzb3JodXMuY29tKVxuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4ndXNlIHN0cmljdCdcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy84OTg3XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbGlidXYvbGlidXYvcHVsbC8xMDg4XG5tb2R1bGUuZXhwb3J0cy5jaGVja1BhdGggPSBmdW5jdGlvbiBjaGVja1BhdGggKHB0aCkge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGNvbnN0IHBhdGhIYXNJbnZhbGlkV2luQ2hhcmFjdGVycyA9IC9bPD46XCJ8PypdLy50ZXN0KHB0aC5yZXBsYWNlKHBhdGgucGFyc2UocHRoKS5yb290LCAnJykpXG5cbiAgICBpZiAocGF0aEhhc0ludmFsaWRXaW5DaGFyYWN0ZXJzKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgUGF0aCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnM6ICR7cHRofWApXG4gICAgICBlcnJvci5jb2RlID0gJ0VJTlZBTCdcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCB7IGNoZWNrUGF0aCB9ID0gcmVxdWlyZSgnLi91dGlscycpXG5cbmNvbnN0IGdldE1vZGUgPSBvcHRpb25zID0+IHtcbiAgY29uc3QgZGVmYXVsdHMgPSB7IG1vZGU6IDBvNzc3IH1cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnbnVtYmVyJykgcmV0dXJuIG9wdGlvbnNcbiAgcmV0dXJuICh7IC4uLmRlZmF1bHRzLCAuLi5vcHRpb25zIH0pLm1vZGVcbn1cblxubW9kdWxlLmV4cG9ydHMubWFrZURpciA9IGFzeW5jIChkaXIsIG9wdGlvbnMpID0+IHtcbiAgY2hlY2tQYXRoKGRpcilcblxuICByZXR1cm4gZnMubWtkaXIoZGlyLCB7XG4gICAgbW9kZTogZ2V0TW9kZShvcHRpb25zKSxcbiAgICByZWN1cnNpdmU6IHRydWVcbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMubWFrZURpclN5bmMgPSAoZGlyLCBvcHRpb25zKSA9PiB7XG4gIGNoZWNrUGF0aChkaXIpXG5cbiAgcmV0dXJuIGZzLm1rZGlyU3luYyhkaXIsIHtcbiAgICBtb2RlOiBnZXRNb2RlKG9wdGlvbnMpLFxuICAgIHJlY3Vyc2l2ZTogdHJ1ZVxuICB9KVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QgeyBtYWtlRGlyOiBfbWFrZURpciwgbWFrZURpclN5bmMgfSA9IHJlcXVpcmUoJy4vbWFrZS1kaXInKVxuY29uc3QgbWFrZURpciA9IHUoX21ha2VEaXIpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBta2RpcnM6IG1ha2VEaXIsXG4gIG1rZGlyc1N5bmM6IG1ha2VEaXJTeW5jLFxuICAvLyBhbGlhc1xuICBta2RpcnA6IG1ha2VEaXIsXG4gIG1rZGlycFN5bmM6IG1ha2VEaXJTeW5jLFxuICBlbnN1cmVEaXI6IG1ha2VEaXIsXG4gIGVuc3VyZURpclN5bmM6IG1ha2VEaXJTeW5jXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcblxuZnVuY3Rpb24gcGF0aEV4aXN0cyAocGF0aCkge1xuICByZXR1cm4gZnMuYWNjZXNzKHBhdGgpLnRoZW4oKCkgPT4gdHJ1ZSkuY2F0Y2goKCkgPT4gZmFsc2UpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXRoRXhpc3RzOiB1KHBhdGhFeGlzdHMpLFxuICBwYXRoRXhpc3RzU3luYzogZnMuZXhpc3RzU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcblxuYXN5bmMgZnVuY3Rpb24gdXRpbWVzTWlsbGlzIChwYXRoLCBhdGltZSwgbXRpbWUpIHtcbiAgY29uc3QgZmQgPSBhd2FpdCBmcy5vcGVuKHBhdGgsICdyKycpXG5cbiAgbGV0IGVycm9yID0gbnVsbFxuXG4gIHRyeSB7XG4gICAgYXdhaXQgZnMuZnV0aW1lcyhmZCwgYXRpbWUsIG10aW1lKVxuICB9IGNhdGNoIChmdXRpbWVzRXJyKSB7XG4gICAgZXJyb3IgPSBmdXRpbWVzRXJyXG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLmNsb3NlKGZkKVxuICAgIH0gY2F0Y2ggKGNsb3NlRXJyKSB7XG4gICAgICBpZiAoIWVycm9yKSBlcnJvciA9IGNsb3NlRXJyXG4gICAgfVxuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGltZXNNaWxsaXNTeW5jIChwYXRoLCBhdGltZSwgbXRpbWUpIHtcbiAgY29uc3QgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCAncisnKVxuXG4gIGxldCBlcnJvciA9IG51bGxcblxuICB0cnkge1xuICAgIGZzLmZ1dGltZXNTeW5jKGZkLCBhdGltZSwgbXRpbWUpXG4gIH0gY2F0Y2ggKGZ1dGltZXNFcnIpIHtcbiAgICBlcnJvciA9IGZ1dGltZXNFcnJcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgIH0gY2F0Y2ggKGNsb3NlRXJyKSB7XG4gICAgICBpZiAoIWVycm9yKSBlcnJvciA9IGNsb3NlRXJyXG4gICAgfVxuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdXRpbWVzTWlsbGlzOiB1KHV0aW1lc01pbGxpcyksXG4gIHV0aW1lc01pbGxpc1N5bmNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnLi4vZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5cbmZ1bmN0aW9uIGdldFN0YXRzIChzcmMsIGRlc3QsIG9wdHMpIHtcbiAgY29uc3Qgc3RhdEZ1bmMgPSBvcHRzLmRlcmVmZXJlbmNlXG4gICAgPyAoZmlsZSkgPT4gZnMuc3RhdChmaWxlLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgIDogKGZpbGUpID0+IGZzLmxzdGF0KGZpbGUsIHsgYmlnaW50OiB0cnVlIH0pXG4gIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgc3RhdEZ1bmMoc3JjKSxcbiAgICBzdGF0RnVuYyhkZXN0KS5jYXRjaChlcnIgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuIG51bGxcbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIF0pLnRoZW4oKFtzcmNTdGF0LCBkZXN0U3RhdF0pID0+ICh7IHNyY1N0YXQsIGRlc3RTdGF0IH0pKVxufVxuXG5mdW5jdGlvbiBnZXRTdGF0c1N5bmMgKHNyYywgZGVzdCwgb3B0cykge1xuICBsZXQgZGVzdFN0YXRcbiAgY29uc3Qgc3RhdEZ1bmMgPSBvcHRzLmRlcmVmZXJlbmNlXG4gICAgPyAoZmlsZSkgPT4gZnMuc3RhdFN5bmMoZmlsZSwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgICA6IChmaWxlKSA9PiBmcy5sc3RhdFN5bmMoZmlsZSwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgY29uc3Qgc3JjU3RhdCA9IHN0YXRGdW5jKHNyYylcbiAgdHJ5IHtcbiAgICBkZXN0U3RhdCA9IHN0YXRGdW5jKGRlc3QpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHJldHVybiB7IHNyY1N0YXQsIGRlc3RTdGF0OiBudWxsIH1cbiAgICB0aHJvdyBlcnJcbiAgfVxuICByZXR1cm4geyBzcmNTdGF0LCBkZXN0U3RhdCB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNoZWNrUGF0aHMgKHNyYywgZGVzdCwgZnVuY05hbWUsIG9wdHMpIHtcbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gYXdhaXQgZ2V0U3RhdHMoc3JjLCBkZXN0LCBvcHRzKVxuICBpZiAoZGVzdFN0YXQpIHtcbiAgICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgICAgY29uc3Qgc3JjQmFzZU5hbWUgPSBwYXRoLmJhc2VuYW1lKHNyYylcbiAgICAgIGNvbnN0IGRlc3RCYXNlTmFtZSA9IHBhdGguYmFzZW5hbWUoZGVzdClcbiAgICAgIGlmIChmdW5jTmFtZSA9PT0gJ21vdmUnICYmXG4gICAgICAgIHNyY0Jhc2VOYW1lICE9PSBkZXN0QmFzZU5hbWUgJiZcbiAgICAgICAgc3JjQmFzZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gZGVzdEJhc2VOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIHsgc3JjU3RhdCwgZGVzdFN0YXQsIGlzQ2hhbmdpbmdDYXNlOiB0cnVlIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4nKVxuICAgIH1cbiAgICBpZiAoc3JjU3RhdC5pc0RpcmVjdG9yeSgpICYmICFkZXN0U3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBkaXJlY3RvcnkgJyR7c3JjfScuYClcbiAgICB9XG4gICAgaWYgKCFzcmNTdGF0LmlzRGlyZWN0b3J5KCkgJiYgZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIGRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBub24tZGlyZWN0b3J5ICcke3NyY30nLmApXG4gICAgfVxuICB9XG5cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSAmJiBpc1NyY1N1YmRpcihzcmMsIGRlc3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSlcbiAgfVxuXG4gIHJldHVybiB7IHNyY1N0YXQsIGRlc3RTdGF0IH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQYXRoc1N5bmMgKHNyYywgZGVzdCwgZnVuY05hbWUsIG9wdHMpIHtcbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gZ2V0U3RhdHNTeW5jKHNyYywgZGVzdCwgb3B0cylcblxuICBpZiAoZGVzdFN0YXQpIHtcbiAgICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgICAgY29uc3Qgc3JjQmFzZU5hbWUgPSBwYXRoLmJhc2VuYW1lKHNyYylcbiAgICAgIGNvbnN0IGRlc3RCYXNlTmFtZSA9IHBhdGguYmFzZW5hbWUoZGVzdClcbiAgICAgIGlmIChmdW5jTmFtZSA9PT0gJ21vdmUnICYmXG4gICAgICAgIHNyY0Jhc2VOYW1lICE9PSBkZXN0QmFzZU5hbWUgJiZcbiAgICAgICAgc3JjQmFzZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gZGVzdEJhc2VOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIHsgc3JjU3RhdCwgZGVzdFN0YXQsIGlzQ2hhbmdpbmdDYXNlOiB0cnVlIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4nKVxuICAgIH1cbiAgICBpZiAoc3JjU3RhdC5pc0RpcmVjdG9yeSgpICYmICFkZXN0U3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBkaXJlY3RvcnkgJyR7c3JjfScuYClcbiAgICB9XG4gICAgaWYgKCFzcmNTdGF0LmlzRGlyZWN0b3J5KCkgJiYgZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIGRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBub24tZGlyZWN0b3J5ICcke3NyY30nLmApXG4gICAgfVxuICB9XG5cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSAmJiBpc1NyY1N1YmRpcihzcmMsIGRlc3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSlcbiAgfVxuICByZXR1cm4geyBzcmNTdGF0LCBkZXN0U3RhdCB9XG59XG5cbi8vIHJlY3Vyc2l2ZWx5IGNoZWNrIGlmIGRlc3QgcGFyZW50IGlzIGEgc3ViZGlyZWN0b3J5IG9mIHNyYy5cbi8vIEl0IHdvcmtzIGZvciBhbGwgZmlsZSB0eXBlcyBpbmNsdWRpbmcgc3ltbGlua3Mgc2luY2UgaXRcbi8vIGNoZWNrcyB0aGUgc3JjIGFuZCBkZXN0IGlub2Rlcy4gSXQgc3RhcnRzIGZyb20gdGhlIGRlZXBlc3Rcbi8vIHBhcmVudCBhbmQgc3RvcHMgb25jZSBpdCByZWFjaGVzIHRoZSBzcmMgcGFyZW50IG9yIHRoZSByb290IHBhdGguXG5hc3luYyBmdW5jdGlvbiBjaGVja1BhcmVudFBhdGhzIChzcmMsIHNyY1N0YXQsIGRlc3QsIGZ1bmNOYW1lKSB7XG4gIGNvbnN0IHNyY1BhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoc3JjKSlcbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoZGVzdCkpXG4gIGlmIChkZXN0UGFyZW50ID09PSBzcmNQYXJlbnQgfHwgZGVzdFBhcmVudCA9PT0gcGF0aC5wYXJzZShkZXN0UGFyZW50KS5yb290KSByZXR1cm5cblxuICBsZXQgZGVzdFN0YXRcbiAgdHJ5IHtcbiAgICBkZXN0U3RhdCA9IGF3YWl0IGZzLnN0YXQoZGVzdFBhcmVudCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuXG4gICAgdGhyb3cgZXJyXG4gIH1cblxuICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2coc3JjLCBkZXN0LCBmdW5jTmFtZSkpXG4gIH1cblxuICByZXR1cm4gY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3RQYXJlbnQsIGZ1bmNOYW1lKVxufVxuXG5mdW5jdGlvbiBjaGVja1BhcmVudFBhdGhzU3luYyAoc3JjLCBzcmNTdGF0LCBkZXN0LCBmdW5jTmFtZSkge1xuICBjb25zdCBzcmNQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKHNyYykpXG4gIGNvbnN0IGRlc3RQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKGRlc3QpKVxuICBpZiAoZGVzdFBhcmVudCA9PT0gc3JjUGFyZW50IHx8IGRlc3RQYXJlbnQgPT09IHBhdGgucGFyc2UoZGVzdFBhcmVudCkucm9vdCkgcmV0dXJuXG4gIGxldCBkZXN0U3RhdFxuICB0cnkge1xuICAgIGRlc3RTdGF0ID0gZnMuc3RhdFN5bmMoZGVzdFBhcmVudCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuXG4gICAgdGhyb3cgZXJyXG4gIH1cbiAgaWYgKGFyZUlkZW50aWNhbChzcmNTdGF0LCBkZXN0U3RhdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKHNyYywgZGVzdCwgZnVuY05hbWUpKVxuICB9XG4gIHJldHVybiBjaGVja1BhcmVudFBhdGhzU3luYyhzcmMsIHNyY1N0YXQsIGRlc3RQYXJlbnQsIGZ1bmNOYW1lKVxufVxuXG5mdW5jdGlvbiBhcmVJZGVudGljYWwgKHNyY1N0YXQsIGRlc3RTdGF0KSB7XG4gIC8vIHN0YXQuZGV2IGNhbiBiZSAwbiBvbiB3aW5kb3dzIHdoZW4gbm9kZSB2ZXJzaW9uID49IDIyLngueFxuICByZXR1cm4gZGVzdFN0YXQuaW5vICE9PSB1bmRlZmluZWQgJiYgZGVzdFN0YXQuZGV2ICE9PSB1bmRlZmluZWQgJiYgZGVzdFN0YXQuaW5vID09PSBzcmNTdGF0LmlubyAmJiBkZXN0U3RhdC5kZXYgPT09IHNyY1N0YXQuZGV2XG59XG5cbi8vIHJldHVybiB0cnVlIGlmIGRlc3QgaXMgYSBzdWJkaXIgb2Ygc3JjLCBvdGhlcndpc2UgZmFsc2UuXG4vLyBJdCBvbmx5IGNoZWNrcyB0aGUgcGF0aCBzdHJpbmdzLlxuZnVuY3Rpb24gaXNTcmNTdWJkaXIgKHNyYywgZGVzdCkge1xuICBjb25zdCBzcmNBcnIgPSBwYXRoLnJlc29sdmUoc3JjKS5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKGkgPT4gaSlcbiAgY29uc3QgZGVzdEFyciA9IHBhdGgucmVzb2x2ZShkZXN0KS5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKGkgPT4gaSlcbiAgcmV0dXJuIHNyY0Fyci5ldmVyeSgoY3VyLCBpKSA9PiBkZXN0QXJyW2ldID09PSBjdXIpXG59XG5cbmZ1bmN0aW9uIGVyck1zZyAoc3JjLCBkZXN0LCBmdW5jTmFtZSkge1xuICByZXR1cm4gYENhbm5vdCAke2Z1bmNOYW1lfSAnJHtzcmN9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke2Rlc3R9Jy5gXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBjaGVja1BhdGhzXG4gIGNoZWNrUGF0aHM6IHUoY2hlY2tQYXRocyksXG4gIGNoZWNrUGF0aHNTeW5jLFxuICAvLyBjaGVja1BhcmVudFxuICBjaGVja1BhcmVudFBhdGhzOiB1KGNoZWNrUGFyZW50UGF0aHMpLFxuICBjaGVja1BhcmVudFBhdGhzU3luYyxcbiAgLy8gTWlzY1xuICBpc1NyY1N1YmRpcixcbiAgYXJlSWRlbnRpY2FsXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzEwNTZcbi8vIFBlcmZvcm1pbmcgcGFyYWxsZWwgb3BlcmF0aW9ucyBvbiBlYWNoIGl0ZW0gb2YgYW4gYXN5bmMgaXRlcmF0b3IgaXNcbi8vIHN1cnByaXNpbmdseSBoYXJkOyB5b3UgbmVlZCB0byBoYXZlIGhhbmRsZXJzIGluIHBsYWNlIHRvIGF2b2lkIGdldHRpbmcgYW5cbi8vIFVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25XYXJuaW5nLlxuLy8gTk9URTogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwcmVzZW50bHkgaGFuZGxlIHJldHVybiB2YWx1ZXMsIG9ubHkgZXJyb3JzXG5hc3luYyBmdW5jdGlvbiBhc3luY0l0ZXJhdG9yQ29uY3VycmVudFByb2Nlc3MgKGl0ZXJhdG9yLCBmbikge1xuICBjb25zdCBwcm9taXNlcyA9IFtdXG4gIGZvciBhd2FpdCAoY29uc3QgaXRlbSBvZiBpdGVyYXRvcikge1xuICAgIHByb21pc2VzLnB1c2goXG4gICAgICBmbihpdGVtKS50aGVuKFxuICAgICAgICAoKSA9PiBudWxsLFxuICAgICAgICAoZXJyKSA9PiBlcnIgPz8gbmV3IEVycm9yKCd1bmtub3duIGVycm9yJylcbiAgICAgIClcbiAgICApXG4gIH1cbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgcHJvbWlzZXMubWFwKChwcm9taXNlKSA9PlxuICAgICAgcHJvbWlzZS50aGVuKChwb3NzaWJsZUVycikgPT4ge1xuICAgICAgICBpZiAocG9zc2libGVFcnIgIT09IG51bGwpIHRocm93IHBvc3NpYmxlRXJyXG4gICAgICB9KVxuICAgIClcbiAgKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXN5bmNJdGVyYXRvckNvbmN1cnJlbnRQcm9jZXNzXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IHsgbWtkaXJzIH0gPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxuY29uc3QgeyBwYXRoRXhpc3RzIH0gPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpXG5jb25zdCB7IHV0aW1lc01pbGxpcyB9ID0gcmVxdWlyZSgnLi4vdXRpbC91dGltZXMnKVxuY29uc3Qgc3RhdCA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5jb25zdCB7IGFzeW5jSXRlcmF0b3JDb25jdXJyZW50UHJvY2VzcyB9ID0gcmVxdWlyZSgnLi4vdXRpbC9hc3luYycpXG5cbmFzeW5jIGZ1bmN0aW9uIGNvcHkgKHNyYywgZGVzdCwgb3B0cyA9IHt9KSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdHMgPSB7IGZpbHRlcjogb3B0cyB9XG4gIH1cblxuICBvcHRzLmNsb2JiZXIgPSAnY2xvYmJlcicgaW4gb3B0cyA/ICEhb3B0cy5jbG9iYmVyIDogdHJ1ZSAvLyBkZWZhdWx0IHRvIHRydWUgZm9yIG5vd1xuICBvcHRzLm92ZXJ3cml0ZSA9ICdvdmVyd3JpdGUnIGluIG9wdHMgPyAhIW9wdHMub3ZlcndyaXRlIDogb3B0cy5jbG9iYmVyIC8vIG92ZXJ3cml0ZSBmYWxscyBiYWNrIHRvIGNsb2JiZXJcblxuICAvLyBXYXJuIGFib3V0IHVzaW5nIHByZXNlcnZlVGltZXN0YW1wcyBvbiAzMi1iaXQgbm9kZVxuICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMgJiYgcHJvY2Vzcy5hcmNoID09PSAnaWEzMicpIHtcbiAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKFxuICAgICAgJ1VzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcXG5cXG4nICtcbiAgICAgICdcXHRzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjknLFxuICAgICAgJ1dhcm5pbmcnLCAnZnMtZXh0cmEtV0FSTjAwMDEnXG4gICAgKVxuICB9XG5cbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gYXdhaXQgc3RhdC5jaGVja1BhdGhzKHNyYywgZGVzdCwgJ2NvcHknLCBvcHRzKVxuXG4gIGF3YWl0IHN0YXQuY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3QsICdjb3B5JylcblxuICBjb25zdCBpbmNsdWRlID0gYXdhaXQgcnVuRmlsdGVyKHNyYywgZGVzdCwgb3B0cylcblxuICBpZiAoIWluY2x1ZGUpIHJldHVyblxuXG4gIC8vIGNoZWNrIGlmIHRoZSBwYXJlbnQgb2YgZGVzdCBleGlzdHMsIGFuZCBjcmVhdGUgaXQgaWYgaXQgZG9lc24ndCBleGlzdFxuICBjb25zdCBkZXN0UGFyZW50ID0gcGF0aC5kaXJuYW1lKGRlc3QpXG4gIGNvbnN0IGRpckV4aXN0cyA9IGF3YWl0IHBhdGhFeGlzdHMoZGVzdFBhcmVudClcbiAgaWYgKCFkaXJFeGlzdHMpIHtcbiAgICBhd2FpdCBta2RpcnMoZGVzdFBhcmVudClcbiAgfVxuXG4gIGF3YWl0IGdldFN0YXRzQW5kUGVyZm9ybUNvcHkoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuRmlsdGVyIChzcmMsIGRlc3QsIG9wdHMpIHtcbiAgaWYgKCFvcHRzLmZpbHRlcikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIG9wdHMuZmlsdGVyKHNyYywgZGVzdClcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0U3RhdHNBbmRQZXJmb3JtQ29weSAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBjb25zdCBzdGF0Rm4gPSBvcHRzLmRlcmVmZXJlbmNlID8gZnMuc3RhdCA6IGZzLmxzdGF0XG4gIGNvbnN0IHNyY1N0YXQgPSBhd2FpdCBzdGF0Rm4oc3JjKVxuXG4gIGlmIChzcmNTdGF0LmlzRGlyZWN0b3J5KCkpIHJldHVybiBvbkRpcihzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuXG4gIGlmIChcbiAgICBzcmNTdGF0LmlzRmlsZSgpIHx8XG4gICAgc3JjU3RhdC5pc0NoYXJhY3RlckRldmljZSgpIHx8XG4gICAgc3JjU3RhdC5pc0Jsb2NrRGV2aWNlKClcbiAgKSByZXR1cm4gb25GaWxlKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG5cbiAgaWYgKHNyY1N0YXQuaXNTeW1ib2xpY0xpbmsoKSkgcmV0dXJuIG9uTGluayhkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICBpZiAoc3JjU3RhdC5pc1NvY2tldCgpKSB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgc29ja2V0IGZpbGU6ICR7c3JjfWApXG4gIGlmIChzcmNTdGF0LmlzRklGTygpKSB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgRklGTyBwaXBlOiAke3NyY31gKVxuICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmlsZTogJHtzcmN9YClcbn1cblxuYXN5bmMgZnVuY3Rpb24gb25GaWxlIChzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmICghZGVzdFN0YXQpIHJldHVybiBjb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG5cbiAgaWYgKG9wdHMub3ZlcndyaXRlKSB7XG4gICAgYXdhaXQgZnMudW5saW5rKGRlc3QpXG4gICAgcmV0dXJuIGNvcHlGaWxlKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cylcbiAgfVxuICBpZiAob3B0cy5lcnJvck9uRXhpc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2Rlc3R9JyBhbHJlYWR5IGV4aXN0c2ApXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY29weUZpbGUgKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBhd2FpdCBmcy5jb3B5RmlsZShzcmMsIGRlc3QpXG4gIGlmIChvcHRzLnByZXNlcnZlVGltZXN0YW1wcykge1xuICAgIC8vIE1ha2Ugc3VyZSB0aGUgZmlsZSBpcyB3cml0YWJsZSBiZWZvcmUgc2V0dGluZyB0aGUgdGltZXN0YW1wXG4gICAgLy8gb3RoZXJ3aXNlIG9wZW4gZmFpbHMgd2l0aCBFUEVSTSB3aGVuIGludm9rZWQgd2l0aCAncisnXG4gICAgLy8gKHRocm91Z2ggdXRpbWVzIGNhbGwpXG4gICAgaWYgKGZpbGVJc05vdFdyaXRhYmxlKHNyY1N0YXQubW9kZSkpIHtcbiAgICAgIGF3YWl0IG1ha2VGaWxlV3JpdGFibGUoZGVzdCwgc3JjU3RhdC5tb2RlKVxuICAgIH1cblxuICAgIC8vIFNldCB0aW1lc3RhbXBzIGFuZCBtb2RlIGNvcnJlc3BvbmRpbmdseVxuXG4gICAgLy8gTm90ZSB0aGF0IFRoZSBpbml0aWFsIHNyY1N0YXQuYXRpbWUgY2Fubm90IGJlIHRydXN0ZWRcbiAgICAvLyBiZWNhdXNlIGl0IGlzIG1vZGlmaWVkIGJ5IHRoZSByZWFkKDIpIHN5c3RlbSBjYWxsXG4gICAgLy8gKFNlZSBodHRwczovL25vZGVqcy5vcmcvYXBpL2ZzLmh0bWwjZnNfc3RhdF90aW1lX3ZhbHVlcylcbiAgICBjb25zdCB1cGRhdGVkU3JjU3RhdCA9IGF3YWl0IGZzLnN0YXQoc3JjKVxuICAgIGF3YWl0IHV0aW1lc01pbGxpcyhkZXN0LCB1cGRhdGVkU3JjU3RhdC5hdGltZSwgdXBkYXRlZFNyY1N0YXQubXRpbWUpXG4gIH1cblxuICByZXR1cm4gZnMuY2htb2QoZGVzdCwgc3JjU3RhdC5tb2RlKVxufVxuXG5mdW5jdGlvbiBmaWxlSXNOb3RXcml0YWJsZSAoc3JjTW9kZSkge1xuICByZXR1cm4gKHNyY01vZGUgJiAwbzIwMCkgPT09IDBcbn1cblxuZnVuY3Rpb24gbWFrZUZpbGVXcml0YWJsZSAoZGVzdCwgc3JjTW9kZSkge1xuICByZXR1cm4gZnMuY2htb2QoZGVzdCwgc3JjTW9kZSB8IDBvMjAwKVxufVxuXG5hc3luYyBmdW5jdGlvbiBvbkRpciAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICAvLyB0aGUgZGVzdCBkaXJlY3RvcnkgbWlnaHQgbm90IGV4aXN0LCBjcmVhdGUgaXRcbiAgaWYgKCFkZXN0U3RhdCkge1xuICAgIGF3YWl0IGZzLm1rZGlyKGRlc3QpXG4gIH1cblxuICAvLyBpdGVyYXRlIHRocm91Z2ggdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0byBjb3B5IGV2ZXJ5dGhpbmdcbiAgYXdhaXQgYXN5bmNJdGVyYXRvckNvbmN1cnJlbnRQcm9jZXNzKGF3YWl0IGZzLm9wZW5kaXIoc3JjKSwgYXN5bmMgKGl0ZW0pID0+IHtcbiAgICBjb25zdCBzcmNJdGVtID0gcGF0aC5qb2luKHNyYywgaXRlbS5uYW1lKVxuICAgIGNvbnN0IGRlc3RJdGVtID0gcGF0aC5qb2luKGRlc3QsIGl0ZW0ubmFtZSlcblxuICAgIGNvbnN0IGluY2x1ZGUgPSBhd2FpdCBydW5GaWx0ZXIoc3JjSXRlbSwgZGVzdEl0ZW0sIG9wdHMpXG4gICAgLy8gb25seSBjb3B5IHRoZSBpdGVtIGlmIGl0IG1hdGNoZXMgdGhlIGZpbHRlciBmdW5jdGlvblxuICAgIGlmIChpbmNsdWRlKSB7XG4gICAgICBjb25zdCB7IGRlc3RTdGF0IH0gPSBhd2FpdCBzdGF0LmNoZWNrUGF0aHMoc3JjSXRlbSwgZGVzdEl0ZW0sICdjb3B5Jywgb3B0cylcbiAgICAgIC8vIElmIHRoZSBpdGVtIGlzIGEgY29weWFibGUgZmlsZSwgYGdldFN0YXRzQW5kUGVyZm9ybUNvcHlgIHdpbGwgY29weSBpdFxuICAgICAgLy8gSWYgdGhlIGl0ZW0gaXMgYSBkaXJlY3RvcnksIGBnZXRTdGF0c0FuZFBlcmZvcm1Db3B5YCB3aWxsIGNhbGwgYG9uRGlyYCByZWN1cnNpdmVseVxuICAgICAgYXdhaXQgZ2V0U3RhdHNBbmRQZXJmb3JtQ29weShkZXN0U3RhdCwgc3JjSXRlbSwgZGVzdEl0ZW0sIG9wdHMpXG4gICAgfVxuICB9KVxuXG4gIGlmICghZGVzdFN0YXQpIHtcbiAgICBhd2FpdCBmcy5jaG1vZChkZXN0LCBzcmNTdGF0Lm1vZGUpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gb25MaW5rIChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGxldCByZXNvbHZlZFNyYyA9IGF3YWl0IGZzLnJlYWRsaW5rKHNyYylcbiAgaWYgKG9wdHMuZGVyZWZlcmVuY2UpIHtcbiAgICByZXNvbHZlZFNyYyA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCByZXNvbHZlZFNyYylcbiAgfVxuICBpZiAoIWRlc3RTdGF0KSB7XG4gICAgcmV0dXJuIGZzLnN5bWxpbmsocmVzb2x2ZWRTcmMsIGRlc3QpXG4gIH1cblxuICBsZXQgcmVzb2x2ZWREZXN0ID0gbnVsbFxuICB0cnkge1xuICAgIHJlc29sdmVkRGVzdCA9IGF3YWl0IGZzLnJlYWRsaW5rKGRlc3QpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBkZXN0IGV4aXN0cyBhbmQgaXMgYSByZWd1bGFyIGZpbGUgb3IgZGlyZWN0b3J5LFxuICAgIC8vIFdpbmRvd3MgbWF5IHRocm93IFVOS05PV04gZXJyb3IuIElmIGRlc3QgYWxyZWFkeSBleGlzdHMsXG4gICAgLy8gZnMgdGhyb3dzIGVycm9yIGFueXdheSwgc28gbm8gbmVlZCB0byBndWFyZCBhZ2FpbnN0IGl0IGhlcmUuXG4gICAgaWYgKGUuY29kZSA9PT0gJ0VJTlZBTCcgfHwgZS5jb2RlID09PSAnVU5LTk9XTicpIHJldHVybiBmcy5zeW1saW5rKHJlc29sdmVkU3JjLCBkZXN0KVxuICAgIHRocm93IGVcbiAgfVxuICBpZiAob3B0cy5kZXJlZmVyZW5jZSkge1xuICAgIHJlc29sdmVkRGVzdCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCByZXNvbHZlZERlc3QpXG4gIH1cbiAgLy8gSWYgYm90aCBzeW1saW5rcyByZXNvbHZlIHRvIHRoZSBzYW1lIHRhcmdldCwgdGhleSBhcmUgc3RpbGwgZGlzdGluY3Qgc3ltbGlua3NcbiAgLy8gdGhhdCBjYW4gYmUgY29waWVkL292ZXJ3cml0dGVuLiBPbmx5IGNoZWNrIHN1YmRpcmVjdG9yeSBjb25zdHJhaW50cyB3aGVuXG4gIC8vIHRoZSByZXNvbHZlZCBwYXRocyBhcmUgZGlmZmVyZW50LlxuICBpZiAocmVzb2x2ZWRTcmMgIT09IHJlc29sdmVkRGVzdCkge1xuICAgIGlmIChzdGF0LmlzU3JjU3ViZGlyKHJlc29sdmVkU3JjLCByZXNvbHZlZERlc3QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke3Jlc29sdmVkU3JjfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtyZXNvbHZlZERlc3R9Jy5gKVxuICAgIH1cblxuICAgIC8vIGRvIG5vdCBjb3B5IGlmIHNyYyBpcyBhIHN1YmRpciBvZiBkZXN0IHNpbmNlIHVubGlua2luZ1xuICAgIC8vIGRlc3QgaW4gdGhpcyBjYXNlIHdvdWxkIHJlc3VsdCBpbiByZW1vdmluZyBzcmMgY29udGVudHNcbiAgICAvLyBhbmQgdGhlcmVmb3JlIGEgYnJva2VuIHN5bWxpbmsgd291bGQgYmUgY3JlYXRlZC5cbiAgICBpZiAoc3RhdC5pc1NyY1N1YmRpcihyZXNvbHZlZERlc3QsIHJlc29sdmVkU3JjKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlICcke3Jlc29sdmVkRGVzdH0nIHdpdGggJyR7cmVzb2x2ZWRTcmN9Jy5gKVxuICAgIH1cbiAgfVxuXG4gIC8vIGNvcHkgdGhlIGxpbmtcbiAgYXdhaXQgZnMudW5saW5rKGRlc3QpXG4gIHJldHVybiBmcy5zeW1saW5rKHJlc29sdmVkU3JjLCBkZXN0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgbWtkaXJzU3luYyA9IHJlcXVpcmUoJy4uL21rZGlycycpLm1rZGlyc1N5bmNcbmNvbnN0IHV0aW1lc01pbGxpc1N5bmMgPSByZXF1aXJlKCcuLi91dGlsL3V0aW1lcycpLnV0aW1lc01pbGxpc1N5bmNcbmNvbnN0IHN0YXQgPSByZXF1aXJlKCcuLi91dGlsL3N0YXQnKVxuXG5mdW5jdGlvbiBjb3B5U3luYyAoc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdHMgPSB7IGZpbHRlcjogb3B0cyB9XG4gIH1cblxuICBvcHRzID0gb3B0cyB8fCB7fVxuICBvcHRzLmNsb2JiZXIgPSAnY2xvYmJlcicgaW4gb3B0cyA/ICEhb3B0cy5jbG9iYmVyIDogdHJ1ZSAvLyBkZWZhdWx0IHRvIHRydWUgZm9yIG5vd1xuICBvcHRzLm92ZXJ3cml0ZSA9ICdvdmVyd3JpdGUnIGluIG9wdHMgPyAhIW9wdHMub3ZlcndyaXRlIDogb3B0cy5jbG9iYmVyIC8vIG92ZXJ3cml0ZSBmYWxscyBiYWNrIHRvIGNsb2JiZXJcblxuICAvLyBXYXJuIGFib3V0IHVzaW5nIHByZXNlcnZlVGltZXN0YW1wcyBvbiAzMi1iaXQgbm9kZVxuICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMgJiYgcHJvY2Vzcy5hcmNoID09PSAnaWEzMicpIHtcbiAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKFxuICAgICAgJ1VzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcXG5cXG4nICtcbiAgICAgICdcXHRzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjknLFxuICAgICAgJ1dhcm5pbmcnLCAnZnMtZXh0cmEtV0FSTjAwMDInXG4gICAgKVxuICB9XG5cbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gc3RhdC5jaGVja1BhdGhzU3luYyhzcmMsIGRlc3QsICdjb3B5Jywgb3B0cylcbiAgc3RhdC5jaGVja1BhcmVudFBhdGhzU3luYyhzcmMsIHNyY1N0YXQsIGRlc3QsICdjb3B5JylcbiAgaWYgKG9wdHMuZmlsdGVyICYmICFvcHRzLmZpbHRlcihzcmMsIGRlc3QpKSByZXR1cm5cbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGguZGlybmFtZShkZXN0KVxuICBpZiAoIWZzLmV4aXN0c1N5bmMoZGVzdFBhcmVudCkpIG1rZGlyc1N5bmMoZGVzdFBhcmVudClcbiAgcmV0dXJuIGdldFN0YXRzKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIGdldFN0YXRzIChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGNvbnN0IHN0YXRTeW5jID0gb3B0cy5kZXJlZmVyZW5jZSA/IGZzLnN0YXRTeW5jIDogZnMubHN0YXRTeW5jXG4gIGNvbnN0IHNyY1N0YXQgPSBzdGF0U3luYyhzcmMpXG5cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIG9uRGlyKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIGVsc2UgaWYgKHNyY1N0YXQuaXNGaWxlKCkgfHxcbiAgICAgICAgICAgc3JjU3RhdC5pc0NoYXJhY3RlckRldmljZSgpIHx8XG4gICAgICAgICAgIHNyY1N0YXQuaXNCbG9ja0RldmljZSgpKSByZXR1cm4gb25GaWxlKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIGVsc2UgaWYgKHNyY1N0YXQuaXNTeW1ib2xpY0xpbmsoKSkgcmV0dXJuIG9uTGluayhkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICBlbHNlIGlmIChzcmNTdGF0LmlzU29ja2V0KCkpIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBzb2NrZXQgZmlsZTogJHtzcmN9YClcbiAgZWxzZSBpZiAoc3JjU3RhdC5pc0ZJRk8oKSkgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29weSBhIEZJRk8gcGlwZTogJHtzcmN9YClcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZpbGU6ICR7c3JjfWApXG59XG5cbmZ1bmN0aW9uIG9uRmlsZSAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAoIWRlc3RTdGF0KSByZXR1cm4gY29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICByZXR1cm4gbWF5Q29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxufVxuXG5mdW5jdGlvbiBtYXlDb3B5RmlsZSAoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmIChvcHRzLm92ZXJ3cml0ZSkge1xuICAgIGZzLnVubGlua1N5bmMoZGVzdClcbiAgICByZXR1cm4gY29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICB9IGVsc2UgaWYgKG9wdHMuZXJyb3JPbkV4aXN0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAnJHtkZXN0fScgYWxyZWFkeSBleGlzdHNgKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvcHlGaWxlIChzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgZnMuY29weUZpbGVTeW5jKHNyYywgZGVzdClcbiAgaWYgKG9wdHMucHJlc2VydmVUaW1lc3RhbXBzKSBoYW5kbGVUaW1lc3RhbXBzKHNyY1N0YXQubW9kZSwgc3JjLCBkZXN0KVxuICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjU3RhdC5tb2RlKVxufVxuXG5mdW5jdGlvbiBoYW5kbGVUaW1lc3RhbXBzIChzcmNNb2RlLCBzcmMsIGRlc3QpIHtcbiAgLy8gTWFrZSBzdXJlIHRoZSBmaWxlIGlzIHdyaXRhYmxlIGJlZm9yZSBzZXR0aW5nIHRoZSB0aW1lc3RhbXBcbiAgLy8gb3RoZXJ3aXNlIG9wZW4gZmFpbHMgd2l0aCBFUEVSTSB3aGVuIGludm9rZWQgd2l0aCAncisnXG4gIC8vICh0aHJvdWdoIHV0aW1lcyBjYWxsKVxuICBpZiAoZmlsZUlzTm90V3JpdGFibGUoc3JjTW9kZSkpIG1ha2VGaWxlV3JpdGFibGUoZGVzdCwgc3JjTW9kZSlcbiAgcmV0dXJuIHNldERlc3RUaW1lc3RhbXBzKHNyYywgZGVzdClcbn1cblxuZnVuY3Rpb24gZmlsZUlzTm90V3JpdGFibGUgKHNyY01vZGUpIHtcbiAgcmV0dXJuIChzcmNNb2RlICYgMG8yMDApID09PSAwXG59XG5cbmZ1bmN0aW9uIG1ha2VGaWxlV3JpdGFibGUgKGRlc3QsIHNyY01vZGUpIHtcbiAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY01vZGUgfCAwbzIwMClcbn1cblxuZnVuY3Rpb24gc2V0RGVzdE1vZGUgKGRlc3QsIHNyY01vZGUpIHtcbiAgcmV0dXJuIGZzLmNobW9kU3luYyhkZXN0LCBzcmNNb2RlKVxufVxuXG5mdW5jdGlvbiBzZXREZXN0VGltZXN0YW1wcyAoc3JjLCBkZXN0KSB7XG4gIC8vIFRoZSBpbml0aWFsIHNyY1N0YXQuYXRpbWUgY2Fubm90IGJlIHRydXN0ZWRcbiAgLy8gYmVjYXVzZSBpdCBpcyBtb2RpZmllZCBieSB0aGUgcmVhZCgyKSBzeXN0ZW0gY2FsbFxuICAvLyAoU2VlIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvZnMuaHRtbCNmc19zdGF0X3RpbWVfdmFsdWVzKVxuICBjb25zdCB1cGRhdGVkU3JjU3RhdCA9IGZzLnN0YXRTeW5jKHNyYylcbiAgcmV0dXJuIHV0aW1lc01pbGxpc1N5bmMoZGVzdCwgdXBkYXRlZFNyY1N0YXQuYXRpbWUsIHVwZGF0ZWRTcmNTdGF0Lm10aW1lKVxufVxuXG5mdW5jdGlvbiBvbkRpciAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAoIWRlc3RTdGF0KSByZXR1cm4gbWtEaXJBbmRDb3B5KHNyY1N0YXQubW9kZSwgc3JjLCBkZXN0LCBvcHRzKVxuICByZXR1cm4gY29weURpcihzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIG1rRGlyQW5kQ29weSAoc3JjTW9kZSwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGZzLm1rZGlyU3luYyhkZXN0KVxuICBjb3B5RGlyKHNyYywgZGVzdCwgb3B0cylcbiAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY01vZGUpXG59XG5cbmZ1bmN0aW9uIGNvcHlEaXIgKHNyYywgZGVzdCwgb3B0cykge1xuICBjb25zdCBkaXIgPSBmcy5vcGVuZGlyU3luYyhzcmMpXG5cbiAgdHJ5IHtcbiAgICBsZXQgZGlyZW50XG5cbiAgICB3aGlsZSAoKGRpcmVudCA9IGRpci5yZWFkU3luYygpKSAhPT0gbnVsbCkge1xuICAgICAgY29weURpckl0ZW0oZGlyZW50Lm5hbWUsIHNyYywgZGVzdCwgb3B0cylcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgZGlyLmNsb3NlU3luYygpXG4gIH1cbn1cblxuZnVuY3Rpb24gY29weURpckl0ZW0gKGl0ZW0sIHNyYywgZGVzdCwgb3B0cykge1xuICBjb25zdCBzcmNJdGVtID0gcGF0aC5qb2luKHNyYywgaXRlbSlcbiAgY29uc3QgZGVzdEl0ZW0gPSBwYXRoLmpvaW4oZGVzdCwgaXRlbSlcbiAgaWYgKG9wdHMuZmlsdGVyICYmICFvcHRzLmZpbHRlcihzcmNJdGVtLCBkZXN0SXRlbSkpIHJldHVyblxuICBjb25zdCB7IGRlc3RTdGF0IH0gPSBzdGF0LmNoZWNrUGF0aHNTeW5jKHNyY0l0ZW0sIGRlc3RJdGVtLCAnY29weScsIG9wdHMpXG4gIHJldHVybiBnZXRTdGF0cyhkZXN0U3RhdCwgc3JjSXRlbSwgZGVzdEl0ZW0sIG9wdHMpXG59XG5cbmZ1bmN0aW9uIG9uTGluayAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBsZXQgcmVzb2x2ZWRTcmMgPSBmcy5yZWFkbGlua1N5bmMoc3JjKVxuICBpZiAob3B0cy5kZXJlZmVyZW5jZSkge1xuICAgIHJlc29sdmVkU3JjID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHJlc29sdmVkU3JjKVxuICB9XG5cbiAgaWYgKCFkZXN0U3RhdCkge1xuICAgIHJldHVybiBmcy5zeW1saW5rU3luYyhyZXNvbHZlZFNyYywgZGVzdClcbiAgfSBlbHNlIHtcbiAgICBsZXQgcmVzb2x2ZWREZXN0XG4gICAgdHJ5IHtcbiAgICAgIHJlc29sdmVkRGVzdCA9IGZzLnJlYWRsaW5rU3luYyhkZXN0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gZGVzdCBleGlzdHMgYW5kIGlzIGEgcmVndWxhciBmaWxlIG9yIGRpcmVjdG9yeSxcbiAgICAgIC8vIFdpbmRvd3MgbWF5IHRocm93IFVOS05PV04gZXJyb3IuIElmIGRlc3QgYWxyZWFkeSBleGlzdHMsXG4gICAgICAvLyBmcyB0aHJvd3MgZXJyb3IgYW55d2F5LCBzbyBubyBuZWVkIHRvIGd1YXJkIGFnYWluc3QgaXQgaGVyZS5cbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VJTlZBTCcgfHwgZXJyLmNvZGUgPT09ICdVTktOT1dOJykgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHJlc29sdmVkU3JjLCBkZXN0KVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGlmIChvcHRzLmRlcmVmZXJlbmNlKSB7XG4gICAgICByZXNvbHZlZERlc3QgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVzb2x2ZWREZXN0KVxuICAgIH1cbiAgICAvLyBJZiBib3RoIHN5bWxpbmtzIHJlc29sdmUgdG8gdGhlIHNhbWUgdGFyZ2V0LCB0aGV5IGFyZSBzdGlsbCBkaXN0aW5jdCBzeW1saW5rc1xuICAgIC8vIHRoYXQgY2FuIGJlIGNvcGllZC9vdmVyd3JpdHRlbi4gT25seSBjaGVjayBzdWJkaXJlY3RvcnkgY29uc3RyYWludHMgd2hlblxuICAgIC8vIHRoZSByZXNvbHZlZCBwYXRocyBhcmUgZGlmZmVyZW50LlxuICAgIGlmIChyZXNvbHZlZFNyYyAhPT0gcmVzb2x2ZWREZXN0KSB7XG4gICAgICBpZiAoc3RhdC5pc1NyY1N1YmRpcihyZXNvbHZlZFNyYywgcmVzb2x2ZWREZXN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke3Jlc29sdmVkU3JjfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtyZXNvbHZlZERlc3R9Jy5gKVxuICAgICAgfVxuXG4gICAgICAvLyBwcmV2ZW50IGNvcHkgaWYgc3JjIGlzIGEgc3ViZGlyIG9mIGRlc3Qgc2luY2UgdW5saW5raW5nXG4gICAgICAvLyBkZXN0IGluIHRoaXMgY2FzZSB3b3VsZCByZXN1bHQgaW4gcmVtb3Zpbmcgc3JjIGNvbnRlbnRzXG4gICAgICAvLyBhbmQgdGhlcmVmb3JlIGEgYnJva2VuIHN5bWxpbmsgd291bGQgYmUgY3JlYXRlZC5cbiAgICAgIGlmIChzdGF0LmlzU3JjU3ViZGlyKHJlc29sdmVkRGVzdCwgcmVzb2x2ZWRTcmMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtyZXNvbHZlZERlc3R9JyB3aXRoICcke3Jlc29sdmVkU3JjfScuYClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHlMaW5rKHJlc29sdmVkU3JjLCBkZXN0KVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvcHlMaW5rIChyZXNvbHZlZFNyYywgZGVzdCkge1xuICBmcy51bmxpbmtTeW5jKGRlc3QpXG4gIHJldHVybiBmcy5zeW1saW5rU3luYyhyZXNvbHZlZFNyYywgZGVzdClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3luY1xuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29weTogdShyZXF1aXJlKCcuL2NvcHknKSksXG4gIGNvcHlTeW5jOiByZXF1aXJlKCcuL2NvcHktc3luYycpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcblxuZnVuY3Rpb24gcmVtb3ZlIChwYXRoLCBjYWxsYmFjaykge1xuICBmcy5ybShwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSwgY2FsbGJhY2spXG59XG5cbmZ1bmN0aW9uIHJlbW92ZVN5bmMgKHBhdGgpIHtcbiAgZnMucm1TeW5jKHBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcmVtb3ZlOiB1KHJlbW92ZSksXG4gIHJlbW92ZVN5bmNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBta2RpciA9IHJlcXVpcmUoJy4uL21rZGlycycpXG5jb25zdCByZW1vdmUgPSByZXF1aXJlKCcuLi9yZW1vdmUnKVxuXG5jb25zdCBlbXB0eURpciA9IHUoYXN5bmMgZnVuY3Rpb24gZW1wdHlEaXIgKGRpcikge1xuICBsZXQgaXRlbXNcbiAgdHJ5IHtcbiAgICBpdGVtcyA9IGF3YWl0IGZzLnJlYWRkaXIoZGlyKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbWtkaXIubWtkaXJzKGRpcilcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLmFsbChpdGVtcy5tYXAoaXRlbSA9PiByZW1vdmUucmVtb3ZlKHBhdGguam9pbihkaXIsIGl0ZW0pKSkpXG59KVxuXG5mdW5jdGlvbiBlbXB0eURpclN5bmMgKGRpcikge1xuICBsZXQgaXRlbXNcbiAgdHJ5IHtcbiAgICBpdGVtcyA9IGZzLnJlYWRkaXJTeW5jKGRpcilcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuICB9XG5cbiAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICBpdGVtID0gcGF0aC5qb2luKGRpciwgaXRlbSlcbiAgICByZW1vdmUucmVtb3ZlU3luYyhpdGVtKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW1wdHlEaXJTeW5jLFxuICBlbXB0eWRpclN5bmM6IGVtcHR5RGlyU3luYyxcbiAgZW1wdHlEaXIsXG4gIGVtcHR5ZGlyOiBlbXB0eURpclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlRmlsZSAoZmlsZSkge1xuICBsZXQgc3RhdHNcbiAgdHJ5IHtcbiAgICBzdGF0cyA9IGF3YWl0IGZzLnN0YXQoZmlsZSlcbiAgfSBjYXRjaCB7IH1cbiAgaWYgKHN0YXRzICYmIHN0YXRzLmlzRmlsZSgpKSByZXR1cm5cblxuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSlcblxuICBsZXQgZGlyU3RhdHMgPSBudWxsXG4gIHRyeSB7XG4gICAgZGlyU3RhdHMgPSBhd2FpdCBmcy5zdGF0KGRpcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gaWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBtYWtlIGl0XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgYXdhaXQgbWtkaXIubWtkaXJzKGRpcilcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlLCAnJylcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cblxuICBpZiAoZGlyU3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlLCAnJylcbiAgfSBlbHNlIHtcbiAgICAvLyBwYXJlbnQgaXMgbm90IGEgZGlyZWN0b3J5XG4gICAgLy8gVGhpcyBpcyBqdXN0IHRvIGNhdXNlIGFuIGludGVybmFsIEVOT1RESVIgZXJyb3IgdG8gYmUgdGhyb3duXG4gICAgYXdhaXQgZnMucmVhZGRpcihkaXIpXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRmlsZVN5bmMgKGZpbGUpIHtcbiAgbGV0IHN0YXRzXG4gIHRyeSB7XG4gICAgc3RhdHMgPSBmcy5zdGF0U3luYyhmaWxlKVxuICB9IGNhdGNoIHsgfVxuICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNGaWxlKCkpIHJldHVyblxuXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuICB0cnkge1xuICAgIGlmICghZnMuc3RhdFN5bmMoZGlyKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAvLyBwYXJlbnQgaXMgbm90IGEgZGlyZWN0b3J5XG4gICAgICAvLyBUaGlzIGlzIGp1c3QgdG8gY2F1c2UgYW4gaW50ZXJuYWwgRU5PVERJUiBlcnJvciB0byBiZSB0aHJvd25cbiAgICAgIGZzLnJlYWRkaXJTeW5jKGRpcilcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIElmIHRoZSBzdGF0IGNhbGwgYWJvdmUgZmFpbGVkIGJlY2F1c2UgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgaXRcbiAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnRU5PRU5UJykgbWtkaXIubWtkaXJzU3luYyhkaXIpXG4gICAgZWxzZSB0aHJvdyBlcnJcbiAgfVxuXG4gIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgJycpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVGaWxlOiB1KGNyZWF0ZUZpbGUpLFxuICBjcmVhdGVGaWxlU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHsgcGF0aEV4aXN0cyB9ID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKVxuY29uc3QgeyBhcmVJZGVudGljYWwgfSA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUxpbmsgKHNyY3BhdGgsIGRzdHBhdGgpIHtcbiAgbGV0IGRzdFN0YXRcbiAgdHJ5IHtcbiAgICBkc3RTdGF0ID0gYXdhaXQgZnMubHN0YXQoZHN0cGF0aCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgfSBjYXRjaCB7XG4gICAgLy8gaWdub3JlIGVycm9yXG4gIH1cblxuICBsZXQgc3JjU3RhdFxuICB0cnkge1xuICAgIHNyY1N0YXQgPSBhd2FpdCBmcy5sc3RhdChzcmNwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZUxpbmsnKVxuICAgIHRocm93IGVyclxuICB9XG5cbiAgaWYgKGRzdFN0YXQgJiYgYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRzdFN0YXQpKSByZXR1cm5cblxuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcblxuICBjb25zdCBkaXJFeGlzdHMgPSBhd2FpdCBwYXRoRXhpc3RzKGRpcilcblxuICBpZiAoIWRpckV4aXN0cykge1xuICAgIGF3YWl0IG1rZGlyLm1rZGlycyhkaXIpXG4gIH1cblxuICBhd2FpdCBmcy5saW5rKHNyY3BhdGgsIGRzdHBhdGgpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpbmtTeW5jIChzcmNwYXRoLCBkc3RwYXRoKSB7XG4gIGxldCBkc3RTdGF0XG4gIHRyeSB7XG4gICAgZHN0U3RhdCA9IGZzLmxzdGF0U3luYyhkc3RwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICB9IGNhdGNoIHt9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzcmNTdGF0ID0gZnMubHN0YXRTeW5jKHNyY3BhdGgsIHsgYmlnaW50OiB0cnVlIH0pXG4gICAgaWYgKGRzdFN0YXQgJiYgYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRzdFN0YXQpKSByZXR1cm5cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyLm1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKCdsc3RhdCcsICdlbnN1cmVMaW5rJylcbiAgICB0aHJvdyBlcnJcbiAgfVxuXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICBjb25zdCBkaXJFeGlzdHMgPSBmcy5leGlzdHNTeW5jKGRpcilcbiAgaWYgKGRpckV4aXN0cykgcmV0dXJuIGZzLmxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgpXG4gIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuXG4gIHJldHVybiBmcy5saW5rU3luYyhzcmNwYXRoLCBkc3RwYXRoKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY3JlYXRlTGluazogdShjcmVhdGVMaW5rKSxcbiAgY3JlYXRlTGlua1N5bmNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGZzID0gcmVxdWlyZSgnLi4vZnMnKVxuY29uc3QgeyBwYXRoRXhpc3RzIH0gPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0d28gdHlwZXMgb2YgcGF0aHMsIG9uZSByZWxhdGl2ZSB0byBzeW1saW5rLCBhbmQgb25lXG4gKiByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gQ2hlY2tzIGlmIHBhdGggaXMgYWJzb2x1dGUgb3JcbiAqIHJlbGF0aXZlLiBJZiB0aGUgcGF0aCBpcyByZWxhdGl2ZSwgdGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIHBhdGggaXNcbiAqIHJlbGF0aXZlIHRvIHN5bWxpbmsgb3IgcmVsYXRpdmUgdG8gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gVGhpcyBpcyBhblxuICogaW5pdGlhdGl2ZSB0byBmaW5kIGEgc21hcnRlciBgc3JjcGF0aGAgdG8gc3VwcGx5IHdoZW4gYnVpbGRpbmcgc3ltbGlua3MuXG4gKiBUaGlzIGFsbG93cyB5b3UgdG8gZGV0ZXJtaW5lIHdoaWNoIHBhdGggdG8gdXNlIG91dCBvZiBvbmUgb2YgdGhyZWUgcG9zc2libGVcbiAqIHR5cGVzIG9mIHNvdXJjZSBwYXRocy4gVGhlIGZpcnN0IGlzIGFuIGFic29sdXRlIHBhdGguIFRoaXMgaXMgZGV0ZWN0ZWQgYnlcbiAqIGBwYXRoLmlzQWJzb2x1dGUoKWAuIFdoZW4gYW4gYWJzb2x1dGUgcGF0aCBpcyBwcm92aWRlZCwgaXQgaXMgY2hlY2tlZCB0b1xuICogc2VlIGlmIGl0IGV4aXN0cy4gSWYgaXQgZG9lcyBpdCdzIHVzZWQsIGlmIG5vdCBhbiBlcnJvciBpcyByZXR1cm5lZFxuICogKGNhbGxiYWNrKS8gdGhyb3duIChzeW5jKS4gVGhlIG90aGVyIHR3byBvcHRpb25zIGZvciBgc3JjcGF0aGAgYXJlIGFcbiAqIHJlbGF0aXZlIHVybC4gQnkgZGVmYXVsdCBOb2RlJ3MgYGZzLnN5bWxpbmtgIHdvcmtzIGJ5IGNyZWF0aW5nIGEgc3ltbGlua1xuICogdXNpbmcgYGRzdHBhdGhgIGFuZCBleHBlY3RzIHRoZSBgc3JjcGF0aGAgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIG5ld2x5XG4gKiBjcmVhdGVkIHN5bWxpbmsuIElmIHlvdSBwcm92aWRlIGEgYHNyY3BhdGhgIHRoYXQgZG9lcyBub3QgZXhpc3Qgb24gdGhlIGZpbGVcbiAqIHN5c3RlbSBpdCByZXN1bHRzIGluIGEgYnJva2VuIHN5bWxpbmsuIFRvIG1pbmltaXplIHRoaXMsIHRoZSBmdW5jdGlvblxuICogY2hlY2tzIHRvIHNlZSBpZiB0aGUgJ3JlbGF0aXZlIHRvIHN5bWxpbmsnIHNvdXJjZSBmaWxlIGV4aXN0cywgYW5kIGlmIGl0XG4gKiBkb2VzIGl0IHdpbGwgdXNlIGl0LiBJZiBpdCBkb2VzIG5vdCwgaXQgY2hlY2tzIGlmIHRoZXJlJ3MgYSBmaWxlIHRoYXRcbiAqIGV4aXN0cyB0aGF0IGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBpZiBkb2VzIGl0cyB1c2VkLlxuICogVGhpcyBwcmVzZXJ2ZXMgdGhlIGV4cGVjdGF0aW9ucyBvZiB0aGUgb3JpZ2luYWwgZnMuc3ltbGluayBzcGVjIGFuZCBhZGRzXG4gKiB0aGUgYWJpbGl0eSB0byBwYXNzIGluIGByZWxhdGl2ZSB0byBjdXJyZW50IHdvcmtpbmcgZGlyZWNvdHJ5YCBwYXRocy5cbiAqL1xuXG5hc3luYyBmdW5jdGlvbiBzeW1saW5rUGF0aHMgKHNyY3BhdGgsIGRzdHBhdGgpIHtcbiAgaWYgKHBhdGguaXNBYnNvbHV0ZShzcmNwYXRoKSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5sc3RhdChzcmNwYXRoKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKCdsc3RhdCcsICdlbnN1cmVTeW1saW5rJylcbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgfVxuICB9XG5cbiAgY29uc3QgZHN0ZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gIGNvbnN0IHJlbGF0aXZlVG9Ec3QgPSBwYXRoLmpvaW4oZHN0ZGlyLCBzcmNwYXRoKVxuXG4gIGNvbnN0IGV4aXN0cyA9IGF3YWl0IHBhdGhFeGlzdHMocmVsYXRpdmVUb0RzdClcbiAgaWYgKGV4aXN0cykge1xuICAgIHJldHVybiB7XG4gICAgICB0b0N3ZDogcmVsYXRpdmVUb0RzdCxcbiAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5sc3RhdChzcmNwYXRoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZVN5bWxpbmsnKVxuICAgIHRocm93IGVyclxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICB0b0RzdDogcGF0aC5yZWxhdGl2ZShkc3RkaXIsIHNyY3BhdGgpXG4gIH1cbn1cblxuZnVuY3Rpb24gc3ltbGlua1BhdGhzU3luYyAoc3JjcGF0aCwgZHN0cGF0aCkge1xuICBpZiAocGF0aC5pc0Fic29sdXRlKHNyY3BhdGgpKSB7XG4gICAgY29uc3QgZXhpc3RzID0gZnMuZXhpc3RzU3luYyhzcmNwYXRoKVxuICAgIGlmICghZXhpc3RzKSB0aHJvdyBuZXcgRXJyb3IoJ2Fic29sdXRlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QnKVxuICAgIHJldHVybiB7XG4gICAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgfVxuICB9XG5cbiAgY29uc3QgZHN0ZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gIGNvbnN0IHJlbGF0aXZlVG9Ec3QgPSBwYXRoLmpvaW4oZHN0ZGlyLCBzcmNwYXRoKVxuICBjb25zdCBleGlzdHMgPSBmcy5leGlzdHNTeW5jKHJlbGF0aXZlVG9Ec3QpXG4gIGlmIChleGlzdHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9Dd2Q6IHJlbGF0aXZlVG9Ec3QsXG4gICAgICB0b0RzdDogc3JjcGF0aFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNyY0V4aXN0cyA9IGZzLmV4aXN0c1N5bmMoc3JjcGF0aClcbiAgaWYgKCFzcmNFeGlzdHMpIHRocm93IG5ldyBFcnJvcigncmVsYXRpdmUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCcpXG4gIHJldHVybiB7XG4gICAgdG9Dd2Q6IHNyY3BhdGgsXG4gICAgdG9Ec3Q6IHBhdGgucmVsYXRpdmUoZHN0ZGlyLCBzcmNwYXRoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzeW1saW5rUGF0aHM6IHUoc3ltbGlua1BhdGhzKSxcbiAgc3ltbGlua1BhdGhzU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcblxuYXN5bmMgZnVuY3Rpb24gc3ltbGlua1R5cGUgKHNyY3BhdGgsIHR5cGUpIHtcbiAgaWYgKHR5cGUpIHJldHVybiB0eXBlXG5cbiAgbGV0IHN0YXRzXG4gIHRyeSB7XG4gICAgc3RhdHMgPSBhd2FpdCBmcy5sc3RhdChzcmNwYXRoKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJ2ZpbGUnXG4gIH1cblxuICByZXR1cm4gKHN0YXRzICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpID8gJ2RpcicgOiAnZmlsZSdcbn1cblxuZnVuY3Rpb24gc3ltbGlua1R5cGVTeW5jIChzcmNwYXRoLCB0eXBlKSB7XG4gIGlmICh0eXBlKSByZXR1cm4gdHlwZVxuXG4gIGxldCBzdGF0c1xuICB0cnkge1xuICAgIHN0YXRzID0gZnMubHN0YXRTeW5jKHNyY3BhdGgpXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAnZmlsZSdcbiAgfVxuICByZXR1cm4gKHN0YXRzICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpID8gJ2RpcicgOiAnZmlsZSdcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN5bWxpbmtUeXBlOiB1KHN5bWxpbmtUeXBlKSxcbiAgc3ltbGlua1R5cGVTeW5jXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGZzID0gcmVxdWlyZSgnLi4vZnMnKVxuXG5jb25zdCB7IG1rZGlycywgbWtkaXJzU3luYyB9ID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcblxuY29uc3QgeyBzeW1saW5rUGF0aHMsIHN5bWxpbmtQYXRoc1N5bmMgfSA9IHJlcXVpcmUoJy4vc3ltbGluay1wYXRocycpXG5jb25zdCB7IHN5bWxpbmtUeXBlLCBzeW1saW5rVHlwZVN5bmMgfSA9IHJlcXVpcmUoJy4vc3ltbGluay10eXBlJylcblxuY29uc3QgeyBwYXRoRXhpc3RzIH0gPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpXG5cbmNvbnN0IHsgYXJlSWRlbnRpY2FsIH0gPSByZXF1aXJlKCcuLi91dGlsL3N0YXQnKVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVTeW1saW5rIChzcmNwYXRoLCBkc3RwYXRoLCB0eXBlKSB7XG4gIGxldCBzdGF0c1xuICB0cnkge1xuICAgIHN0YXRzID0gYXdhaXQgZnMubHN0YXQoZHN0cGF0aClcbiAgfSBjYXRjaCB7IH1cblxuICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgIC8vIFdoZW4gc3JjcGF0aCBpcyByZWxhdGl2ZSwgcmVzb2x2ZSBpdCByZWxhdGl2ZSB0byBkc3RwYXRoJ3MgZGlyZWN0b3J5XG4gICAgLy8gKHN0YW5kYXJkIHN5bWxpbmsgYmVoYXZpb3IpIG9yIGZhbGwgYmFjayB0byBjd2QgaWYgdGhhdCBkb2Vzbid0IGV4aXN0XG4gICAgbGV0IHNyY1N0YXRcbiAgICBpZiAocGF0aC5pc0Fic29sdXRlKHNyY3BhdGgpKSB7XG4gICAgICBzcmNTdGF0ID0gYXdhaXQgZnMuc3RhdChzcmNwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkc3RkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgICAgIGNvbnN0IHJlbGF0aXZlVG9Ec3QgPSBwYXRoLmpvaW4oZHN0ZGlyLCBzcmNwYXRoKVxuICAgICAgdHJ5IHtcbiAgICAgICAgc3JjU3RhdCA9IGF3YWl0IGZzLnN0YXQocmVsYXRpdmVUb0RzdCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBzcmNTdGF0ID0gYXdhaXQgZnMuc3RhdChzcmNwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRzdFN0YXQgPSBhd2FpdCBmcy5zdGF0KGRzdHBhdGgsIHsgYmlnaW50OiB0cnVlIH0pXG4gICAgaWYgKGFyZUlkZW50aWNhbChzcmNTdGF0LCBkc3RTdGF0KSkgcmV0dXJuXG4gIH1cblxuICBjb25zdCByZWxhdGl2ZSA9IGF3YWl0IHN5bWxpbmtQYXRocyhzcmNwYXRoLCBkc3RwYXRoKVxuICBzcmNwYXRoID0gcmVsYXRpdmUudG9Ec3RcbiAgY29uc3QgdG9UeXBlID0gYXdhaXQgc3ltbGlua1R5cGUocmVsYXRpdmUudG9Dd2QsIHR5cGUpXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuXG4gIGlmICghKGF3YWl0IHBhdGhFeGlzdHMoZGlyKSkpIHtcbiAgICBhd2FpdCBta2RpcnMoZGlyKVxuICB9XG5cbiAgcmV0dXJuIGZzLnN5bWxpbmsoc3JjcGF0aCwgZHN0cGF0aCwgdG9UeXBlKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTeW1saW5rU3luYyAoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSkge1xuICBsZXQgc3RhdHNcbiAgdHJ5IHtcbiAgICBzdGF0cyA9IGZzLmxzdGF0U3luYyhkc3RwYXRoKVxuICB9IGNhdGNoIHsgfVxuICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgIC8vIFdoZW4gc3JjcGF0aCBpcyByZWxhdGl2ZSwgcmVzb2x2ZSBpdCByZWxhdGl2ZSB0byBkc3RwYXRoJ3MgZGlyZWN0b3J5XG4gICAgLy8gKHN0YW5kYXJkIHN5bWxpbmsgYmVoYXZpb3IpIG9yIGZhbGwgYmFjayB0byBjd2QgaWYgdGhhdCBkb2Vzbid0IGV4aXN0XG4gICAgbGV0IHNyY1N0YXRcbiAgICBpZiAocGF0aC5pc0Fic29sdXRlKHNyY3BhdGgpKSB7XG4gICAgICBzcmNTdGF0ID0gZnMuc3RhdFN5bmMoc3JjcGF0aCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZHN0ZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gICAgICBjb25zdCByZWxhdGl2ZVRvRHN0ID0gcGF0aC5qb2luKGRzdGRpciwgc3JjcGF0aClcbiAgICAgIHRyeSB7XG4gICAgICAgIHNyY1N0YXQgPSBmcy5zdGF0U3luYyhyZWxhdGl2ZVRvRHN0LCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHNyY1N0YXQgPSBmcy5zdGF0U3luYyhzcmNwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRzdFN0YXQgPSBmcy5zdGF0U3luYyhkc3RwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgIGlmIChhcmVJZGVudGljYWwoc3JjU3RhdCwgZHN0U3RhdCkpIHJldHVyblxuICB9XG5cbiAgY29uc3QgcmVsYXRpdmUgPSBzeW1saW5rUGF0aHNTeW5jKHNyY3BhdGgsIGRzdHBhdGgpXG4gIHNyY3BhdGggPSByZWxhdGl2ZS50b0RzdFxuICB0eXBlID0gc3ltbGlua1R5cGVTeW5jKHJlbGF0aXZlLnRvQ3dkLCB0eXBlKVxuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgY29uc3QgZXhpc3RzID0gZnMuZXhpc3RzU3luYyhkaXIpXG4gIGlmIChleGlzdHMpIHJldHVybiBmcy5zeW1saW5rU3luYyhzcmNwYXRoLCBkc3RwYXRoLCB0eXBlKVxuICBta2RpcnNTeW5jKGRpcilcbiAgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVTeW1saW5rOiB1KGNyZWF0ZVN5bWxpbmspLFxuICBjcmVhdGVTeW1saW5rU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBjcmVhdGVGaWxlLCBjcmVhdGVGaWxlU3luYyB9ID0gcmVxdWlyZSgnLi9maWxlJylcbmNvbnN0IHsgY3JlYXRlTGluaywgY3JlYXRlTGlua1N5bmMgfSA9IHJlcXVpcmUoJy4vbGluaycpXG5jb25zdCB7IGNyZWF0ZVN5bWxpbmssIGNyZWF0ZVN5bWxpbmtTeW5jIH0gPSByZXF1aXJlKCcuL3N5bWxpbmsnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gZmlsZVxuICBjcmVhdGVGaWxlLFxuICBjcmVhdGVGaWxlU3luYyxcbiAgZW5zdXJlRmlsZTogY3JlYXRlRmlsZSxcbiAgZW5zdXJlRmlsZVN5bmM6IGNyZWF0ZUZpbGVTeW5jLFxuICAvLyBsaW5rXG4gIGNyZWF0ZUxpbmssXG4gIGNyZWF0ZUxpbmtTeW5jLFxuICBlbnN1cmVMaW5rOiBjcmVhdGVMaW5rLFxuICBlbnN1cmVMaW5rU3luYzogY3JlYXRlTGlua1N5bmMsXG4gIC8vIHN5bWxpbmtcbiAgY3JlYXRlU3ltbGluayxcbiAgY3JlYXRlU3ltbGlua1N5bmMsXG4gIGVuc3VyZVN5bWxpbms6IGNyZWF0ZVN5bWxpbmssXG4gIGVuc3VyZVN5bWxpbmtTeW5jOiBjcmVhdGVTeW1saW5rU3luY1xufVxuIiwKICAgICJmdW5jdGlvbiBzdHJpbmdpZnkgKG9iaiwgeyBFT0wgPSAnXFxuJywgZmluYWxFT0wgPSB0cnVlLCByZXBsYWNlciA9IG51bGwsIHNwYWNlcyB9ID0ge30pIHtcbiAgY29uc3QgRU9GID0gZmluYWxFT0wgPyBFT0wgOiAnJ1xuICBjb25zdCBzdHIgPSBKU09OLnN0cmluZ2lmeShvYmosIHJlcGxhY2VyLCBzcGFjZXMpXG5cbiAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ29udmVydGluZyAke3R5cGVvZiBvYmp9IHZhbHVlIHRvIEpTT04gaXMgbm90IHN1cHBvcnRlZGApXG4gIH1cblxuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcbi9nLCBFT0wpICsgRU9GXG59XG5cbmZ1bmN0aW9uIHN0cmlwQm9tIChjb250ZW50KSB7XG4gIC8vIHdlIGRvIHRoaXMgYmVjYXVzZSBKU09OLnBhcnNlIHdvdWxkIGNvbnZlcnQgaXQgdG8gYSB1dGY4IHN0cmluZyBpZiBlbmNvZGluZyB3YXNuJ3Qgc3BlY2lmaWVkXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoY29udGVudCkpIGNvbnRlbnQgPSBjb250ZW50LnRvU3RyaW5nKCd1dGY4JylcbiAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZSgvXlxcdUZFRkYvLCAnJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IHN0cmluZ2lmeSwgc3RyaXBCb20gfVxuIiwKICAgICJsZXQgX2ZzXG50cnkge1xuICBfZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG59IGNhdGNoIChfKSB7XG4gIF9mcyA9IHJlcXVpcmUoJ2ZzJylcbn1cbmNvbnN0IHVuaXZlcnNhbGlmeSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpXG5jb25zdCB7IHN0cmluZ2lmeSwgc3RyaXBCb20gfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuXG5hc3luYyBmdW5jdGlvbiBfcmVhZEZpbGUgKGZpbGUsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHNob3VsZFRocm93ID0gJ3Rocm93cycgaW4gb3B0aW9ucyA/IG9wdGlvbnMudGhyb3dzIDogdHJ1ZVxuXG4gIGxldCBkYXRhID0gYXdhaXQgdW5pdmVyc2FsaWZ5LmZyb21DYWxsYmFjayhmcy5yZWFkRmlsZSkoZmlsZSwgb3B0aW9ucylcblxuICBkYXRhID0gc3RyaXBCb20oZGF0YSlcblxuICBsZXQgb2JqXG4gIHRyeSB7XG4gICAgb2JqID0gSlNPTi5wYXJzZShkYXRhLCBvcHRpb25zID8gb3B0aW9ucy5yZXZpdmVyIDogbnVsbClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgICBlcnIubWVzc2FnZSA9IGAke2ZpbGV9OiAke2Vyci5tZXNzYWdlfWBcbiAgICAgIHRocm93IGVyclxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuY29uc3QgcmVhZEZpbGUgPSB1bml2ZXJzYWxpZnkuZnJvbVByb21pc2UoX3JlYWRGaWxlKVxuXG5mdW5jdGlvbiByZWFkRmlsZVN5bmMgKGZpbGUsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHNob3VsZFRocm93ID0gJ3Rocm93cycgaW4gb3B0aW9ucyA/IG9wdGlvbnMudGhyb3dzIDogdHJ1ZVxuXG4gIHRyeSB7XG4gICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZSwgb3B0aW9ucylcbiAgICBjb250ZW50ID0gc3RyaXBCb20oY29udGVudClcbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50LCBvcHRpb25zLnJldml2ZXIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChzaG91bGRUaHJvdykge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBgJHtmaWxlfTogJHtlcnIubWVzc2FnZX1gXG4gICAgICB0aHJvdyBlcnJcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX3dyaXRlRmlsZSAoZmlsZSwgb2JqLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShvYmosIG9wdGlvbnMpXG5cbiAgYXdhaXQgdW5pdmVyc2FsaWZ5LmZyb21DYWxsYmFjayhmcy53cml0ZUZpbGUpKGZpbGUsIHN0ciwgb3B0aW9ucylcbn1cblxuY29uc3Qgd3JpdGVGaWxlID0gdW5pdmVyc2FsaWZ5LmZyb21Qcm9taXNlKF93cml0ZUZpbGUpXG5cbmZ1bmN0aW9uIHdyaXRlRmlsZVN5bmMgKGZpbGUsIG9iaiwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGZzID0gb3B0aW9ucy5mcyB8fCBfZnNcblxuICBjb25zdCBzdHIgPSBzdHJpbmdpZnkob2JqLCBvcHRpb25zKVxuICAvLyBub3Qgc3VyZSBpZiBmcy53cml0ZUZpbGVTeW5jIHJldHVybnMgYW55dGhpbmcsIGJ1dCBqdXN0IGluIGNhc2VcbiAgcmV0dXJuIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG4vLyBOT1RFOiBkbyBub3QgY2hhbmdlIHRoaXMgZXhwb3J0IGZvcm1hdDsgcmVxdWlyZWQgZm9yIEVTTSBjb21wYXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtanNvbmZpbGUvcHVsbC8xNjIgZm9yIGRldGFpbHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICByZWFkRmlsZSxcbiAgcmVhZEZpbGVTeW5jLFxuICB3cml0ZUZpbGUsXG4gIHdyaXRlRmlsZVN5bmNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGpzb25GaWxlID0gcmVxdWlyZSgnanNvbmZpbGUnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8ganNvbmZpbGUgZXhwb3J0c1xuICByZWFkSnNvbjoganNvbkZpbGUucmVhZEZpbGUsXG4gIHJlYWRKc29uU3luYzoganNvbkZpbGUucmVhZEZpbGVTeW5jLFxuICB3cml0ZUpzb246IGpzb25GaWxlLndyaXRlRmlsZSxcbiAgd3JpdGVKc29uU3luYzoganNvbkZpbGUud3JpdGVGaWxlU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcblxuYXN5bmMgZnVuY3Rpb24gb3V0cHV0RmlsZSAoZmlsZSwgZGF0YSwgZW5jb2RpbmcgPSAndXRmLTgnKSB7XG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuXG4gIGlmICghKGF3YWl0IHBhdGhFeGlzdHMoZGlyKSkpIHtcbiAgICBhd2FpdCBta2Rpci5ta2RpcnMoZGlyKVxuICB9XG5cbiAgcmV0dXJuIGZzLndyaXRlRmlsZShmaWxlLCBkYXRhLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gb3V0cHV0RmlsZVN5bmMgKGZpbGUsIC4uLmFyZ3MpIHtcbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG4gIGlmICghZnMuZXhpc3RzU3luYyhkaXIpKSB7XG4gICAgbWtkaXIubWtkaXJzU3luYyhkaXIpXG4gIH1cblxuICBmcy53cml0ZUZpbGVTeW5jKGZpbGUsIC4uLmFyZ3MpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBvdXRwdXRGaWxlOiB1KG91dHB1dEZpbGUpLFxuICBvdXRwdXRGaWxlU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJ2pzb25maWxlL3V0aWxzJylcbmNvbnN0IHsgb3V0cHV0RmlsZSB9ID0gcmVxdWlyZSgnLi4vb3V0cHV0LWZpbGUnKVxuXG5hc3luYyBmdW5jdGlvbiBvdXRwdXRKc29uIChmaWxlLCBkYXRhLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KGRhdGEsIG9wdGlvbnMpXG5cbiAgYXdhaXQgb3V0cHV0RmlsZShmaWxlLCBzdHIsIG9wdGlvbnMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3V0cHV0SnNvblxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJ2pzb25maWxlL3V0aWxzJylcbmNvbnN0IHsgb3V0cHV0RmlsZVN5bmMgfSA9IHJlcXVpcmUoJy4uL291dHB1dC1maWxlJylcblxuZnVuY3Rpb24gb3V0cHV0SnNvblN5bmMgKGZpbGUsIGRhdGEsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KGRhdGEsIG9wdGlvbnMpXG5cbiAgb3V0cHV0RmlsZVN5bmMoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG91dHB1dEpzb25TeW5jXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcbmNvbnN0IGpzb25GaWxlID0gcmVxdWlyZSgnLi9qc29uZmlsZScpXG5cbmpzb25GaWxlLm91dHB1dEpzb24gPSB1KHJlcXVpcmUoJy4vb3V0cHV0LWpzb24nKSlcbmpzb25GaWxlLm91dHB1dEpzb25TeW5jID0gcmVxdWlyZSgnLi9vdXRwdXQtanNvbi1zeW5jJylcbi8vIGFsaWFzZXNcbmpzb25GaWxlLm91dHB1dEpTT04gPSBqc29uRmlsZS5vdXRwdXRKc29uXG5qc29uRmlsZS5vdXRwdXRKU09OU3luYyA9IGpzb25GaWxlLm91dHB1dEpzb25TeW5jXG5qc29uRmlsZS53cml0ZUpTT04gPSBqc29uRmlsZS53cml0ZUpzb25cbmpzb25GaWxlLndyaXRlSlNPTlN5bmMgPSBqc29uRmlsZS53cml0ZUpzb25TeW5jXG5qc29uRmlsZS5yZWFkSlNPTiA9IGpzb25GaWxlLnJlYWRKc29uXG5qc29uRmlsZS5yZWFkSlNPTlN5bmMgPSBqc29uRmlsZS5yZWFkSnNvblN5bmNcblxubW9kdWxlLmV4cG9ydHMgPSBqc29uRmlsZVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCB7IGNvcHkgfSA9IHJlcXVpcmUoJy4uL2NvcHknKVxuY29uc3QgeyByZW1vdmUgfSA9IHJlcXVpcmUoJy4uL3JlbW92ZScpXG5jb25zdCB7IG1rZGlycCB9ID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHsgcGF0aEV4aXN0cyB9ID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKVxuY29uc3Qgc3RhdCA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5cbmFzeW5jIGZ1bmN0aW9uIG1vdmUgKHNyYywgZGVzdCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG92ZXJ3cml0ZSA9IG9wdHMub3ZlcndyaXRlIHx8IG9wdHMuY2xvYmJlciB8fCBmYWxzZVxuXG4gIGNvbnN0IHsgc3JjU3RhdCwgaXNDaGFuZ2luZ0Nhc2UgPSBmYWxzZSB9ID0gYXdhaXQgc3RhdC5jaGVja1BhdGhzKHNyYywgZGVzdCwgJ21vdmUnLCBvcHRzKVxuXG4gIGF3YWl0IHN0YXQuY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3QsICdtb3ZlJylcblxuICAvLyBJZiB0aGUgcGFyZW50IG9mIGRlc3QgaXMgbm90IHJvb3QsIG1ha2Ugc3VyZSBpdCBleGlzdHMgYmVmb3JlIHByb2NlZWRpbmdcbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGguZGlybmFtZShkZXN0KVxuICBjb25zdCBwYXJzZWRQYXJlbnRQYXRoID0gcGF0aC5wYXJzZShkZXN0UGFyZW50KVxuICBpZiAocGFyc2VkUGFyZW50UGF0aC5yb290ICE9PSBkZXN0UGFyZW50KSB7XG4gICAgYXdhaXQgbWtkaXJwKGRlc3RQYXJlbnQpXG4gIH1cblxuICByZXR1cm4gZG9SZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGlzQ2hhbmdpbmdDYXNlKVxufVxuXG5hc3luYyBmdW5jdGlvbiBkb1JlbmFtZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGlzQ2hhbmdpbmdDYXNlKSB7XG4gIGlmICghaXNDaGFuZ2luZ0Nhc2UpIHtcbiAgICBpZiAob3ZlcndyaXRlKSB7XG4gICAgICBhd2FpdCByZW1vdmUoZGVzdClcbiAgICB9IGVsc2UgaWYgKGF3YWl0IHBhdGhFeGlzdHMoZGVzdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGVzdCBhbHJlYWR5IGV4aXN0cy4nKVxuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVHJ5IHcvIHJlbmFtZSBmaXJzdCwgYW5kIHRyeSBjb3B5ICsgcmVtb3ZlIGlmIEVYREVWXG4gICAgYXdhaXQgZnMucmVuYW1lKHNyYywgZGVzdClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlICE9PSAnRVhERVYnKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgYXdhaXQgbW92ZUFjcm9zc0RldmljZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSlcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBtb3ZlQWNyb3NzRGV2aWNlIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSkge1xuICBjb25zdCBvcHRzID0ge1xuICAgIG92ZXJ3cml0ZSxcbiAgICBlcnJvck9uRXhpc3Q6IHRydWUsXG4gICAgcHJlc2VydmVUaW1lc3RhbXBzOiB0cnVlXG4gIH1cblxuICBhd2FpdCBjb3B5KHNyYywgZGVzdCwgb3B0cylcbiAgcmV0dXJuIHJlbW92ZShzcmMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbW92ZVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBjb3B5U3luYyA9IHJlcXVpcmUoJy4uL2NvcHknKS5jb3B5U3luY1xuY29uc3QgcmVtb3ZlU3luYyA9IHJlcXVpcmUoJy4uL3JlbW92ZScpLnJlbW92ZVN5bmNcbmNvbnN0IG1rZGlycFN5bmMgPSByZXF1aXJlKCcuLi9ta2RpcnMnKS5ta2RpcnBTeW5jXG5jb25zdCBzdGF0ID0gcmVxdWlyZSgnLi4vdXRpbC9zdGF0JylcblxuZnVuY3Rpb24gbW92ZVN5bmMgKHNyYywgZGVzdCwgb3B0cykge1xuICBvcHRzID0gb3B0cyB8fCB7fVxuICBjb25zdCBvdmVyd3JpdGUgPSBvcHRzLm92ZXJ3cml0ZSB8fCBvcHRzLmNsb2JiZXIgfHwgZmFsc2VcblxuICBjb25zdCB7IHNyY1N0YXQsIGlzQ2hhbmdpbmdDYXNlID0gZmFsc2UgfSA9IHN0YXQuY2hlY2tQYXRoc1N5bmMoc3JjLCBkZXN0LCAnbW92ZScsIG9wdHMpXG4gIHN0YXQuY2hlY2tQYXJlbnRQYXRoc1N5bmMoc3JjLCBzcmNTdGF0LCBkZXN0LCAnbW92ZScpXG4gIGlmICghaXNQYXJlbnRSb290KGRlc3QpKSBta2RpcnBTeW5jKHBhdGguZGlybmFtZShkZXN0KSlcbiAgcmV0dXJuIGRvUmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBpc0NoYW5naW5nQ2FzZSlcbn1cblxuZnVuY3Rpb24gaXNQYXJlbnRSb290IChkZXN0KSB7XG4gIGNvbnN0IHBhcmVudCA9IHBhdGguZGlybmFtZShkZXN0KVxuICBjb25zdCBwYXJzZWRQYXRoID0gcGF0aC5wYXJzZShwYXJlbnQpXG4gIHJldHVybiBwYXJzZWRQYXRoLnJvb3QgPT09IHBhcmVudFxufVxuXG5mdW5jdGlvbiBkb1JlbmFtZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGlzQ2hhbmdpbmdDYXNlKSB7XG4gIGlmIChpc0NoYW5naW5nQ2FzZSkgcmV0dXJuIHJlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSlcbiAgaWYgKG92ZXJ3cml0ZSkge1xuICAgIHJlbW92ZVN5bmMoZGVzdClcbiAgICByZXR1cm4gcmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlKVxuICB9XG4gIGlmIChmcy5leGlzdHNTeW5jKGRlc3QpKSB0aHJvdyBuZXcgRXJyb3IoJ2Rlc3QgYWxyZWFkeSBleGlzdHMuJylcbiAgcmV0dXJuIHJlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSlcbn1cblxuZnVuY3Rpb24gcmVuYW1lIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSkge1xuICB0cnkge1xuICAgIGZzLnJlbmFtZVN5bmMoc3JjLCBkZXN0KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLmNvZGUgIT09ICdFWERFVicpIHRocm93IGVyclxuICAgIHJldHVybiBtb3ZlQWNyb3NzRGV2aWNlKHNyYywgZGVzdCwgb3ZlcndyaXRlKVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdmVBY3Jvc3NEZXZpY2UgKHNyYywgZGVzdCwgb3ZlcndyaXRlKSB7XG4gIGNvbnN0IG9wdHMgPSB7XG4gICAgb3ZlcndyaXRlLFxuICAgIGVycm9yT25FeGlzdDogdHJ1ZSxcbiAgICBwcmVzZXJ2ZVRpbWVzdGFtcHM6IHRydWVcbiAgfVxuICBjb3B5U3luYyhzcmMsIGRlc3QsIG9wdHMpXG4gIHJldHVybiByZW1vdmVTeW5jKHNyYylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtb3ZlU3luY1xuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbW92ZTogdShyZXF1aXJlKCcuL21vdmUnKSksXG4gIG1vdmVTeW5jOiByZXF1aXJlKCcuL21vdmUtc3luYycpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gRXhwb3J0IHByb21pc2VpZmllZCBncmFjZWZ1bC1mczpcbiAgLi4ucmVxdWlyZSgnLi9mcycpLFxuICAvLyBFeHBvcnQgZXh0cmEgbWV0aG9kczpcbiAgLi4ucmVxdWlyZSgnLi9jb3B5JyksXG4gIC4uLnJlcXVpcmUoJy4vZW1wdHknKSxcbiAgLi4ucmVxdWlyZSgnLi9lbnN1cmUnKSxcbiAgLi4ucmVxdWlyZSgnLi9qc29uJyksXG4gIC4uLnJlcXVpcmUoJy4vbWtkaXJzJyksXG4gIC4uLnJlcXVpcmUoJy4vbW92ZScpLFxuICAuLi5yZXF1aXJlKCcuL291dHB1dC1maWxlJyksXG4gIC4uLnJlcXVpcmUoJy4vcGF0aC1leGlzdHMnKSxcbiAgLi4ucmVxdWlyZSgnLi9yZW1vdmUnKVxufVxuIiwKICAgICJpbXBvcnQgVE9NTCBmcm9tIFwiQGlhcm5hL3RvbWxcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBjd2QsIGVudiB9IGZyb20gXCJub2RlOnByb2Nlc3NcIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB0eXBlIHsgSW5jb21pbmdNZXNzYWdlLCBTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCJub2RlOmh0dHBcIjtcbmltcG9ydCB0eXBlIHsgUGx1Z2luT3B0aW9uIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgYWRhcHRlcnMgfSBmcm9tIFwiLi9hZGFwdGVycy9pbmRleC50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlVml0ZVBsdWdpbk1pbGtpbyhvcHRpb25zPzoge1xuICAgIG91dHB1dEZvcm1hdD86IFwiZXNtXCIgfCBcImNqc1wiO1xufSkge1xuICAgIGxldCBvdXREaXIgPSBcImRpc3RcIjtcblxuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IFwidml0ZS1wbHVnaW4tbWlsa2lvXCIsXG4gICAgICAgIGFzeW5jIGNvbmZpZ3VyZVNlcnZlcihzZXJ2ZXIpIHtcbiAgICAgICAgICAgIGxldCBtaWxraW9Qcm9taXNlOiBQcm9taXNlPGFueT4gfCBudWxsID0gbnVsbDtcblxuICAgICAgICAgICAgY29uc3QgZ2V0TWlsa2lvID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghbWlsa2lvUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICBtaWxraW9Qcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcCA9IGF3YWl0IHNlcnZlci5zc3JMb2FkTW9kdWxlKFwiaW5kZXgudHNcIiwgeyBmaXhTdGFja3RyYWNlOiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBhcHAuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0OiBOdW1iZXIoZW52Lk1JTEtJT19QT1JUKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wOiBCb29sZWFuKGVudi5DT09LQk9PS19CQVNFX1VSTCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hFbnY6IChrZXk6IHN0cmluZykgPT4gZW52W2tleV0gPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBtaWxraW9Qcm9taXNlO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgZW52TW9kZSA9IGVudi5DT09LQk9PS19NT0RFID8/IChlbnYuQ09PS0JPT0tfREVWRUxPUCA9PT0gXCJFTkFCTEVcIiA/IFwiZGV2ZWxvcG1lbnRcIiA6IFwicHJvZHVjdGlvblwiKTtcblxuICAgICAgICAgICAgLy8gQ2FjaGUgZm9yIHBhdGhBcnJheSB0byBhdm9pZCByZXBlYXRlZCBzcGxpdCgpIG9uIHNhbWUgcGF0aG5hbWVcbiAgICAgICAgICAgIGxldCBsYXN0UGF0aG5hbWUgPSBcIlwiO1xuICAgICAgICAgICAgbGV0IGxhc3RQYXRoQXJyYXk6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgICAgIHNlcnZlci5taWRkbGV3YXJlcy51c2UoYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWlsa2lvID0gYXdhaXQgZ2V0TWlsa2lvKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlYWQgYm9keSBjaHVua3NcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJvZHlCdWZmZXI6IEJ1ZmZlciB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYm9keUNodW5rczogQnVmZmVyW10gfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uKFwiZGF0YVwiLCAoY2h1bms6IEJ1ZmZlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHlCdWZmZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5QnVmZmVyID0gY2h1bms7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5Q2h1bmtzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlDaHVua3MgPSBbYm9keUJ1ZmZlciwgY2h1bmtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5QnVmZmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5Q2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXRob2QgPSByZXEubWV0aG9kID8/IFwiR0VUXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBVaW50OEFycmF5IHwgbnVsbCA9IGJvZHlDaHVua3MgPyBCdWZmZXIuY29uY2F0KGJvZHlDaHVua3MpIDogYm9keUJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHlUZXh0ID0gYm9keSA/IEJ1ZmZlci5mcm9tKGJvZHkpLnRvU3RyaW5nKFwidXRmLThcIikgOiBcIlwiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBCdWlsZCBmdWxsIFVSTCBmb3Igc3RhbmRhcmQgUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVxVXJsID0gcmVxLnVybCA/PyBcIi9cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3RvY29sID0gKHJlcSBhcyBhbnkpLmVuY3J5cHRlZCA/IFwiaHR0cHNcIiA6IFwiaHR0cFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaG9zdCA9IHJlcS5oZWFkZXJzLmhvc3QgPz8gXCJsb2NhbGhvc3RcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1bGxVcmwgPSBgJHtwcm90b2NvbH06Ly8ke2hvc3R9JHtyZXFVcmx9YDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVpbGQgc3RhbmRhcmQgSGVhZGVycyBmcm9tIE5vZGUuanMgaW5jb21pbmcgaGVhZGVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXEuaGVhZGVycykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZSkgaGVhZGVycy5hcHBlbmQoa2V5LCB2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBBYm9ydENvbnRyb2xsZXIgZm9yIHN0cmVhbSByZXF1ZXN0c1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTdHJlYW0gPSByZXEuaGVhZGVycy5hY2NlcHQ/LnN0YXJ0c1dpdGgoXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25hbCA9IGlzU3RyZWFtID8gKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMub24oXCJjbG9zZVwiLCAoKSA9PiB7IGFjLmFib3J0KCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhYy5zaWduYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSgpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDb25zdHJ1Y3Qgc3RhbmRhcmQgUmVxdWVzdCBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChmdWxsVXJsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogbWV0aG9kICE9PSBcIkdFVFwiICYmIG1ldGhvZCAhPT0gXCJIRUFEXCIgPyBib2R5IGFzIEJvZHlJbml0IHwgbnVsbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXR0YWNoIHByZS1yZWFkIGRhdGEgZm9yIEZhc3QgUGF0aCBvcHRpbWl6YXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHFJbmRleCA9IHJlcVVybC5pbmRleE9mKFwiP1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhuYW1lID0gcUluZGV4ID49IDAgPyByZXFVcmwuc3Vic3RyaW5nKDAsIHFJbmRleCkgOiByZXFVcmw7XG4gICAgICAgICAgICAgICAgICAgICAgICAocmVxdWVzdCBhcyBhbnkpLl9fYm9keVRleHQgPSBib2R5VGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0IGFzIGFueSkuX19wYXRobmFtZSA9IHBhdGhuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhdGhBcnJheTogc3RyaW5nW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGF0aG5hbWUgPT09IGxhc3RQYXRobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhBcnJheSA9IGxhc3RQYXRoQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhBcnJheSA9IHBhdGhuYW1lLmxlbmd0aCA+IDEgPyBwYXRobmFtZS5zdWJzdHJpbmcoMSkuc3BsaXQoXCIvXCIpIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFBhdGhuYW1lID0gcGF0aG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFBhdGhBcnJheSA9IHBhdGhBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0IGFzIGFueSkuX19wYXRoQXJyYXkgPSBwYXRoQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAocmVxdWVzdCBhcyBhbnkpLl9fb3JpZ2luID0gcmVxLmhlYWRlcnMub3JpZ2luID8/IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAocmVxdWVzdCBhcyBhbnkpLl9faXNBY3Rpb24gPSAhaXNTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbGtpby5saXN0ZW5lci5mZXRjaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY6IGVudixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZNb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1Jlc3BvbnNlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5fX3Jhd1Jlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy53cml0ZUhlYWQocmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzQm9keSA9IHJlc3BvbnNlLmJvZHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzQm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5lbmQoQnVmZmVyLmZyb20ocmVzQm9keSwgJ3V0Zi04JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc0JvZHkgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IEJ1ZmZlci5pc0J1ZmZlcihyZXNCb2R5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmVuZChyZXNCb2R5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNCb2R5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5lbmQoQnVmZmVyLmZyb20ocmVzQm9keSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc0JvZHkgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNCb2R5LmFycmF5QnVmZmVyKCkudGhlbigoYWI6IEFycmF5QnVmZmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmVuZChCdWZmZXIuZnJvbShhYikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzQm9keSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuZW5kKHJlc0JvZHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhbmRhcmQgUmVzcG9uc2Ugb2JqZWN0IHBhdGggKHN0cmVhbSwgT1BUSU9OUywgZXRjLilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzSGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHJlc3BvbnNlLmhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gcmVzSGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gcmVzSGVhZGVyc1trZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4aXN0aW5nKSkgZXhpc3RpbmcucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSByZXNIZWFkZXJzW2tleV0gPSBbZXhpc3RpbmcsIHZhbHVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzSGVhZGVyc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLndyaXRlSGVhZChyZXNwb25zZS5zdGF0dXMsIHJlc0hlYWRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuYm9keSAhPSBudWxsICYmIHJlcS5tZXRob2QgIT09IFwiSEVBRFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5LmdldFJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHVtcCA9ICgpOiBQcm9taXNlPHZvaWQ+ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlYWQoKS50aGVuKCh7IGRvbmUsIHZhbHVlIH06IHsgZG9uZTogYm9vbGVhbjsgdmFsdWU/OiBVaW50OEFycmF5IH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHsgcmVzLmVuZCgpOyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLndyaXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1bXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXMuaGVhZGVyc1NlbnQpIHJlcy53cml0ZUhlYWQoNTAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuZW5kKFwiSW50ZXJuYWwgU2VydmVyIEVycm9yXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikgc2VydmVyLnNzckZpeFN0YWNrdHJhY2UoZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGNvbmZpZyhjb25maWcsIHsgY29tbWFuZCB9KSB7XG4gICAgICAgICAgICBpZiAoY29tbWFuZCAhPT0gXCJidWlsZFwiKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0ID0gYXdhaXQgZ2V0Q29va2Jvb2tUb21sUHJvamVjdCgpO1xuXG4gICAgICAgICAgICAvLyBjb25maWcuYnVpbGRcbiAgICAgICAgICAgIGlmICghY29uZmlnLmJ1aWxkKSBjb25maWcuYnVpbGQgPSB7fTtcbiAgICAgICAgICAgIGNvbmZpZy5idWlsZC5zc3IgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLmJ1aWxkLnNvdXJjZW1hcCA9IFwiaW5saW5lXCI7XG4gICAgICAgICAgICBjb25maWcuYnVpbGQudGFyZ2V0ID0gXCJlczIwMjRcIjtcbiAgICAgICAgICAgIC8vIGNvbmZpZy5idWlsZC5yb2xsdXBPcHRpb25zXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5idWlsZC5yb2xsdXBPcHRpb25zKSBjb25maWcuYnVpbGQucm9sbHVwT3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgLy8gY29uZmlnLmJ1aWxkLnJvbGx1cE9wdGlvbnMub3V0cHV0XG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5idWlsZC5yb2xsdXBPcHRpb25zLm91dHB1dCkgY29uZmlnLmJ1aWxkLnJvbGx1cE9wdGlvbnMub3V0cHV0ID0ge307XG4gICAgICAgICAgICAvLyBjb25maWcuYnVpbGQucm9sbHVwT3B0aW9ucy5pbnB1dFxuICAgICAgICAgICAgY29uZmlnLmJ1aWxkLnJvbGx1cE9wdGlvbnMuaW5wdXQgPSB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IFwiLm1pbGtpby9ydW4udHNcIixcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmICghcHJvamVjdC5hZGFwdGVyKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZvcm1hdDogXCJlc21cIiB8IFwiY2pzXCIgPSBcImVzbVwiO1xuICAgICAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgIGxldCBtb2RlOiBcImNodW5rXCIgfCBcImJ1bmRsZVwiID0gXCJidW5kbGVcIjtcbiAgICAgICAgICAgICAgICBpZiAocHJvamVjdC5ydW50aW1lID09PSBcIm5vZGVcIikge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBvcHRpb25zPy5vdXRwdXRGb3JtYXQgPz8gXCJjanNcIjtcbiAgICAgICAgICAgICAgICAgICAgbW9kZSA9IFwiY2h1bmtcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByb2plY3QucnVudGltZSA9PT0gXCJkZW5vXCIgfHwgcHJvamVjdC5ydW50aW1lID09PSBcImJ1blwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IG9wdGlvbnM/Lm91dHB1dEZvcm1hdCA/PyBcImVzbVwiO1xuICAgICAgICAgICAgICAgICAgICBtb2RlID0gXCJjaHVua1wiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJydW50aW1lIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBvdXRwdXQgb2YgQXJyYXkuaXNBcnJheShjb25maWcuYnVpbGQucm9sbHVwT3B0aW9ucy5vdXRwdXQpID8gY29uZmlnLmJ1aWxkLnJvbGx1cE9wdGlvbnMub3V0cHV0IDogW2NvbmZpZy5idWlsZC5yb2xsdXBPcHRpb25zLm91dHB1dF0pIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmZvcm1hdCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnByZXNlcnZlTW9kdWxlcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFkYXB0ZXIgb2YgYWRhcHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFkYXB0ZXIubmFtZSA9PT0gcHJvamVjdC5hZGFwdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFkYXB0ZXIuYWRhcHRlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmJ1aWxkLnJvbGx1cE9wdGlvbnMuaW5wdXQgPSByZXN1bHQuaW5wdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuYnVpbGQucm9sbHVwT3B0aW9ucy5vdXRwdXQgPSByZXN1bHQub3V0cHV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFmaW5kKSB0aHJvdyBuZXcgRXJyb3IoYGFkYXB0ZXIgXCIke3Byb2plY3QuYWRhcHRlcn1cIiBub3QgZm91bmRgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY29uZmlnLnNlcnZlclxuICAgICAgICAgICAgaWYgKCFjb25maWcuc2VydmVyKSBjb25maWcuc2VydmVyID0ge307XG4gICAgICAgICAgICAvLyBjb25maWcuc2VydmVyLm1pZGRsZXdhcmVNb2RlXG4gICAgICAgICAgICBjb25maWcuc2VydmVyLmhtciA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBjb25maWcub3B0aW1pemVEZXBzXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5vcHRpbWl6ZURlcHMpIGNvbmZpZy5vcHRpbWl6ZURlcHMgPSB7fTtcbiAgICAgICAgICAgIGNvbmZpZy5vcHRpbWl6ZURlcHMubm9EaXNjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFjb25maWcub3B0aW1pemVEZXBzLmV4Y2x1ZGUpIGNvbmZpZy5vcHRpbWl6ZURlcHMuZXhjbHVkZSA9IFtdO1xuICAgICAgICAgICAgY29uZmlnLm9wdGltaXplRGVwcy5leGNsdWRlLnB1c2goXCJAZWxlY3RyaWMtc3FsL3BnbGl0ZVwiKTtcblxuICAgICAgICAgICAgLy8gY29uZmlnLndvcmtlclxuICAgICAgICAgICAgaWYgKCFjb25maWcud29ya2VyKSBjb25maWcud29ya2VyID0ge307XG4gICAgICAgICAgICBjb25maWcud29ya2VyLmZvcm1hdCA9IFwiZXNcIjtcblxuICAgICAgICAgICAgLy8gY29uZmlnLnJlc29sdmVcbiAgICAgICAgICAgIGlmICghY29uZmlnLnJlc29sdmUpIGNvbmZpZy5yZXNvbHZlID0ge307XG4gICAgICAgICAgICAvLyBjb25maWcucmVzb2x2ZS5hbGlhc1xuICAgICAgICAgICAgY29uZmlnLnJlc29sdmUuYWxpYXMgPSB7XG4gICAgICAgICAgICAgICAgLi4uY29uZmlnLnJlc29sdmUuYWxpYXMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBjb25maWcuc3NyXG4gICAgICAgICAgICBjb25maWcuc3NyID0ge1xuICAgICAgICAgICAgICAgIG5vRXh0ZXJuYWw6IGdldE5vRXh0ZXJuYWwoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgY29uZmlnUmVzb2x2ZWQocmVzb2x2ZWRDb25maWcpIHtcbiAgICAgICAgICAgIG91dERpciA9IHJlc29sdmVkQ29uZmlnLmJ1aWxkLm91dERpciB8fCBcImRpc3RcIjtcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyB3cml0ZUJ1bmRsZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbihjd2QoKSwgb3V0RGlyLCBcIi5naXRrZWVwXCIpO1xuICAgICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCBcIlwiLCBcInV0Zi04XCIpO1xuICAgICAgICB9LFxuICAgIH0gc2F0aXNmaWVzIFBsdWdpbk9wdGlvbjtcbn1cblxuZnVuY3Rpb24gZ2V0Tm9FeHRlcm5hbCgpIHtcbiAgICAvLyBidW5cbiAgICBjb25zdCBidW4gPSBbXCJidW5cIiwgL15idW46L107XG5cbiAgICAvLyBub2RlX21vZHVsZXNcbiAgICBsZXQgbm9kZU1vZHVsZXMgPSBbLi4uKGV4aXN0c1N5bmMoam9pbihjd2QoKSwgXCJub2RlX21vZHVsZXNcIikpID8gcmVhZGRpclN5bmMoam9pbihjd2QoKSwgXCJub2RlX21vZHVsZXNcIikpIDogW10pLCAuLi4oZXhpc3RzU3luYyhqb2luKGN3ZCgpLCBcIi4uXCIsIFwiLi5cIiwgXCJub2RlX21vZHVsZXNcIikpID8gcmVhZGRpclN5bmMoam9pbihjd2QoKSwgXCIuLlwiLCBcIi4uXCIsIFwibm9kZV9tb2R1bGVzXCIpKSA6IFtdKV0uZmlsdGVyKChkZXBlbmRlbmN5KSA9PiAhZGVwZW5kZW5jeS5zdGFydHNXaXRoKFwiLlwiKSk7XG4gICAgLy8gZWxlY3Ryb24gZXhjbHVkZVxuICAgIG5vZGVNb2R1bGVzID0gbm9kZU1vZHVsZXMuZmlsdGVyKChkZXBlbmRlbmN5KSA9PiBkZXBlbmRlbmN5ICE9PSBcImVsZWN0cm9uXCIpO1xuICAgIC8vIHN0YXJ0c1dpdGggQFxuICAgIGNvbnN0IG5vZGVNb2R1bGVzUmVnRXhwID0gbm9kZU1vZHVsZXMubWFwKChkZXBlbmRlbmN5KSA9PiAoZGVwZW5kZW5jeS5zdGFydHNXaXRoKFwiQFwiKSA/IG5ldyBSZWdFeHAoYF4ke2RlcGVuZGVuY3l9L2ApIDogZGVwZW5kZW5jeSkpO1xuXG4gICAgcmV0dXJuIFsuLi5idW4sIC4uLm5vZGVNb2R1bGVzUmVnRXhwXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0Q29va2Jvb2tUb21sUHJvamVjdCgpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGNvb2tib29rVG9tbFJhdyA9IGF3YWl0IHJlYWRGaWxlKGpvaW4oY3dkKCksIFwiLi5cIiwgXCIuLlwiLCBcImNvb2tib29rLnRvbWxcIiksIFwidXRmLThcIik7XG4gICAgY29uc3QgY29va2Jvb2tUb21sID0gVE9NTC5wYXJzZShjb29rYm9va1RvbWxSYXcpO1xuICAgIGxldCBwcm9qZWN0OiBhbnk7XG4gICAgZm9yIChjb25zdCBwcm9qZWN0TmFtZSBpbiBjb29rYm9va1RvbWwucHJvamVjdHMgYXMgYW55KSB7XG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9TZWxmQ29tcGFyZTogPGV4cGxhbmF0aW9uPlxuICAgICAgICBpZiAoam9pbihjd2QoKSkgIT09IGpvaW4oY3dkKCksIFwiLi5cIiwgcHJvamVjdE5hbWUpKSBjb250aW51ZTtcbiAgICAgICAgcHJvamVjdCA9IChjb29rYm9va1RvbWwucHJvamVjdHMgYXMgYW55KVtwcm9qZWN0TmFtZV07XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoIXByb2plY3QpIHRocm93IG5ldyBFcnJvcihcIlByb2plY3Qgbm90IGZvdW5kIGluIGNvb2tib29rLnRvbWxcIik7XG4gICAgcmV0dXJuIHByb2plY3Q7XG59XG4iLAogICAgImV4cG9ydCBjb25zdCBiYWxhbmNlZCA9IChhLCBiLCBzdHIpID0+IHtcbiAgICBjb25zdCBtYSA9IGEgaW5zdGFuY2VvZiBSZWdFeHAgPyBtYXliZU1hdGNoKGEsIHN0cikgOiBhO1xuICAgIGNvbnN0IG1iID0gYiBpbnN0YW5jZW9mIFJlZ0V4cCA/IG1heWJlTWF0Y2goYiwgc3RyKSA6IGI7XG4gICAgY29uc3QgciA9IG1hICE9PSBudWxsICYmIG1iICE9IG51bGwgJiYgcmFuZ2UobWEsIG1iLCBzdHIpO1xuICAgIHJldHVybiAociAmJiB7XG4gICAgICAgIHN0YXJ0OiByWzBdLFxuICAgICAgICBlbmQ6IHJbMV0sXG4gICAgICAgIHByZTogc3RyLnNsaWNlKDAsIHJbMF0pLFxuICAgICAgICBib2R5OiBzdHIuc2xpY2UoclswXSArIG1hLmxlbmd0aCwgclsxXSksXG4gICAgICAgIHBvc3Q6IHN0ci5zbGljZShyWzFdICsgbWIubGVuZ3RoKSxcbiAgICB9KTtcbn07XG5jb25zdCBtYXliZU1hdGNoID0gKHJlZywgc3RyKSA9PiB7XG4gICAgY29uc3QgbSA9IHN0ci5tYXRjaChyZWcpO1xuICAgIHJldHVybiBtID8gbVswXSA6IG51bGw7XG59O1xuZXhwb3J0IGNvbnN0IHJhbmdlID0gKGEsIGIsIHN0cikgPT4ge1xuICAgIGxldCBiZWdzLCBiZWcsIGxlZnQsIHJpZ2h0ID0gdW5kZWZpbmVkLCByZXN1bHQ7XG4gICAgbGV0IGFpID0gc3RyLmluZGV4T2YoYSk7XG4gICAgbGV0IGJpID0gc3RyLmluZGV4T2YoYiwgYWkgKyAxKTtcbiAgICBsZXQgaSA9IGFpO1xuICAgIGlmIChhaSA+PSAwICYmIGJpID4gMCkge1xuICAgICAgICBpZiAoYSA9PT0gYikge1xuICAgICAgICAgICAgcmV0dXJuIFthaSwgYmldO1xuICAgICAgICB9XG4gICAgICAgIGJlZ3MgPSBbXTtcbiAgICAgICAgbGVmdCA9IHN0ci5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpID49IDAgJiYgIXJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGkgPT09IGFpKSB7XG4gICAgICAgICAgICAgICAgYmVncy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIGFpID0gc3RyLmluZGV4T2YoYSwgaSArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmVncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByID0gYmVncy5wb3AoKTtcbiAgICAgICAgICAgICAgICBpZiAociAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbciwgYmldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYmVnID0gYmVncy5wb3AoKTtcbiAgICAgICAgICAgICAgICBpZiAoYmVnICE9PSB1bmRlZmluZWQgJiYgYmVnIDwgbGVmdCkge1xuICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gYmVnO1xuICAgICAgICAgICAgICAgICAgICByaWdodCA9IGJpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBiaSA9IHN0ci5pbmRleE9mKGIsIGkgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkgPSBhaSA8IGJpICYmIGFpID49IDAgPyBhaSA6IGJpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiZWdzLmxlbmd0aCAmJiByaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBbbGVmdCwgcmlnaHRdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJpbXBvcnQgeyBiYWxhbmNlZCB9IGZyb20gJ2JhbGFuY2VkLW1hdGNoJztcbmNvbnN0IGVzY1NsYXNoID0gJ1xcMFNMQVNIJyArIE1hdGgucmFuZG9tKCkgKyAnXFwwJztcbmNvbnN0IGVzY09wZW4gPSAnXFwwT1BFTicgKyBNYXRoLnJhbmRvbSgpICsgJ1xcMCc7XG5jb25zdCBlc2NDbG9zZSA9ICdcXDBDTE9TRScgKyBNYXRoLnJhbmRvbSgpICsgJ1xcMCc7XG5jb25zdCBlc2NDb21tYSA9ICdcXDBDT01NQScgKyBNYXRoLnJhbmRvbSgpICsgJ1xcMCc7XG5jb25zdCBlc2NQZXJpb2QgPSAnXFwwUEVSSU9EJyArIE1hdGgucmFuZG9tKCkgKyAnXFwwJztcbmNvbnN0IGVzY1NsYXNoUGF0dGVybiA9IG5ldyBSZWdFeHAoZXNjU2xhc2gsICdnJyk7XG5jb25zdCBlc2NPcGVuUGF0dGVybiA9IG5ldyBSZWdFeHAoZXNjT3BlbiwgJ2cnKTtcbmNvbnN0IGVzY0Nsb3NlUGF0dGVybiA9IG5ldyBSZWdFeHAoZXNjQ2xvc2UsICdnJyk7XG5jb25zdCBlc2NDb21tYVBhdHRlcm4gPSBuZXcgUmVnRXhwKGVzY0NvbW1hLCAnZycpO1xuY29uc3QgZXNjUGVyaW9kUGF0dGVybiA9IG5ldyBSZWdFeHAoZXNjUGVyaW9kLCAnZycpO1xuY29uc3Qgc2xhc2hQYXR0ZXJuID0gL1xcXFxcXFxcL2c7XG5jb25zdCBvcGVuUGF0dGVybiA9IC9cXFxcey9nO1xuY29uc3QgY2xvc2VQYXR0ZXJuID0gL1xcXFx9L2c7XG5jb25zdCBjb21tYVBhdHRlcm4gPSAvXFxcXCwvZztcbmNvbnN0IHBlcmlvZFBhdHRlcm4gPSAvXFxcXFxcLi9nO1xuZXhwb3J0IGNvbnN0IEVYUEFOU0lPTl9NQVggPSAxMDBfMDAwO1xuZnVuY3Rpb24gbnVtZXJpYyhzdHIpIHtcbiAgICByZXR1cm4gIWlzTmFOKHN0cikgPyBwYXJzZUludChzdHIsIDEwKSA6IHN0ci5jaGFyQ29kZUF0KDApO1xufVxuZnVuY3Rpb24gZXNjYXBlQnJhY2VzKHN0cikge1xuICAgIHJldHVybiBzdHJcbiAgICAgICAgLnJlcGxhY2Uoc2xhc2hQYXR0ZXJuLCBlc2NTbGFzaClcbiAgICAgICAgLnJlcGxhY2Uob3BlblBhdHRlcm4sIGVzY09wZW4pXG4gICAgICAgIC5yZXBsYWNlKGNsb3NlUGF0dGVybiwgZXNjQ2xvc2UpXG4gICAgICAgIC5yZXBsYWNlKGNvbW1hUGF0dGVybiwgZXNjQ29tbWEpXG4gICAgICAgIC5yZXBsYWNlKHBlcmlvZFBhdHRlcm4sIGVzY1BlcmlvZCk7XG59XG5mdW5jdGlvbiB1bmVzY2FwZUJyYWNlcyhzdHIpIHtcbiAgICByZXR1cm4gc3RyXG4gICAgICAgIC5yZXBsYWNlKGVzY1NsYXNoUGF0dGVybiwgJ1xcXFwnKVxuICAgICAgICAucmVwbGFjZShlc2NPcGVuUGF0dGVybiwgJ3snKVxuICAgICAgICAucmVwbGFjZShlc2NDbG9zZVBhdHRlcm4sICd9JylcbiAgICAgICAgLnJlcGxhY2UoZXNjQ29tbWFQYXR0ZXJuLCAnLCcpXG4gICAgICAgIC5yZXBsYWNlKGVzY1BlcmlvZFBhdHRlcm4sICcuJyk7XG59XG4vKipcbiAqIEJhc2ljYWxseSBqdXN0IHN0ci5zcGxpdChcIixcIiksIGJ1dCBoYW5kbGluZyBjYXNlc1xuICogd2hlcmUgd2UgaGF2ZSBuZXN0ZWQgYnJhY2VkIHNlY3Rpb25zLCB3aGljaCBzaG91bGQgYmVcbiAqIHRyZWF0ZWQgYXMgaW5kaXZpZHVhbCBtZW1iZXJzLCBsaWtlIHthLHtiLGN9LGR9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ29tbWFQYXJ0cyhzdHIpIHtcbiAgICBpZiAoIXN0cikge1xuICAgICAgICByZXR1cm4gWycnXTtcbiAgICB9XG4gICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICBjb25zdCBtID0gYmFsYW5jZWQoJ3snLCAnfScsIHN0cik7XG4gICAgaWYgKCFtKSB7XG4gICAgICAgIHJldHVybiBzdHIuc3BsaXQoJywnKTtcbiAgICB9XG4gICAgY29uc3QgeyBwcmUsIGJvZHksIHBvc3QgfSA9IG07XG4gICAgY29uc3QgcCA9IHByZS5zcGxpdCgnLCcpO1xuICAgIHBbcC5sZW5ndGggLSAxXSArPSAneycgKyBib2R5ICsgJ30nO1xuICAgIGNvbnN0IHBvc3RQYXJ0cyA9IHBhcnNlQ29tbWFQYXJ0cyhwb3N0KTtcbiAgICBpZiAocG9zdC5sZW5ndGgpIHtcbiAgICAgICAgO1xuICAgICAgICBwW3AubGVuZ3RoIC0gMV0gKz0gcG9zdFBhcnRzLnNoaWZ0KCk7XG4gICAgICAgIHAucHVzaC5hcHBseShwLCBwb3N0UGFydHMpO1xuICAgIH1cbiAgICBwYXJ0cy5wdXNoLmFwcGx5KHBhcnRzLCBwKTtcbiAgICByZXR1cm4gcGFydHM7XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kKHN0ciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFzdHIpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCB7IG1heCA9IEVYUEFOU0lPTl9NQVggfSA9IG9wdGlvbnM7XG4gICAgLy8gSSBkb24ndCBrbm93IHdoeSBCYXNoIDQuMyBkb2VzIHRoaXMsIGJ1dCBpdCBkb2VzLlxuICAgIC8vIEFueXRoaW5nIHN0YXJ0aW5nIHdpdGgge30gd2lsbCBoYXZlIHRoZSBmaXJzdCB0d28gYnl0ZXMgcHJlc2VydmVkXG4gICAgLy8gYnV0ICpvbmx5KiBhdCB0aGUgdG9wIGxldmVsLCBzbyB7fSxhfWIgd2lsbCBub3QgZXhwYW5kIHRvIGFueXRoaW5nLFxuICAgIC8vIGJ1dCBhe30sYn1jIHdpbGwgYmUgZXhwYW5kZWQgdG8gW2F9YyxhYmNdLlxuICAgIC8vIE9uZSBjb3VsZCBhcmd1ZSB0aGF0IHRoaXMgaXMgYSBidWcgaW4gQmFzaCwgYnV0IHNpbmNlIHRoZSBnb2FsIG9mXG4gICAgLy8gdGhpcyBtb2R1bGUgaXMgdG8gbWF0Y2ggQmFzaCdzIHJ1bGVzLCB3ZSBlc2NhcGUgYSBsZWFkaW5nIHt9XG4gICAgaWYgKHN0ci5zbGljZSgwLCAyKSA9PT0gJ3t9Jykge1xuICAgICAgICBzdHIgPSAnXFxcXHtcXFxcfScgKyBzdHIuc2xpY2UoMik7XG4gICAgfVxuICAgIHJldHVybiBleHBhbmRfKGVzY2FwZUJyYWNlcyhzdHIpLCBtYXgsIHRydWUpLm1hcCh1bmVzY2FwZUJyYWNlcyk7XG59XG5mdW5jdGlvbiBlbWJyYWNlKHN0cikge1xuICAgIHJldHVybiAneycgKyBzdHIgKyAnfSc7XG59XG5mdW5jdGlvbiBpc1BhZGRlZChlbCkge1xuICAgIHJldHVybiAvXi0/MFxcZC8udGVzdChlbCk7XG59XG5mdW5jdGlvbiBsdGUoaSwgeSkge1xuICAgIHJldHVybiBpIDw9IHk7XG59XG5mdW5jdGlvbiBndGUoaSwgeSkge1xuICAgIHJldHVybiBpID49IHk7XG59XG5mdW5jdGlvbiBleHBhbmRfKHN0ciwgbWF4LCBpc1RvcCkge1xuICAgIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gICAgY29uc3QgZXhwYW5zaW9ucyA9IFtdO1xuICAgIGNvbnN0IG0gPSBiYWxhbmNlZCgneycsICd9Jywgc3RyKTtcbiAgICBpZiAoIW0pXG4gICAgICAgIHJldHVybiBbc3RyXTtcbiAgICAvLyBubyBuZWVkIHRvIGV4cGFuZCBwcmUsIHNpbmNlIGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgZnJlZSBvZiBicmFjZS1zZXRzXG4gICAgY29uc3QgcHJlID0gbS5wcmU7XG4gICAgY29uc3QgcG9zdCA9IG0ucG9zdC5sZW5ndGggPyBleHBhbmRfKG0ucG9zdCwgbWF4LCBmYWxzZSkgOiBbJyddO1xuICAgIGlmICgvXFwkJC8udGVzdChtLnByZSkpIHtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBwb3N0Lmxlbmd0aCAmJiBrIDwgbWF4OyBrKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvbiA9IHByZSArICd7JyArIG0uYm9keSArICd9JyArIHBvc3Rba107XG4gICAgICAgICAgICBleHBhbnNpb25zLnB1c2goZXhwYW5zaW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgaXNOdW1lcmljU2VxdWVuY2UgPSAvXi0/XFxkK1xcLlxcLi0/XFxkKyg/OlxcLlxcLi0/XFxkKyk/JC8udGVzdChtLmJvZHkpO1xuICAgICAgICBjb25zdCBpc0FscGhhU2VxdWVuY2UgPSAvXlthLXpBLVpdXFwuXFwuW2EtekEtWl0oPzpcXC5cXC4tP1xcZCspPyQvLnRlc3QobS5ib2R5KTtcbiAgICAgICAgY29uc3QgaXNTZXF1ZW5jZSA9IGlzTnVtZXJpY1NlcXVlbmNlIHx8IGlzQWxwaGFTZXF1ZW5jZTtcbiAgICAgICAgY29uc3QgaXNPcHRpb25zID0gbS5ib2R5LmluZGV4T2YoJywnKSA+PSAwO1xuICAgICAgICBpZiAoIWlzU2VxdWVuY2UgJiYgIWlzT3B0aW9ucykge1xuICAgICAgICAgICAgLy8ge2F9LGJ9XG4gICAgICAgICAgICBpZiAobS5wb3N0Lm1hdGNoKC8sKD8hLCkuKlxcfS8pKSB7XG4gICAgICAgICAgICAgICAgc3RyID0gbS5wcmUgKyAneycgKyBtLmJvZHkgKyBlc2NDbG9zZSArIG0ucG9zdDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwYW5kXyhzdHIsIG1heCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW3N0cl07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG47XG4gICAgICAgIGlmIChpc1NlcXVlbmNlKSB7XG4gICAgICAgICAgICBuID0gbS5ib2R5LnNwbGl0KC9cXC5cXC4vKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG4gPSBwYXJzZUNvbW1hUGFydHMobS5ib2R5KTtcbiAgICAgICAgICAgIGlmIChuLmxlbmd0aCA9PT0gMSAmJiBuWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyB4e3thLGJ9fXkgPT0+IHh7YX15IHh7Yn15XG4gICAgICAgICAgICAgICAgbiA9IGV4cGFuZF8oblswXSwgbWF4LCBmYWxzZSkubWFwKGVtYnJhY2UpO1xuICAgICAgICAgICAgICAgIC8vWFhYIGlzIHRoaXMgbmVjZXNzYXJ5PyBDYW4ndCBzZWVtIHRvIGhpdCBpdCBpbiB0ZXN0cy5cbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICBpZiAobi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc3QubWFwKHAgPT4gbS5wcmUgKyBuWzBdICsgcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgbiBpcyB0aGUgcGFydHMsIGFuZCB3ZSBrbm93IGl0J3Mgbm90IGEgY29tbWEgc2V0XG4gICAgICAgIC8vIHdpdGggYSBzaW5nbGUgZW50cnkuXG4gICAgICAgIGxldCBOO1xuICAgICAgICBpZiAoaXNTZXF1ZW5jZSAmJiBuWzBdICE9PSB1bmRlZmluZWQgJiYgblsxXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCB4ID0gbnVtZXJpYyhuWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBudW1lcmljKG5bMV0pO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heChuWzBdLmxlbmd0aCwgblsxXS5sZW5ndGgpO1xuICAgICAgICAgICAgbGV0IGluY3IgPSBuLmxlbmd0aCA9PT0gMyAmJiBuWzJdICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgICAgIE1hdGgubWF4KE1hdGguYWJzKG51bWVyaWMoblsyXSkpLCAxKVxuICAgICAgICAgICAgICAgIDogMTtcbiAgICAgICAgICAgIGxldCB0ZXN0ID0gbHRlO1xuICAgICAgICAgICAgY29uc3QgcmV2ZXJzZSA9IHkgPCB4O1xuICAgICAgICAgICAgaWYgKHJldmVyc2UpIHtcbiAgICAgICAgICAgICAgICBpbmNyICo9IC0xO1xuICAgICAgICAgICAgICAgIHRlc3QgPSBndGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYWQgPSBuLnNvbWUoaXNQYWRkZWQpO1xuICAgICAgICAgICAgTiA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHg7IHRlc3QoaSwgeSkgJiYgTi5sZW5ndGggPCBtYXg7IGkgKz0gaW5jcikge1xuICAgICAgICAgICAgICAgIGxldCBjO1xuICAgICAgICAgICAgICAgIGlmIChpc0FscGhhU2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgYyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYyA9IFN0cmluZyhpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVlZCA9IHdpZHRoIC0gYy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmVlZCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB6ID0gbmV3IEFycmF5KG5lZWQgKyAxKS5qb2luKCcwJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAnLScgKyB6ICsgYy5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSB6ICsgYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgTi5wdXNoKGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgTiA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgTi5wdXNoLmFwcGx5KE4sIGV4cGFuZF8obltqXSwgbWF4LCBmYWxzZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgTi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBwb3N0Lmxlbmd0aCAmJiBleHBhbnNpb25zLmxlbmd0aCA8IG1heDsgaysrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwYW5zaW9uID0gcHJlICsgTltqXSArIHBvc3Rba107XG4gICAgICAgICAgICAgICAgaWYgKCFpc1RvcCB8fCBpc1NlcXVlbmNlIHx8IGV4cGFuc2lvbikge1xuICAgICAgICAgICAgICAgICAgICBleHBhbnNpb25zLnB1c2goZXhwYW5zaW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV4cGFuc2lvbnM7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgImNvbnN0IE1BWF9QQVRURVJOX0xFTkdUSCA9IDEwMjQgKiA2NDtcbmV4cG9ydCBjb25zdCBhc3NlcnRWYWxpZFBhdHRlcm4gPSAocGF0dGVybikgPT4ge1xuICAgIGlmICh0eXBlb2YgcGF0dGVybiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBwYXR0ZXJuJyk7XG4gICAgfVxuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA+IE1BWF9QQVRURVJOX0xFTkdUSCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXR0ZXJuIGlzIHRvbyBsb25nJyk7XG4gICAgfVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFzc2VydC12YWxpZC1wYXR0ZXJuLmpzLm1hcCIsCiAgICAiLy8gdHJhbnNsYXRlIHRoZSB2YXJpb3VzIHBvc2l4IGNoYXJhY3RlciBjbGFzc2VzIGludG8gdW5pY29kZSBwcm9wZXJ0aWVzXG4vLyB0aGlzIHdvcmtzIGFjcm9zcyBhbGwgdW5pY29kZSBsb2NhbGVzXG4vLyB7IDxwb3NpeCBjbGFzcz46IFs8dHJhbnNsYXRpb24+LCAvdSBmbGFnIHJlcXVpcmVkLCBuZWdhdGVkXVxuY29uc3QgcG9zaXhDbGFzc2VzID0ge1xuICAgICdbOmFsbnVtOl0nOiBbJ1xcXFxwe0x9XFxcXHB7Tmx9XFxcXHB7TmR9JywgdHJ1ZV0sXG4gICAgJ1s6YWxwaGE6XSc6IFsnXFxcXHB7TH1cXFxccHtObH0nLCB0cnVlXSxcbiAgICAnWzphc2NpaTpdJzogWydcXFxceCcgKyAnMDAtXFxcXHgnICsgJzdmJywgZmFsc2VdLFxuICAgICdbOmJsYW5rOl0nOiBbJ1xcXFxwe1pzfVxcXFx0JywgdHJ1ZV0sXG4gICAgJ1s6Y250cmw6XSc6IFsnXFxcXHB7Q2N9JywgdHJ1ZV0sXG4gICAgJ1s6ZGlnaXQ6XSc6IFsnXFxcXHB7TmR9JywgdHJ1ZV0sXG4gICAgJ1s6Z3JhcGg6XSc6IFsnXFxcXHB7Wn1cXFxccHtDfScsIHRydWUsIHRydWVdLFxuICAgICdbOmxvd2VyOl0nOiBbJ1xcXFxwe0xsfScsIHRydWVdLFxuICAgICdbOnByaW50Ol0nOiBbJ1xcXFxwe0N9JywgdHJ1ZV0sXG4gICAgJ1s6cHVuY3Q6XSc6IFsnXFxcXHB7UH0nLCB0cnVlXSxcbiAgICAnWzpzcGFjZTpdJzogWydcXFxccHtafVxcXFx0XFxcXHJcXFxcblxcXFx2XFxcXGYnLCB0cnVlXSxcbiAgICAnWzp1cHBlcjpdJzogWydcXFxccHtMdX0nLCB0cnVlXSxcbiAgICAnWzp3b3JkOl0nOiBbJ1xcXFxwe0x9XFxcXHB7Tmx9XFxcXHB7TmR9XFxcXHB7UGN9JywgdHJ1ZV0sXG4gICAgJ1s6eGRpZ2l0Ol0nOiBbJ0EtRmEtZjAtOScsIGZhbHNlXSxcbn07XG4vLyBvbmx5IG5lZWQgdG8gZXNjYXBlIGEgZmV3IHRoaW5ncyBpbnNpZGUgb2YgYnJhY2UgZXhwcmVzc2lvbnNcbi8vIGVzY2FwZXM6IFsgXFwgXSAtXG5jb25zdCBicmFjZUVzY2FwZSA9IChzKSA9PiBzLnJlcGxhY2UoL1tbXFxdXFxcXC1dL2csICdcXFxcJCYnKTtcbi8vIGVzY2FwZSBhbGwgcmVnZXhwIG1hZ2ljIGNoYXJhY3RlcnNcbmNvbnN0IHJlZ2V4cEVzY2FwZSA9IChzKSA9PiBzLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uLFxcXFxeJHwjXFxzXS9nLCAnXFxcXCQmJyk7XG4vLyBldmVyeXRoaW5nIGhhcyBhbHJlYWR5IGJlZW4gZXNjYXBlZCwgd2UganVzdCBoYXZlIHRvIGpvaW5cbmNvbnN0IHJhbmdlc1RvU3RyaW5nID0gKHJhbmdlcykgPT4gcmFuZ2VzLmpvaW4oJycpO1xuLy8gdGFrZXMgYSBnbG9iIHN0cmluZyBhdCBhIHBvc2l4IGJyYWNlIGV4cHJlc3Npb24sIGFuZCByZXR1cm5zXG4vLyBhbiBlcXVpdmFsZW50IHJlZ3VsYXIgZXhwcmVzc2lvbiBzb3VyY2UsIGFuZCBib29sZWFuIGluZGljYXRpbmdcbi8vIHdoZXRoZXIgdGhlIC91IGZsYWcgbmVlZHMgdG8gYmUgYXBwbGllZCwgYW5kIHRoZSBudW1iZXIgb2YgY2hhcnNcbi8vIGNvbnN1bWVkIHRvIHBhcnNlIHRoZSBjaGFyYWN0ZXIgY2xhc3MuXG4vLyBUaGlzIGFsc28gcmVtb3ZlcyBvdXQgb2Ygb3JkZXIgcmFuZ2VzLCBhbmQgcmV0dXJucyAoJC4pIGlmIHRoZVxuLy8gZW50aXJlIGNsYXNzIGp1c3Qgbm8gZ29vZC5cbmV4cG9ydCBjb25zdCBwYXJzZUNsYXNzID0gKGdsb2IsIHBvc2l0aW9uKSA9PiB7XG4gICAgY29uc3QgcG9zID0gcG9zaXRpb247XG4gICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgaWYgKGdsb2IuY2hhckF0KHBvcykgIT09ICdbJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbiBhIGJyYWNlIGV4cHJlc3Npb24nKTtcbiAgICB9XG4gICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICBjb25zdCByYW5nZXMgPSBbXTtcbiAgICBjb25zdCBuZWdzID0gW107XG4gICAgbGV0IGkgPSBwb3MgKyAxO1xuICAgIGxldCBzYXdTdGFydCA9IGZhbHNlO1xuICAgIGxldCB1ZmxhZyA9IGZhbHNlO1xuICAgIGxldCBlc2NhcGluZyA9IGZhbHNlO1xuICAgIGxldCBuZWdhdGUgPSBmYWxzZTtcbiAgICBsZXQgZW5kUG9zID0gcG9zO1xuICAgIGxldCByYW5nZVN0YXJ0ID0gJyc7XG4gICAgV0hJTEU6IHdoaWxlIChpIDwgZ2xvYi5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYyA9IGdsb2IuY2hhckF0KGkpO1xuICAgICAgICBpZiAoKGMgPT09ICchJyB8fCBjID09PSAnXicpICYmIGkgPT09IHBvcyArIDEpIHtcbiAgICAgICAgICAgIG5lZ2F0ZSA9IHRydWU7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gJ10nICYmIHNhd1N0YXJ0ICYmICFlc2NhcGluZykge1xuICAgICAgICAgICAgZW5kUG9zID0gaSArIDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzYXdTdGFydCA9IHRydWU7XG4gICAgICAgIGlmIChjID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgIGlmICghZXNjYXBpbmcpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXNjYXBlZCBcXCBjaGFyLCBmYWxsIHRocm91Z2ggYW5kIHRyZWF0IGxpa2Ugbm9ybWFsIGNoYXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gJ1snICYmICFlc2NhcGluZykge1xuICAgICAgICAgICAgLy8gZWl0aGVyIGEgcG9zaXggY2xhc3MsIGEgY29sbGF0aW9uIGVxdWl2YWxlbnQsIG9yIGp1c3QgYSBbXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtjbHMsIFt1bmlwLCB1LCBuZWddXSBvZiBPYmplY3QuZW50cmllcyhwb3NpeENsYXNzZXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdsb2Iuc3RhcnRzV2l0aChjbHMsIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGludmFsaWQsIFthLVtdIGlzIGZpbmUsIGJ1dCBub3QgW2EtWzphbHBoYV1dXG4gICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyckLicsIGZhbHNlLCBnbG9iLmxlbmd0aCAtIHBvcywgdHJ1ZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaSArPSBjbHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmVnKVxuICAgICAgICAgICAgICAgICAgICAgICAgbmVncy5wdXNoKHVuaXApO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMucHVzaCh1bmlwKTtcbiAgICAgICAgICAgICAgICAgICAgdWZsYWcgPSB1ZmxhZyB8fCB1O1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBXSElMRTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm93IGl0J3MganVzdCBhIG5vcm1hbCBjaGFyYWN0ZXIsIGVmZmVjdGl2ZWx5XG4gICAgICAgIGVzY2FwaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChyYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAvLyB0aHJvdyB0aGlzIHJhbmdlIGF3YXkgaWYgaXQncyBub3QgdmFsaWQsIGJ1dCBvdGhlcnNcbiAgICAgICAgICAgIC8vIGNhbiBzdGlsbCBtYXRjaC5cbiAgICAgICAgICAgIGlmIChjID4gcmFuZ2VTdGFydCkge1xuICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKGJyYWNlRXNjYXBlKHJhbmdlU3RhcnQpICsgJy0nICsgYnJhY2VFc2NhcGUoYykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gcmFuZ2VTdGFydCkge1xuICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKGJyYWNlRXNjYXBlKGMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJhbmdlU3RhcnQgPSAnJztcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdyBtaWdodCBiZSB0aGUgc3RhcnQgb2YgYSByYW5nZS5cbiAgICAgICAgLy8gY2FuIGJlIGVpdGhlciBjLWQgb3IgYy1dIG9yIGM8bW9yZS4uLj5dIG9yIGNdIGF0IHRoaXMgcG9pbnRcbiAgICAgICAgaWYgKGdsb2Iuc3RhcnRzV2l0aCgnLV0nLCBpICsgMSkpIHtcbiAgICAgICAgICAgIHJhbmdlcy5wdXNoKGJyYWNlRXNjYXBlKGMgKyAnLScpKTtcbiAgICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnbG9iLnN0YXJ0c1dpdGgoJy0nLCBpICsgMSkpIHtcbiAgICAgICAgICAgIHJhbmdlU3RhcnQgPSBjO1xuICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm90IHRoZSBzdGFydCBvZiBhIHJhbmdlLCBqdXN0IGEgc2luZ2xlIGNoYXJhY3RlclxuICAgICAgICByYW5nZXMucHVzaChicmFjZUVzY2FwZShjKSk7XG4gICAgICAgIGkrKztcbiAgICB9XG4gICAgaWYgKGVuZFBvcyA8IGkpIHtcbiAgICAgICAgLy8gZGlkbid0IHNlZSB0aGUgZW5kIG9mIHRoZSBjbGFzcywgbm90IGEgdmFsaWQgY2xhc3MsXG4gICAgICAgIC8vIGJ1dCBtaWdodCBzdGlsbCBiZSB2YWxpZCBhcyBhIGxpdGVyYWwgbWF0Y2guXG4gICAgICAgIHJldHVybiBbJycsIGZhbHNlLCAwLCBmYWxzZV07XG4gICAgfVxuICAgIC8vIGlmIHdlIGdvdCBubyByYW5nZXMgYW5kIG5vIG5lZ2F0ZXMsIHRoZW4gd2UgaGF2ZSBhIHJhbmdlIHRoYXRcbiAgICAvLyBjYW5ub3QgcG9zc2libHkgbWF0Y2ggYW55dGhpbmcsIGFuZCB0aGF0IHBvaXNvbnMgdGhlIHdob2xlIGdsb2JcbiAgICBpZiAoIXJhbmdlcy5sZW5ndGggJiYgIW5lZ3MubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbJyQuJywgZmFsc2UsIGdsb2IubGVuZ3RoIC0gcG9zLCB0cnVlXTtcbiAgICB9XG4gICAgLy8gaWYgd2UgZ290IG9uZSBwb3NpdGl2ZSByYW5nZSwgYW5kIGl0J3MgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGVuIHRoYXQnc1xuICAgIC8vIG5vdCBhY3R1YWxseSBhIG1hZ2ljIHBhdHRlcm4sIGl0J3MganVzdCB0aGF0IG9uZSBsaXRlcmFsIGNoYXJhY3Rlci5cbiAgICAvLyB3ZSBzaG91bGQgbm90IHRyZWF0IHRoYXQgYXMgXCJtYWdpY1wiLCB3ZSBzaG91bGQganVzdCByZXR1cm4gdGhlIGxpdGVyYWxcbiAgICAvLyBjaGFyYWN0ZXIuIFtfXSBpcyBhIHBlcmZlY3RseSB2YWxpZCB3YXkgdG8gZXNjYXBlIGdsb2IgbWFnaWMgY2hhcnMuXG4gICAgaWYgKG5lZ3MubGVuZ3RoID09PSAwICYmXG4gICAgICAgIHJhbmdlcy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgL15cXFxcPy4kLy50ZXN0KHJhbmdlc1swXSkgJiZcbiAgICAgICAgIW5lZ2F0ZSkge1xuICAgICAgICBjb25zdCByID0gcmFuZ2VzWzBdLmxlbmd0aCA9PT0gMiA/IHJhbmdlc1swXS5zbGljZSgtMSkgOiByYW5nZXNbMF07XG4gICAgICAgIHJldHVybiBbcmVnZXhwRXNjYXBlKHIpLCBmYWxzZSwgZW5kUG9zIC0gcG9zLCBmYWxzZV07XG4gICAgfVxuICAgIGNvbnN0IHNyYW5nZXMgPSAnWycgKyAobmVnYXRlID8gJ14nIDogJycpICsgcmFuZ2VzVG9TdHJpbmcocmFuZ2VzKSArICddJztcbiAgICBjb25zdCBzbmVncyA9ICdbJyArIChuZWdhdGUgPyAnJyA6ICdeJykgKyByYW5nZXNUb1N0cmluZyhuZWdzKSArICddJztcbiAgICBjb25zdCBjb21iID0gcmFuZ2VzLmxlbmd0aCAmJiBuZWdzLmxlbmd0aCA/ICcoJyArIHNyYW5nZXMgKyAnfCcgKyBzbmVncyArICcpJ1xuICAgICAgICA6IHJhbmdlcy5sZW5ndGggPyBzcmFuZ2VzXG4gICAgICAgICAgICA6IHNuZWdzO1xuICAgIHJldHVybiBbY29tYiwgdWZsYWcsIGVuZFBvcyAtIHBvcywgdHJ1ZV07XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnJhY2UtZXhwcmVzc2lvbnMuanMubWFwIiwKICAgICIvKipcbiAqIFVuLWVzY2FwZSBhIHN0cmluZyB0aGF0IGhhcyBiZWVuIGVzY2FwZWQgd2l0aCB7QGxpbmsgZXNjYXBlfS5cbiAqXG4gKiBJZiB0aGUge0BsaW5rIE1pbmltYXRjaE9wdGlvbnMud2luZG93c1BhdGhzTm9Fc2NhcGV9IG9wdGlvbiBpcyB1c2VkLCB0aGVuXG4gKiBzcXVhcmUtYnJhY2tldCBlc2NhcGVzIGFyZSByZW1vdmVkLCBidXQgbm90IGJhY2tzbGFzaCBlc2NhcGVzLlxuICpcbiAqIEZvciBleGFtcGxlLCBpdCB3aWxsIHR1cm4gdGhlIHN0cmluZyBgJ1sqXSdgIGludG8gYCpgLCBidXQgaXQgd2lsbCBub3RcbiAqIHR1cm4gYCdcXFxcKidgIGludG8gYCcqJ2AsIGJlY2F1c2UgYFxcYCBpcyBhIHBhdGggc2VwYXJhdG9yIGluXG4gKiBgd2luZG93c1BhdGhzTm9Fc2NhcGVgIG1vZGUuXG4gKlxuICogV2hlbiBgd2luZG93c1BhdGhzTm9Fc2NhcGVgIGlzIG5vdCBzZXQsIHRoZW4gYm90aCBzcXVhcmUtYnJhY2tldCBlc2NhcGVzIGFuZFxuICogYmFja3NsYXNoIGVzY2FwZXMgYXJlIHJlbW92ZWQuXG4gKlxuICogU2xhc2hlcyAoYW5kIGJhY2tzbGFzaGVzIGluIGB3aW5kb3dzUGF0aHNOb0VzY2FwZWAgbW9kZSkgY2Fubm90IGJlIGVzY2FwZWRcbiAqIG9yIHVuZXNjYXBlZC5cbiAqXG4gKiBXaGVuIGBtYWdpY2FsQnJhY2VzYCBpcyBub3Qgc2V0LCBlc2NhcGVzIG9mIGJyYWNlcyAoYHtgIGFuZCBgfWApIHdpbGwgbm90IGJlXG4gKiB1bmVzY2FwZWQuXG4gKi9cbmV4cG9ydCBjb25zdCB1bmVzY2FwZSA9IChzLCB7IHdpbmRvd3NQYXRoc05vRXNjYXBlID0gZmFsc2UsIG1hZ2ljYWxCcmFjZXMgPSB0cnVlLCB9ID0ge30pID0+IHtcbiAgICBpZiAobWFnaWNhbEJyYWNlcykge1xuICAgICAgICByZXR1cm4gd2luZG93c1BhdGhzTm9Fc2NhcGUgP1xuICAgICAgICAgICAgcy5yZXBsYWNlKC9cXFsoW14vXFxcXF0pXFxdL2csICckMScpXG4gICAgICAgICAgICA6IHNcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvKCg/IVxcXFwpLnxeKVxcWyhbXi9cXFxcXSlcXF0vZywgJyQxJDInKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcKFteL10pL2csICckMScpO1xuICAgIH1cbiAgICByZXR1cm4gd2luZG93c1BhdGhzTm9Fc2NhcGUgP1xuICAgICAgICBzLnJlcGxhY2UoL1xcWyhbXi9cXFxce31dKVxcXS9nLCAnJDEnKVxuICAgICAgICA6IHNcbiAgICAgICAgICAgIC5yZXBsYWNlKC8oKD8hXFxcXCkufF4pXFxbKFteL1xcXFx7fV0pXFxdL2csICckMSQyJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcKFteL3t9XSkvZywgJyQxJyk7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dW5lc2NhcGUuanMubWFwIiwKICAgICIvLyBwYXJzZSBhIHNpbmdsZSBwYXRoIHBvcnRpb25cbnZhciBfYTtcbmltcG9ydCB7IHBhcnNlQ2xhc3MgfSBmcm9tICcuL2JyYWNlLWV4cHJlc3Npb25zLmpzJztcbmltcG9ydCB7IHVuZXNjYXBlIH0gZnJvbSAnLi91bmVzY2FwZS5qcyc7XG5jb25zdCB0eXBlcyA9IG5ldyBTZXQoWychJywgJz8nLCAnKycsICcqJywgJ0AnXSk7XG5jb25zdCBpc0V4dGdsb2JUeXBlID0gKGMpID0+IHR5cGVzLmhhcyhjKTtcbmNvbnN0IGlzRXh0Z2xvYkFTVCA9IChjKSA9PiBpc0V4dGdsb2JUeXBlKGMudHlwZSk7XG4vLyBNYXAgb2Ygd2hpY2ggZXh0Z2xvYiB0eXBlcyBjYW4gYWRvcHQgdGhlIGNoaWxkcmVuIG9mIGEgbmVzdGVkIGV4dGdsb2Jcbi8vXG4vLyBhbnl0aGluZyBidXQgISBjYW4gYWRvcHQgYSBtYXRjaGluZyB0eXBlOlxuLy8gKyhhfCsoYnxjKXxkKSA9PiArKGF8YnxjfGQpXG4vLyAqKGF8KihifGMpfGQpID0+ICooYXxifGN8ZClcbi8vIEAoYXxAKGJ8Yyl8ZCkgPT4gQChhfGJ8Y3xkKVxuLy8gPyhhfD8oYnxjKXxkKSA9PiA/KGF8YnxjfGQpXG4vL1xuLy8gKiBjYW4gYWRvcHQgYW55dGhpbmcsIGJlY2F1c2UgMCBvciByZXBldGl0aW9uIGlzIGFsbG93ZWRcbi8vICooYXw/KGJ8Yyl8ZCkgPT4gKihhfGJ8Y3xkKVxuLy8gKihhfCsoYnxjKXxkKSA9PiAqKGF8YnxjfGQpXG4vLyAqKGF8QChifGMpfGQpID0+ICooYXxifGN8ZClcbi8vXG4vLyArIGNhbiBhZG9wdCBALCBiZWNhdXNlIDEgb3IgcmVwZXRpdGlvbiBpcyBhbGxvd2VkXG4vLyArKGF8QChifGMpfGQpID0+ICsoYXxifGN8ZClcbi8vXG4vLyArIGFuZCBAIENBTk5PVCBhZG9wdCAqLCBiZWNhdXNlIDAgd291bGQgYmUgYWxsb3dlZFxuLy8gKyhhfCooYnxjKXxkKSA9PiB3b3VsZCBtYXRjaCBcIlwiLCBvbiAqKGJ8Yylcbi8vIEAoYXwqKGJ8Yyl8ZCkgPT4gd291bGQgbWF0Y2ggXCJcIiwgb24gKihifGMpXG4vL1xuLy8gKyBhbmQgQCBDQU5OT1QgYWRvcHQgPywgYmVjYXVzZSAwIHdvdWxkIGJlIGFsbG93ZWRcbi8vICsoYXw/KGJ8Yyl8ZCkgPT4gd291bGQgbWF0Y2ggXCJcIiwgb24gPyhifGMpXG4vLyBAKGF8PyhifGMpfGQpID0+IHdvdWxkIG1hdGNoIFwiXCIsIG9uID8oYnxjKVxuLy9cbi8vID8gY2FuIGFkb3B0IEAsIGJlY2F1c2UgMCBvciAxIGlzIGFsbG93ZWRcbi8vID8oYXxAKGJ8Yyl8ZCkgPT4gPyhhfGJ8Y3xkKVxuLy9cbi8vID8gYW5kIEAgQ0FOTk9UIGFkb3B0ICogb3IgKywgYmVjYXVzZSA+MSB3b3VsZCBiZSBhbGxvd2VkXG4vLyA/KGF8KihifGMpfGQpID0+IHdvdWxkIG1hdGNoIGJiYiBvbiAqKGJ8Yylcbi8vIEAoYXwqKGJ8Yyl8ZCkgPT4gd291bGQgbWF0Y2ggYmJiIG9uICooYnxjKVxuLy8gPyhhfCsoYnxjKXxkKSA9PiB3b3VsZCBtYXRjaCBiYmIgb24gKyhifGMpXG4vLyBAKGF8KyhifGMpfGQpID0+IHdvdWxkIG1hdGNoIGJiYiBvbiArKGJ8Yylcbi8vXG4vLyAhIENBTk5PVCBhZG9wdCAhIChub3RoaW5nIGVsc2UgY2FuIGVpdGhlcilcbi8vICEoYXwhKGJ8Yyl8ZCkgPT4gIShhfGJ8Y3xkKSB3b3VsZCBmYWlsIHRvIG1hdGNoIG9uIGIgKG5vdCBub3QgYnxjKVxuLy9cbi8vICEgY2FuIGFkb3B0IEBcbi8vICEoYXxAKGJ8Yyl8ZCkgPT4gIShhfGJ8Y3xkKVxuLy9cbi8vICEgQ0FOTk9UIGFkb3B0ICpcbi8vICEoYXwqKGJ8Yyl8ZCkgPT4gIShhfGJ8Y3xkKSB3b3VsZCBtYXRjaCBvbiBiYmIsIG5vdCBhbGxvd2VkXG4vL1xuLy8gISBDQU5OT1QgYWRvcHQgK1xuLy8gIShhfCsoYnxjKXxkKSA9PiAhKGF8YnxjfGQpIHdvdWxkIG1hdGNoIG9uIGJiYiwgbm90IGFsbG93ZWRcbi8vXG4vLyAhIENBTk5PVCBhZG9wdCA/XG4vLyB4IShhfD8oYnxjKXxkKSA9PiB4IShhfGJ8Y3xkKSB3b3VsZCBmYWlsIHRvIG1hdGNoIFwieFwiXG5jb25zdCBhZG9wdGlvbk1hcCA9IG5ldyBNYXAoW1xuICAgIFsnIScsIFsnQCddXSxcbiAgICBbJz8nLCBbJz8nLCAnQCddXSxcbiAgICBbJ0AnLCBbJ0AnXV0sXG4gICAgWycqJywgWycqJywgJysnLCAnPycsICdAJ11dLFxuICAgIFsnKycsIFsnKycsICdAJ11dLFxuXSk7XG4vLyBuZXN0ZWQgZXh0Z2xvYnMgdGhhdCBjYW4gYmUgYWRvcHRlZCBpbiwgYnV0IHdpdGggdGhlIGFkZGl0aW9uIG9mXG4vLyBhIGJsYW5rICcnIGVsZW1lbnQuXG5jb25zdCBhZG9wdGlvbldpdGhTcGFjZU1hcCA9IG5ldyBNYXAoW1xuICAgIFsnIScsIFsnPyddXSxcbiAgICBbJ0AnLCBbJz8nXV0sXG4gICAgWycrJywgWyc/JywgJyonXV0sXG5dKTtcbi8vIHVuaW9uIG9mIHRoZSBwcmV2aW91cyB0d28gbWFwc1xuY29uc3QgYWRvcHRpb25BbnlNYXAgPSBuZXcgTWFwKFtcbiAgICBbJyEnLCBbJz8nLCAnQCddXSxcbiAgICBbJz8nLCBbJz8nLCAnQCddXSxcbiAgICBbJ0AnLCBbJz8nLCAnQCddXSxcbiAgICBbJyonLCBbJyonLCAnKycsICc/JywgJ0AnXV0sXG4gICAgWycrJywgWycrJywgJ0AnLCAnPycsICcqJ11dLFxuXSk7XG4vLyBFeHRnbG9icyB0aGF0IGNhbiB0YWtlIG92ZXIgdGhlaXIgcGFyZW50IGlmIHRoZXkgYXJlIHRoZSBvbmx5IGNoaWxkXG4vLyB0aGUga2V5IGlzIHBhcmVudCwgdmFsdWUgbWFwcyBjaGlsZCB0byByZXN1bHRpbmcgZXh0Z2xvYiBwYXJlbnQgdHlwZVxuLy8gJ0AnIGlzIG9taXR0ZWQgYmVjYXVzZSBpdCdzIGEgc3BlY2lhbCBjYXNlLiBBbiBgQGAgZXh0Z2xvYiB3aXRoIGEgc2luZ2xlXG4vLyBtZW1iZXIgY2FuIGFsd2F5cyBiZSB1c3VycGVkIGJ5IHRoYXQgc3VicGF0dGVybi5cbmNvbnN0IHVzdXJwTWFwID0gbmV3IE1hcChbXG4gICAgWychJywgbmV3IE1hcChbWychJywgJ0AnXV0pXSxcbiAgICBbXG4gICAgICAgICc/JyxcbiAgICAgICAgbmV3IE1hcChbXG4gICAgICAgICAgICBbJyonLCAnKiddLFxuICAgICAgICAgICAgWycrJywgJyonXSxcbiAgICAgICAgXSksXG4gICAgXSxcbiAgICBbXG4gICAgICAgICdAJyxcbiAgICAgICAgbmV3IE1hcChbXG4gICAgICAgICAgICBbJyEnLCAnISddLFxuICAgICAgICAgICAgWyc/JywgJz8nXSxcbiAgICAgICAgICAgIFsnQCcsICdAJ10sXG4gICAgICAgICAgICBbJyonLCAnKiddLFxuICAgICAgICAgICAgWycrJywgJysnXSxcbiAgICAgICAgXSksXG4gICAgXSxcbiAgICBbXG4gICAgICAgICcrJyxcbiAgICAgICAgbmV3IE1hcChbXG4gICAgICAgICAgICBbJz8nLCAnKiddLFxuICAgICAgICAgICAgWycqJywgJyonXSxcbiAgICAgICAgXSksXG4gICAgXSxcbl0pO1xuLy8gUGF0dGVybnMgdGhhdCBnZXQgcHJlcGVuZGVkIHRvIGJpbmQgdG8gdGhlIHN0YXJ0IG9mIGVpdGhlciB0aGVcbi8vIGVudGlyZSBzdHJpbmcsIG9yIGp1c3QgYSBzaW5nbGUgcGF0aCBwb3J0aW9uLCB0byBwcmV2ZW50IGRvdHNcbi8vIGFuZC9vciB0cmF2ZXJzYWwgcGF0dGVybnMsIHdoZW4gbmVlZGVkLlxuLy8gRXh0cyBkb24ndCBuZWVkIHRoZSBeIG9yIC8gYml0LCBiZWNhdXNlIHRoZSByb290IGJpbmRzIHRoYXQgYWxyZWFkeS5cbmNvbnN0IHN0YXJ0Tm9UcmF2ZXJzYWwgPSAnKD8hKD86XnwvKVxcXFwuXFxcXC4/KD86JHwvKSknO1xuY29uc3Qgc3RhcnROb0RvdCA9ICcoPyFcXFxcLiknO1xuLy8gY2hhcmFjdGVycyB0aGF0IGluZGljYXRlIGEgc3RhcnQgb2YgcGF0dGVybiBuZWVkcyB0aGUgXCJubyBkb3RzXCIgYml0LFxuLy8gYmVjYXVzZSBhIGRvdCAqbWlnaHQqIGJlIG1hdGNoZWQuICggaXMgbm90IGluIHRoZSBsaXN0LCBiZWNhdXNlIGluXG4vLyB0aGUgY2FzZSBvZiBhIGNoaWxkIGV4dGdsb2IsIGl0IHdpbGwgaGFuZGxlIHRoZSBwcmV2ZW50aW9uIGl0c2VsZi5cbmNvbnN0IGFkZFBhdHRlcm5TdGFydCA9IG5ldyBTZXQoWydbJywgJy4nXSk7XG4vLyBjYXNlcyB3aGVyZSB0cmF2ZXJzYWwgaXMgQS1PSywgbm8gZG90IHByZXZlbnRpb24gbmVlZGVkXG5jb25zdCBqdXN0RG90cyA9IG5ldyBTZXQoWycuLicsICcuJ10pO1xuY29uc3QgcmVTcGVjaWFscyA9IG5ldyBTZXQoJygpLip7fSs/W11eJFxcXFwhJyk7XG5jb25zdCByZWdFeHBFc2NhcGUgPSAocykgPT4gcy5yZXBsYWNlKC9bLVtcXF17fSgpKis/LixcXFxcXiR8I1xcc10vZywgJ1xcXFwkJicpO1xuLy8gYW55IHNpbmdsZSB0aGluZyBvdGhlciB0aGFuIC9cbmNvbnN0IHFtYXJrID0gJ1teL10nO1xuLy8gKiA9PiBhbnkgbnVtYmVyIG9mIGNoYXJhY3RlcnNcbmNvbnN0IHN0YXIgPSBxbWFyayArICcqPyc7XG4vLyB1c2UgKyB3aGVuIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgKnNvbWV0aGluZyogbWF0Y2hlcywgYmVjYXVzZSB0aGUgKiBpc1xuLy8gdGhlIG9ubHkgdGhpbmcgaW4gdGhlIHBhdGggcG9ydGlvbi5cbmNvbnN0IHN0YXJOb0VtcHR5ID0gcW1hcmsgKyAnKz8nO1xuLy8gcmVtb3ZlIHRoZSBcXCBjaGFycyB0aGF0IHdlIGFkZGVkIGlmIHdlIGVuZCB1cCBkb2luZyBhIG5vbm1hZ2ljIGNvbXBhcmVcbi8vIGNvbnN0IGRlc2xhc2ggPSAoczogc3RyaW5nKSA9PiBzLnJlcGxhY2UoL1xcXFwoLikvZywgJyQxJylcbmxldCBJRCA9IDA7XG5leHBvcnQgY2xhc3MgQVNUIHtcbiAgICB0eXBlO1xuICAgICNyb290O1xuICAgICNoYXNNYWdpYztcbiAgICAjdWZsYWcgPSBmYWxzZTtcbiAgICAjcGFydHMgPSBbXTtcbiAgICAjcGFyZW50O1xuICAgICNwYXJlbnRJbmRleDtcbiAgICAjbmVncztcbiAgICAjZmlsbGVkTmVncyA9IGZhbHNlO1xuICAgICNvcHRpb25zO1xuICAgICN0b1N0cmluZztcbiAgICAvLyBzZXQgdG8gdHJ1ZSBpZiBpdCdzIGFuIGV4dGdsb2Igd2l0aCBubyBjaGlsZHJlblxuICAgIC8vICh3aGljaCByZWFsbHkgbWVhbnMgb25lIGNoaWxkIG9mICcnKVxuICAgICNlbXB0eUV4dCA9IGZhbHNlO1xuICAgIGlkID0gKytJRDtcbiAgICBnZXQgZGVwdGgoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jcGFyZW50Py5kZXB0aCA/PyAtMSkgKyAxO1xuICAgIH1cbiAgICBbU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKV0oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnQEB0eXBlJzogJ0FTVCcsXG4gICAgICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHJvb3Q6IHRoaXMuI3Jvb3QuaWQsXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMuI3BhcmVudD8uaWQsXG4gICAgICAgICAgICBkZXB0aDogdGhpcy5kZXB0aCxcbiAgICAgICAgICAgIHBhcnRzTGVuZ3RoOiB0aGlzLiNwYXJ0cy5sZW5ndGgsXG4gICAgICAgICAgICBwYXJ0czogdGhpcy4jcGFydHMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHR5cGUsIHBhcmVudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIC8vIGV4dGdsb2JzIGFyZSBpbmhlcmVudGx5IG1hZ2ljYWxcbiAgICAgICAgaWYgKHR5cGUpXG4gICAgICAgICAgICB0aGlzLiNoYXNNYWdpYyA9IHRydWU7XG4gICAgICAgIHRoaXMuI3BhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy4jcm9vdCA9IHRoaXMuI3BhcmVudCA/IHRoaXMuI3BhcmVudC4jcm9vdCA6IHRoaXM7XG4gICAgICAgIHRoaXMuI29wdGlvbnMgPSB0aGlzLiNyb290ID09PSB0aGlzID8gb3B0aW9ucyA6IHRoaXMuI3Jvb3QuI29wdGlvbnM7XG4gICAgICAgIHRoaXMuI25lZ3MgPSB0aGlzLiNyb290ID09PSB0aGlzID8gW10gOiB0aGlzLiNyb290LiNuZWdzO1xuICAgICAgICBpZiAodHlwZSA9PT0gJyEnICYmICF0aGlzLiNyb290LiNmaWxsZWROZWdzKVxuICAgICAgICAgICAgdGhpcy4jbmVncy5wdXNoKHRoaXMpO1xuICAgICAgICB0aGlzLiNwYXJlbnRJbmRleCA9IHRoaXMuI3BhcmVudCA/IHRoaXMuI3BhcmVudC4jcGFydHMubGVuZ3RoIDogMDtcbiAgICB9XG4gICAgZ2V0IGhhc01hZ2ljKCkge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMuI2hhc01hZ2ljICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jaGFzTWFnaWM7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLiNwYXJ0cykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChwLnR5cGUgfHwgcC5oYXNNYWdpYylcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuI2hhc01hZ2ljID0gdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm90ZTogd2lsbCBiZSB1bmRlZmluZWQgdW50aWwgd2UgZ2VuZXJhdGUgdGhlIHJlZ2V4cCBzcmMgYW5kIGZpbmQgb3V0XG4gICAgICAgIHJldHVybiB0aGlzLiNoYXNNYWdpYztcbiAgICB9XG4gICAgLy8gcmVjb25zdHJ1Y3RzIHRoZSBwYXR0ZXJuXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdG9TdHJpbmcgIT09IHVuZGVmaW5lZCA/IHRoaXMuI3RvU3RyaW5nXG4gICAgICAgICAgICA6ICF0aGlzLnR5cGUgP1xuICAgICAgICAgICAgICAgICh0aGlzLiN0b1N0cmluZyA9IHRoaXMuI3BhcnRzLm1hcChwID0+IFN0cmluZyhwKSkuam9pbignJykpXG4gICAgICAgICAgICAgICAgOiAodGhpcy4jdG9TdHJpbmcgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJygnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI3BhcnRzLm1hcChwID0+IFN0cmluZyhwKSkuam9pbignfCcpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcpJykpO1xuICAgIH1cbiAgICAjZmlsbE5lZ3MoKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcyAhPT0gdGhpcy4jcm9vdClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2hvdWxkIG9ubHkgY2FsbCBvbiByb290Jyk7XG4gICAgICAgIGlmICh0aGlzLiNmaWxsZWROZWdzKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIC8vIGNhbGwgdG9TdHJpbmcoKSBvbmNlIHRvIGZpbGwgdGhpcyBvdXRcbiAgICAgICAgdGhpcy50b1N0cmluZygpO1xuICAgICAgICB0aGlzLiNmaWxsZWROZWdzID0gdHJ1ZTtcbiAgICAgICAgbGV0IG47XG4gICAgICAgIHdoaWxlICgobiA9IHRoaXMuI25lZ3MucG9wKCkpKSB7XG4gICAgICAgICAgICBpZiAobi50eXBlICE9PSAnIScpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAvLyB3YWxrIHVwIHRoZSB0cmVlLCBhcHBlbmRpbmcgZXZlcnRoaW5nIHRoYXQgY29tZXMgQUZURVIgcGFyZW50SW5kZXhcbiAgICAgICAgICAgIGxldCBwID0gbjtcbiAgICAgICAgICAgIGxldCBwcCA9IHAuI3BhcmVudDtcbiAgICAgICAgICAgIHdoaWxlIChwcCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBwLiNwYXJlbnRJbmRleCArIDE7ICFwcC50eXBlICYmIGkgPCBwcC4jcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIG4uI3BhcnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cmluZyBwYXJ0IGluIGV4dGdsb2IgQVNUPz8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0LmNvcHlJbihwcC4jcGFydHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHAgPSBwcDtcbiAgICAgICAgICAgICAgICBwcCA9IHAuI3BhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcHVzaCguLi5wYXJ0cykge1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcGFydHMpIHtcbiAgICAgICAgICAgIGlmIChwID09PSAnJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICEocCBpbnN0YW5jZW9mIF9hICYmIHAuI3BhcmVudCA9PT0gdGhpcykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcGFydDogJyArIHApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHRoaXMuI3BhcnRzLnB1c2gocCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCByZXQgPSB0aGlzLnR5cGUgPT09IG51bGwgP1xuICAgICAgICAgICAgdGhpcy4jcGFydHNcbiAgICAgICAgICAgICAgICAuc2xpY2UoKVxuICAgICAgICAgICAgICAgIC5tYXAocCA9PiAodHlwZW9mIHAgPT09ICdzdHJpbmcnID8gcCA6IHAudG9KU09OKCkpKVxuICAgICAgICAgICAgOiBbdGhpcy50eXBlLCAuLi50aGlzLiNwYXJ0cy5tYXAocCA9PiBwLnRvSlNPTigpKV07XG4gICAgICAgIGlmICh0aGlzLmlzU3RhcnQoKSAmJiAhdGhpcy50eXBlKVxuICAgICAgICAgICAgcmV0LnVuc2hpZnQoW10pO1xuICAgICAgICBpZiAodGhpcy5pc0VuZCgpICYmXG4gICAgICAgICAgICAodGhpcyA9PT0gdGhpcy4jcm9vdCB8fFxuICAgICAgICAgICAgICAgICh0aGlzLiNyb290LiNmaWxsZWROZWdzICYmIHRoaXMuI3BhcmVudD8udHlwZSA9PT0gJyEnKSkpIHtcbiAgICAgICAgICAgIHJldC5wdXNoKHt9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICBpc1N0YXJ0KCkge1xuICAgICAgICBpZiAodGhpcy4jcm9vdCA9PT0gdGhpcylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyBpZiAodGhpcy50eXBlKSByZXR1cm4gISF0aGlzLiNwYXJlbnQ/LmlzU3RhcnQoKVxuICAgICAgICBpZiAoIXRoaXMuI3BhcmVudD8uaXNTdGFydCgpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy4jcGFyZW50SW5kZXggPT09IDApXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gaWYgZXZlcnl0aGluZyBBSEVBRCBvZiB0aGlzIGlzIGEgbmVnYXRpb24sIHRoZW4gaXQncyBzdGlsbCB0aGUgXCJzdGFydFwiXG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLiNwYXJlbnQ7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy4jcGFyZW50SW5kZXg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcHAgPSBwLiNwYXJ0c1tpXTtcbiAgICAgICAgICAgIGlmICghKHBwIGluc3RhbmNlb2YgX2EgJiYgcHAudHlwZSA9PT0gJyEnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaXNFbmQoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyb290ID09PSB0aGlzKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLiNwYXJlbnQ/LnR5cGUgPT09ICchJylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMuI3BhcmVudD8uaXNFbmQoKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcGFyZW50Py5pc0VuZCgpO1xuICAgICAgICAvLyBpZiBub3Qgcm9vdCwgaXQnbGwgYWx3YXlzIGhhdmUgYSBwYXJlbnRcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGNvbnN0IHBsID0gdGhpcy4jcGFyZW50ID8gdGhpcy4jcGFyZW50LiNwYXJ0cy5sZW5ndGggOiAwO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICByZXR1cm4gdGhpcy4jcGFyZW50SW5kZXggPT09IHBsIC0gMTtcbiAgICB9XG4gICAgY29weUluKHBhcnQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHRoaXMucHVzaChwYXJ0KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5wdXNoKHBhcnQuY2xvbmUodGhpcykpO1xuICAgIH1cbiAgICBjbG9uZShwYXJlbnQpIHtcbiAgICAgICAgY29uc3QgYyA9IG5ldyBfYSh0aGlzLnR5cGUsIHBhcmVudCk7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLiNwYXJ0cykge1xuICAgICAgICAgICAgYy5jb3B5SW4ocCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfVxuICAgIHN0YXRpYyAjcGFyc2VBU1Qoc3RyLCBhc3QsIHBvcywgb3B0LCBleHREZXB0aCkge1xuICAgICAgICBjb25zdCBtYXhEZXB0aCA9IG9wdC5tYXhFeHRnbG9iUmVjdXJzaW9uID8/IDI7XG4gICAgICAgIGxldCBlc2NhcGluZyA9IGZhbHNlO1xuICAgICAgICBsZXQgaW5CcmFjZSA9IGZhbHNlO1xuICAgICAgICBsZXQgYnJhY2VTdGFydCA9IC0xO1xuICAgICAgICBsZXQgYnJhY2VOZWcgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFzdC50eXBlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBvdXRzaWRlIG9mIGEgZXh0Z2xvYiwgYXBwZW5kIHVudGlsIHdlIGZpbmQgYSBzdGFydFxuICAgICAgICAgICAgbGV0IGkgPSBwb3M7XG4gICAgICAgICAgICBsZXQgYWNjID0gJyc7XG4gICAgICAgICAgICB3aGlsZSAoaSA8IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gc3RyLmNoYXJBdChpKyspO1xuICAgICAgICAgICAgICAgIC8vIHN0aWxsIGFjY3VtdWxhdGUgZXNjYXBlcyBhdCB0aGlzIHBvaW50LCBidXQgd2UgZG8gaWdub3JlXG4gICAgICAgICAgICAgICAgLy8gc3RhcnRzIHRoYXQgYXJlIGVzY2FwZWRcbiAgICAgICAgICAgICAgICBpZiAoZXNjYXBpbmcgfHwgYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gIWVzY2FwaW5nO1xuICAgICAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbkJyYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSBicmFjZVN0YXJ0ICsgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdeJyB8fCBjID09PSAnIScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFjZU5lZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gJ10nICYmICEoaSA9PT0gYnJhY2VTdGFydCArIDIgJiYgYnJhY2VOZWcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbkJyYWNlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjID09PSAnWycpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5CcmFjZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyYWNlU3RhcnQgPSBpO1xuICAgICAgICAgICAgICAgICAgICBicmFjZU5lZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgdG8gY2hlY2sgZm9yIGFkb3B0aW9uIGhlcmUsIGJlY2F1c2UgdGhhdCdzXG4gICAgICAgICAgICAgICAgLy8gZG9uZSBhdCB0aGUgb3RoZXIgcmVjdXJzaW9uIHBvaW50LlxuICAgICAgICAgICAgICAgIGNvbnN0IGRvUmVjdXJzZSA9ICFvcHQubm9leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNFeHRnbG9iVHlwZShjKSAmJlxuICAgICAgICAgICAgICAgICAgICBzdHIuY2hhckF0KGkpID09PSAnKCcgJiZcbiAgICAgICAgICAgICAgICAgICAgZXh0RGVwdGggPD0gbWF4RGVwdGg7XG4gICAgICAgICAgICAgICAgaWYgKGRvUmVjdXJzZSkge1xuICAgICAgICAgICAgICAgICAgICBhc3QucHVzaChhY2MpO1xuICAgICAgICAgICAgICAgICAgICBhY2MgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXh0ID0gbmV3IF9hKGMsIGFzdCk7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBfYS4jcGFyc2VBU1Qoc3RyLCBleHQsIGksIG9wdCwgZXh0RGVwdGggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgYXN0LnB1c2goZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXN0LnB1c2goYWNjKTtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNvbWUga2luZCBvZiBleHRnbG9iLCBwb3MgaXMgYXQgdGhlIChcbiAgICAgICAgLy8gZmluZCB0aGUgbmV4dCB8IG9yIClcbiAgICAgICAgbGV0IGkgPSBwb3MgKyAxO1xuICAgICAgICBsZXQgcGFydCA9IG5ldyBfYShudWxsLCBhc3QpO1xuICAgICAgICBjb25zdCBwYXJ0cyA9IFtdO1xuICAgICAgICBsZXQgYWNjID0gJyc7XG4gICAgICAgIHdoaWxlIChpIDwgc3RyLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgYyA9IHN0ci5jaGFyQXQoaSsrKTtcbiAgICAgICAgICAgIC8vIHN0aWxsIGFjY3VtdWxhdGUgZXNjYXBlcyBhdCB0aGlzIHBvaW50LCBidXQgd2UgZG8gaWdub3JlXG4gICAgICAgICAgICAvLyBzdGFydHMgdGhhdCBhcmUgZXNjYXBlZFxuICAgICAgICAgICAgaWYgKGVzY2FwaW5nIHx8IGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gIWVzY2FwaW5nO1xuICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGluQnJhY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gYnJhY2VTdGFydCArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdeJyB8fCBjID09PSAnIScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyYWNlTmVnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjID09PSAnXScgJiYgIShpID09PSBicmFjZVN0YXJ0ICsgMiAmJiBicmFjZU5lZykpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5CcmFjZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGMgPT09ICdbJykge1xuICAgICAgICAgICAgICAgIGluQnJhY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyYWNlU3RhcnQgPSBpO1xuICAgICAgICAgICAgICAgIGJyYWNlTmVnID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkb1JlY3Vyc2UgPSAhb3B0Lm5vZXh0ICYmXG4gICAgICAgICAgICAgICAgaXNFeHRnbG9iVHlwZShjKSAmJlxuICAgICAgICAgICAgICAgIHN0ci5jaGFyQXQoaSkgPT09ICcoJyAmJlxuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAtIHRoZSBtYXhEZXB0aCBpcyBzdWZmaWNpZW50IGhlcmUgKi9cbiAgICAgICAgICAgICAgICAoZXh0RGVwdGggPD0gbWF4RGVwdGggfHwgKGFzdCAmJiBhc3QuI2NhbkFkb3B0VHlwZShjKSkpO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIGlmIChkb1JlY3Vyc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXB0aEFkZCA9IGFzdCAmJiBhc3QuI2NhbkFkb3B0VHlwZShjKSA/IDAgOiAxO1xuICAgICAgICAgICAgICAgIHBhcnQucHVzaChhY2MpO1xuICAgICAgICAgICAgICAgIGFjYyA9ICcnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4dCA9IG5ldyBfYShjLCBwYXJ0KTtcbiAgICAgICAgICAgICAgICBwYXJ0LnB1c2goZXh0KTtcbiAgICAgICAgICAgICAgICBpID0gX2EuI3BhcnNlQVNUKHN0ciwgZXh0LCBpLCBvcHQsIGV4dERlcHRoICsgZGVwdGhBZGQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09ICd8Jykge1xuICAgICAgICAgICAgICAgIHBhcnQucHVzaChhY2MpO1xuICAgICAgICAgICAgICAgIGFjYyA9ICcnO1xuICAgICAgICAgICAgICAgIHBhcnRzLnB1c2gocGFydCk7XG4gICAgICAgICAgICAgICAgcGFydCA9IG5ldyBfYShudWxsLCBhc3QpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09ICcpJykge1xuICAgICAgICAgICAgICAgIGlmIChhY2MgPT09ICcnICYmIGFzdC4jcGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzdC4jZW1wdHlFeHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJ0LnB1c2goYWNjKTtcbiAgICAgICAgICAgICAgICBhY2MgPSAnJztcbiAgICAgICAgICAgICAgICBhc3QucHVzaCguLi5wYXJ0cywgcGFydCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgfVxuICAgICAgICAvLyB1bmZpbmlzaGVkIGV4dGdsb2JcbiAgICAgICAgLy8gaWYgd2UgZ290IGhlcmUsIGl0IHdhcyBhIG1hbGZvcm1lZCBleHRnbG9iISBub3QgYW4gZXh0Z2xvYiwgYnV0XG4gICAgICAgIC8vIG1heWJlIHNvbWV0aGluZyBlbHNlIGluIHRoZXJlLlxuICAgICAgICBhc3QudHlwZSA9IG51bGw7XG4gICAgICAgIGFzdC4jaGFzTWFnaWMgPSB1bmRlZmluZWQ7XG4gICAgICAgIGFzdC4jcGFydHMgPSBbc3RyLnN1YnN0cmluZyhwb3MgLSAxKV07XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgICAjY2FuQWRvcHRXaXRoU3BhY2UoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NhbkFkb3B0KGNoaWxkLCBhZG9wdGlvbldpdGhTcGFjZU1hcCk7XG4gICAgfVxuICAgICNjYW5BZG9wdChjaGlsZCwgbWFwID0gYWRvcHRpb25NYXApIHtcbiAgICAgICAgaWYgKCFjaGlsZCB8fFxuICAgICAgICAgICAgdHlwZW9mIGNoaWxkICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICAgICAgY2hpbGQudHlwZSAhPT0gbnVsbCB8fFxuICAgICAgICAgICAgY2hpbGQuI3BhcnRzLmxlbmd0aCAhPT0gMSB8fFxuICAgICAgICAgICAgdGhpcy50eXBlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ2MgPSBjaGlsZC4jcGFydHNbMF07XG4gICAgICAgIGlmICghZ2MgfHwgdHlwZW9mIGdjICE9PSAnb2JqZWN0JyB8fCBnYy50eXBlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuI2NhbkFkb3B0VHlwZShnYy50eXBlLCBtYXApO1xuICAgIH1cbiAgICAjY2FuQWRvcHRUeXBlKGMsIG1hcCA9IGFkb3B0aW9uQW55TWFwKSB7XG4gICAgICAgIHJldHVybiAhIW1hcC5nZXQodGhpcy50eXBlKT8uaW5jbHVkZXMoYyk7XG4gICAgfVxuICAgICNhZG9wdFdpdGhTcGFjZShjaGlsZCwgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgZ2MgPSBjaGlsZC4jcGFydHNbMF07XG4gICAgICAgIGNvbnN0IGJsYW5rID0gbmV3IF9hKG51bGwsIGdjLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICBibGFuay4jcGFydHMucHVzaCgnJyk7XG4gICAgICAgIGdjLnB1c2goYmxhbmspO1xuICAgICAgICB0aGlzLiNhZG9wdChjaGlsZCwgaW5kZXgpO1xuICAgIH1cbiAgICAjYWRvcHQoY2hpbGQsIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IGdjID0gY2hpbGQuI3BhcnRzWzBdO1xuICAgICAgICB0aGlzLiNwYXJ0cy5zcGxpY2UoaW5kZXgsIDEsIC4uLmdjLiNwYXJ0cyk7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBnYy4jcGFydHMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICAgICAgcC4jcGFyZW50ID0gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiN0b1N0cmluZyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgI2NhblVzdXJwVHlwZShjKSB7XG4gICAgICAgIGNvbnN0IG0gPSB1c3VycE1hcC5nZXQodGhpcy50eXBlKTtcbiAgICAgICAgcmV0dXJuICEhbT8uaGFzKGMpO1xuICAgIH1cbiAgICAjY2FuVXN1cnAoY2hpbGQpIHtcbiAgICAgICAgaWYgKCFjaGlsZCB8fFxuICAgICAgICAgICAgdHlwZW9mIGNoaWxkICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICAgICAgY2hpbGQudHlwZSAhPT0gbnVsbCB8fFxuICAgICAgICAgICAgY2hpbGQuI3BhcnRzLmxlbmd0aCAhPT0gMSB8fFxuICAgICAgICAgICAgdGhpcy50eXBlID09PSBudWxsIHx8XG4gICAgICAgICAgICB0aGlzLiNwYXJ0cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBnYyA9IGNoaWxkLiNwYXJ0c1swXTtcbiAgICAgICAgaWYgKCFnYyB8fCB0eXBlb2YgZ2MgIT09ICdvYmplY3QnIHx8IGdjLnR5cGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy4jY2FuVXN1cnBUeXBlKGdjLnR5cGUpO1xuICAgIH1cbiAgICAjdXN1cnAoY2hpbGQpIHtcbiAgICAgICAgY29uc3QgbSA9IHVzdXJwTWFwLmdldCh0aGlzLnR5cGUpO1xuICAgICAgICBjb25zdCBnYyA9IGNoaWxkLiNwYXJ0c1swXTtcbiAgICAgICAgY29uc3QgbnQgPSBtPy5nZXQoZ2MudHlwZSk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAtIGltcG9zc2libGUgKi9cbiAgICAgICAgaWYgKCFudClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy4jcGFydHMgPSBnYy4jcGFydHM7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLiNwYXJ0cykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHAuI3BhcmVudCA9IHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50eXBlID0gbnQ7XG4gICAgICAgIHRoaXMuI3RvU3RyaW5nID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLiNlbXB0eUV4dCA9IGZhbHNlO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbUdsb2IocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGFzdCA9IG5ldyBfYShudWxsLCB1bmRlZmluZWQsIG9wdGlvbnMpO1xuICAgICAgICBfYS4jcGFyc2VBU1QocGF0dGVybiwgYXN0LCAwLCBvcHRpb25zLCAwKTtcbiAgICAgICAgcmV0dXJuIGFzdDtcbiAgICB9XG4gICAgLy8gcmV0dXJucyB0aGUgcmVndWxhciBleHByZXNzaW9uIGlmIHRoZXJlJ3MgbWFnaWMsIG9yIHRoZSB1bmVzY2FwZWRcbiAgICAvLyBzdHJpbmcgaWYgbm90LlxuICAgIHRvTU1QYXR0ZXJuKCkge1xuICAgICAgICAvLyBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gcm9vdFxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMgIT09IHRoaXMuI3Jvb3QpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcm9vdC50b01NUGF0dGVybigpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICBjb25zdCBnbG9iID0gdGhpcy50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBbcmUsIGJvZHksIGhhc01hZ2ljLCB1ZmxhZ10gPSB0aGlzLnRvUmVnRXhwU291cmNlKCk7XG4gICAgICAgIC8vIGlmIHdlJ3JlIGluIG5vY2FzZSBtb2RlLCBhbmQgbm90IG5vY2FzZU1hZ2ljT25seSwgdGhlbiB3ZSBkb1xuICAgICAgICAvLyBzdGlsbCBuZWVkIGEgcmVndWxhciBleHByZXNzaW9uIGlmIHdlIGhhdmUgdG8gY2FzZS1pbnNlbnNpdGl2ZWx5XG4gICAgICAgIC8vIG1hdGNoIGNhcGl0YWwvbG93ZXJjYXNlIGNoYXJhY3RlcnMuXG4gICAgICAgIGNvbnN0IGFueU1hZ2ljID0gaGFzTWFnaWMgfHxcbiAgICAgICAgICAgIHRoaXMuI2hhc01hZ2ljIHx8XG4gICAgICAgICAgICAodGhpcy4jb3B0aW9ucy5ub2Nhc2UgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy4jb3B0aW9ucy5ub2Nhc2VNYWdpY09ubHkgJiZcbiAgICAgICAgICAgICAgICBnbG9iLnRvVXBwZXJDYXNlKCkgIT09IGdsb2IudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmICghYW55TWFnaWMpIHtcbiAgICAgICAgICAgIHJldHVybiBib2R5O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZsYWdzID0gKHRoaXMuI29wdGlvbnMubm9jYXNlID8gJ2knIDogJycpICsgKHVmbGFnID8gJ3UnIDogJycpO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgUmVnRXhwKGBeJHtyZX0kYCwgZmxhZ3MpLCB7XG4gICAgICAgICAgICBfc3JjOiByZSxcbiAgICAgICAgICAgIF9nbG9iOiBnbG9iLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNvcHRpb25zO1xuICAgIH1cbiAgICAvLyByZXR1cm5zIHRoZSBzdHJpbmcgbWF0Y2gsIHRoZSByZWdleHAgc291cmNlLCB3aGV0aGVyIHRoZXJlJ3MgbWFnaWNcbiAgICAvLyBpbiB0aGUgcmVnZXhwIChzbyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyByZXF1aXJlZCkgYW5kIHdoZXRoZXIgb3JcbiAgICAvLyBub3QgdGhlIHVmbGFnIGlzIG5lZWRlZCBmb3IgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAoZm9yIHBvc2l4IGNsYXNzZXMpXG4gICAgLy8gVE9ETzogaW5zdGVhZCBvZiBpbmplY3RpbmcgdGhlIHN0YXJ0L2VuZCBhdCB0aGlzIHBvaW50LCBqdXN0IHJldHVyblxuICAgIC8vIHRoZSBCT0RZIG9mIHRoZSByZWdleHAsIGFsb25nIHdpdGggdGhlIHN0YXJ0L2VuZCBwb3J0aW9ucyBzdWl0YWJsZVxuICAgIC8vIGZvciBiaW5kaW5nIHRoZSBzdGFydC9lbmQgaW4gZWl0aGVyIGEgam9pbmVkIGZ1bGwtcGF0aCBtYWtlUmUgY29udGV4dFxuICAgIC8vICh3aGVyZSB3ZSBiaW5kIHRvIChefC8pLCBvciBhIHN0YW5kYWxvbmUgbWF0Y2hQYXJ0IGNvbnRleHQgKHdoZXJlXG4gICAgLy8gd2UgYmluZCB0byBeLCBhbmQgbm90IC8pLiAgT3RoZXJ3aXNlIHNsYXNoZXMgZ2V0IGR1cGVkIVxuICAgIC8vXG4gICAgLy8gSW4gcGFydC1tYXRjaGluZyBtb2RlLCB0aGUgc3RhcnQgaXM6XG4gICAgLy8gLSBpZiBub3QgaXNTdGFydDogbm90aGluZ1xuICAgIC8vIC0gaWYgdHJhdmVyc2FsIHBvc3NpYmxlLCBidXQgbm90IGFsbG93ZWQ6IF4oPyFcXC5cXC4/JClcbiAgICAvLyAtIGlmIGRvdHMgYWxsb3dlZCBvciBub3QgcG9zc2libGU6IF5cbiAgICAvLyAtIGlmIGRvdHMgcG9zc2libGUgYW5kIG5vdCBhbGxvd2VkOiBeKD8hXFwuKVxuICAgIC8vIGVuZCBpczpcbiAgICAvLyAtIGlmIG5vdCBpc0VuZCgpOiBub3RoaW5nXG4gICAgLy8gLSBlbHNlOiAkXG4gICAgLy9cbiAgICAvLyBJbiBmdWxsLXBhdGggbWF0Y2hpbmcgbW9kZSwgd2UgcHV0IHRoZSBzbGFzaCBhdCB0aGUgU1RBUlQgb2YgdGhlXG4gICAgLy8gcGF0dGVybiwgc28gc3RhcnQgaXM6XG4gICAgLy8gLSBpZiBmaXJzdCBwYXR0ZXJuOiBzYW1lIGFzIHBhcnQtbWF0Y2hpbmcgbW9kZVxuICAgIC8vIC0gaWYgbm90IGlzU3RhcnQoKTogbm90aGluZ1xuICAgIC8vIC0gaWYgdHJhdmVyc2FsIHBvc3NpYmxlLCBidXQgbm90IGFsbG93ZWQ6IC8oPyFcXC5cXC4/KD86JHwvKSlcbiAgICAvLyAtIGlmIGRvdHMgYWxsb3dlZCBvciBub3QgcG9zc2libGU6IC9cbiAgICAvLyAtIGlmIGRvdHMgcG9zc2libGUgYW5kIG5vdCBhbGxvd2VkOiAvKD8hXFwuKVxuICAgIC8vIGVuZCBpczpcbiAgICAvLyAtIGlmIGxhc3QgcGF0dGVybiwgc2FtZSBhcyBwYXJ0LW1hdGNoaW5nIG1vZGVcbiAgICAvLyAtIGVsc2Ugbm90aGluZ1xuICAgIC8vXG4gICAgLy8gQWx3YXlzIHB1dCB0aGUgKD86JHwvKSBvbiBuZWdhdGVkIHRhaWxzLCB0aG91Z2gsIGJlY2F1c2UgdGhhdCBoYXMgdG8gYmVcbiAgICAvLyB0aGVyZSB0byBiaW5kIHRoZSBlbmQgb2YgdGhlIG5lZ2F0ZWQgcGF0dGVybiBwb3J0aW9uLCBhbmQgaXQncyBlYXNpZXIgdG9cbiAgICAvLyBqdXN0IHN0aWNrIGl0IGluIG5vdyByYXRoZXIgdGhhbiB0cnkgdG8gaW5qZWN0IGl0IGxhdGVyIGluIHRoZSBtaWRkbGUgb2ZcbiAgICAvLyB0aGUgcGF0dGVybi5cbiAgICAvL1xuICAgIC8vIFdlIGNhbiBqdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgZW5kLCBhbmQgbGVhdmUgaXQgdXAgdG8gdGhlIGNhbGxlclxuICAgIC8vIHRvIGtub3cgd2hldGhlciBpdCdzIGdvaW5nIHRvIGJlIHVzZWQgam9pbmVkIG9yIGluIHBhcnRzLlxuICAgIC8vIEFuZCwgaWYgdGhlIHN0YXJ0IGlzIGFkanVzdGVkIHNsaWdodGx5LCBjYW4gZG8gdGhlIHNhbWUgdGhlcmU6XG4gICAgLy8gLSBpZiBub3QgaXNTdGFydDogbm90aGluZ1xuICAgIC8vIC0gaWYgdHJhdmVyc2FsIHBvc3NpYmxlLCBidXQgbm90IGFsbG93ZWQ6ICg/Oi98XikoPyFcXC5cXC4/JClcbiAgICAvLyAtIGlmIGRvdHMgYWxsb3dlZCBvciBub3QgcG9zc2libGU6ICg/Oi98XilcbiAgICAvLyAtIGlmIGRvdHMgcG9zc2libGUgYW5kIG5vdCBhbGxvd2VkOiAoPzovfF4pKD8hXFwuKVxuICAgIC8vXG4gICAgLy8gQnV0IGl0J3MgYmV0dGVyIHRvIGhhdmUgYSBzaW1wbGVyIGJpbmRpbmcgd2l0aG91dCBhIGNvbmRpdGlvbmFsLCBmb3JcbiAgICAvLyBwZXJmb3JtYW5jZSwgc28gcHJvYmFibHkgYmV0dGVyIHRvIHJldHVybiBib3RoIHN0YXJ0IG9wdGlvbnMuXG4gICAgLy9cbiAgICAvLyBUaGVuIHRoZSBjYWxsZXIganVzdCBpZ25vcmVzIHRoZSBlbmQgaWYgaXQncyBub3QgdGhlIGZpcnN0IHBhdHRlcm4sXG4gICAgLy8gYW5kIHRoZSBzdGFydCBhbHdheXMgZ2V0cyBhcHBsaWVkLlxuICAgIC8vXG4gICAgLy8gQnV0IHRoYXQncyBhbHdheXMgZ29pbmcgdG8gYmUgJCBpZiBpdCdzIHRoZSBlbmRpbmcgcGF0dGVybiwgb3Igbm90aGluZyxcbiAgICAvLyBzbyB0aGUgY2FsbGVyIGNhbiBqdXN0IGF0dGFjaCAkIGF0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4gd2hlbiBidWlsZGluZy5cbiAgICAvL1xuICAgIC8vIFNvIHRoZSB0b2RvIGlzOlxuICAgIC8vIC0gYmV0dGVyIGRldGVjdCB3aGF0IGtpbmQgb2Ygc3RhcnQgaXMgbmVlZGVkXG4gICAgLy8gLSByZXR1cm4gYm90aCBmbGF2b3JzIG9mIHN0YXJ0aW5nIHBhdHRlcm5cbiAgICAvLyAtIGF0dGFjaCAkIGF0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4gd2hlbiBjcmVhdGluZyB0aGUgYWN0dWFsIFJlZ0V4cFxuICAgIC8vXG4gICAgLy8gQWgsIGJ1dCB3YWl0LCBubywgdGhhdCBhbGwgb25seSBhcHBsaWVzIHRvIHRoZSByb290IHdoZW4gdGhlIGZpcnN0IHBhdHRlcm5cbiAgICAvLyBpcyBub3QgYW4gZXh0Z2xvYi4gSWYgdGhlIGZpcnN0IHBhdHRlcm4gSVMgYW4gZXh0Z2xvYiwgdGhlbiB3ZSBuZWVkIGFsbFxuICAgIC8vIHRoYXQgZG90IHByZXZlbnRpb24gYml6IHRvIGxpdmUgaW4gdGhlIGV4dGdsb2IgcG9ydGlvbnMsIGJlY2F1c2UgZWdcbiAgICAvLyArKCp8LngqKSBjYW4gbWF0Y2ggLnh5IGJ1dCBub3QgLnl4LlxuICAgIC8vXG4gICAgLy8gU28sIHJldHVybiB0aGUgdHdvIGZsYXZvcnMgaWYgaXQncyAjcm9vdCBhbmQgdGhlIGZpcnN0IGNoaWxkIGlzIG5vdCBhblxuICAgIC8vIEFTVCwgb3RoZXJ3aXNlIGxlYXZlIGl0IHRvIHRoZSBjaGlsZCBBU1QgdG8gaGFuZGxlIGl0LCBhbmQgdGhlcmUsXG4gICAgLy8gdXNlIHRoZSAoPzpefC8pIHN0eWxlIG9mIHN0YXJ0IGJpbmRpbmcuXG4gICAgLy9cbiAgICAvLyBFdmVuIHNpbXBsaWZpZWQgZnVydGhlcjpcbiAgICAvLyAtIFNpbmNlIHRoZSBzdGFydCBmb3IgYSBqb2luIGlzIGVnIC8oPyFcXC4pIGFuZCB0aGUgc3RhcnQgZm9yIGEgcGFydFxuICAgIC8vIGlzIF4oPyFcXC4pLCB3ZSBjYW4ganVzdCBwcmVwZW5kICg/IVxcLikgdG8gdGhlIHBhdHRlcm4gKGVpdGhlciByb290XG4gICAgLy8gb3Igc3RhcnQgb3Igd2hhdGV2ZXIpIGFuZCBwcmVwZW5kIF4gb3IgLyBhdCB0aGUgUmVnZXhwIGNvbnN0cnVjdGlvbi5cbiAgICB0b1JlZ0V4cFNvdXJjZShhbGxvd0RvdCkge1xuICAgICAgICBjb25zdCBkb3QgPSBhbGxvd0RvdCA/PyAhIXRoaXMuI29wdGlvbnMuZG90O1xuICAgICAgICBpZiAodGhpcy4jcm9vdCA9PT0gdGhpcykge1xuICAgICAgICAgICAgdGhpcy4jZmxhdHRlbigpO1xuICAgICAgICAgICAgdGhpcy4jZmlsbE5lZ3MoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRXh0Z2xvYkFTVCh0aGlzKSkge1xuICAgICAgICAgICAgY29uc3Qgbm9FbXB0eSA9IHRoaXMuaXNTdGFydCgpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5pc0VuZCgpICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI3BhcnRzLnNvbWUocyA9PiB0eXBlb2YgcyAhPT0gJ3N0cmluZycpO1xuICAgICAgICAgICAgY29uc3Qgc3JjID0gdGhpcy4jcGFydHNcbiAgICAgICAgICAgICAgICAubWFwKHAgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtyZSwgXywgaGFzTWFnaWMsIHVmbGFnXSA9IHR5cGVvZiBwID09PSAnc3RyaW5nJyA/XG4gICAgICAgICAgICAgICAgICAgIF9hLiNwYXJzZUdsb2IocCwgdGhpcy4jaGFzTWFnaWMsIG5vRW1wdHkpXG4gICAgICAgICAgICAgICAgICAgIDogcC50b1JlZ0V4cFNvdXJjZShhbGxvd0RvdCk7XG4gICAgICAgICAgICAgICAgdGhpcy4jaGFzTWFnaWMgPSB0aGlzLiNoYXNNYWdpYyB8fCBoYXNNYWdpYztcbiAgICAgICAgICAgICAgICB0aGlzLiN1ZmxhZyA9IHRoaXMuI3VmbGFnIHx8IHVmbGFnO1xuICAgICAgICAgICAgICAgIHJldHVybiByZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KCkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuI3BhcnRzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBzdHJpbmcgdGhhdCB3aWxsIG1hdGNoIHRoZSBzdGFydCBvZiB0aGUgcGF0dGVybixcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gd2UgbmVlZCB0byBwcm90ZWN0IGFnYWluc3QgZG90cyBhbmQgc3VjaC5cbiAgICAgICAgICAgICAgICAgICAgLy8gJy4nIGFuZCAnLi4nIGNhbm5vdCBtYXRjaCB1bmxlc3MgdGhlIHBhdHRlcm4gaXMgdGhhdCBleGFjdGx5LFxuICAgICAgICAgICAgICAgICAgICAvLyBldmVuIGlmIGl0IHN0YXJ0cyB3aXRoIC4gb3IgZG90OnRydWUgaXMgc2V0LlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3RUcmF2QWxsb3dlZCA9IHRoaXMuI3BhcnRzLmxlbmd0aCA9PT0gMSAmJiBqdXN0RG90cy5oYXModGhpcy4jcGFydHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRvdFRyYXZBbGxvd2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHMgPSBhZGRQYXR0ZXJuU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBoYXZlIGEgcG9zc2liaWxpdHkgb2YgbWF0Y2hpbmcgLiBvciAuLixcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBwcmV2ZW50IHRoYXQuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZWVkTm9UcmF2ID0gXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkb3RzIGFyZSBhbGxvd2VkLCBhbmQgdGhlIHBhdHRlcm4gc3RhcnRzIHdpdGggWyBvciAuXG4gICAgICAgICAgICAgICAgICAgICAgICAoZG90ICYmIGFwcy5oYXMoc3JjLmNoYXJBdCgwKSkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHBhdHRlcm4gc3RhcnRzIHdpdGggXFwuLCBhbmQgdGhlbiBbIG9yIC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3JjLnN0YXJ0c1dpdGgoJ1xcXFwuJykgJiYgYXBzLmhhcyhzcmMuY2hhckF0KDIpKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcGF0dGVybiBzdGFydHMgd2l0aCBcXC5cXC4sIGFuZCB0aGVuIFsgb3IgLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzcmMuc3RhcnRzV2l0aCgnXFxcXC5cXFxcLicpICYmIGFwcy5oYXMoc3JjLmNoYXJBdCg0KSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gbmVlZCB0byBwcmV2ZW50IGRvdHMgaWYgaXQgY2FuJ3QgbWF0Y2ggYSBkb3QsIG9yIGlmIGFcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1Yi1wYXR0ZXJuIHdpbGwgYmUgcHJldmVudGluZyBpdCBhbnl3YXkuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZWVkTm9Eb3QgPSAhZG90ICYmICFhbGxvd0RvdCAmJiBhcHMuaGFzKHNyYy5jaGFyQXQoMCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWROb1RyYXYgPyBzdGFydE5vVHJhdmVyc2FsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbmVlZE5vRG90ID8gc3RhcnROb0RvdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFwcGVuZCB0aGUgXCJlbmQgb2YgcGF0aCBwb3J0aW9uXCIgcGF0dGVybiB0byBuZWdhdGlvbiB0YWlsc1xuICAgICAgICAgICAgbGV0IGVuZCA9ICcnO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNFbmQoKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuI3Jvb3QuI2ZpbGxlZE5lZ3MgJiZcbiAgICAgICAgICAgICAgICB0aGlzLiNwYXJlbnQ/LnR5cGUgPT09ICchJykge1xuICAgICAgICAgICAgICAgIGVuZCA9ICcoPzokfFxcXFwvKSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmaW5hbCA9IHN0YXJ0ICsgc3JjICsgZW5kO1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBmaW5hbCxcbiAgICAgICAgICAgICAgICB1bmVzY2FwZShzcmMpLFxuICAgICAgICAgICAgICAgICh0aGlzLiNoYXNNYWdpYyA9ICEhdGhpcy4jaGFzTWFnaWMpLFxuICAgICAgICAgICAgICAgIHRoaXMuI3VmbGFnLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgYm9keSAqdHdpY2UqIGlmIGl0J3MgYSByZXBlYXQgcGF0dGVyblxuICAgICAgICAvLyBhdCB0aGUgc3RhcnQsIG9uY2UgaW4gbm9kb3QgbW9kZSwgdGhlbiBhZ2FpbiBpbiBkb3QgbW9kZSwgc28gYVxuICAgICAgICAvLyBwYXR0ZXJuIGxpa2UgKig/KSBjYW4gbWF0Y2ggJ3gueSdcbiAgICAgICAgY29uc3QgcmVwZWF0ZWQgPSB0aGlzLnR5cGUgPT09ICcqJyB8fCB0aGlzLnR5cGUgPT09ICcrJztcbiAgICAgICAgLy8gc29tZSBraW5kIG9mIGV4dGdsb2JcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnR5cGUgPT09ICchJyA/ICcoPzooPyEoPzonIDogJyg/Oic7XG4gICAgICAgIGxldCBib2R5ID0gdGhpcy4jcGFydHNUb1JlZ0V4cChkb3QpO1xuICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KCkgJiYgdGhpcy5pc0VuZCgpICYmICFib2R5ICYmIHRoaXMudHlwZSAhPT0gJyEnKSB7XG4gICAgICAgICAgICAvLyBpbnZhbGlkIGV4dGdsb2IsIGhhcyB0byBhdCBsZWFzdCBiZSAqc29tZXRoaW5nKiBwcmVzZW50LCBpZiBpdCdzXG4gICAgICAgICAgICAvLyB0aGUgZW50aXJlIHBhdGggcG9ydGlvbi5cbiAgICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgICAgICAgICBtZS4jcGFydHMgPSBbc107XG4gICAgICAgICAgICBtZS50eXBlID0gbnVsbDtcbiAgICAgICAgICAgIG1lLiNoYXNNYWdpYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBbcywgdW5lc2NhcGUodGhpcy50b1N0cmluZygpKSwgZmFsc2UsIGZhbHNlXTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYm9keURvdEFsbG93ZWQgPSAhcmVwZWF0ZWQgfHwgYWxsb3dEb3QgfHwgZG90IHx8ICFzdGFydE5vRG90ID9cbiAgICAgICAgICAgICcnXG4gICAgICAgICAgICA6IHRoaXMuI3BhcnRzVG9SZWdFeHAodHJ1ZSk7XG4gICAgICAgIGlmIChib2R5RG90QWxsb3dlZCA9PT0gYm9keSkge1xuICAgICAgICAgICAgYm9keURvdEFsbG93ZWQgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9keURvdEFsbG93ZWQpIHtcbiAgICAgICAgICAgIGJvZHkgPSBgKD86JHtib2R5fSkoPzoke2JvZHlEb3RBbGxvd2VkfSkqP2A7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYW4gZW1wdHkgISgpIGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0byBhIHN0YXJOb0VtcHR5XG4gICAgICAgIGxldCBmaW5hbCA9ICcnO1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnIScgJiYgdGhpcy4jZW1wdHlFeHQpIHtcbiAgICAgICAgICAgIGZpbmFsID0gKHRoaXMuaXNTdGFydCgpICYmICFkb3QgPyBzdGFydE5vRG90IDogJycpICsgc3Rhck5vRW1wdHk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjbG9zZSA9IHRoaXMudHlwZSA9PT0gJyEnID9cbiAgICAgICAgICAgICAgICAvLyAhKCkgbXVzdCBtYXRjaCBzb21ldGhpbmcsYnV0ICEoeCkgY2FuIG1hdGNoICcnXG4gICAgICAgICAgICAgICAgJykpJyArXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmlzU3RhcnQoKSAmJiAhZG90ICYmICFhbGxvd0RvdCA/IHN0YXJ0Tm9Eb3QgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICBzdGFyICtcbiAgICAgICAgICAgICAgICAgICAgJyknXG4gICAgICAgICAgICAgICAgOiB0aGlzLnR5cGUgPT09ICdAJyA/ICcpJ1xuICAgICAgICAgICAgICAgICAgICA6IHRoaXMudHlwZSA9PT0gJz8nID8gJyk/J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnR5cGUgPT09ICcrJyAmJiBib2R5RG90QWxsb3dlZCA/ICcpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy50eXBlID09PSAnKicgJiYgYm9keURvdEFsbG93ZWQgPyBgKT9gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYCkke3RoaXMudHlwZX1gO1xuICAgICAgICAgICAgZmluYWwgPSBzdGFydCArIGJvZHkgKyBjbG9zZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgZmluYWwsXG4gICAgICAgICAgICB1bmVzY2FwZShib2R5KSxcbiAgICAgICAgICAgICh0aGlzLiNoYXNNYWdpYyA9ICEhdGhpcy4jaGFzTWFnaWMpLFxuICAgICAgICAgICAgdGhpcy4jdWZsYWcsXG4gICAgICAgIF07XG4gICAgfVxuICAgICNmbGF0dGVuKCkge1xuICAgICAgICBpZiAoIWlzRXh0Z2xvYkFTVCh0aGlzKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXMuI3BhcnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBwLiNmbGF0dGVuKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZG8gdXAgdG8gMTAgcGFzc2VzIHRvIGZsYXR0ZW4gYXMgbXVjaCBhcyBwb3NzaWJsZVxuICAgICAgICAgICAgbGV0IGl0ZXJhdGlvbnMgPSAwO1xuICAgICAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuI3BhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLiNwYXJ0c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYy4jZmxhdHRlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI2NhbkFkb3B0KGMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2Fkb3B0KGMsIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy4jY2FuQWRvcHRXaXRoU3BhY2UoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jYWRvcHRXaXRoU3BhY2UoYywgaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLiNjYW5Vc3VycChjKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiN1c3VycChjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKCFkb25lICYmICsraXRlcmF0aW9ucyA8IDEwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiN0b1N0cmluZyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgI3BhcnRzVG9SZWdFeHAoZG90KSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwYXJ0c1xuICAgICAgICAgICAgLm1hcChwID0+IHtcbiAgICAgICAgICAgIC8vIGV4dGdsb2IgQVNUcyBzaG91bGQgb25seSBjb250YWluIHBhcmVudCBBU1RzXG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cmluZyB0eXBlIGluIGV4dGdsb2IgYXN0Pz8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAvLyBjYW4gaWdub3JlIGhhc01hZ2ljLCBiZWNhdXNlIGV4dGdsb2JzIGFyZSBhbHJlYWR5IGFsd2F5cyBtYWdpY1xuICAgICAgICAgICAgY29uc3QgW3JlLCBfLCBfaGFzTWFnaWMsIHVmbGFnXSA9IHAudG9SZWdFeHBTb3VyY2UoZG90KTtcbiAgICAgICAgICAgIHRoaXMuI3VmbGFnID0gdGhpcy4jdWZsYWcgfHwgdWZsYWc7XG4gICAgICAgICAgICByZXR1cm4gcmU7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKHAgPT4gISh0aGlzLmlzU3RhcnQoKSAmJiB0aGlzLmlzRW5kKCkpIHx8ICEhcClcbiAgICAgICAgICAgIC5qb2luKCd8Jyk7XG4gICAgfVxuICAgIHN0YXRpYyAjcGFyc2VHbG9iKGdsb2IsIGhhc01hZ2ljLCBub0VtcHR5ID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IGVzY2FwaW5nID0gZmFsc2U7XG4gICAgICAgIGxldCByZSA9ICcnO1xuICAgICAgICBsZXQgdWZsYWcgPSBmYWxzZTtcbiAgICAgICAgLy8gbXVsdGlwbGUgc3RhcnMgdGhhdCBhcmVuJ3QgZ2xvYnN0YXJzIGNvYWxlc2NlIGludG8gb25lICpcbiAgICAgICAgbGV0IGluU3RhciA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdsb2IubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBnbG9iLmNoYXJBdChpKTtcbiAgICAgICAgICAgIGlmIChlc2NhcGluZykge1xuICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmUgKz0gKHJlU3BlY2lhbHMuaGFzKGMpID8gJ1xcXFwnIDogJycpICsgYztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnKicpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5TdGFyKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpblN0YXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlICs9IG5vRW1wdHkgJiYgL15bKl0rJC8udGVzdChnbG9iKSA/IHN0YXJOb0VtcHR5IDogc3RhcjtcbiAgICAgICAgICAgICAgICBoYXNNYWdpYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpblN0YXIgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gZ2xvYi5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlICs9ICdcXFxcXFxcXCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlc2NhcGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09ICdbJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtzcmMsIG5lZWRVZmxhZywgY29uc3VtZWQsIG1hZ2ljXSA9IHBhcnNlQ2xhc3MoZ2xvYiwgaSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnN1bWVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlICs9IHNyYztcbiAgICAgICAgICAgICAgICAgICAgdWZsYWcgPSB1ZmxhZyB8fCBuZWVkVWZsYWc7XG4gICAgICAgICAgICAgICAgICAgIGkgKz0gY29uc3VtZWQgLSAxO1xuICAgICAgICAgICAgICAgICAgICBoYXNNYWdpYyA9IGhhc01hZ2ljIHx8IG1hZ2ljO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJz8nKSB7XG4gICAgICAgICAgICAgICAgcmUgKz0gcW1hcms7XG4gICAgICAgICAgICAgICAgaGFzTWFnaWMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmUgKz0gcmVnRXhwRXNjYXBlKGMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcmUsIHVuZXNjYXBlKGdsb2IpLCAhIWhhc01hZ2ljLCB1ZmxhZ107XG4gICAgfVxufVxuX2EgPSBBU1Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hc3QuanMubWFwIiwKICAgICIvKipcbiAqIEVzY2FwZSBhbGwgbWFnaWMgY2hhcmFjdGVycyBpbiBhIGdsb2IgcGF0dGVybi5cbiAqXG4gKiBJZiB0aGUge0BsaW5rIE1pbmltYXRjaE9wdGlvbnMud2luZG93c1BhdGhzTm9Fc2NhcGV9XG4gKiBvcHRpb24gaXMgdXNlZCwgdGhlbiBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkIGJ5IHdyYXBwaW5nIGluIGBbXWAsIGJlY2F1c2VcbiAqIGEgbWFnaWMgY2hhcmFjdGVyIHdyYXBwZWQgaW4gYSBjaGFyYWN0ZXIgY2xhc3MgY2FuIG9ubHkgYmUgc2F0aXNmaWVkIGJ5XG4gKiB0aGF0IGV4YWN0IGNoYXJhY3Rlci4gIEluIHRoaXMgbW9kZSwgYFxcYCBpcyBfbm90XyBlc2NhcGVkLCBiZWNhdXNlIGl0IGlzXG4gKiBub3QgaW50ZXJwcmV0ZWQgYXMgYSBtYWdpYyBjaGFyYWN0ZXIsIGJ1dCBpbnN0ZWFkIGFzIGEgcGF0aCBzZXBhcmF0b3IuXG4gKlxuICogSWYgdGhlIHtAbGluayBNaW5pbWF0Y2hPcHRpb25zLm1hZ2ljYWxCcmFjZXN9IG9wdGlvbiBpcyB1c2VkLFxuICogdGhlbiBicmFjZXMgKGB7YCBhbmQgYH1gKSB3aWxsIGJlIGVzY2FwZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBlc2NhcGUgPSAocywgeyB3aW5kb3dzUGF0aHNOb0VzY2FwZSA9IGZhbHNlLCBtYWdpY2FsQnJhY2VzID0gZmFsc2UsIH0gPSB7fSkgPT4ge1xuICAgIC8vIGRvbid0IG5lZWQgdG8gZXNjYXBlICtAISBiZWNhdXNlIHdlIGVzY2FwZSB0aGUgcGFyZW5zXG4gICAgLy8gdGhhdCBtYWtlIHRob3NlIG1hZ2ljLCBhbmQgZXNjYXBpbmcgISBhcyBbIV0gaXNuJ3QgdmFsaWQsXG4gICAgLy8gYmVjYXVzZSBbIV1dIGlzIGEgdmFsaWQgZ2xvYiBjbGFzcyBtZWFuaW5nIG5vdCAnXScuXG4gICAgaWYgKG1hZ2ljYWxCcmFjZXMpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvd3NQYXRoc05vRXNjYXBlID9cbiAgICAgICAgICAgIHMucmVwbGFjZSgvWz8qKClbXFxde31dL2csICdbJCZdJylcbiAgICAgICAgICAgIDogcy5yZXBsYWNlKC9bPyooKVtcXF1cXFxce31dL2csICdcXFxcJCYnKTtcbiAgICB9XG4gICAgcmV0dXJuIHdpbmRvd3NQYXRoc05vRXNjYXBlID9cbiAgICAgICAgcy5yZXBsYWNlKC9bPyooKVtcXF1dL2csICdbJCZdJylcbiAgICAgICAgOiBzLnJlcGxhY2UoL1s/KigpW1xcXVxcXFxdL2csICdcXFxcJCYnKTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lc2NhcGUuanMubWFwIiwKICAgICJpbXBvcnQgeyBleHBhbmQgfSBmcm9tICdicmFjZS1leHBhbnNpb24nO1xuaW1wb3J0IHsgYXNzZXJ0VmFsaWRQYXR0ZXJuIH0gZnJvbSAnLi9hc3NlcnQtdmFsaWQtcGF0dGVybi5qcyc7XG5pbXBvcnQgeyBBU1QgfSBmcm9tICcuL2FzdC5qcyc7XG5pbXBvcnQgeyBlc2NhcGUgfSBmcm9tICcuL2VzY2FwZS5qcyc7XG5pbXBvcnQgeyB1bmVzY2FwZSB9IGZyb20gJy4vdW5lc2NhcGUuanMnO1xuZXhwb3J0IGNvbnN0IG1pbmltYXRjaCA9IChwLCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBhc3NlcnRWYWxpZFBhdHRlcm4ocGF0dGVybik7XG4gICAgLy8gc2hvcnRjdXQ6IGNvbW1lbnRzIG1hdGNoIG5vdGhpbmcuXG4gICAgaWYgKCFvcHRpb25zLm5vY29tbWVudCAmJiBwYXR0ZXJuLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucykubWF0Y2gocCk7XG59O1xuLy8gT3B0aW1pemVkIGNoZWNraW5nIGZvciB0aGUgbW9zdCBjb21tb24gZ2xvYiBwYXR0ZXJucy5cbmNvbnN0IHN0YXJEb3RFeHRSRSA9IC9eXFwqKyhbXitAIT8qWyhdKikkLztcbmNvbnN0IHN0YXJEb3RFeHRUZXN0ID0gKGV4dCkgPT4gKGYpID0+ICFmLnN0YXJ0c1dpdGgoJy4nKSAmJiBmLmVuZHNXaXRoKGV4dCk7XG5jb25zdCBzdGFyRG90RXh0VGVzdERvdCA9IChleHQpID0+IChmKSA9PiBmLmVuZHNXaXRoKGV4dCk7XG5jb25zdCBzdGFyRG90RXh0VGVzdE5vY2FzZSA9IChleHQpID0+IHtcbiAgICBleHQgPSBleHQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGYpID0+ICFmLnN0YXJ0c1dpdGgoJy4nKSAmJiBmLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBzdGFyRG90RXh0VGVzdE5vY2FzZURvdCA9IChleHQpID0+IHtcbiAgICBleHQgPSBleHQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGYpID0+IGYudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHN0YXJEb3RTdGFyUkUgPSAvXlxcKitcXC5cXCorJC87XG5jb25zdCBzdGFyRG90U3RhclRlc3QgPSAoZikgPT4gIWYuc3RhcnRzV2l0aCgnLicpICYmIGYuaW5jbHVkZXMoJy4nKTtcbmNvbnN0IHN0YXJEb3RTdGFyVGVzdERvdCA9IChmKSA9PiBmICE9PSAnLicgJiYgZiAhPT0gJy4uJyAmJiBmLmluY2x1ZGVzKCcuJyk7XG5jb25zdCBkb3RTdGFyUkUgPSAvXlxcLlxcKiskLztcbmNvbnN0IGRvdFN0YXJUZXN0ID0gKGYpID0+IGYgIT09ICcuJyAmJiBmICE9PSAnLi4nICYmIGYuc3RhcnRzV2l0aCgnLicpO1xuY29uc3Qgc3RhclJFID0gL15cXCorJC87XG5jb25zdCBzdGFyVGVzdCA9IChmKSA9PiBmLmxlbmd0aCAhPT0gMCAmJiAhZi5zdGFydHNXaXRoKCcuJyk7XG5jb25zdCBzdGFyVGVzdERvdCA9IChmKSA9PiBmLmxlbmd0aCAhPT0gMCAmJiBmICE9PSAnLicgJiYgZiAhPT0gJy4uJztcbmNvbnN0IHFtYXJrc1JFID0gL15cXD8rKFteK0AhPypbKF0qKT8kLztcbmNvbnN0IHFtYXJrc1Rlc3ROb2Nhc2UgPSAoWyQwLCBleHQgPSAnJ10pID0+IHtcbiAgICBjb25zdCBub2V4dCA9IHFtYXJrc1Rlc3ROb0V4dChbJDBdKTtcbiAgICBpZiAoIWV4dClcbiAgICAgICAgcmV0dXJuIG5vZXh0O1xuICAgIGV4dCA9IGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoZikgPT4gbm9leHQoZikgJiYgZi50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3QgcW1hcmtzVGVzdE5vY2FzZURvdCA9IChbJDAsIGV4dCA9ICcnXSkgPT4ge1xuICAgIGNvbnN0IG5vZXh0ID0gcW1hcmtzVGVzdE5vRXh0RG90KFskMF0pO1xuICAgIGlmICghZXh0KVxuICAgICAgICByZXR1cm4gbm9leHQ7XG4gICAgZXh0ID0gZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIChmKSA9PiBub2V4dChmKSAmJiBmLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBxbWFya3NUZXN0RG90ID0gKFskMCwgZXh0ID0gJyddKSA9PiB7XG4gICAgY29uc3Qgbm9leHQgPSBxbWFya3NUZXN0Tm9FeHREb3QoWyQwXSk7XG4gICAgcmV0dXJuICFleHQgPyBub2V4dCA6IChmKSA9PiBub2V4dChmKSAmJiBmLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3QgcW1hcmtzVGVzdCA9IChbJDAsIGV4dCA9ICcnXSkgPT4ge1xuICAgIGNvbnN0IG5vZXh0ID0gcW1hcmtzVGVzdE5vRXh0KFskMF0pO1xuICAgIHJldHVybiAhZXh0ID8gbm9leHQgOiAoZikgPT4gbm9leHQoZikgJiYgZi5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHFtYXJrc1Rlc3ROb0V4dCA9IChbJDBdKSA9PiB7XG4gICAgY29uc3QgbGVuID0gJDAubGVuZ3RoO1xuICAgIHJldHVybiAoZikgPT4gZi5sZW5ndGggPT09IGxlbiAmJiAhZi5zdGFydHNXaXRoKCcuJyk7XG59O1xuY29uc3QgcW1hcmtzVGVzdE5vRXh0RG90ID0gKFskMF0pID0+IHtcbiAgICBjb25zdCBsZW4gPSAkMC5sZW5ndGg7XG4gICAgcmV0dXJuIChmKSA9PiBmLmxlbmd0aCA9PT0gbGVuICYmIGYgIT09ICcuJyAmJiBmICE9PSAnLi4nO1xufTtcbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuY29uc3QgZGVmYXVsdFBsYXRmb3JtID0gKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiBwcm9jZXNzID9cbiAgICAodHlwZW9mIHByb2Nlc3MuZW52ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICBwcm9jZXNzLmVudiAmJlxuICAgICAgICBwcm9jZXNzLmVudi5fX01JTklNQVRDSF9URVNUSU5HX1BMQVRGT1JNX18pIHx8XG4gICAgICAgIHByb2Nlc3MucGxhdGZvcm1cbiAgICA6ICdwb3NpeCcpO1xuY29uc3QgcGF0aCA9IHtcbiAgICB3aW4zMjogeyBzZXA6ICdcXFxcJyB9LFxuICAgIHBvc2l4OiB7IHNlcDogJy8nIH0sXG59O1xuLyogYzggaWdub3JlIHN0b3AgKi9cbmV4cG9ydCBjb25zdCBzZXAgPSBkZWZhdWx0UGxhdGZvcm0gPT09ICd3aW4zMicgPyBwYXRoLndpbjMyLnNlcCA6IHBhdGgucG9zaXguc2VwO1xubWluaW1hdGNoLnNlcCA9IHNlcDtcbmV4cG9ydCBjb25zdCBHTE9CU1RBUiA9IFN5bWJvbCgnZ2xvYnN0YXIgKionKTtcbm1pbmltYXRjaC5HTE9CU1RBUiA9IEdMT0JTVEFSO1xuLy8gYW55IHNpbmdsZSB0aGluZyBvdGhlciB0aGFuIC9cbi8vIGRvbid0IG5lZWQgdG8gZXNjYXBlIC8gd2hlbiB1c2luZyBuZXcgUmVnRXhwKClcbmNvbnN0IHFtYXJrID0gJ1teL10nO1xuLy8gKiA9PiBhbnkgbnVtYmVyIG9mIGNoYXJhY3RlcnNcbmNvbnN0IHN0YXIgPSBxbWFyayArICcqPyc7XG4vLyAqKiB3aGVuIGRvdHMgYXJlIGFsbG93ZWQuICBBbnl0aGluZyBnb2VzLCBleGNlcHQgLi4gYW5kIC5cbi8vIG5vdCAoXiBvciAvIGZvbGxvd2VkIGJ5IG9uZSBvciB0d28gZG90cyBmb2xsb3dlZCBieSAkIG9yIC8pLFxuLy8gZm9sbG93ZWQgYnkgYW55dGhpbmcsIGFueSBudW1iZXIgb2YgdGltZXMuXG5jb25zdCB0d29TdGFyRG90ID0gJyg/Oig/ISg/OlxcXFwvfF4pKD86XFxcXC57MSwyfSkoJHxcXFxcLykpLikqPyc7XG4vLyBub3QgYSBeIG9yIC8gZm9sbG93ZWQgYnkgYSBkb3QsXG4vLyBmb2xsb3dlZCBieSBhbnl0aGluZywgYW55IG51bWJlciBvZiB0aW1lcy5cbmNvbnN0IHR3b1N0YXJOb0RvdCA9ICcoPzooPyEoPzpcXFxcL3xeKVxcXFwuKS4pKj8nO1xuZXhwb3J0IGNvbnN0IGZpbHRlciA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IChwKSA9PiBtaW5pbWF0Y2gocCwgcGF0dGVybiwgb3B0aW9ucyk7XG5taW5pbWF0Y2guZmlsdGVyID0gZmlsdGVyO1xuY29uc3QgZXh0ID0gKGEsIGIgPSB7fSkgPT4gT2JqZWN0LmFzc2lnbih7fSwgYSwgYik7XG5leHBvcnQgY29uc3QgZGVmYXVsdHMgPSAoZGVmKSA9PiB7XG4gICAgaWYgKCFkZWYgfHwgdHlwZW9mIGRlZiAhPT0gJ29iamVjdCcgfHwgIU9iamVjdC5rZXlzKGRlZikubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBtaW5pbWF0Y2g7XG4gICAgfVxuICAgIGNvbnN0IG9yaWcgPSBtaW5pbWF0Y2g7XG4gICAgY29uc3QgbSA9IChwLCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG9yaWcocCwgcGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG0sIHtcbiAgICAgICAgTWluaW1hdGNoOiBjbGFzcyBNaW5pbWF0Y2ggZXh0ZW5kcyBvcmlnLk1pbmltYXRjaCB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgICAgICBzdXBlcihwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0aWMgZGVmYXVsdHMob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnLmRlZmF1bHRzKGV4dChkZWYsIG9wdGlvbnMpKS5NaW5pbWF0Y2g7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIEFTVDogY2xhc3MgQVNUIGV4dGVuZHMgb3JpZy5BU1Qge1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBjb25zdHJ1Y3Rvcih0eXBlLCBwYXJlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgICAgIHN1cGVyKHR5cGUsIHBhcmVudCwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHN0YXRpYyBmcm9tR2xvYihwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZy5BU1QuZnJvbUdsb2IocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1bmVzY2FwZTogKHMsIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy51bmVzY2FwZShzLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIGVzY2FwZTogKHMsIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy5lc2NhcGUocywgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBmaWx0ZXI6IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG9yaWcuZmlsdGVyKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgZGVmYXVsdHM6IChvcHRpb25zKSA9PiBvcmlnLmRlZmF1bHRzKGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgbWFrZVJlOiAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLm1ha2VSZShwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIGJyYWNlRXhwYW5kOiAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLmJyYWNlRXhwYW5kKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgbWF0Y2g6IChsaXN0LCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG9yaWcubWF0Y2gobGlzdCwgcGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBzZXA6IG9yaWcuc2VwLFxuICAgICAgICBHTE9CU1RBUjogR0xPQlNUQVIsXG4gICAgfSk7XG59O1xubWluaW1hdGNoLmRlZmF1bHRzID0gZGVmYXVsdHM7XG4vLyBCcmFjZSBleHBhbnNpb246XG4vLyBhe2IsY31kIC0+IGFiZCBhY2Rcbi8vIGF7Yix9YyAtPiBhYmMgYWNcbi8vIGF7MC4uM31kIC0+IGEwZCBhMWQgYTJkIGEzZFxuLy8gYXtiLGN7ZCxlfWZ9ZyAtPiBhYmcgYWNkZmcgYWNlZmdcbi8vIGF7YixjfWR7ZSxmfWcgLT4gYWJkZWcgYWNkZWcgYWJkZWcgYWJkZmdcbi8vXG4vLyBJbnZhbGlkIHNldHMgYXJlIG5vdCBleHBhbmRlZC5cbi8vIGF7Mi4ufWIgLT4gYXsyLi59YlxuLy8gYXtifWMgLT4gYXtifWNcbmV4cG9ydCBjb25zdCBicmFjZUV4cGFuZCA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBhc3NlcnRWYWxpZFBhdHRlcm4ocGF0dGVybik7XG4gICAgLy8gVGhhbmtzIHRvIFlldGluZyBMaSA8aHR0cHM6Ly9naXRodWIuY29tL3lldGluZ2xpPiBmb3JcbiAgICAvLyBpbXByb3ZpbmcgdGhpcyByZWdleHAgdG8gYXZvaWQgYSBSZURPUyB2dWxuZXJhYmlsaXR5LlxuICAgIGlmIChvcHRpb25zLm5vYnJhY2UgfHwgIS9cXHsoPzooPyFcXHspLikqXFx9Ly50ZXN0KHBhdHRlcm4pKSB7XG4gICAgICAgIC8vIHNob3J0Y3V0LiBubyBuZWVkIHRvIGV4cGFuZC5cbiAgICAgICAgcmV0dXJuIFtwYXR0ZXJuXTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGFuZChwYXR0ZXJuLCB7IG1heDogb3B0aW9ucy5icmFjZUV4cGFuZE1heCB9KTtcbn07XG5taW5pbWF0Y2guYnJhY2VFeHBhbmQgPSBicmFjZUV4cGFuZDtcbi8vIHBhcnNlIGEgY29tcG9uZW50IG9mIHRoZSBleHBhbmRlZCBzZXQuXG4vLyBBdCB0aGlzIHBvaW50LCBubyBwYXR0ZXJuIG1heSBjb250YWluIFwiL1wiIGluIGl0XG4vLyBzbyB3ZSdyZSBnb2luZyB0byByZXR1cm4gYSAyZCBhcnJheSwgd2hlcmUgZWFjaCBlbnRyeSBpcyB0aGUgZnVsbFxuLy8gcGF0dGVybiwgc3BsaXQgb24gJy8nLCBhbmQgdGhlbiB0dXJuZWQgaW50byBhIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbi8vIEEgcmVnZXhwIGlzIG1hZGUgYXQgdGhlIGVuZCB3aGljaCBqb2lucyBlYWNoIGFycmF5IHdpdGggYW5cbi8vIGVzY2FwZWQgLywgYW5kIGFub3RoZXIgZnVsbCBvbmUgd2hpY2ggam9pbnMgZWFjaCByZWdleHAgd2l0aCB8LlxuLy9cbi8vIEZvbGxvd2luZyB0aGUgbGVhZCBvZiBCYXNoIDQuMSwgbm90ZSB0aGF0IFwiKipcIiBvbmx5IGhhcyBzcGVjaWFsIG1lYW5pbmdcbi8vIHdoZW4gaXQgaXMgdGhlICpvbmx5KiB0aGluZyBpbiBhIHBhdGggcG9ydGlvbi4gIE90aGVyd2lzZSwgYW55IHNlcmllc1xuLy8gb2YgKiBpcyBlcXVpdmFsZW50IHRvIGEgc2luZ2xlICouICBHbG9ic3RhciBiZWhhdmlvciBpcyBlbmFibGVkIGJ5XG4vLyBkZWZhdWx0LCBhbmQgY2FuIGJlIGRpc2FibGVkIGJ5IHNldHRpbmcgb3B0aW9ucy5ub2dsb2JzdGFyLlxuZXhwb3J0IGNvbnN0IG1ha2VSZSA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucykubWFrZVJlKCk7XG5taW5pbWF0Y2gubWFrZVJlID0gbWFrZVJlO1xuZXhwb3J0IGNvbnN0IG1hdGNoID0gKGxpc3QsIHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IG1tID0gbmV3IE1pbmltYXRjaChwYXR0ZXJuLCBvcHRpb25zKTtcbiAgICBsaXN0ID0gbGlzdC5maWx0ZXIoZiA9PiBtbS5tYXRjaChmKSk7XG4gICAgaWYgKG1tLm9wdGlvbnMubm9udWxsICYmICFsaXN0Lmxlbmd0aCkge1xuICAgICAgICBsaXN0LnB1c2gocGF0dGVybik7XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xufTtcbm1pbmltYXRjaC5tYXRjaCA9IG1hdGNoO1xuLy8gcmVwbGFjZSBzdHVmZiBsaWtlIFxcKiB3aXRoICpcbmNvbnN0IGdsb2JNYWdpYyA9IC9bPypdfFsrQCFdXFwoLio/XFwpfFxcW3xcXF0vO1xuY29uc3QgcmVnRXhwRXNjYXBlID0gKHMpID0+IHMucmVwbGFjZSgvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2csICdcXFxcJCYnKTtcbmV4cG9ydCBjbGFzcyBNaW5pbWF0Y2gge1xuICAgIG9wdGlvbnM7XG4gICAgc2V0O1xuICAgIHBhdHRlcm47XG4gICAgd2luZG93c1BhdGhzTm9Fc2NhcGU7XG4gICAgbm9uZWdhdGU7XG4gICAgbmVnYXRlO1xuICAgIGNvbW1lbnQ7XG4gICAgZW1wdHk7XG4gICAgcHJlc2VydmVNdWx0aXBsZVNsYXNoZXM7XG4gICAgcGFydGlhbDtcbiAgICBnbG9iU2V0O1xuICAgIGdsb2JQYXJ0cztcbiAgICBub2Nhc2U7XG4gICAgaXNXaW5kb3dzO1xuICAgIHBsYXRmb3JtO1xuICAgIHdpbmRvd3NOb01hZ2ljUm9vdDtcbiAgICBtYXhHbG9ic3RhclJlY3Vyc2lvbjtcbiAgICByZWdleHA7XG4gICAgY29uc3RydWN0b3IocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGFzc2VydFZhbGlkUGF0dGVybihwYXR0ZXJuKTtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMubWF4R2xvYnN0YXJSZWN1cnNpb24gPSBvcHRpb25zLm1heEdsb2JzdGFyUmVjdXJzaW9uID8/IDIwMDtcbiAgICAgICAgdGhpcy5wYXR0ZXJuID0gcGF0dGVybjtcbiAgICAgICAgdGhpcy5wbGF0Zm9ybSA9IG9wdGlvbnMucGxhdGZvcm0gfHwgZGVmYXVsdFBsYXRmb3JtO1xuICAgICAgICB0aGlzLmlzV2luZG93cyA9IHRoaXMucGxhdGZvcm0gPT09ICd3aW4zMic7XG4gICAgICAgIC8vIGF2b2lkIHRoZSBhbm5veWluZyBkZXByZWNhdGlvbiBmbGFnIGxvbFxuICAgICAgICBjb25zdCBhd2UgPSAoJ2FsbG93V2luZG93JyArICdzRXNjYXBlJyk7XG4gICAgICAgIHRoaXMud2luZG93c1BhdGhzTm9Fc2NhcGUgPVxuICAgICAgICAgICAgISFvcHRpb25zLndpbmRvd3NQYXRoc05vRXNjYXBlIHx8IG9wdGlvbnNbYXdlXSA9PT0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlKSB7XG4gICAgICAgICAgICB0aGlzLnBhdHRlcm4gPSB0aGlzLnBhdHRlcm4ucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXMgPSAhIW9wdGlvbnMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXM7XG4gICAgICAgIHRoaXMucmVnZXhwID0gbnVsbDtcbiAgICAgICAgdGhpcy5uZWdhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub25lZ2F0ZSA9ICEhb3B0aW9ucy5ub25lZ2F0ZTtcbiAgICAgICAgdGhpcy5jb21tZW50ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wYXJ0aWFsID0gISFvcHRpb25zLnBhcnRpYWw7XG4gICAgICAgIHRoaXMubm9jYXNlID0gISF0aGlzLm9wdGlvbnMubm9jYXNlO1xuICAgICAgICB0aGlzLndpbmRvd3NOb01hZ2ljUm9vdCA9XG4gICAgICAgICAgICBvcHRpb25zLndpbmRvd3NOb01hZ2ljUm9vdCAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICBvcHRpb25zLndpbmRvd3NOb01hZ2ljUm9vdFxuICAgICAgICAgICAgICAgIDogISEodGhpcy5pc1dpbmRvd3MgJiYgdGhpcy5ub2Nhc2UpO1xuICAgICAgICB0aGlzLmdsb2JTZXQgPSBbXTtcbiAgICAgICAgdGhpcy5nbG9iUGFydHMgPSBbXTtcbiAgICAgICAgdGhpcy5zZXQgPSBbXTtcbiAgICAgICAgLy8gbWFrZSB0aGUgc2V0IG9mIHJlZ2V4cHMgZXRjLlxuICAgICAgICB0aGlzLm1ha2UoKTtcbiAgICB9XG4gICAgaGFzTWFnaWMoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubWFnaWNhbEJyYWNlcyAmJiB0aGlzLnNldC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgdGhpcy5zZXQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBkZWJ1ZyguLi5fKSB7IH1cbiAgICBtYWtlKCkge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5wYXR0ZXJuO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAvLyBlbXB0eSBwYXR0ZXJucyBhbmQgY29tbWVudHMgbWF0Y2ggbm90aGluZy5cbiAgICAgICAgaWYgKCFvcHRpb25zLm5vY29tbWVudCAmJiBwYXR0ZXJuLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICAgICAgICB0aGlzLmNvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcGF0dGVybikge1xuICAgICAgICAgICAgdGhpcy5lbXB0eSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gc3RlcCAxOiBmaWd1cmUgb3V0IG5lZ2F0aW9uLCBldGMuXG4gICAgICAgIHRoaXMucGFyc2VOZWdhdGUoKTtcbiAgICAgICAgLy8gc3RlcCAyOiBleHBhbmQgYnJhY2VzXG4gICAgICAgIHRoaXMuZ2xvYlNldCA9IFsuLi5uZXcgU2V0KHRoaXMuYnJhY2VFeHBhbmQoKSldO1xuICAgICAgICBpZiAob3B0aW9ucy5kZWJ1Zykge1xuICAgICAgICAgICAgLy9veGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgdGhpcy5kZWJ1ZyA9ICguLi5hcmdzKSA9PiBjb25zb2xlLmVycm9yKC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCB0aGlzLmdsb2JTZXQpO1xuICAgICAgICAvLyBzdGVwIDM6IG5vdyB3ZSBoYXZlIGEgc2V0LCBzbyB0dXJuIGVhY2ggb25lIGludG8gYSBzZXJpZXMgb2ZcbiAgICAgICAgLy8gcGF0aC1wb3J0aW9uIG1hdGNoaW5nIHBhdHRlcm5zLlxuICAgICAgICAvLyBUaGVzZSB3aWxsIGJlIHJlZ2V4cHMsIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBcIioqXCIsIHdoaWNoIGlzXG4gICAgICAgIC8vIHNldCB0byB0aGUgR0xPQlNUQVIgb2JqZWN0IGZvciBnbG9ic3RhciBiZWhhdmlvcixcbiAgICAgICAgLy8gYW5kIHdpbGwgbm90IGNvbnRhaW4gYW55IC8gY2hhcmFjdGVyc1xuICAgICAgICAvL1xuICAgICAgICAvLyBGaXJzdCwgd2UgcHJlcHJvY2VzcyB0byBtYWtlIHRoZSBnbG9iIHBhdHRlcm4gc2V0cyBhIGJpdCBzaW1wbGVyXG4gICAgICAgIC8vIGFuZCBkZWR1cGVkLiAgVGhlcmUgYXJlIHNvbWUgcGVyZi1raWxsaW5nIHBhdHRlcm5zIHRoYXQgY2FuIGNhdXNlXG4gICAgICAgIC8vIHByb2JsZW1zIHdpdGggYSBnbG9iIHdhbGssIGJ1dCB3ZSBjYW4gc2ltcGxpZnkgdGhlbSBkb3duIGEgYml0LlxuICAgICAgICBjb25zdCByYXdHbG9iUGFydHMgPSB0aGlzLmdsb2JTZXQubWFwKHMgPT4gdGhpcy5zbGFzaFNwbGl0KHMpKTtcbiAgICAgICAgdGhpcy5nbG9iUGFydHMgPSB0aGlzLnByZXByb2Nlc3MocmF3R2xvYlBhcnRzKTtcbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sIHRoaXMuZ2xvYlBhcnRzKTtcbiAgICAgICAgLy8gZ2xvYiAtLT4gcmVnZXhwc1xuICAgICAgICBsZXQgc2V0ID0gdGhpcy5nbG9iUGFydHMubWFwKChzLCBfLCBfXykgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNXaW5kb3dzICYmIHRoaXMud2luZG93c05vTWFnaWNSb290KSB7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgaXQncyBhIGRyaXZlIG9yIHVuYyBwYXRoLlxuICAgICAgICAgICAgICAgIGNvbnN0IGlzVU5DID0gc1swXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgc1sxXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgKHNbMl0gPT09ICc/JyB8fCAhZ2xvYk1hZ2ljLnRlc3Qoc1syXSkpICYmXG4gICAgICAgICAgICAgICAgICAgICFnbG9iTWFnaWMudGVzdChzWzNdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0RyaXZlID0gL15bYS16XTovaS50ZXN0KHNbMF0pO1xuICAgICAgICAgICAgICAgIGlmIChpc1VOQykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucy5zbGljZSgwLCA0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnMuc2xpY2UoNCkubWFwKHNzID0+IHRoaXMucGFyc2Uoc3MpKSxcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNEcml2ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3NbMF0sIC4uLnMuc2xpY2UoMSkubWFwKHNzID0+IHRoaXMucGFyc2Uoc3MpKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHMubWFwKHNzID0+IHRoaXMucGFyc2Uoc3MpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCBzZXQpO1xuICAgICAgICAvLyBmaWx0ZXIgb3V0IGV2ZXJ5dGhpbmcgdGhhdCBkaWRuJ3QgY29tcGlsZSBwcm9wZXJseS5cbiAgICAgICAgdGhpcy5zZXQgPSBzZXQuZmlsdGVyKHMgPT4gcy5pbmRleE9mKGZhbHNlKSA9PT0gLTEpO1xuICAgICAgICAvLyBkbyBub3QgdHJlYXQgdGhlID8gaW4gVU5DIHBhdGhzIGFzIG1hZ2ljXG4gICAgICAgIGlmICh0aGlzLmlzV2luZG93cykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNldC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSB0aGlzLnNldFtpXTtcbiAgICAgICAgICAgICAgICBpZiAocFswXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgcFsxXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nbG9iUGFydHNbaV1bMl0gPT09ICc/JyAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcFszXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgL15bYS16XTokL2kudGVzdChwWzNdKSkge1xuICAgICAgICAgICAgICAgICAgICBwWzJdID0gJz8nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgdGhpcy5zZXQpO1xuICAgIH1cbiAgICAvLyB2YXJpb3VzIHRyYW5zZm9ybXMgdG8gZXF1aXZhbGVudCBwYXR0ZXJuIHNldHMgdGhhdCBhcmVcbiAgICAvLyBmYXN0ZXIgdG8gcHJvY2VzcyBpbiBhIGZpbGVzeXN0ZW0gd2Fsay4gIFRoZSBnb2FsIGlzIHRvXG4gICAgLy8gZWxpbWluYXRlIHdoYXQgd2UgY2FuLCBhbmQgcHVzaCBhbGwgKiogcGF0dGVybnMgYXMgZmFyXG4gICAgLy8gdG8gdGhlIHJpZ2h0IGFzIHBvc3NpYmxlLCBldmVuIGlmIGl0IGluY3JlYXNlcyB0aGUgbnVtYmVyXG4gICAgLy8gb2YgcGF0dGVybnMgdGhhdCB3ZSBoYXZlIHRvIHByb2Nlc3MuXG4gICAgcHJlcHJvY2VzcyhnbG9iUGFydHMpIHtcbiAgICAgICAgLy8gaWYgd2UncmUgbm90IGluIGdsb2JzdGFyIG1vZGUsIHRoZW4gdHVybiAqKiBpbnRvICpcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub2dsb2JzdGFyKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnRzZXQgb2YgZ2xvYlBhcnRzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwYXJ0c2V0Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0c2V0W2pdID09PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0c2V0W2pdID0gJyonO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgb3B0aW1pemF0aW9uTGV2ZWwgPSAxIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGlmIChvcHRpbWl6YXRpb25MZXZlbCA+PSAyKSB7XG4gICAgICAgICAgICAvLyBhZ2dyZXNzaXZlIG9wdGltaXphdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgZnMgd2Fsa2luZ1xuICAgICAgICAgICAgZ2xvYlBhcnRzID0gdGhpcy5maXJzdFBoYXNlUHJlUHJvY2VzcyhnbG9iUGFydHMpO1xuICAgICAgICAgICAgZ2xvYlBhcnRzID0gdGhpcy5zZWNvbmRQaGFzZVByZVByb2Nlc3MoZ2xvYlBhcnRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpbWl6YXRpb25MZXZlbCA+PSAxKSB7XG4gICAgICAgICAgICAvLyBqdXN0IGJhc2ljIG9wdGltaXphdGlvbnMgdG8gcmVtb3ZlIHNvbWUgLi4gcGFydHNcbiAgICAgICAgICAgIGdsb2JQYXJ0cyA9IHRoaXMubGV2ZWxPbmVPcHRpbWl6ZShnbG9iUGFydHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8ganVzdCBjb2xsYXBzZSBtdWx0aXBsZSAqKiBwb3J0aW9ucyBpbnRvIG9uZVxuICAgICAgICAgICAgZ2xvYlBhcnRzID0gdGhpcy5hZGphc2NlbnRHbG9ic3Rhck9wdGltaXplKGdsb2JQYXJ0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdsb2JQYXJ0cztcbiAgICB9XG4gICAgLy8ganVzdCBnZXQgcmlkIG9mIGFkamFzY2VudCAqKiBwb3J0aW9uc1xuICAgIGFkamFzY2VudEdsb2JzdGFyT3B0aW1pemUoZ2xvYlBhcnRzKSB7XG4gICAgICAgIHJldHVybiBnbG9iUGFydHMubWFwKHBhcnRzID0+IHtcbiAgICAgICAgICAgIGxldCBncyA9IC0xO1xuICAgICAgICAgICAgd2hpbGUgKC0xICE9PSAoZ3MgPSBwYXJ0cy5pbmRleE9mKCcqKicsIGdzICsgMSkpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGkgPSBncztcbiAgICAgICAgICAgICAgICB3aGlsZSAocGFydHNbaSArIDFdID09PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGkgIT09IGdzKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShncywgaSAtIGdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFydHM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBnZXQgcmlkIG9mIGFkamFzY2VudCAqKiBhbmQgcmVzb2x2ZSAuLiBwb3J0aW9uc1xuICAgIGxldmVsT25lT3B0aW1pemUoZ2xvYlBhcnRzKSB7XG4gICAgICAgIHJldHVybiBnbG9iUGFydHMubWFwKHBhcnRzID0+IHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMucmVkdWNlKChzZXQsIHBhcnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gc2V0W3NldC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAocGFydCA9PT0gJyoqJyAmJiBwcmV2ID09PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ICYmIHByZXYgIT09ICcuLicgJiYgcHJldiAhPT0gJy4nICYmIHByZXYgIT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldC5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0LnB1c2gocGFydCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNldDtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPT09IDAgPyBbJyddIDogcGFydHM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZXZlbFR3b0ZpbGVPcHRpbWl6ZShwYXJ0cykge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFydHMpKSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHRoaXMuc2xhc2hTcGxpdChwYXJ0cyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRpZFNvbWV0aGluZyA9IGZhbHNlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBkaWRTb21ldGhpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIDxwcmU+LzxlPi88cmVzdD4gLT4gPHByZT4vPHJlc3Q+XG4gICAgICAgICAgICBpZiAoIXRoaXMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbaV07XG4gICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IHNxdWVlemUgb3V0IFVOQyBwYXR0ZXJuc1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMSAmJiBwID09PSAnJyAmJiBwYXJ0c1swXSA9PT0gJycpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT09ICcuJyB8fCBwID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFydHNbMF0gPT09ICcuJyAmJlxuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5sZW5ndGggPT09IDIgJiZcbiAgICAgICAgICAgICAgICAgICAgKHBhcnRzWzFdID09PSAnLicgfHwgcGFydHNbMV0gPT09ICcnKSkge1xuICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wb3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyA8cHJlPi88cD4vLi4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgbGV0IGRkID0gMDtcbiAgICAgICAgICAgIHdoaWxlICgtMSAhPT0gKGRkID0gcGFydHMuaW5kZXhPZignLi4nLCBkZCArIDEpKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXJ0c1tkZCAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChwICYmXG4gICAgICAgICAgICAgICAgICAgIHAgIT09ICcuJyAmJlxuICAgICAgICAgICAgICAgICAgICBwICE9PSAnLi4nICYmXG4gICAgICAgICAgICAgICAgICAgIHAgIT09ICcqKicgJiZcbiAgICAgICAgICAgICAgICAgICAgISh0aGlzLmlzV2luZG93cyAmJiAvXlthLXpdOiQvaS50ZXN0KHApKSkge1xuICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoZGQgLSAxLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgZGQgLT0gMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGRpZFNvbWV0aGluZyk7XG4gICAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPT09IDAgPyBbJyddIDogcGFydHM7XG4gICAgfVxuICAgIC8vIEZpcnN0IHBoYXNlOiBzaW5nbGUtcGF0dGVybiBwcm9jZXNzaW5nXG4gICAgLy8gPHByZT4gaXMgMSBvciBtb3JlIHBvcnRpb25zXG4gICAgLy8gPHJlc3Q+IGlzIDEgb3IgbW9yZSBwb3J0aW9uc1xuICAgIC8vIDxwPiBpcyBhbnkgcG9ydGlvbiBvdGhlciB0aGFuIC4sIC4uLCAnJywgb3IgKipcbiAgICAvLyA8ZT4gaXMgLiBvciAnJ1xuICAgIC8vXG4gICAgLy8gKiovLi4gaXMgKmJydXRhbCogZm9yIGZpbGVzeXN0ZW0gd2Fsa2luZyBwZXJmb3JtYW5jZSwgYmVjYXVzZVxuICAgIC8vIGl0IGVmZmVjdGl2ZWx5IHJlc2V0cyB0aGUgcmVjdXJzaXZlIHdhbGsgZWFjaCB0aW1lIGl0IG9jY3VycyxcbiAgICAvLyBhbmQgKiogY2Fubm90IGJlIHJlZHVjZWQgb3V0IGJ5IGEgLi4gcGF0dGVybiBwYXJ0IGxpa2UgYSByZWdleHBcbiAgICAvLyBvciBtb3N0IHN0cmluZ3MgKG90aGVyIHRoYW4gLi4sIC4sIGFuZCAnJykgY2FuIGJlLlxuICAgIC8vXG4gICAgLy8gPHByZT4vKiovLi4vPHA+LzxwPi88cmVzdD4gLT4gezxwcmU+Ly4uLzxwPi88cD4vPHJlc3Q+LDxwcmU+LyoqLzxwPi88cD4vPHJlc3Q+fVxuICAgIC8vIDxwcmU+LzxlPi88cmVzdD4gLT4gPHByZT4vPHJlc3Q+XG4gICAgLy8gPHByZT4vPHA+Ly4uLzxyZXN0PiAtPiA8cHJlPi88cmVzdD5cbiAgICAvLyAqKi8qKi88cmVzdD4gLT4gKiovPHJlc3Q+XG4gICAgLy9cbiAgICAvLyAqKi8qLzxyZXN0PiAtPiAqLyoqLzxyZXN0PiA8PT0gbm90IHZhbGlkIGJlY2F1c2UgKiogZG9lc24ndCBmb2xsb3dcbiAgICAvLyB0aGlzIFdPVUxEIGJlIGFsbG93ZWQgaWYgKiogZGlkIGZvbGxvdyBzeW1saW5rcywgb3IgKiBkaWRuJ3RcbiAgICBmaXJzdFBoYXNlUHJlUHJvY2VzcyhnbG9iUGFydHMpIHtcbiAgICAgICAgbGV0IGRpZFNvbWV0aGluZyA9IGZhbHNlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBkaWRTb21ldGhpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIDxwcmU+LyoqLy4uLzxwPi88cD4vPHJlc3Q+IC0+IHs8cHJlPi8uLi88cD4vPHA+LzxyZXN0Piw8cHJlPi8qKi88cD4vPHA+LzxyZXN0Pn1cbiAgICAgICAgICAgIGZvciAobGV0IHBhcnRzIG9mIGdsb2JQYXJ0cykge1xuICAgICAgICAgICAgICAgIGxldCBncyA9IC0xO1xuICAgICAgICAgICAgICAgIHdoaWxlICgtMSAhPT0gKGdzID0gcGFydHMuaW5kZXhPZignKionLCBncyArIDEpKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZ3NzID0gZ3M7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChwYXJ0c1tnc3MgKyAxXSA9PT0gJyoqJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gPHByZT4vKiovKiovPHJlc3Q+IC0+IDxwcmU+LyoqLzxyZXN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgZ3NzKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gZWcsIGlmIGdzIGlzIDIgYW5kIGdzcyBpcyA0LCB0aGF0IG1lYW5zIHdlIGhhdmUgMyAqKlxuICAgICAgICAgICAgICAgICAgICAvLyBwYXJ0cywgYW5kIGNhbiByZW1vdmUgMiBvZiB0aGVtLlxuICAgICAgICAgICAgICAgICAgICBpZiAoZ3NzID4gZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShncyArIDEsIGdzcyAtIGdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dCA9IHBhcnRzW2dzICsgMV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXJ0c1tncyArIDJdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwMiA9IHBhcnRzW2dzICsgM107XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICE9PSAnLi4nKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcCA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwID09PSAnLi4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAhcDIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHAyID09PSAnLicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHAyID09PSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAvLyBlZGl0IHBhcnRzIGluIHBsYWNlLCBhbmQgcHVzaCB0aGUgbmV3IG9uZVxuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoZ3MsIDEpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvdGhlciA9IHBhcnRzLnNsaWNlKDApO1xuICAgICAgICAgICAgICAgICAgICBvdGhlcltnc10gPSAnKionO1xuICAgICAgICAgICAgICAgICAgICBnbG9iUGFydHMucHVzaChvdGhlcik7XG4gICAgICAgICAgICAgICAgICAgIGdzLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIDxwcmU+LzxlPi88cmVzdD4gLT4gPHByZT4vPHJlc3Q+XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBzcXVlZXplIG91dCBVTkMgcGF0dGVybnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAxICYmIHAgPT09ICcnICYmIHBhcnRzWzBdID09PSAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwID09PSAnLicgfHwgcCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRzWzBdID09PSAnLicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnRzWzFdID09PSAnLicgfHwgcGFydHNbMV0gPT09ICcnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIDxwcmU+LzxwPi8uLi88cmVzdD4gLT4gPHByZT4vPHJlc3Q+XG4gICAgICAgICAgICAgICAgbGV0IGRkID0gMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoLTEgIT09IChkZCA9IHBhcnRzLmluZGV4T2YoJy4uJywgZGQgKyAxKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IHBhcnRzW2RkIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChwICYmIHAgIT09ICcuJyAmJiBwICE9PSAnLi4nICYmIHAgIT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZWVkRG90ID0gZGQgPT09IDEgJiYgcGFydHNbZGQgKyAxXSA9PT0gJyoqJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwbGluID0gbmVlZERvdCA/IFsnLiddIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoZGQgLSAxLCAyLCAuLi5zcGxpbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLnB1c2goJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGQgLT0gMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoZGlkU29tZXRoaW5nKTtcbiAgICAgICAgcmV0dXJuIGdsb2JQYXJ0cztcbiAgICB9XG4gICAgLy8gc2Vjb25kIHBoYXNlOiBtdWx0aS1wYXR0ZXJuIGRlZHVwZXNcbiAgICAvLyB7PHByZT4vKi88cmVzdD4sPHByZT4vPHA+LzxyZXN0Pn0gLT4gPHByZT4vKi88cmVzdD5cbiAgICAvLyB7PHByZT4vPHJlc3Q+LDxwcmU+LzxyZXN0Pn0gLT4gPHByZT4vPHJlc3Q+XG4gICAgLy8gezxwcmU+LyoqLzxyZXN0Piw8cHJlPi88cmVzdD59IC0+IDxwcmU+LyoqLzxyZXN0PlxuICAgIC8vXG4gICAgLy8gezxwcmU+LyoqLzxyZXN0Piw8cHJlPi8qKi88cD4vPHJlc3Q+fSAtPiA8cHJlPi8qKi88cmVzdD5cbiAgICAvLyBeLS0gbm90IHZhbGlkIGJlY2F1c2UgKiogZG9lbnMndCBmb2xsb3cgc3ltbGlua3NcbiAgICBzZWNvbmRQaGFzZVByZVByb2Nlc3MoZ2xvYlBhcnRzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2xvYlBhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgZ2xvYlBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IHRoaXMucGFydHNNYXRjaChnbG9iUGFydHNbaV0sIGdsb2JQYXJ0c1tqXSwgIXRoaXMucHJlc2VydmVNdWx0aXBsZVNsYXNoZXMpO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGdsb2JQYXJ0c1tpXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBnbG9iUGFydHNbal0gPSBtYXRjaGVkO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdsb2JQYXJ0cy5maWx0ZXIoZ3MgPT4gZ3MubGVuZ3RoKTtcbiAgICB9XG4gICAgcGFydHNNYXRjaChhLCBiLCBlbXB0eUdTTWF0Y2ggPSBmYWxzZSkge1xuICAgICAgICBsZXQgYWkgPSAwO1xuICAgICAgICBsZXQgYmkgPSAwO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGxldCB3aGljaCA9ICcnO1xuICAgICAgICB3aGlsZSAoYWkgPCBhLmxlbmd0aCAmJiBiaSA8IGIubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoYVthaV0gPT09IGJbYmldKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2god2hpY2ggPT09ICdiJyA/IGJbYmldIDogYVthaV0pO1xuICAgICAgICAgICAgICAgIGFpKys7XG4gICAgICAgICAgICAgICAgYmkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGVtcHR5R1NNYXRjaCAmJiBhW2FpXSA9PT0gJyoqJyAmJiBiW2JpXSA9PT0gYVthaSArIDFdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYVthaV0pO1xuICAgICAgICAgICAgICAgIGFpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChlbXB0eUdTTWF0Y2ggJiYgYltiaV0gPT09ICcqKicgJiYgYVthaV0gPT09IGJbYmkgKyAxXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGJbYmldKTtcbiAgICAgICAgICAgICAgICBiaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYVthaV0gPT09ICcqJyAmJlxuICAgICAgICAgICAgICAgIGJbYmldICYmXG4gICAgICAgICAgICAgICAgKHRoaXMub3B0aW9ucy5kb3QgfHwgIWJbYmldLnN0YXJ0c1dpdGgoJy4nKSkgJiZcbiAgICAgICAgICAgICAgICBiW2JpXSAhPT0gJyoqJykge1xuICAgICAgICAgICAgICAgIGlmICh3aGljaCA9PT0gJ2InKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgd2hpY2ggPSAnYSc7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYVthaV0pO1xuICAgICAgICAgICAgICAgIGFpKys7XG4gICAgICAgICAgICAgICAgYmkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJbYmldID09PSAnKicgJiZcbiAgICAgICAgICAgICAgICBhW2FpXSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLm9wdGlvbnMuZG90IHx8ICFhW2FpXS5zdGFydHNXaXRoKCcuJykpICYmXG4gICAgICAgICAgICAgICAgYVthaV0gIT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICBpZiAod2hpY2ggPT09ICdhJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIHdoaWNoID0gJ2InO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGJbYmldKTtcbiAgICAgICAgICAgICAgICBhaSsrO1xuICAgICAgICAgICAgICAgIGJpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgd2UgZmFsbCBvdXQgb2YgdGhlIGxvb3AsIGl0IG1lYW5zIHRoZXkgdHdvIGFyZSBpZGVudGljYWxcbiAgICAgICAgLy8gYXMgbG9uZyBhcyB0aGVpciBsZW5ndGhzIG1hdGNoXG4gICAgICAgIHJldHVybiBhLmxlbmd0aCA9PT0gYi5sZW5ndGggJiYgcmVzdWx0O1xuICAgIH1cbiAgICBwYXJzZU5lZ2F0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubm9uZWdhdGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSB0aGlzLnBhdHRlcm47XG4gICAgICAgIGxldCBuZWdhdGUgPSBmYWxzZTtcbiAgICAgICAgbGV0IG5lZ2F0ZU9mZnNldCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0dGVybi5sZW5ndGggJiYgcGF0dGVybi5jaGFyQXQoaSkgPT09ICchJzsgaSsrKSB7XG4gICAgICAgICAgICBuZWdhdGUgPSAhbmVnYXRlO1xuICAgICAgICAgICAgbmVnYXRlT2Zmc2V0Kys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5lZ2F0ZU9mZnNldClcbiAgICAgICAgICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm4uc2xpY2UobmVnYXRlT2Zmc2V0KTtcbiAgICAgICAgdGhpcy5uZWdhdGUgPSBuZWdhdGU7XG4gICAgfVxuICAgIC8vIHNldCBwYXJ0aWFsIHRvIHRydWUgdG8gdGVzdCBpZiwgZm9yIGV4YW1wbGUsXG4gICAgLy8gXCIvYS9iXCIgbWF0Y2hlcyB0aGUgc3RhcnQgb2YgXCIvKi9iLyovZFwiXG4gICAgLy8gUGFydGlhbCBtZWFucywgaWYgeW91IHJ1biBvdXQgb2YgZmlsZSBiZWZvcmUgeW91IHJ1blxuICAgIC8vIG91dCBvZiBwYXR0ZXJuLCB0aGVuIHRoYXQncyBmaW5lLCBhcyBsb25nIGFzIGFsbFxuICAgIC8vIHRoZSBwYXJ0cyBtYXRjaC5cbiAgICBtYXRjaE9uZShmaWxlLCBwYXR0ZXJuLCBwYXJ0aWFsID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IGZpbGVTdGFydEluZGV4ID0gMDtcbiAgICAgICAgbGV0IHBhdHRlcm5TdGFydEluZGV4ID0gMDtcbiAgICAgICAgLy8gVU5DIHBhdGhzIGxpa2UgLy8/L1g6Ly4uLiBjYW4gbWF0Y2ggWDovLi4uIGFuZCB2aWNlIHZlcnNhXG4gICAgICAgIC8vIERyaXZlIGxldHRlcnMgaW4gYWJzb2x1dGUgZHJpdmUgb3IgdW5jIHBhdGhzIGFyZSBhbHdheXMgY29tcGFyZWRcbiAgICAgICAgLy8gY2FzZS1pbnNlbnNpdGl2ZWx5LlxuICAgICAgICBpZiAodGhpcy5pc1dpbmRvd3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVEcml2ZSA9IHR5cGVvZiBmaWxlWzBdID09PSAnc3RyaW5nJyAmJiAvXlthLXpdOiQvaS50ZXN0KGZpbGVbMF0pO1xuICAgICAgICAgICAgY29uc3QgZmlsZVVOQyA9ICFmaWxlRHJpdmUgJiZcbiAgICAgICAgICAgICAgICBmaWxlWzBdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgIGZpbGVbMV0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgZmlsZVsyXSA9PT0gJz8nICYmXG4gICAgICAgICAgICAgICAgL15bYS16XTokL2kudGVzdChmaWxlWzNdKTtcbiAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5Ecml2ZSA9IHR5cGVvZiBwYXR0ZXJuWzBdID09PSAnc3RyaW5nJyAmJiAvXlthLXpdOiQvaS50ZXN0KHBhdHRlcm5bMF0pO1xuICAgICAgICAgICAgY29uc3QgcGF0dGVyblVOQyA9ICFwYXR0ZXJuRHJpdmUgJiZcbiAgICAgICAgICAgICAgICBwYXR0ZXJuWzBdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgIHBhdHRlcm5bMV0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgcGF0dGVyblsyXSA9PT0gJz8nICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHBhdHRlcm5bM10gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgL15bYS16XTokL2kudGVzdChwYXR0ZXJuWzNdKTtcbiAgICAgICAgICAgIGNvbnN0IGZkaSA9IGZpbGVVTkMgPyAzXG4gICAgICAgICAgICAgICAgOiBmaWxlRHJpdmUgPyAwXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgcGRpID0gcGF0dGVyblVOQyA/IDNcbiAgICAgICAgICAgICAgICA6IHBhdHRlcm5Ecml2ZSA/IDBcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZkaSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHBkaSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbZmQsIHBkXSA9IFtcbiAgICAgICAgICAgICAgICAgICAgZmlsZVtmZGldLFxuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuW3BkaV0sXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAvLyBzdGFydCBtYXRjaGluZyBhdCB0aGUgZHJpdmUgbGV0dGVyIGluZGV4IG9mIGVhY2hcbiAgICAgICAgICAgICAgICBpZiAoZmQudG9Mb3dlckNhc2UoKSA9PT0gcGQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuW3BkaV0gPSBmZDtcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVyblN0YXJ0SW5kZXggPSBwZGk7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVTdGFydEluZGV4ID0gZmRpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyByZXNvbHZlIGFuZCByZWR1Y2UgLiBhbmQgLi4gcG9ydGlvbnMgaW4gdGhlIGZpbGUgYXMgd2VsbC5cbiAgICAgICAgLy8gZG9uJ3QgbmVlZCB0byBkbyB0aGUgc2Vjb25kIHBoYXNlLCBiZWNhdXNlIGl0J3Mgb25seSBvbmUgc3RyaW5nW11cbiAgICAgICAgY29uc3QgeyBvcHRpbWl6YXRpb25MZXZlbCA9IDEgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgaWYgKG9wdGltaXphdGlvbkxldmVsID49IDIpIHtcbiAgICAgICAgICAgIGZpbGUgPSB0aGlzLmxldmVsVHdvRmlsZU9wdGltaXplKGZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXR0ZXJuLmluY2x1ZGVzKEdMT0JTVEFSKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI21hdGNoR2xvYnN0YXIoZmlsZSwgcGF0dGVybiwgcGFydGlhbCwgZmlsZVN0YXJ0SW5kZXgsIHBhdHRlcm5TdGFydEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy4jbWF0Y2hPbmUoZmlsZSwgcGF0dGVybiwgcGFydGlhbCwgZmlsZVN0YXJ0SW5kZXgsIHBhdHRlcm5TdGFydEluZGV4KTtcbiAgICB9XG4gICAgI21hdGNoR2xvYnN0YXIoZmlsZSwgcGF0dGVybiwgcGFydGlhbCwgZmlsZUluZGV4LCBwYXR0ZXJuSW5kZXgpIHtcbiAgICAgICAgLy8gc3BsaXQgdGhlIHBhdHRlcm4gaW50byBoZWFkLCB0YWlsLCBhbmQgbWlkZGxlIG9mICoqIGRlbGltaXRlZCBwYXJ0c1xuICAgICAgICBjb25zdCBmaXJzdGdzID0gcGF0dGVybi5pbmRleE9mKEdMT0JTVEFSLCBwYXR0ZXJuSW5kZXgpO1xuICAgICAgICBjb25zdCBsYXN0Z3MgPSBwYXR0ZXJuLmxhc3RJbmRleE9mKEdMT0JTVEFSKTtcbiAgICAgICAgLy8gc3BsaXQgdGhlIHBhdHRlcm4gdXAgaW50byBnbG9ic3Rhci1kZWxpbWl0ZWQgc2VjdGlvbnNcbiAgICAgICAgLy8gdGhlIHRhaWwgaGFzIHRvIGJlIGF0IHRoZSBlbmQsIGFuZCB0aGUgb3RoZXJzIGp1c3QgaGF2ZVxuICAgICAgICAvLyB0byBiZSBmb3VuZCBpbiBvcmRlciBmcm9tIHRoZSBoZWFkLlxuICAgICAgICBjb25zdCBbaGVhZCwgYm9keSwgdGFpbF0gPSBwYXJ0aWFsID9cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuLnNsaWNlKHBhdHRlcm5JbmRleCwgZmlyc3RncyksXG4gICAgICAgICAgICAgICAgcGF0dGVybi5zbGljZShmaXJzdGdzICsgMSksXG4gICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICBdXG4gICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuLnNsaWNlKHBhdHRlcm5JbmRleCwgZmlyc3RncyksXG4gICAgICAgICAgICAgICAgcGF0dGVybi5zbGljZShmaXJzdGdzICsgMSwgbGFzdGdzKSxcbiAgICAgICAgICAgICAgICBwYXR0ZXJuLnNsaWNlKGxhc3RncyArIDEpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgLy8gY2hlY2sgdGhlIGhlYWQsIGZyb20gdGhlIGN1cnJlbnQgZmlsZS9wYXR0ZXJuIGluZGV4LlxuICAgICAgICBpZiAoaGVhZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVIZWFkID0gZmlsZS5zbGljZShmaWxlSW5kZXgsIGZpbGVJbmRleCArIGhlYWQubGVuZ3RoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy4jbWF0Y2hPbmUoZmlsZUhlYWQsIGhlYWQsIHBhcnRpYWwsIDAsIDApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsZUluZGV4ICs9IGhlYWQubGVuZ3RoO1xuICAgICAgICAgICAgcGF0dGVybkluZGV4ICs9IGhlYWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdyB3ZSBrbm93IHRoZSBoZWFkIG1hdGNoZXMhXG4gICAgICAgIC8vIGlmIHRoZSBsYXN0IHBvcnRpb24gaXMgbm90IGVtcHR5LCBpdCBNVVNUIG1hdGNoIHRoZSBlbmRcbiAgICAgICAgLy8gY2hlY2sgdGhlIHRhaWxcbiAgICAgICAgbGV0IGZpbGVUYWlsTWF0Y2ggPSAwO1xuICAgICAgICBpZiAodGFpbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIGlmIGhlYWQgKyB0YWlsID4gZmlsZSwgdGhlbiB3ZSBjYW5ub3QgcG9zc2libHkgbWF0Y2hcbiAgICAgICAgICAgIGlmICh0YWlsLmxlbmd0aCArIGZpbGVJbmRleCA+IGZpbGUubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIC8vIHRyeSB0byBtYXRjaCB0aGUgdGFpbFxuICAgICAgICAgICAgbGV0IHRhaWxTdGFydCA9IGZpbGUubGVuZ3RoIC0gdGFpbC5sZW5ndGg7XG4gICAgICAgICAgICBpZiAodGhpcy4jbWF0Y2hPbmUoZmlsZSwgdGFpbCwgcGFydGlhbCwgdGFpbFN0YXJ0LCAwKSkge1xuICAgICAgICAgICAgICAgIGZpbGVUYWlsTWF0Y2ggPSB0YWlsLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGFmZm9yZGFuY2UgZm9yIHN0dWZmIGxpa2UgYS8qKi8qIG1hdGNoaW5nIGEvYi9cbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgbGFzdCBmaWxlIHBvcnRpb24gaXMgJycsIGFuZCB0aGVyZSdzIG1vcmUgdG8gdGhlIHBhdHRlcm5cbiAgICAgICAgICAgICAgICAvLyB0aGVuIHRyeSB3aXRob3V0IHRoZSAnJyBiaXQuXG4gICAgICAgICAgICAgICAgaWYgKGZpbGVbZmlsZS5sZW5ndGggLSAxXSAhPT0gJycgfHxcbiAgICAgICAgICAgICAgICAgICAgZmlsZUluZGV4ICsgdGFpbC5sZW5ndGggPT09IGZpbGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGFpbFN0YXJ0LS07XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLiNtYXRjaE9uZShmaWxlLCB0YWlsLCBwYXJ0aWFsLCB0YWlsU3RhcnQsIDApKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmlsZVRhaWxNYXRjaCA9IHRhaWwubGVuZ3RoICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBub3cgd2Uga25vdyB0aGUgdGFpbCBtYXRjaGVzIVxuICAgICAgICAvLyB0aGUgbWlkZGxlIGlzIHplcm8gb3IgbW9yZSBwb3J0aW9ucyB3cmFwcGVkIGluICoqLCBwb3NzaWJseVxuICAgICAgICAvLyBjb250YWluaW5nIG1vcmUgKiogc2VjdGlvbnMuXG4gICAgICAgIC8vIHNvIGEvKiovYi8qKi9jLyoqL2QgaGFzIGJlY29tZSAqKi9iLyoqL2MvKipcbiAgICAgICAgLy8gaWYgaXQncyBlbXB0eSwgaXQgbWVhbnMgYS8qKi9iLCBqdXN0IHZlcmlmeSB3ZSBoYXZlIG5vIGJhZCBkb3RzXG4gICAgICAgIC8vIGlmIHRoZXJlJ3Mgbm8gdGFpbCwgc28gaXQgZW5kcyBvbiAvKiosIHRoZW4gd2UgbXVzdCBoYXZlICpzb21ldGhpbmcqXG4gICAgICAgIC8vIGFmdGVyIHRoZSBoZWFkLCBvciBpdCdzIG5vdCBhIG1hdGNcbiAgICAgICAgaWYgKCFib2R5Lmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IHNhd1NvbWUgPSAhIWZpbGVUYWlsTWF0Y2g7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gZmlsZUluZGV4OyBpIDwgZmlsZS5sZW5ndGggLSBmaWxlVGFpbE1hdGNoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmID0gU3RyaW5nKGZpbGVbaV0pO1xuICAgICAgICAgICAgICAgIHNhd1NvbWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChmID09PSAnLicgfHxcbiAgICAgICAgICAgICAgICAgICAgZiA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAgICAgICAoIXRoaXMub3B0aW9ucy5kb3QgJiYgZi5zdGFydHNXaXRoKCcuJykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpbiBwYXJ0aWFsIG1vZGUsIHdlIGp1c3QgbmVlZCB0byBnZXQgcGFzdCBhbGwgZmlsZSBwYXJ0c1xuICAgICAgICAgICAgcmV0dXJuIHBhcnRpYWwgfHwgc2F3U29tZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBub3cgd2Uga25vdyB0aGF0IHRoZXJlJ3Mgb25lIG9yIG1vcmUgYm9keSBzZWN0aW9ucywgd2hpY2ggY2FuXG4gICAgICAgIC8vIGJlIG1hdGNoZWQgYW55d2hlcmUgZnJvbSB0aGUgMCBpbmRleCAoYmVjYXVzZSB0aGUgaGVhZCB3YXMgcHJ1bmVkKVxuICAgICAgICAvLyB0aHJvdWdoIHRvIHRoZSBsZW5ndGgtZmlsZVRhaWxNYXRjaCBpbmRleC5cbiAgICAgICAgLy8gc3BsaXQgdGhlIGJvZHkgdXAgaW50byBzZWN0aW9ucywgYW5kIG5vdGUgdGhlIG1pbmltdW0gaW5kZXggaXQgY2FuXG4gICAgICAgIC8vIGJlIGZvdW5kIGF0IChzdGFydCB3aXRoIHRoZSBsZW5ndGggb2YgYWxsIHByZXZpb3VzIHNlZ21lbnRzKVxuICAgICAgICAvLyBbc2VjdGlvbiwgYmVmb3JlLCBhZnRlcl1cbiAgICAgICAgY29uc3QgYm9keVNlZ21lbnRzID0gW1tbXSwgMF1dO1xuICAgICAgICBsZXQgY3VycmVudEJvZHkgPSBib2R5U2VnbWVudHNbMF07XG4gICAgICAgIGxldCBub25Hc1BhcnRzID0gMDtcbiAgICAgICAgY29uc3Qgbm9uR3NQYXJ0c1N1bXMgPSBbMF07XG4gICAgICAgIGZvciAoY29uc3QgYiBvZiBib2R5KSB7XG4gICAgICAgICAgICBpZiAoYiA9PT0gR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICBub25Hc1BhcnRzU3Vtcy5wdXNoKG5vbkdzUGFydHMpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRCb2R5ID0gW1tdLCAwXTtcbiAgICAgICAgICAgICAgICBib2R5U2VnbWVudHMucHVzaChjdXJyZW50Qm9keSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Qm9keVswXS5wdXNoKGIpO1xuICAgICAgICAgICAgICAgIG5vbkdzUGFydHMrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgaSA9IGJvZHlTZWdtZW50cy5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCBmaWxlTGVuZ3RoID0gZmlsZS5sZW5ndGggLSBmaWxlVGFpbE1hdGNoO1xuICAgICAgICBmb3IgKGNvbnN0IGIgb2YgYm9keVNlZ21lbnRzKSB7XG4gICAgICAgICAgICBiWzFdID0gZmlsZUxlbmd0aCAtIChub25Hc1BhcnRzU3Vtc1tpLS1dICsgYlswXS5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIXRoaXMuI21hdGNoR2xvYlN0YXJCb2R5U2VjdGlvbnMoZmlsZSwgYm9keVNlZ21lbnRzLCBmaWxlSW5kZXgsIDAsIHBhcnRpYWwsIDAsICEhZmlsZVRhaWxNYXRjaCk7XG4gICAgfVxuICAgIC8vIHJldHVybiBmYWxzZSBmb3IgXCJub3BlLCBub3QgbWF0Y2hpbmdcIlxuICAgIC8vIHJldHVybiBudWxsIGZvciBcIm5vdCBtYXRjaGluZywgY2Fubm90IGtlZXAgdHJ5aW5nXCJcbiAgICAjbWF0Y2hHbG9iU3RhckJvZHlTZWN0aW9ucyhmaWxlLCBcbiAgICAvLyBwYXR0ZXJuIHNlY3Rpb24sIGxhc3QgcG9zc2libGUgcG9zaXRpb24gZm9yIGl0XG4gICAgYm9keVNlZ21lbnRzLCBmaWxlSW5kZXgsIGJvZHlJbmRleCwgcGFydGlhbCwgZ2xvYlN0YXJEZXB0aCwgc2F3VGFpbCkge1xuICAgICAgICAvLyB0YWtlIHRoZSBmaXJzdCBib2R5IHNlZ21lbnQsIGFuZCB3YWxrIGZyb20gZmlsZUluZGV4IHRvIGl0cyBcImFmdGVyXCJcbiAgICAgICAgLy8gdmFsdWUgYXQgdGhlIGVuZFxuICAgICAgICAvLyBJZiBpdCBkb2Vzbid0IG1hdGNoIGF0IHRoYXQgcG9zaXRpb24sIHdlIGluY3JlbWVudCwgdW50aWwgd2UgaGl0XG4gICAgICAgIC8vIHRoYXQgZmluYWwgcG9zc2libGUgcG9zaXRpb24sIGFuZCBnaXZlIHVwLlxuICAgICAgICAvLyBJZiBpdCBkb2VzIG1hdGNoLCB0aGVuIGFkdmFuY2UgYW5kIHRyeSB0byByZXN0LlxuICAgICAgICAvLyBJZiBhbnkgb2YgdGhlbSBmYWlsIHdlIGtlZXAgd2Fsa2luZyBmb3J3YXJkLlxuICAgICAgICAvLyB0aGlzIGlzIHN0aWxsIGEgYml0IHJlY3Vyc2l2ZWx5IHBhaW5mdWwsIGJ1dCBpdCdzIG1vcmUgY29uc3RyYWluZWRcbiAgICAgICAgLy8gdGhhbiBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbnMsIGJlY2F1c2Ugd2UgbmV2ZXIgdGVzdCBzb21ldGhpbmcgdGhhdFxuICAgICAgICAvLyBjYW4ndCBwb3NzaWJseSBiZSBhIHZhbGlkIG1hdGNoaW5nIGNvbmRpdGlvbi5cbiAgICAgICAgY29uc3QgYnMgPSBib2R5U2VnbWVudHNbYm9keUluZGV4XTtcbiAgICAgICAgaWYgKCFicykge1xuICAgICAgICAgICAgLy8ganVzdCBtYWtlIHN1cmUgdGhhdCB0aGVyZSdzIG5vIGJhZCBkb3RzXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gZmlsZUluZGV4OyBpIDwgZmlsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHNhd1RhaWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGYgPSBmaWxlW2ldO1xuICAgICAgICAgICAgICAgIGlmIChmID09PSAnLicgfHxcbiAgICAgICAgICAgICAgICAgICAgZiA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAgICAgICAoIXRoaXMub3B0aW9ucy5kb3QgJiYgZi5zdGFydHNXaXRoKCcuJykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2F3VGFpbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBoYXZlIGEgbm9uLWdsb2JzdGFyIGJvZHkgc2VjdGlvbiB0byB0ZXN0XG4gICAgICAgIGNvbnN0IFtib2R5LCBhZnRlcl0gPSBicztcbiAgICAgICAgd2hpbGUgKGZpbGVJbmRleCA8PSBhZnRlcikge1xuICAgICAgICAgICAgY29uc3QgbSA9IHRoaXMuI21hdGNoT25lKGZpbGUuc2xpY2UoMCwgZmlsZUluZGV4ICsgYm9keS5sZW5ndGgpLCBib2R5LCBwYXJ0aWFsLCBmaWxlSW5kZXgsIDApO1xuICAgICAgICAgICAgLy8gaWYgbGltaXQgZXhjZWVkZWQsIG5vIG1hdGNoLiBpbnRlbnRpb25hbCBmYWxzZSBuZWdhdGl2ZSxcbiAgICAgICAgICAgIC8vIGFjY2VwdGFibGUgYnJlYWsgaW4gY29ycmVjdG5lc3MgZm9yIHNlY3VyaXR5LlxuICAgICAgICAgICAgaWYgKG0gJiYgZ2xvYlN0YXJEZXB0aCA8IHRoaXMubWF4R2xvYnN0YXJSZWN1cnNpb24pIHtcbiAgICAgICAgICAgICAgICAvLyBtYXRjaCEgc2VlIGlmIHRoZSByZXN0IG1hdGNoLiBpZiBzbywgd2UncmUgZG9uZSFcbiAgICAgICAgICAgICAgICBjb25zdCBzdWIgPSB0aGlzLiNtYXRjaEdsb2JTdGFyQm9keVNlY3Rpb25zKGZpbGUsIGJvZHlTZWdtZW50cywgZmlsZUluZGV4ICsgYm9keS5sZW5ndGgsIGJvZHlJbmRleCArIDEsIHBhcnRpYWwsIGdsb2JTdGFyRGVwdGggKyAxLCBzYXdUYWlsKTtcbiAgICAgICAgICAgICAgICBpZiAoc3ViICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ViO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGYgPSBmaWxlW2ZpbGVJbmRleF07XG4gICAgICAgICAgICBpZiAoZiA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgZiA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAgICghdGhpcy5vcHRpb25zLmRvdCAmJiBmLnN0YXJ0c1dpdGgoJy4nKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWxlSW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICAvLyB3YWxrZWQgb2ZmLiBubyBwb2ludCBjb250aW51aW5nXG4gICAgICAgIHJldHVybiBwYXJ0aWFsIHx8IG51bGw7XG4gICAgfVxuICAgICNtYXRjaE9uZShmaWxlLCBwYXR0ZXJuLCBwYXJ0aWFsLCBmaWxlSW5kZXgsIHBhdHRlcm5JbmRleCkge1xuICAgICAgICBsZXQgZmk7XG4gICAgICAgIGxldCBwaTtcbiAgICAgICAgbGV0IHBsO1xuICAgICAgICBsZXQgZmw7XG4gICAgICAgIGZvciAoZmkgPSBmaWxlSW5kZXgsXG4gICAgICAgICAgICBwaSA9IHBhdHRlcm5JbmRleCxcbiAgICAgICAgICAgIGZsID0gZmlsZS5sZW5ndGgsXG4gICAgICAgICAgICBwbCA9IHBhdHRlcm4ubGVuZ3RoOyBmaSA8IGZsICYmIHBpIDwgcGw7IGZpKyssIHBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoJ21hdGNoT25lIGxvb3AnKTtcbiAgICAgICAgICAgIGxldCBwID0gcGF0dGVybltwaV07XG4gICAgICAgICAgICBsZXQgZiA9IGZpbGVbZmldO1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhwYXR0ZXJuLCBwLCBmKTtcbiAgICAgICAgICAgIC8vIHNob3VsZCBiZSBpbXBvc3NpYmxlLlxuICAgICAgICAgICAgLy8gc29tZSBpbnZhbGlkIHJlZ2V4cCBzdHVmZiBpbiB0aGUgc2V0LlxuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAocCA9PT0gZmFsc2UgfHwgcCA9PT0gR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgLy8gc29tZXRoaW5nIG90aGVyIHRoYW4gKipcbiAgICAgICAgICAgIC8vIG5vbi1tYWdpYyBwYXR0ZXJucyBqdXN0IGhhdmUgdG8gbWF0Y2ggZXhhY3RseVxuICAgICAgICAgICAgLy8gcGF0dGVybnMgd2l0aCBtYWdpYyBoYXZlIGJlZW4gdHVybmVkIGludG8gcmVnZXhwcy5cbiAgICAgICAgICAgIGxldCBoaXQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaGl0ID0gZiA9PT0gcDtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdzdHJpbmcgbWF0Y2gnLCBwLCBmLCBoaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaGl0ID0gcC50ZXN0KGYpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVidWcoJ3BhdHRlcm4gbWF0Y2gnLCBwLCBmLCBoaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFoaXQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdGU6IGVuZGluZyBpbiAvIG1lYW5zIHRoYXQgd2UnbGwgZ2V0IGEgZmluYWwgXCJcIlxuICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLiAgVGhpcyBjYW4gb25seSBtYXRjaCBhXG4gICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgXCJcIiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLlxuICAgICAgICAvLyBJZiB0aGUgZmlsZSBlbmRzIGluIC8sIHRoZW4gaXQgY2FuIG9ubHkgbWF0Y2ggYVxuICAgICAgICAvLyBhIHBhdHRlcm4gdGhhdCBlbmRzIGluIC8sIHVubGVzcyB0aGUgcGF0dGVybiBqdXN0XG4gICAgICAgIC8vIGRvZXNuJ3QgaGF2ZSBhbnkgbW9yZSBmb3IgaXQuIEJ1dCwgYS9iLyBzaG91bGQgKm5vdCpcbiAgICAgICAgLy8gbWF0Y2ggXCJhL2IvKlwiLCBldmVuIHRob3VnaCBcIlwiIG1hdGNoZXMgYWdhaW5zdCB0aGVcbiAgICAgICAgLy8gW14vXSo/IHBhdHRlcm4sIGV4Y2VwdCBpbiBwYXJ0aWFsIG1vZGUsIHdoZXJlIGl0IG1pZ2h0XG4gICAgICAgIC8vIHNpbXBseSBub3QgYmUgcmVhY2hlZCB5ZXQuXG4gICAgICAgIC8vIEhvd2V2ZXIsIGEvYi8gc2hvdWxkIHN0aWxsIHNhdGlzZnkgYS8qXG4gICAgICAgIC8vIG5vdyBlaXRoZXIgd2UgZmVsbCBvZmYgdGhlIGVuZCBvZiB0aGUgcGF0dGVybiwgb3Igd2UncmUgZG9uZS5cbiAgICAgICAgaWYgKGZpID09PSBmbCAmJiBwaSA9PT0gcGwpIHtcbiAgICAgICAgICAgIC8vIHJhbiBvdXQgb2YgcGF0dGVybiBhbmQgZmlsZW5hbWUgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAgICAgICAgIC8vIGFuIGV4YWN0IGhpdCFcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZpID09PSBmbCkge1xuICAgICAgICAgICAgLy8gcmFuIG91dCBvZiBmaWxlLCBidXQgc3RpbGwgaGFkIHBhdHRlcm4gbGVmdC5cbiAgICAgICAgICAgIC8vIHRoaXMgaXMgb2sgaWYgd2UncmUgZG9pbmcgdGhlIG1hdGNoIGFzIHBhcnQgb2ZcbiAgICAgICAgICAgIC8vIGEgZ2xvYiBmcyB0cmF2ZXJzYWwuXG4gICAgICAgICAgICByZXR1cm4gcGFydGlhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwaSA9PT0gcGwpIHtcbiAgICAgICAgICAgIC8vIHJhbiBvdXQgb2YgcGF0dGVybiwgc3RpbGwgaGF2ZSBmaWxlIGxlZnQuXG4gICAgICAgICAgICAvLyB0aGlzIGlzIG9ubHkgYWNjZXB0YWJsZSBpZiB3ZSdyZSBvbiB0aGUgdmVyeSBsYXN0XG4gICAgICAgICAgICAvLyBlbXB0eSBzZWdtZW50IG9mIGEgZmlsZSB3aXRoIGEgdHJhaWxpbmcgc2xhc2guXG4gICAgICAgICAgICAvLyBhLyogc2hvdWxkIG1hdGNoIGEvYi9cbiAgICAgICAgICAgIHJldHVybiBmaSA9PT0gZmwgLSAxICYmIGZpbGVbZmldID09PSAnJztcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gc2hvdWxkIGJlIHVucmVhY2hhYmxlLlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3dGY/Jyk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICB9XG4gICAgYnJhY2VFeHBhbmQoKSB7XG4gICAgICAgIHJldHVybiBicmFjZUV4cGFuZCh0aGlzLnBhdHRlcm4sIHRoaXMub3B0aW9ucyk7XG4gICAgfVxuICAgIHBhcnNlKHBhdHRlcm4pIHtcbiAgICAgICAgYXNzZXJ0VmFsaWRQYXR0ZXJuKHBhdHRlcm4pO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAvLyBzaG9ydGN1dHNcbiAgICAgICAgaWYgKHBhdHRlcm4gPT09ICcqKicpXG4gICAgICAgICAgICByZXR1cm4gR0xPQlNUQVI7XG4gICAgICAgIGlmIChwYXR0ZXJuID09PSAnJylcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgLy8gZmFyIGFuZCBhd2F5LCB0aGUgbW9zdCBjb21tb24gZ2xvYiBwYXR0ZXJuIHBhcnRzIGFyZVxuICAgICAgICAvLyAqLCAqLiosIGFuZCAqLjxleHQ+ICBBZGQgYSBmYXN0IGNoZWNrIG1ldGhvZCBmb3IgdGhvc2UuXG4gICAgICAgIGxldCBtO1xuICAgICAgICBsZXQgZmFzdFRlc3QgPSBudWxsO1xuICAgICAgICBpZiAoKG0gPSBwYXR0ZXJuLm1hdGNoKHN0YXJSRSkpKSB7XG4gICAgICAgICAgICBmYXN0VGVzdCA9IG9wdGlvbnMuZG90ID8gc3RhclRlc3REb3QgOiBzdGFyVGVzdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgobSA9IHBhdHRlcm4ubWF0Y2goc3RhckRvdEV4dFJFKSkpIHtcbiAgICAgICAgICAgIGZhc3RUZXN0ID0gKG9wdGlvbnMubm9jYXNlID9cbiAgICAgICAgICAgICAgICBvcHRpb25zLmRvdCA/XG4gICAgICAgICAgICAgICAgICAgIHN0YXJEb3RFeHRUZXN0Tm9jYXNlRG90XG4gICAgICAgICAgICAgICAgICAgIDogc3RhckRvdEV4dFRlc3ROb2Nhc2VcbiAgICAgICAgICAgICAgICA6IG9wdGlvbnMuZG90ID8gc3RhckRvdEV4dFRlc3REb3RcbiAgICAgICAgICAgICAgICAgICAgOiBzdGFyRG90RXh0VGVzdCkobVsxXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKG0gPSBwYXR0ZXJuLm1hdGNoKHFtYXJrc1JFKSkpIHtcbiAgICAgICAgICAgIGZhc3RUZXN0ID0gKG9wdGlvbnMubm9jYXNlID9cbiAgICAgICAgICAgICAgICBvcHRpb25zLmRvdCA/XG4gICAgICAgICAgICAgICAgICAgIHFtYXJrc1Rlc3ROb2Nhc2VEb3RcbiAgICAgICAgICAgICAgICAgICAgOiBxbWFya3NUZXN0Tm9jYXNlXG4gICAgICAgICAgICAgICAgOiBvcHRpb25zLmRvdCA/IHFtYXJrc1Rlc3REb3RcbiAgICAgICAgICAgICAgICAgICAgOiBxbWFya3NUZXN0KShtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgobSA9IHBhdHRlcm4ubWF0Y2goc3RhckRvdFN0YXJSRSkpKSB7XG4gICAgICAgICAgICBmYXN0VGVzdCA9IG9wdGlvbnMuZG90ID8gc3RhckRvdFN0YXJUZXN0RG90IDogc3RhckRvdFN0YXJUZXN0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChtID0gcGF0dGVybi5tYXRjaChkb3RTdGFyUkUpKSkge1xuICAgICAgICAgICAgZmFzdFRlc3QgPSBkb3RTdGFyVGVzdDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZSA9IEFTVC5mcm9tR2xvYihwYXR0ZXJuLCB0aGlzLm9wdGlvbnMpLnRvTU1QYXR0ZXJuKCk7XG4gICAgICAgIGlmIChmYXN0VGVzdCAmJiB0eXBlb2YgcmUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAvLyBBdm9pZHMgb3ZlcnJpZGluZyBpbiBmcm96ZW4gZW52aXJvbm1lbnRzXG4gICAgICAgICAgICBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHJlLCAndGVzdCcsIHsgdmFsdWU6IGZhc3RUZXN0IH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZTtcbiAgICB9XG4gICAgbWFrZVJlKCkge1xuICAgICAgICBpZiAodGhpcy5yZWdleHAgfHwgdGhpcy5yZWdleHAgPT09IGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVnZXhwO1xuICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCB0aGlzLnNldCBpcyBhIDJkIGFycmF5IG9mIHBhcnRpYWxcbiAgICAgICAgLy8gcGF0dGVybiBzdHJpbmdzLCBvciBcIioqXCIuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEl0J3MgYmV0dGVyIHRvIHVzZSAubWF0Y2goKS4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkbid0XG4gICAgICAgIC8vIGJlIHVzZWQsIHJlYWxseSwgYnV0IGl0J3MgcHJldHR5IGNvbnZlbmllbnQgc29tZXRpbWVzLFxuICAgICAgICAvLyB3aGVuIHlvdSBqdXN0IHdhbnQgdG8gd29yayB3aXRoIGEgcmVnZXguXG4gICAgICAgIGNvbnN0IHNldCA9IHRoaXMuc2V0O1xuICAgICAgICBpZiAoIXNldC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucmVnZXhwID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWdleHA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgdHdvU3RhciA9IG9wdGlvbnMubm9nbG9ic3RhciA/IHN0YXJcbiAgICAgICAgICAgIDogb3B0aW9ucy5kb3QgPyB0d29TdGFyRG90XG4gICAgICAgICAgICAgICAgOiB0d29TdGFyTm9Eb3Q7XG4gICAgICAgIGNvbnN0IGZsYWdzID0gbmV3IFNldChvcHRpb25zLm5vY2FzZSA/IFsnaSddIDogW10pO1xuICAgICAgICAvLyByZWdleHBpZnkgbm9uLWdsb2JzdGFyIHBhdHRlcm5zXG4gICAgICAgIC8vIGlmICoqIGlzIG9ubHkgaXRlbSwgdGhlbiB3ZSBqdXN0IGRvIG9uZSB0d29TdGFyXG4gICAgICAgIC8vIGlmICoqIGlzIGZpcnN0LCBhbmQgdGhlcmUgYXJlIG1vcmUsIHByZXBlbmQgKFxcL3x0d29TdGFyXFwvKT8gdG8gbmV4dFxuICAgICAgICAvLyBpZiAqKiBpcyBsYXN0LCBhcHBlbmQgKFxcL3R3b1N0YXJ8KSB0byBwcmV2aW91c1xuICAgICAgICAvLyBpZiAqKiBpcyBpbiB0aGUgbWlkZGxlLCBhcHBlbmQgKFxcL3xcXC90d29TdGFyXFwvKSB0byBwcmV2aW91c1xuICAgICAgICAvLyB0aGVuIGZpbHRlciBvdXQgR0xPQlNUQVIgc3ltYm9sc1xuICAgICAgICBsZXQgcmUgPSBzZXRcbiAgICAgICAgICAgIC5tYXAocGF0dGVybiA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcCA9IHBhdHRlcm4ubWFwKHAgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZiBvZiBwLmZsYWdzLnNwbGl0KCcnKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLmFkZChmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0eXBlb2YgcCA9PT0gJ3N0cmluZycgPyByZWdFeHBFc2NhcGUocClcbiAgICAgICAgICAgICAgICAgICAgOiBwID09PSBHTE9CU1RBUiA/IEdMT0JTVEFSXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHAuX3NyYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBwLmZvckVhY2goKHAsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gcHBbaSArIDFdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXYgPSBwcFtpIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKHAgIT09IEdMT0JTVEFSIHx8IHByZXYgPT09IEdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHByZXYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkICYmIG5leHQgIT09IEdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcFtpICsgMV0gPSAnKD86XFxcXC98JyArIHR3b1N0YXIgKyAnXFxcXC8pPycgKyBuZXh0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHBbaV0gPSB0d29TdGFyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5leHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBwcFtpIC0gMV0gPSBwcmV2ICsgJyg/OlxcXFwvfFxcXFwvJyArIHR3b1N0YXIgKyAnKT8nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuZXh0ICE9PSBHTE9CU1RBUikge1xuICAgICAgICAgICAgICAgICAgICBwcFtpIC0gMV0gPSBwcmV2ICsgJyg/OlxcXFwvfFxcXFwvJyArIHR3b1N0YXIgKyAnXFxcXC8pJyArIG5leHQ7XG4gICAgICAgICAgICAgICAgICAgIHBwW2kgKyAxXSA9IEdMT0JTVEFSO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBwcC5maWx0ZXIocCA9PiBwICE9PSBHTE9CU1RBUik7XG4gICAgICAgICAgICAvLyBGb3IgcGFydGlhbCBtYXRjaGVzLCB3ZSBuZWVkIHRvIG1ha2UgdGhlIHBhdHRlcm4gbWF0Y2hcbiAgICAgICAgICAgIC8vIGFueSBwcmVmaXggb2YgdGhlIGZ1bGwgcGF0aC4gV2UgZG8gdGhpcyBieSBnZW5lcmF0aW5nXG4gICAgICAgICAgICAvLyBhbHRlcm5hdGl2ZSBwYXR0ZXJucyB0aGF0IG1hdGNoIHByb2dyZXNzaXZlbHkgbG9uZ2VyIHByZWZpeGVzLlxuICAgICAgICAgICAgaWYgKHRoaXMucGFydGlhbCAmJiBmaWx0ZXJlZC5sZW5ndGggPj0gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZWZpeGVzID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gZmlsdGVyZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4ZXMucHVzaChmaWx0ZXJlZC5zbGljZSgwLCBpKS5qb2luKCcvJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJyg/OicgKyBwcmVmaXhlcy5qb2luKCd8JykgKyAnKSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQuam9pbignLycpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJ3wnKTtcbiAgICAgICAgLy8gbmVlZCB0byB3cmFwIGluIHBhcmVucyBpZiB3ZSBoYWQgbW9yZSB0aGFuIG9uZSB0aGluZyB3aXRoIHwsXG4gICAgICAgIC8vIG90aGVyd2lzZSBvbmx5IHRoZSBmaXJzdCB3aWxsIGJlIGFuY2hvcmVkIHRvIF4gYW5kIHRoZSBsYXN0IHRvICRcbiAgICAgICAgY29uc3QgW29wZW4sIGNsb3NlXSA9IHNldC5sZW5ndGggPiAxID8gWycoPzonLCAnKSddIDogWycnLCAnJ107XG4gICAgICAgIC8vIG11c3QgbWF0Y2ggZW50aXJlIHBhdHRlcm5cbiAgICAgICAgLy8gZW5kaW5nIGluIGEgKiBvciAqKiB3aWxsIG1ha2UgaXQgbGVzcyBzdHJpY3QuXG4gICAgICAgIHJlID0gJ14nICsgb3BlbiArIHJlICsgY2xvc2UgKyAnJCc7XG4gICAgICAgIC8vIEluIHBhcnRpYWwgbW9kZSwgJy8nIHNob3VsZCBhbHdheXMgbWF0Y2ggYXMgaXQncyBhIHZhbGlkIHByZWZpeCBmb3IgYW55IHBhdHRlcm5cbiAgICAgICAgaWYgKHRoaXMucGFydGlhbCkge1xuICAgICAgICAgICAgcmUgPSAnXig/OlxcXFwvfCcgKyBvcGVuICsgcmUuc2xpY2UoMSwgLTEpICsgY2xvc2UgKyAnKSQnO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNhbiBtYXRjaCBhbnl0aGluZywgYXMgbG9uZyBhcyBpdCdzIG5vdCB0aGlzLlxuICAgICAgICBpZiAodGhpcy5uZWdhdGUpXG4gICAgICAgICAgICByZSA9ICdeKD8hJyArIHJlICsgJykuKyQnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5yZWdleHAgPSBuZXcgUmVnRXhwKHJlLCBbLi4uZmxhZ3NdLmpvaW4oJycpKTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIC8vIHNob3VsZCBiZSBpbXBvc3NpYmxlXG4gICAgICAgICAgICB0aGlzLnJlZ2V4cCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2V4cDtcbiAgICB9XG4gICAgc2xhc2hTcGxpdChwKSB7XG4gICAgICAgIC8vIGlmIHAgc3RhcnRzIHdpdGggLy8gb24gd2luZG93cywgd2UgcHJlc2VydmUgdGhhdFxuICAgICAgICAvLyBzbyB0aGF0IFVOQyBwYXRocyBhcmVuJ3QgYnJva2VuLiAgT3RoZXJ3aXNlLCBhbnkgbnVtYmVyIG9mXG4gICAgICAgIC8vIC8gY2hhcmFjdGVycyBhcmUgY29hbGVzY2VkIGludG8gb25lLCB1bmxlc3NcbiAgICAgICAgLy8gcHJlc2VydmVNdWx0aXBsZVNsYXNoZXMgaXMgc2V0IHRvIHRydWUuXG4gICAgICAgIGlmICh0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gcC5zcGxpdCgnLycpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaXNXaW5kb3dzICYmIC9eXFwvXFwvW14vXSsvLnRlc3QocCkpIHtcbiAgICAgICAgICAgIC8vIGFkZCBhbiBleHRyYSAnJyBmb3IgdGhlIG9uZSB3ZSBsb3NlXG4gICAgICAgICAgICByZXR1cm4gWycnLCAuLi5wLnNwbGl0KC9cXC8rLyldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHAuc3BsaXQoL1xcLysvKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtYXRjaChmLCBwYXJ0aWFsID0gdGhpcy5wYXJ0aWFsKSB7XG4gICAgICAgIHRoaXMuZGVidWcoJ21hdGNoJywgZiwgdGhpcy5wYXR0ZXJuKTtcbiAgICAgICAgLy8gc2hvcnQtY2lyY3VpdCBpbiB0aGUgY2FzZSBvZiBidXN0ZWQgdGhpbmdzLlxuICAgICAgICAvLyBjb21tZW50cywgZXRjLlxuICAgICAgICBpZiAodGhpcy5jb21tZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZW1wdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBmID09PSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZiA9PT0gJy8nICYmIHBhcnRpYWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIC8vIHdpbmRvd3M6IG5lZWQgdG8gdXNlIC8sIG5vdCBcXFxuICAgICAgICBpZiAodGhpcy5pc1dpbmRvd3MpIHtcbiAgICAgICAgICAgIGYgPSBmLnNwbGl0KCdcXFxcJykuam9pbignLycpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRyZWF0IHRoZSB0ZXN0IHBhdGggYXMgYSBzZXQgb2YgcGF0aHBhcnRzLlxuICAgICAgICBjb25zdCBmZiA9IHRoaXMuc2xhc2hTcGxpdChmKTtcbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sICdzcGxpdCcsIGZmKTtcbiAgICAgICAgLy8ganVzdCBPTkUgb2YgdGhlIHBhdHRlcm4gc2V0cyBpbiB0aGlzLnNldCBuZWVkcyB0byBtYXRjaFxuICAgICAgICAvLyBpbiBvcmRlciBmb3IgaXQgdG8gYmUgdmFsaWQuICBJZiBuZWdhdGluZywgdGhlbiBqdXN0IG9uZVxuICAgICAgICAvLyBtYXRjaCBtZWFucyB0aGF0IHdlIGhhdmUgZmFpbGVkLlxuICAgICAgICAvLyBFaXRoZXIgd2F5LCByZXR1cm4gb24gdGhlIGZpcnN0IGhpdC5cbiAgICAgICAgY29uc3Qgc2V0ID0gdGhpcy5zZXQ7XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCAnc2V0Jywgc2V0KTtcbiAgICAgICAgLy8gRmluZCB0aGUgYmFzZW5hbWUgb2YgdGhlIHBhdGggYnkgbG9va2luZyBmb3IgdGhlIGxhc3Qgbm9uLWVtcHR5IHNlZ21lbnRcbiAgICAgICAgbGV0IGZpbGVuYW1lID0gZmZbZmYubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICghZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBmZi5sZW5ndGggLSAyOyAhZmlsZW5hbWUgJiYgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IGZmW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBzZXQpIHtcbiAgICAgICAgICAgIGxldCBmaWxlID0gZmY7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5tYXRjaEJhc2UgJiYgcGF0dGVybi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBmaWxlID0gW2ZpbGVuYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGhpdCA9IHRoaXMubWF0Y2hPbmUoZmlsZSwgcGF0dGVybiwgcGFydGlhbCk7XG4gICAgICAgICAgICBpZiAoaGl0KSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZmxpcE5lZ2F0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLm5lZ2F0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBkaWRuJ3QgZ2V0IGFueSBoaXRzLiAgdGhpcyBpcyBzdWNjZXNzIGlmIGl0J3MgYSBuZWdhdGl2ZVxuICAgICAgICAvLyBwYXR0ZXJuLCBmYWlsdXJlIG90aGVyd2lzZS5cbiAgICAgICAgaWYgKG9wdGlvbnMuZmxpcE5lZ2F0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5lZ2F0ZTtcbiAgICB9XG4gICAgc3RhdGljIGRlZmF1bHRzKGRlZikge1xuICAgICAgICByZXR1cm4gbWluaW1hdGNoLmRlZmF1bHRzKGRlZikuTWluaW1hdGNoO1xuICAgIH1cbn1cbi8qIGM4IGlnbm9yZSBzdGFydCAqL1xuZXhwb3J0IHsgQVNUIH0gZnJvbSAnLi9hc3QuanMnO1xuZXhwb3J0IHsgZXNjYXBlIH0gZnJvbSAnLi9lc2NhcGUuanMnO1xuZXhwb3J0IHsgdW5lc2NhcGUgfSBmcm9tICcuL3VuZXNjYXBlLmpzJztcbi8qIGM4IGlnbm9yZSBzdG9wICovXG5taW5pbWF0Y2guQVNUID0gQVNUO1xubWluaW1hdGNoLk1pbmltYXRjaCA9IE1pbmltYXRjaDtcbm1pbmltYXRjaC5lc2NhcGUgPSBlc2NhcGU7XG5taW5pbWF0Y2gudW5lc2NhcGUgPSB1bmVzY2FwZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgTWluaW1hdGNoIH0gZnJvbSAnbWluaW1hdGNoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBQYXRoU2N1cnJ5LCBQYXRoU2N1cnJ5RGFyd2luLCBQYXRoU2N1cnJ5UG9zaXgsIFBhdGhTY3VycnlXaW4zMiwgfSBmcm9tICdwYXRoLXNjdXJyeSc7XG5pbXBvcnQgeyBQYXR0ZXJuIH0gZnJvbSAnLi9wYXR0ZXJuLmpzJztcbmltcG9ydCB7IEdsb2JTdHJlYW0sIEdsb2JXYWxrZXIgfSBmcm9tICcuL3dhbGtlci5qcyc7XG4vLyBpZiBubyBwcm9jZXNzIGdsb2JhbCwganVzdCBjYWxsIGl0IGxpbnV4LlxuLy8gc28gd2UgZGVmYXVsdCB0byBjYXNlLXNlbnNpdGl2ZSwgLyBzZXBhcmF0b3JzXG5jb25zdCBkZWZhdWx0UGxhdGZvcm0gPSAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmXG4gICAgcHJvY2VzcyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnBsYXRmb3JtID09PSAnc3RyaW5nJykgP1xuICAgIHByb2Nlc3MucGxhdGZvcm1cbiAgICA6ICdsaW51eCc7XG4vKipcbiAqIEFuIG9iamVjdCB0aGF0IGNhbiBwZXJmb3JtIGdsb2IgcGF0dGVybiB0cmF2ZXJzYWxzLlxuICovXG5leHBvcnQgY2xhc3MgR2xvYiB7XG4gICAgYWJzb2x1dGU7XG4gICAgY3dkO1xuICAgIHJvb3Q7XG4gICAgZG90O1xuICAgIGRvdFJlbGF0aXZlO1xuICAgIGZvbGxvdztcbiAgICBpZ25vcmU7XG4gICAgbWFnaWNhbEJyYWNlcztcbiAgICBtYXJrO1xuICAgIG1hdGNoQmFzZTtcbiAgICBtYXhEZXB0aDtcbiAgICBub2JyYWNlO1xuICAgIG5vY2FzZTtcbiAgICBub2RpcjtcbiAgICBub2V4dDtcbiAgICBub2dsb2JzdGFyO1xuICAgIHBhdHRlcm47XG4gICAgcGxhdGZvcm07XG4gICAgcmVhbHBhdGg7XG4gICAgc2N1cnJ5O1xuICAgIHN0YXQ7XG4gICAgc2lnbmFsO1xuICAgIHdpbmRvd3NQYXRoc05vRXNjYXBlO1xuICAgIHdpdGhGaWxlVHlwZXM7XG4gICAgaW5jbHVkZUNoaWxkTWF0Y2hlcztcbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgICovXG4gICAgb3B0cztcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBwYXJzZWQgaW1tdXRhYmxlIHtAbGluayBQYXR0ZXJufSBvYmplY3RzLlxuICAgICAqL1xuICAgIHBhdHRlcm5zO1xuICAgIC8qKlxuICAgICAqIEFsbCBvcHRpb25zIGFyZSBzdG9yZWQgYXMgcHJvcGVydGllcyBvbiB0aGUgYEdsb2JgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIFNlZSB7QGxpbmsgR2xvYk9wdGlvbnN9IGZvciBmdWxsIG9wdGlvbnMgZGVzY3JpcHRpb25zLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IGEgcHJldmlvdXMgYEdsb2JgIG9iamVjdCBjYW4gYmUgcGFzc2VkIGFzIHRoZVxuICAgICAqIGBHbG9iT3B0aW9uc2AgdG8gYW5vdGhlciBgR2xvYmAgaW5zdGFudGlhdGlvbiB0byByZS11c2Ugc2V0dGluZ3NcbiAgICAgKiBhbmQgY2FjaGVzIHdpdGggYSBuZXcgcGF0dGVybi5cbiAgICAgKlxuICAgICAqIFRyYXZlcnNhbCBmdW5jdGlvbnMgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0byBydW4gdGhlIHdhbGtcbiAgICAgKiBhZ2Fpbi5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwYXR0ZXJuLCBvcHRzKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoIW9wdHMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdnbG9iIG9wdGlvbnMgcmVxdWlyZWQnKTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy53aXRoRmlsZVR5cGVzID0gISFvcHRzLndpdGhGaWxlVHlwZXM7XG4gICAgICAgIHRoaXMuc2lnbmFsID0gb3B0cy5zaWduYWw7XG4gICAgICAgIHRoaXMuZm9sbG93ID0gISFvcHRzLmZvbGxvdztcbiAgICAgICAgdGhpcy5kb3QgPSAhIW9wdHMuZG90O1xuICAgICAgICB0aGlzLmRvdFJlbGF0aXZlID0gISFvcHRzLmRvdFJlbGF0aXZlO1xuICAgICAgICB0aGlzLm5vZGlyID0gISFvcHRzLm5vZGlyO1xuICAgICAgICB0aGlzLm1hcmsgPSAhIW9wdHMubWFyaztcbiAgICAgICAgaWYgKCFvcHRzLmN3ZCkge1xuICAgICAgICAgICAgdGhpcy5jd2QgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRzLmN3ZCBpbnN0YW5jZW9mIFVSTCB8fCBvcHRzLmN3ZC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcbiAgICAgICAgICAgIG9wdHMuY3dkID0gZmlsZVVSTFRvUGF0aChvcHRzLmN3ZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jd2QgPSBvcHRzLmN3ZCB8fCAnJztcbiAgICAgICAgdGhpcy5yb290ID0gb3B0cy5yb290O1xuICAgICAgICB0aGlzLm1hZ2ljYWxCcmFjZXMgPSAhIW9wdHMubWFnaWNhbEJyYWNlcztcbiAgICAgICAgdGhpcy5ub2JyYWNlID0gISFvcHRzLm5vYnJhY2U7XG4gICAgICAgIHRoaXMubm9leHQgPSAhIW9wdHMubm9leHQ7XG4gICAgICAgIHRoaXMucmVhbHBhdGggPSAhIW9wdHMucmVhbHBhdGg7XG4gICAgICAgIHRoaXMuYWJzb2x1dGUgPSBvcHRzLmFic29sdXRlO1xuICAgICAgICB0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMgPSBvcHRzLmluY2x1ZGVDaGlsZE1hdGNoZXMgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLm5vZ2xvYnN0YXIgPSAhIW9wdHMubm9nbG9ic3RhcjtcbiAgICAgICAgdGhpcy5tYXRjaEJhc2UgPSAhIW9wdHMubWF0Y2hCYXNlO1xuICAgICAgICB0aGlzLm1heERlcHRoID1cbiAgICAgICAgICAgIHR5cGVvZiBvcHRzLm1heERlcHRoID09PSAnbnVtYmVyJyA/IG9wdHMubWF4RGVwdGggOiBJbmZpbml0eTtcbiAgICAgICAgdGhpcy5zdGF0ID0gISFvcHRzLnN0YXQ7XG4gICAgICAgIHRoaXMuaWdub3JlID0gb3B0cy5pZ25vcmU7XG4gICAgICAgIGlmICh0aGlzLndpdGhGaWxlVHlwZXMgJiYgdGhpcy5hYnNvbHV0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBzZXQgYWJzb2x1dGUgYW5kIHdpdGhGaWxlVHlwZXM6dHJ1ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHBhdHRlcm4gPSBbcGF0dGVybl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSA9XG4gICAgICAgICAgICAhIW9wdHMud2luZG93c1BhdGhzTm9Fc2NhcGUgfHxcbiAgICAgICAgICAgICAgICBvcHRzLmFsbG93V2luZG93c0VzY2FwZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlKSB7XG4gICAgICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5tYXAocCA9PiBwLnJlcGxhY2UoL1xcXFwvZywgJy8nKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF0Y2hCYXNlKSB7XG4gICAgICAgICAgICBpZiAob3B0cy5ub2dsb2JzdGFyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYmFzZSBtYXRjaGluZyByZXF1aXJlcyBnbG9ic3RhcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ubWFwKHAgPT4gKHAuaW5jbHVkZXMoJy8nKSA/IHAgOiBgLi8qKi8ke3B9YCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm47XG4gICAgICAgIHRoaXMucGxhdGZvcm0gPSBvcHRzLnBsYXRmb3JtIHx8IGRlZmF1bHRQbGF0Zm9ybTtcbiAgICAgICAgdGhpcy5vcHRzID0geyAuLi5vcHRzLCBwbGF0Zm9ybTogdGhpcy5wbGF0Zm9ybSB9O1xuICAgICAgICBpZiAob3B0cy5zY3VycnkpIHtcbiAgICAgICAgICAgIHRoaXMuc2N1cnJ5ID0gb3B0cy5zY3Vycnk7XG4gICAgICAgICAgICBpZiAob3B0cy5ub2Nhc2UgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIG9wdHMubm9jYXNlICE9PSBvcHRzLnNjdXJyeS5ub2Nhc2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vY2FzZSBvcHRpb24gY29udHJhZGljdHMgcHJvdmlkZWQgc2N1cnJ5IG9wdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgU2N1cnJ5ID0gb3B0cy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IFBhdGhTY3VycnlXaW4zMlxuICAgICAgICAgICAgICAgIDogb3B0cy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicgPyBQYXRoU2N1cnJ5RGFyd2luXG4gICAgICAgICAgICAgICAgICAgIDogb3B0cy5wbGF0Zm9ybSA/IFBhdGhTY3VycnlQb3NpeFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBQYXRoU2N1cnJ5O1xuICAgICAgICAgICAgdGhpcy5zY3VycnkgPSBuZXcgU2N1cnJ5KHRoaXMuY3dkLCB7XG4gICAgICAgICAgICAgICAgbm9jYXNlOiBvcHRzLm5vY2FzZSxcbiAgICAgICAgICAgICAgICBmczogb3B0cy5mcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubm9jYXNlID0gdGhpcy5zY3Vycnkubm9jYXNlO1xuICAgICAgICAvLyBJZiB5b3UgZG8gbm9jYXNlOnRydWUgb24gYSBjYXNlLXNlbnNpdGl2ZSBmaWxlIHN5c3RlbSwgdGhlblxuICAgICAgICAvLyB3ZSBuZWVkIHRvIHVzZSByZWdleHBzIGluc3RlYWQgb2Ygc3RyaW5ncyBmb3Igbm9uLW1hZ2ljXG4gICAgICAgIC8vIHBhdGggcG9ydGlvbnMsIGJlY2F1c2Ugc3RhdHRpbmcgYGFCY2Agd29uJ3QgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgLy8gZm9yIHRoZSBmaWxlIGBBYkNgIGZvciBleGFtcGxlLlxuICAgICAgICBjb25zdCBub2Nhc2VNYWdpY09ubHkgPSB0aGlzLnBsYXRmb3JtID09PSAnZGFyd2luJyB8fCB0aGlzLnBsYXRmb3JtID09PSAnd2luMzInO1xuICAgICAgICBjb25zdCBtbW8gPSB7XG4gICAgICAgICAgICAvLyBkZWZhdWx0IG5vY2FzZSBiYXNlZCBvbiBwbGF0Zm9ybVxuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgICAgIGRvdDogdGhpcy5kb3QsXG4gICAgICAgICAgICBtYXRjaEJhc2U6IHRoaXMubWF0Y2hCYXNlLFxuICAgICAgICAgICAgbm9icmFjZTogdGhpcy5ub2JyYWNlLFxuICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgIG5vY2FzZU1hZ2ljT25seSxcbiAgICAgICAgICAgIG5vY29tbWVudDogdHJ1ZSxcbiAgICAgICAgICAgIG5vZXh0OiB0aGlzLm5vZXh0LFxuICAgICAgICAgICAgbm9uZWdhdGU6IHRydWUsXG4gICAgICAgICAgICBvcHRpbWl6YXRpb25MZXZlbDogMixcbiAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgd2luZG93c1BhdGhzTm9Fc2NhcGU6IHRoaXMud2luZG93c1BhdGhzTm9Fc2NhcGUsXG4gICAgICAgICAgICBkZWJ1ZzogISF0aGlzLm9wdHMuZGVidWcsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG1tcyA9IHRoaXMucGF0dGVybi5tYXAocCA9PiBuZXcgTWluaW1hdGNoKHAsIG1tbykpO1xuICAgICAgICBjb25zdCBbbWF0Y2hTZXQsIGdsb2JQYXJ0c10gPSBtbXMucmVkdWNlKChzZXQsIG0pID0+IHtcbiAgICAgICAgICAgIHNldFswXS5wdXNoKC4uLm0uc2V0KTtcbiAgICAgICAgICAgIHNldFsxXS5wdXNoKC4uLm0uZ2xvYlBhcnRzKTtcbiAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgIH0sIFtbXSwgW11dKTtcbiAgICAgICAgdGhpcy5wYXR0ZXJucyA9IG1hdGNoU2V0Lm1hcCgoc2V0LCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBnID0gZ2xvYlBhcnRzW2ldO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAoIWcpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBhdHRlcm4gb2JqZWN0Jyk7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQYXR0ZXJuKHNldCwgZywgMCwgdGhpcy5wbGF0Zm9ybSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyB3YWxrKCkge1xuICAgICAgICAvLyBXYWxrZXJzIGFsd2F5cyByZXR1cm4gYXJyYXkgb2YgUGF0aCBvYmplY3RzLCBzbyB3ZSBqdXN0IGhhdmUgdG9cbiAgICAgICAgLy8gY29lcmNlIHRoZW0gaW50byB0aGUgcmlnaHQgc2hhcGUuICBJdCB3aWxsIGhhdmUgYWxyZWFkeSBjYWxsZWRcbiAgICAgICAgLy8gcmVhbHBhdGgoKSBpZiB0aGUgb3B0aW9uIHdhcyBzZXQgdG8gZG8gc28sIHNvIHdlIGtub3cgdGhhdCdzIGNhY2hlZC5cbiAgICAgICAgLy8gc3RhcnQgb3V0IGtub3dpbmcgdGhlIGN3ZCwgYXQgbGVhc3RcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLihhd2FpdCBuZXcgR2xvYldhbGtlcih0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgICAgICAgbWF4RGVwdGg6IHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgICAgIDogSW5maW5pdHksXG4gICAgICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlQ2hpbGRNYXRjaGVzOiB0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMsXG4gICAgICAgICAgICB9KS53YWxrKCkpLFxuICAgICAgICBdO1xuICAgIH1cbiAgICB3YWxrU3luYygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLm5ldyBHbG9iV2Fsa2VyKHRoaXMucGF0dGVybnMsIHRoaXMuc2N1cnJ5LmN3ZCwge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICAgICAgICBtYXhEZXB0aDogdGhpcy5tYXhEZXB0aCAhPT0gSW5maW5pdHkgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1heERlcHRoICsgdGhpcy5zY3VycnkuY3dkLmRlcHRoKClcbiAgICAgICAgICAgICAgICAgICAgOiBJbmZpbml0eSxcbiAgICAgICAgICAgICAgICBwbGF0Zm9ybTogdGhpcy5wbGF0Zm9ybSxcbiAgICAgICAgICAgICAgICBub2Nhc2U6IHRoaXMubm9jYXNlLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM6IHRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyxcbiAgICAgICAgICAgIH0pLndhbGtTeW5jKCksXG4gICAgICAgIF07XG4gICAgfVxuICAgIHN0cmVhbSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBHbG9iU3RyZWFtKHRoaXMucGF0dGVybnMsIHRoaXMuc2N1cnJ5LmN3ZCwge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgICAgbWF4RGVwdGg6IHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ID9cbiAgICAgICAgICAgICAgICB0aGlzLm1heERlcHRoICsgdGhpcy5zY3VycnkuY3dkLmRlcHRoKClcbiAgICAgICAgICAgICAgICA6IEluZmluaXR5LFxuICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICBub2Nhc2U6IHRoaXMubm9jYXNlLFxuICAgICAgICAgICAgaW5jbHVkZUNoaWxkTWF0Y2hlczogdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzLFxuICAgICAgICB9KS5zdHJlYW0oKTtcbiAgICB9XG4gICAgc3RyZWFtU3luYygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBHbG9iU3RyZWFtKHRoaXMucGF0dGVybnMsIHRoaXMuc2N1cnJ5LmN3ZCwge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgICAgbWF4RGVwdGg6IHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ID9cbiAgICAgICAgICAgICAgICB0aGlzLm1heERlcHRoICsgdGhpcy5zY3VycnkuY3dkLmRlcHRoKClcbiAgICAgICAgICAgICAgICA6IEluZmluaXR5LFxuICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICBub2Nhc2U6IHRoaXMubm9jYXNlLFxuICAgICAgICAgICAgaW5jbHVkZUNoaWxkTWF0Y2hlczogdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzLFxuICAgICAgICB9KS5zdHJlYW1TeW5jKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgc3luYyBpdGVyYXRpb24gZnVuY3Rpb24uIFJldHVybnMgYSBHZW5lcmF0b3IgdGhhdFxuICAgICAqIGl0ZXJhdGVzIG92ZXIgdGhlIHJlc3VsdHMuXG4gICAgICovXG4gICAgaXRlcmF0ZVN5bmMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmVhbVN5bmMoKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVyYXRlU3luYygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IGFzeW5jIGl0ZXJhdGlvbiBmdW5jdGlvbi4gUmV0dXJucyBhbiBBc3luY0dlbmVyYXRvciB0aGF0XG4gICAgICogaXRlcmF0ZXMgb3ZlciB0aGUgcmVzdWx0cy5cbiAgICAgKi9cbiAgICBpdGVyYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJlYW0oKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcbiAgICB9XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0ZSgpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdsb2IuanMubWFwIiwKICAgICJpbXBvcnR7dHJhY2luZ0NoYW5uZWwgYXMgRyxjaGFubmVsIGFzIFB9ZnJvbVwibm9kZTpkaWFnbm9zdGljc19jaGFubmVsXCI7dmFyIFM9UChcImxydS1jYWNoZTptZXRyaWNzXCIpLFc9RyhcImxydS1jYWNoZVwiKTt2YXIgTD10eXBlb2YgcGVyZm9ybWFuY2U9PVwib2JqZWN0XCImJnBlcmZvcm1hbmNlJiZ0eXBlb2YgcGVyZm9ybWFuY2Uubm93PT1cImZ1bmN0aW9uXCI/cGVyZm9ybWFuY2U6RGF0ZTt2YXIgRD0oKT0+Uy5oYXNTdWJzY3JpYmVyc3x8Vy5oYXNTdWJzY3JpYmVycyxVPW5ldyBTZXQsTT10eXBlb2YgcHJvY2Vzcz09XCJvYmplY3RcIiYmcHJvY2Vzcz9wcm9jZXNzOnt9LGs9KHUsZSx0LGkpPT57dHlwZW9mIE0uZW1pdFdhcm5pbmc9PVwiZnVuY3Rpb25cIj9NLmVtaXRXYXJuaW5nKHUsZSx0LGkpOmNvbnNvbGUuZXJyb3IoYFske3R9XSAke2V9OiAke3V9YCl9LEg9dT0+IVUuaGFzKHUpO3ZhciBUPXU9PiEhdSYmdT09PU1hdGguZmxvb3IodSkmJnU+MCYmaXNGaW5pdGUodSksaj11PT5UKHUpP3U8PU1hdGgucG93KDIsOCk/VWludDhBcnJheTp1PD1NYXRoLnBvdygyLDE2KT9VaW50MTZBcnJheTp1PD1NYXRoLnBvdygyLDMyKT9VaW50MzJBcnJheTp1PD1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUj9POm51bGw6bnVsbCxPPWNsYXNzIGV4dGVuZHMgQXJyYXl7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5maWxsKDApfX0sUj1jbGFzcyB1e2hlYXA7bGVuZ3RoO3N0YXRpYyNvPSExO3N0YXRpYyBjcmVhdGUoZSl7bGV0IHQ9aihlKTtpZighdClyZXR1cm5bXTt1LiNvPSEwO2xldCBpPW5ldyB1KGUsdCk7cmV0dXJuIHUuI289ITEsaX1jb25zdHJ1Y3RvcihlLHQpe2lmKCF1LiNvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnN0YW50aWF0ZSBTdGFjayB1c2luZyBTdGFjay5jcmVhdGUobilcIik7dGhpcy5oZWFwPW5ldyB0KGUpLHRoaXMubGVuZ3RoPTB9cHVzaChlKXt0aGlzLmhlYXBbdGhpcy5sZW5ndGgrK109ZX1wb3AoKXtyZXR1cm4gdGhpcy5oZWFwWy0tdGhpcy5sZW5ndGhdfX0sST1jbGFzcyB1eyNvOyNjOyNTOyNPOyN3OyNNOyNJOyNtO2dldCBwZXJmKCl7cmV0dXJuIHRoaXMuI219dHRsO3R0bFJlc29sdXRpb247dHRsQXV0b3B1cmdlO3VwZGF0ZUFnZU9uR2V0O3VwZGF0ZUFnZU9uSGFzO2FsbG93U3RhbGU7bm9EaXNwb3NlT25TZXQ7bm9VcGRhdGVUVEw7bWF4RW50cnlTaXplO3NpemVDYWxjdWxhdGlvbjtub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb247bm9EZWxldGVPblN0YWxlR2V0O2FsbG93U3RhbGVPbkZldGNoQWJvcnQ7YWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb247aWdub3JlRmV0Y2hBYm9ydDtiYWNrZ3JvdW5kRmV0Y2hTaXplOyNuOyNiOyNzOyNpOyN0OyNsOyN1OyNhOyNoOyN5OyNyOyNfOyNGOyNkOyNnOyNUOyNVOyNmOyN4O3N0YXRpYyB1bnNhZmVFeHBvc2VJbnRlcm5hbHMoZSl7cmV0dXJue3N0YXJ0czplLiNGLHR0bHM6ZS4jZCxhdXRvcHVyZ2VUaW1lcnM6ZS4jZyxzaXplczplLiNfLGtleU1hcDplLiNzLGtleUxpc3Q6ZS4jaSx2YWxMaXN0OmUuI3QsbmV4dDplLiNsLHByZXY6ZS4jdSxnZXQgaGVhZCgpe3JldHVybiBlLiNhfSxnZXQgdGFpbCgpe3JldHVybiBlLiNofSxmcmVlOmUuI3ksaXNCYWNrZ3JvdW5kRmV0Y2g6dD0+ZS4jZSh0KSxiYWNrZ3JvdW5kRmV0Y2g6KHQsaSxzLG4pPT5lLiNQKHQsaSxzLG4pLG1vdmVUb1RhaWw6dD0+ZS4jTCh0KSxpbmRleGVzOnQ9PmUuI0EodCkscmluZGV4ZXM6dD0+ZS4jeih0KSxpc1N0YWxlOnQ9PmUuI3AodCl9fWdldCBtYXgoKXtyZXR1cm4gdGhpcy4jb31nZXQgbWF4U2l6ZSgpe3JldHVybiB0aGlzLiNjfWdldCBjYWxjdWxhdGVkU2l6ZSgpe3JldHVybiB0aGlzLiNifWdldCBzaXplKCl7cmV0dXJuIHRoaXMuI259Z2V0IGZldGNoTWV0aG9kKCl7cmV0dXJuIHRoaXMuI019Z2V0IG1lbW9NZXRob2QoKXtyZXR1cm4gdGhpcy4jSX1nZXQgZGlzcG9zZSgpe3JldHVybiB0aGlzLiNTfWdldCBvbkluc2VydCgpe3JldHVybiB0aGlzLiNPfWdldCBkaXNwb3NlQWZ0ZXIoKXtyZXR1cm4gdGhpcy4jd31jb25zdHJ1Y3RvcihlKXtsZXR7bWF4OnQ9MCx0dGw6aSx0dGxSZXNvbHV0aW9uOnM9MSx0dGxBdXRvcHVyZ2U6bix1cGRhdGVBZ2VPbkdldDpyLHVwZGF0ZUFnZU9uSGFzOmgsYWxsb3dTdGFsZTphLGRpc3Bvc2U6byxvbkluc2VydDpkLGRpc3Bvc2VBZnRlcjp5LG5vRGlzcG9zZU9uU2V0Ol8sbm9VcGRhdGVUVEw6YyxtYXhTaXplOmc9MCxtYXhFbnRyeVNpemU6Zj0wLHNpemVDYWxjdWxhdGlvbjpiLGZldGNoTWV0aG9kOmwsbWVtb01ldGhvZDp3LG5vRGVsZXRlT25GZXRjaFJlamVjdGlvbjpGLG5vRGVsZXRlT25TdGFsZUdldDptLGFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uOnAsYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydDpBLGlnbm9yZUZldGNoQWJvcnQ6eixiYWNrZ3JvdW5kRmV0Y2hTaXplOkM9MSxwZXJmOkV9PWU7aWYodGhpcy5iYWNrZ3JvdW5kRmV0Y2hTaXplPUMsRSE9PXZvaWQgMCYmdHlwZW9mIEU/Lm5vdyE9XCJmdW5jdGlvblwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJwZXJmIG9wdGlvbiBtdXN0IGhhdmUgYSBub3coKSBtZXRob2QgaWYgc3BlY2lmaWVkXCIpO2lmKHRoaXMuI209RT8/TCx0IT09MCYmIVQodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm1heCBvcHRpb24gbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXJcIik7bGV0IHY9dD9qKHQpOkFycmF5O2lmKCF2KXRocm93IG5ldyBFcnJvcihcImludmFsaWQgbWF4IHZhbHVlOiBcIit0KTtpZih0aGlzLiNvPXQsdGhpcy4jYz1nLHRoaXMubWF4RW50cnlTaXplPWZ8fHRoaXMuI2MsdGhpcy5zaXplQ2FsY3VsYXRpb249Yix0aGlzLnNpemVDYWxjdWxhdGlvbil7aWYoIXRoaXMuI2MmJiF0aGlzLm1heEVudHJ5U2l6ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiY2Fubm90IHNldCBzaXplQ2FsY3VsYXRpb24gd2l0aG91dCBzZXR0aW5nIG1heFNpemUgb3IgbWF4RW50cnlTaXplXCIpO2lmKHR5cGVvZiB0aGlzLnNpemVDYWxjdWxhdGlvbiE9XCJmdW5jdGlvblwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJzaXplQ2FsY3VsYXRpb24gc2V0IHRvIG5vbi1mdW5jdGlvblwiKX1pZih3IT09dm9pZCAwJiZ0eXBlb2YgdyE9XCJmdW5jdGlvblwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJtZW1vTWV0aG9kIG11c3QgYmUgYSBmdW5jdGlvbiBpZiBkZWZpbmVkXCIpO2lmKHRoaXMuI0k9dyxsIT09dm9pZCAwJiZ0eXBlb2YgbCE9XCJmdW5jdGlvblwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJmZXRjaE1ldGhvZCBtdXN0IGJlIGEgZnVuY3Rpb24gaWYgc3BlY2lmaWVkXCIpO2lmKHRoaXMuI009bCx0aGlzLiNVPSEhbCx0aGlzLiNzPW5ldyBNYXAsdGhpcy4jaT1BcnJheS5mcm9tKHtsZW5ndGg6dH0pLmZpbGwodm9pZCAwKSx0aGlzLiN0PUFycmF5LmZyb20oe2xlbmd0aDp0fSkuZmlsbCh2b2lkIDApLHRoaXMuI2w9bmV3IHYodCksdGhpcy4jdT1uZXcgdih0KSx0aGlzLiNhPTAsdGhpcy4jaD0wLHRoaXMuI3k9Ui5jcmVhdGUodCksdGhpcy4jbj0wLHRoaXMuI2I9MCx0eXBlb2Ygbz09XCJmdW5jdGlvblwiJiYodGhpcy4jUz1vKSx0eXBlb2YgZD09XCJmdW5jdGlvblwiJiYodGhpcy4jTz1kKSx0eXBlb2YgeT09XCJmdW5jdGlvblwiPyh0aGlzLiN3PXksdGhpcy4jcj1bXSk6KHRoaXMuI3c9dm9pZCAwLHRoaXMuI3I9dm9pZCAwKSx0aGlzLiNUPSEhdGhpcy4jUyx0aGlzLiN4PSEhdGhpcy4jTyx0aGlzLiNmPSEhdGhpcy4jdyx0aGlzLm5vRGlzcG9zZU9uU2V0PSEhXyx0aGlzLm5vVXBkYXRlVFRMPSEhYyx0aGlzLm5vRGVsZXRlT25GZXRjaFJlamVjdGlvbj0hIUYsdGhpcy5hbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbj0hIXAsdGhpcy5hbGxvd1N0YWxlT25GZXRjaEFib3J0PSEhQSx0aGlzLmlnbm9yZUZldGNoQWJvcnQ9ISF6LHRoaXMubWF4RW50cnlTaXplIT09MCl7aWYodGhpcy4jYyE9PTAmJiFUKHRoaXMuI2MpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJtYXhTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNwZWNpZmllZFwiKTtpZighVCh0aGlzLm1heEVudHJ5U2l6ZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm1heEVudHJ5U2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBzcGVjaWZpZWRcIik7dGhpcy4jWCgpfWlmKHRoaXMuYWxsb3dTdGFsZT0hIWEsdGhpcy5ub0RlbGV0ZU9uU3RhbGVHZXQ9ISFtLHRoaXMudXBkYXRlQWdlT25HZXQ9ISFyLHRoaXMudXBkYXRlQWdlT25IYXM9ISFoLHRoaXMudHRsUmVzb2x1dGlvbj1UKHMpfHxzPT09MD9zOjEsdGhpcy50dGxBdXRvcHVyZ2U9ISFuLHRoaXMudHRsPWl8fDAsdGhpcy50dGwpe2lmKCFUKHRoaXMudHRsKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwidHRsIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHNwZWNpZmllZFwiKTt0aGlzLiNrKCl9aWYodGhpcy4jbz09PTAmJnRoaXMudHRsPT09MCYmdGhpcy4jYz09PTApdGhyb3cgbmV3IFR5cGVFcnJvcihcIkF0IGxlYXN0IG9uZSBvZiBtYXgsIG1heFNpemUsIG9yIHR0bCBpcyByZXF1aXJlZFwiKTtpZighdGhpcy50dGxBdXRvcHVyZ2UmJiF0aGlzLiNvJiYhdGhpcy4jYyl7bGV0IHg9XCJMUlVfQ0FDSEVfVU5CT1VOREVEXCI7SCh4KSYmKFUuYWRkKHgpLGsoXCJUVEwgY2FjaGluZyB3aXRob3V0IHR0bEF1dG9wdXJnZSwgbWF4LCBvciBtYXhTaXplIGNhbiByZXN1bHQgaW4gdW5ib3VuZGVkIG1lbW9yeSBjb25zdW1wdGlvbi5cIixcIlVuYm91bmRlZENhY2hlV2FybmluZ1wiLHgsdSkpfX1nZXRSZW1haW5pbmdUVEwoZSl7cmV0dXJuIHRoaXMuI3MuaGFzKGUpPzEvMDowfSNrKCl7bGV0IGU9bmV3IE8odGhpcy4jbyksdD1uZXcgTyh0aGlzLiNvKTt0aGlzLiNkPWUsdGhpcy4jRj10O2xldCBpPXRoaXMudHRsQXV0b3B1cmdlP0FycmF5LmZyb20oe2xlbmd0aDp0aGlzLiNvfSk6dm9pZCAwO3RoaXMuI2c9aSx0aGlzLiNIPShoLGEsbz10aGlzLiNtLm5vdygpKT0+e3RbaF09YSE9PTA/bzowLGVbaF09YSxzKGgsYSl9LHRoaXMuI0Q9aD0+e3RbaF09ZVtoXSE9PTA/dGhpcy4jbS5ub3coKTowLHMoaCxlW2hdKX07bGV0IHM9dGhpcy50dGxBdXRvcHVyZ2U/KGgsYSk9PntpZihpPy5baF0mJihjbGVhclRpbWVvdXQoaVtoXSksaVtoXT12b2lkIDApLGEmJmEhPT0wJiZpKXtsZXQgbz1zZXRUaW1lb3V0KCgpPT57dGhpcy4jcChoKSYmdGhpcy4jRSh0aGlzLiNpW2hdLFwiZXhwaXJlXCIpfSxhKzEpO28udW5yZWYmJm8udW5yZWYoKSxpW2hdPW99fTooKT0+e307dGhpcy4jdj0oaCxhKT0+e2lmKGVbYV0pe2xldCBvPWVbYV0sZD10W2FdO2lmKCFvfHwhZClyZXR1cm47aC50dGw9byxoLnN0YXJ0PWQsaC5ub3c9bnx8cigpO2xldCB5PWgubm93LWQ7aC5yZW1haW5pbmdUVEw9by15fX07bGV0IG49MCxyPSgpPT57bGV0IGg9dGhpcy4jbS5ub3coKTtpZih0aGlzLnR0bFJlc29sdXRpb24+MCl7bj1oO2xldCBhPXNldFRpbWVvdXQoKCk9Pm49MCx0aGlzLnR0bFJlc29sdXRpb24pO2EudW5yZWYmJmEudW5yZWYoKX1yZXR1cm4gaH07dGhpcy5nZXRSZW1haW5pbmdUVEw9aD0+e2xldCBhPXRoaXMuI3MuZ2V0KGgpO2lmKGE9PT12b2lkIDApcmV0dXJuIDA7bGV0IG89ZVthXSxkPXRbYV07aWYoIW98fCFkKXJldHVybiAxLzA7bGV0IHk9KG58fHIoKSktZDtyZXR1cm4gby15fSx0aGlzLiNwPWg9PntsZXQgYT10W2hdLG89ZVtoXTtyZXR1cm4hIW8mJiEhYSYmKG58fHIoKSktYT5vfX0jRD0oKT0+e307I3Y9KCk9Pnt9OyNIPSgpPT57fTsjcD0oKT0+ITE7I1goKXtsZXQgZT1uZXcgTyh0aGlzLiNvKTt0aGlzLiNiPTAsdGhpcy4jXz1lLHRoaXMuI1I9dD0+e3RoaXMuI2ItPWVbdF0sZVt0XT0wfSx0aGlzLiNOPSh0LGkscyxuKT0+e2lmKCFUKHMpKXtpZih0aGlzLiNlKGkpKXJldHVybiB0aGlzLmJhY2tncm91bmRGZXRjaFNpemU7aWYobil7aWYodHlwZW9mIG4hPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgVHlwZUVycm9yKFwic2l6ZUNhbGN1bGF0aW9uIG11c3QgYmUgYSBmdW5jdGlvblwiKTtpZihzPW4oaSx0KSwhVChzKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwic2l6ZUNhbGN1bGF0aW9uIHJldHVybiBpbnZhbGlkIChleHBlY3QgcG9zaXRpdmUgaW50ZWdlcilcIil9ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzaXplIHZhbHVlIChtdXN0IGJlIHBvc2l0aXZlIGludGVnZXIpLiBXaGVuIG1heFNpemUgb3IgbWF4RW50cnlTaXplIGlzIHVzZWQsIHNpemVDYWxjdWxhdGlvbiBvciBzaXplIG11c3QgYmUgc2V0LlwiKX1yZXR1cm4gc30sdGhpcy4jaj0odCxpLHMpPT57aWYoZVt0XT1pLHRoaXMuI2Mpe2xldCBuPXRoaXMuI2MtZVt0XTtmb3IoO3RoaXMuI2I+bjspdGhpcy4jRyghMCl9dGhpcy4jYis9ZVt0XSxzJiYocy5lbnRyeVNpemU9aSxzLnRvdGFsQ2FsY3VsYXRlZFNpemU9dGhpcy4jYil9fSNSPWU9Pnt9OyNqPShlLHQsaSk9Pnt9OyNOPShlLHQsaSxzKT0+e2lmKGl8fHMpdGhyb3cgbmV3IFR5cGVFcnJvcihcImNhbm5vdCBzZXQgc2l6ZSB3aXRob3V0IHNldHRpbmcgbWF4U2l6ZSBvciBtYXhFbnRyeVNpemUgb24gY2FjaGVcIik7cmV0dXJuIDB9OyojQSh7YWxsb3dTdGFsZTplPXRoaXMuYWxsb3dTdGFsZX09e30pe2lmKHRoaXMuI24pZm9yKGxldCB0PXRoaXMuI2g7dGhpcy4jVih0KSYmKChlfHwhdGhpcy4jcCh0KSkmJih5aWVsZCB0KSx0IT09dGhpcy4jYSk7KXQ9dGhpcy4jdVt0XX0qI3ooe2FsbG93U3RhbGU6ZT10aGlzLmFsbG93U3RhbGV9PXt9KXtpZih0aGlzLiNuKWZvcihsZXQgdD10aGlzLiNhO3RoaXMuI1YodCkmJigoZXx8IXRoaXMuI3AodCkpJiYoeWllbGQgdCksdCE9PXRoaXMuI2gpOyl0PXRoaXMuI2xbdF19I1YoZSl7cmV0dXJuIGUhPT12b2lkIDAmJnRoaXMuI3MuZ2V0KHRoaXMuI2lbZV0pPT09ZX0qZW50cmllcygpe2ZvcihsZXQgZSBvZiB0aGlzLiNBKCkpdGhpcy4jdFtlXSE9PXZvaWQgMCYmdGhpcy4jaVtlXSE9PXZvaWQgMCYmIXRoaXMuI2UodGhpcy4jdFtlXSkmJih5aWVsZFt0aGlzLiNpW2VdLHRoaXMuI3RbZV1dKX0qcmVudHJpZXMoKXtmb3IobGV0IGUgb2YgdGhpcy4jeigpKXRoaXMuI3RbZV0hPT12b2lkIDAmJnRoaXMuI2lbZV0hPT12b2lkIDAmJiF0aGlzLiNlKHRoaXMuI3RbZV0pJiYoeWllbGRbdGhpcy4jaVtlXSx0aGlzLiN0W2VdXSl9KmtleXMoKXtmb3IobGV0IGUgb2YgdGhpcy4jQSgpKXtsZXQgdD10aGlzLiNpW2VdO3QhPT12b2lkIDAmJiF0aGlzLiNlKHRoaXMuI3RbZV0pJiYoeWllbGQgdCl9fSpya2V5cygpe2ZvcihsZXQgZSBvZiB0aGlzLiN6KCkpe2xldCB0PXRoaXMuI2lbZV07dCE9PXZvaWQgMCYmIXRoaXMuI2UodGhpcy4jdFtlXSkmJih5aWVsZCB0KX19KnZhbHVlcygpe2ZvcihsZXQgZSBvZiB0aGlzLiNBKCkpdGhpcy4jdFtlXSE9PXZvaWQgMCYmIXRoaXMuI2UodGhpcy4jdFtlXSkmJih5aWVsZCB0aGlzLiN0W2VdKX0qcnZhbHVlcygpe2ZvcihsZXQgZSBvZiB0aGlzLiN6KCkpdGhpcy4jdFtlXSE9PXZvaWQgMCYmIXRoaXMuI2UodGhpcy4jdFtlXSkmJih5aWVsZCB0aGlzLiN0W2VdKX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLmVudHJpZXMoKX1bU3ltYm9sLnRvU3RyaW5nVGFnXT1cIkxSVUNhY2hlXCI7ZmluZChlLHQ9e30pe2ZvcihsZXQgaSBvZiB0aGlzLiNBKCkpe2xldCBzPXRoaXMuI3RbaV0sbj10aGlzLiNlKHMpP3MuX19zdGFsZVdoaWxlRmV0Y2hpbmc6cztpZihuIT09dm9pZCAwJiZlKG4sdGhpcy4jaVtpXSx0aGlzKSlyZXR1cm4gdGhpcy4jQyh0aGlzLiNpW2ldLHQpfX1mb3JFYWNoKGUsdD10aGlzKXtmb3IobGV0IGkgb2YgdGhpcy4jQSgpKXtsZXQgcz10aGlzLiN0W2ldLG49dGhpcy4jZShzKT9zLl9fc3RhbGVXaGlsZUZldGNoaW5nOnM7biE9PXZvaWQgMCYmZS5jYWxsKHQsbix0aGlzLiNpW2ldLHRoaXMpfX1yZm9yRWFjaChlLHQ9dGhpcyl7Zm9yKGxldCBpIG9mIHRoaXMuI3ooKSl7bGV0IHM9dGhpcy4jdFtpXSxuPXRoaXMuI2Uocyk/cy5fX3N0YWxlV2hpbGVGZXRjaGluZzpzO24hPT12b2lkIDAmJmUuY2FsbCh0LG4sdGhpcy4jaVtpXSx0aGlzKX19cHVyZ2VTdGFsZSgpe2xldCBlPSExO2ZvcihsZXQgdCBvZiB0aGlzLiN6KHthbGxvd1N0YWxlOiEwfSkpdGhpcy4jcCh0KSYmKHRoaXMuI0UodGhpcy4jaVt0XSxcImV4cGlyZVwiKSxlPSEwKTtyZXR1cm4gZX1pbmZvKGUpe2xldCB0PXRoaXMuI3MuZ2V0KGUpO2lmKHQ9PT12b2lkIDApcmV0dXJuO2xldCBpPXRoaXMuI3RbdF0scz10aGlzLiNlKGkpP2kuX19zdGFsZVdoaWxlRmV0Y2hpbmc6aTtpZihzPT09dm9pZCAwKXJldHVybjtsZXQgbj17dmFsdWU6c307aWYodGhpcy4jZCYmdGhpcy4jRil7bGV0IHI9dGhpcy4jZFt0XSxoPXRoaXMuI0ZbdF07aWYociYmaCl7bGV0IGE9ci0odGhpcy4jbS5ub3coKS1oKTtuLnR0bD1hLG4uc3RhcnQ9RGF0ZS5ub3coKX19cmV0dXJuIHRoaXMuI18mJihuLnNpemU9dGhpcy4jX1t0XSksbn1kdW1wKCl7bGV0IGU9W107Zm9yKGxldCB0IG9mIHRoaXMuI0Eoe2FsbG93U3RhbGU6ITB9KSl7bGV0IGk9dGhpcy4jaVt0XSxzPXRoaXMuI3RbdF0sbj10aGlzLiNlKHMpP3MuX19zdGFsZVdoaWxlRmV0Y2hpbmc6cztpZihuPT09dm9pZCAwfHxpPT09dm9pZCAwKWNvbnRpbnVlO2xldCByPXt2YWx1ZTpufTtpZih0aGlzLiNkJiZ0aGlzLiNGKXtyLnR0bD10aGlzLiNkW3RdO2xldCBoPXRoaXMuI20ubm93KCktdGhpcy4jRlt0XTtyLnN0YXJ0PU1hdGguZmxvb3IoRGF0ZS5ub3coKS1oKX10aGlzLiNfJiYoci5zaXplPXRoaXMuI19bdF0pLGUudW5zaGlmdChbaSxyXSl9cmV0dXJuIGV9bG9hZChlKXt0aGlzLmNsZWFyKCk7Zm9yKGxldFt0LGldb2YgZSl7aWYoaS5zdGFydCl7bGV0IHM9RGF0ZS5ub3coKS1pLnN0YXJ0O2kuc3RhcnQ9dGhpcy4jbS5ub3coKS1zfXRoaXMuI1codCxpLnZhbHVlLGkpfX1zZXQoZSx0LGk9e30pe2xldHtzdGF0dXM6cz1TLmhhc1N1YnNjcmliZXJzP3t9OnZvaWQgMH09aTtpLnN0YXR1cz1zLHMmJihzLm9wPVwic2V0XCIscy5rZXk9ZSx0IT09dm9pZCAwJiYocy52YWx1ZT10KSxzLmNhY2hlPXRoaXMpO2xldCBuPXRoaXMuI1coZSx0LGkpO3JldHVybiBzJiZTLmhhc1N1YnNjcmliZXJzJiZTLnB1Ymxpc2gocyksbn0jVyhlLHQsaSxzKXtsZXR7dHRsOm49dGhpcy50dGwsc3RhcnQ6cixub0Rpc3Bvc2VPblNldDpoPXRoaXMubm9EaXNwb3NlT25TZXQsc2l6ZUNhbGN1bGF0aW9uOmE9dGhpcy5zaXplQ2FsY3VsYXRpb24sc3RhdHVzOm99PWksZD10aGlzLiNlKHQpO2lmKHQ9PT12b2lkIDApcmV0dXJuIG8mJihvLnNldD1cImRlbGV0ZWRcIiksdGhpcy5kZWxldGUoZSksdGhpcztsZXR7bm9VcGRhdGVUVEw6eT10aGlzLm5vVXBkYXRlVFRMfT1pO28mJiFkJiYoby52YWx1ZT10KTtsZXQgXz10aGlzLiNOKGUsdCxpLnNpemV8fDAsYSxvKTtpZih0aGlzLm1heEVudHJ5U2l6ZSYmXz50aGlzLm1heEVudHJ5U2l6ZSlyZXR1cm4gdGhpcy4jRShlLFwic2V0XCIpLG8mJihvLnNldD1cIm1pc3NcIixvLm1heEVudHJ5U2l6ZUV4Y2VlZGVkPSEwKSx0aGlzO2xldCBjPXRoaXMuI249PT0wP3ZvaWQgMDp0aGlzLiNzLmdldChlKTtpZihjPT09dm9pZCAwKWM9dGhpcy4jbj09PTA/dGhpcy4jaDp0aGlzLiN5Lmxlbmd0aCE9PTA/dGhpcy4jeS5wb3AoKTp0aGlzLiNuPT09dGhpcy4jbz90aGlzLiNHKCExKTp0aGlzLiNuLHRoaXMuI2lbY109ZSx0aGlzLiN0W2NdPXQsdGhpcy4jcy5zZXQoZSxjKSx0aGlzLiNsW3RoaXMuI2hdPWMsdGhpcy4jdVtjXT10aGlzLiNoLHRoaXMuI2g9Yyx0aGlzLiNuKyssdGhpcy4jaihjLF8sbyksbyYmKG8uc2V0PVwiYWRkXCIpLHk9ITEsdGhpcy4jeCYmIWQmJnRoaXMuI08/Lih0LGUsXCJhZGRcIik7ZWxzZXt0aGlzLiNMKGMpO2xldCBnPXRoaXMuI3RbY107aWYodCE9PWcpe2lmKCFoKWlmKHRoaXMuI2UoZykpe2chPT1zJiZnLl9fYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcihcInJlcGxhY2VkXCIpKTtsZXR7X19zdGFsZVdoaWxlRmV0Y2hpbmc6Zn09ZztmIT09dm9pZCAwJiZmIT09dCYmKHRoaXMuI1QmJnRoaXMuI1M/LihmLGUsXCJzZXRcIiksdGhpcy4jZiYmdGhpcy4jcj8ucHVzaChbZixlLFwic2V0XCJdKSl9ZWxzZSB0aGlzLiNUJiZ0aGlzLiNTPy4oZyxlLFwic2V0XCIpLHRoaXMuI2YmJnRoaXMuI3I/LnB1c2goW2csZSxcInNldFwiXSk7aWYodGhpcy4jUihjKSx0aGlzLiNqKGMsXyxvKSx0aGlzLiN0W2NdPXQsIWQpe2xldCBmPWcmJnRoaXMuI2UoZyk/Zy5fX3N0YWxlV2hpbGVGZXRjaGluZzpnLGI9Zj09PXZvaWQgMD9cImFkZFwiOnQhPT1mP1wicmVwbGFjZVwiOlwidXBkYXRlXCI7byYmKG8uc2V0PWIsZiE9PXZvaWQgMCYmKG8ub2xkVmFsdWU9ZikpLHRoaXMuI3gmJnRoaXMub25JbnNlcnQ/Lih0LGUsYil9fWVsc2UgZHx8KG8mJihvLnNldD1cInVwZGF0ZVwiKSx0aGlzLiN4JiZ0aGlzLm9uSW5zZXJ0Py4odCxlLFwidXBkYXRlXCIpKX1pZihuIT09MCYmIXRoaXMuI2QmJnRoaXMuI2soKSx0aGlzLiNkJiYoeXx8dGhpcy4jSChjLG4sciksbyYmdGhpcy4jdihvLGMpKSwhaCYmdGhpcy4jZiYmdGhpcy4jcil7bGV0IGc9dGhpcy4jcixmO2Zvcig7Zj1nPy5zaGlmdCgpOyl0aGlzLiN3Py4oLi4uZil9cmV0dXJuIHRoaXN9cG9wKCl7dHJ5e2Zvcig7dGhpcy4jbjspe2xldCBlPXRoaXMuI3RbdGhpcy4jYV07aWYodGhpcy4jRyghMCksdGhpcy4jZShlKSl7aWYoZS5fX3N0YWxlV2hpbGVGZXRjaGluZylyZXR1cm4gZS5fX3N0YWxlV2hpbGVGZXRjaGluZ31lbHNlIGlmKGUhPT12b2lkIDApcmV0dXJuIGV9fWZpbmFsbHl7aWYodGhpcy4jZiYmdGhpcy4jcil7bGV0IGU9dGhpcy4jcix0O2Zvcig7dD1lPy5zaGlmdCgpOyl0aGlzLiN3Py4oLi4udCl9fX0jRyhlKXtsZXQgdD10aGlzLiNhLGk9dGhpcy4jaVt0XSxzPXRoaXMuI3RbdF0sbj10aGlzLiNlKHMpO24mJnMuX19hYm9ydENvbnRyb2xsZXIuYWJvcnQobmV3IEVycm9yKFwiZXZpY3RlZFwiKSk7bGV0IHI9bj9zLl9fc3RhbGVXaGlsZUZldGNoaW5nOnM7cmV0dXJuKHRoaXMuI1R8fHRoaXMuI2YpJiZyIT09dm9pZCAwJiYodGhpcy4jVCYmdGhpcy4jUz8uKHIsaSxcImV2aWN0XCIpLHRoaXMuI2YmJnRoaXMuI3I/LnB1c2goW3IsaSxcImV2aWN0XCJdKSksdGhpcy4jUih0KSx0aGlzLiNnPy5bdF0mJihjbGVhclRpbWVvdXQodGhpcy4jZ1t0XSksdGhpcy4jZ1t0XT12b2lkIDApLGUmJih0aGlzLiNpW3RdPXZvaWQgMCx0aGlzLiN0W3RdPXZvaWQgMCx0aGlzLiN5LnB1c2godCkpLHRoaXMuI249PT0xPyh0aGlzLiNhPXRoaXMuI2g9MCx0aGlzLiN5Lmxlbmd0aD0wKTp0aGlzLiNhPXRoaXMuI2xbdF0sdGhpcy4jcy5kZWxldGUoaSksdGhpcy4jbi0tLHR9aGFzKGUsdD17fSl7bGV0e3N0YXR1czppPVMuaGFzU3Vic2NyaWJlcnM/e306dm9pZCAwfT10O3Quc3RhdHVzPWksaSYmKGkub3A9XCJoYXNcIixpLmtleT1lLGkuY2FjaGU9dGhpcyk7bGV0IHM9dGhpcy4jWShlLHQpO3JldHVybiBTLmhhc1N1YnNjcmliZXJzJiZTLnB1Ymxpc2goaSksc30jWShlLHQ9e30pe2xldHt1cGRhdGVBZ2VPbkhhczppPXRoaXMudXBkYXRlQWdlT25IYXMsc3RhdHVzOnN9PXQsbj10aGlzLiNzLmdldChlKTtpZihuIT09dm9pZCAwKXtsZXQgcj10aGlzLiN0W25dO2lmKHRoaXMuI2UocikmJnIuX19zdGFsZVdoaWxlRmV0Y2hpbmc9PT12b2lkIDApcmV0dXJuITE7aWYodGhpcy4jcChuKSlzJiYocy5oYXM9XCJzdGFsZVwiLHRoaXMuI3YocyxuKSk7ZWxzZSByZXR1cm4gaSYmdGhpcy4jRChuKSxzJiYocy5oYXM9XCJoaXRcIix0aGlzLiN2KHMsbikpLCEwfWVsc2UgcyYmKHMuaGFzPVwibWlzc1wiKTtyZXR1cm4hMX1wZWVrKGUsdD17fSl7bGV0e3N0YXR1czppPUQoKT97fTp2b2lkIDB9PXQ7aSYmKGkub3A9XCJwZWVrXCIsaS5rZXk9ZSxpLmNhY2hlPXRoaXMpLHQuc3RhdHVzPWk7bGV0IHM9dGhpcy4jSihlLHQpO3JldHVybiBTLmhhc1N1YnNjcmliZXJzJiZTLnB1Ymxpc2goaSksc30jSihlLHQpe2xldHtzdGF0dXM6aSxhbGxvd1N0YWxlOnM9dGhpcy5hbGxvd1N0YWxlfT10LG49dGhpcy4jcy5nZXQoZSk7aWYobj09PXZvaWQgMHx8IXMmJnRoaXMuI3Aobikpe2kmJihpLnBlZWs9bj09PXZvaWQgMD9cIm1pc3NcIjpcInN0YWxlXCIpO3JldHVybn1sZXQgcj10aGlzLiN0W25dLGg9dGhpcy4jZShyKT9yLl9fc3RhbGVXaGlsZUZldGNoaW5nOnI7cmV0dXJuIGkmJihoIT09dm9pZCAwPyhpLnBlZWs9XCJoaXRcIixpLnZhbHVlPWgpOmkucGVlaz1cIm1pc3NcIiksaH0jUChlLHQsaSxzKXtsZXQgbj10PT09dm9pZCAwP3ZvaWQgMDp0aGlzLiN0W3RdO2lmKHRoaXMuI2UobikpcmV0dXJuIG47bGV0IHI9bmV3IEFib3J0Q29udHJvbGxlcix7c2lnbmFsOmh9PWk7aD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsKCk9PnIuYWJvcnQoaC5yZWFzb24pLHtzaWduYWw6ci5zaWduYWx9KTtsZXQgYT17c2lnbmFsOnIuc2lnbmFsLG9wdGlvbnM6aSxjb250ZXh0OnN9LG89KGYsYj0hMSk9PntsZXR7YWJvcnRlZDpsfT1yLnNpZ25hbCx3PWkuaWdub3JlRmV0Y2hBYm9ydCYmZiE9PXZvaWQgMCxGPWkuaWdub3JlRmV0Y2hBYm9ydHx8ISEoaS5hbGxvd1N0YWxlT25GZXRjaEFib3J0JiZmIT09dm9pZCAwKTtpZihpLnN0YXR1cyYmKGwmJiFiPyhpLnN0YXR1cy5mZXRjaEFib3J0ZWQ9ITAsaS5zdGF0dXMuZmV0Y2hFcnJvcj1yLnNpZ25hbC5yZWFzb24sdyYmKGkuc3RhdHVzLmZldGNoQWJvcnRJZ25vcmVkPSEwKSk6aS5zdGF0dXMuZmV0Y2hSZXNvbHZlZD0hMCksbCYmIXcmJiFiKXJldHVybiB5KHIuc2lnbmFsLnJlYXNvbixGKTtsZXQgbT1jLHA9dGhpcy4jdFt0XTtyZXR1cm4ocD09PWN8fHA9PT12b2lkIDAmJncmJmIpJiYoZj09PXZvaWQgMD9tLl9fc3RhbGVXaGlsZUZldGNoaW5nIT09dm9pZCAwP3RoaXMuI3RbdF09bS5fX3N0YWxlV2hpbGVGZXRjaGluZzp0aGlzLiNFKGUsXCJmZXRjaFwiKTooaS5zdGF0dXMmJihpLnN0YXR1cy5mZXRjaFVwZGF0ZWQ9ITApLHRoaXMuI1coZSxmLGEub3B0aW9ucyxtKSkpLGZ9LGQ9Zj0+KGkuc3RhdHVzJiYoaS5zdGF0dXMuZmV0Y2hSZWplY3RlZD0hMCxpLnN0YXR1cy5mZXRjaEVycm9yPWYpLHkoZiwhMSkpLHk9KGYsYik9PntsZXR7YWJvcnRlZDpsfT1yLnNpZ25hbCx3PWwmJmkuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCxGPXd8fGkuYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24sbT1GfHxpLm5vRGVsZXRlT25GZXRjaFJlamVjdGlvbixwPWM7aWYodGhpcy4jdFt0XT09PWMmJighbXx8IWImJnAuX19zdGFsZVdoaWxlRmV0Y2hpbmc9PT12b2lkIDA/dGhpcy4jRShlLFwiZmV0Y2hcIik6d3x8KHRoaXMuI3RbdF09cC5fX3N0YWxlV2hpbGVGZXRjaGluZykpLEYpcmV0dXJuIGkuc3RhdHVzJiZwLl9fc3RhbGVXaGlsZUZldGNoaW5nIT09dm9pZCAwJiYoaS5zdGF0dXMucmV0dXJuZWRTdGFsZT0hMCkscC5fX3N0YWxlV2hpbGVGZXRjaGluZztpZihwLl9fcmV0dXJuZWQ9PT1wKXRocm93IGZ9LF89KGYsYik9PntsZXQgbD10aGlzLiNNPy4oZSxuLGEpO3Iuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCgpPT57KCFpLmlnbm9yZUZldGNoQWJvcnR8fGkuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCkmJihmKHZvaWQgMCksaS5hbGxvd1N0YWxlT25GZXRjaEFib3J0JiYoZj13PT5vKHcsITApKSl9KSxsJiZsIGluc3RhbmNlb2YgUHJvbWlzZT9sLnRoZW4odz0+Zih3PT09dm9pZCAwP3ZvaWQgMDp3KSxiKTpsIT09dm9pZCAwJiZmKGwpfTtpLnN0YXR1cyYmKGkuc3RhdHVzLmZldGNoRGlzcGF0Y2hlZD0hMCk7bGV0IGM9bmV3IFByb21pc2UoXykudGhlbihvLGQpLGc9T2JqZWN0LmFzc2lnbihjLHtfX2Fib3J0Q29udHJvbGxlcjpyLF9fc3RhbGVXaGlsZUZldGNoaW5nOm4sX19yZXR1cm5lZDp2b2lkIDB9KTtyZXR1cm4gdD09PXZvaWQgMD8odGhpcy4jVyhlLGcsey4uLmEub3B0aW9ucyxzdGF0dXM6dm9pZCAwfSksdD10aGlzLiNzLmdldChlKSk6dGhpcy4jdFt0XT1nLGd9I2UoZSl7aWYoIXRoaXMuI1UpcmV0dXJuITE7bGV0IHQ9ZTtyZXR1cm4hIXQmJnQgaW5zdGFuY2VvZiBQcm9taXNlJiZ0Lmhhc093blByb3BlcnR5KFwiX19zdGFsZVdoaWxlRmV0Y2hpbmdcIikmJnQuX19hYm9ydENvbnRyb2xsZXIgaW5zdGFuY2VvZiBBYm9ydENvbnRyb2xsZXJ9ZmV0Y2goZSx0PXt9KXtsZXQgaT1XLmhhc1N1YnNjcmliZXJzLHtzdGF0dXM6cz1EKCk/e306dm9pZCAwfT10O3Quc3RhdHVzPXMscyYmdC5jb250ZXh0JiYocy5jb250ZXh0PXQuY29udGV4dCk7bGV0IG49dGhpcy4jQihlLHQpO3JldHVybiBzJiZpJiYocy50cmFjZT0hMCxXLnRyYWNlUHJvbWlzZSgoKT0+bixzKS5jYXRjaCgoKT0+e30pKSxufWFzeW5jI0IoZSx0PXt9KXtsZXR7YWxsb3dTdGFsZTppPXRoaXMuYWxsb3dTdGFsZSx1cGRhdGVBZ2VPbkdldDpzPXRoaXMudXBkYXRlQWdlT25HZXQsbm9EZWxldGVPblN0YWxlR2V0Om49dGhpcy5ub0RlbGV0ZU9uU3RhbGVHZXQsdHRsOnI9dGhpcy50dGwsbm9EaXNwb3NlT25TZXQ6aD10aGlzLm5vRGlzcG9zZU9uU2V0LHNpemU6YT0wLHNpemVDYWxjdWxhdGlvbjpvPXRoaXMuc2l6ZUNhbGN1bGF0aW9uLG5vVXBkYXRlVFRMOmQ9dGhpcy5ub1VwZGF0ZVRUTCxub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb246eT10aGlzLm5vRGVsZXRlT25GZXRjaFJlamVjdGlvbixhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbjpfPXRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb24saWdub3JlRmV0Y2hBYm9ydDpjPXRoaXMuaWdub3JlRmV0Y2hBYm9ydCxhbGxvd1N0YWxlT25GZXRjaEFib3J0Omc9dGhpcy5hbGxvd1N0YWxlT25GZXRjaEFib3J0LGNvbnRleHQ6Zixmb3JjZVJlZnJlc2g6Yj0hMSxzdGF0dXM6bCxzaWduYWw6d309dDtpZihsJiYobC5vcD1cImZldGNoXCIsbC5rZXk9ZSxiJiYobC5mb3JjZVJlZnJlc2g9ITApLGwuY2FjaGU9dGhpcyksIXRoaXMuI1UpcmV0dXJuIGwmJihsLmZldGNoPVwiZ2V0XCIpLHRoaXMuI0MoZSx7YWxsb3dTdGFsZTppLHVwZGF0ZUFnZU9uR2V0OnMsbm9EZWxldGVPblN0YWxlR2V0Om4sc3RhdHVzOmx9KTtsZXQgRj17YWxsb3dTdGFsZTppLHVwZGF0ZUFnZU9uR2V0OnMsbm9EZWxldGVPblN0YWxlR2V0Om4sdHRsOnIsbm9EaXNwb3NlT25TZXQ6aCxzaXplOmEsc2l6ZUNhbGN1bGF0aW9uOm8sbm9VcGRhdGVUVEw6ZCxub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb246eSxhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbjpfLGFsbG93U3RhbGVPbkZldGNoQWJvcnQ6ZyxpZ25vcmVGZXRjaEFib3J0OmMsc3RhdHVzOmwsc2lnbmFsOnd9LG09dGhpcy4jcy5nZXQoZSk7aWYobT09PXZvaWQgMCl7bCYmKGwuZmV0Y2g9XCJtaXNzXCIpO2xldCBwPXRoaXMuI1AoZSxtLEYsZik7cmV0dXJuIHAuX19yZXR1cm5lZD1wfWVsc2V7bGV0IHA9dGhpcy4jdFttXTtpZih0aGlzLiNlKHApKXtsZXQgdj1pJiZwLl9fc3RhbGVXaGlsZUZldGNoaW5nIT09dm9pZCAwO3JldHVybiBsJiYobC5mZXRjaD1cImluZmxpZ2h0XCIsdiYmKGwucmV0dXJuZWRTdGFsZT0hMCkpLHY/cC5fX3N0YWxlV2hpbGVGZXRjaGluZzpwLl9fcmV0dXJuZWQ9cH1sZXQgQT10aGlzLiNwKG0pO2lmKCFiJiYhQSlyZXR1cm4gbCYmKGwuZmV0Y2g9XCJoaXRcIiksdGhpcy4jTChtKSxzJiZ0aGlzLiNEKG0pLGwmJnRoaXMuI3YobCxtKSxwO2xldCB6PXRoaXMuI1AoZSxtLEYsZiksRT16Ll9fc3RhbGVXaGlsZUZldGNoaW5nIT09dm9pZCAwJiZpO3JldHVybiBsJiYobC5mZXRjaD1BP1wic3RhbGVcIjpcInJlZnJlc2hcIixFJiZBJiYobC5yZXR1cm5lZFN0YWxlPSEwKSksRT96Ll9fc3RhbGVXaGlsZUZldGNoaW5nOnouX19yZXR1cm5lZD16fX1mb3JjZUZldGNoKGUsdD17fSl7bGV0IGk9Vy5oYXNTdWJzY3JpYmVycyx7c3RhdHVzOnM9RCgpP3t9OnZvaWQgMH09dDt0LnN0YXR1cz1zLHMmJnQuY29udGV4dCYmKHMuY29udGV4dD10LmNvbnRleHQpO2xldCBuPXRoaXMuI0soZSx0KTtyZXR1cm4gcyYmaSYmKHMudHJhY2U9ITAsVy50cmFjZVByb21pc2UoKCk9Pm4scykuY2F0Y2goKCk9Pnt9KSksbn1hc3luYyNLKGUsdD17fSl7bGV0IGk9YXdhaXQgdGhpcy4jQihlLHQpO2lmKGk9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKFwiZmV0Y2goKSByZXR1cm5lZCB1bmRlZmluZWRcIik7cmV0dXJuIGl9bWVtbyhlLHQ9e30pe2xldHtzdGF0dXM6aT1TLmhhc1N1YnNjcmliZXJzP3t9OnZvaWQgMH09dDt0LnN0YXR1cz1pLGkmJihpLm9wPVwibWVtb1wiLGkua2V5PWUsdC5jb250ZXh0JiYoaS5jb250ZXh0PXQuY29udGV4dCksaS5jYWNoZT10aGlzKTtsZXQgcz10aGlzLiNRKGUsdCk7cmV0dXJuIGkmJihpLnZhbHVlPXMpLFMuaGFzU3Vic2NyaWJlcnMmJlMucHVibGlzaChpKSxzfSNRKGUsdD17fSl7bGV0IGk9dGhpcy4jSTtpZighaSl0aHJvdyBuZXcgRXJyb3IoXCJubyBtZW1vTWV0aG9kIHByb3ZpZGVkIHRvIGNvbnN0cnVjdG9yXCIpO2xldHtjb250ZXh0OnMsc3RhdHVzOm4sZm9yY2VSZWZyZXNoOnIsLi4uaH09dDtuJiZyJiYobi5mb3JjZVJlZnJlc2g9ITApO2xldCBhPXRoaXMuI0MoZSxoKSxvPXJ8fGE9PT12b2lkIDA7aWYobiYmKG4ubWVtbz1vP1wibWlzc1wiOlwiaGl0XCIsb3x8KG4udmFsdWU9YSkpLCFvKXJldHVybiBhO2xldCBkPWkoZSxhLHtvcHRpb25zOmgsY29udGV4dDpzfSk7cmV0dXJuIG4mJihuLnZhbHVlPWQpLHRoaXMuI1coZSxkLGgpLGR9Z2V0KGUsdD17fSl7bGV0e3N0YXR1czppPVMuaGFzU3Vic2NyaWJlcnM/e306dm9pZCAwfT10O3Quc3RhdHVzPWksaSYmKGkub3A9XCJnZXRcIixpLmtleT1lLGkuY2FjaGU9dGhpcyk7bGV0IHM9dGhpcy4jQyhlLHQpO3JldHVybiBpJiYocyE9PXZvaWQgMCYmKGkudmFsdWU9cyksUy5oYXNTdWJzY3JpYmVycyYmUy5wdWJsaXNoKGkpKSxzfSNDKGUsdD17fSl7bGV0e2FsbG93U3RhbGU6aT10aGlzLmFsbG93U3RhbGUsdXBkYXRlQWdlT25HZXQ6cz10aGlzLnVwZGF0ZUFnZU9uR2V0LG5vRGVsZXRlT25TdGFsZUdldDpuPXRoaXMubm9EZWxldGVPblN0YWxlR2V0LHN0YXR1czpyfT10LGg9dGhpcy4jcy5nZXQoZSk7aWYoaD09PXZvaWQgMCl7ciYmKHIuZ2V0PVwibWlzc1wiKTtyZXR1cm59bGV0IGE9dGhpcy4jdFtoXSxvPXRoaXMuI2UoYSk7cmV0dXJuIHImJnRoaXMuI3YocixoKSx0aGlzLiNwKGgpP28/KHImJihyLmdldD1cInN0YWxlLWZldGNoaW5nXCIpLGkmJmEuX19zdGFsZVdoaWxlRmV0Y2hpbmchPT12b2lkIDA/KHImJihyLnJldHVybmVkU3RhbGU9ITApLGEuX19zdGFsZVdoaWxlRmV0Y2hpbmcpOnZvaWQgMCk6KG58fHRoaXMuI0UoZSxcImV4cGlyZVwiKSxyJiYoci5nZXQ9XCJzdGFsZVwiKSxpPyhyJiYoci5yZXR1cm5lZFN0YWxlPSEwKSxhKTp2b2lkIDApOihyJiYoci5nZXQ9bz9cImZldGNoaW5nXCI6XCJoaXRcIiksdGhpcy4jTChoKSxzJiZ0aGlzLiNEKGgpLG8/YS5fX3N0YWxlV2hpbGVGZXRjaGluZzphKX0jJChlLHQpe3RoaXMuI3VbdF09ZSx0aGlzLiNsW2VdPXR9I0woZSl7ZSE9PXRoaXMuI2gmJihlPT09dGhpcy4jYT90aGlzLiNhPXRoaXMuI2xbZV06dGhpcy4jJCh0aGlzLiN1W2VdLHRoaXMuI2xbZV0pLHRoaXMuIyQodGhpcy4jaCxlKSx0aGlzLiNoPWUpfWRlbGV0ZShlKXtyZXR1cm4gdGhpcy4jRShlLFwiZGVsZXRlXCIpfSNFKGUsdCl7Uy5oYXNTdWJzY3JpYmVycyYmUy5wdWJsaXNoKHtvcDpcImRlbGV0ZVwiLGRlbGV0ZTp0LGtleTplLGNhY2hlOnRoaXN9KTtsZXQgaT0hMTtpZih0aGlzLiNuIT09MCl7bGV0IHM9dGhpcy4jcy5nZXQoZSk7aWYocyE9PXZvaWQgMClpZih0aGlzLiNnPy5bc10mJihjbGVhclRpbWVvdXQodGhpcy4jZz8uW3NdKSx0aGlzLiNnW3NdPXZvaWQgMCksaT0hMCx0aGlzLiNuPT09MSl0aGlzLiNxKHQpO2Vsc2V7dGhpcy4jUihzKTtsZXQgbj10aGlzLiN0W3NdO2lmKHRoaXMuI2Uobik/bi5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoXCJkZWxldGVkXCIpKToodGhpcy4jVHx8dGhpcy4jZikmJih0aGlzLiNUJiZ0aGlzLiNTPy4obixlLHQpLHRoaXMuI2YmJnRoaXMuI3I/LnB1c2goW24sZSx0XSkpLHRoaXMuI3MuZGVsZXRlKGUpLHRoaXMuI2lbc109dm9pZCAwLHRoaXMuI3Rbc109dm9pZCAwLHM9PT10aGlzLiNoKXRoaXMuI2g9dGhpcy4jdVtzXTtlbHNlIGlmKHM9PT10aGlzLiNhKXRoaXMuI2E9dGhpcy4jbFtzXTtlbHNle2xldCByPXRoaXMuI3Vbc107dGhpcy4jbFtyXT10aGlzLiNsW3NdO2xldCBoPXRoaXMuI2xbc107dGhpcy4jdVtoXT10aGlzLiN1W3NdfXRoaXMuI24tLSx0aGlzLiN5LnB1c2gocyl9fWlmKHRoaXMuI2YmJnRoaXMuI3I/Lmxlbmd0aCl7bGV0IHM9dGhpcy4jcixuO2Zvcig7bj1zPy5zaGlmdCgpOyl0aGlzLiN3Py4oLi4ubil9cmV0dXJuIGl9Y2xlYXIoKXtyZXR1cm4gdGhpcy4jcShcImRlbGV0ZVwiKX0jcShlKXtmb3IobGV0IHQgb2YgdGhpcy4jeih7YWxsb3dTdGFsZTohMH0pKXtsZXQgaT10aGlzLiN0W3RdO2lmKHRoaXMuI2UoaSkpaS5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoXCJkZWxldGVkXCIpKTtlbHNle2xldCBzPXRoaXMuI2lbdF07dGhpcy4jVCYmdGhpcy4jUz8uKGkscyxlKSx0aGlzLiNmJiZ0aGlzLiNyPy5wdXNoKFtpLHMsZV0pfX1pZih0aGlzLiNzLmNsZWFyKCksdGhpcy4jdC5maWxsKHZvaWQgMCksdGhpcy4jaS5maWxsKHZvaWQgMCksdGhpcy4jZCYmdGhpcy4jRil7dGhpcy4jZC5maWxsKDApLHRoaXMuI0YuZmlsbCgwKTtmb3IobGV0IHQgb2YgdGhpcy4jZz8/W10pdCE9PXZvaWQgMCYmY2xlYXJUaW1lb3V0KHQpO3RoaXMuI2c/LmZpbGwodm9pZCAwKX1pZih0aGlzLiNfJiZ0aGlzLiNfLmZpbGwoMCksdGhpcy4jYT0wLHRoaXMuI2g9MCx0aGlzLiN5Lmxlbmd0aD0wLHRoaXMuI2I9MCx0aGlzLiNuPTAsdGhpcy4jZiYmdGhpcy4jcil7bGV0IHQ9dGhpcy4jcixpO2Zvcig7aT10Py5zaGlmdCgpOyl0aGlzLiN3Py4oLi4uaSl9fX07ZXhwb3J0e0kgYXMgTFJVQ2FjaGV9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWluLmpzLm1hcFxuIiwKICAgICJpbXBvcnQgeyBMUlVDYWNoZSB9IGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQgeyBwb3NpeCwgd2luMzIgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IGxzdGF0U3luYywgcmVhZGRpciBhcyByZWFkZGlyQ0IsIHJlYWRkaXJTeW5jLCByZWFkbGlua1N5bmMsIHJlYWxwYXRoU3luYyBhcyBycHMsIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgYWN0dWFsRlMgZnJvbSAnbm9kZTpmcyc7XG5jb25zdCByZWFscGF0aFN5bmMgPSBycHMubmF0aXZlO1xuLy8gVE9ETzogdGVzdCBwZXJmIG9mIGZzL3Byb21pc2VzIHJlYWxwYXRoIHZzIHJlYWxwYXRoQ0IsXG4vLyBzaW5jZSB0aGUgcHJvbWlzZXMgb25lIHVzZXMgcmVhbHBhdGgubmF0aXZlXG5pbXBvcnQgeyBsc3RhdCwgcmVhZGRpciwgcmVhZGxpbmssIHJlYWxwYXRoIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBNaW5pcGFzcyB9IGZyb20gJ21pbmlwYXNzJztcbmNvbnN0IGRlZmF1bHRGUyA9IHtcbiAgICBsc3RhdFN5bmMsXG4gICAgcmVhZGRpcjogcmVhZGRpckNCLFxuICAgIHJlYWRkaXJTeW5jLFxuICAgIHJlYWRsaW5rU3luYyxcbiAgICByZWFscGF0aFN5bmMsXG4gICAgcHJvbWlzZXM6IHtcbiAgICAgICAgbHN0YXQsXG4gICAgICAgIHJlYWRkaXIsXG4gICAgICAgIHJlYWRsaW5rLFxuICAgICAgICByZWFscGF0aCxcbiAgICB9LFxufTtcbi8vIGlmIHRoZXkganVzdCBnYXZlIHVzIHJlcXVpcmUoJ2ZzJykgdGhlbiB1c2Ugb3VyIGRlZmF1bHRcbmNvbnN0IGZzRnJvbU9wdGlvbiA9IChmc09wdGlvbikgPT4gIWZzT3B0aW9uIHx8IGZzT3B0aW9uID09PSBkZWZhdWx0RlMgfHwgZnNPcHRpb24gPT09IGFjdHVhbEZTID9cbiAgICBkZWZhdWx0RlNcbiAgICA6IHtcbiAgICAgICAgLi4uZGVmYXVsdEZTLFxuICAgICAgICAuLi5mc09wdGlvbixcbiAgICAgICAgcHJvbWlzZXM6IHtcbiAgICAgICAgICAgIC4uLmRlZmF1bHRGUy5wcm9taXNlcyxcbiAgICAgICAgICAgIC4uLihmc09wdGlvbi5wcm9taXNlcyB8fCB7fSksXG4gICAgICAgIH0sXG4gICAgfTtcbi8vIHR1cm4gc29tZXRoaW5nIGxpa2UgLy8/L2M6LyBpbnRvIGM6XFxcbmNvbnN0IHVuY0RyaXZlUmVnZXhwID0gL15cXFxcXFxcXFxcP1xcXFwoW2Etel06KVxcXFw/JC9pO1xuY29uc3QgdW5jVG9Ecml2ZSA9IChyb290UGF0aCkgPT4gcm9vdFBhdGgucmVwbGFjZSgvXFwvL2csICdcXFxcJykucmVwbGFjZSh1bmNEcml2ZVJlZ2V4cCwgJyQxXFxcXCcpO1xuLy8gd2luZG93cyBwYXRocyBhcmUgc2VwYXJhdGVkIGJ5IGVpdGhlciAvIG9yIFxcXG5jb25zdCBlaXRoZXJTZXAgPSAvW1xcXFxcXC9dLztcbmNvbnN0IFVOS05PV04gPSAwOyAvLyBtYXkgbm90IGV2ZW4gZXhpc3QsIGZvciBhbGwgd2Uga25vd1xuY29uc3QgSUZJRk8gPSAwYjAwMDE7XG5jb25zdCBJRkNIUiA9IDBiMDAxMDtcbmNvbnN0IElGRElSID0gMGIwMTAwO1xuY29uc3QgSUZCTEsgPSAwYjAxMTA7XG5jb25zdCBJRlJFRyA9IDBiMTAwMDtcbmNvbnN0IElGTE5LID0gMGIxMDEwO1xuY29uc3QgSUZTT0NLID0gMGIxMTAwO1xuY29uc3QgSUZNVCA9IDBiMTExMTtcbi8vIG1hc2sgdG8gdW5zZXQgbG93IDQgYml0c1xuY29uc3QgSUZNVF9VTktOT1dOID0gfklGTVQ7XG4vLyBzZXQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IGNhbGxpbmcgcmVhZGRpcigpIGFuZCBnZXR0aW5nIGVudHJpZXMuXG5jb25zdCBSRUFERElSX0NBTExFRCA9IDBiMDAwMF8wMDAxXzAwMDA7XG4vLyBzZXQgYWZ0ZXIgYSBzdWNjZXNzZnVsIGxzdGF0KClcbmNvbnN0IExTVEFUX0NBTExFRCA9IDBiMDAwMF8wMDEwXzAwMDA7XG4vLyBzZXQgaWYgYW4gZW50cnkgKG9yIG9uZSBvZiBpdHMgcGFyZW50cykgaXMgZGVmaW5pdGVseSBub3QgYSBkaXJcbmNvbnN0IEVOT1RESVIgPSAwYjAwMDBfMDEwMF8wMDAwO1xuLy8gc2V0IGlmIGFuIGVudHJ5IChvciBvbmUgb2YgaXRzIHBhcmVudHMpIGRvZXMgbm90IGV4aXN0XG4vLyAoY2FuIGFsc28gYmUgc2V0IG9uIGxzdGF0IGVycm9ycyBsaWtlIEVBQ0NFUyBvciBFTkFNRVRPT0xPTkcpXG5jb25zdCBFTk9FTlQgPSAwYjAwMDBfMTAwMF8wMDAwO1xuLy8gY2Fubm90IGhhdmUgY2hpbGQgZW50cmllcyAtLSBhbHNvIHZlcmlmeSAmSUZNVCBpcyBlaXRoZXIgSUZESVIgb3IgSUZMTktcbi8vIHNldCBpZiB3ZSBmYWlsIHRvIHJlYWRsaW5rXG5jb25zdCBFTk9SRUFETElOSyA9IDBiMDAwMV8wMDAwXzAwMDA7XG4vLyBzZXQgaWYgd2Uga25vdyByZWFscGF0aCgpIHdpbGwgZmFpbFxuY29uc3QgRU5PUkVBTFBBVEggPSAwYjAwMTBfMDAwMF8wMDAwO1xuY29uc3QgRU5PQ0hJTEQgPSBFTk9URElSIHwgRU5PRU5UIHwgRU5PUkVBTFBBVEg7XG5jb25zdCBUWVBFTUFTSyA9IDBiMDAxMV8xMTExXzExMTE7XG5jb25zdCBlbnRUb1R5cGUgPSAocykgPT4gcy5pc0ZpbGUoKSA/IElGUkVHXG4gICAgOiBzLmlzRGlyZWN0b3J5KCkgPyBJRkRJUlxuICAgICAgICA6IHMuaXNTeW1ib2xpY0xpbmsoKSA/IElGTE5LXG4gICAgICAgICAgICA6IHMuaXNDaGFyYWN0ZXJEZXZpY2UoKSA/IElGQ0hSXG4gICAgICAgICAgICAgICAgOiBzLmlzQmxvY2tEZXZpY2UoKSA/IElGQkxLXG4gICAgICAgICAgICAgICAgICAgIDogcy5pc1NvY2tldCgpID8gSUZTT0NLXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHMuaXNGSUZPKCkgPyBJRklGT1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogVU5LTk9XTjtcbi8vIG5vcm1hbGl6ZSB1bmljb2RlIHBhdGggbmFtZXNcbmNvbnN0IG5vcm1hbGl6ZUNhY2hlID0gbmV3IExSVUNhY2hlKHsgbWF4OiAyICoqIDEyIH0pO1xuY29uc3Qgbm9ybWFsaXplID0gKHMpID0+IHtcbiAgICBjb25zdCBjID0gbm9ybWFsaXplQ2FjaGUuZ2V0KHMpO1xuICAgIGlmIChjKVxuICAgICAgICByZXR1cm4gYztcbiAgICBjb25zdCBuID0gcy5ub3JtYWxpemUoJ05GS0QnKTtcbiAgICBub3JtYWxpemVDYWNoZS5zZXQocywgbik7XG4gICAgcmV0dXJuIG47XG59O1xuY29uc3Qgbm9ybWFsaXplTm9jYXNlQ2FjaGUgPSBuZXcgTFJVQ2FjaGUoeyBtYXg6IDIgKiogMTIgfSk7XG5jb25zdCBub3JtYWxpemVOb2Nhc2UgPSAocykgPT4ge1xuICAgIGNvbnN0IGMgPSBub3JtYWxpemVOb2Nhc2VDYWNoZS5nZXQocyk7XG4gICAgaWYgKGMpXG4gICAgICAgIHJldHVybiBjO1xuICAgIGNvbnN0IG4gPSBub3JtYWxpemUocy50b0xvd2VyQ2FzZSgpKTtcbiAgICBub3JtYWxpemVOb2Nhc2VDYWNoZS5zZXQocywgbik7XG4gICAgcmV0dXJuIG47XG59O1xuLyoqXG4gKiBBbiBMUlVDYWNoZSBmb3Igc3RvcmluZyByZXNvbHZlZCBwYXRoIHN0cmluZ3Mgb3IgUGF0aCBvYmplY3RzLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNvbHZlQ2FjaGUgZXh0ZW5kcyBMUlVDYWNoZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHsgbWF4OiAyNTYgfSk7XG4gICAgfVxufVxuLy8gSW4gb3JkZXIgdG8gcHJldmVudCBibG93aW5nIG91dCB0aGUganMgaGVhcCBieSBhbGxvY2F0aW5nIGh1bmRyZWRzIG9mXG4vLyB0aG91c2FuZHMgb2YgUGF0aCBlbnRyaWVzIHdoZW4gd2Fsa2luZyBleHRyZW1lbHkgbGFyZ2UgdHJlZXMsIHRoZSBcImNoaWxkcmVuXCJcbi8vIGluIHRoaXMgdHJlZSBhcmUgcmVwcmVzZW50ZWQgYnkgc3RvcmluZyBhbiBhcnJheSBvZiBQYXRoIGVudHJpZXMgaW4gYW5cbi8vIExSVUNhY2hlLCBpbmRleGVkIGJ5IHRoZSBwYXJlbnQuICBBdCBhbnkgdGltZSwgUGF0aC5jaGlsZHJlbigpIG1heSByZXR1cm4gYW5cbi8vIGVtcHR5IGFycmF5LCBpbmRpY2F0aW5nIHRoYXQgaXQgZG9lc24ndCBrbm93IGFib3V0IGFueSBvZiBpdHMgY2hpbGRyZW4sIGFuZFxuLy8gdGh1cyBoYXMgdG8gcmVidWlsZCB0aGF0IGNhY2hlLiAgVGhpcyBpcyBmaW5lLCBpdCBqdXN0IG1lYW5zIHRoYXQgd2UgZG9uJ3Rcbi8vIGJlbmVmaXQgYXMgbXVjaCBmcm9tIGhhdmluZyB0aGUgY2FjaGVkIGVudHJpZXMsIGJ1dCBodWdlIGRpcmVjdG9yeSB3YWxrc1xuLy8gZG9uJ3QgYmxvdyBvdXQgdGhlIHN0YWNrLCBhbmQgc21hbGxlciBvbmVzIGFyZSBzdGlsbCBhcyBmYXN0IGFzIHBvc3NpYmxlLlxuLy9cbi8vSXQgZG9lcyBpbXBvc2Ugc29tZSBjb21wbGV4aXR5IHdoZW4gYnVpbGRpbmcgdXAgdGhlIHJlYWRkaXIgZGF0YSwgYmVjYXVzZSB3ZVxuLy9uZWVkIHRvIHBhc3MgYSByZWZlcmVuY2UgdG8gdGhlIGNoaWxkcmVuIGFycmF5IHRoYXQgd2Ugc3RhcnRlZCB3aXRoLlxuLyoqXG4gKiBhbiBMUlVDYWNoZSBmb3Igc3RvcmluZyBjaGlsZCBlbnRyaWVzLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBDaGlsZHJlbkNhY2hlIGV4dGVuZHMgTFJVQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yKG1heFNpemUgPSAxNiAqIDEwMjQpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbWF4U2l6ZSxcbiAgICAgICAgICAgIC8vIHBhcmVudCArIGNoaWxkcmVuXG4gICAgICAgICAgICBzaXplQ2FsY3VsYXRpb246IGEgPT4gYS5sZW5ndGggKyAxLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5jb25zdCBzZXRBc0N3ZCA9IFN5bWJvbCgnUGF0aFNjdXJyeSBzZXRBc0N3ZCcpO1xuLyoqXG4gKiBQYXRoIG9iamVjdHMgYXJlIHNvcnQgb2YgbGlrZSBhIHN1cGVyLXBvd2VyZWRcbiAqIHtAbGluayBodHRwczovL25vZGVqcy5vcmcvZG9jcy9sYXRlc3QvYXBpL2ZzLmh0bWwjY2xhc3MtZnNkaXJlbnQgZnMuRGlyZW50fVxuICpcbiAqIEVhY2ggb25lIHJlcHJlc2VudHMgYSBzaW5nbGUgZmlsZXN5c3RlbSBlbnRyeSBvbiBkaXNrLCB3aGljaCBtYXkgb3IgbWF5IG5vdFxuICogZXhpc3QuIEl0IGluY2x1ZGVzIG1ldGhvZHMgZm9yIHJlYWRpbmcgdmFyaW91cyB0eXBlcyBvZiBpbmZvcm1hdGlvbiB2aWFcbiAqIGxzdGF0LCByZWFkbGluaywgYW5kIHJlYWRkaXIsIGFuZCBjYWNoZXMgYWxsIGluZm9ybWF0aW9uIHRvIHRoZSBncmVhdGVzdFxuICogZGVncmVlIHBvc3NpYmxlLlxuICpcbiAqIE5vdGUgdGhhdCBmcyBvcGVyYXRpb25zIHRoYXQgd291bGQgbm9ybWFsbHkgdGhyb3cgd2lsbCBpbnN0ZWFkIHJldHVybiBhblxuICogXCJlbXB0eVwiIHZhbHVlLiBUaGlzIGlzIGluIG9yZGVyIHRvIHByZXZlbnQgZXhjZXNzaXZlIG92ZXJoZWFkIGZyb20gZXJyb3JcbiAqIHN0YWNrIHRyYWNlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhdGhCYXNlIHtcbiAgICAvKipcbiAgICAgKiB0aGUgYmFzZW5hbWUgb2YgdGhpcyBwYXRoXG4gICAgICpcbiAgICAgKiAqKkltcG9ydGFudCoqOiAqYWx3YXlzKiB0ZXN0IHRoZSBwYXRoIG5hbWUgYWdhaW5zdCBhbnkgdGVzdCBzdHJpbmdcbiAgICAgKiB1c2luZ3RoZSB7QGxpbmsgaXNOYW1lZH0gbWV0aG9kLCBhbmQgbm90IGJ5IGRpcmVjdGx5IGNvbXBhcmluZyB0aGlzXG4gICAgICogc3RyaW5nLiBPdGhlcndpc2UsIHVuaWNvZGUgcGF0aCBzdHJpbmdzIHRoYXQgdGhlIHN5c3RlbSBzZWVzIGFzIGlkZW50aWNhbFxuICAgICAqIHdpbGwgbm90IGJlIHByb3Blcmx5IHRyZWF0ZWQgYXMgdGhlIHNhbWUgcGF0aCwgbGVhZGluZyB0byBpbmNvcnJlY3RcbiAgICAgKiBiZWhhdmlvciBhbmQgcG9zc2libGUgc2VjdXJpdHkgaXNzdWVzLlxuICAgICAqL1xuICAgIG5hbWU7XG4gICAgLyoqXG4gICAgICogdGhlIFBhdGggZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGUgcGF0aCByb290LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcm9vdDtcbiAgICAvKipcbiAgICAgKiBBbGwgcm9vdHMgZm91bmQgd2l0aGluIHRoZSBjdXJyZW50IFBhdGhTY3VycnkgZmFtaWx5XG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICByb290cztcbiAgICAvKipcbiAgICAgKiBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IHBhdGgsIG9yIHVuZGVmaW5lZCBpbiB0aGUgY2FzZSBvZiByb290IGVudHJpZXNcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHBhcmVudDtcbiAgICAvKipcbiAgICAgKiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBwYXRocyBhcmUgY29tcGFyZWQgY2FzZS1pbnNlbnNpdGl2ZWx5XG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbm9jYXNlO1xuICAgIC8qKlxuICAgICAqIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHRoaXMgcGF0aCBpcyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICAgICAqIG9mIHRoZSBQYXRoU2N1cnJ5IGNvbGxlY3Rpb24gdGhhdCBjb250YWlucyBpdC5cbiAgICAgKi9cbiAgICBpc0NXRCA9IGZhbHNlO1xuICAgIC8vIHBvdGVudGlhbCBkZWZhdWx0IGZzIG92ZXJyaWRlXG4gICAgI2ZzO1xuICAgIC8vIFN0YXRzIGZpZWxkc1xuICAgICNkZXY7XG4gICAgZ2V0IGRldigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2RldjtcbiAgICB9XG4gICAgI21vZGU7XG4gICAgZ2V0IG1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNtb2RlO1xuICAgIH1cbiAgICAjbmxpbms7XG4gICAgZ2V0IG5saW5rKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbmxpbms7XG4gICAgfVxuICAgICN1aWQ7XG4gICAgZ2V0IHVpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3VpZDtcbiAgICB9XG4gICAgI2dpZDtcbiAgICBnZXQgZ2lkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jZ2lkO1xuICAgIH1cbiAgICAjcmRldjtcbiAgICBnZXQgcmRldigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3JkZXY7XG4gICAgfVxuICAgICNibGtzaXplO1xuICAgIGdldCBibGtzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYmxrc2l6ZTtcbiAgICB9XG4gICAgI2lubztcbiAgICBnZXQgaW5vKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jaW5vO1xuICAgIH1cbiAgICAjc2l6ZTtcbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3NpemU7XG4gICAgfVxuICAgICNibG9ja3M7XG4gICAgZ2V0IGJsb2NrcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2Jsb2NrcztcbiAgICB9XG4gICAgI2F0aW1lTXM7XG4gICAgZ2V0IGF0aW1lTXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNhdGltZU1zO1xuICAgIH1cbiAgICAjbXRpbWVNcztcbiAgICBnZXQgbXRpbWVNcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI210aW1lTXM7XG4gICAgfVxuICAgICNjdGltZU1zO1xuICAgIGdldCBjdGltZU1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY3RpbWVNcztcbiAgICB9XG4gICAgI2JpcnRodGltZU1zO1xuICAgIGdldCBiaXJ0aHRpbWVNcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2JpcnRodGltZU1zO1xuICAgIH1cbiAgICAjYXRpbWU7XG4gICAgZ2V0IGF0aW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYXRpbWU7XG4gICAgfVxuICAgICNtdGltZTtcbiAgICBnZXQgbXRpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNtdGltZTtcbiAgICB9XG4gICAgI2N0aW1lO1xuICAgIGdldCBjdGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2N0aW1lO1xuICAgIH1cbiAgICAjYmlydGh0aW1lO1xuICAgIGdldCBiaXJ0aHRpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNiaXJ0aHRpbWU7XG4gICAgfVxuICAgICNtYXRjaE5hbWU7XG4gICAgI2RlcHRoO1xuICAgICNmdWxscGF0aDtcbiAgICAjZnVsbHBhdGhQb3NpeDtcbiAgICAjcmVsYXRpdmU7XG4gICAgI3JlbGF0aXZlUG9zaXg7XG4gICAgI3R5cGU7XG4gICAgI2NoaWxkcmVuO1xuICAgICNsaW5rVGFyZ2V0O1xuICAgICNyZWFscGF0aDtcbiAgICAvKipcbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIERpcmVudCBjbGFzcyBhcyBvZlxuICAgICAqIE5vZGUgdjIwLCB3aGVyZSBEaXJlbnRbJ3BhcmVudFBhdGgnXSByZWZlcnMgdG8gdGhlIHBhdGggb2YgdGhlXG4gICAgICogZGlyZWN0b3J5IHRoYXQgd2FzIHBhc3NlZCB0byByZWFkZGlyLiBGb3Igcm9vdCBlbnRyaWVzLCBpdCdzIHRoZSBwYXRoXG4gICAgICogdG8gdGhlIGVudHJ5IGl0c2VsZi5cbiAgICAgKi9cbiAgICBnZXQgcGFyZW50UGF0aCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnBhcmVudCB8fCB0aGlzKS5mdWxscGF0aCgpO1xuICAgIH1cbiAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAvKipcbiAgICAgKiBEZXByZWNhdGVkIGFsaWFzIGZvciBEaXJlbnRbJ3BhcmVudFBhdGgnXSBTb21ld2hhdCBjb3VudGVyaW50dWl0aXZlbHksXG4gICAgICogdGhpcyBwcm9wZXJ0eSByZWZlcnMgdG8gdGhlICpwYXJlbnQqIHBhdGgsIG5vdCB0aGUgcGF0aCBvYmplY3QgaXRzZWxmLlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBnZXQgcGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50UGF0aDtcbiAgICB9XG4gICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAvKipcbiAgICAgKiBEbyBub3QgY3JlYXRlIG5ldyBQYXRoIG9iamVjdHMgZGlyZWN0bHkuICBUaGV5IHNob3VsZCBhbHdheXMgYmUgYWNjZXNzZWRcbiAgICAgKiB2aWEgdGhlIFBhdGhTY3VycnkgY2xhc3Mgb3Igb3RoZXIgbWV0aG9kcyBvbiB0aGUgUGF0aCBjbGFzcy5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHR5cGUgPSBVTktOT1dOLCByb290LCByb290cywgbm9jYXNlLCBjaGlsZHJlbiwgb3B0cykge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLiNtYXRjaE5hbWUgPSBub2Nhc2UgPyBub3JtYWxpemVOb2Nhc2UobmFtZSkgOiBub3JtYWxpemUobmFtZSk7XG4gICAgICAgIHRoaXMuI3R5cGUgPSB0eXBlICYgVFlQRU1BU0s7XG4gICAgICAgIHRoaXMubm9jYXNlID0gbm9jYXNlO1xuICAgICAgICB0aGlzLnJvb3RzID0gcm9vdHM7XG4gICAgICAgIHRoaXMucm9vdCA9IHJvb3QgfHwgdGhpcztcbiAgICAgICAgdGhpcy4jY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgICAgdGhpcy4jZnVsbHBhdGggPSBvcHRzLmZ1bGxwYXRoO1xuICAgICAgICB0aGlzLiNyZWxhdGl2ZSA9IG9wdHMucmVsYXRpdmU7XG4gICAgICAgIHRoaXMuI3JlbGF0aXZlUG9zaXggPSBvcHRzLnJlbGF0aXZlUG9zaXg7XG4gICAgICAgIHRoaXMucGFyZW50ID0gb3B0cy5wYXJlbnQ7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy4jZnMgPSB0aGlzLnBhcmVudC4jZnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNmcyA9IGZzRnJvbU9wdGlvbihvcHRzLmZzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBkZXB0aCBvZiB0aGUgUGF0aCBvYmplY3QgZnJvbSBpdHMgcm9vdC5cbiAgICAgKlxuICAgICAqIEZvciBleGFtcGxlLCBhIHBhdGggYXQgYC9mb28vYmFyYCB3b3VsZCBoYXZlIGEgZGVwdGggb2YgMi5cbiAgICAgKi9cbiAgICBkZXB0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI2RlcHRoICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jZGVwdGg7XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI2RlcHRoID0gMCk7XG4gICAgICAgIHJldHVybiAodGhpcy4jZGVwdGggPSB0aGlzLnBhcmVudC5kZXB0aCgpICsgMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNoaWxkcmVuQ2FjaGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjaGlsZHJlbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBQYXRoIG9iamVjdCByZWZlcmVuY2VkIGJ5IHRoZSBzdHJpbmcgcGF0aCwgcmVzb2x2ZWQgZnJvbSB0aGlzIFBhdGhcbiAgICAgKi9cbiAgICByZXNvbHZlKHBhdGgpIHtcbiAgICAgICAgaWYgKCFwYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb290UGF0aCA9IHRoaXMuZ2V0Um9vdFN0cmluZyhwYXRoKTtcbiAgICAgICAgY29uc3QgZGlyID0gcGF0aC5zdWJzdHJpbmcocm9vdFBhdGgubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgZGlyUGFydHMgPSBkaXIuc3BsaXQodGhpcy5zcGxpdFNlcCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJvb3RQYXRoID9cbiAgICAgICAgICAgIHRoaXMuZ2V0Um9vdChyb290UGF0aCkuI3Jlc29sdmVQYXJ0cyhkaXJQYXJ0cylcbiAgICAgICAgICAgIDogdGhpcy4jcmVzb2x2ZVBhcnRzKGRpclBhcnRzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgI3Jlc29sdmVQYXJ0cyhkaXJQYXJ0cykge1xuICAgICAgICBsZXQgcCA9IHRoaXM7XG4gICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBkaXJQYXJ0cykge1xuICAgICAgICAgICAgcCA9IHAuY2hpbGQocGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNhY2hlZCBjaGlsZHJlbiBQYXRoIG9iamVjdHMsIGlmIHN0aWxsIGF2YWlsYWJsZS4gIElmIHRoZXlcbiAgICAgKiBoYXZlIGZhbGxlbiBvdXQgb2YgdGhlIGNhY2hlLCB0aGVuIHJldHVybnMgYW4gZW1wdHkgYXJyYXksIGFuZCByZXNldHMgdGhlXG4gICAgICogUkVBRERJUl9DQUxMRUQgYml0LCBzbyB0aGF0IGZ1dHVyZSBjYWxscyB0byByZWFkZGlyKCkgd2lsbCByZXF1aXJlIGFuIGZzXG4gICAgICogbG9va3VwLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY2hpbGRyZW4oKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuI2NoaWxkcmVuLmdldCh0aGlzKTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IE9iamVjdC5hc3NpZ24oW10sIHsgcHJvdmlzaW9uYWw6IDAgfSk7XG4gICAgICAgIHRoaXMuI2NoaWxkcmVuLnNldCh0aGlzLCBjaGlsZHJlbik7XG4gICAgICAgIHRoaXMuI3R5cGUgJj0gflJFQURESVJfQ0FMTEVEO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc29sdmVzIGEgcGF0aCBwb3J0aW9uIGFuZCByZXR1cm5zIG9yIGNyZWF0ZXMgdGhlIGNoaWxkIFBhdGguXG4gICAgICpcbiAgICAgKiBSZXR1cm5zIGB0aGlzYCBpZiBwYXRoUGFydCBpcyBgJydgIG9yIGAnLidgLCBvciBgcGFyZW50YCBpZiBwYXRoUGFydCBpc1xuICAgICAqIGAnLi4nYC5cbiAgICAgKlxuICAgICAqIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuICBJZiBgcGF0aFBhcnRgIGNvbnRhaW5zIGFueSBwYXRoXG4gICAgICogc2VwYXJhdG9ycywgaXQgd2lsbCBsZWFkIHRvIHVuc2FmZSB1bmRlZmluZWQgYmVoYXZpb3IuXG4gICAgICpcbiAgICAgKiBVc2UgYFBhdGgucmVzb2x2ZSgpYCBpbnN0ZWFkLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY2hpbGQocGF0aFBhcnQsIG9wdHMpIHtcbiAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSAnJyB8fCBwYXRoUGFydCA9PT0gJy4nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFBhcnQgPT09ICcuLicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudCB8fCB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmQgdGhlIGNoaWxkXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5ub2Nhc2UgPyBub3JtYWxpemVOb2Nhc2UocGF0aFBhcnQpIDogbm9ybWFsaXplKHBhdGhQYXJ0KTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAocC4jbWF0Y2hOYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGlkbid0IGZpbmQgaXQsIGNyZWF0ZSBwcm92aXNpb25hbCBjaGlsZCwgc2luY2UgaXQgbWlnaHQgbm90XG4gICAgICAgIC8vIGFjdHVhbGx5IGV4aXN0LiAgSWYgd2Uga25vdyB0aGUgcGFyZW50IGlzbid0IGEgZGlyLCB0aGVuXG4gICAgICAgIC8vIGluIGZhY3QgaXQgQ0FOJ1QgZXhpc3QuXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnBhcmVudCA/IHRoaXMuc2VwIDogJyc7XG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gdGhpcy4jZnVsbHBhdGggPyB0aGlzLiNmdWxscGF0aCArIHMgKyBwYXRoUGFydCA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcGNoaWxkID0gdGhpcy5uZXdDaGlsZChwYXRoUGFydCwgVU5LTk9XTiwge1xuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgICAgIHBhcmVudDogdGhpcyxcbiAgICAgICAgICAgIGZ1bGxwYXRoLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzLmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcGNoaWxkLiN0eXBlIHw9IEVOT0VOVDtcbiAgICAgICAgfVxuICAgICAgICAvLyBkb24ndCBoYXZlIHRvIHVwZGF0ZSBwcm92aXNpb25hbCwgYmVjYXVzZSBpZiB3ZSBoYXZlIHJlYWwgY2hpbGRyZW4sXG4gICAgICAgIC8vIHRoZW4gcHJvdmlzaW9uYWwgaXMgc2V0IHRvIGNoaWxkcmVuLmxlbmd0aCwgb3RoZXJ3aXNlIGEgbG93ZXIgbnVtYmVyXG4gICAgICAgIGNoaWxkcmVuLnB1c2gocGNoaWxkKTtcbiAgICAgICAgcmV0dXJuIHBjaGlsZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgY3dkLiBJZiBpdCBkb2VzIG5vdCBzaGFyZSBhbiBhbmNlc3RvciB3aXRoXG4gICAgICogdGhlIGN3ZCwgdGhlbiB0aGlzIGVuZHMgdXAgYmVpbmcgZXF1aXZhbGVudCB0byB0aGUgZnVsbHBhdGgoKVxuICAgICAqL1xuICAgIHJlbGF0aXZlKCkge1xuICAgICAgICBpZiAodGhpcy5pc0NXRClcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgaWYgKHRoaXMuI3JlbGF0aXZlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZWxhdGl2ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmICghcCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNyZWxhdGl2ZSA9IHRoaXMubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHYgPSBwLnJlbGF0aXZlKCk7XG4gICAgICAgIHJldHVybiBwdiArICghcHYgfHwgIXAucGFyZW50ID8gJycgOiB0aGlzLnNlcCkgKyBuYW1lO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSBjd2QsIHVzaW5nIC8gYXMgdGhlIHBhdGggc2VwYXJhdG9yLlxuICAgICAqIElmIGl0IGRvZXMgbm90IHNoYXJlIGFuIGFuY2VzdG9yIHdpdGhcbiAgICAgKiB0aGUgY3dkLCB0aGVuIHRoaXMgZW5kcyB1cCBiZWluZyBlcXVpdmFsZW50IHRvIHRoZSBmdWxscGF0aFBvc2l4KClcbiAgICAgKiBPbiBwb3NpeCBzeXN0ZW1zLCB0aGlzIGlzIGlkZW50aWNhbCB0byByZWxhdGl2ZSgpLlxuICAgICAqL1xuICAgIHJlbGF0aXZlUG9zaXgoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlcCA9PT0gJy8nKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVsYXRpdmUoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNDV0QpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIGlmICh0aGlzLiNyZWxhdGl2ZVBvc2l4ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcmVsYXRpdmVQb3NpeDtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMucGFyZW50O1xuICAgICAgICBpZiAoIXApIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jcmVsYXRpdmVQb3NpeCA9IHRoaXMuZnVsbHBhdGhQb3NpeCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwdiA9IHAucmVsYXRpdmVQb3NpeCgpO1xuICAgICAgICByZXR1cm4gcHYgKyAoIXB2IHx8ICFwLnBhcmVudCA/ICcnIDogJy8nKSArIG5hbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBmdWxseSByZXNvbHZlZCBwYXRoIHN0cmluZyBmb3IgdGhpcyBQYXRoIGVudHJ5XG4gICAgICovXG4gICAgZnVsbHBhdGgoKSB7XG4gICAgICAgIGlmICh0aGlzLiNmdWxscGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jZnVsbHBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMucGFyZW50O1xuICAgICAgICBpZiAoIXApIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jZnVsbHBhdGggPSB0aGlzLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHB2ID0gcC5mdWxscGF0aCgpO1xuICAgICAgICBjb25zdCBmcCA9IHB2ICsgKCFwLnBhcmVudCA/ICcnIDogdGhpcy5zZXApICsgbmFtZTtcbiAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aCA9IGZwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT24gcGxhdGZvcm1zIG90aGVyIHRoYW4gd2luZG93cywgdGhpcyBpcyBpZGVudGljYWwgdG8gZnVsbHBhdGguXG4gICAgICpcbiAgICAgKiBPbiB3aW5kb3dzLCB0aGlzIGlzIG92ZXJyaWRkZW4gdG8gcmV0dXJuIHRoZSBmb3J3YXJkLXNsYXNoIGZvcm0gb2YgdGhlXG4gICAgICogZnVsbCBVTkMgcGF0aC5cbiAgICAgKi9cbiAgICBmdWxscGF0aFBvc2l4KCkge1xuICAgICAgICBpZiAodGhpcy4jZnVsbHBhdGhQb3NpeCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2Z1bGxwYXRoUG9zaXg7XG4gICAgICAgIGlmICh0aGlzLnNlcCA9PT0gJy8nKVxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aFBvc2l4ID0gdGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgcCA9IHRoaXMuZnVsbHBhdGgoKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICAgICAgICBpZiAoL15bYS16XTpcXC8vaS50ZXN0KHApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aFBvc2l4ID0gYC8vPy8ke3B9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuI2Z1bGxwYXRoUG9zaXggPSBwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGNvbnN0IHBmcHAgPSBwLmZ1bGxwYXRoUG9zaXgoKTtcbiAgICAgICAgY29uc3QgZnBwID0gcGZwcCArICghcGZwcCB8fCAhcC5wYXJlbnQgPyAnJyA6ICcvJykgKyB0aGlzLm5hbWU7XG4gICAgICAgIHJldHVybiAodGhpcy4jZnVsbHBhdGhQb3NpeCA9IGZwcCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBQYXRoIG9mIGFuIHVua25vd24gdHlwZT9cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB3ZSBtaWdodCBrbm93ICpzb21ldGhpbmcqIGFib3V0IGl0IGlmIHRoZXJlIGhhcyBiZWVuIGEgcHJldmlvdXNcbiAgICAgKiBmaWxlc3lzdGVtIG9wZXJhdGlvbiwgZm9yIGV4YW1wbGUgdGhhdCBpdCBkb2VzIG5vdCBleGlzdCwgb3IgaXMgbm90IGFcbiAgICAgKiBsaW5rLCBvciB3aGV0aGVyIGl0IGhhcyBjaGlsZCBlbnRyaWVzLlxuICAgICAqL1xuICAgIGlzVW5rbm93bigpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IFVOS05PV047XG4gICAgfVxuICAgIGlzVHlwZSh0eXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2BpcyR7dHlwZX1gXSgpO1xuICAgIH1cbiAgICBnZXRUeXBlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuaXNVbmtub3duKCkgPyAnVW5rbm93bidcbiAgICAgICAgICAgIDogdGhpcy5pc0RpcmVjdG9yeSgpID8gJ0RpcmVjdG9yeSdcbiAgICAgICAgICAgICAgICA6IHRoaXMuaXNGaWxlKCkgPyAnRmlsZSdcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmlzU3ltYm9saWNMaW5rKCkgPyAnU3ltYm9saWNMaW5rJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmlzRklGTygpID8gJ0ZJRk8nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmlzQ2hhcmFjdGVyRGV2aWNlKCkgPyAnQ2hhcmFjdGVyRGV2aWNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaXNCbG9ja0RldmljZSgpID8gJ0Jsb2NrRGV2aWNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAvKiBjOCBpZ25vcmUgc3RhcnQgKi8gdGhpcy5pc1NvY2tldCgpID8gJ1NvY2tldCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdVbmtub3duJyk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBQYXRoIGEgcmVndWxhciBmaWxlP1xuICAgICAqL1xuICAgIGlzRmlsZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGUkVHO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgUGF0aCBhIGRpcmVjdG9yeT9cbiAgICAgKi9cbiAgICBpc0RpcmVjdG9yeSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGRElSO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgcGF0aCBhIGNoYXJhY3RlciBkZXZpY2U/XG4gICAgICovXG4gICAgaXNDaGFyYWN0ZXJEZXZpY2UoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBJRkNIUjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIHBhdGggYSBibG9jayBkZXZpY2U/XG4gICAgICovXG4gICAgaXNCbG9ja0RldmljZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZNVCkgPT09IElGQkxLO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgcGF0aCBhIEZJRk8gcGlwZT9cbiAgICAgKi9cbiAgICBpc0ZJRk8oKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBJRklGTztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIHBhdGggYSBzb2NrZXQ/XG4gICAgICovXG4gICAgaXNTb2NrZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBJRlNPQ0s7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBwYXRoIGEgc3ltYm9saWMgbGluaz9cbiAgICAgKi9cbiAgICBpc1N5bWJvbGljTGluaygpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiN0eXBlICYgSUZMTkspID09PSBJRkxOSztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBlbnRyeSBpZiBpdCBoYXMgYmVlbiBzdWJqZWN0IG9mIGEgc3VjY2Vzc2Z1bCBsc3RhdCwgb3JcbiAgICAgKiB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogRG9lcyBub3QgcmVhZCB0aGUgZmlsZXN5c3RlbSwgc28gYW4gdW5kZWZpbmVkIHJlc3VsdCAqY291bGQqIHNpbXBseVxuICAgICAqIG1lYW4gdGhhdCB3ZSBoYXZlbid0IGNhbGxlZCBsc3RhdCBvbiBpdC5cbiAgICAgKi9cbiAgICBsc3RhdENhY2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3R5cGUgJiBMU1RBVF9DQUxMRUQgPyB0aGlzIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGNhY2hlZCBsaW5rIHRhcmdldCBpZiB0aGUgZW50cnkgaGFzIGJlZW4gdGhlIHN1YmplY3Qgb2YgYVxuICAgICAqIHN1Y2Nlc3NmdWwgcmVhZGxpbmssIG9yIHVuZGVmaW5lZCBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiBEb2VzIG5vdCByZWFkIHRoZSBmaWxlc3lzdGVtLCBzbyBhbiB1bmRlZmluZWQgcmVzdWx0ICpjb3VsZCoganVzdCBtZWFuIHdlXG4gICAgICogZG9uJ3QgaGF2ZSBhbnkgY2FjaGVkIGRhdGEuIE9ubHkgdXNlIGl0IGlmIHlvdSBhcmUgdmVyeSBzdXJlIHRoYXQgYVxuICAgICAqIHJlYWRsaW5rKCkgaGFzIGJlZW4gY2FsbGVkIGF0IHNvbWUgcG9pbnQuXG4gICAgICovXG4gICAgcmVhZGxpbmtDYWNoZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNsaW5rVGFyZ2V0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjYWNoZWQgcmVhbHBhdGggdGFyZ2V0IGlmIHRoZSBlbnRyeSBoYXMgYmVlbiB0aGUgc3ViamVjdFxuICAgICAqIG9mIGEgc3VjY2Vzc2Z1bCByZWFscGF0aCwgb3IgdW5kZWZpbmVkIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIERvZXMgbm90IHJlYWQgdGhlIGZpbGVzeXN0ZW0sIHNvIGFuIHVuZGVmaW5lZCByZXN1bHQgKmNvdWxkKiBqdXN0IG1lYW4gd2VcbiAgICAgKiBkb24ndCBoYXZlIGFueSBjYWNoZWQgZGF0YS4gT25seSB1c2UgaXQgaWYgeW91IGFyZSB2ZXJ5IHN1cmUgdGhhdCBhXG4gICAgICogcmVhbHBhdGgoKSBoYXMgYmVlbiBjYWxsZWQgYXQgc29tZSBwb2ludC5cbiAgICAgKi9cbiAgICByZWFscGF0aENhY2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3JlYWxwYXRoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjYWNoZWQgY2hpbGQgUGF0aCBlbnRyaWVzIGFycmF5IGlmIHRoZSBlbnRyeSBoYXMgYmVlbiB0aGVcbiAgICAgKiBzdWJqZWN0IG9mIGEgc3VjY2Vzc2Z1bCByZWFkZGlyKCksIG9yIFtdIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIERvZXMgbm90IHJlYWQgdGhlIGZpbGVzeXN0ZW0sIHNvIGFuIGVtcHR5IGFycmF5ICpjb3VsZCoganVzdCBtZWFuIHdlXG4gICAgICogZG9uJ3QgaGF2ZSBhbnkgY2FjaGVkIGRhdGEuIE9ubHkgdXNlIGl0IGlmIHlvdSBhcmUgdmVyeSBzdXJlIHRoYXQgYVxuICAgICAqIHJlYWRkaXIoKSBoYXMgYmVlbiBjYWxsZWQgcmVjZW50bHkgZW5vdWdoIHRvIHN0aWxsIGJlIHZhbGlkLlxuICAgICAqL1xuICAgIHJlYWRkaXJDYWNoZWQoKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBpdCdzIHdvcnRoIHRyeWluZyB0byByZWFkbGluay4gIEllLCB3ZSBkb24ndCAoeWV0KSBoYXZlXG4gICAgICogYW55IGluZGljYXRpb24gdGhhdCByZWFkbGluayB3aWxsIGRlZmluaXRlbHkgZmFpbC5cbiAgICAgKlxuICAgICAqIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhdGggaXMga25vd24gdG8gbm90IGJlIGEgc3ltbGluaywgaWYgYSBwcmV2aW91c1xuICAgICAqIHJlYWRsaW5rIGZhaWxlZCwgb3IgaWYgdGhlIGVudHJ5IGRvZXMgbm90IGV4aXN0LlxuICAgICAqL1xuICAgIGNhblJlYWRsaW5rKCkge1xuICAgICAgICBpZiAodGhpcy4jbGlua1RhcmdldClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBjYXNlcyB3aGVyZSBpdCBjYW5ub3QgcG9zc2libHkgc3VjY2VlZFxuICAgICAgICBjb25zdCBpZm10ID0gdGhpcy4jdHlwZSAmIElGTVQ7XG4gICAgICAgIHJldHVybiAhKChpZm10ICE9PSBVTktOT1dOICYmIGlmbXQgIT09IElGTE5LKSB8fFxuICAgICAgICAgICAgdGhpcy4jdHlwZSAmIEVOT1JFQURMSU5LIHx8XG4gICAgICAgICAgICB0aGlzLiN0eXBlICYgRU5PRU5UKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRydWUgaWYgcmVhZGRpciBoYXMgcHJldmlvdXNseSBiZWVuIHN1Y2Nlc3NmdWxseSBjYWxsZWQgb24gdGhpc1xuICAgICAqIHBhdGgsIGluZGljYXRpbmcgdGhhdCBjYWNoZWRSZWFkZGlyKCkgaXMgbGlrZWx5IHZhbGlkLlxuICAgICAqL1xuICAgIGNhbGxlZFJlYWRkaXIoKSB7XG4gICAgICAgIHJldHVybiAhISh0aGlzLiN0eXBlICYgUkVBRERJUl9DQUxMRUQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhdGggaXMga25vd24gdG8gbm90IGV4aXN0LiBUaGF0IGlzLCBhIHByZXZpb3VzIGxzdGF0XG4gICAgICogb3IgcmVhZGRpciBmYWlsZWQgdG8gdmVyaWZ5IGl0cyBleGlzdGVuY2Ugd2hlbiB0aGF0IHdvdWxkIGhhdmUgYmVlblxuICAgICAqIGV4cGVjdGVkLCBvciBhIHBhcmVudCBlbnRyeSB3YXMgbWFya2VkIGVpdGhlciBlbm9lbnQgb3IgZW5vdGRpci5cbiAgICAgKi9cbiAgICBpc0VOT0VOVCgpIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuI3R5cGUgJiBFTk9FTlQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0aCBpcyBhIG1hdGNoIGZvciB0aGUgZ2l2ZW4gcGF0aCBuYW1lLiAgVGhpcyBoYW5kbGVzXG4gICAgICogY2FzZSBzZW5zaXRpdml0eSBhbmQgdW5pY29kZSBub3JtYWxpemF0aW9uLlxuICAgICAqXG4gICAgICogTm90ZTogZXZlbiBvbiBjYXNlLXNlbnNpdGl2ZSBzeXN0ZW1zLCBpdCBpcyAqKm5vdCoqIHNhZmUgdG8gdGVzdCB0aGVcbiAgICAgKiBlcXVhbGl0eSBvZiB0aGUgYC5uYW1lYCBwcm9wZXJ0eSB0byBkZXRlcm1pbmUgd2hldGhlciBhIGdpdmVuIHBhdGhuYW1lXG4gICAgICogbWF0Y2hlcywgZHVlIHRvIHVuaWNvZGUgbm9ybWFsaXphdGlvbiBtaXNtYXRjaGVzLlxuICAgICAqXG4gICAgICogQWx3YXlzIHVzZSB0aGlzIG1ldGhvZCBpbnN0ZWFkIG9mIHRlc3RpbmcgdGhlIGBwYXRoLm5hbWVgIHByb3BlcnR5XG4gICAgICogZGlyZWN0bHkuXG4gICAgICovXG4gICAgaXNOYW1lZChuKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5ub2Nhc2UgP1xuICAgICAgICAgICAgdGhpcy4jbWF0Y2hOYW1lID09PSBub3JtYWxpemUobilcbiAgICAgICAgICAgIDogdGhpcy4jbWF0Y2hOYW1lID09PSBub3JtYWxpemVOb2Nhc2Uobik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgUGF0aCBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgdGFyZ2V0IG9mIGEgc3ltYm9saWMgbGluay5cbiAgICAgKlxuICAgICAqIElmIHRoZSBQYXRoIGlzIG5vdCBhIHN5bWJvbGljIGxpbmssIG9yIGlmIHRoZSByZWFkbGluayBjYWxsIGZhaWxzIGZvciBhbnlcbiAgICAgKiByZWFzb24sIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogUmVzdWx0IGlzIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dGRhdGVkIGlmIHRoZSBmaWxlc3lzdGVtIGlzIG11dGF0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgcmVhZGxpbmsoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuI2xpbmtUYXJnZXQ7XG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNhblJlYWRsaW5rKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIC8vIGFscmVhZHkgY292ZXJlZCBieSB0aGUgY2FuUmVhZGxpbmsgdGVzdCwgaGVyZSBmb3IgdHMgZ3J1bXBsZXNcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVhZCA9IGF3YWl0IHRoaXMuI2ZzLnByb21pc2VzLnJlYWRsaW5rKHRoaXMuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICBjb25zdCBsaW5rVGFyZ2V0ID0gKGF3YWl0IHRoaXMucGFyZW50LnJlYWxwYXRoKCkpPy5yZXNvbHZlKHJlYWQpO1xuICAgICAgICAgICAgaWYgKGxpbmtUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuI2xpbmtUYXJnZXQgPSBsaW5rVGFyZ2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAgIHRoaXMuI3JlYWRsaW5rRmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU3luY2hyb25vdXMge0BsaW5rIFBhdGhCYXNlLnJlYWRsaW5rfVxuICAgICAqL1xuICAgIHJlYWRsaW5rU3luYygpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4jbGlua1RhcmdldDtcbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGxpbmsoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgLy8gYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBjYW5SZWFkbGluayB0ZXN0LCBoZXJlIGZvciB0cyBncnVtcGxlc1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZWFkID0gdGhpcy4jZnMucmVhZGxpbmtTeW5jKHRoaXMuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICBjb25zdCBsaW5rVGFyZ2V0ID0gdGhpcy5wYXJlbnQucmVhbHBhdGhTeW5jKCk/LnJlc29sdmUocmVhZCk7XG4gICAgICAgICAgICBpZiAobGlua1RhcmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy4jbGlua1RhcmdldCA9IGxpbmtUYXJnZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgdGhpcy4jcmVhZGxpbmtGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjcmVhZGRpclN1Y2Nlc3MoY2hpbGRyZW4pIHtcbiAgICAgICAgLy8gc3VjY2VlZGVkLCBtYXJrIHJlYWRkaXIgY2FsbGVkIGJpdFxuICAgICAgICB0aGlzLiN0eXBlIHw9IFJFQURESVJfQ0FMTEVEO1xuICAgICAgICAvLyBtYXJrIGFsbCByZW1haW5pbmcgcHJvdmlzaW9uYWwgY2hpbGRyZW4gYXMgRU5PRU5UXG4gICAgICAgIGZvciAobGV0IHAgPSBjaGlsZHJlbi5wcm92aXNpb25hbDsgcCA8IGNoaWxkcmVuLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gY2hpbGRyZW5bcF07XG4gICAgICAgICAgICBpZiAoYylcbiAgICAgICAgICAgICAgICBjLiNtYXJrRU5PRU5UKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI21hcmtFTk9FTlQoKSB7XG4gICAgICAgIC8vIG1hcmsgYXMgVU5LTk9XTiBhbmQgRU5PRU5UXG4gICAgICAgIGlmICh0aGlzLiN0eXBlICYgRU5PRU5UKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLiN0eXBlID0gKHRoaXMuI3R5cGUgfCBFTk9FTlQpICYgSUZNVF9VTktOT1dOO1xuICAgICAgICB0aGlzLiNtYXJrQ2hpbGRyZW5FTk9FTlQoKTtcbiAgICB9XG4gICAgI21hcmtDaGlsZHJlbkVOT0VOVCgpIHtcbiAgICAgICAgLy8gYWxsIGNoaWxkcmVuIGFyZSBwcm92aXNpb25hbCBhbmQgZG8gbm90IGV4aXN0XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICBjaGlsZHJlbi5wcm92aXNpb25hbCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgcC4jbWFya0VOT0VOVCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgICNtYXJrRU5PUkVBTFBBVEgoKSB7XG4gICAgICAgIHRoaXMuI3R5cGUgfD0gRU5PUkVBTFBBVEg7XG4gICAgICAgIHRoaXMuI21hcmtFTk9URElSKCk7XG4gICAgfVxuICAgIC8vIHNhdmUgdGhlIGluZm9ybWF0aW9uIHdoZW4gd2Uga25vdyB0aGUgZW50cnkgaXMgbm90IGEgZGlyXG4gICAgI21hcmtFTk9URElSKCkge1xuICAgICAgICAvLyBlbnRyeSBpcyBub3QgYSBkaXJlY3RvcnksIHNvIGFueSBjaGlsZHJlbiBjYW4ndCBleGlzdC5cbiAgICAgICAgLy8gdGhpcyAqc2hvdWxkKiBiZSBpbXBvc3NpYmxlLCBzaW5jZSBhbnkgY2hpbGRyZW4gY3JlYXRlZFxuICAgICAgICAvLyBhZnRlciBpdCdzIGJlZW4gbWFya2VkIEVOT1RESVIgc2hvdWxkIGJlIG1hcmtlZCBFTk9FTlQsXG4gICAgICAgIC8vIHNvIGl0IHdvbid0IGV2ZW4gZ2V0IHRvIHRoaXMgcG9pbnQuXG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcy4jdHlwZSAmIEVOT1RESVIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIGxldCB0ID0gdGhpcy4jdHlwZTtcbiAgICAgICAgLy8gdGhpcyBjb3VsZCBoYXBwZW4gaWYgd2Ugc3RhdCBhIGRpciwgdGhlbiBkZWxldGUgaXQsXG4gICAgICAgIC8vIHRoZW4gdHJ5IHRvIHJlYWQgaXQgb3Igb25lIG9mIGl0cyBjaGlsZHJlbi5cbiAgICAgICAgaWYgKCh0ICYgSUZNVCkgPT09IElGRElSKVxuICAgICAgICAgICAgdCAmPSBJRk1UX1VOS05PV047XG4gICAgICAgIHRoaXMuI3R5cGUgPSB0IHwgRU5PVERJUjtcbiAgICAgICAgdGhpcy4jbWFya0NoaWxkcmVuRU5PRU5UKCk7XG4gICAgfVxuICAgICNyZWFkZGlyRmFpbChjb2RlID0gJycpIHtcbiAgICAgICAgLy8gbWFya0VOT1RESVIgYW5kIG1hcmtFTk9FTlQgYWxzbyBzZXQgcHJvdmlzaW9uYWw9MFxuICAgICAgICBpZiAoY29kZSA9PT0gJ0VOT1RESVInIHx8IGNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9URElSKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9FTlQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4oKS5wcm92aXNpb25hbCA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI2xzdGF0RmFpbChjb2RlID0gJycpIHtcbiAgICAgICAgLy8gV2luZG93cyBqdXN0IHJhaXNlcyBFTk9FTlQgaW4gdGhpcyBjYXNlLCBkaXNhYmxlIGZvciB3aW4gQ0lcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmIChjb2RlID09PSAnRU5PVERJUicpIHtcbiAgICAgICAgICAgIC8vIGFscmVhZHkga25vdyBpdCBoYXMgYSBwYXJlbnQgYnkgdGhpcyBwb2ludFxuICAgICAgICAgICAgY29uc3QgcCA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgcC4jbWFya0VOT1RESVIoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9FTlQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjcmVhZGxpbmtGYWlsKGNvZGUgPSAnJykge1xuICAgICAgICBsZXQgdGVyID0gdGhpcy4jdHlwZTtcbiAgICAgICAgdGVyIHw9IEVOT1JFQURMSU5LO1xuICAgICAgICBpZiAoY29kZSA9PT0gJ0VOT0VOVCcpXG4gICAgICAgICAgICB0ZXIgfD0gRU5PRU5UO1xuICAgICAgICAvLyB3aW5kb3dzIGdldHMgYSB3ZWlyZCBlcnJvciB3aGVuIHlvdSB0cnkgdG8gcmVhZGxpbmsgYSBmaWxlXG4gICAgICAgIGlmIChjb2RlID09PSAnRUlOVkFMJyB8fCBjb2RlID09PSAnVU5LTk9XTicpIHtcbiAgICAgICAgICAgIC8vIGV4aXN0cywgYnV0IG5vdCBhIHN5bWxpbmssIHdlIGRvbid0IGtub3cgV0hBVCBpdCBpcywgc28gcmVtb3ZlXG4gICAgICAgICAgICAvLyBhbGwgSUZNVCBiaXRzLlxuICAgICAgICAgICAgdGVyICY9IElGTVRfVU5LTk9XTjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiN0eXBlID0gdGVyO1xuICAgICAgICAvLyB3aW5kb3dzIGp1c3QgZ2V0cyBFTk9FTlQgaW4gdGhpcyBjYXNlLiAgV2UgZG8gY292ZXIgdGhlIGNhc2UsXG4gICAgICAgIC8vIGp1c3QgZGlzYWJsZWQgYmVjYXVzZSBpdCdzIGltcG9zc2libGUgb24gV2luZG93cyBDSVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKGNvZGUgPT09ICdFTk9URElSJyAmJiB0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuI21hcmtFTk9URElSKCk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICB9XG4gICAgI3JlYWRkaXJBZGRDaGlsZChlLCBjKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jcmVhZGRpck1heWJlUHJvbW90ZUNoaWxkKGUsIGMpIHx8XG4gICAgICAgICAgICB0aGlzLiNyZWFkZGlyQWRkTmV3Q2hpbGQoZSwgYykpO1xuICAgIH1cbiAgICAjcmVhZGRpckFkZE5ld0NoaWxkKGUsIGMpIHtcbiAgICAgICAgLy8gYWxsb2MgbmV3IGVudHJ5IGF0IGhlYWQsIHNvIGl0J3MgbmV2ZXIgcHJvdmlzaW9uYWxcbiAgICAgICAgY29uc3QgdHlwZSA9IGVudFRvVHlwZShlKTtcbiAgICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLm5ld0NoaWxkKGUubmFtZSwgdHlwZSwgeyBwYXJlbnQ6IHRoaXMgfSk7XG4gICAgICAgIGNvbnN0IGlmbXQgPSBjaGlsZC4jdHlwZSAmIElGTVQ7XG4gICAgICAgIGlmIChpZm10ICE9PSBJRkRJUiAmJiBpZm10ICE9PSBJRkxOSyAmJiBpZm10ICE9PSBVTktOT1dOKSB7XG4gICAgICAgICAgICBjaGlsZC4jdHlwZSB8PSBFTk9URElSO1xuICAgICAgICB9XG4gICAgICAgIGMudW5zaGlmdChjaGlsZCk7XG4gICAgICAgIGMucHJvdmlzaW9uYWwrKztcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICAjcmVhZGRpck1heWJlUHJvbW90ZUNoaWxkKGUsIGMpIHtcbiAgICAgICAgZm9yIChsZXQgcCA9IGMucHJvdmlzaW9uYWw7IHAgPCBjLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBjb25zdCBwY2hpbGQgPSBjW3BdO1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubm9jYXNlID8gbm9ybWFsaXplTm9jYXNlKGUubmFtZSkgOiBub3JtYWxpemUoZS5uYW1lKTtcbiAgICAgICAgICAgIGlmIChuYW1lICE9PSBwY2hpbGQuI21hdGNoTmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3JlYWRkaXJQcm9tb3RlQ2hpbGQoZSwgcGNoaWxkLCBwLCBjKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjcmVhZGRpclByb21vdGVDaGlsZChlLCBwLCBpbmRleCwgYykge1xuICAgICAgICBjb25zdCB2ID0gcC5uYW1lO1xuICAgICAgICAvLyByZXRhaW4gYW55IG90aGVyIGZsYWdzLCBidXQgc2V0IGlmbXQgZnJvbSBkaXJlbnRcbiAgICAgICAgcC4jdHlwZSA9IChwLiN0eXBlICYgSUZNVF9VTktOT1dOKSB8IGVudFRvVHlwZShlKTtcbiAgICAgICAgLy8gY2FzZSBzZW5zaXRpdml0eSBmaXhpbmcgd2hlbiB3ZSBsZWFybiB0aGUgdHJ1ZSBuYW1lLlxuICAgICAgICBpZiAodiAhPT0gZS5uYW1lKVxuICAgICAgICAgICAgcC5uYW1lID0gZS5uYW1lO1xuICAgICAgICAvLyBqdXN0IGFkdmFuY2UgcHJvdmlzaW9uYWwgaW5kZXggKHBvdGVudGlhbGx5IG9mZiB0aGUgbGlzdCksXG4gICAgICAgIC8vIG90aGVyd2lzZSB3ZSBoYXZlIHRvIHNwbGljZS9wb3AgaXQgb3V0IGFuZCByZS1pbnNlcnQgYXQgaGVhZFxuICAgICAgICBpZiAoaW5kZXggIT09IGMucHJvdmlzaW9uYWwpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gYy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgICAgIGMucG9wKCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgYy51bnNoaWZ0KHApO1xuICAgICAgICB9XG4gICAgICAgIGMucHJvdmlzaW9uYWwrKztcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGwgbHN0YXQoKSBvbiB0aGlzIFBhdGgsIGFuZCB1cGRhdGUgYWxsIGtub3duIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlXG4gICAgICogZGV0ZXJtaW5lZC5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB1bmxpa2UgYGZzLmxzdGF0KClgLCB0aGUgcmV0dXJuZWQgdmFsdWUgZG9lcyBub3QgY29udGFpbiBzb21lXG4gICAgICogaW5mb3JtYXRpb24sIHN1Y2ggYXMgYG1vZGVgLCBgZGV2YCwgYG5saW5rYCwgYW5kIGBpbm9gLiAgSWYgdGhhdFxuICAgICAqIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkLCB5b3Ugd2lsbCBuZWVkIHRvIGNhbGwgYGZzLmxzdGF0YCB5b3Vyc2VsZi5cbiAgICAgKlxuICAgICAqIElmIHRoZSBQYXRoIHJlZmVycyB0byBhIG5vbmV4aXN0ZW50IGZpbGUsIG9yIGlmIHRoZSBsc3RhdCBjYWxsIGZhaWxzIGZvclxuICAgICAqIGFueSByZWFzb24sIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLiAgT3RoZXJ3aXNlIHRoZSB1cGRhdGVkIFBhdGggb2JqZWN0IGlzXG4gICAgICogcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHRzIGFyZSBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXQgb2YgZGF0ZSBpZiB0aGUgZmlsZXN5c3RlbSBpc1xuICAgICAqIG11dGF0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgbHN0YXQoKSB7XG4gICAgICAgIGlmICgodGhpcy4jdHlwZSAmIEVOT0VOVCkgPT09IDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jYXBwbHlTdGF0KGF3YWl0IHRoaXMuI2ZzLnByb21pc2VzLmxzdGF0KHRoaXMuZnVsbHBhdGgoKSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jbHN0YXRGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHN5bmNocm9ub3VzIHtAbGluayBQYXRoQmFzZS5sc3RhdH1cbiAgICAgKi9cbiAgICBsc3RhdFN5bmMoKSB7XG4gICAgICAgIGlmICgodGhpcy4jdHlwZSAmIEVOT0VOVCkgPT09IDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jYXBwbHlTdGF0KHRoaXMuI2ZzLmxzdGF0U3luYyh0aGlzLmZ1bGxwYXRoKCkpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI2xzdGF0RmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAjYXBwbHlTdGF0KHN0KSB7XG4gICAgICAgIGNvbnN0IHsgYXRpbWUsIGF0aW1lTXMsIGJpcnRodGltZSwgYmlydGh0aW1lTXMsIGJsa3NpemUsIGJsb2NrcywgY3RpbWUsIGN0aW1lTXMsIGRldiwgZ2lkLCBpbm8sIG1vZGUsIG10aW1lLCBtdGltZU1zLCBubGluaywgcmRldiwgc2l6ZSwgdWlkLCB9ID0gc3Q7XG4gICAgICAgIHRoaXMuI2F0aW1lID0gYXRpbWU7XG4gICAgICAgIHRoaXMuI2F0aW1lTXMgPSBhdGltZU1zO1xuICAgICAgICB0aGlzLiNiaXJ0aHRpbWUgPSBiaXJ0aHRpbWU7XG4gICAgICAgIHRoaXMuI2JpcnRodGltZU1zID0gYmlydGh0aW1lTXM7XG4gICAgICAgIHRoaXMuI2Jsa3NpemUgPSBibGtzaXplO1xuICAgICAgICB0aGlzLiNibG9ja3MgPSBibG9ja3M7XG4gICAgICAgIHRoaXMuI2N0aW1lID0gY3RpbWU7XG4gICAgICAgIHRoaXMuI2N0aW1lTXMgPSBjdGltZU1zO1xuICAgICAgICB0aGlzLiNkZXYgPSBkZXY7XG4gICAgICAgIHRoaXMuI2dpZCA9IGdpZDtcbiAgICAgICAgdGhpcy4jaW5vID0gaW5vO1xuICAgICAgICB0aGlzLiNtb2RlID0gbW9kZTtcbiAgICAgICAgdGhpcy4jbXRpbWUgPSBtdGltZTtcbiAgICAgICAgdGhpcy4jbXRpbWVNcyA9IG10aW1lTXM7XG4gICAgICAgIHRoaXMuI25saW5rID0gbmxpbms7XG4gICAgICAgIHRoaXMuI3JkZXYgPSByZGV2O1xuICAgICAgICB0aGlzLiNzaXplID0gc2l6ZTtcbiAgICAgICAgdGhpcy4jdWlkID0gdWlkO1xuICAgICAgICBjb25zdCBpZm10ID0gZW50VG9UeXBlKHN0KTtcbiAgICAgICAgLy8gcmV0YWluIGFueSBvdGhlciBmbGFncywgYnV0IHNldCB0aGUgaWZtdFxuICAgICAgICB0aGlzLiN0eXBlID0gKHRoaXMuI3R5cGUgJiBJRk1UX1VOS05PV04pIHwgaWZtdCB8IExTVEFUX0NBTExFRDtcbiAgICAgICAgaWYgKGlmbXQgIT09IFVOS05PV04gJiYgaWZtdCAhPT0gSUZESVIgJiYgaWZtdCAhPT0gSUZMTkspIHtcbiAgICAgICAgICAgIHRoaXMuI3R5cGUgfD0gRU5PVERJUjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjb25SZWFkZGlyQ0IgPSBbXTtcbiAgICAjcmVhZGRpckNCSW5GbGlnaHQgPSBmYWxzZTtcbiAgICAjY2FsbE9uUmVhZGRpckNCKGNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuI3JlYWRkaXJDQkluRmxpZ2h0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGNicyA9IHRoaXMuI29uUmVhZGRpckNCLnNsaWNlKCk7XG4gICAgICAgIHRoaXMuI29uUmVhZGRpckNCLmxlbmd0aCA9IDA7XG4gICAgICAgIGNicy5mb3JFYWNoKGNiID0+IGNiKG51bGwsIGNoaWxkcmVuKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YW5kYXJkIG5vZGUtc3R5bGUgY2FsbGJhY2sgaW50ZXJmYWNlIHRvIGdldCBsaXN0IG9mIGRpcmVjdG9yeSBlbnRyaWVzLlxuICAgICAqXG4gICAgICogSWYgdGhlIFBhdGggY2Fubm90IG9yIGRvZXMgbm90IGNvbnRhaW4gYW55IGNoaWxkcmVuLCB0aGVuIGFuIGVtcHR5IGFycmF5XG4gICAgICogaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHRzIGFyZSBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXQgb2YgZGF0ZSBpZiB0aGUgZmlsZXN5c3RlbSBpc1xuICAgICAqIG11dGF0ZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2IgVGhlIGNhbGxiYWNrIGNhbGxlZCB3aXRoIChlciwgZW50cmllcykuICBOb3RlIHRoYXQgdGhlIGBlcmBcbiAgICAgKiBwYXJhbSBpcyBzb21ld2hhdCBleHRyYW5lb3VzLCBhcyBhbGwgcmVhZGRpcigpIGVycm9ycyBhcmUgaGFuZGxlZCBhbmRcbiAgICAgKiBzaW1wbHkgcmVzdWx0IGluIGFuIGVtcHR5IHNldCBvZiBlbnRyaWVzIGJlaW5nIHJldHVybmVkLlxuICAgICAqIEBwYXJhbSBhbGxvd1phbGdvIEJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IGltbWVkaWF0ZWx5IGtub3duIHJlc3VsdHMgc2hvdWxkXG4gICAgICogKm5vdCogYmUgZGVmZXJyZWQgd2l0aCBgcXVldWVNaWNyb3Rhc2tgLiBEZWZhdWx0cyB0byBgZmFsc2VgLiBSZWxlYXNlXG4gICAgICogemFsZ28gYXQgeW91ciBwZXJpbCwgdGhlIGRhcmsgcG9ueSBsb3JkIGlzIGRldmlvdXMgYW5kIHVuZm9yZ2l2aW5nLlxuICAgICAqL1xuICAgIHJlYWRkaXJDQihjYiwgYWxsb3daYWxnbyA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIGlmIChhbGxvd1phbGdvKVxuICAgICAgICAgICAgICAgIGNiKG51bGwsIFtdKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYihudWxsLCBbXSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICBpZiAodGhpcy5jYWxsZWRSZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgICAgICAgICBpZiAoYWxsb3daYWxnbylcbiAgICAgICAgICAgICAgICBjYihudWxsLCBjKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYihudWxsLCBjKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB6YWxnbyBhdCB0aGlzIHBvaW50LlxuICAgICAgICB0aGlzLiNvblJlYWRkaXJDQi5wdXNoKGNiKTtcbiAgICAgICAgaWYgKHRoaXMuI3JlYWRkaXJDQkluRmxpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jcmVhZGRpckNCSW5GbGlnaHQgPSB0cnVlO1xuICAgICAgICAvLyBlbHNlIHJlYWQgdGhlIGRpcmVjdG9yeSwgZmlsbCB1cCBjaGlsZHJlblxuICAgICAgICAvLyBkZS1wcm92aXNpb25hbGl6ZSBhbnkgcHJvdmlzaW9uYWwgY2hpbGRyZW4uXG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gdGhpcy5mdWxscGF0aCgpO1xuICAgICAgICB0aGlzLiNmcy5yZWFkZGlyKGZ1bGxwYXRoLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSwgKGVyLCBlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyRmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wcm92aXNpb25hbCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZ2V0IGFuIGVycm9yLCB3ZSBhbHdheXMgZ2V0IGVudHJpZXMuXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpckFkZENoaWxkKGUsIGNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpclN1Y2Nlc3MoY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jY2FsbE9uUmVhZGRpckNCKGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAjYXN5bmNSZWFkZGlySW5GbGlnaHQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFuIGFycmF5IG9mIGtub3duIGNoaWxkIGVudHJpZXMuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgUGF0aCBjYW5ub3Qgb3IgZG9lcyBub3QgY29udGFpbiBhbnkgY2hpbGRyZW4sIHRoZW4gYW4gZW1wdHkgYXJyYXlcbiAgICAgKiBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdHMgYXJlIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dCBvZiBkYXRlIGlmIHRoZSBmaWxlc3lzdGVtIGlzXG4gICAgICogbXV0YXRlZC5cbiAgICAgKi9cbiAgICBhc3luYyByZWFkZGlyKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGlmICh0aGlzLmNhbGxlZFJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbHNlIHJlYWQgdGhlIGRpcmVjdG9yeSwgZmlsbCB1cCBjaGlsZHJlblxuICAgICAgICAvLyBkZS1wcm92aXNpb25hbGl6ZSBhbnkgcHJvdmlzaW9uYWwgY2hpbGRyZW4uXG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gdGhpcy5mdWxscGF0aCgpO1xuICAgICAgICBpZiAodGhpcy4jYXN5bmNSZWFkZGlySW5GbGlnaHQpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuI2FzeW5jUmVhZGRpckluRmxpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBsZXQgcmVzb2x2ZSA9ICgpID0+IHsgfTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB0aGlzLiNhc3luY1JlYWRkaXJJbkZsaWdodCA9IG5ldyBQcm9taXNlKHJlcyA9PiAocmVzb2x2ZSA9IHJlcykpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgYXdhaXQgdGhpcy4jZnMucHJvbWlzZXMucmVhZGRpcihmdWxscGF0aCwge1xuICAgICAgICAgICAgICAgICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJBZGRDaGlsZChlLCBjaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJTdWNjZXNzKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3Zpc2lvbmFsID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI2FzeW5jUmVhZGRpckluRmxpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHN5bmNocm9ub3VzIHtAbGluayBQYXRoQmFzZS5yZWFkZGlyfVxuICAgICAqL1xuICAgIHJlYWRkaXJTeW5jKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgIGlmICh0aGlzLmNhbGxlZFJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbHNlIHJlYWQgdGhlIGRpcmVjdG9yeSwgZmlsbCB1cCBjaGlsZHJlblxuICAgICAgICAvLyBkZS1wcm92aXNpb25hbGl6ZSBhbnkgcHJvdmlzaW9uYWwgY2hpbGRyZW4uXG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gdGhpcy5mdWxscGF0aCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIHRoaXMuI2ZzLnJlYWRkaXJTeW5jKGZ1bGxwYXRoLCB7XG4gICAgICAgICAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpckFkZENoaWxkKGUsIGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJTdWNjZXNzKGNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJGYWlsKGVyLmNvZGUpO1xuICAgICAgICAgICAgY2hpbGRyZW4ucHJvdmlzaW9uYWwgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgfVxuICAgIGNhblJlYWRkaXIoKSB7XG4gICAgICAgIGlmICh0aGlzLiN0eXBlICYgRU5PQ0hJTEQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGlmbXQgPSBJRk1UICYgdGhpcy4jdHlwZTtcbiAgICAgICAgLy8gd2UgYWx3YXlzIHNldCBFTk9URElSIHdoZW4gc2V0dGluZyBJRk1ULCBzbyBzaG91bGQgYmUgaW1wb3NzaWJsZVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKCEoaWZtdCA9PT0gVU5LTk9XTiB8fCBpZm10ID09PSBJRkRJUiB8fCBpZm10ID09PSBJRkxOSykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSB7XG4gICAgICAgIHJldHVybiAoKHRoaXMuI3R5cGUgJiBJRkRJUikgPT09IElGRElSICYmXG4gICAgICAgICAgICAhKHRoaXMuI3R5cGUgJiBFTk9DSElMRCkgJiZcbiAgICAgICAgICAgICFkaXJzLmhhcyh0aGlzKSAmJlxuICAgICAgICAgICAgKCF3YWxrRmlsdGVyIHx8IHdhbGtGaWx0ZXIodGhpcykpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBQYXRoIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHBhdGggYXMgcmVzb2x2ZWRcbiAgICAgKiBieSByZWFscGF0aCgzKS5cbiAgICAgKlxuICAgICAqIElmIHRoZSByZWFscGF0aCBjYWxsIGZhaWxzIGZvciBhbnkgcmVhc29uLCBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdCBpcyBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXRkYXRlZCBpZiB0aGUgZmlsZXN5c3RlbSBpcyBtdXRhdGVkLlxuICAgICAqIE9uIHN1Y2Nlc3MsIHJldHVybnMgYSBQYXRoIG9iamVjdC5cbiAgICAgKi9cbiAgICBhc3luYyByZWFscGF0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI3JlYWxwYXRoKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3JlYWxwYXRoO1xuICAgICAgICBpZiAoKEVOT1JFQUxQQVRIIHwgRU5PUkVBRExJTksgfCBFTk9FTlQpICYgdGhpcy4jdHlwZSlcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBycCA9IGF3YWl0IHRoaXMuI2ZzLnByb21pc2VzLnJlYWxwYXRoKHRoaXMuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI3JlYWxwYXRoID0gdGhpcy5yZXNvbHZlKHJwKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9SRUFMUEFUSCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN5bmNocm9ub3VzIHtAbGluayByZWFscGF0aH1cbiAgICAgKi9cbiAgICByZWFscGF0aFN5bmMoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyZWFscGF0aClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZWFscGF0aDtcbiAgICAgICAgaWYgKChFTk9SRUFMUEFUSCB8IEVOT1JFQURMSU5LIHwgRU5PRU5UKSAmIHRoaXMuI3R5cGUpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcnAgPSB0aGlzLiNmcy5yZWFscGF0aFN5bmModGhpcy5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jcmVhbHBhdGggPSB0aGlzLnJlc29sdmUocnApKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoXykge1xuICAgICAgICAgICAgdGhpcy4jbWFya0VOT1JFQUxQQVRIKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgbWV0aG9kIHRvIG1hcmsgdGhpcyBQYXRoIG9iamVjdCBhcyB0aGUgc2N1cnJ5IGN3ZCxcbiAgICAgKiBjYWxsZWQgYnkge0BsaW5rIFBhdGhTY3VycnkjY2hkaXJ9XG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBbc2V0QXNDd2RdKG9sZEN3ZCkge1xuICAgICAgICBpZiAob2xkQ3dkID09PSB0aGlzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBvbGRDd2QuaXNDV0QgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0NXRCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSBuZXcgU2V0KFtdKTtcbiAgICAgICAgbGV0IHJwID0gW107XG4gICAgICAgIGxldCBwID0gdGhpcztcbiAgICAgICAgd2hpbGUgKHAgJiYgcC5wYXJlbnQpIHtcbiAgICAgICAgICAgIGNoYW5nZWQuYWRkKHApO1xuICAgICAgICAgICAgcC4jcmVsYXRpdmUgPSBycC5qb2luKHRoaXMuc2VwKTtcbiAgICAgICAgICAgIHAuI3JlbGF0aXZlUG9zaXggPSBycC5qb2luKCcvJyk7XG4gICAgICAgICAgICBwID0gcC5wYXJlbnQ7XG4gICAgICAgICAgICBycC5wdXNoKCcuLicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdyB1bi1tZW1vaXplIHBhcmVudHMgb2Ygb2xkIGN3ZFxuICAgICAgICBwID0gb2xkQ3dkO1xuICAgICAgICB3aGlsZSAocCAmJiBwLnBhcmVudCAmJiAhY2hhbmdlZC5oYXMocCkpIHtcbiAgICAgICAgICAgIHAuI3JlbGF0aXZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcC4jcmVsYXRpdmVQb3NpeCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHAgPSBwLnBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogUGF0aCBjbGFzcyB1c2VkIG9uIHdpbjMyIHN5c3RlbXNcbiAqXG4gKiBVc2VzIGAnXFxcXCdgIGFzIHRoZSBwYXRoIHNlcGFyYXRvciBmb3IgcmV0dXJuZWQgcGF0aHMsIGVpdGhlciBgJ1xcXFwnYCBvciBgJy8nYFxuICogYXMgdGhlIHBhdGggc2VwYXJhdG9yIGZvciBwYXJzaW5nIHBhdGhzLlxuICovXG5leHBvcnQgY2xhc3MgUGF0aFdpbjMyIGV4dGVuZHMgUGF0aEJhc2Uge1xuICAgIC8qKlxuICAgICAqIFNlcGFyYXRvciBmb3IgZ2VuZXJhdGluZyBwYXRoIHN0cmluZ3MuXG4gICAgICovXG4gICAgc2VwID0gJ1xcXFwnO1xuICAgIC8qKlxuICAgICAqIFNlcGFyYXRvciBmb3IgcGFyc2luZyBwYXRoIHN0cmluZ3MuXG4gICAgICovXG4gICAgc3BsaXRTZXAgPSBlaXRoZXJTZXA7XG4gICAgLyoqXG4gICAgICogRG8gbm90IGNyZWF0ZSBuZXcgUGF0aCBvYmplY3RzIGRpcmVjdGx5LiAgVGhleSBzaG91bGQgYWx3YXlzIGJlIGFjY2Vzc2VkXG4gICAgICogdmlhIHRoZSBQYXRoU2N1cnJ5IGNsYXNzIG9yIG90aGVyIG1ldGhvZHMgb24gdGhlIFBhdGggY2xhc3MuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB0eXBlID0gVU5LTk9XTiwgcm9vdCwgcm9vdHMsIG5vY2FzZSwgY2hpbGRyZW4sIG9wdHMpIHtcbiAgICAgICAgc3VwZXIobmFtZSwgdHlwZSwgcm9vdCwgcm9vdHMsIG5vY2FzZSwgY2hpbGRyZW4sIG9wdHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBuZXdDaGlsZChuYW1lLCB0eXBlID0gVU5LTk9XTiwgb3B0cyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBuZXcgUGF0aFdpbjMyKG5hbWUsIHR5cGUsIHRoaXMucm9vdCwgdGhpcy5yb290cywgdGhpcy5ub2Nhc2UsIHRoaXMuY2hpbGRyZW5DYWNoZSgpLCBvcHRzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZ2V0Um9vdFN0cmluZyhwYXRoKSB7XG4gICAgICAgIHJldHVybiB3aW4zMi5wYXJzZShwYXRoKS5yb290O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBnZXRSb290KHJvb3RQYXRoKSB7XG4gICAgICAgIHJvb3RQYXRoID0gdW5jVG9Ecml2ZShyb290UGF0aC50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgaWYgKHJvb3RQYXRoID09PSB0aGlzLnJvb3QubmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdDtcbiAgICAgICAgfVxuICAgICAgICAvLyBvaywgbm90IHRoYXQgb25lLCBjaGVjayBpZiBpdCBtYXRjaGVzIGFub3RoZXIgd2Uga25vdyBhYm91dFxuICAgICAgICBmb3IgKGNvbnN0IFtjb21wYXJlLCByb290XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnJvb3RzKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2FtZVJvb3Qocm9vdFBhdGgsIGNvbXBhcmUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLnJvb3RzW3Jvb3RQYXRoXSA9IHJvb3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyd2lzZSwgaGF2ZSB0byBjcmVhdGUgYSBuZXcgb25lLlxuICAgICAgICByZXR1cm4gKHRoaXMucm9vdHNbcm9vdFBhdGhdID0gbmV3IFBhdGhTY3VycnlXaW4zMihyb290UGF0aCwgdGhpcykucm9vdCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHNhbWVSb290KHJvb3RQYXRoLCBjb21wYXJlID0gdGhpcy5yb290Lm5hbWUpIHtcbiAgICAgICAgLy8gd2luZG93cyBjYW4gKHJhcmVseSkgaGF2ZSBjYXNlLXNlbnNpdGl2ZSBmaWxlc3lzdGVtLCBidXRcbiAgICAgICAgLy8gVU5DIGFuZCBkcml2ZSBsZXR0ZXJzIGFyZSBhbHdheXMgY2FzZS1pbnNlbnNpdGl2ZSwgYW5kIGNhbm9uaWNhbGx5XG4gICAgICAgIC8vIHJlcHJlc2VudGVkIHVwcGVyY2FzZS5cbiAgICAgICAgcm9vdFBhdGggPSByb290UGF0aFxuICAgICAgICAgICAgLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXC8vZywgJ1xcXFwnKVxuICAgICAgICAgICAgLnJlcGxhY2UodW5jRHJpdmVSZWdleHAsICckMVxcXFwnKTtcbiAgICAgICAgcmV0dXJuIHJvb3RQYXRoID09PSBjb21wYXJlO1xuICAgIH1cbn1cbi8qKlxuICogUGF0aCBjbGFzcyB1c2VkIG9uIGFsbCBwb3NpeCBzeXN0ZW1zLlxuICpcbiAqIFVzZXMgYCcvJ2AgYXMgdGhlIHBhdGggc2VwYXJhdG9yLlxuICovXG5leHBvcnQgY2xhc3MgUGF0aFBvc2l4IGV4dGVuZHMgUGF0aEJhc2Uge1xuICAgIC8qKlxuICAgICAqIHNlcGFyYXRvciBmb3IgcGFyc2luZyBwYXRoIHN0cmluZ3NcbiAgICAgKi9cbiAgICBzcGxpdFNlcCA9ICcvJztcbiAgICAvKipcbiAgICAgKiBzZXBhcmF0b3IgZm9yIGdlbmVyYXRpbmcgcGF0aCBzdHJpbmdzXG4gICAgICovXG4gICAgc2VwID0gJy8nO1xuICAgIC8qKlxuICAgICAqIERvIG5vdCBjcmVhdGUgbmV3IFBhdGggb2JqZWN0cyBkaXJlY3RseS4gIFRoZXkgc2hvdWxkIGFsd2F5cyBiZSBhY2Nlc3NlZFxuICAgICAqIHZpYSB0aGUgUGF0aFNjdXJyeSBjbGFzcyBvciBvdGhlciBtZXRob2RzIG9uIHRoZSBQYXRoIGNsYXNzLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmFtZSwgdHlwZSA9IFVOS05PV04sIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKG5hbWUsIHR5cGUsIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZ2V0Um9vdFN0cmluZyhwYXRoKSB7XG4gICAgICAgIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoJy8nKSA/ICcvJyA6ICcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBnZXRSb290KF9yb290UGF0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb290O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBuZXdDaGlsZChuYW1lLCB0eXBlID0gVU5LTk9XTiwgb3B0cyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBuZXcgUGF0aFBvc2l4KG5hbWUsIHR5cGUsIHRoaXMucm9vdCwgdGhpcy5yb290cywgdGhpcy5ub2Nhc2UsIHRoaXMuY2hpbGRyZW5DYWNoZSgpLCBvcHRzKTtcbiAgICB9XG59XG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgUGF0aFNjdXJyeSBjbGFzc2VzLCBwcm92aWRpbmcgdGhlIGludGVyZmFjZSBmb3IgcGF0aFxuICogcmVzb2x1dGlvbiBhbmQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLlxuICpcbiAqIFR5cGljYWxseSwgeW91IHNob3VsZCAqbm90KiBpbnN0YW50aWF0ZSB0aGlzIGNsYXNzIGRpcmVjdGx5LCBidXQgcmF0aGVyIG9uZVxuICogb2YgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGNsYXNzZXMsIG9yIHRoZSBleHBvcnRlZCB7QGxpbmsgUGF0aFNjdXJyeX0gd2hpY2hcbiAqIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHBsYXRmb3JtLlxuICovXG5leHBvcnQgY2xhc3MgUGF0aFNjdXJyeUJhc2Uge1xuICAgIC8qKlxuICAgICAqIFRoZSByb290IFBhdGggZW50cnkgZm9yIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9mIHRoaXMgU2N1cnJ5XG4gICAgICovXG4gICAgcm9vdDtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyaW5nIHBhdGggZm9yIHRoZSByb290IG9mIHRoaXMgU2N1cnJ5J3MgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICAgICAqL1xuICAgIHJvb3RQYXRoO1xuICAgIC8qKlxuICAgICAqIEEgY29sbGVjdGlvbiBvZiBhbGwgcm9vdHMgZW5jb3VudGVyZWQsIHJlZmVyZW5jZWQgYnkgcm9vdFBhdGhcbiAgICAgKi9cbiAgICByb290cztcbiAgICAvKipcbiAgICAgKiBUaGUgUGF0aCBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgUGF0aFNjdXJyeSdzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gICAgICovXG4gICAgY3dkO1xuICAgICNyZXNvbHZlQ2FjaGU7XG4gICAgI3Jlc29sdmVQb3NpeENhY2hlO1xuICAgICNjaGlsZHJlbjtcbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIHBhdGggY29tcGFyaXNvbnMgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuICAgICAqXG4gICAgICogRGVmYXVsdHMgdHJ1ZSBvbiBEYXJ3aW4gYW5kIFdpbmRvd3Mgc3lzdGVtcywgZmFsc2UgZWxzZXdoZXJlLlxuICAgICAqL1xuICAgIG5vY2FzZTtcbiAgICAjZnM7XG4gICAgLyoqXG4gICAgICogVGhpcyBjbGFzcyBzaG91bGQgbm90IGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseS5cbiAgICAgKlxuICAgICAqIFVzZSBQYXRoU2N1cnJ5V2luMzIsIFBhdGhTY3VycnlEYXJ3aW4sIFBhdGhTY3VycnlQb3NpeCwgb3IgUGF0aFNjdXJyeVxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY3dkID0gcHJvY2Vzcy5jd2QoKSwgcGF0aEltcGwsIHNlcCwgeyBub2Nhc2UsIGNoaWxkcmVuQ2FjaGVTaXplID0gMTYgKiAxMDI0LCBmcyA9IGRlZmF1bHRGUywgfSA9IHt9KSB7XG4gICAgICAgIHRoaXMuI2ZzID0gZnNGcm9tT3B0aW9uKGZzKTtcbiAgICAgICAgaWYgKGN3ZCBpbnN0YW5jZW9mIFVSTCB8fCBjd2Quc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XG4gICAgICAgICAgICBjd2QgPSBmaWxlVVJMVG9QYXRoKGN3ZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVzb2x2ZSBhbmQgc3BsaXQgcm9vdCwgYW5kIHRoZW4gYWRkIHRvIHRoZSBzdG9yZS5cbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgb25seSB0aW1lIHdlIGNhbGwgcGF0aC5yZXNvbHZlKClcbiAgICAgICAgY29uc3QgY3dkUGF0aCA9IHBhdGhJbXBsLnJlc29sdmUoY3dkKTtcbiAgICAgICAgdGhpcy5yb290cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMucm9vdFBhdGggPSB0aGlzLnBhcnNlUm9vdFBhdGgoY3dkUGF0aCk7XG4gICAgICAgIHRoaXMuI3Jlc29sdmVDYWNoZSA9IG5ldyBSZXNvbHZlQ2FjaGUoKTtcbiAgICAgICAgdGhpcy4jcmVzb2x2ZVBvc2l4Q2FjaGUgPSBuZXcgUmVzb2x2ZUNhY2hlKCk7XG4gICAgICAgIHRoaXMuI2NoaWxkcmVuID0gbmV3IENoaWxkcmVuQ2FjaGUoY2hpbGRyZW5DYWNoZVNpemUpO1xuICAgICAgICBjb25zdCBzcGxpdCA9IGN3ZFBhdGguc3Vic3RyaW5nKHRoaXMucm9vdFBhdGgubGVuZ3RoKS5zcGxpdChzZXApO1xuICAgICAgICAvLyByZXNvbHZlKCcvJykgbGVhdmVzICcnLCBzcGxpdHMgdG8gWycnXSwgd2UgZG9uJ3Qgd2FudCB0aGF0LlxuICAgICAgICBpZiAoc3BsaXQubGVuZ3RoID09PSAxICYmICFzcGxpdFswXSkge1xuICAgICAgICAgICAgc3BsaXQucG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmIChub2Nhc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbXVzdCBwcm92aWRlIG5vY2FzZSBzZXR0aW5nIHRvIFBhdGhTY3VycnlCYXNlIGN0b3InKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLm5vY2FzZSA9IG5vY2FzZTtcbiAgICAgICAgdGhpcy5yb290ID0gdGhpcy5uZXdSb290KHRoaXMuI2ZzKTtcbiAgICAgICAgdGhpcy5yb290c1t0aGlzLnJvb3RQYXRoXSA9IHRoaXMucm9vdDtcbiAgICAgICAgbGV0IHByZXYgPSB0aGlzLnJvb3Q7XG4gICAgICAgIGxldCBsZW4gPSBzcGxpdC5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCBqb2luU2VwID0gcGF0aEltcGwuc2VwO1xuICAgICAgICBsZXQgYWJzID0gdGhpcy5yb290UGF0aDtcbiAgICAgICAgbGV0IHNhd0ZpcnN0ID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBzcGxpdCkge1xuICAgICAgICAgICAgY29uc3QgbCA9IGxlbi0tO1xuICAgICAgICAgICAgcHJldiA9IHByZXYuY2hpbGQocGFydCwge1xuICAgICAgICAgICAgICAgIHJlbGF0aXZlOiBuZXcgQXJyYXkobCkuZmlsbCgnLi4nKS5qb2luKGpvaW5TZXApLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUG9zaXg6IG5ldyBBcnJheShsKS5maWxsKCcuLicpLmpvaW4oJy8nKSxcbiAgICAgICAgICAgICAgICBmdWxscGF0aDogKGFicyArPSAoc2F3Rmlyc3QgPyAnJyA6IGpvaW5TZXApICsgcGFydCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNhd0ZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN3ZCA9IHByZXY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgZGVwdGggb2YgYSBwcm92aWRlZCBwYXRoLCBzdHJpbmcsIG9yIHRoZSBjd2RcbiAgICAgKi9cbiAgICBkZXB0aChwYXRoID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcGF0aCA9IHRoaXMuY3dkLnJlc29sdmUocGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhdGguZGVwdGgoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBjYWNoZSBvZiBjaGlsZCBlbnRyaWVzLiAgRXhwb3NlZCBzbyBzdWJjbGFzc2VzIGNhbiBjcmVhdGVcbiAgICAgKiBjaGlsZCBQYXRoIG9iamVjdHMgaW4gYSBwbGF0Zm9ybS1zcGVjaWZpYyB3YXkuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjaGlsZHJlbkNhY2hlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY2hpbGRyZW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgb25lIG9yIG1vcmUgcGF0aCBzdHJpbmdzIHRvIGEgcmVzb2x2ZWQgc3RyaW5nXG4gICAgICpcbiAgICAgKiBTYW1lIGludGVyZmFjZSBhcyByZXF1aXJlKCdwYXRoJykucmVzb2x2ZS5cbiAgICAgKlxuICAgICAqIE11Y2ggZmFzdGVyIHRoYW4gcGF0aC5yZXNvbHZlKCkgd2hlbiBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZm9yIHRoZSBzYW1lXG4gICAgICogcGF0aCwgYmVjYXVzZSB0aGUgcmVzb2x2ZWQgUGF0aCBvYmplY3RzIGFyZSBjYWNoZWQuICBNdWNoIHNsb3dlclxuICAgICAqIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICByZXNvbHZlKC4uLnBhdGhzKSB7XG4gICAgICAgIC8vIGZpcnN0IGZpZ3VyZSBvdXQgdGhlIG1pbmltdW0gbnVtYmVyIG9mIHBhdGhzIHdlIGhhdmUgdG8gdGVzdFxuICAgICAgICAvLyB3ZSBhbHdheXMgc3RhcnQgYXQgY3dkLCBidXQgYW55IGFic29sdXRlcyB3aWxsIGJ1bXAgdGhlIHN0YXJ0XG4gICAgICAgIGxldCByID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSBwYXRocy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgcCA9IHBhdGhzW2ldO1xuICAgICAgICAgICAgaWYgKCFwIHx8IHAgPT09ICcuJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHIgPSByID8gYCR7cH0vJHtyfWAgOiBwO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNBYnNvbHV0ZShwKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuI3Jlc29sdmVDYWNoZS5nZXQocik7XG4gICAgICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmN3ZC5yZXNvbHZlKHIpLmZ1bGxwYXRoKCk7XG4gICAgICAgIHRoaXMuI3Jlc29sdmVDYWNoZS5zZXQociwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzb2x2ZSBvbmUgb3IgbW9yZSBwYXRoIHN0cmluZ3MgdG8gYSByZXNvbHZlZCBzdHJpbmcsIHJldHVybmluZ1xuICAgICAqIHRoZSBwb3NpeCBwYXRoLiAgSWRlbnRpY2FsIHRvIC5yZXNvbHZlKCkgb24gcG9zaXggc3lzdGVtcywgYnV0IG9uXG4gICAgICogd2luZG93cyB3aWxsIHJldHVybiBhIGZvcndhcmQtc2xhc2ggc2VwYXJhdGVkIFVOQyBwYXRoLlxuICAgICAqXG4gICAgICogU2FtZSBpbnRlcmZhY2UgYXMgcmVxdWlyZSgncGF0aCcpLnJlc29sdmUuXG4gICAgICpcbiAgICAgKiBNdWNoIGZhc3RlciB0aGFuIHBhdGgucmVzb2x2ZSgpIHdoZW4gY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciB0aGUgc2FtZVxuICAgICAqIHBhdGgsIGJlY2F1c2UgdGhlIHJlc29sdmVkIFBhdGggb2JqZWN0cyBhcmUgY2FjaGVkLiAgTXVjaCBzbG93ZXJcbiAgICAgKiBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcmVzb2x2ZVBvc2l4KC4uLnBhdGhzKSB7XG4gICAgICAgIC8vIGZpcnN0IGZpZ3VyZSBvdXQgdGhlIG1pbmltdW0gbnVtYmVyIG9mIHBhdGhzIHdlIGhhdmUgdG8gdGVzdFxuICAgICAgICAvLyB3ZSBhbHdheXMgc3RhcnQgYXQgY3dkLCBidXQgYW55IGFic29sdXRlcyB3aWxsIGJ1bXAgdGhlIHN0YXJ0XG4gICAgICAgIGxldCByID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSBwYXRocy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgcCA9IHBhdGhzW2ldO1xuICAgICAgICAgICAgaWYgKCFwIHx8IHAgPT09ICcuJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHIgPSByID8gYCR7cH0vJHtyfWAgOiBwO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNBYnNvbHV0ZShwKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuI3Jlc29sdmVQb3NpeENhY2hlLmdldChyKTtcbiAgICAgICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY3dkLnJlc29sdmUocikuZnVsbHBhdGhQb3NpeCgpO1xuICAgICAgICB0aGlzLiNyZXNvbHZlUG9zaXhDYWNoZS5zZXQociwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZmluZCB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSBjd2QgdG8gdGhlIHN1cHBsaWVkIHBhdGggc3RyaW5nIG9yIGVudHJ5XG4gICAgICovXG4gICAgcmVsYXRpdmUoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkucmVsYXRpdmUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZmluZCB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSBjd2QgdG8gdGhlIHN1cHBsaWVkIHBhdGggc3RyaW5nIG9yXG4gICAgICogZW50cnksIHVzaW5nIC8gYXMgdGhlIHBhdGggZGVsaW1pdGVyLCBldmVuIG9uIFdpbmRvd3MuXG4gICAgICovXG4gICAgcmVsYXRpdmVQb3NpeChlbnRyeSA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeS5yZWxhdGl2ZVBvc2l4KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgYmFzZW5hbWUgZm9yIHRoZSBwcm92aWRlZCBzdHJpbmcgb3IgUGF0aCBvYmplY3RcbiAgICAgKi9cbiAgICBiYXNlbmFtZShlbnRyeSA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeS5uYW1lO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGRpcm5hbWUgZm9yIHRoZSBwcm92aWRlZCBzdHJpbmcgb3IgUGF0aCBvYmplY3RcbiAgICAgKi9cbiAgICBkaXJuYW1lKGVudHJ5ID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChlbnRyeS5wYXJlbnQgfHwgZW50cnkpLmZ1bGxwYXRoKCk7XG4gICAgfVxuICAgIGFzeW5jIHJlYWRkaXIoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzIH0gPSBvcHRzO1xuICAgICAgICBpZiAoIWVudHJ5LmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcCA9IGF3YWl0IGVudHJ5LnJlYWRkaXIoKTtcbiAgICAgICAgICAgIHJldHVybiB3aXRoRmlsZVR5cGVzID8gcCA6IHAubWFwKGUgPT4gZS5uYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWFkZGlyU3luYyhlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgPSB0cnVlIH0gPSBvcHRzO1xuICAgICAgICBpZiAoIWVudHJ5LmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpdGhGaWxlVHlwZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBlbnRyeS5yZWFkZGlyU3luYygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnJlYWRkaXJTeW5jKCkubWFwKGUgPT4gZS5uYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsIGxzdGF0KCkgb24gdGhlIHN0cmluZyBvciBQYXRoIG9iamVjdCwgYW5kIHVwZGF0ZSBhbGwga25vd25cbiAgICAgKiBpbmZvcm1hdGlvbiB0aGF0IGNhbiBiZSBkZXRlcm1pbmVkLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IHVubGlrZSBgZnMubHN0YXQoKWAsIHRoZSByZXR1cm5lZCB2YWx1ZSBkb2VzIG5vdCBjb250YWluIHNvbWVcbiAgICAgKiBpbmZvcm1hdGlvbiwgc3VjaCBhcyBgbW9kZWAsIGBkZXZgLCBgbmxpbmtgLCBhbmQgYGlub2AuICBJZiB0aGF0XG4gICAgICogaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQsIHlvdSB3aWxsIG5lZWQgdG8gY2FsbCBgZnMubHN0YXRgIHlvdXJzZWxmLlxuICAgICAqXG4gICAgICogSWYgdGhlIFBhdGggcmVmZXJzIHRvIGEgbm9uZXhpc3RlbnQgZmlsZSwgb3IgaWYgdGhlIGxzdGF0IGNhbGwgZmFpbHMgZm9yXG4gICAgICogYW55IHJlYXNvbiwgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuICBPdGhlcndpc2UgdGhlIHVwZGF0ZWQgUGF0aCBvYmplY3QgaXNcbiAgICAgKiByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdHMgYXJlIGNhY2hlZCwgYW5kIHRodXMgbWF5IGJlIG91dCBvZiBkYXRlIGlmIHRoZSBmaWxlc3lzdGVtIGlzXG4gICAgICogbXV0YXRlZC5cbiAgICAgKi9cbiAgICBhc3luYyBsc3RhdChlbnRyeSA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeS5sc3RhdCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBzeW5jaHJvbm91cyB7QGxpbmsgUGF0aFNjdXJyeUJhc2UubHN0YXR9XG4gICAgICovXG4gICAgbHN0YXRTeW5jKGVudHJ5ID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5LmxzdGF0U3luYygpO1xuICAgIH1cbiAgICBhc3luYyByZWFkbGluayhlbnRyeSA9IHRoaXMuY3dkLCB7IHdpdGhGaWxlVHlwZXMgfSA9IHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogZmFsc2UsXG4gICAgfSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICB3aXRoRmlsZVR5cGVzID0gZW50cnkud2l0aEZpbGVUeXBlcztcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZSA9IGF3YWl0IGVudHJ5LnJlYWRsaW5rKCk7XG4gICAgICAgIHJldHVybiB3aXRoRmlsZVR5cGVzID8gZSA6IGU/LmZ1bGxwYXRoKCk7XG4gICAgfVxuICAgIHJlYWRsaW5rU3luYyhlbnRyeSA9IHRoaXMuY3dkLCB7IHdpdGhGaWxlVHlwZXMgfSA9IHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogZmFsc2UsXG4gICAgfSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICB3aXRoRmlsZVR5cGVzID0gZW50cnkud2l0aEZpbGVUeXBlcztcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZSA9IGVudHJ5LnJlYWRsaW5rU3luYygpO1xuICAgICAgICByZXR1cm4gd2l0aEZpbGVUeXBlcyA/IGUgOiBlPy5mdWxscGF0aCgpO1xuICAgIH1cbiAgICBhc3luYyByZWFscGF0aChlbnRyeSA9IHRoaXMuY3dkLCB7IHdpdGhGaWxlVHlwZXMgfSA9IHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogZmFsc2UsXG4gICAgfSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICB3aXRoRmlsZVR5cGVzID0gZW50cnkud2l0aEZpbGVUeXBlcztcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZSA9IGF3YWl0IGVudHJ5LnJlYWxwYXRoKCk7XG4gICAgICAgIHJldHVybiB3aXRoRmlsZVR5cGVzID8gZSA6IGU/LmZ1bGxwYXRoKCk7XG4gICAgfVxuICAgIHJlYWxwYXRoU3luYyhlbnRyeSA9IHRoaXMuY3dkLCB7IHdpdGhGaWxlVHlwZXMgfSA9IHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogZmFsc2UsXG4gICAgfSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICB3aXRoRmlsZVR5cGVzID0gZW50cnkud2l0aEZpbGVUeXBlcztcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZSA9IGVudHJ5LnJlYWxwYXRoU3luYygpO1xuICAgICAgICByZXR1cm4gd2l0aEZpbGVUeXBlcyA/IGUgOiBlPy5mdWxscGF0aCgpO1xuICAgIH1cbiAgICBhc3luYyB3YWxrKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyA9IHRydWUsIGZvbGxvdyA9IGZhbHNlLCBmaWx0ZXIsIHdhbGtGaWx0ZXIsIH0gPSBvcHRzO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCh3aXRoRmlsZVR5cGVzID8gZW50cnkgOiBlbnRyeS5mdWxscGF0aCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXJzID0gbmV3IFNldCgpO1xuICAgICAgICBjb25zdCB3YWxrID0gKGRpciwgY2IpID0+IHtcbiAgICAgICAgICAgIGRpcnMuYWRkKGRpcik7XG4gICAgICAgICAgICBkaXIucmVhZGRpckNCKChlciwgZW50cmllcykgPT4ge1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgIGlmIChlcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2IoZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgIGxldCBsZW4gPSBlbnRyaWVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAoIWxlbilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC0tbGVuID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh3aXRoRmlsZVR5cGVzID8gZSA6IGUuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGxvdyAmJiBlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucmVhbHBhdGgoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHIgPT4gKHI/LmlzVW5rbm93bigpID8gci5sc3RhdCgpIDogcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ociA9PiByPy5zaG91bGRXYWxrKGRpcnMsIHdhbGtGaWx0ZXIpID8gd2FsayhyLCBuZXh0KSA6IG5leHQoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5zaG91bGRXYWxrKGRpcnMsIHdhbGtGaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FsayhlLCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRydWUpOyAvLyB6YWxnb29vb29vb1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzdGFydCA9IGVudHJ5O1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgICAgICB3YWxrKHN0YXJ0LCBlciA9PiB7XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgaWYgKGVyKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqKGVyKTtcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgIHJlcyhyZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgd2Fsa1N5bmMoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSwgZm9sbG93ID0gZmFsc2UsIGZpbHRlciwgd2Fsa0ZpbHRlciwgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGVudHJ5KSkge1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHdpdGhGaWxlVHlwZXMgPyBlbnRyeSA6IGVudHJ5LmZ1bGxwYXRoKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpcnMgPSBuZXcgU2V0KFtlbnRyeV0pO1xuICAgICAgICBmb3IgKGNvbnN0IGRpciBvZiBkaXJzKSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gZGlyLnJlYWRkaXJTeW5jKCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2god2l0aEZpbGVUeXBlcyA/IGUgOiBlLmZ1bGxwYXRoKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgciA9IGU7XG4gICAgICAgICAgICAgICAgaWYgKGUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShmb2xsb3cgJiYgKHIgPSBlLnJlYWxwYXRoU3luYygpKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHIuaXNVbmtub3duKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByLmxzdGF0U3luYygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoci5zaG91bGRXYWxrKGRpcnMsIHdhbGtGaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcnMuYWRkKHIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3VwcG9ydCBmb3IgYGZvciBhd2FpdGBcbiAgICAgKlxuICAgICAqIEFsaWFzIGZvciB7QGxpbmsgUGF0aFNjdXJyeUJhc2UuaXRlcmF0ZX1cbiAgICAgKlxuICAgICAqIE5vdGU6IEFzIG9mIE5vZGUgMTksIHRoaXMgaXMgdmVyeSBzbG93LCBjb21wYXJlZCB0byBvdGhlciBtZXRob2RzIG9mXG4gICAgICogd2Fsa2luZy4gIENvbnNpZGVyIHVzaW5nIHtAbGluayBQYXRoU2N1cnJ5QmFzZS5zdHJlYW19IGlmIG1lbW9yeSBvdmVyaGVhZFxuICAgICAqIGFuZCBiYWNrcHJlc3N1cmUgYXJlIGNvbmNlcm5zLCBvciB7QGxpbmsgUGF0aFNjdXJyeUJhc2Uud2Fsa30gaWYgbm90LlxuICAgICAqL1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZXJhdGUoKTtcbiAgICB9XG4gICAgaXRlcmF0ZShlbnRyeSA9IHRoaXMuY3dkLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgLy8gaXRlcmF0aW5nIGFzeW5jIG92ZXIgdGhlIHN0cmVhbSBpcyBzaWduaWZpY2FudGx5IG1vcmUgcGVyZm9ybWFudCxcbiAgICAgICAgLy8gZXNwZWNpYWxseSBpbiB0aGUgd2FybS1jYWNoZSBzY2VuYXJpbywgYmVjYXVzZSBpdCBidWZmZXJzIHVwIGRpcmVjdG9yeVxuICAgICAgICAvLyBlbnRyaWVzIGluIHRoZSBiYWNrZ3JvdW5kIGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgYSB5aWVsZCBmb3IgZWFjaCBvbmUuXG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtKGVudHJ5LCBvcHRpb25zKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXRlcmF0aW5nIG92ZXIgYSBQYXRoU2N1cnJ5IHBlcmZvcm1zIGEgc3luY2hyb25vdXMgd2Fsay5cbiAgICAgKlxuICAgICAqIEFsaWFzIGZvciB7QGxpbmsgUGF0aFNjdXJyeUJhc2UuaXRlcmF0ZVN5bmN9XG4gICAgICovXG4gICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZXJhdGVTeW5jKCk7XG4gICAgfVxuICAgICppdGVyYXRlU3luYyhlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgPSB0cnVlLCBmb2xsb3cgPSBmYWxzZSwgZmlsdGVyLCB3YWxrRmlsdGVyLCB9ID0gb3B0cztcbiAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGVudHJ5KSkge1xuICAgICAgICAgICAgeWllbGQgd2l0aEZpbGVUeXBlcyA/IGVudHJ5IDogZW50cnkuZnVsbHBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXJzID0gbmV3IFNldChbZW50cnldKTtcbiAgICAgICAgZm9yIChjb25zdCBkaXIgb2YgZGlycykge1xuICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IGRpci5yZWFkZGlyU3luYygpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgd2l0aEZpbGVUeXBlcyA/IGUgOiBlLmZ1bGxwYXRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCByID0gZTtcbiAgICAgICAgICAgICAgICBpZiAoZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGZvbGxvdyAmJiAociA9IGUucmVhbHBhdGhTeW5jKCkpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoci5pc1Vua25vd24oKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHIubHN0YXRTeW5jKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyLnNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlycy5hZGQocik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHN0cmVhbShlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgPSB0cnVlLCBmb2xsb3cgPSBmYWxzZSwgZmlsdGVyLCB3YWxrRmlsdGVyLCB9ID0gb3B0cztcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IG5ldyBNaW5pcGFzcyh7IG9iamVjdE1vZGU6IHRydWUgfSk7XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHJlc3VsdHMud3JpdGUod2l0aEZpbGVUeXBlcyA/IGVudHJ5IDogZW50cnkuZnVsbHBhdGgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgY29uc3QgcXVldWUgPSBbZW50cnldO1xuICAgICAgICBsZXQgcHJvY2Vzc2luZyA9IDA7XG4gICAgICAgIGNvbnN0IHByb2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICB3aGlsZSAoIXBhdXNlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpciA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFkaXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NpbmcgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2Nlc3NpbmcrKztcbiAgICAgICAgICAgICAgICBkaXJzLmFkZChkaXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9uUmVhZGRpciA9IChlciwgZW50cmllcywgZGlkUmVhbHBhdGhzID0gZmFsc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzLmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9sbG93ICYmICFkaWRSZWFscGF0aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVhbHBhdGgoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHIpID0+IHI/LmlzVW5rbm93bigpID8gci5sc3RhdCgpIDogcikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9taXNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiBvblJlYWRkaXIobnVsbCwgZW50cmllcywgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKGUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cy53cml0ZSh3aXRoRmlsZVR5cGVzID8gZSA6IGUuZnVsbHBhdGgoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZy0tO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IGUucmVhbHBhdGhDYWNoZWQoKSB8fCBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLnB1c2gocik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhdXNlZCAmJiAhcmVzdWx0cy5mbG93aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLm9uY2UoJ2RyYWluJywgcHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gemFsZ28gY29udGFpbm1lbnRcbiAgICAgICAgICAgICAgICBsZXQgc3luYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZGlyLnJlYWRkaXJDQihvblJlYWRkaXIsIHRydWUpO1xuICAgICAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcHJvY2VzcygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgc3RyZWFtU3luYyhlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgPSB0cnVlLCBmb2xsb3cgPSBmYWxzZSwgZmlsdGVyLCB3YWxrRmlsdGVyLCB9ID0gb3B0cztcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IG5ldyBNaW5pcGFzcyh7IG9iamVjdE1vZGU6IHRydWUgfSk7XG4gICAgICAgIGNvbnN0IGRpcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHJlc3VsdHMud3JpdGUod2l0aEZpbGVUeXBlcyA/IGVudHJ5IDogZW50cnkuZnVsbHBhdGgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVldWUgPSBbZW50cnldO1xuICAgICAgICBsZXQgcHJvY2Vzc2luZyA9IDA7XG4gICAgICAgIGNvbnN0IHByb2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICB3aGlsZSAoIXBhdXNlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpciA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFkaXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NpbmcgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2Nlc3NpbmcrKztcbiAgICAgICAgICAgICAgICBkaXJzLmFkZChkaXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBkaXIucmVhZGRpclN5bmMoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cy53cml0ZSh3aXRoRmlsZVR5cGVzID8gZSA6IGUuZnVsbHBhdGgoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2Nlc3NpbmctLTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgciA9IGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGZvbGxvdyAmJiAociA9IGUucmVhbHBhdGhTeW5jKCkpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLmlzVW5rbm93bigpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIubHN0YXRTeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHIuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaChyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXVzZWQgJiYgIXJlc3VsdHMuZmxvd2luZylcbiAgICAgICAgICAgICAgICByZXN1bHRzLm9uY2UoJ2RyYWluJywgcHJvY2Vzcyk7XG4gICAgICAgIH07XG4gICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIGNoZGlyKHBhdGggPSB0aGlzLmN3ZCkge1xuICAgICAgICBjb25zdCBvbGRDd2QgPSB0aGlzLmN3ZDtcbiAgICAgICAgdGhpcy5jd2QgPSB0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycgPyB0aGlzLmN3ZC5yZXNvbHZlKHBhdGgpIDogcGF0aDtcbiAgICAgICAgdGhpcy5jd2Rbc2V0QXNDd2RdKG9sZEN3ZCk7XG4gICAgfVxufVxuLyoqXG4gKiBXaW5kb3dzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBQYXRoU2N1cnJ5QmFzZX1cbiAqXG4gKiBEZWZhdWx0cyB0byBjYXNlIGluc2Vuc2l0dmUsIHVzZXMgYCdcXFxcJ2AgdG8gZ2VuZXJhdGUgcGF0aCBzdHJpbmdzLiAgVXNlc1xuICoge0BsaW5rIFBhdGhXaW4zMn0gZm9yIFBhdGggb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhdGhTY3VycnlXaW4zMiBleHRlbmRzIFBhdGhTY3VycnlCYXNlIHtcbiAgICAvKipcbiAgICAgKiBzZXBhcmF0b3IgZm9yIGdlbmVyYXRpbmcgcGF0aCBzdHJpbmdzXG4gICAgICovXG4gICAgc2VwID0gJ1xcXFwnO1xuICAgIGNvbnN0cnVjdG9yKGN3ZCA9IHByb2Nlc3MuY3dkKCksIG9wdHMgPSB7fSkge1xuICAgICAgICBjb25zdCB7IG5vY2FzZSA9IHRydWUgfSA9IG9wdHM7XG4gICAgICAgIHN1cGVyKGN3ZCwgd2luMzIsICdcXFxcJywgeyAuLi5vcHRzLCBub2Nhc2UgfSk7XG4gICAgICAgIHRoaXMubm9jYXNlID0gbm9jYXNlO1xuICAgICAgICBmb3IgKGxldCBwID0gdGhpcy5jd2Q7IHA7IHAgPSBwLnBhcmVudCkge1xuICAgICAgICAgICAgcC5ub2Nhc2UgPSB0aGlzLm5vY2FzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwYXJzZVJvb3RQYXRoKGRpcikge1xuICAgICAgICAvLyBpZiB0aGUgcGF0aCBzdGFydHMgd2l0aCBhIHNpbmdsZSBzZXBhcmF0b3IsIGl0J3Mgbm90IGEgVU5DLCBhbmQgd2UnbGxcbiAgICAgICAgLy8ganVzdCBnZXQgc2VwYXJhdG9yIGFzIHRoZSByb290LCBhbmQgZHJpdmVGcm9tVU5DIHdpbGwgcmV0dXJuIFxcXG4gICAgICAgIC8vIEluIHRoYXQgY2FzZSwgbW91bnQgXFwgb24gdGhlIHJvb3QgZnJvbSB0aGUgY3dkLlxuICAgICAgICByZXR1cm4gd2luMzIucGFyc2UoZGlyKS5yb290LnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG5ld1Jvb3QoZnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXRoV2luMzIodGhpcy5yb290UGF0aCwgSUZESVIsIHVuZGVmaW5lZCwgdGhpcy5yb290cywgdGhpcy5ub2Nhc2UsIHRoaXMuY2hpbGRyZW5DYWNoZSgpLCB7IGZzIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgcGF0aCBzdHJpbmcgaXMgYW4gYWJzb2x1dGUgcGF0aFxuICAgICAqL1xuICAgIGlzQWJzb2x1dGUocCkge1xuICAgICAgICByZXR1cm4gKHAuc3RhcnRzV2l0aCgnLycpIHx8IHAuc3RhcnRzV2l0aCgnXFxcXCcpIHx8IC9eW2Etel06KFxcL3xcXFxcKS9pLnRlc3QocCkpO1xuICAgIH1cbn1cbi8qKlxuICoge0BsaW5rIFBhdGhTY3VycnlCYXNlfSBpbXBsZW1lbnRhdGlvbiBmb3IgYWxsIHBvc2l4IHN5c3RlbXMgb3RoZXIgdGhhbiBEYXJ3aW4uXG4gKlxuICogRGVmYXVsdHMgdG8gY2FzZS1zZW5zaXRpdmUgbWF0Y2hpbmcsIHVzZXMgYCcvJ2AgdG8gZ2VuZXJhdGUgcGF0aCBzdHJpbmdzLlxuICpcbiAqIFVzZXMge0BsaW5rIFBhdGhQb3NpeH0gZm9yIFBhdGggb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhdGhTY3VycnlQb3NpeCBleHRlbmRzIFBhdGhTY3VycnlCYXNlIHtcbiAgICAvKipcbiAgICAgKiBzZXBhcmF0b3IgZm9yIGdlbmVyYXRpbmcgcGF0aCBzdHJpbmdzXG4gICAgICovXG4gICAgc2VwID0gJy8nO1xuICAgIGNvbnN0cnVjdG9yKGN3ZCA9IHByb2Nlc3MuY3dkKCksIG9wdHMgPSB7fSkge1xuICAgICAgICBjb25zdCB7IG5vY2FzZSA9IGZhbHNlIH0gPSBvcHRzO1xuICAgICAgICBzdXBlcihjd2QsIHBvc2l4LCAnLycsIHsgLi4ub3B0cywgbm9jYXNlIH0pO1xuICAgICAgICB0aGlzLm5vY2FzZSA9IG5vY2FzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcGFyc2VSb290UGF0aChfZGlyKSB7XG4gICAgICAgIHJldHVybiAnLyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG5ld1Jvb3QoZnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXRoUG9zaXgodGhpcy5yb290UGF0aCwgSUZESVIsIHVuZGVmaW5lZCwgdGhpcy5yb290cywgdGhpcy5ub2Nhc2UsIHRoaXMuY2hpbGRyZW5DYWNoZSgpLCB7IGZzIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgcGF0aCBzdHJpbmcgaXMgYW4gYWJzb2x1dGUgcGF0aFxuICAgICAqL1xuICAgIGlzQWJzb2x1dGUocCkge1xuICAgICAgICByZXR1cm4gcC5zdGFydHNXaXRoKCcvJyk7XG4gICAgfVxufVxuLyoqXG4gKiB7QGxpbmsgUGF0aFNjdXJyeUJhc2V9IGltcGxlbWVudGF0aW9uIGZvciBEYXJ3aW4gKG1hY09TKSBzeXN0ZW1zLlxuICpcbiAqIERlZmF1bHRzIHRvIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2hpbmcsIHVzZXMgYCcvJ2AgZm9yIGdlbmVyYXRpbmcgcGF0aFxuICogc3RyaW5ncy5cbiAqXG4gKiBVc2VzIHtAbGluayBQYXRoUG9zaXh9IGZvciBQYXRoIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXRoU2N1cnJ5RGFyd2luIGV4dGVuZHMgUGF0aFNjdXJyeVBvc2l4IHtcbiAgICBjb25zdHJ1Y3Rvcihjd2QgPSBwcm9jZXNzLmN3ZCgpLCBvcHRzID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBub2Nhc2UgPSB0cnVlIH0gPSBvcHRzO1xuICAgICAgICBzdXBlcihjd2QsIHsgLi4ub3B0cywgbm9jYXNlIH0pO1xuICAgIH1cbn1cbi8qKlxuICogRGVmYXVsdCB7QGxpbmsgUGF0aEJhc2V9IGltcGxlbWVudGF0aW9uIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS5cbiAqXG4gKiB7QGxpbmsgUGF0aFdpbjMyfSBvbiBXaW5kb3dzIHN5c3RlbXMsIHtAbGluayBQYXRoUG9zaXh9IG9uIGFsbCBvdGhlcnMuXG4gKi9cbmV4cG9ydCBjb25zdCBQYXRoID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IFBhdGhXaW4zMiA6IFBhdGhQb3NpeDtcbi8qKlxuICogRGVmYXVsdCB7QGxpbmsgUGF0aFNjdXJyeUJhc2V9IGltcGxlbWVudGF0aW9uIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS5cbiAqXG4gKiB7QGxpbmsgUGF0aFNjdXJyeVdpbjMyfSBvbiBXaW5kb3dzIHN5c3RlbXMsIHtAbGluayBQYXRoU2N1cnJ5RGFyd2lufSBvblxuICogRGFyd2luIChtYWNPUykgc3lzdGVtcywge0BsaW5rIFBhdGhTY3VycnlQb3NpeH0gb24gYWxsIG90aGVycy5cbiAqL1xuZXhwb3J0IGNvbnN0IFBhdGhTY3VycnkgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gUGF0aFNjdXJyeVdpbjMyXG4gICAgOiBwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJyA/IFBhdGhTY3VycnlEYXJ3aW5cbiAgICAgICAgOiBQYXRoU2N1cnJ5UG9zaXg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgImNvbnN0IHByb2MgPSB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2Vzc1xuICAgID8gcHJvY2Vzc1xuICAgIDoge1xuICAgICAgICBzdGRvdXQ6IG51bGwsXG4gICAgICAgIHN0ZGVycjogbnVsbCxcbiAgICB9O1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnbm9kZTpldmVudHMnO1xuaW1wb3J0IFN0cmVhbSBmcm9tICdub2RlOnN0cmVhbSc7XG5pbXBvcnQgeyBTdHJpbmdEZWNvZGVyIH0gZnJvbSAnbm9kZTpzdHJpbmdfZGVjb2Rlcic7XG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBhcmd1bWVudCBpcyBhIE1pbmlwYXNzIHN0cmVhbSwgTm9kZSBzdHJlYW0sIG9yIHNvbWV0aGluZ1xuICogZWxzZSB0aGF0IE1pbmlwYXNzIGNhbiBpbnRlcmFjdCB3aXRoLlxuICovXG5leHBvcnQgY29uc3QgaXNTdHJlYW0gPSAocykgPT4gISFzICYmXG4gICAgdHlwZW9mIHMgPT09ICdvYmplY3QnICYmXG4gICAgKHMgaW5zdGFuY2VvZiBNaW5pcGFzcyB8fFxuICAgICAgICBzIGluc3RhbmNlb2YgU3RyZWFtIHx8XG4gICAgICAgIGlzUmVhZGFibGUocykgfHxcbiAgICAgICAgaXNXcml0YWJsZShzKSk7XG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBhcmd1bWVudCBpcyBhIHZhbGlkIHtAbGluayBNaW5pcGFzcy5SZWFkYWJsZX1cbiAqL1xuZXhwb3J0IGNvbnN0IGlzUmVhZGFibGUgPSAocykgPT4gISFzICYmXG4gICAgdHlwZW9mIHMgPT09ICdvYmplY3QnICYmXG4gICAgcyBpbnN0YW5jZW9mIEV2ZW50RW1pdHRlciAmJlxuICAgIHR5cGVvZiBzLnBpcGUgPT09ICdmdW5jdGlvbicgJiZcbiAgICAvLyBub2RlIGNvcmUgV3JpdGFibGUgc3RyZWFtcyBoYXZlIGEgcGlwZSgpIG1ldGhvZCwgYnV0IGl0IHRocm93c1xuICAgIHMucGlwZSAhPT0gU3RyZWFtLldyaXRhYmxlLnByb3RvdHlwZS5waXBlO1xuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYSB2YWxpZCB7QGxpbmsgTWluaXBhc3MuV3JpdGFibGV9XG4gKi9cbmV4cG9ydCBjb25zdCBpc1dyaXRhYmxlID0gKHMpID0+ICEhcyAmJlxuICAgIHR5cGVvZiBzID09PSAnb2JqZWN0JyAmJlxuICAgIHMgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIgJiZcbiAgICB0eXBlb2Ygcy53cml0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBzLmVuZCA9PT0gJ2Z1bmN0aW9uJztcbmNvbnN0IEVPRiA9IFN5bWJvbCgnRU9GJyk7XG5jb25zdCBNQVlCRV9FTUlUX0VORCA9IFN5bWJvbCgnbWF5YmVFbWl0RW5kJyk7XG5jb25zdCBFTUlUVEVEX0VORCA9IFN5bWJvbCgnZW1pdHRlZEVuZCcpO1xuY29uc3QgRU1JVFRJTkdfRU5EID0gU3ltYm9sKCdlbWl0dGluZ0VuZCcpO1xuY29uc3QgRU1JVFRFRF9FUlJPUiA9IFN5bWJvbCgnZW1pdHRlZEVycm9yJyk7XG5jb25zdCBDTE9TRUQgPSBTeW1ib2woJ2Nsb3NlZCcpO1xuY29uc3QgUkVBRCA9IFN5bWJvbCgncmVhZCcpO1xuY29uc3QgRkxVU0ggPSBTeW1ib2woJ2ZsdXNoJyk7XG5jb25zdCBGTFVTSENIVU5LID0gU3ltYm9sKCdmbHVzaENodW5rJyk7XG5jb25zdCBFTkNPRElORyA9IFN5bWJvbCgnZW5jb2RpbmcnKTtcbmNvbnN0IERFQ09ERVIgPSBTeW1ib2woJ2RlY29kZXInKTtcbmNvbnN0IEZMT1dJTkcgPSBTeW1ib2woJ2Zsb3dpbmcnKTtcbmNvbnN0IFBBVVNFRCA9IFN5bWJvbCgncGF1c2VkJyk7XG5jb25zdCBSRVNVTUUgPSBTeW1ib2woJ3Jlc3VtZScpO1xuY29uc3QgQlVGRkVSID0gU3ltYm9sKCdidWZmZXInKTtcbmNvbnN0IFBJUEVTID0gU3ltYm9sKCdwaXBlcycpO1xuY29uc3QgQlVGRkVSTEVOR1RIID0gU3ltYm9sKCdidWZmZXJMZW5ndGgnKTtcbmNvbnN0IEJVRkZFUlBVU0ggPSBTeW1ib2woJ2J1ZmZlclB1c2gnKTtcbmNvbnN0IEJVRkZFUlNISUZUID0gU3ltYm9sKCdidWZmZXJTaGlmdCcpO1xuY29uc3QgT0JKRUNUTU9ERSA9IFN5bWJvbCgnb2JqZWN0TW9kZScpO1xuLy8gaW50ZXJuYWwgZXZlbnQgd2hlbiBzdHJlYW0gaXMgZGVzdHJveWVkXG5jb25zdCBERVNUUk9ZRUQgPSBTeW1ib2woJ2Rlc3Ryb3llZCcpO1xuLy8gaW50ZXJuYWwgZXZlbnQgd2hlbiBzdHJlYW0gaGFzIGFuIGVycm9yXG5jb25zdCBFUlJPUiA9IFN5bWJvbCgnZXJyb3InKTtcbmNvbnN0IEVNSVREQVRBID0gU3ltYm9sKCdlbWl0RGF0YScpO1xuY29uc3QgRU1JVEVORCA9IFN5bWJvbCgnZW1pdEVuZCcpO1xuY29uc3QgRU1JVEVORDIgPSBTeW1ib2woJ2VtaXRFbmQyJyk7XG5jb25zdCBBU1lOQyA9IFN5bWJvbCgnYXN5bmMnKTtcbmNvbnN0IEFCT1JUID0gU3ltYm9sKCdhYm9ydCcpO1xuY29uc3QgQUJPUlRFRCA9IFN5bWJvbCgnYWJvcnRlZCcpO1xuY29uc3QgU0lHTkFMID0gU3ltYm9sKCdzaWduYWwnKTtcbmNvbnN0IERBVEFMSVNURU5FUlMgPSBTeW1ib2woJ2RhdGFMaXN0ZW5lcnMnKTtcbmNvbnN0IERJU0NBUkRFRCA9IFN5bWJvbCgnZGlzY2FyZGVkJyk7XG5jb25zdCBkZWZlciA9IChmbikgPT4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmbik7XG5jb25zdCBub2RlZmVyID0gKGZuKSA9PiBmbigpO1xuY29uc3QgaXNFbmRpc2ggPSAoZXYpID0+IGV2ID09PSAnZW5kJyB8fCBldiA9PT0gJ2ZpbmlzaCcgfHwgZXYgPT09ICdwcmVmaW5pc2gnO1xuY29uc3QgaXNBcnJheUJ1ZmZlckxpa2UgPSAoYikgPT4gYiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8XG4gICAgKCEhYiAmJlxuICAgICAgICB0eXBlb2YgYiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgYi5jb25zdHJ1Y3RvciAmJlxuICAgICAgICBiLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdBcnJheUJ1ZmZlcicgJiZcbiAgICAgICAgYi5ieXRlTGVuZ3RoID49IDApO1xuY29uc3QgaXNBcnJheUJ1ZmZlclZpZXcgPSAoYikgPT4gIUJ1ZmZlci5pc0J1ZmZlcihiKSAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcoYik7XG4vKipcbiAqIEludGVybmFsIGNsYXNzIHJlcHJlc2VudGluZyBhIHBpcGUgdG8gYSBkZXN0aW5hdGlvbiBzdHJlYW0uXG4gKlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIFBpcGUge1xuICAgIHNyYztcbiAgICBkZXN0O1xuICAgIG9wdHM7XG4gICAgb25kcmFpbjtcbiAgICBjb25zdHJ1Y3RvcihzcmMsIGRlc3QsIG9wdHMpIHtcbiAgICAgICAgdGhpcy5zcmMgPSBzcmM7XG4gICAgICAgIHRoaXMuZGVzdCA9IGRlc3Q7XG4gICAgICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgICAgIHRoaXMub25kcmFpbiA9ICgpID0+IHNyY1tSRVNVTUVdKCk7XG4gICAgICAgIHRoaXMuZGVzdC5vbignZHJhaW4nLCB0aGlzLm9uZHJhaW4pO1xuICAgIH1cbiAgICB1bnBpcGUoKSB7XG4gICAgICAgIHRoaXMuZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCB0aGlzLm9uZHJhaW4pO1xuICAgIH1cbiAgICAvLyBvbmx5IGhlcmUgZm9yIHRoZSBwcm90b3R5cGVcbiAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICBwcm94eUVycm9ycyhfZXIpIHsgfVxuICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgZW5kKCkge1xuICAgICAgICB0aGlzLnVucGlwZSgpO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmVuZClcbiAgICAgICAgICAgIHRoaXMuZGVzdC5lbmQoKTtcbiAgICB9XG59XG4vKipcbiAqIEludGVybmFsIGNsYXNzIHJlcHJlc2VudGluZyBhIHBpcGUgdG8gYSBkZXN0aW5hdGlvbiBzdHJlYW0gd2hlcmVcbiAqIGVycm9ycyBhcmUgcHJveGllZC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgUGlwZVByb3h5RXJyb3JzIGV4dGVuZHMgUGlwZSB7XG4gICAgdW5waXBlKCkge1xuICAgICAgICB0aGlzLnNyYy5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCB0aGlzLnByb3h5RXJyb3JzKTtcbiAgICAgICAgc3VwZXIudW5waXBlKCk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHNyYywgZGVzdCwgb3B0cykge1xuICAgICAgICBzdXBlcihzcmMsIGRlc3QsIG9wdHMpO1xuICAgICAgICB0aGlzLnByb3h5RXJyb3JzID0gKGVyKSA9PiB0aGlzLmRlc3QuZW1pdCgnZXJyb3InLCBlcik7XG4gICAgICAgIHNyYy5vbignZXJyb3InLCB0aGlzLnByb3h5RXJyb3JzKTtcbiAgICB9XG59XG5jb25zdCBpc09iamVjdE1vZGVPcHRpb25zID0gKG8pID0+ICEhby5vYmplY3RNb2RlO1xuY29uc3QgaXNFbmNvZGluZ09wdGlvbnMgPSAobykgPT4gIW8ub2JqZWN0TW9kZSAmJiAhIW8uZW5jb2RpbmcgJiYgby5lbmNvZGluZyAhPT0gJ2J1ZmZlcic7XG4vKipcbiAqIE1haW4gZXhwb3J0LCB0aGUgTWluaXBhc3MgY2xhc3NcbiAqXG4gKiBgUlR5cGVgIGlzIHRoZSB0eXBlIG9mIGRhdGEgZW1pdHRlZCwgZGVmYXVsdHMgdG8gQnVmZmVyXG4gKlxuICogYFdUeXBlYCBpcyB0aGUgdHlwZSBvZiBkYXRhIHRvIGJlIHdyaXR0ZW4sIGlmIFJUeXBlIGlzIGJ1ZmZlciBvciBzdHJpbmcsXG4gKiB0aGVuIGFueSB7QGxpbmsgTWluaXBhc3MuQ29udGlndW91c0RhdGF9IGlzIGFsbG93ZWQuXG4gKlxuICogYEV2ZW50c2AgaXMgdGhlIHNldCBvZiBldmVudCBoYW5kbGVyIHNpZ25hdHVyZXMgdGhhdCB0aGlzIG9iamVjdFxuICogd2lsbCBlbWl0LCBzZWUge0BsaW5rIE1pbmlwYXNzLkV2ZW50c31cbiAqL1xuZXhwb3J0IGNsYXNzIE1pbmlwYXNzIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgICBbRkxPV0lOR10gPSBmYWxzZTtcbiAgICBbUEFVU0VEXSA9IGZhbHNlO1xuICAgIFtQSVBFU10gPSBbXTtcbiAgICBbQlVGRkVSXSA9IFtdO1xuICAgIFtPQkpFQ1RNT0RFXTtcbiAgICBbRU5DT0RJTkddO1xuICAgIFtBU1lOQ107XG4gICAgW0RFQ09ERVJdO1xuICAgIFtFT0ZdID0gZmFsc2U7XG4gICAgW0VNSVRURURfRU5EXSA9IGZhbHNlO1xuICAgIFtFTUlUVElOR19FTkRdID0gZmFsc2U7XG4gICAgW0NMT1NFRF0gPSBmYWxzZTtcbiAgICBbRU1JVFRFRF9FUlJPUl0gPSBudWxsO1xuICAgIFtCVUZGRVJMRU5HVEhdID0gMDtcbiAgICBbREVTVFJPWUVEXSA9IGZhbHNlO1xuICAgIFtTSUdOQUxdO1xuICAgIFtBQk9SVEVEXSA9IGZhbHNlO1xuICAgIFtEQVRBTElTVEVORVJTXSA9IDA7XG4gICAgW0RJU0NBUkRFRF0gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBzdHJlYW0gY2FuIGJlIHdyaXR0ZW5cbiAgICAgKi9cbiAgICB3cml0YWJsZSA9IHRydWU7XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgc3RyZWFtIGNhbiBiZSByZWFkXG4gICAgICovXG4gICAgcmVhZGFibGUgPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIElmIGBSVHlwZWAgaXMgQnVmZmVyLCB0aGVuIG9wdGlvbnMgZG8gbm90IG5lZWQgdG8gYmUgcHJvdmlkZWQuXG4gICAgICogT3RoZXJ3aXNlLCBhbiBvcHRpb25zIG9iamVjdCBtdXN0IGJlIHByb3ZpZGVkIHRvIHNwZWNpZnkgZWl0aGVyXG4gICAgICoge0BsaW5rIE1pbmlwYXNzLlNoYXJlZE9wdGlvbnMub2JqZWN0TW9kZX0gb3JcbiAgICAgKiB7QGxpbmsgTWluaXBhc3MuU2hhcmVkT3B0aW9ucy5lbmNvZGluZ30sIGFzIGFwcHJvcHJpYXRlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChhcmdzWzBdIHx8XG4gICAgICAgICAgICB7fSk7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGlmIChvcHRpb25zLm9iamVjdE1vZGUgJiYgdHlwZW9mIG9wdGlvbnMuZW5jb2RpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFbmNvZGluZyBhbmQgb2JqZWN0TW9kZSBtYXkgbm90IGJlIHVzZWQgdG9nZXRoZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNPYmplY3RNb2RlT3B0aW9ucyhvcHRpb25zKSkge1xuICAgICAgICAgICAgdGhpc1tPQkpFQ1RNT0RFXSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzW0VOQ09ESU5HXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNFbmNvZGluZ09wdGlvbnMob3B0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXNbRU5DT0RJTkddID0gb3B0aW9ucy5lbmNvZGluZztcbiAgICAgICAgICAgIHRoaXNbT0JKRUNUTU9ERV0gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXNbT0JKRUNUTU9ERV0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXNbRU5DT0RJTkddID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzW0FTWU5DXSA9ICEhb3B0aW9ucy5hc3luYztcbiAgICAgICAgdGhpc1tERUNPREVSXSA9IHRoaXNbRU5DT0RJTkddXG4gICAgICAgICAgICA/IG5ldyBTdHJpbmdEZWNvZGVyKHRoaXNbRU5DT0RJTkddKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAvL0B0cy1pZ25vcmUgLSBwcml2YXRlIG9wdGlvbiBmb3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZGVidWdFeHBvc2VCdWZmZXIgPT09IHRydWUpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYnVmZmVyJywgeyBnZXQ6ICgpID0+IHRoaXNbQlVGRkVSXSB9KTtcbiAgICAgICAgfVxuICAgICAgICAvL0B0cy1pZ25vcmUgLSBwcml2YXRlIG9wdGlvbiBmb3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZGVidWdFeHBvc2VQaXBlcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdwaXBlcycsIHsgZ2V0OiAoKSA9PiB0aGlzW1BJUEVTXSB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHNpZ25hbCB9ID0gb3B0aW9ucztcbiAgICAgICAgaWYgKHNpZ25hbCkge1xuICAgICAgICAgICAgdGhpc1tTSUdOQUxdID0gc2lnbmFsO1xuICAgICAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tBQk9SVF0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+IHRoaXNbQUJPUlRdKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgb2YgZGF0YSBzdG9yZWQgaW4gdGhlIGJ1ZmZlciB3YWl0aW5nIHRvIGJlIHJlYWQuXG4gICAgICpcbiAgICAgKiBGb3IgQnVmZmVyIHN0cmluZ3MsIHRoaXMgd2lsbCBiZSB0aGUgdG90YWwgYnl0ZSBsZW5ndGguXG4gICAgICogRm9yIHN0cmluZyBlbmNvZGluZyBzdHJlYW1zLCB0aGlzIHdpbGwgYmUgdGhlIHN0cmluZyBjaGFyYWN0ZXIgbGVuZ3RoLFxuICAgICAqIGFjY29yZGluZyB0byBKYXZhU2NyaXB0J3MgYHN0cmluZy5sZW5ndGhgIGxvZ2ljLlxuICAgICAqIEZvciBvYmplY3RNb2RlIHN0cmVhbXMsIHRoaXMgaXMgYSBjb3VudCBvZiB0aGUgaXRlbXMgd2FpdGluZyB0byBiZVxuICAgICAqIGVtaXR0ZWQuXG4gICAgICovXG4gICAgZ2V0IGJ1ZmZlckxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbQlVGRkVSTEVOR1RIXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGBCdWZmZXJFbmNvZGluZ2AgY3VycmVudGx5IGluIHVzZSwgb3IgYG51bGxgXG4gICAgICovXG4gICAgZ2V0IGVuY29kaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tFTkNPRElOR107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIC0gVGhpcyBpcyBhIHJlYWQgb25seSBwcm9wZXJ0eVxuICAgICAqL1xuICAgIHNldCBlbmNvZGluZyhfZW5jKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb2RpbmcgbXVzdCBiZSBzZXQgYXQgaW5zdGFudGlhdGlvbiB0aW1lJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIC0gRW5jb2RpbmcgbWF5IG9ubHkgYmUgc2V0IGF0IGluc3RhbnRpYXRpb24gdGltZVxuICAgICAqL1xuICAgIHNldEVuY29kaW5nKF9lbmMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvZGluZyBtdXN0IGJlIHNldCBhdCBpbnN0YW50aWF0aW9uIHRpbWUnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJ1ZSBpZiB0aGlzIGlzIGFuIG9iamVjdE1vZGUgc3RyZWFtXG4gICAgICovXG4gICAgZ2V0IG9iamVjdE1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW09CSkVDVE1PREVdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCAtIFRoaXMgaXMgYSByZWFkLW9ubHkgcHJvcGVydHlcbiAgICAgKi9cbiAgICBzZXQgb2JqZWN0TW9kZShfb20pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvYmplY3RNb2RlIG11c3QgYmUgc2V0IGF0IGluc3RhbnRpYXRpb24gdGltZScpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoaXMgaXMgYW4gYXN5bmMgc3RyZWFtXG4gICAgICovXG4gICAgZ2V0IFsnYXN5bmMnXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbQVNZTkNdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSB0byBtYWtlIHRoaXMgc3RyZWFtIGFzeW5jLlxuICAgICAqXG4gICAgICogT25jZSBzZXQsIGl0IGNhbm5vdCBiZSB1bnNldCwgYXMgdGhpcyB3b3VsZCBwb3RlbnRpYWxseSBjYXVzZSBpbmNvcnJlY3RcbiAgICAgKiBiZWhhdmlvci4gIEllLCBhIHN5bmMgc3RyZWFtIGNhbiBiZSBtYWRlIGFzeW5jLCBidXQgYW4gYXN5bmMgc3RyZWFtXG4gICAgICogY2Fubm90IGJlIHNhZmVseSBtYWRlIHN5bmMuXG4gICAgICovXG4gICAgc2V0IFsnYXN5bmMnXShhKSB7XG4gICAgICAgIHRoaXNbQVNZTkNdID0gdGhpc1tBU1lOQ10gfHwgISFhO1xuICAgIH1cbiAgICAvLyBkcm9wIGV2ZXJ5dGhpbmcgYW5kIGdldCBvdXQgb2YgdGhlIGZsb3cgY29tcGxldGVseVxuICAgIFtBQk9SVF0oKSB7XG4gICAgICAgIHRoaXNbQUJPUlRFRF0gPSB0cnVlO1xuICAgICAgICB0aGlzLmVtaXQoJ2Fib3J0JywgdGhpc1tTSUdOQUxdPy5yZWFzb24pO1xuICAgICAgICB0aGlzLmRlc3Ryb3kodGhpc1tTSUdOQUxdPy5yZWFzb24pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUcnVlIGlmIHRoZSBzdHJlYW0gaGFzIGJlZW4gYWJvcnRlZC5cbiAgICAgKi9cbiAgICBnZXQgYWJvcnRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbQUJPUlRFRF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE5vLW9wIHNldHRlci4gU3RyZWFtIGFib3J0ZWQgc3RhdHVzIGlzIHNldCB2aWEgdGhlIEFib3J0U2lnbmFsIHByb3ZpZGVkXG4gICAgICogaW4gdGhlIGNvbnN0cnVjdG9yIG9wdGlvbnMuXG4gICAgICovXG4gICAgc2V0IGFib3J0ZWQoXykgeyB9XG4gICAgd3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICAgICAgICBpZiAodGhpc1tBQk9SVEVEXSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXNbRU9GXSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignd3JpdGUgYWZ0ZXIgZW5kJyk7XG4gICAgICAgIGlmICh0aGlzW0RFU1RST1lFRF0pIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBPYmplY3QuYXNzaWduKG5ldyBFcnJvcignQ2Fubm90IGNhbGwgd3JpdGUgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCcpLCB7IGNvZGU6ICdFUlJfU1RSRUFNX0RFU1RST1lFRCcgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2IgPSBlbmNvZGluZztcbiAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0ZjgnO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZW5jb2RpbmcpXG4gICAgICAgICAgICBlbmNvZGluZyA9ICd1dGY4JztcbiAgICAgICAgY29uc3QgZm4gPSB0aGlzW0FTWU5DXSA/IGRlZmVyIDogbm9kZWZlcjtcbiAgICAgICAgLy8gY29udmVydCBhcnJheSBidWZmZXJzIGFuZCB0eXBlZCBhcnJheSB2aWV3cyBpbnRvIGJ1ZmZlcnNcbiAgICAgICAgLy8gYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLCB3ZSBtYXkgd2FudCB0byBkbyB0aGUgb3Bwb3NpdGUhXG4gICAgICAgIC8vIGxlYXZlIHN0cmluZ3MgYW5kIGJ1ZmZlcnMgYXMtaXNcbiAgICAgICAgLy8gYW55dGhpbmcgaXMgb25seSBhbGxvd2VkIGlmIGluIG9iamVjdCBtb2RlLCBzbyB0aHJvd1xuICAgICAgICBpZiAoIXRoaXNbT0JKRUNUTU9ERV0gJiYgIUJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpIHtcbiAgICAgICAgICAgIGlmIChpc0FycmF5QnVmZmVyVmlldyhjaHVuaykpIHtcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgLSBzaW5mdWwgdW5zYWZlIHR5cGUgY2hhbmdpbmdcbiAgICAgICAgICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLmJ1ZmZlciwgY2h1bmsuYnl0ZU9mZnNldCwgY2h1bmsuYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0FycmF5QnVmZmVyTGlrZShjaHVuaykpIHtcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgLSBzaW5mdWwgdW5zYWZlIHR5cGUgY2hhbmdpbmdcbiAgICAgICAgICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjaHVuayAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vbi1jb250aWd1b3VzIGRhdGEgd3JpdHRlbiB0byBub24tb2JqZWN0TW9kZSBzdHJlYW0nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBoYW5kbGUgb2JqZWN0IG1vZGUgdXAgZnJvbnQsIHNpbmNlIGl0J3Mgc2ltcGxlclxuICAgICAgICAvLyB0aGlzIHlpZWxkcyBiZXR0ZXIgcGVyZm9ybWFuY2UsIGZld2VyIGNoZWNrcyBsYXRlci5cbiAgICAgICAgaWYgKHRoaXNbT0JKRUNUTU9ERV0pIHtcbiAgICAgICAgICAgIC8vIG1heWJlIGltcG9zc2libGU/XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICh0aGlzW0ZMT1dJTkddICYmIHRoaXNbQlVGRkVSTEVOR1RIXSAhPT0gMClcbiAgICAgICAgICAgICAgICB0aGlzW0ZMVVNIXSh0cnVlKTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICBpZiAodGhpc1tGTE9XSU5HXSlcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJQVVNIXShjaHVuayk7XG4gICAgICAgICAgICBpZiAodGhpc1tCVUZGRVJMRU5HVEhdICE9PSAwKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncmVhZGFibGUnKTtcbiAgICAgICAgICAgIGlmIChjYilcbiAgICAgICAgICAgICAgICBmbihjYik7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1tGTE9XSU5HXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhdCB0aGlzIHBvaW50IHRoZSBjaHVuayBpcyBhIGJ1ZmZlciBvciBzdHJpbmdcbiAgICAgICAgLy8gZG9uJ3QgYnVmZmVyIGl0IHVwIG9yIHNlbmQgaXQgdG8gdGhlIGRlY29kZXJcbiAgICAgICAgaWYgKCFjaHVuay5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdyZWFkYWJsZScpO1xuICAgICAgICAgICAgaWYgKGNiKVxuICAgICAgICAgICAgICAgIGZuKGNiKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW0ZMT1dJTkddO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZhc3QtcGF0aCB3cml0aW5nIHN0cmluZ3Mgb2Ygc2FtZSBlbmNvZGluZyB0byBhIHN0cmVhbSB3aXRoXG4gICAgICAgIC8vIGFuIGVtcHR5IGJ1ZmZlciwgc2tpcHBpbmcgdGhlIGJ1ZmZlci9kZWNvZGVyIGRhbmNlXG4gICAgICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAvLyB1bmxlc3MgaXQgaXMgYSBzdHJpbmcgYWxyZWFkeSByZWFkeSBmb3IgdXMgdG8gdXNlXG4gICAgICAgICAgICAhKGVuY29kaW5nID09PSB0aGlzW0VOQ09ESU5HXSAmJiAhdGhpc1tERUNPREVSXT8ubGFzdE5lZWQpKSB7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgLSBzaW5mdWwgdW5zYWZlIHR5cGUgY2hhbmdlXG4gICAgICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykgJiYgdGhpc1tFTkNPRElOR10pIHtcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSAtIHNpbmZ1bCB1bnNhZmUgdHlwZSBjaGFuZ2VcbiAgICAgICAgICAgIGNodW5rID0gdGhpc1tERUNPREVSXS53cml0ZShjaHVuayk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90ZTogZmx1c2hpbmcgQ0FOIHBvdGVudGlhbGx5IHN3aXRjaCB1cyBpbnRvIG5vdC1mbG93aW5nIG1vZGVcbiAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10gJiYgdGhpc1tCVUZGRVJMRU5HVEhdICE9PSAwKVxuICAgICAgICAgICAgdGhpc1tGTFVTSF0odHJ1ZSk7XG4gICAgICAgIGlmICh0aGlzW0ZMT1dJTkddKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzW0JVRkZFUlBVU0hdKGNodW5rKTtcbiAgICAgICAgaWYgKHRoaXNbQlVGRkVSTEVOR1RIXSAhPT0gMClcbiAgICAgICAgICAgIHRoaXMuZW1pdCgncmVhZGFibGUnKTtcbiAgICAgICAgaWYgKGNiKVxuICAgICAgICAgICAgZm4oY2IpO1xuICAgICAgICByZXR1cm4gdGhpc1tGTE9XSU5HXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTG93LWxldmVsIGV4cGxpY2l0IHJlYWQgbWV0aG9kLlxuICAgICAqXG4gICAgICogSW4gb2JqZWN0TW9kZSwgdGhlIGFyZ3VtZW50IGlzIGlnbm9yZWQsIGFuZCBvbmUgaXRlbSBpcyByZXR1cm5lZCBpZlxuICAgICAqIGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIGBuYCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIChvciBpbiB0aGUgY2FzZSBvZiBlbmNvZGluZyBzdHJlYW1zLFxuICAgICAqIGNoYXJhY3RlcnMpIHRvIGNvbnN1bWUuIElmIGBuYCBpcyBub3QgcHJvdmlkZWQsIHRoZW4gdGhlIGVudGlyZSBidWZmZXJcbiAgICAgKiBpcyByZXR1cm5lZCwgb3IgYG51bGxgIGlzIHJldHVybmVkIGlmIG5vIGRhdGEgaXMgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogSWYgYG5gIGlzIGdyZWF0ZXIgdGhhdCB0aGUgYW1vdW50IG9mIGRhdGEgaW4gdGhlIGludGVybmFsIGJ1ZmZlcixcbiAgICAgKiB0aGVuIGBudWxsYCBpcyByZXR1cm5lZC5cbiAgICAgKi9cbiAgICByZWFkKG4pIHtcbiAgICAgICAgaWYgKHRoaXNbREVTVFJPWUVEXSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB0aGlzW0RJU0NBUkRFRF0gPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXNbQlVGRkVSTEVOR1RIXSA9PT0gMCB8fFxuICAgICAgICAgICAgbiA9PT0gMCB8fFxuICAgICAgICAgICAgKG4gJiYgbiA+IHRoaXNbQlVGRkVSTEVOR1RIXSkpIHtcbiAgICAgICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpc1tPQkpFQ1RNT0RFXSlcbiAgICAgICAgICAgIG4gPSBudWxsO1xuICAgICAgICBpZiAodGhpc1tCVUZGRVJdLmxlbmd0aCA+IDEgJiYgIXRoaXNbT0JKRUNUTU9ERV0pIHtcbiAgICAgICAgICAgIC8vIG5vdCBvYmplY3QgbW9kZSwgc28gaWYgd2UgaGF2ZSBhbiBlbmNvZGluZywgdGhlbiBSVHlwZSBpcyBzdHJpbmdcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgbXVzdCBiZSBCdWZmZXJcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSXSA9IFtcbiAgICAgICAgICAgICAgICAodGhpc1tFTkNPRElOR11cbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzW0JVRkZFUl0uam9pbignJylcbiAgICAgICAgICAgICAgICAgICAgOiBCdWZmZXIuY29uY2F0KHRoaXNbQlVGRkVSXSwgdGhpc1tCVUZGRVJMRU5HVEhdKSksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldCA9IHRoaXNbUkVBRF0obiB8fCBudWxsLCB0aGlzW0JVRkZFUl1bMF0pO1xuICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICBbUkVBRF0obiwgY2h1bmspIHtcbiAgICAgICAgaWYgKHRoaXNbT0JKRUNUTU9ERV0pXG4gICAgICAgICAgICB0aGlzW0JVRkZFUlNISUZUXSgpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBjaHVuaztcbiAgICAgICAgICAgIGlmIChuID09PSBjLmxlbmd0aCB8fCBuID09PSBudWxsKVxuICAgICAgICAgICAgICAgIHRoaXNbQlVGRkVSU0hJRlRdKCk7XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgYyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUl1bMF0gPSBjLnNsaWNlKG4pO1xuICAgICAgICAgICAgICAgIGNodW5rID0gYy5zbGljZSgwLCBuKTtcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gLT0gbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXNbQlVGRkVSXVswXSA9IGMuc3ViYXJyYXkobik7XG4gICAgICAgICAgICAgICAgY2h1bmsgPSBjLnN1YmFycmF5KDAsIG4pO1xuICAgICAgICAgICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSAtPSBuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICAgICAgaWYgKCF0aGlzW0JVRkZFUl0ubGVuZ3RoICYmICF0aGlzW0VPRl0pXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2RyYWluJyk7XG4gICAgICAgIHJldHVybiBjaHVuaztcbiAgICB9XG4gICAgZW5kKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2IgPSBjaHVuaztcbiAgICAgICAgICAgIGNodW5rID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgICAgICAgICBlbmNvZGluZyA9ICd1dGY4JztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2h1bmsgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRoaXMud3JpdGUoY2h1bmssIGVuY29kaW5nKTtcbiAgICAgICAgaWYgKGNiKVxuICAgICAgICAgICAgdGhpcy5vbmNlKCdlbmQnLCBjYik7XG4gICAgICAgIHRoaXNbRU9GXSA9IHRydWU7XG4gICAgICAgIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgICAgICAgLy8gaWYgd2UgaGF2ZW4ndCB3cml0dGVuIGFueXRoaW5nLCB0aGVuIGdvIGFoZWFkIGFuZCBlbWl0LFxuICAgICAgICAvLyBldmVuIGlmIHdlJ3JlIG5vdCByZWFkaW5nLlxuICAgICAgICAvLyB3ZSdsbCByZS1lbWl0IGlmIGEgbmV3ICdlbmQnIGxpc3RlbmVyIGlzIGFkZGVkIGFueXdheS5cbiAgICAgICAgLy8gVGhpcyBtYWtlcyBNUCBtb3JlIHN1aXRhYmxlIHRvIHdyaXRlLW9ubHkgdXNlIGNhc2VzLlxuICAgICAgICBpZiAodGhpc1tGTE9XSU5HXSB8fCAhdGhpc1tQQVVTRURdKVxuICAgICAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIGRvbid0IGxldCB0aGUgaW50ZXJuYWwgcmVzdW1lIGJlIG92ZXJ3cml0dGVuXG4gICAgW1JFU1VNRV0oKSB7XG4gICAgICAgIGlmICh0aGlzW0RFU1RST1lFRF0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghdGhpc1tEQVRBTElTVEVORVJTXSAmJiAhdGhpc1tQSVBFU10ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzW0RJU0NBUkRFRF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXNbUEFVU0VEXSA9IGZhbHNlO1xuICAgICAgICB0aGlzW0ZMT1dJTkddID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbWl0KCdyZXN1bWUnKTtcbiAgICAgICAgaWYgKHRoaXNbQlVGRkVSXS5sZW5ndGgpXG4gICAgICAgICAgICB0aGlzW0ZMVVNIXSgpO1xuICAgICAgICBlbHNlIGlmICh0aGlzW0VPRl0pXG4gICAgICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2RyYWluJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc3VtZSB0aGUgc3RyZWFtIGlmIGl0IGlzIGN1cnJlbnRseSBpbiBhIHBhdXNlZCBzdGF0ZVxuICAgICAqXG4gICAgICogSWYgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIHBpcGUgZGVzdGluYXRpb25zIG9yIGBkYXRhYCBldmVudCBsaXN0ZW5lcnMsXG4gICAgICogdGhpcyB3aWxsIHBsYWNlIHRoZSBzdHJlYW0gaW4gYSBcImRpc2NhcmRlZFwiIHN0YXRlLCB3aGVyZSBhbGwgZGF0YSB3aWxsXG4gICAgICogYmUgdGhyb3duIGF3YXkuIFRoZSBkaXNjYXJkZWQgc3RhdGUgaXMgcmVtb3ZlZCBpZiBhIHBpcGUgZGVzdGluYXRpb24gb3JcbiAgICAgKiBkYXRhIGhhbmRsZXIgaXMgYWRkZWQsIGlmIHBhdXNlKCkgaXMgY2FsbGVkLCBvciBpZiBhbnkgc3luY2hyb25vdXMgb3JcbiAgICAgKiBhc3luY2hyb25vdXMgaXRlcmF0aW9uIGlzIHN0YXJ0ZWQuXG4gICAgICovXG4gICAgcmVzdW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tSRVNVTUVdKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhdXNlIHRoZSBzdHJlYW1cbiAgICAgKi9cbiAgICBwYXVzZSgpIHtcbiAgICAgICAgdGhpc1tGTE9XSU5HXSA9IGZhbHNlO1xuICAgICAgICB0aGlzW1BBVVNFRF0gPSB0cnVlO1xuICAgICAgICB0aGlzW0RJU0NBUkRFRF0gPSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgc3RyZWFtIGhhcyBiZWVuIGZvcmNpYmx5IGRlc3Ryb3llZFxuICAgICAqL1xuICAgIGdldCBkZXN0cm95ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0RFU1RST1lFRF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlIHN0cmVhbSBpcyBjdXJyZW50bHkgaW4gYSBmbG93aW5nIHN0YXRlLCBtZWFuaW5nIHRoYXRcbiAgICAgKiBhbnkgd3JpdGVzIHdpbGwgYmUgaW1tZWRpYXRlbHkgZW1pdHRlZC5cbiAgICAgKi9cbiAgICBnZXQgZmxvd2luZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbRkxPV0lOR107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlIHN0cmVhbSBpcyBjdXJyZW50bHkgaW4gYSBwYXVzZWQgc3RhdGVcbiAgICAgKi9cbiAgICBnZXQgcGF1c2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tQQVVTRURdO1xuICAgIH1cbiAgICBbQlVGRkVSUFVTSF0oY2h1bmspIHtcbiAgICAgICAgaWYgKHRoaXNbT0JKRUNUTU9ERV0pXG4gICAgICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gKz0gMTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgdGhpc1tCVUZGRVJdLnB1c2goY2h1bmspO1xuICAgIH1cbiAgICBbQlVGRkVSU0hJRlRdKCkge1xuICAgICAgICBpZiAodGhpc1tPQkpFQ1RNT0RFXSlcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSAtPSAxO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gLT0gdGhpc1tCVUZGRVJdWzBdLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXNbQlVGRkVSXS5zaGlmdCgpO1xuICAgIH1cbiAgICBbRkxVU0hdKG5vRHJhaW4gPSBmYWxzZSkge1xuICAgICAgICBkbyB7IH0gd2hpbGUgKHRoaXNbRkxVU0hDSFVOS10odGhpc1tCVUZGRVJTSElGVF0oKSkgJiZcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSXS5sZW5ndGgpO1xuICAgICAgICBpZiAoIW5vRHJhaW4gJiYgIXRoaXNbQlVGRkVSXS5sZW5ndGggJiYgIXRoaXNbRU9GXSlcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZHJhaW4nKTtcbiAgICB9XG4gICAgW0ZMVVNIQ0hVTktdKGNodW5rKSB7XG4gICAgICAgIHRoaXMuZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICAgICAgcmV0dXJuIHRoaXNbRkxPV0lOR107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBpcGUgYWxsIGRhdGEgZW1pdHRlZCBieSB0aGlzIHN0cmVhbSBpbnRvIHRoZSBkZXN0aW5hdGlvbiBwcm92aWRlZC5cbiAgICAgKlxuICAgICAqIFRyaWdnZXJzIHRoZSBmbG93IG9mIGRhdGEuXG4gICAgICovXG4gICAgcGlwZShkZXN0LCBvcHRzKSB7XG4gICAgICAgIGlmICh0aGlzW0RFU1RST1lFRF0pXG4gICAgICAgICAgICByZXR1cm4gZGVzdDtcbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGVuZGVkID0gdGhpc1tFTUlUVEVEX0VORF07XG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgICAgICBpZiAoZGVzdCA9PT0gcHJvYy5zdGRvdXQgfHwgZGVzdCA9PT0gcHJvYy5zdGRlcnIpXG4gICAgICAgICAgICBvcHRzLmVuZCA9IGZhbHNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBvcHRzLmVuZCA9IG9wdHMuZW5kICE9PSBmYWxzZTtcbiAgICAgICAgb3B0cy5wcm94eUVycm9ycyA9ICEhb3B0cy5wcm94eUVycm9ycztcbiAgICAgICAgLy8gcGlwaW5nIGFuIGVuZGVkIHN0cmVhbSBlbmRzIGltbWVkaWF0ZWx5XG4gICAgICAgIGlmIChlbmRlZCkge1xuICAgICAgICAgICAgaWYgKG9wdHMuZW5kKVxuICAgICAgICAgICAgICAgIGRlc3QuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBcImFzXCIgaGVyZSBqdXN0IGlnbm9yZXMgdGhlIFdUeXBlLCB3aGljaCBwaXBlcyBkb24ndCBjYXJlIGFib3V0LFxuICAgICAgICAgICAgLy8gc2luY2UgdGhleSdyZSBvbmx5IGNvbnN1bWluZyBmcm9tIHVzLCBhbmQgd3JpdGluZyB0byB0aGUgZGVzdFxuICAgICAgICAgICAgdGhpc1tQSVBFU10ucHVzaCghb3B0cy5wcm94eUVycm9yc1xuICAgICAgICAgICAgICAgID8gbmV3IFBpcGUodGhpcywgZGVzdCwgb3B0cylcbiAgICAgICAgICAgICAgICA6IG5ldyBQaXBlUHJveHlFcnJvcnModGhpcywgZGVzdCwgb3B0cykpO1xuICAgICAgICAgICAgaWYgKHRoaXNbQVNZTkNdKVxuICAgICAgICAgICAgICAgIGRlZmVyKCgpID0+IHRoaXNbUkVTVU1FXSgpKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzW1JFU1VNRV0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRnVsbHkgdW5ob29rIGEgcGlwZWQgZGVzdGluYXRpb24gc3RyZWFtLlxuICAgICAqXG4gICAgICogSWYgdGhlIGRlc3RpbmF0aW9uIHN0cmVhbSB3YXMgdGhlIG9ubHkgY29uc3VtZXIgb2YgdGhpcyBzdHJlYW0gKGllLFxuICAgICAqIHRoZXJlIGFyZSBubyBvdGhlciBwaXBlZCBkZXN0aW5hdGlvbnMgb3IgYCdkYXRhJ2AgZXZlbnQgbGlzdGVuZXJzKVxuICAgICAqIHRoZW4gdGhlIGZsb3cgb2YgZGF0YSB3aWxsIHN0b3AgdW50aWwgdGhlcmUgaXMgYW5vdGhlciBjb25zdW1lciBvclxuICAgICAqIHtAbGluayBNaW5pcGFzcyNyZXN1bWV9IGlzIGV4cGxpY2l0bHkgY2FsbGVkLlxuICAgICAqL1xuICAgIHVucGlwZShkZXN0KSB7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzW1BJUEVTXS5maW5kKHAgPT4gcC5kZXN0ID09PSBkZXN0KTtcbiAgICAgICAgaWYgKHApIHtcbiAgICAgICAgICAgIGlmICh0aGlzW1BJUEVTXS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpc1tGTE9XSU5HXSAmJiB0aGlzW0RBVEFMSVNURU5FUlNdID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbRkxPV0lOR10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpc1tQSVBFU10gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzW1BJUEVTXS5zcGxpY2UodGhpc1tQSVBFU10uaW5kZXhPZihwKSwgMSk7XG4gICAgICAgICAgICBwLnVucGlwZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciB7QGxpbmsgTWluaXBhc3Mjb259XG4gICAgICovXG4gICAgYWRkTGlzdGVuZXIoZXYsIGhhbmRsZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub24oZXYsIGhhbmRsZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNb3N0bHkgaWRlbnRpY2FsIHRvIGBFdmVudEVtaXR0ZXIub25gLCB3aXRoIHRoZSBmb2xsb3dpbmdcbiAgICAgKiBiZWhhdmlvciBkaWZmZXJlbmNlcyB0byBwcmV2ZW50IGRhdGEgbG9zcyBhbmQgdW5uZWNlc3NhcnkgaGFuZ3M6XG4gICAgICpcbiAgICAgKiAtIEFkZGluZyBhICdkYXRhJyBldmVudCBoYW5kbGVyIHdpbGwgdHJpZ2dlciB0aGUgZmxvdyBvZiBkYXRhXG4gICAgICpcbiAgICAgKiAtIEFkZGluZyBhICdyZWFkYWJsZScgZXZlbnQgaGFuZGxlciB3aGVuIHRoZXJlIGlzIGRhdGEgd2FpdGluZyB0byBiZSByZWFkXG4gICAgICogICB3aWxsIGNhdXNlICdyZWFkYWJsZScgdG8gYmUgZW1pdHRlZCBpbW1lZGlhdGVseS5cbiAgICAgKlxuICAgICAqIC0gQWRkaW5nIGFuICdlbmRpc2gnIGV2ZW50IGhhbmRsZXIgKCdlbmQnLCAnZmluaXNoJywgZXRjLikgd2hpY2ggaGFzXG4gICAgICogICBhbHJlYWR5IHBhc3NlZCB3aWxsIGNhdXNlIHRoZSBldmVudCB0byBiZSBlbWl0dGVkIGltbWVkaWF0ZWx5IGFuZCBhbGxcbiAgICAgKiAgIGhhbmRsZXJzIHJlbW92ZWQuXG4gICAgICpcbiAgICAgKiAtIEFkZGluZyBhbiAnZXJyb3InIGV2ZW50IGhhbmRsZXIgYWZ0ZXIgYW4gZXJyb3IgaGFzIGJlZW4gZW1pdHRlZCB3aWxsXG4gICAgICogICBjYXVzZSB0aGUgZXZlbnQgdG8gYmUgcmUtZW1pdHRlZCBpbW1lZGlhdGVseSB3aXRoIHRoZSBlcnJvciBwcmV2aW91c2x5XG4gICAgICogICByYWlzZWQuXG4gICAgICovXG4gICAgb24oZXYsIGhhbmRsZXIpIHtcbiAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIub24oZXYsIGhhbmRsZXIpO1xuICAgICAgICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzW0RBVEFMSVNURU5FUlNdKys7XG4gICAgICAgICAgICBpZiAoIXRoaXNbUElQRVNdLmxlbmd0aCAmJiAhdGhpc1tGTE9XSU5HXSkge1xuICAgICAgICAgICAgICAgIHRoaXNbUkVTVU1FXSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAncmVhZGFibGUnICYmIHRoaXNbQlVGRkVSTEVOR1RIXSAhPT0gMCkge1xuICAgICAgICAgICAgc3VwZXIuZW1pdCgncmVhZGFibGUnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0VuZGlzaChldikgJiYgdGhpc1tFTUlUVEVEX0VORF0pIHtcbiAgICAgICAgICAgIHN1cGVyLmVtaXQoZXYpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoZXYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAnZXJyb3InICYmIHRoaXNbRU1JVFRFRF9FUlJPUl0pIHtcbiAgICAgICAgICAgIGNvbnN0IGggPSBoYW5kbGVyO1xuICAgICAgICAgICAgaWYgKHRoaXNbQVNZTkNdKVxuICAgICAgICAgICAgICAgIGRlZmVyKCgpID0+IGguY2FsbCh0aGlzLCB0aGlzW0VNSVRURURfRVJST1JdKSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgaC5jYWxsKHRoaXMsIHRoaXNbRU1JVFRFRF9FUlJPUl0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciB7QGxpbmsgTWluaXBhc3Mjb2ZmfVxuICAgICAqL1xuICAgIHJlbW92ZUxpc3RlbmVyKGV2LCBoYW5kbGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9mZihldiwgaGFuZGxlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1vc3RseSBpZGVudGljYWwgdG8gYEV2ZW50RW1pdHRlci5vZmZgXG4gICAgICpcbiAgICAgKiBJZiBhICdkYXRhJyBldmVudCBoYW5kbGVyIGlzIHJlbW92ZWQsIGFuZCBpdCB3YXMgdGhlIGxhc3QgY29uc3VtZXJcbiAgICAgKiAoaWUsIHRoZXJlIGFyZSBubyBwaXBlIGRlc3RpbmF0aW9ucyBvciBvdGhlciAnZGF0YScgZXZlbnQgbGlzdGVuZXJzKSxcbiAgICAgKiB0aGVuIHRoZSBmbG93IG9mIGRhdGEgd2lsbCBzdG9wIHVudGlsIHRoZXJlIGlzIGFub3RoZXIgY29uc3VtZXIgb3JcbiAgICAgKiB7QGxpbmsgTWluaXBhc3MjcmVzdW1lfSBpcyBleHBsaWNpdGx5IGNhbGxlZC5cbiAgICAgKi9cbiAgICBvZmYoZXYsIGhhbmRsZXIpIHtcbiAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIub2ZmKGV2LCBoYW5kbGVyKTtcbiAgICAgICAgLy8gaWYgd2UgcHJldmlvdXNseSBoYWQgbGlzdGVuZXJzLCBhbmQgbm93IHdlIGRvbid0LCBhbmQgd2UgZG9uJ3RcbiAgICAgICAgLy8gaGF2ZSBhbnkgcGlwZXMsIHRoZW4gc3RvcCB0aGUgZmxvdywgdW5sZXNzIGl0J3MgYmVlbiBleHBsaWNpdGx5XG4gICAgICAgIC8vIHB1dCBpbiBhIGRpc2NhcmRlZCBmbG93aW5nIHN0YXRlIHZpYSBzdHJlYW0ucmVzdW1lKCkuXG4gICAgICAgIGlmIChldiA9PT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICB0aGlzW0RBVEFMSVNURU5FUlNdID0gdGhpcy5saXN0ZW5lcnMoJ2RhdGEnKS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAodGhpc1tEQVRBTElTVEVORVJTXSA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICF0aGlzW0RJU0NBUkRFRF0gJiZcbiAgICAgICAgICAgICAgICAhdGhpc1tQSVBFU10ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tGTE9XSU5HXSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1vc3RseSBpZGVudGljYWwgdG8gYEV2ZW50RW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnNgXG4gICAgICpcbiAgICAgKiBJZiBhbGwgJ2RhdGEnIGV2ZW50IGhhbmRsZXJzIGFyZSByZW1vdmVkLCBhbmQgdGhleSB3ZXJlIHRoZSBsYXN0IGNvbnN1bWVyXG4gICAgICogKGllLCB0aGVyZSBhcmUgbm8gcGlwZSBkZXN0aW5hdGlvbnMpLCB0aGVuIHRoZSBmbG93IG9mIGRhdGEgd2lsbCBzdG9wXG4gICAgICogdW50aWwgdGhlcmUgaXMgYW5vdGhlciBjb25zdW1lciBvciB7QGxpbmsgTWluaXBhc3MjcmVzdW1lfSBpcyBleHBsaWNpdGx5XG4gICAgICogY2FsbGVkLlxuICAgICAqL1xuICAgIHJlbW92ZUFsbExpc3RlbmVycyhldikge1xuICAgICAgICBjb25zdCByZXQgPSBzdXBlci5yZW1vdmVBbGxMaXN0ZW5lcnMoZXYpO1xuICAgICAgICBpZiAoZXYgPT09ICdkYXRhJyB8fCBldiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzW0RBVEFMSVNURU5FUlNdID0gMDtcbiAgICAgICAgICAgIGlmICghdGhpc1tESVNDQVJERURdICYmICF0aGlzW1BJUEVTXS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzW0ZMT1dJTkddID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgJ2VuZCcgZXZlbnQgaGFzIGJlZW4gZW1pdHRlZFxuICAgICAqL1xuICAgIGdldCBlbWl0dGVkRW5kKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tFTUlUVEVEX0VORF07XG4gICAgfVxuICAgIFtNQVlCRV9FTUlUX0VORF0oKSB7XG4gICAgICAgIGlmICghdGhpc1tFTUlUVElOR19FTkRdICYmXG4gICAgICAgICAgICAhdGhpc1tFTUlUVEVEX0VORF0gJiZcbiAgICAgICAgICAgICF0aGlzW0RFU1RST1lFRF0gJiZcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSXS5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgIHRoaXNbRU9GXSkge1xuICAgICAgICAgICAgdGhpc1tFTUlUVElOR19FTkRdID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZW5kJyk7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3ByZWZpbmlzaCcpO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdmaW5pc2gnKTtcbiAgICAgICAgICAgIGlmICh0aGlzW0NMT1NFRF0pXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdjbG9zZScpO1xuICAgICAgICAgICAgdGhpc1tFTUlUVElOR19FTkRdID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogTW9zdGx5IGlkZW50aWNhbCB0byBgRXZlbnRFbWl0dGVyLmVtaXRgLCB3aXRoIHRoZSBmb2xsb3dpbmdcbiAgICAgKiBiZWhhdmlvciBkaWZmZXJlbmNlcyB0byBwcmV2ZW50IGRhdGEgbG9zcyBhbmQgdW5uZWNlc3NhcnkgaGFuZ3M6XG4gICAgICpcbiAgICAgKiBJZiB0aGUgc3RyZWFtIGhhcyBiZWVuIGRlc3Ryb3llZCwgYW5kIHRoZSBldmVudCBpcyBzb21ldGhpbmcgb3RoZXJcbiAgICAgKiB0aGFuICdjbG9zZScgb3IgJ2Vycm9yJywgdGhlbiBgZmFsc2VgIGlzIHJldHVybmVkIGFuZCBubyBoYW5kbGVyc1xuICAgICAqIGFyZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZXZlbnQgaXMgJ2VuZCcsIGFuZCBoYXMgYWxyZWFkeSBiZWVuIGVtaXR0ZWQsIHRoZW4gdGhlIGV2ZW50XG4gICAgICogaXMgaWdub3JlZC4gSWYgdGhlIHN0cmVhbSBpcyBpbiBhIHBhdXNlZCBvciBub24tZmxvd2luZyBzdGF0ZSwgdGhlblxuICAgICAqIHRoZSBldmVudCB3aWxsIGJlIGRlZmVycmVkIHVudGlsIGRhdGEgZmxvdyByZXN1bWVzLiBJZiB0aGUgc3RyZWFtIGlzXG4gICAgICogYXN5bmMsIHRoZW4gaGFuZGxlcnMgd2lsbCBiZSBjYWxsZWQgb24gdGhlIG5leHQgdGljayByYXRoZXIgdGhhblxuICAgICAqIGltbWVkaWF0ZWx5LlxuICAgICAqXG4gICAgICogSWYgdGhlIGV2ZW50IGlzICdjbG9zZScsIGFuZCAnZW5kJyBoYXMgbm90IHlldCBiZWVuIGVtaXR0ZWQsIHRoZW5cbiAgICAgKiB0aGUgZXZlbnQgd2lsbCBiZSBkZWZlcnJlZCB1bnRpbCBhZnRlciAnZW5kJyBpcyBlbWl0dGVkLlxuICAgICAqXG4gICAgICogSWYgdGhlIGV2ZW50IGlzICdlcnJvcicsIGFuZCBhbiBBYm9ydFNpZ25hbCB3YXMgcHJvdmlkZWQgZm9yIHRoZSBzdHJlYW0sXG4gICAgICogYW5kIHRoZXJlIGFyZSBubyBsaXN0ZW5lcnMsIHRoZW4gdGhlIGV2ZW50IGlzIGlnbm9yZWQsIG1hdGNoaW5nIHRoZVxuICAgICAqIGJlaGF2aW9yIG9mIG5vZGUgY29yZSBzdHJlYW1zIGluIHRoZSBwcmVzZW5zZSBvZiBhbiBBYm9ydFNpZ25hbC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBldmVudCBpcyAnZmluaXNoJyBvciAncHJlZmluaXNoJywgdGhlbiBhbGwgbGlzdGVuZXJzIHdpbGwgYmVcbiAgICAgKiByZW1vdmVkIGFmdGVyIGVtaXR0aW5nIHRoZSBldmVudCwgdG8gcHJldmVudCBkb3VibGUtZmlyaW5nLlxuICAgICAqL1xuICAgIGVtaXQoZXYsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGFyZ3NbMF07XG4gICAgICAgIC8vIGVycm9yIGFuZCBjbG9zZSBhcmUgb25seSBldmVudHMgYWxsb3dlZCBhZnRlciBjYWxsaW5nIGRlc3Ryb3koKVxuICAgICAgICBpZiAoZXYgIT09ICdlcnJvcicgJiZcbiAgICAgICAgICAgIGV2ICE9PSAnY2xvc2UnICYmXG4gICAgICAgICAgICBldiAhPT0gREVTVFJPWUVEICYmXG4gICAgICAgICAgICB0aGlzW0RFU1RST1lFRF0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRoaXNbT0JKRUNUTU9ERV0gJiYgIWRhdGFcbiAgICAgICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICAgICAgOiB0aGlzW0FTWU5DXVxuICAgICAgICAgICAgICAgICAgICA/IChkZWZlcigoKSA9PiB0aGlzW0VNSVREQVRBXShkYXRhKSksIHRydWUpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpc1tFTUlUREFUQV0oZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdlbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1tFTUlURU5EXSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAnY2xvc2UnKSB7XG4gICAgICAgICAgICB0aGlzW0NMT1NFRF0gPSB0cnVlO1xuICAgICAgICAgICAgLy8gZG9uJ3QgZW1pdCBjbG9zZSBiZWZvcmUgJ2VuZCcgYW5kICdmaW5pc2gnXG4gICAgICAgICAgICBpZiAoIXRoaXNbRU1JVFRFRF9FTkRdICYmICF0aGlzW0RFU1RST1lFRF0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIuZW1pdCgnY2xvc2UnKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdjbG9zZScpO1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgdGhpc1tFTUlUVEVEX0VSUk9SXSA9IGRhdGE7XG4gICAgICAgICAgICBzdXBlci5lbWl0KEVSUk9SLCBkYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9ICF0aGlzW1NJR05BTF0gfHwgdGhpcy5saXN0ZW5lcnMoJ2Vycm9yJykubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyBzdXBlci5lbWl0KCdlcnJvcicsIGRhdGEpXG4gICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAncmVzdW1lJykge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIuZW1pdCgncmVzdW1lJyk7XG4gICAgICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ2ZpbmlzaCcgfHwgZXYgPT09ICdwcmVmaW5pc2gnKSB7XG4gICAgICAgICAgICBjb25zdCByZXQgPSBzdXBlci5lbWl0KGV2KTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGV2KTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29tZSBvdGhlciB1bmtub3duIGV2ZW50XG4gICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLmVtaXQoZXYsIC4uLmFyZ3MpO1xuICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICBbRU1JVERBVEFdKGRhdGEpIHtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXNbUElQRVNdKSB7XG4gICAgICAgICAgICBpZiAocC5kZXN0LndyaXRlKGRhdGEpID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0ID0gdGhpc1tESVNDQVJERURdID8gZmFsc2UgOiBzdXBlci5lbWl0KCdkYXRhJywgZGF0YSk7XG4gICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIFtFTUlURU5EXSgpIHtcbiAgICAgICAgaWYgKHRoaXNbRU1JVFRFRF9FTkRdKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzW0VNSVRURURfRU5EXSA9IHRydWU7XG4gICAgICAgIHRoaXMucmVhZGFibGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRoaXNbQVNZTkNdXG4gICAgICAgICAgICA/IChkZWZlcigoKSA9PiB0aGlzW0VNSVRFTkQyXSgpKSwgdHJ1ZSlcbiAgICAgICAgICAgIDogdGhpc1tFTUlURU5EMl0oKTtcbiAgICB9XG4gICAgW0VNSVRFTkQyXSgpIHtcbiAgICAgICAgaWYgKHRoaXNbREVDT0RFUl0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzW0RFQ09ERVJdLmVuZCgpO1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpc1tQSVBFU10pIHtcbiAgICAgICAgICAgICAgICAgICAgcC5kZXN0LndyaXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXNbRElTQ0FSREVEXSlcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIuZW1pdCgnZGF0YScsIGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzW1BJUEVTXSkge1xuICAgICAgICAgICAgcC5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXQgPSBzdXBlci5lbWl0KCdlbmQnKTtcbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2VuZCcpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2YgYWxsIGVtaXR0ZWQgZGF0YSBvbmNlXG4gICAgICogdGhlIHN0cmVhbSBlbmRzLlxuICAgICAqL1xuICAgIGFzeW5jIGNvbGxlY3QoKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IE9iamVjdC5hc3NpZ24oW10sIHtcbiAgICAgICAgICAgIGRhdGFMZW5ndGg6IDAsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXRoaXNbT0JKRUNUTU9ERV0pXG4gICAgICAgICAgICBidWYuZGF0YUxlbmd0aCA9IDA7XG4gICAgICAgIC8vIHNldCB0aGUgcHJvbWlzZSBmaXJzdCwgaW4gY2FzZSBhbiBlcnJvciBpcyByYWlzZWRcbiAgICAgICAgLy8gYnkgdHJpZ2dlcmluZyB0aGUgZmxvdyBoZXJlLlxuICAgICAgICBjb25zdCBwID0gdGhpcy5wcm9taXNlKCk7XG4gICAgICAgIHRoaXMub24oJ2RhdGEnLCBjID0+IHtcbiAgICAgICAgICAgIGJ1Zi5wdXNoKGMpO1xuICAgICAgICAgICAgaWYgKCF0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgICAgIGJ1Zi5kYXRhTGVuZ3RoICs9IGMubGVuZ3RoO1xuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgcDtcbiAgICAgICAgcmV0dXJuIGJ1ZjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjb25jYXRlbmF0aW9uIG9mIGFsbCBlbWl0dGVkIGRhdGFcbiAgICAgKiBvbmNlIHRoZSBzdHJlYW0gZW5kcy5cbiAgICAgKlxuICAgICAqIE5vdCBhbGxvd2VkIG9uIG9iamVjdE1vZGUgc3RyZWFtcy5cbiAgICAgKi9cbiAgICBhc3luYyBjb25jYXQoKSB7XG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBjb25jYXQgaW4gb2JqZWN0TW9kZScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJ1ZiA9IGF3YWl0IHRoaXMuY29sbGVjdCgpO1xuICAgICAgICByZXR1cm4gKHRoaXNbRU5DT0RJTkddXG4gICAgICAgICAgICA/IGJ1Zi5qb2luKCcnKVxuICAgICAgICAgICAgOiBCdWZmZXIuY29uY2F0KGJ1ZiwgYnVmLmRhdGFMZW5ndGgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgdm9pZCBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgc3RyZWFtIGVuZHMuXG4gICAgICovXG4gICAgYXN5bmMgcHJvbWlzZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMub24oREVTVFJPWUVELCAoKSA9PiByZWplY3QobmV3IEVycm9yKCdzdHJlYW0gZGVzdHJveWVkJykpKTtcbiAgICAgICAgICAgIHRoaXMub24oJ2Vycm9yJywgZXIgPT4gcmVqZWN0KGVyKSk7XG4gICAgICAgICAgICB0aGlzLm9uKCdlbmQnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXN5bmNocm9ub3VzIGBmb3IgYXdhaXQgb2ZgIGl0ZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIFRoaXMgd2lsbCBjb250aW51ZSBlbWl0dGluZyBhbGwgY2h1bmtzIHVudGlsIHRoZSBzdHJlYW0gdGVybWluYXRlcy5cbiAgICAgKi9cbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAvLyBzZXQgdGhpcyB1cCBmcm9udCwgaW4gY2FzZSB0aGUgY29uc3VtZXIgZG9lc24ndCBjYWxsIG5leHQoKVxuICAgICAgICAvLyByaWdodCBhd2F5LlxuICAgICAgICB0aGlzW0RJU0NBUkRFRF0gPSBmYWxzZTtcbiAgICAgICAgbGV0IHN0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgc3RvcCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgICAgICAgIHN0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0b3BwZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3AoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMucmVhZCgpO1xuICAgICAgICAgICAgaWYgKHJlcyAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgZG9uZTogZmFsc2UsIHZhbHVlOiByZXMgfSk7XG4gICAgICAgICAgICBpZiAodGhpc1tFT0ZdKVxuICAgICAgICAgICAgICAgIHJldHVybiBzdG9wKCk7XG4gICAgICAgICAgICBsZXQgcmVzb2x2ZTtcbiAgICAgICAgICAgIGxldCByZWplY3Q7XG4gICAgICAgICAgICBjb25zdCBvbmVyciA9IChlcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdkYXRhJywgb25kYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZW5kJywgb25lbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKERFU1RST1lFRCwgb25kZXN0cm95KTtcbiAgICAgICAgICAgICAgICBzdG9wKCk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBvbmRhdGEgPSAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZXJyb3InLCBvbmVycik7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2VuZCcsIG9uZW5kKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZihERVNUUk9ZRUQsIG9uZGVzdHJveSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoeyB2YWx1ZSwgZG9uZTogISF0aGlzW0VPRl0gfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgb25lbmQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2Vycm9yJywgb25lcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdkYXRhJywgb25kYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZihERVNUUk9ZRUQsIG9uZGVzdHJveSk7XG4gICAgICAgICAgICAgICAgc3RvcCgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoeyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IG9uZGVzdHJveSA9ICgpID0+IG9uZXJyKG5ldyBFcnJvcignc3RyZWFtIGRlc3Ryb3llZCcpKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QgPSByZWo7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSA9IHJlcztcbiAgICAgICAgICAgICAgICB0aGlzLm9uY2UoREVTVFJPWUVELCBvbmRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgIHRoaXMub25jZSgnZXJyb3InLCBvbmVycik7XG4gICAgICAgICAgICAgICAgdGhpcy5vbmNlKCdlbmQnLCBvbmVuZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbmNlKCdkYXRhJywgb25kYXRhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIHRocm93OiBzdG9wLFxuICAgICAgICAgICAgcmV0dXJuOiBzdG9wLFxuICAgICAgICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbU3ltYm9sLmFzeW5jRGlzcG9zZV06IGFzeW5jICgpID0+IHsgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3luY2hyb25vdXMgYGZvciBvZmAgaXRlcmF0aW9uLlxuICAgICAqXG4gICAgICogVGhlIGl0ZXJhdGlvbiB3aWxsIHRlcm1pbmF0ZSB3aGVuIHRoZSBpbnRlcm5hbCBidWZmZXIgcnVucyBvdXQsIGV2ZW5cbiAgICAgKiBpZiB0aGUgc3RyZWFtIGhhcyBub3QgeWV0IHRlcm1pbmF0ZWQuXG4gICAgICovXG4gICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIC8vIHNldCB0aGlzIHVwIGZyb250LCBpbiBjYXNlIHRoZSBjb25zdW1lciBkb2Vzbid0IGNhbGwgbmV4dCgpXG4gICAgICAgIC8vIHJpZ2h0IGF3YXkuXG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICBsZXQgc3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBzdG9wID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgICAgICAgdGhpcy5vZmYoRVJST1IsIHN0b3ApO1xuICAgICAgICAgICAgdGhpcy5vZmYoREVTVFJPWUVELCBzdG9wKTtcbiAgICAgICAgICAgIHRoaXMub2ZmKCdlbmQnLCBzdG9wKTtcbiAgICAgICAgICAgIHN0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0b3BwZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3AoKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZWFkKCk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBzdG9wKCkgOiB7IGRvbmU6IGZhbHNlLCB2YWx1ZSB9O1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uY2UoJ2VuZCcsIHN0b3ApO1xuICAgICAgICB0aGlzLm9uY2UoRVJST1IsIHN0b3ApO1xuICAgICAgICB0aGlzLm9uY2UoREVTVFJPWUVELCBzdG9wKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5leHQsXG4gICAgICAgICAgICB0aHJvdzogc3RvcCxcbiAgICAgICAgICAgIHJldHVybjogc3RvcCxcbiAgICAgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtTeW1ib2wuZGlzcG9zZV06ICgpID0+IHsgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVzdHJveSBhIHN0cmVhbSwgcHJldmVudGluZyBpdCBmcm9tIGJlaW5nIHVzZWQgZm9yIGFueSBmdXJ0aGVyIHB1cnBvc2UuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgc3RyZWFtIGhhcyBhIGBjbG9zZSgpYCBtZXRob2QsIHRoZW4gaXQgd2lsbCBiZSBjYWxsZWQgb25cbiAgICAgKiBkZXN0cnVjdGlvbi5cbiAgICAgKlxuICAgICAqIEFmdGVyIGRlc3RydWN0aW9uLCBhbnkgYXR0ZW1wdCB0byB3cml0ZSBkYXRhLCByZWFkIGRhdGEsIG9yIGVtaXQgbW9zdFxuICAgICAqIGV2ZW50cyB3aWxsIGJlIGlnbm9yZWQuXG4gICAgICpcbiAgICAgKiBJZiBhbiBlcnJvciBhcmd1bWVudCBpcyBwcm92aWRlZCwgdGhlbiBpdCB3aWxsIGJlIGVtaXR0ZWQgaW4gYW5cbiAgICAgKiAnZXJyb3InIGV2ZW50LlxuICAgICAqL1xuICAgIGRlc3Ryb3koZXIpIHtcbiAgICAgICAgaWYgKHRoaXNbREVTVFJPWUVEXSkge1xuICAgICAgICAgICAgaWYgKGVyKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KERFU1RST1lFRCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzW0RFU1RST1lFRF0gPSB0cnVlO1xuICAgICAgICB0aGlzW0RJU0NBUkRFRF0gPSB0cnVlO1xuICAgICAgICAvLyB0aHJvdyBhd2F5IGFsbCBidWZmZXJlZCBkYXRhLCBpdCdzIG5ldmVyIGNvbWluZyBvdXRcbiAgICAgICAgdGhpc1tCVUZGRVJdLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSA9IDA7XG4gICAgICAgIGNvbnN0IHdjID0gdGhpcztcbiAgICAgICAgaWYgKHR5cGVvZiB3Yy5jbG9zZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdGhpc1tDTE9TRURdKVxuICAgICAgICAgICAgd2MuY2xvc2UoKTtcbiAgICAgICAgaWYgKGVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAgICAgLy8gaWYgbm8gZXJyb3IgdG8gZW1pdCwgc3RpbGwgcmVqZWN0IHBlbmRpbmcgcHJvbWlzZXNcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5lbWl0KERFU1RST1lFRCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIGlzU3RyZWFtfVxuICAgICAqXG4gICAgICogRm9ybWVyIGV4cG9ydCBsb2NhdGlvbiwgbWFpbnRhaW5lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXQgaXNTdHJlYW0oKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmVhbTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIi8vIHRoaXMgaXMganVzdCBhIHZlcnkgbGlnaHQgd3JhcHBlciBhcm91bmQgMiBhcnJheXMgd2l0aCBhbiBvZmZzZXQgaW5kZXhcbmltcG9ydCB7IEdMT0JTVEFSIH0gZnJvbSAnbWluaW1hdGNoJztcbmNvbnN0IGlzUGF0dGVybkxpc3QgPSAocGwpID0+IHBsLmxlbmd0aCA+PSAxO1xuY29uc3QgaXNHbG9iTGlzdCA9IChnbCkgPT4gZ2wubGVuZ3RoID49IDE7XG4vKipcbiAqIEFuIGltbXV0YWJsZS1pc2ggdmlldyBvbiBhbiBhcnJheSBvZiBnbG9iIHBhcnRzIGFuZCB0aGVpciBwYXJzZWRcbiAqIHJlc3VsdHNcbiAqL1xuZXhwb3J0IGNsYXNzIFBhdHRlcm4ge1xuICAgICNwYXR0ZXJuTGlzdDtcbiAgICAjZ2xvYkxpc3Q7XG4gICAgI2luZGV4O1xuICAgIGxlbmd0aDtcbiAgICAjcGxhdGZvcm07XG4gICAgI3Jlc3Q7XG4gICAgI2dsb2JTdHJpbmc7XG4gICAgI2lzRHJpdmU7XG4gICAgI2lzVU5DO1xuICAgICNpc0Fic29sdXRlO1xuICAgICNmb2xsb3dHbG9ic3RhciA9IHRydWU7XG4gICAgY29uc3RydWN0b3IocGF0dGVybkxpc3QsIGdsb2JMaXN0LCBpbmRleCwgcGxhdGZvcm0pIHtcbiAgICAgICAgaWYgKCFpc1BhdHRlcm5MaXN0KHBhdHRlcm5MaXN0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW1wdHkgcGF0dGVybiBsaXN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0dsb2JMaXN0KGdsb2JMaXN0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW1wdHkgZ2xvYiBsaXN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdsb2JMaXN0Lmxlbmd0aCAhPT0gcGF0dGVybkxpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtaXNtYXRjaGVkIHBhdHRlcm4gbGlzdCBhbmQgZ2xvYiBsaXN0IGxlbmd0aHMnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxlbmd0aCA9IHBhdHRlcm5MaXN0Lmxlbmd0aDtcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW5kZXggb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jcGF0dGVybkxpc3QgPSBwYXR0ZXJuTGlzdDtcbiAgICAgICAgdGhpcy4jZ2xvYkxpc3QgPSBnbG9iTGlzdDtcbiAgICAgICAgdGhpcy4jaW5kZXggPSBpbmRleDtcbiAgICAgICAgdGhpcy4jcGxhdGZvcm0gPSBwbGF0Zm9ybTtcbiAgICAgICAgLy8gbm9ybWFsaXplIHJvb3QgZW50cmllcyBvZiBhYnNvbHV0ZSBwYXR0ZXJucyBvbiBpbml0aWFsIGNyZWF0aW9uLlxuICAgICAgICBpZiAodGhpcy4jaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIC8vIGM6ID0+IFsnYzovJ11cbiAgICAgICAgICAgIC8vIEM6LyA9PiBbJ0M6LyddXG4gICAgICAgICAgICAvLyBDOi94ID0+IFsnQzovJywgJ3gnXVxuICAgICAgICAgICAgLy8gLy9ob3N0L3NoYXJlID0+IFsnLy9ob3N0L3NoYXJlLyddXG4gICAgICAgICAgICAvLyAvL2hvc3Qvc2hhcmUvID0+IFsnLy9ob3N0L3NoYXJlLyddXG4gICAgICAgICAgICAvLyAvL2hvc3Qvc2hhcmUveCA9PiBbJy8vaG9zdC9zaGFyZS8nLCAneCddXG4gICAgICAgICAgICAvLyAvZXRjID0+IFsnLycsICdldGMnXVxuICAgICAgICAgICAgLy8gLyA9PiBbJy8nXVxuICAgICAgICAgICAgaWYgKHRoaXMuaXNVTkMoKSkge1xuICAgICAgICAgICAgICAgIC8vICcnIC8gJycgLyAnaG9zdCcgLyAnc2hhcmUnXG4gICAgICAgICAgICAgICAgY29uc3QgW3AwLCBwMSwgcDIsIHAzLCAuLi5wcmVzdF0gPSB0aGlzLiNwYXR0ZXJuTGlzdDtcbiAgICAgICAgICAgICAgICBjb25zdCBbZzAsIGcxLCBnMiwgZzMsIC4uLmdyZXN0XSA9IHRoaXMuI2dsb2JMaXN0O1xuICAgICAgICAgICAgICAgIGlmIChwcmVzdFswXSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZW5kcyBpbiAvXG4gICAgICAgICAgICAgICAgICAgIHByZXN0LnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGdyZXN0LnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBbcDAsIHAxLCBwMiwgcDMsICcnXS5qb2luKCcvJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZyA9IFtnMCwgZzEsIGcyLCBnMywgJyddLmpvaW4oJy8nKTtcbiAgICAgICAgICAgICAgICB0aGlzLiNwYXR0ZXJuTGlzdCA9IFtwLCAuLi5wcmVzdF07XG4gICAgICAgICAgICAgICAgdGhpcy4jZ2xvYkxpc3QgPSBbZywgLi4uZ3Jlc3RdO1xuICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy4jcGF0dGVybkxpc3QubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5pc0RyaXZlKCkgfHwgdGhpcy5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbcDEsIC4uLnByZXN0XSA9IHRoaXMuI3BhdHRlcm5MaXN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IFtnMSwgLi4uZ3Jlc3RdID0gdGhpcy4jZ2xvYkxpc3Q7XG4gICAgICAgICAgICAgICAgaWYgKHByZXN0WzBdID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBlbmRzIGluIC9cbiAgICAgICAgICAgICAgICAgICAgcHJlc3Quc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgZ3Jlc3Quc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHAxICsgJy8nO1xuICAgICAgICAgICAgICAgIGNvbnN0IGcgPSBnMSArICcvJztcbiAgICAgICAgICAgICAgICB0aGlzLiNwYXR0ZXJuTGlzdCA9IFtwLCAuLi5wcmVzdF07XG4gICAgICAgICAgICAgICAgdGhpcy4jZ2xvYkxpc3QgPSBbZywgLi4uZ3Jlc3RdO1xuICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy4jcGF0dGVybkxpc3QubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgcGFyc2VkIGxpc3Qgb2YgcGF0dGVybnNcbiAgICAgKi9cbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGF0dGVybkxpc3RbdGhpcy4jaW5kZXhdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIG9mIGlmIHBhdHRlcm4oKSByZXR1cm5zIGEgc3RyaW5nXG4gICAgICovXG4gICAgaXNTdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdGhpcy4jcGF0dGVybkxpc3RbdGhpcy4jaW5kZXhdID09PSAnc3RyaW5nJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBvZiBpZiBwYXR0ZXJuKCkgcmV0dXJucyBHTE9CU1RBUlxuICAgICAqL1xuICAgIGlzR2xvYnN0YXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwYXR0ZXJuTGlzdFt0aGlzLiNpbmRleF0gPT09IEdMT0JTVEFSO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHBhdHRlcm4oKSByZXR1cm5zIGEgcmVnZXhwXG4gICAgICovXG4gICAgaXNSZWdFeHAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwYXR0ZXJuTGlzdFt0aGlzLiNpbmRleF0gaW5zdGFuY2VvZiBSZWdFeHA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSAvLWpvaW5lZCBzZXQgb2YgZ2xvYiBwYXJ0cyB0aGF0IG1ha2UgdXAgdGhpcyBwYXR0ZXJuXG4gICAgICovXG4gICAgZ2xvYlN0cmluZygpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiNnbG9iU3RyaW5nID1cbiAgICAgICAgICAgIHRoaXMuI2dsb2JTdHJpbmcgfHxcbiAgICAgICAgICAgICAgICAodGhpcy4jaW5kZXggPT09IDAgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQWJzb2x1dGUoKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNnbG9iTGlzdFswXSArIHRoaXMuI2dsb2JMaXN0LnNsaWNlKDEpLmpvaW4oJy8nKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLiNnbG9iTGlzdC5qb2luKCcvJylcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLiNnbG9iTGlzdC5zbGljZSh0aGlzLiNpbmRleCkuam9pbignLycpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlcmUgYXJlIG1vcmUgcGF0dGVybiBwYXJ0cyBhZnRlciB0aGlzIG9uZVxuICAgICAqL1xuICAgIGhhc01vcmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCA+IHRoaXMuI2luZGV4ICsgMTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gYWZ0ZXIgdGhpcyBwYXJ0LCBvciBudWxsIGlmIHRoaXMgaXMgdGhlIGVuZFxuICAgICAqL1xuICAgIHJlc3QoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyZXN0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcmVzdDtcbiAgICAgICAgaWYgKCF0aGlzLmhhc01vcmUoKSlcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jcmVzdCA9IG51bGwpO1xuICAgICAgICB0aGlzLiNyZXN0ID0gbmV3IFBhdHRlcm4odGhpcy4jcGF0dGVybkxpc3QsIHRoaXMuI2dsb2JMaXN0LCB0aGlzLiNpbmRleCArIDEsIHRoaXMuI3BsYXRmb3JtKTtcbiAgICAgICAgdGhpcy4jcmVzdC4jaXNBYnNvbHV0ZSA9IHRoaXMuI2lzQWJzb2x1dGU7XG4gICAgICAgIHRoaXMuI3Jlc3QuI2lzVU5DID0gdGhpcy4jaXNVTkM7XG4gICAgICAgIHRoaXMuI3Jlc3QuI2lzRHJpdmUgPSB0aGlzLiNpc0RyaXZlO1xuICAgICAgICByZXR1cm4gdGhpcy4jcmVzdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgcGF0dGVybiByZXByZXNlbnRzIGEgLy91bmMvcGF0aC8gb24gd2luZG93c1xuICAgICAqL1xuICAgIGlzVU5DKCkge1xuICAgICAgICBjb25zdCBwbCA9IHRoaXMuI3BhdHRlcm5MaXN0O1xuICAgICAgICByZXR1cm4gdGhpcy4jaXNVTkMgIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICB0aGlzLiNpc1VOQ1xuICAgICAgICAgICAgOiAodGhpcy4jaXNVTkMgPVxuICAgICAgICAgICAgICAgIHRoaXMuI3BsYXRmb3JtID09PSAnd2luMzInICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2luZGV4ID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIHBsWzBdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgICAgICBwbFsxXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBsWzJdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAhIXBsWzJdICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwbFszXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgISFwbFszXSk7XG4gICAgfVxuICAgIC8vIHBhdHRlcm4gbGlrZSBDOi8uLi5cbiAgICAvLyBzcGxpdCA9IFsnQzonLCAuLi5dXG4gICAgLy8gWFhYOiB3b3VsZCBiZSBuaWNlIHRvIGhhbmRsZSBwYXR0ZXJucyBsaWtlIGBjOipgIHRvIHRlc3QgdGhlIGN3ZFxuICAgIC8vIGluIGM6IGZvciAqLCBidXQgSSBkb24ndCBrbm93IG9mIGEgd2F5IHRvIGV2ZW4gZmlndXJlIG91dCB3aGF0IHRoYXRcbiAgICAvLyBjd2QgaXMgd2l0aG91dCBhY3R1YWxseSBjaGRpcidpbmcgaW50byBpdD9cbiAgICAvKipcbiAgICAgKiBUcnVlIGlmIHRoZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEgZHJpdmUgbGV0dGVyIG9uIFdpbmRvd3NcbiAgICAgKi9cbiAgICBpc0RyaXZlKCkge1xuICAgICAgICBjb25zdCBwbCA9IHRoaXMuI3BhdHRlcm5MaXN0O1xuICAgICAgICByZXR1cm4gdGhpcy4jaXNEcml2ZSAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgIHRoaXMuI2lzRHJpdmVcbiAgICAgICAgICAgIDogKHRoaXMuI2lzRHJpdmUgPVxuICAgICAgICAgICAgICAgIHRoaXMuI3BsYXRmb3JtID09PSAnd2luMzInICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2luZGV4ID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcGxbMF0gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgIC9eW2Etel06JC9pLnRlc3QocGxbMF0pKTtcbiAgICB9XG4gICAgLy8gcGF0dGVybiA9ICcvJyBvciAnLy4uLicgb3IgJy94Ly4uLidcbiAgICAvLyBzcGxpdCA9IFsnJywgJyddIG9yIFsnJywgLi4uXSBvciBbJycsICd4JywgLi4uXVxuICAgIC8vIERyaXZlIGFuZCBVTkMgYm90aCBjb25zaWRlcmVkIGFic29sdXRlIG9uIHdpbmRvd3NcbiAgICAvKipcbiAgICAgKiBUcnVlIGlmIHRoZSBwYXR0ZXJuIGlzIHJvb3RlZCBvbiBhbiBhYnNvbHV0ZSBwYXRoXG4gICAgICovXG4gICAgaXNBYnNvbHV0ZSgpIHtcbiAgICAgICAgY29uc3QgcGwgPSB0aGlzLiNwYXR0ZXJuTGlzdDtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2lzQWJzb2x1dGUgIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICB0aGlzLiNpc0Fic29sdXRlXG4gICAgICAgICAgICA6ICh0aGlzLiNpc0Fic29sdXRlID1cbiAgICAgICAgICAgICAgICAocGxbMF0gPT09ICcnICYmIHBsLmxlbmd0aCA+IDEpIHx8XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNEcml2ZSgpIHx8XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNVTkMoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGNvbnN1bWUgdGhlIHJvb3Qgb2YgdGhlIHBhdHRlcm4sIGFuZCByZXR1cm4gaXRcbiAgICAgKi9cbiAgICByb290KCkge1xuICAgICAgICBjb25zdCBwID0gdGhpcy4jcGF0dGVybkxpc3RbMF07XG4gICAgICAgIHJldHVybiAodHlwZW9mIHAgPT09ICdzdHJpbmcnICYmIHRoaXMuaXNBYnNvbHV0ZSgpICYmIHRoaXMuI2luZGV4ID09PSAwKSA/XG4gICAgICAgICAgICBwXG4gICAgICAgICAgICA6ICcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIGN1cnJlbnQgZ2xvYnN0YXIgcGF0dGVybiBpcyBhbGxvd2VkIHRvIGZvbGxvd1xuICAgICAqIGEgc3ltYm9saWMgbGluay5cbiAgICAgKi9cbiAgICBjaGVja0ZvbGxvd0dsb2JzdGFyKCkge1xuICAgICAgICByZXR1cm4gISh0aGlzLiNpbmRleCA9PT0gMCB8fFxuICAgICAgICAgICAgIXRoaXMuaXNHbG9ic3RhcigpIHx8XG4gICAgICAgICAgICAhdGhpcy4jZm9sbG93R2xvYnN0YXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYXJrIHRoYXQgdGhlIGN1cnJlbnQgZ2xvYnN0YXIgcGF0dGVybiBpcyBmb2xsb3dpbmcgYSBzeW1ib2xpYyBsaW5rXG4gICAgICovXG4gICAgbWFya0ZvbGxvd0dsb2JzdGFyKCkge1xuICAgICAgICBpZiAodGhpcy4jaW5kZXggPT09IDAgfHwgIXRoaXMuaXNHbG9ic3RhcigpIHx8ICF0aGlzLiNmb2xsb3dHbG9ic3RhcilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpcy4jZm9sbG93R2xvYnN0YXIgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0dGVybi5qcy5tYXAiLAogICAgIi8vIGdpdmUgaXQgYSBwYXR0ZXJuLCBhbmQgaXQnbGwgYmUgYWJsZSB0byB0ZWxsIHlvdSBpZlxuLy8gYSBnaXZlbiBwYXRoIHNob3VsZCBiZSBpZ25vcmVkLlxuLy8gSWdub3JpbmcgYSBwYXRoIGlnbm9yZXMgaXRzIGNoaWxkcmVuIGlmIHRoZSBwYXR0ZXJuIGVuZHMgaW4gLyoqXG4vLyBJZ25vcmVzIGFyZSBhbHdheXMgcGFyc2VkIGluIGRvdDp0cnVlIG1vZGVcbmltcG9ydCB7IE1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgeyBQYXR0ZXJuIH0gZnJvbSAnLi9wYXR0ZXJuLmpzJztcbmNvbnN0IGRlZmF1bHRQbGF0Zm9ybSA9ICh0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiZcbiAgICBwcm9jZXNzICYmXG4gICAgdHlwZW9mIHByb2Nlc3MucGxhdGZvcm0gPT09ICdzdHJpbmcnKSA/XG4gICAgcHJvY2Vzcy5wbGF0Zm9ybVxuICAgIDogJ2xpbnV4Jztcbi8qKlxuICogQ2xhc3MgdXNlZCB0byBwcm9jZXNzIGlnbm9yZWQgcGF0dGVybnNcbiAqL1xuZXhwb3J0IGNsYXNzIElnbm9yZSB7XG4gICAgcmVsYXRpdmU7XG4gICAgcmVsYXRpdmVDaGlsZHJlbjtcbiAgICBhYnNvbHV0ZTtcbiAgICBhYnNvbHV0ZUNoaWxkcmVuO1xuICAgIHBsYXRmb3JtO1xuICAgIG1tb3B0cztcbiAgICBjb25zdHJ1Y3RvcihpZ25vcmVkLCB7IG5vYnJhY2UsIG5vY2FzZSwgbm9leHQsIG5vZ2xvYnN0YXIsIHBsYXRmb3JtID0gZGVmYXVsdFBsYXRmb3JtLCB9KSB7XG4gICAgICAgIHRoaXMucmVsYXRpdmUgPSBbXTtcbiAgICAgICAgdGhpcy5hYnNvbHV0ZSA9IFtdO1xuICAgICAgICB0aGlzLnJlbGF0aXZlQ2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5hYnNvbHV0ZUNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMucGxhdGZvcm0gPSBwbGF0Zm9ybTtcbiAgICAgICAgdGhpcy5tbW9wdHMgPSB7XG4gICAgICAgICAgICBkb3Q6IHRydWUsXG4gICAgICAgICAgICBub2JyYWNlLFxuICAgICAgICAgICAgbm9jYXNlLFxuICAgICAgICAgICAgbm9leHQsXG4gICAgICAgICAgICBub2dsb2JzdGFyLFxuICAgICAgICAgICAgb3B0aW1pemF0aW9uTGV2ZWw6IDIsXG4gICAgICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgICAgIG5vY29tbWVudDogdHJ1ZSxcbiAgICAgICAgICAgIG5vbmVnYXRlOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IGlnbiBvZiBpZ25vcmVkKVxuICAgICAgICAgICAgdGhpcy5hZGQoaWduKTtcbiAgICB9XG4gICAgYWRkKGlnbikge1xuICAgICAgICAvLyB0aGlzIGlzIGEgbGl0dGxlIHdlaXJkLCBidXQgaXQgZ2l2ZXMgdXMgYSBjbGVhbiBzZXQgb2Ygb3B0aW1pemVkXG4gICAgICAgIC8vIG1pbmltYXRjaCBtYXRjaGVycywgd2l0aG91dCBnZXR0aW5nIHRyaXBwZWQgdXAgaWYgb25lIG9mIHRoZW1cbiAgICAgICAgLy8gZW5kcyBpbiAvKiogaW5zaWRlIGEgYnJhY2Ugc2VjdGlvbiwgYW5kIGl0J3Mgb25seSBpbmVmZmljaWVudCBhdFxuICAgICAgICAvLyB0aGUgc3RhcnQgb2YgdGhlIHdhbGssIG5vdCBhbG9uZyBpdC5cbiAgICAgICAgLy8gSXQnZCBiZSBuaWNlIGlmIHRoZSBQYXR0ZXJuIGNsYXNzIGp1c3QgaGFkIGEgLnRlc3QoKSBtZXRob2QsIGJ1dFxuICAgICAgICAvLyBoYW5kbGluZyBnbG9ic3RhcnMgaXMgYSBiaXQgb2YgYSBwaXRhLCBhbmQgdGhhdCBjb2RlIGFscmVhZHkgbGl2ZXNcbiAgICAgICAgLy8gaW4gbWluaW1hdGNoIGFueXdheS5cbiAgICAgICAgLy8gQW5vdGhlciB3YXkgd291bGQgYmUgaWYgbWF5YmUgTWluaW1hdGNoIGNvdWxkIHRha2UgaXRzIHNldC9nbG9iUGFydHNcbiAgICAgICAgLy8gYXMgYW4gb3B0aW9uLCBhbmQgdGhlbiB3ZSBjb3VsZCBhdCBsZWFzdCBqdXN0IHVzZSBQYXR0ZXJuIHRvIHRlc3RcbiAgICAgICAgLy8gZm9yIGFic29sdXRlLW5lc3MuXG4gICAgICAgIC8vIFlldCBhbm90aGVyIHdheSwgTWluaW1hdGNoIGNvdWxkIHRha2UgYW4gYXJyYXkgb2YgZ2xvYiBzdHJpbmdzLCBhbmRcbiAgICAgICAgLy8gYSBjd2Qgb3B0aW9uLCBhbmQgZG8gdGhlIHJpZ2h0IHRoaW5nLlxuICAgICAgICBjb25zdCBtbSA9IG5ldyBNaW5pbWF0Y2goaWduLCB0aGlzLm1tb3B0cyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW0uc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBtbS5zZXRbaV07XG4gICAgICAgICAgICBjb25zdCBnbG9iUGFydHMgPSBtbS5nbG9iUGFydHNbaV07XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICghcGFyc2VkIHx8ICFnbG9iUGFydHMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcGF0dGVybiBvYmplY3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHN0cmlwIG9mZiBsZWFkaW5nIC4vIHBvcnRpb25zXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL25vZGUtZ2xvYi9pc3N1ZXMvNTcwXG4gICAgICAgICAgICB3aGlsZSAocGFyc2VkWzBdID09PSAnLicgJiYgZ2xvYlBhcnRzWzBdID09PSAnLicpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBnbG9iUGFydHMuc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICBjb25zdCBwID0gbmV3IFBhdHRlcm4ocGFyc2VkLCBnbG9iUGFydHMsIDAsIHRoaXMucGxhdGZvcm0pO1xuICAgICAgICAgICAgY29uc3QgbSA9IG5ldyBNaW5pbWF0Y2gocC5nbG9iU3RyaW5nKCksIHRoaXMubW1vcHRzKTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZ2xvYlBhcnRzW2dsb2JQYXJ0cy5sZW5ndGggLSAxXSA9PT0gJyoqJztcbiAgICAgICAgICAgIGNvbnN0IGFic29sdXRlID0gcC5pc0Fic29sdXRlKCk7XG4gICAgICAgICAgICBpZiAoYWJzb2x1dGUpXG4gICAgICAgICAgICAgICAgdGhpcy5hYnNvbHV0ZS5wdXNoKG0pO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMucmVsYXRpdmUucHVzaChtKTtcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGlmIChhYnNvbHV0ZSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hYnNvbHV0ZUNoaWxkcmVuLnB1c2gobSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlQ2hpbGRyZW4ucHVzaChtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZ25vcmVkKHApIHtcbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSBwLmZ1bGxwYXRoKCk7XG4gICAgICAgIGNvbnN0IGZ1bGxwYXRocyA9IGAke2Z1bGxwYXRofS9gO1xuICAgICAgICBjb25zdCByZWxhdGl2ZSA9IHAucmVsYXRpdmUoKSB8fCAnLic7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlcyA9IGAke3JlbGF0aXZlfS9gO1xuICAgICAgICBmb3IgKGNvbnN0IG0gb2YgdGhpcy5yZWxhdGl2ZSkge1xuICAgICAgICAgICAgaWYgKG0ubWF0Y2gocmVsYXRpdmUpIHx8IG0ubWF0Y2gocmVsYXRpdmVzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IG0gb2YgdGhpcy5hYnNvbHV0ZSkge1xuICAgICAgICAgICAgaWYgKG0ubWF0Y2goZnVsbHBhdGgpIHx8IG0ubWF0Y2goZnVsbHBhdGhzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNoaWxkcmVuSWdub3JlZChwKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gcC5mdWxscGF0aCgpICsgJy8nO1xuICAgICAgICBjb25zdCByZWxhdGl2ZSA9IChwLnJlbGF0aXZlKCkgfHwgJy4nKSArICcvJztcbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHRoaXMucmVsYXRpdmVDaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKG0ubWF0Y2gocmVsYXRpdmUpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiB0aGlzLmFic29sdXRlQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChtLm1hdGNoKGZ1bGxwYXRoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWdub3JlLmpzLm1hcCIsCiAgICAiLy8gc3luY2hyb25vdXMgdXRpbGl0eSBmb3IgZmlsdGVyaW5nIGVudHJpZXMgYW5kIGNhbGN1bGF0aW5nIHN1YndhbGtzXG5pbXBvcnQgeyBHTE9CU1RBUiB9IGZyb20gJ21pbmltYXRjaCc7XG4vKipcbiAqIEEgY2FjaGUgb2Ygd2hpY2ggcGF0dGVybnMgaGF2ZSBiZWVuIHByb2Nlc3NlZCBmb3IgYSBnaXZlbiBQYXRoXG4gKi9cbmV4cG9ydCBjbGFzcyBIYXNXYWxrZWRDYWNoZSB7XG4gICAgc3RvcmU7XG4gICAgY29uc3RydWN0b3Ioc3RvcmUgPSBuZXcgTWFwKCkpIHtcbiAgICAgICAgdGhpcy5zdG9yZSA9IHN0b3JlO1xuICAgIH1cbiAgICBjb3B5KCkge1xuICAgICAgICByZXR1cm4gbmV3IEhhc1dhbGtlZENhY2hlKG5ldyBNYXAodGhpcy5zdG9yZSkpO1xuICAgIH1cbiAgICBoYXNXYWxrZWQodGFyZ2V0LCBwYXR0ZXJuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmdldCh0YXJnZXQuZnVsbHBhdGgoKSk/LmhhcyhwYXR0ZXJuLmdsb2JTdHJpbmcoKSk7XG4gICAgfVxuICAgIHN0b3JlV2Fsa2VkKHRhcmdldCwgcGF0dGVybikge1xuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHRhcmdldC5mdWxscGF0aCgpO1xuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnN0b3JlLmdldChmdWxscGF0aCk7XG4gICAgICAgIGlmIChjYWNoZWQpXG4gICAgICAgICAgICBjYWNoZWQuYWRkKHBhdHRlcm4uZ2xvYlN0cmluZygpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXQoZnVsbHBhdGgsIG5ldyBTZXQoW3BhdHRlcm4uZ2xvYlN0cmluZygpXSkpO1xuICAgIH1cbn1cbi8qKlxuICogQSByZWNvcmQgb2Ygd2hpY2ggcGF0aHMgaGF2ZSBiZWVuIG1hdGNoZWQgaW4gYSBnaXZlbiB3YWxrIHN0ZXAsXG4gKiBhbmQgd2hldGhlciB0aGV5IG9ubHkgYXJlIGNvbnNpZGVyZWQgYSBtYXRjaCBpZiB0aGV5IGFyZSBhIGRpcmVjdG9yeSxcbiAqIGFuZCB3aGV0aGVyIHRoZWlyIGFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggc2hvdWxkIGJlIHJldHVybmVkLlxuICovXG5leHBvcnQgY2xhc3MgTWF0Y2hSZWNvcmQge1xuICAgIHN0b3JlID0gbmV3IE1hcCgpO1xuICAgIGFkZCh0YXJnZXQsIGFic29sdXRlLCBpZkRpcikge1xuICAgICAgICBjb25zdCBuID0gKGFic29sdXRlID8gMiA6IDApIHwgKGlmRGlyID8gMSA6IDApO1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zdG9yZS5nZXQodGFyZ2V0KTtcbiAgICAgICAgdGhpcy5zdG9yZS5zZXQodGFyZ2V0LCBjdXJyZW50ID09PSB1bmRlZmluZWQgPyBuIDogbiAmIGN1cnJlbnQpO1xuICAgIH1cbiAgICAvLyBtYXRjaCwgYWJzb2x1dGUsIGlmZGlyXG4gICAgZW50cmllcygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnN0b3JlLmVudHJpZXMoKV0ubWFwKChbcGF0aCwgbl0pID0+IFtcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAhIShuICYgMiksXG4gICAgICAgICAgICAhIShuICYgMSksXG4gICAgICAgIF0pO1xuICAgIH1cbn1cbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIHBhdHRlcm5zIHRoYXQgbXVzdCBiZSBwcm9jZXNzZWQgaW4gYSBzdWJzZXF1ZW50IHN0ZXBcbiAqIGZvciBhIGdpdmVuIHBhdGguXG4gKi9cbmV4cG9ydCBjbGFzcyBTdWJXYWxrcyB7XG4gICAgc3RvcmUgPSBuZXcgTWFwKCk7XG4gICAgYWRkKHRhcmdldCwgcGF0dGVybikge1xuICAgICAgICBpZiAoIXRhcmdldC5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdWJzID0gdGhpcy5zdG9yZS5nZXQodGFyZ2V0KTtcbiAgICAgICAgaWYgKHN1YnMpIHtcbiAgICAgICAgICAgIGlmICghc3Vicy5maW5kKHAgPT4gcC5nbG9iU3RyaW5nKCkgPT09IHBhdHRlcm4uZ2xvYlN0cmluZygpKSkge1xuICAgICAgICAgICAgICAgIHN1YnMucHVzaChwYXR0ZXJuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNldCh0YXJnZXQsIFtwYXR0ZXJuXSk7XG4gICAgfVxuICAgIGdldCh0YXJnZXQpIHtcbiAgICAgICAgY29uc3Qgc3VicyA9IHRoaXMuc3RvcmUuZ2V0KHRhcmdldCk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoIXN1YnMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYXR0ZW1wdGluZyB0byB3YWxrIHVua25vd24gcGF0aCcpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHJldHVybiBzdWJzO1xuICAgIH1cbiAgICBlbnRyaWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5rZXlzKCkubWFwKGsgPT4gW2ssIHRoaXMuc3RvcmUuZ2V0KGspXSk7XG4gICAgfVxuICAgIGtleXMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5zdG9yZS5rZXlzKCldLmZpbHRlcih0ID0+IHQuY2FuUmVhZGRpcigpKTtcbiAgICB9XG59XG4vKipcbiAqIFRoZSBjbGFzcyB0aGF0IHByb2Nlc3NlcyBwYXR0ZXJucyBmb3IgYSBnaXZlbiBwYXRoLlxuICpcbiAqIEhhbmRsZXMgY2hpbGQgZW50cnkgZmlsdGVyaW5nLCBhbmQgZGV0ZXJtaW5pbmcgd2hldGhlciBhIHBhdGgnc1xuICogZGlyZWN0b3J5IGNvbnRlbnRzIG11c3QgYmUgcmVhZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFByb2Nlc3NvciB7XG4gICAgaGFzV2Fsa2VkQ2FjaGU7XG4gICAgbWF0Y2hlcyA9IG5ldyBNYXRjaFJlY29yZCgpO1xuICAgIHN1YndhbGtzID0gbmV3IFN1YldhbGtzKCk7XG4gICAgcGF0dGVybnM7XG4gICAgZm9sbG93O1xuICAgIGRvdDtcbiAgICBvcHRzO1xuICAgIGNvbnN0cnVjdG9yKG9wdHMsIGhhc1dhbGtlZENhY2hlKSB7XG4gICAgICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgICAgIHRoaXMuZm9sbG93ID0gISFvcHRzLmZvbGxvdztcbiAgICAgICAgdGhpcy5kb3QgPSAhIW9wdHMuZG90O1xuICAgICAgICB0aGlzLmhhc1dhbGtlZENhY2hlID1cbiAgICAgICAgICAgIGhhc1dhbGtlZENhY2hlID8gaGFzV2Fsa2VkQ2FjaGUuY29weSgpIDogbmV3IEhhc1dhbGtlZENhY2hlKCk7XG4gICAgfVxuICAgIHByb2Nlc3NQYXR0ZXJucyh0YXJnZXQsIHBhdHRlcm5zKSB7XG4gICAgICAgIHRoaXMucGF0dGVybnMgPSBwYXR0ZXJucztcbiAgICAgICAgY29uc3QgcHJvY2Vzc2luZ1NldCA9IHBhdHRlcm5zLm1hcChwID0+IFt0YXJnZXQsIHBdKTtcbiAgICAgICAgLy8gbWFwIG9mIHBhdGhzIHRvIHRoZSBtYWdpYy1zdGFydGluZyBzdWJ3YWxrcyB0aGV5IG5lZWQgdG8gd2Fsa1xuICAgICAgICAvLyBmaXJzdCBpdGVtIGluIHBhdHRlcm5zIGlzIHRoZSBmaWx0ZXJcbiAgICAgICAgZm9yIChsZXQgW3QsIHBhdHRlcm5dIG9mIHByb2Nlc3NpbmdTZXQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzV2Fsa2VkQ2FjaGUuc3RvcmVXYWxrZWQodCwgcGF0dGVybik7XG4gICAgICAgICAgICBjb25zdCByb290ID0gcGF0dGVybi5yb290KCk7XG4gICAgICAgICAgICBjb25zdCBhYnNvbHV0ZSA9IHBhdHRlcm4uaXNBYnNvbHV0ZSgpICYmIHRoaXMub3B0cy5hYnNvbHV0ZSAhPT0gZmFsc2U7XG4gICAgICAgICAgICAvLyBzdGFydCBhYnNvbHV0ZSBwYXR0ZXJucyBhdCByb290XG4gICAgICAgICAgICBpZiAocm9vdCkge1xuICAgICAgICAgICAgICAgIHQgPSB0LnJlc29sdmUocm9vdCA9PT0gJy8nICYmIHRoaXMub3B0cy5yb290ICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdHMucm9vdFxuICAgICAgICAgICAgICAgICAgICA6IHJvb3QpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3QgPSBwYXR0ZXJuLnJlc3QoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZCh0LCB0cnVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9IHJlc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuaXNFTk9FTlQoKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCBwO1xuICAgICAgICAgICAgbGV0IHJlc3Q7XG4gICAgICAgICAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgd2hpbGUgKHR5cGVvZiAocCA9IHBhdHRlcm4ucGF0dGVybigpKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAocmVzdCA9IHBhdHRlcm4ucmVzdCgpKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGMgPSB0LnJlc29sdmUocCk7XG4gICAgICAgICAgICAgICAgdCA9IGM7XG4gICAgICAgICAgICAgICAgcGF0dGVybiA9IHJlc3Q7XG4gICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwID0gcGF0dGVybi5wYXR0ZXJuKCk7XG4gICAgICAgICAgICByZXN0ID0gcGF0dGVybi5yZXN0KCk7XG4gICAgICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1dhbGtlZENhY2hlLmhhc1dhbGtlZCh0LCBwYXR0ZXJuKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNXYWxrZWRDYWNoZS5zdG9yZVdhbGtlZCh0LCBwYXR0ZXJuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG5vdyB3ZSBoYXZlIGVpdGhlciBhIGZpbmFsIHN0cmluZyBmb3IgYSBrbm93biBlbnRyeSxcbiAgICAgICAgICAgIC8vIG1vcmUgc3RyaW5ncyBmb3IgYW4gdW5rbm93biBlbnRyeSxcbiAgICAgICAgICAgIC8vIG9yIGEgcGF0dGVybiBzdGFydGluZyB3aXRoIG1hZ2ljLCBtb3VudGVkIG9uIHQuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gbXVzdCBub3QgYmUgZmluYWwgZW50cnksIG90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlXG4gICAgICAgICAgICAgICAgLy8gY29uY2F0ZW5hdGVkIGl0IGVhcmxpZXIuXG4gICAgICAgICAgICAgICAgY29uc3QgaWZEaXIgPSBwID09PSAnLi4nIHx8IHAgPT09ICcnIHx8IHAgPT09ICcuJztcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKHQucmVzb2x2ZShwKSwgYWJzb2x1dGUsIGlmRGlyKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHAgPT09IEdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgbm8gcmVzdCwgbWF0Y2ggYW5kIHN1YndhbGsgcGF0dGVyblxuICAgICAgICAgICAgICAgIC8vIGlmIHJlc3QsIHByb2Nlc3MgcmVzdCBhbmQgc3Vid2FsayBwYXR0ZXJuXG4gICAgICAgICAgICAgICAgLy8gaWYgaXQncyBhIHN5bWxpbmssIGJ1dCB3ZSBkaWRuJ3QgZ2V0IGhlcmUgYnkgd2F5IG9mIGFcbiAgICAgICAgICAgICAgICAvLyBnbG9ic3RhciBtYXRjaCAobWVhbmluZyBpdCdzIHRoZSBmaXJzdCB0aW1lIFRISVMgZ2xvYnN0YXJcbiAgICAgICAgICAgICAgICAvLyBoYXMgdHJhdmVyc2VkIGEgc3ltbGluayksIHRoZW4gd2UgZm9sbG93IGl0LiBPdGhlcndpc2UsIHN0b3AuXG4gICAgICAgICAgICAgICAgaWYgKCF0LmlzU3ltYm9saWNMaW5rKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2xsb3cgfHxcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybi5jaGVja0ZvbGxvd0dsb2JzdGFyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQodCwgcGF0dGVybik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJwID0gcmVzdD8ucGF0dGVybigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJyZXN0ID0gcmVzdD8ucmVzdCgpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzdCB8fCAoKHJwID09PSAnJyB8fCBycCA9PT0gJy4nKSAmJiAhcnJlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgSEFTIHRvIGJlIGEgZGlyIGlmIGl0IGVuZHMgaW4gKiovIG9yICoqLy5cbiAgICAgICAgICAgICAgICAgICAgLy8gYnV0IGVuZGluZyBpbiAqKiB3aWxsIG1hdGNoIGZpbGVzIGFzIHdlbGwuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQodCwgYWJzb2x1dGUsIHJwID09PSAnJyB8fCBycCA9PT0gJy4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChycCA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB3b3VsZCBtZWFuIHlvdSdyZSBtYXRjaGluZyAqKi8uLiBhdCB0aGUgZnMgcm9vdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBubyB0aGFua3MsIEknbSBub3QgZ29ubmEgdGVzdCB0aGF0IHNwZWNpZmljIGNhc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRwID0gdC5wYXJlbnQgfHwgdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJyZXN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQodHAsIGFic29sdXRlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLmhhc1dhbGtlZENhY2hlLmhhc1dhbGtlZCh0cCwgcnJlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQodHAsIHJyZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZCh0LCBwYXR0ZXJuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc3Vid2Fsa1RhcmdldHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YndhbGtzLmtleXMoKTtcbiAgICB9XG4gICAgY2hpbGQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvY2Vzc29yKHRoaXMub3B0cywgdGhpcy5oYXNXYWxrZWRDYWNoZSk7XG4gICAgfVxuICAgIC8vIHJldHVybiBhIG5ldyBQcm9jZXNzb3IgY29udGFpbmluZyB0aGUgc3Vid2Fsa3MgZm9yIGVhY2hcbiAgICAvLyBjaGlsZCBlbnRyeSwgYW5kIGEgc2V0IG9mIG1hdGNoZXMsIGFuZFxuICAgIC8vIGEgaGFzV2Fsa2VkQ2FjaGUgdGhhdCdzIGEgY29weSBvZiB0aGlzIG9uZVxuICAgIC8vIHRoZW4gd2UncmUgZ29pbmcgdG8gY2FsbFxuICAgIGZpbHRlckVudHJpZXMocGFyZW50LCBlbnRyaWVzKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gdGhpcy5zdWJ3YWxrcy5nZXQocGFyZW50KTtcbiAgICAgICAgLy8gcHV0IG1hdGNoZXMgYW5kIGVudHJ5IHdhbGtzIGludG8gdGhlIHJlc3VsdHMgcHJvY2Vzc29yXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmNoaWxkKCk7XG4gICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhYnNvbHV0ZSA9IHBhdHRlcm4uaXNBYnNvbHV0ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXR0ZXJuLnBhdHRlcm4oKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN0ID0gcGF0dGVybi5yZXN0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHAgPT09IEdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMudGVzdEdsb2JzdGFyKGUsIHBhdHRlcm4sIHJlc3QsIGFic29sdXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnRlc3RSZWdFeHAoZSwgcCwgcmVzdCwgYWJzb2x1dGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy50ZXN0U3RyaW5nKGUsIHAsIHJlc3QsIGFic29sdXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHRlc3RHbG9ic3RhcihlLCBwYXR0ZXJuLCByZXN0LCBhYnNvbHV0ZSkge1xuICAgICAgICBpZiAodGhpcy5kb3QgfHwgIWUubmFtZS5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgICAgIGlmICghcGF0dGVybi5oYXNNb3JlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKGUsIGFic29sdXRlLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSdyZSBpbiBmb2xsb3cgbW9kZSBvciBpdCdzIG5vdCBhIHN5bWxpbmssIGp1c3Qga2VlcFxuICAgICAgICAgICAgICAgIC8vIHRlc3RpbmcgdGhlIHNhbWUgcGF0dGVybi4gSWYgdGhlcmUncyBtb3JlIGFmdGVyIHRoZSBnbG9ic3RhcixcbiAgICAgICAgICAgICAgICAvLyB0aGVuIHRoaXMgc3ltbGluayBjb25zdW1lcyB0aGUgZ2xvYnN0YXIuIElmIG5vdCwgdGhlbiB3ZSBjYW5cbiAgICAgICAgICAgICAgICAvLyBmb2xsb3cgYXQgbW9zdCBPTkUgc3ltbGluayBhbG9uZyB0aGUgd2F5LCBzbyB3ZSBtYXJrIGl0LCB3aGljaFxuICAgICAgICAgICAgICAgIC8vIGFsc28gY2hlY2tzIHRvIGVuc3VyZSB0aGF0IGl0IHdhc24ndCBhbHJlYWR5IG1hcmtlZC5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb2xsb3cgfHwgIWUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlLCBwYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN0ICYmIHBhdHRlcm4uY2hlY2tGb2xsb3dHbG9ic3RhcigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlLCByZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwYXR0ZXJuLm1hcmtGb2xsb3dHbG9ic3RhcigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlLCBwYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB0aGUgTkVYVCB0aGluZyBtYXRjaGVzIHRoaXMgZW50cnksIHRoZW4gYWxzbyBhZGRcbiAgICAgICAgLy8gdGhlIHJlc3QuXG4gICAgICAgIGlmIChyZXN0KSB7XG4gICAgICAgICAgICBjb25zdCBycCA9IHJlc3QucGF0dGVybigpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBycCA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAvLyBkb3RzIGFuZCBlbXB0eSB3ZXJlIGhhbmRsZWQgYWxyZWFkeVxuICAgICAgICAgICAgICAgIHJwICE9PSAnLi4nICYmXG4gICAgICAgICAgICAgICAgcnAgIT09ICcnICYmXG4gICAgICAgICAgICAgICAgcnAgIT09ICcuJykge1xuICAgICAgICAgICAgICAgIHRoaXMudGVzdFN0cmluZyhlLCBycCwgcmVzdC5yZXN0KCksIGFic29sdXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJwID09PSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgY29uc3QgZXAgPSBlLnBhcmVudCB8fCBlO1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZXAsIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocnAgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlc3RSZWdFeHAoZSwgcnAsIHJlc3QucmVzdCgpLCBhYnNvbHV0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGVzdFJlZ0V4cChlLCBwLCByZXN0LCBhYnNvbHV0ZSkge1xuICAgICAgICBpZiAoIXAudGVzdChlLm5hbWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXJlc3QpIHtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQoZSwgYWJzb2x1dGUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKGUsIHJlc3QpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRlc3RTdHJpbmcoZSwgcCwgcmVzdCwgYWJzb2x1dGUpIHtcbiAgICAgICAgLy8gc2hvdWxkIG5ldmVyIGhhcHBlbj9cbiAgICAgICAgaWYgKCFlLmlzTmFtZWQocCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghcmVzdCkge1xuICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZChlLCBhYnNvbHV0ZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZSwgcmVzdCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm9jZXNzb3IuanMubWFwIiwKICAgICIvKipcbiAqIFNpbmdsZS11c2UgdXRpbGl0eSBjbGFzc2VzIHRvIHByb3ZpZGUgZnVuY3Rpb25hbGl0eSB0byB0aGUge0BsaW5rIEdsb2J9XG4gKiBtZXRob2RzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuaW1wb3J0IHsgTWluaXBhc3MgfSBmcm9tICdtaW5pcGFzcyc7XG5pbXBvcnQgeyBJZ25vcmUgfSBmcm9tICcuL2lnbm9yZS5qcyc7XG5pbXBvcnQgeyBQcm9jZXNzb3IgfSBmcm9tICcuL3Byb2Nlc3Nvci5qcyc7XG5jb25zdCBtYWtlSWdub3JlID0gKGlnbm9yZSwgb3B0cykgPT4gdHlwZW9mIGlnbm9yZSA9PT0gJ3N0cmluZycgPyBuZXcgSWdub3JlKFtpZ25vcmVdLCBvcHRzKVxuICAgIDogQXJyYXkuaXNBcnJheShpZ25vcmUpID8gbmV3IElnbm9yZShpZ25vcmUsIG9wdHMpXG4gICAgICAgIDogaWdub3JlO1xuLyoqXG4gKiBiYXNpYyB3YWxraW5nIHV0aWxpdGllcyB0aGF0IGFsbCB0aGUgZ2xvYiB3YWxrZXIgdHlwZXMgdXNlXG4gKi9cbmV4cG9ydCBjbGFzcyBHbG9iVXRpbCB7XG4gICAgcGF0aDtcbiAgICBwYXR0ZXJucztcbiAgICBvcHRzO1xuICAgIHNlZW4gPSBuZXcgU2V0KCk7XG4gICAgcGF1c2VkID0gZmFsc2U7XG4gICAgYWJvcnRlZCA9IGZhbHNlO1xuICAgICNvblJlc3VtZSA9IFtdO1xuICAgICNpZ25vcmU7XG4gICAgI3NlcDtcbiAgICBzaWduYWw7XG4gICAgbWF4RGVwdGg7XG4gICAgaW5jbHVkZUNoaWxkTWF0Y2hlcztcbiAgICBjb25zdHJ1Y3RvcihwYXR0ZXJucywgcGF0aCwgb3B0cykge1xuICAgICAgICB0aGlzLnBhdHRlcm5zID0gcGF0dGVybnM7XG4gICAgICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgICAgIHRoaXMuI3NlcCA9ICFvcHRzLnBvc2l4ICYmIG9wdHMucGxhdGZvcm0gPT09ICd3aW4zMicgPyAnXFxcXCcgOiAnLyc7XG4gICAgICAgIHRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyA9IG9wdHMuaW5jbHVkZUNoaWxkTWF0Y2hlcyAhPT0gZmFsc2U7XG4gICAgICAgIGlmIChvcHRzLmlnbm9yZSB8fCAhdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzKSB7XG4gICAgICAgICAgICB0aGlzLiNpZ25vcmUgPSBtYWtlSWdub3JlKG9wdHMuaWdub3JlID8/IFtdLCBvcHRzKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMuI2lnbm9yZS5hZGQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtID0gJ2Nhbm5vdCBpZ25vcmUgY2hpbGQgbWF0Y2hlcywgaWdub3JlIGxhY2tzIGFkZCgpIG1ldGhvZC4nO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBpZ25vcmUsIGFsd2F5cyBzZXQgd2l0aCBtYXhEZXB0aCwgYnV0IGl0J3Mgb3B0aW9uYWwgb24gdGhlXG4gICAgICAgIC8vIEdsb2JPcHRpb25zIHR5cGVcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIHRoaXMubWF4RGVwdGggPSBvcHRzLm1heERlcHRoIHx8IEluZmluaXR5O1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICBpZiAob3B0cy5zaWduYWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2lnbmFsID0gb3B0cy5zaWduYWw7XG4gICAgICAgICAgICB0aGlzLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLiNvblJlc3VtZS5sZW5ndGggPSAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI2lnbm9yZWQocGF0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWVuLmhhcyhwYXRoKSB8fCAhIXRoaXMuI2lnbm9yZT8uaWdub3JlZD8uKHBhdGgpO1xuICAgIH1cbiAgICAjY2hpbGRyZW5JZ25vcmVkKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy4jaWdub3JlPy5jaGlsZHJlbklnbm9yZWQ/LihwYXRoKTtcbiAgICB9XG4gICAgLy8gYmFja3ByZXNzdXJlIG1lY2hhbmlzbVxuICAgIHBhdXNlKCkge1xuICAgICAgICB0aGlzLnBhdXNlZCA9IHRydWU7XG4gICAgfVxuICAgIHJlc3VtZSgpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IGZuID0gdW5kZWZpbmVkO1xuICAgICAgICB3aGlsZSAoIXRoaXMucGF1c2VkICYmIChmbiA9IHRoaXMuI29uUmVzdW1lLnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uUmVzdW1lKGZuKSB7XG4gICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICghdGhpcy5wYXVzZWQpIHtcbiAgICAgICAgICAgIGZuKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgdGhpcy4jb25SZXN1bWUucHVzaChmbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gZG8gdGhlIHJlcXVpc2l0ZSByZWFscGF0aC9zdGF0IGNoZWNraW5nLCBhbmQgcmV0dXJuIHRoZSBwYXRoXG4gICAgLy8gdG8gYWRkIG9yIHVuZGVmaW5lZCB0byBmaWx0ZXIgaXQgb3V0LlxuICAgIGFzeW5jIG1hdGNoQ2hlY2soZSwgaWZEaXIpIHtcbiAgICAgICAgaWYgKGlmRGlyICYmIHRoaXMub3B0cy5ub2RpcilcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBycGM7XG4gICAgICAgIGlmICh0aGlzLm9wdHMucmVhbHBhdGgpIHtcbiAgICAgICAgICAgIHJwYyA9IGUucmVhbHBhdGhDYWNoZWQoKSB8fCAoYXdhaXQgZS5yZWFscGF0aCgpKTtcbiAgICAgICAgICAgIGlmICghcnBjKVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBlID0gcnBjO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5lZWRTdGF0ID0gZS5pc1Vua25vd24oKSB8fCB0aGlzLm9wdHMuc3RhdDtcbiAgICAgICAgY29uc3QgcyA9IG5lZWRTdGF0ID8gYXdhaXQgZS5sc3RhdCgpIDogZTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5mb2xsb3cgJiYgdGhpcy5vcHRzLm5vZGlyICYmIHM/LmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGF3YWl0IHMucmVhbHBhdGgoKTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgaWYgKHRhcmdldCAmJiAodGFyZ2V0LmlzVW5rbm93bigpIHx8IHRoaXMub3B0cy5zdGF0KSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRhcmdldC5sc3RhdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5tYXRjaENoZWNrVGVzdChzLCBpZkRpcik7XG4gICAgfVxuICAgIG1hdGNoQ2hlY2tUZXN0KGUsIGlmRGlyKSB7XG4gICAgICAgIHJldHVybiAoZSAmJlxuICAgICAgICAgICAgKHRoaXMubWF4RGVwdGggPT09IEluZmluaXR5IHx8IGUuZGVwdGgoKSA8PSB0aGlzLm1heERlcHRoKSAmJlxuICAgICAgICAgICAgKCFpZkRpciB8fCBlLmNhblJlYWRkaXIoKSkgJiZcbiAgICAgICAgICAgICghdGhpcy5vcHRzLm5vZGlyIHx8ICFlLmlzRGlyZWN0b3J5KCkpICYmXG4gICAgICAgICAgICAoIXRoaXMub3B0cy5ub2RpciB8fFxuICAgICAgICAgICAgICAgICF0aGlzLm9wdHMuZm9sbG93IHx8XG4gICAgICAgICAgICAgICAgIWUuaXNTeW1ib2xpY0xpbmsoKSB8fFxuICAgICAgICAgICAgICAgICFlLnJlYWxwYXRoQ2FjaGVkKCk/LmlzRGlyZWN0b3J5KCkpICYmXG4gICAgICAgICAgICAhdGhpcy4jaWdub3JlZChlKSkgP1xuICAgICAgICAgICAgZVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIG1hdGNoQ2hlY2tTeW5jKGUsIGlmRGlyKSB7XG4gICAgICAgIGlmIChpZkRpciAmJiB0aGlzLm9wdHMubm9kaXIpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcnBjO1xuICAgICAgICBpZiAodGhpcy5vcHRzLnJlYWxwYXRoKSB7XG4gICAgICAgICAgICBycGMgPSBlLnJlYWxwYXRoQ2FjaGVkKCkgfHwgZS5yZWFscGF0aFN5bmMoKTtcbiAgICAgICAgICAgIGlmICghcnBjKVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBlID0gcnBjO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5lZWRTdGF0ID0gZS5pc1Vua25vd24oKSB8fCB0aGlzLm9wdHMuc3RhdDtcbiAgICAgICAgY29uc3QgcyA9IG5lZWRTdGF0ID8gZS5sc3RhdFN5bmMoKSA6IGU7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZm9sbG93ICYmIHRoaXMub3B0cy5ub2RpciAmJiBzPy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBzLnJlYWxwYXRoU3luYygpO1xuICAgICAgICAgICAgaWYgKHRhcmdldCAmJiAodGFyZ2V0Py5pc1Vua25vd24oKSB8fCB0aGlzLm9wdHMuc3RhdCkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQubHN0YXRTeW5jKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hDaGVja1Rlc3QocywgaWZEaXIpO1xuICAgIH1cbiAgICBtYXRjaEZpbmlzaChlLCBhYnNvbHV0ZSkge1xuICAgICAgICBpZiAodGhpcy4jaWdub3JlZChlKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLy8gd2Uga25vdyB3ZSBoYXZlIGFuIGlnbm9yZSBpZiB0aGlzIGlzIGZhbHNlLCBidXQgVFMgZG9lc24ndFxuICAgICAgICBpZiAoIXRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyAmJiB0aGlzLiNpZ25vcmU/LmFkZCkge1xuICAgICAgICAgICAgY29uc3QgaWduID0gYCR7ZS5yZWxhdGl2ZVBvc2l4KCl9LyoqYDtcbiAgICAgICAgICAgIHRoaXMuI2lnbm9yZS5hZGQoaWduKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhYnMgPSB0aGlzLm9wdHMuYWJzb2x1dGUgPT09IHVuZGVmaW5lZCA/IGFic29sdXRlIDogdGhpcy5vcHRzLmFic29sdXRlO1xuICAgICAgICB0aGlzLnNlZW4uYWRkKGUpO1xuICAgICAgICBjb25zdCBtYXJrID0gdGhpcy5vcHRzLm1hcmsgJiYgZS5pc0RpcmVjdG9yeSgpID8gdGhpcy4jc2VwIDogJyc7XG4gICAgICAgIC8vIG9rLCB3ZSBoYXZlIHdoYXQgd2UgbmVlZCFcbiAgICAgICAgaWYgKHRoaXMub3B0cy53aXRoRmlsZVR5cGVzKSB7XG4gICAgICAgICAgICB0aGlzLm1hdGNoRW1pdChlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhYnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFicyA9IHRoaXMub3B0cy5wb3NpeCA/IGUuZnVsbHBhdGhQb3NpeCgpIDogZS5mdWxscGF0aCgpO1xuICAgICAgICAgICAgdGhpcy5tYXRjaEVtaXQoYWJzICsgbWFyayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZWwgPSB0aGlzLm9wdHMucG9zaXggPyBlLnJlbGF0aXZlUG9zaXgoKSA6IGUucmVsYXRpdmUoKTtcbiAgICAgICAgICAgIGNvbnN0IHByZSA9IHRoaXMub3B0cy5kb3RSZWxhdGl2ZSAmJiAhcmVsLnN0YXJ0c1dpdGgoJy4uJyArIHRoaXMuI3NlcCkgP1xuICAgICAgICAgICAgICAgICcuJyArIHRoaXMuI3NlcFxuICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoRW1pdCghcmVsID8gJy4nICsgbWFyayA6IHByZSArIHJlbCArIG1hcmspO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIG1hdGNoKGUsIGFic29sdXRlLCBpZkRpcikge1xuICAgICAgICBjb25zdCBwID0gYXdhaXQgdGhpcy5tYXRjaENoZWNrKGUsIGlmRGlyKTtcbiAgICAgICAgaWYgKHApXG4gICAgICAgICAgICB0aGlzLm1hdGNoRmluaXNoKHAsIGFic29sdXRlKTtcbiAgICB9XG4gICAgbWF0Y2hTeW5jKGUsIGFic29sdXRlLCBpZkRpcikge1xuICAgICAgICBjb25zdCBwID0gdGhpcy5tYXRjaENoZWNrU3luYyhlLCBpZkRpcik7XG4gICAgICAgIGlmIChwKVxuICAgICAgICAgICAgdGhpcy5tYXRjaEZpbmlzaChwLCBhYnNvbHV0ZSk7XG4gICAgfVxuICAgIHdhbGtDQih0YXJnZXQsIHBhdHRlcm5zLCBjYikge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy53YWxrQ0IyKHRhcmdldCwgcGF0dGVybnMsIG5ldyBQcm9jZXNzb3IodGhpcy5vcHRzKSwgY2IpO1xuICAgIH1cbiAgICB3YWxrQ0IyKHRhcmdldCwgcGF0dGVybnMsIHByb2Nlc3NvciwgY2IpIHtcbiAgICAgICAgaWYgKHRoaXMuI2NoaWxkcmVuSWdub3JlZCh0YXJnZXQpKVxuICAgICAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIGlmICh0aGlzLnBhdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5vblJlc3VtZSgoKSA9PiB0aGlzLndhbGtDQjIodGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLCBjYikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3Nvci5wcm9jZXNzUGF0dGVybnModGFyZ2V0LCBwYXR0ZXJucyk7XG4gICAgICAgIC8vIGRvbmUgcHJvY2Vzc2luZy4gIGFsbCBvZiB0aGUgYWJvdmUgaXMgc3luYywgY2FuIGJlIGFic3RyYWN0ZWQgb3V0LlxuICAgICAgICAvLyBzdWJ3YWxrcyBpcyBhIG1hcCBvZiBwYXRocyB0byB0aGUgZW50cnkgZmlsdGVycyB0aGV5IG5lZWRcbiAgICAgICAgLy8gbWF0Y2hlcyBpcyBhIG1hcCBvZiBwYXRocyB0byBbYWJzb2x1dGUsIGlmRGlyXSB0dXBsZXMuXG4gICAgICAgIGxldCB0YXNrcyA9IDE7XG4gICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoLS10YXNrcyA9PT0gMClcbiAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IFttLCBhYnNvbHV0ZSwgaWZEaXJdIG9mIHByb2Nlc3Nvci5tYXRjaGVzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lnbm9yZWQobSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB0YXNrcysrO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChtLCBhYnNvbHV0ZSwgaWZEaXIpLnRoZW4oKCkgPT4gbmV4dCgpKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHQgb2YgcHJvY2Vzc29yLnN1YndhbGtUYXJnZXRzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSAmJiB0LmRlcHRoKCkgPj0gdGhpcy5tYXhEZXB0aCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuQ2FjaGVkID0gdC5yZWFkZGlyQ2FjaGVkKCk7XG4gICAgICAgICAgICBpZiAodC5jYWxsZWRSZWFkZGlyKCkpXG4gICAgICAgICAgICAgICAgdGhpcy53YWxrQ0IzKHQsIGNoaWxkcmVuQ2FjaGVkLCBwcm9jZXNzb3IsIG5leHQpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdC5yZWFkZGlyQ0IoKF8sIGVudHJpZXMpID0+IHRoaXMud2Fsa0NCMyh0LCBlbnRyaWVzLCBwcm9jZXNzb3IsIG5leHQpLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfVxuICAgIHdhbGtDQjModGFyZ2V0LCBlbnRyaWVzLCBwcm9jZXNzb3IsIGNiKSB7XG4gICAgICAgIHByb2Nlc3NvciA9IHByb2Nlc3Nvci5maWx0ZXJFbnRyaWVzKHRhcmdldCwgZW50cmllcyk7XG4gICAgICAgIGxldCB0YXNrcyA9IDE7XG4gICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoLS10YXNrcyA9PT0gMClcbiAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IFttLCBhYnNvbHV0ZSwgaWZEaXJdIG9mIHByb2Nlc3Nvci5tYXRjaGVzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI2lnbm9yZWQobSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB0YXNrcysrO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChtLCBhYnNvbHV0ZSwgaWZEaXIpLnRoZW4oKCkgPT4gbmV4dCgpKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFt0YXJnZXQsIHBhdHRlcm5zXSBvZiBwcm9jZXNzb3Iuc3Vid2Fsa3MuZW50cmllcygpKSB7XG4gICAgICAgICAgICB0YXNrcysrO1xuICAgICAgICAgICAgdGhpcy53YWxrQ0IyKHRhcmdldCwgcGF0dGVybnMsIHByb2Nlc3Nvci5jaGlsZCgpLCBuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfVxuICAgIHdhbGtDQlN5bmModGFyZ2V0LCBwYXR0ZXJucywgY2IpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRoaXMud2Fsa0NCMlN5bmModGFyZ2V0LCBwYXR0ZXJucywgbmV3IFByb2Nlc3Nvcih0aGlzLm9wdHMpLCBjYik7XG4gICAgfVxuICAgIHdhbGtDQjJTeW5jKHRhcmdldCwgcGF0dGVybnMsIHByb2Nlc3NvciwgY2IpIHtcbiAgICAgICAgaWYgKHRoaXMuI2NoaWxkcmVuSWdub3JlZCh0YXJnZXQpKVxuICAgICAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIGlmICh0aGlzLnBhdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5vblJlc3VtZSgoKSA9PiB0aGlzLndhbGtDQjJTeW5jKHRhcmdldCwgcGF0dGVybnMsIHByb2Nlc3NvciwgY2IpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzb3IucHJvY2Vzc1BhdHRlcm5zKHRhcmdldCwgcGF0dGVybnMpO1xuICAgICAgICAvLyBkb25lIHByb2Nlc3NpbmcuICBhbGwgb2YgdGhlIGFib3ZlIGlzIHN5bmMsIGNhbiBiZSBhYnN0cmFjdGVkIG91dC5cbiAgICAgICAgLy8gc3Vid2Fsa3MgaXMgYSBtYXAgb2YgcGF0aHMgdG8gdGhlIGVudHJ5IGZpbHRlcnMgdGhleSBuZWVkXG4gICAgICAgIC8vIG1hdGNoZXMgaXMgYSBtYXAgb2YgcGF0aHMgdG8gW2Fic29sdXRlLCBpZkRpcl0gdHVwbGVzLlxuICAgICAgICBsZXQgdGFza3MgPSAxO1xuICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKC0tdGFza3MgPT09IDApXG4gICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBbbSwgYWJzb2x1dGUsIGlmRGlyXSBvZiBwcm9jZXNzb3IubWF0Y2hlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNpZ25vcmVkKG0pKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGhpcy5tYXRjaFN5bmMobSwgYWJzb2x1dGUsIGlmRGlyKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHQgb2YgcHJvY2Vzc29yLnN1YndhbGtUYXJnZXRzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSAmJiB0LmRlcHRoKCkgPj0gdGhpcy5tYXhEZXB0aCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdC5yZWFkZGlyU3luYygpO1xuICAgICAgICAgICAgdGhpcy53YWxrQ0IzU3luYyh0LCBjaGlsZHJlbiwgcHJvY2Vzc29yLCBuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfVxuICAgIHdhbGtDQjNTeW5jKHRhcmdldCwgZW50cmllcywgcHJvY2Vzc29yLCBjYikge1xuICAgICAgICBwcm9jZXNzb3IgPSBwcm9jZXNzb3IuZmlsdGVyRW50cmllcyh0YXJnZXQsIGVudHJpZXMpO1xuICAgICAgICBsZXQgdGFza3MgPSAxO1xuICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKC0tdGFza3MgPT09IDApXG4gICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBbbSwgYWJzb2x1dGUsIGlmRGlyXSBvZiBwcm9jZXNzb3IubWF0Y2hlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNpZ25vcmVkKG0pKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGhpcy5tYXRjaFN5bmMobSwgYWJzb2x1dGUsIGlmRGlyKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFt0YXJnZXQsIHBhdHRlcm5zXSBvZiBwcm9jZXNzb3Iuc3Vid2Fsa3MuZW50cmllcygpKSB7XG4gICAgICAgICAgICB0YXNrcysrO1xuICAgICAgICAgICAgdGhpcy53YWxrQ0IyU3luYyh0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IuY2hpbGQoKSwgbmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBHbG9iV2Fsa2VyIGV4dGVuZHMgR2xvYlV0aWwge1xuICAgIG1hdGNoZXMgPSBuZXcgU2V0KCk7XG4gICAgY29uc3RydWN0b3IocGF0dGVybnMsIHBhdGgsIG9wdHMpIHtcbiAgICAgICAgc3VwZXIocGF0dGVybnMsIHBhdGgsIG9wdHMpO1xuICAgIH1cbiAgICBtYXRjaEVtaXQoZSkge1xuICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKGUpO1xuICAgIH1cbiAgICBhc3luYyB3YWxrKCkge1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICB0aHJvdyB0aGlzLnNpZ25hbC5yZWFzb247XG4gICAgICAgIGlmICh0aGlzLnBhdGguaXNVbmtub3duKCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucGF0aC5sc3RhdCgpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgdGhpcy53YWxrQ0IodGhpcy5wYXRoLCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlaih0aGlzLnNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzKHRoaXMubWF0Y2hlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXRjaGVzO1xuICAgIH1cbiAgICB3YWxrU3luYygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgdGhyb3cgdGhpcy5zaWduYWwucmVhc29uO1xuICAgICAgICBpZiAodGhpcy5wYXRoLmlzVW5rbm93bigpKSB7XG4gICAgICAgICAgICB0aGlzLnBhdGgubHN0YXRTeW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm90aGluZyBmb3IgdGhlIGNhbGxiYWNrIHRvIGRvLCBiZWNhdXNlIHRoaXMgbmV2ZXIgcGF1c2VzXG4gICAgICAgIHRoaXMud2Fsa0NCU3luYyh0aGlzLnBhdGgsIHRoaXMucGF0dGVybnMsICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgICAgICB0aHJvdyB0aGlzLnNpZ25hbC5yZWFzb247XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXRjaGVzO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBHbG9iU3RyZWFtIGV4dGVuZHMgR2xvYlV0aWwge1xuICAgIHJlc3VsdHM7XG4gICAgY29uc3RydWN0b3IocGF0dGVybnMsIHBhdGgsIG9wdHMpIHtcbiAgICAgICAgc3VwZXIocGF0dGVybnMsIHBhdGgsIG9wdHMpO1xuICAgICAgICB0aGlzLnJlc3VsdHMgPSBuZXcgTWluaXBhc3Moe1xuICAgICAgICAgICAgc2lnbmFsOiB0aGlzLnNpZ25hbCxcbiAgICAgICAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc3VsdHMub24oJ2RyYWluJywgKCkgPT4gdGhpcy5yZXN1bWUoKSk7XG4gICAgICAgIHRoaXMucmVzdWx0cy5vbigncmVzdW1lJywgKCkgPT4gdGhpcy5yZXN1bWUoKSk7XG4gICAgfVxuICAgIG1hdGNoRW1pdChlKSB7XG4gICAgICAgIHRoaXMucmVzdWx0cy53cml0ZShlKTtcbiAgICAgICAgaWYgKCF0aGlzLnJlc3VsdHMuZmxvd2luZylcbiAgICAgICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICB9XG4gICAgc3RyZWFtKCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnBhdGg7XG4gICAgICAgIGlmICh0YXJnZXQuaXNVbmtub3duKCkpIHtcbiAgICAgICAgICAgIHRhcmdldC5sc3RhdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMud2Fsa0NCKHRhcmdldCwgdGhpcy5wYXR0ZXJucywgKCkgPT4gdGhpcy5yZXN1bHRzLmVuZCgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53YWxrQ0IodGFyZ2V0LCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB0aGlzLnJlc3VsdHMuZW5kKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHM7XG4gICAgfVxuICAgIHN0cmVhbVN5bmMoKSB7XG4gICAgICAgIGlmICh0aGlzLnBhdGguaXNVbmtub3duKCkpIHtcbiAgICAgICAgICAgIHRoaXMucGF0aC5sc3RhdFN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndhbGtDQlN5bmModGhpcy5wYXRoLCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB0aGlzLnJlc3VsdHMuZW5kKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdhbGtlci5qcy5tYXAiLAogICAgImltcG9ydCB7IE1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBwYXR0ZXJucyBwcm92aWRlZCBjb250YWluIGFueSBtYWdpYyBnbG9iIGNoYXJhY3RlcnMsXG4gKiBnaXZlbiB0aGUgb3B0aW9ucyBwcm92aWRlZC5cbiAqXG4gKiBCcmFjZSBleHBhbnNpb24gaXMgbm90IGNvbnNpZGVyZWQgXCJtYWdpY1wiIHVubGVzcyB0aGUgYG1hZ2ljYWxCcmFjZXNgIG9wdGlvblxuICogaXMgc2V0LCBhcyBicmFjZSBleHBhbnNpb24ganVzdCB0dXJucyBvbmUgc3RyaW5nIGludG8gYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIFNvIGEgcGF0dGVybiBsaWtlIGAneHthLGJ9eSdgIHdvdWxkIHJldHVybiBgZmFsc2VgLCBiZWNhdXNlIGAneGF5J2AgYW5kXG4gKiBgJ3hieSdgIGJvdGggZG8gbm90IGNvbnRhaW4gYW55IG1hZ2ljIGdsb2IgY2hhcmFjdGVycywgYW5kIGl0J3MgdHJlYXRlZCB0aGVcbiAqIHNhbWUgYXMgaWYgeW91IGhhZCBjYWxsZWQgaXQgb24gYFsneGF5JywgJ3hieSddYC4gV2hlbiBgbWFnaWNhbEJyYWNlczp0cnVlYFxuICogaXMgaW4gdGhlIG9wdGlvbnMsIGJyYWNlIGV4cGFuc2lvbiBfaXNfIHRyZWF0ZWQgYXMgYSBwYXR0ZXJuIGhhdmluZyBtYWdpYy5cbiAqL1xuZXhwb3J0IGNvbnN0IGhhc01hZ2ljID0gKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwYXR0ZXJuKSkge1xuICAgICAgICBwYXR0ZXJuID0gW3BhdHRlcm5dO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHAgb2YgcGF0dGVybikge1xuICAgICAgICBpZiAobmV3IE1pbmltYXRjaChwLCBvcHRpb25zKS5oYXNNYWdpYygpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYXMtbWFnaWMuanMubWFwIiwKICAgICJpbXBvcnQgeyBlc2NhcGUsIHVuZXNjYXBlIH0gZnJvbSAnbWluaW1hdGNoJztcbmltcG9ydCB7IEdsb2IgfSBmcm9tICcuL2dsb2IuanMnO1xuaW1wb3J0IHsgaGFzTWFnaWMgfSBmcm9tICcuL2hhcy1tYWdpYy5qcyc7XG5leHBvcnQgeyBlc2NhcGUsIHVuZXNjYXBlIH0gZnJvbSAnbWluaW1hdGNoJztcbmV4cG9ydCB7IEdsb2IgfSBmcm9tICcuL2dsb2IuanMnO1xuZXhwb3J0IHsgaGFzTWFnaWMgfSBmcm9tICcuL2hhcy1tYWdpYy5qcyc7XG5leHBvcnQgeyBJZ25vcmUgfSBmcm9tICcuL2lnbm9yZS5qcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2xvYlN0cmVhbVN5bmMocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBHbG9iKHBhdHRlcm4sIG9wdGlvbnMpLnN0cmVhbVN5bmMoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnbG9iU3RyZWFtKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgR2xvYihwYXR0ZXJuLCBvcHRpb25zKS5zdHJlYW0oKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnbG9iU3luYyhwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gbmV3IEdsb2IocGF0dGVybiwgb3B0aW9ucykud2Fsa1N5bmMoKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdsb2JfKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgR2xvYihwYXR0ZXJuLCBvcHRpb25zKS53YWxrKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2xvYkl0ZXJhdGVTeW5jKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgR2xvYihwYXR0ZXJuLCBvcHRpb25zKS5pdGVyYXRlU3luYygpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdsb2JJdGVyYXRlKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgR2xvYihwYXR0ZXJuLCBvcHRpb25zKS5pdGVyYXRlKCk7XG59XG4vLyBhbGlhc2VzOiBnbG9iLnN5bmMuc3RyZWFtKCkgZ2xvYi5zdHJlYW0uc3luYygpIGdsb2Iuc3luYygpIGV0Y1xuZXhwb3J0IGNvbnN0IHN0cmVhbVN5bmMgPSBnbG9iU3RyZWFtU3luYztcbmV4cG9ydCBjb25zdCBzdHJlYW0gPSBPYmplY3QuYXNzaWduKGdsb2JTdHJlYW0sIHsgc3luYzogZ2xvYlN0cmVhbVN5bmMgfSk7XG5leHBvcnQgY29uc3QgaXRlcmF0ZVN5bmMgPSBnbG9iSXRlcmF0ZVN5bmM7XG5leHBvcnQgY29uc3QgaXRlcmF0ZSA9IE9iamVjdC5hc3NpZ24oZ2xvYkl0ZXJhdGUsIHtcbiAgICBzeW5jOiBnbG9iSXRlcmF0ZVN5bmMsXG59KTtcbmV4cG9ydCBjb25zdCBzeW5jID0gT2JqZWN0LmFzc2lnbihnbG9iU3luYywge1xuICAgIHN0cmVhbTogZ2xvYlN0cmVhbVN5bmMsXG4gICAgaXRlcmF0ZTogZ2xvYkl0ZXJhdGVTeW5jLFxufSk7XG5leHBvcnQgY29uc3QgZ2xvYiA9IE9iamVjdC5hc3NpZ24oZ2xvYl8sIHtcbiAgICBnbG9iOiBnbG9iXyxcbiAgICBnbG9iU3luYyxcbiAgICBzeW5jLFxuICAgIGdsb2JTdHJlYW0sXG4gICAgc3RyZWFtLFxuICAgIGdsb2JTdHJlYW1TeW5jLFxuICAgIHN0cmVhbVN5bmMsXG4gICAgZ2xvYkl0ZXJhdGUsXG4gICAgaXRlcmF0ZSxcbiAgICBnbG9iSXRlcmF0ZVN5bmMsXG4gICAgaXRlcmF0ZVN5bmMsXG4gICAgR2xvYixcbiAgICBoYXNNYWdpYyxcbiAgICBlc2NhcGUsXG4gICAgdW5lc2NhcGUsXG59KTtcbmdsb2IuZ2xvYiA9IGdsb2I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgImltcG9ydCB7IGdsb2IgfSBmcm9tIFwiZ2xvYlwiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGVudiB9IGZyb20gXCJub2RlOnByb2Nlc3NcIjtcbmltcG9ydCB0eXBlIHsgTWlsa2lvQWRhcHRlciwgVml0ZUlucHV0LCBWaXRlT3V0cHV0IH0gZnJvbSBcIi4vaW5kZXgudHNcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcblxuY29uc3QgYWRhcHRlck5hbWUgPSBcImVkZ2Utb25lXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBlZGdlT25lQWRhcHRlcigpOiBNaWxraW9BZGFwdGVyIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBhZGFwdGVyTmFtZSxcbiAgICBhZGFwdGVyOiBhc3luYyAob3B0aW9uczoge30pID0+IHtcbiAgICAgIC8qKlxuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKiBAc3RlcCBpbnB1dFxuICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IGlucHV0OiBWaXRlSW5wdXQgPSB7fTtcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBnbG9iKFwibW9kdWxlcy8qKi8qLnthY3Rpb24sc3RyZWFtfS50c1wiKTtcbiAgICAgIGNvbnN0IHRhc2tzOiBBcnJheTxQcm9taXNlPHZvaWQ+PiA9IFtdO1xuICAgICAgZm9yIChjb25zdCBtb2R1bGVQYXRoIG9mIHJlc3VsdHMpIHtcbiAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aFNwbGl0ID0gbW9kdWxlUGF0aFxuICAgICAgICAgICAgICAucmVwbGFjZUFsbChcIlxcXFxcIiwgXCIvXCIpXG4gICAgICAgICAgICAgIC5zbGljZSgwLCBtb2R1bGVQYXRoLmxlbmd0aCAtIDEwKSAvLyAxMCA9PT0gXCIuYWN0aW9uLnRzXCIubGVuZ3RoIG9yIFwiLnN0cmVhbS50c1wiLmxlbmd0aFxuICAgICAgICAgICAgICAuc3BsaXQoXCIvXCIpXG4gICAgICAgICAgICAgIC5zbGljZSgxKTtcbiAgICAgICAgICAgIGNvbnN0IGxldmVsID0gcGF0aFNwbGl0Lmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBwYXRoU3BsaXQuam9pbihcIi9cIik7XG4gICAgICAgICAgICBjb25zdCBiYWNrVG9Sb290ID0gXCIuLi9cIi5yZXBlYXQobGV2ZWwgKyAxKTtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlc0ZvbGRlciA9IGAubWlsa2lvL2dlbmVyYXRlZC9yb3V0ZXMvbW9kdWxlX18ke3BhdGgucmVwbGFjZUFsbChcIi9cIiwgXCJfX1wiKS5yZXBsYWNlQWxsKFwiLVwiLCBcIl9cIil9YDtcblxuICAgICAgICAgICAgLy8gVHJhdmVyc2UgdGhlIHJvdXRlcyBnZW5lcmF0ZWQgaW4gdGhlIGRpcmVjdG9yeSBhbmQgc2VsZWN0IHRoZSBsYXRlc3QgcGllY2Ugb2YgZGF0YVxuICAgICAgICAgICAgY29uc3Qgcm91dGVzRm9sZGVyRmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHJvdXRlc0ZvbGRlcik7XG4gICAgICAgICAgICBpZiAocm91dGVzRm9sZGVyRmlsZXMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoYE5vIHJvdXRlcyBmb3VuZCBpbiAke3JvdXRlc0ZvbGRlcn1gKTtcbiAgICAgICAgICAgIC8vIFJldHJpZXZlIHRoZSBmdWxsIHBhdGhzIGFuZCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgYWxsIGZpbGVzXG4gICAgICAgICAgICBjb25zdCBmaWxlc1dpdGhTdGF0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICByb3V0ZXNGb2xkZXJGaWxlcy5tYXAoYXN5bmMgKGZpbGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4ocm91dGVzRm9sZGVyLCBmaWxlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZzLnN0YXQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGZpbGVQYXRoLCBiaXJ0aFRpbWU6IHN0YXRzLmJpcnRodGltZSB9O1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCByb3V0ZVBhdGggPSBmaWxlc1dpdGhTdGF0cy5zb3J0KChhLCBiKSA9PiBiLmJpcnRoVGltZS5nZXRUaW1lKCkgLSBhLmJpcnRoVGltZS5nZXRUaW1lKCkpLmF0KDApPy5maWxlUGF0aDtcbiAgICAgICAgICAgIGlmICghcm91dGVQYXRoKSB0aHJvdyBuZXcgRXJyb3IoYE5vIHJvdXRlcyBmb3VuZCBpbiAke3JvdXRlc0ZvbGRlcn1gKTtcblxuICAgICAgICAgICAgY29uc3QgZ2VuZXJhdGVkUGF0aCA9IGAubWlsa2lvLyR7YWRhcHRlck5hbWV9LyR7cGF0aH0udHNgO1xuICAgICAgICAgICAgYXdhaXQgZnMub3V0cHV0RmlsZShcbiAgICAgICAgICAgICAgZ2VuZXJhdGVkUGF0aCxcbiAgICAgICAgICAgICAgYGltcG9ydCB7IGNyZWF0ZSB9IGZyb20gXCIke2JhY2tUb1Jvb3R9aW5kZXgudHNcIjtcbmltcG9ydCByb3V0ZVNjaGVtYSBmcm9tIFwiJHtiYWNrVG9Sb290fSR7cm91dGVQYXRoLnJlcGxhY2VBbGwoXCJcXFxcXCIsIFwiL1wiKX1cIjtcblxuY29uc3Qgd29ybGQgPSBjcmVhdGUoe1xuICBkZXZlbG9wOiAke2Vudi5DT09LQk9PS19ERVZFTE9QID09PSBcIkVOQUJMRVwiID8gXCJ0cnVlXCIgOiBcImZhbHNlXCJ9LFxufSk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvblJlcXVlc3QoY29udGV4dCkge1xuICByZXR1cm4gYXdhaXQgKGF3YWl0IHdvcmxkKS5saXN0ZW5lci5mZXRjaCh7XG4gICAgcmVxdWVzdDogY29udGV4dC5yZXF1ZXN0LFxuICAgIGVudjogY29udGV4dC5lbnYsXG4gICAgZW52TW9kZTogXCIke2Vudi5NT0RFID8/IFwiZGV2ZWxvcG1lbnRcIn1cIixcbiAgICByb3V0ZVNjaGVtYSxcbiAgfSk7XG59YCxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlucHV0W3BhdGhdID0gZ2VuZXJhdGVkUGF0aDtcbiAgICAgICAgICB9KSgpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGFza3MpO1xuXG4gICAgICAvKipcbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICogQHN0ZXAgb3V0cHV0XG4gICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAqL1xuICAgICAgY29uc3Qgb3V0cHV0OiBWaXRlT3V0cHV0ID0ge307XG4gICAgICBvdXRwdXQuZW50cnlGaWxlTmFtZXMgPSBcImZ1bmN0aW9ucy9bbmFtZV0uanNcIjtcbiAgICAgIG91dHB1dC5jaHVua0ZpbGVOYW1lcyA9IFwiZnVuY3Rpb25zLy5taWxraW8vW25hbWVdLVtoYXNoXS5qc1wiO1xuICAgICAgb3V0cHV0LmFzc2V0RmlsZU5hbWVzID0gXCJmdW5jdGlvbnMvLm1pbGtpby9bbmFtZV0tW2hhc2hdW2V4dG5hbWVdXCI7XG4gICAgICBvdXRwdXQuc291cmNlbWFwID0gXCJpbmxpbmVcIjtcbiAgICAgIG91dHB1dC5wcmVzZXJ2ZU1vZHVsZXMgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHsgaW5wdXQsIG91dHB1dCB9O1xuICAgIH0sXG4gIH0gc2F0aXNmaWVzIE1pbGtpb0FkYXB0ZXI7XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgVXNlckNvbmZpZyB9IGZyb20gXCJ2aXRlXCI7XG5pbXBvcnQgeyBlZGdlT25lQWRhcHRlciB9IGZyb20gXCIuL2VkZ2Utb25lLnRzXCI7XG5cbmV4cG9ydCB0eXBlIFZpdGVJbnB1dCA9IEV4Y2x1ZGU8RXhjbHVkZTxVc2VyQ29uZmlnW1wiYnVpbGRcIl0sIHVuZGVmaW5lZD5bXCJyb2xsdXBPcHRpb25zXCJdLCB1bmRlZmluZWQ+W1wiaW5wdXRcIl07XG5leHBvcnQgdHlwZSBWaXRlT3V0cHV0ID0gRXhjbHVkZTxFeGNsdWRlPFVzZXJDb25maWdbXCJidWlsZFwiXSwgdW5kZWZpbmVkPltcInJvbGx1cE9wdGlvbnNcIl0sIHVuZGVmaW5lZD5bXCJvdXRwdXRcIl07XG5cbmV4cG9ydCB0eXBlIE1pbGtpb0FkYXB0ZXIgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgYWRhcHRlcjogKG9wdGlvbnM6IHt9KSA9PiBQcm9taXNlPHtcbiAgICBpbnB1dDogVml0ZUlucHV0O1xuICAgIG91dHB1dDogVml0ZU91dHB1dDtcbiAgfT47XG59O1xuXG5leHBvcnQgY29uc3QgYWRhcHRlcnM6IEFycmF5PE1pbGtpb0FkYXB0ZXI+ID0gW2VkZ2VPbmVBZGFwdGVyKCldO1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBQ0EsSUFBTSxZQUFZO0FBQUE7QUFBQSxFQUNsQixNQUFNLG9CQUFvQixNQUFNO0FBQUEsSUFFOUIsV0FBWSxDQUFDLEtBQUssVUFBVSxZQUFZO0FBQUEsTUFDdEMsTUFBTSxtQkFB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RSxFQUFDO0FBQUEsSUFBRTtBQUFBO0FBQUEsRUFBRSxlQUFlLENBQUMsR0FBRTtBQUFBLElBQUMsT0FBTyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUUsSUFBRSxJQUFFO0FBQUE7QUFBQSxFQUFFLEVBQUUsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRSxJQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7QUFBQSxJQUFFLEtBQUssS0FBRyxHQUFFLEtBQUssS0FBRztBQUFBLElBQUUsSUFBSSxJQUFFLEtBQUssZUFBYSxNQUFNLEtBQUssRUFBQyxRQUFPLEtBQUssR0FBRSxDQUFDLElBQU87QUFBQSxJQUFFLEtBQUssS0FBRyxHQUFFLEtBQUssS0FBRyxDQUFDLEdBQUUsR0FBRSxJQUFFLEtBQUssR0FBRyxJQUFJLE1BQUk7QUFBQSxNQUFDLEVBQUUsS0FBRyxNQUFJLElBQUUsSUFBRSxHQUFFLEVBQUUsS0FBRyxHQUFFLEVBQUUsR0FBRSxDQUFDO0FBQUEsT0FBRyxLQUFLLEtBQUcsT0FBRztBQUFBLE1BQUMsRUFBRSxLQUFHLEVBQUUsT0FBSyxJQUFFLEtBQUssR0FBRyxJQUFJLElBQUUsR0FBRSxFQUFFLEdBQUUsRUFBRSxFQUFFO0FBQUE7QUFBQSxJQUFHLElBQUksSUFBRSxLQUFLLGVBQWEsQ0FBQyxHQUFFLE1BQUk7QUFBQSxNQUFDLElBQUcsSUFBSSxPQUFLLGFBQWEsRUFBRSxFQUFFLEdBQUUsRUFBRSxLQUFRLFlBQUcsS0FBRyxNQUFJLEtBQUcsR0FBRTtBQUFBLFFBQUMsSUFBSSxJQUFFLFdBQVcsTUFBSTtBQUFBLFVBQUMsS0FBSyxHQUFHLENBQUMsS0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUcsUUFBUTtBQUFBLFdBQUcsSUFBRSxDQUFDO0FBQUEsUUFBRSxFQUFFLFNBQU8sRUFBRSxNQUFNLEdBQUUsRUFBRSxLQUFHO0FBQUEsTUFBQztBQUFBLFFBQUcsTUFBSTtBQUFBLElBQUcsS0FBSyxLQUFHLENBQUMsR0FBRSxNQUFJO0FBQUEsTUFBQyxJQUFHLEVBQUUsSUFBRztBQUFBLFFBQUMsSUFBSSxJQUFFLEVBQUUsSUFBRyxJQUFFLEVBQUU7QUFBQSxRQUFHLElBQUcsQ0FBQyxLQUFHLENBQUM7QUFBQSxVQUFFO0FBQUEsUUFBTyxFQUFFLE1BQUksR0FBRSxFQUFFLFFBQU0sR0FBRSxFQUFFLE1BQUksS0FBRyxFQUFFO0FBQUEsUUFBRSxJQUFJLElBQUUsRUFBRSxNQUFJO0FBQUEsUUFBRSxFQUFFLGVBQWEsSUFBRTtBQUFBLE1BQUM7QUFBQTtBQUFBLElBQUcsSUFBSSxJQUFFLEdBQUUsSUFBRSxNQUFJO0FBQUEsTUFBQyxJQUFJLElBQUUsS0FBSyxHQUFHLElBQUk7QUFBQSxNQUFFLElBQUcsS0FBSyxnQkFBYyxHQUFFO0FBQUEsUUFBQyxJQUFFO0FBQUEsUUFBRSxJQUFJLElBQUUsV0FBVyxNQUFJLElBQUUsR0FBRSxLQUFLLGFBQWE7QUFBQSxRQUFFLEVBQUUsU0FBTyxFQUFFLE1BQU07QUFBQSxNQUFDO0FBQUEsTUFBQyxPQUFPO0FBQUE7QUFBQSxJQUFHLEtBQUssa0JBQWdCLE9BQUc7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQUEsTUFBRSxJQUFHLE1BQVM7QUFBQSxRQUFFLE9BQU87QUFBQSxNQUFFLElBQUksSUFBRSxFQUFFLElBQUcsSUFBRSxFQUFFO0FBQUEsTUFBRyxJQUFHLENBQUMsS0FBRyxDQUFDO0FBQUEsUUFBRSxPQUFPLElBQUU7QUFBQSxNQUFFLElBQUksS0FBRyxLQUFHLEVBQUUsS0FBRztBQUFBLE1BQUUsT0FBTyxJQUFFO0FBQUEsT0FBRyxLQUFLLEtBQUcsT0FBRztBQUFBLE1BQUMsSUFBSSxJQUFFLEVBQUUsSUFBRyxJQUFFLEVBQUU7QUFBQSxNQUFHLE9BQU0sQ0FBQyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE1BQUksS0FBRyxFQUFFLEtBQUcsSUFBRTtBQUFBO0FBQUE7QUFBQSxFQUFHLEtBQUcsTUFBSTtBQUFBLEVBQUcsS0FBRyxNQUFJO0FBQUEsRUFBRyxLQUFHLE1BQUk7QUFBQSxFQUFHLEtBQUcsTUFBSTtBQUFBLEVBQUcsRUFBRSxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUFBLElBQUUsS0FBSyxLQUFHLEdBQUUsS0FBSyxLQUFHLEdBQUUsS0FBSyxLQUFHLE9BQUc7QUFBQSxNQUFDLEtBQUssTUFBSSxFQUFFLElBQUcsRUFBRSxLQUFHO0FBQUEsT0FBRyxLQUFLLEtBQUcsQ0FBQyxHQUFFLEdBQUUsR0FBRSxNQUFJO0FBQUEsTUFBQyxJQUFHLENBQUMsRUFBRSxDQUFDLEdBQUU7QUFBQSxRQUFDLElBQUcsS0FBSyxHQUFHLENBQUM7QUFBQSxVQUFFLE9BQU8sS0FBSztBQUFBLFFBQW9CLElBQUcsR0FBRTtBQUFBLFVBQUMsSUFBRyxPQUFPLEtBQUc7QUFBQSxZQUFXLE1BQU0sSUFBSSxVQUFVLG9DQUFvQztBQUFBLFVBQUUsSUFBRyxJQUFFLEVBQUUsR0FBRSxDQUFDLEdBQUUsQ0FBQyxFQUFFLENBQUM7QUFBQSxZQUFFLE1BQU0sSUFBSSxVQUFVLDBEQUEwRDtBQUFBLFFBQUMsRUFBTTtBQUFBLGdCQUFNLElBQUksVUFBVSwySEFBMkg7QUFBQSxNQUFDO0FBQUEsTUFBQyxPQUFPO0FBQUEsT0FBRyxLQUFLLEtBQUcsQ0FBQyxHQUFFLEdBQUUsTUFBSTtBQUFBLE1BQUMsSUFBRyxFQUFFLEtBQUcsR0FBRSxLQUFLLElBQUc7QUFBQSxRQUFDLElBQUksSUFBRSxLQUFLLEtBQUcsRUFBRTtBQUFBLFFBQUcsTUFBSyxLQUFLLEtBQUc7QUFBQSxVQUFHLEtBQUssR0FBRyxJQUFFO0FBQUEsTUFBQztBQUFBLE1BQUMsS0FBSyxNQUFJLEVBQUUsSUFBRyxNQUFJLEVBQUUsWUFBVSxHQUFFLEVBQUUsc0JBQW9CLEtBQUs7QUFBQTtBQUFBO0FBQUEsRUFBSyxLQUFHLE9BQUc7QUFBQSxFQUFHLEtBQUcsQ0FBQyxHQUFFLEdBQUUsTUFBSTtBQUFBLEVBQUcsS0FBRyxDQUFDLEdBQUUsR0FBRSxHQUFFLE1BQUk7QUFBQSxJQUFDLElBQUcsS0FBRztBQUFBLE1BQUUsTUFBTSxJQUFJLFVBQVUsa0VBQWtFO0FBQUEsSUFBRSxPQUFPO0FBQUE7QUFBQSxHQUFJLEVBQUUsR0FBRSxZQUFXLElBQUUsS0FBSyxlQUFZLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBRyxLQUFLO0FBQUEsTUFBRyxTQUFRLElBQUUsS0FBSyxHQUFHLEtBQUssR0FBRyxDQUFDLE9BQUssS0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLE9BQUssTUFBTSxJQUFHLE1BQUksS0FBSztBQUFBLFFBQUssSUFBRSxLQUFLLEdBQUc7QUFBQTtBQUFBLEdBQUksRUFBRSxHQUFFLFlBQVcsSUFBRSxLQUFLLGVBQVksQ0FBQyxHQUFFO0FBQUEsSUFBQyxJQUFHLEtBQUs7QUFBQSxNQUFHLFNBQVEsSUFBRSxLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUMsT0FBSyxLQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsT0FBSyxNQUFNLElBQUcsTUFBSSxLQUFLO0FBQUEsUUFBSyxJQUFFLEtBQUssR0FBRztBQUFBO0FBQUEsRUFBRyxFQUFFLENBQUMsR0FBRTtBQUFBLElBQUMsT0FBTyxNQUFTLGFBQUcsS0FBSyxHQUFHLElBQUksS0FBSyxHQUFHLEVBQUUsTUFBSTtBQUFBO0FBQUEsR0FBRyxPQUFPLEdBQUU7QUFBQSxJQUFDLFNBQVEsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUFFLEtBQUssR0FBRyxPQUFVLGFBQUcsS0FBSyxHQUFHLE9BQVUsYUFBRyxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsRUFBRSxNQUFJLE1BQUssQ0FBQyxLQUFLLEdBQUcsSUFBRyxLQUFLLEdBQUcsRUFBRTtBQUFBO0FBQUEsR0FBSSxRQUFRLEdBQUU7QUFBQSxJQUFDLFNBQVEsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUFFLEtBQUssR0FBRyxPQUFVLGFBQUcsS0FBSyxHQUFHLE9BQVUsYUFBRyxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsRUFBRSxNQUFJLE1BQUssQ0FBQyxLQUFLLEdBQUcsSUFBRyxLQUFLLEdBQUcsRUFBRTtBQUFBO0FBQUEsR0FBSSxJQUFJLEdBQUU7QUFBQSxJQUFDLFNBQVEsS0FBSyxLQUFLLEdBQUcsR0FBRTtBQUFBLE1BQUMsSUFBSSxJQUFFLEtBQUssR0FBRztBQUFBLE1BQUcsTUFBUyxhQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxFQUFFLE1BQUksTUFBTTtBQUFBLElBQUU7QUFBQTtBQUFBLEdBQUcsS0FBSyxHQUFFO0FBQUEsSUFBQyxTQUFRLEtBQUssS0FBSyxHQUFHLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLEdBQUc7QUFBQSxNQUFHLE1BQVMsYUFBRyxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsRUFBRSxNQUFJLE1BQU07QUFBQSxJQUFFO0FBQUE7QUFBQSxHQUFHLE1BQU0sR0FBRTtBQUFBLElBQUMsU0FBUSxLQUFLLEtBQUssR0FBRztBQUFBLE1BQUUsS0FBSyxHQUFHLE9BQVUsYUFBRyxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsRUFBRSxNQUFJLE1BQU0sS0FBSyxHQUFHO0FBQUE7QUFBQSxHQUFLLE9BQU8sR0FBRTtBQUFBLElBQUMsU0FBUSxLQUFLLEtBQUssR0FBRztBQUFBLE1BQUUsS0FBSyxHQUFHLE9BQVUsYUFBRyxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsRUFBRSxNQUFJLE1BQU0sS0FBSyxHQUFHO0FBQUE7QUFBQSxHQUFLLE9BQU8sU0FBUyxHQUFFO0FBQUEsSUFBQyxPQUFPLEtBQUssUUFBUTtBQUFBO0FBQUEsR0FBRyxPQUFPLGVBQWE7QUFBQSxFQUFXLElBQUksQ0FBQyxHQUFFLElBQUUsQ0FBQyxHQUFFO0FBQUEsSUFBQyxTQUFRLEtBQUssS0FBSyxHQUFHLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLEdBQUcsSUFBRyxJQUFFLEtBQUssR0FBRyxDQUFDLElBQUUsRUFBRSx1QkFBcUI7QUFBQSxNQUFFLElBQUcsTUFBUyxhQUFHLEVBQUUsR0FBRSxLQUFLLEdBQUcsSUFBRyxJQUFJO0FBQUEsUUFBRSxPQUFPLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBRyxDQUFDO0FBQUEsSUFBQztBQUFBO0FBQUEsRUFBRSxPQUFPLENBQUMsR0FBRSxJQUFFLE1BQUs7QUFBQSxJQUFDLFNBQVEsS0FBSyxLQUFLLEdBQUcsR0FBRTtBQUFBLE1BQUMsSUFBSSxJQUFFLEtBQUssR0FBRyxJQUFHLElBQUUsS0FBSyxHQUFHLENBQUMsSUFBRSxFQUFFLHVCQUFxQjtBQUFBLE1BQUUsTUFBUyxhQUFHLEVBQUUsS0FBSyxHQUFFLEdBQUUsS0FBSyxHQUFHLElBQUcsSUFBSTtBQUFBLElBQUM7QUFBQTtBQUFBLEVBQUUsUUFBUSxDQUFDLEdBQUUsSUFBRSxNQUFLO0FBQUEsSUFBQyxTQUFRLEtBQUssS0FBSyxHQUFHLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLEdBQUcsSUFBRyxJQUFFLEtBQUssR0FBRyxDQUFDLElBQUUsRUFBRSx1QkFBcUI7QUFBQSxNQUFFLE1BQVMsYUFBRyxFQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRyxJQUFHLElBQUk7QUFBQSxJQUFDO0FBQUE7QUFBQSxFQUFFLFVBQVUsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFO0FBQUEsSUFBRyxTQUFRLEtBQUssS0FBSyxHQUFHLEVBQUMsWUFBVyxLQUFFLENBQUM7QUFBQSxNQUFFLEtBQUssR0FBRyxDQUFDLE1BQUksS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFHLFFBQVEsR0FBRSxJQUFFO0FBQUEsSUFBSSxPQUFPO0FBQUE7QUFBQSxFQUFFLElBQUksQ0FBQyxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsS0FBSyxHQUFHLElBQUksQ0FBQztBQUFBLElBQUUsSUFBRyxNQUFTO0FBQUEsTUFBRTtBQUFBLElBQU8sSUFBSSxJQUFFLEtBQUssR0FBRyxJQUFHLElBQUUsS0FBSyxHQUFHLENBQUMsSUFBRSxFQUFFLHVCQUFxQjtBQUFBLElBQUUsSUFBRyxNQUFTO0FBQUEsTUFBRTtBQUFBLElBQU8sSUFBSSxJQUFFLEVBQUMsT0FBTSxFQUFDO0FBQUEsSUFBRSxJQUFHLEtBQUssTUFBSSxLQUFLLElBQUc7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLEdBQUcsSUFBRyxJQUFFLEtBQUssR0FBRztBQUFBLE1BQUcsSUFBRyxLQUFHLEdBQUU7QUFBQSxRQUFDLElBQUksSUFBRSxLQUFHLEtBQUssR0FBRyxJQUFJLElBQUU7QUFBQSxRQUFHLEVBQUUsTUFBSSxHQUFFLEVBQUUsUUFBTSxLQUFLLElBQUk7QUFBQSxNQUFDO0FBQUEsSUFBQztBQUFBLElBQUMsT0FBTyxLQUFLLE9BQUssRUFBRSxPQUFLLEtBQUssR0FBRyxLQUFJO0FBQUE7QUFBQSxFQUFFLElBQUksR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLENBQUM7QUFBQSxJQUFFLFNBQVEsS0FBSyxLQUFLLEdBQUcsRUFBQyxZQUFXLEtBQUUsQ0FBQyxHQUFFO0FBQUEsTUFBQyxJQUFJLElBQUUsS0FBSyxHQUFHLElBQUcsSUFBRSxLQUFLLEdBQUcsSUFBRyxJQUFFLEtBQUssR0FBRyxDQUFDLElBQUUsRUFBRSx1QkFBcUI7QUFBQSxNQUFFLElBQUcsTUFBUyxhQUFHLE1BQVM7QUFBQSxRQUFFO0FBQUEsTUFBUyxJQUFJLElBQUUsRUFBQyxPQUFNLEVBQUM7QUFBQSxNQUFFLElBQUcsS0FBSyxNQUFJLEtBQUssSUFBRztBQUFBLFFBQUMsRUFBRSxNQUFJLEtBQUssR0FBRztBQUFBLFFBQUcsSUFBSSxJQUFFLEtBQUssR0FBRyxJQUFJLElBQUUsS0FBSyxHQUFHO0FBQUEsUUFBRyxFQUFFLFFBQU0sS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFFLENBQUM7QUFBQSxNQUFDO0FBQUEsTUFBQyxLQUFLLE9BQUssRUFBRSxPQUFLLEtBQUssR0FBRyxLQUFJLEVBQUUsUUFBUSxDQUFDLEdBQUUsQ0FBQyxDQUFDO0FBQUEsSUFBQztBQUFBLElBQUMsT0FBTztBQUFBO0FBQUEsRUFBRSxJQUFJLENBQUMsR0FBRTtBQUFBLElBQUMsS0FBSyxNQUFNO0FBQUEsSUFBRSxVQUFRLEdBQUUsTUFBSyxHQUFFO0FBQUEsTUFBQyxJQUFHLEVBQUUsT0FBTTtBQUFBLFFBQUMsSUFBSSxJQUFFLEtBQUssSUFBSSxJQUFFLEVBQUU7QUFBQSxRQUFNLEVBQUUsUUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFFO0FBQUEsTUFBQztBQUFBLE1BQUMsS0FBSyxHQUFHLEdBQUUsRUFBRSxPQUFNLENBQUM7QUFBQSxJQUFDO0FBQUE7QUFBQSxFQUFFLEdBQUcsQ0FBQyxHQUFFLEdBQUUsSUFBRSxDQUFDLEdBQUU7QUFBQSxJQUFDLE1BQUksUUFBTyxJQUFFLEVBQUUsaUJBQWUsQ0FBQyxJQUFPLGNBQUc7QUFBQSxJQUFFLEVBQUUsU0FBTyxHQUFFLE1BQUksRUFBRSxLQUFHLE9BQU0sRUFBRSxNQUFJLEdBQUUsTUFBUyxjQUFJLEVBQUUsUUFBTSxJQUFHLEVBQUUsUUFBTTtBQUFBLElBQU0sSUFBSSxJQUFFLEtBQUssR0FBRyxHQUFFLEdBQUUsQ0FBQztBQUFBLElBQUUsT0FBTyxLQUFHLEVBQUUsa0JBQWdCLEVBQUUsUUFBUSxDQUFDLEdBQUU7QUFBQTtBQUFBLEVBQUUsRUFBRSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQSxJQUFDLE1BQUksS0FBSSxJQUFFLEtBQUssS0FBSSxPQUFNLEdBQUUsZ0JBQWUsSUFBRSxLQUFLLGdCQUFlLGlCQUFnQixJQUFFLEtBQUssaUJBQWdCLFFBQU8sTUFBRyxHQUFFLElBQUUsS0FBSyxHQUFHLENBQUM7QUFBQSxJQUFFLElBQUcsTUFBUztBQUFBLE1BQUUsT0FBTyxNQUFJLEVBQUUsTUFBSSxZQUFXLEtBQUssT0FBTyxDQUFDLEdBQUU7QUFBQSxJQUFLLE1BQUksYUFBWSxJQUFFLEtBQUssZ0JBQWE7QUFBQSxJQUFFLEtBQUcsQ0FBQyxNQUFJLEVBQUUsUUFBTTtBQUFBLElBQUcsSUFBSSxJQUFFLEtBQUssR0FBRyxHQUFFLEdBQUUsRUFBRSxRQUFNLEdBQUUsR0FBRSxDQUFDO0FBQUEsSUFBRSxJQUFHLEtBQUssZ0JBQWMsSUFBRSxLQUFLO0FBQUEsTUFBYSxPQUFPLEtBQUssR0FBRyxHQUFFLEtBQUssR0FBRSxNQUFJLEVBQUUsTUFBSSxRQUFPLEVBQUUsdUJBQXFCLE9BQUk7QUFBQSxJQUFLLElBQUksSUFBRSxLQUFLLE9BQUssSUFBTyxZQUFFLEtBQUssR0FBRyxJQUFJLENBQUM7QUFBQSxJQUFFLElBQUcsTUFBUztBQUFBLE1BQUUsSUFBRSxLQUFLLE9BQUssSUFBRSxLQUFLLEtBQUcsS0FBSyxHQUFHLFdBQVMsSUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFFLEtBQUssT0FBSyxLQUFLLEtBQUcsS0FBSyxHQUFHLEtBQUUsSUFBRSxLQUFLLElBQUcsS0FBSyxHQUFHLEtBQUcsR0FBRSxLQUFLLEdBQUcsS0FBRyxHQUFFLEtBQUssR0FBRyxJQUFJLEdBQUUsQ0FBQyxHQUFFLEtBQUssR0FBRyxLQUFLLE1BQUksR0FBRSxLQUFLLEdBQUcsS0FBRyxLQUFLLElBQUcsS0FBSyxLQUFHLEdBQUUsS0FBSyxNQUFLLEtBQUssR0FBRyxHQUFFLEdBQUUsQ0FBQyxHQUFFLE1BQUksRUFBRSxNQUFJLFFBQU8sSUFBRSxPQUFHLEtBQUssTUFBSSxDQUFDLEtBQUcsS0FBSyxLQUFLLEdBQUUsR0FBRSxLQUFLO0FBQUEsSUFBTTtBQUFBLE1BQUMsS0FBSyxHQUFHLENBQUM7QUFBQSxNQUFFLElBQUksSUFBRSxLQUFLLEdBQUc7QUFBQSxNQUFHLElBQUcsTUFBSSxHQUFFO0FBQUEsUUFBQyxJQUFHLENBQUM7QUFBQSxVQUFFLElBQUcsS0FBSyxHQUFHLENBQUMsR0FBRTtBQUFBLFlBQUMsTUFBSSxLQUFHLEVBQUUsa0JBQWtCLE1BQU0sSUFBSSxNQUFNLFVBQVUsQ0FBQztBQUFBLFlBQUUsTUFBSSxzQkFBcUIsTUFBRztBQUFBLFlBQUUsTUFBUyxhQUFHLE1BQUksTUFBSSxLQUFLLE1BQUksS0FBSyxLQUFLLEdBQUUsR0FBRSxLQUFLLEdBQUUsS0FBSyxNQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsR0FBRSxHQUFFLEtBQUssQ0FBQztBQUFBLFVBQUUsRUFBTTtBQUFBLGlCQUFLLE1BQUksS0FBSyxLQUFLLEdBQUUsR0FBRSxLQUFLLEdBQUUsS0FBSyxNQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsR0FBRSxHQUFFLEtBQUssQ0FBQztBQUFBLFFBQUUsSUFBRyxLQUFLLEdBQUcsQ0FBQyxHQUFFLEtBQUssR0FBRyxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUssR0FBRyxLQUFHLEdBQUUsQ0FBQyxHQUFFO0FBQUEsVUFBQyxJQUFJLElBQUUsS0FBRyxLQUFLLEdBQUcsQ0FBQyxJQUFFLEVBQUUsdUJBQXFCLEdBQUUsSUFBRSxNQUFTLFlBQUUsUUFBTSxNQUFJLElBQUUsWUFBVTtBQUFBLFVBQVMsTUFBSSxFQUFFLE1BQUksR0FBRSxNQUFTLGNBQUksRUFBRSxXQUFTLEtBQUksS0FBSyxNQUFJLEtBQUssV0FBVyxHQUFFLEdBQUUsQ0FBQztBQUFBLFFBQUM7QUFBQSxNQUFDLEVBQU07QUFBQSxjQUFJLE1BQUksRUFBRSxNQUFJLFdBQVUsS0FBSyxNQUFJLEtBQUssV0FBVyxHQUFFLEdBQUUsUUFBUTtBQUFBO0FBQUEsSUFBRyxJQUFHLE1BQUksS0FBRyxDQUFDLEtBQUssTUFBSSxLQUFLLEdBQUcsR0FBRSxLQUFLLE9BQUssS0FBRyxLQUFLLEdBQUcsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEtBQUssR0FBRyxHQUFFLENBQUMsSUFBRyxDQUFDLEtBQUcsS0FBSyxNQUFJLEtBQUssSUFBRztBQUFBLE1BQUMsSUFBSSxJQUFFLEtBQUssSUFBRztBQUFBLE1BQUUsTUFBSyxJQUFFLEdBQUcsTUFBTTtBQUFBLFFBQUcsS0FBSyxLQUFLLEdBQUcsQ0FBQztBQUFBLElBQUM7QUFBQSxJQUFDLE9BQU87QUFBQTtBQUFBLEVBQUssR0FBRyxHQUFFO0FBQUEsSUFBQyxJQUFHO0FBQUEsTUFBQyxNQUFLLEtBQUssTUFBSTtBQUFBLFFBQUMsSUFBSSxJQUFFLEtBQUssR0FBRyxLQUFLO0FBQUEsUUFBSSxJQUFHLEtBQUssR0FBRyxJQUFFLEdBQUUsS0FBSyxHQUFHLENBQUMsR0FBRTtBQUFBLFVBQUMsSUFBRyxFQUFFO0FBQUEsWUFBcUIsT0FBTyxFQUFFO0FBQUEsUUFBb0IsRUFBTSxTQUFHLE1BQVM7QUFBQSxVQUFFLE9BQU87QUFBQSxNQUFDO0FBQUEsY0FBRTtBQUFBLE1BQVEsSUFBRyxLQUFLLE1BQUksS0FBSyxJQUFHO0FBQUEsUUFBQyxJQUFJLElBQUUsS0FBSyxJQUFHO0FBQUEsUUFBRSxNQUFLLElBQUUsR0FBRyxNQUFNO0FBQUEsVUFBRyxLQUFLLEtBQUssR0FBRyxDQUFDO0FBQUEsTUFBQztBQUFBO0FBQUE7QUFBQSxFQUFHLEVBQUUsQ0FBQyxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsS0FBSyxJQUFHLElBQUUsS0FBSyxHQUFHLElBQUcsSUFBRSxLQUFLLEdBQUcsSUFBRyxJQUFFLEtBQUssR0FBRyxDQUFDO0FBQUEsSUFBRSxLQUFHLEVBQUUsa0JBQWtCLE1BQU0sSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUFBLElBQUUsSUFBSSxJQUFFLElBQUUsRUFBRSx1QkFBcUI7QUFBQSxJQUFFLFFBQU8sS0FBSyxNQUFJLEtBQUssT0FBSyxNQUFTLGNBQUksS0FBSyxNQUFJLEtBQUssS0FBSyxHQUFFLEdBQUUsT0FBTyxHQUFFLEtBQUssTUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUUsR0FBRSxPQUFPLENBQUMsSUFBRyxLQUFLLEdBQUcsQ0FBQyxHQUFFLEtBQUssS0FBSyxPQUFLLGFBQWEsS0FBSyxHQUFHLEVBQUUsR0FBRSxLQUFLLEdBQUcsS0FBUSxZQUFHLE1BQUksS0FBSyxHQUFHLEtBQVEsV0FBRSxLQUFLLEdBQUcsS0FBUSxXQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBRyxLQUFLLE9BQUssS0FBRyxLQUFLLEtBQUcsS0FBSyxLQUFHLEdBQUUsS0FBSyxHQUFHLFNBQU8sS0FBRyxLQUFLLEtBQUcsS0FBSyxHQUFHLElBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFFLEtBQUssTUFBSztBQUFBO0FBQUEsRUFBRSxHQUFHLENBQUMsR0FBRSxJQUFFLENBQUMsR0FBRTtBQUFBLElBQUMsTUFBSSxRQUFPLElBQUUsRUFBRSxpQkFBZSxDQUFDLElBQU8sY0FBRztBQUFBLElBQUUsRUFBRSxTQUFPLEdBQUUsTUFBSSxFQUFFLEtBQUcsT0FBTSxFQUFFLE1BQUksR0FBRSxFQUFFLFFBQU07QUFBQSxJQUFNLElBQUksSUFBRSxLQUFLLEdBQUcsR0FBRSxDQUFDO0FBQUEsSUFBRSxPQUFPLEVBQUUsa0JBQWdCLEVBQUUsUUFBUSxDQUFDLEdBQUU7QUFBQTtBQUFBLEVBQUUsRUFBRSxDQUFDLEdBQUUsSUFBRSxDQUFDLEdBQUU7QUFBQSxJQUFDLE1BQUksZ0JBQWUsSUFBRSxLQUFLLGdCQUFlLFFBQU8sTUFBRyxHQUFFLElBQUUsS0FBSyxHQUFHLElBQUksQ0FBQztBQUFBLElBQUUsSUFBRyxNQUFTLFdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLEdBQUc7QUFBQSxNQUFHLElBQUcsS0FBSyxHQUFHLENBQUMsS0FBRyxFQUFFLHlCQUE0QjtBQUFBLFFBQUUsT0FBTTtBQUFBLE1BQUcsSUFBRyxLQUFLLEdBQUcsQ0FBQztBQUFBLFFBQUUsTUFBSSxFQUFFLE1BQUksU0FBUSxLQUFLLEdBQUcsR0FBRSxDQUFDO0FBQUEsTUFBUTtBQUFBLGVBQU8sS0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFFLE1BQUksRUFBRSxNQUFJLE9BQU0sS0FBSyxHQUFHLEdBQUUsQ0FBQyxJQUFHO0FBQUEsSUFBRSxFQUFNO0FBQUEsWUFBSSxFQUFFLE1BQUk7QUFBQSxJQUFRLE9BQU07QUFBQTtBQUFBLEVBQUcsSUFBSSxDQUFDLEdBQUUsSUFBRSxDQUFDLEdBQUU7QUFBQSxJQUFDLE1BQUksUUFBTyxJQUFFLEVBQUUsSUFBRSxDQUFDLElBQU8sY0FBRztBQUFBLElBQUUsTUFBSSxFQUFFLEtBQUcsUUFBTyxFQUFFLE1BQUksR0FBRSxFQUFFLFFBQU0sT0FBTSxFQUFFLFNBQU87QUFBQSxJQUFFLElBQUksSUFBRSxLQUFLLEdBQUcsR0FBRSxDQUFDO0FBQUEsSUFBRSxPQUFPLEVBQUUsa0JBQWdCLEVBQUUsUUFBUSxDQUFDLEdBQUU7QUFBQTtBQUFBLEVBQUUsRUFB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QUFPLEtBQUssR0FBRyxDQUFDLEdBQUUsS0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFFLElBQUUsRUFBRSx1QkFBcUI7QUFBQTtBQUFBLEVBQUcsRUFBRSxDQUFDLEdBQUUsR0FBRTtBQUFBLElBQUMsS0FBSyxHQUFHLEtBQUcsR0FBRSxLQUFLLEdBQUcsS0FBRztBQUFBO0FBQUEsRUFBRSxFQUFFLENBQUMsR0FBRTtBQUFBLElBQUMsTUFBSSxLQUFLLE9BQUssTUFBSSxLQUFLLEtBQUcsS0FBSyxLQUFHLEtBQUssR0FBRyxLQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBRyxLQUFLLEdBQUcsRUFBRSxHQUFFLEtBQUssR0FBRyxLQUFLLElBQUcsQ0FBQyxHQUFFLEtBQUssS0FBRztBQUFBO0FBQUEsRUFBRyxNQUFNLENBQUMsR0FBRTtBQUFBLElBQUMsT0FBTyxLQUFLLEdBQUcsR0FBRSxRQUFRO0FBQUE7QUFBQSxFQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUU7QUFBQSxJQUFDLEVBQUUsa0JBQWdCLEVBQUUsUUFBUSxFQUFDLElBQUcsVUFBUyxRQUFPLEdBQUUsS0FBSSxHQUFFLE9BQU0sS0FBSSxDQUFDO0FBQUEsSUFBRSxJQUFJLElBQUU7QUFBQSxJQUFHLElBQUcsS0FBSyxPQUFLLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQUEsTUFBRSxJQUFHLE1BQVM7QUFBQSxRQUFFLElBQUcsS0FBSyxLQUFLLE9BQUssYUFBYSxLQUFLLEtBQUssRUFBRSxHQUFFLEtBQUssR0FBRyxLQUFRLFlBQUcsSUFBRSxNQUFHLEtBQUssT0FBSztBQUFBLFVBQUUsS0FBSyxHQUFHLENBQUM7QUFBQSxRQUFNO0FBQUEsVUFBQyxLQUFLLEdBQUcsQ0FBQztBQUFBLFVBQUUsSUFBSSxJQUFFLEtBQUssR0FBRztBQUFBLFVBQUcsSUFBRyxLQUFLLEdBQUcsQ0FBQyxJQUFFLEVBQUUsa0JBQWtCLE1BQU0sSUFBSSxNQUFNLFNBQVMsQ0FBQyxLQUFHLEtBQUssTUFBSSxLQUFLLFFBQU0sS0FBSyxNQUFJLEtBQUssS0FBSyxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUssTUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUUsR0FBRSxDQUFDLENBQUMsSUFBRyxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUUsS0FBSyxHQUFHLEtBQVEsV0FBRSxLQUFLLEdBQUcsS0FBUSxXQUFFLE1BQUksS0FBSztBQUFBLFlBQUcsS0FBSyxLQUFHLEtBQUssR0FBRztBQUFBLFVBQVEsU0FBRyxNQUFJLEtBQUs7QUFBQSxZQUFHLEtBQUssS0FBRyxLQUFLLEdBQUc7QUFBQSxVQUFPO0FBQUEsWUFBQyxJQUFJLElBQUUsS0FBSyxHQUFHO0FBQUEsWUFBRyxLQUFLLEdBQUcsS0FBRyxLQUFLLEdBQUc7QUFBQSxZQUFHLElBQUksSUFBRSxLQUFLLEdBQUc7QUFBQSxZQUFHLEtBQUssR0FBRyxLQUFHLEtBQUssR0FBRztBQUFBO0FBQUEsVUFBRyxLQUFLLE1BQUssS0FBSyxHQUFHLEtBQUssQ0FBQztBQUFBO0FBQUEsSUFBRTtBQUFBLElBQUMsSUFBRyxLQUFLLE1BQUksS0FBSyxJQUFJLFFBQU87QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLElBQUc7QUFBQSxNQUFFLE1BQUssSUFBRSxHQUFHLE1BQU07QUFBQSxRQUFHLEtBQUssS0FBSyxHQUFHLENBQUM7QUFBQSxJQUFDO0FBQUEsSUFBQyxPQUFPO0FBQUE7QUFBQSxFQUFFLEtBQUssR0FBRTtBQUFBLElBQUMsT0FBTyxLQUFLLEdBQUcsUUFBUTtBQUFBO0FBQUEsRUFBRSxFQUFFLENBQUMsR0FBRTtBQUFBLElBQUMsU0FBUSxLQUFLLEtBQUssR0FBRyxFQUFDLFlBQVcsS0FBRSxDQUFDLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLEdBQUc7QUFBQSxNQUFHLElBQUcsS0FBSyxHQUFHLENBQUM7QUFBQSxRQUFFLEVBQUUsa0JBQWtCLE1BQU0sSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUFBLE1BQU07QUFBQSxRQUFDLElBQUksSUFBRSxLQUFLLEdBQUc7QUFB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