{"id":9446,"date":"2026-10-08T01:32:24","date_gmt":"2026-10-07T23:32:24","guid":{"rendered":"https:\/\/dorelaiepan.com\/good-seeds\/"},"modified":"2026-10-16T07:00:04","modified_gmt":"2026-10-16T05:00:04","slug":"good-seeds","status":"publish","type":"page","link":"https:\/\/dorelaiepan.com\/fr\/good-seeds\/","title":{"rendered":"Good Seeds"},"content":{"rendered":"<title>Good Seeds<\/title>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Alegreya:ital,wght@0,500;0,700;1,500&#038;family=Nunito+Sans:opsz,wght@6..12,400;6..12,600;6..12,700&#038;display=swap\"><style>#sb button,#sb input,#sb textarea{font:inherit;color:inherit;margin:0;box-shadow:none;text-transform:none;letter-spacing:normal;text-shadow:none;min-height:0;min-width:0;line-height:inherit}\n#sb button{background:none;border:0;border-radius:0;padding:0}\n#sb h1,#sb h2,#sb h3,#sb h4,#sb strong,#sb b{color:inherit;letter-spacing:normal;text-transform:none;padding:0}\n#sb a{box-shadow:none}\nbody.admin-bar #sb{height:calc(100dvh - 46px);margin-top:0}\n@media (min-width:783px){body.admin-bar #sb{height:calc(100dvh - 32px)}}\n\/* Good Seeds: sister of Semin\u021be Bune. Same shell; palette moved to deep lagoon teal + terracotta on warm ivory, brand pink only as a tiny accent. *\/\n:root{\n  --bg:#F6F2EC; --surface:#FFFFFF; --ink:#22313A; --muted:#66727A; --line:#E3DCD2;\n  --moss:#2E6E73; --moss-soft:#DCEBEA; --soil:#B35E39; --soil-soft:#F5E5DA;\n  --header:#1D383E; --on-header:#F6F2EC; --danger:#A1422F; --accent:#FC1370;\n  color-scheme:only light;\n  --display:\"Alegreya\", Georgia, \"Times New Roman\", serif;\n  --body:\"Nunito Sans\", \"Segoe UI\", system-ui, -apple-system, sans-serif;\n}\nhtml{color-scheme:only light;background:#F6F2EC;height:100%;overflow:hidden}\nhtml,body{height:100%}\nbody{background:var(--bg);color:var(--ink);font-family:var(--body);font-size:16px;line-height:1.5;margin:0;padding:0;overflow:hidden}\n[hidden]{display:none!important}\n*{box-sizing:border-box}\n#sb button,#sb input{font:inherit;color:inherit}\n#sb button{cursor:pointer;width:auto}\n:focus-visible{outline:2px solid var(--moss);outline-offset:2px}\n#sb .brand .seed{fill:var(--accent);stroke:none}\n#sb .hd-actions{display:flex;gap:8px;align-items:center}\n#sb .langbtn{background:transparent;color:var(--on-header);border:1px solid color-mix(in srgb,var(--on-header) 40%,transparent);border-radius:999px;padding:6px 10px;font-size:.78rem;font-weight:700;letter-spacing:.06em;display:inline-flex;align-items:center;gap:6px}\n#sb .langlist{display:flex;flex-direction:column;gap:8px}\n#sb .langlist button{display:flex;justify-content:space-between;align-items:center;text-align:left;border:1px solid var(--line);background:var(--bg);border-radius:12px;padding:14px 16px;font-size:1rem}\n#sb .langlist button[aria-pressed=\"true\"]{background:var(--moss-soft);border-color:var(--moss);font-weight:700}\n#sb .langlist button[disabled]{opacity:.55;cursor:default}\n#sb .langlist small{font-size:.75rem;color:var(--muted);font-weight:600}\n#sb .objpanel.short{height:auto;max-height:78%}\n#sb nav.bar button[aria-current=\"page\"]::after{content:\"\";width:4px;height:4px;border-radius:50%;background:var(--accent);margin-top:1px}\n#sb nav.bar .plant[aria-current=\"page\"]::after{display:none}\n#sb{color:var(--ink);font-family:var(--body);font-size:16px;line-height:1.5;height:100vh;height:calc(100dvh - env(safe-area-inset-top,0px) - env(safe-area-inset-bottom,0px));margin-top:env(safe-area-inset-top,0px);display:flex;flex-direction:column;max-width:560px;margin:0 auto;background:var(--bg)}\n#sb header.top{background:var(--header);color:var(--on-header);padding:14px 16px 16px;display:flex;align-items:center;gap:12px}\n#sb .brand{display:flex;align-items:center;gap:10px;min-width:0;flex:1}\n#sb .brand svg{flex:none}\n#sb .brand h1{font-family:var(--display);font-weight:700;font-size:clamp(1.05rem,5.2vw,1.35rem);margin:0;line-height:1.1;text-wrap:balance}\n#sb .brand small{display:block;font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;opacity:.75}\n#sb .sbback{color:var(--on-header);text-decoration:none;font-size:.8rem;font-weight:600;border:1px solid color-mix(in srgb,var(--on-header) 40%,transparent);border-radius:999px;padding:6px 12px;white-space:nowrap}\n#sb main{flex:1 1 auto;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}\n#sb .view{padding-inline:16px;padding-block:20px 32px;display:flex;flex-direction:column;gap:18px}\n#sb h2{font-family:var(--display);font-weight:700;font-size:1.6rem;line-height:1.15;margin:0;text-wrap:balance}\n#sb h3{font-family:var(--display);font-weight:700;font-size:1.15rem;margin:0}\n#sb .lead{color:var(--muted);margin:4px 0 0}\n#sb .eyebrow{font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;color:var(--soil);font-weight:700}\n#sb .card{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:16px;display:flex;flex-direction:column;gap:12px}\n#sb .stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}\n#sb .stat{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:12px 10px;text-align:center}\n#sb .stat b{display:block;font-family:var(--display);font-size:1.7rem;line-height:1;color:var(--moss);font-variant-numeric:tabular-nums}\n#sb .stat span{font-size:.75rem;color:var(--muted)}\n#sb .tiles{display:grid;grid-template-columns:1fr 1fr;gap:10px}\n#sb .tile{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:16px 12px;display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center}\n#sb .tile:hover{border-color:var(--moss)}\n#sb .tile .hx{color:var(--moss)}\n#sb .tile strong{font-size:.95rem}\n#sb .tile em{font-style:normal;font-size:.75rem;color:var(--muted)}\n\/* chips *\/\n#sb .label{font-size:.8rem;font-weight:700;color:var(--muted);letter-spacing:.04em}\n#sb .chips{display:flex;flex-wrap:wrap;gap:8px}\n#sb .chip{border:1px solid var(--line);background:var(--surface);border-radius:999px;padding:7px 14px;font-size:.9rem;font-variant-numeric:tabular-nums}\n#sb .chip[aria-pressed=\"true\"]{background:var(--moss);border-color:var(--moss);color:var(--surface);font-weight:700}\n#sb .seg{display:grid;grid-template-columns:1fr 1fr;background:var(--moss-soft);border-radius:12px;padding:4px;gap:4px}\n#sb .seg button{border:0;background:transparent;border-radius:9px;padding:9px;font-weight:700;color:var(--muted);display:flex;align-items:center;justify-content:center;gap:8px}\n#sb .seg button[aria-pressed=\"true\"]{background:var(--surface);color:var(--ink);box-shadow:0 1px 3px rgb(0 0 0 \/ .12)}\n#sb input[type=text],#sb input[type=number],#sb input[type=date]{width:100%;border:1px solid var(--line);background:var(--bg);border-radius:10px;padding:10px 12px}\n#sb .row{display:flex;gap:8px;align-items:center}\n#sb .row input[type=number]{width:90px}\n#sb .btn{border:0;border-radius:12px;padding:13px 18px;font-weight:700;background:var(--moss);color:var(--surface);width:100%}\n#sb .btn.soft{background:var(--soil-soft);color:var(--soil)}\n#sb .btn.ghost{background:transparent;border:1px solid var(--line);color:var(--ink)}\n#sb .btn.danger{background:transparent;border:1px solid var(--danger);color:var(--danger)}\n#sb .btns{display:flex;gap:10px}\n#sb .btns .btn{flex:1}\n#sb .link{background:none;border:0;color:var(--soil);font-weight:700;padding:0;text-decoration:underline;text-underline-offset:3px}\n\/* timer *\/\n#sb .dial{position:relative;width:min(260px,72vw);aspect-ratio:1;max-width:100%;margin:4px auto 0}\n#sb .dial svg{width:100%;height:100%;transform:rotate(-90deg)}\n#sb .dial .track{stroke:var(--moss-soft)}\n#sb .dial .prog{stroke:var(--moss);transition:stroke-dashoffset .25s linear}\n#sb .dial.prep .prog{stroke:var(--soil)}\n#sb .dial .center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px}\n#sb .dial .phase{font-size:.75rem;letter-spacing:.12em;text-transform:uppercase;color:var(--soil);font-weight:700}\n#sb .dial .clock{font-family:var(--display);font-size:3.2rem;line-height:1;font-variant-numeric:tabular-nums}\n#sb .dial .sub{font-size:.85rem;color:var(--muted)}\n#sb .note{font-size:.82rem;color:var(--muted);margin:0}\n#sb .done{background:var(--moss-soft);border-color:transparent}\n\/* journal *\/\n#sb .day{display:flex;flex-direction:column;gap:8px}\n#sb .day h4{margin:0;font-size:.8rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);display:flex;justify-content:space-between;gap:8px}\n#sb .entry{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:10px 12px;display:flex;align-items:center;gap:12px}\n#sb .entry .hx{color:var(--moss);flex:none}\n#sb .entry.yoga .hx,#sb .entry.recunostinte .hx{color:var(--soil)}\n#sb .entry .txt{flex:1 1 auto;min-width:0;width:auto}\n#sb .entry .txt b{display:block;font-size:.95rem;overflow-wrap:anywhere}\n#sb .entry .txt span{font-size:.8rem;color:var(--muted)}\n#sb .entry .min{font-family:var(--display);font-size:1.2rem;font-variant-numeric:tabular-nums;white-space:nowrap}\n#sb .entry .del{flex:none;width:auto;background:none;border:0;color:var(--muted);padding:4px 6px;font-size:1.1rem;line-height:1}\n#sb .confirm{display:flex;gap:8px;align-items:center;font-size:.85rem;flex-wrap:wrap}\n#sb .empty{text-align:center;color:var(--muted);padding:24px 8px;display:flex;flex-direction:column;align-items:center;gap:10px}\n#sb .empty .hx{color:var(--line)}\n#sb textarea{width:100%;border:1px solid var(--line);background:var(--bg);border-radius:10px;padding:10px 12px;min-height:84px;resize:vertical;font:inherit;color:inherit;line-height:1.45}\n#sb .q{display:flex;flex-direction:column;gap:6px}\n#sb .q label{font-weight:700;font-size:.95rem;line-height:1.35}\n#sb .q .num{font-family:var(--display);color:var(--soil);font-size:1.1rem;margin-right:4px}\n#sb .rrow{display:flex;flex-direction:column;gap:8px;padding-block:12px;border-top:1px solid var(--line)}\n#sb .rrow:first-of-type{border-top:0;padding-top:0}\n#sb .rrow .top{display:flex;gap:8px;align-items:center;justify-content:space-between}\n#sb .mini{display:inline-flex;background:var(--moss-soft);border-radius:999px;padding:3px;gap:2px}\n#sb .mini button{border:0;background:transparent;border-radius:999px;padding:5px 12px;font-size:.82rem;font-weight:700;color:var(--muted)}\n#sb .mini button[aria-pressed=\"true\"]{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px rgb(0 0 0 \/ .12)}\n#sb .mini button[data-rk=\"succes\"][aria-pressed=\"true\"]{color:var(--soil)}\n#sb .rm{background:none;border:0;color:var(--muted);font-size:.85rem;padding:4px}\n#sb .recap dt{font-size:.75rem;letter-spacing:.08em;text-transform:uppercase;color:var(--soil);font-weight:700}\n#sb .recap dd{margin:2px 0 12px;white-space:pre-wrap;overflow-wrap:anywhere}\n#sb .recap dd:last-child{margin-bottom:0}\n#sb .vow{background:var(--moss-soft);border-radius:18px;padding:24px 20px;display:flex;flex-direction:column;align-items:center;gap:14px;text-align:center}\n#sb .vow .hx{color:var(--moss)}\n#sb .vow p{font-family:var(--display);font-size:1.18rem;line-height:1.6;margin:0;max-width:34ch;text-wrap:pretty}\n#sb .vow p.last{font-style:italic;color:var(--moss);font-size:1.25rem}\n#sb .breath{display:flex;flex-direction:column;align-items:center;gap:14px;padding-block:8px}\n#sb .orb{width:120px;height:120px;border-radius:50%;background:radial-gradient(circle at 40% 35%,var(--surface),var(--moss-soft) 60%,var(--moss) 140%);transform:scale(.6);transition:transform 4s ease-in-out;display:grid;place-items:center}\n#sb .orb span{font-family:var(--display);font-size:1rem;color:var(--forest,var(--header))}\n#sb .breath .cue{font-family:var(--display);font-size:1.3rem;color:var(--soil);min-height:1.6em}\n#sb .items{list-style:none;margin:6px 0 0;padding:0;display:flex;flex-direction:column;gap:4px;font-size:.88rem}\n#sb .items li{display:flex;gap:8px;align-items:baseline}\n#sb .items .tag{font-size:.68rem;letter-spacing:.06em;text-transform:uppercase;font-weight:700;color:var(--moss);white-space:nowrap}\n#sb .items .tag.succes{color:var(--soil)}\n#sb .entry.col{align-items:flex-start}\n#sb .entry.open{cursor:pointer}\n#sb .rinput{display:flex;align-items:center;gap:0;border:1px solid var(--line);background:var(--bg);border-radius:10px;padding-left:12px}\n#sb .rinput .pre{white-space:nowrap;font-size:.9rem;color:var(--moss);font-weight:700}\n#sb .rinput.succes .pre{color:var(--soil)}\n#sb .rinput input{border:0!important;background:transparent!important;padding:10px 12px 10px 6px!important;min-width:0;flex:1}\n#sb .prev{display:flex;flex-direction:column;gap:6px}\n#sb .prev button{text-align:left;border:1px solid var(--line);background:var(--surface);border-radius:10px;padding:8px 12px;font-size:.88rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n#sb .prev button[aria-pressed=\"true\"]{border-color:var(--moss);background:var(--moss-soft);font-weight:700}\n#sb .todo-btn{align-self:flex-start;border:1px dashed var(--moss);background:transparent;color:var(--moss);border-radius:999px;padding:6px 14px;font-size:.85rem;font-weight:700}\n#sb .todo-btn[disabled]{border-style:solid;opacity:.75;cursor:default}\n#sb .todo{display:flex;align-items:flex-start;gap:12px;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:12px}\n#sb .todo .ck{flex:none;width:26px;height:26px;border-radius:50%;border:2px solid var(--moss);background:transparent;display:grid;place-items:center;color:var(--surface);margin-top:1px}\n#sb .todo.done .ck{background:var(--moss)}\n#sb .todo.done .tt b{text-decoration:line-through;color:var(--muted);font-weight:600}\n#sb .todo .tt{flex:1;min-width:0}\n#sb .todo .tt b{display:block;font-weight:600;overflow-wrap:anywhere;white-space:pre-wrap}\n#sb .todo .tt span{font-size:.75rem;color:var(--muted)}\n#sb .addrow{display:flex;gap:8px}\n#sb .addrow input{flex:1;min-width:0}\n#sb .addrow .btn{width:auto;padding-inline:16px}\n#sb .gen{background:var(--soil-soft);border-color:transparent}\n#sb .gen .btns .btn{padding:10px}\n#sb .foot{font-size:.8rem;color:var(--muted);text-align:center}\n#sb .objpick{display:flex;flex-direction:column;gap:8px}\n#sb .objtoggle{align-self:flex-start;border:1px solid var(--line);background:var(--surface);border-radius:999px;padding:6px 14px;font-size:.85rem;font-weight:700;color:var(--moss)}\n#sb .sheet-bg{position:fixed;inset:0;background:rgb(16 24 26 \/ .45);z-index:2000;display:flex;align-items:flex-end;justify-content:center}\n#sb .objpanel{background:var(--surface);width:100%;max-width:560px;height:78%;border-radius:20px 20px 0 0;padding:14px 16px calc(14px + env(safe-area-inset-bottom,0px));display:flex;flex-direction:column;gap:10px;box-shadow:0 -6px 24px rgb(0 0 0 \/ .18)}\n#sb .objpanel .grab{width:44px;height:5px;border-radius:3px;background:var(--line);align-self:center}\n#sb .objpanel .top{display:flex;justify-content:space-between;align-items:center;gap:8px}\n#sb .objpanel .x{border:0;background:var(--moss-soft);border-radius:999px;width:34px;height:34px;font-size:1.1rem;line-height:1;color:var(--ink)}\n#sb .objlist{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:6px;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}\n#sb .objlist button{text-align:left;border:1px solid var(--line);background:var(--bg);border-radius:12px;padding:12px 14px;font-size:.95rem;line-height:1.4}\n#sb .objlist button[aria-pressed=\"true\"]{background:var(--moss-soft);font-weight:700}\n#sb .objlist .none{font-size:.85rem;color:var(--muted);padding:6px 4px}\n#sb .power{gap:10px}\n#sb .power .eyebrow{display:flex;justify-content:space-between;gap:8px}\n#sb .power .ptext{font-family:var(--display);font-size:1.05rem;line-height:1.55;margin:0;color:var(--ink)}\n#sb .power textarea{min-height:64px}\n#sb .variants{display:grid;grid-template-columns:1fr;gap:6px}\n#sb .variants .chip{text-align:left;border-radius:12px;padding:10px 14px;display:flex;align-items:center;gap:10px;width:100%}\n#sb .variants .chip b{display:inline-grid;place-items:center;width:24px;height:24px;border-radius:50%;background:var(--moss-soft);color:var(--moss);font-size:.8rem;flex:none}\n#sb .variants .chip[aria-pressed=\"true\"] b{background:var(--surface);color:var(--moss)}\n#sb .variants .chip[disabled]{opacity:.5;cursor:default}\n#sb .ptext mark{background:var(--moss-soft);color:var(--ink);padding:0 3px;border-radius:4px;font-family:var(--body);font-size:.95rem;font-weight:600}\n#sb .precap{display:flex;flex-direction:column;gap:14px}\n#sb .precap h4{margin:0;font-size:.75rem;letter-spacing:.08em;text-transform:uppercase;color:var(--soil)}\n#sb .next{background:var(--header);color:var(--on-header);border-radius:16px;padding:18px;display:flex;flex-direction:column;gap:12px;text-align:center;align-items:center}\n#sb .next h3{color:var(--on-header)}\n#sb .next .btn{background:var(--on-header);color:var(--header);max-width:280px}\n#sb .gate{align-items:center;text-align:center;padding:28px 20px;margin-top:8px}\n#sb .gate .hx{color:var(--moss)}\n#sb .tema-row{display:flex;gap:8px}\n#sb .tema-row input{flex:1;min-width:0}\n#sb .tema-row .btn{width:auto;padding-inline:14px}\n#sb .tag-tema{display:inline-block;background:var(--soil-soft);color:var(--soil);border-radius:999px;padding:2px 10px;font-size:.75rem;font-weight:700;letter-spacing:.02em}\n#sb .exp-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}\n#sb .exp-row label{display:flex;flex-direction:column;gap:4px;font-size:.8rem;font-weight:700;color:var(--muted)}\n#sb .exp-item{display:flex;flex-direction:column;gap:12px}\n#sb .exp-item+.exp-item{border-top:1px dashed var(--line);padding-top:16px}\n#sb .journal-link{flex-direction:row;align-items:center;justify-content:space-between;text-align:left}\n#sb .slider{display:flex;flex-direction:column;gap:6px}\n#sb .slider .top{display:flex;justify-content:space-between;align-items:baseline;gap:8px}\n#sb .slider output{font-family:var(--display);font-size:1.4rem;color:var(--moss);font-variant-numeric:tabular-nums}\n#sb .slider .ends{display:flex;justify-content:space-between;font-size:.75rem;color:var(--muted)}\n#sb input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:30px;background:transparent;margin:0}\n#sb input[type=range]::-webkit-slider-runnable-track{height:6px;border-radius:3px;background:linear-gradient(to right,var(--moss) var(--fill,50%),var(--moss-soft) var(--fill,50%))}\n#sb input[type=range]::-moz-range-track{height:6px;border-radius:3px;background:var(--moss-soft)}\n#sb input[type=range]::-moz-range-progress{height:6px;border-radius:3px;background:var(--moss)}\n#sb input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:26px;height:26px;margin-top:-10px;border-radius:50%;background:var(--surface);border:3px solid var(--moss);box-shadow:0 1px 4px rgb(0 0 0 \/ .2)}\n#sb input[type=range]::-moz-range-thumb{width:20px;height:20px;border-radius:50%;background:var(--surface);border:3px solid var(--moss)}\n#sb input.prep-range::-webkit-slider-runnable-track{background:linear-gradient(to right,var(--soil) var(--fill,50%),var(--soil-soft) var(--fill,50%))}\n#sb input.prep-range::-webkit-slider-thumb{border-color:var(--soil)}\n#sb input.prep-range::-moz-range-progress{background:var(--soil)}\n#sb input.prep-range::-moz-range-thumb{border-color:var(--soil)}\n#sb .slider.prep output{color:var(--soil)}\n#sb .soon{align-items:center;text-align:center;padding:28px 18px}\n#sb .soon .hx{color:var(--soil)}\n#sb .banner{font-size:.78rem;color:var(--soil);background:var(--soil-soft);border-radius:10px;padding:8px 12px}\n.toast{position:fixed;left:50%;bottom:calc(96px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);background:var(--ink);color:var(--bg);padding:10px 16px;border-radius:999px;font-size:.9rem;font-weight:600;z-index:3000;max-width:calc(100vw - 32px);text-align:center}\n\/* community *\/\n#sb .post{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:14px 14px 10px;display:flex;flex-direction:column;gap:10px}\n#sb .post .who{display:flex;align-items:center;gap:10px}\n#sb .av{flex:none;width:38px;height:42px;display:grid;place-items:center;background:var(--moss-soft);color:var(--moss);font-family:var(--display);font-weight:700;font-size:1.05rem;clip-path:polygon(50% 0,100% 25%,100% 75%,50% 100%,0 75%,0 25%)}\n#sb .av.me{background:var(--soil-soft);color:var(--soil)}\n#sb .post .who b{display:block;font-size:.95rem;line-height:1.2}\n#sb .post .who span{font-size:.75rem;color:var(--muted)}\n#sb .post .who .kind{margin-left:auto;font-size:.68rem;letter-spacing:.06em;text-transform:uppercase;font-weight:700;color:var(--soil);text-align:right}\n#sb .post .body{font-size:.95rem;line-height:1.5;overflow-wrap:anywhere}\n#sb .post .body p{margin:0 0 6px}\n#sb .post .body .ql{font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:var(--soil);font-weight:700;margin:6px 0 2px}\n#sb .post .body .ptext{font-size:.98rem}\n#sb .post .body h4{margin:8px 0 2px;font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:var(--soil)}\n#sb .post .more{background:none;border:0;padding:0;color:var(--moss);font-weight:700;font-size:.85rem;align-self:flex-start}\n#sb .post .acts{display:flex;align-items:center;gap:10px;border-top:1px solid var(--line);padding-top:8px}\n#sb .react{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--moss);background:transparent;color:var(--moss);border-radius:999px;padding:6px 12px;font-weight:700;font-size:.85rem}\n#sb .react[aria-pressed=\"true\"]{background:var(--moss);color:var(--surface)}\n#sb .post .count{font-size:.78rem;color:var(--muted)}\n#sb .post .dots{margin-left:auto;background:none;border:0;color:var(--muted);font-size:.82rem;padding:4px 2px;text-decoration:underline;text-underline-offset:3px}\n#sb .post .who .kind .lang-tag{display:inline-block;border:1px solid currentColor;border-radius:4px;padding:0 4px;margin-right:4px;font-size:.62rem;opacity:.8}\n#sb .shared-tag{display:inline-block;background:var(--moss-soft);color:var(--moss);border-radius:999px;padding:1px 8px;font-size:.68rem;font-weight:700;margin-left:6px;vertical-align:middle}\n#sb .inspo{background:var(--moss-soft);border:0;border-radius:14px;padding:14px;display:flex;flex-direction:column;gap:6px;text-align:left}\n#sb .inspo .eyebrow{color:var(--moss)}\n#sb .inspo p{margin:0;font-family:var(--display);font-size:1.05rem;line-height:1.45}\n#sb .inspo span{font-size:.78rem;color:var(--muted)}\n#sb .chk{display:flex;gap:10px;align-items:flex-start;padding:8px 0;border-top:1px solid var(--line);font-size:.92rem;line-height:1.4}\n#sb .chk:first-child{border-top:0}\n#sb .chk input{width:20px;height:20px;margin-top:1px;accent-color:var(--moss);flex:none}\n#sb .chk .ql{display:block;font-size:.7rem;letter-spacing:.06em;text-transform:uppercase;color:var(--soil);font-weight:700}\n#sb .sharebox{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:12px;-webkit-overflow-scrolling:touch}\n#sb .namebox{display:flex;align-items:center;gap:10px;background:var(--bg);border-radius:12px;padding:10px 12px}\n\/* bottom nav *\/\n#sb nav.bar{background:var(--surface);border-top:1px solid var(--line);display:grid;grid-template-columns:repeat(5,1fr);align-items:end;padding:6px 4px calc(8px + env(safe-area-inset-bottom,0px))}\n#sb nav.bar button{border:0;background:none;display:flex;flex-direction:column;align-items:center;gap:3px;font-size:.7rem;font-weight:600;color:var(--muted);padding:4px 0}\n#sb nav.bar button[aria-current=\"page\"]{color:var(--moss)}\n#sb nav.bar .plant{margin-top:-26px}\n#sb nav.bar .plant .hexbtn{width:58px;height:62px;display:grid;place-items:center;background:var(--moss);color:var(--surface);clip-path:polygon(50% 0,100% 25%,100% 75%,50% 100%,0 75%,0 25%)}\n#sb nav.bar .plant[aria-current=\"page\"] .hexbtn{background:var(--soil)}\n\/* uneltele zilei *\/\n#sb .unelte .uhead{display:flex;align-items:center;justify-content:space-between;gap:8px}\n#sb .unelte .lock{color:var(--muted)}\n#sb .tpair{display:grid;grid-template-columns:1fr 1fr;gap:10px}\n#sb .tcard{perspective:900px;min-height:190px}\n#sb .tcard .in{display:grid;height:100%;transition:transform .7s cubic-bezier(.3,.7,.2,1);transform-style:preserve-3d}\n#sb .tcard.flipped .in{transform:rotateY(180deg)}\n#sb .tcard .face{grid-area:1\/1;backface-visibility:hidden;-webkit-backface-visibility:hidden;border-radius:14px;padding:12px;display:flex;flex-direction:column;gap:8px}\n#sb .tcard .back{background:var(--header);color:var(--on-header);align-items:center;justify-content:center;text-align:center;font-family:var(--display);font-size:.95rem;\n  background-image:radial-gradient(circle at 30% 20%,rgb(255 255 255 \/ .08),transparent 50%),repeating-linear-gradient(60deg,rgb(255 255 255 \/ .04) 0 2px,transparent 2px 12px)}\n#sb .tcard .back .hx{color:var(--on-header)}\n#sb .tcard .front{transform:rotateY(180deg);background:var(--ts);border:2px solid var(--tc);color:var(--ink)}\n#sb .tcard .th{display:flex;align-items:center;gap:8px;color:var(--ti)}\n#sb .tcard .th svg{color:var(--tc)}\n#sb .tcard .th svg{flex:none}\n#sb .tcard .set{display:block;font-size:.7rem;letter-spacing:.05em;text-transform:uppercase;font-weight:800;line-height:1.2}\n#sb .tcard .num{display:block;font-size:.72rem;color:var(--muted)}\n#sb .tcard .tt{margin:0;font-size:.9rem;line-height:1.45;overflow-wrap:anywhere}\n#sb .tcard .tt b{color:var(--ti);font-weight:650}\n#sb .tcard .sub{margin:0;font-size:.72rem;color:var(--muted);font-style:italic}\n#sb .tcard .ex{margin:0;font-size:.8rem;line-height:1.45;color:var(--muted)}\n#sb .prow small{display:block;font-weight:400;font-size:.78rem;color:var(--muted)}\n#sb .kgroup{margin:4px 0 -8px;font-size:.78rem;letter-spacing:.12em;color:var(--soil)}\n#sb .kdom{display:flex;flex-direction:column;gap:12px}.kdom>div{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:12px;display:flex;flex-direction:column;gap:6px}\n#sb .kdom b{font-family:var(--display);font-size:1.05rem}.kdom span{display:flex;gap:8px;align-items:center;font-size:.9rem}.kdom i{font-style:normal;flex:none;width:24px;height:26px;display:grid;place-items:center;background:var(--moss-soft);color:var(--moss);font-weight:700;clip-path:polygon(50% 0,100% 25%,100% 75%,50% 100%,0 75%,0 25%);font-size:.8rem}\n#sb .asteps .seed{font-size:.8rem;letter-spacing:.06em;text-transform:uppercase;color:var(--soil);font-weight:700}\n@media (max-width:380px){.tpair{grid-template-columns:1fr}}\n#sb .tsets{display:flex;gap:8px;flex-wrap:wrap}\n#sb .tsets span{color:var(--tc);opacity:.9}\n#sb .lockmsg{margin:0;font-weight:700;color:var(--soil);font-size:.9rem}\n#sb .unote{margin:6px 0 0;font-size:.88rem;white-space:pre-wrap;overflow-wrap:anywhere;border-left:3px solid var(--line);padding-left:8px}\n\/* profil *\/\n#sb .phead{display:flex;align-items:center;gap:14px}\n#sb .phead h2{font-size:1.4rem}\n#sb .stats.four{grid-template-columns:repeat(4,1fr)}\n#sb .stats.four .stat b{font-size:1.4rem}\n#sb .plist{padding:4px 16px;gap:0}\n#sb .prow{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 0;border:0;border-bottom:1px solid var(--line);background:none;color:inherit;text-decoration:none;font-weight:600;width:100%;text-align:left}\n#sb .prow:last-child{border-bottom:0}\n#sb .prow .pv{color:var(--muted);font-weight:400;font-size:.85rem}\n#sb .avgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding:6px 0 14px;border-bottom:1px solid var(--line)}\n#sb .avgrid button{background:none;border:2px solid transparent;border-radius:12px;padding:4px;display:grid;place-items:center}\n#sb .avgrid button[aria-pressed=\"true\"]{border-color:var(--moss);background:var(--moss-soft)}\n\/* introducere \u0219i despre *\/\n#sb .ovl{position:fixed;inset:0;z-index:2500;display:flex;justify-content:center;background:rgb(20 25 18 \/ .5)}\n#sb .ovl .slide{width:100%;max-width:560px;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:32px 24px calc(28px + env(safe-area-inset-bottom,0px));text-align:center;position:relative;color:#1E2A17}\n#sb .ovl .slide h2{font-size:1.7rem}\n#sb .ovl .slide p{font-size:1.05rem;line-height:1.6;max-width:34ch;margin:0}\n#sb .ovl .x{position:absolute;top:14px;right:14px;border:0;background:rgb(255 255 255 \/ .6);border-radius:999px;width:36px;height:36px;font-size:1.2rem;color:#1E2A17}\n#sb .hexnum{width:64px;height:70px;display:grid;place-items:center;background:var(--moss);color:#fff;font-family:var(--display);font-size:2rem;clip-path:polygon(50% 0,100% 25%,100% 75%,50% 100%,0 75%,0 25%);flex:none}\n#sb .hexnum.sm{width:40px;height:44px;font-size:1.25rem}\n#sb .ovl .dots{display:flex;gap:8px}.ovl .dots span{width:8px;height:8px;border-radius:50%;background:rgb(0 0 0 \/ .2)}.ovl .dots span.on{background:var(--moss)}\n#sb .ovl .slide .btns{width:100%;max-width:340px}\n#sb .ovl .about{width:100%;max-width:560px;height:100%;background:var(--bg);display:flex;flex-direction:column}\n#sb .ovl .atop{display:flex;align-items:center;justify-content:space-between;padding:16px;background:var(--header);color:var(--on-header)}\n#sb .ovl .atop .x{position:static;background:rgb(255 255 255 \/ .15);color:var(--on-header)}\n#sb .asteps{flex:1;overflow-y:auto;padding:20px 16px 40px;display:flex;flex-direction:column;gap:22px}\n#sb .asteps section{display:flex;gap:14px;align-items:flex-start}\n#sb .asteps h3{margin:6px 0 6px}\n#sb .asteps p{margin:0 0 8px;line-height:1.55}\n@media print{\n  html,body{height:auto!important;overflow:visible!important;background:#fff!important}\n  .app,#sb{height:auto!important;max-width:none!important}\n  main{overflow:visible!important}\n  header.top,nav.bar,.btn,.btns,.breath,.next,.banner,.toast,.note,.link,.exp-row{display:none!important}\n  .card,.vow{border:0!important;break-inside:avoid}\n}\n@media (prefers-reduced-motion: reduce){*{transition:none!important}}\n\/* Aspect identic cu Detox 21 (func\u021bioneaz\u0103 \u00een aplica\u021bia de telefon): \u00een\u0103l\u021bime fix\u0103, zona din mijloc se deruleaz\u0103, meniul jos *\/\n#sb{display:flex!important;flex-direction:column;height:100vh!important;height:calc(100dvh - env(safe-area-inset-top,0px) - env(safe-area-inset-bottom,0px))!important;overflow:hidden;margin-top:0!important}\nbody.admin-bar #sb{height:calc(100vh - 46px)!important;height:calc(100dvh - 46px)!important}\n@media (min-width:783px){body.admin-bar #sb{height:calc(100vh - 32px)!important;height:calc(100dvh - 32px)!important}}\n#sb header.top{flex:none}\n#sb main{flex:1 1 auto!important;min-height:0!important;overflow-y:auto!important;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}\n#sb nav.bar{position:relative;flex:none;z-index:1000}\n\/* Aplica\u021bia de telefon \u00eencarc\u0103 Framework7, care are reguli pentru .view \u0219i .card; le anul\u0103m aici *\/\n#sb .view{position:static!important;height:auto!important;overflow:visible!important;z-index:auto!important;width:auto!important}\n#sb .card{margin:0!important;box-shadow:none!important}\n#sb .chip{height:auto!important;line-height:1.3!important;font-weight:inherit;color:inherit}\n#sb .chip[aria-pressed=\"true\"]{color:var(--surface)!important}\n<\/style><div class=\"app\" id=\"sb\" translate=\"no\" data-no-translation>\n  <header class=\"top\">\n    <div class=\"brand\">\n      <svg width=\"34\" height=\"38\" viewBox=\"0 0 34 38\" aria-hidden=\"true\"><path d=\"M17 2 32 10.5v17L17 36 2 27.5v-17Z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"\/><path d=\"M17 28V17M17 20c0-4-3-6-7-6 0 4 3 6 7 6ZM17 17c0-4 3-6.5 7-6.5 0 4-3 6.5-7 6.5Z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linejoin=\"round\"\/><path d=\"M10 28h14\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-dasharray=\"1 3\"\/><circle class=\"seed\" cx=\"17\" cy=\"29.6\" r=\"1.7\"\/><\/svg>\n      <div><small>Dorela Iepan<\/small><h1 id=\"appName\">Good Seeds<\/h1><\/div>\n    <\/div>\n    <div class=\"hd-actions\">\n      <button class=\"langbtn\" id=\"langBtn\" type=\"button\" aria-haspopup=\"dialog\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M3 12h18M12 3c2.5 2.6 3.8 5.6 3.8 9s-1.3 6.4-3.8 9c-2.5-2.6-3.8-5.6-3.8-9S9.5 5.6 12 3Z\"\/><\/svg><span id=\"langCode\">EN<\/span><\/button>\n      <a class=\"sbback external\" id=\"backLink\" href=\"#\" target=\"_top\">My courses<\/a>\n    <\/div>\n  <\/header>\n  <main id=\"main\"><\/main>\n  <nav class=\"bar\" id=\"nav\">\n    <button data-tab=\"azi\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linejoin=\"round\"><path d=\"M4 11 12 4l8 7v9h-5v-6H9v6H4Z\"\/><\/svg><span data-i=\"navToday\"><\/span><\/button>\n    <button data-tab=\"jurnal\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linejoin=\"round\"><path d=\"M6 3.5h11a1.5 1.5 0 0 1 1.5 1.5v15H7.5A2 2 0 0 1 5.5 18V4a.5.5 0 0 1 .5-.5Z\"\/><path d=\"M5.5 18a2 2 0 0 1 2-2h11M9 7.5h6M9 10.5h4\"\/><\/svg><span data-i=\"navJournal\"><\/span><\/button>\n    <button data-tab=\"practica\" class=\"plant\"><span class=\"hexbtn\"><svg width=\"26\" height=\"26\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"><path d=\"M12 3c3 3.5 5 6.5 5 10a5 5 0 0 1-10 0c0-3.5 2-6.5 5-10Z\"\/><path d=\"M12 10c1.5 1.8 2.2 3.2 2.2 4.6a2.2 2.2 0 0 1-4.4 0c0-1.4.7-2.8 2.2-4.6Z\"\/><\/svg><\/span><span data-i=\"navPractice\"><\/span><\/button>\n    <button data-tab=\"todo\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"4\" y=\"3.5\" width=\"16\" height=\"17\" rx=\"2.5\"\/><path d=\"m8 9 1.5 1.5L12.5 7.5M8 15.5l1.5 1.5 3-3M15 9.5h1.5M15 16h1.5\"\/><\/svg><span data-i=\"navTodo\"><\/span><\/button>\n    <button data-tab=\"profil\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linejoin=\"round\"><path d=\"M12 2.8 19.8 7.3v9.4L12 21.2 4.2 16.7V7.3Z\"\/><circle cx=\"12\" cy=\"10\" r=\"2.6\"\/><path d=\"M7.6 16.6c.9-2 2.5-3 4.4-3s3.5 1 4.4 3\"\/><\/svg><span data-i=\"navProfile\"><\/span><\/button>\n  <\/nav>\n<\/div><script>window.GRADINA_CONFIG={\"api\": null, \"coursesUrl\": \"https:\/\/dorelaiepan.com\/my-courses\/\", \"loginGate\": true, \"loginUrl\": \"https:\/\/dorelaiepan.com\/membership-profile\/?redirect_to=https:\/\/dorelaiepan.com\/good-seeds\/\", \"registerUrl\": null, \"subsUrl\": \"https:\/\/dorelaiepan.com\/membership-account\/subscriptions\/\"};window.GRADINA_CONFIG.api=window.SB_API||null;(function(){var b=atob(\"Ci8qID09PT09PT09PT09PSBDb25maWcgKGZpbGxlZCBpbiB3aGVuIHB1Ymxpc2hlZCBvbiB0aGUgc2l0ZSkgPT09PT09PT09PT09ICovCmNvbnN0IENPTkZJRyA9IHdpbmRvdy5HUkFESU5BX0NPTkZJRyB8fCB7CiAgYXBpOiBudWxsLAogIGNvdXJzZXNVcmw6ICdodHRwczovL3d3dy5kb3JlbGFpZXBhbi5jb20vJywKICBzdWJzVXJsOiAnaHR0cHM6Ly9kb3JlbGFpZXBhbi5jb20vbWVtYmVyc2hpcC1hY2NvdW50L3N1YnNjcmlwdGlvbnMvJywKICBsb2dpbkdhdGU6IGZhbHNlLCBsb2dpblVybDogbnVsbCwgcmVnaXN0ZXJVcmw6IG51bGwKfTsKCi8qID09PT09PT09PT09PSBMYW5ndWFnZXMgPT09PT09PT09PT09CiAgIEFsbCBpbnRlcmZhY2UgdGV4dCBsaXZlcyBpbiBVSVtsYW5nXTsgYWxsIHByYWN0aWNlIHRleHRzICh2b3dzLCA0IHBvd2VycykgaW4gVFhbbGFuZ10uCiAgIFdoYXQgdGhlIHBlcnNvbiB3cml0ZXMgaXMgc3RvcmVkIG9uY2UsIHVudHJhbnNsYXRlZCwgc28gc3dpdGNoaW5nIGxhbmd1YWdlIG5ldmVyIGxvc2VzIGFueXRoaW5nOgogICBvbmx5IHRoZSBzdXJyb3VuZGluZyB0ZXh0cyBjaGFuZ2UuIEJhc2UgdGhlbWVzIGFyZSBzdG9yZWQgYXMga2V5cyAoQG1vbmV5KSBhbmQgc2hvd24gdHJhbnNsYXRlZC4gKi8KY29uc3QgTEFOR1MgPSBbIFsnZW4nLCdFbmdsaXNoJywnRU4nXSwgWydmcicsJ0ZyYW7Dp2FpcycsJ0ZSJ10sIFsnaXQnLCdJdGFsaWFubycsJ0lUJ10sIFsncm8nLCdSb23Dom7EgycsJ1JPJ10gXTsKY29uc3QgUkVBRFkgPSBbJ2VuJywnZnInLCdpdCcsJ3JvJ107CmNvbnN0IE5FRURTX0dFTkRFUiA9IFsnZnInLCdpdCcsJ3JvJ107ICAgICAvLyBFbmdsaXNoIGhhcyBubyBncmFtbWF0aWNhbCBnZW5kZXIsIHNvIHdlIGRvbid0IGFzawpjb25zdCBMT0NBTEUgPSB7IGVuOidlbi1HQicsIGZyOidmci1GUicsIGl0OidpdC1JVCcsIHJvOidyby1STycgfTsKCmNvbnN0IFVJID0geyBlbjp7CiAgYXBwTmFtZTonR29vZCBTZWVkcycsIGNvdXJzZXM6J015IGNvdXJzZXMnLCBsYW5ndWFnZTonTGFuZ3VhZ2UnLCBzb29uOidjb21pbmcgc29vbicsIGNsb3NlOidDbG9zZScsCiAgbmF2VG9kYXk6J1RvZGF5JywgbmF2Sm95OidKb3knLCBuYXZQcmFjdGljZTonUHJhY3RpY2UnLCBuYXZUb2RvOidUbyBEbycsIG5hdlBvd2VyczonNCBQb3dlcnMnLCBtZW51OidNZW51JywKICBzYXZlRmFpbDoiQ291bGRuJ3Qgc2F2ZS4gQ2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLiIsIGxvYWRGYWlsOiJDb3VsZG4ndCBsb2FkIHlvdXIgZGF0YS4iLAogIHRvZGF5OidUb2RheScsIHllc3RlcmRheTonWWVzdGVyZGF5JywKICBraW5kOnsgbWVkaXRhdGllOidNZWRpdGF0aW9uJywgeW9nYTonWW9nYScsIGJ1Y3VyaWU6J0pveSBtZWRpdGF0aW9uJywgcmVjdW5vc3RpbnRlOidHcmF0aXR1ZGUgJiBzdWNjZXNzZXMnLCBwdXRlcmk6J1RoZSA0IHBvd2VycycgfSwKICB0ZXN0QmFubmVyOidUZXN0IHZlcnNpb246IHlvdXIgZW50cmllcyBhcmUga2VwdCBvbmx5IG9uIHRoaXMgZGV2aWNlLiBPbiB0aGUgc2l0ZSB0aGV5IHdpbGwgYmUgc2F2ZWQgdG8geW91ciBhY2NvdW50LicsCiAgZ2VuUTonSG93IHdvdWxkIHlvdSBsaWtlIG1lIHRvIGFkZHJlc3MgeW91PycsIGdlbk5vdGU6J1NvIHRoZSB0ZXh0cyBzb3VuZCBuYXR1cmFsLicsIGZlbTonRmVtaW5pbmUnLCBtYXNjOidNYXNjdWxpbmUnLAogIGdlbkZvb3Q6Zz0+YEFkZHJlc3NpbmcgeW91IGluIHRoZSAke2c9PT0nbSc\/J21hc2N1bGluZSc6J2ZlbWluaW5lJ31gLCBjaGFuZ2U6J2NoYW5nZScsCiAgaGVhZGxpbmU6J1doYXQgYXJlIHlvdSBwbGFudGluZyB0b2RheT8nLCBzdHJlYWs6J2RheXMgaW4gYSByb3cnLCBtaW5Ub2RheTonbWludXRlcyB0b2RheScsIHByYWN0VG9kYXk6J3ByYWN0aWNlcyB0b2RheScsIG5Ub2RheTpuPT5gJHtufSB0b2RheWAsCiAgdGlsZU1lZDonTWVkaXRhdGlvbiAvIFlvZ2EnLCB0aWxlUmVjOidHcmF0aXR1ZGUgLyBTdWNjZXNzZXMnLCB0aWxlSm95OidKb3kgbWVkaXRhdGlvbicsIHRpbGVQb3c6J1RoZSA0IHBvd2VycycsCiAgam91cm5hbDonTXkgam91cm5hbCcsIG5FbnRyaWVzOm49PmAke259ICR7bj09PTE\/J2VudHJ5JzonZW50cmllcyd9YCwKICBqb3lUaXRsZTonSm95IG1lZGl0YXRpb24nLCBqb3lMZWFkOidGaWxsIGluIHRoZSB0aHJlZSBhbnN3ZXJzLCB0aGVuIHNhdmUuJywgYnJlYXRoZUN1ZTonQnJlYXRoZSBpbiBhbmQgb3V0IGRlZXBseSAzIHRpbWVzJywgYnJlYXRoZUJ0bjonQnJlYXRoZSB3aXRoIG1lJywKICBhZGRIZWxwVG9kbzonKyBBZGQgdG8gVG8gRG86IHdobyBJIGhlbHAnLCBuZXdKb3k6J0EgbmV3IGpveSBtZWRpdGF0aW9uJywgc2F2ZTonU2F2ZScsCiAgcGlja1ByZXY6bj0+YENob29zZSBhIHByZXZpb3VzIGdvYWwgKCR7bn0pYCwgbXlHb2FsczonTXkgZ29hbHMnLCBzZWFyY2hHb2FsczonU2VhcmNoIG15IGdvYWxzJywgbm9Hb2FsOidObyBnb2FsIGZvdW5kLicsIG5ld0dvYWxQaDonb3Igd3JpdGUgYSBuZXcgZ29hbCcsCiAgYWRkVG9kbzonKyBBZGQgdG8gVG8gRG8nLCBhZGRlZFRvZG86J+KckyBBZGRlZCB0byBUbyBEbycsIHRvYXN0QWRkZWQ6J0FkZGVkIHRvIFRvIERvJywgZmlsbEFuc3dlcnM6J0ZpbGwgaW4gdGhlIGFuc3dlcnMuJywKICBpbmhhbGU6J0JyZWF0aGUgaW7igKYnLCBleGhhbGU6J0JyZWF0aGUgb3V04oCmJywgYWdhaW46J09uY2UgbW9yZScsIGRvbmVCcmVhdGhQOidZb3UgaGF2ZSBwcmFjdGlzZWQgdG8gZGVhY3RpdmF0ZSB0aGUgc2VlZC4nLCBkb25lQnJlYXRoSjonVGhlIHNlZWQgaGFzIGJlZW4gd2F0ZXJlZC4nLAogIHBvd1RpdGxlOidUaGUgNCBwb3dlcnMnLCBwb3dMZWFkOidDaG9vc2UgdGhlIHRoZW1lIGFuZCB3aGVyZSB5b3Ugc3RhcnQgZnJvbSwgZmlsbCBpbiBlYWNoIHBvd2VyLCB0aGVuIHNhdmUuJywgdGhlbWU6J1RIRU1FJywgdGhlbWVBcmlhOidUaGVtZScsCiAgZmV3ZXI6J1Nob3cgZmV3ZXInLCBhbGxUaGVtZXM6bj0+YEFsbCB0aGVtZXMgKCR7bn0pYCwgbmV3VGhlbWVQaDonb3IgYWRkIGEgbmV3IHRoZW1lJywgYWRkOidBZGQnLCBzdGFydDonV0hFUkUgWU9VIFNUQVJUIEZST00nLAogIHdoZW46J1doZW4nLCB6VG9kYXk6J1RvZGF5JywgelRvbW9ycm93OidUb21vcnJvdycsIGhvd0xvbmc6J0hvdyBsb25nJywKICBwNG5vdGU6J0FmdGVyIHNhdmluZywgeW91ciBwcm9taXNlIGdvZXMgdG8geW91ciBUbyBEbyBsaXN0IGF1dG9tYXRpY2FsbHkuJywgZmlsbFBvd2VyczonRmlsbCBpbiB0aGUgcG93ZXJzLicsIGV4cG9ydExpbms6J0V4cG9ydCB5b3VyIHByYWN0aWNlcyBmb3IgYSBwZXJpb2QnLAogIGluVG9kbzonV2hhdCB5b3UgcHJvbWlzZWQgaW4gdGhlIDR0aCBwb3dlciBpcyBpbiB5b3VyIFRvIERvIGxpc3QuJywgY29weTonQ29weSB0ZXh0JywgcGRmOidTYXZlIFBERicsCiAgZG9Kb3lOb3c6J0RvIHRoZSBqb3kgbWVkaXRhdGlvbiBub3cnLCBnb0pveTonR28gdG8gdGhlIGpveSBtZWRpdGF0aW9uJywgbmV3UG93ZXJzOidTdGFydCBhIG5ldyA0IFBvd2VycyBleGVyY2lzZScsCiAgY29waWVkOidUZXh0IGNvcGllZC4gWW91IGNhbiBwYXN0ZSBpdCBhbnl3aGVyZS4nLCBjb3B5RmFpbDoiQ291bGRuJ3QgY29weSBvbiB0aGlzIGRldmljZS4iLAogIGJhY2s6J+KAuSBCYWNrJywgZXhwVGl0bGU6J0V4cG9ydCB5b3VyIHByYWN0aWNlcycsIGV4cExlYWQ6J0Nob29zZSB0aGUgcGVyaW9kLiBZb3UgY2FuIGNvcHkgdGhlIHRleHQgb3Igc2F2ZSBpdCBhcyBhIFBERi4nLCBmcm9tOidGUk9NJywgdG86J1RPJywKICBuUHJhY3Q6bj0+YCR7bn0gJHtuPT09MT8ncHJhY3RpY2UnOidwcmFjdGljZXMnfSBpbiB0aGlzIHBlcmlvZC5gLCBub1ByYWN0OidZb3UgaGF2ZSBubyA0IHBvd2VycyBwcmFjdGljZXMgaW4gdGhpcyBwZXJpb2QuJywKICByZWNUaXRsZTonR3JhdGl0dWRlIC8gU3VjY2Vzc2VzJywgcmVjTGVhZDonV3JpdGUgYXMgbWFueSBhcyB5b3UgbGlrZS4gRWFjaCBsaW5lIGlzIGEgZ3JhdGl0dWRlIG9yIGEgc3VjY2Vzcy4nLAogIGdyYXRpdHVkZTonR3JhdGl0dWRlJywgc3VjY2VzczonU3VjY2VzcycsIHJvd1R5cGU6aT0+YFR5cGUgb2YgbGluZSAke2l9YCwgZGVsUm93OidEZWxldGUgbGluZScsIHJlbW92ZTonUmVtb3ZlJywgc3VjY2Vzc1BoOid3aGF0IEkgZGlkIHRvZGF5JywKICBhZGRSb3c6JysgQWRkIGFub3RoZXIgbGluZScsIHdyaXRlT25lOidXcml0ZSBhdCBsZWFzdCBvbmUgbGluZS4nLCBzYXZlZEo6J1NhdmVkIHRvIHlvdXIgam91cm5hbCcsCiAgcHJlRzooKT0+IkknbSBncmF0ZWZ1bCBmb3IiLCBwcmVTOigpPT4iSSdtIGhhcHB5IGFib3V0IiwKICBuUmVjOihucixucyk9Pltucj9ucisobnI9PT0xPycgZ3JhdGl0dWRlJzonIGdyYXRpdHVkZXMnKTonJywgbnM\/bnMrKG5zPT09MT8nIHN1Y2Nlc3MnOicgc3VjY2Vzc2VzJyk6JyddLmZpbHRlcihCb29sZWFuKS5qb2luKCcgwrcgJyksCiAgdG9kb1RpdGxlOidUbyBEbycsIHRvZG9MZWFkOidXaGF0IEkgbmVlZCB0byBkbyBzbyB0aGUgc2VlZHMgY2FuIGdyb3cuJywgdG9kb1BoOidBZGQgc29tZXRoaW5nIHRvIGRvJywKICBtYXJrRG9uZTonTWFyayBhcyBkb25lJywgbWFya1VuZG9uZTonTWFyayBhcyBub3QgZG9uZScsIGRlbDonRGVsZXRlJywgbm86J05vJywKICB0b2RvRW1wdHk6J05vdGhpbmcgdG8gZG8gcmlnaHQgbm93Ljxicj5XaGF0IHlvdSB3cml0ZSB1bmRlciDigJx3aG8gSSBoZWxw4oCdIGluIHRoZSBqb3kgbWVkaXRhdGlvbiBhbmQgaW4gdGhlIDR0aCBwb3dlciBjYW4gbGFuZCBoZXJlLicsCiAgc2hvd0RvbmU6KHMsbik9PmAke3M\/J0hpZGUnOidTaG93J30gd2hhdCBJJ3ZlIGRvbmUgKCR7bn0pYCwgc3JjOntidWN1cmllOidKb3kgbWVkaXRhdGlvbicscHV0ZXJpOidUaGUgNCBwb3dlcnMnLG1hbnVhbDonQWRkZWQgYnkgbWUnfSwgZG9uZVRvYXN0OidEb25lLiBXZWxsIGRvbmUhJywKICB0b2RvUHJvbWlzZTp6PT56PT09J21haW5lJz8nVG9tb3Jyb3cgSSBwcm9taXNlIHRvJzonVG9kYXkgSSBwcm9taXNlIHRvJywKICBraW5kQXJpYTonVHlwZSBvZiBwcmFjdGljZScsIGRvbmVIOidEb25lLiBUaGUgc2VlZCBpcyBwbGFudGVkLicsIGRvbmVOb3RlOihrLG0pPT5gJHtrfSwgJHttfSBtaW4uIFNhdmVkIHRvIHlvdXIgam91cm5hbC5gLAogIHRpdGxlT3B0OidUaXRsZSAob3B0aW9uYWwpJywgcGhNb3JuaW5nOidlLmcuIE1vcm5pbmcgbWVkaXRhdGlvbicsIGFub3RoZXI6J0Fub3RoZXIgcHJhY3RpY2UnLAogIHN0b3BwZWRBZnRlcjptPT5gWW91IHN0b3BwZWQgYWZ0ZXIgJHttfSBtaW4uYCwgd2FudFNhdmU6J1NoYWxsIEkgYWRkIGl0IHRvIHlvdXIgam91cm5hbD8nLCBzYXZlTWluOm09PmBTYXZlICR7bX0gbWluYCwgZG9udFNhdmU6IkRvbid0IHNhdmUiLAogIHN0b3BwZWQ6J1RoZSBwcmFjdGljZSB3YXMgc3RvcHBlZC4nLCBiYWNrUGxhaW46J0JhY2snLCByZXN1bWU6J0NvbnRpbnVlJywgcGF1c2U6J1BhdXNlJywgc3RvcDonU3RvcCcsCiAgc2NyZWVuTm90ZToiS2VlcCB5b3VyIHNjcmVlbiBvbi4gSWYgeW91ciBwaG9uZSBsb2NrcywgdGhlIGZpbmFsIGJlbGwgbWF5IG5vdCByaW5nLCBidXQgdGhlIHByYWN0aWNlIGlzIHNhdmVkIHdoZW4geW91IGNvbWUgYmFjay4iLAogIGR1cmF0aW9uOidEVVJBVElPTicsIHByZXA6J1BSRVBBUkFUSU9OJywgc291bmQ6J1NPVU5EJywgYmVsbDonQmVsbCcsIGJvd2w6J1RpYmV0YW4gYm93bCcsIGxpc3RlbjonTGlzdGVuJywgdGl0bGVDYXA6J1RJVExFIChPUFRJT05BTCknLCBwaFNpbGVuY2U6J2UuZy4gNSBtaW51dGVzIG9mIHNpbGVuY2UnLAogIGJlZ2luOidCZWdpbicsIG1hbnVhbExpbms6J0kgcHJhY3Rpc2VkIHdpdGhvdXQgdGhlIHRpbWVyLCBJIGp1c3Qgd2FudCB0byBsb2cgaXQnLCBub1RpbWVyOidXaXRob3V0IHRoZSB0aW1lcicsIGxvZ1ByYWN0OidMb2cgYSBwcmFjdGljZScsIGRheTonREFZJywKICBwaEV2ZW5pbmc6J2UuZy4gRXZlbmluZyB5b2dhJywgc2F2ZUpvdXJuYWw6J1NhdmUgdG8gam91cm5hbCcsIGNhbmNlbDonQ2FuY2VsJywgbG9nZ2VkOidsb2dnZWQnLAogIHJlYWR5OidSZWFkeSB0byBiZWdpbicsIHByZXBQaGFzZTonUHJlcGFyYXRpb24nLCBiZWxsU3RhcnQ6J1RoZSBiZWxsIHJpbmdzIGF0IHRoZSBzdGFydCcsIG9mOidvZiAnLCBwYXVzZWQ6J1BhdXNlZCcsIHByZXNzQ29udDonUHJlc3MgQ29udGludWUnLAogIHBsdXNQcmVwOmw9PmArICR7bH0gcHJlcGFyYXRpb25gLCBub1ByZXA6J25vIHByZXBhcmF0aW9uJywgbm9uZTonTm9uZScsIHVuaXRNaW46J21pbicsIHVuaXRTZWM6J3NlYycsCiAgYWxsOidBbGwnLCBuUHJhY3RpY2VzOm49PmAke259ICR7bj09PTE\/J3ByYWN0aWNlJzoncHJhY3RpY2VzJ31gLCB0b3RNaW46bT0+YCDCtyAke219IG1pbnV0ZXMgaW4gdG90YWxgLAogIGpFbXB0eTonTm8gc2VlZHMgaGVyZSB5ZXQuPGJyPk1lZGl0YXRlIG9yIGxvZyBhIHByYWN0aWNlIGFuZCBpdCB3aWxsIHNob3cgdXAgaW4geW91ciBqb3VybmFsLicsIGdvUHJhY3RpY2U6J0dvIHRvIHByYWN0aWNlJywKICBkZWxROidEZWxldGUgdGhpcyBwcmFjdGljZT8nLCBkZWxldGVkOidEZWxldGVkJywKICBnYXRlTGVhZDonVGhlIGFwcCBpcyBmcmVlLiBTaWduIGluIHNvIHlvdXIgZW50cmllcyBzdGF5IHNhdmVkLicsIHNpZ25JbjonU2lnbiBpbicsIHJlZ2lzdGVyOiJEb24ndCBoYXZlIGFuIGFjY291bnQ\/IENyZWF0ZSBvbmUgZm9yIGZyZWUiCn19OwoKY29uc3QgVFggPSB7IGVuOnsKICB2b3dKb3k6WwogICAgJ0kgZG8gdGhlc2UgdGhpbmdzIGJlY2F1c2UgbXkgcmVhbGl0eSBpcyBkaWN0YXRlZCBieSB0aGUgc2VlZHMgSSBwbGFudCwgd2hpY2ggYXJlIHByb2plY3RlZCBvbnRvIHRoZSBlbXB0aW5lc3Mgb2YgYSByZWFsaXR5IHRoYXQgZG9lcyBub3QgY29tZSBmcm9tIGl0cyBvd24gc2lkZS4nLAogICAgJ0JlY2F1c2UgSSBoYXZlIHBsYW50ZWQgdGhlc2Ugc2VlZHMsIHdoaWNoIEkgYW0gbm93IGFsc28gd2F0ZXJpbmcsIEkgd2lsbCBzdWNjZWVkLicsCiAgICAnQmVjYXVzZSBJIHN1Y2NlZWQgdXNpbmcgdGhpcyBzeXN0ZW0sIHNvbWUgb2YgbXkgZnJpZW5kcyBhbmQgYWNxdWFpbnRhbmNlcyB3aWxsIGNvcHkgbWUgYW5kIHN1Y2NlZWQgaW4gdHVybi4gQmVjYXVzZSB0aGV5IHN1Y2NlZWQgdXNpbmcgdGhpcyBzeXN0ZW0sIHRoZWlyIGZyaWVuZHMgYW5kIGFjcXVhaW50YW5jZXMgd2lsbCBjb3B5IHRoZW0gaW4gdHVybi4nLAogICAgJ0luIHRoaXMgd2F5LCB0aHJvdWdoIG15IGV4YW1wbGUsIEkgc2V0IG9mZiBhIGNoYWluIHJlYWN0aW9uIHRoYXQgaW5zcGlyZXMgdGhvdXNhbmRzIGFuZCB0aG91c2FuZHMgb2YgcGVvcGxlIHRvIHVzZSB0aGlzIHN5c3RlbSBhbmQgc3VjY2VlZC4nXSwKICB2b3dKb3lMYXN0OidXaGljaCB3aWxsIG1ha2UgdGhlIHdvcmxkIGEgYmV0dGVyIGFuZCBtb3JlIGJlYXV0aWZ1bCBwbGFjZS4nLAogIHFKb3k6eyBvYmllY3RpdjonVGhlIGdvYWwgSSBkZWRpY2F0ZSB0aGlzIGpveSBtZWRpdGF0aW9uIHRvJywgc2VtaW50ZTonV2hhdCBzZWVkcyBJIGhhdmUgcGxhbnRlZCcsCiAgICAgICAgIGFqdXRvcjonV2hvIGRvIEkgaW50ZW5kIHRvIGhlbHAgZm9yIDEgaG91ciBhIHdlZWs\/IFdoZW4gZG8gSSB3YW50IHRvIGRvIGl0PyBXaGF0IHdpbGwgSSBkbyBmb3IgdGhpcyBwZXJzb24\/JyB9LAogIHBvd2Vyczp7IHAxOlsnUG93ZXIgMScsJ1JlbWVtYmVyaW5nIHRoZSBwZW4nXSwgcDI6WydQb3dlciAyJywnSW50ZWxsaWdlbnQgcmVncmV0J10sIHAzOlsnUG93ZXIgMycsJ1Jlc3RyYWludCddLCBwNDpbJ1Bvd2VyIDQnLCdUaGUgYW50aWRvdGUnXSB9LAogIHZvd1BvdzooKT0+WwogICAgJ0kgZG8gdGhlc2UgdGhpbmdzIGJlY2F1c2UgcmVhbGl0eSBpcyBkaWN0YXRlZCBieSB0aGUgc2VlZHMgSSBwbGFudCBhbmQgaXMgcHJvamVjdGVkIG9udG8gdGhlIGVtcHRpbmVzcyBvZiBhIHJlYWxpdHkgdGhhdCBkb2VzIG5vdCBjb21lIGZyb20gaXRzIG93biBzaWRlLicsCiAgICAnSWYgSSBwbGFudCBwb3NpdGl2ZSBzZWVkcywgSSBhbSBmb3JjZWQgdG8gcGVyY2VpdmUgYSBwb3NpdGl2ZSByZWFsaXR5LCBldmVuIGlmIHRoZSBwZW9wbGUgYXJvdW5kIG1lIHBlcmNlaXZlIGl0IGFzIG5lZ2F0aXZlLiBJZiBJIHBsYW50IG5lZ2F0aXZlIHNlZWRzLCBJIGFtIGZvcmNlZCB0byBwZXJjZWl2ZSBhIHJlYWxpdHkgdGhhdCBpcyB1bmZhdm91cmFibGUgdG8gbWUsIGV2ZW4gaWYgdGhlIHBlb3BsZSBhcm91bmQgbWUgcGVyY2VpdmUgaXQgYXMgcG9zaXRpdmUuJywKICAgICdTbyBJIGNob29zZSB0byBwbGFudCBwb3NpdGl2ZSBzZWVkcy4nLAogICAgJ0JlY2F1c2UgSSBzdWNjZWVkIHVzaW5nIHRoaXMgc3lzdGVtLCBzb21lIG9mIG15IGZyaWVuZHMgYW5kIGFjcXVhaW50YW5jZXMgd2lsbCBjb3B5IG1lIGFuZCBzdWNjZWVkIGluIHR1cm4uIEJlY2F1c2UgdGhleSBzdWNjZWVkLCB0aGVpciBmcmllbmRzIGFuZCBhY3F1YWludGFuY2VzIHdpbGwgY29weSB0aGVtIGFuZCBzdWNjZWVkLiddLAogIHZvd1Bvd0xhc3Q6J0luIHRoaXMgd2F5LCB0aGUgd29ybGQgYmVjb21lcyBhIGJldHRlciBhbmQgbW9yZSBiZWF1dGlmdWwgcGxhY2UuJywKICBwb3dIZWFkOidUSEUgNCBQT1dFUlMnLCBwb3dIZWFkQ2FzZTonVGhlIDQgcG93ZXJzJywKICB0aGVtZXM6eyAnQG1vbmV5JzonTW9uZXknLCAnQHJlbGF0aW9uc2hpcHMnOidSZWxhdGlvbnNoaXBzJywgJ0BoZWFsdGgnOidIZWFsdGgnIH0sCiAgZHVyOlsnNSBzZWNvbmRzJywnMSBtaW51dGUnLCc1IG1pbnV0ZXMnLCcxMCBtaW51dGVzJywnMSBob3VyJywndGhlIHdob2xlIGRheSddLAogIC8qIGNoaXBzIHVuZGVyIFBvd2VyIDM6ICJmb3IgYXQgbGVhc3QgWCIgaXMgYWRkZWQgdG8gKG9yIHJlcGxhY2VzIHRoZSBlbmQgb2YpIHdoYXQgdGhlIHBlcnNvbiB3cm90ZSAqLwogIGR1ckFwcGVuZDpkPT5kPT09J3RoZSB3aG9sZSBkYXknPydmb3IgdGhlIHdob2xlIGRheSc6J2ZvciBhdCBsZWFzdCAnK2QsCiAgZHVyU3RyaXA6L1xzKihmb3JccyspPyhhdCBsZWFzdFxzKyk\/KDUgc2Vjb25kc3wxIG1pbnV0ZXw1IG1pbnV0ZXN8MTAgbWludXRlc3wxIGhvdXJ8dGhlIHdob2xlIGRheSlccyokL2ksCiAgbGVhZDovXnRvXHMrL2ksICAgLy8gInRvIGNhbGwgbXkgbW90aGVyIiAtPiAiY2FsbCBteSBtb3RoZXIiIGFmdGVyICJJIHByb21pc2UgdG8iCiAgemk6ej0+ej09PSdtYWluZSc\/J3RvbW9ycm93JzondG9kYXknLAogIHRhaWxQMToiQW5kIHBlcmhhcHMgSSBkb24ndCBldmVuIGtub3cgeWV0IHdoYXQgb3RoZXIgc2VlZHMgSSBoYXZlIHBsYW50ZWQsIHN1cmVseSBtYW55IG90aGVycyB0aGF0IEkgZG9uJ3QgcmVtZW1iZXIgbm93LiBXaGF0ZXZlciBJIG1heSBoYXZlIHRob3VnaHQsIHNhaWQgb3IgZG9uZSwgSSB3YW50IHRvIGRlYWN0aXZhdGUgdGhlc2Ugc2VlZHMgbm93LiIsCiAgdGFpbFAyOiJJIGhhdmUgaHVydCBteXNlbGYgYW5kIHRoZSBwZW9wbGUgYXJvdW5kIG1lLiBJIGFtIHNvcnJ5LCBhbmQgSSB3YW50IHRvIGRlYWN0aXZhdGUgdGhlc2Ugc2VlZHMgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSwgYWxvbmcgd2l0aCBhbGwgdGhlIGNoYWlucyBvZiBldmVudHMgdGhhdCBmb2xsb3cgZnJvbSB0aGVtLCBiZWNhdXNlIEkgbm93IHVuZGVyc3RhbmQgdGhhdCB0aGV5IGRvdWJsZSBldmVyeSAyNCBob3VycywgYW5kIHRoZSBzb29uZXIgSSBkZWFjdGl2YXRlIHRoZW0sIHRoZSBiZXR0ZXIhIiwKICBuaWdodDonQW5kIHRvbmlnaHQsIGNvbnNjaW91c2x5LCBmcm9tIHRoZSBtb21lbnQgSSBsYXkgbXkgaGVhZCBvbiB0aGUgcGlsbG93IGFuZCBmYWxsIGFzbGVlcCB1bnRpbCBJIHdha2UgdXAgaW4gdGhlIG1vcm5pbmcuJywKICBzdGQ6ewogICAgcDI6eyBmb3JtOigpPT5bWyd0JywnV2hhdCBiZW5lZml0cyBJIGhhdmUgaGFkJ10sWydwMicsJ21hdGVyaWFsIG9yIGVnbyBiZW5lZml0cyddXSwKICAgICAgICAgcmVjYXA6ZT0+YFdpdGggdGhlIGxldmVsIG9mIGF3YXJlbmVzcyBJIGhhZCBpbiB0aGUgeWVhcnMgd2hlbiBJIHRob3VnaHQgLyBzYWlkIC8gZGlkIHRoZXNlIHRoaW5ncywgdGhhdCB3YXMgYWxsIEkga25ldyBob3cgdG8gZG8uIEkgY2VydGFpbmx5IGhhZCBtYXRlcmlhbCBvciBlZ28gYmVuZWZpdHM6ICR7bWsoZS5wMil9LiBBbmQgcGVyaGFwcyBJIGFsc28gaGFkIG90aGVyIGJlbmVmaXRzIHRoYXQgSSBkb24ndCByZW1lbWJlciBub3cuIEkgbm93IHJlYWxpc2UgdGhhdCBJIGhhdmUgcGFpZCwgYW5kIGFtIHN0aWxsIHBheWluZywgZmFyIHRvbyBoaWdoIGEgcHJpY2UgZm9yIGFsbCB0aGVzZSBiZW5lZml0cy4gJHt0eCgpLnRhaWxQMn1gIH0sCiAgICBwMzp7IGZvcm06KCk9PltbJ3QnLCdJIHByb21pc2XigKYnXSxbJ3AzJywnd2hhdCBJIHByb21pc2Ugbm90IHRvIGRvIGFueW1vcmUsIGFuZCBmb3IgaG93IGxvbmcsIGUuZy46IG5vdCB0byDigKYgZm9yIGF0IGxlYXN0IDEgbWludXRlJ10sWydkdXInLCdhZGQnXV0sCiAgICAgICAgIHJlY2FwOmU9PmBJIHByb21pc2UgJHttayhlLnAzKX0uICR7dHgoKS5uaWdodH1gIH0sCiAgICBwNDp7IGZvcm06KCk9PltbJ3ppJ10sWyd0JyxgJHtwRHJhZnQuemk9PT0nbWFpbmUnPydUb21vcnJvdyc6J1RvZGF5J30gSSBwcm9taXNlIHRv4oCmYF0sWydwNCcsJ3doYXQgSSB3aWxsIGRvLCBhcyB0aGUgc2VlZCBvcHBvc2l0ZSB0byB0aGUgb25lIEkgd2FudCB0byBkZWFjdGl2YXRlJ11dLAogICAgICAgICByZWNhcDplPT5gQXMgYSBjb21wZW5zYXRpbmcgZ2VzdHVyZSwgSSBkZWRpY2F0ZSB0aGUgZmFjdCB0aGF0IEkgbm93IHVuZGVyc3RhbmQgdGhhdCB0aGUgcmVhbGl0eSBJIGV4cGVyaWVuY2UgY29tZXMgZnJvbSB0aGUgc2VlZHMgSSBwbGFudGVkIGluIHRoZSBwYXN0LCB3aGljaCBhcmUgcHJvamVjdGVkIG9udG8gdGhlIGVtcHRpbmVzcyBvZiBhIHJlYWxpdHkgdGhhdCBkb2VzIG5vdCBjb21lIGZyb20gaXRzIG93biBzaWRlLCBhbmQgJHt0eCgpLnppKGUuemkpfSBJIHByb21pc2UgdG8gJHttayhub0xlYWQoZS5wNCkpfS5gIH0KICB9LAogIHB2OnsKICAgIDE6eyBuYW1lOigpPT4nV2hhdCBJIGFtIGZvcmNlZCB0byBleHBlcmllbmNlJywKICAgICAgICBwMTp7IGZvcm06KCk9PltbJ3QnLCdJIGFtIGZvcmNlZCB0byBleHBlcmllbmNlIGluIG15IHJlYWxpdHnigKYnXSxbJ3AxYScsJ3doYXQgSSBhbSBleHBlcmllbmNpbmcgbm93J10sCiAgICAgICAgICAgICAgICAgICAgICAgWyd0Jywn4oCmYmVjYXVzZSBvZiBteSB0aG91Z2h0cywgd29yZHMgYW5kIGFjdGlvbnMgZnJvbSBteSBwYXN0LCBpbiB0aGlzIGxpZmUgb3IgaW4gYSBwcmV2aW91cyBsaWZlLCB3aGVu4oCmJ10sWydwMWInLCd3aGF0IHNlZWRzIEkgcGxhbnRlZCddXSwKICAgICAgICAgICAgIHJlY2FwOmU9PmBJIGFtIGZvcmNlZCB0byBleHBlcmllbmNlIGluIG15IHJlYWxpdHkgJHttayhlLnAxYSl9IGJlY2F1c2Ugb2YgbXkgdGhvdWdodHMsIHdvcmRzIGFuZCBhY3Rpb25zIGZyb20gbXkgcGFzdCwgaW4gdGhpcyBsaWZlIG9yIGluIGEgcHJldmlvdXMgbGlmZSwgd2hlbiAke21rKGUucDFiKX0uICR7dHgoKS50YWlsUDF9YCB9IH0sCiAgICAyOnsgbmFtZTooKT0+J1doaWNoIHNlZWRzIEkgd2FudCB0byBjbGVhcicsCiAgICAgICAgcDE6eyBmb3JtOigpPT5bWyd0JywnSSB3YW50IHRvIGRlYWN0aXZhdGUgdGhlIHNlZWRzIHBsYW50ZWQgd2hlbuKApiddLFsncDFiJywnd2hhdCBJIHRob3VnaHQsIHNhaWQgb3IgZGlkJ11dLAogICAgICAgICAgICAgcmVjYXA6ZT0+YEkgd2FudCB0byBkZWFjdGl2YXRlIHRoZSBzZWVkcyBwbGFudGVkIHdoZW4gJHttayhlLnAxYil9LCBiZWNhdXNlIHRoZXkgZG91YmxlIGV2ZXJ5IDI0IGhvdXJzIGFuZCBJIG5vIGxvbmdlciB3YW50IHRoZXNlIHNlZWRzIHRvIGdyb3cuIFdoYXQncyBtb3JlLCBwZXJoYXBzIEkgaGF2ZSBhbHNvIHBsYW50ZWQgb3RoZXIgc2VlZHMgdGhhdCBJIGRvbid0IHJlbWVtYmVyIG5vdy4gV2hhdGV2ZXIgSSBtYXkgaGF2ZSB0aG91Z2h0LCBzYWlkIG9yIGRvbmUsIEkgd2FudCB0byBkZWFjdGl2YXRlIHRoZXNlIHNlZWRzIG5vdy5gIH0gfSwKICAgIDM6eyBuYW1lOigpPT4nSSBjbGVhciBhbiBlbW90aW9uJywKICAgICAgICBwMTp7IGZvcm06KCk9PltbJ3QnLCdJIHdhbnQgdG8gY2xlYXIgdGhlIHNlZWRzIG9m4oCmJ10sWydwMWUnLCd0aGUgZW1vdGlvbiBvciBwYXR0ZXJuOiBhbmdlciwgZW52eSwgZmVhcuKApiddLAogICAgICAgICAgICAgICAgICAgICAgIFsndCcsJ+KApnBsYW50ZWQgdGhyb3VnaCB0aG91Z2h0cywgd29yZHMgYW5kIGFjdGlvbnMgaW4gbXkgcGFzdCwgaW4gdGhpcyBsaWZlIG9yIGluIGEgcHJldmlvdXMgbGlmZSwgd2hpY2ggZm9yY2UgbWUgdG8gZXhwZXJpZW5jZeKApiddLFsncDFhJywndGhlIHNpdHVhdGlvbiBJIGFtIGxpdmluZyddLAogICAgICAgICAgICAgICAgICAgICAgIFsndCcsJ1doZW7igKYnXSxbJ3AxYicsJ3doYXQgSSB0aGluayBJIHBsYW50ZWQnXV0sCiAgICAgICAgICAgICByZWNhcDplPT5gSSB3YW50IHRvIGNsZWFyIHRoZSBzZWVkcyBvZiAke21rKGUucDFlKX0gcGxhbnRlZCB0aHJvdWdoIHRob3VnaHRzLCB3b3JkcyBhbmQgYWN0aW9ucyBpbiBteSBwYXN0LCBpbiB0aGlzIGxpZmUgb3IgaW4gYSBwcmV2aW91cyBsaWZlLCB3aGljaCBmb3JjZSBtZSB0byBleHBlcmllbmNlICR7bWsoZS5wMWEpfS4gV2hlbiAke21rKGUucDFiKX0uICR7dHgoKS50YWlsUDF9YCB9IH0sCiAgICA0OnsgbmFtZTooKT0+IkkgZG9uJ3Qga25vdyB3aGF0IHNlZWRzIEkgcGxhbnRlZCIsCiAgICAgICAgcDE6eyBmb3JtOigpPT5bWyd0JywnSSBoYXZlIG5vIGlkZWEgd2hhdCBJIGNvdWxkIGhhdmUgcGxhbnRlZCB0byBleHBlcmllbmNlIHRoaXMgc2l0dWF0aW9uOiddLFsncDFhJywndGhlIHNpdHVhdGlvbiBJIGFtIGxpdmluZyddXSwKICAgICAgICAgICAgIHJlY2FwOmU9PmBJIGhhdmUgbm8gaWRlYSB3aGF0IEkgY291bGQgaGF2ZSBwbGFudGVkIHRvIGV4cGVyaWVuY2UgdGhpcyBzaXR1YXRpb246ICR7bWsoZS5wMWEpfS4gQnV0IEkgbm93IHVuZGVyc3RhbmQgdGhhdCBpZiBJIGhhZCBub3QgcGxhbnRlZCB0aGUgc2VlZHMsIHRoaXMgc2l0dWF0aW9uIHdvdWxkIG5vdCBiZSBpbiBteSByZWFsaXR5LiBJIHdhbnQgdG8gZGVhY3RpdmF0ZSB0aGUgcGxhbnRlZCBzZWVkcyBub3cuYCB9LAogICAgICAgIHAyOnsgZm9ybTooKT0+W1sndCcsJ0lmIGEgZmV3IGJlbmVmaXRzIGNvbWUgdG8gbWluZCAob3B0aW9uYWwpJ10sWydwMicsJ3lvdSBjYW4gbGVhdmUgdGhpcyBibGFuayddXSwKICAgICAgICAgICAgIHJlY2FwOmU9PmBJIGNlcnRhaW5seSBoYWQgYmVuZWZpdHMsIGV2ZW4gaWYgSSBkb24ndCBrbm93IHdoYXQgc2VlZHMgSSBwbGFudGVkIG9yIHdoYXQgYmVuZWZpdHMgSSBoYWQuICR7U3RyaW5nKGUucDJ8fCcnKS50cmltKCkgPyBgUGVyaGFwcyAke21rKGUucDIpfSwgYW5kIHRoZXJlIGFyZSBzdXJlbHkgb3RoZXIgYmVuZWZpdHMgSSBtYXkgaGF2ZSBoYWQuYCA6ICdUaGVyZSBhcmUgc3VyZWx5IGJlbmVmaXRzIEkgbWF5IGhhdmUgaGFkLid9ICR7dHgoKS50YWlsUDJ9YCB9LAogICAgICAgIHAzOnsgZm9ybTooKT0+W1sndCcsJ0kgcHJvbWlzZSBub3QgdG8gcGxhbnQgdGhlIHNhbWUgc2VlZHMgYWdhaW4gZm9yIGF0IGxlYXN04oCmJ10sWydwMycsJ2hvdyBsb25nLCBlLmcuOiAxIGhvdXInXSxbJ2R1cicsJ3NldCddXSwKICAgICAgICAgICAgIHJlY2FwOmU9PmBJIHByb21pc2Ugbm90IHRvIHBsYW50IHRoZSBzYW1lIHNlZWRzIGFnYWluIGZvciBhdCBsZWFzdCAke21rKGUucDMpfS4gJHt0eCgpLm5pZ2h0fWAgfSwKICAgICAgICBwNDp7IGZvcm06KCk9PltbJ3ppJ10sWyd0JyxgQXMgYSBjb21wZW5zYXRpbmcgZ2VzdHVyZSwgJHtwRHJhZnQuemk9PT0nbWFpbmUnPyd0b21vcnJvdyc6J3RvZGF5J30gSSBwcm9taXNlIHRv4oCmYF0sWydwNCcsJ3doYXQgSSB3aWxsIGRvJ11dLAogICAgICAgICAgICAgcmVjYXA6ZT0+YEFzIGEgY29tcGVuc2F0aW5nIGdlc3R1cmUsICR7dHgoKS56aShlLnppKX0gSSBwcm9taXNlIHRvICR7bWsobm9MZWFkKGUucDQpKX0uYCB9IH0KICB9Cn19OwoKLyogLS0tLS0tLS0tLSBjb21tdW5pdHkgdGV4dHMgKEVuZ2xpc2gpIC0tLS0tLS0tLS0gKi8KT2JqZWN0LmFzc2lnbihVSS5lbiwgewogIHBlcnNvbmFsOidQZXJzb25hbCcsIGNvbW11bml0eTonQ29tbXVuaXR5Jywgc2VnQXJpYTonV2hhdCB5b3Ugc2VlJywKICBjb21tVGl0bGU6J0NvbW11bml0eScsIGNvbW1MZWFkOiJXaGVuIHlvdSByZWpvaWNlIGluIG90aGVyIHBlb3BsZSdzIHN1Y2Nlc3NlcywgeW91IHdhdGVyIHRoZSBzZWVkcyBmb3IgeW91ciBvd24gZ29hbC4gV2hlbiB5b3UgcmVhZCBzb21lb25lJ3MgNCBwb3dlcnMsIHlvdSBjYW4gZ28gdGhyb3VnaCB0aGVtIGZvciB5b3Vyc2VsZiB0b28uIiwKICBjb21tVGVzdEJhbm5lcjonVGVzdCB2ZXJzaW9uOiB5b3Ugc2VlIGEgZmV3IGV4YW1wbGVzIGhlcmUuIE9uIHRoZSBzaXRlLCB0aGUgcmVhbCBwb3N0cyBvZiB0aG9zZSB3aG8gY2hvb3NlIHRvIHNoYXJlIHdpbGwgYXBwZWFyLicsCiAgY29tbUVtcHR5OidOb3RoaW5nIGhlcmUgeWV0LicsIGFwcGVhckluOm49PmBZb3UgYXBwZWFyIGluIHRoZSBjb21tdW5pdHkgYXMgPGI+JHtufTwvYj5gLAogIHJlYWN0Sm95OidJIHJlam9pY2UnLCBjb3VudEpveToncmVqb2ljZWQnLCB0b2FzdEpveTonV2hlbiB5b3UgcmVqb2ljZSBmb3Igb3RoZXJzLCB5b3Ugd2F0ZXIgdGhlIHNlZWRzIGZvciB5b3VyIG93biBnb2FsLicsCiAgcmVhY3RQb3c6J0kgcmVhZCBpdCcsIGNvdW50UG93OidyZWFkIGl0JywgdG9hc3RQb3c6J1lvdeKAmXZlIHJlYWQgdGhlIDQgcG93ZXJzIGFzIHdlbGwuJywKICBnZXN0Tm90ZToiTWluZCB0aGUgY29tcGVuc2F0aW5nIGdlc3R1cmU6IGNob29zZSBhIHBlcnNvbmFsIG9uZSBhbmQgcHJhY3Rpc2UgaXQgdG8gZGVhY3RpdmF0ZSB0aGUgc2VlZHMuIEl0IGRvZXNuJ3QgaGF2ZSB0byBiZSB3aGF0IHRoZSBvdGhlciBwZXJzb24gcHJvbWlzZWQuIiwKICBub2JvZHlZZXQ6J05vIG9uZSB5ZXQnLCB3aXRoZHJhdzonV2l0aGRyYXcnLCByZXBvcnQ6J1JlcG9ydCcsIHJlcG9ydEFnYWluOidUYXAgYWdhaW4gdG8gcmVwb3J0JywgcmVwb3J0ZWQ6J1RoYW5rIHlvdS4gVGhlIHBvc3QgaGFzIGJlZW4gaGlkZGVuIGFuZCB3aWxsIGJlIHJldmlld2VkLicsCiAgcmVhZEZ1bGw6J1JlYWQgYWxsIDQgcG93ZXJzIGluIGZ1bGwnLCBzaG93TGVzczonU2hvdyBsZXNzJywgeW91Oid5b3UnLAogIGluc3BvSGVhZDpuPT5gRnJvbSB0aGUgY29tbXVuaXR5IMK3ICR7bn1gLCBpbnNwb01vcmU6J1NlZSB3aGF0IG90aGVycyBoYXZlIHBsYW50ZWQg4oC6JywKICBzaGFyZUJ0bjonU2hhcmUgYW5vbnltb3VzbHkgd2l0aCB0aGUgY29tbXVuaXR5Jywgc2hhcmVkQnRuOidTaGFyZWQgaW4gdGhlIGNvbW11bml0eSDCtyB3aXRoZHJhdycsIHNoYXJlZFRhZzonaW4gdGhlIGNvbW11bml0eScsCiAgd2hvU2VlczonV0hPIFNFRVMgSVQnLCBvbmx5TWU6J09ubHkgbWUnLCBzaGFyZUFub246J1NoYXJlIGFub255bW91c2x5Jywgc2hhcmVBZnRlcjonQWZ0ZXIgc2F2aW5nLCB5b3UgY2hvb3NlIHdoYXQgYXBwZWFycyBpbiB0aGUgY29tbXVuaXR5IGFuZCB1bmRlciB3aGljaCBuYW1lLicsCiAgc2hlZXRTaGFyZWQ6J1NoYXJlZCBpbiB0aGUgY29tbXVuaXR5Jywgc2hlZXRTaGFyZWROb3RlOm49PmBUaGlzIGVudHJ5IGlzIHZpc2libGUgaW4gdGhlIGNvbW11bml0eSB1bmRlciB0aGUgbmFtZSA8Yj4ke259PC9iPi4gSWYgeW91IHdpdGhkcmF3IGl0LCBpdCBkaXNhcHBlYXJzIGZvciBldmVyeW9uZS4gSXQgc3RheXMgaW4geW91ciBqb3VybmFsLmAsCiAgYmxvY2tlZE5vdGU6J1NoYXJpbmcgaW4gdGhlIGNvbW11bml0eSBpcyBubyBsb25nZXIgYXZhaWxhYmxlIGZvciB5b3VyIGFjY291bnQuJywKICBuYW1lTGFiZWw6J1lvdXIgbmFtZSBpbiB0aGUgY29tbXVuaXR5JywgbmFtZVBoOidlLmcuIExpbmRlbiBCbG9zc29tJywgbmFtZU5vdGU6Ikl0IGRvZXNuJ3QgaGF2ZSB0byBiZSB5b3VyIHJlYWwgbmFtZS4gWW91IGNhbiBjaGFuZ2UgaXQgYW55dGltZS4iLAogIGFwcGVhcnNBczpuPT5gWW91IGFwcGVhciBhcyA8Yj4ke259PC9iPmAsIG90aGVyc1JlYWQ6J1RISVMgSVMgV0hBVCBPVEhFUlMgV0lMTCBSRUFEJywgY2hvb3NlU2hhcmU6J0NIT09TRSBXSEFUIFRPIFNIQVJFJywKICBwcml2YWN5Tm90ZTonQmVmb3JlIHNoYXJpbmcsIGNoZWNrIHRoYXQgbm8gbmFtZXMgb3IgZGV0YWlscyBhcHBlYXIgYnkgd2hpY2ggc29tZW9uZSBjb3VsZCBiZSByZWNvZ25pc2VkLicsCiAgd2l0aGRyYXdCdG46J1dpdGhkcmF3IGZyb20gdGhlIGNvbW11bml0eScsIHNoYXJlRG86J1NoYXJlJywgbmFtZVNob3J0OidDaG9vc2UgYSBuYW1lIG9mIGF0IGxlYXN0IDIgbGV0dGVycy4nLCBjaG9vc2VPbmU6J0Nob29zZSBhdCBsZWFzdCBvbmUgbGluZS4nLAogIHNoYXJlZFRvYXN0OidTaGFyZWQgd2l0aCB0aGUgY29tbXVuaXR5Jywgd2l0aGRyYXduOidXaXRoZHJhd24gZnJvbSB0aGUgY29tbXVuaXR5JywgbmFtZVNhdmVkOidOYW1lIHNhdmVkJywKICBuYW1lU2hlZXROb3RlOiJJdCBkb2Vzbid0IGhhdmUgdG8gYmUgeW91ciByZWFsIG5hbWUuIEl0IGFsc28gY2hhbmdlcyBvbiB3aGF0IHlvdSBoYXZlIGFscmVhZHkgc2hhcmVkLiIsCiAgZmlyc3RROidIb3cgZG8geW91IHdhbnQgdG8gYXBwZWFyIGluIHRoZSBjb21tdW5pdHk\/JywgZmlyc3ROb3RlOiJDaG9vc2UgYSBuYW1lIHRoYXQgZG9lc24ndCBoYXZlIHRvIGJlIHlvdXIgcmVhbCBvbmUuIFlvdSBvbmx5IHVzZSBpdCB3aGVuIHlvdSBjaG9vc2UgdG8gc2hhcmUgc29tZXRoaW5nLiBZb3UgY2FuIGNoYW5nZSBpdCBhbnl0aW1lLiIsCiAgbGF0ZXI6J0xhdGVyJywgd2VsY29tZTpuPT5gV2VsY29tZSwgJHtufSFgLCBhcGlGYWlsOiJDb3VsZG4ndCBjb25uZWN0IHRvIHRoZSBzaXRlLiIsCiAgZXJyOnsgYmxvY2F0OidTaGFyaW5nIGlzIG5vIGxvbmdlciBhdmFpbGFibGUgZm9yIHlvdXIgYWNjb3VudC4nLCBmYXJhX251bWU6J0ZpcnN0IGNob29zZSBhIG5hbWUgZm9yIHRoZSBjb21tdW5pdHkuJywgZ29sOidUaGVyZSBpcyBub3RoaW5nIHRvIHNoYXJlLicsCiAgICAgICAgcHJlYV9tdWx0ZToiWW91J3ZlIHNoYXJlZCBhIGxvdCB0b2RheS4gQ29tZSBiYWNrIHRvbW9ycm93LiIsIGx1YXQ6J1RoaXMgbmFtZSBpcyBhbHJlYWR5IHRha2VuLiBDaG9vc2UgYW5vdGhlciBvbmUuJywgbnVtZTonVGhlIG5hbWUgbXVzdCBoYXZlIGJldHdlZW4gMiBhbmQgMzAgbGV0dGVycy4nIH0KfSk7CgovKiAtLS0tLS0tLS0tIEZyYW7Dp2FpcyAtLS0tLS0tLS0tICovClVJLmZyID0gewogIGFwcE5hbWU6J0Jvbm5lcyBHcmFpbmVzJywgY291cnNlczonTWVzIGNvdXJzJywgbGFuZ3VhZ2U6J0xhbmd1ZScsIHNvb246J2JpZW50w7R0JywgY2xvc2U6J0Zlcm1lcicsCiAgbmF2VG9kYXk6IkF1am91cmQnaHVpIiwgbmF2Sm95OidCb25oZXVyJywgbmF2UHJhY3RpY2U6J1ByYXRpcXVlJywgbmF2VG9kbzonw4AgZmFpcmUnLCBuYXZQb3dlcnM6JzQgUG91dm9pcnMnLCBtZW51OidNZW51JywKICBzYXZlRmFpbDoiSW1wb3NzaWJsZSBkJ2VucmVnaXN0cmVyLiBWw6lyaWZpZSB0YSBjb25uZXhpb24gaW50ZXJuZXQuIiwgbG9hZEZhaWw6J0ltcG9zc2libGUgZGUgY2hhcmdlciB0ZXMgZG9ubsOpZXMuJywKICB0b2RheToiQXVqb3VyZCdodWkiLCB5ZXN0ZXJkYXk6J0hpZXInLAogIGtpbmQ6eyBtZWRpdGF0aWU6J03DqWRpdGF0aW9uJywgeW9nYTonWW9nYScsIGJ1Y3VyaWU6J03DqWRpdGF0aW9uIGR1IGJvbmhldXInLCByZWN1bm9zdGludGU6J0dyYXRpdHVkZXMgZXQgc3VjY8OocycsIHB1dGVyaTonTGVzIDQgcG91dm9pcnMnIH0sCiAgdGVzdEJhbm5lcjoiVmVyc2lvbiBkZSB0ZXN0IDogdGVzIG5vdGVzIHJlc3RlbnQgc2V1bGVtZW50IHN1ciBjZXQgYXBwYXJlaWwuIFN1ciBsZSBzaXRlLCBlbGxlcyBzZXJvbnQgZW5yZWdpc3Ryw6llcyBkYW5zIHRvbiBjb21wdGUuIiwKICBnZW5ROidDb21tZW50IHByw6lmw6hyZXMtdHUgcXVlIGplIG3igJlhZHJlc3NlIMOgIHRvaSA\/JywgZ2VuTm90ZTonUG91ciBxdWUgbGVzIHRleHRlcyBzb25uZW50IG5hdHVyZWxzLCBwYXIgZXhlbXBsZSDCqyBKZSBzdWlzIHJlY29ubmFpc3NhbnRlIMK7IG91IMKrIEplIHN1aXMgcmVjb25uYWlzc2FudCDCuy4nLCBmZW06J0F1IGbDqW1pbmluJywgbWFzYzonQXUgbWFzY3VsaW4nLAogIGdlbkZvb3Q6Zz0+YEplIG3igJlhZHJlc3NlIMOgIHRvaSBhdSAke2c9PT0nbSc\/J21hc2N1bGluJzonZsOpbWluaW4nfWAsIGNoYW5nZTonY2hhbmdlcicsCiAgaGVhZGxpbmU6IlF1ZSBwbGFudGVzLXR1IGF1am91cmQnaHVpID8iLCBzdHJlYWs6J2pvdXJzIGRlIHN1aXRlJywgbWluVG9kYXk6Im1pbnV0ZXMgYXVqb3VyZCdodWkiLCBwcmFjdFRvZGF5OiJwcmF0aXF1ZXMgYXVqb3VyZCdodWkiLCBuVG9kYXk6bj0+YCR7bn0gYXVqb3VyZCdodWlgLAogIHRpbGVNZWQ6J03DqWRpdGF0aW9uIC8gWW9nYScsIHRpbGVSZWM6J0dyYXRpdHVkZXMgLyBTdWNjw6hzJywgdGlsZUpveTonTcOpZGl0YXRpb24gZHUgYm9uaGV1cicsIHRpbGVQb3c6J0xlcyA0IHBvdXZvaXJzJywKICBqb3VybmFsOidNb24gam91cm5hbCcsIG5FbnRyaWVzOm49PmAke259ICR7bj09PTE\/J25vdGUnOidub3Rlcyd9YCwKICBqb3lUaXRsZTonTcOpZGl0YXRpb24gZHUgYm9uaGV1cicsIGpveUxlYWQ6J1JlbXBsaXMgbGVzIHRyb2lzIHLDqXBvbnNlcywgcHVpcyBlbnJlZ2lzdHJlLicsIGJyZWF0aGVDdWU6J0luc3BpcmUgZXQgZXhwaXJlIHByb2ZvbmTDqW1lbnQgMyBmb2lzJywgYnJlYXRoZUJ0bjonUmVzcGlyZSBhdmVjIG1vaScsCiAgYWRkSGVscFRvZG86JysgQWpvdXRlciDDoCBmYWlyZSA6IHF1aSBq4oCZYWlkZScsIG5ld0pveTonVW5lIG5vdXZlbGxlIG3DqWRpdGF0aW9uIGR1IGJvbmhldXInLCBzYXZlOidFbnJlZ2lzdHJlcicsCiAgcGlja1ByZXY6bj0+YENob2lzaXIgdW4gb2JqZWN0aWYgcHLDqWPDqWRlbnQgKCR7bn0pYCwgbXlHb2FsczonTWVzIG9iamVjdGlmcycsIHNlYXJjaEdvYWxzOidDaGVyY2hlciBkYW5zIG1lcyBvYmplY3RpZnMnLCBub0dvYWw6J0F1Y3VuIG9iamVjdGlmIHRyb3V2w6kuJywgbmV3R29hbFBoOidvdSDDqWNyaXMgdW4gbm91dmVsIG9iamVjdGlmJywKICBhZGRUb2RvOicrIEFqb3V0ZXIgw6AgZmFpcmUnLCBhZGRlZFRvZG86J+KckyBBam91dMOpIMOgIGZhaXJlJywgdG9hc3RBZGRlZDonQWpvdXTDqSDDoCBmYWlyZScsIGZpbGxBbnN3ZXJzOidSZW1wbGlzIGxlcyByw6lwb25zZXMuJywKICBpbmhhbGU6J0luc3BpcmXigKYnLCBleGhhbGU6J0V4cGlyZeKApicsIGFnYWluOidFbmNvcmUgdW5lIGZvaXMnLCBkb25lQnJlYXRoUDonVHUgYXMgcHJhdGlxdcOpIHBvdXIgZMOpc2FjdGl2ZXIgbGEgZ3JhaW5lLicsIGRvbmVCcmVhdGhKOidMYSBncmFpbmUgZXN0IGFycm9zw6llLicsCiAgcG93VGl0bGU6J0xlcyA0IHBvdXZvaXJzJywgcG93TGVhZDoiQ2hvaXNpcyBsZSB0aMOobWUgZXQgdG9uIHBvaW50IGRlIGTDqXBhcnQsIHJlbXBsaXMgY2hhcXVlIHBvdXZvaXIsIHB1aXMgZW5yZWdpc3RyZS4iLCB0aGVtZTonVEjDiE1FJywgdGhlbWVBcmlhOidUaMOobWUnLAogIGZld2VyOidNb2lucycsIGFsbFRoZW1lczpuPT5gVG91cyBsZXMgdGjDqG1lcyAoJHtufSlgLCBuZXdUaGVtZVBoOidvdSBham91dGUgdW4gbm91dmVhdSB0aMOobWUnLCBhZGQ6J0Fqb3V0ZXInLCBzdGFydDoiRCdPw5kgVFUgUEFSUyIsCiAgd2hlbjonUXVhbmQnLCB6VG9kYXk6IkF1am91cmQnaHVpIiwgelRvbW9ycm93OidEZW1haW4nLCBob3dMb25nOidDb21iaWVuIGRlIHRlbXBzJywKICBwNG5vdGU6J0FwcsOocyBs4oCZZW5yZWdpc3RyZW1lbnQsIHRhIHByb21lc3NlIHZhIGF1dG9tYXRpcXVlbWVudCBkYW5zIHRhIGxpc3RlIMOAIGZhaXJlLicsIGZpbGxQb3dlcnM6J1JlbXBsaXMgbGVzIHBvdXZvaXJzLicsIGV4cG9ydExpbms6J0V4cG9ydGVyIHRlcyBwcmF0aXF1ZXMgc3VyIHVuZSBww6lyaW9kZScsCiAgaW5Ub2RvOidDZSBxdWUgdHUgYXMgcHJvbWlzIGRhbnMgbGUgNGUgcG91dm9pciBlc3QgZGFucyB0YSBsaXN0ZSDDgCBmYWlyZS4nLCBjb3B5OidDb3BpZXIgbGUgdGV4dGUnLCBwZGY6J0VucmVnaXN0cmVyIGVuIFBERicsCiAgZG9Kb3lOb3c6J0ZhaXMgbGEgbcOpZGl0YXRpb24gZHUgYm9uaGV1ciBtYWludGVuYW50JywgZ29Kb3k6J0FsbGVyIMOgIGxhIG3DqWRpdGF0aW9uIGR1IGJvbmhldXInLCBuZXdQb3dlcnM6J0NvbW1lbmNlciB1biBub3V2ZWwgZXhlcmNpY2UgZGVzIDQgcG91dm9pcnMnLAogIGNvcGllZDonVGV4dGUgY29wacOpLiBUdSBwZXV4IGxlIGNvbGxlciBvw7kgdHUgdmV1eC4nLCBjb3B5RmFpbDonSW1wb3NzaWJsZSBkZSBjb3BpZXIgc3VyIGNldCBhcHBhcmVpbC4nLAogIGJhY2s6J+KAuSBSZXRvdXInLCBleHBUaXRsZTonRXhwb3J0ZXIgdGVzIHByYXRpcXVlcycsIGV4cExlYWQ6J0Nob2lzaXMgbGEgcMOpcmlvZGUuIFR1IHBldXggY29waWVyIGxlIHRleHRlIG91IGzigJllbnJlZ2lzdHJlciBlbiBQREYuJywgZnJvbTonRFUnLCB0bzonQVUnLAogIG5QcmFjdDpuPT5gJHtufSAke249PT0xPydwcmF0aXF1ZSc6J3ByYXRpcXVlcyd9IHN1ciBjZXR0ZSBww6lyaW9kZS5gLCBub1ByYWN0OidUdSBu4oCZYXMgcGFzIGRlIHByYXRpcXVlIGRlcyA0IHBvdXZvaXJzIHN1ciBjZXR0ZSBww6lyaW9kZS4nLAogIHJlY1RpdGxlOidHcmF0aXR1ZGVzIC8gU3VjY8OocycsIHJlY0xlYWQ6J8OJY3Jpcy1lbiBhdXRhbnQgcXVlIHR1IHZldXguIENoYXF1ZSBsaWduZSBlc3QgdW5lIGdyYXRpdHVkZSBvdSB1biBzdWNjw6hzLicsCiAgZ3JhdGl0dWRlOidHcmF0aXR1ZGUnLCBzdWNjZXNzOidTdWNjw6hzJywgcm93VHlwZTppPT5gVHlwZSBkZSBsYSBsaWduZSAke2l9YCwgZGVsUm93OidTdXBwcmltZXIgbGEgbGlnbmUnLCByZW1vdmU6J1N1cHByaW1lcicsIHN1Y2Nlc3NQaDoiY2UgcXVlIGonYWkgZmFpdCBhdWpvdXJkJ2h1aSIsCiAgYWRkUm93OicrIEFqb3V0ZXIgdW5lIGxpZ25lJywgd3JpdGVPbmU6J8OJY3JpcyBhdSBtb2lucyB1bmUgbGlnbmUuJywgc2F2ZWRKOidFbnJlZ2lzdHLDqSBkYW5zIHRvbiBqb3VybmFsJywKICBwcmVHOkc9PmBKZSBzdWlzICR7RygncmVjb25uYWlzc2FudGUnLCdyZWNvbm5haXNzYW50Jyl9IHBvdXJgLCBwcmVTOkc9PmBKZSBzdWlzICR7RygnaGV1cmV1c2UnLCdoZXVyZXV4Jyl9IGRlYCwKICBuUmVjOihucixucyk9Pltucj9ucisobnI9PT0xPycgZ3JhdGl0dWRlJzonIGdyYXRpdHVkZXMnKTonJywgbnM\/bnMrJyBzdWNjw6hzJzonJ10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyDCtyAnKSwKICB0b2RvVGl0bGU6J8OAIGZhaXJlJywgdG9kb0xlYWQ6J0NlIHF1ZSBq4oCZYWkgw6AgZmFpcmUgcG91ciBxdWUgbGVzIGdyYWluZXMgcG91c3NlbnQuJywgdG9kb1BoOidBam91dGVyIHF1ZWxxdWUgY2hvc2Ugw6AgZmFpcmUnLAogIG1hcmtEb25lOidNYXJxdWVyIGNvbW1lIGZhaXQnLCBtYXJrVW5kb25lOidNYXJxdWVyIGNvbW1lIG5vbiBmYWl0JywgZGVsOidTdXBwcmltZXInLCBubzonTm9uJywKICB0b2RvRW1wdHk6J1JpZW4gw6AgZmFpcmUgcG91ciBsZSBtb21lbnQuPGJyPkNlIHF1ZSB0dSDDqWNyaXMgw6AgwqsgcXVpIGrigJlhaWRlIMK7IGRhbnMgbGEgbcOpZGl0YXRpb24gZHUgYm9uaGV1ciBldCBkYW5zIGxlIDRlIHBvdXZvaXIgcGV1dCBhcnJpdmVyIGljaS4nLAogIHNob3dEb25lOihzLG4pPT5gJHtzPydNYXNxdWVyJzonQWZmaWNoZXInfSBjZSBxdWUgauKAmWFpIGZhaXQgKCR7bn0pYCwgc3JjOntidWN1cmllOidNw6lkaXRhdGlvbiBkdSBib25oZXVyJyxwdXRlcmk6J0xlcyA0IHBvdXZvaXJzJyxtYW51YWw6J0Fqb3V0w6kgcGFyIG1vaSd9LCBkb25lVG9hc3Q6J0ZhaXQuIEJyYXZvICEnLAogIHRvZG9Qcm9taXNlOno9Pno9PT0nbWFpbmUnPydEZW1haW4gamUgcHJvbWV0cyBkZSc6IkF1am91cmQnaHVpIGplIHByb21ldHMgZGUiLAogIGtpbmRBcmlhOidUeXBlIGRlIHByYXRpcXVlJywgZG9uZUg6J0ZpbmkuIExhIGdyYWluZSBlc3QgcGxhbnTDqWUuJywgZG9uZU5vdGU6KGssbSk9PmAke2t9LCAke219IG1pbi4gRW5yZWdpc3Ryw6kgZGFucyB0b24gam91cm5hbC5gLAogIHRpdGxlT3B0OidUaXRyZSAoZmFjdWx0YXRpZiknLCBwaE1vcm5pbmc6J3BhciBleC4gTcOpZGl0YXRpb24gZHUgbWF0aW4nLCBhbm90aGVyOidVbmUgYXV0cmUgcHJhdGlxdWUnLAogIHN0b3BwZWRBZnRlcjptPT5gVHUgYXMgYXJyw6p0w6kgYXByw6hzICR7bX0gbWluLmAsIHdhbnRTYXZlOidKZSBs4oCZYWpvdXRlIMOgIHRvbiBqb3VybmFsID8nLCBzYXZlTWluOm09PmBFbnJlZ2lzdHJlciAke219IG1pbmAsIGRvbnRTYXZlOidOZSBwYXMgZW5yZWdpc3RyZXInLAogIHN0b3BwZWQ6J0xhIHByYXRpcXVlIGEgw6l0w6kgYXJyw6p0w6llLicsIGJhY2tQbGFpbjonUmV0b3VyJywgcmVzdW1lOidDb250aW51ZXInLCBwYXVzZTonUGF1c2UnLCBzdG9wOidBcnLDqnRlcicsCiAgc2NyZWVuTm90ZToiR2FyZGUgbOKAmcOpY3JhbiBhbGx1bcOpLiBTaSB0b24gdMOpbMOpcGhvbmUgc2UgdmVycm91aWxsZSwgbGEgY2xvY2hlIGRlIGZpbiBwZXV0IG5lIHBhcyBzb25uZXIsIG1haXMgbGEgcHJhdGlxdWUgZXN0IGVucmVnaXN0csOpZSBxdWFuZCB0dSByZXZpZW5zLiIsCiAgZHVyYXRpb246J0RVUsOJRScsIHByZXA6J1BSw4lQQVJBVElPTicsIHNvdW5kOidTT04nLCBiZWxsOidDbG9jaGUnLCBib3dsOidCb2wgdGliw6l0YWluJywgbGlzdGVuOifDiWNvdXRlcicsIHRpdGxlQ2FwOidUSVRSRSAoRkFDVUxUQVRJRiknLCBwaFNpbGVuY2U6J3BhciBleC4gNSBtaW51dGVzIGRlIHNpbGVuY2UnLAogIGJlZ2luOidDb21tZW5jZXInLCBtYW51YWxMaW5rOidK4oCZYWkgcHJhdGlxdcOpIHNhbnMgbWludXRldXIsIGplIHZldXgganVzdGUgbGUgbm90ZXInLCBub1RpbWVyOidTYW5zIG1pbnV0ZXVyJywgbG9nUHJhY3Q6J05vdGVyIHVuZSBwcmF0aXF1ZScsIGRheTonSk9VUicsCiAgcGhFdmVuaW5nOidwYXIgZXguIFlvZ2EgZHUgc29pcicsIHNhdmVKb3VybmFsOidFbnJlZ2lzdHJlciBkYW5zIGxlIGpvdXJuYWwnLCBjYW5jZWw6J0FubnVsZXInLCBsb2dnZWQ6J25vdMOpZScsCiAgcmVhZHk6J1Byw6p0IMOgIGNvbW1lbmNlcicsIHByZXBQaGFzZTonUHLDqXBhcmF0aW9uJywgYmVsbFN0YXJ0OidMYSBjbG9jaGUgc29ubmUgYXUgZMOpYnV0Jywgb2Y6J3N1ciAnLCBwYXVzZWQ6J1BhdXNlJywgcHJlc3NDb250OidBcHB1aWUgc3VyIENvbnRpbnVlcicsCiAgcGx1c1ByZXA6bD0+YCsgJHtsfSBkZSBwcsOpcGFyYXRpb25gLCBub1ByZXA6J3NhbnMgcHLDqXBhcmF0aW9uJywgbm9uZTonQXVjdW5lJywgdW5pdE1pbjonbWluJywgdW5pdFNlYzoncycsCiAgYWxsOidUb3V0JywgblByYWN0aWNlczpuPT5gJHtufSAke249PT0xPydwcmF0aXF1ZSc6J3ByYXRpcXVlcyd9YCwgdG90TWluOm09PmAgwrcgJHttfSBtaW51dGVzIGF1IHRvdGFsYCwKICBqRW1wdHk6J0F1Y3VuZSBncmFpbmUgaWNpIHBvdXIgbOKAmWluc3RhbnQuPGJyPk3DqWRpdGUgb3Ugbm90ZSB1bmUgcHJhdGlxdWUgZXQgZWxsZSBhcHBhcmHDrnRyYSBkYW5zIHRvbiBqb3VybmFsLicsIGdvUHJhY3RpY2U6J0FsbGVyIMOgIGxhIHByYXRpcXVlJywKICBkZWxROidTdXBwcmltZXIgY2V0dGUgcHJhdGlxdWUgPycsIGRlbGV0ZWQ6J1N1cHByaW3DqScsCiAgZ2F0ZUxlYWQ6J0zigJlhcHBsaWNhdGlvbiBlc3QgZ3JhdHVpdGUuIENvbm5lY3RlLXRvaSBwb3VyIHF1ZSB0ZXMgbm90ZXMgcmVzdGVudCBlbnJlZ2lzdHLDqWVzLicsIHNpZ25JbjonU2UgY29ubmVjdGVyJywgcmVnaXN0ZXI6J1BhcyBkZSBjb21wdGUgPyBDcsOpZS1sZSBncmF0dWl0ZW1lbnQnLAogIHBlcnNvbmFsOidQZXJzb25uZWwnLCBjb21tdW5pdHk6J0NvbW11bmF1dMOpJywgc2VnQXJpYTonQ2UgcXVlIHR1IHZvaXMnLAogIGNvbW1UaXRsZTonQ29tbXVuYXV0w6knLCBjb21tTGVhZDonUXVhbmQgdHUgdGUgcsOpam91aXMgZGVzIHN1Y2PDqHMgZGVzIGF1dHJlcywgdHUgYXJyb3NlcyBsZXMgZ3JhaW5lcyBkZSB0b24gcHJvcHJlIG9iamVjdGlmLiBRdWFuZCB0dSBsaXMgbGVzIDQgcG91dm9pcnMgZGUgcXVlbHF14oCZdW4sIHR1IHBldXggbGVzIHBhcmNvdXJpciBwb3VyIHRvaSBhdXNzaS4nLAogIGNvbW1UZXN0QmFubmVyOidWZXJzaW9uIGRlIHRlc3QgOiB0dSB2b2lzIGljaSBxdWVscXVlcyBleGVtcGxlcy4gU3VyIGxlIHNpdGUgYXBwYXJhw650cm9udCBsZXMgdnJhaXMgcGFydGFnZXMgZGUgY2V1eCBxdWkgY2hvaXNpc3NlbnQgZGUgcGFydGFnZXIuJywKICBjb21tRW1wdHk6J1JpZW4gaWNpIHBvdXIgbOKAmWluc3RhbnQuJywgYXBwZWFySW46bj0+YFR1IGFwcGFyYWlzIGRhbnMgbGEgY29tbXVuYXV0w6kgc291cyBsZSBub20gPGI+JHtufTwvYj5gLAogIHJlYWN0Sm95OidKZSBtZSByw6lqb3VpcycsIGNvdW50Sm95OidzZSBzb250IHLDqWpvdWlzJywgdG9hc3RKb3k6J1F1YW5kIHR1IHRlIHLDqWpvdWlzIHBvdXIgbGVzIGF1dHJlcywgdHUgYXJyb3NlcyBsZXMgZ3JhaW5lcyBkZSB0b24gb2JqZWN0aWYuJywKICByZWFjdFBvdzonSuKAmWFpIGx1JywgY291bnRQb3c6J2zigJlvbnQgbHUnLCB0b2FzdFBvdzonVHUgYXMgbHUgbGVzIDQgcG91dm9pcnMgw6AgdG9uIHRvdXIuJywKICBnZXN0Tm90ZTonQXR0ZW50aW9uIGF1IGdlc3RlIGRlIGNvbXBlbnNhdGlvbiA6IGNob2lzaXMtZW4gdW4gcGVyc29ubmVsIGV0IHByYXRpcXVlLWxlIHBvdXIgZMOpc2FjdGl2ZXIgbGVzIGdyYWluZXMuIENlIG7igJllc3QgcGFzIGZvcmPDqW1lbnQgY2UgcXVlIGzigJlhdXRyZSBwZXJzb25uZSBhIHByb21pcy4nLAogIG5vYm9keVlldDonUGVyc29ubmUgcG91ciBs4oCZaW5zdGFudCcsIHdpdGhkcmF3OidSZXRpcmVyJywgcmVwb3J0OidTaWduYWxlcicsIHJlcG9ydEFnYWluOidBcHB1aWUgZW5jb3JlIHBvdXIgc2lnbmFsZXInLCByZXBvcnRlZDonTWVyY2kuIExlIHBhcnRhZ2UgYSDDqXTDqSBtYXNxdcOpIGV0IHNlcmEgdsOpcmlmacOpLicsCiAgcmVhZEZ1bGw6J0xpcmUgbGVzIDQgcG91dm9pcnMgZW4gZW50aWVyJywgc2hvd0xlc3M6J01vaW5zJywgeW91Oid0b2knLAogIGluc3BvSGVhZDpuPT5gRGUgbGEgY29tbXVuYXV0w6kgwrcgJHtufWAsIGluc3BvTW9yZTonVm9pciBjZSBxdWUgbGVzIGF1dHJlcyBvbnQgcGxhbnTDqSDigLonLAogIHNoYXJlQnRuOidQYXJ0YWdlciBhbm9ueW1lbWVudCBhdmVjIGxhIGNvbW11bmF1dMOpJywgc2hhcmVkQnRuOidQYXJ0YWfDqSBkYW5zIGxhIGNvbW11bmF1dMOpIMK3IHJldGlyZXInLCBzaGFyZWRUYWc6J2RhbnMgbGEgY29tbXVuYXV0w6knLAogIHdob1NlZXM6J1FVSSBWT0lUJywgb25seU1lOidNb2kgc2V1bGVtZW50Jywgc2hhcmVBbm9uOidQYXJ0YWdlciBhbm9ueW1lbWVudCcsIHNoYXJlQWZ0ZXI6J0FwcsOocyBs4oCZZW5yZWdpc3RyZW1lbnQsIHR1IGNob2lzaXMgY2UgcXVpIGFwcGFyYcOudCBkYW5zIGxhIGNvbW11bmF1dMOpIGV0IHNvdXMgcXVlbCBub20uJywKICBzaGVldFNoYXJlZDonUGFydGFnw6kgZGFucyBsYSBjb21tdW5hdXTDqScsIHNoZWV0U2hhcmVkTm90ZTpuPT5gQ2V0dGUgbm90ZSBlc3QgdmlzaWJsZSBkYW5zIGxhIGNvbW11bmF1dMOpIHNvdXMgbGUgbm9tIDxiPiR7bn08L2I+LiBTaSB0dSBsYSByZXRpcmVzLCBlbGxlIGRpc3BhcmHDrnQgcG91ciB0b3V0IGxlIG1vbmRlLiBFbGxlIHJlc3RlIGRhbnMgdG9uIGpvdXJuYWwuYCwKICBibG9ja2VkTm90ZTonTGUgcGFydGFnZSBkYW5zIGxhIGNvbW11bmF1dMOpIG7igJllc3QgcGx1cyBkaXNwb25pYmxlIHBvdXIgdG9uIGNvbXB0ZS4nLAogIG5hbWVMYWJlbDonVG9uIG5vbSBkYW5zIGxhIGNvbW11bmF1dMOpJywgbmFtZVBoOidwYXIgZXguIEZsZXVyIGRlIHRpbGxldWwnLCBuYW1lTm90ZTonQ2UgbuKAmWVzdCBwYXMgZm9yY8OpbWVudCB0b24gdnJhaSBub20uIFR1IHBldXggbGUgY2hhbmdlciDDoCB0b3V0IG1vbWVudC4nLAogIGFwcGVhcnNBczpuPT5gVHUgYXBwYXJhaXMgc291cyBsZSBub20gPGI+JHtufTwvYj5gLCBvdGhlcnNSZWFkOidWT0lDSSBDRSBRVUUgTEVTIEFVVFJFUyBMSVJPTlQnLCBjaG9vc2VTaGFyZTonQ0hPSVNJUyBDRSBRVUUgVFUgUEFSVEFHRVMnLAogIHByaXZhY3lOb3RlOidBdmFudCBkZSBwYXJ0YWdlciwgdsOpcmlmaWUgcXXigJlpbCBu4oCZeSBhIHBhcyBkZSBub21zIG91IGRlIGTDqXRhaWxzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIHF1ZWxxdeKAmXVuLicsCiAgd2l0aGRyYXdCdG46J1JldGlyZXIgZGUgbGEgY29tbXVuYXV0w6knLCBzaGFyZURvOidQYXJ0YWdlcicsIG5hbWVTaG9ydDonQ2hvaXNpcyB1biBub20gZOKAmWF1IG1vaW5zIDIgbGV0dHJlcy4nLCBjaG9vc2VPbmU6J0Nob2lzaXMgYXUgbW9pbnMgdW5lIGxpZ25lLicsCiAgc2hhcmVkVG9hc3Q6J1BhcnRhZ8OpIGF2ZWMgbGEgY29tbXVuYXV0w6knLCB3aXRoZHJhd246J1JldGlyw6kgZGUgbGEgY29tbXVuYXV0w6knLCBuYW1lU2F2ZWQ6J05vbSBlbnJlZ2lzdHLDqScsCiAgbmFtZVNoZWV0Tm90ZTonQ2UgbuKAmWVzdCBwYXMgZm9yY8OpbWVudCB0b24gdnJhaSBub20uIElsIGNoYW5nZSBhdXNzaSBzdXIgY2UgcXVlIHR1IGFzIGTDqWrDoCBwYXJ0YWfDqS4nLAogIGZpcnN0UTonQ29tbWVudCB2ZXV4LXR1IGFwcGFyYcOudHJlIGRhbnMgbGEgY29tbXVuYXV0w6kgPycsIGZpcnN0Tm90ZTonQ2hvaXNpcyB1biBub20gcXVpIG7igJllc3QgcGFzIGZvcmPDqW1lbnQgdG9uIHZyYWkgbm9tLiBUdSBuZSBs4oCZdXRpbGlzZXMgcXVlIGxvcnNxdWUgdHUgY2hvaXNpcyBkZSBwYXJ0YWdlciBxdWVscXVlIGNob3NlLiBUdSBwZXV4IGxlIGNoYW5nZXIgw6AgdG91dCBtb21lbnQuJywKICBsYXRlcjonUGx1cyB0YXJkJywgd2VsY29tZTpuPT5gQmllbnZlbnVlLCAke259ICFgLCBhcGlGYWlsOidJbXBvc3NpYmxlIGRlIHNlIGNvbm5lY3RlciBhdSBzaXRlLicsCiAgZXJyOnsgYmxvY2F0OidMZSBwYXJ0YWdlIG7igJllc3QgcGx1cyBkaXNwb25pYmxlIHBvdXIgdG9uIGNvbXB0ZS4nLCBmYXJhX251bWU6J0Nob2lzaXMgZOKAmWFib3JkIHVuIG5vbSBwb3VyIGxhIGNvbW11bmF1dMOpLicsIGdvbDonSWwgbuKAmXkgYSByaWVuIMOgIHBhcnRhZ2VyLicsCiAgICAgICAgcHJlYV9tdWx0ZTonVHUgYXMgZMOpasOgIGJlYXVjb3VwIHBhcnRhZ8OpIGF1am91cmTigJlodWkuIFJldmllbnMgZGVtYWluLicsIGx1YXQ6J0NlIG5vbSBlc3QgZMOpasOgIHByaXMuIENob2lzaXMtZW4gdW4gYXV0cmUuJywgbnVtZTonTGUgbm9tIGRvaXQgYXZvaXIgZW50cmUgMiBldCAzMCBsZXR0cmVzLicgfQp9OwoKLyogLS0tLS0tLS0tLSBJdGFsaWFubyAtLS0tLS0tLS0tICovClVJLml0ID0gewogIGFwcE5hbWU6J1NlbWkgQnVvbmknLCBjb3Vyc2VzOidJIG1pZWkgY29yc2knLCBsYW5ndWFnZTonTGluZ3VhJywgc29vbjoncHJlc3RvJywgY2xvc2U6J0NoaXVkaScsCiAgbmF2VG9kYXk6J09nZ2knLCBuYXZKb3k6J0dpb2lhJywgbmF2UHJhY3RpY2U6J1ByYXRpY2EnLCBuYXZUb2RvOidEYSBmYXJlJywgbmF2UG93ZXJzOic0IFBvdGVyaScsIG1lbnU6J01lbnUnLAogIHNhdmVGYWlsOidJbXBvc3NpYmlsZSBzYWx2YXJlLiBDb250cm9sbGEgbGEgY29ubmVzc2lvbmUgaW50ZXJuZXQuJywgbG9hZEZhaWw6J0ltcG9zc2liaWxlIGNhcmljYXJlIGkgdHVvaSBkYXRpLicsCiAgdG9kYXk6J09nZ2knLCB5ZXN0ZXJkYXk6J0llcmknLAogIGtpbmQ6eyBtZWRpdGF0aWU6J01lZGl0YXppb25lJywgeW9nYTonWW9nYScsIGJ1Y3VyaWU6J01lZGl0YXppb25lIGRlbGxhIGdpb2lhJywgcmVjdW5vc3RpbnRlOidHcmF0aXR1ZGluaSBlIHN1Y2Nlc3NpJywgcHV0ZXJpOidJIDQgcG90ZXJpJyB9LAogIHRlc3RCYW5uZXI6J1ZlcnNpb25lIGRpIHByb3ZhOiBsZSB0dWUgbm90ZSByZXN0YW5vIHNvbG8gc3UgcXVlc3RvIGRpc3Bvc2l0aXZvLiBTdWwgc2l0byB2ZXJyYW5ubyBzYWx2YXRlIG5lbCB0dW8gYWNjb3VudC4nLAogIGdlblE6J0NvbWUgcHJlZmVyaXNjaSBjaGUgbWkgcml2b2xnYSBhIHRlPycsIGdlbk5vdGU6J1BlcmNow6kgaSB0ZXN0aSBzdW9uaW5vIG5hdHVyYWxpLCBhZCBlc2VtcGlvIMKrU29ubyBncmF0YcK7IG8gwqtTb25vIGdyYXRvwrsuJywgZmVtOidBbCBmZW1taW5pbGUnLCBtYXNjOidBbCBtYXNjaGlsZScsCiAgZ2VuRm9vdDpnPT5gTWkgcml2b2xnbyBhIHRlIGFsICR7Zz09PSdtJz8nbWFzY2hpbGUnOidmZW1taW5pbGUnfWAsIGNoYW5nZTonY2FtYmlhJywKICBoZWFkbGluZTonQ2hlIGNvc2EgcGlhbnRpIG9nZ2k\/Jywgc3RyZWFrOidnaW9ybmkgZGkgZmlsYScsIG1pblRvZGF5OidtaW51dGkgb2dnaScsIHByYWN0VG9kYXk6J3ByYXRpY2hlIG9nZ2knLCBuVG9kYXk6bj0+YCR7bn0gb2dnaWAsCiAgdGlsZU1lZDonTWVkaXRhemlvbmUgLyBZb2dhJywgdGlsZVJlYzonR3JhdGl0dWRpbmkgLyBTdWNjZXNzaScsIHRpbGVKb3k6J01lZGl0YXppb25lIGRlbGxhIGdpb2lhJywgdGlsZVBvdzonSSA0IHBvdGVyaScsCiAgam91cm5hbDonSWwgbWlvIGRpYXJpbycsIG5FbnRyaWVzOm49PmAke259ICR7bj09PTE\/J25vdGEnOidub3RlJ31gLAogIGpveVRpdGxlOidNZWRpdGF6aW9uZSBkZWxsYSBnaW9pYScsIGpveUxlYWQ6J0NvbXBpbGEgbGUgdHJlIHJpc3Bvc3RlLCBwb2kgc2FsdmEuJywgYnJlYXRoZUN1ZTonSW5zcGlyYSBlZCBlc3BpcmEgcHJvZm9uZGFtZW50ZSAzIHZvbHRlJywgYnJlYXRoZUJ0bjonUmVzcGlyYSBjb24gbWUnLAogIGFkZEhlbHBUb2RvOicrIEFnZ2l1bmdpIGEgRGEgZmFyZTogY2hpIGFpdXRvJywgbmV3Sm95OidVbmEgbnVvdmEgbWVkaXRhemlvbmUgZGVsbGEgZ2lvaWEnLCBzYXZlOidTYWx2YScsCiAgcGlja1ByZXY6bj0+YFNjZWdsaSB1biBvYmlldHRpdm8gcHJlY2VkZW50ZSAoJHtufSlgLCBteUdvYWxzOidJIG1pZWkgb2JpZXR0aXZpJywgc2VhcmNoR29hbHM6J0NlcmNhIG5laSBtaWVpIG9iaWV0dGl2aScsIG5vR29hbDonTmVzc3VuIG9iaWV0dGl2byB0cm92YXRvLicsIG5ld0dvYWxQaDonb3BwdXJlIHNjcml2aSB1biBudW92byBvYmlldHRpdm8nLAogIGFkZFRvZG86JysgQWdnaXVuZ2kgYSBEYSBmYXJlJywgYWRkZWRUb2RvOifinJMgQWdnaXVudG8gYSBEYSBmYXJlJywgdG9hc3RBZGRlZDonQWdnaXVudG8gYSBEYSBmYXJlJywgZmlsbEFuc3dlcnM6J0NvbXBpbGEgbGUgcmlzcG9zdGUuJywKICBpbmhhbGU6J0luc3BpcmHigKYnLCBleGhhbGU6J0VzcGlyYeKApicsIGFnYWluOidBbmNvcmEgdW5hIHZvbHRhJywgZG9uZUJyZWF0aFA6J0hhaSBwcmF0aWNhdG8gcGVyIGRpc2F0dGl2YXJlIGlsIHNlbWUuJywgZG9uZUJyZWF0aEo6J0lsIHNlbWUgw6ggaW5uYWZmaWF0by4nLAogIHBvd1RpdGxlOidJIDQgcG90ZXJpJywgcG93TGVhZDonU2NlZ2xpIGlsIHRlbWEgZSBpbCB0dW8gcHVudG8gZGkgcGFydGVuemEsIGNvbXBpbGEgb2duaSBwb3RlcmUsIHBvaSBzYWx2YS4nLCB0aGVtZTonVEVNQScsIHRoZW1lQXJpYTonVGVtYScsCiAgZmV3ZXI6J01lbm8nLCBhbGxUaGVtZXM6bj0+YFR1dHRpIGkgdGVtaSAoJHtufSlgLCBuZXdUaGVtZVBoOidvcHB1cmUgYWdnaXVuZ2kgdW4gbnVvdm8gdGVtYScsIGFkZDonQWdnaXVuZ2knLCBzdGFydDonREEgRE9WRSBQQVJUSScsCiAgd2hlbjonUXVhbmRvJywgelRvZGF5OidPZ2dpJywgelRvbW9ycm93OidEb21hbmknLCBob3dMb25nOidQZXIgcXVhbnRvIHRlbXBvJywKICBwNG5vdGU6J0RvcG8gaWwgc2FsdmF0YWdnaW8sIGxhIHR1YSBwcm9tZXNzYSB2YSBhdXRvbWF0aWNhbWVudGUgbmVsbGEgbGlzdGEgRGEgZmFyZS4nLCBmaWxsUG93ZXJzOidDb21waWxhIGkgcG90ZXJpLicsIGV4cG9ydExpbms6J0VzcG9ydGEgbGUgdHVlIHByYXRpY2hlIHBlciB1biBwZXJpb2RvJywKICBpblRvZG86J0Npw7IgY2hlIGhhaSBwcm9tZXNzbyBuZWwgNMKwIHBvdGVyZSDDqCBuZWxsYSB0dWEgbGlzdGEgRGEgZmFyZS4nLCBjb3B5OidDb3BpYSBpbCB0ZXN0bycsIHBkZjonU2FsdmEgaW4gUERGJywKICBkb0pveU5vdzonRmFpIG9yYSBsYSBtZWRpdGF6aW9uZSBkZWxsYSBnaW9pYScsIGdvSm95OidWYWkgYWxsYSBtZWRpdGF6aW9uZSBkZWxsYSBnaW9pYScsIG5ld1Bvd2VyczonSW5pemlhIHVuIG51b3ZvIGVzZXJjaXppbyBkZWkgNCBwb3RlcmknLAogIGNvcGllZDonVGVzdG8gY29waWF0by4gUHVvaSBpbmNvbGxhcmxvIGRvdmUgdnVvaS4nLCBjb3B5RmFpbDonSW1wb3NzaWJpbGUgY29waWFyZSBzdSBxdWVzdG8gZGlzcG9zaXRpdm8uJywKICBiYWNrOifigLkgSW5kaWV0cm8nLCBleHBUaXRsZTonRXNwb3J0YSBsZSB0dWUgcHJhdGljaGUnLCBleHBMZWFkOidTY2VnbGkgaWwgcGVyaW9kby4gUHVvaSBjb3BpYXJlIGlsIHRlc3RvIG8gc2FsdmFybG8gaW4gUERGLicsIGZyb206J0RBTCcsIHRvOidBTCcsCiAgblByYWN0Om49PmAke259ICR7bj09PTE\/J3ByYXRpY2EnOidwcmF0aWNoZSd9IGluIHF1ZXN0byBwZXJpb2RvLmAsIG5vUHJhY3Q6J05vbiBoYWkgcHJhdGljaGUgZGVpIDQgcG90ZXJpIGluIHF1ZXN0byBwZXJpb2RvLicsCiAgcmVjVGl0bGU6J0dyYXRpdHVkaW5pIC8gU3VjY2Vzc2knLCByZWNMZWFkOidTY3JpdmluZSBxdWFudGUgdnVvaS4gT2duaSByaWdhIMOoIHVuYSBncmF0aXR1ZGluZSBvIHVuIHN1Y2Nlc3NvLicsCiAgZ3JhdGl0dWRlOidHcmF0aXR1ZGluZScsIHN1Y2Nlc3M6J1N1Y2Nlc3NvJywgcm93VHlwZTppPT5gVGlwbyBkZWxsYSByaWdhICR7aX1gLCBkZWxSb3c6J0VsaW1pbmEgbGEgcmlnYScsIHJlbW92ZTonRWxpbWluYScsIHN1Y2Nlc3NQaDonY2nDsiBjaGUgaG8gZmF0dG8gb2dnaScsCiAgYWRkUm93OicrIEFnZ2l1bmdpIHVu4oCZYWx0cmEgcmlnYScsIHdyaXRlT25lOidTY3JpdmkgYWxtZW5vIHVuYSByaWdhLicsIHNhdmVkSjonU2FsdmF0byBuZWwgdHVvIGRpYXJpbycsCiAgcHJlRzpHPT5gU29ubyAke0coJ2dyYXRhJywnZ3JhdG8nKX0gcGVyYCwgcHJlUzooKT0+J1Nvbm8gZmVsaWNlIHBlcicsCiAgblJlYzoobnIsbnMpPT5bbnI\/bnIrKG5yPT09MT8nIGdyYXRpdHVkaW5lJzonIGdyYXRpdHVkaW5pJyk6JycsIG5zP25zKyhucz09PTE\/JyBzdWNjZXNzbyc6JyBzdWNjZXNzaScpOicnXS5maWx0ZXIoQm9vbGVhbikuam9pbignIMK3ICcpLAogIHRvZG9UaXRsZTonRGEgZmFyZScsIHRvZG9MZWFkOidDacOyIGNoZSBkZXZvIGZhcmUgcGVyY2jDqSBpIHNlbWkgY3Jlc2Nhbm8uJywgdG9kb1BoOidBZ2dpdW5naSBxdWFsY29zYSBkYSBmYXJlJywKICBtYXJrRG9uZTonU2VnbmEgY29tZSBmYXR0bycsIG1hcmtVbmRvbmU6J1NlZ25hIGNvbWUgbm9uIGZhdHRvJywgZGVsOidFbGltaW5hJywgbm86J05vJywKICB0b2RvRW1wdHk6J05pZW50ZSBkYSBmYXJlIHBlciBvcmEuPGJyPkNpw7IgY2hlIHNjcml2aSBpbiDCq2NoaSBhaXV0b8K7IG5lbGxhIG1lZGl0YXppb25lIGRlbGxhIGdpb2lhIGUgbmVsIDTCsCBwb3RlcmUgcHXDsiBhcnJpdmFyZSBxdWkuJywKICBzaG93RG9uZToocyxuKT0+YCR7cz8nTmFzY29uZGknOidNb3N0cmEnfSBjacOyIGNoZSBobyBmYXR0byAoJHtufSlgLCBzcmM6e2J1Y3VyaWU6J01lZGl0YXppb25lIGRlbGxhIGdpb2lhJyxwdXRlcmk6J0kgNCBwb3RlcmknLG1hbnVhbDonQWdnaXVudG8gZGEgbWUnfSwgZG9uZVRvYXN0OidGYXR0by4gQnJhdmEhJywKICB0b2RvUHJvbWlzZTp6PT56PT09J21haW5lJz8nRG9tYW5pIHByb21ldHRvIGRpJzonT2dnaSBwcm9tZXR0byBkaScsCiAga2luZEFyaWE6J1RpcG8gZGkgcHJhdGljYScsIGRvbmVIOidGYXR0by4gSWwgc2VtZSDDqCBwaWFudGF0by4nLCBkb25lTm90ZTooayxtKT0+YCR7a30sICR7bX0gbWluLiBTYWx2YXRvIG5lbCB0dW8gZGlhcmlvLmAsCiAgdGl0bGVPcHQ6J1RpdG9sbyAoZmFjb2x0YXRpdm8pJywgcGhNb3JuaW5nOidlcy4gTWVkaXRhemlvbmUgZGVsIG1hdHRpbm8nLCBhbm90aGVyOidVbuKAmWFsdHJhIHByYXRpY2EnLAogIHN0b3BwZWRBZnRlcjptPT5gVGkgc2VpIGZlcm1hdGEgZG9wbyAke219IG1pbi5gLCB3YW50U2F2ZTonTGEgYWdnaXVuZ28gYWwgdHVvIGRpYXJpbz8nLCBzYXZlTWluOm09PmBTYWx2YSAke219IG1pbmAsIGRvbnRTYXZlOidOb24gc2FsdmFyZScsCiAgc3RvcHBlZDonTGEgcHJhdGljYSDDqCBzdGF0YSBpbnRlcnJvdHRhLicsIGJhY2tQbGFpbjonSW5kaWV0cm8nLCByZXN1bWU6J0NvbnRpbnVhJywgcGF1c2U6J1BhdXNhJywgc3RvcDonRmVybWEnLAogIHNjcmVlbk5vdGU6J1RpZW5pIGxvIHNjaGVybW8gYWNjZXNvLiBTZSBpbCB0ZWxlZm9ubyBzaSBibG9jY2EsIGxhIGNhbXBhbmEgZmluYWxlIHBvdHJlYmJlIG5vbiBzdW9uYXJlLCBtYSBsYSBwcmF0aWNhIHZpZW5lIHNhbHZhdGEgcXVhbmRvIHRvcm5pLicsCiAgZHVyYXRpb246J0RVUkFUQScsIHByZXA6J1BSRVBBUkFaSU9ORScsIHNvdW5kOidTVU9OTycsIGJlbGw6J0NhbXBhbmEnLCBib3dsOidDYW1wYW5hIHRpYmV0YW5hJywgbGlzdGVuOidBc2NvbHRhJywgdGl0bGVDYXA6J1RJVE9MTyAoRkFDT0xUQVRJVk8pJywgcGhTaWxlbmNlOidlcy4gNSBtaW51dGkgZGkgc2lsZW56aW8nLAogIGJlZ2luOidJbml6aWEnLCBtYW51YWxMaW5rOidIbyBwcmF0aWNhdG8gc2VuemEgdGltZXIsIHZvZ2xpbyBzb2xvIHNlZ25hcmxvJywgbm9UaW1lcjonU2VuemEgdGltZXInLCBsb2dQcmFjdDonU2VnbmEgdW5hIHByYXRpY2EnLCBkYXk6J0dJT1JOTycsCiAgcGhFdmVuaW5nOidlcy4gWW9nYSBkZWxsYSBzZXJhJywgc2F2ZUpvdXJuYWw6J1NhbHZhIG5lbCBkaWFyaW8nLCBjYW5jZWw6J0FubnVsbGEnLCBsb2dnZWQ6J3NlZ25hdGEnLAogIHJlYWR5OidQcm9udGEgcGVyIGluaXppYXJlJywgcHJlcFBoYXNlOidQcmVwYXJhemlvbmUnLCBiZWxsU3RhcnQ6J0xhIGNhbXBhbmEgc3VvbmEgYWxs4oCZaW5pemlvJywgb2Y6J3N1ICcsIHBhdXNlZDonUGF1c2EnLCBwcmVzc0NvbnQ6J1ByZW1pIENvbnRpbnVhJywKICBwbHVzUHJlcDpsPT5gKyAke2x9IGRpIHByZXBhcmF6aW9uZWAsIG5vUHJlcDonc2VuemEgcHJlcGFyYXppb25lJywgbm9uZTonTmVzc3VuYScsIHVuaXRNaW46J21pbicsIHVuaXRTZWM6J3MnLAogIGFsbDonVHV0dG8nLCBuUHJhY3RpY2VzOm49PmAke259ICR7bj09PTE\/J3ByYXRpY2EnOidwcmF0aWNoZSd9YCwgdG90TWluOm09PmAgwrcgJHttfSBtaW51dGkgaW4gdG90YWxlYCwKICBqRW1wdHk6J0FuY29yYSBuZXNzdW4gc2VtZSBxdWkuPGJyPk1lZGl0YSBvIHNlZ25hIHVuYSBwcmF0aWNhIGUgYXBwYXJpcsOgIG5lbCB0dW8gZGlhcmlvLicsIGdvUHJhY3RpY2U6J1ZhaSBhbGxhIHByYXRpY2EnLAogIGRlbFE6J0VsaW1pbmFyZSBxdWVzdGEgcHJhdGljYT8nLCBkZWxldGVkOidFbGltaW5hdG8nLAogIGdhdGVMZWFkOidM4oCZYXBwIMOoIGdyYXR1aXRhLiBBY2NlZGkgcGVyY2jDqSBsZSB0dWUgbm90ZSByZXN0aW5vIHNhbHZhdGUuJywgc2lnbkluOidBY2NlZGknLCByZWdpc3RlcjonTm9uIGhhaSB1biBhY2NvdW50PyBDcmVhbG8gZ3JhdGlzJywKICBwZXJzb25hbDonUGVyc29uYWxlJywgY29tbXVuaXR5OidDb211bml0w6AnLCBzZWdBcmlhOidDb3NhIHZlZGknLAogIGNvbW1UaXRsZTonQ29tdW5pdMOgJywgY29tbUxlYWQ6J1F1YW5kbyBnaW9pc2NpIGRlaSBzdWNjZXNzaSBkZWdsaSBhbHRyaSwgaW5uYWZmaSBpIHNlbWkgZGVsIHR1byBvYmlldHRpdm8uIFF1YW5kbyBsZWdnaSBpIDQgcG90ZXJpIGRpIHF1YWxjdW5vLCBwdW9pIHBlcmNvcnJlcmxpIGFuY2hlIHBlciB0ZS4nLAogIGNvbW1UZXN0QmFubmVyOidWZXJzaW9uZSBkaSBwcm92YTogcXVpIHZlZGkgYWxjdW5pIGVzZW1waS4gU3VsIHNpdG8gYXBwYXJpcmFubm8gbGUgY29uZGl2aXNpb25pIHJlYWxpIGRpIGNoaSBzY2VnbGllIGRpIGNvbmRpdmlkZXJlLicsCiAgY29tbUVtcHR5OidBbmNvcmEgbmllbnRlIHF1aS4nLCBhcHBlYXJJbjpuPT5gQXBwYXJpIG5lbGxhIGNvbXVuaXTDoCBjb21lIDxiPiR7bn08L2I+YCwKICByZWFjdEpveTonR2lvaXNjbycsIGNvdW50Sm95OidoYW5ubyBnaW9pdG8nLCB0b2FzdEpveTonUXVhbmRvIGdpb2lzY2kgcGVyIGdsaSBhbHRyaSwgaW5uYWZmaSBpIHNlbWkgZGVsIHR1byBvYmlldHRpdm8uJywKICByZWFjdFBvdzonSG8gbGV0dG8nLCBjb3VudFBvdzonbOKAmWhhbm5vIGxldHRvJywgdG9hc3RQb3c6J0hhaSBsZXR0byBpIDQgcG90ZXJpIGEgdHVhIHZvbHRhLicsCiAgZ2VzdE5vdGU6J0F0dGVuemlvbmUgYWwgZ2VzdG8gY29tcGVuc2F0aXZvOiBzY2VnbGluZSB1bm8gcGVyc29uYWxlIGUgcHJhdGljYWxvIHBlciBkaXNhdHRpdmFyZSBpIHNlbWkuIE5vbiBkZXZlIGVzc2VyZSBwZXIgZm9yemEgY2nDsiBjaGUgaGEgcHJvbWVzc28gbOKAmWFsdHJhIHBlcnNvbmEuJywKICBub2JvZHlZZXQ6J0FuY29yYSBuZXNzdW5vJywgd2l0aGRyYXc6J1JpdGlyYScsIHJlcG9ydDonU2VnbmFsYScsIHJlcG9ydEFnYWluOidQcmVtaSBkaSBudW92byBwZXIgc2VnbmFsYXJlJywgcmVwb3J0ZWQ6J0dyYXppZS4gTGEgY29uZGl2aXNpb25lIMOoIHN0YXRhIG5hc2Nvc3RhIGUgdmVycsOgIHZlcmlmaWNhdGEuJywKICByZWFkRnVsbDonTGVnZ2kgcGVyIGludGVybyBpIDQgcG90ZXJpJywgc2hvd0xlc3M6J01lbm8nLCB5b3U6J3R1JywKICBpbnNwb0hlYWQ6bj0+YERhbGxhIGNvbXVuaXTDoCDCtyAke259YCwgaW5zcG9Nb3JlOidHdWFyZGEgY29zYSBoYW5ubyBwaWFudGF0byBnbGkgYWx0cmkg4oC6JywKICBzaGFyZUJ0bjonQ29uZGl2aWRpIGluIGZvcm1hIGFub25pbWEgY29uIGxhIGNvbXVuaXTDoCcsIHNoYXJlZEJ0bjonQ29uZGl2aXNvIG5lbGxhIGNvbXVuaXTDoCDCtyByaXRpcmEnLCBzaGFyZWRUYWc6J25lbGxhIGNvbXVuaXTDoCcsCiAgd2hvU2VlczonQ0hJIFZFREUnLCBvbmx5TWU6J1NvbG8gaW8nLCBzaGFyZUFub246J0NvbmRpdmlkaSBpbiBmb3JtYSBhbm9uaW1hJywgc2hhcmVBZnRlcjonRG9wbyBpbCBzYWx2YXRhZ2dpbyBzY2VnbGkgY29zYSBhcHBhcmUgbmVsbGEgY29tdW5pdMOgIGUgY29uIHF1YWxlIG5vbWUuJywKICBzaGVldFNoYXJlZDonQ29uZGl2aXNvIG5lbGxhIGNvbXVuaXTDoCcsIHNoZWV0U2hhcmVkTm90ZTpuPT5gUXVlc3RhIG5vdGEgw6ggdmlzaWJpbGUgbmVsbGEgY29tdW5pdMOgIGNvbiBpbCBub21lIDxiPiR7bn08L2I+LiBTZSBsYSByaXRpcmksIHNjb21wYXJlIHBlciB0dXR0aS4gUmVzdGEgbmVsIHR1byBkaWFyaW8uYCwKICBibG9ja2VkTm90ZTonTGEgY29uZGl2aXNpb25lIG5lbGxhIGNvbXVuaXTDoCBub24gw6ggcGnDuSBkaXNwb25pYmlsZSBwZXIgaWwgdHVvIGFjY291bnQuJywKICBuYW1lTGFiZWw6J0lsIHR1byBub21lIG5lbGxhIGNvbXVuaXTDoCcsIG5hbWVQaDonZXMuIEZpb3JlIGRpIHRpZ2xpbycsIG5hbWVOb3RlOidOb24gZGV2ZSBlc3NlcmUgcGVyIGZvcnphIGlsIHR1byB2ZXJvIG5vbWUuIFB1b2kgY2FtYmlhcmxvIGluIHF1YWxzaWFzaSBtb21lbnRvLicsCiAgYXBwZWFyc0FzOm49PmBBcHBhcmkgY29tZSA8Yj4ke259PC9iPmAsIG90aGVyc1JlYWQ6J0VDQ08gQ09TQSBMRUdHRVJBTk5PIEdMSSBBTFRSSScsIGNob29zZVNoYXJlOidTQ0VHTEkgQ09TQSBDT05ESVZJREVSRScsCiAgcHJpdmFjeU5vdGU6J1ByaW1hIGRpIGNvbmRpdmlkZXJlLCBjb250cm9sbGEgY2hlIG5vbiBjb21wYWlhbm8gbm9taSBvIGRldHRhZ2xpIGRhIGN1aSBzaSBwb3NzYSByaWNvbm9zY2VyZSBxdWFsY3Vuby4nLAogIHdpdGhkcmF3QnRuOidSaXRpcmEgZGFsbGEgY29tdW5pdMOgJywgc2hhcmVEbzonQ29uZGl2aWRpJywgbmFtZVNob3J0OidTY2VnbGkgdW4gbm9tZSBkaSBhbG1lbm8gMiBsZXR0ZXJlLicsIGNob29zZU9uZTonU2NlZ2xpIGFsbWVubyB1bmEgcmlnYS4nLAogIHNoYXJlZFRvYXN0OidDb25kaXZpc28gY29uIGxhIGNvbXVuaXTDoCcsIHdpdGhkcmF3bjonUml0aXJhdG8gZGFsbGEgY29tdW5pdMOgJywgbmFtZVNhdmVkOidOb21lIHNhbHZhdG8nLAogIG5hbWVTaGVldE5vdGU6J05vbiBkZXZlIGVzc2VyZSBwZXIgZm9yemEgaWwgdHVvIHZlcm8gbm9tZS4gQ2FtYmlhIGFuY2hlIHN1IGNpw7IgY2hlIGhhaSBnacOgIGNvbmRpdmlzby4nLAogIGZpcnN0UTonQ29tZSB2dW9pIGFwcGFyaXJlIG5lbGxhIGNvbXVuaXTDoD8nLCBmaXJzdE5vdGU6J1NjZWdsaSB1biBub21lIGNoZSBub24gZGV2ZSBlc3NlcmUgcGVyIGZvcnphIHF1ZWxsbyB2ZXJvLiBMbyB1c2kgc29sbyBxdWFuZG8gc2NlZ2xpIGRpIGNvbmRpdmlkZXJlIHF1YWxjb3NhLiBQdW9pIGNhbWJpYXJsbyBpbiBxdWFsc2lhc2kgbW9tZW50by4nLAogIGxhdGVyOidQacO5IHRhcmRpJywgd2VsY29tZTpuPT5gQmVudmVudXRhLCAke259IWAsIGFwaUZhaWw6J0ltcG9zc2liaWxlIGNvbGxlZ2Fyc2kgYWwgc2l0by4nLAogIGVycjp7IGJsb2NhdDonTGEgY29uZGl2aXNpb25lIG5vbiDDqCBwacO5IGRpc3BvbmliaWxlIHBlciBpbCB0dW8gYWNjb3VudC4nLCBmYXJhX251bWU6J1NjZWdsaSBwcmltYSB1biBub21lIHBlciBsYSBjb211bml0w6AuJywgZ29sOidOb24gY+KAmcOoIG5pZW50ZSBkYSBjb25kaXZpZGVyZS4nLAogICAgICAgIHByZWFfbXVsdGU6J09nZ2kgaGFpIGdpw6AgY29uZGl2aXNvIG1vbHRvLiBUb3JuYSBkb21hbmkuJywgbHVhdDonUXVlc3RvIG5vbWUgw6ggZ2nDoCB1c2F0by4gU2NlZ2xpbmUgdW4gYWx0cm8uJywgbnVtZTonSWwgbm9tZSBkZXZlIGF2ZXJlIHRyYSAyIGUgMzAgbGV0dGVyZS4nIH0KfTsKLyogYSBmZXcgSXRhbGlhbi9GcmVuY2ggVUkgd29yZHMgZm9sbG93IHRoZSBwZXJzb24ncyBncmFtbWF0aWNhbCBnZW5kZXIgKi8KY29uc3QgR1VJID0gewogIGl0OnsgcmVhZHk6KCk9PkcoJ1Byb250YSBwZXIgaW5pemlhcmUnLCdQcm9udG8gcGVyIGluaXppYXJlJyksIHN0b3BwZWRBZnRlcjooKT0+bT0+YFRpIHNlaSAke0coJ2Zlcm1hdGEnLCdmZXJtYXRvJyl9IGRvcG8gJHttfSBtaW4uYCwgZG9uZVRvYXN0OigpPT5gRmF0dG8uICR7RygnQnJhdmEnLCdCcmF2bycpfSFgLCB3ZWxjb21lOigpPT5uPT5gJHtHKCdCZW52ZW51dGEnLCdCZW52ZW51dG8nKX0sICR7bn0hYCB9LAogIGZyOnsgcmVhZHk6KCk9PkcoJ1Byw6p0ZSDDoCBjb21tZW5jZXInLCdQcsOqdCDDoCBjb21tZW5jZXInKSB9Cn07CgovKiAtLS0tLS0tLS0tIHByYWN0aWNlIHRleHRzOiBGcmFuw6dhaXMgLS0tLS0tLS0tLSAqLwpjb25zdCBkZUZyID0gdiA9PiAvXlthZWlvdXlow6DDosOkw6nDqMOqw6vDrsOvw7TDtsO7w7nDvF0vaS50ZXN0KFN0cmluZyh2fHwnJykudHJpbSgpKSA\/ICJk4oCZIiA6ICdkZSAnOwpUWC5mciA9IHsKICB2b3dKb3k6WwogICAgJ0plIGZhaXMgY2VzIGNob3NlcyBwYXJjZSBxdWUgbWEgcsOpYWxpdMOpIGVzdCBkaWN0w6llIHBhciBsZXMgZ3JhaW5lcyBxdWUgamUgcGxhbnRlLCBxdWkgc2UgcHJvamV0dGVudCBzdXIgbGEgdmFjdWl0w6kgZOKAmXVuZSByw6lhbGl0w6kgcXVpIG5lIHZpZW50IHBhcyBk4oCZZWxsZS1tw6ptZS4nLAogICAgJ1BhcmNlIHF1ZSBq4oCZYWkgcGxhbnTDqSBjZXMgZ3JhaW5lcywgcXVlIGrigJlhcnJvc2UgbWFpbnRlbmFudCwgamUgdmFpcyByw6l1c3Npci4nLAogICAgJ1BhcmNlIHF1ZSBqZSByw6l1c3NpcyBlbiB1dGlsaXNhbnQgY2Ugc3lzdMOobWUsIHF1ZWxxdWVzLXVucyBkZSBtZXMgYW1pcyBldCBkZSBtZXMgY29ubmFpc3NhbmNlcyB2b250IG3igJlpbWl0ZXIgZXQgcsOpdXNzaXIgw6AgbGV1ciB0b3VyLiBQYXJjZSBxdeKAmWlscyByw6l1c3Npc3NlbnQgZW4gdXRpbGlzYW50IGNlIHN5c3TDqG1lLCBsZXVycyBhbWlzIGV0IGxldXJzIGNvbm5haXNzYW5jZXMgdm9udCBsZXMgaW1pdGVyIMOgIGxldXIgdG91ci4nLAogICAgJ0FpbnNpLCBwYXIgbW9uIGV4ZW1wbGUsIGplIGTDqWNsZW5jaGUgdW5lIHLDqWFjdGlvbiBlbiBjaGHDrm5lIHF1aSBpbnNwaXJlIGRlcyBtaWxsaWVycyBldCBkZXMgbWlsbGllcnMgZGUgcGVyc29ubmVzIMOgIHV0aWxpc2VyIGNlIHN5c3TDqG1lIGV0IMOgIHLDqXVzc2lyLiddLAogIHZvd0pveUxhc3Q6J0NlIHF1aSBmZXJhIGR1IG1vbmRlIHVuIGVuZHJvaXQgbWVpbGxldXIgZXQgcGx1cyBiZWF1LicsCiAgcUpveTp7IG9iaWVjdGl2OidM4oCZb2JqZWN0aWYgYXVxdWVsIGplIGTDqWRpZSBjZXR0ZSBtw6lkaXRhdGlvbiBkdSBib25oZXVyJywgc2VtaW50ZTonUXVlbGxlcyBncmFpbmVzIGrigJlhaSBwbGFudMOpZXMnLAogICAgICAgICBhanV0b3I6J1F1aSBhaS1qZSBs4oCZaW50ZW50aW9uIGTigJlhaWRlciAxIGhldXJlIHBhciBzZW1haW5lID8gUXVhbmQgZXN0LWNlIHF1ZSBqZSB2ZXV4IGxlIGZhaXJlID8gUXVlIHZhaXMtamUgZmFpcmUgcG91ciBjZXR0ZSBwZXJzb25uZSA\/JyB9LAogIHBvd2Vyczp7IHAxOlsnUG91dm9pciAxJywnU2Ugc291dmVuaXIgZHUgc3R5bG8nXSwgcDI6WydQb3V2b2lyIDInLCdMZSByZWdyZXQgaW50ZWxsaWdlbnQnXSwgcDM6WydQb3V2b2lyIDMnLCdMYSByZXN0cmljdGlvbiddLCBwNDpbJ1BvdXZvaXIgNCcsJ0zigJlhbnRpZG90ZSddIH0sCiAgdm93UG93OigpPT5bCiAgICAnSmUgZmFpcyBjZXMgY2hvc2VzIHBhcmNlIHF1ZSBsYSByw6lhbGl0w6kgZXN0IGRpY3TDqWUgcGFyIGxlcyBncmFpbmVzIHF1ZSBqZSBwbGFudGUgZXQgc2UgcHJvamV0dGUgc3VyIGxhIHZhY3VpdMOpIGTigJl1bmUgcsOpYWxpdMOpIHF1aSBuZSB2aWVudCBwYXMgZOKAmWVsbGUtbcOqbWUuJywKICAgIGBTaSBqZSBwbGFudGUgZHUgcG9zaXRpZiwgamUgc3VpcyAke0coJ29ibGlnw6llJywnb2JsaWfDqScpfSBkZSBwZXJjZXZvaXIgdW5lIHLDqWFsaXTDqSBwb3NpdGl2ZSwgbcOqbWUgc2kgY2V1eCBxdWkgbeKAmWVudG91cmVudCBsYSBwZXLDp29pdmVudCBjb21tZSBuw6lnYXRpdmUuIFNpIGplIHBsYW50ZSBkdSBuw6lnYXRpZiwgamUgc3VpcyAke0coJ29ibGlnw6llJywnb2JsaWfDqScpfSBkZSBwZXJjZXZvaXIgdW5lIHLDqWFsaXTDqSBxdWkgbeKAmWVzdCBkw6lmYXZvcmFibGUsIG3Dqm1lIHNpIGNldXggcXVpIG3igJllbnRvdXJlbnQgbGEgcGVyw6dvaXZlbnQgY29tbWUgcG9zaXRpdmUuYCwKICAgICdBbG9ycyBqZSBjaG9pc2lzIGRlIHBsYW50ZXIgZGVzIGdyYWluZXMgcG9zaXRpdmVzLicsCiAgICAnUGFyY2UgcXVlIGplIHLDqXVzc2lzIGVuIHV0aWxpc2FudCBjZSBzeXN0w6htZSwgcXVlbHF1ZXMtdW5zIGRlIG1lcyBhbWlzIGV0IGRlIG1lcyBjb25uYWlzc2FuY2VzIHZvbnQgbeKAmWltaXRlciBldCByw6l1c3NpciDDoCBsZXVyIHRvdXIuIFBhcmNlIHF14oCZaWxzIHLDqXVzc2lzc2VudCwgbGV1cnMgYW1pcyBldCBsZXVycyBjb25uYWlzc2FuY2VzIHZvbnQgbGVzIGltaXRlciBldCByw6l1c3Npci4nXSwKICB2b3dQb3dMYXN0OidBaW5zaSwgbGUgbW9uZGUgZGV2aWVudCB1biBlbmRyb2l0IG1laWxsZXVyIGV0IHBsdXMgYmVhdS4nLAogIHBvd0hlYWQ6J0xFUyA0IFBPVVZPSVJTJywgcG93SGVhZENhc2U6J0xlcyA0IHBvdXZvaXJzJywKICB0aGVtZXM6eyAnQG1vbmV5JzonQXJnZW50JywgJ0ByZWxhdGlvbnNoaXBzJzonUmVsYXRpb25zJywgJ0BoZWFsdGgnOidTYW50w6knIH0sCiAgZHVyOlsnNSBzZWNvbmRlcycsJzEgbWludXRlJywnNSBtaW51dGVzJywnMTAgbWludXRlcycsJzEgaGV1cmUnLCd0b3V0ZSBsYSBqb3VybsOpZSddLAogIGR1ckFwcGVuZDpkPT5kPT09J3RvdXRlIGxhIGpvdXJuw6llJz8ndG91dGUgbGEgam91cm7DqWUnOidwZW5kYW50IGF1IG1vaW5zICcrZCwKICBkdXJTdHJpcDovXHMqKHBlbmRhbnRccyspPyhhdSBtb2luc1xzKyk\/KDUgc2Vjb25kZXN8MSBtaW51dGV8NSBtaW51dGVzfDEwIG1pbnV0ZXN8MSBoZXVyZXx0b3V0ZSBsYSBqb3VybsOpZSlccyokL2ksCiAgbGVhZDovXihkZVxzK3xkWyfigJldXHMqKS9pLAogIHppOno9Pno9PT0nbWFpbmUnPydkZW1haW4nOidhdWpvdXJk4oCZaHVpJywKICB0YWlsUDE6J0V0IHBldXQtw6p0cmUgcXVlIGplIG5lIHNhaXMgbcOqbWUgcGFzIGVuY29yZSBxdWVsbGVzIGF1dHJlcyBncmFpbmVzIGrigJlhaSBwbGFudMOpZXMsIHPDu3JlbWVudCBiZWF1Y291cCBk4oCZYXV0cmVzIGRvbnQgamUgbmUgbWUgc291dmllbnMgcGFzIG1haW50ZW5hbnQuIFF1b2kgcXVlIGrigJlhaWUgcHUgcGVuc2VyLCBkaXJlIG91IGZhaXJlLCBqZSB2ZXV4IGTDqXNhY3RpdmVyIGNlcyBncmFpbmVzIG1haW50ZW5hbnQuJywKICB0YWlsUDI6J0plIG1lIHN1aXMgZmFpdCBkdSBtYWwgZXQgauKAmWFpIGZhaXQgZHUgbWFsIGF1eCBwZXJzb25uZXMgYXV0b3VyIGRlIG1vaS4gSmUgbGUgcmVncmV0dGUsIGV0IGplIHZldXggZMOpc2FjdGl2ZXIgY2VzIGdyYWluZXMgbGUgcGx1cyB2aXRlIHBvc3NpYmxlLCBhaW5zaSBxdWUgdG91dGVzIGxlcyBjaGHDrm5lcyBk4oCZw6l2w6luZW1lbnRzIHF1aSBlbiBkw6ljb3VsZW50LCBjYXIgamUgY29tcHJlbmRzIG1haW50ZW5hbnQgcXXigJllbGxlcyBkb3VibGVudCB0b3V0ZXMgbGVzIDI0IGhldXJlcywgZXQgcGx1cyB2aXRlIGplIGxlcyBkw6lzYWN0aXZlLCBtaWV1eCBj4oCZZXN0ICEnLAogIG5pZ2h0OidFdCBjZSBzb2lyLCBjb25zY2llbW1lbnQsIGRlcHVpcyBsZSBtb21lbnQgb8O5IGplIHBvc2UgbGEgdMOqdGUgc3VyIGzigJlvcmVpbGxlciBldCBt4oCZZW5kb3JzIGp1c3F14oCZw6AgbW9uIHLDqXZlaWwgbGUgbWF0aW4uJywKICBzdGQ6ewogICAgcDI6eyBmb3JtOigpPT5bWyd0JywnUXVlbHMgYsOpbsOpZmljZXMgauKAmWFpIGV1cyddLFsncDInLCdiw6luw6lmaWNlcyBtYXTDqXJpZWxzIG91IGTigJllZ28nXV0sCiAgICAgICAgIHJlY2FwOmU9PmBBdmVjIGxlIG5pdmVhdSBkZSBjb25zY2llbmNlIHF1ZSBq4oCZYXZhaXMgcGVuZGFudCBsZXMgYW5uw6llcyBvw7kgauKAmWFpIHBlbnPDqSAvIGRpdCAvIGZhaXQgY2VzIGNob3NlcywgY+KAmWVzdCB0b3V0IGNlIHF1ZSBqZSBzYXZhaXMgZmFpcmUuIErigJlhaSBjZXJ0YWluZW1lbnQgZXUgZGVzIGLDqW7DqWZpY2VzIG1hdMOpcmllbHMgb3UgZOKAmWVnbyA6ICR7bWsoZS5wMil9LiBFdCBwZXV0LcOqdHJlIGFpLWplIGV1IGF1c3NpIGTigJlhdXRyZXMgYsOpbsOpZmljZXMgZG9udCBqZSBuZSBtZSBzb3V2aWVucyBwYXMgbWFpbnRlbmFudC4gSmUgbWUgcmVuZHMgY29tcHRlIG1haW50ZW5hbnQgcXVlIGrigJlhaSBwYXnDqSwgZXQgcXVlIGplIHBhaWUgZW5jb3JlLCB1biBwcml4IGJpZW4gdHJvcCDDqWxldsOpIHBvdXIgdG91cyBjZXMgYsOpbsOpZmljZXMuICR7dHgoKS50YWlsUDJ9YCB9LAogICAgcDM6eyBmb3JtOigpPT5bWyd0JywnSmUgcHJvbWV0c+KApiddLFsncDMnLCdjZSBxdWUgamUgcHJvbWV0cyBkZSBuZSBwbHVzIGZhaXJlLCBldCBwZW5kYW50IGNvbWJpZW4gZGUgdGVtcHMsIHBhciBleC4gOiBkZSBuZSBwbHVzIOKApiBwZW5kYW50IGF1IG1vaW5zIDEgbWludXRlJ10sWydkdXInLCdhZGQnXV0sCiAgICAgICAgIHJlY2FwOmU9PmBKZSBwcm9tZXRzICR7bWsoZS5wMyl9LiAke3R4KCkubmlnaHR9YCB9LAogICAgcDQ6eyBmb3JtOigpPT5bWyd6aSddLFsndCcsYCR7cERyYWZ0LnppPT09J21haW5lJz8nRGVtYWluJzonQXVqb3VyZOKAmWh1aSd9IGplIHByb21ldHMgZGXigKZgXSxbJ3A0JywnY2UgcXVlIGplIHZhaXMgZmFpcmUsIGNvbW1lIGdyYWluZSBvcHBvc8OpZSDDoCBjZWxsZSBxdWUgamUgdmV1eCBkw6lzYWN0aXZlciddXSwKICAgICAgICAgcmVjYXA6ZT0+YEVuIGdlc3RlIGRlIGNvbXBlbnNhdGlvbiwgamUgZMOpZGllIGxlIGZhaXQgZGUgY29tcHJlbmRyZSBtYWludGVuYW50IHF1ZSBsYSByw6lhbGl0w6kgcXVlIGplIHZpcyB2aWVudCBkZXMgZ3JhaW5lcyBxdWUgauKAmWFpIHBsYW50w6llcyBkYW5zIGxlIHBhc3PDqSwgcXVpIHNlIHByb2pldHRlbnQgc3VyIGxhIHZhY3VpdMOpIGTigJl1bmUgcsOpYWxpdMOpIHF1aSBuZSB2aWVudCBwYXMgZOKAmWVsbGUtbcOqbWUsIGV0ICR7dHgoKS56aShlLnppKX0gamUgcHJvbWV0cyAke2RlRnIobm9MZWFkKGUucDQpKX0ke21rKG5vTGVhZChlLnA0KSl9LmAgfQogIH0sCiAgcHY6ewogICAgMTp7IG5hbWU6KCk9PmBDZSBxdWUgamUgc3VpcyAke0coJ29ibGlnw6llJywnb2JsaWfDqScpfSBkZSB2aXZyZWAsCiAgICAgICAgcDE6eyBmb3JtOigpPT5bWyd0JyxgSmUgc3VpcyAke0coJ29ibGlnw6llJywnb2JsaWfDqScpfSBkZSB2aXZyZSBkYW5zIG1hIHLDqWFsaXTDqeKApmBdLFsncDFhJywnY2UgcXVlIGplIHZpcyBtYWludGVuYW50J10sCiAgICAgICAgICAgICAgICAgICAgICAgWyd0Jywn4oCmw6AgY2F1c2UgZGUgbWVzIHBlbnPDqWVzLCBwYXJvbGVzIGV0IGFjdGVzIGRlIG1vbiBwYXNzw6ksIGRhbnMgY2V0dGUgdmllIG91IGRhbnMgdW5lIHZpZSBhbnTDqXJpZXVyZSwgcXVhbmTigKYnXSxbJ3AxYicsJ3F1ZWxsZXMgZ3JhaW5lcyBq4oCZYWkgcGxhbnTDqWVzJ11dLAogICAgICAgICAgICAgcmVjYXA6ZT0+YEplIHN1aXMgJHtHKCdvYmxpZ8OpZScsJ29ibGlnw6knKX0gZGUgdml2cmUgZGFucyBtYSByw6lhbGl0w6kgJHttayhlLnAxYSl9IMOgIGNhdXNlIGRlIG1lcyBwZW5zw6llcywgcGFyb2xlcyBldCBhY3RlcyBkZSBtb24gcGFzc8OpLCBkYW5zIGNldHRlIHZpZSBvdSBkYW5zIHVuZSB2aWUgYW50w6lyaWV1cmUsIHF1YW5kICR7bWsoZS5wMWIpfS4gJHt0eCgpLnRhaWxQMX1gIH0gfSwKICAgIDI6eyBuYW1lOigpPT4nUXVlbGxlcyBncmFpbmVzIGplIHZldXggbmV0dG95ZXInLAogICAgICAgIHAxOnsgZm9ybTooKT0+W1sndCcsJ0plIHZldXggZMOpc2FjdGl2ZXIgbGVzIGdyYWluZXMgcGxhbnTDqWVzIHF1YW5k4oCmJ10sWydwMWInLCdjZSBxdWUgauKAmWFpIHBlbnPDqSwgZGl0IG91IGZhaXQnXV0sCiAgICAgICAgICAgICByZWNhcDplPT5gSmUgdmV1eCBkw6lzYWN0aXZlciBsZXMgZ3JhaW5lcyBwbGFudMOpZXMgcXVhbmQgJHttayhlLnAxYil9LCBjYXIgZWxsZXMgZG91YmxlbnQgdG91dGVzIGxlcyAyNCBoZXVyZXMgZXQgamUgbmUgdmV1eCBwbHVzIHF1ZSBjZXMgZ3JhaW5lcyBncmFuZGlzc2VudC4gRGUgcGx1cywgcGV1dC3DqnRyZSBhaS1qZSBhdXNzaSBwbGFudMOpIGTigJlhdXRyZXMgZ3JhaW5lcyBkb250IGplIG5lIG1lIHNvdXZpZW5zIHBhcyBtYWludGVuYW50LiBRdW9pIHF1ZSBq4oCZYWllIHB1IHBlbnNlciwgZGlyZSBvdSBmYWlyZSwgamUgdmV1eCBkw6lzYWN0aXZlciBjZXMgZ3JhaW5lcyBtYWludGVuYW50LmAgfSB9LAogICAgMzp7IG5hbWU6KCk9PidKZSBuZXR0b2llIHVuZSDDqW1vdGlvbicsCiAgICAgICAgcDE6eyBmb3JtOigpPT5bWyd0JywnSmUgdmV1eCBuZXR0b3llciBsZXMgZ3JhaW5lcyBkZeKApiddLFsncDFlJywnbOKAmcOpbW90aW9uIG91IGxlIHNjaMOpbWEgOiBjb2zDqHJlLCBlbnZpZSwgcGV1cuKApiddLAogICAgICAgICAgICAgICAgICAgICAgIFsndCcsJ+KApnBsYW50w6llcyBwYXIgZGVzIHBlbnPDqWVzLCBwYXJvbGVzIGV0IGFjdGVzIGRhbnMgbW9uIHBhc3PDqSwgZGFucyBjZXR0ZSB2aWUgb3UgZGFucyB1bmUgdmllIGFudMOpcmlldXJlLCBxdWkgbeKAmW9ibGlnZW50IMOgIHZpdnJl4oCmJ10sWydwMWEnLCdsYSBzaXR1YXRpb24gcXVlIGplIHZpcyddLAogICAgICAgICAgICAgICAgICAgICAgIFsndCcsJ1F1YW5k4oCmJ10sWydwMWInLCdjZSBxdWUgamUgcGVuc2UgYXZvaXIgcGxhbnTDqSddXSwKICAgICAgICAgICAgIHJlY2FwOmU9PmBKZSB2ZXV4IG5ldHRveWVyIGxlcyBncmFpbmVzIGRlICR7bWsoZS5wMWUpfSBwbGFudMOpZXMgcGFyIGRlcyBwZW5zw6llcywgcGFyb2xlcyBldCBhY3RlcyBkYW5zIG1vbiBwYXNzw6ksIGRhbnMgY2V0dGUgdmllIG91IGRhbnMgdW5lIHZpZSBhbnTDqXJpZXVyZSwgcXVpIG3igJlvYmxpZ2VudCDDoCB2aXZyZSAke21rKGUucDFhKX0uIFF1YW5kICR7bWsoZS5wMWIpfS4gJHt0eCgpLnRhaWxQMX1gIH0gfSwKICAgIDQ6eyBuYW1lOigpPT4nSmUgbmUgc2FpcyBwYXMgcXVlbGxlcyBncmFpbmVzIGrigJlhaSBwbGFudMOpZXMnLAogICAgICAgIHAxOnsgZm9ybTooKT0+W1sndCcsJ0plIG7igJlhaSBhdWN1bmUgaWTDqWUgZGUgY2UgcXVlIGrigJlhaSBwdSBwbGFudGVyIHBvdXIgdml2cmUgY2V0dGUgc2l0dWF0aW9uIDonXSxbJ3AxYScsJ2xhIHNpdHVhdGlvbiBxdWUgamUgdmlzJ11dLAogICAgICAgICAgICAgcmVjYXA6ZT0+YEplIG7igJlhaSBhdWN1bmUgaWTDqWUgZGUgY2UgcXVlIGrigJlhaSBwdSBwbGFudGVyIHBvdXIgdml2cmUgY2V0dGUgc2l0dWF0aW9uIDogJHttayhlLnAxYSl9LiBNYWlzIGplIGNvbXByZW5kcyBtYWludGVuYW50IHF1ZSwgc2kgamUgbuKAmWF2YWlzIHBhcyBwbGFudMOpIGNlcyBncmFpbmVzLCBjZXR0ZSBzaXR1YXRpb24gbmUgc2VyYWl0IHBhcyBkYW5zIG1hIHLDqWFsaXTDqS4gSmUgdmV1eCBkw6lzYWN0aXZlciBtYWludGVuYW50IGxlcyBncmFpbmVzIHBsYW50w6llcy5gIH0sCiAgICAgICAgcDI6eyBmb3JtOigpPT5bWyd0JywnU2kgcXVlbHF1ZXMgYsOpbsOpZmljZXMgbWUgdmllbm5lbnQgw6AgbOKAmWVzcHJpdCAoZmFjdWx0YXRpZiknXSxbJ3AyJywndHUgcGV1eCBsYWlzc2VyIHZpZGUnXV0sCiAgICAgICAgICAgICByZWNhcDplPT5gSuKAmWFpIGNlcnRhaW5lbWVudCBldSBkZXMgYsOpbsOpZmljZXMsIG3Dqm1lIHNpIGplIG5lIHNhaXMgcGFzIHF1ZWxsZXMgZ3JhaW5lcyBq4oCZYWkgcGxhbnTDqWVzIG5pIHF1ZWxzIGLDqW7DqWZpY2VzIGrigJlhaSBldXMuICR7U3RyaW5nKGUucDJ8fCcnKS50cmltKCkgPyBgUGV1dC3DqnRyZSAke21rKGUucDIpfSwgZXQgaWwgeSBhIHPDu3JlbWVudCBk4oCZYXV0cmVzIGLDqW7DqWZpY2VzIHF1ZSBq4oCZYWkgcHUgYXZvaXIuYCA6ICdJbCB5IGEgc8O7cmVtZW50IGRlcyBiw6luw6lmaWNlcyBxdWUgauKAmWFpIHB1IGF2b2lyLid9ICR7dHgoKS50YWlsUDJ9YCB9LAogICAgICAgIHAzOnsgZm9ybTooKT0+W1sndCcsJ0plIHByb21ldHMgZGUgbmUgcGx1cyBwbGFudGVyIGxlcyBtw6ptZXMgZ3JhaW5lcyBwZW5kYW50IGF1IG1vaW5z4oCmJ10sWydwMycsJ2NvbWJpZW4gZGUgdGVtcHMsIHBhciBleC4gOiAxIGhldXJlJ10sWydkdXInLCdzZXQnXV0sCiAgICAgICAgICAgICByZWNhcDplPT5gSmUgcHJvbWV0cyBkZSBuZSBwbHVzIHBsYW50ZXIgbGVzIG3Dqm1lcyBncmFpbmVzIHBlbmRhbnQgYXUgbW9pbnMgJHttayhlLnAzKX0uICR7dHgoKS5uaWdodH1gIH0sCiAgICAgICAgcDQ6eyBmb3JtOigpPT5bWyd6aSddLFsndCcsYEVuIGdlc3RlIGRlIGNvbXBlbnNhdGlvbiwgJHtwRHJhZnQuemk9PT0nbWFpbmUnPydkZW1haW4nOidhdWpvdXJk4oCZaHVpJ30gamUgcHJvbWV0cyBkZeKApmBdLFsncDQnLCdjZSBxdWUgamUgdmFpcyBmYWlyZSddXSwKICAgICAgICAgICAgIHJlY2FwOmU9PmBFbiBnZXN0ZSBkZSBjb21wZW5zYXRpb24sICR7dHgoKS56aShlLnppKX0gamUgcHJvbWV0cyAke2RlRnIobm9MZWFkKGUucDQpKX0ke21rKG5vTGVhZChlLnA0KSl9LmAgfSB9CiAgfQp9OwoKLyogLS0tLS0tLS0tLSBwcmFjdGljZSB0ZXh0czogSXRhbGlhbm8gLS0tLS0tLS0tLSAqLwpUWC5pdCA9IHsKICB2b3dKb3k6WwogICAgJ0ZhY2NpbyBxdWVzdGUgY29zZSBwZXJjaMOpIGxhIG1pYSByZWFsdMOgIMOoIGRldHRhdGEgZGFpIHNlbWkgY2hlIHBpYW50bywgY2hlIHNpIHByb2lldHRhbm8gc3VsbGEgdmFjdWl0w6AgZGkgdW5hIHJlYWx0w6AgY2hlIG5vbiB2aWVuZSBkYSBzw6kgc3Rlc3NhLicsCiAgICAnUG9pY2jDqSBobyBwaWFudGF0byBxdWVzdGkgc2VtaSwgY2hlIG9yYSBzdG8gYW5jaGUgaW5uYWZmaWFuZG8sIGF2csOyIHN1Y2Nlc3NvLicsCiAgICAnUG9pY2jDqSBobyBzdWNjZXNzbyB1c2FuZG8gcXVlc3RvIHNpc3RlbWEsIGFsY3VuaSBkZWkgbWllaSBhbWljaSBlIGNvbm9zY2VudGkgbWkgaW1pdGVyYW5ubyBlIGF2cmFubm8gc3VjY2Vzc28gYSBsb3JvIHZvbHRhLiBQb2ljaMOpIGxvcm8gYXZyYW5ubyBzdWNjZXNzbyB1c2FuZG8gcXVlc3RvIHNpc3RlbWEsIGkgbG9ybyBhbWljaSBlIGNvbm9zY2VudGkgbGkgaW1pdGVyYW5ubyBhIGxvcm8gdm9sdGEuJywKICAgICdJbiBxdWVzdG8gbW9kbywgY29uIGlsIG1pbyBlc2VtcGlvLCBhdnZpbyB1bmEgcmVhemlvbmUgYSBjYXRlbmEgY2hlIGlzcGlyYSBtaWdsaWFpYSBlIG1pZ2xpYWlhIGRpIHBlcnNvbmUgYSB1c2FyZSBxdWVzdG8gc2lzdGVtYSBlIGFkIGF2ZXJlIHN1Y2Nlc3NvLiddLAogIHZvd0pveUxhc3Q6J0lsIGNoZSByZW5kZXLDoCBpbCBtb25kbyB1biBwb3N0byBtaWdsaW9yZSBlIHBpw7kgYmVsbG8uJywKICBxSm95Onsgb2JpZWN0aXY6J0zigJlvYmlldHRpdm8gYSBjdWkgZGVkaWNvIHF1ZXN0YSBtZWRpdGF6aW9uZSBkZWxsYSBnaW9pYScsIHNlbWludGU6J1F1YWxpIHNlbWkgaG8gcGlhbnRhdG8nLAogICAgICAgICBhanV0b3I6J0NoaSBtaSBwcm9wb25nbyBkaSBhaXV0YXJlIDEgb3JhIGFsbGEgc2V0dGltYW5hPyBRdWFuZG8gdm9nbGlvIGZhcmxvPyBDaGUgY29zYSBmYXLDsiBwZXIgcXVlc3RhIHBlcnNvbmE\/JyB9LAogIHBvd2Vyczp7IHAxOlsnUG90ZXJlIDEnLCdSaWNvcmRhcmUgbGEgcGVubmEnXSwgcDI6WydQb3RlcmUgMicsJ0lsIHJpbXBpYW50byBpbnRlbGxpZ2VudGUnXSwgcDM6WydQb3RlcmUgMycsJ0xhIHJlc3RyaXppb25lJ10sIHA0OlsnUG90ZXJlIDQnLCdM4oCZYW50aWRvdG8nXSB9LAogIHZvd1BvdzooKT0+WwogICAgJ0ZhY2NpbyBxdWVzdGUgY29zZSBwZXJjaMOpIGxhIHJlYWx0w6Agw6ggZGV0dGF0YSBkYWkgc2VtaSBjaGUgcGlhbnRvIGUgc2kgcHJvaWV0dGEgc3VsbGEgdmFjdWl0w6AgZGkgdW5hIHJlYWx0w6AgY2hlIG5vbiB2aWVuZSBkYSBzw6kgc3Rlc3NhLicsCiAgICBgU2UgcGlhbnRvIHBvc2l0aXZvLCBzb25vICR7RygnY29zdHJldHRhJywnY29zdHJldHRvJyl9IGEgcGVyY2VwaXJlIHVuYSByZWFsdMOgIHBvc2l0aXZhLCBhbmNoZSBzZSBjaGkgbWkgc3RhIGludG9ybm8gbGEgcGVyY2VwaXNjZSBjb21lIG5lZ2F0aXZhLiBTZSBwaWFudG8gbmVnYXRpdm8sIHNvbm8gJHtHKCdjb3N0cmV0dGEnLCdjb3N0cmV0dG8nKX0gYSBwZXJjZXBpcmUgdW5hIHJlYWx0w6AgYSBtZSBzZmF2b3Jldm9sZSwgYW5jaGUgc2UgY2hpIG1pIHN0YSBpbnRvcm5vIGxhIHBlcmNlcGlzY2UgY29tZSBwb3NpdGl2YS5gLAogICAgJ0Nvc8OsIHNjZWxnbyBkaSBwaWFudGFyZSBzZW1pIHBvc2l0aXZpLicsCiAgICAnUG9pY2jDqSBobyBzdWNjZXNzbyB1c2FuZG8gcXVlc3RvIHNpc3RlbWEsIGFsY3VuaSBkZWkgbWllaSBhbWljaSBlIGNvbm9zY2VudGkgbWkgaW1pdGVyYW5ubyBlIGF2cmFubm8gc3VjY2Vzc28gYSBsb3JvIHZvbHRhLiBQb2ljaMOpIGxvcm8gYXZyYW5ubyBzdWNjZXNzbywgaSBsb3JvIGFtaWNpIGUgY29ub3NjZW50aSBsaSBpbWl0ZXJhbm5vIGUgYXZyYW5ubyBzdWNjZXNzby4nXSwKICB2b3dQb3dMYXN0OidDb3PDrCBpbCBtb25kbyBkaXZlbnRhIHVuIHBvc3RvIG1pZ2xpb3JlIGUgcGnDuSBiZWxsby4nLAogIHBvd0hlYWQ6J0kgNCBQT1RFUkknLCBwb3dIZWFkQ2FzZTonSSA0IHBvdGVyaScsCiAgdGhlbWVzOnsgJ0Btb25leSc6J1NvbGRpJywgJ0ByZWxhdGlvbnNoaXBzJzonUmVsYXppb25pJywgJ0BoZWFsdGgnOidTYWx1dGUnIH0sCiAgZHVyOlsnNSBzZWNvbmRpJywnMSBtaW51dG8nLCc1IG1pbnV0aScsJzEwIG1pbnV0aScsJzEgb3JhJywndHV0dG8gaWwgZ2lvcm5vJ10sCiAgZHVyQXBwZW5kOmQ9PmQ9PT0ndHV0dG8gaWwgZ2lvcm5vJz8ncGVyIHR1dHRvIGlsIGdpb3Jubyc6J3BlciBhbG1lbm8gJytkLAogIGR1clN0cmlwOi9ccyoocGVyXHMrKT8oYWxtZW5vXHMrKT8odHV0dG8gaWwgZ2lvcm5vfDUgc2Vjb25kaXwxIG1pbnV0b3w1IG1pbnV0aXwxMCBtaW51dGl8MSBvcmEpXHMqJC9pLAogIGxlYWQ6L15kaVxzKy9pLAogIHppOno9Pno9PT0nbWFpbmUnPydkb21hbmknOidvZ2dpJywKICB0YWlsUDE6J0UgZm9yc2Ugbm9uIHNvIGFuY29yYSBxdWFsaSBhbHRyaSBzZW1pIGhvIHBpYW50YXRvLCBzaWN1cmFtZW50ZSBtb2x0aSBhbHRyaSBjaGUgb3JhIG5vbiByaWNvcmRvLiBRdWFsdW5xdWUgY29zYSBpbyBhYmJpYSBwZW5zYXRvLCBkZXR0byBvIGZhdHRvLCB2b2dsaW8gZGlzYXR0aXZhcmUgb3JhIHF1ZXN0aSBzZW1pLicsCiAgZ2V0IHRhaWxQMigpeyByZXR1cm4gYEhvIGZhdHRvIGRlbCBtYWxlIGEgbWUgJHtHKCdzdGVzc2EnLCdzdGVzc28nKX0gZSBhbGxlIHBlcnNvbmUgaW50b3JubyBhIG1lLiBNaSBkaXNwaWFjZSwgZSB2b2dsaW8gZGlzYXR0aXZhcmUgcXVlc3RpIHNlbWkgaWwgcHJpbWEgcG9zc2liaWxlLCBpbnNpZW1lIGEgdHV0dGUgbGUgY2F0ZW5lIGRpIGV2ZW50aSBjaGUgbmUgZGVyaXZhbm8sIHBlcmNow6kgb3JhIGNhcGlzY28gY2hlIHNpIHJhZGRvcHBpYW5vIG9nbmkgMjQgb3JlLCBlIHByaW1hIGxpIGRpc2F0dGl2bywgbWVnbGlvIMOoIWAgfSwKICBuaWdodDonRSBzdGFzZXJhLCBjb25zYXBldm9sbWVudGUsIGRhbCBtb21lbnRvIGluIGN1aSBwb3NvIGxhIHRlc3RhIHN1bCBjdXNjaW5vIGUgbWkgYWRkb3JtZW50byBmaW5vIGEgcXVhbmRvIG1pIHN2ZWdsaW8gYWwgbWF0dGluby4nLAogIHN0ZDp7CiAgICBwMjp7IGZvcm06KCk9PltbJ3QnLCdRdWFsaSBiZW5lZmljaSBobyBhdnV0byddLFsncDInLCdiZW5lZmljaSBtYXRlcmlhbGkgbyBkZWxs4oCZZWdvJ11dLAogICAgICAgICByZWNhcDplPT5gQ29uIGlsIGxpdmVsbG8gZGkgY29uc2FwZXZvbGV6emEgY2hlIGF2ZXZvIG5lZ2xpIGFubmkgaW4gY3VpIGhvIHBlbnNhdG8gLyBkZXR0byAvIGZhdHRvIHF1ZXN0ZSBjb3NlLCBlcmEgdHV0dG8gY2nDsiBjaGUgc2FwZXZvIGZhcmUuIERpIHNpY3VybyBobyBhdnV0byBiZW5lZmljaSBtYXRlcmlhbGkgbyBkZWxs4oCZZWdvOiAke21rKGUucDIpfS4gRSBmb3JzZSBobyBhdnV0byBhbmNoZSBhbHRyaSBiZW5lZmljaSBjaGUgb3JhIG5vbiByaWNvcmRvLiBPcmEgbWkgcmVuZG8gY29udG8gZGkgYXZlciBwYWdhdG8sIGUgZGkgcGFnYXJlIGFuY29yYSwgdW4gcHJlenpvIHRyb3BwbyBhbHRvIHBlciB0dXR0aSBxdWVzdGkgYmVuZWZpY2kuICR7dHgoKS50YWlsUDJ9YCB9LAogICAgcDM6eyBmb3JtOigpPT5bWyd0JywnUHJvbWV0dG\/igKYnXSxbJ3AzJywnY29zYSBwcm9tZXR0byBkaSBub24gZmFyZSBwacO5LCBlIHBlciBxdWFudG8gdGVtcG8sIGFkIGVzLjogZGkgbm9uIOKApiBwZXIgYWxtZW5vIDEgbWludXRvJ10sWydkdXInLCdhZGQnXV0sCiAgICAgICAgIHJlY2FwOmU9PmBQcm9tZXR0byAke21rKGUucDMpfS4gJHt0eCgpLm5pZ2h0fWAgfSwKICAgIHA0OnsgZm9ybTooKT0+W1snemknXSxbJ3QnLGAke3BEcmFmdC56aT09PSdtYWluZSc\/J0RvbWFuaSc6J09nZ2knfSBwcm9tZXR0byBkaeKApmBdLFsncDQnLCdjb3NhIGZhcsOyLCBjb21lIHNlbWUgb3Bwb3N0byBhIHF1ZWxsbyBjaGUgdm9nbGlvIGRpc2F0dGl2YXJlJ11dLAogICAgICAgICByZWNhcDplPT5gQ29tZSBnZXN0byBjb21wZW5zYXRpdm8sIGRlZGljbyBpbCBmYXR0byBkaSBjb21wcmVuZGVyZSBvcmEgY2hlIGxhIHJlYWx0w6AgY2hlIHZpdm8gdmllbmUgZGFpIHNlbWkgY2hlIGhvIHBpYW50YXRvIGluIHBhc3NhdG8sIGNoZSBzaSBwcm9pZXR0YW5vIHN1bGxhIHZhY3VpdMOgIGRpIHVuYSByZWFsdMOgIGNoZSBub24gdmllbmUgZGEgc8OpIHN0ZXNzYSwgZSAke3R4KCkuemkoZS56aSl9IHByb21ldHRvIGRpICR7bWsobm9MZWFkKGUucDQpKX0uYCB9CiAgfSwKICBwdjp7CiAgICAxOnsgbmFtZTooKT0+YENpw7IgY2hlIHNvbm8gJHtHKCdjb3N0cmV0dGEnLCdjb3N0cmV0dG8nKX0gYSB2aXZlcmVgLAogICAgICAgIHAxOnsgZm9ybTooKT0+W1sndCcsYFNvbm8gJHtHKCdjb3N0cmV0dGEnLCdjb3N0cmV0dG8nKX0gYSB2aXZlcmUgbmVsbGEgbWlhIHJlYWx0w6DigKZgXSxbJ3AxYScsJ2Npw7IgY2hlIHZpdm8gb3JhJ10sCiAgICAgICAgICAgICAgICAgICAgICAgWyd0Jywn4oCmYSBjYXVzYSBkZWkgbWllaSBwZW5zaWVyaSwgcGFyb2xlIGUgYXppb25pIGRlbCBtaW8gcGFzc2F0bywgaW4gcXVlc3RhIHZpdGEgbyBpbiB1bmEgdml0YSBwcmVjZWRlbnRlLCBxdWFuZG\/igKYnXSxbJ3AxYicsJ3F1YWxpIHNlbWkgaG8gcGlhbnRhdG8nXV0sCiAgICAgICAgICAgICByZWNhcDplPT5gU29ubyAke0coJ2Nvc3RyZXR0YScsJ2Nvc3RyZXR0bycpfSBhIHZpdmVyZSBuZWxsYSBtaWEgcmVhbHTDoCAke21rKGUucDFhKX0gYSBjYXVzYSBkZWkgbWllaSBwZW5zaWVyaSwgcGFyb2xlIGUgYXppb25pIGRlbCBtaW8gcGFzc2F0bywgaW4gcXVlc3RhIHZpdGEgbyBpbiB1bmEgdml0YSBwcmVjZWRlbnRlLCBxdWFuZG8gJHttayhlLnAxYil9LiAke3R4KCkudGFpbFAxfWAgfSB9LAogICAgMjp7IG5hbWU6KCk9PidRdWFsaSBzZW1pIHZvZ2xpbyBwdWxpcmUnLAogICAgICAgIHAxOnsgZm9ybTooKT0+W1sndCcsJ1ZvZ2xpbyBkaXNhdHRpdmFyZSBpIHNlbWkgcGlhbnRhdGkgcXVhbmRv4oCmJ10sWydwMWInLCdjb3NhIGhvIHBlbnNhdG8sIGRldHRvIG8gZmF0dG8nXV0sCiAgICAgICAgICAgICByZWNhcDplPT5gVm9nbGlvIGRpc2F0dGl2YXJlIGkgc2VtaSBwaWFudGF0aSBxdWFuZG8gJHttayhlLnAxYil9LCBwZXJjaMOpIHNpIHJhZGRvcHBpYW5vIG9nbmkgMjQgb3JlIGUgbm9uIHZvZ2xpbyBwacO5IGNoZSBxdWVzdGkgc2VtaSBjcmVzY2Fuby4gSW5vbHRyZSwgZm9yc2UgaG8gcGlhbnRhdG8gYW5jaGUgYWx0cmkgc2VtaSBjaGUgb3JhIG5vbiByaWNvcmRvLiBRdWFsdW5xdWUgY29zYSBpbyBhYmJpYSBwZW5zYXRvLCBkZXR0byBvIGZhdHRvLCB2b2dsaW8gZGlzYXR0aXZhcmUgb3JhIHF1ZXN0aSBzZW1pLmAgfSB9LAogICAgMzp7IG5hbWU6KCk9PidQdWxpc2NvIHVu4oCZZW1vemlvbmUnLAogICAgICAgIHAxOnsgZm9ybTooKT0+W1sndCcsJ1ZvZ2xpbyBwdWxpcmUgaSBzZW1pIGRp4oCmJ10sWydwMWUnLCds4oCZZW1vemlvbmUgbyBsbyBzY2hlbWE6IHJhYmJpYSwgaW52aWRpYSwgcGF1cmHigKYnXSwKICAgICAgICAgICAgICAgICAgICAgICBbJ3QnLCfigKZwaWFudGF0aSBjb24gcGVuc2llcmksIHBhcm9sZSBlIGF6aW9uaSBuZWwgbWlvIHBhc3NhdG8sIGluIHF1ZXN0YSB2aXRhIG8gaW4gdW5hIHZpdGEgcHJlY2VkZW50ZSwgY2hlIG1pIGNvc3RyaW5nb25vIGEgdml2ZXJl4oCmJ10sWydwMWEnLCdsYSBzaXR1YXppb25lIGNoZSB2aXZvJ10sCiAgICAgICAgICAgICAgICAgICAgICAgWyd0JywnUXVhbmRv4oCmJ10sWydwMWInLCdjb3NhIHBlbnNvIGRpIGF2ZXIgcGlhbnRhdG8nXV0sCiAgICAgICAgICAgICByZWNhcDplPT5gVm9nbGlvIHB1bGlyZSBpIHNlbWkgZGkgJHttayhlLnAxZSl9IHBpYW50YXRpIGNvbiBwZW5zaWVyaSwgcGFyb2xlIGUgYXppb25pIG5lbCBtaW8gcGFzc2F0bywgaW4gcXVlc3RhIHZpdGEgbyBpbiB1bmEgdml0YSBwcmVjZWRlbnRlLCBjaGUgbWkgY29zdHJpbmdvbm8gYSB2aXZlcmUgJHttayhlLnAxYSl9LiBRdWFuZG8gJHttayhlLnAxYil9LiAke3R4KCkudGFpbFAxfWAgfSB9LAogICAgNDp7IG5hbWU6KCk9PidOb24gc28gcXVhbGkgc2VtaSBobyBwaWFudGF0bycsCiAgICAgICAgcDE6eyBmb3JtOigpPT5bWyd0JywnTm9uIGhvIGlkZWEgZGkgY29zYSBpbyBhYmJpYSBwb3R1dG8gcGlhbnRhcmUgcGVyIHZpdmVyZSBxdWVzdGEgc2l0dWF6aW9uZTonXSxbJ3AxYScsJ2xhIHNpdHVhemlvbmUgY2hlIHZpdm8nXV0sCiAgICAgICAgICAgICByZWNhcDplPT5gTm9uIGhvIGlkZWEgZGkgY29zYSBpbyBhYmJpYSBwb3R1dG8gcGlhbnRhcmUgcGVyIHZpdmVyZSBxdWVzdGEgc2l0dWF6aW9uZTogJHttayhlLnAxYSl9LiBNYSBvcmEgY2FwaXNjbyBjaGUsIHNlIG5vbiBhdmVzc2kgcGlhbnRhdG8gcXVlaSBzZW1pLCBxdWVzdGEgc2l0dWF6aW9uZSBub24gc2FyZWJiZSBuZWxsYSBtaWEgcmVhbHTDoC4gVm9nbGlvIGRpc2F0dGl2YXJlIG9yYSBpIHNlbWkgcGlhbnRhdGkuYCB9LAogICAgICAgIHAyOnsgZm9ybTooKT0+W1sndCcsJ1NlIG1pIHZlbmdvbm8gaW4gbWVudGUgYWxjdW5pIGJlbmVmaWNpIChmYWNvbHRhdGl2byknXSxbJ3AyJywncHVvaSBsYXNjaWFyZSB2dW90byddXSwKICAgICAgICAgICAgIHJlY2FwOmU9PmBEaSBzaWN1cm8gaG8gYXZ1dG8gZGVpIGJlbmVmaWNpLCBhbmNoZSBzZSBub24gc28gcXVhbGkgc2VtaSBobyBwaWFudGF0byBuw6kgcXVhbGkgYmVuZWZpY2kgaG8gYXZ1dG8uICR7U3RyaW5nKGUucDJ8fCcnKS50cmltKCkgPyBgRm9yc2UgJHttayhlLnAyKX0sIGUgY2kgc29ubyBzaWN1cmFtZW50ZSBhbHRyaSBiZW5lZmljaSBjaGUgaG8gcG90dXRvIGF2ZXJlLmAgOiAnQ2kgc29ubyBzaWN1cmFtZW50ZSBiZW5lZmljaSBjaGUgaG8gcG90dXRvIGF2ZXJlLid9ICR7dHgoKS50YWlsUDJ9YCB9LAogICAgICAgIHAzOnsgZm9ybTooKT0+W1sndCcsJ1Byb21ldHRvIGRpIG5vbiBwaWFudGFyZSBwacO5IGdsaSBzdGVzc2kgc2VtaSBwZXIgYWxtZW5v4oCmJ10sWydwMycsJ3BlciBxdWFudG8gdGVtcG8sIGFkIGVzLjogMSBvcmEnXSxbJ2R1cicsJ3NldCddXSwKICAgICAgICAgICAgIHJlY2FwOmU9PmBQcm9tZXR0byBkaSBub24gcGlhbnRhcmUgcGnDuSBnbGkgc3Rlc3NpIHNlbWkgcGVyIGFsbWVubyAke21rKGUucDMpfS4gJHt0eCgpLm5pZ2h0fWAgfSwKICAgICAgICBwNDp7IGZvcm06KCk9PltbJ3ppJ10sWyd0JyxgQ29tZSBnZXN0byBjb21wZW5zYXRpdm8sICR7cERyYWZ0LnppPT09J21haW5lJz8nZG9tYW5pJzonb2dnaSd9IHByb21ldHRvIGRp4oCmYF0sWydwNCcsJ2Nvc2EgZmFyw7InXV0sCiAgICAgICAgICAgICByZWNhcDplPT5gQ29tZSBnZXN0byBjb21wZW5zYXRpdm8sICR7dHgoKS56aShlLnppKX0gcHJvbWV0dG8gZGkgJHttayhub0xlYWQoZS5wNCkpfS5gIH0gfQogIH0KfTsKCi8qIC0tLS0tLS0tLS0gUm9tw6JuxIMgLS0tLS0tLS0tLSAqLwovKiBudW1lcmVsZSBkZSBsYSAyMCDDrm4gc3VzICjImWkgMTAwLCAyMDDigKYpIGNlciDigJ5kZeKAnTogMjAgZGUgbWludXRlLCAxIHByYWN0aWPEgywgNSBwcmFjdGljaSAqLwpjb25zdCBkZVJvID0gbiA9PiAobj49MjAgJiYgKG4lMTAwPT09MCB8fCBuJTEwMD49MjApKSA\/ICdkZSAnIDogJyc7CmNvbnN0IHJvTiA9IChuLHMscCkgPT4gbj09PTEgPyBgMSAke3N9YCA6IGAke259ICR7ZGVSbyhuKX0ke3B9YDsKVUkucm8gPSB7CiAgYXBwTmFtZTonU2VtaW7Im2UgQnVuZScsIGNvdXJzZXM6J0N1cnN1cmlsZSBtZWxlJywgbGFuZ3VhZ2U6J0xpbWJhJywgc29vbjonw65uIGN1csOibmQnLCBjbG9zZTonw45uY2hpZGUnLAogIG5hdlRvZGF5OidBemknLCBuYXZKb3k6J0J1Y3VyaWUnLCBuYXZQcmFjdGljZTonUHJhY3RpY8SDJywgbmF2VG9kbzonVG8gRG8nLCBuYXZQb3dlcnM6JzQgUHV0ZXJpJywgbWVudTonTWVuaXUnLAogIHNhdmVGYWlsOidOdSBzLWEgcHV0dXQgc2FsdmEuIFZlcmlmaWPEgyBpbnRlcm5ldHVsLicsIGxvYWRGYWlsOidOdSBzLWF1IHB1dHV0IMOubmPEg3JjYSBkYXRlbGUuJywKICB0b2RheTonQXppJywgeWVzdGVyZGF5OidJZXJpJywKICBraW5kOnsgbWVkaXRhdGllOidNZWRpdGHIm2llJywgeW9nYTonWW9nYScsIGJ1Y3VyaWU6J01lZGl0YcibaWEgYnVjdXJpZWknLCByZWN1bm9zdGludGU6J1JlY3Vub8iZdGluyJtlIMiZaSBzdWNjZXNlJywgcHV0ZXJpOidDZWxlIDQgcHV0ZXJpJyB9LAogIHRlc3RCYW5uZXI6J1ZhcmlhbnTEgyBkZSB0ZXN0OiDDrm5zZW1uxINyaWxlIHNlIHDEg3N0cmVhesSDIGRvYXIgcGUgYWNlc3QgZGlzcG96aXRpdi4gUGUgc2l0ZSBzZSB2b3Igc2FsdmEgw65uIGNvbnR1bCB0xIN1LicsCiAgZ2VuUTonQ3VtIHByZWZlcmkgc8SDIMOuyJtpIHZvcmJlc2M\/JywgZ2VuTm90ZTonQ2EgdGV4dGVsZSBzxIMgc3VuZSBmaXJlc2MsIGRlIGV4ZW1wbHUg4oCeU3VudCByZWN1bm9zY8SDdG9hcmXigJ0gc2F1IOKAnlN1bnQgcmVjdW5vc2PEg3RvcuKAnS4nLCBmZW06J0ZlbWluaW4nLCBtYXNjOidNYXNjdWxpbicsCiAgZ2VuRm9vdDpnPT5gw47Im2kgdm9yYmVzYyBsYSAke2c9PT0nbSc\/J21hc2N1bGluJzonZmVtaW5pbid9YCwgY2hhbmdlOidzY2hpbWLEgycsCiAgaGVhZGxpbmU6J0NlIHBsYW50ZXppIGF6aT8nLCBzdHJlYWs6J3ppbGUgbGEgcsOibmQnLCBtaW5Ub2RheTonbWludXRlIGF6aScsIHByYWN0VG9kYXk6J3ByYWN0aWNpIGF6aScsIG5Ub2RheTpuPT5gJHtufSBhemlgLAogIHRpbGVNZWQ6J01lZGl0YcibaWUgLyBZb2dhJywgdGlsZVJlYzonUmVjdW5vyJl0aW7Im2UgLyBTdWNjZXNlJywgdGlsZUpveTonTWVkaXRhyJtpYSBidWN1cmllaScsIHRpbGVQb3c6J0NlbGUgNCBwdXRlcmknLAogIGpvdXJuYWw6J0p1cm5hbHVsIG1ldScsIG5FbnRyaWVzOm49Pm49PT0xPycxIMOubnNlbW5hcmUnOmAke259ICR7ZGVSbyhuKX3Drm5zZW1uxINyaWAsCiAgam95VGl0bGU6J01lZGl0YcibaWEgYnVjdXJpZWknLCBqb3lMZWFkOidDb21wbGV0ZWF6xIMgY2VsZSB0cmVpIHLEg3NwdW5zdXJpLCBhcG9pIHNhbHZlYXrEgy4nLCBicmVhdGhlQ3VlOidJbnNwaXLEgyDImWkgZXhwaXLEgyBwcm9mdW5kIGRlIDMgb3JpJywgYnJlYXRoZUJ0bjonUmVzcGlyxIMgY3UgbWluZScsCiAgYWRkSGVscFRvZG86JysgQWRhdWfEgyDDrm4gVG8gRG86IHBlIGNpbmUgYWp1dCcsIG5ld0pveTonTyBub3XEgyBtZWRpdGHIm2llIGEgYnVjdXJpZWknLCBzYXZlOidTYWx2ZWF6xIMnLAogIHBpY2tQcmV2Om49PmBBbGVnZSB1biBvYmllY3RpdiBkZSBkaW5haW50ZSAoJHtufSlgLCBteUdvYWxzOidPYmllY3RpdmVsZSBtZWxlJywgc2VhcmNoR29hbHM6J0NhdXTEgyDDrm4gb2JpZWN0aXZlbGUgbWVsZScsIG5vR29hbDonTmljaXVuIG9iaWVjdGl2IGfEg3NpdC4nLCBuZXdHb2FsUGg6J3NhdSBzY3JpZSB1biBvYmllY3RpdiBub3UnLAogIGFkZFRvZG86JysgQWRhdWfEgyDDrm4gVG8gRG8nLCBhZGRlZFRvZG86J+KckyBBZMSDdWdhdCDDrm4gVG8gRG8nLCB0b2FzdEFkZGVkOidBZMSDdWdhdCDDrm4gVG8gRG8nLCBmaWxsQW5zd2VyczonQ29tcGxldGVhesSDIHLEg3NwdW5zdXJpbGUuJywKICBpbmhhbGU6J0luc3BpcsSD4oCmJywgZXhoYWxlOidFeHBpcsSD4oCmJywgYWdhaW46J8OObmPEgyBvIGRhdMSDJywgZG9uZUJyZWF0aFA6J0FpIHByYWN0aWNhdCBwZW50cnUgYSBkZXphY3RpdmEgc8SDbcOibsibYS4nLCBkb25lQnJlYXRoSjonU8SDbcOibsibYSBlIHVkYXTEgy4nLAogIHBvd1RpdGxlOidDZWxlIDQgcHV0ZXJpJywgcG93TGVhZDonQWxlZ2UgdGVtYSDImWkgZGUgdW5kZSBwb3JuZciZdGksIGNvbXBsZXRlYXrEgyBmaWVjYXJlIHB1dGVyZSwgYXBvaSBzYWx2ZWF6xIMuJywgdGhlbWU6J1RFTUEnLCB0aGVtZUFyaWE6J1RlbWEnLAogIGZld2VyOidNYWkgcHXIm2luZScsIGFsbFRoZW1lczpuPT5gVG9hdGUgdGVtZWxlICgke259KWAsIG5ld1RoZW1lUGg6J3NhdSBhZGF1Z8SDIG8gdGVtxIMgbm91xIMnLCBhZGQ6J0FkYXVnxIMnLCBzdGFydDonREUgVU5ERSBQT1JORciYVEknLAogIHdoZW46J0PDom5kJywgelRvZGF5OidBc3TEg3ppJywgelRvbW9ycm93OidNw6JpbmUnLCBob3dMb25nOidDw6J0IHRpbXAnLAogIHA0bm90ZTonRHVwxIMgc2FsdmFyZSwgcHJvbWlzaXVuZWEgYWp1bmdlIGF1dG9tYXQgw65uIFRvIERvLicsIGZpbGxQb3dlcnM6J0NvbXBsZXRlYXrEgyBwdXRlcmlsZS4nLCBleHBvcnRMaW5rOidFeHBvcnTEgyBwcmFjdGljaWxlIHBlIG8gcGVyaW9hZMSDJywKICBpblRvZG86J0NlIGFpIHByb21pcyBsYSBwdXRlcmVhIGEgNC1hIGUgw65uIGxpc3RhIFRvIERvLicsIGNvcHk6J0NvcGlhesSDIHRleHQnLCBwZGY6J1NhbHZlYXrEgyBQREYnLAogIGRvSm95Tm93OidGxIMgbWVkaXRhyJtpYSBidWN1cmllaSBhY3VtJywgZ29Kb3k6J01lcmdpIGxhIG1lZGl0YcibaWEgYnVjdXJpZWknLCBuZXdQb3dlcnM6J8OObmNlcGUgdW4gbm91IGV4ZXJjacibaXUgNCBQdXRlcmknLAogIGNvcGllZDonVGV4dCBjb3BpYXQuIMOObCBwb8ibaSBsaXBpIHVuZGUgdnJlaS4nLCBjb3B5RmFpbDonTnUgYW0gcHV0dXQgY29waWEgcGUgYWNlc3QgZGlzcG96aXRpdi4nLAogIGJhY2s6J+KAuSDDjm5hcG9pJywgZXhwVGl0bGU6J0V4cG9ydMSDIHByYWN0aWNpbGUnLCBleHBMZWFkOidBbGVnZSBwZXJpb2FkYS4gUG\/Im2kgY29waWEgdGV4dHVsIHNhdSDDrmwgcG\/Im2kgc2FsdmEgY2EgUERGLicsIGZyb206J0RFIExBJywgdG86J1DDgk7EgiBMQScsCiAgblByYWN0Om49PmAke3JvTihuLCdwcmFjdGljxIMnLCdwcmFjdGljaScpfSDDrm4gYWNlYXN0xIMgcGVyaW9hZMSDLmAsIG5vUHJhY3Q6J051IGFpIHByYWN0aWNpIGN1IGNlbGUgNCBwdXRlcmkgw65uIGFjZWFzdMSDIHBlcmlvYWTEgy4nLAogIHJlY1RpdGxlOidSZWN1bm\/ImXRpbsibZSAvIFN1Y2Nlc2UnLCByZWNMZWFkOidTY3JpZSBjw6J0ZSB2cmVpLiBGaWVjYXJlIHLDom5kIGUgbyByZWN1bm\/ImXRpbsibxIMgc2F1IHVuIHN1Y2Nlcy4nLAogIGdyYXRpdHVkZTonUmVjdW5vyJl0aW7Im8SDJywgc3VjY2VzczonU3VjY2VzJywgcm93VHlwZTppPT5gVGlwdWwgcsOibmR1bHVpICR7aX1gLCBkZWxSb3c6J8iYdGVyZ2UgcsOibmR1bCcsIHJlbW92ZTonyJh0ZXJnZScsIHN1Y2Nlc3NQaDonY2UgYW0gcmV1yJlpdCBhemknLAogIGFkZFJvdzonKyDDjm5jxIMgdW4gcsOibmQnLCB3cml0ZU9uZTonU2NyaWUgY2VsIHB1yJtpbiB1biByw6JuZC4nLCBzYXZlZEo6J1NhbHZhdCDDrm4ganVybmFsJywKICBwcmVHOkc9PmBTdW50ICR7RygncmVjdW5vc2PEg3RvYXJlJywncmVjdW5vc2PEg3RvcicpfSBwZW50cnVgLCBwcmVTOkc9PmBTdW50ICR7RygnYnVjdXJvYXPEgycsJ2J1Y3Vyb3MnKX0gcGVudHJ1YCwKICBuUmVjOihucixucyk9Pltucj9yb04obnIsJ3JlY3Vub8iZdGluyJvEgycsJ3JlY3Vub8iZdGluyJtlJyk6JycsIG5zP3JvTihucywnc3VjY2VzJywnc3VjY2VzZScpOicnXS5maWx0ZXIoQm9vbGVhbikuam9pbignIMK3ICcpLAogIHRvZG9UaXRsZTonVG8gRG8nLCB0b2RvTGVhZDonQ2UgYW0gZGUgZsSDY3V0IGNhIHNlbWluyJtlbGUgc8SDIGNyZWFzY8SDLicsIHRvZG9QaDonQWRhdWfEgyBjZXZhIGRlIGbEg2N1dCcsCiAgbWFya0RvbmU6J01hcmNoZWF6xIMgY2EgZsSDY3V0JywgbWFya1VuZG9uZTonTWFyY2hlYXrEgyBjYSBuZWbEg2N1dCcsIGRlbDonyJh0ZXJnZScsIG5vOidOdScsCiAgdG9kb0VtcHR5OidOaW1pYyBkZSBmxINjdXQgYWN1bS48YnI+Q2Ugc2NyaWkgbGEg4oCeUGUgY2luZSBhanV04oCdIMOubiBtZWRpdGHIm2lhIGJ1Y3VyaWVpIMiZaSBsYSBwdXRlcmVhIGEgNC1hIHBvYXRlIGFqdW5nZSBhaWNpLicsCiAgc2hvd0RvbmU6KHMsbik9PmAke3M\/J0FzY3VuZGUnOidBcmF0xIMnfSBjZSBhbSBmxINjdXQgKCR7bn0pYCwgc3JjOntidWN1cmllOidNZWRpdGHIm2lhIGJ1Y3VyaWVpJyxwdXRlcmk6J0NlbGUgNCBwdXRlcmknLG1hbnVhbDonQWTEg3VnYXQgZGUgbWluZSd9LCBkb25lVG9hc3Q6J0bEg2N1dC4gQnJhdm8hJywKICB0b2RvUHJvbWlzZTp6PT56PT09J21haW5lJz8nTcOiaW5lIHByb21pdCBzxIMnOidBc3TEg3ppIHByb21pdCBzxIMnLAogIGtpbmRBcmlhOidUaXB1bCBwcmFjdGljaWknLCBkb25lSDonR2F0YS4gU8SDbcOibsibYSBlIHBsYW50YXTEgy4nLCBkb25lTm90ZTooayxtKT0+YCR7a30sICR7bX0gbWluLiBTYWx2YXQgw65uIGp1cm5hbC5gLAogIHRpdGxlT3B0OidUaXRsdSAob3DIm2lvbmFsKScsIHBoTW9ybmluZzonZXguIE1lZGl0YcibaWEgZGUgZGltaW5lYcibxIMnLCBhbm90aGVyOifDjm5jxIMgbyBwcmFjdGljxIMnLAogIHN0b3BwZWRBZnRlcjptPT5gVGUtYWkgb3ByaXQgZHVwxIMgJHttfSBtaW4uYCwgd2FudFNhdmU6J1ZyZWkgc8SDIG8gdHJlYyDDrm4ganVybmFsPycsIHNhdmVNaW46bT0+YFNhbHZlYXrEgyAke219IG1pbmAsIGRvbnRTYXZlOidOdSBzYWx2YScsCiAgc3RvcHBlZDonUHJhY3RpY2EgYSBmb3N0IG9wcml0xIMuJywgYmFja1BsYWluOifDjm5hcG9pJywgcmVzdW1lOidDb250aW51xIMnLCBwYXVzZTonUGF1esSDJywgc3RvcDonT3ByZciZdGUnLAogIHNjcmVlbk5vdGU6J8iaaW5lIGVjcmFudWwgYXByaW5zLiBEYWPEgyB0ZWxlZm9udWwgc2UgYmxvY2hlYXrEgywgY2xvcG\/Im2VsdWwgZGUgZmluYWwgcG9hdGUgc8SDIG51IHN1bmUsIGRhciBwcmFjdGljYSBzZSBzYWx2ZWF6xIMgY8OibmQgcmV2aWkuJywKICBkdXJhdGlvbjonRFVSQVRBJywgcHJlcDonUFJFR8SCVElSRScsIHNvdW5kOidTVU5FVCcsIGJlbGw6J0Nsb3BvyJtlbCcsIGJvd2w6J0JvbCB0aWJldGFuJywgbGlzdGVuOidBc2N1bHTEgycsIHRpdGxlQ2FwOidUSVRMVSAoT1DImklPTkFMKScsIHBoU2lsZW5jZTonZXguIDUgbWludXRlIGRlIGxpbmnImXRlJywKICBiZWdpbjonw45uY2VwZScsIG1hbnVhbExpbms6J0FtIHByYWN0aWNhdCBmxINyxIMgdGltZXIsIHZyZWF1IGRvYXIgc8SDIGJpZmV6Jywgbm9UaW1lcjonRsSDcsSDIHRpbWVyJywgbG9nUHJhY3Q6J0JpZmVhesSDIG8gcHJhY3RpY8SDJywgZGF5OidaSVVBJywKICBwaEV2ZW5pbmc6J2V4LiBZb2dhIGRlIHNlYXLEgycsIHNhdmVKb3VybmFsOidTYWx2ZWF6xIMgw65uIGp1cm5hbCcsIGNhbmNlbDonUmVudW7Im8SDJywgbG9nZ2VkOidiaWZhdMSDJywKICByZWFkeTonR2F0YSBkZSDDrm5jZXB1dCcsIHByZXBQaGFzZTonUHJlZ8SDdGlyZScsIGJlbGxTdGFydDonQ2xvcG\/Im2VsdWwgc3VuxIMgbGEgw65uY2VwdXQnLCBvZjonZGluICcsIHBhdXNlZDonUGF1esSDJywgcHJlc3NDb250OidBcGFzxIMgQ29udGludcSDJywKICBwbHVzUHJlcDpsPT5gKyAke2x9IHByZWfEg3RpcmVgLCBub1ByZXA6J2bEg3LEgyBwcmVnxIN0aXJlJywgbm9uZTonRsSDcsSDJywgdW5pdE1pbjonbWluJywgdW5pdFNlYzonc2VjJywKICBhbGw6J1RvYXRlJywgblByYWN0aWNlczpuPT5yb04obiwncHJhY3RpY8SDJywncHJhY3RpY2knKSwgdG90TWluOm09PmAgwrcgJHttfSAke2RlUm8obSl9bWludXRlIMOubiB0b3RhbGAsCiAgakVtcHR5OifDjm5jxIMgbnUgYWkgbmljaW8gc8SDbcOibsibxIMgYWljaS48YnI+RsSDIG8gbWVkaXRhyJtpZSBzYXUgYmlmZWF6xIMgbyBwcmFjdGljxIMgyJlpIGFwYXJlIMOubiBqdXJuYWwuJywgZ29QcmFjdGljZTonTWVyZ2kgbGEgcHJhY3RpY8SDJywKICBkZWxROifImHRlcmdpIGFjZWFzdMSDIHByYWN0aWPEgz8nLCBkZWxldGVkOifImHRlcnMnLAogIGdhdGVMZWFkOidBcGxpY2HIm2lhIGUgZ3JhdHVpdMSDLiBJbnRyxIMgw65uIGNvbnR1bCB0xIN1IGNhIMOubnNlbW7Eg3JpbGUgc8SDIHLEg23Dom7EgyBzYWx2YXRlLicsIHNpZ25JbjonSW50csSDIMOubiBjb250JywgcmVnaXN0ZXI6J051IGFpIGNvbnQ\/IENyZWVhesSDLcibaSB1bnVsIGdyYXR1aXQnLAogIC8qIGNvbXVuaXRhdGVhICovCiAgcGVyc29uYWw6J1BlcnNvbmFsJywgY29tbXVuaXR5OidDb211bml0YXRlJywgc2VnQXJpYTonQ2UgdmV6aScsCiAgY29tbVRpdGxlOidDb211bml0YXRlYScsIGNvbW1MZWFkOidDw6JuZCB0ZSBidWN1cmkgZGUgc3VjY2VzZWxlIGFsdG9yYSwgdXppIHNlbWluyJtlbGUgcGVudHJ1IG9iaWVjdGl2dWwgdMSDdS4gQ8OibmQgY2l0ZciZdGkgY2VsZSA0IHB1dGVyaSBhbGUgY3VpdmEsIGxlIHBvyJtpIHBhcmN1cmdlIMiZaSBwZW50cnUgdGluZS4nLAogIGNvbW1UZXN0QmFubmVyOidWYXJpYW50xIMgZGUgdGVzdDogYWljaSB2ZXppIGPDonRldmEgZXhlbXBsZS4gUGUgc2l0ZSB2b3IgYXDEg3JlYSBwb3N0xINyaWxlIHJlYWxlIGFsZSBjZWxvciBjYXJlIGFsZWcgc8SDIMOubXDEg3J0xIPImWVhc2PEgy4nLAogIGNvbW1FbXB0eTonw45uY8SDIG51IGUgbmltaWMgYWljaS4nLCBhcHBlYXJJbjpuPT5gQXBhcmkgw65uIGNvbXVuaXRhdGUgY2EgPGI+JHtufTwvYj5gLAogIHJlYWN0Sm95OidNxIMgYnVjdXInLCBjb3VudEpveToncy1hdSBidWN1cmF0JywgdG9hc3RKb3k6J0PDom5kIHRlIGJ1Y3VyaSBwZW50cnUgYWzIm2lpLCB1emkgc2VtaW7Im2VsZSBwZW50cnUgb2JpZWN0aXZ1bCB0xIN1LicsCiAgcmVhY3RQb3c6J0FtIHBhcmN1cnMnLCBjb3VudFBvdzonYXUgcGFyY3VycycsIHRvYXN0UG93OidBaSBwYXJjdXJzIGNlbGUgNCBwdXRlcmkgbGEgcsOibmR1bCB0xIN1LicsCiAgZ2VzdE5vdGU6J0F0ZW7Im2llIGxhIGdlc3R1bCBjb21wZW5zYXRvcjogYWxlZ2UtyJtpIHVudWwgcGVyc29uYWwgyJlpIHByYWN0aWPEgy1sIGNhIHPEgyBkZXphY3RpdmV6aSBzZW1pbsibZWxlLiBOdSB0cmVidWllIHPEgyBmaWUgbmVhcMSDcmF0IGNlIGEgcHJvbWlzIGNlYWxhbHTEgyBwZXJzb2FuxIMuJywKICBub2JvZHlZZXQ6J8OObmPEgyBuaW1lbmknLCB3aXRoZHJhdzonUmV0cmFnZScsIHJlcG9ydDonUmFwb3J0ZWF6xIMnLCByZXBvcnRBZ2FpbjonQXBhc8SDIGRpbiBub3UgY2Egc8SDIHJhcG9ydGV6aScsIHJlcG9ydGVkOidNdWzIm3VtaW0uIFBvc3RhcmVhIGEgZm9zdCBhc2N1bnPEgyDImWkgdmEgZmkgdmVyaWZpY2F0xIMuJywKICByZWFkRnVsbDonQ2l0ZciZdGUgaW50ZWdyYWwgY2VsZSA0IHB1dGVyaScsIHNob3dMZXNzOidBcmF0xIMgbWFpIHB1yJtpbicsIHlvdTondHUnLAogIGluc3BvSGVhZDpuPT5gRGluIGNvbXVuaXRhdGUgwrcgJHtufWAsIGluc3BvTW9yZTonVmV6aSBjZSBhdSBwbGFudGF0IGNlaWxhbMibaSDigLonLAogIHNoYXJlQnRuOifDjm1wxINydMSDyJllyJl0ZSBhbm9uaW0gY3UgY29tdW5pdGF0ZWEnLCBzaGFyZWRCdG46J8OObXDEg3J0xIPImWl0IMOubiBjb211bml0YXRlIMK3IHJldHJhZ2UnLCBzaGFyZWRUYWc6J8OubiBjb211bml0YXRlJywKICB3aG9TZWVzOidDSU5FIFZFREUnLCBvbmx5TWU6J0RvYXIgZXUnLCBzaGFyZUFub246J8OObXDEg3J0xIPImWXImXRlIGFub25pbScsIHNoYXJlQWZ0ZXI6J0R1cMSDIHNhbHZhcmUgYWxlZ2kgY2UgYXBhcmUgw65uIGNvbXVuaXRhdGUgyJlpIHN1YiBjZSBudW1lLicsCiAgc2hlZXRTaGFyZWQ6J8OObXDEg3J0xIPImWl0IMOubiBjb211bml0YXRlJywgc2hlZXRTaGFyZWROb3RlOm49PmBBY2Vhc3TEgyDDrm5zZW1uYXJlIGUgdml6aWJpbMSDIMOubiBjb211bml0YXRlIHN1YiBudW1lbGUgPGI+JHtufTwvYj4uIERhY8SDIG8gcmV0cmFnaSwgZGlzcGFyZSBwZW50cnUgdG\/Im2kuIMOObiBqdXJuYWx1bCB0xIN1IHLEg23Dom5lLmAsCiAgYmxvY2tlZE5vdGU6J8OObXDEg3J0xIPImWlyZWEgw65uIGNvbXVuaXRhdGUgbnUgbWFpIGVzdGUgZGlzcG9uaWJpbMSDIHBlbnRydSBjb250dWwgdMSDdS4nLAogIG5hbWVMYWJlbDonTnVtZWxlIHTEg3Ugw65uIGNvbXVuaXRhdGUnLCBuYW1lUGg6J2V4LiBGbG9hcmUgZGUgdGVpJywgbmFtZU5vdGU6J051IHRyZWJ1aWUgc8SDIGZpZSBudW1lbGUgdMSDdSByZWFsLiDDjmwgcG\/Im2kgc2NoaW1iYSBvcmljw6JuZC4nLAogIGFwcGVhcnNBczpuPT5gQXBhcmkgY2EgPGI+JHtufTwvYj5gLCBvdGhlcnNSZWFkOidBU1RBIFZPUiBDSVRJIENFSUxBTMiaSScsIGNob29zZVNoYXJlOidBTEVHRSBDRSDDjk1QxIJSVMSCyJhFyJhUSScsCiAgcHJpdmFjeU5vdGU6J8OObmFpbnRlIHPEgyDDrm1wxINydMSDyJllyJl0aSwgdmVyaWZpY8SDIHPEgyBudSBhcGFyxIMgbnVtZSBzYXUgZGV0YWxpaSBkdXDEgyBjYXJlIGNpbmV2YSBwb2F0ZSBmaSByZWN1bm9zY3V0LicsCiAgd2l0aGRyYXdCdG46J1JldHJhZ2UgZGluIGNvbXVuaXRhdGUnLCBzaGFyZURvOifDjm1wxINydMSDyJllyJl0ZScsIG5hbWVTaG9ydDonQWxlZ2UgdW4gbnVtZSBkZSBjZWwgcHXIm2luIDIgbGl0ZXJlLicsIGNob29zZU9uZTonQWxlZ2UgY2VsIHB1yJtpbiB1biByw6JuZC4nLAogIHNoYXJlZFRvYXN0OifDjm1wxINydMSDyJlpdCBjdSBjb211bml0YXRlYScsIHdpdGhkcmF3bjonUmV0cmFzIGRpbiBjb211bml0YXRlJywgbmFtZVNhdmVkOidOdW1lIHNhbHZhdCcsCiAgbmFtZVNoZWV0Tm90ZTonTnUgdHJlYnVpZSBzxIMgZmllIG51bWVsZSB0xIN1IHJlYWwuIFNlIHNjaGltYsSDIMiZaSBsYSBjZSBhaSDDrm1wxINydMSDyJlpdCBkZWphLicsCiAgZmlyc3RROidDdW0gdnJlaSBzxIMgYXBhcmkgw65uIGNvbXVuaXRhdGU\/JywgZmlyc3ROb3RlOidBbGVnZSB1biBudW1lIGNhcmUgbnUgdHJlYnVpZSBzxIMgZmllIGNlbCByZWFsLiDDjmwgZm9sb3NlyJl0aSBkb2FyIGPDom5kIGFsZWdpIHPEgyDDrm1wxINydMSDyJllyJl0aSBjZXZhLiDDjmwgcG\/Im2kgc2NoaW1iYSBvcmljw6JuZC4nLAogIGxhdGVyOidNYWkgdMOicnppdScsIHdlbGNvbWU6bj0+YEJpbmUgYWkgdmVuaXQsICR7bn0hYCwgYXBpRmFpbDonTnUgcy1hIHB1dHV0IGZhY2UgbGVnxIN0dXJhIGN1IHNpdGUtdWwuJywKICBlcnI6eyBibG9jYXQ6J8OObXDEg3J0xIPImWlyZWEgbnUgbWFpIGVzdGUgZGlzcG9uaWJpbMSDIHBlbnRydSBjb250dWwgdMSDdS4nLCBmYXJhX251bWU6J0FsZWdlIG1haSDDrm50w6JpIHVuIG51bWUgcGVudHJ1IGNvbXVuaXRhdGUuJywgZ29sOidOdSBlc3RlIG5pbWljIGRlIMOubXDEg3J0xIPImWl0LicsCiAgICAgICAgcHJlYV9tdWx0ZTonQWkgw65tcMSDcnTEg8iZaXQgZGVqYSBtdWx0IGF6aS4gUmV2aW5vIG3DomluZS4nLCBsdWF0OidOdW1lbGUgYWNlc3RhIGUgZGVqYSBmb2xvc2l0LiBBbGVnZSBhbHR1bC4nLCBudW1lOidOdW1lbGUgdHJlYnVpZSBzxIMgYWlixIMgw65udHJlIDIgyJlpIDMwIGRlIGxpdGVyZS4nIH0KfTsKCi8qIC0tLS0tLS0tLS0gdGV4dGVsZSBwcmFjdGljaWxvcjogUm9tw6JuxIMgKHRleHRlbGUgb3JpZ2luYWxlIGFsZSBEb3JlbGVpKSAtLS0tLS0tLS0tICovCmNvbnN0IFRBSUxfUk9fUDEgPSAnyJhpIHBvYXRlIGPEgyBuaWNpIG51IMiZdGl1IMOubmPEgyBjZSBhbHRlIHNlbWluyJtlIGFtIHBsYW50YXQsIGN1IHNpZ3VyYW7Im8SDIG11bHRlIGFsdGVsZSBkZSBjYXJlIG51IMOubWkgYW1pbnRlc2MgYWN1bS4gT3JpY2UgYciZIGZpIGfDom5kaXQsIHJvc3RpdCBzYXUgZsSDY3V0LCB2cmVhdSBzxIMgZGV6YWN0aXZleiBhY3VtIGFjZXN0ZSBzZW1pbsibZS4nOwpUWC5ybyA9IHsKICB2b3dKb3k6WwogICAgJ0ZhYyBhY2VzdGUgbHVjcnVyaSBwZW50cnUgY8SDIHJlYWxpdGF0ZWEgw65taSBlc3RlIGRpY3RhdMSDIGRlIHNlbWluyJtlbGUgcGUgY2FyZSBsZSBwbGFudGV6LCBjYXJlIHNlIHByb2llY3RlYXrEgyBwZSBhYnNlbsibYSByZWFsaXTEg8ibaWkgY2FyZSB2aW5lIGRpbiBlYSDDrm5zxIPImWkuJywKICAgICdQZW50cnUgY8SDIGFtIHBsYW50YXQgYWNlc3RlIHNlbWluyJtlLCBwZSBjYXJlIGFjdW0gbGUgyJlpIHVkLCB2b2kgYXZlYSBzdWNjZXMuJywKICAgICdQZW50cnUgY8SDIGFtIHN1Y2NlcyBmb2xvc2luZCBhY2VzdCBzaXN0ZW0sIGPDosibaXZhIGRpbnRyZSBwcmlldGVuaWkgbWVpIMiZaSBjdW5vyJl0aW7Im2VsZSBtZWxlIG3EgyB2b3IgY29waWEgyJlpIHZvciBhdmVhIGxhIHLDom5kdWwgbG9yIHN1Y2Nlcy4gUGVudHJ1IGPEgyBlaSB2b3IgYXZlYSBzdWNjZXMgZm9sb3NpbmQgYWNlc3Qgc2lzdGVtLCBwcmlldGVuaWkgyJlpIGN1bm\/ImXRpbsibZWxlIGxvciDDrmkgdm9yIGNvcGlhIGxhIHLDom5kdWwgbG9yLicsCiAgICAnw45uIGFjZXN0IGZlbCwgcHJpbiBleGVtcGx1bCBtZXUsIGRlY2xhbsiZZXogbyByZWFjyJtpZSDDrm4gbGFuyJsgcHJpbiBjYXJlIGluc3BpciBtaWkgyJlpIG1paSBkZSBvYW1lbmkgc8SDIGZvbG9zZWFzY8SDIGFjZXN0IHNpc3RlbSDImWkgc8SDIGFpYsSDIHN1Y2Nlcy4nXSwKICB2b3dKb3lMYXN0OidDZWVhIGNlIHZhIGZhY2UgY2EgbHVtZWEgc8SDIGRldmluxIMgdW4gbG9jIG1haSBidW4gyJlpIG1haSBmcnVtb3MuJywKICBxSm95Onsgb2JpZWN0aXY6J09iaWVjdGl2dWwgcGVudHJ1IGNhcmUgZGVkaWMgYWNlYXN0xIMgbWVkaXRhyJtpZSBhIGJ1Y3VyaWVpJywgc2VtaW50ZTonQ2Ugc2VtaW7Im2UgYW0gcGxhbnRhdCcsCiAgICAgICAgIGFqdXRvcjonUGUgY2luZSDDrm1pIHByb3B1biBzxIMgYWp1dCAxIG9yxIMgcGUgc8SDcHTEg23Dom7Egz8gQ8OibmQgdnJlYXUgc8SDIGZhYyBhc3RhPyBDZSB2b2kgZmFjZSBwZW50cnUgYWNlYXN0xIMgcGVyc29hbsSDPycgfSwKICBwb3dlcnM6eyBwMTpbJ1B1dGVyZWEgMScsJ1JlYW1pbnRpcmVhIHBpeHVsdWknXSwgcDI6WydQdXRlcmVhIDInLCdSZWdyZXR1bCBpbnRlbGlnZW50J10sIHAzOlsnUHV0ZXJlYSAzJywnUmVzdHJpY8ibaWEnXSwgcDQ6WydQdXRlcmVhIDQnLCdBbnRpZG90dWwnXSB9LAogIHZvd1BvdzooKT0+WwogICAgJ0ZhYyBhY2VzdGUgbHVjcnVyaSBwZW50cnUgY8SDIHJlYWxpdGF0ZWEgZXN0ZSBkaWN0YXTEgyBkZSBzZW1pbsibZWxlIHBlIGNhcmUgbGUgcGxhbnRleiDImWkgc2UgcHJvaWVjdGVhesSDIHBlIGFic2VuyJthIHJlYWxpdMSDyJtpaSBjYXJlIHZpbmUgZGluIGVhIMOubnPEg8iZaS4nLAogICAgYERhY8SDIHBsYW50ZXogcG96aXRpdiwgc3VudCAke0coJ2ZvcsibYXTEgycsJ2ZvcsibYXQnKX0gc8SDIHBlcmNlcCBvIHJlYWxpdGF0ZSBwb3ppdGl2xIMsIGNoaWFyIGRhY8SDIGNlaSBkaW4ganVydWwgbWV1IG8gcGVyY2VwIGNhIGZpaW5kIG5lZ2F0aXbEgy4gRGFjxIMgcGxhbnRleiBuZWdhdGl2LCBzdW50ICR7RygnZm9yyJthdMSDJywnZm9yyJthdCcpfSBzxIMgcGVyY2VwIG8gcmVhbGl0YXRlIG5lZmF2b3JhYmlsxIMgbWllLCBjaGlhciBkYWPEgyBjZWkgZGluIGp1cnVsIG1ldSBvIHBlcmNlcCBjYSBmaWluZCBwb3ppdGl2xIMuYCwKICAgICdBc3RmZWwgYWxlZyBzxIMgcGxhbnRleiBzZW1pbsibZSBwb3ppdGl2ZS4nLAogICAgJ1BlbnRydSBjxIMgYW0gc3VjY2VzIGZvbG9zaW5kIGFjZXN0IHNpc3RlbSwgY8OiyJtpdmEgZGludHJlIHByaWV0ZW5paSBtZWkgyJlpIGN1bm\/ImXRpbsibZWxlIG1lbGUgbcSDIHZvciBjb3BpYSDImWkgdm9yIGF2ZWEgbGEgcsOibmR1bCBsb3Igc3VjY2VzLiBQZW50cnUgY8SDIGVpIHZvciBhdmVhIHN1Y2NlcywgcHJpZXRlbmlpIMiZaSBjdW5vyJl0aW7Im2VsZSBsb3Igw65pIHZvciBjb3BpYSDImWkgdm9yIGF2ZWEgc3VjY2VzLiddLAogIHZvd1Bvd0xhc3Q6J0FzdGZlbCwgbHVtZWEgZGV2aW5lIHVuIGxvYyBtYWkgYnVuIMiZaSBtYWkgZnJ1bW9zLicsCiAgcG93SGVhZDonQ0VMRSA0IFBVVEVSSScsIHBvd0hlYWRDYXNlOidDZWxlIDQgcHV0ZXJpJywKICB0aGVtZXM6eyAnQG1vbmV5JzonQmFuaScsICdAcmVsYXRpb25zaGlwcyc6J1JlbGHIm2lpJywgJ0BoZWFsdGgnOidTxINuxIN0YXRlJyB9LAogIGR1cjpbJzUgc2VjdW5kZScsJzEgbWludXQnLCc1IG1pbnV0ZScsJzEwIG1pbnV0ZScsJzEgb3LEgycsJ3RvYXTEgyB6aXVhJ10sCiAgZHVyQXBwZW5kOmQ9PmQ9PT0ndG9hdMSDIHppdWEnPyd0b2F0xIMgeml1YSc6J2NlbCBwdcibaW4gJytkLAogIGR1clN0cmlwOi9ccyooY2VsIHB1yJtpblxzKyk\/KDUgc2VjdW5kZXwxIG1pbnV0fDUgbWludXRlfDEwIG1pbnV0ZXwxIG9yxIN8dG9hdMSDIHppdWEpXHMqJC9pLAogIGxlYWQ6L15zxINccysvaSwKICB6aTp6PT56PT09J21haW5lJz8nbcOiaW5lJzonYXN0xIN6aScsCiAgdGFpbFAxOlRBSUxfUk9fUDEsCiAgdGFpbFAyOidNaS1hbSBmxINjdXQgcsSDdSBtaWUgyJlpIHBlcnNvYW5lbG9yIGRpbiBqdXIuIMOObWkgcGFyZSByxIN1IMiZaSB2cmVhdSBzxIMgZGV6YWN0aXZleiBjw6J0IG1haSByZXBlZGUgYWNlc3RlIHNlbWluyJtlLCBwcmVjdW0gyJlpIHRvYXRlIGxhbsibdXJpbGUgZGUgw65udMOibXBsxINyaSBjZSBkZWN1cmcgZGUgYWljaSwgcGVudHJ1IGPEgyDDrm7Im2VsZWcgYWN1bSBjxIMgc2UgZHVibGVhesSDIGxhIGZpZWNhcmUgMjQgZGUgb3JlIMiZaSBjdSBjw6J0IGxlIGRlemFjdGl2ZXogbWFpIHJlcGVkZSwgY3UgYXTDonQgZXN0ZSBtYWkgYmluZSEnLAogIG5pZ2h0OifImGkgZGlzZWFyxIMsIGRpbiBtb21lbnR1bCDDrm4gY2FyZSBwdW4gY2FwdWwgcGUgcGVybsSDIMiZaSBkb3JtLCBww6JuxIMgZGltaW5lYcibxIMgY8OibmQgbcSDIHRyZXplc2MsIMOubiBtb2QgY29uyJl0aWVudC4nLAogIHN0ZDp7CiAgICBwMjp7IGZvcm06KCk9PltbJ3QnLCdDZSBiZW5lZmljaWkgYW0gYXZ1dCddLFsncDInLCdiZW5lZmljaWkgbWF0ZXJpYWxlIHNhdSBkZSBlZ28nXV0sCiAgICAgICAgIHJlY2FwOmU9PmBEaW4gbml2ZWx1bCBkZSBjb27ImXRpZW7Im8SDIGRpbiBhY2XImXRpIGFuaSDDrm4gY2FyZSBhbSBnw6JuZGl0IC8gcm9zdGl0IC8gZsSDY3V0IGFjZXN0ZSBsdWNydXJpLCBhdMOidCBhbSDImXRpdXQgc8SDIGZhYy4gQ3Ugc2lndXJhbsibxIMgYW0gYXZ1dCBiZW5lZmljaWkgbWF0ZXJpYWxlIHNhdSBkZSBlZ286ICR7bWsoZS5wMil9LiDImGkgcG9hdGUgY8SDIGFtIGF2dXQgyJlpIGFsdGUgYmVuZWZpY2lpIGRlIGNhcmUgYWN1bSBudSDDrm1pIGFtaW50ZXNjLiDDjm1pIGRhdSBzZWFtYSBhY3VtIGPEgyBhbSBwbMSDdGl0IMiZaSBwbMSDdGVzYyB1biBwcmXImyBtdWx0IHByZWEgbWFyZSBwZW50cnUgdG9hdGUgYWNlc3RlIGJlbmVmaWNpaS4gJHt0eCgpLnRhaWxQMn1gIH0sCiAgICBwMzp7IGZvcm06KCk9PltbJ3QnLCdQcm9taXTigKYnXSxbJ3AzJywnY2UgcHJvbWl0IHPEgyBudSBtYWkgZmFjIMiZaSBjw6J0IHRpbXAsIGRlIGV4ZW1wbHU6IHPEgyBudSBtYWkg4oCmIGNlbCBwdcibaW4gMSBtaW51dCddLFsnZHVyJywnYWRkJ11dLAogICAgICAgICByZWNhcDplPT5gUHJvbWl0ICR7bWsoZS5wMyl9LiAke3R4KCkubmlnaHR9YCB9LAogICAgcDQ6eyBmb3JtOigpPT5bWyd6aSddLFsndCcsYCR7cERyYWZ0LnppPT09J21haW5lJz8nTcOiaW5lJzonQXN0xIN6aSd9IHByb21pdCBzxIPigKZgXSxbJ3A0JywnY2UgZmFjLCBjYSBzxINtw6JuyJvEgyBvcHVzxIMgY2VsZWkgcGUgY2FyZSB2cmVhdSBzxIMgbyBkZXphY3RpdmV6J11dLAogICAgICAgICByZWNhcDplPT5gQ2EgyJlpIGdlc3QgY29tcGVuc2F0b3IsIGRlZGljIGZhcHR1bCBjxIMgw65uyJtlbGVnIGFjdW0gY8SDIHJlYWxpdGF0ZWEgcGUgY2FyZSBvIGV4cGVyaW1lbnRleiB2aW5lIGRpbiBzZW1pbsibZWxlIG1lbGUgcGxhbnRhdGUgw65uIHRyZWN1dCwgY2FyZSBzZSBwcm9pZWN0ZWF6xIMgcGUgYWJzZW7Im2EgcmVhbGl0xIPIm2lpIGNhcmUgdmluZSBkaW4gZWEgw65uc8SDyJlpLCDImWkgJHt0eCgpLnppKGUuemkpfSBwcm9taXQgc8SDICR7bWsobm9MZWFkKGUucDQpKX0uYCB9CiAgfSwKICBwdjp7CiAgICAxOnsgbmFtZTooKT0+YENlIHN1bnQgJHtHKCdmb3LIm2F0xIMnLCdmb3LIm2F0Jyl9IHPEgyBleHBlcmltZW50ZXpgLAogICAgICAgIHAxOnsgZm9ybTooKT0+W1sndCcsYFN1bnQgJHtHKCdmb3LIm2F0xIMnLCdmb3LIm2F0Jyl9IHPEgyBleHBlcmltZW50ZXogw65uIHJlYWxpdGF0ZWEgbWVh4oCmYF0sWydwMWEnLCdjZSBleHBlcmltZW50ZXogYWN1bSddLAogICAgICAgICAgICAgICAgICAgICAgIFsndCcsJ+KApmRhdG9yaXTEgyBnw6JuZHVyaWxvciwgdm9yYmVsb3IsIGZhcHRlbG9yIGRpbiB0cmVjdXR1bCBtZXUsIGRpbiBhY2Vhc3TEgyB2aWHIm8SDIHNhdSBkaW50ci1vIHZpYcibxIMgYW50ZXJpb2FyxIMsIGF0dW5jaSBjw6JuZOKApiddLFsncDFiJywnY2Ugc2VtaW7Im2UgYW0gcGxhbnRhdCddXSwKICAgICAgICAgICAgIHJlY2FwOmU9PmBTdW50ICR7RygnZm9yyJthdMSDJywnZm9yyJthdCcpfSBzxIMgZXhwZXJpbWVudGV6IMOubiByZWFsaXRhdGVhIG1lYSAke21rKGUucDFhKX0gZGF0b3JpdMSDIGfDom5kdXJpbG9yLCB2b3JiZWxvciwgZmFwdGVsb3IgZGluIHRyZWN1dHVsIG1ldSwgZGluIGFjZWFzdMSDIHZpYcibxIMgc2F1IGRpbnRyLW8gdmlhyJvEgyBhbnRlcmlvYXLEgywgYXR1bmNpIGPDom5kICR7bWsoZS5wMWIpfS4gJHt0eCgpLnRhaWxQMX1gIH0gfSwKICAgIDI6eyBuYW1lOigpPT4nQ2Ugc2VtaW7Im2UgdnJlYXUgc8SDIGN1csSDyJsnLAogICAgICAgIHAxOnsgZm9ybTooKT0+W1sndCcsJ1ZyZWF1IHPEgyBkZXphY3RpdmV6IHNlbWluyJtlbGUgcGxhbnRhdGUgYXR1bmNpIGPDom5k4oCmJ10sWydwMWInLCdjZSBhbSBnw6JuZGl0LCByb3N0aXQgc2F1IGbEg2N1dCddXSwKICAgICAgICAgICAgIHJlY2FwOmU9PmBWcmVhdSBzxIMgZGV6YWN0aXZleiBzZW1pbsibZWxlIHBsYW50YXRlIGF0dW5jaSBjw6JuZCAke21rKGUucDFiKX0sIHBlbnRydSBjxIMgZWxlIHNlIGR1YmxlYXrEgyBsYSBmaWVjYXJlIDI0IGRlIG9yZSDImWkgbnUgbWFpIHZyZWF1IHPEgyBjcmVhc2PEgyBhY2VzdGUgc2VtaW7Im2UuIE1haSBtdWx0LCBwb2F0ZSBjxIMgYW0gcGxhbnRhdCDImWkgYWx0ZSBzZW1pbsibZSBkZSBjYXJlIG51IMOubWkgYW1pbnRlc2MgYWN1bS4gT3JpY2UgYciZIGZpIGfDom5kaXQsIHJvc3RpdCBzYXUgZsSDY3V0LCB2cmVhdSBzxIMgZGV6YWN0aXZleiBhY3VtIGFjZXN0ZSBzZW1pbsibZS5gIH0gfSwKICAgIDM6eyBuYW1lOigpPT4nQ3VyxIPImyBvIGVtb8ibaWUnLAogICAgICAgIHAxOnsgZm9ybTooKT0+W1sndCcsJ1ZyZWF1IHPEgyBjdXLEg8ibIHNlbWluyJtlbGUgZGXigKYnXSxbJ3AxZScsJ2Vtb8ibaWEgc2F1IHRpcGFydWw6IGZ1cmllLCBpbnZpZGllLCBmcmljxIPigKYnXSwKICAgICAgICAgICAgICAgICAgICAgICBbJ3QnLCfigKZwbGFudGF0ZSBjdSBnw6JuZHVyaSwgdm9yYmUsIGZhcHRlIMOubiB0cmVjdXR1bCBtZXUsIGRpbiBhY2Vhc3TEgyB2aWHIm8SDIHNhdSBkaW50ci1vIHZpYcibxIMgYW50ZXJpb2FyxIMsIGNhcmUgbcSDIGZvcsibZWF6xIMgc8SDIGV4cGVyaW1lbnRleuKApiddLFsncDFhJywnc2l0dWHIm2lhIHBlIGNhcmUgbyB0csSDaWVzYyddLAogICAgICAgICAgICAgICAgICAgICAgIFsndCcsJ0F0dW5jaSBjw6JuZOKApiddLFsncDFiJywnY2UgY3JlZCBjxIMgYW0gcGxhbnRhdCddXSwKICAgICAgICAgICAgIHJlY2FwOmU9PmBWcmVhdSBzxIMgY3VyxIPImyBzZW1pbsibZWxlIGRlICR7bWsoZS5wMWUpfSBwbGFudGF0ZSBjdSBnw6JuZHVyaSwgdm9yYmUsIGZhcHRlIMOubiB0cmVjdXR1bCBtZXUsIGRpbiBhY2Vhc3TEgyB2aWHIm8SDIHNhdSBkaW50ci1vIHZpYcibxIMgYW50ZXJpb2FyxIMsIGNhcmUgbcSDIGZvcsibZWF6xIMgc8SDIGV4cGVyaW1lbnRleiAke21rKGUucDFhKX0uIEF0dW5jaSBjw6JuZCAke21rKGUucDFiKX0uICR7dHgoKS50YWlsUDF9YCB9IH0sCiAgICA0OnsgbmFtZTooKT0+J051IMiZdGl1IGNlIHNlbWluyJtlIGFtIHBsYW50YXQnLAogICAgICAgIHAxOnsgZm9ybTooKT0+W1sndCcsJ0hhYmFyIG51IGFtIGNlIGFtIHB1dHV0IHPEgyBwbGFudGV6IGNhIHPEgyBleHBlcmltZW50ZXogYWNlYXN0xIMgc2l0dWHIm2llOiddLFsncDFhJywnc2l0dWHIm2lhIHBlIGNhcmUgbyB0csSDaWVzYyddXSwKICAgICAgICAgICAgIHJlY2FwOmU9PmBIYWJhciBudSBhbSBjZSBhbSBwdXR1dCBzxIMgcGxhbnRleiBjYSBzxIMgZXhwZXJpbWVudGV6IGFjZWFzdMSDIHNpdHVhyJtpZTogJHttayhlLnAxYSl9LiBEYXIgw65uyJtlbGVnIGFjdW0gY8SDLCBkYWPEgyBudSBhyJkgZmkgcGxhbnRhdCBzZW1pbsibZWxlLCBhY2Vhc3TEgyBzaXR1YcibaWUgbnUgYXIgZmkgw65uIHJlYWxpdGF0ZWEgbWVhLiBWcmVhdSBzxIMgZGV6YWN0aXZleiBzZW1pbsibZWxlIHBsYW50YXRlIGFjdW0uYCB9LAogICAgICAgIHAyOnsgZm9ybTooKT0+W1sndCcsJ0RhY8SDIMOubWkgdmluIMOubiBtaW50ZSBjw6J0ZXZhIGJlbmVmaWNpaSAob3DIm2lvbmFsKSddLFsncDInLCdwb8ibaSBsxINzYSBnb2wnXV0sCiAgICAgICAgICAgICByZWNhcDplPT5gQ3Ugc2lndXJhbsibxIMgYW0gYXZ1dCBiZW5lZmljaWksIGNoaWFyIGRhY8SDIG51IMiZdGl1IGNlIHNlbWluyJtlIGFtIHBsYW50YXQgyJlpIGNlIGJlbmVmaWNpaSBhbSBhdnV0LiAke1N0cmluZyhlLnAyfHwnJykudHJpbSgpID8gYFBvYXRlIGPEgyAke21rKGUucDIpfSwgyJlpIHNpZ3VyIHN1bnQgyJlpIGFsdGUgYmVuZWZpY2lpIHBlIGNhcmUgYW0gcHV0dXQgc8SDIGxlIGFtLmAgOiAnU2lndXIgc3VudCBiZW5lZmljaWkgcGUgY2FyZSBhbSBwdXR1dCBzxIMgbGUgYW0uJ30gJHt0eCgpLnRhaWxQMn1gIH0sCiAgICAgICAgcDM6eyBmb3JtOigpPT5bWyd0JywnUHJvbWl0IHPEgyBudSBtYWkgcGxhbnRleiBhY2VsZWHImWkgc2VtaW7Im2UgcGVudHJ1IGNlbCBwdcibaW7igKYnXSxbJ3AzJywnY8OidCB0aW1wLCBkZSBleGVtcGx1OiAxIG9yxIMnXSxbJ2R1cicsJ3NldCddXSwKICAgICAgICAgICAgIHJlY2FwOmU9PmBQcm9taXQgc8SDIG51IG1haSBwbGFudGV6IHBlbnRydSBjZWwgcHXIm2luICR7bWsoZS5wMyl9IGFjZWxlYciZaSBzZW1pbsibZS4gJHt0eCgpLm5pZ2h0fWAgfSwKICAgICAgICBwNDp7IGZvcm06KCk9PltbJ3ppJ10sWyd0JyxgQ2EgyJlpIGdlc3QgY29tcGVuc2F0b3IsICR7cERyYWZ0LnppPT09J21haW5lJz8nbcOiaW5lJzonYXN0xIN6aSd9IHByb21pdCBzxIPigKZgXSxbJ3A0JywnY2UgZmFjJ11dLAogICAgICAgICAgICAgcmVjYXA6ZT0+YENhIMiZaSBnZXN0IGNvbXBlbnNhdG9yLCAke3R4KCkuemkoZS56aSl9IHByb21pdCBzxIMgJHttayhub0xlYWQoZS5wNCkpfS5gIH0gfQogIH0KfTsKCi8qIC0tLS0tLS0tLS0gZXhhbXBsZSBwb3N0cyBmb3IgdGhlIHRlc3QgdmVyc2lvbiwgb25lIHNldCBwZXIgbGFuZ3VhZ2UgLS0tLS0tLS0tLSAqLwpjb25zdCBERU1PX0wgPSB7CiAgZW46WwogICAge2lkOidkMScsbmFtZTonTGluZGVuIEJsb3Nzb20nLGdlbjonZicsdHlwZToncmVjdW5vc3RpbnRlJyxkYXRlOicyMDI2LTEwLTA3VDE5OjQwOjAwWicscmVhY3RzOjE0LGl0ZW1zOlt7azonc3VjY2VzJyx0OidmaW5pc2hpbmcgdGhlIHByb2plY3QgSSB3b3JrZWQgb24gZm9yIGEgbW9udGgsIGJlZm9yZSB0aGUgZGVhZGxpbmUnfSx7azoncmVjdW5vc3RpbnRhJyx0Oid0aGUgcGF0aWVuY2Ugb2YgbXkgY29sbGVhZ3VlIHdobyBoZWxwZWQgbWUnfV19LAogICAge2lkOidkMicsbmFtZTonQW5kcmV3X00nLGdlbjonbScsdHlwZTonYnVjdXJpZScsZGF0ZTonMjAyNi0xMC0wN1QwNzoxNTowMFonLHJlYWN0czo5LHE6e29iaWVjdGl2OidBIGhhcm1vbmlvdXMgcmVsYXRpb25zaGlwIHdpdGggbXkgc29uJyxzZW1pbnRlOidJIGxpc3RlbmVkIHRvIGhpbSB3aXRob3V0IGludGVycnVwdGluZyBhbmQgc3BlbnQgYW4gaG91ciBqdXN0IHdpdGggaGltLCB3aXRob3V0IG15IHBob25lLid9fSwKICAgIHtpZDonZDMnLG5hbWU6J0xpZ2h0JyxnZW46J2YnLHR5cGU6J3B1dGVyaScsZGF0ZTonMjAyNi0xMC0wNlQyMTowNTowMFonLHJlYWN0czo2LHY6Mix6aTonbWFpbmUnLHRlbWE6J0Btb25leScscDFiOidJIHNwb2tlIHdpdGggZW52eSBhYm91dCBhIGZyaWVuZOKAmXMgc3VjY2VzcycscDI6J0kgZmVsdCBiZXR0ZXIgdGhhbiBoZXIgZm9yIGEgZmV3IG1pbnV0ZXMnLHAzOidub3QgdG8gdGFsayBhYm91dCBvdGhlcnMgYmVoaW5kIHRoZWlyIGJhY2tzIGZvciBhdCBsZWFzdCAxIGhvdXInLHA0OidzaW5jZXJlbHkgY29uZ3JhdHVsYXRlIG15IGZyaWVuZCd9LAogICAge2lkOidkNCcsbmFtZTonTWFyeSBmcm9tIHRoZSBoaWxscycsZ2VuOidmJyx0eXBlOidyZWN1bm9zdGludGUnLGRhdGU6JzIwMjYtMTAtMDZUMDg6MzA6MDBaJyxyZWFjdHM6MjEsaXRlbXM6W3trOidyZWN1bm9zdGludGEnLHQ6J215IHF1aWV0IG1vcm5pbmcgY29mZmVlJ30se2s6J3JlY3Vub3N0aW50YScsdDonbXkgbW90aGVyLCB3aG8gY2FsbGVkIGp1c3QgdG8gYXNrIGhvdyBJIHdhcyd9LHtrOidzdWNjZXMnLHQ6J21lZGl0YXRpbmcgMTAgZGF5cyBpbiBhIHJvdyd9XX0sCiAgICB7aWQ6J2Q1JyxuYW1lOidTZXJlbmUnLGdlbjonbScsdHlwZToncHV0ZXJpJyxkYXRlOicyMDI2LTEwLTA1VDE4OjIwOjAwWicscmVhY3RzOjQsdjo0LHppOidhemknLHRlbWE6J0BoZWFsdGgnLHAxYTonYmFjayBwYWluIHRoYXQga2VlcHMgY29taW5nIGJhY2snLHAyOicnLHAzOicxIGhvdXInLHA0OidoZWxwIGFuIGVsZGVybHkgbmVpZ2hib3VyIGNhcnJ5IGhpcyBzaG9wcGluZyd9XSwKICBmcjpbCiAgICB7aWQ6J2QxJyxuYW1lOidGbGV1ciBkZSB0aWxsZXVsJyxnZW46J2YnLHR5cGU6J3JlY3Vub3N0aW50ZScsZGF0ZTonMjAyNi0xMC0wN1QxOTo0MDowMFonLHJlYWN0czoxNCxpdGVtczpbe2s6J3N1Y2NlcycsdDonYXZvaXIgdGVybWluw6kgYXZhbnQgbOKAmcOpY2jDqWFuY2UgbGUgcHJvamV0IHN1ciBsZXF1ZWwgauKAmWFpIHRyYXZhaWxsw6kgdW4gbW9pcyd9LHtrOidyZWN1bm9zdGludGEnLHQ6J2xhIHBhdGllbmNlIGRlIG1hIGNvbGzDqGd1ZSBxdWkgbeKAmWEgYWlkw6llJ31dfSwKICAgIHtpZDonZDInLG5hbWU6J0FuZHLDqV9NJyxnZW46J20nLHR5cGU6J2J1Y3VyaWUnLGRhdGU6JzIwMjYtMTAtMDdUMDc6MTU6MDBaJyxyZWFjdHM6OSxxOntvYmllY3RpdjonVW5lIHJlbGF0aW9uIGhhcm1vbmlldXNlIGF2ZWMgbW9uIGZpbHMnLHNlbWludGU6J0plIGzigJlhaSDDqWNvdXTDqSBzYW5zIGzigJlpbnRlcnJvbXByZSBldCBq4oCZYWkgcGFzc8OpIHVuZSBoZXVyZSBzZXVsZW1lbnQgYXZlYyBsdWksIHNhbnMgdMOpbMOpcGhvbmUuJ319LAogICAge2lkOidkMycsbmFtZTonTHVtacOocmUnLGdlbjonZicsdHlwZToncHV0ZXJpJyxkYXRlOicyMDI2LTEwLTA2VDIxOjA1OjAwWicscmVhY3RzOjYsdjoyLHppOidtYWluZScsdGVtYTonQG1vbmV5JyxwMWI6J2rigJlhaSBwYXJsw6kgYXZlYyBlbnZpZSBkdSBzdWNjw6hzIGTigJl1bmUgYW1pZScscDI6J2plIG1lIHN1aXMgc2VudGllIHN1cMOpcmlldXJlIMOgIGVsbGUgcGVuZGFudCBxdWVscXVlcyBtaW51dGVzJyxwMzonZGUgbmUgcGx1cyBwYXJsZXIgZGVzIGF1dHJlcyBkYW5zIGxldXIgZG9zIHBlbmRhbnQgYXUgbW9pbnMgMSBoZXVyZScscDQ6J2bDqWxpY2l0ZXIgc2luY8OocmVtZW50IG1vbiBhbWllJ30sCiAgICB7aWQ6J2Q0JyxuYW1lOidNYXJpZSBkZSBMeW9uJyxnZW46J2YnLHR5cGU6J3JlY3Vub3N0aW50ZScsZGF0ZTonMjAyNi0xMC0wNlQwODozMDowMFonLHJlYWN0czoyMSxpdGVtczpbe2s6J3JlY3Vub3N0aW50YScsdDonbW9uIGNhZsOpIGR1IG1hdGluIGF1IGNhbG1lJ30se2s6J3JlY3Vub3N0aW50YScsdDonbWEgbcOocmUsIHF1aSBt4oCZYSBhcHBlbMOpZSBqdXN0ZSBwb3VyIHNhdm9pciBjb21tZW50IGrigJlhbGxhaXMnfSx7azonc3VjY2VzJyx0Oidhdm9pciBtw6lkaXTDqSAxMCBqb3VycyBkZSBzdWl0ZSd9XX0sCiAgICB7aWQ6J2Q1JyxuYW1lOidTZXJlaW4nLGdlbjonbScsdHlwZToncHV0ZXJpJyxkYXRlOicyMDI2LTEwLTA1VDE4OjIwOjAwWicscmVhY3RzOjQsdjo0LHppOidhemknLHRlbWE6J0BoZWFsdGgnLHAxYTondW4gbWFsIGRlIGRvcyBxdWkgcmV2aWVudCcscDI6JycscDM6JzEgaGV1cmUnLHA0OidhaWRlciB1biB2b2lzaW4gw6Jnw6kgw6AgcG9ydGVyIHNlcyBjb3Vyc2VzJ31dLAogIGl0OlsKICAgIHtpZDonZDEnLG5hbWU6J0Zpb3JlIGRpIHRpZ2xpbycsZ2VuOidmJyx0eXBlOidyZWN1bm9zdGludGUnLGRhdGU6JzIwMjYtMTAtMDdUMTk6NDA6MDBaJyxyZWFjdHM6MTQsaXRlbXM6W3trOidzdWNjZXMnLHQ6J2F2ZXIgZmluaXRvIHByaW1hIGRlbGxhIHNjYWRlbnphIGlsIHByb2dldHRvIHN1IGN1aSBobyBsYXZvcmF0byB1biBtZXNlJ30se2s6J3JlY3Vub3N0aW50YScsdDonbGEgcGF6aWVuemEgZGVsbGEgY29sbGVnYSBjaGUgbWkgaGEgYWl1dGF0YSd9XX0sCiAgICB7aWQ6J2QyJyxuYW1lOidBbmRyZWFfTScsZ2VuOidtJyx0eXBlOididWN1cmllJyxkYXRlOicyMDI2LTEwLTA3VDA3OjE1OjAwWicscmVhY3RzOjkscTp7b2JpZWN0aXY6J1VuYSByZWxhemlvbmUgYXJtb25pb3NhIGNvbiBtaW8gZmlnbGlvJyxzZW1pbnRlOidM4oCZaG8gYXNjb2x0YXRvIHNlbnphIGludGVycm9tcGVybG8gZSBobyBwYXNzYXRvIHVu4oCZb3JhIHNvbG8gY29uIGx1aSwgc2VuemEgdGVsZWZvbm8uJ319LAogICAge2lkOidkMycsbmFtZTonTHVjZScsZ2VuOidmJyx0eXBlOidwdXRlcmknLGRhdGU6JzIwMjYtMTAtMDZUMjE6MDU6MDBaJyxyZWFjdHM6Nix2OjIsemk6J21haW5lJyx0ZW1hOidAbW9uZXknLHAxYjonaG8gcGFybGF0byBjb24gaW52aWRpYSBkZWwgc3VjY2Vzc28gZGkgdW7igJlhbWljYScscDI6J21pIHNvbm8gc2VudGl0YSBzdXBlcmlvcmUgYSBsZWkgcGVyIHF1YWxjaGUgbWludXRvJyxwMzonZGkgbm9uIHBhcmxhcmUgcGnDuSBkZWdsaSBhbHRyaSBhbGxlIGxvcm8gc3BhbGxlIHBlciBhbG1lbm8gMSBvcmEnLHA0OidmYXJlIHNpbmNlcmFtZW50ZSBpIGNvbXBsaW1lbnRpIGFsbGEgbWlhIGFtaWNhJ30sCiAgICB7aWQ6J2Q0JyxuYW1lOidNYXJpYSBkYSBVZGluZScsZ2VuOidmJyx0eXBlOidyZWN1bm9zdGludGUnLGRhdGU6JzIwMjYtMTAtMDZUMDg6MzA6MDBaJyxyZWFjdHM6MjEsaXRlbXM6W3trOidyZWN1bm9zdGludGEnLHQ6J2lsIGNhZmbDqCBkZWwgbWF0dGlubyBpbiBzaWxlbnppbyd9LHtrOidyZWN1bm9zdGludGEnLHQ6J21pYSBtYWRyZSwgY2hlIG1pIGhhIGNoaWFtYXRhIHNvbG8gcGVyIGNoaWVkZXJtaSBjb21lIHN0YXZvJ30se2s6J3N1Y2NlcycsdDonYXZlciBtZWRpdGF0byAxMCBnaW9ybmkgZGkgZmlsYSd9XX0sCiAgICB7aWQ6J2Q1JyxuYW1lOidTZXJlbm8nLGdlbjonbScsdHlwZToncHV0ZXJpJyxkYXRlOicyMDI2LTEwLTA1VDE4OjIwOjAwWicscmVhY3RzOjQsdjo0LHppOidhemknLHRlbWE6J0BoZWFsdGgnLHAxYTondW4gbWFsIGRpIHNjaGllbmEgY2hlIHJpdG9ybmEnLHAyOicnLHAzOicxIG9yYScscDQ6J2FpdXRhcmUgdW4gdmljaW5vIGFuemlhbm8gYSBwb3J0YXJlIGxhIHNwZXNhJ31dCn07CgpERU1PX0wucm8gPSBbCiB7aWQ6J2QxJyxuYW1lOidGbG9hcmUgZGUgdGVpJyxnZW46J2YnLHR5cGU6J3JlY3Vub3N0aW50ZScsZGF0ZTonMjAyNi0xMC0wN1QxOTo0MDowMFonLHJlYWN0czoxNCxpdGVtczpbe2s6J3N1Y2NlcycsdDonYW0gdGVybWluYXQgcHJvaWVjdHVsIGxhIGNhcmUgYW0gbHVjcmF0IG8gbHVuxIMsIMOubmFpbnRlIGRlIHRlcm1lbid9LHtrOidyZWN1bm9zdGludGEnLHQ6J3LEg2JkYXJlYSBjb2xlZ2VpIG1lbGUgY2FyZSBtLWEgYWp1dGF0J31dfSwKIHtpZDonZDInLG5hbWU6J0FuZHJlaV9NJyxnZW46J20nLHR5cGU6J2J1Y3VyaWUnLGRhdGU6JzIwMjYtMTAtMDdUMDc6MTU6MDBaJyxyZWFjdHM6OSxxOntvYmllY3RpdjonTyByZWxhyJtpZSBhcm1vbmlvYXPEgyBjdSBmaXVsIG1ldScsc2VtaW50ZTonTC1hbSBhc2N1bHRhdCBmxINyxIMgc8SDLWwgw65udHJlcnVwIMiZaSBhbSBwZXRyZWN1dCBvIG9yxIMgZG9hciBjdSBlbCwgZsSDcsSDIHRlbGVmb24uJ319LAoge2lkOidkMycsbmFtZTonTHVtaW5hJyxnZW46J2YnLHR5cGU6J3B1dGVyaScsZGF0ZTonMjAyNi0xMC0wNlQyMTowNTowMFonLHJlYWN0czo2LHY6Mix6aTonbWFpbmUnLHRlbWE6J0Btb25leScscDFiOidhbSB2b3JiaXQgY3UgaW52aWRpZSBkZXNwcmUgc3VjY2VzdWwgdW5laSBwcmlldGVuZScscDI6J20tYW0gc2ltyJtpdCBtYWkgYnVuxIMgZGVjw6J0IGVhIHBlbnRydSBjw6J0ZXZhIG1pbnV0ZScscDM6J3PEgyBudSBtYWkgdm9yYmVzYyBkZXNwcmUgYWzIm2lpIHBlIGxhIHNwYXRlIGNlbCBwdcibaW4gMSBvcsSDJyxwNDonbyBmZWxpY2l0IHNpbmNlciBwZSBwcmlldGVuYSBtZWEnfSwKIHtpZDonZDQnLG5hbWU6J01hcmlhIGRpbiBDbHVqJyxnZW46J2YnLHR5cGU6J3JlY3Vub3N0aW50ZScsZGF0ZTonMjAyNi0xMC0wNlQwODozMDowMFonLHJlYWN0czoyMSxpdGVtczpbe2s6J3JlY3Vub3N0aW50YScsdDonY2FmZWF1YSBkZSBkaW1pbmVhyJvEgyDDrm4gbGluaciZdGUnfSx7azoncmVjdW5vc3RpbnRhJyx0OidtYW1hLCBjYXJlIG0tYSBzdW5hdCBkb2FyIGNhIHPEgyBtxIMgw65udHJlYmUgY2UgZmFjJ30se2s6J3N1Y2NlcycsdDonYW0gbWVkaXRhdCAxMCB6aWxlIGxhIHLDom5kJ31dfSwKIHtpZDonZDUnLG5hbWU6J1NlbmluJyxnZW46J20nLHR5cGU6J3B1dGVyaScsZGF0ZTonMjAyNi0xMC0wNVQxODoyMDowMFonLHJlYWN0czo0LHY6NCx6aTonYXppJyx0ZW1hOidAaGVhbHRoJyxwMWE6J2R1cmVyaSBkZSBzcGF0ZSBjYXJlIHJldmluJyxwMjonJyxwMzonMSBvcsSDJyxwNDonYWp1dCB1biB2ZWNpbiDDrm4gdsOicnN0xIMgc8SDLciZaSBjYXJlIGN1bXDEg3LEg3R1cmlsZSd9XTsKLyogZWFjaCBleGFtcGxlIHBvc3Qga25vd3MgaXRzIGxhbmd1YWdlIChpZHMgbWFkZSB1bmlxdWUgYWNyb3NzIGxhbmd1YWdlcykgKi8KT2JqZWN0LmtleXMoREVNT19MKS5mb3JFYWNoKGw9PkRFTU9fTFtsXS5mb3JFYWNoKHA9PnsgcC5sYW5nPWw7IHAuaWQ9bCsnLScrcC5pZCB9KSk7Ci8qIGZpbHRlciB0ZXh0cyBmb3IgdGhlIGNvbW11bml0eTogb25seSBteSBsYW5ndWFnZSAvIGFsbCBsYW5ndWFnZXMgKi8KT2JqZWN0LmFzc2lnbihVSS5lbix7IGxhbmdPbmx5OidPbmx5IGluIEVuZ2xpc2gnLCBsYW5nQWxsOidBbGwgbGFuZ3VhZ2VzJywgY29tbUVtcHR5TGFuZzonTm90aGluZyBpbiBFbmdsaXNoIHlldC4nIH0pOwpPYmplY3QuYXNzaWduKFVJLmZyLHsgbGFuZ09ubHk6J1NldWxlbWVudCBlbiBmcmFuw6dhaXMnLCBsYW5nQWxsOidUb3V0ZXMgbGVzIGxhbmd1ZXMnLCBjb21tRW1wdHlMYW5nOidSaWVuIGVuIGZyYW7Dp2FpcyBwb3VyIGzigJlpbnN0YW50LicgfSk7Ck9iamVjdC5hc3NpZ24oVUkuaXQseyBsYW5nT25seTonU29sbyBpbiBpdGFsaWFubycsIGxhbmdBbGw6J1R1dHRlIGxlIGxpbmd1ZScsIGNvbW1FbXB0eUxhbmc6J0FuY29yYSBuaWVudGUgaW4gaXRhbGlhbm8uJyB9KTsKT2JqZWN0LmFzc2lnbihVSS5ybyx7IGxhbmdPbmx5OidEb2FyIMOubiByb23Dom7EgycsIGxhbmdBbGw6J1RvYXRlIGxpbWJpbGUnLCBjb21tRW1wdHlMYW5nOifDjm5jxIMgbnUgZSBuaW1pYyDDrm4gcm9tw6JuxIMuJyB9KTsKCi8qID09PT09PT09PT09PSBTYXZpbmc6IHRvIHRoZSBhY2NvdW50IG9uIHRoZSBzaXRlLCBvciBvbiB0aGlzIGRldmljZSBpbiB0aGUgdGVzdCB2ZXJzaW9uID09PT09PT09PT09PSAqLwpjb25zdCBMU19LRVkgPSAnZ29vZC1zZWVkcy12MSc7CmNvbnN0IFN0b3JlID0gewogIGFzeW5jIGxvYWQoKXsKICAgIGlmIChDT05GSUcuYXBpKXsKICAgICAgY29uc3QgciA9IGF3YWl0IGZldGNoKENPTkZJRy5hcGkucm9vdCArICdncmFkaW5hL3YxL2RhdGEnLCB7Y3JlZGVudGlhbHM6J3NhbWUtb3JpZ2luJywgaGVhZGVyczp7J1gtV1AtTm9uY2UnOkNPTkZJRy5hcGkubm9uY2V9fSk7CiAgICAgIGlmICghci5vaykgdGhyb3cgbmV3IEVycm9yKCdsb2FkJyk7IGNvbnN0IGQgPSBhd2FpdCByLmpzb24oKTsKICAgICAgaWYgKGQpIHJldHVybiBkOwogICAgICB0cnkgeyBjb25zdCBsb2MgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExTX0tFWSkpOyBpZiAobG9jKXsgc2V0VGltZW91dCgoKT0+U3RvcmUuc2F2ZShsb2MpLDApOyByZXR1cm4gbG9jIH0gfSBjYXRjaChlKXt9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgdHJ5IHsgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTFNfS0VZKSkgfHwgbnVsbCB9IGNhdGNoKGUpeyByZXR1cm4gbnVsbCB9CiAgfSwKICBhc3luYyBzYXZlKGRhdGEpewogICAgaWYgKENPTkZJRy5hcGkpewogICAgICBjb25zdCByID0gYXdhaXQgZmV0Y2goQ09ORklHLmFwaS5yb290ICsgJ2dyYWRpbmEvdjEvZGF0YScsIHttZXRob2Q6J1BPU1QnLCBjcmVkZW50aWFsczonc2FtZS1vcmlnaW4nLAogICAgICAgIGhlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi9qc29uJywnWC1XUC1Ob25jZSc6Q09ORklHLmFwaS5ub25jZX0sIGJvZHk6SlNPTi5zdHJpbmdpZnkoZGF0YSl9KTsKICAgICAgaWYgKCFyLm9rKSB0aHJvdyBuZXcgRXJyb3IoJ3NhdmUnKTsgcmV0dXJuOwogICAgfQogICAgdHJ5IHsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTFNfS0VZLCBKU09OLnN0cmluZ2lmeShkYXRhKSkgfSBjYXRjaChlKXt9CiAgfQp9OwpsZXQgREFUQSA9IHsgZW50cmllczpbXSwgdG9kb3M6W10sIGNvbW06eyBuYW1lOm51bGwsIHBvc3RzOltdLCByZWFjdGVkOnt9LCBoaWRkZW46e30gfSwgc2V0dGluZ3M6eyBraW5kOidtZWRpdGF0aWUnLCBwcmVwOjEwLCBkdXI6MTAsIHNvdW5kOidjbG9wb3RlbCcsIGdlbjpudWxsLCBsYW5nOm51bGwgfSB9OwpmdW5jdGlvbiBndWVzc0xhbmcoKXsgY29uc3Qgbj0obmF2aWdhdG9yLmxhbmd1YWdlfHwnZW4nKS5zbGljZSgwLDIpLnRvTG93ZXJDYXNlKCk7IHJldHVybiBSRUFEWS5pbmNsdWRlcyhuKT9uOidlbicgfQpjb25zdCBsYW5nID0gKCkgPT4gUkVBRFkuaW5jbHVkZXMoREFUQS5zZXR0aW5ncy5sYW5nKSA\/IERBVEEuc2V0dGluZ3MubGFuZyA6IGd1ZXNzTGFuZygpOwpjb25zdCB0ID0gayA9PiB7IGNvbnN0IGc9R1VJW2xhbmcoKV0mJkdVSVtsYW5nKCldW2tdOyBpZihnKSByZXR1cm4gZygpOyByZXR1cm4gKFVJW2xhbmcoKV0mJlVJW2xhbmcoKV1ba10hPT11bmRlZmluZWQpID8gVUlbbGFuZygpXVtrXSA6IFVJLmVuW2tdIH07CmNvbnN0IHR4ID0gKCkgPT4gVFhbbGFuZygpXSB8fCBUWC5lbjsKY29uc3QgbG9jID0gKCkgPT4gTE9DQUxFW2xhbmcoKV0gfHwgJ2VuLUdCJzsKY29uc3QgRyA9IChmLG0pID0+IERBVEEuc2V0dGluZ3MuZ2VuPT09J20nP206ZjsgICAvLyB1c2VkIGJ5IEZSL0lUIHRleHRzCmFzeW5jIGZ1bmN0aW9uIHBlcnNpc3QoKXsgdHJ5eyBhd2FpdCBTdG9yZS5zYXZlKERBVEEpIH0gY2F0Y2goZSl7IHRvYXN0KHQoJ3NhdmVGYWlsJykpIH0gfQoKLyogPT09PT09PT09PT09IEhlbHBlcnMgPT09PT09PT09PT09ICovCmNvbnN0ICQgPSAocyxlbD1kb2N1bWVudCk9PmVsLnF1ZXJ5U2VsZWN0b3Iocyk7CmNvbnN0IGVzYyA9IHMgPT4gU3RyaW5nKHM\/PycnKS5yZXBsYWNlKC9bJjw+IiddL2csYz0+KHsnJic6JyZhbXA7JywnPCc6JyZsdDsnLCc+JzonJmd0OycsJyInOicmcXVvdDsnLCInIjonJiMzOTsnfVtjXSkpOwpjb25zdCBkYXlLZXkgPSBkID0+IHsgY29uc3QgeD1uZXcgRGF0ZShkKTsgcmV0dXJuIHguZ2V0RnVsbFllYXIoKSsnLScrU3RyaW5nKHguZ2V0TW9udGgoKSsxKS5wYWRTdGFydCgyLCcwJykrJy0nK1N0cmluZyh4LmdldERhdGUoKSkucGFkU3RhcnQoMiwnMCcpIH07CmNvbnN0IHRvZGF5S2V5ID0gKCkgPT4gZGF5S2V5KG5ldyBEYXRlKCkpOwpjb25zdCBmbXREYXkgPSBrID0+IHsgY29uc3QgW3ksbSxkXT1rLnNwbGl0KCctJykubWFwKE51bWJlcik7IGNvbnN0IGR0PW5ldyBEYXRlKHksbS0xLGQpOwogIGlmIChrPT09dG9kYXlLZXkoKSkgcmV0dXJuIHQoJ3RvZGF5Jyk7IGNvbnN0IGllPW5ldyBEYXRlKCk7IGllLnNldERhdGUoaWUuZ2V0RGF0ZSgpLTEpOyBpZiAoaz09PWRheUtleShpZSkpIHJldHVybiB0KCd5ZXN0ZXJkYXknKTsKICByZXR1cm4gZHQudG9Mb2NhbGVEYXRlU3RyaW5nKGxvYygpLHt3ZWVrZGF5Oidsb25nJyxkYXk6J251bWVyaWMnLG1vbnRoOidsb25nJ30pIH07CmNvbnN0IG1tc3MgPSBzID0+IHsgcz1NYXRoLm1heCgwLE1hdGguY2VpbChzKSk7IGNvbnN0IG09TWF0aC5mbG9vcihzLzYwKSwgcj1zJTYwOyByZXR1cm4gU3RyaW5nKG0pLnBhZFN0YXJ0KDIsJzAnKSsnOicrU3RyaW5nKHIpLnBhZFN0YXJ0KDIsJzAnKSB9Owpjb25zdCBLSU5EID0gbmV3IFByb3h5KHt9LCB7IGdldDoobyxrKT0+dCgna2luZCcpW2tdIH0pOwpjb25zdCB0ZW1hTGFiZWwgPSB4ID0+IHggJiYgeFswXT09PSdAJyA\/ICh0eCgpLnRoZW1lc1t4XSB8fCBUWC5lbi50aGVtZXNbeF0gfHwgeC5zbGljZSgxKSkgOiB4OwpmdW5jdGlvbiBoZXgoa2luZCwgc2l6ZT00MCl7CiAgY29uc3QgaW5uZXIgPSB7CiAgICBtZWRpdGF0aWU6JzxwYXRoIGQ9Ik0yMCAxMWMzLjUgNCA1LjUgNy41IDUuNSAxMWE1LjUgNS41IDAgMCAxLTExIDBjMC0zLjUgMi03IDUuNS0xMVoiLz48cGF0aCBkPSJNMjAgMTguNWMxLjYgMiAyLjQgMy40IDIuNCA0LjhhMi40IDIuNCAwIDAgMS00LjggMGMwLTEuNC44LTIuOCAyLjQtNC44WiIvPicsCiAgICB5b2dhOic8Y2lyY2xlIGN4PSIyMCIgY3k9IjEyLjUiIHI9IjMiLz48cGF0aCBkPSJNMjAgMTUuNXYxM00yMCAyMWwtNS41LTNNMjAgMjFsNS41LTNNMjAgMjguNWwtMy41LTIuNSAzLjUtMyIvPicsCiAgICBidWN1cmllOic8Y2lyY2xlIGN4PSIyMCIgY3k9IjIwIiByPSI0LjUiLz48cGF0aCBkPSJNMjAgMTB2M00yMCAyN3YzTTEwIDIwaDNNMjcgMjBoM00xMyAxM2wyIDJNMjUgMjVsMiAyTTEzIDI3bDItMk0yNSAxNWwyLTIiLz4nLAogICAgcmVjdW5vc3RpbnRlOic8cGF0aCBkPSJNMjAgMTEuNWwyLjQgNS4yIDUuNi42LTQuMiAzLjggMS4yIDUuNkwyMCAyMy45bC01IDIuOCAxLjItNS42TDEyIDE3LjNsNS42LS42WiIvPicsCiAgICBwdXRlcmk6JzxwYXRoIGQ9Ik0yMCAyMGMwLTUtMi41LTgtNi04IDAgNCAyLjUgOCA2IDhaTTIwIDIwYzAtNSAyLjUtOCA2LTggMCA0LTIuNSA4LTYgOFpNMjAgMjBjMCA1LTIuNSA4LTYgOCAwLTQgMi41LTggNi04Wk0yMCAyMGMwIDUgMi41IDggNiA4IDAtNC0yLjUtOC02LThaIi8+JywKICAgIHVuZWx0ZTonPHJlY3QgeD0iMTEiIHk9IjEzIiB3aWR0aD0iMTAiIGhlaWdodD0iMTUiIHJ4PSIxLjYiIHRyYW5zZm9ybT0icm90YXRlKC04IDE2IDIwLjUpIi8+PHJlY3QgeD0iMTkiIHk9IjEzIiB3aWR0aD0iMTAiIGhlaWdodD0iMTUiIHJ4PSIxLjYiIHRyYW5zZm9ybT0icm90YXRlKDggMjQgMjAuNSkiLz4nLAogICAgc2FtYW50YTonPHBhdGggZD0iTTIwIDI5VjIwTTIwIDIyLjVjMC0zLjUtMi42LTUuNS02LTUuNSAwIDMuNSAyLjYgNS41IDYgNS41Wk0yMCAyMGMwLTMuNiAyLjYtNiA2LTYgMCAzLjYtMi42IDYtNiA2WiIvPjxwYXRoIGQ9Ik0xMyAyOWgxNCIgc3Ryb2tlLWRhc2hhcnJheT0iMSAzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4nCiAgfVtraW5kXTsKICByZXR1cm4gYDxzdmcgY2xhc3M9Imh4IiB3aWR0aD0iJHtzaXplfSIgaGVpZ2h0PSIke3NpemUqMS4xfSIgdmlld0JveD0iMCAwIDQwIDQ0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjYiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSJNMjAgMiAzOCAxMnYyMEwyMCA0MiAyIDMyVjEyWiIvPiR7aW5uZXJ9PC9zdmc+YDsKfQpsZXQgdG9hc3RUOyBmdW5jdGlvbiB0b2FzdChtc2cpeyBsZXQgZWw9JCgnLnRvYXN0Jyk7IGlmKCFlbCl7ZWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7ZWwuY2xhc3NOYW1lPSd0b2FzdCc7ZWwuc2V0QXR0cmlidXRlKCdyb2xlJywnc3RhdHVzJyk7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbCl9IGVsLnRleHRDb250ZW50PW1zZzsgZWwuaGlkZGVuPWZhbHNlOyBjbGVhclRpbWVvdXQodG9hc3RUKTsgdG9hc3RUPXNldFRpbWVvdXQoKCk9PmVsLmhpZGRlbj10cnVlLDI0MDApIH0KZnVuY3Rpb24gYWRkRW50cnkoZSl7IERBVEEuZW50cmllcy5wdXNoKHtpZDpEYXRlLm5vdygpLnRvU3RyaW5nKDM2KStNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLDYpLCAuLi5lfSk7IHBlcnNpc3QoKSB9CgovKiA9PT09PT09PT09PT0gU291bmQ6IHN5bnRoZXNpemVkIGJlbGwgKG5vIGV4dGVybmFsIGZpbGVzKSA9PT09PT09PT09PT0gKi8KbGV0IEFDPW51bGw7CmZ1bmN0aW9uIGF1ZGlvVW5sb2NrKCl7CiAgdHJ5eyBpZiAobmF2aWdhdG9yLmF1ZGlvU2Vzc2lvbikgbmF2aWdhdG9yLmF1ZGlvU2Vzc2lvbi50eXBlPSdwbGF5YmFjaycgfWNhdGNoKGUpe30KICBpZiAoIUFDKXsgY29uc3QgQz13aW5kb3cuQXVkaW9Db250ZXh0fHx3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0OyBpZihDKSBBQz1uZXcgQygpIH0KICBpZiAoQUMgJiYgQUMuc3RhdGU9PT0nc3VzcGVuZGVkJykgQUMucmVzdW1lKCk7Cn0KZnVuY3Rpb24gc3RyaWtlKHdoZW49MCl7CiAgaWYgKCFBQykgcmV0dXJuOwogIGNvbnN0IGRlZXAgPSBEQVRBLnNldHRpbmdzLnNvdW5kPT09J2JvbCc7CiAgY29uc3QgYmFzZSA9IGRlZXAgPyAxOTYgOiA2NjA7CiAgY29uc3QgcGFydGlhbHMgPSBkZWVwID8gW1sxLDEsOV0sWzIuMDIsLjU1LDddLFsyLjc0LC4zNSw1LjVdLFs1LjMsLjE1LDMuNV1dIDogW1sxLDEsNV0sWzIuMCwuNDUsMy41XSxbMi43NiwuNCwyLjhdLFs1LjQsLjIsMS44XSxbOC45LC4wOCwxXV07CiAgY29uc3QgdDAgPSBBQy5jdXJyZW50VGltZSArIHdoZW4gKyAuMDI7CiAgY29uc3QgbWFzdGVyID0gQUMuY3JlYXRlR2FpbigpOyBtYXN0ZXIuZ2Fpbi52YWx1ZSA9IC4zMjsgbWFzdGVyLmNvbm5lY3QoQUMuZGVzdGluYXRpb24pOwogIHBhcnRpYWxzLmZvckVhY2goKFtyLGEsZGVjXSk9PnsKICAgIFswLDFdLmZvckVhY2goaj0+ewogICAgICBjb25zdCBvPUFDLmNyZWF0ZU9zY2lsbGF0b3IoKSwgZz1BQy5jcmVhdGVHYWluKCk7CiAgICAgIG8udHlwZT0nc2luZSc7IG8uZnJlcXVlbmN5LnZhbHVlID0gYmFzZSpyKihqPyAxLjAwMzUgOiAxKTsKICAgICAgZy5nYWluLnNldFZhbHVlQXRUaW1lKDAsdDApOyBnLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoYSouNSx0MCsuMDA2KTsKICAgICAgZy5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoLjAwMDEsdDArZGVjKTsKICAgICAgby5jb25uZWN0KGcpLmNvbm5lY3QobWFzdGVyKTsgby5zdGFydCh0MCk7IG8uc3RvcCh0MCtkZWMrLjA1KTsKICAgIH0pOwogIH0pOwp9CmZ1bmN0aW9uIGJlbGxzKG4peyBmb3IobGV0IGk9MDtpPG47aSsrKSBzdHJpa2UoaSoyLjIpIH0KCi8qID09PT09PT09PT09PSBUaW1lciA9PT09PT09PT09PT0gKi8KY29uc3QgVCA9IHsgcGhhc2U6J2lkbGUnLCBlbmRBdDowLCByZW1haW46MCwgcHJlcFM6MCwgZHVyUzowLCBraW5kOidtZWRpdGF0aWUnLCB0aXRsZTonJywgc3RhcnRlZEF0OjAsIHRpY2s6bnVsbCwgd2FrZTpudWxsLCBzYXZlZElkOm51bGwgfTsKYXN5bmMgZnVuY3Rpb24gd2FrZU9uKCl7IHRyeXsgVC53YWtlID0gYXdhaXQgbmF2aWdhdG9yLndha2VMb2NrPy5yZXF1ZXN0KCdzY3JlZW4nKSB9Y2F0Y2goZSl7fSB9CmZ1bmN0aW9uIHdha2VPZmYoKXsgdHJ5eyBULndha2U\/LnJlbGVhc2UoKSB9Y2F0Y2goZSl7fSBULndha2U9bnVsbCB9CmZ1bmN0aW9uIHRpbWVyU3RhcnQoKXsKICBhdWRpb1VubG9jaygpOwogIGNvbnN0IHM9REFUQS5zZXR0aW5nczsKICBULmtpbmQ9cy5raW5kOyBULnByZXBTPXMucHJlcDsgVC5kdXJTPXMuZHVyKjYwOyBULnRpdGxlPSgkKCcjdFRpdGxlJyk\/LnZhbHVlfHwnJykudHJpbSgpOyBULnNhdmVkSWQ9bnVsbDsKICBULnN0YXJ0ZWRBdD1EYXRlLm5vdygpOwogIGlmIChULnByZXBTPjApeyBULnBoYXNlPSdwcmVwJzsgVC5lbmRBdD1EYXRlLm5vdygpK1QucHJlcFMqMTAwMCB9CiAgZWxzZSB7IFQucGhhc2U9J3J1bic7IFQuZW5kQXQ9RGF0ZS5ub3coKStULmR1clMqMTAwMDsgYmVsbHMoMSkgfQogIHdha2VPbigpOyBsb29wKCk7IHJlbmRlclByYWN0aWNhKCk7Cn0KZnVuY3Rpb24gbG9vcCgpeyBjbGVhckludGVydmFsKFQudGljayk7IFQudGljaz1zZXRJbnRlcnZhbChzdGVwLDI1MCk7IHN0ZXAoKSB9CmZ1bmN0aW9uIHN0ZXAoKXsKICBpZiAoVC5waGFzZT09PSdwcmVwJyAmJiBEYXRlLm5vdygpPj1ULmVuZEF0KXsgVC5waGFzZT0ncnVuJzsgVC5lbmRBdD1ULmVuZEF0K1QuZHVyUyoxMDAwOyBiZWxscygxKTsgcmVuZGVyUHJhY3RpY2EoKTsgfQogIGlmIChULnBoYXNlPT09J3J1bicgJiYgRGF0ZS5ub3coKT49VC5lbmRBdCl7IGZpbmlzaCh0cnVlKTsgcmV0dXJuIH0KICBwYWludERpYWwoKTsKfQpmdW5jdGlvbiBwYWludERpYWwoKXsKICBjb25zdCBkPSQoJyNkaWFsJyk7IGlmKCFkKSByZXR1cm47CiAgbGV0IHRvdGFsPTEsIGxlZnQ9MCwgbGFiZWw9dCgncmVhZHknKSwgc3ViPScnOwogIGlmIChULnBoYXNlPT09J3ByZXAnKXsgdG90YWw9VC5wcmVwUzsgbGVmdD0oVC5lbmRBdC1EYXRlLm5vdygpKS8xMDAwOyBsYWJlbD10KCdwcmVwUGhhc2UnKTsgc3ViPXQoJ2JlbGxTdGFydCcpIH0KICBlbHNlIGlmIChULnBoYXNlPT09J3J1bicpeyB0b3RhbD1ULmR1clM7IGxlZnQ9KFQuZW5kQXQtRGF0ZS5ub3coKSkvMTAwMDsgbGFiZWw9S0lORFtULmtpbmRdOyBzdWI9dCgnb2YnKSttbXNzKFQuZHVyUykgfQogIGVsc2UgaWYgKFQucGhhc2U9PT0ncGF1c2VkJyl7IHRvdGFsPVQucGF1c2VkUGhhc2U9PT0ncHJlcCc\/VC5wcmVwUzpULmR1clM7IGxlZnQ9VC5yZW1haW47IGxhYmVsPXQoJ3BhdXNlZCcpOyBzdWI9dCgncHJlc3NDb250JykgfQogIGVsc2UgeyBsZWZ0PURBVEEuc2V0dGluZ3MuZHVyKjYwOyB0b3RhbD1sZWZ0OyBsYWJlbD1LSU5EW0RBVEEuc2V0dGluZ3Mua2luZF07IHN1Yj1EQVRBLnNldHRpbmdzLnByZXA\/dCgncGx1c1ByZXAnKShwcmVwTGFiZWwoREFUQS5zZXR0aW5ncy5wcmVwKSk6dCgnbm9QcmVwJykgfQogIGQuY2xhc3NMaXN0LnRvZ2dsZSgncHJlcCcsIFQucGhhc2U9PT0ncHJlcCcgfHwgKFQucGhhc2U9PT0ncGF1c2VkJyYmVC5wYXVzZWRQaGFzZT09PSdwcmVwJykpOwogIGNvbnN0IEM9MipNYXRoLlBJKjExMCwgZnJhYyA9IFQucGhhc2U9PT0naWRsZSc\/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsbGVmdC90b3RhbCkpOwogICQoJy5wcm9nJyxkKS5zdHlsZS5zdHJva2VEYXNob2Zmc2V0ID0gQyooMS1mcmFjKTsKICAkKCcucGhhc2UnLGQpLnRleHRDb250ZW50PWxhYmVsOyAkKCcuY2xvY2snLGQpLnRleHRDb250ZW50PW1tc3MobGVmdCk7ICQoJy5zdWInLGQpLnRleHRDb250ZW50PXN1YjsKfQpmdW5jdGlvbiB0aW1lclBhdXNlKCl7IFQucmVtYWluPShULmVuZEF0LURhdGUubm93KCkpLzEwMDA7IFQucGF1c2VkUGhhc2U9VC5waGFzZTsgVC5waGFzZT0ncGF1c2VkJzsgY2xlYXJJbnRlcnZhbChULnRpY2spOyByZW5kZXJQcmFjdGljYSgpIH0KZnVuY3Rpb24gdGltZXJSZXN1bWUoKXsgYXVkaW9VbmxvY2soKTsgVC5waGFzZT1ULnBhdXNlZFBoYXNlOyBULmVuZEF0PURhdGUubm93KCkrVC5yZW1haW4qMTAwMDsgbG9vcCgpOyByZW5kZXJQcmFjdGljYSgpIH0KZnVuY3Rpb24gdGltZXJTdG9wKCl7CiAgY29uc3Qgd2FzUnVuID0gVC5waGFzZT09PSdydW4nIHx8IChULnBoYXNlPT09J3BhdXNlZCcmJlQucGF1c2VkUGhhc2U9PT0ncnVuJyk7CiAgY29uc3QgZG9uZVMgPSB3YXNSdW4gPyBULmR1clMtKFQucGhhc2U9PT0ncGF1c2VkJz9ULnJlbWFpbjooVC5lbmRBdC1EYXRlLm5vdygpKS8xMDAwKSA6IDA7CiAgY2xlYXJJbnRlcnZhbChULnRpY2spOyB3YWtlT2ZmKCk7CiAgVC5waGFzZT0nc3RvcHBlZCc7IFQuZG9uZU1pbj1NYXRoLnJvdW5kKGRvbmVTLzYwKTsgcmVuZGVyUHJhY3RpY2EoKTsKfQpmdW5jdGlvbiBmaW5pc2gocmluZyl7CiAgY2xlYXJJbnRlcnZhbChULnRpY2spOyB3YWtlT2ZmKCk7CiAgaWYgKHJpbmcpIGJlbGxzKDMpOwogIFQucGhhc2U9J2RvbmUnOwogIGFkZEVudHJ5KHsgdHlwZTpULmtpbmQsIHRpdGxlOlQudGl0bGUsIG1pbnV0ZXM6TWF0aC5yb3VuZChULmR1clMvNjApLCBkYXRlOm5ldyBEYXRlKFQuc3RhcnRlZEF0KS50b0lTT1N0cmluZygpIH0pOwogIFQuc2F2ZWRJZD1EQVRBLmVudHJpZXNbREFUQS5lbnRyaWVzLmxlbmd0aC0xXS5pZDsKICByZW5kZXJQcmFjdGljYSgpOwp9CmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCgpPT57IGlmKCFkb2N1bWVudC5oaWRkZW4gJiYgKFQucGhhc2U9PT0ncHJlcCd8fFQucGhhc2U9PT0ncnVuJykpIHN0ZXAoKSB9KTsKY29uc3QgcHJlcExhYmVsID0gcyA9PiB7IGlmKCFzKSByZXR1cm4gdCgnbm9uZScpOyBjb25zdCBtPU1hdGguZmxvb3Iocy82MCksIHI9cyU2MDsgcmV0dXJuIChtP20rJyAnK3QoJ3VuaXRNaW4nKTonJykrKG0mJnI\/JyAnOicnKSsocj9yKycgJyt0KCd1bml0U2VjJyk6JycpIH07CmNvbnN0IGR1ckxhYmVsID0gbSA9PiBtKycgJyt0KCd1bml0TWluJyk7CmZ1bmN0aW9uIHNsaWRlcihpZCxuYW1lLG1pbixtYXgsc3RlcCx2YWwsZm10LGNscyl7IGNvbnN0IGY9KCh2YWwtbWluKS8obWF4LW1pbikpKjEwMDsKICByZXR1cm4gYDxkaXYgY2xhc3M9InNsaWRlciAke2Nsc3x8Jyd9Ij48ZGl2IGNsYXNzPSJ0b3AiPjxsYWJlbCBjbGFzcz0ibGFiZWwiIGZvcj0iJHtpZH0iPiR7bmFtZX08L2xhYmVsPjxvdXRwdXQgaWQ9IiR7aWR9T3V0Ij4ke2ZtdCh2YWwpfTwvb3V0cHV0PjwvZGl2PgogIDxpbnB1dCB0eXBlPSJyYW5nZSIgaWQ9IiR7aWR9IiBjbGFzcz0iJHtjbHM\/Y2xzKyctcmFuZ2UnOicnfSIgbWluPSIke21pbn0iIG1heD0iJHttYXh9IiBzdGVwPSIke3N0ZXB9IiB2YWx1ZT0iJHt2YWx9IiBzdHlsZT0iLS1maWxsOiR7Zn0lIj4KICA8ZGl2IGNsYXNzPSJlbmRzIj48c3Bhbj4ke2ZtdChtaW4pfTwvc3Bhbj48c3Bhbj4ke2ZtdChtYXgpfTwvc3Bhbj48L2Rpdj48L2Rpdj5gIH0KCi8qID09PT09PT09PT09PSBWaWV3cyA9PT09PT09PT09PT0gKi8KbGV0IHRhYj0nYXppJywgakZpbHRlcj0ndG9hdGUnLCBwZW5kaW5nRGVsPW51bGwsIG1hbnVhbD1mYWxzZSwgbGFuZ09wZW49ZmFsc2UsIGpWaWV3PSdtaW5lJywgY0ZpbHRlcj0ndG9hdGUnLCBwZW5kaW5nUmVwPW51bGwsIG5hbWVMYXRlcj1mYWxzZTsKZnVuY3Rpb24gZ28odG8peyBpZih0YWI9PT0ncmVjdW5vc3RpbnRlJyYmcmVjUm93cykgcmVjQ2FwdHVyZSgpOyB0YWI9dG87IG1hbnVhbD1mYWxzZTsgcGVuZGluZ0RlbD1udWxsOyBpZih0bz09PSdidWN1cmllJyl7IGJ1Y1ZpZXc9bnVsbCB9IGlmKHRvPT09J3B1dGVyaScpeyBwVmlldz1udWxsOyBwRXhwb3J0PWZhbHNlIH0gcmVuZGVyKCk7ICQoJyNtYWluJykuc2Nyb2xsVG9wPTAgfQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmF2JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGU9PnsgY29uc3QgYj1lLnRhcmdldC5jbG9zZXN0KCdidXR0b25bZGF0YS10YWJdJyk7IGlmKGIpIGdvKGIuZGF0YXNldC50YWIpIH0pOwoKZnVuY3Rpb24gc3RyZWFrKCl7CiAgY29uc3QgZGF5cz1uZXcgU2V0KERBVEEuZW50cmllcy5tYXAoZT0+ZGF5S2V5KGUuZGF0ZSkpKTsgbGV0IG49MDsgY29uc3QgZD1uZXcgRGF0ZSgpOwogIGlmICghZGF5cy5oYXMoZGF5S2V5KGQpKSkgZC5zZXREYXRlKGQuZ2V0RGF0ZSgpLTEpOwogIHdoaWxlKGRheXMuaGFzKGRheUtleShkKSkpeyBuKys7IGQuc2V0RGF0ZShkLmdldERhdGUoKS0xKSB9CiAgcmV0dXJuIG47Cn0KY29uc3QgbmVlZHNHZW4gPSAoKSA9PiBORUVEU19HRU5ERVIuaW5jbHVkZXMobGFuZygpKTsKZnVuY3Rpb24gcmVuZGVyQXppKCl7CiAgY29uc3QgdGs9dG9kYXlLZXkoKSwgdG9kYXk9REFUQS5lbnRyaWVzLmZpbHRlcihlPT5kYXlLZXkoZS5kYXRlKT09PXRrKTsKICBjb25zdCBtaW5Ub2RheT10b2RheS5maWx0ZXIoZT0+ZS5taW51dGVzKS5yZWR1Y2UoKGEsZSk9PmErZS5taW51dGVzLDApOwogIGNvbnN0IGNudCA9ICguLi5rKSA9PiB0b2RheS5maWx0ZXIoZT0+ay5pbmNsdWRlcyhlLnR5cGUpKS5sZW5ndGg7CiAgY29uc3Qgbm90ZSA9IG4gPT4gbj9gPGVtPiR7dCgnblRvZGF5Jykobil9PC9lbT5gOicnOwogIGNvbnN0IGRhdGVTdHI9bmV3IERhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcobG9jKCkse3dlZWtkYXk6J2xvbmcnLGRheTonbnVtZXJpYycsbW9udGg6J2xvbmcnfSk7CiAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJ2aWV3Ij4KICAgICR7Q09ORklHLmFwaT8nJzpgPGRpdiBjbGFzcz0iYmFubmVyIj4ke3QoJ3Rlc3RCYW5uZXInKX08L2Rpdj5gfQogICAgJHtuZWVkc0dlbigpJiYhREFUQS5zZXR0aW5ncy5nZW4\/YDxkaXYgY2xhc3M9ImNhcmQgZ2VuIj48aDM+JHt0KCdnZW5RJyl9PC9oMz48cCBjbGFzcz0ibm90ZSI+JHt0KCdnZW5Ob3RlJyl9PC9wPgogICAgICA8ZGl2IGNsYXNzPSJidG5zIj48YnV0dG9uIGNsYXNzPSJidG4iIGRhdGEtZ2VuPSJmIj4ke3QoJ2ZlbScpfTwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biBzb2Z0IiBkYXRhLWdlbj0ibSI+JHt0KCdtYXNjJyl9PC9idXR0b24+PC9kaXY+PC9kaXY+YDonJ30KICAgICR7REFUQS5jb21tLm5hbWV8fG5hbWVMYXRlcj8nJzpgPGRpdiBjbGFzcz0iY2FyZCBnZW4iPjxoMz4ke3QoJ2ZpcnN0UScpfTwvaDM+PHAgY2xhc3M9Im5vdGUiPiR7dCgnZmlyc3ROb3RlJyl9PC9wPgogICAgICA8ZGl2IGNsYXNzPSJ0ZW1hLXJvdyI+PGlucHV0IHR5cGU9InRleHQiIGlkPSJmaXJzdE5hbWUiIG1heGxlbmd0aD0iMzAiIHBsYWNlaG9sZGVyPSIke3QoJ25hbWVQaCcpfSI+PGJ1dHRvbiBjbGFzcz0iYnRuIiBkYXRhLWFjdD0iZmlyc3ROYW1lIj4ke3QoJ3NhdmUnKX08L2J1dHRvbj48L2Rpdj4KICAgICAgPGJ1dHRvbiBjbGFzcz0ibGluayIgZGF0YS1hY3Q9Im5hbWVMYXRlciIgc3R5bGU9ImFsaWduLXNlbGY6ZmxleC1zdGFydDtmb250LXNpemU6Ljg1cmVtIj4ke3QoJ2xhdGVyJyl9PC9idXR0b24+PC9kaXY+YH0KICAgIDxkaXY+PGRpdiBjbGFzcz0iZXllYnJvdyI+JHtlc2MoZGF0ZVN0cil9PC9kaXY+PGgyPiR7dCgnaGVhZGxpbmUnKX08L2gyPjwvZGl2PgogICAgJHt1bmVsdGVsQ2FyZCgpfQogICAgJHtpbnNwb0NhcmQoKX0KICAgIDxidXR0b24gY2xhc3M9ImNhcmQgam91cm5hbC1saW5rIiBkYXRhLWdvPSJqdXJuYWwiPjxzcGFuPjxoMz4ke3QoJ2pvdXJuYWwnKX08L2gzPjxzcGFuIGNsYXNzPSJub3RlIj4ke3QoJ25FbnRyaWVzJykoREFUQS5lbnRyaWVzLmxlbmd0aCl9PC9zcGFuPjwvc3Bhbj48c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSIgc3R5bGU9ImZvbnQtc2l6ZToxLjRyZW07Y29sb3I6dmFyKC0tbW9zcykiPuKAujwvc3Bhbj48L2J1dHRvbj4KICA8L2Rpdj5gOwp9CgovKiAtLS0tLS0tLS0tIEpveSBtZWRpdGF0aW9uIC0tLS0tLS0tLS0gKi8KY29uc3QgUV9LRVlTPVsnb2JpZWN0aXYnLCdzZW1pbnRlJywnYWp1dG9yJ107CmxldCBidWNWaWV3PW51bGwsIGJ1Y0RyYWZ0PXt9LCBidWNUb2RvQWRkZWQ9ZmFsc2U7CmxldCBvYmpPcGVuPWZhbHNlLCBvYmpRdWVyeT0nJzsKZnVuY3Rpb24gcHJldkxpc3QoKXsgY29uc3Qgc2Vlbj1uZXcgU2V0KCksIG91dD1bXTsgREFUQS5lbnRyaWVzLmZpbHRlcihlPT5lLnR5cGU9PT0nYnVjdXJpZScmJmUub2JpZWN0aXYpLnNvcnQoKGEsYik9PmIuZGF0ZS5sb2NhbGVDb21wYXJlKGEuZGF0ZSkpLmZvckVhY2goZT0+eyBjb25zdCBrPWUub2JpZWN0aXYudHJpbSgpOyBpZighc2Vlbi5oYXMoay50b0xvd2VyQ2FzZSgpKSl7IHNlZW4uYWRkKGsudG9Mb3dlckNhc2UoKSk7IG91dC5wdXNoKGspIH0gfSk7IHJldHVybiBvdXQgfQpjb25zdCBub3JtID0gcyA9PiBzLnRvTG93ZXJDYXNlKCkubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bzIAtza9dL2csJycpOwpmdW5jdGlvbiBvYmpJdGVtcygpeyBjb25zdCBsPXByZXZMaXN0KCksIHE9bm9ybShvYmpRdWVyeS50cmltKCkpOwogIGNvbnN0IGhpdHM9bC5tYXAoKG8saSk9PltvLGldKS5maWx0ZXIoKFtvXSk9PiFxfHxub3JtKG8pLmluY2x1ZGVzKHEpKTsKICByZXR1cm4gaGl0cy5sZW5ndGggPyBoaXRzLm1hcCgoW28saV0pPT5gPGJ1dHRvbiBkYXRhLXByZXZvYmo9IiR7aX0iIGFyaWEtcHJlc3NlZD0iJHtidWNEcmFmdC5vYmllY3Rpdj09PW99Ij4ke2VzYyhvKX08L2J1dHRvbj5gKS5qb2luKCcnKSA6IGA8ZGl2IGNsYXNzPSJub25lIj4ke3QoJ25vR29hbCcpfTwvZGl2PmAgfQpmdW5jdGlvbiBwcmV2T2JqZWN0aXZlcygpeyBjb25zdCBsPXByZXZMaXN0KCk7IGlmKCFsLmxlbmd0aCkgcmV0dXJuICcnOwogIHJldHVybiBgPGRpdiBjbGFzcz0ib2JqcGljayI+PGJ1dHRvbiBjbGFzcz0ib2JqdG9nZ2xlIiBkYXRhLWFjdD0ib2JqVG9nZ2xlIiBhcmlhLWV4cGFuZGVkPSIke29iak9wZW59Ij4ke3QoJ3BpY2tQcmV2JykobC5sZW5ndGgpfTwvYnV0dG9uPgogICAgJHtvYmpPcGVuP2A8ZGl2IGNsYXNzPSJzaGVldC1iZyIgZGF0YS1hY3Q9Im9ialRvZ2dsZSI+PGRpdiBjbGFzcz0ib2JqcGFuZWwiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbD0iJHt0KCdteUdvYWxzJyl9Ij48ZGl2IGNsYXNzPSJncmFiIj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idG9wIj48aDM+JHt0KCdteUdvYWxzJyl9PC9oMz48YnV0dG9uIGNsYXNzPSJ4IiBkYXRhLWFjdD0ib2JqVG9nZ2xlIiBhcmlhLWxhYmVsPSIke3QoJ2Nsb3NlJyl9Ij7DlzwvYnV0dG9uPjwvZGl2PgogICAgICA8aW5wdXQgdHlwZT0ic2VhcmNoIiBpZD0ib2JqU2VhcmNoIiBwbGFjZWhvbGRlcj0iJHt0KCdzZWFyY2hHb2FscycpfSIgdmFsdWU9IiR7ZXNjKG9ialF1ZXJ5KX0iIGF1dG9jb21wbGV0ZT0ib2ZmIj4KICAgICAgPGRpdiBjbGFzcz0ib2JqbGlzdCIgaWQ9Im9iakxpc3QiPiR7b2JqSXRlbXMoKX08L2Rpdj48L2Rpdj48L2Rpdj5gOicnfTwvZGl2PmAgfQpmdW5jdGlvbiBicmVhdGhDYXJkKCl7IHJldHVybiBgPGRpdiBjbGFzcz0iY2FyZCBicmVhdGgiPjxkaXYgY2xhc3M9Im9yYiIgaWQ9Im9yYiI+PHNwYW4gaWQ9Im9yYkNvdW50Ij48L3NwYW4+PC9kaXY+CiAgPGRpdiBjbGFzcz0iY3VlIiBpZD0iY3VlIj4ke3QoJ2JyZWF0aGVDdWUnKX08L2Rpdj4KICA8YnV0dG9uIGNsYXNzPSJidG4gc29mdCIgaWQ9ImJyZWF0aEJ0biIgZGF0YS1hY3Q9ImJyZWF0aGUiIHN0eWxlPSJtYXgtd2lkdGg6MjYwcHgiPiR7dCgnYnJlYXRoZUJ0bicpfTwvYnV0dG9uPjwvZGl2PmAgfQpmdW5jdGlvbiByZW5kZXJCdWN1cmllKCl7CiAgY29uc3QgUT10eCgpLnFKb3k7CiAgaWYgKGJ1Y1ZpZXcpewogICAgY29uc3QgZT1EQVRBLmVudHJpZXMuZmluZCh4PT54LmlkPT09YnVjVmlldyk7IGlmKCFlKXsgYnVjVmlldz1udWxsOyByZXR1cm4gcmVuZGVyQnVjdXJpZSgpIH0KICAgIHJldHVybiBgPGRpdiBjbGFzcz0idmlldyI+CiAgICAgIDxkaXY+PGRpdiBjbGFzcz0iZXllYnJvdyI+JHtlc2MoZm10RGF5KGRheUtleShlLmRhdGUpKSl9PC9kaXY+PGgyPiR7dCgnam95VGl0bGUnKX08L2gyPjwvZGl2PgogICAgICA8ZGwgY2xhc3M9ImNhcmQgcmVjYXAiPiR7UV9LRVlTLm1hcChrPT5gPGR0PiR7UVtrXX08L2R0PjxkZD4ke2VzYyhlW2tdfHwn4oCUJyl9PC9kZD5gKS5qb2luKCcnKX08L2RsPgogICAgICA8ZGl2IGNsYXNzPSJ2b3ciPiR7aGV4KCdzYW1hbnRhJyw0NCl9JHt0eCgpLnZvd0pveS5tYXAocD0+YDxwPiR7cH08L3A+YCkuam9pbignJyl9PHAgY2xhc3M9Imxhc3QiPiR7dHgoKS52b3dKb3lMYXN0fTwvcD48L2Rpdj4KICAgICAgJHticmVhdGhDYXJkKCl9CiAgICAgICR7ZS5hanV0b3IgJiYgIURBVEEudG9kb3Muc29tZSh4PT54LmZyb209PT1lLmlkKT9gPGJ1dHRvbiBjbGFzcz0iYnRuIHNvZnQiIGRhdGEtYWN0PSJidWNUb2RvUmVjYXAiIGRhdGEtaWQ9IiR7ZS5pZH0iPiR7dCgnYWRkSGVscFRvZG8nKX08L2J1dHRvbj5gOicnfQogICAgICAke3NoYXJlQnRuKGUpfQogICAgICA8YnV0dG9uIGNsYXNzPSJidG4gZ2hvc3QiIGRhdGEtYWN0PSJidWNOZXciPiR7dCgnbmV3Sm95Jyl9PC9idXR0b24+CiAgICA8L2Rpdj5gOwogIH0KICByZXR1cm4gYDxkaXYgY2xhc3M9InZpZXciPgogICAgPGRpdj48aDI+JHt0KCdqb3lUaXRsZScpfTwvaDI+PHAgY2xhc3M9ImxlYWQiPiR7dCgnam95TGVhZCcpfTwvcD48L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNhcmQiPiR7UV9LRVlTLm1hcCgoayxpKT0+eyBjb25zdCBsPVFba107IHJldHVybiBgPGRpdiBjbGFzcz0icSI+PGxhYmVsIGZvcj0iYl8ke2t9Ij48c3BhbiBjbGFzcz0ibnVtIj4ke2krMX0uPC9zcGFuPiR7bH0key9bPzpdJC8udGVzdChsKT8nJzonOid9PC9sYWJlbD4KICAgICAgJHtrPT09J29iaWVjdGl2Jz9wcmV2T2JqZWN0aXZlcygpOicnfQogICAgICA8dGV4dGFyZWEgaWQ9ImJfJHtrfSIgZGF0YS1idWM9IiR7a30iIHJvd3M9IjMiICR7az09PSdvYmllY3RpdicmJnByZXZMaXN0KCkubGVuZ3RoP2BwbGFjZWhvbGRlcj0iJHt0KCduZXdHb2FsUGgnKX0iYDonJ30+JHtlc2MoYnVjRHJhZnRba118fCcnKX08L3RleHRhcmVhPgogICAgICAke2s9PT0nYWp1dG9yJz9gPGJ1dHRvbiBjbGFzcz0idG9kby1idG4iIGlkPSJ0b2RvQnRuIiBkYXRhLWFjdD0iYnVjVG9kbyIgJHtidWNEcmFmdC5hanV0b3I\/Jyc6J2hpZGRlbid9ICR7YnVjVG9kb0FkZGVkPydkaXNhYmxlZCc6Jyd9PiR7YnVjVG9kb0FkZGVkP3QoJ2FkZGVkVG9kbycpOnQoJ2FkZFRvZG8nKX08L2J1dHRvbj5gOicnfTwvZGl2PmAgfSkuam9pbignJyl9PC9kaXY+CiAgICAke3ByaXZDaG9pY2UoJ2J1Y3VyaWUnKX0KICAgIDxidXR0b24gY2xhc3M9ImJ0biIgZGF0YS1hY3Q9ImJ1Y1NhdmUiPiR7dCgnc2F2ZScpfTwvYnV0dG9uPgogIDwvZGl2PmA7Cn0KCi8qIC0tLS0tLS0tLS0gVGhlIDQgcG93ZXJzIC0tLS0tLS0tLS0gKi8KY29uc3QgbWsgPSB2ID0+IGA8bWFyaz4ke2VzYyhTdHJpbmcodnx8J+KApicpLnRyaW0oKS5yZXBsYWNlKC9ccypcbitccyovZywnLCAnKS5yZXBsYWNlKC9bLiE\/LDs6XHNdKyQvLCcnKSl9PC9tYXJrPmA7CmNvbnN0IG5vTGVhZCA9IHYgPT4gU3RyaW5nKHZ8fCcnKS50cmltKCkucmVwbGFjZSh0eCgpLmxlYWQsJycpOwpjb25zdCBQVmsgPSB2ID0+IHsgY29uc3QgcD10eCgpLnB2W3ZdfHx0eCgpLnB2WzFdOyByZXR1cm4geyBuYW1lOnAubmFtZSwgcDE6cC5wMSwgcDI6cC5wMnx8dHgoKS5zdGQucDIsIHAzOnAucDN8fHR4KCkuc3RkLnAzLCBwNDpwLnA0fHx0eCgpLnN0ZC5wNCB9IH07CmNvbnN0IFBPV0VSX0tFWVM9WydwMScsJ3AyJywncDMnLCdwNCddOwpjb25zdCBQVyA9IGsgPT4gdHgoKS5wb3dlcnNba107CmxldCBwRXhwb3J0PWZhbHNlLCBleHBGcm9tPW51bGwsIGV4cFRvPW51bGw7CmNvbnN0IFRFTUVfQkFaQT1bJ0Btb25leScsJ0ByZWxhdGlvbnNoaXBzJywnQGhlYWx0aCddOwpsZXQgdGVtZUFsbD1mYWxzZTsKY29uc3QgdGVtZVRvYXRlPSgpPT57IGNvbnN0IGw9Wy4uLlRFTUVfQkFaQSwgLi4uKERBVEEuc2V0dGluZ3MudGVtZXx8W10pXTsgY29uc3Qgbj17fTsgREFUQS5lbnRyaWVzLmZvckVhY2goZT0+eyBpZihlLnR5cGU9PT0ncHV0ZXJpJyYmZS50ZW1hKXsgbltlLnRlbWFdPShuW2UudGVtYV18fDApKzE7IGlmKCFsLmluY2x1ZGVzKGUudGVtYSkpIGwucHVzaChlLnRlbWEpIH0gfSk7IHJldHVybiBsLm1hcCgoeCxpKT0+W3gsaV0pLnNvcnQoKGEsYik9PihuW2JbMF1dfHwwKS0oblthWzBdXXx8MCl8fGFbMV0tYlsxXSkubWFwKHg9PnhbMF0pIH07CmxldCBwVmlldz1udWxsLCBwRHJhZnQ9e3Y6MSx6aTonYXppJ307CmZ1bmN0aW9uIHBGb3JtKGtleSl7CiAgcmV0dXJuIFBWayhwRHJhZnQudilba2V5XS5mb3JtKCkubWFwKChbZixsXSk9PiBmPT09J3QnID8gYDxwIGNsYXNzPSJwdGV4dCI+JHtsfTwvcD5gCiAgICA6IGY9PT0nemknID8gYDxkaXYgY2xhc3M9ImNoaXBzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iJHt0KCd3aGVuJyl9Ij4ke1tbJ2F6aScsdCgnelRvZGF5JyldLFsnbWFpbmUnLHQoJ3pUb21vcnJvdycpXV0ubWFwKChbayx4XSk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIiBkYXRhLXppPSIke2t9IiBhcmlhLXByZXNzZWQ9IiR7KHBEcmFmdC56aXx8J2F6aScpPT09a30iPiR7eH08L2J1dHRvbj5gKS5qb2luKCcnKX08L2Rpdj5gCiAgICA6IGY9PT0nZHVyJyA\/IGA8ZGl2IGNsYXNzPSJjaGlwcyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IiR7dCgnaG93TG9uZycpfSI+JHt0eCgpLmR1ci5tYXAoZD0+YDxidXR0b24gY2xhc3M9ImNoaXAiIGRhdGEtZHVyPSIke2R9IiBkYXRhLW1vZGU9IiR7bH0iPiR7ZH08L2J1dHRvbj5gKS5qb2luKCcnKX08L2Rpdj5gCiAgICA6IGA8dGV4dGFyZWEgaWQ9InBmXyR7Zn0iIGRhdGEtcGY9IiR7Zn0iIHJvd3M9IjIiIHBsYWNlaG9sZGVyPSIke2x9Ij4ke2VzYyhwRHJhZnRbZl18fCcnKX08L3RleHRhcmVhPmApLmpvaW4oJycpOwp9CmZ1bmN0aW9uIHBSZWNhcChrZXksZSl7IHJldHVybiBgPHAgY2xhc3M9InB0ZXh0Ij4ke1BWayhlLnYpW2tleV0ucmVjYXAoZSl9PC9wPmAgfQpmdW5jdGlvbiBwbGFpbihoKXsgY29uc3QgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgZC5pbm5lckhUTUw9aDsgcmV0dXJuIGQudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csJyAnKS50cmltKCkgfQpjb25zdCBsb25nRGF0ZSA9IGUgPT4gbmV3IERhdGUoZS5kYXRlKS50b0xvY2FsZURhdGVTdHJpbmcobG9jKCkse2RheTonbnVtZXJpYycsbW9udGg6J2xvbmcnLHllYXI6J251bWVyaWMnfSk7CmZ1bmN0aW9uIHB1dGVyaVRleHQoZSl7CiAgY29uc3Qgd2EgPSBoID0+IHsgY29uc3QgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgZC5pbm5lckhUTUw9aC5yZXBsYWNlKC88bWFyaz4vZywnKicpLnJlcGxhY2UoLzxcL21hcms+L2csJyonKTsgcmV0dXJuIGQudGV4dENvbnRlbnQucmVwbGFjZSgvWyBcdF0rL2csJyAnKS50cmltKCkgfTsKICBsZXQgcz0nKicrdHgoKS5wb3dIZWFkKycgwrcgJytsb25nRGF0ZShlKSsoZS50ZW1hPycgwrcgJyt0ZW1hTGFiZWwoZS50ZW1hKTonJykrJypcblxuJzsKICBQT1dFUl9LRVlTLmZvckVhY2goaz0+eyBjb25zdCBbbix0aV09UFcoayk7IHMrPScqJytuKycgwrcgJyt0aSsnKlxuJyt3YShQVmsoZS52KVtrXS5yZWNhcChlKSkrJ1xuXG4nIH0pOwogIHJldHVybiBzK3R4KCkudm93UG93KCkubWFwKHg9PidfJyt4KydfJykuam9pbignXG5cbicpKydcblxuXycrdHgoKS52b3dQb3dMYXN0KydfXG5cbicrdCgnYnJlYXRoZUN1ZScpKycuXG4nOwp9CmZ1bmN0aW9uIHB1dGVyaUh0bWwoZSl7CiAgcmV0dXJuIGA8cD48Yj4ke3R4KCkucG93SGVhZENhc2V9IMK3ICR7bG9uZ0RhdGUoZSl9JHtlLnRlbWE\/JyDCtyAnK2VzYyh0ZW1hTGFiZWwoZS50ZW1hKSk6Jyd9PC9iPjwvcD5gK1BPV0VSX0tFWVMubWFwKGs9PnsgY29uc3QgW24sdGldPVBXKGspOyByZXR1cm4gYDxwPjxiPiR7bn0gwrcgJHt0aX08L2I+PGJyPiR7UFZrKGUudilba10ucmVjYXAoZSkucmVwbGFjZSgvPG1hcms+L2csJzxiPicpLnJlcGxhY2UoLzxcL21hcms+L2csJzwvYj4nKX08L3A+YCB9KS5qb2luKCcnKQogICAgK3R4KCkudm93UG93KCkubWFwKHg9PmA8cD48aT4ke3h9PC9pPjwvcD5gKS5qb2luKCcnKStgPHA+PGk+JHt0eCgpLnZvd1Bvd0xhc3R9PC9pPjwvcD48cD4ke3QoJ2JyZWF0aGVDdWUnKX0uPC9wPmA7Cn0KZnVuY3Rpb24gY29weVJpY2godHh0LCBodG1sKXsKICBjb25zdCBvaz0oKT0+dG9hc3QodCgnY29waWVkJykpLCBiYWQ9KCk9PnRvYXN0KHQoJ2NvcHlGYWlsJykpOwogIGNvbnN0IGZhbGxiYWNrPSgpPT57IGNvbnN0IHRhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7IHRhLnZhbHVlPXR4dDsgdGEuc2V0QXR0cmlidXRlKCdyZWFkb25seScsJycpOyB0YS5zdHlsZS5jc3NUZXh0PSdwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7b3BhY2l0eTowJzsgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0YSk7IHRhLnNlbGVjdCgpOyB0YS5zZXRTZWxlY3Rpb25SYW5nZSgwLHR4dC5sZW5ndGgpOwogICAgbGV0IGRvbmU9ZmFsc2U7IHRyeXsgZG9uZT1kb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpIH1jYXRjaCh4KXt9IHRhLnJlbW92ZSgpOyBkb25lP29rKCk6YmFkKCkgfTsKICB0cnl7CiAgICBpZiAod2luZG93LkNsaXBib2FyZEl0ZW0gJiYgbmF2aWdhdG9yLmNsaXBib2FyZCAmJiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlKXsKICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZShbbmV3IENsaXBib2FyZEl0ZW0oeyd0ZXh0L3BsYWluJzpuZXcgQmxvYihbdHh0XSx7dHlwZTondGV4dC9wbGFpbid9KSwndGV4dC9odG1sJzpuZXcgQmxvYihbaHRtbF0se3R5cGU6J3RleHQvaHRtbCd9KX0pXSkudGhlbihvaykuY2F0Y2goKCk9PnsKICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0eHQpLnRoZW4ob2spLmNhdGNoKGZhbGxiYWNrKSB9KTsKICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCAmJiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCl7IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHR4dCkudGhlbihvaykuY2F0Y2goZmFsbGJhY2spIH0KICAgIGVsc2UgZmFsbGJhY2soKTsKICB9Y2F0Y2goeCl7IGZhbGxiYWNrKCkgfQp9CmZ1bmN0aW9uIHBDYXB0dXJlKCl7IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXBmXScpLmZvckVhY2goZWw9PnBEcmFmdFtlbC5kYXRhc2V0LnBmXT1lbC52YWx1ZSkgfQpmdW5jdGlvbiBleHBMaXN0KCl7IHJldHVybiBEQVRBLmVudHJpZXMuZmlsdGVyKGU9PmUudHlwZT09PSdwdXRlcmknICYmIGRheUtleShlLmRhdGUpPj1leHBGcm9tICYmIGRheUtleShlLmRhdGUpPD1leHBUbykuc29ydCgoYSxiKT0+YS5kYXRlLmxvY2FsZUNvbXBhcmUoYi5kYXRlKSkgfQpjb25zdCBwb3dCbG9ja3MgPSBlID0+IFBPV0VSX0tFWVMubWFwKGs9PnsgY29uc3QgW24sdGldPVBXKGspOyByZXR1cm4gYDxkaXY+PGg0PiR7bn0gwrcgJHt0aX08L2g0PiR7cFJlY2FwKGssZSl9PC9kaXY+YCB9KS5qb2luKCcnKTsKZnVuY3Rpb24gcmVuZGVyRXhwb3J0KCl7CiAgaWYoIWV4cFRvKXsgZXhwVG89dG9kYXlLZXkoKTsgY29uc3QgZj1uZXcgRGF0ZSgpOyBmLnNldERhdGUoZi5nZXREYXRlKCktMzApOyBleHBGcm9tPWRheUtleShmKSB9CiAgY29uc3QgbD1leHBMaXN0KCk7CiAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJ2aWV3Ij4KICAgIDxidXR0b24gY2xhc3M9ImxpbmsiIGRhdGEtYWN0PSJleHBDbG9zZSIgc3R5bGU9ImFsaWduLXNlbGY6ZmxleC1zdGFydCI+JHt0KCdiYWNrJyl9PC9idXR0b24+CiAgICA8ZGl2PjxoMj4ke3QoJ2V4cFRpdGxlJyl9PC9oMj48cCBjbGFzcz0ibGVhZCI+JHt0KCdleHBMZWFkJyl9PC9wPjwvZGl2PgogICAgPGRpdiBjbGFzcz0iY2FyZCI+PGRpdiBjbGFzcz0iZXhwLXJvdyI+PGxhYmVsIGZvcj0iZXhwRnJvbSI+JHt0KCdmcm9tJyl9PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJleHBGcm9tIiB2YWx1ZT0iJHtleHBGcm9tfSIgbWF4PSIke3RvZGF5S2V5KCl9Ij48L2xhYmVsPjxsYWJlbCBmb3I9ImV4cFRvIj4ke3QoJ3RvJyl9PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJleHBUbyIgdmFsdWU9IiR7ZXhwVG99IiBtYXg9IiR7dG9kYXlLZXkoKX0iPjwvbGFiZWw+PC9kaXY+CiAgICAgIDxwIGNsYXNzPSJub3RlIj4ke3QoJ25QcmFjdCcpKGwubGVuZ3RoKX08L3A+PC9kaXY+CiAgICAke2wubGVuZ3RoP2A8ZGl2IGNsYXNzPSJidG5zIj48YnV0dG9uIGNsYXNzPSJidG4gc29mdCIgZGF0YS1hY3Q9ImV4cENvcHkiPiR7dCgnY29weScpfTwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biBzb2Z0IiBkYXRhLWFjdD0icFBkZiI+JHt0KCdwZGYnKX08L2J1dHRvbj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNhcmQgcHJlY2FwIj4ke2wubWFwKGU9PmA8ZGl2IGNsYXNzPSJleHAtaXRlbSI+PGRpdj48ZGl2IGNsYXNzPSJleWVicm93Ij4ke2VzYyhuZXcgRGF0ZShlLmRhdGUpLnRvTG9jYWxlRGF0ZVN0cmluZyhsb2MoKSx7d2Vla2RheTonbG9uZycsZGF5OidudW1lcmljJyxtb250aDonbG9uZycseWVhcjonbnVtZXJpYyd9KSl9PC9kaXY+JHtlLnRlbWE\/YDxzcGFuIGNsYXNzPSJ0YWctdGVtYSI+JHtlc2ModGVtYUxhYmVsKGUudGVtYSkpfTwvc3Bhbj5gOicnfTwvZGl2PiR7cG93QmxvY2tzKGUpfTwvZGl2PmApLmpvaW4oJycpfTwvZGl2PmAKICAgIDpgPGRpdiBjbGFzcz0iZW1wdHkiPiR7aGV4KCdzYW1hbnRhJyw0OCl9PHA+JHt0KCdub1ByYWN0Jyl9PC9wPjwvZGl2PmB9CiAgPC9kaXY+YDsKfQpmdW5jdGlvbiByZW5kZXJQdXRlcmkoKXsKICBpZiAocEV4cG9ydCkgcmV0dXJuIHJlbmRlckV4cG9ydCgpOwogIGlmIChwVmlldyl7CiAgICBjb25zdCBlPURBVEEuZW50cmllcy5maW5kKHg9PnguaWQ9PT1wVmlldyk7IGlmKCFlKXsgcFZpZXc9bnVsbDsgcmV0dXJuIHJlbmRlclB1dGVyaSgpIH0KICAgIGNvbnN0IGRvbmVCdWMgPSBEQVRBLmVudHJpZXMuc29tZSh4PT54LnR5cGU9PT0nYnVjdXJpZScgJiYgeC5kYXRlPmUuZGF0ZSk7CiAgICByZXR1cm4gYDxkaXYgY2xhc3M9InZpZXciPgogICAgICA8ZGl2PjxkaXYgY2xhc3M9ImV5ZWJyb3ciPiR7ZXNjKGZtdERheShkYXlLZXkoZS5kYXRlKSkpfTwvZGl2PjxoMj4ke3QoJ3Bvd1RpdGxlJyl9PC9oMj4ke2UudGVtYT9gPHNwYW4gY2xhc3M9InRhZy10ZW1hIj4ke2VzYyh0ZW1hTGFiZWwoZS50ZW1hKSl9PC9zcGFuPmA6Jyd9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNhcmQgcHJlY2FwIj4ke3Bvd0Jsb2NrcyhlKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idm93Ij4ke2hleCgnc2FtYW50YScsNDQpfSR7dHgoKS52b3dQb3coKS5tYXAocD0+YDxwPiR7cH08L3A+YCkuam9pbignJyl9PHAgY2xhc3M9Imxhc3QiPiR7dHgoKS52b3dQb3dMYXN0fTwvcD48L2Rpdj4KICAgICAgJHticmVhdGhDYXJkKCl9CiAgICAgICR7ZS5wND9gPHAgY2xhc3M9Im5vdGUiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+JHt0KCdpblRvZG8nKX08L3A+YDonJ30KICAgICAgPGRpdiBjbGFzcz0iYnRucyI+PGJ1dHRvbiBjbGFzcz0iYnRuIHNvZnQiIGRhdGEtYWN0PSJwQ29weSIgZGF0YS1pZD0iJHtlLmlkfSI+JHt0KCdjb3B5Jyl9PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0iYnRuIHNvZnQiIGRhdGEtYWN0PSJwUGRmIj4ke3QoJ3BkZicpfTwvYnV0dG9uPjwvZGl2PgogICAgICAke2RvbmVCdWM\/Jyc6YDxkaXYgY2xhc3M9Im5leHQiPiR7aGV4KCdidWN1cmllJyw0MCl9PGgzPiR7dCgnZG9Kb3lOb3cnKX08L2gzPjxidXR0b24gY2xhc3M9ImJ0biIgZGF0YS1nbz0iYnVjdXJpZSI+JHt0KCdnb0pveScpfTwvYnV0dG9uPjwvZGl2PmB9CiAgICAgICR7c2hhcmVCdG4oZSl9CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBnaG9zdCIgZGF0YS1hY3Q9InBOZXciPiR7dCgnbmV3UG93ZXJzJyl9PC9idXR0b24+CiAgICA8L2Rpdj5gOwogIH0KICByZXR1cm4gYDxkaXYgY2xhc3M9InZpZXciPgogICAgPGRpdj48aDI+JHt0KCdwb3dUaXRsZScpfTwvaDI+PHAgY2xhc3M9ImxlYWQiPiR7dCgncG93TGVhZCcpfTwvcD48L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNhcmQiPjxzcGFuIGNsYXNzPSJsYWJlbCI+JHt0KCd0aGVtZScpfTwvc3Bhbj4KICAgICAgPGRpdiBjbGFzcz0iY2hpcHMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSIke3QoJ3RoZW1lQXJpYScpfSI+JHsoKCk9PnsgY29uc3QgYWxsPXRlbWVUb2F0ZSgpOyBsZXQgc2hvdz10ZW1lQWxsP2FsbDphbGwuc2xpY2UoMCw2KTsgaWYocERyYWZ0LnRlbWEmJiFzaG93LmluY2x1ZGVzKHBEcmFmdC50ZW1hKSkgc2hvdz1bLi4uc2hvdyxwRHJhZnQudGVtYV07CiAgICAgICAgcmV0dXJuIHNob3cubWFwKHg9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIiBkYXRhLXRlbWE9IiR7ZXNjKHgpfSIgYXJpYS1wcmVzc2VkPSIke3BEcmFmdC50ZW1hPT09eH0iPiR7ZXNjKHRlbWFMYWJlbCh4KSl9PC9idXR0b24+YCkuam9pbignJykgKyAoYWxsLmxlbmd0aD42P2A8YnV0dG9uIGNsYXNzPSJjaGlwIiBkYXRhLWFjdD0idGVtZUFsbCI+JHt0ZW1lQWxsP3QoJ2Zld2VyJyk6dCgnYWxsVGhlbWVzJykoYWxsLmxlbmd0aCl9PC9idXR0b24+YDonJykgfSkoKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idGVtYS1yb3ciPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0idGVtYU5vdWEiIG1heGxlbmd0aD0iNDAiIHBsYWNlaG9sZGVyPSIke3QoJ25ld1RoZW1lUGgnKX0iPjxidXR0b24gY2xhc3M9ImJ0biBzb2Z0IiBkYXRhLWFjdD0idGVtYUFkZCI+JHt0KCdhZGQnKX08L2J1dHRvbj48L2Rpdj4KICAgIDwvZGl2PgogICAgPHNwYW4gY2xhc3M9ImxhYmVsIj4ke3QoJ3N0YXJ0Jyl9PC9zcGFuPgogICAgPGRpdiBjbGFzcz0idmFyaWFudHMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSIke3QoJ3N0YXJ0Jyl9Ij4ke09iamVjdC5rZXlzKHR4KCkucHYpLm1hcChOdW1iZXIpLm1hcCh2PT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCIgZGF0YS1wdj0iJHt2fSIgYXJpYS1wcmVzc2VkPSIke3BEcmFmdC52PT09dn0iPjxiPiR7dn08L2I+PHNwYW4+JHtQVmsodikubmFtZSgpfTwvc3Bhbj48L2J1dHRvbj5gKS5qb2luKCcnKX08L2Rpdj4KICAgICR7UE9XRVJfS0VZUy5tYXAoaz0+eyBjb25zdCBbbix0aV09UFcoayk7IHJldHVybiBgPGRpdiBjbGFzcz0iY2FyZCBwb3dlciI+PGRpdiBjbGFzcz0iZXllYnJvdyI+PHNwYW4+JHtufTwvc3Bhbj48L2Rpdj48aDM+JHt0aX08L2gzPgogICAgICAke3BGb3JtKGspfQogICAgICAke2s9PT0ncDQnP2A8cCBjbGFzcz0ibm90ZSI+JHt0KCdwNG5vdGUnKX08L3A+YDonJ30KICAgIDwvZGl2PmAgfSkuam9pbignJyl9CiAgICAke3ByaXZDaG9pY2UoJ3B1dGVyaScpfQogICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBkYXRhLWFjdD0icFNhdmUiPiR7dCgnc2F2ZScpfTwvYnV0dG9uPgogICAgJHtEQVRBLmVudHJpZXMuc29tZSh4PT54LnR5cGU9PT0ncHV0ZXJpJyk\/YDxidXR0b24gY2xhc3M9ImxpbmsiIGRhdGEtYWN0PSJleHBPcGVuIiBzdHlsZT0iYWxpZ24tc2VsZjpjZW50ZXIiPiR7dCgnZXhwb3J0TGluaycpfTwvYnV0dG9uPmA6Jyd9CiAgPC9kaXY+YDsKfQoKLyogLS0tLS0tLS0tLSBHcmF0aXR1ZGUgLyBzdWNjZXNzZXMgLS0tLS0tLS0tLSAqLwpsZXQgcmVjUm93cz1udWxsOwpjb25zdCByZWNQcmUgPSBrID0+IGs9PT0nc3VjY2VzJyA\/IHQoJ3ByZVMnKShHKSA6IHQoJ3ByZUcnKShHKTsKZnVuY3Rpb24gcmVjSW5pdCgpeyBpZighcmVjUm93cykgcmVjUm93cz1be2s6J3JlY3Vub3N0aW50YScsdDonJ31dIH0KZnVuY3Rpb24gcmVjQ2FwdHVyZSgpeyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1ydF0nKS5mb3JFYWNoKGVsPT57IHJlY1Jvd3NbK2VsLmRhdGFzZXQucnRdLnQ9ZWwudmFsdWUgfSkgfQpjb25zdCBzaGFyZU5leHQ9e2J1Y3VyaWU6ZmFsc2UscmVjdW5vc3RpbnRlOmZhbHNlLHB1dGVyaTpmYWxzZX07CmNvbnN0IHByaXZDaG9pY2UgPSBrID0+IGA8ZGl2IGNsYXNzPSJxIj48c3BhbiBjbGFzcz0ibGFiZWwiPiR7dCgnd2hvU2VlcycpfTwvc3Bhbj48ZGl2IGNsYXNzPSJzZWciIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSIke3QoJ3dob1NlZXMnKX0iPjxidXR0b24gZGF0YS1wcml2PSIke2t9IiBkYXRhLXZhbD0iMCIgYXJpYS1wcmVzc2VkPSIkeyFzaGFyZU5leHRba119Ij4ke3QoJ29ubHlNZScpfTwvYnV0dG9uPjxidXR0b24gZGF0YS1wcml2PSIke2t9IiBkYXRhLXZhbD0iMSIgYXJpYS1wcmVzc2VkPSIke3NoYXJlTmV4dFtrXX0iPiR7dCgnc2hhcmVBbm9uJyl9PC9idXR0b24+PC9kaXY+JHtzaGFyZU5leHRba10\/YDxwIGNsYXNzPSJub3RlIj4ke3QoJ3NoYXJlQWZ0ZXInKX08L3A+YDonJ308L2Rpdj5gOwpmdW5jdGlvbiByZW5kZXJSZWN1bm9zdGludGUoKXsKICByZWNJbml0KCk7CiAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJ2aWV3Ij4KICAgIDxkaXY+PGgyPiR7dCgncmVjVGl0bGUnKX08L2gyPjxwIGNsYXNzPSJsZWFkIj4ke3QoJ3JlY0xlYWQnKX08L3A+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjYXJkIj4ke3JlY1Jvd3MubWFwKChyLGkpPT5gPGRpdiBjbGFzcz0icnJvdyI+CiAgICAgIDxkaXYgY2xhc3M9InRvcCI+PGRpdiBjbGFzcz0ibWluaSIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IiR7dCgncm93VHlwZScpKGkrMSl9Ij4KICAgICAgICA8YnV0dG9uIGRhdGEtcms9InJlY3Vub3N0aW50YSIgZGF0YS1yaT0iJHtpfSIgYXJpYS1wcmVzc2VkPSIke3Iuaz09PSdyZWN1bm9zdGludGEnfSI+JHt0KCdncmF0aXR1ZGUnKX08L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIGRhdGEtcms9InN1Y2NlcyIgZGF0YS1yaT0iJHtpfSIgYXJpYS1wcmVzc2VkPSIke3Iuaz09PSdzdWNjZXMnfSI+JHt0KCdzdWNjZXNzJyl9PC9idXR0b24+PC9kaXY+CiAgICAgICAgJHtyZWNSb3dzLmxlbmd0aD4xP2A8YnV0dG9uIGNsYXNzPSJybSIgZGF0YS1ycm09IiR7aX0iIGFyaWEtbGFiZWw9IiR7dCgnZGVsUm93Jyl9Ij4ke3QoJ3JlbW92ZScpfTwvYnV0dG9uPmA6Jyd9PC9kaXY+CiAgICAgIDxsYWJlbCBjbGFzcz0icmlucHV0ICR7ci5rfSIgZm9yPSJydF8ke2l9Ij48c3BhbiBjbGFzcz0icHJlIj4ke3JlY1ByZShyLmspfTwvc3Bhbj48aW5wdXQgdHlwZT0idGV4dCIgaWQ9InJ0XyR7aX0iIGRhdGEtcnQ9IiR7aX0iIG1heGxlbmd0aD0iMjgwIiBlbnRlcmtleWhpbnQ9Im5leHQiIHZhbHVlPSIke2VzYyhyLnQpfSIgcGxhY2Vob2xkZXI9IiR7ci5rPT09J3N1Y2Nlcyc\/dCgnc3VjY2Vzc1BoJyk6J+KApid9Ij48L2xhYmVsPgogICAgPC9kaXY+YCkuam9pbignJyl9CiAgICA8YnV0dG9uIGNsYXNzPSJsaW5rIiBkYXRhLWFjdD0icmVjQWRkIiBzdHlsZT0iYWxpZ24tc2VsZjpmbGV4LXN0YXJ0Ij4ke3QoJ2FkZFJvdycpfTwvYnV0dG9uPjwvZGl2PgogICAgJHtwcml2Q2hvaWNlKCdyZWN1bm9zdGludGUnKX0KICAgIDxidXR0b24gY2xhc3M9ImJ0biIgZGF0YS1hY3Q9InJlY1NhdmUiPiR7dCgnc2F2ZScpfTwvYnV0dG9uPgogIDwvZGl2PmA7Cn0KbGV0IGJyZWF0aFQ9W107CmZ1bmN0aW9uIGJyZWF0aGUoKXsKICBicmVhdGhULmZvckVhY2goY2xlYXJUaW1lb3V0KTsgYnJlYXRoVD1bXTsKICBjb25zdCBvcmI9JCgnI29yYicpLCBjdWU9JCgnI2N1ZScpLCBjbnQ9JCgnI29yYkNvdW50JyksIGJ0bj0kKCcjYnJlYXRoQnRuJyk7IGlmKCFvcmIpIHJldHVybjsKICBjb25zdCBzdGlsbCA9IG1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJykubWF0Y2hlczsKICBidG4uaGlkZGVuPXRydWU7IGxldCBtcz0wOwogIGZvcihsZXQgaT0xO2k8PTM7aSsrKXsKICAgIGJyZWF0aFQucHVzaChzZXRUaW1lb3V0KCgpPT57IGN1ZS50ZXh0Q29udGVudD10KCdpbmhhbGUnKTsgY250LnRleHRDb250ZW50PWkrJyAvIDMnOyBvcmIuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPSc0cyc7IGlmKCFzdGlsbCkgb3JiLnN0eWxlLnRyYW5zZm9ybT0nc2NhbGUoMSknIH0sbXMpKTsgbXMrPTQwMDA7CiAgICBicmVhdGhULnB1c2goc2V0VGltZW91dCgoKT0+eyBjdWUudGV4dENvbnRlbnQ9dCgnZXhoYWxlJyk7IG9yYi5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249JzZzJzsgaWYoIXN0aWxsKSBvcmIuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSguNiknIH0sbXMpKTsgbXMrPTYwMDA7CiAgfQogIGJyZWF0aFQucHVzaChzZXRUaW1lb3V0KCgpPT57IGN1ZS50ZXh0Q29udGVudD0gdGFiPT09J3B1dGVyaScgPyB0KCdkb25lQnJlYXRoUCcpIDogdCgnZG9uZUJyZWF0aEonKTsgY250LnRleHRDb250ZW50PScnOyBidG4uaGlkZGVuPWZhbHNlOyBidG4udGV4dENvbnRlbnQ9dCgnYWdhaW4nKSB9LG1zKSk7Cn0KCi8qIC0tLS0tLS0tLS0gVG8gRG8gLS0tLS0tLS0tLSAqLwpsZXQgdG9kb1Nob3dEb25lPWZhbHNlOwpmdW5jdGlvbiBhZGRUb2RvKHRleHQsIHNvdXJjZSwgZnJvbSwgemkpeyBEQVRBLnRvZG9zLnB1c2goe2lkOkRhdGUubm93KCkudG9TdHJpbmcoMzYpK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsNiksIHRleHQsIHNvdXJjZSwgZnJvbTpmcm9tfHxudWxsLCB6aTp6aXx8bnVsbCwgY3JlYXRlZDpuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksIGRvbmU6ZmFsc2V9KTsgcGVyc2lzdCgpIH0KLyogcHJvbWlzZXMgZnJvbSBQb3dlciA0IGFyZSBzdG9yZWQgd2l0aG91dCB0aGUgIlRvZGF5IEkgcHJvbWlzZSB0byIgcGFydCwgc28gaXQgZm9sbG93cyB0aGUgY2hvc2VuIGxhbmd1YWdlICovCmNvbnN0IHRvZG9UZXh0ID0geCA9PiB7IGlmKCEoeC5zb3VyY2U9PT0ncHV0ZXJpJyAmJiB4LnppKSkgcmV0dXJuIHgudGV4dDsgY29uc3QgcHJlPXQoJ3RvZG9Qcm9taXNlJykoeC56aSk7IHJldHVybiBsYW5nKCk9PT0nZnInID8gcHJlLnJlcGxhY2UoLyBkZSQvLCcgJykrZGVGcih4LnRleHQpK3gudGV4dCA6IHByZSsnICcreC50ZXh0IH07CmZ1bmN0aW9uIHJlbmRlclRvZG8oKXsKICBjb25zdCBvcGVuPURBVEEudG9kb3MuZmlsdGVyKHg9PiF4LmRvbmUpLnNvcnQoKGEsYik9PmIuY3JlYXRlZC5sb2NhbGVDb21wYXJlKGEuY3JlYXRlZCkpOwogIGNvbnN0IGRvbmU9REFUQS50b2Rvcy5maWx0ZXIoeD0+eC5kb25lKS5zb3J0KChhLGIpPT4oYi5kb25lQXR8fCcnKS5sb2NhbGVDb21wYXJlKGEuZG9uZUF0fHwnJykpOwogIGNvbnN0IGl0ZW09eD0+YDxkaXYgY2xhc3M9InRvZG8gJHt4LmRvbmU\/J2RvbmUnOicnfSI+PGJ1dHRvbiBjbGFzcz0iY2siIGRhdGEtdGRvbmU9IiR7eC5pZH0iIGFyaWEtbGFiZWw9IiR7eC5kb25lP3QoJ21hcmtVbmRvbmUnKTp0KCdtYXJrRG9uZScpfSI+JHt4LmRvbmU\/Jzxzdmcgd2lkdGg9IjE0IiBoZWlnaHQ9IjE0IiB2aWV3Qm94PSIwIDAgMTQgMTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIuMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJtMyA3LjUgMi41IDIuNUwxMSA0LjUiLz48L3N2Zz4nOicnfTwvYnV0dG9uPgogICAgPGRpdiBjbGFzcz0idHQiPjxiPiR7ZXNjKHRvZG9UZXh0KHgpKX08L2I+PHNwYW4+JHt0KCdzcmMnKVt4LnNvdXJjZV18fCcnfSDCtyAke25ldyBEYXRlKHguY3JlYXRlZCkudG9Mb2NhbGVEYXRlU3RyaW5nKGxvYygpLHtkYXk6J251bWVyaWMnLG1vbnRoOidzaG9ydCd9KX08L3NwYW4+PC9kaXY+CiAgICAke3BlbmRpbmdEZWw9PT14LmlkP2A8c3BhbiBjbGFzcz0iY29uZmlybSI+PGJ1dHRvbiBjbGFzcz0iYnRuIGRhbmdlciIgc3R5bGU9IndpZHRoOmF1dG87cGFkZGluZzo0cHggMTBweCIgZGF0YS10ZGVsLXllcz0iJHt4LmlkfSI+JHt0KCdkZWwnKX08L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJsaW5rIiBkYXRhLWRlbC1ubz4ke3QoJ25vJyl9PC9idXR0b24+PC9zcGFuPmA6YDxidXR0b24gY2xhc3M9ImRlbCIgZGF0YS10ZGVsPSIke3guaWR9IiBhcmlhLWxhYmVsPSIke3QoJ2RlbCcpfSI+w5c8L2J1dHRvbj5gfTwvZGl2PmA7CiAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJ2aWV3Ij4KICAgIDxkaXY+PGgyPiR7dCgndG9kb1RpdGxlJyl9PC9oMj48cCBjbGFzcz0ibGVhZCI+JHt0KCd0b2RvTGVhZCcpfTwvcD48L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImFkZHJvdyI+PGlucHV0IHR5cGU9InRleHQiIGlkPSJ0b2RvTmV3IiBtYXhsZW5ndGg9IjI4MCIgZW50ZXJrZXloaW50PSJkb25lIiBwbGFjZWhvbGRlcj0iJHt0KCd0b2RvUGgnKX0iPjxidXR0b24gY2xhc3M9ImJ0biIgZGF0YS1hY3Q9InRvZG9BZGQiPiR7dCgnYWRkJyl9PC9idXR0b24+PC9kaXY+CiAgICAke29wZW4ubGVuZ3RoP29wZW4ubWFwKGl0ZW0pLmpvaW4oJycpOmA8ZGl2IGNsYXNzPSJlbXB0eSI+JHtoZXgoJ3NhbWFudGEnLDQ4KX08cD4ke3QoJ3RvZG9FbXB0eScpfTwvcD48L2Rpdj5gfQogICAgJHtkb25lLmxlbmd0aD9gPGJ1dHRvbiBjbGFzcz0ibGluayIgZGF0YS1hY3Q9InRvZG9Ub2dnbGVEb25lIiBzdHlsZT0iYWxpZ24tc2VsZjpmbGV4LXN0YXJ0Ij4ke3QoJ3Nob3dEb25lJykodG9kb1Nob3dEb25lLGRvbmUubGVuZ3RoKX08L2J1dHRvbj4ke3RvZG9TaG93RG9uZT9kb25lLm1hcChpdGVtKS5qb2luKCcnKTonJ31gOicnfQogIDwvZGl2PmA7Cn0KCi8qIC0tLS0tLS0tLS0gUHJhY3RpY2UgKHRpbWVyKSAtLS0tLS0tLS0tICovCmZ1bmN0aW9uIGNoaXBzKG5hbWUsIG9wdHMsIGN1ciwgZm10KXsgcmV0dXJuIGA8ZGl2IGNsYXNzPSJjaGlwcyIgcm9sZT0iZ3JvdXAiPiR7b3B0cy5tYXAodj0+YDxidXR0b24gY2xhc3M9ImNoaXAiIGRhdGEtc2V0PSIke25hbWV9IiBkYXRhLXZhbD0iJHt2fSIgYXJpYS1wcmVzc2VkPSIke3Y9PT1jdXJ9Ij4ke2ZtdCh2KX08L2J1dHRvbj5gKS5qb2luKCcnKX08L2Rpdj5gIH0KY29uc3Qga2luZFNlZyA9IChzLGJ1c3kpID0+IGA8ZGl2IGNsYXNzPSJzZWciIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSIke3QoJ2tpbmRBcmlhJyl9Ij4KICAgICAgPGJ1dHRvbiBkYXRhLXNldD0ia2luZCIgZGF0YS12YWw9Im1lZGl0YXRpZSIgYXJpYS1wcmVzc2VkPSIke3Mua2luZD09PSdtZWRpdGF0aWUnfSIgJHtidXN5PydkaXNhYmxlZCc6Jyd9PiR7S0lORC5tZWRpdGF0aWV9PC9idXR0b24+CiAgICAgIDxidXR0b24gZGF0YS1zZXQ9ImtpbmQiIGRhdGEtdmFsPSJ5b2dhIiBhcmlhLXByZXNzZWQ9IiR7cy5raW5kPT09J3lvZ2EnfSIgJHtidXN5PydkaXNhYmxlZCc6Jyd9PiR7S0lORC55b2dhfTwvYnV0dG9uPjwvZGl2PmA7CmZ1bmN0aW9uIHJlbmRlclByYWN0aWNhKCl7CiAgaWYgKHRhYiE9PSd0aW1lcicpIHJldHVybjsKICBjb25zdCBzPURBVEEuc2V0dGluZ3MsIGJ1c3k9WydwcmVwJywncnVuJywncGF1c2VkJ10uaW5jbHVkZXMoVC5waGFzZSk7CiAgaWYgKG1hbnVhbCl7ICQoJyNtYWluJykuaW5uZXJIVE1MPXJlbmRlck1hbnVhbCgpOyByZXR1cm4gfQogIGxldCBodG1sPSc8ZGl2IGNsYXNzPSJ2aWV3Ij4nK2tpbmRTZWcocyxidXN5KStgCiAgICA8ZGl2IGNsYXNzPSJkaWFsIiBpZD0iZGlhbCI+PHN2ZyB2aWV3Qm94PSIwIDAgMjQwIDI0MCI+PGNpcmNsZSBjbGFzcz0idHJhY2siIGN4PSIxMjAiIGN5PSIxMjAiIHI9IjExMCIgZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSI4Ii8+PGNpcmNsZSBjbGFzcz0icHJvZyIgY3g9IjEyMCIgY3k9IjEyMCIgcj0iMTEwIiBmaWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWRhc2hhcnJheT0iJHsyKk1hdGguUEkqMTEwfSIgc3Ryb2tlLWRhc2hvZmZzZXQ9IjAiLz48L3N2Zz4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIj48ZGl2IGNsYXNzPSJwaGFzZSI+PC9kaXY+PGRpdiBjbGFzcz0iY2xvY2siPjAwOjAwPC9kaXY+PGRpdiBjbGFzcz0ic3ViIj48L2Rpdj48L2Rpdj48L2Rpdj5gOwogIGlmIChULnBoYXNlPT09J2RvbmUnKXsKICAgIGNvbnN0IGU9REFUQS5lbnRyaWVzLmZpbmQoeD0+eC5pZD09PVQuc2F2ZWRJZCk7CiAgICBodG1sKz1gPGRpdiBjbGFzcz0iY2FyZCBkb25lIj48aDM+JHt0KCdkb25lSCcpfTwvaDM+PHAgY2xhc3M9Im5vdGUiPiR7dCgnZG9uZU5vdGUnKShLSU5EW2UudHlwZV0sZS5taW51dGVzKX08L3A+CiAgICAgIDxsYWJlbCBjbGFzcz0ibGFiZWwiIGZvcj0iZG9uZVRpdGxlIj4ke3QoJ3RpdGxlT3B0Jyl9PC9sYWJlbD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImRvbmVUaXRsZSIgbWF4bGVuZ3RoPSI4MCIgdmFsdWU9IiR7ZXNjKGUudGl0bGUpfSIgcGxhY2Vob2xkZXI9IiR7dCgncGhNb3JuaW5nJyl9Ij4KICAgICAgPGRpdiBjbGFzcz0iYnRucyI+PGJ1dHRvbiBjbGFzcz0iYnRuIiBkYXRhLWFjdD0ic2F2ZVRpdGxlIj4ke3QoJ3NhdmUnKX08L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJidG4gZ2hvc3QiIGRhdGEtYWN0PSJyZXNldCI+JHt0KCdhbm90aGVyJyl9PC9idXR0b24+PC9kaXY+PC9kaXY+YDsKICB9IGVsc2UgaWYgKFQucGhhc2U9PT0nc3RvcHBlZCcpewogICAgaHRtbCs9IFQuZG9uZU1pbj4wID8gYDxkaXYgY2xhc3M9ImNhcmQiPjxoMz4ke3QoJ3N0b3BwZWRBZnRlcicpKFQuZG9uZU1pbil9PC9oMz48cCBjbGFzcz0ibm90ZSI+JHt0KCd3YW50U2F2ZScpfTwvcD4KICAgICAgPGRpdiBjbGFzcz0iYnRucyI+PGJ1dHRvbiBjbGFzcz0iYnRuIiBkYXRhLWFjdD0ic2F2ZVBhcnRpYWwiPiR7dCgnc2F2ZU1pbicpKFQuZG9uZU1pbil9PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0iYnRuIGdob3N0IiBkYXRhLWFjdD0icmVzZXQiPiR7dCgnZG9udFNhdmUnKX08L2J1dHRvbj48L2Rpdj48L2Rpdj5gCiAgICAgIDogYDxkaXYgY2xhc3M9ImNhcmQiPjxoMz4ke3QoJ3N0b3BwZWQnKX08L2gzPjxidXR0b24gY2xhc3M9ImJ0biBnaG9zdCIgZGF0YS1hY3Q9InJlc2V0Ij4ke3QoJ2JhY2tQbGFpbicpfTwvYnV0dG9uPjwvZGl2PmA7CiAgfSBlbHNlIGlmIChidXN5KXsKICAgIGh0bWwrPWA8ZGl2IGNsYXNzPSJidG5zIj4ke1QucGhhc2U9PT0ncGF1c2VkJz9gPGJ1dHRvbiBjbGFzcz0iYnRuIiBkYXRhLWFjdD0icmVzdW1lIj4ke3QoJ3Jlc3VtZScpfTwvYnV0dG9uPmA6YDxidXR0b24gY2xhc3M9ImJ0biBzb2Z0IiBkYXRhLWFjdD0icGF1c2UiPiR7dCgncGF1c2UnKX08L2J1dHRvbj5gfTxidXR0b24gY2xhc3M9ImJ0biBnaG9zdCIgZGF0YS1hY3Q9InN0b3AiPiR7dCgnc3RvcCcpfTwvYnV0dG9uPjwvZGl2PgogICAgICA8cCBjbGFzcz0ibm90ZSI+JHt0KCdzY3JlZW5Ob3RlJyl9PC9wPmA7CiAgfSBlbHNlIHsKICAgIGh0bWwrPWA8ZGl2IGNsYXNzPSJjYXJkIj4KICAgICAgJHtzbGlkZXIoJ2R1clInLHQoJ2R1cmF0aW9uJyksMiw2MCwxLHMuZHVyLGR1ckxhYmVsKX0KICAgICAgJHtzbGlkZXIoJ3ByZXBSJyx0KCdwcmVwJyksMCwxODAsNSxzLnByZXAscHJlcExhYmVsLCdwcmVwJyl9CiAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+JHt0KCdzb3VuZCcpfTwvc3Bhbj4KICAgICAgPGRpdiBjbGFzcz0icm93Ij4ke2NoaXBzKCdzb3VuZCcsWydjbG9wb3RlbCcsJ2JvbCddLHMuc291bmQsdj0+dj09PSdib2wnP3QoJ2Jvd2wnKTp0KCdiZWxsJykpfTxidXR0b24gY2xhc3M9ImxpbmsiIGRhdGEtYWN0PSJ0ZXN0Ij4ke3QoJ2xpc3RlbicpfTwvYnV0dG9uPjwvZGl2PgogICAgICA8bGFiZWwgY2xhc3M9ImxhYmVsIiBmb3I9InRUaXRsZSI+JHt0KCd0aXRsZUNhcCcpfTwvbGFiZWw+PGlucHV0IHR5cGU9InRleHQiIGlkPSJ0VGl0bGUiIG1heGxlbmd0aD0iODAiIHBsYWNlaG9sZGVyPSIke3QoJ3BoU2lsZW5jZScpfSI+CiAgICA8L2Rpdj4KICAgIDxidXR0b24gY2xhc3M9ImJ0biIgZGF0YS1hY3Q9InN0YXJ0Ij4ke3QoJ2JlZ2luJyl9PC9idXR0b24+CiAgICA8YnV0dG9uIGNsYXNzPSJsaW5rIiBkYXRhLWFjdD0ibWFudWFsIiBzdHlsZT0iYWxpZ24tc2VsZjpjZW50ZXIiPiR7dCgnbWFudWFsTGluaycpfTwvYnV0dG9uPmA7CiAgfQogIGh0bWwrPSc8L2Rpdj4nOwogICQoJyNtYWluJykuaW5uZXJIVE1MPWh0bWw7IHBhaW50RGlhbCgpOwp9CmZ1bmN0aW9uIHJlbmRlck1hbnVhbCgpewogIGNvbnN0IHM9REFUQS5zZXR0aW5nczsKICByZXR1cm4gYDxkaXYgY2xhc3M9InZpZXciPjxkaXY+PGRpdiBjbGFzcz0iZXllYnJvdyI+JHt0KCdub1RpbWVyJyl9PC9kaXY+PGgyPiR7dCgnbG9nUHJhY3QnKX08L2gyPjwvZGl2PgogICAgPGRpdiBjbGFzcz0iY2FyZCI+CiAgICAgICR7a2luZFNlZyhzLGZhbHNlKX0KICAgICAgJHtzbGlkZXIoJ2R1clInLHQoJ2R1cmF0aW9uJyksMiw2MCwxLHMuZHVyLGR1ckxhYmVsKX0KICAgICAgPGxhYmVsIGNsYXNzPSJsYWJlbCIgZm9yPSJtRGF0ZSI+JHt0KCdkYXknKX08L2xhYmVsPjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0ibURhdGUiIHZhbHVlPSIke3RvZGF5S2V5KCl9IiBtYXg9IiR7dG9kYXlLZXkoKX0iPgogICAgICA8bGFiZWwgY2xhc3M9ImxhYmVsIiBmb3I9Im1UaXRsZSI+JHt0KCd0aXRsZUNhcCcpfTwvbGFiZWw+PGlucHV0IHR5cGU9InRleHQiIGlkPSJtVGl0bGUiIG1heGxlbmd0aD0iODAiIHBsYWNlaG9sZGVyPSIke3QoJ3BoRXZlbmluZycpfSI+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImJ0bnMiPjxidXR0b24gY2xhc3M9ImJ0biIgZGF0YS1hY3Q9InNhdmVNYW51YWwiPiR7dCgnc2F2ZUpvdXJuYWwnKX08L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJidG4gZ2hvc3QiIGRhdGEtYWN0PSJjYW5jZWxNYW51YWwiPiR7dCgnY2FuY2VsJyl9PC9idXR0b24+PC9kaXY+PC9kaXY+YDsKfQoKLyogLS0tLS0tLS0tLSBKb3VybmFsIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gZW50cnlIdG1sKGUsdG0pewogIGNvbnN0IGRlbD1gPGJ1dHRvbiBjbGFzcz0iZGVsIiBhcmlhLWxhYmVsPSIke3QoJ2RlbCcpfSIgZGF0YS1kZWw9IiR7ZS5pZH0iPsOXPC9idXR0b24+YDsKICBpZiAoZS50eXBlPT09J3VuZWx0ZScpIHJldHVybiB1bmVsdGVFbnRyeUh0bWwoZSx0bSxkZWwpOwogIGlmIChlLnR5cGU9PT0ncHV0ZXJpJykgcmV0dXJuIGA8ZGl2IGNsYXNzPSJlbnRyeSBwdXRlcmkgb3BlbiIgZGF0YS1vcGVucHV0PSIke2UuaWR9Ij4ke2hleCgncHV0ZXJpJywzMil9PGRpdiBjbGFzcz0idHh0Ij48Yj4ke2VzYyhlLnAxZXx8ZS5wMWF8fGUucDFifHxLSU5ELnB1dGVyaSl9JHtzaGFyZWRPZihlLmlkKT9gPHNwYW4gY2xhc3M9InNoYXJlZC10YWciPiR7dCgnc2hhcmVkVGFnJyl9PC9zcGFuPmA6Jyd9PC9iPjxzcGFuPiR7S0lORC5wdXRlcml9JHtlLnRlbWE\/JyDCtyAnK2VzYyh0ZW1hTGFiZWwoZS50ZW1hKSk6Jyd9IMK3ICR7dG19PC9zcGFuPjwvZGl2PiR7ZGVsfTwvZGl2PmA7CiAgaWYgKGUudHlwZT09PSdidWN1cmllJykgcmV0dXJuIGA8ZGl2IGNsYXNzPSJlbnRyeSBidWN1cmllIG9wZW4iIGRhdGEtb3BlbmJ1Yz0iJHtlLmlkfSI+JHtoZXgoJ2J1Y3VyaWUnLDMyKX08ZGl2IGNsYXNzPSJ0eHQiPjxiPiR7ZXNjKGUub2JpZWN0aXZ8fEtJTkQuYnVjdXJpZSl9JHtzaGFyZWRPZihlLmlkKT9gPHNwYW4gY2xhc3M9InNoYXJlZC10YWciPiR7dCgnc2hhcmVkVGFnJyl9PC9zcGFuPmA6Jyd9PC9iPjxzcGFuPiR7S0lORC5idWN1cmllfSDCtyAke3RtfTwvc3Bhbj48L2Rpdj4ke2RlbH08L2Rpdj5gOwogIGlmIChlLnR5cGU9PT0ncmVjdW5vc3RpbnRlJyl7CiAgICBjb25zdCBpdD1lLml0ZW1zfHxbXSwgbnI9aXQuZmlsdGVyKHg9Pnguaz09PSdyZWN1bm9zdGludGEnKS5sZW5ndGgsIG5zPWl0Lmxlbmd0aC1ucjsKICAgIHJldHVybiBgPGRpdiBjbGFzcz0iZW50cnkgcmVjdW5vc3RpbnRlIGNvbCI+JHtoZXgoJ3JlY3Vub3N0aW50ZScsMzIpfTxkaXYgY2xhc3M9InR4dCI+PGI+JHt0KCduUmVjJykobnIsbnMpfTwvYj48c3Bhbj4ke3RtfTwvc3Bhbj4KICAgICAgPHVsIGNsYXNzPSJpdGVtcyI+JHtpdC5tYXAoeD0+YDxsaT48c3BhbiBjbGFzcz0idGFnICR7eC5rfSI+JHt4Lms9PT0nc3VjY2VzJz90KCdzdWNjZXNzJyk6dCgnZ3JhdGl0dWRlJyl9PC9zcGFuPjxzcGFuPiR7cmVjUHJlKHguayl9ICR7ZXNjKHgudCl9PC9zcGFuPjwvbGk+YCkuam9pbignJyl9PC91bD4KICAgICAgPGJ1dHRvbiBjbGFzcz0ibGluayIgZGF0YS1zaGFyZT0iJHtlLmlkfSIgc3R5bGU9ImZvbnQtc2l6ZTouODJyZW07bWFyZ2luLXRvcDo2cHgiPiR7c2hhcmVkT2YoZS5pZCk\/dCgnc2hhcmVkQnRuJyk6dCgnc2hhcmVCdG4nKX08L2J1dHRvbj48L2Rpdj4ke2RlbH08L2Rpdj5gOwogIH0KICByZXR1cm4gYDxkaXYgY2xhc3M9ImVudHJ5ICR7ZS50eXBlfSI+JHtoZXgoZS50eXBlLDMyKX08ZGl2IGNsYXNzPSJ0eHQiPjxiPiR7ZXNjKGUudGl0bGV8fEtJTkRbZS50eXBlXSl9PC9iPjxzcGFuPiR7ZS50aXRsZT9LSU5EW2UudHlwZV0rJyDCtyAnOicnfSR7ZS5tYW51YWw\/dCgnbG9nZ2VkJyk6dG19PC9zcGFuPjwvZGl2PiR7ZS5taW51dGVzP2A8ZGl2IGNsYXNzPSJtaW4iPiR7ZS5taW51dGVzfeKAsjwvZGl2PmA6Jyd9JHtkZWx9PC9kaXY+YDsKfQpmdW5jdGlvbiBqU2VnKCl7IHJldHVybiBgPGRpdiBjbGFzcz0ic2VnIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iJHt0KCdzZWdBcmlhJyl9Ij48YnV0dG9uIGRhdGEtanZpZXc9Im1pbmUiIGFyaWEtcHJlc3NlZD0iJHtqVmlldz09PSdtaW5lJ30iPiR7dCgncGVyc29uYWwnKX08L2J1dHRvbj48YnV0dG9uIGRhdGEtanZpZXc9ImNvbW0iIGFyaWEtcHJlc3NlZD0iJHtqVmlldz09PSdjb21tJ30iPiR7dCgnY29tbXVuaXR5Jyl9PC9idXR0b24+PC9kaXY+YCB9CmZ1bmN0aW9uIHJlbmRlckp1cm5hbCgpewogIGlmIChqVmlldz09PSdjb21tJykgcmV0dXJuIHJlbmRlckNvbW0oKTsKICBjb25zdCB0eXBlcz1bJ3RvYXRlJywnbWVkaXRhdGllJywneW9nYScsJ2J1Y3VyaWUnLCdyZWN1bm9zdGludGUnLCdwdXRlcmknLCd1bmVsdGUnXTsKICBjb25zdCBsaXN0PURBVEEuZW50cmllcy5maWx0ZXIoZT0+akZpbHRlcj09PSd0b2F0ZSd8fGUudHlwZT09PWpGaWx0ZXIpLnNvcnQoKGEsYik9PmIuZGF0ZS5sb2NhbGVDb21wYXJlKGEuZGF0ZSkpOwogIGNvbnN0IHRvdE1pbj1saXN0LnJlZHVjZSgoYSxlKT0+YSsoZS5taW51dGVzfHwwKSwwKTsKICBsZXQgaHRtbD1gPGRpdiBjbGFzcz0idmlldyI+JHtqU2VnKCl9PGRpdj48aDI+JHt0KCdqb3VybmFsJyl9PC9oMj48cCBjbGFzcz0ibGVhZCI+JHt0KCduUHJhY3RpY2VzJykobGlzdC5sZW5ndGgpfSR7dG90TWluP3QoJ3RvdE1pbicpKHRvdE1pbik6Jyd9PC9wPjwvZGl2PgogICAgPGRpdiBjbGFzcz0iY2hpcHMiPiR7dHlwZXMubWFwKHg9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIiBkYXRhLWZpbHRlcj0iJHt4fSIgYXJpYS1wcmVzc2VkPSIke3g9PT1qRmlsdGVyfSI+JHt4PT09J3RvYXRlJz90KCdhbGwnKTpLSU5EW3hdfTwvYnV0dG9uPmApLmpvaW4oJycpfTwvZGl2PmA7CiAgaWYgKCFsaXN0Lmxlbmd0aCl7CiAgICBodG1sKz1gPGRpdiBjbGFzcz0iZW1wdHkiPiR7aGV4KCdzYW1hbnRhJyw1Nil9PHA+JHt0KCdqRW1wdHknKX08L3A+PGJ1dHRvbiBjbGFzcz0iYnRuIiBzdHlsZT0ibWF4LXdpZHRoOjI0MHB4IiBkYXRhLWdvPSJwcmFjdGljYSI+JHt0KCdnb1ByYWN0aWNlJyl9PC9idXR0b24+PC9kaXY+YDsKICB9IGVsc2UgewogICAgY29uc3QgZ3JvdXBzPXt9OyBsaXN0LmZvckVhY2goZT0+eyAoZ3JvdXBzW2RheUtleShlLmRhdGUpXT8\/PVtdKS5wdXNoKGUpIH0pOwogICAgT2JqZWN0LmtleXMoZ3JvdXBzKS5mb3JFYWNoKGs9PnsKICAgICAgY29uc3QgbT1ncm91cHNba10ucmVkdWNlKChhLGUpPT5hKyhlLm1pbnV0ZXN8fDApLDApOwogICAgICBodG1sKz1gPGRpdiBjbGFzcz0iZGF5Ij48aDQ+PHNwYW4+JHtlc2MoZm10RGF5KGspKX08L3NwYW4+PHNwYW4+JHttP20rJyAnK3QoJ3VuaXRNaW4nKTonJ308L3NwYW4+PC9oND5gOwogICAgICBncm91cHNba10uZm9yRWFjaChlPT57CiAgICAgICAgY29uc3QgdG09bmV3IERhdGUoZS5kYXRlKS50b0xvY2FsZVRpbWVTdHJpbmcobG9jKCkse2hvdXI6JzItZGlnaXQnLG1pbnV0ZTonMi1kaWdpdCd9KTsKICAgICAgICBodG1sKz0gcGVuZGluZ0RlbD09PWUuaWQKICAgICAgICAgID8gYDxkaXYgY2xhc3M9ImVudHJ5Ij48ZGl2IGNsYXNzPSJjb25maXJtIj48c3Bhbj4ke3QoJ2RlbFEnKX08L3NwYW4+PGJ1dHRvbiBjbGFzcz0iYnRuIGRhbmdlciIgc3R5bGU9IndpZHRoOmF1dG87cGFkZGluZzo2cHggMTJweCIgZGF0YS1kZWwteWVzPSIke2UuaWR9Ij4ke3QoJ2RlbCcpfTwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImxpbmsiIGRhdGEtZGVsLW5vPiR7dCgnbm8nKX08L2J1dHRvbj48L2Rpdj48L2Rpdj5gCiAgICAgICAgICA6IGVudHJ5SHRtbChlLHRtKTsKICAgICAgfSk7CiAgICAgIGh0bWwrPSc8L2Rpdj4nOwogICAgfSk7CiAgfQogIHJldHVybiBodG1sKyc8L2Rpdj4nOwp9CmZ1bmN0aW9uIHJlbmRlckdhdGUoKXsKICByZXR1cm4gYDxkaXYgY2xhc3M9InZpZXciPjxkaXYgY2xhc3M9ImNhcmQgZ2F0ZSI+JHtoZXgoJ3NhbWFudGEnLDU2KX08aDI+JHt0KCdhcHBOYW1lJyl9PC9oMj4KICAgIDxwIGNsYXNzPSJsZWFkIj4ke3QoJ2dhdGVMZWFkJyl9PC9wPgogICAgPGEgY2xhc3M9ImJ0biIgaHJlZj0iJHtlc2MoQ09ORklHLmxvZ2luVXJsKX0iIHRhcmdldD0iX3RvcCIgb25jbGljaz0iZG9jdW1lbnQuY29va2llPSdnc19yZXR1cm49MTtwYXRoPS87bWF4LWFnZT0xODAwO1NhbWVTaXRlPUxheCciIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246bm9uZTttYXgtd2lkdGg6MjgwcHgiPiR7dCgnc2lnbkluJyl9PC9hPgogICAgJHtDT05GSUcucmVnaXN0ZXJVcmw\/YDxhIGNsYXNzPSJsaW5rIiBocmVmPSIke2VzYyhDT05GSUcucmVnaXN0ZXJVcmwpfSIgdGFyZ2V0PSJfdG9wIj4ke3QoJ3JlZ2lzdGVyJyl9PC9hPmA6Jyd9PC9kaXY+PC9kaXY+YDsKfQoKLyogLS0tLS0tLS0tLSBMYW5ndWFnZSBzaGVldCAtLS0tLS0tLS0tICovCmZ1bmN0aW9uIHJlbmRlckxhbmdTaGVldCgpewogIGxldCBzPSQoJyNsYW5nU2hlZXQnKTsgaWYocykgcy5yZW1vdmUoKTsgaWYoIWxhbmdPcGVuKSByZXR1cm47CiAgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgcy5pZD0nbGFuZ1NoZWV0Jzsgcy5jbGFzc05hbWU9J3NoZWV0LWJnJzsKICBzLmlubmVySFRNTD1gPGRpdiBjbGFzcz0ib2JqcGFuZWwgc2hvcnQiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbD0iJHt0KCdsYW5ndWFnZScpfSI+PGRpdiBjbGFzcz0iZ3JhYiI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJ0b3AiPjxoMz4ke3QoJ2xhbmd1YWdlJyl9PC9oMz48YnV0dG9uIGNsYXNzPSJ4IiBkYXRhLWxhbmctY2xvc2UgYXJpYS1sYWJlbD0iJHt0KCdjbG9zZScpfSI+w5c8L2J1dHRvbj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImxhbmdsaXN0Ij4ke0xBTkdTLm1hcCgoW2Msbl0pPT57IGNvbnN0IG9rPVJFQURZLmluY2x1ZGVzKGMpOyByZXR1cm4gYDxidXR0b24gZGF0YS1sYW5nPSIke2N9IiBhcmlhLXByZXNzZWQ9IiR7bGFuZygpPT09Y30iICR7b2s\/Jyc6J2Rpc2FibGVkJ30+PHNwYW4+JHtufTwvc3Bhbj4ke29rPyhsYW5nKCk9PT1jPyc8c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+4pyTPC9zcGFuPic6JycpOmA8c21hbGw+JHt0KCdzb29uJyl9PC9zbWFsbD5gfTwvYnV0dG9uPmAgfSkuam9pbignJyl9PC9kaXY+PC9kaXY+YDsKICAkKCcuYXBwJykuYXBwZW5kQ2hpbGQocyk7Cn0KZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGU9PnsKICBpZiAoZS50YXJnZXQuY2xvc2VzdCgnI2xhbmdCdG4nKSl7IGxhbmdPcGVuPXRydWU7IHJlbmRlckxhbmdTaGVldCgpOyByZXR1cm4gfQogIGNvbnN0IHNoPWUudGFyZ2V0LmNsb3Nlc3QoJyNsYW5nU2hlZXQnKTsgaWYoIXNoKSByZXR1cm47CiAgY29uc3QgYj1lLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1sYW5nXScpOwogIGlmIChiICYmICFiLmRpc2FibGVkKXsgaWYodGFiPT09J3JlY3Vub3N0aW50ZScmJnJlY1Jvd3MpIHJlY0NhcHR1cmUoKTsgcENhcHR1cmUoKTsgREFUQS5zZXR0aW5ncy5sYW5nPWIuZGF0YXNldC5sYW5nOyBwZXJzaXN0KCk7IGxhbmdPcGVuPWZhbHNlOyByZW5kZXJMYW5nU2hlZXQoKTsgcmVuZGVyKCk7IGlmKHNoYXJlT3BlbikgcmVuZGVyU2hhcmUoKTsgcmV0dXJuIH0KICBpZiAoZS50YXJnZXQ9PT1zaCB8fCBlLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1sYW5nLWNsb3NlXScpKXsgbGFuZ09wZW49ZmFsc2U7IHJlbmRlckxhbmdTaGVldCgpIH0KfSk7CgpmdW5jdGlvbiBjaHJvbWUoKXsKICBjb25zdCBsPWxhbmcoKTsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lmxhbmc9bDsKICBkb2N1bWVudC50aXRsZT10KCdhcHBOYW1lJyk7ICQoJyNhcHBOYW1lJykudGV4dENvbnRlbnQ9dCgnYXBwTmFtZScpOwogICQoJyNsYW5nQ29kZScpLnRleHRDb250ZW50PShMQU5HUy5maW5kKHg9PnhbMF09PT1sKXx8TEFOR1NbMF0pWzJdOwogICQoJyNsYW5nQnRuJykuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJyx0KCdsYW5ndWFnZScpKTsKICBjb25zdCBibD0kKCcjYmFja0xpbmsnKTsgYmwudGV4dENvbnRlbnQ9dCgnY291cnNlcycpOyBibC5ocmVmPUNPTkZJRy5jb3Vyc2VzVXJsOwogICQoJyNuYXYnKS5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLHQoJ21lbnUnKSk7CiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI25hdiBbZGF0YS1pXScpLmZvckVhY2goZWw9PmVsLnRleHRDb250ZW50PXQoZWwuZGF0YXNldC5pKSk7Cn0KZnVuY3Rpb24gcmVuZGVyKCl7CiAgY2hyb21lKCk7CiAgaWYgKENPTkZJRy5sb2dpbkdhdGUgJiYgIWRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdsb2dnZWQtaW4nKSl7ICQoJyNtYWluJykuaW5uZXJIVE1MPXJlbmRlckdhdGUoKTsgJCgnI25hdicpLmhpZGRlbj10cnVlOyByZXR1cm4gfQogIGNvbnN0IG5hdlRhYiA9IFsndGltZXInLCdyZWN1bm9zdGludGUnLCdidWN1cmllJywncHV0ZXJpJ10uaW5jbHVkZXModGFiKT8ncHJhY3RpY2EnOnRhYjsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjbmF2IGJ1dHRvbicpLmZvckVhY2goYj0+eyBpZihiLmRhdGFzZXQudGFiPT09bmF2VGFiKSBiLnNldEF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JywncGFnZScpOyBlbHNlIGIucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWN1cnJlbnQnKSB9KTsKICBicmVhdGhULmZvckVhY2goY2xlYXJUaW1lb3V0KTsgYnJlYXRoVD1bXTsKICBjb25zdCBtPSQoJyNtYWluJyk7CiAgaWYgKHRhYj09PSdhemknKSBtLmlubmVySFRNTD1yZW5kZXJBemkoKTsKICBlbHNlIGlmICh0YWI9PT0nYnVjdXJpZScpIG0uaW5uZXJIVE1MPXJlbmRlckJ1Y3VyaWUoKTsKICBlbHNlIGlmICh0YWI9PT0ncmVjdW5vc3RpbnRlJykgbS5pbm5lckhUTUw9cmVuZGVyUmVjdW5vc3RpbnRlKCk7CiAgZWxzZSBpZiAodGFiPT09J3RvZG8nKSBtLmlubmVySFRNTD1yZW5kZXJUb2RvKCk7CiAgZWxzZSBpZiAodGFiPT09J3B1dGVyaScpIG0uaW5uZXJIVE1MPXJlbmRlclB1dGVyaSgpOwogIGVsc2UgaWYgKHRhYj09PSdqdXJuYWwnKSBtLmlubmVySFRNTD1yZW5kZXJKdXJuYWwoKTsKICBlbHNlIGlmICh0YWI9PT0ncHJhY3RpY2EnKSBtLmlubmVySFRNTD1yZW5kZXJIdWIoKTsKICBlbHNlIGlmICh0YWI9PT0ncHJvZmlsJykgbS5pbm5lckhUTUw9cmVuZGVyUHJvZmlsKCk7CiAgZWxzZSByZW5kZXJQcmFjdGljYSgpOwp9CgovKiA9PT09PT09PT09PT0gQ29tbXVuaXR5ID09PT09PT09PT09PQogICBFYWNoIHBlcnNvbiBjaG9vc2VzIHdoYXQgdG8gc2hhcmUgKGpveSBtZWRpdGF0aW9uLCBncmF0aXR1ZGUvc3VjY2Vzc2VzLCB0aGUgNCBwb3dlcnMpLCB1bmRlciBhIG5hbWUgb2YgdGhlaXIgY2hvaWNlLgogICBBIGNvcHkgb2YgdGhlIHRleHQgaXMgcHVibGlzaGVkLCBub3QgdGhlIGVudHJ5IGl0c2VsZjsgd2l0aGRyYXdpbmcgcmVtb3ZlcyBpdCBmcm9tIHRoZSBjb21tdW5pdHkuCiAgIE9uIHRoZSBzaXRlLCBldmVyeW9uZSdzIHBvc3RzIGNvbWUgZnJvbSB0aGUgc2VydmVyOyBpbiB0aGUgdGVzdCB2ZXJzaW9uIHRoZSBjb21tdW5pdHkgc2hvd3MgYSBmZXcgZXhhbXBsZXMuICovCmNvbnN0IFNIQVJFQUJMRT1bJ2J1Y3VyaWUnLCdyZWN1bm9zdGludGUnLCdwdXRlcmknXTsKbGV0IHNoYXJlT3Blbj1udWxsLCBzaGFyZVNlbD17fSwgbmFtZURyYWZ0PW51bGwsIG9wZW5Qb3N0PXt9Owpjb25zdCBDQz17cG9zdHM6W10sbG9hZGVkOmZhbHNlLGJsb2NrZWQ6ZmFsc2V9Owphc3luYyBmdW5jdGlvbiBhcGlDKHBhdGgsb3B0PXt9KXsKICBjb25zdCByPWF3YWl0IGZldGNoKENPTkZJRy5hcGkucm9vdCsnZ3JhZGluYS92MS8nK3BhdGgse2NyZWRlbnRpYWxzOidzYW1lLW9yaWdpbicsbWV0aG9kOm9wdC5tZXRob2R8fCdHRVQnLGhlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi9qc29uJywnWC1XUC1Ob25jZSc6Q09ORklHLmFwaS5ub25jZX0sYm9keTpvcHQuYm9keT9KU09OLnN0cmluZ2lmeShvcHQuYm9keSk6dW5kZWZpbmVkfSk7CiAgbGV0IGo9bnVsbDsgdHJ5eyBqPWF3YWl0IHIuanNvbigpIH1jYXRjaCh4KXt9CiAgaWYoIXIub2speyBjb25zdCBlcnJzPXQoJ2VycicpOyB0aHJvdyBuZXcgRXJyb3IoKGomJmouY29kZSYmZXJyc1tqLmNvZGVdKXx8dCgnYXBpRmFpbCcpKSB9CiAgcmV0dXJuIGo7Cn0KYXN5bmMgZnVuY3Rpb24gY29tbUxvYWQoKXsKICBpZighQ09ORklHLmFwaSkgcmV0dXJuOwogIHRyeXsgY29uc3Qgaj1hd2FpdCBhcGlDKCdjb21tdW5pdHknKTsgQ0MucG9zdHM9ai5wb3N0c3x8W107IENDLmJsb2NrZWQ9ISFqLmJsb2NrZWQ7IENDLmxvYWRlZD10cnVlOwogICAgaWYoai5uYW1lICYmIGoubmFtZSE9PURBVEEuY29tbS5uYW1lKXsgREFUQS5jb21tLm5hbWU9ai5uYW1lIH0KICAgIGNvbnN0IG1pbmU9ai5taW5lfHxbXTsgY29uc3QgYmVmb3JlPURBVEEuY29tbS5wb3N0cy5sZW5ndGg7IERBVEEuY29tbS5wb3N0cz1EQVRBLmNvbW0ucG9zdHMuZmlsdGVyKHg9Pm1pbmUuaW5jbHVkZXMoeC5pZCkpOyBpZihiZWZvcmUhPT1EQVRBLmNvbW0ucG9zdHMubGVuZ3RoKSBwZXJzaXN0KCk7CiAgICBpZih0YWI9PT0nYXppJ3x8dGFiPT09J2p1cm5hbCcpIHJlbmRlcigpOwogIH1jYXRjaChlKXt9Cn0KYXN5bmMgZnVuY3Rpb24gc2V0TmFtZSh2KXsKICB2PVN0cmluZyh2fHwnJykudHJpbSgpOyBpZih2Lmxlbmd0aDwyKXsgdG9hc3QodCgnbmFtZVNob3J0JykpOyByZXR1cm4gZmFsc2UgfQogIGlmKENPTkZJRy5hcGkpeyB0cnl7IGNvbnN0IGo9YXdhaXQgYXBpQygnY29tbXVuaXR5L25hbWUnLHttZXRob2Q6J1BPU1QnLGJvZHk6e25hbWU6dn19KTsgdj1qLm5hbWUgfWNhdGNoKGUpeyB0b2FzdChlLm1lc3NhZ2UpOyByZXR1cm4gZmFsc2UgfSB9CiAgREFUQS5jb21tLm5hbWU9djsgREFUQS5jb21tLnBvc3RzLmZvckVhY2gocD0+cC5uYW1lPXYpOyBDQy5wb3N0cy5mb3JFYWNoKHA9PnsgaWYocC5taW5lKSBwLm5hbWU9diB9KTsgcGVyc2lzdCgpOyByZXR1cm4gdHJ1ZTsKfQpjb25zdCBzaGFyZWRPZiA9IGlkID0+IERBVEEuY29tbS5wb3N0cy5maW5kKHA9PnAuZnJvbT09PWlkKTsKLyogY29tbXVuaXR5IGxhbmd1YWdlOiBvbmx5IHRoZSBwb3N0cyB3cml0dGVuIGluIG15IGxhbmd1YWdlLCBvciBhbGwgbGFuZ3VhZ2VzIChwb3N0cyBmcm9tIGJlZm9yZSB0aGlzIG9wdGlvbiBjb3VudCBhcyBFbmdsaXNoKSAqLwpjb25zdCBjb21tQWxsTGFuZ3MgPSAoKSA9PiBEQVRBLnNldHRpbmdzLmNvbW1MYW5nPT09J2FsbCc7CmNvbnN0IHBvc3RMYW5nID0gcCA9PiBwLmxhbmcgfHwgJ2VuJzsKY29uc3QgY29tbVBvc3RzQWxsID0gKCkgPT4gQ09ORklHLmFwaSA\/IENDLnBvc3RzLmZpbHRlcihwPT4hREFUQS5jb21tLmhpZGRlbltwLmlkXSkKICA6IFsuLi5EQVRBLmNvbW0ucG9zdHMubWFwKHA9Pih7Li4ucCxtaW5lOnRydWV9KSksIC4uLk9iamVjdC52YWx1ZXMoREVNT19MKS5mbGF0KCldLmZpbHRlcihwPT4hREFUQS5jb21tLmhpZGRlbltwLmlkXSkuc29ydCgoYSxiKT0+Yi5kYXRlLmxvY2FsZUNvbXBhcmUoYS5kYXRlKSk7CmNvbnN0IGNvbW1Qb3N0cyA9ICgpID0+IGNvbW1BbGxMYW5ncygpID8gY29tbVBvc3RzQWxsKCkgOiBjb21tUG9zdHNBbGwoKS5maWx0ZXIocD0+cC5taW5lIHx8IHBvc3RMYW5nKHApPT09bGFuZygpKTsKY29uc3QgYXNHZW4gPSAoZyxmbikgPT4geyBjb25zdCBrPURBVEEuc2V0dGluZ3MuZ2VuOyBEQVRBLnNldHRpbmdzLmdlbj1nfHwnZic7IHRyeXsgcmV0dXJuIGZuKCkgfSBmaW5hbGx5IHsgREFUQS5zZXR0aW5ncy5nZW49ayB9IH07CmNvbnN0IGluaXRpYWwgPSBuID0+IGVzYygoU3RyaW5nKG58fCc\/JykudHJpbSgpWzBdfHwnPycpLnRvVXBwZXJDYXNlKCkpOwpjb25zdCByZWFjdE9mID0gdHlwZSA9PiB0eXBlPT09J3B1dGVyaScgPyB7bGFiZWw6dCgncmVhY3RQb3cnKSxjb3VudDp0KCdjb3VudFBvdycpLHRvYXN0OnQoJ3RvYXN0UG93Jyl9IDoge2xhYmVsOnQoJ3JlYWN0Sm95JyksY291bnQ6dCgnY291bnRKb3knKSx0b2FzdDp0KCd0b2FzdEpveScpfTsKZnVuY3Rpb24gc25hcHNob3QoZSwgc2VsKXsKICBjb25zdCBiYXNlPXtmcm9tOmUuaWQsdHlwZTplLnR5cGUsZGF0ZTplLmRhdGUsZ2VuOkRBVEEuc2V0dGluZ3MuZ2VufHwnZicsbGFuZzpsYW5nKCl9OwogIGlmKGUudHlwZT09PSdwdXRlcmknKSByZXR1cm4gey4uLmJhc2UsIHY6ZS52LCB6aTplLnppLCB0ZW1hOmUudGVtYXx8JycsIHAxYTplLnAxYSxwMWI6ZS5wMWIscDFlOmUucDFlLHAyOmUucDIscDM6ZS5wMyxwNDplLnA0fTsKICBpZihlLnR5cGU9PT0nYnVjdXJpZScpeyBjb25zdCBxPXt9OyBRX0tFWVMuZm9yRWFjaChrPT57IGlmKHNlbFtrXSYmZVtrXSkgcVtrXT1lW2tdIH0pOyByZXR1cm4gey4uLmJhc2UscX0gfQogIHJldHVybiB7Li4uYmFzZSwgaXRlbXM6KGUuaXRlbXN8fFtdKS5maWx0ZXIoKHgsaSk9PnNlbFtpXSl9Owp9CmZ1bmN0aW9uIHBvc3RCb2R5KHApewogIGlmKHAudHlwZT09PSdyZWN1bm9zdGludGUnKSByZXR1cm4gYXNHZW4ocC5nZW4sKCk9PmA8ZGl2IGNsYXNzPSJib2R5Ij4keyhwLml0ZW1zfHxbXSkubWFwKHg9PmA8cD48c3BhbiBjbGFzcz0idGFnICR7eC5rfSIgc3R5bGU9ImZvbnQtc2l6ZTouNjZyZW07bGV0dGVyLXNwYWNpbmc6LjA2ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjoke3guaz09PSdzdWNjZXMnPyd2YXIoLS1zb2lsKSc6J3ZhcigtLW1vc3MpJ30iPiR7eC5rPT09J3N1Y2Nlcyc\/dCgnc3VjY2VzcycpOnQoJ2dyYXRpdHVkZScpfTwvc3Bhbj48YnI+JHtyZWNQcmUoeC5rKX0gJHtlc2MoeC50KX08L3A+YCkuam9pbignJyl9PC9kaXY+YCk7CiAgaWYocC50eXBlPT09J2J1Y3VyaWUnKXsgY29uc3QgUT10eCgpLnFKb3k7IHJldHVybiBgPGRpdiBjbGFzcz0iYm9keSI+JHtRX0tFWVMuZmlsdGVyKGs9PnAucSYmcC5xW2tdKS5tYXAoaz0+YDxkaXYgY2xhc3M9InFsIj4ke1Fba119PC9kaXY+PHA+JHtlc2MocC5xW2tdKX08L3A+YCkuam9pbignJyl9PC9kaXY+YCB9CiAgY29uc3QgZnVsbD0hIW9wZW5Qb3N0W3AuaWRdOwogIHJldHVybiBhc0dlbihwLmdlbiwoKT0+YDxkaXYgY2xhc3M9ImJvZHkiPiR7cC50ZW1hP2A8c3BhbiBjbGFzcz0idGFnLXRlbWEiPiR7ZXNjKHRlbWFMYWJlbChwLnRlbWEpKX08L3NwYW4+IGA6Jyd9PGRpdiBjbGFzcz0icWwiPiR7UFZrKHAudikubmFtZSgpfTwvZGl2PgogICAgJHsoZnVsbD9QT1dFUl9LRVlTOlBPV0VSX0tFWVMuc2xpY2UoMCwxKSkubWFwKGs9PnsgY29uc3QgW24sdGldPVBXKGspOyByZXR1cm4gYDxoND4ke259IMK3ICR7dGl9PC9oND4ke3BSZWNhcChrLHApfWAgfSkuam9pbignJyl9PC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJtb3JlIiBkYXRhLW1vcmU9IiR7cC5pZH0iPiR7ZnVsbD90KCdzaG93TGVzcycpOnQoJ3JlYWRGdWxsJyl9PC9idXR0b24+YCk7Cn0KZnVuY3Rpb24gcG9zdEh0bWwocCl7CiAgY29uc3Qgcj1yZWFjdE9mKHAudHlwZSksIG9uPUNPTkZJRy5hcGk\/ISFwLnJlYWN0ZWQ6ISFEQVRBLmNvbW0ucmVhY3RlZFtwLmlkXSwgbj1DT05GSUcuYXBpPyhwLnJlYWN0c3x8MCk6KHAucmVhY3RzfHwwKSsob24\/MTowKTsKICBjb25zdCBkdD1uZXcgRGF0ZShwLmRhdGUpLnRvTG9jYWxlRGF0ZVN0cmluZyhsb2MoKSx7ZGF5OidudW1lcmljJyxtb250aDonbG9uZyd9KTsKICByZXR1cm4gYDxhcnRpY2xlIGNsYXNzPSJwb3N0Ij48ZGl2IGNsYXNzPSJ3aG8iPjxzcGFuIGNsYXNzPSJhdiAke3AubWluZT8nbWUnOicnfSIgYXJpYS1oaWRkZW49InRydWUiPiR7aW5pdGlhbChwLm5hbWUpfTwvc3Bhbj48ZGl2PjxiPiR7ZXNjKHAubmFtZSl9JHtwLm1pbmU\/YCA8c3BhbiBjbGFzcz0ic2hhcmVkLXRhZyI+JHt0KCd5b3UnKX08L3NwYW4+YDonJ308L2I+PHNwYW4+JHtkdH08L3NwYW4+PC9kaXY+PHNwYW4gY2xhc3M9ImtpbmQiPiR7cG9zdExhbmcocCkhPT1sYW5nKCk\/YDxzcGFuIGNsYXNzPSJsYW5nLXRhZyI+JHtwb3N0TGFuZyhwKS50b1VwcGVyQ2FzZSgpfTwvc3Bhbj4gYDonJ30ke0tJTkRbcC50eXBlXX08L3NwYW4+PC9kaXY+CiAgICAke3Bvc3RCb2R5KHApfQogICAgJHtwLnR5cGU9PT0ncHV0ZXJpJyYmb24mJiFwLm1pbmU\/YDxwIGNsYXNzPSJiYW5uZXIiIHN0eWxlPSJtYXJnaW46MCI+JHt0KCdnZXN0Tm90ZScpfTwvcD5gOicnfQogICAgPGRpdiBjbGFzcz0iYWN0cyI+JHtwLm1pbmU\/YDxzcGFuIGNsYXNzPSJjb3VudCI+JHtuP24rJyAnK3IuY291bnQ6dCgnbm9ib2R5WWV0Jyl9PC9zcGFuPjxidXR0b24gY2xhc3M9ImRvdHMiIGRhdGEtdW5zaGFyZT0iJHtwLmlkfSI+JHt0KCd3aXRoZHJhdycpfTwvYnV0dG9uPmAKICAgICAgOmA8YnV0dG9uIGNsYXNzPSJyZWFjdCIgZGF0YS1yZWFjdD0iJHtwLmlkfSIgYXJpYS1wcmVzc2VkPSIke29ufSI+JHtvbj8n4pyTICc6J+KZoSAnfSR7ci5sYWJlbH08L2J1dHRvbj48c3BhbiBjbGFzcz0iY291bnQiPiR7bj9uKycgJytyLmNvdW50OicnfTwvc3Bhbj48YnV0dG9uIGNsYXNzPSJkb3RzIiBkYXRhLXJlcG9ydD0iJHtwLmlkfSI+JHt0KCdyZXBvcnQnKX08L2J1dHRvbj5gfTwvZGl2PjwvYXJ0aWNsZT5gOwp9CmZ1bmN0aW9uIHJlbmRlckNvbW0oKXsKICBjb25zdCB0eXBlcz1bJ3RvYXRlJywuLi5TSEFSRUFCTEVdOwogIGNvbnN0IGxpc3Q9Y29tbVBvc3RzKCkuZmlsdGVyKHA9PmNGaWx0ZXI9PT0ndG9hdGUnfHxwLnR5cGU9PT1jRmlsdGVyKTsKICByZXR1cm4gYDxkaXYgY2xhc3M9InZpZXciPjxidXR0b24gY2xhc3M9ImxpbmsiIGRhdGEtZ289ImF6aSIgc3R5bGU9ImFsaWduLXNlbGY6ZmxleC1zdGFydCI+JHt0KCdiYWNrJyl9PC9idXR0b24+JHtqU2VnKCl9CiAgICA8ZGl2PjxoMj4ke3QoJ2NvbW1UaXRsZScpfTwvaDI+PHAgY2xhc3M9ImxlYWQiPiR7dCgnY29tbUxlYWQnKX08L3A+PC9kaXY+CiAgICAke0NPTkZJRy5hcGk\/Jyc6YDxkaXYgY2xhc3M9ImJhbm5lciI+JHt0KCdjb21tVGVzdEJhbm5lcicpfTwvZGl2PmB9CiAgICA8ZGl2IGNsYXNzPSJjaGlwcyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IiR7dCgnbGFuZ3VhZ2UnKX0iPjxidXR0b24gY2xhc3M9ImNoaXAiIGRhdGEtY2xhbmc9Im1pbmUiIGFyaWEtcHJlc3NlZD0iJHshY29tbUFsbExhbmdzKCl9Ij4ke3QoJ2xhbmdPbmx5Jyl9PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0iY2hpcCIgZGF0YS1jbGFuZz0iYWxsIiBhcmlhLXByZXNzZWQ9IiR7Y29tbUFsbExhbmdzKCl9Ij4ke3QoJ2xhbmdBbGwnKX08L2J1dHRvbj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNoaXBzIj4ke3R5cGVzLm1hcCh4PT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCIgZGF0YS1jZmlsdGVyPSIke3h9IiBhcmlhLXByZXNzZWQ9IiR7eD09PWNGaWx0ZXJ9Ij4ke3g9PT0ndG9hdGUnP3QoJ2FsbCcpOktJTkRbeF19PC9idXR0b24+YCkuam9pbignJyl9PC9kaXY+CiAgICAke0RBVEEuY29tbS5uYW1lP2A8cCBjbGFzcz0ibm90ZSI+JHt0KCdhcHBlYXJJbicpKGVzYyhEQVRBLmNvbW0ubmFtZSkpfSDCtyA8YnV0dG9uIGNsYXNzPSJsaW5rIiBkYXRhLWFjdD0ibmFtZUVkaXQiPiR7dCgnY2hhbmdlJyl9PC9idXR0b24+PC9wPmA6Jyd9CiAgICAke2xpc3QubGVuZ3RoP2xpc3QubWFwKHBvc3RIdG1sKS5qb2luKCcnKTpgPGRpdiBjbGFzcz0iZW1wdHkiPiR7aGV4KCdzYW1hbnRhJyw0OCl9PHA+JHtjb21tQWxsTGFuZ3MoKT90KCdjb21tRW1wdHknKTp0KCdjb21tRW1wdHlMYW5nJyl9PC9wPiR7Y29tbUFsbExhbmdzKCk\/Jyc6YDxidXR0b24gY2xhc3M9ImJ0biBzb2Z0IiBkYXRhLWNsYW5nPSJhbGwiIHN0eWxlPSJtYXgtd2lkdGg6MjYwcHgiPiR7dCgnbGFuZ0FsbCcpfTwvYnV0dG9uPmB9PC9kaXY+YH0KICA8L2Rpdj5gOwp9CmZ1bmN0aW9uIGluc3BvQ2FyZCgpewogIGNvbnN0IHA9Y29tbVBvc3RzKCkuZmluZCh4PT4heC5taW5lKTsgaWYoIXApIHJldHVybiAnJzsKICBsZXQgdHh0PScnOwogIGlmKHAudHlwZT09PSdyZWN1bm9zdGludGUnKSB0eHQ9YXNHZW4ocC5nZW4sKCk9PihwLml0ZW1zfHxbXSlbMF0\/cmVjUHJlKHAuaXRlbXNbMF0uaykrJyAnK3AuaXRlbXNbMF0udDonJyk7CiAgZWxzZSBpZihwLnR5cGU9PT0nYnVjdXJpZScpIHR4dD0ocC5xJiYocC5xLnNlbWludGV8fHAucS5vYmllY3RpdikpfHwnJzsKICBlbHNlIHR4dD0ocC50ZW1hP3RlbWFMYWJlbChwLnRlbWEpKyc6ICc6JycpKyhwLnAxZXx8cC5wMWF8fHAucDFifHwnJyk7CiAgaWYodHh0Lmxlbmd0aD4xNDApIHR4dD10eHQuc2xpY2UoMCwxMzcpLnRyaW0oKSsn4oCmJzsKICByZXR1cm4gYDxidXR0b24gY2xhc3M9Imluc3BvIiBkYXRhLWdvPSJqdXJuYWwiIGRhdGEtanY9ImNvbW0iPjxzcGFuIGNsYXNzPSJleWVicm93Ij4ke3QoJ2luc3BvSGVhZCcpKGVzYyhwLm5hbWUpKX08L3NwYW4+PHA+JHtlc2ModHh0KX08L3A+PHNwYW4+JHt0KCdpbnNwb01vcmUnKX08L3NwYW4+PC9idXR0b24+YDsKfQpmdW5jdGlvbiBzaGFyZUJ0bihlKXsKICBpZighU0hBUkVBQkxFLmluY2x1ZGVzKGUudHlwZSkpIHJldHVybiAnJzsKICByZXR1cm4gc2hhcmVkT2YoZS5pZCk\/YDxidXR0b24gY2xhc3M9ImJ0biBnaG9zdCIgZGF0YS1zaGFyZT0iJHtlLmlkfSI+JHt0KCdzaGFyZWRCdG4nKX08L2J1dHRvbj5gOmA8YnV0dG9uIGNsYXNzPSJidG4gc29mdCIgZGF0YS1zaGFyZT0iJHtlLmlkfSI+JHt0KCdzaGFyZUJ0bicpfTwvYnV0dG9uPmA7Cn0KZnVuY3Rpb24gb3BlblNoYXJlKGlkKXsKICBjb25zdCBlPURBVEEuZW50cmllcy5maW5kKHg9PnguaWQ9PT1pZCk7IGlmKCFlKSByZXR1cm47CiAgc2hhcmVPcGVuPWlkOyBuYW1lRHJhZnQ9bnVsbDsgc2hhcmVTZWw9e307CiAgaWYoZS50eXBlPT09J2J1Y3VyaWUnKSBRX0tFWVMuZm9yRWFjaChrPT57IHNoYXJlU2VsW2tdPSBrIT09J2FqdXRvcicgJiYgISFlW2tdIH0pOwogIGlmKGUudHlwZT09PSdyZWN1bm9zdGludGUnKSAoZS5pdGVtc3x8W10pLmZvckVhY2goKHgsaSk9PnNoYXJlU2VsW2ldPXRydWUpOwogIHJlbmRlclNoYXJlKCk7Cn0KZnVuY3Rpb24gcmVuZGVyU2hhcmUoKXsKICBsZXQgcz0kKCcjc2hhcmVTaGVldCcpOyBpZihzKSBzLnJlbW92ZSgpOyBpZighc2hhcmVPcGVuKSByZXR1cm47CiAgaWYoc2hhcmVPcGVuPT09J19fbmFtZScpewogICAgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgcy5pZD0nc2hhcmVTaGVldCc7IHMuY2xhc3NOYW1lPSdzaGVldC1iZyc7CiAgICBzLmlubmVySFRNTD1gPGRpdiBjbGFzcz0ib2JqcGFuZWwgc2hvcnQiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbD0iJHt0KCduYW1lTGFiZWwnKX0iPjxkaXYgY2xhc3M9ImdyYWIiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ0b3AiPjxoMz4ke3QoJ25hbWVMYWJlbCcpfTwvaDM+PGJ1dHRvbiBjbGFzcz0ieCIgZGF0YS1zaGFyZS1jbG9zZSBhcmlhLWxhYmVsPSIke3QoJ2Nsb3NlJyl9Ij7DlzwvYnV0dG9uPjwvZGl2PgogICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImNvbW1OYW1lIiBtYXhsZW5ndGg9IjMwIiB2YWx1ZT0iJHtlc2MobmFtZURyYWZ0Pz8nJyl9IiBwbGFjZWhvbGRlcj0iJHt0KCduYW1lUGgnKX0iPgogICAgICA8cCBjbGFzcz0ibm90ZSI+JHt0KCduYW1lU2hlZXROb3RlJyl9PC9wPgogICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIGRhdGEtYWN0PSJuYW1lU2F2ZSI+JHt0KCdzYXZlJyl9PC9idXR0b24+PC9kaXY+YDsKICAgICQoJy5hcHAnKS5hcHBlbmRDaGlsZChzKTsgcmV0dXJuOwogIH0KICBjb25zdCBlPURBVEEuZW50cmllcy5maW5kKHg9PnguaWQ9PT1zaGFyZU9wZW4pOyBpZighZSl7IHNoYXJlT3Blbj1udWxsOyByZXR1cm4gfQogIGNvbnN0IHNoPXNoYXJlZE9mKGUuaWQpLCBuZWVkTmFtZT0hREFUQS5jb21tLm5hbWV8fG5hbWVEcmFmdCE9PW51bGw7CiAgbGV0IHBpY2s9Jyc7CiAgaWYoZS50eXBlPT09J2J1Y3VyaWUnKXsgY29uc3QgUT10eCgpLnFKb3k7IHBpY2s9UV9LRVlTLmZpbHRlcihrPT5lW2tdKS5tYXAoaz0+YDxsYWJlbCBjbGFzcz0iY2hrIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGRhdGEtc2VsPSIke2t9IiAke3NoYXJlU2VsW2tdPydjaGVja2VkJzonJ30+PHNwYW4+PHNwYW4gY2xhc3M9InFsIj4ke1Fba119PC9zcGFuPiR7ZXNjKGVba10pfTwvc3Bhbj48L2xhYmVsPmApLmpvaW4oJycpIH0KICBpZihlLnR5cGU9PT0ncmVjdW5vc3RpbnRlJykgcGljaz0oZS5pdGVtc3x8W10pLm1hcCgoeCxpKT0+YDxsYWJlbCBjbGFzcz0iY2hrIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGRhdGEtc2VsPSIke2l9IiAke3NoYXJlU2VsW2ldPydjaGVja2VkJzonJ30+PHNwYW4+JHtyZWNQcmUoeC5rKX0gJHtlc2MoeC50KX08L3NwYW4+PC9sYWJlbD5gKS5qb2luKCcnKTsKICBpZihlLnR5cGU9PT0ncHV0ZXJpJykgcGljaz1gPGRpdiBjbGFzcz0icG9zdCIgc3R5bGU9ImJvcmRlcjowO3BhZGRpbmc6MCI+JHtwb3N0Qm9keSh7Li4uc25hcHNob3QoZSx7fSksaWQ6J3ByZXZpZXcnfSl9PC9kaXY+YDsKICBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBzLmlkPSdzaGFyZVNoZWV0Jzsgcy5jbGFzc05hbWU9J3NoZWV0LWJnJzsKICBzLmlubmVySFRNTD1gPGRpdiBjbGFzcz0ib2JqcGFuZWwiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbD0iJHt0KCdzaGFyZUJ0bicpfSI+PGRpdiBjbGFzcz0iZ3JhYiI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJ0b3AiPjxoMz4ke3NoP3QoJ3NoZWV0U2hhcmVkJyk6dCgnc2hhcmVCdG4nKX08L2gzPjxidXR0b24gY2xhc3M9IngiIGRhdGEtc2hhcmUtY2xvc2UgYXJpYS1sYWJlbD0iJHt0KCdjbG9zZScpfSI+w5c8L2J1dHRvbj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNoYXJlYm94Ij4KICAgICR7Q0MuYmxvY2tlZCYmIXNoP2A8cCBjbGFzcz0iYmFubmVyIj4ke3QoJ2Jsb2NrZWROb3RlJyl9PC9wPmA6Jyd9CiAgICAke3NoP2A8cCBjbGFzcz0ibm90ZSI+JHt0KCdzaGVldFNoYXJlZE5vdGUnKShlc2MoREFUQS5jb21tLm5hbWV8fHNoLm5hbWV8fCcnKSl9PC9wPmAKICAgIDpgJHtuZWVkTmFtZT9gPGRpdiBjbGFzcz0icSI+PGxhYmVsIGZvcj0iY29tbU5hbWUiPiR7dCgnbmFtZUxhYmVsJyl9PC9sYWJlbD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImNvbW1OYW1lIiBtYXhsZW5ndGg9IjMwIiB2YWx1ZT0iJHtlc2MobmFtZURyYWZ0Pz9EQVRBLmNvbW0ubmFtZT8\/JycpfSIgcGxhY2Vob2xkZXI9IiR7dCgnbmFtZVBoJyl9Ij48cCBjbGFzcz0ibm90ZSI+JHt0KCduYW1lTm90ZScpfTwvcD48L2Rpdj5gCiAgICAgIDpgPGRpdiBjbGFzcz0ibmFtZWJveCI+PHNwYW4gY2xhc3M9ImF2IiBhcmlhLWhpZGRlbj0idHJ1ZSI+JHtpbml0aWFsKERBVEEuY29tbS5uYW1lKX08L3NwYW4+PHNwYW4gc3R5bGU9ImZsZXg6MSI+JHt0KCdhcHBlYXJzQXMnKShlc2MoREFUQS5jb21tLm5hbWUpKX08L3NwYW4+PGJ1dHRvbiBjbGFzcz0ibGluayIgZGF0YS1hY3Q9Im5hbWVFZGl0Ij4ke3QoJ2NoYW5nZScpfTwvYnV0dG9uPjwvZGl2PmB9CiAgICAgIDxwIGNsYXNzPSJsYWJlbCI+JHtlLnR5cGU9PT0ncHV0ZXJpJz90KCdvdGhlcnNSZWFkJyk6dCgnY2hvb3NlU2hhcmUnKX08L3A+CiAgICAgIDxkaXY+JHtwaWNrfTwvZGl2PgogICAgICA8cCBjbGFzcz0ibm90ZSI+JHt0KCdwcml2YWN5Tm90ZScpfTwvcD5gfQogICAgPC9kaXY+CiAgICAke3NoP2A8YnV0dG9uIGNsYXNzPSJidG4gZGFuZ2VyIiBkYXRhLXVuc2hhcmU9IiR7c2guaWR9Ij4ke3QoJ3dpdGhkcmF3QnRuJyl9PC9idXR0b24+YDpgPGJ1dHRvbiBjbGFzcz0iYnRuIiBkYXRhLWFjdD0ic2hhcmVQdWJsaXNoIj4ke3QoJ3NoYXJlRG8nKX08L2J1dHRvbj5gfQogIDwvZGl2PmA7CiAgJCgnLmFwcCcpLmFwcGVuZENoaWxkKHMpOwp9CmxldCBwdWJsaXNoaW5nPWZhbHNlOwphc3luYyBmdW5jdGlvbiBwdWJsaXNoU2hhcmUoKXsKICBpZihwdWJsaXNoaW5nKSByZXR1cm47CiAgcHVibGlzaGluZz10cnVlOyBjb25zdCBwYj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2hhcmVTaGVldCBbZGF0YS1hY3Q9InNoYXJlUHVibGlzaCJdJyk7IGlmKHBiKXsgcGIuZGlzYWJsZWQ9dHJ1ZTsgcGIuc3R5bGUub3BhY2l0eT0nLjYnIH0KICB0cnl7IGF3YWl0IHB1Ymxpc2hTaGFyZU5vdygpIH0gZmluYWxseSB7IHB1Ymxpc2hpbmc9ZmFsc2U7IGNvbnN0IGI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3NoYXJlU2hlZXQgW2RhdGEtYWN0PSJzaGFyZVB1Ymxpc2giXScpOyBpZihiKXsgYi5kaXNhYmxlZD1mYWxzZTsgYi5zdHlsZS5vcGFjaXR5PScnIH0gfQp9CmFzeW5jIGZ1bmN0aW9uIHB1Ymxpc2hTaGFyZU5vdygpewogIGNvbnN0IGU9REFUQS5lbnRyaWVzLmZpbmQoeD0+eC5pZD09PXNoYXJlT3Blbik7IGlmKCFlKSByZXR1cm47CiAgY29uc3Qgc25hcD1zbmFwc2hvdChlLHNoYXJlU2VsKTsKICBpZihlLnR5cGU9PT0nYnVjdXJpZScmJiFPYmplY3Qua2V5cyhzbmFwLnEpLmxlbmd0aCB8fCBlLnR5cGU9PT0ncmVjdW5vc3RpbnRlJyYmIXNuYXAuaXRlbXMubGVuZ3RoKXsgdG9hc3QodCgnY2hvb3NlT25lJykpOyByZXR1cm4gfQogIGNvbnN0IG5pPSQoJyNjb21tTmFtZScpOyBpZihuaSl7IGlmKCEoYXdhaXQgc2V0TmFtZShuaS52YWx1ZSkpKXsgbmkuZm9jdXMoKTsgcmV0dXJuIH0gbmFtZURyYWZ0PW51bGwgfQogIGlmKENPTkZJRy5hcGkpewogICAgY29uc3Qge2Zyb20sdHlwZSxkYXRlLGdlbixsYW5nOnBsLC4uLmRhdGF9PXNuYXA7CiAgICB0cnl7IGNvbnN0IGo9YXdhaXQgYXBpQygnY29tbXVuaXR5Jyx7bWV0aG9kOidQT1NUJyxib2R5Ontmcm9tLHR5cGUsZGF0ZSxnZW4sbGFuZzpwbCxkYXRhfX0pOyBpZighREFUQS5jb21tLnBvc3RzLnNvbWUoeD0+eC5pZD09PWouaWQpKSBEQVRBLmNvbW0ucG9zdHMucHVzaCh7aWQ6ai5pZCxmcm9tLHR5cGUsZGF0ZX0pOyBpZighQ0MucG9zdHMuc29tZSh4PT54LmlkPT09ai5pZCkpIENDLnBvc3RzLnVuc2hpZnQoaikgfQogICAgY2F0Y2goZXJyKXsgdG9hc3QoZXJyLm1lc3NhZ2UpOyByZXR1cm4gfQogIH0gZWxzZSBEQVRBLmNvbW0ucG9zdHMucHVzaCh7Li4uc25hcCxpZDoncCcrRGF0ZS5ub3coKS50b1N0cmluZygzNiksbmFtZTpEQVRBLmNvbW0ubmFtZSxzaGFyZWQ6bmV3IERhdGUoKS50b0lTT1N0cmluZygpLHJlYWN0czowfSk7CiAgcGVyc2lzdCgpOyBzaGFyZU9wZW49bnVsbDsgcmVuZGVyU2hhcmUoKTsgcmVuZGVyKCk7IHRvYXN0KHQoJ3NoYXJlZFRvYXN0JykpOwp9CmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxlPT57CiAgY29uc3Qgc2g9ZS50YXJnZXQuY2xvc2VzdCgnI3NoYXJlU2hlZXQnKTsKICBjb25zdCBvcD1lLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1zaGFyZV0nKTsgaWYob3ApeyBvcGVuU2hhcmUob3AuZGF0YXNldC5zaGFyZSk7IHJldHVybiB9CiAgY29uc3QgdW49ZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtdW5zaGFyZV0nKTsgaWYodW4peyBjb25zdCBpZD11bi5kYXRhc2V0LnVuc2hhcmU7CiAgICAoYXN5bmMoKT0+eyBpZihDT05GSUcuYXBpKXsgdHJ5eyBhd2FpdCBhcGlDKCdjb21tdW5pdHkvJytpZCx7bWV0aG9kOidERUxFVEUnfSkgfWNhdGNoKGVycil7IHRvYXN0KGVyci5tZXNzYWdlKTsgcmV0dXJuIH0gQ0MucG9zdHM9Q0MucG9zdHMuZmlsdGVyKHA9PnAuaWQhPT1pZCkgfQogICAgICBEQVRBLmNvbW0ucG9zdHM9REFUQS5jb21tLnBvc3RzLmZpbHRlcihwPT5wLmlkIT09aWQpOyBwZXJzaXN0KCk7IHNoYXJlT3Blbj1udWxsOyByZW5kZXJTaGFyZSgpOyByZW5kZXIoKTsgdG9hc3QodCgnd2l0aGRyYXduJykpIH0pKCk7IHJldHVybiB9CiAgaWYoIXNoKSByZXR1cm47CiAgaWYoZS50YXJnZXQ9PT1zaHx8ZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtc2hhcmUtY2xvc2VdJykpeyBzaGFyZU9wZW49bnVsbDsgcmVuZGVyU2hhcmUoKTsgcmV0dXJuIH0KICBjb25zdCBhPWUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWFjdF0nKTsgaWYoIWEpIHJldHVybjsKICBpZihhLmRhdGFzZXQuYWN0PT09J3NoYXJlUHVibGlzaCcpIHB1Ymxpc2hTaGFyZSgpOwogIGlmKGEuZGF0YXNldC5hY3Q9PT0nbmFtZVNhdmUnKXsgKGFzeW5jKCk9PnsgaWYoIShhd2FpdCBzZXROYW1lKCQoJyNjb21tTmFtZScpLnZhbHVlKSkpIHJldHVybjsgbmFtZURyYWZ0PW51bGw7IHNoYXJlT3Blbj1udWxsOyByZW5kZXJTaGFyZSgpOyByZW5kZXIoKTsgdG9hc3QodCgnbmFtZVNhdmVkJykpIH0pKCkgfQogIGlmKGEuZGF0YXNldC5hY3Q9PT0nbmFtZUVkaXQnKXsgbmFtZURyYWZ0PURBVEEuY29tbS5uYW1lfHwnJzsgcmVuZGVyU2hhcmUoKTsgY29uc3QgaT0kKCcjY29tbU5hbWUnKTsgaSYmaS5mb2N1cygpIH0KfSk7CmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsZT0+eyBjb25zdCBjPWUudGFyZ2V0LmNsb3Nlc3QmJmUudGFyZ2V0LmNsb3Nlc3QoJyNzaGFyZVNoZWV0IFtkYXRhLXNlbF0nKTsgaWYoYykgc2hhcmVTZWxbYy5kYXRhc2V0LnNlbF09Yy5jaGVja2VkIH0pOwpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsZT0+eyBpZihlLnRhcmdldC5pZD09PSdjb21tTmFtZScpIG5hbWVEcmFmdD1lLnRhcmdldC52YWx1ZSB9KTsKCi8qID09PT09PT09PT09PSBUb29scyBvZiB0aGUgZGF5LCBQcmFjdGljZSBodWIsIFByb2ZpbGUsIEludHJvLCBBYm91dCwgMTAgUG9zaXRpdmUgS2FybWFzID09PT09PT09PT09PSAqLwpjb25zdCBYVCA9IHt9OwpYVC5lbiA9IHsKICB1aTp7IG5hdkpvdXJuYWw6J0pvdXJuYWwnLCBuYXZQcm9maWxlOidQcm9maWxlJywKICAgIHRvZG9MZWFkOidXaGF0IEkgcHJvbWlzZWQgdG8gZG8uIFRoZSBjb21taXRtZW50cyBJIGhhdmUgbWFkZS4nLAogICAgdVRpdGxlOidZb3VyIHRvb2xzIGZvciB0b2RheScsIHVMb2NrZWQ6J0V2ZXJ5IGRheSB5b3UgY2FuIGRpc2NvdmVyIDIgb2YgdGhlIDIwIHRvb2xzOiBUaGUgNCBTdGVwcywgVGhlIDQgUG93ZXJzLCBUaGUgNCBMYXdzIG9mIFNlZWRzLCBUaGUgNCBGbG93ZXJzIGFuZCBUaGUgNCBQcmlvcml0aWVzLicsCiAgICB1TG9ja01zZzonWW91IG5lZWQgYW4gYWN0aXZlIHN1YnNjcmlwdGlvbiB0byB1c2UgdGhlIHRvb2xzLicsIHVTZWVTdWJzOidTZWUgdGhlIHN1YnNjcmlwdGlvbnMnLAogICAgdURyYXdOb3RlOidUYXAgYW5kIGRpc2NvdmVyIHRoZSAyIHRvb2xzIHlvdSBhcmUgd29ya2luZyB3aXRoIHRvZGF5LicsIHVEcmF3OiJEaXNjb3ZlciB0b2RheSdzIHRvb2xzIiwKICAgIHVROidIb3cgZG8gSSB1c2UgdGhpcyBjb21iaW5hdGlvbiBvZiB0b29scyB0b2RheT8nLCB1UGg6J1dyaXRlIGZvciB5b3Vyc2VsZi4gSXQgc3RheXMgb25seSBpbiB5b3VyIGpvdXJuYWwuJywKICAgIHVTYXZlOidTYXZlIHRvIGpvdXJuYWwnLCB1VXBkYXRlOidVcGRhdGUgaW4gam91cm5hbCcsIHVBZ2FpbjonQ2hvb3NlIGEgbmV3IGNvbWJpbmF0aW9uIG9mIHRvb2xzJywgdVNhdmVkOidTYXZlZCB0byB5b3VyIGpvdXJuYWwnLAogICAgdVNpbU9uOidUZXN0IHZlcnNpb246IHNpbXVsYXRlIGFuIGFjdGl2ZSBzdWJzY3JpcHRpb24nLCB1U2ltT2ZmOidUZXN0IHZlcnNpb246IHNpbXVsYXRlIG5vIHN1YnNjcmlwdGlvbicsCiAgICBodWJUaXRsZTonV2hhdCBhcmUgeW91IHByYWN0aXNpbmcgbm93PycsIGh1YkxlYWQ6J0Nob29zZSB0aGUgcHJhY3RpY2UuIEV2ZXJ5dGhpbmcgeW91IGRvIGdvZXMgaW50byB5b3VyIGpvdXJuYWwuJywgaHViQnVzeTonQSBwcmFjdGljZSBpcyBpbiBwcm9ncmVzcyDCtyBiYWNrIHRvIHRoZSB0aW1lcicsCiAgICBteVByb2ZpbGU6J015IHByb2ZpbGUnLCBjaGFuZ2VOYW1lOidDaGFuZ2UgbmFtZScsIHBpY2tOYW1lOidDaG9vc2UgYSBuYW1lIGZvciB0aGUgY29tbXVuaXR5JywKICAgIHN0UHJhY3Q6J3ByYWN0aWNlcycsIHN0TWluOidtaW51dGVzJywgc3RUb2RvOidUbyBEb3MgZG9uZScsIGF2YXRhcjonTXkgYXZhdGFyJywgYWRkcmVzczonSG93IEkgYWRkcmVzcyB5b3UnLAogICAgaW50cm86J0ludHJvZHVjdGlvbicsIGFib3V0OidBYm91dCB0aGUgYXBwJywga2FybWE6J1RoZSAxMCBQb3NpdGl2ZSBLYXJtYXMnLCBrYXJtYVN1YjonVGhlIGluc3BpcmF0aW9uIGJlaGluZCB0aGUgYXBwJywgY29udGFjdDonQ29udGFjdCcsCiAgICBwcm9mQmFubmVyOidUZXN0IHZlcnNpb24uIEluIHRoZSBwaG9uZSBhcHAgeW91IHdpbGwgYWxzbyBmaW5kIGhlcmU6IHJlbWluZGVycyAodXAgdG8gNiBhIGRheSksIGNoYW5naW5nIHlvdXIgZW1haWwsIGRlbGV0aW5nIHlvdXIgZGF0YSwgZGVsZXRpbmcgeW91ciBhY2NvdW50LCB0aGUgcHJpdmFjeSBwb2xpY3kgYW5kIHRoZSB0ZXJtcy4nLAogICAgb3ZQcmV2OidCYWNrJywgb3ZOZXh0OidOZXh0Jywgb3ZTdGFydDonQmVnaW4nLCBieURvbWFpbjonR1JPVVBFRCBCWSBBUkVBJywKICAgIGthcm1hTGVhZDonVGhlIGluc3BpcmF0aW9uIGJlaGluZCB0aGUgYXBwLiBZb3UgY2FuIHVzZSB0aGVtIGluIHRoZSBwcmFjdGljZSBvZiB0aGUgNCBwb3dlcnMgYW5kIGluIHRoZSBqb3kgbWVkaXRhdGlvbi4nIH0sCiAga2luZFU6J1Rvb2xzIG9mIHRoZSBkYXknLAogIHNldHM6ewogICAgcGFzaTp7IG5hbWU6J1RoZSA0IFN0ZXBzJywgdW5pdDonU3RlcCcsIHN1YjondG8gd2F0ZXIgdGhlIHNlZWRzIGZvciB5b3VyIGdvYWwnLCBpdGVtczpbCiAgICAgICdTYXkgd2hhdCB5b3Ugd2FudCBpbiB5b3VyIGxpZmUgaW4gb25lIHNob3J0IHNlbnRlbmNlLicsCiAgICAgICdQbGFuIHdobyB5b3Ugd2lsbCBoZWxwIHRvIGdldCB0aGUgc2FtZSB0aGluZyBhbmQgd2hlcmUgeW91IHdpbGwgaW52aXRlIHRoYXQgcGVyc29uIGZvciBhIHRhbGsuJywKICAgICAgJ0FjdHVhbGx5IGhlbHAgdGhhdCBwZXJzb24uJywKICAgICAgJ0RvIHRoZSBKb3kgTWVkaXRhdGlvbjogYXMgeW91IGdvIHRvIHNsZWVwLCB0aGluayB3aXRoIGpveSBhYm91dCB0aGUgZ29vZCB0aGluZ3MgeW91IGRvIGZvciBvdGhlcnMuJyBdIH0sCiAgICBwdXRlcmk6eyBuYW1lOidUaGUgNCBQb3dlcnMnLCB1bml0OidQb3dlcicsIHN1YjondG8gZGVhY3RpdmF0ZSB0aGUgbmVnYXRpdmUgc2VlZHMgcGxhbnRlZCBpbiB0aGUgcGFzdCcsIGl0ZW1zOlsKICAgICAgJ1RoaW5rIG9mIHRoZSBQZW46IHJlbWVtYmVyIHdoZXJlIGFsbCB0aGluZ3MgY29tZSBmcm9tLicsCiAgICAgICdCZWNvbWUgYXdhcmUgb2YgdGhlIGJlbmVmaXRzIHlvdSBoYWQgd2hlbiB5b3UgcGxhbnRlZCB0aGUgc2VlZCBhbmQgbWFrZSBhIGZpcm0gZGVjaXNpb24gdG8gZGVhY3RpdmF0ZSBpdCBiZWZvcmUgaXQgbXVsdGlwbGllcyBldmVuIG1vcmUgaW5zaWRlIHlvdS4nLAogICAgICAnUHJvbWlzZSBub3QgdG8gbWFrZSB0aGUgc2FtZSBtaXN0YWtlIGFnYWluIGZvciBhIHNldCBwZXJpb2Qgb2YgdGltZS4nLAogICAgICAnRG8gc29tZXRoaW5nIHBvc2l0aXZlIHRvIGJhbGFuY2UgdGhlIG5lZ2F0aXZlIHNlZWRzLicgXSB9LAogICAgbGVnaTp7IG5hbWU6J1RoZSA0IExhd3Mgb2YgU2VlZHMnLCB1bml0OidMYXcnLCBzdWI6J3RoZSBsYXdzIGJ5IHdoaWNoIHNlZWRzIHdvcmsnLCBpdGVtczpbCiAgICAgICdZb3UgcmVhcCB3aGF0IHlvdSBzb3c6IGlmIHlvdSBwbGFudCB3YXRlcm1lbG9uIHNlZWRzLCB5b3Ugd2lsbCBnZXQgYSB3YXRlcm1lbG9uLicsCiAgICAgICdXaGF0IHlvdSBnZXQgYmFjayBpcyBhbHdheXMgbXVjaCwgbXVjaCBiaWdnZXIgdGhhbiB3aGF0IHlvdSBkaWQuJywKICAgICAgJ0lmIHlvdSBkbyBub3RoaW5nLCB5b3Ugd2lsbCBnZXQgbm90aGluZyBiYWNrLicsCiAgICAgICdJZiB5b3UgZG8gc29tZXRoaW5nLCB0aGVuIHlvdSBtdXN0IGdldCBzb21ldGhpbmcgYmFjay4nIF0gfSwKICAgIGZsb3JpOnsgbmFtZTonVGhlIDQgRmxvd2VycycsIHVuaXQ6J0Zsb3dlcicsIHN1YjondGhlIHdheSBzZWVkcyBiZWFyIGZydWl0JywgaXRlbXM6WwogICAgICAnWW91IGdldCBleGFjdGx5IHdoYXQgeW91IGdpdmUuJywKICAgICAgJ0V2ZXJ5IGFjdGlvbiBjcmVhdGVzIGEgaGFiaXQuJywKICAgICAgJ1doYXQgeW91IGRvIGNyZWF0ZXMgdGhlIHBlb3BsZSBhbmQgdGhlIGVudmlyb25tZW50IGFyb3VuZCB5b3UuJywKICAgICAgJ1doYXQgeW91IGRvIGNyZWF0ZXMgdGhlIHdvcmxkIHlvdSB3aWxsIHN0ZXAgaW50by4nIF0gfSwKICAgIHByaW9yaXRhdGk6eyBuYW1lOidUaGUgNCBQcmlvcml0aWVzJywgdW5pdDonUHJpb3JpdHknLCBzdWI6J3RoZSBvcmRlciBpbiB3aGljaCBzZWVkcyBiZWFyIGZydWl0JywgaXRlbXM6WwogICAgICB7IGg6J0ZpcnN0IGluLCBmaXJzdCBvdXQuJywgZXg6J0Egc2VlZCBwbGFudGVkIGJlZm9yZSBhbm90aGVyIHdpbGwgc3Byb3V0IGJlZm9yZSB0aGUgc2Vjb25kIG9uZS4gSWYgeW91IGhlbHAgb25lIGZyaWVuZCBiZSBtb3JlIGNyZWF0aXZlIGF0IHdvcmsgb24gTW9uZGF5IGFuZCB0aGVuIGhlbHAgYW5vdGhlciBmcmllbmQgYmUgbW9yZSBjcmVhdGl2ZSBvbiBUdWVzZGF5LCB0aGUgTW9uZGF5IHNlZWQgd2lsbCBvcGVuIGZpcnN0LicgfSwKICAgICAgeyBoOidXaGVuIHlvdSBoYXZlIGEgaGFiaXQsIHRoZSBzZWVkIGJlYXJzIGZydWl0IGFoZWFkIG9mIHByaW9yaXR5IDEuJywgZXg6J0lmIHlvdSBoZWxwZWQgdGhlIFR1ZXNkYXkgZnJpZW5kIHJlZ3VsYXJseSwgYXMgYSBoYWJpdCwgdGhlIHNlZWQgcGxhbnRlZCB3aXRoIHRoZW0gd2lsbCBvcGVuIGJlZm9yZSB0aGUgc2VlZCBwbGFudGVkIHdpdGggdGhlIE1vbmRheSBmcmllbmQuJyB9LAogICAgICB7IGg6J1doZW4geW91IGhlbHAgc29tZW9uZSB3aG8gaXMgYWJvdXQgdG8gZ28gdGhyb3VnaCBhIG1ham9yIHBlcnNvbmFsIGNoYW5nZSwgdGhlIHNlZWQgYmVhcnMgZnJ1aXQgYWhlYWQgb2YgcHJpb3JpdHkgMi4nLCBleDonSWYgeW91IGhlbHBlZCB5ZXQgYW5vdGhlciBmcmllbmQgYmUgbW9yZSBjcmVhdGl2ZSBvbiBXZWRuZXNkYXksIGFuZCBvbiBUaHVyc2RheSBhIG1ham9yIGNoYW5nZSB3YXMgYWJvdXQgdG8gaGFwcGVuIGluIHRoZWlyIGxpZmUsIHNlZWRzIHBsYW50ZWQgdmVyeSBjbG9zZSB0byBhIG1ham9yIGV2ZW50IHJpcGVuIGJlZm9yZSB0aG9zZSBwbGFudGVkIGVhcmxpZXIuJyB9LAogICAgICB7IGg6J1doZW4geW91IGhlbHAgc29tZW9uZSB3aG8gaXMgZGVkaWNhdGVkIHRvIGEgcHVycG9zZSB0aGF0IHNlcnZlcyBtYW55IHBlb3BsZSwgdGhlIHNlZWQgYmVhcnMgZnJ1aXQgYWhlYWQgb2YgcHJpb3JpdHkgMy4nLCBleDonSWYgdGhlIGZyaWVuZCB5b3UgaGVscGVkIG9uIFR1ZXNkYXkgd2FzIHRyeWluZyB0byBmaW5kIGEgY3JlYXRpdmUgd2F5IHRvIGN1cmUgY2FuY2VyLCB3aGlsZSB0aGUgZnJpZW5kcyB5b3UgaGVscGVkIG9uIE1vbmRheSBhbmQgV2VkbmVzZGF5IHdlcmUgdHJ5aW5nIHRvIGZpbmQgYSBtb3JlIGNyZWF0aXZlIHdheSB0byBkbyB0aGVpciBtYWtlLXVwLCB0aGUgVHVlc2RheSBzZWVkcyB0YWtlIHRoZSBsZWFkIGFuZCBvcGVuIGZpcnN0LicgfSBdIH0KICB9LAogIGludHJvOlsKICAgIFsnV2VsY29tZSB0byB0aGUgR29vZCBTZWVkcyBhcHAnLCdFdmVyeXRoaW5nIHlvdSBleHBlcmllbmNlIGNvbWVzIGZyb20gdGhlIHNlZWRzIHlvdSBoYXZlIHBsYW50ZWQgdGhyb3VnaCB5b3VyIHRob3VnaHRzLCB3b3JkcyBhbmQgYWN0aW9ucy4gVGhlIGFwcCBoZWxwcyB5b3Ugc2VlIHdoYXQgeW91IHBsYW50IGV2ZXJ5IGRheSBhbmQgY29uc2Npb3VzbHkgY2hvb3NlIHRoZSBzZWVkcyBmb3IgdGhlIGxpZmUgeW91IHdhbnQuJ10sCiAgICBbJ1lvdXIgcHJhY3RpY2VzJywnTWVkaXRhdGlvbiBhbmQgeW9nYSB3aXRoIGEgdGltZXIsIGdyYXRpdHVkZSBhbmQgc3VjY2Vzc2VzLCB0aGUgam95IG1lZGl0YXRpb24gYW5kIHRoZSA0IHBvd2Vycy4gWW91IHdpbGwgZmluZCB0aGVtIGFsbCB1bmRlciB0aGUgYnV0dG9uIGluIHRoZSBtaWRkbGUsIGFuZCBldmVyeXRoaW5nIHlvdSBkbyBnb2VzIGludG8geW91ciBqb3VybmFsLiddLAogICAgWydUb29scyBvZiB0aGUgZGF5JywnRmluZCBhIGNyZWF0aXZlIHdheSB0byB1c2UgdGhlIDIgdG9vbHMgZm9yIHlvdXIgZ29hbC4nXSwKICAgIFsnS2VlcCB5b3VyIGNvbW1pdG1lbnQhJywnV2hhdCB5b3Ugd3JpdGUgdW5kZXIg4oCcd2hvIEkgaGVscOKAnSBhbmQgaW4gdGhlIDR0aCBwb3dlciBnb2VzIGludG8geW91ciBUbyBEbyBsaXN0LiBUaWNrIGl0IG9mZiBvbmNlIHlvdSBoYXZlIGRvbmUgaXQ6IHRoZSBnb29kIHNlZWRzIGdyb3csIGFuZCB0aGUgbmVnYXRpdmUgb25lcyBhcmUgZGVhY3RpdmF0ZWQuJ10sCiAgICBbIlJlam9pY2UgaW4gb3RoZXIgcGVvcGxlJ3Mgc2VlZHMiLCdJbiB0aGUgY29tbXVuaXR5IHlvdSBjYW4gc2VlLCBhbm9ueW1vdXNseSwgd2hhdCBvdGhlcnMgaGF2ZSBwbGFudGVkLiBXaGVuIHlvdSByZWpvaWNlIGZvciB0aGVtLCB5b3Ugd2F0ZXIgdGhlIHNlZWRzIGZvciB5b3VyIG93biBnb2FsLiddIF0sCiAgYWJvdXQ6WwogICAgWydXaGF0IEdvb2QgU2VlZHMgaXMnLFsnR29vZCBTZWVkcyBpcyB5b3VyIHByYWN0aWNlIGpvdXJuYWwgZm9yIHRoZSBzZWVkIHN5c3RlbS4nLCdPdXIgbWluZCByZWNvcmRzIGV2ZXJ5dGhpbmcgd2UgdGhpbmssIHNheSBhbmQgZG8uIEV2ZXJ5IHRob3VnaHQsIHdvcmQgb3IgYWN0aW9uIGJlY29tZXMgYSBzZWVkIHRoYXQgZ3Jvd3MgaW5zaWRlIG91ciBtaW5kIGFuZCwgYXQgc29tZSBwb2ludCwgY29tZXMgYmFjayBpbnRvIG91ciBsaWZlIGFzIGFuIGV4cGVyaWVuY2UuJywnVGhlIGFwcCBoZWxwcyB5b3Ugbm90aWNlIHdoYXQgeW91IHBsYW50IGFuZCBjb25zY2lvdXNseSBjaG9vc2UgdGhlIHNlZWRzIGZvciB3aGF0IHlvdSB3YW50LiddXSwKICAgIFsnSG93IHRvIHVzZSBpdCBldmVyeSBkYXknLFsnSW4gdGhlIG1vcm5pbmc6IHJlbWVtYmVyIHlvdXIgZ29hbCBhbmQgZGlzY292ZXIgdGhlIHRvb2xzIG9mIHRoZSBkYXkuJywnRHVyaW5nIHRoZSBkYXk6IG5vdGljZSB3aGF0IHlvdSBwbGFudC4gV3JpdGUgZG93biB5b3VyIGdyYXRpdHVkZXMgYW5kIHN1Y2Nlc3NlcywgYW5kIHdoZW4geW91IHJlY29nbmlzZSBhIG5lZ2F0aXZlIHNlZWQsIHdvcmsgd2l0aCB0aGUgNCBwb3dlcnMuJywnSW4gdGhlIGV2ZW5pbmc6IGRvIHRoZSBqb3kgbWVkaXRhdGlvbi4nLCdUaGVyZSBpcyBubyBuZWVkIGZvciBsb25nIHRleHRzLiBBIGZldyBtaW51dGVzIG9mIGhvbmVzdCBvYnNlcnZhdGlvbiwgd2l0aG91dCBqdWRnZW1lbnQgYW5kIHdpdGhvdXQgZ3VpbHQsIGFyZSBlbm91Z2guIFdoYXQgbWF0dGVycyBpcyBjb21pbmcgYmFjayBldmVyeSBkYXkuJ11dLAogICAgWyJXaG8gaXQncyBmb3IiLFsnRm9yIGFueW9uZSB3aG8gaGFzIGEgZ29hbCBvciBhIGRyZWFtIGFuZCB3YW50cyB0byByZWFjaCBpdCBieSBwbGFudGluZyB0aGUgcmlnaHQgc2VlZHMuJywnSWYgeW91IGFyZSBnb2luZyB0aHJvdWdoIGEgaGFyZCB0aW1lIG9yIGEgc2l0dWF0aW9uIGtlZXBzIHJlcGVhdGluZyBpdHNlbGYsIGl0IGlzIGEgc2lnbiB0aGF0IHNlZWRzIHBsYW50ZWQgaW4gdGhlIHBhc3QgYXJlIHJpcGVuaW5nLiBXaXRoIHRoZSA0IHBvd2VycyB5b3UgY2FuIGRlYWN0aXZhdGUgdGhlbSwgYW5kIGJ5IGNvbnNjaW91c2x5IHBsYW50aW5nIGdvb2Qgc2VlZHMgeW91IGJhbGFuY2UgdGhlIHNjYWxlcy4nXV0sCiAgICBbJ1doZW4geW91IHJlY29nbmlzZSBhIG5lZ2F0aXZlIHNlZWQnLFsnV2UgYWxsIHBsYW50IG5lZ2F0aXZlIHNlZWRzIHRvbywgd2l0aG91dCByZWFsaXNpbmcgaXQuIElmIHdlIGRvIG5vdCBkZWFjdGl2YXRlIHRoZW0sIHRoZXkga2VlcCBncm93aW5nLicsJ1dpdGggdGhlIDQgcG93ZXJzOiB5b3UgcmVtZW1iZXIgd2hlcmUgYWxsIHRoaW5ncyBjb21lIGZyb20sIHlvdSBiZWNvbWUgYXdhcmUgb2YgdGhlIGJlbmVmaXRzIHlvdSBoYWQgYW5kIGRlY2lkZSB0byBkZWFjdGl2YXRlIHRoZSBzZWVkLCB5b3UgcHJvbWlzZSBub3QgdG8gcmVwZWF0IHRoZSBtaXN0YWtlIGZvciBhIHdoaWxlLCBhbmQgeW91IGRvIHNvbWV0aGluZyBwb3NpdGl2ZSB0byBiYWxhbmNlIGl0LicsJ1doYXQgeW91IHByb21pc2UgaW4gdGhlIDR0aCBwb3dlciBnb2VzIGludG8geW91ciBUbyBEbyBsaXN0LCBzbyB5b3UgZG8gbm90IGZvcmdldCB0byBhY3R1YWxseSBkbyBpdC4nXV0sCiAgICBbJ1RoZSBqb3kgbWVkaXRhdGlvbicsWydUaGUgbW9tZW50IGJlZm9yZSBzbGVlcCBjb25uZWN0cyB0aGUgY29uc2Npb3VzIGFuZCB0aGUgc3ViY29uc2Npb3VzLiBXaGF0IHlvdSB0aGluayB0aGVuIGtlZXBzIGdyb3dpbmcgd2hpbGUgeW91IHNsZWVwLicsJ1RoYXQgaXMgd2h5LCBpbiB0aGUgZXZlbmluZywgeW91IHRoaW5rIHdpdGggam95IGFib3V0IHRoZSBnb29kIHlvdSBoYXZlIGRvbmUgZm9yIG90aGVycyBhbmQgZGVkaWNhdGUgaXQgdG8geW91ciBnb2FsLicsJ1lvdSBjYW4gYWxzbyBkbyBpdCBkdXJpbmcgdGhlIGRheSwgd2hlbmV2ZXIgeW91IGhhdmUgYSBmZXcgbWludXRlcy4nXV0sCiAgICBbJ1Rvb2xzIG9mIHRoZSBkYXknLFsnVGhlIDIwIHRvb2xzIGFyZSBncm91cGVkIGluIDUgc2V0czogVGhlIDQgU3RlcHMsIFRoZSA0IFBvd2VycywgVGhlIDQgTGF3cyBvZiBTZWVkcywgVGhlIDQgRmxvd2VycyBhbmQgVGhlIDQgUHJpb3JpdGllcy4gRWFjaCBzZXQgaGFzIGl0cyBvd24gY29sb3VyIGFuZCBzeW1ib2wuJyx7IHN1YnM6J0V2ZXJ5IGRheSB5b3UgZGlzY292ZXIgMiB0b29scyBhbmQgd3JpdGUgaG93IHlvdSB1c2UgdGhlaXIgY29tYmluYXRpb24uIFRoZSB0b29scyBhcmUgYXZhaWxhYmxlIHRvIHRob3NlIHdpdGggYW4gYWN0aXZlIHN1YnNjcmlwdGlvbi4nIH1dXSwKICAgIFsnVGhlIGNvbW11bml0eScsWydZb3UgY2FuIGFub255bW91c2x5IHNoYXJlIHlvdXIgZ3JhdGl0dWRlcywgc3VjY2Vzc2VzLCBqb3kgbWVkaXRhdGlvbiBvciA0IHBvd2VycywgdW5kZXIgYSBuYW1lIHlvdSBjaG9vc2UuJywiV2hlbiB5b3UgcmVqb2ljZSBpbiBvdGhlciBwZW9wbGUncyBzZWVkcywgeW91IHdhdGVyIHRoZSBzZWVkcyBmb3IgeW91ciBvd24gZ29hbC4gV2hlbiB5b3UgcmVhZCBzb21lb25lJ3MgNCBwb3dlcnMsIHlvdSBjYW4gZ28gdGhyb3VnaCB0aGVtIGZvciB5b3Vyc2VsZiB0b28uIiwnV2hhdCB5b3Ugd3JpdGUgc3RheXMgcHJpdmF0ZSwgZXhjZXB0IGZvciB3aGF0IHlvdSBjaG9vc2UgdG8gc2hhcmUuJ11dIF0sCiAga2FybWE6WwogICAgWydQcm90ZWN0IGxpZmUnLCdUYWtlIGNhcmUgb2YgcGVvcGxlLCBhbmltYWxzIGFuZCBwbGFudHMuIE5ldmVyIGludGVudGlvbmFsbHkgaHVydCBhbnkgbGl2aW5nIGJlaW5nLicsJ1RoZSBzZWVkIG9mIGhlYWx0aCddLAogICAgWydQcm90ZWN0IHByb3BlcnR5JywnR2l2ZSBhbmQgaGVscCBvdGhlcnMuIERvIG5vdCB0YWtlIHdoYXQgZG9lcyBub3QgYmVsb25nIHRvIHlvdSB3aXRob3V0IHBlcm1pc3Npb24uJywnVGhlIHNlZWQgb2YgcHJvc3Blcml0eSddLAogICAgWydTZXh1YWwgcHVyaXR5JywnSG9ub3VyIHRoZSBib25kIGJldHdlZW4gdHdvIHBlb3BsZSB3aG8gaGF2ZSBtYWRlIGEgY29tbWl0bWVudCB0byBlYWNoIG90aGVyLCB5b3VycyBhbmQgdGhhdCBvZiBvdGhlcnMuJywnVGhlIHNlZWQgb2YgaGFwcGluZXNzJ10sCiAgICBbJ0ludGVncml0eScsJ1RlbGwgdGhlIHRydXRoIGFuZCBrZWVwIHlvdXIgcHJvbWlzZXMuIERvIG5vdCBzYXkgd2hhdCB5b3UgZG8gbm90IHRydWx5IGZlZWwuJywnVGhlIHNlZWQgb2YgdHJ1c3QnXSwKICAgIFsnU2F5IHdvcmRzIHRoYXQgYnJpbmcgcGVvcGxlIHRvZ2V0aGVyJywnVXNlIHlvdXIgd29yZHMgdG8gYnJpbmcgcGVvcGxlIHRvZ2V0aGVyLiBBdm9pZCB3b3JkcyB0aGF0IGRpdmlkZSBvciBjcmVhdGUgbWlzdW5kZXJzdGFuZGluZ3MuJywnVGhlIHNlZWQgb2YgaGFybW9ueSddLAogICAgWydTcGVhayBnZW50bHkgYW5kIHN3ZWV0bHknLCdBcHByZWNpYXRlIG90aGVycyBhbmQgc3BlYWsgdG8gdGhlbSB3aXRoIHJlc3BlY3QuIEF2b2lkIGhhcnNoIHdvcmRzIHRoYXQgaHVydC4nLCdUaGUgc2VlZCBvZiByZXNwZWN0J10sCiAgICBbJ1NheSBvbmx5IHdvcmRzIHRoYXQgaGF2ZSBhIHB1cnBvc2UnLCdTYXkgdGhpbmdzIHRoYXQgaGVscCBhbmQgaGF2ZSBhIHB1cnBvc2UuIEF2b2lkIGdvc3NpcCBhbmQgZW1wdHkgdGFsay4nLCdUaGUgc2VlZCBvZiB0aW1lJ10sCiAgICBbIlJlam9pY2UgaW4gb3RoZXIgcGVvcGxlJ3Mgc3VjY2VzcyIsJ1Jlam9pY2Ugd2hlbiBvdGhlcnMgZ2V0IHdoYXQgdGhleSB3YW50IGFuZCBhcHByZWNpYXRlIHdoYXQgdGhleSBoYXZlLiBBdm9pZCBlbnZ5IGFuZCBncmVlZC4nLCdUaGUgc2VlZCBvZiBzdWNjZXNzJ10sCiAgICBbIkNvbXBhc3Npb24gZm9yIG90aGVyIHBlb3BsZSdzIHByb2JsZW1zIiwiT2ZmZXIgY29tcGFzc2lvbiB0byB0aG9zZSBnb2luZyB0aHJvdWdoIGhhcmQgdGltZXMgYW5kIGhlbHAgdGhlbSBob3dldmVyIHlvdSBjYW4uIERvIG5vdCByZWpvaWNlIGluIG90aGVyIHBlb3BsZSdzIG1pc2ZvcnR1bmUuIiwnVGhlIHNlZWQgb2YgY29tcGFzc2lvbiddLAogICAgWydVbmRlcnN0YW5kIGhvdyB0aGUgcGVuIHdvcmtzJywnUmVtZW1iZXIgdGhhdCBldmVyeXRoaW5nIGNvbWVzIGZyb20gdGhlIHNlZWRzIHBsYW50ZWQgYW5kIHRoYXQgY2hhbmdlIGJlZ2lucyB3aXRoIHlvdS4gTGl2ZSBhbmQgc2hhcmUgdGhlIHByaW5jaXBsZSBvZiB0aGUgcGVuLicsJ1RoZSBzZWVkIG9mIHdpc2RvbSddIF0sCiAgZ3JvdXBzOlsnREVFRFMnLCdXT1JEUycsJ1RIT1VHSFRTJ10sIGRvbWFpbnM6WydNb25leScsJ1JlbGF0aW9uc2hpcHMnLCdIZWFsdGgnXQp9OwpYVC5mciA9IHsKICB1aTp7IG5hdkpvdXJuYWw6J0pvdXJuYWwnLCBuYXZQcm9maWxlOidQcm9maWwnLAogICAgdG9kb0xlYWQ6IkNlIHF1ZSBqJ2FpIHByb21pcyBkZSBmYWlyZS4gTGVzIGVuZ2FnZW1lbnRzIHF1ZSBqJ2FpIHByaXMuIiwKICAgIHVUaXRsZToiVGVzIG91dGlscyBkdSBqb3VyIiwgdUxvY2tlZDoiQ2hhcXVlIGpvdXIsIHR1IHBldXggZMOpY291dnJpciAyIGRlcyAyMCBvdXRpbHMgOiBMZXMgNCDDiXRhcGVzLCBMZXMgNCBQb3V2b2lycywgTGVzIDQgTG9pcyBkZXMgR3JhaW5lcywgTGVzIDQgRmxldXJzIGV0IExlcyA0IFByaW9yaXTDqXMuIiwKICAgIHVMb2NrTXNnOiJUdSBhcyBiZXNvaW4gZCd1biBhYm9ubmVtZW50IGFjdGlmIHBvdXIgdXRpbGlzZXIgbGVzIG91dGlscy4iLCB1U2VlU3ViczonVm9pciBsZXMgYWJvbm5lbWVudHMnLAogICAgdURyYXdOb3RlOiJBcHB1aWUgZXQgZMOpY291dnJlIGxlcyAyIG91dGlscyBhdmVjIGxlc3F1ZWxzIHR1IHRyYXZhaWxsZXMgYXVqb3VyZCdodWkuIiwgdURyYXc6J0TDqWNvdXZyaXIgbGVzIG91dGlscyBkdSBqb3VyJywKICAgIHVROiJDb21tZW50IGondXRpbGlzZSBjZXR0ZSBjb21iaW5haXNvbiBkJ291dGlscyBhdWpvdXJkJ2h1aSA\/IiwgdVBoOifDiWNyaXMgcG91ciB0b2kuIENlbGEgcmVzdGUgc2V1bGVtZW50IGRhbnMgdG9uIGpvdXJuYWwuJywKICAgIHVTYXZlOidFbnJlZ2lzdHJlciBkYW5zIGxlIGpvdXJuYWwnLCB1VXBkYXRlOidNZXR0cmUgw6Agam91ciBkYW5zIGxlIGpvdXJuYWwnLCB1QWdhaW46IkNob2lzaXIgdW5lIG5vdXZlbGxlIGNvbWJpbmFpc29uIGQnb3V0aWxzIiwgdVNhdmVkOidFbnJlZ2lzdHLDqSBkYW5zIHRvbiBqb3VybmFsJywKICAgIHVTaW1PbjonVmVyc2lvbiBkZSB0ZXN0IDogc2ltdWxlciB1biBhYm9ubmVtZW50IGFjdGlmJywgdVNpbU9mZjonVmVyc2lvbiBkZSB0ZXN0IDogc2ltdWxlciBzYW5zIGFib25uZW1lbnQnLAogICAgaHViVGl0bGU6J1F1ZSBwcmF0aXF1ZXMtdHUgbWFpbnRlbmFudCA\/JywgaHViTGVhZDonQ2hvaXNpcyBsYSBwcmF0aXF1ZS4gVG91dCBjZSBxdWUgdHUgZmFpcyB2YSBkYW5zIHRvbiBqb3VybmFsLicsIGh1YkJ1c3k6J1VuZSBwcmF0aXF1ZSBlc3QgZW4gY291cnMgwrcgcmV0b3VyIGF1IG1pbnV0ZXVyJywKICAgIG15UHJvZmlsZTonTW9uIHByb2ZpbCcsIGNoYW5nZU5hbWU6J0NoYW5nZXIgbGUgbm9tJywgcGlja05hbWU6J0Nob2lzaXIgdW4gbm9tIHBvdXIgbGEgY29tbXVuYXV0w6knLAogICAgc3RQcmFjdDoncHJhdGlxdWVzJywgc3RNaW46J21pbnV0ZXMnLCBzdFRvZG86J8OAIGZhaXJlIHLDqWFsaXPDqXMnLCBhdmF0YXI6J01vbiBhdmF0YXInLCBhZGRyZXNzOiJDb21tZW50IGplIG0nYWRyZXNzZSDDoCB0b2kiLAogICAgaW50cm86J0ludHJvZHVjdGlvbicsIGFib3V0OiLDgCBwcm9wb3MgZGUgbCdhcHBsaWNhdGlvbiIsIGthcm1hOidMZXMgMTAgS2FybWFzIFBvc2l0aWZzJywga2FybWFTdWI6IkwnaW5zcGlyYXRpb24gZGUgbCdhcHBsaWNhdGlvbiIsIGNvbnRhY3Q6J0NvbnRhY3QnLAogICAgcHJvZkJhbm5lcjoiVmVyc2lvbiBkZSB0ZXN0LiBEYW5zIGwnYXBwbGljYXRpb24gbW9iaWxlLCB0dSB0cm91dmVyYXMgYXVzc2kgaWNpIDogbGVzIHJhcHBlbHMgKGp1c3F1J8OgIDYgcGFyIGpvdXIpLCBsZSBjaGFuZ2VtZW50IGQnZS1tYWlsLCBsYSBzdXBwcmVzc2lvbiBkZXMgZG9ubsOpZXMsIGxhIHN1cHByZXNzaW9uIGR1IGNvbXB0ZSwgbGEgcG9saXRpcXVlIGRlIGNvbmZpZGVudGlhbGl0w6kgZXQgbGVzIGNvbmRpdGlvbnMuIiwKICAgIG92UHJldjonUmV0b3VyJywgb3ZOZXh0OidTdWl2YW50Jywgb3ZTdGFydDonQ29tbWVuY2VyJywgYnlEb21haW46J1JFR1JPVVDDiVMgUEFSIERPTUFJTkUnLAogICAga2FybWFMZWFkOiJMJ2luc3BpcmF0aW9uIGRlIGwnYXBwbGljYXRpb24uIFR1IHBldXggbGVzIHV0aWxpc2VyIGRhbnMgbGEgcHJhdGlxdWUgZGVzIDQgcG91dm9pcnMgZXQgZGFucyBsYSBtw6lkaXRhdGlvbiBkdSBib25oZXVyLiIgfSwKICBraW5kVTonT3V0aWxzIGR1IGpvdXInLAogIHNldHM6ewogICAgcGFzaTp7IG5hbWU6J0xlcyA0IMOJdGFwZXMnLCB1bml0OifDiXRhcGUnLCBzdWI6J3BvdXIgYXJyb3NlciBsZXMgZ3JhaW5lcyBkZSB0b24gb2JqZWN0aWYnLCBpdGVtczpbCiAgICAgICdEaXMgY2UgcXVlIHR1IHZldXggZGFucyB0YSB2aWUgZW4gdW5lIHBocmFzZSBjb3VydGUuJywKICAgICAgJ1BsYW5pZmllIHF1aSB0dSB2YXMgYWlkZXIgw6Agb2J0ZW5pciBsYSBtw6ptZSBjaG9zZSBldCBvw7kgdHUgaW52aXRlcmFzIGNldHRlIHBlcnNvbm5lIHBvdXIgZW4gcGFybGVyLicsCiAgICAgICdBaWRlIHLDqWVsbGVtZW50IGNldHRlIHBlcnNvbm5lLicsCiAgICAgICdGYWlzIGxhIE3DqWRpdGF0aW9uIGR1IGJvbmhldXIgOiBhdSBtb21lbnQgZGUgdGUgY291Y2hlciwgcGVuc2UgYXZlYyBqb2llIGF1eCBib25uZXMgY2hvc2VzIHF1ZSB0dSBmYWlzIHBvdXIgbGVzIGF1dHJlcy4nIF0gfSwKICAgIHB1dGVyaTp7IG5hbWU6J0xlcyA0IFBvdXZvaXJzJywgdW5pdDonUG91dm9pcicsIHN1YjoncG91ciBkw6lzYWN0aXZlciBsZXMgZ3JhaW5lcyBuw6lnYXRpdmVzIHBsYW50w6llcyBkYW5zIGxlIHBhc3PDqScsIGl0ZW1zOlsKICAgICAgIlBlbnNlIGF1IFN0eWxvIDogc291dmllbnMtdG9pIGQnb8O5IHZpZW5uZW50IHRvdXRlcyBsZXMgY2hvc2VzLiIsCiAgICAgICJQcmVuZHMgY29uc2NpZW5jZSBkZXMgYsOpbsOpZmljZXMgcXVlIHR1IGFzIGV1cyBxdWFuZCB0dSBhcyBwbGFudMOpIGxhIGdyYWluZSBldCBwcmVuZHMgbGEgZmVybWUgZMOpY2lzaW9uIGRlIGxhIGTDqXNhY3RpdmVyIGF2YW50IHF1J2VsbGUgbmUgc2UgbXVsdGlwbGllIGVuY29yZSBkYXZhbnRhZ2UgZW4gdG9pLiIsCiAgICAgICdQcm9tZXRzIGRlIG5lIHBsdXMgcmVmYWlyZSBsYSBtw6ptZSBlcnJldXIgcGVuZGFudCB1bmUgcMOpcmlvZGUgZG9ubsOpZS4nLAogICAgICAnRmFpcyBxdWVscXVlIGNob3NlIGRlIHBvc2l0aWYgcG91ciDDqXF1aWxpYnJlciBsZXMgZ3JhaW5lcyBuw6lnYXRpdmVzLicgXSB9LAogICAgbGVnaTp7IG5hbWU6J0xlcyA0IExvaXMgZGVzIEdyYWluZXMnLCB1bml0OidMb2knLCBzdWI6J2xlcyBsb2lzIHNlbG9uIGxlc3F1ZWxsZXMgZm9uY3Rpb25uZW50IGxlcyBncmFpbmVzJywgaXRlbXM6WwogICAgICAnVHUgcsOpY29sdGVzIGNlIHF1ZSB0dSBhcyBzZW3DqSA6IHNpIHR1IHBsYW50ZXMgZGVzIGdyYWluZXMgZGUgcGFzdMOocXVlLCB0dSBvYnRpZW5kcmFzIHVuZSBwYXN0w6hxdWUuJywKICAgICAgJ0NlIHF1ZSB0dSByZcOnb2lzIGVuIHJldG91ciBlc3QgdG91am91cnMgYmVhdWNvdXAsIGJlYXVjb3VwIHBsdXMgZ3JhbmQgcXVlIGNlIHF1ZSB0dSBhcyBmYWl0LicsCiAgICAgICdTaSB0dSBuZSBmYWlzIHJpZW4sIHR1IG5lIHJlY2V2cmFzIHJpZW4gZW4gcmV0b3VyLicsCiAgICAgICdTaSB0dSBmYWlzIHF1ZWxxdWUgY2hvc2UsIGFsb3JzIHR1IGRvaXMgcmVjZXZvaXIgcXVlbHF1ZSBjaG9zZSBlbiByZXRvdXIuJyBdIH0sCiAgICBmbG9yaTp7IG5hbWU6J0xlcyA0IEZsZXVycycsIHVuaXQ6J0ZsZXVyJywgc3ViOidsYSBtYW5pw6hyZSBkb250IGxlcyBncmFpbmVzIHBvcnRlbnQgbGV1cnMgZnJ1aXRzJywgaXRlbXM6WwogICAgICAnVHUgcmXDp29pcyBleGFjdGVtZW50IGNlIHF1ZSB0dSBkb25uZXMuJywKICAgICAgJ0NoYXF1ZSBhY3Rpb24gY3LDqWUgdW5lIGhhYml0dWRlLicsCiAgICAgICJDZSBxdWUgdHUgZmFpcyBjcsOpZSBsZXMgcGVyc29ubmVzIGV0IGwnZW52aXJvbm5lbWVudCBhdXRvdXIgZGUgdG9pLiIsCiAgICAgICdDZSBxdWUgdHUgZmFpcyBjcsOpZSBsZSBtb25kZSBkYW5zIGxlcXVlbCB0dSB2YXMgZW50cmVyLicgXSB9LAogICAgcHJpb3JpdGF0aTp7IG5hbWU6J0xlcyA0IFByaW9yaXTDqXMnLCB1bml0OidQcmlvcml0w6knLCBzdWI6Imwnb3JkcmUgZGFucyBsZXF1ZWwgbGVzIGdyYWluZXMgcG9ydGVudCBsZXVycyBmcnVpdHMiLCBpdGVtczpbCiAgICAgIHsgaDonUHJlbWllciBlbnRyw6ksIHByZW1pZXIgc29ydGkuJywgZXg6IlVuZSBncmFpbmUgcGxhbnTDqWUgYXZhbnQgdW5lIGF1dHJlIGdlcm1lcmEgYXZhbnQgbGEgc2Vjb25kZS4gU2kgdHUgYWlkZXMgdW4gYW1pIMOgIMOqdHJlIHBsdXMgY3LDqWF0aWYgYXUgdHJhdmFpbCBsZSBsdW5kaSwgcHVpcyB1biBhdXRyZSBhbWkgw6Agw6p0cmUgcGx1cyBjcsOpYXRpZiBsZSBtYXJkaSwgbGEgZ3JhaW5lIGR1IGx1bmRpIHMnb3V2cmlyYSBlbiBwcmVtaWVyLiIgfSwKICAgICAgeyBoOidRdWFuZCB0dSBhcyB1bmUgaGFiaXR1ZGUsIGxhIGdyYWluZSBwb3J0ZSBzZXMgZnJ1aXRzIGF2YW50IGxhIHByaW9yaXTDqSAxLicsIGV4OiJTaSB0dSBhcyBhaWTDqSBsJ2FtaSBkdSBtYXJkaSByw6lndWxpw6hyZW1lbnQsIGNvbW1lIHVuZSBoYWJpdHVkZSwgbGEgZ3JhaW5lIHBsYW50w6llIGF2ZWMgbHVpIHMnb3V2cmlyYSBhdmFudCBjZWxsZSBwbGFudMOpZSBhdmVjIGwnYW1pIGR1IGx1bmRpLiIgfSwKICAgICAgeyBoOiJRdWFuZCB0dSBhaWRlcyBxdWVscXUndW4gcXVpIGVzdCBzdXIgbGUgcG9pbnQgZGUgdml2cmUgdW4gZ3JhbmQgY2hhbmdlbWVudCBwZXJzb25uZWwsIGxhIGdyYWluZSBwb3J0ZSBzZXMgZnJ1aXRzIGF2YW50IGxhIHByaW9yaXTDqSAyLiIsIGV4OiJTaSB0dSBhcyBhaWTDqSBlbmNvcmUgdW4gYXV0cmUgYW1pIMOgIMOqdHJlIHBsdXMgY3LDqWF0aWYgbGUgbWVyY3JlZGkgZXQgcXVlIGxlIGpldWRpIHVuIGdyYW5kIGNoYW5nZW1lbnQgYWxsYWl0IHNlIHByb2R1aXJlIGRhbnMgc2EgdmllLCBsZXMgZ3JhaW5lcyBwbGFudMOpZXMgdHLDqHMgcHLDqHMgZCd1biDDqXbDqW5lbWVudCBtYWpldXIgbcO7cmlzc2VudCBhdmFudCBjZWxsZXMgcGxhbnTDqWVzIGF1cGFyYXZhbnQuIiB9LAogICAgICB7IGg6IlF1YW5kIHR1IGFpZGVzIHF1ZWxxdSd1biBxdWkgc2UgY29uc2FjcmUgw6AgdW4gYnV0IGF1IHNlcnZpY2UgZGUgbm9tYnJldXNlcyBwZXJzb25uZXMsIGxhIGdyYWluZSBwb3J0ZSBzZXMgZnJ1aXRzIGF2YW50IGxhIHByaW9yaXTDqSAzLiIsIGV4OiJTaSBsJ2FtaSBhaWTDqSBsZSBtYXJkaSBjaGVyY2hhaXQgdW5lIG1hbmnDqHJlIGNyw6lhdGl2ZSBkZSBndcOpcmlyIGxlIGNhbmNlciwgdGFuZGlzIHF1ZSBsZXMgYW1pcyBhaWTDqXMgbGUgbHVuZGkgZXQgbGUgbWVyY3JlZGkgY2hlcmNoYWllbnQgdW5lIG1hbmnDqHJlIHBsdXMgY3LDqWF0aXZlIGRlIHNlIG1hcXVpbGxlciwgbGVzIGdyYWluZXMgZHUgbWFyZGkgcGFzc2VudCBkZXZhbnQgZXQgcydvdXZyZW50IGVuIHByZW1pZXIuIiB9IF0gfQogIH0sCiAgaW50cm86WwogICAgWyJCaWVudmVudWUgZGFucyBsJ2FwcGxpY2F0aW9uIEJvbm5lcyBHcmFpbmVzIiwiVG91dCBjZSBxdWUgdHUgdmlzIHZpZW50IGRlcyBncmFpbmVzIHF1ZSB0dSBhcyBwbGFudMOpZXMgcGFyIHRlcyBwZW5zw6llcywgdGVzIHBhcm9sZXMgZXQgdGVzIGFjdGVzLiBMJ2FwcGxpY2F0aW9uIHQnYWlkZSDDoCB2b2lyIGNlIHF1ZSB0dSBwbGFudGVzIGNoYXF1ZSBqb3VyIGV0IMOgIGNob2lzaXIgY29uc2NpZW1tZW50IGxlcyBncmFpbmVzIGRlIGxhIHZpZSBxdWUgdHUgZMOpc2lyZXMuIl0sCiAgICBbJ1RlcyBwcmF0aXF1ZXMnLCdNw6lkaXRhdGlvbiBldCB5b2dhIGF2ZWMgbWludXRldXIsIGdyYXRpdHVkZXMgZXQgc3VjY8OocywgbGEgbcOpZGl0YXRpb24gZHUgYm9uaGV1ciBldCBsZXMgNCBwb3V2b2lycy4gVHUgbGVzIHRyb3V2ZXMgdG91dGVzIHNvdXMgbGUgYm91dG9uIGR1IG1pbGlldSwgZXQgdG91dCBjZSBxdWUgdHUgZmFpcyB2YSBkYW5zIHRvbiBqb3VybmFsLiddLAogICAgWydMZXMgb3V0aWxzIGR1IGpvdXInLCdUcm91dmUgdW5lIG1hbmnDqHJlIGNyw6lhdGl2ZSBk4oCZdXRpbGlzZXIgbGVzIDIgb3V0aWxzIHBvdXIgdG9uIG9iamVjdGlmLiddLAogICAgWyJSZXNwZWN0ZSBsJ2VuZ2FnZW1lbnQgcHJpcyAhIiwiQ2UgcXVlIHR1IMOpY3JpcyDDoCDCqyBxdWkgaidhaWRlIMK7IGV0IGF1IDRlIHBvdXZvaXIgdmEgZGFucyB0YSBsaXN0ZSDDgCBmYWlyZS4gQ29jaGUtbGUgdW5lIGZvaXMgZmFpdCA6IGxlcyBib25uZXMgZ3JhaW5lcyBncmFuZGlzc2VudCBldCBsZXMgZ3JhaW5lcyBuw6lnYXRpdmVzIHNlIGTDqXNhY3RpdmVudC4iXSwKICAgIFsnUsOpam91aXMtdG9pIGRlcyBncmFpbmVzIGRlcyBhdXRyZXMnLCJEYW5zIGxhIGNvbW11bmF1dMOpLCB0dSB2b2lzLCBkZSBtYW5pw6hyZSBhbm9ueW1lLCBjZSBxdWUgbGVzIGF1dHJlcyBvbnQgcGxhbnTDqS4gUXVhbmQgdHUgdGUgcsOpam91aXMgcG91ciBldXgsIHR1IGFycm9zZXMgbGVzIGdyYWluZXMgZGUgdG9uIG9iamVjdGlmLiJdIF0sCiAgYWJvdXQ6WwogICAgWydDZSBxdWUgc29udCBsZXMgQm9ubmVzIEdyYWluZXMnLFsiQm9ubmVzIEdyYWluZXMgZXN0IHRvbiBqb3VybmFsIGRlIHByYXRpcXVlIGR1IHN5c3TDqG1lIGRlcyBncmFpbmVzLiIsIk5vdHJlIGVzcHJpdCBlbnJlZ2lzdHJlIHRvdXQgY2UgcXVlIG5vdXMgcGVuc29ucywgZGlzb25zIGV0IGZhaXNvbnMuIENoYXF1ZSBwZW5zw6llLCBwYXJvbGUgb3UgYWN0aW9uIGRldmllbnQgdW5lIGdyYWluZSBxdWkgZ3JhbmRpdCDDoCBsJ2ludMOpcmlldXIgZGUgbm90cmUgZXNwcml0IGV0LCDDoCB1biBtb21lbnQgZG9ubsOpLCByZXZpZW50IGRhbnMgbm90cmUgdmllIHNvdXMgZm9ybWUgZCdleHDDqXJpZW5jZS4iLCJMJ2FwcGxpY2F0aW9uIHQnYWlkZSDDoCByZW1hcnF1ZXIgY2UgcXVlIHR1IHBsYW50ZXMgZXQgw6AgY2hvaXNpciBjb25zY2llbW1lbnQgbGVzIGdyYWluZXMgZGUgY2UgcXVlIHR1IGTDqXNpcmVzLiJdXSwKICAgIFsiQ29tbWVudCBsJ3V0aWxpc2VyIGNoYXF1ZSBqb3VyIixbIkxlIG1hdGluIDogcmFwcGVsbGUtdG9pIHRvbiBvYmplY3RpZiBldCBkw6ljb3V2cmUgbGVzIG91dGlscyBkdSBqb3VyLiIsIlBlbmRhbnQgbGEgam91cm7DqWUgOiByZW1hcnF1ZSBjZSBxdWUgdHUgcGxhbnRlcy4gTm90ZSB0ZXMgZ3JhdGl0dWRlcyBldCB0ZXMgc3VjY8OocywgZXQgcXVhbmQgdHUgcmVjb25uYWlzIHVuZSBncmFpbmUgbsOpZ2F0aXZlLCB0cmF2YWlsbGUgYXZlYyBsZXMgNCBwb3V2b2lycy4iLCJMZSBzb2lyIDogZmFpcyBsYSBtw6lkaXRhdGlvbiBkdSBib25oZXVyLiIsIlBhcyBiZXNvaW4gZGUgbG9uZ3MgdGV4dGVzLiBRdWVscXVlcyBtaW51dGVzIGQnb2JzZXJ2YXRpb24gc2luY8OocmUsIHNhbnMganVnZW1lbnQgZXQgc2FucyBjdWxwYWJpbGl0w6ksIHN1ZmZpc2VudC4gTCdpbXBvcnRhbnQgZXN0IGRlIHJldmVuaXIgY2hhcXVlIGpvdXIuIl1dLAogICAgWydQb3VyIHF1aScsWyJQb3VyIHRvdXRlIHBlcnNvbm5lIHF1aSBhIHVuIG9iamVjdGlmIG91IHVuIHLDqnZlIGV0IHZldXQgbCdhdHRlaW5kcmUgZW4gcGxhbnRhbnQgbGVzIGJvbm5lcyBncmFpbmVzLiIsIlNpIHR1IHRyYXZlcnNlcyB1bmUgcMOpcmlvZGUgZGlmZmljaWxlIG91IHNpIHVuZSBzaXR1YXRpb24gc2UgcsOpcMOodGUsIGMnZXN0IGxlIHNpZ25lIHF1ZSBkZXMgZ3JhaW5lcyBwbGFudMOpZXMgZGFucyBsZSBwYXNzw6kgbcO7cmlzc2VudC4gQXZlYyBsZXMgNCBwb3V2b2lycywgdHUgcGV1eCBsZXMgZMOpc2FjdGl2ZXIsIGV0IGVuIHBsYW50YW50IGNvbnNjaWVtbWVudCBkZSBib25uZXMgZ3JhaW5lcywgdHUgcsOpw6lxdWlsaWJyZXMgbGEgYmFsYW5jZS4iXV0sCiAgICBbJ1F1YW5kIHR1IHJlY29ubmFpcyB1bmUgZ3JhaW5lIG7DqWdhdGl2ZScsWyJOb3VzIHBsYW50b25zIHRvdXMsIHNhbnMgbm91cyBlbiByZW5kcmUgY29tcHRlLCBkZXMgZ3JhaW5lcyBuw6lnYXRpdmVzIGF1c3NpLiBTaSBub3VzIG5lIGxlcyBkw6lzYWN0aXZvbnMgcGFzLCBlbGxlcyBjb250aW51ZW50IGRlIGdyYW5kaXIuIiwiQXZlYyBsZXMgNCBwb3V2b2lycyA6IHR1IHRlIHNvdXZpZW5zIGQnb8O5IHZpZW5uZW50IHRvdXRlcyBsZXMgY2hvc2VzLCB0dSBwcmVuZHMgY29uc2NpZW5jZSBkZXMgYsOpbsOpZmljZXMgcXVlIHR1IGFzIGV1cyBldCB0dSBkw6ljaWRlcyBkZSBkw6lzYWN0aXZlciBsYSBncmFpbmUsIHR1IHByb21ldHMgZGUgbmUgcGx1cyByw6lww6l0ZXIgbCdlcnJldXIgcGVuZGFudCB1biB0ZW1wcyBldCB0dSBmYWlzIHF1ZWxxdWUgY2hvc2UgZGUgcG9zaXRpZiBwb3VyIGwnw6lxdWlsaWJyZXIuIiwiQ2UgcXVlIHR1IHByb21ldHMgYXUgNGUgcG91dm9pciB2YSBkYW5zIHRhIGxpc3RlIMOAIGZhaXJlLCBwb3VyIG5lIHBhcyBvdWJsaWVyIGRlIGxlIGZhaXJlIHZyYWltZW50LiJdXSwKICAgIFsnTGEgbcOpZGl0YXRpb24gZHUgYm9uaGV1cicsWyJMZSBtb21lbnQgcXVpIHByw6ljw6hkZSBsZSBzb21tZWlsIHJlbGllIGxlIGNvbnNjaWVudCBldCBsZSBzdWJjb25zY2llbnQuIENlIHF1ZSB0dSBwZW5zZXMgYWxvcnMgY29udGludWUgZGUgZ3JhbmRpciBwZW5kYW50IHF1ZSB0dSBkb3JzLiIsIkMnZXN0IHBvdXJxdW9pLCBsZSBzb2lyLCBwZW5zZSBhdmVjIGpvaWUgYXUgYmllbiBxdWUgdHUgYXMgZmFpdCBwb3VyIGxlcyBhdXRyZXMgZXQgZMOpZGllLWxlIMOgIHRvbiBvYmplY3RpZi4iLCJUdSBwZXV4IGF1c3NpIGxhIGZhaXJlIHBlbmRhbnQgbGEgam91cm7DqWUsIGTDqHMgcXVlIHR1IGFzIHF1ZWxxdWVzIG1pbnV0ZXMuIl1dLAogICAgWydMZXMgb3V0aWxzIGR1IGpvdXInLFsiTGVzIDIwIG91dGlscyBzb250IHJlZ3JvdXDDqXMgZW4gNSBzw6lyaWVzIDogTGVzIDQgw4l0YXBlcywgTGVzIDQgUG91dm9pcnMsIExlcyA0IExvaXMgZGVzIEdyYWluZXMsIExlcyA0IEZsZXVycyBldCBMZXMgNCBQcmlvcml0w6lzLiBDaGFxdWUgc8OpcmllIGEgc2EgY291bGV1ciBldCBzb24gc3ltYm9sZS4iLHsgc3ViczoiQ2hhcXVlIGpvdXIsIHR1IGTDqWNvdXZyZXMgMiBvdXRpbHMgZXQgdHUgw6ljcmlzIGNvbW1lbnQgdHUgdXRpbGlzZXMgbGV1ciBjb21iaW5haXNvbi4gTGVzIG91dGlscyBzb250IGFjY2Vzc2libGVzIGF1eCBwZXJzb25uZXMgYXlhbnQgdW4gYWJvbm5lbWVudCBhY3RpZi4iIH1dXSwKICAgIFsnTGEgY29tbXVuYXV0w6knLFsiVHUgcGV1eCBwYXJ0YWdlciBkZSBtYW5pw6hyZSBhbm9ueW1lIHRlcyBncmF0aXR1ZGVzLCB0ZXMgc3VjY8OocywgdGEgbcOpZGl0YXRpb24gZHUgYm9uaGV1ciBvdSB0ZXMgNCBwb3V2b2lycywgc291cyB1biBub20gcXVlIHR1IGNob2lzaXMuIiwiUXVhbmQgdHUgdGUgcsOpam91aXMgZGVzIGdyYWluZXMgZGVzIGF1dHJlcywgdHUgYXJyb3NlcyBsZXMgZ3JhaW5lcyBkZSB0b24gb2JqZWN0aWYuIFF1YW5kIHR1IGxpcyBsZXMgNCBwb3V2b2lycyBkZSBxdWVscXUndW4sIHR1IHBldXggYXVzc2kgbGVzIHBhcmNvdXJpciBwb3VyIHRvaS4iLCJDZSBxdWUgdHUgw6ljcmlzIHJlc3RlIHByaXbDqSwgc2F1ZiBjZSBxdWUgdHUgY2hvaXNpcyBkZSBwYXJ0YWdlci4iXV0gXSwKICBrYXJtYTpbCiAgICBbJ1Byb3TDqGdlIGxhIHZpZScsJ1ByZW5kcyBzb2luIGRlcyBwZXJzb25uZXMsIGRlcyBhbmltYXV4IGV0IGRlcyBwbGFudGVzLiBOZSBibGVzc2UgaW50ZW50aW9ubmVsbGVtZW50IGF1Y3VuIMOqdHJlLicsJ0xhIGdyYWluZSBkZSBsYSBzYW50w6knXSwKICAgIFsnUHJvdMOoZ2UgbGEgcHJvcHJpw6l0w6knLCJEb25uZSBldCBhaWRlIGxlcyBhdXRyZXMuIE5lIHByZW5kcyBwYXMgY2UgcXVpIG5lIHQnYXBwYXJ0aWVudCBwYXMgc2FucyBwZXJtaXNzaW9uLiIsJ0xhIGdyYWluZSBkZSBsYSBwcm9zcMOpcml0w6knXSwKICAgIFsnUHVyZXTDqSBzZXh1ZWxsZScsIkhvbm9yZSBsZSBsaWVuIGVudHJlIGRldXggcGVyc29ubmVzIHF1aSBzZSBzb250IGVuZ2Fnw6llcyBsJ3VuZSBlbnZlcnMgbCdhdXRyZSwgbGUgdGllbiBldCBjZWx1aSBkZXMgYXV0cmVzLiIsJ0xhIGdyYWluZSBkdSBib25oZXVyJ10sCiAgICBbJ0ludMOpZ3JpdMOpJywnRGlzIGxhIHbDqXJpdMOpIGV0IHRpZW5zIHRlcyBwcm9tZXNzZXMuIE5lIGRpcyBwYXMgY2UgcXVlIHR1IG5lIHJlc3NlbnMgcGFzIHZyYWltZW50LicsJ0xhIGdyYWluZSBkZSBsYSBjb25maWFuY2UnXSwKICAgIFsnRGlzIGRlcyBwYXJvbGVzIHF1aSByYXNzZW1ibGVudCBsZXMgZ2VucycsJ1V0aWxpc2UgdGVzIHBhcm9sZXMgcG91ciByYXNzZW1ibGVyIGxlcyBnZW5zLiDDiXZpdGUgbGVzIHBhcm9sZXMgcXVpIGRpdmlzZW50IG91IGNyw6llbnQgZGVzIG1hbGVudGVuZHVzLicsIkxhIGdyYWluZSBkZSBsJ2hhcm1vbmllIl0sCiAgICBbJ1BhcmxlIGF2ZWMgZG91Y2V1ciBldCBiaWVudmVpbGxhbmNlJywnQXBwcsOpY2llIGxlcyBhdXRyZXMgZXQgcGFybGUtbGV1ciBhdmVjIHJlc3BlY3QuIMOJdml0ZSBsZXMgbW90cyBkdXJzIGV0IGJsZXNzYW50cy4nLCdMYSBncmFpbmUgZHUgcmVzcGVjdCddLAogICAgWydOZSBkaXMgcXVlIGRlcyBwYXJvbGVzIHV0aWxlcycsJ0RpcyBkZXMgY2hvc2VzIHF1aSBhaWRlbnQgZXQgcXVpIG9udCB1biBzZW5zLiDDiXZpdGUgbGVzIGNvbW3DqXJhZ2VzIGV0IGxlcyBwYXJvbGVzIHZpZGVzLicsJ0xhIGdyYWluZSBkdSB0ZW1wcyddLAogICAgWydSw6lqb3Vpcy10b2kgZHUgc3VjY8OocyBkZXMgYXV0cmVzJywiUsOpam91aXMtdG9pIHF1YW5kIGxlcyBhdXRyZXMgb2J0aWVubmVudCBjZSBxdSdpbHMgZMOpc2lyZW50IGV0IGFwcHLDqWNpZSBjZSBxdWUgdHUgYXMuIMOJdml0ZSBsJ2VudmllIGV0IGwnYXZpZGl0w6kuIiwnTGEgZ3JhaW5lIGR1IHN1Y2PDqHMnXSwKICAgIFsnQ29tcGFzc2lvbiBwb3VyIGxlcyBwcm9ibMOobWVzIGRlcyBhdXRyZXMnLCdPZmZyZSB0YSBjb21wYXNzaW9uIMOgIGNldXggcXVpIHRyYXZlcnNlbnQgZGVzIGRpZmZpY3VsdMOpcyBldCBhaWRlLWxlcyBjb21tZSB0dSBwZXV4LiBOZSB0ZSByw6lqb3VpcyBwYXMgZGVzIG1hbGhldXJzIGRlcyBhdXRyZXMuJywnTGEgZ3JhaW5lIGRlIGxhIGNvbXBhc3Npb24nXSwKICAgIFsnQ29tcHJlbmRzIGNvbW1lbnQgZm9uY3Rpb25uZSBsZSBzdHlsbycsIlNvdXZpZW5zLXRvaSBxdWUgdG91dCB2aWVudCBkZXMgZ3JhaW5lcyBwbGFudMOpZXMgZXQgcXVlIGxlIGNoYW5nZW1lbnQgY29tbWVuY2UgcGFyIHRvaS4gVmlzIGV0IHBhcnRhZ2UgbGUgcHJpbmNpcGUgZHUgc3R5bG8uIiwnTGEgZ3JhaW5lIGRlIGxhIHNhZ2Vzc2UnXSBdLAogIGdyb3VwczpbJ0FDVEVTJywnUEFST0xFUycsJ1BFTlPDiUVTJ10sIGRvbWFpbnM6WydBcmdlbnQnLCdSZWxhdGlvbnMnLCdTYW50w6knXQp9OwpYVC5pdCA9IHsKICB1aTp7IG5hdkpvdXJuYWw6J0RpYXJpbycsIG5hdlByb2ZpbGU6J1Byb2ZpbG8nLAogICAgdG9kb0xlYWQ6J0Npw7IgY2hlIGhvIHByb21lc3NvIGRpIGZhcmUuIEdsaSBpbXBlZ25pIGNoZSBobyBwcmVzby4nLAogICAgdVRpdGxlOidJIHR1b2kgc3RydW1lbnRpIGRpIG9nZ2knLCB1TG9ja2VkOidPZ25pIGdpb3JubyBwdW9pIHNjb3ByaXJlIDIgZGVpIDIwIHN0cnVtZW50aTogSSA0IFBhc3NpLCBJIDQgUG90ZXJpLCBMZSA0IExlZ2dpIGRlaSBTZW1pLCBJIDQgRmlvcmkgZSBMZSA0IFByaW9yaXTDoC4nLAogICAgdUxvY2tNc2c6J1RpIHNlcnZlIHVuIGFiYm9uYW1lbnRvIGF0dGl2byBwZXIgdXNhcmUgZ2xpIHN0cnVtZW50aS4nLCB1U2VlU3ViczonVmVkaSBnbGkgYWJib25hbWVudGknLAogICAgdURyYXdOb3RlOidUb2NjYSBlIHNjb3ByaSBpIDIgc3RydW1lbnRpIGNvbiBjdWkgbGF2b3JpIG9nZ2kuJywgdURyYXc6J1Njb3ByaSBnbGkgc3RydW1lbnRpIGRpIG9nZ2knLAogICAgdVE6J0NvbWUgdXNvIG9nZ2kgcXVlc3RhIGNvbWJpbmF6aW9uZSBkaSBzdHJ1bWVudGk\/JywgdVBoOidTY3JpdmkgcGVyIHRlLiBSZXN0YSBzb2xvIG5lbCB0dW8gZGlhcmlvLicsCiAgICB1U2F2ZTonU2FsdmEgbmVsIGRpYXJpbycsIHVVcGRhdGU6J0FnZ2lvcm5hIG5lbCBkaWFyaW8nLCB1QWdhaW46J1NjZWdsaSB1bmEgbnVvdmEgY29tYmluYXppb25lIGRpIHN0cnVtZW50aScsIHVTYXZlZDonU2FsdmF0byBuZWwgdHVvIGRpYXJpbycsCiAgICB1U2ltT246J1ZlcnNpb25lIGRpIHByb3ZhOiBzaW11bGEgdW4gYWJib25hbWVudG8gYXR0aXZvJywgdVNpbU9mZjonVmVyc2lvbmUgZGkgcHJvdmE6IHNpbXVsYSBzZW56YSBhYmJvbmFtZW50bycsCiAgICBodWJUaXRsZTonQ29zYSBwcmF0aWNoaSBhZGVzc28\/JywgaHViTGVhZDonU2NlZ2xpIGxhIHByYXRpY2EuIFR1dHRvIGNpw7IgY2hlIGZhaSBmaW5pc2NlIG5lbCB0dW8gZGlhcmlvLicsIGh1YkJ1c3k6J1VuYSBwcmF0aWNhIMOoIGluIGNvcnNvIMK3IHRvcm5hIGFsIHRpbWVyJywKICAgIG15UHJvZmlsZTonSWwgbWlvIHByb2ZpbG8nLCBjaGFuZ2VOYW1lOidDYW1iaWEgbm9tZScsIHBpY2tOYW1lOidTY2VnbGkgdW4gbm9tZSBwZXIgbGEgY29tdW5pdMOgJywKICAgIHN0UHJhY3Q6J3ByYXRpY2hlJywgc3RNaW46J21pbnV0aScsIHN0VG9kbzonRGEgZmFyZSBjb21wbGV0YXRpJywgYXZhdGFyOidJbCBtaW8gYXZhdGFyJywgYWRkcmVzczonQ29tZSBtaSByaXZvbGdvIGEgdGUnLAogICAgaW50cm86J0ludHJvZHV6aW9uZScsIGFib3V0OiJJbmZvcm1hemlvbmkgc3VsbCdhcHAiLCBrYXJtYTonSSAxMCBLYXJtYSBQb3NpdGl2aScsIGthcm1hU3ViOiJMJ2lzcGlyYXppb25lIGRlbGwnYXBwIiwgY29udGFjdDonQ29udGF0dG8nLAogICAgcHJvZkJhbm5lcjoiVmVyc2lvbmUgZGkgcHJvdmEuIE5lbGwnYXBwIHBlciB0ZWxlZm9ubyB0cm92ZXJhaSBxdWkgYW5jaGU6IGkgcHJvbWVtb3JpYSAoZmlubyBhIDYgYWwgZ2lvcm5vKSwgaWwgY2FtYmlvIGRlbGwnZW1haWwsIGxhIGNhbmNlbGxhemlvbmUgZGVpIGRhdGksIGxhIGNhbmNlbGxhemlvbmUgZGVsbCdhY2NvdW50LCBsJ2luZm9ybWF0aXZhIHN1bGxhIHByaXZhY3kgZSBpIHRlcm1pbmkuIiwKICAgIG92UHJldjonSW5kaWV0cm8nLCBvdk5leHQ6J0F2YW50aScsIG92U3RhcnQ6J0luaXppYScsIGJ5RG9tYWluOidSQUdHUlVQUEFUSSBQRVIgQU1CSVRPJywKICAgIGthcm1hTGVhZDoiTCdpc3BpcmF6aW9uZSBkZWxsJ2FwcC4gUHVvaSB1c2FybGkgbmVsbGEgcHJhdGljYSBkZWkgNCBwb3RlcmkgZSBuZWxsYSBtZWRpdGF6aW9uZSBkZWxsYSBnaW9pYS4iIH0sCiAga2luZFU6J1N0cnVtZW50aSBkZWwgZ2lvcm5vJywKICBzZXRzOnsKICAgIHBhc2k6eyBuYW1lOidJIDQgUGFzc2knLCB1bml0OidQYXNzbycsIHN1YjoncGVyIGFubmFmZmlhcmUgaSBzZW1pIGRlbCB0dW8gb2JpZXR0aXZvJywgaXRlbXM6WwogICAgICAiRGknIGNvc2EgdnVvaSBuZWxsYSB0dWEgdml0YSBjb24gdW5hIGZyYXNlIGJyZXZlLiIsCiAgICAgICdQaWFuaWZpY2EgY2hpIGFpdXRlcmFpIGEgb3R0ZW5lcmUgbGEgc3Rlc3NhIGNvc2EgZSBkb3ZlIGludml0ZXJhaSBxdWVsbGEgcGVyc29uYSBwZXIgcGFybGFybmUuJywKICAgICAgJ0FpdXRhIGNvbmNyZXRhbWVudGUgcXVlbGxhIHBlcnNvbmEuJywKICAgICAgJ0ZhaSBsYSBNZWRpdGF6aW9uZSBkZWxsYSBnaW9pYTogcXVhbmRvIHZhaSBhIGRvcm1pcmUsIHBlbnNhIGNvbiBnaW9pYSBhbGxlIGNvc2UgYnVvbmUgY2hlIGZhaSBwZXIgZ2xpIGFsdHJpLicgXSB9LAogICAgcHV0ZXJpOnsgbmFtZTonSSA0IFBvdGVyaScsIHVuaXQ6J1BvdGVyZScsIHN1YjoncGVyIGRpc2F0dGl2YXJlIGkgc2VtaSBuZWdhdGl2aSBwaWFudGF0aSBpbiBwYXNzYXRvJywgaXRlbXM6WwogICAgICAnUGVuc2EgYWxsYSBQZW5uYTogcmljb3JkYSBkYSBkb3ZlIHZlbmdvbm8gdHV0dGUgbGUgY29zZS4nLAogICAgICAnUHJlbmRpIGNvc2NpZW56YSBkZWkgYmVuZWZpY2kgY2hlIGhhaSBhdnV0byBxdWFuZG8gaGFpIHBpYW50YXRvIGlsIHNlbWUgZSBwcmVuZGkgbGEgZmVybWEgZGVjaXNpb25lIGRpIGRpc2F0dGl2YXJsbyBwcmltYSBjaGUgc2kgbW9sdGlwbGljaGkgYW5jb3JhIGRpIHBpw7kgZGVudHJvIGRpIHRlLicsCiAgICAgICdQcm9tZXR0aSBkaSBub24gcmlwZXRlcmUgbG8gc3Rlc3NvIGVycm9yZSBwZXIgdW4gY2VydG8gcGVyaW9kbyBkaSB0ZW1wby4nLAogICAgICAnRmFpIHF1YWxjb3NhIGRpIHBvc2l0aXZvIHBlciBiaWxhbmNpYXJlIGkgc2VtaSBuZWdhdGl2aS4nIF0gfSwKICAgIGxlZ2k6eyBuYW1lOidMZSA0IExlZ2dpIGRlaSBTZW1pJywgdW5pdDonTGVnZ2UnLCBzdWI6J2xlIGxlZ2dpIHNlY29uZG8gY3VpIGZ1bnppb25hbm8gaSBzZW1pJywgaXRlbXM6WwogICAgICAiUmFjY29nbGkgY2nDsiBjaGUgaGFpIHNlbWluYXRvOiBzZSBwaWFudGkgc2VtaSBkaSBhbmd1cmlhLCBvdHRlcnJhaSB1bidhbmd1cmlhLiIsCiAgICAgICdDacOyIGNoZSByaWNldmkgaW4gY2FtYmlvIMOoIHNlbXByZSBtb2x0bywgbW9sdG8gcGnDuSBncmFuZGUgZGkgY2nDsiBjaGUgaGFpIGZhdHRvLicsCiAgICAgICdTZSBub24gZmFpIG51bGxhLCBub24gcmljZXZlcmFpIG51bGxhIGluIGNhbWJpby4nLAogICAgICAnU2UgZmFpIHF1YWxjb3NhLCBhbGxvcmEgZGV2aSByaWNldmVyZSBxdWFsY29zYSBpbiBjYW1iaW8uJyBdIH0sCiAgICBmbG9yaTp7IG5hbWU6J0kgNCBGaW9yaScsIHVuaXQ6J0Zpb3JlJywgc3ViOidpbCBtb2RvIGluIGN1aSBpIHNlbWkgZGFubm8gZnJ1dHRvJywgaXRlbXM6WwogICAgICAnUmljZXZpIGVzYXR0YW1lbnRlIGNpw7IgY2hlIGRhaS4nLAogICAgICAiT2duaSBhemlvbmUgY3JlYSB1bidhYml0dWRpbmUuIiwKICAgICAgIkNpw7IgY2hlIGZhaSBjcmVhIGxlIHBlcnNvbmUgZSBsJ2FtYmllbnRlIGludG9ybm8gYSB0ZS4iLAogICAgICAnQ2nDsiBjaGUgZmFpIGNyZWEgaWwgbW9uZG8gaW4gY3VpIGVudHJlcmFpLicgXSB9LAogICAgcHJpb3JpdGF0aTp7IG5hbWU6J0xlIDQgUHJpb3JpdMOgJywgdW5pdDonUHJpb3JpdMOgJywgc3ViOiJsJ29yZGluZSBpbiBjdWkgaSBzZW1pIGRhbm5vIGZydXR0byIsIGl0ZW1zOlsKICAgICAgeyBoOidQcmltbyBhIGVudHJhcmUsIHByaW1vIGEgdXNjaXJlLicsIGV4OiJVbiBzZW1lIHBpYW50YXRvIHByaW1hIGRpIHVuIGFsdHJvIGdlcm1vZ2xpZXLDoCBwcmltYSBkZWwgc2Vjb25kby4gU2UgbHVuZWTDrCBhaXV0aSB1biBhbWljbyBhIGVzc2VyZSBwacO5IGNyZWF0aXZvIGFsIGxhdm9ybyBlIG1hcnRlZMOsIGFpdXRpIHVuIGFsdHJvIGFtaWNvIGEgZXNzZXJlIHBpw7kgY3JlYXRpdm8sIGlsIHNlbWUgZGkgbHVuZWTDrCBzaSBhcHJpcsOgIHBlciBwcmltby4iIH0sCiAgICAgIHsgaDoiUXVhbmRvIGhhaSB1bidhYml0dWRpbmUsIGlsIHNlbWUgZMOgIGZydXR0byBwcmltYSBkZWxsYSBwcmlvcml0w6AgMS4iLCBleDoiU2UgaGFpIGFpdXRhdG8gbCdhbWljbyBkaSBtYXJ0ZWTDrCByZWdvbGFybWVudGUsIGNvbWUgdW4nYWJpdHVkaW5lLCBpbCBzZW1lIHBpYW50YXRvIGNvbiBsdWkgc2kgYXByaXLDoCBwcmltYSBkaSBxdWVsbG8gcGlhbnRhdG8gY29uIGwnYW1pY28gZGkgbHVuZWTDrC4iIH0sCiAgICAgIHsgaDonUXVhbmRvIGFpdXRpIHF1YWxjdW5vIGNoZSBzdGEgcGVyIGF0dHJhdmVyc2FyZSB1biBncmFuZGUgY2FtYmlhbWVudG8gcGVyc29uYWxlLCBpbCBzZW1lIGTDoCBmcnV0dG8gcHJpbWEgZGVsbGEgcHJpb3JpdMOgIDIuJywgZXg6IlNlIG1lcmNvbGVkw6wgaGFpIGFpdXRhdG8gYW5jb3JhIHVuIGFsdHJvIGFtaWNvIGEgZXNzZXJlIHBpw7kgY3JlYXRpdm8gZSBnaW92ZWTDrCBuZWxsYSBzdWEgdml0YSBzdGF2YSBwZXIgYXZ2ZW5pcmUgdW4gZ3JhbmRlIGNhbWJpYW1lbnRvLCBpIHNlbWkgcGlhbnRhdGkgbW9sdG8gdmljaW5vIGEgdW4gZXZlbnRvIGltcG9ydGFudGUgbWF0dXJhbm8gcHJpbWEgZGkgcXVlbGxpIHBpYW50YXRpIGluIHByZWNlZGVuemEuIiB9LAogICAgICB7IGg6J1F1YW5kbyBhaXV0aSBxdWFsY3VubyBjaGUgc2kgZGVkaWNhIGEgdW5vIHNjb3BvIGFsIHNlcnZpemlvIGRpIG1vbHRlIHBlcnNvbmUsIGlsIHNlbWUgZMOgIGZydXR0byBwcmltYSBkZWxsYSBwcmlvcml0w6AgMy4nLCBleDoiU2UgbCdhbWljbyBhaXV0YXRvIG1hcnRlZMOsIGNlcmNhdmEgdW4gbW9kbyBjcmVhdGl2byBwZXIgY3VyYXJlIGlsIGNhbmNybywgbWVudHJlIGdsaSBhbWljaSBhaXV0YXRpIGx1bmVkw6wgZSBtZXJjb2xlZMOsIGNlcmNhdmFubyB1biBtb2RvIHBpw7kgY3JlYXRpdm8gcGVyIHRydWNjYXJzaSwgaSBzZW1pIGRpIG1hcnRlZMOsIHBhc3Nhbm8gYXZhbnRpIGUgc2kgYXByb25vIHBlciBwcmltaS4iIH0gXSB9CiAgfSwKICBpbnRybzpbCiAgICBbIkJlbnZlbnV0YSBuZWxsJ2FwcCBTZW1pIEJ1b25pIiwiVHV0dG8gY2nDsiBjaGUgdml2aSB2aWVuZSBkYWkgc2VtaSBjaGUgaGFpIHBpYW50YXRvIGNvbiBpIHBlbnNpZXJpLCBsZSBwYXJvbGUgZSBsZSBhemlvbmkuIEwnYXBwIHRpIGFpdXRhIGEgdmVkZXJlIGNvc2EgcGlhbnRpIG9nbmkgZ2lvcm5vIGUgYSBzY2VnbGllcmUgY29uc2FwZXZvbG1lbnRlIGkgc2VtaSBwZXIgbGEgdml0YSBjaGUgZGVzaWRlcmkuIl0sCiAgICBbJ0xlIHR1ZSBwcmF0aWNoZScsJ01lZGl0YXppb25lIGUgeW9nYSBjb24gaWwgdGltZXIsIGdyYXRpdHVkaW5pIGUgc3VjY2Vzc2ksIGxhIG1lZGl0YXppb25lIGRlbGxhIGdpb2lhIGUgaSA0IHBvdGVyaS4gTGUgdHJvdmkgdHV0dGUgbmVsIHB1bHNhbnRlIGNlbnRyYWxlLCBlIHR1dHRvIGNpw7IgY2hlIGZhaSBmaW5pc2NlIG5lbCB0dW8gZGlhcmlvLiddLAogICAgWydHbGkgc3RydW1lbnRpIGRlbCBnaW9ybm8nLCdUcm92YSB1biBtb2RvIGNyZWF0aXZvIGRpIHVzYXJlIGkgMiBzdHJ1bWVudGkgcGVyIGlsIHR1byBvYmlldHRpdm8uJ10sCiAgICBbIlJpc3BldHRhIGwnaW1wZWdubyBwcmVzbyEiLCJDacOyIGNoZSBzY3JpdmkgaW4gwqtjaGkgYWl1dG\/CuyBlIG5lbCA0wrAgcG90ZXJlIGZpbmlzY2UgbmVsbGEgbGlzdGEgRGEgZmFyZS4gU3B1bnRhbG8gZG9wbyBhdmVybG8gZmF0dG86IGkgc2VtaSBidW9uaSBjcmVzY29ubyBlIHF1ZWxsaSBuZWdhdGl2aSBzaSBkaXNhdHRpdmFuby4iXSwKICAgIFsnR2lvaXNjaSBkZWkgc2VtaSBkZWdsaSBhbHRyaScsJ05lbGxhIGNvbXVuaXTDoCB2ZWRpLCBpbiBmb3JtYSBhbm9uaW1hLCBjb3NhIGhhbm5vIHBpYW50YXRvIGdsaSBhbHRyaS4gUXVhbmRvIGdpb2lzY2kgcGVyIGxvcm8sIGFubmFmZmkgaSBzZW1pIGRlbCB0dW8gb2JpZXR0aXZvLiddIF0sCiAgYWJvdXQ6WwogICAgWydDaGUgY29zYSDDqCBTZW1pIEJ1b25pJyxbIlNlbWkgQnVvbmkgw6ggaWwgdHVvIGRpYXJpbyBkaSBwcmF0aWNhIHBlciBpbCBzaXN0ZW1hIGRlaSBzZW1pLiIsIkxhIG5vc3RyYSBtZW50ZSByZWdpc3RyYSB0dXR0byBjacOyIGNoZSBwZW5zaWFtbywgZGljaWFtbyBlIGZhY2NpYW1vLiBPZ25pIHBlbnNpZXJvLCBwYXJvbGEgbyBhemlvbmUgZGl2ZW50YSB1biBzZW1lIGNoZSBjcmVzY2UgYWxsJ2ludGVybm8gZGVsbGEgbm9zdHJhIG1lbnRlIGUsIGEgdW4gY2VydG8gcHVudG8sIHJpdG9ybmEgbmVsbGEgbm9zdHJhIHZpdGEgY29tZSBlc3BlcmllbnphLiIsIkwnYXBwIHRpIGFpdXRhIGEgbm90YXJlIGNvc2EgcGlhbnRpIGUgYSBzY2VnbGllcmUgY29uc2FwZXZvbG1lbnRlIGkgc2VtaSBwZXIgY2nDsiBjaGUgZGVzaWRlcmkuIl1dLAogICAgWydDb21lIHVzYXJsYSBvZ25pIGdpb3JubycsWyJBbCBtYXR0aW5vOiByaWNvcmRhIGlsIHR1byBvYmlldHRpdm8gZSBzY29wcmkgZ2xpIHN0cnVtZW50aSBkZWwgZ2lvcm5vLiIsIkR1cmFudGUgaWwgZ2lvcm5vOiBvc3NlcnZhIGNvc2EgcGlhbnRpLiBBbm5vdGEgbGUgZ3JhdGl0dWRpbmkgZSBpIHN1Y2Nlc3NpLCBlIHF1YW5kbyByaWNvbm9zY2kgdW4gc2VtZSBuZWdhdGl2bywgbGF2b3JhIGNvbiBpIDQgcG90ZXJpLiIsIkxhIHNlcmE6IGZhaSBsYSBtZWRpdGF6aW9uZSBkZWxsYSBnaW9pYS4iLCJOb24gc2Vydm9ubyB0ZXN0aSBsdW5naGkuIEJhc3Rhbm8gcG9jaGkgbWludXRpIGRpIG9zc2VydmF6aW9uZSBzaW5jZXJhLCBzZW56YSBnaXVkaXppbyBlIHNlbnphIHNlbnNvIGRpIGNvbHBhLiBMJ2ltcG9ydGFudGUgw6ggdG9ybmFyZSBvZ25pIGdpb3Juby4iXV0sCiAgICBbJ1BlciBjaGkgw6gnLFsiUGVyIGNoaXVucXVlIGFiYmlhIHVuIG9iaWV0dGl2byBvIHVuIHNvZ25vIGUgdm9nbGlhIHJhZ2dpdW5nZXJsbyBwaWFudGFuZG8gaSBzZW1pIGdpdXN0aS4iLCJTZSBzdGFpIGF0dHJhdmVyc2FuZG8gdW4gcGVyaW9kbyBkaWZmaWNpbGUgbyB1bmEgc2l0dWF6aW9uZSBzaSByaXBldGUsIMOoIHNlZ25vIGNoZSBzdGFubm8gbWF0dXJhbmRvIHNlbWkgcGlhbnRhdGkgaW4gcGFzc2F0by4gQ29uIGkgNCBwb3RlcmkgcHVvaSBkaXNhdHRpdmFybGkgZSwgcGlhbnRhbmRvIGNvbnNhcGV2b2xtZW50ZSBzZW1pIGJ1b25pLCByaWVxdWlsaWJyaSBsYSBiaWxhbmNpYS4iXV0sCiAgICBbJ1F1YW5kbyByaWNvbm9zY2kgdW4gc2VtZSBuZWdhdGl2bycsWyJUdXR0aSBwaWFudGlhbW8sIHNlbnphIHJlbmRlcmNlbmUgY29udG8sIGFuY2hlIHNlbWkgbmVnYXRpdmkuIFNlIG5vbiBsaSBkaXNhdHRpdmlhbW8sIGNvbnRpbnVhbm8gYSBjcmVzY2VyZS4iLCJDb24gaSA0IHBvdGVyaTogcmljb3JkaSBkYSBkb3ZlIHZlbmdvbm8gdHV0dGUgbGUgY29zZSwgcHJlbmRpIGNvc2NpZW56YSBkZWkgYmVuZWZpY2kgY2hlIGhhaSBhdnV0byBlIGRlY2lkaSBkaSBkaXNhdHRpdmFyZSBpbCBzZW1lLCBwcm9tZXR0aSBkaSBub24gcmlwZXRlcmUgbCdlcnJvcmUgcGVyIHVuIHBlcmlvZG8gZSBmYWkgcXVhbGNvc2EgZGkgcG9zaXRpdm8gcGVyIGJpbGFuY2lhcmxvLiIsIkNpw7IgY2hlIHByb21ldHRpIG5lbCA0wrAgcG90ZXJlIGZpbmlzY2UgbmVsbGEgbGlzdGEgRGEgZmFyZSwgY29zw6wgbm9uIGRpbWVudGljaGkgZGkgZmFybG8gZGF2dmVyby4iXV0sCiAgICBbJ0xhIG1lZGl0YXppb25lIGRlbGxhIGdpb2lhJyxbIklsIG1vbWVudG8gcHJpbWEgZGVsIHNvbm5vIGNvbGxlZ2EgaWwgY29uc2NpbyBlIGlsIHN1YmNvbnNjaW8uIENpw7IgY2hlIHBlbnNpIGFsbG9yYSBjb250aW51YSBhIGNyZXNjZXJlIG1lbnRyZSBkb3JtaS4iLCJQZXIgcXVlc3RvLCBsYSBzZXJhLCBwZW5zYSBjb24gZ2lvaWEgYWwgYmVuZSBjaGUgaGFpIGZhdHRvIHBlciBnbGkgYWx0cmkgZSBkZWRpY2FsbyBhbCB0dW8gb2JpZXR0aXZvLiIsIlB1b2kgZmFybGEgYW5jaGUgZHVyYW50ZSBpbCBnaW9ybm8sIG9nbmkgdm9sdGEgY2hlIGhhaSBxdWFsY2hlIG1pbnV0by4iXV0sCiAgICBbJ0dsaSBzdHJ1bWVudGkgZGVsIGdpb3JubycsWyJJIDIwIHN0cnVtZW50aSBzb25vIHJhZ2dydXBwYXRpIGluIDUgc2VyaWU6IEkgNCBQYXNzaSwgSSA0IFBvdGVyaSwgTGUgNCBMZWdnaSBkZWkgU2VtaSwgSSA0IEZpb3JpIGUgTGUgNCBQcmlvcml0w6AuIE9nbmkgc2VyaWUgaGEgaWwgc3VvIGNvbG9yZSBlIGlsIHN1byBzaW1ib2xvLiIseyBzdWJzOiJPZ25pIGdpb3JubyBzY29wcmkgMiBzdHJ1bWVudGkgZSBzY3JpdmkgY29tZSB1c2kgbGEgbG9ybyBjb21iaW5hemlvbmUuIEdsaSBzdHJ1bWVudGkgc29ubyBkaXNwb25pYmlsaSBwZXIgY2hpIGhhIHVuIGFiYm9uYW1lbnRvIGF0dGl2by4iIH1dXSwKICAgIFsnTGEgY29tdW5pdMOgJyxbIlB1b2kgY29uZGl2aWRlcmUgaW4gZm9ybWEgYW5vbmltYSBncmF0aXR1ZGluaSwgc3VjY2Vzc2ksIGxhIG1lZGl0YXppb25lIGRlbGxhIGdpb2lhIG8gaSA0IHBvdGVyaSwgY29uIHVuIG5vbWUgc2NlbHRvIGRhIHRlLiIsIlF1YW5kbyBnaW9pc2NpIGRlaSBzZW1pIGRlZ2xpIGFsdHJpLCBhbm5hZmZpIGkgc2VtaSBkZWwgdHVvIG9iaWV0dGl2by4gUXVhbmRvIGxlZ2dpIGkgNCBwb3RlcmkgZGkgcXVhbGN1bm8sIHB1b2kgcGVyY29ycmVybGkgYW5jaGUgcGVyIHRlLiIsIkNpw7IgY2hlIHNjcml2aSByZXN0YSBwcml2YXRvLCB0cmFubmUgY2nDsiBjaGUgc2NlZ2xpIGRpIGNvbmRpdmlkZXJlLiJdXSBdLAogIGthcm1hOlsKICAgIFsnUHJvdGVnZ2kgbGEgdml0YScsJ1ByZW5kaXRpIGN1cmEgZGVsbGUgcGVyc29uZSwgZGVnbGkgYW5pbWFsaSBlIGRlbGxlIHBpYW50ZS4gTm9uIGZlcmlyZSBpbnRlbnppb25hbG1lbnRlIG5lc3N1biBlc3NlcmUuJywnSWwgc2VtZSBkZWxsYSBzYWx1dGUnXSwKICAgIFsnUHJvdGVnZ2kgbGEgcHJvcHJpZXTDoCcsJ0RvbmEgZSBhaXV0YSBnbGkgYWx0cmkuIE5vbiBwcmVuZGVyZSBjacOyIGNoZSBub24gdGkgYXBwYXJ0aWVuZSBzZW56YSBwZXJtZXNzby4nLCdJbCBzZW1lIGRlbGxhIHByb3NwZXJpdMOgJ10sCiAgICBbJ1B1cmV6emEgc2Vzc3VhbGUnLCJPbm9yYSBpbCBsZWdhbWUgdHJhIGR1ZSBwZXJzb25lIGNoZSBoYW5ubyBwcmVzbyB1biBpbXBlZ25vIGwndW5hIHZlcnNvIGwnYWx0cmEsIGlsIHR1byBlIHF1ZWxsbyBkZWdsaSBhbHRyaS4iLCdJbCBzZW1lIGRlbGxhIGZlbGljaXTDoCddLAogICAgWydJbnRlZ3JpdMOgJywnRGnigJkgbGEgdmVyaXTDoCBlIG1hbnRpZW5pIGxlIHByb21lc3NlLiBOb24gZGlyZSBjacOyIGNoZSBub24gc2VudGkgZGF2dmVyby4nLCdJbCBzZW1lIGRlbGxhIGZpZHVjaWEnXSwKICAgIFsnRGnigJkgcGFyb2xlIGNoZSB1bmlzY29ubyBsZSBwZXJzb25lJywnVXNhIGxlIHBhcm9sZSBwZXIgdW5pcmUgbGUgcGVyc29uZS4gRXZpdGEgbGUgcGFyb2xlIGNoZSBkaXZpZG9ubyBvIGNyZWFubyBpbmNvbXByZW5zaW9uaS4nLCJJbCBzZW1lIGRlbGwnYXJtb25pYSJdLAogICAgWydQYXJsYSBjb24gZ2VudGlsZXp6YSBlIGRvbGNlenphJywnQXBwcmV6emEgZ2xpIGFsdHJpIGUgcGFybGEgbG9ybyBjb24gcmlzcGV0dG8uIEV2aXRhIGxlIHBhcm9sZSBkdXJlIGUgY2hlIGZlcmlzY29uby4nLCdJbCBzZW1lIGRlbCByaXNwZXR0byddLAogICAgWydEaeKAmSBzb2xvIHBhcm9sZSBjaGUgaGFubm8gc2Vuc28nLCdEaeKAmSBjb3NlIGNoZSBhaXV0YW5vIGUgaGFubm8gdW5vIHNjb3BvLiBFdml0YSBpIHBldHRlZ29sZXp6aSBlIGxlIHBhcm9sZSB2dW90ZS4nLCdJbCBzZW1lIGRlbCB0ZW1wbyddLAogICAgWydHaW9pc2NpIGRlbCBzdWNjZXNzbyBkZWdsaSBhbHRyaScsIkdpb2lzY2kgcXVhbmRvIGdsaSBhbHRyaSBvdHRlbmdvbm8gY2nDsiBjaGUgZGVzaWRlcmFubyBlIGFwcHJlenphIGNpw7IgY2hlIGhhaS4gRXZpdGEgbCdpbnZpZGlhIGUgbCdhdmlkaXTDoC4iLCdJbCBzZW1lIGRlbCBzdWNjZXNzbyddLAogICAgWydDb21wYXNzaW9uZSBwZXIgaSBwcm9ibGVtaSBkZWdsaSBhbHRyaScsJ09mZnJpIGNvbXBhc3Npb25lIGEgY2hpIGF0dHJhdmVyc2EgZGlmZmljb2x0w6AgZSBhaXV0YWxvIGNvbWUgcHVvaS4gTm9uIGdpb2lyZSBkZWxsZSBkaXNncmF6aWUgYWx0cnVpLicsJ0lsIHNlbWUgZGVsbGEgY29tcGFzc2lvbmUnXSwKICAgIFsnQ29tcHJlbmRpIGNvbWUgZnVuemlvbmEgbGEgcGVubmEnLCdSaWNvcmRhIGNoZSB0dXR0byB2aWVuZSBkYWkgc2VtaSBwaWFudGF0aSBlIGNoZSBpbCBjYW1iaWFtZW50byBpbml6aWEgZGEgdGUuIFZpdmkgZSBjb25kaXZpZGkgaWwgcHJpbmNpcGlvIGRlbGxhIHBlbm5hLicsJ0lsIHNlbWUgZGVsbGEgc2FnZ2V6emEnXSBdLAogIGdyb3VwczpbJ0FaSU9OSScsJ1BBUk9MRScsJ1BFTlNJRVJJJ10sIGRvbWFpbnM6WydEZW5hcm8nLCdSZWxhemlvbmknLCdTYWx1dGUnXQp9OwpYVC5ybyA9IHsKICB1aTp7IG5hdkpvdXJuYWw6J0p1cm5hbCcsIG5hdlByb2ZpbGU6J1Byb2ZpbCcsCiAgICB0b2RvTGVhZDonQ2UgYW0gcHJvbWlzIHPEgyBmYWMuIENlIGFuZ2FqYW1lbnRlIG1pLWFtIGx1YXQuJywKICAgIHVUaXRsZTonVW5lbHRlbGUgdGFsZSBkZSBhemknLCB1TG9ja2VkOifDjm4gZmllY2FyZSB6aSBwb8ibaSBkZXNjb3BlcmkgMiB1bmVsdGUgZGluIGNlbGUgMjA6IENlaSA0IFBhyJlpLCBDZWxlIDQgUHV0ZXJpLCBDZWxlIDQgTGVnaSBhbGUgU2VtaW7Im2Vsb3IsIENlbGUgNCBGbG9yaSDImWkgQ2VsZSA0IFByaW9yaXTEg8ibaS4nLAogICAgdUxvY2tNc2c6J0FpIG5ldm9pZSBkZSB1biBhYm9uYW1lbnQgYWN0aXYgY2Egc8SDIGZvbG9zZciZdGkgdW5lbHRlbGUuJywgdVNlZVN1YnM6J1ZlemkgYWJvbmFtZW50ZWxlJywKICAgIHVEcmF3Tm90ZTonQXBhc8SDIMiZaSBkZXNjb3BlcsSDIGNlbGUgMiB1bmVsdGUgY3UgY2FyZSBsdWNyZXppIGFzdMSDemkuJywgdURyYXc6J0Rlc2NvcGVyxIMgdW5lbHRlbGUgZGUgYXppJywKICAgIHVROidDdW0gZm9sb3Nlc2MgYWNlYXN0xIMgY29tYmluYcibaWUgZGUgdW5lbHRlIGFzdMSDemk\/JywgdVBoOidTY3JpZSBwZW50cnUgdGluZS4gUsSDbcOibmUgZG9hciDDrm4ganVybmFsdWwgdMSDdS4nLAogICAgdVNhdmU6J1NhbHZlYXrEgyDDrm4ganVybmFsJywgdVVwZGF0ZTonQWN0dWFsaXplYXrEgyDDrm4ganVybmFsJywgdUFnYWluOidBbGVnZSBvIG5vdcSDIGNvbWJpbmHIm2llIGRlIHVuZWx0ZScsIHVTYXZlZDonU2FsdmF0IMOubiBqdXJuYWwnLAogICAgdVNpbU9uOidWYXJpYW50xIMgZGUgdGVzdDogc2ltdWxlYXrEgyBhYm9uYW1lbnQgYWN0aXYnLCB1U2ltT2ZmOidWYXJpYW50xIMgZGUgdGVzdDogc2ltdWxlYXrEgyBmxINyxIMgYWJvbmFtZW50JywKICAgIGh1YlRpdGxlOidDZSBwcmFjdGljaSBhY3VtPycsIGh1YkxlYWQ6J0FsZWdlIHByYWN0aWNhLiBUb3QgY2UgZmFjaSBhanVuZ2Ugw65uIGp1cm5hbHVsIHTEg3UuJywgaHViQnVzeTonUHJhY3RpY2EgZSDDrm4gY3VycyDCtyByZXZpbm8gbGEgdGltZXInLAogICAgbXlQcm9maWxlOidQcm9maWx1bCBtZXUnLCBjaGFuZ2VOYW1lOidTY2hpbWLEgyBudW1lbGUnLCBwaWNrTmFtZTonQWxlZ2UgdW4gbnVtZSBwZW50cnUgY29tdW5pdGF0ZScsCiAgICBzdFByYWN0OidwcmFjdGljaScsIHN0TWluOidtaW51dGUnLCBzdFRvZG86J1RvIERvIGbEg2N1dGUnLCBhdmF0YXI6J0F2YXRhcnVsIG1ldScsIGFkZHJlc3M6J0N1bSDDrsibaSB2b3JiZXNjJywKICAgIGludHJvOidJbnRyb2R1Y2VyZScsIGFib3V0OidEZXNwcmUgYXBsaWNhyJtpZScsIGthcm1hOidDZWxlIDEwIEthcm1hIFBveml0aXZlJywga2FybWFTdWI6J0luc3BpcmHIm2lhIGFwbGljYcibaWVpJywgY29udGFjdDonQ29udGFjdCcsCiAgICBwcm9mQmFubmVyOidWYXJpYW50xIMgZGUgdGVzdC4gw45uIGFwbGljYcibaWEgZGUgdGVsZWZvbiB2ZWkgYXZlYSBhaWNpIMiZaTogcmVtaW5kZXJlbGUgKHDDom7EgyBsYSA2IHBlIHppKSwgc2NoaW1iYXJlYSBlbWFpbHVsdWksIMiZdGVyZ2VyZWEgZGF0ZWxvciwgyJl0ZXJnZXJlYSBjb250dWx1aSwgcG9saXRpY2EgZGUgY29uZmlkZW7Im2lhbGl0YXRlIMiZaSB0ZXJtZW5paS4nLAogICAgb3ZQcmV2OifDjm5hcG9pJywgb3ZOZXh0OidNYWkgZGVwYXJ0ZScsIG92U3RhcnQ6J8OObmNlcGUnLCBieURvbWFpbjonR1JVUEFSRSBQRSBET01FTklJJywKICAgIGthcm1hTGVhZDonSW5zcGlyYcibaWEgYXBsaWNhyJtpZWkuIExlIHBvyJtpIGZvbG9zaSDDrm4gcHJhY3RpY2EgY2Vsb3IgNCBwdXRlcmkgyJlpIGxhIG1lZGl0YcibaWEgYnVjdXJpZWkuJyB9LAogIGtpbmRVOidVbmVsdGVsZSB6aWxlaScsCiAgc2V0czp7CiAgICBwYXNpOnsgbmFtZTonQ2VpIDQgUGHImWknLCB1bml0OidQYXN1bCcsIHN1YjonY2Egc8SDIHV6aSBzZW1pbsibZWxlIHBlbnRydSBvYmllY3RpdnVsIHTEg3UnLCBpdGVtczpbCiAgICAgICdTcHVuZSBjZSB2cmVpIMOubiB2aWHIm2EgdGEgw65udHItbyBwcm9wb3ppyJtpZSBzY3VydMSDLicsCiAgICAgICdQbGFuaWZpY8SDIHBlIGNpbmUgdmVpIGFqdXRhIHPEgyBvYsibaW7EgyBhY2VsYciZaSBsdWNydSDImWkgdW5kZSB2ZWkgaW52aXRhIGFjZWEgcGVyc29hbsSDIHBlbnRydSBvIGRpc2N1yJtpZS4nLAogICAgICAnQWp1dMSDIGVmZWN0aXYgcGVyc29hbmEgcmVzcGVjdGl2xIMuJywKICAgICAgJ0bEgyBNZWRpdGHIm2lhIEJ1Y3VyaWVpOiBjw6JuZCBtZXJnaSBsYSBjdWxjYXJlLCBnw6JuZGXImXRlLXRlIGN1IGJ1Y3VyaWUgbGEgbHVjcnVyaWxlIGJ1bmUgcGUgY2FyZSBsZSBmYWNpIHBlbnRydSBjZWlsYWzIm2kuJyBdIH0sCiAgICBwdXRlcmk6eyBuYW1lOidDZWxlIDQgUHV0ZXJpJywgdW5pdDonUHV0ZXJlYScsIHN1YjoncGVudHJ1IGRlemFjdGl2YXJlYSBzZW1pbsibZWxvciBuZWdhdGl2ZSBwbGFudGF0ZSDDrm4gdHJlY3V0JywgaXRlbXM6WwogICAgICAnR8OibmRlyJl0ZS10ZSBsYSBQaXg6IGFtaW50ZciZdGUtyJtpIGRlIHVuZGUgdmluIHRvYXRlIGx1Y3J1cmlsZS4nLAogICAgICAnQ29uyJl0aWVudGl6ZWF6xIMgYmVuZWZpY2lpbGUgYXZ1dGUgY8OibmQgYWkgcGxhbnRhdCBzxINtw6JuyJthIMiZaSBpYSBvIGRlY2l6aWUgZmVybcSDIGRlIGEgZGV6YWN0aXZhIGFjZWFzdMSDIHPEg23Dom7Im8SDIMOubmFpbnRlIGNhIGVhIHPEgyBzZSBtdWx0aXBsaWNlIMiZaSBtYWkgbXVsdCDDrm4gaW50ZXJpb3J1bCB0xIN1LicsCiAgICAgICdQcm9taXRlIHPEgyBudSBtYWkgZmFjaSBhY2VlYciZaSBncmXImWVhbMSDIHBlbnRydSB1biBpbnRlcnZhbCBkZSB0aW1wLicsCiAgICAgICdGxIMgY2V2YSBwb3ppdGl2IHBlbnRydSBhIGVjaGlsaWJyYSBzZW1pbsibZWxlIG5lZ2F0aXZlLicgXSB9LAogICAgbGVnaTp7IG5hbWU6J0NlbGUgNCBMZWdpIGFsZSBTZW1pbsibZWxvcicsIHVuaXQ6J0xlZ2VhJywgc3ViOidsZWdpbGUgZHVwxIMgY2FyZSBmdW5jyJtpb25lYXrEgyBzZW1pbsibZWxlJywgaXRlbXM6WwogICAgICAnQ3VsZWdpIGNlIGFpIHNlbcSDbmF0OiBkYWPEgyBwbGFudGV6aSBzZW1pbsibZSBkZSBwZXBlbmUsIHZlaSBvYsibaW5lIHVuIHBlcGVuZS4nLAogICAgICAnQ2VlYSBjZSBwcmltZciZdGkgw65uYXBvaSBlc3RlIMOubnRvdGRlYXVuYSBtdWx0LCBtdWx0IG1haSBtYXJlIGRlY8OidCBjZSBhaSBmxINjdXQuJywKICAgICAgJ0RhY8SDIG51IGZhY2kgbmltaWMsIG51IHZlaSBwcmltaSBuaW1pYyDDrm5hcG9pLicsCiAgICAgICdEYWPEgyBmYWNpIGNldmEsIGF0dW5jaSB0cmVidWllIHPEgyBwcmltZciZdGkgY2V2YSDDrm5hcG9pLicgXSB9LAogICAgZmxvcmk6eyBuYW1lOidDZWxlIDQgRmxvcmknLCB1bml0OidGbG9hcmVhJywgc3ViOidmZWx1bCDDrm4gY2FyZSByb2Rlc2Mgc2VtaW7Im2VsZScsIGl0ZW1zOlsKICAgICAgJ1ByaW1lyJl0aSBleGFjdCBjZWVhIGNlIGRhaS4nLAogICAgICAnRmllY2FyZSBhY8ibaXVuZSBjcmVlYXrEgyB1biBvYmljZWkuJywKICAgICAgJ0NlZWEgY2UgZmFjaSBjcmVlYXrEgyBvYW1lbmlpIMiZaSBtZWRpdWwgdMSDdS4nLAogICAgICAnQ2VlYSBjZSBmYWNpIGNyZWVhesSDIGx1bWVhIMOubiBjYXJlIHZlaSBwxIPImWkuJyBdIH0sCiAgICBwcmlvcml0YXRpOnsgbmFtZTonQ2VsZSA0IFByaW9yaXTEg8ibaScsIHVuaXQ6J1ByaW9yaXRhdGVhJywgc3ViOidvcmRpbmVhIMOubiBjYXJlIHJvZGVzYyBzZW1pbsibZWxlJywgaXRlbXM6WwogICAgICB7IGg6J1ByaW11bCB2ZW5pdCwgcHJpbXVsIGllyJlpdC4nLCBleDonTyBzxINtw6JuyJvEgyBwbGFudGF0xIMgw65uYWludGVhIGFsdGVpYSB2YSByxINzxINyaSDDrm5haW50ZWEgY2VsZWkgZGUtYSBkb3VhLiBEYWPEgyBhanXIm2kgdW4gcHJpZXRlbiBzxIMgZmllIG1haSBjcmVhdGl2IGxhIG11bmPEgyBsdW5pIMiZaSBhcG9pIGFqdcibaSB1biBhbHQgcHJpZXRlbiBzxIMgZmllIG1haSBjcmVhdGl2IG1hcsibaSwgc8SDbcOibsibYSBkZSBsdW5pIHNlIHZhIGRlc2NoaWRlIHByaW1hLicgfSwKICAgICAgeyBoOidDw6JuZCBhaSB1biBvYmljZWksIHPEg23Dom7Im2Egcm9kZciZdGUgY3UgcHJpb3JpdGF0ZSBmYcibxIMgZGUgcHJpb3JpdGF0ZWEgMS4nLCBleDonRGFjxIMgbC1haSBhanV0YXQgcGUgcHJpZXRlbnVsIGRlIG1hcsibaSDDrm4gbW9kIHJlZ3VsYXQsIGNhIHBlIHVuIG9iaWNlaSwgc8SDbcOibsibYSBwbGFudGF0xIMgY3UgZWwgc2UgdmEgZGVzY2hpZGUgw65uYWludGVhIHNlbWluyJtlaSBwbGFudGF0ZSBjdSBwcmlldGVudWwgZGUgbHVuaS4nIH0sCiAgICAgIHsgaDonQ8OibmQgYWp1yJtpIHBlIGNpbmV2YSBjYXJlIHVybWVhesSDIHPEgyB0cmVhY8SDIHByaW50ci1vIHNjaGltYmFyZSBtYWpvcsSDIHBlcnNvbmFsxIMsIHPEg23Dom7Im2Egcm9kZciZdGUgY3UgcHJpb3JpdGF0ZSBmYcibxIMgZGUgcHJpb3JpdGF0ZWEgMi4nLCBleDonRGFjxIMgYWkgYWp1dGF0IMOubmPEgyB1biBwcmlldGVuIHPEgyBmaWUgbWFpIGNyZWF0aXYgbWllcmN1cmksIGlhciBqb2kgw65uIHZpYcibYSBsdWkgdXJtYSBzxIMgc2Ugw65udMOibXBsZSBvIHNjaGltYmFyZSBtYWpvcsSDLCBzZW1pbsibZWxlIHBsYW50YXRlIGZvYXJ0ZSBhcHJvYXBlIGRlIHVuIGV2ZW5pbWVudCBtYWpvciBzZSBjb2Mgw65uYWludGVhIGNlbG9yIHBsYW50YXRlIGFudGVyaW9yLicgfSwKICAgICAgeyBoOidDw6JuZCBhanXIm2kgcGUgY2luZXZhIGNhcmUgc2UgZGVkaWPEgyB1bnVpIHNjb3AgY2FyZSBzZXJ2ZciZdGUgbWFpIG11bHRvciBwZXJzb2FuZSwgc8SDbcOibsibYSByb2RlyJl0ZSBjdSBwcmlvcml0YXRlIGZhyJvEgyBkZSBwcmlvcml0YXRlYSAzLicsIGV4OidEYWPEgyBwcmlldGVudWwgYWp1dGF0IG1hcsibaSDDrm5jZXJjYSBzxIMgZ8SDc2Vhc2PEgyB1biBtb2QgY3JlYXRpdiBkZSBhIHZpbmRlY2EgY2FuY2VydWwsIGlhciBwcmlldGVuaWkgYWp1dGHIm2kgbHVuaSDImWkgbWllcmN1cmkgw65uY2VyY2F1IHPEgyBnxINzZWFzY8SDIHVuIG1vZCBtYWkgY3JlYXRpdiBkZSBhIHNlIG1hY2hpYSwgc2VtaW7Im2VsZSBkZSBtYXLIm2kgbyBpYXUgw65uYWludGUgyJlpIHNlIGRlc2NoaWQgcHJpbWVsZS4nIH0gXSB9CiAgfSwKICBpbnRybzpbCiAgICBbJ0JpbmUgYWkgdmVuaXQgw65uIGFwbGljYcibaWEgU2VtaW7Im2UgQnVuZScsJ1RvdCBjZSB0csSDaWXImXRpIHZpbmUgZGluIHNlbWluyJtlbGUgcGUgY2FyZSBsZS1haSBwbGFudGF0IHByaW4gZ8OibmR1cmksIHZvcmJlIMiZaSBmYXB0ZS4gQXBsaWNhyJtpYSB0ZSBhanV0xIMgc8SDIHZlemkgY2UgcGxhbnRlemkgw65uIGZpZWNhcmUgemkgyJlpIHPEgyBhbGVnaSBjb27ImXRpZW50IHNlbWluyJtlbGUgcGVudHJ1IHZpYcibYSBwZSBjYXJlIMibaS1vIGRvcmXImXRpLiddLAogICAgWydQcmFjdGljaWxlIHRhbGUnLCdNZWRpdGHIm2llIMiZaSB5b2dhIGN1IHRpbWVyLCByZWN1bm\/ImXRpbsibZSDImWkgc3VjY2VzZSwgbWVkaXRhyJtpYSBidWN1cmllaSDImWkgY2VsZSA0IHB1dGVyaS4gTGUgZ8SDc2XImXRpIHBlIHRvYXRlIGxhIGJ1dG9udWwgZGluIG1pamxvYywgaWFyIHRvdCBjZSBmYWNpIGFqdW5nZSDDrm4ganVybmFsdWwgdMSDdS4nXSwKICAgIFsnVW5lbHRlbGUgemlsZWknLCdHxINzZciZdGUgdW4gbW9kIGNyZWF0aXYgZGUgYSBmb2xvc2kgY2VsZSAyIHVuZWx0ZSBwZW50cnUgb2JpZWN0aXZ1bCB0xIN1LiddLAogICAgWydSZXNwZWN0xIMgYW5nYWphbWVudHVsIGx1YXQhJywnQ2Ugc2NyaWkgbGEg4oCeUGUgY2luZSBhanV04oCdIMiZaSBsYSBwdXRlcmVhIGEgNC1hIGFqdW5nZSDDrm4gbGlzdGEgVG8gRG8uIEJpZmVhesSDIGR1cMSDIGNlIGZhY2k6IHNlbWluyJtlbGUgYnVuZSBjcmVzYywgaWFyIGNlbGUgbmVnYXRpdmUgc2UgZGV6YWN0aXZlYXrEgy4nXSwKICAgIFsnQnVjdXLEgy10ZSBkZSBzZW1pbsibZWxlIGFsdG9yYScsJ8OObiBjb211bml0YXRlIHZlemksIGFub25pbSwgY2UgYXUgcGxhbnRhdCBjZWlsYWzIm2kuIEPDom5kIHRlIGJ1Y3VyaSBwZW50cnUgZWksIHV6aSBzZW1pbsibZWxlIHBlbnRydSBvYmllY3RpdnVsIHTEg3UuJ10gXSwKICBhYm91dDpbCiAgICBbJ0NlIGVzdGUgU2VtaW7Im2UgQnVuZScsWydTZW1pbsibZSBCdW5lIGVzdGUganVybmFsdWwgdMSDdSBkZSBwcmFjdGljxIMgcGVudHJ1IHNpc3RlbXVsIHNlbWluyJtlbG9yLicsJ01pbnRlYSBub2FzdHLEgyDDrm5yZWdpc3RyZWF6xIMgdG90IGNlIGfDom5kaW0sIHNwdW5lbSDImWkgZmFjZW0uIEZpZWNhcmUgZ8OibmQsIHZvcmLEgyBzYXUgZmFwdMSDIGRldmluZSBvIHPEg23Dom7Im8SDIGNhcmUgY3JlyJl0ZSDDrm4gaW50ZXJpb3J1bCBtaW7Im2lpIG5vYXN0cmUgyJlpLCBsYSB1biBtb21lbnQgZGF0LCBzZSDDrm50b2FyY2Ugw65uIHZpYcibYSBub2FzdHLEgyBjYSBleHBlcmllbsibxIMuJywnQXBsaWNhyJtpYSB0ZSBhanV0xIMgc8SDIG9ic2VydmkgY2UgcGxhbnRlemkgyJlpIHPEgyBhbGVnaSBjb27ImXRpZW50IHNlbWluyJtlbGUgcGVudHJ1IGNlZWEgY2Ugw67Im2kgZG9yZciZdGkuJ11dLAogICAgWydDdW0gbyBmb2xvc2XImXRpIMOubiBmaWVjYXJlIHppJyxbJ0RpbWluZWHIm2E6IGFtaW50ZciZdGUtyJtpIG9iaWVjdGl2dWwgyJlpIGRlc2NvcGVyxIMgdW5lbHRlbGUgemlsZWkuJywnw45uIHRpbXB1bCB6aWxlaTogb2JzZXJ2xIMgY2UgcGxhbnRlemkuIE5vdGVhesSDIHJlY3Vub8iZdGluyJtlbGUgyJlpIHN1Y2Nlc2VsZSwgaWFyIGPDom5kIHJlY3Vub8iZdGkgbyBzxINtw6JuyJvEgyBuZWdhdGl2xIMsIGx1Y3JlYXrEgyBjdSBjZWxlIDQgcHV0ZXJpLicsJ1NlYXJhOiBmxIMgbWVkaXRhyJtpYSBidWN1cmllaS4nLCdOdSBlIG5ldm9pZSBkZSB0ZXh0ZSBsdW5naS4gQ8OidGV2YSBtaW51dGUgZGUgb2JzZXJ2YXJlIHNpbmNlcsSDLCBmxINyxIMganVkZWNhdMSDIMiZaSBmxINyxIMgdmlub3bEg8ibaWUsIHN1bnQgZGUgYWp1bnMuIEltcG9ydGFudCBlc3RlIHPEgyByZXZpaSDDrm4gZmllY2FyZSB6aS4nXV0sCiAgICBbJ1BlbnRydSBjaW5lIGVzdGUnLFsnUGVudHJ1IG9yaWNpbmUgYXJlIHVuIG9iaWVjdGl2IHNhdSB1biB2aXMgyJlpIHZyZWEgc8SDIGFqdW5nxIMgbGEgZWwgcGxhbnTDom5kIHNlbWluyJtlbGUgcG90cml2aXRlLicsJ0RhY8SDIHRyZWNpIHByaW50ci1vIHBlcmlvYWTEgyBncmVhIHNhdSBvIHNpdHVhyJtpZSBzZSByZXBldMSDLCBlc3RlIHNlbW4gY8SDIHNlIGNvYyBzZW1pbsibZSBwbGFudGF0ZSDDrm4gdHJlY3V0LiBDdSBjZWxlIDQgcHV0ZXJpIGxlIHBvyJtpIGRlemFjdGl2YSwgaWFyIHBsYW50w6JuZCBjb27ImXRpZW50IHNlbWluyJtlIGJ1bmUgZWNoaWxpYnJlemkgYmFsYW7Im2EuJ11dLAogICAgWydDw6JuZCByZWN1bm\/ImXRpIG8gc8SDbcOibsibxIMgbmVnYXRpdsSDJyxbJ1RvyJtpIHBsYW50xINtLCBmxINyxIMgc8SDIG5lIGTEg20gc2VhbWEsIMiZaSBzZW1pbsibZSBuZWdhdGl2ZS4gRGFjxIMgbnUgbGUgZGV6YWN0aXbEg20sIGVsZSBjb250aW51xIMgc8SDIGNyZWFzY8SDLicsJ0N1IGNlbGUgNCBwdXRlcmk6IMOuyJtpIGFtaW50ZciZdGkgZGUgdW5kZSB2aW4gdG9hdGUgbHVjcnVyaWxlLCBjb27ImXRpZW50aXplemkgYmVuZWZpY2lpbGUgcGUgY2FyZSBsZS1haSBhdnV0IMiZaSBkZWNpemkgc8SDIGRlemFjdGl2ZXppIHPEg23Dom7Im2EsIHByb21pyJtpIHPEgyBudSBtYWkgcmVwZcibaSBncmXImWVhbGEgbyBwZXJpb2FkxIMgyJlpIGZhY2kgY2V2YSBwb3ppdGl2IGNhcmUgc8SDIG8gZWNoaWxpYnJlemUuJywnQ2UgcHJvbWnIm2kgbGEgcHV0ZXJlYSBhIDQtYSBhanVuZ2Ugw65uIFRvIERvLCBjYSBzxIMgbnUgdWnIm2kgc8SDIMiZaSBmYWNpLiddXSwKICAgIFsnTWVkaXRhyJtpYSBidWN1cmllaScsWydNb21lbnR1bCBkaW5haW50ZSBkZSBzb21uIGZhY2UgbGVnxIN0dXJhIGRpbnRyZSBjb27ImXRpZW50IMiZaSBzdWJjb27ImXRpZW50LiBDZSBnw6JuZGXImXRpIGF0dW5jaSBjb250aW51xIMgc8SDIGNyZWFzY8SDIMOubiB0aW1wIGNlIGRvcm1pLicsJ0RlIGFjZWVhLCBzZWFyYSwgZ8OibmRlyJl0ZS10ZSBjdSBidWN1cmllIGxhIGJpbmVsZSBwZSBjYXJlIGwtYWkgZsSDY3V0IHBlbnRydSBjZWlsYWzIm2kgyJlpIGRlZGljxIMtbCBvYmllY3RpdnVsdWkgdMSDdS4nLCdPIHBvyJtpIGZhY2UgyJlpIMOubiB0aW1wdWwgemlsZWksIG9yaWPDom5kIGFpIGPDonRldmEgbWludXRlLiddXSwKICAgIFsnVW5lbHRlbGUgemlsZWknLFsnQ2VsZSAyMCBkZSB1bmVsdGUgc3VudCBncnVwYXRlIMOubiA1IHNldHVyaTogQ2VpIDQgUGHImWksIENlbGUgNCBQdXRlcmksIENlbGUgNCBMZWdpIGFsZSBTZW1pbsibZWxvciwgQ2VsZSA0IEZsb3JpIMiZaSBDZWxlIDQgUHJpb3JpdMSDyJtpLiBGaWVjYXJlIHNldCBhcmUgY3Vsb2FyZWEgyJlpIHNlbW51bCBsdWkuJyx7IHN1YnM6J8OObiBmaWVjYXJlIHppIGRlc2NvcGVyaSAyIHVuZWx0ZSDImWkgc2NyaWkgY3VtIGZvbG9zZciZdGkgY29tYmluYcibaWEgbG9yLiBVbmVsdGVsZSBzdW50IGRpc3BvbmliaWxlIHBlbnRydSBjZWkgY3UgYWJvbmFtZW50IGFjdGl2LicgfV1dLAogICAgWydDb211bml0YXRlYScsWydQb8ibaSDDrm1wxINydMSDyJlpIGFub25pbSByZWN1bm\/ImXRpbsibZWxlLCBzdWNjZXNlbGUsIG1lZGl0YcibaWEgYnVjdXJpZWkgc2F1IGNlbGUgNCBwdXRlcmksIHN1YiB1biBudW1lIGFsZXMgZGUgdGluZS4nLCdDw6JuZCB0ZSBidWN1cmkgZGUgc2VtaW7Im2VsZSBhbHRvcmEsIHV6aSBzZW1pbsibZWxlIHBlbnRydSBvYmllY3RpdnVsIHTEg3UuIEPDom5kIGNpdGXImXRpIGNlbGUgNCBwdXRlcmkgYWxlIGN1aXZhLCBsZSBwb8ibaSBwYXJjdXJnZSDImWkgcGVudHJ1IHRpbmUuJywnQ2Ugc2NyaWkgcsSDbcOibmUgcHJpdmF0LCBjdSBleGNlcMibaWEgYSBjZWVhIGNlIGFsZWdpIHR1IHPEgyDDrm1wxINydMSDyJllyJl0aS4nXV0gXSwKICBrYXJtYTpbCiAgICBbJ1Byb3RlamVhesSDIHZpYcibYScsJ0FpIGdyaWrEgyBkZSBvYW1lbmksIGRlIGFuaW1hbGUgyJlpIGRlIHBsYW50ZS4gTnUgcsSDbmkgaW50ZW7Im2lvbmF0IG5pY2lvIGZpaW7Im8SDLicsJ1PEg23Dom7Im2Egc8SDbsSDdMSDyJtpaSddLAogICAgWydQcm90ZWplYXrEgyBwcm9wcmlldGF0ZWEnLCdExINydWllyJl0ZSDImWkgYWp1dMSDLWkgcGUgY2VpbGFsyJtpLiBOdSBsdWEgY2UgbnUgw67Im2kgYXBhcsibaW5lIGbEg3LEgyBwZXJtaXNpdW5lLicsJ1PEg23Dom7Im2EgcHJvc3Blcml0xIPIm2lpJ10sCiAgICBbJ1B1cml0YXRlIHNleHVhbMSDJywnT25vcmVhesSDIGxlZ8SDdHVyYSBkaW50cmUgZG9pIG9hbWVuaSBjYXJlIMiZaS1hdSBsdWF0IHVuIGFuZ2FqYW1lbnQgdW51bCBmYcibxIMgZGUgY2VsxINsYWx0LCBhIHRhIMiZaSBhIGNlbG9ybGFsyJtpLicsJ1PEg23Dom7Im2EgZmVyaWNpcmlpJ10sCiAgICBbJ0ludGVncml0YXRlJywnU3B1bmUgYWRldsSDcnVsIMiZaSDIm2luZS3Im2kgcHJvbWlzaXVuaWxlLiBOdSBzcHVuZSBjZSBudSBzaW3Im2kgY3UgYWRldsSDcmF0LicsJ1PEg23Dom7Im2Egw65uY3JlZGVyaWknXSwKICAgIFsnU3B1bmUgY3V2aW50ZSBjYXJlIGFkdWMgb2FtZW5paSDDrm1wcmV1bsSDJywnRm9sb3NlyJl0ZSBjdXZpbnRlbGUgY2Egc8SDIGFkdWNpIG9hbWVuaWkgw65tcHJldW7Egy4gRXZpdMSDIHZvcmJlbGUgY2FyZSBkZXpiaW7EgyBzYXUgY3JlZWF6xIMgbmXDrm7Im2VsZWdlcmkuJywnU8SDbcOibsibYSBhcm1vbmllaSddLAogICAgWydWb3JiZciZdGUgY3UgYmzDom5kZcibZSDImWkgZHVsY2VhyJvEgycsJ0FwcmVjaWF6xIMtaSBwZSBjZWlsYWzIm2kgyJlpIHZvcmJlyJl0ZS1sZSBjdSByZXNwZWN0LiBFdml0xIMgY3V2aW50ZWxlIGR1cmUgyJlpIGNhcmUgcsSDbmVzYy4nLCdTxINtw6JuyJthIHJlc3BlY3R1bHVpJ10sCiAgICBbJ1NwdW5lIGRvYXIgY3V2aW50ZSBjYXJlIGF1IHJvc3QnLCdTcHVuZSBsdWNydXJpIGNhcmUgYWp1dMSDIMiZaSBhdSB1biByb3N0LiBFdml0xIMgYsOicmZhIMiZaSB2b3JiZWxlIGdvYWxlLicsJ1PEg23Dom7Im2EgdGltcHVsdWknXSwKICAgIFsnQnVjdXLEgy10ZSBwZW50cnUgc3VjY2VzdWwgYWx0b3JhJywnQnVjdXLEgy10ZSBjw6JuZCBhbMibaWkgcHJpbWVzYyBjZSDDrsiZaSBkb3Jlc2MgyJlpIGFwcmVjaWF6xIMgY2UgYXUuIEV2aXTEgyBpbnZpZGlhIMiZaSBsxINjb21pYS4nLCdTxINtw6JuyJthIHN1Y2Nlc3VsdWknXSwKICAgIFsnQ29tcGFzaXVuZSBwZW50cnUgcHJvYmxlbWVsZSBhbHRvcmEnLCdPZmVyxIMgY29tcGFzaXVuZSBjZWxvciBjYXJlIHRyZWMgcHJpbiBncmV1dMSDyJtpIMiZaSBhanV0xIMtaSBjdW0gcG\/Im2kuIE51IHRlIGJ1Y3VyYSBkZSBuZWNhenVyaWxlIGFsdG9yYS4nLCdTxINtw6JuyJthIGNvbXBhc2l1bmlpJ10sCiAgICBbJ8OObsibZWxlZ2UgY3VtIGZ1bmPIm2lvbmVhesSDIHBpeHVsJywnQW1pbnRlyJl0ZS3Im2kgY8SDIHRvdHVsIHZpbmUgZGluIHNlbWluyJtlbGUgcGxhbnRhdGUgyJlpIGPEgyBzY2hpbWJhcmVhIMOubmNlcGUgZGUgbGEgdGluZS4gVHLEg2llyJl0ZSDImWkgw65tcMSDcnTEg8iZZciZdGUgcHJpbmNpcGl1bCBwaXh1bHVpLicsJ1PEg23Dom7Im2Egw65uyJtlbGVwY2l1bmlpJ10gXSwKICBncm91cHM6WydGQVBURScsJ1ZPUkJFJywnR8OCTkRVUkknXSwgZG9tYWluczpbJ0JhbmknLCdSZWxhyJtpaScsJ1PEg27Eg3RhdGUnXQp9OwovKiBtZXJnZSB0aGUgbmV3IGludGVyZmFjZSB3b3JkcyBpbnRvIGVhY2ggbGFuZ3VhZ2UgKi8KZm9yIChjb25zdCBsIG9mIE9iamVjdC5rZXlzKFhUKSkgaWYgKFVJW2xdKSB7IE9iamVjdC5hc3NpZ24oVUlbbF0sIFhUW2xdLnVpKTsgVUlbbF0ua2luZCA9IHsgLi4uVUlbbF0ua2luZCwgdW5lbHRlOlhUW2xdLmtpbmRVIH0gfQovKiBJdGFsaWFuIGludHJvIGdyZWV0aW5nIGZvbGxvd3MgdGhlIHBlcnNvbidzIGdlbmRlciAqLwpHVUkuaXQuaW50cm9IZWxsbyA9ICgpID0+IEcoIkJlbnZlbnV0YSBuZWxsJ2FwcCBTZW1pIEJ1b25pIiwiQmVudmVudXRvIG5lbGwnYXBwIFNlbWkgQnVvbmkiKTsKY29uc3QgeHQgPSAoKSA9PiBYVFtsYW5nKCldIHx8IFhULmVuOwoKY29uc3QgU0VUX01FVEEgPSBbCiAgeyBrOidwYXNpJywgY29sb3I6JyNEMjY5MUUnLCBpbms6JyNBNDRFMTAnLCBzb2Z0OicjRkNFN0Q1JywKICAgIGljb246JzxwYXRoIGQ9Ik0xNSAyNWMtMi4yIDAtMy42LTIuNC0zLjItNS42LjQtMy4zIDItNi40IDQuMS02LjQgMiAwIDIuNiAyLjkgMi4yIDYtLjQgMy40LTEuMSA2LTMuMSA2WiIvPjxwYXRoIGQ9Ik0xMy42IDI4LjhjLjQtMS40IDEuOC0yLjEgMy0xLjcgMS4zLjQgMS42IDEuOCAxLjIgMy4xLS40IDEuNC0xLjcgMi4xLTIuOSAxLjctMS4yLS40LTEuNy0xLjctMS4zLTMuMVoiLz48cGF0aCBkPSJNMjUgMjFjMi4yIDAgMy42LTIuNCAzLjItNS42LS40LTMuMy0yLTYuNC00LjEtNi40LTIgMC0yLjYgMi45LTIuMiA2IC40IDMuNCAxLjEgNiAzLjEgNloiLz48cGF0aCBkPSJNMjYuNCAyNC44Yy0uNC0xLjQtMS44LTIuMS0zLTEuNy0xLjMuNC0xLjYgMS44LTEuMiAzLjEuNCAxLjQgMS43IDIuMSAyLjkgMS43IDEuMi0uNCAxLjctMS43IDEuMy0zLjFaIi8+JyB9LAogIHsgazoncHV0ZXJpJywgY29sb3I6JyNENEE4MEMnLCBpbms6JyM3RTYyMDAnLCBzb2Z0OicjRkJGMUM0JywKICAgIGljb246JzxwYXRoIGQ9Ik0yMCA5YzEgNC42IDYuOCA3LjMgNi44IDEzLjZhNi44IDYuOCAwIDAgMS0xMy42IDBjMC0zLjEgMS42LTUuMSAzLjMtNi42LjIgMiAuOSAzLjQgMi4zIDQuMkMxOCAxNS44IDE4LjYgMTIuMyAyMCA5WiIvPjxwYXRoIGQ9Ik0yMCAzMC41YTMgMyAwIDAgMS0zLTNjMC0yIDEuNi0zIDMtNSAxLjQgMiAzIDMgMyA1YTMgMyAwIDAgMS0zIDNaIi8+JyB9LAogIHsgazonbGVnaScsIGNvbG9yOicjMkU1QUFDJywgaW5rOicjMjQ0OThEJywgc29mdDonI0RERTZGNycsCiAgICBpY29uOic8cGF0aCBkPSJNMjAgMTB2MjBNMTQgMzBoMTJNMTIgMTRoMTYiLz48cGF0aCBkPSJNMTIgMTQgOC41IDIyaDdaIi8+PHBhdGggZD0iTTI4IDE0bC0zLjUgOGg3WiIvPjxwYXRoIGQ9Ik04LjUgMjJhMy41IDEuNiAwIDAgMCA3IDBNMjQuNSAyMmEzLjUgMS42IDAgMCAwIDcgMCIvPjxjaXJjbGUgY3g9IjIwIiBjeT0iMTAuNSIgcj0iMS4zIi8+JyB9LAogIHsgazonZmxvcmknLCBjb2xvcjonI0Q2MzM4NCcsIGluazonI0E4MjE2QScsIHNvZnQ6JyNGQkRERUInLAogICAgaWNvbjonPGNpcmNsZSBjeD0iMjAiIGN5PSIxOSIgcj0iMi42Ii8+PHBhdGggZD0iTTIwIDE2LjRjLTEuOC0yLjMtMS44LTUuMiAwLTYuOSAxLjggMS43IDEuOCA0LjYgMCA2LjlaTTIyLjUgMTguMmMxLjItMi42IDMuOC0zLjkgNi4xLTMuMi0uMSAyLjQtMi40IDQuMi01LjMgNC4xWk0yMS42IDIxLjJjMi45LjIgNSAyLjEgNS4yIDQuNS0yLjMuNi00LjgtLjgtNS45LTMuNFpNMTguNCAyMS4yYy0yLjkuMi01IDIuMS01LjIgNC41IDIuMy42IDQuOC0uOCA1LjktMy40Wk0xNy41IDE4LjJjLTEuMi0yLjYtMy44LTMuOS02LjEtMy4yLjEgMi40IDIuNCA0LjIgNS4zIDQuMVoiLz48cGF0aCBkPSJNMjAgMjEuNlYzMk0yMCAyOGMxLjYtMS44IDMuNC0yLjQgNS0yIi8+JyB9LAogIHsgazoncHJpb3JpdGF0aScsIGNvbG9yOicjNzA0OEMyJywgaW5rOicjNUEzNUEzJywgc29mdDonI0U5RTBGOCcsCiAgICBpY29uOic8Y2lyY2xlIGN4PSIyMCIgY3k9IjIwIiByPSI5LjUiLz48cGF0aCBkPSJNMjAgMTAuNWE0Ljc1IDQuNzUgMCAwIDEgMCA5LjUgNC43NSA0Ljc1IDAgMCAwIDAgOS41Ii8+PGNpcmNsZSBjeD0iMjAiIGN5PSIxNS4yNSIgcj0iMS4yIi8+PGNpcmNsZSBjeD0iMjAiIGN5PSIyNC43NSIgcj0iMS4yIi8+JyB9Cl07Ci8qIHRoZSBzZXRzIGluIHRoZSBjdXJyZW50IGxhbmd1YWdlICovCmNvbnN0IFRTID0gKCkgPT4gU0VUX01FVEEubWFwKG09Pih7IC4uLm0sIC4uLnh0KCkuc2V0c1ttLmtdIH0pKTsKY29uc3QgVE9PTF9JRFMgPSBTRVRfTUVUQS5mbGF0TWFwKChtLHNpKT0+WzEsMiwzLDRdLm1hcChuPT4oeyBpZDptLmsrbiwgc2ksIG4gfSkpKTsKY29uc3QgdG9vbEJ5SWQgPSBpZCA9PiB7IGNvbnN0IGI9VE9PTF9JRFMuZmluZCh4PT54LmlkPT09aWQpOyBpZighYikgcmV0dXJuIG51bGw7IGNvbnN0IGl0PVRTKClbYi5zaV0uaXRlbXNbYi5uLTFdOwogIHJldHVybiB0eXBlb2YgaXQ9PT0nc3RyaW5nJyA\/IHsgLi4uYiwgdDppdCB9IDogeyAuLi5iLCB0Oml0LmgsIGg6aXQuaCwgZXg6aXQuZXggfSB9Owpjb25zdCB0b29sTGFiZWwgPSB4ID0+IFRTKClbeC5zaV0udW5pdCsnICcreC5uOwpjb25zdCB0b29sSGVhZCA9IHggPT4geyBjb25zdCBjPXgudC5pbmRleE9mKCc6Jyk7IGlmKGM+MCAmJiBjPDQwKSByZXR1cm4geC50LnNsaWNlKDAsYykudHJpbSgpOyBjb25zdCBzPXgudC5zcGxpdCgvKD88PVsuIT\/igKZdKVxzLylbMF07IHJldHVybiBzLmxlbmd0aD43MCA\/IHMuc2xpY2UoMCw2OCkucmVwbGFjZSgvXHNcUyokLywnJykrJ+KApicgOiBzIH07CmNvbnN0IHRvb2xTZXRJY29uID0gKHMsc2l6ZT00MCkgPT4gYDxzdmcgd2lkdGg9IiR7c2l6ZX0iIGhlaWdodD0iJHtzaXplKjEuMX0iIHZpZXdCb3g9IjAgMCA0MCA0NCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS42IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSJNMjAgMiAzOCAxMnYyMEwyMCA0MiAyIDMyVjEyWiIvPiR7cy5pY29ufTwvc3ZnPmA7CgovKiBzdWJzY3JpcHRpb246IG9uIHRoZSBzaXRlIHRoZSBzZXJ2ZXIgc2F5czsgaW4gdGhlIHRlc3QgdmVyc2lvbiB5b3UgY2FuIHNpbXVsYXRlIGl0ICovCmxldCBTVUI9ZmFsc2U7CmNvbnN0IGhhc1N1YiA9ICgpID0+IENPTkZJRy5hcGkgPyBTVUIgOiAhIURBVEEuc2V0dGluZ3Muc2ltU3ViOwphc3luYyBmdW5jdGlvbiBzdWJMb2FkKCl7IGlmKCFDT05GSUcuYXBpKSByZXR1cm47IHRyeXsgY29uc3Qgcj1hd2FpdCBmZXRjaChDT05GSUcuYXBpLnJvb3QrJ2dyYWRpbmEvdjEvbWUnLHtjcmVkZW50aWFsczonc2FtZS1vcmlnaW4nLGhlYWRlcnM6eydYLVdQLU5vbmNlJzpDT05GSUcuYXBpLm5vbmNlfX0pOyBpZihyLm9rKXsgY29uc3Qgaj1hd2FpdCByLmpzb24oKTsgU1VCPSEhai5zdWI7IGlmKHRhYj09PSdhemknKSByZW5kZXIoKSB9IH1jYXRjaChlKXt9IH0KbGV0IHVBbmltID0gMDsKY29uc3QgdVRvZGF5ID0gKCkgPT4gKERBVEEudW5lbHRlICYmIERBVEEudW5lbHRlLmRheT09PXRvZGF5S2V5KCkpID8gREFUQS51bmVsdGUgOiBudWxsOwpmdW5jdGlvbiB1RHJhdygpewogIGNvbnN0IE49VE9PTF9JRFMubGVuZ3RoLCBhPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOKTsgbGV0IGI7IGRvIHsgYj1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTikgfSB3aGlsZShiPT09YSk7CiAgREFUQS51bmVsdGU9eyBkYXk6dG9kYXlLZXkoKSwgY2FyZHM6W1RPT0xfSURTW2FdLmlkLCBUT09MX0lEU1tiXS5pZF0sIG5vdGU6JycsIGVudHJ5Om51bGwgfTsKICBwZXJzaXN0KCk7IHVBbmltPTE7IHJlbmRlcigpOwogIHNldFRpbWVvdXQoKCk9PnsgY29uc3QgYz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudGNhcmQnKVswXTsgYyYmYy5jbGFzc0xpc3QuYWRkKCdmbGlwcGVkJykgfSwgMzUwKTsKICBzZXRUaW1lb3V0KCgpPT57IGNvbnN0IGM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRjYXJkJylbMV07IGMmJmMuY2xhc3NMaXN0LmFkZCgnZmxpcHBlZCcpIH0sIDEwNTApOwogIHNldFRpbWVvdXQoKCk9PnsgdUFuaW09MCB9LCAxODAwKTsKfQpjb25zdCBjYXJkQmFjayA9ICgpID0+IGA8ZGl2IGNsYXNzPSJmYWNlIGJhY2siPiR7aGV4KCdzYW1hbnRhJyw0Nil9PHNwYW4+JHtlc2ModCgnYXBwTmFtZScpKX08L3NwYW4+PC9kaXY+YDsKZnVuY3Rpb24gdG9vbENhcmQoaWQsIGZsaXBwZWQpewogIGNvbnN0IHg9dG9vbEJ5SWQoaWQpOyBpZigheCkgcmV0dXJuICcnOyBjb25zdCBzPVRTKClbeC5zaV07CiAgY29uc3QgYz14LnQuaW5kZXhPZignOicpOyBjb25zdCBib2R5ID0geC5oID8gYDxiPiR7ZXNjKHguaCl9PC9iPmAgOiAoYz4wJiZjPDQwKSA\/IGA8Yj4ke2VzYyh4LnQuc2xpY2UoMCxjKSl9PC9iPiR7ZXNjKHgudC5zbGljZShjKSl9YCA6IGVzYyh4LnQpOwogIHJldHVybiBgPGRpdiBjbGFzcz0idGNhcmQgJHtmbGlwcGVkPydmbGlwcGVkJzonJ30iIHN0eWxlPSItLXRjOiR7cy5jb2xvcn07LS10aToke3MuaW5rfTstLXRzOiR7cy5zb2Z0fSI+PGRpdiBjbGFzcz0iaW4iPgogICAgJHtjYXJkQmFjaygpfQogICAgPGRpdiBjbGFzcz0iZmFjZSBmcm9udCIgYXJpYS1oaWRkZW49IiR7IWZsaXBwZWR9Ij4KICAgICAgPGRpdiBjbGFzcz0idGgiPiR7dG9vbFNldEljb24ocywzNCl9PGRpdj48c3BhbiBjbGFzcz0ic2V0Ij4ke2VzYyhzLm5hbWUpfTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtIj4ke2VzYyh0b29sTGFiZWwoeCkpfTwvc3Bhbj48L2Rpdj48L2Rpdj4KICAgICAgJHtzLnN1Yj9gPHAgY2xhc3M9InN1YiI+JHtlc2Mocy5zdWIpfTwvcD5gOicnfQogICAgICA8cCBjbGFzcz0idHQiPiR7Ym9keX08L3A+CiAgICAgICR7eC5leD9gPHAgY2xhc3M9ImV4Ij4ke2VzYyh4LmV4KX08L3A+YDonJ30KICAgIDwvZGl2PjwvZGl2PjwvZGl2PmA7Cn0KY29uc3Qgc2ltQnRuID0gb24gPT4gQ09ORklHLmFwaT8nJzpgPGJ1dHRvbiBjbGFzcz0ibGluayIgZGF0YS11YWN0PSJzaW0iIHN0eWxlPSJhbGlnbi1zZWxmOmZsZXgtc3RhcnQ7Zm9udC1zaXplOi44cmVtIj4ke3Qob24\/J3VTaW1Pbic6J3VTaW1PZmYnKX08L2J1dHRvbj5gOwpmdW5jdGlvbiB1bmVsdGVsQ2FyZCgpewogIGlmICghaGFzU3ViKCkpewogICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJjYXJkIHVuZWx0ZSBsb2NrZWQiPjxkaXYgY2xhc3M9InVoZWFkIj48aDM+JHt0KCd1VGl0bGUnKX08L2gzPjxzcGFuIGNsYXNzPSJsb2NrIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiPjxyZWN0IHg9IjUiIHk9IjEwLjUiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxMCIgcng9IjIuNSIvPjxwYXRoIGQ9Ik04IDEwLjVWOGE0IDQgMCAwIDEgOCAwdjIuNSIvPjwvc3ZnPjwvc3Bhbj48L2Rpdj4KICAgICAgPHAgY2xhc3M9Im5vdGUiPiR7dCgndUxvY2tlZCcpfTwvcD4KICAgICAgPGRpdiBjbGFzcz0idHNldHMiPiR7VFMoKS5tYXAocz0+YDxzcGFuIHN0eWxlPSItLXRjOiR7cy5jb2xvcn07LS10czoke3Muc29mdH0iPiR7dG9vbFNldEljb24ocywyNil9PC9zcGFuPmApLmpvaW4oJycpfTwvZGl2PgogICAgICA8cCBjbGFzcz0ibG9ja21zZyI+JHt0KCd1TG9ja01zZycpfTwvcD4KICAgICAgJHtDT05GSUcuc3Vic1VybD9gPGEgY2xhc3M9ImJ0biBzb2Z0IiBocmVmPSIke2VzYyhDT05GSUcuc3Vic1VybCl9IiB0YXJnZXQ9Il90b3AiIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246bm9uZTt0ZXh0LWFsaWduOmNlbnRlciI+JHt0KCd1U2VlU3VicycpfTwvYT5gOicnfQogICAgICAke3NpbUJ0bih0cnVlKX0KICAgIDwvZGl2PmA7CiAgfQogIGNvbnN0IHU9dVRvZGF5KCk7CiAgaWYgKCF1KXsKICAgIHJldHVybiBgPGRpdiBjbGFzcz0iY2FyZCB1bmVsdGUiPjxkaXYgY2xhc3M9InVoZWFkIj48aDM+JHt0KCd1VGl0bGUnKX08L2gzPjwvZGl2PgogICAgICA8cCBjbGFzcz0ibm90ZSI+JHt0KCd1RHJhd05vdGUnKX08L3A+CiAgICAgIDxkaXYgY2xhc3M9InRwYWlyIj4ke1swLDFdLm1hcCgoKT0+YDxkaXYgY2xhc3M9InRjYXJkIj48ZGl2IGNsYXNzPSJpbiI+JHtjYXJkQmFjaygpfTwvZGl2PjwvZGl2PmApLmpvaW4oJycpfTwvZGl2PgogICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIGRhdGEtdWFjdD0iZHJhdyI+JHt0KCd1RHJhdycpfTwvYnV0dG9uPgogICAgICAke3NpbUJ0bihmYWxzZSl9CiAgICA8L2Rpdj5gOwogIH0KICBjb25zdCBmbGlwcGVkID0gIXVBbmltOwogIHJldHVybiBgPGRpdiBjbGFzcz0iY2FyZCB1bmVsdGUiPjxkaXYgY2xhc3M9InVoZWFkIj48aDM+JHt0KCd1VGl0bGUnKX08L2gzPjwvZGl2PgogICAgPGRpdiBjbGFzcz0idHBhaXIiPiR7dS5jYXJkcy5tYXAoaWQ9PnRvb2xDYXJkKGlkLCBmbGlwcGVkKSkuam9pbignJyl9PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJxIj48bGFiZWwgZm9yPSJ1Tm90ZSI+JHt0KCd1UScpfTwvbGFiZWw+CiAgICAgIDx0ZXh0YXJlYSBpZD0idU5vdGUiIHJvd3M9IjMiIHBsYWNlaG9sZGVyPSIke2VzYyh0KCd1UGgnKSl9Ij4ke2VzYyh1Lm5vdGV8fCcnKX08L3RleHRhcmVhPjwvZGl2PgogICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBkYXRhLXVhY3Q9InNhdmUiPiR7dCh1LmVudHJ5Pyd1VXBkYXRlJzondVNhdmUnKX08L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9ImxpbmsiIGRhdGEtdWFjdD0iYWdhaW4iIHN0eWxlPSJhbGlnbi1zZWxmOmNlbnRlciI+JHt0KCd1QWdhaW4nKX08L2J1dHRvbj4KICAgICR7c2ltQnRuKGZhbHNlKX0KICA8L2Rpdj5gOwp9CmZ1bmN0aW9uIHVTYXZlKCl7CiAgY29uc3QgdT11VG9kYXkoKTsgaWYoIXUpIHJldHVybjsKICB1Lm5vdGU9KCQoJyN1Tm90ZScpPy52YWx1ZXx8JycpLnRyaW0oKTsKICBsZXQgZT11LmVudHJ5ICYmIERBVEEuZW50cmllcy5maW5kKHg9PnguaWQ9PT11LmVudHJ5KTsKICBpZiAoZSl7IGUuY2FyZHM9dS5jYXJkcy5zbGljZSgpOyBlLm5vdGU9dS5ub3RlOyBwZXJzaXN0KCkgfQogIGVsc2UgeyBhZGRFbnRyeSh7IHR5cGU6J3VuZWx0ZScsIGNhcmRzOnUuY2FyZHMuc2xpY2UoKSwgbm90ZTp1Lm5vdGUsIGRhdGU6bmV3IERhdGUoKS50b0lTT1N0cmluZygpIH0pOyB1LmVudHJ5PURBVEEuZW50cmllc1tEQVRBLmVudHJpZXMubGVuZ3RoLTFdLmlkOyBwZXJzaXN0KCkgfQogIHJlbmRlcigpOyB0b2FzdCh0KCd1U2F2ZWQnKSk7Cn0KZnVuY3Rpb24gdW5lbHRlRW50cnlIdG1sKGUsdG0sZGVsKXsKICBjb25zdCB0bD0oZS5jYXJkc3x8W10pLm1hcCh0b29sQnlJZCkuZmlsdGVyKEJvb2xlYW4pLCBzZXRzPVRTKCk7CiAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJlbnRyeSB1bmVsdGUgY29sIj4ke2hleCgndW5lbHRlJywzMil9PGRpdiBjbGFzcz0idHh0Ij48Yj4ke2VzYyhLSU5ELnVuZWx0ZSl9PC9iPjxzcGFuPiR7dG19PC9zcGFuPgogICAgPHVsIGNsYXNzPSJpdGVtcyI+JHt0bC5tYXAoeD0+YDxsaT48c3BhbiBjbGFzcz0idGFnIiBzdHlsZT0iY29sb3I6JHtzZXRzW3guc2ldLmlua30iPiR7ZXNjKHRvb2xMYWJlbCh4KSl9PC9zcGFuPjxzcGFuPiR7ZXNjKHRvb2xIZWFkKHgpKX08L3NwYW4+PC9saT5gKS5qb2luKCcnKX08L3VsPgogICAgJHtlLm5vdGU\/YDxwIGNsYXNzPSJ1bm90ZSI+JHtlc2MoZS5ub3RlKX08L3A+YDonJ308L2Rpdj4ke2RlbH08L2Rpdj5gOwp9CgovKiA9PT09PT09PT09PT0gUHJhY3RpY2UgaHViID09PT09PT09PT09PSAqLwpmdW5jdGlvbiByZW5kZXJIdWIoKXsKICBjb25zdCB0az10b2RheUtleSgpLCB0b2RheT1EQVRBLmVudHJpZXMuZmlsdGVyKGU9PmRheUtleShlLmRhdGUpPT09dGspOwogIGNvbnN0IGNudCA9ICguLi5rKSA9PiB0b2RheS5maWx0ZXIoZT0+ay5pbmNsdWRlcyhlLnR5cGUpKS5sZW5ndGg7CiAgY29uc3Qgbm90ZSA9IG4gPT4gbj9gPGVtPiR7dCgnblRvZGF5Jykobil9PC9lbT5gOicnOwogIGNvbnN0IGJ1c3k9WydwcmVwJywncnVuJywncGF1c2VkJ10uaW5jbHVkZXMoVC5waGFzZSk7CiAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJ2aWV3Ij4KICAgIDxkaXY+PGgyPiR7dCgnaHViVGl0bGUnKX08L2gyPjxwIGNsYXNzPSJsZWFkIj4ke3QoJ2h1YkxlYWQnKX08L3A+PC9kaXY+CiAgICAke2J1c3k\/YDxidXR0b24gY2xhc3M9ImJ0biBzb2Z0IiBkYXRhLWdvPSJ0aW1lciI+JHt0KCdodWJCdXN5Jyl9PC9idXR0b24+YDonJ30KICAgIDxkaXYgY2xhc3M9InRpbGVzIj4KICAgICAgPGJ1dHRvbiBjbGFzcz0idGlsZSIgZGF0YS1nbz0idGltZXIiPiR7aGV4KCdtZWRpdGF0aWUnKX08c3Ryb25nPiR7dCgndGlsZU1lZCcpfTwvc3Ryb25nPiR7bm90ZShjbnQoJ21lZGl0YXRpZScsJ3lvZ2EnKSl9PC9idXR0b24+CiAgICAgIDxidXR0b24gY2xhc3M9InRpbGUiIGRhdGEtZ289InJlY3Vub3N0aW50ZSI+JHtoZXgoJ3JlY3Vub3N0aW50ZScpfTxzdHJvbmc+JHt0KCd0aWxlUmVjJyl9PC9zdHJvbmc+JHtub3RlKGNudCgncmVjdW5vc3RpbnRlJykpfTwvYnV0dG9uPgogICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIiBkYXRhLWdvPSJidWN1cmllIj4ke2hleCgnYnVjdXJpZScpfTxzdHJvbmc+JHt0KCd0aWxlSm95Jyl9PC9zdHJvbmc+JHtub3RlKGNudCgnYnVjdXJpZScpKX08L2J1dHRvbj4KICAgICAgPGJ1dHRvbiBjbGFzcz0idGlsZSIgZGF0YS1nbz0icHV0ZXJpIj4ke2hleCgncHV0ZXJpJyl9PHN0cm9uZz4ke3QoJ3RpbGVQb3cnKX08L3N0cm9uZz4ke25vdGUoY250KCdwdXRlcmknKSl9PC9idXR0b24+CiAgICA8L2Rpdj4KICA8L2Rpdj5gOwp9CgovKiA9PT09PT09PT09PT0gUHJvZmlsZSA9PT09PT09PT09PT0gKi8KY29uc3QgQVZBVEFSUyA9IHsKICBzYW1hbnRhOic8cGF0aCBkPSJNMjAgMjlWMjBNMjAgMjIuNWMwLTMuNS0yLjYtNS41LTYtNS41IDAgMy41IDIuNiA1LjUgNiA1LjVaTTIwIDIwYzAtMy42IDIuNi02IDYtNiAwIDMuNi0yLjYgNi02IDZaIi8+JywKICBmcnVuemE6JzxwYXRoIGQ9Ik0xMiAyOWMwLTkgNS0xNSAxNi0xNiAwIDEwLTUgMTYtMTQgMTZaIi8+PHBhdGggZD0iTTEyIDI5YzQtNSA4LTkgMTMtMTIiLz4nLAogIGZsb2FyZTonPGNpcmNsZSBjeD0iMjAiIGN5PSIxOCIgcj0iMi40Ii8+PHBhdGggZD0iTTIwIDE1LjZjLTEuNi0yLTEuNi00LjYgMC02LjEgMS42IDEuNSAxLjYgNC4xIDAgNi4xWk0yMi4zIDE3LjJjMS4xLTIuMyAzLjQtMy40IDUuNC0yLjgtLjEgMi4xLTIuMSAzLjctNC43IDMuNlpNMjEuNCAyMGMyLjYuMiA0LjQgMS45IDQuNiA0LTIgLjUtNC4yLS43LTUuMi0zWk0xOC42IDIwYy0yLjYuMi00LjQgMS45LTQuNiA0IDIgLjUgNC4yLS43IDUuMi0zWk0xNy43IDE3LjJjLTEuMS0yLjMtMy40LTMuNC01LjQtMi44LjEgMi4xIDIuMSAzLjcgNC43IDMuNloiLz48cGF0aCBkPSJNMjAgMjAuNFYzMSIvPicsCiAgY29wYWM6JzxwYXRoIGQ9Ik0yMCAzMXYtOU0yMCAyNWwtNC0zTTIwIDIzbDQtMyIvPjxwYXRoIGQ9Ik0yMCAxMGMtNSAwLTggMy40LTggNy4yIDAgMy4zIDIuNiA1LjMgNS40IDUuM2g1LjJjMi44IDAgNS40LTIgNS40LTUuM0MyOCAxMy40IDI1IDEwIDIwIDEwWiIvPicsCiAgc29hcmU6JzxjaXJjbGUgY3g9IjIwIiBjeT0iMjEiIHI9IjQuNSIvPjxwYXRoIGQ9Ik0yMCAxMXYyLjZNMjAgMjguNFYzMU0xMCAyMWgyLjZNMjcuNCAyMUgzME0xMi45IDEzLjlsMS44IDEuOE0yNS4zIDI2LjNsMS44IDEuOE0xMi45IDI4LjFsMS44LTEuOE0yNS4zIDE1LjdsMS44LTEuOCIvPicsCiAgbHVuYTonPHBhdGggZD0iTTI0IDEyLjVhOC41IDguNSAwIDEgMCA0IDE1LjYgNyA3IDAgMCAxLTQtMTUuNloiLz48cGF0aCBkPSJNMTQgMTQuNWwuNiAxLjQgMS40LjYtMS40LjYtLjYgMS40LS42LTEuNC0xLjQtLjYgMS40LS42WiIvPicsCiAgcGljYXR1cmE6JzxwYXRoIGQ9Ik0yMCAxMWMzLjggNC42IDYgOC40IDYgMTEuNmE2IDYgMCAwIDEtMTIgMGMwLTMuMiAyLjItNyA2LTExLjZaIi8+PHBhdGggZD0iTTE3LjUgMjRhMi43IDIuNyAwIDAgMCAyLjUgMi4yIi8+JywKICBtdW50ZTonPHBhdGggZD0iTTkgMjkgMTcgMTZsNCA2IDMtNCA3IDExWiIvPjxwYXRoIGQ9Ik0xNSAxOS4ybDIgMS41IDItMS42Ii8+Jwp9Owpjb25zdCBBVl9DT0xPUlMgPSB7IHNhbWFudGE6JyM1QjdEMzYnLCBmcnVuemE6JyMzRTdENEUnLCBmbG9hcmU6JyNCODRFNzgnLCBjb3BhYzonIzZFNEEyQycsIHNvYXJlOicjQzA4QTFFJywgbHVuYTonIzNCNUI4NicsIHBpY2F0dXJhOicjMkY3RjczJywgbXVudGU6JyM3QTVDOEMnIH07CmNvbnN0IGF2YXRhclN2ZyA9IChrLHNpemU9NjQpID0+IHsgaz1BVkFUQVJTW2tdP2s6J3NhbWFudGEnOwogIHJldHVybiBgPHN2ZyB3aWR0aD0iJHtzaXplfSIgaGVpZ2h0PSIke3NpemUqMS4xfSIgdmlld0JveD0iMCAwIDQwIDQ0IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTIwIDIgMzggMTJ2MjBMMjAgNDIgMiAzMlYxMloiIGZpbGw9IiR7QVZfQ09MT1JTW2tdfSIvPjxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIxLjciIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+JHtBVkFUQVJTW2tdfTwvZz48L3N2Zz5gIH07CmxldCBhdk9wZW49ZmFsc2U7CmZ1bmN0aW9uIHJlbmRlclByb2ZpbCgpewogIGNvbnN0IGVudHM9REFUQS5lbnRyaWVzLCB0b2RvRG9uZT1EQVRBLnRvZG9zLmZpbHRlcih4PT54LmRvbmUpLmxlbmd0aCwgbWlucz1lbnRzLnJlZHVjZSgoYSxlKT0+YSsoZS5taW51dGVzfHwwKSwwKTsKICBjb25zdCBuYW1lPURBVEEuY29tbS5uYW1lLCBjdXJMYW5nPShMQU5HUy5maW5kKHg9PnhbMF09PT1sYW5nKCkpfHxbXSlbMV18fCcnOwogIHJldHVybiBgPGRpdiBjbGFzcz0idmlldyBwcm9maWwiPgogICAgPGRpdiBjbGFzcz0icGhlYWQiPiR7YXZhdGFyU3ZnKERBVEEuc2V0dGluZ3MuYXZhdGFyLDc2KX0KICAgICAgPGRpdj48aDI+JHtuYW1lP2VzYyhuYW1lKTp0KCdteVByb2ZpbGUnKX08L2gyPjxidXR0b24gY2xhc3M9ImxpbmsiIGRhdGEtdWFjdD0ibmFtZSI+JHt0KG5hbWU\/J2NoYW5nZU5hbWUnOidwaWNrTmFtZScpfTwvYnV0dG9uPjwvZGl2PjwvZGl2PgogICAgPGRpdiBjbGFzcz0ic3RhdHMgZm91ciI+CiAgICAgIDxkaXYgY2xhc3M9InN0YXQiPjxiPiR7c3RyZWFrKCl9PC9iPjxzcGFuPiR7dCgnc3RyZWFrJyl9PC9zcGFuPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzdGF0Ij48Yj4ke2VudHMubGVuZ3RofTwvYj48c3Bhbj4ke3QoJ3N0UHJhY3QnKX08L3NwYW4+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InN0YXQiPjxiPiR7bWluc308L2I+PHNwYW4+JHt0KCdzdE1pbicpfTwvc3Bhbj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic3RhdCI+PGI+JHt0b2RvRG9uZX08L2I+PHNwYW4+JHt0KCdzdFRvZG8nKX08L3NwYW4+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNhcmQgcGxpc3QiPgogICAgICA8YnV0dG9uIGNsYXNzPSJwcm93IiBkYXRhLXVhY3Q9ImF2YXRhciI+PHNwYW4+JHt0KCdhdmF0YXInKX08L3NwYW4+PHNwYW4gY2xhc3M9InB2Ij4ke2F2T3Blbj8n4oyDJzon4oC6J308L3NwYW4+PC9idXR0b24+CiAgICAgICR7YXZPcGVuP2A8ZGl2IGNsYXNzPSJhdmdyaWQiPiR7T2JqZWN0LmtleXMoQVZBVEFSUykubWFwKGs9PmA8YnV0dG9uIGRhdGEtYXY9IiR7a30iIGFyaWEtcHJlc3NlZD0iJHsoREFUQS5zZXR0aW5ncy5hdmF0YXJ8fCdzYW1hbnRhJyk9PT1rfSIgYXJpYS1sYWJlbD0iQXZhdGFyICR7a30iPiR7YXZhdGFyU3ZnKGssNDQpfTwvYnV0dG9uPmApLmpvaW4oJycpfTwvZGl2PmA6Jyd9CiAgICAgIDxidXR0b24gY2xhc3M9InByb3ciIGRhdGEtdWFjdD0ibGFuZyI+PHNwYW4+JHt0KCdsYW5ndWFnZScpfTwvc3Bhbj48c3BhbiBjbGFzcz0icHYiPiR7ZXNjKGN1ckxhbmcpfSDigLo8L3NwYW4+PC9idXR0b24+CiAgICAgICR7bmVlZHNHZW4oKT9gPGRpdiBjbGFzcz0icHJvdyBzdGF0aWMiPjxzcGFuPiR7dCgnYWRkcmVzcycpfTwvc3Bhbj48c3BhbiBjbGFzcz0ibWluaSI+PGJ1dHRvbiBkYXRhLWdlbj0iZiIgYXJpYS1wcmVzc2VkPSIke0RBVEEuc2V0dGluZ3MuZ2VuIT09J20nfSI+JHt0KCdmZW0nKX08L2J1dHRvbj48YnV0dG9uIGRhdGEtZ2VuPSJtIiBhcmlhLXByZXNzZWQ9IiR7REFUQS5zZXR0aW5ncy5nZW49PT0nbSd9Ij4ke3QoJ21hc2MnKX08L2J1dHRvbj48L3NwYW4+PC9kaXY+YDonJ30KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iY2FyZCBwbGlzdCI+CiAgICAgIDxidXR0b24gY2xhc3M9InByb3ciIGRhdGEtdWFjdD0iaW50cm8iPjxzcGFuPiR7dCgnaW50cm8nKX08L3NwYW4+PHNwYW4gY2xhc3M9InB2Ij7igLo8L3NwYW4+PC9idXR0b24+CiAgICAgIDxidXR0b24gY2xhc3M9InByb3ciIGRhdGEtdWFjdD0iYWJvdXQiPjxzcGFuPiR7dCgnYWJvdXQnKX08L3NwYW4+PHNwYW4gY2xhc3M9InB2Ij7igLo8L3NwYW4+PC9idXR0b24+CiAgICAgIDxidXR0b24gY2xhc3M9InByb3ciIGRhdGEtdWFjdD0icHJlY2VwdGUiPjxzcGFuPiR7dCgna2FybWEnKX08c21hbGw+JHt0KCdrYXJtYVN1YicpfTwvc21hbGw+PC9zcGFuPjxzcGFuIGNsYXNzPSJwdiI+4oC6PC9zcGFuPjwvYnV0dG9uPgogICAgICAke0NPTkZJRy5jb3Vyc2VzVXJsP2A8YSBjbGFzcz0icHJvdyIgaHJlZj0iJHtlc2MoQ09ORklHLmNvdXJzZXNVcmwpfSIgdGFyZ2V0PSJfdG9wIj48c3Bhbj4ke3QoJ2NvdXJzZXMnKX08L3NwYW4+PHNwYW4gY2xhc3M9InB2Ij7igLo8L3NwYW4+PC9hPmA6Jyd9CiAgICAgIDxhIGNsYXNzPSJwcm93IiBocmVmPSJtYWlsdG86Y29udGFjdEBkb3JlbGFpZXBhbi5jb20iPjxzcGFuPiR7dCgnY29udGFjdCcpfTwvc3Bhbj48c3BhbiBjbGFzcz0icHYiPmNvbnRhY3RAZG9yZWxhaWVwYW4uY29tPC9zcGFuPjwvYT4KICAgIDwvZGl2PgogICAgJHtDT05GSUcuYXBpPycnOmA8cCBjbGFzcz0iYmFubmVyIj4ke3QoJ3Byb2ZCYW5uZXInKX08L3A+YH0KICA8L2Rpdj5gOwp9CgovKiA9PT09PT09PT09PT0gSW50cm9kdWN0aW9uLCBBYm91dCwgMTAgUG9zaXRpdmUgS2FybWFzID09PT09PT09PT09PSAqLwpjb25zdCBJTlRST19CRyA9IFsnbGluZWFyLWdyYWRpZW50KDE2MGRlZywjRERFOUM4LCM5REJCNzIpJywnbGluZWFyLWdyYWRpZW50KDE2MGRlZywjRUZFNUQ4LCNDOUE0N0UpJywnbGluZWFyLWdyYWRpZW50KDE2MGRlZywjRTFFOEYyLCM5RkI0RDMpJywnbGluZWFyLWdyYWRpZW50KDE2MGRlZywjRjdFMkVCLCNEOTlBQjUpJywnbGluZWFyLWdyYWRpZW50KDE2MGRlZywjRERFRkVDLCM4Q0MyQjgpJ107CmNvbnN0IEtBUk1BX0dST1VQUyA9IFtbMCwzXSxbMyw3XSxbNywxMF1dOwpjb25zdCBLQVJNQV9ET01BSU5TID0gW1syLDgsOV0sWzMsNCw1LDZdLFsxLDYsN11dOwpsZXQgb3Y9bnVsbCwgb3ZJZHg9MDsKZnVuY3Rpb24gcmVuZGVyT3ZlcmxheSgpewogIGxldCBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3ZsJyk7CiAgaWYgKCFvdil7IGlmKGVsKSBlbC5yZW1vdmUoKTsgcmV0dXJuIH0KICBpZiAoIWVsKXsgZWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IGVsLmlkPSdvdmwnOyBlbC5jbGFzc05hbWU9J292bCc7IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hcHAnKS5hcHBlbmRDaGlsZChlbCkgfQogIGNvbnN0IFg9eHQoKTsKICBpZiAob3Y9PT0naW50cm8nKXsKICAgIGNvbnN0IHM9WC5pbnRyb1tvdklkeF0sIGxhc3Q9b3ZJZHg9PT1YLmludHJvLmxlbmd0aC0xOwogICAgY29uc3QgdGl0bGUgPSAob3ZJZHg9PT0wICYmIEdVSVtsYW5nKCldICYmIEdVSVtsYW5nKCldLmludHJvSGVsbG8pID8gR1VJW2xhbmcoKV0uaW50cm9IZWxsbygpIDogc1swXTsKICAgIGVsLmlubmVySFRNTD1gPGRpdiBjbGFzcz0ic2xpZGUiIHN0eWxlPSJiYWNrZ3JvdW5kOiR7SU5UUk9fQkdbb3ZJZHhdfSI+PGJ1dHRvbiBjbGFzcz0ieCIgZGF0YS1vdj0iY2xvc2UiIGFyaWEtbGFiZWw9IiR7ZXNjKHQoJ2Nsb3NlJykpfSI+w5c8L2J1dHRvbj4KICAgICAgPGRpdiBjbGFzcz0iaGV4bnVtIj4ke292SWR4KzF9PC9kaXY+PGgyPiR7ZXNjKHRpdGxlKX08L2gyPjxwPiR7ZXNjKHNbMV0pfTwvcD4KICAgICAgPGRpdiBjbGFzcz0iZG90cyI+JHtYLmludHJvLm1hcCgoXyxpKT0+YDxzcGFuIGNsYXNzPSIke2k9PT1vdklkeD8nb24nOicnfSI+PC9zcGFuPmApLmpvaW4oJycpfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJidG5zIj4ke292SWR4P2A8YnV0dG9uIGNsYXNzPSJidG4gZ2hvc3QiIGRhdGEtb3Y9InByZXYiPiR7dCgnb3ZQcmV2Jyl9PC9idXR0b24+YDonJ308YnV0dG9uIGNsYXNzPSJidG4iIGRhdGEtb3Y9IiR7bGFzdD8nY2xvc2UnOiduZXh0J30iPiR7dChsYXN0PydvdlN0YXJ0Jzonb3ZOZXh0Jyl9PC9idXR0b24+PC9kaXY+PC9kaXY+YDsKICB9IGVsc2UgaWYgKG92PT09J3ByZWNlcHRlJyl7CiAgICBlbC5pbm5lckhUTUw9YDxkaXYgY2xhc3M9ImFib3V0Ij48ZGl2IGNsYXNzPSJhdG9wIj48aDI+JHt0KCdrYXJtYScpfTwvaDI+PGJ1dHRvbiBjbGFzcz0ieCIgZGF0YS1vdj0iY2xvc2UiIGFyaWEtbGFiZWw9IiR7ZXNjKHQoJ2Nsb3NlJykpfSI+w5c8L2J1dHRvbj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYXN0ZXBzIj48cCBjbGFzcz0ibGVhZCIgc3R5bGU9Im1hcmdpbjowIj4ke3QoJ2thcm1hTGVhZCcpfTwvcD4KICAgICAgJHtLQVJNQV9HUk9VUFMubWFwKChbYSxiXSxnaSk9PmA8aDQgY2xhc3M9Imtncm91cCI+JHtYLmdyb3Vwc1tnaV19PC9oND5gK1gua2FybWEuc2xpY2UoYSxiKS5tYXAoKHAsayk9PmA8c2VjdGlvbj48ZGl2IGNsYXNzPSJoZXhudW0gc20iPiR7YStrKzF9PC9kaXY+PGRpdj48aDM+JHtlc2MocFswXSl9PC9oMz48cD4ke2VzYyhwWzFdKX08L3A+PHAgY2xhc3M9InNlZWQiPiR7ZXNjKHBbMl0pfTwvcD48L2Rpdj48L3NlY3Rpb24+YCkuam9pbignJykpLmpvaW4oJycpfQogICAgICA8aDQgY2xhc3M9Imtncm91cCI+JHt0KCdieURvbWFpbicpfTwvaDQ+CiAgICAgIDxkaXYgY2xhc3M9Imtkb20iPiR7S0FSTUFfRE9NQUlOUy5tYXAoKGwsZGkpPT5gPGRpdj48Yj4ke1guZG9tYWluc1tkaV19PC9iPiR7bC5tYXAobj0+YDxzcGFuPjxpPiR7bn08L2k+JHtlc2MoWC5rYXJtYVtuLTFdWzBdKX08L3NwYW4+YCkuam9pbignJyl9PC9kaXY+YCkuam9pbignJyl9PC9kaXY+PC9kaXY+PC9kaXY+YDsKICB9IGVsc2UgewogICAgZWwuaW5uZXJIVE1MPWA8ZGl2IGNsYXNzPSJhYm91dCI+PGRpdiBjbGFzcz0iYXRvcCI+PGgyPiR7dCgnYWJvdXQnKX08L2gyPjxidXR0b24gY2xhc3M9IngiIGRhdGEtb3Y9ImNsb3NlIiBhcmlhLWxhYmVsPSIke2VzYyh0KCdjbG9zZScpKX0iPsOXPC9idXR0b24+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImFzdGVwcyI+JHtYLmFib3V0Lm1hcCgocyxpKT0+YDxzZWN0aW9uPjxkaXYgY2xhc3M9ImhleG51bSBzbSI+JHtpKzF9PC9kaXY+PGRpdj48aDM+JHtlc2Moc1swXSl9PC9oMz4ke3NbMV0ubWFwKHA9PnR5cGVvZiBwPT09J3N0cmluZyc\/YDxwPiR7ZXNjKHApfTwvcD5gOmA8cD4ke2VzYyhwLnN1YnMpfTwvcD4ke0NPTkZJRy5zdWJzVXJsP2A8YSBjbGFzcz0iYnRuIHNvZnQiIGhyZWY9IiR7ZXNjKENPTkZJRy5zdWJzVXJsKX0iIHRhcmdldD0iX3RvcCIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjpub25lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi1ib3R0b206OHB4Ij4ke3QoJ3VTZWVTdWJzJyl9PC9hPmA6Jyd9YCkuam9pbignJyl9PC9kaXY+PC9zZWN0aW9uPmApLmpvaW4oJycpfTwvZGl2PjwvZGl2PmA7CiAgfQp9CmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxlPT57CiAgY29uc3QgYj1lLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1vdl0nKTsgaWYoIWIpIHJldHVybjsKICBjb25zdCBhPWIuZGF0YXNldC5vdjsKICBpZihhPT09J25leHQnKSBvdklkeCsrOyBlbHNlIGlmKGE9PT0ncHJldicpIG92SWR4LS07IGVsc2UgeyBpZihvdj09PSdpbnRybycgJiYgIURBVEEuc2V0dGluZ3MuaW50cm9TZWVuKXsgREFUQS5zZXR0aW5ncy5pbnRyb1NlZW49dHJ1ZTsgcGVyc2lzdCgpIH0gb3Y9bnVsbCB9CiAgcmVuZGVyT3ZlcmxheSgpOwp9KTsKCi8qID09PT09PT09PT09PSBOZXcgYWN0aW9ucyA9PT09PT09PT09PT0gKi8KJCgnI21haW4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZT0+ewogIGNvbnN0IGF2PWUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWF2XScpOyBpZihhdil7IERBVEEuc2V0dGluZ3MuYXZhdGFyPWF2LmRhdGFzZXQuYXY7IHBlcnNpc3QoKTsgcmVuZGVyKCk7IHJldHVybiB9CiAgY29uc3QgYj1lLnRhcmdldC5jbG9zZXN0KCdbZGF0YS11YWN0XScpOyBpZighYikgcmV0dXJuOwogIGNvbnN0IGE9Yi5kYXRhc2V0LnVhY3Q7CiAgaWYoYT09PSdkcmF3J3x8YT09PSdhZ2FpbicpIHVEcmF3KCk7CiAgaWYoYT09PSdzYXZlJykgdVNhdmUoKTsKICBpZihhPT09J3NpbScpeyBEQVRBLnNldHRpbmdzLnNpbVN1Yj0hREFUQS5zZXR0aW5ncy5zaW1TdWI7IHBlcnNpc3QoKTsgcmVuZGVyKCkgfQogIGlmKGE9PT0nYXZhdGFyJyl7IGF2T3Blbj0hYXZPcGVuOyByZW5kZXIoKSB9CiAgaWYoYT09PSdsYW5nJyl7ICQoJyNsYW5nQnRuJykuY2xpY2soKSB9CiAgaWYoYT09PSdpbnRybycpeyBvdj0naW50cm8nOyBvdklkeD0wOyByZW5kZXJPdmVybGF5KCkgfQogIGlmKGE9PT0nYWJvdXQnKXsgb3Y9J2Fib3V0JzsgcmVuZGVyT3ZlcmxheSgpIH0KICBpZihhPT09J3ByZWNlcHRlJyl7IG92PSdwcmVjZXB0ZSc7IHJlbmRlck92ZXJsYXkoKSB9CiAgaWYoYT09PSduYW1lJyl7IHNoYXJlT3Blbj0nX19uYW1lJzsgbmFtZURyYWZ0PURBVEEuY29tbS5uYW1lfHwnJzsgcmVuZGVyU2hhcmUoKTsgY29uc3QgaT0kKCcjY29tbU5hbWUnKTsgaSYmaS5mb2N1cygpIH0KfSk7CiQoJyNtYWluJykuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLGU9PnsgaWYoZS50YXJnZXQuaWQ9PT0ndU5vdGUnKXsgY29uc3QgdT11VG9kYXkoKTsgaWYodSl7IHUubm90ZT1lLnRhcmdldC52YWx1ZSB9IH0gfSk7CgovKiA9PT09PT09PT09PT0gQWN0aW9ucyA9PT09PT09PT09PT0gKi8KJCgnI21haW4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZT0+ewogIGNvbnN0IG9wPWUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLW9wZW5wdXRdJyk7IGlmKG9wICYmICFlLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1kZWxdJykpeyB0YWI9J3B1dGVyaSc7IHBWaWV3PW9wLmRhdGFzZXQub3BlbnB1dDsgcmVuZGVyKCk7ICQoJyNtYWluJykuc2Nyb2xsVG9wPTA7IHJldHVybiB9CiAgY29uc3QgcHY9ZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtcHZdJyk7IGlmKHB2ICYmICFwdi5kaXNhYmxlZCl7IHBDYXB0dXJlKCk7IHBEcmFmdC52PStwdi5kYXRhc2V0LnB2OyByZW5kZXIoKTsgcmV0dXJuIH0KICBjb25zdCB0bT1lLnRhcmdldC5jbG9zZXN0KCdbZGF0YS10ZW1hXScpOyBpZih0bSl7IHBDYXB0dXJlKCk7IHBEcmFmdC50ZW1hID0gcERyYWZ0LnRlbWE9PT10bS5kYXRhc2V0LnRlbWEgPyAnJyA6IHRtLmRhdGFzZXQudGVtYTsgcmVuZGVyKCk7IHJldHVybiB9CiAgY29uc3Qgemk9ZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtemldJyk7IGlmKHppKXsgcENhcHR1cmUoKTsgcERyYWZ0LnppPXppLmRhdGFzZXQuemk7IHJlbmRlcigpOyByZXR1cm4gfQogIGNvbnN0IGR1PWUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWR1cl0nKTsgaWYoZHUpeyBjb25zdCBmPSQoJyNwZl9wMycpOyBpZihmKXsgY29uc3QgZD1kdS5kYXRhc2V0LmR1cjsKICAgICAgaWYoZHUuZGF0YXNldC5tb2RlPT09J3NldCcpIGYudmFsdWU9ZDsgZWxzZSB7IGNvbnN0IGJhc2U9Zi52YWx1ZS5yZXBsYWNlKHR4KCkuZHVyU3RyaXAsJycpOyBmLnZhbHVlPShiYXNlP2Jhc2UrJyAnOicnKSt0eCgpLmR1ckFwcGVuZChkKSB9CiAgICAgIHBEcmFmdC5wMz1mLnZhbHVlOyBmLmZvY3VzKCkgfSByZXR1cm4gfQogIGNvbnN0IG9iPWUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLW9wZW5idWNdJyk7IGlmKG9iICYmICFlLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1kZWxdJykpeyB0YWI9J2J1Y3VyaWUnOyBidWNWaWV3PW9iLmRhdGFzZXQub3BlbmJ1YzsgcmVuZGVyKCk7ICQoJyNtYWluJykuc2Nyb2xsVG9wPTA7IHJldHVybiB9CiAgY29uc3QgZ2I9ZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtZ2VuXScpOyBpZihnYil7IHJlY1Jvd3MmJnRhYj09PSdyZWN1bm9zdGludGUnJiZyZWNDYXB0dXJlKCk7IERBVEEuc2V0dGluZ3MuZ2VuPWdiLmRhdGFzZXQuZ2VuOyBwZXJzaXN0KCk7IHJlbmRlcigpOyByZXR1cm4gfQogIGNvbnN0IHBvPWUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXByZXZvYmpdJyk7IGlmKHBvKXsgY29uc3Qgbz1wcmV2TGlzdCgpWytwby5kYXRhc2V0LnByZXZvYmpdOyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1idWNdJykuZm9yRWFjaChlbD0+YnVjRHJhZnRbZWwuZGF0YXNldC5idWNdPWVsLnZhbHVlKTsgYnVjRHJhZnQub2JpZWN0aXY9bzsgb2JqT3Blbj1mYWxzZTsgb2JqUXVlcnk9Jyc7IHJlbmRlcigpOyByZXR1cm4gfQogIGNvbnN0IHRkPWUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXRkb25lXScpOyBpZih0ZCl7IGNvbnN0IHg9REFUQS50b2Rvcy5maW5kKHk9PnkuaWQ9PT10ZC5kYXRhc2V0LnRkb25lKTsgeC5kb25lPSF4LmRvbmU7IHguZG9uZUF0PXguZG9uZT9uZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk6bnVsbDsgcGVyc2lzdCgpOyByZW5kZXIoKTsgaWYoeC5kb25lKSB0b2FzdCh0KCdkb25lVG9hc3QnKSk7IHJldHVybiB9CiAgY29uc3QgdGRsPWUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXRkZWxdJyk7IGlmKHRkbCl7IHBlbmRpbmdEZWw9dGRsLmRhdGFzZXQudGRlbDsgcmVuZGVyKCk7IHJldHVybiB9CiAgY29uc3QgdGR5PWUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXRkZWwteWVzXScpOyBpZih0ZHkpeyBEQVRBLnRvZG9zPURBVEEudG9kb3MuZmlsdGVyKHg9PnguaWQhPT10ZHkuZGF0YXNldC50ZGVsWWVzKTsgcGVuZGluZ0RlbD1udWxsOyBwZXJzaXN0KCk7IHJlbmRlcigpOyByZXR1cm4gfQogIGNvbnN0IHJrPWUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXJrXScpOyBpZihyayl7IHJlY0NhcHR1cmUoKTsgcmVjUm93c1srcmsuZGF0YXNldC5yaV0uaz1yay5kYXRhc2V0LnJrOyByZW5kZXIoKTsgcmV0dXJuIH0KICBjb25zdCBycm09ZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtcnJtXScpOyBpZihycm0peyByZWNDYXB0dXJlKCk7IHJlY1Jvd3Muc3BsaWNlKCtycm0uZGF0YXNldC5ycm0sMSk7IHJlbmRlcigpOyByZXR1cm4gfQogIGNvbnN0IGc9ZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtZ29dJyk7IGlmKGcpeyBpZihnLmRhdGFzZXQuZ289PT0nanVybmFsJyl7IGpWaWV3PWcuZGF0YXNldC5qdnx8J21pbmUnOyBpZihqVmlldz09PSdjb21tJykgY29tbUxvYWQoKSB9IGdvKGcuZGF0YXNldC5nbyk7IHJldHVybiB9CiAgY29uc3Qgc2V0PWUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXNldF0nKTsKICBpZihzZXQpeyBjb25zdCBrPXNldC5kYXRhc2V0LnNldCwgdj1zZXQuZGF0YXNldC52YWw7IERBVEEuc2V0dGluZ3Nba109IChrPT09J2tpbmQnfHxrPT09J3NvdW5kJyk\/IHYgOiBOdW1iZXIodik7IHBlcnNpc3QoKTsKICAgIGNvbnN0IGtlZXBUPSQoJyN0VGl0bGUnKT8udmFsdWUsIGtlZXBNPSQoJyNtVGl0bGUnKT8udmFsdWUsIGtlZXBEPSQoJyNtRGF0ZScpPy52YWx1ZTsKICAgIHJlbmRlcigpOyBpZigkKCcjdFRpdGxlJykmJmtlZXBUKSAkKCcjdFRpdGxlJykudmFsdWU9a2VlcFQ7IGlmKCQoJyNtVGl0bGUnKSYma2VlcE0pICQoJyNtVGl0bGUnKS52YWx1ZT1rZWVwTTsgaWYoJCgnI21EYXRlJykmJmtlZXBEKSAkKCcjbURhdGUnKS52YWx1ZT1rZWVwRDsgcmV0dXJuIH0KICBjb25zdCBmPWUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWZpbHRlcl0nKTsgaWYoZil7IGpGaWx0ZXI9Zi5kYXRhc2V0LmZpbHRlcjsgcmVuZGVyKCk7IHJldHVybiB9CiAgY29uc3QgcHI9ZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtcHJpdl0nKTsgaWYocHIpeyBjb25zdCBrPXByLmRhdGFzZXQucHJpdjsgaWYoaz09PSdyZWN1bm9zdGludGUnKSByZWNDYXB0dXJlKCk7IGlmKGs9PT0ncHV0ZXJpJykgcENhcHR1cmUoKTsgaWYoaz09PSdidWN1cmllJykgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtYnVjXScpLmZvckVhY2goZWw9PmJ1Y0RyYWZ0W2VsLmRhdGFzZXQuYnVjXT1lbC52YWx1ZSk7IHNoYXJlTmV4dFtrXT1wci5kYXRhc2V0LnZhbD09PScxJzsgcmVuZGVyKCk7IHJldHVybiB9CiAgY29uc3QganY9ZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtanZpZXddJyk7IGlmKGp2KXsgalZpZXc9anYuZGF0YXNldC5qdmlldzsgcmVuZGVyKCk7ICQoJyNtYWluJykuc2Nyb2xsVG9wPTA7IGlmKGpWaWV3PT09J2NvbW0nKSBjb21tTG9hZCgpOyByZXR1cm4gfQogIGNvbnN0IGNmPWUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWNmaWx0ZXJdJyk7IGlmKGNmKXsgY0ZpbHRlcj1jZi5kYXRhc2V0LmNmaWx0ZXI7IHJlbmRlcigpOyByZXR1cm4gfQogIGNvbnN0IGNsPWUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWNsYW5nXScpOyBpZihjbCl7IERBVEEuc2V0dGluZ3MuY29tbUxhbmc9Y2wuZGF0YXNldC5jbGFuZzsgcGVyc2lzdCgpOyByZW5kZXIoKTsgcmV0dXJuIH0KICBjb25zdCByYz1lLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1yZWFjdF0nKTsgaWYocmMpeyBjb25zdCBpZD1yYy5kYXRhc2V0LnJlYWN0LCBwPWNvbW1Qb3N0cygpLmZpbmQoeD0+eC5pZD09PWlkKTsgaWYoIXApIHJldHVybjsKICAgIGlmKENPTkZJRy5hcGkpeyBjb25zdCBvbj0hcC5yZWFjdGVkOyBwLnJlYWN0ZWQ9b247IHAucmVhY3RzPShwLnJlYWN0c3x8MCkrKG9uPzE6LTEpOyByZW5kZXIoKTsgaWYob24pIHRvYXN0KHJlYWN0T2YocC50eXBlKS50b2FzdCk7CiAgICAgIGFwaUMoJ2NvbW11bml0eS8nK2lkKycvcmVhY3QnLHttZXRob2Q6J1BPU1QnLGJvZHk6e29ufX0pLnRoZW4oaj0+eyBwLnJlYWN0cz1qLnJlYWN0czsgcC5yZWFjdGVkPWoucmVhY3RlZDsgcmVuZGVyKCkgfSkuY2F0Y2goZXJyPT50b2FzdChlcnIubWVzc2FnZSkpOyByZXR1cm4gfQogICAgY29uc3Qgb249IURBVEEuY29tbS5yZWFjdGVkW2lkXTsgaWYob24pIERBVEEuY29tbS5yZWFjdGVkW2lkXT0xOyBlbHNlIGRlbGV0ZSBEQVRBLmNvbW0ucmVhY3RlZFtpZF07IHBlcnNpc3QoKTsgcmVuZGVyKCk7IGlmKG9uKSB0b2FzdChyZWFjdE9mKHAudHlwZSkudG9hc3QpOyByZXR1cm4gfQogIGNvbnN0IG1vPWUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLW1vcmVdJyk7IGlmKG1vKXsgb3BlblBvc3RbbW8uZGF0YXNldC5tb3JlXT0hb3BlblBvc3RbbW8uZGF0YXNldC5tb3JlXTsgcmVuZGVyKCk7IHJldHVybiB9CiAgY29uc3QgcnA9ZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtcmVwb3J0XScpOyBpZihycCl7IGlmKHBlbmRpbmdSZXA9PT1ycC5kYXRhc2V0LnJlcG9ydCl7IGNvbnN0IGlkPXJwLmRhdGFzZXQucmVwb3J0OyBwZW5kaW5nUmVwPW51bGw7CiAgICAgIGlmKENPTkZJRy5hcGkpeyBhcGlDKCdjb21tdW5pdHkvJytpZCsnL3JlcG9ydCcse21ldGhvZDonUE9TVCcsYm9keTp7fX0pLnRoZW4oKCk9PnsgQ0MucG9zdHM9Q0MucG9zdHMuZmlsdGVyKHA9PnAuaWQhPT1pZCk7IHJlbmRlcigpOyB0b2FzdCh0KCdyZXBvcnRlZCcpKSB9KS5jYXRjaChlcnI9PnRvYXN0KGVyci5tZXNzYWdlKSkgfQogICAgICBlbHNlIHsgREFUQS5jb21tLmhpZGRlbltpZF09MTsgcGVyc2lzdCgpOyByZW5kZXIoKTsgdG9hc3QodCgncmVwb3J0ZWQnKSkgfSB9CiAgICBlbHNlIHsgcGVuZGluZ1JlcD1ycC5kYXRhc2V0LnJlcG9ydDsgcnAudGV4dENvbnRlbnQ9dCgncmVwb3J0QWdhaW4nKSB9IHJldHVybiB9CiAgY29uc3QgZD1lLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1kZWxdJyk7IGlmKGQpeyBwZW5kaW5nRGVsPWQuZGF0YXNldC5kZWw7IHJlbmRlcigpOyByZXR1cm4gfQogIGNvbnN0IGR5PWUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWRlbC15ZXNdJyk7IGlmKGR5KXsgREFUQS5lbnRyaWVzPURBVEEuZW50cmllcy5maWx0ZXIoeD0+eC5pZCE9PWR5LmRhdGFzZXQuZGVsWWVzKTsgcGVuZGluZ0RlbD1udWxsOyBwZXJzaXN0KCk7IHJlbmRlcigpOyB0b2FzdCh0KCdkZWxldGVkJykpOyByZXR1cm4gfQogIGlmKGUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWRlbC1ub10nKSl7IHBlbmRpbmdEZWw9bnVsbDsgcmVuZGVyKCk7IHJldHVybiB9CiAgY29uc3QgYT1lLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1hY3RdJyk7IGlmKCFhKSByZXR1cm47CiAgY29uc3QgYWN0PWEuZGF0YXNldC5hY3Q7CiAgaWYoYWN0PT09J3N0YXJ0JykgdGltZXJTdGFydCgpOwogIGlmKGFjdD09PSdwYXVzZScpIHRpbWVyUGF1c2UoKTsKICBpZihhY3Q9PT0ncmVzdW1lJykgdGltZXJSZXN1bWUoKTsKICBpZihhY3Q9PT0nc3RvcCcpIHRpbWVyU3RvcCgpOwogIGlmKGFjdD09PSd0ZXN0Jyl7IGF1ZGlvVW5sb2NrKCk7IHN0cmlrZSgpIH0KICBpZihhY3Q9PT0ncmVjQWRkJyl7IHJlY0NhcHR1cmUoKTsgY29uc3QgbGFzdD1yZWNSb3dzW3JlY1Jvd3MubGVuZ3RoLTFdOyByZWNSb3dzLnB1c2goe2s6bGFzdD9sYXN0Lms6J3JlY3Vub3N0aW50YScsdDonJ30pOyByZW5kZXIoKTsgY29uc3QgaW5wPSQoJyNydF8nKyhyZWNSb3dzLmxlbmd0aC0xKSk7IGlucCYmaW5wLmZvY3VzKCkgfQogIGlmKGFjdD09PSdyZWNTYXZlJyl7IHJlY0NhcHR1cmUoKTsgY29uc3QgaXRlbXM9cmVjUm93cy5tYXAoeD0+KHtrOnguayx0OngudC50cmltKCl9KSkuZmlsdGVyKHg9PngudCk7CiAgICBpZighaXRlbXMubGVuZ3RoKXsgdG9hc3QodCgnd3JpdGVPbmUnKSk7IHJldHVybiB9CiAgICBhZGRFbnRyeSh7dHlwZToncmVjdW5vc3RpbnRlJyxpdGVtcyxkYXRlOm5ldyBEYXRlKCkudG9JU09TdHJpbmcoKX0pOyByZWNSb3dzPW51bGw7IGNvbnN0IG5pZD1EQVRBLmVudHJpZXNbREFUQS5lbnRyaWVzLmxlbmd0aC0xXS5pZDsgcmVuZGVyKCk7IHRvYXN0KHQoJ3NhdmVkSicpKTsgaWYoc2hhcmVOZXh0LnJlY3Vub3N0aW50ZSl7IHNoYXJlTmV4dC5yZWN1bm9zdGludGU9ZmFsc2U7IHJlbmRlcigpOyBvcGVuU2hhcmUobmlkKSB9IH0KICBpZihhY3Q9PT0nYnVjU2F2ZScpeyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1idWNdJykuZm9yRWFjaChlbD0+YnVjRHJhZnRbZWwuZGF0YXNldC5idWNdPWVsLnZhbHVlLnRyaW0oKSk7CiAgICBpZighUV9LRVlTLnNvbWUoaz0+YnVjRHJhZnRba10pKXsgdG9hc3QodCgnZmlsbEFuc3dlcnMnKSk7IHJldHVybiB9CiAgICBhZGRFbnRyeSh7dHlwZTonYnVjdXJpZScsLi4uYnVjRHJhZnQsZGF0ZTpuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9KTsgYnVjVmlldz1EQVRBLmVudHJpZXNbREFUQS5lbnRyaWVzLmxlbmd0aC0xXS5pZDsKICAgIGlmKGJ1Y1RvZG9BZGRlZCl7IGNvbnN0IGxhc3Q9REFUQS50b2Rvc1tEQVRBLnRvZG9zLmxlbmd0aC0xXTsgaWYobGFzdCYmIWxhc3QuZnJvbSl7IGxhc3QuZnJvbT1idWNWaWV3OyBwZXJzaXN0KCkgfSB9CiAgICBidWNEcmFmdD17fTsgYnVjVG9kb0FkZGVkPWZhbHNlOyByZW5kZXIoKTsgJCgnI21haW4nKS5zY3JvbGxUb3A9MDsgaWYoc2hhcmVOZXh0LmJ1Y3VyaWUpeyBzaGFyZU5leHQuYnVjdXJpZT1mYWxzZTsgb3BlblNoYXJlKGJ1Y1ZpZXcpIH0gfQogIGlmKGFjdD09PSdidWNUb2RvJyl7IGNvbnN0IHY9KCQoJyNiX2FqdXRvcicpLnZhbHVlfHwnJykudHJpbSgpOyBpZih2JiYhYnVjVG9kb0FkZGVkKXsgYWRkVG9kbyh2LCdidWN1cmllJyk7IGJ1Y1RvZG9BZGRlZD10cnVlOyBhLmRpc2FibGVkPXRydWU7IGEudGV4dENvbnRlbnQ9dCgnYWRkZWRUb2RvJyk7IHRvYXN0KHQoJ3RvYXN0QWRkZWQnKSkgfSB9CiAgaWYoYWN0PT09J2J1Y1RvZG9SZWNhcCcpeyBjb25zdCBlbj1EQVRBLmVudHJpZXMuZmluZCh4PT54LmlkPT09YS5kYXRhc2V0LmlkKTsgaWYoZW4peyBhZGRUb2RvKGVuLmFqdXRvciwnYnVjdXJpZScsZW4uaWQpOyByZW5kZXIoKTsgdG9hc3QodCgndG9hc3RBZGRlZCcpKSB9IH0KICBpZihhY3Q9PT0ndG9kb0FkZCcpeyBjb25zdCB2PSgkKCcjdG9kb05ldycpLnZhbHVlfHwnJykudHJpbSgpOyBpZih2KXsgYWRkVG9kbyh2LCdtYW51YWwnKTsgcmVuZGVyKCk7ICQoJyN0b2RvTmV3JykmJiQoJyN0b2RvTmV3JykuZm9jdXMoKSB9IH0KICBpZihhY3Q9PT0ndG9kb1RvZ2dsZURvbmUnKXsgdG9kb1Nob3dEb25lPSF0b2RvU2hvd0RvbmU7IHJlbmRlcigpIH0KICBpZihhY3Q9PT0nb2JqVG9nZ2xlJyl7IGlmKGEuY2xhc3NMaXN0LmNvbnRhaW5zKCdzaGVldC1iZycpICYmIGUudGFyZ2V0IT09YSkgcmV0dXJuOyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1idWNdJykuZm9yRWFjaChlbD0+YnVjRHJhZnRbZWwuZGF0YXNldC5idWNdPWVsLnZhbHVlKTsgb2JqT3Blbj0hb2JqT3BlbjsgcmVuZGVyKCk7IGlmKG9iak9wZW4peyBjb25zdCBzaT0kKCcjb2JqU2VhcmNoJyk7IHNpJiZzaS5mb2N1cygpIH0gfQogIGlmKGFjdD09PSdwU2F2ZScpeyBwQ2FwdHVyZSgpOyBjb25zdCBrZXlzPVsncDFlJywncDFhJywncDFiJywncDInLCdwMycsJ3A0J107CiAgICBpZigha2V5cy5zb21lKGs9PihwRHJhZnRba118fCcnKS50cmltKCkpKXsgdG9hc3QodCgnZmlsbFBvd2VycycpKTsgcmV0dXJuIH0KICAgIGNvbnN0IGU9e3R5cGU6J3B1dGVyaScsdjpwRHJhZnQudix6aTpwRHJhZnQueml8fCdhemknLHRlbWE6cERyYWZ0LnRlbWF8fCcnLGRhdGU6bmV3IERhdGUoKS50b0lTT1N0cmluZygpfTsga2V5cy5mb3JFYWNoKGs9PmVba109KHBEcmFmdFtrXXx8JycpLnRyaW0oKSk7IGlmKGUudj09PTIpIGUucDFhPScnOyBpZihlLnY9PT00KSBlLnAxYj0nJzsgaWYoZS52IT09MykgZS5wMWU9Jyc7CiAgICBhZGRFbnRyeShlKTsgcFZpZXc9REFUQS5lbnRyaWVzW0RBVEEuZW50cmllcy5sZW5ndGgtMV0uaWQ7CiAgICBpZihlLnA0KSBhZGRUb2RvKG5vTGVhZChlLnA0KSwncHV0ZXJpJyxwVmlldyxlLnppKTsKICAgIHBEcmFmdD17djoxLHppOidhemknfTsgcmVuZGVyKCk7ICQoJyNtYWluJykuc2Nyb2xsVG9wPTA7IGlmKHNoYXJlTmV4dC5wdXRlcmkpeyBzaGFyZU5leHQucHV0ZXJpPWZhbHNlOyBvcGVuU2hhcmUocFZpZXcpIH0gfQogIGlmKGFjdD09PSdwQ29weScpeyBjb25zdCBlbj1EQVRBLmVudHJpZXMuZmluZCh4PT54LmlkPT09YS5kYXRhc2V0LmlkKTsgaWYoZW4pIGNvcHlSaWNoKHB1dGVyaVRleHQoZW4pLHB1dGVyaUh0bWwoZW4pKSB9CiAgaWYoYWN0PT09J3BQZGYnKXsgdHJ5eyB3aW5kb3cucHJpbnQoKSB9Y2F0Y2goZXJyKXt9IH0KICBpZihhY3Q9PT0nZmlyc3ROYW1lJyl7IChhc3luYygpPT57IGlmKCEoYXdhaXQgc2V0TmFtZSgkKCcjZmlyc3ROYW1lJykudmFsdWUpKSkgcmV0dXJuOyByZW5kZXIoKTsgdG9hc3QodCgnd2VsY29tZScpKERBVEEuY29tbS5uYW1lKSkgfSkoKSB9CiAgaWYoYWN0PT09J25hbWVMYXRlcicpeyBuYW1lTGF0ZXI9dHJ1ZTsgcmVuZGVyKCkgfQogIGlmKGFjdD09PSduYW1lRWRpdCcgJiYgIWUudGFyZ2V0LmNsb3Nlc3QoJyNzaGFyZVNoZWV0JykpeyBzaGFyZU9wZW49J19fbmFtZSc7IG5hbWVEcmFmdD1EQVRBLmNvbW0ubmFtZXx8Jyc7IHJlbmRlclNoYXJlKCk7IGNvbnN0IGk9JCgnI2NvbW1OYW1lJyk7IGkmJmkuZm9jdXMoKTsgcmV0dXJuIH0KICBpZihhY3Q9PT0ndGVtZUFsbCcpeyBwQ2FwdHVyZSgpOyB0ZW1lQWxsPSF0ZW1lQWxsOyByZW5kZXIoKSB9CiAgaWYoYWN0PT09J3RlbWFBZGQnKXsgcENhcHR1cmUoKTsgY29uc3Qgdj0oJCgnI3RlbWFOb3VhJykudmFsdWV8fCcnKS50cmltKCk7IGlmKHYpeyBjb25zdCBiYXNlPVRFTUVfQkFaQS5maW5kKGI9Pm5vcm0odGVtYUxhYmVsKGIpKT09PW5vcm0odikpOyBjb25zdCB2YWw9YmFzZXx8djsgY29uc3QgTD1EQVRBLnNldHRpbmdzLnRlbWU9REFUQS5zZXR0aW5ncy50ZW1lfHxbXTsgaWYoIXRlbWVUb2F0ZSgpLmluY2x1ZGVzKHZhbCkpIEwucHVzaCh2YWwpOyBwRHJhZnQudGVtYT12YWw7IHBlcnNpc3QoKTsgcmVuZGVyKCkgfSB9CiAgaWYoYWN0PT09J2V4cE9wZW4nKXsgcENhcHR1cmUoKTsgcEV4cG9ydD10cnVlOyByZW5kZXIoKTsgJCgnI21haW4nKS5zY3JvbGxUb3A9MCB9CiAgaWYoYWN0PT09J2V4cENsb3NlJyl7IHBFeHBvcnQ9ZmFsc2U7IHJlbmRlcigpOyAkKCcjbWFpbicpLnNjcm9sbFRvcD0wIH0KICBpZihhY3Q9PT0nZXhwQ29weScpeyBjb25zdCBsPWV4cExpc3QoKTsgY29weVJpY2gobC5tYXAocHV0ZXJpVGV4dCkuam9pbignXG7igJQg4oCUIOKAlFxuXG4nKSwgbC5tYXAocHV0ZXJpSHRtbCkuam9pbignPGhyPicpKSB9CiAgaWYoYWN0PT09J3BOZXcnKXsgcFZpZXc9bnVsbDsgcmVuZGVyKCk7ICQoJyNtYWluJykuc2Nyb2xsVG9wPTAgfQogIGlmKGFjdD09PSdidWNOZXcnKXsgYnVjVmlldz1udWxsOyByZW5kZXIoKTsgJCgnI21haW4nKS5zY3JvbGxUb3A9MCB9CiAgaWYoYWN0PT09J2JyZWF0aGUnKSBicmVhdGhlKCk7CiAgaWYoYWN0PT09J3Jlc2V0Jyl7IFQucGhhc2U9J2lkbGUnOyByZW5kZXJQcmFjdGljYSgpIH0KICBpZihhY3Q9PT0nc2F2ZVRpdGxlJyl7IGNvbnN0IHg9REFUQS5lbnRyaWVzLmZpbmQoeT0+eS5pZD09PVQuc2F2ZWRJZCk7IGlmKHgpeyB4LnRpdGxlPSQoJyNkb25lVGl0bGUnKS52YWx1ZS50cmltKCk7IHBlcnNpc3QoKTsgdG9hc3QodCgnc2F2ZWRKJykpIH0gfQogIGlmKGFjdD09PSdzYXZlUGFydGlhbCcpeyBhZGRFbnRyeSh7dHlwZTpULmtpbmQsdGl0bGU6VC50aXRsZSxtaW51dGVzOlQuZG9uZU1pbixkYXRlOm5ldyBEYXRlKFQuc3RhcnRlZEF0KS50b0lTT1N0cmluZygpfSk7IFQucGhhc2U9J2lkbGUnOyByZW5kZXJQcmFjdGljYSgpOyB0b2FzdCh0KCdzYXZlZEonKSkgfQogIGlmKGFjdD09PSdtYW51YWwnKXsgbWFudWFsPXRydWU7IHJlbmRlclByYWN0aWNhKCkgfQogIGlmKGFjdD09PSdjYW5jZWxNYW51YWwnKXsgbWFudWFsPWZhbHNlOyByZW5kZXJQcmFjdGljYSgpIH0KICBpZihhY3Q9PT0nc2F2ZU1hbnVhbCcpewogICAgY29uc3QgbWluPURBVEEuc2V0dGluZ3MuZHVyOwogICAgY29uc3QgZHY9JCgnI21EYXRlJykudmFsdWV8fHRvZGF5S2V5KCk7IGNvbnN0IFt5LG1vLGRhXT1kdi5zcGxpdCgnLScpLm1hcChOdW1iZXIpOyBjb25zdCBub3c9bmV3IERhdGUoKTsKICAgIGNvbnN0IGR0ID0gZHY9PT10b2RheUtleSgpPyBub3cgOiBuZXcgRGF0ZSh5LG1vLTEsZGEsMTIsMCk7CiAgICBhZGRFbnRyeSh7dHlwZTpEQVRBLnNldHRpbmdzLmtpbmQsdGl0bGU6JCgnI21UaXRsZScpLnZhbHVlLnRyaW0oKSxtaW51dGVzOm1pbixkYXRlOmR0LnRvSVNPU3RyaW5nKCksbWFudWFsOnRydWV9KTsKICAgIG1hbnVhbD1mYWxzZTsgdGFiPSdqdXJuYWwnOyByZW5kZXIoKTsgdG9hc3QodCgnc2F2ZWRKJykpOwogIH0KfSk7CgokKCcjbWFpbicpLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JyxlPT57CiAgY29uc3QgZWw9ZS50YXJnZXQ7CiAgaWYoZWwudHlwZT09PSdyYW5nZScpewogICAgY29uc3Qgdj1OdW1iZXIoZWwudmFsdWUpLCBrZXk9ZWwuaWQ9PT0nZHVyUic\/J2R1cic6J3ByZXAnOwogICAgREFUQS5zZXR0aW5nc1trZXldPXY7IGVsLnN0eWxlLnNldFByb3BlcnR5KCctLWZpbGwnLCgodi1lbC5taW4pLyhlbC5tYXgtZWwubWluKSkqMTAwKyclJyk7CiAgICAkKCcjJytlbC5pZCsnT3V0JykudGV4dENvbnRlbnQgPSBrZXk9PT0nZHVyJz9kdXJMYWJlbCh2KTpwcmVwTGFiZWwodik7CiAgICBpZiAoVC5waGFzZT09PSdpZGxlJykgcGFpbnREaWFsKCk7CiAgICByZXR1cm47CiAgfQogIGNvbnN0IGs9ZWwuZGF0YXNldCYmZWwuZGF0YXNldC5idWM7IGlmKGspeyBidWNEcmFmdFtrXT1lbC52YWx1ZTsKICAgIGlmKGs9PT0nYWp1dG9yJyl7IGNvbnN0IGI9JCgnI3RvZG9CdG4nKTsgaWYoYil7IGIuaGlkZGVuPSFlbC52YWx1ZS50cmltKCk7IGlmKGJ1Y1RvZG9BZGRlZCl7IGJ1Y1RvZG9BZGRlZD1mYWxzZTsgYi5kaXNhYmxlZD1mYWxzZTsgYi50ZXh0Q29udGVudD10KCdhZGRUb2RvJykgfSB9IH0gfQogIGlmKGVsLmlkPT09J29ialNlYXJjaCcpeyBvYmpRdWVyeT1lbC52YWx1ZTsgY29uc3QgbD0kKCcjb2JqTGlzdCcpOyBpZihsKSBsLmlubmVySFRNTD1vYmpJdGVtcygpIH0KICBpZihlbC5kYXRhc2V0ICYmIGVsLmRhdGFzZXQucGYpeyBwRHJhZnRbZWwuZGF0YXNldC5wZl09ZWwudmFsdWUgfQp9KTsKJCgnI21haW4nKS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyxlPT57CiAgaWYoZS5rZXkhPT0nRW50ZXInIHx8IGUuaXNDb21wb3NpbmcpIHJldHVybjsKICBpZihlLnRhcmdldC5kYXRhc2V0ICYmIGUudGFyZ2V0LmRhdGFzZXQucnQhPT11bmRlZmluZWQpeyBlLnByZXZlbnREZWZhdWx0KCk7IGNvbnN0IGk9K2UudGFyZ2V0LmRhdGFzZXQucnQ7IHJlY0NhcHR1cmUoKTsKICAgIGlmKGk9PT1yZWNSb3dzLmxlbmd0aC0xKXsgcmVjUm93cy5wdXNoKHtrOnJlY1Jvd3NbaV0uayx0OicnfSk7IHJlbmRlcigpIH0gY29uc3Qgbj0kKCcjcnRfJysoaSsxKSk7IG4mJm4uZm9jdXMoKTsgfQogIGlmKGUudGFyZ2V0LmlkPT09J2ZpcnN0TmFtZScpeyBlLnByZXZlbnREZWZhdWx0KCk7IGNvbnN0IGI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtYWN0PSJmaXJzdE5hbWUiXScpOyBiJiZiLmNsaWNrKCk7IHJldHVybiB9CiAgaWYoZS50YXJnZXQuaWQ9PT0ndGVtYU5vdWEnKXsgZS5wcmV2ZW50RGVmYXVsdCgpOyBjb25zdCBiPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWFjdD0idGVtYUFkZCJdJyk7IGImJmIuY2xpY2soKTsgcmV0dXJuIH0KICBpZihlLnRhcmdldC5pZD09PSd0b2RvTmV3Jyl7IGUucHJldmVudERlZmF1bHQoKTsgY29uc3Qgdj1lLnRhcmdldC52YWx1ZS50cmltKCk7IGlmKHYpeyBhZGRUb2RvKHYsJ21hbnVhbCcpOyByZW5kZXIoKTsgJCgnI3RvZG9OZXcnKS5mb2N1cygpIH0gfQp9KTsKJCgnI21haW4nKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLGU9PnsgaWYoZS50YXJnZXQuaWQ9PT0nZXhwRnJvbSd8fGUudGFyZ2V0LmlkPT09J2V4cFRvJyl7IGlmKGUudGFyZ2V0LmlkPT09J2V4cEZyb20nKSBleHBGcm9tPWUudGFyZ2V0LnZhbHVlfHxleHBGcm9tOyBlbHNlIGV4cFRvPWUudGFyZ2V0LnZhbHVlfHxleHBUbzsgaWYoZXhwRnJvbT5leHBUbyl7IGNvbnN0IHg9ZXhwRnJvbTsgZXhwRnJvbT1leHBUbzsgZXhwVG89eCB9IHJlbmRlcigpOyByZXR1cm4gfSBpZihlLnRhcmdldC50eXBlPT09J3JhbmdlJykgcGVyc2lzdCgpIH0pOwooYXN5bmMoKT0+ewogIHRyeXsgY29uc3QgZD1hd2FpdCBTdG9yZS5sb2FkKCk7IGlmKGQpeyBEQVRBPXsuLi5EQVRBLC4uLmQsdG9kb3M6ZC50b2Rvc3x8W10sY29tbTp7Li4uREFUQS5jb21tLC4uLihkLmNvbW18fHt9KX0sc2V0dGluZ3M6ey4uLkRBVEEuc2V0dGluZ3MsLi4uKGQuc2V0dGluZ3N8fHt9KX19IH0gfWNhdGNoKGUpeyB0b2FzdCh0KCdsb2FkRmFpbCcpKSB9CiAgREFUQS5zZXR0aW5ncy5kdXI9TWF0aC5taW4oNjAsTWF0aC5tYXgoMixNYXRoLnJvdW5kKERBVEEuc2V0dGluZ3MuZHVyfHwxMCkpKTsKICBEQVRBLnNldHRpbmdzLnByZXA9TWF0aC5taW4oMTgwLE1hdGgubWF4KDAsTWF0aC5yb3VuZCgoREFUQS5zZXR0aW5ncy5wcmVwfHwwKS81KSo1KSk7CiAgaWYoIURBVEEuc2V0dGluZ3MubGFuZykgREFUQS5zZXR0aW5ncy5sYW5nPWd1ZXNzTGFuZygpOwogIHJlbmRlcigpOyBjb21tTG9hZCgpOyBzdWJMb2FkKCk7CiAgaWYoIURBVEEuc2V0dGluZ3MuaW50cm9TZWVuKXsgb3Y9J2ludHJvJzsgb3ZJZHg9MDsgcmVuZGVyT3ZlcmxheSgpIH0KfSkoKTsK\");var u=new Uint8Array(b.length);for(var i=0;i<b.length;i++){u[i]=b.charCodeAt(i);}(new Function(new TextDecoder(\"utf-8\").decode(u)))();})();<\/script><script>document.addEventListener('click',function(e){if(e.target.closest&&e.target.closest('#nav button,[data-go],[data-openbuc],[data-openput],[data-act=\"pSave\"],[data-act=\"bucSave\"],[data-act=\"pNew\"],[data-act=\"bucNew\"]')){setTimeout(function(){window.scrollTo(0,0)},0)}},true);<\/script>","protected":false},"excerpt":{"rendered":"<p>Good Seeds Dorela Iepan Good Seeds EN My courses<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"pmpro_default_level":"","footnotes":""},"class_list":["post-9446","page","type-page","status-publish","hentry","pmpro-has-access"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/dorelaiepan.com\/fr\/wp-json\/wp\/v2\/pages\/9446","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dorelaiepan.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/dorelaiepan.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/dorelaiepan.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dorelaiepan.com\/fr\/wp-json\/wp\/v2\/comments?post=9446"}],"version-history":[{"count":6,"href":"https:\/\/dorelaiepan.com\/fr\/wp-json\/wp\/v2\/pages\/9446\/revisions"}],"predecessor-version":[{"id":9700,"href":"https:\/\/dorelaiepan.com\/fr\/wp-json\/wp\/v2\/pages\/9446\/revisions\/9700"}],"wp:attachment":[{"href":"https:\/\/dorelaiepan.com\/fr\/wp-json\/wp\/v2\/media?parent=9446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}