{"id":7880,"date":"2026-09-27T19:30:51","date_gmt":"2026-09-27T11:30:51","guid":{"rendered":"https:\/\/knowledgegut.com\/kgtest-egy1x81871\/"},"modified":"2026-09-29T16:47:59","modified_gmt":"2026-09-29T08:47:59","slug":"kgtest-egy1x81871","status":"publish","type":"page","link":"https:\/\/knowledgegut.com\/en\/kgtest-egy1x81871\/","title":{"rendered":"kg test (temp)"},"content":{"rendered":"\n<style>@font-face{font-family:'\u7c92\u7dda\u9ad4';src:local('LiXianTi'),local('lihsianti'),local('\u7c92\u7dda\u9ad4');font-display:swap}\n.kg-home{\n  --rose:#D14B63; --plum:#4C458A; --honey:#F3C34C; --honey-soft:#FFF3D6;\n  --warm:#5F5454; --ink:#2b2118; --ink-soft:#5a4e3f;\n  --paper:#FAF6EE; --paper-deep:#e9dfc4; --kraft:#F5F0E8;\n  --shadow:0 18px 40px -22px rgba(43,33,24,.55), 0 4px 10px -6px rgba(43,33,24,.35);\n  --mono:ui-monospace,\"SF Mono\",Menlo,monospace;\n  --sans:'jf\u91d1\u8431\u90a3\u63d02.0','jf-jinxuanlatte4','\u91d1\u8431\u90a3\u63d0',\"PingFang TC\",\"Noto Sans TC\",sans-serif;\n  --hand:'lihsianti','\u7c92\u7dda\u9ad4','jf\u91d1\u8431\u90a3\u63d02.0',\"Noto Serif TC\",serif;\n  \n  --heavy:\"\u00d7 jf-jinxuanlatte9\",'jf-jinxuanlatte9','jf\u91d1\u8431\u90a3\u63d02.0','\u91d1\u8431\u90a3\u63d0',\"PingFang TC\",\"Noto Sans TC\",sans-serif;\n}\n.kg-home,.kg-home *{box-sizing:border-box;margin:0;padding:0}\n.kg-home{background:var(--paper);overflow-x:clip}\n.kg-home{\n  font-family:var(--sans); color:var(--ink); line-height:1.9;\n  background-color:var(--paper); background-image:url('https:\/\/knowledgegut.com\/wp-content\/uploads\/2026\/09\/kgweb-paper.webp'); background-repeat:repeat;\n  -webkit-font-smoothing:antialiased; overflow-x:hidden; position:relative;\n}\n.kg-home a{text-decoration:none;color:inherit}\n.kg-home img{max-width:100%;display:block}\n.kg-home h1,.kg-home h2,.kg-home h3{font-family:var(--heavy);font-weight:900;color:var(--plum);line-height:1.4;letter-spacing:.01em}\n.kg-home h2,.kg-home h3,.kg-home .tc.root .t,.kg-home .tc.branch .t,.kg-home .num b,.kg-home .nav .freebtn,.kg-home .btn:not(.ghost){font-family:var(--heavy)!important}\n.kg-home .intake h1{font-family:var(--hand)!important;font-weight:400;color:var(--ink);letter-spacing:.03em;line-height:1.26}\n.kg-home .glow{color:var(--rose)}\n.kg-home .topbar{background:transparent;text-align:center;padding:0 10px;height:45px;\n  display:flex;align-items:center;justify-content:center;\n  font-size:16px;line-height:1.7;color:#010101;position:relative;z-index:30}\n.kg-home .topbar a{color:var(--plum);font-weight:400}\n.kg-home .topbar a:hover{color:var(--rose)}\n.kg-home .topbar .tb-x{position:absolute;right:14px;top:50%;transform:translateY(-50%);border:0;background:transparent;font-size:22px;line-height:1;color:var(--warm);cursor:pointer;padding:4px 8px}\n.kg-home .topbar.off{display:none}\n@media(max-width:900px){.kg-home .topbar{display:none}}\n.kg-home .nav{background:rgba(255,255,255,.9);backdrop-filter:blur(6px);position:sticky;top:0;z-index:30;box-shadow:0 1px 0 rgba(160,130,110,.18)}\n.kg-home .nav .in{width:min(1180px,92vw);margin-inline:auto;display:flex;align-items:center;gap:clamp(12px,2.2vw,30px);padding:12px 0}\n.kg-home .nav .brand img{width:clamp(104px,11vw,142px)}\n.kg-home .nav ul{list-style:none;display:flex;gap:clamp(12px,2vw,24px);margin-left:auto;align-items:center}\n.kg-home .nav ul a{font-size:14.5px;color:var(--ink)}\n.kg-home .nav ul a:hover,.kg-home .nav ul a.on{color:var(--rose)}\n.kg-home .nav .freebtn{background:var(--rose);color:#fff;border-radius:999px;padding:9px 19px;font-size:14px;font-weight:700;box-shadow:0 8px 18px -8px rgba(209,75,99,.6)}\n.kg-home #tract{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:visible}\n.kg-home #tract svg{position:absolute;left:0;top:0;overflow:visible}\n.kg-home #tract path{fill:none;stroke:rgba(94,84,120,.38);stroke-width:2.3;stroke-linecap:round}\n.kg-home #tract path.geo{stroke:none}\n.kg-home #tract path.trail{stroke:rgba(94,84,120,.13);stroke-width:2.4}\n.kg-home #tract path.ghost{display:none}\n.kg-home #tract path.solid{stroke:rgba(150,140,175,.1);stroke-width:11;filter:none}\n.kg-home #tract path.flow{stroke:rgba(255,206,138,.92);stroke-width:3.4;stroke-linecap:round;filter:none}\n.kg-home #tract path.halo{stroke:rgba(255,206,138,.28);stroke-width:12;stroke-linecap:round}\n.kg-home #doglayer{position:absolute;inset:0;z-index:20;pointer-events:none;overflow:visible}\n.kg-home #dog{\n  position:absolute;left:0;top:0;width:clamp(64px,6.2vw,94px);\n  transform:translate(-50%,-50%);\n  transform-origin:50% 50%;\n  filter:drop-shadow(0 8px 14px rgba(43,33,24,.26));\n  will-change:transform;   \n}\n.kg-home #dogsign{position:absolute;left:0;top:0;pointer-events:auto;display:inline-block;white-space:nowrap;color:#fff;font-weight:700;font-size:13px;letter-spacing:.06em;padding:8px 15px;border-radius:999px;text-decoration:none;\n  background-image:linear-gradient(to right,#D14B63,#FF7C99,#F4B79C,#EBE79D,#FF7C99,#D14B63);background-size:600% auto;background-position:right center;\n  animation:dogGrad 6s linear infinite;box-shadow:0 10px 22px -10px rgba(209,75,99,.7);transform:translate(-50%,-50%);will-change:transform;transition:filter .2s}\n.kg-home #dogsign:hover{filter:brightness(1.15)}\n.kg-home #dogsign::before{content:'';position:absolute;left:50%;top:-9px;width:2px;height:9px;background:rgba(43,33,24,.35);margin-left:-1px}\n@keyframes dogGrad{0%,100%{background-position:100% center}50%{background-position:0% center}}\n@media(max-width:1365px){.kg-home #tract,.kg-home #doglayer{display:none}}\n.kg-home .main{position:relative;z-index:1}\n.kg-home .trust{padding:clamp(28px,4vw,44px) 0 clamp(10px,2vw,18px)}\n.kg-home .trust .in{max-width:1100px;margin:0 auto;padding:0 5vw}\n.kg-home .trust .numbers{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin:0}\n.kg-home .trust .num{text-align:center;padding-left:0}\n.kg-home .trust .num::before{display:none}\n.kg-home .trust .num b{display:block;font-size:clamp(28px,3.4vw,40px)}\n.kg-home .brainrow{display:flex;gap:14px;margin-top:22px}\n.kg-home .brainrow div{flex:1;background:#fff;border:1px solid rgba(43,33,24,.1);border-radius:10px;padding:12px 8px 10px;text-align:center}\n.kg-home .brainrow img{height:54px;width:auto;display:block;margin:0 auto 6px;filter:drop-shadow(0 6px 10px rgba(43,33,24,.18))}\n.kg-home .brainrow b{display:block;font-size:13.5px;color:var(--plum)}\n.kg-home .brainrow span{font-size:12px;color:var(--rose)}\n.kg-home .honey.deeper .hsub{max-width:560px;margin:8px auto 18px;color:var(--ink-soft);font-size:15px;line-height:1.8}\n@media(max-width:820px){.kg-home .trust .numbers{grid-template-columns:repeat(2,1fr);gap:12px}\n.kg-home .brainrow{gap:8px}\n.kg-home .brainrow img{height:44px}\n.kg-home .brainrow b{font-size:12.5px}}\n.kg-home .tree{position:relative}\n.kg-home .tree-stage{position:relative;height:calc(100vh - var(--kg-pin-inset,0px));overflow:hidden}\n.kg-home .tree-links{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:1;overflow:visible}\n.kg-home .tree-links .beam{filter:drop-shadow(0 0 3px rgba(255,224,138,1)) drop-shadow(0 0 7px rgba(243,195,76,.7));transition:opacity .4s}\n.kg-home .tree-copy{position:absolute;left:50%;transform:translateX(-50%);width:min(760px,92vw);text-align:center;z-index:6;pointer-events:none}\n.kg-home .tree-copy.c1{top:clamp(24px,6vh,80px)}\n.kg-home .tree-copy.c2{top:clamp(28px,4vh,54px);opacity:0;width:min(600px,92vw)}\n.kg-home .tree-copy .kick{font-family:var(--mono)!important;font-size:11.5px;letter-spacing:.34em;color:var(--rose);margin-bottom:20px}\n.kg-home .tree-copy .kick2{font-family:var(--mono)!important;font-size:11px;letter-spacing:.3em;color:var(--warm);margin-bottom:14px}\n.kg-home .tree-copy h1{font-family:var(--hand)!important;font-weight:400;color:var(--ink);font-size:clamp(30px,5vw,56px);line-height:1.26;margin-bottom:18px}\n.kg-home .tree-copy h2{font-size:clamp(24px,3.4vw,34px);font-weight:900;color:var(--plum);margin-bottom:14px;position:relative;display:inline-block}\n.kg-home .tree-copy h2::after{content:'';position:absolute;bottom:5px;left:0;right:0;height:10px;background:rgba(243,195,76,.45);z-index:-1;transform:rotate(-.6deg)}\n.kg-home .tree-copy .sub{font-size:clamp(14px,1.8vw,16.5px);line-height:1.9;color:var(--ink-soft);max-width:460px;margin:0 auto}\n.kg-home .tree-copy.c1.hero{width:min(760px,92vw);text-align:center}\n.kg-home .hero-text{width:fit-content;max-width:100%;margin-inline:auto}\n.kg-home .hero-text h1{font-size:clamp(40px,5.2vw,64px);margin-bottom:12px}\n.kg-home .hero-text .role{display:inline-block;position:relative;font-family:var(--heavy)!important;font-weight:900;color:var(--plum);\n  font-size:clamp(19px,2.1vw,26px);letter-spacing:.02em;margin-bottom:12px}\n.kg-home .hero-text .role::after{content:'';position:absolute;left:-3px;right:-3px;bottom:3px;height:10px;background:rgba(243,195,76,.5);z-index:-1;transform:rotate(-.6deg)}\n.kg-home .hero-text .line{font-size:clamp(15px,1.7vw,17px);color:var(--ink-soft);line-height:1.9;margin-bottom:20px}\n.kg-home .hero-cta{pointer-events:auto}\n.kg-home .tree-copy.c1.gone .hero-cta{pointer-events:none}\n.kg-home .tree-figure{position:absolute;left:50%;bottom:0;transform:translate(calc(-50% + var(--fx,0px)),var(--fy,0px)) scale(var(--fs,1));transform-origin:50% 100%;height:clamp(220px,46vh,480px);width:auto;z-index:5;\n  filter:drop-shadow(0 12px 20px rgba(43,33,24,.16))}\n.kg-home .tree-figure.fig2{opacity:0;pointer-events:none}\n.kg-home .say{position:absolute;left:50%;bottom:0;z-index:60;pointer-events:none;opacity:0;max-width:62vw;transform:translate(calc(-50% + var(--fx,0px)),var(--fy,0px)) scale(var(--fs,1));transform-origin:0 100%;background:#fff;color:var(--ink);font-weight:800;font-size:14.5px;line-height:1.5;padding:11px 15px;border-radius:18px;border:0;box-shadow:0 14px 34px -14px rgba(43,33,24,.45),0 2px 6px rgba(43,33,24,.06);white-space:nowrap}\n.kg-home .say::after{content:'';position:absolute;left:-7px;bottom:12px;width:16px;height:16px;background:#fff;border-radius:3px;transform:rotate(45deg);box-shadow:-4px 4px 8px -6px rgba(43,33,24,.25)}\n.kg-home .say .cur{display:inline-block;width:2px;height:1em;background:var(--rose);margin-left:2px;vertical-align:-2px;animation:sayBlink 1s steps(1) infinite}\n.kg-home .say.done .cur{display:none}\n.kg-home .say.top{white-space:normal;max-width:72vw;text-align:center;border-radius:18px}\n.kg-home .say.top::after{left:50%;bottom:-6px;margin-left:-8px;box-shadow:4px 4px 8px -6px rgba(43,33,24,.25)}\n@keyframes sayBlink{0%,50%{opacity:1}51%,100%{opacity:0}}\n.kg-home .dizzy{position:absolute;left:50%;bottom:calc(var(--dz,0px) * var(--fs,1));margin-left:calc(var(--dml,0px) * var(--fs,1));width:0;height:0;z-index:59;pointer-events:none;transform:translate(calc(-50% + var(--fx,0px)),var(--fy,0px))}\n.kg-home .dizzy i{position:absolute;left:0;top:0;font-style:normal;font-size:22px;color:var(--rose);animation:dizzySpin 2.6s linear infinite;opacity:.9;text-shadow:0 2px 6px rgba(255,255,255,.9)}\n.kg-home .dizzy i:nth-child(2){animation-delay:-.87s;font-size:16px;color:var(--honey)}\n.kg-home .dizzy i:nth-child(3){animation-delay:-1.73s;font-size:14px;color:var(--plum)}\n@keyframes dizzySpin{from{transform:rotate(0deg) translateX(calc(var(--r,52px) * var(--fs,1))) rotate(0deg)}to{transform:rotate(360deg) translateX(calc(var(--r,52px) * var(--fs,1))) rotate(-360deg)}}\n.kg-home .tree-hint{position:absolute;left:clamp(16px,5vw,80px);bottom:clamp(14px,3vh,30px);font-family:var(--mono)!important;font-size:11px;letter-spacing:.22em;color:var(--warm);z-index:6}\n.kg-home .tc{position:absolute;top:0;left:0;background:#fff;border:1px solid rgba(43,33,24,.12);border-radius:8px;\n  padding:11px 14px;box-shadow:0 8px 20px -12px rgba(43,33,24,.4),0 1px 3px -1px rgba(43,33,24,.18);\n  z-index:2;will-change:transform;pointer-events:auto;transition:box-shadow .25s,border-color .25s}\n.kg-home .tc:hover{border-color:rgba(209,75,99,.4);box-shadow:0 18px 36px -14px rgba(43,33,24,.5);z-index:9}\n.kg-home .tc .t{font-size:13px;font-weight:600;color:var(--ink);line-height:1.5}\n.kg-home .tc .logos{display:grid;grid-template-columns:1fr 1fr;gap:4px;margin-top:6px}\n.kg-home .tc .logos .chip{max-width:100%;overflow:hidden;text-overflow:ellipsis;min-width:0}\n.kg-home .chip{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;font-weight:700;color:var(--ink);background:#fff;border:1px solid rgba(43,33,24,.12);border-radius:999px;padding:3px 8px 3px 5px;white-space:nowrap}\n.kg-home .chip b{width:14px;height:14px;border-radius:50%;color:#fff;font-size:9px;display:inline-flex;align-items:center;justify-content:center}\n.kg-home .tc.frag.logo{padding:4px;background:transparent;border:0}\n.kg-home .tc.frag.logo .chip{font-size:13px;padding:6px 12px 6px 8px;box-shadow:0 8px 18px -10px rgba(43,33,24,.4)}\n.kg-home .tc.frag.logo .chip svg{width:18px;height:18px}\n.kg-home .tc.frag.logo .chip b{width:18px;height:18px;font-size:11px}\n.kg-home .tc.frag.pic{padding:6px;background:#fff}\n.kg-home .tc.frag.pic img{display:block;width:auto;height:44px}\n.kg-home .tc.frag.sub{font-size:11px;color:var(--rose);font-weight:700}\n.kg-home .tc.frag.dust{font-size:11px;padding:3px 6px;color:var(--warm)}\n.kg-home .tc.frag{padding:4px 8px;font-size:12px;font-weight:500;color:var(--ink-soft);line-height:1.4;pointer-events:none;white-space:nowrap;box-shadow:0 1px 2px rgba(43,33,24,.14)}\n.kg-home .tc .m{display:flex;align-items:center;gap:6px;margin-top:7px;padding-top:7px;border-top:1px solid rgba(43,33,24,.08)}\n.kg-home .tc .m i{width:6px;height:6px;border-radius:50%;background:var(--rose);flex:0 0 auto;font-style:normal}\n.kg-home .tc .m span{font-family:var(--mono)!important;font-size:9px;letter-spacing:.08em;color:rgba(43,33,24,.42)}\n.kg-home .tc.root{--tone:1;box-shadow:0 14px 30px -10px rgba(209,75,99,.55)}\n.kg-home .tc.root,.kg-home .tc.branch{background:#fff;border-color:rgba(43,33,24,.12);position:absolute;overflow:hidden}\n.kg-home .tc.root::before,.kg-home .tc.branch::before{content:'';position:absolute;inset:0;border-radius:inherit;opacity:var(--tone);pointer-events:none;z-index:0}\n.kg-home .tc.root::before{background:var(--rose)}\n.kg-home .tc.branch::before{background:var(--honey-soft);box-shadow:inset 0 0 0 1px rgba(243,195,76,.55)}\n.kg-home .tc.root>*,.kg-home .tc.branch>*{position:relative;z-index:1}\n.kg-home .tc.root{box-shadow:0 14px 30px -10px rgba(209,75,99,calc(var(--tone)*.55))}\n.kg-home .tc.root .t{color:#fff}\n.kg-home .tc.root .m span{color:rgba(255,255,255,.8)}\n.kg-home .tc.root .m i{background:#fff}\n.kg-home .tc.root.mute .t{color:var(--ink)}\n.kg-home .tc.root.mute .m span{color:var(--warm)}\n.kg-home .tc.root.mute .m i{background:var(--rose)}\n.kg-home .tc.branch .pic img{filter:grayscale(calc((1 - var(--tone))*100%)) opacity(calc(.55 + var(--tone)*.45)) drop-shadow(0 6px 10px rgba(43,33,24,.18))}\n.kg-home .tc.root .t{color:#fff;font-size:15.5px;font-weight:900}\n.kg-home .tc.root .pic{margin:-4px -6px 6px;padding:0;background:none;text-align:center}\n.kg-home .tc.root .pic img{display:block;width:100%;height:auto;filter:drop-shadow(0 4px 8px rgba(43,33,24,.25))}\n.kg-home .tc .mentions{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px;pointer-events:auto}\n.kg-home .tc .mentions a{font-size:11.5px;font-weight:700;color:var(--plum);background:#fff;border-radius:999px;padding:3px 9px;cursor:pointer;text-decoration:none;box-shadow:0 4px 10px -6px rgba(43,33,24,.4);transition:transform .15s}\n.kg-home .tc .mentions a:hover{transform:translateY(-1px)}\n.kg-home .tc.hi{box-shadow:0 0 0 3px var(--honey),0 16px 34px -12px rgba(243,195,76,.7)!important;transition:box-shadow .2s}\n.kg-home .tc.root .m{border-top-color:rgba(255,255,255,.25)}\n.kg-home .tc.root .m i{background:#fff}\n.kg-home .tc.root .m span{color:rgba(255,255,255,.8)}\n.kg-home .tc.branch{--tone:1}\n.kg-home .tc .t a.intro{color:inherit;text-decoration:none;pointer-events:auto}\n.kg-home .tc .t a.intro:hover{text-decoration:underline;text-underline-offset:3px}\n.kg-home .tc .buy{margin-top:8px;display:flex;justify-content:center;pointer-events:auto}\n.kg-home .tc .m a.go{margin-left:auto;font-size:10.5px;padding:3px 9px;pointer-events:auto}\n.kg-home .tc.leaf.shape{padding:8px 12px}\n.kg-home .tc.leaf.shape .t{font-size:12.5px;line-height:1.45}\n.kg-home .tc .buy a.go,.kg-home .tc .m a.go{display:inline-flex;align-items:center;font-size:11.5px;font-weight:700;color:#fff;background:var(--rose);border-radius:999px;padding:5px 12px;text-decoration:none;white-space:nowrap;box-shadow:0 6px 14px -6px rgba(209,75,99,.6);transition:transform .15s,filter .15s}\n.kg-home .tc .buy a.go:hover,.kg-home .tc .m a.go:hover{transform:translateY(-1px);filter:brightness(1.08)}\n.kg-home .tc.root .buy a.go{background:#fff;color:var(--rose)}\n.kg-home .tc.mute .buy,.kg-home .tc.mute .m a.go,.kg-home .tc.mute .t a.intro{pointer-events:none}\n.kg-home .tc.branch .t{color:var(--plum);font-weight:900;font-size:14px}\n.kg-home .tc.branch .t .sub{display:block;font-size:12px;font-weight:700;color:var(--rose);margin-top:2px;letter-spacing:.02em}\n.kg-home .tc.branch .pic{margin:-2px -2px 8px;border-radius:6px;background:rgba(255,255,255,.55);padding:6px 10px 2px;text-align:center}\n.kg-home .tc.branch .pic img{width:auto;height:52px;display:inline-block;filter:drop-shadow(0 6px 10px rgba(43,33,24,.18))}\n@media(min-width:821px){.kg-home .tc.branch{display:grid;grid-template-columns:auto 1fr;column-gap:8px;align-items:center;padding:10px 12px}\n.kg-home .tc.branch .pic{grid-column:1;grid-row:1;margin:0;padding:4px 5px 1px}\n.kg-home .tc.branch .pic img{height:48px}\n.kg-home .tc.branch .t .sub{white-space:nowrap;font-size:11.5px}\n.kg-home .tc.branch .t{grid-column:2;grid-row:1}\n.kg-home .tc.branch .m{grid-column:1\/-1;grid-row:2}\n\n}\n.kg-home .tree-stage.short-m .tc.root .mentions{display:none}\n@media(max-width:820px){.kg-home .tc .m a.go,.kg-home .tc.root .buy{display:none}\n.kg-home .tc.root .pic{margin:0 0 3px}\n.kg-home .tc.root .pic img{width:auto;max-width:100%;height:34px;margin:0 auto}\n }\n.kg-home .tc.branch .m a.go{font-size:10.5px;padding:4px 9px}\n.kg-home .tc .m span{white-space:nowrap}\n.kg-home .tc.has-intro{cursor:pointer}\n.kg-home .tc.has-intro.mute{cursor:default}\n.kg-home .tc.leaf .t{font-weight:500;color:var(--ink-soft)}\n.kg-home .tc.amb{pointer-events:none;width:max-content}\n.kg-home .tc.amb{padding:9px 12px}\n.kg-home .tc.amb .t{font-weight:500;color:var(--ink-soft);font-size:12px}\n.kg-home .tc.amb.word{padding:7px 11px;font-weight:700}\n.kg-home .tc.amb.word .t{font-size:13px;color:var(--plum)}\n.kg-home .tc.amb.line .t{font-size:12.5px}\n.kg-home .tc.amb.hb{padding:10px 13px 11px;box-shadow:0 10px 24px -14px rgba(43,33,24,.45)}\n.kg-home .tc.amb.hb .h{font-size:12.5px;font-weight:800;color:var(--plum);margin-bottom:4px;padding-bottom:4px;border-bottom:1px solid rgba(43,33,24,.08)}\n@media(max-width:820px){.kg-home .tree-stage{height:calc(100vh - var(--kg-pin-inset,0px));height:calc(100svh - var(--kg-pin-inset,0px))}\n.kg-home .tc{text-align:center}\n.kg-home .tc .m{justify-content:center}\n.kg-home .tree-hint{display:none}\n\n}\n@media(max-width:600px){.kg-home .tc{padding:7px 9px;border-radius:7px}\n.kg-home .tc .t{font-size:11.5px;line-height:1.45}\n.kg-home .tc .m{margin-top:5px;padding-top:5px;gap:4px}\n.kg-home .tc .m span{font-size:8px;letter-spacing:.04em}\n.kg-home .tc.root .t{font-size:13.5px}\n.kg-home .tc.branch .t{font-size:12.5px}\n.kg-home .tc.branch .pic img{height:50px}\n.kg-home .tc .logos{grid-template-columns:1fr}\n.kg-home .tc .mentions{gap:3px;justify-content:center;margin-top:5px}\n.kg-home .tc .mentions a{font-size:9.5px;padding:2px 6px}\n.kg-home .tc.root .m{display:none}\n.kg-home .chip{font-size:9.5px;padding:2px 6px 2px 4px;gap:3px}\n.kg-home .chip svg{width:12px;height:12px}\n.kg-home .chip b{width:12px;height:12px;font-size:8px}\n.kg-home .tc.amb{padding:6px 8px}\n.kg-home .tc.amb .t{font-size:10.5px}\n\n}\n@media(max-width:820px) and (max-height:700px){.kg-home .tree-copy.c2 .sub{display:none}}\n.kg-home .intake{position:relative;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:clamp(40px,7vw,90px) 0 clamp(70px,9vw,120px);overflow:hidden}\n.kg-home .intake .core{width:min(820px,90vw);text-align:center;position:relative;z-index:3}\n.kg-home .intake .kick{font-family:var(--mono)!important;font-size:11.5px;letter-spacing:.34em;color:var(--rose);margin-bottom:26px}\n.kg-home .intake h1{font-size:clamp(32px,5.5vw,60px);margin-bottom:24px}\n.kg-home .intake .sub{font-size:clamp(15px,1.9vw,17px);line-height:1.95;color:var(--ink-soft);max-width:480px;margin:0 auto 30px}\n.kg-home .intake .guide{margin:26px auto 0;width:clamp(120px,15vw,186px);filter:drop-shadow(0 14px 22px rgba(43,33,24,.24))}\n.kg-home .intake .hint{font-family:var(--mono)!important;font-size:11px;letter-spacing:.26em;color:var(--warm);margin-top:14px}\n.kg-home .intake .hint b{display:block;font-size:17px;margin-top:8px;color:var(--rose);font-weight:400}\n.kg-home .noise{position:absolute;inset:0;z-index:1;pointer-events:none}\n.kg-home .intake .core{position:relative;z-index:3}\n.kg-home .nz{\n  position:absolute; background:#fff; border:1px solid rgba(43,33,24,.1);\n  border-radius:6px; padding:11px 13px 12px;\n  box-shadow:0 6px 16px -10px rgba(43,33,24,.32), 0 1px 3px -1px rgba(43,33,24,.18);\n  opacity:.92; pointer-events:auto;\n  transition:box-shadow .25s, border-color .25s, opacity .25s;\n}\n.kg-home .nz:hover{\n  opacity:1; z-index:9; border-color:rgba(209,75,99,.4);\n  box-shadow:0 16px 34px -14px rgba(43,33,24,.5), 0 2px 6px -2px rgba(209,75,99,.35);\n}\n.kg-home .nz:hover .m i{box-shadow:0 0 0 4px rgba(209,75,99,.14)}\n.kg-home .nz .t{font-size:12.5px;line-height:1.6;color:var(--ink);font-weight:500;\n  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}\n.kg-home .nz .m{display:flex;align-items:center;gap:6px;margin-top:9px;\n  padding-top:8px;border-top:1px solid rgba(43,33,24,.07)}\n.kg-home .nz .m i{width:6px;height:6px;border-radius:50%;background:var(--rose);flex:0 0 auto;font-style:normal}\n.kg-home .nz .m span{font-family:var(--mono)!important;font-size:9.5px;letter-spacing:.1em;color:rgba(43,33,24,.42)}\n.kg-home .station{position:relative;padding:clamp(60px,9vw,130px) 0}\n.kg-home .station .in{width:min(1040px,90vw);margin-inline:auto;display:grid;grid-template-columns:1fr 1fr;gap:clamp(28px,8vw,124px);align-items:center}\n.kg-home .station.rev .in{direction:rtl;align-items:start}\n.kg-home .station.rev .in>div:first-child{padding-top:6px}\n.kg-home .station.rev .in>*{direction:ltr}\n.kg-home .st-label{display:flex;align-items:center;gap:12px;margin-bottom:20px}\n.kg-home .st-label .no{\n  width:34px;height:34px;border-radius:50%;background:var(--rose);color:#fff;\n  font-family:var(--mono)!important;font-size:13px;font-weight:700;display:flex;align-items:center;justify-content:center;\n  box-shadow:0 6px 14px -6px rgba(209,75,99,.6);flex:0 0 auto;\n}\n.kg-home .st-label .en{font-family:var(--mono)!important;font-size:11px;letter-spacing:.3em;color:var(--warm)}\n.kg-home .station h2{\n  font-size:clamp(22px,3.2vw,30px); font-weight:900; color:var(--plum);\n  line-height:1.4; margin-bottom:18px; position:relative; display:inline-block;\n}\n.kg-home .station h2::after{\n  content:''; position:absolute; bottom:6px; left:0; right:0; height:10px;\n  background:rgba(243,195,76,.45); z-index:-1; transform:rotate(-.6deg);\n}\n.kg-home .station h2 .glow{color:var(--rose)}\n.kg-home .station p{font-size:clamp(15px,1.9vw,17px);line-height:1.95;color:var(--ink-soft);margin-bottom:14px;max-width:420px}\n.kg-home .station .pull{\n  font-family:var(--hand)!important;font-size:clamp(18px,2.2vw,24px);color:var(--plum);\n  line-height:1.6;margin:22px 0 0;transform:rotate(-1deg);\n}\n.kg-home .hl{position:relative;display:inline}\n.kg-home .hl::after{content:'';position:absolute;left:-2px;right:-2px;bottom:2px;height:36%;background:rgba(243,195,76,.5);z-index:-1;transform:scaleX(0);transform-origin:left center;border-radius:2px}\n.kg-home .polaroid{background:#fffdf6;padding:11px 11px 38px;box-shadow:var(--shadow);border-radius:2px;position:relative}\n.kg-home .polaroid.tight{padding:9px}\n.kg-home .polaroid .cap{position:absolute;left:0;right:0;bottom:11px;text-align:center;font-family:var(--hand)!important;font-size:13.5px;color:var(--ink-soft)}\n.kg-home .tape{position:absolute;width:74px;height:18px;background:rgba(243,195,76,.72);top:-8px;left:22px;transform:rotate(-4deg);box-shadow:0 2px 4px rgba(0,0,0,.12);z-index:2}\n.kg-home .tape::before,.kg-home .tape::after{content:\"\";position:absolute;top:0;bottom:0;width:5px;background:rgba(0,0,0,.05)}\n.kg-home .tape::before{left:0}\n.kg-home .tape::after{right:0}\n.kg-home .tape.cool{background:rgba(76,69,138,.58)}\n.kg-home .tape.pink{background:rgba(209,75,99,.62)}\n.kg-home .tape.mint{background:rgba(76,170,140,.55)}\n.kg-home .mmsec{padding-top:clamp(50px,7vw,100px)}\n.kg-home .mmhead{width:min(760px,92vw);margin:0 auto clamp(40px,5vw,66px)}\n.kg-home .mm{\n  position:relative; width:min(1120px,94vw); margin:0 auto;\n  display:grid; grid-template-columns:auto 1fr; gap:clamp(28px,5vw,80px); align-items:center;\n}\n.kg-home .mm-links{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:0;overflow:visible}\n.kg-home .mm-branches{display:flex;flex-direction:column;gap:clamp(18px,2.6vw,30px);position:relative;z-index:1}\n.kg-home .mm-branch{display:grid;grid-template-columns:auto 1fr;gap:clamp(24px,4vw,64px);align-items:center}\n.kg-home .mm-leaves{display:flex;flex-direction:column;gap:12px}\n.kg-home .mm-node{\n  background:#fff;border:1px solid rgba(43,33,24,.12);border-radius:8px;\n  padding:12px 15px;box-shadow:0 6px 16px -10px rgba(43,33,24,.32),0 1px 3px -1px rgba(43,33,24,.18);\n  position:relative;z-index:1;align-self:center;\n}\n.kg-home .mm-node .t{font-size:14.5px;font-weight:700;color:var(--ink);line-height:1.5}\n.kg-home .mm-node .m{display:flex;align-items:center;gap:6px;margin-top:7px;padding-top:7px;border-top:1px solid rgba(43,33,24,.07)}\n.kg-home .mm-node .m i{width:6px;height:6px;border-radius:50%;background:var(--rose);flex:0 0 auto;font-style:normal}\n.kg-home .mm-node .m span{font-family:var(--mono)!important;font-size:9.5px;letter-spacing:.1em;color:rgba(43,33,24,.42)}\n.kg-home .mm-node.root{background:var(--rose);border-color:var(--rose);box-shadow:0 12px 28px -10px rgba(209,75,99,.5);justify-self:start}\n.kg-home .mm-node.root .t{color:#fff;font-size:17px}\n.kg-home .mm-node.root .m{border-top-color:rgba(255,255,255,.25)}\n.kg-home .mm-node.root .m i{background:#fff}\n.kg-home .mm-node.root .m span{color:rgba(255,255,255,.8)}\n.kg-home .mm-node.brain{background:var(--honey-soft);border-color:rgba(243,195,76,.5)}\n.kg-home .mm-node.brain .t{color:var(--plum);font-size:15.5px;font-weight:900}\n.kg-home .mm-node.leaf{padding:9px 13px}\n.kg-home .mm-node.leaf .t{font-size:13px;font-weight:500;color:var(--ink-soft)}\n@media(max-width:820px){.kg-home .mm{grid-template-columns:1fr;gap:22px;justify-items:center}\n.kg-home .mm-node.root{justify-self:center}\n.kg-home .mm-branch{grid-template-columns:1fr;gap:12px;justify-items:center}\n.kg-home .mm-leaves{align-items:center}\n.kg-home .mm-links{display:none}\n   \n}\n.kg-home .organs{display:flex;flex-direction:column;gap:clamp(26px,4vw,54px)}\n.kg-home .organ{display:grid;grid-template-columns:auto 1fr;gap:20px;align-items:start}\n.kg-home .organ .fig{width:clamp(92px,11vw,136px);flex:0 0 auto;position:relative}\n.kg-home .organ .fig img{width:100%}\n.kg-home .organ .fig .ring{position:absolute;inset:-8%;border-radius:50%;border:1.5px dashed rgba(76,69,138,.3)}\n.kg-home .organ h3{font-size:clamp(17px,2vw,20px);margin-bottom:4px}\n.kg-home .organ .en{font-family:var(--mono)!important;font-size:10px;letter-spacing:.2em;color:var(--warm);margin-bottom:9px}\n.kg-home .organ p{font-size:14.8px;margin:0;max-width:none}\n.kg-home .absorb-visual{position:relative}\n.kg-home .absorb-visual .polaroid.a{transform:rotate(-2.4deg);max-width:300px}\n.kg-home .absorb-visual .polaroid.b{position:absolute;right:-4%;bottom:-8%;width:46%;transform:rotate(4deg)}\n.kg-home .station.merged{padding:clamp(36px,4.5vw,48px) 0}\n.kg-home .station.merged .in{grid-template-columns:1.05fr .95fr;gap:0 clamp(24px,5vw,80px);align-items:center}\n.kg-home .station.merged h2{margin-bottom:14px}\n.kg-home .station.merged p{margin-bottom:10px;line-height:1.85}\n.kg-home .station.merged .brainrow{margin-top:16px;gap:10px}\n.kg-home .station.merged .brainrow div{padding:10px 6px 8px}\n.kg-home .station.merged .brainrow img{height:40px;margin:0 auto 4px}\n.kg-home .station.merged .brainrow b{font-size:13px;line-height:1.25}\n.kg-home .station.merged .brainrow span{font-size:11.5px}\n.kg-home .freecard{grid-column:1\/-1;margin-top:clamp(22px,3vw,30px);background:#fff;border:1px solid rgba(43,33,24,.1);border-radius:14px;padding:18px 24px;display:grid;grid-template-columns:1fr auto;gap:16px 30px;align-items:center;box-shadow:0 2px 8px rgba(0,0,0,.05);position:relative;z-index:2}\n.kg-home .freecard .fc-kick{font-family:var(--mono)!important;font-size:11px;letter-spacing:.3em;color:var(--rose);margin-bottom:6px}\n.kg-home .freecard .fc-title{display:block;font-size:clamp(18px,2vw,22px);color:var(--plum);font-weight:900;margin-bottom:6px;line-height:1.4}\n.kg-home .station.merged .freecard .fc-sub{font-size:15px;line-height:1.75;color:var(--ink-soft);margin:0 0 12px;max-width:none}\n.kg-home .fc-days{list-style:none;display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:0}\n.kg-home .fc-days li{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--ink);background:rgba(243,195,76,.16);border-radius:999px;padding:4px 11px 4px 5px;white-space:nowrap}\n.kg-home .fc-days li i{font-style:normal;width:20px;height:20px;border-radius:50%;background:var(--rose);color:#fff;font-family:var(--mono)!important;font-size:11px;font-weight:700;display:inline-flex;align-items:center;justify-content:center}\n.kg-home .fc-act{display:flex;flex-direction:column;align-items:center;gap:10px}\n.kg-home .fc-act .fc-note{font-size:12.5px;color:var(--warm);white-space:nowrap}\n@media(max-width:900px){.kg-home .station.merged .in{grid-template-columns:1fr;gap:26px}\n.kg-home .freecard{grid-template-columns:1fr;padding:18px;margin-top:22px}\n.kg-home .fc-act{align-items:flex-start}\n.kg-home .station.merged .brainrow{gap:8px}\n.kg-home .station.merged .brainrow div{padding:8px 4px 6px}\n.kg-home .station.merged .brainrow img{height:38px}\n\n}\n.kg-home .grains{position:absolute;inset:-13% -15%;pointer-events:none;z-index:-1}\n.kg-home .grains.front{z-index:6}\n.kg-home .grain{position:absolute;display:block;transform-origin:50% 50%;\n  filter:drop-shadow(0 1px 2px rgba(43,33,24,.18))}\n.kg-home .grain svg{display:block;width:100%;height:100%;overflow:visible}\n.kg-home .numbers{display:flex;flex-wrap:wrap;gap:20px 34px;margin-top:30px;padding-top:24px;border-top:1px dashed rgba(160,130,110,.4)}\n.kg-home .num{position:relative;padding-top:13px}\n.kg-home .num::before{content:'';position:absolute;top:0;left:0;width:8px;height:8px;border-radius:50%;background:var(--plum)}\n.kg-home .num:nth-child(2)::before{background:var(--rose)}\n.kg-home .num:nth-child(3)::before{background:var(--honey)}\n.kg-home .num b{display:block;font-size:clamp(21px,2.4vw,28px);font-weight:900;color:var(--plum);line-height:1.1}\n.kg-home .num span{font-size:12px;color:var(--warm)}\n.kg-home .outputs{\n  display:grid; grid-template-columns:repeat(2,1fr);\n  gap:36px 38px; align-items:flex-start;\n  counter-reset:kgpost;\n}\n.kg-home .outputs .more{grid-column:1\/-1;text-align:center;margin-top:-6px}\n.kg-home .voices{position:relative;padding:clamp(56px,8vw,110px) 0 clamp(36px,6vw,80px)}\n.kg-home .voices .in{width:min(1040px,90vw);margin-inline:auto;text-align:center}\n.kg-home .voices .vkick{font-family:var(--mono)!important;font-size:11.5px;letter-spacing:.3em;color:var(--rose);margin-bottom:14px}\n.kg-home .voices h2{font-size:clamp(24px,3.2vw,34px);margin-bottom:10px}\n.kg-home .voices .vsub{font-size:14.5px;color:var(--warm);margin-bottom:clamp(30px,4vw,46px)}\n.kg-home .vgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:26px 22px;align-items:start;text-align:left}\n.kg-home .vcol{display:flex;flex-direction:column;gap:26px}\n.kg-home .v{position:relative;margin:0;background:#fff;border:1px solid rgba(43,33,24,.1);border-radius:8px;\n  padding:30px 24px 20px;box-shadow:0 10px 26px -18px rgba(43,33,24,.45);display:flex;flex-direction:column}\n.kg-home .v:nth-child(3n+1){rotate:-.5deg}\n.kg-home .v:nth-child(3n+2){rotate:.35deg}\n.kg-home .v:nth-child(odd)::after{content:'';position:absolute;top:-9px;left:50%;width:66px;height:17px;margin-left:-33px;\n  background:rgba(243,195,76,.55);transform:rotate(-3deg);box-shadow:0 2px 4px rgba(0,0,0,.08)}\n.kg-home .v blockquote{margin:0;padding:0;border:0;background:none;font-style:normal;quotes:none;font-size:15px;line-height:1.9;color:var(--ink);flex:1;text-wrap:pretty}\n.kg-home .v blockquote::before,.kg-home .v blockquote::after{content:none;display:none}\n.kg-home .v.img{padding:0;display:block}\n.kg-home .v.img::before{content:none}\n.kg-home .v.img img{display:block;width:100%;height:auto;border-radius:7px}\n.kg-home .v figcaption{margin-top:16px;padding-top:12px;border-top:1px dashed rgba(160,130,110,.35);display:flex;flex-direction:column;gap:2px}\n.kg-home .v figcaption b{font-family:var(--heavy)!important;font-weight:900;color:var(--plum);font-size:14px}\n.kg-home .v figcaption span{font-family:var(--mono)!important;font-size:11px;letter-spacing:.04em;color:var(--warm)}\n.kg-home .vmore{display:inline-block;margin-top:clamp(26px,3.5vw,40px);font-size:14.5px;color:var(--plum);border-bottom:1px solid rgba(76,69,138,.35);padding-bottom:2px}\n.kg-home .vmore:hover{color:var(--rose);border-color:var(--rose)}\n@media(max-width:1100px){.kg-home .vgrid{grid-template-columns:1fr 1fr}\n.kg-home .vcol{display:contents}}\n@media(max-width:560px){.kg-home .vgrid{grid-template-columns:1fr}}\n.kg-home .out{\n  display:flex; flex-direction:column;\n  background:#fff; border-radius:5px; padding:20px;\n  box-shadow:rgba(0,0,0,.2) -1px 2px 5px 1px;\n  overflow:hidden; text-align:center;\n  transition:background .25s, border .25s, box-shadow .25s, transform .3s;\n}\n.kg-home .out:hover{box-shadow:rgba(0,0,0,.26) -2px 5px 12px 2px;transform:translateY(-3px)}\n.kg-home .out .thumb{position:relative;overflow:hidden;margin:0 0 4px}\n.kg-home .out .thumb img{width:100%;height:auto;display:block;transition:filter .3s}\n.kg-home .out:hover .thumb img{filter:brightness(1.05)}\n.kg-home .out h3{\n  font-family:var(--sans); font-weight:900; font-size:16px; line-height:25px;\n  color:var(--plum); text-align:center;\n  padding:10px 0 15px; margin:0 0 17px;\n  border-bottom:.5px solid #E6E3E4;\n}\n.kg-home .out .d{\n  font-family:var(--sans); font-size:13px; color:var(--warm);\n  letter-spacing:.04em; margin-top:auto;\n  display:flex; align-items:center; justify-content:center; gap:9px;\n}\n.kg-home .out .d::before{\n  counter-increment:kgpost;\n  content:counter(kgpost);\n  width:22px; height:22px; border-radius:50%;\n  background:var(--rose); color:#fff;\n  font-size:11.5px; font-weight:700; line-height:1;\n  display:flex; align-items:center; justify-content:center;\n  box-shadow:0 1px 4px rgba(0,0,0,.18);\n  flex:0 0 auto;\n}\n.kg-home .quote{\n  background:#fff;border-radius:5px;box-shadow:rgba(0,0,0,.2) -1px 2px 5px 1px;padding:20px 22px;\n  font-size:14.8px;color:var(--ink);line-height:1.9;position:relative;\n}\n.kg-home .quote span{display:block;margin-top:10px;font-size:12.5px;color:var(--warm)}\n.kg-home .nlwrap{position:relative;max-width:660px;margin:0 auto}\n.kg-home .nlframe{position:relative;height:1135px;overflow:hidden;border-radius:8px;\n  background:#fff;box-shadow:var(--shadow);border:1px solid rgba(43,33,24,.08)}\n.kg-home .nlform{position:absolute;inset:0;width:100%;height:100%;border:0;display:block;background:#fff}\n@media(min-width:345px){.kg-home .nlframe{height:1117px}}\n@media(min-width:367px){.kg-home .nlframe{height:1080px}}\n@media(min-width:378px){.kg-home .nlframe{height:1026px}}\n@media(min-width:389px){.kg-home .nlframe{height:1008px}}\n@media(min-width:467px){.kg-home .nlframe{height:988px}}\n@media(min-width:689px){.kg-home .nlframe{height:967px}}\n@media(max-width:520px){.kg-home .finale .char{display:none}}\n.kg-home .finale .nb{display:inline-block}\n.kg-home .honey{position:relative;padding:clamp(64px,9vw,124px) 0;text-align:center;z-index:1}\n.kg-home .honey .in{width:min(860px,90vw);margin-inline:auto;position:relative}\n.kg-home .honey .hkick{font-family:var(--mono)!important;font-size:11.5px;letter-spacing:.32em;color:var(--rose);margin-bottom:16px}\n.kg-home .honey h2{font-size:clamp(23px,3.3vw,35px);font-weight:900;color:var(--plum);line-height:1.5;margin-bottom:clamp(22px,3.6vw,38px);position:relative;display:inline-block}\n.kg-home .honey h2 .glow{color:var(--rose)}\n.kg-home .honey .hpic{width:min(700px,100%);margin:0 auto clamp(22px,3.6vw,36px);border-radius:14px;box-shadow:var(--shadow)}\n.kg-home .honey .hline{font-family:var(--heavy)!important;font-weight:900;color:var(--rose);font-size:clamp(19px,2.5vw,28px);line-height:1.55;margin-bottom:clamp(22px,3.4vw,34px);max-width:640px;margin-inline:auto}\n.kg-home .honey .hline .soft{color:var(--ink-soft)}\n@media(max-width:600px){.kg-home .honey .hpic{border-radius:10px}}\n.kg-home .finale{position:relative;padding:clamp(70px,10vw,140px) 0 clamp(60px,8vw,110px);text-align:center;z-index:1}\n.kg-home .finale .in{width:min(760px,90vw);margin-inline:auto;position:relative}\n.kg-home .finale .sheet{\n  background:var(--honey-soft);border-radius:8px;padding:clamp(34px,5vw,60px) clamp(24px,4vw,48px);\n  box-shadow:0 12px 30px -18px rgba(43,33,24,.45);position:relative;\n}\n.kg-home .finale h2{font-size:clamp(23px,3.2vw,32px);font-weight:900;color:var(--plum);margin-bottom:18px;line-height:1.45}\n.kg-home .finale p{font-size:clamp(15px,1.9vw,17px);line-height:1.95;color:var(--ink-soft);max-width:460px;margin:0 auto 28px}\n.kg-home .btn{display:inline-flex;align-items:center;gap:8px;background:var(--rose);color:#fff;font-size:16px;font-weight:700;padding:16px 34px;border-radius:999px;letter-spacing:.06em;box-shadow:0 12px 28px -10px rgba(209,75,99,.6);transition:filter .2s;\n  background-image:linear-gradient(to right,#D14B63,#FF7C99,#F4B79C,#EBE79D,#FF7C99,#D14B63);background-size:600% auto;background-position:right center;animation:btnGrad 6s linear infinite,btnPulse 2.5s ease-in-out infinite}\n.kg-home .btn:hover{filter:brightness(1.15)}\n@keyframes btnGrad{0%,100%{background-position:100% center}50%{background-position:0% center}}\n@keyframes btnPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.03)}}\n.kg-home .btn.ghost{background:transparent;background-image:none;animation:none;color:var(--plum);border:1.5px solid rgba(76,69,138,.4);box-shadow:none;font-weight:400}\n.kg-home .btn.ghost:hover{filter:none;transform:translateY(-2px)}\n.kg-home .btnrow{display:flex;flex-wrap:wrap;gap:13px;justify-content:center}\n.kg-home .fine{margin-top:16px;font-size:13px;color:var(--warm)}\n.kg-home .finale .char{position:absolute;right:-12%;bottom:-16px;width:clamp(86px,11vw,128px);z-index:2;filter:drop-shadow(0 10px 18px rgba(43,33,24,.28))}\n.kg-home footer{background:var(--kraft);border-top:1px solid rgba(160,130,110,.25);padding:clamp(40px,5vw,60px) 0 26px;position:relative;z-index:1}\n.kg-home .foot{width:min(1140px,91vw);margin-inline:auto;display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr;gap:clamp(20px,3vw,38px)}\n.kg-home .foot img{width:128px;margin-bottom:12px}\n.kg-home .foot p{font-size:13.5px;color:var(--warm);line-height:1.9}\n.kg-home .foot h4{font-family:var(--mono)!important;font-size:11px;letter-spacing:.18em;color:var(--rose);margin-bottom:12px;font-weight:400}\n.kg-home .foot ul{list-style:none;display:flex;flex-direction:column;gap:8px}\n.kg-home .foot a{font-size:14px;color:var(--ink-soft)}\n.kg-home .footend{width:min(1140px,91vw);margin:clamp(28px,4vw,40px) auto 0;padding-top:18px;border-top:1px dashed rgba(160,130,110,.3);display:flex;flex-wrap:wrap;gap:10px;justify-content:space-between;font-size:12.5px;color:var(--warm)}\n@media(max-width:900px){.kg-home .station .in{grid-template-columns:1fr;gap:30px}\n.kg-home .station.rev .in{direction:ltr}\n.kg-home .outputs{grid-template-columns:1fr 1fr}\n.kg-home .foot{grid-template-columns:1fr 1fr}\n.kg-home #tract,.kg-home #doglayer{display:none}\n.kg-home .nav ul{display:none}\n.kg-home .nav .freebtn{margin-left:auto;display:block}\n.kg-home .absorb-visual .polaroid.b{position:static;width:60%;margin:14px auto 0;transform:rotate(3deg)}\n\n}\n@media(max-width:900px){.kg-home .noise{left:2%;right:2%;width:96%}\n.kg-home .nz{max-width:30vw!important;transform:scale(.72);opacity:.4}\n.kg-home .nz.txt{font-size:10.5px;padding:6px 8px;max-width:33vw!important;opacity:.55}\n.kg-home .nz:nth-child(n+9){display:none}\n.kg-home .intake{min-height:auto;padding-top:clamp(56px,14vw,90px);padding-bottom:clamp(60px,14vw,110px)}\n.kg-home .intake .core{background:rgba(250,246,238,.9);border-radius:16px;padding:22px 14px}\n.kg-home .organ{grid-template-columns:auto 1fr;gap:14px}\n.kg-home .organ .fig{width:clamp(72px,18vw,100px)}\n\n}\n@media(max-width:560px){.kg-home .foot{grid-template-columns:1fr}\n.kg-home .outputs{grid-template-columns:1fr}\n.kg-home .intake h1{font-size:clamp(28px,8.4vw,40px)}\n\n}\n@media (prefers-reduced-motion:reduce){.kg-home .hl::after{transform:scaleX(1)}\n.kg-home .nz{display:none}\n.kg-home #tract,.kg-home #doglayer{display:none}\n\n}\n.kg-home .nlrow{display:flex;gap:8px;justify-content:center;align-items:stretch;flex-wrap:wrap;margin:4px auto 0;max-width:620px}\n.kg-home .nlrow input{flex:1 1 170px;min-width:0;height:50px;border-radius:999px;border:1.5px solid rgba(76,69,138,.35);background:#fff;padding:0 18px;font-size:15px;color:var(--ink);font-family:inherit;outline:none;box-shadow:0 8px 20px -14px rgba(43,33,24,.4);transition:border-color .2s}\n.kg-home .nlrow input::placeholder{color:rgba(90,78,63,.55)}\n.kg-home .nlrow input:focus{border-color:var(--plum)}\n.kg-home .nlrow input[name=first_name]{flex:0 1 150px}\n.kg-home .nlrow .btn{padding:0 24px;height:50px;font-size:15px;white-space:nowrap;border:0;cursor:pointer;font-family:inherit}\n.kg-home .nlnote{font-size:12.5px;color:var(--warm);margin:12px auto 0;line-height:1.8;max-width:620px}\n.kg-home .nlnote a{color:var(--plum);text-decoration:underline;text-underline-offset:3px;pointer-events:auto}\n.kg-home .nlrow-foot{margin-top:6px}\n@media(max-width:600px){.kg-home .nlrow-foot input[name=first_name]{flex:1 1 100%}\n.kg-home .nlrow-foot .btn{flex:1 1 100%;justify-content:center}\n.kg-home .tree-copy.c1 .nlrow input[name=first_name]{display:none}\n.kg-home .tree-copy.c1 .nlrow input[type=email]{flex:1 1 150px}\n.kg-home .tree-copy.c1 .nlrow .btn{flex:0 0 auto;padding:0 16px}\n.kg-home .tree-copy.c1 .nlnote{display:none}}\n.kg-home .nlrow-foot{max-width:560px}\n.kg-home form[data-kg-nl][hidden],.kg-home .nlok[hidden],.kg-home .nlerr[hidden]{display:none!important}\n.kg-home .nlok{max-width:620px;margin:6px auto 0;padding:13px 20px;border-radius:16px;background:#FFF7DB;border:1.5px solid rgba(243,195,76,.6);color:var(--ink);font-size:15px;font-weight:700;line-height:1.7;text-align:center}\n.kg-home .nlok b{display:block;font-weight:900}\n.kg-home .nlok span{display:block;margin-top:2px;font-size:13.5px;font-weight:500;color:var(--ink-soft)}\n.kg-home .nlerr{margin:6px auto 0;color:var(--rose);font-size:13.5px;font-weight:700;text-align:center}\n.kg-home #dogsign{opacity:0;pointer-events:none;transition:opacity .45s}\n.kg-home #dogsign.show{opacity:1;pointer-events:auto}\n.kg-home .tree-stage{--open:1}\n.kg-home #ambLayer{position:absolute;inset:0;pointer-events:none;will-change:opacity,transform}\n.kg-home #fragLayer{position:absolute;inset:0;pointer-events:none;--open:1}\n.kg-home .tc.frag.pic,.kg-home .tc.frag.logo{filter:grayscale(var(--open))}\n.kg-home .tc.frag{color:color-mix(in srgb,#8d8a86 calc(var(--open)*100%),var(--ink-soft))}\n.kg-home .tc.frag.sub{color:color-mix(in srgb,#8d8a86 calc(var(--open)*100%),var(--rose))}\n.kg-home .tc.frag.dust{color:color-mix(in srgb,#8d8a86 calc(var(--open)*100%),var(--warm))}\n.kg-home .tc.amb .t,.kg-home .tc.amb .h,.kg-home .tc.amb.word .t{color:#8d8a86}\n.kg-home .tree-copy h1 *,.kg-home .intake h1 *{font-family:var(--hand)!important;font-weight:400!important}\n\n\n.kg-home{position:relative;overflow:clip;display:block}\nbody:has(.kg-home){overflow-x:clip}\nbody:has(.kg-home) #content > .ast-container{max-width:none;padding-left:0;padding-right:0}\nbody:has(.kg-home):not(.kg-popup-ok) .elementor-popup-modal{opacity:0!important;visibility:hidden!important;pointer-events:none!important}\nbody:has(.kg-home).kg-popup-ok .elementor-popup-modal{transition:opacity .6s ease}\n<\/style>\n<div class=\"kg-home\">\n\n\n\n<div id=\"tract\"><\/div>\n<div id=\"doglayer\"><img decoding=\"async\" id=\"dog\" src=\"https:\/\/knowledgegut.com\/wp-content\/uploads\/2026\/09\/kgweb-kg_dog_run_t.webp\" alt=\"\"><a id=\"dogsign\" href=\"#subscribe2\">\u514d\u8cbb\u8a02\u95b1 \u2192<\/a><\/div>   <!-- 2026-09-27 \u5c0f\u8178\uff1a\u96fb\u8166\u7248\u8b93\u5927\u8178\u8209\u62db\u724c \u2192 2026-09-28 \u6539\u8209\u300c\u514d\u8cbb\u8a02\u95b1\u300d\uff08\u5168\u7ad9\u4e00\u500b\u52d5\u4f5c\uff09\uff0c\u7b2c\u4e00\u5c4f\u5148\u4e0d\u8209\u3001\u6ed1\u904e\u958b\u5834\u624d\u8209\uff0c\u9ede\u4e86\u6ed1\u5230\u9801\u5c3e\u524d\u7684\u8a02\u95b1\u8868\u55ae -->\n\n<div class=\"main\">\n\n<!-- \u2550\u2550\u2550\u2550 \u8a18\u61b6\u6a39\uff1a\u843d\u8449\u6563\u4e82 \u2192 \u6372\u52d5\u805a\u650f \u2192 \u9577\u6210\u5fc3\u667a\u5716\uff08\u8a18\u61b6\u6a39\u7b46\u8a18\u6cd5\uff09\u2550\u2550\u2550\u2550 -->\n<section class=\"tree\" id=\"tree\">\n  <div class=\"tree-stage\" id=\"stage\">\n    <svg class=\"tree-links\" id=\"branchLinks\"><\/svg>\n    <!-- 2026-09-25 \u5c0f\u8178\uff1a\u300c\u4e00\u9ede\u9032\u4f86\u5c31\u8981\u77e5\u9053\u662f\u5c0f\u8178\u7684\u7db2\u7ad9\uff0c\u6211\u672c\u4eba\u7684\u81c9\u8981\u4e00\u958b\u59cb\u5c31\u51fa\u73fe\uff0c\u5b57\u8981\u5c11\u300d\n         \uff0b\u300c\u7f6e\u4e2d\u7684\u90a3\u500b\u7248\u578b\u6bd4\u8f03\u597d\u770b\u300d\u2192 \u6587\u5b57\u7f6e\u4e2d\u3001\u843d\u8449\u5728\u56db\u5468\u98c4\uff0c\u5e95\u90e8\u539f\u672c\u7684 3D \u5c0f\u8178\u63db\u6210\u5979\u672c\u4eba\u7684\u53bb\u80cc\u7167\u7247\uff08\u624b\u6478\u624b\u81c2\u90a3\u5f35\uff09\u3002 -->\n    <div class=\"tree-copy c1 hero\" id=\"copy1\">\n      <div class=\"hero-text\">\n        <h1><span class=\"ez-toc-section\" id=\"%E5%97%A8%EF%BC%8C%E6%88%91%E6%98%AF%E5%B0%8F%E8%85%B8%E3%80%82\"><\/span>\u55e8\uff0c\u6211\u662f<span class=\"glow\">\u5c0f\u8178<\/span>\u3002<span class=\"ez-toc-section-end\"><\/span><\/h1>\n        <p class=\"role\">AI \u7b2c\u4e8c\u5927\u8166\u30fb\u77e5\u8b58\u7ba1\u7406\u8001\u5e2b<\/p>\n        <p class=\"line\">\u6559\u4f60\u904b\u7528 AI Agent \u628a\u77e5\u8b58\u8b8a\u8cc7\u7522\uff0c\u8b93\u7d93\u9a57\u53ef\u8907\u5229\u3002<\/p>   <!-- 2026-09-26 \u5c0f\u8178\u89aa\u5beb\uff1a\u958b\u5834\u7b2c\u4e09\u884c\u8981\u8b1b\u6e05\u695a\u300c\u6559\u4f60\u505a\u4ec0\u9ebc\u300d\uff0c\u4e0d\u53ea\u54c1\u724c\u7cbe\u795e -->\n        <form class=\"nlrow hero-cta\" id=\"subscribe\" action=\"https:\/\/join.knowledgegut.com\/join-newsletter\" method=\"get\" target=\"_blank\" rel=\"noopener\" data-kg-nl>   <!-- 2026-09-28 \u5c0f\u8178\uff1a\u53c3\u8003\u74e6\u57fa\uff0f\u96f7\u8499\uff0c\u958b\u5834\u90a3\u9846\u9023\u7d50\u6539\u6210\u4e00\u884c email \u8868\u55ae\uff08\u9001\u51fa\u76ee\u524d\u5e36\u53bb Systeme \u8a02\u95b1\u9801\u5b8c\u6210\uff1b\u771f\u6b63\u4e00\u6b65\u5b8c\u6210\u8981\u518d\u63a5 Systeme\uff0c\u898b\u4e0a\u7dda\u7d00\u9304\uff09 -->\n          <input type=\"text\" name=\"first_name\" placeholder=\"\u600e\u9ebc\u7a31\u547c\u4f60\" aria-label=\"\u7a31\u547c\" autocomplete=\"given-name\">\n          <input type=\"email\" name=\"email\" placeholder=\"\u4f60\u7684\u5e38\u7528 Email\" aria-label=\"Email\" required autocomplete=\"email\">\n          <button type=\"submit\" class=\"btn\">\u514d\u8cbb\u8a02\u95b1 \u2192<\/button>\n        <\/form><p class=\"nlok\" hidden><b>\ud83d\udc8c \u8a02\u95b1\u6210\u529f\uff01\u7b2c\u4e00\u5c01\u4fe1\u5df2\u7d93\u5bc4\u5230\u4f60\u7684\u4fe1\u7bb1\u3002<\/b><span>\u6c92\u770b\u5230\u7684\u8a71\uff0c\u7ffb\u4e00\u4e0b\u300c\u4fc3\u92b7\u5167\u5bb9\u300d\u6216\u5783\u573e\u4fe1\u4ef6\u3002<\/span><\/p><p class=\"nlerr\" hidden>Email \u597d\u50cf\u6253\u932f\u4e86\uff0c\u518d\u6aa2\u67e5\u4e00\u4e0b\u5594\u3002<\/p>\n        <p class=\"nlnote\">\u5df2\u6709 2,600+ \u4f4d\u8a02\u95b1\u8005\u30fb\u6bcf\u6708 2\uff5e4 \u5c01\uff0c\u5beb\u6211\u771f\u7684\u5728\u505a\u7684\u4e8b\u30fb\u96a8\u6642\u9000\u8a02<\/p>   <!-- 2026-09-28 \u5c0f\u8178\uff1a\u7b2c\u4e00\u5c4f\u53ea\u7559\u4e00\u500b\u52d5\u4f5c\u300c\u514d\u8cbb\u8a02\u95b1\u300d\uff08\u74e6\u57fa\uff0f\u96f7\u8499\u90fd\u9019\u6a23\uff09\uff0c\u514d\u8cbb\u8ab2\u53ea\u7559\u5728\u300c\u5f9e\u9019\u88e1\u958b\u59cb\u300d\u90a3\u6247\u9580 -->\n      <\/div>\n    <\/div>\n    <div class=\"tree-copy c2\" id=\"copy2\">\n      <div class=\"kick2\">HOW I CAN HELP \u00b7 \u4e09\u500b\u5927\u8166<\/div>\n      <h2><span class=\"ez-toc-section\" id=\"%E6%88%91%E5%8F%AF%E4%BB%A5%E6%80%8E%E9%BA%BC%E5%B9%AB%E4%BD%A0%EF%BC%9F\"><\/span>\u6211\u53ef\u4ee5<span class=\"glow\">\u600e\u9ebc\u5e6b\u4f60<\/span>\uff1f<span class=\"ez-toc-section-end\"><\/span><\/h2>\n      <p class=\"sub\" style=\"max-width:none\">\u4f60\u8981\u7684\u4e0d\u662f\u7b54\u6848\uff0c\u662f\u6709\u4eba\u966a\u4f60\u628a\u65b9\u6cd5\u627e\u51fa\u4f86\u3002<\/p>   <!-- 2026-09-29 \u5c0f\u8178\uff1a\u9019\u5340\u6539\u6210\u300c\u6211\u53ef\u4ee5\u600e\u9ebc\u5e6b\u4f60\uff1f\u300d\uff08\u53c3\u8003\u74e6\u57fa\uff09\uff1b\u526f\u6a19\u7528\u5979\u7684\u8a71\uff1a\u5b78\u54e1\u4e0d\u662f\u8981\u7b54\u6848\uff0c\u662f\u8981\u6709\u4eba\u966a\u4ed6\u4e00\u8d77\u627e\u5230\u65b9\u6cd5 -->\n    <\/div>\n    <img fetchpriority=\"high\" decoding=\"async\" class=\"tree-figure\" id=\"treeFig\" src=\"https:\/\/knowledgegut.com\/wp-content\/uploads\/2026\/09\/kgweb-kg-portrait-side-worried-v6-checked.webp\" alt=\"\u77e5\u8b58\u5305\u5c0f\u8178\u672c\u4eba\" width=\"514\" height=\"1000\">\n    <div class=\"say\" id=\"say0\" aria-hidden=\"true\"><span class=\"txt\" data-text=\"\u6211\u7684\u601d\u7dd2\u600e\u9ebc\u9019\u9ebc\u4e82\uff1f\u982d\u8166\u597d\u4e82\u5594\u3002\"><\/span><i class=\"cur\"><\/i><\/div>\n    <div class=\"say\" id=\"say\" aria-hidden=\"true\"><span class=\"txt\" data-text=\"\u5c0d\uff01\u77e5\u8b58\u7ba1\u7406\u5f8c\uff0c\u601d\u7dd2\u6e05\u6670\u591a\u4e86\ud83d\udc9b\"><\/span><i class=\"cur\"><\/i><\/div>   <!-- 2026-09-27 \u5c0f\u8178\uff1a\u958b\u5834\u82e6\u60f1\u4e00\u53e5\u3001\u8b8a\u4e7e\u6de8\u5f8c\u4e00\u53e5\uff0c\u6253\u5b57\u6a5f\u6548\u679c -->\n    <div class=\"dizzy\" id=\"dizzy\" aria-hidden=\"true\"><i>\u2731<\/i><i>\u25cc<\/i><i>\u2726<\/i><\/div>\n    <img decoding=\"async\" class=\"tree-figure fig2\" id=\"treeFig2\" src=\"https:\/\/knowledgegut.com\/wp-content\/uploads\/2026\/09\/kgweb-kg-portrait-side-smile-v6-checked.webp\" alt=\"\" width=\"514\" height=\"1000\" aria-hidden=\"true\">   <!-- 2026-09-27 \u5c0f\u8178\uff1a\u958b\u5834\u82e6\u60f1\u81c9\uff0c\u5f80\u4e0b\u6ed1\u9577\u6210\u7d50\u69cb\u6642\u6f38\u8b8a\u6210\u5fae\u7b11\uff08\u5169\u5f35\u540c\u69cb\u5716\u758a\u8457\u6de1\u5165\u6de1\u51fa\uff09 -->\n    <div class=\"tree-hint\" id=\"treeHint\">\u5f80\u4e0b\u6ed1\uff0c\u770b\u5b83\u5011\u9577\u6210\u4e00\u68f5\u6a39\u3000\u2193<\/div>\n    <div id=\"cardHost\"><\/div>\n  <\/div>\n<\/section>\n\n<!-- 2026-09-28 16:22 \u5c0f\u8178\uff1a\u300c\u76f4\u63a5\u62ff\u6389\u9019\u5340\u584a\u300d\u2192 \u4fe1\u4efb\u5217\uff083,000+ \u5f35\u77e5\u8b58\u5361\uff0f1,700+ \u5b78\u54e1\uff0f21+ \u6f14\u8b1b\uff0f2,600+ \u8a02\u95b1\uff09\u6574\u6bb5\u79fb\u9664\uff1b\u8a02\u95b1\u6578\u53ea\u7559\u958b\u5834\u5c0f\u5b57 -->\n\n<!-- \u2550\u2550\u2550\u2550 \u5b78\u54e1\u8aaa\uff082026-09-25 \u5c0f\u8178\uff1a\u964c\u751f\u4eba\u8981\u4e00\u773c\u770b\u5230\u300c\u6559\u4ec0\u9ebc\u300d\uff0b\u300c\u5225\u4eba\u600e\u9ebc\u8aaa\u300d\uff09\u2550\u2550\u2550\u2550\n     \u5168\u90e8\u662f\u5b78\u54e1\u539f\u8a71\uff08\u7701\u7565\u8655\u7528\u300c\u2026\u2026\u300d\uff0c\u4e0d\u6539\u5b57\uff09\uff0c\u4f86\u6e90\uff1a06 \u5b78\u54e1\u597d\u8a55\u7246 text-testimonials.json\u3001testimonials.json\uff08authorized:true\uff09\u3002\n     \u966a\u8dd1\u73ed\uff08AI \u00d7 123\uff09\u7b2c\u4e00\u5c46\u6709\u4eba\u8981\u6c42\u533f\u540d \u2192 \u4e00\u5f8b\u4e0d\u653e\u540d\u5b57\u3002\n     2026-09-25 \u665a \u5c0f\u8178\uff1a\u300c\u628a\u597d\u8a55\u7246\u7cbe\u9078\u5e7e\u500b\u62ff\u904e\u4f86\uff0c\u653e\u4e00\u4e9b\u5f88\u5b8c\u6574\u7684\u56de\u994b\u6587\u300d\u2192 \u516d\u5247\u5b8c\u6574\u5fc3\u5f97\uff08\u5168\u6587\u4e0d\u522a\u5b57\uff0c\u53ea\u7528\u9ec3\u5e95\u7dda\u6a19\u91cd\u9ede\uff09\u3002\n     \u6311\u7684\u662f\u807d\u5b8c\u8ab2\u3001\u9084\u5728\u7336\u8c6b\u7684\u4eba\u6700\u5728\u610f\u7684\u4e8b\uff1a\u6703\u4e0d\u6703\u8b8a\u8f15\u9b06\uff0fAI \u771f\u7684\u6709\u5e6b\u4e0a\u5fd9\u55ce\uff0f\u6211\u4e0d\u64c5\u9577\u6574\u7406\u4e5f\u505a\u5f97\u5230\u55ce\uff0f\u503c\u4e0d\u503c\u5f97\u3002\n     \ud83d\udd34 \u5361\u7247\u662f\u300c\u5716\u7247\u300d\uff1ajustfont \u56db\u5206\u7cd6\u4e00\u9801\u4e0a\u9650 744 \u5b57\u3001\u9801\u9762\u4e0a\u6240\u6709\u6587\u5b57\u90fd\u7b97\uff0c\u5b8c\u6574\u5fc3\u5f97\u7528\u6587\u5b57\u653e 2 \u5247\u5c31\u8cbc\u4e0a\u9650\u3002\n        \u6240\u4ee5\u7528 wp\/voices_cards.py \u5728\u5979\u7db2\u7ad9\u4e0a\u7528\u540c\u4e00\u5957\u7db2\u9801\u5b57\u578b\u756b\u597d\u622a\u5716\uff0c\u5168\u6587\u5beb\u9032 alt\u3002\u63db\u5fc3\u5f97\uff1a\u6539\u90a3\u652f\u7684 PICK \u518d\u8dd1 --upload\u3002 -->\n<section class=\"voices\" id=\"voices\">\n  <div class=\"in\">\n    <div class=\"vkick\">VOICES \u00b7 \u5b78\u54e1\u8aaa<\/div>\n    <h2><span class=\"ez-toc-section\" id=\"%E4%B8%8A%E9%81%8E%E8%AA%B2%E7%9A%84%E4%BA%BA%EF%BC%8C%E9%80%99%E6%A8%A3%E8%AA%AA%E3%80%82\"><\/span>\u4e0a\u904e\u8ab2\u7684\u4eba\uff0c<span class=\"glow\">\u9019\u6a23\u8aaa<\/span>\u3002<span class=\"ez-toc-section-end\"><\/span><\/h2>\n    <p class=\"vsub\">\u6458\u81ea\u5b78\u54e1\u81ea\u5df1\u5beb\u7684\u8ab2\u7a0b\u5fc3\u5f97\u3002<\/p>\n    <div class=\"vgrid\">\n      <!-- VOICES:START -->\n      <div class=\"vcol\"><figure class=\"v img\"><img loading=\"lazy\" src=\"https:\/\/knowledgegut.com\/wp-content\/uploads\/2026\/09\/kg-course-review-01-1.webp\" width=\"330\" height=\"549\" loading=\"lazy\" decoding=\"async\" alt=\"\u77e5\u8b58\u5305\u5c0f\u8178\u5b78\u54e1\u5fc3\u5f97\uff5cHUANG XIN HUI\uff5c\u300a\u6709\u6548\u8f38\u5165 \u221e \u5feb\u901f\u8f38\u51fa\u300b\uff5c5 \u661f\u8a55\u50f9\uff1a\u8b1d\u8b1d\u5c0f\u8178\u771f\u8aa0\u4e0d\u85cf\u79c1\u5730\u5206\u4eab\uff0c\u300a\u6709\u6548\u8f38\u5165 \u221e \u5feb\u901f\u8f38\u51fa\u300b\u8ab2\u7a0b\u5e36\u7d66\u6211\u4e00\u500b\u91cd\u8981\u7684\u555f\u767c\uff1a\u5feb\u901f\u8f38\u51fa\u662f\u964d\u4f4e\u8cc7\u8a0a\u7126\u616e\u611f\u7684\u95dc\u9375\u3002\u904e\u53bb\u6211\u6642\u5e38\u5bb9\u6613\u7cfe\u7d50\u65bc\u9700\u8981\u5c07\u7b46\u8a18\u6574\u7406\u5f97\u5f88\u6709\u689d\u7406\uff0c\u8a66\u5716\u5c07\u5b78\u7fd2\u5167\u5bb9\u505a\u6210\u5b8c\u7f8e\u7684\u6c38\u4e45\u5361\u7247\uff0c\u4f46\u9019\u7a2e\u904e\u5ea6\u7684\u8ffd\u6c42\u5b8c\u7f8e\u53cd\u800c\u8b93\u77e5\u8b58\u8f49\u5316\u7684\u6548\u7387\u4e0b\u964d\uff0c\u7121\u5f62\u4e2d\u589e\u52a0\u4e86\u8166\u888b\u7684\u58d3\u529b\u8207\u8ca0\u64d4\u3002\u5728\u8ab2\u7a0b\u4e2d\u7d93\u7531\u5c0f\u8178\u7684\u5206\u4eab\u53ca\u771f\u5be6\u5c55\u73fe\u5979\u7684 Heptabase \u5167\u5bb9\uff0c\u9ede\u9192\u4e86\u6211\u91cd\u9ede\u4e0d\u5728\u65bc\u5361\u7247\u6a19\u984c\u7684\u8a2d\u8a08\u6216\u5167\u5bb9\u6709\u591a\u5b8c\u6574\uff0c\u800c\u662f\u5728\u65bc\u5c07\u8166\u4e2d\u7684\u60f3\u6cd5\u53ca\u8ab2\u7a0b\u7684\u6536\u7a6b\u8fc5\u901f\u5316\u70ba\u7b46\u8a18\u8207\u884c\u52d5\u8a08\u5283\u3002\u9019\u6a23\u7684\u65b9\u5f0f\u53ef\u4ee5\u5e6b\u52a9\u6211\u66f4\u9ad8\u6548\u5730\u8655\u7406\u8cc7\u8a0a\uff0c\u4e5f\u8b93\u5b78\u7fd2\u8b8a\u5f97\u8f15\u9b06\u800c\u6709\u6210\u6548\uff0c\u975e\u5e38\u611f\u8b1d\u5c0f\u8178\uff5e\"><\/figure><figure class=\"v img\"><img loading=\"lazy\" src=\"https:\/\/knowledgegut.com\/wp-content\/uploads\/2026\/09\/kg-course-review-02-1.webp\" width=\"330\" height=\"380\" loading=\"lazy\" decoding=\"async\" alt=\"\u77e5\u8b58\u5305\u5c0f\u8178\u5b78\u54e1\u5fc3\u5f97\uff5c\u9673\u975c\uff5c\u300a\u6709\u6548\u8f38\u5165 \u221e \u5feb\u901f\u8f38\u51fa\u300b\uff5c5 \u661f\u8a55\u50f9\uff1a\u8ddf\u5c0f\u8178\u76f8\u53cd\uff0c\u4f5c\u70ba\u4e00\u500b\u76f8\u7576\u8a0e\u53ad\u6574\u7406\u7684\u4eba\uff08\u4e0d\u7ba1\u5be6\u9ad4\u6216\u975e\u5be6\u9ad4\uff09\uff0c\u7b2c\u4e00\u6b21\u89ba\u5f97\u6216\u8a31\u6211\u4e5f\u53ef\u4ee5\u628a\u81ea\u5df1\u96fb\u8166\u88e1\u7684\u5404\u7a2e\u8a0a\u606f\u66f4\u6709\u6548\u5730\u6574\u7406\uff1b\u4e5f\u5f88\u8208\u596e\u53ef\u4ee5\u8a8d\u8b58\u65b0\u7684\u5de5\u5177\uff08\u5b8c\u5168\u662f\u4e00\u500b\u6c92\u6709\u5728\u4f7f\u7528\u751a\u81f3\u8a8d\u8b58\u65b0\u5de5\u5177\u7684\u8001\u6d3e\u4eba...&gt;&lt;\uff09\uff01  \u975e\u5e38\u8b1d\u8b1d\u5c0f\u8178\u7121\u79c1\u7684\u5206\u4eab\uff0c\u807d\u5c0f\u8178\u8aaa\u8a71\u76f8\u7576\u8212\u670d\uff0c\u5c0f\u8178\u7684\u771f\u8aa0\u8ddf\u71b1\u60c5\u7121\u50f9\uff5e\uff01\u63a8\u63a8\uff01\"><\/figure><\/div>\n      <div class=\"vcol\"><figure class=\"v img\"><img loading=\"lazy\" src=\"https:\/\/knowledgegut.com\/wp-content\/uploads\/2026\/09\/kg-course-review-03-1.webp\" width=\"330\" height=\"662\" loading=\"lazy\" decoding=\"async\" alt=\"\u77e5\u8b58\u5305\u5c0f\u8178\u5b78\u54e1\u5fc3\u5f97\uff5c\u6f58\u627f\u51a0\uff5c\u300a\u6709\u6548\u8f38\u5165 \u221e \u5feb\u901f\u8f38\u51fa\u300b\uff5c5 \u661f\u8a55\u50f9\uff1a\u6211\u662f\u5f9eThread\u7684\u7121\u610f\u9593\u6ed1\u5230\u5c0f\u8178\u7684\u6587\u7ae0\uff0c\u4e5f\u8a31\u672c\u8eab\u662f\u8eab\u5fc3\u9748\u5c0e\u5e2b\u7684\u95dc\u4fc2\uff0c\u6240\u4ee5\u7576\u4e0b\u76f4\u89ba\u544a\u8a34\u6211\u4e00\u5b9a\u8981\u5831\u540d\u5c0f\u8178\u7684\u8ab2\u7a0b\uff0c\u5f8c\u4f86\u4e0a\u5b8c\u8ab2\u7a0b\u4e4b\u5f8c\uff0c\u6211\u7d42\u65bc\u660e\u767d\u70ba\u4ec0\u9ebc\u4e86\uff01  \u56e0\u70ba\u6211\u672c\u8eab\u5c31\u6709\u5728\u4f7f\u7528Notion\u5728\u5e6b\u6211\u81ea\u5df1\u6574\u7406\u96f6\u788e\u8ddf\u788e\u7247\u5316\u8cc7\u8a0a\uff0c\u4f46\u7e3d\u89ba\u5f97\u5c11\u4e86\u4e9b\u4ec0\u9ebc\uff0c\u76f4\u5230\u4e0a\u5b8c\u8ab2\uff0c\u624d\u767c\u73fe\u9019\u6839\u672c\u5c31\u662f\u6211\u8981\u7684\uff0c\u56e0\u70ba\u7576\u4e2d\u7d50\u5408\u4e86\u8166\u79d1\u5b78\u3001\u5fc3\u667a\u5716\u4ee5\u53ca\uff21\uff29\u7684\u6574\u7406\uff0c\u76f4\u63a5\u5927\u5927\u5730\u7bc0\u7701\u4e86\u975e\u5e38\u591a\u505a\u7b46\u8a18\u7684\u6642\u9593\uff0c\u8eab\u70ba\u4e00\u4f4d\u73fe\u4ee3\u7684\u77e5\u8b58\u50b3\u905e\u8005\uff0c\u5be6\u5c6c\u662f\u4e00\u5ea7\u73cd\u8cb4\u7684\u5bf6\u85cf\uff0c\u96d6\u7136\u4e0a\u8ab2\u7576\u5929\u8001\u5e2b\u6709\u4e9b\u7dca\u5f35\uff0c\u4e0d\u904e\u770b\u5f97\u51fa\u4f86\u662f\u505a\u4e86\u8a31\u591a\u4e8b\u524d\u6e96\u5099\uff0c\u8001\u5e2b\u672c\u8eab\u4e5f\u975e\u5e38\u5730\u5e73\u6613\u8fd1\u4eba\uff0c\u4e00\u76f4\u8981\u81ea\u7a31\u81ea\u5df1\u53ea\u662f\u5e2b\u59d0\uff38\uff24\uff24\u6211\u60f3\u9019\u9ede\u5c31\u4e0d\u7528\u904e\u5ea6\u8b19\u865b\u4e86\uff0c\u56e0\u70ba\u805e\u9053\u6709\u5148\u5f8c\uff0c\u8853\u696d\u6709\u5c08\u653b\uff0c\u81f3\u5c11\u5728Heptabase\u4f60\u5c31\u662f\u6211\u7684\u8001\u5e2b\u4ee5\u53ca\u5f15\u8def\u4eba\uff0c\u671f\u5f85\u4f60\u627e\u5230\u81ea\u5df1\u7684\u81ea\u6211\u98a8\u683c\uff0c\u6301\u7e8c\u63a2\u7d22\u81ea\u6211\uff0c\u5c07\u81ea\u5df1\u7684\u7279\u9577\u653e\u5927\uff0c\u76e1\u60c5\u5730\u7dbb\u653e\u5149\u5f69\u5427\uff01\"><\/figure><figure class=\"v img\"><img loading=\"lazy\" src=\"https:\/\/knowledgegut.com\/wp-content\/uploads\/2026\/09\/kg-course-review-04-1.webp\" width=\"330\" height=\"266\" loading=\"lazy\" decoding=\"async\" alt=\"\u77e5\u8b58\u5305\u5c0f\u8178\u5b78\u54e1\u5fc3\u5f97\uff5c\u966a\u8dd1\u73ed\u5b78\u54e1\uff5cAI \u00d7 123 \u5927\u8166\u966a\u8dd1\u5927\u8ab2\uff5c5 \u661f\u8a55\u50f9\uff1aCodex \u548c Claude Code \u611f\u89ba\u5f88\u8907\u96dc\uff0c\u807d\u5c0f\u8178\u89e3\u6790\u5b8c\u6bd4\u8f03\u6c92\u9019\u9ebc\u964c\u751f\u3002\u6015\u5efa\u7acb\u6b65\u9a5f\u5f88\u8907\u96dc\uff0c\u4f46\u5c0f\u8178\u89e3\u91cb\u62c6\u89e3\u5b8c\uff0c\u7a81\u7136\u89ba\u5f97\u6c92\u9019\u9ebc\u56f0\u96e3\u57f7\u884c\u3002\u7269\u8d85\u6240\u503c\uff01\u8b1d\u8b1d\u5c0f\u8178\u542b\u91d1\u91cf\u8d85\u9ad8\uff5e\"><\/figure><\/div>\n      <div class=\"vcol\"><figure class=\"v img\"><img loading=\"lazy\" src=\"https:\/\/knowledgegut.com\/wp-content\/uploads\/2026\/09\/kg-course-review-05-1.webp\" width=\"330\" height=\"521\" loading=\"lazy\" decoding=\"async\" alt=\"\u77e5\u8b58\u5305\u5c0f\u8178\u5b78\u54e1\u5fc3\u5f97\uff5c\u5f35\u60df\u6b3d\uff5c\u300a\u6709\u6548\u8f38\u5165 \u221e \u5feb\u901f\u8f38\u51fa\u300b\uff5c5 \u661f\u8a55\u50f9\uff1a\u521d\u6b21\u63a5\u89f8heptabase\uff0c\u5f88\u611f\u8b1d\u6709\u5927\u5e2b\u59d0\u5c0f\u8178\u76847\u5929\u514d\u8cbb\u8ab2\u7a0b\uff0c\u5e36\u6211\u4e00\u6b65\u6b65\u4e86\u89e3heptabase\u7684\u8a2d\u5b9a\uff0c\u4e5f\u85c9\u7531\u5b8c\u6210\u6bcf\u5929\u4f5c\u696d\u4f86\u638c\u63e1\u6280\u5de7\u3002\u5f8c\u4f86\u53c8\u767c\u73fe\u5927\u5e2b\u59d0\u6709\u5feb\u901f\u8f38\u51fa\u8ab2\u7a0b\uff0c\u7acb\u99ac\u958b\u59cb\u4e0a\u8ab2\u3002\u6df1\u5165\u6dfa\u51fa\u7684\u6559\u5b78\uff0c\u4e5f\u8b93\u6211\u53ef\u4ee5\u958b\u59cb\u6574\u7406\u5c6c\u65bc\u81ea\u5df1\u7684\u7b2c\u4e8c\u5927\u8166\u3002\u4ee5\u524d\u9700\u8981\u82b1\u5f88\u591a\u6642\u9593\u6574\u7406\uff0c\u4f46\u6709\u4e86AI\u7684\u5e6b\u52a9\uff0c\u53ef\u4ee5\u66f4\u5feb\u901f\u7684\u8f38\u5165\u77e5\u8b58\u3002\u800c\u5c0d\u65bc\u672a\u4f86\u7684\u81ea\u5df1\uff0c\u4e5f\u80fd\u66f4\u6709\u6548\u7387\u7684\u627e\u5230\u9748\u611f\u4e26\u8f38\u51fa\u3002\u6709\u4e86\u81ea\u5df1\u7684\u77e5\u8b58\u9ad4\u7cfb\uff0c\u5c31\u50cf\u5927\u5e2b\u59d0\u8aaa\u5230\u7684\u300c\u505a\u4eba\u7684\u5e95\u6c23\u300d\uff0c\u53ef\u4ee5\u8b93\u81ea\u5df1\u5927\u5e45\u63d0\u5347\u5de5\u4f5c\u6548\u7387\u3002\u611f\u8b1d\u5c0f\u8178\u5927\u5e2b\u59d0\u7528\u5fc3\u88fd\u4f5c\u7684\u8ab2\u7a0b\uff0c\u771f\u7684\u7372\u76ca\u826f\u591a\u3002\"><\/figure><figure class=\"v img\"><img loading=\"lazy\" src=\"https:\/\/knowledgegut.com\/wp-content\/uploads\/2026\/09\/kg-course-review-06-1.webp\" width=\"330\" height=\"464\" loading=\"lazy\" decoding=\"async\" alt=\"\u77e5\u8b58\u5305\u5c0f\u8178\u5b78\u54e1\u5fc3\u5f97\uff5c\u5690\u5690\u770b\uff5c\u300a\u6709\u6548\u8f38\u5165 \u221e \u5feb\u901f\u8f38\u51fa\u300b\uff5c5 \u661f\u8a55\u50f9\uff1a\u7b2c\u4e00\u6b21\u770b\u5230\u8b93\u6211\u5b8c\u5168\u4e0d\u6703\u60f3\u7761\u89ba\u7684\u8ab2\uff0c\u9019\u6839\u672c\u662f\u8b1b\u5e2b\u696d\u754c\u7684\u8d85\u7d1a\u65b0\u4eba\u5427\uff0c\u4e0a\u8ab2\u597d\u807d\u597d\u73a9\u53c8\u6709\u6599\uff0c\u76f4\u63a5\u7d66\u6211\u5011\u4e00\u500b\u6700\u5feb\u3001\u6700\u65b9\u4fbf\uff0c\u4e26\u4e14\u4e5f\u5beb\u5f97\u975e\u5e38\u5b8c\u6574\u53c8\u5be6\u7528\u7684\u6a5f\u5668\u4eba\uff0c\u6c92\u8a55\u50f9\u7684\u540c\u5b78\u771f\u7684\u8981\u8a55\u50f9\u4e00\u4e0b\uff0c\u5927\u5bb6\u4e00\u8d77\u7528\u5c0f\u8178\u6559\u5b78\u7684\u5167\u5bb9\u4f86\u9054\u6210\u4e0b\u73ed\u5f8c\u7684\u5275\u4f5c\u5922\uff01  \u9019\u500b\u8ab2\u7a0b\u628a\u6709\u6548\u8f38\u5165\u8207\u5feb\u901f\u8f38\u51fa\u5169\u5927\u9818\u57df\u89e3\u91cb\u5730\u8d85\u7d1a\u6e05\u695a\uff0c\u6211\u8cb7\u904e\u5e02\u9762\u4e0a\u4e00\u5927\u5806\u8ab2\uff0c\u9019\u5802\u50f9\u683c\u6559\u9019\u4e9b\u5167\u5bb9\uff0c\u61c9\u8a72\u6bd4\u6eff\u591a\u696d\u754c\u5927\u5e2b\u9084\u8981\u53b2\u5bb3\u4e86\uff0c\u671f\u5f85\u5c0f\u8178\u672a\u4f86\u767c\u5c55\uff01  \u8b1d\u8b1d\u59b3\u9019\u9ebc\u7528\u5fc3\u6559\u5b78\u3002\"><\/figure><\/div>\n      <!-- VOICES:END -->\n    <\/div>\n    <a class=\"vmore\" href=\"https:\/\/student.knowledgegut.com\/wall-of-love\/\" target=\"_blank\" rel=\"noopener\">\u770b\u66f4\u591a\u5b78\u54e1\u56de\u994b \u2192<\/a>\n  <\/div>\n<\/section>\n\n<!-- \u2550\u2550\u2550\u2550 \u7ad9 3 \u00b7 \u6211\u7684\u89e3\u6cd5\uff0b\u514d\u8cbb\u5165\u9580 \u5408\u4e00\uff082026-09-28 \u5c0f\u8178\uff1a\u300c123 \u5927\u8166\u300d\u8ddf\u300c\u514d\u8cbb\u5165\u9580\u300d\u5169\u584a\u592a\u5206\u6563\uff0c\u5408\u6210\u4e00\u584a\u3001\u4e00\u500b\u756b\u9762\u770b\u5230\u6a19\u984c\uff0f\u5167\u6587\uff0f\u8cc7\u6599\uff0f\u6309\u9215\uff1b\n     \u514d\u8cbb\u8ab2\u63db\u6210\u5979\u7684\u4e3b\u529b\u514d\u8cbb\u8ab2\u300a7 \u5929\u4e0a\u624b Heptabase \u5de5\u4f5c\u574a\u300b\u653e\u5728\u6700\u4e0b\u9762\u7576\u9019\u4e00\u5c4f\u7684\u52d5\u4f5c\u3002\u8ab2\u7a0b\u5167\u5bb9\u7167 join.knowledgegut.com\/heptabase-7-days-workshop \u9801\u9762\u5be6\u5beb\u3001\u4e0d\u7de8\uff1b\n     \u300c1,600+ \u4eba\u5df2\u9818\u53d6\u300d\uff1dSysteme \u6a19\u7c64\u300cEEC\uff5c7 \u5929 Heptabase \u5de5\u4f5c\u574a\u300d\u5be6\u6578 1,643\uff082026-09-28 API \u9010\u9801\u6578\uff09\u2550\u2550\u2550\u2550 -->\n<section class=\"station merged\" id=\"myway\">\n  <div class=\"in\">\n    <div>\n      <div class=\"st-label\"><span class=\"en\">MY WAY \u00b7 \u6211\u7684\u89e3\u6cd5<\/span><\/div>\n      <h2><span class=\"ez-toc-section\" id=\"%E9%A4%B5%E4%BA%86_AI_800_%E4%BB%BD%E8%B3%87%E6%96%99%EF%BC%8C_%E4%B8%80%E4%BB%BD%E4%B9%9F%E6%B2%92%E8%AE%8A%E6%88%90%E4%BD%A0%E7%9A%84%E3%80%82\"><\/span>\u9935\u4e86 AI 800 \u4efd\u8cc7\u6599\uff0c<br><span class=\"glow\">\u4e00\u4efd\u4e5f\u6c92\u8b8a\u6210\u4f60\u7684<\/span>\u3002<span class=\"ez-toc-section-end\"><\/span><\/h2>\n      <p>\u6211\u4e09\u5341\u6b72\u90a3\u5e74\uff0c\u4e00\u672c\u66f8\u90fd\u6c92\u6709\u8b80\u5b8c\u904e\u3002\u6539\u8b8a\u7684\u4e0d\u662f\u6211\u8b8a\u81ea\u5f8b\u4e86\uff0c\u662f\u6211\u7d42\u65bc\u627e\u5230\u4e00\u7a2e\u65b9\u5f0f\uff0c\u8b93\u77e5\u8b58\u81ea\u5df1\u9023\u5728\u4e00\u8d77\u3002<\/p>\n      <p>\u6240\u4ee5\u6211\u628a\u5b83\u62c6\u6210\u4e09\u500b\u5927\u8166\uff1a<b>\u539f\u751f\u5927\u8166<\/b>\u60f3\u5f97\u6e05\u695a\u3001<b>\u77e5\u8b58\u5eab<\/b>\u5b58\u5f97\u6f02\u4eae\u3001<b>AI \u5927\u8166<\/b>\u7528\u5f97\u5230\u4f4d\u3002\u73fe\u5728\u6211\u7684\u767d\u677f\u4e0a\u6709\u4e09\u5343\u591a\u5f35\u5361\uff0c\u5b83\u5011\u6703\u81ea\u5df1\u9577\u51fa\u65b0\u7684\u6771\u897f\u7d66\u6211\u3002<\/p>\n      <div class=\"brainrow\">\n        <div><img decoding=\"async\" src=\"https:\/\/knowledgegut.com\/wp-content\/uploads\/2026\/09\/kgweb-brain-b1.webp\" alt=\"\u7b2c\u4e00\u5927\u8166\uff1a\u539f\u751f\u5927\u8166\"><b>\u7b2c\u4e00\u5927\u8166<\/b><span>\u539f\u751f\u5927\u8166<\/span><\/div>\n        <div><img decoding=\"async\" src=\"https:\/\/knowledgegut.com\/wp-content\/uploads\/2026\/09\/kgweb-brain-b2-v2.webp\" alt=\"\u7b2c\u4e8c\u5927\u8166\uff1a\u77e5\u8b58\u5eab\"><b>\u7b2c\u4e8c\u5927\u8166<\/b><span>\u77e5\u8b58\u5eab<\/span><\/div>\n        <div><img decoding=\"async\" src=\"https:\/\/knowledgegut.com\/wp-content\/uploads\/2026\/09\/kgweb-brain-b3-chrome-wave.webp\" alt=\"\u7b2c\u4e09\u5927\u8166\uff1aAI \u5927\u8166\"><b>\u7b2c\u4e09\u5927\u8166<\/b><span>AI \u5927\u8166<\/span><\/div>\n      <\/div>\n    <\/div>\n    <div class=\"absorb-visual\">\n      <div class=\"grains\" id=\"grains\"><\/div>\n        <div class=\"grains front\" id=\"grainsFront\"><\/div>\n      <div class=\"polaroid a\" style=\"margin-inline:auto\">\n        <span class=\"tape\"><\/span>\n        <img decoding=\"async\" src=\"https:\/\/knowledgegut.com\/wp-content\/uploads\/2026\/09\/kgweb-whiteboard.webp\" alt=\"\u5c0f\u8178\u7684 Heptabase \u767d\u677f\">\n        <span class=\"cap\">\u6211\u7684\u7b2c\u4e8c\u5927\u8166<\/span>\n      <\/div>\n      <div class=\"polaroid b tight\"><span class=\"tape cool\"><\/span><img decoding=\"async\" src=\"https:\/\/knowledgegut.com\/wp-content\/uploads\/2026\/09\/kgweb-workshop.webp\" alt=\"Heptabase \u5de5\u4f5c\u574a\u73fe\u5834\"><\/div>\n    <\/div>\n    <div class=\"freecard\" id=\"freebox\">\n      <div class=\"fc-body\">\n        <div class=\"fc-kick\">FREE \u00b7 \u514d\u8cbb\u5165\u9580\u8ab2<\/div>\n        <b class=\"fc-title\">\u300a7 \u5929\u4e0a\u624b Heptabase \u5de5\u4f5c\u574a\u300b<\/b>\n        <p class=\"fc-sub\">\u6bcf\u5929\u4e00\u5c01\u6559\u5b78\u4fe1\u3001\u6bcf\u5929 10 \u5206\u9418\uff0c\u8ddf\u8457\u505a 7 \u5929\uff0c\u7b2c\u4e8c\u5927\u8166\u7684\u57fa\u5e95\u5c31\u9577\u51fa\u4f86\u3002\u4e0d\u9700\u8981\u4efb\u4f55\u57fa\u790e\u3002<\/p>\n        <ul class=\"fc-days\" aria-label=\"\u4e03\u5929\u4efb\u52d9\">\n          <li><i>1<\/i>\u5c0e\u822a\u5730\u5716<\/li><li><i>2<\/i>\u5922\u60f3\u677f<\/li><li><i>3<\/i>\u9748\u611f\u5305<\/li><li><i>4<\/i>\u611f\u6069\u65e5\u8a18<\/li><li><i>5<\/i>\u7d44\u7e54\u5716<\/li><li><i>6<\/i>\u95b1\u8b80\u7b46\u8a18<\/li><li><i>7<\/i>AI \u6458\u8981<\/li>\n        <\/ul>\n      <\/div>\n      <div class=\"fc-act\">\n        <a class=\"btn\" href=\"https:\/\/join.knowledgegut.com\/heptabase-7-days-workshop\" target=\"_blank\" rel=\"noopener\">\u514d\u8cbb\u9818\u53d6 7 \u5929\u8ab2 \u2192<\/a>\n        <span class=\"fc-note\">\u5df2\u6709 1,600+ \u4eba\u9818\u53d6\u30fb\u96a8\u6642\u9000\u8a02<\/span>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- \u2550\u2550\u2550\u2550 \u91c0\u871c\u529b\uff08\u7b2c\u4e8c\u9801\uff092026-09-26 \u5c0f\u8178\uff1a\u91c0\u871c\u529b\u653e\u7b2c\u4e8c\u9801\uff0c\u7528\u92b7\u8b1b 3D \u793a\u610f\u5716\uff0b\u5b9a\u7fa9\u53e5\uff0b\u91d1\u53e5\uff0b10\/1 \u5831\u540d \u2550\u2550\u2550\u2550 -->\n<section class=\"honey deeper\">\n  <div class=\"in\">\n    <div class=\"hkick\">GO DEEPER \u00b7 \u60f3\u66f4\u6df1\u5165\uff1f<\/div>\n    <h2><span class=\"ez-toc-section\" id=\"%E6%8A%8A%E5%AD%B8%E9%81%8E%E3%80%81%E6%83%B3%E9%81%8E%E3%80%81%E6%B4%BB%E9%81%8E%E7%9A%84%E4%B8%80%E5%88%87%EF%BC%8C_%E9%87%80%E6%88%90%E4%BD%A0%E7%9A%84%E4%BD%9C%E5%93%81%E3%80%82\"><\/span>\u628a\u5b78\u904e\u3001\u60f3\u904e\u3001\u6d3b\u904e\u7684\u4e00\u5207\uff0c<br>\u91c0\u6210<span class=\"glow\">\u4f60\u7684\u4f5c\u54c1<\/span>\u3002<span class=\"ez-toc-section-end\"><\/span><\/h2>\n    <p class=\"hsub\">\u9019\u662f\u300aAI \u982d\u8166\u5347\u7d1a 321\u300b\u5728\u505a\u7684\u4e8b\uff1a\u539f\u751f\u5927\u8166\u60f3\u5f97\u6e05\u695a\u3001\u77e5\u8b58\u5eab\u5b58\u5f97\u6f02\u4eae\u3001AI \u5927\u8166\u7528\u5f97\u5230\u4f4d\u3002<\/p>   <!-- 2026-09-29\uff1a\u5c0d\u5916\u8ab2\u540d\uff1dAI \u982d\u8166\u5347\u7d1a 321\uff08Brain 123 \u53ea\u7576\u5167\u90e8\u4ee3\u865f\uff0c\u5c0d\u5916\u4e0d\u51fa\u73fe\uff09 -->\n    <img loading=\"lazy\" class=\"hpic\" src=\"https:\/\/knowledgegut.com\/wp-content\/uploads\/2026\/09\/kgweb-honey-diagram.webp\" width=\"900\" height=\"507\" loading=\"lazy\" decoding=\"async\" alt=\"\u91c0\u871c\u529b\u793a\u610f\u5716\uff1aAI \u5de5\u8702\u66ff\u4f60\u63a1\u82b1\uff08\u8490\u96c6\u8cc7\u8a0a\uff09\uff0c\u82b1\u871c\u9032\u5230\u8702\u5de2\uff1d\u4f60\u7684\u7b2c\u4e8c\u5927\u8166\uff0c\u6700\u5f8c\u7531\u4f60\u91c0\u6210\u6587\u7ae0\u3001\u77ed\u5f71\u97f3\u3001\u7c21\u5831\u3001\u4e00\u9580\u8ab2\u3001\u4e00\u5957\u751f\u6d3b\u7cfb\u7d71\u3002\">\n    <p class=\"hline\">AI \u6703\u63a1\u82b1\uff0c<span class=\"soft\">\u4f46\u871c\u53ea\u6709\u4f60\u91c0\u5f97\u51fa\u4f86\u3002<\/span><\/p>\n    <div class=\"btnrow\">\n      <a class=\"btn\" href=\"https:\/\/brain123.knowledgegut.com\/\" target=\"_blank\" rel=\"noopener\">\u770b\u8ab2\u7a0b\u65b9\u6848 \u2192<\/a>   <!-- 2026-09-29\uff1a\u92b7\u552e\u9801\uff1dbrain123.knowledgegut.com\uff08\u539f\u6307\u820a\u5e73\u53f0 Teachify\uff09-->\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- \u2550\u2550\u2550\u2550 \u7d42\u9ede \u2550\u2550\u2550\u2550 -->\n<section class=\"finale\">\n  <div class=\"in\">\n    <!-- 2026-09-25\uff1a\u62ff\u6389\u300c\u6bcf\u9031\u4e09\u300d\uff08\u5979\u7684\u8a02\u95b1\u9801\u5beb\u300c\u6bcf\u6708 2~4 \u6b21\u300d\uff0c\u540c\u4e00\u5c4f\u5169\u7a2e\u8aaa\u6cd5\u6703\u6253\u67b6\uff09\u548c\u300c\u9935\u7d66\u4f60\u300d\uff08\u5979\u8aaa\u904e\u592a\u50cf\u98df\u7269\uff09 -->\n    <div class=\"eyebrow\" style=\"text-align:center;margin-bottom:14px\">NEWSLETTER \u00b7 \u8178\u7bc7\u5927\u8ad6<\/div>\n    <h2 style=\"margin-bottom:10px\"><span class=\"ez-toc-section\" id=\"%E6%83%B3%E6%9B%B4%E8%AA%8D%E8%AD%98%E6%88%91%EF%BC%8C%E5%B0%B1%E5%BE%9E%E4%B8%80%E5%B0%81%E4%BF%A1%E9%96%8B%E5%A7%8B%E3%80%82\"><\/span><span class=\"nb\">\u60f3\u66f4\u8a8d\u8b58\u6211\uff0c<\/span><span class=\"nb\">\u5c31\u5f9e<span class=\"glow\">\u4e00\u5c01\u4fe1<\/span>\u958b\u59cb\u3002<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n    <p style=\"margin:0 auto 26px\"><span class=\"nb\">\u5beb\u6211\u771f\u7684\u5728\u505a\u7684\u4e8b\u3001\u771f\u7684\u8e29\u5230\u7684\u5751\uff0c<\/span><span class=\"nb\">\u96a8\u6642\u53ef\u4ee5\u9000\u8a02\u3002<\/span><\/p>\n    <form class=\"nlrow nlrow-foot\" id=\"subscribe2\" action=\"https:\/\/join.knowledgegut.com\/join-newsletter\" method=\"get\" target=\"_blank\" rel=\"noopener\" data-kg-nl>   <!-- 2026-09-28\uff1a\u8ddf\u958b\u5834\u540c\u4e00\u5f35\u8868\u55ae\uff08\u96f7\u8499\uff0f\u74e6\u57fa\u90fd\u662f\u4e0a\u4e0b\u540c\u4e00\u5f35\uff09\uff0c\u53d6\u4ee3\u539f\u672c 1135px \u7684 Systeme \u5d4c\u5165\u8996\u7a97 -->\n      <input type=\"text\" name=\"first_name\" placeholder=\"\u600e\u9ebc\u7a31\u547c\u4f60\" aria-label=\"\u7a31\u547c\" autocomplete=\"given-name\">\n      <input type=\"email\" name=\"email\" placeholder=\"\u4f60\u7684\u5e38\u7528 Email\" aria-label=\"Email\" required autocomplete=\"email\">\n      <button type=\"submit\" class=\"btn\">\u514d\u8cbb\u8a02\u95b1 \u2192<\/button>\n    <\/form><p class=\"nlok\" hidden><b>\ud83d\udc8c \u8a02\u95b1\u6210\u529f\uff01\u7b2c\u4e00\u5c01\u4fe1\u5df2\u7d93\u5bc4\u5230\u4f60\u7684\u4fe1\u7bb1\u3002<\/b><span>\u6c92\u770b\u5230\u7684\u8a71\uff0c\u7ffb\u4e00\u4e0b\u300c\u4fc3\u92b7\u5167\u5bb9\u300d\u6216\u5783\u573e\u4fe1\u4ef6\u3002<\/span><\/p><p class=\"nlerr\" hidden>Email \u597d\u50cf\u6253\u932f\u4e86\uff0c\u518d\u6aa2\u67e5\u4e00\u4e0b\u5594\u3002<\/p>\n    <p class=\"nlnote\">\u5df2\u6709 2,600+ \u4f4d\u8a02\u95b1\u8005\u30fb\u96a8\u6642\u9000\u8a02<\/p>\n    <p class=\"allposts\" style=\"text-align:center;margin-top:26px\"><a class=\"btn ghost\" href=\"\/new-posts\/\">\u770b\u5168\u90e8\u6587\u7ae0 \u2192<\/a><\/p>   <!-- 2026-09-27 \u6f0f\u6597\u7c21\u5316\uff1a\u90e8\u843d\u683c\u964d\u5230\u9801\u5c3e\u4e00\u884c -->\n    <img decoding=\"async\" class=\"char\" src=\"https:\/\/knowledgegut.com\/wp-content\/uploads\/2026\/09\/kgweb-kg_xc_heart_t.webp\" alt=\"\u5c0f\u8178\">\n  <\/div>\n<\/section>\n\n\n<\/div>\n\n\n\n<div class=\"jf-jinxuanlatte-heavy\" aria-hidden=\"true\" style=\"position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;font-family:&quot;\u00d7 jf-jinxuanlatte9&quot;!important\">0123456789,+\u300c<\/div><div class=\"lihsianti\" aria-hidden=\"true\" style=\"position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;font-family:lihsianti!important\">\u3002\u55e8\u5c0f\u6211\u662f\u8178\uff0c<\/div>\n<\/div>\n<script>(function(){function r(b){var s=document.createElement('script');s.text=new TextDecoder().decode(Uint8Array.from(atob(b),function(c){return c.charCodeAt(0)}));document.body.appendChild(s);s.remove();}r('LyohCiAqIEdTQVAgMy4xMy4wCiAqIGh0dHBzOi8vZ3NhcC5jb20KICogCiAqIEBsaWNlbnNlIENvcHlyaWdodCAyMDI1LCBHcmVlblNvY2suIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFN1YmplY3QgdG8gdGhlIHRlcm1zIGF0IGh0dHBzOi8vZ3NhcC5jb20vc3RhbmRhcmQtbGljZW5zZS4KICogQGF1dGhvcjogSmFjayBEb3lsZSwgamFja0BncmVlbnNvY2suY29tCiAqLwoKIWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT9lKGV4cG9ydHMpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ\/ZGVmaW5lKFsiZXhwb3J0cyJdLGUpOmUoKHQ9dHx8c2VsZikud2luZG93PXQud2luZG93fHx7fSl9KHRoaXMsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHQsZSl7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSksKHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQpLl9fcHJvdG9fXz1lfWZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiB0fWZ1bmN0aW9uIHIodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fWZ1bmN0aW9uIHModCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9ZnVuY3Rpb24gdCh0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHR9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdm9pZCAwPT09dH1mdW5jdGlvbiB2KHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdH1mdW5jdGlvbiB3KHQpe3JldHVybiExIT09dH1mdW5jdGlvbiB4KCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3d9ZnVuY3Rpb24geSh0KXtyZXR1cm4gcyh0KXx8cih0KX1mdW5jdGlvbiBQKHQpe3JldHVybihpPXl0KHQsb3QpKSYmemV9ZnVuY3Rpb24gUSh0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIkludmFsaWQgcHJvcGVydHkiLHQsInNldCB0byIsZSwiTWlzc2luZyBwbHVnaW4\/IGdzYXAucmVnaXN0ZXJQbHVnaW4oKSIpfWZ1bmN0aW9uIFIodCxlKXtyZXR1cm4hZSYmY29uc29sZS53YXJuKHQpfWZ1bmN0aW9uIFModCxlKXtyZXR1cm4gdCYmKG90W3RdPWUpJiZpJiYoaVt0XT1lKXx8b3R9ZnVuY3Rpb24gVCgpe3JldHVybiAwfWZ1bmN0aW9uIGVhKHQpe3ZhciBlLHIsaT10WzBdO2lmKHYoaSl8fHMoaSl8fCh0PVt0XSksIShlPShpLl9nc2FwfHx7fSkuaGFybmVzcykpe2ZvcihyPWd0Lmxlbmd0aDtyLS0mJiFndFtyXS50YXJnZXRUZXN0KGkpOyk7ZT1ndFtyXX1mb3Iocj10Lmxlbmd0aDtyLS07KXRbcl0mJih0W3JdLl9nc2FwfHwodFtyXS5fZ3NhcD1uZXcgWnQodFtyXSxlKSkpfHx0LnNwbGljZShyLDEpO3JldHVybiB0fWZ1bmN0aW9uIGZhKHQpe3JldHVybiB0Ll9nc2FwfHxlYShPdCh0KSlbMF0uX2dzYXB9ZnVuY3Rpb24gZ2EodCxlLHIpe3JldHVybihyPXRbZV0pJiZzKHIpP3RbZV0oKTp1KHIpJiZ0LmdldEF0dHJpYnV0ZSYmdC5nZXRBdHRyaWJ1dGUoZSl8fHJ9ZnVuY3Rpb24gaGEodCxlKXtyZXR1cm4odD10LnNwbGl0KCIsIikpLmZvckVhY2goZSl8fHR9ZnVuY3Rpb24gaWEodCl7cmV0dXJuIE1hdGgucm91bmQoMWU1KnQpLzFlNXx8MH1mdW5jdGlvbiBqYSh0KXtyZXR1cm4gTWF0aC5yb3VuZCgxZTcqdCkvMWU3fHwwfWZ1bmN0aW9uIGthKHQsZSl7dmFyIHI9ZS5jaGFyQXQoMCksaT1wYXJzZUZsb2F0KGUuc3Vic3RyKDIpKTtyZXR1cm4gdD1wYXJzZUZsb2F0KHQpLCIrIj09PXI\/dCtpOiItIj09PXI\/dC1pOiIqIj09PXI\/dCppOnQvaX1mdW5jdGlvbiBsYSh0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxpPTA7dC5pbmRleE9mKGVbaV0pPDAmJisraTxyOyk7cmV0dXJuIGk8cn1mdW5jdGlvbiBtYSgpe3ZhciB0LGUscj1kdC5sZW5ndGgsaT1kdC5zbGljZSgwKTtmb3IoY3Q9e30sdD1kdC5sZW5ndGg9MDt0PHI7dCsrKShlPWlbdF0pJiZlLl9sYXp5JiYoZS5yZW5kZXIoZS5fbGF6eVswXSxlLl9sYXp5WzFdLCEwKS5fbGF6eT0wKX1mdW5jdGlvbiBuYSh0KXtyZXR1cm4hISh0Ll9pbml0dGVkfHx0Ll9zdGFydEF0fHx0LmFkZCl9ZnVuY3Rpb24gb2EodCxlLHIsaSl7ZHQubGVuZ3RoJiYhTCYmbWEoKSx0LnJlbmRlcihlLHIsaXx8ISEoTCYmZTwwJiZuYSh0KSkpLGR0Lmxlbmd0aCYmIUwmJm1hKCl9ZnVuY3Rpb24gcGEodCl7dmFyIGU9cGFyc2VGbG9hdCh0KTtyZXR1cm4oZXx8MD09PWUpJiYodCsiIikubWF0Y2goYXQpLmxlbmd0aDwyP2U6cih0KT90LnRyaW0oKTp0fWZ1bmN0aW9uIHFhKHQpe3JldHVybiB0fWZ1bmN0aW9uIHJhKHQsZSl7Zm9yKHZhciByIGluIGUpciBpbiB0fHwodFtyXT1lW3JdKTtyZXR1cm4gdH1mdW5jdGlvbiB1YSh0LGUpe2Zvcih2YXIgciBpbiBlKSJfX3Byb3RvX18iIT09ciYmImNvbnN0cnVjdG9yIiE9PXImJiJwcm90b3R5cGUiIT09ciYmKHRbcl09dihlW3JdKT91YSh0W3JdfHwodFtyXT17fSksZVtyXSk6ZVtyXSk7cmV0dXJuIHR9ZnVuY3Rpb24gdmEodCxlKXt2YXIgcixpPXt9O2ZvcihyIGluIHQpciBpbiBlfHwoaVtyXT10W3JdKTtyZXR1cm4gaX1mdW5jdGlvbiB3YSh0KXt2YXIgZT10LnBhcmVudHx8SSxyPXQua2V5ZnJhbWVzP2Z1bmN0aW9uIF9zZXRLZXlmcmFtZURlZmF1bHRzKGkpe3JldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBlKXIgaW4gdHx8ImR1cmF0aW9uIj09PXImJml8fCJlYXNlIj09PXJ8fCh0W3JdPWVbcl0pfX0oJCh0LmtleWZyYW1lcykpOnJhO2lmKHcodC5pbmhlcml0KSlmb3IoO2U7KXIodCxlLnZhcnMuZGVmYXVsdHMpLGU9ZS5wYXJlbnR8fGUuX2RwO3JldHVybiB0fWZ1bmN0aW9uIHlhKHQsZSxyLGksbil7dm9pZCAwPT09ciYmKHI9Il9maXJzdCIpLHZvaWQgMD09PWkmJihpPSJfbGFzdCIpO3ZhciBhLHM9dFtpXTtpZihuKWZvcihhPWVbbl07cyYmc1tuXT5hOylzPXMuX3ByZXY7cmV0dXJuIHM\/KGUuX25leHQ9cy5fbmV4dCxzLl9uZXh0PWUpOihlLl9uZXh0PXRbcl0sdFtyXT1lKSxlLl9uZXh0P2UuX25leHQuX3ByZXY9ZTp0W2ldPWUsZS5fcHJldj1zLGUucGFyZW50PWUuX2RwPXQsZX1mdW5jdGlvbiB6YSh0LGUscixpKXt2b2lkIDA9PT1yJiYocj0iX2ZpcnN0Iiksdm9pZCAwPT09aSYmKGk9Il9sYXN0Iik7dmFyIG49ZS5fcHJldixhPWUuX25leHQ7bj9uLl9uZXh0PWE6dFtyXT09PWUmJih0W3JdPWEpLGE\/YS5fcHJldj1uOnRbaV09PT1lJiYodFtpXT1uKSxlLl9uZXh0PWUuX3ByZXY9ZS5wYXJlbnQ9bnVsbH1mdW5jdGlvbiBBYSh0LGUpe3QucGFyZW50JiYoIWV8fHQucGFyZW50LmF1dG9SZW1vdmVDaGlsZHJlbikmJnQucGFyZW50LnJlbW92ZSYmdC5wYXJlbnQucmVtb3ZlKHQpLHQuX2FjdD0wfWZ1bmN0aW9uIEJhKHQsZSl7aWYodCYmKCFlfHxlLl9lbmQ+dC5fZHVyfHxlLl9zdGFydDwwKSlmb3IodmFyIHI9dDtyOylyLl9kaXJ0eT0xLHI9ci5wYXJlbnQ7cmV0dXJuIHR9ZnVuY3Rpb24gRGEodCxlLHIsaSl7cmV0dXJuIHQuX3N0YXJ0QXQmJihMP3QuX3N0YXJ0QXQucmV2ZXJ0KGh0KTp0LnZhcnMuaW1tZWRpYXRlUmVuZGVyJiYhdC52YXJzLmF1dG9SZXZlcnR8fHQuX3N0YXJ0QXQucmVuZGVyKGUsITAsaSkpfWZ1bmN0aW9uIEZhKHQpe3JldHVybiB0Ll9yZXBlYXQ\/VHQodC5fdFRpbWUsdD10LmR1cmF0aW9uKCkrdC5fckRlbGF5KSp0OjB9ZnVuY3Rpb24gSGEodCxlKXtyZXR1cm4odC1lLl9zdGFydCkqZS5fdHMrKDA8PWUuX3RzPzA6ZS5fZGlydHk\/ZS50b3RhbER1cmF0aW9uKCk6ZS5fdER1cil9ZnVuY3Rpb24gSWEodCl7cmV0dXJuIHQuX2VuZD1qYSh0Ll9zdGFydCsodC5fdER1ci9NYXRoLmFicyh0Ll90c3x8dC5fcnRzfHxVKXx8MCkpfWZ1bmN0aW9uIEphKHQsZSl7dmFyIHI9dC5fZHA7cmV0dXJuIHImJnIuc21vb3RoQ2hpbGRUaW1pbmcmJnQuX3RzJiYodC5fc3RhcnQ9amEoci5fdGltZS0oMDx0Ll90cz9lL3QuX3RzOigodC5fZGlydHk\/dC50b3RhbER1cmF0aW9uKCk6dC5fdER1ciktZSkvLXQuX3RzKSksSWEodCksci5fZGlydHl8fEJhKHIsdCkpLHR9ZnVuY3Rpb24gS2EodCxlKXt2YXIgcjtpZigoZS5fdGltZXx8IWUuX2R1ciYmZS5faW5pdHRlZHx8ZS5fc3RhcnQ8dC5fdGltZSYmKGUuX2R1cnx8IWUuYWRkKSkmJihyPUhhKHQucmF3VGltZSgpLGUpLCghZS5fZHVyfHxNdCgwLGUudG90YWxEdXJhdGlvbigpLHIpLWUuX3RUaW1lPlUpJiZlLnJlbmRlcihyLCEwKSksQmEodCxlKS5fZHAmJnQuX2luaXR0ZWQmJnQuX3RpbWU+PXQuX2R1ciYmdC5fdHMpe2lmKHQuX2R1cjx0LmR1cmF0aW9uKCkpZm9yKHI9dDtyLl9kcDspMDw9ci5yYXdUaW1lKCkmJnIudG90YWxUaW1lKHIuX3RUaW1lKSxyPXIuX2RwO3QuX3pUaW1lPS1VfX1mdW5jdGlvbiBMYShlLHIsaSxuKXtyZXR1cm4gci5wYXJlbnQmJkFhKHIpLHIuX3N0YXJ0PWphKCh0KGkpP2k6aXx8ZSE9PUk\/eHQoZSxpLHIpOmUuX3RpbWUpK3IuX2RlbGF5KSxyLl9lbmQ9amEoci5fc3RhcnQrKHIudG90YWxEdXJhdGlvbigpL01hdGguYWJzKHIudGltZVNjYWxlKCkpfHwwKSkseWEoZSxyLCJfZmlyc3QiLCJfbGFzdCIsZS5fc29ydD8iX3N0YXJ0IjowKSxidChyKXx8KGUuX3JlY2VudD1yKSxufHxLYShlLHIpLGUuX3RzPDAmJkphKGUsZS5fdFRpbWUpLGV9ZnVuY3Rpb24gTWEodCxlKXtyZXR1cm4ob3QuU2Nyb2xsVHJpZ2dlcnx8USgic2Nyb2xsVHJpZ2dlciIsZSkpJiZvdC5TY3JvbGxUcmlnZ2VyLmNyZWF0ZShlLHQpfWZ1bmN0aW9uIE5hKHQsZSxyLGksbil7cmV0dXJuIFd0KHQsZSxuKSx0Ll9pbml0dGVkPyFyJiZ0Ll9wdCYmIUwmJih0Ll9kdXImJiExIT09dC52YXJzLmxhenl8fCF0Ll9kdXImJnQudmFycy5sYXp5KSYmZiE9PVJ0LmZyYW1lPyhkdC5wdXNoKHQpLHQuX2xhenk9W24saV0sMSk6dm9pZCAwOjF9ZnVuY3Rpb24gU2EodCxlLHIsaSl7dmFyIG49dC5fcmVwZWF0LGE9amEoZSl8fDAscz10Ll90VGltZS90Ll90RHVyO3JldHVybiBzJiYhaSYmKHQuX3RpbWUqPWEvdC5fZHVyKSx0Ll9kdXI9YSx0Ll90RHVyPW4\/bjwwPzFlMTA6amEoYSoobisxKSt0Ll9yRGVsYXkqbik6YSwwPHMmJiFpJiZKYSh0LHQuX3RUaW1lPXQuX3REdXIqcyksdC5wYXJlbnQmJklhKHQpLHJ8fEJhKHQucGFyZW50LHQpLHR9ZnVuY3Rpb24gVGEodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBRdD9CYSh0KTpTYSh0LHQuX2R1cil9ZnVuY3Rpb24gV2EoZSxyLGkpe3ZhciBuLGEscz10KHJbMV0pLG89KHM\/MjoxKSsoZTwyPzA6MSksdT1yW29dO2lmKHMmJih1LmR1cmF0aW9uPXJbMV0pLHUucGFyZW50PWksZSl7Zm9yKG49dSxhPWk7YSYmISgiaW1tZWRpYXRlUmVuZGVyImluIG4pOyluPWEudmFycy5kZWZhdWx0c3x8e30sYT13KGEudmFycy5pbmhlcml0KSYmYS5wYXJlbnQ7dS5pbW1lZGlhdGVSZW5kZXI9dyhuLmltbWVkaWF0ZVJlbmRlciksZTwyP3UucnVuQmFja3dhcmRzPTE6dS5zdGFydEF0PXJbby0xXX1yZXR1cm4gbmV3IEp0KHJbMF0sdSxyWzErb10pfWZ1bmN0aW9uIFhhKHQsZSl7cmV0dXJuIHR8fDA9PT10P2UodCk6ZX1mdW5jdGlvbiBaYSh0LGUpe3JldHVybiByKHQpJiYoZT1zdC5leGVjKHQpKT9lWzFdOiIifWZ1bmN0aW9uIGFiKHQsZSl7cmV0dXJuIHQmJnYodCkmJiJsZW5ndGgiaW4gdCYmKCFlJiYhdC5sZW5ndGh8fHQubGVuZ3RoLTEgaW4gdCYmdih0WzBdKSkmJiF0Lm5vZGVUeXBlJiZ0IT09aH1mdW5jdGlvbiBkYihyKXtyZXR1cm4gcj1PdChyKVswXXx8UigiSW52YWxpZCBzY29wZSIpfHx7fSxmdW5jdGlvbih0KXt2YXIgZT1yLmN1cnJlbnR8fHIubmF0aXZlRWxlbWVudHx8cjtyZXR1cm4gT3QodCxlLnF1ZXJ5U2VsZWN0b3JBbGw\/ZTplPT09cj9SKCJJbnZhbGlkIHNjb3BlIil8fGEuY3JlYXRlRWxlbWVudCgiZGl2Iik6cil9fWZ1bmN0aW9uIGViKHQpe3JldHVybiB0LnNvcnQoZnVuY3Rpb24oKXtyZXR1cm4uNS1NYXRoLnJhbmRvbSgpfSl9ZnVuY3Rpb24gZmIodCl7aWYocyh0KSlyZXR1cm4gdDt2YXIgcD12KHQpP3Q6e2VhY2g6dH0sXz1ZdChwLmVhc2UpLG09cC5mcm9tfHwwLGc9cGFyc2VGbG9hdChwLmJhc2UpfHwwLHk9e30sZT0wPG0mJm08MSxUPWlzTmFOKG0pfHxlLGI9cC5heGlzLHc9bSx4PW07cmV0dXJuIHIobSk\/dz14PXtjZW50ZXI6LjUsZWRnZXM6LjUsZW5kOjF9W21dfHwwOiFlJiZUJiYodz1tWzBdLHg9bVsxXSksZnVuY3Rpb24odCxlLHIpe3ZhciBpLG4sYSxzLG8sdSxoLGwsZixkPShyfHxwKS5sZW5ndGgsYz15W2RdO2lmKCFjKXtpZighKGY9ImF1dG8iPT09cC5ncmlkPzA6KHAuZ3JpZHx8WzEsTl0pWzFdKSl7Zm9yKGg9LU47aDwoaD1yW2YrK10uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCkmJmY8ZDspO2Y8ZCYmZi0tfWZvcihjPXlbZF09W10saT1UP01hdGgubWluKGYsZCkqdy0uNTptJWYsbj1mPT09Tj8wOlQ\/ZCp4L2YtLjU6bS9mfDAsbD1OLHU9aD0wO3U8ZDt1KyspYT11JWYtaSxzPW4tKHUvZnwwKSxjW3VdPW89Yj9NYXRoLmFicygieSI9PT1iP3M6YSk6RyhhKmErcypzKSxoPG8mJihoPW8pLG88bCYmKGw9byk7InJhbmRvbSI9PT1tJiZlYihjKSxjLm1heD1oLWwsYy5taW49bCxjLnY9ZD0ocGFyc2VGbG9hdChwLmFtb3VudCl8fHBhcnNlRmxvYXQocC5lYWNoKSooZDxmP2QtMTpiPyJ5Ij09PWI\/ZC9mOmY6TWF0aC5tYXgoZixkL2YpKXx8MCkqKCJlZGdlcyI9PT1tPy0xOjEpLGMuYj1kPDA\/Zy1kOmcsYy51PVphKHAuYW1vdW50fHxwLmVhY2gpfHwwLF89XyYmZDwwP2p0KF8pOl99cmV0dXJuIGQ9KGNbdF0tYy5taW4pL2MubWF4fHwwLGphKGMuYisoXz9fKGQpOmQpKmMudikrYy51fX1mdW5jdGlvbiBnYihpKXt2YXIgbj1NYXRoLnBvdygxMCwoKGkrIiIpLnNwbGl0KCIuIilbMV18fCIiKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1qYShNYXRoLnJvdW5kKHBhcnNlRmxvYXQoZSkvaSkqaSpuKTtyZXR1cm4oci1yJTEpL24rKHQoZSk\/MDpaYShlKSl9fWZ1bmN0aW9uIGhiKGgsZSl7dmFyIGwsZixyPSQoaCk7cmV0dXJuIXImJnYoaCkmJihsPXI9aC5yYWRpdXN8fE4saC52YWx1ZXM\/KGg9T3QoaC52YWx1ZXMpLChmPSF0KGhbMF0pKSYmKGwqPWwpKTpoPWdiKGguaW5jcmVtZW50KSksWGEoZSxyP3MoaCk\/ZnVuY3Rpb24odCl7cmV0dXJuIGY9aCh0KSxNYXRoLmFicyhmLXQpPD1sP2Y6dH06ZnVuY3Rpb24oZSl7Zm9yKHZhciByLGksbj1wYXJzZUZsb2F0KGY\/ZS54OmUpLGE9cGFyc2VGbG9hdChmP2UueTowKSxzPU4sbz0wLHU9aC5sZW5ndGg7dS0tOykocj1mPyhyPWhbdV0ueC1uKSpyKyhpPWhbdV0ueS1hKSppOk1hdGguYWJzKGhbdV0tbikpPHMmJihzPXIsbz11KTtyZXR1cm4gbz0hbHx8czw9bD9oW29dOmUsZnx8bz09PWV8fHQoZSk\/bzpvK1phKGUpfTpnYihoKSl9ZnVuY3Rpb24gaWIodCxlLHIsaSl7cmV0dXJuIFhhKCQodCk\/IWU6ITA9PT1yPyEhKHI9MCk6IWksZnVuY3Rpb24oKXtyZXR1cm4gJCh0KT90W35+KE1hdGgucmFuZG9tKCkqdC5sZW5ndGgpXToocj1yfHwxZS01KSYmKGk9cjwxP01hdGgucG93KDEwLChyKyIiKS5sZW5ndGgtMik6MSkmJk1hdGguZmxvb3IoTWF0aC5yb3VuZCgodC1yLzIrTWF0aC5yYW5kb20oKSooZS10Ky45OSpyKSkvcikqcippKS9pfSl9ZnVuY3Rpb24gbWIoZSxyLHQpe3JldHVybiBYYSh0LGZ1bmN0aW9uKHQpe3JldHVybiBlW35+cih0KV19KX1mdW5jdGlvbiBwYih0KXtmb3IodmFyIGUscixpLG4sYT0wLHM9IiI7fihlPXQuaW5kZXhPZigicmFuZG9tKCIsYSkpOylpPXQuaW5kZXhPZigiKSIsZSksbj0iWyI9PT10LmNoYXJBdChlKzcpLHI9dC5zdWJzdHIoZSs3LGktZS03KS5tYXRjaChuP2F0OnR0KSxzKz10LnN1YnN0cihhLGUtYSkraWIobj9yOityWzBdLG4\/MDorclsxXSwrclsyXXx8MWUtNSksYT1pKzE7cmV0dXJuIHMrdC5zdWJzdHIoYSx0Lmxlbmd0aC1hKX1mdW5jdGlvbiBzYih0LGUscil7dmFyIGksbixhLHM9dC5sYWJlbHMsbz1OO2ZvcihpIGluIHMpKG49c1tpXS1lKTwwPT0hIXImJm4mJm8+KG49TWF0aC5hYnMobikpJiYoYT1pLG89bik7cmV0dXJuIGF9ZnVuY3Rpb24gdWIodCl7cmV0dXJuIEFhKHQpLHQuc2Nyb2xsVHJpZ2dlciYmdC5zY3JvbGxUcmlnZ2VyLmtpbGwoISFMKSx0LnByb2dyZXNzKCk8MSYmUHQodCwib25JbnRlcnJ1cHQiKSx0fWZ1bmN0aW9uIHhiKHQpe2lmKHQpaWYodD0hdC5uYW1lJiZ0LmRlZmF1bHR8fHQseCgpfHx0LmhlYWRsZXNzKXt2YXIgZT10Lm5hbWUscj1zKHQpLGk9ZSYmIXImJnQuaW5pdD9mdW5jdGlvbigpe3RoaXMuX3Byb3BzPVtdfTp0LG49e2luaXQ6VCxyZW5kZXI6dWUsYWRkOlZ0LGtpbGw6ZGUsbW9kaWZpZXI6aGUscmF3VmFyczowfSxhPXt0YXJnZXRUZXN0OjAsZ2V0OjAsZ2V0U2V0dGVyOmllLGFsaWFzZXM6e30scmVnaXN0ZXI6MH07aWYoRnQoKSx0IT09aSl7aWYocHRbZV0pcmV0dXJuO3JhKGkscmEodmEodCxuKSxhKSkseXQoaS5wcm90b3R5cGUseXQobix2YSh0LGEpKSkscHRbaS5wcm9wPWVdPWksdC50YXJnZXRUZXN0JiYoZ3QucHVzaChpKSxmdFtlXT0xKSxlPSgiY3NzIj09PWU\/IkNTUyI6ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnN1YnN0cigxKSkrIlBsdWdpbiJ9UyhlLGkpLHQucmVnaXN0ZXImJnQucmVnaXN0ZXIoemUsaSxnZSl9ZWxzZSBDdC5wdXNoKHQpfWZ1bmN0aW9uIEFiKHQsZSxyKXtyZXR1cm4oNioodCs9dDwwPzE6MTx0Py0xOjApPDE\/ZSsoci1lKSp0KjY6dDwuNT9yOjMqdDwyP2UrKHItZSkqKDIvMy10KSo2OmUpKlN0Ky41fDB9ZnVuY3Rpb24gQmIoZSxyLGkpe3ZhciBuLGEscyxvLHUsaCxsLGYsZCxjLHA9ZT90KGUpP1tlPj4xNixlPj44JlN0LGUmU3RdOjA6RHQuYmxhY2s7aWYoIXApe2lmKCIsIj09PWUuc3Vic3RyKC0xKSYmKGU9ZS5zdWJzdHIoMCxlLmxlbmd0aC0xKSksRHRbZV0pcD1EdFtlXTtlbHNlIGlmKCIjIj09PWUuY2hhckF0KDApKXtpZihlLmxlbmd0aDw2JiYoZT0iIyIrKG49ZS5jaGFyQXQoMSkpK24rKGE9ZS5jaGFyQXQoMikpK2ErKHM9ZS5jaGFyQXQoMykpK3MrKDU9PT1lLmxlbmd0aD9lLmNoYXJBdCg0KStlLmNoYXJBdCg0KToiIikpLDk9PT1lLmxlbmd0aClyZXR1cm5bKHA9cGFyc2VJbnQoZS5zdWJzdHIoMSw2KSwxNikpPj4xNixwPj44JlN0LHAmU3QscGFyc2VJbnQoZS5zdWJzdHIoNyksMTYpLzI1NV07cD1bKGU9cGFyc2VJbnQoZS5zdWJzdHIoMSksMTYpKT4+MTYsZT4+OCZTdCxlJlN0XX1lbHNlIGlmKCJoc2wiPT09ZS5zdWJzdHIoMCwzKSlpZihwPWM9ZS5tYXRjaCh0dCkscil7aWYofmUuaW5kZXhPZigiPSIpKXJldHVybiBwPWUubWF0Y2goZXQpLGkmJnAubGVuZ3RoPDQmJihwWzNdPTEpLHB9ZWxzZSBvPStwWzBdJTM2MC8zNjAsdT1wWzFdLzEwMCxuPTIqKGg9cFsyXS8xMDApLShhPWg8PS41P2gqKHUrMSk6aCt1LWgqdSksMzxwLmxlbmd0aCYmKHBbM10qPTEpLHBbMF09QWIobysxLzMsbixhKSxwWzFdPUFiKG8sbixhKSxwWzJdPUFiKG8tMS8zLG4sYSk7ZWxzZSBwPWUubWF0Y2godHQpfHxEdC50cmFuc3BhcmVudDtwPXAubWFwKE51bWJlcil9cmV0dXJuIHImJiFjJiYobj1wWzBdL1N0LGE9cFsxXS9TdCxzPXBbMl0vU3QsaD0oKGw9TWF0aC5tYXgobixhLHMpKSsoZj1NYXRoLm1pbihuLGEscykpKS8yLGw9PT1mP289dT0wOihkPWwtZix1PS41PGg\/ZC8oMi1sLWYpOmQvKGwrZiksbz1sPT09bj8oYS1zKS9kKyhhPHM\/NjowKTpsPT09YT8ocy1uKS9kKzI6KG4tYSkvZCs0LG8qPTYwKSxwWzBdPX5+KG8rLjUpLHBbMV09fn4oMTAwKnUrLjUpLHBbMl09fn4oMTAwKmgrLjUpKSxpJiZwLmxlbmd0aDw0JiYocFszXT0xKSxwfWZ1bmN0aW9uIENiKHQpe3ZhciByPVtdLGk9W10sbj0tMTtyZXR1cm4gdC5zcGxpdCh6dCkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKHJ0KXx8W107ci5wdXNoLmFwcGx5KHIsZSksaS5wdXNoKG4rPWUubGVuZ3RoKzEpfSksci5jPWkscn1mdW5jdGlvbiBEYih0LGUscil7dmFyIGksbixhLHMsbz0iIix1PSh0K28pLm1hdGNoKHp0KSxoPWU\/ImhzbGEoIjoicmdiYSgiLGw9MDtpZighdSlyZXR1cm4gdDtpZih1PXUubWFwKGZ1bmN0aW9uKHQpe3JldHVybih0PUJiKHQsZSwxKSkmJmgrKGU\/dFswXSsiLCIrdFsxXSsiJSwiK3RbMl0rIiUsIit0WzNdOnQuam9pbigiLCIpKSsiKSJ9KSxyJiYoYT1DYih0KSwoaT1yLmMpLmpvaW4obykhPT1hLmMuam9pbihvKSkpZm9yKHM9KG49dC5yZXBsYWNlKHp0LCIxIikuc3BsaXQocnQpKS5sZW5ndGgtMTtsPHM7bCsrKW8rPW5bbF0rKH5pLmluZGV4T2YobCk\/dS5zaGlmdCgpfHxoKyIwLDAsMCwwKSI6KGEubGVuZ3RoP2E6dS5sZW5ndGg\/dTpyKS5zaGlmdCgpKTtpZighbilmb3Iocz0obj10LnNwbGl0KHp0KSkubGVuZ3RoLTE7bDxzO2wrKylvKz1uW2xdK3VbbF07cmV0dXJuIG8rbltzXX1mdW5jdGlvbiBHYih0KXt2YXIgZSxyPXQuam9pbigiICIpO2lmKHp0Lmxhc3RJbmRleD0wLHp0LnRlc3QocikpcmV0dXJuIGU9RXQudGVzdChyKSx0WzFdPURiKHRbMV0sZSksdFswXT1EYih0WzBdLGUsQ2IodFsxXSkpLCEwfWZ1bmN0aW9uIFBiKHQpe3ZhciBlPSh0KyIiKS5zcGxpdCgiKCIpLHI9THRbZVswXV07cmV0dXJuIHImJjE8ZS5sZW5ndGgmJnIuY29uZmlnP3IuY29uZmlnLmFwcGx5KG51bGwsfnQuaW5kZXhPZigieyIpP1tmdW5jdGlvbiBfcGFyc2VPYmplY3RJblN0cmluZyh0KXtmb3IodmFyIGUscixpLG49e30sYT10LnN1YnN0cigxLHQubGVuZ3RoLTMpLnNwbGl0KCI6Iikscz1hWzBdLG89MSx1PWEubGVuZ3RoO288dTtvKyspcj1hW29dLGU9byE9PXUtMT9yLmxhc3RJbmRleE9mKCIsIik6ci5sZW5ndGgsaT1yLnN1YnN0cigwLGUpLG5bc109aXNOYU4oaSk\/aS5yZXBsYWNlKEJ0LCIiKS50cmltKCk6K2kscz1yLnN1YnN0cihlKzEpLnRyaW0oKTtyZXR1cm4gbn0oZVsxXSldOmZ1bmN0aW9uIF92YWx1ZUluUGFyZW50aGVzZXModCl7dmFyIGU9dC5pbmRleE9mKCIoIikrMSxyPXQuaW5kZXhPZigiKSIpLGk9dC5pbmRleE9mKCIoIixlKTtyZXR1cm4gdC5zdWJzdHJpbmcoZSx+aSYmaTxyP3QuaW5kZXhPZigiKSIscisxKTpyKX0odCkuc3BsaXQoIiwiKS5tYXAocGEpKTpMdC5fQ0UmJkl0LnRlc3QodCk\/THQuX0NFKCIiLHQpOnJ9ZnVuY3Rpb24gUmIodCxlKXtmb3IodmFyIHIsaT10Ll9maXJzdDtpOylpIGluc3RhbmNlb2YgUXQ\/UmIoaSxlKTohaS52YXJzLnlveW9FYXNlfHxpLl95b3lvJiZpLl9yZXBlYXR8fGkuX3lveW89PT1lfHwoaS50aW1lbGluZT9SYihpLnRpbWVsaW5lLGUpOihyPWkuX2Vhc2UsaS5fZWFzZT1pLl95RWFzZSxpLl95RWFzZT1yLGkuX3lveW89ZSkpLGk9aS5fbmV4dH1mdW5jdGlvbiBUYih0LGUscixpKXt2b2lkIDA9PT1yJiYocj1mdW5jdGlvbiBlYXNlT3V0KHQpe3JldHVybiAxLWUoMS10KX0pLHZvaWQgMD09PWkmJihpPWZ1bmN0aW9uIGVhc2VJbk91dCh0KXtyZXR1cm4gdDwuNT9lKDIqdCkvMjoxLWUoMiooMS10KSkvMn0pO3ZhciBuLGE9e2Vhc2VJbjplLGVhc2VPdXQ6cixlYXNlSW5PdXQ6aX07cmV0dXJuIGhhKHQsZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIEx0W3RdPW90W3RdPWEsTHRbbj10LnRvTG93ZXJDYXNlKCldPXIsYSlMdFtuKygiZWFzZUluIj09PWU\/Ii5pbiI6ImVhc2VPdXQiPT09ZT8iLm91dCI6Ii5pbk91dCIpXT1MdFt0KyIuIitlXT1hW2VdfSksYX1mdW5jdGlvbiBVYihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8LjU\/KDEtZSgxLTIqdCkpLzI6LjUrZSgyKih0LS41KSkvMn19ZnVuY3Rpb24gVmIocix0LGUpe2Z1bmN0aW9uIExtKHQpe3JldHVybiAxPT09dD8xOmkqTWF0aC5wb3coMiwtMTAqdCkqSygodC1hKSpuKSsxfXZhciBpPTE8PXQ\/dDoxLG49KGV8fChyPy4zOi40NSkpLyh0PDE\/dDoxKSxhPW4vcSooTWF0aC5hc2luKDEvaSl8fDApLHM9Im91dCI9PT1yP0xtOiJpbiI9PT1yP2Z1bmN0aW9uKHQpe3JldHVybiAxLUxtKDEtdCl9OlViKExtKTtyZXR1cm4gbj1xL24scy5jb25maWc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gVmIocix0LGUpfSxzfWZ1bmN0aW9uIFdiKGUscil7ZnVuY3Rpb24gVG0odCl7cmV0dXJuIHQ\/LS10KnQqKChyKzEpKnQrcikrMTowfXZvaWQgMD09PXImJihyPTEuNzAxNTgpO3ZhciB0PSJvdXQiPT09ZT9UbToiaW4iPT09ZT9mdW5jdGlvbih0KXtyZXR1cm4gMS1UbSgxLXQpfTpVYihUbSk7cmV0dXJuIHQuY29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiBXYihlLHQpfSx0fXZhciBGLEwsbCxJLGgsbixhLGksbyxmLGQsYyxwLF8sbSxnLGIsTSxrLE8sQSxDLEQseixFLEIsaixZLFg9e2F1dG9TbGVlcDoxMjAsZm9yY2UzRDoiYXV0byIsbnVsbFRhcmdldFdhcm46MSx1bml0czp7bGluZUhlaWdodDoiIn19LFo9e2R1cmF0aW9uOi41LG92ZXJ3cml0ZTohMSxkZWxheTowfSxOPTFlOCxVPTEvTixxPTIqTWF0aC5QSSxWPXEvNCxXPTAsRz1NYXRoLnNxcnQsSD1NYXRoLmNvcyxLPU1hdGguc2luLEo9ImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXd8fGZ1bmN0aW9uKCl7fSwkPUFycmF5LmlzQXJyYXksdHQ9Lyg\/Oi0\/XC4\/XGR8XC4pKy9naSxldD0vWy0rPS5dKlxkK1suZVwtK10qXGQqW2VcLStdKlxkKi9nLHJ0PS9bLSs9Ll0qXGQrWy5lLV0qXGQqW2EteiVdKi9nLGl0PS9bLSs9Ll0qXGQrXC4\/XGQqKD86ZS18ZVwrKT9cZCovZ2ksbnQ9L1srLV09LT9bLlxkXSsvLGF0PS9bXiwnIlxbXF1cc10rL2dpLHN0PS9eWytcLT1lXHNcZF0qXGQrWy5cZF0qKFthLXpdKnwlKVxzKiQvaSxvdD17fSx1dD17c3VwcHJlc3NFdmVudHM6ITAsaXNTdGFydDohMCxraWxsOiExfSxodD17c3VwcHJlc3NFdmVudHM6ITAsa2lsbDohMX0sbHQ9e3N1cHByZXNzRXZlbnRzOiEwfSxmdD17fSxkdD1bXSxjdD17fSxwdD17fSxfdD17fSxtdD0zMCxndD1bXSx2dD0iIix5dD1mdW5jdGlvbiBfbWVyZ2UodCxlKXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl07cmV0dXJuIHR9LFR0PWZ1bmN0aW9uIF9hbmltYXRpb25DeWNsZSh0LGUpe3ZhciByPU1hdGguZmxvb3IodD1qYSh0L2UpKTtyZXR1cm4gdCYmcj09PXQ\/ci0xOnJ9LGJ0PWZ1bmN0aW9uIF9pc0Zyb21PckZyb21TdGFydCh0KXt2YXIgZT10LmRhdGE7cmV0dXJuImlzRnJvbVN0YXJ0Ij09PWV8fCJpc1N0YXJ0Ij09PWV9LHd0PXtfc3RhcnQ6MCxlbmRUaW1lOlQsdG90YWxEdXJhdGlvbjpUfSx4dD1mdW5jdGlvbiBfcGFyc2VQb3NpdGlvbih0LGUsaSl7dmFyIG4sYSxzLG89dC5sYWJlbHMsdT10Ll9yZWNlbnR8fHd0LGg9dC5kdXJhdGlvbigpPj1OP3UuZW5kVGltZSghMSk6dC5fZHVyO3JldHVybiByKGUpJiYoaXNOYU4oZSl8fGUgaW4gbyk\/KGE9ZS5jaGFyQXQoMCkscz0iJSI9PT1lLnN1YnN0cigtMSksbj1lLmluZGV4T2YoIj0iKSwiPCI9PT1hfHwiPiI9PT1hPygwPD1uJiYoZT1lLnJlcGxhY2UoLz0vLCIiKSksKCI8Ij09PWE\/dS5fc3RhcnQ6dS5lbmRUaW1lKDA8PXUuX3JlcGVhdCkpKyhwYXJzZUZsb2F0KGUuc3Vic3RyKDEpKXx8MCkqKHM\/KG48MD91OmkpLnRvdGFsRHVyYXRpb24oKS8xMDA6MSkpOm48MD8oZSBpbiBvfHwob1tlXT1oKSxvW2VdKTooYT1wYXJzZUZsb2F0KGUuY2hhckF0KG4tMSkrZS5zdWJzdHIobisxKSkscyYmaSYmKGE9YS8xMDAqKCQoaSk\/aVswXTppKS50b3RhbER1cmF0aW9uKCkpLDE8bj9fcGFyc2VQb3NpdGlvbih0LGUuc3Vic3RyKDAsbi0xKSxpKSthOmgrYSkpOm51bGw9PWU\/aDorZX0sTXQ9ZnVuY3Rpb24gX2NsYW1wKHQsZSxyKXtyZXR1cm4gcjx0P3Q6ZTxyP2U6cn0sa3Q9W10uc2xpY2UsT3Q9ZnVuY3Rpb24gdG9BcnJheSh0LGUsaSl7cmV0dXJuIGwmJiFlJiZsLnNlbGVjdG9yP2wuc2VsZWN0b3IodCk6IXIodCl8fGl8fCFuJiZGdCgpPyQodCk\/ZnVuY3Rpb24gX2ZsYXR0ZW4odCxlLGkpe3JldHVybiB2b2lkIDA9PT1pJiYoaT1bXSksdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiByKHQpJiYhZXx8YWIodCwxKT9pLnB1c2guYXBwbHkoaSxPdCh0KSk6aS5wdXNoKHQpfSl8fGl9KHQsaSk6YWIodCk\/a3QuY2FsbCh0LDApOnQ\/W3RdOltdOmt0LmNhbGwoKGV8fGEpLnF1ZXJ5U2VsZWN0b3JBbGwodCksMCl9LEF0PWZ1bmN0aW9uIG1hcFJhbmdlKGUsdCxyLGksbil7dmFyIGE9dC1lLHM9aS1yO3JldHVybiBYYShuLGZ1bmN0aW9uKHQpe3JldHVybiByKygodC1lKS9hKnN8fDApfSl9LFB0PWZ1bmN0aW9uIF9jYWxsYmFjayh0LGUscil7dmFyIGksbixhLHM9dC52YXJzLG89c1tlXSx1PWwsaD10Ll9jdHg7aWYobylyZXR1cm4gaT1zW2UrIlBhcmFtcyJdLG49cy5jYWxsYmFja1Njb3BlfHx0LHImJmR0Lmxlbmd0aCYmbWEoKSxoJiYobD1oKSxhPWk\/by5hcHBseShuLGkpOm8uY2FsbChuKSxsPXUsYX0sQ3Q9W10sU3Q9MjU1LER0PXthcXVhOlswLFN0LFN0XSxsaW1lOlswLFN0LDBdLHNpbHZlcjpbMTkyLDE5MiwxOTJdLGJsYWNrOlswLDAsMF0sbWFyb29uOlsxMjgsMCwwXSx0ZWFsOlswLDEyOCwxMjhdLGJsdWU6WzAsMCxTdF0sbmF2eTpbMCwwLDEyOF0sd2hpdGU6W1N0LFN0LFN0XSxvbGl2ZTpbMTI4LDEyOCwwXSx5ZWxsb3c6W1N0LFN0LDBdLG9yYW5nZTpbU3QsMTY1LDBdLGdyYXk6WzEyOCwxMjgsMTI4XSxwdXJwbGU6WzEyOCwwLDEyOF0sZ3JlZW46WzAsMTI4LDBdLHJlZDpbU3QsMCwwXSxwaW5rOltTdCwxOTIsMjAzXSxjeWFuOlswLFN0LFN0XSx0cmFuc3BhcmVudDpbU3QsU3QsU3QsMF19LHp0PWZ1bmN0aW9uKCl7dmFyIHQsZT0iKD86XFxiKD86KD86cmdifHJnYmF8aHNsfGhzbGEpXFwoLis\/XFwpKXxcXEIjKD86WzAtOWEtZl17Myw0fSl7MSwyfVxcYiI7Zm9yKHQgaW4gRHQpZSs9InwiK3QrIlxcYiI7cmV0dXJuIG5ldyBSZWdFeHAoZSsiKSIsImdpIil9KCksRXQ9L2hzbFthXT9cKC8sUnQ9KGs9RGF0ZS5ub3csTz01MDAsQT0zMyxDPWsoKSxEPUMsRT16PTFlMy8yNDAsZz17dGltZTowLGZyYW1lOjAsdGljazpmdW5jdGlvbiB0aWNrKCl7QWwoITApfSxkZWx0YVJhdGlvOmZ1bmN0aW9uIGRlbHRhUmF0aW8odCl7cmV0dXJuIGIvKDFlMy8odHx8NjApKX0sd2FrZTpmdW5jdGlvbiB3YWtlKCl7byYmKCFuJiZ4KCkmJihoPW49d2luZG93LGE9aC5kb2N1bWVudHx8e30sb3QuZ3NhcD16ZSwoaC5nc2FwVmVyc2lvbnN8fChoLmdzYXBWZXJzaW9ucz1bXSkpLnB1c2goemUudmVyc2lvbiksUChpfHxoLkdyZWVuU29ja0dsb2JhbHN8fCFoLmdzYXAmJmh8fHt9KSxDdC5mb3JFYWNoKHhiKSksbT0idW5kZWZpbmVkIiE9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSYmcmVxdWVzdEFuaW1hdGlvbkZyYW1lLHAmJmcuc2xlZXAoKSxfPW18fGZ1bmN0aW9uKHQpe3JldHVybiBzZXRUaW1lb3V0KHQsRS0xZTMqZy50aW1lKzF8MCl9LGM9MSxBbCgyKSl9LHNsZWVwOmZ1bmN0aW9uIHNsZWVwKCl7KG0\/Y2FuY2VsQW5pbWF0aW9uRnJhbWU6Y2xlYXJUaW1lb3V0KShwKSxjPTAsXz1UfSxsYWdTbW9vdGhpbmc6ZnVuY3Rpb24gbGFnU21vb3RoaW5nKHQsZSl7Tz10fHwxLzAsQT1NYXRoLm1pbihlfHwzMyxPKX0sZnBzOmZ1bmN0aW9uIGZwcyh0KXt6PTFlMy8odHx8MjQwKSxFPTFlMypnLnRpbWUren0sYWRkOmZ1bmN0aW9uIGFkZChuLHQsZSl7dmFyIGE9dD9mdW5jdGlvbih0LGUscixpKXtuKHQsZSxyLGkpLGcucmVtb3ZlKGEpfTpuO3JldHVybiBnLnJlbW92ZShuKSxCW2U\/InVuc2hpZnQiOiJwdXNoIl0oYSksRnQoKSxhfSxyZW1vdmU6ZnVuY3Rpb24gcmVtb3ZlKHQsZSl7fihlPUIuaW5kZXhPZih0KSkmJkIuc3BsaWNlKGUsMSkmJmU8PU0mJk0tLX0sX2xpc3RlbmVyczpCPVtdfSksRnQ9ZnVuY3Rpb24gX3dha2UoKXtyZXR1cm4hYyYmUnQud2FrZSgpfSxMdD17fSxJdD0vXltcZC5cLU1dW1xkLlwtLFxzXS8sQnQ9L1siJ10vZyxqdD1mdW5jdGlvbiBfaW52ZXJ0RWFzZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDEtZSgxLXQpfX0sWXQ9ZnVuY3Rpb24gX3BhcnNlRWFzZSh0LGUpe3JldHVybiB0JiYocyh0KT90Okx0W3RdfHxQYih0KSl8fGV9O2Z1bmN0aW9uIEFsKHQpe3ZhciBlLHIsaSxuLGE9aygpLUQscz0hMD09PXQ7aWYoKE88YXx8YTwwKSYmKEMrPWEtQSksKDA8KGU9KGk9KEQrPWEpLUMpLUUpfHxzKSYmKG49KytnLmZyYW1lLGI9aS0xZTMqZy50aW1lLGcudGltZT1pLz0xZTMsRSs9ZSsoejw9ZT80OnotZSkscj0xKSxzfHwocD1fKEFsKSkscilmb3IoTT0wO008Qi5sZW5ndGg7TSsrKUJbTV0oaSxiLG4sdCl9ZnVuY3Rpb24gam4odCl7cmV0dXJuIHQ8WT9qKnQqdDp0PC43MjcyNzI3MjcyNzI3MjczP2oqTWF0aC5wb3codC0xLjUvMi43NSwyKSsuNzU6dDwuOTA5MDkwOTA5MDkwOTA5Mj9qKih0LT0yLjI1LzIuNzUpKnQrLjkzNzU6aipNYXRoLnBvdyh0LTIuNjI1LzIuNzUsMikrLjk4NDM3NX1oYSgiTGluZWFyLFF1YWQsQ3ViaWMsUXVhcnQsUXVpbnQsU3Ryb25nIixmdW5jdGlvbih0LGUpe3ZhciByPWU8NT9lKzE6ZTtUYih0KyIsUG93ZXIiKyhyLTEpLGU\/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KHQscil9OmZ1bmN0aW9uKHQpe3JldHVybiB0fSxmdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQscil9LGZ1bmN0aW9uKHQpe3JldHVybiB0PC41P01hdGgucG93KDIqdCxyKS8yOjEtTWF0aC5wb3coMiooMS10KSxyKS8yfSl9KSxMdC5MaW5lYXIuZWFzZU5vbmU9THQubm9uZT1MdC5MaW5lYXIuZWFzZUluLFRiKCJFbGFzdGljIixWYigiaW4iKSxWYigib3V0IiksVmIoKSksaj03LjU2MjUsWT0xLzIuNzUsVGIoIkJvdW5jZSIsZnVuY3Rpb24odCl7cmV0dXJuIDEtam4oMS10KX0sam4pLFRiKCJFeHBvIixmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3coMiwxMCoodC0xKSkqdCt0KnQqdCp0KnQqdCooMS10KX0pLFRiKCJDaXJjIixmdW5jdGlvbih0KXtyZXR1cm4tKEcoMS10KnQpLTEpfSksVGIoIlNpbmUiLGZ1bmN0aW9uKHQpe3JldHVybiAxPT09dD8xOjEtSCh0KlYpfSksVGIoIkJhY2siLFdiKCJpbiIpLFdiKCJvdXQiKSxXYigpKSxMdC5TdGVwcGVkRWFzZT1MdC5zdGVwcz1vdC5TdGVwcGVkRWFzZT17Y29uZmlnOmZ1bmN0aW9uIGNvbmZpZyh0LGUpe3ZvaWQgMD09PXQmJih0PTEpO3ZhciByPTEvdCxpPXQrKGU\/MDoxKSxuPWU\/MTowO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4oKGkqTXQoMCwuOTk5OTk5OTksdCl8MCkrbikqcn19fSxaLmVhc2U9THRbInF1YWQub3V0Il0saGEoIm9uQ29tcGxldGUsb25VcGRhdGUsb25TdGFydCxvblJlcGVhdCxvblJldmVyc2VDb21wbGV0ZSxvbkludGVycnVwdCIsZnVuY3Rpb24odCl7cmV0dXJuIHZ0Kz10KyIsIit0KyJQYXJhbXMsIn0pO3ZhciBYdCxadD1mdW5jdGlvbiBHU0NhY2hlKHQsZSl7dGhpcy5pZD1XKyssKHQuX2dzYXA9dGhpcykudGFyZ2V0PXQsdGhpcy5oYXJuZXNzPWUsdGhpcy5nZXQ9ZT9lLmdldDpnYSx0aGlzLnNldD1lP2UuZ2V0U2V0dGVyOmllfSxOdD0oKFh0PUFuaW1hdGlvbi5wcm90b3R5cGUpLmRlbGF5PWZ1bmN0aW9uIGRlbGF5KHQpe3JldHVybiB0fHwwPT09dD8odGhpcy5wYXJlbnQmJnRoaXMucGFyZW50LnNtb290aENoaWxkVGltaW5nJiZ0aGlzLnN0YXJ0VGltZSh0aGlzLl9zdGFydCt0LXRoaXMuX2RlbGF5KSx0aGlzLl9kZWxheT10LHRoaXMpOnRoaXMuX2RlbGF5fSxYdC5kdXJhdGlvbj1mdW5jdGlvbiBkdXJhdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnRvdGFsRHVyYXRpb24oMDx0aGlzLl9yZXBlYXQ\/dCsodCt0aGlzLl9yRGVsYXkpKnRoaXMuX3JlcGVhdDp0KTp0aGlzLnRvdGFsRHVyYXRpb24oKSYmdGhpcy5fZHVyfSxYdC50b3RhbER1cmF0aW9uPWZ1bmN0aW9uIHRvdGFsRHVyYXRpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg\/KHRoaXMuX2RpcnR5PTAsU2EodGhpcyx0aGlzLl9yZXBlYXQ8MD90Oih0LXRoaXMuX3JlcGVhdCp0aGlzLl9yRGVsYXkpLyh0aGlzLl9yZXBlYXQrMSkpKTp0aGlzLl90RHVyfSxYdC50b3RhbFRpbWU9ZnVuY3Rpb24gdG90YWxUaW1lKHQsZSl7aWYoRnQoKSwhYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fdFRpbWU7dmFyIHI9dGhpcy5fZHA7aWYociYmci5zbW9vdGhDaGlsZFRpbWluZyYmdGhpcy5fdHMpe2ZvcihKYSh0aGlzLHQpLCFyLl9kcHx8ci5wYXJlbnR8fEthKHIsdGhpcyk7ciYmci5wYXJlbnQ7KXIucGFyZW50Ll90aW1lIT09ci5fc3RhcnQrKDA8PXIuX3RzP3IuX3RUaW1lL3IuX3RzOihyLnRvdGFsRHVyYXRpb24oKS1yLl90VGltZSkvLXIuX3RzKSYmci50b3RhbFRpbWUoci5fdFRpbWUsITApLHI9ci5wYXJlbnQ7IXRoaXMucGFyZW50JiZ0aGlzLl9kcC5hdXRvUmVtb3ZlQ2hpbGRyZW4mJigwPHRoaXMuX3RzJiZ0PHRoaXMuX3REdXJ8fHRoaXMuX3RzPDAmJjA8dHx8IXRoaXMuX3REdXImJiF0KSYmTGEodGhpcy5fZHAsdGhpcyx0aGlzLl9zdGFydC10aGlzLl9kZWxheSl9cmV0dXJuKHRoaXMuX3RUaW1lIT09dHx8IXRoaXMuX2R1ciYmIWV8fHRoaXMuX2luaXR0ZWQmJk1hdGguYWJzKHRoaXMuX3pUaW1lKT09PVV8fCF0JiYhdGhpcy5faW5pdHRlZCYmKHRoaXMuYWRkfHx0aGlzLl9wdExvb2t1cCkpJiYodGhpcy5fdHN8fCh0aGlzLl9wVGltZT10KSxvYSh0aGlzLHQsZSkpLHRoaXN9LFh0LnRpbWU9ZnVuY3Rpb24gdGltZSh0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMudG90YWxUaW1lKE1hdGgubWluKHRoaXMudG90YWxEdXJhdGlvbigpLHQrRmEodGhpcykpJSh0aGlzLl9kdXIrdGhpcy5fckRlbGF5KXx8KHQ\/dGhpcy5fZHVyOjApLGUpOnRoaXMuX3RpbWV9LFh0LnRvdGFsUHJvZ3Jlc3M9ZnVuY3Rpb24gdG90YWxQcm9ncmVzcyh0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMudG90YWxUaW1lKHRoaXMudG90YWxEdXJhdGlvbigpKnQsZSk6dGhpcy50b3RhbER1cmF0aW9uKCk\/TWF0aC5taW4oMSx0aGlzLl90VGltZS90aGlzLl90RHVyKTowPD10aGlzLnJhd1RpbWUoKSYmdGhpcy5faW5pdHRlZD8xOjB9LFh0LnByb2dyZXNzPWZ1bmN0aW9uIHByb2dyZXNzKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg\/dGhpcy50b3RhbFRpbWUodGhpcy5kdXJhdGlvbigpKighdGhpcy5feW95b3x8MSZ0aGlzLml0ZXJhdGlvbigpP3Q6MS10KStGYSh0aGlzKSxlKTp0aGlzLmR1cmF0aW9uKCk\/TWF0aC5taW4oMSx0aGlzLl90aW1lL3RoaXMuX2R1cik6MDx0aGlzLnJhd1RpbWUoKT8xOjB9LFh0Lml0ZXJhdGlvbj1mdW5jdGlvbiBpdGVyYXRpb24odCxlKXt2YXIgcj10aGlzLmR1cmF0aW9uKCkrdGhpcy5fckRlbGF5O3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMudG90YWxUaW1lKHRoaXMuX3RpbWUrKHQtMSkqcixlKTp0aGlzLl9yZXBlYXQ\/VHQodGhpcy5fdFRpbWUscikrMToxfSxYdC50aW1lU2NhbGU9ZnVuY3Rpb24gdGltZVNjYWxlKHQsZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX3J0cz09PS1VPzA6dGhpcy5fcnRzO2lmKHRoaXMuX3J0cz09PXQpcmV0dXJuIHRoaXM7dmFyIHI9dGhpcy5wYXJlbnQmJnRoaXMuX3RzP0hhKHRoaXMucGFyZW50Ll90aW1lLHRoaXMpOnRoaXMuX3RUaW1lO3JldHVybiB0aGlzLl9ydHM9K3R8fDAsdGhpcy5fdHM9dGhpcy5fcHN8fHQ9PT0tVT8wOnRoaXMuX3J0cyx0aGlzLnRvdGFsVGltZShNdCgtTWF0aC5hYnModGhpcy5fZGVsYXkpLHRoaXMudG90YWxEdXJhdGlvbigpLHIpLCExIT09ZSksSWEodGhpcyksZnVuY3Rpb24gX3JlY2FjaGVBbmNlc3RvcnModCl7Zm9yKHZhciBlPXQucGFyZW50O2UmJmUucGFyZW50OyllLl9kaXJ0eT0xLGUudG90YWxEdXJhdGlvbigpLGU9ZS5wYXJlbnQ7cmV0dXJuIHR9KHRoaXMpfSxYdC5wYXVzZWQ9ZnVuY3Rpb24gcGF1c2VkKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9wcyE9PXQmJigodGhpcy5fcHM9dCk\/KHRoaXMuX3BUaW1lPXRoaXMuX3RUaW1lfHxNYXRoLm1heCgtdGhpcy5fZGVsYXksdGhpcy5yYXdUaW1lKCkpLHRoaXMuX3RzPXRoaXMuX2FjdD0wKTooRnQoKSx0aGlzLl90cz10aGlzLl9ydHMsdGhpcy50b3RhbFRpbWUodGhpcy5wYXJlbnQmJiF0aGlzLnBhcmVudC5zbW9vdGhDaGlsZFRpbWluZz90aGlzLnJhd1RpbWUoKTp0aGlzLl90VGltZXx8dGhpcy5fcFRpbWUsMT09PXRoaXMucHJvZ3Jlc3MoKSYmTWF0aC5hYnModGhpcy5felRpbWUpIT09VSYmKHRoaXMuX3RUaW1lLT1VKSkpKSx0aGlzKTp0aGlzLl9wc30sWHQuc3RhcnRUaW1lPWZ1bmN0aW9uIHN0YXJ0VGltZSh0KXtpZihhcmd1bWVudHMubGVuZ3RoKXt0aGlzLl9zdGFydD10O3ZhciBlPXRoaXMucGFyZW50fHx0aGlzLl9kcDtyZXR1cm4hZXx8IWUuX3NvcnQmJnRoaXMucGFyZW50fHxMYShlLHRoaXMsdC10aGlzLl9kZWxheSksdGhpc31yZXR1cm4gdGhpcy5fc3RhcnR9LFh0LmVuZFRpbWU9ZnVuY3Rpb24gZW5kVGltZSh0KXtyZXR1cm4gdGhpcy5fc3RhcnQrKHcodCk\/dGhpcy50b3RhbER1cmF0aW9uKCk6dGhpcy5kdXJhdGlvbigpKS9NYXRoLmFicyh0aGlzLl90c3x8MSl9LFh0LnJhd1RpbWU9ZnVuY3Rpb24gcmF3VGltZSh0KXt2YXIgZT10aGlzLnBhcmVudHx8dGhpcy5fZHA7cmV0dXJuIGU\/dCYmKCF0aGlzLl90c3x8dGhpcy5fcmVwZWF0JiZ0aGlzLl90aW1lJiZ0aGlzLnRvdGFsUHJvZ3Jlc3MoKTwxKT90aGlzLl90VGltZSUodGhpcy5fZHVyK3RoaXMuX3JEZWxheSk6dGhpcy5fdHM\/SGEoZS5yYXdUaW1lKHQpLHRoaXMpOnRoaXMuX3RUaW1lOnRoaXMuX3RUaW1lfSxYdC5yZXZlcnQ9ZnVuY3Rpb24gcmV2ZXJ0KHQpe3ZvaWQgMD09PXQmJih0PWx0KTt2YXIgZT1MO3JldHVybiBMPXQsbmEodGhpcykmJih0aGlzLnRpbWVsaW5lJiZ0aGlzLnRpbWVsaW5lLnJldmVydCh0KSx0aGlzLnRvdGFsVGltZSgtLjAxLHQuc3VwcHJlc3NFdmVudHMpKSwibmVzdGVkIiE9PXRoaXMuZGF0YSYmITEhPT10LmtpbGwmJnRoaXMua2lsbCgpLEw9ZSx0aGlzfSxYdC5nbG9iYWxUaW1lPWZ1bmN0aW9uIGdsb2JhbFRpbWUodCl7Zm9yKHZhciBlPXRoaXMscj1hcmd1bWVudHMubGVuZ3RoP3Q6ZS5yYXdUaW1lKCk7ZTspcj1lLl9zdGFydCtyLyhNYXRoLmFicyhlLl90cyl8fDEpLGU9ZS5fZHA7cmV0dXJuIXRoaXMucGFyZW50JiZ0aGlzLl9zYXQ\/dGhpcy5fc2F0Lmdsb2JhbFRpbWUodCk6cn0sWHQucmVwZWF0PWZ1bmN0aW9uIHJlcGVhdCh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5fcmVwZWF0PXQ9PT0xLzA\/LTI6dCxUYSh0aGlzKSk6LTI9PT10aGlzLl9yZXBlYXQ\/MS8wOnRoaXMuX3JlcGVhdH0sWHQucmVwZWF0RGVsYXk9ZnVuY3Rpb24gcmVwZWF0RGVsYXkodCl7aWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGU9dGhpcy5fdGltZTtyZXR1cm4gdGhpcy5fckRlbGF5PXQsVGEodGhpcyksZT90aGlzLnRpbWUoZSk6dGhpc31yZXR1cm4gdGhpcy5fckRlbGF5fSxYdC55b3lvPWZ1bmN0aW9uIHlveW8odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg\/KHRoaXMuX3lveW89dCx0aGlzKTp0aGlzLl95b3lvfSxYdC5zZWVrPWZ1bmN0aW9uIHNlZWsodCxlKXtyZXR1cm4gdGhpcy50b3RhbFRpbWUoeHQodGhpcyx0KSx3KGUpKX0sWHQucmVzdGFydD1mdW5jdGlvbiByZXN0YXJ0KHQsZSl7cmV0dXJuIHRoaXMucGxheSgpLnRvdGFsVGltZSh0Py10aGlzLl9kZWxheTowLHcoZSkpLHRoaXMuX2R1cnx8KHRoaXMuX3pUaW1lPS1VKSx0aGlzfSxYdC5wbGF5PWZ1bmN0aW9uIHBsYXkodCxlKXtyZXR1cm4gbnVsbCE9dCYmdGhpcy5zZWVrKHQsZSksdGhpcy5yZXZlcnNlZCghMSkucGF1c2VkKCExKX0sWHQucmV2ZXJzZT1mdW5jdGlvbiByZXZlcnNlKHQsZSl7cmV0dXJuIG51bGwhPXQmJnRoaXMuc2Vlayh0fHx0aGlzLnRvdGFsRHVyYXRpb24oKSxlKSx0aGlzLnJldmVyc2VkKCEwKS5wYXVzZWQoITEpfSxYdC5wYXVzZT1mdW5jdGlvbiBwYXVzZSh0LGUpe3JldHVybiBudWxsIT10JiZ0aGlzLnNlZWsodCxlKSx0aGlzLnBhdXNlZCghMCl9LFh0LnJlc3VtZT1mdW5jdGlvbiByZXN1bWUoKXtyZXR1cm4gdGhpcy5wYXVzZWQoITEpfSxYdC5yZXZlcnNlZD1mdW5jdGlvbiByZXZlcnNlZCh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oISF0IT09dGhpcy5yZXZlcnNlZCgpJiZ0aGlzLnRpbWVTY2FsZSgtdGhpcy5fcnRzfHwodD8tVTowKSksdGhpcyk6dGhpcy5fcnRzPDB9LFh0LmludmFsaWRhdGU9ZnVuY3Rpb24gaW52YWxpZGF0ZSgpe3JldHVybiB0aGlzLl9pbml0dGVkPXRoaXMuX2FjdD0wLHRoaXMuX3pUaW1lPS1VLHRoaXN9LFh0LmlzQWN0aXZlPWZ1bmN0aW9uIGlzQWN0aXZlKCl7dmFyIHQsZT10aGlzLnBhcmVudHx8dGhpcy5fZHAscj10aGlzLl9zdGFydDtyZXR1cm4hKGUmJiEodGhpcy5fdHMmJnRoaXMuX2luaXR0ZWQmJmUuaXNBY3RpdmUoKSYmKHQ9ZS5yYXdUaW1lKCEwKSk+PXImJnQ8dGhpcy5lbmRUaW1lKCEwKS1VKSl9LFh0LmV2ZW50Q2FsbGJhY2s9ZnVuY3Rpb24gZXZlbnRDYWxsYmFjayh0LGUscil7dmFyIGk9dGhpcy52YXJzO3JldHVybiAxPGFyZ3VtZW50cy5sZW5ndGg\/KGU\/KGlbdF09ZSxyJiYoaVt0KyJQYXJhbXMiXT1yKSwib25VcGRhdGUiPT09dCYmKHRoaXMuX29uVXBkYXRlPWUpKTpkZWxldGUgaVt0XSx0aGlzKTppW3RdfSxYdC50aGVuPWZ1bmN0aW9uIHRoZW4odCl7dmFyIGk9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gRW8oKXt2YXIgdD1pLnRoZW47aS50aGVuPW51bGwscyhyKSYmKHI9cihpKSkmJihyLnRoZW58fHI9PT1pKSYmKGkudGhlbj10KSxlKHIpLGkudGhlbj10fXZhciByPXModCk\/dDpxYTtpLl9pbml0dGVkJiYxPT09aS50b3RhbFByb2dyZXNzKCkmJjA8PWkuX3RzfHwhaS5fdFRpbWUmJmkuX3RzPDA\/RW8oKTppLl9wcm9tPUVvfSl9LFh0LmtpbGw9ZnVuY3Rpb24ga2lsbCgpe3ViKHRoaXMpfSxBbmltYXRpb24pO2Z1bmN0aW9uIEFuaW1hdGlvbih0KXt0aGlzLnZhcnM9dCx0aGlzLl9kZWxheT0rdC5kZWxheXx8MCwodGhpcy5fcmVwZWF0PXQucmVwZWF0PT09MS8wPy0yOnQucmVwZWF0fHwwKSYmKHRoaXMuX3JEZWxheT10LnJlcGVhdERlbGF5fHwwLHRoaXMuX3lveW89ISF0LnlveW98fCEhdC55b3lvRWFzZSksdGhpcy5fdHM9MSxTYSh0aGlzLCt0LmR1cmF0aW9uLDEsMSksdGhpcy5kYXRhPXQuZGF0YSxsJiYodGhpcy5fY3R4PWwpLmRhdGEucHVzaCh0aGlzKSxjfHxSdC53YWtlKCl9cmEoTnQucHJvdG90eXBlLHtfdGltZTowLF9zdGFydDowLF9lbmQ6MCxfdFRpbWU6MCxfdER1cjowLF9kaXJ0eTowLF9yZXBlYXQ6MCxfeW95bzohMSxwYXJlbnQ6bnVsbCxfaW5pdHRlZDohMSxfckRlbGF5OjAsX3RzOjEsX2RwOjAscmF0aW86MCxfelRpbWU6LVUsX3Byb206MCxfcHM6ITEsX3J0czoxfSk7dmFyIFF0PWZ1bmN0aW9uKGkpe2Z1bmN0aW9uIFRpbWVsaW5lKHQsZSl7dmFyIHI7cmV0dXJuIHZvaWQgMD09PXQmJih0PXt9KSwocj1pLmNhbGwodGhpcyx0KXx8dGhpcykubGFiZWxzPXt9LHIuc21vb3RoQ2hpbGRUaW1pbmc9ISF0LnNtb290aENoaWxkVGltaW5nLHIuYXV0b1JlbW92ZUNoaWxkcmVuPSEhdC5hdXRvUmVtb3ZlQ2hpbGRyZW4sci5fc29ydD13KHQuc29ydENoaWxkcmVuKSxJJiZMYSh0LnBhcmVudHx8SSxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHIpLGUpLHQucmV2ZXJzZWQmJnIucmV2ZXJzZSgpLHQucGF1c2VkJiZyLnBhdXNlZCghMCksdC5zY3JvbGxUcmlnZ2VyJiZNYShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHIpLHQuc2Nyb2xsVHJpZ2dlcikscn1faW5oZXJpdHNMb29zZShUaW1lbGluZSxpKTt2YXIgZT1UaW1lbGluZS5wcm90b3R5cGU7cmV0dXJuIGUudG89ZnVuY3Rpb24gdG8odCxlLHIpe3JldHVybiBXYSgwLGFyZ3VtZW50cyx0aGlzKSx0aGlzfSxlLmZyb209ZnVuY3Rpb24gZnJvbSh0LGUscil7cmV0dXJuIFdhKDEsYXJndW1lbnRzLHRoaXMpLHRoaXN9LGUuZnJvbVRvPWZ1bmN0aW9uIGZyb21Ubyh0LGUscixpKXtyZXR1cm4gV2EoMixhcmd1bWVudHMsdGhpcyksdGhpc30sZS5zZXQ9ZnVuY3Rpb24gc2V0KHQsZSxyKXtyZXR1cm4gZS5kdXJhdGlvbj0wLGUucGFyZW50PXRoaXMsd2EoZSkucmVwZWF0RGVsYXl8fChlLnJlcGVhdD0wKSxlLmltbWVkaWF0ZVJlbmRlcj0hIWUuaW1tZWRpYXRlUmVuZGVyLG5ldyBKdCh0LGUseHQodGhpcyxyKSwxKSx0aGlzfSxlLmNhbGw9ZnVuY3Rpb24gY2FsbCh0LGUscil7cmV0dXJuIExhKHRoaXMsSnQuZGVsYXllZENhbGwoMCx0LGUpLHIpfSxlLnN0YWdnZXJUbz1mdW5jdGlvbiBzdGFnZ2VyVG8odCxlLHIsaSxuLGEscyl7cmV0dXJuIHIuZHVyYXRpb249ZSxyLnN0YWdnZXI9ci5zdGFnZ2VyfHxpLHIub25Db21wbGV0ZT1hLHIub25Db21wbGV0ZVBhcmFtcz1zLHIucGFyZW50PXRoaXMsbmV3IEp0KHQscix4dCh0aGlzLG4pKSx0aGlzfSxlLnN0YWdnZXJGcm9tPWZ1bmN0aW9uIHN0YWdnZXJGcm9tKHQsZSxyLGksbixhLHMpe3JldHVybiByLnJ1bkJhY2t3YXJkcz0xLHdhKHIpLmltbWVkaWF0ZVJlbmRlcj13KHIuaW1tZWRpYXRlUmVuZGVyKSx0aGlzLnN0YWdnZXJUbyh0LGUscixpLG4sYSxzKX0sZS5zdGFnZ2VyRnJvbVRvPWZ1bmN0aW9uIHN0YWdnZXJGcm9tVG8odCxlLHIsaSxuLGEscyxvKXtyZXR1cm4gaS5zdGFydEF0PXIsd2EoaSkuaW1tZWRpYXRlUmVuZGVyPXcoaS5pbW1lZGlhdGVSZW5kZXIpLHRoaXMuc3RhZ2dlclRvKHQsZSxpLG4sYSxzLG8pfSxlLnJlbmRlcj1mdW5jdGlvbiByZW5kZXIodCxlLHIpe3ZhciBpLG4sYSxzLG8sdSxoLGwsZixkLGMscCxfPXRoaXMuX3RpbWUsbT10aGlzLl9kaXJ0eT90aGlzLnRvdGFsRHVyYXRpb24oKTp0aGlzLl90RHVyLGc9dGhpcy5fZHVyLHY9dDw9MD8wOmphKHQpLHk9dGhpcy5felRpbWU8MCE9dDwwJiYodGhpcy5faW5pdHRlZHx8IWcpO2lmKHRoaXMhPT1JJiZtPHYmJjA8PXQmJih2PW0pLHYhPT10aGlzLl90VGltZXx8cnx8eSl7aWYoXyE9PXRoaXMuX3RpbWUmJmcmJih2Kz10aGlzLl90aW1lLV8sdCs9dGhpcy5fdGltZS1fKSxpPXYsZj10aGlzLl9zdGFydCx1PSEobD10aGlzLl90cykseSYmKGd8fChfPXRoaXMuX3pUaW1lKSwhdCYmZXx8KHRoaXMuX3pUaW1lPXQpKSx0aGlzLl9yZXBlYXQpe2lmKGM9dGhpcy5feW95byxvPWcrdGhpcy5fckRlbGF5LHRoaXMuX3JlcGVhdDwtMSYmdDwwKXJldHVybiB0aGlzLnRvdGFsVGltZSgxMDAqbyt0LGUscik7aWYoaT1qYSh2JW8pLHY9PT1tPyhzPXRoaXMuX3JlcGVhdCxpPWcpOigocz1+fihkPWphKHYvbykpKSYmcz09PWQmJihpPWcscy0tKSxnPGkmJihpPWcpKSxkPVR0KHRoaXMuX3RUaW1lLG8pLCFfJiZ0aGlzLl90VGltZSYmZCE9PXMmJnRoaXMuX3RUaW1lLWQqby10aGlzLl9kdXI8PTAmJihkPXMpLGMmJjEmcyYmKGk9Zy1pLHA9MSkscyE9PWQmJiF0aGlzLl9sb2NrKXt2YXIgVD1jJiYxJmQsYj1UPT09KGMmJjEmcyk7aWYoczxkJiYoVD0hVCksXz1UPzA6diVnP2c6dix0aGlzLl9sb2NrPTEsdGhpcy5yZW5kZXIoX3x8KHA\/MDpqYShzKm8pKSxlLCFnKS5fbG9jaz0wLHRoaXMuX3RUaW1lPXYsIWUmJnRoaXMucGFyZW50JiZQdCh0aGlzLCJvblJlcGVhdCIpLHRoaXMudmFycy5yZXBlYXRSZWZyZXNoJiYhcCYmKHRoaXMuaW52YWxpZGF0ZSgpLl9sb2NrPTEpLF8mJl8hPT10aGlzLl90aW1lfHx1IT0hdGhpcy5fdHN8fHRoaXMudmFycy5vblJlcGVhdCYmIXRoaXMucGFyZW50JiYhdGhpcy5fYWN0KXJldHVybiB0aGlzO2lmKGc9dGhpcy5fZHVyLG09dGhpcy5fdER1cixiJiYodGhpcy5fbG9jaz0yLF89VD9nOi0xZS00LHRoaXMucmVuZGVyKF8sITApLHRoaXMudmFycy5yZXBlYXRSZWZyZXNoJiYhcCYmdGhpcy5pbnZhbGlkYXRlKCkpLHRoaXMuX2xvY2s9MCwhdGhpcy5fdHMmJiF1KXJldHVybiB0aGlzO1JiKHRoaXMscCl9fWlmKHRoaXMuX2hhc1BhdXNlJiYhdGhpcy5fZm9yY2luZyYmdGhpcy5fbG9jazwyJiYoaD1mdW5jdGlvbiBfZmluZE5leHRQYXVzZVR3ZWVuKHQsZSxyKXt2YXIgaTtpZihlPHIpZm9yKGk9dC5fZmlyc3Q7aSYmaS5fc3RhcnQ8PXI7KXtpZigiaXNQYXVzZSI9PT1pLmRhdGEmJmkuX3N0YXJ0PmUpcmV0dXJuIGk7aT1pLl9uZXh0fWVsc2UgZm9yKGk9dC5fbGFzdDtpJiZpLl9zdGFydD49cjspe2lmKCJpc1BhdXNlIj09PWkuZGF0YSYmaS5fc3RhcnQ8ZSlyZXR1cm4gaTtpPWkuX3ByZXZ9fSh0aGlzLGphKF8pLGphKGkpKSkmJih2LT1pLShpPWguX3N0YXJ0KSksdGhpcy5fdFRpbWU9dix0aGlzLl90aW1lPWksdGhpcy5fYWN0PSFsLHRoaXMuX2luaXR0ZWR8fCh0aGlzLl9vblVwZGF0ZT10aGlzLnZhcnMub25VcGRhdGUsdGhpcy5faW5pdHRlZD0xLHRoaXMuX3pUaW1lPXQsXz0wKSwhXyYmdiYmIWUmJiFkJiYoUHQodGhpcywib25TdGFydCIpLHRoaXMuX3RUaW1lIT09dikpcmV0dXJuIHRoaXM7aWYoXzw9aSYmMDw9dClmb3Iobj10aGlzLl9maXJzdDtuOyl7aWYoYT1uLl9uZXh0LChuLl9hY3R8fGk+PW4uX3N0YXJ0KSYmbi5fdHMmJmghPT1uKXtpZihuLnBhcmVudCE9PXRoaXMpcmV0dXJuIHRoaXMucmVuZGVyKHQsZSxyKTtpZihuLnJlbmRlcigwPG4uX3RzPyhpLW4uX3N0YXJ0KSpuLl90czoobi5fZGlydHk\/bi50b3RhbER1cmF0aW9uKCk6bi5fdER1cikrKGktbi5fc3RhcnQpKm4uX3RzLGUsciksaSE9PXRoaXMuX3RpbWV8fCF0aGlzLl90cyYmIXUpe2g9MCxhJiYodis9dGhpcy5felRpbWU9LVUpO2JyZWFrfX1uPWF9ZWxzZXtuPXRoaXMuX2xhc3Q7Zm9yKHZhciB3PXQ8MD90Omk7bjspe2lmKGE9bi5fcHJldiwobi5fYWN0fHx3PD1uLl9lbmQpJiZuLl90cyYmaCE9PW4pe2lmKG4ucGFyZW50IT09dGhpcylyZXR1cm4gdGhpcy5yZW5kZXIodCxlLHIpO2lmKG4ucmVuZGVyKDA8bi5fdHM\/KHctbi5fc3RhcnQpKm4uX3RzOihuLl9kaXJ0eT9uLnRvdGFsRHVyYXRpb24oKTpuLl90RHVyKSsody1uLl9zdGFydCkqbi5fdHMsZSxyfHxMJiZuYShuKSksaSE9PXRoaXMuX3RpbWV8fCF0aGlzLl90cyYmIXUpe2g9MCxhJiYodis9dGhpcy5felRpbWU9dz8tVTpVKTticmVha319bj1hfX1pZihoJiYhZSYmKHRoaXMucGF1c2UoKSxoLnJlbmRlcihfPD1pPzA6LVUpLl96VGltZT1fPD1pPzE6LTEsdGhpcy5fdHMpKXJldHVybiB0aGlzLl9zdGFydD1mLElhKHRoaXMpLHRoaXMucmVuZGVyKHQsZSxyKTt0aGlzLl9vblVwZGF0ZSYmIWUmJlB0KHRoaXMsIm9uVXBkYXRlIiwhMCksKHY9PT1tJiZ0aGlzLl90VGltZT49dGhpcy50b3RhbER1cmF0aW9uKCl8fCF2JiZfKSYmKGYhPT10aGlzLl9zdGFydCYmTWF0aC5hYnMobCk9PT1NYXRoLmFicyh0aGlzLl90cyl8fHRoaXMuX2xvY2t8fCghdCYmZ3x8ISh2PT09bSYmMDx0aGlzLl90c3x8IXYmJnRoaXMuX3RzPDApfHxBYSh0aGlzLDEpLGV8fHQ8MCYmIV98fCF2JiYhXyYmbXx8KFB0KHRoaXMsdj09PW0mJjA8PXQ\/Im9uQ29tcGxldGUiOiJvblJldmVyc2VDb21wbGV0ZSIsITApLCF0aGlzLl9wcm9tfHx2PG0mJjA8dGhpcy50aW1lU2NhbGUoKXx8dGhpcy5fcHJvbSgpKSkpfXJldHVybiB0aGlzfSxlLmFkZD1mdW5jdGlvbiBhZGQoZSxpKXt2YXIgbj10aGlzO2lmKHQoaSl8fChpPXh0KHRoaXMsaSxlKSksIShlIGluc3RhbmNlb2YgTnQpKXtpZigkKGUpKXJldHVybiBlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIG4uYWRkKHQsaSl9KSx0aGlzO2lmKHIoZSkpcmV0dXJuIHRoaXMuYWRkTGFiZWwoZSxpKTtpZighcyhlKSlyZXR1cm4gdGhpcztlPUp0LmRlbGF5ZWRDYWxsKDAsZSl9cmV0dXJuIHRoaXMhPT1lP0xhKHRoaXMsZSxpKTp0aGlzfSxlLmdldENoaWxkcmVuPWZ1bmN0aW9uIGdldENoaWxkcmVuKHQsZSxyLGkpe3ZvaWQgMD09PXQmJih0PSEwKSx2b2lkIDA9PT1lJiYoZT0hMCksdm9pZCAwPT09ciYmKHI9ITApLHZvaWQgMD09PWkmJihpPS1OKTtmb3IodmFyIG49W10sYT10aGlzLl9maXJzdDthOylhLl9zdGFydD49aSYmKGEgaW5zdGFuY2VvZiBKdD9lJiZuLnB1c2goYSk6KHImJm4ucHVzaChhKSx0JiZuLnB1c2guYXBwbHkobixhLmdldENoaWxkcmVuKCEwLGUscikpKSksYT1hLl9uZXh0O3JldHVybiBufSxlLmdldEJ5SWQ9ZnVuY3Rpb24gZ2V0QnlJZCh0KXtmb3IodmFyIGU9dGhpcy5nZXRDaGlsZHJlbigxLDEsMSkscj1lLmxlbmd0aDtyLS07KWlmKGVbcl0udmFycy5pZD09PXQpcmV0dXJuIGVbcl19LGUucmVtb3ZlPWZ1bmN0aW9uIHJlbW92ZSh0KXtyZXR1cm4gcih0KT90aGlzLnJlbW92ZUxhYmVsKHQpOnModCk\/dGhpcy5raWxsVHdlZW5zT2YodCk6KHQucGFyZW50PT09dGhpcyYmemEodGhpcyx0KSx0PT09dGhpcy5fcmVjZW50JiYodGhpcy5fcmVjZW50PXRoaXMuX2xhc3QpLEJhKHRoaXMpKX0sZS50b3RhbFRpbWU9ZnVuY3Rpb24gdG90YWxUaW1lKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg\/KHRoaXMuX2ZvcmNpbmc9MSwhdGhpcy5fZHAmJnRoaXMuX3RzJiYodGhpcy5fc3RhcnQ9amEoUnQudGltZS0oMDx0aGlzLl90cz90L3RoaXMuX3RzOih0aGlzLnRvdGFsRHVyYXRpb24oKS10KS8tdGhpcy5fdHMpKSksaS5wcm90b3R5cGUudG90YWxUaW1lLmNhbGwodGhpcyx0LGUpLHRoaXMuX2ZvcmNpbmc9MCx0aGlzKTp0aGlzLl90VGltZX0sZS5hZGRMYWJlbD1mdW5jdGlvbiBhZGRMYWJlbCh0LGUpe3JldHVybiB0aGlzLmxhYmVsc1t0XT14dCh0aGlzLGUpLHRoaXN9LGUucmVtb3ZlTGFiZWw9ZnVuY3Rpb24gcmVtb3ZlTGFiZWwodCl7cmV0dXJuIGRlbGV0ZSB0aGlzLmxhYmVsc1t0XSx0aGlzfSxlLmFkZFBhdXNlPWZ1bmN0aW9uIGFkZFBhdXNlKHQsZSxyKXt2YXIgaT1KdC5kZWxheWVkQ2FsbCgwLGV8fFQscik7cmV0dXJuIGkuZGF0YT0iaXNQYXVzZSIsdGhpcy5faGFzUGF1c2U9MSxMYSh0aGlzLGkseHQodGhpcyx0KSl9LGUucmVtb3ZlUGF1c2U9ZnVuY3Rpb24gcmVtb3ZlUGF1c2UodCl7dmFyIGU9dGhpcy5fZmlyc3Q7Zm9yKHQ9eHQodGhpcyx0KTtlOyllLl9zdGFydD09PXQmJiJpc1BhdXNlIj09PWUuZGF0YSYmQWEoZSksZT1lLl9uZXh0fSxlLmtpbGxUd2VlbnNPZj1mdW5jdGlvbiBraWxsVHdlZW5zT2YodCxlLHIpe2Zvcih2YXIgaT10aGlzLmdldFR3ZWVuc09mKHQsciksbj1pLmxlbmd0aDtuLS07KVV0IT09aVtuXSYmaVtuXS5raWxsKHQsZSk7cmV0dXJuIHRoaXN9LGUuZ2V0VHdlZW5zT2Y9ZnVuY3Rpb24gZ2V0VHdlZW5zT2YoZSxyKXtmb3IodmFyIGksbj1bXSxhPU90KGUpLHM9dGhpcy5fZmlyc3Qsbz10KHIpO3M7KXMgaW5zdGFuY2VvZiBKdD9sYShzLl90YXJnZXRzLGEpJiYobz8oIVV0fHxzLl9pbml0dGVkJiZzLl90cykmJnMuZ2xvYmFsVGltZSgwKTw9ciYmcy5nbG9iYWxUaW1lKHMudG90YWxEdXJhdGlvbigpKT5yOiFyfHxzLmlzQWN0aXZlKCkpJiZuLnB1c2gocyk6KGk9cy5nZXRUd2VlbnNPZihhLHIpKS5sZW5ndGgmJm4ucHVzaC5hcHBseShuLGkpLHM9cy5fbmV4dDtyZXR1cm4gbn0sZS50d2VlblRvPWZ1bmN0aW9uIHR3ZWVuVG8odCxlKXtlPWV8fHt9O3ZhciByLGk9dGhpcyxuPXh0KGksdCksYT1lLnN0YXJ0QXQscz1lLm9uU3RhcnQsbz1lLm9uU3RhcnRQYXJhbXMsdT1lLmltbWVkaWF0ZVJlbmRlcixoPUp0LnRvKGkscmEoe2Vhc2U6ZS5lYXNlfHwibm9uZSIsbGF6eTohMSxpbW1lZGlhdGVSZW5kZXI6ITEsdGltZTpuLG92ZXJ3cml0ZToiYXV0byIsZHVyYXRpb246ZS5kdXJhdGlvbnx8TWF0aC5hYnMoKG4tKGEmJiJ0aW1lImluIGE\/YS50aW1lOmkuX3RpbWUpKS9pLnRpbWVTY2FsZSgpKXx8VSxvblN0YXJ0OmZ1bmN0aW9uIG9uU3RhcnQoKXtpZihpLnBhdXNlKCksIXIpe3ZhciB0PWUuZHVyYXRpb258fE1hdGguYWJzKChuLShhJiYidGltZSJpbiBhP2EudGltZTppLl90aW1lKSkvaS50aW1lU2NhbGUoKSk7aC5fZHVyIT09dCYmU2EoaCx0LDAsMSkucmVuZGVyKGguX3RpbWUsITAsITApLHI9MX1zJiZzLmFwcGx5KGgsb3x8W10pfX0sZSkpO3JldHVybiB1P2gucmVuZGVyKDApOmh9LGUudHdlZW5Gcm9tVG89ZnVuY3Rpb24gdHdlZW5Gcm9tVG8odCxlLHIpe3JldHVybiB0aGlzLnR3ZWVuVG8oZSxyYSh7c3RhcnRBdDp7dGltZTp4dCh0aGlzLHQpfX0scikpfSxlLnJlY2VudD1mdW5jdGlvbiByZWNlbnQoKXtyZXR1cm4gdGhpcy5fcmVjZW50fSxlLm5leHRMYWJlbD1mdW5jdGlvbiBuZXh0TGFiZWwodCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PXRoaXMuX3RpbWUpLHNiKHRoaXMseHQodGhpcyx0KSl9LGUucHJldmlvdXNMYWJlbD1mdW5jdGlvbiBwcmV2aW91c0xhYmVsKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD10aGlzLl90aW1lKSxzYih0aGlzLHh0KHRoaXMsdCksMSl9LGUuY3VycmVudExhYmVsPWZ1bmN0aW9uIGN1cnJlbnRMYWJlbCh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnNlZWsodCwhMCk6dGhpcy5wcmV2aW91c0xhYmVsKHRoaXMuX3RpbWUrVSl9LGUuc2hpZnRDaGlsZHJlbj1mdW5jdGlvbiBzaGlmdENoaWxkcmVuKHQsZSxyKXt2b2lkIDA9PT1yJiYocj0wKTtmb3IodmFyIGksbj10aGlzLl9maXJzdCxhPXRoaXMubGFiZWxzO247KW4uX3N0YXJ0Pj1yJiYobi5fc3RhcnQrPXQsbi5fZW5kKz10KSxuPW4uX25leHQ7aWYoZSlmb3IoaSBpbiBhKWFbaV0+PXImJihhW2ldKz10KTtyZXR1cm4gQmEodGhpcyl9LGUuaW52YWxpZGF0ZT1mdW5jdGlvbiBpbnZhbGlkYXRlKHQpe3ZhciBlPXRoaXMuX2ZpcnN0O2Zvcih0aGlzLl9sb2NrPTA7ZTspZS5pbnZhbGlkYXRlKHQpLGU9ZS5fbmV4dDtyZXR1cm4gaS5wcm90b3R5cGUuaW52YWxpZGF0ZS5jYWxsKHRoaXMsdCl9LGUuY2xlYXI9ZnVuY3Rpb24gY2xlYXIodCl7dm9pZCAwPT09dCYmKHQ9ITApO2Zvcih2YXIgZSxyPXRoaXMuX2ZpcnN0O3I7KWU9ci5fbmV4dCx0aGlzLnJlbW92ZShyKSxyPWU7cmV0dXJuIHRoaXMuX2RwJiYodGhpcy5fdGltZT10aGlzLl90VGltZT10aGlzLl9wVGltZT0wKSx0JiYodGhpcy5sYWJlbHM9e30pLEJhKHRoaXMpfSxlLnRvdGFsRHVyYXRpb249ZnVuY3Rpb24gdG90YWxEdXJhdGlvbih0KXt2YXIgZSxyLGksbj0wLGE9dGhpcyxzPWEuX2xhc3Qsbz1OO2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGEudGltZVNjYWxlKChhLl9yZXBlYXQ8MD9hLmR1cmF0aW9uKCk6YS50b3RhbER1cmF0aW9uKCkpLyhhLnJldmVyc2VkKCk\/LXQ6dCkpO2lmKGEuX2RpcnR5KXtmb3IoaT1hLnBhcmVudDtzOyllPXMuX3ByZXYscy5fZGlydHkmJnMudG90YWxEdXJhdGlvbigpLG88KHI9cy5fc3RhcnQpJiZhLl9zb3J0JiZzLl90cyYmIWEuX2xvY2s\/KGEuX2xvY2s9MSxMYShhLHMsci1zLl9kZWxheSwxKS5fbG9jaz0wKTpvPXIscjwwJiZzLl90cyYmKG4tPXIsKCFpJiYhYS5fZHB8fGkmJmkuc21vb3RoQ2hpbGRUaW1pbmcpJiYoYS5fc3RhcnQrPXIvYS5fdHMsYS5fdGltZS09cixhLl90VGltZS09ciksYS5zaGlmdENoaWxkcmVuKC1yLCExLC1JbmZpbml0eSksbz0wKSxzLl9lbmQ+biYmcy5fdHMmJihuPXMuX2VuZCkscz1lO1NhKGEsYT09PUkmJmEuX3RpbWU+bj9hLl90aW1lOm4sMSwxKSxhLl9kaXJ0eT0wfXJldHVybiBhLl90RHVyfSxUaW1lbGluZS51cGRhdGVSb290PWZ1bmN0aW9uIHVwZGF0ZVJvb3QodCl7aWYoSS5fdHMmJihvYShJLEhhKHQsSSkpLGY9UnQuZnJhbWUpLFJ0LmZyYW1lPj1tdCl7bXQrPVguYXV0b1NsZWVwfHwxMjA7dmFyIGU9SS5fZmlyc3Q7aWYoKCFlfHwhZS5fdHMpJiZYLmF1dG9TbGVlcCYmUnQuX2xpc3RlbmVycy5sZW5ndGg8Mil7Zm9yKDtlJiYhZS5fdHM7KWU9ZS5fbmV4dDtlfHxSdC5zbGVlcCgpfX19LFRpbWVsaW5lfShOdCk7cmEoUXQucHJvdG90eXBlLHtfbG9jazowLF9oYXNQYXVzZTowLF9mb3JjaW5nOjB9KTtmdW5jdGlvbiBiYyh0LGUsaSxuLGEsbyl7dmFyIHUsaCxsLGY7aWYocHRbdF0mJiExIT09KHU9bmV3IHB0W3RdKS5pbml0KGEsdS5yYXdWYXJzP2VbdF06ZnVuY3Rpb24gX3Byb2Nlc3NWYXJzKHQsZSxpLG4sYSl7aWYocyh0KSYmKHQ9R3QodCxhLGUsaSxuKSksIXYodCl8fHQuc3R5bGUmJnQubm9kZVR5cGV8fCQodCl8fEoodCkpcmV0dXJuIHIodCk\/R3QodCxhLGUsaSxuKTp0O3ZhciBvLHU9e307Zm9yKG8gaW4gdCl1W29dPUd0KHRbb10sYSxlLGksbik7cmV0dXJuIHV9KGVbdF0sbixhLG8saSksaSxuLG8pJiYoaS5fcHQ9aD1uZXcgZ2UoaS5fcHQsYSx0LDAsMSx1LnJlbmRlcix1LDAsdS5wcmlvcml0eSksaSE9PWQpKWZvcihsPWkuX3B0TG9va3VwW2kuX3RhcmdldHMuaW5kZXhPZihhKV0sZj11Ll9wcm9wcy5sZW5ndGg7Zi0tOylsW3UuX3Byb3BzW2ZdXT1oO3JldHVybiB1fWZ1bmN0aW9uIGhjKHQscixlLGkpe3ZhciBuLGEscz1yLmVhc2V8fGl8fCJwb3dlcjEuaW5PdXQiO2lmKCQocikpYT1lW3RdfHwoZVt0XT1bXSksci5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEucHVzaCh7dDplLyhyLmxlbmd0aC0xKSoxMDAsdjp0LGU6c30pfSk7ZWxzZSBmb3IobiBpbiByKWE9ZVtuXXx8KGVbbl09W10pLCJlYXNlIj09PW58fGEucHVzaCh7dDpwYXJzZUZsb2F0KHQpLHY6cltuXSxlOnN9KX12YXIgVXQscXQsVnQ9ZnVuY3Rpb24gX2FkZFByb3BUd2Vlbih0LGUsaSxuLGEsbyx1LGgsbCxmKXtzKG4pJiYobj1uKGF8fDAsdCxvKSk7dmFyIGQsYz10W2VdLHA9ImdldCIhPT1pP2k6cyhjKT9sP3RbZS5pbmRleE9mKCJzZXQiKXx8IXModFsiZ2V0IitlLnN1YnN0cigzKV0pP2U6ImdldCIrZS5zdWJzdHIoMyldKGwpOnRbZV0oKTpjLF89cyhjKT9sP3JlOnRlOiR0O2lmKHIobikmJih+bi5pbmRleE9mKCJyYW5kb20oIikmJihuPXBiKG4pKSwiPSI9PT1uLmNoYXJBdCgxKSYmKCEoZD1rYShwLG4pKyhaYShwKXx8MCkpJiYwIT09ZHx8KG49ZCkpKSwhZnx8cCE9PW58fHF0KXJldHVybiBpc05hTihwKm4pfHwiIj09PW4\/KGN8fGUgaW4gdHx8UShlLG4pLGZ1bmN0aW9uIF9hZGRDb21wbGV4U3RyaW5nUHJvcFR3ZWVuKHQsZSxyLGksbixhLHMpe3ZhciBvLHUsaCxsLGYsZCxjLHAsXz1uZXcgZ2UodGhpcy5fcHQsdCxlLDAsMSxvZSxudWxsLG4pLG09MCxnPTA7Zm9yKF8uYj1yLF8uZT1pLHIrPSIiLChjPX4oaSs9IiIpLmluZGV4T2YoInJhbmRvbSgiKSkmJihpPXBiKGkpKSxhJiYoYShwPVtyLGldLHQsZSkscj1wWzBdLGk9cFsxXSksdT1yLm1hdGNoKGl0KXx8W107bz1pdC5leGVjKGkpOylsPW9bMF0sZj1pLnN1YnN0cmluZyhtLG8uaW5kZXgpLGg\/aD0oaCsxKSU1OiJyZ2JhKCI9PT1mLnN1YnN0cigtNSkmJihoPTEpLGwhPT11W2crK10mJihkPXBhcnNlRmxvYXQodVtnLTFdKXx8MCxfLl9wdD17X25leHQ6Xy5fcHQscDpmfHwxPT09Zz9mOiIsIixzOmQsYzoiPSI9PT1sLmNoYXJBdCgxKT9rYShkLGwpLWQ6cGFyc2VGbG9hdChsKS1kLG06aCYmaDw0P01hdGgucm91bmQ6MH0sbT1pdC5sYXN0SW5kZXgpO3JldHVybiBfLmM9bTxpLmxlbmd0aD9pLnN1YnN0cmluZyhtLGkubGVuZ3RoKToiIixfLmZwPXMsKG50LnRlc3QoaSl8fGMpJiYoXy5lPTApLHRoaXMuX3B0PV99LmNhbGwodGhpcyx0LGUscCxuLF8saHx8WC5zdHJpbmdGaWx0ZXIsbCkpOihkPW5ldyBnZSh0aGlzLl9wdCx0LGUsK3B8fDAsbi0ocHx8MCksImJvb2xlYW4iPT10eXBlb2YgYz9zZTpuZSwwLF8pLGwmJihkLmZwPWwpLHUmJmQubW9kaWZpZXIodSx0aGlzLHQpLHRoaXMuX3B0PWQpfSxXdD1mdW5jdGlvbiBfaW5pdFR3ZWVuKHQsZSxyKXt2YXIgaSxuLGEscyxvLHUsaCxsLGYsZCxjLHAsXyxtPXQudmFycyxnPW0uZWFzZSx2PW0uc3RhcnRBdCx5PW0uaW1tZWRpYXRlUmVuZGVyLFQ9bS5sYXp5LGI9bS5vblVwZGF0ZSx4PW0ucnVuQmFja3dhcmRzLE09bS55b3lvRWFzZSxrPW0ua2V5ZnJhbWVzLE89bS5hdXRvUmV2ZXJ0LEE9dC5fZHVyLFA9dC5fc3RhcnRBdCxDPXQuX3RhcmdldHMsUz10LnBhcmVudCxEPVMmJiJuZXN0ZWQiPT09Uy5kYXRhP1MudmFycy50YXJnZXRzOkMsej0iYXV0byI9PT10Ll9vdmVyd3JpdGUmJiFGLEU9dC50aW1lbGluZTtpZighRXx8ayYmZ3x8KGc9Im5vbmUiKSx0Ll9lYXNlPVl0KGcsWi5lYXNlKSx0Ll95RWFzZT1NP2p0KFl0KCEwPT09TT9nOk0sWi5lYXNlKSk6MCxNJiZ0Ll95b3lvJiYhdC5fcmVwZWF0JiYoTT10Ll95RWFzZSx0Ll95RWFzZT10Ll9lYXNlLHQuX2Vhc2U9TSksdC5fZnJvbT0hRSYmISFtLnJ1bkJhY2t3YXJkcywhRXx8ayYmIW0uc3RhZ2dlcil7aWYocD0obD1DWzBdP2ZhKENbMF0pLmhhcm5lc3M6MCkmJm1bbC5wcm9wXSxpPXZhKG0sZnQpLFAmJihQLl96VGltZTwwJiZQLnByb2dyZXNzKDEpLGU8MCYmeCYmeSYmIU8\/UC5yZW5kZXIoLTEsITApOlAucmV2ZXJ0KHgmJkE\/aHQ6dXQpLFAuX2xhenk9MCksdil7aWYoQWEodC5fc3RhcnRBdD1KdC5zZXQoQyxyYSh7ZGF0YToiaXNTdGFydCIsb3ZlcndyaXRlOiExLHBhcmVudDpTLGltbWVkaWF0ZVJlbmRlcjohMCxsYXp5OiFQJiZ3KFQpLHN0YXJ0QXQ6bnVsbCxkZWxheTowLG9uVXBkYXRlOmImJmZ1bmN0aW9uKCl7cmV0dXJuIFB0KHQsIm9uVXBkYXRlIil9LHN0YWdnZXI6MH0sdikpKSx0Ll9zdGFydEF0Ll9kcD0wLHQuX3N0YXJ0QXQuX3NhdD10LGU8MCYmKEx8fCF5JiYhTykmJnQuX3N0YXJ0QXQucmV2ZXJ0KGh0KSx5JiZBJiZlPD0wJiZyPD0wKXJldHVybiB2b2lkKGUmJih0Ll96VGltZT1lKSl9ZWxzZSBpZih4JiZBJiYhUClpZihlJiYoeT0hMSksYT1yYSh7b3ZlcndyaXRlOiExLGRhdGE6ImlzRnJvbVN0YXJ0IixsYXp5OnkmJiFQJiZ3KFQpLGltbWVkaWF0ZVJlbmRlcjp5LHN0YWdnZXI6MCxwYXJlbnQ6U30saSkscCYmKGFbbC5wcm9wXT1wKSxBYSh0Ll9zdGFydEF0PUp0LnNldChDLGEpKSx0Ll9zdGFydEF0Ll9kcD0wLHQuX3N0YXJ0QXQuX3NhdD10LGU8MCYmKEw\/dC5fc3RhcnRBdC5yZXZlcnQoaHQpOnQuX3N0YXJ0QXQucmVuZGVyKC0xLCEwKSksdC5felRpbWU9ZSx5KXtpZighZSlyZXR1cm59ZWxzZSBfaW5pdFR3ZWVuKHQuX3N0YXJ0QXQsVSxVKTtmb3IodC5fcHQ9dC5fcHRDYWNoZT0wLFQ9QSYmdyhUKXx8VCYmIUEsbj0wO248Qy5sZW5ndGg7bisrKXtpZihoPShvPUNbbl0pLl9nc2FwfHxlYShDKVtuXS5fZ3NhcCx0Ll9wdExvb2t1cFtuXT1kPXt9LGN0W2guaWRdJiZkdC5sZW5ndGgmJm1hKCksYz1EPT09Qz9uOkQuaW5kZXhPZihvKSxsJiYhMSE9PShmPW5ldyBsKS5pbml0KG8scHx8aSx0LGMsRCkmJih0Ll9wdD1zPW5ldyBnZSh0Ll9wdCxvLGYubmFtZSwwLDEsZi5yZW5kZXIsZiwwLGYucHJpb3JpdHkpLGYuX3Byb3BzLmZvckVhY2goZnVuY3Rpb24odCl7ZFt0XT1zfSksZi5wcmlvcml0eSYmKHU9MSkpLCFsfHxwKWZvcihhIGluIGkpcHRbYV0mJihmPWJjKGEsaSx0LGMsbyxEKSk\/Zi5wcmlvcml0eSYmKHU9MSk6ZFthXT1zPVZ0LmNhbGwodCxvLGEsImdldCIsaVthXSxjLEQsMCxtLnN0cmluZ0ZpbHRlcik7dC5fb3AmJnQuX29wW25dJiZ0LmtpbGwobyx0Ll9vcFtuXSkseiYmdC5fcHQmJihVdD10LEkua2lsbFR3ZWVuc09mKG8sZCx0Lmdsb2JhbFRpbWUoZSkpLF89IXQucGFyZW50LFV0PTApLHQuX3B0JiZUJiYoY3RbaC5pZF09MSl9dSYmX2UodCksdC5fb25Jbml0JiZ0Ll9vbkluaXQodCl9dC5fb25VcGRhdGU9Yix0Ll9pbml0dGVkPSghdC5fb3B8fHQuX3B0KSYmIV8sayYmZTw9MCYmRS5yZW5kZXIoTiwhMCwhMCl9LEd0PWZ1bmN0aW9uIF9wYXJzZUZ1bmNPclN0cmluZyh0LGUsaSxuLGEpe3JldHVybiBzKHQpP3QuY2FsbChlLGksbixhKTpyKHQpJiZ+dC5pbmRleE9mKCJyYW5kb20oIik\/cGIodCk6dH0sSHQ9dnQrInJlcGVhdCxyZXBlYXREZWxheSx5b3lvLHJlcGVhdFJlZnJlc2gseW95b0Vhc2UsYXV0b1JldmVydCIsS3Q9e307aGEoSHQrIixpZCxzdGFnZ2VyLGRlbGF5LGR1cmF0aW9uLHBhdXNlZCxzY3JvbGxUcmlnZ2VyIixmdW5jdGlvbih0KXtyZXR1cm4gS3RbdF09MX0pO3ZhciBKdD1mdW5jdGlvbihFKXtmdW5jdGlvbiBUd2VlbihlLHIsaSxuKXt2YXIgYTsibnVtYmVyIj09dHlwZW9mIHImJihpLmR1cmF0aW9uPXIscj1pLGk9bnVsbCk7dmFyIHMsbyx1LGgsbCxmLGQsYyxwPShhPUUuY2FsbCh0aGlzLG4\/cjp3YShyKSl8fHRoaXMpLnZhcnMsXz1wLmR1cmF0aW9uLG09cC5kZWxheSxnPXAuaW1tZWRpYXRlUmVuZGVyLFQ9cC5zdGFnZ2VyLGI9cC5vdmVyd3JpdGUseD1wLmtleWZyYW1lcyxNPXAuZGVmYXVsdHMsaz1wLnNjcm9sbFRyaWdnZXIsTz1wLnlveW9FYXNlLEE9ci5wYXJlbnR8fEksUD0oJChlKXx8SihlKT90KGVbMF0pOiJsZW5ndGgiaW4gcik\/W2VdOk90KGUpO2lmKGEuX3RhcmdldHM9UC5sZW5ndGg\/ZWEoUCk6UigiR1NBUCB0YXJnZXQgIitlKyIgbm90IGZvdW5kLiBodHRwczovL2dzYXAuY29tIiwhWC5udWxsVGFyZ2V0V2Fybil8fFtdLGEuX3B0TG9va3VwPVtdLGEuX292ZXJ3cml0ZT1iLHh8fFR8fHkoXyl8fHkobSkpe2lmKHI9YS52YXJzLChzPWEudGltZWxpbmU9bmV3IFF0KHtkYXRhOiJuZXN0ZWQiLGRlZmF1bHRzOk18fHt9LHRhcmdldHM6QSYmIm5lc3RlZCI9PT1BLmRhdGE\/QS52YXJzLnRhcmdldHM6UH0pKS5raWxsKCkscy5wYXJlbnQ9cy5fZHA9X2Fzc2VydFRoaXNJbml0aWFsaXplZChhKSxzLl9zdGFydD0wLFR8fHkoXyl8fHkobSkpe2lmKGg9UC5sZW5ndGgsZD1UJiZmYihUKSx2KFQpKWZvcihsIGluIFQpfkh0LmluZGV4T2YobCkmJigoYz1jfHx7fSlbbF09VFtsXSk7Zm9yKG89MDtvPGg7bysrKSh1PXZhKHIsS3QpKS5zdGFnZ2VyPTAsTyYmKHUueW95b0Vhc2U9TyksYyYmeXQodSxjKSxmPVBbb10sdS5kdXJhdGlvbj0rR3QoXyxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGEpLG8sZixQKSx1LmRlbGF5PSgrR3QobSxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGEpLG8sZixQKXx8MCktYS5fZGVsYXksIVQmJjE9PT1oJiZ1LmRlbGF5JiYoYS5fZGVsYXk9bT11LmRlbGF5LGEuX3N0YXJ0Kz1tLHUuZGVsYXk9MCkscy50byhmLHUsZD9kKG8sZixQKTowKSxzLl9lYXNlPUx0Lm5vbmU7cy5kdXJhdGlvbigpP189bT0wOmEudGltZWxpbmU9MH1lbHNlIGlmKHgpe3dhKHJhKHMudmFycy5kZWZhdWx0cyx7ZWFzZToibm9uZSJ9KSkscy5fZWFzZT1ZdCh4LmVhc2V8fHIuZWFzZXx8Im5vbmUiKTt2YXIgQyxTLEQsej0wO2lmKCQoeCkpeC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBzLnRvKFAsdCwiPiIpfSkscy5kdXJhdGlvbigpO2Vsc2V7Zm9yKGwgaW4gdT17fSx4KSJlYXNlIj09PWx8fCJlYXNlRWFjaCI9PT1sfHxoYyhsLHhbbF0sdSx4LmVhc2VFYWNoKTtmb3IobCBpbiB1KWZvcihDPXVbbF0uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnQtZS50fSksbz16PTA7bzxDLmxlbmd0aDtvKyspKEQ9e2Vhc2U6KFM9Q1tvXSkuZSxkdXJhdGlvbjooUy50LShvP0Nbby0xXS50OjApKS8xMDAqX30pW2xdPVMudixzLnRvKFAsRCx6KSx6Kz1ELmR1cmF0aW9uO3MuZHVyYXRpb24oKTxfJiZzLnRvKHt9LHtkdXJhdGlvbjpfLXMuZHVyYXRpb24oKX0pfX1ffHxhLmR1cmF0aW9uKF89cy5kdXJhdGlvbigpKX1lbHNlIGEudGltZWxpbmU9MDtyZXR1cm4hMCE9PWJ8fEZ8fChVdD1fYXNzZXJ0VGhpc0luaXRpYWxpemVkKGEpLEkua2lsbFR3ZWVuc09mKFApLFV0PTApLExhKEEsX2Fzc2VydFRoaXNJbml0aWFsaXplZChhKSxpKSxyLnJldmVyc2VkJiZhLnJldmVyc2UoKSxyLnBhdXNlZCYmYS5wYXVzZWQoITApLChnfHwhXyYmIXgmJmEuX3N0YXJ0PT09amEoQS5fdGltZSkmJncoZykmJmZ1bmN0aW9uIF9oYXNOb1BhdXNlZEFuY2VzdG9ycyh0KXtyZXR1cm4hdHx8dC5fdHMmJl9oYXNOb1BhdXNlZEFuY2VzdG9ycyh0LnBhcmVudCl9KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoYSkpJiYibmVzdGVkIiE9PUEuZGF0YSkmJihhLl90VGltZT0tVSxhLnJlbmRlcihNYXRoLm1heCgwLC1tKXx8MCkpLGsmJk1hKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoYSksayksYX1faW5oZXJpdHNMb29zZShUd2VlbixFKTt2YXIgZT1Ud2Vlbi5wcm90b3R5cGU7cmV0dXJuIGUucmVuZGVyPWZ1bmN0aW9uIHJlbmRlcih0LGUscil7dmFyIGksbixhLHMsbyx1LGgsbCxmLGQ9dGhpcy5fdGltZSxjPXRoaXMuX3REdXIscD10aGlzLl9kdXIsXz10PDAsbT1jLVU8dCYmIV8\/Yzp0PFU\/MDp0O2lmKHApe2lmKG0hPT10aGlzLl90VGltZXx8IXR8fHJ8fCF0aGlzLl9pbml0dGVkJiZ0aGlzLl90VGltZXx8dGhpcy5fc3RhcnRBdCYmdGhpcy5felRpbWU8MCE9X3x8dGhpcy5fbGF6eSl7aWYoaT1tLGw9dGhpcy50aW1lbGluZSx0aGlzLl9yZXBlYXQpe2lmKHM9cCt0aGlzLl9yRGVsYXksdGhpcy5fcmVwZWF0PC0xJiZfKXJldHVybiB0aGlzLnRvdGFsVGltZSgxMDAqcyt0LGUscik7aWYoaT1qYShtJXMpLG09PT1jPyhhPXRoaXMuX3JlcGVhdCxpPXApOihhPX5+KG89amEobS9zKSkpJiZhPT09bz8oaT1wLGEtLSk6cDxpJiYoaT1wKSwodT10aGlzLl95b3lvJiYxJmEpJiYoZj10aGlzLl95RWFzZSxpPXAtaSksbz1UdCh0aGlzLl90VGltZSxzKSxpPT09ZCYmIXImJnRoaXMuX2luaXR0ZWQmJmE9PT1vKXJldHVybiB0aGlzLl90VGltZT1tLHRoaXM7YSE9PW8mJihsJiZ0aGlzLl95RWFzZSYmUmIobCx1KSx0aGlzLnZhcnMucmVwZWF0UmVmcmVzaCYmIXUmJiF0aGlzLl9sb2NrJiZpIT09cyYmdGhpcy5faW5pdHRlZCYmKHRoaXMuX2xvY2s9cj0xLHRoaXMucmVuZGVyKGphKHMqYSksITApLmludmFsaWRhdGUoKS5fbG9jaz0wKSl9aWYoIXRoaXMuX2luaXR0ZWQpe2lmKE5hKHRoaXMsXz90OmkscixlLG0pKXJldHVybiB0aGlzLl90VGltZT0wLHRoaXM7aWYoIShkPT09dGhpcy5fdGltZXx8ciYmdGhpcy52YXJzLnJlcGVhdFJlZnJlc2gmJmEhPT1vKSlyZXR1cm4gdGhpcztpZihwIT09dGhpcy5fZHVyKXJldHVybiB0aGlzLnJlbmRlcih0LGUscil9aWYodGhpcy5fdFRpbWU9bSx0aGlzLl90aW1lPWksIXRoaXMuX2FjdCYmdGhpcy5fdHMmJih0aGlzLl9hY3Q9MSx0aGlzLl9sYXp5PTApLHRoaXMucmF0aW89aD0oZnx8dGhpcy5fZWFzZSkoaS9wKSx0aGlzLl9mcm9tJiYodGhpcy5yYXRpbz1oPTEtaCksIWQmJm0mJiFlJiYhbyYmKFB0KHRoaXMsIm9uU3RhcnQiKSx0aGlzLl90VGltZSE9PW0pKXJldHVybiB0aGlzO2ZvcihuPXRoaXMuX3B0O247KW4ucihoLG4uZCksbj1uLl9uZXh0O2wmJmwucmVuZGVyKHQ8MD90OmwuX2R1cipsLl9lYXNlKGkvdGhpcy5fZHVyKSxlLHIpfHx0aGlzLl9zdGFydEF0JiYodGhpcy5felRpbWU9dCksdGhpcy5fb25VcGRhdGUmJiFlJiYoXyYmRGEodGhpcyx0LDAsciksUHQodGhpcywib25VcGRhdGUiKSksdGhpcy5fcmVwZWF0JiZhIT09byYmdGhpcy52YXJzLm9uUmVwZWF0JiYhZSYmdGhpcy5wYXJlbnQmJlB0KHRoaXMsIm9uUmVwZWF0IiksbSE9PXRoaXMuX3REdXImJm18fHRoaXMuX3RUaW1lIT09bXx8KF8mJiF0aGlzLl9vblVwZGF0ZSYmRGEodGhpcyx0LDAsITApLCF0JiZwfHwhKG09PT10aGlzLl90RHVyJiYwPHRoaXMuX3RzfHwhbSYmdGhpcy5fdHM8MCl8fEFhKHRoaXMsMSksZXx8XyYmIWR8fCEobXx8ZHx8dSl8fChQdCh0aGlzLG09PT1jPyJvbkNvbXBsZXRlIjoib25SZXZlcnNlQ29tcGxldGUiLCEwKSwhdGhpcy5fcHJvbXx8bTxjJiYwPHRoaXMudGltZVNjYWxlKCl8fHRoaXMuX3Byb20oKSkpfX1lbHNlIWZ1bmN0aW9uIF9yZW5kZXJaZXJvRHVyYXRpb25Ud2Vlbih0LGUscixpKXt2YXIgbixhLHMsbz10LnJhdGlvLHU9ZTwwfHwhZSYmKCF0Ll9zdGFydCYmZnVuY3Rpb24gX3BhcmVudFBsYXloZWFkSXNCZWZvcmVTdGFydCh0KXt2YXIgZT10LnBhcmVudDtyZXR1cm4gZSYmZS5fdHMmJmUuX2luaXR0ZWQmJiFlLl9sb2NrJiYoZS5yYXdUaW1lKCk8MHx8X3BhcmVudFBsYXloZWFkSXNCZWZvcmVTdGFydChlKSl9KHQpJiYodC5faW5pdHRlZHx8IWJ0KHQpKXx8KHQuX3RzPDB8fHQuX2RwLl90czwwKSYmIWJ0KHQpKT8wOjEsaD10Ll9yRGVsYXksbD0wO2lmKGgmJnQuX3JlcGVhdCYmKGw9TXQoMCx0Ll90RHVyLGUpLGE9VHQobCxoKSx0Ll95b3lvJiYxJmEmJih1PTEtdSksYSE9PVR0KHQuX3RUaW1lLGgpJiYobz0xLXUsdC52YXJzLnJlcGVhdFJlZnJlc2gmJnQuX2luaXR0ZWQmJnQuaW52YWxpZGF0ZSgpKSksdSE9PW98fEx8fGl8fHQuX3pUaW1lPT09VXx8IWUmJnQuX3pUaW1lKXtpZighdC5faW5pdHRlZCYmTmEodCxlLGkscixsKSlyZXR1cm47Zm9yKHM9dC5felRpbWUsdC5felRpbWU9ZXx8KHI\/VTowKSxyPXJ8fGUmJiFzLHQucmF0aW89dSx0Ll9mcm9tJiYodT0xLXUpLHQuX3RpbWU9MCx0Ll90VGltZT1sLG49dC5fcHQ7bjspbi5yKHUsbi5kKSxuPW4uX25leHQ7ZTwwJiZEYSh0LGUsMCwhMCksdC5fb25VcGRhdGUmJiFyJiZQdCh0LCJvblVwZGF0ZSIpLGwmJnQuX3JlcGVhdCYmIXImJnQucGFyZW50JiZQdCh0LCJvblJlcGVhdCIpLChlPj10Ll90RHVyfHxlPDApJiZ0LnJhdGlvPT09dSYmKHUmJkFhKHQsMSkscnx8THx8KFB0KHQsdT8ib25Db21wbGV0ZSI6Im9uUmV2ZXJzZUNvbXBsZXRlIiwhMCksdC5fcHJvbSYmdC5fcHJvbSgpKSl9ZWxzZSB0Ll96VGltZXx8KHQuX3pUaW1lPWUpfSh0aGlzLHQsZSxyKTtyZXR1cm4gdGhpc30sZS50YXJnZXRzPWZ1bmN0aW9uIHRhcmdldHMoKXtyZXR1cm4gdGhpcy5fdGFyZ2V0c30sZS5pbnZhbGlkYXRlPWZ1bmN0aW9uIGludmFsaWRhdGUodCl7cmV0dXJuIHQmJnRoaXMudmFycy5ydW5CYWNrd2FyZHN8fCh0aGlzLl9zdGFydEF0PTApLHRoaXMuX3B0PXRoaXMuX29wPXRoaXMuX29uVXBkYXRlPXRoaXMuX2xhenk9dGhpcy5yYXRpbz0wLHRoaXMuX3B0TG9va3VwPVtdLHRoaXMudGltZWxpbmUmJnRoaXMudGltZWxpbmUuaW52YWxpZGF0ZSh0KSxFLnByb3RvdHlwZS5pbnZhbGlkYXRlLmNhbGwodGhpcyx0KX0sZS5yZXNldFRvPWZ1bmN0aW9uIHJlc2V0VG8odCxlLHIsaSxuKXtjfHxSdC53YWtlKCksdGhpcy5fdHN8fHRoaXMucGxheSgpO3ZhciBhLHM9TWF0aC5taW4odGhpcy5fZHVyLCh0aGlzLl9kcC5fdGltZS10aGlzLl9zdGFydCkqdGhpcy5fdHMpO3JldHVybiB0aGlzLl9pbml0dGVkfHxXdCh0aGlzLHMpLGE9dGhpcy5fZWFzZShzL3RoaXMuX2R1ciksZnVuY3Rpb24gX3VwZGF0ZVByb3BUd2VlbnModCxlLHIsaSxuLGEscyxvKXt2YXIgdSxoLGwsZixkPSh0Ll9wdCYmdC5fcHRDYWNoZXx8KHQuX3B0Q2FjaGU9e30pKVtlXTtpZighZClmb3IoZD10Ll9wdENhY2hlW2VdPVtdLGw9dC5fcHRMb29rdXAsZj10Ll90YXJnZXRzLmxlbmd0aDtmLS07KXtpZigodT1sW2ZdW2VdKSYmdS5kJiZ1LmQuX3B0KWZvcih1PXUuZC5fcHQ7dSYmdS5wIT09ZSYmdS5mcCE9PWU7KXU9dS5fbmV4dDtpZighdSlyZXR1cm4gcXQ9MSx0LnZhcnNbZV09Iis9MCIsV3QodCxzKSxxdD0wLG8\/UihlKyIgbm90IGVsaWdpYmxlIGZvciByZXNldCIpOjE7ZC5wdXNoKHUpfWZvcihmPWQubGVuZ3RoO2YtLTspKHU9KGg9ZFtmXSkuX3B0fHxoKS5zPSFpJiYwIT09aXx8bj91LnMrKGl8fDApK2EqdS5jOmksdS5jPXItdS5zLGguZSYmKGguZT1pYShyKStaYShoLmUpKSxoLmImJihoLmI9dS5zK1phKGguYikpfSh0aGlzLHQsZSxyLGksYSxzLG4pP3RoaXMucmVzZXRUbyh0LGUscixpLDEpOihKYSh0aGlzLDApLHRoaXMucGFyZW50fHx5YSh0aGlzLl9kcCx0aGlzLCJfZmlyc3QiLCJfbGFzdCIsdGhpcy5fZHAuX3NvcnQ\/Il9zdGFydCI6MCksdGhpcy5yZW5kZXIoMCkpfSxlLmtpbGw9ZnVuY3Rpb24ga2lsbCh0LGUpe2lmKHZvaWQgMD09PWUmJihlPSJhbGwiKSwhKHR8fGUmJiJhbGwiIT09ZSkpcmV0dXJuIHRoaXMuX2xhenk9dGhpcy5fcHQ9MCx0aGlzLnBhcmVudD91Yih0aGlzKTp0aGlzLnNjcm9sbFRyaWdnZXImJnRoaXMuc2Nyb2xsVHJpZ2dlci5raWxsKCEhTCksdGhpcztpZih0aGlzLnRpbWVsaW5lKXt2YXIgaT10aGlzLnRpbWVsaW5lLnRvdGFsRHVyYXRpb24oKTtyZXR1cm4gdGhpcy50aW1lbGluZS5raWxsVHdlZW5zT2YodCxlLFV0JiYhMCE9PVV0LnZhcnMub3ZlcndyaXRlKS5fZmlyc3R8fHViKHRoaXMpLHRoaXMucGFyZW50JiZpIT09dGhpcy50aW1lbGluZS50b3RhbER1cmF0aW9uKCkmJlNhKHRoaXMsdGhpcy5fZHVyKnRoaXMudGltZWxpbmUuX3REdXIvaSwwLDEpLHRoaXN9dmFyIG4sYSxzLG8sdSxoLGwsZj10aGlzLl90YXJnZXRzLGQ9dD9PdCh0KTpmLGM9dGhpcy5fcHRMb29rdXAscD10aGlzLl9wdDtpZigoIWV8fCJhbGwiPT09ZSkmJmZ1bmN0aW9uIF9hcnJheXNNYXRjaCh0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxpPXI9PT1lLmxlbmd0aDtpJiZyLS0mJnRbcl09PT1lW3JdOyk7cmV0dXJuIHI8MH0oZixkKSlyZXR1cm4iYWxsIj09PWUmJih0aGlzLl9wdD0wKSx1Yih0aGlzKTtmb3Iobj10aGlzLl9vcD10aGlzLl9vcHx8W10sImFsbCIhPT1lJiYocihlKSYmKHU9e30saGEoZSxmdW5jdGlvbih0KXtyZXR1cm4gdVt0XT0xfSksZT11KSxlPWZ1bmN0aW9uIF9hZGRBbGlhc2VzVG9WYXJzKHQsZSl7dmFyIHIsaSxuLGEscz10WzBdP2ZhKHRbMF0pLmhhcm5lc3M6MCxvPXMmJnMuYWxpYXNlcztpZighbylyZXR1cm4gZTtmb3IoaSBpbiByPXl0KHt9LGUpLG8paWYoaSBpbiByKWZvcihuPShhPW9baV0uc3BsaXQoIiwiKSkubGVuZ3RoO24tLTspclthW25dXT1yW2ldO3JldHVybiByfShmLGUpKSxsPWYubGVuZ3RoO2wtLTspaWYofmQuaW5kZXhPZihmW2xdKSlmb3IodSBpbiBhPWNbbF0sImFsbCI9PT1lPyhuW2xdPWUsbz1hLHM9e30pOihzPW5bbF09bltsXXx8e30sbz1lKSxvKShoPWEmJmFbdV0pJiYoImtpbGwiaW4gaC5kJiYhMCE9PWguZC5raWxsKHUpfHx6YSh0aGlzLGgsIl9wdCIpLGRlbGV0ZSBhW3VdKSwiYWxsIiE9PXMmJihzW3VdPTEpO3JldHVybiB0aGlzLl9pbml0dGVkJiYhdGhpcy5fcHQmJnAmJnViKHRoaXMpLHRoaXN9LFR3ZWVuLnRvPWZ1bmN0aW9uIHRvKHQsZSxyKXtyZXR1cm4gbmV3IFR3ZWVuKHQsZSxyKX0sVHdlZW4uZnJvbT1mdW5jdGlvbiBmcm9tKHQsZSl7cmV0dXJuIFdhKDEsYXJndW1lbnRzKX0sVHdlZW4uZGVsYXllZENhbGw9ZnVuY3Rpb24gZGVsYXllZENhbGwodCxlLHIsaSl7cmV0dXJuIG5ldyBUd2VlbihlLDAse2ltbWVkaWF0ZVJlbmRlcjohMSxsYXp5OiExLG92ZXJ3cml0ZTohMSxkZWxheTp0LG9uQ29tcGxldGU6ZSxvblJldmVyc2VDb21wbGV0ZTplLG9uQ29tcGxldGVQYXJhbXM6cixvblJldmVyc2VDb21wbGV0ZVBhcmFtczpyLGNhbGxiYWNrU2NvcGU6aX0pfSxUd2Vlbi5mcm9tVG89ZnVuY3Rpb24gZnJvbVRvKHQsZSxyKXtyZXR1cm4gV2EoMixhcmd1bWVudHMpfSxUd2Vlbi5zZXQ9ZnVuY3Rpb24gc2V0KHQsZSl7cmV0dXJuIGUuZHVyYXRpb249MCxlLnJlcGVhdERlbGF5fHwoZS5yZXBlYXQ9MCksbmV3IFR3ZWVuKHQsZSl9LFR3ZWVuLmtpbGxUd2VlbnNPZj1mdW5jdGlvbiBraWxsVHdlZW5zT2YodCxlLHIpe3JldHVybiBJLmtpbGxUd2VlbnNPZih0LGUscil9LFR3ZWVufShOdCk7cmEoSnQucHJvdG90eXBlLHtfdGFyZ2V0czpbXSxfbGF6eTowLF9zdGFydEF0OjAsX29wOjAsX29uSW5pdDowfSksaGEoInN0YWdnZXJUbyxzdGFnZ2VyRnJvbSxzdGFnZ2VyRnJvbVRvIixmdW5jdGlvbihyKXtKdFtyXT1mdW5jdGlvbigpe3ZhciB0PW5ldyBRdCxlPWt0LmNhbGwoYXJndW1lbnRzLDApO3JldHVybiBlLnNwbGljZSgic3RhZ2dlckZyb21UbyI9PT1yPzU6NCwwLDApLHRbcl0uYXBwbHkodCxlKX19KTtmdW5jdGlvbiBwYyh0LGUscil7cmV0dXJuIHQuc2V0QXR0cmlidXRlKGUscil9ZnVuY3Rpb24geGModCxlLHIsaSl7aS5tU2V0KHQsZSxpLm0uY2FsbChpLnR3ZWVuLHIsaS5tdCksaSl9dmFyICR0PWZ1bmN0aW9uIF9zZXR0ZXJQbGFpbih0LGUscil7cmV0dXJuIHRbZV09cn0sdGU9ZnVuY3Rpb24gX3NldHRlckZ1bmModCxlLHIpe3JldHVybiB0W2VdKHIpfSxyZT1mdW5jdGlvbiBfc2V0dGVyRnVuY1dpdGhQYXJhbSh0LGUscixpKXtyZXR1cm4gdFtlXShpLmZwLHIpfSxpZT1mdW5jdGlvbiBfZ2V0U2V0dGVyKHQsZSl7cmV0dXJuIHModFtlXSk\/dGU6dSh0W2VdKSYmdC5zZXRBdHRyaWJ1dGU\/cGM6JHR9LG5lPWZ1bmN0aW9uIF9yZW5kZXJQbGFpbih0LGUpe3JldHVybiBlLnNldChlLnQsZS5wLE1hdGgucm91bmQoMWU2KihlLnMrZS5jKnQpKS8xZTYsZSl9LHNlPWZ1bmN0aW9uIF9yZW5kZXJCb29sZWFuKHQsZSl7cmV0dXJuIGUuc2V0KGUudCxlLnAsISEoZS5zK2UuYyp0KSxlKX0sb2U9ZnVuY3Rpb24gX3JlbmRlckNvbXBsZXhTdHJpbmcodCxlKXt2YXIgcj1lLl9wdCxpPSIiO2lmKCF0JiZlLmIpaT1lLmI7ZWxzZSBpZigxPT09dCYmZS5lKWk9ZS5lO2Vsc2V7Zm9yKDtyOylpPXIucCsoci5tP3IubShyLnMrci5jKnQpOk1hdGgucm91bmQoMWU0KihyLnMrci5jKnQpKS8xZTQpK2kscj1yLl9uZXh0O2krPWUuY31lLnNldChlLnQsZS5wLGksZSl9LHVlPWZ1bmN0aW9uIF9yZW5kZXJQcm9wVHdlZW5zKHQsZSl7Zm9yKHZhciByPWUuX3B0O3I7KXIucih0LHIuZCkscj1yLl9uZXh0fSxoZT1mdW5jdGlvbiBfYWRkUGx1Z2luTW9kaWZpZXIodCxlLHIsaSl7Zm9yKHZhciBuLGE9dGhpcy5fcHQ7YTspbj1hLl9uZXh0LGEucD09PWkmJmEubW9kaWZpZXIodCxlLHIpLGE9bn0sZGU9ZnVuY3Rpb24gX2tpbGxQcm9wVHdlZW5zT2YodCl7Zm9yKHZhciBlLHIsaT10aGlzLl9wdDtpOylyPWkuX25leHQsaS5wPT09dCYmIWkub3B8fGkub3A9PT10P3phKHRoaXMsaSwiX3B0Iik6aS5kZXB8fChlPTEpLGk9cjtyZXR1cm4hZX0sX2U9ZnVuY3Rpb24gX3NvcnRQcm9wVHdlZW5zQnlQcmlvcml0eSh0KXtmb3IodmFyIGUscixpLG4sYT10Ll9wdDthOyl7Zm9yKGU9YS5fbmV4dCxyPWk7ciYmci5wcj5hLnByOylyPXIuX25leHQ7KGEuX3ByZXY9cj9yLl9wcmV2Om4pP2EuX3ByZXYuX25leHQ9YTppPWEsKGEuX25leHQ9cik\/ci5fcHJldj1hOm49YSxhPWV9dC5fcHQ9aX0sZ2U9KFByb3BUd2Vlbi5wcm90b3R5cGUubW9kaWZpZXI9ZnVuY3Rpb24gbW9kaWZpZXIodCxlLHIpe3RoaXMubVNldD10aGlzLm1TZXR8fHRoaXMuc2V0LHRoaXMuc2V0PXhjLHRoaXMubT10LHRoaXMubXQ9cix0aGlzLnR3ZWVuPWV9LFByb3BUd2Vlbik7ZnVuY3Rpb24gUHJvcFR3ZWVuKHQsZSxyLGksbixhLHMsbyx1KXt0aGlzLnQ9ZSx0aGlzLnM9aSx0aGlzLmM9bix0aGlzLnA9cix0aGlzLnI9YXx8bmUsdGhpcy5kPXN8fHRoaXMsdGhpcy5zZXQ9b3x8JHQsdGhpcy5wcj11fHwwLCh0aGlzLl9uZXh0PXQpJiYodC5fcHJldj10aGlzKX1oYSh2dCsicGFyZW50LGR1cmF0aW9uLGVhc2UsZGVsYXksb3ZlcndyaXRlLHJ1bkJhY2t3YXJkcyxzdGFydEF0LHlveW8saW1tZWRpYXRlUmVuZGVyLHJlcGVhdCxyZXBlYXREZWxheSxkYXRhLHBhdXNlZCxyZXZlcnNlZCxsYXp5LGNhbGxiYWNrU2NvcGUsc3RyaW5nRmlsdGVyLGlkLHlveW9FYXNlLHN0YWdnZXIsaW5oZXJpdCxyZXBlYXRSZWZyZXNoLGtleWZyYW1lcyxhdXRvUmV2ZXJ0LHNjcm9sbFRyaWdnZXIiLGZ1bmN0aW9uKHQpe3JldHVybiBmdFt0XT0xfSksb3QuVHdlZW5NYXg9b3QuVHdlZW5MaXRlPUp0LG90LlRpbWVsaW5lTGl0ZT1vdC5UaW1lbGluZU1heD1RdCxJPW5ldyBRdCh7c29ydENoaWxkcmVuOiExLGRlZmF1bHRzOlosYXV0b1JlbW92ZUNoaWxkcmVuOiEwLGlkOiJyb290IixzbW9vdGhDaGlsZFRpbWluZzohMH0pLFguc3RyaW5nRmlsdGVyPUdiO2Z1bmN0aW9uIEZjKHQpe3JldHVybihiZVt0XXx8TWUpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSl9ZnVuY3Rpb24gR2MoKXt2YXIgdD1EYXRlLm5vdygpLG89W107Mjx0LU9lJiYoRmMoIm1hdGNoTWVkaWFJbml0IiksVGUuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZSxyLGksbixhPXQucXVlcmllcyxzPXQuY29uZGl0aW9ucztmb3IociBpbiBhKShlPWgubWF0Y2hNZWRpYShhW3JdKS5tYXRjaGVzKSYmKGk9MSksZSE9PXNbcl0mJihzW3JdPWUsbj0xKTtuJiYodC5yZXZlcnQoKSxpJiZvLnB1c2godCkpfSksRmMoIm1hdGNoTWVkaWFSZXZlcnQiKSxvLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUub25NYXRjaChlLGZ1bmN0aW9uKHQpe3JldHVybiBlLmFkZChudWxsLHQpfSl9KSxPZT10LEZjKCJtYXRjaE1lZGlhIikpfXZhciB2ZSxUZT1bXSxiZT17fSxNZT1bXSxPZT0wLEFlPTAsUGU9KCh2ZT1Db250ZXh0LnByb3RvdHlwZSkuYWRkPWZ1bmN0aW9uIGFkZCh0LGksbil7ZnVuY3Rpb24gSXcoKXt2YXIgdCxlPWwscj1hLnNlbGVjdG9yO3JldHVybiBlJiZlIT09YSYmZS5kYXRhLnB1c2goYSksbiYmKGEuc2VsZWN0b3I9ZGIobikpLGw9YSx0PWkuYXBwbHkoYSxhcmd1bWVudHMpLHModCkmJmEuX3IucHVzaCh0KSxsPWUsYS5zZWxlY3Rvcj1yLGEuaXNSZXZlcnRlZD0hMSx0fXModCkmJihuPWksaT10LHQ9cyk7dmFyIGE9dGhpcztyZXR1cm4gYS5sYXN0PUl3LHQ9PT1zP0l3KGEsZnVuY3Rpb24odCl7cmV0dXJuIGEuYWRkKG51bGwsdCl9KTp0P2FbdF09SXc6SXd9LHZlLmlnbm9yZT1mdW5jdGlvbiBpZ25vcmUodCl7dmFyIGU9bDtsPW51bGwsdCh0aGlzKSxsPWV9LHZlLmdldFR3ZWVucz1mdW5jdGlvbiBnZXRUd2VlbnMoKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy5kYXRhLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBDb250ZXh0P2UucHVzaC5hcHBseShlLHQuZ2V0VHdlZW5zKCkpOnQgaW5zdGFuY2VvZiBKdCYmISh0LnBhcmVudCYmIm5lc3RlZCI9PT10LnBhcmVudC5kYXRhKSYmZS5wdXNoKHQpfSksZX0sdmUuY2xlYXI9ZnVuY3Rpb24gY2xlYXIoKXt0aGlzLl9yLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoPTB9LHZlLmtpbGw9ZnVuY3Rpb24ga2lsbChpLHQpe3ZhciBuPXRoaXM7aWYoaT9mdW5jdGlvbigpe2Zvcih2YXIgdCxlPW4uZ2V0VHdlZW5zKCkscj1uLmRhdGEubGVuZ3RoO3ItLTspImlzRmxpcCI9PT0odD1uLmRhdGFbcl0pLmRhdGEmJih0LnJldmVydCgpLHQuZ2V0Q2hpbGRyZW4oITAsITAsITEpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuc3BsaWNlKGUuaW5kZXhPZih0KSwxKX0pKTtmb3IoZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue2c6dC5fZHVyfHx0Ll9kZWxheXx8dC5fc2F0JiYhdC5fc2F0LnZhcnMuaW1tZWRpYXRlUmVuZGVyP3QuZ2xvYmFsVGltZSgwKTotMS8wLHQ6dH19KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZy10Lmd8fC0xLzB9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnQucmV2ZXJ0KGkpfSkscj1uLmRhdGEubGVuZ3RoO3ItLTspKHQ9bi5kYXRhW3JdKWluc3RhbmNlb2YgUXQ\/Im5lc3RlZCIhPT10LmRhdGEmJih0LnNjcm9sbFRyaWdnZXImJnQuc2Nyb2xsVHJpZ2dlci5yZXZlcnQoKSx0LmtpbGwoKSk6dCBpbnN0YW5jZW9mIEp0fHwhdC5yZXZlcnR8fHQucmV2ZXJ0KGkpO24uX3IuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdChpLG4pfSksbi5pc1JldmVydGVkPSEwfSgpOnRoaXMuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtpbGwmJnQua2lsbCgpfSksdGhpcy5jbGVhcigpLHQpZm9yKHZhciBlPVRlLmxlbmd0aDtlLS07KVRlW2VdLmlkPT09dGhpcy5pZCYmVGUuc3BsaWNlKGUsMSl9LHZlLnJldmVydD1mdW5jdGlvbiByZXZlcnQodCl7dGhpcy5raWxsKHR8fHt9KX0sQ29udGV4dCk7ZnVuY3Rpb24gQ29udGV4dCh0LGUpe3RoaXMuc2VsZWN0b3I9ZSYmZGIoZSksdGhpcy5kYXRhPVtdLHRoaXMuX3I9W10sdGhpcy5pc1JldmVydGVkPSExLHRoaXMuaWQ9QWUrKyx0JiZ0aGlzLmFkZCh0KX12YXIgQ2UsU2U9KChDZT1NYXRjaE1lZGlhLnByb3RvdHlwZSkuYWRkPWZ1bmN0aW9uIGFkZCh0LGUscil7dih0KXx8KHQ9e21hdGNoZXM6dH0pO3ZhciBpLG4sYSxzPW5ldyBQZSgwLHJ8fHRoaXMuc2NvcGUpLG89cy5jb25kaXRpb25zPXt9O2ZvcihuIGluIGwmJiFzLnNlbGVjdG9yJiYocy5zZWxlY3Rvcj1sLnNlbGVjdG9yKSx0aGlzLmNvbnRleHRzLnB1c2gocyksZT1zLmFkZCgib25NYXRjaCIsZSkscy5xdWVyaWVzPXQpImFsbCI9PT1uP2E9MTooaT1oLm1hdGNoTWVkaWEodFtuXSkpJiYoVGUuaW5kZXhPZihzKTwwJiZUZS5wdXNoKHMpLChvW25dPWkubWF0Y2hlcykmJihhPTEpLGkuYWRkTGlzdGVuZXI\/aS5hZGRMaXN0ZW5lcihHYyk6aS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLEdjKSk7cmV0dXJuIGEmJmUocyxmdW5jdGlvbih0KXtyZXR1cm4gcy5hZGQobnVsbCx0KX0pLHRoaXN9LENlLnJldmVydD1mdW5jdGlvbiByZXZlcnQodCl7dGhpcy5raWxsKHR8fHt9KX0sQ2Uua2lsbD1mdW5jdGlvbiBraWxsKGUpe3RoaXMuY29udGV4dHMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5raWxsKGUsITApfSl9LE1hdGNoTWVkaWEpO2Z1bmN0aW9uIE1hdGNoTWVkaWEodCl7dGhpcy5jb250ZXh0cz1bXSx0aGlzLnNjb3BlPXQsbCYmbC5kYXRhLnB1c2godGhpcyl9dmFyIERlPXtyZWdpc3RlclBsdWdpbjpmdW5jdGlvbiByZWdpc3RlclBsdWdpbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09YXJndW1lbnRzW3JdO2UuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4geGIodCl9KX0sdGltZWxpbmU6ZnVuY3Rpb24gdGltZWxpbmUodCl7cmV0dXJuIG5ldyBRdCh0KX0sZ2V0VHdlZW5zT2Y6ZnVuY3Rpb24gZ2V0VHdlZW5zT2YodCxlKXtyZXR1cm4gSS5nZXRUd2VlbnNPZih0LGUpfSxnZXRQcm9wZXJ0eTpmdW5jdGlvbiBnZXRQcm9wZXJ0eShpLHQsZSxuKXtyKGkpJiYoaT1PdChpKVswXSk7dmFyIGE9ZmEoaXx8e30pLmdldCxzPWU\/cWE6cGE7cmV0dXJuIm5hdGl2ZSI9PT1lJiYoZT0iIiksaT90P3MoKHB0W3RdJiZwdFt0XS5nZXR8fGEpKGksdCxlLG4pKTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHMoKHB0W3RdJiZwdFt0XS5nZXR8fGEpKGksdCxlLHIpKX06aX0scXVpY2tTZXR0ZXI6ZnVuY3Rpb24gcXVpY2tTZXR0ZXIocixlLGkpe2lmKDE8KHI9T3QocikpLmxlbmd0aCl7dmFyIG49ci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHplLnF1aWNrU2V0dGVyKHQsZSxpKX0pLGE9bi5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1hO2UtLTspbltlXSh0KX19cj1yWzBdfHx7fTt2YXIgcz1wdFtlXSxvPWZhKHIpLHU9by5oYXJuZXNzJiYoby5oYXJuZXNzLmFsaWFzZXN8fHt9KVtlXXx8ZSxoPXM\/ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHM7ZC5fcHQ9MCxlLmluaXQocixpP3QraTp0LGQsMCxbcl0pLGUucmVuZGVyKDEsZSksZC5fcHQmJnVlKDEsZCl9Om8uc2V0KHIsdSk7cmV0dXJuIHM\/aDpmdW5jdGlvbih0KXtyZXR1cm4gaChyLHUsaT90K2k6dCxvLDEpfX0scXVpY2tUbzpmdW5jdGlvbiBxdWlja1RvKHQsaSxlKXtmdW5jdGlvbiBheSh0LGUscil7cmV0dXJuIG4ucmVzZXRUbyhpLHQsZSxyKX12YXIgcixuPXplLnRvKHQscmEoKChyPXt9KVtpXT0iKz0wLjEiLHIucGF1c2VkPSEwLHIuc3RhZ2dlcj0wLHIpLGV8fHt9KSk7cmV0dXJuIGF5LnR3ZWVuPW4sYXl9LGlzVHdlZW5pbmc6ZnVuY3Rpb24gaXNUd2VlbmluZyh0KXtyZXR1cm4gMDxJLmdldFR3ZWVuc09mKHQsITApLmxlbmd0aH0sZGVmYXVsdHM6ZnVuY3Rpb24gZGVmYXVsdHModCl7cmV0dXJuIHQmJnQuZWFzZSYmKHQuZWFzZT1ZdCh0LmVhc2UsWi5lYXNlKSksdWEoWix0fHx7fSl9LGNvbmZpZzpmdW5jdGlvbiBjb25maWcodCl7cmV0dXJuIHVhKFgsdHx8e30pfSxyZWdpc3RlckVmZmVjdDpmdW5jdGlvbiByZWdpc3RlckVmZmVjdCh0KXt2YXIgaT10Lm5hbWUsbj10LmVmZmVjdCxlPXQucGx1Z2lucyxhPXQuZGVmYXVsdHMscj10LmV4dGVuZFRpbWVsaW5lOyhlfHwiIikuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYhcHRbdF0mJiFvdFt0XSYmUihpKyIgZWZmZWN0IHJlcXVpcmVzICIrdCsiIHBsdWdpbi4iKX0pLF90W2ldPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbihPdCh0KSxyYShlfHx7fSxhKSxyKX0sciYmKFF0LnByb3RvdHlwZVtpXT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuYWRkKF90W2ldKHQsdihlKT9lOihyPWUpJiZ7fSx0aGlzKSxyKX0pfSxyZWdpc3RlckVhc2U6ZnVuY3Rpb24gcmVnaXN0ZXJFYXNlKHQsZSl7THRbdF09WXQoZSl9LHBhcnNlRWFzZTpmdW5jdGlvbiBwYXJzZUVhc2UodCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9ZdCh0LGUpOkx0fSxnZXRCeUlkOmZ1bmN0aW9uIGdldEJ5SWQodCl7cmV0dXJuIEkuZ2V0QnlJZCh0KX0sZXhwb3J0Um9vdDpmdW5jdGlvbiBleHBvcnRSb290KHQsZSl7dm9pZCAwPT09dCYmKHQ9e30pO3ZhciByLGksbj1uZXcgUXQodCk7Zm9yKG4uc21vb3RoQ2hpbGRUaW1pbmc9dyh0LnNtb290aENoaWxkVGltaW5nKSxJLnJlbW92ZShuKSxuLl9kcD0wLG4uX3RpbWU9bi5fdFRpbWU9SS5fdGltZSxyPUkuX2ZpcnN0O3I7KWk9ci5fbmV4dCwhZSYmIXIuX2R1ciYmciBpbnN0YW5jZW9mIEp0JiZyLnZhcnMub25Db21wbGV0ZT09PXIuX3RhcmdldHNbMF18fExhKG4scixyLl9zdGFydC1yLl9kZWxheSkscj1pO3JldHVybiBMYShJLG4sMCksbn0sY29udGV4dDpmdW5jdGlvbiBjb250ZXh0KHQsZSl7cmV0dXJuIHQ\/bmV3IFBlKHQsZSk6bH0sbWF0Y2hNZWRpYTpmdW5jdGlvbiBtYXRjaE1lZGlhKHQpe3JldHVybiBuZXcgU2UodCl9LG1hdGNoTWVkaWFSZWZyZXNoOmZ1bmN0aW9uIG1hdGNoTWVkaWFSZWZyZXNoKCl7cmV0dXJuIFRlLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGUscixpPXQuY29uZGl0aW9ucztmb3IociBpbiBpKWlbcl0mJihpW3JdPSExLGU9MSk7ZSYmdC5yZXZlcnQoKX0pfHxHYygpfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIodCxlKXt2YXIgcj1iZVt0XXx8KGJlW3RdPVtdKTt+ci5pbmRleE9mKGUpfHxyLnB1c2goZSl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUpe3ZhciByPWJlW3RdLGk9ciYmci5pbmRleE9mKGUpOzA8PWkmJnIuc3BsaWNlKGksMSl9LHV0aWxzOnt3cmFwOmZ1bmN0aW9uIHdyYXAoZSx0LHIpe3ZhciBpPXQtZTtyZXR1cm4gJChlKT9tYihlLHdyYXAoMCxlLmxlbmd0aCksdCk6WGEocixmdW5jdGlvbih0KXtyZXR1cm4oaSsodC1lKSVpKSVpK2V9KX0sd3JhcFlveW86ZnVuY3Rpb24gd3JhcFlveW8oZSx0LHIpe3ZhciBpPXQtZSxuPTIqaTtyZXR1cm4gJChlKT9tYihlLHdyYXBZb3lvKDAsZS5sZW5ndGgtMSksdCk6WGEocixmdW5jdGlvbih0KXtyZXR1cm4gZSsoaTwodD0obisodC1lKSVuKSVufHwwKT9uLXQ6dCl9KX0sZGlzdHJpYnV0ZTpmYixyYW5kb206aWIsc25hcDpoYixub3JtYWxpemU6ZnVuY3Rpb24gbm9ybWFsaXplKHQsZSxyKXtyZXR1cm4gQXQodCxlLDAsMSxyKX0sZ2V0VW5pdDpaYSxjbGFtcDpmdW5jdGlvbiBjbGFtcChlLHIsdCl7cmV0dXJuIFhhKHQsZnVuY3Rpb24odCl7cmV0dXJuIE10KGUscix0KX0pfSxzcGxpdENvbG9yOkJiLHRvQXJyYXk6T3Qsc2VsZWN0b3I6ZGIsbWFwUmFuZ2U6QXQscGlwZTpmdW5jdGlvbiBwaXBlKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT1hcmd1bWVudHNbcl07cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBlKHQpfSx0KX19LHVuaXRpemU6ZnVuY3Rpb24gdW5pdGl6ZShlLHIpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZShwYXJzZUZsb2F0KHQpKSsocnx8WmEodCkpfX0saW50ZXJwb2xhdGU6ZnVuY3Rpb24gaW50ZXJwb2xhdGUoZSxpLHQsbil7dmFyIGE9aXNOYU4oZStpKT8wOmZ1bmN0aW9uKHQpe3JldHVybigxLXQpKmUrdCppfTtpZighYSl7dmFyIHMsbyx1LGgsbCxmPXIoZSksZD17fTtpZighMD09PXQmJihuPTEpJiYodD1udWxsKSxmKWU9e3A6ZX0saT17cDppfTtlbHNlIGlmKCQoZSkmJiEkKGkpKXtmb3IodT1bXSxoPWUubGVuZ3RoLGw9aC0yLG89MTtvPGg7bysrKXUucHVzaChpbnRlcnBvbGF0ZShlW28tMV0sZVtvXSkpO2gtLSxhPWZ1bmN0aW9uIGZ1bmModCl7dCo9aDt2YXIgZT1NYXRoLm1pbihsLH5+dCk7cmV0dXJuIHVbZV0odC1lKX0sdD1pfWVsc2Ugbnx8KGU9eXQoJChlKT9bXTp7fSxlKSk7aWYoIXUpe2ZvcihzIGluIGkpVnQuY2FsbChkLGUscywiZ2V0IixpW3NdKTthPWZ1bmN0aW9uIGZ1bmModCl7cmV0dXJuIHVlKHQsZCl8fChmP2UucDplKX19fXJldHVybiBYYSh0LGEpfSxzaHVmZmxlOmVifSxpbnN0YWxsOlAsZWZmZWN0czpfdCx0aWNrZXI6UnQsdXBkYXRlUm9vdDpRdC51cGRhdGVSb290LHBsdWdpbnM6cHQsZ2xvYmFsVGltZWxpbmU6SSxjb3JlOntQcm9wVHdlZW46Z2UsZ2xvYmFsczpTLFR3ZWVuOkp0LFRpbWVsaW5lOlF0LEFuaW1hdGlvbjpOdCxnZXRDYWNoZTpmYSxfcmVtb3ZlTGlua2VkTGlzdEl0ZW06emEscmV2ZXJ0aW5nOmZ1bmN0aW9uIHJldmVydGluZygpe3JldHVybiBMfSxjb250ZXh0OmZ1bmN0aW9uIGNvbnRleHQodCl7cmV0dXJuIHQmJmwmJihsLmRhdGEucHVzaCh0KSx0Ll9jdHg9bCksbH0sc3VwcHJlc3NPdmVyd3JpdGVzOmZ1bmN0aW9uIHN1cHByZXNzT3ZlcndyaXRlcyh0KXtyZXR1cm4gRj10fX19O2hhKCJ0byxmcm9tLGZyb21UbyxkZWxheWVkQ2FsbCxzZXQsa2lsbFR3ZWVuc09mIixmdW5jdGlvbih0KXtyZXR1cm4gRGVbdF09SnRbdF19KSxSdC5hZGQoUXQudXBkYXRlUm9vdCksZD1EZS50byh7fSx7ZHVyYXRpb246MH0pO2Z1bmN0aW9uIEtjKHQsZSl7Zm9yKHZhciByPXQuX3B0O3ImJnIucCE9PWUmJnIub3AhPT1lJiZyLmZwIT09ZTspcj1yLl9uZXh0O3JldHVybiByfWZ1bmN0aW9uIE1jKHQsYSl7cmV0dXJue25hbWU6dCxoZWFkbGVzczoxLHJhd1ZhcnM6MSxpbml0OmZ1bmN0aW9uIGluaXQodCxuLGUpe2UuX29uSW5pdD1mdW5jdGlvbih0KXt2YXIgZSxpO2lmKHIobikmJihlPXt9LGhhKG4sZnVuY3Rpb24odCl7cmV0dXJuIGVbdF09MX0pLG49ZSksYSl7Zm9yKGkgaW4gZT17fSxuKWVbaV09YShuW2ldKTtuPWV9IWZ1bmN0aW9uIF9hZGRNb2RpZmllcnModCxlKXt2YXIgcixpLG4sYT10Ll90YXJnZXRzO2ZvcihyIGluIGUpZm9yKGk9YS5sZW5ndGg7aS0tOykobj0obj10Ll9wdExvb2t1cFtpXVtyXSkmJm4uZCkmJihuLl9wdCYmKG49S2MobixyKSksbiYmbi5tb2RpZmllciYmbi5tb2RpZmllcihlW3JdLHQsYVtpXSxyKSl9KHQsbil9fX19dmFyIHplPURlLnJlZ2lzdGVyUGx1Z2luKHtuYW1lOiJhdHRyIixpbml0OmZ1bmN0aW9uIGluaXQodCxlLHIsaSxuKXt2YXIgYSxzLG87Zm9yKGEgaW4gdGhpcy50d2Vlbj1yLGUpbz10LmdldEF0dHJpYnV0ZShhKXx8IiIsKHM9dGhpcy5hZGQodCwic2V0QXR0cmlidXRlIiwob3x8MCkrIiIsZVthXSxpLG4sMCwwLGEpKS5vcD1hLHMuYj1vLHRoaXMuX3Byb3BzLnB1c2goYSl9LHJlbmRlcjpmdW5jdGlvbiByZW5kZXIodCxlKXtmb3IodmFyIHI9ZS5fcHQ7cjspTD9yLnNldChyLnQsci5wLHIuYixyKTpyLnIodCxyLmQpLHI9ci5fbmV4dH19LHtuYW1lOiJlbmRBcnJheSIsaGVhZGxlc3M6MSxpbml0OmZ1bmN0aW9uIGluaXQodCxlKXtmb3IodmFyIHI9ZS5sZW5ndGg7ci0tOyl0aGlzLmFkZCh0LHIsdFtyXXx8MCxlW3JdLDAsMCwwLDAsMCwxKX19LE1jKCJyb3VuZFByb3BzIixnYiksTWMoIm1vZGlmaWVycyIpLE1jKCJzbmFwIixoYikpfHxEZTtKdC52ZXJzaW9uPVF0LnZlcnNpb249emUudmVyc2lvbj0iMy4xMy4wIixvPTEseCgpJiZGdCgpO2Z1bmN0aW9uIHdkKHQsZSl7cmV0dXJuIGUuc2V0KGUudCxlLnAsTWF0aC5yb3VuZCgxZTQqKGUucytlLmMqdCkpLzFlNCtlLnUsZSl9ZnVuY3Rpb24geGQodCxlKXtyZXR1cm4gZS5zZXQoZS50LGUucCwxPT09dD9lLmU6TWF0aC5yb3VuZCgxZTQqKGUucytlLmMqdCkpLzFlNCtlLnUsZSl9ZnVuY3Rpb24geWQodCxlKXtyZXR1cm4gZS5zZXQoZS50LGUucCx0P01hdGgucm91bmQoMWU0KihlLnMrZS5jKnQpKS8xZTQrZS51OmUuYixlKX1mdW5jdGlvbiB6ZCh0LGUpe3ZhciByPWUucytlLmMqdDtlLnNldChlLnQsZS5wLH5+KHIrKHI8MD8tLjU6LjUpKStlLnUsZSl9ZnVuY3Rpb24gQWQodCxlKXtyZXR1cm4gZS5zZXQoZS50LGUucCx0P2UuZTplLmIsZSl9ZnVuY3Rpb24gQmQodCxlKXtyZXR1cm4gZS5zZXQoZS50LGUucCwxIT09dD9lLmI6ZS5lLGUpfWZ1bmN0aW9uIENkKHQsZSxyKXtyZXR1cm4gdC5zdHlsZVtlXT1yfWZ1bmN0aW9uIERkKHQsZSxyKXtyZXR1cm4gdC5zdHlsZS5zZXRQcm9wZXJ0eShlLHIpfWZ1bmN0aW9uIEVkKHQsZSxyKXtyZXR1cm4gdC5fZ3NhcFtlXT1yfWZ1bmN0aW9uIEZkKHQsZSxyKXtyZXR1cm4gdC5fZ3NhcC5zY2FsZVg9dC5fZ3NhcC5zY2FsZVk9cn1mdW5jdGlvbiBHZCh0LGUscixpLG4pe3ZhciBhPXQuX2dzYXA7YS5zY2FsZVg9YS5zY2FsZVk9cixhLnJlbmRlclRyYW5zZm9ybShuLGEpfWZ1bmN0aW9uIEhkKHQsZSxyLGksbil7dmFyIGE9dC5fZ3NhcDthW2VdPXIsYS5yZW5kZXJUcmFuc2Zvcm0obixhKX1mdW5jdGlvbiBLZCh0LGUpe3ZhciByPXRoaXMsaT10aGlzLnRhcmdldCxuPWkuc3R5bGUsYT1pLl9nc2FwO2lmKHQgaW4gc3ImJm4pe2lmKHRoaXMudGZtPXRoaXMudGZtfHx7fSwidHJhbnNmb3JtIj09PXQpcmV0dXJuIGNyLnRyYW5zZm9ybS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEtkLmNhbGwocix0LGUpfSk7aWYofih0PWNyW3RdfHx0KS5pbmRleE9mKCIsIik\/dC5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHIudGZtW3RdPVRyKGksdCl9KTp0aGlzLnRmbVt0XT1hLng\/YVt0XTpUcihpLHQpLHQ9PT1fciYmKHRoaXMudGZtLnpPcmlnaW49YS56T3JpZ2luKSwwPD10aGlzLnByb3BzLmluZGV4T2YocHIpKXJldHVybjthLnN2ZyYmKHRoaXMuc3Znbz1pLmdldEF0dHJpYnV0ZSgiZGF0YS1zdmctb3JpZ2luIiksdGhpcy5wcm9wcy5wdXNoKF9yLGUsIiIpKSx0PXByfShufHxlKSYmdGhpcy5wcm9wcy5wdXNoKHQsZSxuW3RdKX1mdW5jdGlvbiBMZCh0KXt0LnRyYW5zbGF0ZSYmKHQucmVtb3ZlUHJvcGVydHkoInRyYW5zbGF0ZSIpLHQucmVtb3ZlUHJvcGVydHkoInNjYWxlIiksdC5yZW1vdmVQcm9wZXJ0eSgicm90YXRlIikpfWZ1bmN0aW9uIE1kKCl7dmFyIHQsZSxyPXRoaXMucHJvcHMsaT10aGlzLnRhcmdldCxuPWkuc3R5bGUsYT1pLl9nc2FwO2Zvcih0PTA7dDxyLmxlbmd0aDt0Kz0zKXJbdCsxXT8yPT09clt0KzFdP2lbclt0XV0oclt0KzJdKTppW3JbdF1dPXJbdCsyXTpyW3QrMl0\/bltyW3RdXT1yW3QrMl06bi5yZW1vdmVQcm9wZXJ0eSgiLS0iPT09clt0XS5zdWJzdHIoMCwyKT9yW3RdOnJbdF0ucmVwbGFjZShsciwiLSQxIikudG9Mb3dlckNhc2UoKSk7aWYodGhpcy50Zm0pe2ZvcihlIGluIHRoaXMudGZtKWFbZV09dGhpcy50Zm1bZV07YS5zdmcmJihhLnJlbmRlclRyYW5zZm9ybSgpLGkuc2V0QXR0cmlidXRlKCJkYXRhLXN2Zy1vcmlnaW4iLHRoaXMuc3Znb3x8IiIpKSwodD1ZZSgpKSYmdC5pc1N0YXJ0fHxuW3ByXXx8KExkKG4pLGEuek9yaWdpbiYmbltfcl0mJihuW19yXSs9IiAiK2Euek9yaWdpbisicHgiLGEuek9yaWdpbj0wLGEucmVuZGVyVHJhbnNmb3JtKCkpLGEudW5jYWNoZT0xKX19ZnVuY3Rpb24gTmQodCxlKXt2YXIgcj17dGFyZ2V0OnQscHJvcHM6W10scmV2ZXJ0Ok1kLHNhdmU6S2R9O3JldHVybiB0Ll9nc2FwfHx6ZS5jb3JlLmdldENhY2hlKHQpLGUmJnQuc3R5bGUmJnQubm9kZVR5cGUmJmUuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiByLnNhdmUodCl9KSxyfWZ1bmN0aW9uIFBkKHQsZSl7dmFyIHI9UmUuY3JlYXRlRWxlbWVudE5TP1JlLmNyZWF0ZUVsZW1lbnROUygoZXx8Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKS5yZXBsYWNlKC9eaHR0cHMvLCJodHRwIiksdCk6UmUuY3JlYXRlRWxlbWVudCh0KTtyZXR1cm4gciYmci5zdHlsZT9yOlJlLmNyZWF0ZUVsZW1lbnQodCl9ZnVuY3Rpb24gUWQodCxlLHIpe3ZhciBpPWdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJuIGlbZV18fGkuZ2V0UHJvcGVydHlWYWx1ZShlLnJlcGxhY2UobHIsIi0kMSIpLnRvTG93ZXJDYXNlKCkpfHxpLmdldFByb3BlcnR5VmFsdWUoZSl8fCFyJiZRZCh0LGdyKGUpfHxlLDEpfHwiIn1mdW5jdGlvbiBUZCgpeyhmdW5jdGlvbiBfd2luZG93RXhpc3RzKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3d9KSgpJiZ3aW5kb3cuZG9jdW1lbnQmJihFZT13aW5kb3csUmU9RWUuZG9jdW1lbnQsRmU9UmUuZG9jdW1lbnRFbGVtZW50LEllPVBkKCJkaXYiKXx8e3N0eWxlOnt9fSxQZCgiZGl2IikscHI9Z3IocHIpLF9yPXByKyJPcmlnaW4iLEllLnN0eWxlLmNzc1RleHQ9ImJvcmRlci13aWR0aDowO2xpbmUtaGVpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7cGFkZGluZzowIixYZT0hIWdyKCJwZXJzcGVjdGl2ZSIpLFllPXplLmNvcmUucmV2ZXJ0aW5nLExlPTEpfWZ1bmN0aW9uIFVkKHQpe3ZhciBlLHI9dC5vd25lclNWR0VsZW1lbnQsaT1QZCgic3ZnIixyJiZyLmdldEF0dHJpYnV0ZSgieG1sbnMiKXx8Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiksbj10LmNsb25lTm9kZSghMCk7bi5zdHlsZS5kaXNwbGF5PSJibG9jayIsaS5hcHBlbmRDaGlsZChuKSxGZS5hcHBlbmRDaGlsZChpKTt0cnl7ZT1uLmdldEJCb3goKX1jYXRjaCh0KXt9cmV0dXJuIGkucmVtb3ZlQ2hpbGQobiksRmUucmVtb3ZlQ2hpbGQoaSksZX1mdW5jdGlvbiBWZCh0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aDtyLS07KWlmKHQuaGFzQXR0cmlidXRlKGVbcl0pKXJldHVybiB0LmdldEF0dHJpYnV0ZShlW3JdKX1mdW5jdGlvbiBXZChlKXt2YXIgcixpO3RyeXtyPWUuZ2V0QkJveCgpfWNhdGNoKHQpe3I9VWQoZSksaT0xfXJldHVybiByJiYoci53aWR0aHx8ci5oZWlnaHQpfHxpfHwocj1VZChlKSksIXJ8fHIud2lkdGh8fHIueHx8ci55P3I6e3g6K1ZkKGUsWyJ4IiwiY3giLCJ4MSJdKXx8MCx5OitWZChlLFsieSIsImN5IiwieTEiXSl8fDAsd2lkdGg6MCxoZWlnaHQ6MH19ZnVuY3Rpb24gWGQodCl7cmV0dXJuISghdC5nZXRDVE18fHQucGFyZW50Tm9kZSYmIXQub3duZXJTVkdFbGVtZW50fHwhV2QodCkpfWZ1bmN0aW9uIFlkKHQsZSl7aWYoZSl7dmFyIHIsaT10LnN0eWxlO2UgaW4gc3ImJmUhPT1fciYmKGU9cHIpLGkucmVtb3ZlUHJvcGVydHk\/KCJtcyIhPT0ocj1lLnN1YnN0cigwLDIpKSYmIndlYmtpdCIhPT1lLnN1YnN0cigwLDYpfHwoZT0iLSIrZSksaS5yZW1vdmVQcm9wZXJ0eSgiLS0iPT09cj9lOmUucmVwbGFjZShsciwiLSQxIikudG9Mb3dlckNhc2UoKSkpOmkucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBaZCh0LGUscixpLG4sYSl7dmFyIHM9bmV3IGdlKHQuX3B0LGUsciwwLDEsYT9CZDpBZCk7cmV0dXJuKHQuX3B0PXMpLmI9aSxzLmU9bix0Ll9wcm9wcy5wdXNoKHIpLHN9ZnVuY3Rpb24gYWUodCxlLHIsaSl7dmFyIG4sYSxzLG8sdT1wYXJzZUZsb2F0KHIpfHwwLGg9KHIrIiIpLnRyaW0oKS5zdWJzdHIoKHUrIiIpLmxlbmd0aCl8fCJweCIsbD1JZS5zdHlsZSxmPWZyLnRlc3QoZSksZD0ic3ZnIj09PXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLGM9KGQ\/ImNsaWVudCI6Im9mZnNldCIpKyhmPyJXaWR0aCI6IkhlaWdodCIpLHA9InB4Ij09PWksXz0iJSI9PT1pO2lmKGk9PT1ofHwhdXx8dnJbaV18fHZyW2hdKXJldHVybiB1O2lmKCJweCI9PT1ofHxwfHwodT1hZSh0LGUsciwicHgiKSksbz10LmdldENUTSYmWGQodCksKF98fCIlIj09PWgpJiYoc3JbZV18fH5lLmluZGV4T2YoImFkaXVzIikpKXJldHVybiBuPW8\/dC5nZXRCQm94KClbZj8id2lkdGgiOiJoZWlnaHQiXTp0W2NdLGlhKF8\/dS9uKjEwMDp1LzEwMCpuKTtpZihsW2Y\/IndpZHRoIjoiaGVpZ2h0Il09MTAwKyhwP2g6aSksYT0icmVtIiE9PWkmJn5lLmluZGV4T2YoImFkaXVzIil8fCJlbSI9PT1pJiZ0LmFwcGVuZENoaWxkJiYhZD90OnQucGFyZW50Tm9kZSxvJiYoYT0odC5vd25lclNWR0VsZW1lbnR8fHt9KS5wYXJlbnROb2RlKSxhJiZhIT09UmUmJmEuYXBwZW5kQ2hpbGR8fChhPVJlLmJvZHkpLChzPWEuX2dzYXApJiZfJiZzLndpZHRoJiZmJiZzLnRpbWU9PT1SdC50aW1lJiYhcy51bmNhY2hlKXJldHVybiBpYSh1L3Mud2lkdGgqMTAwKTtpZighX3x8ImhlaWdodCIhPT1lJiYid2lkdGgiIT09ZSkhXyYmIiUiIT09aHx8eXJbUWQoYSwiZGlzcGxheSIpXXx8KGwucG9zaXRpb249UWQodCwicG9zaXRpb24iKSksYT09PXQmJihsLnBvc2l0aW9uPSJzdGF0aWMiKSxhLmFwcGVuZENoaWxkKEllKSxuPUllW2NdLGEucmVtb3ZlQ2hpbGQoSWUpLGwucG9zaXRpb249ImFic29sdXRlIjtlbHNle3ZhciBtPXQuc3R5bGVbZV07dC5zdHlsZVtlXT0xMDAraSxuPXRbY10sbT90LnN0eWxlW2VdPW06WWQodCxlKX1yZXR1cm4gZiYmXyYmKChzPWZhKGEpKS50aW1lPVJ0LnRpbWUscy53aWR0aD1hW2NdKSxpYShwP24qdS8xMDA6biYmdT8xMDAvbip1OjApfWZ1bmN0aW9uIGNlKHQsZSxyLGkpe2lmKCFyfHwibm9uZSI9PT1yKXt2YXIgbj1ncihlLHQsMSksYT1uJiZRZCh0LG4sMSk7YSYmYSE9PXI\/KGU9bixyPWEpOiJib3JkZXJDb2xvciI9PT1lJiYocj1RZCh0LCJib3JkZXJUb3BDb2xvciIpKX12YXIgcyxvLHUsaCxsLGYsZCxjLHAsXyxtLGc9bmV3IGdlKHRoaXMuX3B0LHQuc3R5bGUsZSwwLDEsb2UpLHY9MCx5PTA7aWYoZy5iPXIsZy5lPWkscis9IiIsInZhcigtLSI9PT0oaSs9IiIpLnN1YnN0cmluZygwLDYpJiYoaT1RZCh0LGkuc3Vic3RyaW5nKDQsaS5pbmRleE9mKCIpIikpKSksImF1dG8iPT09aSYmKGY9dC5zdHlsZVtlXSx0LnN0eWxlW2VdPWksaT1RZCh0LGUpfHxpLGY\/dC5zdHlsZVtlXT1mOllkKHQsZSkpLEdiKHM9W3IsaV0pLGk9c1sxXSx1PShyPXNbMF0pLm1hdGNoKHJ0KXx8W10sKGkubWF0Y2gocnQpfHxbXSkubGVuZ3RoKXtmb3IoO289cnQuZXhlYyhpKTspZD1vWzBdLHA9aS5zdWJzdHJpbmcodixvLmluZGV4KSxsP2w9KGwrMSklNToicmdiYSgiIT09cC5zdWJzdHIoLTUpJiYiaHNsYSgiIT09cC5zdWJzdHIoLTUpfHwobD0xKSxkIT09KGY9dVt5KytdfHwiIikmJihoPXBhcnNlRmxvYXQoZil8fDAsbT1mLnN1YnN0cigoaCsiIikubGVuZ3RoKSwiPSI9PT1kLmNoYXJBdCgxKSYmKGQ9a2EoaCxkKSttKSxjPXBhcnNlRmxvYXQoZCksXz1kLnN1YnN0cigoYysiIikubGVuZ3RoKSx2PXJ0Lmxhc3RJbmRleC1fLmxlbmd0aCxffHwoXz1ffHxYLnVuaXRzW2VdfHxtLHY9PT1pLmxlbmd0aCYmKGkrPV8sZy5lKz1fKSksbSE9PV8mJihoPWFlKHQsZSxmLF8pfHwwKSxnLl9wdD17X25leHQ6Zy5fcHQscDpwfHwxPT09eT9wOiIsIixzOmgsYzpjLWgsbTpsJiZsPDR8fCJ6SW5kZXgiPT09ZT9NYXRoLnJvdW5kOjB9KTtnLmM9djxpLmxlbmd0aD9pLnN1YnN0cmluZyh2LGkubGVuZ3RoKToiIn1lbHNlIGcucj0iZGlzcGxheSI9PT1lJiYibm9uZSI9PT1pP0JkOkFkO3JldHVybiBudC50ZXN0KGkpJiYoZy5lPTApLHRoaXMuX3B0PWd9ZnVuY3Rpb24gZWUodCl7dmFyIGU9dC5zcGxpdCgiICIpLHI9ZVswXSxpPWVbMV18fCI1MCUiO3JldHVybiJ0b3AiIT09ciYmImJvdHRvbSIhPT1yJiYibGVmdCIhPT1pJiYicmlnaHQiIT09aXx8KHQ9cixyPWksaT10KSxlWzBdPWJyW3JdfHxyLGVbMV09YnJbaV18fGksZS5qb2luKCIgIil9ZnVuY3Rpb24gZmUodCxlKXtpZihlLnR3ZWVuJiZlLnR3ZWVuLl90aW1lPT09ZS50d2Vlbi5fZHVyKXt2YXIgcixpLG4sYT1lLnQscz1hLnN0eWxlLG89ZS51LHU9YS5fZ3NhcDtpZigiYWxsIj09PW98fCEwPT09bylzLmNzc1RleHQ9IiIsaT0xO2Vsc2UgZm9yKG49KG89by5zcGxpdCgiLCIpKS5sZW5ndGg7LTE8LS1uOylyPW9bbl0sc3Jbcl0mJihpPTEscj0idHJhbnNmb3JtT3JpZ2luIj09PXI\/X3I6cHIpLFlkKGEscik7aSYmKFlkKGEscHIpLHUmJih1LnN2ZyYmYS5yZW1vdmVBdHRyaWJ1dGUoInRyYW5zZm9ybSIpLHMuc2NhbGU9cy5yb3RhdGU9cy50cmFuc2xhdGU9Im5vbmUiLGtyKGEsMSksdS51bmNhY2hlPTEsTGQocykpKX19ZnVuY3Rpb24gamUodCl7cmV0dXJuIm1hdHJpeCgxLCAwLCAwLCAxLCAwLCAwKSI9PT10fHwibm9uZSI9PT10fHwhdH1mdW5jdGlvbiBrZSh0KXt2YXIgZT1RZCh0LHByKTtyZXR1cm4gamUoZSk\/eHI6ZS5zdWJzdHIoNykubWF0Y2goZXQpLm1hcChpYSl9ZnVuY3Rpb24gbGUodCxlKXt2YXIgcixpLG4sYSxzPXQuX2dzYXB8fGZhKHQpLG89dC5zdHlsZSx1PWtlKHQpO3JldHVybiBzLnN2ZyYmdC5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpPyIxLDAsMCwxLDAsMCI9PT0odT1bKG49dC50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpLm1hdHJpeCkuYSxuLmIsbi5jLG4uZCxuLmUsbi5mXSkuam9pbigiLCIpP3hyOnU6KHUhPT14cnx8dC5vZmZzZXRQYXJlbnR8fHQ9PT1GZXx8cy5zdmd8fChuPW8uZGlzcGxheSxvLmRpc3BsYXk9ImJsb2NrIiwocj10LnBhcmVudE5vZGUpJiYodC5vZmZzZXRQYXJlbnR8fHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpfHwoYT0xLGk9dC5uZXh0RWxlbWVudFNpYmxpbmcsRmUuYXBwZW5kQ2hpbGQodCkpLHU9a2UodCksbj9vLmRpc3BsYXk9bjpZZCh0LCJkaXNwbGF5IiksYSYmKGk\/ci5pbnNlcnRCZWZvcmUodCxpKTpyP3IuYXBwZW5kQ2hpbGQodCk6RmUucmVtb3ZlQ2hpbGQodCkpKSxlJiY2PHUubGVuZ3RoP1t1WzBdLHVbMV0sdVs0XSx1WzVdLHVbMTJdLHVbMTNdXTp1KX1mdW5jdGlvbiBtZSh0LGUscixpLG4sYSl7dmFyIHMsbyx1LGg9dC5fZ3NhcCxsPW58fGxlKHQsITApLGY9aC54T3JpZ2lufHwwLGQ9aC55T3JpZ2lufHwwLGM9aC54T2Zmc2V0fHwwLHA9aC55T2Zmc2V0fHwwLF89bFswXSxtPWxbMV0sZz1sWzJdLHY9bFszXSx5PWxbNF0sVD1sWzVdLGI9ZS5zcGxpdCgiICIpLHc9cGFyc2VGbG9hdChiWzBdKXx8MCx4PXBhcnNlRmxvYXQoYlsxXSl8fDA7cj9sIT09eHImJihvPV8qdi1tKmcpJiYodT13KigtbS9vKSt4KihfL28pLShfKlQtbSp5KS9vLHc9dyoodi9vKSt4KigtZy9vKSsoZypULXYqeSkvbyx4PXUpOih3PShzPVdkKHQpKS54Kyh+YlswXS5pbmRleE9mKCIlIik\/dy8xMDAqcy53aWR0aDp3KSx4PXMueSsofihiWzFdfHxiWzBdKS5pbmRleE9mKCIlIik\/eC8xMDAqcy5oZWlnaHQ6eCkpLGl8fCExIT09aSYmaC5zbW9vdGg\/KHk9dy1mLFQ9eC1kLGgueE9mZnNldD1jKyh5Kl8rVCpnKS15LGgueU9mZnNldD1wKyh5Km0rVCp2KS1UKTpoLnhPZmZzZXQ9aC55T2Zmc2V0PTAsaC54T3JpZ2luPXcsaC55T3JpZ2luPXgsaC5zbW9vdGg9ISFpLGgub3JpZ2luPWUsaC5vcmlnaW5Jc0Fic29sdXRlPSEhcix0LnN0eWxlW19yXT0iMHB4IDBweCIsYSYmKFpkKGEsaCwieE9yaWdpbiIsZix3KSxaZChhLGgsInlPcmlnaW4iLGQseCksWmQoYSxoLCJ4T2Zmc2V0IixjLGgueE9mZnNldCksWmQoYSxoLCJ5T2Zmc2V0IixwLGgueU9mZnNldCkpLHQuc2V0QXR0cmlidXRlKCJkYXRhLXN2Zy1vcmlnaW4iLHcrIiAiK3gpfWZ1bmN0aW9uIHBlKHQsZSxyKXt2YXIgaT1aYShlKTtyZXR1cm4gaWEocGFyc2VGbG9hdChlKStwYXJzZUZsb2F0KGFlKHQsIngiLHIrInB4IixpKSkpK2l9ZnVuY3Rpb24gd2UodCxlLGksbixhKXt2YXIgcyxvLHU9MzYwLGg9cihhKSxsPXBhcnNlRmxvYXQoYSkqKGgmJn5hLmluZGV4T2YoInJhZCIpP29yOjEpLW4sZj1uK2wrImRlZyI7cmV0dXJuIGgmJigic2hvcnQiPT09KHM9YS5zcGxpdCgiXyIpWzFdKSYmKGwlPXUpIT09bCUxODAmJihsKz1sPDA\/dTotdSksImN3Ij09PXMmJmw8MD9sPShsKzM2ZTkpJXUtfn4obC91KSp1OiJjY3ciPT09cyYmMDxsJiYobD0obC0zNmU5KSV1LX5+KGwvdSkqdSkpLHQuX3B0PW89bmV3IGdlKHQuX3B0LGUsaSxuLGwseGQpLG8uZT1mLG8udT0iZGVnIix0Ll9wcm9wcy5wdXNoKGkpLG99ZnVuY3Rpb24geGUodCxlKXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl07cmV0dXJuIHR9ZnVuY3Rpb24geWUodCxlLHIpe3ZhciBpLG4sYSxzLG8sdSxoLGw9eGUoe30sci5fZ3NhcCksZj1yLnN0eWxlO2ZvcihuIGluIGwuc3ZnPyhhPXIuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKSxyLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwiIiksZltwcl09ZSxpPWtyKHIsMSksWWQocixwciksci5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsYSkpOihhPWdldENvbXB1dGVkU3R5bGUocilbcHJdLGZbcHJdPWUsaT1rcihyLDEpLGZbcHJdPWEpLHNyKShhPWxbbl0pIT09KHM9aVtuXSkmJiJwZXJzcGVjdGl2ZSxmb3JjZTNELHRyYW5zZm9ybU9yaWdpbixzdmdPcmlnaW4iLmluZGV4T2Yobik8MCYmKG89WmEoYSkhPT0oaD1aYShzKSk\/YWUocixuLGEsaCk6cGFyc2VGbG9hdChhKSx1PXBhcnNlRmxvYXQocyksdC5fcHQ9bmV3IGdlKHQuX3B0LGksbixvLHUtbyx3ZCksdC5fcHQudT1ofHwwLHQuX3Byb3BzLnB1c2gobikpO3hlKGksbCl9dmFyIEVlLFJlLEZlLExlLEllLEJlLFllLFhlLFplPUx0LlBvd2VyMCxOZT1MdC5Qb3dlcjEsUWU9THQuUG93ZXIyLFVlPUx0LlBvd2VyMyxxZT1MdC5Qb3dlcjQsVmU9THQuTGluZWFyLFdlPUx0LlF1YWQsR2U9THQuQ3ViaWMsSGU9THQuUXVhcnQsS2U9THQuUXVpbnQsSmU9THQuU3Ryb25nLCRlPUx0LkVsYXN0aWMsdHI9THQuQmFjayxlcj1MdC5TdGVwcGVkRWFzZSxycj1MdC5Cb3VuY2UsaXI9THQuU2luZSxucj1MdC5FeHBvLGFyPUx0LkNpcmMsc3I9e30sb3I9MTgwL01hdGguUEksdXI9TWF0aC5QSS8xODAsaHI9TWF0aC5hdGFuMixscj0vKFtBLVpdKS9nLGZyPS8obGVmdHxyaWdodHx3aWR0aHxtYXJnaW58cGFkZGluZ3x4KS9pLGRyPS9bXHMsXChdXFMvLGNyPXthdXRvQWxwaGE6Im9wYWNpdHksdmlzaWJpbGl0eSIsc2NhbGU6InNjYWxlWCxzY2FsZVkiLGFscGhhOiJvcGFjaXR5In0scHI9InRyYW5zZm9ybSIsX3I9cHIrIk9yaWdpbiIsbXI9Ik8sTW96LG1zLE1zLFdlYmtpdCIuc3BsaXQoIiwiKSxncj1mdW5jdGlvbiBfY2hlY2tQcm9wUHJlZml4KHQsZSxyKXt2YXIgaT0oZXx8SWUpLnN0eWxlLG49NTtpZih0IGluIGkmJiFyKXJldHVybiB0O2Zvcih0PXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHIoMSk7bi0tJiYhKG1yW25dK3QgaW4gaSk7KTtyZXR1cm4gbjwwP251bGw6KDM9PT1uPyJtcyI6MDw9bj9tcltuXToiIikrdH0sdnI9e2RlZzoxLHJhZDoxLHR1cm46MX0seXI9e2dyaWQ6MSxmbGV4OjF9LFRyPWZ1bmN0aW9uIF9nZXQodCxlLHIsaSl7dmFyIG47cmV0dXJuIExlfHxUZCgpLGUgaW4gY3ImJiJ0cmFuc2Zvcm0iIT09ZSYmfihlPWNyW2VdKS5pbmRleE9mKCIsIikmJihlPWUuc3BsaXQoIiwiKVswXSksc3JbZV0mJiJ0cmFuc2Zvcm0iIT09ZT8obj1rcih0LGkpLG49InRyYW5zZm9ybU9yaWdpbiIhPT1lP25bZV06bi5zdmc\/bi5vcmlnaW46T3IoUWQodCxfcikpKyIgIituLnpPcmlnaW4rInB4Iik6KG49dC5zdHlsZVtlXSkmJiJhdXRvIiE9PW4mJiFpJiYhfihuKyIiKS5pbmRleE9mKCJjYWxjKCIpfHwobj13cltlXSYmd3JbZV0odCxlLHIpfHxRZCh0LGUpfHxnYSh0LGUpfHwoIm9wYWNpdHkiPT09ZT8xOjApKSxyJiYhfihuKyIiKS50cmltKCkuaW5kZXhPZigiICIpP2FlKHQsZSxuLHIpK3I6bn0sYnI9e3RvcDoiMCUiLGJvdHRvbToiMTAwJSIsbGVmdDoiMCUiLHJpZ2h0OiIxMDAlIixjZW50ZXI6IjUwJSJ9LHdyPXtjbGVhclByb3BzOmZ1bmN0aW9uIGNsZWFyUHJvcHModCxlLHIsaSxuKXtpZigiaXNGcm9tU3RhcnQiIT09bi5kYXRhKXt2YXIgYT10Ll9wdD1uZXcgZ2UodC5fcHQsZSxyLDAsMCxmZSk7cmV0dXJuIGEudT1pLGEucHI9LTEwLGEudHdlZW49bix0Ll9wcm9wcy5wdXNoKHIpLDF9fX0seHI9WzEsMCwwLDEsMCwwXSxNcj17fSxrcj1mdW5jdGlvbiBfcGFyc2VUcmFuc2Zvcm0odCxlKXt2YXIgcj10Ll9nc2FwfHxuZXcgWnQodCk7aWYoIngiaW4gciYmIWUmJiFyLnVuY2FjaGUpcmV0dXJuIHI7dmFyIGksbixhLHMsbyx1LGgsbCxmLGQsYyxwLF8sbSxnLHYseSxULGIsdyx4LE0sayxPLEEsUCxDLFMsRCx6LEUsUixGPXQuc3R5bGUsTD1yLnNjYWxlWDwwLEk9ImRlZyIsQj1nZXRDb21wdXRlZFN0eWxlKHQpLGo9UWQodCxfcil8fCIwIjtyZXR1cm4gaT1uPWE9dT1oPWw9Zj1kPWM9MCxzPW89MSxyLnN2Zz0hKCF0LmdldENUTXx8IVhkKHQpKSxCLnRyYW5zbGF0ZSYmKCJub25lIj09PUIudHJhbnNsYXRlJiYibm9uZSI9PT1CLnNjYWxlJiYibm9uZSI9PT1CLnJvdGF0ZXx8KEZbcHJdPSgibm9uZSIhPT1CLnRyYW5zbGF0ZT8idHJhbnNsYXRlM2QoIisoQi50cmFuc2xhdGUrIiAwIDAiKS5zcGxpdCgiICIpLnNsaWNlKDAsMykuam9pbigiLCAiKSsiKSAiOiIiKSsoIm5vbmUiIT09Qi5yb3RhdGU\/InJvdGF0ZSgiK0Iucm90YXRlKyIpICI6IiIpKygibm9uZSIhPT1CLnNjYWxlPyJzY2FsZSgiK0Iuc2NhbGUuc3BsaXQoIiAiKS5qb2luKCIsIikrIikgIjoiIikrKCJub25lIiE9PUJbcHJdP0JbcHJdOiIiKSksRi5zY2FsZT1GLnJvdGF0ZT1GLnRyYW5zbGF0ZT0ibm9uZSIpLG09bGUodCxyLnN2Zyksci5zdmcmJihPPXIudW5jYWNoZT8oQT10LmdldEJCb3goKSxqPXIueE9yaWdpbi1BLngrInB4ICIrKHIueU9yaWdpbi1BLnkpKyJweCIsIiIpOiFlJiZ0LmdldEF0dHJpYnV0ZSgiZGF0YS1zdmctb3JpZ2luIiksbWUodCxPfHxqLCEhT3x8ci5vcmlnaW5Jc0Fic29sdXRlLCExIT09ci5zbW9vdGgsbSkpLHA9ci54T3JpZ2lufHwwLF89ci55T3JpZ2lufHwwLG0hPT14ciYmKFQ9bVswXSxiPW1bMV0sdz1tWzJdLHg9bVszXSxpPU09bVs0XSxuPWs9bVs1XSw2PT09bS5sZW5ndGg\/KHM9TWF0aC5zcXJ0KFQqVCtiKmIpLG89TWF0aC5zcXJ0KHgqeCt3KncpLHU9VHx8Yj9ocihiLFQpKm9yOjAsKGY9d3x8eD9ocih3LHgpKm9yK3U6MCkmJihvKj1NYXRoLmFicyhNYXRoLmNvcyhmKnVyKSkpLHIuc3ZnJiYoaS09cC0ocCpUK18qdyksbi09Xy0ocCpiK18qeCkpKTooUj1tWzZdLHo9bVs3XSxDPW1bOF0sUz1tWzldLEQ9bVsxMF0sRT1tWzExXSxpPW1bMTJdLG49bVsxM10sYT1tWzE0XSxoPShnPWhyKFIsRCkpKm9yLGcmJihPPU0qKHY9TWF0aC5jb3MoLWcpKStDKih5PU1hdGguc2luKC1nKSksQT1rKnYrUyp5LFA9Uip2K0QqeSxDPU0qLXkrQyp2LFM9ayoteStTKnYsRD1SKi15K0QqdixFPXoqLXkrRSp2LE09TyxrPUEsUj1QKSxsPShnPWhyKC13LEQpKSpvcixnJiYodj1NYXRoLmNvcygtZyksRT14Kih5PU1hdGguc2luKC1nKSkrRSp2LFQ9Tz1UKnYtQyp5LGI9QT1iKnYtUyp5LHc9UD13KnYtRCp5KSx1PShnPWhyKGIsVCkpKm9yLGcmJihPPVQqKHY9TWF0aC5jb3MoZykpK2IqKHk9TWF0aC5zaW4oZykpLEE9TSp2K2sqeSxiPWIqdi1UKnksaz1rKnYtTSp5LFQ9TyxNPUEpLGgmJjM1OS45PE1hdGguYWJzKGgpK01hdGguYWJzKHUpJiYoaD11PTAsbD0xODAtbCkscz1pYShNYXRoLnNxcnQoVCpUK2IqYit3KncpKSxvPWlhKE1hdGguc3FydChrKmsrUipSKSksZz1ocihNLGspLGY9MmUtNDxNYXRoLmFicyhnKT9nKm9yOjAsYz1FPzEvKEU8MD8tRTpFKTowKSxyLnN2ZyYmKE89dC5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpLHIuZm9yY2VDU1M9dC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsIiIpfHwhamUoUWQodCxwcikpLE8mJnQuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLE8pKSksOTA8TWF0aC5hYnMoZikmJk1hdGguYWJzKGYpPDI3MCYmKEw\/KHMqPS0xLGYrPXU8PTA\/MTgwOi0xODAsdSs9dTw9MD8xODA6LTE4MCk6KG8qPS0xLGYrPWY8PTA\/MTgwOi0xODApKSxlPWV8fHIudW5jYWNoZSxyLng9aS0oKHIueFBlcmNlbnQ9aSYmKCFlJiZyLnhQZXJjZW50fHwoTWF0aC5yb3VuZCh0Lm9mZnNldFdpZHRoLzIpPT09TWF0aC5yb3VuZCgtaSk\/LTUwOjApKSk\/dC5vZmZzZXRXaWR0aCpyLnhQZXJjZW50LzEwMDowKSsicHgiLHIueT1uLSgoci55UGVyY2VudD1uJiYoIWUmJnIueVBlcmNlbnR8fChNYXRoLnJvdW5kKHQub2Zmc2V0SGVpZ2h0LzIpPT09TWF0aC5yb3VuZCgtbik\/LTUwOjApKSk\/dC5vZmZzZXRIZWlnaHQqci55UGVyY2VudC8xMDA6MCkrInB4IixyLno9YSsicHgiLHIuc2NhbGVYPWlhKHMpLHIuc2NhbGVZPWlhKG8pLHIucm90YXRpb249aWEodSkrSSxyLnJvdGF0aW9uWD1pYShoKStJLHIucm90YXRpb25ZPWlhKGwpK0ksci5za2V3WD1mK0ksci5za2V3WT1kK0ksci50cmFuc2Zvcm1QZXJzcGVjdGl2ZT1jKyJweCIsKHIuek9yaWdpbj1wYXJzZUZsb2F0KGouc3BsaXQoIiAiKVsyXSl8fCFlJiZyLnpPcmlnaW58fDApJiYoRltfcl09T3IoaikpLHIueE9mZnNldD1yLnlPZmZzZXQ9MCxyLmZvcmNlM0Q9WC5mb3JjZTNELHIucmVuZGVyVHJhbnNmb3JtPXIuc3ZnP3pyOlhlP0RyOkFyLHIudW5jYWNoZT0wLHJ9LE9yPWZ1bmN0aW9uIF9maXJzdFR3b09ubHkodCl7cmV0dXJuKHQ9dC5zcGxpdCgiICIpKVswXSsiICIrdFsxXX0sQXI9ZnVuY3Rpb24gX3JlbmRlck5vbjNEVHJhbnNmb3Jtcyh0LGUpe2Uuej0iMHB4IixlLnJvdGF0aW9uWT1lLnJvdGF0aW9uWD0iMGRlZyIsZS5mb3JjZTNEPTAsRHIodCxlKX0sUHI9IjBkZWciLENyPSIwcHgiLFNyPSIpICIsRHI9ZnVuY3Rpb24gX3JlbmRlckNTU1RyYW5zZm9ybXModCxlKXt2YXIgcj1lfHx0aGlzLGk9ci54UGVyY2VudCxuPXIueVBlcmNlbnQsYT1yLngscz1yLnksbz1yLnosdT1yLnJvdGF0aW9uLGg9ci5yb3RhdGlvblksbD1yLnJvdGF0aW9uWCxmPXIuc2tld1gsZD1yLnNrZXdZLGM9ci5zY2FsZVgscD1yLnNjYWxlWSxfPXIudHJhbnNmb3JtUGVyc3BlY3RpdmUsbT1yLmZvcmNlM0QsZz1yLnRhcmdldCx2PXIuek9yaWdpbix5PSIiLFQ9ImF1dG8iPT09bSYmdCYmMSE9PXR8fCEwPT09bTtpZih2JiYobCE9PVByfHxoIT09UHIpKXt2YXIgYix3PXBhcnNlRmxvYXQoaCkqdXIseD1NYXRoLnNpbih3KSxNPU1hdGguY29zKHcpO3c9cGFyc2VGbG9hdChsKSp1cixiPU1hdGguY29zKHcpLGE9cGUoZyxhLHgqYiotdikscz1wZShnLHMsLU1hdGguc2luKHcpKi12KSxvPXBlKGcsbyxNKmIqLXYrdil9XyE9PUNyJiYoeSs9InBlcnNwZWN0aXZlKCIrXytTciksKGl8fG4pJiYoeSs9InRyYW5zbGF0ZSgiK2krIiUsICIrbisiJSkgIiksIVQmJmE9PT1DciYmcz09PUNyJiZvPT09Q3J8fCh5Kz1vIT09Q3J8fFQ\/InRyYW5zbGF0ZTNkKCIrYSsiLCAiK3MrIiwgIitvKyIpICI6InRyYW5zbGF0ZSgiK2ErIiwgIitzK1NyKSx1IT09UHImJih5Kz0icm90YXRlKCIrdStTciksaCE9PVByJiYoeSs9InJvdGF0ZVkoIitoK1NyKSxsIT09UHImJih5Kz0icm90YXRlWCgiK2wrU3IpLGY9PT1QciYmZD09PVByfHwoeSs9InNrZXcoIitmKyIsICIrZCtTciksMT09PWMmJjE9PT1wfHwoeSs9InNjYWxlKCIrYysiLCAiK3ArU3IpLGcuc3R5bGVbcHJdPXl8fCJ0cmFuc2xhdGUoMCwgMCkifSx6cj1mdW5jdGlvbiBfcmVuZGVyU1ZHVHJhbnNmb3Jtcyh0LGUpe3ZhciByLGksbixhLHMsbz1lfHx0aGlzLHU9by54UGVyY2VudCxoPW8ueVBlcmNlbnQsbD1vLngsZj1vLnksZD1vLnJvdGF0aW9uLGM9by5za2V3WCxwPW8uc2tld1ksXz1vLnNjYWxlWCxtPW8uc2NhbGVZLGc9by50YXJnZXQsdj1vLnhPcmlnaW4seT1vLnlPcmlnaW4sVD1vLnhPZmZzZXQsYj1vLnlPZmZzZXQsdz1vLmZvcmNlQ1NTLHg9cGFyc2VGbG9hdChsKSxNPXBhcnNlRmxvYXQoZik7ZD1wYXJzZUZsb2F0KGQpLGM9cGFyc2VGbG9hdChjKSwocD1wYXJzZUZsb2F0KHApKSYmKGMrPXA9cGFyc2VGbG9hdChwKSxkKz1wKSxkfHxjPyhkKj11cixjKj11cixyPU1hdGguY29zKGQpKl8saT1NYXRoLnNpbihkKSpfLG49TWF0aC5zaW4oZC1jKSotbSxhPU1hdGguY29zKGQtYykqbSxjJiYocCo9dXIscz1NYXRoLnRhbihjLXApLG4qPXM9TWF0aC5zcXJ0KDErcypzKSxhKj1zLHAmJihzPU1hdGgudGFuKHApLHIqPXM9TWF0aC5zcXJ0KDErcypzKSxpKj1zKSkscj1pYShyKSxpPWlhKGkpLG49aWEobiksYT1pYShhKSk6KHI9XyxhPW0saT1uPTApLCh4JiYhfihsKyIiKS5pbmRleE9mKCJweCIpfHxNJiYhfihmKyIiKS5pbmRleE9mKCJweCIpKSYmKHg9YWUoZywieCIsbCwicHgiKSxNPWFlKGcsInkiLGYsInB4IikpLCh2fHx5fHxUfHxiKSYmKHg9aWEoeCt2LSh2KnIreSpuKStUKSxNPWlhKE0reS0odippK3kqYSkrYikpLCh1fHxoKSYmKHM9Zy5nZXRCQm94KCkseD1pYSh4K3UvMTAwKnMud2lkdGgpLE09aWEoTStoLzEwMCpzLmhlaWdodCkpLHM9Im1hdHJpeCgiK3IrIiwiK2krIiwiK24rIiwiK2ErIiwiK3grIiwiK00rIikiLGcuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHMpLHcmJihnLnN0eWxlW3ByXT1zKX07aGEoInBhZGRpbmcsbWFyZ2luLFdpZHRoLFJhZGl1cyIsZnVuY3Rpb24oZSxyKXt2YXIgdD0iUmlnaHQiLGk9IkJvdHRvbSIsbj0iTGVmdCIsbz0ocjwzP1siVG9wIix0LGksbl06WyJUb3AiK24sIlRvcCIrdCxpK3QsaStuXSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiByPDI\/ZSt0OiJib3JkZXIiK3QrZX0pO3dyWzE8cj8iYm9yZGVyIitlOmVdPWZ1bmN0aW9uKGUsdCxyLGksbil7dmFyIGEscztpZihhcmd1bWVudHMubGVuZ3RoPDQpcmV0dXJuIGE9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIFRyKGUsdCxyKX0pLDU9PT0ocz1hLmpvaW4oIiAiKSkuc3BsaXQoYVswXSkubGVuZ3RoP2FbMF06czthPShpKyIiKS5zcGxpdCgiICIpLHM9e30sby5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHNbdF09YVtlXT1hW2VdfHxhWyhlLTEpLzJ8MF19KSxlLmluaXQodCxzLG4pfX0pO3ZhciBFcixScixGcixMcj17bmFtZToiY3NzIixyZWdpc3RlcjpUZCx0YXJnZXRUZXN0OmZ1bmN0aW9uIHRhcmdldFRlc3QodCl7cmV0dXJuIHQuc3R5bGUmJnQubm9kZVR5cGV9LGluaXQ6ZnVuY3Rpb24gaW5pdCh0LGUsaSxuLGEpe3ZhciBzLG8sdSxoLGwsZixkLGMscCxfLG0sZyx2LHksVCxiLHc9dGhpcy5fcHJvcHMseD10LnN0eWxlLE09aS52YXJzLnN0YXJ0QXQ7Zm9yKGQgaW4gTGV8fFRkKCksdGhpcy5zdHlsZXM9dGhpcy5zdHlsZXN8fE5kKHQpLGI9dGhpcy5zdHlsZXMucHJvcHMsdGhpcy50d2Vlbj1pLGUpaWYoImF1dG9Sb3VuZCIhPT1kJiYobz1lW2RdLCFwdFtkXXx8IWJjKGQsZSxpLG4sdCxhKSkpaWYobD10eXBlb2YgbyxmPXdyW2RdLCJmdW5jdGlvbiI9PT1sJiYobD10eXBlb2Yobz1vLmNhbGwoaSxuLHQsYSkpKSwic3RyaW5nIj09PWwmJn5vLmluZGV4T2YoInJhbmRvbSgiKSYmKG89cGIobykpLGYpZih0aGlzLHQsZCxvLGkpJiYoVD0xKTtlbHNlIGlmKCItLSI9PT1kLnN1YnN0cigwLDIpKXM9KGdldENvbXB1dGVkU3R5bGUodCkuZ2V0UHJvcGVydHlWYWx1ZShkKSsiIikudHJpbSgpLG8rPSIiLHp0Lmxhc3RJbmRleD0wLHp0LnRlc3Qocyl8fChjPVphKHMpLHA9WmEobykpLHA\/YyE9PXAmJihzPWFlKHQsZCxzLHApK3ApOmMmJihvKz1jKSx0aGlzLmFkZCh4LCJzZXRQcm9wZXJ0eSIscyxvLG4sYSwwLDAsZCksdy5wdXNoKGQpLGIucHVzaChkLDAseFtkXSk7ZWxzZSBpZigidW5kZWZpbmVkIiE9PWwpe2lmKE0mJmQgaW4gTT8ocz0iZnVuY3Rpb24iPT10eXBlb2YgTVtkXT9NW2RdLmNhbGwoaSxuLHQsYSk6TVtkXSxyKHMpJiZ+cy5pbmRleE9mKCJyYW5kb20oIikmJihzPXBiKHMpKSxaYShzKyIiKXx8ImF1dG8iPT09c3x8KHMrPVgudW5pdHNbZF18fFphKFRyKHQsZCkpfHwiIiksIj0iPT09KHMrIiIpLmNoYXJBdCgxKSYmKHM9VHIodCxkKSkpOnM9VHIodCxkKSxoPXBhcnNlRmxvYXQocyksKF89InN0cmluZyI9PT1sJiYiPSI9PT1vLmNoYXJBdCgxKSYmby5zdWJzdHIoMCwyKSkmJihvPW8uc3Vic3RyKDIpKSx1PXBhcnNlRmxvYXQobyksZCBpbiBjciYmKCJhdXRvQWxwaGEiPT09ZCYmKDE9PT1oJiYiaGlkZGVuIj09PVRyKHQsInZpc2liaWxpdHkiKSYmdSYmKGg9MCksYi5wdXNoKCJ2aXNpYmlsaXR5IiwwLHgudmlzaWJpbGl0eSksWmQodGhpcyx4LCJ2aXNpYmlsaXR5IixoPyJpbmhlcml0IjoiaGlkZGVuIix1PyJpbmhlcml0IjoiaGlkZGVuIiwhdSkpLCJzY2FsZSIhPT1kJiYidHJhbnNmb3JtIiE9PWQmJn4oZD1jcltkXSkuaW5kZXhPZigiLCIpJiYoZD1kLnNwbGl0KCIsIilbMF0pKSxtPWQgaW4gc3IpaWYodGhpcy5zdHlsZXMuc2F2ZShkKSwic3RyaW5nIj09PWwmJiJ2YXIoLS0iPT09by5zdWJzdHJpbmcoMCw2KSYmKG89UWQodCxvLnN1YnN0cmluZyg0LG8uaW5kZXhPZigiKSIpKSksdT1wYXJzZUZsb2F0KG8pKSxnfHwoKHY9dC5fZ3NhcCkucmVuZGVyVHJhbnNmb3JtJiYhZS5wYXJzZVRyYW5zZm9ybXx8a3IodCxlLnBhcnNlVHJhbnNmb3JtKSx5PSExIT09ZS5zbW9vdGhPcmlnaW4mJnYuc21vb3RoLChnPXRoaXMuX3B0PW5ldyBnZSh0aGlzLl9wdCx4LHByLDAsMSx2LnJlbmRlclRyYW5zZm9ybSx2LDAsLTEpKS5kZXA9MSksInNjYWxlIj09PWQpdGhpcy5fcHQ9bmV3IGdlKHRoaXMuX3B0LHYsInNjYWxlWSIsdi5zY2FsZVksKF8\/a2Eodi5zY2FsZVksXyt1KTp1KS12LnNjYWxlWXx8MCx3ZCksdGhpcy5fcHQudT0wLHcucHVzaCgic2NhbGVZIixkKSxkKz0iWCI7ZWxzZXtpZigidHJhbnNmb3JtT3JpZ2luIj09PWQpe2IucHVzaChfciwwLHhbX3JdKSxvPWVlKG8pLHYuc3ZnP21lKHQsbywwLHksMCx0aGlzKTooKHA9cGFyc2VGbG9hdChvLnNwbGl0KCIgIilbMl0pfHwwKSE9PXYuek9yaWdpbiYmWmQodGhpcyx2LCJ6T3JpZ2luIix2LnpPcmlnaW4scCksWmQodGhpcyx4LGQsT3IocyksT3IobykpKTtjb250aW51ZX1pZigic3ZnT3JpZ2luIj09PWQpe21lKHQsbywxLHksMCx0aGlzKTtjb250aW51ZX1pZihkIGluIE1yKXt3ZSh0aGlzLHYsZCxoLF8\/a2EoaCxfK28pOm8pO2NvbnRpbnVlfWlmKCJzbW9vdGhPcmlnaW4iPT09ZCl7WmQodGhpcyx2LCJzbW9vdGgiLHYuc21vb3RoLG8pO2NvbnRpbnVlfWlmKCJmb3JjZTNEIj09PWQpe3ZbZF09bztjb250aW51ZX1pZigidHJhbnNmb3JtIj09PWQpe3llKHRoaXMsbyx0KTtjb250aW51ZX19ZWxzZSBkIGluIHh8fChkPWdyKGQpfHxkKTtpZihtfHwodXx8MD09PXUpJiYoaHx8MD09PWgpJiYhZHIudGVzdChvKSYmZCBpbiB4KXU9dXx8MCwoYz0ocysiIikuc3Vic3RyKChoKyIiKS5sZW5ndGgpKSE9PShwPVphKG8pfHwoZCBpbiBYLnVuaXRzP1gudW5pdHNbZF06YykpJiYoaD1hZSh0LGQscyxwKSksdGhpcy5fcHQ9bmV3IGdlKHRoaXMuX3B0LG0\/djp4LGQsaCwoXz9rYShoLF8rdSk6dSktaCxtfHwicHgiIT09cCYmInpJbmRleCIhPT1kfHwhMT09PWUuYXV0b1JvdW5kP3dkOnpkKSx0aGlzLl9wdC51PXB8fDAsYyE9PXAmJiIlIiE9PXAmJih0aGlzLl9wdC5iPXMsdGhpcy5fcHQucj15ZCk7ZWxzZSBpZihkIGluIHgpY2UuY2FsbCh0aGlzLHQsZCxzLF8\/XytvOm8pO2Vsc2UgaWYoZCBpbiB0KXRoaXMuYWRkKHQsZCxzfHx0W2RdLF8\/XytvOm8sbixhKTtlbHNlIGlmKCJwYXJzZVRyYW5zZm9ybSIhPT1kKXtRKGQsbyk7Y29udGludWV9bXx8KGQgaW4geD9iLnB1c2goZCwwLHhbZF0pOiJmdW5jdGlvbiI9PXR5cGVvZiB0W2RdP2IucHVzaChkLDIsdFtkXSgpKTpiLnB1c2goZCwxLHN8fHRbZF0pKSx3LnB1c2goZCl9VCYmX2UodGhpcyl9LHJlbmRlcjpmdW5jdGlvbiByZW5kZXIodCxlKXtpZihlLnR3ZWVuLl90aW1lfHwhWWUoKSlmb3IodmFyIHI9ZS5fcHQ7cjspci5yKHQsci5kKSxyPXIuX25leHQ7ZWxzZSBlLnN0eWxlcy5yZXZlcnQoKX0sZ2V0OlRyLGFsaWFzZXM6Y3IsZ2V0U2V0dGVyOmZ1bmN0aW9uIGdldFNldHRlcih0LGUscil7dmFyIGk9Y3JbZV07cmV0dXJuIGkmJmkuaW5kZXhPZigiLCIpPDAmJihlPWkpLGUgaW4gc3ImJmUhPT1fciYmKHQuX2dzYXAueHx8VHIodCwieCIpKT9yJiZCZT09PXI\/InNjYWxlIj09PWU\/RmQ6RWQ6KEJlPXJ8fHt9KSYmKCJzY2FsZSI9PT1lP0dkOkhkKTp0LnN0eWxlJiYhdSh0LnN0eWxlW2VdKT9DZDp+ZS5pbmRleE9mKCItIik\/RGQ6aWUodCxlKX0sY29yZTp7X3JlbW92ZVByb3BlcnR5OllkLF9nZXRNYXRyaXg6bGV9fTt6ZS51dGlscy5jaGVja1ByZWZpeD1ncix6ZS5jb3JlLmdldFN0eWxlU2F2ZXI9TmQsRnI9aGEoKEVyPSJ4LHkseixzY2FsZSxzY2FsZVgsc2NhbGVZLHhQZXJjZW50LHlQZXJjZW50IikrIiwiKyhScj0icm90YXRpb24scm90YXRpb25YLHJvdGF0aW9uWSxza2V3WCxza2V3WSIpKyIsdHJhbnNmb3JtLHRyYW5zZm9ybU9yaWdpbixzdmdPcmlnaW4sZm9yY2UzRCxzbW9vdGhPcmlnaW4sdHJhbnNmb3JtUGVyc3BlY3RpdmUiLGZ1bmN0aW9uKHQpe3NyW3RdPTF9KSxoYShScixmdW5jdGlvbih0KXtYLnVuaXRzW3RdPSJkZWciLE1yW3RdPTF9KSxjcltGclsxM11dPUVyKyIsIitScixoYSgiMDp0cmFuc2xhdGVYLDE6dHJhbnNsYXRlWSwyOnRyYW5zbGF0ZVosODpyb3RhdGUsODpyb3RhdGlvblosODpyb3RhdGVaLDk6cm90YXRlWCwxMDpyb3RhdGVZIixmdW5jdGlvbih0KXt2YXIgZT10LnNwbGl0KCI6Iik7Y3JbZVsxXV09RnJbZVswXV19KSxoYSgieCx5LHosdG9wLHJpZ2h0LGJvdHRvbSxsZWZ0LHdpZHRoLGhlaWdodCxmb250U2l6ZSxwYWRkaW5nLG1hcmdpbixwZXJzcGVjdGl2ZSIsZnVuY3Rpb24odCl7WC51bml0c1t0XT0icHgifSksemUucmVnaXN0ZXJQbHVnaW4oTHIpO3ZhciBJcj16ZS5yZWdpc3RlclBsdWdpbihMcil8fHplLEJyPUlyLmNvcmUuVHdlZW47ZS5CYWNrPXRyLGUuQm91bmNlPXJyLGUuQ1NTUGx1Z2luPUxyLGUuQ2lyYz1hcixlLkN1YmljPUdlLGUuRWxhc3RpYz0kZSxlLkV4cG89bnIsZS5MaW5lYXI9VmUsZS5Qb3dlcjA9WmUsZS5Qb3dlcjE9TmUsZS5Qb3dlcjI9UWUsZS5Qb3dlcjM9VWUsZS5Qb3dlcjQ9cWUsZS5RdWFkPVdlLGUuUXVhcnQ9SGUsZS5RdWludD1LZSxlLlNpbmU9aXIsZS5TdGVwcGVkRWFzZT1lcixlLlN0cm9uZz1KZSxlLlRpbWVsaW5lTGl0ZT1RdCxlLlRpbWVsaW5lTWF4PVF0LGUuVHdlZW5MaXRlPUp0LGUuVHdlZW5NYXg9QnIsZS5kZWZhdWx0PUlyLGUuZ3NhcD1JcjtpZiAodHlwZW9mKHdpbmRvdyk9PT0idW5kZWZpbmVkInx8d2luZG93IT09ZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSBlbHNlIHtkZWxldGUgZS5kZWZhdWx0fX0pOwoK');r('LyohCiAqIFNjcm9sbFRyaWdnZXIgMy4xMy4wCiAqIGh0dHBzOi8vZ3NhcC5jb20KICogCiAqIEBsaWNlbnNlIENvcHlyaWdodCAyMDI1LCBHcmVlblNvY2suIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFN1YmplY3QgdG8gdGhlIHRlcm1zIGF0IGh0dHBzOi8vZ3NhcC5jb20vc3RhbmRhcmQtbGljZW5zZS4KICogQGF1dGhvcjogSmFjayBEb3lsZSwgamFja0BncmVlbnNvY2suY29tCiAqLwoKIWZ1bmN0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT90KGV4cG9ydHMpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ\/ZGVmaW5lKFsiZXhwb3J0cyJdLHQpOnQoKGU9ZXx8c2VsZikud2luZG93PWUud2luZG93fHx7fSl9KHRoaXMsZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gcigpe3JldHVybiBTZXx8InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJihTZT13aW5kb3cuZ3NhcCkmJlNlLnJlZ2lzdGVyUGx1Z2luJiZTZX1mdW5jdGlvbiB6KGUsdCl7cmV0dXJuflllLmluZGV4T2YoZSkmJlllW1llLmluZGV4T2YoZSkrMV1bdF19ZnVuY3Rpb24gQShlKXtyZXR1cm4hIX50LmluZGV4T2YoZSl9ZnVuY3Rpb24gQihlLHQscixuLGkpe3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIodCxyLHtwYXNzaXZlOiExIT09bixjYXB0dXJlOiEhaX0pfWZ1bmN0aW9uIEMoZSx0LHIsbil7cmV0dXJuIGUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LHIsISFuKX1mdW5jdGlvbiBGKCl7cmV0dXJuIFJlJiZSZS5pc1ByZXNzZWR8fHplLmNhY2hlKyt9ZnVuY3Rpb24gRyhyLG4pe2Z1bmN0aW9uIGVkKGUpe2lmKGV8fDA9PT1lKXtpJiYoVGUuaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbj0ibWFudWFsIik7dmFyIHQ9UmUmJlJlLmlzUHJlc3NlZDtlPWVkLnY9TWF0aC5yb3VuZChlKXx8KFJlJiZSZS5pT1M\/MTowKSxyKGUpLGVkLmNhY2hlSUQ9emUuY2FjaGUsdCYmbygic3MiLGUpfWVsc2Uobnx8emUuY2FjaGUhPT1lZC5jYWNoZUlEfHxvKCJyZWYiKSkmJihlZC5jYWNoZUlEPXplLmNhY2hlLGVkLnY9cigpKTtyZXR1cm4gZWQuditlZC5vZmZzZXR9cmV0dXJuIGVkLm9mZnNldD0wLHImJmVkfWZ1bmN0aW9uIEooZSx0KXtyZXR1cm4odCYmdC5fY3R4JiZ0Ll9jdHguc2VsZWN0b3J8fFNlLnV0aWxzLnRvQXJyYXkpKGUpWzBdfHwoInN0cmluZyI9PXR5cGVvZiBlJiYhMSE9PVNlLmNvbmZpZygpLm51bGxUYXJnZXRXYXJuP2NvbnNvbGUud2FybigiRWxlbWVudCBub3QgZm91bmQ6IixlKTpudWxsKX1mdW5jdGlvbiBMKHQsZSl7dmFyIHI9ZS5zLG49ZS5zYztBKHQpJiYodD1DZS5zY3JvbGxpbmdFbGVtZW50fHxNZSk7dmFyIGk9emUuaW5kZXhPZih0KSxvPW49PT1xZS5zYz8xOjI7fml8fChpPXplLnB1c2godCktMSksemVbaStvXXx8Qih0LCJzY3JvbGwiLEYpO3ZhciBhPXplW2krb10scz1hfHwoemVbaStvXT1HKHoodCxyKSwhMCl8fChBKHQpP246RyhmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90W3JdPWU6dFtyXX0pKSk7cmV0dXJuIHMudGFyZ2V0PXQsYXx8KHMuc21vb3RoPSJzbW9vdGgiPT09U2UuZ2V0UHJvcGVydHkodCwic2Nyb2xsQmVoYXZpb3IiKSksc31mdW5jdGlvbiBNKGUsdCxpKXtmdW5jdGlvbiBHZChlLHQpe3ZhciByPUxlKCk7dHx8bjxyLXM\/KGE9byxvPWUsbD1zLHM9cik6aT9vKz1lOm89YSsoZS1hKS8oci1sKSoocy1sKX12YXIgbz1lLGE9ZSxzPUxlKCksbD1zLG49dHx8NTAsYz1NYXRoLm1heCg1MDAsMypuKTtyZXR1cm57dXBkYXRlOkdkLHJlc2V0OmZ1bmN0aW9uIHJlc2V0KCl7YT1vPWk\/MDpvLGw9cz0wfSxnZXRWZWxvY2l0eTpmdW5jdGlvbiBnZXRWZWxvY2l0eShlKXt2YXIgdD1sLHI9YSxuPUxlKCk7cmV0dXJuIWUmJjAhPT1lfHxlPT09b3x8R2QoZSkscz09PWx8fGM8bi1sPzA6KG8rKGk\/cjotcikpLygoaT9uOnMpLXQpKjFlM319fWZ1bmN0aW9uIE4oZSx0KXtyZXR1cm4gdCYmIWUuX2dzYXBBbGxvdyYmZS5wcmV2ZW50RGVmYXVsdCgpLGUuY2hhbmdlZFRvdWNoZXM\/ZS5jaGFuZ2VkVG91Y2hlc1swXTplfWZ1bmN0aW9uIE8oZSl7dmFyIHQ9TWF0aC5tYXguYXBwbHkoTWF0aCxlKSxyPU1hdGgubWluLmFwcGx5KE1hdGgsZSk7cmV0dXJuIE1hdGguYWJzKHQpPj1NYXRoLmFicyhyKT90OnJ9ZnVuY3Rpb24gUCgpeyhBZT1TZS5jb3JlLmdsb2JhbHMoKS5TY3JvbGxUcmlnZ2VyKSYmQWUuY29yZSYmZnVuY3Rpb24gX2ludGVncmF0ZSgpe3ZhciBlPUFlLmNvcmUscj1lLmJyaWRnZXx8e30sdD1lLl9zY3JvbGxlcnMsbj1lLl9wcm94aWVzO3QucHVzaC5hcHBseSh0LHplKSxuLnB1c2guYXBwbHkobixZZSksemU9dCxZZT1uLG89ZnVuY3Rpb24gX2JyaWRnZShlLHQpe3JldHVybiByW2VdKHQpfX0oKX1mdW5jdGlvbiBRKGUpe3JldHVybiBTZT1lfHxyKCksIWtlJiZTZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQuYm9keSYmKFRlPXdpbmRvdyxNZT0oQ2U9ZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudCxFZT1DZS5ib2R5LHQ9W1RlLENlLE1lLEVlXSxTZS51dGlscy5jbGFtcCxCZT1TZS5jb3JlLmNvbnRleHR8fGZ1bmN0aW9uKCl7fSxPZT0ib25wb2ludGVyZW50ZXIiaW4gRWU\/InBvaW50ZXIiOiJtb3VzZSIsUGU9RS5pc1RvdWNoPVRlLm1hdGNoTWVkaWEmJlRlLm1hdGNoTWVkaWEoIihob3Zlcjogbm9uZSksIChwb2ludGVyOiBjb2Fyc2UpIikubWF0Y2hlcz8xOiJvbnRvdWNoc3RhcnQiaW4gVGV8fDA8bmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwwPG5hdmlnYXRvci5tc01heFRvdWNoUG9pbnRzPzI6MCxEZT1FLmV2ZW50VHlwZXM9KCJvbnRvdWNoc3RhcnQiaW4gTWU\/InRvdWNoc3RhcnQsdG91Y2htb3ZlLHRvdWNoY2FuY2VsLHRvdWNoZW5kIjoib25wb2ludGVyZG93biJpbiBNZT8icG9pbnRlcmRvd24scG9pbnRlcm1vdmUscG9pbnRlcmNhbmNlbCxwb2ludGVydXAiOiJtb3VzZWRvd24sbW91c2Vtb3ZlLG1vdXNldXAsbW91c2V1cCIpLnNwbGl0KCIsIiksc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBpPTB9LDUwMCksUCgpLGtlPTEpLGtlfXZhciBTZSxrZSxUZSxDZSxNZSxFZSxQZSxPZSxBZSx0LFJlLERlLEJlLGk9MSxJZT1bXSx6ZT1bXSxZZT1bXSxMZT1EYXRlLm5vdyxvPWZ1bmN0aW9uIF9icmlkZ2UoZSx0KXtyZXR1cm4gdH0sbj0ic2Nyb2xsTGVmdCIsYT0ic2Nyb2xsVG9wIixIZT17czpuLHA6ImxlZnQiLHAyOiJMZWZ0IixvczoicmlnaHQiLG9zMjoiUmlnaHQiLGQ6IndpZHRoIixkMjoiV2lkdGgiLGE6IngiLHNjOkcoZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg\/VGUuc2Nyb2xsVG8oZSxxZS5zYygpKTpUZS5wYWdlWE9mZnNldHx8Q2Vbbl18fE1lW25dfHxFZVtuXXx8MH0pfSxxZT17czphLHA6InRvcCIscDI6IlRvcCIsb3M6ImJvdHRvbSIsb3MyOiJCb3R0b20iLGQ6ImhlaWdodCIsZDI6IkhlaWdodCIsYToieSIsb3A6SGUsc2M6RyhmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9UZS5zY3JvbGxUbyhIZS5zYygpLGUpOlRlLnBhZ2VZT2Zmc2V0fHxDZVthXXx8TWVbYV18fEVlW2FdfHwwfSl9O0hlLm9wPXFlLHplLmNhY2hlPTA7dmFyIEU9KE9ic2VydmVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uIGluaXQoZSl7a2V8fFEoU2UpfHxjb25zb2xlLndhcm4oIlBsZWFzZSBnc2FwLnJlZ2lzdGVyUGx1Z2luKE9ic2VydmVyKSIpLEFlfHxQKCk7dmFyIGk9ZS50b2xlcmFuY2UsYT1lLmRyYWdNaW5pbXVtLHQ9ZS50eXBlLG89ZS50YXJnZXQscj1lLmxpbmVIZWlnaHQsbj1lLmRlYm91bmNlLHM9ZS5wcmV2ZW50RGVmYXVsdCxsPWUub25TdG9wLGM9ZS5vblN0b3BEZWxheSx1PWUuaWdub3JlLGY9ZS53aGVlbFNwZWVkLGQ9ZS5ldmVudCxwPWUub25EcmFnU3RhcnQsZz1lLm9uRHJhZ0VuZCxoPWUub25EcmFnLHY9ZS5vblByZXNzLGI9ZS5vblJlbGVhc2UsbT1lLm9uUmlnaHQseT1lLm9uTGVmdCx4PWUub25VcCxfPWUub25Eb3duLHc9ZS5vbkNoYW5nZVgsUz1lLm9uQ2hhbmdlWSxrPWUub25DaGFuZ2UsVD1lLm9uVG9nZ2xlWCxFPWUub25Ub2dnbGVZLFI9ZS5vbkhvdmVyLEQ9ZS5vbkhvdmVyRW5kLEk9ZS5vbk1vdmUsej1lLmlnbm9yZUNoZWNrLFk9ZS5pc05vcm1hbGl6ZXIsSD1lLm9uR2VzdHVyZVN0YXJ0LHE9ZS5vbkdlc3R1cmVFbmQsWD1lLm9uV2hlZWwsVT1lLm9uRW5hYmxlLFc9ZS5vbkRpc2FibGUsRz1lLm9uQ2xpY2ssVj1lLnNjcm9sbFNwZWVkLEs9ZS5jYXB0dXJlLGo9ZS5hbGxvd0NsaWNrcyxaPWUubG9ja0F4aXMsJD1lLm9uTG9ja0F4aXM7ZnVuY3Rpb24gZ2YoKXtyZXR1cm4geGU9TGUoKX1mdW5jdGlvbiBoZihlLHQpe3JldHVybihzZS5ldmVudD1lKSYmdSYmZnVuY3Rpb24gX2lzV2l0aGluKGUsdCl7Zm9yKHZhciByPXQubGVuZ3RoO3ItLTspaWYodFtyXT09PWV8fHRbcl0uY29udGFpbnMoZSkpcmV0dXJuITA7cmV0dXJuITF9KGUudGFyZ2V0LHUpfHx0JiZoZSYmInRvdWNoIiE9PWUucG9pbnRlclR5cGV8fHomJnooZSx0KX1mdW5jdGlvbiBrZigpe3ZhciBlPXNlLmRlbHRhWD1PKG1lKSx0PXNlLmRlbHRhWT1PKHllKSxyPU1hdGguYWJzKGUpPj1pLG49TWF0aC5hYnModCk+PWk7ayYmKHJ8fG4pJiZrKHNlLGUsdCxtZSx5ZSksciYmKG0mJjA8c2UuZGVsdGFYJiZtKHNlKSx5JiZzZS5kZWx0YVg8MCYmeShzZSksdyYmdyhzZSksVCYmc2UuZGVsdGFYPDAhPWxlPDAmJlQoc2UpLGxlPXNlLmRlbHRhWCxtZVswXT1tZVsxXT1tZVsyXT0wKSxuJiYoXyYmMDxzZS5kZWx0YVkmJl8oc2UpLHgmJnNlLmRlbHRhWTwwJiZ4KHNlKSxTJiZTKHNlKSxFJiZzZS5kZWx0YVk8MCE9Y2U8MCYmRShzZSksY2U9c2UuZGVsdGFZLHllWzBdPXllWzFdPXllWzJdPTApLChuZXx8cmUpJiYoSSYmSShzZSkscmUmJihwJiYxPT09cmUmJnAoc2UpLGgmJmgoc2UpLHJlPTApLG5lPSExKSxvZSYmIShvZT0hMSkmJiQmJiQoc2UpLGllJiYoWChzZSksaWU9ITEpLGVlPTB9ZnVuY3Rpb24gbGYoZSx0LHIpe21lW3JdKz1lLHllW3JdKz10LHNlLl92eC51cGRhdGUoZSksc2UuX3Z5LnVwZGF0ZSh0KSxuP2VlPWVlfHxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoa2YpOmtmKCl9ZnVuY3Rpb24gbWYoZSx0KXtaJiYhYWUmJihzZS5heGlzPWFlPU1hdGguYWJzKGUpPk1hdGguYWJzKHQpPyJ4IjoieSIsb2U9ITApLCJ5IiE9PWFlJiYobWVbMl0rPWUsc2UuX3Z4LnVwZGF0ZShlLCEwKSksIngiIT09YWUmJih5ZVsyXSs9dCxzZS5fdnkudXBkYXRlKHQsITApKSxuP2VlPWVlfHxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoa2YpOmtmKCl9ZnVuY3Rpb24gbmYoZSl7aWYoIWhmKGUsMSkpe3ZhciB0PShlPU4oZSxzKSkuY2xpZW50WCxyPWUuY2xpZW50WSxuPXQtc2UueCxpPXItc2UueSxvPXNlLmlzRHJhZ2dpbmc7c2UueD10LHNlLnk9ciwob3x8KG58fGkpJiYoTWF0aC5hYnMoc2Uuc3RhcnRYLXQpPj1hfHxNYXRoLmFicyhzZS5zdGFydFktcik+PWEpKSYmKHJlPW8\/MjoxLG98fChzZS5pc0RyYWdnaW5nPSEwKSxtZihuLGkpKX19ZnVuY3Rpb24gcWYoZSl7cmV0dXJuIGUudG91Y2hlcyYmMTxlLnRvdWNoZXMubGVuZ3RoJiYoc2UuaXNHZXN0dXJpbmc9ITApJiZIKGUsc2UuaXNEcmFnZ2luZyl9ZnVuY3Rpb24gcmYoKXtyZXR1cm4oc2UuaXNHZXN0dXJpbmc9ITEpfHxxKHNlKX1mdW5jdGlvbiBzZihlKXtpZighaGYoZSkpe3ZhciB0PWZlKCkscj1kZSgpO2xmKCh0LXBlKSpWLChyLWdlKSpWLDEpLHBlPXQsZ2U9cixsJiZ0ZS5yZXN0YXJ0KCEwKX19ZnVuY3Rpb24gdGYoZSl7aWYoIWhmKGUpKXtlPU4oZSxzKSxYJiYoaWU9ITApO3ZhciB0PSgxPT09ZS5kZWx0YU1vZGU\/cjoyPT09ZS5kZWx0YU1vZGU\/VGUuaW5uZXJIZWlnaHQ6MSkqZjtsZihlLmRlbHRhWCp0LGUuZGVsdGFZKnQsMCksbCYmIVkmJnRlLnJlc3RhcnQoITApfX1mdW5jdGlvbiB1ZihlKXtpZighaGYoZSkpe3ZhciB0PWUuY2xpZW50WCxyPWUuY2xpZW50WSxuPXQtc2UueCxpPXItc2UueTtzZS54PXQsc2UueT1yLG5lPSEwLGwmJnRlLnJlc3RhcnQoITApLChufHxpKSYmbWYobixpKX19ZnVuY3Rpb24gdmYoZSl7c2UuZXZlbnQ9ZSxSKHNlKX1mdW5jdGlvbiB3ZihlKXtzZS5ldmVudD1lLEQoc2UpfWZ1bmN0aW9uIHhmKGUpe3JldHVybiBoZihlKXx8TihlLHMpJiZHKHNlKX10aGlzLnRhcmdldD1vPUoobyl8fE1lLHRoaXMudmFycz1lLHU9dSYmU2UudXRpbHMudG9BcnJheSh1KSxpPWl8fDFlLTksYT1hfHwwLGY9Znx8MSxWPVZ8fDEsdD10fHwid2hlZWwsdG91Y2gscG9pbnRlciIsbj0hMSE9PW4scj1yfHxwYXJzZUZsb2F0KFRlLmdldENvbXB1dGVkU3R5bGUoRWUpLmxpbmVIZWlnaHQpfHwyMjt2YXIgZWUsdGUscmUsbmUsaWUsb2UsYWUsc2U9dGhpcyxsZT0wLGNlPTAsdWU9ZS5wYXNzaXZlfHwhcyYmITEhPT1lLnBhc3NpdmUsZmU9TChvLEhlKSxkZT1MKG8scWUpLHBlPWZlKCksZ2U9ZGUoKSxoZT1+dC5pbmRleE9mKCJ0b3VjaCIpJiYhfnQuaW5kZXhPZigicG9pbnRlciIpJiYicG9pbnRlcmRvd24iPT09RGVbMF0sdmU9QShvKSxiZT1vLm93bmVyRG9jdW1lbnR8fENlLG1lPVswLDAsMF0seWU9WzAsMCwwXSx4ZT0wLF9lPXNlLm9uUHJlc3M9ZnVuY3Rpb24oZSl7aGYoZSwxKXx8ZSYmZS5idXR0b258fChzZS5heGlzPWFlPW51bGwsdGUucGF1c2UoKSxzZS5pc1ByZXNzZWQ9ITAsZT1OKGUpLGxlPWNlPTAsc2Uuc3RhcnRYPXNlLng9ZS5jbGllbnRYLHNlLnN0YXJ0WT1zZS55PWUuY2xpZW50WSxzZS5fdngucmVzZXQoKSxzZS5fdnkucmVzZXQoKSxCKFk\/bzpiZSxEZVsxXSxuZix1ZSwhMCksc2UuZGVsdGFYPXNlLmRlbHRhWT0wLHYmJnYoc2UpKX0sd2U9c2Uub25SZWxlYXNlPWZ1bmN0aW9uKHQpe2lmKCFoZih0LDEpKXtDKFk\/bzpiZSxEZVsxXSxuZiwhMCk7dmFyIGU9IWlzTmFOKHNlLnktc2Uuc3RhcnRZKSxyPXNlLmlzRHJhZ2dpbmcsbj1yJiYoMzxNYXRoLmFicyhzZS54LXNlLnN0YXJ0WCl8fDM8TWF0aC5hYnMoc2UueS1zZS5zdGFydFkpKSxpPU4odCk7IW4mJmUmJihzZS5fdngucmVzZXQoKSxzZS5fdnkucmVzZXQoKSxzJiZqJiZTZS5kZWxheWVkQ2FsbCguMDgsZnVuY3Rpb24oKXtpZigzMDA8TGUoKS14ZSYmIXQuZGVmYXVsdFByZXZlbnRlZClpZih0LnRhcmdldC5jbGljayl0LnRhcmdldC5jbGljaygpO2Vsc2UgaWYoYmUuY3JlYXRlRXZlbnQpe3ZhciBlPWJlLmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpO2UuaW5pdE1vdXNlRXZlbnQoImNsaWNrIiwhMCwhMCxUZSwxLGkuc2NyZWVuWCxpLnNjcmVlblksaS5jbGllbnRYLGkuY2xpZW50WSwhMSwhMSwhMSwhMSwwLG51bGwpLHQudGFyZ2V0LmRpc3BhdGNoRXZlbnQoZSl9fSkpLHNlLmlzRHJhZ2dpbmc9c2UuaXNHZXN0dXJpbmc9c2UuaXNQcmVzc2VkPSExLGwmJnImJiFZJiZ0ZS5yZXN0YXJ0KCEwKSxyZSYma2YoKSxnJiZyJiZnKHNlKSxiJiZiKHNlLG4pfX07dGU9c2UuX2RjPVNlLmRlbGF5ZWRDYWxsKGN8fC4yNSxmdW5jdGlvbiBvblN0b3BGdW5jKCl7c2UuX3Z4LnJlc2V0KCksc2UuX3Z5LnJlc2V0KCksdGUucGF1c2UoKSxsJiZsKHNlKX0pLnBhdXNlKCksc2UuZGVsdGFYPXNlLmRlbHRhWT0wLHNlLl92eD1NKDAsNTAsITApLHNlLl92eT1NKDAsNTAsITApLHNlLnNjcm9sbFg9ZmUsc2Uuc2Nyb2xsWT1kZSxzZS5pc0RyYWdnaW5nPXNlLmlzR2VzdHVyaW5nPXNlLmlzUHJlc3NlZD0hMSxCZSh0aGlzKSxzZS5lbmFibGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHNlLmlzRW5hYmxlZHx8KEIodmU\/YmU6bywic2Nyb2xsIixGKSwwPD10LmluZGV4T2YoInNjcm9sbCIpJiZCKHZlP2JlOm8sInNjcm9sbCIsc2YsdWUsSyksMDw9dC5pbmRleE9mKCJ3aGVlbCIpJiZCKG8sIndoZWVsIix0Zix1ZSxLKSwoMDw9dC5pbmRleE9mKCJ0b3VjaCIpJiZQZXx8MDw9dC5pbmRleE9mKCJwb2ludGVyIikpJiYoQihvLERlWzBdLF9lLHVlLEspLEIoYmUsRGVbMl0sd2UpLEIoYmUsRGVbM10sd2UpLGomJkIobywiY2xpY2siLGdmLCEwLCEwKSxHJiZCKG8sImNsaWNrIix4ZiksSCYmQihiZSwiZ2VzdHVyZXN0YXJ0IixxZikscSYmQihiZSwiZ2VzdHVyZWVuZCIscmYpLFImJkIobyxPZSsiZW50ZXIiLHZmKSxEJiZCKG8sT2UrImxlYXZlIix3ZiksSSYmQihvLE9lKyJtb3ZlIix1ZikpLHNlLmlzRW5hYmxlZD0hMCxzZS5pc0RyYWdnaW5nPXNlLmlzR2VzdHVyaW5nPXNlLmlzUHJlc3NlZD1uZT1yZT0hMSxzZS5fdngucmVzZXQoKSxzZS5fdnkucmVzZXQoKSxwZT1mZSgpLGdlPWRlKCksZSYmZS50eXBlJiZfZShlKSxVJiZVKHNlKSksc2V9LHNlLmRpc2FibGU9ZnVuY3Rpb24oKXtzZS5pc0VuYWJsZWQmJihJZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1zZSYmQShlLnRhcmdldCl9KS5sZW5ndGh8fEModmU\/YmU6bywic2Nyb2xsIixGKSxzZS5pc1ByZXNzZWQmJihzZS5fdngucmVzZXQoKSxzZS5fdnkucmVzZXQoKSxDKFk\/bzpiZSxEZVsxXSxuZiwhMCkpLEModmU\/YmU6bywic2Nyb2xsIixzZixLKSxDKG8sIndoZWVsIix0ZixLKSxDKG8sRGVbMF0sX2UsSyksQyhiZSxEZVsyXSx3ZSksQyhiZSxEZVszXSx3ZSksQyhvLCJjbGljayIsZ2YsITApLEMobywiY2xpY2siLHhmKSxDKGJlLCJnZXN0dXJlc3RhcnQiLHFmKSxDKGJlLCJnZXN0dXJlZW5kIixyZiksQyhvLE9lKyJlbnRlciIsdmYpLEMobyxPZSsibGVhdmUiLHdmKSxDKG8sT2UrIm1vdmUiLHVmKSxzZS5pc0VuYWJsZWQ9c2UuaXNQcmVzc2VkPXNlLmlzRHJhZ2dpbmc9ITEsVyYmVyhzZSkpfSxzZS5raWxsPXNlLnJldmVydD1mdW5jdGlvbigpe3NlLmRpc2FibGUoKTt2YXIgZT1JZS5pbmRleE9mKHNlKTswPD1lJiZJZS5zcGxpY2UoZSwxKSxSZT09PXNlJiYoUmU9MCl9LEllLnB1c2goc2UpLFkmJkEobykmJihSZT1zZSksc2UuZW5hYmxlKGQpfSxmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSx0LHIpe3JldHVybiB0JiZfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSx0KSxyJiZfZGVmaW5lUHJvcGVydGllcyhlLHIpLGV9KE9ic2VydmVyLFt7a2V5OiJ2ZWxvY2l0eVgiLGdldDpmdW5jdGlvbiBnZXQoKXtyZXR1cm4gdGhpcy5fdnguZ2V0VmVsb2NpdHkoKX19LHtrZXk6InZlbG9jaXR5WSIsZ2V0OmZ1bmN0aW9uIGdldCgpe3JldHVybiB0aGlzLl92eS5nZXRWZWxvY2l0eSgpfX1dKSxPYnNlcnZlcik7ZnVuY3Rpb24gT2JzZXJ2ZXIoZSl7dGhpcy5pbml0KGUpfUUudmVyc2lvbj0iMy4xMy4wIixFLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IEUoZSl9LEUucmVnaXN0ZXI9USxFLmdldEFsbD1mdW5jdGlvbigpe3JldHVybiBJZS5zbGljZSgpfSxFLmdldEJ5SWQ9ZnVuY3Rpb24odCl7cmV0dXJuIEllLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS52YXJzLmlkPT09dH0pWzBdfSxyKCkmJlNlLnJlZ2lzdGVyUGx1Z2luKEUpO2Z1bmN0aW9uIERhKGUsdCxyKXt2YXIgbj1jdChlKSYmKCJjbGFtcCgiPT09ZS5zdWJzdHIoMCw2KXx8LTE8ZS5pbmRleE9mKCJtYXgiKSk7cmV0dXJuKHJbIl8iK3QrIkNsYW1wIl09bik\/ZS5zdWJzdHIoNixlLmxlbmd0aC03KTplfWZ1bmN0aW9uIEVhKGUsdCl7cmV0dXJuIXR8fGN0KGUpJiYiY2xhbXAoIj09PWUuc3Vic3RyKDAsNik\/ZToiY2xhbXAoIitlKyIpIn1mdW5jdGlvbiBHYSgpe3JldHVybiBRZT0xfWZ1bmN0aW9uIEhhKCl7cmV0dXJuIFFlPTB9ZnVuY3Rpb24gSWEoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gSmEoZSl7cmV0dXJuIE1hdGgucm91bmQoMWU1KmUpLzFlNXx8MH1mdW5jdGlvbiBLYSgpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93fWZ1bmN0aW9uIExhKCl7cmV0dXJuIE5lfHxLYSgpJiYoTmU9d2luZG93LmdzYXApJiZOZS5yZWdpc3RlclBsdWdpbiYmTmV9ZnVuY3Rpb24gTWEoZSl7cmV0dXJuISF+bC5pbmRleE9mKGUpfWZ1bmN0aW9uIE5hKGUpe3JldHVybigiSGVpZ2h0Ij09PWU\/UzpYZVsiaW5uZXIiK2VdKXx8VWVbImNsaWVudCIrZV18fFdlWyJjbGllbnQiK2VdfWZ1bmN0aW9uIE9hKGUpe3JldHVybiB6KGUsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIpfHwoTWEoZSk\/ZnVuY3Rpb24oKXtyZXR1cm4gT3Qud2lkdGg9WGUuaW5uZXJXaWR0aCxPdC5oZWlnaHQ9UyxPdH06ZnVuY3Rpb24oKXtyZXR1cm4gX3QoZSl9KX1mdW5jdGlvbiBSYShlLHQpe3ZhciByPXQucyxuPXQuZDIsaT10LmQsbz10LmE7cmV0dXJuIE1hdGgubWF4KDAsKHI9InNjcm9sbCIrbikmJihvPXooZSxyKSk\/bygpLU9hKGUpKClbaV06TWEoZSk\/KFVlW3JdfHxXZVtyXSktTmEobik6ZVtyXS1lWyJvZmZzZXQiK25dKX1mdW5jdGlvbiBTYShlLHQpe2Zvcih2YXIgcj0wO3I8Zy5sZW5ndGg7cis9Myl0JiYhfnQuaW5kZXhPZihnW3IrMV0pfHxlKGdbcl0sZ1tyKzFdLGdbcisyXSl9ZnVuY3Rpb24gVWEoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV9ZnVuY3Rpb24gVmEoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfWZ1bmN0aW9uIFdhKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZX1mdW5jdGlvbiBYYShlLHQscil7cmV0dXJuIGUmJmUucHJvZ3Jlc3ModD8wOjEpJiZyJiZlLnBhdXNlKCl9ZnVuY3Rpb24gWWEoZSx0KXtpZihlLmVuYWJsZWQpe3ZhciByPWUuX2N0eD9lLl9jdHguYWRkKGZ1bmN0aW9uKCl7cmV0dXJuIHQoZSl9KTp0KGUpO3ImJnIudG90YWxUaW1lJiYoZS5jYWxsYmFja0FuaW1hdGlvbj1yKX19ZnVuY3Rpb24gbmIoZSl7cmV0dXJuIFhlLmdldENvbXB1dGVkU3R5bGUoZSl9ZnVuY3Rpb24gcGIoZSx0KXtmb3IodmFyIHIgaW4gdClyIGluIGV8fChlW3JdPXRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIHJiKGUsdCl7dmFyIHI9dC5kMjtyZXR1cm4gZVsib2Zmc2V0IityXXx8ZVsiY2xpZW50IityXXx8MH1mdW5jdGlvbiBzYihlKXt2YXIgdCxyPVtdLG49ZS5sYWJlbHMsaT1lLmR1cmF0aW9uKCk7Zm9yKHQgaW4gbilyLnB1c2goblt0XS9pKTtyZXR1cm4gcn1mdW5jdGlvbiB1YihpKXt2YXIgbz1OZS51dGlscy5zbmFwKGkpLGE9QXJyYXkuaXNBcnJheShpKSYmaS5zbGljZSgwKS5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pO3JldHVybiBhP2Z1bmN0aW9uKGUsdCxyKXt2YXIgbjtpZih2b2lkIDA9PT1yJiYocj0uMDAxKSwhdClyZXR1cm4gbyhlKTtpZigwPHQpe2ZvcihlLT1yLG49MDtuPGEubGVuZ3RoO24rKylpZihhW25dPj1lKXJldHVybiBhW25dO3JldHVybiBhW24tMV19Zm9yKG49YS5sZW5ndGgsZSs9cjtuLS07KWlmKGFbbl08PWUpcmV0dXJuIGFbbl07cmV0dXJuIGFbMF19OmZ1bmN0aW9uKGUsdCxyKXt2b2lkIDA9PT1yJiYocj0uMDAxKTt2YXIgbj1vKGUpO3JldHVybiF0fHxNYXRoLmFicyhuLWUpPHJ8fG4tZTwwPT10PDA\/bjpvKHQ8MD9lLWk6ZStpKX19ZnVuY3Rpb24gd2IodCxyLGUsbil7cmV0dXJuIGUuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0KHIsZSxuKX0pfWZ1bmN0aW9uIHhiKGUsdCxyLG4saSl7cmV0dXJuIGUuYWRkRXZlbnRMaXN0ZW5lcih0LHIse3Bhc3NpdmU6IW4sY2FwdHVyZTohIWl9KX1mdW5jdGlvbiB5YihlLHQscixuKXtyZXR1cm4gZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsciwhIW4pfWZ1bmN0aW9uIHpiKGUsdCxyKXsocj1yJiZyLndoZWVsSGFuZGxlcikmJihlKHQsIndoZWVsIixyKSxlKHQsInRvdWNobW92ZSIscikpfWZ1bmN0aW9uIERiKGUsdCl7aWYoY3QoZSkpe3ZhciByPWUuaW5kZXhPZigiPSIpLG49fnI\/KGUuY2hhckF0KHItMSkrMSkqcGFyc2VGbG9hdChlLnN1YnN0cihyKzEpKTowO35yJiYoZS5pbmRleE9mKCIlIik+ciYmKG4qPXQvMTAwKSxlPWUuc3Vic3RyKDAsci0xKSksZT1uKyhlIGluIHE\/cVtlXSp0On5lLmluZGV4T2YoIiUiKT9wYXJzZUZsb2F0KGUpKnQvMTAwOnBhcnNlRmxvYXQoZSl8fDApfXJldHVybiBlfWZ1bmN0aW9uIEViKGUsdCxyLG4saSxvLGEscyl7dmFyIGw9aS5zdGFydENvbG9yLGM9aS5lbmRDb2xvcix1PWkuZm9udFNpemUsZj1pLmluZGVudCxkPWkuZm9udFdlaWdodCxwPUZlLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGc9TWEocil8fCJmaXhlZCI9PT16KHIsInBpblR5cGUiKSxoPS0xIT09ZS5pbmRleE9mKCJzY3JvbGxlciIpLHY9Zz9XZTpyLGI9LTEhPT1lLmluZGV4T2YoInN0YXJ0IiksbT1iP2w6Yyx5PSJib3JkZXItY29sb3I6IittKyI7Zm9udC1zaXplOiIrdSsiO2NvbG9yOiIrbSsiO2ZvbnQtd2VpZ2h0OiIrZCsiO3BvaW50ZXItZXZlbnRzOm5vbmU7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWYsQXJpYWw7ei1pbmRleDoxMDAwO3BhZGRpbmc6NHB4IDhweDtib3JkZXItd2lkdGg6MDtib3JkZXItc3R5bGU6c29saWQ7IjtyZXR1cm4geSs9InBvc2l0aW9uOiIrKChofHxzKSYmZz8iZml4ZWQ7IjoiYWJzb2x1dGU7IiksIWgmJiFzJiZnfHwoeSs9KG49PT1xZT9JOlkpKyI6IisobytwYXJzZUZsb2F0KGYpKSsicHg7IiksYSYmKHkrPSJib3gtc2l6aW5nOmJvcmRlci1ib3g7dGV4dC1hbGlnbjpsZWZ0O3dpZHRoOiIrYS5vZmZzZXRXaWR0aCsicHg7IikscC5faXNTdGFydD1iLHAuc2V0QXR0cmlidXRlKCJjbGFzcyIsImdzYXAtbWFya2VyLSIrZSsodD8iIG1hcmtlci0iK3Q6IiIpKSxwLnN0eWxlLmNzc1RleHQ9eSxwLmlubmVyVGV4dD10fHwwPT09dD9lKyItIit0OmUsdi5jaGlsZHJlblswXT92Lmluc2VydEJlZm9yZShwLHYuY2hpbGRyZW5bMF0pOnYuYXBwZW5kQ2hpbGQocCkscC5fb2Zmc2V0PXBbIm9mZnNldCIrbi5vcC5kMl0sWChwLDAsbixiKSxwfWZ1bmN0aW9uIEpiKCl7cmV0dXJuIDM0PGF0KCktc3QmJihUPVR8fHJlcXVlc3RBbmltYXRpb25GcmFtZShaKSl9ZnVuY3Rpb24gS2IoKXt2JiZ2LmlzUHJlc3NlZCYmISh2LnN0YXJ0WD5XZS5jbGllbnRXaWR0aCl8fCh6ZS5jYWNoZSsrLHY\/VD1UfHxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoWik6WigpLHN0fHxWKCJzY3JvbGxTdGFydCIpLHN0PWF0KCkpfWZ1bmN0aW9uIExiKCl7eT1YZS5pbm5lcldpZHRoLG09WGUuaW5uZXJIZWlnaHR9ZnVuY3Rpb24gTWIoZSl7emUuY2FjaGUrKywhMCE9PWUmJihLZXx8aHx8RmUuZnVsbHNjcmVlbkVsZW1lbnR8fEZlLndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHxiJiZ5PT09WGUuaW5uZXJXaWR0aCYmIShNYXRoLmFicyhYZS5pbm5lckhlaWdodC1tKT4uMjUqWGUuaW5uZXJIZWlnaHQpKXx8Yy5yZXN0YXJ0KCEwKX1mdW5jdGlvbiBQYigpe3JldHVybiB5YihuZSwic2Nyb2xsRW5kIixQYil8fE10KCEwKX1mdW5jdGlvbiBTYihlKXtmb3IodmFyIHQ9MDt0PEsubGVuZ3RoO3QrPTUpKCFlfHxLW3QrNF0mJktbdCs0XS5xdWVyeT09PWUpJiYoS1t0XS5zdHlsZS5jc3NUZXh0PUtbdCsxXSxLW3RdLmdldEJCb3gmJktbdF0uc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLEtbdCsyXXx8IiIpLEtbdCszXS51bmNhY2hlPTEpfWZ1bmN0aW9uIFRiKGUsdCl7dmFyIHI7Zm9yKGplPTA7amU8a3QubGVuZ3RoO2plKyspIShyPWt0W2plXSl8fHQmJnIuX2N0eCE9PXR8fChlP3Iua2lsbCgxKTpyLnJldmVydCghMCwhMCkpO2s9ITAsdCYmU2IodCksdHx8VigicmV2ZXJ0Iil9ZnVuY3Rpb24gVWIoZSx0KXt6ZS5jYWNoZSsrLCF0JiZydHx8emUuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gVWEoZSkmJmUuY2FjaGVJRCsrJiYoZS5yZWM9MCl9KSxjdChlKSYmKFhlLmhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb249Xz1lKX1mdW5jdGlvbiBaYigpe1dlLmFwcGVuZENoaWxkKHcpLFM9IXYmJncub2Zmc2V0SGVpZ2h0fHxYZS5pbm5lckhlaWdodCxXZS5yZW1vdmVDaGlsZCh3KX1mdW5jdGlvbiAkYih0KXtyZXR1cm4gSmUoIi5nc2FwLW1hcmtlci1zdGFydCwgLmdzYXAtbWFya2VyLWVuZCwgLmdzYXAtbWFya2VyLXNjcm9sbGVyLXN0YXJ0LCAuZ3NhcC1tYXJrZXItc2Nyb2xsZXItZW5kIikuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZS5zdHlsZS5kaXNwbGF5PXQ\/Im5vbmUiOiJibG9jayJ9KX1mdW5jdGlvbiBoYyhlLHQscixuKXtpZighZS5fZ3NhcC5zd2FwcGVkSW4pe2Zvcih2YXIgaSxvPSQubGVuZ3RoLGE9dC5zdHlsZSxzPWUuc3R5bGU7by0tOylhW2k9JFtvXV09cltpXTthLnBvc2l0aW9uPSJhYnNvbHV0ZSI9PT1yLnBvc2l0aW9uPyJhYnNvbHV0ZSI6InJlbGF0aXZlIiwiaW5saW5lIj09PXIuZGlzcGxheSYmKGEuZGlzcGxheT0iaW5saW5lLWJsb2NrIiksc1tZXT1zW0ldPSJhdXRvIixhLmZsZXhCYXNpcz1yLmZsZXhCYXNpc3x8ImF1dG8iLGEub3ZlcmZsb3c9InZpc2libGUiLGEuYm94U2l6aW5nPSJib3JkZXItYm94IixhW2Z0XT1yYihlLEhlKSt4dCxhW2R0XT1yYihlLHFlKSt4dCxhW2J0XT1zW210XT1zLnRvcD1zLmxlZnQ9IjAiLFB0KG4pLHNbZnRdPXMubWF4V2lkdGg9cltmdF0sc1tkdF09cy5tYXhIZWlnaHQ9cltkdF0sc1tidF09cltidF0sZS5wYXJlbnROb2RlIT09dCYmKGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxlKSx0LmFwcGVuZENoaWxkKGUpKSxlLl9nc2FwLnN3YXBwZWRJbj0hMH19ZnVuY3Rpb24ga2MoZSl7Zm9yKHZhciB0PWVlLmxlbmd0aCxyPWUuc3R5bGUsbj1bXSxpPTA7aTx0O2krKyluLnB1c2goZWVbaV0scltlZVtpXV0pO3JldHVybiBuLnQ9ZSxufWZ1bmN0aW9uIG5jKGUsdCxyLG4saSxvLGEscyxsLGMsdSxmLGQscCl7VWEoZSkmJihlPWUocykpLGN0KGUpJiYibWF4Ij09PWUuc3Vic3RyKDAsMykmJihlPWYrKCI9Ij09PWUuY2hhckF0KDQpP0RiKCIwIitlLnN1YnN0cigzKSxyKTowKSk7dmFyIGcsaCx2LGI9ZD9kLnRpbWUoKTowO2lmKGQmJmQuc2VlaygwKSxpc05hTihlKXx8KGU9K2UpLFZhKGUpKWQmJihlPU5lLnV0aWxzLm1hcFJhbmdlKGQuc2Nyb2xsVHJpZ2dlci5zdGFydCxkLnNjcm9sbFRyaWdnZXIuZW5kLDAsZixlKSksYSYmWChhLHIsbiwhMCk7ZWxzZXtVYSh0KSYmKHQ9dChzKSk7dmFyIG0seSx4LF8sdz0oZXx8IjAiKS5zcGxpdCgiICIpO3Y9Sih0LHMpfHxXZSwobT1fdCh2KXx8e30pJiYobS5sZWZ0fHxtLnRvcCl8fCJub25lIiE9PW5iKHYpLmRpc3BsYXl8fChfPXYuc3R5bGUuZGlzcGxheSx2LnN0eWxlLmRpc3BsYXk9ImJsb2NrIixtPV90KHYpLF8\/di5zdHlsZS5kaXNwbGF5PV86di5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgiZGlzcGxheSIpKSx5PURiKHdbMF0sbVtuLmRdKSx4PURiKHdbMV18fCIwIixyKSxlPW1bbi5wXS1sW24ucF0tYyt5K2kteCxhJiZYKGEseCxuLHIteDwyMHx8YS5faXNTdGFydCYmMjA8eCksci09ci14fWlmKHAmJihzW3BdPWV8fC0uMDAxLGU8MCYmKGU9MCkpLG8pe3ZhciBTPWUrcixrPW8uX2lzU3RhcnQ7Zz0ic2Nyb2xsIituLmQyLFgobyxTLG4sayYmMjA8U3x8IWsmJih1P01hdGgubWF4KFdlW2ddLFVlW2ddKTpvLnBhcmVudE5vZGVbZ10pPD1TKzEpLHUmJihsPV90KGEpLHUmJihvLnN0eWxlW24ub3AucF09bFtuLm9wLnBdLW4ub3AubS1vLl9vZmZzZXQreHQpKX1yZXR1cm4gZCYmdiYmKGc9X3QodiksZC5zZWVrKGYpLGg9X3QodiksZC5fY2FTY3JvbGxEaXN0PWdbbi5wXS1oW24ucF0sZT1lL2QuX2NhU2Nyb2xsRGlzdCpmKSxkJiZkLnNlZWsoYiksZD9lOk1hdGgucm91bmQoZSl9ZnVuY3Rpb24gcGMoZSx0LHIsbil7aWYoZS5wYXJlbnROb2RlIT09dCl7dmFyIGksbyxhPWUuc3R5bGU7aWYodD09PVdlKXtmb3IoaSBpbiBlLl9zdE9yaWc9YS5jc3NUZXh0LG89bmIoZSkpK2l8fHJlLnRlc3QoaSl8fCFvW2ldfHwic3RyaW5nIiE9dHlwZW9mIGFbaV18fCIwIj09PWl8fChhW2ldPW9baV0pO2EudG9wPXIsYS5sZWZ0PW59ZWxzZSBhLmNzc1RleHQ9ZS5fc3RPcmlnO05lLmNvcmUuZ2V0Q2FjaGUoZSkudW5jYWNoZT0xLHQuYXBwZW5kQ2hpbGQoZSl9fWZ1bmN0aW9uIHFjKHIsZSxuKXt2YXIgaT1lLG89aTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5yb3VuZChyKCkpO3JldHVybiB0IT09aSYmdCE9PW8mJjM8TWF0aC5hYnModC1pKSYmMzxNYXRoLmFicyh0LW8pJiYoZT10LG4mJm4oKSksbz1pLGk9TWF0aC5yb3VuZChlKX19ZnVuY3Rpb24gcmMoZSx0LHIpe3ZhciBuPXt9O25bdC5wXT0iKz0iK3IsTmUuc2V0KGUsbil9ZnVuY3Rpb24gc2MoYyxlKXtmdW5jdGlvbiBIayhlLHQscixuLGkpe3ZhciBvPUhrLnR3ZWVuLGE9dC5vbkNvbXBsZXRlLHM9e307cj1yfHx1KCk7dmFyIGw9cWModSxyLGZ1bmN0aW9uKCl7by5raWxsKCksSGsudHdlZW49MH0pO3JldHVybiBpPW4mJml8fDAsbj1ufHxlLXIsbyYmby5raWxsKCksdFtmXT1lLHQuaW5oZXJpdD0hMSwodC5tb2RpZmllcnM9cylbZl09ZnVuY3Rpb24oKXtyZXR1cm4gbChyK24qby5yYXRpbytpKm8ucmF0aW8qby5yYXRpbyl9LHQub25VcGRhdGU9ZnVuY3Rpb24oKXt6ZS5jYWNoZSsrLEhrLnR3ZWVuJiZaKCl9LHQub25Db21wbGV0ZT1mdW5jdGlvbigpe0hrLnR3ZWVuPTAsYSYmYS5jYWxsKG8pfSxvPUhrLnR3ZWVuPU5lLnRvKGMsdCl9dmFyIHU9TChjLGUpLGY9Il9zY3JvbGwiK2UucDI7cmV0dXJuKGNbZl09dSkud2hlZWxIYW5kbGVyPWZ1bmN0aW9uKCl7cmV0dXJuIEhrLnR3ZWVuJiZIay50d2Vlbi5raWxsKCkmJihIay50d2Vlbj0wKX0seGIoYywid2hlZWwiLHUud2hlZWxIYW5kbGVyKSxuZS5pc1RvdWNoJiZ4YihjLCJ0b3VjaG1vdmUiLHUud2hlZWxIYW5kbGVyKSxIa312YXIgTmUscyxYZSxGZSxVZSxXZSxsLGMsSmUsR2UsVmUsdSxLZSxRZSxmLGplLGQscCxnLFplLCRlLGgsdixiLG0seSxSLHgsXyx3LFMsayxldCx0dCxULHJ0LG50LGl0LG90PTEsYXQ9RGF0ZS5ub3csRD1hdCgpLHN0PTAsbHQ9MCxjdD1mdW5jdGlvbiBfaXNTdHJpbmcoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfSx1dD1NYXRoLmFicyxJPSJyaWdodCIsWT0iYm90dG9tIixmdD0id2lkdGgiLGR0PSJoZWlnaHQiLHB0PSJSaWdodCIsZ3Q9IkxlZnQiLGh0PSJUb3AiLHZ0PSJCb3R0b20iLGJ0PSJwYWRkaW5nIixtdD0ibWFyZ2luIix5dD0iV2lkdGgiLEg9IkhlaWdodCIseHQ9InB4IixfdD1mdW5jdGlvbiBfZ2V0Qm91bmRzKGUsdCl7dmFyIHI9dCYmIm1hdHJpeCgxLCAwLCAwLCAxLCAwLCAwKSIhPT1uYihlKVtmXSYmTmUudG8oZSx7eDowLHk6MCx4UGVyY2VudDowLHlQZXJjZW50OjAscm90YXRpb246MCxyb3RhdGlvblg6MCxyb3RhdGlvblk6MCxzY2FsZToxLHNrZXdYOjAsc2tld1k6MH0pLnByb2dyZXNzKDEpLG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gciYmci5wcm9ncmVzcygwKS5raWxsKCksbn0sd3Q9e3N0YXJ0Q29sb3I6ImdyZWVuIixlbmRDb2xvcjoicmVkIixpbmRlbnQ6MCxmb250U2l6ZToiMTZweCIsZm9udFdlaWdodDoibm9ybWFsIn0sU3Q9e3RvZ2dsZUFjdGlvbnM6InBsYXkiLGFudGljaXBhdGVQaW46MH0scT17dG9wOjAsbGVmdDowLGNlbnRlcjouNSxib3R0b206MSxyaWdodDoxfSxYPWZ1bmN0aW9uIF9wb3NpdGlvbk1hcmtlcihlLHQscixuKXt2YXIgaT17ZGlzcGxheToiYmxvY2sifSxvPXJbbj8ib3MyIjoicDIiXSxhPXJbbj8icDIiOiJvczIiXTtlLl9pc0ZsaXBwZWQ9bixpW3IuYSsiUGVyY2VudCJdPW4\/LTEwMDowLGlbci5hXT1uPyIxcHgiOjAsaVsiYm9yZGVyIitvK3l0XT0xLGlbImJvcmRlciIrYSt5dF09MCxpW3IucF09dCsicHgiLE5lLnNldChlLGkpfSxrdD1bXSxUdD17fSxVPXt9LFc9W10sVj1mdW5jdGlvbiBfZGlzcGF0Y2goZSl7cmV0dXJuIFVbZV0mJlVbZV0ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KXx8V30sSz1bXSxDdD0wLE10PWZ1bmN0aW9uIF9yZWZyZXNoQWxsKGUsdCl7aWYoVWU9RmUuZG9jdW1lbnRFbGVtZW50LFdlPUZlLmJvZHksbD1bWGUsRmUsVWUsV2VdLCFzdHx8ZXx8ayl7WmIoKSxydD1uZS5pc1JlZnJlc2hpbmc9ITAsemUuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gVWEoZSkmJisrZS5jYWNoZUlEJiYoZS5yZWM9ZSgpKX0pO3ZhciByPVYoInJlZnJlc2hJbml0Iik7WmUmJm5lLnNvcnQoKSx0fHxUYigpLHplLmZvckVhY2goZnVuY3Rpb24oZSl7VWEoZSkmJihlLnNtb290aCYmKGUudGFyZ2V0LnN0eWxlLnNjcm9sbEJlaGF2aW9yPSJhdXRvIiksZSgwKSl9KSxrdC5zbGljZSgwKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlZnJlc2goKX0pLGs9ITEsa3QuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLl9zdWJQaW5PZmZzZXQmJmUucGluKXt2YXIgdD1lLnZhcnMuaG9yaXpvbnRhbD8ib2Zmc2V0V2lkdGgiOiJvZmZzZXRIZWlnaHQiLHI9ZS5waW5bdF07ZS5yZXZlcnQoITAsMSksZS5hZGp1c3RQaW5TcGFjaW5nKGUucGluW3RdLXIpLGUucmVmcmVzaCgpfX0pLGV0PTEsJGIoITApLGt0LmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9UmEoZS5zY3JvbGxlcixlLl9kaXIpLHI9Im1heCI9PT1lLnZhcnMuZW5kfHxlLl9lbmRDbGFtcCYmZS5lbmQ+dCxuPWUuX3N0YXJ0Q2xhbXAmJmUuc3RhcnQ+PXQ7KHJ8fG4pJiZlLnNldFBvc2l0aW9ucyhuP3QtMTplLnN0YXJ0LHI\/TWF0aC5tYXgobj90OmUuc3RhcnQrMSx0KTplLmVuZCwhMCl9KSwkYighMSksZXQ9MCxyLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUucmVuZGVyJiZlLnJlbmRlcigtMSl9KSx6ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe1VhKGUpJiYoZS5zbW9vdGgmJnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3JldHVybiBlLnRhcmdldC5zdHlsZS5zY3JvbGxCZWhhdmlvcj0ic21vb3RoIn0pLGUucmVjJiZlKGUucmVjKSl9KSxVYihfLDEpLGMucGF1c2UoKSxDdCsrLFoocnQ9Miksa3QuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gVWEoZS52YXJzLm9uUmVmcmVzaCkmJmUudmFycy5vblJlZnJlc2goZSl9KSxydD1uZS5pc1JlZnJlc2hpbmc9ITEsVigicmVmcmVzaCIpfWVsc2UgeGIobmUsInNjcm9sbEVuZCIsUGIpfSxqPTAsRXQ9MSxaPWZ1bmN0aW9uIF91cGRhdGVBbGwoZSl7aWYoMj09PWV8fCFydCYmIWspe25lLmlzVXBkYXRpbmc9ITAsaXQmJml0LnVwZGF0ZSgwKTt2YXIgdD1rdC5sZW5ndGgscj1hdCgpLG49NTA8PXItRCxpPXQmJmt0WzBdLnNjcm9sbCgpO2lmKEV0PWk8aj8tMToxLHJ0fHwoaj1pKSxuJiYoc3QmJiFRZSYmMjAwPHItc3QmJihzdD0wLFYoInNjcm9sbEVuZCIpKSxWZT1ELEQ9ciksRXQ8MCl7Zm9yKGplPXQ7MDxqZS0tOylrdFtqZV0mJmt0W2plXS51cGRhdGUoMCxuKTtFdD0xfWVsc2UgZm9yKGplPTA7amU8dDtqZSsrKWt0W2plXSYma3RbamVdLnVwZGF0ZSgwLG4pO25lLmlzVXBkYXRpbmc9ITF9VD0wfSwkPVsibGVmdCIsInRvcCIsWSxJLG10K3Z0LG10K3B0LG10K2h0LG10K2d0LCJkaXNwbGF5IiwiZmxleFNocmluayIsImZsb2F0IiwiekluZGV4IiwiZ3JpZENvbHVtblN0YXJ0IiwiZ3JpZENvbHVtbkVuZCIsImdyaWRSb3dTdGFydCIsImdyaWRSb3dFbmQiLCJncmlkQXJlYSIsImp1c3RpZnlTZWxmIiwiYWxpZ25TZWxmIiwicGxhY2VTZWxmIiwib3JkZXIiXSxlZT0kLmNvbmNhdChbZnQsZHQsImJveFNpemluZyIsIm1heCIreXQsIm1heCIrSCwicG9zaXRpb24iLG10LGJ0LGJ0K2h0LGJ0K3B0LGJ0K3Z0LGJ0K2d0XSksdGU9LyhbQS1aXSkvZyxQdD1mdW5jdGlvbiBfc2V0U3RhdGUoZSl7aWYoZSl7dmFyIHQscixuPWUudC5zdHlsZSxpPWUubGVuZ3RoLG89MDtmb3IoKGUudC5fZ3NhcHx8TmUuY29yZS5nZXRDYWNoZShlLnQpKS51bmNhY2hlPTE7bzxpO28rPTIpcj1lW28rMV0sdD1lW29dLHI\/blt0XT1yOm5bdF0mJm4ucmVtb3ZlUHJvcGVydHkodC5yZXBsYWNlKHRlLCItJDEiKS50b0xvd2VyQ2FzZSgpKX19LE90PXtsZWZ0OjAsdG9wOjB9LHJlPS8od2Via2l0fG1venxsZW5ndGh8Y3NzVGV4dHxpbnNldCkvaSxuZT0oU2Nyb2xsVHJpZ2dlci5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbiBpbml0KFAsTyl7aWYodGhpcy5wcm9ncmVzcz10aGlzLnN0YXJ0PTAsdGhpcy52YXJzJiZ0aGlzLmtpbGwoITAsITApLGx0KXt2YXIgQSxuLHAsUixELEIsSSxZLEgscSxOLGUsWCxGLFUsVyxHLFYsdCxLLGIsUSxqLG0sWix5LCQseCxyLF8sdyxlZSxpLGcsdGUscmUsbmUsUyxvLGs9KFA9cGIoY3QoUCl8fFZhKFApfHxQLm5vZGVUeXBlP3t0cmlnZ2VyOlB9OlAsU3QpKS5vblVwZGF0ZSxUPVAudG9nZ2xlQ2xhc3MsYT1QLmlkLEM9UC5vblRvZ2dsZSxpZT1QLm9uUmVmcmVzaCxNPVAuc2NydWIsb2U9UC50cmlnZ2VyLGFlPVAucGluLHNlPVAucGluU3BhY2luZyxsZT1QLmludmFsaWRhdGVPblJlZnJlc2gsRT1QLmFudGljaXBhdGVQaW4scz1QLm9uU2NydWJDb21wbGV0ZSxoPVAub25TbmFwQ29tcGxldGUsY2U9UC5vbmNlLHVlPVAuc25hcCxmZT1QLnBpblJlcGFyZW50LGw9UC5waW5TcGFjZXIsZGU9UC5jb250YWluZXJBbmltYXRpb24scGU9UC5mYXN0U2Nyb2xsRW5kLGdlPVAucHJldmVudE92ZXJsYXBzLGhlPVAuaG9yaXpvbnRhbHx8UC5jb250YWluZXJBbmltYXRpb24mJiExIT09UC5ob3Jpem9udGFsP0hlOnFlLHZlPSFNJiYwIT09TSxiZT1KKFAuc2Nyb2xsZXJ8fFhlKSxjPU5lLmNvcmUuZ2V0Q2FjaGUoYmUpLG1lPU1hKGJlKSx5ZT0iZml4ZWQiPT09KCJwaW5UeXBlImluIFA\/UC5waW5UeXBlOnooYmUsInBpblR5cGUiKXx8bWUmJiJmaXhlZCIpLHhlPVtQLm9uRW50ZXIsUC5vbkxlYXZlLFAub25FbnRlckJhY2ssUC5vbkxlYXZlQmFja10sX2U9dmUmJlAudG9nZ2xlQWN0aW9ucy5zcGxpdCgiICIpLHdlPSJtYXJrZXJzImluIFA\/UC5tYXJrZXJzOlN0Lm1hcmtlcnMsU2U9bWU\/MDpwYXJzZUZsb2F0KG5iKGJlKVsiYm9yZGVyIitoZS5wMit5dF0pfHwwLGtlPXRoaXMsVGU9UC5vblJlZnJlc2hJbml0JiZmdW5jdGlvbigpe3JldHVybiBQLm9uUmVmcmVzaEluaXQoa2UpfSxDZT1mdW5jdGlvbiBfZ2V0U2l6ZUZ1bmMoZSx0LHIpe3ZhciBuPXIuZCxpPXIuZDIsbz1yLmE7cmV0dXJuKG89eihlLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiKSk\/ZnVuY3Rpb24oKXtyZXR1cm4gbygpW25dfTpmdW5jdGlvbigpe3JldHVybih0P05hKGkpOmVbImNsaWVudCIraV0pfHwwfX0oYmUsbWUsaGUpLE1lPWZ1bmN0aW9uIF9nZXRPZmZzZXRzRnVuYyhlLHQpe3JldHVybiF0fHx+WWUuaW5kZXhPZihlKT9PYShlKTpmdW5jdGlvbigpe3JldHVybiBPdH19KGJlLG1lKSxFZT0wLFBlPTAsT2U9MCxBZT1MKGJlLGhlKTtpZihrZS5fc3RhcnRDbGFtcD1rZS5fZW5kQ2xhbXA9ITEsa2UuX2Rpcj1oZSxFKj00NSxrZS5zY3JvbGxlcj1iZSxrZS5zY3JvbGw9ZGU\/ZGUudGltZS5iaW5kKGRlKTpBZSxSPUFlKCksa2UudmFycz1QLE89T3x8UC5hbmltYXRpb24sInJlZnJlc2hQcmlvcml0eSJpbiBQJiYoWmU9MSwtOTk5OT09PVAucmVmcmVzaFByaW9yaXR5JiYoaXQ9a2UpKSxjLnR3ZWVuU2Nyb2xsPWMudHdlZW5TY3JvbGx8fHt0b3A6c2MoYmUscWUpLGxlZnQ6c2MoYmUsSGUpfSxrZS50d2VlblRvPUE9Yy50d2VlblNjcm9sbFtoZS5wXSxrZS5zY3J1YkR1cmF0aW9uPWZ1bmN0aW9uKGUpeyhpPVZhKGUpJiZlKT9lZT9lZS5kdXJhdGlvbihlKTplZT1OZS50byhPLHtlYXNlOiJleHBvIix0b3RhbFByb2dyZXNzOiIrPTAiLGluaGVyaXQ6ITEsZHVyYXRpb246aSxwYXVzZWQ6ITAsb25Db21wbGV0ZTpmdW5jdGlvbiBvbkNvbXBsZXRlKCl7cmV0dXJuIHMmJnMoa2UpfX0pOihlZSYmZWUucHJvZ3Jlc3MoMSkua2lsbCgpLGVlPTApfSxPJiYoTy52YXJzLmxhenk9ITEsTy5faW5pdHRlZCYmIWtlLmlzUmV2ZXJ0ZWR8fCExIT09Ty52YXJzLmltbWVkaWF0ZVJlbmRlciYmITEhPT1QLmltbWVkaWF0ZVJlbmRlciYmTy5kdXJhdGlvbigpJiZPLnJlbmRlcigwLCEwLCEwKSxrZS5hbmltYXRpb249Ty5wYXVzZSgpLChPLnNjcm9sbFRyaWdnZXI9a2UpLnNjcnViRHVyYXRpb24oTSksXz0wLGE9YXx8Ty52YXJzLmlkKSx1ZSYmKFdhKHVlKSYmIXVlLnB1c2h8fCh1ZT17c25hcFRvOnVlfSksInNjcm9sbEJlaGF2aW9yImluIFdlLnN0eWxlJiZOZS5zZXQobWU\/W1dlLFVlXTpiZSx7c2Nyb2xsQmVoYXZpb3I6ImF1dG8ifSksemUuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gVWEoZSkmJmUudGFyZ2V0PT09KG1lP0ZlLnNjcm9sbGluZ0VsZW1lbnR8fFVlOmJlKSYmKGUuc21vb3RoPSExKX0pLHA9VWEodWUuc25hcFRvKT91ZS5zbmFwVG86ImxhYmVscyI9PT11ZS5zbmFwVG8\/ZnVuY3Rpb24gX2dldENsb3Nlc3RMYWJlbCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIE5lLnV0aWxzLnNuYXAoc2IodCksZSl9fShPKToibGFiZWxzRGlyZWN0aW9uYWwiPT09dWUuc25hcFRvP2Z1bmN0aW9uIF9nZXRMYWJlbEF0RGlyZWN0aW9uKHIpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiB1YihzYihyKSkoZSx0LmRpcmVjdGlvbil9fShPKTohMSE9PXVlLmRpcmVjdGlvbmFsP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIHViKHVlLnNuYXBUbykoZSxhdCgpLVBlPDUwMD8wOnQuZGlyZWN0aW9uKX06TmUudXRpbHMuc25hcCh1ZS5zbmFwVG8pLGc9dWUuZHVyYXRpb258fHttaW46LjEsbWF4OjJ9LGc9V2EoZyk\/R2UoZy5taW4sZy5tYXgpOkdlKGcsZyksdGU9TmUuZGVsYXllZENhbGwodWUuZGVsYXl8fGkvMnx8LjEsZnVuY3Rpb24oKXt2YXIgZT1BZSgpLHQ9YXQoKS1QZTw1MDAscj1BLnR3ZWVuO2lmKCEodHx8TWF0aC5hYnMoa2UuZ2V0VmVsb2NpdHkoKSk8MTApfHxyfHxRZXx8RWU9PT1lKWtlLmlzQWN0aXZlJiZFZSE9PWUmJnRlLnJlc3RhcnQoITApO2Vsc2V7dmFyIG4saSxvPShlLUIpL0YsYT1PJiYhdmU\/Ty50b3RhbFByb2dyZXNzKCk6byxzPXQ\/MDooYS13KS8oYXQoKS1WZSkqMWUzfHwwLGw9TmUudXRpbHMuY2xhbXAoLW8sMS1vLHV0KHMvMikqcy8uMTg1KSxjPW8rKCExPT09dWUuaW5lcnRpYT8wOmwpLHU9dWUub25TdGFydCxmPXVlLm9uSW50ZXJydXB0LGQ9dWUub25Db21wbGV0ZTtpZihuPXAoYyxrZSksVmEobil8fChuPWMpLGk9TWF0aC5tYXgoMCxNYXRoLnJvdW5kKEIrbipGKSksZTw9SSYmQjw9ZSYmaSE9PWUpe2lmKHImJiFyLl9pbml0dGVkJiZyLmRhdGE8PXV0KGktZSkpcmV0dXJuOyExPT09dWUuaW5lcnRpYSYmKGw9bi1vKSxBKGkse2R1cmF0aW9uOmcodXQoLjE4NSpNYXRoLm1heCh1dChjLWEpLHV0KG4tYSkpL3MvLjA1fHwwKSksZWFzZTp1ZS5lYXNlfHwicG93ZXIzIixkYXRhOnV0KGktZSksb25JbnRlcnJ1cHQ6ZnVuY3Rpb24gb25JbnRlcnJ1cHQoKXtyZXR1cm4gdGUucmVzdGFydCghMCkmJmYmJmYoa2UpfSxvbkNvbXBsZXRlOmZ1bmN0aW9uIG9uQ29tcGxldGUoKXtrZS51cGRhdGUoKSxFZT1BZSgpLE8mJiF2ZSYmKGVlP2VlLnJlc2V0VG8oInRvdGFsUHJvZ3Jlc3MiLG4sTy5fdFRpbWUvTy5fdER1cik6Ty5wcm9ncmVzcyhuKSksXz13PU8mJiF2ZT9PLnRvdGFsUHJvZ3Jlc3MoKTprZS5wcm9ncmVzcyxoJiZoKGtlKSxkJiZkKGtlKX19LGUsbCpGLGktZS1sKkYpLHUmJnUoa2UsQS50d2Vlbil9fX0pLnBhdXNlKCkpLGEmJihUdFthXT1rZSksbz0obz0ob2U9a2UudHJpZ2dlcj1KKG9lfHwhMCE9PWFlJiZhZSkpJiZvZS5fZ3NhcCYmb2UuX2dzYXAuc3RSZXZlcnQpJiZvKGtlKSxhZT0hMD09PWFlP29lOkooYWUpLGN0KFQpJiYoVD17dGFyZ2V0czpvZSxjbGFzc05hbWU6VH0pLGFlJiYoITE9PT1zZXx8c2U9PT1tdHx8KHNlPSEoIXNlJiZhZS5wYXJlbnROb2RlJiZhZS5wYXJlbnROb2RlLnN0eWxlJiYiZmxleCI9PT1uYihhZS5wYXJlbnROb2RlKS5kaXNwbGF5KSYmYnQpLGtlLnBpbj1hZSwobj1OZS5jb3JlLmdldENhY2hlKGFlKSkuc3BhY2VyP1U9bi5waW5TdGF0ZToobCYmKChsPUoobCkpJiYhbC5ub2RlVHlwZSYmKGw9bC5jdXJyZW50fHxsLm5hdGl2ZUVsZW1lbnQpLG4uc3BhY2VySXNOYXRpdmU9ISFsLGwmJihuLnNwYWNlclN0YXRlPWtjKGwpKSksbi5zcGFjZXI9Vj1sfHxGZS5jcmVhdGVFbGVtZW50KCJkaXYiKSxWLmNsYXNzTGlzdC5hZGQoInBpbi1zcGFjZXIiKSxhJiZWLmNsYXNzTGlzdC5hZGQoInBpbi1zcGFjZXItIithKSxuLnBpblN0YXRlPVU9a2MoYWUpKSwhMSE9PVAuZm9yY2UzRCYmTmUuc2V0KGFlLHtmb3JjZTNEOiEwfSksa2Uuc3BhY2VyPVY9bi5zcGFjZXIscj1uYihhZSksbT1yW3NlK2hlLm9zMl0sSz1OZS5nZXRQcm9wZXJ0eShhZSksYj1OZS5xdWlja1NldHRlcihhZSxoZS5hLHh0KSxoYyhhZSxWLHIpLEc9a2MoYWUpKSx3ZSl7ZT1XYSh3ZSk\/cGIod2Usd3QpOnd0LHE9RWIoInNjcm9sbGVyLXN0YXJ0IixhLGJlLGhlLGUsMCksTj1FYigic2Nyb2xsZXItZW5kIixhLGJlLGhlLGUsMCxxKSx0PXFbIm9mZnNldCIraGUub3AuZDJdO3ZhciB1PUooeihiZSwiY29udGVudCIpfHxiZSk7WT10aGlzLm1hcmtlclN0YXJ0PUViKCJzdGFydCIsYSx1LGhlLGUsdCwwLGRlKSxIPXRoaXMubWFya2VyRW5kPUViKCJlbmQiLGEsdSxoZSxlLHQsMCxkZSksZGUmJihTPU5lLnF1aWNrU2V0dGVyKFtZLEhdLGhlLmEseHQpKSx5ZXx8WWUubGVuZ3RoJiYhMD09PXooYmUsImZpeGVkTWFya2VycyIpfHwoZnVuY3Rpb24gX21ha2VQb3NpdGlvbmFibGUoZSl7dmFyIHQ9bmIoZSkucG9zaXRpb247ZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiPT09dHx8ImZpeGVkIj09PXQ\/dDoicmVsYXRpdmUifShtZT9XZTpiZSksTmUuc2V0KFtxLE5dLHtmb3JjZTNEOiEwfSkseT1OZS5xdWlja1NldHRlcihxLGhlLmEseHQpLHg9TmUucXVpY2tTZXR0ZXIoTixoZS5hLHh0KSl9aWYoZGUpe3ZhciBmPWRlLnZhcnMub25VcGRhdGUsZD1kZS52YXJzLm9uVXBkYXRlUGFyYW1zO2RlLmV2ZW50Q2FsbGJhY2soIm9uVXBkYXRlIixmdW5jdGlvbigpe2tlLnVwZGF0ZSgwLDAsMSksZiYmZi5hcHBseShkZSxkfHxbXSl9KX1pZihrZS5wcmV2aW91cz1mdW5jdGlvbigpe3JldHVybiBrdFtrdC5pbmRleE9mKGtlKS0xXX0sa2UubmV4dD1mdW5jdGlvbigpe3JldHVybiBrdFtrdC5pbmRleE9mKGtlKSsxXX0sa2UucmV2ZXJ0PWZ1bmN0aW9uKGUsdCl7aWYoIXQpcmV0dXJuIGtlLmtpbGwoITApO3ZhciByPSExIT09ZXx8IWtlLmVuYWJsZWQsbj1LZTtyIT09a2UuaXNSZXZlcnRlZCYmKHImJihyZT1NYXRoLm1heChBZSgpLGtlLnNjcm9sbC5yZWN8fDApLE9lPWtlLnByb2dyZXNzLG5lPU8mJk8ucHJvZ3Jlc3MoKSksWSYmW1ksSCxxLE5dLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3R5bGUuZGlzcGxheT1yPyJub25lIjoiYmxvY2sifSksciYmKEtlPWtlKS51cGRhdGUociksIWFlfHxmZSYma2UuaXNBY3RpdmV8fChyP2Z1bmN0aW9uIF9zd2FwUGluT3V0KGUsdCxyKXtQdChyKTt2YXIgbj1lLl9nc2FwO2lmKG4uc3BhY2VySXNOYXRpdmUpUHQobi5zcGFjZXJTdGF0ZSk7ZWxzZSBpZihlLl9nc2FwLnN3YXBwZWRJbil7dmFyIGk9dC5wYXJlbnROb2RlO2kmJihpLmluc2VydEJlZm9yZShlLHQpLGkucmVtb3ZlQ2hpbGQodCkpfWUuX2dzYXAuc3dhcHBlZEluPSExfShhZSxWLFUpOmhjKGFlLFYsbmIoYWUpLFopKSxyfHxrZS51cGRhdGUociksS2U9bixrZS5pc1JldmVydGVkPXIpfSxrZS5yZWZyZXNoPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKCFLZSYma2UuZW5hYmxlZHx8dClpZihhZSYmZSYmc3QpeGIoU2Nyb2xsVHJpZ2dlciwic2Nyb2xsRW5kIixQYik7ZWxzZXshcnQmJlRlJiZUZShrZSksS2U9a2UsQS50d2VlbiYmIXImJihBLnR3ZWVuLmtpbGwoKSxBLnR3ZWVuPTApLGVlJiZlZS5wYXVzZSgpLGxlJiZPJiYoTy5yZXZlcnQoe2tpbGw6ITF9KS5pbnZhbGlkYXRlKCksTy5nZXRDaGlsZHJlbiYmTy5nZXRDaGlsZHJlbighMCwhMCwhMSkuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZS52YXJzLmltbWVkaWF0ZVJlbmRlciYmZS5yZW5kZXIoMCwhMCwhMCl9KSksa2UuaXNSZXZlcnRlZHx8a2UucmV2ZXJ0KCEwLCEwKSxrZS5fc3ViUGluT2Zmc2V0PSExO3ZhciBpLG8sYSxzLGwsYyx1LGYsZCxwLGcsaCx2LGI9Q2UoKSxtPU1lKCkseT1kZT9kZS5kdXJhdGlvbigpOlJhKGJlLGhlKSx4PUY8PS4wMXx8IUYsXz0wLHc9bnx8MCxTPVdhKHIpP3IuZW5kOlAuZW5kLGs9UC5lbmRUcmlnZ2VyfHxvZSxUPVdhKHIpP3Iuc3RhcnQ6UC5zdGFydHx8KDAhPT1QLnN0YXJ0JiZvZT9hZT8iMCAwIjoiMCAxMDAlIjowKSxDPWtlLnBpbm5lZENvbnRhaW5lcj1QLnBpbm5lZENvbnRhaW5lciYmSihQLnBpbm5lZENvbnRhaW5lcixrZSksTT1vZSYmTWF0aC5tYXgoMCxrdC5pbmRleE9mKGtlKSl8fDAsRT1NO2Zvcih3ZSYmV2EocikmJihoPU5lLmdldFByb3BlcnR5KHEsaGUucCksdj1OZS5nZXRQcm9wZXJ0eShOLGhlLnApKTswPEUtLTspKGM9a3RbRV0pLmVuZHx8Yy5yZWZyZXNoKDAsMSl8fChLZT1rZSksISh1PWMucGluKXx8dSE9PW9lJiZ1IT09YWUmJnUhPT1DfHxjLmlzUmV2ZXJ0ZWR8fCgocD1wfHxbXSkudW5zaGlmdChjKSxjLnJldmVydCghMCwhMCkpLGMhPT1rdFtFXSYmKE0tLSxFLS0pO2ZvcihVYShUKSYmKFQ9VChrZSkpLFQ9RGEoVCwic3RhcnQiLGtlKSxCPW5jKFQsb2UsYixoZSxBZSgpLFkscSxrZSxtLFNlLHllLHksZGUsa2UuX3N0YXJ0Q2xhbXAmJiJfc3RhcnRDbGFtcCIpfHwoYWU\/LS4wMDE6MCksVWEoUykmJihTPVMoa2UpKSxjdChTKSYmIVMuaW5kZXhPZigiKz0iKSYmKH5TLmluZGV4T2YoIiAiKT9TPShjdChUKT9ULnNwbGl0KCIgIilbMF06IiIpK1M6KF89RGIoUy5zdWJzdHIoMiksYiksUz1jdChUKT9UOihkZT9OZS51dGlscy5tYXBSYW5nZSgwLGRlLmR1cmF0aW9uKCksZGUuc2Nyb2xsVHJpZ2dlci5zdGFydCxkZS5zY3JvbGxUcmlnZ2VyLmVuZCxCKTpCKStfLGs9b2UpKSxTPURhKFMsImVuZCIsa2UpLEk9TWF0aC5tYXgoQixuYyhTfHwoaz8iMTAwJSAwIjp5KSxrLGIsaGUsQWUoKStfLEgsTixrZSxtLFNlLHllLHksZGUsa2UuX2VuZENsYW1wJiYiX2VuZENsYW1wIikpfHwtLjAwMSxfPTAsRT1NO0UtLTspKHU9KGM9a3RbRV0pLnBpbikmJmMuc3RhcnQtYy5fcGluUHVzaDw9QiYmIWRlJiYwPGMuZW5kJiYoaT1jLmVuZC0oa2UuX3N0YXJ0Q2xhbXA\/TWF0aC5tYXgoMCxjLnN0YXJ0KTpjLnN0YXJ0KSwodT09PW9lJiZjLnN0YXJ0LWMuX3BpblB1c2g8Qnx8dT09PUMpJiZpc05hTihUKSYmKF8rPWkqKDEtYy5wcm9ncmVzcykpLHU9PT1hZSYmKHcrPWkpKTtpZihCKz1fLEkrPV8sa2UuX3N0YXJ0Q2xhbXAmJihrZS5fc3RhcnRDbGFtcCs9Xyksa2UuX2VuZENsYW1wJiYhcnQmJihrZS5fZW5kQ2xhbXA9SXx8LS4wMDEsST1NYXRoLm1pbihJLFJhKGJlLGhlKSkpLEY9SS1CfHwoQi09LjAxKSYmLjAwMSx4JiYoT2U9TmUudXRpbHMuY2xhbXAoMCwxLE5lLnV0aWxzLm5vcm1hbGl6ZShCLEkscmUpKSksa2UuX3BpblB1c2g9dyxZJiZfJiYoKGk9e30pW2hlLmFdPSIrPSIrXyxDJiYoaVtoZS5wXT0iLT0iK0FlKCkpLE5lLnNldChbWSxIXSxpKSksIWFlfHxldCYma2UuZW5kPj1SYShiZSxoZSkpe2lmKG9lJiZBZSgpJiYhZGUpZm9yKG89b2UucGFyZW50Tm9kZTtvJiZvIT09V2U7KW8uX3Bpbk9mZnNldCYmKEItPW8uX3Bpbk9mZnNldCxJLT1vLl9waW5PZmZzZXQpLG89by5wYXJlbnROb2RlfWVsc2UgaT1uYihhZSkscz1oZT09PXFlLGE9QWUoKSxRPXBhcnNlRmxvYXQoSyhoZS5hKSkrdywheSYmMTxJJiYoZz17c3R5bGU6Zz0obWU\/RmUuc2Nyb2xsaW5nRWxlbWVudHx8VWU6YmUpLnN0eWxlLHZhbHVlOmdbIm92ZXJmbG93IitoZS5hLnRvVXBwZXJDYXNlKCldfSxtZSYmInNjcm9sbCIhPT1uYihXZSlbIm92ZXJmbG93IitoZS5hLnRvVXBwZXJDYXNlKCldJiYoZy5zdHlsZVsib3ZlcmZsb3ciK2hlLmEudG9VcHBlckNhc2UoKV09InNjcm9sbCIpKSxoYyhhZSxWLGkpLEc9a2MoYWUpLG89X3QoYWUsITApLGY9eWUmJkwoYmUscz9IZTpxZSkoKSxzZT8oKFo9W3NlK2hlLm9zMixGK3creHRdKS50PVYsKEU9c2U9PT1idD9yYihhZSxoZSkrRit3OjApJiYoWi5wdXNoKGhlLmQsRSt4dCksImF1dG8iIT09Vi5zdHlsZS5mbGV4QmFzaXMmJihWLnN0eWxlLmZsZXhCYXNpcz1FK3h0KSksUHQoWiksQyYma3QuZm9yRWFjaChmdW5jdGlvbihlKXtlLnBpbj09PUMmJiExIT09ZS52YXJzLnBpblNwYWNpbmcmJihlLl9zdWJQaW5PZmZzZXQ9ITApfSkseWUmJkFlKHJlKSk6KEU9cmIoYWUsaGUpKSYmImF1dG8iIT09Vi5zdHlsZS5mbGV4QmFzaXMmJihWLnN0eWxlLmZsZXhCYXNpcz1FK3h0KSx5ZSYmKChsPXt0b3A6by50b3ArKHM\/YS1COmYpK3h0LGxlZnQ6by5sZWZ0KyhzP2Y6YS1CKSt4dCxib3hTaXppbmc6ImJvcmRlci1ib3giLHBvc2l0aW9uOiJmaXhlZCJ9KVtmdF09bC5tYXhXaWR0aD1NYXRoLmNlaWwoby53aWR0aCkreHQsbFtkdF09bC5tYXhIZWlnaHQ9TWF0aC5jZWlsKG8uaGVpZ2h0KSt4dCxsW210XT1sW210K2h0XT1sW210K3B0XT1sW210K3Z0XT1sW210K2d0XT0iMCIsbFtidF09aVtidF0sbFtidCtodF09aVtidCtodF0sbFtidCtwdF09aVtidCtwdF0sbFtidCt2dF09aVtidCt2dF0sbFtidCtndF09aVtidCtndF0sVz1mdW5jdGlvbiBfY29weVN0YXRlKGUsdCxyKXtmb3IodmFyIG4saT1bXSxvPWUubGVuZ3RoLGE9cj84OjA7YTxvO2ErPTIpbj1lW2FdLGkucHVzaChuLG4gaW4gdD90W25dOmVbYSsxXSk7cmV0dXJuIGkudD1lLnQsaX0oVSxsLGZlKSxydCYmQWUoMCkpLE8\/KGQ9Ty5faW5pdHRlZCwkZSgxKSxPLnJlbmRlcihPLmR1cmF0aW9uKCksITAsITApLGo9SyhoZS5hKS1RK0YrdywkPTE8TWF0aC5hYnMoRi1qKSx5ZSYmJCYmVy5zcGxpY2UoVy5sZW5ndGgtMiwyKSxPLnJlbmRlcigwLCEwLCEwKSxkfHxPLmludmFsaWRhdGUoITApLE8ucGFyZW50fHxPLnRvdGFsVGltZShPLnRvdGFsVGltZSgpKSwkZSgwKSk6aj1GLGcmJihnLnZhbHVlP2cuc3R5bGVbIm92ZXJmbG93IitoZS5hLnRvVXBwZXJDYXNlKCldPWcudmFsdWU6Zy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgib3ZlcmZsb3ctIitoZS5hKSk7cCYmcC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJldmVydCghMSwhMCl9KSxrZS5zdGFydD1CLGtlLmVuZD1JLFI9RD1ydD9yZTpBZSgpLGRlfHxydHx8KFI8cmUmJkFlKHJlKSxrZS5zY3JvbGwucmVjPTApLGtlLnJldmVydCghMSwhMCksUGU9YXQoKSx0ZSYmKEVlPS0xLHRlLnJlc3RhcnQoITApKSxLZT0wLE8mJnZlJiYoTy5faW5pdHRlZHx8bmUpJiZPLnByb2dyZXNzKCkhPT1uZSYmTy5wcm9ncmVzcyhuZXx8MCwhMCkucmVuZGVyKE8udGltZSgpLCEwLCEwKSwoeHx8T2UhPT1rZS5wcm9ncmVzc3x8ZGV8fGxlfHxPJiYhTy5faW5pdHRlZCkmJihPJiYhdmUmJihPLl9pbml0dGVkfHxPZXx8ITEhPT1PLnZhcnMuaW1tZWRpYXRlUmVuZGVyKSYmTy50b3RhbFByb2dyZXNzKGRlJiZCPC0uMDAxJiYhT2U\/TmUudXRpbHMubm9ybWFsaXplKEIsSSwwKTpPZSwhMCksa2UucHJvZ3Jlc3M9eHx8KFItQikvRj09PU9lPzA6T2UpLGFlJiZzZSYmKFYuX3Bpbk9mZnNldD1NYXRoLnJvdW5kKGtlLnByb2dyZXNzKmopKSxlZSYmZWUuaW52YWxpZGF0ZSgpLGlzTmFOKGgpfHwoaC09TmUuZ2V0UHJvcGVydHkocSxoZS5wKSx2LT1OZS5nZXRQcm9wZXJ0eShOLGhlLnApLHJjKHEsaGUsaCkscmMoWSxoZSxoLShufHwwKSkscmMoTixoZSx2KSxyYyhILGhlLHYtKG58fDApKSkseCYmIXJ0JiZrZS51cGRhdGUoKSwhaWV8fHJ0fHxYfHwoWD0hMCxpZShrZSksWD0hMSl9fSxrZS5nZXRWZWxvY2l0eT1mdW5jdGlvbigpe3JldHVybihBZSgpLUQpLyhhdCgpLVZlKSoxZTN8fDB9LGtlLmVuZEFuaW1hdGlvbj1mdW5jdGlvbigpe1hhKGtlLmNhbGxiYWNrQW5pbWF0aW9uKSxPJiYoZWU\/ZWUucHJvZ3Jlc3MoMSk6Ty5wYXVzZWQoKT92ZXx8WGEoTyxrZS5kaXJlY3Rpb248MCwxKTpYYShPLE8ucmV2ZXJzZWQoKSkpfSxrZS5sYWJlbFRvU2Nyb2xsPWZ1bmN0aW9uKGUpe3JldHVybiBPJiZPLmxhYmVscyYmKEJ8fGtlLnJlZnJlc2goKXx8QikrTy5sYWJlbHNbZV0vTy5kdXJhdGlvbigpKkZ8fDB9LGtlLmdldFRyYWlsaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPWt0LmluZGV4T2Yoa2UpLHI9MDxrZS5kaXJlY3Rpb24\/a3Quc2xpY2UoMCxlKS5yZXZlcnNlKCk6a3Quc2xpY2UoZSsxKTtyZXR1cm4oY3QodCk\/ci5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFycy5wcmV2ZW50T3ZlcmxhcHM9PT10fSk6cikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiAwPGtlLmRpcmVjdGlvbj9lLmVuZDw9QjplLnN0YXJ0Pj1JfSl9LGtlLnVwZGF0ZT1mdW5jdGlvbihlLHQscil7aWYoIWRlfHxyfHxlKXt2YXIgbixpLG8sYSxzLGwsYyx1PSEwPT09cnQ\/cmU6a2Uuc2Nyb2xsKCksZj1lPzA6KHUtQikvRixkPWY8MD8wOjE8Zj8xOmZ8fDAscD1rZS5wcm9ncmVzcztpZih0JiYoRD1SLFI9ZGU\/QWUoKTp1LHVlJiYodz1fLF89TyYmIXZlP08udG90YWxQcm9ncmVzcygpOmQpKSxFJiZhZSYmIUtlJiYhb3QmJnN0JiYoIWQmJkI8dSsodS1EKS8oYXQoKS1WZSkqRT9kPTFlLTQ6MT09PWQmJkk+dSsodS1EKS8oYXQoKS1WZSkqRSYmKGQ9Ljk5OTkpKSxkIT09cCYma2UuZW5hYmxlZCl7aWYoYT0ocz0obj1rZS5pc0FjdGl2ZT0hIWQmJmQ8MSkhPSghIXAmJnA8MSkpfHwhIWQhPSEhcCxrZS5kaXJlY3Rpb249cDxkPzE6LTEsa2UucHJvZ3Jlc3M9ZCxhJiYhS2UmJihpPWQmJiFwPzA6MT09PWQ\/MToxPT09cD8yOjMsdmUmJihvPSFzJiYibm9uZSIhPT1fZVtpKzFdJiZfZVtpKzFdfHxfZVtpXSxjPU8mJigiY29tcGxldGUiPT09b3x8InJlc2V0Ij09PW98fG8gaW4gTykpKSxnZSYmKHN8fGMpJiYoY3x8TXx8IU8pJiYoVWEoZ2UpP2dlKGtlKTprZS5nZXRUcmFpbGluZyhnZSkuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZS5lbmRBbmltYXRpb24oKX0pKSx2ZXx8KCFlZXx8S2V8fG90P08mJk8udG90YWxQcm9ncmVzcyhkLCEoIUtlfHwhUGUmJiFlKSk6KGVlLl9kcC5fdGltZS1lZS5fc3RhcnQhPT1lZS5fdGltZSYmZWUucmVuZGVyKGVlLl9kcC5fdGltZS1lZS5fc3RhcnQpLGVlLnJlc2V0VG8\/ZWUucmVzZXRUbygidG90YWxQcm9ncmVzcyIsZCxPLl90VGltZS9PLl90RHVyKTooZWUudmFycy50b3RhbFByb2dyZXNzPWQsZWUuaW52YWxpZGF0ZSgpLnJlc3RhcnQoKSkpKSxhZSlpZihlJiZzZSYmKFYuc3R5bGVbc2UraGUub3MyXT1tKSx5ZSl7aWYoYSl7aWYobD0hZSYmcDxkJiZ1PEkrMSYmdSsxPj1SYShiZSxoZSksZmUpaWYoZXx8IW4mJiFsKXBjKGFlLFYpO2Vsc2V7dmFyIGc9X3QoYWUsITApLGg9dS1CO3BjKGFlLFdlLGcudG9wKyhoZT09PXFlP2g6MCkreHQsZy5sZWZ0KyhoZT09PXFlPzA6aCkreHQpfVB0KG58fGw\/VzpHKSwkJiZkPDEmJm58fGIoUSsoMSE9PWR8fGw\/MDpqKSl9fWVsc2UgYihKYShRK2oqZCkpOyF1ZXx8QS50d2Vlbnx8S2V8fG90fHx0ZS5yZXN0YXJ0KCEwKSxUJiYoc3x8Y2UmJmQmJihkPDF8fCF0dCkpJiZKZShULnRhcmdldHMpLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NMaXN0W258fGNlPyJhZGQiOiJyZW1vdmUiXShULmNsYXNzTmFtZSl9KSwha3x8dmV8fGV8fGsoa2UpLGEmJiFLZT8odmUmJihjJiYoImNvbXBsZXRlIj09PW8\/Ty5wYXVzZSgpLnRvdGFsUHJvZ3Jlc3MoMSk6InJlc2V0Ij09PW8\/Ty5yZXN0YXJ0KCEwKS5wYXVzZSgpOiJyZXN0YXJ0Ij09PW8\/Ty5yZXN0YXJ0KCEwKTpPW29dKCkpLGsmJmsoa2UpKSwhcyYmdHR8fChDJiZzJiZZYShrZSxDKSx4ZVtpXSYmWWEoa2UseGVbaV0pLGNlJiYoMT09PWQ\/a2Uua2lsbCghMSwxKTp4ZVtpXT0wKSxzfHx4ZVtpPTE9PT1kPzE6M10mJllhKGtlLHhlW2ldKSkscGUmJiFuJiZNYXRoLmFicyhrZS5nZXRWZWxvY2l0eSgpKT4oVmEocGUpP3BlOjI1MDApJiYoWGEoa2UuY2FsbGJhY2tBbmltYXRpb24pLGVlP2VlLnByb2dyZXNzKDEpOlhhKE8sInJldmVyc2UiPT09bz8xOiFkLDEpKSk6dmUmJmsmJiFLZSYmayhrZSl9aWYoeCl7dmFyIHY9ZGU\/dS9kZS5kdXJhdGlvbigpKihkZS5fY2FTY3JvbGxEaXN0fHwwKTp1O3kodisocS5faXNGbGlwcGVkPzE6MCkpLHgodil9UyYmUygtdS9kZS5kdXJhdGlvbigpKihkZS5fY2FTY3JvbGxEaXN0fHwwKSl9fSxrZS5lbmFibGU9ZnVuY3Rpb24oZSx0KXtrZS5lbmFibGVkfHwoa2UuZW5hYmxlZD0hMCx4YihiZSwicmVzaXplIixNYiksbWV8fHhiKGJlLCJzY3JvbGwiLEtiKSxUZSYmeGIoU2Nyb2xsVHJpZ2dlciwicmVmcmVzaEluaXQiLFRlKSwhMSE9PWUmJihrZS5wcm9ncmVzcz1PZT0wLFI9RD1FZT1BZSgpKSwhMSE9PXQmJmtlLnJlZnJlc2goKSl9LGtlLmdldFR3ZWVuPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZBP0EudHdlZW46ZWV9LGtlLnNldFBvc2l0aW9ucz1mdW5jdGlvbihlLHQscixuKXtpZihkZSl7dmFyIGk9ZGUuc2Nyb2xsVHJpZ2dlcixvPWRlLmR1cmF0aW9uKCksYT1pLmVuZC1pLnN0YXJ0O2U9aS5zdGFydCthKmUvbyx0PWkuc3RhcnQrYSp0L299a2UucmVmcmVzaCghMSwhMSx7c3RhcnQ6RWEoZSxyJiYhIWtlLl9zdGFydENsYW1wKSxlbmQ6RWEodCxyJiYhIWtlLl9lbmRDbGFtcCl9LG4pLGtlLnVwZGF0ZSgpfSxrZS5hZGp1c3RQaW5TcGFjaW5nPWZ1bmN0aW9uKGUpe2lmKFomJmUpe3ZhciB0PVouaW5kZXhPZihoZS5kKSsxO1pbdF09cGFyc2VGbG9hdChaW3RdKStlK3h0LFpbMV09cGFyc2VGbG9hdChaWzFdKStlK3h0LFB0KFopfX0sa2UuZGlzYWJsZT1mdW5jdGlvbihlLHQpe2lmKGtlLmVuYWJsZWQmJighMSE9PWUmJmtlLnJldmVydCghMCwhMCksa2UuZW5hYmxlZD1rZS5pc0FjdGl2ZT0hMSx0fHxlZSYmZWUucGF1c2UoKSxyZT0wLG4mJihuLnVuY2FjaGU9MSksVGUmJnliKFNjcm9sbFRyaWdnZXIsInJlZnJlc2hJbml0IixUZSksdGUmJih0ZS5wYXVzZSgpLEEudHdlZW4mJkEudHdlZW4ua2lsbCgpJiYoQS50d2Vlbj0wKSksIW1lKSl7Zm9yKHZhciByPWt0Lmxlbmd0aDtyLS07KWlmKGt0W3JdLnNjcm9sbGVyPT09YmUmJmt0W3JdIT09a2UpcmV0dXJuO3liKGJlLCJyZXNpemUiLE1iKSxtZXx8eWIoYmUsInNjcm9sbCIsS2IpfX0sa2Uua2lsbD1mdW5jdGlvbihlLHQpe2tlLmRpc2FibGUoZSx0KSxlZSYmIXQmJmVlLmtpbGwoKSxhJiZkZWxldGUgVHRbYV07dmFyIHI9a3QuaW5kZXhPZihrZSk7MDw9ciYma3Quc3BsaWNlKHIsMSkscj09PWplJiYwPEV0JiZqZS0tLHI9MCxrdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNjcm9sbGVyPT09a2Uuc2Nyb2xsZXImJihyPTEpfSkscnx8cnR8fChrZS5zY3JvbGwucmVjPTApLE8mJihPLnNjcm9sbFRyaWdnZXI9bnVsbCxlJiZPLnJldmVydCh7a2lsbDohMX0pLHR8fE8ua2lsbCgpKSxZJiZbWSxILHEsTl0uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSl9KSxpdD09PWtlJiYoaXQ9MCksYWUmJihuJiYobi51bmNhY2hlPTEpLHI9MCxrdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnBpbj09PWFlJiZyKyt9KSxyfHwobi5zcGFjZXI9MCkpLFAub25LaWxsJiZQLm9uS2lsbChrZSl9LGt0LnB1c2goa2UpLGtlLmVuYWJsZSghMSwhMSksbyYmbyhrZSksTyYmTy5hZGQmJiFGKXt2YXIgdj1rZS51cGRhdGU7a2UudXBkYXRlPWZ1bmN0aW9uKCl7a2UudXBkYXRlPXYsemUuY2FjaGUrKyxCfHxJfHxrZS5yZWZyZXNoKCl9LE5lLmRlbGF5ZWRDYWxsKC4wMSxrZS51cGRhdGUpLEY9LjAxLEI9ST0wfWVsc2Uga2UucmVmcmVzaCgpO2FlJiZmdW5jdGlvbiBfcXVldWVSZWZyZXNoQWxsKCl7aWYobnQhPT1DdCl7dmFyIGU9bnQ9Q3Q7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7cmV0dXJuIGU9PT1DdCYmTXQoITApfSl9fSgpfWVsc2UgdGhpcy51cGRhdGU9dGhpcy5yZWZyZXNoPXRoaXMua2lsbD1JYX0sU2Nyb2xsVHJpZ2dlci5yZWdpc3Rlcj1mdW5jdGlvbiByZWdpc3RlcihlKXtyZXR1cm4gc3x8KE5lPWV8fExhKCksS2EoKSYmd2luZG93LmRvY3VtZW50JiZTY3JvbGxUcmlnZ2VyLmVuYWJsZSgpLHM9bHQpLHN9LFNjcm9sbFRyaWdnZXIuZGVmYXVsdHM9ZnVuY3Rpb24gZGVmYXVsdHMoZSl7aWYoZSlmb3IodmFyIHQgaW4gZSlTdFt0XT1lW3RdO3JldHVybiBTdH0sU2Nyb2xsVHJpZ2dlci5kaXNhYmxlPWZ1bmN0aW9uIGRpc2FibGUodCxyKXtsdD0wLGt0LmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGVbcj8ia2lsbCI6ImRpc2FibGUiXSh0KX0pLHliKFhlLCJ3aGVlbCIsS2IpLHliKEZlLCJzY3JvbGwiLEtiKSxjbGVhckludGVydmFsKHUpLHliKEZlLCJ0b3VjaGNhbmNlbCIsSWEpLHliKFdlLCJ0b3VjaHN0YXJ0IixJYSksd2IoeWIsRmUsInBvaW50ZXJkb3duLHRvdWNoc3RhcnQsbW91c2Vkb3duIixHYSksd2IoeWIsRmUsInBvaW50ZXJ1cCx0b3VjaGVuZCxtb3VzZXVwIixIYSksYy5raWxsKCksU2EoeWIpO2Zvcih2YXIgZT0wO2U8emUubGVuZ3RoO2UrPTMpemIoeWIsemVbZV0semVbZSsxXSksemIoeWIsemVbZV0semVbZSsyXSl9LFNjcm9sbFRyaWdnZXIuZW5hYmxlPWZ1bmN0aW9uIGVuYWJsZSgpe2lmKFhlPXdpbmRvdyxGZT1kb2N1bWVudCxVZT1GZS5kb2N1bWVudEVsZW1lbnQsV2U9RmUuYm9keSxOZSYmKEplPU5lLnV0aWxzLnRvQXJyYXksR2U9TmUudXRpbHMuY2xhbXAseD1OZS5jb3JlLmNvbnRleHR8fElhLCRlPU5lLmNvcmUuc3VwcHJlc3NPdmVyd3JpdGVzfHxJYSxfPVhlLmhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb258fCJhdXRvIixqPVhlLnBhZ2VZT2Zmc2V0fHwwLE5lLmNvcmUuZ2xvYmFscygiU2Nyb2xsVHJpZ2dlciIsU2Nyb2xsVHJpZ2dlciksV2UpKXtsdD0xLCh3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5zdHlsZS5oZWlnaHQ9IjEwMHZoIix3LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsWmIoKSxmdW5jdGlvbiBfcmFmQnVnRml4KCl7cmV0dXJuIGx0JiZyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3JhZkJ1Z0ZpeCl9KCksRS5yZWdpc3RlcihOZSksU2Nyb2xsVHJpZ2dlci5pc1RvdWNoPUUuaXNUb3VjaCxSPUUuaXNUb3VjaCYmLyhpUGFkfGlQaG9uZXxpUG9kfE1hYykvZy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLGI9MT09PUUuaXNUb3VjaCx4YihYZSwid2hlZWwiLEtiKSxsPVtYZSxGZSxVZSxXZV0sTmUubWF0Y2hNZWRpYT8oU2Nyb2xsVHJpZ2dlci5tYXRjaE1lZGlhPWZ1bmN0aW9uKGUpe3ZhciB0LHI9TmUubWF0Y2hNZWRpYSgpO2Zvcih0IGluIGUpci5hZGQodCxlW3RdKTtyZXR1cm4gcn0sTmUuYWRkRXZlbnRMaXN0ZW5lcigibWF0Y2hNZWRpYUluaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIFRiKCl9KSxOZS5hZGRFdmVudExpc3RlbmVyKCJtYXRjaE1lZGlhUmV2ZXJ0IixmdW5jdGlvbigpe3JldHVybiBTYigpfSksTmUuYWRkRXZlbnRMaXN0ZW5lcigibWF0Y2hNZWRpYSIsZnVuY3Rpb24oKXtNdCgwLDEpLFYoIm1hdGNoTWVkaWEiKX0pLE5lLm1hdGNoTWVkaWEoKS5hZGQoIihvcmllbnRhdGlvbjogcG9ydHJhaXQpIixmdW5jdGlvbigpe3JldHVybiBMYigpLExifSkpOmNvbnNvbGUud2FybigiUmVxdWlyZXMgR1NBUCAzLjExLjAgb3IgbGF0ZXIiKSxMYigpLHhiKEZlLCJzY3JvbGwiLEtiKTt2YXIgZSx0LHI9V2UuaGFzQXR0cmlidXRlKCJzdHlsZSIpLG49V2Uuc3R5bGUsaT1uLmJvcmRlclRvcFN0eWxlLG89TmUuY29yZS5BbmltYXRpb24ucHJvdG90eXBlO2ZvcihvLnJldmVydHx8T2JqZWN0LmRlZmluZVByb3BlcnR5KG8sInJldmVydCIse3ZhbHVlOmZ1bmN0aW9uIHZhbHVlKCl7cmV0dXJuIHRoaXMudGltZSgtLjAxLCEwKX19KSxuLmJvcmRlclRvcFN0eWxlPSJzb2xpZCIsZT1fdChXZSkscWUubT1NYXRoLnJvdW5kKGUudG9wK3FlLnNjKCkpfHwwLEhlLm09TWF0aC5yb3VuZChlLmxlZnQrSGUuc2MoKSl8fDAsaT9uLmJvcmRlclRvcFN0eWxlPWk6bi5yZW1vdmVQcm9wZXJ0eSgiYm9yZGVyLXRvcC1zdHlsZSIpLHJ8fChXZS5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiIiksV2UucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpKSx1PXNldEludGVydmFsKEpiLDI1MCksTmUuZGVsYXllZENhbGwoLjUsZnVuY3Rpb24oKXtyZXR1cm4gb3Q9MH0pLHhiKEZlLCJ0b3VjaGNhbmNlbCIsSWEpLHhiKFdlLCJ0b3VjaHN0YXJ0IixJYSksd2IoeGIsRmUsInBvaW50ZXJkb3duLHRvdWNoc3RhcnQsbW91c2Vkb3duIixHYSksd2IoeGIsRmUsInBvaW50ZXJ1cCx0b3VjaGVuZCxtb3VzZXVwIixIYSksZj1OZS51dGlscy5jaGVja1ByZWZpeCgidHJhbnNmb3JtIiksZWUucHVzaChmKSxzPWF0KCksYz1OZS5kZWxheWVkQ2FsbCguMixNdCkucGF1c2UoKSxnPVtGZSwidmlzaWJpbGl0eWNoYW5nZSIsZnVuY3Rpb24oKXt2YXIgZT1YZS5pbm5lcldpZHRoLHQ9WGUuaW5uZXJIZWlnaHQ7RmUuaGlkZGVuPyhkPWUscD10KTpkPT09ZSYmcD09PXR8fE1iKCl9LEZlLCJET01Db250ZW50TG9hZGVkIixNdCxYZSwibG9hZCIsTXQsWGUsInJlc2l6ZSIsTWJdLFNhKHhiKSxrdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVuYWJsZSgwLDEpfSksdD0wO3Q8emUubGVuZ3RoO3QrPTMpemIoeWIsemVbdF0semVbdCsxXSksemIoeWIsemVbdF0semVbdCsyXSl9fSxTY3JvbGxUcmlnZ2VyLmNvbmZpZz1mdW5jdGlvbiBjb25maWcoZSl7ImxpbWl0Q2FsbGJhY2tzImluIGUmJih0dD0hIWUubGltaXRDYWxsYmFja3MpO3ZhciB0PWUuc3luY0ludGVydmFsO3QmJmNsZWFySW50ZXJ2YWwodSl8fCh1PXQpJiZzZXRJbnRlcnZhbChKYix0KSwiaWdub3JlTW9iaWxlUmVzaXplImluIGUmJihiPTE9PT1TY3JvbGxUcmlnZ2VyLmlzVG91Y2gmJmUuaWdub3JlTW9iaWxlUmVzaXplKSwiYXV0b1JlZnJlc2hFdmVudHMiaW4gZSYmKFNhKHliKXx8U2EoeGIsZS5hdXRvUmVmcmVzaEV2ZW50c3x8Im5vbmUiKSxoPS0xPT09KGUuYXV0b1JlZnJlc2hFdmVudHMrIiIpLmluZGV4T2YoInJlc2l6ZSIpKX0sU2Nyb2xsVHJpZ2dlci5zY3JvbGxlclByb3h5PWZ1bmN0aW9uIHNjcm9sbGVyUHJveHkoZSx0KXt2YXIgcj1KKGUpLG49emUuaW5kZXhPZihyKSxpPU1hKHIpO35uJiZ6ZS5zcGxpY2UobixpPzY6MiksdCYmKGk\/WWUudW5zaGlmdChYZSx0LFdlLHQsVWUsdCk6WWUudW5zaGlmdChyLHQpKX0sU2Nyb2xsVHJpZ2dlci5jbGVhck1hdGNoTWVkaWE9ZnVuY3Rpb24gY2xlYXJNYXRjaE1lZGlhKHQpe2t0LmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUuX2N0eCYmZS5fY3R4LnF1ZXJ5PT09dCYmZS5fY3R4LmtpbGwoITAsITApfSl9LFNjcm9sbFRyaWdnZXIuaXNJblZpZXdwb3J0PWZ1bmN0aW9uIGlzSW5WaWV3cG9ydChlLHQscil7dmFyIG49KGN0KGUpP0ooZSk6ZSkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT1uW3I\/ZnQ6ZHRdKnR8fDA7cmV0dXJuIHI\/MDxuLnJpZ2h0LWkmJm4ubGVmdCtpPFhlLmlubmVyV2lkdGg6MDxuLmJvdHRvbS1pJiZuLnRvcCtpPFhlLmlubmVySGVpZ2h0fSxTY3JvbGxUcmlnZ2VyLnBvc2l0aW9uSW5WaWV3cG9ydD1mdW5jdGlvbiBwb3NpdGlvbkluVmlld3BvcnQoZSx0LHIpe2N0KGUpJiYoZT1KKGUpKTt2YXIgbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9bltyP2Z0OmR0XSxvPW51bGw9PXQ\/aS8yOnQgaW4gcT9xW3RdKmk6fnQuaW5kZXhPZigiJSIpP3BhcnNlRmxvYXQodCkqaS8xMDA6cGFyc2VGbG9hdCh0KXx8MDtyZXR1cm4gcj8obi5sZWZ0K28pL1hlLmlubmVyV2lkdGg6KG4udG9wK28pL1hlLmlubmVySGVpZ2h0fSxTY3JvbGxUcmlnZ2VyLmtpbGxBbGw9ZnVuY3Rpb24ga2lsbEFsbChlKXtpZihrdC5zbGljZSgwKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiJTY3JvbGxTbW9vdGhlciIhPT1lLnZhcnMuaWQmJmUua2lsbCgpfSksITAhPT1lKXt2YXIgdD1VLmtpbGxBbGx8fFtdO1U9e30sdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KX19LFNjcm9sbFRyaWdnZXIpO2Z1bmN0aW9uIFNjcm9sbFRyaWdnZXIoZSx0KXtzfHxTY3JvbGxUcmlnZ2VyLnJlZ2lzdGVyKE5lKXx8Y29uc29sZS53YXJuKCJQbGVhc2UgZ3NhcC5yZWdpc3RlclBsdWdpbihTY3JvbGxUcmlnZ2VyKSIpLHgodGhpcyksdGhpcy5pbml0KGUsdCl9bmUudmVyc2lvbj0iMy4xMy4wIixuZS5zYXZlU3R5bGVzPWZ1bmN0aW9uKGUpe3JldHVybiBlP0plKGUpLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZSYmZS5zdHlsZSl7dmFyIHQ9Sy5pbmRleE9mKGUpOzA8PXQmJksuc3BsaWNlKHQsNSksSy5wdXNoKGUsZS5zdHlsZS5jc3NUZXh0LGUuZ2V0QkJveCYmZS5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpLE5lLmNvcmUuZ2V0Q2FjaGUoZSkseCgpKX19KTpLfSxuZS5yZXZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVGIoIWUsdCl9LG5lLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgbmUoZSx0KX0sbmUucmVmcmVzaD1mdW5jdGlvbihlKXtyZXR1cm4gZT9NYighMCk6KHN8fG5lLnJlZ2lzdGVyKCkpJiZNdCghMCl9LG5lLnVwZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4rK3plLmNhY2hlJiZaKCEwPT09ZT8yOjApfSxuZS5jbGVhclNjcm9sbE1lbW9yeT1VYixuZS5tYXhTY3JvbGw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUmEoZSx0P0hlOnFlKX0sbmUuZ2V0U2Nyb2xsRnVuYz1mdW5jdGlvbihlLHQpe3JldHVybiBMKEooZSksdD9IZTpxZSl9LG5lLmdldEJ5SWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFR0W2VdfSxuZS5nZXRBbGw9ZnVuY3Rpb24oKXtyZXR1cm4ga3QuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJTY3JvbGxTbW9vdGhlciIhPT1lLnZhcnMuaWR9KX0sbmUuaXNTY3JvbGxpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hIXN0fSxuZS5zbmFwRGlyZWN0aW9uYWw9dWIsbmUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe3ZhciByPVVbZV18fChVW2VdPVtdKTt+ci5pbmRleE9mKHQpfHxyLnB1c2godCl9LG5lLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXt2YXIgcj1VW2VdLG49ciYmci5pbmRleE9mKHQpOzA8PW4mJnIuc3BsaWNlKG4sMSl9LG5lLmJhdGNoPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gSnAoZSx0KXt2YXIgcj1bXSxuPVtdLGk9TmUuZGVsYXllZENhbGwobyxmdW5jdGlvbigpe3QocixuKSxyPVtdLG49W119KS5wYXVzZSgpO3JldHVybiBmdW5jdGlvbihlKXtyLmxlbmd0aHx8aS5yZXN0YXJ0KCEwKSxyLnB1c2goZS50cmlnZ2VyKSxuLnB1c2goZSksYTw9ci5sZW5ndGgmJmkucHJvZ3Jlc3MoMSl9fXZhciByLG49W10saT17fSxvPXQuaW50ZXJ2YWx8fC4wMTYsYT10LmJhdGNoTWF4fHwxZTk7Zm9yKHIgaW4gdClpW3JdPSJvbiI9PT1yLnN1YnN0cigwLDIpJiZVYSh0W3JdKSYmIm9uUmVmcmVzaEluaXQiIT09cj9KcCgwLHRbcl0pOnRbcl07cmV0dXJuIFVhKGEpJiYoYT1hKCkseGIobmUsInJlZnJlc2giLGZ1bmN0aW9uKCl7cmV0dXJuIGE9dC5iYXRjaE1heCgpfSkpLEplKGUpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9e307Zm9yKHIgaW4gaSl0W3JdPWlbcl07dC50cmlnZ2VyPWUsbi5wdXNoKG5lLmNyZWF0ZSh0KSl9KSxufTtmdW5jdGlvbiB1YyhlLHQscixuKXtyZXR1cm4gbjx0P2Uobik6dDwwJiZlKDApLG48cj8obi10KS8oci10KTpyPDA\/dC8odC1yKToxfWZ1bmN0aW9uIHZjKGUsdCl7ITA9PT10P2Uuc3R5bGUucmVtb3ZlUHJvcGVydHkoInRvdWNoLWFjdGlvbiIpOmUuc3R5bGUudG91Y2hBY3Rpb249ITA9PT10PyJhdXRvIjp0PyJwYW4tIit0KyhFLmlzVG91Y2g\/IiBwaW5jaC16b29tIjoiIik6Im5vbmUiLGU9PT1VZSYmdmMoV2UsdCl9ZnVuY3Rpb24geGMoZSl7dmFyIHQscj1lLmV2ZW50LG49ZS50YXJnZXQsaT1lLmF4aXMsbz0oci5jaGFuZ2VkVG91Y2hlcz9yLmNoYW5nZWRUb3VjaGVzWzBdOnIpLnRhcmdldCxhPW8uX2dzYXB8fE5lLmNvcmUuZ2V0Q2FjaGUobykscz1hdCgpO2lmKCFhLl9pc1Njcm9sbFR8fDJlMzxzLWEuX2lzU2Nyb2xsVCl7Zm9yKDtvJiZvIT09V2UmJihvLnNjcm9sbEhlaWdodDw9by5jbGllbnRIZWlnaHQmJm8uc2Nyb2xsV2lkdGg8PW8uY2xpZW50V2lkdGh8fCFvZVsodD1uYihvKSkub3ZlcmZsb3dZXSYmIW9lW3Qub3ZlcmZsb3dYXSk7KW89by5wYXJlbnROb2RlO2EuX2lzU2Nyb2xsPW8mJm8hPT1uJiYhTWEobykmJihvZVsodD1uYihvKSkub3ZlcmZsb3dZXXx8b2VbdC5vdmVyZmxvd1hdKSxhLl9pc1Njcm9sbFQ9c30hYS5faXNTY3JvbGwmJiJ4IiE9PWl8fChyLnN0b3BQcm9wYWdhdGlvbigpLHIuX2dzYXBBbGxvdz0hMCl9ZnVuY3Rpb24geWMoZSx0LHIsbil7cmV0dXJuIEUuY3JlYXRlKHt0YXJnZXQ6ZSxjYXB0dXJlOiEwLGRlYm91bmNlOiExLGxvY2tBeGlzOiEwLHR5cGU6dCxvbldoZWVsOm49biYmeGMsb25QcmVzczpuLG9uRHJhZzpuLG9uU2Nyb2xsOm4sb25FbmFibGU6ZnVuY3Rpb24gb25FbmFibGUoKXtyZXR1cm4gciYmeGIoRmUsRS5ldmVudFR5cGVzWzBdLHNlLCExLCEwKX0sb25EaXNhYmxlOmZ1bmN0aW9uIG9uRGlzYWJsZSgpe3JldHVybiB5YihGZSxFLmV2ZW50VHlwZXNbMF0sc2UsITApfX0pfWZ1bmN0aW9uIENjKGUpe2Z1bmN0aW9uIEdxKCl7cmV0dXJuIGk9ITF9ZnVuY3Rpb24gSnEoKXtvPVJhKHAscWUpLFQ9R2UoUj8xOjAsbyksZiYmKGs9R2UoMCxSYShwLEhlKSkpLGw9Q3R9ZnVuY3Rpb24gS3EoKXt2Ll9nc2FwLnk9SmEocGFyc2VGbG9hdCh2Ll9nc2FwLnkpK2Iub2Zmc2V0KSsicHgiLHYuc3R5bGUudHJhbnNmb3JtPSJtYXRyaXgzZCgxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAiK3BhcnNlRmxvYXQodi5fZ3NhcC55KSsiLCAwLCAxKSIsYi5vZmZzZXQ9Yi5jYWNoZUlEPTB9ZnVuY3Rpb24gUXEoKXtKcSgpLGEuaXNBY3RpdmUoKSYmYS52YXJzLnNjcm9sbFk+byYmKGIoKT5vP2EucHJvZ3Jlc3MoMSkmJmIobyk6YS5yZXNldFRvKCJzY3JvbGxZIixvKSl9V2EoZSl8fChlPXt9KSxlLnByZXZlbnREZWZhdWx0PWUuaXNOb3JtYWxpemVyPWUuYWxsb3dDbGlja3M9ITAsZS50eXBlfHwoZS50eXBlPSJ3aGVlbCx0b3VjaCIpLGUuZGVib3VuY2U9ISFlLmRlYm91bmNlLGUuaWQ9ZS5pZHx8Im5vcm1hbGl6ZXIiO3ZhciBuLG8sbCxpLGEsYyx1LHMsZj1lLm5vcm1hbGl6ZVNjcm9sbFgsdD1lLm1vbWVudHVtLHI9ZS5hbGxvd05lc3RlZFNjcm9sbCxkPWUub25SZWxlYXNlLHA9SihlLnRhcmdldCl8fFVlLGc9TmUuY29yZS5nbG9iYWxzKCkuU2Nyb2xsU21vb3RoZXIsaD1nJiZnLmdldCgpLHY9UiYmKGUuY29udGVudCYmSihlLmNvbnRlbnQpfHxoJiYhMSE9PWUuY29udGVudCYmIWguc21vb3RoKCkmJmguY29udGVudCgpKSxiPUwocCxxZSksbT1MKHAsSGUpLHk9MSx4PShFLmlzVG91Y2gmJlhlLnZpc3VhbFZpZXdwb3J0P1hlLnZpc3VhbFZpZXdwb3J0LnNjYWxlKlhlLnZpc3VhbFZpZXdwb3J0LndpZHRoOlhlLm91dGVyV2lkdGgpL1hlLmlubmVyV2lkdGgsXz0wLHc9VWEodCk\/ZnVuY3Rpb24oKXtyZXR1cm4gdChuKX06ZnVuY3Rpb24oKXtyZXR1cm4gdHx8Mi44fSxTPXljKHAsZS50eXBlLCEwLHIpLGs9SWEsVD1JYTtyZXR1cm4gdiYmTmUuc2V0KHYse3k6Iis9MCJ9KSxlLmlnbm9yZUNoZWNrPWZ1bmN0aW9uKGUpe3JldHVybiBSJiYidG91Y2htb3ZlIj09PWUudHlwZSYmZnVuY3Rpb24gaWdub3JlRHJhZygpe2lmKGkpe3JlcXVlc3RBbmltYXRpb25GcmFtZShHcSk7dmFyIGU9SmEobi5kZWx0YVkvMiksdD1UKGIudi1lKTtpZih2JiZ0IT09Yi52K2Iub2Zmc2V0KXtiLm9mZnNldD10LWIudjt2YXIgcj1KYSgocGFyc2VGbG9hdCh2JiZ2Ll9nc2FwLnkpfHwwKS1iLm9mZnNldCk7di5zdHlsZS50cmFuc2Zvcm09Im1hdHJpeDNkKDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsICIrcisiLCAwLCAxKSIsdi5fZ3NhcC55PXIrInB4IixiLmNhY2hlSUQ9emUuY2FjaGUsWigpfXJldHVybiEwfWIub2Zmc2V0JiZLcSgpLGk9ITB9KCl8fDEuMDU8eSYmInRvdWNoc3RhcnQiIT09ZS50eXBlfHxuLmlzR2VzdHVyaW5nfHxlLnRvdWNoZXMmJjE8ZS50b3VjaGVzLmxlbmd0aH0sZS5vblByZXNzPWZ1bmN0aW9uKCl7aT0hMTt2YXIgZT15O3k9SmEoKFhlLnZpc3VhbFZpZXdwb3J0JiZYZS52aXN1YWxWaWV3cG9ydC5zY2FsZXx8MSkveCksYS5wYXVzZSgpLGUhPT15JiZ2YyhwLDEuMDE8eXx8IWYmJiJ4IiksYz1tKCksdT1iKCksSnEoKSxsPUN0fSxlLm9uUmVsZWFzZT1lLm9uR2VzdHVyZVN0YXJ0PWZ1bmN0aW9uKGUsdCl7aWYoYi5vZmZzZXQmJktxKCksdCl7emUuY2FjaGUrKzt2YXIgcixuLGk9dygpO2YmJihuPShyPW0oKSkrLjA1KmkqLWUudmVsb2NpdHlYLy4yMjcsaSo9dWMobSxyLG4sUmEocCxIZSkpLGEudmFycy5zY3JvbGxYPWsobikpLG49KHI9YigpKSsuMDUqaSotZS52ZWxvY2l0eVkvLjIyNyxpKj11YyhiLHIsbixSYShwLHFlKSksYS52YXJzLnNjcm9sbFk9VChuKSxhLmludmFsaWRhdGUoKS5kdXJhdGlvbihpKS5wbGF5KC4wMSksKFImJmEudmFycy5zY3JvbGxZPj1vfHxvLTE8PXIpJiZOZS50byh7fSx7b25VcGRhdGU6UXEsZHVyYXRpb246aX0pfWVsc2Ugcy5yZXN0YXJ0KCEwKTtkJiZkKGUpfSxlLm9uV2hlZWw9ZnVuY3Rpb24oKXthLl90cyYmYS5wYXVzZSgpLDFlMzxhdCgpLV8mJihsPTAsXz1hdCgpKX0sZS5vbkNoYW5nZT1mdW5jdGlvbihlLHQscixuLGkpe2lmKEN0IT09bCYmSnEoKSx0JiZmJiZtKGsoblsyXT09PXQ\/YysoZS5zdGFydFgtZS54KTptKCkrdC1uWzFdKSkscil7Yi5vZmZzZXQmJktxKCk7dmFyIG89aVsyXT09PXIsYT1vP3UrZS5zdGFydFktZS55OmIoKStyLWlbMV0scz1UKGEpO28mJmEhPT1zJiYodSs9cy1hKSxiKHMpfShyfHx0KSYmWigpfSxlLm9uRW5hYmxlPWZ1bmN0aW9uKCl7dmMocCwhZiYmIngiKSxuZS5hZGRFdmVudExpc3RlbmVyKCJyZWZyZXNoIixRcSkseGIoWGUsInJlc2l6ZSIsUXEpLGIuc21vb3RoJiYoYi50YXJnZXQuc3R5bGUuc2Nyb2xsQmVoYXZpb3I9ImF1dG8iLGIuc21vb3RoPW0uc21vb3RoPSExKSxTLmVuYWJsZSgpfSxlLm9uRGlzYWJsZT1mdW5jdGlvbigpe3ZjKHAsITApLHliKFhlLCJyZXNpemUiLFFxKSxuZS5yZW1vdmVFdmVudExpc3RlbmVyKCJyZWZyZXNoIixRcSksUy5raWxsKCl9LGUubG9ja0F4aXM9ITEhPT1lLmxvY2tBeGlzLCgobj1uZXcgRShlKSkuaU9TPVIpJiYhYigpJiZiKDEpLFImJk5lLnRpY2tlci5hZGQoSWEpLHM9bi5fZGMsYT1OZS50byhuLHtlYXNlOiJwb3dlcjQiLHBhdXNlZDohMCxpbmhlcml0OiExLHNjcm9sbFg6Zj8iKz0wLjEiOiIrPTAiLHNjcm9sbFk6Iis9MC4xIixtb2RpZmllcnM6e3Njcm9sbFk6cWMoYixiKCksZnVuY3Rpb24oKXtyZXR1cm4gYS5wYXVzZSgpfSl9LG9uVXBkYXRlOlosb25Db21wbGV0ZTpzLnZhcnMub25Db21wbGV0ZX0pLG59dmFyIGllLG9lPXthdXRvOjEsc2Nyb2xsOjF9LGFlPS8oaW5wdXR8bGFiZWx8c2VsZWN0fHRleHRhcmVhKS9pLHNlPWZ1bmN0aW9uIF9jYXB0dXJlSW5wdXRzKGUpe3ZhciB0PWFlLnRlc3QoZS50YXJnZXQudGFnTmFtZSk7KHR8fGllKSYmKGUuX2dzYXBBbGxvdz0hMCxpZT10KX07bmUuc29ydD1mdW5jdGlvbihlKXtpZihVYShlKSlyZXR1cm4ga3Quc29ydChlKTt2YXIgdD1YZS5wYWdlWU9mZnNldHx8MDtyZXR1cm4gbmUuZ2V0QWxsKCkuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZS5fc29ydFk9ZS50cmlnZ2VyP3QrZS50cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDplLnN0YXJ0K1hlLmlubmVySGVpZ2h0fSksa3Quc29ydChlfHxmdW5jdGlvbihlLHQpe3JldHVybi0xZTYqKGUudmFycy5yZWZyZXNoUHJpb3JpdHl8fDApKyhlLnZhcnMuY29udGFpbmVyQW5pbWF0aW9uPzFlNjplLl9zb3J0WSktKCh0LnZhcnMuY29udGFpbmVyQW5pbWF0aW9uPzFlNjp0Ll9zb3J0WSkrLTFlNioodC52YXJzLnJlZnJlc2hQcmlvcml0eXx8MCkpfSl9LG5lLm9ic2VydmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBFKGUpfSxuZS5ub3JtYWxpemVTY3JvbGw9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSlyZXR1cm4gdjtpZighMD09PWUmJnYpcmV0dXJuIHYuZW5hYmxlKCk7aWYoITE9PT1lKXJldHVybiB2JiZ2LmtpbGwoKSx2b2lkKHY9ZSk7dmFyIHQ9ZSBpbnN0YW5jZW9mIEU\/ZTpDYyhlKTtyZXR1cm4gdiYmdi50YXJnZXQ9PT10LnRhcmdldCYmdi5raWxsKCksTWEodC50YXJnZXQpJiYodj10KSx0fSxuZS5jb3JlPXtfZ2V0VmVsb2NpdHlQcm9wOk0sX2lucHV0T2JzZXJ2ZXI6eWMsX3Njcm9sbGVyczp6ZSxfcHJveGllczpZZSxicmlkZ2U6e3NzOmZ1bmN0aW9uIHNzKCl7c3R8fFYoInNjcm9sbFN0YXJ0Iiksc3Q9YXQoKX0scmVmOmZ1bmN0aW9uIHJlZigpe3JldHVybiBLZX19fSxMYSgpJiZOZS5yZWdpc3RlclBsdWdpbihuZSksZS5TY3JvbGxUcmlnZ2VyPW5lLGUuZGVmYXVsdD1uZTtpZiAodHlwZW9mKHdpbmRvdyk9PT0idW5kZWZpbmVkInx8d2luZG93IT09ZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSBlbHNlIHtkZWxldGUgZS5kZWZhdWx0fX0pOwoK');r('CihmdW5jdGlvbigpewogIHZhciByZWR1Y2UgPSBtYXRjaE1lZGlhKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKScpLm1hdGNoZXM7CiAgLyogMjAyNi0wOS0yOSDlsI\/ohbjjgIzmu77ovKrmu5HkuIvljrvotoXntJrljaHjgI3vvJrpppbpoIHlgZznlKjpoIHpppblhazlkYrliJfnmoQgRWxlbWVudG9y44CM5o2y5YuV5pmC6IOM5pmv6YCP5piO5bqm44CN5pWI5p6c77yI56+E5ZyN5pW06aCB44CB5q+P5o2y5LiA5LiL6YO96KaB566X5L2N572u77yM6YC854CP6Ka95Zmo5pW06aCB6YeN566X77yJ44CCCiAgICAg6KaB5ZyoIEVsZW1lbnRvciDllZ\/li5XliY3mioroqK3lrprmi7\/mjokg77yMIOacrOeoi+W8j+WcqOmggemdouiugOWIsOaZgueri+WIu+Wft+ihjO+8jOavlCBFbGVtZW50b3Ig5pep44CC5YW25LuW6aCB54Wn6IiK77yb5YWs5ZGK5YiX54Wn5qij6buP5Zyo6aCC56uv44CCICovCiAgKGZ1bmN0aW9uKCl7IHZhciBlbHM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtc2V0dGluZ3MqPSJtb3Rpb25fZngiXScpOyBmb3IodmFyIGk9MDtpPGVscy5sZW5ndGg7aSsrKXsgdHJ5eyB2YXIgc3Q9SlNPTi5wYXJzZShlbHNbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLXNldHRpbmdzJykpOyBPYmplY3Qua2V5cyhzdCkuZm9yRWFjaChmdW5jdGlvbihrKXsgaWYoay5pbmRleE9mKCdtb3Rpb25fZngnKSE9PS0xKSBkZWxldGUgc3Rba107IH0pOyBlbHNbaV0uc2V0QXR0cmlidXRlKCdkYXRhLXNldHRpbmdzJywgSlNPTi5zdHJpbmdpZnkoc3QpKTsgfWNhdGNoKHgpe30gfSB9KSgpOwogIChmdW5jdGlvbigpeyB2YXIgdGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvcGJhcicpLCB4PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3BiYXJYJyk7IGlmKCF0Ynx8IXgpIHJldHVybjsKICAgIHRyeXsgaWYobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2tnX3RiX29mZicpPT09JzEnKSB0Yi5jbGFzc0xpc3QuYWRkKCdvZmYnKTsgfWNhdGNoKGUpe30KICAgIHguYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKCl7IHRiLmNsYXNzTGlzdC5hZGQoJ29mZicpOyB0cnl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2tnX3RiX29mZicsJzEnKTt9Y2F0Y2goZSl7fSBpZih3aW5kb3cuU2Nyb2xsVHJpZ2dlcikgU2Nyb2xsVHJpZ2dlci5yZWZyZXNoKCk7IH0pOyB9KSgpOwoKICAvKiDwn5S0IOmmlumggeeahOOAjOS4gOmNtemgmOWPluOAjeW9iOeql+W7tuW+jOePvui6q++8iDIwMjYtMDktMjUg5bCP6IW45ZCM5oSP77yJCiAgICAg5b2I56qX5piv57ay56uZ5YWo56uZ6Kit5a6a77yI6YCy56uZIDE1IOenkuaIlua7kem8oOimgemboumWi+aZgui3s+WHuu+8ie+8jOWcqOmmlumggeacg+ato+WlveiTi+S9j+iomOaGtuaoueOAggogICAgIOWPquWcqOmmlumggeWkmuS4gOWxpOaOp+WItu+8jOWFqOermeioreWumuWujOWFqOS4jeWLle+8mgogICAgICAgwrcg6Kiq5a6i5b6A5LiL5o2y6YGO44CM5LiJ5YCL5aSn6IWm44CN5Y2A5aGKIOKGkiDnj77ouqvvvIgyMDI2LTA5LTI3IOWwj+iFuOWQjOaEj++8muWOn+acrOaNsumBjuiomOaGtuaoueWwsei3s++8jOWJm+WlveiTi+S9j+Wkp+iFpuWNgOWhiu+8m+aykuacieWkp+iFpuWNgOWhiuaZgumAgOWbnueci+iomOaGtuaoue+8iQogICAgICAgwrcg5ruR6byg5b6A5LiK56e75Ye66KaW56qX77yI6KaB6Zui6ZaL5LqG77yJ4oaSIOeri+WIu+ePvui6q++8jOmAmeaYr+eVmeWQjeWWruacgOWlveeahOaZguapnwogICAgICAgwrcg5pyA5pmaIDQwIOenkuS4gOWumuePvui6qwogICAgIOiXj+i1t+S+hueahOaoo+W8j+WcqCBXb3JkUHJlc3Mg5bu6572u5pmC5Yqg77yIYm9keSDmspLmnIkga2ctcG9wdXAtb2sg5pmC5YWI6YCP5piO77yJ77yb5pys5qmf54mI5rKS5pyJ5b2I56qX77yM6YCZ5q615LiN5b2x6Z+\/44CCCiAgICAg5pS+5Zyo5pyA5YmN6Z2i77ya5bCx566X5LiL6Z2i5YuV55Wr5Zug54K644CM5rib5bCR5YuV5oWL44CN5o+Q5pep57WQ5p2f77yM5b2I56qX5Lmf54Wn5qij5pyD54++6Lqr44CCICovCiAgKGZ1bmN0aW9uKCl7CiAgICB2YXIgdHJlZVNlYz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna2diJyl8fGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0cmVlJyksIGRvbmU9ZmFsc2U7CiAgICBmdW5jdGlvbiBvaygpeyBpZihkb25lKSByZXR1cm47IGRvbmU9dHJ1ZTsgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdrZy1wb3B1cC1vaycpOyByZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLGNoayk7IH0KICAgIGZ1bmN0aW9uIGNoaygpeyBpZighdHJlZVNlYyB8fCB0cmVlU2VjLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSA8IGlubmVySGVpZ2h0KjAuNikgb2soKTsgfSAgIC8vIOW\/g+aZuuWclumVt+WlveOAgemWi+Wni+W+gOS4iuaNsui1sOaZggogICAgYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJyxjaGsse3Bhc3NpdmU6dHJ1ZX0pOyBjaGsoKTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JyxmdW5jdGlvbihlKXsgaWYoIWUucmVsYXRlZFRhcmdldCAmJiBlLmNsaWVudFk8PTApIG9rKCk7IH0pOwogICAgc2V0VGltZW91dChvayw0MDAwMCk7CiAgfSkoKTsKCiAgLyog4pSA4pSAIOmWi+WgtOiDjOaZr+iQveiRie+8muWwj+iFuCBIZXB0YWJhc2Ug6KOh55qE55yf5a+m5Y2h54mH5qiZ6aGM77yIQ0xJIOWvpuaSiO+8jOW3sumBjua\/vuengeS6ui\/lhafpg6jlhaflrrnvvInilIDilIAKICAgICAyMDI2LTA5LTI1IOWwj+iFuO+8muOAjOS4gOmWi+Wni+eahOWNoeeJh+WPr+S7peabtOWkmuS4gOm7nu+8jOW3puWPs+mDveimgeacieOAjeKGkiDlv4PmmbrlnJYgMTQg5by15LmL5aSW77yM5YaN5Yqg6YCZIDEyIOW8te+8jOWPquWcqOmWi+WgtOmjhOOAgeS4gOaNsuWLleWwsea3oeWHuuOAggogICAgIPCflLQg5Y+q5oyR44CM55So5Yiw55qE5a2X5aSn5aSa5bey57aT5Zyo57ay6aCB5LiK44CN55qE5qiZ6aGM77yaanVzdGZvbnQg5Zub5YiG57OW5LiA6aCB5a+m5risIDc0NCDlrZfmnInntabjgIE3NDkg5a2X5pW06aCB6KKr5ouS77yMCiAgICAgICAg6aaW6aCB5Y6f5pys57SEIDY3MiDlrZfvvIzpgJkgMTIg5by15Y+q5aSa57SEIDIyIOWtl+OAguimgeaPm+aomemhjOWJjeWFiOmHj+Wtl+aVuO+8iOaWueazleimiyDkuIrnt5rntIDpjIQubWTvvInjgIIgKi8KICB2YXIgQU1CSUVOVCA9IFsKICAgIC8qIOaomemhjO+9nOWFp+aWh++8iEhlcHRhYmFzZSDlvI\/vvIkgKi8KICAgICLnrKzkuIDlpKfohabvvZzlrrnph4\/mnInpmZDjgIHmnIPlv5jjgIHntK\/lsLHnlbbmqZ8iLAogICAgIuesrOS6jOWkp+iFpu+9nOWvq+mAsuWOu++8jOmChOaYr+imgeiHquW3seWbnuWOu+e\/uyIsCiAgICAi56ys5LiJ5aSn6IWm772c5L2g5a+r6YCy5Y6777yMQUkg6Ieq5YuV6K6A44CB5pW055CG44CB5Zue5oeJIiwKICAgICLmjZXmjYnvvZzlhYjmipPkvY\/vvIzliKXorpPpnYjmhJ\/mupzotbAiLAogICAgIumBjua\/vu+9nOWFqOmDqOmDveaYr+mHjem7nu+8neaykuaciemHjem7niIsCiAgICAi6L2J6K2v5Yqb772c55So6Ieq5bex55qE6Kmx5YaN6Kqq5LiA5qyhIiwKICAgICLlrprkvY3nva7vvZzorpPnn6XorZjoh6rlt7HplbflnKjkuIDotbciLAogICAgIuW8leaTju+9nOW+nuWNoeeJh+WIsOS9nOWTgSIsCiAgICAiQUkg5ZOh5bel772c5L2g55W26ICB6ZeG77yM5a6D5bmr5L2g5YGa5LqLIiwKICAgICLlsIjmoYjoqJjmhrbvvZzotornlKjotorogbDmmI7vvIzkuI3lvp7pm7bplovlp4siLAogICAgLyog5LiA5Y+l6KmxICovCiAgICAi5oOzIOKGkiDlrZgg4oaSIOWBmu+8jOS4gOWll+acg+mVt+Wkp+eahOezu+e1sSIsCiAgICAi5pS26JePIDgwMCDnr4fvvIzkuIDnr4fmspLoroDlrowiLAogICAgIuethuiomOWvq+mBjuWwseWGjeS5n+aykuaJk+mWiyIsCiAgICAi56ys5LiJ5aSn6IWm5LiN5piv5paw5bel5YW377yM5pivIEFJIOiugOW+l+aHgueahOesrOS6jOWkp+iFpiIsCiAgICAi5YWI56qE5YaN5a+s55qE5pS257SN5Y6f5YmHIiwKICAgICLkuIDnrYbos4fmlpnvvIzmnInjgIzlvojlpJrouqvku73jgI0iLAogICAgIuW+nuaUtuiXj+eZlu+8jOWIsOefpeitmOWKoOW3pSIsCiAgICAi55m85L2I5YmN77yM5YWI5qqi5p+l6Zax6K6A57WQ5qeLIiwKICAgICLot58gQUkg6IGK5a6M5bCx5pWj5LqGIiwKICAgICLkuInlgIsgQXBwIOWQhOWtmOS4gOS7veW+hei+piIsCiAgICAvKiDlub7lgIvlrZcgKi8KICAgICLmg7PlvpfmuIXmpZoiLCLlrZjlvpfmvILkuq4iLCLnlKjlvpfliLDkvY0iLCJTIOaqoue0ouWKmyIsIkgg5oeC6YeN6bueIiwiQSDovYnora\/lipsiLCJQIOWumuS9jee9riIsIkUg5byV5pOOIiwi55+l6K2Y6KSH5YipIiwi56ys5LqM5aSn6IWmIiwi56ys5LiJ5aSn6IWmIiwi6KiY5oa25qi5IiwiQUkg55W25ZOh5belIiwi6Z2I5oSfIiwi5pS26JeP55mWIiwi5qiZ57Gk5Zyw542EIiwi5paw6LOH5paZ5aS+ICgzKSIsIuWNiuWknOaDs+WIsCIsIuaXqeS4iuW\/mOS6hiIsIueZveadvyAzLDAwMCDljaEiLAogICAgLyog5LiA5YCL5a2XICovCiAgICAi5oOzIiwi5a2YIiwi5YGaIiwi6K6AIiwi5pW0Iiwi6YCjIiwi5b+YIiwi5LqCIiwi5om+Iiwi5a+rIiwi5ZWPIiwi6KiYIiwi6YG4Iiwi5LifIiwi6ZW3Iiwi55SoIgogIF07CiAgLyog4pWQ4pWQIOiomOaGtuaoue+8muiQveiRie+8iOaVo+S6gu+8ieKGkiDmjbLli5XogZrmlI8g4oaSIOaoueaenSDihpIg5qi55bm577yI5b+D5pm65ZyW77yJ4pWQ4pWQCiAgICAg5ZCM5LiA5om55Y2h54mH77yM5o2y5YuV5pmC5b6e6Zqo5qmf5pWj6JC96IGa5pSP5Yiw44CM5LiJ6aGG5aSn6IWm44CN5b+D5pm65ZyW55qE57WQ5qeL5L2N572uICovCiAgdmFyIFNBTEVTPSdodHRwczovL2JyYWluMTIzLmtub3dsZWRnZWd1dC5jb20vJzsKICB2YXIgVFJFRT1bICAgLyogMjAyNi0wOS0yOSDlsI\/ohbjvvJrpgJnljYDvvJ3jgIzmiJHlj6\/ku6XmgI7purzluavkvaDvvJ\/jgI3vvIjlj4PogIPnk6bln7rvvInjgILkuInlvLXlpKfohabljaHvvJ3kuInmiYfploDvvJrmqJnpoYzpgKPoqrLnqIvnsKHku4vvvIjpirfllK7poIHvvInjgIHljaHlupXkuIDpoYbos7zosrfpiJXnm7TpgZTnp5Lnq5nvvJvokYnlrZDvvJ3lkITljIXmlZnku4DpurzihpLluavkvaDlgZrliLDku4DpurzvvIzmlofmoYjlj5boh6rnp5Lnq5nllYblk4HpoIHvvIgyMDgz77yPMjA4Nu+8jzIwODfvvIkgKi8KICAgIHtpZDoncm9vdCcscm9sZToncm9vdCcsdHg6MjEsdHk6NTIsdDon5LiJ5YCL5aSn6IWm5LiA6LW36aSKJyx0YWc6J+aDsyDihpIg5a2YIOKGkiDlgZonLHBpYzonaHR0cHM6Ly9rbm93bGVkZ2VndXQuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA5L2tnd2ViLWxvZ28tYWktYnJhaW4tdXBncmFkZS0zMjEud2VicCcscGljVzozNjAscGljSDoyMjUsaW50cm86U0FMRVMrJyM6fjp0ZXh0PScrZW5jb2RlVVJJQ29tcG9uZW50KCfoqrLnqIvlnLDlnJYnKSxidXk6J+aVtOWMheaWueahiCDihpInLGhyZWY6J2h0dHBzOi8va25vd2xlZGdlZ3V0LmNvbS9icmFpbi0xMjMnfSwKICAgIHtpZDonYjEnLHA6J3Jvb3QnLHJvbGU6J2JyYW5jaCcsdHg6NDUsdHk6MjUsdDon56ys5LiA5aSn6IWmJyxzdWI6J+WOn+eUn+Wkp+iFpicsdGFnOifmg7PlvpfmuIXmpZonLHBpYzonaHR0cHM6Ly9rbm93bGVkZ2VndXQuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA5L2tnd2ViLWJyYWluLWIxLndlYnAnLGludHJvOlNBTEVTKycjOn46dGV4dD0nK2VuY29kZVVSSUNvbXBvbmVudCgn56ys5LiA5aSn6IWm77ya6JyC5ZCOJyksYnV5Oic4LDg4OCDos7zosrcg4oaSJyxocmVmOidodHRwczovL2tub3dsZWRnZWd1dC5jb20vYnJhaW4tMSd9LAogICAge2lkOidiMicscDoncm9vdCcscm9sZTonYnJhbmNoJyx0eDo0NSx0eTo1Mix0OifnrKzkuozlpKfohaYnLHN1Yjon55+l6K2Y5bqrJyx0YWc6J+WtmOW+l+a8guS6ricscGljOidodHRwczovL2tub3dsZWRnZWd1dC5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDkva2d3ZWItYnJhaW4tYjItdjIud2VicCcsaW50cm86U0FMRVMrJyM6fjp0ZXh0PScrZW5jb2RlVVJJQ29tcG9uZW50KCfnrKzkuozlpKfohabvvJronILlt6InKSxidXk6JzgsODg4IOizvOiytyDihpInLGhyZWY6J2h0dHBzOi8va25vd2xlZGdlZ3V0LmNvbS9icmFpbi0yJ30sCiAgICB7aWQ6J2IzJyxwOidyb290Jyxyb2xlOidicmFuY2gnLHR4OjQ1LHR5OjgwLHQ6J+esrOS4ieWkp+iFpicsc3ViOidBSSDlpKfohaYnLHRhZzon55So5b6X5Yiw5L2NJyxwaWM6J2h0dHBzOi8va25vd2xlZGdlZ3V0LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wOS9rZ3dlYi1icmFpbi1iMy1jaHJvbWUtd2F2ZS53ZWJwJyxpbnRybzpTQUxFUysnIzp+OnRleHQ9JytlbmNvZGVVUklDb21wb25lbnQoJ+esrOS4ieWkp+iFpu+8muW3peicgicpLGJ1eTonOCw4ODgg6LO86LK3IOKGkicsaHJlZjonaHR0cHM6Ly9rbm93bGVkZ2VndXQuY29tL2JyYWluLTMnfSwKICAgIC8qIOesrOS4gOWkp+iFpu+8iOaAnee2reiIh+Wkp+iFpumWi+eZvO+8ie+8muaVmeaAnee2remPiO+8jOW5q+S9oOeci+a4healmuiHquW3seaAjum6vOaDsyAqLwogICAge2lkOidsMScscDonYjEnLHJvbGU6J2xlYWYnLG1zOifmgJ3ntq3pj4gnLHR4OjcwLHR5OjIwLHQ6J+aAnee2remPiO+8mueci+a4healmuiHquW3seaAjum6vOaDsyd9LAogICAge2lkOidsMicscDonYjEnLHJvbGU6J2xlYWYnLG1zOiflhYjmg7PmuIXmpZrlho3li5XmiYsnLHR4OjcwLHR5OjMzLHQ6J+WFiOaDs+a4healmu+8jOWGjeWLleaJiyd9LAogICAge2lkOidsMycscDonYjEnLHJvbGU6J2xlYWYnLG1zOifnnIvmh4LljaHlnKjlk6onLHR4Ojg2LHR5OjI0LHQ6J+eci+aHguiHquW3seWNoeWcqOWTqid9LAogICAge2lkOidsMTEnLHA6J2IxJyxyb2xlOidsZWFmJyxtczon5b+16aCt5pS25paC5oiQ5Yik5pa3Jyx0eDo4Nix0eTozNix3OjIyNix0OifmlaPokL3nmoTlv7XpoK3vvIzmlLbmloLmiJDog73nlKjnmoTliKTmlrcnfSwKICAgIC8qIOesrOS6jOWkp+iFpu+8iOaVuOS9jeefpeitmOeuoeeQhu+8ie+8mlNIQVBFIOS6lOatpe+8jOS6lOainee3miAqLwogICAge2lkOidsNCcscDonYjInLHJvbGU6J2xlYWYnLG1zOidTIOaQnOWwiycsY2xzOidzaGFwZScsdHg6NzAsdHk6NDAsdzoyNDAsdDonUyDmkJzlsIvvvJrmioros4foqIrmipPpgLLkvobvvIzkuI3lho3lm6TokZfmspLnnIsnfSwKICAgIHtpZDonbDUnLHA6J2IyJyxyb2xlOidsZWFmJyxtczonSCDph43pu54nLGNsczonc2hhcGUnLHR4OjcwLHR5OjQ2LHc6MjQwLHQ6J0gg6YeN6bue77ya5oqT5Ye655yf5q2j6YeN6KaB55qE6YKj5bm+5Y+lJ30sCiAgICB7aWQ6J2wxMicscDonYjInLHJvbGU6J2xlYWYnLG1zOidBIOi9ieitrycsY2xzOidzaGFwZScsdHg6NzAsdHk6NTIsdzoyNDAsdDonQSDovYnora\/vvJrmiorliKXkurrnmoToqbHorormiJDoh6rlt7HnmoToqbEnfSwKICAgIHtpZDonbDEzJyxwOidiMicscm9sZTonbGVhZicsbXM6J1Ag5L2N572uJyxjbHM6J3NoYXBlJyx0eDo4Nix0eTo0OCx3OjIxMCx0OidQIOS9jee9ru+8muaUvuWwjeWcsOaWue+8jOacquS+huaJvuW+l+WIsCd9LAogICAge2lkOidsMTQnLHA6J2IyJyxyb2xlOidsZWFmJyxtczonRSDlvJXmk44nLGNsczonc2hhcGUnLHR4Ojg2LHR5OjU2LHc6MjEwLHQ6J0Ug5byV5pOO77ya6K6T56ys5LqM5aSn6IWm5bmr5L2g55Si5Ye6J30sCiAgICAvKiDnrKzkuInlpKfohabvvIhBSSBBZ2VudOODu+aQrSBBSSDlnJjpmorvvInvvJrpgJrorZjihpLlr6bkvZzvvIzlrbjlrozorpMgQUkg5Zu65a6a5pu\/5L2g5YGa5LqLICovCiAgICB7aWQ6J2w4JyxwOidiMycscm9sZTonbGVhZicsdHg6NzAsdHk6NzUsdDonQUkg5ZOh5belJyxsb2dvczoxfSwKICAgIHtpZDonbDknLHA6J2IzJyxyb2xlOidsZWFmJyxtczonQUkg5a+m5L2cJyx0eDo3MCx0eTo5MSx3OjI0MCx0OidBSSDlr6bkvZzvvJrmkK3lh7rlpKnlpKnnlKjnmoQgU2tpbGwg5bel5L2c5rWBJ30sCiAgICB7aWQ6J2wxMCcscDonYjMnLHJvbGU6J2xlYWYnLG1zOidBSSDpgJrorZgnLHR4Ojg2LHR5Ojc4LHc6MjI2LHQ6J0FJIOmAmuitmO+8muiDveW5q+S9oOWIsOWTquOAgeeVjOe3muWcqOWTqid9LAogICAge2lkOidsMTUnLHA6J2IzJyxyb2xlOidsZWFmJyxtczon5a245a6M5bCx6IO955SoJyx0eDo4Nix0eTo5MCx3OjIxMCx0OiflrbjlrozppqzkuIrvvJrorpMgQUkg5Zu65a6a5pu\/5L2g5YGa5LqLJ30gICAvKiDmnIDlj7PmrIQgODbihpI4M++8muWPs+mCiueVmeeZveiuk+e1pueLlyAqLwogIF07CiAgdmFyIGhvc3Q9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhcmRIb3N0Jyk7CiAgW2hvc3QsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYXkwJyksIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYXknKSwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JyYW5jaExpbmtzJyldLmZvckVhY2goZnVuY3Rpb24oZWwpeyBpZihlbCl7IGVsLnNldEF0dHJpYnV0ZSgndHJhbnNsYXRlJywnbm8nKTsgZWwuY2xhc3NMaXN0LmFkZCgnbm90cmFuc2xhdGUnKTsgfSB9KTsgICAvKiAyMDI2LTA5LTI5IOaViOiDve+8muayiea1uOW8j+e\/u+itr+etieaTtOWFheWKn+iDvei3s+mBjumAmeS6m+S4gOebtOWcqOWLleeahOijnemjvuWNgCAqLwogIHZhciBzdGFnZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RhZ2UnKTsKICB2YXIgYnJhbmNoTGlua3M9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JyYW5jaExpbmtzJyk7CiAgdmFyIGJlYW1Tdmc9YnJhbmNoTGlua3M\/IChicmFuY2hMaW5rcy5wYXVzZUFuaW1hdGlvbnM\/IGJyYW5jaExpbmtzIDogYnJhbmNoTGlua3Mub3duZXJTVkdFbGVtZW50KSA6IG51bGwsIGJlYW1XYW50PWZhbHNlLCBiZWFtT249bnVsbCwgc3RhZ2VTZWVuPXRydWU7CiAgZnVuY3Rpb24gc3luY0JlYW1zKCl7IHZhciBvbj1iZWFtV2FudCYmc3RhZ2VTZWVuOyBpZihvbj09PWJlYW1Pbnx8IWJlYW1TdmcpIHJldHVybjsgYmVhbU9uPW9uOyB0cnl7IGJlYW1Tdmdbb24\/J3VucGF1c2VBbmltYXRpb25zJzoncGF1c2VBbmltYXRpb25zJ10oKTsgfWNhdGNoKGUpe30gfSAgIC8qIDIwMjYtMDktMjkg5pWI6IO977ya5YWJ6bue5YuV55Wr5Y+q5Zyo55yL5b6X5Yiw5pmC6LeRICovCiAgaWYoc3RhZ2UgJiYgJ0ludGVyc2VjdGlvbk9ic2VydmVyJyBpbiB3aW5kb3cpeyBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oZXMpeyBzdGFnZVNlZW49ZXNbMF0uaXNJbnRlcnNlY3Rpbmc7IHN5bmNCZWFtcygpOyB9KS5vYnNlcnZlKHN0YWdlKTsgfQogIHZhciBjb3B5MT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29weTEnKSwgY29weTI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvcHkyJyk7CiAgdmFyIHRyZWVGaWc9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RyZWVGaWcnKSwgdHJlZUZpZzI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RyZWVGaWcyJyksIHRyZWVIaW50PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0cmVlSGludCcpLCBkaXp6eT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl6enknKSwgc2F5PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYXknKSwgc2F5MD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2F5MCcpOwogIHZhciB0eXBlVDA9cGVyZm9ybWFuY2Uubm93KCk7CiAgZnVuY3Rpb24gcGxhY2VTYXkwKGZ4LGZ3LGZzLG1vYil7IGlmKCFzYXkwfHwhdHJlZUZpZykgcmV0dXJuOyBpZihmeD09PXVuZGVmaW5lZCl7IGZ4PTA7IGZ3PU1DLmZ3OyBmcz0xOyBtb2I9aXNNb2JpbGVUcmVlKCk7IH0gdmFyIGZoMT1NQy5maDsKICAgIGlmKG1vYil7IHNheTAuY2xhc3NMaXN0LmFkZCgndG9wJyk7IHNheTAuc3R5bGUuc2V0UHJvcGVydHkoJy0tZngnLChmeCtmdypmcyowLjEwKS50b0ZpeGVkKDEpKydweCcpOyBzYXkwLnN0eWxlLmJvdHRvbT0oZmgxKmZzKzEwKSsncHgnOyB9IGVsc2UgeyBzYXkwLnN0eWxlLnNldFByb3BlcnR5KCctLWZ4JywoZngrZncqZnMqMC41MitNQy5zYXkwVy8yKS50b0ZpeGVkKDEpKydweCcpOyBzYXkwLnN0eWxlLmJvdHRvbT0oZmgxKmZzKjAuODYpKydweCc7IH0gc2F5MC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1mcycsJzEnKTsgfQogIGZ1bmN0aW9uIHR5cGVUbyhlbCxrKXsgaWYoIWVsKSByZXR1cm47IHZhciB0PWVsLnF1ZXJ5U2VsZWN0b3IoJy50eHQnKSwgY2hhcnM9QXJyYXkuZnJvbSh0LmdldEF0dHJpYnV0ZSgnZGF0YS10ZXh0JykpLCBuPU1hdGgucm91bmQoY2hhcnMubGVuZ3RoKmNsYW1wKGssMCwxKSksIG91dD1jaGFycy5zbGljZSgwLG4pLmpvaW4oJycpOyBpZih0LnRleHRDb250ZW50IT09b3V0KSB0LnRleHRDb250ZW50PW91dDsgZWwuY2xhc3NMaXN0LnRvZ2dsZSgnZG9uZScsIG4+PWNoYXJzLmxlbmd0aCk7IH0gICAvKiAyMDI2LTA5LTI577ya5L6d44CM5a2X44CN5YiH5LiN5YiH5aOeIGVtb2pp77yI8J+SmyDmmK8gc3Vycm9nYXRlIHBhaXLvvIkqLyAgIC8vIOaJk+Wtl+apn++8mmsgMOKGkjEg6aGv56S65YmNIE4g5YCL5a2XCiAgdmFyIExPR089eyJjbGF1ZGUiOiAibTQuNzE0NCAxNS45NTU1IDQuNzE3NC0yLjY0NzEuMDc5LS4yMzA3LS4wNzktLjEyNzVoLS4yMzA3bC0uNzg5My0uMDQ4Ni0yLjY5NTYtLjA3MjktMi4zMzc1LS4wOTcxLTIuMjY0Ni0uMTIxNC0uNTcwNy0uMTIxNS0uNTM0My0uNzA0Mi4wNTQ2LS4zNTIyLjQ3OTctLjMyMTguNjg2LjA2MDggMS41MTc5LjEwMzIgMi4yNzY3LjE1NzggMS42NTE0LjA5NzIgMi40NDY4LjI1NWguMzg4NmwuMDU0Ni0uMTU3OS0uMTMzNi0uMDk3MS0uMTAzMi0uMDk3Mkw2Ljk3MyA5LjgzNTZsLTIuNTUtMS42ODc5LTEuMzM1Ni0uOTcxNC0uNzIyNS0uNDkxOC0uMzY0My0uNDYxNC0uMTU3OC0xLjAwNzguNjU1Ny0uNzIyNS44ODAzLjA2MDcuMjI0Ni4wNjA3Ljg5MjUuNjg2IDEuOTA2NCAxLjQ3NTQgMi40ODkzIDEuODMzNi4zNjQzLjMwMzUuMTQ1Ny0uMTAzMi4wMTgyLS4wNzI4LS4xNjQtLjI3MzMtMS4zNTM5LTIuNDQ2Ny0xLjQ0NS0yLjQ4OTMtLjY0MzUtMS4wMzItLjE3LS42MTk0Yy0uMDYwNy0uMjU1LS4xMDMyLS40Njc0LS4xMDMyLS43Mjg1TDYuMjg3LjEzMzUgNi42OTk3IDBsLjk5NTcuMTMzNi40MTkuMzY0Mi42MTkyIDEuNDE0NyAxLjAwMTggMi4yMjgyIDEuNTU0MyAzLjAyOTYuNDU1My44OTg1LjI0MjkuODMxOC4wOTEuMjU1aC4xNTc5di0uMTQ1N2wuMTI3NS0xLjcwNi4yMzY4LTIuMDk0Ny4yMzA3LTIuNjk1Ny4wNzg5LS43NTg5LjM3NjQtLjkxMDcuNzQ2OC0uNDkxOC41ODI4LjI3OTMuNDc5Ny42ODYtLjA2NjguNDQzMy0uMjg1MyAxLjg1MTctLjU1ODYgMi45MDIxLS4zNjQzIDEuOTQyOWguMjEyNWwuMjQyOS0uMjQyOS45ODM1LTEuMzA1MyAxLjY1MTQtMi4wNjQzLjcyODYtLjgxOTYuODUtLjkwNDYuNTQ2NC0uNDMxMWgxLjAzMjFsLjc1OSAxLjEyOTMtLjM0IDEuMTY1Ny0xLjA2MjUgMS4zNDc4LS44ODA0IDEuMTQxNC0xLjI2MjggMS43LS43ODkzIDEuMzYuMDcyOS4xMDkzLjE4ODItLjAxODMgMi44NTM1LS42MDcgMS41NDIxLS4yNzk0IDEuODM5Ni0uMzE1Ny44MzE4LjM4ODYuMDkxLjM5NDYtLjMyNzguODA3NS0xLjk2Ny40ODU3LTIuMzA3Mi40NjE0LTMuNDM2NC44MTM2LS4wNDI1LjAzMDQuMDQ4Ni4wNjA3IDEuNTQ4Mi4xNDU3LjY2MTguMDM2NGgxLjYyMWwzLjAxNzUuMjI0Ny43ODkyLjUyMi40NzM2LjYzNzYtLjA3OS40ODU3LTEuMjE0Mi42MTkzLTEuNjM5My0uMzg4Ni0zLjgyNS0uOTEwNy0xLjMxMTMtLjMyNzloLS4xODIydi4xMDkzbDEuMDkyOSAxLjA2ODYgMi4wMDM1IDEuODA5MiAyLjUwNzUgMi4zMzE0LjEyNzUuNTc2OC0uMzIxOC40NTU0LS4zNC0uMDQ4Ni0yLjIwMzktMS42NTc1LS44NS0uNzQ2OC0xLjkyNDYtMS42MjFoLS4xMjc1di4xN2wuNDQzMi42NDk2IDIuMzQzNiAzLjUyMTQuMTIxNCAxLjA4MDctLjE3LjM1MjEtLjYwNzEuMjEyNS0uNjY3OS0uMTIxNC0xLjM3MjEtMS45MjQ2TDE0LjM4IDE3Ljk1OWwtMS4xNDE0LTEuOTQyOC0uMTM5Ny4wNzktLjY3NCA3LjI1NTItLjMxNTYuMzcwMy0uNzI4Ni4yNzkzLS42MDcxLS40NjE0LS4zMjE4LS43NDY4LjMyMTgtMS40NzUzLjM4ODYtMS45MjQ2LjMxNTctMS41My4yODUzLTEuOTAwNC4xNy0uNjMxNC0uMDEyMS0uMDQyNS0uMTM5Ny4wMTgyLTEuNDMyOCAxLjk2NzItMi4xNzk2IDIuOTQ0Ni0xLjcyNDMgMS44NDU2LS40MTI4LjE2NC0uNzE2NC0uMzcwNC4wNjY3LS42NjE4LjQwMDgtLjU4ODkgMi4zODYtMy4wMzU3IDEuNDM4OS0xLjg4Mi45MjktMS4wODY4LS4wMDYyLS4xNTc5aC0uMDU0NmwtNi4zMzg1IDQuMTE2NC0xLjEyOTMuMTQ1Ny0uNDg1Ny0uNDU1NC4wNjA4LS43NDY3LjIzMDctLjI0MjkgMS45MDY0LTEuMzExNFoiLCAib3BlbmFpIjogIk0yMi4yODE5IDkuODIxMWE1Ljk4NDcgNS45ODQ3IDAgMCAwLS41MTU3LTQuOTEwOCA2LjA0NjIgNi4wNDYyIDAgMCAwLTYuNTA5OC0yLjlBNi4wNjUxIDYuMDY1MSAwIDAgMCA0Ljk4MDcgNC4xODE4YTUuOTg0NyA1Ljk4NDcgMCAwIDAtMy45OTc3IDIuOSA2LjA0NjIgNi4wNDYyIDAgMCAwIC43NDI3IDcuMDk2NiA1Ljk4IDUuOTggMCAwIDAgLjUxMSA0LjkxMDcgNi4wNTEgNi4wNTEgMCAwIDAgNi41MTQ2IDIuOTAwMUE1Ljk4NDcgNS45ODQ3IDAgMCAwIDEzLjI1OTkgMjRhNi4wNTU3IDYuMDU1NyAwIDAgMCA1Ljc3MTgtNC4yMDU4IDUuOTg5NCA1Ljk4OTQgMCAwIDAgMy45OTc3LTIuOTAwMSA2LjA1NTcgNi4wNTU3IDAgMCAwLS43NDc1LTcuMDcyOXptLTkuMDIyIDEyLjYwODFhNC40NzU1IDQuNDc1NSAwIDAgMS0yLjg3NjQtMS4wNDA4bC4xNDE5LS4wODA0IDQuNzc4My0yLjc1ODJhLjc5NDguNzk0OCAwIDAgMCAuMzkyNy0uNjgxM3YtNi43MzY5bDIuMDIgMS4xNjg2YS4wNzEuMDcxIDAgMCAxIC4wMzguMDUydjUuNTgyNmE0LjUwNCA0LjUwNCAwIDAgMS00LjQ5NDUgNC40OTQ0em0tOS42NjA3LTQuMTI1NGE0LjQ3MDggNC40NzA4IDAgMCAxLS41MzQ2LTMuMDEzN2wuMTQyLjA4NTIgNC43ODMgMi43NTgyYS43NzEyLjc3MTIgMCAwIDAgLjc4MDYgMGw1Ljg0MjgtMy4zNjg1djIuMzMyNGEuMDgwNC4wODA0IDAgMCAxLS4wMzMyLjA2MTVMOS43NCAxOS45NTAyYTQuNDk5MiA0LjQ5OTIgMCAwIDEtNi4xNDA4LTEuNjQ2NHpNMi4zNDA4IDcuODk1NmE0LjQ4NSA0LjQ4NSAwIDAgMSAyLjM2NTUtMS45NzI4VjExLjZhLjc2NjQuNzY2NCAwIDAgMCAuMzg3OS42NzY1bDUuODE0NCAzLjM1NDMtMi4wMjAxIDEuMTY4NWEuMDc1Ny4wNzU3IDAgMCAxLS4wNzEgMGwtNC44MzAzLTIuNzg2NUE0LjUwNCA0LjUwNCAwIDAgMSAyLjM0MDggNy44NzJ6bTE2LjU5NjMgMy44NTU4TDEzLjEwMzggOC4zNjQgMTUuMTE5MiA3LjJhLjA3NTcuMDc1NyAwIDAgMSAuMDcxIDBsNC44MzAzIDIuNzkxM2E0LjQ5NDQgNC40OTQ0IDAgMCAxLS42NzY1IDguMTA0MnYtNS42NzcyYS43OS43OSAwIDAgMC0uNDA3LS42Njd6bTIuMDEwNy0zLjAyMzFsLS4xNDItLjA4NTItNC43NzM1LTIuNzgxOGEuNzc1OS43NzU5IDAgMCAwLS43ODU0IDBMOS40MDkgOS4yMjk3VjYuODk3NGEuMDY2Mi4wNjYyIDAgMCAxIC4wMjg0LS4wNjE1bDQuODMwMy0yLjc4NjZhNC40OTkyIDQuNDk5MiAwIDAgMSA2LjY4MDIgNC42NnpNOC4zMDY1IDEyLjg2M2wtMi4wMi0xLjE2MzhhLjA4MDQuMDgwNCAwIDAgMS0uMDM4LS4wNTY3VjYuMDc0MmE0LjQ5OTIgNC40OTkyIDAgMCAxIDcuMzc1Ny0zLjQ1MzdsLS4xNDIuMDgwNUw4LjcwNCA1LjQ1OWEuNzk0OC43OTQ4IDAgMCAwLS4zOTI3LjY4MTN6bTEuMDk3Ni0yLjM2NTRsMi42MDItMS40OTk4IDIuNjA2OSAxLjQ5OTh2Mi45OTk0bC0yLjU5NzQgMS40OTk3LTIuNjA2Ny0xLjQ5OTdaIiwgImdvb2dsZSI6ICJNMTIuNDggMTAuOTJ2My4yOGg3Ljg0Yy0uMjQgMS44NC0uODUzIDMuMTg3LTEuNzg3IDQuMTMzLTEuMTQ3IDEuMTQ3LTIuOTMzIDIuNC02LjA1MyAyLjQtNC44MjcgMC04LjYtMy44OTMtOC42LTguNzJzMy43NzMtOC43MiA4LjYtOC43MmMyLjYgMCA0LjUwNyAxLjAyNyA1LjkwNyAyLjM0N2wyLjMwNy0yLjMwN0MxOC43NDcgMS40NCAxNi4xMzMgMCAxMi40OCAwIDUuODY3IDAgLjMwNyA1LjM4Ny4zMDcgMTJzNS41NiAxMiAxMi4xNzMgMTJjMy41NzMgMCA2LjI2Ny0xLjE3MyA4LjM3My0zLjM2IDIuMTYtMi4xNiAyLjg0LTUuMjEzIDIuODQtNy42NjcgMC0uNzYtLjA1My0xLjQ2Ny0uMTczLTIuMDUzSDEyLjQ4eiIsICJnZW1pbmkiOiAiTTExLjA0IDE5LjMyUTEyIDIxLjUxIDEyIDI0cTAtMi40OS45My00LjY4Ljk2LTIuMTkgMi41OC0zLjgxdDMuODEtMi41NVEyMS41MSAxMiAyNCAxMnEtMi40OSAwLTQuNjgtLjkzYTEyLjMgMTIuMyAwIDAgMS0zLjgxLTIuNTggMTIuMyAxMi4zIDAgMCAxLTIuNTgtMy44MVExMiAyLjQ5IDEyIDBxMCAyLjQ5LS45NiA0LjY4LS45MyAyLjE5LTIuNTUgMy44MWExMi4zIDEyLjMgMCAwIDEtMy44MSAyLjU4UTIuNDkgMTIgMCAxMnEyLjQ5IDAgNC42OC45NiAyLjE5LjkzIDMuODEgMi41NXQyLjU1IDMuODEifTsKICB2YXIgTE9HT1M9W1snQ2xhdWRlIENvZGUnLCdjbGF1ZGUnLCcjRDk3NzU3J10sWydDb2RleCcsJ29wZW5haScsJyMwMDAwMDAnXSxbJ0FudGlncmF2aXR5JywnZ2VtaW5pJywnIzQyODVGNCddLFsnV29ya0J1ZGR5JywnJywnIzRDNDU4QSddXTsgICAvLyAyMDI2LTA5LTI3IOWwj+iFuO+8muesrOS4ieWkp+iFpuaUvuW3peWFtyBsb2dvIOeVtueijueJhwogIGZ1bmN0aW9uIGxvZ29DaGlwKGwpeyB2YXIgaWM9bFsxXT8gJzxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBmaWxsPSInK2xbMl0rJyIgZD0iJytMT0dPW2xbMV1dKyciLz48L3N2Zz4nIDogJzxiIHN0eWxlPSJiYWNrZ3JvdW5kOicrbFsyXSsnIj5XPC9iPic7IHJldHVybiAnPHNwYW4gY2xhc3M9ImNoaXAiPicraWMrbFswXSsnPC9zcGFuPic7IH0KICB2YXIgVEM9W107CiAgaWYoaG9zdCl7CiAgICBUUkVFLmZvckVhY2goZnVuY3Rpb24obil7CiAgICAgIHZhciBlbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgZWwuY2xhc3NOYW1lPSd0YyAnK24ucm9sZSsobi5jbHM\/JyAnK24uY2xzOicnKTsKICAgICAgZWwuZGF0YXNldC5pZD1uLmlkOyBpZihuLnApIGVsLmRhdGFzZXQucGFyZW50PW4ucDsKICAgICAgZWwuc3R5bGUud2lkdGggPSBuLnJvbGU9PT0ncm9vdCc\/JzE1MHB4Jzoobi5yb2xlPT09J2JyYW5jaCc\/JzE4MHB4JzonYXV0bycpOyAgIC8qIDIwMjYtMDktMjnvvJrlpKfohabljaEgMTgwIOWvrO+8jOaomeexpO+8i+izvOiyt+mIleWQjOS4gOWIlyAqLwogICAgICBpZihuLnJvbGU9PT0nbGVhZicpIGVsLnN0eWxlLm1heFdpZHRoPShuLnc\/IG4udysncHgnIDogKG4ubG9nb3M\/JzI2MHB4JzonMTkwcHgnKSk7ICAgLyogMjAyNi0wOS0yOe+8mlNIQVBFIOS6lOeJh+iRieWtkOWvrOS4gOm7nu+8jOS4gOeJh+S4gOihjCAqLwogICAgICBlbC5pbm5lckhUTUw9KG4ucm9sZT09PSdyb290Jz8nJzonJykrKG4ucGljPyc8ZGl2IGNsYXNzPSJwaWMiPjxpbWcgc3JjPSInK24ucGljKyciIGFsdD0iJysobi5yb2xlPT09J3Jvb3QnPydBSSDpoK3ohabljYfntJogMzIxJzonJykrJyIgd2lkdGg9IicrKG4ucGljV3x8MzYwKSsnIiBoZWlnaHQ9IicrKG4ucGljSHx8MjgzKSsnIiBkZWNvZGluZz0iYXN5bmMiPjwvZGl2Pic6JycpKyc8ZGl2IGNsYXNzPSJ0Ij4nKyhuLmludHJvPyc8YSBjbGFzcz0iaW50cm8iIGhyZWY9Iicrbi5pbnRybysnIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciIgdGl0bGU9Iueci+iqsueoi+ewoeS7iyI+JytuLnQrJzwvYT4nOm4udCkrKG4uc3ViPyc8c3BhbiBjbGFzcz0ic3ViIj7vvIgnK24uc3ViKyfvvIk8L3NwYW4+JzonJykrJzwvZGl2PicrKG4ubG9nb3M\/JzxkaXYgY2xhc3M9ImxvZ29zIj4nK0xPR09TLm1hcChsb2dvQ2hpcCkuam9pbignJykrJzwvZGl2Pic6JycpKyhuLnRhZz8nPGRpdiBjbGFzcz0ibSI+PGk+PC9pPjxzcGFuPicrbi50YWcrJzwvc3Bhbj4nKyhuLmJ1eSYmbi5yb2xlPT09J2JyYW5jaCc\/JzxhIGNsYXNzPSJnbyIgaHJlZj0iJytuLmhyZWYrJyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPicrbi5idXkrJzwvYT4nOicnKSsnPC9kaXY+JzonJykrKG4ucm9sZT09PSdyb290Jz8nPGRpdiBjbGFzcz0ibWVudGlvbnMiPjxhIGRhdGEtdG89ImIxIj5A56ys5LiA5aSn6IWmPC9hPjxhIGRhdGEtdG89ImIyIj5A56ys5LqM5aSn6IWmPC9hPjxhIGRhdGEtdG89ImIzIj5A56ys5LiJ5aSn6IWmPC9hPjwvZGl2Pic6JycpKyhuLmJ1eSYmbi5yb2xlPT09J3Jvb3QnPyc8ZGl2IGNsYXNzPSJidXkiPjxhIGNsYXNzPSJnbyIgaHJlZj0iJytuLmhyZWYrJyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPicrbi5idXkrJzwvYT48L2Rpdj4nOicnKTsgICAvKiAyMDI2LTA5LTI577ya5Y2h5bqV6LO86LK36YiV77yI5Zau5YyF55u06YGU56eS56uZ44CB5pW05YyFIGJyYWluLTEyM++8iSovICAgLy8gMjAyNi0wOS0yNyDlsI\/ohbjvvJrlg48gSGVwdGFiYXNlIOeahCBtZW50aW9u77yM6YCj5Yiw5LiJ5by15aSn6IWm5Y2hICAgLy8gMjAyNi0wOS0yNyDlsI\/ohbjvvJrkuInpoYblpKfohabljaHniYflg48gSGVwdGFiYXNlIOWNoeeJh+aUvuWclu+8jOS4jeimgemDveaYr+WtlwogICAgICBob3N0LmFwcGVuZENoaWxkKGVsKTsKICAgICAgaWYobi5pbnRybyl7IGVsLmNsYXNzTGlzdC5hZGQoJ2hhcy1pbnRybycpOyBlbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oZSl7IGlmKGUudGFyZ2V0LmNsb3Nlc3QoJ2EnKXx8ZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdtdXRlJykpIHJldHVybjsgd2luZG93Lm9wZW4obi5pbnRybywnX2JsYW5rJywnbm9vcGVuZXInKTsgfSk7IH0gICAvKiAyMDI2LTA5LTI5IOWwj+iFuO+8muWNoeeJh+ebtOaOpemAo+iqsueoi+ewoeS7iyAqLwogICAgICBuLmVsPWVsOyBUQy5wdXNoKG4pOwogICAgfSk7CiAgfQogIC8qIOe0meWxke+8mumAmeW5vuW8teWNoemWi+WgtOaLhuaIkOWWruWtl+aVo+iQve+8iOavj+WAi+Wtl+S4gOW8teWwj+e0meeJh++8ie+8jOiBmuaUj+aZgumjm+WbnuWOn+WNoeS9jee9ruOAgeWNoeeJh+aJjeePvui6qyAqLwogIC8qIDIwMjYtMDktMjcg5bCP6IW477ya5YOP5omT57+755qE5ou85ZyW77yM6YCj5aSn6IWm5Y2h5Lmf5ouG5oiQ56ys5LiA5bGk55qE5bCP5Y6f5a2QIOKUgOKUgCDmr4\/lvLXlv4PmmbrlnJbljaHplovloLTpg73mi4bmiJDvvJrlrZfvvIjkuIDlrZfkuIDniYfvvInvvIvlpKfohablnJbvvIjkuIDniYfvvInvvIvmi6zomZ\/oqqrmmI7vvIjkuIDniYfvvIkgKi8KICB2YXIgRlI9W10sIGZyYWdMYXllcj1udWxsOwogIGZ1bmN0aW9uIGFkZEZyYWcobiwgaHRtbCwgY2xzKXsgaWYoIWZyYWdMYXllcil7IGZyYWdMYXllcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgZnJhZ0xheWVyLmlkPSdmcmFnTGF5ZXInOyBob3N0LmFwcGVuZENoaWxkKGZyYWdMYXllcik7IH0gdmFyIGVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBlbC5jbGFzc05hbWU9J3RjIGZyYWcnKyhjbHM\/JyAnK2NsczonJyk7IGVsLmlubmVySFRNTD1odG1sOyBmcmFnTGF5ZXIuYXBwZW5kQ2hpbGQoZWwpOyB2YXIgZj17ZWw6ZWwsbjpuLGR4OjAsZHk6MCxyb3Q6MCxzYzoxLGlzUGljOihjbHM9PT0ncGljJ3x8Y2xzPT09J2xvZ28nKX07IG4uZnJhZ3MucHVzaChmKTsgRlIucHVzaChmKTsgfSAgIC8qIDIwMjYtMDktMjgg5pWI6IO977yaaXNQaWMg6KiY5LiA5qyh77yMbW9ycGgg5LiN55So5q+P5qC8IGNsYXNzTGlzdC5jb250YWlucyAqLwogIGlmKGhvc3QpeyBUQy5mb3JFYWNoKGZ1bmN0aW9uKG4peyBuLmZyYWdzPVtdOwogICAgbi50LnJlcGxhY2UoL1xzKy9nLCcnKS5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbihjaCl7IGFkZEZyYWcobiwgY2gpOyB9KTsKICAgIGlmKG4ucGljKSBhZGRGcmFnKG4sICc8aW1nIHNyYz0iJytuLnBpYysnIiBhbHQ9IiIgd2lkdGg9IjEyMCIgaGVpZ2h0PSI5NCI+JywgJ3BpYycpOwogICAgaWYobi5sb2dvcykgTE9HT1MuZm9yRWFjaChmdW5jdGlvbihsKXsgYWRkRnJhZyhuLCBsb2dvQ2hpcChsKSwgJ2xvZ28nKTsgfSk7ICAgLy8g5q+P5YCLIGxvZ28g6Ieq5bex5LiA54mH56KO54mHCiAgICBpZihuLnN1YikgYWRkRnJhZyhuLCBuLnN1YiwgJ3N1YicpOwogICAgaWYobi5yb2xlPT09J3Jvb3QnKSBhZGRGcmFnKG4sIG4udGFnLCAnc3ViJyk7CiAgfSk7IH0KICBpZihob3N0KXsgaG9zdC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLGZ1bmN0aW9uKGUpeyB2YXIgYT1lLnRhcmdldC5jbG9zZXN0KCcubWVudGlvbnMgYScpOyBpZihhKSBoaUNhcmQoYS5kYXRhc2V0LnRvLHRydWUpOyB9KTsgaG9zdC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsZnVuY3Rpb24oZSl7IHZhciBhPWUudGFyZ2V0LmNsb3Nlc3QoJy5tZW50aW9ucyBhJyk7IGlmKGEpIGhpQ2FyZChhLmRhdGFzZXQudG8sZmFsc2UpOyB9KTsKICAgIGhvc3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGUpeyB2YXIgYT1lLnRhcmdldC5jbG9zZXN0KCcubWVudGlvbnMgYScpOyBpZighYSkgcmV0dXJuOyBlLnByZXZlbnREZWZhdWx0KCk7IHZhciBpZD1hLmRhdGFzZXQudG87IGhpQ2FyZChpZCx0cnVlKTsgc2V0VGltZW91dChmdW5jdGlvbigpeyBoaUNhcmQoaWQsZmFsc2UpOyB9LDE0MDApOyB9KTsgfQogIGZ1bmN0aW9uIGhpQ2FyZChpZCxvbil7IFRDLmZvckVhY2goZnVuY3Rpb24obil7IGlmKG4uaWQ9PT1pZCl7IG4uZWwuY2xhc3NMaXN0LnRvZ2dsZSgnaGknLG9uKTsgaWYobi5saW5rKXsgbi5saW5rLnN0eWxlLnN0cm9rZVdpZHRoPW9uPyc0JzonJzsgbi5saW5rLnN0eWxlLnN0cm9rZT1vbj8nI0YzQzM0Qyc6Jyc7IH0gfSB9KTsgfQogIHZhciBBTUI9W10sIGFtYkxheWVyPW51bGw7CiAgaWYoaG9zdCl7CiAgICAvKiAyMDI2LTA5LTI4IOWwj+iFuOOAjOa7vui8quW+gOS4i+a7vuW+iOWNoeOAje+8muiDjOaZr+WNoeaUtumAsueNqOeri+S4gOWxpO+8jOmWi+WgtOa3oeWHuuaZguaVtOWxpOS4gOi1t+a3oe+8iOavj+agvCAxfjIg5qyh5a+r5YWl77yJ77yMCiAgICAgICDkuI3nlKjkuIDlvLXkuIDlvLXnrpflhannmb7lpJrlvLXnmoQgdHJhbnNmb3JtL29wYWNpdHkg77yMIOmAmeaYr+mWi+WgtOacgOmHjeeahOS4gOauteOAgmFtYkxheWVyIOaTuuWcqOacgOWJjemdou+8neWcqOW\/g+aZuuWcluWNoeW+jOmdou+8iOiDjOaZr++8ieOAgiAqLwogICAgYW1iTGF5ZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IGFtYkxheWVyLmlkPSdhbWJMYXllcic7IGhvc3QuaW5zZXJ0QmVmb3JlKGFtYkxheWVyLCBob3N0LmZpcnN0Q2hpbGQpOwogICAgQU1CSUVOVC5jb25jYXQoQU1CSUVOVCxBTUJJRU5ULEFNQklFTlQsQU1CSUVOVCkuZm9yRWFjaChmdW5jdGlvbih0LGkpeyAgIC8vIDIwMjYtMDktMjgg5bCP6IW477ya5bem5Y+z6KaB5ru\/54mIIOKGkiDmr4\/lj6Xog4zmma\/ljaHmnIDlpJrmlL7kupTlvLXvvIjlj6\/ku6XkupLnm7jnlorvvInvvJvnlKjlub7ku73nnIvoppbnqpflr6zvvIhsYXlvdXRUcmVlIOaxuuWumu+8iQogICAgICB2YXIgZWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIHBhcnRzPXQuc3BsaXQoJ++9nCcpLCBMPXQucmVwbGFjZSgvXHMrL2csJycpLmxlbmd0aDsgICAvLyAyMDI2LTA5LTI3IOWwj+iFuO+8muWbm+eoruW9ouW8j+a3t+iRl+aSku+8iOaomemhjO+8i+WFp+aWh++8j+S4gOWPpeipse+8j+W5vuWAi+Wtl++8j+S4gOWAi+Wtl++8ie+8jOWFp+WuuemDveWcqOism+S4gOS6jOS4ieWkp+iFpgogICAgICB2YXIgY29weU5vPU1hdGguZmxvb3IoaS9BTUJJRU5ULmxlbmd0aCk7CiAgICAgIGlmKHBhcnRzLmxlbmd0aD09PTEgJiYgTDw9MSl7IGVsLmNsYXNzTmFtZT0ndGMgZnJhZyBkdXN0JzsgZWwudGV4dENvbnRlbnQ9dDsgYW1iTGF5ZXIuYXBwZW5kQ2hpbGQoZWwpOyBBTUIucHVzaCh7ZWw6ZWwsZHVzdDp0cnVlLGNvcHk6Y29weU5vfSk7IHJldHVybjsgfQogICAgICBlbC5jbGFzc05hbWU9J3RjIGFtYicrKHBhcnRzLmxlbmd0aD4xPycgaGInOihMPD03Pycgd29yZCc6JyBsaW5lJykpOyBlbC5zdHlsZS5tYXhXaWR0aD0ocGFydHMubGVuZ3RoPjE\/JzI1MHB4JzooTDw9Nz8nbWF4LWNvbnRlbnQnOicyMTBweCcpKTsKICAgICAgZWwuaW5uZXJIVE1MPShwYXJ0cy5sZW5ndGg+MT8nPGRpdiBjbGFzcz0iaCI+JytwYXJ0c1swXSsnPC9kaXY+PGRpdiBjbGFzcz0idCI+JytwYXJ0c1sxXSsnPC9kaXY+JzonPGRpdiBjbGFzcz0idCI+Jyt0Kyc8L2Rpdj4nKTsgICAvLyAyMDI2LTA5LTI3IOWwj+iFuO+8muWDjyBIZXB0YWJhc2Ug5pyJ5qiZ6aGM55qE5Y2h54mH77yM5aSn5aSn5bCP5bCP55aK5Zyo5LiA6LW3CiAgICAgIGFtYkxheWVyLmFwcGVuZENoaWxkKGVsKTsKICAgICAgQU1CLnB1c2goe2VsOmVsLGNvcHk6Y29weU5vfSk7CiAgICB9KTsKICB9CiAgLyog5pWj6JC95L2N572u55So44CM5Zu65a6a56iu5a2Q44CN55qE5LqC5pW477ya5ZCM5LiA5qyh6LyJ5YWl6KOh54mI6Z2i6YeN566X77yM6JC96JGJ5LiN5pyD56qB54S2556s56e7ICovCiAgZnVuY3Rpb24gc2VlZGVkKGEpeyByZXR1cm4gZnVuY3Rpb24oKXsgdmFyIHQ9YSs9MHg2RDJCNzlGNTsgdD1NYXRoLmltdWwodF50Pj4+MTUsdHwxKTsgdF49dCtNYXRoLmltdWwodF50Pj4+Nyx0fDYxKTsgcmV0dXJuICgodF50Pj4+MTQpPj4+MCkvNDI5NDk2NzI5NjsgfTsgfQogIHZhciBsYXlvdXRTZWVkPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxZTkpOwoKICBmdW5jdGlvbiBlYXNlSW5PdXQoeCl7IHJldHVybiB4PDAuNSA\/IDQqeCp4KnggOiAxLU1hdGgucG93KC0yKngrMiwzKS8yOyB9CiAgZnVuY3Rpb24gY2xhbXAodixhLGIpeyByZXR1cm4gTWF0aC5tYXgoYSxNYXRoLm1pbihiLHYpKTsgfQoKICB2YXIgaXNNb2JpbGVUcmVlPWZ1bmN0aW9uKCl7IHJldHVybiB3aW5kb3cubWF0Y2hNZWRpYSgnKG1heC13aWR0aDo4MjBweCknKS5tYXRjaGVzOyB9OwoKICAvKiDwn5S0IOe2suermeWOn+acrOmggemmluiLpeacieOAjOWbuuWumuWcqOeVq+mdouacgOS4iuaWueOAjeeahOaine+8iOWwj+iFuCBXb3JkUHJlc3Mg56uZ77yd5YWs5ZGK5YiX57SEIDQ1cHjvvInvvIwKICAgICDoqJjmhrbmqLnlsLHph5jlnKjlroPkuIvpnaLjgIHoiJ7lj7Dpq5jluqbmiaPmjonlroPvvIzmiY3kuI3mnIPooqvok4vkvY\/vvIgyMDI2LTA5LTI1IOaPm+WbnuWlueWOn+acrOeahOmggemmlu+8iSAqLwogIGZ1bmN0aW9uIHRvcEluc2V0KCl7CiAgICB2YXIgaD0wOwogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaGVhZGVyLCBoZWFkZXIgKicpLmZvckVhY2goZnVuY3Rpb24oZWwpewogICAgICB2YXIgcz1nZXRDb21wdXRlZFN0eWxlKGVsKTsKICAgICAgaWYocy5wb3NpdGlvbj09PSdmaXhlZCd8fHMucG9zaXRpb249PT0nc3RpY2t5Jyl7CiAgICAgICAgdmFyIHI9ZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgaWYoci50b3A8PTEgJiYgci5oZWlnaHQ+MCAmJiByLmhlaWdodDwyMDApIGg9TWF0aC5tYXgoaCxyLmJvdHRvbSk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIE1hdGgucm91bmQoaCk7CiAgfQogIHZhciBwaW5JbnNldD0wOwogIC8qIOmrmOW6pueUqOaoo+W8j+iuiuaVuOaOp+WItu+8mkdTQVAg6YeY5L2P5pmC5pyD6Ieq5bex5pS56Iie5Y+w55qEIGhlaWdodO+8jOebtOaOpeWvqyBoZWlnaHQg5pyD6KKr5a6D6JOL5o6JICovCiAgZnVuY3Rpb24gYXBwbHlJbnNldCgpewogICAgaWYoIXN0YWdlKSByZXR1cm47CiAgICBwaW5JbnNldCA9IHRvcEluc2V0KCk7ICAgICAgICAgIC8vIOaJi+apn+S5n+mHj++8iDIwMjYtMDktMjYg6LW35omL5qmf5Lmf6YeY5L2P77yJCiAgICAvKiDoqK3lnKggI3RyZWUg5Y2A5aGK5pys6Lqr77ya6Iie5Y+w55qE55u05o6l5aSW5bGk5Zyo6YeY5L2P5pmC5pyD6KKrIEdTQVAg5o+b5oiQ5a6D6Ieq5bex55qE5aSW5q6844CB6YeN5o6S5pmC5pW05YCL6YeN6KitICovCiAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RyZWUnKXx8c3RhZ2UucGFyZW50RWxlbWVudCkuc3R5bGUuc2V0UHJvcGVydHkoJy0ta2ctcGluLWluc2V0JywgcGluSW5zZXQrJ3B4Jyk7CiAgfQogIGFwcGx5SW5zZXQoKTsKICAvKiDpoIHpppblm7rlrprliJfopoHnrYkgRWxlbWVudG9yIOi8ieWujOaJjeacg+iuiuWbuuWumu+8iOWvpua4rOe0hOesrCA2IOenku+8ieKGkiDliY0gMTIg56eS5q+P5Y2K56eS5qqi5p+l77yM6K6K5LqG5bCx6YeN5o6S5LiA5qyhICovCiAgdmFyIGluc2V0Q2hlY2tzPTAsIGluc2V0VGltZXI9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKICAgIGlmKCsraW5zZXRDaGVja3M+MjQpeyBjbGVhckludGVydmFsKGluc2V0VGltZXIpOyByZXR1cm47IH0KICAgIGlmKCF3aW5kb3cuU2Nyb2xsVHJpZ2dlcikgcmV0dXJuOwogICAgaWYodG9wSW5zZXQoKSE9PXBpbkluc2V0KXsgU2Nyb2xsVHJpZ2dlci5yZWZyZXNoKCk7IH0KICB9LDUwMCk7CgogIHZhciBrZWVwRmluYWw9W10sIHBvc3RDaGVja2VkPWZhbHNlLCBNQz17c3c6MCxmdzoyMDAsZmg6MzgwLHNheTBXOjMwMCxzYXlXOjMwMH07ICAgLyogTUPvvJ1tb3JwaCDnlKjnmoTniYjpnaLlv6vlj5YgKi8KICB2YXIgZmlnT3ZlcmZsb3c9MCwgZmlnT3BlblNjYWxlPTE7ICAgLy8g56ys5LiA5bGP6Iie5Y+w5Zyo6KaW56qX5aSW55qE6auY5bqm77yI6Zu76IWm54mI77yd6Z2e5Zu65a6a6aCB6aaW6YKj5o6S77yJ77yP6ZaL5aC05Lq65YOP57iu5pS+CiAgZnVuY3Rpb24gZmlnU3RhdGUoc3kpeyB2YXIgaz1maWdPdmVyZmxvdz8gY2xhbXAoc3kvZmlnT3ZlcmZsb3csMCwxKSA6IDE7IHJldHVybiB7Znk6LShmaWdPdmVyZmxvdyooMS1rKSksIGZzOiBmaWdPcGVuU2NhbGUrKDEtZmlnT3BlblNjYWxlKSprfTsgfQogIGZ1bmN0aW9uIGFwcGx5RmlnT3BlbihzeSl7IHZhciBzdD1maWdTdGF0ZShzeSk7IFt0cmVlRmlnLHRyZWVGaWcyLGRpenp5LHNheTAsc2F5XS5mb3JFYWNoKGZ1bmN0aW9uKGVsKXsgaWYoZWwpIGVsLnN0eWxlLnNldFByb3BlcnR5KCctLWZ5Jywgc3QuZnkudG9GaXhlZCgxKSsncHgnKTsgfSk7IFt0cmVlRmlnLHRyZWVGaWcyLGRpenp5XS5mb3JFYWNoKGZ1bmN0aW9uKGVsKXsgaWYoZWwpIGVsLnN0eWxlLnNldFByb3BlcnR5KCctLWZzJywgc3QuZnMudG9GaXhlZCgzKSk7IH0pOyB9CiAgdmFyIGxhc3RGaWdLPW51bGw7CiAgYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZnVuY3Rpb24oKXsgaWYoIWZpZ092ZXJmbG93KSByZXR1cm47IHZhciBrPWNsYW1wKHdpbmRvdy5zY3JvbGxZL2ZpZ092ZXJmbG93LDAsMSk7IGlmKGshPT1sYXN0RmlnSyl7IGxhc3RGaWdLPWs7IG1vcnBoKHRyZWVTVD8gdHJlZVNULnByb2dyZXNzIDogMCk7IH0gfSwge3Bhc3NpdmU6dHJ1ZX0pOyAgIC8vIOaNsumBjumggemmlumCo+auteaZguS6uuWDj+mVt+WbnuWOn+WwuuWvuOOAgeWbnuWIsOiInuWPsOW6lQogIGZ1bmN0aW9uIHBvc3RDaGVjaygpeyBpZigha2VlcEZpbmFsLmxlbmd0aCkgcmV0dXJuOyB2YXIgc3I9c3RhZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICBmdW5jdGlvbiBiYWQoZWwpeyB2YXIgcj1lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgaWYoci53aWR0aDw0KSByZXR1cm4gZmFsc2U7IHZhciB4MT1yLmxlZnQtc3IubGVmdCx4Mj1yLnJpZ2h0LXNyLmxlZnQseTE9ci50b3Atc3IudG9wLHkyPXIuYm90dG9tLXNyLnRvcDsgaWYoeTE8MikgcmV0dXJuIHRydWU7ICAgLyogMjAyNi0wOS0yOCDlsI\/ohbjvvJrpoILpgorooqvliIfliLDnmoTljaHnm7TmjqXol48gKi8gZm9yKHZhciBqPTA7ajxrZWVwRmluYWwubGVuZ3RoO2orKyl7IHZhciB6PWtlZXBGaW5hbFtqXTsgaWYoeDI+ei54MSs2JiZ4MTx6LngyLTYmJnkyPnoueTErNiYmeTE8ei55Mi02KSByZXR1cm4gdHJ1ZTsgfSByZXR1cm4gZmFsc2U7IH0KICAgIEZSLmZvckVhY2goZnVuY3Rpb24oZil7IGlmKGYuaGlkZSkgcmV0dXJuOyBpZihiYWQoZi5lbCkpeyBmLmhpZGU9dHJ1ZTsgZi5lbC5zdHlsZS5kaXNwbGF5PSdub25lJzsgfSB9KTsKICAgIEFNQi5mb3JFYWNoKGZ1bmN0aW9uKGEpeyBpZihhLm9mZikgcmV0dXJuOyBpZihiYWQoYS5lbCkpeyBhLm9mZj10cnVlOyBhLmVsLnN0eWxlLmRpc3BsYXk9J25vbmUnOyB9IH0pOwogIH0gICAvLyAyMDI2LTA5LTI3IOWwj+iFuO+8muS4jeimgeaTi+WIsOiHieOAgeWwjeipseahhiDihpIg5pO65aW95b6M5YaN5qqi5p+l5LiA5qyh55yf5a+m5qGG77yM5aOT5Yiw5bCx6JePCiAgZnVuY3Rpb24gbGF5b3V0VHJlZSgpewogICAgaWYoIXN0YWdlKSByZXR1cm47CiAgICB2YXIgVz1zdGFnZS5jbGllbnRXaWR0aCwgSD1zdGFnZS5jbGllbnRIZWlnaHQsIG1vYmlsZT1pc01vYmlsZVRyZWUoKTsKICAgIC8qIOWwj+iFuOacrOS6uueFp+eJh+eahOmrmOW6pu+8neaWh+Wtl+S4i+aWueWJqeS4i+eahOepuumWk++8iOacgOWwjyAyMjDjgIHmnIDlpKcgNDgw77yJ77yM5L+d6K2J54Wn54mH5LiN5pKe5a2X77yIMjAyNi0wOS0yNe+8iSAqLwogICAgaWYodHJlZUZpZyAmJiBjb3B5MSl7CiAgICAgIC8qIDIwMjYtMDktMjgg5bCP6IW477ya44CM5oiR55qE5omL6IeC6KKr5YiH5o6J5LiN5aW955yL44CN4oaSIOesrOS4gOWxj+aZguiInuWPsO+8iDEwMHZo4oiS5Zu65a6a5YiX77yJ5q+U6KaW56qX6YKE5aSa5Ye644CM6Z2e5Zu65a6a6aCB6aaW77yIbG9nbyDpgqPmjpLvvInjgI3nmoTpq5jluqbvvIjlr6bmuKwgOTZweO+8ie+8jAogICAgICAgICDkurrlg4\/osrzlnKjoiJ7lj7DlupXvvJ3mnIkgOTZweCDlnKjoppbnqpflpJbvvIzmiYvoh4LliZvlpb3ooqvoppbnqpflupXliIfmjonjgILmlLnms5XvvJrpm7vohabniYjkurrlg4\/pq5jluqblhYjmiaPmjonpgJnmrrXvvIzkuKbnlKggLS1meSDlvoDkuIrosrzokZfoppbnqpflupXvvJsKICAgICAgICAg5b6A5LiL5o2y5pmCIC0tZnkg6Zqo5o2y5YuV5q246Zu277yI5o2y6YGO6aCB6aaW6YKj5q615Ymb5aW96YeY5L2P77yJ77yM5Lq65YOP55yL6LW35L6G5LiA55u06LK86JGX55Wr6Z2i5bqV6YOo44CC5omL5qmf5LiN5YuV44CCICovCiAgICAgIHZhciB0cmVlRWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RyZWUnKTsKICAgICAgZmlnT3ZlcmZsb3cgPSAoIW1vYmlsZSAmJiB0cmVlRWwpID8gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCh0cmVlRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgd2luZG93LnNjcm9sbFkgLSBwaW5JbnNldCkpIDogMDsKICAgICAgdHJlZUZpZy5zdHlsZS5oZWlnaHQgPSBNYXRoLm1heCgyMjAsIE1hdGgubWluKDQ4MCwgSCAtIChjb3B5MS5vZmZzZXRUb3AgKyBjb3B5MS5vZmZzZXRIZWlnaHQpIC0gMzApKSArICdweCc7ICAgLy8g6YeY5L2P5b6M55qE5Y6f5bC65a+477yI57WQ5qeL5Y2A6LK85bem6YKj5YCL5aSn5bCP77yJCiAgICAgIGlmKHRyZWVGaWcyKSB0cmVlRmlnMi5zdHlsZS5oZWlnaHQgPSB0cmVlRmlnLnN0eWxlLmhlaWdodDsKICAgICAgLyog6ZaL5aC05Y+q5oqK5Lq65YOP44CM57iu5bCP44CN5Yiw6KaW56qX5pS+5b6X5LiL77yI5bqV6YKK6LK86KaW56qX5bqV77yJ77yM5o2y6YGO6aCB6aaW6YKj5q615pmC6ZW35Zue5Y6f5bC65a+477yb57iu5pS+5Lul5bqV6YKK5Lit5b+D54K65rqWICovCiAgICAgIGZpZ09wZW5TY2FsZSA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAuNTUsIChIIC0gKGNvcHkxLm9mZnNldFRvcCArIGNvcHkxLm9mZnNldEhlaWdodCkgLSAzMCAtIGZpZ092ZXJmbG93KSAvIHBhcnNlRmxvYXQodHJlZUZpZy5zdHlsZS5oZWlnaHQpKSk7CiAgICAgIGFwcGx5RmlnT3BlbigwKTsgICAvLyDlhYjnhafjgIzmjbLliLDmnIDkuIrpnaLjgI3nmoTni4DmhYvmk7rvvIzkuIvpnaLnrpfpgb\/plovoh4nnmoTljYDln5\/miY3lsI3lvpfmupYKICAgICAgaWYoZGl6enkpeyB2YXIgZmg9cGFyc2VGbG9hdCh0cmVlRmlnLnN0eWxlLmhlaWdodCl8fHRyZWVGaWcub2Zmc2V0SGVpZ2h0OyBkaXp6eS5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1keicsKGZoKjAuODYpKydweCcpOyBkaXp6eS5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1kbWwnLCgtKHRyZWVGaWcub2Zmc2V0V2lkdGh8fDIwMCkqMC4wNikrJ3B4Jyk7IGRpenp5LnN0eWxlLnNldFByb3BlcnR5KCctLXInLCBNYXRoLnJvdW5kKGZoKjAuMTMpKydweCcpOyB9ICAgLy8g5pqI55yp56ym6Jmf57me5Zyo6aCt6aCC6ZmE6L+R77yI6auY5bqm77yP5YGP56e777yP5Y2K5b6R5ZyoIENTUyDoo6HkuZggLS1mcyDot5\/kurrlg4\/kuIDotbfnuK7vvIwyMDI2LTA5LTI477yJCiAgICB9CiAgICAvKiDljaHniYflr6zluqbvvJrpm7vohabvvJ3liIbmlK8gMTUw44CB6JGJ5a2Q5pyA5a+sIDE5MO+8m+aJi+apn++8neS4ieashOetieWvrO+8iDIwMjYtMDktMjYg5omL5qmf55u05byP5b+D5pm65ZyW77yJICovCiAgICB2YXIgY29sVyA9IG1vYmlsZSA\/IE1hdGgubWluKFc8PTYwMD8gMTUwIDogMTkwLCBNYXRoLmZsb29yKChXLTM2KS8zKSkgOiAwOyAgIC8vIOW5s+adv+ashOWvrOaUvuWkp+WIsCAxOTAKICAgIHZhciBzaG9ydFR4dCA9IG1vYmlsZSAmJiAoaW5uZXJIZWlnaHQ8NzIwIHx8IFc8NjAwKTsgICAvKiDmiYvmqZ\/kuIDlvovnn63mqJnnsaTvvIjlrozmlbToqqrmmI7lnKjoqrLnqIvnsKHku4vpoIHvvInvvJvlubPmnb\/poa\/npLrlrozmlbTlj6XlrZAgKi8gICAvKiAyMDI2LTA5LTI577ya55+u5omL5qmf77yIaVBob25lIFNF77yJ5oiW56qE5omL5qmf77yIMzYwIOWvrOWuieWNk++8ieS4ieashOaUvuS4jeS4i+WujOaVtOiqquaYjiDihpIg6JGJ5a2Q5o+b55+t5qiZ57GkICovCiAgICBpZihzdGFnZSkgc3RhZ2UuY2xhc3NMaXN0LnRvZ2dsZSgnc2hvcnQtbScsICEhc2hvcnRUeHQpOyAgIC8qIOWQjOaZguiXj+e0heWNoeeahCBA5o+Q5Y+K77yI5omL5qmf5LiK5LiJ5by15aSn6IWm5Y2h5bCx5Zyo5q2j5LiL5pa577yJICovCiAgICBUQy5mb3JFYWNoKGZ1bmN0aW9uKG4pewogICAgICBpZihuLnJvbGU9PT0nbGVhZicgJiYgbi5tcyl7IHZhciB0RWw9bi5lbC5xdWVyeVNlbGVjdG9yKCcudCcpOyBpZih0RWwpeyB2YXIgd2FudD1zaG9ydFR4dD8gbi5tcyA6IG4udDsgaWYodEVsLnRleHRDb250ZW50IT09d2FudCkgdEVsLnRleHRDb250ZW50PXdhbnQ7IH0gfQogICAgICBpZihtb2JpbGUpeyBuLmVsLnN0eWxlLndpZHRoPWNvbFcrJ3B4Jzsgbi5lbC5zdHlsZS5tYXhXaWR0aD1jb2xXKydweCc7IH0KICAgICAgZWxzZSB7IG4uZWwuc3R5bGUud2lkdGg9KG4ucm9sZT09PSdsZWFmJz8nbWF4LWNvbnRlbnQnOihuLnJvbGU9PT0nYnJhbmNoJz8nMTgwcHgnOicxNTBweCcpKTsgICAvKiAyMDI2LTA5LTI577ya6JGJ5a2Q54Wn5a2X6ZW35pKQ6ZaL77yI5LiK6ZmQ77ydbWF4V2lkdGjvvInvvIzosrzov5Hlj7Pnt6PmmYLmiY3kuI3mnIPooqvngI\/opr3lmajlo5PnqoTmlrfooYwgKi8gbi5lbC5zdHlsZS5tYXhXaWR0aD0obi5yb2xlPT09J2xlYWYnPyhuLmxvZ29zPyhXPDEzNjY\/JzIzMHB4JzonMjYwcHgnKToobi53PyBuLncrJ3B4JzonMTkwcHgnKSk6JycpOyB9ICAgLyogMjAyNi0wOS0yOe+8muacieaMh+WumuWvrOW6pueahOiRieWtkO+8iFNIQVBFIOetie+8ieeFp+aMh+Wumu+8jOS4gOeJh+S4gOihjCAqLyAgIC8vIDIwMjYtMDktMjcg6YCj57ea5qKz55CG77ya56qE6J6i5bmVIGxvZ28g5Y2h57iu5YiwIDIzMO+8jOmBoOashOaJjeaTuuW+l+S4iwogICAgfSk7CiAgICB2YXIgYnlJZD17fTsgVEMuZm9yRWFjaChmdW5jdGlvbihuKXtieUlkW24uaWRdPW47fSk7CiAgICB2YXIgaE9mPWZ1bmN0aW9uKG4peyByZXR1cm4gbi5lbC5vZmZzZXRIZWlnaHR8fDQ0OyB9OwogICAgaWYoIW1vYmlsZSl7CiAgICAgIC8qIPCflLQgMjAyNi0wOS0yNyDpgKPnt5rmorPnkIbvvIjlsI\/ohbjvvJrnt5rlpKrkuoLvvIzopoHlg48gSGVwdGFiYXNlIOW\/g+aZuuWclumCo+aoo+S5vua3qO+8iQogICAgICAgICDmjpLms5XvvJ3kuInmrITvvJrlpKfohabljaHkuIDmrITjgIHov5HmrITokYnlrZDkuIDmrITjgIHpgaDmrITokYnlrZDkuIDmrITjgIIKICAgICAgICAgwrcg5LiJ5by15aSn6IWm5Y2h5Zyo44CM5Ymv5qiZ5LiL5pa55Yiw6Iie5Y+w5bqV44CN55qE5bi254uA56m66ZaT6KOh562J6Led5o6S77yM5ZCE6Ieq55qE6L+R5qyE6JGJ5a2Q5Lul5aSn6IWm5Y2h5Lit5b+D54K65Lit5b+D5LiK5LiL55aK77yI57irIEfvvIkKICAgICAgICAgwrcg6YGg5qyE6JGJ5a2Q5pS+5Zyo6L+R5qyE44CM5YWp5by15Y2h5LmL6ZaT55qE57ir44CN5q2j5Lit77yM5omA5Lul6YCy6YGg5qyE55qE57ea5piv5rC05bmz56m\/6YGO57ir44CB5LiN5pyD5aOT5Yiw5Lu75L2V6L+R5qyE5Y2hCiAgICAgICAgIMK3IOe3muS4gOW+i+aKmOe3mu+8i+Wck+inku+8muW+nueItuWNoeWPs+e3o+awtOW5s+WHuuWOuyDihpIg5LiA5qKd5YWx55So55qE55u05bm5IOKGkiDovYnliLDlrZDljaHnmoTpq5jluqYg4oaSIOawtOW5s+mAsuWtkOWNoeW3pue3o++8iOimi+S4i+aWueOAjOmAo+e3muOAje+8iSAqLwogICAgICB2YXIgd09mPWZ1bmN0aW9uKG0peyByZXR1cm4gbS5lbC5vZmZzZXRXaWR0aHx8MTUwOyB9OwogICAgICB2YXIgcm9vdD1ieUlkLnJvb3QsIGJycz1bJ2IxJywnYjInLCdiMyddLm1hcChmdW5jdGlvbihpZCl7IHJldHVybiBieUlkW2lkXTsgfSk7CiAgICAgIHZhciBuZWFyT2Y9ZnVuY3Rpb24oYil7IHJldHVybiBUQy5maWx0ZXIoZnVuY3Rpb24obSl7IHJldHVybiBtLnA9PT1iLmlkICYmIG0udHg8ODA7IH0pLnNvcnQoZnVuY3Rpb24oYSxjKXsgcmV0dXJuIGEudHktYy50eTsgfSk7IH07CiAgICAgIHZhciBmYXJPZj1mdW5jdGlvbihiKXsgcmV0dXJuIFRDLmZpbHRlcihmdW5jdGlvbihtKXsgcmV0dXJuIG0ucD09PWIuaWQgJiYgbS50eD49ODA7IH0pLnNvcnQoZnVuY3Rpb24oYSxjKXsgcmV0dXJuIGEudHktYy50eTsgfSk7IH07CiAgICAgIHZhciB0b3BMaW1pdD0oY29weTI\/IGNvcHkyLm9mZnNldFRvcCtjb3B5Mi5vZmZzZXRIZWlnaHQrMzAgOiAwKSwgYm90TGltaXQ9SC0xODsgICAvLyDmr4\/lvLXljaHkuIrnt6Ppm6Llia\/mqJkgMzDjgIHkuIvnt6Ppm6LlupUgMTgKICAgICAgdmFyIEc9MjIsIEdCPTE0OyAgIC8vIEfvvJ3ov5HmrITljaHkuYvplpPnmoTnuKvvvIjnt5rlvp7nuKvkuK3plpPnqb\/pgY7vvIzljYrnuKsgMTFweO+8ie+8m0dC77yd5aSn6IWm5Y2h5LmL6ZaT5pyA5bCP6Led6ZuiCiAgICAgIC8qIOe4seWQke+8muS4ieW8teWkp+iFpuWNoSAqLwogICAgICB2YXIgYmg9YnJzLm1hcChmdW5jdGlvbihiKXsgdmFyIG5zPW5lYXJPZihiKSwgc3Q9bnMucmVkdWNlKGZ1bmN0aW9uKGEsbSl7IHJldHVybiBhK2hPZihtKTsgfSwwKStHKk1hdGgubWF4KDAsbnMubGVuZ3RoLTEpOyByZXR1cm4gTWF0aC5tYXgoaE9mKGIpLCBzdCk7IH0pLCBzdW1CPWJoLnJlZHVjZSggICAvKiAyMDI2LTA5LTI577ya5Y2A5aGK6auY77yd5Y2h54mH6IiH6L+R5qyE6JGJ5a2Q5Y+W5aSn77yM6JGJ5a2Q5aSa55qE6YKj6aGG5aSn6IWm6Ieq5YuV5aSa55WZ56m66ZaTICovZnVuY3Rpb24oYSx2KXsgcmV0dXJuIGErdjsgfSwwKSwgcm9vbT1ib3RMaW1pdC10b3BMaW1pdDsKICAgICAgdmFyIGdhcEI9TWF0aC5tYXgoR0IsIE1hdGgubWluKDYwLCAocm9vbS1zdW1CKS8yKSksIHRvdGFsQj1zdW1CKzIqZ2FwQiwgeTA9dG9wTGltaXQrTWF0aC5tYXgoMCwocm9vbS10b3RhbEIpLzIpOwogICAgICBicnMuZm9yRWFjaChmdW5jdGlvbihiLGkpeyBiLnB5PXkwK2JoW2ldLzI7IHkwKz1iaFtpXStnYXBCOyB9KTsKICAgICAgcm9vdC5weT0oYnJzWzBdLnB5K2Jyc1syXS5weSkvMjsKICAgICAgLyog6L+R5qyE77ya5Lul5aSn6IWm5Y2h5Lit5b+D54K65Lit5b+D5LiK5LiL55aKICovCiAgICAgIHZhciBuZWFyQWxsPVtdOwogICAgICBicnMuZm9yRWFjaChmdW5jdGlvbihiKXsgdmFyIG5zPW5lYXJPZihiKSwgdG90PW5zLnJlZHVjZShmdW5jdGlvbihhLG0peyByZXR1cm4gYStoT2YobSk7IH0sMCkrRypNYXRoLm1heCgwLG5zLmxlbmd0aC0xKSwgeXk9Yi5weS10b3QvMjsgbnMuZm9yRWFjaChmdW5jdGlvbihtKXsgbS5weT15eStoT2YobSkvMjsgeXkrPWhPZihtKStHOyBuZWFyQWxsLnB1c2gobSk7IH0pOyB9KTsKICAgICAgLyog6YGg5qyE77ya5om+6L+R5qyE55qE57ir44CC5YSq5YWI44CM5ZCM5LiA6aGG5aSn6IWm5YWp5by16JGJ5a2Q5LmL6ZaT44CN77yM5YaN5YCf44CM6YCZ6aGG5aSn6IWm5pyA5b6M5LiA5by16IiH5LiL5LiA6aGG56ys5LiA5by15LmL6ZaT44CN77yM5YaN5YCf5LiK6Z2i55qE57ir77yM6YO95rKS5pyJ5bCx5o6b5Zyo6Kmy5aGK5pyA5b6M5LiA5by15LiL5pa5ICovCiAgICAgIHZhciBnYXBzPVtdOyBmb3IodmFyIGdpPTA7IGdpPG5lYXJBbGwubGVuZ3RoLTE7IGdpKyspeyB2YXIgZ2E9bmVhckFsbFtnaV0sIGdjPW5lYXJBbGxbZ2krMV07IGdhcHMucHVzaCh7eTooKGdhLnB5K2hPZihnYSkvMikrKGdjLnB5LWhPZihnYykvMikpLzIsIHVwOmdhLnAsIGRuOmdjLnAsIHVzZWQ6ZmFsc2V9KTsgfQogICAgICB2YXIgcGljaz1mdW5jdGlvbihmKXsgZm9yKHZhciBxPTA7cTxnYXBzLmxlbmd0aDtxKyspeyBpZighZ2Fwc1txXS51c2VkICYmIGYoZ2Fwc1txXSkpeyBnYXBzW3FdLnVzZWQ9dHJ1ZTsgcmV0dXJuIGdhcHNbcV07IH0gfSByZXR1cm4gbnVsbDsgfTsKICAgICAgYnJzLmZvckVhY2goZnVuY3Rpb24oYil7IGZhck9mKGIpLmZvckVhY2goZnVuY3Rpb24obSl7CiAgICAgICAgdmFyIGc9cGljayhmdW5jdGlvbihnKXsgcmV0dXJuIGcudXA9PT1iLmlkJiZnLmRuPT09Yi5pZDsgfSl8fHBpY2soZnVuY3Rpb24oZyl7IHJldHVybiBnLnVwPT09Yi5pZDsgfSl8fHBpY2soZnVuY3Rpb24oZyl7IHJldHVybiBnLmRuPT09Yi5pZDsgfSk7CiAgICAgICAgaWYoZyl7IG0ucHk9Zy55OyB9IGVsc2UgeyB2YXIgbGFzdD1uZWFyT2YoYikuc2xpY2UoLTEpWzBdOyBtLnB5PWxhc3QucHkraE9mKGxhc3QpLzIrRy8yK2hPZihtKS8yOyB9CiAgICAgIH0pOyB9KTsKICAgICAgLyog5qmr5ZCR77ya6YGg5qyE6KaB5Zyo6L+R5qyE5Y+z6YKK55WZIDE2cHjjgIHlj7PpgornlZkgMTE4cHgg57Wm54uX77yb5pS+5LiN5LiL5bCx5pW05o6S5b6A5bem5oyqICovCiAgICAgIHZhciBmYXJBbGw9VEMuZmlsdGVyKGZ1bmN0aW9uKG0peyByZXR1cm4gbS5yb2xlPT09J2xlYWYnJiZtLnR4Pj04MDsgfSk7CiAgICAgIHZhciBuZWFyVz1NYXRoLm1heC5hcHBseShudWxsLCBuZWFyQWxsLm1hcCh3T2YpKSwgZmFyVz1NYXRoLm1heC5hcHBseShudWxsLCBmYXJBbGwubWFwKHdPZikpOwogICAgICB2YXIgbGFuZVI9KGZ1bmN0aW9uKCl7IHZhciBkbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9nbGF5ZXInKTsgcmV0dXJuIChkbCAmJiBnZXRDb21wdXRlZFN0eWxlKGRsKS5kaXNwbGF5IT09J25vbmUnKT8gMTQ4IDogNjA7IH0pKCk7ICAgLyogMjAyNi0wOS0yOe+8mueLl+eahOOAjOWFjeiyu+iogumWseOAjeeJjOWtkOavlOeLl+WvrO+8jOmBoOashOWPs+e3o+imgeiuk+WIsOeJjOWtkOW3pumCiiAqLwogICAgICB2YXIgZmFyWD1NYXRoLm1pbihXLWxhbmVSLWZhclcvMiwgTWF0aC5tYXgoMC44NipXLCAwLjcwKlcrbmVhclcvMisxNitmYXJXLzIpKTsKICAgICAgdmFyIG5lYXJYPU1hdGgubWluKDAuNzAqVywgZmFyWC1mYXJXLzItMTYtbmVhclcvMik7CiAgICAgIHZhciBiWD1NYXRoLm1pbigwLjQ1KlcsIG5lYXJYLW5lYXJXLzItNjQtd09mKGJyc1swXSkvMik7CiAgICAgIHZhciBmaWdSaWdodD0odHJlZUZpZz8gKHRyZWVGaWcub2Zmc2V0V2lkdGh8fDIwMCkgOiAwKSszMisyNDsgICAvLyDntZDmp4vljYDkurrnianosrzlt6bvvIhzY2FsZSAx77yJ77ya5Y+z57ej77yLMjRweCDntabntIXljaEKICAgICAgcm9vdC5weD1NYXRoLm1heCgwLjIxKlcsIGZpZ1JpZ2h0K3dPZihyb290KS8yKTsKICAgICAgYlg9TWF0aC5tYXgoYlgsIHJvb3QucHgrd09mKHJvb3QpLzIrNTYrd09mKGJyc1swXSkvMik7ICAgLy8g57SF5Y2h5Yiw5aSn6IWm5Y2h5LmL6ZaT6Iez5bCRIDU2cHgg57Wm57ea6L2J5b2OCiAgICAgIGJycy5mb3JFYWNoKGZ1bmN0aW9uKGIpeyBiLnB4PWJYOyB9KTsKICAgICAgVEMuZm9yRWFjaChmdW5jdGlvbihtKXsgaWYobS5yb2xlPT09J2xlYWYnKSBtLnB4PShtLnR4Pj04MD8gZmFyWCA6IG5lYXJYKTsgfSk7CiAgICAgIC8qIOS\/nemaqu+8muaVtOajteaouemChOaYr+i2heWHuuW4tueLgOepuumWk+WwseetieavlOWjk+e4ru+8iOe4q+acg+i3n+iRl+e4ru+8jOeQhuirluS4iuS4jeacg+eZvOeUn++8iSAqLwogICAgICB2YXIgbWluVG9wPTFlOSwgbWF4Qm90PS0xZTk7CiAgICAgIFRDLmZvckVhY2goZnVuY3Rpb24obil7IG1pblRvcD1NYXRoLm1pbihtaW5Ub3AsIG4ucHktaE9mKG4pLzIpOyBtYXhCb3Q9TWF0aC5tYXgobWF4Qm90LCBuLnB5K2hPZihuKS8yKTsgfSk7CiAgICAgIGlmKG1pblRvcDx0b3BMaW1pdCB8fCBtYXhCb3Q+Ym90TGltaXQpeyB2YXIgc2M9TWF0aC5taW4oMSwoYm90TGltaXQtdG9wTGltaXQpLyhtYXhCb3QtbWluVG9wKSksIG9mZj10b3BMaW1pdC1taW5Ub3Aqc2M7IFRDLmZvckVhY2goZnVuY3Rpb24obil7IG4ucHk9bi5weSpzYytvZmY7IH0pOyB9CiAgICB9IGVsc2UgewogICAgICAvKiDmiYvmqZ\/nm7TlvI\/lv4PmmbrlnJbvvJrkuInpoYblpKfohablnKjkuIog4oaSIOS4ieWAi+WIhuaUr+S4gOaOkiDihpIg5ZCE6Ieq55qE6JGJ5a2Q5b6A5LiL55aK5oiQ5LiJ5qyE77yb5pW05qO15qi55Zyo5qiZ6aGM5LiL5pa555qE56m66ZaT6KOh5LiK5LiL572u5Lit77yM56m66ZaT5LiN5aSg5bCx57iu6ZaT6LedICovCiAgICAgIHZhciBnYXBYPU1hdGgubWF4KDgsIE1hdGgubWluKDI0LCAoVy0zKmNvbFcpLzQpKSwgY3hzPVtXLzItY29sVy1nYXBYLCBXLzIsIFcvMitjb2xXK2dhcFhdOwogICAgICB2YXIgcm9vdD1ieUlkLnJvb3QsIGJycz1bJ2IxJywnYjInLCdiMyddLm1hcChmdW5jdGlvbihpZCl7IHJldHVybiBieUlkW2lkXTsgfSk7CiAgICAgIHZhciBjb2xzPWJycy5tYXAoZnVuY3Rpb24oYil7IHJldHVybiBUQy5maWx0ZXIoZnVuY3Rpb24obil7IHJldHVybiBuLnA9PT1iLmlkOyB9KTsgfSk7CiAgICAgIHZhciB0b3A9KGNvcHkyPyBjb3B5Mi5vZmZzZXRUb3ArY29weTIub2Zmc2V0SGVpZ2h0IDogMCkrMTQsIGJvdHRvbT1ILTEyLU1hdGgucm91bmQoKHRyZWVGaWc\/IHRyZWVGaWcub2Zmc2V0SGVpZ2h0OjApKihIPj03NjA\/IDAuMzIqMC45OCA6IDAuMjgqMC45MCkpOyAgIC8vIDIwMjYtMDktMjfvvJrmiYvmqZ\/ntZDmp4vljYDlupXpg6jnlZnntabnuK7lsI\/liLAgMC40MCDnmoTlsI\/ohbjvvIjlt6bkuIvop5LvvInvvIzokYnlrZDkuI3ooqvlpbnmk4vliLAKICAgICAgdmFyIGJoPU1hdGgubWF4LmFwcGx5KG51bGwsIGJycy5tYXAoaE9mKSk7CiAgICAgIHZhciBjb2xIPWZ1bmN0aW9uKGMsZyl7IHJldHVybiBjLnJlZHVjZShmdW5jdGlvbihzLG4peyByZXR1cm4gcytoT2Yobik7IH0sMCkrZypNYXRoLm1heCgwLGMubGVuZ3RoLTEpOyB9OwogICAgICB2YXIgRzE9MzQsIEcyPTE2LCBHMz0xMCwgZml4ZWQ9aE9mKHJvb3QpK2JoK01hdGgubWF4LmFwcGx5KG51bGwsIGNvbHMubWFwKGZ1bmN0aW9uKGMpeyByZXR1cm4gY29sSChjLDApOyB9KSk7CiAgICAgIHZhciBnYXBzPUcxK0cyK0czKjMsIHJvb209KGJvdHRvbS10b3ApLWZpeGVkLCBzPU1hdGgubWF4KDAuMywgTWF0aC5taW4oMS40LCByb29tL2dhcHMpKTsKICAgICAgdmFyIHk9dG9wK01hdGgubWF4KDAsIHJvb20tZ2FwcypzKSowLjQ1OwogICAgICByb290LnB4PVcvMjsgcm9vdC5weT15K2hPZihyb290KS8yOyB5Kz1oT2Yocm9vdCkrRzEqczsKICAgICAgYnJzLmZvckVhY2goZnVuY3Rpb24oYixpKXsgYi5weD1jeHNbaV07IGIucHk9eStiaC8yOyB9KTsKICAgICAgeSs9YmgrRzIqczsKICAgICAgY29scy5mb3JFYWNoKGZ1bmN0aW9uKGMsaSl7IHZhciB5eT15OyBjLmZvckVhY2goZnVuY3Rpb24obil7IG4ucHg9Y3hzW2ldOyBuLnB5PXl5K2hPZihuKS8yOyB5eSs9aE9mKG4pK0czKnM7IH0pOyB9KTsKICAgIH0KICAgIFRDLmZvckVhY2goZnVuY3Rpb24obil7IG4uZWwuc3R5bGUubGVmdCA9IG4ucHgrJ3B4Jzsgbi5lbC5zdHlsZS50b3AgPSBuLnB5KydweCc7IH0pOwogICAgLyog8J+UtCDplovloLTokL3okYnmk7rlnKjlk6rvvIgyMDI2LTA5LTI1IOWwj+iFuO+8muWNoeeJh+WkmuS4gOm7nuOAgeW3puWPs+mDveimgeacie+8jOWOn+acrOmbhuS4reWcqOW3pumCiu+8iQogICAgICAgwrcg5YWI5pO65b+D5pm65ZyWIDE0IOW8te+8jOWGjeeUqOiDjOaZryAxMiDlvLXoo5znqbrkvY3vvJvlhanmibnpg73ovKrmtYHliIbliLDlt6bjgIHlj7Plhanpgoog4oaSIOWFqemCiuW8teaVuOS4gOaoowogICAgICAgwrcg5q+P5by15Zyo6Ieq5bex6YKj5LiA5YG06KmmIDYwIOWAi+maqOapn+m7nu+8jOaMkeOAjOmbouW3suaTuuWlveeahOWNoeacgOmBoOOAjeeahOmCo+WAiyDihpIg5pW054mH6Yuq6ZaL44CB5LiN55aK5Zyo5LiA6LW3CiAgICAgICDCtyDnlKjljaHniYfjgIzovYnmrarkuYvlvozjgI3lr6bpmpvkvZTnmoTlpKflsI\/liKTmlrfvvIzkuI3okL3lnKjvvJrplovloLTmloflrZfjgIHlsI\/ohbjmnKzkurrnhafniYfjgIHlt6bkuIvjgIzlvoDkuIvmu5HjgI3mj5DnpLrjgIHni5flkozniaDotbDpgY7nmoTnt5rvvIzkuZ\/kuI3otoXlh7rnlavpnaIKICAgICAgIMK3IOiDjOaZr+WNoeaJvuS4jeWIsOepuuS9jeWwseS4jeaUvu+8iOWwj+ieouW5leiHquWLleWwkeaUvuW5vuW8te+8jOS4jeehrOaToO+8iSAqLwogICAgQU1CLmZvckVhY2goZnVuY3Rpb24oYSl7IGEuZWwuc3R5bGUuZGlzcGxheT0nJzsgYS5vZmY9ZmFsc2U7IH0pOwogICAgdmFyIHNyPXN0YWdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBrZWVwPVtdOwogICAgLyogMjAyNi0wOS0yOSDmlYjog73vvJptb3JwaCDmr4\/moLzopoHnlKjnmoTlsLrlr7jlnKjpgJnoo6Hph4\/kuIDmrKHvvIjlr6vlrozmqKPlvI\/lho3oroDvvJ3pgLzngI\/opr3lmajnlbbloLTph43nrpflub7nmb7lvLXljaHvvIkgKi8KICAgIE1DLnN3PXN0YWdlLmNsaWVudFdpZHRoOyBNQy5mdz10cmVlRmlnPyAodHJlZUZpZy5vZmZzZXRXaWR0aHx8MjAwKSA6IDIwMDsgTUMuZmg9dHJlZUZpZz8gKHRyZWVGaWcub2Zmc2V0SGVpZ2h0fHwzODApIDogMzgwOwogICAgW1snc2F5MFcnLHNheTBdLFsnc2F5Vycsc2F5XV0uZm9yRWFjaChmdW5jdGlvbihwcil7IHZhciBlbD1wclsxXTsgaWYoIWVsKXsgTUNbcHJbMF1dPTMwMDsgcmV0dXJuOyB9IHZhciB0PWVsLnF1ZXJ5U2VsZWN0b3IoJy50eHQnKSwga2VlcFQ9dC50ZXh0Q29udGVudDsgdC50ZXh0Q29udGVudD10LmdldEF0dHJpYnV0ZSgnZGF0YS10ZXh0Jyk7IE1DW3ByWzBdXT1lbC5vZmZzZXRXaWR0aHx8MzAwOyB0LnRleHRDb250ZW50PWtlZXBUOyB9KTsKICAgIGZ1bmN0aW9uIGF2b2lkKGVsLHBhZCl7CiAgICAgIGlmKCFlbCkgcmV0dXJuOyB2YXIgcj1lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgaWYoci53aWR0aD4wKSBrZWVwLnB1c2goe3gxOnIubGVmdC1zci5sZWZ0LXBhZCwgeDI6ci5yaWdodC1zci5sZWZ0K3BhZCwgeTE6ci50b3Atc3IudG9wLXBhZCwgeTI6ci5ib3R0b20tc3IudG9wK3BhZH0pOwogICAgfQogICAgYXZvaWQoY29weTEgJiYgKGNvcHkxLnF1ZXJ5U2VsZWN0b3IoJy5oZXJvLXRleHQnKXx8Y29weTEpLCBtb2JpbGU\/IDggOiAxNik7ICAgLy8gMjAyNi0wOS0yOO+8mumBv+mWi+WNgOe4ruWwj++8iOaJi+apnyA477yP5qGM5qmfIDE277yJ77yM55So5a+m6Zqb57iu5pS+566X5qGG5b6M5LiN5b+F55WZ5aSn6YKK77yM5a2X5peB6YKK5omN5aGr5b6X5YiwCiAgICBhdm9pZChjb3B5MSAmJiBjb3B5MS5xdWVyeVNlbGVjdG9yKCcuaGVyby1jdGEnKSwgMTApOwogICAgYXZvaWQoY29weTEgJiYgY29weTEucXVlcnlTZWxlY3RvcignLm5sbm90ZScpLCA0KTsgICAvKiAyMDI2LTA5LTI477ya6KGo5Zau5LiL6YKj6KGM44CM5bey5pyJIDIsNjAwKyDkvY3oqILplrHogIXjgI3kuZ\/mmK\/lrZfvvIzliKXorpPlsI\/ljaHlo5PliLDvvIjoh6rmiKrlnJbmipPliLDkuIDpoYbngbDlobXlo5PlnKjlrZfkuIrvvIkgKi8KICAgIGlmKCFtb2JpbGUgJiYgdHJlZUZpZyl7CiAgICAgIC8qIDIwMjYtMDktMjgg5bCP6IW444CM6IeJ5Yil6KKr5pOL5L2P44CN77ya6ZaL5aC05Lq65YOP5piv57iu5bCP55qEKGZpZ09wZW5TY2FsZSnosrzoppbnqpflupXvvIzlvoDkuIvmjbLmmYLmnIPjgIzplbflpKfliLDljp\/lsLrlr7jkuKblvoDkuIrnp7vjgI3vvIzoh4nmnIPmjoPpgLLkuIrmlrnljaHniYfljYDjgIIKICAgICAgICAg5Y6f5pys56aB5Y2A5Y+q566X5LqG6ZaL5aC06YKj5YCL57iu5bCP5L2N572uIOKGkiDkurrlg4\/kuIDplbflpKfoh4nlsLHot5HliLDnpoHljYDlpJbooqvljaHniYfljIXlnI3jgILmlLnnlKjjgIzljp\/lsLrlr7go6ZW35aSn5b6MKeS9jee9ruOAjeS\/neeVmeaVtOaineiHiemDqOemgeWNgO+8jAogICAgICAgICDpgqPmmK\/oh4nmjoPpgY7nmoTmnIDpq5jmnIDlpKfnr4TlnI3vvJvlupXpg6jlu7bliLAgNjAlIOS5n+iTi+W+l+S9j+mWi+WgtOWwj+iHieeahOS4i+e3o+OAgm9mZnNldFdpZHRoL29mZnNldEhlaWdodCDkuI3lj5cgdHJhbnNmb3JtIOW9semfv++8neWOn+WwuuWvuOOAgiAqLwogICAgICB2YXIgZnVsbFc9dHJlZUZpZy5vZmZzZXRXaWR0aCwgZnVsbEg9dHJlZUZpZy5vZmZzZXRIZWlnaHQ7CiAgICAgIGlmKGZ1bGxXPjApeyB2YXIgY1g9Vy8yLCBmdWxsVG9wPUgtZnVsbEg7CiAgICAgICAga2VlcC5wdXNoKHt4MTpjWC1mdWxsVy8yLWZ1bGxXKjAuMTQsIHgyOmNYK2Z1bGxXLzIrZnVsbFcqMC4wNCwgeTE6ZnVsbFRvcC0yMi1maWdPdmVyZmxvdywgeTI6ZnVsbFRvcCtmdWxsSCowLjYyfSk7IH0gICAvLyDlt6bpgorlpJrnlZkgMTQl77yI5o2y5YuV5pmC5Lq65YOP5pyD5b6A5bem6aOE5LiA6bue77yJ77yb6aCC56uv5YaN5b6A5LiK5bu2IGZpZ092ZXJmbG9377yI6auY6KaW56qX6ZaL5aC05Lq65YOP5pyD6KKr5b6A5LiK5o6o6YKj6bq85aSa77yJ77yM6IeJL+mgremrri\/mirHpoK3nmoTmiYvmlbTmrrXmjbLli5Xpg73nvankvY8KICAgIH0KICAgIGlmKHNheTAgJiYgIW1vYmlsZSl7IHZhciBmckI9dHJlZUZpZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgYnc9TWF0aC5tYXgoc2F5MC5vZmZzZXRXaWR0aHx8MCwgMzAwKSwgYmg9TWF0aC5tYXgoc2F5MC5vZmZzZXRIZWlnaHR8fDAsIDQ2KTsgICAvLyDlsI3oqbHmoYbkvY3nva7nhafkurrlg4\/mjqjvvJrpoK3lj7PlgbTjgIHpoK3poILkuIsgMTQl77yI5LiN5L6d6LO05a6D5piv5ZCm5bey5riy5p+T77yJCiAgICAgIHZhciBieDE9ZnJCLmxlZnQtc3IubGVmdCtmckIud2lkdGgqMC41MiwgYnkyPWZyQi5ib3R0b20tc3IudG9wLWZyQi5oZWlnaHQqMC44NjsKICAgICAga2VlcC5wdXNoKHt4MTpieDEtMjAsIHgyOmJ4MStidysyMCwgeTE6YnkyLWJoLTE2LCB5MjpieTIrMTZ9KTsgfSAgIC8qIDIwMjYtMDktMjjvvJrlsI3oqbHmoYblkajlnI3nlZkgMjAvMTZweCDlsLHlpb3vvIzlj7PpgormiY3kuI3mnIPnqbrkuIDloYogKi8KICAgIGlmKHNheTAgJiYgbW9iaWxlKXsgdmFyIGZyTT10cmVlRmlnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBid009TWF0aC5taW4oVyowLjcyLCAzMDApLCBiaE09NjQ7IHZhciBieGM9ZnJNLmxlZnQtc3IubGVmdCtmck0ud2lkdGgqMC42MDsgICAvLyDmiYvmqZ\/vvJrpoK3poILnva7kuK3nmoTmsKPms6EKICAgICAga2VlcC5wdXNoKHt4MTpieGMtYndNLzItMTYsIHgyOmJ4Yytid00vMisxNiwgeTE6ZnJNLnRvcC1zci50b3AtMTAtYmhNLTE2LCB5Mjpmck0udG9wLXNyLnRvcCs0fSk7IH0KICAgIGlmKG1vYmlsZSAmJiB0cmVlRmlnKXsgICAvLyDmiYvmqZ\/vvJroh4nmlbTlvLXpgb\/plovvvIjoh4nmmK\/miYvmqZ\/plovloLTnmoTkuLvop5LvvIkKICAgICAgdmFyIGZyPXRyZWVGaWcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGZ3PWZyLndpZHRoOwogICAgICBpZihmdz4wKSBrZWVwLnB1c2goe3gxOmZyLmxlZnQtc3IubGVmdC0xMiwgeDI6ZnIucmlnaHQtc3IubGVmdCsxMiwgeTE6ZnIudG9wLXNyLnRvcC0xNiwgeTI6ZnIuYm90dG9tLXNyLnRvcH0pOyAgIC8vIDIwMjYtMDktMjfvvJrmiYvmqZ\/oh4nmlbTlvLXpgb\/plovvvIjoh4nmmK\/miYvmqZ\/plovloLTnmoTkuLvop5LvvIkKICAgIH0KICAgIGF2b2lkKHRyZWVIaW50LCA4KTsKICAgIGtlZXBGaW5hbD1rZWVwLnNsaWNlKCk7ICAgLy8g5LqL5b6M5qqi5p+l55So77yI6KaLIG1vcnBoIOW+jOeahCBwb3N0Q2hlY2vvvIkKICAgIHBvc3RDaGVja2VkPWZhbHNlOyAgIC8qIDIwMjYtMDktMjjvvJrlrZflnovvvI\/lnJbniYfovInlrowgU2Nyb2xsVHJpZ2dlciDmnIMgcmVmcmVzaCDph43mjpLvvIzkuYvliY3lj6rlnKjplovloLQgMC43IOenkuaqouafpeS4gOasoSDihpIg6YeN5o6S5b6M6aCC6YKK6KKr5YiH55qE5Y2h5rKS5Lq66JeP77yb5pS55oiQ5q+P5qyh6YeN5o6S5a6M44CB5Zue5Yiw6ZaL5aC054uA5oWL5bCx5YaN5qqi5p+lICovCiAgICBpZih3aW5kb3cuX19rZ0RlYnVnKXsgd2luZG93Ll9fa2dEYmc9d2luZG93Ll9fa2dEYmd8fHt9OyB3aW5kb3cuX19rZ0RiZy5rZWVwPWtlZXAuc2xpY2UoKTsgd2luZG93Ll9fa2dEYmcuZG9nT249ZG9nT247IH0KICAgIC8qIOeLl+W+heWcqOeVq+mdoiA0MiUg6auY77yI6Lef5LiL6Z2i54uX55qEIEFOQ0hPUiDkuIDmqKPvvInjgIHotbDlj7PpgornlZnnmb3vvIzniaDpoK3kuIrmmK\/otbDpgY7nmoTnt5rvvJoKICAgICAgIMK3IOW\/g+aZuuWcluWNoe+8muaVtOaineeLl+eahOi3r+mDveS4jeaUvu+8iOaNsuWLleaZguacg+aWnOiRl+mjm+WbnuaoueS4iu+8jOW+nueLl+S4i+aWueWHuueZvOacg+aTpumBjueLl++8iQogICAgICAgwrcg6IOM5pmv5Y2h77ya5Y+v5Lul5pS+5Zyo54uX6Lqr5LiL77yI5Y+q5pyD5b6A5aSW6aOE44CB5reh5Ye677yM56Kw5LiN5Yiw54uX77yJICovCiAgICB2YXIgZGw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvZ2xheWVyJyksIGRvZ09uPWRsICYmIGdldENvbXB1dGVkU3R5bGUoZGwpLmRpc3BsYXkhPT0nbm9uZSc7CiAgICB2YXIgbGFuZUFsbD17eDE6Vy0xNTAsIHgyOlcrNTAsIHkxOi05OTk5LCB5Mjo5OTk5fSwgbGFuZVRvcD17eDE6Vy0xNTAsIHgyOlcrNTAsIHkxOi05OTk5LCB5MjowLjQyKmlubmVySGVpZ2h0LXBpbkluc2V0KzkwfTsKICAgIHZhciBlZGdlTD0xMCwgZWRnZVI9Vy0xMCwgbWF4Um90PShXPj0xMzAwPyAyMiA6IDE0KTsgICAvLyDlsI\/onqLluZXlsJHovYnkuIDpu57vvIzmrarmjonnmoTljaHmiY3kuI3mnIPkvZTlpKrlpKfloYoKICAgIHZhciBybmQ9c2VlZGVkKGxheW91dFNlZWQpLCBwbGFjZWQ9W107CiAgICAvKiAyMDI2LTA5LTI4IOWwj+iFuO+8muOAjOimgea7v+eJiOeahOS6gu+8jOS4jeimgeacieS4gOWghua8j+a0nueahOS6gu+8jOW5s+Wdh+aVo+mWi+OAjeKGkiDmoLzlrZDms5XvvJoKICAgICAgIOS+neimgeaUvueahOW8teaVuOaKiuiInuWPsOWIh+aIkOW3ruS4jeWkmuWkp+Wwj+eahOagvOWtkOOAgea0l+eJjO+8jOavj+W8teWNoeS+neW6j+aLv+S4gOagvO+8iOagvOWFp+maqOapn+aKluWLle+8i+i9ie+8ie+8jAogICAgICAg5pW054mH5qC85a2Q6YO955So6YGO5LiA6Lyq5omN5YWB6Kix6YeN55aK77yb5aOT5Yiw5a2X77yP6IeJ77yP5oyJ6YiV77yP54uX6Lev55qE5qC86Lez6YGO77yI5bCP5Y2h5omN6YCy5b6X5Y6757ir6KOh77yJICovCiAgICB2YXIgaXRlbXNUb1BsYWNlPVRDLmxlbmd0aCtGUi5sZW5ndGgrQU1CLmxlbmd0aCwgY2VsbFM9TWF0aC5tYXgoNDAsIE1hdGgucm91bmQoTWF0aC5zcXJ0KFcqSC9NYXRoLm1heCg4MCxpdGVtc1RvUGxhY2UqMS4xKSkpKSwgY2VsbHM9W107CiAgICBmb3IodmFyIGd5PWNlbGxTLzI7IGd5PEg7IGd5Kz1jZWxsUykgZm9yKHZhciBneD1jZWxsUy8yOyBneDxXOyBneCs9Y2VsbFMpIGNlbGxzLnB1c2goe3g6Z3gseTpneSx1c2VkOjB9KTsKICAgIGNlbGxzPXNodWZmbGVkKGNlbGxzKTsKICAgIGlmKHdpbmRvdy5fX2tnRGVidWcpeyB3aW5kb3cuX19rZ0RiZz13aW5kb3cuX19rZ0RiZ3x8e307IHdpbmRvdy5fX2tnRGJnLmNlbGxzPWNlbGxzOyB3aW5kb3cuX19rZ0RiZy5jZWxsUz1jZWxsUzsgd2luZG93Ll9fa2dEYmcuVz1XOyB3aW5kb3cuX19rZ0RiZy5IPUg7IH0KICAgIGZ1bmN0aW9uIHNodWZmbGVkKGFycil7IHZhciBvPWFyci5tYXAoZnVuY3Rpb24odil7IHJldHVybiB7djp2LCBrOnJuZCgpfTsgfSk7IG8uc29ydChmdW5jdGlvbihwLHEpeyByZXR1cm4gcC5rLXEuazsgfSk7IHJldHVybiBvLm1hcChmdW5jdGlvbih4KXsgcmV0dXJuIHgudjsgfSk7IH0KICAgIGZ1bmN0aW9uIHBsYWNlKGVsLHJpZ2h0LGRvZ1pvbmUsc2NhbGUpewogICAgICB2YXIgem9uZXM9a2VlcDsgICAvKiAyMDI2LTA5LTI4IOWwj+iFuO+8mueLl+e9rumgguOAgeWOu+iDjO+8jOeJoOW+jOmdouWPr+S7peaUvuWNoeeJhyDihpIg5LiN5YaN6YG\/6ZaL54uX55qE6Lev77yIZG9nWm9uZSDkv53nlZnlj4PmlbjkuI3nlKjvvIkgKi8KICAgICAgdmFyIHJvdD1ybmQoKSptYXhSb3QqMi1tYXhSb3QsIHJhZD0oZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdkdXN0Jyk\/IDcwIDogTWF0aC5hYnMocm90KSkqTWF0aC5QSS8xODA7ICAgLy8g5a2X5bGR5LmL5b6M5pyD6L2J5YiwIMKxNzDCsO+8jOahhueUqOacgOWkp+WAvOeul+aJjeS4jeacg+iiq+iInuWPsOmggumCiuWIh+WIsAogICAgICB2YXIgdzA9ZWwub2Zmc2V0V2lkdGh8fDE3MCwgaDA9ZWwub2Zmc2V0SGVpZ2h0fHw0NDsgaWYoc2NhbGUpeyB3MCo9c2NhbGU7IGgwKj1zY2FsZTsgfSBlbHNlIGlmKGVsLmNsYXNzTGlzdC5jb250YWlucygnZnJhZycpKXsgdzAqPTIuODsgaDAqPTIuODsgfSBlbHNlIGlmKGVsLmNsYXNzTGlzdC5jb250YWlucygnYW1iJykpeyB3MCo9Mi4zOyBoMCo9Mi4zOyB9ICAgLy8gMjAyNi0wOS0yOO+8muWFiOaKveWlvee4ruaUvuWGjeaTuu+8jOmBv+mWi+ahhueUqOWvpumam+Wkp+WwjyAgIC8vIDIwMjYtMDktMjjvvJrnoo7niYfmlL7lpKfliLAgMS4z772eMi4444CB6IOM5pmv5Y2hIDEuMe+9njIuMyDihpIg6YG\/6ZaL5Y2A55So5pS+5aSn5b6M55qE5qGG566X77yI5LmL5YmNIDEuNSDlpKrlsI\/vvIzlubPmnb\/mnIPlo5PliLDplovloLTlrZfvvIkKICAgICAgdmFyIGN3PXcwKk1hdGguY29zKHJhZCkraDAqTWF0aC5zaW4ocmFkKSwgY2g9dzAqTWF0aC5zaW4ocmFkKStoMCpNYXRoLmNvcyhyYWQpOyAgIC8vIOi9ieatquS5i+W+jOS9lOeahOahhgogICAgICB2YXIgb3Y9bW9iaWxlPyBjdyowLjYgOiBjdyowLjI1OyAgIC8vIOWNoeeJh+WPr+S7pei2heWHuueVq+mdoumCiue3o+S4gOm7nu+8iOaJi+apn+WFreaIkOOAgeahjOapn+WFqeaIkO+8ie+8jOWDj+W+nuaXgemCiuaOoumgreOAgemLqua7v+W3puWPs++8iDIwMjYtMDktMjjvvJrmiYvmqZ\/lj6rlianlhanlgbTntLDnuKvvvIzopoHorpPljaHniYfljYrpnLLvvIkKICAgICAgdmFyIHgwPShyaWdodD8gVy8yIDogZWRnZUwtb3YpK2N3LzIsIHgxPShyaWdodD8gZWRnZVIrb3YgOiBXLzIpLWN3LzIsIHkwPTgrY2gvMiwgeTE9SC04LWNoLzI7CiAgICAgIHZhciBiZXN0PW51bGwsIGJlc3RHYXA9MDsKICAgICAgLyog5qC85a2Q5rOV77ya5YWI5om+5rKS55So6YGO55qE5qC877yIcGFzcyAw77yJ77yM5pW054mH6YO955So6YGO5omN6YeN55aK77yIcGFzcyAx44CBMuKApu+8iSAqLwogICAgICBmb3IodmFyIHBhc3M9MDsgcGFzczw0ICYmICFiZXN0OyBwYXNzKyspewogICAgICAgIGZvcih2YXIgY2k9MDsgY2k8Y2VsbHMubGVuZ3RoOyBjaSsrKXsgdmFyIGM9Y2VsbHNbY2ldOwogICAgICAgICAgaWYoYy51c2VkIT09cGFzcykgY29udGludWU7CiAgICAgICAgICBpZihyaWdodCA\/IGMueDxXLzIgOiBjLng+PVcvMikgY29udGludWU7CiAgICAgICAgICB2YXIgeD1NYXRoLm1heCh4MCwgTWF0aC5taW4oeDEsIGMueCsocm5kKCktLjUpKmNlbGxTKjAuOSkpLCB5PU1hdGgubWF4KHkwLCBNYXRoLm1pbih5MSwgYy55KyhybmQoKS0uNSkqY2VsbFMqMC45KSksIGhpdD1mYWxzZTsKICAgICAgICAgIGlmKHgxPHgwfHx5MTx5MCl7IGhpdD10cnVlOyB9CiAgICAgICAgICBmb3IodmFyIGo9MDtqPHpvbmVzLmxlbmd0aCAmJiAhaGl0O2orKyl7IHZhciB6PXpvbmVzW2pdOwogICAgICAgICAgICBpZih4K2N3LzI+ei54MSAmJiB4LWN3LzI8ei54MiAmJiB5K2NoLzI+ei55MSAmJiB5LWNoLzI8ei55Mil7IGhpdD10cnVlOyB9IH0KICAgICAgICAgIGlmKGhpdCkgY29udGludWU7CiAgICAgICAgICBjLnVzZWQrKzsgYmVzdD17eDp4LHk6eX07IGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZighYmVzdCl7IGlmKG1vYmlsZSAmJiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdmcmFnJyl8fGVsLmNsYXNzTGlzdC5jb250YWlucygnYW1iJykpKSByZXR1cm4ge3g6MCx5OjAscm90OnJvdCx3OmN3LGg6Y2gsZ2FwOi0xZTksaGl0QWxsOnRydWV9OyByZXR1cm4ge3g6KHJpZ2h0PyB4MSA6IHgwKSwgeTp5MCtybmQoKSpNYXRoLm1heCgwLHkxLXkwKSwgcm90OnJvdCwgdzpjdywgaDpjaCwgZ2FwOi0xZTksIGhpdEFsbDp0cnVlfTsgfSAgIC8vIOecn+eahOaykuepuuS9je+8muahjOapn+iyvOmCiuOAgeaJi+apn+eijueJh+iXj+i1t+S+hgogICAgICByZXR1cm4ge3g6YmVzdC54LCB5OmJlc3QueSwgcm90OnJvdCwgdzpjdywgaDpjaCwgZ2FwOmJlc3RHYXB9OwogICAgfQogICAgc2h1ZmZsZWQoVEMpLmZvckVhY2goZnVuY3Rpb24obixpKXsKICAgICAgdmFyIHM9cGxhY2Uobi5lbCwgaSUyPT09MSwgbGFuZUFsbCk7IHBsYWNlZC5wdXNoKHMpOwogICAgICBuLnN4PXMueC1uLnB4OyBuLnN5PXMueS1uLnB5OyBuLnNyb3Q9cy5yb3Q7IG4uc3NjPTAuNzUrcm5kKCkqMC42OyAgIC8vIOW\/g+aZuuWcluWNoe+8muiomOOAjOaVo+iQvem7nuebuOWwjeaoueS9jeOAjeeahOS9jeenu++8i+aVo+iQveaZgueahOWkp+Wwj++8iDAuNzXvvZ4xLjM177yJCiAgICAgIGlmKG4uZnJhZ3MpeyBuLmZyYWdzLmZvckVhY2goZnVuY3Rpb24oZixqKXsgZi5oaWRlPWZhbHNlOyBpZihtb2JpbGUgJiYgaiUyPT09MSAmJiAhZi5lbC5jbGFzc0xpc3QuY29udGFpbnMoJ3BpYycpKXsgZi5oaWRlPXRydWU7IGYuZWwuc3R5bGUuZGlzcGxheT0nbm9uZSc7IHJldHVybjsgfSBmLmVsLnN0eWxlLmRpc3BsYXk9Jyc7IGYuc2M9KG1vYmlsZT8gKGYuZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdwaWMnKXx8Zi5lbC5jbGFzc0xpc3QuY29udGFpbnMoJ2xvZ28nKT8gMC44K3JuZCgpKjAuNSA6IDEuMCtybmQoKSowLjcpIDogKGYuZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdwaWMnKT8gMC45K3JuZCgpKjEuMSA6IChmLmVsLmNsYXNzTGlzdC5jb250YWlucygnbG9nbycpPyAxLjArcm5kKCkqMC43IDogMS4zK3JuZCgpKjEuNSkpKTsgLyogMjAyNi0wOS0yOO+8mueijueJh+aUvuWkp+WIsCAxLjPvvZ4yLjjvvIzmiorlt6blj7Ploavmu7\/vvJvlhYjmir3nuK7mlL7lho3mk7ogKi8gdmFyIHBzPXBsYWNlKGYuZWwsIChpK2opJTI9PT0xLCBsYW5lQWxsLCBmLnNjKTsgaWYocHMuaGl0QWxsKXsgZi5oaWRlPXRydWU7IGYuZWwuc3R5bGUuZGlzcGxheT0nbm9uZSc7IHJldHVybjsgfSBmLmR4PXBzLngtbi5weDsgZi5keT1wcy55LW4ucHk7IGYucm90PShybmQoKS0uNSkqMTIwOyBmLmVsLnN0eWxlLmxlZnQ9bi5weCsncHgnOyBmLmVsLnN0eWxlLnRvcD1uLnB5KydweCc7IGYuZWwuc3R5bGUuekluZGV4PVN0cmluZyhNYXRoLmZsb29yKHJuZCgpKjgpKTsgfSk7IH0gICAvLyDljp\/lrZDnlKggcGxhY2UoKSDmkpLvvJrpi6rmu7\/jgIHkupLnm7jlo5PnlorvvIzkvYbpgb\/plovplovloLTmloflrZfjgIHoh4njgIHmjInpiJXjgIHni5fot68KICAgIH0pOwogICAgdmFyIGFtYkNvcGllcz0oVz49MTM2Nj8gNSA6IDIpOyAgIC8vIDIwMjYtMDktMjgg5bCP6IW444CM6KaB5ru\/54mI44CN77ya6Zu76IWm5LiA5b6LIDUg5Lu977yIMjAwIOW8te+8ie+8m+W5s+adv++8j+aJi+apnyAy77yI55yB5pWI6IO944CB5Lmf5omN5LiN5pyD5aOT5Yiw6ZaL5aC05a2X77yJCiAgICBmdW5jdGlvbiBwbGFjZUFtYihsaXN0LCBiYXNlKXsgbGlzdC5mb3JFYWNoKGZ1bmN0aW9uKGEsaSl7CiAgICAgIGlmKChhLmNvcHl8fDApPj1hbWJDb3BpZXMpeyBhLm9mZj10cnVlOyBhLmVsLnN0eWxlLmRpc3BsYXk9J25vbmUnOyByZXR1cm47IH0KICAgICAgYS5zYz0obW9iaWxlPyAoYS5kdXN0PyAwLjkrcm5kKCkqMC44IDogMC44NStybmQoKSowLjUpIDogKGEuZHVzdD8gMS4wK3JuZCgpKjEuNCA6IDEuMStybmQoKSoxLjIpKTsgICAvKiDmoYzmqZ\/vvJrog4zmma\/ljaEgMS4x772eMi4z44CB5a2X5bGRIDEuMO+9njIuNO+8m+aJi+apn+Wwj+S4gOm7nu+8m+WFiOaKvee4ruaUvuWGjeaTuiAqLwogICAgICB2YXIgcmlnaHQ9KChiYXNlK2kpJTI9PT0xKSwgcz1wbGFjZShhLmVsLCByaWdodCwgbGFuZVRvcCwgYS5zYyk7CiAgICAgIGlmKGEuZHVzdCl7IHMucm90PShybmQoKS0uNSkqMTQwOyB9CiAgICAgIGlmKHMuaGl0QWxsKXsgYS5vZmY9dHJ1ZTsgYS5lbC5zdHlsZS5kaXNwbGF5PSdub25lJzsgcmV0dXJuOyB9ICAgLyog5Y+q5pyJ44CM5oCO6bq85pS+6YO95aOT5Yiw6IeJ77yP5qiZ6aGM77yP5oyJ6YiV44CN5omN5LiN5pS+77yb55aK5Yiw5Yil5by15Y2h5rKS6Zec5L+CICovCiAgICAgIHBsYWNlZC5wdXNoKHMpOwogICAgICAvKiDmt6Hlh7rmmYLlvoDlpJbpo4TnmoTot53pm6LvvJrlt6bpgorlvoDlt6YgODBweO+8m+WPs+mCiuW+gOWPsyA4MHB477yM5L2G5Zyo54uX55qE6Lev5bem5YG055qE5Y2h5Y+q6aOE5Yiw6Lev6YKK54K65q2i77yM5LiN5pyD6aOE5Y675pKe54uXICovCiAgICAgIHZhciBlZGdlPXMueCtzLncvMjsKICAgICAgYS5keCA9ICFyaWdodCA\/IC04MCA6ICgoZG9nT24gJiYgZWRnZTw9Vy0xNTApID8gTWF0aC5taW4oODAsIFctMTUwLWVkZ2UpIDogODApOwogICAgICBhLnJvdD1zLnJvdDsgYS5lbC5zdHlsZS5sZWZ0PXMueCsncHgnOyBhLmVsLnN0eWxlLnRvcD1zLnkrJ3B4JzsgYS5lbC5zdHlsZS56SW5kZXg9U3RyaW5nKE1hdGguZmxvb3Iocm5kKCkqNikpOyAvKiDliY3lvozpmqjmqZ\/nloogKi8KICAgICAgYS5lbC5zdHlsZS50cmFuc2Zvcm09J3RyYW5zbGF0ZSgtNTAlLC01MCUpIHJvdGF0ZSgnK3Mucm90LnRvRml4ZWQoMSkrJ2RlZykgc2NhbGUoJysoYS5zY3x8MSkudG9GaXhlZCgzKSsnKSc7IGEuZWwuc3R5bGUub3BhY2l0eT1PUEVOX0FNQjsgICAvKiAyMDI2LTA5LTI4IOaViOiDve+8muWfuua6luWnv+aFi+Wvq+S4gOasoe+8jOmWi+WgtOa3oeWHuuS6pOe1puaVtOWxpCBhbWJMYXllciAqLwogICAgfSk7IH0KICAgIC8qIOmghuW6j++8muWkp+iDjOaZr+WNoeWFiOS9lOmWi+mXiueahOagvCDihpIg5bCP5Y2h77yI5a2X5bGR77yP5Zau6Kme77yJ5pyA5b6M6KOc5a2X6IiH6IeJ5peB6YKK55qE57ir77yI5b+D5pm65ZyW56KO54mH5Zyo5LiK6Z2i5bey5pO677yJICovCiAgICBwbGFjZUFtYihzaHVmZmxlZChBTUIuZmlsdGVyKGZ1bmN0aW9uKGEpeyByZXR1cm4gIWEuZHVzdCAmJiAhYS5lbC5jbGFzc0xpc3QuY29udGFpbnMoJ3dvcmQnKTsgfSkpLCAwKTsKICAgIHBsYWNlQW1iKHNodWZmbGVkKEFNQi5maWx0ZXIoZnVuY3Rpb24oYSl7IHJldHVybiBhLmR1c3QgfHwgYS5lbC5jbGFzc0xpc3QuY29udGFpbnMoJ3dvcmQnKTsgfSkpLCAxKTsKICAgIC8vIOmAo+e3mu+8iOaoueaene+8iQogICAgaWYoYnJhbmNoTGlua3MpewogICAgICBicmFuY2hMaW5rcy5pbm5lckhUTUw9Jyc7IGJyYW5jaExpbmtzLnNldEF0dHJpYnV0ZSgndmlld0JveCcsJzAgMCAnK1crJyAnK0gpOwogICAgICBUQy5mb3JFYWNoKGZ1bmN0aW9uKG4pewogICAgICAgIGlmKCFuLnApIHJldHVybjsgdmFyIHBhPWJ5SWRbbi5wXTsgaWYoIXBhKSByZXR1cm47CiAgICAgICAgdmFyIHgxPXBhLnB4LCB5MT1wYS5weSwgeDI9bi5weCwgeTI9bi5weSwgbXg9KHgxK3gyKS8yLCBkOwogICAgICAgIGlmKCFtb2JpbGUpeyAgIC8vIDIwMjYtMDktMjcg6YCj57ea5qKz55CG77yI5bCP6IW477ya5YOPIEhlcHRhYmFzZSDkuIDmqKPkub7mt6jvvInvvJrlvp7niLbljaHlj7Pnt6PkuK3lv4PmsLTlubPlh7rljrsgMjRweCDihpIg5ZCM5LiA54i25Y2h5YWx55So5LiA5qKd55u05bm5IOKGkiDlnJPop5LovYnliLDlrZDljaHpq5jluqYg4oaSIOawtOW5s+mAsuWtkOWNoeW3pue3o+OAgumBoOashOeahOe3mui1sOi\/keashOWFqeWNoeS5i+mWk+eahOe4q++8iOeJiOmdouW3suaKiumBoOashOWNoeaTuuWcqOe4q+eahOmrmOW6pu+8ie+8jOS4jeepv+S7u+S9leWNoQogICAgICAgICAgdmFyIHdPZkw9ZnVuY3Rpb24obSl7IHJldHVybiBtLmVsLm9mZnNldFdpZHRofHwxNTA7IH0sIHI9MTA7CiAgICAgICAgICB4MT1wYS5weCt3T2ZMKHBhKS8yOyB5MT1wYS5weTsgeDI9bi5weC13T2ZMKG4pLzI7IHZhciB4cz14MSsyNCwgZHk9eTIteTEsIHNnPWR5PjA\/MTotMTsKICAgICAgICAgIGlmKE1hdGguYWJzKGR5KTwyKnIrMil7IG14PSh4MSt4MikvMjsgZD0nTSAnK3gxKycgJyt5MSsnIEMgJytteCsnICcreTErJywgJytteCsnICcreTIrJywgJyt4MisnICcreTI7IH0gICAvLyDlub7kuY7lkIzpq5jvvJrkuIDmop3lubPnmoQKICAgICAgICAgIGVsc2UgeyBkPSdNICcreDErJyAnK3kxKycgSCAnKyh4cy1yKSsnIFEgJyt4cysnICcreTErJyAnK3hzKycgJysoeTErc2cqcikrJyBWICcrKHkyLXNnKnIpKycgUSAnK3hzKycgJyt5MisnICcrKHhzK3IpKycgJyt5MisnIEggJyt4MjsgfSB9CiAgICAgICAgZWxzZSBpZihuLnJvbGU9PT0nYnJhbmNoJyl7ICAgLy8g5omL5qmf77ya5LiJ6aGG5aSn6IWm5bqV6YOo5b6A5LiL5b2O5Yiw5YiG5pSv6aCC56uvCiAgICAgICAgICB2YXIgeWE9cGEucHkraE9mKHBhKS8yLCB5Yj1uLnB5LWhPZihuKS8yLCBteT0oeWEreWIpLzI7CiAgICAgICAgICBkPSdNICcreDErJyAnK3lhKycgQyAnK3gxKycgJytteSsnLCAnK3gyKycgJytteSsnLCAnK3gyKycgJyt5YjsKICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAvLyDmiYvmqZ\/vvJrliIbmlK\/msr\/mrITnmoTlt6bpgornlavmi6zomZ\/lvaLnmoTnt5rvvIzmjqXliLDmr4\/lvLXokYnlrZDlt6blgbQKICAgICAgICAgIHZhciB4bD1uLnB4LWNvbFcvMiwgc3k9cGEucHkraE9mKHBhKS8yOwogICAgICAgICAgZD0nTSAnKyh4bCsxMikrJyAnK3N5KycgQyAnKyh4bC03KSsnICcrKHN5KzgpKycsICcrKHhsLTcpKycgJyt5MisnLCAnK3hsKycgJyt5MjsKICAgICAgICB9CiAgICAgICAgdmFyIHB0aD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywncGF0aCcpOwogICAgICAgIHB0aC5zZXRBdHRyaWJ1dGUoJ2QnLGQpOyBwdGguc2V0QXR0cmlidXRlKCdmaWxsJywnbm9uZScpOwogICAgICAgIHB0aC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsJ3JnYmEoOTQsODQsMTIwLC40MiknKTsKICAgICAgICBwdGguc2V0QXR0cmlidXRlKCdzdHJva2Utd2lkdGgnLCBuLnJvbGU9PT0nbGVhZic\/JzEuNic6JzIuNCcpOwogICAgICAgIHB0aC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS1saW5lY2FwJywncm91bmQnKTsKICAgICAgICBicmFuY2hMaW5rcy5hcHBlbmRDaGlsZChwdGgpOwogICAgICAgIHZhciBMPXB0aC5nZXRUb3RhbExlbmd0aCgpOyBwdGguc3R5bGUuc3Ryb2tlRGFzaGFycmF5PUw7IHB0aC5zdHlsZS5zdHJva2VEYXNob2Zmc2V0PUw7CiAgICAgICAgdmFyIGdsb3c9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsJ2NpcmNsZScpOyAgIC8vIDIwMjYtMDktMjcg5bCP6IW477ya5LiN6KaB5LiA5pW05q615Lqu57ea77yM5LiA6aGG5bCP5bCP55qE5YWJ5pqI6aCG6JGX57ea5ruR6YGO5Y67CiAgICAgICAgZ2xvdy5zZXRBdHRyaWJ1dGUoJ3InLCBuLnJvbGU9PT0nbGVhZic\/JzIuMic6JzIuOCcpOyBnbG93LnNldEF0dHJpYnV0ZSgnZmlsbCcsJyNGRkUwOEEnKTsgZ2xvdy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywnYmVhbScpOyBnbG93LnN0eWxlLm9wYWNpdHk9MDsKICAgICAgICB2YXIgbW89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsJ2FuaW1hdGVNb3Rpb24nKTsgbW8uc2V0QXR0cmlidXRlKCdkdXInLCgyLjYrTWF0aC5yYW5kb20oKSoxLjQpLnRvRml4ZWQoMikrJ3MnKTsgbW8uc2V0QXR0cmlidXRlKCdyZXBlYXRDb3VudCcsJ2luZGVmaW5pdGUnKTsgbW8uc2V0QXR0cmlidXRlKCdwYXRoJyxkKTsgbW8uc2V0QXR0cmlidXRlKCdiZWdpbicsKC1NYXRoLnJhbmRvbSgpKjMpLnRvRml4ZWQoMikrJ3MnKTsKICAgICAgICBnbG93LmFwcGVuZENoaWxkKG1vKTsgYnJhbmNoTGlua3MuYXBwZW5kQ2hpbGQoZ2xvdyk7CiAgICAgICAgbi5saW5rPXB0aDsgbi5saW5rTGVuPUw7IG4uZ2xvdz1nbG93OwogICAgICB9KTsKICAgIH0KICAgIGFwcGx5RmlnT3Blbih3aW5kb3cuc2Nyb2xsWSk7CiAgfQoKICAvKiDplovloLTvvIjmlaPokL3mmYLvvInnmoTmv4PluqbvvIwyMDI2LTA5LTI4IOWwj+iFuO+8muOAjOW3puWPs+WFqemCiuWGjemAj+aYjuS4gOm7nuOAgeS4jeimgeWkquWkmumhj+iJsu+8jOW+gOS4i+mVt+aIkOe1kOani+aZguWGjeWHuuePvumhj+iJsuOAjQogICAgIOiIiuWAvO+8muW\/g+aZuuWcluWNoSAwLjYw77yP56KO54mH5ZyW6IiHIGxvZ28gMC45Ne+8j+eijueJh+aWh+WtlyAwLjU177yP6IOM5pmv5Y2hIDAuNDXvvJvpoY\/oibLkuIDplovlp4vlsLHmmK\/lvanoibIgKi8KICB2YXIgT1BFTl9DQVJEPTAuNDAsIE9QRU5fRlJBR19QSUM9MC42MywgT1BFTl9GUkFHX1RYVD0wLjM4LCBPUEVOX0FNQj0wLjMxLCBsYXN0T3Blbj1udWxsOyAgIC8vIDIwMjYtMDktMjggMDI6MjEg5bCP6IW477ya5YaN5rehIDEwJe+8iDAuNDUvMC43MC8wLjQyLzAuMzUg4oaSIDAuNDAvMC42My8wLjM4LzAuMzHvvIkKICBmdW5jdGlvbiBTKGVsLHAsdil7IGlmKCFlbCkgcmV0dXJuOyB2YXIgYz1lbC5fX2N8fChlbC5fX2M9e30pOyBpZihjW3BdPT09dikgcmV0dXJuOyBjW3BdPXY7IGVsLnN0eWxlW3BdPXY7IH0gICAvKiAyMDI2LTA5LTI5IOaViOiDve+8muWAvOaykuiuiuWwseS4jeWvq++8iOeAj+imveWZqOiIh+aTtOWFheWKn+iDvemDveWwkeiZleeQhuS4gOasoe+8m+WPqueUqOWcqCBtb3JwaCDlsIjlsaznmoTlr6vlhaXvvIkgKi8KICBmdW5jdGlvbiBtb3JwaChwcil7CiAgICB2YXIgbW9iaWxlMj1pc01vYmlsZVRyZWUoKTsKICAgIHZhciB0ID0gZWFzZUluT3V0KGNsYW1wKHByLzAuNzIsIDAsIDEpKTsgICAgICAgICAgIC8vIOiBmuaUj+mAsuW6pgogICAgdmFyIG9wZW5RPU1hdGgucm91bmQoKDEtdCkqMTApLzEwOyBpZihvcGVuUSE9PWxhc3RPcGVuKXsgbGFzdE9wZW49b3BlblE7IChmcmFnTGF5ZXJ8fHN0YWdlKS5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1vcGVuJywgb3BlblEpOyB9ICAgLyogMjAyNi0wOS0yOSDmlYjog73vvJrngbDovYnlvanlj6roqK3lnKjnoo7niYflsaTjgIHmr48gMC4xIOS4gOmajiAqLyAgIC8vIOmWi+WgtOeBsOmajueoi+W6piAx4oaSMO+8iOavjyAwLjA1IOS4gOmaju+8jOWwkemHjee5qu+8iQogICAgVEMuZm9yRWFjaChmdW5jdGlvbihuLGkpewogICAgICB2YXIgayA9IDEgLSB0OwogICAgICAvLyDokYnlrZDlhYjmlaPjgIHlubnlvozogZrvvJrkvp3op5LoibLntabkuIDpu57mmYLplpPlt64KICAgICAgdmFyIGxlYWQgPSBuLnJvbGU9PT0nbGVhZic\/MC4wNjoobi5yb2xlPT09J2JyYW5jaCc\/MC4wMzowKTsKICAgICAgdmFyIHR0ID0gZWFzZUluT3V0KGNsYW1wKChwci1sZWFkKS8wLjcyLDAsMSkpOwogICAgICB2YXIga2sgPSAxLXR0OwogICAgICBTKG4uZWwsJ3RyYW5zZm9ybScsCiAgICAgICAgJ3RyYW5zbGF0ZShjYWxjKC01MCUgKyAnKyhuLnN4KmtrKS50b0ZpeGVkKDEpKydweCksIGNhbGMoLTUwJSArICcrKG4uc3kqa2spLnRvRml4ZWQoMSkrJ3B4KSkgJysKICAgICAgICAncm90YXRlKCcrKG4uc3JvdCpraykudG9GaXhlZCgxKSsnZGVnKSBzY2FsZSgnKygxKygobi5zc2N8fDEpLTEpKmtrKS50b0ZpeGVkKDMpKycpJyk7CiAgICAgIC8vIOmWi+WgtOaVo+iQveaZgueahOa\/g+W6piAwLjbvvIgyMDI2LTA5LTI2IOWwj+iFuO+8muWOn+acrCAwLjI144CM5aSq6YCP5piO44CN77yb5q+U5bCNIDI177yPNDXvvI82MO+8jzc1IOaIquWclumBuCA2MO+8jOWtl+eci+W+l+a4healmuOAgeWms+eahOWtl+WSjOeFp+eJh+S7jeaYr+S4u+inku+8iQogICAgICB2YXIgbm9wID0gY2xhbXAoT1BFTl9DQVJEICsgdHQqKDEtT1BFTl9DQVJEKSArIChwcjwwLjA1P3ByKjM6MC44NSksIDAsIDEpOwogICAgICBpZihuLnJvbGUhPT0nbGVhZicpeyB2YXIgdHE9TWF0aC5yb3VuZCh0dCoyNSkvMjU7IGlmKG4uX3RxIT09dHEpeyBuLl90cT10cTsgbi5lbC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10b25lJywgdHEpOyB9IG4uZWwuY2xhc3NMaXN0LnRvZ2dsZSgnbXV0ZScsIHR0PDAuNSk7IH0gICAvKiAyMDI2LTA5LTI5IOaViOiDve+8muS4iuiJsuavjyAwLjA0IOS4gOmajiAqLyAgIC8vIOW9qeiJsuWNoe+8muiBmuaUj+WIsOWTquWwseS4iuiJsuWIsOWTqgogICAgICBpZihuLmZyYWdzKXsgdmFyIHNob3c9Y2xhbXAoKHR0LTAuNTUpLzAuMjUsMCwxKTsgbm9wPXNob3cqbm9wOyB9ICAgLyog5ouG5oiQ57SZ5bGR55qE5Y2h77ya57SZ5bGR6aOb5Zue5L6G5LqG5Y2h54mH5omN54++6LqrICovCiAgICAgIFMobi5lbCwnb3BhY2l0eScsbm9wLnRvRml4ZWQoMykpOwogICAgICBpZihuLmZyYWdzKXsKICAgICAgICBuLmZyYWdzLmZvckVhY2goZnVuY3Rpb24oZil7IGlmKGYuaGlkZSkgcmV0dXJuOyBpZihzaG93Pj0xKXsgaWYoIWYuZ29uZSl7IGYuZ29uZT10cnVlOyBmLmVsLnN0eWxlLnZpc2liaWxpdHk9J2hpZGRlbic7IH0gcmV0dXJuOyB9IGlmKGYuZ29uZSl7IGYuZ29uZT1mYWxzZTsgZi5lbC5zdHlsZS52aXNpYmlsaXR5PScnOyB9IFMoZi5lbCwndHJhbnNmb3JtJywndHJhbnNsYXRlKGNhbGMoLTUwJSArICcrKGYuZHgqa2spLnRvRml4ZWQoMSkrJ3B4KSwgY2FsYygtNTAlICsgJysoZi5keSpraykudG9GaXhlZCgxKSsncHgpKSByb3RhdGUoJysoZi5yb3Qqa2spLnRvRml4ZWQoMSkrJ2RlZykgc2NhbGUoJysoMSsoZi5zYy0xKSpraykudG9GaXhlZCgzKSsnKScpOyBTKGYuZWwsJ29wYWNpdHknLCgoZi5pc1BpYz9PUEVOX0ZSQUdfUElDOk9QRU5fRlJBR19UWFQpKigxLXNob3cpKS50b0ZpeGVkKDMpKTsgfSk7IH0KICAgIH0pOwogICAgLy8g6IOM5pmv6JC96JGJ77ya5pW05bGk5LiA6LW35reh5Ye677yL5b6A5LiK6aOE77yIMjAyNi0wOS0yOCDmlYjog73vvJrkuI3lho3pgJDlvLXnrpflhannmb7lpJrlvLXvvIzmr4\/moLzlj6rlr6sgYW1iTGF5ZXIg5LiA5bGk77yJCiAgICB2YXIgZmEgPSBjbGFtcChwci8wLjI1LCAwLCAxKTsKICAgIGlmKGFtYkxheWVyKXsKICAgICAgaWYoZmE+PTEpeyBpZighYW1iTGF5ZXIuX19vZmYpeyBhbWJMYXllci5fX29mZj10cnVlOyBhbWJMYXllci5zdHlsZS52aXNpYmlsaXR5PSdoaWRkZW4nOyB9IH0KICAgICAgZWxzZSB7IGlmKGFtYkxheWVyLl9fb2ZmKXsgYW1iTGF5ZXIuX19vZmY9ZmFsc2U7IGFtYkxheWVyLnN0eWxlLnZpc2liaWxpdHk9Jyc7IH0gUyhhbWJMYXllciwnb3BhY2l0eScsKDEtZmEpLnRvRml4ZWQoMykpOyBTKGFtYkxheWVyLCd0cmFuc2Zvcm0nLCd0cmFuc2xhdGVZKCcrKC1mYSozMCkudG9GaXhlZCgxKSsncHgpJyk7IH0KICAgIH0KICAgIC8vIOaoueaenemAo+e3mu+8muiBmuaUj+W3ruS4jeWkmuW+jOaJjeeVq+WHugogICAgdmFyIGNyID0gY2xhbXAoKHByLTAuNjApLzAuMzQsIDAsIDEpOwogICAgVEMuZm9yRWFjaChmdW5jdGlvbihuKXsgaWYobi5saW5rKSBTKG4ubGluaywnc3Ryb2tlRGFzaG9mZnNldCcsKG4ubGlua0xlbiooMS1jcikpLnRvRml4ZWQoMSkpOyBpZihuLmdsb3cpIFMobi5nbG93LCdvcGFjaXR5JywoY3I+PTAuOTk5PyAnMScgOiAnMCcpKTsgfSk7CiAgICBiZWFtV2FudCA9IGNyPj0wLjk5OTsgc3luY0JlYW1zKCk7CiAgICAvLyDmlofmoYjkuqTpjK\/vvJrkvaDlkIPpgLLljrsg4oaSIOmAo+i1t+S+hgogICAgaWYoY29weTEpeyBTKGNvcHkxLCdvcGFjaXR5JywoMS1jbGFtcChwci8wLjMwLDAsMSkpLnRvRml4ZWQoMykpOyBjb3B5MS5jbGFzc0xpc3QudG9nZ2xlKCdnb25lJywgcHI+MC4yKTsKICAgICAgUyhjb3B5MSwndHJhbnNmb3JtJywndHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKCcrKC1jbGFtcChwci8wLjMsMCwxKSoxOCkudG9GaXhlZCgxKSsncHgpJyk7IH0KICAgIGlmKGNvcHkyKXsgUyhjb3B5Miwnb3BhY2l0eScsY2xhbXAoKHByLTAuNTUpLzAuMzIsMCwxKS50b0ZpeGVkKDMpKTsgfQogICAgaWYodHJlZUZpZyl7IHZhciBzbWlsZT1jbGFtcCgocHItMC4xNSkvMC4zLDAsMSksIG12PWVhc2VJbk91dChjbGFtcCgocHItMC4xKS8wLjQ1LDAsMSkpLCBzaG9ydE07ICAgLy8gMjAyNi0wOS0yNyDlsI\/ohbjvvJrlvoDkuIvmu5HliLDntZDmp4vljYAg4oaSIOS6uuenu+WIsOW3puS4i+inkuOAgeiuiueskeiHie+8iOS4jea3oeWHuu+8iQogICAgICB2YXIgZnN0PWZpZ1N0YXRlKHdpbmRvdy5zY3JvbGxZKSwgc3c9TUMuc3d8fHN0YWdlLmNsaWVudFdpZHRoLCBmdz1NQy5mdywgc2hvcnRNPW1vYmlsZTImJmlubmVySGVpZ2h0PDc2MCwgZnM9KDEtKG1vYmlsZTI\/KHNob3J0TT8wLjcyOjAuNjgpOjAuMCkqbXYpKmZzdC5mcywgZng9KG1vYmlsZTI\/IC0oc3cvMiAtIGZ3KjAuNTUqKHNob3J0TT8wLjI4OjAuMzIpKSA6IC0oc3cvMiAtIGZ3KmZzKjAuNSAtIDEyKSkqbXY7ICAgLy8gMjAyNi0wOS0yNyDlsI\/ohbjvvJrmoYzmqZ\/ntZDmp4vljYDkurrmlL7lpKfvvIgwLjkw77yJ44CB6LK85ru\/5bem5YG044CB5Zyo57SF5Y2h5bem6YKKICAgLy8g55+u5omL5qmf77yIPDc2MCDpq5jvvInkurrnuK7liLAgMC4zMAogICAgICBbdHJlZUZpZyx0cmVlRmlnMixkaXp6eV0uZm9yRWFjaChmdW5jdGlvbihlbCl7IGlmKCFlbCkgcmV0dXJuOyBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1meCcsZngudG9GaXhlZCgxKSsncHgnKTsgZWwuc3R5bGUuc2V0UHJvcGVydHkoJy0tZnMnLGZzLnRvRml4ZWQoMykpOyB9KTsKICAgICAgW3RyZWVGaWcsdHJlZUZpZzIsZGl6enksc2F5MCxzYXldLmZvckVhY2goZnVuY3Rpb24oZWwpeyBpZihlbCkgZWwuc3R5bGUuc2V0UHJvcGVydHkoJy0tZnknLCBmc3QuZnkudG9GaXhlZCgxKSsncHgnKTsgfSk7ICAgLy8gMjAyNi0wOS0yOO+8mumWi+WgtOiyvOimlueql+W6lQogICAgICB0cmVlRmlnLnN0eWxlLm9wYWNpdHkgPSAoMS1zbWlsZSkudG9GaXhlZCgzKTsgaWYodHJlZUZpZzIpIHRyZWVGaWcyLnN0eWxlLm9wYWNpdHkgPSBzbWlsZS50b0ZpeGVkKDMpOyBpZihkaXp6eSkgZGl6enkuc3R5bGUub3BhY2l0eT0oMS1jbGFtcChwci8wLjE4LDAsMSkpLnRvRml4ZWQoMyk7IGlmKHNheTApeyBzYXkwLnN0eWxlLm9wYWNpdHk9KHNob3J0TT8gMCA6ICgxLWNsYW1wKHByLzAuMTIsMCwxKSkpLnRvRml4ZWQoMyk7IHBsYWNlU2F5MChmeCxmdyxmcyxtb2JpbGUyKTsgdHlwZVRvKHNheTAsIChwZXJmb3JtYW5jZS5ub3coKS10eXBlVDAtNjAwKS8yNDAwKTsgfQogICAgICBpZihzYXkpeyB2YXIgZmgyPU1DLmZoOyBzYXkuc3R5bGUub3BhY2l0eT0oc2hvcnRNPyAwIDogY2xhbXAoKHByLTAuNCkvMC4xNSwwLDEpKS50b0ZpeGVkKDMpOyB0eXBlVG8oc2F5LCAocHItMC40MikvMC4zMCk7IGlmKG1vYmlsZTIpeyBzYXkuY2xhc3NMaXN0LnJlbW92ZSgndG9wJyk7IHNheS5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1meCcsKGZ4K2Z3KmZzKjAuNTArTUMuc2F5Vy8yKS50b0ZpeGVkKDEpKydweCcpOyBzYXkuc3R5bGUuYm90dG9tPShmaDIqZnMqMC4zMCkrJ3B4JzsgfSBlbHNlIHsgc2F5LmNsYXNzTGlzdC5hZGQoJ3RvcCcpOyB2YXIgc3hjPWZ4K2Z3KmZzKjAuMDUsIHN3Mj1NQy5zYXlXOyBzeGM9TWF0aC5tYXgoc3hjLCA4K3N3Mi8yLXN3LzIpOyBzYXkuc3R5bGUuc2V0UHJvcGVydHkoJy0tZngnLHN4Yy50b0ZpeGVkKDEpKydweCcpOyBzYXkuc3R5bGUuYm90dG9tPShmaDIqZnMrMTApKydweCc7IH0gLyogMjAyNi0wOS0yOO+8muWwjeipseahhuW3pue3o+iHs+WwkemboueVq+mdoiA4cHggKi8gc2F5LnN0eWxlLnNldFByb3BlcnR5KCctLWZzJywnMScpOyBzYXkuc3R5bGUubWFyZ2luTGVmdD0nMHB4JzsgfSB9CiAgICBpZih0cmVlSGludCl7IFModHJlZUhpbnQsJ29wYWNpdHknLCgxLWNsYW1wKHByLzAuMTQsMCwxKSkudG9GaXhlZCgzKSk7IH0KICAgIHZhciBkcz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9nc2lnbicpOyBpZihkcykgZHMuY2xhc3NMaXN0LnRvZ2dsZSgnc2hvdycsIHByPjAuMjUpOyAgIC8vIDIwMjYtMDktMjjvvJrnrKzkuIDlsY\/kuI3oiInniYzvvIzplovloLTmt6HmjonmiY3oiIkKICB9CgogIGlmKCF3aW5kb3cuZ3NhcCB8fCByZWR1Y2UpewogICAgLy8g54Sh5YuV55Wr77ya55u05o6l6aGv56S66IGa5pSP5aW955qE5qi5CiAgICBsYXlvdXRUcmVlKCk7IFRDLmZvckVhY2goZnVuY3Rpb24obil7IG4uZWwuc3R5bGUudHJhbnNmb3JtPSd0cmFuc2xhdGUoLTUwJSwtNTAlKSc7IG4uZWwuc3R5bGUub3BhY2l0eT0xOwogICAgICBpZihuLmxpbmspIG4ubGluay5zdHlsZS5zdHJva2VEYXNob2Zmc2V0PTA7IGlmKG4uZ2xvdykgbi5nbG93LnN0eWxlLm9wYWNpdHk9MTsgfSk7CiAgICBBTUIuZm9yRWFjaChmdW5jdGlvbihhKXsgYS5lbC5zdHlsZS5kaXNwbGF5PSdub25lJzsgfSk7ICAgLy8g6IOM5pmv6JC96JGJ5Y+q5bGs5pa86ZaL5aC05YuV55WrCiAgICBGUi5mb3JFYWNoKGZ1bmN0aW9uKGYpeyBmLmVsLnN0eWxlLmRpc3BsYXk9J25vbmUnOyB9KTsKICAgIGlmKGNvcHkxKSBjb3B5MS5zdHlsZS5vcGFjaXR5PTA7IGlmKGNvcHkyKSBjb3B5Mi5zdHlsZS5vcGFjaXR5PTE7CiAgICBpZih0cmVlRmlnKSB0cmVlRmlnLnN0eWxlLm9wYWNpdHk9MDsgaWYodHJlZUZpZzIpIHRyZWVGaWcyLnN0eWxlLm9wYWNpdHk9MTsgaWYoZGl6enkpIGRpenp5LnN0eWxlLmRpc3BsYXk9J25vbmUnOyBpZihzYXkpeyBzYXkuc3R5bGUub3BhY2l0eT0xOyB0eXBlVG8oc2F5LDEpOyB9IGlmKHNheTApIHNheTAuc3R5bGUub3BhY2l0eT0wOyBpZih0cmVlSGludCkgdHJlZUhpbnQuc3R5bGUub3BhY2l0eT0wOwogICAgdmFyIGRzMD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9nc2lnbicpOyBpZihkczApIGRzMC5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7CiAgICByZXR1cm47CiAgfQogIC8qIPCflLQg5pys6aCB6Zec5o6J44CM5bmz5ruR5o2y5YuV44CN77yIMjAyNi0wOS0yNSDlsI\/ohbjvvJrlvoDkuIvmu5Hlho3lvoDkuIrmu5HvvIzpppbpoIHnmoTmnbHopb\/lsLHkuI3opovkuobvvIkKICAgICDlpbnntrLnq5nnmoTkvYjmma\/kuLvpoYzlnKggaHRtbCDplovkuoYgc2Nyb2xsLWJlaGF2aW9yOnNtb290aOOAguiomOaGtuaoueWcqOimlueql+iuiuWkp+Wwj+aZguimgemHjeaWsOmHj+S9jee9ru+8jAogICAgIOmHj+eahOaZguWAmeacg+eerOmWk+aNsuWIsOmgguerr+WGjeaNsuWbnuS+hu+8m+W5s+a7keaNsuWLleiuk+mAmeS4gOS4i+iuiuaIkOaFouaFoua7ke+8jOmHj+WIsOmMr+eahOS9jee9riDihpIg5o2y5Zue6aCC56uv5pW05aGK6ZaL5aC06KKr5o6o6LWw44CCCiAgICAgR1NBUCDlrpjmlrnkuZ\/mj5DphpLlhanogIXkuI3og73kuIDotbfnlKjjgILlj6rlvbHpn7\/pgJnkuIDpoIHvvIzlhbbku5bpoIHnhafoiIrjgIIgKi8KICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ3Njcm9sbC1iZWhhdmlvcicsJ2F1dG8nLCdpbXBvcnRhbnQnKTsKICBnc2FwLnJlZ2lzdGVyUGx1Z2luKFNjcm9sbFRyaWdnZXIpOwogIC8qIOavj+asoemHjeaWsOioiOeul+eJiOmdouWJjemDvemHjemHj+S4gOasoemggemmluWbuuWumuaine+8iOWug+WPr+iDveaYryBFbGVtZW50b3Ig6LyJ5YWl5b6M5omN6K6K5Zu65a6a55qE77yJICovCiAgU2Nyb2xsVHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCdyZWZyZXNoSW5pdCcsIGFwcGx5SW5zZXQpOwoKICBsYXlvdXRUcmVlKCk7IG1vcnBoKDApOwogIC8qIPCflLQg6KiY5oa25qi555qE44CM6YeY5L2P77yL6IGa5pSP44CN5Y+q5bu656uL5LiA5qyh77yM6KaW56qX6K6K5aSn5bCP5Lqk57WmIFNjcm9sbFRyaWdnZXIg6Ieq5bex6YeN566X77yIb25SZWZyZXNoIOacg+mHjeaOkueJiOmdou+8ieOAggogICAgIDIwMjYtMDktMjUg5bCP6IW477ya44CM5b6A5LiL5ruR5YaN5b6A5LiK5ruR77yM6aaW6aCB55qE5p2x6KW\/5bCx5LiN6KaL5LqG44CN4oaSIOWOn+acrOavj+asoeimlueql+iuiuWkp+Wwj+mDveaKiuWug+aLhuaOiemHjeW7uu+8jAogICAgIOaNsumBjuiomOaGtuaoueW+jOWPquimgeimlueql+Wkp+Wwj+iuiuS4gOS4i++8iOaUtuWQiOWBtOmCiuashOOAgee4ruaUvuOAgeWIhumggeWIl+mWi+mXnO+8ie+8jOmHjeW7uuaZguS9jee9rueul+mMr++8jAogICAgIOaNsuWbnumgguerr+aVtOWhiumWi+WgtOiiq+aOqOWIsCAxNzE2cHgg5LiL6Z2i77yM6aCC56uv5LiA54mH56m655m944CCCiAgICAgMjAyNi0wOS0yNiDotbfmiYvmqZ\/kuZ\/ph5jkvY\/vvIjlsI\/ohbjvvJrmiYvmqZ\/kuZ\/opoHnnIvliLDnibnmlYjvvInihpIg6Zu76IWm44CB5omL5qmf5YWx55So6YCZ5LiA5YCL77yM54mI6Z2i55SxIGxheW91dFRyZWUg5L6d5a+s5bqm5YiH5o+bCiAgICAg77yI6Zu76IWm5qmr5byP5b+D5pm65ZyW77yP5omL5qmf55u05byP5LiJ5qyE77yJ77yM6Leo6YGOIDgyMHB4IOaZgiBTY3JvbGxUcmlnZ2VyIOmHjeeul+OAgW9uUmVmcmVzaCDph43mjpLvvIzkuI3mi4bmjonph43lu7rjgIIKICAgICDmiYvmqZ\/ntrLlnYDliJfkvLjnuK7lj6rmlLnpq5jluqbvvIzkuI3op7jnmbzph43nrpfvvIhpZ25vcmVNb2JpbGVSZXNpemXvvInvvIznlavpnaLmiY3kuI3mnIPkuIDmu5HlsLHot7PjgIIgKi8KICAoZnVuY3Rpb24gdGljaygpeyBpZihwZXJmb3JtYW5jZS5ub3coKS10eXBlVDA8MzYwMCl7IG1vcnBoKHRyZWVTVD8gdHJlZVNULnByb2dyZXNzIDogMCk7IGlmKCFwb3N0Q2hlY2tlZCAmJiBwZXJmb3JtYW5jZS5ub3coKS10eXBlVDA+NzAwKXsgcG9zdENoZWNrZWQ9dHJ1ZTsgcG9zdENoZWNrKCk7IH0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOyB9IH0pKCk7ICAgLy8g6ZaL5aC05bCN6Kmx5qGG5omT5a2X5YuV55Wr77yI5Y+q6LeR5YmNIDMuNiDnp5LvvIkKICBTY3JvbGxUcmlnZ2VyLmNvbmZpZyh7aWdub3JlTW9iaWxlUmVzaXplOnRydWV9KTsKICBpZihkb2N1bWVudC5mb250cyAmJiBkb2N1bWVudC5mb250cy5yZWFkeSkgZG9jdW1lbnQuZm9udHMucmVhZHkudGhlbihmdW5jdGlvbigpeyBsYXlvdXRUcmVlKCk7IG1vcnBoKHRyZWVTVD8gdHJlZVNULnByb2dyZXNzIDogMCk7IGlmKCF0cmVlU1QgfHwgdHJlZVNULnByb2dyZXNzPDAuMDIpeyBwb3N0Q2hlY2tlZD10cnVlOyBwb3N0Q2hlY2soKTsgfSB9KTsgICAvKiAyMDI2LTA5LTI477ya57ay6aCB5a2X5Z6L5o+b5LiK5b6M5Y2h54mH5bC65a+45pyD6K6K77yM6YeN5o6S77yL6YeN5qqi6aCC6YKKICovCiAgYXBwbHlJbnNldCgpOwogIHZhciB0cmVlU1Q9U2Nyb2xsVHJpZ2dlci5jcmVhdGUoewogICAgdHJpZ2dlcjonLnRyZWUtc3RhZ2UnLCBzdGFydDpmdW5jdGlvbigpeyByZXR1cm4gJ3RvcCAnK3Bpbkluc2V0KydweCc7IH0sIGVuZDonKz0yMDAlJywKICAgIHBpbjonLnRyZWUtc3RhZ2UnLCBwaW5TcGFjaW5nOnRydWUsIHNjcnViOjAuNiwgICAvKiAyMDI2LTA5LTI5IOaLv+aOiSBhbnRpY2lwYXRlUGlu77ya5a6D5pyD5o6b5ru+6Lyq55uj6IG977yM5q+P5ru+5LiA5qC85bCx6YC85pW06aCB6YeN566XICovCiAgICBvblVwZGF0ZTpmdW5jdGlvbihzZWxmKXsgbW9ycGgoc2VsZi5wcm9ncmVzcyk7IH0sCiAgICBvblJlZnJlc2g6ZnVuY3Rpb24oc2VsZil7IGxheW91dFRyZWUoKTsgbW9ycGgoc2VsZi5wcm9ncmVzcyk7IGlmKHNlbGYucHJvZ3Jlc3M8MC4wMiAmJiBwZXJmb3JtYW5jZS5ub3coKS10eXBlVDA+NzAwKXsgcG9zdENoZWNrZWQ9dHJ1ZTsgcG9zdENoZWNrKCk7IH0gfQogIH0pOwoKICAvKiDilIDilIAg5raI5YyW6YGT77ya5aSn6IW45rK\/6JGX44CM5Y+z6YKK55WZ55m944CN5b6A5LiL6LWw77yIMjAyNi0wOS0yNSDlsI\/ohbjvvJrni5flnKjkuK3plpPmnIPok4vkvY\/mqJnpoYzlkozlv4PmmbrlnJbjgIHmu5HotbfkvobkuIDnm7TmipbvvInilIDilIAKICAgICDCtyDot6\/nt5rlnKjlj7PpgornlZnnmb3omZXovJXovJXlt6blj7Pmk7rvvIzkuI3ok4vliLDku7vkvZXlhaflrrkKICAgICDCtyDni5flm7rlrprlvoXlnKjnlavpnaLlkIzkuIDlgIvpq5jluqbvvIzmjbLli5XmmYLjgIznt6nnt6nov73kuIrjgI3vvIjmr4\/luYDmj5LlgLzvvInvvIzkuI3lho3lv73kuIrlv73kuIvjgIHkuI3lho3lt6blj7Pnv7vpnaIKICAgICDCtyDlj6rnlKggdHJhbnNmb3JtIOenu+WLle+8iEdQVSDlkIjmiJDvvInvvJvouqvlvozmi5bokZfmnIPmt6Hlh7rnmoTnt5rvvIjkuIPlsaTnloroibLvvIzotorov5Hotormt7HvvIkgKi8KICB2YXIgdHJhY3Q9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RyYWN0JyksIGRvZz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9nJyk7CiAgdmFyIGRvZ1NpZ249ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvZ3NpZ24nKTsKICBpZihkb2dTaWduKXsgZG9nU2lnbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpeyB2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3Vic2NyaWJlMicpOyBpZighdCkgcmV0dXJuOyBlLnByZXZlbnREZWZhdWx0KCk7IHdpbmRvdy5zY3JvbGxUbyh7dG9wOiB0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCt3aW5kb3cuc2Nyb2xsWS1NYXRoLnJvdW5kKGlubmVySGVpZ2h0KjAuMzgpLCBiZWhhdmlvcjonc21vb3RoJ30pOyB9KTsgfSAgIC8vIDIwMjYtMDktMjjvvJrmi5vniYzvvJ3lhY3osrvoqILplrHvvIzpu57kuobmu5HliLDpoIHlsL7liY3nmoTooajllq4KICAvKiAyMDI2LTA5LTI5IOWwj+iFuO+8muiogumWseS4gOatpeWujOaIkCDvvIwg6KGo5Zau55u05o6l6YCB6YCyIFN5c3RlbWXvvIjntrLnq5nlvoznq6\/ku6PpgIEgL3dwLWpzb24va2cvdjEvc3Vic2NyaWJl77yM6Lef6KiC6Zax6aCB5aGr6KGo5LiA5qij6LK85qiZ57Gk77yL5a+E5q2h6L+O5L+h77yJ77yM5LiN6Lez6aCB77yb5Luj6YCB5aSx5pWX5omN6YCA5Zue5Y6f5pys55qE6KiC6Zax6aCB77yM5LiN5ryP5ZCN5ZauICovCiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZm9ybVtkYXRhLWtnLW5sXScpLmZvckVhY2goZnVuY3Rpb24oZil7CiAgICB2YXIgaHA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsgaHAudHlwZT0ndGV4dCc7IGhwLm5hbWU9J3dlYnNpdGUnOyBocC50YWJJbmRleD0tMTsgaHAuYXV0b2NvbXBsZXRlPSdvZmYnOyBocC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywndHJ1ZScpOwogICAgaHAuc3R5bGUuY3NzVGV4dD0ncG9zaXRpb246YWJzb2x1dGU7bGVmdDotOTk5OXB4O3dpZHRoOjFweDtoZWlnaHQ6MXB4O29wYWNpdHk6MCc7IGYuYXBwZW5kQ2hpbGQoaHApOwogICAgdmFyIG9rRWw9KGYubmV4dEVsZW1lbnRTaWJsaW5nJiZmLm5leHRFbGVtZW50U2libGluZy5jbGFzc0xpc3QuY29udGFpbnMoJ25sb2snKSk\/IGYubmV4dEVsZW1lbnRTaWJsaW5nIDogbnVsbDsKICAgIHZhciBlcnJFbD0ob2tFbCYmb2tFbC5uZXh0RWxlbWVudFNpYmxpbmcmJm9rRWwubmV4dEVsZW1lbnRTaWJsaW5nLmNsYXNzTGlzdC5jb250YWlucygnbmxlcnInKSk\/IG9rRWwubmV4dEVsZW1lbnRTaWJsaW5nIDogbnVsbDsKICAgIGYuYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgZnVuY3Rpb24oZSl7CiAgICAgIHZhciBlbT1mLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ZW1haWxdJyksIG5tPWYucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT1maXJzdF9uYW1lXScpLCBidD1mLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvblt0eXBlPXN1Ym1pdF0nKTsKICAgICAgaWYoIWVtfHwhZW0udmFsdWV8fCF3aW5kb3cuZmV0Y2gpIHJldHVybjsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOyBpZihmLl9fYnVzeSkgcmV0dXJuOyBmLl9fYnVzeT10cnVlOwogICAgICB2YXIgbGFiZWw9YnQ\/IGJ0LmlubmVySFRNTCA6ICcnOyBpZihidCl7IGJ0LmRpc2FibGVkPXRydWU7IGJ0LnRleHRDb250ZW50PSfpgIHlh7rkuK3igKYnOyB9IGlmKGVyckVsKSBlcnJFbC5oaWRkZW49dHJ1ZTsKICAgICAgZnVuY3Rpb24gYmFjaygpeyBmLl9fYnVzeT1mYWxzZTsgaWYoYnQpeyBidC5kaXNhYmxlZD1mYWxzZTsgYnQuaW5uZXJIVE1MPWxhYmVsOyB9IH0KICAgICAgZnVuY3Rpb24gZmFsbGJhY2soKXsgYmFjaygpOyBmLnJlbW92ZUF0dHJpYnV0ZSgndGFyZ2V0Jyk7IGYuc3VibWl0KCk7IH0KICAgICAgZmV0Y2goJy93cC1qc29uL2tnL3YxL3N1YnNjcmliZScse21ldGhvZDonUE9TVCcsaGVhZGVyczp7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9uL2pzb24nfSxib2R5OkpTT04uc3RyaW5naWZ5KHtlbWFpbDplbS52YWx1ZS50cmltKCksZmlyc3RfbmFtZTpubT8gbm0udmFsdWUudHJpbSgpOicnLHdlYnNpdGU6aHAudmFsdWV9KX0pCiAgICAgICAgLnRoZW4oZnVuY3Rpb24ocil7IHJldHVybiByLmpzb24oKS50aGVuKGZ1bmN0aW9uKGopeyByZXR1cm4ge3N0OnIuc3RhdHVzLGo6an07IH0sIGZ1bmN0aW9uKCl7IHJldHVybiB7c3Q6ci5zdGF0dXMsajpudWxsfTsgfSk7IH0pCiAgICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzKXsKICAgICAgICAgIGlmKHJlcy5zdD09PTIwMCYmcmVzLmomJnJlcy5qLm9rKXsgZi5oaWRkZW49dHJ1ZTsgaWYob2tFbCkgb2tFbC5oaWRkZW49ZmFsc2U7IHJldHVybjsgfQogICAgICAgICAgaWYocmVzLnN0PT09NDAwJiZyZXMuaiYmcmVzLmouZXJyb3I9PT0nZW1haWwnKXsgYmFjaygpOyBpZihlcnJFbCkgZXJyRWwuaGlkZGVuPWZhbHNlOyBlbS5mb2N1cygpOyByZXR1cm47IH0KICAgICAgICAgIGZhbGxiYWNrKCk7CiAgICAgICAgfSkKICAgICAgICAuY2F0Y2goZmFsbGJhY2spOwogICAgfSk7CiAgfSk7CiAgLyogMjAyNi0wOS0yOCDlsI\/ohbjvvJrnrKzkuIDlsY\/lj6rnlZnkuIDlgIvli5XkvZzjgIzlhY3osrvoqILplrHjgI3ihpIg5Zyo6aaW6aCB5LiK77yM5oqK5YWo56uZ6aCB6aaW77yIV29yZFByZXNzIOevhOacrO+8ieeahOmCo+mhhuaMiemIleaUueaIkOmMqOm7nu+8muaNsuWIsOacgOS4iumdouOAgea4uOaomeaUvumAsiBFbWFpbCDmrITjgILlhbbku5bpoIHntq3mjIHnr4TmnKzmnKzouqvnmoTpgKPntZDvvIjoqILplrHpoIHvvIkgKi8KICAoZnVuY3Rpb24oKXsgdmFyIGY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YnNjcmliZScpOyBpZighZikgcmV0dXJuOwogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaGVhZGVyIGEsIC5lbGVtZW50b3ItbG9jYXRpb24taGVhZGVyIGEnKS5mb3JFYWNoKGZ1bmN0aW9uKGEpewogICAgICBpZighL+mgmOWFjeiyu+iqsnzlhY3osrvoqILplrEvLnRlc3QoYS50ZXh0Q29udGVudHx8JycpKSByZXR1cm47CiAgICAgIGlmKCFhLmNsb3Nlc3QoJy5oYS1jcmVhdGl2ZS1idXR0b24sIC5lbGVtZW50b3Itd2lkZ2V0LWhhLWNyZWF0aXZlLWJ1dHRvbiwgLmVsZW1lbnRvci13aWRnZXQtYnV0dG9uJykpIHJldHVybjsKICAgICAgYS5ocmVmPSdodHRwczovL2pvaW4ua25vd2xlZGdlZ3V0LmNvbS9qb2luLW5ld3NsZXR0ZXInOyBhLnJlbW92ZUF0dHJpYnV0ZSgndGFyZ2V0Jyk7ICAgLyogMjAyNi0wOS0yOSDmlYjog73vvJrkuI3og73nlKggI3N1YnNjcmliZSDvvIwgRWxlbWVudG9yIOeci+WIsOWQqyAjIOeahOmAo+e1kOWwseacg+WcqOavj+asoeaPm+Wtl+aZgumHjeeul+aVtOmggeS9jee9ru+8iOaNsuWLleWNoemgk+S4u+WboO+8ie+8m+m7nuaTiuS7jeeUseS4i+mdouaOpeaJi+aNsuWIsOmWi+WgtOihqOWWriAqLwogICAgICBhLmNoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbihuKXsgaWYobi5ub2RlVHlwZT09PTMgJiYgL+mgmOWFjeiyu+iqsnzlhY3osrvoqILplrEvLnRlc3Qobi5ub2RlVmFsdWUpKSBuLm5vZGVWYWx1ZT0n5YWN6LK76KiC6ZaxJzsgfSk7CiAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKXsgZS5wcmV2ZW50RGVmYXVsdCgpOyB3aW5kb3cuc2Nyb2xsVG8oe3RvcDowLCBiZWhhdmlvcjonc21vb3RoJ30pOyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHZhciBlbT1mLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ZW1haWxdJyk7IGlmKGVtKSBlbS5mb2N1cyh7cHJldmVudFNjcm9sbDp0cnVlfSk7IH0sIDY1MCk7IH0pOwogICAgfSk7IH0pKCk7CiAgLyogMjAyNi0wOS0yOSDmlYjog73vvJrnhKHpmZDlvqrnkrDnmoTlsI\/li5XnlavvvIjmmJ\/mmJ\/ploPjgIHpoIHlsL7lsI\/ohbjmvILjgIHpgKPnt5rlhYnpu57vvInkuI3lnKjnlavpnaLkuIrlsLHmmqvlgZzvvIzkuI3opoHmr4\/moLzpg73lnKjot5EgKi8KICBmdW5jdGlvbiBwYXVzZU9mZnNjcmVlbihzZWwsIHR3ZWVucyl7IHZhciB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsKTsgaWYoIXR8fCF0d2VlbnMubGVuZ3RoKSByZXR1cm47IGlmKCEoJ0ludGVyc2VjdGlvbk9ic2VydmVyJyBpbiB3aW5kb3cpKSByZXR1cm47CiAgICBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oZXMpeyBlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyB0d2VlbnMuZm9yRWFjaChmdW5jdGlvbih0dyl7IGlmKGUuaXNJbnRlcnNlY3RpbmcpIHR3LnBsYXkoKTsgZWxzZSB0dy5wYXVzZSgpOyB9KTsgfSk7IH0sIHtyb290TWFyZ2luOicyMDBweCAwcHgnfSkub2JzZXJ2ZSh0KTsgfQogIHZhciBzdmdOUz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCBzdmcsIHBhdGhGbG93LCB0cmFjdExlbj0wOwogIHZhciB0cmFpbExheWVycz1bXSwgVFJBSUxfTj03LCBUUkFJTD01MjAsIEhFQUQ9NDYsIHBhdGhIYWxvPW51bGwsIGRvZ0g9MDsKICB2YXIgUFRTPVtdLCBTVEVQPTYsIHRyVG9wPTAsIHRvcDA9MCwgcGF0aEVuZD0wLCBkb2dZPW51bGwsIGRvZ1RpbHQ9MCwgZG9nUkFGPTA7CiAgdmFyIEFOQ0hPUj0wLjQyOyAgIC8vIOeLl+W+heWcqOeVq+mdoueUseS4iuW+gOS4iyA0MiUg55qE6auY5bqmCiAgLyog5Zyo6Lev5b6R5LiK55WrIGHihpJiIOmAmeS4gOaute+8m+WkquefreWwseaVtOWAi+iXj+i1t+S+hu+8iOmBv+WFjeWck+mgree3muW4veiuiuaIkOS4gOmhhum7nu+8iSAqLwogIGZ1bmN0aW9uIHNlZyhwYXRoLGEsYil7CiAgICB2YXIgbD1iLWE7CiAgICBpZihsPDEpeyBwYXRoLnN0eWxlLnZpc2liaWxpdHk9J2hpZGRlbic7IHJldHVybjsgfQogICAgcGF0aC5zdHlsZS52aXNpYmlsaXR5PSd2aXNpYmxlJzsKICAgIHBhdGguc3R5bGUuc3Ryb2tlRGFzaGFycmF5PWwrJyAnKyh0cmFjdExlbisyMCk7CiAgICBwYXRoLnN0eWxlLnN0cm9rZURhc2hvZmZzZXQ9KC1hKTsKICB9CiAgLyog6LWw6YGO55qE6Lev5oWi5oWi5reh5Ye677ya5LiD5bGk5ZCE6Ieq5b6A5b6M5bu25Ly45LiN5ZCM6ZW35bqm77yM55aK6LW35L6G77yd54uX6Lqr6YKK5pyA5rex44CB5bC+5be05pyr56uv5pyA5rehICovCiAgZnVuY3Rpb24gc2V0VHJhaWwoTCl7CiAgICBmb3IodmFyIGs9MDtrPHRyYWlsTGF5ZXJzLmxlbmd0aDtrKyspewogICAgICBzZWcodHJhaWxMYXllcnNba10sIE1hdGgubWF4KDAsIEwgLSBUUkFJTCooaysxKS9UUkFJTF9OKSwgTCk7CiAgICB9CiAgICBpZihwYXRoRmxvdykgc2VnKHBhdGhGbG93LCBNYXRoLm1heCgwLCBMLUhFQUQpLCBMKTsgICAvLyDni5fpoK3nmoTmmpbph5HlhYkKICAgIGlmKHBhdGhIYWxvKSBzZWcocGF0aEhhbG8sIE1hdGgubWF4KDAsIEwtSEVBRCksIEwpOwogIH0KCiAgZnVuY3Rpb24gYnVpbGRUcmFjdCgpewogICAgaWYoIXRyYWN0fHwhZG9nKSByZXR1cm47CiAgICBpZihzdmcpeyBzdmcucmVtb3ZlKCk7IHN2Zz1udWxsOyB9CiAgICBpZighdHJhY3QuY2xpZW50V2lkdGgpeyBQVFM9W107IHJldHVybjsgfSAgIC8vIOieouW5leWkqueqhOOAgeeLl+iiq+iXj+i1t+S+huaZguS4jeeul+i3r+e3mgogICAgLyog5bqn5qiZ5Lul44CM5raI5YyW6YGT5ZyW5bGk5pys6Lqr44CN54K65Z+65rqW77ya5pys5qmf54mI5a6D5ZyoIGJvZHkg5pyA5LiK5pa577ybV29yZFByZXNzIOeJiOWcqOe2suermemggemmluS4i+aWuSAqLwogICAgdHJUb3A9dHJhY3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgd2luZG93LnNjcm9sbFk7CiAgICB2YXIgZmluPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5maW5hbGUnKTsKICAgIHBhdGhFbmQ9KGZpbj8gZmluLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIHdpbmRvdy5zY3JvbGxZIC0gdHJUb3AgLSA0MCA6IHRyYWN0LmNsaWVudEhlaWdodCk7CiAgICB2YXIgVz10cmFjdC5jbGllbnRXaWR0aDsKICAgIHZhciBuYXZFbD10cmFjdC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJzpzY29wZSA+IC5uYXYnKTsgICAvLyDlj6roqo3mnKzpoIHoh6rlt7HnmoTlsI7opr3liJfvvIhXb3JkUHJlc3Mg54mI5bey5ou\/5o6J77yJCiAgICB0b3AwPW5hdkVsPyAobmF2RWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tICsgd2luZG93LnNjcm9sbFkgLSB0clRvcCArIDMwKSA6IDUwOwogICAgLyog5Y+z6YKK55WZ55m955qE5Lit57ea77ya54uX55qE5Y+z57ej6Zui55Wr6Z2i6YKKIDI0cHjvvIzlho3nlZkgMTBweCDntablt6blj7Pmk7rli5UgKi8KICAgIHZhciBhbXA9MTAsIGN4PVcgLSBkb2cub2Zmc2V0V2lkdGgvMiAtIDI0IC0gYW1wLCBwZXJpb2Q9OTAwOwogICAgUFRTPVtdOyB2YXIgZD0nJywgTD0wLCBweD0wLCBweT0wOwogICAgZm9yKHZhciB5PXRvcDA7IHk8PXBhdGhFbmQ7IHkrPVNURVApewogICAgICB2YXIgeD1jeCArIGFtcCpNYXRoLnNpbigoeS10b3AwKS9wZXJpb2QqTWF0aC5QSSoyKTsKICAgICAgaWYoUFRTLmxlbmd0aCl7IEwrPU1hdGguc3FydCgoeC1weCkqKHgtcHgpKyh5LXB5KSooeS1weSkpOyB9CiAgICAgIFBUUy5wdXNoKHt4OngseTp5LEw6TH0pOwogICAgICBkKz0oUFRTLmxlbmd0aD09PTE\/J00gJzonIEwgJykreC50b0ZpeGVkKDEpKycgJyt5LnRvRml4ZWQoMSk7CiAgICAgIHB4PXg7IHB5PXk7CiAgICB9CiAgICB0cmFjdExlbj1MOwogICAgdmFyIFNIPU1hdGgubWF4KDEscGF0aEVuZCsyMCk7CiAgICBzdmc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCdzdmcnKTsKICAgIHN2Zy5zZXRBdHRyaWJ1dGUoJ3dpZHRoJyxXKTsgc3ZnLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JyxTSCk7CiAgICBzdmcuc2V0QXR0cmlidXRlKCd2aWV3Qm94JywnMCAwICcrVysnICcrU0gpOwogICAgdmFyIGRlZnM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCdkZWZzJyk7CiAgICBkZWZzLmlubmVySFRNTD0nPGZpbHRlciBpZD0iZ2xvdyIgeD0iLTYwJSIgeT0iLTYwJSIgd2lkdGg9IjIyMCUiIGhlaWdodD0iMjIwJSI+JysKICAgICAgICAnPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNiIgcmVzdWx0PSJiIi8+JysKICAgICAgICAnPGZlTWVyZ2U+PGZlTWVyZ2VOb2RlIGluPSJiIi8+PGZlTWVyZ2VOb2RlIGluPSJiIi8+PGZlTWVyZ2VOb2RlIGluPSJTb3VyY2VHcmFwaGljIi8+PC9mZU1lcmdlPicrCiAgICAgICc8L2ZpbHRlcj4nOwogICAgc3ZnLmFwcGVuZENoaWxkKGRlZnMpOwogICAgdHJhaWxMYXllcnM9W107CiAgICBmb3IodmFyIGs9MDtrPFRSQUlMX047aysrKXsKICAgICAgdmFyIHRwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdOUywncGF0aCcpOwogICAgICB0cC5zZXRBdHRyaWJ1dGUoJ2QnLGQpOyB0cC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywndHJhaWwnKTsKICAgICAgc3ZnLmFwcGVuZENoaWxkKHRwKTsgdHJhaWxMYXllcnMucHVzaCh0cCk7CiAgICB9CiAgICBwYXRoSGFsbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoc3ZnTlMsJ3BhdGgnKTsgcGF0aEhhbG8uc2V0QXR0cmlidXRlKCdkJyxkKTsgcGF0aEhhbG8uc2V0QXR0cmlidXRlKCdjbGFzcycsJ2hhbG8nKTsgc3ZnLmFwcGVuZENoaWxkKHBhdGhIYWxvKTsgICAvKiAyMDI2LTA5LTI5IOaViOiDve+8muWFieaaiCAqLwogICAgcGF0aEZsb3c9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCdwYXRoJyk7CiAgICBwYXRoRmxvdy5zZXRBdHRyaWJ1dGUoJ2QnLGQpOyBwYXRoRmxvdy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywnZmxvdycpOwogICAgc3ZnLmFwcGVuZENoaWxkKHBhdGhGbG93KTsKICAgIHRyYWN0LmFwcGVuZENoaWxkKHN2Zyk7CiAgICBkb2dIPWRvZy5vZmZzZXRIZWlnaHR8fDA7ICAgLyogMjAyNi0wOS0yOSDmlYjog73vvJrni5fpq5jluqbph4\/kuIDmrKHlrZjotbfkvobvvIzmr4\/moLzkuI3lho3oroAgKi8KICAgIHNldFRyYWlsKDApOwogICAgZG9nWT1udWxsOyAgICAgICAgICAgLy8g6YeN5bu65b6M54uX55u05o6l5bCx5a6a5L2N77yM5LiN5b6e6IiK5L2N572u6aOb6YGO5L6GCiAgICB0aWNrRG9nKCk7CiAgfQogIC8qIOS+nemrmOW6piB5IOWcqOaKmOe3muS4iuaJvuWwjeaHieeahOm7nu+8iHgg6IiH6LWw6YGO55qE6ZW35bqmIEzvvIkgKi8KICBmdW5jdGlvbiBwb2ludEF0WSh5KXsKICAgIHZhciBpPU1hdGguZmxvb3IoKHktdG9wMCkvU1RFUCk7CiAgICBpZihpPDApIHJldHVybiBQVFNbMF07CiAgICBpZihpPj1QVFMubGVuZ3RoLTEpIHJldHVybiBQVFNbUFRTLmxlbmd0aC0xXTsKICAgIHZhciBhPVBUU1tpXSwgYj1QVFNbaSsxXSwgdD0oeS1hLnkpLyhiLnktYS55KTsKICAgIHJldHVybiB7eDphLngrKGIueC1hLngpKnQsIHk6eSwgTDphLkwrKGIuTC1hLkwpKnR9OwogIH0KICBmdW5jdGlvbiB0aWNrRG9nKCl7CiAgICBkb2dSQUY9MDsKICAgIGlmKCFQVFMubGVuZ3RoKSByZXR1cm47CiAgICB2YXIgdHk9TWF0aC5tYXgodG9wMCwgTWF0aC5taW4ocGF0aEVuZCwgd2luZG93LnNjcm9sbFkgKyBpbm5lckhlaWdodCpBTkNIT1IgLSB0clRvcCkpOwogICAgaWYoZG9nWT09PW51bGwpIGRvZ1k9dHk7CiAgICB2YXIgZHk9dHktZG9nWTsKICAgIGRvZ1krPWR5KjAuMTY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g57ep57ep6L+95LiK77ya5LiN5oqW44CB5pyJ5LiA6bue6Lef6JGX6LeR55qE5oSf6Ka6CiAgICBpZihNYXRoLmFicyhkeSk8MC4zKSBkb2dZPXR5OwogICAgdmFyIHA9cG9pbnRBdFkoZG9nWSk7CiAgICB2YXIgdGlsdFRvPU1hdGgubWF4KC05LCBNYXRoLm1pbig5LCAtZHkqMC4wNSkpOyAgIC8vIOW+gOS4i+i3ke+8nem8u+WtkOW+ruW+ruacneS4i++8jOWBnOS4i+S+huWwseaTuuatowogICAgZG9nVGlsdCs9KHRpbHRUby1kb2dUaWx0KSowLjI7CiAgICAvKiDni5fljp\/lnJbmnJ3lj7Mg4oaSIHNjYWxlWCgtMSkg57+75oiQ5pyd5bem77yM6Z2i5ZCR5q2j5Zyo6K6A55qE5YWn5a65ICovCiAgICBkb2cuc3R5bGUudHJhbnNmb3JtPSd0cmFuc2xhdGUzZCgnK3AueC50b0ZpeGVkKDEpKydweCwnK3AueS50b0ZpeGVkKDEpKydweCwwKSB0cmFuc2xhdGUoLTUwJSwtNTAlKSByb3RhdGUoJytkb2dUaWx0LnRvRml4ZWQoMikrJ2RlZykgc2NhbGVYKC0xKSc7CiAgICBpZihkb2dTaWduKXsgZG9nU2lnbi5zdHlsZS50cmFuc2Zvcm09J3RyYW5zbGF0ZTNkKCcrcC54LnRvRml4ZWQoMSkrJ3B4LCcrKHAueSsoZG9nSHx8ZG9nLm9mZnNldEhlaWdodCkqMC41KzIyKS50b0ZpeGVkKDEpKydweCwwKSB0cmFuc2xhdGUoLTUwJSwtNTAlKSByb3RhdGUoJysoZG9nVGlsdCowLjYpLnRvRml4ZWQoMikrJ2RlZyknOyB9ICAgLy8g5oub54mM5ZCK5Zyo54uX6Lqr5LiL44CB6Lef6JGX6LeRCiAgICBzZXRUcmFpbChwLkwpOwogICAgaWYoTWF0aC5hYnMoZHkpPj0wLjMgfHwgTWF0aC5hYnModGlsdFRvLWRvZ1RpbHQpPjAuMDUpeyBkb2dSQUY9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2tEb2cpOyB9CiAgfQogIGFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZ1bmN0aW9uKCl7IGlmKCFkb2dSQUYpIGRvZ1JBRj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGlja0RvZyk7IH0sIHtwYXNzaXZlOnRydWV9KTsKICBidWlsZFRyYWN0KCk7CiAgLyog54mI6Z2i6YeN5o6S77yI6KiY5oa25qi56YeY5L2P44CB6KaW56qX57iu5pS+44CB5a2X5Z6L6LyJ5YWl77yJ5LmL5b6M6YeN55Wr6Lev57ea77yb5LiN5YaN56CN5o6J5YWo6YOo5YuV55Wr6YeN5L6GICovCiAgU2Nyb2xsVHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCdyZWZyZXNoJywgYnVpbGRUcmFjdCk7CgogIGZ1bmN0aW9uIGluaXRTY2VuZXMoKXsKICAgIC8qIOKUgOKUgCDlhaXlj6PvvJrpm5zoqIrooqvlvoDkuIvlkLgg4pSA4pSAICovCiAgICBnc2FwLnV0aWxzLnRvQXJyYXkoJy5ueicpLmZvckVhY2goZnVuY3Rpb24oZWwsaSl7CiAgICAgIGdzYXAudG8oZWwsIHsKICAgICAgICB5UGVyY2VudDogMTIwICsgKGklNCkqODAsIHhQZXJjZW50OihpJTI\/LTE0OjEyKSwgcm90YXRlOihpJTI\/MTA6LTEwKSwgYXV0b0FscGhhOjAsCiAgICAgICAgZWFzZTonbm9uZScsCiAgICAgICAgc2Nyb2xsVHJpZ2dlcjp7dHJpZ2dlcjonLmludGFrZScsIHN0YXJ0Oid0b3AgdG9wJywgZW5kOidib3R0b20gMzAlJywgc2NydWI6LjZ9CiAgICAgIH0pOwogICAgfSk7CiAgICAvKiDwn5S0IOWwj+iFuOimgeS6uueJqeS4gOi8ieWFpeWwseWcqO+8iDIwMjYtMDktMjTvvInvvJrmiorlpbnmjpLpmaTlnKjpgJDpoIXpgLLloLTkuYvlpJbvvIwKICAgICAgIOWPque1puS4gOWAi+W+iOefreeahOaUvuWkp+WumuS9je+8jOS4jei3n+iRl+aWh+Wtl+aOkumaiiAqLwogICAgZ3NhcC5mcm9tKCcuaW50YWtlIC5jb3JlID4gKjpub3QoLmd1aWRlKScsIHt5OjI2LCBhdXRvQWxwaGE6MCwgZHVyYXRpb246LjgsIGVhc2U6J3Bvd2VyMy5vdXQnLCBzdGFnZ2VyOi4xMiwgZGVsYXk6LjE1fSk7CiAgICBnc2FwLmZyb20oJy5pbnRha2UgLmd1aWRlJywge3NjYWxlOi45LCBhdXRvQWxwaGE6MCwgZHVyYXRpb246LjQ1LCBlYXNlOidiYWNrLm91dCgxLjQpJywgZGVsYXk6MH0pOwogICAgcGF1c2VPZmZzY3JlZW4oJy5pbnRha2UnLCBbZ3NhcC50bygnLmludGFrZSAuaGludCBiJywge3k6NywgZHVyYXRpb246Ljg1LCBlYXNlOidzaW5lLmluT3V0JywgeW95bzp0cnVlLCByZXBlYXQ6LTF9KV0pOwoKICAgIC8qIOKUgOKUgCDnq5npu57vvJrmloflrZflgbTmjqjpgLLjgIHlnJblgbTlj43lkJHmvILnp7vvvIjmjbLli5XpqYXli5XvvIkg4pSA4pSAICovCiAgICBnc2FwLnV0aWxzLnRvQXJyYXkoJy5zdGF0aW9uJykuZm9yRWFjaChmdW5jdGlvbihzZWMpewogICAgICBpZihzZWMuY2xhc3NMaXN0LmNvbnRhaW5zKCdtbXNlYycpKSByZXR1cm47ICAgLy8g5b+D5pm65ZyW56uZ5pyJ6Ieq5bex55qE5YuV55Wr77yM55Wl6YGOCiAgICAgIHZhciB0eHQgPSBzZWMucXVlcnlTZWxlY3RvcignLmluID4gZGl2OmZpcnN0LWNoaWxkJyk7CiAgICAgIHZhciB2aXMgPSBzZWMucXVlcnlTZWxlY3RvcignLmluID4gZGl2Omxhc3QtY2hpbGQnKTsKICAgICAgaWYodHh0KSBnc2FwLmZyb20odHh0LCB7eTo0NCwgYXV0b0FscGhhOjAsIGR1cmF0aW9uOi44NSwgZWFzZToncG93ZXIzLm91dCcsCiAgICAgICAgc2Nyb2xsVHJpZ2dlcjp7dHJpZ2dlcjpzZWMsIHN0YXJ0Oid0b3AgNzQlJywgb25jZTp0cnVlfX0pOwogICAgICBpZih2aXMpIGdzYXAuZnJvbSh2aXMsIHt5OjY0LCBhdXRvQWxwaGE6MCwgc2NhbGU6Ljk0LCBkdXJhdGlvbjouOTUsIGVhc2U6J3Bvd2VyMy5vdXQnLCBkZWxheTouMSwKICAgICAgICBzY3JvbGxUcmlnZ2VyOnt0cmlnZ2VyOnNlYywgc3RhcnQ6J3RvcCA3NCUnLCBvbmNlOnRydWV9fSk7CiAgICAgIGlmKHZpcykgZ3NhcC50byh2aXMsIHt5UGVyY2VudDotOSwgZWFzZTonbm9uZScsCiAgICAgICAgc2Nyb2xsVHJpZ2dlcjp7dHJpZ2dlcjpzZWMsIHN0YXJ0Oid0b3AgYm90dG9tJywgZW5kOidib3R0b20gdG9wJywgc2NydWI6Ljh9fSk7CiAgICAgIHZhciBobCA9IHNlYy5xdWVyeVNlbGVjdG9yQWxsKCcuaGw6OmFmdGVyLCAuaGwnKTsKICAgICAgc2VjLnF1ZXJ5U2VsZWN0b3JBbGwoJy5obCcpLmZvckVhY2goZnVuY3Rpb24oaCl7CiAgICAgICAgZ3NhcC50byhoLCB7Jy0teCc6MSwgZHVyYXRpb246MCwKICAgICAgICAgIHNjcm9sbFRyaWdnZXI6e3RyaWdnZXI6aCwgc3RhcnQ6J3RvcCA4MiUnLCBvbmNlOnRydWUsCiAgICAgICAgICAgIG9uRW50ZXI6ZnVuY3Rpb24oKXsgaC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1vbicsJzEnKTsgaC5jbGFzc0xpc3QuYWRkKCdvbicpOyB9fX0pOwogICAgICB9KTsKICAgIH0pOwoKICAgIC8qIOieouWFieethu+8muaNsuWIsOaJjeWIt+mBjuWOuyAqLwogICAgdmFyIHN0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CiAgICBzdC50ZXh0Q29udGVudD0nLmhsLm9uOjphZnRlcnt0cmFuc2Zvcm06c2NhbGVYKDEpO3RyYW5zaXRpb246dHJhbnNmb3JtIC41NXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSl9JzsKICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3QpOwoKICAgIC8qIOKUgOKUgCDlkLjmlLbvvJrppIrliIbpoYbnspLooqvlkLjpgLLnhafniYcg4pSA4pSAICovCiAgICB2YXIgZz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ3JhaW5zJyk7CiAgICBpZihnICYmICFnLmNoaWxkRWxlbWVudENvdW50KXsKICAgICAgLy8g5YWs5Y+444CM6I+x5b2i6ZaD54iN44CN5q+N5pys6Lev5b6R77yI576O6IW4IGRvb2RsZSDlhYPku7bluqsgMDA077yJ77yM5ZOB54mM6Imy6Lyq5pu\/CiAgICAgIHZhciBTVEFSPSdNMzUgMTIgQzM3IDI4IDQyIDMzIDU4IDM1IEM0MiAzNyAzNyA0MiAzNSA1OCBDMzMgNDIgMjggMzcgMTIgMzUgQzI4IDMzIDMzIDI4IDM1IDEyWic7CiAgICAgIHZhciBDT0xPUlM9WycjRUJFNzlEJywnI0QxNEI2MycsJyNGNEI3OUMnLCcjQjhENkY1JywnIzRDNDU4QSddOwogICAgICB2YXIgU0laRVM9WzEzLDE4LDIzLDI4LDM0XTsKICAgICAgdmFyIGdmPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdncmFpbnNGcm9udCcpOwogICAgICAvLyDnkrDni4DmkpLpu57vvJrpgb\/plovmraPkuK3lpK7vvIjnhafniYflnKjpgqPvvInvvIzorpPmmJ\/mmJ\/nuZ7okZfnhafniYfploMKICAgICAgZm9yKHZhciBpPTA7aTwyNjtpKyspewogICAgICAgIHZhciBzcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CiAgICAgICAgc3AuY2xhc3NOYW1lPSdncmFpbic7CiAgICAgICAgdmFyIHN6PVNJWkVTW2klU0laRVMubGVuZ3RoXTsKICAgICAgICBzcC5zdHlsZS53aWR0aD1zeisncHgnOyBzcC5zdHlsZS5oZWlnaHQ9c3orJ3B4JzsKICAgICAgICB2YXIgYW5nPShpLzI2KSpNYXRoLlBJKjIgKyBNYXRoLnJhbmRvbSgpKjAuNDI7CiAgICAgICAgdmFyIHJhZD0wLjMzK01hdGgucmFuZG9tKCkqMC4xOTsgICAgICAgICAgIC8vIOiyvOiRl+eFp+eJh+WkluWcjeS4gOWciAogICAgICAgIHNwLnN0eWxlLmxlZnQ9KDUwK01hdGguY29zKGFuZykqcmFkKjEwMCkrJyUnOwogICAgICAgIHNwLnN0eWxlLnRvcCA9KDUwK01hdGguc2luKGFuZykqcmFkKjEwNCkrJyUnOwogICAgICAgIHZhciBjb2w9Q09MT1JTW2klQ09MT1JTLmxlbmd0aF07CiAgICAgICAgdmFyIHN0cm9rZSA9IChpJTQ9PT0wKSA\/ICc8cGF0aCBkPSInK1NUQVIrJyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjRDE0QjYzIiBzdHJva2Utd2lkdGg9IjMiLz4nIDogJyc7CiAgICAgICAgc3AuaW5uZXJIVE1MPSc8c3ZnIHZpZXdCb3g9IjAgMCA3MCA3MCI+PHBhdGggZD0iJytTVEFSKyciIGZpbGw9IicrY29sKyciLz4nK3N0cm9rZSsnPC9zdmc+JzsKICAgICAgICAvLyDkuIDljYrlnKjnhafniYfliY3pnaLploPvvIjlg4\/miZPlnKjooajpnaLnmoTlhYnvvInvvIzkuIDljYrlnKjlvozpnaLvvIjmraPlnKjooqvlkLjpgLLljrvvvIkKICAgICAgICAoaSUyICYmIGdmID8gZ2YgOiBnKS5hcHBlbmRDaGlsZChzcCk7CiAgICAgIH0KICAgICAgdmFyIHR3aW5rbGVzPVtdOwogICAgICBnc2FwLnV0aWxzLnRvQXJyYXkoJy5ncmFpbicpLmZvckVhY2goZnVuY3Rpb24oZWwsaSl7CiAgICAgICAgLy8g5o2y5YuV5pmC6KKr44CM5ZC444CN6YCy54Wn54mHCiAgICAgICAgZ3NhcC5mcm9tVG8oZWwsIHt4OihpJTI\/LTc4Ojc4KSwgeTooaSUzLTEpKjYyLCBhdXRvQWxwaGE6MCwgc2NhbGU6LjMsIHJvdGF0aW9uOihpJTI\/LTkwOjkwKX0sCiAgICAgICAgICB7eDowLHk6MCxhdXRvQWxwaGE6MSxzY2FsZToxLHJvdGF0aW9uOjAsIGVhc2U6J25vbmUnLAogICAgICAgICAgIHNjcm9sbFRyaWdnZXI6e3RyaWdnZXI6Jy5hYnNvcmItdmlzdWFsJywgc3RhcnQ6J3RvcCA5MCUnLCBlbmQ6J2NlbnRlciA0NCUnLCBzY3J1YjouN319KTsKICAgICAgICAvLyDkuq7mmbbmmbbmnKzpq5TvvJrkuIDploPkuIDploPvvIzpgornt6PohIbjgIHkuI3ns4oKICAgICAgICB0d2lua2xlcy5wdXNoKGdzYXAudG8oZWwsIHsKICAgICAgICAgIHNjYWxlOmZ1bmN0aW9uKCl7cmV0dXJuIDAuNDIrTWF0aC5yYW5kb20oKSowLjV9LAogICAgICAgICAgcm90YXRpb246Jys9OTAnLAogICAgICAgICAgZHVyYXRpb246MC41K01hdGgucmFuZG9tKCkqMC43LAogICAgICAgICAgZWFzZToncG93ZXIxLmluT3V0JywKICAgICAgICAgIHlveW86dHJ1ZSwgcmVwZWF0Oi0xLCBkZWxheTpNYXRoLnJhbmRvbSgpKjEuNgogICAgICAgIH0pKTsKICAgICAgfSk7CiAgICAgIHBhdXNlT2Zmc2NyZWVuKCcuYWJzb3JiLXZpc3VhbCcsIHR3aW5rbGVzKTsKICAgIH0KCiAgICAvKiDilIDilIAg5pW45a2XIOKUgOKUgCAqLwogICAgZ3NhcC51dGlscy50b0FycmF5KCdbZGF0YS1jb3VudF0nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpewogICAgICB2YXIgdGFyZ2V0PXBhcnNlSW50KGIuZGF0YXNldC5jb3VudCwxMCksIG89e3Y6MH07CiAgICAgIGdzYXAudG8obyx7djp0YXJnZXQsIGR1cmF0aW9uOjEuMywgZWFzZToncG93ZXIyLm91dCcsCiAgICAgICAgc2Nyb2xsVHJpZ2dlcjp7dHJpZ2dlcjpiLCBzdGFydDondG9wIDkwJScsIG9uY2U6dHJ1ZX0sCiAgICAgICAgb25VcGRhdGU6ZnVuY3Rpb24oKXsgYi50ZXh0Q29udGVudD1NYXRoLnJvdW5kKG8udikudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJykrJysnOyB9fSk7CiAgICB9KTsKCiAgICAvKiDilIDilIAg5Ye65Y+j77ya5p6c5a+m5LiA6aGG6aGG5o6J5LiL5L6GIOKUgOKUgCAqLwogICAgLyog8J+UtCDmlofnq6DljaHpgLLloLTvvIgyMDI2LTA5LTI1IOS\/ru+8ie+8mkNTUyDmnInjgIzmu5HpvKDnp7vkuIrljrvmta7otbfjgI3nmoQgdHJhbnNmb3JtIOi9ieWgtO+8jOacg+i3nyBHU0FQIOaQtuS9jee9ru+8jAogICAgICAgZnJvbSgpIOeahOe1gum7nuiiq+iomOaIkCArMzhweO+8jOWbm+W8teWNoeawuOmBoOW+gOS4i+WHuOOAgeWjk+WIsOS4i+mdoueahOOAjOeci+WFqOmDqOaWh+eroOOAjeaMiemIle+8iOioreioiOeov+WOn+acrOWwseacie+8ieOAggogICAgICAg5pS55oiQIGZyb21UbyDmmI7norrntYLpu57jgIHli5XnlavmnJ\/plpPlhYjpl5wgQ1NTIOi9ieWgtO+8jOi3keWujOaKiuaOp+WItuasiumChOe1pua7kem8oOa1rui1t+aViOaenOOAgiAqLwogICAgLyog5a245ZOh6Kqq77ya5Y2h54mH5L6d5bqP5rWu5LiK5L6G77yIZnJvbVRvIOaYjueiuue1gum7nu+8i+i3keWujOa4heaOie+8jOS4jemHjei5iOaWh+eroOWNoeWNoeWcqOWNiui3r+eahOimhui9je+8iSAqLwogICAgZ3NhcC5mcm9tVG8oJy52Jywge3k6MzAsIGF1dG9BbHBoYTowfSwge3k6MCwgYXV0b0FscGhhOjEsIGR1cmF0aW9uOi43LCBlYXNlOidwb3dlcjMub3V0Jywgc3RhZ2dlcjouMDgsCiAgICAgIGNsZWFyUHJvcHM6J3RyYW5zZm9ybScsCiAgICAgIHNjcm9sbFRyaWdnZXI6e3RyaWdnZXI6Jy52Z3JpZCcsIHN0YXJ0Oid0b3AgODQlJywgb25jZTp0cnVlfX0pOwoKICAgIGdzYXAuc2V0KCcub3V0Jywge3RyYW5zaXRpb246J25vbmUnfSk7CiAgICBnc2FwLmZyb21UbygnLm91dCcsIHt5OjM4LCBhdXRvQWxwaGE6MH0sIHt5OjAsIGF1dG9BbHBoYToxLCBkdXJhdGlvbjouNywgZWFzZTonYmFjay5vdXQoMS4yKScsIHN0YWdnZXI6LjEsCiAgICAgIGNsZWFyUHJvcHM6J3RyYW5zZm9ybSx0cmFuc2l0aW9uJywKICAgICAgc2Nyb2xsVHJpZ2dlcjp7dHJpZ2dlcjonLm91dHB1dHMnLCBzdGFydDondG9wIDgyJScsIG9uY2U6dHJ1ZX19KTsKCiAgICAvKiDilIDilIAg57WC6bueIOKUgOKUgCAqLwogICAgZ3NhcC5mcm9tKCcuZmluYWxlIC5zaGVldCcsIHt5OjQ0LCBhdXRvQWxwaGE6MCwgZHVyYXRpb246LjksIGVhc2U6J3Bvd2VyMy5vdXQnLAogICAgICBzY3JvbGxUcmlnZ2VyOnt0cmlnZ2VyOicuZmluYWxlJywgc3RhcnQ6J3RvcCA4MCUnLCBvbmNlOnRydWV9fSk7CiAgICBwYXVzZU9mZnNjcmVlbignLmZpbmFsZScsIFtnc2FwLnRvKCcuZmluYWxlIC5jaGFyJywge3k6Jy09MTAnLCByb3RhdGlvbjonKz0yLjUnLCBkdXJhdGlvbjoyLjMsIGVhc2U6J3NpbmUuaW5PdXQnLCB5b3lvOnRydWUsIHJlcGVhdDotMX0pXSk7CiAgfQogIGluaXRTY2VuZXMoKTsKICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IFNjcm9sbFRyaWdnZXIucmVmcmVzaCgpOyB9LCAzNTApOwogIGFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpeyBTY3JvbGxUcmlnZ2VyLnJlZnJlc2goKTsgfSk7Cn0pKCk7Cg==');})()<\/script>\n","protected":false},"excerpt":{"rendered":"<p>\u514d\u8cbb\u8a02\u95b1 \u2192 \u55e8\uff0c\u6211\u662f\u5c0f\u8178\u3002 AI \u7b2c\u4e8c\u5927\u8166\u30fb\u77e5\u8b58\u7ba1\u7406\u8001\u5e2b \u6559\u4f60\u904b\u7528 AI Agent \u628a\u77e5\u8b58\u8b8a\u8cc7\u7522\uff0c\u8b93\u7d93\u9a57\u53ef [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"iawp_total_views":156,"footnotes":""},"class_list":["post-7880","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/knowledgegut.com\/en\/wp-json\/wp\/v2\/pages\/7880","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/knowledgegut.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/knowledgegut.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/knowledgegut.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/knowledgegut.com\/en\/wp-json\/wp\/v2\/comments?post=7880"}],"version-history":[{"count":74,"href":"https:\/\/knowledgegut.com\/en\/wp-json\/wp\/v2\/pages\/7880\/revisions"}],"predecessor-version":[{"id":8073,"href":"https:\/\/knowledgegut.com\/en\/wp-json\/wp\/v2\/pages\/7880\/revisions\/8073"}],"wp:attachment":[{"href":"https:\/\/knowledgegut.com\/en\/wp-json\/wp\/v2\/media?parent=7880"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}