Something went wrong. Try again.
Monorepo for Aesthetic.Computer aesthetic.computer
Something went wrong. Try again.
21 kB · 1 line
at main
12https://strudel.cc/#KCgpID0+IHsKLy8gQUMgT1MgTm90ZXBhdCB2b2ljZXMgZm9yIFN0cnVkZWwuIGh0dHBzOi8vYWVzdGhldGljLmNvbXB1dGVyCi8vIFJlY2lwZXM6IGZlZGFjL25hdGl2ZS9waWVjZXMvbm90ZXBhdC5tanMgKHRyaWFuZ2xlIFNoaWZ0IGFsdGVybmF0ZSBhbmQgY2hvcmRzKS4KLy8gVXNlcyBXZWIgQXVkaW8ncyBiYW5kLWxpbWl0ZWQgb3NjaWxsYXRvcnM7IHRoaXMgaXMgbm90IGEgcmVjb3JkaW5nIG9mIHRoZQovLyBuYXRpdmUgbWl4ZXIsIGl0cyBlY2hvLCBvciBpdHMgb3V0cHV0IHNhdHVyYXRpb24uCi8vIEdsYXNzLCBzd2FybSwgYmxvb20sIGFuZCBvcmJpdCBleHRlbmQgdGhvc2UgcmVjaXBlcyBhcyBuZXcgU3RydWRlbCBzb3VuZHMuCgpjb25zdCB2b2ljZXMgPSBPYmplY3QuZnJlZXplKHsKICBhY190cmlhbmdsZTogeyB3YXZlOiAndHJpYW5nbGUnLCByYXRpb3M6IFsxXSwgbGV2ZWxzOiBbMC41XSB9LAogIGFjX3RyaWFuZ2xlX2ZpZnRoOiB7IHdhdmU6ICd0cmlhbmdsZScsIHJhdGlvczogWzEsIDEuNV0sIGxldmVsczogWzAuNDIsIDAuMTJdIH0sCiAgYWNfc2luZTogeyB3YXZlOiAnc2luZScsIHJhdGlvczogWzFdLCBsZXZlbHM6IFswLjVdIH0sCiAgYWNfbWFqb3I6IHsgd2F2ZTogJ3NpbmUnLCByYXRpb3M6IFsxLCAyICoqICg0IC8gMTIpLCAyICoqICg3IC8gMTIpXSB9LAogIGFjX21pbm9yOiB7IHdhdmU6ICdzaW5lJywgcmF0aW9zOiBbMSwgMiAqKiAoMyAvIDEyKSwgMiAqKiAoNyAvIDEyKV0gfSwKICBhY19zdXMyOiB7IHdhdmU6ICdzaW5lJywgcmF0aW9zOiBbMSwgMiAqKiAoMiAvIDEyKSwgMiAqKiAoNyAvIDEyKV0gfSwKICBhY19nbGFzczogeyByaWNoOiAnZ2xhc3MnIH0sCiAgYWNfc3dhcm06IHsgcmljaDogJ3N3YXJtJyB9LAogIGFjX2Jsb29tOiB7IHJpY2g6ICdibG9vbScgfSwKICBhY19vcmJpdDogeyByaWNoOiAnb3JiaXQnIH0sCiAgYWNfbWFyaW1iYTogeyBtb2RhbDogdHJ1ZSB9LAogIGFjX3N0b25lOiB7IG1vZGFsOiAnc3RvbmUnIH0sCiAgYWNfd2F0ZXI6IHsgY2hpcnA6ICd3YXRlcicgfSwKICBhY19raWNrOiB7IGNoaXJwOiAna2ljaycgfSwKfSk7Cgpjb25zdCBib3VuZGVkID0gKHZhbHVlLCBmYWxsYmFjaywgbWluLCBtYXgpID0+IHsKICBjb25zdCBuID0gTnVtYmVyKHZhbHVlID8/IGZhbGxiYWNrKTsKICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG4pID8gTWF0aC5tYXgobWluLCBNYXRoLm1pbihtYXgsIG4pKSA6IGZhbGxiYWNrOwp9OwoKZnVuY3Rpb24gbWFyaW1iYVZvaWNlKGN0eCwgdGltZSwgdmFsdWUsIGZyZXF1ZW5jeSwgb25lbmRlZCwgc3RvbmUgPSBmYWxzZSkgewogIC8vIE1vZGFsIHJlZHVjdGlvbiBvZiBwb3AvbWFyaW1iYS9zeW50aHMvbWFyaW1iYS5tanMsIHJvc2V3b29kIHByZXNldC4KICAvLyBQcmVzZXJ2ZXMgaXRzIDE6NDo5LjIgcmF0aW9zIGFuZCBUNjAgZGVjYXkgcmVsYXRpb25zaGlwczsgb21pdHMgdGhlCiAgLy8gc291cmNlIHJlbmRlcmVyJ3MgbWFsbGV0IGNvbnZvbHV0aW9uIGFuZCByZXNvbmF0b3IgdHViZSBtb2RlbC4KICBjb25zdCBjb2xvciA9IGJvdW5kZWQodmFsdWUubiwgMC41LCAwLCAxKTsKICBjb25zdCBkdXJhdGlvbiA9IGJvdW5kZWQodmFsdWUuZHVyYXRpb24sIDAuNSwgMC4wMDEsIDM2MDApOwogIGNvbnN0IGF0dGFjayA9IE1hdGgubWluKGJvdW5kZWQodmFsdWUuYXR0YWNrLCAwLjAwMSwgMCwgNjApLCBkdXJhdGlvbik7CiAgY29uc3QgZGVjYXkgPSBNYXRoLm1pbihib3VuZGVkKHZhbHVlLmRlY2F5LCAwLCAwLCA2MCksIGR1cmF0aW9uIC0gYXR0YWNrKTsKICBjb25zdCBzdXN0YWluID0gYm91bmRlZCh2YWx1ZS5zdXN0YWluLCAxLCAwLCAxKTsKICBjb25zdCByZWxlYXNlID0gYm91bmRlZCh2YWx1ZS5yZWxlYXNlLCAwLjI1LCAwLCA2MCk7CiAgY29uc3QgZW5kID0gdGltZSArIGR1cmF0aW9uICsgcmVsZWFzZSArIDAuMDA1OwogIGNvbnN0IG5vZGUgPSBjdHguY3JlYXRlR2FpbigpOwogIG5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZShhdHRhY2sgPyAwIDogMSwgdGltZSk7CiAgaWYgKGF0dGFjaykgbm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKDEsIHRpbWUgKyBhdHRhY2spOwogIG5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShzdXN0YWluLCB0aW1lICsgYXR0YWNrICsgZGVjYXkpOwogIG5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZShzdXN0YWluLCB0aW1lICsgZHVyYXRpb24pOwogIG5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgwLCBlbmQgLSAwLjAwNSk7CiAgLy8gU3RvbmUgaXMgYSBkZXNpZ25lZCBpbmhhcm1vbmljIGJhciBzdXJyb2dhdGUsIG5vdCB0aGUgb2ZmbGluZSBGRU0gbW9kZWwuCiAgY29uc3QgcmF0aW9zID0gc3RvbmUgPyBbMSwgMi43NTYsIDUuNDA0XSA6IFsxLCA0LCA5LjJdOwogIGNvbnN0IHQ2MCA9IHN0b25lID8gWzIuOCwgMS4xLCAwLjM4XSA6IFsxLjYsIDAuMzIsIDAuMDldOwogIGNvbnN0IGxldmVscyA9IFsxLCAwLjMyICogKDAuMyArIGNvbG9yICogMS40KSwgMC4xICogKDAuMyArIGNvbG9yICogMS40KV07CiAgY29uc3Qgc2NhbGUgPSAwLjQ4IC8gbGV2ZWxzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApOwogIGNvbnN0IG9zY2lsbGF0b3JzID0gW10sIGdhaW5zID0gW107CiAgbGV0IHJlbWFpbmluZyA9IDMsIGZpbmlzaGVkID0gZmFsc2U7CiAgcmF0aW9zLmZvckVhY2goKHJhdGlvLCBpKSA9PiB7CiAgICBjb25zdCBvID0gY3R4LmNyZWF0ZU9zY2lsbGF0b3IoKSwgZyA9IGN0eC5jcmVhdGVHYWluKCk7CiAgICBvLmZyZXF1ZW5jeS52YWx1ZSA9IE1hdGgubWluKGZyZXF1ZW5jeSAqIHJhdGlvLCBjdHguc2FtcGxlUmF0ZSAqIDAuNDUpOwogICAgY29uc3QgYW1wbGl0dWRlID0gbGV2ZWxzW2ldICogc2NhbGU7CiAgICBjb25zdCByaW5nID0gdDYwW2ldICogKDAuOCArIGNvbG9yICogMC44KTsKICAgIGcuZ2Fpbi5zZXRWYWx1ZUF0VGltZShhbXBsaXR1ZGUsIHRpbWUpOwogICAgZy5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoYW1wbGl0dWRlICogMC4wMDEsIHRpbWUgKyByaW5nKTsKICAgIGcuZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAwMDAwMSwgdGltZSArIHJpbmcgKiAyKTsKICAgIG8uY29ubmVjdChnKS5jb25uZWN0KG5vZGUpOwogICAgby5vbmVuZGVkID0gKCkgPT4gewogICAgICBpZiAoLS1yZW1haW5pbmcgPT09IDAgJiYgIWZpbmlzaGVkKSB7CiAgICAgICAgZmluaXNoZWQgPSB0cnVlOwogICAgICAgIFsuLi5vc2NpbGxhdG9ycywgLi4uZ2FpbnMsIG5vZGVdLmZvckVhY2gobiA9PiBuLmRpc2Nvbm5lY3QoKSk7CiAgICAgICAgb25lbmRlZD8uKCk7CiAgICAgIH0KICAgIH07CiAgICBvc2NpbGxhdG9ycy5wdXNoKG8pOyBnYWlucy5wdXNoKGcpOwogICAgby5zdGFydCh0aW1lKTsgby5zdG9wKGVuZCk7CiAgfSk7CiAgcmV0dXJuIHsgbm9kZSwgc3RvcChhdCkgewogICAgaWYgKGZpbmlzaGVkKSByZXR1cm47CiAgICBjb25zdCBzdG9wQXQgPSBNYXRoLm1heChjdHguY3VycmVudFRpbWUsIE1hdGgubWluKGF0LCBlbmQpKTsKICAgIG5vZGUuZ2Fpbi5jYW5jZWxBbmRIb2xkQXRUaW1lKHN0b3BBdCk7CiAgICBub2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoMCwgc3RvcEF0ICsgMC4wMDUpOwogICAgb3NjaWxsYXRvcnMuZm9yRWFjaChvID0+IG8uc3RvcChNYXRoLm1pbihlbmQsIHN0b3BBdCArIDAuMDA1KSkpOwogIH0gfTsKfQoKZnVuY3Rpb24gY2hpcnBWb2ljZShjdHgsIHRpbWUsIHZhbHVlLCBmcmVxdWVuY3ksIGtpbmQsIG9uZW5kZWQpIHsKICBjb25zdCBjb2xvciA9IGJvdW5kZWQodmFsdWUubiwgMC41LCAwLCAxKTsKICBjb25zdCBraWNrID0ga2luZCA9PT0gJ2tpY2snOwogIGNvbnN0IGR1cmF0aW9uID0gYm91bmRlZCh2YWx1ZS5kdXJhdGlvbiwgMC4yLCAwLjAwMSwgMzYwMCk7CiAgY29uc3QgcmVsZWFzZSA9IGJvdW5kZWQodmFsdWUucmVsZWFzZSwgMC4wOCwgMCwgNjApOwogIGNvbnN0IGVuZCA9IHRpbWUgKyBkdXJhdGlvbiArIHJlbGVhc2UgKyAwLjAwNTsKICBjb25zdCBub2RlID0gY3R4LmNyZWF0ZUdhaW4oKSwgb3NjaWxsYXRvciA9IGN0eC5jcmVhdGVPc2NpbGxhdG9yKCk7CiAgY29uc3QgYXR0YWNrID0gTWF0aC5taW4oYm91bmRlZCh2YWx1ZS5hdHRhY2ssIGtpY2sgPyAwLjAwNyA6IDAuMDAzLCAwLCA2MCksIGR1cmF0aW9uKTsKICBjb25zdCByaW5nID0ga2ljayA/IDAuMTIgKyBjb2xvciAqIDAuMiA6IDAuMDU1ICsgY29sb3IgKiAwLjE7CiAgbm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKGF0dGFjayA/IDAgOiAwLjUsIHRpbWUpOwogIGlmIChhdHRhY2spIG5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgwLjUsIHRpbWUgKyBhdHRhY2spOwogIG5vZGUuZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAwMDEsIE1hdGgubWluKGVuZCAtIDAuMDA1LCB0aW1lICsgYXR0YWNrICsgcmluZykpOwogIG5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCBlbmQpOwogIG9zY2lsbGF0b3IuZnJlcXVlbmN5LnNldFZhbHVlQXRUaW1lKGtpY2sgPyAxMjYgKyBjb2xvciAqIDIwIDogZnJlcXVlbmN5ICogMC41NSwgdGltZSk7CiAgb3NjaWxsYXRvci5mcmVxdWVuY3kuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZShraWNrID8gNDMgOiBmcmVxdWVuY3ksCiAgICB0aW1lICsgTWF0aC5taW4oZHVyYXRpb24sIGtpY2sgPyAwLjA1NSArIGNvbG9yICogMC4wNCA6IDAuMDcpKTsKICBvc2NpbGxhdG9yLmNvbm5lY3Qobm9kZSk7CiAgbGV0IGZpbmlzaGVkID0gZmFsc2U7CiAgb3NjaWxsYXRvci5vbmVuZGVkID0gKCkgPT4gewogICAgaWYgKGZpbmlzaGVkKSByZXR1cm47CiAgICBmaW5pc2hlZCA9IHRydWU7IG9zY2lsbGF0b3IuZGlzY29ubmVjdCgpOyBub2RlLmRpc2Nvbm5lY3QoKTsgb25lbmRlZD8uKCk7CiAgfTsKICBvc2NpbGxhdG9yLnN0YXJ0KHRpbWUpOyBvc2NpbGxhdG9yLnN0b3AoZW5kKTsKICByZXR1cm4geyBub2RlLCBzdG9wKGF0KSB7CiAgICBpZiAoZmluaXNoZWQpIHJldHVybjsKICAgIGNvbnN0IHN0b3BBdCA9IE1hdGgubWF4KGN0eC5jdXJyZW50VGltZSwgTWF0aC5taW4oYXQsIGVuZCkpOwogICAgbm9kZS5nYWluLmNhbmNlbEFuZEhvbGRBdFRpbWUoc3RvcEF0KTsKICAgIG5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgwLCBzdG9wQXQgKyAwLjAwNSk7CiAgICBvc2NpbGxhdG9yLnN0b3AoTWF0aC5taW4oZW5kLCBzdG9wQXQgKyAwLjAwNSkpOwogIH0gfTsKfQoKZnVuY3Rpb24gcmljaFZvaWNlKGN0eCwgdGltZSwgdmFsdWUsIGZyZXF1ZW5jeSwga2luZCwgb25lbmRlZCwgY3BzID0gMC41KSB7CiAgLy8gbiBpcyBhIDAuLjEgdGltYnJlIG1hY3JvOiBGTSBkZXB0aCwgZGV0dW5lLCBhbmQgZmlsdGVyIG1vdGlvbi4KICBjb25zdCBjb2xvciA9IGJvdW5kZWQodmFsdWUubiwgMC41LCAwLCAxKTsKICBjb25zdCBkdXJhdGlvbiA9IGJvdW5kZWQodmFsdWUuZHVyYXRpb24sIDAuNSwgMC4wMDEsIDM2MDApOwogIGNvbnN0IGF0dGFjayA9IE1hdGgubWluKGJvdW5kZWQodmFsdWUuYXR0YWNrLCBraW5kID09PSAnYmxvb20nID8gMC4xOCA6IDAuMDA2LCAwLCA2MCksIGR1cmF0aW9uKTsKICBjb25zdCBkZWNheSA9IE1hdGgubWluKGJvdW5kZWQodmFsdWUuZGVjYXksIGtpbmQgPT09ICdnbGFzcycgPyAwLjMgOiAwLjEsIDAsIDYwKSwgZHVyYXRpb24gLSBhdHRhY2spOwogIGNvbnN0IHN1c3RhaW4gPSBib3VuZGVkKHZhbHVlLnN1c3RhaW4sIGtpbmQgPT09ICdnbGFzcycgPyAwLjI0IDogMC44LCAwLCAxKTsKICBjb25zdCByZWxlYXNlID0gYm91bmRlZCh2YWx1ZS5yZWxlYXNlLCBraW5kID09PSAnZ2xhc3MnID8gMC4zNSA6IDAuNiwgMCwgNjApOwogIGNvbnN0IGhvbGRFbmQgPSB0aW1lICsgZHVyYXRpb247CiAgY29uc3QgZW5kID0gaG9sZEVuZCArIHJlbGVhc2UgKyAwLjAwNTsKICBjb25zdCBub2RlID0gY3R4LmNyZWF0ZUdhaW4oKTsKICBjb25zdCBhbGxOb2RlcyA9IFtub2RlXSwgb3NjaWxsYXRvcnMgPSBbXTsKICBjb25zdCBrZWVwID0gb2JqZWN0ID0+IHsgYWxsTm9kZXMucHVzaChvYmplY3QpOyByZXR1cm4gb2JqZWN0OyB9OwogIGNvbnN0IGdhaW4gPSBsZXZlbCA9PiB7CiAgICBjb25zdCBnID0ga2VlcChjdHguY3JlYXRlR2FpbigpKTsgZy5nYWluLnZhbHVlID0gbGV2ZWw7IHJldHVybiBnOwogIH07CiAgY29uc3Qgb3NjID0gKHR5cGUsIGh6KSA9PiB7CiAgICBjb25zdCBvID0ga2VlcChjdHguY3JlYXRlT3NjaWxsYXRvcigpKTsKICAgIG8udHlwZSA9IHR5cGU7CiAgICBvLmZyZXF1ZW5jeS52YWx1ZSA9IE1hdGgubWF4KDAuMDUsIE1hdGgubWluKGh6LCBjdHguc2FtcGxlUmF0ZSAqIDAuNCkpOwogICAgb3NjaWxsYXRvcnMucHVzaChvKTsgcmV0dXJuIG87CiAgfTsKICBjb25zdCBmaWx0ZXIgPSBrZWVwKGN0eC5jcmVhdGVCaXF1YWRGaWx0ZXIoKSk7CiAgZmlsdGVyLnR5cGUgPSAnbG93cGFzcyc7CiAgZmlsdGVyLlEudmFsdWUgPSAwLjU7CiAgY29uc3QgY3V0b2ZmID0gTWF0aC5taW4oY3R4LnNhbXBsZVJhdGUgKiAwLjQsIGZyZXF1ZW5jeSAqICg1ICsgY29sb3IgKiAxNSkpOwogIGZpbHRlci5mcmVxdWVuY3kuc2V0VmFsdWVBdFRpbWUoY3V0b2ZmLCB0aW1lKTsKICBmaWx0ZXIuZnJlcXVlbmN5LmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoCiAgICBNYXRoLm1heCg2MCwgY3V0b2ZmICogKGtpbmQgPT09ICdnbGFzcycgPyAwLjI0IDogMC41NSkpLCBob2xkRW5kLAogICk7CiAgZmlsdGVyLmNvbm5lY3Qobm9kZSk7CiAgbm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKGF0dGFjayA/IDAgOiAxLCB0aW1lKTsKICBpZiAoYXR0YWNrKSBub2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoMSwgdGltZSArIGF0dGFjayk7CiAgbm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHN1c3RhaW4sIHRpbWUgKyBhdHRhY2sgKyBkZWNheSk7CiAgbm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKHN1c3RhaW4sIGhvbGRFbmQpOwogIG5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgwLCBob2xkRW5kICsgcmVsZWFzZSk7CgogIGNvbnN0IGxheWVycyA9IGtpbmQgPT09ICdnbGFzcycKICAgID8gW1sxLCAwLjI0LCAnc2luZScsIDBdLCBbMS41LCAwLjEwLCAndHJpYW5nbGUnLCAwXSwgWzIuNzU2LCAwLjA3LCAnc2luZScsIDBdXQogICAgOiBraW5kID09PSAnc3dhcm0nCiAgICAgID8gW1sxLCAwLjEyLCAnc2F3dG9vdGgnLCAtMV0sIFsxLCAwLjEyLCAnc2F3dG9vdGgnLCAxXSwgWzEuNSwgMC4wOSwgJ3RyaWFuZ2xlJywgMC40XSwgWzAuNSwgMC4xMCwgJ3NpbmUnLCAwXV0KICAgICAgOiBbWzEsIDAuMTUsICd0cmlhbmdsZScsIC0xXSwgWzEsIDAuMTIsICd0cmlhbmdsZScsIDFdLCBbMS41LCAwLjA5LCAnc2luZScsIC0wLjVdLCBbMiwgMC4wNiwgJ3NpbmUnLCAwLjVdXTsKICBsYXllcnMuZm9yRWFjaCgoW3JhdGlvLCBsZXZlbCwgd2F2ZSwgc3ByZWFkXSwgaSkgPT4gewogICAgY29uc3QgY2FycmllciA9IG9zYyh3YXZlLCBmcmVxdWVuY3kgKiByYXRpbyk7CiAgICBjYXJyaWVyLmRldHVuZS52YWx1ZSA9IHNwcmVhZCAqICg0ICsgY29sb3IgKiAxOCk7CiAgICBjb25zdCBwYW4gPSBrZWVwKGN0eC5jcmVhdGVTdGVyZW9QYW5uZXIoKSk7CiAgICBwYW4ucGFuLnZhbHVlID0gc3ByZWFkICogMC40NTsKICAgIGNvbnN0IHB1bHNlID0gZ2FpbihraW5kID09PSAnb3JiaXQnID8gMC43MiA6IDEpOwogICAgY2Fycmllci5jb25uZWN0KGdhaW4obGV2ZWwpKS5jb25uZWN0KHB1bHNlKS5jb25uZWN0KHBhbikuY29ubmVjdChmaWx0ZXIpOwogICAgaWYgKGtpbmQgPT09ICdvcmJpdCcpIHsKICAgICAgLy8gQW1wbGl0dWRlIHB1bHNlcyBsb2NrZWQgdG8gdGhlIHNjaGVkdWxlcidzIGN5Y2xlIHJhdGUuCiAgICAgIG9zYygnc2luZScsIGJvdW5kZWQoY3BzLCAwLjUsIDAuMDEsIDIwKSAqIChpICsgMikpCiAgICAgICAgLmNvbm5lY3QoZ2FpbigwLjI4KSkuY29ubmVjdChwdWxzZS5nYWluKTsKICAgIH0KICAgIGlmIChraW5kICE9PSAnc3dhcm0nKSB7CiAgICAgIGNvbnN0IG1vZCA9IG9zYygnc2luZScsIGZyZXF1ZW5jeSAqIHJhdGlvICogKGtpbmQgPT09ICdnbGFzcycgPyAyLjc1NiA6IDEuNSkpOwogICAgICBjb25zdCBkZXB0aCA9IGdhaW4oZnJlcXVlbmN5ICogcmF0aW8gKiAoMC4wOCArIGNvbG9yICogKGtpbmQgPT09ICdnbGFzcycgPyAyLjQgOiAwLjYpKSk7CiAgICAgIG1vZC5jb25uZWN0KGRlcHRoKS5jb25uZWN0KGNhcnJpZXIuZnJlcXVlbmN5KTsKICAgICAgZGVwdGguZ2Fpbi5zZXRWYWx1ZUF0VGltZShkZXB0aC5nYWluLnZhbHVlLCB0aW1lKTsKICAgICAgZGVwdGguZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKAogICAgICAgIE1hdGgubWF4KDAuMDAxLCBkZXB0aC5nYWluLnZhbHVlICogMC4wOCksIHRpbWUgKyBNYXRoLm1pbihkdXJhdGlvbiwgMC4zICsgY29sb3IpLAogICAgICApOwogICAgICBpZiAoa2luZCA9PT0gJ29yYml0JykgewogICAgICAgIC8vIENhcnJpZXIgLT4gZGVsYXkgLT4gbW9kdWxhdG9yIHBpdGNoIC0+IGNhcnJpZXIgcGl0Y2guIFRoZSBkZWxheQogICAgICAgIC8vIG1ha2VzIHRoZSBmZWVkYmFjayBjeWNsZSB2YWxpZCwgd2hpbGUgc2luZSBvdXRwdXRzIGJvdW5kIGl0cyBsZXZlbC4KICAgICAgICBjb25zdCBmZWVkYmFjayA9IGtlZXAoY3R4LmNyZWF0ZURlbGF5KDAuMDUpKTsKICAgICAgICBmZWVkYmFjay5kZWxheVRpbWUudmFsdWUgPSAwLjAwNCArIGkgKiAwLjAwMjsKICAgICAgICBjYXJyaWVyLmNvbm5lY3QoZmVlZGJhY2spLmNvbm5lY3QoZ2FpbihmcmVxdWVuY3kgKiAoMC4xNSArIGNvbG9yICogMS40KSkpCiAgICAgICAgICAuY29ubmVjdChtb2QuZnJlcXVlbmN5KTsKICAgICAgICBjb25zdCBzaGFwZSA9IG9zYygnc2luZScsIDAuMTMgKyBpICogMC4wNyk7CiAgICAgICAgc2hhcGUuY29ubmVjdChnYWluKGZyZXF1ZW5jeSAqIHJhdGlvICogY29sb3IgKiAwLjI0KSkuY29ubmVjdChkZXB0aC5nYWluKTsKICAgICAgfQogICAgfQogICAgY29uc3QgZHJpZnQgPSBvc2MoJ3NpbmUnLCAwLjE5ICsgaSAqIDAuMTEgKyBjb2xvciAqIDAuMzUpOwogICAgZHJpZnQuY29ubmVjdChnYWluKDIgKyBjb2xvciAqIDYpKS5jb25uZWN0KGNhcnJpZXIuZGV0dW5lKTsKICAgIGlmIChraW5kID09PSAnYmxvb20nIHx8IGtpbmQgPT09ICdvcmJpdCcpIGRyaWZ0LmNvbm5lY3QoZ2FpbigwLjMpKS5jb25uZWN0KHBhbi5wYW4pOwogIH0pOwogIGxldCByZW1haW5pbmcgPSBvc2NpbGxhdG9ycy5sZW5ndGgsIGZpbmlzaGVkID0gZmFsc2U7CiAgZm9yIChjb25zdCBvc2NpbGxhdG9yIG9mIG9zY2lsbGF0b3JzKSB7CiAgICBvc2NpbGxhdG9yLm9uZW5kZWQgPSAoKSA9PiB7CiAgICAgIGlmICgtLXJlbWFpbmluZyA9PT0gMCAmJiAhZmluaXNoZWQpIHsKICAgICAgICBmaW5pc2hlZCA9IHRydWU7CiAgICAgICAgYWxsTm9kZXMuZm9yRWFjaChuID0+IG4uZGlzY29ubmVjdCgpKTsKICAgICAgICBvbmVuZGVkPy4oKTsKICAgICAgfQogICAgfTsKICAgIG9zY2lsbGF0b3Iuc3RhcnQodGltZSk7CiAgICBvc2NpbGxhdG9yLnN0b3AoZW5kKTsKICB9CiAgcmV0dXJuIHsKICAgIG5vZGUsCiAgICBzdG9wKGF0KSB7CiAgICAgIGlmIChmaW5pc2hlZCkgcmV0dXJuOwogICAgICBjb25zdCBzdG9wQXQgPSBNYXRoLm1heChjdHguY3VycmVudFRpbWUsIE1hdGgubWluKGF0LCBlbmQpKTsKICAgICAgbm9kZS5nYWluLmNhbmNlbEFuZEhvbGRBdFRpbWUoc3RvcEF0KTsKICAgICAgbm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKDAsIHN0b3BBdCArIDAuMDA1KTsKICAgICAgZm9yIChjb25zdCBvIG9mIG9zY2lsbGF0b3JzKSBvLnN0b3AoTWF0aC5taW4oZW5kLCBzdG9wQXQgKyAwLjAwNSkpOwogICAgfSwKICB9Owp9CgpmdW5jdGlvbiByZWdpc3Rlck5vdGVwYXQoYXBpID0gZ2xvYmFsVGhpcykgewogIGNvbnN0IHsgcmVnaXN0ZXJTb3VuZCwgZ2V0QXVkaW9Db250ZXh0LCBnZXRGcmVxdWVuY3lGcm9tVmFsdWUgfSA9IGFwaTsKICBpZiAoIVtyZWdpc3RlclNvdW5kLCBnZXRBdWRpb0NvbnRleHQsIGdldEZyZXF1ZW5jeUZyb21WYWx1ZV0uZXZlcnkoZm4gPT4gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSkgewogICAgdGhyb3cgbmV3IEVycm9yKCdJbXBvcnQgTm90ZXBhdCBpbnNpZGUgU3RydWRlbCwgb3IgcGFzcyBpdHMgYXVkaW8gQVBJIHRvIHJlZ2lzdGVyTm90ZXBhdCgpLicpOwogIH0KICBmb3IgKGNvbnN0IFtuYW1lLCByZWNpcGVdIG9mIE9iamVjdC5lbnRyaWVzKHZvaWNlcykpIHsKICAgIHJlZ2lzdGVyU291bmQobmFtZSwgKHRpbWUsIHZhbHVlLCBvbmVuZGVkLCBjcHMpID0+IHsKICAgICAgY29uc3QgY3R4ID0gZ2V0QXVkaW9Db250ZXh0KCk7CiAgICAgIGNvbnN0IGZyZXF1ZW5jeSA9IGJvdW5kZWQoZ2V0RnJlcXVlbmN5RnJvbVZhbHVlKHZhbHVlKSwgMjIwLCAxLCBjdHguc2FtcGxlUmF0ZSAvIDIgLSAxKTsKICAgICAgaWYgKHJlY2lwZS5tb2RhbCkgcmV0dXJuIG1hcmltYmFWb2ljZShjdHgsIHRpbWUsIHZhbHVlLCBmcmVxdWVuY3ksIG9uZW5kZWQsIHJlY2lwZS5tb2RhbCA9PT0gJ3N0b25lJyk7CiAgICAgIGlmIChyZWNpcGUuY2hpcnApIHJldHVybiBjaGlycFZvaWNlKGN0eCwgdGltZSwgdmFsdWUsIGZyZXF1ZW5jeSwgcmVjaXBlLmNoaXJwLCBvbmVuZGVkKTsKICAgICAgaWYgKHJlY2lwZS5yaWNoKSByZXR1cm4gcmljaFZvaWNlKGN0eCwgdGltZSwgdmFsdWUsIGZyZXF1ZW5jeSwgcmVjaXBlLnJpY2gsIG9uZW5kZWQsIGNwcyk7CiAgICAgIGNvbnN0IGR1cmF0aW9uID0gYm91bmRlZCh2YWx1ZS5kdXJhdGlvbiwgMC41LCAwLjAwMSwgMzYwMCk7CiAgICAgIGNvbnN0IGF0dGFjayA9IE1hdGgubWluKGJvdW5kZWQodmFsdWUuYXR0YWNrLCAwLjAyLCAwLCA2MCksIGR1cmF0aW9uKTsKICAgICAgY29uc3QgZGVjYXkgPSBNYXRoLm1pbihib3VuZGVkKHZhbHVlLmRlY2F5LCAwLCAwLCA2MCksIGR1cmF0aW9uIC0gYXR0YWNrKTsKICAgICAgY29uc3Qgc3VzdGFpbiA9IGJvdW5kZWQodmFsdWUuc3VzdGFpbiwgMSwgMCwgMSk7CiAgICAgIGNvbnN0IHJlbGVhc2UgPSBib3VuZGVkKHZhbHVlLnJlbGVhc2UsIDAuMSwgMCwgNjApOwogICAgICBjb25zdCBob2xkRW5kID0gdGltZSArIGR1cmF0aW9uOwogICAgICBjb25zdCBlbmQgPSBob2xkRW5kICsgcmVsZWFzZSArIDAuMDA1OwogICAgICBjb25zdCBub2RlID0gY3R4LmNyZWF0ZUdhaW4oKTsKICAgICAgbm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKGF0dGFjayA/IDAgOiAxLCB0aW1lKTsKICAgICAgaWYgKGF0dGFjaykgbm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKDEsIHRpbWUgKyBhdHRhY2spOwogICAgICBub2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoc3VzdGFpbiwgdGltZSArIGF0dGFjayArIGRlY2F5KTsKICAgICAgbm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKHN1c3RhaW4sIGhvbGRFbmQpOwogICAgICBub2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoMCwgaG9sZEVuZCArIHJlbGVhc2UpOwoKICAgICAgY29uc3Qgb3NjaWxsYXRvcnMgPSBbXTsKICAgICAgbGV0IHJlbWFpbmluZyA9IHJlY2lwZS5yYXRpb3MubGVuZ3RoOwogICAgICBsZXQgZmluaXNoZWQgPSBmYWxzZTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWNpcGUucmF0aW9zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3Qgb3NjaWxsYXRvciA9IGN0eC5jcmVhdGVPc2NpbGxhdG9yKCk7CiAgICAgICAgb3NjaWxsYXRvci50eXBlID0gcmVjaXBlLndhdmU7CiAgICAgICAgb3NjaWxsYXRvci5mcmVxdWVuY3kudmFsdWUgPSBNYXRoLm1pbihmcmVxdWVuY3kgKiByZWNpcGUucmF0aW9zW2ldLCBjdHguc2FtcGxlUmF0ZSAvIDIgLSAxKTsKICAgICAgICBjb25zdCBnYWluID0gY3R4LmNyZWF0ZUdhaW4oKTsKICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgbmF0aXZlIHRyaWFuZ2xlIGxheWVyIGJhbGFuY2UuIENob3JkcyBzaGFyZSBoZWFkcm9vbS4KICAgICAgICBnYWluLmdhaW4udmFsdWUgPSAocmVjaXBlLmxldmVscz8uW2ldID8/IDAuNSAvIHJlY2lwZS5yYXRpb3MubGVuZ3RoKQogICAgICAgICAgKiAocmVjaXBlLndhdmUgPT09ICd0cmlhbmdsZScgPyAtMSA6IDEpOwogICAgICAgIG9zY2lsbGF0b3IuY29ubmVjdChnYWluKS5jb25uZWN0KG5vZGUpOwogICAgICAgIG9zY2lsbGF0b3Iub25lbmRlZCA9ICgpID0+IHsKICAgICAgICAgIG9zY2lsbGF0b3IuZGlzY29ubmVjdCgpOwogICAgICAgICAgZ2Fpbi5kaXNjb25uZWN0KCk7CiAgICAgICAgICBpZiAoLS1yZW1haW5pbmcgPT09IDAgJiYgIWZpbmlzaGVkKSB7CiAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTsKICAgICAgICAgICAgbm9kZS5kaXNjb25uZWN0KCk7CiAgICAgICAgICAgIG9uZW5kZWQ/LigpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgb3NjaWxsYXRvci5zdGFydCh0aW1lKTsKICAgICAgICBvc2NpbGxhdG9yLnN0b3AoZW5kKTsKICAgICAgICBvc2NpbGxhdG9ycy5wdXNoKG9zY2lsbGF0b3IpOwogICAgICB9CiAgICAgIHJldHVybiB7CiAgICAgICAgbm9kZSwKICAgICAgICAvLyBTdHJ1ZGVsIGNhbGxzIHRoaXMgd2hlbiByZXRpcmluZyBhIHZvaWNlLCBpbmNsdWRpbmcgcG9seXBob255IHN0ZWFscy4KICAgICAgICBzdG9wKGF0KSB7CiAgICAgICAgICBpZiAoZmluaXNoZWQpIHJldHVybjsKICAgICAgICAgIGNvbnN0IHN0b3BBdCA9IE1hdGgubWF4KGN0eC5jdXJyZW50VGltZSwgTWF0aC5taW4oYXQsIGVuZCkpOwogICAgICAgICAgbm9kZS5nYWluLmNhbmNlbEFuZEhvbGRBdFRpbWUoc3RvcEF0KTsKICAgICAgICAgIG5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgwLCBzdG9wQXQgKyAwLjAwNSk7CiAgICAgICAgICBmb3IgKGNvbnN0IG9zY2lsbGF0b3Igb2Ygb3NjaWxsYXRvcnMpIG9zY2lsbGF0b3Iuc3RvcChNYXRoLm1pbihlbmQsIHN0b3BBdCArIDAuMDA1KSk7CiAgICAgICAgfSwKICAgICAgfTsKICAgIH0sIHsgdHlwZTogJ3N5bnRoJyB9KTsKICB9CiAgcmV0dXJuIE9iamVjdC5rZXlzKHZvaWNlcyk7Cn0KCnJlZ2lzdGVyTm90ZXBhdCgpOwoKfSkoKQoKLy8gU1RPTkUg4oCUIEBqZWZmcmV5IC8gYWVzdGhldGljLmNvbXB1dGVyIMK3IHBhdC5hZXN0aGV0aWMuY29tcHV0ZXIvc3RvbmUKLy8gV2lsbDogbXV0ZSBhbnkgY29tcGxldGUgJDogYmxvY2suIEFsbCAxMiBwYXJ0cyBhcmUgZW5hYmxlZDsgLm4gPSB2b2ljZSBjb2xvci4KLy8gQ29tcGFjdCBXYXR0YWpldHRhIHJlaW50ZXJwcmV0YXRpb246IHJlcGhyYXNlZCBtZWxvZHksIHN5bnRoZXRpYyBzdG9uZSwgbm8gc2FtcGxlcy4Kc2V0Y3BtKDEzMi80KQpjb25zdCBiYXNzID0gbm90ZSgiPGUxIGcxIGExIGQyIGUxIGcxIGExIGQyIGUxPi8yIikKY29uc3QgdHVuZSA9IG4oIjMgNCA0IDIgMSAzIDIgMCAxIDQgMyA1IDQgMiAxIDAgMiIpLnNjYWxlKCdFNDptaW5vcjpwZW50YXRvbmljJykucGFsaW5kcm9tZSgpLnNsb3coMTcvOCkKY29uc3QgY29sb3IgPSBwZXJsaW4uc2xvdygxMykucmFuZ2UoLjE1LC44NSkKCi8vIEtpY2sgKyBzdWI6IGltbWVkaWF0ZSwgY2VudGVyZWQgZmxvb3IuCiQ6IG5vdGUoImUxKjQiKS5zKCdhY19raWNrJykubiguMzUpLmdhaW4oLjc1KQokOiBiYXNzLnMoJ2FjX3NpbmUnKS5hdHRhY2soLjAxKS5yZWxlYXNlKC4xKS5nYWluKC4zKQoKLy8gU3dhcm06IG9mZmJlYXQgZ2FsbG9wLCBmaWx0ZXJlZCBkZXR1bmVkIHNhd3MgKyBzdWIuCiQ6IGJhc3MudHJhbnNwb3NlKDEyKS5zdHJ1Y3QoIlt+IHhdKjQiKS5zKCdhY19zd2FybScpLm4oLjEyKQogIC5kZWNheSguMSkuc3VzdGFpbiguMDUpLnJlbGVhc2UoLjA0KS5scGYoNjUwKS5nYWluKC4yMikKCi8vIFN0b25lOiAxNy1ub3RlIHBocmFzZSBydW5zIGFjcm9zcyBiYXJzOyBicmlnaHRuZXNzLCByaW5nIGFuZCBwYW4gZHJpZnQuCiQ6IHR1bmUucygnYWNfc3RvbmUnKS5uKGNvbG9yKS5yZWxlYXNlKHNpbmUuc2xvdyg3LjMpLnJhbmdlKC4xLDEuMikpCiAgLnBhbihzaW5lLnNsb3coMTMpLnJhbmdlKC4yLC44KSkucm9vbSguMjUpLmdhaW4oLjMpLl9waWFub3JvbGwoKQoKLy8gV2F0ZXI6IHJvdGF0aW5nIGZpdmUtbm90ZSBkcm9wbGV0cywgdGhyZWUgaGl0cyBhZ2FpbnN0IGVpZ2h0IHN0ZXBzLgokOiBub3RlKCI8ZTMgZzMgYTMgYjMgZDQ+IikuZXVjbGlkKDMsOCkucygnYWNfd2F0ZXInKS5uKGNvbG9yKQogIC5wYW4oc2luZS5zbG93KDE3KSkuZGVsYXkoLjE1KS5kZWxheXRpbWUoLjIyNykuZ2FpbiguMjUpCgovLyBCb3dsczogdGhlIGJhc3MgdHdvIG9jdGF2ZXMgdXAsIGxvbmcgc3RvbmUgdGFpbHMuCiQ6IGJhc3MudHJhbnNwb3NlKDI0KS5zKCdhY19zdG9uZScpLm4oLjE2KS5yZWxlYXNlKDEuNCkucm9vbSguNCkuZ2FpbiguMTIpCgovLyBNYXJpbWJhOiBhIHNsb3dlciBhbnN3ZXIsIHdpdGggZWFjaCBwaHJhc2UgcmV2ZXJzZWQgb24gYWx0ZXJuYXRlIHR1cm5zLgokOiBuKCIwIDMgMiA0IDEiKS5zY2FsZSgnRTM6bWlub3I6cGVudGF0b25pYycpLnBhbGluZHJvbWUoKS5zbG93KDUvMikKICAucygnYWNfbWFyaW1iYScpLm4oY29sb3IpLnBhbiguMykucm9vbSguMikuZ2FpbiguMjIpCgovLyBCbG9vbTogbWlub3Ivc3VzcGVuZGVkIGhhcm1vbnksIGJyZWF0aGluZyBvbiBhIGRpZmZlcmVudCBjbG9jay4KJDogbm90ZSgiPFtlMyxnMyxiM10gW2UzLGEzLGIzXSBbZDMsZzMsYjNdIFtkMyxhMyxiM10+LzQiKS5zKCdhY19ibG9vbScpCiAgLm4oLjEpLmF0dGFjayguMDQpLnJlbGVhc2UoLjgpLmxwZigxNDAwKS5nYWluKHNpbmUuc2xvdygxOSkucmFuZ2UoLjA2LC4xMikpCgovLyBOb3RlcGF0IGZpZnRoczogc2hvcnQgc3luY29wYXRlZCB0cmlhbmdsZSBzdGFicy4KJDogbm90ZSgiZTMgfiBbZzMgYTNdIH4iKS5zKCdhY190cmlhbmdsZV9maWZ0aCcpLmRlY2F5KC4wOCkuc3VzdGFpbigwKS5nYWluKC4xMikKCi8vIE9yYml0OiBxdWlldCBmZWVkYmFjay1GTSBjb3VudGVybGluZTsgc2V2ZW4gbm90ZXMgYWdhaW5zdCB0aGUgc3RvbmUncyAxNy4KJDogbigiMCAyIDQgMyAxIDIgMCIpLnNjYWxlKCdFNDptaW5vcjpwZW50YXRvbmljJykuc2xvdyg3LzIpLnMoJ2FjX29yYml0JykKICAubihjb2xvcikucmVsZWFzZSguMikubHBmKDIzMDApLnBhbihzaW5lLnNsb3coMjMpKS5nYWluKC4wOSkKCi8vIEdsYXNzOiBiYWNrYmVhdCBvbiAyICsgNDsgZHJ5IG1ldGFsbGljIHN0cmlrZXMuCiQ6IG5vdGUoIn4gZTQgfiBlNCIpLnMoJ2FjX2dsYXNzJykubiguODUpLmRlY2F5KC4wNCkuc3VzdGFpbigwKS5ocGYoNzAwKS5nYWluKC4yOCkKCi8vIFNoYWtlcnM6IDXihpI34oaSOeKGkjExIGhpdHMsIDE4IGJhcnMgZWFjaDsgdGhlIG5lY2tsYWNlIHJvdGF0ZXMgZml2ZSBzdGVwcy9iYXIuCiQ6IG5vdGUoJ2I2JykuZXVjbGlkUm90KCI8NSA3IDkgMTE+LzE4IiwxNiwiPDAgNSAxMCAxNSA0IDkgMTQgMyA4IDEzIDIgNyAxMiAxIDYgMTE+IikKICAucygnYWNfZ2xhc3MnKS5uKC45KS5hdHRhY2soLjAwMSkuZGVjYXkoLjAxOCkuc3VzdGFpbigwKS5yZWxlYXNlKC4wMSkuaHBmKDQ1MDApLmdhaW4oLjEpCg==