5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-02 19:01:02 +08:00
wails/a_wails-packr.go
2019-01-13 17:57:21 +11:00

21 lines
370 KiB
Go

// Code generated by github.com/gobuffalo/packr. DO NOT EDIT.
package wails
import "github.com/gobuffalo/packr"
// You can use the "packr clean" command to clean up this,
// and any other packr generated files.
func init() {
packr.PackJSONBytes("./assets/default", "default.html", "\"PGRpdiBpZD0iYXBwIj48L2Rpdj4=\"")
packr.PackJSONBytes("./assets/default", "jquery.3.3.1.min.js", "\"LyohIGpRdWVyeSB2My4zLjEgLWFqYXgsLWFqYXgvanNvbnAsLWFqYXgvbG9hZCwtYWpheC9wYXJzZVhNTCwtYWpheC9zY3JpcHQsLWFqYXgvdmFyL2xvY2F0aW9uLC1hamF4L3Zhci9ub25jZSwtYWpheC92YXIvcnF1ZXJ5LC1hamF4L3hociwtbWFuaXB1bGF0aW9uL19ldmFsVXJsLC1ldmVudC9hamF4LC1lZmZlY3RzLC1lZmZlY3RzL1R3ZWVuLC1lZmZlY3RzL2FuaW1hdGVkU2VsZWN0b3IgfCAoYykgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovCiFmdW5jdGlvbiAoZSwgdCkgeyAidXNlIHN0cmljdCI7ICJvYmplY3QiID09IHR5cGVvZiBtb2R1bGUgJiYgIm9iamVjdCIgPT0gdHlwZW9mIG1vZHVsZS5leHBvcnRzID8gbW9kdWxlLmV4cG9ydHMgPSBlLmRvY3VtZW50ID8gdChlLCAhMCkgOiBmdW5jdGlvbiAoZSkgeyBpZiAoIWUuZG9jdW1lbnQpIHRocm93IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIpOyByZXR1cm4gdChlKSB9IDogdChlKSB9KCJ1bmRlZmluZWQiICE9IHR5cGVvZiB3aW5kb3cgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiAoZSwgdCkgeyAidXNlIHN0cmljdCI7IHZhciBuID0gW10sIHIgPSBlLmRvY3VtZW50LCBpID0gT2JqZWN0LmdldFByb3RvdHlwZU9mLCBvID0gbi5zbGljZSwgYSA9IG4uY29uY2F0LCB1ID0gbi5wdXNoLCBzID0gbi5pbmRleE9mLCBsID0ge30sIGMgPSBsLnRvU3RyaW5nLCBmID0gbC5oYXNPd25Qcm9wZXJ0eSwgZCA9IGYudG9TdHJpbmcsIHAgPSBkLmNhbGwoT2JqZWN0KSwgaCA9IHt9LCBnID0gZnVuY3Rpb24gZSh0KSB7IHJldHVybiAiZnVuY3Rpb24iID09IHR5cGVvZiB0ICYmICJudW1iZXIiICE9IHR5cGVvZiB0Lm5vZGVUeXBlIH0sIHYgPSBmdW5jdGlvbiBlKHQpIHsgcmV0dXJuIG51bGwgIT0gdCAmJiB0ID09PSB0LndpbmRvdyB9LCB5ID0geyB0eXBlOiAhMCwgc3JjOiAhMCwgbm9Nb2R1bGU6ICEwIH07IGZ1bmN0aW9uIG0oZSwgdCwgbikgeyB2YXIgaSwgbyA9ICh0ID0gdCB8fCByKS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsgaWYgKG8udGV4dCA9IGUsIG4pIGZvciAoaSBpbiB5KSBuW2ldICYmIChvW2ldID0gbltpXSk7IHQuaGVhZC5hcHBlbmRDaGlsZChvKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pIH0gZnVuY3Rpb24gYihlKSB7IHJldHVybiBudWxsID09IGUgPyBlICsgIiIgOiAib2JqZWN0IiA9PSB0eXBlb2YgZSB8fCAiZnVuY3Rpb24iID09IHR5cGVvZiBlID8gbFtjLmNhbGwoZSldIHx8ICJvYmplY3QiIDogdHlwZW9mIGUgfSB2YXIgeCA9ICIzLjMuMSAtYWpheCwtYWpheC9qc29ucCwtYWpheC9sb2FkLC1hamF4L3BhcnNlWE1MLC1hamF4L3NjcmlwdCwtYWpheC92YXIvbG9jYXRpb24sLWFqYXgvdmFyL25vbmNlLC1hamF4L3Zhci9ycXVlcnksLWFqYXgveGhyLC1tYW5pcHVsYXRpb24vX2V2YWxVcmwsLWV2ZW50L2FqYXgsLWVmZmVjdHMsLWVmZmVjdHMvVHdlZW4sLWVmZmVjdHMvYW5pbWF0ZWRTZWxlY3RvciIsIHcgPSBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gbmV3IHcuZm4uaW5pdChlLCB0KSB9LCBDID0gL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nOyB3LmZuID0gdy5wcm90b3R5cGUgPSB7IGpxdWVyeTogeCwgY29uc3RydWN0b3I6IHcsIGxlbmd0aDogMCwgdG9BcnJheTogZnVuY3Rpb24gKCkgeyByZXR1cm4gby5jYWxsKHRoaXMpIH0sIGdldDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG51bGwgPT0gZSA/IG8uY2FsbCh0aGlzKSA6IGUgPCAwID8gdGhpc1tlICsgdGhpcy5sZW5ndGhdIDogdGhpc1tlXSB9LCBwdXNoU3RhY2s6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gdy5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksIGUpOyByZXR1cm4gdC5wcmV2T2JqZWN0ID0gdGhpcywgdCB9LCBlYWNoOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdy5lYWNoKHRoaXMsIGUpIH0sIG1hcDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHRoaXMucHVzaFN0YWNrKHcubWFwKHRoaXMsIGZ1bmN0aW9uICh0LCBuKSB7IHJldHVybiBlLmNhbGwodCwgbiwgdCkgfSkpIH0sIHNsaWNlOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnB1c2hTdGFjayhvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIH0sIGZpcnN0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmVxKDApIH0sIGxhc3Q6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuZXEoLTEpIH0sIGVxOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IHRoaXMubGVuZ3RoLCBuID0gK2UgKyAoZSA8IDAgPyB0IDogMCk7IHJldHVybiB0aGlzLnB1c2hTdGFjayhuID49IDAgJiYgbiA8IHQgPyBbdGhpc1tuXV0gOiBbXSkgfSwgZW5kOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpIH0sIHB1c2g6IHUsIHNvcnQ6IG4uc29ydCwgc3BsaWNlOiBuLnNwbGljZSB9LCB3LmV4dGVuZCA9IHcuZm4uZXh0ZW5kID0gZnVuY3Rpb24gKCkgeyB2YXIgZSwgdCwgbiwgciwgaSwgbywgYSA9IGFyZ3VtZW50c1swXSB8fCB7fSwgdSA9IDEsIHMgPSBhcmd1bWVudHMubGVuZ3RoLCBsID0gITE7IGZvciAoImJvb2xlYW4iID09IHR5cGVvZiBhICYmIChsID0gYSwgYSA9IGFyZ3VtZW50c1t1XSB8fCB7fSwgdSsrKSwgIm9iamVjdCIgPT0gdHlwZW9mIGEgfHwgZyhhKSB8fCAoYSA9IHt9KSwgdSA9PT0gcyAmJiAoYSA9IHRoaXMsIHUtLSk7IHUgPCBzOyB1KyspaWYgKG51bGwgIT0gKGUgPSBhcmd1bWVudHNbdV0pKSBmb3IgKHQgaW4gZSkgbiA9IGFbdF0sIGEgIT09IChyID0gZVt0XSkgJiYgKGwgJiYgciAmJiAody5pc1BsYWluT2JqZWN0KHIpIHx8IChpID0gQXJyYXkuaXNBcnJheShyKSkpID8gKGkgPyAoaSA9ICExLCBvID0gbiAmJiBBcnJheS5pc0FycmF5KG4pID8gbiA6IFtdKSA6IG8gPSBuICYmIHcuaXNQbGFpbk9iamVjdChuKSA/IG4gOiB7fSwgYVt0XSA9IHcuZXh0ZW5kKGwsIG8sIHIpKSA6IHZvaWQgMCAhPT0gciAmJiAoYVt0XSA9IHIpKTsgcmV0dXJuIGEgfSwgdy5leHRlbmQoeyBleHBhbmRvOiAialF1ZXJ5IiArICh4ICsgTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywgIiIpLCBpc1JlYWR5OiAhMCwgZXJyb3I6IGZ1bmN0aW9uIChlKSB7IHRocm93IG5ldyBFcnJvcihlKSB9LCBub29wOiBmdW5jdGlvbiAoKSB7IH0sIGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uIChlKSB7IHZhciB0LCBuOyByZXR1cm4gISghZSB8fCAiW29iamVjdCBPYmplY3RdIiAhPT0gYy5jYWxsKGUpKSAmJiAoISh0ID0gaShlKSkgfHwgImZ1bmN0aW9uIiA9PSB0eXBlb2YgKG4gPSBmLmNhbGwodCwgImNvbnN0cnVjdG9yIikgJiYgdC5jb25zdHJ1Y3RvcikgJiYgZC5jYWxsKG4pID09PSBwKSB9LCBpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiAoZSkgeyB2YXIgdDsgZm9yICh0IGluIGUpIHJldHVybiAhMTsgcmV0dXJuICEwIH0sIGdsb2JhbEV2YWw6IGZ1bmN0aW9uIChlKSB7IG0oZSkgfSwgZWFjaDogZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4sIHIgPSAwOyBpZiAoVChlKSkgeyBmb3IgKG4gPSBlLmxlbmd0aDsgciA8IG47IHIrKylpZiAoITEgPT09IHQuY2FsbChlW3JdLCByLCBlW3JdKSkgYnJlYWsgfSBlbHNlIGZvciAociBpbiBlKSBpZiAoITEgPT09IHQuY2FsbChlW3JdLCByLCBlW3JdKSkgYnJlYWs7IHJldHVybiBlIH0sIHRyaW06IGZ1bmN0aW9uIChlKSB7IHJldHVybiBudWxsID09IGUgPyAiIiA6IChlICsgIiIpLnJlcGxhY2UoQywgIiIpIH0sIG1ha2VBcnJheTogZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4gPSB0IHx8IFtdOyByZXR1cm4gbnVsbCAhPSBlICYmIChUKE9iamVjdChlKSkgPyB3Lm1lcmdlKG4sICJzdHJpbmciID09IHR5cGVvZiBlID8gW2VdIDogZSkgOiB1LmNhbGwobiwgZSkpLCBuIH0sIGluQXJyYXk6IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiBudWxsID09IHQgPyAtMSA6IHMuY2FsbCh0LCBlLCBuKSB9LCBtZXJnZTogZnVuY3Rpb24gKGUsIHQpIHsgZm9yICh2YXIgbiA9ICt0Lmxlbmd0aCwgciA9IDAsIGkgPSBlLmxlbmd0aDsgciA8IG47IHIrKyllW2krK10gPSB0W3JdOyByZXR1cm4gZS5sZW5ndGggPSBpLCBlIH0sIGdyZXA6IGZ1bmN0aW9uIChlLCB0LCBuKSB7IGZvciAodmFyIHIsIGkgPSBbXSwgbyA9IDAsIGEgPSBlLmxlbmd0aCwgdSA9ICFuOyBvIDwgYTsgbysrKShyID0gIXQoZVtvXSwgbykpICE9PSB1ICYmIGkucHVzaChlW29dKTsgcmV0dXJuIGkgfSwgbWFwOiBmdW5jdGlvbiAoZSwgdCwgbikgeyB2YXIgciwgaSwgbyA9IDAsIHUgPSBbXTsgaWYgKFQoZSkpIGZvciAociA9IGUubGVuZ3RoOyBvIDwgcjsgbysrKW51bGwgIT0gKGkgPSB0KGVbb10sIG8sIG4pKSAmJiB1LnB1c2goaSk7IGVsc2UgZm9yIChvIGluIGUpIG51bGwgIT0gKGkgPSB0KGVbb10sIG8sIG4pKSAmJiB1LnB1c2goaSk7IHJldHVybiBhLmFwcGx5KFtdLCB1KSB9LCBndWlkOiAxLCBzdXBwb3J0OiBoIH0pLCAiZnVuY3Rpb24iID09IHR5cGVvZiBTeW1ib2wgJiYgKHcuZm5bU3ltYm9sLml0ZXJhdG9yXSA9IG5bU3ltYm9sLml0ZXJhdG9yXSksIHcuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2wiLnNwbGl0KCIgIiksIGZ1bmN0aW9uIChlLCB0KSB7IGxbIltvYmplY3QgIiArIHQgKyAiXSJdID0gdC50b0xvd2VyQ2FzZSgpIH0pOyBmdW5jdGlvbiBUKGUpIHsgdmFyIHQgPSAhIWUgJiYgImxlbmd0aCIgaW4gZSAmJiBlLmxlbmd0aCwgbiA9IGIoZSk7IHJldHVybiAhZyhlKSAmJiAhdihlKSAmJiAoImFycmF5IiA9PT0gbiB8fCAwID09PSB0IHx8ICJudW1iZXIiID09IHR5cGVvZiB0ICYmIHQgPiAwICYmIHQgLSAxIGluIGUpIH0gdmFyIEUgPSBmdW5jdGlvbiAoZSkgeyB2YXIgdCwgbiwgciwgaSwgbywgYSwgdSwgcywgbCwgYywgZiwgZCwgcCwgaCwgZywgdiwgeSwgbSwgYiwgeCA9ICJzaXp6bGUiICsgMSAqIG5ldyBEYXRlLCB3ID0gZS5kb2N1bWVudCwgQyA9IDAsIFQgPSAwLCBFID0gYWUoKSwgTiA9IGFlKCksIGsgPSBhZSgpLCBBID0gZnVuY3Rpb24gKGUsIHQpIHsgcmV0dXJuIGUgPT09IHQgJiYgKGYgPSAhMCksIDAgfSwgRCA9IHt9Lmhhc093blByb3BlcnR5LCBTID0gW10sIEwgPSBTLnBvcCwgaiA9IFMucHVzaCwgcSA9IFMucHVzaCwgTyA9IFMuc2xpY2UsIFAgPSBmdW5jdGlvbiAoZSwgdCkgeyBmb3IgKHZhciBuID0gMCwgciA9IGUubGVuZ3RoOyBuIDwgcjsgbisrKWlmIChlW25dID09PSB0KSByZXR1cm4gbjsgcmV0dXJuIC0xIH0sIEggPSAiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLCBJID0gIltcXHgyMFxcdFxcclxcblxcZl0iLCBSID0gIig/OlxcXFwufFtcXHctXXxbXlwwLVxceGEwXSkrIiwgQiA9ICJcXFsiICsgSSArICIqKCIgKyBSICsgIikoPzoiICsgSSArICIqKFsqXiR8IX5dPz0pIiArIEkgKyAiKig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwifCgiICsgUiArICIpKXwpIiArIEkgKyAiKlxcXSIsIE0gPSAiOigiICsgUiArICIpKD86XFwoKCgnKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcIil8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IiArIEIgKyAiKSopfC4qKVxcKXwpIiwgVyA9IG5ldyBSZWdFeHAoSSArICIrIiwgImciKSwgJCA9IG5ldyBSZWdFeHAoIl4iICsgSSArICIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiICsgSSArICIrJCIsICJnIiksIEYgPSBuZXcgUmVnRXhwKCJeIiArIEkgKyAiKiwiICsgSSArICIqIiksIHogPSBuZXcgUmVnRXhwKCJeIiArIEkgKyAiKihbPit+XXwiICsgSSArICIpIiArIEkgKyAiKiIpLCBfID0gbmV3IFJlZ0V4cCgiPSIgKyBJICsgIiooW15cXF0nXCJdKj8pIiArIEkgKyAiKlxcXSIsICJnIiksIFUgPSBuZXcgUmVnRXhwKE0pLCBWID0gbmV3IFJlZ0V4cCgiXiIgKyBSICsgIiQiKSwgWCA9IHsgSUQ6IG5ldyBSZWdFeHAoIl4jKCIgKyBSICsgIikiKSwgQ0xBU1M6IG5ldyBSZWdFeHAoIl5cXC4oIiArIFIgKyAiKSIpLCBUQUc6IG5ldyBSZWdFeHAoIl4oIiArIFIgKyAifFsqXSkiKSwgQVRUUjogbmV3IFJlZ0V4cCgiXiIgKyBCKSwgUFNFVURPOiBuZXcgUmVnRXhwKCJeIiArIE0pLCBDSElMRDogbmV3IFJlZ0V4cCgiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFwoIiArIEkgKyAiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIgKyBJICsgIiooPzooWystXXwpIiArIEkgKyAiKihcXGQrKXwpKSIgKyBJICsgIipcXCl8KSIsICJpIiksIGJvb2w6IG5ldyBSZWdFeHAoIl4oPzoiICsgSCArICIpJCIsICJpIiksIG5lZWRzQ29udGV4dDogbmV3IFJlZ0V4cCgiXiIgKyBJICsgIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIgKyBJICsgIiooKD86LVxcZCk/XFxkKikiICsgSSArICIqXFwpfCkoPz1bXi1dfCQpIiwgImkiKSB9LCBRID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSwgWSA9IC9eaFxkJC9pLCBHID0gL15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLCBLID0gL14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLywgSiA9IC9bK35dLywgWiA9IG5ldyBSZWdFeHAoIlxcXFwoW1xcZGEtZl17MSw2fSIgKyBJICsgIj98KCIgKyBJICsgIil8LikiLCAiaWciKSwgZWUgPSBmdW5jdGlvbiAoZSwgdCwgbikgeyB2YXIgciA9ICIweCIgKyB0IC0gNjU1MzY7IHJldHVybiByICE9PSByIHx8IG4gPyB0IDogciA8IDAgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKHIgKyA2NTUzNikgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKHIgPj4gMTAgfCA1NTI5NiwgMTAyMyAmIHIgfCA1NjMyMCkgfSwgdGUgPSAvKFtcMC1ceDFmXHg3Zl18Xi0/XGQpfF4tJHxbXlwwLVx4MWZceDdmLVx1RkZGRlx3LV0vZywgbmUgPSBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gdCA/ICJcMCIgPT09IGUgPyAiXHVmZmZkIiA6IGUuc2xpY2UoMCwgLTEpICsgIlxcIiArIGUuY2hhckNvZGVBdChlLmxlbmd0aCAtIDEpLnRvU3RyaW5nKDE2KSArICIgIiA6ICJcXCIgKyBlIH0sIHJlID0gZnVuY3Rpb24gKCkgeyBkKCkgfSwgaWUgPSBtZShmdW5jdGlvbiAoZSkgeyByZXR1cm4gITAgPT09IGUuZGlzYWJsZWQgJiYgKCJmb3JtIiBpbiBlIHx8ICJsYWJlbCIgaW4gZSkgfSwgeyBkaXI6ICJwYXJlbnROb2RlIiwgbmV4dDogImxlZ2VuZCIgfSk7IHRyeSB7IHEuYXBwbHkoUyA9IE8uY2FsbCh3LmNoaWxkTm9kZXMpLCB3LmNoaWxkTm9kZXMpLCBTW3cuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlIH0gY2F0Y2ggKGUpIHsgcSA9IHsgYXBwbHk6IFMubGVuZ3RoID8gZnVuY3Rpb24gKGUsIHQpIHsgai5hcHBseShlLCBPLmNhbGwodCkpIH0gOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiA9IGUubGVuZ3RoLCByID0gMDsgd2hpbGUgKGVbbisrXSA9IHRbcisrXSk7IGUubGVuZ3RoID0gbiAtIDEgfSB9IH0gZnVuY3Rpb24gb2UoZSwgdCwgciwgaSkgeyB2YXIgbywgdSwgbCwgYywgZiwgaCwgeSwgbSA9IHQgJiYgdC5vd25lckRvY3VtZW50LCBDID0gdCA/IHQubm9kZVR5cGUgOiA5OyBpZiAociA9IHIgfHwgW10sICJzdHJpbmciICE9IHR5cGVvZiBlIHx8ICFlIHx8IDEgIT09IEMgJiYgOSAhPT0gQyAmJiAxMSAhPT0gQykgcmV0dXJuIHI7IGlmICghaSAmJiAoKHQgPyB0Lm93bmVyRG9jdW1lbnQgfHwgdCA6IHcpICE9PSBwICYmIGQodCksIHQgPSB0IHx8IHAsIGcpKSB7IGlmICgxMSAhPT0gQyAmJiAoZiA9IEsuZXhlYyhlKSkpIGlmIChvID0gZlsxXSkgeyBpZiAoOSA9PT0gQykgeyBpZiAoIShsID0gdC5nZXRFbGVtZW50QnlJZChvKSkpIHJldHVybiByOyBpZiAobC5pZCA9PT0gbykgcmV0dXJuIHIucHVzaChsKSwgciB9IGVsc2UgaWYgKG0gJiYgKGwgPSBtLmdldEVsZW1lbnRCeUlkKG8pKSAmJiBiKHQsIGwpICYmIGwuaWQgPT09IG8pIHJldHVybiByLnB1c2gobCksIHIgfSBlbHNlIHsgaWYgKGZbMl0pIHJldHVybiBxLmFwcGx5KHIsIHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSkpLCByOyBpZiAoKG8gPSBmWzNdKSAmJiBuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSByZXR1cm4gcS5hcHBseShyLCB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUobykpLCByIH0gaWYgKG4ucXNhICYmICFrW2UgKyAiICJdICYmICghdiB8fCAhdi50ZXN0KGUpKSkgeyBpZiAoMSAhPT0gQykgbSA9IHQsIHkgPSBlOyBlbHNlIGlmICgib2JqZWN0IiAhPT0gdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSB7IChjID0gdC5nZXRBdHRyaWJ1dGUoImlkIikpID8gYyA9IGMucmVwbGFjZSh0ZSwgbmUpIDogdC5zZXRBdHRyaWJ1dGUoImlkIiwgYyA9IHgpLCB1ID0gKGggPSBhKGUpKS5sZW5ndGg7IHdoaWxlICh1LS0pIGhbdV0gPSAiIyIgKyBjICsgIiAiICsgeWUoaFt1XSk7IHkgPSBoLmpvaW4oIiwiKSwgbSA9IEoudGVzdChlKSAmJiBnZSh0LnBhcmVudE5vZGUpIHx8IHQgfSBpZiAoeSkgdHJ5IHsgcmV0dXJuIHEuYXBwbHkociwgbS5xdWVyeVNlbGVjdG9yQWxsKHkpKSwgciB9IGNhdGNoIChlKSB7IH0gZmluYWxseSB7IGMgPT09IHggJiYgdC5yZW1vdmVBdHRyaWJ1dGUoImlkIikgfSB9IH0gcmV0dXJuIHMoZS5yZXBsYWNlKCQsICIkMSIpLCB0LCByLCBpKSB9IGZ1bmN0aW9uIGFlKCkgeyB2YXIgZSA9IFtdOyBmdW5jdGlvbiB0KG4sIGkpIHsgcmV0dXJuIGUucHVzaChuICsgIiAiKSA+IHIuY2FjaGVMZW5ndGggJiYgZGVsZXRlIHRbZS5zaGlmdCgpXSwgdFtuICsgIiAiXSA9IGkgfSByZXR1cm4gdCB9IGZ1bmN0aW9uIHVlKGUpIHsgcmV0dXJuIGVbeF0gPSAhMCwgZSB9IGZ1bmN0aW9uIHNlKGUpIHsgdmFyIHQgPSBwLmNyZWF0ZUVsZW1lbnQoImZpZWxkc2V0Iik7IHRyeSB7IHJldHVybiAhIWUodCkgfSBjYXRjaCAoZSkgeyByZXR1cm4gITEgfSBmaW5hbGx5IHsgdC5wYXJlbnROb2RlICYmIHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSwgdCA9IG51bGwgfSB9IGZ1bmN0aW9uIGxlKGUsIHQpIHsgdmFyIG4gPSBlLnNwbGl0KCJ8IiksIGkgPSBuLmxlbmd0aDsgd2hpbGUgKGktLSkgci5hdHRySGFuZGxlW25baV1dID0gdCB9IGZ1bmN0aW9uIGNlKGUsIHQpIHsgdmFyIG4gPSB0ICYmIGUsIHIgPSBuICYmIDEgPT09IGUubm9kZVR5cGUgJiYgMSA9PT0gdC5ub2RlVHlwZSAmJiBlLnNvdXJjZUluZGV4IC0gdC5zb3VyY2VJbmRleDsgaWYgKHIpIHJldHVybiByOyBpZiAobikgd2hpbGUgKG4gPSBuLm5leHRTaWJsaW5nKSBpZiAobiA9PT0gdCkgcmV0dXJuIC0xOyByZXR1cm4gZSA/IDEgOiAtMSB9IGZ1bmN0aW9uIGZlKGUpIHsgcmV0dXJuIGZ1bmN0aW9uICh0KSB7IHJldHVybiAiaW5wdXQiID09PSB0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgJiYgdC50eXBlID09PSBlIH0gfSBmdW5jdGlvbiBkZShlKSB7IHJldHVybiBmdW5jdGlvbiAodCkgeyB2YXIgbiA9IHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsgcmV0dXJuICgiaW5wdXQiID09PSBuIHx8ICJidXR0b24iID09PSBuKSAmJiB0LnR5cGUgPT09IGUgfSB9IGZ1bmN0aW9uIHBlKGUpIHsgcmV0dXJuIGZ1bmN0aW9uICh0KSB7IHJldHVybiAiZm9ybSIgaW4gdCA/IHQucGFyZW50Tm9kZSAmJiAhMSA9PT0gdC5kaXNhYmxlZCA/ICJsYWJlbCIgaW4gdCA/ICJsYWJlbCIgaW4gdC5wYXJlbnROb2RlID8gdC5wYXJlbnROb2RlLmRpc2FibGVkID09PSBlIDogdC5kaXNhYmxlZCA9PT0gZSA6IHQuaXNEaXNhYmxlZCA9PT0gZSB8fCB0LmlzRGlzYWJsZWQgIT09ICFlICYmIGllKHQpID09PSBlIDogdC5kaXNhYmxlZCA9PT0gZSA6ICJsYWJlbCIgaW4gdCAmJiB0LmRpc2FibGVkID09PSBlIH0gfSBmdW5jdGlvbiBoZShlKSB7IHJldHVybiB1ZShmdW5jdGlvbiAodCkgeyByZXR1cm4gdCA9ICt0LCB1ZShmdW5jdGlvbiAobiwgcikgeyB2YXIgaSwgbyA9IGUoW10sIG4ubGVuZ3RoLCB0KSwgYSA9IG8ubGVuZ3RoOyB3aGlsZSAoYS0tKSBuW2kgPSBvW2FdXSAmJiAobltpXSA9ICEocltpXSA9IG5baV0pKSB9KSB9KSB9IGZ1bmN0aW9uIGdlKGUpIHsgcmV0dXJuIGUgJiYgInVuZGVmaW5lZCIgIT0gdHlwZW9mIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUgJiYgZSB9IG4gPSBvZS5zdXBwb3J0ID0ge30sIG8gPSBvZS5pc1hNTCA9IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gZSAmJiAoZS5vd25lckRvY3VtZW50IHx8IGUpLmRvY3VtZW50RWxlbWVudDsgcmV0dXJuICEhdCAmJiAiSFRNTCIgIT09IHQubm9kZU5hbWUgfSwgZCA9IG9lLnNldERvY3VtZW50ID0gZnVuY3Rpb24gKGUpIHsgdmFyIHQsIGksIGEgPSBlID8gZS5vd25lckRvY3VtZW50IHx8IGUgOiB3OyByZXR1cm4gYSAhPT0gcCAmJiA5ID09PSBhLm5vZGVUeXBlICYmIGEuZG9jdW1lbnRFbGVtZW50ID8gKHAgPSBhLCBoID0gcC5kb2N1bWVudEVsZW1lbnQsIGcgPSAhbyhwKSwgdyAhPT0gcCAmJiAoaSA9IHAuZGVmYXVsdFZpZXcpICYmIGkudG9wICE9PSBpICYmIChpLmFkZEV2ZW50TGlzdGVuZXIgPyBpLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsIHJlLCAhMSkgOiBpLmF0dGFjaEV2ZW50ICYmIGkuYXR0YWNoRXZlbnQoIm9udW5sb2FkIiwgcmUpKSwgbi5hdHRyaWJ1dGVzID0gc2UoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUuY2xhc3NOYW1lID0gImkiLCAhZS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpIH0pLCBuLmdldEVsZW1lbnRzQnlUYWdOYW1lID0gc2UoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUuYXBwZW5kQ2hpbGQocC5jcmVhdGVDb21tZW50KCIiKSksICFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RoIH0pLCBuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBHLnRlc3QocC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSwgbi5nZXRCeUlkID0gc2UoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGguYXBwZW5kQ2hpbGQoZSkuaWQgPSB4LCAhcC5nZXRFbGVtZW50c0J5TmFtZSB8fCAhcC5nZXRFbGVtZW50c0J5TmFtZSh4KS5sZW5ndGggfSksIG4uZ2V0QnlJZCA/IChyLmZpbHRlci5JRCA9IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gZS5yZXBsYWNlKFosIGVlKTsgcmV0dXJuIGZ1bmN0aW9uIChlKSB7IHJldHVybiBlLmdldEF0dHJpYnV0ZSgiaWQiKSA9PT0gdCB9IH0sIHIuZmluZC5JRCA9IGZ1bmN0aW9uIChlLCB0KSB7IGlmICgidW5kZWZpbmVkIiAhPSB0eXBlb2YgdC5nZXRFbGVtZW50QnlJZCAmJiBnKSB7IHZhciBuID0gdC5nZXRFbGVtZW50QnlJZChlKTsgcmV0dXJuIG4gPyBbbl0gOiBbXSB9IH0pIDogKHIuZmlsdGVyLklEID0gZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSBlLnJlcGxhY2UoWiwgZWUpOyByZXR1cm4gZnVuY3Rpb24gKGUpIHsgdmFyIG4gPSAidW5kZWZpbmVkIiAhPSB0eXBlb2YgZS5nZXRBdHRyaWJ1dGVOb2RlICYmIGUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTsgcmV0dXJuIG4gJiYgbi52YWx1ZSA9PT0gdCB9IH0sIHIuZmluZC5JRCA9IGZ1bmN0aW9uIChlLCB0KSB7IGlmICgidW5kZWZpbmVkIiAhPSB0eXBlb2YgdC5nZXRFbGVtZW50QnlJZCAmJiBnKSB7IHZhciBuLCByLCBpLCBvID0gdC5nZXRFbGVtZW50QnlJZChlKTsgaWYgKG8pIHsgaWYgKChuID0gby5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSAmJiBuLnZhbHVlID09PSBlKSByZXR1cm4gW29dOyBpID0gdC5nZXRFbGVtZW50c0J5TmFtZShlKSwgciA9IDA7IHdoaWxlIChvID0gaVtyKytdKSBpZiAoKG4gPSBvLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpICYmIG4udmFsdWUgPT09IGUpIHJldHVybiBbb10gfSByZXR1cm4gW10gfSB9KSwgci5maW5kLlRBRyA9IG4uZ2V0RWxlbWVudHNCeVRhZ05hbWUgPyBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gInVuZGVmaW5lZCIgIT0gdHlwZW9mIHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPyB0LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpIDogbi5xc2EgPyB0LnF1ZXJ5U2VsZWN0b3JBbGwoZSkgOiB2b2lkIDAgfSA6IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBuLCByID0gW10sIGkgPSAwLCBvID0gdC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKTsgaWYgKCIqIiA9PT0gZSkgeyB3aGlsZSAobiA9IG9baSsrXSkgMSA9PT0gbi5ub2RlVHlwZSAmJiByLnB1c2gobik7IHJldHVybiByIH0gcmV0dXJuIG8gfSwgci5maW5kLkNMQVNTID0gbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGZ1bmN0aW9uIChlLCB0KSB7IGlmICgidW5kZWZpbmVkIiAhPSB0eXBlb2YgdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGcpIHJldHVybiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZSkgfSwgeSA9IFtdLCB2ID0gW10sIChuLnFzYSA9IEcudGVzdChwLnF1ZXJ5U2VsZWN0b3JBbGwpKSAmJiAoc2UoZnVuY3Rpb24gKGUpIHsgaC5hcHBlbmRDaGlsZChlKS5pbm5lckhUTUwgPSAiPGEgaWQ9JyIgKyB4ICsgIic+PC9hPjxzZWxlY3QgaWQ9JyIgKyB4ICsgIi1cclxcJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsIGUucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGggJiYgdi5wdXNoKCJbKl4kXT0iICsgSSArICIqKD86Jyd8XCJcIikiKSwgZS5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RoIHx8IHYucHVzaCgiXFxbIiArIEkgKyAiKig/OnZhbHVlfCIgKyBIICsgIikiKSwgZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR+PSIgKyB4ICsgIi1dIikubGVuZ3RoIHx8IHYucHVzaCgifj0iKSwgZS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aCB8fCB2LnB1c2goIjpjaGVja2VkIiksIGUucXVlcnlTZWxlY3RvckFsbCgiYSMiICsgeCArICIrKiIpLmxlbmd0aCB8fCB2LnB1c2goIi4jLitbK35dIikgfSksIHNlKGZ1bmN0aW9uIChlKSB7IGUuaW5uZXJIVE1MID0gIjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+PHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PiI7IHZhciB0ID0gcC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOyB0LnNldEF0dHJpYnV0ZSgidHlwZSIsICJoaWRkZW4iKSwgZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAiRCIpLCBlLnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1lPWRdIikubGVuZ3RoICYmIHYucHVzaCgibmFtZSIgKyBJICsgIipbKl4kfCF+XT89IiksIDIgIT09IGUucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGggJiYgdi5wdXNoKCI6ZW5hYmxlZCIsICI6ZGlzYWJsZWQiKSwgaC5hcHBlbmRDaGlsZChlKS5kaXNhYmxlZCA9ICEwLCAyICE9PSBlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpkaXNhYmxlZCIpLmxlbmd0aCAmJiB2LnB1c2goIjplbmFibGVkIiwgIjpkaXNhYmxlZCIpLCBlLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSwgdi5wdXNoKCIsLio6IikgfSkpLCAobi5tYXRjaGVzU2VsZWN0b3IgPSBHLnRlc3QobSA9IGgubWF0Y2hlcyB8fCBoLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fCBoLm1vek1hdGNoZXNTZWxlY3RvciB8fCBoLm9NYXRjaGVzU2VsZWN0b3IgfHwgaC5tc01hdGNoZXNTZWxlY3RvcikpICYmIHNlKGZ1bmN0aW9uIChlKSB7IG4uZGlzY29ubmVjdGVkTWF0Y2ggPSBtLmNhbGwoZSwgIioiKSwgbS5jYWxsKGUsICJbcyE9JyddOngiKSwgeS5wdXNoKCIhPSIsIE0pIH0pLCB2ID0gdi5sZW5ndGggJiYgbmV3IFJlZ0V4cCh2LmpvaW4oInwiKSksIHkgPSB5Lmxlbmd0aCAmJiBuZXcgUmVnRXhwKHkuam9pbigifCIpKSwgdCA9IEcudGVzdChoLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSwgYiA9IHQgfHwgRy50ZXN0KGguY29udGFpbnMpID8gZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4gPSA5ID09PSBlLm5vZGVUeXBlID8gZS5kb2N1bWVudEVsZW1lbnQgOiBlLCByID0gdCAmJiB0LnBhcmVudE5vZGU7IHJldHVybiBlID09PSByIHx8ICEoIXIgfHwgMSAhPT0gci5ub2RlVHlwZSB8fCAhKG4uY29udGFpbnMgPyBuLmNvbnRhaW5zKHIpIDogZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiAxNiAmIGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocikpKSB9IDogZnVuY3Rpb24gKGUsIHQpIHsgaWYgKHQpIHdoaWxlICh0ID0gdC5wYXJlbnROb2RlKSBpZiAodCA9PT0gZSkgcmV0dXJuICEwOyByZXR1cm4gITEgfSwgQSA9IHQgPyBmdW5jdGlvbiAoZSwgdCkgeyBpZiAoZSA9PT0gdCkgcmV0dXJuIGYgPSAhMCwgMDsgdmFyIHIgPSAhZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICF0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uOyByZXR1cm4gciB8fCAoMSAmIChyID0gKGUub3duZXJEb2N1bWVudCB8fCBlKSA9PT0gKHQub3duZXJEb2N1bWVudCB8fCB0KSA/IGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkgOiAxKSB8fCAhbi5zb3J0RGV0YWNoZWQgJiYgdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKSA9PT0gciA/IGUgPT09IHAgfHwgZS5vd25lckRvY3VtZW50ID09PSB3ICYmIGIodywgZSkgPyAtMSA6IHQgPT09IHAgfHwgdC5vd25lckRvY3VtZW50ID09PSB3ICYmIGIodywgdCkgPyAxIDogYyA/IFAoYywgZSkgLSBQKGMsIHQpIDogMCA6IDQgJiByID8gLTEgOiAxKSB9IDogZnVuY3Rpb24gKGUsIHQpIHsgaWYgKGUgPT09IHQpIHJldHVybiBmID0gITAsIDA7IHZhciBuLCByID0gMCwgaSA9IGUucGFyZW50Tm9kZSwgbyA9IHQucGFyZW50Tm9kZSwgYSA9IFtlXSwgdSA9IFt0XTsgaWYgKCFpIHx8ICFvKSByZXR1cm4gZSA9PT0gcCA/IC0xIDogdCA9PT0gcCA/IDEgOiBpID8gLTEgOiBvID8gMSA6IGMgPyBQKGMsIGUpIC0gUChjLCB0KSA6IDA7IGlmIChpID09PSBvKSByZXR1cm4gY2UoZSwgdCk7IG4gPSBlOyB3aGlsZSAobiA9IG4ucGFyZW50Tm9kZSkgYS51bnNoaWZ0KG4pOyBuID0gdDsgd2hpbGUgKG4gPSBuLnBhcmVudE5vZGUpIHUudW5zaGlmdChuKTsgd2hpbGUgKGFbcl0gPT09IHVbcl0pIHIrKzsgcmV0dXJuIHIgPyBjZShhW3JdLCB1W3JdKSA6IGFbcl0gPT09IHcgPyAtMSA6IHVbcl0gPT09IHcgPyAxIDogMCB9LCBwKSA6IHAgfSwgb2UubWF0Y2hlcyA9IGZ1bmN0aW9uIChlLCB0KSB7IHJldHVybiBvZShlLCBudWxsLCBudWxsLCB0KSB9LCBvZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiAoZSwgdCkgeyBpZiAoKGUub3duZXJEb2N1bWVudCB8fCBlKSAhPT0gcCAmJiBkKGUpLCB0ID0gdC5yZXBsYWNlKF8sICI9JyQxJ10iKSwgbi5tYXRjaGVzU2VsZWN0b3IgJiYgZyAmJiAha1t0ICsgIiAiXSAmJiAoIXkgfHwgIXkudGVzdCh0KSkgJiYgKCF2IHx8ICF2LnRlc3QodCkpKSB0cnkgeyB2YXIgciA9IG0uY2FsbChlLCB0KTsgaWYgKHIgfHwgbi5kaXNjb25uZWN0ZWRNYXRjaCB8fCBlLmRvY3VtZW50ICYmIDExICE9PSBlLmRvY3VtZW50Lm5vZGVUeXBlKSByZXR1cm4gciB9IGNhdGNoIChlKSB7IH0gcmV0dXJuIG9lKHQsIHAsIG51bGwsIFtlXSkubGVuZ3RoID4gMCB9LCBvZS5jb250YWlucyA9IGZ1bmN0aW9uIChlLCB0KSB7IHJldHVybiAoZS5vd25lckRvY3VtZW50IHx8IGUpICE9PSBwICYmIGQoZSksIGIoZSwgdCkgfSwgb2UuYXR0ciA9IGZ1bmN0aW9uIChlLCB0KSB7IChlLm93bmVyRG9jdW1lbnQgfHwgZSkgIT09IHAgJiYgZChlKTsgdmFyIGkgPSByLmF0dHJIYW5kbGVbdC50b0xvd2VyQ2FzZSgpXSwgbyA9IGkgJiYgRC5jYWxsKHIuYXR0ckhhbmRsZSwgdC50b0xvd2VyQ2FzZSgpKSA/IGkoZSwgdCwgIWcpIDogdm9pZCAwOyByZXR1cm4gdm9pZCAwICE9PSBvID8gbyA6IG4uYXR0cmlidXRlcyB8fCAhZyA/IGUuZ2V0QXR0cmlidXRlKHQpIDogKG8gPSBlLmdldEF0dHJpYnV0ZU5vZGUodCkpICYmIG8uc3BlY2lmaWVkID8gby52YWx1ZSA6IG51bGwgfSwgb2UuZXNjYXBlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIChlICsgIiIpLnJlcGxhY2UodGUsIG5lKSB9LCBvZS5lcnJvciA9IGZ1bmN0aW9uIChlKSB7IHRocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIiArIGUpIH0sIG9lLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiAoZSkgeyB2YXIgdCwgciA9IFtdLCBpID0gMCwgbyA9IDA7IGlmIChmID0gIW4uZGV0ZWN0RHVwbGljYXRlcywgYyA9ICFuLnNvcnRTdGFibGUgJiYgZS5zbGljZSgwKSwgZS5zb3J0KEEpLCBmKSB7IHdoaWxlICh0ID0gZVtvKytdKSB0ID09PSBlW29dICYmIChpID0gci5wdXNoKG8pKTsgd2hpbGUgKGktLSkgZS5zcGxpY2UocltpXSwgMSkgfSByZXR1cm4gYyA9IG51bGwsIGUgfSwgaSA9IG9lLmdldFRleHQgPSBmdW5jdGlvbiAoZSkgeyB2YXIgdCwgbiA9ICIiLCByID0gMCwgbyA9IGUubm9kZVR5cGU7IGlmIChvKSB7IGlmICgxID09PSBvIHx8IDkgPT09IG8gfHwgMTEgPT09IG8pIHsgaWYgKCJzdHJpbmciID09IHR5cGVvZiBlLnRleHRDb250ZW50KSByZXR1cm4gZS50ZXh0Q29udGVudDsgZm9yIChlID0gZS5maXJzdENoaWxkOyBlOyBlID0gZS5uZXh0U2libGluZyluICs9IGkoZSkgfSBlbHNlIGlmICgzID09PSBvIHx8IDQgPT09IG8pIHJldHVybiBlLm5vZGVWYWx1ZSB9IGVsc2Ugd2hpbGUgKHQgPSBlW3IrK10pIG4gKz0gaSh0KTsgcmV0dXJuIG4gfSwgKHIgPSBvZS5zZWxlY3RvcnMgPSB7IGNhY2hlTGVuZ3RoOiA1MCwgY3JlYXRlUHNldWRvOiB1ZSwgbWF0Y2g6IFgsIGF0dHJIYW5kbGU6IHt9LCBmaW5kOiB7fSwgcmVsYXRpdmU6IHsgIj4iOiB7IGRpcjogInBhcmVudE5vZGUiLCBmaXJzdDogITAgfSwgIiAiOiB7IGRpcjogInBhcmVudE5vZGUiIH0sICIrIjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmciLCBmaXJzdDogITAgfSwgIn4iOiB7IGRpcjogInByZXZpb3VzU2libGluZyIgfSB9LCBwcmVGaWx0ZXI6IHsgQVRUUjogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGVbMV0gPSBlWzFdLnJlcGxhY2UoWiwgZWUpLCBlWzNdID0gKGVbM10gfHwgZVs0XSB8fCBlWzVdIHx8ICIiKS5yZXBsYWNlKFosIGVlKSwgIn49IiA9PT0gZVsyXSAmJiAoZVszXSA9ICIgIiArIGVbM10gKyAiICIpLCBlLnNsaWNlKDAsIDQpIH0sIENISUxEOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZVsxXSA9IGVbMV0udG9Mb3dlckNhc2UoKSwgIm50aCIgPT09IGVbMV0uc2xpY2UoMCwgMykgPyAoZVszXSB8fCBvZS5lcnJvcihlWzBdKSwgZVs0XSA9ICsoZVs0XSA/IGVbNV0gKyAoZVs2XSB8fCAxKSA6IDIgKiAoImV2ZW4iID09PSBlWzNdIHx8ICJvZGQiID09PSBlWzNdKSksIGVbNV0gPSArKGVbN10gKyBlWzhdIHx8ICJvZGQiID09PSBlWzNdKSkgOiBlWzNdICYmIG9lLmVycm9yKGVbMF0pLCBlIH0sIFBTRVVETzogZnVuY3Rpb24gKGUpIHsgdmFyIHQsIG4gPSAhZVs2XSAmJiBlWzJdOyByZXR1cm4gWC5DSElMRC50ZXN0KGVbMF0pID8gbnVsbCA6IChlWzNdID8gZVsyXSA9IGVbNF0gfHwgZVs1XSB8fCAiIiA6IG4gJiYgVS50ZXN0KG4pICYmICh0ID0gYShuLCAhMCkpICYmICh0ID0gbi5pbmRleE9mKCIpIiwgbi5sZW5ndGggLSB0KSAtIG4ubGVuZ3RoKSAmJiAoZVswXSA9IGVbMF0uc2xpY2UoMCwgdCksIGVbMl0gPSBuLnNsaWNlKDAsIHQpKSwgZS5zbGljZSgwLCAzKSkgfSB9LCBmaWx0ZXI6IHsgVEFHOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IGUucmVwbGFjZShaLCBlZSkudG9Mb3dlckNhc2UoKTsgcmV0dXJuICIqIiA9PT0gZSA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuICEwIH0gOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS5ub2RlTmFtZSAmJiBlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHQgfSB9LCBDTEFTUzogZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSBFW2UgKyAiICJdOyByZXR1cm4gdCB8fCAodCA9IG5ldyBSZWdFeHAoIihefCIgKyBJICsgIikiICsgZSArICIoIiArIEkgKyAifCQpIikpICYmIEUoZSwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHQudGVzdCgic3RyaW5nIiA9PSB0eXBlb2YgZS5jbGFzc05hbWUgJiYgZS5jbGFzc05hbWUgfHwgInVuZGVmaW5lZCIgIT0gdHlwZW9mIGUuZ2V0QXR0cmlidXRlICYmIGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpIHx8ICIiKSB9KSB9LCBBVFRSOiBmdW5jdGlvbiAoZSwgdCwgbikgeyByZXR1cm4gZnVuY3Rpb24gKHIpIHsgdmFyIGkgPSBvZS5hdHRyKHIsIGUpOyByZXR1cm4gbnVsbCA9PSBpID8gIiE9IiA9PT0gdCA6ICF0IHx8IChpICs9ICIiLCAiPSIgPT09IHQgPyBpID09PSBuIDogIiE9IiA9PT0gdCA/IGkgIT09IG4gOiAiXj0iID09PSB0ID8gbiAmJiAwID09PSBpLmluZGV4T2YobikgOiAiKj0iID09PSB0ID8gbiAmJiBpLmluZGV4T2YobikgPiAtMSA6ICIkPSIgPT09IHQgPyBuICYmIGkuc2xpY2UoLW4ubGVuZ3RoKSA9PT0gbiA6ICJ+PSIgPT09IHQgPyAoIiAiICsgaS5yZXBsYWNlKFcsICIgIikgKyAiICIpLmluZGV4T2YobikgPiAtMSA6ICJ8PSIgPT09IHQgJiYgKGkgPT09IG4gfHwgaS5zbGljZSgwLCBuLmxlbmd0aCArIDEpID09PSBuICsgIi0iKSkgfSB9LCBDSElMRDogZnVuY3Rpb24gKGUsIHQsIG4sIHIsIGkpIHsgdmFyIG8gPSAibnRoIiAhPT0gZS5zbGljZSgwLCAzKSwgYSA9ICJsYXN0IiAhPT0gZS5zbGljZSgtNCksIHUgPSAib2YtdHlwZSIgPT09IHQ7IHJldHVybiAxID09PSByICYmIDAgPT09IGkgPyBmdW5jdGlvbiAoZSkgeyByZXR1cm4gISFlLnBhcmVudE5vZGUgfSA6IGZ1bmN0aW9uICh0LCBuLCBzKSB7IHZhciBsLCBjLCBmLCBkLCBwLCBoLCBnID0gbyAhPT0gYSA/ICJuZXh0U2libGluZyIgOiAicHJldmlvdXNTaWJsaW5nIiwgdiA9IHQucGFyZW50Tm9kZSwgeSA9IHUgJiYgdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBtID0gIXMgJiYgIXUsIGIgPSAhMTsgaWYgKHYpIHsgaWYgKG8pIHsgd2hpbGUgKGcpIHsgZCA9IHQ7IHdoaWxlIChkID0gZFtnXSkgaWYgKHUgPyBkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHkgOiAxID09PSBkLm5vZGVUeXBlKSByZXR1cm4gITE7IGggPSBnID0gIm9ubHkiID09PSBlICYmICFoICYmICJuZXh0U2libGluZyIgfSByZXR1cm4gITAgfSBpZiAoaCA9IFthID8gdi5maXJzdENoaWxkIDogdi5sYXN0Q2hpbGRdLCBhICYmIG0pIHsgYiA9IChwID0gKGwgPSAoYyA9IChmID0gKGQgPSB2KVt4XSB8fCAoZFt4XSA9IHt9KSlbZC51bmlxdWVJRF0gfHwgKGZbZC51bmlxdWVJRF0gPSB7fSkpW2VdIHx8IFtdKVswXSA9PT0gQyAmJiBsWzFdKSAmJiBsWzJdLCBkID0gcCAmJiB2LmNoaWxkTm9kZXNbcF07IHdoaWxlIChkID0gKytwICYmIGQgJiYgZFtnXSB8fCAoYiA9IHAgPSAwKSB8fCBoLnBvcCgpKSBpZiAoMSA9PT0gZC5ub2RlVHlwZSAmJiArK2IgJiYgZCA9PT0gdCkgeyBjW2VdID0gW0MsIHAsIGJdOyBicmVhayB9IH0gZWxzZSBpZiAobSAmJiAoYiA9IHAgPSAobCA9IChjID0gKGYgPSAoZCA9IHQpW3hdIHx8IChkW3hdID0ge30pKVtkLnVuaXF1ZUlEXSB8fCAoZltkLnVuaXF1ZUlEXSA9IHt9KSlbZV0gfHwgW10pWzBdID09PSBDICYmIGxbMV0pLCAhMSA9PT0gYikgd2hpbGUgKGQgPSArK3AgJiYgZCAmJiBkW2ddIHx8IChiID0gcCA9IDApIHx8IGgucG9wKCkpIGlmICgodSA/IGQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0geSA6IDEgPT09IGQubm9kZVR5cGUpICYmICsrYiAmJiAobSAmJiAoKGMgPSAoZiA9IGRbeF0gfHwgKGRbeF0gPSB7fSkpW2QudW5pcXVlSURdIHx8IChmW2QudW5pcXVlSURdID0ge30pKVtlXSA9IFtDLCBiXSksIGQgPT09IHQpKSBicmVhazsgcmV0dXJuIChiIC09IGkpID09PSByIHx8IGIgJSByID09IDAgJiYgYiAvIHIgPj0gMCB9IH0gfSwgUFNFVURPOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiwgaSA9IHIucHNldWRvc1tlXSB8fCByLnNldEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXSB8fCBvZS5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiICsgZSk7IHJldHVybiBpW3hdID8gaSh0KSA6IGkubGVuZ3RoID4gMSA/IChuID0gW2UsIGUsICIiLCB0XSwgci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSkgPyB1ZShmdW5jdGlvbiAoZSwgbikgeyB2YXIgciwgbyA9IGkoZSwgdCksIGEgPSBvLmxlbmd0aDsgd2hpbGUgKGEtLSkgZVtyID0gUChlLCBvW2FdKV0gPSAhKG5bcl0gPSBvW2FdKSB9KSA6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBpKGUsIDAsIG4pIH0pIDogaSB9IH0sIHBzZXVkb3M6IHsgbm90OiB1ZShmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IFtdLCBuID0gW10sIHIgPSB1KGUucmVwbGFjZSgkLCAiJDEiKSk7IHJldHVybiByW3hdID8gdWUoZnVuY3Rpb24gKGUsIHQsIG4sIGkpIHsgdmFyIG8sIGEgPSByKGUsIG51bGwsIGksIFtdKSwgdSA9IGUubGVuZ3RoOyB3aGlsZSAodS0tKSAobyA9IGFbdV0pICYmIChlW3VdID0gISh0W3VdID0gbykpIH0pIDogZnVuY3Rpb24gKGUsIGksIG8pIHsgcmV0dXJuIHRbMF0gPSBlLCByKHQsIG51bGwsIG8sIG4pLCB0WzBdID0gbnVsbCwgIW4ucG9wKCkgfSB9KSwgaGFzOiB1ZShmdW5jdGlvbiAoZSkgeyByZXR1cm4gZnVuY3Rpb24gKHQpIHsgcmV0dXJuIG9lKGUsIHQpLmxlbmd0aCA+IDAgfSB9KSwgY29udGFpbnM6IHVlKGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID0gZS5yZXBsYWNlKFosIGVlKSwgZnVuY3Rpb24gKHQpIHsgcmV0dXJuICh0LnRleHRDb250ZW50IHx8IHQuaW5uZXJUZXh0IHx8IGkodCkpLmluZGV4T2YoZSkgPiAtMSB9IH0pLCBsYW5nOiB1ZShmdW5jdGlvbiAoZSkgeyByZXR1cm4gVi50ZXN0KGUgfHwgIiIpIHx8IG9lLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiICsgZSksIGUgPSBlLnJlcGxhY2UoWiwgZWUpLnRvTG93ZXJDYXNlKCksIGZ1bmN0aW9uICh0KSB7IHZhciBuOyBkbyB7IGlmIChuID0gZyA/IHQubGFuZyA6IHQuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpIHx8IHQuZ2V0QXR0cmlidXRlKCJsYW5nIikpIHJldHVybiAobiA9IG4udG9Mb3dlckNhc2UoKSkgPT09IGUgfHwgMCA9PT0gbi5pbmRleE9mKGUgKyAiLSIpIH0gd2hpbGUgKCh0ID0gdC5wYXJlbnROb2RlKSAmJiAxID09PSB0Lm5vZGVUeXBlKTsgcmV0dXJuICExIH0gfSksIHRhcmdldDogZnVuY3Rpb24gKHQpIHsgdmFyIG4gPSBlLmxvY2F0aW9uICYmIGUubG9jYXRpb24uaGFzaDsgcmV0dXJuIG4gJiYgbi5zbGljZSgxKSA9PT0gdC5pZCB9LCByb290OiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA9PT0gaCB9LCBmb2N1czogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPT09IHAuYWN0aXZlRWxlbWVudCAmJiAoIXAuaGFzRm9jdXMgfHwgcC5oYXNGb2N1cygpKSAmJiAhIShlLnR5cGUgfHwgZS5ocmVmIHx8IH5lLnRhYkluZGV4KSB9LCBlbmFibGVkOiBwZSghMSksIGRpc2FibGVkOiBwZSghMCksIGNoZWNrZWQ6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyByZXR1cm4gImlucHV0IiA9PT0gdCAmJiAhIWUuY2hlY2tlZCB8fCAib3B0aW9uIiA9PT0gdCAmJiAhIWUuc2VsZWN0ZWQgfSwgc2VsZWN0ZWQ6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlLnBhcmVudE5vZGUgJiYgZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsICEwID09PSBlLnNlbGVjdGVkIH0sIGVtcHR5OiBmdW5jdGlvbiAoZSkgeyBmb3IgKGUgPSBlLmZpcnN0Q2hpbGQ7IGU7IGUgPSBlLm5leHRTaWJsaW5nKWlmIChlLm5vZGVUeXBlIDwgNikgcmV0dXJuICExOyByZXR1cm4gITAgfSwgcGFyZW50OiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gIXIucHNldWRvcy5lbXB0eShlKSB9LCBoZWFkZXI6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBZLnRlc3QoZS5ub2RlTmFtZSkgfSwgaW5wdXQ6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBRLnRlc3QoZS5ub2RlTmFtZSkgfSwgYnV0dG9uOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsgcmV0dXJuICJpbnB1dCIgPT09IHQgJiYgImJ1dHRvbiIgPT09IGUudHlwZSB8fCAiYnV0dG9uIiA9PT0gdCB9LCB0ZXh0OiBmdW5jdGlvbiAoZSkgeyB2YXIgdDsgcmV0dXJuICJpbnB1dCIgPT09IGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAmJiAidGV4dCIgPT09IGUudHlwZSAmJiAobnVsbCA9PSAodCA9IGUuZ2V0QXR0cmlidXRlKCJ0eXBlIikpIHx8ICJ0ZXh0IiA9PT0gdC50b0xvd2VyQ2FzZSgpKSB9LCBmaXJzdDogaGUoZnVuY3Rpb24gKCkgeyByZXR1cm4gWzBdIH0pLCBsYXN0OiBoZShmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gW3QgLSAxXSB9KSwgZXE6IGhlKGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiBbbiA8IDAgPyBuICsgdCA6IG5dIH0pLCBldmVuOiBoZShmdW5jdGlvbiAoZSwgdCkgeyBmb3IgKHZhciBuID0gMDsgbiA8IHQ7IG4gKz0gMillLnB1c2gobik7IHJldHVybiBlIH0pLCBvZGQ6IGhlKGZ1bmN0aW9uIChlLCB0KSB7IGZvciAodmFyIG4gPSAxOyBuIDwgdDsgbiArPSAyKWUucHVzaChuKTsgcmV0dXJuIGUgfSksIGx0OiBoZShmdW5jdGlvbiAoZSwgdCwgbikgeyBmb3IgKHZhciByID0gbiA8IDAgPyBuICsgdCA6IG47IC0tciA+PSAwOyllLnB1c2gocik7IHJldHVybiBlIH0pLCBndDogaGUoZnVuY3Rpb24gKGUsIHQsIG4pIHsgZm9yICh2YXIgciA9IG4gPCAwID8gbiArIHQgOiBuOyArK3IgPCB0OyllLnB1c2gocik7IHJldHVybiBlIH0pIH0gfSkucHNldWRvcy5udGggPSByLnBzZXVkb3MuZXE7IGZvciAodCBpbiB7IHJhZGlvOiAhMCwgY2hlY2tib3g6ICEwLCBmaWxlOiAhMCwgcGFzc3dvcmQ6ICEwLCBpbWFnZTogITAgfSkgci5wc2V1ZG9zW3RdID0gZmUodCk7IGZvciAodCBpbiB7IHN1Ym1pdDogITAsIHJlc2V0OiAhMCB9KSByLnBzZXVkb3NbdF0gPSBkZSh0KTsgZnVuY3Rpb24gdmUoKSB7IH0gdmUucHJvdG90eXBlID0gci5maWx0ZXJzID0gci5wc2V1ZG9zLCByLnNldEZpbHRlcnMgPSBuZXcgdmUsIGEgPSBvZS50b2tlbml6ZSA9IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBuLCBpLCBvLCBhLCB1LCBzLCBsLCBjID0gTltlICsgIiAiXTsgaWYgKGMpIHJldHVybiB0ID8gMCA6IGMuc2xpY2UoMCk7IHUgPSBlLCBzID0gW10sIGwgPSByLnByZUZpbHRlcjsgd2hpbGUgKHUpIHsgbiAmJiAhKGkgPSBGLmV4ZWModSkpIHx8IChpICYmICh1ID0gdS5zbGljZShpWzBdLmxlbmd0aCkgfHwgdSksIHMucHVzaChvID0gW10pKSwgbiA9ICExLCAoaSA9IHouZXhlYyh1KSkgJiYgKG4gPSBpLnNoaWZ0KCksIG8ucHVzaCh7IHZhbHVlOiBuLCB0eXBlOiBpWzBdLnJlcGxhY2UoJCwgIiAiKSB9KSwgdSA9IHUuc2xpY2Uobi5sZW5ndGgpKTsgZm9yIChhIGluIHIuZmlsdGVyKSAhKGkgPSBYW2FdLmV4ZWModSkpIHx8IGxbYV0gJiYgIShpID0gbFthXShpKSkgfHwgKG4gPSBpLnNoaWZ0KCksIG8ucHVzaCh7IHZhbHVlOiBuLCB0eXBlOiBhLCBtYXRjaGVzOiBpIH0pLCB1ID0gdS5zbGljZShuLmxlbmd0aCkpOyBpZiAoIW4pIGJyZWFrIH0gcmV0dXJuIHQgPyB1Lmxlbmd0aCA6IHUgPyBvZS5lcnJvcihlKSA6IE4oZSwgcykuc2xpY2UoMCkgfTsgZnVuY3Rpb24geWUoZSkgeyBmb3IgKHZhciB0ID0gMCwgbiA9IGUubGVuZ3RoLCByID0gIiI7IHQgPCBuOyB0KyspciArPSBlW3RdLnZhbHVlOyByZXR1cm4gciB9IGZ1bmN0aW9uIG1lKGUsIHQsIG4pIHsgdmFyIHIgPSB0LmRpciwgaSA9IHQubmV4dCwgbyA9IGkgfHwgciwgYSA9IG4gJiYgInBhcmVudE5vZGUiID09PSBvLCB1ID0gVCsrOyByZXR1cm4gdC5maXJzdCA/IGZ1bmN0aW9uICh0LCBuLCBpKSB7IHdoaWxlICh0ID0gdFtyXSkgaWYgKDEgPT09IHQubm9kZVR5cGUgfHwgYSkgcmV0dXJuIGUodCwgbiwgaSk7IHJldHVybiAhMSB9IDogZnVuY3Rpb24gKHQsIG4sIHMpIHsgdmFyIGwsIGMsIGYsIGQgPSBbQywgdV07IGlmIChzKSB7IHdoaWxlICh0ID0gdFtyXSkgaWYgKCgxID09PSB0Lm5vZGVUeXBlIHx8IGEpICYmIGUodCwgbiwgcykpIHJldHVybiAhMCB9IGVsc2Ugd2hpbGUgKHQgPSB0W3JdKSBpZiAoMSA9PT0gdC5ub2RlVHlwZSB8fCBhKSBpZiAoZiA9IHRbeF0gfHwgKHRbeF0gPSB7fSksIGMgPSBmW3QudW5pcXVlSURdIHx8IChmW3QudW5pcXVlSURdID0ge30pLCBpICYmIGkgPT09IHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgdCA9IHRbcl0gfHwgdDsgZWxzZSB7IGlmICgobCA9IGNbb10pICYmIGxbMF0gPT09IEMgJiYgbFsxXSA9PT0gdSkgcmV0dXJuIGRbMl0gPSBsWzJdOyBpZiAoY1tvXSA9IGQsIGRbMl0gPSBlKHQsIG4sIHMpKSByZXR1cm4gITAgfSByZXR1cm4gITEgfSB9IGZ1bmN0aW9uIGJlKGUpIHsgcmV0dXJuIGUubGVuZ3RoID4gMSA/IGZ1bmN0aW9uICh0LCBuLCByKSB7IHZhciBpID0gZS5sZW5ndGg7IHdoaWxlIChpLS0pIGlmICghZVtpXSh0LCBuLCByKSkgcmV0dXJuICExOyByZXR1cm4gITAgfSA6IGVbMF0gfSBmdW5jdGlvbiB4ZShlLCB0LCBuKSB7IGZvciAodmFyIHIgPSAwLCBpID0gdC5sZW5ndGg7IHIgPCBpOyByKyspb2UoZSwgdFtyXSwgbik7IHJldHVybiBuIH0gZnVuY3Rpb24gd2UoZSwgdCwgbiwgciwgaSkgeyBmb3IgKHZhciBvLCBhID0gW10sIHUgPSAwLCBzID0gZS5sZW5ndGgsIGwgPSBudWxsICE9IHQ7IHUgPCBzOyB1KyspKG8gPSBlW3VdKSAmJiAobiAmJiAhbihvLCByLCBpKSB8fCAoYS5wdXNoKG8pLCBsICYmIHQucHVzaCh1KSkpOyByZXR1cm4gYSB9IGZ1bmN0aW9uIENlKGUsIHQsIG4sIHIsIGksIG8pIHsgcmV0dXJuIHIgJiYgIXJbeF0gJiYgKHIgPSBDZShyKSksIGkgJiYgIWlbeF0gJiYgKGkgPSBDZShpLCBvKSksIHVlKGZ1bmN0aW9uIChvLCBhLCB1LCBzKSB7IHZhciBsLCBjLCBmLCBkID0gW10sIHAgPSBbXSwgaCA9IGEubGVuZ3RoLCBnID0gbyB8fCB4ZSh0IHx8ICIqIiwgdS5ub2RlVHlwZSA/IFt1XSA6IHUsIFtdKSwgdiA9ICFlIHx8ICFvICYmIHQgPyBnIDogd2UoZywgZCwgZSwgdSwgcyksIHkgPSBuID8gaSB8fCAobyA/IGUgOiBoIHx8IHIpID8gW10gOiBhIDogdjsgaWYgKG4gJiYgbih2LCB5LCB1LCBzKSwgcikgeyBsID0gd2UoeSwgcCksIHIobCwgW10sIHUsIHMpLCBjID0gbC5sZW5ndGg7IHdoaWxlIChjLS0pIChmID0gbFtjXSkgJiYgKHlbcFtjXV0gPSAhKHZbcFtjXV0gPSBmKSkgfSBpZiAobykgeyBpZiAoaSB8fCBlKSB7IGlmIChpKSB7IGwgPSBbXSwgYyA9IHkubGVuZ3RoOyB3aGlsZSAoYy0tKSAoZiA9IHlbY10pICYmIGwucHVzaCh2W2NdID0gZik7IGkobnVsbCwgeSA9IFtdLCBsLCBzKSB9IGMgPSB5Lmxlbmd0aDsgd2hpbGUgKGMtLSkgKGYgPSB5W2NdKSAmJiAobCA9IGkgPyBQKG8sIGYpIDogZFtjXSkgPiAtMSAmJiAob1tsXSA9ICEoYVtsXSA9IGYpKSB9IH0gZWxzZSB5ID0gd2UoeSA9PT0gYSA/IHkuc3BsaWNlKGgsIHkubGVuZ3RoKSA6IHkpLCBpID8gaShudWxsLCBhLCB5LCBzKSA6IHEuYXBwbHkoYSwgeSkgfSkgfSBmdW5jdGlvbiBUZShlKSB7IGZvciAodmFyIHQsIG4sIGksIG8gPSBlLmxlbmd0aCwgYSA9IHIucmVsYXRpdmVbZVswXS50eXBlXSwgdSA9IGEgfHwgci5yZWxhdGl2ZVsiICJdLCBzID0gYSA/IDEgOiAwLCBjID0gbWUoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPT09IHQgfSwgdSwgITApLCBmID0gbWUoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIFAodCwgZSkgPiAtMSB9LCB1LCAhMCksIGQgPSBbZnVuY3Rpb24gKGUsIG4sIHIpIHsgdmFyIGkgPSAhYSAmJiAociB8fCBuICE9PSBsKSB8fCAoKHQgPSBuKS5ub2RlVHlwZSA/IGMoZSwgbiwgcikgOiBmKGUsIG4sIHIpKTsgcmV0dXJuIHQgPSBudWxsLCBpIH1dOyBzIDwgbzsgcysrKWlmIChuID0gci5yZWxhdGl2ZVtlW3NdLnR5cGVdKSBkID0gW21lKGJlKGQpLCBuKV07IGVsc2UgeyBpZiAoKG4gPSByLmZpbHRlcltlW3NdLnR5cGVdLmFwcGx5KG51bGwsIGVbc10ubWF0Y2hlcykpW3hdKSB7IGZvciAoaSA9ICsrczsgaSA8IG87IGkrKylpZiAoci5yZWxhdGl2ZVtlW2ldLnR5cGVdKSBicmVhazsgcmV0dXJuIENlKHMgPiAxICYmIGJlKGQpLCBzID4gMSAmJiB5ZShlLnNsaWNlKDAsIHMgLSAxKS5jb25jYXQoeyB2YWx1ZTogIiAiID09PSBlW3MgLSAyXS50eXBlID8gIioiIDogIiIgfSkpLnJlcGxhY2UoJCwgIiQxIiksIG4sIHMgPCBpICYmIFRlKGUuc2xpY2UocywgaSkpLCBpIDwgbyAmJiBUZShlID0gZS5zbGljZShpKSksIGkgPCBvICYmIHllKGUpKSB9IGQucHVzaChuKSB9IHJldHVybiBiZShkKSB9IGZ1bmN0aW9uIEVlKGUsIHQpIHsgdmFyIG4gPSB0Lmxlbmd0aCA+IDAsIGkgPSBlLmxlbmd0aCA+IDAsIG8gPSBmdW5jdGlvbiAobywgYSwgdSwgcywgYykgeyB2YXIgZiwgaCwgdiwgeSA9IDAsIG0gPSAiMCIsIGIgPSBvICYmIFtdLCB4ID0gW10sIHcgPSBsLCBUID0gbyB8fCBpICYmIHIuZmluZC5UQUcoIioiLCBjKSwgRSA9IEMgKz0gbnVsbCA9PSB3ID8gMSA6IE1hdGgucmFuZG9tKCkgfHwgLjEsIE4gPSBULmxlbmd0aDsgZm9yIChjICYmIChsID0gYSA9PT0gcCB8fCBhIHx8IGMpOyBtICE9PSBOICYmIG51bGwgIT0gKGYgPSBUW21dKTsgbSsrKSB7IGlmIChpICYmIGYpIHsgaCA9IDAsIGEgfHwgZi5vd25lckRvY3VtZW50ID09PSBwIHx8IChkKGYpLCB1ID0gIWcpOyB3aGlsZSAodiA9IGVbaCsrXSkgaWYgKHYoZiwgYSB8fCBwLCB1KSkgeyBzLnB1c2goZik7IGJyZWFrIH0gYyAmJiAoQyA9IEUpIH0gbiAmJiAoKGYgPSAhdiAmJiBmKSAmJiB5LS0gLCBvICYmIGIucHVzaChmKSkgfSBpZiAoeSArPSBtLCBuICYmIG0gIT09IHkpIHsgaCA9IDA7IHdoaWxlICh2ID0gdFtoKytdKSB2KGIsIHgsIGEsIHUpOyBpZiAobykgeyBpZiAoeSA+IDApIHdoaWxlIChtLS0pIGJbbV0gfHwgeFttXSB8fCAoeFttXSA9IEwuY2FsbChzKSk7IHggPSB3ZSh4KSB9IHEuYXBwbHkocywgeCksIGMgJiYgIW8gJiYgeC5sZW5ndGggPiAwICYmIHkgKyB0Lmxlbmd0aCA+IDEgJiYgb2UudW5pcXVlU29ydChzKSB9IHJldHVybiBjICYmIChDID0gRSwgbCA9IHcpLCBiIH07IHJldHVybiBuID8gdWUobykgOiBvIH0gcmV0dXJuIHUgPSBvZS5jb21waWxlID0gZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4sIHIgPSBbXSwgaSA9IFtdLCBvID0ga1tlICsgIiAiXTsgaWYgKCFvKSB7IHQgfHwgKHQgPSBhKGUpKSwgbiA9IHQubGVuZ3RoOyB3aGlsZSAobi0tKSAobyA9IFRlKHRbbl0pKVt4XSA/IHIucHVzaChvKSA6IGkucHVzaChvKTsgKG8gPSBrKGUsIEVlKGksIHIpKSkuc2VsZWN0b3IgPSBlIH0gcmV0dXJuIG8gfSwgcyA9IG9lLnNlbGVjdCA9IGZ1bmN0aW9uIChlLCB0LCBuLCBpKSB7IHZhciBvLCBzLCBsLCBjLCBmLCBkID0gImZ1bmN0aW9uIiA9PSB0eXBlb2YgZSAmJiBlLCBwID0gIWkgJiYgYShlID0gZC5zZWxlY3RvciB8fCBlKTsgaWYgKG4gPSBuIHx8IFtdLCAxID09PSBwLmxlbmd0aCkgeyBpZiAoKHMgPSBwWzBdID0gcFswXS5zbGljZSgwKSkubGVuZ3RoID4gMiAmJiAiSUQiID09PSAobCA9IHNbMF0pLnR5cGUgJiYgOSA9PT0gdC5ub2RlVHlwZSAmJiBnICYmIHIucmVsYXRpdmVbc1sxXS50eXBlXSkgeyBpZiAoISh0ID0gKHIuZmluZC5JRChsLm1hdGNoZXNbMF0ucmVwbGFjZShaLCBlZSksIHQpIHx8IFtdKVswXSkpIHJldHVybiBuOyBkICYmICh0ID0gdC5wYXJlbnROb2RlKSwgZSA9IGUuc2xpY2Uocy5zaGlmdCgpLnZhbHVlLmxlbmd0aCkgfSBvID0gWC5uZWVkc0NvbnRleHQudGVzdChlKSA/IDAgOiBzLmxlbmd0aDsgd2hpbGUgKG8tLSkgeyBpZiAobCA9IHNbb10sIHIucmVsYXRpdmVbYyA9IGwudHlwZV0pIGJyZWFrOyBpZiAoKGYgPSByLmZpbmRbY10pICYmIChpID0gZihsLm1hdGNoZXNbMF0ucmVwbGFjZShaLCBlZSksIEoudGVzdChzWzBdLnR5cGUpICYmIGdlKHQucGFyZW50Tm9kZSkgfHwgdCkpKSB7IGlmIChzLnNwbGljZShvLCAxKSwgIShlID0gaS5sZW5ndGggJiYgeWUocykpKSByZXR1cm4gcS5hcHBseShuLCBpKSwgbjsgYnJlYWsgfSB9IH0gcmV0dXJuIChkIHx8IHUoZSwgcCkpKGksIHQsICFnLCBuLCAhdCB8fCBKLnRlc3QoZSkgJiYgZ2UodC5wYXJlbnROb2RlKSB8fCB0KSwgbiB9LCBuLnNvcnRTdGFibGUgPSB4LnNwbGl0KCIiKS5zb3J0KEEpLmpvaW4oIiIpID09PSB4LCBuLmRldGVjdER1cGxpY2F0ZXMgPSAhIWYsIGQoKSwgbi5zb3J0RGV0YWNoZWQgPSBzZShmdW5jdGlvbiAoZSkgeyByZXR1cm4gMSAmIGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocC5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpKSB9KSwgc2UoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUuaW5uZXJIVE1MID0gIjxhIGhyZWY9JyMnPjwvYT4iLCAiIyIgPT09IGUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSB9KSB8fCBsZSgidHlwZXxocmVmfGhlaWdodHx3aWR0aCIsIGZ1bmN0aW9uIChlLCB0LCBuKSB7IGlmICghbikgcmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQsICJ0eXBlIiA9PT0gdC50b0xvd2VyQ2FzZSgpID8gMSA6IDIpIH0pLCBuLmF0dHJpYnV0ZXMgJiYgc2UoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUuaW5uZXJIVE1MID0gIjxpbnB1dC8+IiwgZS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCAiIiksICIiID09PSBlLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpIH0pIHx8IGxlKCJ2YWx1ZSIsIGZ1bmN0aW9uIChlLCB0LCBuKSB7IGlmICghbiAmJiAiaW5wdXQiID09PSBlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpIHJldHVybiBlLmRlZmF1bHRWYWx1ZSB9KSwgc2UoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG51bGwgPT0gZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIikgfSkgfHwgbGUoSCwgZnVuY3Rpb24gKGUsIHQsIG4pIHsgdmFyIHI7IGlmICghbikgcmV0dXJuICEwID09PSBlW3RdID8gdC50b0xvd2VyQ2FzZSgpIDogKHIgPSBlLmdldEF0dHJpYnV0ZU5vZGUodCkpICYmIHIuc3BlY2lmaWVkID8gci52YWx1ZSA6IG51bGwgfSksIG9lIH0oZSk7IHcuZmluZCA9IEUsIHcuZXhwciA9IEUuc2VsZWN0b3JzLCB3LmV4cHJbIjoiXSA9IHcuZXhwci5wc2V1ZG9zLCB3LnVuaXF1ZVNvcnQgPSB3LnVuaXF1ZSA9IEUudW5pcXVlU29ydCwgdy50ZXh0ID0gRS5nZXRUZXh0LCB3LmlzWE1MRG9jID0gRS5pc1hNTCwgdy5jb250YWlucyA9IEUuY29udGFpbnMsIHcuZXNjYXBlU2VsZWN0b3IgPSBFLmVzY2FwZTsgdmFyIE4gPSBmdW5jdGlvbiAoZSwgdCwgbikgeyB2YXIgciA9IFtdLCBpID0gdm9pZCAwICE9PSBuOyB3aGlsZSAoKGUgPSBlW3RdKSAmJiA5ICE9PSBlLm5vZGVUeXBlKSBpZiAoMSA9PT0gZS5ub2RlVHlwZSkgeyBpZiAoaSAmJiB3KGUpLmlzKG4pKSBicmVhazsgci5wdXNoKGUpIH0gcmV0dXJuIHIgfSwgayA9IGZ1bmN0aW9uIChlLCB0KSB7IGZvciAodmFyIG4gPSBbXTsgZTsgZSA9IGUubmV4dFNpYmxpbmcpMSA9PT0gZS5ub2RlVHlwZSAmJiBlICE9PSB0ICYmIG4ucHVzaChlKTsgcmV0dXJuIG4gfSwgQSA9IHcuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7IGZ1bmN0aW9uIEQoZSwgdCkgeyByZXR1cm4gZS5ub2RlTmFtZSAmJiBlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHQudG9Mb3dlckNhc2UoKSB9IHZhciBTID0gL148KFthLXpdW15cL1wwPjpceDIwXHRcclxuXGZdKilbXHgyMFx0XHJcblxmXSpcLz8+KD86PFwvXDE+fCkkL2k7IGZ1bmN0aW9uIEwoZSwgdCwgbikgeyByZXR1cm4gZyh0KSA/IHcuZ3JlcChlLCBmdW5jdGlvbiAoZSwgcikgeyByZXR1cm4gISF0LmNhbGwoZSwgciwgZSkgIT09IG4gfSkgOiB0Lm5vZGVUeXBlID8gdy5ncmVwKGUsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID09PSB0ICE9PSBuIH0pIDogInN0cmluZyIgIT0gdHlwZW9mIHQgPyB3LmdyZXAoZSwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHMuY2FsbCh0LCBlKSA+IC0xICE9PSBuIH0pIDogdy5maWx0ZXIodCwgZSwgbikgfSB3LmZpbHRlciA9IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHZhciByID0gdFswXTsgcmV0dXJuIG4gJiYgKGUgPSAiOm5vdCgiICsgZSArICIpIiksIDEgPT09IHQubGVuZ3RoICYmIDEgPT09IHIubm9kZVR5cGUgPyB3LmZpbmQubWF0Y2hlc1NlbGVjdG9yKHIsIGUpID8gW3JdIDogW10gOiB3LmZpbmQubWF0Y2hlcyhlLCB3LmdyZXAodCwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIDEgPT09IGUubm9kZVR5cGUgfSkpIH0sIHcuZm4uZXh0ZW5kKHsgZmluZDogZnVuY3Rpb24gKGUpIHsgdmFyIHQsIG4sIHIgPSB0aGlzLmxlbmd0aCwgaSA9IHRoaXM7IGlmICgic3RyaW5nIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHRoaXMucHVzaFN0YWNrKHcoZSkuZmlsdGVyKGZ1bmN0aW9uICgpIHsgZm9yICh0ID0gMDsgdCA8IHI7IHQrKylpZiAody5jb250YWlucyhpW3RdLCB0aGlzKSkgcmV0dXJuICEwIH0pKTsgZm9yIChuID0gdGhpcy5wdXNoU3RhY2soW10pLCB0ID0gMDsgdCA8IHI7IHQrKyl3LmZpbmQoZSwgaVt0XSwgbik7IHJldHVybiByID4gMSA/IHcudW5pcXVlU29ydChuKSA6IG4gfSwgZmlsdGVyOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcy5wdXNoU3RhY2soTCh0aGlzLCBlIHx8IFtdLCAhMSkpIH0sIG5vdDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHRoaXMucHVzaFN0YWNrKEwodGhpcywgZSB8fCBbXSwgITApKSB9LCBpczogZnVuY3Rpb24gKGUpIHsgcmV0dXJuICEhTCh0aGlzLCAic3RyaW5nIiA9PSB0eXBlb2YgZSAmJiBBLnRlc3QoZSkgPyB3KGUpIDogZSB8fCBbXSwgITEpLmxlbmd0aCB9IH0pOyB2YXIgaiwgcSA9IC9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKykpJC87ICh3LmZuLmluaXQgPSBmdW5jdGlvbiAoZSwgdCwgbikgeyB2YXIgaSwgbzsgaWYgKCFlKSByZXR1cm4gdGhpczsgaWYgKG4gPSBuIHx8IGosICJzdHJpbmciID09IHR5cGVvZiBlKSB7IGlmICghKGkgPSAiPCIgPT09IGVbMF0gJiYgIj4iID09PSBlW2UubGVuZ3RoIC0gMV0gJiYgZS5sZW5ndGggPj0gMyA/IFtudWxsLCBlLCBudWxsXSA6IHEuZXhlYyhlKSkgfHwgIWlbMV0gJiYgdCkgcmV0dXJuICF0IHx8IHQuanF1ZXJ5ID8gKHQgfHwgbikuZmluZChlKSA6IHRoaXMuY29uc3RydWN0b3IodCkuZmluZChlKTsgaWYgKGlbMV0pIHsgaWYgKHQgPSB0IGluc3RhbmNlb2YgdyA/IHRbMF0gOiB0LCB3Lm1lcmdlKHRoaXMsIHcucGFyc2VIVE1MKGlbMV0sIHQgJiYgdC5ub2RlVHlwZSA/IHQub3duZXJEb2N1bWVudCB8fCB0IDogciwgITApKSwgUy50ZXN0KGlbMV0pICYmIHcuaXNQbGFpbk9iamVjdCh0KSkgZm9yIChpIGluIHQpIGcodGhpc1tpXSkgPyB0aGlzW2ldKHRbaV0pIDogdGhpcy5hdHRyKGksIHRbaV0pOyByZXR1cm4gdGhpcyB9IHJldHVybiAobyA9IHIuZ2V0RWxlbWVudEJ5SWQoaVsyXSkpICYmICh0aGlzWzBdID0gbywgdGhpcy5sZW5ndGggPSAxKSwgdGhpcyB9IHJldHVybiBlLm5vZGVUeXBlID8gKHRoaXNbMF0gPSBlLCB0aGlzLmxlbmd0aCA9IDEsIHRoaXMpIDogZyhlKSA/IHZvaWQgMCAhPT0gbi5yZWFkeSA/IG4ucmVhZHkoZSkgOiBlKHcpIDogdy5tYWtlQXJyYXkoZSwgdGhpcykgfSkucHJvdG90eXBlID0gdy5mbiwgaiA9IHcocik7IHZhciBPID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sIFAgPSB7IGNoaWxkcmVuOiAhMCwgY29udGVudHM6ICEwLCBuZXh0OiAhMCwgcHJldjogITAgfTsgdy5mbi5leHRlbmQoeyBoYXM6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gdyhlLCB0aGlzKSwgbiA9IHQubGVuZ3RoOyByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24gKCkgeyBmb3IgKHZhciBlID0gMDsgZSA8IG47IGUrKylpZiAody5jb250YWlucyh0aGlzLCB0W2VdKSkgcmV0dXJuICEwIH0pIH0sIGNsb3Nlc3Q6IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBuLCByID0gMCwgaSA9IHRoaXMubGVuZ3RoLCBvID0gW10sIGEgPSAic3RyaW5nIiAhPSB0eXBlb2YgZSAmJiB3KGUpOyBpZiAoIUEudGVzdChlKSkgZm9yICg7IHIgPCBpOyByKyspZm9yIChuID0gdGhpc1tyXTsgbiAmJiBuICE9PSB0OyBuID0gbi5wYXJlbnROb2RlKWlmIChuLm5vZGVUeXBlIDwgMTEgJiYgKGEgPyBhLmluZGV4KG4pID4gLTEgOiAxID09PSBuLm5vZGVUeXBlICYmIHcuZmluZC5tYXRjaGVzU2VsZWN0b3IobiwgZSkpKSB7IG8ucHVzaChuKTsgYnJlYWsgfSByZXR1cm4gdGhpcy5wdXNoU3RhY2soby5sZW5ndGggPiAxID8gdy51bmlxdWVTb3J0KG8pIDogbykgfSwgaW5kZXg6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gInN0cmluZyIgPT0gdHlwZW9mIGUgPyBzLmNhbGwodyhlKSwgdGhpc1swXSkgOiBzLmNhbGwodGhpcywgZS5qcXVlcnkgPyBlWzBdIDogZSkgOiB0aGlzWzBdICYmIHRoaXNbMF0ucGFyZW50Tm9kZSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTEgfSwgYWRkOiBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gdGhpcy5wdXNoU3RhY2sody51bmlxdWVTb3J0KHcubWVyZ2UodGhpcy5nZXQoKSwgdyhlLCB0KSkpKSB9LCBhZGRCYWNrOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcy5hZGQobnVsbCA9PSBlID8gdGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSkgfSB9KTsgZnVuY3Rpb24gSChlLCB0KSB7IHdoaWxlICgoZSA9IGVbdF0pICYmIDEgIT09IGUubm9kZVR5cGUpOyByZXR1cm4gZSB9IHcuZWFjaCh7IHBhcmVudDogZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSBlLnBhcmVudE5vZGU7IHJldHVybiB0ICYmIDExICE9PSB0Lm5vZGVUeXBlID8gdCA6IG51bGwgfSwgcGFyZW50czogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIE4oZSwgInBhcmVudE5vZGUiKSB9LCBwYXJlbnRzVW50aWw6IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiBOKGUsICJwYXJlbnROb2RlIiwgbikgfSwgbmV4dDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIEgoZSwgIm5leHRTaWJsaW5nIikgfSwgcHJldjogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIEgoZSwgInByZXZpb3VzU2libGluZyIpIH0sIG5leHRBbGw6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBOKGUsICJuZXh0U2libGluZyIpIH0sIHByZXZBbGw6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBOKGUsICJwcmV2aW91c1NpYmxpbmciKSB9LCBuZXh0VW50aWw6IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiBOKGUsICJuZXh0U2libGluZyIsIG4pIH0sIHByZXZVbnRpbDogZnVuY3Rpb24gKGUsIHQsIG4pIHsgcmV0dXJuIE4oZSwgInByZXZpb3VzU2libGluZyIsIG4pIH0sIHNpYmxpbmdzOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gaygoZS5wYXJlbnROb2RlIHx8IHt9KS5maXJzdENoaWxkLCBlKSB9LCBjaGlsZHJlbjogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGsoZS5maXJzdENoaWxkKSB9LCBjb250ZW50czogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIEQoZSwgImlmcmFtZSIpID8gZS5jb250ZW50RG9jdW1lbnQgOiAoRChlLCAidGVtcGxhdGUiKSAmJiAoZSA9IGUuY29udGVudCB8fCBlKSwgdy5tZXJnZShbXSwgZS5jaGlsZE5vZGVzKSkgfSB9LCBmdW5jdGlvbiAoZSwgdCkgeyB3LmZuW2VdID0gZnVuY3Rpb24gKG4sIHIpIHsgdmFyIGkgPSB3Lm1hcCh0aGlzLCB0LCBuKTsgcmV0dXJuICJVbnRpbCIgIT09IGUuc2xpY2UoLTUpICYmIChyID0gbiksIHIgJiYgInN0cmluZyIgPT0gdHlwZW9mIHIgJiYgKGkgPSB3LmZpbHRlcihyLCBpKSksIHRoaXMubGVuZ3RoID4gMSAmJiAoUFtlXSB8fCB3LnVuaXF1ZVNvcnQoaSksIE8udGVzdChlKSAmJiBpLnJldmVyc2UoKSksIHRoaXMucHVzaFN0YWNrKGkpIH0gfSk7IHZhciBJID0gL1teXHgyMFx0XHJcblxmXSsvZzsgZnVuY3Rpb24gUihlKSB7IHZhciB0ID0ge307IHJldHVybiB3LmVhY2goZS5tYXRjaChJKSB8fCBbXSwgZnVuY3Rpb24gKGUsIG4pIHsgdFtuXSA9ICEwIH0pLCB0IH0gdy5DYWxsYmFja3MgPSBmdW5jdGlvbiAoZSkgeyBlID0gInN0cmluZyIgPT0gdHlwZW9mIGUgPyBSKGUpIDogdy5leHRlbmQoe30sIGUpOyB2YXIgdCwgbiwgciwgaSwgbyA9IFtdLCBhID0gW10sIHUgPSAtMSwgcyA9IGZ1bmN0aW9uICgpIHsgZm9yIChpID0gaSB8fCBlLm9uY2UsIHIgPSB0ID0gITA7IGEubGVuZ3RoOyB1ID0gLTEpIHsgbiA9IGEuc2hpZnQoKTsgd2hpbGUgKCsrdSA8IG8ubGVuZ3RoKSAhMSA9PT0gb1t1XS5hcHBseShuWzBdLCBuWzFdKSAmJiBlLnN0b3BPbkZhbHNlICYmICh1ID0gby5sZW5ndGgsIG4gPSAhMSkgfSBlLm1lbW9yeSB8fCAobiA9ICExKSwgdCA9ICExLCBpICYmIChvID0gbiA/IFtdIDogIiIpIH0sIGwgPSB7IGFkZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbyAmJiAobiAmJiAhdCAmJiAodSA9IG8ubGVuZ3RoIC0gMSwgYS5wdXNoKG4pKSwgZnVuY3Rpb24gdChuKSB7IHcuZWFjaChuLCBmdW5jdGlvbiAobiwgcikgeyBnKHIpID8gZS51bmlxdWUgJiYgbC5oYXMocikgfHwgby5wdXNoKHIpIDogciAmJiByLmxlbmd0aCAmJiAic3RyaW5nIiAhPT0gYihyKSAmJiB0KHIpIH0pIH0oYXJndW1lbnRzKSwgbiAmJiAhdCAmJiBzKCkpLCB0aGlzIH0sIHJlbW92ZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gdy5lYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG47IHdoaWxlICgobiA9IHcuaW5BcnJheSh0LCBvLCBuKSkgPiAtMSkgby5zcGxpY2UobiwgMSksIG4gPD0gdSAmJiB1LS0gfSksIHRoaXMgfSwgaGFzOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHcuaW5BcnJheShlLCBvKSA+IC0xIDogby5sZW5ndGggPiAwIH0sIGVtcHR5OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvICYmIChvID0gW10pLCB0aGlzIH0sIGRpc2FibGU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGkgPSBhID0gW10sIG8gPSBuID0gIiIsIHRoaXMgfSwgZGlzYWJsZWQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICFvIH0sIGxvY2s6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGkgPSBhID0gW10sIG4gfHwgdCB8fCAobyA9IG4gPSAiIiksIHRoaXMgfSwgbG9ja2VkOiBmdW5jdGlvbiAoKSB7IHJldHVybiAhIWkgfSwgZmlyZVdpdGg6IGZ1bmN0aW9uIChlLCBuKSB7IHJldHVybiBpIHx8IChuID0gW2UsIChuID0gbiB8fCBbXSkuc2xpY2UgPyBuLnNsaWNlKCkgOiBuXSwgYS5wdXNoKG4pLCB0IHx8IHMoKSksIHRoaXMgfSwgZmlyZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gbC5maXJlV2l0aCh0aGlzLCBhcmd1bWVudHMpLCB0aGlzIH0sIGZpcmVkOiBmdW5jdGlvbiAoKSB7IHJldHVybiAhIXIgfSB9OyByZXR1cm4gbCB9OyBmdW5jdGlvbiBCKGUpIHsgcmV0dXJuIGUgfSBmdW5jdGlvbiBNKGUpIHsgdGhyb3cgZSB9IGZ1bmN0aW9uIFcoZSwgdCwgbiwgcikgeyB2YXIgaTsgdHJ5IHsgZSAmJiBnKGkgPSBlLnByb21pc2UpID8gaS5jYWxsKGUpLmRvbmUodCkuZmFpbChuKSA6IGUgJiYgZyhpID0gZS50aGVuKSA/IGkuY2FsbChlLCB0LCBuKSA6IHQuYXBwbHkodm9pZCAwLCBbZV0uc2xpY2UocikpIH0gY2F0Y2ggKGUpIHsgbi5hcHBseSh2b2lkIDAsIFtlXSkgfSB9IHcuZXh0ZW5kKHsgRGVmZXJyZWQ6IGZ1bmN0aW9uICh0KSB7IHZhciBuID0gW1sibm90aWZ5IiwgInByb2dyZXNzIiwgdy5DYWxsYmFja3MoIm1lbW9yeSIpLCB3LkNhbGxiYWNrcygibWVtb3J5IiksIDJdLCBbInJlc29sdmUiLCAiZG9uZSIsIHcuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCB3LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwgMCwgInJlc29sdmVkIl0sIFsicmVqZWN0IiwgImZhaWwiLCB3LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwgdy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksIDEsICJyZWplY3RlZCJdXSwgciA9ICJwZW5kaW5nIiwgaSA9IHsgc3RhdGU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHIgfSwgYWx3YXlzOiBmdW5jdGlvbiAoKSB7IHJldHVybiBvLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyksIHRoaXMgfSwgImNhdGNoIjogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGkudGhlbihudWxsLCBlKSB9LCBwaXBlOiBmdW5jdGlvbiAoKSB7IHZhciBlID0gYXJndW1lbnRzOyByZXR1cm4gdy5EZWZlcnJlZChmdW5jdGlvbiAodCkgeyB3LmVhY2gobiwgZnVuY3Rpb24gKG4sIHIpIHsgdmFyIGkgPSBnKGVbcls0XV0pICYmIGVbcls0XV07IG9bclsxXV0oZnVuY3Rpb24gKCkgeyB2YXIgZSA9IGkgJiYgaS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyBlICYmIGcoZS5wcm9taXNlKSA/IGUucHJvbWlzZSgpLnByb2dyZXNzKHQubm90aWZ5KS5kb25lKHQucmVzb2x2ZSkuZmFpbCh0LnJlamVjdCkgOiB0W3JbMF0gKyAiV2l0aCJdKHRoaXMsIGkgPyBbZV0gOiBhcmd1bWVudHMpIH0pIH0pLCBlID0gbnVsbCB9KS5wcm9taXNlKCkgfSwgdGhlbjogZnVuY3Rpb24gKHQsIHIsIGkpIHsgdmFyIG8gPSAwOyBmdW5jdGlvbiBhKHQsIG4sIHIsIGkpIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHUgPSB0aGlzLCBzID0gYXJndW1lbnRzLCBsID0gZnVuY3Rpb24gKCkgeyB2YXIgZSwgbDsgaWYgKCEodCA8IG8pKSB7IGlmICgoZSA9IHIuYXBwbHkodSwgcykpID09PSBuLnByb21pc2UoKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uIik7IGwgPSBlICYmICgib2JqZWN0IiA9PSB0eXBlb2YgZSB8fCAiZnVuY3Rpb24iID09IHR5cGVvZiBlKSAmJiBlLnRoZW4sIGcobCkgPyBpID8gbC5jYWxsKGUsIGEobywgbiwgQiwgaSksIGEobywgbiwgTSwgaSkpIDogKG8rKyAsIGwuY2FsbChlLCBhKG8sIG4sIEIsIGkpLCBhKG8sIG4sIE0sIGkpLCBhKG8sIG4sIEIsIG4ubm90aWZ5V2l0aCkpKSA6IChyICE9PSBCICYmICh1ID0gdm9pZCAwLCBzID0gW2VdKSwgKGkgfHwgbi5yZXNvbHZlV2l0aCkodSwgcykpIH0gfSwgYyA9IGkgPyBsIDogZnVuY3Rpb24gKCkgeyB0cnkgeyBsKCkgfSBjYXRjaCAoZSkgeyB3LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgJiYgdy5EZWZlcnJlZC5leGNlcHRpb25Ib29rKGUsIGMuc3RhY2tUcmFjZSksIHQgKyAxID49IG8gJiYgKHIgIT09IE0gJiYgKHUgPSB2b2lkIDAsIHMgPSBbZV0pLCBuLnJlamVjdFdpdGgodSwgcykpIH0gfTsgdCA/IGMoKSA6ICh3LkRlZmVycmVkLmdldFN0YWNrSG9vayAmJiAoYy5zdGFja1RyYWNlID0gdy5EZWZlcnJlZC5nZXRTdGFja0hvb2soKSksIGUuc2V0VGltZW91dChjKSkgfSB9IHJldHVybiB3LkRlZmVycmVkKGZ1bmN0aW9uIChlKSB7IG5bMF1bM10uYWRkKGEoMCwgZSwgZyhpKSA/IGkgOiBCLCBlLm5vdGlmeVdpdGgpKSwgblsxXVszXS5hZGQoYSgwLCBlLCBnKHQpID8gdCA6IEIpKSwgblsyXVszXS5hZGQoYSgwLCBlLCBnKHIpID8gciA6IE0pKSB9KS5wcm9taXNlKCkgfSwgcHJvbWlzZTogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG51bGwgIT0gZSA/IHcuZXh0ZW5kKGUsIGkpIDogaSB9IH0sIG8gPSB7fTsgcmV0dXJuIHcuZWFjaChuLCBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgYSA9IHRbMl0sIHUgPSB0WzVdOyBpW3RbMV1dID0gYS5hZGQsIHUgJiYgYS5hZGQoZnVuY3Rpb24gKCkgeyByID0gdSB9LCBuWzMgLSBlXVsyXS5kaXNhYmxlLCBuWzMgLSBlXVszXS5kaXNhYmxlLCBuWzBdWzJdLmxvY2ssIG5bMF1bM10ubG9jayksIGEuYWRkKHRbM10uZmlyZSksIG9bdFswXV0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvW3RbMF0gKyAiV2l0aCJdKHRoaXMgPT09IG8gPyB2b2lkIDAgOiB0aGlzLCBhcmd1bWVudHMpLCB0aGlzIH0sIG9bdFswXSArICJXaXRoIl0gPSBhLmZpcmVXaXRoIH0pLCBpLnByb21pc2UobyksIHQgJiYgdC5jYWxsKG8sIG8pLCBvIH0sIHdoZW46IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gYXJndW1lbnRzLmxlbmd0aCwgbiA9IHQsIHIgPSBBcnJheShuKSwgaSA9IG8uY2FsbChhcmd1bWVudHMpLCBhID0gdy5EZWZlcnJlZCgpLCB1ID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGZ1bmN0aW9uIChuKSB7IHJbZV0gPSB0aGlzLCBpW2VdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBvLmNhbGwoYXJndW1lbnRzKSA6IG4sIC0tdCB8fCBhLnJlc29sdmVXaXRoKHIsIGkpIH0gfTsgaWYgKHQgPD0gMSAmJiAoVyhlLCBhLmRvbmUodShuKSkucmVzb2x2ZSwgYS5yZWplY3QsICF0KSwgInBlbmRpbmciID09PSBhLnN0YXRlKCkgfHwgZyhpW25dICYmIGlbbl0udGhlbikpKSByZXR1cm4gYS50aGVuKCk7IHdoaWxlIChuLS0pIFcoaVtuXSwgdShuKSwgYS5yZWplY3QpOyByZXR1cm4gYS5wcm9taXNlKCkgfSB9KTsgdmFyICQgPSAvXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLzsgdy5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVuY3Rpb24gKHQsIG4pIHsgZS5jb25zb2xlICYmIGUuY29uc29sZS53YXJuICYmIHQgJiYgJC50ZXN0KHQubmFtZSkgJiYgZS5jb25zb2xlLndhcm4oImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246ICIgKyB0Lm1lc3NhZ2UsIHQuc3RhY2ssIG4pIH0sIHcucmVhZHlFeGNlcHRpb24gPSBmdW5jdGlvbiAodCkgeyBlLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0aHJvdyB0IH0pIH07IHZhciBGID0gdy5EZWZlcnJlZCgpOyB3LmZuLnJlYWR5ID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIEYudGhlbihlKVsiY2F0Y2giXShmdW5jdGlvbiAoZSkgeyB3LnJlYWR5RXhjZXB0aW9uKGUpIH0pLCB0aGlzIH0sIHcuZXh0ZW5kKHsgaXNSZWFkeTogITEsIHJlYWR5V2FpdDogMSwgcmVhZHk6IGZ1bmN0aW9uIChlKSB7ICghMCA9PT0gZSA/IC0tdy5yZWFkeVdhaXQgOiB3LmlzUmVhZHkpIHx8ICh3LmlzUmVhZHkgPSAhMCwgITAgIT09IGUgJiYgLS13LnJlYWR5V2FpdCA+IDAgfHwgRi5yZXNvbHZlV2l0aChyLCBbd10pKSB9IH0pLCB3LnJlYWR5LnRoZW4gPSBGLnRoZW47IGZ1bmN0aW9uIHooKSB7IHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIHopLCBlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLCB6KSwgdy5yZWFkeSgpIH0gImNvbXBsZXRlIiA9PT0gci5yZWFkeVN0YXRlIHx8ICJsb2FkaW5nIiAhPT0gci5yZWFkeVN0YXRlICYmICFyLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCA/IGUuc2V0VGltZW91dCh3LnJlYWR5KSA6IChyLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCB6KSwgZS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgeikpOyB2YXIgXyA9IGZ1bmN0aW9uIChlLCB0LCBuLCByLCBpLCBvLCBhKSB7IHZhciB1ID0gMCwgcyA9IGUubGVuZ3RoLCBsID0gbnVsbCA9PSBuOyBpZiAoIm9iamVjdCIgPT09IGIobikpIHsgaSA9ICEwOyBmb3IgKHUgaW4gbikgXyhlLCB0LCB1LCBuW3VdLCAhMCwgbywgYSkgfSBlbHNlIGlmICh2b2lkIDAgIT09IHIgJiYgKGkgPSAhMCwgZyhyKSB8fCAoYSA9ICEwKSwgbCAmJiAoYSA/ICh0LmNhbGwoZSwgciksIHQgPSBudWxsKSA6IChsID0gdCwgdCA9IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiBsLmNhbGwodyhlKSwgbikgfSkpLCB0KSkgZm9yICg7IHUgPCBzOyB1KyspdChlW3VdLCBuLCBhID8gciA6IHIuY2FsbChlW3VdLCB1LCB0KGVbdV0sIG4pKSk7IHJldHVybiBpID8gZSA6IGwgPyB0LmNhbGwoZSkgOiBzID8gdChlWzBdLCBuKSA6IG8gfSwgVSA9IC9eLW1zLS8sIFYgPSAvLShbYS16XSkvZzsgZnVuY3Rpb24gWChlLCB0KSB7IHJldHVybiB0LnRvVXBwZXJDYXNlKCkgfSBmdW5jdGlvbiBRKGUpIHsgcmV0dXJuIGUucmVwbGFjZShVLCAibXMtIikucmVwbGFjZShWLCBYKSB9IHZhciBZID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIDEgPT09IGUubm9kZVR5cGUgfHwgOSA9PT0gZS5ub2RlVHlwZSB8fCAhK2Uubm9kZVR5cGUgfTsgZnVuY3Rpb24gRygpIHsgdGhpcy5leHBhbmRvID0gdy5leHBhbmRvICsgRy51aWQrKyB9IEcudWlkID0gMSwgRy5wcm90b3R5cGUgPSB7IGNhY2hlOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IGVbdGhpcy5leHBhbmRvXTsgcmV0dXJuIHQgfHwgKHQgPSB7fSwgWShlKSAmJiAoZS5ub2RlVHlwZSA/IGVbdGhpcy5leHBhbmRvXSA9IHQgOiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgdGhpcy5leHBhbmRvLCB7IHZhbHVlOiB0LCBjb25maWd1cmFibGU6ICEwIH0pKSksIHQgfSwgc2V0OiBmdW5jdGlvbiAoZSwgdCwgbikgeyB2YXIgciwgaSA9IHRoaXMuY2FjaGUoZSk7IGlmICgic3RyaW5nIiA9PSB0eXBlb2YgdCkgaVtRKHQpXSA9IG47IGVsc2UgZm9yIChyIGluIHQpIGlbUShyKV0gPSB0W3JdOyByZXR1cm4gaSB9LCBnZXQ6IGZ1bmN0aW9uIChlLCB0KSB7IHJldHVybiB2b2lkIDAgPT09IHQgPyB0aGlzLmNhY2hlKGUpIDogZVt0aGlzLmV4cGFuZG9dICYmIGVbdGhpcy5leHBhbmRvXVtRKHQpXSB9LCBhY2Nlc3M6IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiB2b2lkIDAgPT09IHQgfHwgdCAmJiAic3RyaW5nIiA9PSB0eXBlb2YgdCAmJiB2b2lkIDAgPT09IG4gPyB0aGlzLmdldChlLCB0KSA6ICh0aGlzLnNldChlLCB0LCBuKSwgdm9pZCAwICE9PSBuID8gbiA6IHQpIH0sIHJlbW92ZTogZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4sIHIgPSBlW3RoaXMuZXhwYW5kb107IGlmICh2b2lkIDAgIT09IHIpIHsgaWYgKHZvaWQgMCAhPT0gdCkgeyBuID0gKHQgPSBBcnJheS5pc0FycmF5KHQpID8gdC5tYXAoUSkgOiAodCA9IFEodCkpIGluIHIgPyBbdF0gOiB0Lm1hdGNoKEkpIHx8IFtdKS5sZW5ndGg7IHdoaWxlIChuLS0pIGRlbGV0ZSByW3Rbbl1dIH0gKHZvaWQgMCA9PT0gdCB8fCB3LmlzRW1wdHlPYmplY3QocikpICYmIChlLm5vZGVUeXBlID8gZVt0aGlzLmV4cGFuZG9dID0gdm9pZCAwIDogZGVsZXRlIGVbdGhpcy5leHBhbmRvXSkgfSB9LCBoYXNEYXRhOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IGVbdGhpcy5leHBhbmRvXTsgcmV0dXJuIHZvaWQgMCAhPT0gdCAmJiAhdy5pc0VtcHR5T2JqZWN0KHQpIH0gfTsgdmFyIEsgPSBuZXcgRywgSiA9IG5ldyBHLCBaID0gL14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLywgZWUgPSAvW0EtWl0vZzsgZnVuY3Rpb24gdGUoZSkgeyByZXR1cm4gInRydWUiID09PSBlIHx8ICJmYWxzZSIgIT09IGUgJiYgKCJudWxsIiA9PT0gZSA/IG51bGwgOiBlID09PSArZSArICIiID8gK2UgOiBaLnRlc3QoZSkgPyBKU09OLnBhcnNlKGUpIDogZSkgfSBmdW5jdGlvbiBuZShlLCB0LCBuKSB7IHZhciByOyBpZiAodm9pZCAwID09PSBuICYmIDEgPT09IGUubm9kZVR5cGUpIGlmIChyID0gImRhdGEtIiArIHQucmVwbGFjZShlZSwgIi0kJiIpLnRvTG93ZXJDYXNlKCksICJzdHJpbmciID09IHR5cGVvZiAobiA9IGUuZ2V0QXR0cmlidXRlKHIpKSkgeyB0cnkgeyBuID0gdGUobikgfSBjYXRjaCAoZSkgeyB9IEouc2V0KGUsIHQsIG4pIH0gZWxzZSBuID0gdm9pZCAwOyByZXR1cm4gbiB9IHcuZXh0ZW5kKHsgaGFzRGF0YTogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIEouaGFzRGF0YShlKSB8fCBLLmhhc0RhdGEoZSkgfSwgZGF0YTogZnVuY3Rpb24gKGUsIHQsIG4pIHsgcmV0dXJuIEouYWNjZXNzKGUsIHQsIG4pIH0sIHJlbW92ZURhdGE6IGZ1bmN0aW9uIChlLCB0KSB7IEoucmVtb3ZlKGUsIHQpIH0sIF9kYXRhOiBmdW5jdGlvbiAoZSwgdCwgbikgeyByZXR1cm4gSy5hY2Nlc3MoZSwgdCwgbikgfSwgX3JlbW92ZURhdGE6IGZ1bmN0aW9uIChlLCB0KSB7IEsucmVtb3ZlKGUsIHQpIH0gfSksIHcuZm4uZXh0ZW5kKHsgZGF0YTogZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4sIHIsIGksIG8gPSB0aGlzWzBdLCBhID0gbyAmJiBvLmF0dHJpYnV0ZXM7IGlmICh2b2lkIDAgPT09IGUpIHsgaWYgKHRoaXMubGVuZ3RoICYmIChpID0gSi5nZXQobyksIDEgPT09IG8ubm9kZVR5cGUgJiYgIUsuZ2V0KG8sICJoYXNEYXRhQXR0cnMiKSkpIHsgbiA9IGEubGVuZ3RoOyB3aGlsZSAobi0tKSBhW25dICYmIDAgPT09IChyID0gYVtuXS5uYW1lKS5pbmRleE9mKCJkYXRhLSIpICYmIChyID0gUShyLnNsaWNlKDUpKSwgbmUobywgciwgaVtyXSkpOyBLLnNldChvLCAiaGFzRGF0YUF0dHJzIiwgITApIH0gcmV0dXJuIGkgfSByZXR1cm4gIm9iamVjdCIgPT0gdHlwZW9mIGUgPyB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyBKLnNldCh0aGlzLCBlKSB9KSA6IF8odGhpcywgZnVuY3Rpb24gKHQpIHsgdmFyIG47IGlmIChvICYmIHZvaWQgMCA9PT0gdCkgeyBpZiAodm9pZCAwICE9PSAobiA9IEouZ2V0KG8sIGUpKSkgcmV0dXJuIG47IGlmICh2b2lkIDAgIT09IChuID0gbmUobywgZSkpKSByZXR1cm4gbiB9IGVsc2UgdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgSi5zZXQodGhpcywgZSwgdCkgfSkgfSwgbnVsbCwgdCwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsICEwKSB9LCByZW1vdmVEYXRhOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgSi5yZW1vdmUodGhpcywgZSkgfSkgfSB9KSwgdy5leHRlbmQoeyBxdWV1ZTogZnVuY3Rpb24gKGUsIHQsIG4pIHsgdmFyIHI7IGlmIChlKSByZXR1cm4gdCA9ICh0IHx8ICJmeCIpICsgInF1ZXVlIiwgciA9IEsuZ2V0KGUsIHQpLCBuICYmICghciB8fCBBcnJheS5pc0FycmF5KG4pID8gciA9IEsuYWNjZXNzKGUsIHQsIHcubWFrZUFycmF5KG4pKSA6IHIucHVzaChuKSksIHIgfHwgW10gfSwgZGVxdWV1ZTogZnVuY3Rpb24gKGUsIHQpIHsgdCA9IHQgfHwgImZ4IjsgdmFyIG4gPSB3LnF1ZXVlKGUsIHQpLCByID0gbi5sZW5ndGgsIGkgPSBuLnNoaWZ0KCksIG8gPSB3Ll9xdWV1ZUhvb2tzKGUsIHQpLCBhID0gZnVuY3Rpb24gKCkgeyB3LmRlcXVldWUoZSwgdCkgfTsgImlucHJvZ3Jlc3MiID09PSBpICYmIChpID0gbi5zaGlmdCgpLCByLS0pLCBpICYmICgiZngiID09PSB0ICYmIG4udW5zaGlmdCgiaW5wcm9ncmVzcyIpLCBkZWxldGUgby5zdG9wLCBpLmNhbGwoZSwgYSwgbykpLCAhciAmJiBvICYmIG8uZW1wdHkuZmlyZSgpIH0sIF9xdWV1ZUhvb2tzOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiA9IHQgKyAicXVldWVIb29rcyI7IHJldHVybiBLLmdldChlLCBuKSB8fCBLLmFjY2VzcyhlLCBuLCB7IGVtcHR5OiB3LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24gKCkgeyBLLnJlbW92ZShlLCBbdCArICJxdWV1ZSIsIG5dKSB9KSB9KSB9IH0pLCB3LmZuLmV4dGVuZCh7IHF1ZXVlOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiA9IDI7IHJldHVybiAic3RyaW5nIiAhPSB0eXBlb2YgZSAmJiAodCA9IGUsIGUgPSAiZngiLCBuLS0pLCBhcmd1bWVudHMubGVuZ3RoIDwgbiA/IHcucXVldWUodGhpc1swXSwgZSkgOiB2b2lkIDAgPT09IHQgPyB0aGlzIDogdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIG4gPSB3LnF1ZXVlKHRoaXMsIGUsIHQpOyB3Ll9xdWV1ZUhvb2tzKHRoaXMsIGUpLCAiZngiID09PSBlICYmICJpbnByb2dyZXNzIiAhPT0gblswXSAmJiB3LmRlcXVldWUodGhpcywgZSkgfSkgfSwgZGVxdWV1ZTogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IHcuZGVxdWV1ZSh0aGlzLCBlKSB9KSB9LCBjbGVhclF1ZXVlOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcy5xdWV1ZShlIHx8ICJmeCIsIFtdKSB9LCBwcm9taXNlOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiwgciA9IDEsIGkgPSB3LkRlZmVycmVkKCksIG8gPSB0aGlzLCBhID0gdGhpcy5sZW5ndGgsIHUgPSBmdW5jdGlvbiAoKSB7IC0tciB8fCBpLnJlc29sdmVXaXRoKG8sIFtvXSkgfTsgInN0cmluZyIgIT0gdHlwZW9mIGUgJiYgKHQgPSBlLCBlID0gdm9pZCAwKSwgZSA9IGUgfHwgImZ4Ijsgd2hpbGUgKGEtLSkgKG4gPSBLLmdldChvW2FdLCBlICsgInF1ZXVlSG9va3MiKSkgJiYgbi5lbXB0eSAmJiAocisrICwgbi5lbXB0eS5hZGQodSkpOyByZXR1cm4gdSgpLCBpLnByb21pc2UodCkgfSB9KTsgdmFyIHJlID0gL1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsIGllID0gbmV3IFJlZ0V4cCgiXig/OihbKy1dKT18KSgiICsgcmUgKyAiKShbYS16JV0qKSQiLCAiaSIpLCBvZSA9IFsiVG9wIiwgIlJpZ2h0IiwgIkJvdHRvbSIsICJMZWZ0Il0sIGFlID0gZnVuY3Rpb24gKGUsIHQpIHsgcmV0dXJuICJub25lIiA9PT0gKGUgPSB0IHx8IGUpLnN0eWxlLmRpc3BsYXkgfHwgIiIgPT09IGUuc3R5bGUuZGlzcGxheSAmJiB3LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCwgZSkgJiYgIm5vbmUiID09PSB3LmNzcyhlLCAiZGlzcGxheSIpIH0sIHVlID0gZnVuY3Rpb24gKGUsIHQsIG4sIHIpIHsgdmFyIGksIG8sIGEgPSB7fTsgZm9yIChvIGluIHQpIGFbb10gPSBlLnN0eWxlW29dLCBlLnN0eWxlW29dID0gdFtvXTsgaSA9IG4uYXBwbHkoZSwgciB8fCBbXSk7IGZvciAobyBpbiB0KSBlLnN0eWxlW29dID0gYVtvXTsgcmV0dXJuIGkgfTsgZnVuY3Rpb24gc2UoZSwgdCwgbiwgcikgeyB2YXIgaSwgbywgYSA9IDIwLCB1ID0gciA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHIuY3VyKCkgfSA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHcuY3NzKGUsIHQsICIiKSB9LCBzID0gdSgpLCBsID0gbiAmJiBuWzNdIHx8ICh3LmNzc051bWJlclt0XSA/ICIiIDogInB4IiksIGMgPSAody5jc3NOdW1iZXJbdF0gfHwgInB4IiAhPT0gbCAmJiArcykgJiYgaWUuZXhlYyh3LmNzcyhlLCB0KSk7IGlmIChjICYmIGNbM10gIT09IGwpIHsgcyAvPSAyLCBsID0gbCB8fCBjWzNdLCBjID0gK3MgfHwgMTsgd2hpbGUgKGEtLSkgdy5zdHlsZShlLCB0LCBjICsgbCksICgxIC0gbykgKiAoMSAtIChvID0gdSgpIC8gcyB8fCAuNSkpIDw9IDAgJiYgKGEgPSAwKSwgYyAvPSBvOyBjICo9IDIsIHcuc3R5bGUoZSwgdCwgYyArIGwpLCBuID0gbiB8fCBbXSB9IHJldHVybiBuICYmIChjID0gK2MgfHwgK3MgfHwgMCwgaSA9IG5bMV0gPyBjICsgKG5bMV0gKyAxKSAqIG5bMl0gOiArblsyXSwgciAmJiAoci51bml0ID0gbCwgci5zdGFydCA9IGMsIHIuZW5kID0gaSkpLCBpIH0gdmFyIGxlID0ge307IGZ1bmN0aW9uIGNlKGUpIHsgdmFyIHQsIG4gPSBlLm93bmVyRG9jdW1lbnQsIHIgPSBlLm5vZGVOYW1lLCBpID0gbGVbcl07IHJldHVybiBpIHx8ICh0ID0gbi5ib2R5LmFwcGVuZENoaWxkKG4uY3JlYXRlRWxlbWVudChyKSksIGkgPSB3LmNzcyh0LCAiZGlzcGxheSIpLCB0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksICJub25lIiA9PT0gaSAmJiAoaSA9ICJibG9jayIpLCBsZVtyXSA9IGksIGkpIH0gZnVuY3Rpb24gZmUoZSwgdCkgeyBmb3IgKHZhciBuLCByLCBpID0gW10sIG8gPSAwLCBhID0gZS5sZW5ndGg7IG8gPCBhOyBvKyspKHIgPSBlW29dKS5zdHlsZSAmJiAobiA9IHIuc3R5bGUuZGlzcGxheSwgdCA/ICgibm9uZSIgPT09IG4gJiYgKGlbb10gPSBLLmdldChyLCAiZGlzcGxheSIpIHx8IG51bGwsIGlbb10gfHwgKHIuc3R5bGUuZGlzcGxheSA9ICIiKSksICIiID09PSByLnN0eWxlLmRpc3BsYXkgJiYgYWUocikgJiYgKGlbb10gPSBjZShyKSkpIDogIm5vbmUiICE9PSBuICYmIChpW29dID0gIm5vbmUiLCBLLnNldChyLCAiZGlzcGxheSIsIG4pKSk7IGZvciAobyA9IDA7IG8gPCBhOyBvKyspbnVsbCAhPSBpW29dICYmIChlW29dLnN0eWxlLmRpc3BsYXkgPSBpW29dKTsgcmV0dXJuIGUgfSB3LmZuLmV4dGVuZCh7IHNob3c6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZlKHRoaXMsICEwKSB9LCBoaWRlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBmZSh0aGlzKSB9LCB0b2dnbGU6IGZ1bmN0aW9uIChlKSB7IHJldHVybiAiYm9vbGVhbiIgPT0gdHlwZW9mIGUgPyBlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKSA6IHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IGFlKHRoaXMpID8gdyh0aGlzKS5zaG93KCkgOiB3KHRoaXMpLmhpZGUoKSB9KSB9IH0pOyB2YXIgZGUgPSAvXig/OmNoZWNrYm94fHJhZGlvKSQvaSwgcGUgPSAvPChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKykvaSwgaGUgPSAvXiR8Xm1vZHVsZSR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksIGdlID0geyBvcHRpb246IFsxLCAiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsICI8L3NlbGVjdD4iXSwgdGhlYWQ6IFsxLCAiPHRhYmxlPiIsICI8L3RhYmxlPiJdLCBjb2w6IFsyLCAiPHRhYmxlPjxjb2xncm91cD4iLCAiPC9jb2xncm91cD48L3RhYmxlPiJdLCB0cjogWzIsICI8dGFibGU+PHRib2R5PiIsICI8L3Rib2R5PjwvdGFibGU+Il0sIHRkOiBbMywgIjx0YWJsZT48dGJvZHk+PHRyPiIsICI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSwgX2RlZmF1bHQ6IFswLCAiIiwgIiJdIH07IGdlLm9wdGdyb3VwID0gZ2Uub3B0aW9uLCBnZS50Ym9keSA9IGdlLnRmb290ID0gZ2UuY29sZ3JvdXAgPSBnZS5jYXB0aW9uID0gZ2UudGhlYWQsIGdlLnRoID0gZ2UudGQ7IGZ1bmN0aW9uIHZlKGUsIHQpIHsgdmFyIG47IHJldHVybiBuID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPyBlLmdldEVsZW1lbnRzQnlUYWdOYW1lKHQgfHwgIioiKSA6ICJ1bmRlZmluZWQiICE9IHR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGwgPyBlLnF1ZXJ5U2VsZWN0b3JBbGwodCB8fCAiKiIpIDogW10sIHZvaWQgMCA9PT0gdCB8fCB0ICYmIEQoZSwgdCkgPyB3Lm1lcmdlKFtlXSwgbikgOiBuIH0gZnVuY3Rpb24geWUoZSwgdCkgeyBmb3IgKHZhciBuID0gMCwgciA9IGUubGVuZ3RoOyBuIDwgcjsgbisrKUsuc2V0KGVbbl0sICJnbG9iYWxFdmFsIiwgIXQgfHwgSy5nZXQodFtuXSwgImdsb2JhbEV2YWwiKSkgfSB2YXIgbWUgPSAvPHwmIz9cdys7LzsgZnVuY3Rpb24gYmUoZSwgdCwgbiwgciwgaSkgeyBmb3IgKHZhciBvLCBhLCB1LCBzLCBsLCBjLCBmID0gdC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGQgPSBbXSwgcCA9IDAsIGggPSBlLmxlbmd0aDsgcCA8IGg7IHArKylpZiAoKG8gPSBlW3BdKSB8fCAwID09PSBvKSBpZiAoIm9iamVjdCIgPT09IGIobykpIHcubWVyZ2UoZCwgby5ub2RlVHlwZSA/IFtvXSA6IG8pOyBlbHNlIGlmIChtZS50ZXN0KG8pKSB7IGEgPSBhIHx8IGYuYXBwZW5kQ2hpbGQodC5jcmVhdGVFbGVtZW50KCJkaXYiKSksIHUgPSAocGUuZXhlYyhvKSB8fCBbIiIsICIiXSlbMV0udG9Mb3dlckNhc2UoKSwgcyA9IGdlW3VdIHx8IGdlLl9kZWZhdWx0LCBhLmlubmVySFRNTCA9IHNbMV0gKyB3Lmh0bWxQcmVmaWx0ZXIobykgKyBzWzJdLCBjID0gc1swXTsgd2hpbGUgKGMtLSkgYSA9IGEubGFzdENoaWxkOyB3Lm1lcmdlKGQsIGEuY2hpbGROb2RlcyksIChhID0gZi5maXJzdENoaWxkKS50ZXh0Q29udGVudCA9ICIiIH0gZWxzZSBkLnB1c2godC5jcmVhdGVUZXh0Tm9kZShvKSk7IGYudGV4dENvbnRlbnQgPSAiIiwgcCA9IDA7IHdoaWxlIChvID0gZFtwKytdKSBpZiAociAmJiB3LmluQXJyYXkobywgcikgPiAtMSkgaSAmJiBpLnB1c2gobyk7IGVsc2UgaWYgKGwgPSB3LmNvbnRhaW5zKG8ub3duZXJEb2N1bWVudCwgbyksIGEgPSB2ZShmLmFwcGVuZENoaWxkKG8pLCAic2NyaXB0IiksIGwgJiYgeWUoYSksIG4pIHsgYyA9IDA7IHdoaWxlIChvID0gYVtjKytdKSBoZS50ZXN0KG8udHlwZSB8fCAiIikgJiYgbi5wdXNoKG8pIH0gcmV0dXJuIGYgfSAhZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLmFwcGVuZENoaWxkKHIuY3JlYXRlRWxlbWVudCgiZGl2IikpLCB0ID0gci5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOyB0LnNldEF0dHJpYnV0ZSgidHlwZSIsICJyYWRpbyIpLCB0LnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsICJjaGVja2VkIiksIHQuc2V0QXR0cmlidXRlKCJuYW1lIiwgInQiKSwgZS5hcHBlbmRDaGlsZCh0KSwgaC5jaGVja0Nsb25lID0gZS5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsIGUuaW5uZXJIVE1MID0gIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT4iLCBoLm5vQ2xvbmVDaGVja2VkID0gISFlLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZSB9KCk7IHZhciB4ZSA9IHIuZG9jdW1lbnRFbGVtZW50LCB3ZSA9IC9ea2V5LywgQ2UgPSAvXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sIFRlID0gL14oW14uXSopKD86XC4oLispfCkvOyBmdW5jdGlvbiBFZSgpIHsgcmV0dXJuICEwIH0gZnVuY3Rpb24gTmUoKSB7IHJldHVybiAhMSB9IGZ1bmN0aW9uIGtlKCkgeyB0cnkgeyByZXR1cm4gci5hY3RpdmVFbGVtZW50IH0gY2F0Y2ggKGUpIHsgfSB9IGZ1bmN0aW9uIEFlKGUsIHQsIG4sIHIsIGksIG8pIHsgdmFyIGEsIHU7IGlmICgib2JqZWN0IiA9PSB0eXBlb2YgdCkgeyAic3RyaW5nIiAhPSB0eXBlb2YgbiAmJiAociA9IHIgfHwgbiwgbiA9IHZvaWQgMCk7IGZvciAodSBpbiB0KSBBZShlLCB1LCBuLCByLCB0W3VdLCBvKTsgcmV0dXJuIGUgfSBpZiAobnVsbCA9PSByICYmIG51bGwgPT0gaSA/IChpID0gbiwgciA9IG4gPSB2b2lkIDApIDogbnVsbCA9PSBpICYmICgic3RyaW5nIiA9PSB0eXBlb2YgbiA/IChpID0gciwgciA9IHZvaWQgMCkgOiAoaSA9IHIsIHIgPSBuLCBuID0gdm9pZCAwKSksICExID09PSBpKSBpID0gTmU7IGVsc2UgaWYgKCFpKSByZXR1cm4gZTsgcmV0dXJuIDEgPT09IG8gJiYgKGEgPSBpLCAoaSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiB3KCkub2ZmKGUpLCBhLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfSkuZ3VpZCA9IGEuZ3VpZCB8fCAoYS5ndWlkID0gdy5ndWlkKyspKSwgZS5lYWNoKGZ1bmN0aW9uICgpIHsgdy5ldmVudC5hZGQodGhpcywgdCwgaSwgciwgbikgfSkgfSB3LmV2ZW50ID0geyBnbG9iYWw6IHt9LCBhZGQ6IGZ1bmN0aW9uIChlLCB0LCBuLCByLCBpKSB7IHZhciBvLCBhLCB1LCBzLCBsLCBjLCBmLCBkLCBwLCBoLCBnLCB2ID0gSy5nZXQoZSk7IGlmICh2KSB7IG4uaGFuZGxlciAmJiAobiA9IChvID0gbikuaGFuZGxlciwgaSA9IG8uc2VsZWN0b3IpLCBpICYmIHcuZmluZC5tYXRjaGVzU2VsZWN0b3IoeGUsIGkpLCBuLmd1aWQgfHwgKG4uZ3VpZCA9IHcuZ3VpZCsrKSwgKHMgPSB2LmV2ZW50cykgfHwgKHMgPSB2LmV2ZW50cyA9IHt9KSwgKGEgPSB2LmhhbmRsZSkgfHwgKGEgPSB2LmhhbmRsZSA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiAidW5kZWZpbmVkIiAhPSB0eXBlb2YgdyAmJiB3LmV2ZW50LnRyaWdnZXJlZCAhPT0gdC50eXBlID8gdy5ldmVudC5kaXNwYXRjaC5hcHBseShlLCBhcmd1bWVudHMpIDogdm9pZCAwIH0pLCBsID0gKHQgPSAodCB8fCAiIikubWF0Y2goSSkgfHwgWyIiXSkubGVuZ3RoOyB3aGlsZSAobC0tKSBwID0gZyA9ICh1ID0gVGUuZXhlYyh0W2xdKSB8fCBbXSlbMV0sIGggPSAodVsyXSB8fCAiIikuc3BsaXQoIi4iKS5zb3J0KCksIHAgJiYgKGYgPSB3LmV2ZW50LnNwZWNpYWxbcF0gfHwge30sIHAgPSAoaSA/IGYuZGVsZWdhdGVUeXBlIDogZi5iaW5kVHlwZSkgfHwgcCwgZiA9IHcuZXZlbnQuc3BlY2lhbFtwXSB8fCB7fSwgYyA9IHcuZXh0ZW5kKHsgdHlwZTogcCwgb3JpZ1R5cGU6IGcsIGRhdGE6IHIsIGhhbmRsZXI6IG4sIGd1aWQ6IG4uZ3VpZCwgc2VsZWN0b3I6IGksIG5lZWRzQ29udGV4dDogaSAmJiB3LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoaSksIG5hbWVzcGFjZTogaC5qb2luKCIuIikgfSwgbyksIChkID0gc1twXSkgfHwgKChkID0gc1twXSA9IFtdKS5kZWxlZ2F0ZUNvdW50ID0gMCwgZi5zZXR1cCAmJiAhMSAhPT0gZi5zZXR1cC5jYWxsKGUsIHIsIGgsIGEpIHx8IGUuYWRkRXZlbnRMaXN0ZW5lciAmJiBlLmFkZEV2ZW50TGlzdGVuZXIocCwgYSkpLCBmLmFkZCAmJiAoZi5hZGQuY2FsbChlLCBjKSwgYy5oYW5kbGVyLmd1aWQgfHwgKGMuaGFuZGxlci5ndWlkID0gbi5ndWlkKSksIGkgPyBkLnNwbGljZShkLmRlbGVnYXRlQ291bnQrKywgMCwgYykgOiBkLnB1c2goYyksIHcuZXZlbnQuZ2xvYmFsW3BdID0gITApIH0gfSwgcmVtb3ZlOiBmdW5jdGlvbiAoZSwgdCwgbiwgciwgaSkgeyB2YXIgbywgYSwgdSwgcywgbCwgYywgZiwgZCwgcCwgaCwgZywgdiA9IEsuaGFzRGF0YShlKSAmJiBLLmdldChlKTsgaWYgKHYgJiYgKHMgPSB2LmV2ZW50cykpIHsgbCA9ICh0ID0gKHQgfHwgIiIpLm1hdGNoKEkpIHx8IFsiIl0pLmxlbmd0aDsgd2hpbGUgKGwtLSkgaWYgKHUgPSBUZS5leGVjKHRbbF0pIHx8IFtdLCBwID0gZyA9IHVbMV0sIGggPSAodVsyXSB8fCAiIikuc3BsaXQoIi4iKS5zb3J0KCksIHApIHsgZiA9IHcuZXZlbnQuc3BlY2lhbFtwXSB8fCB7fSwgZCA9IHNbcCA9IChyID8gZi5kZWxlZ2F0ZVR5cGUgOiBmLmJpbmRUeXBlKSB8fCBwXSB8fCBbXSwgdSA9IHVbMl0gJiYgbmV3IFJlZ0V4cCgiKF58XFwuKSIgKyBoLmpvaW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwufCQpIiksIGEgPSBvID0gZC5sZW5ndGg7IHdoaWxlIChvLS0pIGMgPSBkW29dLCAhaSAmJiBnICE9PSBjLm9yaWdUeXBlIHx8IG4gJiYgbi5ndWlkICE9PSBjLmd1aWQgfHwgdSAmJiAhdS50ZXN0KGMubmFtZXNwYWNlKSB8fCByICYmIHIgIT09IGMuc2VsZWN0b3IgJiYgKCIqKiIgIT09IHIgfHwgIWMuc2VsZWN0b3IpIHx8IChkLnNwbGljZShvLCAxKSwgYy5zZWxlY3RvciAmJiBkLmRlbGVnYXRlQ291bnQtLSAsIGYucmVtb3ZlICYmIGYucmVtb3ZlLmNhbGwoZSwgYykpOyBhICYmICFkLmxlbmd0aCAmJiAoZi50ZWFyZG93biAmJiAhMSAhPT0gZi50ZWFyZG93bi5jYWxsKGUsIGgsIHYuaGFuZGxlKSB8fCB3LnJlbW92ZUV2ZW50KGUsIHAsIHYuaGFuZGxlKSwgZGVsZXRlIHNbcF0pIH0gZWxzZSBmb3IgKHAgaW4gcykgdy5ldmVudC5yZW1vdmUoZSwgcCArIHRbbF0sIG4sIHIsICEwKTsgdy5pc0VtcHR5T2JqZWN0KHMpICYmIEsucmVtb3ZlKGUsICJoYW5kbGUgZXZlbnRzIikgfSB9LCBkaXNwYXRjaDogZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSB3LmV2ZW50LmZpeChlKSwgbiwgciwgaSwgbywgYSwgdSwgcyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSwgbCA9IChLLmdldCh0aGlzLCAiZXZlbnRzIikgfHwge30pW3QudHlwZV0gfHwgW10sIGMgPSB3LmV2ZW50LnNwZWNpYWxbdC50eXBlXSB8fCB7fTsgZm9yIChzWzBdID0gdCwgbiA9IDE7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspc1tuXSA9IGFyZ3VtZW50c1tuXTsgaWYgKHQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzLCAhYy5wcmVEaXNwYXRjaCB8fCAhMSAhPT0gYy5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsIHQpKSB7IHUgPSB3LmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcywgdCwgbCksIG4gPSAwOyB3aGlsZSAoKG8gPSB1W24rK10pICYmICF0LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHsgdC5jdXJyZW50VGFyZ2V0ID0gby5lbGVtLCByID0gMDsgd2hpbGUgKChhID0gby5oYW5kbGVyc1tyKytdKSAmJiAhdC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSB0LnJuYW1lc3BhY2UgJiYgIXQucm5hbWVzcGFjZS50ZXN0KGEubmFtZXNwYWNlKSB8fCAodC5oYW5kbGVPYmogPSBhLCB0LmRhdGEgPSBhLmRhdGEsIHZvaWQgMCAhPT0gKGkgPSAoKHcuZXZlbnQuc3BlY2lhbFthLm9yaWdUeXBlXSB8fCB7fSkuaGFuZGxlIHx8IGEuaGFuZGxlcikuYXBwbHkoby5lbGVtLCBzKSkgJiYgITEgPT09ICh0LnJlc3VsdCA9IGkpICYmICh0LnByZXZlbnREZWZhdWx0KCksIHQuc3RvcFByb3BhZ2F0aW9uKCkpKSB9IHJldHVybiBjLnBvc3REaXNwYXRjaCAmJiBjLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsIHQpLCB0LnJlc3VsdCB9IH0sIGhhbmRsZXJzOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiwgciwgaSwgbywgYSwgdSA9IFtdLCBzID0gdC5kZWxlZ2F0ZUNvdW50LCBsID0gZS50YXJnZXQ7IGlmIChzICYmIGwubm9kZVR5cGUgJiYgISgiY2xpY2siID09PSBlLnR5cGUgJiYgZS5idXR0b24gPj0gMSkpIGZvciAoOyBsICE9PSB0aGlzOyBsID0gbC5wYXJlbnROb2RlIHx8IHRoaXMpaWYgKDEgPT09IGwubm9kZVR5cGUgJiYgKCJjbGljayIgIT09IGUudHlwZSB8fCAhMCAhPT0gbC5kaXNhYmxlZCkpIHsgZm9yIChvID0gW10sIGEgPSB7fSwgbiA9IDA7IG4gPCBzOyBuKyspdm9pZCAwID09PSBhW2kgPSAociA9IHRbbl0pLnNlbGVjdG9yICsgIiAiXSAmJiAoYVtpXSA9IHIubmVlZHNDb250ZXh0ID8gdyhpLCB0aGlzKS5pbmRleChsKSA+IC0xIDogdy5maW5kKGksIHRoaXMsIG51bGwsIFtsXSkubGVuZ3RoKSwgYVtpXSAmJiBvLnB1c2gocik7IG8ubGVuZ3RoICYmIHUucHVzaCh7IGVsZW06IGwsIGhhbmRsZXJzOiBvIH0pIH0gcmV0dXJuIGwgPSB0aGlzLCBzIDwgdC5sZW5ndGggJiYgdS5wdXNoKHsgZWxlbTogbCwgaGFuZGxlcnM6IHQuc2xpY2UocykgfSksIHUgfSwgYWRkUHJvcDogZnVuY3Rpb24gKGUsIHQpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHcuRXZlbnQucHJvdG90eXBlLCBlLCB7IGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCBnZXQ6IGcodCkgPyBmdW5jdGlvbiAoKSB7IGlmICh0aGlzLm9yaWdpbmFsRXZlbnQpIHJldHVybiB0KHRoaXMub3JpZ2luYWxFdmVudCkgfSA6IGZ1bmN0aW9uICgpIHsgaWYgKHRoaXMub3JpZ2luYWxFdmVudCkgcmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFtlXSB9LCBzZXQ6IGZ1bmN0aW9uICh0KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBlLCB7IGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAsIHZhbHVlOiB0IH0pIH0gfSkgfSwgZml4OiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZVt3LmV4cGFuZG9dID8gZSA6IG5ldyB3LkV2ZW50KGUpIH0sIHNwZWNpYWw6IHsgbG9hZDogeyBub0J1YmJsZTogITAgfSwgZm9jdXM6IHsgdHJpZ2dlcjogZnVuY3Rpb24gKCkgeyBpZiAodGhpcyAhPT0ga2UoKSAmJiB0aGlzLmZvY3VzKSByZXR1cm4gdGhpcy5mb2N1cygpLCAhMSB9LCBkZWxlZ2F0ZVR5cGU6ICJmb2N1c2luIiB9LCBibHVyOiB7IHRyaWdnZXI6IGZ1bmN0aW9uICgpIHsgaWYgKHRoaXMgPT09IGtlKCkgJiYgdGhpcy5ibHVyKSByZXR1cm4gdGhpcy5ibHVyKCksICExIH0sIGRlbGVnYXRlVHlwZTogImZvY3Vzb3V0IiB9LCBjbGljazogeyB0cmlnZ2VyOiBmdW5jdGlvbiAoKSB7IGlmICgiY2hlY2tib3giID09PSB0aGlzLnR5cGUgJiYgdGhpcy5jbGljayAmJiBEKHRoaXMsICJpbnB1dCIpKSByZXR1cm4gdGhpcy5jbGljaygpLCAhMSB9LCBfZGVmYXVsdDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIEQoZS50YXJnZXQsICJhIikgfSB9LCBiZWZvcmV1bmxvYWQ6IHsgcG9zdERpc3BhdGNoOiBmdW5jdGlvbiAoZSkgeyB2b2lkIDAgIT09IGUucmVzdWx0ICYmIGUub3JpZ2luYWxFdmVudCAmJiAoZS5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZS5yZXN1bHQpIH0gfSB9IH0sIHcucmVtb3ZlRXZlbnQgPSBmdW5jdGlvbiAoZSwgdCwgbikgeyBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgJiYgZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsIG4pIH0sIHcuRXZlbnQgPSBmdW5jdGlvbiAoZSwgdCkgeyBpZiAoISh0aGlzIGluc3RhbmNlb2Ygdy5FdmVudCkpIHJldHVybiBuZXcgdy5FdmVudChlLCB0KTsgZSAmJiBlLnR5cGUgPyAodGhpcy5vcmlnaW5hbEV2ZW50ID0gZSwgdGhpcy50eXBlID0gZS50eXBlLCB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGUuZGVmYXVsdFByZXZlbnRlZCB8fCB2b2lkIDAgPT09IGUuZGVmYXVsdFByZXZlbnRlZCAmJiAhMSA9PT0gZS5yZXR1cm5WYWx1ZSA/IEVlIDogTmUsIHRoaXMudGFyZ2V0ID0gZS50YXJnZXQgJiYgMyA9PT0gZS50YXJnZXQubm9kZVR5cGUgPyBlLnRhcmdldC5wYXJlbnROb2RlIDogZS50YXJnZXQsIHRoaXMuY3VycmVudFRhcmdldCA9IGUuY3VycmVudFRhcmdldCwgdGhpcy5yZWxhdGVkVGFyZ2V0ID0gZS5yZWxhdGVkVGFyZ2V0KSA6IHRoaXMudHlwZSA9IGUsIHQgJiYgdy5leHRlbmQodGhpcywgdCksIHRoaXMudGltZVN0YW1wID0gZSAmJiBlLnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpLCB0aGlzW3cuZXhwYW5kb10gPSAhMCB9LCB3LkV2ZW50LnByb3RvdHlwZSA9IHsgY29uc3RydWN0b3I6IHcuRXZlbnQsIGlzRGVmYXVsdFByZXZlbnRlZDogTmUsIGlzUHJvcGFnYXRpb25TdG9wcGVkOiBOZSwgaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IE5lLCBpc1NpbXVsYXRlZDogITEsIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OyB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IEVlLCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICYmIGUucHJldmVudERlZmF1bHQoKSB9LCBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7IHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBFZSwgZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCAmJiBlLnN0b3BQcm9wYWdhdGlvbigpIH0sIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDsgdGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IEVlLCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICYmIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksIHRoaXMuc3RvcFByb3BhZ2F0aW9uKCkgfSB9LCB3LmVhY2goeyBhbHRLZXk6ICEwLCBidWJibGVzOiAhMCwgY2FuY2VsYWJsZTogITAsIGNoYW5nZWRUb3VjaGVzOiAhMCwgY3RybEtleTogITAsIGRldGFpbDogITAsIGV2ZW50UGhhc2U6ICEwLCBtZXRhS2V5OiAhMCwgcGFnZVg6ICEwLCBwYWdlWTogITAsIHNoaWZ0S2V5OiAhMCwgdmlldzogITAsICJjaGFyIjogITAsIGNoYXJDb2RlOiAhMCwga2V5OiAhMCwga2V5Q29kZTogITAsIGJ1dHRvbjogITAsIGJ1dHRvbnM6ICEwLCBjbGllbnRYOiAhMCwgY2xpZW50WTogITAsIG9mZnNldFg6ICEwLCBvZmZzZXRZOiAhMCwgcG9pbnRlcklkOiAhMCwgcG9pbnRlclR5cGU6ICEwLCBzY3JlZW5YOiAhMCwgc2NyZWVuWTogITAsIHRhcmdldFRvdWNoZXM6ICEwLCB0b0VsZW1lbnQ6ICEwLCB0b3VjaGVzOiAhMCwgd2hpY2g6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gZS5idXR0b247IHJldHVybiBudWxsID09IGUud2hpY2ggJiYgd2UudGVzdChlLnR5cGUpID8gbnVsbCAhPSBlLmNoYXJDb2RlID8gZS5jaGFyQ29kZSA6IGUua2V5Q29kZSA6ICFlLndoaWNoICYmIHZvaWQgMCAhPT0gdCAmJiBDZS50ZXN0KGUudHlwZSkgPyAxICYgdCA/IDEgOiAyICYgdCA/IDMgOiA0ICYgdCA/IDIgOiAwIDogZS53aGljaCB9IH0sIHcuZXZlbnQuYWRkUHJvcCksIHcuZWFjaCh7IG1vdXNlZW50ZXI6ICJtb3VzZW92ZXIiLCBtb3VzZWxlYXZlOiAibW91c2VvdXQiLCBwb2ludGVyZW50ZXI6ICJwb2ludGVyb3ZlciIsIHBvaW50ZXJsZWF2ZTogInBvaW50ZXJvdXQiIH0sIGZ1bmN0aW9uIChlLCB0KSB7IHcuZXZlbnQuc3BlY2lhbFtlXSA9IHsgZGVsZWdhdGVUeXBlOiB0LCBiaW5kVHlwZTogdCwgaGFuZGxlOiBmdW5jdGlvbiAoZSkgeyB2YXIgbiwgciA9IHRoaXMsIGkgPSBlLnJlbGF0ZWRUYXJnZXQsIG8gPSBlLmhhbmRsZU9iajsgcmV0dXJuIGkgJiYgKGkgPT09IHIgfHwgdy5jb250YWlucyhyLCBpKSkgfHwgKGUudHlwZSA9IG8ub3JpZ1R5cGUsIG4gPSBvLmhhbmRsZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgZS50eXBlID0gdCksIG4gfSB9IH0pLCB3LmZuLmV4dGVuZCh7IG9uOiBmdW5jdGlvbiAoZSwgdCwgbiwgcikgeyByZXR1cm4gQWUodGhpcywgZSwgdCwgbiwgcikgfSwgb25lOiBmdW5jdGlvbiAoZSwgdCwgbiwgcikgeyByZXR1cm4gQWUodGhpcywgZSwgdCwgbiwgciwgMSkgfSwgb2ZmOiBmdW5jdGlvbiAoZSwgdCwgbikgeyB2YXIgciwgaTsgaWYgKGUgJiYgZS5wcmV2ZW50RGVmYXVsdCAmJiBlLmhhbmRsZU9iaikgcmV0dXJuIHIgPSBlLmhhbmRsZU9iaiwgdyhlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1lc3BhY2UgPyByLm9yaWdUeXBlICsgIi4iICsgci5uYW1lc3BhY2UgOiByLm9yaWdUeXBlLCByLnNlbGVjdG9yLCByLmhhbmRsZXIpLCB0aGlzOyBpZiAoIm9iamVjdCIgPT0gdHlwZW9mIGUpIHsgZm9yIChpIGluIGUpIHRoaXMub2ZmKGksIHQsIGVbaV0pOyByZXR1cm4gdGhpcyB9IHJldHVybiAhMSAhPT0gdCAmJiAiZnVuY3Rpb24iICE9IHR5cGVvZiB0IHx8IChuID0gdCwgdCA9IHZvaWQgMCksICExID09PSBuICYmIChuID0gTmUpLCB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyB3LmV2ZW50LnJlbW92ZSh0aGlzLCBlLCBuLCB0KSB9KSB9IH0pOyB2YXIgRGUgPSAvPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKilbXj5dKilcLz4vZ2ksIFNlID0gLzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksIExlID0gL2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksIGplID0gL15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nOyBmdW5jdGlvbiBxZShlLCB0KSB7IHJldHVybiBEKGUsICJ0YWJsZSIpICYmIEQoMTEgIT09IHQubm9kZVR5cGUgPyB0IDogdC5maXJzdENoaWxkLCAidHIiKSA/IHcoZSkuY2hpbGRyZW4oInRib2R5IilbMF0gfHwgZSA6IGUgfSBmdW5jdGlvbiBPZShlKSB7IHJldHVybiBlLnR5cGUgPSAobnVsbCAhPT0gZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkgKyAiLyIgKyBlLnR5cGUsIGUgfSBmdW5jdGlvbiBQZShlKSB7IHJldHVybiAidHJ1ZS8iID09PSAoZS50eXBlIHx8ICIiKS5zbGljZSgwLCA1KSA/IGUudHlwZSA9IGUudHlwZS5zbGljZSg1KSA6IGUucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksIGUgfSBmdW5jdGlvbiBIZShlLCB0KSB7IHZhciBuLCByLCBpLCBvLCBhLCB1LCBzLCBsOyBpZiAoMSA9PT0gdC5ub2RlVHlwZSkgeyBpZiAoSy5oYXNEYXRhKGUpICYmIChvID0gSy5hY2Nlc3MoZSksIGEgPSBLLnNldCh0LCBvKSwgbCA9IG8uZXZlbnRzKSkgeyBkZWxldGUgYS5oYW5kbGUsIGEuZXZlbnRzID0ge307IGZvciAoaSBpbiBsKSBmb3IgKG4gPSAwLCByID0gbFtpXS5sZW5ndGg7IG4gPCByOyBuKyspdy5ldmVudC5hZGQodCwgaSwgbFtpXVtuXSkgfSBKLmhhc0RhdGEoZSkgJiYgKHUgPSBKLmFjY2VzcyhlKSwgcyA9IHcuZXh0ZW5kKHt9LCB1KSwgSi5zZXQodCwgcykpIH0gfSBmdW5jdGlvbiBJZShlLCB0KSB7IHZhciBuID0gdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyAiaW5wdXQiID09PSBuICYmIGRlLnRlc3QoZS50eXBlKSA/IHQuY2hlY2tlZCA9IGUuY2hlY2tlZCA6ICJpbnB1dCIgIT09IG4gJiYgInRleHRhcmVhIiAhPT0gbiB8fCAodC5kZWZhdWx0VmFsdWUgPSBlLmRlZmF1bHRWYWx1ZSkgfSBmdW5jdGlvbiBSZShlLCB0LCBuLCByKSB7IHQgPSBhLmFwcGx5KFtdLCB0KTsgdmFyIGksIG8sIHUsIHMsIGwsIGMsIGYgPSAwLCBkID0gZS5sZW5ndGgsIHAgPSBkIC0gMSwgdiA9IHRbMF0sIHkgPSBnKHYpOyBpZiAoeSB8fCBkID4gMSAmJiAic3RyaW5nIiA9PSB0eXBlb2YgdiAmJiAhaC5jaGVja0Nsb25lICYmIExlLnRlc3QodikpIHJldHVybiBlLmVhY2goZnVuY3Rpb24gKGkpIHsgdmFyIG8gPSBlLmVxKGkpOyB5ICYmICh0WzBdID0gdi5jYWxsKHRoaXMsIGksIG8uaHRtbCgpKSksIFJlKG8sIHQsIG4sIHIpIH0pOyBpZiAoZCAmJiAoaSA9IGJlKHQsIGVbMF0ub3duZXJEb2N1bWVudCwgITEsIGUsIHIpLCBvID0gaS5maXJzdENoaWxkLCAxID09PSBpLmNoaWxkTm9kZXMubGVuZ3RoICYmIChpID0gbyksIG8gfHwgcikpIHsgZm9yIChzID0gKHUgPSB3Lm1hcCh2ZShpLCAic2NyaXB0IiksIE9lKSkubGVuZ3RoOyBmIDwgZDsgZisrKWwgPSBpLCBmICE9PSBwICYmIChsID0gdy5jbG9uZShsLCAhMCwgITApLCBzICYmIHcubWVyZ2UodSwgdmUobCwgInNjcmlwdCIpKSksIG4uY2FsbChlW2ZdLCBsLCBmKTsgaWYgKHMpIGZvciAoYyA9IHVbdS5sZW5ndGggLSAxXS5vd25lckRvY3VtZW50LCB3Lm1hcCh1LCBQZSksIGYgPSAwOyBmIDwgczsgZisrKWwgPSB1W2ZdLCBoZS50ZXN0KGwudHlwZSB8fCAiIikgJiYgIUsuYWNjZXNzKGwsICJnbG9iYWxFdmFsIikgJiYgdy5jb250YWlucyhjLCBsKSAmJiAobC5zcmMgJiYgIm1vZHVsZSIgIT09IChsLnR5cGUgfHwgIiIpLnRvTG93ZXJDYXNlKCkgPyB3Ll9ldmFsVXJsICYmIHcuX2V2YWxVcmwobC5zcmMpIDogbShsLnRleHRDb250ZW50LnJlcGxhY2UoamUsICIiKSwgYywgbCkpIH0gcmV0dXJuIGUgfSBmdW5jdGlvbiBCZShlLCB0LCBuKSB7IGZvciAodmFyIHIsIGkgPSB0ID8gdy5maWx0ZXIodCwgZSkgOiBlLCBvID0gMDsgbnVsbCAhPSAociA9IGlbb10pOyBvKyspbiB8fCAxICE9PSByLm5vZGVUeXBlIHx8IHcuY2xlYW5EYXRhKHZlKHIpKSwgci5wYXJlbnROb2RlICYmIChuICYmIHcuY29udGFpbnMoci5vd25lckRvY3VtZW50LCByKSAmJiB5ZSh2ZShyLCAic2NyaXB0IikpLCByLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocikpOyByZXR1cm4gZSB9IHcuZXh0ZW5kKHsgaHRtbFByZWZpbHRlcjogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUucmVwbGFjZShEZSwgIjwkMT48LyQyPiIpIH0sIGNsb25lOiBmdW5jdGlvbiAoZSwgdCwgbikgeyB2YXIgciwgaSwgbywgYSwgdSA9IGUuY2xvbmVOb2RlKCEwKSwgcyA9IHcuY29udGFpbnMoZS5vd25lckRvY3VtZW50LCBlKTsgaWYgKCEoaC5ub0Nsb25lQ2hlY2tlZCB8fCAxICE9PSBlLm5vZGVUeXBlICYmIDExICE9PSBlLm5vZGVUeXBlIHx8IHcuaXNYTUxEb2MoZSkpKSBmb3IgKGEgPSB2ZSh1KSwgciA9IDAsIGkgPSAobyA9IHZlKGUpKS5sZW5ndGg7IHIgPCBpOyByKyspSWUob1tyXSwgYVtyXSk7IGlmICh0KSBpZiAobikgZm9yIChvID0gbyB8fCB2ZShlKSwgYSA9IGEgfHwgdmUodSksIHIgPSAwLCBpID0gby5sZW5ndGg7IHIgPCBpOyByKyspSGUob1tyXSwgYVtyXSk7IGVsc2UgSGUoZSwgdSk7IHJldHVybiAoYSA9IHZlKHUsICJzY3JpcHQiKSkubGVuZ3RoID4gMCAmJiB5ZShhLCAhcyAmJiB2ZShlLCAic2NyaXB0IikpLCB1IH0sIGNsZWFuRGF0YTogZnVuY3Rpb24gKGUpIHsgZm9yICh2YXIgdCwgbiwgciwgaSA9IHcuZXZlbnQuc3BlY2lhbCwgbyA9IDA7IHZvaWQgMCAhPT0gKG4gPSBlW29dKTsgbysrKWlmIChZKG4pKSB7IGlmICh0ID0gbltLLmV4cGFuZG9dKSB7IGlmICh0LmV2ZW50cykgZm9yIChyIGluIHQuZXZlbnRzKSBpW3JdID8gdy5ldmVudC5yZW1vdmUobiwgcikgOiB3LnJlbW92ZUV2ZW50KG4sIHIsIHQuaGFuZGxlKTsgbltLLmV4cGFuZG9dID0gdm9pZCAwIH0gbltKLmV4cGFuZG9dICYmIChuW0ouZXhwYW5kb10gPSB2b2lkIDApIH0gfSB9KSwgdy5mbi5leHRlbmQoeyBkZXRhY2g6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBCZSh0aGlzLCBlLCAhMCkgfSwgcmVtb3ZlOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gQmUodGhpcywgZSkgfSwgdGV4dDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIF8odGhpcywgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHZvaWQgMCA9PT0gZSA/IHcudGV4dCh0aGlzKSA6IHRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uICgpIHsgMSAhPT0gdGhpcy5ub2RlVHlwZSAmJiAxMSAhPT0gdGhpcy5ub2RlVHlwZSAmJiA5ICE9PSB0aGlzLm5vZGVUeXBlIHx8ICh0aGlzLnRleHRDb250ZW50ID0gZSkgfSkgfSwgbnVsbCwgZSwgYXJndW1lbnRzLmxlbmd0aCkgfSwgYXBwZW5kOiBmdW5jdGlvbiAoKSB7IHJldHVybiBSZSh0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIChlKSB7IDEgIT09IHRoaXMubm9kZVR5cGUgJiYgMTEgIT09IHRoaXMubm9kZVR5cGUgJiYgOSAhPT0gdGhpcy5ub2RlVHlwZSB8fCBxZSh0aGlzLCBlKS5hcHBlbmRDaGlsZChlKSB9KSB9LCBwcmVwZW5kOiBmdW5jdGlvbiAoKSB7IHJldHVybiBSZSh0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIChlKSB7IGlmICgxID09PSB0aGlzLm5vZGVUeXBlIHx8IDExID09PSB0aGlzLm5vZGVUeXBlIHx8IDkgPT09IHRoaXMubm9kZVR5cGUpIHsgdmFyIHQgPSBxZSh0aGlzLCBlKTsgdC5pbnNlcnRCZWZvcmUoZSwgdC5maXJzdENoaWxkKSB9IH0pIH0sIGJlZm9yZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmUodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiAoZSkgeyB0aGlzLnBhcmVudE5vZGUgJiYgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLCB0aGlzKSB9KSB9LCBhZnRlcjogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmUodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiAoZSkgeyB0aGlzLnBhcmVudE5vZGUgJiYgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLCB0aGlzLm5leHRTaWJsaW5nKSB9KSB9LCBlbXB0eTogZnVuY3Rpb24gKCkgeyBmb3IgKHZhciBlLCB0ID0gMDsgbnVsbCAhPSAoZSA9IHRoaXNbdF0pOyB0KyspMSA9PT0gZS5ub2RlVHlwZSAmJiAody5jbGVhbkRhdGEodmUoZSwgITEpKSwgZS50ZXh0Q29udGVudCA9ICIiKTsgcmV0dXJuIHRoaXMgfSwgY2xvbmU6IGZ1bmN0aW9uIChlLCB0KSB7IHJldHVybiBlID0gbnVsbCAhPSBlICYmIGUsIHQgPSBudWxsID09IHQgPyBlIDogdCwgdGhpcy5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdy5jbG9uZSh0aGlzLCBlLCB0KSB9KSB9LCBodG1sOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gXyh0aGlzLCBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IHRoaXNbMF0gfHwge30sIG4gPSAwLCByID0gdGhpcy5sZW5ndGg7IGlmICh2b2lkIDAgPT09IGUgJiYgMSA9PT0gdC5ub2RlVHlwZSkgcmV0dXJuIHQuaW5uZXJIVE1MOyBpZiAoInN0cmluZyIgPT0gdHlwZW9mIGUgJiYgIVNlLnRlc3QoZSkgJiYgIWdlWyhwZS5leGVjKGUpIHx8IFsiIiwgIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSkgeyBlID0gdy5odG1sUHJlZmlsdGVyKGUpOyB0cnkgeyBmb3IgKDsgbiA8IHI7IG4rKykxID09PSAodCA9IHRoaXNbbl0gfHwge30pLm5vZGVUeXBlICYmICh3LmNsZWFuRGF0YSh2ZSh0LCAhMSkpLCB0LmlubmVySFRNTCA9IGUpOyB0ID0gMCB9IGNhdGNoIChlKSB7IH0gfSB0ICYmIHRoaXMuZW1wdHkoKS5hcHBlbmQoZSkgfSwgbnVsbCwgZSwgYXJndW1lbnRzLmxlbmd0aCkgfSwgcmVwbGFjZVdpdGg6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSBbXTsgcmV0dXJuIFJlKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24gKHQpIHsgdmFyIG4gPSB0aGlzLnBhcmVudE5vZGU7IHcuaW5BcnJheSh0aGlzLCBlKSA8IDAgJiYgKHcuY2xlYW5EYXRhKHZlKHRoaXMpKSwgbiAmJiBuLnJlcGxhY2VDaGlsZCh0LCB0aGlzKSkgfSwgZSkgfSB9KSwgdy5lYWNoKHsgYXBwZW5kVG86ICJhcHBlbmQiLCBwcmVwZW5kVG86ICJwcmVwZW5kIiwgaW5zZXJ0QmVmb3JlOiAiYmVmb3JlIiwgaW5zZXJ0QWZ0ZXI6ICJhZnRlciIsIHJlcGxhY2VBbGw6ICJyZXBsYWNlV2l0aCIgfSwgZnVuY3Rpb24gKGUsIHQpIHsgdy5mbltlXSA9IGZ1bmN0aW9uIChlKSB7IGZvciAodmFyIG4sIHIgPSBbXSwgaSA9IHcoZSksIG8gPSBpLmxlbmd0aCAtIDEsIGEgPSAwOyBhIDw9IG87IGErKyluID0gYSA9PT0gbyA/IHRoaXMgOiB0aGlzLmNsb25lKCEwKSwgdyhpW2FdKVt0XShuKSwgdS5hcHBseShyLCBuLmdldCgpKTsgcmV0dXJuIHRoaXMucHVzaFN0YWNrKHIpIH0gfSk7IHZhciBNZSA9IG5ldyBSZWdFeHAoIl4oIiArIHJlICsgIikoPyFweClbYS16JV0rJCIsICJpIiksIFdlID0gZnVuY3Rpb24gKHQpIHsgdmFyIG4gPSB0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7IHJldHVybiBuICYmIG4ub3BlbmVyIHx8IChuID0gZSksIG4uZ2V0Q29tcHV0ZWRTdHlsZSh0KSB9LCAkZSA9IG5ldyBSZWdFeHAob2Uuam9pbigifCIpLCAiaSIpOyAhZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiB0KCkgeyBpZiAoYykgeyBsLnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4O21hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MCIsIGMuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7bWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo2MCU7dG9wOjElIiwgeGUuYXBwZW5kQ2hpbGQobCkuYXBwZW5kQ2hpbGQoYyk7IHZhciB0ID0gZS5nZXRDb21wdXRlZFN0eWxlKGMpOyBpID0gIjElIiAhPT0gdC50b3AsIHMgPSAxMiA9PT0gbih0Lm1hcmdpbkxlZnQpLCBjLnN0eWxlLnJpZ2h0ID0gIjYwJSIsIHUgPSAzNiA9PT0gbih0LnJpZ2h0KSwgbyA9IDM2ID09PSBuKHQud2lkdGgpLCBjLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIiwgYSA9IDM2ID09PSBjLm9mZnNldFdpZHRoIHx8ICJhYnNvbHV0ZSIsIHhlLnJlbW92ZUNoaWxkKGwpLCBjID0gbnVsbCB9IH0gZnVuY3Rpb24gbihlKSB7IHJldHVybiBNYXRoLnJvdW5kKHBhcnNlRmxvYXQoZSkpIH0gdmFyIGksIG8sIGEsIHUsIHMsIGwgPSByLmNyZWF0ZUVsZW1lbnQoImRpdiIpLCBjID0gci5jcmVhdGVFbGVtZW50KCJkaXYiKTsgYy5zdHlsZSAmJiAoYy5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9ICJjb250ZW50LWJveCIsIGMuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9ICIiLCBoLmNsZWFyQ2xvbmVTdHlsZSA9ICJjb250ZW50LWJveCIgPT09IGMuc3R5bGUuYmFja2dyb3VuZENsaXAsIHcuZXh0ZW5kKGgsIHsgYm94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHQoKSwgbyB9LCBwaXhlbEJveFN0eWxlczogZnVuY3Rpb24gKCkgeyByZXR1cm4gdCgpLCB1IH0sIHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHQoKSwgaSB9LCByZWxpYWJsZU1hcmdpbkxlZnQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHQoKSwgcyB9LCBzY3JvbGxib3hTaXplOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0KCksIGEgfSB9KSkgfSgpOyBmdW5jdGlvbiBGZShlLCB0LCBuKSB7IHZhciByLCBpLCBvLCBhLCB1ID0gZS5zdHlsZTsgcmV0dXJuIChuID0gbiB8fCBXZShlKSkgJiYgKCIiICE9PSAoYSA9IG4uZ2V0UHJvcGVydHlWYWx1ZSh0KSB8fCBuW3RdKSB8fCB3LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCwgZSkgfHwgKGEgPSB3LnN0eWxlKGUsIHQpKSwgIWgucGl4ZWxCb3hTdHlsZXMoKSAmJiBNZS50ZXN0KGEpICYmICRlLnRlc3QodCkgJiYgKHIgPSB1LndpZHRoLCBpID0gdS5taW5XaWR0aCwgbyA9IHUubWF4V2lkdGgsIHUubWluV2lkdGggPSB1Lm1heFdpZHRoID0gdS53aWR0aCA9IGEsIGEgPSBuLndpZHRoLCB1LndpZHRoID0gciwgdS5taW5XaWR0aCA9IGksIHUubWF4V2lkdGggPSBvKSksIHZvaWQgMCAhPT0gYSA/IGEgKyAiIiA6IGEgfSBmdW5jdGlvbiB6ZShlLCB0KSB7IHJldHVybiB7IGdldDogZnVuY3Rpb24gKCkgeyBpZiAoIWUoKSkgcmV0dXJuICh0aGlzLmdldCA9IHQpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IGRlbGV0ZSB0aGlzLmdldCB9IH0gfSB2YXIgX2UgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sIFVlID0gL14tLS8sIFZlID0geyBwb3NpdGlvbjogImFic29sdXRlIiwgdmlzaWJpbGl0eTogImhpZGRlbiIsIGRpc3BsYXk6ICJibG9jayIgfSwgWGUgPSB7IGxldHRlclNwYWNpbmc6ICIwIiwgZm9udFdlaWdodDogIjQwMCIgfSwgUWUgPSBbIldlYmtpdCIsICJNb3oiLCAibXMiXSwgWWUgPSByLmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlOyBmdW5jdGlvbiBHZShlKSB7IGlmIChlIGluIFllKSByZXR1cm4gZTsgdmFyIHQgPSBlWzBdLnRvVXBwZXJDYXNlKCkgKyBlLnNsaWNlKDEpLCBuID0gUWUubGVuZ3RoOyB3aGlsZSAobi0tKSBpZiAoKGUgPSBRZVtuXSArIHQpIGluIFllKSByZXR1cm4gZSB9IGZ1bmN0aW9uIEtlKGUpIHsgdmFyIHQgPSB3LmNzc1Byb3BzW2VdOyByZXR1cm4gdCB8fCAodCA9IHcuY3NzUHJvcHNbZV0gPSBHZShlKSB8fCBlKSwgdCB9IGZ1bmN0aW9uIEplKGUsIHQsIG4pIHsgdmFyIHIgPSBpZS5leGVjKHQpOyByZXR1cm4gciA/IE1hdGgubWF4KDAsIHJbMl0gLSAobiB8fCAwKSkgKyAoclszXSB8fCAicHgiKSA6IHQgfSBmdW5jdGlvbiBaZShlLCB0LCBuLCByLCBpLCBvKSB7IHZhciBhID0gIndpZHRoIiA9PT0gdCA/IDEgOiAwLCB1ID0gMCwgcyA9IDA7IGlmIChuID09PSAociA/ICJib3JkZXIiIDogImNvbnRlbnQiKSkgcmV0dXJuIDA7IGZvciAoOyBhIDwgNDsgYSArPSAyKSJtYXJnaW4iID09PSBuICYmIChzICs9IHcuY3NzKGUsIG4gKyBvZVthXSwgITAsIGkpKSwgciA/ICgiY29udGVudCIgPT09IG4gJiYgKHMgLT0gdy5jc3MoZSwgInBhZGRpbmciICsgb2VbYV0sICEwLCBpKSksICJtYXJnaW4iICE9PSBuICYmIChzIC09IHcuY3NzKGUsICJib3JkZXIiICsgb2VbYV0gKyAiV2lkdGgiLCAhMCwgaSkpKSA6IChzICs9IHcuY3NzKGUsICJwYWRkaW5nIiArIG9lW2FdLCAhMCwgaSksICJwYWRkaW5nIiAhPT0gbiA/IHMgKz0gdy5jc3MoZSwgImJvcmRlciIgKyBvZVthXSArICJXaWR0aCIsICEwLCBpKSA6IHUgKz0gdy5jc3MoZSwgImJvcmRlciIgKyBvZVthXSArICJXaWR0aCIsICEwLCBpKSk7IHJldHVybiAhciAmJiBvID49IDAgJiYgKHMgKz0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKGVbIm9mZnNldCIgKyB0WzBdLnRvVXBwZXJDYXNlKCkgKyB0LnNsaWNlKDEpXSAtIG8gLSBzIC0gdSAtIC41KSkpLCBzIH0gZnVuY3Rpb24gZXQoZSwgdCwgbikgeyB2YXIgciA9IFdlKGUpLCBpID0gRmUoZSwgdCwgciksIG8gPSAiYm9yZGVyLWJveCIgPT09IHcuY3NzKGUsICJib3hTaXppbmciLCAhMSwgciksIGEgPSBvOyBpZiAoTWUudGVzdChpKSkgeyBpZiAoIW4pIHJldHVybiBpOyBpID0gImF1dG8iIH0gcmV0dXJuIGEgPSBhICYmIChoLmJveFNpemluZ1JlbGlhYmxlKCkgfHwgaSA9PT0gZS5zdHlsZVt0XSksICgiYXV0byIgPT09IGkgfHwgIXBhcnNlRmxvYXQoaSkgJiYgImlubGluZSIgPT09IHcuY3NzKGUsICJkaXNwbGF5IiwgITEsIHIpKSAmJiAoaSA9IGVbIm9mZnNldCIgKyB0WzBdLnRvVXBwZXJDYXNlKCkgKyB0LnNsaWNlKDEpXSwgYSA9ICEwKSwgKGkgPSBwYXJzZUZsb2F0KGkpIHx8IDApICsgWmUoZSwgdCwgbiB8fCAobyA/ICJib3JkZXIiIDogImNvbnRlbnQiKSwgYSwgciwgaSkgKyAicHgiIH0gdy5leHRlbmQoeyBjc3NIb29rczogeyBvcGFjaXR5OiB7IGdldDogZnVuY3Rpb24gKGUsIHQpIHsgaWYgKHQpIHsgdmFyIG4gPSBGZShlLCAib3BhY2l0eSIpOyByZXR1cm4gIiIgPT09IG4gPyAiMSIgOiBuIH0gfSB9IH0sIGNzc051bWJlcjogeyBhbmltYXRpb25JdGVyYXRpb25Db3VudDogITAsIGNvbHVtbkNvdW50OiAhMCwgZmlsbE9wYWNpdHk6ICEwLCBmbGV4R3JvdzogITAsIGZsZXhTaHJpbms6ICEwLCBmb250V2VpZ2h0OiAhMCwgbGluZUhlaWdodDogITAsIG9wYWNpdHk6ICEwLCBvcmRlcjogITAsIG9ycGhhbnM6ICEwLCB3aWRvd3M6ICEwLCB6SW5kZXg6ICEwLCB6b29tOiAhMCB9LCBjc3NQcm9wczoge30sIHN0eWxlOiBmdW5jdGlvbiAoZSwgdCwgbiwgcikgeyBpZiAoZSAmJiAzICE9PSBlLm5vZGVUeXBlICYmIDggIT09IGUubm9kZVR5cGUgJiYgZS5zdHlsZSkgeyB2YXIgaSwgbywgYSwgdSA9IFEodCksIHMgPSBVZS50ZXN0KHQpLCBsID0gZS5zdHlsZTsgaWYgKHMgfHwgKHQgPSBLZSh1KSksIGEgPSB3LmNzc0hvb2tzW3RdIHx8IHcuY3NzSG9va3NbdV0sIHZvaWQgMCA9PT0gbikgcmV0dXJuIGEgJiYgImdldCIgaW4gYSAmJiB2b2lkIDAgIT09IChpID0gYS5nZXQoZSwgITEsIHIpKSA/IGkgOiBsW3RdOyAic3RyaW5nIiA9PSAobyA9IHR5cGVvZiBuKSAmJiAoaSA9IGllLmV4ZWMobikpICYmIGlbMV0gJiYgKG4gPSBzZShlLCB0LCBpKSwgbyA9ICJudW1iZXIiKSwgbnVsbCAhPSBuICYmIG4gPT09IG4gJiYgKCJudW1iZXIiID09PSBvICYmIChuICs9IGkgJiYgaVszXSB8fCAody5jc3NOdW1iZXJbdV0gPyAiIiA6ICJweCIpKSwgaC5jbGVhckNsb25lU3R5bGUgfHwgIiIgIT09IG4gfHwgMCAhPT0gdC5pbmRleE9mKCJiYWNrZ3JvdW5kIikgfHwgKGxbdF0gPSAiaW5oZXJpdCIpLCBhICYmICJzZXQiIGluIGEgJiYgdm9pZCAwID09PSAobiA9IGEuc2V0KGUsIG4sIHIpKSB8fCAocyA/IGwuc2V0UHJvcGVydHkodCwgbikgOiBsW3RdID0gbikpIH0gfSwgY3NzOiBmdW5jdGlvbiAoZSwgdCwgbiwgcikgeyB2YXIgaSwgbywgYSwgdSA9IFEodCk7IHJldHVybiBVZS50ZXN0KHQpIHx8ICh0ID0gS2UodSkpLCAoYSA9IHcuY3NzSG9va3NbdF0gfHwgdy5jc3NIb29rc1t1XSkgJiYgImdldCIgaW4gYSAmJiAoaSA9IGEuZ2V0KGUsICEwLCBuKSksIHZvaWQgMCA9PT0gaSAmJiAoaSA9IEZlKGUsIHQsIHIpKSwgIm5vcm1hbCIgPT09IGkgJiYgdCBpbiBYZSAmJiAoaSA9IFhlW3RdKSwgIiIgPT09IG4gfHwgbiA/IChvID0gcGFyc2VGbG9hdChpKSwgITAgPT09IG4gfHwgaXNGaW5pdGUobykgPyBvIHx8IDAgOiBpKSA6IGkgfSB9KSwgdy5lYWNoKFsiaGVpZ2h0IiwgIndpZHRoIl0sIGZ1bmN0aW9uIChlLCB0KSB7IHcuY3NzSG9va3NbdF0gPSB7IGdldDogZnVuY3Rpb24gKGUsIG4sIHIpIHsgaWYgKG4pIHJldHVybiAhX2UudGVzdCh3LmNzcyhlLCAiZGlzcGxheSIpKSB8fCBlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICYmIGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggPyBldChlLCB0LCByKSA6IHVlKGUsIFZlLCBmdW5jdGlvbiAoKSB7IHJldHVybiBldChlLCB0LCByKSB9KSB9LCBzZXQ6IGZ1bmN0aW9uIChlLCBuLCByKSB7IHZhciBpLCBvID0gV2UoZSksIGEgPSAiYm9yZGVyLWJveCIgPT09IHcuY3NzKGUsICJib3hTaXppbmciLCAhMSwgbyksIHUgPSByICYmIFplKGUsIHQsIHIsIGEsIG8pOyByZXR1cm4gYSAmJiBoLnNjcm9sbGJveFNpemUoKSA9PT0gby5wb3NpdGlvbiAmJiAodSAtPSBNYXRoLmNlaWwoZVsib2Zmc2V0IiArIHRbMF0udG9VcHBlckNhc2UoKSArIHQuc2xpY2UoMSldIC0gcGFyc2VGbG9hdChvW3RdKSAtIFplKGUsIHQsICJib3JkZXIiLCAhMSwgbykgLSAuNSkpLCB1ICYmIChpID0gaWUuZXhlYyhuKSkgJiYgInB4IiAhPT0gKGlbM10gfHwgInB4IikgJiYgKGUuc3R5bGVbdF0gPSBuLCBuID0gdy5jc3MoZSwgdCkpLCBKZShlLCBuLCB1KSB9IH0gfSksIHcuY3NzSG9va3MubWFyZ2luTGVmdCA9IHplKGgucmVsaWFibGVNYXJnaW5MZWZ0LCBmdW5jdGlvbiAoZSwgdCkgeyBpZiAodCkgcmV0dXJuIChwYXJzZUZsb2F0KEZlKGUsICJtYXJnaW5MZWZ0IikpIHx8IGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIHVlKGUsIHsgbWFyZ2luTGVmdDogMCB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgfSkpICsgInB4IiB9KSwgdy5lYWNoKHsgbWFyZ2luOiAiIiwgcGFkZGluZzogIiIsIGJvcmRlcjogIldpZHRoIiB9LCBmdW5jdGlvbiAoZSwgdCkgeyB3LmNzc0hvb2tzW2UgKyB0XSA9IHsgZXhwYW5kOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciByID0gMCwgaSA9IHt9LCBvID0gInN0cmluZyIgPT0gdHlwZW9mIG4gPyBuLnNwbGl0KCIgIikgOiBbbl07IHIgPCA0OyByKyspaVtlICsgb2Vbcl0gKyB0XSA9IG9bcl0gfHwgb1tyIC0gMl0gfHwgb1swXTsgcmV0dXJuIGkgfSB9LCAibWFyZ2luIiAhPT0gZSAmJiAody5jc3NIb29rc1tlICsgdF0uc2V0ID0gSmUpIH0pLCB3LmZuLmV4dGVuZCh7IGNzczogZnVuY3Rpb24gKGUsIHQpIHsgcmV0dXJuIF8odGhpcywgZnVuY3Rpb24gKGUsIHQsIG4pIHsgdmFyIHIsIGksIG8gPSB7fSwgYSA9IDA7IGlmIChBcnJheS5pc0FycmF5KHQpKSB7IGZvciAociA9IFdlKGUpLCBpID0gdC5sZW5ndGg7IGEgPCBpOyBhKyspb1t0W2FdXSA9IHcuY3NzKGUsIHRbYV0sICExLCByKTsgcmV0dXJuIG8gfSByZXR1cm4gdm9pZCAwICE9PSBuID8gdy5zdHlsZShlLCB0LCBuKSA6IHcuY3NzKGUsIHQpIH0sIGUsIHQsIGFyZ3VtZW50cy5sZW5ndGggPiAxKSB9IH0pLCB3LmZuLmRlbGF5ID0gZnVuY3Rpb24gKHQsIG4pIHsgcmV0dXJuIHQgPSB3LmZ4ID8gdy5meC5zcGVlZHNbdF0gfHwgdCA6IHQsIG4gPSBuIHx8ICJmeCIsIHRoaXMucXVldWUobiwgZnVuY3Rpb24gKG4sIHIpIHsgdmFyIGkgPSBlLnNldFRpbWVvdXQobiwgdCk7IHIuc3RvcCA9IGZ1bmN0aW9uICgpIHsgZS5jbGVhclRpbWVvdXQoaSkgfSB9KSB9LCBmdW5jdGlvbiAoKSB7IHZhciBlID0gci5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLCB0ID0gci5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKS5hcHBlbmRDaGlsZChyLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKTsgZS50eXBlID0gImNoZWNrYm94IiwgaC5jaGVja09uID0gIiIgIT09IGUudmFsdWUsIGgub3B0U2VsZWN0ZWQgPSB0LnNlbGVjdGVkLCAoZSA9IHIuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkudmFsdWUgPSAidCIsIGUudHlwZSA9ICJyYWRpbyIsIGgucmFkaW9WYWx1ZSA9ICJ0IiA9PT0gZS52YWx1ZSB9KCk7IHZhciB0dCwgbnQgPSB3LmV4cHIuYXR0ckhhbmRsZTsgdy5mbi5leHRlbmQoeyBhdHRyOiBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gXyh0aGlzLCB3LmF0dHIsIGUsIHQsIGFyZ3VtZW50cy5sZW5ndGggPiAxKSB9LCByZW1vdmVBdHRyOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgdy5yZW1vdmVBdHRyKHRoaXMsIGUpIH0pIH0gfSksIHcuZXh0ZW5kKHsgYXR0cjogZnVuY3Rpb24gKGUsIHQsIG4pIHsgdmFyIHIsIGksIG8gPSBlLm5vZGVUeXBlOyBpZiAoMyAhPT0gbyAmJiA4ICE9PSBvICYmIDIgIT09IG8pIHJldHVybiAidW5kZWZpbmVkIiA9PSB0eXBlb2YgZS5nZXRBdHRyaWJ1dGUgPyB3LnByb3AoZSwgdCwgbikgOiAoMSA9PT0gbyAmJiB3LmlzWE1MRG9jKGUpIHx8IChpID0gdy5hdHRySG9va3NbdC50b0xvd2VyQ2FzZSgpXSB8fCAody5leHByLm1hdGNoLmJvb2wudGVzdCh0KSA/IHR0IDogdm9pZCAwKSksIHZvaWQgMCAhPT0gbiA/IG51bGwgPT09IG4gPyB2b2lkIHcucmVtb3ZlQXR0cihlLCB0KSA6IGkgJiYgInNldCIgaW4gaSAmJiB2b2lkIDAgIT09IChyID0gaS5zZXQoZSwgbiwgdCkpID8gciA6IChlLnNldEF0dHJpYnV0ZSh0LCBuICsgIiIpLCBuKSA6IGkgJiYgImdldCIgaW4gaSAmJiBudWxsICE9PSAociA9IGkuZ2V0KGUsIHQpKSA/IHIgOiBudWxsID09IChyID0gdy5maW5kLmF0dHIoZSwgdCkpID8gdm9pZCAwIDogcikgfSwgYXR0ckhvb2tzOiB7IHR5cGU6IHsgc2V0OiBmdW5jdGlvbiAoZSwgdCkgeyBpZiAoIWgucmFkaW9WYWx1ZSAmJiAicmFkaW8iID09PSB0ICYmIEQoZSwgImlucHV0IikpIHsgdmFyIG4gPSBlLnZhbHVlOyByZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLCB0KSwgbiAmJiAoZS52YWx1ZSA9IG4pLCB0IH0gfSB9IH0sIHJlbW92ZUF0dHI6IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBuLCByID0gMCwgaSA9IHQgJiYgdC5tYXRjaChJKTsgaWYgKGkgJiYgMSA9PT0gZS5ub2RlVHlwZSkgd2hpbGUgKG4gPSBpW3IrK10pIGUucmVtb3ZlQXR0cmlidXRlKG4pIH0gfSksIHR0ID0geyBzZXQ6IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiAhMSA9PT0gdCA/IHcucmVtb3ZlQXR0cihlLCBuKSA6IGUuc2V0QXR0cmlidXRlKG4sIG4pLCBuIH0gfSwgdy5lYWNoKHcuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLCBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiA9IG50W3RdIHx8IHcuZmluZC5hdHRyOyBudFt0XSA9IGZ1bmN0aW9uIChlLCB0LCByKSB7IHZhciBpLCBvLCBhID0gdC50b0xvd2VyQ2FzZSgpOyByZXR1cm4gciB8fCAobyA9IG50W2FdLCBudFthXSA9IGksIGkgPSBudWxsICE9IG4oZSwgdCwgcikgPyBhIDogbnVsbCwgbnRbYV0gPSBvKSwgaSB9IH0pOyB2YXIgcnQgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLCBpdCA9IC9eKD86YXxhcmVhKSQvaTsgdy5mbi5leHRlbmQoeyBwcm9wOiBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gXyh0aGlzLCB3LnByb3AsIGUsIHQsIGFyZ3VtZW50cy5sZW5ndGggPiAxKSB9LCByZW1vdmVQcm9wOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgZGVsZXRlIHRoaXNbdy5wcm9wRml4W2VdIHx8IGVdIH0pIH0gfSksIHcuZXh0ZW5kKHsgcHJvcDogZnVuY3Rpb24gKGUsIHQsIG4pIHsgdmFyIHIsIGksIG8gPSBlLm5vZGVUeXBlOyBpZiAoMyAhPT0gbyAmJiA4ICE9PSBvICYmIDIgIT09IG8pIHJldHVybiAxID09PSBvICYmIHcuaXNYTUxEb2MoZSkgfHwgKHQgPSB3LnByb3BGaXhbdF0gfHwgdCwgaSA9IHcucHJvcEhvb2tzW3RdKSwgdm9pZCAwICE9PSBuID8gaSAmJiAic2V0IiBpbiBpICYmIHZvaWQgMCAhPT0gKHIgPSBpLnNldChlLCBuLCB0KSkgPyByIDogZVt0XSA9IG4gOiBpICYmICJnZXQiIGluIGkgJiYgbnVsbCAhPT0gKHIgPSBpLmdldChlLCB0KSkgPyByIDogZVt0XSB9LCBwcm9wSG9va3M6IHsgdGFiSW5kZXg6IHsgZ2V0OiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IHcuZmluZC5hdHRyKGUsICJ0YWJpbmRleCIpOyByZXR1cm4gdCA/IHBhcnNlSW50KHQsIDEwKSA6IHJ0LnRlc3QoZS5ub2RlTmFtZSkgfHwgaXQudGVzdChlLm5vZGVOYW1lKSAmJiBlLmhyZWYgPyAwIDogLTEgfSB9IH0sIHByb3BGaXg6IHsgImZvciI6ICJodG1sRm9yIiwgImNsYXNzIjogImNsYXNzTmFtZSIgfSB9KSwgaC5vcHRTZWxlY3RlZCB8fCAody5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7IGdldDogZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSBlLnBhcmVudE5vZGU7IHJldHVybiB0ICYmIHQucGFyZW50Tm9kZSAmJiB0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCwgbnVsbCB9LCBzZXQ6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gZS5wYXJlbnROb2RlOyB0ICYmICh0LnNlbGVjdGVkSW5kZXgsIHQucGFyZW50Tm9kZSAmJiB0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCkgfSB9KSwgdy5lYWNoKFsidGFiSW5kZXgiLCAicmVhZE9ubHkiLCAibWF4TGVuZ3RoIiwgImNlbGxTcGFjaW5nIiwgImNlbGxQYWRkaW5nIiwgInJvd1NwYW4iLCAiY29sU3BhbiIsICJ1c2VNYXAiLCAiZnJhbWVCb3JkZXIiLCAiY29udGVudEVkaXRhYmxlIl0sIGZ1bmN0aW9uICgpIHsgdy5wcm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV0gPSB0aGlzIH0pOyBmdW5jdGlvbiBvdChlKSB7IHJldHVybiAoZS5tYXRjaChJKSB8fCBbXSkuam9pbigiICIpIH0gZnVuY3Rpb24gYXQoZSkgeyByZXR1cm4gZS5nZXRBdHRyaWJ1dGUgJiYgZS5nZXRBdHRyaWJ1dGUoImNsYXNzIikgfHwgIiIgfSBmdW5jdGlvbiB1dChlKSB7IHJldHVybiBBcnJheS5pc0FycmF5KGUpID8gZSA6ICJzdHJpbmciID09IHR5cGVvZiBlID8gZS5tYXRjaChJKSB8fCBbXSA6IFtdIH0gdy5mbi5leHRlbmQoeyBhZGRDbGFzczogZnVuY3Rpb24gKGUpIHsgdmFyIHQsIG4sIHIsIGksIG8sIGEsIHUsIHMgPSAwOyBpZiAoZyhlKSkgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAodCkgeyB3KHRoaXMpLmFkZENsYXNzKGUuY2FsbCh0aGlzLCB0LCBhdCh0aGlzKSkpIH0pOyBpZiAoKHQgPSB1dChlKSkubGVuZ3RoKSB3aGlsZSAobiA9IHRoaXNbcysrXSkgaWYgKGkgPSBhdChuKSwgciA9IDEgPT09IG4ubm9kZVR5cGUgJiYgIiAiICsgb3QoaSkgKyAiICIpIHsgYSA9IDA7IHdoaWxlIChvID0gdFthKytdKSByLmluZGV4T2YoIiAiICsgbyArICIgIikgPCAwICYmIChyICs9IG8gKyAiICIpOyBpICE9PSAodSA9IG90KHIpKSAmJiBuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCB1KSB9IHJldHVybiB0aGlzIH0sIHJlbW92ZUNsYXNzOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCwgbiwgciwgaSwgbywgYSwgdSwgcyA9IDA7IGlmIChnKGUpKSByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICh0KSB7IHcodGhpcykucmVtb3ZlQ2xhc3MoZS5jYWxsKHRoaXMsIHQsIGF0KHRoaXMpKSkgfSk7IGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRoaXMuYXR0cigiY2xhc3MiLCAiIik7IGlmICgodCA9IHV0KGUpKS5sZW5ndGgpIHdoaWxlIChuID0gdGhpc1tzKytdKSBpZiAoaSA9IGF0KG4pLCByID0gMSA9PT0gbi5ub2RlVHlwZSAmJiAiICIgKyBvdChpKSArICIgIikgeyBhID0gMDsgd2hpbGUgKG8gPSB0W2ErK10pIHdoaWxlIChyLmluZGV4T2YoIiAiICsgbyArICIgIikgPiAtMSkgciA9IHIucmVwbGFjZSgiICIgKyBvICsgIiAiLCAiICIpOyBpICE9PSAodSA9IG90KHIpKSAmJiBuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCB1KSB9IHJldHVybiB0aGlzIH0sIHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiA9IHR5cGVvZiBlLCByID0gInN0cmluZyIgPT09IG4gfHwgQXJyYXkuaXNBcnJheShlKTsgcmV0dXJuICJib29sZWFuIiA9PSB0eXBlb2YgdCAmJiByID8gdCA/IHRoaXMuYWRkQ2xhc3MoZSkgOiB0aGlzLnJlbW92ZUNsYXNzKGUpIDogZyhlKSA/IHRoaXMuZWFjaChmdW5jdGlvbiAobikgeyB3KHRoaXMpLnRvZ2dsZUNsYXNzKGUuY2FsbCh0aGlzLCBuLCBhdCh0aGlzKSwgdCksIHQpIH0pIDogdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIHQsIGksIG8sIGE7IGlmIChyKSB7IGkgPSAwLCBvID0gdyh0aGlzKSwgYSA9IHV0KGUpOyB3aGlsZSAodCA9IGFbaSsrXSkgby5oYXNDbGFzcyh0KSA/IG8ucmVtb3ZlQ2xhc3ModCkgOiBvLmFkZENsYXNzKHQpIH0gZWxzZSB2b2lkIDAgIT09IGUgJiYgImJvb2xlYW4iICE9PSBuIHx8ICgodCA9IGF0KHRoaXMpKSAmJiBLLnNldCh0aGlzLCAiX19jbGFzc05hbWVfXyIsIHQpLCB0aGlzLnNldEF0dHJpYnV0ZSAmJiB0aGlzLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCB0IHx8ICExID09PSBlID8gIiIgOiBLLmdldCh0aGlzLCAiX19jbGFzc05hbWVfXyIpIHx8ICIiKSkgfSkgfSwgaGFzQ2xhc3M6IGZ1bmN0aW9uIChlKSB7IHZhciB0LCBuLCByID0gMDsgdCA9ICIgIiArIGUgKyAiICI7IHdoaWxlIChuID0gdGhpc1tyKytdKSBpZiAoMSA9PT0gbi5ub2RlVHlwZSAmJiAoIiAiICsgb3QoYXQobikpICsgIiAiKS5pbmRleE9mKHQpID4gLTEpIHJldHVybiAhMDsgcmV0dXJuICExIH0gfSk7IHZhciBzdCA9IC9cci9nOyB3LmZuLmV4dGVuZCh7IHZhbDogZnVuY3Rpb24gKGUpIHsgdmFyIHQsIG4sIHIsIGkgPSB0aGlzWzBdOyB7IGlmIChhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gciA9IGcoZSksIHRoaXMuZWFjaChmdW5jdGlvbiAobikgeyB2YXIgaTsgMSA9PT0gdGhpcy5ub2RlVHlwZSAmJiAobnVsbCA9PSAoaSA9IHIgPyBlLmNhbGwodGhpcywgbiwgdyh0aGlzKS52YWwoKSkgOiBlKSA/IGkgPSAiIiA6ICJudW1iZXIiID09IHR5cGVvZiBpID8gaSArPSAiIiA6IEFycmF5LmlzQXJyYXkoaSkgJiYgKGkgPSB3Lm1hcChpLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gbnVsbCA9PSBlID8gIiIgOiBlICsgIiIgfSkpLCAodCA9IHcudmFsSG9va3NbdGhpcy50eXBlXSB8fCB3LnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pICYmICJzZXQiIGluIHQgJiYgdm9pZCAwICE9PSB0LnNldCh0aGlzLCBpLCAidmFsdWUiKSB8fCAodGhpcy52YWx1ZSA9IGkpKSB9KTsgaWYgKGkpIHJldHVybiAodCA9IHcudmFsSG9va3NbaS50eXBlXSB8fCB3LnZhbEhvb2tzW2kubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pICYmICJnZXQiIGluIHQgJiYgdm9pZCAwICE9PSAobiA9IHQuZ2V0KGksICJ2YWx1ZSIpKSA/IG4gOiAic3RyaW5nIiA9PSB0eXBlb2YgKG4gPSBpLnZhbHVlKSA/IG4ucmVwbGFjZShzdCwgIiIpIDogbnVsbCA9PSBuID8gIiIgOiBuIH0gfSB9KSwgdy5leHRlbmQoeyB2YWxIb29rczogeyBvcHRpb246IHsgZ2V0OiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IHcuZmluZC5hdHRyKGUsICJ2YWx1ZSIpOyByZXR1cm4gbnVsbCAhPSB0ID8gdCA6IG90KHcudGV4dChlKSkgfSB9LCBzZWxlY3Q6IHsgZ2V0OiBmdW5jdGlvbiAoZSkgeyB2YXIgdCwgbiwgciwgaSA9IGUub3B0aW9ucywgbyA9IGUuc2VsZWN0ZWRJbmRleCwgYSA9ICJzZWxlY3Qtb25lIiA9PT0gZS50eXBlLCB1ID0gYSA/IG51bGwgOiBbXSwgcyA9IGEgPyBvICsgMSA6IGkubGVuZ3RoOyBmb3IgKHIgPSBvIDwgMCA/IHMgOiBhID8gbyA6IDA7IHIgPCBzOyByKyspaWYgKCgobiA9IGlbcl0pLnNlbGVjdGVkIHx8IHIgPT09IG8pICYmICFuLmRpc2FibGVkICYmICghbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8ICFEKG4ucGFyZW50Tm9kZSwgIm9wdGdyb3VwIikpKSB7IGlmICh0ID0gdyhuKS52YWwoKSwgYSkgcmV0dXJuIHQ7IHUucHVzaCh0KSB9IHJldHVybiB1IH0sIHNldDogZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4sIHIsIGkgPSBlLm9wdGlvbnMsIG8gPSB3Lm1ha2VBcnJheSh0KSwgYSA9IGkubGVuZ3RoOyB3aGlsZSAoYS0tKSAoKHIgPSBpW2FdKS5zZWxlY3RlZCA9IHcuaW5BcnJheSh3LnZhbEhvb2tzLm9wdGlvbi5nZXQociksIG8pID4gLTEpICYmIChuID0gITApOyByZXR1cm4gbiB8fCAoZS5zZWxlY3RlZEluZGV4ID0gLTEpLCBvIH0gfSB9IH0pLCB3LmVhY2goWyJyYWRpbyIsICJjaGVja2JveCJdLCBmdW5jdGlvbiAoKSB7IHcudmFsSG9va3NbdGhpc10gPSB7IHNldDogZnVuY3Rpb24gKGUsIHQpIHsgaWYgKEFycmF5LmlzQXJyYXkodCkpIHJldHVybiBlLmNoZWNrZWQgPSB3LmluQXJyYXkodyhlKS52YWwoKSwgdCkgPiAtMSB9IH0sIGguY2hlY2tPbiB8fCAody52YWxIb29rc1t0aGlzXS5nZXQgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gbnVsbCA9PT0gZS5nZXRBdHRyaWJ1dGUoInZhbHVlIikgPyAib24iIDogZS52YWx1ZSB9KSB9KSwgaC5mb2N1c2luID0gIm9uZm9jdXNpbiIgaW4gZTsgdmFyIGx0ID0gL14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLCBjdCA9IGZ1bmN0aW9uIChlKSB7IGUuc3RvcFByb3BhZ2F0aW9uKCkgfTsgdy5leHRlbmQody5ldmVudCwgeyB0cmlnZ2VyOiBmdW5jdGlvbiAodCwgbiwgaSwgbykgeyB2YXIgYSwgdSwgcywgbCwgYywgZCwgcCwgaCwgeSA9IFtpIHx8IHJdLCBtID0gZi5jYWxsKHQsICJ0eXBlIikgPyB0LnR5cGUgOiB0LCBiID0gZi5jYWxsKHQsICJuYW1lc3BhY2UiKSA/IHQubmFtZXNwYWNlLnNwbGl0KCIuIikgOiBbXTsgaWYgKHUgPSBoID0gcyA9IGkgPSBpIHx8IHIsIDMgIT09IGkubm9kZVR5cGUgJiYgOCAhPT0gaS5ub2RlVHlwZSAmJiAhbHQudGVzdChtICsgdy5ldmVudC50cmlnZ2VyZWQpICYmIChtLmluZGV4T2YoIi4iKSA+IC0xICYmIChtID0gKGIgPSBtLnNwbGl0KCIuIikpLnNoaWZ0KCksIGIuc29ydCgpKSwgYyA9IG0uaW5kZXhPZigiOiIpIDwgMCAmJiAib24iICsgbSwgdCA9IHRbdy5leHBhbmRvXSA/IHQgOiBuZXcgdy5FdmVudChtLCAib2JqZWN0IiA9PSB0eXBlb2YgdCAmJiB0KSwgdC5pc1RyaWdnZXIgPSBvID8gMiA6IDMsIHQubmFtZXNwYWNlID0gYi5qb2luKCIuIiksIHQucm5hbWVzcGFjZSA9IHQubmFtZXNwYWNlID8gbmV3IFJlZ0V4cCgiKF58XFwuKSIgKyBiLmpvaW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwufCQpIikgOiBudWxsLCB0LnJlc3VsdCA9IHZvaWQgMCwgdC50YXJnZXQgfHwgKHQudGFyZ2V0ID0gaSksIG4gPSBudWxsID09IG4gPyBbdF0gOiB3Lm1ha2VBcnJheShuLCBbdF0pLCBwID0gdy5ldmVudC5zcGVjaWFsW21dIHx8IHt9LCBvIHx8ICFwLnRyaWdnZXIgfHwgITEgIT09IHAudHJpZ2dlci5hcHBseShpLCBuKSkpIHsgaWYgKCFvICYmICFwLm5vQnViYmxlICYmICF2KGkpKSB7IGZvciAobCA9IHAuZGVsZWdhdGVUeXBlIHx8IG0sIGx0LnRlc3QobCArIG0pIHx8ICh1ID0gdS5wYXJlbnROb2RlKTsgdTsgdSA9IHUucGFyZW50Tm9kZSl5LnB1c2godSksIHMgPSB1OyBzID09PSAoaS5vd25lckRvY3VtZW50IHx8IHIpICYmIHkucHVzaChzLmRlZmF1bHRWaWV3IHx8IHMucGFyZW50V2luZG93IHx8IGUpIH0gYSA9IDA7IHdoaWxlICgodSA9IHlbYSsrXSkgJiYgIXQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkgaCA9IHUsIHQudHlwZSA9IGEgPiAxID8gbCA6IHAuYmluZFR5cGUgfHwgbSwgKGQgPSAoSy5nZXQodSwgImV2ZW50cyIpIHx8IHt9KVt0LnR5cGVdICYmIEsuZ2V0KHUsICJoYW5kbGUiKSkgJiYgZC5hcHBseSh1LCBuKSwgKGQgPSBjICYmIHVbY10pICYmIGQuYXBwbHkgJiYgWSh1KSAmJiAodC5yZXN1bHQgPSBkLmFwcGx5KHUsIG4pLCAhMSA9PT0gdC5yZXN1bHQgJiYgdC5wcmV2ZW50RGVmYXVsdCgpKTsgcmV0dXJuIHQudHlwZSA9IG0sIG8gfHwgdC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSB8fCBwLl9kZWZhdWx0ICYmICExICE9PSBwLl9kZWZhdWx0LmFwcGx5KHkucG9wKCksIG4pIHx8ICFZKGkpIHx8IGMgJiYgZyhpW21dKSAmJiAhdihpKSAmJiAoKHMgPSBpW2NdKSAmJiAoaVtjXSA9IG51bGwpLCB3LmV2ZW50LnRyaWdnZXJlZCA9IG0sIHQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSAmJiBoLmFkZEV2ZW50TGlzdGVuZXIobSwgY3QpLCBpW21dKCksIHQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSAmJiBoLnJlbW92ZUV2ZW50TGlzdGVuZXIobSwgY3QpLCB3LmV2ZW50LnRyaWdnZXJlZCA9IHZvaWQgMCwgcyAmJiAoaVtjXSA9IHMpKSwgdC5yZXN1bHQgfSB9LCBzaW11bGF0ZTogZnVuY3Rpb24gKGUsIHQsIG4pIHsgdmFyIHIgPSB3LmV4dGVuZChuZXcgdy5FdmVudCwgbiwgeyB0eXBlOiBlLCBpc1NpbXVsYXRlZDogITAgfSk7IHcuZXZlbnQudHJpZ2dlcihyLCBudWxsLCB0KSB9IH0pLCB3LmZuLmV4dGVuZCh7IHRyaWdnZXI6IGZ1bmN0aW9uIChlLCB0KSB7IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyB3LmV2ZW50LnRyaWdnZXIoZSwgdCwgdGhpcykgfSkgfSwgdHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBuID0gdGhpc1swXTsgaWYgKG4pIHJldHVybiB3LmV2ZW50LnRyaWdnZXIoZSwgdCwgbiwgITApIH0gfSksIGguZm9jdXNpbiB8fCB3LmVhY2goeyBmb2N1czogImZvY3VzaW4iLCBibHVyOiAiZm9jdXNvdXQiIH0sIGZ1bmN0aW9uIChlLCB0KSB7IHZhciBuID0gZnVuY3Rpb24gKGUpIHsgdy5ldmVudC5zaW11bGF0ZSh0LCBlLnRhcmdldCwgdy5ldmVudC5maXgoZSkpIH07IHcuZXZlbnQuc3BlY2lhbFt0XSA9IHsgc2V0dXA6IGZ1bmN0aW9uICgpIHsgdmFyIHIgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcywgaSA9IEsuYWNjZXNzKHIsIHQpOyBpIHx8IHIuYWRkRXZlbnRMaXN0ZW5lcihlLCBuLCAhMCksIEsuYWNjZXNzKHIsIHQsIChpIHx8IDApICsgMSkgfSwgdGVhcmRvd246IGZ1bmN0aW9uICgpIHsgdmFyIHIgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcywgaSA9IEsuYWNjZXNzKHIsIHQpIC0gMTsgaSA/IEsuYWNjZXNzKHIsIHQsIGkpIDogKHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLCBuLCAhMCksIEsucmVtb3ZlKHIsIHQpKSB9IH0gfSk7IHZhciBmdCA9IC9cW1xdJC8sIGR0ID0gL1xyP1xuL2csIHB0ID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLCBodCA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTsgZnVuY3Rpb24gZ3QoZSwgdCwgbiwgcikgeyB2YXIgaTsgaWYgKEFycmF5LmlzQXJyYXkodCkpIHcuZWFjaCh0LCBmdW5jdGlvbiAodCwgaSkgeyBuIHx8IGZ0LnRlc3QoZSkgPyByKGUsIGkpIDogZ3QoZSArICJbIiArICgib2JqZWN0IiA9PSB0eXBlb2YgaSAmJiBudWxsICE9IGkgPyB0IDogIiIpICsgIl0iLCBpLCBuLCByKSB9KTsgZWxzZSBpZiAobiB8fCAib2JqZWN0IiAhPT0gYih0KSkgcihlLCB0KTsgZWxzZSBmb3IgKGkgaW4gdCkgZ3QoZSArICJbIiArIGkgKyAiXSIsIHRbaV0sIG4sIHIpIH0gdy5wYXJhbSA9IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBuLCByID0gW10sIGkgPSBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiA9IGcodCkgPyB0KCkgOiB0OyByW3IubGVuZ3RoXSA9IGVuY29kZVVSSUNvbXBvbmVudChlKSArICI9IiArIGVuY29kZVVSSUNvbXBvbmVudChudWxsID09IG4gPyAiIiA6IG4pIH07IGlmIChBcnJheS5pc0FycmF5KGUpIHx8IGUuanF1ZXJ5ICYmICF3LmlzUGxhaW5PYmplY3QoZSkpIHcuZWFjaChlLCBmdW5jdGlvbiAoKSB7IGkodGhpcy5uYW1lLCB0aGlzLnZhbHVlKSB9KTsgZWxzZSBmb3IgKG4gaW4gZSkgZ3QobiwgZVtuXSwgdCwgaSk7IHJldHVybiByLmpvaW4oIiYiKSB9LCB3LmZuLmV4dGVuZCh7IHNlcmlhbGl6ZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gdy5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpIH0sIHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoKSB7IHZhciBlID0gdy5wcm9wKHRoaXMsICJlbGVtZW50cyIpOyByZXR1cm4gZSA/IHcubWFrZUFycmF5KGUpIDogdGhpcyB9KS5maWx0ZXIoZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHRoaXMudHlwZTsgcmV0dXJuIHRoaXMubmFtZSAmJiAhdyh0aGlzKS5pcygiOmRpc2FibGVkIikgJiYgaHQudGVzdCh0aGlzLm5vZGVOYW1lKSAmJiAhcHQudGVzdChlKSAmJiAodGhpcy5jaGVja2VkIHx8ICFkZS50ZXN0KGUpKSB9KS5tYXAoZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4gPSB3KHRoaXMpLnZhbCgpOyByZXR1cm4gbnVsbCA9PSBuID8gbnVsbCA6IEFycmF5LmlzQXJyYXkobikgPyB3Lm1hcChuLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4geyBuYW1lOiB0Lm5hbWUsIHZhbHVlOiBlLnJlcGxhY2UoZHQsICJcclxuIikgfSB9KSA6IHsgbmFtZTogdC5uYW1lLCB2YWx1ZTogbi5yZXBsYWNlKGR0LCAiXHJcbiIpIH0gfSkuZ2V0KCkgfSB9KSwgdy5mbi5leHRlbmQoeyB3cmFwQWxsOiBmdW5jdGlvbiAoZSkgeyB2YXIgdDsgcmV0dXJuIHRoaXNbMF0gJiYgKGcoZSkgJiYgKGUgPSBlLmNhbGwodGhpc1swXSkpLCB0ID0gdyhlLCB0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSwgdGhpc1swXS5wYXJlbnROb2RlICYmIHQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLCB0Lm1hcChmdW5jdGlvbiAoKSB7IHZhciBlID0gdGhpczsgd2hpbGUgKGUuZmlyc3RFbGVtZW50Q2hpbGQpIGUgPSBlLmZpcnN0RWxlbWVudENoaWxkOyByZXR1cm4gZSB9KS5hcHBlbmQodGhpcykpLCB0aGlzIH0sIHdyYXBJbm5lcjogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGcoZSkgPyB0aGlzLmVhY2goZnVuY3Rpb24gKHQpIHsgdyh0aGlzKS53cmFwSW5uZXIoZS5jYWxsKHRoaXMsIHQpKSB9KSA6IHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IHZhciB0ID0gdyh0aGlzKSwgbiA9IHQuY29udGVudHMoKTsgbi5sZW5ndGggPyBuLndyYXBBbGwoZSkgOiB0LmFwcGVuZChlKSB9KSB9LCB3cmFwOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IGcoZSk7IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKG4pIHsgdyh0aGlzKS53cmFwQWxsKHQgPyBlLmNhbGwodGhpcywgbikgOiBlKSB9KSB9LCB1bndyYXA6IGZ1bmN0aW9uIChlKSB7IHJldHVybiB0aGlzLnBhcmVudChlKS5ub3QoImJvZHkiKS5lYWNoKGZ1bmN0aW9uICgpIHsgdyh0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpIH0pLCB0aGlzIH0gfSksIHcuZXhwci5wc2V1ZG9zLmhpZGRlbiA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiAhdy5leHByLnBzZXVkb3MudmlzaWJsZShlKSB9LCB3LmV4cHIucHNldWRvcy52aXNpYmxlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuICEhKGUub2Zmc2V0V2lkdGggfHwgZS5vZmZzZXRIZWlnaHQgfHwgZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCkgfSwgaC5jcmVhdGVIVE1MRG9jdW1lbnQgPSBmdW5jdGlvbiAoKSB7IHZhciBlID0gci5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpLmJvZHk7IHJldHVybiBlLmlubmVySFRNTCA9ICI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3JtPiIsIDIgPT09IGUuY2hpbGROb2Rlcy5sZW5ndGggfSgpLCB3LnBhcnNlSFRNTCA9IGZ1bmN0aW9uIChlLCB0LCBuKSB7IGlmICgic3RyaW5nIiAhPSB0eXBlb2YgZSkgcmV0dXJuIFtdOyAiYm9vbGVhbiIgPT0gdHlwZW9mIHQgJiYgKG4gPSB0LCB0ID0gITEpOyB2YXIgaSwgbywgYTsgcmV0dXJuIHQgfHwgKGguY3JlYXRlSFRNTERvY3VtZW50ID8gKChpID0gKHQgPSByLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikpLmNyZWF0ZUVsZW1lbnQoImJhc2UiKSkuaHJlZiA9IHIubG9jYXRpb24uaHJlZiwgdC5oZWFkLmFwcGVuZENoaWxkKGkpKSA6IHQgPSByKSwgbyA9IFMuZXhlYyhlKSwgYSA9ICFuICYmIFtdLCBvID8gW3QuY3JlYXRlRWxlbWVudChvWzFdKV0gOiAobyA9IGJlKFtlXSwgdCwgYSksIGEgJiYgYS5sZW5ndGggJiYgdyhhKS5yZW1vdmUoKSwgdy5tZXJnZShbXSwgby5jaGlsZE5vZGVzKSkgfSwgdy5vZmZzZXQgPSB7IHNldE9mZnNldDogZnVuY3Rpb24gKGUsIHQsIG4pIHsgdmFyIHIsIGksIG8sIGEsIHUsIHMsIGwsIGMgPSB3LmNzcyhlLCAicG9zaXRpb24iKSwgZiA9IHcoZSksIGQgPSB7fTsgInN0YXRpYyIgPT09IGMgJiYgKGUuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiKSwgdSA9IGYub2Zmc2V0KCksIG8gPSB3LmNzcyhlLCAidG9wIiksIHMgPSB3LmNzcyhlLCAibGVmdCIpLCAobCA9ICgiYWJzb2x1dGUiID09PSBjIHx8ICJmaXhlZCIgPT09IGMpICYmIChvICsgcykuaW5kZXhPZigiYXV0byIpID4gLTEpID8gKGEgPSAociA9IGYucG9zaXRpb24oKSkudG9wLCBpID0gci5sZWZ0KSA6IChhID0gcGFyc2VGbG9hdChvKSB8fCAwLCBpID0gcGFyc2VGbG9hdChzKSB8fCAwKSwgZyh0KSAmJiAodCA9IHQuY2FsbChlLCBuLCB3LmV4dGVuZCh7fSwgdSkpKSwgbnVsbCAhPSB0LnRvcCAmJiAoZC50b3AgPSB0LnRvcCAtIHUudG9wICsgYSksIG51bGwgIT0gdC5sZWZ0ICYmIChkLmxlZnQgPSB0LmxlZnQgLSB1LmxlZnQgKyBpKSwgInVzaW5nIiBpbiB0ID8gdC51c2luZy5jYWxsKGUsIGQpIDogZi5jc3MoZCkgfSB9LCB3LmZuLmV4dGVuZCh7IG9mZnNldDogZnVuY3Rpb24gKGUpIHsgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB2b2lkIDAgPT09IGUgPyB0aGlzIDogdGhpcy5lYWNoKGZ1bmN0aW9uICh0KSB7IHcub2Zmc2V0LnNldE9mZnNldCh0aGlzLCBlLCB0KSB9KTsgdmFyIHQsIG4sIHIgPSB0aGlzWzBdOyBpZiAocikgcmV0dXJuIHIuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggPyAodCA9IHIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIG4gPSByLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcsIHsgdG9wOiB0LnRvcCArIG4ucGFnZVlPZmZzZXQsIGxlZnQ6IHQubGVmdCArIG4ucGFnZVhPZmZzZXQgfSkgOiB7IHRvcDogMCwgbGVmdDogMCB9IH0sIHBvc2l0aW9uOiBmdW5jdGlvbiAoKSB7IGlmICh0aGlzWzBdKSB7IHZhciBlLCB0LCBuLCByID0gdGhpc1swXSwgaSA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07IGlmICgiZml4ZWQiID09PSB3LmNzcyhyLCAicG9zaXRpb24iKSkgdCA9IHIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IGVsc2UgeyB0ID0gdGhpcy5vZmZzZXQoKSwgbiA9IHIub3duZXJEb2N1bWVudCwgZSA9IHIub2Zmc2V0UGFyZW50IHx8IG4uZG9jdW1lbnRFbGVtZW50OyB3aGlsZSAoZSAmJiAoZSA9PT0gbi5ib2R5IHx8IGUgPT09IG4uZG9jdW1lbnRFbGVtZW50KSAmJiAic3RhdGljIiA9PT0gdy5jc3MoZSwgInBvc2l0aW9uIikpIGUgPSBlLnBhcmVudE5vZGU7IGUgJiYgZSAhPT0gciAmJiAxID09PSBlLm5vZGVUeXBlICYmICgoaSA9IHcoZSkub2Zmc2V0KCkpLnRvcCArPSB3LmNzcyhlLCAiYm9yZGVyVG9wV2lkdGgiLCAhMCksIGkubGVmdCArPSB3LmNzcyhlLCAiYm9yZGVyTGVmdFdpZHRoIiwgITApKSB9IHJldHVybiB7IHRvcDogdC50b3AgLSBpLnRvcCAtIHcuY3NzKHIsICJtYXJnaW5Ub3AiLCAhMCksIGxlZnQ6IHQubGVmdCAtIGkubGVmdCAtIHcuY3NzKHIsICJtYXJnaW5MZWZ0IiwgITApIH0gfSB9LCBvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0aGlzLm9mZnNldFBhcmVudDsgd2hpbGUgKGUgJiYgInN0YXRpYyIgPT09IHcuY3NzKGUsICJwb3NpdGlvbiIpKSBlID0gZS5vZmZzZXRQYXJlbnQ7IHJldHVybiBlIHx8IHhlIH0pIH0gfSksIHcuZWFjaCh7IHNjcm9sbExlZnQ6ICJwYWdlWE9mZnNldCIsIHNjcm9sbFRvcDogInBhZ2VZT2Zmc2V0IiB9LCBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiA9ICJwYWdlWU9mZnNldCIgPT09IHQ7IHcuZm5bZV0gPSBmdW5jdGlvbiAocikgeyByZXR1cm4gXyh0aGlzLCBmdW5jdGlvbiAoZSwgciwgaSkgeyB2YXIgbzsgaWYgKHYoZSkgPyBvID0gZSA6IDkgPT09IGUubm9kZVR5cGUgJiYgKG8gPSBlLmRlZmF1bHRWaWV3KSwgdm9pZCAwID09PSBpKSByZXR1cm4gbyA/IG9bdF0gOiBlW3JdOyBvID8gby5zY3JvbGxUbyhuID8gby5wYWdlWE9mZnNldCA6IGksIG4gPyBpIDogby5wYWdlWU9mZnNldCkgOiBlW3JdID0gaSB9LCBlLCByLCBhcmd1bWVudHMubGVuZ3RoKSB9IH0pLCB3LmVhY2goWyJ0b3AiLCAibGVmdCJdLCBmdW5jdGlvbiAoZSwgdCkgeyB3LmNzc0hvb2tzW3RdID0gemUoaC5waXhlbFBvc2l0aW9uLCBmdW5jdGlvbiAoZSwgbikgeyBpZiAobikgcmV0dXJuIG4gPSBGZShlLCB0KSwgTWUudGVzdChuKSA/IHcoZSkucG9zaXRpb24oKVt0XSArICJweCIgOiBuIH0pIH0pLCB3LmVhY2goeyBIZWlnaHQ6ICJoZWlnaHQiLCBXaWR0aDogIndpZHRoIiB9LCBmdW5jdGlvbiAoZSwgdCkgeyB3LmVhY2goeyBwYWRkaW5nOiAiaW5uZXIiICsgZSwgY29udGVudDogdCwgIiI6ICJvdXRlciIgKyBlIH0sIGZ1bmN0aW9uIChuLCByKSB7IHcuZm5bcl0gPSBmdW5jdGlvbiAoaSwgbykgeyB2YXIgYSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKG4gfHwgImJvb2xlYW4iICE9IHR5cGVvZiBpKSwgdSA9IG4gfHwgKCEwID09PSBpIHx8ICEwID09PSBvID8gIm1hcmdpbiIgOiAiYm9yZGVyIik7IHJldHVybiBfKHRoaXMsIGZ1bmN0aW9uICh0LCBuLCBpKSB7IHZhciBvOyByZXR1cm4gdih0KSA/IDAgPT09IHIuaW5kZXhPZigib3V0ZXIiKSA/IHRbImlubmVyIiArIGVdIDogdC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIgKyBlXSA6IDkgPT09IHQubm9kZVR5cGUgPyAobyA9IHQuZG9jdW1lbnRFbGVtZW50LCBNYXRoLm1heCh0LmJvZHlbInNjcm9sbCIgKyBlXSwgb1sic2Nyb2xsIiArIGVdLCB0LmJvZHlbIm9mZnNldCIgKyBlXSwgb1sib2Zmc2V0IiArIGVdLCBvWyJjbGllbnQiICsgZV0pKSA6IHZvaWQgMCA9PT0gaSA/IHcuY3NzKHQsIG4sIHUpIDogdy5zdHlsZSh0LCBuLCBpLCB1KSB9LCB0LCBhID8gaSA6IHZvaWQgMCwgYSkgfSB9KSB9KSwgdy5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLCBmdW5jdGlvbiAoZSwgdCkgeyB3LmZuW3RdID0gZnVuY3Rpb24gKGUsIG4pIHsgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gdGhpcy5vbih0LCBudWxsLCBlLCBuKSA6IHRoaXMudHJpZ2dlcih0KSB9IH0pLCB3LmZuLmV4dGVuZCh7IGhvdmVyOiBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gdGhpcy5tb3VzZWVudGVyKGUpLm1vdXNlbGVhdmUodCB8fCBlKSB9IH0pLCB3LmZuLmV4dGVuZCh7IGJpbmQ6IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiB0aGlzLm9uKGUsIG51bGwsIHQsIG4pIH0sIHVuYmluZDogZnVuY3Rpb24gKGUsIHQpIHsgcmV0dXJuIHRoaXMub2ZmKGUsIG51bGwsIHQpIH0sIGRlbGVnYXRlOiBmdW5jdGlvbiAoZSwgdCwgbiwgcikgeyByZXR1cm4gdGhpcy5vbih0LCBlLCBuLCByKSB9LCB1bmRlbGVnYXRlOiBmdW5jdGlvbiAoZSwgdCwgbikgeyByZXR1cm4gMSA9PT0gYXJndW1lbnRzLmxlbmd0aCA/IHRoaXMub2ZmKGUsICIqKiIpIDogdGhpcy5vZmYodCwgZSB8fCAiKioiLCBuKSB9IH0pLCB3LnByb3h5ID0gZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4sIHIsIGk7IGlmICgic3RyaW5nIiA9PSB0eXBlb2YgdCAmJiAobiA9IGVbdF0sIHQgPSBlLCBlID0gbiksIGcoZSkpIHJldHVybiByID0gby5jYWxsKGFyZ3VtZW50cywgMiksIGkgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBlLmFwcGx5KHQgfHwgdGhpcywgci5jb25jYXQoby5jYWxsKGFyZ3VtZW50cykpKSB9LCBpLmd1aWQgPSBlLmd1aWQgPSBlLmd1aWQgfHwgdy5ndWlkKysgLCBpIH0sIHcuaG9sZFJlYWR5ID0gZnVuY3Rpb24gKGUpIHsgZSA/IHcucmVhZHlXYWl0KysgOiB3LnJlYWR5KCEwKSB9LCB3LmlzQXJyYXkgPSBBcnJheS5pc0FycmF5LCB3LnBhcnNlSlNPTiA9IEpTT04ucGFyc2UsIHcubm9kZU5hbWUgPSBELCB3LmlzRnVuY3Rpb24gPSBnLCB3LmlzV2luZG93ID0gdiwgdy5jYW1lbENhc2UgPSBRLCB3LnR5cGUgPSBiLCB3Lm5vdyA9IERhdGUubm93LCB3LmlzTnVtZXJpYyA9IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gdy50eXBlKGUpOyByZXR1cm4gKCJudW1iZXIiID09PSB0IHx8ICJzdHJpbmciID09PSB0KSAmJiAhaXNOYU4oZSAtIHBhcnNlRmxvYXQoZSkpIH0sICJmdW5jdGlvbiIgPT0gdHlwZW9mIGRlZmluZSAmJiBkZWZpbmUuYW1kICYmIGRlZmluZSgianF1ZXJ5IiwgW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHcgfSk7IHZhciB2dCA9IGUualF1ZXJ5LCB5dCA9IGUuJDsgcmV0dXJuIHcubm9Db25mbGljdCA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiBlLiQgPT09IHcgJiYgKGUuJCA9IHl0KSwgdCAmJiBlLmpRdWVyeSA9PT0gdyAmJiAoZS5qUXVlcnkgPSB2dCksIHcgfSwgdCB8fCAoZS5qUXVlcnkgPSBlLiQgPSB3KSwgdyB9KTs=\"")
packr.PackJSONBytes("./assets/default", "wails.js", "\"Ly8gV2FpbHMgcnVudGltZSBKUwoKKGZ1bmN0aW9uICgpIHsKCXdpbmRvdy53YWlscyA9IHdpbmRvdy53YWlscyB8fCB7fTsKCXdpbmRvdy5iYWNrZW5kID0ge307CgoJLyoqKioqKioqKioqKioqKioqKiBVdGlsaXR5IEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKiovCgoJLy8gLS0tLS0tLS0tLS0tLS0gUmFuZG9tIC0tLS0tLS0tLS0tLS0tCgkvLyBBd2Vzb21lUmFuZG9tCglmdW5jdGlvbiBjcnlwdG9SYW5kb20oKSB7CgkJdmFyIGFycmF5ID0gbmV3IFVpbnQzMkFycmF5KDEpOwoJCXJldHVybiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSlbMF07Cgl9CgoJLy8gTE9MUmFuZG9tCglmdW5jdGlvbiBiYXNpY1JhbmRvbSgpIHsKCQlyZXR1cm4gTWF0aC5yYW5kb20oKSAqIDkwMDcxOTkyNTQ3NDA5OTE7Cgl9CgoJLy8gUGljayBvbmUgYmFzZWQgb24gYnJvd3NlciBjYXBhYmlsaXR5Cgl2YXIgcmFuZG9tRnVuYzsKCWlmICh3aW5kb3cuY3J5cHRvKSB7CgkJcmFuZG9tRnVuYyA9IGNyeXB0b1JhbmRvbTsKCX0gZWxzZSB7CgkJcmFuZG9tRnVuYyA9IGJhc2ljUmFuZG9tOwoJfQoKCS8vIC0tLS0tLS0tLS0tLS0tIElkZW50aWZpZXJzIC0tLS0tLS0tLS0tLS0tLQoKCWZ1bmN0aW9uIGlzVmFsaWRJZGVudGlmaWVyKG5hbWUpIHsKCQkvLyBEb24ndCB4c3MgeW91cnNlbGYgOi0pCgkJdHJ5IHsKCQkJbmV3IEZ1bmN0aW9uKCJ2YXIgIiArIG5hbWUpOwoJCQlyZXR1cm4gdHJ1ZQoJCX0gY2F0Y2ggKGUpIHsKCQkJcmV0dXJuIGZhbHNlCgkJfQoJfQoKCS8vIC0tLS0tLS0tLS0tLS0tIEpTIC0tLS0tLS0tLS0tLS0tLS0KCWZ1bmN0aW9uIGFkZFNjcmlwdChqcywgY2FsbGJhY2tJRCkgewoJCXZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKCQlzY3JpcHQudGV4dCA9IGpzOwoJCWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKCQl3aW5kb3cud2FpbHMuZXZlbnRzLmVtaXQoY2FsbGJhY2tJRCk7Cgl9CgoJLy8gLS0tLS0tLS0tLS0tLS0gQ1NTIC0tLS0tLS0tLS0tLS0tLQoJLy8gQWRhcHRlZCBmcm9tIHdlYnZpZXcgLSB0aGFua3MgenNlcmdlIQoJZnVuY3Rpb24gaW5qZWN0Q1NTKGNzcykgewoJCXZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKCQllbGVtLnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2NzcycpOwoJCWlmIChlbGVtLnN0eWxlU2hlZXQpIHsKCQkJZWxlbS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7CgkJfSBlbHNlIHsKCQkJZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTsKCQl9CgkJdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07CgkJaGVhZC5hcHBlbmRDaGlsZChlbGVtKQoJfQoKCS8qKioqKioqKioqKioqKioqKioqKioqKioqIEJpbmRpbmdzICoqKioqKioqKioqKioqKioqKioqKioqKiovCgoJdmFyIGJpbmRpbmdzQmFzZVBhdGggPSB3aW5kb3cuYmFja2VuZDsKCgkvLyBDcmVhdGVzIHRoZSBwYXRoIGdpdmVuIGluIHRoZSBiaW5kaW5ncyBwYXRoCglmdW5jdGlvbiBhZGRCaW5kaW5nUGF0aChwYXRoU2VjdGlvbnMpIHsKCQkvLyBTdGFydCBhdCB0aGUgYmFzZSBwYXRoCgkJdmFyIGN1cnJlbnRQYXRoID0gYmluZGluZ3NCYXNlUGF0aAoJCS8vIGZvciBlYWNoIHNlY3Rpb24gb2YgdGhlIGdpdmVuIHBhdGgKCQlmb3IgKHZhciBzZWN0aW9uIG9mIHBhdGhTZWN0aW9ucykgewoKCQkJLy8gSXMgc2VjdGlvbiBhIHZhbGlkIGphdmFzY3JpcHQgaWRlbnRpZmllcj8KCQkJaWYgKCFpc1ZhbGlkSWRlbnRpZmllcihzZWN0aW9uKSkgewoJCQkJdmFyIGVyck1lc3NhZ2UgPSBzZWN0aW9uICsgIiBpcyBub3QgYSB2YWxpZCBqYXZhc2NyaXB0IGlkZW50aWZpZXIuIgoJCQkJdmFyIGVyciA9IG5ldyBFcnJvcihlcnJNZXNzYWdlKQoJCQkJcmV0dXJuIFtudWxsLCBlcnJdCgkJCX0KCgkJCS8vIEFkZCBpZiBkb2Vzbid0IGV4aXN0CgkJCWlmICghY3VycmVudFBhdGhbc2VjdGlvbl0pIHsKCQkJCWN1cnJlbnRQYXRoW3NlY3Rpb25dID0ge30KCQkJfQoJCQkvLyB1cGRhdGUgY3VycmVudCBwYXRoIHRvIG5ldyBwYXRoCgkJCWN1cnJlbnRQYXRoID0gY3VycmVudFBhdGhbc2VjdGlvbl0KCQl9CgkJcmV0dXJuIFtjdXJyZW50UGF0aCwgbnVsbF0KCX0KCglmdW5jdGlvbiBuZXdCaW5kaW5nKGJpbmRpbmdOYW1lKSB7CgoJCS8vIEdldCBhbGwgdGhlIHNlY3Rpb25zIG9mIHRoZSBiaW5kaW5nCgkJdmFyIGJpbmRpbmdTZWN0aW9ucyA9IGJpbmRpbmdOYW1lLnNwbGl0KCcuJykuc3BsaWNlKDEpOwoKCQkvLyBHZXQgdGhlIGFjdHVhbCBmdW5jdGlvbi9tZXRob2QgY2FsbCBuYW1lCgkJdmFyIGNhbGxOYW1lID0gYmluZGluZ1NlY3Rpb25zLnBvcCgpOwoKCQlsZXQgcGF0aFRvQmluZGluZzsKCQlsZXQgZXJyOwoKCQkvLyBBZGQgcGF0aCB0byBiaW5kaW5nCgkJW3BhdGhUb0JpbmRpbmcsIGVycl0gPSBhZGRCaW5kaW5nUGF0aChiaW5kaW5nU2VjdGlvbnMpCgoJCWlmIChlcnIgIT0gbnVsbCkgewoJCQkvLyBXZSBuZWVkIHRvIHJldHVybiBhbiBlcnJvcgoJCQlyZXR1cm4gZXJyCgkJfQoKCQkvLyBBZGQgYmluZGluZyBjYWxsCgkJcGF0aFRvQmluZGluZ1tjYWxsTmFtZV0gPSBmdW5jdGlvbiAoKSB7CgoJCQkvLyBObyB0aW1lb3V0IGJ5IGRlZmF1bHQKCQkJdmFyIHRpbWVvdXQgPSAwOwoKCQkJLy8gQWN0dWFsIGZ1bmN0aW9uCgkJCWZ1bmN0aW9uIGR5bmFtaWMoKSB7CgkJCQl2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKQoJCQkJcmV0dXJuIGNhbGwoYmluZGluZ05hbWUsIGFyZ3MsIHRpbWVvdXQpOwoJCQl9CgoJCQkvLyBBbGxvdyBzZXR0aW5nIHRpbWVvdXQgdG8gZnVuY3Rpb24KCQkJZHluYW1pYy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gKG5ld1RpbWVvdXQpIHsKCQkJCXRpbWVvdXQgPSBuZXdUaW1lb3V0OwoJCQl9CgoJCQkvLyBBbGxvdyBnZXR0aW5nIHRpbWVvdXQgdG8gZnVuY3Rpb24KCQkJZHluYW1pYy5nZXRUaW1lb3V0ID0gZnVuY3Rpb24gKCkgewoJCQkJcmV0dXJuIHRpbWVvdXQ7CgkJCX0KCgkJCXJldHVybiBkeW5hbWljOwoJCX0oKTsKCX0KCgkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiogQ2FsbHMgKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoJdmFyIGNhbGxiYWNrcyA9IHt9OwoKCS8vIENhbGwgc2VuZHMgYSBtZXNzYWdlIHRvIHRoZSBiYWNrZW5kIHRvIGNhbGwgdGhlIGJpbmRpbmcgd2l0aCB0aGUKCS8vIGdpdmVuIGRhdGEuIEEgcHJvbWlzZSBpcyByZXR1cm5lZCBhbmQgd2lsbCBiZSBjb21wbGV0ZWQgd2hlbiB0aGUKCS8vIGJhY2tlbmQgcmVzcG9uZHMuIFRoaXMgd2lsbCBiZSByZXNvbHZlZCB3aGVuIHRoZSBjYWxsIHdhcyBzdWNjZXNzZnVsCgkvLyBvciByZWplY3RlZCBpZiBhbiBlcnJvciBpcyBwYXNzZWQgYmFjay4KCS8vIFRoZXJlIGlzIGEgdGltZW91dCBtZWNoYW5pc20uIElmIHRoZSBjYWxsIGRvZXNuJ3QgcmVzcG9uZCBpbiB0aGUgZ2l2ZW4KCS8vIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdGhlbiB0aGUgcHJvbWlzZSBpcyByZWplY3RlZC4KCglmdW5jdGlvbiBjYWxsKGJpbmRpbmdOYW1lLCBkYXRhLCB0aW1lb3V0KSB7CgoJCS8vIFRpbWVvdXQgaW5maW5pdGUgYnkgZGVmYXVsdAoJCWlmICh0aW1lb3V0ID09IG51bGwgfHwgdGltZW91dCA9PSB1bmRlZmluZWQpIHsKCQkJdGltZW91dCA9IDA7CgkJfQoKCQkvLyBDcmVhdGUgYSBwcm9taXNlCgkJcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKCgkJCS8vIENyZWF0ZSBhIHVuaXF1ZSBjYWxsYmFja0lECgkJCXZhciBjYWxsYmFja0lEOwoJCQlkbyB7CgkJCQljYWxsYmFja0lEID0gYmluZGluZ05hbWUgKyAiLSIgKyByYW5kb21GdW5jKCk7CgkJCX0gd2hpbGUgKGNhbGxiYWNrc1tjYWxsYmFja0lEXSkKCgkJCS8vIFNldCB0aW1lb3V0CgkJCWlmICh0aW1lb3V0ID4gMCkgewoJCQkJdmFyIHRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKCQkJCQlyZWplY3QoRXJyb3IoIkNhbGwgdG8gIiArIGJpbmRpbmdOYW1lICsgIiB0aW1lZCBvdXQuIFJlcXVlc3QgSUQ6ICIgKyBjYWxsYmFja0lEKSkKCQkJCX0sIHRpbWVvdXQpOwoJCQl9CgoJCQkvLyBTdG9yZSBjYWxsYmFjawoJCQljYWxsYmFja3NbY2FsbGJhY2tJRF0gPSB7CgkJCQl0aW1lb3V0SGFuZGxlOiB0aW1lb3V0SGFuZGxlLAoJCQkJcmVqZWN0OiByZWplY3QsCgkJCQlyZXNvbHZlOiByZXNvbHZlCgkJCX0KCQkJdHJ5IHsKCQkJCXZhciBwYXlsb2FkZGF0YSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpCgkJCQkvLyBDcmVhdGUgdGhlIG1lc3NhZ2UKCQkJCW1lc3NhZ2UgPSB7CgkJCQkJdHlwZTogImNhbGwiLAoJCQkJCWNhbGxiYWNraWQ6IGNhbGxiYWNrSUQsCgkJCQkJcGF5bG9hZDogewoJCQkJCQliaW5kaW5nTmFtZTogYmluZGluZ05hbWUsCgkJCQkJCWRhdGE6IHBheWxvYWRkYXRhLAoJCQkJCX0KCQkJCX0KCgkJCQkvLyBNYWtlIHRoZSBjYWxsCgkJCQl2YXIgcGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpCgkJCQlleHRlcm5hbC5pbnZva2UocGF5bG9hZCk7CgkJCX0gY2F0Y2ggKGUpIHsKCQkJCWNvbnNvbGUuZXJyb3IoZSkKCQkJfQoJCX0pCgl9CgoKCS8vIENhbGxlZCBieSB0aGUgYmFja2VuZCB0byByZXR1cm4gZGF0YSB0byBhIHByZXZpb3VzbHkgY2FsbGVkCgkvLyBiaW5kaW5nIGludm9jYXRpb24KCWZ1bmN0aW9uIGNhbGxiYWNrKGluY29taW5nTWVzc2FnZSkgewoJCS8vIFBhcnNlIHRoZSBtZXNzYWdlCgkJdmFyIG1lc3NhZ2UKCQl0cnkgewoJCQltZXNzYWdlID0gSlNPTi5wYXJzZShpbmNvbWluZ01lc3NhZ2UpCgkJfSBjYXRjaCAoZSkgewoJCQl3YWlscy5sb2cuZGVidWcoIkludmFsaWQgSlNPTiBwYXNzZWQgdG8gY2FsbGJhY2s6ICIgKyBlLm1lc3NhZ2UpCgkJCXdhaWxzLmxvZy5kZWJ1ZygiTWVzc2FnZTogIiArIGluY29taW5nTWVzc2FnZSkKCQkJcmV0dXJuCgkJfQoJCWNhbGxiYWNrSUQgPSBtZXNzYWdlLmNhbGxiYWNraWQKCQljYWxsYmFja0RhdGEgPSBjYWxsYmFja3NbY2FsbGJhY2tJRF0KCQlpZiAoIWNhbGxiYWNrRGF0YSkgewoJCQljb25zb2xlLmVycm9yKCJDYWxsYmFjayAnIiArIGNhbGxiYWNrSUQgKyAiJyBub3QgcmVnaXN0ZWQhISEiKQoJCQlyZXR1cm4KCQl9CgkJY2xlYXJUaW1lb3V0KGNhbGxiYWNrRGF0YS50aW1lb3V0SGFuZGxlKQoJCWRlbGV0ZSBjYWxsYmFja3NbY2FsbGJhY2tJRF0KCQlpZiAobWVzc2FnZS5lcnJvcikgewoJCQlyZXR1cm4gY2FsbGJhY2tEYXRhLnJlamVjdChtZXNzYWdlLmVycm9yKQoJCX0KCQlyZXR1cm4gY2FsbGJhY2tEYXRhLnJlc29sdmUobWVzc2FnZS5kYXRhKQoJfQoKCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiBFdmVudHMgKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoJdmFyIGV2ZW50TGlzdGVuZXJzID0ge307CgoJLy8gUmVnaXN0ZXJzIGV2ZW50IGxpc3RlbmVycwoJZnVuY3Rpb24gb24oZXZlbnROYW1lLCBjYWxsYmFjaykgewoJCWV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0gPSBldmVudExpc3RlbmVyc1tldmVudE5hbWVdIHx8IFtdOwoJCWV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0ucHVzaChjYWxsYmFjayk7Cgl9CgoJLy8gbm90aWZ5IGluZm9ybXMgZnJvbnRlbmQgbGlzdGVuZXJzIHRoYXQgYW4gZXZlbnQgd2FzIGVtaXR0ZWQgd2l0aCB0aGUgZ2l2ZW4gZGF0YQoJZnVuY3Rpb24gbm90aWZ5KGV2ZW50TmFtZSwgZGF0YSkgewoJCWlmIChldmVudExpc3RlbmVyc1tldmVudE5hbWVdKSB7CgkJCWV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0uZm9yRWFjaChlbGVtZW50ID0+IHsKCQkJCXZhciBwYXJzZWREYXRhID0gW10KCQkJCS8vIFBhcnNlIGRhdGEgaWYgd2UgaGF2ZSBpdAoJCQkJaWYgKGRhdGEpIHsKCQkJCQl0cnkgewoJCQkJCQlwYXJzZWREYXRhID0gSlNPTi5wYXJzZShkYXRhKTsKCQkJCQl9IGNhdGNoIChlKSB7CgkJCQkJCXdhaWxzLmxvZy5lcnJvcigiSW52YWxpZCBKU09OIGRhdGEgc2VudCB0byBub3RpZnkuIEV2ZW50IG5hbWUgPSAiICsgZXZlbnROYW1lKQoJCQkJCX0KCQkJCX0KCQkJCWVsZW1lbnQuYXBwbHkobnVsbCwgcGFyc2VkRGF0YSk7CgkJCX0pOwoJCX0KCX0KCgkvLyBlbWl0IGFuIGV2ZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGRhdGEKCWZ1bmN0aW9uIGVtaXQoZXZlbnROYW1lKSB7CgoJCS8vIENhbGN1bGF0ZSB0aGUgZGF0YQoJCXZhciBkYXRhID0gSlNPTi5zdHJpbmdpZnkoW10uc2xpY2UuYXBwbHkoYXJndW1lbnRzKS5zbGljZSgxKSk7CgoJCS8vIE5vdGlmeSBiYWNrZW5kCgkJbWVzc2FnZSA9IHsKCQkJdHlwZTogImV2ZW50IiwKCQkJcGF5bG9hZDogewoJCQkJbmFtZTogZXZlbnROYW1lLAoJCQkJZGF0YTogZGF0YSwKCQkJfQoJCX0KCQlleHRlcm5hbC5pbnZva2UoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpOwoJfQoKCS8vIEV2ZW50cyBjYWxscwoJd2luZG93LndhaWxzLmV2ZW50cyA9IHsgZW1pdDogZW1pdCwgb246IG9uIH07CgoJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgkvKioqKioqKioqKioqKioqKioqKioqKioqKiBMb2dnaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCS8vIFNlbmRzIGEgbG9nIG1lc3NhZ2UgdG8gdGhlIGJhY2tlbmQgd2l0aCB0aGUgZ2l2ZW4KCS8vIGxldmVsICsgbWVzc2FnZQoJZnVuY3Rpb24gc2VuZExvZ01lc3NhZ2UobGV2ZWwsIG1lc3NhZ2UpIHsKCgkJLy8gTG9nIE1lc3NhZ2UKCQltZXNzYWdlID0gewoJCQl0eXBlOiAibG9nIiwKCQkJcGF5bG9hZDogewoJCQkJbGV2ZWw6IGxldmVsLAoJCQkJbWVzc2FnZTogbWVzc2FnZSwKCQkJfQoJCX0KCQlleHRlcm5hbC5pbnZva2UoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpOwoJfQoKCWZ1bmN0aW9uIGxvZ0RlYnVnKG1lc3NhZ2UpIHsKCQlzZW5kTG9nTWVzc2FnZSgiZGVidWciLCBtZXNzYWdlKTsKCX0KCWZ1bmN0aW9uIGxvZ0luZm8obWVzc2FnZSkgewoJCXNlbmRMb2dNZXNzYWdlKCJpbmZvIiwgbWVzc2FnZSk7Cgl9CglmdW5jdGlvbiBsb2dXYXJuaW5nKG1lc3NhZ2UpIHsKCQlzZW5kTG9nTWVzc2FnZSgid2FybmluZyIsIG1lc3NhZ2UpOwoJfQoJZnVuY3Rpb24gbG9nRXJyb3IobWVzc2FnZSkgewoJCXNlbmRMb2dNZXNzYWdlKCJlcnJvciIsIG1lc3NhZ2UpOwoJfQoJZnVuY3Rpb24gbG9nRmF0YWwobWVzc2FnZSkgewoJCXNlbmRMb2dNZXNzYWdlKCJmYXRhbCIsIG1lc3NhZ2UpOwoJfQoKCXdpbmRvdy53YWlscy5sb2cgPSB7CgkJZGVidWc6IGxvZ0RlYnVnLAoJCWluZm86IGxvZ0luZm8sCgkJd2FybmluZzogbG9nV2FybmluZywKCQllcnJvcjogbG9nRXJyb3IsCgkJZmF0YWw6IGxvZ0ZhdGFsLAoJfTsKCgkvKioqKioqKioqKioqKioqKioqKioqKioqKiogRXhwb3J0cyAqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCXdpbmRvdy53YWlscy5fID0gewoJCW5ld0JpbmRpbmc6IG5ld0JpbmRpbmcsCgkJY2FsbGJhY2s6IGNhbGxiYWNrLAoJCW5vdGlmeTogbm90aWZ5LAoJCXNlbmRMb2dNZXNzYWdlOiBzZW5kTG9nTWVzc2FnZSwKCQljYWxsYmFja3M6IGNhbGxiYWNrcywKCQlpbmplY3RDU1M6IGluamVjdENTUywKCQlhZGRTY3JpcHQ6IGFkZFNjcmlwdCwKCX0KCgkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCS8vIE5vdGlmeSBiYWNrZW5kIHRoYXQgdGhlIHJ1bnRpbWUgaGFzIGZpbmlzaGVkIGxvYWRpbmcKCXdpbmRvdy53YWlscy5ldmVudHMuZW1pdCgid2FpbHM6bG9hZGVkIik7Cgp9KSgp\"")
packr.PackJSONBytes("./assets/default", "default.html", "\"PGRpdiBpZD0iYXBwIj48L2Rpdj4=\"")
packr.PackJSONBytes("./assets/default", "jquery.3.3.1.min.js", "\"LyohIGpRdWVyeSB2My4zLjEgLWFqYXgsLWFqYXgvanNvbnAsLWFqYXgvbG9hZCwtYWpheC9wYXJzZVhNTCwtYWpheC9zY3JpcHQsLWFqYXgvdmFyL2xvY2F0aW9uLC1hamF4L3Zhci9ub25jZSwtYWpheC92YXIvcnF1ZXJ5LC1hamF4L3hociwtbWFuaXB1bGF0aW9uL19ldmFsVXJsLC1ldmVudC9hamF4LC1lZmZlY3RzLC1lZmZlY3RzL1R3ZWVuLC1lZmZlY3RzL2FuaW1hdGVkU2VsZWN0b3IgfCAoYykgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovCiFmdW5jdGlvbiAoZSwgdCkgeyAidXNlIHN0cmljdCI7ICJvYmplY3QiID09IHR5cGVvZiBtb2R1bGUgJiYgIm9iamVjdCIgPT0gdHlwZW9mIG1vZHVsZS5leHBvcnRzID8gbW9kdWxlLmV4cG9ydHMgPSBlLmRvY3VtZW50ID8gdChlLCAhMCkgOiBmdW5jdGlvbiAoZSkgeyBpZiAoIWUuZG9jdW1lbnQpIHRocm93IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIpOyByZXR1cm4gdChlKSB9IDogdChlKSB9KCJ1bmRlZmluZWQiICE9IHR5cGVvZiB3aW5kb3cgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiAoZSwgdCkgeyAidXNlIHN0cmljdCI7IHZhciBuID0gW10sIHIgPSBlLmRvY3VtZW50LCBpID0gT2JqZWN0LmdldFByb3RvdHlwZU9mLCBvID0gbi5zbGljZSwgYSA9IG4uY29uY2F0LCB1ID0gbi5wdXNoLCBzID0gbi5pbmRleE9mLCBsID0ge30sIGMgPSBsLnRvU3RyaW5nLCBmID0gbC5oYXNPd25Qcm9wZXJ0eSwgZCA9IGYudG9TdHJpbmcsIHAgPSBkLmNhbGwoT2JqZWN0KSwgaCA9IHt9LCBnID0gZnVuY3Rpb24gZSh0KSB7IHJldHVybiAiZnVuY3Rpb24iID09IHR5cGVvZiB0ICYmICJudW1iZXIiICE9IHR5cGVvZiB0Lm5vZGVUeXBlIH0sIHYgPSBmdW5jdGlvbiBlKHQpIHsgcmV0dXJuIG51bGwgIT0gdCAmJiB0ID09PSB0LndpbmRvdyB9LCB5ID0geyB0eXBlOiAhMCwgc3JjOiAhMCwgbm9Nb2R1bGU6ICEwIH07IGZ1bmN0aW9uIG0oZSwgdCwgbikgeyB2YXIgaSwgbyA9ICh0ID0gdCB8fCByKS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsgaWYgKG8udGV4dCA9IGUsIG4pIGZvciAoaSBpbiB5KSBuW2ldICYmIChvW2ldID0gbltpXSk7IHQuaGVhZC5hcHBlbmRDaGlsZChvKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pIH0gZnVuY3Rpb24gYihlKSB7IHJldHVybiBudWxsID09IGUgPyBlICsgIiIgOiAib2JqZWN0IiA9PSB0eXBlb2YgZSB8fCAiZnVuY3Rpb24iID09IHR5cGVvZiBlID8gbFtjLmNhbGwoZSldIHx8ICJvYmplY3QiIDogdHlwZW9mIGUgfSB2YXIgeCA9ICIzLjMuMSAtYWpheCwtYWpheC9qc29ucCwtYWpheC9sb2FkLC1hamF4L3BhcnNlWE1MLC1hamF4L3NjcmlwdCwtYWpheC92YXIvbG9jYXRpb24sLWFqYXgvdmFyL25vbmNlLC1hamF4L3Zhci9ycXVlcnksLWFqYXgveGhyLC1tYW5pcHVsYXRpb24vX2V2YWxVcmwsLWV2ZW50L2FqYXgsLWVmZmVjdHMsLWVmZmVjdHMvVHdlZW4sLWVmZmVjdHMvYW5pbWF0ZWRTZWxlY3RvciIsIHcgPSBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gbmV3IHcuZm4uaW5pdChlLCB0KSB9LCBDID0gL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nOyB3LmZuID0gdy5wcm90b3R5cGUgPSB7IGpxdWVyeTogeCwgY29uc3RydWN0b3I6IHcsIGxlbmd0aDogMCwgdG9BcnJheTogZnVuY3Rpb24gKCkgeyByZXR1cm4gby5jYWxsKHRoaXMpIH0sIGdldDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG51bGwgPT0gZSA/IG8uY2FsbCh0aGlzKSA6IGUgPCAwID8gdGhpc1tlICsgdGhpcy5sZW5ndGhdIDogdGhpc1tlXSB9LCBwdXNoU3RhY2s6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gdy5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksIGUpOyByZXR1cm4gdC5wcmV2T2JqZWN0ID0gdGhpcywgdCB9LCBlYWNoOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdy5lYWNoKHRoaXMsIGUpIH0sIG1hcDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHRoaXMucHVzaFN0YWNrKHcubWFwKHRoaXMsIGZ1bmN0aW9uICh0LCBuKSB7IHJldHVybiBlLmNhbGwodCwgbiwgdCkgfSkpIH0sIHNsaWNlOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnB1c2hTdGFjayhvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIH0sIGZpcnN0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmVxKDApIH0sIGxhc3Q6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuZXEoLTEpIH0sIGVxOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IHRoaXMubGVuZ3RoLCBuID0gK2UgKyAoZSA8IDAgPyB0IDogMCk7IHJldHVybiB0aGlzLnB1c2hTdGFjayhuID49IDAgJiYgbiA8IHQgPyBbdGhpc1tuXV0gOiBbXSkgfSwgZW5kOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpIH0sIHB1c2g6IHUsIHNvcnQ6IG4uc29ydCwgc3BsaWNlOiBuLnNwbGljZSB9LCB3LmV4dGVuZCA9IHcuZm4uZXh0ZW5kID0gZnVuY3Rpb24gKCkgeyB2YXIgZSwgdCwgbiwgciwgaSwgbywgYSA9IGFyZ3VtZW50c1swXSB8fCB7fSwgdSA9IDEsIHMgPSBhcmd1bWVudHMubGVuZ3RoLCBsID0gITE7IGZvciAoImJvb2xlYW4iID09IHR5cGVvZiBhICYmIChsID0gYSwgYSA9IGFyZ3VtZW50c1t1XSB8fCB7fSwgdSsrKSwgIm9iamVjdCIgPT0gdHlwZW9mIGEgfHwgZyhhKSB8fCAoYSA9IHt9KSwgdSA9PT0gcyAmJiAoYSA9IHRoaXMsIHUtLSk7IHUgPCBzOyB1KyspaWYgKG51bGwgIT0gKGUgPSBhcmd1bWVudHNbdV0pKSBmb3IgKHQgaW4gZSkgbiA9IGFbdF0sIGEgIT09IChyID0gZVt0XSkgJiYgKGwgJiYgciAmJiAody5pc1BsYWluT2JqZWN0KHIpIHx8IChpID0gQXJyYXkuaXNBcnJheShyKSkpID8gKGkgPyAoaSA9ICExLCBvID0gbiAmJiBBcnJheS5pc0FycmF5KG4pID8gbiA6IFtdKSA6IG8gPSBuICYmIHcuaXNQbGFpbk9iamVjdChuKSA/IG4gOiB7fSwgYVt0XSA9IHcuZXh0ZW5kKGwsIG8sIHIpKSA6IHZvaWQgMCAhPT0gciAmJiAoYVt0XSA9IHIpKTsgcmV0dXJuIGEgfSwgdy5leHRlbmQoeyBleHBhbmRvOiAialF1ZXJ5IiArICh4ICsgTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywgIiIpLCBpc1JlYWR5OiAhMCwgZXJyb3I6IGZ1bmN0aW9uIChlKSB7IHRocm93IG5ldyBFcnJvcihlKSB9LCBub29wOiBmdW5jdGlvbiAoKSB7IH0sIGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uIChlKSB7IHZhciB0LCBuOyByZXR1cm4gISghZSB8fCAiW29iamVjdCBPYmplY3RdIiAhPT0gYy5jYWxsKGUpKSAmJiAoISh0ID0gaShlKSkgfHwgImZ1bmN0aW9uIiA9PSB0eXBlb2YgKG4gPSBmLmNhbGwodCwgImNvbnN0cnVjdG9yIikgJiYgdC5jb25zdHJ1Y3RvcikgJiYgZC5jYWxsKG4pID09PSBwKSB9LCBpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiAoZSkgeyB2YXIgdDsgZm9yICh0IGluIGUpIHJldHVybiAhMTsgcmV0dXJuICEwIH0sIGdsb2JhbEV2YWw6IGZ1bmN0aW9uIChlKSB7IG0oZSkgfSwgZWFjaDogZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4sIHIgPSAwOyBpZiAoVChlKSkgeyBmb3IgKG4gPSBlLmxlbmd0aDsgciA8IG47IHIrKylpZiAoITEgPT09IHQuY2FsbChlW3JdLCByLCBlW3JdKSkgYnJlYWsgfSBlbHNlIGZvciAociBpbiBlKSBpZiAoITEgPT09IHQuY2FsbChlW3JdLCByLCBlW3JdKSkgYnJlYWs7IHJldHVybiBlIH0sIHRyaW06IGZ1bmN0aW9uIChlKSB7IHJldHVybiBudWxsID09IGUgPyAiIiA6IChlICsgIiIpLnJlcGxhY2UoQywgIiIpIH0sIG1ha2VBcnJheTogZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4gPSB0IHx8IFtdOyByZXR1cm4gbnVsbCAhPSBlICYmIChUKE9iamVjdChlKSkgPyB3Lm1lcmdlKG4sICJzdHJpbmciID09IHR5cGVvZiBlID8gW2VdIDogZSkgOiB1LmNhbGwobiwgZSkpLCBuIH0sIGluQXJyYXk6IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiBudWxsID09IHQgPyAtMSA6IHMuY2FsbCh0LCBlLCBuKSB9LCBtZXJnZTogZnVuY3Rpb24gKGUsIHQpIHsgZm9yICh2YXIgbiA9ICt0Lmxlbmd0aCwgciA9IDAsIGkgPSBlLmxlbmd0aDsgciA8IG47IHIrKyllW2krK10gPSB0W3JdOyByZXR1cm4gZS5sZW5ndGggPSBpLCBlIH0sIGdyZXA6IGZ1bmN0aW9uIChlLCB0LCBuKSB7IGZvciAodmFyIHIsIGkgPSBbXSwgbyA9IDAsIGEgPSBlLmxlbmd0aCwgdSA9ICFuOyBvIDwgYTsgbysrKShyID0gIXQoZVtvXSwgbykpICE9PSB1ICYmIGkucHVzaChlW29dKTsgcmV0dXJuIGkgfSwgbWFwOiBmdW5jdGlvbiAoZSwgdCwgbikgeyB2YXIgciwgaSwgbyA9IDAsIHUgPSBbXTsgaWYgKFQoZSkpIGZvciAociA9IGUubGVuZ3RoOyBvIDwgcjsgbysrKW51bGwgIT0gKGkgPSB0KGVbb10sIG8sIG4pKSAmJiB1LnB1c2goaSk7IGVsc2UgZm9yIChvIGluIGUpIG51bGwgIT0gKGkgPSB0KGVbb10sIG8sIG4pKSAmJiB1LnB1c2goaSk7IHJldHVybiBhLmFwcGx5KFtdLCB1KSB9LCBndWlkOiAxLCBzdXBwb3J0OiBoIH0pLCAiZnVuY3Rpb24iID09IHR5cGVvZiBTeW1ib2wgJiYgKHcuZm5bU3ltYm9sLml0ZXJhdG9yXSA9IG5bU3ltYm9sLml0ZXJhdG9yXSksIHcuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2wiLnNwbGl0KCIgIiksIGZ1bmN0aW9uIChlLCB0KSB7IGxbIltvYmplY3QgIiArIHQgKyAiXSJdID0gdC50b0xvd2VyQ2FzZSgpIH0pOyBmdW5jdGlvbiBUKGUpIHsgdmFyIHQgPSAhIWUgJiYgImxlbmd0aCIgaW4gZSAmJiBlLmxlbmd0aCwgbiA9IGIoZSk7IHJldHVybiAhZyhlKSAmJiAhdihlKSAmJiAoImFycmF5IiA9PT0gbiB8fCAwID09PSB0IHx8ICJudW1iZXIiID09IHR5cGVvZiB0ICYmIHQgPiAwICYmIHQgLSAxIGluIGUpIH0gdmFyIEUgPSBmdW5jdGlvbiAoZSkgeyB2YXIgdCwgbiwgciwgaSwgbywgYSwgdSwgcywgbCwgYywgZiwgZCwgcCwgaCwgZywgdiwgeSwgbSwgYiwgeCA9ICJzaXp6bGUiICsgMSAqIG5ldyBEYXRlLCB3ID0gZS5kb2N1bWVudCwgQyA9IDAsIFQgPSAwLCBFID0gYWUoKSwgTiA9IGFlKCksIGsgPSBhZSgpLCBBID0gZnVuY3Rpb24gKGUsIHQpIHsgcmV0dXJuIGUgPT09IHQgJiYgKGYgPSAhMCksIDAgfSwgRCA9IHt9Lmhhc093blByb3BlcnR5LCBTID0gW10sIEwgPSBTLnBvcCwgaiA9IFMucHVzaCwgcSA9IFMucHVzaCwgTyA9IFMuc2xpY2UsIFAgPSBmdW5jdGlvbiAoZSwgdCkgeyBmb3IgKHZhciBuID0gMCwgciA9IGUubGVuZ3RoOyBuIDwgcjsgbisrKWlmIChlW25dID09PSB0KSByZXR1cm4gbjsgcmV0dXJuIC0xIH0sIEggPSAiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLCBJID0gIltcXHgyMFxcdFxcclxcblxcZl0iLCBSID0gIig/OlxcXFwufFtcXHctXXxbXlwwLVxceGEwXSkrIiwgQiA9ICJcXFsiICsgSSArICIqKCIgKyBSICsgIikoPzoiICsgSSArICIqKFsqXiR8IX5dPz0pIiArIEkgKyAiKig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwifCgiICsgUiArICIpKXwpIiArIEkgKyAiKlxcXSIsIE0gPSAiOigiICsgUiArICIpKD86XFwoKCgnKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcIil8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IiArIEIgKyAiKSopfC4qKVxcKXwpIiwgVyA9IG5ldyBSZWdFeHAoSSArICIrIiwgImciKSwgJCA9IG5ldyBSZWdFeHAoIl4iICsgSSArICIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiICsgSSArICIrJCIsICJnIiksIEYgPSBuZXcgUmVnRXhwKCJeIiArIEkgKyAiKiwiICsgSSArICIqIiksIHogPSBuZXcgUmVnRXhwKCJeIiArIEkgKyAiKihbPit+XXwiICsgSSArICIpIiArIEkgKyAiKiIpLCBfID0gbmV3IFJlZ0V4cCgiPSIgKyBJICsgIiooW15cXF0nXCJdKj8pIiArIEkgKyAiKlxcXSIsICJnIiksIFUgPSBuZXcgUmVnRXhwKE0pLCBWID0gbmV3IFJlZ0V4cCgiXiIgKyBSICsgIiQiKSwgWCA9IHsgSUQ6IG5ldyBSZWdFeHAoIl4jKCIgKyBSICsgIikiKSwgQ0xBU1M6IG5ldyBSZWdFeHAoIl5cXC4oIiArIFIgKyAiKSIpLCBUQUc6IG5ldyBSZWdFeHAoIl4oIiArIFIgKyAifFsqXSkiKSwgQVRUUjogbmV3IFJlZ0V4cCgiXiIgKyBCKSwgUFNFVURPOiBuZXcgUmVnRXhwKCJeIiArIE0pLCBDSElMRDogbmV3IFJlZ0V4cCgiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFwoIiArIEkgKyAiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIgKyBJICsgIiooPzooWystXXwpIiArIEkgKyAiKihcXGQrKXwpKSIgKyBJICsgIipcXCl8KSIsICJpIiksIGJvb2w6IG5ldyBSZWdFeHAoIl4oPzoiICsgSCArICIpJCIsICJpIiksIG5lZWRzQ29udGV4dDogbmV3IFJlZ0V4cCgiXiIgKyBJICsgIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIgKyBJICsgIiooKD86LVxcZCk/XFxkKikiICsgSSArICIqXFwpfCkoPz1bXi1dfCQpIiwgImkiKSB9LCBRID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSwgWSA9IC9eaFxkJC9pLCBHID0gL15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLCBLID0gL14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLywgSiA9IC9bK35dLywgWiA9IG5ldyBSZWdFeHAoIlxcXFwoW1xcZGEtZl17MSw2fSIgKyBJICsgIj98KCIgKyBJICsgIil8LikiLCAiaWciKSwgZWUgPSBmdW5jdGlvbiAoZSwgdCwgbikgeyB2YXIgciA9ICIweCIgKyB0IC0gNjU1MzY7IHJldHVybiByICE9PSByIHx8IG4gPyB0IDogciA8IDAgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKHIgKyA2NTUzNikgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKHIgPj4gMTAgfCA1NTI5NiwgMTAyMyAmIHIgfCA1NjMyMCkgfSwgdGUgPSAvKFtcMC1ceDFmXHg3Zl18Xi0/XGQpfF4tJHxbXlwwLVx4MWZceDdmLVx1RkZGRlx3LV0vZywgbmUgPSBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gdCA/ICJcMCIgPT09IGUgPyAiXHVmZmZkIiA6IGUuc2xpY2UoMCwgLTEpICsgIlxcIiArIGUuY2hhckNvZGVBdChlLmxlbmd0aCAtIDEpLnRvU3RyaW5nKDE2KSArICIgIiA6ICJcXCIgKyBlIH0sIHJlID0gZnVuY3Rpb24gKCkgeyBkKCkgfSwgaWUgPSBtZShmdW5jdGlvbiAoZSkgeyByZXR1cm4gITAgPT09IGUuZGlzYWJsZWQgJiYgKCJmb3JtIiBpbiBlIHx8ICJsYWJlbCIgaW4gZSkgfSwgeyBkaXI6ICJwYXJlbnROb2RlIiwgbmV4dDogImxlZ2VuZCIgfSk7IHRyeSB7IHEuYXBwbHkoUyA9IE8uY2FsbCh3LmNoaWxkTm9kZXMpLCB3LmNoaWxkTm9kZXMpLCBTW3cuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlIH0gY2F0Y2ggKGUpIHsgcSA9IHsgYXBwbHk6IFMubGVuZ3RoID8gZnVuY3Rpb24gKGUsIHQpIHsgai5hcHBseShlLCBPLmNhbGwodCkpIH0gOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiA9IGUubGVuZ3RoLCByID0gMDsgd2hpbGUgKGVbbisrXSA9IHRbcisrXSk7IGUubGVuZ3RoID0gbiAtIDEgfSB9IH0gZnVuY3Rpb24gb2UoZSwgdCwgciwgaSkgeyB2YXIgbywgdSwgbCwgYywgZiwgaCwgeSwgbSA9IHQgJiYgdC5vd25lckRvY3VtZW50LCBDID0gdCA/IHQubm9kZVR5cGUgOiA5OyBpZiAociA9IHIgfHwgW10sICJzdHJpbmciICE9IHR5cGVvZiBlIHx8ICFlIHx8IDEgIT09IEMgJiYgOSAhPT0gQyAmJiAxMSAhPT0gQykgcmV0dXJuIHI7IGlmICghaSAmJiAoKHQgPyB0Lm93bmVyRG9jdW1lbnQgfHwgdCA6IHcpICE9PSBwICYmIGQodCksIHQgPSB0IHx8IHAsIGcpKSB7IGlmICgxMSAhPT0gQyAmJiAoZiA9IEsuZXhlYyhlKSkpIGlmIChvID0gZlsxXSkgeyBpZiAoOSA9PT0gQykgeyBpZiAoIShsID0gdC5nZXRFbGVtZW50QnlJZChvKSkpIHJldHVybiByOyBpZiAobC5pZCA9PT0gbykgcmV0dXJuIHIucHVzaChsKSwgciB9IGVsc2UgaWYgKG0gJiYgKGwgPSBtLmdldEVsZW1lbnRCeUlkKG8pKSAmJiBiKHQsIGwpICYmIGwuaWQgPT09IG8pIHJldHVybiByLnB1c2gobCksIHIgfSBlbHNlIHsgaWYgKGZbMl0pIHJldHVybiBxLmFwcGx5KHIsIHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSkpLCByOyBpZiAoKG8gPSBmWzNdKSAmJiBuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSByZXR1cm4gcS5hcHBseShyLCB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUobykpLCByIH0gaWYgKG4ucXNhICYmICFrW2UgKyAiICJdICYmICghdiB8fCAhdi50ZXN0KGUpKSkgeyBpZiAoMSAhPT0gQykgbSA9IHQsIHkgPSBlOyBlbHNlIGlmICgib2JqZWN0IiAhPT0gdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSB7IChjID0gdC5nZXRBdHRyaWJ1dGUoImlkIikpID8gYyA9IGMucmVwbGFjZSh0ZSwgbmUpIDogdC5zZXRBdHRyaWJ1dGUoImlkIiwgYyA9IHgpLCB1ID0gKGggPSBhKGUpKS5sZW5ndGg7IHdoaWxlICh1LS0pIGhbdV0gPSAiIyIgKyBjICsgIiAiICsgeWUoaFt1XSk7IHkgPSBoLmpvaW4oIiwiKSwgbSA9IEoudGVzdChlKSAmJiBnZSh0LnBhcmVudE5vZGUpIHx8IHQgfSBpZiAoeSkgdHJ5IHsgcmV0dXJuIHEuYXBwbHkociwgbS5xdWVyeVNlbGVjdG9yQWxsKHkpKSwgciB9IGNhdGNoIChlKSB7IH0gZmluYWxseSB7IGMgPT09IHggJiYgdC5yZW1vdmVBdHRyaWJ1dGUoImlkIikgfSB9IH0gcmV0dXJuIHMoZS5yZXBsYWNlKCQsICIkMSIpLCB0LCByLCBpKSB9IGZ1bmN0aW9uIGFlKCkgeyB2YXIgZSA9IFtdOyBmdW5jdGlvbiB0KG4sIGkpIHsgcmV0dXJuIGUucHVzaChuICsgIiAiKSA+IHIuY2FjaGVMZW5ndGggJiYgZGVsZXRlIHRbZS5zaGlmdCgpXSwgdFtuICsgIiAiXSA9IGkgfSByZXR1cm4gdCB9IGZ1bmN0aW9uIHVlKGUpIHsgcmV0dXJuIGVbeF0gPSAhMCwgZSB9IGZ1bmN0aW9uIHNlKGUpIHsgdmFyIHQgPSBwLmNyZWF0ZUVsZW1lbnQoImZpZWxkc2V0Iik7IHRyeSB7IHJldHVybiAhIWUodCkgfSBjYXRjaCAoZSkgeyByZXR1cm4gITEgfSBmaW5hbGx5IHsgdC5wYXJlbnROb2RlICYmIHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSwgdCA9IG51bGwgfSB9IGZ1bmN0aW9uIGxlKGUsIHQpIHsgdmFyIG4gPSBlLnNwbGl0KCJ8IiksIGkgPSBuLmxlbmd0aDsgd2hpbGUgKGktLSkgci5hdHRySGFuZGxlW25baV1dID0gdCB9IGZ1bmN0aW9uIGNlKGUsIHQpIHsgdmFyIG4gPSB0ICYmIGUsIHIgPSBuICYmIDEgPT09IGUubm9kZVR5cGUgJiYgMSA9PT0gdC5ub2RlVHlwZSAmJiBlLnNvdXJjZUluZGV4IC0gdC5zb3VyY2VJbmRleDsgaWYgKHIpIHJldHVybiByOyBpZiAobikgd2hpbGUgKG4gPSBuLm5leHRTaWJsaW5nKSBpZiAobiA9PT0gdCkgcmV0dXJuIC0xOyByZXR1cm4gZSA/IDEgOiAtMSB9IGZ1bmN0aW9uIGZlKGUpIHsgcmV0dXJuIGZ1bmN0aW9uICh0KSB7IHJldHVybiAiaW5wdXQiID09PSB0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgJiYgdC50eXBlID09PSBlIH0gfSBmdW5jdGlvbiBkZShlKSB7IHJldHVybiBmdW5jdGlvbiAodCkgeyB2YXIgbiA9IHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsgcmV0dXJuICgiaW5wdXQiID09PSBuIHx8ICJidXR0b24iID09PSBuKSAmJiB0LnR5cGUgPT09IGUgfSB9IGZ1bmN0aW9uIHBlKGUpIHsgcmV0dXJuIGZ1bmN0aW9uICh0KSB7IHJldHVybiAiZm9ybSIgaW4gdCA/IHQucGFyZW50Tm9kZSAmJiAhMSA9PT0gdC5kaXNhYmxlZCA/ICJsYWJlbCIgaW4gdCA/ICJsYWJlbCIgaW4gdC5wYXJlbnROb2RlID8gdC5wYXJlbnROb2RlLmRpc2FibGVkID09PSBlIDogdC5kaXNhYmxlZCA9PT0gZSA6IHQuaXNEaXNhYmxlZCA9PT0gZSB8fCB0LmlzRGlzYWJsZWQgIT09ICFlICYmIGllKHQpID09PSBlIDogdC5kaXNhYmxlZCA9PT0gZSA6ICJsYWJlbCIgaW4gdCAmJiB0LmRpc2FibGVkID09PSBlIH0gfSBmdW5jdGlvbiBoZShlKSB7IHJldHVybiB1ZShmdW5jdGlvbiAodCkgeyByZXR1cm4gdCA9ICt0LCB1ZShmdW5jdGlvbiAobiwgcikgeyB2YXIgaSwgbyA9IGUoW10sIG4ubGVuZ3RoLCB0KSwgYSA9IG8ubGVuZ3RoOyB3aGlsZSAoYS0tKSBuW2kgPSBvW2FdXSAmJiAobltpXSA9ICEocltpXSA9IG5baV0pKSB9KSB9KSB9IGZ1bmN0aW9uIGdlKGUpIHsgcmV0dXJuIGUgJiYgInVuZGVmaW5lZCIgIT0gdHlwZW9mIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUgJiYgZSB9IG4gPSBvZS5zdXBwb3J0ID0ge30sIG8gPSBvZS5pc1hNTCA9IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gZSAmJiAoZS5vd25lckRvY3VtZW50IHx8IGUpLmRvY3VtZW50RWxlbWVudDsgcmV0dXJuICEhdCAmJiAiSFRNTCIgIT09IHQubm9kZU5hbWUgfSwgZCA9IG9lLnNldERvY3VtZW50ID0gZnVuY3Rpb24gKGUpIHsgdmFyIHQsIGksIGEgPSBlID8gZS5vd25lckRvY3VtZW50IHx8IGUgOiB3OyByZXR1cm4gYSAhPT0gcCAmJiA5ID09PSBhLm5vZGVUeXBlICYmIGEuZG9jdW1lbnRFbGVtZW50ID8gKHAgPSBhLCBoID0gcC5kb2N1bWVudEVsZW1lbnQsIGcgPSAhbyhwKSwgdyAhPT0gcCAmJiAoaSA9IHAuZGVmYXVsdFZpZXcpICYmIGkudG9wICE9PSBpICYmIChpLmFkZEV2ZW50TGlzdGVuZXIgPyBpLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsIHJlLCAhMSkgOiBpLmF0dGFjaEV2ZW50ICYmIGkuYXR0YWNoRXZlbnQoIm9udW5sb2FkIiwgcmUpKSwgbi5hdHRyaWJ1dGVzID0gc2UoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUuY2xhc3NOYW1lID0gImkiLCAhZS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpIH0pLCBuLmdldEVsZW1lbnRzQnlUYWdOYW1lID0gc2UoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUuYXBwZW5kQ2hpbGQocC5jcmVhdGVDb21tZW50KCIiKSksICFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RoIH0pLCBuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBHLnRlc3QocC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSwgbi5nZXRCeUlkID0gc2UoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGguYXBwZW5kQ2hpbGQoZSkuaWQgPSB4LCAhcC5nZXRFbGVtZW50c0J5TmFtZSB8fCAhcC5nZXRFbGVtZW50c0J5TmFtZSh4KS5sZW5ndGggfSksIG4uZ2V0QnlJZCA/IChyLmZpbHRlci5JRCA9IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gZS5yZXBsYWNlKFosIGVlKTsgcmV0dXJuIGZ1bmN0aW9uIChlKSB7IHJldHVybiBlLmdldEF0dHJpYnV0ZSgiaWQiKSA9PT0gdCB9IH0sIHIuZmluZC5JRCA9IGZ1bmN0aW9uIChlLCB0KSB7IGlmICgidW5kZWZpbmVkIiAhPSB0eXBlb2YgdC5nZXRFbGVtZW50QnlJZCAmJiBnKSB7IHZhciBuID0gdC5nZXRFbGVtZW50QnlJZChlKTsgcmV0dXJuIG4gPyBbbl0gOiBbXSB9IH0pIDogKHIuZmlsdGVyLklEID0gZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSBlLnJlcGxhY2UoWiwgZWUpOyByZXR1cm4gZnVuY3Rpb24gKGUpIHsgdmFyIG4gPSAidW5kZWZpbmVkIiAhPSB0eXBlb2YgZS5nZXRBdHRyaWJ1dGVOb2RlICYmIGUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTsgcmV0dXJuIG4gJiYgbi52YWx1ZSA9PT0gdCB9IH0sIHIuZmluZC5JRCA9IGZ1bmN0aW9uIChlLCB0KSB7IGlmICgidW5kZWZpbmVkIiAhPSB0eXBlb2YgdC5nZXRFbGVtZW50QnlJZCAmJiBnKSB7IHZhciBuLCByLCBpLCBvID0gdC5nZXRFbGVtZW50QnlJZChlKTsgaWYgKG8pIHsgaWYgKChuID0gby5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSAmJiBuLnZhbHVlID09PSBlKSByZXR1cm4gW29dOyBpID0gdC5nZXRFbGVtZW50c0J5TmFtZShlKSwgciA9IDA7IHdoaWxlIChvID0gaVtyKytdKSBpZiAoKG4gPSBvLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpICYmIG4udmFsdWUgPT09IGUpIHJldHVybiBbb10gfSByZXR1cm4gW10gfSB9KSwgci5maW5kLlRBRyA9IG4uZ2V0RWxlbWVudHNCeVRhZ05hbWUgPyBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gInVuZGVmaW5lZCIgIT0gdHlwZW9mIHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPyB0LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpIDogbi5xc2EgPyB0LnF1ZXJ5U2VsZWN0b3JBbGwoZSkgOiB2b2lkIDAgfSA6IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBuLCByID0gW10sIGkgPSAwLCBvID0gdC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKTsgaWYgKCIqIiA9PT0gZSkgeyB3aGlsZSAobiA9IG9baSsrXSkgMSA9PT0gbi5ub2RlVHlwZSAmJiByLnB1c2gobik7IHJldHVybiByIH0gcmV0dXJuIG8gfSwgci5maW5kLkNMQVNTID0gbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGZ1bmN0aW9uIChlLCB0KSB7IGlmICgidW5kZWZpbmVkIiAhPSB0eXBlb2YgdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGcpIHJldHVybiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZSkgfSwgeSA9IFtdLCB2ID0gW10sIChuLnFzYSA9IEcudGVzdChwLnF1ZXJ5U2VsZWN0b3JBbGwpKSAmJiAoc2UoZnVuY3Rpb24gKGUpIHsgaC5hcHBlbmRDaGlsZChlKS5pbm5lckhUTUwgPSAiPGEgaWQ9JyIgKyB4ICsgIic+PC9hPjxzZWxlY3QgaWQ9JyIgKyB4ICsgIi1cclxcJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsIGUucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGggJiYgdi5wdXNoKCJbKl4kXT0iICsgSSArICIqKD86Jyd8XCJcIikiKSwgZS5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RoIHx8IHYucHVzaCgiXFxbIiArIEkgKyAiKig/OnZhbHVlfCIgKyBIICsgIikiKSwgZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR+PSIgKyB4ICsgIi1dIikubGVuZ3RoIHx8IHYucHVzaCgifj0iKSwgZS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aCB8fCB2LnB1c2goIjpjaGVja2VkIiksIGUucXVlcnlTZWxlY3RvckFsbCgiYSMiICsgeCArICIrKiIpLmxlbmd0aCB8fCB2LnB1c2goIi4jLitbK35dIikgfSksIHNlKGZ1bmN0aW9uIChlKSB7IGUuaW5uZXJIVE1MID0gIjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+PHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PiI7IHZhciB0ID0gcC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOyB0LnNldEF0dHJpYnV0ZSgidHlwZSIsICJoaWRkZW4iKSwgZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAiRCIpLCBlLnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1lPWRdIikubGVuZ3RoICYmIHYucHVzaCgibmFtZSIgKyBJICsgIipbKl4kfCF+XT89IiksIDIgIT09IGUucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGggJiYgdi5wdXNoKCI6ZW5hYmxlZCIsICI6ZGlzYWJsZWQiKSwgaC5hcHBlbmRDaGlsZChlKS5kaXNhYmxlZCA9ICEwLCAyICE9PSBlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpkaXNhYmxlZCIpLmxlbmd0aCAmJiB2LnB1c2goIjplbmFibGVkIiwgIjpkaXNhYmxlZCIpLCBlLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSwgdi5wdXNoKCIsLio6IikgfSkpLCAobi5tYXRjaGVzU2VsZWN0b3IgPSBHLnRlc3QobSA9IGgubWF0Y2hlcyB8fCBoLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fCBoLm1vek1hdGNoZXNTZWxlY3RvciB8fCBoLm9NYXRjaGVzU2VsZWN0b3IgfHwgaC5tc01hdGNoZXNTZWxlY3RvcikpICYmIHNlKGZ1bmN0aW9uIChlKSB7IG4uZGlzY29ubmVjdGVkTWF0Y2ggPSBtLmNhbGwoZSwgIioiKSwgbS5jYWxsKGUsICJbcyE9JyddOngiKSwgeS5wdXNoKCIhPSIsIE0pIH0pLCB2ID0gdi5sZW5ndGggJiYgbmV3IFJlZ0V4cCh2LmpvaW4oInwiKSksIHkgPSB5Lmxlbmd0aCAmJiBuZXcgUmVnRXhwKHkuam9pbigifCIpKSwgdCA9IEcudGVzdChoLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSwgYiA9IHQgfHwgRy50ZXN0KGguY29udGFpbnMpID8gZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4gPSA5ID09PSBlLm5vZGVUeXBlID8gZS5kb2N1bWVudEVsZW1lbnQgOiBlLCByID0gdCAmJiB0LnBhcmVudE5vZGU7IHJldHVybiBlID09PSByIHx8ICEoIXIgfHwgMSAhPT0gci5ub2RlVHlwZSB8fCAhKG4uY29udGFpbnMgPyBuLmNvbnRhaW5zKHIpIDogZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiAxNiAmIGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocikpKSB9IDogZnVuY3Rpb24gKGUsIHQpIHsgaWYgKHQpIHdoaWxlICh0ID0gdC5wYXJlbnROb2RlKSBpZiAodCA9PT0gZSkgcmV0dXJuICEwOyByZXR1cm4gITEgfSwgQSA9IHQgPyBmdW5jdGlvbiAoZSwgdCkgeyBpZiAoZSA9PT0gdCkgcmV0dXJuIGYgPSAhMCwgMDsgdmFyIHIgPSAhZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICF0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uOyByZXR1cm4gciB8fCAoMSAmIChyID0gKGUub3duZXJEb2N1bWVudCB8fCBlKSA9PT0gKHQub3duZXJEb2N1bWVudCB8fCB0KSA/IGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkgOiAxKSB8fCAhbi5zb3J0RGV0YWNoZWQgJiYgdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKSA9PT0gciA/IGUgPT09IHAgfHwgZS5vd25lckRvY3VtZW50ID09PSB3ICYmIGIodywgZSkgPyAtMSA6IHQgPT09IHAgfHwgdC5vd25lckRvY3VtZW50ID09PSB3ICYmIGIodywgdCkgPyAxIDogYyA/IFAoYywgZSkgLSBQKGMsIHQpIDogMCA6IDQgJiByID8gLTEgOiAxKSB9IDogZnVuY3Rpb24gKGUsIHQpIHsgaWYgKGUgPT09IHQpIHJldHVybiBmID0gITAsIDA7IHZhciBuLCByID0gMCwgaSA9IGUucGFyZW50Tm9kZSwgbyA9IHQucGFyZW50Tm9kZSwgYSA9IFtlXSwgdSA9IFt0XTsgaWYgKCFpIHx8ICFvKSByZXR1cm4gZSA9PT0gcCA/IC0xIDogdCA9PT0gcCA/IDEgOiBpID8gLTEgOiBvID8gMSA6IGMgPyBQKGMsIGUpIC0gUChjLCB0KSA6IDA7IGlmIChpID09PSBvKSByZXR1cm4gY2UoZSwgdCk7IG4gPSBlOyB3aGlsZSAobiA9IG4ucGFyZW50Tm9kZSkgYS51bnNoaWZ0KG4pOyBuID0gdDsgd2hpbGUgKG4gPSBuLnBhcmVudE5vZGUpIHUudW5zaGlmdChuKTsgd2hpbGUgKGFbcl0gPT09IHVbcl0pIHIrKzsgcmV0dXJuIHIgPyBjZShhW3JdLCB1W3JdKSA6IGFbcl0gPT09IHcgPyAtMSA6IHVbcl0gPT09IHcgPyAxIDogMCB9LCBwKSA6IHAgfSwgb2UubWF0Y2hlcyA9IGZ1bmN0aW9uIChlLCB0KSB7IHJldHVybiBvZShlLCBudWxsLCBudWxsLCB0KSB9LCBvZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiAoZSwgdCkgeyBpZiAoKGUub3duZXJEb2N1bWVudCB8fCBlKSAhPT0gcCAmJiBkKGUpLCB0ID0gdC5yZXBsYWNlKF8sICI9JyQxJ10iKSwgbi5tYXRjaGVzU2VsZWN0b3IgJiYgZyAmJiAha1t0ICsgIiAiXSAmJiAoIXkgfHwgIXkudGVzdCh0KSkgJiYgKCF2IHx8ICF2LnRlc3QodCkpKSB0cnkgeyB2YXIgciA9IG0uY2FsbChlLCB0KTsgaWYgKHIgfHwgbi5kaXNjb25uZWN0ZWRNYXRjaCB8fCBlLmRvY3VtZW50ICYmIDExICE9PSBlLmRvY3VtZW50Lm5vZGVUeXBlKSByZXR1cm4gciB9IGNhdGNoIChlKSB7IH0gcmV0dXJuIG9lKHQsIHAsIG51bGwsIFtlXSkubGVuZ3RoID4gMCB9LCBvZS5jb250YWlucyA9IGZ1bmN0aW9uIChlLCB0KSB7IHJldHVybiAoZS5vd25lckRvY3VtZW50IHx8IGUpICE9PSBwICYmIGQoZSksIGIoZSwgdCkgfSwgb2UuYXR0ciA9IGZ1bmN0aW9uIChlLCB0KSB7IChlLm93bmVyRG9jdW1lbnQgfHwgZSkgIT09IHAgJiYgZChlKTsgdmFyIGkgPSByLmF0dHJIYW5kbGVbdC50b0xvd2VyQ2FzZSgpXSwgbyA9IGkgJiYgRC5jYWxsKHIuYXR0ckhhbmRsZSwgdC50b0xvd2VyQ2FzZSgpKSA/IGkoZSwgdCwgIWcpIDogdm9pZCAwOyByZXR1cm4gdm9pZCAwICE9PSBvID8gbyA6IG4uYXR0cmlidXRlcyB8fCAhZyA/IGUuZ2V0QXR0cmlidXRlKHQpIDogKG8gPSBlLmdldEF0dHJpYnV0ZU5vZGUodCkpICYmIG8uc3BlY2lmaWVkID8gby52YWx1ZSA6IG51bGwgfSwgb2UuZXNjYXBlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIChlICsgIiIpLnJlcGxhY2UodGUsIG5lKSB9LCBvZS5lcnJvciA9IGZ1bmN0aW9uIChlKSB7IHRocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIiArIGUpIH0sIG9lLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiAoZSkgeyB2YXIgdCwgciA9IFtdLCBpID0gMCwgbyA9IDA7IGlmIChmID0gIW4uZGV0ZWN0RHVwbGljYXRlcywgYyA9ICFuLnNvcnRTdGFibGUgJiYgZS5zbGljZSgwKSwgZS5zb3J0KEEpLCBmKSB7IHdoaWxlICh0ID0gZVtvKytdKSB0ID09PSBlW29dICYmIChpID0gci5wdXNoKG8pKTsgd2hpbGUgKGktLSkgZS5zcGxpY2UocltpXSwgMSkgfSByZXR1cm4gYyA9IG51bGwsIGUgfSwgaSA9IG9lLmdldFRleHQgPSBmdW5jdGlvbiAoZSkgeyB2YXIgdCwgbiA9ICIiLCByID0gMCwgbyA9IGUubm9kZVR5cGU7IGlmIChvKSB7IGlmICgxID09PSBvIHx8IDkgPT09IG8gfHwgMTEgPT09IG8pIHsgaWYgKCJzdHJpbmciID09IHR5cGVvZiBlLnRleHRDb250ZW50KSByZXR1cm4gZS50ZXh0Q29udGVudDsgZm9yIChlID0gZS5maXJzdENoaWxkOyBlOyBlID0gZS5uZXh0U2libGluZyluICs9IGkoZSkgfSBlbHNlIGlmICgzID09PSBvIHx8IDQgPT09IG8pIHJldHVybiBlLm5vZGVWYWx1ZSB9IGVsc2Ugd2hpbGUgKHQgPSBlW3IrK10pIG4gKz0gaSh0KTsgcmV0dXJuIG4gfSwgKHIgPSBvZS5zZWxlY3RvcnMgPSB7IGNhY2hlTGVuZ3RoOiA1MCwgY3JlYXRlUHNldWRvOiB1ZSwgbWF0Y2g6IFgsIGF0dHJIYW5kbGU6IHt9LCBmaW5kOiB7fSwgcmVsYXRpdmU6IHsgIj4iOiB7IGRpcjogInBhcmVudE5vZGUiLCBmaXJzdDogITAgfSwgIiAiOiB7IGRpcjogInBhcmVudE5vZGUiIH0sICIrIjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmciLCBmaXJzdDogITAgfSwgIn4iOiB7IGRpcjogInByZXZpb3VzU2libGluZyIgfSB9LCBwcmVGaWx0ZXI6IHsgQVRUUjogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGVbMV0gPSBlWzFdLnJlcGxhY2UoWiwgZWUpLCBlWzNdID0gKGVbM10gfHwgZVs0XSB8fCBlWzVdIHx8ICIiKS5yZXBsYWNlKFosIGVlKSwgIn49IiA9PT0gZVsyXSAmJiAoZVszXSA9ICIgIiArIGVbM10gKyAiICIpLCBlLnNsaWNlKDAsIDQpIH0sIENISUxEOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZVsxXSA9IGVbMV0udG9Mb3dlckNhc2UoKSwgIm50aCIgPT09IGVbMV0uc2xpY2UoMCwgMykgPyAoZVszXSB8fCBvZS5lcnJvcihlWzBdKSwgZVs0XSA9ICsoZVs0XSA/IGVbNV0gKyAoZVs2XSB8fCAxKSA6IDIgKiAoImV2ZW4iID09PSBlWzNdIHx8ICJvZGQiID09PSBlWzNdKSksIGVbNV0gPSArKGVbN10gKyBlWzhdIHx8ICJvZGQiID09PSBlWzNdKSkgOiBlWzNdICYmIG9lLmVycm9yKGVbMF0pLCBlIH0sIFBTRVVETzogZnVuY3Rpb24gKGUpIHsgdmFyIHQsIG4gPSAhZVs2XSAmJiBlWzJdOyByZXR1cm4gWC5DSElMRC50ZXN0KGVbMF0pID8gbnVsbCA6IChlWzNdID8gZVsyXSA9IGVbNF0gfHwgZVs1XSB8fCAiIiA6IG4gJiYgVS50ZXN0KG4pICYmICh0ID0gYShuLCAhMCkpICYmICh0ID0gbi5pbmRleE9mKCIpIiwgbi5sZW5ndGggLSB0KSAtIG4ubGVuZ3RoKSAmJiAoZVswXSA9IGVbMF0uc2xpY2UoMCwgdCksIGVbMl0gPSBuLnNsaWNlKDAsIHQpKSwgZS5zbGljZSgwLCAzKSkgfSB9LCBmaWx0ZXI6IHsgVEFHOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IGUucmVwbGFjZShaLCBlZSkudG9Mb3dlckNhc2UoKTsgcmV0dXJuICIqIiA9PT0gZSA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuICEwIH0gOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS5ub2RlTmFtZSAmJiBlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHQgfSB9LCBDTEFTUzogZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSBFW2UgKyAiICJdOyByZXR1cm4gdCB8fCAodCA9IG5ldyBSZWdFeHAoIihefCIgKyBJICsgIikiICsgZSArICIoIiArIEkgKyAifCQpIikpICYmIEUoZSwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHQudGVzdCgic3RyaW5nIiA9PSB0eXBlb2YgZS5jbGFzc05hbWUgJiYgZS5jbGFzc05hbWUgfHwgInVuZGVmaW5lZCIgIT0gdHlwZW9mIGUuZ2V0QXR0cmlidXRlICYmIGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpIHx8ICIiKSB9KSB9LCBBVFRSOiBmdW5jdGlvbiAoZSwgdCwgbikgeyByZXR1cm4gZnVuY3Rpb24gKHIpIHsgdmFyIGkgPSBvZS5hdHRyKHIsIGUpOyByZXR1cm4gbnVsbCA9PSBpID8gIiE9IiA9PT0gdCA6ICF0IHx8IChpICs9ICIiLCAiPSIgPT09IHQgPyBpID09PSBuIDogIiE9IiA9PT0gdCA/IGkgIT09IG4gOiAiXj0iID09PSB0ID8gbiAmJiAwID09PSBpLmluZGV4T2YobikgOiAiKj0iID09PSB0ID8gbiAmJiBpLmluZGV4T2YobikgPiAtMSA6ICIkPSIgPT09IHQgPyBuICYmIGkuc2xpY2UoLW4ubGVuZ3RoKSA9PT0gbiA6ICJ+PSIgPT09IHQgPyAoIiAiICsgaS5yZXBsYWNlKFcsICIgIikgKyAiICIpLmluZGV4T2YobikgPiAtMSA6ICJ8PSIgPT09IHQgJiYgKGkgPT09IG4gfHwgaS5zbGljZSgwLCBuLmxlbmd0aCArIDEpID09PSBuICsgIi0iKSkgfSB9LCBDSElMRDogZnVuY3Rpb24gKGUsIHQsIG4sIHIsIGkpIHsgdmFyIG8gPSAibnRoIiAhPT0gZS5zbGljZSgwLCAzKSwgYSA9ICJsYXN0IiAhPT0gZS5zbGljZSgtNCksIHUgPSAib2YtdHlwZSIgPT09IHQ7IHJldHVybiAxID09PSByICYmIDAgPT09IGkgPyBmdW5jdGlvbiAoZSkgeyByZXR1cm4gISFlLnBhcmVudE5vZGUgfSA6IGZ1bmN0aW9uICh0LCBuLCBzKSB7IHZhciBsLCBjLCBmLCBkLCBwLCBoLCBnID0gbyAhPT0gYSA/ICJuZXh0U2libGluZyIgOiAicHJldmlvdXNTaWJsaW5nIiwgdiA9IHQucGFyZW50Tm9kZSwgeSA9IHUgJiYgdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBtID0gIXMgJiYgIXUsIGIgPSAhMTsgaWYgKHYpIHsgaWYgKG8pIHsgd2hpbGUgKGcpIHsgZCA9IHQ7IHdoaWxlIChkID0gZFtnXSkgaWYgKHUgPyBkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHkgOiAxID09PSBkLm5vZGVUeXBlKSByZXR1cm4gITE7IGggPSBnID0gIm9ubHkiID09PSBlICYmICFoICYmICJuZXh0U2libGluZyIgfSByZXR1cm4gITAgfSBpZiAoaCA9IFthID8gdi5maXJzdENoaWxkIDogdi5sYXN0Q2hpbGRdLCBhICYmIG0pIHsgYiA9IChwID0gKGwgPSAoYyA9IChmID0gKGQgPSB2KVt4XSB8fCAoZFt4XSA9IHt9KSlbZC51bmlxdWVJRF0gfHwgKGZbZC51bmlxdWVJRF0gPSB7fSkpW2VdIHx8IFtdKVswXSA9PT0gQyAmJiBsWzFdKSAmJiBsWzJdLCBkID0gcCAmJiB2LmNoaWxkTm9kZXNbcF07IHdoaWxlIChkID0gKytwICYmIGQgJiYgZFtnXSB8fCAoYiA9IHAgPSAwKSB8fCBoLnBvcCgpKSBpZiAoMSA9PT0gZC5ub2RlVHlwZSAmJiArK2IgJiYgZCA9PT0gdCkgeyBjW2VdID0gW0MsIHAsIGJdOyBicmVhayB9IH0gZWxzZSBpZiAobSAmJiAoYiA9IHAgPSAobCA9IChjID0gKGYgPSAoZCA9IHQpW3hdIHx8IChkW3hdID0ge30pKVtkLnVuaXF1ZUlEXSB8fCAoZltkLnVuaXF1ZUlEXSA9IHt9KSlbZV0gfHwgW10pWzBdID09PSBDICYmIGxbMV0pLCAhMSA9PT0gYikgd2hpbGUgKGQgPSArK3AgJiYgZCAmJiBkW2ddIHx8IChiID0gcCA9IDApIHx8IGgucG9wKCkpIGlmICgodSA/IGQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0geSA6IDEgPT09IGQubm9kZVR5cGUpICYmICsrYiAmJiAobSAmJiAoKGMgPSAoZiA9IGRbeF0gfHwgKGRbeF0gPSB7fSkpW2QudW5pcXVlSURdIHx8IChmW2QudW5pcXVlSURdID0ge30pKVtlXSA9IFtDLCBiXSksIGQgPT09IHQpKSBicmVhazsgcmV0dXJuIChiIC09IGkpID09PSByIHx8IGIgJSByID09IDAgJiYgYiAvIHIgPj0gMCB9IH0gfSwgUFNFVURPOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiwgaSA9IHIucHNldWRvc1tlXSB8fCByLnNldEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXSB8fCBvZS5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiICsgZSk7IHJldHVybiBpW3hdID8gaSh0KSA6IGkubGVuZ3RoID4gMSA/IChuID0gW2UsIGUsICIiLCB0XSwgci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSkgPyB1ZShmdW5jdGlvbiAoZSwgbikgeyB2YXIgciwgbyA9IGkoZSwgdCksIGEgPSBvLmxlbmd0aDsgd2hpbGUgKGEtLSkgZVtyID0gUChlLCBvW2FdKV0gPSAhKG5bcl0gPSBvW2FdKSB9KSA6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBpKGUsIDAsIG4pIH0pIDogaSB9IH0sIHBzZXVkb3M6IHsgbm90OiB1ZShmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IFtdLCBuID0gW10sIHIgPSB1KGUucmVwbGFjZSgkLCAiJDEiKSk7IHJldHVybiByW3hdID8gdWUoZnVuY3Rpb24gKGUsIHQsIG4sIGkpIHsgdmFyIG8sIGEgPSByKGUsIG51bGwsIGksIFtdKSwgdSA9IGUubGVuZ3RoOyB3aGlsZSAodS0tKSAobyA9IGFbdV0pICYmIChlW3VdID0gISh0W3VdID0gbykpIH0pIDogZnVuY3Rpb24gKGUsIGksIG8pIHsgcmV0dXJuIHRbMF0gPSBlLCByKHQsIG51bGwsIG8sIG4pLCB0WzBdID0gbnVsbCwgIW4ucG9wKCkgfSB9KSwgaGFzOiB1ZShmdW5jdGlvbiAoZSkgeyByZXR1cm4gZnVuY3Rpb24gKHQpIHsgcmV0dXJuIG9lKGUsIHQpLmxlbmd0aCA+IDAgfSB9KSwgY29udGFpbnM6IHVlKGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID0gZS5yZXBsYWNlKFosIGVlKSwgZnVuY3Rpb24gKHQpIHsgcmV0dXJuICh0LnRleHRDb250ZW50IHx8IHQuaW5uZXJUZXh0IHx8IGkodCkpLmluZGV4T2YoZSkgPiAtMSB9IH0pLCBsYW5nOiB1ZShmdW5jdGlvbiAoZSkgeyByZXR1cm4gVi50ZXN0KGUgfHwgIiIpIHx8IG9lLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiICsgZSksIGUgPSBlLnJlcGxhY2UoWiwgZWUpLnRvTG93ZXJDYXNlKCksIGZ1bmN0aW9uICh0KSB7IHZhciBuOyBkbyB7IGlmIChuID0gZyA/IHQubGFuZyA6IHQuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpIHx8IHQuZ2V0QXR0cmlidXRlKCJsYW5nIikpIHJldHVybiAobiA9IG4udG9Mb3dlckNhc2UoKSkgPT09IGUgfHwgMCA9PT0gbi5pbmRleE9mKGUgKyAiLSIpIH0gd2hpbGUgKCh0ID0gdC5wYXJlbnROb2RlKSAmJiAxID09PSB0Lm5vZGVUeXBlKTsgcmV0dXJuICExIH0gfSksIHRhcmdldDogZnVuY3Rpb24gKHQpIHsgdmFyIG4gPSBlLmxvY2F0aW9uICYmIGUubG9jYXRpb24uaGFzaDsgcmV0dXJuIG4gJiYgbi5zbGljZSgxKSA9PT0gdC5pZCB9LCByb290OiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA9PT0gaCB9LCBmb2N1czogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPT09IHAuYWN0aXZlRWxlbWVudCAmJiAoIXAuaGFzRm9jdXMgfHwgcC5oYXNGb2N1cygpKSAmJiAhIShlLnR5cGUgfHwgZS5ocmVmIHx8IH5lLnRhYkluZGV4KSB9LCBlbmFibGVkOiBwZSghMSksIGRpc2FibGVkOiBwZSghMCksIGNoZWNrZWQ6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyByZXR1cm4gImlucHV0IiA9PT0gdCAmJiAhIWUuY2hlY2tlZCB8fCAib3B0aW9uIiA9PT0gdCAmJiAhIWUuc2VsZWN0ZWQgfSwgc2VsZWN0ZWQ6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlLnBhcmVudE5vZGUgJiYgZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsICEwID09PSBlLnNlbGVjdGVkIH0sIGVtcHR5OiBmdW5jdGlvbiAoZSkgeyBmb3IgKGUgPSBlLmZpcnN0Q2hpbGQ7IGU7IGUgPSBlLm5leHRTaWJsaW5nKWlmIChlLm5vZGVUeXBlIDwgNikgcmV0dXJuICExOyByZXR1cm4gITAgfSwgcGFyZW50OiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gIXIucHNldWRvcy5lbXB0eShlKSB9LCBoZWFkZXI6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBZLnRlc3QoZS5ub2RlTmFtZSkgfSwgaW5wdXQ6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBRLnRlc3QoZS5ub2RlTmFtZSkgfSwgYnV0dG9uOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsgcmV0dXJuICJpbnB1dCIgPT09IHQgJiYgImJ1dHRvbiIgPT09IGUudHlwZSB8fCAiYnV0dG9uIiA9PT0gdCB9LCB0ZXh0OiBmdW5jdGlvbiAoZSkgeyB2YXIgdDsgcmV0dXJuICJpbnB1dCIgPT09IGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAmJiAidGV4dCIgPT09IGUudHlwZSAmJiAobnVsbCA9PSAodCA9IGUuZ2V0QXR0cmlidXRlKCJ0eXBlIikpIHx8ICJ0ZXh0IiA9PT0gdC50b0xvd2VyQ2FzZSgpKSB9LCBmaXJzdDogaGUoZnVuY3Rpb24gKCkgeyByZXR1cm4gWzBdIH0pLCBsYXN0OiBoZShmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gW3QgLSAxXSB9KSwgZXE6IGhlKGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiBbbiA8IDAgPyBuICsgdCA6IG5dIH0pLCBldmVuOiBoZShmdW5jdGlvbiAoZSwgdCkgeyBmb3IgKHZhciBuID0gMDsgbiA8IHQ7IG4gKz0gMillLnB1c2gobik7IHJldHVybiBlIH0pLCBvZGQ6IGhlKGZ1bmN0aW9uIChlLCB0KSB7IGZvciAodmFyIG4gPSAxOyBuIDwgdDsgbiArPSAyKWUucHVzaChuKTsgcmV0dXJuIGUgfSksIGx0OiBoZShmdW5jdGlvbiAoZSwgdCwgbikgeyBmb3IgKHZhciByID0gbiA8IDAgPyBuICsgdCA6IG47IC0tciA+PSAwOyllLnB1c2gocik7IHJldHVybiBlIH0pLCBndDogaGUoZnVuY3Rpb24gKGUsIHQsIG4pIHsgZm9yICh2YXIgciA9IG4gPCAwID8gbiArIHQgOiBuOyArK3IgPCB0OyllLnB1c2gocik7IHJldHVybiBlIH0pIH0gfSkucHNldWRvcy5udGggPSByLnBzZXVkb3MuZXE7IGZvciAodCBpbiB7IHJhZGlvOiAhMCwgY2hlY2tib3g6ICEwLCBmaWxlOiAhMCwgcGFzc3dvcmQ6ICEwLCBpbWFnZTogITAgfSkgci5wc2V1ZG9zW3RdID0gZmUodCk7IGZvciAodCBpbiB7IHN1Ym1pdDogITAsIHJlc2V0OiAhMCB9KSByLnBzZXVkb3NbdF0gPSBkZSh0KTsgZnVuY3Rpb24gdmUoKSB7IH0gdmUucHJvdG90eXBlID0gci5maWx0ZXJzID0gci5wc2V1ZG9zLCByLnNldEZpbHRlcnMgPSBuZXcgdmUsIGEgPSBvZS50b2tlbml6ZSA9IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBuLCBpLCBvLCBhLCB1LCBzLCBsLCBjID0gTltlICsgIiAiXTsgaWYgKGMpIHJldHVybiB0ID8gMCA6IGMuc2xpY2UoMCk7IHUgPSBlLCBzID0gW10sIGwgPSByLnByZUZpbHRlcjsgd2hpbGUgKHUpIHsgbiAmJiAhKGkgPSBGLmV4ZWModSkpIHx8IChpICYmICh1ID0gdS5zbGljZShpWzBdLmxlbmd0aCkgfHwgdSksIHMucHVzaChvID0gW10pKSwgbiA9ICExLCAoaSA9IHouZXhlYyh1KSkgJiYgKG4gPSBpLnNoaWZ0KCksIG8ucHVzaCh7IHZhbHVlOiBuLCB0eXBlOiBpWzBdLnJlcGxhY2UoJCwgIiAiKSB9KSwgdSA9IHUuc2xpY2Uobi5sZW5ndGgpKTsgZm9yIChhIGluIHIuZmlsdGVyKSAhKGkgPSBYW2FdLmV4ZWModSkpIHx8IGxbYV0gJiYgIShpID0gbFthXShpKSkgfHwgKG4gPSBpLnNoaWZ0KCksIG8ucHVzaCh7IHZhbHVlOiBuLCB0eXBlOiBhLCBtYXRjaGVzOiBpIH0pLCB1ID0gdS5zbGljZShuLmxlbmd0aCkpOyBpZiAoIW4pIGJyZWFrIH0gcmV0dXJuIHQgPyB1Lmxlbmd0aCA6IHUgPyBvZS5lcnJvcihlKSA6IE4oZSwgcykuc2xpY2UoMCkgfTsgZnVuY3Rpb24geWUoZSkgeyBmb3IgKHZhciB0ID0gMCwgbiA9IGUubGVuZ3RoLCByID0gIiI7IHQgPCBuOyB0KyspciArPSBlW3RdLnZhbHVlOyByZXR1cm4gciB9IGZ1bmN0aW9uIG1lKGUsIHQsIG4pIHsgdmFyIHIgPSB0LmRpciwgaSA9IHQubmV4dCwgbyA9IGkgfHwgciwgYSA9IG4gJiYgInBhcmVudE5vZGUiID09PSBvLCB1ID0gVCsrOyByZXR1cm4gdC5maXJzdCA/IGZ1bmN0aW9uICh0LCBuLCBpKSB7IHdoaWxlICh0ID0gdFtyXSkgaWYgKDEgPT09IHQubm9kZVR5cGUgfHwgYSkgcmV0dXJuIGUodCwgbiwgaSk7IHJldHVybiAhMSB9IDogZnVuY3Rpb24gKHQsIG4sIHMpIHsgdmFyIGwsIGMsIGYsIGQgPSBbQywgdV07IGlmIChzKSB7IHdoaWxlICh0ID0gdFtyXSkgaWYgKCgxID09PSB0Lm5vZGVUeXBlIHx8IGEpICYmIGUodCwgbiwgcykpIHJldHVybiAhMCB9IGVsc2Ugd2hpbGUgKHQgPSB0W3JdKSBpZiAoMSA9PT0gdC5ub2RlVHlwZSB8fCBhKSBpZiAoZiA9IHRbeF0gfHwgKHRbeF0gPSB7fSksIGMgPSBmW3QudW5pcXVlSURdIHx8IChmW3QudW5pcXVlSURdID0ge30pLCBpICYmIGkgPT09IHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgdCA9IHRbcl0gfHwgdDsgZWxzZSB7IGlmICgobCA9IGNbb10pICYmIGxbMF0gPT09IEMgJiYgbFsxXSA9PT0gdSkgcmV0dXJuIGRbMl0gPSBsWzJdOyBpZiAoY1tvXSA9IGQsIGRbMl0gPSBlKHQsIG4sIHMpKSByZXR1cm4gITAgfSByZXR1cm4gITEgfSB9IGZ1bmN0aW9uIGJlKGUpIHsgcmV0dXJuIGUubGVuZ3RoID4gMSA/IGZ1bmN0aW9uICh0LCBuLCByKSB7IHZhciBpID0gZS5sZW5ndGg7IHdoaWxlIChpLS0pIGlmICghZVtpXSh0LCBuLCByKSkgcmV0dXJuICExOyByZXR1cm4gITAgfSA6IGVbMF0gfSBmdW5jdGlvbiB4ZShlLCB0LCBuKSB7IGZvciAodmFyIHIgPSAwLCBpID0gdC5sZW5ndGg7IHIgPCBpOyByKyspb2UoZSwgdFtyXSwgbik7IHJldHVybiBuIH0gZnVuY3Rpb24gd2UoZSwgdCwgbiwgciwgaSkgeyBmb3IgKHZhciBvLCBhID0gW10sIHUgPSAwLCBzID0gZS5sZW5ndGgsIGwgPSBudWxsICE9IHQ7IHUgPCBzOyB1KyspKG8gPSBlW3VdKSAmJiAobiAmJiAhbihvLCByLCBpKSB8fCAoYS5wdXNoKG8pLCBsICYmIHQucHVzaCh1KSkpOyByZXR1cm4gYSB9IGZ1bmN0aW9uIENlKGUsIHQsIG4sIHIsIGksIG8pIHsgcmV0dXJuIHIgJiYgIXJbeF0gJiYgKHIgPSBDZShyKSksIGkgJiYgIWlbeF0gJiYgKGkgPSBDZShpLCBvKSksIHVlKGZ1bmN0aW9uIChvLCBhLCB1LCBzKSB7IHZhciBsLCBjLCBmLCBkID0gW10sIHAgPSBbXSwgaCA9IGEubGVuZ3RoLCBnID0gbyB8fCB4ZSh0IHx8ICIqIiwgdS5ub2RlVHlwZSA/IFt1XSA6IHUsIFtdKSwgdiA9ICFlIHx8ICFvICYmIHQgPyBnIDogd2UoZywgZCwgZSwgdSwgcyksIHkgPSBuID8gaSB8fCAobyA/IGUgOiBoIHx8IHIpID8gW10gOiBhIDogdjsgaWYgKG4gJiYgbih2LCB5LCB1LCBzKSwgcikgeyBsID0gd2UoeSwgcCksIHIobCwgW10sIHUsIHMpLCBjID0gbC5sZW5ndGg7IHdoaWxlIChjLS0pIChmID0gbFtjXSkgJiYgKHlbcFtjXV0gPSAhKHZbcFtjXV0gPSBmKSkgfSBpZiAobykgeyBpZiAoaSB8fCBlKSB7IGlmIChpKSB7IGwgPSBbXSwgYyA9IHkubGVuZ3RoOyB3aGlsZSAoYy0tKSAoZiA9IHlbY10pICYmIGwucHVzaCh2W2NdID0gZik7IGkobnVsbCwgeSA9IFtdLCBsLCBzKSB9IGMgPSB5Lmxlbmd0aDsgd2hpbGUgKGMtLSkgKGYgPSB5W2NdKSAmJiAobCA9IGkgPyBQKG8sIGYpIDogZFtjXSkgPiAtMSAmJiAob1tsXSA9ICEoYVtsXSA9IGYpKSB9IH0gZWxzZSB5ID0gd2UoeSA9PT0gYSA/IHkuc3BsaWNlKGgsIHkubGVuZ3RoKSA6IHkpLCBpID8gaShudWxsLCBhLCB5LCBzKSA6IHEuYXBwbHkoYSwgeSkgfSkgfSBmdW5jdGlvbiBUZShlKSB7IGZvciAodmFyIHQsIG4sIGksIG8gPSBlLmxlbmd0aCwgYSA9IHIucmVsYXRpdmVbZVswXS50eXBlXSwgdSA9IGEgfHwgci5yZWxhdGl2ZVsiICJdLCBzID0gYSA/IDEgOiAwLCBjID0gbWUoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPT09IHQgfSwgdSwgITApLCBmID0gbWUoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIFAodCwgZSkgPiAtMSB9LCB1LCAhMCksIGQgPSBbZnVuY3Rpb24gKGUsIG4sIHIpIHsgdmFyIGkgPSAhYSAmJiAociB8fCBuICE9PSBsKSB8fCAoKHQgPSBuKS5ub2RlVHlwZSA/IGMoZSwgbiwgcikgOiBmKGUsIG4sIHIpKTsgcmV0dXJuIHQgPSBudWxsLCBpIH1dOyBzIDwgbzsgcysrKWlmIChuID0gci5yZWxhdGl2ZVtlW3NdLnR5cGVdKSBkID0gW21lKGJlKGQpLCBuKV07IGVsc2UgeyBpZiAoKG4gPSByLmZpbHRlcltlW3NdLnR5cGVdLmFwcGx5KG51bGwsIGVbc10ubWF0Y2hlcykpW3hdKSB7IGZvciAoaSA9ICsrczsgaSA8IG87IGkrKylpZiAoci5yZWxhdGl2ZVtlW2ldLnR5cGVdKSBicmVhazsgcmV0dXJuIENlKHMgPiAxICYmIGJlKGQpLCBzID4gMSAmJiB5ZShlLnNsaWNlKDAsIHMgLSAxKS5jb25jYXQoeyB2YWx1ZTogIiAiID09PSBlW3MgLSAyXS50eXBlID8gIioiIDogIiIgfSkpLnJlcGxhY2UoJCwgIiQxIiksIG4sIHMgPCBpICYmIFRlKGUuc2xpY2UocywgaSkpLCBpIDwgbyAmJiBUZShlID0gZS5zbGljZShpKSksIGkgPCBvICYmIHllKGUpKSB9IGQucHVzaChuKSB9IHJldHVybiBiZShkKSB9IGZ1bmN0aW9uIEVlKGUsIHQpIHsgdmFyIG4gPSB0Lmxlbmd0aCA+IDAsIGkgPSBlLmxlbmd0aCA+IDAsIG8gPSBmdW5jdGlvbiAobywgYSwgdSwgcywgYykgeyB2YXIgZiwgaCwgdiwgeSA9IDAsIG0gPSAiMCIsIGIgPSBvICYmIFtdLCB4ID0gW10sIHcgPSBsLCBUID0gbyB8fCBpICYmIHIuZmluZC5UQUcoIioiLCBjKSwgRSA9IEMgKz0gbnVsbCA9PSB3ID8gMSA6IE1hdGgucmFuZG9tKCkgfHwgLjEsIE4gPSBULmxlbmd0aDsgZm9yIChjICYmIChsID0gYSA9PT0gcCB8fCBhIHx8IGMpOyBtICE9PSBOICYmIG51bGwgIT0gKGYgPSBUW21dKTsgbSsrKSB7IGlmIChpICYmIGYpIHsgaCA9IDAsIGEgfHwgZi5vd25lckRvY3VtZW50ID09PSBwIHx8IChkKGYpLCB1ID0gIWcpOyB3aGlsZSAodiA9IGVbaCsrXSkgaWYgKHYoZiwgYSB8fCBwLCB1KSkgeyBzLnB1c2goZik7IGJyZWFrIH0gYyAmJiAoQyA9IEUpIH0gbiAmJiAoKGYgPSAhdiAmJiBmKSAmJiB5LS0gLCBvICYmIGIucHVzaChmKSkgfSBpZiAoeSArPSBtLCBuICYmIG0gIT09IHkpIHsgaCA9IDA7IHdoaWxlICh2ID0gdFtoKytdKSB2KGIsIHgsIGEsIHUpOyBpZiAobykgeyBpZiAoeSA+IDApIHdoaWxlIChtLS0pIGJbbV0gfHwgeFttXSB8fCAoeFttXSA9IEwuY2FsbChzKSk7IHggPSB3ZSh4KSB9IHEuYXBwbHkocywgeCksIGMgJiYgIW8gJiYgeC5sZW5ndGggPiAwICYmIHkgKyB0Lmxlbmd0aCA+IDEgJiYgb2UudW5pcXVlU29ydChzKSB9IHJldHVybiBjICYmIChDID0gRSwgbCA9IHcpLCBiIH07IHJldHVybiBuID8gdWUobykgOiBvIH0gcmV0dXJuIHUgPSBvZS5jb21waWxlID0gZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4sIHIgPSBbXSwgaSA9IFtdLCBvID0ga1tlICsgIiAiXTsgaWYgKCFvKSB7IHQgfHwgKHQgPSBhKGUpKSwgbiA9IHQubGVuZ3RoOyB3aGlsZSAobi0tKSAobyA9IFRlKHRbbl0pKVt4XSA/IHIucHVzaChvKSA6IGkucHVzaChvKTsgKG8gPSBrKGUsIEVlKGksIHIpKSkuc2VsZWN0b3IgPSBlIH0gcmV0dXJuIG8gfSwgcyA9IG9lLnNlbGVjdCA9IGZ1bmN0aW9uIChlLCB0LCBuLCBpKSB7IHZhciBvLCBzLCBsLCBjLCBmLCBkID0gImZ1bmN0aW9uIiA9PSB0eXBlb2YgZSAmJiBlLCBwID0gIWkgJiYgYShlID0gZC5zZWxlY3RvciB8fCBlKTsgaWYgKG4gPSBuIHx8IFtdLCAxID09PSBwLmxlbmd0aCkgeyBpZiAoKHMgPSBwWzBdID0gcFswXS5zbGljZSgwKSkubGVuZ3RoID4gMiAmJiAiSUQiID09PSAobCA9IHNbMF0pLnR5cGUgJiYgOSA9PT0gdC5ub2RlVHlwZSAmJiBnICYmIHIucmVsYXRpdmVbc1sxXS50eXBlXSkgeyBpZiAoISh0ID0gKHIuZmluZC5JRChsLm1hdGNoZXNbMF0ucmVwbGFjZShaLCBlZSksIHQpIHx8IFtdKVswXSkpIHJldHVybiBuOyBkICYmICh0ID0gdC5wYXJlbnROb2RlKSwgZSA9IGUuc2xpY2Uocy5zaGlmdCgpLnZhbHVlLmxlbmd0aCkgfSBvID0gWC5uZWVkc0NvbnRleHQudGVzdChlKSA/IDAgOiBzLmxlbmd0aDsgd2hpbGUgKG8tLSkgeyBpZiAobCA9IHNbb10sIHIucmVsYXRpdmVbYyA9IGwudHlwZV0pIGJyZWFrOyBpZiAoKGYgPSByLmZpbmRbY10pICYmIChpID0gZihsLm1hdGNoZXNbMF0ucmVwbGFjZShaLCBlZSksIEoudGVzdChzWzBdLnR5cGUpICYmIGdlKHQucGFyZW50Tm9kZSkgfHwgdCkpKSB7IGlmIChzLnNwbGljZShvLCAxKSwgIShlID0gaS5sZW5ndGggJiYgeWUocykpKSByZXR1cm4gcS5hcHBseShuLCBpKSwgbjsgYnJlYWsgfSB9IH0gcmV0dXJuIChkIHx8IHUoZSwgcCkpKGksIHQsICFnLCBuLCAhdCB8fCBKLnRlc3QoZSkgJiYgZ2UodC5wYXJlbnROb2RlKSB8fCB0KSwgbiB9LCBuLnNvcnRTdGFibGUgPSB4LnNwbGl0KCIiKS5zb3J0KEEpLmpvaW4oIiIpID09PSB4LCBuLmRldGVjdER1cGxpY2F0ZXMgPSAhIWYsIGQoKSwgbi5zb3J0RGV0YWNoZWQgPSBzZShmdW5jdGlvbiAoZSkgeyByZXR1cm4gMSAmIGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocC5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpKSB9KSwgc2UoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUuaW5uZXJIVE1MID0gIjxhIGhyZWY9JyMnPjwvYT4iLCAiIyIgPT09IGUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSB9KSB8fCBsZSgidHlwZXxocmVmfGhlaWdodHx3aWR0aCIsIGZ1bmN0aW9uIChlLCB0LCBuKSB7IGlmICghbikgcmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQsICJ0eXBlIiA9PT0gdC50b0xvd2VyQ2FzZSgpID8gMSA6IDIpIH0pLCBuLmF0dHJpYnV0ZXMgJiYgc2UoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUuaW5uZXJIVE1MID0gIjxpbnB1dC8+IiwgZS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCAiIiksICIiID09PSBlLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpIH0pIHx8IGxlKCJ2YWx1ZSIsIGZ1bmN0aW9uIChlLCB0LCBuKSB7IGlmICghbiAmJiAiaW5wdXQiID09PSBlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpIHJldHVybiBlLmRlZmF1bHRWYWx1ZSB9KSwgc2UoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG51bGwgPT0gZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIikgfSkgfHwgbGUoSCwgZnVuY3Rpb24gKGUsIHQsIG4pIHsgdmFyIHI7IGlmICghbikgcmV0dXJuICEwID09PSBlW3RdID8gdC50b0xvd2VyQ2FzZSgpIDogKHIgPSBlLmdldEF0dHJpYnV0ZU5vZGUodCkpICYmIHIuc3BlY2lmaWVkID8gci52YWx1ZSA6IG51bGwgfSksIG9lIH0oZSk7IHcuZmluZCA9IEUsIHcuZXhwciA9IEUuc2VsZWN0b3JzLCB3LmV4cHJbIjoiXSA9IHcuZXhwci5wc2V1ZG9zLCB3LnVuaXF1ZVNvcnQgPSB3LnVuaXF1ZSA9IEUudW5pcXVlU29ydCwgdy50ZXh0ID0gRS5nZXRUZXh0LCB3LmlzWE1MRG9jID0gRS5pc1hNTCwgdy5jb250YWlucyA9IEUuY29udGFpbnMsIHcuZXNjYXBlU2VsZWN0b3IgPSBFLmVzY2FwZTsgdmFyIE4gPSBmdW5jdGlvbiAoZSwgdCwgbikgeyB2YXIgciA9IFtdLCBpID0gdm9pZCAwICE9PSBuOyB3aGlsZSAoKGUgPSBlW3RdKSAmJiA5ICE9PSBlLm5vZGVUeXBlKSBpZiAoMSA9PT0gZS5ub2RlVHlwZSkgeyBpZiAoaSAmJiB3KGUpLmlzKG4pKSBicmVhazsgci5wdXNoKGUpIH0gcmV0dXJuIHIgfSwgayA9IGZ1bmN0aW9uIChlLCB0KSB7IGZvciAodmFyIG4gPSBbXTsgZTsgZSA9IGUubmV4dFNpYmxpbmcpMSA9PT0gZS5ub2RlVHlwZSAmJiBlICE9PSB0ICYmIG4ucHVzaChlKTsgcmV0dXJuIG4gfSwgQSA9IHcuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7IGZ1bmN0aW9uIEQoZSwgdCkgeyByZXR1cm4gZS5ub2RlTmFtZSAmJiBlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHQudG9Mb3dlckNhc2UoKSB9IHZhciBTID0gL148KFthLXpdW15cL1wwPjpceDIwXHRcclxuXGZdKilbXHgyMFx0XHJcblxmXSpcLz8+KD86PFwvXDE+fCkkL2k7IGZ1bmN0aW9uIEwoZSwgdCwgbikgeyByZXR1cm4gZyh0KSA/IHcuZ3JlcChlLCBmdW5jdGlvbiAoZSwgcikgeyByZXR1cm4gISF0LmNhbGwoZSwgciwgZSkgIT09IG4gfSkgOiB0Lm5vZGVUeXBlID8gdy5ncmVwKGUsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID09PSB0ICE9PSBuIH0pIDogInN0cmluZyIgIT0gdHlwZW9mIHQgPyB3LmdyZXAoZSwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHMuY2FsbCh0LCBlKSA+IC0xICE9PSBuIH0pIDogdy5maWx0ZXIodCwgZSwgbikgfSB3LmZpbHRlciA9IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHZhciByID0gdFswXTsgcmV0dXJuIG4gJiYgKGUgPSAiOm5vdCgiICsgZSArICIpIiksIDEgPT09IHQubGVuZ3RoICYmIDEgPT09IHIubm9kZVR5cGUgPyB3LmZpbmQubWF0Y2hlc1NlbGVjdG9yKHIsIGUpID8gW3JdIDogW10gOiB3LmZpbmQubWF0Y2hlcyhlLCB3LmdyZXAodCwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIDEgPT09IGUubm9kZVR5cGUgfSkpIH0sIHcuZm4uZXh0ZW5kKHsgZmluZDogZnVuY3Rpb24gKGUpIHsgdmFyIHQsIG4sIHIgPSB0aGlzLmxlbmd0aCwgaSA9IHRoaXM7IGlmICgic3RyaW5nIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHRoaXMucHVzaFN0YWNrKHcoZSkuZmlsdGVyKGZ1bmN0aW9uICgpIHsgZm9yICh0ID0gMDsgdCA8IHI7IHQrKylpZiAody5jb250YWlucyhpW3RdLCB0aGlzKSkgcmV0dXJuICEwIH0pKTsgZm9yIChuID0gdGhpcy5wdXNoU3RhY2soW10pLCB0ID0gMDsgdCA8IHI7IHQrKyl3LmZpbmQoZSwgaVt0XSwgbik7IHJldHVybiByID4gMSA/IHcudW5pcXVlU29ydChuKSA6IG4gfSwgZmlsdGVyOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcy5wdXNoU3RhY2soTCh0aGlzLCBlIHx8IFtdLCAhMSkpIH0sIG5vdDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHRoaXMucHVzaFN0YWNrKEwodGhpcywgZSB8fCBbXSwgITApKSB9LCBpczogZnVuY3Rpb24gKGUpIHsgcmV0dXJuICEhTCh0aGlzLCAic3RyaW5nIiA9PSB0eXBlb2YgZSAmJiBBLnRlc3QoZSkgPyB3KGUpIDogZSB8fCBbXSwgITEpLmxlbmd0aCB9IH0pOyB2YXIgaiwgcSA9IC9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKykpJC87ICh3LmZuLmluaXQgPSBmdW5jdGlvbiAoZSwgdCwgbikgeyB2YXIgaSwgbzsgaWYgKCFlKSByZXR1cm4gdGhpczsgaWYgKG4gPSBuIHx8IGosICJzdHJpbmciID09IHR5cGVvZiBlKSB7IGlmICghKGkgPSAiPCIgPT09IGVbMF0gJiYgIj4iID09PSBlW2UubGVuZ3RoIC0gMV0gJiYgZS5sZW5ndGggPj0gMyA/IFtudWxsLCBlLCBudWxsXSA6IHEuZXhlYyhlKSkgfHwgIWlbMV0gJiYgdCkgcmV0dXJuICF0IHx8IHQuanF1ZXJ5ID8gKHQgfHwgbikuZmluZChlKSA6IHRoaXMuY29uc3RydWN0b3IodCkuZmluZChlKTsgaWYgKGlbMV0pIHsgaWYgKHQgPSB0IGluc3RhbmNlb2YgdyA/IHRbMF0gOiB0LCB3Lm1lcmdlKHRoaXMsIHcucGFyc2VIVE1MKGlbMV0sIHQgJiYgdC5ub2RlVHlwZSA/IHQub3duZXJEb2N1bWVudCB8fCB0IDogciwgITApKSwgUy50ZXN0KGlbMV0pICYmIHcuaXNQbGFpbk9iamVjdCh0KSkgZm9yIChpIGluIHQpIGcodGhpc1tpXSkgPyB0aGlzW2ldKHRbaV0pIDogdGhpcy5hdHRyKGksIHRbaV0pOyByZXR1cm4gdGhpcyB9IHJldHVybiAobyA9IHIuZ2V0RWxlbWVudEJ5SWQoaVsyXSkpICYmICh0aGlzWzBdID0gbywgdGhpcy5sZW5ndGggPSAxKSwgdGhpcyB9IHJldHVybiBlLm5vZGVUeXBlID8gKHRoaXNbMF0gPSBlLCB0aGlzLmxlbmd0aCA9IDEsIHRoaXMpIDogZyhlKSA/IHZvaWQgMCAhPT0gbi5yZWFkeSA/IG4ucmVhZHkoZSkgOiBlKHcpIDogdy5tYWtlQXJyYXkoZSwgdGhpcykgfSkucHJvdG90eXBlID0gdy5mbiwgaiA9IHcocik7IHZhciBPID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sIFAgPSB7IGNoaWxkcmVuOiAhMCwgY29udGVudHM6ICEwLCBuZXh0OiAhMCwgcHJldjogITAgfTsgdy5mbi5leHRlbmQoeyBoYXM6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gdyhlLCB0aGlzKSwgbiA9IHQubGVuZ3RoOyByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24gKCkgeyBmb3IgKHZhciBlID0gMDsgZSA8IG47IGUrKylpZiAody5jb250YWlucyh0aGlzLCB0W2VdKSkgcmV0dXJuICEwIH0pIH0sIGNsb3Nlc3Q6IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBuLCByID0gMCwgaSA9IHRoaXMubGVuZ3RoLCBvID0gW10sIGEgPSAic3RyaW5nIiAhPSB0eXBlb2YgZSAmJiB3KGUpOyBpZiAoIUEudGVzdChlKSkgZm9yICg7IHIgPCBpOyByKyspZm9yIChuID0gdGhpc1tyXTsgbiAmJiBuICE9PSB0OyBuID0gbi5wYXJlbnROb2RlKWlmIChuLm5vZGVUeXBlIDwgMTEgJiYgKGEgPyBhLmluZGV4KG4pID4gLTEgOiAxID09PSBuLm5vZGVUeXBlICYmIHcuZmluZC5tYXRjaGVzU2VsZWN0b3IobiwgZSkpKSB7IG8ucHVzaChuKTsgYnJlYWsgfSByZXR1cm4gdGhpcy5wdXNoU3RhY2soby5sZW5ndGggPiAxID8gdy51bmlxdWVTb3J0KG8pIDogbykgfSwgaW5kZXg6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gInN0cmluZyIgPT0gdHlwZW9mIGUgPyBzLmNhbGwodyhlKSwgdGhpc1swXSkgOiBzLmNhbGwodGhpcywgZS5qcXVlcnkgPyBlWzBdIDogZSkgOiB0aGlzWzBdICYmIHRoaXNbMF0ucGFyZW50Tm9kZSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTEgfSwgYWRkOiBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gdGhpcy5wdXNoU3RhY2sody51bmlxdWVTb3J0KHcubWVyZ2UodGhpcy5nZXQoKSwgdyhlLCB0KSkpKSB9LCBhZGRCYWNrOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcy5hZGQobnVsbCA9PSBlID8gdGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSkgfSB9KTsgZnVuY3Rpb24gSChlLCB0KSB7IHdoaWxlICgoZSA9IGVbdF0pICYmIDEgIT09IGUubm9kZVR5cGUpOyByZXR1cm4gZSB9IHcuZWFjaCh7IHBhcmVudDogZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSBlLnBhcmVudE5vZGU7IHJldHVybiB0ICYmIDExICE9PSB0Lm5vZGVUeXBlID8gdCA6IG51bGwgfSwgcGFyZW50czogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIE4oZSwgInBhcmVudE5vZGUiKSB9LCBwYXJlbnRzVW50aWw6IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiBOKGUsICJwYXJlbnROb2RlIiwgbikgfSwgbmV4dDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIEgoZSwgIm5leHRTaWJsaW5nIikgfSwgcHJldjogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIEgoZSwgInByZXZpb3VzU2libGluZyIpIH0sIG5leHRBbGw6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBOKGUsICJuZXh0U2libGluZyIpIH0sIHByZXZBbGw6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBOKGUsICJwcmV2aW91c1NpYmxpbmciKSB9LCBuZXh0VW50aWw6IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiBOKGUsICJuZXh0U2libGluZyIsIG4pIH0sIHByZXZVbnRpbDogZnVuY3Rpb24gKGUsIHQsIG4pIHsgcmV0dXJuIE4oZSwgInByZXZpb3VzU2libGluZyIsIG4pIH0sIHNpYmxpbmdzOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gaygoZS5wYXJlbnROb2RlIHx8IHt9KS5maXJzdENoaWxkLCBlKSB9LCBjaGlsZHJlbjogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGsoZS5maXJzdENoaWxkKSB9LCBjb250ZW50czogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIEQoZSwgImlmcmFtZSIpID8gZS5jb250ZW50RG9jdW1lbnQgOiAoRChlLCAidGVtcGxhdGUiKSAmJiAoZSA9IGUuY29udGVudCB8fCBlKSwgdy5tZXJnZShbXSwgZS5jaGlsZE5vZGVzKSkgfSB9LCBmdW5jdGlvbiAoZSwgdCkgeyB3LmZuW2VdID0gZnVuY3Rpb24gKG4sIHIpIHsgdmFyIGkgPSB3Lm1hcCh0aGlzLCB0LCBuKTsgcmV0dXJuICJVbnRpbCIgIT09IGUuc2xpY2UoLTUpICYmIChyID0gbiksIHIgJiYgInN0cmluZyIgPT0gdHlwZW9mIHIgJiYgKGkgPSB3LmZpbHRlcihyLCBpKSksIHRoaXMubGVuZ3RoID4gMSAmJiAoUFtlXSB8fCB3LnVuaXF1ZVNvcnQoaSksIE8udGVzdChlKSAmJiBpLnJldmVyc2UoKSksIHRoaXMucHVzaFN0YWNrKGkpIH0gfSk7IHZhciBJID0gL1teXHgyMFx0XHJcblxmXSsvZzsgZnVuY3Rpb24gUihlKSB7IHZhciB0ID0ge307IHJldHVybiB3LmVhY2goZS5tYXRjaChJKSB8fCBbXSwgZnVuY3Rpb24gKGUsIG4pIHsgdFtuXSA9ICEwIH0pLCB0IH0gdy5DYWxsYmFja3MgPSBmdW5jdGlvbiAoZSkgeyBlID0gInN0cmluZyIgPT0gdHlwZW9mIGUgPyBSKGUpIDogdy5leHRlbmQoe30sIGUpOyB2YXIgdCwgbiwgciwgaSwgbyA9IFtdLCBhID0gW10sIHUgPSAtMSwgcyA9IGZ1bmN0aW9uICgpIHsgZm9yIChpID0gaSB8fCBlLm9uY2UsIHIgPSB0ID0gITA7IGEubGVuZ3RoOyB1ID0gLTEpIHsgbiA9IGEuc2hpZnQoKTsgd2hpbGUgKCsrdSA8IG8ubGVuZ3RoKSAhMSA9PT0gb1t1XS5hcHBseShuWzBdLCBuWzFdKSAmJiBlLnN0b3BPbkZhbHNlICYmICh1ID0gby5sZW5ndGgsIG4gPSAhMSkgfSBlLm1lbW9yeSB8fCAobiA9ICExKSwgdCA9ICExLCBpICYmIChvID0gbiA/IFtdIDogIiIpIH0sIGwgPSB7IGFkZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbyAmJiAobiAmJiAhdCAmJiAodSA9IG8ubGVuZ3RoIC0gMSwgYS5wdXNoKG4pKSwgZnVuY3Rpb24gdChuKSB7IHcuZWFjaChuLCBmdW5jdGlvbiAobiwgcikgeyBnKHIpID8gZS51bmlxdWUgJiYgbC5oYXMocikgfHwgby5wdXNoKHIpIDogciAmJiByLmxlbmd0aCAmJiAic3RyaW5nIiAhPT0gYihyKSAmJiB0KHIpIH0pIH0oYXJndW1lbnRzKSwgbiAmJiAhdCAmJiBzKCkpLCB0aGlzIH0sIHJlbW92ZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gdy5lYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG47IHdoaWxlICgobiA9IHcuaW5BcnJheSh0LCBvLCBuKSkgPiAtMSkgby5zcGxpY2UobiwgMSksIG4gPD0gdSAmJiB1LS0gfSksIHRoaXMgfSwgaGFzOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHcuaW5BcnJheShlLCBvKSA+IC0xIDogby5sZW5ndGggPiAwIH0sIGVtcHR5OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvICYmIChvID0gW10pLCB0aGlzIH0sIGRpc2FibGU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGkgPSBhID0gW10sIG8gPSBuID0gIiIsIHRoaXMgfSwgZGlzYWJsZWQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICFvIH0sIGxvY2s6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGkgPSBhID0gW10sIG4gfHwgdCB8fCAobyA9IG4gPSAiIiksIHRoaXMgfSwgbG9ja2VkOiBmdW5jdGlvbiAoKSB7IHJldHVybiAhIWkgfSwgZmlyZVdpdGg6IGZ1bmN0aW9uIChlLCBuKSB7IHJldHVybiBpIHx8IChuID0gW2UsIChuID0gbiB8fCBbXSkuc2xpY2UgPyBuLnNsaWNlKCkgOiBuXSwgYS5wdXNoKG4pLCB0IHx8IHMoKSksIHRoaXMgfSwgZmlyZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gbC5maXJlV2l0aCh0aGlzLCBhcmd1bWVudHMpLCB0aGlzIH0sIGZpcmVkOiBmdW5jdGlvbiAoKSB7IHJldHVybiAhIXIgfSB9OyByZXR1cm4gbCB9OyBmdW5jdGlvbiBCKGUpIHsgcmV0dXJuIGUgfSBmdW5jdGlvbiBNKGUpIHsgdGhyb3cgZSB9IGZ1bmN0aW9uIFcoZSwgdCwgbiwgcikgeyB2YXIgaTsgdHJ5IHsgZSAmJiBnKGkgPSBlLnByb21pc2UpID8gaS5jYWxsKGUpLmRvbmUodCkuZmFpbChuKSA6IGUgJiYgZyhpID0gZS50aGVuKSA/IGkuY2FsbChlLCB0LCBuKSA6IHQuYXBwbHkodm9pZCAwLCBbZV0uc2xpY2UocikpIH0gY2F0Y2ggKGUpIHsgbi5hcHBseSh2b2lkIDAsIFtlXSkgfSB9IHcuZXh0ZW5kKHsgRGVmZXJyZWQ6IGZ1bmN0aW9uICh0KSB7IHZhciBuID0gW1sibm90aWZ5IiwgInByb2dyZXNzIiwgdy5DYWxsYmFja3MoIm1lbW9yeSIpLCB3LkNhbGxiYWNrcygibWVtb3J5IiksIDJdLCBbInJlc29sdmUiLCAiZG9uZSIsIHcuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCB3LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwgMCwgInJlc29sdmVkIl0sIFsicmVqZWN0IiwgImZhaWwiLCB3LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwgdy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksIDEsICJyZWplY3RlZCJdXSwgciA9ICJwZW5kaW5nIiwgaSA9IHsgc3RhdGU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHIgfSwgYWx3YXlzOiBmdW5jdGlvbiAoKSB7IHJldHVybiBvLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyksIHRoaXMgfSwgImNhdGNoIjogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGkudGhlbihudWxsLCBlKSB9LCBwaXBlOiBmdW5jdGlvbiAoKSB7IHZhciBlID0gYXJndW1lbnRzOyByZXR1cm4gdy5EZWZlcnJlZChmdW5jdGlvbiAodCkgeyB3LmVhY2gobiwgZnVuY3Rpb24gKG4sIHIpIHsgdmFyIGkgPSBnKGVbcls0XV0pICYmIGVbcls0XV07IG9bclsxXV0oZnVuY3Rpb24gKCkgeyB2YXIgZSA9IGkgJiYgaS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyBlICYmIGcoZS5wcm9taXNlKSA/IGUucHJvbWlzZSgpLnByb2dyZXNzKHQubm90aWZ5KS5kb25lKHQucmVzb2x2ZSkuZmFpbCh0LnJlamVjdCkgOiB0W3JbMF0gKyAiV2l0aCJdKHRoaXMsIGkgPyBbZV0gOiBhcmd1bWVudHMpIH0pIH0pLCBlID0gbnVsbCB9KS5wcm9taXNlKCkgfSwgdGhlbjogZnVuY3Rpb24gKHQsIHIsIGkpIHsgdmFyIG8gPSAwOyBmdW5jdGlvbiBhKHQsIG4sIHIsIGkpIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHUgPSB0aGlzLCBzID0gYXJndW1lbnRzLCBsID0gZnVuY3Rpb24gKCkgeyB2YXIgZSwgbDsgaWYgKCEodCA8IG8pKSB7IGlmICgoZSA9IHIuYXBwbHkodSwgcykpID09PSBuLnByb21pc2UoKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uIik7IGwgPSBlICYmICgib2JqZWN0IiA9PSB0eXBlb2YgZSB8fCAiZnVuY3Rpb24iID09IHR5cGVvZiBlKSAmJiBlLnRoZW4sIGcobCkgPyBpID8gbC5jYWxsKGUsIGEobywgbiwgQiwgaSksIGEobywgbiwgTSwgaSkpIDogKG8rKyAsIGwuY2FsbChlLCBhKG8sIG4sIEIsIGkpLCBhKG8sIG4sIE0sIGkpLCBhKG8sIG4sIEIsIG4ubm90aWZ5V2l0aCkpKSA6IChyICE9PSBCICYmICh1ID0gdm9pZCAwLCBzID0gW2VdKSwgKGkgfHwgbi5yZXNvbHZlV2l0aCkodSwgcykpIH0gfSwgYyA9IGkgPyBsIDogZnVuY3Rpb24gKCkgeyB0cnkgeyBsKCkgfSBjYXRjaCAoZSkgeyB3LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgJiYgdy5EZWZlcnJlZC5leGNlcHRpb25Ib29rKGUsIGMuc3RhY2tUcmFjZSksIHQgKyAxID49IG8gJiYgKHIgIT09IE0gJiYgKHUgPSB2b2lkIDAsIHMgPSBbZV0pLCBuLnJlamVjdFdpdGgodSwgcykpIH0gfTsgdCA/IGMoKSA6ICh3LkRlZmVycmVkLmdldFN0YWNrSG9vayAmJiAoYy5zdGFja1RyYWNlID0gdy5EZWZlcnJlZC5nZXRTdGFja0hvb2soKSksIGUuc2V0VGltZW91dChjKSkgfSB9IHJldHVybiB3LkRlZmVycmVkKGZ1bmN0aW9uIChlKSB7IG5bMF1bM10uYWRkKGEoMCwgZSwgZyhpKSA/IGkgOiBCLCBlLm5vdGlmeVdpdGgpKSwgblsxXVszXS5hZGQoYSgwLCBlLCBnKHQpID8gdCA6IEIpKSwgblsyXVszXS5hZGQoYSgwLCBlLCBnKHIpID8gciA6IE0pKSB9KS5wcm9taXNlKCkgfSwgcHJvbWlzZTogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG51bGwgIT0gZSA/IHcuZXh0ZW5kKGUsIGkpIDogaSB9IH0sIG8gPSB7fTsgcmV0dXJuIHcuZWFjaChuLCBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgYSA9IHRbMl0sIHUgPSB0WzVdOyBpW3RbMV1dID0gYS5hZGQsIHUgJiYgYS5hZGQoZnVuY3Rpb24gKCkgeyByID0gdSB9LCBuWzMgLSBlXVsyXS5kaXNhYmxlLCBuWzMgLSBlXVszXS5kaXNhYmxlLCBuWzBdWzJdLmxvY2ssIG5bMF1bM10ubG9jayksIGEuYWRkKHRbM10uZmlyZSksIG9bdFswXV0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvW3RbMF0gKyAiV2l0aCJdKHRoaXMgPT09IG8gPyB2b2lkIDAgOiB0aGlzLCBhcmd1bWVudHMpLCB0aGlzIH0sIG9bdFswXSArICJXaXRoIl0gPSBhLmZpcmVXaXRoIH0pLCBpLnByb21pc2UobyksIHQgJiYgdC5jYWxsKG8sIG8pLCBvIH0sIHdoZW46IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gYXJndW1lbnRzLmxlbmd0aCwgbiA9IHQsIHIgPSBBcnJheShuKSwgaSA9IG8uY2FsbChhcmd1bWVudHMpLCBhID0gdy5EZWZlcnJlZCgpLCB1ID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGZ1bmN0aW9uIChuKSB7IHJbZV0gPSB0aGlzLCBpW2VdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBvLmNhbGwoYXJndW1lbnRzKSA6IG4sIC0tdCB8fCBhLnJlc29sdmVXaXRoKHIsIGkpIH0gfTsgaWYgKHQgPD0gMSAmJiAoVyhlLCBhLmRvbmUodShuKSkucmVzb2x2ZSwgYS5yZWplY3QsICF0KSwgInBlbmRpbmciID09PSBhLnN0YXRlKCkgfHwgZyhpW25dICYmIGlbbl0udGhlbikpKSByZXR1cm4gYS50aGVuKCk7IHdoaWxlIChuLS0pIFcoaVtuXSwgdShuKSwgYS5yZWplY3QpOyByZXR1cm4gYS5wcm9taXNlKCkgfSB9KTsgdmFyICQgPSAvXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLzsgdy5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVuY3Rpb24gKHQsIG4pIHsgZS5jb25zb2xlICYmIGUuY29uc29sZS53YXJuICYmIHQgJiYgJC50ZXN0KHQubmFtZSkgJiYgZS5jb25zb2xlLndhcm4oImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246ICIgKyB0Lm1lc3NhZ2UsIHQuc3RhY2ssIG4pIH0sIHcucmVhZHlFeGNlcHRpb24gPSBmdW5jdGlvbiAodCkgeyBlLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0aHJvdyB0IH0pIH07IHZhciBGID0gdy5EZWZlcnJlZCgpOyB3LmZuLnJlYWR5ID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIEYudGhlbihlKVsiY2F0Y2giXShmdW5jdGlvbiAoZSkgeyB3LnJlYWR5RXhjZXB0aW9uKGUpIH0pLCB0aGlzIH0sIHcuZXh0ZW5kKHsgaXNSZWFkeTogITEsIHJlYWR5V2FpdDogMSwgcmVhZHk6IGZ1bmN0aW9uIChlKSB7ICghMCA9PT0gZSA/IC0tdy5yZWFkeVdhaXQgOiB3LmlzUmVhZHkpIHx8ICh3LmlzUmVhZHkgPSAhMCwgITAgIT09IGUgJiYgLS13LnJlYWR5V2FpdCA+IDAgfHwgRi5yZXNvbHZlV2l0aChyLCBbd10pKSB9IH0pLCB3LnJlYWR5LnRoZW4gPSBGLnRoZW47IGZ1bmN0aW9uIHooKSB7IHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIHopLCBlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLCB6KSwgdy5yZWFkeSgpIH0gImNvbXBsZXRlIiA9PT0gci5yZWFkeVN0YXRlIHx8ICJsb2FkaW5nIiAhPT0gci5yZWFkeVN0YXRlICYmICFyLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCA/IGUuc2V0VGltZW91dCh3LnJlYWR5KSA6IChyLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCB6KSwgZS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgeikpOyB2YXIgXyA9IGZ1bmN0aW9uIChlLCB0LCBuLCByLCBpLCBvLCBhKSB7IHZhciB1ID0gMCwgcyA9IGUubGVuZ3RoLCBsID0gbnVsbCA9PSBuOyBpZiAoIm9iamVjdCIgPT09IGIobikpIHsgaSA9ICEwOyBmb3IgKHUgaW4gbikgXyhlLCB0LCB1LCBuW3VdLCAhMCwgbywgYSkgfSBlbHNlIGlmICh2b2lkIDAgIT09IHIgJiYgKGkgPSAhMCwgZyhyKSB8fCAoYSA9ICEwKSwgbCAmJiAoYSA/ICh0LmNhbGwoZSwgciksIHQgPSBudWxsKSA6IChsID0gdCwgdCA9IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiBsLmNhbGwodyhlKSwgbikgfSkpLCB0KSkgZm9yICg7IHUgPCBzOyB1KyspdChlW3VdLCBuLCBhID8gciA6IHIuY2FsbChlW3VdLCB1LCB0KGVbdV0sIG4pKSk7IHJldHVybiBpID8gZSA6IGwgPyB0LmNhbGwoZSkgOiBzID8gdChlWzBdLCBuKSA6IG8gfSwgVSA9IC9eLW1zLS8sIFYgPSAvLShbYS16XSkvZzsgZnVuY3Rpb24gWChlLCB0KSB7IHJldHVybiB0LnRvVXBwZXJDYXNlKCkgfSBmdW5jdGlvbiBRKGUpIHsgcmV0dXJuIGUucmVwbGFjZShVLCAibXMtIikucmVwbGFjZShWLCBYKSB9IHZhciBZID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIDEgPT09IGUubm9kZVR5cGUgfHwgOSA9PT0gZS5ub2RlVHlwZSB8fCAhK2Uubm9kZVR5cGUgfTsgZnVuY3Rpb24gRygpIHsgdGhpcy5leHBhbmRvID0gdy5leHBhbmRvICsgRy51aWQrKyB9IEcudWlkID0gMSwgRy5wcm90b3R5cGUgPSB7IGNhY2hlOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IGVbdGhpcy5leHBhbmRvXTsgcmV0dXJuIHQgfHwgKHQgPSB7fSwgWShlKSAmJiAoZS5ub2RlVHlwZSA/IGVbdGhpcy5leHBhbmRvXSA9IHQgOiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgdGhpcy5leHBhbmRvLCB7IHZhbHVlOiB0LCBjb25maWd1cmFibGU6ICEwIH0pKSksIHQgfSwgc2V0OiBmdW5jdGlvbiAoZSwgdCwgbikgeyB2YXIgciwgaSA9IHRoaXMuY2FjaGUoZSk7IGlmICgic3RyaW5nIiA9PSB0eXBlb2YgdCkgaVtRKHQpXSA9IG47IGVsc2UgZm9yIChyIGluIHQpIGlbUShyKV0gPSB0W3JdOyByZXR1cm4gaSB9LCBnZXQ6IGZ1bmN0aW9uIChlLCB0KSB7IHJldHVybiB2b2lkIDAgPT09IHQgPyB0aGlzLmNhY2hlKGUpIDogZVt0aGlzLmV4cGFuZG9dICYmIGVbdGhpcy5leHBhbmRvXVtRKHQpXSB9LCBhY2Nlc3M6IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiB2b2lkIDAgPT09IHQgfHwgdCAmJiAic3RyaW5nIiA9PSB0eXBlb2YgdCAmJiB2b2lkIDAgPT09IG4gPyB0aGlzLmdldChlLCB0KSA6ICh0aGlzLnNldChlLCB0LCBuKSwgdm9pZCAwICE9PSBuID8gbiA6IHQpIH0sIHJlbW92ZTogZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4sIHIgPSBlW3RoaXMuZXhwYW5kb107IGlmICh2b2lkIDAgIT09IHIpIHsgaWYgKHZvaWQgMCAhPT0gdCkgeyBuID0gKHQgPSBBcnJheS5pc0FycmF5KHQpID8gdC5tYXAoUSkgOiAodCA9IFEodCkpIGluIHIgPyBbdF0gOiB0Lm1hdGNoKEkpIHx8IFtdKS5sZW5ndGg7IHdoaWxlIChuLS0pIGRlbGV0ZSByW3Rbbl1dIH0gKHZvaWQgMCA9PT0gdCB8fCB3LmlzRW1wdHlPYmplY3QocikpICYmIChlLm5vZGVUeXBlID8gZVt0aGlzLmV4cGFuZG9dID0gdm9pZCAwIDogZGVsZXRlIGVbdGhpcy5leHBhbmRvXSkgfSB9LCBoYXNEYXRhOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IGVbdGhpcy5leHBhbmRvXTsgcmV0dXJuIHZvaWQgMCAhPT0gdCAmJiAhdy5pc0VtcHR5T2JqZWN0KHQpIH0gfTsgdmFyIEsgPSBuZXcgRywgSiA9IG5ldyBHLCBaID0gL14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLywgZWUgPSAvW0EtWl0vZzsgZnVuY3Rpb24gdGUoZSkgeyByZXR1cm4gInRydWUiID09PSBlIHx8ICJmYWxzZSIgIT09IGUgJiYgKCJudWxsIiA9PT0gZSA/IG51bGwgOiBlID09PSArZSArICIiID8gK2UgOiBaLnRlc3QoZSkgPyBKU09OLnBhcnNlKGUpIDogZSkgfSBmdW5jdGlvbiBuZShlLCB0LCBuKSB7IHZhciByOyBpZiAodm9pZCAwID09PSBuICYmIDEgPT09IGUubm9kZVR5cGUpIGlmIChyID0gImRhdGEtIiArIHQucmVwbGFjZShlZSwgIi0kJiIpLnRvTG93ZXJDYXNlKCksICJzdHJpbmciID09IHR5cGVvZiAobiA9IGUuZ2V0QXR0cmlidXRlKHIpKSkgeyB0cnkgeyBuID0gdGUobikgfSBjYXRjaCAoZSkgeyB9IEouc2V0KGUsIHQsIG4pIH0gZWxzZSBuID0gdm9pZCAwOyByZXR1cm4gbiB9IHcuZXh0ZW5kKHsgaGFzRGF0YTogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIEouaGFzRGF0YShlKSB8fCBLLmhhc0RhdGEoZSkgfSwgZGF0YTogZnVuY3Rpb24gKGUsIHQsIG4pIHsgcmV0dXJuIEouYWNjZXNzKGUsIHQsIG4pIH0sIHJlbW92ZURhdGE6IGZ1bmN0aW9uIChlLCB0KSB7IEoucmVtb3ZlKGUsIHQpIH0sIF9kYXRhOiBmdW5jdGlvbiAoZSwgdCwgbikgeyByZXR1cm4gSy5hY2Nlc3MoZSwgdCwgbikgfSwgX3JlbW92ZURhdGE6IGZ1bmN0aW9uIChlLCB0KSB7IEsucmVtb3ZlKGUsIHQpIH0gfSksIHcuZm4uZXh0ZW5kKHsgZGF0YTogZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4sIHIsIGksIG8gPSB0aGlzWzBdLCBhID0gbyAmJiBvLmF0dHJpYnV0ZXM7IGlmICh2b2lkIDAgPT09IGUpIHsgaWYgKHRoaXMubGVuZ3RoICYmIChpID0gSi5nZXQobyksIDEgPT09IG8ubm9kZVR5cGUgJiYgIUsuZ2V0KG8sICJoYXNEYXRhQXR0cnMiKSkpIHsgbiA9IGEubGVuZ3RoOyB3aGlsZSAobi0tKSBhW25dICYmIDAgPT09IChyID0gYVtuXS5uYW1lKS5pbmRleE9mKCJkYXRhLSIpICYmIChyID0gUShyLnNsaWNlKDUpKSwgbmUobywgciwgaVtyXSkpOyBLLnNldChvLCAiaGFzRGF0YUF0dHJzIiwgITApIH0gcmV0dXJuIGkgfSByZXR1cm4gIm9iamVjdCIgPT0gdHlwZW9mIGUgPyB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyBKLnNldCh0aGlzLCBlKSB9KSA6IF8odGhpcywgZnVuY3Rpb24gKHQpIHsgdmFyIG47IGlmIChvICYmIHZvaWQgMCA9PT0gdCkgeyBpZiAodm9pZCAwICE9PSAobiA9IEouZ2V0KG8sIGUpKSkgcmV0dXJuIG47IGlmICh2b2lkIDAgIT09IChuID0gbmUobywgZSkpKSByZXR1cm4gbiB9IGVsc2UgdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgSi5zZXQodGhpcywgZSwgdCkgfSkgfSwgbnVsbCwgdCwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsICEwKSB9LCByZW1vdmVEYXRhOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgSi5yZW1vdmUodGhpcywgZSkgfSkgfSB9KSwgdy5leHRlbmQoeyBxdWV1ZTogZnVuY3Rpb24gKGUsIHQsIG4pIHsgdmFyIHI7IGlmIChlKSByZXR1cm4gdCA9ICh0IHx8ICJmeCIpICsgInF1ZXVlIiwgciA9IEsuZ2V0KGUsIHQpLCBuICYmICghciB8fCBBcnJheS5pc0FycmF5KG4pID8gciA9IEsuYWNjZXNzKGUsIHQsIHcubWFrZUFycmF5KG4pKSA6IHIucHVzaChuKSksIHIgfHwgW10gfSwgZGVxdWV1ZTogZnVuY3Rpb24gKGUsIHQpIHsgdCA9IHQgfHwgImZ4IjsgdmFyIG4gPSB3LnF1ZXVlKGUsIHQpLCByID0gbi5sZW5ndGgsIGkgPSBuLnNoaWZ0KCksIG8gPSB3Ll9xdWV1ZUhvb2tzKGUsIHQpLCBhID0gZnVuY3Rpb24gKCkgeyB3LmRlcXVldWUoZSwgdCkgfTsgImlucHJvZ3Jlc3MiID09PSBpICYmIChpID0gbi5zaGlmdCgpLCByLS0pLCBpICYmICgiZngiID09PSB0ICYmIG4udW5zaGlmdCgiaW5wcm9ncmVzcyIpLCBkZWxldGUgby5zdG9wLCBpLmNhbGwoZSwgYSwgbykpLCAhciAmJiBvICYmIG8uZW1wdHkuZmlyZSgpIH0sIF9xdWV1ZUhvb2tzOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiA9IHQgKyAicXVldWVIb29rcyI7IHJldHVybiBLLmdldChlLCBuKSB8fCBLLmFjY2VzcyhlLCBuLCB7IGVtcHR5OiB3LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24gKCkgeyBLLnJlbW92ZShlLCBbdCArICJxdWV1ZSIsIG5dKSB9KSB9KSB9IH0pLCB3LmZuLmV4dGVuZCh7IHF1ZXVlOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiA9IDI7IHJldHVybiAic3RyaW5nIiAhPSB0eXBlb2YgZSAmJiAodCA9IGUsIGUgPSAiZngiLCBuLS0pLCBhcmd1bWVudHMubGVuZ3RoIDwgbiA/IHcucXVldWUodGhpc1swXSwgZSkgOiB2b2lkIDAgPT09IHQgPyB0aGlzIDogdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIG4gPSB3LnF1ZXVlKHRoaXMsIGUsIHQpOyB3Ll9xdWV1ZUhvb2tzKHRoaXMsIGUpLCAiZngiID09PSBlICYmICJpbnByb2dyZXNzIiAhPT0gblswXSAmJiB3LmRlcXVldWUodGhpcywgZSkgfSkgfSwgZGVxdWV1ZTogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IHcuZGVxdWV1ZSh0aGlzLCBlKSB9KSB9LCBjbGVhclF1ZXVlOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcy5xdWV1ZShlIHx8ICJmeCIsIFtdKSB9LCBwcm9taXNlOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiwgciA9IDEsIGkgPSB3LkRlZmVycmVkKCksIG8gPSB0aGlzLCBhID0gdGhpcy5sZW5ndGgsIHUgPSBmdW5jdGlvbiAoKSB7IC0tciB8fCBpLnJlc29sdmVXaXRoKG8sIFtvXSkgfTsgInN0cmluZyIgIT0gdHlwZW9mIGUgJiYgKHQgPSBlLCBlID0gdm9pZCAwKSwgZSA9IGUgfHwgImZ4Ijsgd2hpbGUgKGEtLSkgKG4gPSBLLmdldChvW2FdLCBlICsgInF1ZXVlSG9va3MiKSkgJiYgbi5lbXB0eSAmJiAocisrICwgbi5lbXB0eS5hZGQodSkpOyByZXR1cm4gdSgpLCBpLnByb21pc2UodCkgfSB9KTsgdmFyIHJlID0gL1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsIGllID0gbmV3IFJlZ0V4cCgiXig/OihbKy1dKT18KSgiICsgcmUgKyAiKShbYS16JV0qKSQiLCAiaSIpLCBvZSA9IFsiVG9wIiwgIlJpZ2h0IiwgIkJvdHRvbSIsICJMZWZ0Il0sIGFlID0gZnVuY3Rpb24gKGUsIHQpIHsgcmV0dXJuICJub25lIiA9PT0gKGUgPSB0IHx8IGUpLnN0eWxlLmRpc3BsYXkgfHwgIiIgPT09IGUuc3R5bGUuZGlzcGxheSAmJiB3LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCwgZSkgJiYgIm5vbmUiID09PSB3LmNzcyhlLCAiZGlzcGxheSIpIH0sIHVlID0gZnVuY3Rpb24gKGUsIHQsIG4sIHIpIHsgdmFyIGksIG8sIGEgPSB7fTsgZm9yIChvIGluIHQpIGFbb10gPSBlLnN0eWxlW29dLCBlLnN0eWxlW29dID0gdFtvXTsgaSA9IG4uYXBwbHkoZSwgciB8fCBbXSk7IGZvciAobyBpbiB0KSBlLnN0eWxlW29dID0gYVtvXTsgcmV0dXJuIGkgfTsgZnVuY3Rpb24gc2UoZSwgdCwgbiwgcikgeyB2YXIgaSwgbywgYSA9IDIwLCB1ID0gciA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHIuY3VyKCkgfSA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHcuY3NzKGUsIHQsICIiKSB9LCBzID0gdSgpLCBsID0gbiAmJiBuWzNdIHx8ICh3LmNzc051bWJlclt0XSA/ICIiIDogInB4IiksIGMgPSAody5jc3NOdW1iZXJbdF0gfHwgInB4IiAhPT0gbCAmJiArcykgJiYgaWUuZXhlYyh3LmNzcyhlLCB0KSk7IGlmIChjICYmIGNbM10gIT09IGwpIHsgcyAvPSAyLCBsID0gbCB8fCBjWzNdLCBjID0gK3MgfHwgMTsgd2hpbGUgKGEtLSkgdy5zdHlsZShlLCB0LCBjICsgbCksICgxIC0gbykgKiAoMSAtIChvID0gdSgpIC8gcyB8fCAuNSkpIDw9IDAgJiYgKGEgPSAwKSwgYyAvPSBvOyBjICo9IDIsIHcuc3R5bGUoZSwgdCwgYyArIGwpLCBuID0gbiB8fCBbXSB9IHJldHVybiBuICYmIChjID0gK2MgfHwgK3MgfHwgMCwgaSA9IG5bMV0gPyBjICsgKG5bMV0gKyAxKSAqIG5bMl0gOiArblsyXSwgciAmJiAoci51bml0ID0gbCwgci5zdGFydCA9IGMsIHIuZW5kID0gaSkpLCBpIH0gdmFyIGxlID0ge307IGZ1bmN0aW9uIGNlKGUpIHsgdmFyIHQsIG4gPSBlLm93bmVyRG9jdW1lbnQsIHIgPSBlLm5vZGVOYW1lLCBpID0gbGVbcl07IHJldHVybiBpIHx8ICh0ID0gbi5ib2R5LmFwcGVuZENoaWxkKG4uY3JlYXRlRWxlbWVudChyKSksIGkgPSB3LmNzcyh0LCAiZGlzcGxheSIpLCB0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksICJub25lIiA9PT0gaSAmJiAoaSA9ICJibG9jayIpLCBsZVtyXSA9IGksIGkpIH0gZnVuY3Rpb24gZmUoZSwgdCkgeyBmb3IgKHZhciBuLCByLCBpID0gW10sIG8gPSAwLCBhID0gZS5sZW5ndGg7IG8gPCBhOyBvKyspKHIgPSBlW29dKS5zdHlsZSAmJiAobiA9IHIuc3R5bGUuZGlzcGxheSwgdCA/ICgibm9uZSIgPT09IG4gJiYgKGlbb10gPSBLLmdldChyLCAiZGlzcGxheSIpIHx8IG51bGwsIGlbb10gfHwgKHIuc3R5bGUuZGlzcGxheSA9ICIiKSksICIiID09PSByLnN0eWxlLmRpc3BsYXkgJiYgYWUocikgJiYgKGlbb10gPSBjZShyKSkpIDogIm5vbmUiICE9PSBuICYmIChpW29dID0gIm5vbmUiLCBLLnNldChyLCAiZGlzcGxheSIsIG4pKSk7IGZvciAobyA9IDA7IG8gPCBhOyBvKyspbnVsbCAhPSBpW29dICYmIChlW29dLnN0eWxlLmRpc3BsYXkgPSBpW29dKTsgcmV0dXJuIGUgfSB3LmZuLmV4dGVuZCh7IHNob3c6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZlKHRoaXMsICEwKSB9LCBoaWRlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBmZSh0aGlzKSB9LCB0b2dnbGU6IGZ1bmN0aW9uIChlKSB7IHJldHVybiAiYm9vbGVhbiIgPT0gdHlwZW9mIGUgPyBlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKSA6IHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IGFlKHRoaXMpID8gdyh0aGlzKS5zaG93KCkgOiB3KHRoaXMpLmhpZGUoKSB9KSB9IH0pOyB2YXIgZGUgPSAvXig/OmNoZWNrYm94fHJhZGlvKSQvaSwgcGUgPSAvPChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKykvaSwgaGUgPSAvXiR8Xm1vZHVsZSR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksIGdlID0geyBvcHRpb246IFsxLCAiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsICI8L3NlbGVjdD4iXSwgdGhlYWQ6IFsxLCAiPHRhYmxlPiIsICI8L3RhYmxlPiJdLCBjb2w6IFsyLCAiPHRhYmxlPjxjb2xncm91cD4iLCAiPC9jb2xncm91cD48L3RhYmxlPiJdLCB0cjogWzIsICI8dGFibGU+PHRib2R5PiIsICI8L3Rib2R5PjwvdGFibGU+Il0sIHRkOiBbMywgIjx0YWJsZT48dGJvZHk+PHRyPiIsICI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSwgX2RlZmF1bHQ6IFswLCAiIiwgIiJdIH07IGdlLm9wdGdyb3VwID0gZ2Uub3B0aW9uLCBnZS50Ym9keSA9IGdlLnRmb290ID0gZ2UuY29sZ3JvdXAgPSBnZS5jYXB0aW9uID0gZ2UudGhlYWQsIGdlLnRoID0gZ2UudGQ7IGZ1bmN0aW9uIHZlKGUsIHQpIHsgdmFyIG47IHJldHVybiBuID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPyBlLmdldEVsZW1lbnRzQnlUYWdOYW1lKHQgfHwgIioiKSA6ICJ1bmRlZmluZWQiICE9IHR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGwgPyBlLnF1ZXJ5U2VsZWN0b3JBbGwodCB8fCAiKiIpIDogW10sIHZvaWQgMCA9PT0gdCB8fCB0ICYmIEQoZSwgdCkgPyB3Lm1lcmdlKFtlXSwgbikgOiBuIH0gZnVuY3Rpb24geWUoZSwgdCkgeyBmb3IgKHZhciBuID0gMCwgciA9IGUubGVuZ3RoOyBuIDwgcjsgbisrKUsuc2V0KGVbbl0sICJnbG9iYWxFdmFsIiwgIXQgfHwgSy5nZXQodFtuXSwgImdsb2JhbEV2YWwiKSkgfSB2YXIgbWUgPSAvPHwmIz9cdys7LzsgZnVuY3Rpb24gYmUoZSwgdCwgbiwgciwgaSkgeyBmb3IgKHZhciBvLCBhLCB1LCBzLCBsLCBjLCBmID0gdC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGQgPSBbXSwgcCA9IDAsIGggPSBlLmxlbmd0aDsgcCA8IGg7IHArKylpZiAoKG8gPSBlW3BdKSB8fCAwID09PSBvKSBpZiAoIm9iamVjdCIgPT09IGIobykpIHcubWVyZ2UoZCwgby5ub2RlVHlwZSA/IFtvXSA6IG8pOyBlbHNlIGlmIChtZS50ZXN0KG8pKSB7IGEgPSBhIHx8IGYuYXBwZW5kQ2hpbGQodC5jcmVhdGVFbGVtZW50KCJkaXYiKSksIHUgPSAocGUuZXhlYyhvKSB8fCBbIiIsICIiXSlbMV0udG9Mb3dlckNhc2UoKSwgcyA9IGdlW3VdIHx8IGdlLl9kZWZhdWx0LCBhLmlubmVySFRNTCA9IHNbMV0gKyB3Lmh0bWxQcmVmaWx0ZXIobykgKyBzWzJdLCBjID0gc1swXTsgd2hpbGUgKGMtLSkgYSA9IGEubGFzdENoaWxkOyB3Lm1lcmdlKGQsIGEuY2hpbGROb2RlcyksIChhID0gZi5maXJzdENoaWxkKS50ZXh0Q29udGVudCA9ICIiIH0gZWxzZSBkLnB1c2godC5jcmVhdGVUZXh0Tm9kZShvKSk7IGYudGV4dENvbnRlbnQgPSAiIiwgcCA9IDA7IHdoaWxlIChvID0gZFtwKytdKSBpZiAociAmJiB3LmluQXJyYXkobywgcikgPiAtMSkgaSAmJiBpLnB1c2gobyk7IGVsc2UgaWYgKGwgPSB3LmNvbnRhaW5zKG8ub3duZXJEb2N1bWVudCwgbyksIGEgPSB2ZShmLmFwcGVuZENoaWxkKG8pLCAic2NyaXB0IiksIGwgJiYgeWUoYSksIG4pIHsgYyA9IDA7IHdoaWxlIChvID0gYVtjKytdKSBoZS50ZXN0KG8udHlwZSB8fCAiIikgJiYgbi5wdXNoKG8pIH0gcmV0dXJuIGYgfSAhZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLmFwcGVuZENoaWxkKHIuY3JlYXRlRWxlbWVudCgiZGl2IikpLCB0ID0gci5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOyB0LnNldEF0dHJpYnV0ZSgidHlwZSIsICJyYWRpbyIpLCB0LnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsICJjaGVja2VkIiksIHQuc2V0QXR0cmlidXRlKCJuYW1lIiwgInQiKSwgZS5hcHBlbmRDaGlsZCh0KSwgaC5jaGVja0Nsb25lID0gZS5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsIGUuaW5uZXJIVE1MID0gIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT4iLCBoLm5vQ2xvbmVDaGVja2VkID0gISFlLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZSB9KCk7IHZhciB4ZSA9IHIuZG9jdW1lbnRFbGVtZW50LCB3ZSA9IC9ea2V5LywgQ2UgPSAvXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sIFRlID0gL14oW14uXSopKD86XC4oLispfCkvOyBmdW5jdGlvbiBFZSgpIHsgcmV0dXJuICEwIH0gZnVuY3Rpb24gTmUoKSB7IHJldHVybiAhMSB9IGZ1bmN0aW9uIGtlKCkgeyB0cnkgeyByZXR1cm4gci5hY3RpdmVFbGVtZW50IH0gY2F0Y2ggKGUpIHsgfSB9IGZ1bmN0aW9uIEFlKGUsIHQsIG4sIHIsIGksIG8pIHsgdmFyIGEsIHU7IGlmICgib2JqZWN0IiA9PSB0eXBlb2YgdCkgeyAic3RyaW5nIiAhPSB0eXBlb2YgbiAmJiAociA9IHIgfHwgbiwgbiA9IHZvaWQgMCk7IGZvciAodSBpbiB0KSBBZShlLCB1LCBuLCByLCB0W3VdLCBvKTsgcmV0dXJuIGUgfSBpZiAobnVsbCA9PSByICYmIG51bGwgPT0gaSA/IChpID0gbiwgciA9IG4gPSB2b2lkIDApIDogbnVsbCA9PSBpICYmICgic3RyaW5nIiA9PSB0eXBlb2YgbiA/IChpID0gciwgciA9IHZvaWQgMCkgOiAoaSA9IHIsIHIgPSBuLCBuID0gdm9pZCAwKSksICExID09PSBpKSBpID0gTmU7IGVsc2UgaWYgKCFpKSByZXR1cm4gZTsgcmV0dXJuIDEgPT09IG8gJiYgKGEgPSBpLCAoaSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiB3KCkub2ZmKGUpLCBhLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfSkuZ3VpZCA9IGEuZ3VpZCB8fCAoYS5ndWlkID0gdy5ndWlkKyspKSwgZS5lYWNoKGZ1bmN0aW9uICgpIHsgdy5ldmVudC5hZGQodGhpcywgdCwgaSwgciwgbikgfSkgfSB3LmV2ZW50ID0geyBnbG9iYWw6IHt9LCBhZGQ6IGZ1bmN0aW9uIChlLCB0LCBuLCByLCBpKSB7IHZhciBvLCBhLCB1LCBzLCBsLCBjLCBmLCBkLCBwLCBoLCBnLCB2ID0gSy5nZXQoZSk7IGlmICh2KSB7IG4uaGFuZGxlciAmJiAobiA9IChvID0gbikuaGFuZGxlciwgaSA9IG8uc2VsZWN0b3IpLCBpICYmIHcuZmluZC5tYXRjaGVzU2VsZWN0b3IoeGUsIGkpLCBuLmd1aWQgfHwgKG4uZ3VpZCA9IHcuZ3VpZCsrKSwgKHMgPSB2LmV2ZW50cykgfHwgKHMgPSB2LmV2ZW50cyA9IHt9KSwgKGEgPSB2LmhhbmRsZSkgfHwgKGEgPSB2LmhhbmRsZSA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiAidW5kZWZpbmVkIiAhPSB0eXBlb2YgdyAmJiB3LmV2ZW50LnRyaWdnZXJlZCAhPT0gdC50eXBlID8gdy5ldmVudC5kaXNwYXRjaC5hcHBseShlLCBhcmd1bWVudHMpIDogdm9pZCAwIH0pLCBsID0gKHQgPSAodCB8fCAiIikubWF0Y2goSSkgfHwgWyIiXSkubGVuZ3RoOyB3aGlsZSAobC0tKSBwID0gZyA9ICh1ID0gVGUuZXhlYyh0W2xdKSB8fCBbXSlbMV0sIGggPSAodVsyXSB8fCAiIikuc3BsaXQoIi4iKS5zb3J0KCksIHAgJiYgKGYgPSB3LmV2ZW50LnNwZWNpYWxbcF0gfHwge30sIHAgPSAoaSA/IGYuZGVsZWdhdGVUeXBlIDogZi5iaW5kVHlwZSkgfHwgcCwgZiA9IHcuZXZlbnQuc3BlY2lhbFtwXSB8fCB7fSwgYyA9IHcuZXh0ZW5kKHsgdHlwZTogcCwgb3JpZ1R5cGU6IGcsIGRhdGE6IHIsIGhhbmRsZXI6IG4sIGd1aWQ6IG4uZ3VpZCwgc2VsZWN0b3I6IGksIG5lZWRzQ29udGV4dDogaSAmJiB3LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoaSksIG5hbWVzcGFjZTogaC5qb2luKCIuIikgfSwgbyksIChkID0gc1twXSkgfHwgKChkID0gc1twXSA9IFtdKS5kZWxlZ2F0ZUNvdW50ID0gMCwgZi5zZXR1cCAmJiAhMSAhPT0gZi5zZXR1cC5jYWxsKGUsIHIsIGgsIGEpIHx8IGUuYWRkRXZlbnRMaXN0ZW5lciAmJiBlLmFkZEV2ZW50TGlzdGVuZXIocCwgYSkpLCBmLmFkZCAmJiAoZi5hZGQuY2FsbChlLCBjKSwgYy5oYW5kbGVyLmd1aWQgfHwgKGMuaGFuZGxlci5ndWlkID0gbi5ndWlkKSksIGkgPyBkLnNwbGljZShkLmRlbGVnYXRlQ291bnQrKywgMCwgYykgOiBkLnB1c2goYyksIHcuZXZlbnQuZ2xvYmFsW3BdID0gITApIH0gfSwgcmVtb3ZlOiBmdW5jdGlvbiAoZSwgdCwgbiwgciwgaSkgeyB2YXIgbywgYSwgdSwgcywgbCwgYywgZiwgZCwgcCwgaCwgZywgdiA9IEsuaGFzRGF0YShlKSAmJiBLLmdldChlKTsgaWYgKHYgJiYgKHMgPSB2LmV2ZW50cykpIHsgbCA9ICh0ID0gKHQgfHwgIiIpLm1hdGNoKEkpIHx8IFsiIl0pLmxlbmd0aDsgd2hpbGUgKGwtLSkgaWYgKHUgPSBUZS5leGVjKHRbbF0pIHx8IFtdLCBwID0gZyA9IHVbMV0sIGggPSAodVsyXSB8fCAiIikuc3BsaXQoIi4iKS5zb3J0KCksIHApIHsgZiA9IHcuZXZlbnQuc3BlY2lhbFtwXSB8fCB7fSwgZCA9IHNbcCA9IChyID8gZi5kZWxlZ2F0ZVR5cGUgOiBmLmJpbmRUeXBlKSB8fCBwXSB8fCBbXSwgdSA9IHVbMl0gJiYgbmV3IFJlZ0V4cCgiKF58XFwuKSIgKyBoLmpvaW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwufCQpIiksIGEgPSBvID0gZC5sZW5ndGg7IHdoaWxlIChvLS0pIGMgPSBkW29dLCAhaSAmJiBnICE9PSBjLm9yaWdUeXBlIHx8IG4gJiYgbi5ndWlkICE9PSBjLmd1aWQgfHwgdSAmJiAhdS50ZXN0KGMubmFtZXNwYWNlKSB8fCByICYmIHIgIT09IGMuc2VsZWN0b3IgJiYgKCIqKiIgIT09IHIgfHwgIWMuc2VsZWN0b3IpIHx8IChkLnNwbGljZShvLCAxKSwgYy5zZWxlY3RvciAmJiBkLmRlbGVnYXRlQ291bnQtLSAsIGYucmVtb3ZlICYmIGYucmVtb3ZlLmNhbGwoZSwgYykpOyBhICYmICFkLmxlbmd0aCAmJiAoZi50ZWFyZG93biAmJiAhMSAhPT0gZi50ZWFyZG93bi5jYWxsKGUsIGgsIHYuaGFuZGxlKSB8fCB3LnJlbW92ZUV2ZW50KGUsIHAsIHYuaGFuZGxlKSwgZGVsZXRlIHNbcF0pIH0gZWxzZSBmb3IgKHAgaW4gcykgdy5ldmVudC5yZW1vdmUoZSwgcCArIHRbbF0sIG4sIHIsICEwKTsgdy5pc0VtcHR5T2JqZWN0KHMpICYmIEsucmVtb3ZlKGUsICJoYW5kbGUgZXZlbnRzIikgfSB9LCBkaXNwYXRjaDogZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSB3LmV2ZW50LmZpeChlKSwgbiwgciwgaSwgbywgYSwgdSwgcyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSwgbCA9IChLLmdldCh0aGlzLCAiZXZlbnRzIikgfHwge30pW3QudHlwZV0gfHwgW10sIGMgPSB3LmV2ZW50LnNwZWNpYWxbdC50eXBlXSB8fCB7fTsgZm9yIChzWzBdID0gdCwgbiA9IDE7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspc1tuXSA9IGFyZ3VtZW50c1tuXTsgaWYgKHQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzLCAhYy5wcmVEaXNwYXRjaCB8fCAhMSAhPT0gYy5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsIHQpKSB7IHUgPSB3LmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcywgdCwgbCksIG4gPSAwOyB3aGlsZSAoKG8gPSB1W24rK10pICYmICF0LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHsgdC5jdXJyZW50VGFyZ2V0ID0gby5lbGVtLCByID0gMDsgd2hpbGUgKChhID0gby5oYW5kbGVyc1tyKytdKSAmJiAhdC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSB0LnJuYW1lc3BhY2UgJiYgIXQucm5hbWVzcGFjZS50ZXN0KGEubmFtZXNwYWNlKSB8fCAodC5oYW5kbGVPYmogPSBhLCB0LmRhdGEgPSBhLmRhdGEsIHZvaWQgMCAhPT0gKGkgPSAoKHcuZXZlbnQuc3BlY2lhbFthLm9yaWdUeXBlXSB8fCB7fSkuaGFuZGxlIHx8IGEuaGFuZGxlcikuYXBwbHkoby5lbGVtLCBzKSkgJiYgITEgPT09ICh0LnJlc3VsdCA9IGkpICYmICh0LnByZXZlbnREZWZhdWx0KCksIHQuc3RvcFByb3BhZ2F0aW9uKCkpKSB9IHJldHVybiBjLnBvc3REaXNwYXRjaCAmJiBjLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsIHQpLCB0LnJlc3VsdCB9IH0sIGhhbmRsZXJzOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiwgciwgaSwgbywgYSwgdSA9IFtdLCBzID0gdC5kZWxlZ2F0ZUNvdW50LCBsID0gZS50YXJnZXQ7IGlmIChzICYmIGwubm9kZVR5cGUgJiYgISgiY2xpY2siID09PSBlLnR5cGUgJiYgZS5idXR0b24gPj0gMSkpIGZvciAoOyBsICE9PSB0aGlzOyBsID0gbC5wYXJlbnROb2RlIHx8IHRoaXMpaWYgKDEgPT09IGwubm9kZVR5cGUgJiYgKCJjbGljayIgIT09IGUudHlwZSB8fCAhMCAhPT0gbC5kaXNhYmxlZCkpIHsgZm9yIChvID0gW10sIGEgPSB7fSwgbiA9IDA7IG4gPCBzOyBuKyspdm9pZCAwID09PSBhW2kgPSAociA9IHRbbl0pLnNlbGVjdG9yICsgIiAiXSAmJiAoYVtpXSA9IHIubmVlZHNDb250ZXh0ID8gdyhpLCB0aGlzKS5pbmRleChsKSA+IC0xIDogdy5maW5kKGksIHRoaXMsIG51bGwsIFtsXSkubGVuZ3RoKSwgYVtpXSAmJiBvLnB1c2gocik7IG8ubGVuZ3RoICYmIHUucHVzaCh7IGVsZW06IGwsIGhhbmRsZXJzOiBvIH0pIH0gcmV0dXJuIGwgPSB0aGlzLCBzIDwgdC5sZW5ndGggJiYgdS5wdXNoKHsgZWxlbTogbCwgaGFuZGxlcnM6IHQuc2xpY2UocykgfSksIHUgfSwgYWRkUHJvcDogZnVuY3Rpb24gKGUsIHQpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHcuRXZlbnQucHJvdG90eXBlLCBlLCB7IGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCBnZXQ6IGcodCkgPyBmdW5jdGlvbiAoKSB7IGlmICh0aGlzLm9yaWdpbmFsRXZlbnQpIHJldHVybiB0KHRoaXMub3JpZ2luYWxFdmVudCkgfSA6IGZ1bmN0aW9uICgpIHsgaWYgKHRoaXMub3JpZ2luYWxFdmVudCkgcmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFtlXSB9LCBzZXQ6IGZ1bmN0aW9uICh0KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBlLCB7IGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAsIHZhbHVlOiB0IH0pIH0gfSkgfSwgZml4OiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZVt3LmV4cGFuZG9dID8gZSA6IG5ldyB3LkV2ZW50KGUpIH0sIHNwZWNpYWw6IHsgbG9hZDogeyBub0J1YmJsZTogITAgfSwgZm9jdXM6IHsgdHJpZ2dlcjogZnVuY3Rpb24gKCkgeyBpZiAodGhpcyAhPT0ga2UoKSAmJiB0aGlzLmZvY3VzKSByZXR1cm4gdGhpcy5mb2N1cygpLCAhMSB9LCBkZWxlZ2F0ZVR5cGU6ICJmb2N1c2luIiB9LCBibHVyOiB7IHRyaWdnZXI6IGZ1bmN0aW9uICgpIHsgaWYgKHRoaXMgPT09IGtlKCkgJiYgdGhpcy5ibHVyKSByZXR1cm4gdGhpcy5ibHVyKCksICExIH0sIGRlbGVnYXRlVHlwZTogImZvY3Vzb3V0IiB9LCBjbGljazogeyB0cmlnZ2VyOiBmdW5jdGlvbiAoKSB7IGlmICgiY2hlY2tib3giID09PSB0aGlzLnR5cGUgJiYgdGhpcy5jbGljayAmJiBEKHRoaXMsICJpbnB1dCIpKSByZXR1cm4gdGhpcy5jbGljaygpLCAhMSB9LCBfZGVmYXVsdDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIEQoZS50YXJnZXQsICJhIikgfSB9LCBiZWZvcmV1bmxvYWQ6IHsgcG9zdERpc3BhdGNoOiBmdW5jdGlvbiAoZSkgeyB2b2lkIDAgIT09IGUucmVzdWx0ICYmIGUub3JpZ2luYWxFdmVudCAmJiAoZS5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZS5yZXN1bHQpIH0gfSB9IH0sIHcucmVtb3ZlRXZlbnQgPSBmdW5jdGlvbiAoZSwgdCwgbikgeyBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgJiYgZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsIG4pIH0sIHcuRXZlbnQgPSBmdW5jdGlvbiAoZSwgdCkgeyBpZiAoISh0aGlzIGluc3RhbmNlb2Ygdy5FdmVudCkpIHJldHVybiBuZXcgdy5FdmVudChlLCB0KTsgZSAmJiBlLnR5cGUgPyAodGhpcy5vcmlnaW5hbEV2ZW50ID0gZSwgdGhpcy50eXBlID0gZS50eXBlLCB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGUuZGVmYXVsdFByZXZlbnRlZCB8fCB2b2lkIDAgPT09IGUuZGVmYXVsdFByZXZlbnRlZCAmJiAhMSA9PT0gZS5yZXR1cm5WYWx1ZSA/IEVlIDogTmUsIHRoaXMudGFyZ2V0ID0gZS50YXJnZXQgJiYgMyA9PT0gZS50YXJnZXQubm9kZVR5cGUgPyBlLnRhcmdldC5wYXJlbnROb2RlIDogZS50YXJnZXQsIHRoaXMuY3VycmVudFRhcmdldCA9IGUuY3VycmVudFRhcmdldCwgdGhpcy5yZWxhdGVkVGFyZ2V0ID0gZS5yZWxhdGVkVGFyZ2V0KSA6IHRoaXMudHlwZSA9IGUsIHQgJiYgdy5leHRlbmQodGhpcywgdCksIHRoaXMudGltZVN0YW1wID0gZSAmJiBlLnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpLCB0aGlzW3cuZXhwYW5kb10gPSAhMCB9LCB3LkV2ZW50LnByb3RvdHlwZSA9IHsgY29uc3RydWN0b3I6IHcuRXZlbnQsIGlzRGVmYXVsdFByZXZlbnRlZDogTmUsIGlzUHJvcGFnYXRpb25TdG9wcGVkOiBOZSwgaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IE5lLCBpc1NpbXVsYXRlZDogITEsIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OyB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IEVlLCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICYmIGUucHJldmVudERlZmF1bHQoKSB9LCBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7IHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBFZSwgZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCAmJiBlLnN0b3BQcm9wYWdhdGlvbigpIH0sIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDsgdGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IEVlLCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICYmIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksIHRoaXMuc3RvcFByb3BhZ2F0aW9uKCkgfSB9LCB3LmVhY2goeyBhbHRLZXk6ICEwLCBidWJibGVzOiAhMCwgY2FuY2VsYWJsZTogITAsIGNoYW5nZWRUb3VjaGVzOiAhMCwgY3RybEtleTogITAsIGRldGFpbDogITAsIGV2ZW50UGhhc2U6ICEwLCBtZXRhS2V5OiAhMCwgcGFnZVg6ICEwLCBwYWdlWTogITAsIHNoaWZ0S2V5OiAhMCwgdmlldzogITAsICJjaGFyIjogITAsIGNoYXJDb2RlOiAhMCwga2V5OiAhMCwga2V5Q29kZTogITAsIGJ1dHRvbjogITAsIGJ1dHRvbnM6ICEwLCBjbGllbnRYOiAhMCwgY2xpZW50WTogITAsIG9mZnNldFg6ICEwLCBvZmZzZXRZOiAhMCwgcG9pbnRlcklkOiAhMCwgcG9pbnRlclR5cGU6ICEwLCBzY3JlZW5YOiAhMCwgc2NyZWVuWTogITAsIHRhcmdldFRvdWNoZXM6ICEwLCB0b0VsZW1lbnQ6ICEwLCB0b3VjaGVzOiAhMCwgd2hpY2g6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gZS5idXR0b247IHJldHVybiBudWxsID09IGUud2hpY2ggJiYgd2UudGVzdChlLnR5cGUpID8gbnVsbCAhPSBlLmNoYXJDb2RlID8gZS5jaGFyQ29kZSA6IGUua2V5Q29kZSA6ICFlLndoaWNoICYmIHZvaWQgMCAhPT0gdCAmJiBDZS50ZXN0KGUudHlwZSkgPyAxICYgdCA/IDEgOiAyICYgdCA/IDMgOiA0ICYgdCA/IDIgOiAwIDogZS53aGljaCB9IH0sIHcuZXZlbnQuYWRkUHJvcCksIHcuZWFjaCh7IG1vdXNlZW50ZXI6ICJtb3VzZW92ZXIiLCBtb3VzZWxlYXZlOiAibW91c2VvdXQiLCBwb2ludGVyZW50ZXI6ICJwb2ludGVyb3ZlciIsIHBvaW50ZXJsZWF2ZTogInBvaW50ZXJvdXQiIH0sIGZ1bmN0aW9uIChlLCB0KSB7IHcuZXZlbnQuc3BlY2lhbFtlXSA9IHsgZGVsZWdhdGVUeXBlOiB0LCBiaW5kVHlwZTogdCwgaGFuZGxlOiBmdW5jdGlvbiAoZSkgeyB2YXIgbiwgciA9IHRoaXMsIGkgPSBlLnJlbGF0ZWRUYXJnZXQsIG8gPSBlLmhhbmRsZU9iajsgcmV0dXJuIGkgJiYgKGkgPT09IHIgfHwgdy5jb250YWlucyhyLCBpKSkgfHwgKGUudHlwZSA9IG8ub3JpZ1R5cGUsIG4gPSBvLmhhbmRsZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgZS50eXBlID0gdCksIG4gfSB9IH0pLCB3LmZuLmV4dGVuZCh7IG9uOiBmdW5jdGlvbiAoZSwgdCwgbiwgcikgeyByZXR1cm4gQWUodGhpcywgZSwgdCwgbiwgcikgfSwgb25lOiBmdW5jdGlvbiAoZSwgdCwgbiwgcikgeyByZXR1cm4gQWUodGhpcywgZSwgdCwgbiwgciwgMSkgfSwgb2ZmOiBmdW5jdGlvbiAoZSwgdCwgbikgeyB2YXIgciwgaTsgaWYgKGUgJiYgZS5wcmV2ZW50RGVmYXVsdCAmJiBlLmhhbmRsZU9iaikgcmV0dXJuIHIgPSBlLmhhbmRsZU9iaiwgdyhlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1lc3BhY2UgPyByLm9yaWdUeXBlICsgIi4iICsgci5uYW1lc3BhY2UgOiByLm9yaWdUeXBlLCByLnNlbGVjdG9yLCByLmhhbmRsZXIpLCB0aGlzOyBpZiAoIm9iamVjdCIgPT0gdHlwZW9mIGUpIHsgZm9yIChpIGluIGUpIHRoaXMub2ZmKGksIHQsIGVbaV0pOyByZXR1cm4gdGhpcyB9IHJldHVybiAhMSAhPT0gdCAmJiAiZnVuY3Rpb24iICE9IHR5cGVvZiB0IHx8IChuID0gdCwgdCA9IHZvaWQgMCksICExID09PSBuICYmIChuID0gTmUpLCB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyB3LmV2ZW50LnJlbW92ZSh0aGlzLCBlLCBuLCB0KSB9KSB9IH0pOyB2YXIgRGUgPSAvPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKilbXj5dKilcLz4vZ2ksIFNlID0gLzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksIExlID0gL2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksIGplID0gL15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nOyBmdW5jdGlvbiBxZShlLCB0KSB7IHJldHVybiBEKGUsICJ0YWJsZSIpICYmIEQoMTEgIT09IHQubm9kZVR5cGUgPyB0IDogdC5maXJzdENoaWxkLCAidHIiKSA/IHcoZSkuY2hpbGRyZW4oInRib2R5IilbMF0gfHwgZSA6IGUgfSBmdW5jdGlvbiBPZShlKSB7IHJldHVybiBlLnR5cGUgPSAobnVsbCAhPT0gZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkgKyAiLyIgKyBlLnR5cGUsIGUgfSBmdW5jdGlvbiBQZShlKSB7IHJldHVybiAidHJ1ZS8iID09PSAoZS50eXBlIHx8ICIiKS5zbGljZSgwLCA1KSA/IGUudHlwZSA9IGUudHlwZS5zbGljZSg1KSA6IGUucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksIGUgfSBmdW5jdGlvbiBIZShlLCB0KSB7IHZhciBuLCByLCBpLCBvLCBhLCB1LCBzLCBsOyBpZiAoMSA9PT0gdC5ub2RlVHlwZSkgeyBpZiAoSy5oYXNEYXRhKGUpICYmIChvID0gSy5hY2Nlc3MoZSksIGEgPSBLLnNldCh0LCBvKSwgbCA9IG8uZXZlbnRzKSkgeyBkZWxldGUgYS5oYW5kbGUsIGEuZXZlbnRzID0ge307IGZvciAoaSBpbiBsKSBmb3IgKG4gPSAwLCByID0gbFtpXS5sZW5ndGg7IG4gPCByOyBuKyspdy5ldmVudC5hZGQodCwgaSwgbFtpXVtuXSkgfSBKLmhhc0RhdGEoZSkgJiYgKHUgPSBKLmFjY2VzcyhlKSwgcyA9IHcuZXh0ZW5kKHt9LCB1KSwgSi5zZXQodCwgcykpIH0gfSBmdW5jdGlvbiBJZShlLCB0KSB7IHZhciBuID0gdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyAiaW5wdXQiID09PSBuICYmIGRlLnRlc3QoZS50eXBlKSA/IHQuY2hlY2tlZCA9IGUuY2hlY2tlZCA6ICJpbnB1dCIgIT09IG4gJiYgInRleHRhcmVhIiAhPT0gbiB8fCAodC5kZWZhdWx0VmFsdWUgPSBlLmRlZmF1bHRWYWx1ZSkgfSBmdW5jdGlvbiBSZShlLCB0LCBuLCByKSB7IHQgPSBhLmFwcGx5KFtdLCB0KTsgdmFyIGksIG8sIHUsIHMsIGwsIGMsIGYgPSAwLCBkID0gZS5sZW5ndGgsIHAgPSBkIC0gMSwgdiA9IHRbMF0sIHkgPSBnKHYpOyBpZiAoeSB8fCBkID4gMSAmJiAic3RyaW5nIiA9PSB0eXBlb2YgdiAmJiAhaC5jaGVja0Nsb25lICYmIExlLnRlc3QodikpIHJldHVybiBlLmVhY2goZnVuY3Rpb24gKGkpIHsgdmFyIG8gPSBlLmVxKGkpOyB5ICYmICh0WzBdID0gdi5jYWxsKHRoaXMsIGksIG8uaHRtbCgpKSksIFJlKG8sIHQsIG4sIHIpIH0pOyBpZiAoZCAmJiAoaSA9IGJlKHQsIGVbMF0ub3duZXJEb2N1bWVudCwgITEsIGUsIHIpLCBvID0gaS5maXJzdENoaWxkLCAxID09PSBpLmNoaWxkTm9kZXMubGVuZ3RoICYmIChpID0gbyksIG8gfHwgcikpIHsgZm9yIChzID0gKHUgPSB3Lm1hcCh2ZShpLCAic2NyaXB0IiksIE9lKSkubGVuZ3RoOyBmIDwgZDsgZisrKWwgPSBpLCBmICE9PSBwICYmIChsID0gdy5jbG9uZShsLCAhMCwgITApLCBzICYmIHcubWVyZ2UodSwgdmUobCwgInNjcmlwdCIpKSksIG4uY2FsbChlW2ZdLCBsLCBmKTsgaWYgKHMpIGZvciAoYyA9IHVbdS5sZW5ndGggLSAxXS5vd25lckRvY3VtZW50LCB3Lm1hcCh1LCBQZSksIGYgPSAwOyBmIDwgczsgZisrKWwgPSB1W2ZdLCBoZS50ZXN0KGwudHlwZSB8fCAiIikgJiYgIUsuYWNjZXNzKGwsICJnbG9iYWxFdmFsIikgJiYgdy5jb250YWlucyhjLCBsKSAmJiAobC5zcmMgJiYgIm1vZHVsZSIgIT09IChsLnR5cGUgfHwgIiIpLnRvTG93ZXJDYXNlKCkgPyB3Ll9ldmFsVXJsICYmIHcuX2V2YWxVcmwobC5zcmMpIDogbShsLnRleHRDb250ZW50LnJlcGxhY2UoamUsICIiKSwgYywgbCkpIH0gcmV0dXJuIGUgfSBmdW5jdGlvbiBCZShlLCB0LCBuKSB7IGZvciAodmFyIHIsIGkgPSB0ID8gdy5maWx0ZXIodCwgZSkgOiBlLCBvID0gMDsgbnVsbCAhPSAociA9IGlbb10pOyBvKyspbiB8fCAxICE9PSByLm5vZGVUeXBlIHx8IHcuY2xlYW5EYXRhKHZlKHIpKSwgci5wYXJlbnROb2RlICYmIChuICYmIHcuY29udGFpbnMoci5vd25lckRvY3VtZW50LCByKSAmJiB5ZSh2ZShyLCAic2NyaXB0IikpLCByLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocikpOyByZXR1cm4gZSB9IHcuZXh0ZW5kKHsgaHRtbFByZWZpbHRlcjogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUucmVwbGFjZShEZSwgIjwkMT48LyQyPiIpIH0sIGNsb25lOiBmdW5jdGlvbiAoZSwgdCwgbikgeyB2YXIgciwgaSwgbywgYSwgdSA9IGUuY2xvbmVOb2RlKCEwKSwgcyA9IHcuY29udGFpbnMoZS5vd25lckRvY3VtZW50LCBlKTsgaWYgKCEoaC5ub0Nsb25lQ2hlY2tlZCB8fCAxICE9PSBlLm5vZGVUeXBlICYmIDExICE9PSBlLm5vZGVUeXBlIHx8IHcuaXNYTUxEb2MoZSkpKSBmb3IgKGEgPSB2ZSh1KSwgciA9IDAsIGkgPSAobyA9IHZlKGUpKS5sZW5ndGg7IHIgPCBpOyByKyspSWUob1tyXSwgYVtyXSk7IGlmICh0KSBpZiAobikgZm9yIChvID0gbyB8fCB2ZShlKSwgYSA9IGEgfHwgdmUodSksIHIgPSAwLCBpID0gby5sZW5ndGg7IHIgPCBpOyByKyspSGUob1tyXSwgYVtyXSk7IGVsc2UgSGUoZSwgdSk7IHJldHVybiAoYSA9IHZlKHUsICJzY3JpcHQiKSkubGVuZ3RoID4gMCAmJiB5ZShhLCAhcyAmJiB2ZShlLCAic2NyaXB0IikpLCB1IH0sIGNsZWFuRGF0YTogZnVuY3Rpb24gKGUpIHsgZm9yICh2YXIgdCwgbiwgciwgaSA9IHcuZXZlbnQuc3BlY2lhbCwgbyA9IDA7IHZvaWQgMCAhPT0gKG4gPSBlW29dKTsgbysrKWlmIChZKG4pKSB7IGlmICh0ID0gbltLLmV4cGFuZG9dKSB7IGlmICh0LmV2ZW50cykgZm9yIChyIGluIHQuZXZlbnRzKSBpW3JdID8gdy5ldmVudC5yZW1vdmUobiwgcikgOiB3LnJlbW92ZUV2ZW50KG4sIHIsIHQuaGFuZGxlKTsgbltLLmV4cGFuZG9dID0gdm9pZCAwIH0gbltKLmV4cGFuZG9dICYmIChuW0ouZXhwYW5kb10gPSB2b2lkIDApIH0gfSB9KSwgdy5mbi5leHRlbmQoeyBkZXRhY2g6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBCZSh0aGlzLCBlLCAhMCkgfSwgcmVtb3ZlOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gQmUodGhpcywgZSkgfSwgdGV4dDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIF8odGhpcywgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHZvaWQgMCA9PT0gZSA/IHcudGV4dCh0aGlzKSA6IHRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uICgpIHsgMSAhPT0gdGhpcy5ub2RlVHlwZSAmJiAxMSAhPT0gdGhpcy5ub2RlVHlwZSAmJiA5ICE9PSB0aGlzLm5vZGVUeXBlIHx8ICh0aGlzLnRleHRDb250ZW50ID0gZSkgfSkgfSwgbnVsbCwgZSwgYXJndW1lbnRzLmxlbmd0aCkgfSwgYXBwZW5kOiBmdW5jdGlvbiAoKSB7IHJldHVybiBSZSh0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIChlKSB7IDEgIT09IHRoaXMubm9kZVR5cGUgJiYgMTEgIT09IHRoaXMubm9kZVR5cGUgJiYgOSAhPT0gdGhpcy5ub2RlVHlwZSB8fCBxZSh0aGlzLCBlKS5hcHBlbmRDaGlsZChlKSB9KSB9LCBwcmVwZW5kOiBmdW5jdGlvbiAoKSB7IHJldHVybiBSZSh0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIChlKSB7IGlmICgxID09PSB0aGlzLm5vZGVUeXBlIHx8IDExID09PSB0aGlzLm5vZGVUeXBlIHx8IDkgPT09IHRoaXMubm9kZVR5cGUpIHsgdmFyIHQgPSBxZSh0aGlzLCBlKTsgdC5pbnNlcnRCZWZvcmUoZSwgdC5maXJzdENoaWxkKSB9IH0pIH0sIGJlZm9yZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmUodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiAoZSkgeyB0aGlzLnBhcmVudE5vZGUgJiYgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLCB0aGlzKSB9KSB9LCBhZnRlcjogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmUodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiAoZSkgeyB0aGlzLnBhcmVudE5vZGUgJiYgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLCB0aGlzLm5leHRTaWJsaW5nKSB9KSB9LCBlbXB0eTogZnVuY3Rpb24gKCkgeyBmb3IgKHZhciBlLCB0ID0gMDsgbnVsbCAhPSAoZSA9IHRoaXNbdF0pOyB0KyspMSA9PT0gZS5ub2RlVHlwZSAmJiAody5jbGVhbkRhdGEodmUoZSwgITEpKSwgZS50ZXh0Q29udGVudCA9ICIiKTsgcmV0dXJuIHRoaXMgfSwgY2xvbmU6IGZ1bmN0aW9uIChlLCB0KSB7IHJldHVybiBlID0gbnVsbCAhPSBlICYmIGUsIHQgPSBudWxsID09IHQgPyBlIDogdCwgdGhpcy5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdy5jbG9uZSh0aGlzLCBlLCB0KSB9KSB9LCBodG1sOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gXyh0aGlzLCBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IHRoaXNbMF0gfHwge30sIG4gPSAwLCByID0gdGhpcy5sZW5ndGg7IGlmICh2b2lkIDAgPT09IGUgJiYgMSA9PT0gdC5ub2RlVHlwZSkgcmV0dXJuIHQuaW5uZXJIVE1MOyBpZiAoInN0cmluZyIgPT0gdHlwZW9mIGUgJiYgIVNlLnRlc3QoZSkgJiYgIWdlWyhwZS5leGVjKGUpIHx8IFsiIiwgIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSkgeyBlID0gdy5odG1sUHJlZmlsdGVyKGUpOyB0cnkgeyBmb3IgKDsgbiA8IHI7IG4rKykxID09PSAodCA9IHRoaXNbbl0gfHwge30pLm5vZGVUeXBlICYmICh3LmNsZWFuRGF0YSh2ZSh0LCAhMSkpLCB0LmlubmVySFRNTCA9IGUpOyB0ID0gMCB9IGNhdGNoIChlKSB7IH0gfSB0ICYmIHRoaXMuZW1wdHkoKS5hcHBlbmQoZSkgfSwgbnVsbCwgZSwgYXJndW1lbnRzLmxlbmd0aCkgfSwgcmVwbGFjZVdpdGg6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSBbXTsgcmV0dXJuIFJlKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24gKHQpIHsgdmFyIG4gPSB0aGlzLnBhcmVudE5vZGU7IHcuaW5BcnJheSh0aGlzLCBlKSA8IDAgJiYgKHcuY2xlYW5EYXRhKHZlKHRoaXMpKSwgbiAmJiBuLnJlcGxhY2VDaGlsZCh0LCB0aGlzKSkgfSwgZSkgfSB9KSwgdy5lYWNoKHsgYXBwZW5kVG86ICJhcHBlbmQiLCBwcmVwZW5kVG86ICJwcmVwZW5kIiwgaW5zZXJ0QmVmb3JlOiAiYmVmb3JlIiwgaW5zZXJ0QWZ0ZXI6ICJhZnRlciIsIHJlcGxhY2VBbGw6ICJyZXBsYWNlV2l0aCIgfSwgZnVuY3Rpb24gKGUsIHQpIHsgdy5mbltlXSA9IGZ1bmN0aW9uIChlKSB7IGZvciAodmFyIG4sIHIgPSBbXSwgaSA9IHcoZSksIG8gPSBpLmxlbmd0aCAtIDEsIGEgPSAwOyBhIDw9IG87IGErKyluID0gYSA9PT0gbyA/IHRoaXMgOiB0aGlzLmNsb25lKCEwKSwgdyhpW2FdKVt0XShuKSwgdS5hcHBseShyLCBuLmdldCgpKTsgcmV0dXJuIHRoaXMucHVzaFN0YWNrKHIpIH0gfSk7IHZhciBNZSA9IG5ldyBSZWdFeHAoIl4oIiArIHJlICsgIikoPyFweClbYS16JV0rJCIsICJpIiksIFdlID0gZnVuY3Rpb24gKHQpIHsgdmFyIG4gPSB0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7IHJldHVybiBuICYmIG4ub3BlbmVyIHx8IChuID0gZSksIG4uZ2V0Q29tcHV0ZWRTdHlsZSh0KSB9LCAkZSA9IG5ldyBSZWdFeHAob2Uuam9pbigifCIpLCAiaSIpOyAhZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiB0KCkgeyBpZiAoYykgeyBsLnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4O21hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MCIsIGMuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7bWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo2MCU7dG9wOjElIiwgeGUuYXBwZW5kQ2hpbGQobCkuYXBwZW5kQ2hpbGQoYyk7IHZhciB0ID0gZS5nZXRDb21wdXRlZFN0eWxlKGMpOyBpID0gIjElIiAhPT0gdC50b3AsIHMgPSAxMiA9PT0gbih0Lm1hcmdpbkxlZnQpLCBjLnN0eWxlLnJpZ2h0ID0gIjYwJSIsIHUgPSAzNiA9PT0gbih0LnJpZ2h0KSwgbyA9IDM2ID09PSBuKHQud2lkdGgpLCBjLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIiwgYSA9IDM2ID09PSBjLm9mZnNldFdpZHRoIHx8ICJhYnNvbHV0ZSIsIHhlLnJlbW92ZUNoaWxkKGwpLCBjID0gbnVsbCB9IH0gZnVuY3Rpb24gbihlKSB7IHJldHVybiBNYXRoLnJvdW5kKHBhcnNlRmxvYXQoZSkpIH0gdmFyIGksIG8sIGEsIHUsIHMsIGwgPSByLmNyZWF0ZUVsZW1lbnQoImRpdiIpLCBjID0gci5jcmVhdGVFbGVtZW50KCJkaXYiKTsgYy5zdHlsZSAmJiAoYy5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9ICJjb250ZW50LWJveCIsIGMuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9ICIiLCBoLmNsZWFyQ2xvbmVTdHlsZSA9ICJjb250ZW50LWJveCIgPT09IGMuc3R5bGUuYmFja2dyb3VuZENsaXAsIHcuZXh0ZW5kKGgsIHsgYm94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHQoKSwgbyB9LCBwaXhlbEJveFN0eWxlczogZnVuY3Rpb24gKCkgeyByZXR1cm4gdCgpLCB1IH0sIHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHQoKSwgaSB9LCByZWxpYWJsZU1hcmdpbkxlZnQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHQoKSwgcyB9LCBzY3JvbGxib3hTaXplOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0KCksIGEgfSB9KSkgfSgpOyBmdW5jdGlvbiBGZShlLCB0LCBuKSB7IHZhciByLCBpLCBvLCBhLCB1ID0gZS5zdHlsZTsgcmV0dXJuIChuID0gbiB8fCBXZShlKSkgJiYgKCIiICE9PSAoYSA9IG4uZ2V0UHJvcGVydHlWYWx1ZSh0KSB8fCBuW3RdKSB8fCB3LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCwgZSkgfHwgKGEgPSB3LnN0eWxlKGUsIHQpKSwgIWgucGl4ZWxCb3hTdHlsZXMoKSAmJiBNZS50ZXN0KGEpICYmICRlLnRlc3QodCkgJiYgKHIgPSB1LndpZHRoLCBpID0gdS5taW5XaWR0aCwgbyA9IHUubWF4V2lkdGgsIHUubWluV2lkdGggPSB1Lm1heFdpZHRoID0gdS53aWR0aCA9IGEsIGEgPSBuLndpZHRoLCB1LndpZHRoID0gciwgdS5taW5XaWR0aCA9IGksIHUubWF4V2lkdGggPSBvKSksIHZvaWQgMCAhPT0gYSA/IGEgKyAiIiA6IGEgfSBmdW5jdGlvbiB6ZShlLCB0KSB7IHJldHVybiB7IGdldDogZnVuY3Rpb24gKCkgeyBpZiAoIWUoKSkgcmV0dXJuICh0aGlzLmdldCA9IHQpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IGRlbGV0ZSB0aGlzLmdldCB9IH0gfSB2YXIgX2UgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sIFVlID0gL14tLS8sIFZlID0geyBwb3NpdGlvbjogImFic29sdXRlIiwgdmlzaWJpbGl0eTogImhpZGRlbiIsIGRpc3BsYXk6ICJibG9jayIgfSwgWGUgPSB7IGxldHRlclNwYWNpbmc6ICIwIiwgZm9udFdlaWdodDogIjQwMCIgfSwgUWUgPSBbIldlYmtpdCIsICJNb3oiLCAibXMiXSwgWWUgPSByLmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlOyBmdW5jdGlvbiBHZShlKSB7IGlmIChlIGluIFllKSByZXR1cm4gZTsgdmFyIHQgPSBlWzBdLnRvVXBwZXJDYXNlKCkgKyBlLnNsaWNlKDEpLCBuID0gUWUubGVuZ3RoOyB3aGlsZSAobi0tKSBpZiAoKGUgPSBRZVtuXSArIHQpIGluIFllKSByZXR1cm4gZSB9IGZ1bmN0aW9uIEtlKGUpIHsgdmFyIHQgPSB3LmNzc1Byb3BzW2VdOyByZXR1cm4gdCB8fCAodCA9IHcuY3NzUHJvcHNbZV0gPSBHZShlKSB8fCBlKSwgdCB9IGZ1bmN0aW9uIEplKGUsIHQsIG4pIHsgdmFyIHIgPSBpZS5leGVjKHQpOyByZXR1cm4gciA/IE1hdGgubWF4KDAsIHJbMl0gLSAobiB8fCAwKSkgKyAoclszXSB8fCAicHgiKSA6IHQgfSBmdW5jdGlvbiBaZShlLCB0LCBuLCByLCBpLCBvKSB7IHZhciBhID0gIndpZHRoIiA9PT0gdCA/IDEgOiAwLCB1ID0gMCwgcyA9IDA7IGlmIChuID09PSAociA/ICJib3JkZXIiIDogImNvbnRlbnQiKSkgcmV0dXJuIDA7IGZvciAoOyBhIDwgNDsgYSArPSAyKSJtYXJnaW4iID09PSBuICYmIChzICs9IHcuY3NzKGUsIG4gKyBvZVthXSwgITAsIGkpKSwgciA/ICgiY29udGVudCIgPT09IG4gJiYgKHMgLT0gdy5jc3MoZSwgInBhZGRpbmciICsgb2VbYV0sICEwLCBpKSksICJtYXJnaW4iICE9PSBuICYmIChzIC09IHcuY3NzKGUsICJib3JkZXIiICsgb2VbYV0gKyAiV2lkdGgiLCAhMCwgaSkpKSA6IChzICs9IHcuY3NzKGUsICJwYWRkaW5nIiArIG9lW2FdLCAhMCwgaSksICJwYWRkaW5nIiAhPT0gbiA/IHMgKz0gdy5jc3MoZSwgImJvcmRlciIgKyBvZVthXSArICJXaWR0aCIsICEwLCBpKSA6IHUgKz0gdy5jc3MoZSwgImJvcmRlciIgKyBvZVthXSArICJXaWR0aCIsICEwLCBpKSk7IHJldHVybiAhciAmJiBvID49IDAgJiYgKHMgKz0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKGVbIm9mZnNldCIgKyB0WzBdLnRvVXBwZXJDYXNlKCkgKyB0LnNsaWNlKDEpXSAtIG8gLSBzIC0gdSAtIC41KSkpLCBzIH0gZnVuY3Rpb24gZXQoZSwgdCwgbikgeyB2YXIgciA9IFdlKGUpLCBpID0gRmUoZSwgdCwgciksIG8gPSAiYm9yZGVyLWJveCIgPT09IHcuY3NzKGUsICJib3hTaXppbmciLCAhMSwgciksIGEgPSBvOyBpZiAoTWUudGVzdChpKSkgeyBpZiAoIW4pIHJldHVybiBpOyBpID0gImF1dG8iIH0gcmV0dXJuIGEgPSBhICYmIChoLmJveFNpemluZ1JlbGlhYmxlKCkgfHwgaSA9PT0gZS5zdHlsZVt0XSksICgiYXV0byIgPT09IGkgfHwgIXBhcnNlRmxvYXQoaSkgJiYgImlubGluZSIgPT09IHcuY3NzKGUsICJkaXNwbGF5IiwgITEsIHIpKSAmJiAoaSA9IGVbIm9mZnNldCIgKyB0WzBdLnRvVXBwZXJDYXNlKCkgKyB0LnNsaWNlKDEpXSwgYSA9ICEwKSwgKGkgPSBwYXJzZUZsb2F0KGkpIHx8IDApICsgWmUoZSwgdCwgbiB8fCAobyA/ICJib3JkZXIiIDogImNvbnRlbnQiKSwgYSwgciwgaSkgKyAicHgiIH0gdy5leHRlbmQoeyBjc3NIb29rczogeyBvcGFjaXR5OiB7IGdldDogZnVuY3Rpb24gKGUsIHQpIHsgaWYgKHQpIHsgdmFyIG4gPSBGZShlLCAib3BhY2l0eSIpOyByZXR1cm4gIiIgPT09IG4gPyAiMSIgOiBuIH0gfSB9IH0sIGNzc051bWJlcjogeyBhbmltYXRpb25JdGVyYXRpb25Db3VudDogITAsIGNvbHVtbkNvdW50OiAhMCwgZmlsbE9wYWNpdHk6ICEwLCBmbGV4R3JvdzogITAsIGZsZXhTaHJpbms6ICEwLCBmb250V2VpZ2h0OiAhMCwgbGluZUhlaWdodDogITAsIG9wYWNpdHk6ICEwLCBvcmRlcjogITAsIG9ycGhhbnM6ICEwLCB3aWRvd3M6ICEwLCB6SW5kZXg6ICEwLCB6b29tOiAhMCB9LCBjc3NQcm9wczoge30sIHN0eWxlOiBmdW5jdGlvbiAoZSwgdCwgbiwgcikgeyBpZiAoZSAmJiAzICE9PSBlLm5vZGVUeXBlICYmIDggIT09IGUubm9kZVR5cGUgJiYgZS5zdHlsZSkgeyB2YXIgaSwgbywgYSwgdSA9IFEodCksIHMgPSBVZS50ZXN0KHQpLCBsID0gZS5zdHlsZTsgaWYgKHMgfHwgKHQgPSBLZSh1KSksIGEgPSB3LmNzc0hvb2tzW3RdIHx8IHcuY3NzSG9va3NbdV0sIHZvaWQgMCA9PT0gbikgcmV0dXJuIGEgJiYgImdldCIgaW4gYSAmJiB2b2lkIDAgIT09IChpID0gYS5nZXQoZSwgITEsIHIpKSA/IGkgOiBsW3RdOyAic3RyaW5nIiA9PSAobyA9IHR5cGVvZiBuKSAmJiAoaSA9IGllLmV4ZWMobikpICYmIGlbMV0gJiYgKG4gPSBzZShlLCB0LCBpKSwgbyA9ICJudW1iZXIiKSwgbnVsbCAhPSBuICYmIG4gPT09IG4gJiYgKCJudW1iZXIiID09PSBvICYmIChuICs9IGkgJiYgaVszXSB8fCAody5jc3NOdW1iZXJbdV0gPyAiIiA6ICJweCIpKSwgaC5jbGVhckNsb25lU3R5bGUgfHwgIiIgIT09IG4gfHwgMCAhPT0gdC5pbmRleE9mKCJiYWNrZ3JvdW5kIikgfHwgKGxbdF0gPSAiaW5oZXJpdCIpLCBhICYmICJzZXQiIGluIGEgJiYgdm9pZCAwID09PSAobiA9IGEuc2V0KGUsIG4sIHIpKSB8fCAocyA/IGwuc2V0UHJvcGVydHkodCwgbikgOiBsW3RdID0gbikpIH0gfSwgY3NzOiBmdW5jdGlvbiAoZSwgdCwgbiwgcikgeyB2YXIgaSwgbywgYSwgdSA9IFEodCk7IHJldHVybiBVZS50ZXN0KHQpIHx8ICh0ID0gS2UodSkpLCAoYSA9IHcuY3NzSG9va3NbdF0gfHwgdy5jc3NIb29rc1t1XSkgJiYgImdldCIgaW4gYSAmJiAoaSA9IGEuZ2V0KGUsICEwLCBuKSksIHZvaWQgMCA9PT0gaSAmJiAoaSA9IEZlKGUsIHQsIHIpKSwgIm5vcm1hbCIgPT09IGkgJiYgdCBpbiBYZSAmJiAoaSA9IFhlW3RdKSwgIiIgPT09IG4gfHwgbiA/IChvID0gcGFyc2VGbG9hdChpKSwgITAgPT09IG4gfHwgaXNGaW5pdGUobykgPyBvIHx8IDAgOiBpKSA6IGkgfSB9KSwgdy5lYWNoKFsiaGVpZ2h0IiwgIndpZHRoIl0sIGZ1bmN0aW9uIChlLCB0KSB7IHcuY3NzSG9va3NbdF0gPSB7IGdldDogZnVuY3Rpb24gKGUsIG4sIHIpIHsgaWYgKG4pIHJldHVybiAhX2UudGVzdCh3LmNzcyhlLCAiZGlzcGxheSIpKSB8fCBlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICYmIGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggPyBldChlLCB0LCByKSA6IHVlKGUsIFZlLCBmdW5jdGlvbiAoKSB7IHJldHVybiBldChlLCB0LCByKSB9KSB9LCBzZXQ6IGZ1bmN0aW9uIChlLCBuLCByKSB7IHZhciBpLCBvID0gV2UoZSksIGEgPSAiYm9yZGVyLWJveCIgPT09IHcuY3NzKGUsICJib3hTaXppbmciLCAhMSwgbyksIHUgPSByICYmIFplKGUsIHQsIHIsIGEsIG8pOyByZXR1cm4gYSAmJiBoLnNjcm9sbGJveFNpemUoKSA9PT0gby5wb3NpdGlvbiAmJiAodSAtPSBNYXRoLmNlaWwoZVsib2Zmc2V0IiArIHRbMF0udG9VcHBlckNhc2UoKSArIHQuc2xpY2UoMSldIC0gcGFyc2VGbG9hdChvW3RdKSAtIFplKGUsIHQsICJib3JkZXIiLCAhMSwgbykgLSAuNSkpLCB1ICYmIChpID0gaWUuZXhlYyhuKSkgJiYgInB4IiAhPT0gKGlbM10gfHwgInB4IikgJiYgKGUuc3R5bGVbdF0gPSBuLCBuID0gdy5jc3MoZSwgdCkpLCBKZShlLCBuLCB1KSB9IH0gfSksIHcuY3NzSG9va3MubWFyZ2luTGVmdCA9IHplKGgucmVsaWFibGVNYXJnaW5MZWZ0LCBmdW5jdGlvbiAoZSwgdCkgeyBpZiAodCkgcmV0dXJuIChwYXJzZUZsb2F0KEZlKGUsICJtYXJnaW5MZWZ0IikpIHx8IGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIHVlKGUsIHsgbWFyZ2luTGVmdDogMCB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgfSkpICsgInB4IiB9KSwgdy5lYWNoKHsgbWFyZ2luOiAiIiwgcGFkZGluZzogIiIsIGJvcmRlcjogIldpZHRoIiB9LCBmdW5jdGlvbiAoZSwgdCkgeyB3LmNzc0hvb2tzW2UgKyB0XSA9IHsgZXhwYW5kOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciByID0gMCwgaSA9IHt9LCBvID0gInN0cmluZyIgPT0gdHlwZW9mIG4gPyBuLnNwbGl0KCIgIikgOiBbbl07IHIgPCA0OyByKyspaVtlICsgb2Vbcl0gKyB0XSA9IG9bcl0gfHwgb1tyIC0gMl0gfHwgb1swXTsgcmV0dXJuIGkgfSB9LCAibWFyZ2luIiAhPT0gZSAmJiAody5jc3NIb29rc1tlICsgdF0uc2V0ID0gSmUpIH0pLCB3LmZuLmV4dGVuZCh7IGNzczogZnVuY3Rpb24gKGUsIHQpIHsgcmV0dXJuIF8odGhpcywgZnVuY3Rpb24gKGUsIHQsIG4pIHsgdmFyIHIsIGksIG8gPSB7fSwgYSA9IDA7IGlmIChBcnJheS5pc0FycmF5KHQpKSB7IGZvciAociA9IFdlKGUpLCBpID0gdC5sZW5ndGg7IGEgPCBpOyBhKyspb1t0W2FdXSA9IHcuY3NzKGUsIHRbYV0sICExLCByKTsgcmV0dXJuIG8gfSByZXR1cm4gdm9pZCAwICE9PSBuID8gdy5zdHlsZShlLCB0LCBuKSA6IHcuY3NzKGUsIHQpIH0sIGUsIHQsIGFyZ3VtZW50cy5sZW5ndGggPiAxKSB9IH0pLCB3LmZuLmRlbGF5ID0gZnVuY3Rpb24gKHQsIG4pIHsgcmV0dXJuIHQgPSB3LmZ4ID8gdy5meC5zcGVlZHNbdF0gfHwgdCA6IHQsIG4gPSBuIHx8ICJmeCIsIHRoaXMucXVldWUobiwgZnVuY3Rpb24gKG4sIHIpIHsgdmFyIGkgPSBlLnNldFRpbWVvdXQobiwgdCk7IHIuc3RvcCA9IGZ1bmN0aW9uICgpIHsgZS5jbGVhclRpbWVvdXQoaSkgfSB9KSB9LCBmdW5jdGlvbiAoKSB7IHZhciBlID0gci5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLCB0ID0gci5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKS5hcHBlbmRDaGlsZChyLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKTsgZS50eXBlID0gImNoZWNrYm94IiwgaC5jaGVja09uID0gIiIgIT09IGUudmFsdWUsIGgub3B0U2VsZWN0ZWQgPSB0LnNlbGVjdGVkLCAoZSA9IHIuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkudmFsdWUgPSAidCIsIGUudHlwZSA9ICJyYWRpbyIsIGgucmFkaW9WYWx1ZSA9ICJ0IiA9PT0gZS52YWx1ZSB9KCk7IHZhciB0dCwgbnQgPSB3LmV4cHIuYXR0ckhhbmRsZTsgdy5mbi5leHRlbmQoeyBhdHRyOiBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gXyh0aGlzLCB3LmF0dHIsIGUsIHQsIGFyZ3VtZW50cy5sZW5ndGggPiAxKSB9LCByZW1vdmVBdHRyOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgdy5yZW1vdmVBdHRyKHRoaXMsIGUpIH0pIH0gfSksIHcuZXh0ZW5kKHsgYXR0cjogZnVuY3Rpb24gKGUsIHQsIG4pIHsgdmFyIHIsIGksIG8gPSBlLm5vZGVUeXBlOyBpZiAoMyAhPT0gbyAmJiA4ICE9PSBvICYmIDIgIT09IG8pIHJldHVybiAidW5kZWZpbmVkIiA9PSB0eXBlb2YgZS5nZXRBdHRyaWJ1dGUgPyB3LnByb3AoZSwgdCwgbikgOiAoMSA9PT0gbyAmJiB3LmlzWE1MRG9jKGUpIHx8IChpID0gdy5hdHRySG9va3NbdC50b0xvd2VyQ2FzZSgpXSB8fCAody5leHByLm1hdGNoLmJvb2wudGVzdCh0KSA/IHR0IDogdm9pZCAwKSksIHZvaWQgMCAhPT0gbiA/IG51bGwgPT09IG4gPyB2b2lkIHcucmVtb3ZlQXR0cihlLCB0KSA6IGkgJiYgInNldCIgaW4gaSAmJiB2b2lkIDAgIT09IChyID0gaS5zZXQoZSwgbiwgdCkpID8gciA6IChlLnNldEF0dHJpYnV0ZSh0LCBuICsgIiIpLCBuKSA6IGkgJiYgImdldCIgaW4gaSAmJiBudWxsICE9PSAociA9IGkuZ2V0KGUsIHQpKSA/IHIgOiBudWxsID09IChyID0gdy5maW5kLmF0dHIoZSwgdCkpID8gdm9pZCAwIDogcikgfSwgYXR0ckhvb2tzOiB7IHR5cGU6IHsgc2V0OiBmdW5jdGlvbiAoZSwgdCkgeyBpZiAoIWgucmFkaW9WYWx1ZSAmJiAicmFkaW8iID09PSB0ICYmIEQoZSwgImlucHV0IikpIHsgdmFyIG4gPSBlLnZhbHVlOyByZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLCB0KSwgbiAmJiAoZS52YWx1ZSA9IG4pLCB0IH0gfSB9IH0sIHJlbW92ZUF0dHI6IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBuLCByID0gMCwgaSA9IHQgJiYgdC5tYXRjaChJKTsgaWYgKGkgJiYgMSA9PT0gZS5ub2RlVHlwZSkgd2hpbGUgKG4gPSBpW3IrK10pIGUucmVtb3ZlQXR0cmlidXRlKG4pIH0gfSksIHR0ID0geyBzZXQ6IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiAhMSA9PT0gdCA/IHcucmVtb3ZlQXR0cihlLCBuKSA6IGUuc2V0QXR0cmlidXRlKG4sIG4pLCBuIH0gfSwgdy5lYWNoKHcuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLCBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiA9IG50W3RdIHx8IHcuZmluZC5hdHRyOyBudFt0XSA9IGZ1bmN0aW9uIChlLCB0LCByKSB7IHZhciBpLCBvLCBhID0gdC50b0xvd2VyQ2FzZSgpOyByZXR1cm4gciB8fCAobyA9IG50W2FdLCBudFthXSA9IGksIGkgPSBudWxsICE9IG4oZSwgdCwgcikgPyBhIDogbnVsbCwgbnRbYV0gPSBvKSwgaSB9IH0pOyB2YXIgcnQgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLCBpdCA9IC9eKD86YXxhcmVhKSQvaTsgdy5mbi5leHRlbmQoeyBwcm9wOiBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gXyh0aGlzLCB3LnByb3AsIGUsIHQsIGFyZ3VtZW50cy5sZW5ndGggPiAxKSB9LCByZW1vdmVQcm9wOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgZGVsZXRlIHRoaXNbdy5wcm9wRml4W2VdIHx8IGVdIH0pIH0gfSksIHcuZXh0ZW5kKHsgcHJvcDogZnVuY3Rpb24gKGUsIHQsIG4pIHsgdmFyIHIsIGksIG8gPSBlLm5vZGVUeXBlOyBpZiAoMyAhPT0gbyAmJiA4ICE9PSBvICYmIDIgIT09IG8pIHJldHVybiAxID09PSBvICYmIHcuaXNYTUxEb2MoZSkgfHwgKHQgPSB3LnByb3BGaXhbdF0gfHwgdCwgaSA9IHcucHJvcEhvb2tzW3RdKSwgdm9pZCAwICE9PSBuID8gaSAmJiAic2V0IiBpbiBpICYmIHZvaWQgMCAhPT0gKHIgPSBpLnNldChlLCBuLCB0KSkgPyByIDogZVt0XSA9IG4gOiBpICYmICJnZXQiIGluIGkgJiYgbnVsbCAhPT0gKHIgPSBpLmdldChlLCB0KSkgPyByIDogZVt0XSB9LCBwcm9wSG9va3M6IHsgdGFiSW5kZXg6IHsgZ2V0OiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IHcuZmluZC5hdHRyKGUsICJ0YWJpbmRleCIpOyByZXR1cm4gdCA/IHBhcnNlSW50KHQsIDEwKSA6IHJ0LnRlc3QoZS5ub2RlTmFtZSkgfHwgaXQudGVzdChlLm5vZGVOYW1lKSAmJiBlLmhyZWYgPyAwIDogLTEgfSB9IH0sIHByb3BGaXg6IHsgImZvciI6ICJodG1sRm9yIiwgImNsYXNzIjogImNsYXNzTmFtZSIgfSB9KSwgaC5vcHRTZWxlY3RlZCB8fCAody5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7IGdldDogZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSBlLnBhcmVudE5vZGU7IHJldHVybiB0ICYmIHQucGFyZW50Tm9kZSAmJiB0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCwgbnVsbCB9LCBzZXQ6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gZS5wYXJlbnROb2RlOyB0ICYmICh0LnNlbGVjdGVkSW5kZXgsIHQucGFyZW50Tm9kZSAmJiB0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCkgfSB9KSwgdy5lYWNoKFsidGFiSW5kZXgiLCAicmVhZE9ubHkiLCAibWF4TGVuZ3RoIiwgImNlbGxTcGFjaW5nIiwgImNlbGxQYWRkaW5nIiwgInJvd1NwYW4iLCAiY29sU3BhbiIsICJ1c2VNYXAiLCAiZnJhbWVCb3JkZXIiLCAiY29udGVudEVkaXRhYmxlIl0sIGZ1bmN0aW9uICgpIHsgdy5wcm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV0gPSB0aGlzIH0pOyBmdW5jdGlvbiBvdChlKSB7IHJldHVybiAoZS5tYXRjaChJKSB8fCBbXSkuam9pbigiICIpIH0gZnVuY3Rpb24gYXQoZSkgeyByZXR1cm4gZS5nZXRBdHRyaWJ1dGUgJiYgZS5nZXRBdHRyaWJ1dGUoImNsYXNzIikgfHwgIiIgfSBmdW5jdGlvbiB1dChlKSB7IHJldHVybiBBcnJheS5pc0FycmF5KGUpID8gZSA6ICJzdHJpbmciID09IHR5cGVvZiBlID8gZS5tYXRjaChJKSB8fCBbXSA6IFtdIH0gdy5mbi5leHRlbmQoeyBhZGRDbGFzczogZnVuY3Rpb24gKGUpIHsgdmFyIHQsIG4sIHIsIGksIG8sIGEsIHUsIHMgPSAwOyBpZiAoZyhlKSkgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAodCkgeyB3KHRoaXMpLmFkZENsYXNzKGUuY2FsbCh0aGlzLCB0LCBhdCh0aGlzKSkpIH0pOyBpZiAoKHQgPSB1dChlKSkubGVuZ3RoKSB3aGlsZSAobiA9IHRoaXNbcysrXSkgaWYgKGkgPSBhdChuKSwgciA9IDEgPT09IG4ubm9kZVR5cGUgJiYgIiAiICsgb3QoaSkgKyAiICIpIHsgYSA9IDA7IHdoaWxlIChvID0gdFthKytdKSByLmluZGV4T2YoIiAiICsgbyArICIgIikgPCAwICYmIChyICs9IG8gKyAiICIpOyBpICE9PSAodSA9IG90KHIpKSAmJiBuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCB1KSB9IHJldHVybiB0aGlzIH0sIHJlbW92ZUNsYXNzOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCwgbiwgciwgaSwgbywgYSwgdSwgcyA9IDA7IGlmIChnKGUpKSByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICh0KSB7IHcodGhpcykucmVtb3ZlQ2xhc3MoZS5jYWxsKHRoaXMsIHQsIGF0KHRoaXMpKSkgfSk7IGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRoaXMuYXR0cigiY2xhc3MiLCAiIik7IGlmICgodCA9IHV0KGUpKS5sZW5ndGgpIHdoaWxlIChuID0gdGhpc1tzKytdKSBpZiAoaSA9IGF0KG4pLCByID0gMSA9PT0gbi5ub2RlVHlwZSAmJiAiICIgKyBvdChpKSArICIgIikgeyBhID0gMDsgd2hpbGUgKG8gPSB0W2ErK10pIHdoaWxlIChyLmluZGV4T2YoIiAiICsgbyArICIgIikgPiAtMSkgciA9IHIucmVwbGFjZSgiICIgKyBvICsgIiAiLCAiICIpOyBpICE9PSAodSA9IG90KHIpKSAmJiBuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCB1KSB9IHJldHVybiB0aGlzIH0sIHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiA9IHR5cGVvZiBlLCByID0gInN0cmluZyIgPT09IG4gfHwgQXJyYXkuaXNBcnJheShlKTsgcmV0dXJuICJib29sZWFuIiA9PSB0eXBlb2YgdCAmJiByID8gdCA/IHRoaXMuYWRkQ2xhc3MoZSkgOiB0aGlzLnJlbW92ZUNsYXNzKGUpIDogZyhlKSA/IHRoaXMuZWFjaChmdW5jdGlvbiAobikgeyB3KHRoaXMpLnRvZ2dsZUNsYXNzKGUuY2FsbCh0aGlzLCBuLCBhdCh0aGlzKSwgdCksIHQpIH0pIDogdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIHQsIGksIG8sIGE7IGlmIChyKSB7IGkgPSAwLCBvID0gdyh0aGlzKSwgYSA9IHV0KGUpOyB3aGlsZSAodCA9IGFbaSsrXSkgby5oYXNDbGFzcyh0KSA/IG8ucmVtb3ZlQ2xhc3ModCkgOiBvLmFkZENsYXNzKHQpIH0gZWxzZSB2b2lkIDAgIT09IGUgJiYgImJvb2xlYW4iICE9PSBuIHx8ICgodCA9IGF0KHRoaXMpKSAmJiBLLnNldCh0aGlzLCAiX19jbGFzc05hbWVfXyIsIHQpLCB0aGlzLnNldEF0dHJpYnV0ZSAmJiB0aGlzLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCB0IHx8ICExID09PSBlID8gIiIgOiBLLmdldCh0aGlzLCAiX19jbGFzc05hbWVfXyIpIHx8ICIiKSkgfSkgfSwgaGFzQ2xhc3M6IGZ1bmN0aW9uIChlKSB7IHZhciB0LCBuLCByID0gMDsgdCA9ICIgIiArIGUgKyAiICI7IHdoaWxlIChuID0gdGhpc1tyKytdKSBpZiAoMSA9PT0gbi5ub2RlVHlwZSAmJiAoIiAiICsgb3QoYXQobikpICsgIiAiKS5pbmRleE9mKHQpID4gLTEpIHJldHVybiAhMDsgcmV0dXJuICExIH0gfSk7IHZhciBzdCA9IC9cci9nOyB3LmZuLmV4dGVuZCh7IHZhbDogZnVuY3Rpb24gKGUpIHsgdmFyIHQsIG4sIHIsIGkgPSB0aGlzWzBdOyB7IGlmIChhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gciA9IGcoZSksIHRoaXMuZWFjaChmdW5jdGlvbiAobikgeyB2YXIgaTsgMSA9PT0gdGhpcy5ub2RlVHlwZSAmJiAobnVsbCA9PSAoaSA9IHIgPyBlLmNhbGwodGhpcywgbiwgdyh0aGlzKS52YWwoKSkgOiBlKSA/IGkgPSAiIiA6ICJudW1iZXIiID09IHR5cGVvZiBpID8gaSArPSAiIiA6IEFycmF5LmlzQXJyYXkoaSkgJiYgKGkgPSB3Lm1hcChpLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gbnVsbCA9PSBlID8gIiIgOiBlICsgIiIgfSkpLCAodCA9IHcudmFsSG9va3NbdGhpcy50eXBlXSB8fCB3LnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pICYmICJzZXQiIGluIHQgJiYgdm9pZCAwICE9PSB0LnNldCh0aGlzLCBpLCAidmFsdWUiKSB8fCAodGhpcy52YWx1ZSA9IGkpKSB9KTsgaWYgKGkpIHJldHVybiAodCA9IHcudmFsSG9va3NbaS50eXBlXSB8fCB3LnZhbEhvb2tzW2kubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pICYmICJnZXQiIGluIHQgJiYgdm9pZCAwICE9PSAobiA9IHQuZ2V0KGksICJ2YWx1ZSIpKSA/IG4gOiAic3RyaW5nIiA9PSB0eXBlb2YgKG4gPSBpLnZhbHVlKSA/IG4ucmVwbGFjZShzdCwgIiIpIDogbnVsbCA9PSBuID8gIiIgOiBuIH0gfSB9KSwgdy5leHRlbmQoeyB2YWxIb29rczogeyBvcHRpb246IHsgZ2V0OiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IHcuZmluZC5hdHRyKGUsICJ2YWx1ZSIpOyByZXR1cm4gbnVsbCAhPSB0ID8gdCA6IG90KHcudGV4dChlKSkgfSB9LCBzZWxlY3Q6IHsgZ2V0OiBmdW5jdGlvbiAoZSkgeyB2YXIgdCwgbiwgciwgaSA9IGUub3B0aW9ucywgbyA9IGUuc2VsZWN0ZWRJbmRleCwgYSA9ICJzZWxlY3Qtb25lIiA9PT0gZS50eXBlLCB1ID0gYSA/IG51bGwgOiBbXSwgcyA9IGEgPyBvICsgMSA6IGkubGVuZ3RoOyBmb3IgKHIgPSBvIDwgMCA/IHMgOiBhID8gbyA6IDA7IHIgPCBzOyByKyspaWYgKCgobiA9IGlbcl0pLnNlbGVjdGVkIHx8IHIgPT09IG8pICYmICFuLmRpc2FibGVkICYmICghbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8ICFEKG4ucGFyZW50Tm9kZSwgIm9wdGdyb3VwIikpKSB7IGlmICh0ID0gdyhuKS52YWwoKSwgYSkgcmV0dXJuIHQ7IHUucHVzaCh0KSB9IHJldHVybiB1IH0sIHNldDogZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4sIHIsIGkgPSBlLm9wdGlvbnMsIG8gPSB3Lm1ha2VBcnJheSh0KSwgYSA9IGkubGVuZ3RoOyB3aGlsZSAoYS0tKSAoKHIgPSBpW2FdKS5zZWxlY3RlZCA9IHcuaW5BcnJheSh3LnZhbEhvb2tzLm9wdGlvbi5nZXQociksIG8pID4gLTEpICYmIChuID0gITApOyByZXR1cm4gbiB8fCAoZS5zZWxlY3RlZEluZGV4ID0gLTEpLCBvIH0gfSB9IH0pLCB3LmVhY2goWyJyYWRpbyIsICJjaGVja2JveCJdLCBmdW5jdGlvbiAoKSB7IHcudmFsSG9va3NbdGhpc10gPSB7IHNldDogZnVuY3Rpb24gKGUsIHQpIHsgaWYgKEFycmF5LmlzQXJyYXkodCkpIHJldHVybiBlLmNoZWNrZWQgPSB3LmluQXJyYXkodyhlKS52YWwoKSwgdCkgPiAtMSB9IH0sIGguY2hlY2tPbiB8fCAody52YWxIb29rc1t0aGlzXS5nZXQgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gbnVsbCA9PT0gZS5nZXRBdHRyaWJ1dGUoInZhbHVlIikgPyAib24iIDogZS52YWx1ZSB9KSB9KSwgaC5mb2N1c2luID0gIm9uZm9jdXNpbiIgaW4gZTsgdmFyIGx0ID0gL14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLCBjdCA9IGZ1bmN0aW9uIChlKSB7IGUuc3RvcFByb3BhZ2F0aW9uKCkgfTsgdy5leHRlbmQody5ldmVudCwgeyB0cmlnZ2VyOiBmdW5jdGlvbiAodCwgbiwgaSwgbykgeyB2YXIgYSwgdSwgcywgbCwgYywgZCwgcCwgaCwgeSA9IFtpIHx8IHJdLCBtID0gZi5jYWxsKHQsICJ0eXBlIikgPyB0LnR5cGUgOiB0LCBiID0gZi5jYWxsKHQsICJuYW1lc3BhY2UiKSA/IHQubmFtZXNwYWNlLnNwbGl0KCIuIikgOiBbXTsgaWYgKHUgPSBoID0gcyA9IGkgPSBpIHx8IHIsIDMgIT09IGkubm9kZVR5cGUgJiYgOCAhPT0gaS5ub2RlVHlwZSAmJiAhbHQudGVzdChtICsgdy5ldmVudC50cmlnZ2VyZWQpICYmIChtLmluZGV4T2YoIi4iKSA+IC0xICYmIChtID0gKGIgPSBtLnNwbGl0KCIuIikpLnNoaWZ0KCksIGIuc29ydCgpKSwgYyA9IG0uaW5kZXhPZigiOiIpIDwgMCAmJiAib24iICsgbSwgdCA9IHRbdy5leHBhbmRvXSA/IHQgOiBuZXcgdy5FdmVudChtLCAib2JqZWN0IiA9PSB0eXBlb2YgdCAmJiB0KSwgdC5pc1RyaWdnZXIgPSBvID8gMiA6IDMsIHQubmFtZXNwYWNlID0gYi5qb2luKCIuIiksIHQucm5hbWVzcGFjZSA9IHQubmFtZXNwYWNlID8gbmV3IFJlZ0V4cCgiKF58XFwuKSIgKyBiLmpvaW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwufCQpIikgOiBudWxsLCB0LnJlc3VsdCA9IHZvaWQgMCwgdC50YXJnZXQgfHwgKHQudGFyZ2V0ID0gaSksIG4gPSBudWxsID09IG4gPyBbdF0gOiB3Lm1ha2VBcnJheShuLCBbdF0pLCBwID0gdy5ldmVudC5zcGVjaWFsW21dIHx8IHt9LCBvIHx8ICFwLnRyaWdnZXIgfHwgITEgIT09IHAudHJpZ2dlci5hcHBseShpLCBuKSkpIHsgaWYgKCFvICYmICFwLm5vQnViYmxlICYmICF2KGkpKSB7IGZvciAobCA9IHAuZGVsZWdhdGVUeXBlIHx8IG0sIGx0LnRlc3QobCArIG0pIHx8ICh1ID0gdS5wYXJlbnROb2RlKTsgdTsgdSA9IHUucGFyZW50Tm9kZSl5LnB1c2godSksIHMgPSB1OyBzID09PSAoaS5vd25lckRvY3VtZW50IHx8IHIpICYmIHkucHVzaChzLmRlZmF1bHRWaWV3IHx8IHMucGFyZW50V2luZG93IHx8IGUpIH0gYSA9IDA7IHdoaWxlICgodSA9IHlbYSsrXSkgJiYgIXQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkgaCA9IHUsIHQudHlwZSA9IGEgPiAxID8gbCA6IHAuYmluZFR5cGUgfHwgbSwgKGQgPSAoSy5nZXQodSwgImV2ZW50cyIpIHx8IHt9KVt0LnR5cGVdICYmIEsuZ2V0KHUsICJoYW5kbGUiKSkgJiYgZC5hcHBseSh1LCBuKSwgKGQgPSBjICYmIHVbY10pICYmIGQuYXBwbHkgJiYgWSh1KSAmJiAodC5yZXN1bHQgPSBkLmFwcGx5KHUsIG4pLCAhMSA9PT0gdC5yZXN1bHQgJiYgdC5wcmV2ZW50RGVmYXVsdCgpKTsgcmV0dXJuIHQudHlwZSA9IG0sIG8gfHwgdC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSB8fCBwLl9kZWZhdWx0ICYmICExICE9PSBwLl9kZWZhdWx0LmFwcGx5KHkucG9wKCksIG4pIHx8ICFZKGkpIHx8IGMgJiYgZyhpW21dKSAmJiAhdihpKSAmJiAoKHMgPSBpW2NdKSAmJiAoaVtjXSA9IG51bGwpLCB3LmV2ZW50LnRyaWdnZXJlZCA9IG0sIHQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSAmJiBoLmFkZEV2ZW50TGlzdGVuZXIobSwgY3QpLCBpW21dKCksIHQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSAmJiBoLnJlbW92ZUV2ZW50TGlzdGVuZXIobSwgY3QpLCB3LmV2ZW50LnRyaWdnZXJlZCA9IHZvaWQgMCwgcyAmJiAoaVtjXSA9IHMpKSwgdC5yZXN1bHQgfSB9LCBzaW11bGF0ZTogZnVuY3Rpb24gKGUsIHQsIG4pIHsgdmFyIHIgPSB3LmV4dGVuZChuZXcgdy5FdmVudCwgbiwgeyB0eXBlOiBlLCBpc1NpbXVsYXRlZDogITAgfSk7IHcuZXZlbnQudHJpZ2dlcihyLCBudWxsLCB0KSB9IH0pLCB3LmZuLmV4dGVuZCh7IHRyaWdnZXI6IGZ1bmN0aW9uIChlLCB0KSB7IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyB3LmV2ZW50LnRyaWdnZXIoZSwgdCwgdGhpcykgfSkgfSwgdHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBuID0gdGhpc1swXTsgaWYgKG4pIHJldHVybiB3LmV2ZW50LnRyaWdnZXIoZSwgdCwgbiwgITApIH0gfSksIGguZm9jdXNpbiB8fCB3LmVhY2goeyBmb2N1czogImZvY3VzaW4iLCBibHVyOiAiZm9jdXNvdXQiIH0sIGZ1bmN0aW9uIChlLCB0KSB7IHZhciBuID0gZnVuY3Rpb24gKGUpIHsgdy5ldmVudC5zaW11bGF0ZSh0LCBlLnRhcmdldCwgdy5ldmVudC5maXgoZSkpIH07IHcuZXZlbnQuc3BlY2lhbFt0XSA9IHsgc2V0dXA6IGZ1bmN0aW9uICgpIHsgdmFyIHIgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcywgaSA9IEsuYWNjZXNzKHIsIHQpOyBpIHx8IHIuYWRkRXZlbnRMaXN0ZW5lcihlLCBuLCAhMCksIEsuYWNjZXNzKHIsIHQsIChpIHx8IDApICsgMSkgfSwgdGVhcmRvd246IGZ1bmN0aW9uICgpIHsgdmFyIHIgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcywgaSA9IEsuYWNjZXNzKHIsIHQpIC0gMTsgaSA/IEsuYWNjZXNzKHIsIHQsIGkpIDogKHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLCBuLCAhMCksIEsucmVtb3ZlKHIsIHQpKSB9IH0gfSk7IHZhciBmdCA9IC9cW1xdJC8sIGR0ID0gL1xyP1xuL2csIHB0ID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLCBodCA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTsgZnVuY3Rpb24gZ3QoZSwgdCwgbiwgcikgeyB2YXIgaTsgaWYgKEFycmF5LmlzQXJyYXkodCkpIHcuZWFjaCh0LCBmdW5jdGlvbiAodCwgaSkgeyBuIHx8IGZ0LnRlc3QoZSkgPyByKGUsIGkpIDogZ3QoZSArICJbIiArICgib2JqZWN0IiA9PSB0eXBlb2YgaSAmJiBudWxsICE9IGkgPyB0IDogIiIpICsgIl0iLCBpLCBuLCByKSB9KTsgZWxzZSBpZiAobiB8fCAib2JqZWN0IiAhPT0gYih0KSkgcihlLCB0KTsgZWxzZSBmb3IgKGkgaW4gdCkgZ3QoZSArICJbIiArIGkgKyAiXSIsIHRbaV0sIG4sIHIpIH0gdy5wYXJhbSA9IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBuLCByID0gW10sIGkgPSBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiA9IGcodCkgPyB0KCkgOiB0OyByW3IubGVuZ3RoXSA9IGVuY29kZVVSSUNvbXBvbmVudChlKSArICI9IiArIGVuY29kZVVSSUNvbXBvbmVudChudWxsID09IG4gPyAiIiA6IG4pIH07IGlmIChBcnJheS5pc0FycmF5KGUpIHx8IGUuanF1ZXJ5ICYmICF3LmlzUGxhaW5PYmplY3QoZSkpIHcuZWFjaChlLCBmdW5jdGlvbiAoKSB7IGkodGhpcy5uYW1lLCB0aGlzLnZhbHVlKSB9KTsgZWxzZSBmb3IgKG4gaW4gZSkgZ3QobiwgZVtuXSwgdCwgaSk7IHJldHVybiByLmpvaW4oIiYiKSB9LCB3LmZuLmV4dGVuZCh7IHNlcmlhbGl6ZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gdy5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpIH0sIHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoKSB7IHZhciBlID0gdy5wcm9wKHRoaXMsICJlbGVtZW50cyIpOyByZXR1cm4gZSA/IHcubWFrZUFycmF5KGUpIDogdGhpcyB9KS5maWx0ZXIoZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHRoaXMudHlwZTsgcmV0dXJuIHRoaXMubmFtZSAmJiAhdyh0aGlzKS5pcygiOmRpc2FibGVkIikgJiYgaHQudGVzdCh0aGlzLm5vZGVOYW1lKSAmJiAhcHQudGVzdChlKSAmJiAodGhpcy5jaGVja2VkIHx8ICFkZS50ZXN0KGUpKSB9KS5tYXAoZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4gPSB3KHRoaXMpLnZhbCgpOyByZXR1cm4gbnVsbCA9PSBuID8gbnVsbCA6IEFycmF5LmlzQXJyYXkobikgPyB3Lm1hcChuLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4geyBuYW1lOiB0Lm5hbWUsIHZhbHVlOiBlLnJlcGxhY2UoZHQsICJcclxuIikgfSB9KSA6IHsgbmFtZTogdC5uYW1lLCB2YWx1ZTogbi5yZXBsYWNlKGR0LCAiXHJcbiIpIH0gfSkuZ2V0KCkgfSB9KSwgdy5mbi5leHRlbmQoeyB3cmFwQWxsOiBmdW5jdGlvbiAoZSkgeyB2YXIgdDsgcmV0dXJuIHRoaXNbMF0gJiYgKGcoZSkgJiYgKGUgPSBlLmNhbGwodGhpc1swXSkpLCB0ID0gdyhlLCB0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSwgdGhpc1swXS5wYXJlbnROb2RlICYmIHQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLCB0Lm1hcChmdW5jdGlvbiAoKSB7IHZhciBlID0gdGhpczsgd2hpbGUgKGUuZmlyc3RFbGVtZW50Q2hpbGQpIGUgPSBlLmZpcnN0RWxlbWVudENoaWxkOyByZXR1cm4gZSB9KS5hcHBlbmQodGhpcykpLCB0aGlzIH0sIHdyYXBJbm5lcjogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGcoZSkgPyB0aGlzLmVhY2goZnVuY3Rpb24gKHQpIHsgdyh0aGlzKS53cmFwSW5uZXIoZS5jYWxsKHRoaXMsIHQpKSB9KSA6IHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IHZhciB0ID0gdyh0aGlzKSwgbiA9IHQuY29udGVudHMoKTsgbi5sZW5ndGggPyBuLndyYXBBbGwoZSkgOiB0LmFwcGVuZChlKSB9KSB9LCB3cmFwOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IGcoZSk7IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKG4pIHsgdyh0aGlzKS53cmFwQWxsKHQgPyBlLmNhbGwodGhpcywgbikgOiBlKSB9KSB9LCB1bndyYXA6IGZ1bmN0aW9uIChlKSB7IHJldHVybiB0aGlzLnBhcmVudChlKS5ub3QoImJvZHkiKS5lYWNoKGZ1bmN0aW9uICgpIHsgdyh0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpIH0pLCB0aGlzIH0gfSksIHcuZXhwci5wc2V1ZG9zLmhpZGRlbiA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiAhdy5leHByLnBzZXVkb3MudmlzaWJsZShlKSB9LCB3LmV4cHIucHNldWRvcy52aXNpYmxlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuICEhKGUub2Zmc2V0V2lkdGggfHwgZS5vZmZzZXRIZWlnaHQgfHwgZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCkgfSwgaC5jcmVhdGVIVE1MRG9jdW1lbnQgPSBmdW5jdGlvbiAoKSB7IHZhciBlID0gci5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpLmJvZHk7IHJldHVybiBlLmlubmVySFRNTCA9ICI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3JtPiIsIDIgPT09IGUuY2hpbGROb2Rlcy5sZW5ndGggfSgpLCB3LnBhcnNlSFRNTCA9IGZ1bmN0aW9uIChlLCB0LCBuKSB7IGlmICgic3RyaW5nIiAhPSB0eXBlb2YgZSkgcmV0dXJuIFtdOyAiYm9vbGVhbiIgPT0gdHlwZW9mIHQgJiYgKG4gPSB0LCB0ID0gITEpOyB2YXIgaSwgbywgYTsgcmV0dXJuIHQgfHwgKGguY3JlYXRlSFRNTERvY3VtZW50ID8gKChpID0gKHQgPSByLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikpLmNyZWF0ZUVsZW1lbnQoImJhc2UiKSkuaHJlZiA9IHIubG9jYXRpb24uaHJlZiwgdC5oZWFkLmFwcGVuZENoaWxkKGkpKSA6IHQgPSByKSwgbyA9IFMuZXhlYyhlKSwgYSA9ICFuICYmIFtdLCBvID8gW3QuY3JlYXRlRWxlbWVudChvWzFdKV0gOiAobyA9IGJlKFtlXSwgdCwgYSksIGEgJiYgYS5sZW5ndGggJiYgdyhhKS5yZW1vdmUoKSwgdy5tZXJnZShbXSwgby5jaGlsZE5vZGVzKSkgfSwgdy5vZmZzZXQgPSB7IHNldE9mZnNldDogZnVuY3Rpb24gKGUsIHQsIG4pIHsgdmFyIHIsIGksIG8sIGEsIHUsIHMsIGwsIGMgPSB3LmNzcyhlLCAicG9zaXRpb24iKSwgZiA9IHcoZSksIGQgPSB7fTsgInN0YXRpYyIgPT09IGMgJiYgKGUuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiKSwgdSA9IGYub2Zmc2V0KCksIG8gPSB3LmNzcyhlLCAidG9wIiksIHMgPSB3LmNzcyhlLCAibGVmdCIpLCAobCA9ICgiYWJzb2x1dGUiID09PSBjIHx8ICJmaXhlZCIgPT09IGMpICYmIChvICsgcykuaW5kZXhPZigiYXV0byIpID4gLTEpID8gKGEgPSAociA9IGYucG9zaXRpb24oKSkudG9wLCBpID0gci5sZWZ0KSA6IChhID0gcGFyc2VGbG9hdChvKSB8fCAwLCBpID0gcGFyc2VGbG9hdChzKSB8fCAwKSwgZyh0KSAmJiAodCA9IHQuY2FsbChlLCBuLCB3LmV4dGVuZCh7fSwgdSkpKSwgbnVsbCAhPSB0LnRvcCAmJiAoZC50b3AgPSB0LnRvcCAtIHUudG9wICsgYSksIG51bGwgIT0gdC5sZWZ0ICYmIChkLmxlZnQgPSB0LmxlZnQgLSB1LmxlZnQgKyBpKSwgInVzaW5nIiBpbiB0ID8gdC51c2luZy5jYWxsKGUsIGQpIDogZi5jc3MoZCkgfSB9LCB3LmZuLmV4dGVuZCh7IG9mZnNldDogZnVuY3Rpb24gKGUpIHsgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB2b2lkIDAgPT09IGUgPyB0aGlzIDogdGhpcy5lYWNoKGZ1bmN0aW9uICh0KSB7IHcub2Zmc2V0LnNldE9mZnNldCh0aGlzLCBlLCB0KSB9KTsgdmFyIHQsIG4sIHIgPSB0aGlzWzBdOyBpZiAocikgcmV0dXJuIHIuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggPyAodCA9IHIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIG4gPSByLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcsIHsgdG9wOiB0LnRvcCArIG4ucGFnZVlPZmZzZXQsIGxlZnQ6IHQubGVmdCArIG4ucGFnZVhPZmZzZXQgfSkgOiB7IHRvcDogMCwgbGVmdDogMCB9IH0sIHBvc2l0aW9uOiBmdW5jdGlvbiAoKSB7IGlmICh0aGlzWzBdKSB7IHZhciBlLCB0LCBuLCByID0gdGhpc1swXSwgaSA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07IGlmICgiZml4ZWQiID09PSB3LmNzcyhyLCAicG9zaXRpb24iKSkgdCA9IHIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IGVsc2UgeyB0ID0gdGhpcy5vZmZzZXQoKSwgbiA9IHIub3duZXJEb2N1bWVudCwgZSA9IHIub2Zmc2V0UGFyZW50IHx8IG4uZG9jdW1lbnRFbGVtZW50OyB3aGlsZSAoZSAmJiAoZSA9PT0gbi5ib2R5IHx8IGUgPT09IG4uZG9jdW1lbnRFbGVtZW50KSAmJiAic3RhdGljIiA9PT0gdy5jc3MoZSwgInBvc2l0aW9uIikpIGUgPSBlLnBhcmVudE5vZGU7IGUgJiYgZSAhPT0gciAmJiAxID09PSBlLm5vZGVUeXBlICYmICgoaSA9IHcoZSkub2Zmc2V0KCkpLnRvcCArPSB3LmNzcyhlLCAiYm9yZGVyVG9wV2lkdGgiLCAhMCksIGkubGVmdCArPSB3LmNzcyhlLCAiYm9yZGVyTGVmdFdpZHRoIiwgITApKSB9IHJldHVybiB7IHRvcDogdC50b3AgLSBpLnRvcCAtIHcuY3NzKHIsICJtYXJnaW5Ub3AiLCAhMCksIGxlZnQ6IHQubGVmdCAtIGkubGVmdCAtIHcuY3NzKHIsICJtYXJnaW5MZWZ0IiwgITApIH0gfSB9LCBvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0aGlzLm9mZnNldFBhcmVudDsgd2hpbGUgKGUgJiYgInN0YXRpYyIgPT09IHcuY3NzKGUsICJwb3NpdGlvbiIpKSBlID0gZS5vZmZzZXRQYXJlbnQ7IHJldHVybiBlIHx8IHhlIH0pIH0gfSksIHcuZWFjaCh7IHNjcm9sbExlZnQ6ICJwYWdlWE9mZnNldCIsIHNjcm9sbFRvcDogInBhZ2VZT2Zmc2V0IiB9LCBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiA9ICJwYWdlWU9mZnNldCIgPT09IHQ7IHcuZm5bZV0gPSBmdW5jdGlvbiAocikgeyByZXR1cm4gXyh0aGlzLCBmdW5jdGlvbiAoZSwgciwgaSkgeyB2YXIgbzsgaWYgKHYoZSkgPyBvID0gZSA6IDkgPT09IGUubm9kZVR5cGUgJiYgKG8gPSBlLmRlZmF1bHRWaWV3KSwgdm9pZCAwID09PSBpKSByZXR1cm4gbyA/IG9bdF0gOiBlW3JdOyBvID8gby5zY3JvbGxUbyhuID8gby5wYWdlWE9mZnNldCA6IGksIG4gPyBpIDogby5wYWdlWU9mZnNldCkgOiBlW3JdID0gaSB9LCBlLCByLCBhcmd1bWVudHMubGVuZ3RoKSB9IH0pLCB3LmVhY2goWyJ0b3AiLCAibGVmdCJdLCBmdW5jdGlvbiAoZSwgdCkgeyB3LmNzc0hvb2tzW3RdID0gemUoaC5waXhlbFBvc2l0aW9uLCBmdW5jdGlvbiAoZSwgbikgeyBpZiAobikgcmV0dXJuIG4gPSBGZShlLCB0KSwgTWUudGVzdChuKSA/IHcoZSkucG9zaXRpb24oKVt0XSArICJweCIgOiBuIH0pIH0pLCB3LmVhY2goeyBIZWlnaHQ6ICJoZWlnaHQiLCBXaWR0aDogIndpZHRoIiB9LCBmdW5jdGlvbiAoZSwgdCkgeyB3LmVhY2goeyBwYWRkaW5nOiAiaW5uZXIiICsgZSwgY29udGVudDogdCwgIiI6ICJvdXRlciIgKyBlIH0sIGZ1bmN0aW9uIChuLCByKSB7IHcuZm5bcl0gPSBmdW5jdGlvbiAoaSwgbykgeyB2YXIgYSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKG4gfHwgImJvb2xlYW4iICE9IHR5cGVvZiBpKSwgdSA9IG4gfHwgKCEwID09PSBpIHx8ICEwID09PSBvID8gIm1hcmdpbiIgOiAiYm9yZGVyIik7IHJldHVybiBfKHRoaXMsIGZ1bmN0aW9uICh0LCBuLCBpKSB7IHZhciBvOyByZXR1cm4gdih0KSA/IDAgPT09IHIuaW5kZXhPZigib3V0ZXIiKSA/IHRbImlubmVyIiArIGVdIDogdC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIgKyBlXSA6IDkgPT09IHQubm9kZVR5cGUgPyAobyA9IHQuZG9jdW1lbnRFbGVtZW50LCBNYXRoLm1heCh0LmJvZHlbInNjcm9sbCIgKyBlXSwgb1sic2Nyb2xsIiArIGVdLCB0LmJvZHlbIm9mZnNldCIgKyBlXSwgb1sib2Zmc2V0IiArIGVdLCBvWyJjbGllbnQiICsgZV0pKSA6IHZvaWQgMCA9PT0gaSA/IHcuY3NzKHQsIG4sIHUpIDogdy5zdHlsZSh0LCBuLCBpLCB1KSB9LCB0LCBhID8gaSA6IHZvaWQgMCwgYSkgfSB9KSB9KSwgdy5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLCBmdW5jdGlvbiAoZSwgdCkgeyB3LmZuW3RdID0gZnVuY3Rpb24gKGUsIG4pIHsgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gdGhpcy5vbih0LCBudWxsLCBlLCBuKSA6IHRoaXMudHJpZ2dlcih0KSB9IH0pLCB3LmZuLmV4dGVuZCh7IGhvdmVyOiBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gdGhpcy5tb3VzZWVudGVyKGUpLm1vdXNlbGVhdmUodCB8fCBlKSB9IH0pLCB3LmZuLmV4dGVuZCh7IGJpbmQ6IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiB0aGlzLm9uKGUsIG51bGwsIHQsIG4pIH0sIHVuYmluZDogZnVuY3Rpb24gKGUsIHQpIHsgcmV0dXJuIHRoaXMub2ZmKGUsIG51bGwsIHQpIH0sIGRlbGVnYXRlOiBmdW5jdGlvbiAoZSwgdCwgbiwgcikgeyByZXR1cm4gdGhpcy5vbih0LCBlLCBuLCByKSB9LCB1bmRlbGVnYXRlOiBmdW5jdGlvbiAoZSwgdCwgbikgeyByZXR1cm4gMSA9PT0gYXJndW1lbnRzLmxlbmd0aCA/IHRoaXMub2ZmKGUsICIqKiIpIDogdGhpcy5vZmYodCwgZSB8fCAiKioiLCBuKSB9IH0pLCB3LnByb3h5ID0gZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4sIHIsIGk7IGlmICgic3RyaW5nIiA9PSB0eXBlb2YgdCAmJiAobiA9IGVbdF0sIHQgPSBlLCBlID0gbiksIGcoZSkpIHJldHVybiByID0gby5jYWxsKGFyZ3VtZW50cywgMiksIGkgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBlLmFwcGx5KHQgfHwgdGhpcywgci5jb25jYXQoby5jYWxsKGFyZ3VtZW50cykpKSB9LCBpLmd1aWQgPSBlLmd1aWQgPSBlLmd1aWQgfHwgdy5ndWlkKysgLCBpIH0sIHcuaG9sZFJlYWR5ID0gZnVuY3Rpb24gKGUpIHsgZSA/IHcucmVhZHlXYWl0KysgOiB3LnJlYWR5KCEwKSB9LCB3LmlzQXJyYXkgPSBBcnJheS5pc0FycmF5LCB3LnBhcnNlSlNPTiA9IEpTT04ucGFyc2UsIHcubm9kZU5hbWUgPSBELCB3LmlzRnVuY3Rpb24gPSBnLCB3LmlzV2luZG93ID0gdiwgdy5jYW1lbENhc2UgPSBRLCB3LnR5cGUgPSBiLCB3Lm5vdyA9IERhdGUubm93LCB3LmlzTnVtZXJpYyA9IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gdy50eXBlKGUpOyByZXR1cm4gKCJudW1iZXIiID09PSB0IHx8ICJzdHJpbmciID09PSB0KSAmJiAhaXNOYU4oZSAtIHBhcnNlRmxvYXQoZSkpIH0sICJmdW5jdGlvbiIgPT0gdHlwZW9mIGRlZmluZSAmJiBkZWZpbmUuYW1kICYmIGRlZmluZSgianF1ZXJ5IiwgW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHcgfSk7IHZhciB2dCA9IGUualF1ZXJ5LCB5dCA9IGUuJDsgcmV0dXJuIHcubm9Db25mbGljdCA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiBlLiQgPT09IHcgJiYgKGUuJCA9IHl0KSwgdCAmJiBlLmpRdWVyeSA9PT0gdyAmJiAoZS5qUXVlcnkgPSB2dCksIHcgfSwgdCB8fCAoZS5qUXVlcnkgPSBlLiQgPSB3KSwgdyB9KTs=\"")
packr.PackJSONBytes("./assets/default", "wails.js", "\"Ly8gV2FpbHMgcnVudGltZSBKUwoKKGZ1bmN0aW9uICgpIHsKCXdpbmRvdy53YWlscyA9IHdpbmRvdy53YWlscyB8fCB7fTsKCXdpbmRvdy5iYWNrZW5kID0ge307CgoJLyoqKioqKioqKioqKioqKioqKiBVdGlsaXR5IEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKiovCgoJLy8gLS0tLS0tLS0tLS0tLS0gUmFuZG9tIC0tLS0tLS0tLS0tLS0tCgkvLyBBd2Vzb21lUmFuZG9tCglmdW5jdGlvbiBjcnlwdG9SYW5kb20oKSB7CgkJdmFyIGFycmF5ID0gbmV3IFVpbnQzMkFycmF5KDEpOwoJCXJldHVybiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSlbMF07Cgl9CgoJLy8gTE9MUmFuZG9tCglmdW5jdGlvbiBiYXNpY1JhbmRvbSgpIHsKCQlyZXR1cm4gTWF0aC5yYW5kb20oKSAqIDkwMDcxOTkyNTQ3NDA5OTE7Cgl9CgoJLy8gUGljayBvbmUgYmFzZWQgb24gYnJvd3NlciBjYXBhYmlsaXR5Cgl2YXIgcmFuZG9tRnVuYzsKCWlmICh3aW5kb3cuY3J5cHRvKSB7CgkJcmFuZG9tRnVuYyA9IGNyeXB0b1JhbmRvbTsKCX0gZWxzZSB7CgkJcmFuZG9tRnVuYyA9IGJhc2ljUmFuZG9tOwoJfQoKCS8vIC0tLS0tLS0tLS0tLS0tIElkZW50aWZpZXJzIC0tLS0tLS0tLS0tLS0tLQoKCWZ1bmN0aW9uIGlzVmFsaWRJZGVudGlmaWVyKG5hbWUpIHsKCQkvLyBEb24ndCB4c3MgeW91cnNlbGYgOi0pCgkJdHJ5IHsKCQkJbmV3IEZ1bmN0aW9uKCJ2YXIgIiArIG5hbWUpOwoJCQlyZXR1cm4gdHJ1ZQoJCX0gY2F0Y2ggKGUpIHsKCQkJcmV0dXJuIGZhbHNlCgkJfQoJfQoKCS8vIC0tLS0tLS0tLS0tLS0tIEpTIC0tLS0tLS0tLS0tLS0tLS0KCWZ1bmN0aW9uIGFkZFNjcmlwdChqcywgY2FsbGJhY2tJRCkgewoJCXZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKCQlzY3JpcHQudGV4dCA9IGpzOwoJCWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKCQl3aW5kb3cud2FpbHMuZXZlbnRzLmVtaXQoY2FsbGJhY2tJRCk7Cgl9CgoJLy8gLS0tLS0tLS0tLS0tLS0gQ1NTIC0tLS0tLS0tLS0tLS0tLQoJLy8gQWRhcHRlZCBmcm9tIHdlYnZpZXcgLSB0aGFua3MgenNlcmdlIQoJZnVuY3Rpb24gaW5qZWN0Q1NTKGNzcykgewoJCXZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKCQllbGVtLnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2NzcycpOwoJCWlmIChlbGVtLnN0eWxlU2hlZXQpIHsKCQkJZWxlbS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7CgkJfSBlbHNlIHsKCQkJZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTsKCQl9CgkJdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07CgkJaGVhZC5hcHBlbmRDaGlsZChlbGVtKQoJfQoKCS8qKioqKioqKioqKioqKioqKioqKioqKioqIEJpbmRpbmdzICoqKioqKioqKioqKioqKioqKioqKioqKiovCgoJdmFyIGJpbmRpbmdzQmFzZVBhdGggPSB3aW5kb3cuYmFja2VuZDsKCgkvLyBDcmVhdGVzIHRoZSBwYXRoIGdpdmVuIGluIHRoZSBiaW5kaW5ncyBwYXRoCglmdW5jdGlvbiBhZGRCaW5kaW5nUGF0aChwYXRoU2VjdGlvbnMpIHsKCQkvLyBTdGFydCBhdCB0aGUgYmFzZSBwYXRoCgkJdmFyIGN1cnJlbnRQYXRoID0gYmluZGluZ3NCYXNlUGF0aAoJCS8vIGZvciBlYWNoIHNlY3Rpb24gb2YgdGhlIGdpdmVuIHBhdGgKCQlmb3IgKHZhciBzZWN0aW9uIG9mIHBhdGhTZWN0aW9ucykgewoKCQkJLy8gSXMgc2VjdGlvbiBhIHZhbGlkIGphdmFzY3JpcHQgaWRlbnRpZmllcj8KCQkJaWYgKCFpc1ZhbGlkSWRlbnRpZmllcihzZWN0aW9uKSkgewoJCQkJdmFyIGVyck1lc3NhZ2UgPSBzZWN0aW9uICsgIiBpcyBub3QgYSB2YWxpZCBqYXZhc2NyaXB0IGlkZW50aWZpZXIuIgoJCQkJdmFyIGVyciA9IG5ldyBFcnJvcihlcnJNZXNzYWdlKQoJCQkJcmV0dXJuIFtudWxsLCBlcnJdCgkJCX0KCgkJCS8vIEFkZCBpZiBkb2Vzbid0IGV4aXN0CgkJCWlmICghY3VycmVudFBhdGhbc2VjdGlvbl0pIHsKCQkJCWN1cnJlbnRQYXRoW3NlY3Rpb25dID0ge30KCQkJfQoJCQkvLyB1cGRhdGUgY3VycmVudCBwYXRoIHRvIG5ldyBwYXRoCgkJCWN1cnJlbnRQYXRoID0gY3VycmVudFBhdGhbc2VjdGlvbl0KCQl9CgkJcmV0dXJuIFtjdXJyZW50UGF0aCwgbnVsbF0KCX0KCglmdW5jdGlvbiBuZXdCaW5kaW5nKGJpbmRpbmdOYW1lKSB7CgoJCS8vIEdldCBhbGwgdGhlIHNlY3Rpb25zIG9mIHRoZSBiaW5kaW5nCgkJdmFyIGJpbmRpbmdTZWN0aW9ucyA9IGJpbmRpbmdOYW1lLnNwbGl0KCcuJykuc3BsaWNlKDEpOwoKCQkvLyBHZXQgdGhlIGFjdHVhbCBmdW5jdGlvbi9tZXRob2QgY2FsbCBuYW1lCgkJdmFyIGNhbGxOYW1lID0gYmluZGluZ1NlY3Rpb25zLnBvcCgpOwoKCQlsZXQgcGF0aFRvQmluZGluZzsKCQlsZXQgZXJyOwoKCQkvLyBBZGQgcGF0aCB0byBiaW5kaW5nCgkJW3BhdGhUb0JpbmRpbmcsIGVycl0gPSBhZGRCaW5kaW5nUGF0aChiaW5kaW5nU2VjdGlvbnMpCgoJCWlmIChlcnIgIT0gbnVsbCkgewoJCQkvLyBXZSBuZWVkIHRvIHJldHVybiBhbiBlcnJvcgoJCQlyZXR1cm4gZXJyCgkJfQoKCQkvLyBBZGQgYmluZGluZyBjYWxsCgkJcGF0aFRvQmluZGluZ1tjYWxsTmFtZV0gPSBmdW5jdGlvbiAoKSB7CgoJCQkvLyBObyB0aW1lb3V0IGJ5IGRlZmF1bHQKCQkJdmFyIHRpbWVvdXQgPSAwOwoKCQkJLy8gQWN0dWFsIGZ1bmN0aW9uCgkJCWZ1bmN0aW9uIGR5bmFtaWMoKSB7CgkJCQl2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKQoJCQkJcmV0dXJuIGNhbGwoYmluZGluZ05hbWUsIGFyZ3MsIHRpbWVvdXQpOwoJCQl9CgoJCQkvLyBBbGxvdyBzZXR0aW5nIHRpbWVvdXQgdG8gZnVuY3Rpb24KCQkJZHluYW1pYy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gKG5ld1RpbWVvdXQpIHsKCQkJCXRpbWVvdXQgPSBuZXdUaW1lb3V0OwoJCQl9CgoJCQkvLyBBbGxvdyBnZXR0aW5nIHRpbWVvdXQgdG8gZnVuY3Rpb24KCQkJZHluYW1pYy5nZXRUaW1lb3V0ID0gZnVuY3Rpb24gKCkgewoJCQkJcmV0dXJuIHRpbWVvdXQ7CgkJCX0KCgkJCXJldHVybiBkeW5hbWljOwoJCX0oKTsKCX0KCgkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiogQ2FsbHMgKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoJdmFyIGNhbGxiYWNrcyA9IHt9OwoKCS8vIENhbGwgc2VuZHMgYSBtZXNzYWdlIHRvIHRoZSBiYWNrZW5kIHRvIGNhbGwgdGhlIGJpbmRpbmcgd2l0aCB0aGUKCS8vIGdpdmVuIGRhdGEuIEEgcHJvbWlzZSBpcyByZXR1cm5lZCBhbmQgd2lsbCBiZSBjb21wbGV0ZWQgd2hlbiB0aGUKCS8vIGJhY2tlbmQgcmVzcG9uZHMuIFRoaXMgd2lsbCBiZSByZXNvbHZlZCB3aGVuIHRoZSBjYWxsIHdhcyBzdWNjZXNzZnVsCgkvLyBvciByZWplY3RlZCBpZiBhbiBlcnJvciBpcyBwYXNzZWQgYmFjay4KCS8vIFRoZXJlIGlzIGEgdGltZW91dCBtZWNoYW5pc20uIElmIHRoZSBjYWxsIGRvZXNuJ3QgcmVzcG9uZCBpbiB0aGUgZ2l2ZW4KCS8vIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdGhlbiB0aGUgcHJvbWlzZSBpcyByZWplY3RlZC4KCglmdW5jdGlvbiBjYWxsKGJpbmRpbmdOYW1lLCBkYXRhLCB0aW1lb3V0KSB7CgoJCS8vIFRpbWVvdXQgaW5maW5pdGUgYnkgZGVmYXVsdAoJCWlmICh0aW1lb3V0ID09IG51bGwgfHwgdGltZW91dCA9PSB1bmRlZmluZWQpIHsKCQkJdGltZW91dCA9IDA7CgkJfQoKCQkvLyBDcmVhdGUgYSBwcm9taXNlCgkJcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKCgkJCS8vIENyZWF0ZSBhIHVuaXF1ZSBjYWxsYmFja0lECgkJCXZhciBjYWxsYmFja0lEOwoJCQlkbyB7CgkJCQljYWxsYmFja0lEID0gYmluZGluZ05hbWUgKyAiLSIgKyByYW5kb21GdW5jKCk7CgkJCX0gd2hpbGUgKGNhbGxiYWNrc1tjYWxsYmFja0lEXSkKCgkJCS8vIFNldCB0aW1lb3V0CgkJCWlmICh0aW1lb3V0ID4gMCkgewoJCQkJdmFyIHRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKCQkJCQlyZWplY3QoRXJyb3IoIkNhbGwgdG8gIiArIGJpbmRpbmdOYW1lICsgIiB0aW1lZCBvdXQuIFJlcXVlc3QgSUQ6ICIgKyBjYWxsYmFja0lEKSkKCQkJCX0sIHRpbWVvdXQpOwoJCQl9CgoJCQkvLyBTdG9yZSBjYWxsYmFjawoJCQljYWxsYmFja3NbY2FsbGJhY2tJRF0gPSB7CgkJCQl0aW1lb3V0SGFuZGxlOiB0aW1lb3V0SGFuZGxlLAoJCQkJcmVqZWN0OiByZWplY3QsCgkJCQlyZXNvbHZlOiByZXNvbHZlCgkJCX0KCQkJdHJ5IHsKCQkJCXZhciBwYXlsb2FkZGF0YSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpCgkJCQkvLyBDcmVhdGUgdGhlIG1lc3NhZ2UKCQkJCW1lc3NhZ2UgPSB7CgkJCQkJdHlwZTogImNhbGwiLAoJCQkJCWNhbGxiYWNraWQ6IGNhbGxiYWNrSUQsCgkJCQkJcGF5bG9hZDogewoJCQkJCQliaW5kaW5nTmFtZTogYmluZGluZ05hbWUsCgkJCQkJCWRhdGE6IHBheWxvYWRkYXRhLAoJCQkJCX0KCQkJCX0KCgkJCQkvLyBNYWtlIHRoZSBjYWxsCgkJCQl2YXIgcGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpCgkJCQlleHRlcm5hbC5pbnZva2UocGF5bG9hZCk7CgkJCX0gY2F0Y2ggKGUpIHsKCQkJCWNvbnNvbGUuZXJyb3IoZSkKCQkJfQoJCX0pCgl9CgoKCS8vIENhbGxlZCBieSB0aGUgYmFja2VuZCB0byByZXR1cm4gZGF0YSB0byBhIHByZXZpb3VzbHkgY2FsbGVkCgkvLyBiaW5kaW5nIGludm9jYXRpb24KCWZ1bmN0aW9uIGNhbGxiYWNrKGluY29taW5nTWVzc2FnZSkgewoJCS8vIFBhcnNlIHRoZSBtZXNzYWdlCgkJdmFyIG1lc3NhZ2UKCQl0cnkgewoJCQltZXNzYWdlID0gSlNPTi5wYXJzZShpbmNvbWluZ01lc3NhZ2UpCgkJfSBjYXRjaCAoZSkgewoJCQl3YWlscy5sb2cuZGVidWcoIkludmFsaWQgSlNPTiBwYXNzZWQgdG8gY2FsbGJhY2s6ICIgKyBlLm1lc3NhZ2UpCgkJCXdhaWxzLmxvZy5kZWJ1ZygiTWVzc2FnZTogIiArIGluY29taW5nTWVzc2FnZSkKCQkJcmV0dXJuCgkJfQoJCWNhbGxiYWNrSUQgPSBtZXNzYWdlLmNhbGxiYWNraWQKCQljYWxsYmFja0RhdGEgPSBjYWxsYmFja3NbY2FsbGJhY2tJRF0KCQlpZiAoIWNhbGxiYWNrRGF0YSkgewoJCQljb25zb2xlLmVycm9yKCJDYWxsYmFjayAnIiArIGNhbGxiYWNrSUQgKyAiJyBub3QgcmVnaXN0ZWQhISEiKQoJCQlyZXR1cm4KCQl9CgkJY2xlYXJUaW1lb3V0KGNhbGxiYWNrRGF0YS50aW1lb3V0SGFuZGxlKQoJCWRlbGV0ZSBjYWxsYmFja3NbY2FsbGJhY2tJRF0KCQlpZiAobWVzc2FnZS5lcnJvcikgewoJCQlyZXR1cm4gY2FsbGJhY2tEYXRhLnJlamVjdChtZXNzYWdlLmVycm9yKQoJCX0KCQlyZXR1cm4gY2FsbGJhY2tEYXRhLnJlc29sdmUobWVzc2FnZS5kYXRhKQoJfQoKCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiBFdmVudHMgKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoJdmFyIGV2ZW50TGlzdGVuZXJzID0ge307CgoJLy8gUmVnaXN0ZXJzIGV2ZW50IGxpc3RlbmVycwoJZnVuY3Rpb24gb24oZXZlbnROYW1lLCBjYWxsYmFjaykgewoJCWV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0gPSBldmVudExpc3RlbmVyc1tldmVudE5hbWVdIHx8IFtdOwoJCWV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0ucHVzaChjYWxsYmFjayk7Cgl9CgoJLy8gbm90aWZ5IGluZm9ybXMgZnJvbnRlbmQgbGlzdGVuZXJzIHRoYXQgYW4gZXZlbnQgd2FzIGVtaXR0ZWQgd2l0aCB0aGUgZ2l2ZW4gZGF0YQoJZnVuY3Rpb24gbm90aWZ5KGV2ZW50TmFtZSwgZGF0YSkgewoJCWlmIChldmVudExpc3RlbmVyc1tldmVudE5hbWVdKSB7CgkJCWV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0uZm9yRWFjaChlbGVtZW50ID0+IHsKCQkJCXZhciBwYXJzZWREYXRhID0gW10KCQkJCS8vIFBhcnNlIGRhdGEgaWYgd2UgaGF2ZSBpdAoJCQkJaWYgKGRhdGEpIHsKCQkJCQl0cnkgewoJCQkJCQlwYXJzZWREYXRhID0gSlNPTi5wYXJzZShkYXRhKTsKCQkJCQl9IGNhdGNoIChlKSB7CgkJCQkJCXdhaWxzLmxvZy5lcnJvcigiSW52YWxpZCBKU09OIGRhdGEgc2VudCB0byBub3RpZnkuIEV2ZW50IG5hbWUgPSAiICsgZXZlbnROYW1lKQoJCQkJCX0KCQkJCX0KCQkJCWVsZW1lbnQuYXBwbHkobnVsbCwgcGFyc2VkRGF0YSk7CgkJCX0pOwoJCX0KCX0KCgkvLyBlbWl0IGFuIGV2ZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGRhdGEKCWZ1bmN0aW9uIGVtaXQoZXZlbnROYW1lKSB7CgoJCS8vIENhbGN1bGF0ZSB0aGUgZGF0YQoJCXZhciBkYXRhID0gSlNPTi5zdHJpbmdpZnkoW10uc2xpY2UuYXBwbHkoYXJndW1lbnRzKS5zbGljZSgxKSk7CgoJCS8vIE5vdGlmeSBiYWNrZW5kCgkJbWVzc2FnZSA9IHsKCQkJdHlwZTogImV2ZW50IiwKCQkJcGF5bG9hZDogewoJCQkJbmFtZTogZXZlbnROYW1lLAoJCQkJZGF0YTogZGF0YSwKCQkJfQoJCX0KCQlleHRlcm5hbC5pbnZva2UoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpOwoJfQoKCS8vIEV2ZW50cyBjYWxscwoJd2luZG93LndhaWxzLmV2ZW50cyA9IHsgZW1pdDogZW1pdCwgb246IG9uIH07CgoJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgkvKioqKioqKioqKioqKioqKioqKioqKioqKiBMb2dnaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCS8vIFNlbmRzIGEgbG9nIG1lc3NhZ2UgdG8gdGhlIGJhY2tlbmQgd2l0aCB0aGUgZ2l2ZW4KCS8vIGxldmVsICsgbWVzc2FnZQoJZnVuY3Rpb24gc2VuZExvZ01lc3NhZ2UobGV2ZWwsIG1lc3NhZ2UpIHsKCgkJLy8gTG9nIE1lc3NhZ2UKCQltZXNzYWdlID0gewoJCQl0eXBlOiAibG9nIiwKCQkJcGF5bG9hZDogewoJCQkJbGV2ZWw6IGxldmVsLAoJCQkJbWVzc2FnZTogbWVzc2FnZSwKCQkJfQoJCX0KCQlleHRlcm5hbC5pbnZva2UoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpOwoJfQoKCWZ1bmN0aW9uIGxvZ0RlYnVnKG1lc3NhZ2UpIHsKCQlzZW5kTG9nTWVzc2FnZSgiZGVidWciLCBtZXNzYWdlKTsKCX0KCWZ1bmN0aW9uIGxvZ0luZm8obWVzc2FnZSkgewoJCXNlbmRMb2dNZXNzYWdlKCJpbmZvIiwgbWVzc2FnZSk7Cgl9CglmdW5jdGlvbiBsb2dXYXJuaW5nKG1lc3NhZ2UpIHsKCQlzZW5kTG9nTWVzc2FnZSgid2FybmluZyIsIG1lc3NhZ2UpOwoJfQoJZnVuY3Rpb24gbG9nRXJyb3IobWVzc2FnZSkgewoJCXNlbmRMb2dNZXNzYWdlKCJlcnJvciIsIG1lc3NhZ2UpOwoJfQoJZnVuY3Rpb24gbG9nRmF0YWwobWVzc2FnZSkgewoJCXNlbmRMb2dNZXNzYWdlKCJmYXRhbCIsIG1lc3NhZ2UpOwoJfQoKCXdpbmRvdy53YWlscy5sb2cgPSB7CgkJZGVidWc6IGxvZ0RlYnVnLAoJCWluZm86IGxvZ0luZm8sCgkJd2FybmluZzogbG9nV2FybmluZywKCQllcnJvcjogbG9nRXJyb3IsCgkJZmF0YWw6IGxvZ0ZhdGFsLAoJfTsKCgkvKioqKioqKioqKioqKioqKioqKioqKioqKiogRXhwb3J0cyAqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCXdpbmRvdy53YWlscy5fID0gewoJCW5ld0JpbmRpbmc6IG5ld0JpbmRpbmcsCgkJY2FsbGJhY2s6IGNhbGxiYWNrLAoJCW5vdGlmeTogbm90aWZ5LAoJCXNlbmRMb2dNZXNzYWdlOiBzZW5kTG9nTWVzc2FnZSwKCQljYWxsYmFja3M6IGNhbGxiYWNrcywKCQlpbmplY3RDU1M6IGluamVjdENTUywKCQlhZGRTY3JpcHQ6IGFkZFNjcmlwdCwKCX0KCgkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCS8vIE5vdGlmeSBiYWNrZW5kIHRoYXQgdGhlIHJ1bnRpbWUgaGFzIGZpbmlzaGVkIGxvYWRpbmcKCXdpbmRvdy53YWlscy5ldmVudHMuZW1pdCgid2FpbHM6bG9hZGVkIik7Cgp9KSgp\"")
packr.PackJSONBytes("./assets/headless", "index.html", "\"PGh0bWw+Cgo8aGVhZD4KICA8dGl0bGU+V2FpbHMgSGVhZGxlc3M8L3RpdGxlPgogIDxzdHlsZT4KICAgIC53YWlscy1yZWNvbm5lY3Qtb3ZlcmxheSB7CiAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiAwOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOwogICAgICBkaXNwbGF5OiBub25lOwogICAgICB6LWluZGV4OiA5OTk5OTk7CiAgICB9CgogICAgLndhaWxzLXJlY29ubmVjdC1vdmVybGF5LWNvbnRlbnQgewogICAgICBwYWRkaW5nOiAyMHB4IDMwcHg7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgd2lkdGg6IDIwZW07CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgaGVpZ2h0OiAxNGVtOwogICAgICBib3JkZXItcmFkaXVzOiAxZW07CiAgICAgIG1hcmdpbjogNSUgYXV0byAwOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgYm94LXNoYWRvdzogMXB4IDFweCAyMHB4IDNweDsKICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUM4QUFBQXVDQU1BQUFDUHBiQTdBQUFBcUZCTVZFVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVCQVFBQUFBQUFBQUVCQVFBQUFBQUFBQUFBQUFFQkFRRUJBUURBd01CQVFFQUFBQUJBUUVBQUFBQUFBQUFBQUFCQVFFQUFBQUFBQUFDQWdJQ0FnSUJBUUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQVFFQUFBQUNBZ0lBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQlFXS0NqNm9BQUFBTjNSU1RsTUFMaUlxRGhrR0JBc3dKalAwR3hQNk5SNFc5L3p0alJETWhXVTUwRzlnNWVIWHZiWjlYRUk5eFpUY3FabDJhbGRLbzU1UXdvQ3ZaVWd6aEFBQUFzOUpSRUZVU01lTmxlZVdxakFVaFUwQkNhSDNJdGl3OXpLVDkzK3pHMDJRSzFobS81SEYranpaSjZmUWU2Y3lYRStqZzlYN285d3h1eWxJSWY0VHYyVjMrYk9yRVhuZjhkd1EvS1FJR0ROMi9TKzRPbVZDVlhML1NjQm5maWJ4VVJxSUJ5UC9oT05FOHI4VCtiRE1sUTk4S1NsN1k4aHpqcFM4djFxdERoOHU1ZjhLUXBHcGZuUFBocUc4SmVvZ04zN0hxOWVhTjJ4UmhJd0FhR252d3M4RjFTaHhxSzVvYjJ0d1lpMUZBTUQ0clhzWXRuQy9KRWlSYmw0Y1VyQ1dobk1DTFJGZW1YZXpYYmI1OVFLNFdBU09zbTZuMlcxKzRDQlQySm10elE2ZnNyYkd1YlIvTkZiZDJnNVkxNzkrNXcvR0VIYUtzSGpZQ2V0N0NnclhVM3R4YXJOQzdZeE9WSnRJajQvRVJ6TWRaZnpjMzFocCs4Y0Q2ZUdJTGdhclpZOXVaMTJoQXMwM3ZmQkQ5QzE3MWdTNU9tejdPY3Z4QUxRSW40dThSUkJCQmNzaTlXVzJ3b085aXBMZ2Z6cFlsZ2dnM1pSZFJPVUM4S1Q3UUxxcTNXOUtCNUJiZEZWZzQ5MjlrZHdwNitxYVpuTUNDTkJkaitOeU4xVzg4NVJ5L0FMM0Q0QVFic1ZWNG5vQ2lNL0M4M2t5WXE4MFhsREFZUXRyYWxPaUR6b1JBSGxvdFdsOHEydGp2WWxPZ2NnMUE4akVBcFphK0MwNlRCZEF6MlF2MHd1MTFJL3paT3lKUTZFd0dlejJQMmI4UElRcjFod3duQVpzQXh3QTRVQVlPeVhVeE0veHA2dEhBbjRHVW1QR005UjI4b1Z4Z0MwZS96UUpKSTZEeWh5WjFyN3V6UlFocGNXN3g3dlRhV1N6S1NHNmFlcDc3a3JvVEVsM1U4MXVTVmFVVHRnRUlOZkM4ZXB4K1E0RjlTcHBsSEc4NEVrNm00UkFxOS9UTGtPQnJ4eWV1ZGRaaEh2R0lwMVhYZkZ5M1ozdnR3TmJsS0dpRG4rSis5MnZ3d0FCSGdoajdIbnpsUzFINWtCNDlBWnZkR0NGZ2lCUHE2OXFmWFByM3krK3lpbEYwT040UjhlUjdzcEFzTHBaOTVOcUFXNXRhYjFjNHZrWm02YWxlYWpjaE13WVRkSUxRUVR3RTJPVjQxMVpNOVd6dERqUHFsMTJjYUJpNmdEcFVLbURkNFUxWE5kUXhaNExJWFE1L1RyNFA3STl0WWNGckRLM0FBQUFBRWxGVGtTdVFtQ0MiKTsKICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOwogICAgfQoKICAgIC53YWlscy1yZWNvbm5lY3Qtb3ZlcmxheS10aXRsZSB7CiAgICAgIGZvbnQtc2l6ZTogMmVtOwogICAgfQoKICAgIC53YWlscy1yZWNvbm5lY3Qtb3ZlcmxheS1tZXNzYWdlIHsKICAgICAgZm9udC1zaXplOiAxLjNlbTsKICAgIH0KCiAgICAvKiBodHRwczovL2NvZGVwZW4uaW8vRWFzdGluZ0FuZE5vcnRoaW5nL3Blbi9hTldyWnogLSBDaGVlcnMgTWFyayEgKi8KCiAgICAud2FpbHMtcmVjb25uZWN0LW92ZXJsYXktbG9hZGluZ3NwaW5uZXIgewogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgd2lkdGg6IDIuNWVtOwogICAgICBoZWlnaHQ6IDIuNWVtOwogICAgICBib3JkZXI6IDAuNGVtIHNvbGlkIHRyYW5zcGFyZW50OwogICAgICBib3JkZXItY29sb3I6ICNlZWU7CiAgICAgIGJvcmRlci10b3AtY29sb3I6ICMzRTY3RUM7CiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgYW5pbWF0aW9uOiBsb2FkaW5nc3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIG1hcmdpbjogYXV0bzsKICAgICAgcGFkZGluZzogMi41ZW07CiAgICB9CgogICAgQGtleWZyYW1lcyBsb2FkaW5nc3BpbiB7CiAgICAgIDEwMCUgewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZykKICAgICAgfQogICAgfQogIDwvc3R5bGU+CjwvaGVhZD4KCjxib2R5PgogIDxkaXYgY2xhc3M9IndhaWxzLXJlY29ubmVjdC1vdmVybGF5Ij4KICAgIDxkaXYgY2xhc3M9IndhaWxzLXJlY29ubmVjdC1vdmVybGF5LWNvbnRlbnQiPgogICAgICA8ZGl2IGNsYXNzPSJ3YWlscy1yZWNvbm5lY3Qtb3ZlcmxheS10aXRsZSI+RGlzY29ubmVjdGVkPC9kaXY+PGJyPgogICAgICA8ZGl2IGNsYXNzPSJ3YWlscy1yZWNvbm5lY3Qtb3ZlcmxheS1sb2FkaW5nc3Bpbm5lciI+PC9kaXY+PGJyPgogICAgICA8ZGl2IGNsYXNzPSJ3YWlscy1yZWNvbm5lY3Qtb3ZlcmxheS1tZXNzYWdlIj5XYWl0aW5nIGZvciBiYWNrZW5kPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPGRpdiBpZD0iYXBwIj48L2Rpdj4KCiAgPHNjcmlwdCBpZD0id2FpbHMtaGVhZGxlc3MtcnVudGltZSI+CiAgICAoZnVuY3Rpb24gKCkgewoKICAgICAgdmFyIHdlYnNvY2tldCA9IG51bGw7CiAgICAgIHZhciBjb25uZWN0VGltZXIgPSBudWxsOwogICAgICB2YXIgcmVjb25uZWN0T3ZlcmxheSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi53YWlscy1yZWNvbm5lY3Qtb3ZlcmxheSIpOwogICAgICB2YXIgY29ubmVjdGlvblN0YXRlID0gImRpc2Nvbm5lY3RlZCI7CgogICAgICBmdW5jdGlvbiBzaG93UmVjb25uZWN0T3ZlcmxheSgpIHsKICAgICAgICByZWNvbm5lY3RPdmVybGF5LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgICB9CgogICAgICBmdW5jdGlvbiBoaWRlUmVjb25uZWN0T3ZlcmxheSgpIHsKICAgICAgICByZWNvbm5lY3RPdmVybGF5LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgIH0KCiAgICAgIHdpbmRvdy5leHRlcm5hbCA9IHsKICAgICAgICBpbnZva2U6IGZ1bmN0aW9uIChtc2cpIHsKICAgICAgICAgIHdlYnNvY2tldC5zZW5kKG1zZyk7CiAgICAgICAgfQogICAgICB9OwoKICAgICAgZnVuY3Rpb24gYWRkU2NyaXB0KHNjcmlwdCwgaWQpIHsKICAgICAgICB2YXIgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpCiAgICAgICAgaWYgKGlkKSB7CiAgICAgICAgICBzLmlkID0gaWQ7CiAgICAgICAgfQogICAgICAgIHMudGV4dENvbnRlbnQgPSBzY3JpcHQ7CiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzKQogICAgICAgIGlmIChzY3JpcHQuaW5kZXhPZigid2luZG93LndhaWxzLl8uIikgPT0gMCkgewogICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjJyArIGlkKTsKICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGhhbmRsZUNvbm5lY3QoKSB7CiAgICAgICAgY29uc29sZS5sb2coIltXYWlsc10gQ29ubmVjdGVkIHRvIGJhY2tlbmQiKTsKICAgICAgICBhZGRLZXlMaXN0ZW5lcigpOwogICAgICAgIGhpZGVSZWNvbm5lY3RPdmVybGF5KCk7CiAgICAgICAgY2xlYXJJbnRlcnZhbChjb25uZWN0VGltZXIpOwogICAgICAgIHdlYnNvY2tldC5vbmNsb3NlID0gaGFuZGxlRGlzY29ubmVjdDsKICAgICAgICB3ZWJzb2NrZXQub25tZXNzYWdlID0gaGFuZGxlTWVzc2FnZTsKICAgICAgICBjb25uZWN0aW9uU3RhdGUgPSAiY29ubmVjdGVkIjsKICAgICAgICAvLyB3ZWJzb2NrZXQub25lcnJvciA9IGZ1bmN0aW9uICgpIHsgfQogICAgICB9CgogICAgICBmdW5jdGlvbiBoYW5kbGVEaXNjb25uZWN0KCkgewogICAgICAgIGNvbnNvbGUubG9nKCJbV2FpbHNdIERpc2Nvbm5lY3RlZCBmcm9tIGJhY2tlbmQiKTsKICAgICAgICB3ZWJzb2NrZXQgPSBudWxsOwogICAgICAgIHJlbW92ZUtleUxpc3RlbmVyKCk7CiAgICAgICAgY29ubmVjdGlvblN0YXRlID0gImRpc2Nvbm5lY3RlZCI7CiAgICAgICAgc2hvd1JlY29ubmVjdE92ZXJsYXkoKTsKICAgICAgICBjb25uZWN0KCk7CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGNvbm5lY3QoKSB7CiAgICAgICAgY29ubmVjdFRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewogICAgICAgICAgaWYgKHdlYnNvY2tldCA9PSBudWxsKSB7CiAgICAgICAgICAgIHdlYnNvY2tldCA9IG5ldyBXZWJTb2NrZXQoIndzOi8vbG9jYWxob3N0OjM0MTE1L3dzIikKICAgICAgICAgICAgd2Vic29ja2V0Lm9ub3BlbiA9IGhhbmRsZUNvbm5lY3Q7CiAgICAgICAgICAgIHdlYnNvY2tldC5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgIHdlYnNvY2tldCA9IG51bGw7CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LCAzMDApOwogICAgICB9CgogICAgICBsZXQgaWRjb3VudGVyID0gMAogICAgICBmdW5jdGlvbiBnZW5lcmF0ZUlEKCkgewogICAgICAgIHJldHVybiAid2FpbHMtIiArIGlkY291bnRlcisrOwogICAgICB9CgogICAgICBmdW5jdGlvbiBoYW5kbGVNZXNzYWdlKGUpIHsKICAgICAgICBhZGRTY3JpcHQoZS5kYXRhLCBnZW5lcmF0ZUlEKCkpOwogICAgICB9CgogICAgICAvLyBLZXkgbGlzdGVuZXIKICAgICAgdmFyIGRlbHRhID0gMzAwOwogICAgICB2YXIgbGFzdEtleXByZXNzVGltZSA9IDA7CiAgICAgIGZ1bmN0aW9uIEtleUhhbmRsZXIoZXZlbnQpIHsKICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAiYCIpIHsKICAgICAgICAgIHZhciB0aGlzS2V5cHJlc3NUaW1lID0gbmV3IERhdGUoKTsKICAgICAgICAgIGlmICh0aGlzS2V5cHJlc3NUaW1lIC0gbGFzdEtleXByZXNzVGltZSA8PSBkZWx0YSkgewogICAgICAgICAgICBjb25zb2xlLmxvZygiRG91YmxlIHRhcCEiKQogICAgICAgICAgICAvLyBvcHRpb25hbCAtIGlmIHdlJ2QgcmF0aGVyIG5vdCBkZXRlY3QgYSB0cmlwbGUtcHJlc3MKICAgICAgICAgICAgLy8gYXMgYSBzZWNvbmQgZG91YmxlLXByZXNzLCByZXNldCB0aGUgdGltZXN0YW1wCiAgICAgICAgICAgIHRoaXNLZXlwcmVzc1RpbWUgPSAwOwogICAgICAgICAgfQogICAgICAgICAgbGFzdEtleXByZXNzVGltZSA9IHRoaXNLZXlwcmVzc1RpbWU7CiAgICAgICAgfQogICAgICB9CgogICAgICBmdW5jdGlvbiBhZGRLZXlMaXN0ZW5lcigpIHsKICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBLZXlIYW5kbGVyKTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gcmVtb3ZlS2V5TGlzdGVuZXIoKSB7CiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgS2V5SGFuZGxlcik7CiAgICAgIH0KCiAgICAgIGNvbm5lY3QoKTsKCiAgICB9KCkpOwoKICA8L3NjcmlwdD4KCjwvYm9keT4KCjwvaHRtbD4=\"")
packr.PackJSONBytes("./assets/default", "default.html", "\"PGRpdiBpZD0iYXBwIj48L2Rpdj4=\"")
packr.PackJSONBytes("./assets/default", "jquery.3.3.1.min.js", "\"LyohIGpRdWVyeSB2My4zLjEgLWFqYXgsLWFqYXgvanNvbnAsLWFqYXgvbG9hZCwtYWpheC9wYXJzZVhNTCwtYWpheC9zY3JpcHQsLWFqYXgvdmFyL2xvY2F0aW9uLC1hamF4L3Zhci9ub25jZSwtYWpheC92YXIvcnF1ZXJ5LC1hamF4L3hociwtbWFuaXB1bGF0aW9uL19ldmFsVXJsLC1ldmVudC9hamF4LC1lZmZlY3RzLC1lZmZlY3RzL1R3ZWVuLC1lZmZlY3RzL2FuaW1hdGVkU2VsZWN0b3IgfCAoYykgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovCiFmdW5jdGlvbiAoZSwgdCkgeyAidXNlIHN0cmljdCI7ICJvYmplY3QiID09IHR5cGVvZiBtb2R1bGUgJiYgIm9iamVjdCIgPT0gdHlwZW9mIG1vZHVsZS5leHBvcnRzID8gbW9kdWxlLmV4cG9ydHMgPSBlLmRvY3VtZW50ID8gdChlLCAhMCkgOiBmdW5jdGlvbiAoZSkgeyBpZiAoIWUuZG9jdW1lbnQpIHRocm93IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIpOyByZXR1cm4gdChlKSB9IDogdChlKSB9KCJ1bmRlZmluZWQiICE9IHR5cGVvZiB3aW5kb3cgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiAoZSwgdCkgeyAidXNlIHN0cmljdCI7IHZhciBuID0gW10sIHIgPSBlLmRvY3VtZW50LCBpID0gT2JqZWN0LmdldFByb3RvdHlwZU9mLCBvID0gbi5zbGljZSwgYSA9IG4uY29uY2F0LCB1ID0gbi5wdXNoLCBzID0gbi5pbmRleE9mLCBsID0ge30sIGMgPSBsLnRvU3RyaW5nLCBmID0gbC5oYXNPd25Qcm9wZXJ0eSwgZCA9IGYudG9TdHJpbmcsIHAgPSBkLmNhbGwoT2JqZWN0KSwgaCA9IHt9LCBnID0gZnVuY3Rpb24gZSh0KSB7IHJldHVybiAiZnVuY3Rpb24iID09IHR5cGVvZiB0ICYmICJudW1iZXIiICE9IHR5cGVvZiB0Lm5vZGVUeXBlIH0sIHYgPSBmdW5jdGlvbiBlKHQpIHsgcmV0dXJuIG51bGwgIT0gdCAmJiB0ID09PSB0LndpbmRvdyB9LCB5ID0geyB0eXBlOiAhMCwgc3JjOiAhMCwgbm9Nb2R1bGU6ICEwIH07IGZ1bmN0aW9uIG0oZSwgdCwgbikgeyB2YXIgaSwgbyA9ICh0ID0gdCB8fCByKS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsgaWYgKG8udGV4dCA9IGUsIG4pIGZvciAoaSBpbiB5KSBuW2ldICYmIChvW2ldID0gbltpXSk7IHQuaGVhZC5hcHBlbmRDaGlsZChvKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pIH0gZnVuY3Rpb24gYihlKSB7IHJldHVybiBudWxsID09IGUgPyBlICsgIiIgOiAib2JqZWN0IiA9PSB0eXBlb2YgZSB8fCAiZnVuY3Rpb24iID09IHR5cGVvZiBlID8gbFtjLmNhbGwoZSldIHx8ICJvYmplY3QiIDogdHlwZW9mIGUgfSB2YXIgeCA9ICIzLjMuMSAtYWpheCwtYWpheC9qc29ucCwtYWpheC9sb2FkLC1hamF4L3BhcnNlWE1MLC1hamF4L3NjcmlwdCwtYWpheC92YXIvbG9jYXRpb24sLWFqYXgvdmFyL25vbmNlLC1hamF4L3Zhci9ycXVlcnksLWFqYXgveGhyLC1tYW5pcHVsYXRpb24vX2V2YWxVcmwsLWV2ZW50L2FqYXgsLWVmZmVjdHMsLWVmZmVjdHMvVHdlZW4sLWVmZmVjdHMvYW5pbWF0ZWRTZWxlY3RvciIsIHcgPSBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gbmV3IHcuZm4uaW5pdChlLCB0KSB9LCBDID0gL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nOyB3LmZuID0gdy5wcm90b3R5cGUgPSB7IGpxdWVyeTogeCwgY29uc3RydWN0b3I6IHcsIGxlbmd0aDogMCwgdG9BcnJheTogZnVuY3Rpb24gKCkgeyByZXR1cm4gby5jYWxsKHRoaXMpIH0sIGdldDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG51bGwgPT0gZSA/IG8uY2FsbCh0aGlzKSA6IGUgPCAwID8gdGhpc1tlICsgdGhpcy5sZW5ndGhdIDogdGhpc1tlXSB9LCBwdXNoU3RhY2s6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gdy5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksIGUpOyByZXR1cm4gdC5wcmV2T2JqZWN0ID0gdGhpcywgdCB9LCBlYWNoOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdy5lYWNoKHRoaXMsIGUpIH0sIG1hcDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHRoaXMucHVzaFN0YWNrKHcubWFwKHRoaXMsIGZ1bmN0aW9uICh0LCBuKSB7IHJldHVybiBlLmNhbGwodCwgbiwgdCkgfSkpIH0sIHNsaWNlOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnB1c2hTdGFjayhvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIH0sIGZpcnN0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmVxKDApIH0sIGxhc3Q6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuZXEoLTEpIH0sIGVxOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IHRoaXMubGVuZ3RoLCBuID0gK2UgKyAoZSA8IDAgPyB0IDogMCk7IHJldHVybiB0aGlzLnB1c2hTdGFjayhuID49IDAgJiYgbiA8IHQgPyBbdGhpc1tuXV0gOiBbXSkgfSwgZW5kOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpIH0sIHB1c2g6IHUsIHNvcnQ6IG4uc29ydCwgc3BsaWNlOiBuLnNwbGljZSB9LCB3LmV4dGVuZCA9IHcuZm4uZXh0ZW5kID0gZnVuY3Rpb24gKCkgeyB2YXIgZSwgdCwgbiwgciwgaSwgbywgYSA9IGFyZ3VtZW50c1swXSB8fCB7fSwgdSA9IDEsIHMgPSBhcmd1bWVudHMubGVuZ3RoLCBsID0gITE7IGZvciAoImJvb2xlYW4iID09IHR5cGVvZiBhICYmIChsID0gYSwgYSA9IGFyZ3VtZW50c1t1XSB8fCB7fSwgdSsrKSwgIm9iamVjdCIgPT0gdHlwZW9mIGEgfHwgZyhhKSB8fCAoYSA9IHt9KSwgdSA9PT0gcyAmJiAoYSA9IHRoaXMsIHUtLSk7IHUgPCBzOyB1KyspaWYgKG51bGwgIT0gKGUgPSBhcmd1bWVudHNbdV0pKSBmb3IgKHQgaW4gZSkgbiA9IGFbdF0sIGEgIT09IChyID0gZVt0XSkgJiYgKGwgJiYgciAmJiAody5pc1BsYWluT2JqZWN0KHIpIHx8IChpID0gQXJyYXkuaXNBcnJheShyKSkpID8gKGkgPyAoaSA9ICExLCBvID0gbiAmJiBBcnJheS5pc0FycmF5KG4pID8gbiA6IFtdKSA6IG8gPSBuICYmIHcuaXNQbGFpbk9iamVjdChuKSA/IG4gOiB7fSwgYVt0XSA9IHcuZXh0ZW5kKGwsIG8sIHIpKSA6IHZvaWQgMCAhPT0gciAmJiAoYVt0XSA9IHIpKTsgcmV0dXJuIGEgfSwgdy5leHRlbmQoeyBleHBhbmRvOiAialF1ZXJ5IiArICh4ICsgTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywgIiIpLCBpc1JlYWR5OiAhMCwgZXJyb3I6IGZ1bmN0aW9uIChlKSB7IHRocm93IG5ldyBFcnJvcihlKSB9LCBub29wOiBmdW5jdGlvbiAoKSB7IH0sIGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uIChlKSB7IHZhciB0LCBuOyByZXR1cm4gISghZSB8fCAiW29iamVjdCBPYmplY3RdIiAhPT0gYy5jYWxsKGUpKSAmJiAoISh0ID0gaShlKSkgfHwgImZ1bmN0aW9uIiA9PSB0eXBlb2YgKG4gPSBmLmNhbGwodCwgImNvbnN0cnVjdG9yIikgJiYgdC5jb25zdHJ1Y3RvcikgJiYgZC5jYWxsKG4pID09PSBwKSB9LCBpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiAoZSkgeyB2YXIgdDsgZm9yICh0IGluIGUpIHJldHVybiAhMTsgcmV0dXJuICEwIH0sIGdsb2JhbEV2YWw6IGZ1bmN0aW9uIChlKSB7IG0oZSkgfSwgZWFjaDogZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4sIHIgPSAwOyBpZiAoVChlKSkgeyBmb3IgKG4gPSBlLmxlbmd0aDsgciA8IG47IHIrKylpZiAoITEgPT09IHQuY2FsbChlW3JdLCByLCBlW3JdKSkgYnJlYWsgfSBlbHNlIGZvciAociBpbiBlKSBpZiAoITEgPT09IHQuY2FsbChlW3JdLCByLCBlW3JdKSkgYnJlYWs7IHJldHVybiBlIH0sIHRyaW06IGZ1bmN0aW9uIChlKSB7IHJldHVybiBudWxsID09IGUgPyAiIiA6IChlICsgIiIpLnJlcGxhY2UoQywgIiIpIH0sIG1ha2VBcnJheTogZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4gPSB0IHx8IFtdOyByZXR1cm4gbnVsbCAhPSBlICYmIChUKE9iamVjdChlKSkgPyB3Lm1lcmdlKG4sICJzdHJpbmciID09IHR5cGVvZiBlID8gW2VdIDogZSkgOiB1LmNhbGwobiwgZSkpLCBuIH0sIGluQXJyYXk6IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiBudWxsID09IHQgPyAtMSA6IHMuY2FsbCh0LCBlLCBuKSB9LCBtZXJnZTogZnVuY3Rpb24gKGUsIHQpIHsgZm9yICh2YXIgbiA9ICt0Lmxlbmd0aCwgciA9IDAsIGkgPSBlLmxlbmd0aDsgciA8IG47IHIrKyllW2krK10gPSB0W3JdOyByZXR1cm4gZS5sZW5ndGggPSBpLCBlIH0sIGdyZXA6IGZ1bmN0aW9uIChlLCB0LCBuKSB7IGZvciAodmFyIHIsIGkgPSBbXSwgbyA9IDAsIGEgPSBlLmxlbmd0aCwgdSA9ICFuOyBvIDwgYTsgbysrKShyID0gIXQoZVtvXSwgbykpICE9PSB1ICYmIGkucHVzaChlW29dKTsgcmV0dXJuIGkgfSwgbWFwOiBmdW5jdGlvbiAoZSwgdCwgbikgeyB2YXIgciwgaSwgbyA9IDAsIHUgPSBbXTsgaWYgKFQoZSkpIGZvciAociA9IGUubGVuZ3RoOyBvIDwgcjsgbysrKW51bGwgIT0gKGkgPSB0KGVbb10sIG8sIG4pKSAmJiB1LnB1c2goaSk7IGVsc2UgZm9yIChvIGluIGUpIG51bGwgIT0gKGkgPSB0KGVbb10sIG8sIG4pKSAmJiB1LnB1c2goaSk7IHJldHVybiBhLmFwcGx5KFtdLCB1KSB9LCBndWlkOiAxLCBzdXBwb3J0OiBoIH0pLCAiZnVuY3Rpb24iID09IHR5cGVvZiBTeW1ib2wgJiYgKHcuZm5bU3ltYm9sLml0ZXJhdG9yXSA9IG5bU3ltYm9sLml0ZXJhdG9yXSksIHcuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2wiLnNwbGl0KCIgIiksIGZ1bmN0aW9uIChlLCB0KSB7IGxbIltvYmplY3QgIiArIHQgKyAiXSJdID0gdC50b0xvd2VyQ2FzZSgpIH0pOyBmdW5jdGlvbiBUKGUpIHsgdmFyIHQgPSAhIWUgJiYgImxlbmd0aCIgaW4gZSAmJiBlLmxlbmd0aCwgbiA9IGIoZSk7IHJldHVybiAhZyhlKSAmJiAhdihlKSAmJiAoImFycmF5IiA9PT0gbiB8fCAwID09PSB0IHx8ICJudW1iZXIiID09IHR5cGVvZiB0ICYmIHQgPiAwICYmIHQgLSAxIGluIGUpIH0gdmFyIEUgPSBmdW5jdGlvbiAoZSkgeyB2YXIgdCwgbiwgciwgaSwgbywgYSwgdSwgcywgbCwgYywgZiwgZCwgcCwgaCwgZywgdiwgeSwgbSwgYiwgeCA9ICJzaXp6bGUiICsgMSAqIG5ldyBEYXRlLCB3ID0gZS5kb2N1bWVudCwgQyA9IDAsIFQgPSAwLCBFID0gYWUoKSwgTiA9IGFlKCksIGsgPSBhZSgpLCBBID0gZnVuY3Rpb24gKGUsIHQpIHsgcmV0dXJuIGUgPT09IHQgJiYgKGYgPSAhMCksIDAgfSwgRCA9IHt9Lmhhc093blByb3BlcnR5LCBTID0gW10sIEwgPSBTLnBvcCwgaiA9IFMucHVzaCwgcSA9IFMucHVzaCwgTyA9IFMuc2xpY2UsIFAgPSBmdW5jdGlvbiAoZSwgdCkgeyBmb3IgKHZhciBuID0gMCwgciA9IGUubGVuZ3RoOyBuIDwgcjsgbisrKWlmIChlW25dID09PSB0KSByZXR1cm4gbjsgcmV0dXJuIC0xIH0sIEggPSAiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLCBJID0gIltcXHgyMFxcdFxcclxcblxcZl0iLCBSID0gIig/OlxcXFwufFtcXHctXXxbXlwwLVxceGEwXSkrIiwgQiA9ICJcXFsiICsgSSArICIqKCIgKyBSICsgIikoPzoiICsgSSArICIqKFsqXiR8IX5dPz0pIiArIEkgKyAiKig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwifCgiICsgUiArICIpKXwpIiArIEkgKyAiKlxcXSIsIE0gPSAiOigiICsgUiArICIpKD86XFwoKCgnKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcIil8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IiArIEIgKyAiKSopfC4qKVxcKXwpIiwgVyA9IG5ldyBSZWdFeHAoSSArICIrIiwgImciKSwgJCA9IG5ldyBSZWdFeHAoIl4iICsgSSArICIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiICsgSSArICIrJCIsICJnIiksIEYgPSBuZXcgUmVnRXhwKCJeIiArIEkgKyAiKiwiICsgSSArICIqIiksIHogPSBuZXcgUmVnRXhwKCJeIiArIEkgKyAiKihbPit+XXwiICsgSSArICIpIiArIEkgKyAiKiIpLCBfID0gbmV3IFJlZ0V4cCgiPSIgKyBJICsgIiooW15cXF0nXCJdKj8pIiArIEkgKyAiKlxcXSIsICJnIiksIFUgPSBuZXcgUmVnRXhwKE0pLCBWID0gbmV3IFJlZ0V4cCgiXiIgKyBSICsgIiQiKSwgWCA9IHsgSUQ6IG5ldyBSZWdFeHAoIl4jKCIgKyBSICsgIikiKSwgQ0xBU1M6IG5ldyBSZWdFeHAoIl5cXC4oIiArIFIgKyAiKSIpLCBUQUc6IG5ldyBSZWdFeHAoIl4oIiArIFIgKyAifFsqXSkiKSwgQVRUUjogbmV3IFJlZ0V4cCgiXiIgKyBCKSwgUFNFVURPOiBuZXcgUmVnRXhwKCJeIiArIE0pLCBDSElMRDogbmV3IFJlZ0V4cCgiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFwoIiArIEkgKyAiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIgKyBJICsgIiooPzooWystXXwpIiArIEkgKyAiKihcXGQrKXwpKSIgKyBJICsgIipcXCl8KSIsICJpIiksIGJvb2w6IG5ldyBSZWdFeHAoIl4oPzoiICsgSCArICIpJCIsICJpIiksIG5lZWRzQ29udGV4dDogbmV3IFJlZ0V4cCgiXiIgKyBJICsgIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIgKyBJICsgIiooKD86LVxcZCk/XFxkKikiICsgSSArICIqXFwpfCkoPz1bXi1dfCQpIiwgImkiKSB9LCBRID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSwgWSA9IC9eaFxkJC9pLCBHID0gL15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLCBLID0gL14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLywgSiA9IC9bK35dLywgWiA9IG5ldyBSZWdFeHAoIlxcXFwoW1xcZGEtZl17MSw2fSIgKyBJICsgIj98KCIgKyBJICsgIil8LikiLCAiaWciKSwgZWUgPSBmdW5jdGlvbiAoZSwgdCwgbikgeyB2YXIgciA9ICIweCIgKyB0IC0gNjU1MzY7IHJldHVybiByICE9PSByIHx8IG4gPyB0IDogciA8IDAgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKHIgKyA2NTUzNikgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKHIgPj4gMTAgfCA1NTI5NiwgMTAyMyAmIHIgfCA1NjMyMCkgfSwgdGUgPSAvKFtcMC1ceDFmXHg3Zl18Xi0/XGQpfF4tJHxbXlwwLVx4MWZceDdmLVx1RkZGRlx3LV0vZywgbmUgPSBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gdCA/ICJcMCIgPT09IGUgPyAiXHVmZmZkIiA6IGUuc2xpY2UoMCwgLTEpICsgIlxcIiArIGUuY2hhckNvZGVBdChlLmxlbmd0aCAtIDEpLnRvU3RyaW5nKDE2KSArICIgIiA6ICJcXCIgKyBlIH0sIHJlID0gZnVuY3Rpb24gKCkgeyBkKCkgfSwgaWUgPSBtZShmdW5jdGlvbiAoZSkgeyByZXR1cm4gITAgPT09IGUuZGlzYWJsZWQgJiYgKCJmb3JtIiBpbiBlIHx8ICJsYWJlbCIgaW4gZSkgfSwgeyBkaXI6ICJwYXJlbnROb2RlIiwgbmV4dDogImxlZ2VuZCIgfSk7IHRyeSB7IHEuYXBwbHkoUyA9IE8uY2FsbCh3LmNoaWxkTm9kZXMpLCB3LmNoaWxkTm9kZXMpLCBTW3cuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlIH0gY2F0Y2ggKGUpIHsgcSA9IHsgYXBwbHk6IFMubGVuZ3RoID8gZnVuY3Rpb24gKGUsIHQpIHsgai5hcHBseShlLCBPLmNhbGwodCkpIH0gOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiA9IGUubGVuZ3RoLCByID0gMDsgd2hpbGUgKGVbbisrXSA9IHRbcisrXSk7IGUubGVuZ3RoID0gbiAtIDEgfSB9IH0gZnVuY3Rpb24gb2UoZSwgdCwgciwgaSkgeyB2YXIgbywgdSwgbCwgYywgZiwgaCwgeSwgbSA9IHQgJiYgdC5vd25lckRvY3VtZW50LCBDID0gdCA/IHQubm9kZVR5cGUgOiA5OyBpZiAociA9IHIgfHwgW10sICJzdHJpbmciICE9IHR5cGVvZiBlIHx8ICFlIHx8IDEgIT09IEMgJiYgOSAhPT0gQyAmJiAxMSAhPT0gQykgcmV0dXJuIHI7IGlmICghaSAmJiAoKHQgPyB0Lm93bmVyRG9jdW1lbnQgfHwgdCA6IHcpICE9PSBwICYmIGQodCksIHQgPSB0IHx8IHAsIGcpKSB7IGlmICgxMSAhPT0gQyAmJiAoZiA9IEsuZXhlYyhlKSkpIGlmIChvID0gZlsxXSkgeyBpZiAoOSA9PT0gQykgeyBpZiAoIShsID0gdC5nZXRFbGVtZW50QnlJZChvKSkpIHJldHVybiByOyBpZiAobC5pZCA9PT0gbykgcmV0dXJuIHIucHVzaChsKSwgciB9IGVsc2UgaWYgKG0gJiYgKGwgPSBtLmdldEVsZW1lbnRCeUlkKG8pKSAmJiBiKHQsIGwpICYmIGwuaWQgPT09IG8pIHJldHVybiByLnB1c2gobCksIHIgfSBlbHNlIHsgaWYgKGZbMl0pIHJldHVybiBxLmFwcGx5KHIsIHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSkpLCByOyBpZiAoKG8gPSBmWzNdKSAmJiBuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSByZXR1cm4gcS5hcHBseShyLCB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUobykpLCByIH0gaWYgKG4ucXNhICYmICFrW2UgKyAiICJdICYmICghdiB8fCAhdi50ZXN0KGUpKSkgeyBpZiAoMSAhPT0gQykgbSA9IHQsIHkgPSBlOyBlbHNlIGlmICgib2JqZWN0IiAhPT0gdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSB7IChjID0gdC5nZXRBdHRyaWJ1dGUoImlkIikpID8gYyA9IGMucmVwbGFjZSh0ZSwgbmUpIDogdC5zZXRBdHRyaWJ1dGUoImlkIiwgYyA9IHgpLCB1ID0gKGggPSBhKGUpKS5sZW5ndGg7IHdoaWxlICh1LS0pIGhbdV0gPSAiIyIgKyBjICsgIiAiICsgeWUoaFt1XSk7IHkgPSBoLmpvaW4oIiwiKSwgbSA9IEoudGVzdChlKSAmJiBnZSh0LnBhcmVudE5vZGUpIHx8IHQgfSBpZiAoeSkgdHJ5IHsgcmV0dXJuIHEuYXBwbHkociwgbS5xdWVyeVNlbGVjdG9yQWxsKHkpKSwgciB9IGNhdGNoIChlKSB7IH0gZmluYWxseSB7IGMgPT09IHggJiYgdC5yZW1vdmVBdHRyaWJ1dGUoImlkIikgfSB9IH0gcmV0dXJuIHMoZS5yZXBsYWNlKCQsICIkMSIpLCB0LCByLCBpKSB9IGZ1bmN0aW9uIGFlKCkgeyB2YXIgZSA9IFtdOyBmdW5jdGlvbiB0KG4sIGkpIHsgcmV0dXJuIGUucHVzaChuICsgIiAiKSA+IHIuY2FjaGVMZW5ndGggJiYgZGVsZXRlIHRbZS5zaGlmdCgpXSwgdFtuICsgIiAiXSA9IGkgfSByZXR1cm4gdCB9IGZ1bmN0aW9uIHVlKGUpIHsgcmV0dXJuIGVbeF0gPSAhMCwgZSB9IGZ1bmN0aW9uIHNlKGUpIHsgdmFyIHQgPSBwLmNyZWF0ZUVsZW1lbnQoImZpZWxkc2V0Iik7IHRyeSB7IHJldHVybiAhIWUodCkgfSBjYXRjaCAoZSkgeyByZXR1cm4gITEgfSBmaW5hbGx5IHsgdC5wYXJlbnROb2RlICYmIHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSwgdCA9IG51bGwgfSB9IGZ1bmN0aW9uIGxlKGUsIHQpIHsgdmFyIG4gPSBlLnNwbGl0KCJ8IiksIGkgPSBuLmxlbmd0aDsgd2hpbGUgKGktLSkgci5hdHRySGFuZGxlW25baV1dID0gdCB9IGZ1bmN0aW9uIGNlKGUsIHQpIHsgdmFyIG4gPSB0ICYmIGUsIHIgPSBuICYmIDEgPT09IGUubm9kZVR5cGUgJiYgMSA9PT0gdC5ub2RlVHlwZSAmJiBlLnNvdXJjZUluZGV4IC0gdC5zb3VyY2VJbmRleDsgaWYgKHIpIHJldHVybiByOyBpZiAobikgd2hpbGUgKG4gPSBuLm5leHRTaWJsaW5nKSBpZiAobiA9PT0gdCkgcmV0dXJuIC0xOyByZXR1cm4gZSA/IDEgOiAtMSB9IGZ1bmN0aW9uIGZlKGUpIHsgcmV0dXJuIGZ1bmN0aW9uICh0KSB7IHJldHVybiAiaW5wdXQiID09PSB0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgJiYgdC50eXBlID09PSBlIH0gfSBmdW5jdGlvbiBkZShlKSB7IHJldHVybiBmdW5jdGlvbiAodCkgeyB2YXIgbiA9IHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsgcmV0dXJuICgiaW5wdXQiID09PSBuIHx8ICJidXR0b24iID09PSBuKSAmJiB0LnR5cGUgPT09IGUgfSB9IGZ1bmN0aW9uIHBlKGUpIHsgcmV0dXJuIGZ1bmN0aW9uICh0KSB7IHJldHVybiAiZm9ybSIgaW4gdCA/IHQucGFyZW50Tm9kZSAmJiAhMSA9PT0gdC5kaXNhYmxlZCA/ICJsYWJlbCIgaW4gdCA/ICJsYWJlbCIgaW4gdC5wYXJlbnROb2RlID8gdC5wYXJlbnROb2RlLmRpc2FibGVkID09PSBlIDogdC5kaXNhYmxlZCA9PT0gZSA6IHQuaXNEaXNhYmxlZCA9PT0gZSB8fCB0LmlzRGlzYWJsZWQgIT09ICFlICYmIGllKHQpID09PSBlIDogdC5kaXNhYmxlZCA9PT0gZSA6ICJsYWJlbCIgaW4gdCAmJiB0LmRpc2FibGVkID09PSBlIH0gfSBmdW5jdGlvbiBoZShlKSB7IHJldHVybiB1ZShmdW5jdGlvbiAodCkgeyByZXR1cm4gdCA9ICt0LCB1ZShmdW5jdGlvbiAobiwgcikgeyB2YXIgaSwgbyA9IGUoW10sIG4ubGVuZ3RoLCB0KSwgYSA9IG8ubGVuZ3RoOyB3aGlsZSAoYS0tKSBuW2kgPSBvW2FdXSAmJiAobltpXSA9ICEocltpXSA9IG5baV0pKSB9KSB9KSB9IGZ1bmN0aW9uIGdlKGUpIHsgcmV0dXJuIGUgJiYgInVuZGVmaW5lZCIgIT0gdHlwZW9mIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUgJiYgZSB9IG4gPSBvZS5zdXBwb3J0ID0ge30sIG8gPSBvZS5pc1hNTCA9IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gZSAmJiAoZS5vd25lckRvY3VtZW50IHx8IGUpLmRvY3VtZW50RWxlbWVudDsgcmV0dXJuICEhdCAmJiAiSFRNTCIgIT09IHQubm9kZU5hbWUgfSwgZCA9IG9lLnNldERvY3VtZW50ID0gZnVuY3Rpb24gKGUpIHsgdmFyIHQsIGksIGEgPSBlID8gZS5vd25lckRvY3VtZW50IHx8IGUgOiB3OyByZXR1cm4gYSAhPT0gcCAmJiA5ID09PSBhLm5vZGVUeXBlICYmIGEuZG9jdW1lbnRFbGVtZW50ID8gKHAgPSBhLCBoID0gcC5kb2N1bWVudEVsZW1lbnQsIGcgPSAhbyhwKSwgdyAhPT0gcCAmJiAoaSA9IHAuZGVmYXVsdFZpZXcpICYmIGkudG9wICE9PSBpICYmIChpLmFkZEV2ZW50TGlzdGVuZXIgPyBpLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsIHJlLCAhMSkgOiBpLmF0dGFjaEV2ZW50ICYmIGkuYXR0YWNoRXZlbnQoIm9udW5sb2FkIiwgcmUpKSwgbi5hdHRyaWJ1dGVzID0gc2UoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUuY2xhc3NOYW1lID0gImkiLCAhZS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpIH0pLCBuLmdldEVsZW1lbnRzQnlUYWdOYW1lID0gc2UoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUuYXBwZW5kQ2hpbGQocC5jcmVhdGVDb21tZW50KCIiKSksICFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RoIH0pLCBuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBHLnRlc3QocC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSwgbi5nZXRCeUlkID0gc2UoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGguYXBwZW5kQ2hpbGQoZSkuaWQgPSB4LCAhcC5nZXRFbGVtZW50c0J5TmFtZSB8fCAhcC5nZXRFbGVtZW50c0J5TmFtZSh4KS5sZW5ndGggfSksIG4uZ2V0QnlJZCA/IChyLmZpbHRlci5JRCA9IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gZS5yZXBsYWNlKFosIGVlKTsgcmV0dXJuIGZ1bmN0aW9uIChlKSB7IHJldHVybiBlLmdldEF0dHJpYnV0ZSgiaWQiKSA9PT0gdCB9IH0sIHIuZmluZC5JRCA9IGZ1bmN0aW9uIChlLCB0KSB7IGlmICgidW5kZWZpbmVkIiAhPSB0eXBlb2YgdC5nZXRFbGVtZW50QnlJZCAmJiBnKSB7IHZhciBuID0gdC5nZXRFbGVtZW50QnlJZChlKTsgcmV0dXJuIG4gPyBbbl0gOiBbXSB9IH0pIDogKHIuZmlsdGVyLklEID0gZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSBlLnJlcGxhY2UoWiwgZWUpOyByZXR1cm4gZnVuY3Rpb24gKGUpIHsgdmFyIG4gPSAidW5kZWZpbmVkIiAhPSB0eXBlb2YgZS5nZXRBdHRyaWJ1dGVOb2RlICYmIGUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTsgcmV0dXJuIG4gJiYgbi52YWx1ZSA9PT0gdCB9IH0sIHIuZmluZC5JRCA9IGZ1bmN0aW9uIChlLCB0KSB7IGlmICgidW5kZWZpbmVkIiAhPSB0eXBlb2YgdC5nZXRFbGVtZW50QnlJZCAmJiBnKSB7IHZhciBuLCByLCBpLCBvID0gdC5nZXRFbGVtZW50QnlJZChlKTsgaWYgKG8pIHsgaWYgKChuID0gby5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSAmJiBuLnZhbHVlID09PSBlKSByZXR1cm4gW29dOyBpID0gdC5nZXRFbGVtZW50c0J5TmFtZShlKSwgciA9IDA7IHdoaWxlIChvID0gaVtyKytdKSBpZiAoKG4gPSBvLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpICYmIG4udmFsdWUgPT09IGUpIHJldHVybiBbb10gfSByZXR1cm4gW10gfSB9KSwgci5maW5kLlRBRyA9IG4uZ2V0RWxlbWVudHNCeVRhZ05hbWUgPyBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gInVuZGVmaW5lZCIgIT0gdHlwZW9mIHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPyB0LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpIDogbi5xc2EgPyB0LnF1ZXJ5U2VsZWN0b3JBbGwoZSkgOiB2b2lkIDAgfSA6IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBuLCByID0gW10sIGkgPSAwLCBvID0gdC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKTsgaWYgKCIqIiA9PT0gZSkgeyB3aGlsZSAobiA9IG9baSsrXSkgMSA9PT0gbi5ub2RlVHlwZSAmJiByLnB1c2gobik7IHJldHVybiByIH0gcmV0dXJuIG8gfSwgci5maW5kLkNMQVNTID0gbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGZ1bmN0aW9uIChlLCB0KSB7IGlmICgidW5kZWZpbmVkIiAhPSB0eXBlb2YgdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGcpIHJldHVybiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZSkgfSwgeSA9IFtdLCB2ID0gW10sIChuLnFzYSA9IEcudGVzdChwLnF1ZXJ5U2VsZWN0b3JBbGwpKSAmJiAoc2UoZnVuY3Rpb24gKGUpIHsgaC5hcHBlbmRDaGlsZChlKS5pbm5lckhUTUwgPSAiPGEgaWQ9JyIgKyB4ICsgIic+PC9hPjxzZWxlY3QgaWQ9JyIgKyB4ICsgIi1cclxcJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsIGUucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGggJiYgdi5wdXNoKCJbKl4kXT0iICsgSSArICIqKD86Jyd8XCJcIikiKSwgZS5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RoIHx8IHYucHVzaCgiXFxbIiArIEkgKyAiKig/OnZhbHVlfCIgKyBIICsgIikiKSwgZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR+PSIgKyB4ICsgIi1dIikubGVuZ3RoIHx8IHYucHVzaCgifj0iKSwgZS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aCB8fCB2LnB1c2goIjpjaGVja2VkIiksIGUucXVlcnlTZWxlY3RvckFsbCgiYSMiICsgeCArICIrKiIpLmxlbmd0aCB8fCB2LnB1c2goIi4jLitbK35dIikgfSksIHNlKGZ1bmN0aW9uIChlKSB7IGUuaW5uZXJIVE1MID0gIjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+PHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PiI7IHZhciB0ID0gcC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOyB0LnNldEF0dHJpYnV0ZSgidHlwZSIsICJoaWRkZW4iKSwgZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAiRCIpLCBlLnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1lPWRdIikubGVuZ3RoICYmIHYucHVzaCgibmFtZSIgKyBJICsgIipbKl4kfCF+XT89IiksIDIgIT09IGUucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGggJiYgdi5wdXNoKCI6ZW5hYmxlZCIsICI6ZGlzYWJsZWQiKSwgaC5hcHBlbmRDaGlsZChlKS5kaXNhYmxlZCA9ICEwLCAyICE9PSBlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpkaXNhYmxlZCIpLmxlbmd0aCAmJiB2LnB1c2goIjplbmFibGVkIiwgIjpkaXNhYmxlZCIpLCBlLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSwgdi5wdXNoKCIsLio6IikgfSkpLCAobi5tYXRjaGVzU2VsZWN0b3IgPSBHLnRlc3QobSA9IGgubWF0Y2hlcyB8fCBoLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fCBoLm1vek1hdGNoZXNTZWxlY3RvciB8fCBoLm9NYXRjaGVzU2VsZWN0b3IgfHwgaC5tc01hdGNoZXNTZWxlY3RvcikpICYmIHNlKGZ1bmN0aW9uIChlKSB7IG4uZGlzY29ubmVjdGVkTWF0Y2ggPSBtLmNhbGwoZSwgIioiKSwgbS5jYWxsKGUsICJbcyE9JyddOngiKSwgeS5wdXNoKCIhPSIsIE0pIH0pLCB2ID0gdi5sZW5ndGggJiYgbmV3IFJlZ0V4cCh2LmpvaW4oInwiKSksIHkgPSB5Lmxlbmd0aCAmJiBuZXcgUmVnRXhwKHkuam9pbigifCIpKSwgdCA9IEcudGVzdChoLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSwgYiA9IHQgfHwgRy50ZXN0KGguY29udGFpbnMpID8gZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4gPSA5ID09PSBlLm5vZGVUeXBlID8gZS5kb2N1bWVudEVsZW1lbnQgOiBlLCByID0gdCAmJiB0LnBhcmVudE5vZGU7IHJldHVybiBlID09PSByIHx8ICEoIXIgfHwgMSAhPT0gci5ub2RlVHlwZSB8fCAhKG4uY29udGFpbnMgPyBuLmNvbnRhaW5zKHIpIDogZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiAxNiAmIGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocikpKSB9IDogZnVuY3Rpb24gKGUsIHQpIHsgaWYgKHQpIHdoaWxlICh0ID0gdC5wYXJlbnROb2RlKSBpZiAodCA9PT0gZSkgcmV0dXJuICEwOyByZXR1cm4gITEgfSwgQSA9IHQgPyBmdW5jdGlvbiAoZSwgdCkgeyBpZiAoZSA9PT0gdCkgcmV0dXJuIGYgPSAhMCwgMDsgdmFyIHIgPSAhZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICF0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uOyByZXR1cm4gciB8fCAoMSAmIChyID0gKGUub3duZXJEb2N1bWVudCB8fCBlKSA9PT0gKHQub3duZXJEb2N1bWVudCB8fCB0KSA/IGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkgOiAxKSB8fCAhbi5zb3J0RGV0YWNoZWQgJiYgdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKSA9PT0gciA/IGUgPT09IHAgfHwgZS5vd25lckRvY3VtZW50ID09PSB3ICYmIGIodywgZSkgPyAtMSA6IHQgPT09IHAgfHwgdC5vd25lckRvY3VtZW50ID09PSB3ICYmIGIodywgdCkgPyAxIDogYyA/IFAoYywgZSkgLSBQKGMsIHQpIDogMCA6IDQgJiByID8gLTEgOiAxKSB9IDogZnVuY3Rpb24gKGUsIHQpIHsgaWYgKGUgPT09IHQpIHJldHVybiBmID0gITAsIDA7IHZhciBuLCByID0gMCwgaSA9IGUucGFyZW50Tm9kZSwgbyA9IHQucGFyZW50Tm9kZSwgYSA9IFtlXSwgdSA9IFt0XTsgaWYgKCFpIHx8ICFvKSByZXR1cm4gZSA9PT0gcCA/IC0xIDogdCA9PT0gcCA/IDEgOiBpID8gLTEgOiBvID8gMSA6IGMgPyBQKGMsIGUpIC0gUChjLCB0KSA6IDA7IGlmIChpID09PSBvKSByZXR1cm4gY2UoZSwgdCk7IG4gPSBlOyB3aGlsZSAobiA9IG4ucGFyZW50Tm9kZSkgYS51bnNoaWZ0KG4pOyBuID0gdDsgd2hpbGUgKG4gPSBuLnBhcmVudE5vZGUpIHUudW5zaGlmdChuKTsgd2hpbGUgKGFbcl0gPT09IHVbcl0pIHIrKzsgcmV0dXJuIHIgPyBjZShhW3JdLCB1W3JdKSA6IGFbcl0gPT09IHcgPyAtMSA6IHVbcl0gPT09IHcgPyAxIDogMCB9LCBwKSA6IHAgfSwgb2UubWF0Y2hlcyA9IGZ1bmN0aW9uIChlLCB0KSB7IHJldHVybiBvZShlLCBudWxsLCBudWxsLCB0KSB9LCBvZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiAoZSwgdCkgeyBpZiAoKGUub3duZXJEb2N1bWVudCB8fCBlKSAhPT0gcCAmJiBkKGUpLCB0ID0gdC5yZXBsYWNlKF8sICI9JyQxJ10iKSwgbi5tYXRjaGVzU2VsZWN0b3IgJiYgZyAmJiAha1t0ICsgIiAiXSAmJiAoIXkgfHwgIXkudGVzdCh0KSkgJiYgKCF2IHx8ICF2LnRlc3QodCkpKSB0cnkgeyB2YXIgciA9IG0uY2FsbChlLCB0KTsgaWYgKHIgfHwgbi5kaXNjb25uZWN0ZWRNYXRjaCB8fCBlLmRvY3VtZW50ICYmIDExICE9PSBlLmRvY3VtZW50Lm5vZGVUeXBlKSByZXR1cm4gciB9IGNhdGNoIChlKSB7IH0gcmV0dXJuIG9lKHQsIHAsIG51bGwsIFtlXSkubGVuZ3RoID4gMCB9LCBvZS5jb250YWlucyA9IGZ1bmN0aW9uIChlLCB0KSB7IHJldHVybiAoZS5vd25lckRvY3VtZW50IHx8IGUpICE9PSBwICYmIGQoZSksIGIoZSwgdCkgfSwgb2UuYXR0ciA9IGZ1bmN0aW9uIChlLCB0KSB7IChlLm93bmVyRG9jdW1lbnQgfHwgZSkgIT09IHAgJiYgZChlKTsgdmFyIGkgPSByLmF0dHJIYW5kbGVbdC50b0xvd2VyQ2FzZSgpXSwgbyA9IGkgJiYgRC5jYWxsKHIuYXR0ckhhbmRsZSwgdC50b0xvd2VyQ2FzZSgpKSA/IGkoZSwgdCwgIWcpIDogdm9pZCAwOyByZXR1cm4gdm9pZCAwICE9PSBvID8gbyA6IG4uYXR0cmlidXRlcyB8fCAhZyA/IGUuZ2V0QXR0cmlidXRlKHQpIDogKG8gPSBlLmdldEF0dHJpYnV0ZU5vZGUodCkpICYmIG8uc3BlY2lmaWVkID8gby52YWx1ZSA6IG51bGwgfSwgb2UuZXNjYXBlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIChlICsgIiIpLnJlcGxhY2UodGUsIG5lKSB9LCBvZS5lcnJvciA9IGZ1bmN0aW9uIChlKSB7IHRocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIiArIGUpIH0sIG9lLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiAoZSkgeyB2YXIgdCwgciA9IFtdLCBpID0gMCwgbyA9IDA7IGlmIChmID0gIW4uZGV0ZWN0RHVwbGljYXRlcywgYyA9ICFuLnNvcnRTdGFibGUgJiYgZS5zbGljZSgwKSwgZS5zb3J0KEEpLCBmKSB7IHdoaWxlICh0ID0gZVtvKytdKSB0ID09PSBlW29dICYmIChpID0gci5wdXNoKG8pKTsgd2hpbGUgKGktLSkgZS5zcGxpY2UocltpXSwgMSkgfSByZXR1cm4gYyA9IG51bGwsIGUgfSwgaSA9IG9lLmdldFRleHQgPSBmdW5jdGlvbiAoZSkgeyB2YXIgdCwgbiA9ICIiLCByID0gMCwgbyA9IGUubm9kZVR5cGU7IGlmIChvKSB7IGlmICgxID09PSBvIHx8IDkgPT09IG8gfHwgMTEgPT09IG8pIHsgaWYgKCJzdHJpbmciID09IHR5cGVvZiBlLnRleHRDb250ZW50KSByZXR1cm4gZS50ZXh0Q29udGVudDsgZm9yIChlID0gZS5maXJzdENoaWxkOyBlOyBlID0gZS5uZXh0U2libGluZyluICs9IGkoZSkgfSBlbHNlIGlmICgzID09PSBvIHx8IDQgPT09IG8pIHJldHVybiBlLm5vZGVWYWx1ZSB9IGVsc2Ugd2hpbGUgKHQgPSBlW3IrK10pIG4gKz0gaSh0KTsgcmV0dXJuIG4gfSwgKHIgPSBvZS5zZWxlY3RvcnMgPSB7IGNhY2hlTGVuZ3RoOiA1MCwgY3JlYXRlUHNldWRvOiB1ZSwgbWF0Y2g6IFgsIGF0dHJIYW5kbGU6IHt9LCBmaW5kOiB7fSwgcmVsYXRpdmU6IHsgIj4iOiB7IGRpcjogInBhcmVudE5vZGUiLCBmaXJzdDogITAgfSwgIiAiOiB7IGRpcjogInBhcmVudE5vZGUiIH0sICIrIjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmciLCBmaXJzdDogITAgfSwgIn4iOiB7IGRpcjogInByZXZpb3VzU2libGluZyIgfSB9LCBwcmVGaWx0ZXI6IHsgQVRUUjogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGVbMV0gPSBlWzFdLnJlcGxhY2UoWiwgZWUpLCBlWzNdID0gKGVbM10gfHwgZVs0XSB8fCBlWzVdIHx8ICIiKS5yZXBsYWNlKFosIGVlKSwgIn49IiA9PT0gZVsyXSAmJiAoZVszXSA9ICIgIiArIGVbM10gKyAiICIpLCBlLnNsaWNlKDAsIDQpIH0sIENISUxEOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZVsxXSA9IGVbMV0udG9Mb3dlckNhc2UoKSwgIm50aCIgPT09IGVbMV0uc2xpY2UoMCwgMykgPyAoZVszXSB8fCBvZS5lcnJvcihlWzBdKSwgZVs0XSA9ICsoZVs0XSA/IGVbNV0gKyAoZVs2XSB8fCAxKSA6IDIgKiAoImV2ZW4iID09PSBlWzNdIHx8ICJvZGQiID09PSBlWzNdKSksIGVbNV0gPSArKGVbN10gKyBlWzhdIHx8ICJvZGQiID09PSBlWzNdKSkgOiBlWzNdICYmIG9lLmVycm9yKGVbMF0pLCBlIH0sIFBTRVVETzogZnVuY3Rpb24gKGUpIHsgdmFyIHQsIG4gPSAhZVs2XSAmJiBlWzJdOyByZXR1cm4gWC5DSElMRC50ZXN0KGVbMF0pID8gbnVsbCA6IChlWzNdID8gZVsyXSA9IGVbNF0gfHwgZVs1XSB8fCAiIiA6IG4gJiYgVS50ZXN0KG4pICYmICh0ID0gYShuLCAhMCkpICYmICh0ID0gbi5pbmRleE9mKCIpIiwgbi5sZW5ndGggLSB0KSAtIG4ubGVuZ3RoKSAmJiAoZVswXSA9IGVbMF0uc2xpY2UoMCwgdCksIGVbMl0gPSBuLnNsaWNlKDAsIHQpKSwgZS5zbGljZSgwLCAzKSkgfSB9LCBmaWx0ZXI6IHsgVEFHOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IGUucmVwbGFjZShaLCBlZSkudG9Mb3dlckNhc2UoKTsgcmV0dXJuICIqIiA9PT0gZSA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuICEwIH0gOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS5ub2RlTmFtZSAmJiBlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHQgfSB9LCBDTEFTUzogZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSBFW2UgKyAiICJdOyByZXR1cm4gdCB8fCAodCA9IG5ldyBSZWdFeHAoIihefCIgKyBJICsgIikiICsgZSArICIoIiArIEkgKyAifCQpIikpICYmIEUoZSwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHQudGVzdCgic3RyaW5nIiA9PSB0eXBlb2YgZS5jbGFzc05hbWUgJiYgZS5jbGFzc05hbWUgfHwgInVuZGVmaW5lZCIgIT0gdHlwZW9mIGUuZ2V0QXR0cmlidXRlICYmIGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpIHx8ICIiKSB9KSB9LCBBVFRSOiBmdW5jdGlvbiAoZSwgdCwgbikgeyByZXR1cm4gZnVuY3Rpb24gKHIpIHsgdmFyIGkgPSBvZS5hdHRyKHIsIGUpOyByZXR1cm4gbnVsbCA9PSBpID8gIiE9IiA9PT0gdCA6ICF0IHx8IChpICs9ICIiLCAiPSIgPT09IHQgPyBpID09PSBuIDogIiE9IiA9PT0gdCA/IGkgIT09IG4gOiAiXj0iID09PSB0ID8gbiAmJiAwID09PSBpLmluZGV4T2YobikgOiAiKj0iID09PSB0ID8gbiAmJiBpLmluZGV4T2YobikgPiAtMSA6ICIkPSIgPT09IHQgPyBuICYmIGkuc2xpY2UoLW4ubGVuZ3RoKSA9PT0gbiA6ICJ+PSIgPT09IHQgPyAoIiAiICsgaS5yZXBsYWNlKFcsICIgIikgKyAiICIpLmluZGV4T2YobikgPiAtMSA6ICJ8PSIgPT09IHQgJiYgKGkgPT09IG4gfHwgaS5zbGljZSgwLCBuLmxlbmd0aCArIDEpID09PSBuICsgIi0iKSkgfSB9LCBDSElMRDogZnVuY3Rpb24gKGUsIHQsIG4sIHIsIGkpIHsgdmFyIG8gPSAibnRoIiAhPT0gZS5zbGljZSgwLCAzKSwgYSA9ICJsYXN0IiAhPT0gZS5zbGljZSgtNCksIHUgPSAib2YtdHlwZSIgPT09IHQ7IHJldHVybiAxID09PSByICYmIDAgPT09IGkgPyBmdW5jdGlvbiAoZSkgeyByZXR1cm4gISFlLnBhcmVudE5vZGUgfSA6IGZ1bmN0aW9uICh0LCBuLCBzKSB7IHZhciBsLCBjLCBmLCBkLCBwLCBoLCBnID0gbyAhPT0gYSA/ICJuZXh0U2libGluZyIgOiAicHJldmlvdXNTaWJsaW5nIiwgdiA9IHQucGFyZW50Tm9kZSwgeSA9IHUgJiYgdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBtID0gIXMgJiYgIXUsIGIgPSAhMTsgaWYgKHYpIHsgaWYgKG8pIHsgd2hpbGUgKGcpIHsgZCA9IHQ7IHdoaWxlIChkID0gZFtnXSkgaWYgKHUgPyBkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHkgOiAxID09PSBkLm5vZGVUeXBlKSByZXR1cm4gITE7IGggPSBnID0gIm9ubHkiID09PSBlICYmICFoICYmICJuZXh0U2libGluZyIgfSByZXR1cm4gITAgfSBpZiAoaCA9IFthID8gdi5maXJzdENoaWxkIDogdi5sYXN0Q2hpbGRdLCBhICYmIG0pIHsgYiA9IChwID0gKGwgPSAoYyA9IChmID0gKGQgPSB2KVt4XSB8fCAoZFt4XSA9IHt9KSlbZC51bmlxdWVJRF0gfHwgKGZbZC51bmlxdWVJRF0gPSB7fSkpW2VdIHx8IFtdKVswXSA9PT0gQyAmJiBsWzFdKSAmJiBsWzJdLCBkID0gcCAmJiB2LmNoaWxkTm9kZXNbcF07IHdoaWxlIChkID0gKytwICYmIGQgJiYgZFtnXSB8fCAoYiA9IHAgPSAwKSB8fCBoLnBvcCgpKSBpZiAoMSA9PT0gZC5ub2RlVHlwZSAmJiArK2IgJiYgZCA9PT0gdCkgeyBjW2VdID0gW0MsIHAsIGJdOyBicmVhayB9IH0gZWxzZSBpZiAobSAmJiAoYiA9IHAgPSAobCA9IChjID0gKGYgPSAoZCA9IHQpW3hdIHx8IChkW3hdID0ge30pKVtkLnVuaXF1ZUlEXSB8fCAoZltkLnVuaXF1ZUlEXSA9IHt9KSlbZV0gfHwgW10pWzBdID09PSBDICYmIGxbMV0pLCAhMSA9PT0gYikgd2hpbGUgKGQgPSArK3AgJiYgZCAmJiBkW2ddIHx8IChiID0gcCA9IDApIHx8IGgucG9wKCkpIGlmICgodSA/IGQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0geSA6IDEgPT09IGQubm9kZVR5cGUpICYmICsrYiAmJiAobSAmJiAoKGMgPSAoZiA9IGRbeF0gfHwgKGRbeF0gPSB7fSkpW2QudW5pcXVlSURdIHx8IChmW2QudW5pcXVlSURdID0ge30pKVtlXSA9IFtDLCBiXSksIGQgPT09IHQpKSBicmVhazsgcmV0dXJuIChiIC09IGkpID09PSByIHx8IGIgJSByID09IDAgJiYgYiAvIHIgPj0gMCB9IH0gfSwgUFNFVURPOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiwgaSA9IHIucHNldWRvc1tlXSB8fCByLnNldEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXSB8fCBvZS5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiICsgZSk7IHJldHVybiBpW3hdID8gaSh0KSA6IGkubGVuZ3RoID4gMSA/IChuID0gW2UsIGUsICIiLCB0XSwgci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSkgPyB1ZShmdW5jdGlvbiAoZSwgbikgeyB2YXIgciwgbyA9IGkoZSwgdCksIGEgPSBvLmxlbmd0aDsgd2hpbGUgKGEtLSkgZVtyID0gUChlLCBvW2FdKV0gPSAhKG5bcl0gPSBvW2FdKSB9KSA6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBpKGUsIDAsIG4pIH0pIDogaSB9IH0sIHBzZXVkb3M6IHsgbm90OiB1ZShmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IFtdLCBuID0gW10sIHIgPSB1KGUucmVwbGFjZSgkLCAiJDEiKSk7IHJldHVybiByW3hdID8gdWUoZnVuY3Rpb24gKGUsIHQsIG4sIGkpIHsgdmFyIG8sIGEgPSByKGUsIG51bGwsIGksIFtdKSwgdSA9IGUubGVuZ3RoOyB3aGlsZSAodS0tKSAobyA9IGFbdV0pICYmIChlW3VdID0gISh0W3VdID0gbykpIH0pIDogZnVuY3Rpb24gKGUsIGksIG8pIHsgcmV0dXJuIHRbMF0gPSBlLCByKHQsIG51bGwsIG8sIG4pLCB0WzBdID0gbnVsbCwgIW4ucG9wKCkgfSB9KSwgaGFzOiB1ZShmdW5jdGlvbiAoZSkgeyByZXR1cm4gZnVuY3Rpb24gKHQpIHsgcmV0dXJuIG9lKGUsIHQpLmxlbmd0aCA+IDAgfSB9KSwgY29udGFpbnM6IHVlKGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID0gZS5yZXBsYWNlKFosIGVlKSwgZnVuY3Rpb24gKHQpIHsgcmV0dXJuICh0LnRleHRDb250ZW50IHx8IHQuaW5uZXJUZXh0IHx8IGkodCkpLmluZGV4T2YoZSkgPiAtMSB9IH0pLCBsYW5nOiB1ZShmdW5jdGlvbiAoZSkgeyByZXR1cm4gVi50ZXN0KGUgfHwgIiIpIHx8IG9lLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiICsgZSksIGUgPSBlLnJlcGxhY2UoWiwgZWUpLnRvTG93ZXJDYXNlKCksIGZ1bmN0aW9uICh0KSB7IHZhciBuOyBkbyB7IGlmIChuID0gZyA/IHQubGFuZyA6IHQuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpIHx8IHQuZ2V0QXR0cmlidXRlKCJsYW5nIikpIHJldHVybiAobiA9IG4udG9Mb3dlckNhc2UoKSkgPT09IGUgfHwgMCA9PT0gbi5pbmRleE9mKGUgKyAiLSIpIH0gd2hpbGUgKCh0ID0gdC5wYXJlbnROb2RlKSAmJiAxID09PSB0Lm5vZGVUeXBlKTsgcmV0dXJuICExIH0gfSksIHRhcmdldDogZnVuY3Rpb24gKHQpIHsgdmFyIG4gPSBlLmxvY2F0aW9uICYmIGUubG9jYXRpb24uaGFzaDsgcmV0dXJuIG4gJiYgbi5zbGljZSgxKSA9PT0gdC5pZCB9LCByb290OiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA9PT0gaCB9LCBmb2N1czogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPT09IHAuYWN0aXZlRWxlbWVudCAmJiAoIXAuaGFzRm9jdXMgfHwgcC5oYXNGb2N1cygpKSAmJiAhIShlLnR5cGUgfHwgZS5ocmVmIHx8IH5lLnRhYkluZGV4KSB9LCBlbmFibGVkOiBwZSghMSksIGRpc2FibGVkOiBwZSghMCksIGNoZWNrZWQ6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyByZXR1cm4gImlucHV0IiA9PT0gdCAmJiAhIWUuY2hlY2tlZCB8fCAib3B0aW9uIiA9PT0gdCAmJiAhIWUuc2VsZWN0ZWQgfSwgc2VsZWN0ZWQ6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlLnBhcmVudE5vZGUgJiYgZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsICEwID09PSBlLnNlbGVjdGVkIH0sIGVtcHR5OiBmdW5jdGlvbiAoZSkgeyBmb3IgKGUgPSBlLmZpcnN0Q2hpbGQ7IGU7IGUgPSBlLm5leHRTaWJsaW5nKWlmIChlLm5vZGVUeXBlIDwgNikgcmV0dXJuICExOyByZXR1cm4gITAgfSwgcGFyZW50OiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gIXIucHNldWRvcy5lbXB0eShlKSB9LCBoZWFkZXI6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBZLnRlc3QoZS5ub2RlTmFtZSkgfSwgaW5wdXQ6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBRLnRlc3QoZS5ub2RlTmFtZSkgfSwgYnV0dG9uOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsgcmV0dXJuICJpbnB1dCIgPT09IHQgJiYgImJ1dHRvbiIgPT09IGUudHlwZSB8fCAiYnV0dG9uIiA9PT0gdCB9LCB0ZXh0OiBmdW5jdGlvbiAoZSkgeyB2YXIgdDsgcmV0dXJuICJpbnB1dCIgPT09IGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAmJiAidGV4dCIgPT09IGUudHlwZSAmJiAobnVsbCA9PSAodCA9IGUuZ2V0QXR0cmlidXRlKCJ0eXBlIikpIHx8ICJ0ZXh0IiA9PT0gdC50b0xvd2VyQ2FzZSgpKSB9LCBmaXJzdDogaGUoZnVuY3Rpb24gKCkgeyByZXR1cm4gWzBdIH0pLCBsYXN0OiBoZShmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gW3QgLSAxXSB9KSwgZXE6IGhlKGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiBbbiA8IDAgPyBuICsgdCA6IG5dIH0pLCBldmVuOiBoZShmdW5jdGlvbiAoZSwgdCkgeyBmb3IgKHZhciBuID0gMDsgbiA8IHQ7IG4gKz0gMillLnB1c2gobik7IHJldHVybiBlIH0pLCBvZGQ6IGhlKGZ1bmN0aW9uIChlLCB0KSB7IGZvciAodmFyIG4gPSAxOyBuIDwgdDsgbiArPSAyKWUucHVzaChuKTsgcmV0dXJuIGUgfSksIGx0OiBoZShmdW5jdGlvbiAoZSwgdCwgbikgeyBmb3IgKHZhciByID0gbiA8IDAgPyBuICsgdCA6IG47IC0tciA+PSAwOyllLnB1c2gocik7IHJldHVybiBlIH0pLCBndDogaGUoZnVuY3Rpb24gKGUsIHQsIG4pIHsgZm9yICh2YXIgciA9IG4gPCAwID8gbiArIHQgOiBuOyArK3IgPCB0OyllLnB1c2gocik7IHJldHVybiBlIH0pIH0gfSkucHNldWRvcy5udGggPSByLnBzZXVkb3MuZXE7IGZvciAodCBpbiB7IHJhZGlvOiAhMCwgY2hlY2tib3g6ICEwLCBmaWxlOiAhMCwgcGFzc3dvcmQ6ICEwLCBpbWFnZTogITAgfSkgci5wc2V1ZG9zW3RdID0gZmUodCk7IGZvciAodCBpbiB7IHN1Ym1pdDogITAsIHJlc2V0OiAhMCB9KSByLnBzZXVkb3NbdF0gPSBkZSh0KTsgZnVuY3Rpb24gdmUoKSB7IH0gdmUucHJvdG90eXBlID0gci5maWx0ZXJzID0gci5wc2V1ZG9zLCByLnNldEZpbHRlcnMgPSBuZXcgdmUsIGEgPSBvZS50b2tlbml6ZSA9IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBuLCBpLCBvLCBhLCB1LCBzLCBsLCBjID0gTltlICsgIiAiXTsgaWYgKGMpIHJldHVybiB0ID8gMCA6IGMuc2xpY2UoMCk7IHUgPSBlLCBzID0gW10sIGwgPSByLnByZUZpbHRlcjsgd2hpbGUgKHUpIHsgbiAmJiAhKGkgPSBGLmV4ZWModSkpIHx8IChpICYmICh1ID0gdS5zbGljZShpWzBdLmxlbmd0aCkgfHwgdSksIHMucHVzaChvID0gW10pKSwgbiA9ICExLCAoaSA9IHouZXhlYyh1KSkgJiYgKG4gPSBpLnNoaWZ0KCksIG8ucHVzaCh7IHZhbHVlOiBuLCB0eXBlOiBpWzBdLnJlcGxhY2UoJCwgIiAiKSB9KSwgdSA9IHUuc2xpY2Uobi5sZW5ndGgpKTsgZm9yIChhIGluIHIuZmlsdGVyKSAhKGkgPSBYW2FdLmV4ZWModSkpIHx8IGxbYV0gJiYgIShpID0gbFthXShpKSkgfHwgKG4gPSBpLnNoaWZ0KCksIG8ucHVzaCh7IHZhbHVlOiBuLCB0eXBlOiBhLCBtYXRjaGVzOiBpIH0pLCB1ID0gdS5zbGljZShuLmxlbmd0aCkpOyBpZiAoIW4pIGJyZWFrIH0gcmV0dXJuIHQgPyB1Lmxlbmd0aCA6IHUgPyBvZS5lcnJvcihlKSA6IE4oZSwgcykuc2xpY2UoMCkgfTsgZnVuY3Rpb24geWUoZSkgeyBmb3IgKHZhciB0ID0gMCwgbiA9IGUubGVuZ3RoLCByID0gIiI7IHQgPCBuOyB0KyspciArPSBlW3RdLnZhbHVlOyByZXR1cm4gciB9IGZ1bmN0aW9uIG1lKGUsIHQsIG4pIHsgdmFyIHIgPSB0LmRpciwgaSA9IHQubmV4dCwgbyA9IGkgfHwgciwgYSA9IG4gJiYgInBhcmVudE5vZGUiID09PSBvLCB1ID0gVCsrOyByZXR1cm4gdC5maXJzdCA/IGZ1bmN0aW9uICh0LCBuLCBpKSB7IHdoaWxlICh0ID0gdFtyXSkgaWYgKDEgPT09IHQubm9kZVR5cGUgfHwgYSkgcmV0dXJuIGUodCwgbiwgaSk7IHJldHVybiAhMSB9IDogZnVuY3Rpb24gKHQsIG4sIHMpIHsgdmFyIGwsIGMsIGYsIGQgPSBbQywgdV07IGlmIChzKSB7IHdoaWxlICh0ID0gdFtyXSkgaWYgKCgxID09PSB0Lm5vZGVUeXBlIHx8IGEpICYmIGUodCwgbiwgcykpIHJldHVybiAhMCB9IGVsc2Ugd2hpbGUgKHQgPSB0W3JdKSBpZiAoMSA9PT0gdC5ub2RlVHlwZSB8fCBhKSBpZiAoZiA9IHRbeF0gfHwgKHRbeF0gPSB7fSksIGMgPSBmW3QudW5pcXVlSURdIHx8IChmW3QudW5pcXVlSURdID0ge30pLCBpICYmIGkgPT09IHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgdCA9IHRbcl0gfHwgdDsgZWxzZSB7IGlmICgobCA9IGNbb10pICYmIGxbMF0gPT09IEMgJiYgbFsxXSA9PT0gdSkgcmV0dXJuIGRbMl0gPSBsWzJdOyBpZiAoY1tvXSA9IGQsIGRbMl0gPSBlKHQsIG4sIHMpKSByZXR1cm4gITAgfSByZXR1cm4gITEgfSB9IGZ1bmN0aW9uIGJlKGUpIHsgcmV0dXJuIGUubGVuZ3RoID4gMSA/IGZ1bmN0aW9uICh0LCBuLCByKSB7IHZhciBpID0gZS5sZW5ndGg7IHdoaWxlIChpLS0pIGlmICghZVtpXSh0LCBuLCByKSkgcmV0dXJuICExOyByZXR1cm4gITAgfSA6IGVbMF0gfSBmdW5jdGlvbiB4ZShlLCB0LCBuKSB7IGZvciAodmFyIHIgPSAwLCBpID0gdC5sZW5ndGg7IHIgPCBpOyByKyspb2UoZSwgdFtyXSwgbik7IHJldHVybiBuIH0gZnVuY3Rpb24gd2UoZSwgdCwgbiwgciwgaSkgeyBmb3IgKHZhciBvLCBhID0gW10sIHUgPSAwLCBzID0gZS5sZW5ndGgsIGwgPSBudWxsICE9IHQ7IHUgPCBzOyB1KyspKG8gPSBlW3VdKSAmJiAobiAmJiAhbihvLCByLCBpKSB8fCAoYS5wdXNoKG8pLCBsICYmIHQucHVzaCh1KSkpOyByZXR1cm4gYSB9IGZ1bmN0aW9uIENlKGUsIHQsIG4sIHIsIGksIG8pIHsgcmV0dXJuIHIgJiYgIXJbeF0gJiYgKHIgPSBDZShyKSksIGkgJiYgIWlbeF0gJiYgKGkgPSBDZShpLCBvKSksIHVlKGZ1bmN0aW9uIChvLCBhLCB1LCBzKSB7IHZhciBsLCBjLCBmLCBkID0gW10sIHAgPSBbXSwgaCA9IGEubGVuZ3RoLCBnID0gbyB8fCB4ZSh0IHx8ICIqIiwgdS5ub2RlVHlwZSA/IFt1XSA6IHUsIFtdKSwgdiA9ICFlIHx8ICFvICYmIHQgPyBnIDogd2UoZywgZCwgZSwgdSwgcyksIHkgPSBuID8gaSB8fCAobyA/IGUgOiBoIHx8IHIpID8gW10gOiBhIDogdjsgaWYgKG4gJiYgbih2LCB5LCB1LCBzKSwgcikgeyBsID0gd2UoeSwgcCksIHIobCwgW10sIHUsIHMpLCBjID0gbC5sZW5ndGg7IHdoaWxlIChjLS0pIChmID0gbFtjXSkgJiYgKHlbcFtjXV0gPSAhKHZbcFtjXV0gPSBmKSkgfSBpZiAobykgeyBpZiAoaSB8fCBlKSB7IGlmIChpKSB7IGwgPSBbXSwgYyA9IHkubGVuZ3RoOyB3aGlsZSAoYy0tKSAoZiA9IHlbY10pICYmIGwucHVzaCh2W2NdID0gZik7IGkobnVsbCwgeSA9IFtdLCBsLCBzKSB9IGMgPSB5Lmxlbmd0aDsgd2hpbGUgKGMtLSkgKGYgPSB5W2NdKSAmJiAobCA9IGkgPyBQKG8sIGYpIDogZFtjXSkgPiAtMSAmJiAob1tsXSA9ICEoYVtsXSA9IGYpKSB9IH0gZWxzZSB5ID0gd2UoeSA9PT0gYSA/IHkuc3BsaWNlKGgsIHkubGVuZ3RoKSA6IHkpLCBpID8gaShudWxsLCBhLCB5LCBzKSA6IHEuYXBwbHkoYSwgeSkgfSkgfSBmdW5jdGlvbiBUZShlKSB7IGZvciAodmFyIHQsIG4sIGksIG8gPSBlLmxlbmd0aCwgYSA9IHIucmVsYXRpdmVbZVswXS50eXBlXSwgdSA9IGEgfHwgci5yZWxhdGl2ZVsiICJdLCBzID0gYSA/IDEgOiAwLCBjID0gbWUoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPT09IHQgfSwgdSwgITApLCBmID0gbWUoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIFAodCwgZSkgPiAtMSB9LCB1LCAhMCksIGQgPSBbZnVuY3Rpb24gKGUsIG4sIHIpIHsgdmFyIGkgPSAhYSAmJiAociB8fCBuICE9PSBsKSB8fCAoKHQgPSBuKS5ub2RlVHlwZSA/IGMoZSwgbiwgcikgOiBmKGUsIG4sIHIpKTsgcmV0dXJuIHQgPSBudWxsLCBpIH1dOyBzIDwgbzsgcysrKWlmIChuID0gci5yZWxhdGl2ZVtlW3NdLnR5cGVdKSBkID0gW21lKGJlKGQpLCBuKV07IGVsc2UgeyBpZiAoKG4gPSByLmZpbHRlcltlW3NdLnR5cGVdLmFwcGx5KG51bGwsIGVbc10ubWF0Y2hlcykpW3hdKSB7IGZvciAoaSA9ICsrczsgaSA8IG87IGkrKylpZiAoci5yZWxhdGl2ZVtlW2ldLnR5cGVdKSBicmVhazsgcmV0dXJuIENlKHMgPiAxICYmIGJlKGQpLCBzID4gMSAmJiB5ZShlLnNsaWNlKDAsIHMgLSAxKS5jb25jYXQoeyB2YWx1ZTogIiAiID09PSBlW3MgLSAyXS50eXBlID8gIioiIDogIiIgfSkpLnJlcGxhY2UoJCwgIiQxIiksIG4sIHMgPCBpICYmIFRlKGUuc2xpY2UocywgaSkpLCBpIDwgbyAmJiBUZShlID0gZS5zbGljZShpKSksIGkgPCBvICYmIHllKGUpKSB9IGQucHVzaChuKSB9IHJldHVybiBiZShkKSB9IGZ1bmN0aW9uIEVlKGUsIHQpIHsgdmFyIG4gPSB0Lmxlbmd0aCA+IDAsIGkgPSBlLmxlbmd0aCA+IDAsIG8gPSBmdW5jdGlvbiAobywgYSwgdSwgcywgYykgeyB2YXIgZiwgaCwgdiwgeSA9IDAsIG0gPSAiMCIsIGIgPSBvICYmIFtdLCB4ID0gW10sIHcgPSBsLCBUID0gbyB8fCBpICYmIHIuZmluZC5UQUcoIioiLCBjKSwgRSA9IEMgKz0gbnVsbCA9PSB3ID8gMSA6IE1hdGgucmFuZG9tKCkgfHwgLjEsIE4gPSBULmxlbmd0aDsgZm9yIChjICYmIChsID0gYSA9PT0gcCB8fCBhIHx8IGMpOyBtICE9PSBOICYmIG51bGwgIT0gKGYgPSBUW21dKTsgbSsrKSB7IGlmIChpICYmIGYpIHsgaCA9IDAsIGEgfHwgZi5vd25lckRvY3VtZW50ID09PSBwIHx8IChkKGYpLCB1ID0gIWcpOyB3aGlsZSAodiA9IGVbaCsrXSkgaWYgKHYoZiwgYSB8fCBwLCB1KSkgeyBzLnB1c2goZik7IGJyZWFrIH0gYyAmJiAoQyA9IEUpIH0gbiAmJiAoKGYgPSAhdiAmJiBmKSAmJiB5LS0gLCBvICYmIGIucHVzaChmKSkgfSBpZiAoeSArPSBtLCBuICYmIG0gIT09IHkpIHsgaCA9IDA7IHdoaWxlICh2ID0gdFtoKytdKSB2KGIsIHgsIGEsIHUpOyBpZiAobykgeyBpZiAoeSA+IDApIHdoaWxlIChtLS0pIGJbbV0gfHwgeFttXSB8fCAoeFttXSA9IEwuY2FsbChzKSk7IHggPSB3ZSh4KSB9IHEuYXBwbHkocywgeCksIGMgJiYgIW8gJiYgeC5sZW5ndGggPiAwICYmIHkgKyB0Lmxlbmd0aCA+IDEgJiYgb2UudW5pcXVlU29ydChzKSB9IHJldHVybiBjICYmIChDID0gRSwgbCA9IHcpLCBiIH07IHJldHVybiBuID8gdWUobykgOiBvIH0gcmV0dXJuIHUgPSBvZS5jb21waWxlID0gZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4sIHIgPSBbXSwgaSA9IFtdLCBvID0ga1tlICsgIiAiXTsgaWYgKCFvKSB7IHQgfHwgKHQgPSBhKGUpKSwgbiA9IHQubGVuZ3RoOyB3aGlsZSAobi0tKSAobyA9IFRlKHRbbl0pKVt4XSA/IHIucHVzaChvKSA6IGkucHVzaChvKTsgKG8gPSBrKGUsIEVlKGksIHIpKSkuc2VsZWN0b3IgPSBlIH0gcmV0dXJuIG8gfSwgcyA9IG9lLnNlbGVjdCA9IGZ1bmN0aW9uIChlLCB0LCBuLCBpKSB7IHZhciBvLCBzLCBsLCBjLCBmLCBkID0gImZ1bmN0aW9uIiA9PSB0eXBlb2YgZSAmJiBlLCBwID0gIWkgJiYgYShlID0gZC5zZWxlY3RvciB8fCBlKTsgaWYgKG4gPSBuIHx8IFtdLCAxID09PSBwLmxlbmd0aCkgeyBpZiAoKHMgPSBwWzBdID0gcFswXS5zbGljZSgwKSkubGVuZ3RoID4gMiAmJiAiSUQiID09PSAobCA9IHNbMF0pLnR5cGUgJiYgOSA9PT0gdC5ub2RlVHlwZSAmJiBnICYmIHIucmVsYXRpdmVbc1sxXS50eXBlXSkgeyBpZiAoISh0ID0gKHIuZmluZC5JRChsLm1hdGNoZXNbMF0ucmVwbGFjZShaLCBlZSksIHQpIHx8IFtdKVswXSkpIHJldHVybiBuOyBkICYmICh0ID0gdC5wYXJlbnROb2RlKSwgZSA9IGUuc2xpY2Uocy5zaGlmdCgpLnZhbHVlLmxlbmd0aCkgfSBvID0gWC5uZWVkc0NvbnRleHQudGVzdChlKSA/IDAgOiBzLmxlbmd0aDsgd2hpbGUgKG8tLSkgeyBpZiAobCA9IHNbb10sIHIucmVsYXRpdmVbYyA9IGwudHlwZV0pIGJyZWFrOyBpZiAoKGYgPSByLmZpbmRbY10pICYmIChpID0gZihsLm1hdGNoZXNbMF0ucmVwbGFjZShaLCBlZSksIEoudGVzdChzWzBdLnR5cGUpICYmIGdlKHQucGFyZW50Tm9kZSkgfHwgdCkpKSB7IGlmIChzLnNwbGljZShvLCAxKSwgIShlID0gaS5sZW5ndGggJiYgeWUocykpKSByZXR1cm4gcS5hcHBseShuLCBpKSwgbjsgYnJlYWsgfSB9IH0gcmV0dXJuIChkIHx8IHUoZSwgcCkpKGksIHQsICFnLCBuLCAhdCB8fCBKLnRlc3QoZSkgJiYgZ2UodC5wYXJlbnROb2RlKSB8fCB0KSwgbiB9LCBuLnNvcnRTdGFibGUgPSB4LnNwbGl0KCIiKS5zb3J0KEEpLmpvaW4oIiIpID09PSB4LCBuLmRldGVjdER1cGxpY2F0ZXMgPSAhIWYsIGQoKSwgbi5zb3J0RGV0YWNoZWQgPSBzZShmdW5jdGlvbiAoZSkgeyByZXR1cm4gMSAmIGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocC5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpKSB9KSwgc2UoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUuaW5uZXJIVE1MID0gIjxhIGhyZWY9JyMnPjwvYT4iLCAiIyIgPT09IGUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSB9KSB8fCBsZSgidHlwZXxocmVmfGhlaWdodHx3aWR0aCIsIGZ1bmN0aW9uIChlLCB0LCBuKSB7IGlmICghbikgcmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQsICJ0eXBlIiA9PT0gdC50b0xvd2VyQ2FzZSgpID8gMSA6IDIpIH0pLCBuLmF0dHJpYnV0ZXMgJiYgc2UoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUuaW5uZXJIVE1MID0gIjxpbnB1dC8+IiwgZS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCAiIiksICIiID09PSBlLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpIH0pIHx8IGxlKCJ2YWx1ZSIsIGZ1bmN0aW9uIChlLCB0LCBuKSB7IGlmICghbiAmJiAiaW5wdXQiID09PSBlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpIHJldHVybiBlLmRlZmF1bHRWYWx1ZSB9KSwgc2UoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG51bGwgPT0gZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIikgfSkgfHwgbGUoSCwgZnVuY3Rpb24gKGUsIHQsIG4pIHsgdmFyIHI7IGlmICghbikgcmV0dXJuICEwID09PSBlW3RdID8gdC50b0xvd2VyQ2FzZSgpIDogKHIgPSBlLmdldEF0dHJpYnV0ZU5vZGUodCkpICYmIHIuc3BlY2lmaWVkID8gci52YWx1ZSA6IG51bGwgfSksIG9lIH0oZSk7IHcuZmluZCA9IEUsIHcuZXhwciA9IEUuc2VsZWN0b3JzLCB3LmV4cHJbIjoiXSA9IHcuZXhwci5wc2V1ZG9zLCB3LnVuaXF1ZVNvcnQgPSB3LnVuaXF1ZSA9IEUudW5pcXVlU29ydCwgdy50ZXh0ID0gRS5nZXRUZXh0LCB3LmlzWE1MRG9jID0gRS5pc1hNTCwgdy5jb250YWlucyA9IEUuY29udGFpbnMsIHcuZXNjYXBlU2VsZWN0b3IgPSBFLmVzY2FwZTsgdmFyIE4gPSBmdW5jdGlvbiAoZSwgdCwgbikgeyB2YXIgciA9IFtdLCBpID0gdm9pZCAwICE9PSBuOyB3aGlsZSAoKGUgPSBlW3RdKSAmJiA5ICE9PSBlLm5vZGVUeXBlKSBpZiAoMSA9PT0gZS5ub2RlVHlwZSkgeyBpZiAoaSAmJiB3KGUpLmlzKG4pKSBicmVhazsgci5wdXNoKGUpIH0gcmV0dXJuIHIgfSwgayA9IGZ1bmN0aW9uIChlLCB0KSB7IGZvciAodmFyIG4gPSBbXTsgZTsgZSA9IGUubmV4dFNpYmxpbmcpMSA9PT0gZS5ub2RlVHlwZSAmJiBlICE9PSB0ICYmIG4ucHVzaChlKTsgcmV0dXJuIG4gfSwgQSA9IHcuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7IGZ1bmN0aW9uIEQoZSwgdCkgeyByZXR1cm4gZS5ub2RlTmFtZSAmJiBlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHQudG9Mb3dlckNhc2UoKSB9IHZhciBTID0gL148KFthLXpdW15cL1wwPjpceDIwXHRcclxuXGZdKilbXHgyMFx0XHJcblxmXSpcLz8+KD86PFwvXDE+fCkkL2k7IGZ1bmN0aW9uIEwoZSwgdCwgbikgeyByZXR1cm4gZyh0KSA/IHcuZ3JlcChlLCBmdW5jdGlvbiAoZSwgcikgeyByZXR1cm4gISF0LmNhbGwoZSwgciwgZSkgIT09IG4gfSkgOiB0Lm5vZGVUeXBlID8gdy5ncmVwKGUsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID09PSB0ICE9PSBuIH0pIDogInN0cmluZyIgIT0gdHlwZW9mIHQgPyB3LmdyZXAoZSwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHMuY2FsbCh0LCBlKSA+IC0xICE9PSBuIH0pIDogdy5maWx0ZXIodCwgZSwgbikgfSB3LmZpbHRlciA9IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHZhciByID0gdFswXTsgcmV0dXJuIG4gJiYgKGUgPSAiOm5vdCgiICsgZSArICIpIiksIDEgPT09IHQubGVuZ3RoICYmIDEgPT09IHIubm9kZVR5cGUgPyB3LmZpbmQubWF0Y2hlc1NlbGVjdG9yKHIsIGUpID8gW3JdIDogW10gOiB3LmZpbmQubWF0Y2hlcyhlLCB3LmdyZXAodCwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIDEgPT09IGUubm9kZVR5cGUgfSkpIH0sIHcuZm4uZXh0ZW5kKHsgZmluZDogZnVuY3Rpb24gKGUpIHsgdmFyIHQsIG4sIHIgPSB0aGlzLmxlbmd0aCwgaSA9IHRoaXM7IGlmICgic3RyaW5nIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHRoaXMucHVzaFN0YWNrKHcoZSkuZmlsdGVyKGZ1bmN0aW9uICgpIHsgZm9yICh0ID0gMDsgdCA8IHI7IHQrKylpZiAody5jb250YWlucyhpW3RdLCB0aGlzKSkgcmV0dXJuICEwIH0pKTsgZm9yIChuID0gdGhpcy5wdXNoU3RhY2soW10pLCB0ID0gMDsgdCA8IHI7IHQrKyl3LmZpbmQoZSwgaVt0XSwgbik7IHJldHVybiByID4gMSA/IHcudW5pcXVlU29ydChuKSA6IG4gfSwgZmlsdGVyOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcy5wdXNoU3RhY2soTCh0aGlzLCBlIHx8IFtdLCAhMSkpIH0sIG5vdDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHRoaXMucHVzaFN0YWNrKEwodGhpcywgZSB8fCBbXSwgITApKSB9LCBpczogZnVuY3Rpb24gKGUpIHsgcmV0dXJuICEhTCh0aGlzLCAic3RyaW5nIiA9PSB0eXBlb2YgZSAmJiBBLnRlc3QoZSkgPyB3KGUpIDogZSB8fCBbXSwgITEpLmxlbmd0aCB9IH0pOyB2YXIgaiwgcSA9IC9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKykpJC87ICh3LmZuLmluaXQgPSBmdW5jdGlvbiAoZSwgdCwgbikgeyB2YXIgaSwgbzsgaWYgKCFlKSByZXR1cm4gdGhpczsgaWYgKG4gPSBuIHx8IGosICJzdHJpbmciID09IHR5cGVvZiBlKSB7IGlmICghKGkgPSAiPCIgPT09IGVbMF0gJiYgIj4iID09PSBlW2UubGVuZ3RoIC0gMV0gJiYgZS5sZW5ndGggPj0gMyA/IFtudWxsLCBlLCBudWxsXSA6IHEuZXhlYyhlKSkgfHwgIWlbMV0gJiYgdCkgcmV0dXJuICF0IHx8IHQuanF1ZXJ5ID8gKHQgfHwgbikuZmluZChlKSA6IHRoaXMuY29uc3RydWN0b3IodCkuZmluZChlKTsgaWYgKGlbMV0pIHsgaWYgKHQgPSB0IGluc3RhbmNlb2YgdyA/IHRbMF0gOiB0LCB3Lm1lcmdlKHRoaXMsIHcucGFyc2VIVE1MKGlbMV0sIHQgJiYgdC5ub2RlVHlwZSA/IHQub3duZXJEb2N1bWVudCB8fCB0IDogciwgITApKSwgUy50ZXN0KGlbMV0pICYmIHcuaXNQbGFpbk9iamVjdCh0KSkgZm9yIChpIGluIHQpIGcodGhpc1tpXSkgPyB0aGlzW2ldKHRbaV0pIDogdGhpcy5hdHRyKGksIHRbaV0pOyByZXR1cm4gdGhpcyB9IHJldHVybiAobyA9IHIuZ2V0RWxlbWVudEJ5SWQoaVsyXSkpICYmICh0aGlzWzBdID0gbywgdGhpcy5sZW5ndGggPSAxKSwgdGhpcyB9IHJldHVybiBlLm5vZGVUeXBlID8gKHRoaXNbMF0gPSBlLCB0aGlzLmxlbmd0aCA9IDEsIHRoaXMpIDogZyhlKSA/IHZvaWQgMCAhPT0gbi5yZWFkeSA/IG4ucmVhZHkoZSkgOiBlKHcpIDogdy5tYWtlQXJyYXkoZSwgdGhpcykgfSkucHJvdG90eXBlID0gdy5mbiwgaiA9IHcocik7IHZhciBPID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sIFAgPSB7IGNoaWxkcmVuOiAhMCwgY29udGVudHM6ICEwLCBuZXh0OiAhMCwgcHJldjogITAgfTsgdy5mbi5leHRlbmQoeyBoYXM6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gdyhlLCB0aGlzKSwgbiA9IHQubGVuZ3RoOyByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24gKCkgeyBmb3IgKHZhciBlID0gMDsgZSA8IG47IGUrKylpZiAody5jb250YWlucyh0aGlzLCB0W2VdKSkgcmV0dXJuICEwIH0pIH0sIGNsb3Nlc3Q6IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBuLCByID0gMCwgaSA9IHRoaXMubGVuZ3RoLCBvID0gW10sIGEgPSAic3RyaW5nIiAhPSB0eXBlb2YgZSAmJiB3KGUpOyBpZiAoIUEudGVzdChlKSkgZm9yICg7IHIgPCBpOyByKyspZm9yIChuID0gdGhpc1tyXTsgbiAmJiBuICE9PSB0OyBuID0gbi5wYXJlbnROb2RlKWlmIChuLm5vZGVUeXBlIDwgMTEgJiYgKGEgPyBhLmluZGV4KG4pID4gLTEgOiAxID09PSBuLm5vZGVUeXBlICYmIHcuZmluZC5tYXRjaGVzU2VsZWN0b3IobiwgZSkpKSB7IG8ucHVzaChuKTsgYnJlYWsgfSByZXR1cm4gdGhpcy5wdXNoU3RhY2soby5sZW5ndGggPiAxID8gdy51bmlxdWVTb3J0KG8pIDogbykgfSwgaW5kZXg6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gInN0cmluZyIgPT0gdHlwZW9mIGUgPyBzLmNhbGwodyhlKSwgdGhpc1swXSkgOiBzLmNhbGwodGhpcywgZS5qcXVlcnkgPyBlWzBdIDogZSkgOiB0aGlzWzBdICYmIHRoaXNbMF0ucGFyZW50Tm9kZSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTEgfSwgYWRkOiBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gdGhpcy5wdXNoU3RhY2sody51bmlxdWVTb3J0KHcubWVyZ2UodGhpcy5nZXQoKSwgdyhlLCB0KSkpKSB9LCBhZGRCYWNrOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcy5hZGQobnVsbCA9PSBlID8gdGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSkgfSB9KTsgZnVuY3Rpb24gSChlLCB0KSB7IHdoaWxlICgoZSA9IGVbdF0pICYmIDEgIT09IGUubm9kZVR5cGUpOyByZXR1cm4gZSB9IHcuZWFjaCh7IHBhcmVudDogZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSBlLnBhcmVudE5vZGU7IHJldHVybiB0ICYmIDExICE9PSB0Lm5vZGVUeXBlID8gdCA6IG51bGwgfSwgcGFyZW50czogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIE4oZSwgInBhcmVudE5vZGUiKSB9LCBwYXJlbnRzVW50aWw6IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiBOKGUsICJwYXJlbnROb2RlIiwgbikgfSwgbmV4dDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIEgoZSwgIm5leHRTaWJsaW5nIikgfSwgcHJldjogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIEgoZSwgInByZXZpb3VzU2libGluZyIpIH0sIG5leHRBbGw6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBOKGUsICJuZXh0U2libGluZyIpIH0sIHByZXZBbGw6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBOKGUsICJwcmV2aW91c1NpYmxpbmciKSB9LCBuZXh0VW50aWw6IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiBOKGUsICJuZXh0U2libGluZyIsIG4pIH0sIHByZXZVbnRpbDogZnVuY3Rpb24gKGUsIHQsIG4pIHsgcmV0dXJuIE4oZSwgInByZXZpb3VzU2libGluZyIsIG4pIH0sIHNpYmxpbmdzOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gaygoZS5wYXJlbnROb2RlIHx8IHt9KS5maXJzdENoaWxkLCBlKSB9LCBjaGlsZHJlbjogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGsoZS5maXJzdENoaWxkKSB9LCBjb250ZW50czogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIEQoZSwgImlmcmFtZSIpID8gZS5jb250ZW50RG9jdW1lbnQgOiAoRChlLCAidGVtcGxhdGUiKSAmJiAoZSA9IGUuY29udGVudCB8fCBlKSwgdy5tZXJnZShbXSwgZS5jaGlsZE5vZGVzKSkgfSB9LCBmdW5jdGlvbiAoZSwgdCkgeyB3LmZuW2VdID0gZnVuY3Rpb24gKG4sIHIpIHsgdmFyIGkgPSB3Lm1hcCh0aGlzLCB0LCBuKTsgcmV0dXJuICJVbnRpbCIgIT09IGUuc2xpY2UoLTUpICYmIChyID0gbiksIHIgJiYgInN0cmluZyIgPT0gdHlwZW9mIHIgJiYgKGkgPSB3LmZpbHRlcihyLCBpKSksIHRoaXMubGVuZ3RoID4gMSAmJiAoUFtlXSB8fCB3LnVuaXF1ZVNvcnQoaSksIE8udGVzdChlKSAmJiBpLnJldmVyc2UoKSksIHRoaXMucHVzaFN0YWNrKGkpIH0gfSk7IHZhciBJID0gL1teXHgyMFx0XHJcblxmXSsvZzsgZnVuY3Rpb24gUihlKSB7IHZhciB0ID0ge307IHJldHVybiB3LmVhY2goZS5tYXRjaChJKSB8fCBbXSwgZnVuY3Rpb24gKGUsIG4pIHsgdFtuXSA9ICEwIH0pLCB0IH0gdy5DYWxsYmFja3MgPSBmdW5jdGlvbiAoZSkgeyBlID0gInN0cmluZyIgPT0gdHlwZW9mIGUgPyBSKGUpIDogdy5leHRlbmQoe30sIGUpOyB2YXIgdCwgbiwgciwgaSwgbyA9IFtdLCBhID0gW10sIHUgPSAtMSwgcyA9IGZ1bmN0aW9uICgpIHsgZm9yIChpID0gaSB8fCBlLm9uY2UsIHIgPSB0ID0gITA7IGEubGVuZ3RoOyB1ID0gLTEpIHsgbiA9IGEuc2hpZnQoKTsgd2hpbGUgKCsrdSA8IG8ubGVuZ3RoKSAhMSA9PT0gb1t1XS5hcHBseShuWzBdLCBuWzFdKSAmJiBlLnN0b3BPbkZhbHNlICYmICh1ID0gby5sZW5ndGgsIG4gPSAhMSkgfSBlLm1lbW9yeSB8fCAobiA9ICExKSwgdCA9ICExLCBpICYmIChvID0gbiA/IFtdIDogIiIpIH0sIGwgPSB7IGFkZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbyAmJiAobiAmJiAhdCAmJiAodSA9IG8ubGVuZ3RoIC0gMSwgYS5wdXNoKG4pKSwgZnVuY3Rpb24gdChuKSB7IHcuZWFjaChuLCBmdW5jdGlvbiAobiwgcikgeyBnKHIpID8gZS51bmlxdWUgJiYgbC5oYXMocikgfHwgby5wdXNoKHIpIDogciAmJiByLmxlbmd0aCAmJiAic3RyaW5nIiAhPT0gYihyKSAmJiB0KHIpIH0pIH0oYXJndW1lbnRzKSwgbiAmJiAhdCAmJiBzKCkpLCB0aGlzIH0sIHJlbW92ZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gdy5lYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG47IHdoaWxlICgobiA9IHcuaW5BcnJheSh0LCBvLCBuKSkgPiAtMSkgby5zcGxpY2UobiwgMSksIG4gPD0gdSAmJiB1LS0gfSksIHRoaXMgfSwgaGFzOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHcuaW5BcnJheShlLCBvKSA+IC0xIDogby5sZW5ndGggPiAwIH0sIGVtcHR5OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvICYmIChvID0gW10pLCB0aGlzIH0sIGRpc2FibGU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGkgPSBhID0gW10sIG8gPSBuID0gIiIsIHRoaXMgfSwgZGlzYWJsZWQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICFvIH0sIGxvY2s6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGkgPSBhID0gW10sIG4gfHwgdCB8fCAobyA9IG4gPSAiIiksIHRoaXMgfSwgbG9ja2VkOiBmdW5jdGlvbiAoKSB7IHJldHVybiAhIWkgfSwgZmlyZVdpdGg6IGZ1bmN0aW9uIChlLCBuKSB7IHJldHVybiBpIHx8IChuID0gW2UsIChuID0gbiB8fCBbXSkuc2xpY2UgPyBuLnNsaWNlKCkgOiBuXSwgYS5wdXNoKG4pLCB0IHx8IHMoKSksIHRoaXMgfSwgZmlyZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gbC5maXJlV2l0aCh0aGlzLCBhcmd1bWVudHMpLCB0aGlzIH0sIGZpcmVkOiBmdW5jdGlvbiAoKSB7IHJldHVybiAhIXIgfSB9OyByZXR1cm4gbCB9OyBmdW5jdGlvbiBCKGUpIHsgcmV0dXJuIGUgfSBmdW5jdGlvbiBNKGUpIHsgdGhyb3cgZSB9IGZ1bmN0aW9uIFcoZSwgdCwgbiwgcikgeyB2YXIgaTsgdHJ5IHsgZSAmJiBnKGkgPSBlLnByb21pc2UpID8gaS5jYWxsKGUpLmRvbmUodCkuZmFpbChuKSA6IGUgJiYgZyhpID0gZS50aGVuKSA/IGkuY2FsbChlLCB0LCBuKSA6IHQuYXBwbHkodm9pZCAwLCBbZV0uc2xpY2UocikpIH0gY2F0Y2ggKGUpIHsgbi5hcHBseSh2b2lkIDAsIFtlXSkgfSB9IHcuZXh0ZW5kKHsgRGVmZXJyZWQ6IGZ1bmN0aW9uICh0KSB7IHZhciBuID0gW1sibm90aWZ5IiwgInByb2dyZXNzIiwgdy5DYWxsYmFja3MoIm1lbW9yeSIpLCB3LkNhbGxiYWNrcygibWVtb3J5IiksIDJdLCBbInJlc29sdmUiLCAiZG9uZSIsIHcuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCB3LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwgMCwgInJlc29sdmVkIl0sIFsicmVqZWN0IiwgImZhaWwiLCB3LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwgdy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksIDEsICJyZWplY3RlZCJdXSwgciA9ICJwZW5kaW5nIiwgaSA9IHsgc3RhdGU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHIgfSwgYWx3YXlzOiBmdW5jdGlvbiAoKSB7IHJldHVybiBvLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyksIHRoaXMgfSwgImNhdGNoIjogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGkudGhlbihudWxsLCBlKSB9LCBwaXBlOiBmdW5jdGlvbiAoKSB7IHZhciBlID0gYXJndW1lbnRzOyByZXR1cm4gdy5EZWZlcnJlZChmdW5jdGlvbiAodCkgeyB3LmVhY2gobiwgZnVuY3Rpb24gKG4sIHIpIHsgdmFyIGkgPSBnKGVbcls0XV0pICYmIGVbcls0XV07IG9bclsxXV0oZnVuY3Rpb24gKCkgeyB2YXIgZSA9IGkgJiYgaS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyBlICYmIGcoZS5wcm9taXNlKSA/IGUucHJvbWlzZSgpLnByb2dyZXNzKHQubm90aWZ5KS5kb25lKHQucmVzb2x2ZSkuZmFpbCh0LnJlamVjdCkgOiB0W3JbMF0gKyAiV2l0aCJdKHRoaXMsIGkgPyBbZV0gOiBhcmd1bWVudHMpIH0pIH0pLCBlID0gbnVsbCB9KS5wcm9taXNlKCkgfSwgdGhlbjogZnVuY3Rpb24gKHQsIHIsIGkpIHsgdmFyIG8gPSAwOyBmdW5jdGlvbiBhKHQsIG4sIHIsIGkpIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHUgPSB0aGlzLCBzID0gYXJndW1lbnRzLCBsID0gZnVuY3Rpb24gKCkgeyB2YXIgZSwgbDsgaWYgKCEodCA8IG8pKSB7IGlmICgoZSA9IHIuYXBwbHkodSwgcykpID09PSBuLnByb21pc2UoKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uIik7IGwgPSBlICYmICgib2JqZWN0IiA9PSB0eXBlb2YgZSB8fCAiZnVuY3Rpb24iID09IHR5cGVvZiBlKSAmJiBlLnRoZW4sIGcobCkgPyBpID8gbC5jYWxsKGUsIGEobywgbiwgQiwgaSksIGEobywgbiwgTSwgaSkpIDogKG8rKyAsIGwuY2FsbChlLCBhKG8sIG4sIEIsIGkpLCBhKG8sIG4sIE0sIGkpLCBhKG8sIG4sIEIsIG4ubm90aWZ5V2l0aCkpKSA6IChyICE9PSBCICYmICh1ID0gdm9pZCAwLCBzID0gW2VdKSwgKGkgfHwgbi5yZXNvbHZlV2l0aCkodSwgcykpIH0gfSwgYyA9IGkgPyBsIDogZnVuY3Rpb24gKCkgeyB0cnkgeyBsKCkgfSBjYXRjaCAoZSkgeyB3LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgJiYgdy5EZWZlcnJlZC5leGNlcHRpb25Ib29rKGUsIGMuc3RhY2tUcmFjZSksIHQgKyAxID49IG8gJiYgKHIgIT09IE0gJiYgKHUgPSB2b2lkIDAsIHMgPSBbZV0pLCBuLnJlamVjdFdpdGgodSwgcykpIH0gfTsgdCA/IGMoKSA6ICh3LkRlZmVycmVkLmdldFN0YWNrSG9vayAmJiAoYy5zdGFja1RyYWNlID0gdy5EZWZlcnJlZC5nZXRTdGFja0hvb2soKSksIGUuc2V0VGltZW91dChjKSkgfSB9IHJldHVybiB3LkRlZmVycmVkKGZ1bmN0aW9uIChlKSB7IG5bMF1bM10uYWRkKGEoMCwgZSwgZyhpKSA/IGkgOiBCLCBlLm5vdGlmeVdpdGgpKSwgblsxXVszXS5hZGQoYSgwLCBlLCBnKHQpID8gdCA6IEIpKSwgblsyXVszXS5hZGQoYSgwLCBlLCBnKHIpID8gciA6IE0pKSB9KS5wcm9taXNlKCkgfSwgcHJvbWlzZTogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG51bGwgIT0gZSA/IHcuZXh0ZW5kKGUsIGkpIDogaSB9IH0sIG8gPSB7fTsgcmV0dXJuIHcuZWFjaChuLCBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgYSA9IHRbMl0sIHUgPSB0WzVdOyBpW3RbMV1dID0gYS5hZGQsIHUgJiYgYS5hZGQoZnVuY3Rpb24gKCkgeyByID0gdSB9LCBuWzMgLSBlXVsyXS5kaXNhYmxlLCBuWzMgLSBlXVszXS5kaXNhYmxlLCBuWzBdWzJdLmxvY2ssIG5bMF1bM10ubG9jayksIGEuYWRkKHRbM10uZmlyZSksIG9bdFswXV0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvW3RbMF0gKyAiV2l0aCJdKHRoaXMgPT09IG8gPyB2b2lkIDAgOiB0aGlzLCBhcmd1bWVudHMpLCB0aGlzIH0sIG9bdFswXSArICJXaXRoIl0gPSBhLmZpcmVXaXRoIH0pLCBpLnByb21pc2UobyksIHQgJiYgdC5jYWxsKG8sIG8pLCBvIH0sIHdoZW46IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gYXJndW1lbnRzLmxlbmd0aCwgbiA9IHQsIHIgPSBBcnJheShuKSwgaSA9IG8uY2FsbChhcmd1bWVudHMpLCBhID0gdy5EZWZlcnJlZCgpLCB1ID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGZ1bmN0aW9uIChuKSB7IHJbZV0gPSB0aGlzLCBpW2VdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBvLmNhbGwoYXJndW1lbnRzKSA6IG4sIC0tdCB8fCBhLnJlc29sdmVXaXRoKHIsIGkpIH0gfTsgaWYgKHQgPD0gMSAmJiAoVyhlLCBhLmRvbmUodShuKSkucmVzb2x2ZSwgYS5yZWplY3QsICF0KSwgInBlbmRpbmciID09PSBhLnN0YXRlKCkgfHwgZyhpW25dICYmIGlbbl0udGhlbikpKSByZXR1cm4gYS50aGVuKCk7IHdoaWxlIChuLS0pIFcoaVtuXSwgdShuKSwgYS5yZWplY3QpOyByZXR1cm4gYS5wcm9taXNlKCkgfSB9KTsgdmFyICQgPSAvXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLzsgdy5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVuY3Rpb24gKHQsIG4pIHsgZS5jb25zb2xlICYmIGUuY29uc29sZS53YXJuICYmIHQgJiYgJC50ZXN0KHQubmFtZSkgJiYgZS5jb25zb2xlLndhcm4oImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246ICIgKyB0Lm1lc3NhZ2UsIHQuc3RhY2ssIG4pIH0sIHcucmVhZHlFeGNlcHRpb24gPSBmdW5jdGlvbiAodCkgeyBlLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0aHJvdyB0IH0pIH07IHZhciBGID0gdy5EZWZlcnJlZCgpOyB3LmZuLnJlYWR5ID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIEYudGhlbihlKVsiY2F0Y2giXShmdW5jdGlvbiAoZSkgeyB3LnJlYWR5RXhjZXB0aW9uKGUpIH0pLCB0aGlzIH0sIHcuZXh0ZW5kKHsgaXNSZWFkeTogITEsIHJlYWR5V2FpdDogMSwgcmVhZHk6IGZ1bmN0aW9uIChlKSB7ICghMCA9PT0gZSA/IC0tdy5yZWFkeVdhaXQgOiB3LmlzUmVhZHkpIHx8ICh3LmlzUmVhZHkgPSAhMCwgITAgIT09IGUgJiYgLS13LnJlYWR5V2FpdCA+IDAgfHwgRi5yZXNvbHZlV2l0aChyLCBbd10pKSB9IH0pLCB3LnJlYWR5LnRoZW4gPSBGLnRoZW47IGZ1bmN0aW9uIHooKSB7IHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIHopLCBlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLCB6KSwgdy5yZWFkeSgpIH0gImNvbXBsZXRlIiA9PT0gci5yZWFkeVN0YXRlIHx8ICJsb2FkaW5nIiAhPT0gci5yZWFkeVN0YXRlICYmICFyLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCA/IGUuc2V0VGltZW91dCh3LnJlYWR5KSA6IChyLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCB6KSwgZS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgeikpOyB2YXIgXyA9IGZ1bmN0aW9uIChlLCB0LCBuLCByLCBpLCBvLCBhKSB7IHZhciB1ID0gMCwgcyA9IGUubGVuZ3RoLCBsID0gbnVsbCA9PSBuOyBpZiAoIm9iamVjdCIgPT09IGIobikpIHsgaSA9ICEwOyBmb3IgKHUgaW4gbikgXyhlLCB0LCB1LCBuW3VdLCAhMCwgbywgYSkgfSBlbHNlIGlmICh2b2lkIDAgIT09IHIgJiYgKGkgPSAhMCwgZyhyKSB8fCAoYSA9ICEwKSwgbCAmJiAoYSA/ICh0LmNhbGwoZSwgciksIHQgPSBudWxsKSA6IChsID0gdCwgdCA9IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiBsLmNhbGwodyhlKSwgbikgfSkpLCB0KSkgZm9yICg7IHUgPCBzOyB1KyspdChlW3VdLCBuLCBhID8gciA6IHIuY2FsbChlW3VdLCB1LCB0KGVbdV0sIG4pKSk7IHJldHVybiBpID8gZSA6IGwgPyB0LmNhbGwoZSkgOiBzID8gdChlWzBdLCBuKSA6IG8gfSwgVSA9IC9eLW1zLS8sIFYgPSAvLShbYS16XSkvZzsgZnVuY3Rpb24gWChlLCB0KSB7IHJldHVybiB0LnRvVXBwZXJDYXNlKCkgfSBmdW5jdGlvbiBRKGUpIHsgcmV0dXJuIGUucmVwbGFjZShVLCAibXMtIikucmVwbGFjZShWLCBYKSB9IHZhciBZID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIDEgPT09IGUubm9kZVR5cGUgfHwgOSA9PT0gZS5ub2RlVHlwZSB8fCAhK2Uubm9kZVR5cGUgfTsgZnVuY3Rpb24gRygpIHsgdGhpcy5leHBhbmRvID0gdy5leHBhbmRvICsgRy51aWQrKyB9IEcudWlkID0gMSwgRy5wcm90b3R5cGUgPSB7IGNhY2hlOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IGVbdGhpcy5leHBhbmRvXTsgcmV0dXJuIHQgfHwgKHQgPSB7fSwgWShlKSAmJiAoZS5ub2RlVHlwZSA/IGVbdGhpcy5leHBhbmRvXSA9IHQgOiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgdGhpcy5leHBhbmRvLCB7IHZhbHVlOiB0LCBjb25maWd1cmFibGU6ICEwIH0pKSksIHQgfSwgc2V0OiBmdW5jdGlvbiAoZSwgdCwgbikgeyB2YXIgciwgaSA9IHRoaXMuY2FjaGUoZSk7IGlmICgic3RyaW5nIiA9PSB0eXBlb2YgdCkgaVtRKHQpXSA9IG47IGVsc2UgZm9yIChyIGluIHQpIGlbUShyKV0gPSB0W3JdOyByZXR1cm4gaSB9LCBnZXQ6IGZ1bmN0aW9uIChlLCB0KSB7IHJldHVybiB2b2lkIDAgPT09IHQgPyB0aGlzLmNhY2hlKGUpIDogZVt0aGlzLmV4cGFuZG9dICYmIGVbdGhpcy5leHBhbmRvXVtRKHQpXSB9LCBhY2Nlc3M6IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiB2b2lkIDAgPT09IHQgfHwgdCAmJiAic3RyaW5nIiA9PSB0eXBlb2YgdCAmJiB2b2lkIDAgPT09IG4gPyB0aGlzLmdldChlLCB0KSA6ICh0aGlzLnNldChlLCB0LCBuKSwgdm9pZCAwICE9PSBuID8gbiA6IHQpIH0sIHJlbW92ZTogZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4sIHIgPSBlW3RoaXMuZXhwYW5kb107IGlmICh2b2lkIDAgIT09IHIpIHsgaWYgKHZvaWQgMCAhPT0gdCkgeyBuID0gKHQgPSBBcnJheS5pc0FycmF5KHQpID8gdC5tYXAoUSkgOiAodCA9IFEodCkpIGluIHIgPyBbdF0gOiB0Lm1hdGNoKEkpIHx8IFtdKS5sZW5ndGg7IHdoaWxlIChuLS0pIGRlbGV0ZSByW3Rbbl1dIH0gKHZvaWQgMCA9PT0gdCB8fCB3LmlzRW1wdHlPYmplY3QocikpICYmIChlLm5vZGVUeXBlID8gZVt0aGlzLmV4cGFuZG9dID0gdm9pZCAwIDogZGVsZXRlIGVbdGhpcy5leHBhbmRvXSkgfSB9LCBoYXNEYXRhOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IGVbdGhpcy5leHBhbmRvXTsgcmV0dXJuIHZvaWQgMCAhPT0gdCAmJiAhdy5pc0VtcHR5T2JqZWN0KHQpIH0gfTsgdmFyIEsgPSBuZXcgRywgSiA9IG5ldyBHLCBaID0gL14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLywgZWUgPSAvW0EtWl0vZzsgZnVuY3Rpb24gdGUoZSkgeyByZXR1cm4gInRydWUiID09PSBlIHx8ICJmYWxzZSIgIT09IGUgJiYgKCJudWxsIiA9PT0gZSA/IG51bGwgOiBlID09PSArZSArICIiID8gK2UgOiBaLnRlc3QoZSkgPyBKU09OLnBhcnNlKGUpIDogZSkgfSBmdW5jdGlvbiBuZShlLCB0LCBuKSB7IHZhciByOyBpZiAodm9pZCAwID09PSBuICYmIDEgPT09IGUubm9kZVR5cGUpIGlmIChyID0gImRhdGEtIiArIHQucmVwbGFjZShlZSwgIi0kJiIpLnRvTG93ZXJDYXNlKCksICJzdHJpbmciID09IHR5cGVvZiAobiA9IGUuZ2V0QXR0cmlidXRlKHIpKSkgeyB0cnkgeyBuID0gdGUobikgfSBjYXRjaCAoZSkgeyB9IEouc2V0KGUsIHQsIG4pIH0gZWxzZSBuID0gdm9pZCAwOyByZXR1cm4gbiB9IHcuZXh0ZW5kKHsgaGFzRGF0YTogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIEouaGFzRGF0YShlKSB8fCBLLmhhc0RhdGEoZSkgfSwgZGF0YTogZnVuY3Rpb24gKGUsIHQsIG4pIHsgcmV0dXJuIEouYWNjZXNzKGUsIHQsIG4pIH0sIHJlbW92ZURhdGE6IGZ1bmN0aW9uIChlLCB0KSB7IEoucmVtb3ZlKGUsIHQpIH0sIF9kYXRhOiBmdW5jdGlvbiAoZSwgdCwgbikgeyByZXR1cm4gSy5hY2Nlc3MoZSwgdCwgbikgfSwgX3JlbW92ZURhdGE6IGZ1bmN0aW9uIChlLCB0KSB7IEsucmVtb3ZlKGUsIHQpIH0gfSksIHcuZm4uZXh0ZW5kKHsgZGF0YTogZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4sIHIsIGksIG8gPSB0aGlzWzBdLCBhID0gbyAmJiBvLmF0dHJpYnV0ZXM7IGlmICh2b2lkIDAgPT09IGUpIHsgaWYgKHRoaXMubGVuZ3RoICYmIChpID0gSi5nZXQobyksIDEgPT09IG8ubm9kZVR5cGUgJiYgIUsuZ2V0KG8sICJoYXNEYXRhQXR0cnMiKSkpIHsgbiA9IGEubGVuZ3RoOyB3aGlsZSAobi0tKSBhW25dICYmIDAgPT09IChyID0gYVtuXS5uYW1lKS5pbmRleE9mKCJkYXRhLSIpICYmIChyID0gUShyLnNsaWNlKDUpKSwgbmUobywgciwgaVtyXSkpOyBLLnNldChvLCAiaGFzRGF0YUF0dHJzIiwgITApIH0gcmV0dXJuIGkgfSByZXR1cm4gIm9iamVjdCIgPT0gdHlwZW9mIGUgPyB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyBKLnNldCh0aGlzLCBlKSB9KSA6IF8odGhpcywgZnVuY3Rpb24gKHQpIHsgdmFyIG47IGlmIChvICYmIHZvaWQgMCA9PT0gdCkgeyBpZiAodm9pZCAwICE9PSAobiA9IEouZ2V0KG8sIGUpKSkgcmV0dXJuIG47IGlmICh2b2lkIDAgIT09IChuID0gbmUobywgZSkpKSByZXR1cm4gbiB9IGVsc2UgdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgSi5zZXQodGhpcywgZSwgdCkgfSkgfSwgbnVsbCwgdCwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsICEwKSB9LCByZW1vdmVEYXRhOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgSi5yZW1vdmUodGhpcywgZSkgfSkgfSB9KSwgdy5leHRlbmQoeyBxdWV1ZTogZnVuY3Rpb24gKGUsIHQsIG4pIHsgdmFyIHI7IGlmIChlKSByZXR1cm4gdCA9ICh0IHx8ICJmeCIpICsgInF1ZXVlIiwgciA9IEsuZ2V0KGUsIHQpLCBuICYmICghciB8fCBBcnJheS5pc0FycmF5KG4pID8gciA9IEsuYWNjZXNzKGUsIHQsIHcubWFrZUFycmF5KG4pKSA6IHIucHVzaChuKSksIHIgfHwgW10gfSwgZGVxdWV1ZTogZnVuY3Rpb24gKGUsIHQpIHsgdCA9IHQgfHwgImZ4IjsgdmFyIG4gPSB3LnF1ZXVlKGUsIHQpLCByID0gbi5sZW5ndGgsIGkgPSBuLnNoaWZ0KCksIG8gPSB3Ll9xdWV1ZUhvb2tzKGUsIHQpLCBhID0gZnVuY3Rpb24gKCkgeyB3LmRlcXVldWUoZSwgdCkgfTsgImlucHJvZ3Jlc3MiID09PSBpICYmIChpID0gbi5zaGlmdCgpLCByLS0pLCBpICYmICgiZngiID09PSB0ICYmIG4udW5zaGlmdCgiaW5wcm9ncmVzcyIpLCBkZWxldGUgby5zdG9wLCBpLmNhbGwoZSwgYSwgbykpLCAhciAmJiBvICYmIG8uZW1wdHkuZmlyZSgpIH0sIF9xdWV1ZUhvb2tzOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiA9IHQgKyAicXVldWVIb29rcyI7IHJldHVybiBLLmdldChlLCBuKSB8fCBLLmFjY2VzcyhlLCBuLCB7IGVtcHR5OiB3LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24gKCkgeyBLLnJlbW92ZShlLCBbdCArICJxdWV1ZSIsIG5dKSB9KSB9KSB9IH0pLCB3LmZuLmV4dGVuZCh7IHF1ZXVlOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiA9IDI7IHJldHVybiAic3RyaW5nIiAhPSB0eXBlb2YgZSAmJiAodCA9IGUsIGUgPSAiZngiLCBuLS0pLCBhcmd1bWVudHMubGVuZ3RoIDwgbiA/IHcucXVldWUodGhpc1swXSwgZSkgOiB2b2lkIDAgPT09IHQgPyB0aGlzIDogdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIG4gPSB3LnF1ZXVlKHRoaXMsIGUsIHQpOyB3Ll9xdWV1ZUhvb2tzKHRoaXMsIGUpLCAiZngiID09PSBlICYmICJpbnByb2dyZXNzIiAhPT0gblswXSAmJiB3LmRlcXVldWUodGhpcywgZSkgfSkgfSwgZGVxdWV1ZTogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IHcuZGVxdWV1ZSh0aGlzLCBlKSB9KSB9LCBjbGVhclF1ZXVlOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcy5xdWV1ZShlIHx8ICJmeCIsIFtdKSB9LCBwcm9taXNlOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiwgciA9IDEsIGkgPSB3LkRlZmVycmVkKCksIG8gPSB0aGlzLCBhID0gdGhpcy5sZW5ndGgsIHUgPSBmdW5jdGlvbiAoKSB7IC0tciB8fCBpLnJlc29sdmVXaXRoKG8sIFtvXSkgfTsgInN0cmluZyIgIT0gdHlwZW9mIGUgJiYgKHQgPSBlLCBlID0gdm9pZCAwKSwgZSA9IGUgfHwgImZ4Ijsgd2hpbGUgKGEtLSkgKG4gPSBLLmdldChvW2FdLCBlICsgInF1ZXVlSG9va3MiKSkgJiYgbi5lbXB0eSAmJiAocisrICwgbi5lbXB0eS5hZGQodSkpOyByZXR1cm4gdSgpLCBpLnByb21pc2UodCkgfSB9KTsgdmFyIHJlID0gL1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsIGllID0gbmV3IFJlZ0V4cCgiXig/OihbKy1dKT18KSgiICsgcmUgKyAiKShbYS16JV0qKSQiLCAiaSIpLCBvZSA9IFsiVG9wIiwgIlJpZ2h0IiwgIkJvdHRvbSIsICJMZWZ0Il0sIGFlID0gZnVuY3Rpb24gKGUsIHQpIHsgcmV0dXJuICJub25lIiA9PT0gKGUgPSB0IHx8IGUpLnN0eWxlLmRpc3BsYXkgfHwgIiIgPT09IGUuc3R5bGUuZGlzcGxheSAmJiB3LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCwgZSkgJiYgIm5vbmUiID09PSB3LmNzcyhlLCAiZGlzcGxheSIpIH0sIHVlID0gZnVuY3Rpb24gKGUsIHQsIG4sIHIpIHsgdmFyIGksIG8sIGEgPSB7fTsgZm9yIChvIGluIHQpIGFbb10gPSBlLnN0eWxlW29dLCBlLnN0eWxlW29dID0gdFtvXTsgaSA9IG4uYXBwbHkoZSwgciB8fCBbXSk7IGZvciAobyBpbiB0KSBlLnN0eWxlW29dID0gYVtvXTsgcmV0dXJuIGkgfTsgZnVuY3Rpb24gc2UoZSwgdCwgbiwgcikgeyB2YXIgaSwgbywgYSA9IDIwLCB1ID0gciA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHIuY3VyKCkgfSA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHcuY3NzKGUsIHQsICIiKSB9LCBzID0gdSgpLCBsID0gbiAmJiBuWzNdIHx8ICh3LmNzc051bWJlclt0XSA/ICIiIDogInB4IiksIGMgPSAody5jc3NOdW1iZXJbdF0gfHwgInB4IiAhPT0gbCAmJiArcykgJiYgaWUuZXhlYyh3LmNzcyhlLCB0KSk7IGlmIChjICYmIGNbM10gIT09IGwpIHsgcyAvPSAyLCBsID0gbCB8fCBjWzNdLCBjID0gK3MgfHwgMTsgd2hpbGUgKGEtLSkgdy5zdHlsZShlLCB0LCBjICsgbCksICgxIC0gbykgKiAoMSAtIChvID0gdSgpIC8gcyB8fCAuNSkpIDw9IDAgJiYgKGEgPSAwKSwgYyAvPSBvOyBjICo9IDIsIHcuc3R5bGUoZSwgdCwgYyArIGwpLCBuID0gbiB8fCBbXSB9IHJldHVybiBuICYmIChjID0gK2MgfHwgK3MgfHwgMCwgaSA9IG5bMV0gPyBjICsgKG5bMV0gKyAxKSAqIG5bMl0gOiArblsyXSwgciAmJiAoci51bml0ID0gbCwgci5zdGFydCA9IGMsIHIuZW5kID0gaSkpLCBpIH0gdmFyIGxlID0ge307IGZ1bmN0aW9uIGNlKGUpIHsgdmFyIHQsIG4gPSBlLm93bmVyRG9jdW1lbnQsIHIgPSBlLm5vZGVOYW1lLCBpID0gbGVbcl07IHJldHVybiBpIHx8ICh0ID0gbi5ib2R5LmFwcGVuZENoaWxkKG4uY3JlYXRlRWxlbWVudChyKSksIGkgPSB3LmNzcyh0LCAiZGlzcGxheSIpLCB0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksICJub25lIiA9PT0gaSAmJiAoaSA9ICJibG9jayIpLCBsZVtyXSA9IGksIGkpIH0gZnVuY3Rpb24gZmUoZSwgdCkgeyBmb3IgKHZhciBuLCByLCBpID0gW10sIG8gPSAwLCBhID0gZS5sZW5ndGg7IG8gPCBhOyBvKyspKHIgPSBlW29dKS5zdHlsZSAmJiAobiA9IHIuc3R5bGUuZGlzcGxheSwgdCA/ICgibm9uZSIgPT09IG4gJiYgKGlbb10gPSBLLmdldChyLCAiZGlzcGxheSIpIHx8IG51bGwsIGlbb10gfHwgKHIuc3R5bGUuZGlzcGxheSA9ICIiKSksICIiID09PSByLnN0eWxlLmRpc3BsYXkgJiYgYWUocikgJiYgKGlbb10gPSBjZShyKSkpIDogIm5vbmUiICE9PSBuICYmIChpW29dID0gIm5vbmUiLCBLLnNldChyLCAiZGlzcGxheSIsIG4pKSk7IGZvciAobyA9IDA7IG8gPCBhOyBvKyspbnVsbCAhPSBpW29dICYmIChlW29dLnN0eWxlLmRpc3BsYXkgPSBpW29dKTsgcmV0dXJuIGUgfSB3LmZuLmV4dGVuZCh7IHNob3c6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZlKHRoaXMsICEwKSB9LCBoaWRlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBmZSh0aGlzKSB9LCB0b2dnbGU6IGZ1bmN0aW9uIChlKSB7IHJldHVybiAiYm9vbGVhbiIgPT0gdHlwZW9mIGUgPyBlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKSA6IHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IGFlKHRoaXMpID8gdyh0aGlzKS5zaG93KCkgOiB3KHRoaXMpLmhpZGUoKSB9KSB9IH0pOyB2YXIgZGUgPSAvXig/OmNoZWNrYm94fHJhZGlvKSQvaSwgcGUgPSAvPChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKykvaSwgaGUgPSAvXiR8Xm1vZHVsZSR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksIGdlID0geyBvcHRpb246IFsxLCAiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsICI8L3NlbGVjdD4iXSwgdGhlYWQ6IFsxLCAiPHRhYmxlPiIsICI8L3RhYmxlPiJdLCBjb2w6IFsyLCAiPHRhYmxlPjxjb2xncm91cD4iLCAiPC9jb2xncm91cD48L3RhYmxlPiJdLCB0cjogWzIsICI8dGFibGU+PHRib2R5PiIsICI8L3Rib2R5PjwvdGFibGU+Il0sIHRkOiBbMywgIjx0YWJsZT48dGJvZHk+PHRyPiIsICI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSwgX2RlZmF1bHQ6IFswLCAiIiwgIiJdIH07IGdlLm9wdGdyb3VwID0gZ2Uub3B0aW9uLCBnZS50Ym9keSA9IGdlLnRmb290ID0gZ2UuY29sZ3JvdXAgPSBnZS5jYXB0aW9uID0gZ2UudGhlYWQsIGdlLnRoID0gZ2UudGQ7IGZ1bmN0aW9uIHZlKGUsIHQpIHsgdmFyIG47IHJldHVybiBuID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPyBlLmdldEVsZW1lbnRzQnlUYWdOYW1lKHQgfHwgIioiKSA6ICJ1bmRlZmluZWQiICE9IHR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGwgPyBlLnF1ZXJ5U2VsZWN0b3JBbGwodCB8fCAiKiIpIDogW10sIHZvaWQgMCA9PT0gdCB8fCB0ICYmIEQoZSwgdCkgPyB3Lm1lcmdlKFtlXSwgbikgOiBuIH0gZnVuY3Rpb24geWUoZSwgdCkgeyBmb3IgKHZhciBuID0gMCwgciA9IGUubGVuZ3RoOyBuIDwgcjsgbisrKUsuc2V0KGVbbl0sICJnbG9iYWxFdmFsIiwgIXQgfHwgSy5nZXQodFtuXSwgImdsb2JhbEV2YWwiKSkgfSB2YXIgbWUgPSAvPHwmIz9cdys7LzsgZnVuY3Rpb24gYmUoZSwgdCwgbiwgciwgaSkgeyBmb3IgKHZhciBvLCBhLCB1LCBzLCBsLCBjLCBmID0gdC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGQgPSBbXSwgcCA9IDAsIGggPSBlLmxlbmd0aDsgcCA8IGg7IHArKylpZiAoKG8gPSBlW3BdKSB8fCAwID09PSBvKSBpZiAoIm9iamVjdCIgPT09IGIobykpIHcubWVyZ2UoZCwgby5ub2RlVHlwZSA/IFtvXSA6IG8pOyBlbHNlIGlmIChtZS50ZXN0KG8pKSB7IGEgPSBhIHx8IGYuYXBwZW5kQ2hpbGQodC5jcmVhdGVFbGVtZW50KCJkaXYiKSksIHUgPSAocGUuZXhlYyhvKSB8fCBbIiIsICIiXSlbMV0udG9Mb3dlckNhc2UoKSwgcyA9IGdlW3VdIHx8IGdlLl9kZWZhdWx0LCBhLmlubmVySFRNTCA9IHNbMV0gKyB3Lmh0bWxQcmVmaWx0ZXIobykgKyBzWzJdLCBjID0gc1swXTsgd2hpbGUgKGMtLSkgYSA9IGEubGFzdENoaWxkOyB3Lm1lcmdlKGQsIGEuY2hpbGROb2RlcyksIChhID0gZi5maXJzdENoaWxkKS50ZXh0Q29udGVudCA9ICIiIH0gZWxzZSBkLnB1c2godC5jcmVhdGVUZXh0Tm9kZShvKSk7IGYudGV4dENvbnRlbnQgPSAiIiwgcCA9IDA7IHdoaWxlIChvID0gZFtwKytdKSBpZiAociAmJiB3LmluQXJyYXkobywgcikgPiAtMSkgaSAmJiBpLnB1c2gobyk7IGVsc2UgaWYgKGwgPSB3LmNvbnRhaW5zKG8ub3duZXJEb2N1bWVudCwgbyksIGEgPSB2ZShmLmFwcGVuZENoaWxkKG8pLCAic2NyaXB0IiksIGwgJiYgeWUoYSksIG4pIHsgYyA9IDA7IHdoaWxlIChvID0gYVtjKytdKSBoZS50ZXN0KG8udHlwZSB8fCAiIikgJiYgbi5wdXNoKG8pIH0gcmV0dXJuIGYgfSAhZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLmFwcGVuZENoaWxkKHIuY3JlYXRlRWxlbWVudCgiZGl2IikpLCB0ID0gci5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOyB0LnNldEF0dHJpYnV0ZSgidHlwZSIsICJyYWRpbyIpLCB0LnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsICJjaGVja2VkIiksIHQuc2V0QXR0cmlidXRlKCJuYW1lIiwgInQiKSwgZS5hcHBlbmRDaGlsZCh0KSwgaC5jaGVja0Nsb25lID0gZS5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsIGUuaW5uZXJIVE1MID0gIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT4iLCBoLm5vQ2xvbmVDaGVja2VkID0gISFlLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZSB9KCk7IHZhciB4ZSA9IHIuZG9jdW1lbnRFbGVtZW50LCB3ZSA9IC9ea2V5LywgQ2UgPSAvXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sIFRlID0gL14oW14uXSopKD86XC4oLispfCkvOyBmdW5jdGlvbiBFZSgpIHsgcmV0dXJuICEwIH0gZnVuY3Rpb24gTmUoKSB7IHJldHVybiAhMSB9IGZ1bmN0aW9uIGtlKCkgeyB0cnkgeyByZXR1cm4gci5hY3RpdmVFbGVtZW50IH0gY2F0Y2ggKGUpIHsgfSB9IGZ1bmN0aW9uIEFlKGUsIHQsIG4sIHIsIGksIG8pIHsgdmFyIGEsIHU7IGlmICgib2JqZWN0IiA9PSB0eXBlb2YgdCkgeyAic3RyaW5nIiAhPSB0eXBlb2YgbiAmJiAociA9IHIgfHwgbiwgbiA9IHZvaWQgMCk7IGZvciAodSBpbiB0KSBBZShlLCB1LCBuLCByLCB0W3VdLCBvKTsgcmV0dXJuIGUgfSBpZiAobnVsbCA9PSByICYmIG51bGwgPT0gaSA/IChpID0gbiwgciA9IG4gPSB2b2lkIDApIDogbnVsbCA9PSBpICYmICgic3RyaW5nIiA9PSB0eXBlb2YgbiA/IChpID0gciwgciA9IHZvaWQgMCkgOiAoaSA9IHIsIHIgPSBuLCBuID0gdm9pZCAwKSksICExID09PSBpKSBpID0gTmU7IGVsc2UgaWYgKCFpKSByZXR1cm4gZTsgcmV0dXJuIDEgPT09IG8gJiYgKGEgPSBpLCAoaSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiB3KCkub2ZmKGUpLCBhLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfSkuZ3VpZCA9IGEuZ3VpZCB8fCAoYS5ndWlkID0gdy5ndWlkKyspKSwgZS5lYWNoKGZ1bmN0aW9uICgpIHsgdy5ldmVudC5hZGQodGhpcywgdCwgaSwgciwgbikgfSkgfSB3LmV2ZW50ID0geyBnbG9iYWw6IHt9LCBhZGQ6IGZ1bmN0aW9uIChlLCB0LCBuLCByLCBpKSB7IHZhciBvLCBhLCB1LCBzLCBsLCBjLCBmLCBkLCBwLCBoLCBnLCB2ID0gSy5nZXQoZSk7IGlmICh2KSB7IG4uaGFuZGxlciAmJiAobiA9IChvID0gbikuaGFuZGxlciwgaSA9IG8uc2VsZWN0b3IpLCBpICYmIHcuZmluZC5tYXRjaGVzU2VsZWN0b3IoeGUsIGkpLCBuLmd1aWQgfHwgKG4uZ3VpZCA9IHcuZ3VpZCsrKSwgKHMgPSB2LmV2ZW50cykgfHwgKHMgPSB2LmV2ZW50cyA9IHt9KSwgKGEgPSB2LmhhbmRsZSkgfHwgKGEgPSB2LmhhbmRsZSA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiAidW5kZWZpbmVkIiAhPSB0eXBlb2YgdyAmJiB3LmV2ZW50LnRyaWdnZXJlZCAhPT0gdC50eXBlID8gdy5ldmVudC5kaXNwYXRjaC5hcHBseShlLCBhcmd1bWVudHMpIDogdm9pZCAwIH0pLCBsID0gKHQgPSAodCB8fCAiIikubWF0Y2goSSkgfHwgWyIiXSkubGVuZ3RoOyB3aGlsZSAobC0tKSBwID0gZyA9ICh1ID0gVGUuZXhlYyh0W2xdKSB8fCBbXSlbMV0sIGggPSAodVsyXSB8fCAiIikuc3BsaXQoIi4iKS5zb3J0KCksIHAgJiYgKGYgPSB3LmV2ZW50LnNwZWNpYWxbcF0gfHwge30sIHAgPSAoaSA/IGYuZGVsZWdhdGVUeXBlIDogZi5iaW5kVHlwZSkgfHwgcCwgZiA9IHcuZXZlbnQuc3BlY2lhbFtwXSB8fCB7fSwgYyA9IHcuZXh0ZW5kKHsgdHlwZTogcCwgb3JpZ1R5cGU6IGcsIGRhdGE6IHIsIGhhbmRsZXI6IG4sIGd1aWQ6IG4uZ3VpZCwgc2VsZWN0b3I6IGksIG5lZWRzQ29udGV4dDogaSAmJiB3LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoaSksIG5hbWVzcGFjZTogaC5qb2luKCIuIikgfSwgbyksIChkID0gc1twXSkgfHwgKChkID0gc1twXSA9IFtdKS5kZWxlZ2F0ZUNvdW50ID0gMCwgZi5zZXR1cCAmJiAhMSAhPT0gZi5zZXR1cC5jYWxsKGUsIHIsIGgsIGEpIHx8IGUuYWRkRXZlbnRMaXN0ZW5lciAmJiBlLmFkZEV2ZW50TGlzdGVuZXIocCwgYSkpLCBmLmFkZCAmJiAoZi5hZGQuY2FsbChlLCBjKSwgYy5oYW5kbGVyLmd1aWQgfHwgKGMuaGFuZGxlci5ndWlkID0gbi5ndWlkKSksIGkgPyBkLnNwbGljZShkLmRlbGVnYXRlQ291bnQrKywgMCwgYykgOiBkLnB1c2goYyksIHcuZXZlbnQuZ2xvYmFsW3BdID0gITApIH0gfSwgcmVtb3ZlOiBmdW5jdGlvbiAoZSwgdCwgbiwgciwgaSkgeyB2YXIgbywgYSwgdSwgcywgbCwgYywgZiwgZCwgcCwgaCwgZywgdiA9IEsuaGFzRGF0YShlKSAmJiBLLmdldChlKTsgaWYgKHYgJiYgKHMgPSB2LmV2ZW50cykpIHsgbCA9ICh0ID0gKHQgfHwgIiIpLm1hdGNoKEkpIHx8IFsiIl0pLmxlbmd0aDsgd2hpbGUgKGwtLSkgaWYgKHUgPSBUZS5leGVjKHRbbF0pIHx8IFtdLCBwID0gZyA9IHVbMV0sIGggPSAodVsyXSB8fCAiIikuc3BsaXQoIi4iKS5zb3J0KCksIHApIHsgZiA9IHcuZXZlbnQuc3BlY2lhbFtwXSB8fCB7fSwgZCA9IHNbcCA9IChyID8gZi5kZWxlZ2F0ZVR5cGUgOiBmLmJpbmRUeXBlKSB8fCBwXSB8fCBbXSwgdSA9IHVbMl0gJiYgbmV3IFJlZ0V4cCgiKF58XFwuKSIgKyBoLmpvaW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwufCQpIiksIGEgPSBvID0gZC5sZW5ndGg7IHdoaWxlIChvLS0pIGMgPSBkW29dLCAhaSAmJiBnICE9PSBjLm9yaWdUeXBlIHx8IG4gJiYgbi5ndWlkICE9PSBjLmd1aWQgfHwgdSAmJiAhdS50ZXN0KGMubmFtZXNwYWNlKSB8fCByICYmIHIgIT09IGMuc2VsZWN0b3IgJiYgKCIqKiIgIT09IHIgfHwgIWMuc2VsZWN0b3IpIHx8IChkLnNwbGljZShvLCAxKSwgYy5zZWxlY3RvciAmJiBkLmRlbGVnYXRlQ291bnQtLSAsIGYucmVtb3ZlICYmIGYucmVtb3ZlLmNhbGwoZSwgYykpOyBhICYmICFkLmxlbmd0aCAmJiAoZi50ZWFyZG93biAmJiAhMSAhPT0gZi50ZWFyZG93bi5jYWxsKGUsIGgsIHYuaGFuZGxlKSB8fCB3LnJlbW92ZUV2ZW50KGUsIHAsIHYuaGFuZGxlKSwgZGVsZXRlIHNbcF0pIH0gZWxzZSBmb3IgKHAgaW4gcykgdy5ldmVudC5yZW1vdmUoZSwgcCArIHRbbF0sIG4sIHIsICEwKTsgdy5pc0VtcHR5T2JqZWN0KHMpICYmIEsucmVtb3ZlKGUsICJoYW5kbGUgZXZlbnRzIikgfSB9LCBkaXNwYXRjaDogZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSB3LmV2ZW50LmZpeChlKSwgbiwgciwgaSwgbywgYSwgdSwgcyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSwgbCA9IChLLmdldCh0aGlzLCAiZXZlbnRzIikgfHwge30pW3QudHlwZV0gfHwgW10sIGMgPSB3LmV2ZW50LnNwZWNpYWxbdC50eXBlXSB8fCB7fTsgZm9yIChzWzBdID0gdCwgbiA9IDE7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspc1tuXSA9IGFyZ3VtZW50c1tuXTsgaWYgKHQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzLCAhYy5wcmVEaXNwYXRjaCB8fCAhMSAhPT0gYy5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsIHQpKSB7IHUgPSB3LmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcywgdCwgbCksIG4gPSAwOyB3aGlsZSAoKG8gPSB1W24rK10pICYmICF0LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHsgdC5jdXJyZW50VGFyZ2V0ID0gby5lbGVtLCByID0gMDsgd2hpbGUgKChhID0gby5oYW5kbGVyc1tyKytdKSAmJiAhdC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSB0LnJuYW1lc3BhY2UgJiYgIXQucm5hbWVzcGFjZS50ZXN0KGEubmFtZXNwYWNlKSB8fCAodC5oYW5kbGVPYmogPSBhLCB0LmRhdGEgPSBhLmRhdGEsIHZvaWQgMCAhPT0gKGkgPSAoKHcuZXZlbnQuc3BlY2lhbFthLm9yaWdUeXBlXSB8fCB7fSkuaGFuZGxlIHx8IGEuaGFuZGxlcikuYXBwbHkoby5lbGVtLCBzKSkgJiYgITEgPT09ICh0LnJlc3VsdCA9IGkpICYmICh0LnByZXZlbnREZWZhdWx0KCksIHQuc3RvcFByb3BhZ2F0aW9uKCkpKSB9IHJldHVybiBjLnBvc3REaXNwYXRjaCAmJiBjLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsIHQpLCB0LnJlc3VsdCB9IH0sIGhhbmRsZXJzOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiwgciwgaSwgbywgYSwgdSA9IFtdLCBzID0gdC5kZWxlZ2F0ZUNvdW50LCBsID0gZS50YXJnZXQ7IGlmIChzICYmIGwubm9kZVR5cGUgJiYgISgiY2xpY2siID09PSBlLnR5cGUgJiYgZS5idXR0b24gPj0gMSkpIGZvciAoOyBsICE9PSB0aGlzOyBsID0gbC5wYXJlbnROb2RlIHx8IHRoaXMpaWYgKDEgPT09IGwubm9kZVR5cGUgJiYgKCJjbGljayIgIT09IGUudHlwZSB8fCAhMCAhPT0gbC5kaXNhYmxlZCkpIHsgZm9yIChvID0gW10sIGEgPSB7fSwgbiA9IDA7IG4gPCBzOyBuKyspdm9pZCAwID09PSBhW2kgPSAociA9IHRbbl0pLnNlbGVjdG9yICsgIiAiXSAmJiAoYVtpXSA9IHIubmVlZHNDb250ZXh0ID8gdyhpLCB0aGlzKS5pbmRleChsKSA+IC0xIDogdy5maW5kKGksIHRoaXMsIG51bGwsIFtsXSkubGVuZ3RoKSwgYVtpXSAmJiBvLnB1c2gocik7IG8ubGVuZ3RoICYmIHUucHVzaCh7IGVsZW06IGwsIGhhbmRsZXJzOiBvIH0pIH0gcmV0dXJuIGwgPSB0aGlzLCBzIDwgdC5sZW5ndGggJiYgdS5wdXNoKHsgZWxlbTogbCwgaGFuZGxlcnM6IHQuc2xpY2UocykgfSksIHUgfSwgYWRkUHJvcDogZnVuY3Rpb24gKGUsIHQpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHcuRXZlbnQucHJvdG90eXBlLCBlLCB7IGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCBnZXQ6IGcodCkgPyBmdW5jdGlvbiAoKSB7IGlmICh0aGlzLm9yaWdpbmFsRXZlbnQpIHJldHVybiB0KHRoaXMub3JpZ2luYWxFdmVudCkgfSA6IGZ1bmN0aW9uICgpIHsgaWYgKHRoaXMub3JpZ2luYWxFdmVudCkgcmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFtlXSB9LCBzZXQ6IGZ1bmN0aW9uICh0KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBlLCB7IGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAsIHZhbHVlOiB0IH0pIH0gfSkgfSwgZml4OiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZVt3LmV4cGFuZG9dID8gZSA6IG5ldyB3LkV2ZW50KGUpIH0sIHNwZWNpYWw6IHsgbG9hZDogeyBub0J1YmJsZTogITAgfSwgZm9jdXM6IHsgdHJpZ2dlcjogZnVuY3Rpb24gKCkgeyBpZiAodGhpcyAhPT0ga2UoKSAmJiB0aGlzLmZvY3VzKSByZXR1cm4gdGhpcy5mb2N1cygpLCAhMSB9LCBkZWxlZ2F0ZVR5cGU6ICJmb2N1c2luIiB9LCBibHVyOiB7IHRyaWdnZXI6IGZ1bmN0aW9uICgpIHsgaWYgKHRoaXMgPT09IGtlKCkgJiYgdGhpcy5ibHVyKSByZXR1cm4gdGhpcy5ibHVyKCksICExIH0sIGRlbGVnYXRlVHlwZTogImZvY3Vzb3V0IiB9LCBjbGljazogeyB0cmlnZ2VyOiBmdW5jdGlvbiAoKSB7IGlmICgiY2hlY2tib3giID09PSB0aGlzLnR5cGUgJiYgdGhpcy5jbGljayAmJiBEKHRoaXMsICJpbnB1dCIpKSByZXR1cm4gdGhpcy5jbGljaygpLCAhMSB9LCBfZGVmYXVsdDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIEQoZS50YXJnZXQsICJhIikgfSB9LCBiZWZvcmV1bmxvYWQ6IHsgcG9zdERpc3BhdGNoOiBmdW5jdGlvbiAoZSkgeyB2b2lkIDAgIT09IGUucmVzdWx0ICYmIGUub3JpZ2luYWxFdmVudCAmJiAoZS5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZS5yZXN1bHQpIH0gfSB9IH0sIHcucmVtb3ZlRXZlbnQgPSBmdW5jdGlvbiAoZSwgdCwgbikgeyBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgJiYgZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsIG4pIH0sIHcuRXZlbnQgPSBmdW5jdGlvbiAoZSwgdCkgeyBpZiAoISh0aGlzIGluc3RhbmNlb2Ygdy5FdmVudCkpIHJldHVybiBuZXcgdy5FdmVudChlLCB0KTsgZSAmJiBlLnR5cGUgPyAodGhpcy5vcmlnaW5hbEV2ZW50ID0gZSwgdGhpcy50eXBlID0gZS50eXBlLCB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGUuZGVmYXVsdFByZXZlbnRlZCB8fCB2b2lkIDAgPT09IGUuZGVmYXVsdFByZXZlbnRlZCAmJiAhMSA9PT0gZS5yZXR1cm5WYWx1ZSA/IEVlIDogTmUsIHRoaXMudGFyZ2V0ID0gZS50YXJnZXQgJiYgMyA9PT0gZS50YXJnZXQubm9kZVR5cGUgPyBlLnRhcmdldC5wYXJlbnROb2RlIDogZS50YXJnZXQsIHRoaXMuY3VycmVudFRhcmdldCA9IGUuY3VycmVudFRhcmdldCwgdGhpcy5yZWxhdGVkVGFyZ2V0ID0gZS5yZWxhdGVkVGFyZ2V0KSA6IHRoaXMudHlwZSA9IGUsIHQgJiYgdy5leHRlbmQodGhpcywgdCksIHRoaXMudGltZVN0YW1wID0gZSAmJiBlLnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpLCB0aGlzW3cuZXhwYW5kb10gPSAhMCB9LCB3LkV2ZW50LnByb3RvdHlwZSA9IHsgY29uc3RydWN0b3I6IHcuRXZlbnQsIGlzRGVmYXVsdFByZXZlbnRlZDogTmUsIGlzUHJvcGFnYXRpb25TdG9wcGVkOiBOZSwgaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IE5lLCBpc1NpbXVsYXRlZDogITEsIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OyB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IEVlLCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICYmIGUucHJldmVudERlZmF1bHQoKSB9LCBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7IHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBFZSwgZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCAmJiBlLnN0b3BQcm9wYWdhdGlvbigpIH0sIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDsgdGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IEVlLCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICYmIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksIHRoaXMuc3RvcFByb3BhZ2F0aW9uKCkgfSB9LCB3LmVhY2goeyBhbHRLZXk6ICEwLCBidWJibGVzOiAhMCwgY2FuY2VsYWJsZTogITAsIGNoYW5nZWRUb3VjaGVzOiAhMCwgY3RybEtleTogITAsIGRldGFpbDogITAsIGV2ZW50UGhhc2U6ICEwLCBtZXRhS2V5OiAhMCwgcGFnZVg6ICEwLCBwYWdlWTogITAsIHNoaWZ0S2V5OiAhMCwgdmlldzogITAsICJjaGFyIjogITAsIGNoYXJDb2RlOiAhMCwga2V5OiAhMCwga2V5Q29kZTogITAsIGJ1dHRvbjogITAsIGJ1dHRvbnM6ICEwLCBjbGllbnRYOiAhMCwgY2xpZW50WTogITAsIG9mZnNldFg6ICEwLCBvZmZzZXRZOiAhMCwgcG9pbnRlcklkOiAhMCwgcG9pbnRlclR5cGU6ICEwLCBzY3JlZW5YOiAhMCwgc2NyZWVuWTogITAsIHRhcmdldFRvdWNoZXM6ICEwLCB0b0VsZW1lbnQ6ICEwLCB0b3VjaGVzOiAhMCwgd2hpY2g6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gZS5idXR0b247IHJldHVybiBudWxsID09IGUud2hpY2ggJiYgd2UudGVzdChlLnR5cGUpID8gbnVsbCAhPSBlLmNoYXJDb2RlID8gZS5jaGFyQ29kZSA6IGUua2V5Q29kZSA6ICFlLndoaWNoICYmIHZvaWQgMCAhPT0gdCAmJiBDZS50ZXN0KGUudHlwZSkgPyAxICYgdCA/IDEgOiAyICYgdCA/IDMgOiA0ICYgdCA/IDIgOiAwIDogZS53aGljaCB9IH0sIHcuZXZlbnQuYWRkUHJvcCksIHcuZWFjaCh7IG1vdXNlZW50ZXI6ICJtb3VzZW92ZXIiLCBtb3VzZWxlYXZlOiAibW91c2VvdXQiLCBwb2ludGVyZW50ZXI6ICJwb2ludGVyb3ZlciIsIHBvaW50ZXJsZWF2ZTogInBvaW50ZXJvdXQiIH0sIGZ1bmN0aW9uIChlLCB0KSB7IHcuZXZlbnQuc3BlY2lhbFtlXSA9IHsgZGVsZWdhdGVUeXBlOiB0LCBiaW5kVHlwZTogdCwgaGFuZGxlOiBmdW5jdGlvbiAoZSkgeyB2YXIgbiwgciA9IHRoaXMsIGkgPSBlLnJlbGF0ZWRUYXJnZXQsIG8gPSBlLmhhbmRsZU9iajsgcmV0dXJuIGkgJiYgKGkgPT09IHIgfHwgdy5jb250YWlucyhyLCBpKSkgfHwgKGUudHlwZSA9IG8ub3JpZ1R5cGUsIG4gPSBvLmhhbmRsZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgZS50eXBlID0gdCksIG4gfSB9IH0pLCB3LmZuLmV4dGVuZCh7IG9uOiBmdW5jdGlvbiAoZSwgdCwgbiwgcikgeyByZXR1cm4gQWUodGhpcywgZSwgdCwgbiwgcikgfSwgb25lOiBmdW5jdGlvbiAoZSwgdCwgbiwgcikgeyByZXR1cm4gQWUodGhpcywgZSwgdCwgbiwgciwgMSkgfSwgb2ZmOiBmdW5jdGlvbiAoZSwgdCwgbikgeyB2YXIgciwgaTsgaWYgKGUgJiYgZS5wcmV2ZW50RGVmYXVsdCAmJiBlLmhhbmRsZU9iaikgcmV0dXJuIHIgPSBlLmhhbmRsZU9iaiwgdyhlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1lc3BhY2UgPyByLm9yaWdUeXBlICsgIi4iICsgci5uYW1lc3BhY2UgOiByLm9yaWdUeXBlLCByLnNlbGVjdG9yLCByLmhhbmRsZXIpLCB0aGlzOyBpZiAoIm9iamVjdCIgPT0gdHlwZW9mIGUpIHsgZm9yIChpIGluIGUpIHRoaXMub2ZmKGksIHQsIGVbaV0pOyByZXR1cm4gdGhpcyB9IHJldHVybiAhMSAhPT0gdCAmJiAiZnVuY3Rpb24iICE9IHR5cGVvZiB0IHx8IChuID0gdCwgdCA9IHZvaWQgMCksICExID09PSBuICYmIChuID0gTmUpLCB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyB3LmV2ZW50LnJlbW92ZSh0aGlzLCBlLCBuLCB0KSB9KSB9IH0pOyB2YXIgRGUgPSAvPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKilbXj5dKilcLz4vZ2ksIFNlID0gLzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksIExlID0gL2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksIGplID0gL15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nOyBmdW5jdGlvbiBxZShlLCB0KSB7IHJldHVybiBEKGUsICJ0YWJsZSIpICYmIEQoMTEgIT09IHQubm9kZVR5cGUgPyB0IDogdC5maXJzdENoaWxkLCAidHIiKSA/IHcoZSkuY2hpbGRyZW4oInRib2R5IilbMF0gfHwgZSA6IGUgfSBmdW5jdGlvbiBPZShlKSB7IHJldHVybiBlLnR5cGUgPSAobnVsbCAhPT0gZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkgKyAiLyIgKyBlLnR5cGUsIGUgfSBmdW5jdGlvbiBQZShlKSB7IHJldHVybiAidHJ1ZS8iID09PSAoZS50eXBlIHx8ICIiKS5zbGljZSgwLCA1KSA/IGUudHlwZSA9IGUudHlwZS5zbGljZSg1KSA6IGUucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksIGUgfSBmdW5jdGlvbiBIZShlLCB0KSB7IHZhciBuLCByLCBpLCBvLCBhLCB1LCBzLCBsOyBpZiAoMSA9PT0gdC5ub2RlVHlwZSkgeyBpZiAoSy5oYXNEYXRhKGUpICYmIChvID0gSy5hY2Nlc3MoZSksIGEgPSBLLnNldCh0LCBvKSwgbCA9IG8uZXZlbnRzKSkgeyBkZWxldGUgYS5oYW5kbGUsIGEuZXZlbnRzID0ge307IGZvciAoaSBpbiBsKSBmb3IgKG4gPSAwLCByID0gbFtpXS5sZW5ndGg7IG4gPCByOyBuKyspdy5ldmVudC5hZGQodCwgaSwgbFtpXVtuXSkgfSBKLmhhc0RhdGEoZSkgJiYgKHUgPSBKLmFjY2VzcyhlKSwgcyA9IHcuZXh0ZW5kKHt9LCB1KSwgSi5zZXQodCwgcykpIH0gfSBmdW5jdGlvbiBJZShlLCB0KSB7IHZhciBuID0gdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyAiaW5wdXQiID09PSBuICYmIGRlLnRlc3QoZS50eXBlKSA/IHQuY2hlY2tlZCA9IGUuY2hlY2tlZCA6ICJpbnB1dCIgIT09IG4gJiYgInRleHRhcmVhIiAhPT0gbiB8fCAodC5kZWZhdWx0VmFsdWUgPSBlLmRlZmF1bHRWYWx1ZSkgfSBmdW5jdGlvbiBSZShlLCB0LCBuLCByKSB7IHQgPSBhLmFwcGx5KFtdLCB0KTsgdmFyIGksIG8sIHUsIHMsIGwsIGMsIGYgPSAwLCBkID0gZS5sZW5ndGgsIHAgPSBkIC0gMSwgdiA9IHRbMF0sIHkgPSBnKHYpOyBpZiAoeSB8fCBkID4gMSAmJiAic3RyaW5nIiA9PSB0eXBlb2YgdiAmJiAhaC5jaGVja0Nsb25lICYmIExlLnRlc3QodikpIHJldHVybiBlLmVhY2goZnVuY3Rpb24gKGkpIHsgdmFyIG8gPSBlLmVxKGkpOyB5ICYmICh0WzBdID0gdi5jYWxsKHRoaXMsIGksIG8uaHRtbCgpKSksIFJlKG8sIHQsIG4sIHIpIH0pOyBpZiAoZCAmJiAoaSA9IGJlKHQsIGVbMF0ub3duZXJEb2N1bWVudCwgITEsIGUsIHIpLCBvID0gaS5maXJzdENoaWxkLCAxID09PSBpLmNoaWxkTm9kZXMubGVuZ3RoICYmIChpID0gbyksIG8gfHwgcikpIHsgZm9yIChzID0gKHUgPSB3Lm1hcCh2ZShpLCAic2NyaXB0IiksIE9lKSkubGVuZ3RoOyBmIDwgZDsgZisrKWwgPSBpLCBmICE9PSBwICYmIChsID0gdy5jbG9uZShsLCAhMCwgITApLCBzICYmIHcubWVyZ2UodSwgdmUobCwgInNjcmlwdCIpKSksIG4uY2FsbChlW2ZdLCBsLCBmKTsgaWYgKHMpIGZvciAoYyA9IHVbdS5sZW5ndGggLSAxXS5vd25lckRvY3VtZW50LCB3Lm1hcCh1LCBQZSksIGYgPSAwOyBmIDwgczsgZisrKWwgPSB1W2ZdLCBoZS50ZXN0KGwudHlwZSB8fCAiIikgJiYgIUsuYWNjZXNzKGwsICJnbG9iYWxFdmFsIikgJiYgdy5jb250YWlucyhjLCBsKSAmJiAobC5zcmMgJiYgIm1vZHVsZSIgIT09IChsLnR5cGUgfHwgIiIpLnRvTG93ZXJDYXNlKCkgPyB3Ll9ldmFsVXJsICYmIHcuX2V2YWxVcmwobC5zcmMpIDogbShsLnRleHRDb250ZW50LnJlcGxhY2UoamUsICIiKSwgYywgbCkpIH0gcmV0dXJuIGUgfSBmdW5jdGlvbiBCZShlLCB0LCBuKSB7IGZvciAodmFyIHIsIGkgPSB0ID8gdy5maWx0ZXIodCwgZSkgOiBlLCBvID0gMDsgbnVsbCAhPSAociA9IGlbb10pOyBvKyspbiB8fCAxICE9PSByLm5vZGVUeXBlIHx8IHcuY2xlYW5EYXRhKHZlKHIpKSwgci5wYXJlbnROb2RlICYmIChuICYmIHcuY29udGFpbnMoci5vd25lckRvY3VtZW50LCByKSAmJiB5ZSh2ZShyLCAic2NyaXB0IikpLCByLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocikpOyByZXR1cm4gZSB9IHcuZXh0ZW5kKHsgaHRtbFByZWZpbHRlcjogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUucmVwbGFjZShEZSwgIjwkMT48LyQyPiIpIH0sIGNsb25lOiBmdW5jdGlvbiAoZSwgdCwgbikgeyB2YXIgciwgaSwgbywgYSwgdSA9IGUuY2xvbmVOb2RlKCEwKSwgcyA9IHcuY29udGFpbnMoZS5vd25lckRvY3VtZW50LCBlKTsgaWYgKCEoaC5ub0Nsb25lQ2hlY2tlZCB8fCAxICE9PSBlLm5vZGVUeXBlICYmIDExICE9PSBlLm5vZGVUeXBlIHx8IHcuaXNYTUxEb2MoZSkpKSBmb3IgKGEgPSB2ZSh1KSwgciA9IDAsIGkgPSAobyA9IHZlKGUpKS5sZW5ndGg7IHIgPCBpOyByKyspSWUob1tyXSwgYVtyXSk7IGlmICh0KSBpZiAobikgZm9yIChvID0gbyB8fCB2ZShlKSwgYSA9IGEgfHwgdmUodSksIHIgPSAwLCBpID0gby5sZW5ndGg7IHIgPCBpOyByKyspSGUob1tyXSwgYVtyXSk7IGVsc2UgSGUoZSwgdSk7IHJldHVybiAoYSA9IHZlKHUsICJzY3JpcHQiKSkubGVuZ3RoID4gMCAmJiB5ZShhLCAhcyAmJiB2ZShlLCAic2NyaXB0IikpLCB1IH0sIGNsZWFuRGF0YTogZnVuY3Rpb24gKGUpIHsgZm9yICh2YXIgdCwgbiwgciwgaSA9IHcuZXZlbnQuc3BlY2lhbCwgbyA9IDA7IHZvaWQgMCAhPT0gKG4gPSBlW29dKTsgbysrKWlmIChZKG4pKSB7IGlmICh0ID0gbltLLmV4cGFuZG9dKSB7IGlmICh0LmV2ZW50cykgZm9yIChyIGluIHQuZXZlbnRzKSBpW3JdID8gdy5ldmVudC5yZW1vdmUobiwgcikgOiB3LnJlbW92ZUV2ZW50KG4sIHIsIHQuaGFuZGxlKTsgbltLLmV4cGFuZG9dID0gdm9pZCAwIH0gbltKLmV4cGFuZG9dICYmIChuW0ouZXhwYW5kb10gPSB2b2lkIDApIH0gfSB9KSwgdy5mbi5leHRlbmQoeyBkZXRhY2g6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBCZSh0aGlzLCBlLCAhMCkgfSwgcmVtb3ZlOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gQmUodGhpcywgZSkgfSwgdGV4dDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIF8odGhpcywgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHZvaWQgMCA9PT0gZSA/IHcudGV4dCh0aGlzKSA6IHRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uICgpIHsgMSAhPT0gdGhpcy5ub2RlVHlwZSAmJiAxMSAhPT0gdGhpcy5ub2RlVHlwZSAmJiA5ICE9PSB0aGlzLm5vZGVUeXBlIHx8ICh0aGlzLnRleHRDb250ZW50ID0gZSkgfSkgfSwgbnVsbCwgZSwgYXJndW1lbnRzLmxlbmd0aCkgfSwgYXBwZW5kOiBmdW5jdGlvbiAoKSB7IHJldHVybiBSZSh0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIChlKSB7IDEgIT09IHRoaXMubm9kZVR5cGUgJiYgMTEgIT09IHRoaXMubm9kZVR5cGUgJiYgOSAhPT0gdGhpcy5ub2RlVHlwZSB8fCBxZSh0aGlzLCBlKS5hcHBlbmRDaGlsZChlKSB9KSB9LCBwcmVwZW5kOiBmdW5jdGlvbiAoKSB7IHJldHVybiBSZSh0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIChlKSB7IGlmICgxID09PSB0aGlzLm5vZGVUeXBlIHx8IDExID09PSB0aGlzLm5vZGVUeXBlIHx8IDkgPT09IHRoaXMubm9kZVR5cGUpIHsgdmFyIHQgPSBxZSh0aGlzLCBlKTsgdC5pbnNlcnRCZWZvcmUoZSwgdC5maXJzdENoaWxkKSB9IH0pIH0sIGJlZm9yZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmUodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiAoZSkgeyB0aGlzLnBhcmVudE5vZGUgJiYgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLCB0aGlzKSB9KSB9LCBhZnRlcjogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmUodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiAoZSkgeyB0aGlzLnBhcmVudE5vZGUgJiYgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLCB0aGlzLm5leHRTaWJsaW5nKSB9KSB9LCBlbXB0eTogZnVuY3Rpb24gKCkgeyBmb3IgKHZhciBlLCB0ID0gMDsgbnVsbCAhPSAoZSA9IHRoaXNbdF0pOyB0KyspMSA9PT0gZS5ub2RlVHlwZSAmJiAody5jbGVhbkRhdGEodmUoZSwgITEpKSwgZS50ZXh0Q29udGVudCA9ICIiKTsgcmV0dXJuIHRoaXMgfSwgY2xvbmU6IGZ1bmN0aW9uIChlLCB0KSB7IHJldHVybiBlID0gbnVsbCAhPSBlICYmIGUsIHQgPSBudWxsID09IHQgPyBlIDogdCwgdGhpcy5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdy5jbG9uZSh0aGlzLCBlLCB0KSB9KSB9LCBodG1sOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gXyh0aGlzLCBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IHRoaXNbMF0gfHwge30sIG4gPSAwLCByID0gdGhpcy5sZW5ndGg7IGlmICh2b2lkIDAgPT09IGUgJiYgMSA9PT0gdC5ub2RlVHlwZSkgcmV0dXJuIHQuaW5uZXJIVE1MOyBpZiAoInN0cmluZyIgPT0gdHlwZW9mIGUgJiYgIVNlLnRlc3QoZSkgJiYgIWdlWyhwZS5leGVjKGUpIHx8IFsiIiwgIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSkgeyBlID0gdy5odG1sUHJlZmlsdGVyKGUpOyB0cnkgeyBmb3IgKDsgbiA8IHI7IG4rKykxID09PSAodCA9IHRoaXNbbl0gfHwge30pLm5vZGVUeXBlICYmICh3LmNsZWFuRGF0YSh2ZSh0LCAhMSkpLCB0LmlubmVySFRNTCA9IGUpOyB0ID0gMCB9IGNhdGNoIChlKSB7IH0gfSB0ICYmIHRoaXMuZW1wdHkoKS5hcHBlbmQoZSkgfSwgbnVsbCwgZSwgYXJndW1lbnRzLmxlbmd0aCkgfSwgcmVwbGFjZVdpdGg6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSBbXTsgcmV0dXJuIFJlKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24gKHQpIHsgdmFyIG4gPSB0aGlzLnBhcmVudE5vZGU7IHcuaW5BcnJheSh0aGlzLCBlKSA8IDAgJiYgKHcuY2xlYW5EYXRhKHZlKHRoaXMpKSwgbiAmJiBuLnJlcGxhY2VDaGlsZCh0LCB0aGlzKSkgfSwgZSkgfSB9KSwgdy5lYWNoKHsgYXBwZW5kVG86ICJhcHBlbmQiLCBwcmVwZW5kVG86ICJwcmVwZW5kIiwgaW5zZXJ0QmVmb3JlOiAiYmVmb3JlIiwgaW5zZXJ0QWZ0ZXI6ICJhZnRlciIsIHJlcGxhY2VBbGw6ICJyZXBsYWNlV2l0aCIgfSwgZnVuY3Rpb24gKGUsIHQpIHsgdy5mbltlXSA9IGZ1bmN0aW9uIChlKSB7IGZvciAodmFyIG4sIHIgPSBbXSwgaSA9IHcoZSksIG8gPSBpLmxlbmd0aCAtIDEsIGEgPSAwOyBhIDw9IG87IGErKyluID0gYSA9PT0gbyA/IHRoaXMgOiB0aGlzLmNsb25lKCEwKSwgdyhpW2FdKVt0XShuKSwgdS5hcHBseShyLCBuLmdldCgpKTsgcmV0dXJuIHRoaXMucHVzaFN0YWNrKHIpIH0gfSk7IHZhciBNZSA9IG5ldyBSZWdFeHAoIl4oIiArIHJlICsgIikoPyFweClbYS16JV0rJCIsICJpIiksIFdlID0gZnVuY3Rpb24gKHQpIHsgdmFyIG4gPSB0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7IHJldHVybiBuICYmIG4ub3BlbmVyIHx8IChuID0gZSksIG4uZ2V0Q29tcHV0ZWRTdHlsZSh0KSB9LCAkZSA9IG5ldyBSZWdFeHAob2Uuam9pbigifCIpLCAiaSIpOyAhZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiB0KCkgeyBpZiAoYykgeyBsLnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4O21hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MCIsIGMuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7bWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo2MCU7dG9wOjElIiwgeGUuYXBwZW5kQ2hpbGQobCkuYXBwZW5kQ2hpbGQoYyk7IHZhciB0ID0gZS5nZXRDb21wdXRlZFN0eWxlKGMpOyBpID0gIjElIiAhPT0gdC50b3AsIHMgPSAxMiA9PT0gbih0Lm1hcmdpbkxlZnQpLCBjLnN0eWxlLnJpZ2h0ID0gIjYwJSIsIHUgPSAzNiA9PT0gbih0LnJpZ2h0KSwgbyA9IDM2ID09PSBuKHQud2lkdGgpLCBjLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIiwgYSA9IDM2ID09PSBjLm9mZnNldFdpZHRoIHx8ICJhYnNvbHV0ZSIsIHhlLnJlbW92ZUNoaWxkKGwpLCBjID0gbnVsbCB9IH0gZnVuY3Rpb24gbihlKSB7IHJldHVybiBNYXRoLnJvdW5kKHBhcnNlRmxvYXQoZSkpIH0gdmFyIGksIG8sIGEsIHUsIHMsIGwgPSByLmNyZWF0ZUVsZW1lbnQoImRpdiIpLCBjID0gci5jcmVhdGVFbGVtZW50KCJkaXYiKTsgYy5zdHlsZSAmJiAoYy5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9ICJjb250ZW50LWJveCIsIGMuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9ICIiLCBoLmNsZWFyQ2xvbmVTdHlsZSA9ICJjb250ZW50LWJveCIgPT09IGMuc3R5bGUuYmFja2dyb3VuZENsaXAsIHcuZXh0ZW5kKGgsIHsgYm94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHQoKSwgbyB9LCBwaXhlbEJveFN0eWxlczogZnVuY3Rpb24gKCkgeyByZXR1cm4gdCgpLCB1IH0sIHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHQoKSwgaSB9LCByZWxpYWJsZU1hcmdpbkxlZnQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHQoKSwgcyB9LCBzY3JvbGxib3hTaXplOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0KCksIGEgfSB9KSkgfSgpOyBmdW5jdGlvbiBGZShlLCB0LCBuKSB7IHZhciByLCBpLCBvLCBhLCB1ID0gZS5zdHlsZTsgcmV0dXJuIChuID0gbiB8fCBXZShlKSkgJiYgKCIiICE9PSAoYSA9IG4uZ2V0UHJvcGVydHlWYWx1ZSh0KSB8fCBuW3RdKSB8fCB3LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCwgZSkgfHwgKGEgPSB3LnN0eWxlKGUsIHQpKSwgIWgucGl4ZWxCb3hTdHlsZXMoKSAmJiBNZS50ZXN0KGEpICYmICRlLnRlc3QodCkgJiYgKHIgPSB1LndpZHRoLCBpID0gdS5taW5XaWR0aCwgbyA9IHUubWF4V2lkdGgsIHUubWluV2lkdGggPSB1Lm1heFdpZHRoID0gdS53aWR0aCA9IGEsIGEgPSBuLndpZHRoLCB1LndpZHRoID0gciwgdS5taW5XaWR0aCA9IGksIHUubWF4V2lkdGggPSBvKSksIHZvaWQgMCAhPT0gYSA/IGEgKyAiIiA6IGEgfSBmdW5jdGlvbiB6ZShlLCB0KSB7IHJldHVybiB7IGdldDogZnVuY3Rpb24gKCkgeyBpZiAoIWUoKSkgcmV0dXJuICh0aGlzLmdldCA9IHQpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IGRlbGV0ZSB0aGlzLmdldCB9IH0gfSB2YXIgX2UgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sIFVlID0gL14tLS8sIFZlID0geyBwb3NpdGlvbjogImFic29sdXRlIiwgdmlzaWJpbGl0eTogImhpZGRlbiIsIGRpc3BsYXk6ICJibG9jayIgfSwgWGUgPSB7IGxldHRlclNwYWNpbmc6ICIwIiwgZm9udFdlaWdodDogIjQwMCIgfSwgUWUgPSBbIldlYmtpdCIsICJNb3oiLCAibXMiXSwgWWUgPSByLmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlOyBmdW5jdGlvbiBHZShlKSB7IGlmIChlIGluIFllKSByZXR1cm4gZTsgdmFyIHQgPSBlWzBdLnRvVXBwZXJDYXNlKCkgKyBlLnNsaWNlKDEpLCBuID0gUWUubGVuZ3RoOyB3aGlsZSAobi0tKSBpZiAoKGUgPSBRZVtuXSArIHQpIGluIFllKSByZXR1cm4gZSB9IGZ1bmN0aW9uIEtlKGUpIHsgdmFyIHQgPSB3LmNzc1Byb3BzW2VdOyByZXR1cm4gdCB8fCAodCA9IHcuY3NzUHJvcHNbZV0gPSBHZShlKSB8fCBlKSwgdCB9IGZ1bmN0aW9uIEplKGUsIHQsIG4pIHsgdmFyIHIgPSBpZS5leGVjKHQpOyByZXR1cm4gciA/IE1hdGgubWF4KDAsIHJbMl0gLSAobiB8fCAwKSkgKyAoclszXSB8fCAicHgiKSA6IHQgfSBmdW5jdGlvbiBaZShlLCB0LCBuLCByLCBpLCBvKSB7IHZhciBhID0gIndpZHRoIiA9PT0gdCA/IDEgOiAwLCB1ID0gMCwgcyA9IDA7IGlmIChuID09PSAociA/ICJib3JkZXIiIDogImNvbnRlbnQiKSkgcmV0dXJuIDA7IGZvciAoOyBhIDwgNDsgYSArPSAyKSJtYXJnaW4iID09PSBuICYmIChzICs9IHcuY3NzKGUsIG4gKyBvZVthXSwgITAsIGkpKSwgciA/ICgiY29udGVudCIgPT09IG4gJiYgKHMgLT0gdy5jc3MoZSwgInBhZGRpbmciICsgb2VbYV0sICEwLCBpKSksICJtYXJnaW4iICE9PSBuICYmIChzIC09IHcuY3NzKGUsICJib3JkZXIiICsgb2VbYV0gKyAiV2lkdGgiLCAhMCwgaSkpKSA6IChzICs9IHcuY3NzKGUsICJwYWRkaW5nIiArIG9lW2FdLCAhMCwgaSksICJwYWRkaW5nIiAhPT0gbiA/IHMgKz0gdy5jc3MoZSwgImJvcmRlciIgKyBvZVthXSArICJXaWR0aCIsICEwLCBpKSA6IHUgKz0gdy5jc3MoZSwgImJvcmRlciIgKyBvZVthXSArICJXaWR0aCIsICEwLCBpKSk7IHJldHVybiAhciAmJiBvID49IDAgJiYgKHMgKz0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKGVbIm9mZnNldCIgKyB0WzBdLnRvVXBwZXJDYXNlKCkgKyB0LnNsaWNlKDEpXSAtIG8gLSBzIC0gdSAtIC41KSkpLCBzIH0gZnVuY3Rpb24gZXQoZSwgdCwgbikgeyB2YXIgciA9IFdlKGUpLCBpID0gRmUoZSwgdCwgciksIG8gPSAiYm9yZGVyLWJveCIgPT09IHcuY3NzKGUsICJib3hTaXppbmciLCAhMSwgciksIGEgPSBvOyBpZiAoTWUudGVzdChpKSkgeyBpZiAoIW4pIHJldHVybiBpOyBpID0gImF1dG8iIH0gcmV0dXJuIGEgPSBhICYmIChoLmJveFNpemluZ1JlbGlhYmxlKCkgfHwgaSA9PT0gZS5zdHlsZVt0XSksICgiYXV0byIgPT09IGkgfHwgIXBhcnNlRmxvYXQoaSkgJiYgImlubGluZSIgPT09IHcuY3NzKGUsICJkaXNwbGF5IiwgITEsIHIpKSAmJiAoaSA9IGVbIm9mZnNldCIgKyB0WzBdLnRvVXBwZXJDYXNlKCkgKyB0LnNsaWNlKDEpXSwgYSA9ICEwKSwgKGkgPSBwYXJzZUZsb2F0KGkpIHx8IDApICsgWmUoZSwgdCwgbiB8fCAobyA/ICJib3JkZXIiIDogImNvbnRlbnQiKSwgYSwgciwgaSkgKyAicHgiIH0gdy5leHRlbmQoeyBjc3NIb29rczogeyBvcGFjaXR5OiB7IGdldDogZnVuY3Rpb24gKGUsIHQpIHsgaWYgKHQpIHsgdmFyIG4gPSBGZShlLCAib3BhY2l0eSIpOyByZXR1cm4gIiIgPT09IG4gPyAiMSIgOiBuIH0gfSB9IH0sIGNzc051bWJlcjogeyBhbmltYXRpb25JdGVyYXRpb25Db3VudDogITAsIGNvbHVtbkNvdW50OiAhMCwgZmlsbE9wYWNpdHk6ICEwLCBmbGV4R3JvdzogITAsIGZsZXhTaHJpbms6ICEwLCBmb250V2VpZ2h0OiAhMCwgbGluZUhlaWdodDogITAsIG9wYWNpdHk6ICEwLCBvcmRlcjogITAsIG9ycGhhbnM6ICEwLCB3aWRvd3M6ICEwLCB6SW5kZXg6ICEwLCB6b29tOiAhMCB9LCBjc3NQcm9wczoge30sIHN0eWxlOiBmdW5jdGlvbiAoZSwgdCwgbiwgcikgeyBpZiAoZSAmJiAzICE9PSBlLm5vZGVUeXBlICYmIDggIT09IGUubm9kZVR5cGUgJiYgZS5zdHlsZSkgeyB2YXIgaSwgbywgYSwgdSA9IFEodCksIHMgPSBVZS50ZXN0KHQpLCBsID0gZS5zdHlsZTsgaWYgKHMgfHwgKHQgPSBLZSh1KSksIGEgPSB3LmNzc0hvb2tzW3RdIHx8IHcuY3NzSG9va3NbdV0sIHZvaWQgMCA9PT0gbikgcmV0dXJuIGEgJiYgImdldCIgaW4gYSAmJiB2b2lkIDAgIT09IChpID0gYS5nZXQoZSwgITEsIHIpKSA/IGkgOiBsW3RdOyAic3RyaW5nIiA9PSAobyA9IHR5cGVvZiBuKSAmJiAoaSA9IGllLmV4ZWMobikpICYmIGlbMV0gJiYgKG4gPSBzZShlLCB0LCBpKSwgbyA9ICJudW1iZXIiKSwgbnVsbCAhPSBuICYmIG4gPT09IG4gJiYgKCJudW1iZXIiID09PSBvICYmIChuICs9IGkgJiYgaVszXSB8fCAody5jc3NOdW1iZXJbdV0gPyAiIiA6ICJweCIpKSwgaC5jbGVhckNsb25lU3R5bGUgfHwgIiIgIT09IG4gfHwgMCAhPT0gdC5pbmRleE9mKCJiYWNrZ3JvdW5kIikgfHwgKGxbdF0gPSAiaW5oZXJpdCIpLCBhICYmICJzZXQiIGluIGEgJiYgdm9pZCAwID09PSAobiA9IGEuc2V0KGUsIG4sIHIpKSB8fCAocyA/IGwuc2V0UHJvcGVydHkodCwgbikgOiBsW3RdID0gbikpIH0gfSwgY3NzOiBmdW5jdGlvbiAoZSwgdCwgbiwgcikgeyB2YXIgaSwgbywgYSwgdSA9IFEodCk7IHJldHVybiBVZS50ZXN0KHQpIHx8ICh0ID0gS2UodSkpLCAoYSA9IHcuY3NzSG9va3NbdF0gfHwgdy5jc3NIb29rc1t1XSkgJiYgImdldCIgaW4gYSAmJiAoaSA9IGEuZ2V0KGUsICEwLCBuKSksIHZvaWQgMCA9PT0gaSAmJiAoaSA9IEZlKGUsIHQsIHIpKSwgIm5vcm1hbCIgPT09IGkgJiYgdCBpbiBYZSAmJiAoaSA9IFhlW3RdKSwgIiIgPT09IG4gfHwgbiA/IChvID0gcGFyc2VGbG9hdChpKSwgITAgPT09IG4gfHwgaXNGaW5pdGUobykgPyBvIHx8IDAgOiBpKSA6IGkgfSB9KSwgdy5lYWNoKFsiaGVpZ2h0IiwgIndpZHRoIl0sIGZ1bmN0aW9uIChlLCB0KSB7IHcuY3NzSG9va3NbdF0gPSB7IGdldDogZnVuY3Rpb24gKGUsIG4sIHIpIHsgaWYgKG4pIHJldHVybiAhX2UudGVzdCh3LmNzcyhlLCAiZGlzcGxheSIpKSB8fCBlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICYmIGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggPyBldChlLCB0LCByKSA6IHVlKGUsIFZlLCBmdW5jdGlvbiAoKSB7IHJldHVybiBldChlLCB0LCByKSB9KSB9LCBzZXQ6IGZ1bmN0aW9uIChlLCBuLCByKSB7IHZhciBpLCBvID0gV2UoZSksIGEgPSAiYm9yZGVyLWJveCIgPT09IHcuY3NzKGUsICJib3hTaXppbmciLCAhMSwgbyksIHUgPSByICYmIFplKGUsIHQsIHIsIGEsIG8pOyByZXR1cm4gYSAmJiBoLnNjcm9sbGJveFNpemUoKSA9PT0gby5wb3NpdGlvbiAmJiAodSAtPSBNYXRoLmNlaWwoZVsib2Zmc2V0IiArIHRbMF0udG9VcHBlckNhc2UoKSArIHQuc2xpY2UoMSldIC0gcGFyc2VGbG9hdChvW3RdKSAtIFplKGUsIHQsICJib3JkZXIiLCAhMSwgbykgLSAuNSkpLCB1ICYmIChpID0gaWUuZXhlYyhuKSkgJiYgInB4IiAhPT0gKGlbM10gfHwgInB4IikgJiYgKGUuc3R5bGVbdF0gPSBuLCBuID0gdy5jc3MoZSwgdCkpLCBKZShlLCBuLCB1KSB9IH0gfSksIHcuY3NzSG9va3MubWFyZ2luTGVmdCA9IHplKGgucmVsaWFibGVNYXJnaW5MZWZ0LCBmdW5jdGlvbiAoZSwgdCkgeyBpZiAodCkgcmV0dXJuIChwYXJzZUZsb2F0KEZlKGUsICJtYXJnaW5MZWZ0IikpIHx8IGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIHVlKGUsIHsgbWFyZ2luTGVmdDogMCB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgfSkpICsgInB4IiB9KSwgdy5lYWNoKHsgbWFyZ2luOiAiIiwgcGFkZGluZzogIiIsIGJvcmRlcjogIldpZHRoIiB9LCBmdW5jdGlvbiAoZSwgdCkgeyB3LmNzc0hvb2tzW2UgKyB0XSA9IHsgZXhwYW5kOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciByID0gMCwgaSA9IHt9LCBvID0gInN0cmluZyIgPT0gdHlwZW9mIG4gPyBuLnNwbGl0KCIgIikgOiBbbl07IHIgPCA0OyByKyspaVtlICsgb2Vbcl0gKyB0XSA9IG9bcl0gfHwgb1tyIC0gMl0gfHwgb1swXTsgcmV0dXJuIGkgfSB9LCAibWFyZ2luIiAhPT0gZSAmJiAody5jc3NIb29rc1tlICsgdF0uc2V0ID0gSmUpIH0pLCB3LmZuLmV4dGVuZCh7IGNzczogZnVuY3Rpb24gKGUsIHQpIHsgcmV0dXJuIF8odGhpcywgZnVuY3Rpb24gKGUsIHQsIG4pIHsgdmFyIHIsIGksIG8gPSB7fSwgYSA9IDA7IGlmIChBcnJheS5pc0FycmF5KHQpKSB7IGZvciAociA9IFdlKGUpLCBpID0gdC5sZW5ndGg7IGEgPCBpOyBhKyspb1t0W2FdXSA9IHcuY3NzKGUsIHRbYV0sICExLCByKTsgcmV0dXJuIG8gfSByZXR1cm4gdm9pZCAwICE9PSBuID8gdy5zdHlsZShlLCB0LCBuKSA6IHcuY3NzKGUsIHQpIH0sIGUsIHQsIGFyZ3VtZW50cy5sZW5ndGggPiAxKSB9IH0pLCB3LmZuLmRlbGF5ID0gZnVuY3Rpb24gKHQsIG4pIHsgcmV0dXJuIHQgPSB3LmZ4ID8gdy5meC5zcGVlZHNbdF0gfHwgdCA6IHQsIG4gPSBuIHx8ICJmeCIsIHRoaXMucXVldWUobiwgZnVuY3Rpb24gKG4sIHIpIHsgdmFyIGkgPSBlLnNldFRpbWVvdXQobiwgdCk7IHIuc3RvcCA9IGZ1bmN0aW9uICgpIHsgZS5jbGVhclRpbWVvdXQoaSkgfSB9KSB9LCBmdW5jdGlvbiAoKSB7IHZhciBlID0gci5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLCB0ID0gci5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKS5hcHBlbmRDaGlsZChyLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKTsgZS50eXBlID0gImNoZWNrYm94IiwgaC5jaGVja09uID0gIiIgIT09IGUudmFsdWUsIGgub3B0U2VsZWN0ZWQgPSB0LnNlbGVjdGVkLCAoZSA9IHIuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkudmFsdWUgPSAidCIsIGUudHlwZSA9ICJyYWRpbyIsIGgucmFkaW9WYWx1ZSA9ICJ0IiA9PT0gZS52YWx1ZSB9KCk7IHZhciB0dCwgbnQgPSB3LmV4cHIuYXR0ckhhbmRsZTsgdy5mbi5leHRlbmQoeyBhdHRyOiBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gXyh0aGlzLCB3LmF0dHIsIGUsIHQsIGFyZ3VtZW50cy5sZW5ndGggPiAxKSB9LCByZW1vdmVBdHRyOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgdy5yZW1vdmVBdHRyKHRoaXMsIGUpIH0pIH0gfSksIHcuZXh0ZW5kKHsgYXR0cjogZnVuY3Rpb24gKGUsIHQsIG4pIHsgdmFyIHIsIGksIG8gPSBlLm5vZGVUeXBlOyBpZiAoMyAhPT0gbyAmJiA4ICE9PSBvICYmIDIgIT09IG8pIHJldHVybiAidW5kZWZpbmVkIiA9PSB0eXBlb2YgZS5nZXRBdHRyaWJ1dGUgPyB3LnByb3AoZSwgdCwgbikgOiAoMSA9PT0gbyAmJiB3LmlzWE1MRG9jKGUpIHx8IChpID0gdy5hdHRySG9va3NbdC50b0xvd2VyQ2FzZSgpXSB8fCAody5leHByLm1hdGNoLmJvb2wudGVzdCh0KSA/IHR0IDogdm9pZCAwKSksIHZvaWQgMCAhPT0gbiA/IG51bGwgPT09IG4gPyB2b2lkIHcucmVtb3ZlQXR0cihlLCB0KSA6IGkgJiYgInNldCIgaW4gaSAmJiB2b2lkIDAgIT09IChyID0gaS5zZXQoZSwgbiwgdCkpID8gciA6IChlLnNldEF0dHJpYnV0ZSh0LCBuICsgIiIpLCBuKSA6IGkgJiYgImdldCIgaW4gaSAmJiBudWxsICE9PSAociA9IGkuZ2V0KGUsIHQpKSA/IHIgOiBudWxsID09IChyID0gdy5maW5kLmF0dHIoZSwgdCkpID8gdm9pZCAwIDogcikgfSwgYXR0ckhvb2tzOiB7IHR5cGU6IHsgc2V0OiBmdW5jdGlvbiAoZSwgdCkgeyBpZiAoIWgucmFkaW9WYWx1ZSAmJiAicmFkaW8iID09PSB0ICYmIEQoZSwgImlucHV0IikpIHsgdmFyIG4gPSBlLnZhbHVlOyByZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLCB0KSwgbiAmJiAoZS52YWx1ZSA9IG4pLCB0IH0gfSB9IH0sIHJlbW92ZUF0dHI6IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBuLCByID0gMCwgaSA9IHQgJiYgdC5tYXRjaChJKTsgaWYgKGkgJiYgMSA9PT0gZS5ub2RlVHlwZSkgd2hpbGUgKG4gPSBpW3IrK10pIGUucmVtb3ZlQXR0cmlidXRlKG4pIH0gfSksIHR0ID0geyBzZXQ6IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiAhMSA9PT0gdCA/IHcucmVtb3ZlQXR0cihlLCBuKSA6IGUuc2V0QXR0cmlidXRlKG4sIG4pLCBuIH0gfSwgdy5lYWNoKHcuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLCBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiA9IG50W3RdIHx8IHcuZmluZC5hdHRyOyBudFt0XSA9IGZ1bmN0aW9uIChlLCB0LCByKSB7IHZhciBpLCBvLCBhID0gdC50b0xvd2VyQ2FzZSgpOyByZXR1cm4gciB8fCAobyA9IG50W2FdLCBudFthXSA9IGksIGkgPSBudWxsICE9IG4oZSwgdCwgcikgPyBhIDogbnVsbCwgbnRbYV0gPSBvKSwgaSB9IH0pOyB2YXIgcnQgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLCBpdCA9IC9eKD86YXxhcmVhKSQvaTsgdy5mbi5leHRlbmQoeyBwcm9wOiBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gXyh0aGlzLCB3LnByb3AsIGUsIHQsIGFyZ3VtZW50cy5sZW5ndGggPiAxKSB9LCByZW1vdmVQcm9wOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgZGVsZXRlIHRoaXNbdy5wcm9wRml4W2VdIHx8IGVdIH0pIH0gfSksIHcuZXh0ZW5kKHsgcHJvcDogZnVuY3Rpb24gKGUsIHQsIG4pIHsgdmFyIHIsIGksIG8gPSBlLm5vZGVUeXBlOyBpZiAoMyAhPT0gbyAmJiA4ICE9PSBvICYmIDIgIT09IG8pIHJldHVybiAxID09PSBvICYmIHcuaXNYTUxEb2MoZSkgfHwgKHQgPSB3LnByb3BGaXhbdF0gfHwgdCwgaSA9IHcucHJvcEhvb2tzW3RdKSwgdm9pZCAwICE9PSBuID8gaSAmJiAic2V0IiBpbiBpICYmIHZvaWQgMCAhPT0gKHIgPSBpLnNldChlLCBuLCB0KSkgPyByIDogZVt0XSA9IG4gOiBpICYmICJnZXQiIGluIGkgJiYgbnVsbCAhPT0gKHIgPSBpLmdldChlLCB0KSkgPyByIDogZVt0XSB9LCBwcm9wSG9va3M6IHsgdGFiSW5kZXg6IHsgZ2V0OiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IHcuZmluZC5hdHRyKGUsICJ0YWJpbmRleCIpOyByZXR1cm4gdCA/IHBhcnNlSW50KHQsIDEwKSA6IHJ0LnRlc3QoZS5ub2RlTmFtZSkgfHwgaXQudGVzdChlLm5vZGVOYW1lKSAmJiBlLmhyZWYgPyAwIDogLTEgfSB9IH0sIHByb3BGaXg6IHsgImZvciI6ICJodG1sRm9yIiwgImNsYXNzIjogImNsYXNzTmFtZSIgfSB9KSwgaC5vcHRTZWxlY3RlZCB8fCAody5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7IGdldDogZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSBlLnBhcmVudE5vZGU7IHJldHVybiB0ICYmIHQucGFyZW50Tm9kZSAmJiB0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCwgbnVsbCB9LCBzZXQ6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gZS5wYXJlbnROb2RlOyB0ICYmICh0LnNlbGVjdGVkSW5kZXgsIHQucGFyZW50Tm9kZSAmJiB0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCkgfSB9KSwgdy5lYWNoKFsidGFiSW5kZXgiLCAicmVhZE9ubHkiLCAibWF4TGVuZ3RoIiwgImNlbGxTcGFjaW5nIiwgImNlbGxQYWRkaW5nIiwgInJvd1NwYW4iLCAiY29sU3BhbiIsICJ1c2VNYXAiLCAiZnJhbWVCb3JkZXIiLCAiY29udGVudEVkaXRhYmxlIl0sIGZ1bmN0aW9uICgpIHsgdy5wcm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV0gPSB0aGlzIH0pOyBmdW5jdGlvbiBvdChlKSB7IHJldHVybiAoZS5tYXRjaChJKSB8fCBbXSkuam9pbigiICIpIH0gZnVuY3Rpb24gYXQoZSkgeyByZXR1cm4gZS5nZXRBdHRyaWJ1dGUgJiYgZS5nZXRBdHRyaWJ1dGUoImNsYXNzIikgfHwgIiIgfSBmdW5jdGlvbiB1dChlKSB7IHJldHVybiBBcnJheS5pc0FycmF5KGUpID8gZSA6ICJzdHJpbmciID09IHR5cGVvZiBlID8gZS5tYXRjaChJKSB8fCBbXSA6IFtdIH0gdy5mbi5leHRlbmQoeyBhZGRDbGFzczogZnVuY3Rpb24gKGUpIHsgdmFyIHQsIG4sIHIsIGksIG8sIGEsIHUsIHMgPSAwOyBpZiAoZyhlKSkgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAodCkgeyB3KHRoaXMpLmFkZENsYXNzKGUuY2FsbCh0aGlzLCB0LCBhdCh0aGlzKSkpIH0pOyBpZiAoKHQgPSB1dChlKSkubGVuZ3RoKSB3aGlsZSAobiA9IHRoaXNbcysrXSkgaWYgKGkgPSBhdChuKSwgciA9IDEgPT09IG4ubm9kZVR5cGUgJiYgIiAiICsgb3QoaSkgKyAiICIpIHsgYSA9IDA7IHdoaWxlIChvID0gdFthKytdKSByLmluZGV4T2YoIiAiICsgbyArICIgIikgPCAwICYmIChyICs9IG8gKyAiICIpOyBpICE9PSAodSA9IG90KHIpKSAmJiBuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCB1KSB9IHJldHVybiB0aGlzIH0sIHJlbW92ZUNsYXNzOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCwgbiwgciwgaSwgbywgYSwgdSwgcyA9IDA7IGlmIChnKGUpKSByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICh0KSB7IHcodGhpcykucmVtb3ZlQ2xhc3MoZS5jYWxsKHRoaXMsIHQsIGF0KHRoaXMpKSkgfSk7IGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRoaXMuYXR0cigiY2xhc3MiLCAiIik7IGlmICgodCA9IHV0KGUpKS5sZW5ndGgpIHdoaWxlIChuID0gdGhpc1tzKytdKSBpZiAoaSA9IGF0KG4pLCByID0gMSA9PT0gbi5ub2RlVHlwZSAmJiAiICIgKyBvdChpKSArICIgIikgeyBhID0gMDsgd2hpbGUgKG8gPSB0W2ErK10pIHdoaWxlIChyLmluZGV4T2YoIiAiICsgbyArICIgIikgPiAtMSkgciA9IHIucmVwbGFjZSgiICIgKyBvICsgIiAiLCAiICIpOyBpICE9PSAodSA9IG90KHIpKSAmJiBuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCB1KSB9IHJldHVybiB0aGlzIH0sIHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiA9IHR5cGVvZiBlLCByID0gInN0cmluZyIgPT09IG4gfHwgQXJyYXkuaXNBcnJheShlKTsgcmV0dXJuICJib29sZWFuIiA9PSB0eXBlb2YgdCAmJiByID8gdCA/IHRoaXMuYWRkQ2xhc3MoZSkgOiB0aGlzLnJlbW92ZUNsYXNzKGUpIDogZyhlKSA/IHRoaXMuZWFjaChmdW5jdGlvbiAobikgeyB3KHRoaXMpLnRvZ2dsZUNsYXNzKGUuY2FsbCh0aGlzLCBuLCBhdCh0aGlzKSwgdCksIHQpIH0pIDogdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIHQsIGksIG8sIGE7IGlmIChyKSB7IGkgPSAwLCBvID0gdyh0aGlzKSwgYSA9IHV0KGUpOyB3aGlsZSAodCA9IGFbaSsrXSkgby5oYXNDbGFzcyh0KSA/IG8ucmVtb3ZlQ2xhc3ModCkgOiBvLmFkZENsYXNzKHQpIH0gZWxzZSB2b2lkIDAgIT09IGUgJiYgImJvb2xlYW4iICE9PSBuIHx8ICgodCA9IGF0KHRoaXMpKSAmJiBLLnNldCh0aGlzLCAiX19jbGFzc05hbWVfXyIsIHQpLCB0aGlzLnNldEF0dHJpYnV0ZSAmJiB0aGlzLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCB0IHx8ICExID09PSBlID8gIiIgOiBLLmdldCh0aGlzLCAiX19jbGFzc05hbWVfXyIpIHx8ICIiKSkgfSkgfSwgaGFzQ2xhc3M6IGZ1bmN0aW9uIChlKSB7IHZhciB0LCBuLCByID0gMDsgdCA9ICIgIiArIGUgKyAiICI7IHdoaWxlIChuID0gdGhpc1tyKytdKSBpZiAoMSA9PT0gbi5ub2RlVHlwZSAmJiAoIiAiICsgb3QoYXQobikpICsgIiAiKS5pbmRleE9mKHQpID4gLTEpIHJldHVybiAhMDsgcmV0dXJuICExIH0gfSk7IHZhciBzdCA9IC9cci9nOyB3LmZuLmV4dGVuZCh7IHZhbDogZnVuY3Rpb24gKGUpIHsgdmFyIHQsIG4sIHIsIGkgPSB0aGlzWzBdOyB7IGlmIChhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gciA9IGcoZSksIHRoaXMuZWFjaChmdW5jdGlvbiAobikgeyB2YXIgaTsgMSA9PT0gdGhpcy5ub2RlVHlwZSAmJiAobnVsbCA9PSAoaSA9IHIgPyBlLmNhbGwodGhpcywgbiwgdyh0aGlzKS52YWwoKSkgOiBlKSA/IGkgPSAiIiA6ICJudW1iZXIiID09IHR5cGVvZiBpID8gaSArPSAiIiA6IEFycmF5LmlzQXJyYXkoaSkgJiYgKGkgPSB3Lm1hcChpLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gbnVsbCA9PSBlID8gIiIgOiBlICsgIiIgfSkpLCAodCA9IHcudmFsSG9va3NbdGhpcy50eXBlXSB8fCB3LnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pICYmICJzZXQiIGluIHQgJiYgdm9pZCAwICE9PSB0LnNldCh0aGlzLCBpLCAidmFsdWUiKSB8fCAodGhpcy52YWx1ZSA9IGkpKSB9KTsgaWYgKGkpIHJldHVybiAodCA9IHcudmFsSG9va3NbaS50eXBlXSB8fCB3LnZhbEhvb2tzW2kubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pICYmICJnZXQiIGluIHQgJiYgdm9pZCAwICE9PSAobiA9IHQuZ2V0KGksICJ2YWx1ZSIpKSA/IG4gOiAic3RyaW5nIiA9PSB0eXBlb2YgKG4gPSBpLnZhbHVlKSA/IG4ucmVwbGFjZShzdCwgIiIpIDogbnVsbCA9PSBuID8gIiIgOiBuIH0gfSB9KSwgdy5leHRlbmQoeyB2YWxIb29rczogeyBvcHRpb246IHsgZ2V0OiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IHcuZmluZC5hdHRyKGUsICJ2YWx1ZSIpOyByZXR1cm4gbnVsbCAhPSB0ID8gdCA6IG90KHcudGV4dChlKSkgfSB9LCBzZWxlY3Q6IHsgZ2V0OiBmdW5jdGlvbiAoZSkgeyB2YXIgdCwgbiwgciwgaSA9IGUub3B0aW9ucywgbyA9IGUuc2VsZWN0ZWRJbmRleCwgYSA9ICJzZWxlY3Qtb25lIiA9PT0gZS50eXBlLCB1ID0gYSA/IG51bGwgOiBbXSwgcyA9IGEgPyBvICsgMSA6IGkubGVuZ3RoOyBmb3IgKHIgPSBvIDwgMCA/IHMgOiBhID8gbyA6IDA7IHIgPCBzOyByKyspaWYgKCgobiA9IGlbcl0pLnNlbGVjdGVkIHx8IHIgPT09IG8pICYmICFuLmRpc2FibGVkICYmICghbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8ICFEKG4ucGFyZW50Tm9kZSwgIm9wdGdyb3VwIikpKSB7IGlmICh0ID0gdyhuKS52YWwoKSwgYSkgcmV0dXJuIHQ7IHUucHVzaCh0KSB9IHJldHVybiB1IH0sIHNldDogZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4sIHIsIGkgPSBlLm9wdGlvbnMsIG8gPSB3Lm1ha2VBcnJheSh0KSwgYSA9IGkubGVuZ3RoOyB3aGlsZSAoYS0tKSAoKHIgPSBpW2FdKS5zZWxlY3RlZCA9IHcuaW5BcnJheSh3LnZhbEhvb2tzLm9wdGlvbi5nZXQociksIG8pID4gLTEpICYmIChuID0gITApOyByZXR1cm4gbiB8fCAoZS5zZWxlY3RlZEluZGV4ID0gLTEpLCBvIH0gfSB9IH0pLCB3LmVhY2goWyJyYWRpbyIsICJjaGVja2JveCJdLCBmdW5jdGlvbiAoKSB7IHcudmFsSG9va3NbdGhpc10gPSB7IHNldDogZnVuY3Rpb24gKGUsIHQpIHsgaWYgKEFycmF5LmlzQXJyYXkodCkpIHJldHVybiBlLmNoZWNrZWQgPSB3LmluQXJyYXkodyhlKS52YWwoKSwgdCkgPiAtMSB9IH0sIGguY2hlY2tPbiB8fCAody52YWxIb29rc1t0aGlzXS5nZXQgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gbnVsbCA9PT0gZS5nZXRBdHRyaWJ1dGUoInZhbHVlIikgPyAib24iIDogZS52YWx1ZSB9KSB9KSwgaC5mb2N1c2luID0gIm9uZm9jdXNpbiIgaW4gZTsgdmFyIGx0ID0gL14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLCBjdCA9IGZ1bmN0aW9uIChlKSB7IGUuc3RvcFByb3BhZ2F0aW9uKCkgfTsgdy5leHRlbmQody5ldmVudCwgeyB0cmlnZ2VyOiBmdW5jdGlvbiAodCwgbiwgaSwgbykgeyB2YXIgYSwgdSwgcywgbCwgYywgZCwgcCwgaCwgeSA9IFtpIHx8IHJdLCBtID0gZi5jYWxsKHQsICJ0eXBlIikgPyB0LnR5cGUgOiB0LCBiID0gZi5jYWxsKHQsICJuYW1lc3BhY2UiKSA/IHQubmFtZXNwYWNlLnNwbGl0KCIuIikgOiBbXTsgaWYgKHUgPSBoID0gcyA9IGkgPSBpIHx8IHIsIDMgIT09IGkubm9kZVR5cGUgJiYgOCAhPT0gaS5ub2RlVHlwZSAmJiAhbHQudGVzdChtICsgdy5ldmVudC50cmlnZ2VyZWQpICYmIChtLmluZGV4T2YoIi4iKSA+IC0xICYmIChtID0gKGIgPSBtLnNwbGl0KCIuIikpLnNoaWZ0KCksIGIuc29ydCgpKSwgYyA9IG0uaW5kZXhPZigiOiIpIDwgMCAmJiAib24iICsgbSwgdCA9IHRbdy5leHBhbmRvXSA/IHQgOiBuZXcgdy5FdmVudChtLCAib2JqZWN0IiA9PSB0eXBlb2YgdCAmJiB0KSwgdC5pc1RyaWdnZXIgPSBvID8gMiA6IDMsIHQubmFtZXNwYWNlID0gYi5qb2luKCIuIiksIHQucm5hbWVzcGFjZSA9IHQubmFtZXNwYWNlID8gbmV3IFJlZ0V4cCgiKF58XFwuKSIgKyBiLmpvaW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwufCQpIikgOiBudWxsLCB0LnJlc3VsdCA9IHZvaWQgMCwgdC50YXJnZXQgfHwgKHQudGFyZ2V0ID0gaSksIG4gPSBudWxsID09IG4gPyBbdF0gOiB3Lm1ha2VBcnJheShuLCBbdF0pLCBwID0gdy5ldmVudC5zcGVjaWFsW21dIHx8IHt9LCBvIHx8ICFwLnRyaWdnZXIgfHwgITEgIT09IHAudHJpZ2dlci5hcHBseShpLCBuKSkpIHsgaWYgKCFvICYmICFwLm5vQnViYmxlICYmICF2KGkpKSB7IGZvciAobCA9IHAuZGVsZWdhdGVUeXBlIHx8IG0sIGx0LnRlc3QobCArIG0pIHx8ICh1ID0gdS5wYXJlbnROb2RlKTsgdTsgdSA9IHUucGFyZW50Tm9kZSl5LnB1c2godSksIHMgPSB1OyBzID09PSAoaS5vd25lckRvY3VtZW50IHx8IHIpICYmIHkucHVzaChzLmRlZmF1bHRWaWV3IHx8IHMucGFyZW50V2luZG93IHx8IGUpIH0gYSA9IDA7IHdoaWxlICgodSA9IHlbYSsrXSkgJiYgIXQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkgaCA9IHUsIHQudHlwZSA9IGEgPiAxID8gbCA6IHAuYmluZFR5cGUgfHwgbSwgKGQgPSAoSy5nZXQodSwgImV2ZW50cyIpIHx8IHt9KVt0LnR5cGVdICYmIEsuZ2V0KHUsICJoYW5kbGUiKSkgJiYgZC5hcHBseSh1LCBuKSwgKGQgPSBjICYmIHVbY10pICYmIGQuYXBwbHkgJiYgWSh1KSAmJiAodC5yZXN1bHQgPSBkLmFwcGx5KHUsIG4pLCAhMSA9PT0gdC5yZXN1bHQgJiYgdC5wcmV2ZW50RGVmYXVsdCgpKTsgcmV0dXJuIHQudHlwZSA9IG0sIG8gfHwgdC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSB8fCBwLl9kZWZhdWx0ICYmICExICE9PSBwLl9kZWZhdWx0LmFwcGx5KHkucG9wKCksIG4pIHx8ICFZKGkpIHx8IGMgJiYgZyhpW21dKSAmJiAhdihpKSAmJiAoKHMgPSBpW2NdKSAmJiAoaVtjXSA9IG51bGwpLCB3LmV2ZW50LnRyaWdnZXJlZCA9IG0sIHQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSAmJiBoLmFkZEV2ZW50TGlzdGVuZXIobSwgY3QpLCBpW21dKCksIHQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSAmJiBoLnJlbW92ZUV2ZW50TGlzdGVuZXIobSwgY3QpLCB3LmV2ZW50LnRyaWdnZXJlZCA9IHZvaWQgMCwgcyAmJiAoaVtjXSA9IHMpKSwgdC5yZXN1bHQgfSB9LCBzaW11bGF0ZTogZnVuY3Rpb24gKGUsIHQsIG4pIHsgdmFyIHIgPSB3LmV4dGVuZChuZXcgdy5FdmVudCwgbiwgeyB0eXBlOiBlLCBpc1NpbXVsYXRlZDogITAgfSk7IHcuZXZlbnQudHJpZ2dlcihyLCBudWxsLCB0KSB9IH0pLCB3LmZuLmV4dGVuZCh7IHRyaWdnZXI6IGZ1bmN0aW9uIChlLCB0KSB7IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyB3LmV2ZW50LnRyaWdnZXIoZSwgdCwgdGhpcykgfSkgfSwgdHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBuID0gdGhpc1swXTsgaWYgKG4pIHJldHVybiB3LmV2ZW50LnRyaWdnZXIoZSwgdCwgbiwgITApIH0gfSksIGguZm9jdXNpbiB8fCB3LmVhY2goeyBmb2N1czogImZvY3VzaW4iLCBibHVyOiAiZm9jdXNvdXQiIH0sIGZ1bmN0aW9uIChlLCB0KSB7IHZhciBuID0gZnVuY3Rpb24gKGUpIHsgdy5ldmVudC5zaW11bGF0ZSh0LCBlLnRhcmdldCwgdy5ldmVudC5maXgoZSkpIH07IHcuZXZlbnQuc3BlY2lhbFt0XSA9IHsgc2V0dXA6IGZ1bmN0aW9uICgpIHsgdmFyIHIgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcywgaSA9IEsuYWNjZXNzKHIsIHQpOyBpIHx8IHIuYWRkRXZlbnRMaXN0ZW5lcihlLCBuLCAhMCksIEsuYWNjZXNzKHIsIHQsIChpIHx8IDApICsgMSkgfSwgdGVhcmRvd246IGZ1bmN0aW9uICgpIHsgdmFyIHIgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcywgaSA9IEsuYWNjZXNzKHIsIHQpIC0gMTsgaSA/IEsuYWNjZXNzKHIsIHQsIGkpIDogKHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLCBuLCAhMCksIEsucmVtb3ZlKHIsIHQpKSB9IH0gfSk7IHZhciBmdCA9IC9cW1xdJC8sIGR0ID0gL1xyP1xuL2csIHB0ID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLCBodCA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTsgZnVuY3Rpb24gZ3QoZSwgdCwgbiwgcikgeyB2YXIgaTsgaWYgKEFycmF5LmlzQXJyYXkodCkpIHcuZWFjaCh0LCBmdW5jdGlvbiAodCwgaSkgeyBuIHx8IGZ0LnRlc3QoZSkgPyByKGUsIGkpIDogZ3QoZSArICJbIiArICgib2JqZWN0IiA9PSB0eXBlb2YgaSAmJiBudWxsICE9IGkgPyB0IDogIiIpICsgIl0iLCBpLCBuLCByKSB9KTsgZWxzZSBpZiAobiB8fCAib2JqZWN0IiAhPT0gYih0KSkgcihlLCB0KTsgZWxzZSBmb3IgKGkgaW4gdCkgZ3QoZSArICJbIiArIGkgKyAiXSIsIHRbaV0sIG4sIHIpIH0gdy5wYXJhbSA9IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBuLCByID0gW10sIGkgPSBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiA9IGcodCkgPyB0KCkgOiB0OyByW3IubGVuZ3RoXSA9IGVuY29kZVVSSUNvbXBvbmVudChlKSArICI9IiArIGVuY29kZVVSSUNvbXBvbmVudChudWxsID09IG4gPyAiIiA6IG4pIH07IGlmIChBcnJheS5pc0FycmF5KGUpIHx8IGUuanF1ZXJ5ICYmICF3LmlzUGxhaW5PYmplY3QoZSkpIHcuZWFjaChlLCBmdW5jdGlvbiAoKSB7IGkodGhpcy5uYW1lLCB0aGlzLnZhbHVlKSB9KTsgZWxzZSBmb3IgKG4gaW4gZSkgZ3QobiwgZVtuXSwgdCwgaSk7IHJldHVybiByLmpvaW4oIiYiKSB9LCB3LmZuLmV4dGVuZCh7IHNlcmlhbGl6ZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gdy5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpIH0sIHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoKSB7IHZhciBlID0gdy5wcm9wKHRoaXMsICJlbGVtZW50cyIpOyByZXR1cm4gZSA/IHcubWFrZUFycmF5KGUpIDogdGhpcyB9KS5maWx0ZXIoZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHRoaXMudHlwZTsgcmV0dXJuIHRoaXMubmFtZSAmJiAhdyh0aGlzKS5pcygiOmRpc2FibGVkIikgJiYgaHQudGVzdCh0aGlzLm5vZGVOYW1lKSAmJiAhcHQudGVzdChlKSAmJiAodGhpcy5jaGVja2VkIHx8ICFkZS50ZXN0KGUpKSB9KS5tYXAoZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4gPSB3KHRoaXMpLnZhbCgpOyByZXR1cm4gbnVsbCA9PSBuID8gbnVsbCA6IEFycmF5LmlzQXJyYXkobikgPyB3Lm1hcChuLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4geyBuYW1lOiB0Lm5hbWUsIHZhbHVlOiBlLnJlcGxhY2UoZHQsICJcclxuIikgfSB9KSA6IHsgbmFtZTogdC5uYW1lLCB2YWx1ZTogbi5yZXBsYWNlKGR0LCAiXHJcbiIpIH0gfSkuZ2V0KCkgfSB9KSwgdy5mbi5leHRlbmQoeyB3cmFwQWxsOiBmdW5jdGlvbiAoZSkgeyB2YXIgdDsgcmV0dXJuIHRoaXNbMF0gJiYgKGcoZSkgJiYgKGUgPSBlLmNhbGwodGhpc1swXSkpLCB0ID0gdyhlLCB0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSwgdGhpc1swXS5wYXJlbnROb2RlICYmIHQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLCB0Lm1hcChmdW5jdGlvbiAoKSB7IHZhciBlID0gdGhpczsgd2hpbGUgKGUuZmlyc3RFbGVtZW50Q2hpbGQpIGUgPSBlLmZpcnN0RWxlbWVudENoaWxkOyByZXR1cm4gZSB9KS5hcHBlbmQodGhpcykpLCB0aGlzIH0sIHdyYXBJbm5lcjogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGcoZSkgPyB0aGlzLmVhY2goZnVuY3Rpb24gKHQpIHsgdyh0aGlzKS53cmFwSW5uZXIoZS5jYWxsKHRoaXMsIHQpKSB9KSA6IHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IHZhciB0ID0gdyh0aGlzKSwgbiA9IHQuY29udGVudHMoKTsgbi5sZW5ndGggPyBuLndyYXBBbGwoZSkgOiB0LmFwcGVuZChlKSB9KSB9LCB3cmFwOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IGcoZSk7IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKG4pIHsgdyh0aGlzKS53cmFwQWxsKHQgPyBlLmNhbGwodGhpcywgbikgOiBlKSB9KSB9LCB1bndyYXA6IGZ1bmN0aW9uIChlKSB7IHJldHVybiB0aGlzLnBhcmVudChlKS5ub3QoImJvZHkiKS5lYWNoKGZ1bmN0aW9uICgpIHsgdyh0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpIH0pLCB0aGlzIH0gfSksIHcuZXhwci5wc2V1ZG9zLmhpZGRlbiA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiAhdy5leHByLnBzZXVkb3MudmlzaWJsZShlKSB9LCB3LmV4cHIucHNldWRvcy52aXNpYmxlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuICEhKGUub2Zmc2V0V2lkdGggfHwgZS5vZmZzZXRIZWlnaHQgfHwgZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCkgfSwgaC5jcmVhdGVIVE1MRG9jdW1lbnQgPSBmdW5jdGlvbiAoKSB7IHZhciBlID0gci5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpLmJvZHk7IHJldHVybiBlLmlubmVySFRNTCA9ICI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3JtPiIsIDIgPT09IGUuY2hpbGROb2Rlcy5sZW5ndGggfSgpLCB3LnBhcnNlSFRNTCA9IGZ1bmN0aW9uIChlLCB0LCBuKSB7IGlmICgic3RyaW5nIiAhPSB0eXBlb2YgZSkgcmV0dXJuIFtdOyAiYm9vbGVhbiIgPT0gdHlwZW9mIHQgJiYgKG4gPSB0LCB0ID0gITEpOyB2YXIgaSwgbywgYTsgcmV0dXJuIHQgfHwgKGguY3JlYXRlSFRNTERvY3VtZW50ID8gKChpID0gKHQgPSByLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikpLmNyZWF0ZUVsZW1lbnQoImJhc2UiKSkuaHJlZiA9IHIubG9jYXRpb24uaHJlZiwgdC5oZWFkLmFwcGVuZENoaWxkKGkpKSA6IHQgPSByKSwgbyA9IFMuZXhlYyhlKSwgYSA9ICFuICYmIFtdLCBvID8gW3QuY3JlYXRlRWxlbWVudChvWzFdKV0gOiAobyA9IGJlKFtlXSwgdCwgYSksIGEgJiYgYS5sZW5ndGggJiYgdyhhKS5yZW1vdmUoKSwgdy5tZXJnZShbXSwgby5jaGlsZE5vZGVzKSkgfSwgdy5vZmZzZXQgPSB7IHNldE9mZnNldDogZnVuY3Rpb24gKGUsIHQsIG4pIHsgdmFyIHIsIGksIG8sIGEsIHUsIHMsIGwsIGMgPSB3LmNzcyhlLCAicG9zaXRpb24iKSwgZiA9IHcoZSksIGQgPSB7fTsgInN0YXRpYyIgPT09IGMgJiYgKGUuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiKSwgdSA9IGYub2Zmc2V0KCksIG8gPSB3LmNzcyhlLCAidG9wIiksIHMgPSB3LmNzcyhlLCAibGVmdCIpLCAobCA9ICgiYWJzb2x1dGUiID09PSBjIHx8ICJmaXhlZCIgPT09IGMpICYmIChvICsgcykuaW5kZXhPZigiYXV0byIpID4gLTEpID8gKGEgPSAociA9IGYucG9zaXRpb24oKSkudG9wLCBpID0gci5sZWZ0KSA6IChhID0gcGFyc2VGbG9hdChvKSB8fCAwLCBpID0gcGFyc2VGbG9hdChzKSB8fCAwKSwgZyh0KSAmJiAodCA9IHQuY2FsbChlLCBuLCB3LmV4dGVuZCh7fSwgdSkpKSwgbnVsbCAhPSB0LnRvcCAmJiAoZC50b3AgPSB0LnRvcCAtIHUudG9wICsgYSksIG51bGwgIT0gdC5sZWZ0ICYmIChkLmxlZnQgPSB0LmxlZnQgLSB1LmxlZnQgKyBpKSwgInVzaW5nIiBpbiB0ID8gdC51c2luZy5jYWxsKGUsIGQpIDogZi5jc3MoZCkgfSB9LCB3LmZuLmV4dGVuZCh7IG9mZnNldDogZnVuY3Rpb24gKGUpIHsgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB2b2lkIDAgPT09IGUgPyB0aGlzIDogdGhpcy5lYWNoKGZ1bmN0aW9uICh0KSB7IHcub2Zmc2V0LnNldE9mZnNldCh0aGlzLCBlLCB0KSB9KTsgdmFyIHQsIG4sIHIgPSB0aGlzWzBdOyBpZiAocikgcmV0dXJuIHIuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggPyAodCA9IHIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIG4gPSByLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcsIHsgdG9wOiB0LnRvcCArIG4ucGFnZVlPZmZzZXQsIGxlZnQ6IHQubGVmdCArIG4ucGFnZVhPZmZzZXQgfSkgOiB7IHRvcDogMCwgbGVmdDogMCB9IH0sIHBvc2l0aW9uOiBmdW5jdGlvbiAoKSB7IGlmICh0aGlzWzBdKSB7IHZhciBlLCB0LCBuLCByID0gdGhpc1swXSwgaSA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07IGlmICgiZml4ZWQiID09PSB3LmNzcyhyLCAicG9zaXRpb24iKSkgdCA9IHIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IGVsc2UgeyB0ID0gdGhpcy5vZmZzZXQoKSwgbiA9IHIub3duZXJEb2N1bWVudCwgZSA9IHIub2Zmc2V0UGFyZW50IHx8IG4uZG9jdW1lbnRFbGVtZW50OyB3aGlsZSAoZSAmJiAoZSA9PT0gbi5ib2R5IHx8IGUgPT09IG4uZG9jdW1lbnRFbGVtZW50KSAmJiAic3RhdGljIiA9PT0gdy5jc3MoZSwgInBvc2l0aW9uIikpIGUgPSBlLnBhcmVudE5vZGU7IGUgJiYgZSAhPT0gciAmJiAxID09PSBlLm5vZGVUeXBlICYmICgoaSA9IHcoZSkub2Zmc2V0KCkpLnRvcCArPSB3LmNzcyhlLCAiYm9yZGVyVG9wV2lkdGgiLCAhMCksIGkubGVmdCArPSB3LmNzcyhlLCAiYm9yZGVyTGVmdFdpZHRoIiwgITApKSB9IHJldHVybiB7IHRvcDogdC50b3AgLSBpLnRvcCAtIHcuY3NzKHIsICJtYXJnaW5Ub3AiLCAhMCksIGxlZnQ6IHQubGVmdCAtIGkubGVmdCAtIHcuY3NzKHIsICJtYXJnaW5MZWZ0IiwgITApIH0gfSB9LCBvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0aGlzLm9mZnNldFBhcmVudDsgd2hpbGUgKGUgJiYgInN0YXRpYyIgPT09IHcuY3NzKGUsICJwb3NpdGlvbiIpKSBlID0gZS5vZmZzZXRQYXJlbnQ7IHJldHVybiBlIHx8IHhlIH0pIH0gfSksIHcuZWFjaCh7IHNjcm9sbExlZnQ6ICJwYWdlWE9mZnNldCIsIHNjcm9sbFRvcDogInBhZ2VZT2Zmc2V0IiB9LCBmdW5jdGlvbiAoZSwgdCkgeyB2YXIgbiA9ICJwYWdlWU9mZnNldCIgPT09IHQ7IHcuZm5bZV0gPSBmdW5jdGlvbiAocikgeyByZXR1cm4gXyh0aGlzLCBmdW5jdGlvbiAoZSwgciwgaSkgeyB2YXIgbzsgaWYgKHYoZSkgPyBvID0gZSA6IDkgPT09IGUubm9kZVR5cGUgJiYgKG8gPSBlLmRlZmF1bHRWaWV3KSwgdm9pZCAwID09PSBpKSByZXR1cm4gbyA/IG9bdF0gOiBlW3JdOyBvID8gby5zY3JvbGxUbyhuID8gby5wYWdlWE9mZnNldCA6IGksIG4gPyBpIDogby5wYWdlWU9mZnNldCkgOiBlW3JdID0gaSB9LCBlLCByLCBhcmd1bWVudHMubGVuZ3RoKSB9IH0pLCB3LmVhY2goWyJ0b3AiLCAibGVmdCJdLCBmdW5jdGlvbiAoZSwgdCkgeyB3LmNzc0hvb2tzW3RdID0gemUoaC5waXhlbFBvc2l0aW9uLCBmdW5jdGlvbiAoZSwgbikgeyBpZiAobikgcmV0dXJuIG4gPSBGZShlLCB0KSwgTWUudGVzdChuKSA/IHcoZSkucG9zaXRpb24oKVt0XSArICJweCIgOiBuIH0pIH0pLCB3LmVhY2goeyBIZWlnaHQ6ICJoZWlnaHQiLCBXaWR0aDogIndpZHRoIiB9LCBmdW5jdGlvbiAoZSwgdCkgeyB3LmVhY2goeyBwYWRkaW5nOiAiaW5uZXIiICsgZSwgY29udGVudDogdCwgIiI6ICJvdXRlciIgKyBlIH0sIGZ1bmN0aW9uIChuLCByKSB7IHcuZm5bcl0gPSBmdW5jdGlvbiAoaSwgbykgeyB2YXIgYSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKG4gfHwgImJvb2xlYW4iICE9IHR5cGVvZiBpKSwgdSA9IG4gfHwgKCEwID09PSBpIHx8ICEwID09PSBvID8gIm1hcmdpbiIgOiAiYm9yZGVyIik7IHJldHVybiBfKHRoaXMsIGZ1bmN0aW9uICh0LCBuLCBpKSB7IHZhciBvOyByZXR1cm4gdih0KSA/IDAgPT09IHIuaW5kZXhPZigib3V0ZXIiKSA/IHRbImlubmVyIiArIGVdIDogdC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIgKyBlXSA6IDkgPT09IHQubm9kZVR5cGUgPyAobyA9IHQuZG9jdW1lbnRFbGVtZW50LCBNYXRoLm1heCh0LmJvZHlbInNjcm9sbCIgKyBlXSwgb1sic2Nyb2xsIiArIGVdLCB0LmJvZHlbIm9mZnNldCIgKyBlXSwgb1sib2Zmc2V0IiArIGVdLCBvWyJjbGllbnQiICsgZV0pKSA6IHZvaWQgMCA9PT0gaSA/IHcuY3NzKHQsIG4sIHUpIDogdy5zdHlsZSh0LCBuLCBpLCB1KSB9LCB0LCBhID8gaSA6IHZvaWQgMCwgYSkgfSB9KSB9KSwgdy5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLCBmdW5jdGlvbiAoZSwgdCkgeyB3LmZuW3RdID0gZnVuY3Rpb24gKGUsIG4pIHsgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gdGhpcy5vbih0LCBudWxsLCBlLCBuKSA6IHRoaXMudHJpZ2dlcih0KSB9IH0pLCB3LmZuLmV4dGVuZCh7IGhvdmVyOiBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gdGhpcy5tb3VzZWVudGVyKGUpLm1vdXNlbGVhdmUodCB8fCBlKSB9IH0pLCB3LmZuLmV4dGVuZCh7IGJpbmQ6IGZ1bmN0aW9uIChlLCB0LCBuKSB7IHJldHVybiB0aGlzLm9uKGUsIG51bGwsIHQsIG4pIH0sIHVuYmluZDogZnVuY3Rpb24gKGUsIHQpIHsgcmV0dXJuIHRoaXMub2ZmKGUsIG51bGwsIHQpIH0sIGRlbGVnYXRlOiBmdW5jdGlvbiAoZSwgdCwgbiwgcikgeyByZXR1cm4gdGhpcy5vbih0LCBlLCBuLCByKSB9LCB1bmRlbGVnYXRlOiBmdW5jdGlvbiAoZSwgdCwgbikgeyByZXR1cm4gMSA9PT0gYXJndW1lbnRzLmxlbmd0aCA/IHRoaXMub2ZmKGUsICIqKiIpIDogdGhpcy5vZmYodCwgZSB8fCAiKioiLCBuKSB9IH0pLCB3LnByb3h5ID0gZnVuY3Rpb24gKGUsIHQpIHsgdmFyIG4sIHIsIGk7IGlmICgic3RyaW5nIiA9PSB0eXBlb2YgdCAmJiAobiA9IGVbdF0sIHQgPSBlLCBlID0gbiksIGcoZSkpIHJldHVybiByID0gby5jYWxsKGFyZ3VtZW50cywgMiksIGkgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBlLmFwcGx5KHQgfHwgdGhpcywgci5jb25jYXQoby5jYWxsKGFyZ3VtZW50cykpKSB9LCBpLmd1aWQgPSBlLmd1aWQgPSBlLmd1aWQgfHwgdy5ndWlkKysgLCBpIH0sIHcuaG9sZFJlYWR5ID0gZnVuY3Rpb24gKGUpIHsgZSA/IHcucmVhZHlXYWl0KysgOiB3LnJlYWR5KCEwKSB9LCB3LmlzQXJyYXkgPSBBcnJheS5pc0FycmF5LCB3LnBhcnNlSlNPTiA9IEpTT04ucGFyc2UsIHcubm9kZU5hbWUgPSBELCB3LmlzRnVuY3Rpb24gPSBnLCB3LmlzV2luZG93ID0gdiwgdy5jYW1lbENhc2UgPSBRLCB3LnR5cGUgPSBiLCB3Lm5vdyA9IERhdGUubm93LCB3LmlzTnVtZXJpYyA9IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gdy50eXBlKGUpOyByZXR1cm4gKCJudW1iZXIiID09PSB0IHx8ICJzdHJpbmciID09PSB0KSAmJiAhaXNOYU4oZSAtIHBhcnNlRmxvYXQoZSkpIH0sICJmdW5jdGlvbiIgPT0gdHlwZW9mIGRlZmluZSAmJiBkZWZpbmUuYW1kICYmIGRlZmluZSgianF1ZXJ5IiwgW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHcgfSk7IHZhciB2dCA9IGUualF1ZXJ5LCB5dCA9IGUuJDsgcmV0dXJuIHcubm9Db25mbGljdCA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiBlLiQgPT09IHcgJiYgKGUuJCA9IHl0KSwgdCAmJiBlLmpRdWVyeSA9PT0gdyAmJiAoZS5qUXVlcnkgPSB2dCksIHcgfSwgdCB8fCAoZS5qUXVlcnkgPSBlLiQgPSB3KSwgdyB9KTs=\"")
packr.PackJSONBytes("./assets/default", "wails.js", "\"Ly8gV2FpbHMgcnVudGltZSBKUwoKKGZ1bmN0aW9uICgpIHsKCXdpbmRvdy53YWlscyA9IHdpbmRvdy53YWlscyB8fCB7fTsKCXdpbmRvdy5iYWNrZW5kID0ge307CgoJLyoqKioqKioqKioqKioqKioqKiBVdGlsaXR5IEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKiovCgoJLy8gLS0tLS0tLS0tLS0tLS0gUmFuZG9tIC0tLS0tLS0tLS0tLS0tCgkvLyBBd2Vzb21lUmFuZG9tCglmdW5jdGlvbiBjcnlwdG9SYW5kb20oKSB7CgkJdmFyIGFycmF5ID0gbmV3IFVpbnQzMkFycmF5KDEpOwoJCXJldHVybiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSlbMF07Cgl9CgoJLy8gTE9MUmFuZG9tCglmdW5jdGlvbiBiYXNpY1JhbmRvbSgpIHsKCQlyZXR1cm4gTWF0aC5yYW5kb20oKSAqIDkwMDcxOTkyNTQ3NDA5OTE7Cgl9CgoJLy8gUGljayBvbmUgYmFzZWQgb24gYnJvd3NlciBjYXBhYmlsaXR5Cgl2YXIgcmFuZG9tRnVuYzsKCWlmICh3aW5kb3cuY3J5cHRvKSB7CgkJcmFuZG9tRnVuYyA9IGNyeXB0b1JhbmRvbTsKCX0gZWxzZSB7CgkJcmFuZG9tRnVuYyA9IGJhc2ljUmFuZG9tOwoJfQoKCS8vIC0tLS0tLS0tLS0tLS0tIElkZW50aWZpZXJzIC0tLS0tLS0tLS0tLS0tLQoKCWZ1bmN0aW9uIGlzVmFsaWRJZGVudGlmaWVyKG5hbWUpIHsKCQkvLyBEb24ndCB4c3MgeW91cnNlbGYgOi0pCgkJdHJ5IHsKCQkJbmV3IEZ1bmN0aW9uKCJ2YXIgIiArIG5hbWUpOwoJCQlyZXR1cm4gdHJ1ZQoJCX0gY2F0Y2ggKGUpIHsKCQkJcmV0dXJuIGZhbHNlCgkJfQoJfQoKCS8vIC0tLS0tLS0tLS0tLS0tIEpTIC0tLS0tLS0tLS0tLS0tLS0KCWZ1bmN0aW9uIGFkZFNjcmlwdChqcywgY2FsbGJhY2tJRCkgewoJCXZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKCQlzY3JpcHQudGV4dCA9IGpzOwoJCWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKCQl3aW5kb3cud2FpbHMuZXZlbnRzLmVtaXQoY2FsbGJhY2tJRCk7Cgl9CgoJLy8gLS0tLS0tLS0tLS0tLS0gQ1NTIC0tLS0tLS0tLS0tLS0tLQoJLy8gQWRhcHRlZCBmcm9tIHdlYnZpZXcgLSB0aGFua3MgenNlcmdlIQoJZnVuY3Rpb24gaW5qZWN0Q1NTKGNzcykgewoJCXZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKCQllbGVtLnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2NzcycpOwoJCWlmIChlbGVtLnN0eWxlU2hlZXQpIHsKCQkJZWxlbS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7CgkJfSBlbHNlIHsKCQkJZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTsKCQl9CgkJdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07CgkJaGVhZC5hcHBlbmRDaGlsZChlbGVtKQoJfQoKCS8qKioqKioqKioqKioqKioqKioqKioqKioqIEJpbmRpbmdzICoqKioqKioqKioqKioqKioqKioqKioqKiovCgoJdmFyIGJpbmRpbmdzQmFzZVBhdGggPSB3aW5kb3cuYmFja2VuZDsKCgkvLyBDcmVhdGVzIHRoZSBwYXRoIGdpdmVuIGluIHRoZSBiaW5kaW5ncyBwYXRoCglmdW5jdGlvbiBhZGRCaW5kaW5nUGF0aChwYXRoU2VjdGlvbnMpIHsKCQkvLyBTdGFydCBhdCB0aGUgYmFzZSBwYXRoCgkJdmFyIGN1cnJlbnRQYXRoID0gYmluZGluZ3NCYXNlUGF0aAoJCS8vIGZvciBlYWNoIHNlY3Rpb24gb2YgdGhlIGdpdmVuIHBhdGgKCQlmb3IgKHZhciBzZWN0aW9uIG9mIHBhdGhTZWN0aW9ucykgewoKCQkJLy8gSXMgc2VjdGlvbiBhIHZhbGlkIGphdmFzY3JpcHQgaWRlbnRpZmllcj8KCQkJaWYgKCFpc1ZhbGlkSWRlbnRpZmllcihzZWN0aW9uKSkgewoJCQkJdmFyIGVyck1lc3NhZ2UgPSBzZWN0aW9uICsgIiBpcyBub3QgYSB2YWxpZCBqYXZhc2NyaXB0IGlkZW50aWZpZXIuIgoJCQkJdmFyIGVyciA9IG5ldyBFcnJvcihlcnJNZXNzYWdlKQoJCQkJcmV0dXJuIFtudWxsLCBlcnJdCgkJCX0KCgkJCS8vIEFkZCBpZiBkb2Vzbid0IGV4aXN0CgkJCWlmICghY3VycmVudFBhdGhbc2VjdGlvbl0pIHsKCQkJCWN1cnJlbnRQYXRoW3NlY3Rpb25dID0ge30KCQkJfQoJCQkvLyB1cGRhdGUgY3VycmVudCBwYXRoIHRvIG5ldyBwYXRoCgkJCWN1cnJlbnRQYXRoID0gY3VycmVudFBhdGhbc2VjdGlvbl0KCQl9CgkJcmV0dXJuIFtjdXJyZW50UGF0aCwgbnVsbF0KCX0KCglmdW5jdGlvbiBuZXdCaW5kaW5nKGJpbmRpbmdOYW1lKSB7CgoJCS8vIEdldCBhbGwgdGhlIHNlY3Rpb25zIG9mIHRoZSBiaW5kaW5nCgkJdmFyIGJpbmRpbmdTZWN0aW9ucyA9IGJpbmRpbmdOYW1lLnNwbGl0KCcuJykuc3BsaWNlKDEpOwoKCQkvLyBHZXQgdGhlIGFjdHVhbCBmdW5jdGlvbi9tZXRob2QgY2FsbCBuYW1lCgkJdmFyIGNhbGxOYW1lID0gYmluZGluZ1NlY3Rpb25zLnBvcCgpOwoKCQlsZXQgcGF0aFRvQmluZGluZzsKCQlsZXQgZXJyOwoKCQkvLyBBZGQgcGF0aCB0byBiaW5kaW5nCgkJW3BhdGhUb0JpbmRpbmcsIGVycl0gPSBhZGRCaW5kaW5nUGF0aChiaW5kaW5nU2VjdGlvbnMpCgoJCWlmIChlcnIgIT0gbnVsbCkgewoJCQkvLyBXZSBuZWVkIHRvIHJldHVybiBhbiBlcnJvcgoJCQlyZXR1cm4gZXJyCgkJfQoKCQkvLyBBZGQgYmluZGluZyBjYWxsCgkJcGF0aFRvQmluZGluZ1tjYWxsTmFtZV0gPSBmdW5jdGlvbiAoKSB7CgoJCQkvLyBObyB0aW1lb3V0IGJ5IGRlZmF1bHQKCQkJdmFyIHRpbWVvdXQgPSAwOwoKCQkJLy8gQWN0dWFsIGZ1bmN0aW9uCgkJCWZ1bmN0aW9uIGR5bmFtaWMoKSB7CgkJCQl2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKQoJCQkJcmV0dXJuIGNhbGwoYmluZGluZ05hbWUsIGFyZ3MsIHRpbWVvdXQpOwoJCQl9CgoJCQkvLyBBbGxvdyBzZXR0aW5nIHRpbWVvdXQgdG8gZnVuY3Rpb24KCQkJZHluYW1pYy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gKG5ld1RpbWVvdXQpIHsKCQkJCXRpbWVvdXQgPSBuZXdUaW1lb3V0OwoJCQl9CgoJCQkvLyBBbGxvdyBnZXR0aW5nIHRpbWVvdXQgdG8gZnVuY3Rpb24KCQkJZHluYW1pYy5nZXRUaW1lb3V0ID0gZnVuY3Rpb24gKCkgewoJCQkJcmV0dXJuIHRpbWVvdXQ7CgkJCX0KCgkJCXJldHVybiBkeW5hbWljOwoJCX0oKTsKCX0KCgkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiogQ2FsbHMgKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoJdmFyIGNhbGxiYWNrcyA9IHt9OwoKCS8vIENhbGwgc2VuZHMgYSBtZXNzYWdlIHRvIHRoZSBiYWNrZW5kIHRvIGNhbGwgdGhlIGJpbmRpbmcgd2l0aCB0aGUKCS8vIGdpdmVuIGRhdGEuIEEgcHJvbWlzZSBpcyByZXR1cm5lZCBhbmQgd2lsbCBiZSBjb21wbGV0ZWQgd2hlbiB0aGUKCS8vIGJhY2tlbmQgcmVzcG9uZHMuIFRoaXMgd2lsbCBiZSByZXNvbHZlZCB3aGVuIHRoZSBjYWxsIHdhcyBzdWNjZXNzZnVsCgkvLyBvciByZWplY3RlZCBpZiBhbiBlcnJvciBpcyBwYXNzZWQgYmFjay4KCS8vIFRoZXJlIGlzIGEgdGltZW91dCBtZWNoYW5pc20uIElmIHRoZSBjYWxsIGRvZXNuJ3QgcmVzcG9uZCBpbiB0aGUgZ2l2ZW4KCS8vIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdGhlbiB0aGUgcHJvbWlzZSBpcyByZWplY3RlZC4KCglmdW5jdGlvbiBjYWxsKGJpbmRpbmdOYW1lLCBkYXRhLCB0aW1lb3V0KSB7CgoJCS8vIFRpbWVvdXQgaW5maW5pdGUgYnkgZGVmYXVsdAoJCWlmICh0aW1lb3V0ID09IG51bGwgfHwgdGltZW91dCA9PSB1bmRlZmluZWQpIHsKCQkJdGltZW91dCA9IDA7CgkJfQoKCQkvLyBDcmVhdGUgYSBwcm9taXNlCgkJcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKCgkJCS8vIENyZWF0ZSBhIHVuaXF1ZSBjYWxsYmFja0lECgkJCXZhciBjYWxsYmFja0lEOwoJCQlkbyB7CgkJCQljYWxsYmFja0lEID0gYmluZGluZ05hbWUgKyAiLSIgKyByYW5kb21GdW5jKCk7CgkJCX0gd2hpbGUgKGNhbGxiYWNrc1tjYWxsYmFja0lEXSkKCgkJCS8vIFNldCB0aW1lb3V0CgkJCWlmICh0aW1lb3V0ID4gMCkgewoJCQkJdmFyIHRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKCQkJCQlyZWplY3QoRXJyb3IoIkNhbGwgdG8gIiArIGJpbmRpbmdOYW1lICsgIiB0aW1lZCBvdXQuIFJlcXVlc3QgSUQ6ICIgKyBjYWxsYmFja0lEKSkKCQkJCX0sIHRpbWVvdXQpOwoJCQl9CgoJCQkvLyBTdG9yZSBjYWxsYmFjawoJCQljYWxsYmFja3NbY2FsbGJhY2tJRF0gPSB7CgkJCQl0aW1lb3V0SGFuZGxlOiB0aW1lb3V0SGFuZGxlLAoJCQkJcmVqZWN0OiByZWplY3QsCgkJCQlyZXNvbHZlOiByZXNvbHZlCgkJCX0KCQkJdHJ5IHsKCQkJCXZhciBwYXlsb2FkZGF0YSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpCgkJCQkvLyBDcmVhdGUgdGhlIG1lc3NhZ2UKCQkJCW1lc3NhZ2UgPSB7CgkJCQkJdHlwZTogImNhbGwiLAoJCQkJCWNhbGxiYWNraWQ6IGNhbGxiYWNrSUQsCgkJCQkJcGF5bG9hZDogewoJCQkJCQliaW5kaW5nTmFtZTogYmluZGluZ05hbWUsCgkJCQkJCWRhdGE6IHBheWxvYWRkYXRhLAoJCQkJCX0KCQkJCX0KCgkJCQkvLyBNYWtlIHRoZSBjYWxsCgkJCQl2YXIgcGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpCgkJCQlleHRlcm5hbC5pbnZva2UocGF5bG9hZCk7CgkJCX0gY2F0Y2ggKGUpIHsKCQkJCWNvbnNvbGUuZXJyb3IoZSkKCQkJfQoJCX0pCgl9CgoKCS8vIENhbGxlZCBieSB0aGUgYmFja2VuZCB0byByZXR1cm4gZGF0YSB0byBhIHByZXZpb3VzbHkgY2FsbGVkCgkvLyBiaW5kaW5nIGludm9jYXRpb24KCWZ1bmN0aW9uIGNhbGxiYWNrKGluY29taW5nTWVzc2FnZSkgewoJCS8vIFBhcnNlIHRoZSBtZXNzYWdlCgkJdmFyIG1lc3NhZ2UKCQl0cnkgewoJCQltZXNzYWdlID0gSlNPTi5wYXJzZShpbmNvbWluZ01lc3NhZ2UpCgkJfSBjYXRjaCAoZSkgewoJCQl3YWlscy5sb2cuZGVidWcoIkludmFsaWQgSlNPTiBwYXNzZWQgdG8gY2FsbGJhY2s6ICIgKyBlLm1lc3NhZ2UpCgkJCXdhaWxzLmxvZy5kZWJ1ZygiTWVzc2FnZTogIiArIGluY29taW5nTWVzc2FnZSkKCQkJcmV0dXJuCgkJfQoJCWNhbGxiYWNrSUQgPSBtZXNzYWdlLmNhbGxiYWNraWQKCQljYWxsYmFja0RhdGEgPSBjYWxsYmFja3NbY2FsbGJhY2tJRF0KCQlpZiAoIWNhbGxiYWNrRGF0YSkgewoJCQljb25zb2xlLmVycm9yKCJDYWxsYmFjayAnIiArIGNhbGxiYWNrSUQgKyAiJyBub3QgcmVnaXN0ZWQhISEiKQoJCQlyZXR1cm4KCQl9CgkJY2xlYXJUaW1lb3V0KGNhbGxiYWNrRGF0YS50aW1lb3V0SGFuZGxlKQoJCWRlbGV0ZSBjYWxsYmFja3NbY2FsbGJhY2tJRF0KCQlpZiAobWVzc2FnZS5lcnJvcikgewoJCQlyZXR1cm4gY2FsbGJhY2tEYXRhLnJlamVjdChtZXNzYWdlLmVycm9yKQoJCX0KCQlyZXR1cm4gY2FsbGJhY2tEYXRhLnJlc29sdmUobWVzc2FnZS5kYXRhKQoJfQoKCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiBFdmVudHMgKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoJdmFyIGV2ZW50TGlzdGVuZXJzID0ge307CgoJLy8gUmVnaXN0ZXJzIGV2ZW50IGxpc3RlbmVycwoJZnVuY3Rpb24gb24oZXZlbnROYW1lLCBjYWxsYmFjaykgewoJCWV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0gPSBldmVudExpc3RlbmVyc1tldmVudE5hbWVdIHx8IFtdOwoJCWV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0ucHVzaChjYWxsYmFjayk7Cgl9CgoJLy8gbm90aWZ5IGluZm9ybXMgZnJvbnRlbmQgbGlzdGVuZXJzIHRoYXQgYW4gZXZlbnQgd2FzIGVtaXR0ZWQgd2l0aCB0aGUgZ2l2ZW4gZGF0YQoJZnVuY3Rpb24gbm90aWZ5KGV2ZW50TmFtZSwgZGF0YSkgewoJCWlmIChldmVudExpc3RlbmVyc1tldmVudE5hbWVdKSB7CgkJCWV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0uZm9yRWFjaChlbGVtZW50ID0+IHsKCQkJCXZhciBwYXJzZWREYXRhID0gW10KCQkJCS8vIFBhcnNlIGRhdGEgaWYgd2UgaGF2ZSBpdAoJCQkJaWYgKGRhdGEpIHsKCQkJCQl0cnkgewoJCQkJCQlwYXJzZWREYXRhID0gSlNPTi5wYXJzZShkYXRhKTsKCQkJCQl9IGNhdGNoIChlKSB7CgkJCQkJCXdhaWxzLmxvZy5lcnJvcigiSW52YWxpZCBKU09OIGRhdGEgc2VudCB0byBub3RpZnkuIEV2ZW50IG5hbWUgPSAiICsgZXZlbnROYW1lKQoJCQkJCX0KCQkJCX0KCQkJCWVsZW1lbnQuYXBwbHkobnVsbCwgcGFyc2VkRGF0YSk7CgkJCX0pOwoJCX0KCX0KCgkvLyBlbWl0IGFuIGV2ZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGRhdGEKCWZ1bmN0aW9uIGVtaXQoZXZlbnROYW1lKSB7CgoJCS8vIENhbGN1bGF0ZSB0aGUgZGF0YQoJCXZhciBkYXRhID0gSlNPTi5zdHJpbmdpZnkoW10uc2xpY2UuYXBwbHkoYXJndW1lbnRzKS5zbGljZSgxKSk7CgoJCS8vIE5vdGlmeSBiYWNrZW5kCgkJbWVzc2FnZSA9IHsKCQkJdHlwZTogImV2ZW50IiwKCQkJcGF5bG9hZDogewoJCQkJbmFtZTogZXZlbnROYW1lLAoJCQkJZGF0YTogZGF0YSwKCQkJfQoJCX0KCQlleHRlcm5hbC5pbnZva2UoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpOwoJfQoKCS8vIEV2ZW50cyBjYWxscwoJd2luZG93LndhaWxzLmV2ZW50cyA9IHsgZW1pdDogZW1pdCwgb246IG9uIH07CgoJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgkvKioqKioqKioqKioqKioqKioqKioqKioqKiBMb2dnaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCS8vIFNlbmRzIGEgbG9nIG1lc3NhZ2UgdG8gdGhlIGJhY2tlbmQgd2l0aCB0aGUgZ2l2ZW4KCS8vIGxldmVsICsgbWVzc2FnZQoJZnVuY3Rpb24gc2VuZExvZ01lc3NhZ2UobGV2ZWwsIG1lc3NhZ2UpIHsKCgkJLy8gTG9nIE1lc3NhZ2UKCQltZXNzYWdlID0gewoJCQl0eXBlOiAibG9nIiwKCQkJcGF5bG9hZDogewoJCQkJbGV2ZWw6IGxldmVsLAoJCQkJbWVzc2FnZTogbWVzc2FnZSwKCQkJfQoJCX0KCQlleHRlcm5hbC5pbnZva2UoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpOwoJfQoKCWZ1bmN0aW9uIGxvZ0RlYnVnKG1lc3NhZ2UpIHsKCQlzZW5kTG9nTWVzc2FnZSgiZGVidWciLCBtZXNzYWdlKTsKCX0KCWZ1bmN0aW9uIGxvZ0luZm8obWVzc2FnZSkgewoJCXNlbmRMb2dNZXNzYWdlKCJpbmZvIiwgbWVzc2FnZSk7Cgl9CglmdW5jdGlvbiBsb2dXYXJuaW5nKG1lc3NhZ2UpIHsKCQlzZW5kTG9nTWVzc2FnZSgid2FybmluZyIsIG1lc3NhZ2UpOwoJfQoJZnVuY3Rpb24gbG9nRXJyb3IobWVzc2FnZSkgewoJCXNlbmRMb2dNZXNzYWdlKCJlcnJvciIsIG1lc3NhZ2UpOwoJfQoJZnVuY3Rpb24gbG9nRmF0YWwobWVzc2FnZSkgewoJCXNlbmRMb2dNZXNzYWdlKCJmYXRhbCIsIG1lc3NhZ2UpOwoJfQoKCXdpbmRvdy53YWlscy5sb2cgPSB7CgkJZGVidWc6IGxvZ0RlYnVnLAoJCWluZm86IGxvZ0luZm8sCgkJd2FybmluZzogbG9nV2FybmluZywKCQllcnJvcjogbG9nRXJyb3IsCgkJZmF0YWw6IGxvZ0ZhdGFsLAoJfTsKCgkvKioqKioqKioqKioqKioqKioqKioqKioqKiogRXhwb3J0cyAqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCXdpbmRvdy53YWlscy5fID0gewoJCW5ld0JpbmRpbmc6IG5ld0JpbmRpbmcsCgkJY2FsbGJhY2s6IGNhbGxiYWNrLAoJCW5vdGlmeTogbm90aWZ5LAoJCXNlbmRMb2dNZXNzYWdlOiBzZW5kTG9nTWVzc2FnZSwKCQljYWxsYmFja3M6IGNhbGxiYWNrcywKCQlpbmplY3RDU1M6IGluamVjdENTUywKCQlhZGRTY3JpcHQ6IGFkZFNjcmlwdCwKCX0KCgkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCS8vIE5vdGlmeSBiYWNrZW5kIHRoYXQgdGhlIHJ1bnRpbWUgaGFzIGZpbmlzaGVkIGxvYWRpbmcKCXdpbmRvdy53YWlscy5ldmVudHMuZW1pdCgid2FpbHM6bG9hZGVkIik7Cgp9KSgp\"")
}