@mattilsynet/design 2.1.11 → 2.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/mtds/app/app-observer.js +1 -1
- package/mtds/app/app-toggle.js +26 -10
- package/mtds/app/app-toggle.js.map +1 -1
- package/mtds/app/app-toggle2.js +10 -26
- package/mtds/app/app-toggle2.js.map +1 -1
- package/mtds/app/app.js +1 -1
- package/mtds/chart/chart-axis.d.ts +1 -0
- package/mtds/chart/chart-doughnut.d.ts +1 -0
- package/mtds/chart/chart-element.d.ts +19 -0
- package/mtds/field/field.d.ts +2 -0
- package/mtds/field/field.js +78 -73
- package/mtds/field/field.js.map +1 -1
- package/mtds/index.iife.js +3 -3
- package/mtds/package.json.js +1 -1
- package/mtds/styles.css +1 -1
- package/mtds/styles.json +40 -40
- package/mtds/styles.module.css.js +29 -29
- package/mtds/table/table.js +14 -6
- package/mtds/table/table.js.map +1 -1
- package/mtds/table/table.stories.d.ts +3 -0
- package/mtds/tooltip/tooltip-observer.js +8 -8
- package/mtds/tooltip/tooltip-observer.js.map +1 -1
- package/mtds/utils.d.ts +7 -0
- package/mtds/utils.js.map +1 -1
- package/package.json +1 -1
package/mtds/index.iife.js
CHANGED
|
@@ -5,7 +5,7 @@ var mtds=function(O){"use strict";var Pi=Object.defineProperty,en=Object.getOwnP
|
|
|
5
5
|
::slotted(del) { text-decoration: none }
|
|
6
6
|
::slotted(data:not([hidden])) { display: inline-block; pointer-events: none }
|
|
7
7
|
::slotted(data)::after { content: '\\00D7'; content: '\\00D7' / ''; padding-inline: .5ch; pointer-events: auto; cursor: pointer }
|
|
8
|
-
::slotted(data:focus) { ${Vi} }`,cn="beforeinput,blur,focus,click,input,keydown,mousedown",dn={once:!0,passive:!0},Ji=Fi&&!on,Zi=on||Ui,un="".repeat(5),Dt="false",Pt={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},me=class extends qi{constructor(){super(),this._item="",this._speak="",this._texts=Bi({},Pt),this._value="",this.shadowRoot||this.attachShadow({mode:"open"}).append(Rt("slot"),Rt("style",Qi))}static get observedAttributes(){return Object.keys(Pt).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=ji(this),Ot(this,cn,this,!0),de(this,{attributeFilter:["value","id"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(Nt,0,this),setTimeout(Ht,0,this)}attributeChangedCallback(t,e,n){const o=t.split("data-sr-")[1];Pt[o]&&(this._texts[o]=n||Pt[o])}disconnectedCallback(){de(this,!1),Wi(this,cn,this,!0),this._items=this._clear=this._focus=this._control=void 0,this._list=this._options=this._root=void 0}handleEvent(t){const e=t.target;ge(this)||(t.type==="beforeinput"&&(this._value=e?.value||""),t.type==="blur"&&es(this),t.type==="click"&&os(this,t),t.type==="focus"&&ts(this,t),t.type==="input"&&is(this,t),t.type==="keydown"&&ss(this,t),t.type==="mousedown"&&pe(t),t.type==="mutation"&&Nt(this,t))}get multiple(){var t;return((t=_(this,"data-multiple"))!=null?t:Dt)!==Dt}set multiple(t){_(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=_(this,"data-creatable"))!=null?t:Dt)!==Dt}set creatable(t){_(this,"data-creatable",t?"":null)}get control(){var t;return(t=this._control)!=null&&t.isConnected||(this._control=this.querySelector("input")),this._control}get list(){var t;return(t=this._list)!=null&&t.isConnected||(this._list=this.querySelector("u-datalist,datalist")),this._list}get clear(){var t;return(t=this._clear)!=null&&t.isConnected||(this._clear=this.querySelector("del")),this._clear}get items(){return this._items||(this._items=this.getElementsByTagName("data")),this._items}get options(){var t,e;if(!this._options){const n=((t=this.list)==null?void 0:t.nodeName)==="U-DATALIST"?"u-option":"option";this._options=(e=this.list)==null?void 0:e.getElementsByTagName(n)}return this._options}get values(){return[...this.items].map(({value:t})=>t)}},tt=t=>{var e;return((e=t?.textContent)==null?void 0:e.trim())||""},he=t=>t instanceof HTMLDataElement,ge=({control:t})=>t?.disabled||t?.readOnly||!1,Nt=(t,e)=>{var n;const{_focus:o,_texts:i,items:s,control:r,list:a,multiple:c}=t;if(!r||!a)return;const l=Xi(r),d=l.endsWith(un)?_(r,"data-label"):l;_(r,"data-label",d);let u=`${d}${c?`, ${s.length?i.found.replace("%d",`${s.length}`):i.empty}`:""}`;const p=[];for(const{addedNodes:g,removedNodes:E}of e?.detail||[]){for(const w of g)he(w)&&p.unshift(w);for(const w of E)he(w)&&p.push(w)}const f=c?p.length===1:p[0]===o;if(o&&f){const g=_(r,"aria-expanded"),E=_(r,"inputmode"),w=he(o)?r:o,S=!p[0].isConnected;t._speak=`${i[S?"removed":"added"]} ${tt(p[0])}, `,(Zi||o===r)&&ue(t._speak),r!==w&&(_(r,"aria-expanded",null),_(r,"inputmode","none"),u=" ",r.focus()),setTimeout(()=>{var D;_(r,"aria-expanded",g),_(r,"inputmode",S?"none":E),(D=w?.focus)==null||D.call(w),_(r,"inputmode",E),t._speak="",Ji?Ot(t,"blur",()=>Nt(t),dn):setTimeout(Nt,100,t)},100)}let b=0;const h=t.querySelector("select"),y=ge(t)?"":`${i.remove}, `;for(const g of s){const E=h?.options[b],w=tt(g),S=g.value||w,D=`${t._speak}${w}, ${y}${++b} ${i.of} ${s.length}`;_(g,"role","button"),_(g,"value",S),_(g,"tabindex","-1"),_(g,"aria-label",D),E?Object.assign(E,{textContent:w,value:S}):h?.appendChild(new Option(w,S,!0,!0))}h&&_(h,"multiple",c?"":null);for(const g of[...h?.options||[]].slice(b))g.remove();!c&&b>1&&console.warn("u-combobox: Multiple <data> found in single mode."),_(a,"aria-multiselectable",`${c}`),_(r,"list",an(a)),_(r,"aria-label",`${t._speak}${u}${un}`),a.hasAttribute("popover")&&(_(r,"popovertarget",an(a)),_(a,"popover","manual"));const v=tt(s[0]);v!==t._item&&Ht(t),t._item=v,fn(t),pn(t),(n=de(t))==null||n.takeRecords()},fn=t=>{var e;t.clear&&_(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value)||ge(t))},pn=t=>{var e;const{_speak:n,options:o=[],values:i}=t;for(const s of o){const r=(e=_(s,"value"))!=null?e:tt(s);_(s,"aria-label",n?`${n}${tt(s)}`:null),_(s,"selected",i.includes(r)?"":null)}},Ht=t=>{const{multiple:e,control:n,items:o}=t,i=tt(o[0]);!e&&n&&i!==n.value&&ln(n,i,i?"insertText":"deleteContent")},be=(t,e=!0)=>{var n;const{_texts:o,options:i=[],creatable:s,control:r,items:a,multiple:c}=t,l=((n=r?.value)==null?void 0:n.trim())||"",d=l.toLowerCase()||null;let u=[...i].find(f=>(_(f,"label")||tt(f)).trim().toLowerCase()===d);const p={bubbles:!0,cancelable:!0,detail:u};if(t.dispatchEvent(new CustomEvent("comboboxbeforematch",p))||(u=[...i].find(f=>f.selected)),e)return pn(t),u?dt(t,u,!1):s&&l?dt(t,{value:l},!1):(!c&&!l&&a[0]?dt(t,a[0]):Ht(t),ue(o.invalid));for(const f of i)f.selected=f===u},dt=(t,e,n=!0)=>{const{control:o,items:i,multiple:s}=t,r=Rt("data",e.label||e.value,{value:e.value}),a=[...i].find(d=>d.value===e.value),c={bubbles:!0,cancelable:!0,detail:a||r};if(a&&!n)return Ht(t);if(t.dispatchEvent(new CustomEvent("comboboxbeforeselect",c))){if(!s)for(const d of[...i])d.remove();a?a.remove():o?.insertAdjacentElement("beforebegin",r),t.dispatchEvent(new CustomEvent("comboboxafterselect",c))}},ts=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),ue()},es=t=>pe()||setTimeout(ns,0,t),ns=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t.multiple||be(t),t._focus=void 0)},os=(t,e)=>{const{clientX:n,clientY:o,target:i}=e,{clear:s,control:r,items:a}=t;if(s?.contains(i))return r&&ln(r,"","deleteContentBackward"),r?.focus();for(const c of a){const{top:l,right:d,bottom:u,left:p}=c.getBoundingClientRect();if(c.contains(i))return dt(t,c);if(o>=l&&o<=u&&n>=p&&n<=d)return c.focus()}i===t&&r?.focus()},is=(t,e)=>{var n;const{options:o=[],control:i,multiple:s}=t,r=((n=i?.value)==null?void 0:n.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType==="insertReplacementText":!!r){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const c of o)if(c.value&&c.value===r)return dt(t,c,s)}else s||be(t,!1);fn(t)},ss=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const{clear:o,control:i,items:s}=t,{key:r,repeat:a,target:c}=e,l=i&&i===c,d=l&&i?.selectionEnd;let u=l?s.length:[...s].indexOf(c);if(l&&r==="Tab"&&o&&!o.hidden&&(e.preventDefault(),o.tabIndex=-1,o.focus(),Ot(o,"blur",()=>_(o,"tabindex",null),dn)),!(!l&&zi(e)||u===-1)){if(r==="ArrowRight"&&!l)u+=1;else if(r==="ArrowLeft"&&!d)u-=1;else if(r==="Enter"&&l){const p=_(i,"form");return _(i,"form","#"),requestAnimationFrame(()=>_(i,"form",p)),be(t)}else if((r==="Backspace"||r==="Delete")&&!d){if(e.preventDefault(),!a&&s[u])return dt(t,s[u]);l&&(u-=1)}else return l||i?.focus();e.preventDefault(),(n=s[Math.max(0,u)]||i)==null||n.focus()}};Yi.define("u-combobox",me);var ve=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",rs=ve&&/android/i.test(navigator.userAgent),mn;ve&&/^Mac/i.test(((mn=navigator.userAgentData)==null?void 0:mn.platform)||navigator.platform);var as=`${rs?"data":"aria"}-labelledby`,_e=":host(:not([hidden])) { display: block }",Bt=typeof HTMLElement>"u"?class{}:HTMLElement;function $(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var hn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},ls=(t,...e)=>hn("add",t,e),cs=(t,...e)=>hn("remove",t,e),Ft=(t,e)=>t.shadowRoot||t.attachShadow({mode:"open"}).append(_n("slot"),_n("style",e)),Ut=new WeakMap,gn=(t,e)=>{if(e===void 0)return Ut.get(t);try{Ut.get(t).disconnect(),Ut.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),Ut.set(t,n)}},ds=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},bn=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},us=0,vn=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++us).toString(32)}`),t.id):"",_n=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},Vt={define:(t,e)=>!ve||window.customElements.get(t)||window.customElements.define(t,e)},fs=_e,ps=_e,ms=_e,hs=':host(:not([hidden])) { display: inline-block; cursor: pointer }:host([aria-disabled="true"]) { cursor: default }',qt="aria-controls",ut="aria-selected",yn=class extends Bt{constructor(){super(),Ft(this,fs)}get tabList(){return Wt("u-tablist",this)[0]||null}get selectedIndex(){return zt(this.tabs)}set selectedIndex(t){Ee(this.tabs[t])}get tabs(){return Wt("u-tab",this)}get panels(){return Wt("u-tabpanel",this)}},wn=class extends Bt{constructor(){super(),Ft(this,ps)}connectedCallback(){$(this,"role","tablist"),ls(this,"click,keydown",this),gn(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){cs(this,"click,keydown",this),gn(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s?.setAttribute(ut,"true")}const{key:e}=t,n=[...this.tabs],o=n.findIndex(s=>s.contains(t.target));let i=o;if(!(t.defaultPrevented||o===-1)&&(t.type==="click"&&Ee(n[o]),t.type==="keydown"&&!ds(t))){if(e==="ArrowDown"||e==="ArrowRight")i=(o+1)%n.length;else if(e==="ArrowUp"||e==="ArrowLeft")i=(o||n.length)-1;else if(e==="End")i=n.length-1;else if(e==="Home")i=0;else if(e==="Tab")i=zt(n);else return;setTimeout(()=>{n[o].tabIndex=-1,n[i].tabIndex=0}),e!=="Tab"&&(t.preventDefault(),n[i].focus())}}get tabsElement(){return this.closest("u-tabs")}get tabs(){return this.querySelectorAll("u-tab")}get selectedIndex(){return zt(this.tabs)}set selectedIndex(t){Ee(this.tabs[t])}},ye=!1,En=class extends Bt{static get observedAttributes(){return["id",ut,qt]}constructor(){super(),Ft(this,hs)}connectedCallback(){$(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!ye&&this.selected&&this.tabList){ye=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=Wt("u-tabpanel",this.tabsElement||this),n=we(this,e[t.indexOf(this)]);n&&$(n,as,vn(this)),t.forEach((o,i)=>{const s=we(o,e[i]);o.tabIndex=o===this?0:-1,$(o,ut,`${o===this}`),$(o,qt,s?.id||null),s&&(s.hidden=s!==n)}),ye=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return t?.nodeName==="U-TABLIST"?t:null}get selected(){return $(this,ut)==="true"}set selected(t){$(this,ut,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return we(this)}},xn=class extends Bt{static get observedAttributes(){return["hidden"]}constructor(){super(),Ft(this,ms)}connectedCallback(){$(this,"role","tabpanel"),this.hidden=zt(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){const t=this.hidden;$(this,"aria-hidden",`${t}`),$(this,"tabindex",t||gs(this.firstChild)?null:"0")}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${qt}="${this.id}"]`;return bn(this).querySelectorAll(t)}},Wt=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),we=(t,e)=>{const n=$(t,qt)||vn(e),o=bn(t).getElementById(n);return o?.nodeName==="U-TABPANEL"?o:null},zt=t=>[...t].findIndex(e=>$(e,ut)==="true"),Ee=t=>t&&$(t,"aria-disabled")!=="true"&&$(t,"aria-selected","true"),gs=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');Vt.define("u-tabs",yn),Vt.define("u-tablist",wn),Vt.define("u-tab",En),Vt.define("u-tabpanel",xn);const bs="2.1.11",Sn="_alert_1run0_1 _ds-alert_alzsp_1",Tn="_app_1run0_1",Cn="_sticky_1run0_1",$n="_avatar_1run0_1 _ds-avatar_alzsp_1",An="_badge_1run0_1",kn="_breadcrumbs_1run0_1 _ds-breadcrumbs_alzsp_1",Ln="_button_1run0_1 _ds-button_alzsp_1",In="_card_1run0_1",On="_group_1run0_1",Mn="_chip_1run0_1 _ds-chip_alzsp_1",Rn="_details_1run0_1 _ds-details_alzsp_1",Dn="_dialog_1run0_1 _ds-dialog_alzsp_1",Pn="__drawer_1run0_1",Nn="_divider_1run0_1",Hn="_errorsummary_1run0_1 _ds-error-summary_alzsp_1",Bn="__errorsummary_1run0_1",Fn="_field_1run0_1 _ds-field_alzsp_1",Un="__datalist_1run0_1",Vn="_affixes_1run0_1 _ds-field-affixes_alzsp_1",qn="_fieldset_1run0_1 _ds-fieldset_alzsp_1",Wn="_heading_1run0_1 _ds-heading_alzsp_1",zn="_ingress_1run0_1",jn="_muted_1run0_1",Kn="_info_1run0_1",Yn="_prose_1run0_1",Xn="_helptext_1run0_1 _ds-focus_alzsp_1",Gn="_input_1run0_1 _ds-input_alzsp_1",Qn="_grid_1run0_1",Jn="_flex_1run0_1",Zn="_link_1run0_1",to="_logo_1run0_1",eo="_pagination_1run0_1 _ds-pagination_alzsp_1",no="_popover_1run0_1",oo="_progress_1run0_1",io="__indeterminate_1run0_1",so="_skeleton_1run0_1 _ds-skeleton_alzsp_1",ro="__skeleton_1run0_1",ao="_spinner_1run0_1",lo="_steps_1run0_1",co="_table_1run0_1 _ds-table_alzsp_1",uo="__scrollShadow_1run0_1",fo="_tabs_1run0_1 _ds-tabs_alzsp_1",po="__scrollMask_1run0_1",mo="_tag_1run0_1 _ds-tag_alzsp_1",ho="_togglegroup_1run0_1",go="__tooltip_1run0_1",bo="_validation_1run0_1 _ds-validation-message_alzsp_1",vo="_body_1run0_153",_o="__checked_1run0_1",T={alert:Sn,app:Tn,sticky:Cn,avatar:$n,badge:An,breadcrumbs:kn,button:Ln,card:In,group:On,chip:Mn,details:Rn,dialog:Dn,_drawer:Pn,divider:Nn,errorsummary:Hn,_errorsummary:Bn,field:Fn,_datalist:Un,affixes:Vn,fieldset:qn,heading:Wn,ingress:zn,muted:jn,info:Kn,prose:Yn,helptext:Xn,input:Gn,grid:Qn,flex:Jn,link:Zn,logo:to,pagination:eo,popover:no,progress:oo,_indeterminate:io,skeleton:so,_skeleton:ro,spinner:ao,steps:lo,table:co,_scrollShadow:uo,tabs:fo,_scrollMask:po,tag:mo,togglegroup:ho,_tooltip:go,validation:bo,body:vo,_checked:_o},vs=Object.freeze(Object.defineProperty({__proto__:null,_checked:_o,_datalist:Un,_drawer:Pn,_errorsummary:Bn,_indeterminate:io,_scrollMask:po,_scrollShadow:uo,_skeleton:ro,_tooltip:go,affixes:Vn,alert:Sn,app:Tn,avatar:$n,badge:An,body:vo,breadcrumbs:kn,button:Ln,card:In,chip:Mn,default:T,details:Rn,dialog:Dn,divider:Nn,errorsummary:Hn,field:Fn,fieldset:qn,flex:Jn,grid:Qn,group:On,heading:Wn,helptext:Xn,info:Kn,ingress:zn,input:Gn,link:Zn,logo:to,muted:jn,pagination:eo,popover:no,progress:oo,prose:Yn,skeleton:so,spinner:ao,steps:lo,sticky:Cn,table:co,tabs:fo,tag:mo,togglegroup:ho,validation:bo},Symbol.toStringTag,{value:"Module"})),ft=Math.min,L=Math.max,jt=Math.round,Kt=Math.floor,V=t=>({x:t,y:t}),_s={left:"right",right:"left",bottom:"top",top:"bottom"},ys={start:"end",end:"start"};function yo(t,e,n){return L(t,ft(e,n))}function Yt(t,e){return typeof t=="function"?t(e):t}function et(t){return t.split("-")[0]}function Xt(t){return t.split("-")[1]}function wo(t){return t==="x"?"y":"x"}function Eo(t){return t==="y"?"height":"width"}const ws=new Set(["top","bottom"]);function Y(t){return ws.has(et(t))?"y":"x"}function xo(t){return wo(Y(t))}function Es(t,e,n){n===void 0&&(n=!1);const o=Xt(t),i=xo(t),s=Eo(i);let r=i==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return e.reference[s]>e.floating[s]&&(r=Gt(r)),[r,Gt(r)]}function xs(t){const e=Gt(t);return[xe(t),e,xe(e)]}function xe(t){return t.replace(/start|end/g,e=>ys[e])}const So=["left","right"],To=["right","left"],Ss=["top","bottom"],Ts=["bottom","top"];function Cs(t,e,n){switch(t){case"top":case"bottom":return n?e?To:So:e?So:To;case"left":case"right":return e?Ss:Ts;default:return[]}}function $s(t,e,n,o){const i=Xt(t);let s=Cs(et(t),n==="start",o);return i&&(s=s.map(r=>r+"-"+i),e&&(s=s.concat(s.map(xe)))),s}function Gt(t){return t.replace(/left|right|bottom|top/g,e=>_s[e])}function As(t){return{top:0,right:0,bottom:0,left:0,...t}}function ks(t){return typeof t!="number"?As(t):{top:t,right:t,bottom:t,left:t}}function Qt(t){const{x:e,y:n,width:o,height:i}=t;return{width:o,height:i,top:n,left:e,right:e+o,bottom:n+i,x:e,y:n}}function Co(t,e,n){let{reference:o,floating:i}=t;const s=Y(e),r=xo(e),a=Eo(r),c=et(e),l=s==="y",d=o.x+o.width/2-i.width/2,u=o.y+o.height/2-i.height/2,p=o[a]/2-i[a]/2;let f;switch(c){case"top":f={x:d,y:o.y-i.height};break;case"bottom":f={x:d,y:o.y+o.height};break;case"right":f={x:o.x+o.width,y:u};break;case"left":f={x:o.x-i.width,y:u};break;default:f={x:o.x,y:o.y}}switch(Xt(e)){case"start":f[r]-=p*(n&&l?-1:1);break;case"end":f[r]+=p*(n&&l?-1:1);break}return f}const Ls=async(t,e,n)=>{const{placement:o="bottom",strategy:i="absolute",middleware:s=[],platform:r}=n,a=s.filter(Boolean),c=await(r.isRTL==null?void 0:r.isRTL(e));let l=await r.getElementRects({reference:t,floating:e,strategy:i}),{x:d,y:u}=Co(l,o,c),p=o,f={},b=0;for(let h=0;h<a.length;h++){const{name:y,fn:v}=a[h],{x:g,y:E,data:w,reset:S}=await v({x:d,y:u,initialPlacement:o,placement:p,strategy:i,middlewareData:f,rects:l,platform:r,elements:{reference:t,floating:e}});d=g??d,u=E??u,f={...f,[y]:{...f[y],...w}},S&&b<=50&&(b++,typeof S=="object"&&(S.placement&&(p=S.placement),S.rects&&(l=S.rects===!0?await r.getElementRects({reference:t,floating:e,strategy:i}):S.rects),{x:d,y:u}=Co(l,p,c)),h=-1)}return{x:d,y:u,placement:p,strategy:i,middlewareData:f}};async function Se(t,e){var n;e===void 0&&(e={});const{x:o,y:i,platform:s,rects:r,elements:a,strategy:c}=t,{boundary:l="clippingAncestors",rootBoundary:d="viewport",elementContext:u="floating",altBoundary:p=!1,padding:f=0}=Yt(e,t),b=ks(f),y=a[p?u==="floating"?"reference":"floating":u],v=Qt(await s.getClippingRect({element:(n=await(s.isElement==null?void 0:s.isElement(y)))==null||n?y:y.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(a.floating)),boundary:l,rootBoundary:d,strategy:c})),g=u==="floating"?{x:o,y:i,width:r.floating.width,height:r.floating.height}:r.reference,E=await(s.getOffsetParent==null?void 0:s.getOffsetParent(a.floating)),w=await(s.isElement==null?void 0:s.isElement(E))?await(s.getScale==null?void 0:s.getScale(E))||{x:1,y:1}:{x:1,y:1},S=Qt(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:a,rect:g,offsetParent:E,strategy:c}):g);return{top:(v.top-S.top+b.top)/w.y,bottom:(S.bottom-v.bottom+b.bottom)/w.y,left:(v.left-S.left+b.left)/w.x,right:(S.right-v.right+b.right)/w.x}}const Is=function(t){return t===void 0&&(t={}),{name:"flip",options:t,async fn(e){var n,o;const{placement:i,middlewareData:s,rects:r,initialPlacement:a,platform:c,elements:l}=e,{mainAxis:d=!0,crossAxis:u=!0,fallbackPlacements:p,fallbackStrategy:f="bestFit",fallbackAxisSideDirection:b="none",flipAlignment:h=!0,...y}=Yt(t,e);if((n=s.arrow)!=null&&n.alignmentOffset)return{};const v=et(i),g=Y(a),E=et(a)===a,w=await(c.isRTL==null?void 0:c.isRTL(l.floating)),S=p||(E||!h?[Gt(a)]:xs(a)),D=b!=="none";!p&&D&&S.push(...$s(a,h,b,w));const z=[a,...S],rt=await Se(e,y),at=[];let K=((o=s.flip)==null?void 0:o.overflows)||[];if(d&&at.push(rt[v]),u){const lt=Es(i,r,w);at.push(rt[lt[0]],rt[lt[1]])}if(K=[...K,{placement:i,overflows:at}],!at.every(lt=>lt<=0)){var At,kt;const lt=(((At=s.flip)==null?void 0:At.index)||0)+1,tn=z[lt];if(tn&&(!(u==="alignment"?g!==Y(tn):!1)||K.every(U=>Y(U.placement)===g?U.overflows[0]>0:!0)))return{data:{index:lt,overflows:K},reset:{placement:tn}};let It=(kt=K.filter(ct=>ct.overflows[0]<=0).sort((ct,U)=>ct.overflows[1]-U.overflows[1])[0])==null?void 0:kt.placement;if(!It)switch(f){case"bestFit":{var Lt;const ct=(Lt=K.filter(U=>{if(D){const J=Y(U.placement);return J===g||J==="y"}return!0}).map(U=>[U.placement,U.overflows.filter(J=>J>0).reduce((J,Da)=>J+Da,0)]).sort((U,J)=>U[1]-J[1])[0])==null?void 0:Lt[0];ct&&(It=ct);break}case"initialPlacement":It=a;break}if(i!==It)return{reset:{placement:It}}}return{}}}},Os=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){const{x:n,y:o,placement:i}=e,{mainAxis:s=!0,crossAxis:r=!1,limiter:a={fn:y=>{let{x:v,y:g}=y;return{x:v,y:g}}},...c}=Yt(t,e),l={x:n,y:o},d=await Se(e,c),u=Y(et(i)),p=wo(u);let f=l[p],b=l[u];if(s){const y=p==="y"?"top":"left",v=p==="y"?"bottom":"right",g=f+d[y],E=f-d[v];f=yo(g,f,E)}if(r){const y=u==="y"?"top":"left",v=u==="y"?"bottom":"right",g=b+d[y],E=b-d[v];b=yo(g,b,E)}const h=a.fn({...e,[p]:f,[u]:b});return{...h,data:{x:h.x-n,y:h.y-o,enabled:{[p]:s,[u]:r}}}}}},Ms=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){var n,o;const{placement:i,rects:s,platform:r,elements:a}=e,{apply:c=()=>{},...l}=Yt(t,e),d=await Se(e,l),u=et(i),p=Xt(i),f=Y(i)==="y",{width:b,height:h}=s.floating;let y,v;u==="top"||u==="bottom"?(y=u,v=p===(await(r.isRTL==null?void 0:r.isRTL(a.floating))?"start":"end")?"left":"right"):(v=u,y=p==="end"?"top":"bottom");const g=h-d.top-d.bottom,E=b-d.left-d.right,w=ft(h-d[y],g),S=ft(b-d[v],E),D=!e.middlewareData.shift;let z=w,rt=S;if((n=e.middlewareData.shift)!=null&&n.enabled.x&&(rt=E),(o=e.middlewareData.shift)!=null&&o.enabled.y&&(z=g),D&&!p){const K=L(d.left,0),At=L(d.right,0),kt=L(d.top,0),Lt=L(d.bottom,0);f?rt=b-2*(K!==0||At!==0?K+At:L(d.left,d.right)):z=h-2*(kt!==0||Lt!==0?kt+Lt:L(d.top,d.bottom))}await c({...e,availableWidth:rt,availableHeight:z});const at=await r.getDimensions(a.floating);return b!==at.width||h!==at.height?{reset:{rects:!0}}:{}}}};function Jt(){return typeof window<"u"}function pt(t){return $o(t)?(t.nodeName||"").toLowerCase():"#document"}function I(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function q(t){var e;return(e=($o(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function $o(t){return Jt()?t instanceof Node||t instanceof I(t).Node:!1}function P(t){return Jt()?t instanceof Element||t instanceof I(t).Element:!1}function W(t){return Jt()?t instanceof HTMLElement||t instanceof I(t).HTMLElement:!1}function Ao(t){return!Jt()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof I(t).ShadowRoot}const Rs=new Set(["inline","contents"]);function _t(t){const{overflow:e,overflowX:n,overflowY:o,display:i}=N(t);return/auto|scroll|overlay|hidden|clip/.test(e+o+n)&&!Rs.has(i)}const Ds=new Set(["table","td","th"]);function Ps(t){return Ds.has(pt(t))}const Ns=[":popover-open",":modal"];function Zt(t){return Ns.some(e=>{try{return t.matches(e)}catch{return!1}})}const Hs=["transform","translate","scale","rotate","perspective"],Bs=["transform","translate","scale","rotate","perspective","filter"],Fs=["paint","layout","strict","content"];function Te(t){const e=Ce(),n=P(t)?N(t):t;return Hs.some(o=>n[o]?n[o]!=="none":!1)||(n.containerType?n.containerType!=="normal":!1)||!e&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!e&&(n.filter?n.filter!=="none":!1)||Bs.some(o=>(n.willChange||"").includes(o))||Fs.some(o=>(n.contain||"").includes(o))}function Us(t){let e=X(t);for(;W(e)&&!mt(e);){if(Te(e))return e;if(Zt(e))return null;e=X(e)}return null}function Ce(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const Vs=new Set(["html","body","#document"]);function mt(t){return Vs.has(pt(t))}function N(t){return I(t).getComputedStyle(t)}function te(t){return P(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function X(t){if(pt(t)==="html")return t;const e=t.assignedSlot||t.parentNode||Ao(t)&&t.host||q(t);return Ao(e)?e.host:e}function ko(t){const e=X(t);return mt(e)?t.ownerDocument?t.ownerDocument.body:t.body:W(e)&&_t(e)?e:ko(e)}function yt(t,e,n){var o;e===void 0&&(e=[]),n===void 0&&(n=!0);const i=ko(t),s=i===((o=t.ownerDocument)==null?void 0:o.body),r=I(i);if(s){const a=$e(r);return e.concat(r,r.visualViewport||[],_t(i)?i:[],a&&n?yt(a):[])}return e.concat(i,yt(i,[],n))}function $e(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function Lo(t){const e=N(t);let n=parseFloat(e.width)||0,o=parseFloat(e.height)||0;const i=W(t),s=i?t.offsetWidth:n,r=i?t.offsetHeight:o,a=jt(n)!==s||jt(o)!==r;return a&&(n=s,o=r),{width:n,height:o,$:a}}function Ae(t){return P(t)?t:t.contextElement}function ht(t){const e=Ae(t);if(!W(e))return V(1);const n=e.getBoundingClientRect(),{width:o,height:i,$:s}=Lo(e);let r=(s?jt(n.width):n.width)/o,a=(s?jt(n.height):n.height)/i;return(!r||!Number.isFinite(r))&&(r=1),(!a||!Number.isFinite(a))&&(a=1),{x:r,y:a}}const qs=V(0);function Io(t){const e=I(t);return!Ce()||!e.visualViewport?qs:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function Ws(t,e,n){return e===void 0&&(e=!1),!n||e&&n!==I(t)?!1:e}function nt(t,e,n,o){e===void 0&&(e=!1),n===void 0&&(n=!1);const i=t.getBoundingClientRect(),s=Ae(t);let r=V(1);e&&(o?P(o)&&(r=ht(o)):r=ht(t));const a=Ws(s,n,o)?Io(s):V(0);let c=(i.left+a.x)/r.x,l=(i.top+a.y)/r.y,d=i.width/r.x,u=i.height/r.y;if(s){const p=I(s),f=o&&P(o)?I(o):o;let b=p,h=$e(b);for(;h&&o&&f!==b;){const y=ht(h),v=h.getBoundingClientRect(),g=N(h),E=v.left+(h.clientLeft+parseFloat(g.paddingLeft))*y.x,w=v.top+(h.clientTop+parseFloat(g.paddingTop))*y.y;c*=y.x,l*=y.y,d*=y.x,u*=y.y,c+=E,l+=w,b=I(h),h=$e(b)}}return Qt({width:d,height:u,x:c,y:l})}function ee(t,e){const n=te(t).scrollLeft;return e?e.left+n:nt(q(t)).left+n}function Oo(t,e){const n=t.getBoundingClientRect(),o=n.left+e.scrollLeft-ee(t,n),i=n.top+e.scrollTop;return{x:o,y:i}}function zs(t){let{elements:e,rect:n,offsetParent:o,strategy:i}=t;const s=i==="fixed",r=q(o),a=e?Zt(e.floating):!1;if(o===r||a&&s)return n;let c={scrollLeft:0,scrollTop:0},l=V(1);const d=V(0),u=W(o);if((u||!u&&!s)&&((pt(o)!=="body"||_t(r))&&(c=te(o)),W(o))){const f=nt(o);l=ht(o),d.x=f.x+o.clientLeft,d.y=f.y+o.clientTop}const p=r&&!u&&!s?Oo(r,c):V(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+d.x+p.x,y:n.y*l.y-c.scrollTop*l.y+d.y+p.y}}function js(t){return Array.from(t.getClientRects())}function Ks(t){const e=q(t),n=te(t),o=t.ownerDocument.body,i=L(e.scrollWidth,e.clientWidth,o.scrollWidth,o.clientWidth),s=L(e.scrollHeight,e.clientHeight,o.scrollHeight,o.clientHeight);let r=-n.scrollLeft+ee(t);const a=-n.scrollTop;return N(o).direction==="rtl"&&(r+=L(e.clientWidth,o.clientWidth)-i),{width:i,height:s,x:r,y:a}}const Mo=25;function Ys(t,e){const n=I(t),o=q(t),i=n.visualViewport;let s=o.clientWidth,r=o.clientHeight,a=0,c=0;if(i){s=i.width,r=i.height;const d=Ce();(!d||d&&e==="fixed")&&(a=i.offsetLeft,c=i.offsetTop)}const l=ee(o);if(l<=0){const d=o.ownerDocument,u=d.body,p=getComputedStyle(u),f=d.compatMode==="CSS1Compat"&&parseFloat(p.marginLeft)+parseFloat(p.marginRight)||0,b=Math.abs(o.clientWidth-u.clientWidth-f);b<=Mo&&(s-=b)}else l<=Mo&&(s+=l);return{width:s,height:r,x:a,y:c}}const Xs=new Set(["absolute","fixed"]);function Gs(t,e){const n=nt(t,!0,e==="fixed"),o=n.top+t.clientTop,i=n.left+t.clientLeft,s=W(t)?ht(t):V(1),r=t.clientWidth*s.x,a=t.clientHeight*s.y,c=i*s.x,l=o*s.y;return{width:r,height:a,x:c,y:l}}function Ro(t,e,n){let o;if(e==="viewport")o=Ys(t,n);else if(e==="document")o=Ks(q(t));else if(P(e))o=Gs(e,n);else{const i=Io(t);o={x:e.x-i.x,y:e.y-i.y,width:e.width,height:e.height}}return Qt(o)}function Do(t,e){const n=X(t);return n===e||!P(n)||mt(n)?!1:N(n).position==="fixed"||Do(n,e)}function Qs(t,e){const n=e.get(t);if(n)return n;let o=yt(t,[],!1).filter(a=>P(a)&&pt(a)!=="body"),i=null;const s=N(t).position==="fixed";let r=s?X(t):t;for(;P(r)&&!mt(r);){const a=N(r),c=Te(r);!c&&a.position==="fixed"&&(i=null),(s?!c&&!i:!c&&a.position==="static"&&!!i&&Xs.has(i.position)||_t(r)&&!c&&Do(t,r))?o=o.filter(d=>d!==r):i=a,r=X(r)}return e.set(t,o),o}function Js(t){let{element:e,boundary:n,rootBoundary:o,strategy:i}=t;const r=[...n==="clippingAncestors"?Zt(e)?[]:Qs(e,this._c):[].concat(n),o],a=r[0],c=r.reduce((l,d)=>{const u=Ro(e,d,i);return l.top=L(u.top,l.top),l.right=ft(u.right,l.right),l.bottom=ft(u.bottom,l.bottom),l.left=L(u.left,l.left),l},Ro(e,a,i));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function Zs(t){const{width:e,height:n}=Lo(t);return{width:e,height:n}}function tr(t,e,n){const o=W(e),i=q(e),s=n==="fixed",r=nt(t,!0,s,e);let a={scrollLeft:0,scrollTop:0};const c=V(0);function l(){c.x=ee(i)}if(o||!o&&!s)if((pt(e)!=="body"||_t(i))&&(a=te(e)),o){const f=nt(e,!0,s,e);c.x=f.x+e.clientLeft,c.y=f.y+e.clientTop}else i&&l();s&&!o&&i&&l();const d=i&&!o&&!s?Oo(i,a):V(0),u=r.left+a.scrollLeft-c.x-d.x,p=r.top+a.scrollTop-c.y-d.y;return{x:u,y:p,width:r.width,height:r.height}}function ke(t){return N(t).position==="static"}function Po(t,e){if(!W(t)||N(t).position==="fixed")return null;if(e)return e(t);let n=t.offsetParent;return q(t)===n&&(n=n.ownerDocument.body),n}function No(t,e){const n=I(t);if(Zt(t))return n;if(!W(t)){let i=X(t);for(;i&&!mt(i);){if(P(i)&&!ke(i))return i;i=X(i)}return n}let o=Po(t,e);for(;o&&Ps(o)&&ke(o);)o=Po(o,e);return o&&mt(o)&&ke(o)&&!Te(o)?n:o||Us(t)||n}const er=async function(t){const e=this.getOffsetParent||No,n=this.getDimensions,o=await n(t.floating);return{reference:tr(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function nr(t){return N(t).direction==="rtl"}const or={convertOffsetParentRelativeRectToViewportRelativeRect:zs,getDocumentElement:q,getClippingRect:Js,getOffsetParent:No,getElementRects:er,getClientRects:js,getDimensions:Zs,getScale:ht,isElement:P,isRTL:nr};function Ho(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function ir(t,e){let n=null,o;const i=q(t);function s(){var a;clearTimeout(o),(a=n)==null||a.disconnect(),n=null}function r(a,c){a===void 0&&(a=!1),c===void 0&&(c=1),s();const l=t.getBoundingClientRect(),{left:d,top:u,width:p,height:f}=l;if(a||e(),!p||!f)return;const b=Kt(u),h=Kt(i.clientWidth-(d+p)),y=Kt(i.clientHeight-(u+f)),v=Kt(d),E={rootMargin:-b+"px "+-h+"px "+-y+"px "+-v+"px",threshold:L(0,ft(1,c))||1};let w=!0;function S(D){const z=D[0].intersectionRatio;if(z!==c){if(!w)return r();z?r(!1,z):o=setTimeout(()=>{r(!1,1e-7)},1e3)}z===1&&!Ho(l,t.getBoundingClientRect())&&r(),w=!1}try{n=new IntersectionObserver(S,{...E,root:i.ownerDocument})}catch{n=new IntersectionObserver(S,E)}n.observe(t)}return r(!0),s}function sr(t,e,n,o){o===void 0&&(o={});const{ancestorScroll:i=!0,ancestorResize:s=!0,elementResize:r=typeof ResizeObserver=="function",layoutShift:a=typeof IntersectionObserver=="function",animationFrame:c=!1}=o,l=Ae(t),d=i||s?[...l?yt(l):[],...yt(e)]:[];d.forEach(v=>{i&&v.addEventListener("scroll",n,{passive:!0}),s&&v.addEventListener("resize",n)});const u=l&&a?ir(l,n):null;let p=-1,f=null;r&&(f=new ResizeObserver(v=>{let[g]=v;g&&g.target===l&&f&&(f.unobserve(e),cancelAnimationFrame(p),p=requestAnimationFrame(()=>{var E;(E=f)==null||E.observe(e)})),n()}),l&&!c&&f.observe(l),f.observe(e));let b,h=c?nt(t):null;c&&y();function y(){const v=nt(t);h&&!Ho(h,v)&&n(),h=v,b=requestAnimationFrame(y)}return n(),()=>{var v;d.forEach(g=>{i&&g.removeEventListener("scroll",n),s&&g.removeEventListener("resize",n)}),u?.(),(v=f)==null||v.disconnect(),f=null,c&&cancelAnimationFrame(b)}}const Le=Os,Ie=Is,Bo=Ms,rr=(t,e,n)=>{const o=new Map,i={platform:or,...n},s={...i.platform,_c:o};return Ls(t,e,{...i,platform:s})},M={capture:!0,passive:!0},wt=typeof window<"u"&&typeof document<"u";function ar(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function m(t,e,n){return n===void 0?t.getAttribute(e)??null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}let lr=0;const cr=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function ne(t){return t.id||(t.id=`${cr}${++lr}`),t.id}const Fo=(t,e,[...n])=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},C=(t,...e)=>{Et&&(t===window||t===document)&&Et.push(()=>dr(t,...e)),Fo("add",t,e)},dr=(t,...e)=>Fo("remove",t,e);let Et=null;const R=t=>{if(!wt||!window.requestAnimationFrame)return;window._mtdsUnbindEvents||(window._mtdsUnbindEvents=new Map);const e=()=>requestAnimationFrame(()=>{const n=String(t).replace(/(\n|\s)/g,"");window._mtdsUnbindEvents?.get(n)?.forEach(o=>{o()}),Et=[],t(),window._mtdsUnbindEvents?.set(n,Et?.slice(0)),Et=null});document.readyState==="complete"?e():C(window,"load",e)},Oe=new WeakMap;function ot(t,e,n){Oe.get(t)?.(),Oe.delete(t),e&&Oe.set(t,sr(e,t,()=>{if(!t.isConnected||!e.isConnected||t.hidden)return ot(t,!1);rr(e,t,n).then(({x:o,y:i})=>{t.style.left=`${o}px`,t.style.top=`${i}px`})}))}function Uo(t){let e=0;const n=()=>setTimeout(o,200),o=()=>{t([],i),i.takeRecords(),e=0},i=new MutationObserver(()=>{e||(e=requestAnimationFrame(n))});return i}const Me=new WeakMap,gt=(t,e,n)=>{if(!wt||!window.requestAnimationFrame)return;const o=t.getElementsByClassName(e),i=Me.get(t)||[];i.length||(Me.set(t,i),Uo((s,r)=>{if(t.isConnected&&i?.length)for(const a of i)a();else r?.disconnect(),Me.delete(t)}).observe(t,{attributeFilter:["class","hidden"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>n(o))},Re=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),ur=`.${T.breadcrumbs.split(" ")[0]}`,fr=`.${T.chip.split(" ")[0]}`,pr=`.${T.helptext.split(" ")[0]}`,mr=`.${T.pagination.split(" ")[0]}`,hr='summary,u-summary,a,button,[role="tab"],[role="button"]',gr="click,toggle,submit,change",De="mattilsynet.matomo.cloud",H="mtds-analytics-banner",br="https://www.mattilsynet.no/om-mattilsynet/personvernerklaering/informasjonskapsler";function Vo(t,e={}){if(wt){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${De}/matomo.php`])),window._mtm||(window._mtm=window._mtm||[],window._mtm.push({"mtm.startTime":Date.now(),event:"mtm.Start"})),t==="init"){window._mtdsTracking={enabled:window.location.hostname!=="localhost",...window._mtdsTracking,...e};const{consent:n,enabled:o,matomoId:i,matomoTagManagerId:s}=window._mtdsTracking;if(i&&window._paq.push(["setSiteId",i]),o){n!=="custom"&&vr();const r=s?`https://cdn.matomo.cloud/${De}/container_${s}.js`:`https://cdn.matomo.cloud/${De}/matomo.js`;document.querySelector(`script[src="${r}"]`)||document.head.append(Object.assign(document.createElement("script"),{async:!0,src:r}))}}if(window._mtdsTracking?.enabled!==!1){if(window._mtdsTracking?.enabled==="debug")return console.info(`analytics("${t}", `,e,")");if(t==="pageview"){const{url:n,title:o}=e;window._paq.push(["setCustomUrl",n||location.href]),window._paq.push(["setDocumentTitle",o||document.title]),window._paq.push(["trackPageView"])}else if(t==="event"){const{category:n,action:o,name:i,value:s}=e,r=["trackEvent",n,o,i,s];let a=location.href;window._paq.push([function(){a=this.getCurrentUrl()}]),window._paq.push(["setCustomUrl",a.split("#")[0]]),window._paq.push(r.filter(c=>c!==void 0)),window._paq.push(["setCustomUrl",a])}else if(t==="search"){const{query:n,category:o=!1,results:i=!1}=e;window._paq.push(["trackSiteSearch",n,o,i])}else t==="matomo"&&window._paq.push(e)}}}function vr(){if(document.getElementById(H)||window.localStorage.getItem(H))return;document.body.insertAdjacentHTML("afterbegin",`<dialog id="${H}" data-analytics="ignore"><style>
|
|
8
|
+
::slotted(data:focus) { ${Vi} }`,cn="beforeinput,blur,focus,click,input,keydown,mousedown",dn={once:!0,passive:!0},Ji=Fi&&!on,Zi=on||Ui,un="".repeat(5),Dt="false",Pt={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},me=class extends qi{constructor(){super(),this._item="",this._speak="",this._texts=Bi({},Pt),this._value="",this.shadowRoot||this.attachShadow({mode:"open"}).append(Rt("slot"),Rt("style",Qi))}static get observedAttributes(){return Object.keys(Pt).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=ji(this),Ot(this,cn,this,!0),de(this,{attributeFilter:["value","id"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(Nt,0,this),setTimeout(Ht,0,this)}attributeChangedCallback(t,e,n){const o=t.split("data-sr-")[1];Pt[o]&&(this._texts[o]=n||Pt[o])}disconnectedCallback(){de(this,!1),Wi(this,cn,this,!0),this._items=this._clear=this._focus=this._control=void 0,this._list=this._options=this._root=void 0}handleEvent(t){const e=t.target;ge(this)||(t.type==="beforeinput"&&(this._value=e?.value||""),t.type==="blur"&&es(this),t.type==="click"&&os(this,t),t.type==="focus"&&ts(this,t),t.type==="input"&&is(this,t),t.type==="keydown"&&ss(this,t),t.type==="mousedown"&&pe(t),t.type==="mutation"&&Nt(this,t))}get multiple(){var t;return((t=_(this,"data-multiple"))!=null?t:Dt)!==Dt}set multiple(t){_(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=_(this,"data-creatable"))!=null?t:Dt)!==Dt}set creatable(t){_(this,"data-creatable",t?"":null)}get control(){var t;return(t=this._control)!=null&&t.isConnected||(this._control=this.querySelector("input")),this._control}get list(){var t;return(t=this._list)!=null&&t.isConnected||(this._list=this.querySelector("u-datalist,datalist")),this._list}get clear(){var t;return(t=this._clear)!=null&&t.isConnected||(this._clear=this.querySelector("del")),this._clear}get items(){return this._items||(this._items=this.getElementsByTagName("data")),this._items}get options(){var t,e;if(!this._options){const n=((t=this.list)==null?void 0:t.nodeName)==="U-DATALIST"?"u-option":"option";this._options=(e=this.list)==null?void 0:e.getElementsByTagName(n)}return this._options}get values(){return[...this.items].map(({value:t})=>t)}},tt=t=>{var e;return((e=t?.textContent)==null?void 0:e.trim())||""},he=t=>t instanceof HTMLDataElement,ge=({control:t})=>t?.disabled||t?.readOnly||!1,Nt=(t,e)=>{var n;const{_focus:o,_texts:i,items:s,control:r,list:a,multiple:c}=t;if(!r||!a)return;const l=Xi(r),d=l.endsWith(un)?_(r,"data-label"):l;_(r,"data-label",d);let u=`${d}${c?`, ${s.length?i.found.replace("%d",`${s.length}`):i.empty}`:""}`;const p=[];for(const{addedNodes:g,removedNodes:E}of e?.detail||[]){for(const w of g)he(w)&&p.unshift(w);for(const w of E)he(w)&&p.push(w)}const f=c?p.length===1:p[0]===o;if(o&&f){const g=_(r,"aria-expanded"),E=_(r,"inputmode"),w=he(o)?r:o,S=!p[0].isConnected;t._speak=`${i[S?"removed":"added"]} ${tt(p[0])}, `,(Zi||o===r)&&ue(t._speak),r!==w&&(_(r,"aria-expanded",null),_(r,"inputmode","none"),u=" ",r.focus()),setTimeout(()=>{var D;_(r,"aria-expanded",g),_(r,"inputmode",S?"none":E),(D=w?.focus)==null||D.call(w),_(r,"inputmode",E),t._speak="",Ji?Ot(t,"blur",()=>Nt(t),dn):setTimeout(Nt,100,t)},100)}let b=0;const h=t.querySelector("select"),y=ge(t)?"":`${i.remove}, `;for(const g of s){const E=h?.options[b],w=tt(g),S=g.value||w,D=`${t._speak}${w}, ${y}${++b} ${i.of} ${s.length}`;_(g,"role","button"),_(g,"value",S),_(g,"tabindex","-1"),_(g,"aria-label",D),E?Object.assign(E,{textContent:w,value:S}):h?.appendChild(new Option(w,S,!0,!0))}h&&_(h,"multiple",c?"":null);for(const g of[...h?.options||[]].slice(b))g.remove();!c&&b>1&&console.warn("u-combobox: Multiple <data> found in single mode."),_(a,"aria-multiselectable",`${c}`),_(r,"list",an(a)),_(r,"aria-label",`${t._speak}${u}${un}`),a.hasAttribute("popover")&&(_(r,"popovertarget",an(a)),_(a,"popover","manual"));const v=tt(s[0]);v!==t._item&&Ht(t),t._item=v,fn(t),pn(t),(n=de(t))==null||n.takeRecords()},fn=t=>{var e;t.clear&&_(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value)||ge(t))},pn=t=>{var e;const{_speak:n,options:o=[],values:i}=t;for(const s of o){const r=(e=_(s,"value"))!=null?e:tt(s);_(s,"aria-label",n?`${n}${tt(s)}`:null),_(s,"selected",i.includes(r)?"":null)}},Ht=t=>{const{multiple:e,control:n,items:o}=t,i=tt(o[0]);!e&&n&&i!==n.value&&ln(n,i,i?"insertText":"deleteContent")},be=(t,e=!0)=>{var n;const{_texts:o,options:i=[],creatable:s,control:r,items:a,multiple:c}=t,l=((n=r?.value)==null?void 0:n.trim())||"",d=l.toLowerCase()||null;let u=[...i].find(f=>(_(f,"label")||tt(f)).trim().toLowerCase()===d);const p={bubbles:!0,cancelable:!0,detail:u};if(t.dispatchEvent(new CustomEvent("comboboxbeforematch",p))||(u=[...i].find(f=>f.selected)),e)return pn(t),u?dt(t,u,!1):s&&l?dt(t,{value:l},!1):(!c&&!l&&a[0]?dt(t,a[0]):Ht(t),ue(o.invalid));for(const f of i)f.selected=f===u},dt=(t,e,n=!0)=>{const{control:o,items:i,multiple:s}=t,r=Rt("data",e.label||e.value,{value:e.value}),a=[...i].find(d=>d.value===e.value),c={bubbles:!0,cancelable:!0,detail:a||r};if(a&&!n)return Ht(t);if(t.dispatchEvent(new CustomEvent("comboboxbeforeselect",c))){if(!s)for(const d of[...i])d.remove();a?a.remove():o?.insertAdjacentElement("beforebegin",r),t.dispatchEvent(new CustomEvent("comboboxafterselect",c))}},ts=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),ue()},es=t=>pe()||setTimeout(ns,0,t),ns=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t.multiple||be(t),t._focus=void 0)},os=(t,e)=>{const{clientX:n,clientY:o,target:i}=e,{clear:s,control:r,items:a}=t;if(s?.contains(i))return r&&ln(r,"","deleteContentBackward"),r?.focus();for(const c of a){const{top:l,right:d,bottom:u,left:p}=c.getBoundingClientRect();if(c.contains(i))return dt(t,c);if(o>=l&&o<=u&&n>=p&&n<=d)return c.focus()}i===t&&r?.focus()},is=(t,e)=>{var n;const{options:o=[],control:i,multiple:s}=t,r=((n=i?.value)==null?void 0:n.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType==="insertReplacementText":!!r){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const c of o)if(c.value&&c.value===r)return dt(t,c,s)}else s||be(t,!1);fn(t)},ss=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const{clear:o,control:i,items:s}=t,{key:r,repeat:a,target:c}=e,l=i&&i===c,d=l&&i?.selectionEnd;let u=l?s.length:[...s].indexOf(c);if(l&&r==="Tab"&&o&&!o.hidden&&(e.preventDefault(),o.tabIndex=-1,o.focus(),Ot(o,"blur",()=>_(o,"tabindex",null),dn)),!(!l&&zi(e)||u===-1)){if(r==="ArrowRight"&&!l)u+=1;else if(r==="ArrowLeft"&&!d)u-=1;else if(r==="Enter"&&l){const p=_(i,"form");return _(i,"form","#"),requestAnimationFrame(()=>_(i,"form",p)),be(t)}else if((r==="Backspace"||r==="Delete")&&!d){if(e.preventDefault(),!a&&s[u])return dt(t,s[u]);l&&(u-=1)}else return l||i?.focus();e.preventDefault(),(n=s[Math.max(0,u)]||i)==null||n.focus()}};Yi.define("u-combobox",me);var ve=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",rs=ve&&/android/i.test(navigator.userAgent),mn;ve&&/^Mac/i.test(((mn=navigator.userAgentData)==null?void 0:mn.platform)||navigator.platform);var as=`${rs?"data":"aria"}-labelledby`,_e=":host(:not([hidden])) { display: block }",Bt=typeof HTMLElement>"u"?class{}:HTMLElement;function $(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var hn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},ls=(t,...e)=>hn("add",t,e),cs=(t,...e)=>hn("remove",t,e),Ft=(t,e)=>t.shadowRoot||t.attachShadow({mode:"open"}).append(_n("slot"),_n("style",e)),Ut=new WeakMap,gn=(t,e)=>{if(e===void 0)return Ut.get(t);try{Ut.get(t).disconnect(),Ut.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),Ut.set(t,n)}},ds=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},bn=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},us=0,vn=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++us).toString(32)}`),t.id):"",_n=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},Vt={define:(t,e)=>!ve||window.customElements.get(t)||window.customElements.define(t,e)},fs=_e,ps=_e,ms=_e,hs=':host(:not([hidden])) { display: inline-block; cursor: pointer }:host([aria-disabled="true"]) { cursor: default }',qt="aria-controls",ut="aria-selected",yn=class extends Bt{constructor(){super(),Ft(this,fs)}get tabList(){return Wt("u-tablist",this)[0]||null}get selectedIndex(){return zt(this.tabs)}set selectedIndex(t){Ee(this.tabs[t])}get tabs(){return Wt("u-tab",this)}get panels(){return Wt("u-tabpanel",this)}},wn=class extends Bt{constructor(){super(),Ft(this,ps)}connectedCallback(){$(this,"role","tablist"),ls(this,"click,keydown",this),gn(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){cs(this,"click,keydown",this),gn(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s?.setAttribute(ut,"true")}const{key:e}=t,n=[...this.tabs],o=n.findIndex(s=>s.contains(t.target));let i=o;if(!(t.defaultPrevented||o===-1)&&(t.type==="click"&&Ee(n[o]),t.type==="keydown"&&!ds(t))){if(e==="ArrowDown"||e==="ArrowRight")i=(o+1)%n.length;else if(e==="ArrowUp"||e==="ArrowLeft")i=(o||n.length)-1;else if(e==="End")i=n.length-1;else if(e==="Home")i=0;else if(e==="Tab")i=zt(n);else return;setTimeout(()=>{n[o].tabIndex=-1,n[i].tabIndex=0}),e!=="Tab"&&(t.preventDefault(),n[i].focus())}}get tabsElement(){return this.closest("u-tabs")}get tabs(){return this.querySelectorAll("u-tab")}get selectedIndex(){return zt(this.tabs)}set selectedIndex(t){Ee(this.tabs[t])}},ye=!1,En=class extends Bt{static get observedAttributes(){return["id",ut,qt]}constructor(){super(),Ft(this,hs)}connectedCallback(){$(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!ye&&this.selected&&this.tabList){ye=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=Wt("u-tabpanel",this.tabsElement||this),n=we(this,e[t.indexOf(this)]);n&&$(n,as,vn(this)),t.forEach((o,i)=>{const s=we(o,e[i]);o.tabIndex=o===this?0:-1,$(o,ut,`${o===this}`),$(o,qt,s?.id||null),s&&(s.hidden=s!==n)}),ye=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return t?.nodeName==="U-TABLIST"?t:null}get selected(){return $(this,ut)==="true"}set selected(t){$(this,ut,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return we(this)}},xn=class extends Bt{static get observedAttributes(){return["hidden"]}constructor(){super(),Ft(this,ms)}connectedCallback(){$(this,"role","tabpanel"),this.hidden=zt(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){const t=this.hidden;$(this,"aria-hidden",`${t}`),$(this,"tabindex",t||gs(this.firstChild)?null:"0")}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${qt}="${this.id}"]`;return bn(this).querySelectorAll(t)}},Wt=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),we=(t,e)=>{const n=$(t,qt)||vn(e),o=bn(t).getElementById(n);return o?.nodeName==="U-TABPANEL"?o:null},zt=t=>[...t].findIndex(e=>$(e,ut)==="true"),Ee=t=>t&&$(t,"aria-disabled")!=="true"&&$(t,"aria-selected","true"),gs=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');Vt.define("u-tabs",yn),Vt.define("u-tablist",wn),Vt.define("u-tab",En),Vt.define("u-tabpanel",xn);const bs="2.1.12",Sn="_alert_2uhem_1 _ds-alert_alzsp_1",Tn="_app_2uhem_1",Cn="_sticky_2uhem_1",$n="_avatar_2uhem_1 _ds-avatar_alzsp_1",An="_badge_2uhem_1",kn="_breadcrumbs_2uhem_1 _ds-breadcrumbs_alzsp_1",Ln="_button_2uhem_1 _ds-button_alzsp_1",In="_card_2uhem_1",On="_group_2uhem_1",Mn="_chip_2uhem_1 _ds-chip_alzsp_1",Rn="_details_2uhem_1 _ds-details_alzsp_1",Dn="_dialog_2uhem_1 _ds-dialog_alzsp_1",Pn="__drawer_2uhem_1",Nn="_divider_2uhem_1",Hn="_errorsummary_2uhem_1 _ds-error-summary_alzsp_1",Bn="__errorsummary_2uhem_1",Fn="_field_2uhem_1 _ds-field_alzsp_1",Un="__datalist_2uhem_1",Vn="_affixes_2uhem_1 _ds-field-affixes_alzsp_1",qn="_fieldset_2uhem_1 _ds-fieldset_alzsp_1",Wn="_heading_2uhem_1 _ds-heading_alzsp_1",zn="_ingress_2uhem_1",jn="_muted_2uhem_1",Kn="_info_2uhem_1",Yn="_prose_2uhem_1",Xn="_helptext_2uhem_1 _ds-focus_alzsp_1",Gn="_input_2uhem_1 _ds-input_alzsp_1",Qn="_grid_2uhem_1",Jn="_flex_2uhem_1",Zn="_link_2uhem_1",to="_logo_2uhem_1",eo="_pagination_2uhem_1 _ds-pagination_alzsp_1",no="_popover_2uhem_1",oo="_progress_2uhem_1",io="__indeterminate_2uhem_1",so="_skeleton_2uhem_1 _ds-skeleton_alzsp_1",ro="__skeleton_2uhem_1",ao="_spinner_2uhem_1",lo="_steps_2uhem_1",co="_table_2uhem_1 _ds-table_alzsp_1",uo="__scrollShadow_2uhem_1",fo="_tabs_2uhem_1 _ds-tabs_alzsp_1",po="__scrollMask_2uhem_1",mo="_tag_2uhem_1 _ds-tag_alzsp_1",ho="_togglegroup_2uhem_1",go="__tooltip_2uhem_1",bo="_validation_2uhem_1 _ds-validation-message_alzsp_1",vo="_body_2uhem_154",_o="__checked_2uhem_1",T={alert:Sn,app:Tn,sticky:Cn,avatar:$n,badge:An,breadcrumbs:kn,button:Ln,card:In,group:On,chip:Mn,details:Rn,dialog:Dn,_drawer:Pn,divider:Nn,errorsummary:Hn,_errorsummary:Bn,field:Fn,_datalist:Un,affixes:Vn,fieldset:qn,heading:Wn,ingress:zn,muted:jn,info:Kn,prose:Yn,helptext:Xn,input:Gn,grid:Qn,flex:Jn,link:Zn,logo:to,pagination:eo,popover:no,progress:oo,_indeterminate:io,skeleton:so,_skeleton:ro,spinner:ao,steps:lo,table:co,_scrollShadow:uo,tabs:fo,_scrollMask:po,tag:mo,togglegroup:ho,_tooltip:go,validation:bo,body:vo,_checked:_o},vs=Object.freeze(Object.defineProperty({__proto__:null,_checked:_o,_datalist:Un,_drawer:Pn,_errorsummary:Bn,_indeterminate:io,_scrollMask:po,_scrollShadow:uo,_skeleton:ro,_tooltip:go,affixes:Vn,alert:Sn,app:Tn,avatar:$n,badge:An,body:vo,breadcrumbs:kn,button:Ln,card:In,chip:Mn,default:T,details:Rn,dialog:Dn,divider:Nn,errorsummary:Hn,field:Fn,fieldset:qn,flex:Jn,grid:Qn,group:On,heading:Wn,helptext:Xn,info:Kn,ingress:zn,input:Gn,link:Zn,logo:to,muted:jn,pagination:eo,popover:no,progress:oo,prose:Yn,skeleton:so,spinner:ao,steps:lo,sticky:Cn,table:co,tabs:fo,tag:mo,togglegroup:ho,validation:bo},Symbol.toStringTag,{value:"Module"})),ft=Math.min,L=Math.max,jt=Math.round,Kt=Math.floor,V=t=>({x:t,y:t}),_s={left:"right",right:"left",bottom:"top",top:"bottom"},ys={start:"end",end:"start"};function yo(t,e,n){return L(t,ft(e,n))}function Yt(t,e){return typeof t=="function"?t(e):t}function et(t){return t.split("-")[0]}function Xt(t){return t.split("-")[1]}function wo(t){return t==="x"?"y":"x"}function Eo(t){return t==="y"?"height":"width"}const ws=new Set(["top","bottom"]);function Y(t){return ws.has(et(t))?"y":"x"}function xo(t){return wo(Y(t))}function Es(t,e,n){n===void 0&&(n=!1);const o=Xt(t),i=xo(t),s=Eo(i);let r=i==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return e.reference[s]>e.floating[s]&&(r=Gt(r)),[r,Gt(r)]}function xs(t){const e=Gt(t);return[xe(t),e,xe(e)]}function xe(t){return t.replace(/start|end/g,e=>ys[e])}const So=["left","right"],To=["right","left"],Ss=["top","bottom"],Ts=["bottom","top"];function Cs(t,e,n){switch(t){case"top":case"bottom":return n?e?To:So:e?So:To;case"left":case"right":return e?Ss:Ts;default:return[]}}function $s(t,e,n,o){const i=Xt(t);let s=Cs(et(t),n==="start",o);return i&&(s=s.map(r=>r+"-"+i),e&&(s=s.concat(s.map(xe)))),s}function Gt(t){return t.replace(/left|right|bottom|top/g,e=>_s[e])}function As(t){return{top:0,right:0,bottom:0,left:0,...t}}function ks(t){return typeof t!="number"?As(t):{top:t,right:t,bottom:t,left:t}}function Qt(t){const{x:e,y:n,width:o,height:i}=t;return{width:o,height:i,top:n,left:e,right:e+o,bottom:n+i,x:e,y:n}}function Co(t,e,n){let{reference:o,floating:i}=t;const s=Y(e),r=xo(e),a=Eo(r),c=et(e),l=s==="y",d=o.x+o.width/2-i.width/2,u=o.y+o.height/2-i.height/2,p=o[a]/2-i[a]/2;let f;switch(c){case"top":f={x:d,y:o.y-i.height};break;case"bottom":f={x:d,y:o.y+o.height};break;case"right":f={x:o.x+o.width,y:u};break;case"left":f={x:o.x-i.width,y:u};break;default:f={x:o.x,y:o.y}}switch(Xt(e)){case"start":f[r]-=p*(n&&l?-1:1);break;case"end":f[r]+=p*(n&&l?-1:1);break}return f}const Ls=async(t,e,n)=>{const{placement:o="bottom",strategy:i="absolute",middleware:s=[],platform:r}=n,a=s.filter(Boolean),c=await(r.isRTL==null?void 0:r.isRTL(e));let l=await r.getElementRects({reference:t,floating:e,strategy:i}),{x:d,y:u}=Co(l,o,c),p=o,f={},b=0;for(let h=0;h<a.length;h++){const{name:y,fn:v}=a[h],{x:g,y:E,data:w,reset:S}=await v({x:d,y:u,initialPlacement:o,placement:p,strategy:i,middlewareData:f,rects:l,platform:r,elements:{reference:t,floating:e}});d=g??d,u=E??u,f={...f,[y]:{...f[y],...w}},S&&b<=50&&(b++,typeof S=="object"&&(S.placement&&(p=S.placement),S.rects&&(l=S.rects===!0?await r.getElementRects({reference:t,floating:e,strategy:i}):S.rects),{x:d,y:u}=Co(l,p,c)),h=-1)}return{x:d,y:u,placement:p,strategy:i,middlewareData:f}};async function Se(t,e){var n;e===void 0&&(e={});const{x:o,y:i,platform:s,rects:r,elements:a,strategy:c}=t,{boundary:l="clippingAncestors",rootBoundary:d="viewport",elementContext:u="floating",altBoundary:p=!1,padding:f=0}=Yt(e,t),b=ks(f),y=a[p?u==="floating"?"reference":"floating":u],v=Qt(await s.getClippingRect({element:(n=await(s.isElement==null?void 0:s.isElement(y)))==null||n?y:y.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(a.floating)),boundary:l,rootBoundary:d,strategy:c})),g=u==="floating"?{x:o,y:i,width:r.floating.width,height:r.floating.height}:r.reference,E=await(s.getOffsetParent==null?void 0:s.getOffsetParent(a.floating)),w=await(s.isElement==null?void 0:s.isElement(E))?await(s.getScale==null?void 0:s.getScale(E))||{x:1,y:1}:{x:1,y:1},S=Qt(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:a,rect:g,offsetParent:E,strategy:c}):g);return{top:(v.top-S.top+b.top)/w.y,bottom:(S.bottom-v.bottom+b.bottom)/w.y,left:(v.left-S.left+b.left)/w.x,right:(S.right-v.right+b.right)/w.x}}const Is=function(t){return t===void 0&&(t={}),{name:"flip",options:t,async fn(e){var n,o;const{placement:i,middlewareData:s,rects:r,initialPlacement:a,platform:c,elements:l}=e,{mainAxis:d=!0,crossAxis:u=!0,fallbackPlacements:p,fallbackStrategy:f="bestFit",fallbackAxisSideDirection:b="none",flipAlignment:h=!0,...y}=Yt(t,e);if((n=s.arrow)!=null&&n.alignmentOffset)return{};const v=et(i),g=Y(a),E=et(a)===a,w=await(c.isRTL==null?void 0:c.isRTL(l.floating)),S=p||(E||!h?[Gt(a)]:xs(a)),D=b!=="none";!p&&D&&S.push(...$s(a,h,b,w));const z=[a,...S],rt=await Se(e,y),at=[];let K=((o=s.flip)==null?void 0:o.overflows)||[];if(d&&at.push(rt[v]),u){const lt=Es(i,r,w);at.push(rt[lt[0]],rt[lt[1]])}if(K=[...K,{placement:i,overflows:at}],!at.every(lt=>lt<=0)){var At,kt;const lt=(((At=s.flip)==null?void 0:At.index)||0)+1,tn=z[lt];if(tn&&(!(u==="alignment"?g!==Y(tn):!1)||K.every(U=>Y(U.placement)===g?U.overflows[0]>0:!0)))return{data:{index:lt,overflows:K},reset:{placement:tn}};let It=(kt=K.filter(ct=>ct.overflows[0]<=0).sort((ct,U)=>ct.overflows[1]-U.overflows[1])[0])==null?void 0:kt.placement;if(!It)switch(f){case"bestFit":{var Lt;const ct=(Lt=K.filter(U=>{if(D){const J=Y(U.placement);return J===g||J==="y"}return!0}).map(U=>[U.placement,U.overflows.filter(J=>J>0).reduce((J,Da)=>J+Da,0)]).sort((U,J)=>U[1]-J[1])[0])==null?void 0:Lt[0];ct&&(It=ct);break}case"initialPlacement":It=a;break}if(i!==It)return{reset:{placement:It}}}return{}}}},Os=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){const{x:n,y:o,placement:i}=e,{mainAxis:s=!0,crossAxis:r=!1,limiter:a={fn:y=>{let{x:v,y:g}=y;return{x:v,y:g}}},...c}=Yt(t,e),l={x:n,y:o},d=await Se(e,c),u=Y(et(i)),p=wo(u);let f=l[p],b=l[u];if(s){const y=p==="y"?"top":"left",v=p==="y"?"bottom":"right",g=f+d[y],E=f-d[v];f=yo(g,f,E)}if(r){const y=u==="y"?"top":"left",v=u==="y"?"bottom":"right",g=b+d[y],E=b-d[v];b=yo(g,b,E)}const h=a.fn({...e,[p]:f,[u]:b});return{...h,data:{x:h.x-n,y:h.y-o,enabled:{[p]:s,[u]:r}}}}}},Ms=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){var n,o;const{placement:i,rects:s,platform:r,elements:a}=e,{apply:c=()=>{},...l}=Yt(t,e),d=await Se(e,l),u=et(i),p=Xt(i),f=Y(i)==="y",{width:b,height:h}=s.floating;let y,v;u==="top"||u==="bottom"?(y=u,v=p===(await(r.isRTL==null?void 0:r.isRTL(a.floating))?"start":"end")?"left":"right"):(v=u,y=p==="end"?"top":"bottom");const g=h-d.top-d.bottom,E=b-d.left-d.right,w=ft(h-d[y],g),S=ft(b-d[v],E),D=!e.middlewareData.shift;let z=w,rt=S;if((n=e.middlewareData.shift)!=null&&n.enabled.x&&(rt=E),(o=e.middlewareData.shift)!=null&&o.enabled.y&&(z=g),D&&!p){const K=L(d.left,0),At=L(d.right,0),kt=L(d.top,0),Lt=L(d.bottom,0);f?rt=b-2*(K!==0||At!==0?K+At:L(d.left,d.right)):z=h-2*(kt!==0||Lt!==0?kt+Lt:L(d.top,d.bottom))}await c({...e,availableWidth:rt,availableHeight:z});const at=await r.getDimensions(a.floating);return b!==at.width||h!==at.height?{reset:{rects:!0}}:{}}}};function Jt(){return typeof window<"u"}function pt(t){return $o(t)?(t.nodeName||"").toLowerCase():"#document"}function I(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function q(t){var e;return(e=($o(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function $o(t){return Jt()?t instanceof Node||t instanceof I(t).Node:!1}function P(t){return Jt()?t instanceof Element||t instanceof I(t).Element:!1}function W(t){return Jt()?t instanceof HTMLElement||t instanceof I(t).HTMLElement:!1}function Ao(t){return!Jt()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof I(t).ShadowRoot}const Rs=new Set(["inline","contents"]);function _t(t){const{overflow:e,overflowX:n,overflowY:o,display:i}=N(t);return/auto|scroll|overlay|hidden|clip/.test(e+o+n)&&!Rs.has(i)}const Ds=new Set(["table","td","th"]);function Ps(t){return Ds.has(pt(t))}const Ns=[":popover-open",":modal"];function Zt(t){return Ns.some(e=>{try{return t.matches(e)}catch{return!1}})}const Hs=["transform","translate","scale","rotate","perspective"],Bs=["transform","translate","scale","rotate","perspective","filter"],Fs=["paint","layout","strict","content"];function Te(t){const e=Ce(),n=P(t)?N(t):t;return Hs.some(o=>n[o]?n[o]!=="none":!1)||(n.containerType?n.containerType!=="normal":!1)||!e&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!e&&(n.filter?n.filter!=="none":!1)||Bs.some(o=>(n.willChange||"").includes(o))||Fs.some(o=>(n.contain||"").includes(o))}function Us(t){let e=X(t);for(;W(e)&&!mt(e);){if(Te(e))return e;if(Zt(e))return null;e=X(e)}return null}function Ce(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const Vs=new Set(["html","body","#document"]);function mt(t){return Vs.has(pt(t))}function N(t){return I(t).getComputedStyle(t)}function te(t){return P(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function X(t){if(pt(t)==="html")return t;const e=t.assignedSlot||t.parentNode||Ao(t)&&t.host||q(t);return Ao(e)?e.host:e}function ko(t){const e=X(t);return mt(e)?t.ownerDocument?t.ownerDocument.body:t.body:W(e)&&_t(e)?e:ko(e)}function yt(t,e,n){var o;e===void 0&&(e=[]),n===void 0&&(n=!0);const i=ko(t),s=i===((o=t.ownerDocument)==null?void 0:o.body),r=I(i);if(s){const a=$e(r);return e.concat(r,r.visualViewport||[],_t(i)?i:[],a&&n?yt(a):[])}return e.concat(i,yt(i,[],n))}function $e(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function Lo(t){const e=N(t);let n=parseFloat(e.width)||0,o=parseFloat(e.height)||0;const i=W(t),s=i?t.offsetWidth:n,r=i?t.offsetHeight:o,a=jt(n)!==s||jt(o)!==r;return a&&(n=s,o=r),{width:n,height:o,$:a}}function Ae(t){return P(t)?t:t.contextElement}function ht(t){const e=Ae(t);if(!W(e))return V(1);const n=e.getBoundingClientRect(),{width:o,height:i,$:s}=Lo(e);let r=(s?jt(n.width):n.width)/o,a=(s?jt(n.height):n.height)/i;return(!r||!Number.isFinite(r))&&(r=1),(!a||!Number.isFinite(a))&&(a=1),{x:r,y:a}}const qs=V(0);function Io(t){const e=I(t);return!Ce()||!e.visualViewport?qs:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function Ws(t,e,n){return e===void 0&&(e=!1),!n||e&&n!==I(t)?!1:e}function nt(t,e,n,o){e===void 0&&(e=!1),n===void 0&&(n=!1);const i=t.getBoundingClientRect(),s=Ae(t);let r=V(1);e&&(o?P(o)&&(r=ht(o)):r=ht(t));const a=Ws(s,n,o)?Io(s):V(0);let c=(i.left+a.x)/r.x,l=(i.top+a.y)/r.y,d=i.width/r.x,u=i.height/r.y;if(s){const p=I(s),f=o&&P(o)?I(o):o;let b=p,h=$e(b);for(;h&&o&&f!==b;){const y=ht(h),v=h.getBoundingClientRect(),g=N(h),E=v.left+(h.clientLeft+parseFloat(g.paddingLeft))*y.x,w=v.top+(h.clientTop+parseFloat(g.paddingTop))*y.y;c*=y.x,l*=y.y,d*=y.x,u*=y.y,c+=E,l+=w,b=I(h),h=$e(b)}}return Qt({width:d,height:u,x:c,y:l})}function ee(t,e){const n=te(t).scrollLeft;return e?e.left+n:nt(q(t)).left+n}function Oo(t,e){const n=t.getBoundingClientRect(),o=n.left+e.scrollLeft-ee(t,n),i=n.top+e.scrollTop;return{x:o,y:i}}function zs(t){let{elements:e,rect:n,offsetParent:o,strategy:i}=t;const s=i==="fixed",r=q(o),a=e?Zt(e.floating):!1;if(o===r||a&&s)return n;let c={scrollLeft:0,scrollTop:0},l=V(1);const d=V(0),u=W(o);if((u||!u&&!s)&&((pt(o)!=="body"||_t(r))&&(c=te(o)),W(o))){const f=nt(o);l=ht(o),d.x=f.x+o.clientLeft,d.y=f.y+o.clientTop}const p=r&&!u&&!s?Oo(r,c):V(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+d.x+p.x,y:n.y*l.y-c.scrollTop*l.y+d.y+p.y}}function js(t){return Array.from(t.getClientRects())}function Ks(t){const e=q(t),n=te(t),o=t.ownerDocument.body,i=L(e.scrollWidth,e.clientWidth,o.scrollWidth,o.clientWidth),s=L(e.scrollHeight,e.clientHeight,o.scrollHeight,o.clientHeight);let r=-n.scrollLeft+ee(t);const a=-n.scrollTop;return N(o).direction==="rtl"&&(r+=L(e.clientWidth,o.clientWidth)-i),{width:i,height:s,x:r,y:a}}const Mo=25;function Ys(t,e){const n=I(t),o=q(t),i=n.visualViewport;let s=o.clientWidth,r=o.clientHeight,a=0,c=0;if(i){s=i.width,r=i.height;const d=Ce();(!d||d&&e==="fixed")&&(a=i.offsetLeft,c=i.offsetTop)}const l=ee(o);if(l<=0){const d=o.ownerDocument,u=d.body,p=getComputedStyle(u),f=d.compatMode==="CSS1Compat"&&parseFloat(p.marginLeft)+parseFloat(p.marginRight)||0,b=Math.abs(o.clientWidth-u.clientWidth-f);b<=Mo&&(s-=b)}else l<=Mo&&(s+=l);return{width:s,height:r,x:a,y:c}}const Xs=new Set(["absolute","fixed"]);function Gs(t,e){const n=nt(t,!0,e==="fixed"),o=n.top+t.clientTop,i=n.left+t.clientLeft,s=W(t)?ht(t):V(1),r=t.clientWidth*s.x,a=t.clientHeight*s.y,c=i*s.x,l=o*s.y;return{width:r,height:a,x:c,y:l}}function Ro(t,e,n){let o;if(e==="viewport")o=Ys(t,n);else if(e==="document")o=Ks(q(t));else if(P(e))o=Gs(e,n);else{const i=Io(t);o={x:e.x-i.x,y:e.y-i.y,width:e.width,height:e.height}}return Qt(o)}function Do(t,e){const n=X(t);return n===e||!P(n)||mt(n)?!1:N(n).position==="fixed"||Do(n,e)}function Qs(t,e){const n=e.get(t);if(n)return n;let o=yt(t,[],!1).filter(a=>P(a)&&pt(a)!=="body"),i=null;const s=N(t).position==="fixed";let r=s?X(t):t;for(;P(r)&&!mt(r);){const a=N(r),c=Te(r);!c&&a.position==="fixed"&&(i=null),(s?!c&&!i:!c&&a.position==="static"&&!!i&&Xs.has(i.position)||_t(r)&&!c&&Do(t,r))?o=o.filter(d=>d!==r):i=a,r=X(r)}return e.set(t,o),o}function Js(t){let{element:e,boundary:n,rootBoundary:o,strategy:i}=t;const r=[...n==="clippingAncestors"?Zt(e)?[]:Qs(e,this._c):[].concat(n),o],a=r[0],c=r.reduce((l,d)=>{const u=Ro(e,d,i);return l.top=L(u.top,l.top),l.right=ft(u.right,l.right),l.bottom=ft(u.bottom,l.bottom),l.left=L(u.left,l.left),l},Ro(e,a,i));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function Zs(t){const{width:e,height:n}=Lo(t);return{width:e,height:n}}function tr(t,e,n){const o=W(e),i=q(e),s=n==="fixed",r=nt(t,!0,s,e);let a={scrollLeft:0,scrollTop:0};const c=V(0);function l(){c.x=ee(i)}if(o||!o&&!s)if((pt(e)!=="body"||_t(i))&&(a=te(e)),o){const f=nt(e,!0,s,e);c.x=f.x+e.clientLeft,c.y=f.y+e.clientTop}else i&&l();s&&!o&&i&&l();const d=i&&!o&&!s?Oo(i,a):V(0),u=r.left+a.scrollLeft-c.x-d.x,p=r.top+a.scrollTop-c.y-d.y;return{x:u,y:p,width:r.width,height:r.height}}function ke(t){return N(t).position==="static"}function Po(t,e){if(!W(t)||N(t).position==="fixed")return null;if(e)return e(t);let n=t.offsetParent;return q(t)===n&&(n=n.ownerDocument.body),n}function No(t,e){const n=I(t);if(Zt(t))return n;if(!W(t)){let i=X(t);for(;i&&!mt(i);){if(P(i)&&!ke(i))return i;i=X(i)}return n}let o=Po(t,e);for(;o&&Ps(o)&&ke(o);)o=Po(o,e);return o&&mt(o)&&ke(o)&&!Te(o)?n:o||Us(t)||n}const er=async function(t){const e=this.getOffsetParent||No,n=this.getDimensions,o=await n(t.floating);return{reference:tr(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function nr(t){return N(t).direction==="rtl"}const or={convertOffsetParentRelativeRectToViewportRelativeRect:zs,getDocumentElement:q,getClippingRect:Js,getOffsetParent:No,getElementRects:er,getClientRects:js,getDimensions:Zs,getScale:ht,isElement:P,isRTL:nr};function Ho(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function ir(t,e){let n=null,o;const i=q(t);function s(){var a;clearTimeout(o),(a=n)==null||a.disconnect(),n=null}function r(a,c){a===void 0&&(a=!1),c===void 0&&(c=1),s();const l=t.getBoundingClientRect(),{left:d,top:u,width:p,height:f}=l;if(a||e(),!p||!f)return;const b=Kt(u),h=Kt(i.clientWidth-(d+p)),y=Kt(i.clientHeight-(u+f)),v=Kt(d),E={rootMargin:-b+"px "+-h+"px "+-y+"px "+-v+"px",threshold:L(0,ft(1,c))||1};let w=!0;function S(D){const z=D[0].intersectionRatio;if(z!==c){if(!w)return r();z?r(!1,z):o=setTimeout(()=>{r(!1,1e-7)},1e3)}z===1&&!Ho(l,t.getBoundingClientRect())&&r(),w=!1}try{n=new IntersectionObserver(S,{...E,root:i.ownerDocument})}catch{n=new IntersectionObserver(S,E)}n.observe(t)}return r(!0),s}function sr(t,e,n,o){o===void 0&&(o={});const{ancestorScroll:i=!0,ancestorResize:s=!0,elementResize:r=typeof ResizeObserver=="function",layoutShift:a=typeof IntersectionObserver=="function",animationFrame:c=!1}=o,l=Ae(t),d=i||s?[...l?yt(l):[],...yt(e)]:[];d.forEach(v=>{i&&v.addEventListener("scroll",n,{passive:!0}),s&&v.addEventListener("resize",n)});const u=l&&a?ir(l,n):null;let p=-1,f=null;r&&(f=new ResizeObserver(v=>{let[g]=v;g&&g.target===l&&f&&(f.unobserve(e),cancelAnimationFrame(p),p=requestAnimationFrame(()=>{var E;(E=f)==null||E.observe(e)})),n()}),l&&!c&&f.observe(l),f.observe(e));let b,h=c?nt(t):null;c&&y();function y(){const v=nt(t);h&&!Ho(h,v)&&n(),h=v,b=requestAnimationFrame(y)}return n(),()=>{var v;d.forEach(g=>{i&&g.removeEventListener("scroll",n),s&&g.removeEventListener("resize",n)}),u?.(),(v=f)==null||v.disconnect(),f=null,c&&cancelAnimationFrame(b)}}const Le=Os,Ie=Is,Bo=Ms,rr=(t,e,n)=>{const o=new Map,i={platform:or,...n},s={...i.platform,_c:o};return Ls(t,e,{...i,platform:s})},M={capture:!0,passive:!0},wt=typeof window<"u"&&typeof document<"u";function ar(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function m(t,e,n){return n===void 0?t.getAttribute(e)??null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}let lr=0;const cr=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function ne(t){return t.id||(t.id=`${cr}${++lr}`),t.id}const Fo=(t,e,[...n])=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},C=(t,...e)=>{Et&&(t===window||t===document)&&Et.push(()=>dr(t,...e)),Fo("add",t,e)},dr=(t,...e)=>Fo("remove",t,e);let Et=null;const R=t=>{if(!wt||!window.requestAnimationFrame)return;window._mtdsUnbindEvents||(window._mtdsUnbindEvents=new Map);const e=()=>requestAnimationFrame(()=>{const n=String(t).replace(/(\n|\s)/g,"");window._mtdsUnbindEvents?.get(n)?.forEach(o=>{o()}),Et=[],t(),window._mtdsUnbindEvents?.set(n,Et?.slice(0)),Et=null});document.readyState==="complete"?e():C(window,"load",e)},Oe=new WeakMap;function ot(t,e,n){Oe.get(t)?.(),Oe.delete(t),e&&Oe.set(t,sr(e,t,()=>{if(!t.isConnected||!e.isConnected||t.hidden)return ot(t,!1);rr(e,t,n).then(({x:o,y:i})=>{t.style.left=`${o}px`,t.style.top=`${i}px`})}))}function Uo(t){let e=0;const n=()=>setTimeout(o,200),o=()=>{t([],i),i.takeRecords(),e=0},i=new MutationObserver(()=>{e||(e=requestAnimationFrame(n))});return i}const Me=new WeakMap,gt=(t,e,n)=>{if(!wt||!window.requestAnimationFrame)return;const o=t.getElementsByClassName(e),i=Me.get(t)||[];i.length||(Me.set(t,i),Uo((s,r)=>{if(t.isConnected&&i?.length)for(const a of i)a();else r?.disconnect(),Me.delete(t)}).observe(t,{attributeFilter:["class","hidden"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>n(o))},Re=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),ur=`.${T.breadcrumbs.split(" ")[0]}`,fr=`.${T.chip.split(" ")[0]}`,pr=`.${T.helptext.split(" ")[0]}`,mr=`.${T.pagination.split(" ")[0]}`,hr='summary,u-summary,a,button,[role="tab"],[role="button"]',gr="click,toggle,submit,change",De="mattilsynet.matomo.cloud",H="mtds-analytics-banner",br="https://www.mattilsynet.no/om-mattilsynet/personvernerklaering/informasjonskapsler";function Vo(t,e={}){if(wt){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${De}/matomo.php`])),window._mtm||(window._mtm=window._mtm||[],window._mtm.push({"mtm.startTime":Date.now(),event:"mtm.Start"})),t==="init"){window._mtdsTracking={enabled:window.location.hostname!=="localhost",...window._mtdsTracking,...e};const{consent:n,enabled:o,matomoId:i,matomoTagManagerId:s}=window._mtdsTracking;if(i&&window._paq.push(["setSiteId",i]),o){n!=="custom"&&vr();const r=s?`https://cdn.matomo.cloud/${De}/container_${s}.js`:`https://cdn.matomo.cloud/${De}/matomo.js`;document.querySelector(`script[src="${r}"]`)||document.head.append(Object.assign(document.createElement("script"),{async:!0,src:r}))}}if(window._mtdsTracking?.enabled!==!1){if(window._mtdsTracking?.enabled==="debug")return console.info(`analytics("${t}", `,e,")");if(t==="pageview"){const{url:n,title:o}=e;window._paq.push(["setCustomUrl",n||location.href]),window._paq.push(["setDocumentTitle",o||document.title]),window._paq.push(["trackPageView"])}else if(t==="event"){const{category:n,action:o,name:i,value:s}=e,r=["trackEvent",n,o,i,s];let a=location.href;window._paq.push([function(){a=this.getCurrentUrl()}]),window._paq.push(["setCustomUrl",a.split("#")[0]]),window._paq.push(r.filter(c=>c!==void 0)),window._paq.push(["setCustomUrl",a])}else if(t==="search"){const{query:n,category:o=!1,results:i=!1}=e;window._paq.push(["trackSiteSearch",n,o,i])}else t==="matomo"&&window._paq.push(e)}}}function vr(){if(document.getElementById(H)||window.localStorage.getItem(H))return;document.body.insertAdjacentHTML("afterbegin",`<dialog id="${H}" data-analytics="ignore"><style>
|
|
9
9
|
#${H}[open] { box-sizing: border-box; display: flex; align-items: center; background: #116e6b; border-radius: .5em; border: 0; box-shadow: 0 .25em .5em rgba(0,0,0,.3); color: #fff; font-size: .875em; inset: auto auto 1em 1em; max-width: calc(100vw - 2em); outline: 0; padding: .5em; position: fixed; z-index: 99999 }
|
|
10
10
|
#${H} button { all: unset; box-sizing: border-box; cursor: pointer; display: flex; width: 1.5em; height: 1.5em; font: 300 1.5em/1.35 sans-serif; border-radius: .25em; place-content: center; transition: .2s; transition-property: background, scale }
|
|
11
11
|
#${H} button:focus-visible { outline: 2px solid }
|
|
@@ -20,7 +20,7 @@ var mtds=function(O){"use strict";var Pi=Object.defineProperty,en=Object.getOwnP
|
|
|
20
20
|
::slotted(u-option:focus) { ${qr} }
|
|
21
21
|
::slotted(u-option[aria-hidden="true"]),
|
|
22
22
|
::slotted(u-option[disabled]),
|
|
23
|
-
::slotted(u-option[hidden]) { display: none !important }`,oi,ii=0,Gr=Ue||ie,si="click,focusout,input,keydown,mousedown,mouseup",ri="focus,focusin,blur,focusout",ae={singular:"%d hit",plural:"%d hits"},ai=class extends Jo{constructor(){super(),this._texts=Fr({},ae),this._value="",Wr(this,Xr)}static get observedAttributes(){return["id",...Object.keys(ae).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=ti(this),x(this,"role","listbox"),x(this,"tabindex","-1"),Tt(this._root,"focusin",this),Tt(this._root,"focus",this,!0),Ve(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){se(this._root||this,"focus",this,!0),se(this._root||this,"focusin",this),Ve(this,!1),Ye(this),this._root=void 0}attributeChangedCallback(t,e,n){const o=t?.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(ae[o])this._texts[o]=n||ae[o];else if(this._root){this._input&&Xe(this,this._input);for(const s of this._root.querySelectorAll(i))Xe(this,s)}}handleEvent(t){const{target:e,type:n}=t;t.defaultPrevented||(n==="click"&&Zr(this,t),(n==="focus"||n==="focusin")&&Qr(this,t),(n==="blur"||n==="focusout")&&Jr(this,t),n==="keydown"&&ta(this,t),n==="mousedown"&&this.contains(e)&&je(t),(n==="mutation"||n==="input")&&(clearTimeout(ii),ii=setTimeout(di,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},li=t=>t?.disabled||t?.readOnly||!1,$t=(t,e)=>{var n,o,i;if(t.hidden!==e)return;t.hidden=li(t?._input)||!e,(n=Ve(t))==null||n.takeRecords();const s=t.isConnected&&t.popover&&((o=t._input)==null?void 0:o.isConnected)&&((i=t._input)==null?void 0:i.popoverTargetElement)===t;t._input&&Xe(t,t._input,e),s&&x(t,"popover","manual"),s&&t.togglePopover(e),e&&di(t)},Ye=t=>{t._input&&(se(t._input||t,ri,t),se(t._root||t,si,t),$t(t,!1),t._input=void 0)},Xe=(t,e,n=!1)=>{t.popover&&x(e,"popovertarget",qe(t)),Tt(e,ri,t,!0),x(e,"aria-autocomplete","list"),x(e,"aria-controls",qe(t)),x(e,"aria-expanded",`${!Gr||n}`),x(e,"autocomplete","off"),x(e,"role",li(e)?null:"combobox")},Qr=(t,e)=>{var n;const o=e.target instanceof HTMLInputElement;o&&e.isTrusted&&e.stopImmediatePropagation(),t._input!==e.target&&o&&e.target.list===t&&(t._input&&Ye(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),x(t,Ur,qe((n=t._input.labels)==null?void 0:n[0])),Tt(t._root||t,si,t),$t(t,x(t._input,"inputmode")!=="none"),ni())},Jr=(t,e)=>{!ie&&!je()&&t._input&&setTimeout(ci,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},ci=t=>{var e;const n=((e=t._root)==null?void 0:e.activeElement)||null,o=t._input;o&&o!==n&&!t.contains(n)&&(o.dispatchEvent(new FocusEvent("blur",{relatedTarget:n})),o.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:n})),Ye(t))},Zr=(t,{target:e})=>{var n;if(!t._input||t._input===e)return $t(t,!0);for(const o of t.options)if(o.contains(e))return x(t,"aria-multiselectable")!=="true"&&((n=t._input)==null||n.focus(),$t(t,!1)),Kr(t._input,o.value);ie&&ci(t)},ta=(t,e)=>{var n;const{key:o,target:i,altKey:s,ctrlKey:r,shiftKey:a,metaKey:c}=e,l=o==="Escape"||o==="Esc";if(s||r||c||a||o==="Tab")return;l&&!t.hidden&&e?.preventDefault(),$t(t,!l);const d=[...t.options].filter(f=>x(f,"aria-hidden")!=="true"&&f.offsetHeight),u=d.indexOf(i);let p=-1;if(o==="ArrowDown"&&(p=(u+1)%d.length),o==="ArrowUp"&&(p=(~u?u:d.length)-1),~u&&((o==="Home"||o==="PageUp")&&(p=0),(o==="End"||o==="PageDown")&&(p=d.length-1),o==="Enter"))return d[u].click(),e.preventDefault();if(d[p])for(const f of d)f.tabIndex=-1;d[p]&&e.preventDefault(),(n=d[p]||t._input)==null||n.focus(),!d[p]&&o==="ArrowUp"&&setTimeout(()=>{var f;return(f=t._input)==null?void 0:f.setSelectionRange(999,999)})},di=(t,e)=>{const{_texts:n,_root:o,_input:i,options:s}=t,r=i?.value.toLowerCase().trim()||"",a=!t.hasAttribute("data-nofilter"),c=[],l=[];for(const u of s)(u.disabled||u.hidden||a&&!u.label.toLowerCase().includes(r)?c:l).push(u);for(const u of c)x(u,"aria-hidden","true");for(const u of l)x(u,"aria-hidden","false");const d=l.length;clearTimeout(oi),e?.type==="input"&&r!==t._value&&(oi=setTimeout(()=>{const u=`${!d&&t.innerText.trim()||`${n[d===1?"singular":"plural"]}`.replace("%d",`${d}`)}`;!t.hidden&&o?.activeElement===i&&ni(u),t._value=r},1e3)),Ue&&l.map((u,p)=>x(u,"title",`${p+1}/${d}`))};St&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return ti(this).getElementById(x(this,"list")||"")}}),ei.define("u-datalist",ai);const Ge=T.field.split(" ")[0],ui=T.validation.split(" "),ea=ui[0],B=(t,e)=>t.getPropertyValue(`--mtds-text-${e}`)?.slice(1,-1)||"";function fi(t,e){for(const n of t)if(n.isConnected){const o=[],i=[],s=[];let r=null,a=null,c=!0;for(const l of n.getElementsByTagName("*"))l instanceof HTMLLabelElement?o.push(l):l instanceof me?r=l:Re(l)&&!l.hidden?a=l:l.hasAttribute("data-description")?i.push(l):l.classList.contains(ea)?(c=m(l,"data-color")==="success"||!l.clientHeight,s.push(l),i.unshift(l)):l instanceof HTMLParagraphElement&&(i.some(d=>d.contains(l))||i.push(l));if(a){for(const l of o)l.htmlFor=ne(a);if(e&&m(n,"data-validation")==="form"){c=a.matches(":valid");for(const l of s)m(l,"hidden",c?"":null)}na(r),mi(a),pi(a),m(a,"aria-describedby",i.map(ne).join(" ")||null),m(a,"aria-invalid",`${!c}`)}}}function pi(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function na(t){const{control:e,list:n}=t||{};if(t&&n&&!t.hasAttribute("data-sr-added")){const o=window.getComputedStyle(t);m(t,"data-sr-added",B(o,"combobox-added")),m(t,"data-sr-empty",B(o,"combobox-empty")),m(t,"data-sr-found",B(o,"combobox-found")),m(t,"data-sr-invalid",B(o,"combobox-invalid")),m(t,"data-sr-of",B(o,"combobox-of")),m(t,"data-sr-remove",B(o,"combobox-remove")),m(t,"data-sr-removed",B(o,"combobox-removed")),m(n,"data-sr-plural",B(o,"datalist-plural")),m(n,"data-sr-singular",B(o,"datalist-singular"))}n&&e&&!n.hasAttribute("popover")&&(m(n,"popover","manual"),m(e,"popovertarget",ne(n)))}function mi(t){const e=t?.nextElementSibling,n=e&&m(e,"data-count");if(e&&n){const o=Number(n)-t.value.length,i=o<0,s=m(e,"aria-live")==="polite",r=window.getComputedStyle(e||t),a=B(r,"count-over"),c=B(r,"count-under");if(s!==i){m(e,"aria-live",i?"polite":"off");for(const l of ui)e.classList.toggle(l,i)}e.textContent=(i?a:c).replace("%d",`${Math.abs(o)}`)}}function oa(t){if(t.target instanceof ai){const e=t.target,o=e.getRootNode()?.querySelector(`[popovertarget="${e.id}"]`);t.newState==="closed"?ot(e,!1):o&&ot(e,o,{placement:m(e,"data-position")??"bottom",middleware:[Ie(),Le(),Bo({padding:10,apply({availableHeight:i}){e.style.width=`${o.offsetWidth}px`,e.style.maxHeight=`${Math.max(50,i)}px`}})]})}}function ia(t){Re(t.target)&&(mi(t.target),pi(t.target))}function sa(t){const e=t.target?.closest?.(`.${Ge}`);t.type==="invalid"&&e&&t.preventDefault(),fi(document.getElementsByClassName(Ge),!0)}R(()=>{gt(document.documentElement,Ge,fi),C(document,"input",ia,M),C(document,"invalid,submit",sa,!0),C(document,"toggle",oa,M)});const ra=T.fieldset.split(" ")[0],aa=T.validation.split(" ")[0],hi="aria-describedby",la="aria-invalid";function ca(t){setTimeout(()=>{for(const e of t)if(e.isConnected){const n=[];let o=null,i=!0;for(const s of e.getElementsByTagName("*"))s.classList.contains(aa)?(i=m(s,"data-color")==="success"||!s.clientHeight,o=ne(s)):Re(s)&&n.push(s);for(const s of n){const r=m(s,hi)?.replace(o||"#","");m(s,hi,`${o||""} ${r||""}`.trim()),m(s,la,`${!i}`)}}})}R(()=>gt(document.documentElement,ra,ca));const da=T.logo.split(" ")[0];function ua([t]){if(t?.isConnected&&t?.firstElementChild instanceof SVGSVGElement){for(const a of document.head.querySelectorAll("link[rel~='icon']"))a.setAttribute("rel","disabled");const e=t.firstElementChild,n=t?.hasAttribute("data-env"),o=window.getComputedStyle(e),i=o.getPropertyValue("color"),s=o.getPropertyValue("--mtds-logo-color"),r=e.outerHTML.replace(/\n+/g," ").replace(/(fill|width|height|xmlns)="[^"]+"/gi,"").replace("<svg",`<svg width="40" height="40" fill="${i}"`);document.head.appendChild(Object.assign(document.createElement("link"),{href:`data:image/svg+xml,${encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 55 55'><rect fill='${n?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${n?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${r}</g></svg>`)}`,rel:"icon"}))}}R(()=>gt(document.documentElement,da,ua));const gi=T.popover.split(" ")[0];let bi=0;function fa({target:t,newState:e}){if(t instanceof HTMLElement&&t.classList.contains(gi)){const n=e==="closed",o=m(t,"data-overscroll")==="contain",i=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);bi+=n?-1:1,n?ot(t,!1):i&&ot(t,i,{placement:m(t,"data-position")||"bottom",middleware:[Ie(),Le({padding:10})].concat(o?Bo({padding:10,apply({availableHeight:s}){t.style.maxHeight=`${Math.max(50,s)}px`}}):[])})}}function pa({target:t}){const e=bi&&t?.closest?.("a,[popovertargetaction]");if(e){const n=m(e,"popovertargetaction")||"toggle",o=n==="show"||(n==="hide"?!1:void 0),s=(document.getElementById(m(e,"popovertarget")||"")||e).closest(`.${gi}`);s?.isConnected&&s?.togglePopover&&s.togglePopover(o)}}R(()=>{C(document,"toggle",fa,M),C(document,"click",pa)});const ma=T.table.split(" ")[0];function ha(t){for(const e of t){const n=Array.from(e.tHead?.rows[0]?.cells||[],o=>o.innerText.trim());for(const o of e.tBodies)for(const i of o.rows)for(const s of i.cells)m(s,"data-th",n[s.cellIndex]||":empty")}}R(()=>gt(document.documentElement,ma,ha));const ga=`.${T.togglegroup.split(" ")[0]}`;function ba(t){const{key:e,target:n}=t,o=n instanceof HTMLInputElement&&n.closest(ga);if(o&&(e==="Enter"&&n.click(),e?.startsWith("Arrow"))){t.preventDefault();const i=o.getElementsByTagName("input"),s=[...i].indexOf(n),r=e.match(/Arrow(Right|Down)/)?1:-1;i[(i.length+s+r)%i.length]?.focus()}}R(()=>C(document,"keydown",ba));const vi="aria-describedby",_i="Escape",le="aria-labelledby",va="--mtds-tooltip-position",_a=300,F=wt?Object.assign(document.createElement("div"),{className:T._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let G=null,yi=Number.NEGATIVE_INFINITY,wi=0;function Qe({target:t,type:e,key:n}){if(e==="keydown"&&n!==_i)return;const o=yi+_a-Date.now();clearTimeout(wi),wi=setTimeout(ya,Math.max(o,0),n===_i?null:t)}function ya(t){if(yi=Date.now(),!F||t===F)return;F?.isConnected||document.body.append(F);let e=t?.closest?.("[data-tooltip]")||null;if(e===G)return;const n=e&&m(e,"data-tooltip")||"",o=e&&m(e,"data-tooltip-position")||window.getComputedStyle(e||document.body).getPropertyValue(va)?.trim()||"top";(!n||n==="false"||n==="true"||o==="none")&&(e=null),e&&(F.textContent=n);const s=G&&m(G,le)===F?.id,r=(e instanceof HTMLElement?e.innerText:e?.textContent)?.trim()||e?.hasAttribute(le)||e?.hasAttribute("aria-label");G?.removeAttribute(s?le:vi),ot(F,!1),G=e,G&&m(G,r?vi:le,F?.id),G?.isConnected&&F.hidePopover(),F.togglePopover(!!e),ot(F,e||!1,{placement:o,middleware:[Ie(),Le({padding:10})]})}R(()=>{C(document,"blur,focus,mouseout,mouseover",Qe,M),C(window,"keydown",Qe,M),C(window,"blur",Qe,M)});var Ei=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",xi;Ei&&/^Mac/i.test(((xi=navigator.userAgentData)==null?void 0:xi.platform)||navigator.platform);var wa=":host(:not([hidden])) { display: block }",Si=typeof HTMLElement>"u"?class{}:HTMLElement;function Q(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var Ti=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Ci=(t,...e)=>Ti("add",t,e),$i=(t,...e)=>Ti("remove",t,e),Ea=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},xa=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},Je=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))Q(o,i,s);return o},Ai={define:(t,e)=>!Ei||window.customElements.get(t)||window.customElements.define(t,e)},Sa=`${wa}
|
|
23
|
+
::slotted(u-option[hidden]) { display: none !important }`,oi,ii=0,Gr=Ue||ie,si="click,focusout,input,keydown,mousedown,mouseup",ri="focus,focusin,blur,focusout",ae={singular:"%d hit",plural:"%d hits"},ai=class extends Jo{constructor(){super(),this._texts=Fr({},ae),this._value="",Wr(this,Xr)}static get observedAttributes(){return["id",...Object.keys(ae).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=ti(this),x(this,"role","listbox"),x(this,"tabindex","-1"),Tt(this._root,"focusin",this),Tt(this._root,"focus",this,!0),Ve(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){se(this._root||this,"focus",this,!0),se(this._root||this,"focusin",this),Ve(this,!1),Ye(this),this._root=void 0}attributeChangedCallback(t,e,n){const o=t?.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(ae[o])this._texts[o]=n||ae[o];else if(this._root){this._input&&Xe(this,this._input);for(const s of this._root.querySelectorAll(i))Xe(this,s)}}handleEvent(t){const{target:e,type:n}=t;t.defaultPrevented||(n==="click"&&Zr(this,t),(n==="focus"||n==="focusin")&&Qr(this,t),(n==="blur"||n==="focusout")&&Jr(this,t),n==="keydown"&&ta(this,t),n==="mousedown"&&this.contains(e)&&je(t),(n==="mutation"||n==="input")&&(clearTimeout(ii),ii=setTimeout(di,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},li=t=>t?.disabled||t?.readOnly||!1,$t=(t,e)=>{var n,o,i;if(t.hidden!==e)return;t.hidden=li(t?._input)||!e,(n=Ve(t))==null||n.takeRecords();const s=t.isConnected&&t.popover&&((o=t._input)==null?void 0:o.isConnected)&&((i=t._input)==null?void 0:i.popoverTargetElement)===t;t._input&&Xe(t,t._input,e),s&&x(t,"popover","manual"),s&&t.togglePopover(e),e&&di(t)},Ye=t=>{t._input&&(se(t._input||t,ri,t),se(t._root||t,si,t),$t(t,!1),t._input=void 0)},Xe=(t,e,n=!1)=>{t.popover&&x(e,"popovertarget",qe(t)),Tt(e,ri,t,!0),x(e,"aria-autocomplete","list"),x(e,"aria-controls",qe(t)),x(e,"aria-expanded",`${!Gr||n}`),x(e,"autocomplete","off"),x(e,"role",li(e)?null:"combobox")},Qr=(t,e)=>{var n;const o=e.target instanceof HTMLInputElement;o&&e.isTrusted&&e.stopImmediatePropagation(),t._input!==e.target&&o&&e.target.list===t&&(t._input&&Ye(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),x(t,Ur,qe((n=t._input.labels)==null?void 0:n[0])),Tt(t._root||t,si,t),$t(t,x(t._input,"inputmode")!=="none"),ni())},Jr=(t,e)=>{!ie&&!je()&&t._input&&setTimeout(ci,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},ci=t=>{var e;const n=((e=t._root)==null?void 0:e.activeElement)||null,o=t._input;o&&o!==n&&!t.contains(n)&&(o.dispatchEvent(new FocusEvent("blur",{relatedTarget:n})),o.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:n})),Ye(t))},Zr=(t,{target:e})=>{var n;if(!t._input||t._input===e)return $t(t,!0);for(const o of t.options)if(o.contains(e))return x(t,"aria-multiselectable")!=="true"&&((n=t._input)==null||n.focus(),$t(t,!1)),Kr(t._input,o.value);ie&&ci(t)},ta=(t,e)=>{var n;const{key:o,target:i,altKey:s,ctrlKey:r,shiftKey:a,metaKey:c}=e,l=o==="Escape"||o==="Esc";if(s||r||c||a||o==="Tab")return;l&&!t.hidden&&e?.preventDefault(),$t(t,!l);const d=[...t.options].filter(f=>x(f,"aria-hidden")!=="true"&&f.offsetHeight),u=d.indexOf(i);let p=-1;if(o==="ArrowDown"&&(p=(u+1)%d.length),o==="ArrowUp"&&(p=(~u?u:d.length)-1),~u&&((o==="Home"||o==="PageUp")&&(p=0),(o==="End"||o==="PageDown")&&(p=d.length-1),o==="Enter"))return d[u].click(),e.preventDefault();if(d[p])for(const f of d)f.tabIndex=-1;d[p]&&e.preventDefault(),(n=d[p]||t._input)==null||n.focus(),!d[p]&&o==="ArrowUp"&&setTimeout(()=>{var f;return(f=t._input)==null?void 0:f.setSelectionRange(999,999)})},di=(t,e)=>{const{_texts:n,_root:o,_input:i,options:s}=t,r=i?.value.toLowerCase().trim()||"",a=!t.hasAttribute("data-nofilter"),c=[],l=[];for(const u of s)(u.disabled||u.hidden||a&&!u.label.toLowerCase().includes(r)?c:l).push(u);for(const u of c)x(u,"aria-hidden","true");for(const u of l)x(u,"aria-hidden","false");const d=l.length;clearTimeout(oi),e?.type==="input"&&r!==t._value&&(oi=setTimeout(()=>{const u=`${!d&&t.innerText.trim()||`${n[d===1?"singular":"plural"]}`.replace("%d",`${d}`)}`;!t.hidden&&o?.activeElement===i&&ni(u),t._value=r},1e3)),Ue&&l.map((u,p)=>x(u,"title",`${p+1}/${d}`))};St&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return ti(this).getElementById(x(this,"list")||"")}}),ei.define("u-datalist",ai);const Ge=T.field.split(" ")[0],ui=T.validation.split(" "),ea=ui[0],B=(t,e)=>t.getPropertyValue(`--mtds-text-${e}`)?.slice(1,-1)||"";function fi(t,e){for(const n of t)if(n.isConnected){const o=[],i=[],s=[];let r=null,a=null,c=!0;for(const l of n.getElementsByTagName("*"))l instanceof HTMLLabelElement?o.push(l):l instanceof me?r=l:Re(l)&&!l.hidden?a=l:l.hasAttribute("data-description")?i.push(l):l.classList.contains(ea)?(c=m(l,"data-color")==="success"||!l.clientHeight,s.push(l),i.unshift(l)):l instanceof HTMLParagraphElement&&(i.some(d=>d.contains(l))||i.push(l));if(a){for(const l of o)l.htmlFor=ne(a);if(e&&m(n,"data-validation")==="form"){c=a.matches(":valid");for(const l of s)m(l,"hidden",c?"":null)}na(r),mi(a),pi(a),m(a,"aria-describedby",i.map(ne).join(" ")||null),m(a,"aria-invalid",`${!c}`)}}}function pi(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function na(t){const{control:e,list:n}=t||{};if(t&&n&&!t.hasAttribute("data-sr-added")){const o=window.getComputedStyle(t);m(t,"data-sr-added",B(o,"combobox-added")),m(t,"data-sr-empty",B(o,"combobox-empty")),m(t,"data-sr-found",B(o,"combobox-found")),m(t,"data-sr-invalid",B(o,"combobox-invalid")),m(t,"data-sr-of",B(o,"combobox-of")),m(t,"data-sr-remove",B(o,"combobox-remove")),m(t,"data-sr-removed",B(o,"combobox-removed")),m(n,"data-sr-plural",B(o,"datalist-plural")),m(n,"data-sr-singular",B(o,"datalist-singular"))}n&&e&&!n.hasAttribute("popover")&&(m(n,"popover","manual"),m(e,"popovertarget",ne(n)))}function mi(t){const e=t?.nextElementSibling,n=e&&m(e,"data-count");if(e&&n){const o=Number(n)-t.value.length,i=o<0,s=m(e,"aria-live")==="polite",r=window.getComputedStyle(e||t),a=B(r,"count-over"),c=B(r,"count-under");if(s!==i){m(e,"aria-live",i?"polite":"off");for(const l of ui)e.classList.toggle(l,i)}e.textContent=(i?a:c).replace("%d",`${Math.abs(o)}`)}}function oa(t){if(t.target instanceof ai){const e=t.target,o=e.getRootNode()?.querySelector(`[popovertarget="${e.id}"]`);t.newState==="closed"?ot(e,!1):o&&ot(e,o,{placement:m(e,"data-position")??"bottom",middleware:[Ie(),Le(),Bo({padding:10,apply({availableHeight:i}){e.style.width=`${o.offsetWidth}px`,e.style.maxHeight=`${Math.max(50,i)}px`}})]})}}function ia(t){Re(t.target)&&(mi(t.target),pi(t.target))}function sa(t){const e=t.target?.closest?.(`.${Ge}`);t.type==="invalid"&&e&&t.preventDefault(),fi(document.getElementsByClassName(Ge),!0)}R(()=>{gt(document.documentElement,Ge,fi),C(document,"input",ia,M),C(document,"invalid,submit",sa,!0),C(document,"toggle",oa,M)});const ra=T.fieldset.split(" ")[0],aa=T.validation.split(" ")[0],hi="aria-describedby",la="aria-invalid";function ca(t){setTimeout(()=>{for(const e of t)if(e.isConnected){const n=[];let o=null,i=!0;for(const s of e.getElementsByTagName("*"))s.classList.contains(aa)?(i=m(s,"data-color")==="success"||!s.clientHeight,o=ne(s)):Re(s)&&n.push(s);for(const s of n){const r=m(s,hi)?.replace(o||"#","");m(s,hi,`${o||""} ${r||""}`.trim()),m(s,la,`${!i}`)}}})}R(()=>gt(document.documentElement,ra,ca));const da=T.logo.split(" ")[0];function ua([t]){if(t?.isConnected&&t?.firstElementChild instanceof SVGSVGElement){for(const a of document.head.querySelectorAll("link[rel~='icon']"))a.setAttribute("rel","disabled");const e=t.firstElementChild,n=t?.hasAttribute("data-env"),o=window.getComputedStyle(e),i=o.getPropertyValue("color"),s=o.getPropertyValue("--mtds-logo-color"),r=e.outerHTML.replace(/\n+/g," ").replace(/(fill|width|height|xmlns)="[^"]+"/gi,"").replace("<svg",`<svg width="40" height="40" fill="${i}"`);document.head.appendChild(Object.assign(document.createElement("link"),{href:`data:image/svg+xml,${encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 55 55'><rect fill='${n?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${n?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${r}</g></svg>`)}`,rel:"icon"}))}}R(()=>gt(document.documentElement,da,ua));const gi=T.popover.split(" ")[0];let bi=0;function fa({target:t,newState:e}){if(t instanceof HTMLElement&&t.classList.contains(gi)){const n=e==="closed",o=m(t,"data-overscroll")==="contain",i=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);bi+=n?-1:1,n?ot(t,!1):i&&ot(t,i,{placement:m(t,"data-position")||"bottom",middleware:[Ie(),Le({padding:10})].concat(o?Bo({padding:10,apply({availableHeight:s}){t.style.maxHeight=`${Math.max(50,s)}px`}}):[])})}}function pa({target:t}){const e=bi&&t?.closest?.("a,[popovertargetaction]");if(e){const n=m(e,"popovertargetaction")||"toggle",o=n==="show"||(n==="hide"?!1:void 0),s=(document.getElementById(m(e,"popovertarget")||"")||e).closest(`.${gi}`);s?.isConnected&&s?.togglePopover&&s.togglePopover(o)}}R(()=>{C(document,"toggle",fa,M),C(document,"click",pa)});const ma=T.table.split(" ")[0];function ha(t){for(const e of t){const n=Array.from(e.tHead?.rows[0]?.cells||[],o=>o.innerText.trim());for(const o of e.tBodies)for(const i of o.rows)for(const s of i.cells)m(s,"data-th",n[s.cellIndex]||":empty")}}R(()=>gt(document.documentElement,ma,ha));const ga=`.${T.togglegroup.split(" ")[0]}`;function ba(t){const{key:e,target:n}=t,o=n instanceof HTMLInputElement&&n.closest(ga);if(o&&(e==="Enter"&&n.click(),e?.startsWith("Arrow"))){t.preventDefault();const i=o.getElementsByTagName("input"),s=[...i].indexOf(n),r=e.match(/Arrow(Right|Down)/)?1:-1;i[(i.length+s+r)%i.length]?.focus()}}R(()=>C(document,"keydown",ba));const vi="aria-describedby",_i="Escape",le="aria-labelledby",va="--mtds-tooltip-position",_a=300,F=wt?document.getElementById("mtds-tooltip")||Object.assign(document.createElement("div"),{className:T._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let G=null,yi=Number.NEGATIVE_INFINITY,wi=0;function Qe({target:t,type:e,key:n}){if(e==="keydown"&&n!==_i)return;const o=yi+_a-Date.now();clearTimeout(wi),wi=setTimeout(ya,Math.max(o,0),n===_i?null:t)}function ya(t){if(yi=Date.now(),!F||t===F)return;F?.isConnected||document.body.append(F);let e=t?.closest?.("[data-tooltip]")||null;if(e===G)return;const n=e&&m(e,"data-tooltip")||"",o=e&&m(e,"data-tooltip-position")||window.getComputedStyle(e||document.body).getPropertyValue(va)?.trim()||"top";(!n||n==="false"||n==="true"||o==="none")&&(e=null),e&&(F.textContent=n);const s=G&&m(G,le)===F?.id,r=(e instanceof HTMLElement?e.innerText:e?.textContent)?.trim()||e?.hasAttribute(le)||e?.hasAttribute("aria-label");G?.removeAttribute(s?le:vi),ot(F,!1),G=e,G&&m(G,r?vi:le,F?.id),G?.isConnected&&F.hidePopover(),F.togglePopover(!!e),ot(F,e||!1,{placement:o,middleware:[Ie(),Le({padding:10})]})}R(()=>{C(document,"blur,focus,mouseout,mouseover",Qe,M),C(window,"keydown",Qe,M),C(window,"blur",Qe,M)});var Ei=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",xi;Ei&&/^Mac/i.test(((xi=navigator.userAgentData)==null?void 0:xi.platform)||navigator.platform);var wa=":host(:not([hidden])) { display: block }",Si=typeof HTMLElement>"u"?class{}:HTMLElement;function Q(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var Ti=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Ci=(t,...e)=>Ti("add",t,e),$i=(t,...e)=>Ti("remove",t,e),Ea=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},xa=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},Je=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))Q(o,i,s);return o},Ai={define:(t,e)=>!Ei||window.customElements.get(t)||window.customElements.define(t,e)},Sa=`${wa}
|
|
24
24
|
::slotted(u-summary) { cursor: pointer; display: block }
|
|
25
25
|
::slotted(u-summary)::before { content: ''; display: inline-block; vertical-align: middle; margin-inline: .05em .3125em; border-block: .3125em solid transparent; border-inline-start: .5em solid }
|
|
26
26
|
::slotted(u-summary[aria-expanded="true"])::before { rotate: 90deg }
|
|
@@ -29,4 +29,4 @@ var mtds=function(O){"use strict";var Pi=Object.defineProperty,en=Object.getOwnP
|
|
|
29
29
|
:host(:not([value])) { background: linear-gradient(90deg,currentColor 25%, transparent 50%, currentColor 75%) 50%/400% }
|
|
30
30
|
@media (prefers-reduced-motion: no-preference) { :host { animation: indeterminate 2s linear infinite } }
|
|
31
31
|
@keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`,Ze=!1,Oi=class extends Aa{static get observedAttributes(){return["aria-label","aria-labelledby","value","max"]}constructor(){super(),this.shadowRoot||this.attachShadow({mode:"open"}).append(Ii("slot",null,{hidden:""}),Ii("style",Ra))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(Ze)return;Ze=!0;const t=$a||ki,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let n=Ma(this);if(t&&(n=`${n.replace(/\d+%$/,"")} ${e}%`),ki)for(const o of this.labels)k(o,"aria-label",n);k(this,"aria-busy",`${this.position===-1}`),k(this,"aria-label",n.trim()),k(this,"aria-labelledby",null),k(this,"aria-valuemax","100"),k(this,"aria-valuemin","0"),k(this,"aria-valuenow",`${e}`),k(this,"role",t?"img":"progressbar"),Ze=!1}get labels(){const t=this.closest("label:not([for])"),e=Ia(this);return t&&(t.htmlFor=e),ka(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return Ri(this,"value")}set value(t){Di(this,"value",t)}get max(){return Ri(this,"max")||1}set max(t){Di(this,"max",t)}};Oi.formAssociated=!0;var Mi=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),Ri=(t,e)=>{const n=k(t,e);return Mi(n)?Math.max(0,Number.parseFloat(n)):null},Di=(t,e,n)=>{if(n===null||Mi(n))k(t,e,`${n}`);else throw new Error(`Failed to set non-numeric '${k}': '${n}'`)};return Oa.define("u-progress",Oi),O.UHTMLComboboxElement=me,O.UHTMLTabElement=En,O.UHTMLTabListElement=wn,O.UHTMLTabPanelElement=xn,O.UHTMLTabsElement=yn,O.analytics=Vo,O.pagination=kr,O.styles=vs,O.toggleAppExpanded=jo,O.version=bs,Object.defineProperty(O,Symbol.toStringTag,{value:"Module"}),O}({});
|
|
32
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtY29tYm9ib3gvZGlzdC91LWNvbWJvYm94LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCIuLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2NvcmUvZGlzdC9mbG9hdGluZy11aS5jb3JlLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5kb20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS9kb20vZGlzdC9mbG9hdGluZy11aS5kb20ubWpzIiwiLi4vZGVzaWduc3lzdGVtL3V0aWxzLnRzIiwiLi4vZGVzaWduc3lzdGVtL2FuYWx5dGljcy9hbmFseXRpY3MudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC10b2dnbGUuanMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9wYWdpbmF0aW9uL3BhZ2luYXRpb24taGVscGVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWJzLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2RpYWxvZy9kaWFsb2ctb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZXJyb3JzdW1tYXJ5L2Vycm9yc3VtbWFyeS1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRhdGFsaXN0L2Rpc3QvdS1kYXRhbGlzdC5qcyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZC9maWVsZC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZHNldC9maWVsZHNldC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9sb2dvL2xvZ28tb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vcG9wb3Zlci9wb3BvdmVyLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RhYmxlL3RhYmxlLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RvZ2dsZWdyb3VwL3RvZ2dsZWdyb3VwLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3Rvb2x0aXAvdG9vbHRpcC1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRldGFpbHMvZGlzdC91LWRldGFpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1wcm9ncmVzcy9kaXN0L3UtcHJvZ3Jlc3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuXG4vLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0ZJUkVGT1ggPSBJU19CUk9XU0VSICYmIC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBGT0NVU19PVVRMSU5FID0gXCJvdXRsaW5lOiAxcHggZG90dGVkOyBvdXRsaW5lOiA1cHggYXV0byBIaWdobGlnaHQ7IG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvclwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChfZXJyKSB7XG4gIH1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgKGRldGFpbCkgPT4gZWxlbWVudC5oYW5kbGVFdmVudCh7IHR5cGU6IFwibXV0YXRpb25cIiwgZGV0YWlsIH0pXG4gICAgKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIG9ic2VydmVycy5zZXQoZWxlbWVudCwgb2JzZXJ2ZXIpO1xuICB9XG59O1xudmFyIGFzQnV0dG9uID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGlzQ2xpY2sgPSBcImtleVwiIGluIGV2ZW50ICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKTtcbiAgaWYgKGlzQ2xpY2spIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChpc0NsaWNrICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBldmVudC50YXJnZXQuY2xpY2soKTtcbiAgcmV0dXJuIGlzQ2xpY2s7XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dDIsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQyKSBlbC50ZXh0Q29udGVudCA9IHRleHQyO1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZ2V0TGFiZWwgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgbGFiZWwgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikgfHwgXCJcIjtcbiAgY29uc3QgbGFiZWxzID0gKChfYTIgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxsZWRieVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkuc3BsaXQoL1xccysvKSkgfHwgW107XG4gIHJldHVybiBbXG4gICAgLi4ubGFiZWxzLm1hcCgoaWQyKSA9PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZDIpKSxcbiAgICAvLyBHZXQgYWxsIGxhYmVsbGVkYnkgZWxlbWVudHNcbiAgICAuLi5BcnJheS5mcm9tKGVsLmxhYmVscyB8fCBbXSlcbiAgICAvLyBHZXQgYWxsIDxsYWJlbD4gZWxlbWVudHNcbiAgXS5yZWR1Y2UoKGFjYywgZWwyKSA9PiB7XG4gICAgdmFyIF9hMztcbiAgICByZXR1cm4gYWNjIHx8ICgoX2EzID0gZWwyID09IG51bGwgPyB2b2lkIDAgOiBlbDIuaW5uZXJUZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnRyaW0oKSkgfHwgXCJcIjtcbiAgfSwgbGFiZWwpO1xufTtcbnZhciBMSVZFO1xudmFyIExJVkVfU1JfRklYID0gMDtcbnZhciBzcGVhayA9ICh0ZXh0MikgPT4ge1xuICBpZiAoIUxJVkUpIHtcbiAgICBMSVZFID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBMSVZFLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gICAgYXR0cihMSVZFLCBcImFyaWEtbGl2ZVwiLCBcImFzc2VydGl2ZVwiKTtcbiAgfVxuICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKExJVkUpO1xuICBpZiAodGV4dDIpIExJVkUudGV4dENvbnRlbnQgPSBgJHt0ZXh0Mn0ke0xJVkVfU1JfRklYKysgJSAyID8gXCJcXHhBMFwiIDogXCJcIn1gO1xufTtcbnZhciBzZXRWYWx1ZSA9IChpbnB1dCwgZGF0YSwgdHlwZSA9IFwiXCIpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSwgZGF0YSwgaW5wdXRUeXBlOiB0eXBlIH07XG4gIGNvbnN0IHByb3RvID0gSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGU7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJiZWZvcmVpbnB1dFwiLCBldmVudCkpO1xuICAoX2IgPSAoX2EyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgXCJ2YWx1ZVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5zZXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKGlucHV0LCBkYXRhKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImlucHV0XCIsIGV2ZW50KSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG59O1xudmFyIElTX1BSRVNTID0gZmFsc2U7XG52YXIgaXNNb3VzZURvd24gPSAoZXZlbnQpID0+IHtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2V1cFwiKSBJU19QUkVTUyA9IGZhbHNlO1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZWRvd25cIikge1xuICAgIElTX1BSRVNTID0gdHJ1ZTtcbiAgICBvbihkb2N1bWVudCwgXCJtb3VzZXVwXCIsIGlzTW91c2VEb3duLCB7IG9uY2U6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIElTX1BSRVNTO1xufTtcbnZhciBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QgPSAoc3R5bGUsIHNsb3QgPSBcIjxzbG90Pjwvc2xvdD5cIikgPT4gYDx0ZW1wbGF0ZSBzaGFkb3dyb290bW9kZT1cIm9wZW5cIj4ke3Nsb3R9PHN0eWxlPiR7c3R5bGV9PC9zdHlsZT48L3RlbXBsYXRlPmA7XG5cbi8vIHUtY29tYm9ib3gudHNcbnZhciBVSFRNTENvbWJvYm94U3R5bGUgPSBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2s7IC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKSB9IC8qIE11c3QgYmUgZGlzcGxheSBibG9jayBpbiBTYWZhcmkgdG8gYWxsb3cgZm9jdXMgaW5zaWRlICovXG46aG9zdCg6bm90KFtkYXRhLW11bHRpcGxlXSkpIDo6c2xvdHRlZChkYXRhKSxcbjpob3N0KFtkYXRhLW11bHRpcGxlPVwiZmFsc2VcIl0pIDo6c2xvdHRlZChkYXRhKSB7IGRpc3BsYXk6IG5vbmUgfSAvKiBIaWRlIGRhdGEgaWYgbm90IG11bHRpcGxlICovXG46OnNsb3R0ZWQoaW5wdXRbaW5wdXRtb2RlPVwibm9uZVwiXSkgeyBvdXRsaW5lOiBub25lIH0gLyogSGlkZSB0ZW1wb3JhcnkgZm91Y3Mgb3V0bGluZSBmbGFzaCAqL1xuOjpzbG90dGVkKGRlbCkgeyB0ZXh0LWRlY29yYXRpb246IG5vbmUgfVxuOjpzbG90dGVkKGRhdGE6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBvaW50ZXItZXZlbnRzOiBub25lIH1cbjo6c2xvdHRlZChkYXRhKTo6YWZ0ZXIgeyBjb250ZW50OiAnXFxcXDAwRDcnOyBjb250ZW50OiAnXFxcXDAwRDcnIC8gJyc7IHBhZGRpbmctaW5saW5lOiAuNWNoOyBwb2ludGVyLWV2ZW50czogYXV0bzsgY3Vyc29yOiBwb2ludGVyIH1cbjo6c2xvdHRlZChkYXRhOmZvY3VzKSB7ICR7Rk9DVVNfT1VUTElORX0gfWA7XG52YXIgVUhUTUxDb21ib2JveFNoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoVUhUTUxDb21ib2JveFN0eWxlKTtcbnZhciBFVkVOVFMgPSBcImJlZm9yZWlucHV0LGJsdXIsZm9jdXMsY2xpY2ssaW5wdXQsa2V5ZG93bixtb3VzZWRvd25cIjtcbnZhciBFVkVOVF9PTkNFID0geyBvbmNlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG52YXIgSVNfRklSRUZPWF9ERVNLVE9QID0gSVNfRklSRUZPWCAmJiAhSVNfQU5EUk9JRDtcbnZhciBJU19NT0JJTEUgPSBJU19BTkRST0lEIHx8IElTX0lPUztcbnZhciBNT0RJRklFRCA9IFwiXFx1MjAwQlwiLnJlcGVhdCg1KTtcbnZhciBGQUxTRSA9IFwiZmFsc2VcIjtcbnZhciBURVhUUyA9IHtcbiAgYWRkZWQ6IFwiQWRkZWRcIixcbiAgZW1wdHk6IFwiTm8gc2VsZWN0ZWRcIixcbiAgZm91bmQ6IFwiTmF2aWdhdGUgbGVmdCB0byBmaW5kICVkIHNlbGVjdGVkXCIsXG4gIGludmFsaWQ6IFwiSW52YWxpZCB2YWx1ZVwiLFxuICBvZjogXCJvZlwiLFxuICByZW1vdmU6IFwiUHJlc3MgdG8gcmVtb3ZlXCIsXG4gIHJlbW92ZWQ6IFwiUmVtb3ZlZFwiXG59O1xudmFyIFVIVE1MQ29tYm9ib3hFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2l0ZW0gPSBcIlwiO1xuICAgIHRoaXMuX3NwZWFrID0gXCJcIjtcbiAgICB0aGlzLl90ZXh0cyA9IF9fc3ByZWFkVmFsdWVzKHt9LCBURVhUUyk7XG4gICAgdGhpcy5fdmFsdWUgPSBcIlwiO1xuICAgIGlmICghdGhpcy5zaGFkb3dSb290KVxuICAgICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAgICAgICAvLyBDb250ZW50IHNsb3RcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIFVIVE1MQ29tYm9ib3hTdHlsZSlcbiAgICAgICk7XG4gIH1cbiAgLy8gTG9jYWxseSBzdG9yZSB2YWx1ZSB0byBzdG9yZSB2YWx1ZSBiZWZvcmUgaW5wdXQtY2xpY2tcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKFRFWFRTKS5tYXAoKGtleSkgPT4gYGRhdGEtc3ItJHtrZXl9YCk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgb24odGhpcywgRVZFTlRTLCB0aGlzLCB0cnVlKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1widmFsdWVcIiwgXCJpZFwiXSxcbiAgICAgIC8vIFJlc3BvbmQgdG8gY2hhbmdlcyBpbiA8ZGF0YT4gdmFsdWUgb3IgY2hhbmdlIG9mIGlkIGZvciA8ZGF0YWxpc3Q+IHRvIHJlY29ubmVjdCB3aXRoIGlucHV0XG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgIC8vIFJlc3BvbmQgdG8gY2hhbmdlcyBpbiA8ZGF0YT4gdGV4dENvbnRlbnRcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KHJlbmRlciwgMCwgdGhpcyk7XG4gICAgc2V0VGltZW91dChzeW5jSW5wdXRWYWx1ZSwgMCwgdGhpcyk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIF8sIHZhbCkge1xuICAgIGNvbnN0IHRleHQyID0gcHJvcC5zcGxpdChcImRhdGEtc3ItXCIpWzFdO1xuICAgIGlmIChURVhUU1t0ZXh0Ml0pIHRoaXMuX3RleHRzW3RleHQyXSA9IHZhbCB8fCBURVhUU1t0ZXh0Ml07XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gICAgb2ZmKHRoaXMsIEVWRU5UUywgdGhpcywgdHJ1ZSk7XG4gICAgdGhpcy5faXRlbXMgPSB0aGlzLl9jbGVhciA9IHRoaXMuX2ZvY3VzID0gdGhpcy5fY29udHJvbCA9IHZvaWQgMDtcbiAgICB0aGlzLl9saXN0ID0gdGhpcy5fb3B0aW9ucyA9IHRoaXMuX3Jvb3QgPSB2b2lkIDA7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJiZWZvcmVpbnB1dFwiKSB0aGlzLl92YWx1ZSA9ICh0YXJnZXQgPT0gbnVsbCA/IHZvaWQgMCA6IHRhcmdldC52YWx1ZSkgfHwgXCJcIjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJibHVyXCIpIG9uQmx1cih0aGlzKTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSBvbkNsaWNrKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJmb2N1c1wiKSBvbkZvY3VzKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJpbnB1dFwiKSBvbklucHV0KHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIG9uS2V5RG93bih0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwibW91c2Vkb3duXCIpIGlzTW91c2VEb3duKGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJtdXRhdGlvblwiKSByZW5kZXIodGhpcywgZXZlbnQpO1xuICB9XG4gIGdldCBtdWx0aXBsZSgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IGF0dHIodGhpcywgXCJkYXRhLW11bHRpcGxlXCIpKSAhPSBudWxsID8gX2EyIDogRkFMU0UpICE9PSBGQUxTRTtcbiAgfVxuICBzZXQgbXVsdGlwbGUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwiZGF0YS1tdWx0aXBsZVwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgY3JlYXRhYmxlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gYXR0cih0aGlzLCBcImRhdGEtY3JlYXRhYmxlXCIpKSAhPSBudWxsID8gX2EyIDogRkFMU0UpICE9PSBGQUxTRTtcbiAgfVxuICBzZXQgY3JlYXRhYmxlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImRhdGEtY3JlYXRhYmxlXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBjb250cm9sKCkge1xuICAgIHZhciBfYTI7XG4gICAgaWYgKCEoKF9hMiA9IHRoaXMuX2NvbnRyb2wpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKVxuICAgICAgdGhpcy5fY29udHJvbCA9IHRoaXMucXVlcnlTZWxlY3RvcihcImlucHV0XCIpO1xuICAgIHJldHVybiB0aGlzLl9jb250cm9sO1xuICB9XG4gIGdldCBsaXN0KCkge1xuICAgIHZhciBfYTI7XG4gICAgaWYgKCEoKF9hMiA9IHRoaXMuX2xpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKVxuICAgICAgdGhpcy5fbGlzdCA9IHRoaXMucXVlcnlTZWxlY3RvcihcInUtZGF0YWxpc3QsZGF0YWxpc3RcIik7XG4gICAgcmV0dXJuIHRoaXMuX2xpc3Q7XG4gIH1cbiAgZ2V0IGNsZWFyKCkge1xuICAgIHZhciBfYTI7XG4gICAgaWYgKCEoKF9hMiA9IHRoaXMuX2NsZWFyKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmlzQ29ubmVjdGVkKSkgdGhpcy5fY2xlYXIgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJkZWxcIik7XG4gICAgcmV0dXJuIHRoaXMuX2NsZWFyO1xuICB9XG4gIGdldCBpdGVtcygpIHtcbiAgICBpZiAoIXRoaXMuX2l0ZW1zKSB0aGlzLl9pdGVtcyA9IHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJkYXRhXCIpO1xuICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgfVxuICBnZXQgb3B0aW9ucygpIHtcbiAgICB2YXIgX2EyLCBfYjtcbiAgICBpZiAoIXRoaXMuX29wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHRhZyA9ICgoX2EyID0gdGhpcy5saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLm5vZGVOYW1lKSA9PT0gXCJVLURBVEFMSVNUXCIgPyBcInUtb3B0aW9uXCIgOiBcIm9wdGlvblwiO1xuICAgICAgdGhpcy5fb3B0aW9ucyA9IChfYiA9IHRoaXMubGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG4gIGdldCB2YWx1ZXMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLml0ZW1zXS5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpO1xuICB9XG59O1xudmFyIHRleHQgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgcmV0dXJuICgoX2EyID0gZWwgPT0gbnVsbCA/IHZvaWQgMCA6IGVsLnRleHRDb250ZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKSkgfHwgXCJcIjtcbn07XG52YXIgaXNEYXRhID0gKGVsKSA9PiBlbCBpbnN0YW5jZW9mIEhUTUxEYXRhRWxlbWVudDtcbnZhciBpc0Rpc2FibGVkID0gKHsgY29udHJvbCB9KSA9PiAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5kaXNhYmxlZCkgfHwgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wucmVhZE9ubHkpIHx8IGZhbHNlO1xudmFyIHJlbmRlciA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF9mb2N1cywgX3RleHRzLCBpdGVtcywgY29udHJvbCwgbGlzdCwgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGlmICghY29udHJvbCB8fCAhbGlzdCkgcmV0dXJuO1xuICBjb25zdCBwcmV2ID0gZ2V0TGFiZWwoY29udHJvbCk7XG4gIGNvbnN0IG5leHQgPSBwcmV2LmVuZHNXaXRoKE1PRElGSUVEKSA/IGF0dHIoY29udHJvbCwgXCJkYXRhLWxhYmVsXCIpIDogcHJldjtcbiAgYXR0cihjb250cm9sLCBcImRhdGEtbGFiZWxcIiwgbmV4dCk7XG4gIGxldCBsYWJlbCA9IGAke25leHR9JHttdWx0aXBsZSA/IGAsICR7aXRlbXMubGVuZ3RoID8gX3RleHRzLmZvdW5kLnJlcGxhY2UoXCIlZFwiLCBgJHtpdGVtcy5sZW5ndGh9YCkgOiBfdGV4dHMuZW1wdHl9YCA6IFwiXCJ9YDtcbiAgY29uc3QgZWRpdHMgPSBbXTtcbiAgZm9yIChjb25zdCB7IGFkZGVkTm9kZXMsIHJlbW92ZWROb2RlcyB9IG9mIChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQuZGV0YWlsKSB8fCBbXSkge1xuICAgIGZvciAoY29uc3QgZWwgb2YgYWRkZWROb2RlcykgaWYgKGlzRGF0YShlbCkpIGVkaXRzLnVuc2hpZnQoZWwpO1xuICAgIGZvciAoY29uc3QgZWwgb2YgcmVtb3ZlZE5vZGVzKSBpZiAoaXNEYXRhKGVsKSkgZWRpdHMucHVzaChlbCk7XG4gIH1cbiAgY29uc3Qgc2hvdWxkQW5ub3VuY2UgPSBtdWx0aXBsZSA/IGVkaXRzLmxlbmd0aCA9PT0gMSA6IGVkaXRzWzBdID09PSBfZm9jdXM7XG4gIGlmIChfZm9jdXMgJiYgc2hvdWxkQW5ub3VuY2UpIHtcbiAgICBjb25zdCBhcmlhRXhwYW5kZWQgPSBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiKTtcbiAgICBjb25zdCBpbnB1dE1vZGUgPSBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIpO1xuICAgIGNvbnN0IG5leHRGb2N1cyA9IGlzRGF0YShfZm9jdXMpID8gY29udHJvbCA6IF9mb2N1cztcbiAgICBjb25zdCBpc1JlbW92ZSA9ICFlZGl0c1swXS5pc0Nvbm5lY3RlZDtcbiAgICBzZWxmLl9zcGVhayA9IGAke190ZXh0c1tpc1JlbW92ZSA/IFwicmVtb3ZlZFwiIDogXCJhZGRlZFwiXX0gJHt0ZXh0KGVkaXRzWzBdKX0sIGA7XG4gICAgaWYgKElTX01PQklMRSB8fCBfZm9jdXMgPT09IGNvbnRyb2wpIHNwZWFrKHNlbGYuX3NwZWFrKTtcbiAgICBpZiAoY29udHJvbCAhPT0gbmV4dEZvY3VzKSB7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiLCBudWxsKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgXCJub25lXCIpO1xuICAgICAgbGFiZWwgPSBcIlxceEEwXCI7XG4gICAgICBjb250cm9sLmZvY3VzKCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIGF0dHIoY29udHJvbCwgXCJhcmlhLWV4cGFuZGVkXCIsIGFyaWFFeHBhbmRlZCk7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIsIGlzUmVtb3ZlID8gXCJub25lXCIgOiBpbnB1dE1vZGUpO1xuICAgICAgKF9hMyA9IG5leHRGb2N1cyA9PSBudWxsID8gdm9pZCAwIDogbmV4dEZvY3VzLmZvY3VzKSA9PSBudWxsID8gdm9pZCAwIDogX2EzLmNhbGwobmV4dEZvY3VzKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgaW5wdXRNb2RlKTtcbiAgICAgIHNlbGYuX3NwZWFrID0gXCJcIjtcbiAgICAgIGlmIChJU19GSVJFRk9YX0RFU0tUT1ApIG9uKHNlbGYsIFwiYmx1clwiLCAoKSA9PiByZW5kZXIoc2VsZiksIEVWRU5UX09OQ0UpO1xuICAgICAgZWxzZSBzZXRUaW1lb3V0KHJlbmRlciwgMTAwLCBzZWxmKTtcbiAgICB9LCAxMDApO1xuICB9XG4gIGxldCBpZHggPSAwO1xuICBjb25zdCBzZWxlY3QgPSBzZWxmLnF1ZXJ5U2VsZWN0b3IoXCJzZWxlY3RcIik7XG4gIGNvbnN0IHJlbW92ZSA9IGlzRGlzYWJsZWQoc2VsZikgPyBcIlwiIDogYCR7X3RleHRzLnJlbW92ZX0sIGA7XG4gIGZvciAoY29uc3QgaXRlbTIgb2YgaXRlbXMpIHtcbiAgICBjb25zdCBvcHRpb24gPSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zW2lkeF07XG4gICAgY29uc3QgbGFiZWwyID0gdGV4dChpdGVtMik7XG4gICAgY29uc3QgdmFsdWUgPSBpdGVtMi52YWx1ZSB8fCBsYWJlbDI7XG4gICAgY29uc3QgYXJpYSA9IGAke3NlbGYuX3NwZWFrfSR7bGFiZWwyfSwgJHtyZW1vdmV9JHsrK2lkeH0gJHtfdGV4dHMub2Z9ICR7aXRlbXMubGVuZ3RofWA7XG4gICAgYXR0cihpdGVtMiwgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIGF0dHIoaXRlbTIsIFwidmFsdWVcIiwgdmFsdWUpO1xuICAgIGF0dHIoaXRlbTIsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICBhdHRyKGl0ZW0yLCBcImFyaWEtbGFiZWxcIiwgYXJpYSk7XG4gICAgaWYgKG9wdGlvbikgT2JqZWN0LmFzc2lnbihvcHRpb24sIHsgdGV4dENvbnRlbnQ6IGxhYmVsMiwgdmFsdWUgfSk7XG4gICAgZWxzZSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5hcHBlbmRDaGlsZChuZXcgT3B0aW9uKGxhYmVsMiwgdmFsdWUsIHRydWUsIHRydWUpKTtcbiAgfVxuICBpZiAoc2VsZWN0KSBhdHRyKHNlbGVjdCwgXCJtdWx0aXBsZVwiLCBtdWx0aXBsZSA/IFwiXCIgOiBudWxsKTtcbiAgZm9yIChjb25zdCBvcHQgb2YgWy4uLihzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zKSB8fCBbXV0uc2xpY2UoaWR4KSkgb3B0LnJlbW92ZSgpO1xuICBpZiAoIW11bHRpcGxlICYmIGlkeCA+IDEpXG4gICAgY29uc29sZS53YXJuKFwidS1jb21ib2JveDogTXVsdGlwbGUgPGRhdGE+IGZvdW5kIGluIHNpbmdsZSBtb2RlLlwiKTtcbiAgYXR0cihsaXN0LCBcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCIsIGAke211bHRpcGxlfWApO1xuICBhdHRyKGNvbnRyb2wsIFwibGlzdFwiLCB1c2VJZChsaXN0KSk7XG4gIGF0dHIoY29udHJvbCwgXCJhcmlhLWxhYmVsXCIsIGAke3NlbGYuX3NwZWFrfSR7bGFiZWx9JHtNT0RJRklFRH1gKTtcbiAgaWYgKGxpc3QuaGFzQXR0cmlidXRlKFwicG9wb3ZlclwiKSkge1xuICAgIGF0dHIoY29udHJvbCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKGxpc3QpKTtcbiAgICBhdHRyKGxpc3QsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcbiAgfVxuICBjb25zdCBpdGVtID0gdGV4dChpdGVtc1swXSk7XG4gIGlmIChpdGVtICE9PSBzZWxmLl9pdGVtKSBzeW5jSW5wdXRWYWx1ZShzZWxmKTtcbiAgc2VsZi5faXRlbSA9IGl0ZW07XG4gIHN5bmNDbGVhcldpdGhJbnB1dChzZWxmKTtcbiAgc3luY09wdGlvbnNXaXRoSXRlbXMoc2VsZik7XG4gIChfYTIgPSBtdXRhdGlvbk9ic2VydmVyKHNlbGYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRha2VSZWNvcmRzKCk7XG59O1xudmFyIHN5bmNDbGVhcldpdGhJbnB1dCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChzZWxmLmNsZWFyKSBhdHRyKHNlbGYuY2xlYXIsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgaWYgKHNlbGYuY2xlYXIpIHNlbGYuY2xlYXIuaGlkZGVuID0gISgoX2EyID0gc2VsZi5jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnZhbHVlKSB8fCBpc0Rpc2FibGVkKHNlbGYpO1xufTtcbnZhciBzeW5jT3B0aW9uc1dpdGhJdGVtcyA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgX3NwZWFrLCBvcHRpb25zID0gW10sIHZhbHVlcyB9ID0gc2VsZjtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gKF9hMiA9IGF0dHIob3B0LCBcInZhbHVlXCIpKSAhPSBudWxsID8gX2EyIDogdGV4dChvcHQpO1xuICAgIGF0dHIob3B0LCBcImFyaWEtbGFiZWxcIiwgX3NwZWFrID8gYCR7X3NwZWFrfSR7dGV4dChvcHQpfWAgOiBudWxsKTtcbiAgICBhdHRyKG9wdCwgXCJzZWxlY3RlZFwiLCB2YWx1ZXMuaW5jbHVkZXModmFsdWUpID8gXCJcIiA6IG51bGwpO1xuICB9XG59O1xudmFyIHN5bmNJbnB1dFZhbHVlID0gKHNlbGYpID0+IHtcbiAgY29uc3QgeyBtdWx0aXBsZSwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gdGV4dChpdGVtc1swXSk7XG4gIGlmICghbXVsdGlwbGUgJiYgY29udHJvbCAmJiB2YWx1ZSAhPT0gY29udHJvbC52YWx1ZSlcbiAgICBzZXRWYWx1ZShjb250cm9sLCB2YWx1ZSwgdmFsdWUgPyBcImluc2VydFRleHRcIiA6IFwiZGVsZXRlQ29udGVudFwiKTtcbn07XG52YXIgZGlzcGF0Y2hNYXRjaCA9IChzZWxmLCBjaGFuZ2UgPSB0cnVlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgX3RleHRzLCBvcHRpb25zID0gW10sIGNyZWF0YWJsZSwgY29udHJvbCwgaXRlbXMsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IHF1ZXJ5ID0gdmFsdWUudG9Mb3dlckNhc2UoKSB8fCBudWxsO1xuICBsZXQgbWF0Y2ggPSBbLi4ub3B0aW9uc10uZmluZChcbiAgICAob3B0KSA9PiAoYXR0cihvcHQsIFwibGFiZWxcIikgfHwgdGV4dChvcHQpKS50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gcXVlcnlcbiAgKTtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogbWF0Y2ggfTtcbiAgaWYgKCFzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiY29tYm9ib3hiZWZvcmVtYXRjaFwiLCBldmVudCkpKVxuICAgIG1hdGNoID0gWy4uLm9wdGlvbnNdLmZpbmQoKG8pID0+IG8uc2VsZWN0ZWQpO1xuICBpZiAoY2hhbmdlKSB7XG4gICAgc3luY09wdGlvbnNXaXRoSXRlbXMoc2VsZik7XG4gICAgaWYgKG1hdGNoKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgbWF0Y2gsIGZhbHNlKTtcbiAgICBpZiAoY3JlYXRhYmxlICYmIHZhbHVlKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgeyB2YWx1ZSB9LCBmYWxzZSk7XG4gICAgaWYgKCFtdWx0aXBsZSAmJiAhdmFsdWUgJiYgaXRlbXNbMF0pIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1zWzBdKTtcbiAgICBlbHNlIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICAgIHJldHVybiBzcGVhayhfdGV4dHMuaW52YWxpZCk7XG4gIH1cbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykgb3B0LnNlbGVjdGVkID0gb3B0ID09PSBtYXRjaDtcbn07XG52YXIgZGlzcGF0Y2hDaGFuZ2UgPSAoc2VsZiwgaXRlbSwgcmVtb3ZhYmxlID0gdHJ1ZSkgPT4ge1xuICBjb25zdCB7IGNvbnRyb2wsIGl0ZW1zLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgYWRkID0gY3JlYXRlRWxlbWVudChcImRhdGFcIiwgaXRlbS5sYWJlbCB8fCBpdGVtLnZhbHVlLCB7XG4gICAgdmFsdWU6IGl0ZW0udmFsdWVcbiAgfSk7XG4gIGNvbnN0IHJlbW92ZSA9IFsuLi5pdGVtc10uZmluZCgoaSkgPT4gaS52YWx1ZSA9PT0gaXRlbS52YWx1ZSk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IHJlbW92ZSB8fCBhZGQgfTtcbiAgY29uc3Qgc2tpcCA9IHJlbW92ZSAmJiAhcmVtb3ZhYmxlO1xuICBpZiAoc2tpcCkgcmV0dXJuIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICBpZiAoc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImNvbWJvYm94YmVmb3Jlc2VsZWN0XCIsIGV2ZW50KSkpIHtcbiAgICBpZiAoIW11bHRpcGxlKSBmb3IgKGNvbnN0IGl0ZW0yIG9mIFsuLi5pdGVtc10pIGl0ZW0yLnJlbW92ZSgpO1xuICAgIGlmIChyZW1vdmUpIHJlbW92ZS5yZW1vdmUoKTtcbiAgICBlbHNlIGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYmVmb3JlYmVnaW5cIiwgYWRkKTtcbiAgICBzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiY29tYm9ib3hhZnRlcnNlbGVjdFwiLCBldmVudCkpO1xuICB9XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgeyB0YXJnZXQgfSkgPT4ge1xuICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHNlbGYuX2ZvY3VzID0gdGFyZ2V0O1xuICBzcGVhaygpO1xufTtcbnZhciBvbkJsdXIgPSAoc2VsZikgPT4gaXNNb3VzZURvd24oKSB8fCBzZXRUaW1lb3V0KG9uQmx1cnJlZCwgMCwgc2VsZik7XG52YXIgb25CbHVycmVkID0gKHNlbGYpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9mb2N1cyB8fCBzZWxmLmNvbnRhaW5zKChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpKSByZXR1cm47XG4gIGlmICghc2VsZi5tdWx0aXBsZSkgZGlzcGF0Y2hNYXRjaChzZWxmKTtcbiAgc2VsZi5fZm9jdXMgPSB2b2lkIDA7XG59O1xudmFyIG9uQ2xpY2sgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgY29uc3QgeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5LCB0YXJnZXQgfSA9IGV2ZW50O1xuICBjb25zdCB7IGNsZWFyLCBjb250cm9sLCBpdGVtcyB9ID0gc2VsZjtcbiAgaWYgKGNsZWFyID09IG51bGwgPyB2b2lkIDAgOiBjbGVhci5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgaWYgKGNvbnRyb2wpIHNldFZhbHVlKGNvbnRyb2wsIFwiXCIsIFwiZGVsZXRlQ29udGVudEJhY2t3YXJkXCIpO1xuICAgIHJldHVybiBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCk7XG4gIH1cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKGl0ZW0uY29udGFpbnModGFyZ2V0KSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW0pO1xuICAgIGlmICh5ID49IHRvcCAmJiB5IDw9IGJvdHRvbSAmJiB4ID49IGxlZnQgJiYgeCA8PSByaWdodCkgcmV0dXJuIGl0ZW0uZm9jdXMoKTtcbiAgfVxuICBpZiAodGFyZ2V0ID09PSBzZWxmKSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCk7XG59O1xudmFyIG9uSW5wdXQgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgeyBvcHRpb25zID0gW10sIGNvbnRyb2wsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IGlzQ2xpY2sgPSBldmVudCBpbnN0YW5jZW9mIElucHV0RXZlbnQgPyAhZXZlbnQuaW5wdXRUeXBlIHx8IGV2ZW50LmlucHV0VHlwZSA9PT0gXCJpbnNlcnRSZXBsYWNlbWVudFRleHRcIiA6ICEhdmFsdWU7XG4gIGlmIChpc0NsaWNrKSB7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGNvbnRyb2wpIGNvbnRyb2wudmFsdWUgPSBzZWxmLl92YWx1ZTtcbiAgICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKVxuICAgICAgaWYgKG9wdC52YWx1ZSAmJiBvcHQudmFsdWUgPT09IHZhbHVlKVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgb3B0LCBtdWx0aXBsZSk7XG4gIH0gZWxzZSBpZiAoIW11bHRpcGxlKSBkaXNwYXRjaE1hdGNoKHNlbGYsIGZhbHNlKTtcbiAgc3luY0NsZWFyV2l0aElucHV0KHNlbGYpO1xufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkpIHJldHVybjtcbiAgY29uc3QgeyBjbGVhciwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGNvbnN0IHsga2V5LCByZXBlYXQsIHRhcmdldCB9ID0gZXZlbnQ7XG4gIGNvbnN0IGlzQ29udHJvbCA9IGNvbnRyb2wgJiYgY29udHJvbCA9PT0gdGFyZ2V0O1xuICBjb25zdCBpblRleHQgPSBpc0NvbnRyb2wgJiYgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuc2VsZWN0aW9uRW5kKTtcbiAgbGV0IGluZGV4ID0gaXNDb250cm9sID8gaXRlbXMubGVuZ3RoIDogWy4uLml0ZW1zXS5pbmRleE9mKHRhcmdldCk7XG4gIGlmIChpc0NvbnRyb2wgJiYga2V5ID09PSBcIlRhYlwiICYmIGNsZWFyICYmICFjbGVhci5oaWRkZW4pIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNsZWFyLnRhYkluZGV4ID0gLTE7XG4gICAgY2xlYXIuZm9jdXMoKTtcbiAgICBvbihjbGVhciwgXCJibHVyXCIsICgpID0+IGF0dHIoY2xlYXIsIFwidGFiaW5kZXhcIiwgbnVsbCksIEVWRU5UX09OQ0UpO1xuICB9XG4gIGlmICghaXNDb250cm9sICYmIGFzQnV0dG9uKGV2ZW50KSB8fCBpbmRleCA9PT0gLTEpIHJldHVybjtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIgJiYgIWlzQ29udHJvbCkgaW5kZXggKz0gMTtcbiAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93TGVmdFwiICYmICFpblRleHQpIGluZGV4IC09IDE7XG4gIGVsc2UgaWYgKGtleSA9PT0gXCJFbnRlclwiICYmIGlzQ29udHJvbCkge1xuICAgIGNvbnN0IGZvcm0gPSBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiKTtcbiAgICBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiLCBcIiNcIik7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IGF0dHIoY29udHJvbCwgXCJmb3JtXCIsIGZvcm0pKTtcbiAgICByZXR1cm4gZGlzcGF0Y2hNYXRjaChzZWxmKTtcbiAgfSBlbHNlIGlmICgoa2V5ID09PSBcIkJhY2tzcGFjZVwiIHx8IGtleSA9PT0gXCJEZWxldGVcIikgJiYgIWluVGV4dCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCFyZXBlYXQgJiYgaXRlbXNbaW5kZXhdKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgaXRlbXNbaW5kZXhdKTtcbiAgICBpZiAoaXNDb250cm9sKSBpbmRleCAtPSAxO1xuICB9IGVsc2UgcmV0dXJuIGlzQ29udHJvbCB8fCAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpKTtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgKF9hMiA9IGl0ZW1zW01hdGgubWF4KDAsIGluZGV4KV0gfHwgY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtY29tYm9ib3hcIiwgVUhUTUxDb21ib2JveEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTENvbWJvYm94RWxlbWVudCwgVUhUTUxDb21ib2JveFNoYWRvd1Jvb3QsIFVIVE1MQ29tYm9ib3hTdHlsZSB9O1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgU0FGRV9MQUJFTExFREJZID0gYCR7SVNfQU5EUk9JRCA/IFwiZGF0YVwiIDogXCJhcmlhXCJ9LWxhYmVsbGVkYnlgO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuc2hhZG93Um9vdCB8fCBlbGVtZW50LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gIC8vIFVubmFtZWQgc2xvdCBkb2VzIGF1dG9tYXRpY2FsbHkgcmVuZGVyIGFsbCB0b3AgZWxlbWVudCBub2Rlc1xuICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgY3NzKVxuKTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoX2Vycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZGVjbGFyYXRpdmVTaGFkb3dSb290ID0gKHN0eWxlLCBzbG90ID0gXCI8c2xvdD48L3Nsb3Q+XCIpID0+IGA8dGVtcGxhdGUgc2hhZG93cm9vdG1vZGU9XCJvcGVuXCI+JHtzbG90fTxzdHlsZT4ke3N0eWxlfTwvc3R5bGU+PC90ZW1wbGF0ZT5gO1xuXG4vLyB1LXRhYnMudHNcbnZhciBVSFRNTFRhYnNTdHlsZSA9IERJU1BMQVlfQkxPQ0s7XG52YXIgVUhUTUxUYWJMaXN0U3R5bGUgPSBESVNQTEFZX0JMT0NLO1xudmFyIFVIVE1MVGFiUGFuZWxTdHlsZSA9IERJU1BMQVlfQkxPQ0s7XG52YXIgVUhUTUxUYWJTdHlsZSA9ICc6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGN1cnNvcjogcG9pbnRlciB9Omhvc3QoW2FyaWEtZGlzYWJsZWQ9XCJ0cnVlXCJdKSB7IGN1cnNvcjogZGVmYXVsdCB9JztcbnZhciBVSFRNTFRhYnNTaGFkb3dSb290ID0gZGVjbGFyYXRpdmVTaGFkb3dSb290KFVIVE1MVGFic1N0eWxlKTtcbnZhciBVSFRNTFRhYkxpc3RTaGFkb3dSb290ID0gZGVjbGFyYXRpdmVTaGFkb3dSb290KFVIVE1MVGFiTGlzdFN0eWxlKTtcbnZhciBVSFRNTFRhYlNoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoVUhUTUxUYWJTdHlsZSk7XG52YXIgVUhUTUxUYWJQYW5lbFNoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoVUhUTUxUYWJQYW5lbFN0eWxlKTtcbnZhciBBUklBX0NPTlRST0xTID0gXCJhcmlhLWNvbnRyb2xzXCI7XG52YXIgQVJJQV9TRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xudmFyIFVIVE1MVGFic0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgVUhUTUxUYWJzU3R5bGUpO1xuICB9XG4gIGdldCB0YWJMaXN0KCkge1xuICAgIHJldHVybiBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYmxpc3RcIiwgdGhpcylbMF0gfHwgbnVsbDtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFiXCIsIHRoaXMpO1xuICB9XG4gIGdldCBwYW5lbHMoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFicGFuZWxcIiwgdGhpcyk7XG4gIH1cbn07XG52YXIgVUhUTUxUYWJMaXN0RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBVSFRNTFRhYkxpc3RTdHlsZSk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJ0YWJsaXN0XCIpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoKSB0aGlzLmhhbmRsZUV2ZW50KCk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgb2ZmKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIGZhbHNlKTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGlmICghZXZlbnQgfHwgZXZlbnQudHlwZSA9PT0gXCJtdXRhdGlvblwiKSB7XG4gICAgICBjb25zdCB0YWIgPSB0aGlzLnRhYnNbTWF0aC5tYXgodGhpcy5zZWxlY3RlZEluZGV4LCAwKV07XG4gICAgICByZXR1cm4gdGFiID09IG51bGwgPyB2b2lkIDAgOiB0YWIuc2V0QXR0cmlidXRlKEFSSUFfU0VMRUNURUQsIFwidHJ1ZVwiKTtcbiAgICB9XG4gICAgY29uc3QgeyBrZXkgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHRhYnMgPSBbLi4udGhpcy50YWJzXTtcbiAgICBjb25zdCBwcmV2ID0gdGFicy5maW5kSW5kZXgoKHRhYikgPT4gdGFiLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpO1xuICAgIGxldCBuZXh0ID0gcHJldjtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCBwcmV2ID09PSAtMSkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIpIHNldFNlbGVjdGVkKHRhYnNbcHJldl0pO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIiAmJiAhYXNCdXR0b24oZXZlbnQpKSB7XG4gICAgICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiIHx8IGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiArIDEpICUgdGFicy5sZW5ndGg7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiQXJyb3dVcFwiIHx8IGtleSA9PT0gXCJBcnJvd0xlZnRcIilcbiAgICAgICAgbmV4dCA9IChwcmV2IHx8IHRhYnMubGVuZ3RoKSAtIDE7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiRW5kXCIpIG5leHQgPSB0YWJzLmxlbmd0aCAtIDE7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiSG9tZVwiKSBuZXh0ID0gMDtcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJUYWJcIikgbmV4dCA9IGdldFNlbGVjdGVkSW5kZXgodGFicyk7XG4gICAgICBlbHNlIHJldHVybjtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0YWJzW3ByZXZdLnRhYkluZGV4ID0gLTE7XG4gICAgICAgIHRhYnNbbmV4dF0udGFiSW5kZXggPSAwO1xuICAgICAgfSk7XG4gICAgICBpZiAoa2V5ICE9PSBcIlRhYlwiKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRhYnNbbmV4dF0uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpO1xuICB9XG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICBzZXRTZWxlY3RlZCh0aGlzLnRhYnNbaW5kZXhdKTtcbiAgfVxufTtcbnZhciBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG52YXIgVUhUTUxUYWJFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiaWRcIiwgQVJJQV9TRUxFQ1RFRCwgQVJJQV9DT05UUk9MU107XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBVSFRNTFRhYlN0eWxlKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcInRhYlwiKTtcbiAgICB0aGlzLnRhYkluZGV4ID0gdGhpcy5zZWxlY3RlZCA/IDAgOiAtMTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFTS0lQX0FUVFJfQ0hBTkdFICYmIHRoaXMuc2VsZWN0ZWQgJiYgdGhpcy50YWJMaXN0KSB7XG4gICAgICBTS0lQX0FUVFJfQ0hBTkdFID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHRhYnMgPSBbLi4udGhpcy50YWJMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKV07XG4gICAgICBjb25zdCBwYW5lbHMgPSBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYnBhbmVsXCIsIHRoaXMudGFic0VsZW1lbnQgfHwgdGhpcyk7XG4gICAgICBjb25zdCBuZXh0UGFuZWwgPSBnZXRQYW5lbCh0aGlzLCBwYW5lbHNbdGFicy5pbmRleE9mKHRoaXMpXSk7XG4gICAgICBpZiAobmV4dFBhbmVsKSBhdHRyKG5leHRQYW5lbCwgU0FGRV9MQUJFTExFREJZLCB1c2VJZCh0aGlzKSk7XG4gICAgICB0YWJzLmZvckVhY2goKHRhYiwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSBnZXRQYW5lbCh0YWIsIHBhbmVsc1tpbmRleF0pO1xuICAgICAgICB0YWIudGFiSW5kZXggPSB0YWIgPT09IHRoaXMgPyAwIDogLTE7XG4gICAgICAgIGF0dHIodGFiLCBBUklBX1NFTEVDVEVELCBgJHt0YWIgPT09IHRoaXN9YCk7XG4gICAgICAgIGF0dHIodGFiLCBBUklBX0NPTlRST0xTLCAocGFuZWwgPT0gbnVsbCA/IHZvaWQgMCA6IHBhbmVsLmlkKSB8fCBudWxsKTtcbiAgICAgICAgaWYgKHBhbmVsKSBwYW5lbC5oaWRkZW4gPSBwYW5lbCAhPT0gbmV4dFBhbmVsO1xuICAgICAgfSk7XG4gICAgICBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJMaXN0KCkge1xuICAgIGNvbnN0IHRhYmxpc3QgPSB0aGlzLnBhcmVudEVsZW1lbnQ7XG4gICAgcmV0dXJuICh0YWJsaXN0ID09IG51bGwgPyB2b2lkIDAgOiB0YWJsaXN0Lm5vZGVOYW1lKSA9PT0gXCJVLVRBQkxJU1RcIiA/IHRhYmxpc3QgOiBudWxsO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBBUklBX1NFTEVDVEVEKSA9PT0gXCJ0cnVlXCI7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBBUklBX1NFTEVDVEVELCBgJHshIXZhbHVlfWApO1xuICB9XG4gIC8qKiBSZXRyaWV2ZXMgdGhlIG9yZGluYWwgcG9zaXRpb24gb2YgYW4gdGFiIGluIGEgdGFibGlzdC4gKi9cbiAgZ2V0IGluZGV4KCkge1xuICAgIGNvbnN0IHRhYkxpc3QgPSB0aGlzLnRhYkxpc3Q7XG4gICAgcmV0dXJuIHRhYkxpc3QgPyBbLi4udGFiTGlzdC5xdWVyeVNlbGVjdG9yQWxsKFwidS10YWJcIildLmluZGV4T2YodGhpcykgOiAwO1xuICB9XG4gIGdldCBwYW5lbCgpIHtcbiAgICByZXR1cm4gZ2V0UGFuZWwodGhpcyk7XG4gIH1cbn07XG52YXIgVUhUTUxUYWJQYW5lbEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJoaWRkZW5cIl07XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBVSFRNTFRhYlBhbmVsU3R5bGUpO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFicGFuZWxcIik7XG4gICAgdGhpcy5oaWRkZW4gPSBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicykgPT09IC0xO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGNvbnN0IGhpZGRlbiA9IHRoaXMuaGlkZGVuO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWhpZGRlblwiLCBgJHtoaWRkZW59YCk7XG4gICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIGhpZGRlbiB8fCBpc0ZvY3VzYWJsZSh0aGlzLmZpcnN0Q2hpbGQpID8gbnVsbCA6IFwiMFwiKTtcbiAgfVxuICBnZXQgdGFic0VsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcInUtdGFic1wiKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICBjb25zdCBjc3MgPSBgdS10YWJbJHtBUklBX0NPTlRST0xTfT1cIiR7dGhpcy5pZH1cIl1gO1xuICAgIHJldHVybiBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoY3NzKTtcbiAgfVxufTtcbnZhciBxdWVyeVdpdGhvdXROZXN0ZWQgPSAodGFnLCBzZWxmKSA9PiBzZWxmLnF1ZXJ5U2VsZWN0b3JBbGwoYCR7dGFnfTpub3QoOnNjb3BlIHUtdGFicGFuZWwgJHt0YWd9KWApO1xudmFyIGdldFBhbmVsID0gKHRhYiwgcGFuZWwpID0+IHtcbiAgY29uc3QgaWQyID0gYXR0cih0YWIsIEFSSUFfQ09OVFJPTFMpIHx8IHVzZUlkKHBhbmVsKTtcbiAgY29uc3QgZWwgPSBnZXRSb290KHRhYikuZ2V0RWxlbWVudEJ5SWQoaWQyKTtcbiAgcmV0dXJuIChlbCA9PSBudWxsID8gdm9pZCAwIDogZWwubm9kZU5hbWUpID09PSBcIlUtVEFCUEFORUxcIiA/IGVsIDogbnVsbDtcbn07XG52YXIgZ2V0U2VsZWN0ZWRJbmRleCA9ICh0YWJzKSA9PiBbLi4udGFic10uZmluZEluZGV4KCh0YWIpID0+IGF0dHIodGFiLCBBUklBX1NFTEVDVEVEKSA9PT0gXCJ0cnVlXCIpO1xudmFyIHNldFNlbGVjdGVkID0gKHRhYikgPT4gdGFiICYmIGF0dHIodGFiLCBcImFyaWEtZGlzYWJsZWRcIikgIT09IFwidHJ1ZVwiICYmIGF0dHIodGFiLCBcImFyaWEtc2VsZWN0ZWRcIiwgXCJ0cnVlXCIpO1xudmFyIGlzRm9jdXNhYmxlID0gKGVsKSA9PiBlbCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgIWVsLm1hdGNoZXMoJzpkaXNhYmxlZCxbdGFiaW5kZXhePVwiLVwiXScpICYmIGVsLm1hdGNoZXMoXG4gIGBbY29udGVudGVkaXRhYmxlXSxbY29udHJvbHNdLFtocmVmXSxbdGFiaW5kZXhdLGlucHV0Om5vdChbdHlwZT1cImhpZGRlblwiXSksc2VsZWN0LHRleHRhcmVhLGJ1dHRvbixzdW1tYXJ5LGlmcmFtZWBcbik7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYnNcIiwgVUhUTUxUYWJzRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYmxpc3RcIiwgVUhUTUxUYWJMaXN0RWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYlwiLCBVSFRNTFRhYkVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJwYW5lbFwiLCBVSFRNTFRhYlBhbmVsRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MVGFiRWxlbWVudCwgVUhUTUxUYWJMaXN0RWxlbWVudCwgVUhUTUxUYWJMaXN0U2hhZG93Um9vdCwgVUhUTUxUYWJMaXN0U3R5bGUsIFVIVE1MVGFiUGFuZWxFbGVtZW50LCBVSFRNTFRhYlBhbmVsU2hhZG93Um9vdCwgVUhUTUxUYWJQYW5lbFN0eWxlLCBVSFRNTFRhYlNoYWRvd1Jvb3QsIFVIVE1MVGFiU3R5bGUsIFVIVE1MVGFic0VsZW1lbnQsIFVIVE1MVGFic1NoYWRvd1Jvb3QsIFVIVE1MVGFic1N0eWxlIH07XG4iLCIvKipcbiAqIEN1c3RvbSBwb3NpdGlvbmluZyByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy92aXJ0dWFsLWVsZW1lbnRzXG4gKi9cblxuY29uc3Qgc2lkZXMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddO1xuY29uc3QgYWxpZ25tZW50cyA9IFsnc3RhcnQnLCAnZW5kJ107XG5jb25zdCBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL3NpZGVzLnJlZHVjZSgoYWNjLCBzaWRlKSA9PiBhY2MuY29uY2F0KHNpZGUsIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMF0sIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMV0pLCBbXSk7XG5jb25zdCBtaW4gPSBNYXRoLm1pbjtcbmNvbnN0IG1heCA9IE1hdGgubWF4O1xuY29uc3Qgcm91bmQgPSBNYXRoLnJvdW5kO1xuY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yO1xuY29uc3QgY3JlYXRlQ29vcmRzID0gdiA9PiAoe1xuICB4OiB2LFxuICB5OiB2XG59KTtcbmNvbnN0IG9wcG9zaXRlU2lkZU1hcCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmNvbnN0IG9wcG9zaXRlQWxpZ25tZW50TWFwID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmZ1bmN0aW9uIGNsYW1wKHN0YXJ0LCB2YWx1ZSwgZW5kKSB7XG4gIHJldHVybiBtYXgoc3RhcnQsIG1pbih2YWx1ZSwgZW5kKSk7XG59XG5mdW5jdGlvbiBldmFsdWF0ZSh2YWx1ZSwgcGFyYW0pIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKHBhcmFtKSA6IHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0U2lkZShwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QXhpc0xlbmd0aChheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG59XG5jb25zdCB5QXhpc1NpZGVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWyd0b3AnLCAnYm90dG9tJ10pO1xuZnVuY3Rpb24gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSB7XG4gIHJldHVybiB5QXhpc1NpZGVzLmhhcyhnZXRTaWRlKHBsYWNlbWVudCkpID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGdldE9wcG9zaXRlQXhpcyhnZXRTaWRlQXhpcyhwbGFjZW1lbnQpKTtcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudFNpZGVzKHBsYWNlbWVudCwgcmVjdHMsIHJ0bCkge1xuICBpZiAocnRsID09PSB2b2lkIDApIHtcbiAgICBydGwgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChhbGlnbm1lbnRBeGlzKTtcbiAgbGV0IG1haW5BbGlnbm1lbnRTaWRlID0gYWxpZ25tZW50QXhpcyA9PT0gJ3gnID8gYWxpZ25tZW50ID09PSAocnRsID8gJ2VuZCcgOiAnc3RhcnQnKSA/ICdyaWdodCcgOiAnbGVmdCcgOiBhbGlnbm1lbnQgPT09ICdzdGFydCcgPyAnYm90dG9tJyA6ICd0b3AnO1xuICBpZiAocmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gPiByZWN0cy5mbG9hdGluZ1tsZW5ndGhdKSB7XG4gICAgbWFpbkFsaWdubWVudFNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluQWxpZ25tZW50U2lkZSk7XG4gIH1cbiAgcmV0dXJuIFttYWluQWxpZ25tZW50U2lkZSwgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpbkFsaWdubWVudFNpZGUpXTtcbn1cbmZ1bmN0aW9uIGdldEV4cGFuZGVkUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgY29uc3Qgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGFsaWdubWVudCA9PiBvcHBvc2l0ZUFsaWdubWVudE1hcFthbGlnbm1lbnRdKTtcbn1cbmNvbnN0IGxyUGxhY2VtZW50ID0gWydsZWZ0JywgJ3JpZ2h0J107XG5jb25zdCBybFBsYWNlbWVudCA9IFsncmlnaHQnLCAnbGVmdCddO1xuY29uc3QgdGJQbGFjZW1lbnQgPSBbJ3RvcCcsICdib3R0b20nXTtcbmNvbnN0IGJ0UGxhY2VtZW50ID0gWydib3R0b20nLCAndG9wJ107XG5mdW5jdGlvbiBnZXRTaWRlTGlzdChzaWRlLCBpc1N0YXJ0LCBydGwpIHtcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgaWYgKHJ0bCkgcmV0dXJuIGlzU3RhcnQgPyBybFBsYWNlbWVudCA6IGxyUGxhY2VtZW50O1xuICAgICAgcmV0dXJuIGlzU3RhcnQgPyBsclBsYWNlbWVudCA6IHJsUGxhY2VtZW50O1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiBpc1N0YXJ0ID8gdGJQbGFjZW1lbnQgOiBidFBsYWNlbWVudDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFtdO1xuICB9XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKHBsYWNlbWVudCwgZmxpcEFsaWdubWVudCwgZGlyZWN0aW9uLCBydGwpIHtcbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGxldCBsaXN0ID0gZ2V0U2lkZUxpc3QoZ2V0U2lkZShwbGFjZW1lbnQpLCBkaXJlY3Rpb24gPT09ICdzdGFydCcsIHJ0bCk7XG4gIGlmIChhbGlnbm1lbnQpIHtcbiAgICBsaXN0ID0gbGlzdC5tYXAoc2lkZSA9PiBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnQpO1xuICAgIGlmIChmbGlwQWxpZ25tZW50KSB7XG4gICAgICBsaXN0ID0gbGlzdC5jb25jYXQobGlzdC5tYXAoZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxpc3Q7XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgc2lkZSA9PiBvcHBvc2l0ZVNpZGVNYXBbc2lkZV0pO1xufVxuZnVuY3Rpb24gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICAgIC4uLnBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhZGRpbmdPYmplY3QocGFkZGluZykge1xuICByZXR1cm4gdHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSA6IHtcbiAgICB0b3A6IHBhZGRpbmcsXG4gICAgcmlnaHQ6IHBhZGRpbmcsXG4gICAgYm90dG9tOiBwYWRkaW5nLFxuICAgIGxlZnQ6IHBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gcmVjdDtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIGxlZnQ6IHgsXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmV4cG9ydCB7IGFsaWdubWVudHMsIGNsYW1wLCBjcmVhdGVDb29yZHMsIGV2YWx1YXRlLCBleHBhbmRQYWRkaW5nT2JqZWN0LCBmbG9vciwgZ2V0QWxpZ25tZW50LCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0QXhpc0xlbmd0aCwgZ2V0RXhwYW5kZWRQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBeGlzLCBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZVBsYWNlbWVudCwgZ2V0UGFkZGluZ09iamVjdCwgZ2V0U2lkZSwgZ2V0U2lkZUF4aXMsIG1heCwgbWluLCBwbGFjZW1lbnRzLCByZWN0VG9DbGllbnRSZWN0LCByb3VuZCwgc2lkZXMgfTtcbiIsImltcG9ydCB7IGdldFNpZGVBeGlzLCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBeGlzTGVuZ3RoLCBnZXRTaWRlLCBnZXRBbGlnbm1lbnQsIGV2YWx1YXRlLCBnZXRQYWRkaW5nT2JqZWN0LCByZWN0VG9DbGllbnRSZWN0LCBtaW4sIGNsYW1wLCBwbGFjZW1lbnRzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQsIGdldE9wcG9zaXRlUGxhY2VtZW50LCBnZXRFeHBhbmRlZFBsYWNlbWVudHMsIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMsIHNpZGVzLCBtYXgsIGdldE9wcG9zaXRlQXhpcyB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5leHBvcnQgeyByZWN0VG9DbGllbnRSZWN0IH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcblxuZnVuY3Rpb24gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQoX3JlZiwgcGxhY2VtZW50LCBydGwpIHtcbiAgbGV0IHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmdcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IHNpZGVBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25MZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGFsaWdubWVudEF4aXMpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBpc1ZlcnRpY2FsID0gc2lkZUF4aXMgPT09ICd5JztcbiAgY29uc3QgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGZsb2F0aW5nLndpZHRoIC8gMjtcbiAgY29uc3QgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBmbG9hdGluZy5oZWlnaHQgLyAyO1xuICBjb25zdCBjb21tb25BbGlnbiA9IHJlZmVyZW5jZVthbGlnbkxlbmd0aF0gLyAyIC0gZmxvYXRpbmdbYWxpZ25MZW5ndGhdIC8gMjtcbiAgbGV0IGNvb3JkcztcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBmbG9hdGluZy5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54IC0gZmxvYXRpbmcud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cbiAgc3dpdGNoIChnZXRBbGlnbm1lbnQocGxhY2VtZW50KSkge1xuICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgIGNvb3Jkc1thbGlnbm1lbnRBeGlzXSAtPSBjb21tb25BbGlnbiAqIChydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmQnOlxuICAgICAgY29vcmRzW2FsaWdubWVudEF4aXNdICs9IGNvbW1vbkFsaWduICogKHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBjb29yZHM7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICpcbiAqIFRoaXMgZXhwb3J0IGRvZXMgbm90IGhhdmUgYW55IGBwbGF0Zm9ybWAgaW50ZXJmYWNlIGxvZ2ljLiBZb3Ugd2lsbCBuZWVkIHRvXG4gKiB3cml0ZSBvbmUgZm9yIHRoZSBwbGF0Zm9ybSB5b3UgYXJlIHVzaW5nIEZsb2F0aW5nIFVJIHdpdGguXG4gKi9cbmNvbnN0IGNvbXB1dGVQb3NpdGlvbiA9IGFzeW5jIChyZWZlcmVuY2UsIGZsb2F0aW5nLCBjb25maWcpID0+IHtcbiAgY29uc3Qge1xuICAgIHBsYWNlbWVudCA9ICdib3R0b20nLFxuICAgIHN0cmF0ZWd5ID0gJ2Fic29sdXRlJyxcbiAgICBtaWRkbGV3YXJlID0gW10sXG4gICAgcGxhdGZvcm1cbiAgfSA9IGNvbmZpZztcbiAgY29uc3QgdmFsaWRNaWRkbGV3YXJlID0gbWlkZGxld2FyZS5maWx0ZXIoQm9vbGVhbik7XG4gIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZmxvYXRpbmcpKTtcbiAgbGV0IHJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmcsXG4gICAgc3RyYXRlZ3lcbiAgfSk7XG4gIGxldCB7XG4gICAgeCxcbiAgICB5XG4gIH0gPSBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChyZWN0cywgcGxhY2VtZW50LCBydGwpO1xuICBsZXQgc3RhdGVmdWxQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gIGxldCBtaWRkbGV3YXJlRGF0YSA9IHt9O1xuICBsZXQgcmVzZXRDb3VudCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsaWRNaWRkbGV3YXJlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIGZuXG4gICAgfSA9IHZhbGlkTWlkZGxld2FyZVtpXTtcbiAgICBjb25zdCB7XG4gICAgICB4OiBuZXh0WCxcbiAgICAgIHk6IG5leHRZLFxuICAgICAgZGF0YSxcbiAgICAgIHJlc2V0XG4gICAgfSA9IGF3YWl0IGZuKHtcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgaW5pdGlhbFBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICAgIHN0cmF0ZWd5LFxuICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICBmbG9hdGluZ1xuICAgICAgfVxuICAgIH0pO1xuICAgIHggPSBuZXh0WCAhPSBudWxsID8gbmV4dFggOiB4O1xuICAgIHkgPSBuZXh0WSAhPSBudWxsID8gbmV4dFkgOiB5O1xuICAgIG1pZGRsZXdhcmVEYXRhID0ge1xuICAgICAgLi4ubWlkZGxld2FyZURhdGEsXG4gICAgICBbbmFtZV06IHtcbiAgICAgICAgLi4ubWlkZGxld2FyZURhdGFbbmFtZV0sXG4gICAgICAgIC4uLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChyZXNldCAmJiByZXNldENvdW50IDw9IDUwKSB7XG4gICAgICByZXNldENvdW50Kys7XG4gICAgICBpZiAodHlwZW9mIHJlc2V0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAocmVzZXQucGxhY2VtZW50KSB7XG4gICAgICAgICAgc3RhdGVmdWxQbGFjZW1lbnQgPSByZXNldC5wbGFjZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc2V0LnJlY3RzKSB7XG4gICAgICAgICAgcmVjdHMgPSByZXNldC5yZWN0cyA9PT0gdHJ1ZSA/IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgICAgICBmbG9hdGluZyxcbiAgICAgICAgICAgIHN0cmF0ZWd5XG4gICAgICAgICAgfSkgOiByZXNldC5yZWN0cztcbiAgICAgICAgfVxuICAgICAgICAoe1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeVxuICAgICAgICB9ID0gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQocmVjdHMsIHN0YXRlZnVsUGxhY2VtZW50LCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGkgPSAtMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICBzdHJhdGVneSxcbiAgICBtaWRkbGV3YXJlRGF0YVxuICB9O1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBvZiBvdmVyZmxvdyBzaWRlIG9mZnNldHMgdGhhdCBkZXRlcm1pbmUgaG93IG11Y2ggdGhlXG4gKiBlbGVtZW50IGlzIG92ZXJmbG93aW5nIGEgZ2l2ZW4gY2xpcHBpbmcgYm91bmRhcnkgb24gZWFjaCBzaWRlLlxuICogLSBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBib3VuZGFyeSBieSB0aGF0IG51bWJlciBvZiBwaXhlbHNcbiAqIC0gbmVnYXRpdmUgPSBob3cgbWFueSBwaXhlbHMgbGVmdCBiZWZvcmUgaXQgd2lsbCBvdmVyZmxvd1xuICogLSAwID0gbGllcyBmbHVzaCB3aXRoIHRoZSBib3VuZGFyeVxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2RldGVjdE92ZXJmbG93XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIHZhciBfYXdhaXQkcGxhdGZvcm0kaXNFbGU7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgY29uc3Qge1xuICAgIHgsXG4gICAgeSxcbiAgICBwbGF0Zm9ybSxcbiAgICByZWN0cyxcbiAgICBlbGVtZW50cyxcbiAgICBzdHJhdGVneVxuICB9ID0gc3RhdGU7XG4gIGNvbnN0IHtcbiAgICBib3VuZGFyeSA9ICdjbGlwcGluZ0FuY2VzdG9ycycsXG4gICAgcm9vdEJvdW5kYXJ5ID0gJ3ZpZXdwb3J0JyxcbiAgICBlbGVtZW50Q29udGV4dCA9ICdmbG9hdGluZycsXG4gICAgYWx0Qm91bmRhcnkgPSBmYWxzZSxcbiAgICBwYWRkaW5nID0gMFxuICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgY29uc3QgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSAnZmxvYXRpbmcnID8gJ3JlZmVyZW5jZScgOiAnZmxvYXRpbmcnO1xuICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICBjb25zdCBjbGlwcGluZ0NsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KGF3YWl0IHBsYXRmb3JtLmdldENsaXBwaW5nUmVjdCh7XG4gICAgZWxlbWVudDogKChfYXdhaXQkcGxhdGZvcm0kaXNFbGUgPSBhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoZWxlbWVudCkpKSAhPSBudWxsID8gX2F3YWl0JHBsYXRmb3JtJGlzRWxlIDogdHJ1ZSkgPyBlbGVtZW50IDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCAoYXdhaXQgKHBsYXRmb3JtLmdldERvY3VtZW50RWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnRzLmZsb2F0aW5nKSkpLFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9KSk7XG4gIGNvbnN0IHJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gJ2Zsb2F0aW5nJyA/IHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGg6IHJlY3RzLmZsb2F0aW5nLndpZHRoLFxuICAgIGhlaWdodDogcmVjdHMuZmxvYXRpbmcuaGVpZ2h0XG4gIH0gOiByZWN0cy5yZWZlcmVuY2U7XG4gIGNvbnN0IG9mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBvZmZzZXRTY2FsZSA9IChhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQob2Zmc2V0UGFyZW50KSkpID8gKGF3YWl0IChwbGF0Zm9ybS5nZXRTY2FsZSA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0U2NhbGUob2Zmc2V0UGFyZW50KSkpIHx8IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfSA6IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfTtcbiAgY29uc3QgZWxlbWVudENsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KHBsYXRmb3JtLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0ID8gYXdhaXQgcGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Qoe1xuICAgIGVsZW1lbnRzLFxuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0pIDogcmVjdCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiAoY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wKSAvIG9mZnNldFNjYWxlLnksXG4gICAgYm90dG9tOiAoZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSAvIG9mZnNldFNjYWxlLnksXG4gICAgbGVmdDogKGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCkgLyBvZmZzZXRTY2FsZS54LFxuICAgIHJpZ2h0OiAoZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0KSAvIG9mZnNldFNjYWxlLnhcbiAgfTtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIHBvc2l0aW9uIGFuIGlubmVyIGVsZW1lbnQgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgc28gdGhhdCBpdFxuICogYXBwZWFycyBjZW50ZXJlZCB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXJyb3dcbiAqL1xuY29uc3QgYXJyb3cgPSBvcHRpb25zID0+ICh7XG4gIG5hbWU6ICdhcnJvdycsXG4gIG9wdGlvbnMsXG4gIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgY29uc3Qge1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBwbGFjZW1lbnQsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHMsXG4gICAgICBtaWRkbGV3YXJlRGF0YVxuICAgIH0gPSBzdGF0ZTtcbiAgICAvLyBTaW5jZSBgZWxlbWVudGAgaXMgcmVxdWlyZWQsIHdlIGRvbid0IFBhcnRpYWw8PiB0aGUgdHlwZS5cbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcGFkZGluZyA9IDBcbiAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpIHx8IHt9O1xuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgeCxcbiAgICAgIHlcbiAgICB9O1xuICAgIGNvbnN0IGF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gICAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChheGlzKTtcbiAgICBjb25zdCBhcnJvd0RpbWVuc2lvbnMgPSBhd2FpdCBwbGF0Zm9ybS5nZXREaW1lbnNpb25zKGVsZW1lbnQpO1xuICAgIGNvbnN0IGlzWUF4aXMgPSBheGlzID09PSAneSc7XG4gICAgY29uc3QgbWluUHJvcCA9IGlzWUF4aXMgPyAndG9wJyA6ICdsZWZ0JztcbiAgICBjb25zdCBtYXhQcm9wID0gaXNZQXhpcyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICBjb25zdCBjbGllbnRQcm9wID0gaXNZQXhpcyA/ICdjbGllbnRIZWlnaHQnIDogJ2NsaWVudFdpZHRoJztcbiAgICBjb25zdCBlbmREaWZmID0gcmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gKyByZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBjb29yZHNbYXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIGNvbnN0IHN0YXJ0RGlmZiA9IGNvb3Jkc1theGlzXSAtIHJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgICBjb25zdCBhcnJvd09mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50KSk7XG4gICAgbGV0IGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGFycm93T2Zmc2V0UGFyZW50W2NsaWVudFByb3BdIDogMDtcblxuICAgIC8vIERPTSBwbGF0Zm9ybSBjYW4gcmV0dXJuIGB3aW5kb3dgIGFzIHRoZSBgb2Zmc2V0UGFyZW50YC5cbiAgICBpZiAoIWNsaWVudFNpemUgfHwgIShhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoYXJyb3dPZmZzZXRQYXJlbnQpKSkpIHtcbiAgICAgIGNsaWVudFNpemUgPSBlbGVtZW50cy5mbG9hdGluZ1tjbGllbnRQcm9wXSB8fCByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIH1cbiAgICBjb25zdCBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjtcblxuICAgIC8vIElmIHRoZSBwYWRkaW5nIGlzIGxhcmdlIGVub3VnaCB0aGF0IGl0IGNhdXNlcyB0aGUgYXJyb3cgdG8gbm8gbG9uZ2VyIGJlXG4gICAgLy8gY2VudGVyZWQsIG1vZGlmeSB0aGUgcGFkZGluZyBzbyB0aGF0IGl0IGlzIGNlbnRlcmVkLlxuICAgIGNvbnN0IGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcgPSBjbGllbnRTaXplIC8gMiAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiAtIDE7XG4gICAgY29uc3QgbWluUGFkZGluZyA9IG1pbihwYWRkaW5nT2JqZWN0W21pblByb3BdLCBsYXJnZXN0UG9zc2libGVQYWRkaW5nKTtcbiAgICBjb25zdCBtYXhQYWRkaW5nID0gbWluKHBhZGRpbmdPYmplY3RbbWF4UHJvcF0sIGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcpO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBmbG9hdGluZyBlbGVtZW50IGlmIHRoZSBjZW50ZXJcbiAgICAvLyBwb2ludCBpcyBvdXRzaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50J3MgYm91bmRzLlxuICAgIGNvbnN0IG1pbiQxID0gbWluUGFkZGluZztcbiAgICBjb25zdCBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLSBtYXhQYWRkaW5nO1xuICAgIGNvbnN0IGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gICAgY29uc3Qgb2Zmc2V0ID0gY2xhbXAobWluJDEsIGNlbnRlciwgbWF4KTtcblxuICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGwgZW5vdWdoIHRoYXQgdGhlIGFycm93J3MgcGFkZGluZyBjYXVzZXMgaXQgdG9cbiAgICAvLyB0byBwb2ludCB0byBub3RoaW5nIGZvciBhbiBhbGlnbmVkIHBsYWNlbWVudCwgYWRqdXN0IHRoZSBvZmZzZXQgb2YgdGhlXG4gICAgLy8gZmxvYXRpbmcgZWxlbWVudCBpdHNlbGYuIFRvIGVuc3VyZSBgc2hpZnQoKWAgY29udGludWVzIHRvIHRha2UgYWN0aW9uLFxuICAgIC8vIGEgc2luZ2xlIHJlc2V0IGlzIHBlcmZvcm1lZCB3aGVuIHRoaXMgaXMgdHJ1ZS5cbiAgICBjb25zdCBzaG91bGRBZGRPZmZzZXQgPSAhbWlkZGxld2FyZURhdGEuYXJyb3cgJiYgZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT0gbnVsbCAmJiBjZW50ZXIgIT09IG9mZnNldCAmJiByZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSAvIDIgLSAoY2VudGVyIDwgbWluJDEgPyBtaW5QYWRkaW5nIDogbWF4UGFkZGluZykgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgPCAwO1xuICAgIGNvbnN0IGFsaWdubWVudE9mZnNldCA9IHNob3VsZEFkZE9mZnNldCA/IGNlbnRlciA8IG1pbiQxID8gY2VudGVyIC0gbWluJDEgOiBjZW50ZXIgLSBtYXggOiAwO1xuICAgIHJldHVybiB7XG4gICAgICBbYXhpc106IGNvb3Jkc1theGlzXSArIGFsaWdubWVudE9mZnNldCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgW2F4aXNdOiBvZmZzZXQsXG4gICAgICAgIGNlbnRlck9mZnNldDogY2VudGVyIC0gb2Zmc2V0IC0gYWxpZ25tZW50T2Zmc2V0LFxuICAgICAgICAuLi4oc2hvdWxkQWRkT2Zmc2V0ICYmIHtcbiAgICAgICAgICBhbGlnbm1lbnRPZmZzZXRcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICByZXNldDogc2hvdWxkQWRkT2Zmc2V0XG4gICAgfTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGdldFBsYWNlbWVudExpc3QoYWxpZ25tZW50LCBhdXRvQWxpZ25tZW50LCBhbGxvd2VkUGxhY2VtZW50cykge1xuICBjb25zdCBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50ID0gYWxpZ25tZW50ID8gWy4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgPT09IGFsaWdubWVudCksIC4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT09IGFsaWdubWVudCldIDogYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRTaWRlKHBsYWNlbWVudCkgPT09IHBsYWNlbWVudCk7XG4gIHJldHVybiBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50LmZpbHRlcihwbGFjZW1lbnQgPT4ge1xuICAgIGlmIChhbGlnbm1lbnQpIHtcbiAgICAgIHJldHVybiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSA9PT0gYWxpZ25tZW50IHx8IChhdXRvQWxpZ25tZW50ID8gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSAhPT0gcGxhY2VtZW50IDogZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYXV0b1BsYWNlbWVudCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRhdXRvUCwgX21pZGRsZXdhcmVEYXRhJGF1dG9QMiwgX3BsYWNlbWVudHNUaGF0Rml0T25FO1xuICAgICAgY29uc3Qge1xuICAgICAgICByZWN0cyxcbiAgICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBhbGlnbm1lbnQsXG4gICAgICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cyxcbiAgICAgICAgYXV0b0FsaWdubWVudCA9IHRydWUsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHMkMSA9IGFsaWdubWVudCAhPT0gdW5kZWZpbmVkIHx8IGFsbG93ZWRQbGFjZW1lbnRzID09PSBwbGFjZW1lbnRzID8gZ2V0UGxhY2VtZW50TGlzdChhbGlnbm1lbnQgfHwgbnVsbCwgYXV0b0FsaWdubWVudCwgYWxsb3dlZFBsYWNlbWVudHMpIDogYWxsb3dlZFBsYWNlbWVudHM7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gKChfbWlkZGxld2FyZURhdGEkYXV0b1AgPSBtaWRkbGV3YXJlRGF0YS5hdXRvUGxhY2VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGF1dG9QLmluZGV4KSB8fCAwO1xuICAgICAgY29uc3QgY3VycmVudFBsYWNlbWVudCA9IHBsYWNlbWVudHMkMVtjdXJyZW50SW5kZXhdO1xuICAgICAgaWYgKGN1cnJlbnRQbGFjZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBjb25zdCBhbGlnbm1lbnRTaWRlcyA9IGdldEFsaWdubWVudFNpZGVzKGN1cnJlbnRQbGFjZW1lbnQsIHJlY3RzLCBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSkpO1xuXG4gICAgICAvLyBNYWtlIGBjb21wdXRlQ29vcmRzYCBzdGFydCBmcm9tIHRoZSByaWdodCBwbGFjZS5cbiAgICAgIGlmIChwbGFjZW1lbnQgIT09IGN1cnJlbnRQbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnRzJDFbMF1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50T3ZlcmZsb3dzID0gW292ZXJmbG93W2dldFNpZGUoY3VycmVudFBsYWNlbWVudCldLCBvdmVyZmxvd1thbGlnbm1lbnRTaWRlc1swXV0sIG92ZXJmbG93W2FsaWdubWVudFNpZGVzWzFdXV07XG4gICAgICBjb25zdCBhbGxPdmVyZmxvd3MgPSBbLi4uKCgoX21pZGRsZXdhcmVEYXRhJGF1dG9QMiA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AyLm92ZXJmbG93cykgfHwgW10pLCB7XG4gICAgICAgIHBsYWNlbWVudDogY3VycmVudFBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzOiBjdXJyZW50T3ZlcmZsb3dzXG4gICAgICB9XTtcbiAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzJDFbY3VycmVudEluZGV4ICsgMV07XG5cbiAgICAgIC8vIFRoZXJlIGFyZSBtb3JlIHBsYWNlbWVudHMgdG8gY2hlY2suXG4gICAgICBpZiAobmV4dFBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGluZGV4OiBjdXJyZW50SW5kZXggKyAxLFxuICAgICAgICAgICAgb3ZlcmZsb3dzOiBhbGxPdmVyZmxvd3NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IG5leHRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UgPSBhbGxPdmVyZmxvd3MubWFwKGQgPT4ge1xuICAgICAgICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQoZC5wbGFjZW1lbnQpO1xuICAgICAgICByZXR1cm4gW2QucGxhY2VtZW50LCBhbGlnbm1lbnQgJiYgY3Jvc3NBeGlzID9cbiAgICAgICAgLy8gQ2hlY2sgYWxvbmcgdGhlIG1haW5BeGlzIGFuZCBtYWluIGNyb3NzQXhpcyBzaWRlLlxuICAgICAgICBkLm92ZXJmbG93cy5zbGljZSgwLCAyKS5yZWR1Y2UoKGFjYywgdikgPT4gYWNjICsgdiwgMCkgOlxuICAgICAgICAvLyBDaGVjayBvbmx5IHRoZSBtYWluQXhpcy5cbiAgICAgICAgZC5vdmVyZmxvd3NbMF0sIGQub3ZlcmZsb3dzXTtcbiAgICAgIH0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHNUaGF0Rml0T25FYWNoU2lkZSA9IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZS5maWx0ZXIoZCA9PiBkWzJdLnNsaWNlKDAsXG4gICAgICAvLyBBbGlnbmVkIHBsYWNlbWVudHMgc2hvdWxkIG5vdCBjaGVjayB0aGVpciBvcHBvc2l0ZSBjcm9zc0F4aXNcbiAgICAgIC8vIHNpZGUuXG4gICAgICBnZXRBbGlnbm1lbnQoZFswXSkgPyAyIDogMykuZXZlcnkodiA9PiB2IDw9IDApKTtcbiAgICAgIGNvbnN0IHJlc2V0UGxhY2VtZW50ID0gKChfcGxhY2VtZW50c1RoYXRGaXRPbkUgPSBwbGFjZW1lbnRzVGhhdEZpdE9uRWFjaFNpZGVbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfcGxhY2VtZW50c1RoYXRGaXRPbkVbMF0pIHx8IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZVswXVswXTtcbiAgICAgIGlmIChyZXNldFBsYWNlbWVudCAhPT0gcGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXG4gICAgICAgICAgICBvdmVyZmxvd3M6IGFsbE92ZXJmbG93c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogcmVzZXRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2ZsaXAnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkYXJyb3csIF9taWRkbGV3YXJlRGF0YSRmbGlwO1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgaW5pdGlhbFBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWUsXG4gICAgICAgIGZhbGxiYWNrUGxhY2VtZW50czogc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgICBmYWxsYmFja1N0cmF0ZWd5ID0gJ2Jlc3RGaXQnLFxuICAgICAgICBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uID0gJ25vbmUnLFxuICAgICAgICBmbGlwQWxpZ25tZW50ID0gdHJ1ZSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuXG4gICAgICAvLyBJZiBhIHJlc2V0IGJ5IHRoZSBhcnJvdyB3YXMgY2F1c2VkIGR1ZSB0byBhbiBhbGlnbm1lbnQgb2Zmc2V0IGJlaW5nXG4gICAgICAvLyBhZGRlZCwgd2Ugc2hvdWxkIHNraXAgYW55IGxvZ2ljIG5vdyBzaW5jZSBgZmxpcCgpYCBoYXMgYWxyZWFkeSBkb25lIGl0c1xuICAgICAgLy8gd29yay5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjU0OSNpc3N1ZWNvbW1lbnQtMTcxOTYwMTY0M1xuICAgICAgaWYgKChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpbml0aWFsU2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhpbml0aWFsUGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGlzQmFzZVBsYWNlbWVudCA9IGdldFNpZGUoaW5pdGlhbFBsYWNlbWVudCkgPT09IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gICAgICBjb25zdCBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcEFsaWdubWVudCA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChpbml0aWFsUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZFBsYWNlbWVudHMoaW5pdGlhbFBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiA9IGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gIT09ICdub25lJztcbiAgICAgIGlmICghc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzICYmIGhhc0ZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24pIHtcbiAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzLnB1c2goLi4uZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cyhpbml0aWFsUGxhY2VtZW50LCBmbGlwQWxpZ25tZW50LCBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uLCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBsYWNlbWVudHMgPSBbaW5pdGlhbFBsYWNlbWVudCwgLi4uZmFsbGJhY2tQbGFjZW1lbnRzXTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBvdmVyZmxvd3MgPSBbXTtcbiAgICAgIGxldCBvdmVyZmxvd3NEYXRhID0gKChfbWlkZGxld2FyZURhdGEkZmxpcCA9IG1pZGRsZXdhcmVEYXRhLmZsaXApID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkZmxpcC5vdmVyZmxvd3MpIHx8IFtdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZV0pO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IHNpZGVzID0gZ2V0QWxpZ25tZW50U2lkZXMocGxhY2VtZW50LCByZWN0cywgcnRsKTtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZXNbMF1dLCBvdmVyZmxvd1tzaWRlc1sxXV0pO1xuICAgICAgfVxuICAgICAgb3ZlcmZsb3dzRGF0YSA9IFsuLi5vdmVyZmxvd3NEYXRhLCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzXG4gICAgICB9XTtcblxuICAgICAgLy8gT25lIG9yIG1vcmUgc2lkZXMgaXMgb3ZlcmZsb3dpbmcuXG4gICAgICBpZiAoIW92ZXJmbG93cy5ldmVyeShzaWRlID0+IHNpZGUgPD0gMCkpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRmbGlwMiwgX292ZXJmbG93c0RhdGEkZmlsdGVyO1xuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoKChfbWlkZGxld2FyZURhdGEkZmxpcDIgPSBtaWRkbGV3YXJlRGF0YS5mbGlwKSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGZsaXAyLmluZGV4KSB8fCAwKSArIDE7XG4gICAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzW25leHRJbmRleF07XG4gICAgICAgIGlmIChuZXh0UGxhY2VtZW50KSB7XG4gICAgICAgICAgY29uc3QgaWdub3JlQ3Jvc3NBeGlzT3ZlcmZsb3cgPSBjaGVja0Nyb3NzQXhpcyA9PT0gJ2FsaWdubWVudCcgPyBpbml0aWFsU2lkZUF4aXMgIT09IGdldFNpZGVBeGlzKG5leHRQbGFjZW1lbnQpIDogZmFsc2U7XG4gICAgICAgICAgaWYgKCFpZ25vcmVDcm9zc0F4aXNPdmVyZmxvdyB8fFxuICAgICAgICAgIC8vIFdlIGxlYXZlIHRoZSBjdXJyZW50IG1haW4gYXhpcyBvbmx5IGlmIGV2ZXJ5IHBsYWNlbWVudCBvbiB0aGF0IGF4aXNcbiAgICAgICAgICAvLyBvdmVyZmxvd3MgdGhlIG1haW4gYXhpcy5cbiAgICAgICAgICBvdmVyZmxvd3NEYXRhLmV2ZXJ5KGQgPT4gZ2V0U2lkZUF4aXMoZC5wbGFjZW1lbnQpID09PSBpbml0aWFsU2lkZUF4aXMgPyBkLm92ZXJmbG93c1swXSA+IDAgOiB0cnVlKSkge1xuICAgICAgICAgICAgLy8gVHJ5IG5leHQgcGxhY2VtZW50IGFuZCByZS1ydW4gdGhlIGxpZmVjeWNsZS5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBpbmRleDogbmV4dEluZGV4LFxuICAgICAgICAgICAgICAgIG92ZXJmbG93czogb3ZlcmZsb3dzRGF0YVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpcnN0LCBmaW5kIHRoZSBjYW5kaWRhdGVzIHRoYXQgZml0IG9uIHRoZSBtYWluQXhpcyBzaWRlIG9mIG92ZXJmbG93LFxuICAgICAgICAvLyB0aGVuIGZpbmQgdGhlIHBsYWNlbWVudCB0aGF0IGZpdHMgdGhlIGJlc3Qgb24gdGhlIG1haW4gY3Jvc3NBeGlzIHNpZGUuXG4gICAgICAgIGxldCByZXNldFBsYWNlbWVudCA9IChfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IGQub3ZlcmZsb3dzWzBdIDw9IDApLnNvcnQoKGEsIGIpID0+IGEub3ZlcmZsb3dzWzFdIC0gYi5vdmVyZmxvd3NbMV0pWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX292ZXJmbG93c0RhdGEkZmlsdGVyLnBsYWNlbWVudDtcblxuICAgICAgICAvLyBPdGhlcndpc2UgZmFsbGJhY2suXG4gICAgICAgIGlmICghcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICBzd2l0Y2ggKGZhbGxiYWNrU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Jlc3RGaXQnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIF9vdmVyZmxvd3NEYXRhJGZpbHRlcjI7XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2VtZW50ID0gKF9vdmVyZmxvd3NEYXRhJGZpbHRlcjIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTaWRlQXhpcyA9IGdldFNpZGVBeGlzKGQucGxhY2VtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTaWRlQXhpcyA9PT0gaW5pdGlhbFNpZGVBeGlzIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGJpYXMgdG8gdGhlIGB5YCBzaWRlIGF4aXMgZHVlIHRvIGhvcml6b250YWxcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVhZGluZyBkaXJlY3Rpb25zIGZhdm9yaW5nIGdyZWF0ZXIgd2lkdGguXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTaWRlQXhpcyA9PT0gJ3knO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSkubWFwKGQgPT4gW2QucGxhY2VtZW50LCBkLm92ZXJmbG93cy5maWx0ZXIob3ZlcmZsb3cgPT4gb3ZlcmZsb3cgPiAwKS5yZWR1Y2UoKGFjYywgb3ZlcmZsb3cpID0+IGFjYyArIG92ZXJmbG93LCAwKV0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9vdmVyZmxvd3NEYXRhJGZpbHRlcjJbMF07XG4gICAgICAgICAgICAgICAgaWYgKHBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdpbml0aWFsUGxhY2VtZW50JzpcbiAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBpbml0aWFsUGxhY2VtZW50O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBsYWNlbWVudCAhPT0gcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgICAgcGxhY2VtZW50OiByZXNldFBsYWNlbWVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQsXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoXG4gIH07XG59XG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIHNpZGVzLnNvbWUoc2lkZSA9PiBvdmVyZmxvd1tzaWRlXSA+PSAwKTtcbn1cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBoaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50IGluIGFwcGxpY2FibGUgc2l0dWF0aW9ucywgc3VjaCBhc1xuICogd2hlbiBpdCBpcyBub3QgaW4gdGhlIHNhbWUgY2xpcHBpbmcgY29udGV4dCBhcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaGlkZVxuICovXG5jb25zdCBoaWRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdoaWRlJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlY3RzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0cmF0ZWd5ID0gJ3JlZmVyZW5jZUhpZGRlbicsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIHN3aXRjaCAoc3RyYXRlZ3kpIHtcbiAgICAgICAgY2FzZSAncmVmZXJlbmNlSGlkZGVuJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdHMucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VIaWRkZW5PZmZzZXRzOiBvZmZzZXRzLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhpZGRlbjogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICdlc2NhcGVkJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5mbG9hdGluZyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZXNjYXBlZE9mZnNldHM6IG9mZnNldHMsXG4gICAgICAgICAgICAgICAgZXNjYXBlZDogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3RzKSB7XG4gIGNvbnN0IG1pblggPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5sZWZ0KSk7XG4gIGNvbnN0IG1pblkgPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC50b3ApKTtcbiAgY29uc3QgbWF4WCA9IG1heCguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LnJpZ2h0KSk7XG4gIGNvbnN0IG1heFkgPSBtYXgoLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5ib3R0b20pKTtcbiAgcmV0dXJuIHtcbiAgICB4OiBtaW5YLFxuICAgIHk6IG1pblksXG4gICAgd2lkdGg6IG1heFggLSBtaW5YLFxuICAgIGhlaWdodDogbWF4WSAtIG1pbllcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFJlY3RzQnlMaW5lKHJlY3RzKSB7XG4gIGNvbnN0IHNvcnRlZFJlY3RzID0gcmVjdHMuc2xpY2UoKS5zb3J0KChhLCBiKSA9PiBhLnkgLSBiLnkpO1xuICBjb25zdCBncm91cHMgPSBbXTtcbiAgbGV0IHByZXZSZWN0ID0gbnVsbDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRSZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHJlY3QgPSBzb3J0ZWRSZWN0c1tpXTtcbiAgICBpZiAoIXByZXZSZWN0IHx8IHJlY3QueSAtIHByZXZSZWN0LnkgPiBwcmV2UmVjdC5oZWlnaHQgLyAyKSB7XG4gICAgICBncm91cHMucHVzaChbcmVjdF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cHNbZ3JvdXBzLmxlbmd0aCAtIDFdLnB1c2gocmVjdCk7XG4gICAgfVxuICAgIHByZXZSZWN0ID0gcmVjdDtcbiAgfVxuICByZXR1cm4gZ3JvdXBzLm1hcChyZWN0ID0+IHJlY3RUb0NsaWVudFJlY3QoZ2V0Qm91bmRpbmdSZWN0KHJlY3QpKSk7XG59XG4vKipcbiAqIFByb3ZpZGVzIGltcHJvdmVkIHBvc2l0aW9uaW5nIGZvciBpbmxpbmUgcmVmZXJlbmNlIGVsZW1lbnRzIHRoYXQgY2FuIHNwYW5cbiAqIG92ZXIgbXVsdGlwbGUgbGluZXMsIHN1Y2ggYXMgaHlwZXJsaW5rcyBvciByYW5nZSBzZWxlY3Rpb25zLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2lubGluZVxuICovXG5jb25zdCBpbmxpbmUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2lubGluZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIHN0cmF0ZWd5XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICAvLyBBIE1vdXNlRXZlbnQncyBjbGllbnR7WCxZfSBjb29yZHMgY2FuIGJlIHVwIHRvIDIgcGl4ZWxzIG9mZiBhXG4gICAgICAvLyBDbGllbnRSZWN0J3MgYm91bmRzLCBkZXNwaXRlIHRoZSBldmVudCBsaXN0ZW5lciBiZWluZyB0cmlnZ2VyZWQuIEFcbiAgICAgIC8vIHBhZGRpbmcgb2YgMiBzZWVtcyB0byBoYW5kbGUgdGhpcyBpc3N1ZS5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGFkZGluZyA9IDIsXG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBuYXRpdmVDbGllbnRSZWN0cyA9IEFycmF5LmZyb20oKGF3YWl0IChwbGF0Zm9ybS5nZXRDbGllbnRSZWN0cyA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0Q2xpZW50UmVjdHMoZWxlbWVudHMucmVmZXJlbmNlKSkpIHx8IFtdKTtcbiAgICAgIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0UmVjdHNCeUxpbmUobmF0aXZlQ2xpZW50UmVjdHMpO1xuICAgICAgY29uc3QgZmFsbGJhY2sgPSByZWN0VG9DbGllbnRSZWN0KGdldEJvdW5kaW5nUmVjdChuYXRpdmVDbGllbnRSZWN0cykpO1xuICAgICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgICBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSB0d28gcmVjdHMgYW5kIHRoZXkgYXJlIGRpc2pvaW5lZC5cbiAgICAgICAgaWYgKGNsaWVudFJlY3RzLmxlbmd0aCA9PT0gMiAmJiBjbGllbnRSZWN0c1swXS5sZWZ0ID4gY2xpZW50UmVjdHNbMV0ucmlnaHQgJiYgeCAhPSBudWxsICYmIHkgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IHJlY3QgaW4gd2hpY2ggdGhlIHBvaW50IGlzIGZ1bGx5IGluc2lkZS5cbiAgICAgICAgICByZXR1cm4gY2xpZW50UmVjdHMuZmluZChyZWN0ID0+IHggPiByZWN0LmxlZnQgLSBwYWRkaW5nT2JqZWN0LmxlZnQgJiYgeCA8IHJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0ICYmIHkgPiByZWN0LnRvcCAtIHBhZGRpbmdPYmplY3QudG9wICYmIHkgPCByZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSB8fCBmYWxsYmFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZXJlIGFyZSAyIG9yIG1vcmUgY29ubmVjdGVkIHJlY3RzLlxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICBpZiAoZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RSZWN0ID0gY2xpZW50UmVjdHNbY2xpZW50UmVjdHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCBpc1RvcCA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ3RvcCc7XG4gICAgICAgICAgICBjb25zdCB0b3AgPSBmaXJzdFJlY3QudG9wO1xuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gbGFzdFJlY3QuYm90dG9tO1xuICAgICAgICAgICAgY29uc3QgbGVmdCA9IGlzVG9wID8gZmlyc3RSZWN0LmxlZnQgOiBsYXN0UmVjdC5sZWZ0O1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBpc1RvcCA/IGZpcnN0UmVjdC5yaWdodCA6IGxhc3RSZWN0LnJpZ2h0O1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgIHg6IGxlZnQsXG4gICAgICAgICAgICAgIHk6IHRvcFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaXNMZWZ0U2lkZSA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ2xlZnQnO1xuICAgICAgICAgIGNvbnN0IG1heFJpZ2h0ID0gbWF4KC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QucmlnaHQpKTtcbiAgICAgICAgICBjb25zdCBtaW5MZWZ0ID0gbWluKC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QubGVmdCkpO1xuICAgICAgICAgIGNvbnN0IG1lYXN1cmVSZWN0cyA9IGNsaWVudFJlY3RzLmZpbHRlcihyZWN0ID0+IGlzTGVmdFNpZGUgPyByZWN0LmxlZnQgPT09IG1pbkxlZnQgOiByZWN0LnJpZ2h0ID09PSBtYXhSaWdodCk7XG4gICAgICAgICAgY29uc3QgdG9wID0gbWVhc3VyZVJlY3RzWzBdLnRvcDtcbiAgICAgICAgICBjb25zdCBib3R0b20gPSBtZWFzdXJlUmVjdHNbbWVhc3VyZVJlY3RzLmxlbmd0aCAtIDFdLmJvdHRvbTtcbiAgICAgICAgICBjb25zdCBsZWZ0ID0gbWluTGVmdDtcbiAgICAgICAgICBjb25zdCByaWdodCA9IG1heFJpZ2h0O1xuICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB4OiBsZWZ0LFxuICAgICAgICAgICAgeTogdG9wXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNldFJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICAgICAgcmVmZXJlbmNlOiB7XG4gICAgICAgICAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG4gICAgICAgIH0sXG4gICAgICAgIGZsb2F0aW5nOiBlbGVtZW50cy5mbG9hdGluZyxcbiAgICAgICAgc3RyYXRlZ3lcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlY3RzLnJlZmVyZW5jZS54ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS54IHx8IHJlY3RzLnJlZmVyZW5jZS55ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS55IHx8IHJlY3RzLnJlZmVyZW5jZS53aWR0aCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2Uud2lkdGggfHwgcmVjdHMucmVmZXJlbmNlLmhlaWdodCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHJlY3RzOiByZXNldFJlY3RzXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IG9yaWdpblNpZGVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWydsZWZ0JywgJ3RvcCddKTtcblxuLy8gRm9yIHR5cGUgYmFja3dhcmRzLWNvbXBhdGliaWxpdHksIHRoZSBgT2Zmc2V0T3B0aW9uc2AgdHlwZSB3YXMgYWxzb1xuLy8gRGVyaXZhYmxlLlxuXG5hc3luYyBmdW5jdGlvbiBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50LFxuICAgIHBsYXRmb3JtLFxuICAgIGVsZW1lbnRzXG4gIH0gPSBzdGF0ZTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgaXNWZXJ0aWNhbCA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgY29uc3QgbWFpbkF4aXNNdWx0aSA9IG9yaWdpblNpZGVzLmhhcyhzaWRlKSA/IC0xIDogMTtcbiAgY29uc3QgY3Jvc3NBeGlzTXVsdGkgPSBydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMTtcbiAgY29uc3QgcmF3VmFsdWUgPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICBsZXQge1xuICAgIG1haW5BeGlzLFxuICAgIGNyb3NzQXhpcyxcbiAgICBhbGlnbm1lbnRBeGlzXG4gIH0gPSB0eXBlb2YgcmF3VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZSxcbiAgICBjcm9zc0F4aXM6IDAsXG4gICAgYWxpZ25tZW50QXhpczogbnVsbFxuICB9IDoge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZS5tYWluQXhpcyB8fCAwLFxuICAgIGNyb3NzQXhpczogcmF3VmFsdWUuY3Jvc3NBeGlzIHx8IDAsXG4gICAgYWxpZ25tZW50QXhpczogcmF3VmFsdWUuYWxpZ25tZW50QXhpc1xuICB9O1xuICBpZiAoYWxpZ25tZW50ICYmIHR5cGVvZiBhbGlnbm1lbnRBeGlzID09PSAnbnVtYmVyJykge1xuICAgIGNyb3NzQXhpcyA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyBhbGlnbm1lbnRBeGlzICogLTEgOiBhbGlnbm1lbnRBeGlzO1xuICB9XG4gIHJldHVybiBpc1ZlcnRpY2FsID8ge1xuICAgIHg6IGNyb3NzQXhpcyAqIGNyb3NzQXhpc011bHRpLFxuICAgIHk6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aVxuICB9IDoge1xuICAgIHg6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aSxcbiAgICB5OiBjcm9zc0F4aXMgKiBjcm9zc0F4aXNNdWx0aVxuICB9O1xufVxuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwbGFjZW1lbnQgYnkgdHJhbnNsYXRpbmcgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYWxvbmcgdGhlXG4gKiBzcGVjaWZpZWQgYXhlcy5cbiAqIEEgbnVtYmVyIChzaG9ydGhhbmQgZm9yIGBtYWluQXhpc2Agb3IgZGlzdGFuY2UpLCBvciBhbiBheGVzIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdCBtYXkgYmUgcGFzc2VkLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL29mZnNldFxuICovXG5jb25zdCBvZmZzZXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IDA7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJG9mZnNlLCBfbWlkZGxld2FyZURhdGEkYXJyb3c7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgbWlkZGxld2FyZURhdGFcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IGRpZmZDb29yZHMgPSBhd2FpdCBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucyk7XG5cbiAgICAgIC8vIElmIHRoZSBwbGFjZW1lbnQgaXMgdGhlIHNhbWUgYW5kIHRoZSBhcnJvdyBjYXVzZWQgYW4gYWxpZ25tZW50IG9mZnNldFxuICAgICAgLy8gdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNoYW5nZSB0aGUgcG9zaXRpb25pbmcgY29vcmRpbmF0ZXMuXG4gICAgICBpZiAocGxhY2VtZW50ID09PSAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZSA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZS5wbGFjZW1lbnQpICYmIChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHggKyBkaWZmQ29vcmRzLngsXG4gICAgICAgIHk6IHkgKyBkaWZmQ29vcmRzLnksXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAuLi5kaWZmQ29vcmRzLFxuICAgICAgICAgIHBsYWNlbWVudFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IHNoaWZ0aW5nIGl0IGluIG9yZGVyIHRvXG4gKiBrZWVwIGl0IGluIHZpZXcgd2hlbiBpdCB3aWxsIG92ZXJmbG93IHRoZSBjbGlwcGluZyBib3VuZGFyeS5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaGlmdFxuICovXG5jb25zdCBzaGlmdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc2hpZnQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBsaW1pdGVyID0ge1xuICAgICAgICAgIGZuOiBfcmVmID0+IHtcbiAgICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgIHlcbiAgICAgICAgICAgIH0gPSBfcmVmO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBjcm9zc0F4aXMgPSBnZXRTaWRlQXhpcyhnZXRTaWRlKHBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgbWFpbkF4aXMgPSBnZXRPcHBvc2l0ZUF4aXMoY3Jvc3NBeGlzKTtcbiAgICAgIGxldCBtYWluQXhpc0Nvb3JkID0gY29vcmRzW21haW5BeGlzXTtcbiAgICAgIGxldCBjcm9zc0F4aXNDb29yZCA9IGNvb3Jkc1tjcm9zc0F4aXNdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyAndG9wJyA6ICdsZWZ0JztcbiAgICAgICAgY29uc3QgbWF4U2lkZSA9IG1haW5BeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IG1haW5BeGlzQ29vcmQgKyBvdmVyZmxvd1ttaW5TaWRlXTtcbiAgICAgICAgY29uc3QgbWF4ID0gbWFpbkF4aXNDb29yZCAtIG92ZXJmbG93W21heFNpZGVdO1xuICAgICAgICBtYWluQXhpc0Nvb3JkID0gY2xhbXAobWluLCBtYWluQXhpc0Nvb3JkLCBtYXgpO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IG1pblNpZGUgPSBjcm9zc0F4aXMgPT09ICd5JyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgICAgICBjb25zdCBtYXhTaWRlID0gY3Jvc3NBeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IGNyb3NzQXhpc0Nvb3JkICsgb3ZlcmZsb3dbbWluU2lkZV07XG4gICAgICAgIGNvbnN0IG1heCA9IGNyb3NzQXhpc0Nvb3JkIC0gb3ZlcmZsb3dbbWF4U2lkZV07XG4gICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gY2xhbXAobWluLCBjcm9zc0F4aXNDb29yZCwgbWF4KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxpbWl0ZWRDb29yZHMgPSBsaW1pdGVyLmZuKHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5saW1pdGVkQ29vcmRzLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgeDogbGltaXRlZENvb3Jkcy54IC0geCxcbiAgICAgICAgICB5OiBsaW1pdGVkQ29vcmRzLnkgLSB5LFxuICAgICAgICAgIGVuYWJsZWQ6IHtcbiAgICAgICAgICAgIFttYWluQXhpc106IGNoZWNrTWFpbkF4aXMsXG4gICAgICAgICAgICBbY3Jvc3NBeGlzXTogY2hlY2tDcm9zc0F4aXNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgb3B0aW9ucyxcbiAgICBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBtaWRkbGV3YXJlRGF0YVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBvZmZzZXQgPSAwLFxuICAgICAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSB0cnVlXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgICAgY29uc3QgY3Jvc3NBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IG1haW5BeGlzID0gZ2V0T3Bwb3NpdGVBeGlzKGNyb3NzQXhpcyk7XG4gICAgICBsZXQgbWFpbkF4aXNDb29yZCA9IGNvb3Jkc1ttYWluQXhpc107XG4gICAgICBsZXQgY3Jvc3NBeGlzQ29vcmQgPSBjb29yZHNbY3Jvc3NBeGlzXTtcbiAgICAgIGNvbnN0IHJhd09mZnNldCA9IGV2YWx1YXRlKG9mZnNldCwgc3RhdGUpO1xuICAgICAgY29uc3QgY29tcHV0ZWRPZmZzZXQgPSB0eXBlb2YgcmF3T2Zmc2V0ID09PSAnbnVtYmVyJyA/IHtcbiAgICAgICAgbWFpbkF4aXM6IHJhd09mZnNldCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwXG4gICAgICB9IDoge1xuICAgICAgICBtYWluQXhpczogMCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwLFxuICAgICAgICAuLi5yYXdPZmZzZXRcbiAgICAgIH07XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgICAgICBjb25zdCBsaW1pdE1pbiA9IHJlY3RzLnJlZmVyZW5jZVttYWluQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGNvbnN0IGxpbWl0TWF4ID0gcmVjdHMucmVmZXJlbmNlW21haW5BeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dIC0gY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGlmIChtYWluQXhpc0Nvb3JkIDwgbGltaXRNaW4pIHtcbiAgICAgICAgICBtYWluQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAobWFpbkF4aXNDb29yZCA+IGxpbWl0TWF4KSB7XG4gICAgICAgICAgbWFpbkF4aXNDb29yZCA9IGxpbWl0TWF4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRvZmZzZSwgX21pZGRsZXdhcmVEYXRhJG9mZnNlMjtcbiAgICAgICAgY29uc3QgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICAgICAgY29uc3QgaXNPcmlnaW5TaWRlID0gb3JpZ2luU2lkZXMuaGFzKGdldFNpZGUocGxhY2VtZW50KSk7XG4gICAgICAgIGNvbnN0IGxpbWl0TWluID0gcmVjdHMucmVmZXJlbmNlW2Nyb3NzQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgKGlzT3JpZ2luU2lkZSA/ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlW2Nyb3NzQXhpc10pIHx8IDAgOiAwKSArIChpc09yaWdpblNpZGUgPyAwIDogY29tcHV0ZWRPZmZzZXQuY3Jvc3NBeGlzKTtcbiAgICAgICAgY29uc3QgbGltaXRNYXggPSByZWN0cy5yZWZlcmVuY2VbY3Jvc3NBeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dICsgKGlzT3JpZ2luU2lkZSA/IDAgOiAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZTIgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2UyW2Nyb3NzQXhpc10pIHx8IDApIC0gKGlzT3JpZ2luU2lkZSA/IGNvbXB1dGVkT2Zmc2V0LmNyb3NzQXhpcyA6IDApO1xuICAgICAgICBpZiAoY3Jvc3NBeGlzQ29vcmQgPCBsaW1pdE1pbikge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBeGlzQ29vcmQgPiBsaW1pdE1heCkge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNYXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCDigJRcbiAqIGZvciBpbnN0YW5jZSwgcHJldmVudCBpdCBmcm9tIG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyBib3VuZGFyeSBvciBtYXRjaCB0aGVcbiAqIHdpZHRoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXG4gKi9cbmNvbnN0IHNpemUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3NpemUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfc3RhdGUkbWlkZGxld2FyZURhdGEsIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTI7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBhcHBseSA9ICgpID0+IHt9LFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaXNZQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSA9IHJlY3RzLmZsb2F0aW5nO1xuICAgICAgbGV0IGhlaWdodFNpZGU7XG4gICAgICBsZXQgd2lkdGhTaWRlO1xuICAgICAgaWYgKHNpZGUgPT09ICd0b3AnIHx8IHNpZGUgPT09ICdib3R0b20nKSB7XG4gICAgICAgIGhlaWdodFNpZGUgPSBzaWRlO1xuICAgICAgICB3aWR0aFNpZGUgPSBhbGlnbm1lbnQgPT09ICgoYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpKSA/ICdzdGFydCcgOiAnZW5kJykgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2lkdGhTaWRlID0gc2lkZTtcbiAgICAgICAgaGVpZ2h0U2lkZSA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyAndG9wJyA6ICdib3R0b20nO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nSGVpZ2h0ID0gaGVpZ2h0IC0gb3ZlcmZsb3cudG9wIC0gb3ZlcmZsb3cuYm90dG9tO1xuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nV2lkdGggPSB3aWR0aCAtIG92ZXJmbG93LmxlZnQgLSBvdmVyZmxvdy5yaWdodDtcbiAgICAgIGNvbnN0IG92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0ID0gbWluKGhlaWdodCAtIG92ZXJmbG93W2hlaWdodFNpZGVdLCBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3dBdmFpbGFibGVXaWR0aCA9IG1pbih3aWR0aCAtIG92ZXJmbG93W3dpZHRoU2lkZV0sIG1heGltdW1DbGlwcGluZ1dpZHRoKTtcbiAgICAgIGNvbnN0IG5vU2hpZnQgPSAhc3RhdGUubWlkZGxld2FyZURhdGEuc2hpZnQ7XG4gICAgICBsZXQgYXZhaWxhYmxlSGVpZ2h0ID0gb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQ7XG4gICAgICBsZXQgYXZhaWxhYmxlV2lkdGggPSBvdmVyZmxvd0F2YWlsYWJsZVdpZHRoO1xuICAgICAgaWYgKChfc3RhdGUkbWlkZGxld2FyZURhdGEgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEuZW5hYmxlZC54KSB7XG4gICAgICAgIGF2YWlsYWJsZVdpZHRoID0gbWF4aW11bUNsaXBwaW5nV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAoKF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTIgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEyLmVuYWJsZWQueSkge1xuICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQ7XG4gICAgICB9XG4gICAgICBpZiAobm9TaGlmdCAmJiAhYWxpZ25tZW50KSB7XG4gICAgICAgIGNvbnN0IHhNaW4gPSBtYXgob3ZlcmZsb3cubGVmdCwgMCk7XG4gICAgICAgIGNvbnN0IHhNYXggPSBtYXgob3ZlcmZsb3cucmlnaHQsIDApO1xuICAgICAgICBjb25zdCB5TWluID0gbWF4KG92ZXJmbG93LnRvcCwgMCk7XG4gICAgICAgIGNvbnN0IHlNYXggPSBtYXgob3ZlcmZsb3cuYm90dG9tLCAwKTtcbiAgICAgICAgaWYgKGlzWUF4aXMpIHtcbiAgICAgICAgICBhdmFpbGFibGVXaWR0aCA9IHdpZHRoIC0gMiAqICh4TWluICE9PSAwIHx8IHhNYXggIT09IDAgPyB4TWluICsgeE1heCA6IG1heChvdmVyZmxvdy5sZWZ0LCBvdmVyZmxvdy5yaWdodCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IGhlaWdodCAtIDIgKiAoeU1pbiAhPT0gMCB8fCB5TWF4ICE9PSAwID8geU1pbiArIHlNYXggOiBtYXgob3ZlcmZsb3cudG9wLCBvdmVyZmxvdy5ib3R0b20pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgYXBwbHkoe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYXZhaWxhYmxlV2lkdGgsXG4gICAgICAgIGF2YWlsYWJsZUhlaWdodFxuICAgICAgfSk7XG4gICAgICBjb25zdCBuZXh0RGltZW5zaW9ucyA9IGF3YWl0IHBsYXRmb3JtLmdldERpbWVuc2lvbnMoZWxlbWVudHMuZmxvYXRpbmcpO1xuICAgICAgaWYgKHdpZHRoICE9PSBuZXh0RGltZW5zaW9ucy53aWR0aCB8fCBoZWlnaHQgIT09IG5leHREaW1lbnNpb25zLmhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICByZWN0czogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnQgeyBhcnJvdywgYXV0b1BsYWNlbWVudCwgY29tcHV0ZVBvc2l0aW9uLCBkZXRlY3RPdmVyZmxvdywgZmxpcCwgaGlkZSwgaW5saW5lLCBsaW1pdFNoaWZ0LCBvZmZzZXQsIHNoaWZ0LCBzaXplIH07XG4iLCJmdW5jdGlvbiBoYXNXaW5kb3coKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbn1cbmZ1bmN0aW9uIGdldE5vZGVOYW1lKG5vZGUpIHtcbiAgaWYgKGlzTm9kZShub2RlKSkge1xuICAgIHJldHVybiAobm9kZS5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgfVxuICAvLyBNb2NrZWQgbm9kZXMgaW4gdGVzdGluZyBlbnZpcm9ubWVudHMgbWF5IG5vdCBiZSBpbnN0YW5jZXMgb2YgTm9kZS4gQnlcbiAgLy8gcmV0dXJuaW5nIGAjZG9jdW1lbnRgIGFuIGluZmluaXRlIGxvb3Agd29uJ3Qgb2NjdXIuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjMxN1xuICByZXR1cm4gJyNkb2N1bWVudCc7XG59XG5mdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIChub2RlID09IG51bGwgfHwgKF9ub2RlJG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSB8fCB3aW5kb3c7XG59XG5mdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQobm9kZSkge1xuICB2YXIgX3JlZjtcbiAgcmV0dXJuIChfcmVmID0gKGlzTm9kZShub2RlKSA/IG5vZGUub3duZXJEb2N1bWVudCA6IG5vZGUuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9yZWYuZG9jdW1lbnRFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNOb2RlKHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgTm9kZSB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuTm9kZTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkhUTUxFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNTaGFkb3dSb290KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkgfHwgdHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLlNoYWRvd1Jvb3Q7XG59XG5jb25zdCBpbnZhbGlkT3ZlcmZsb3dEaXNwbGF5VmFsdWVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWydpbmxpbmUnLCAnY29udGVudHMnXSk7XG5mdW5jdGlvbiBpc092ZXJmbG93RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICBvdmVyZmxvdyxcbiAgICBvdmVyZmxvd1gsXG4gICAgb3ZlcmZsb3dZLFxuICAgIGRpc3BsYXlcbiAgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkgJiYgIWludmFsaWRPdmVyZmxvd0Rpc3BsYXlWYWx1ZXMuaGFzKGRpc3BsYXkpO1xufVxuY29uc3QgdGFibGVFbGVtZW50cyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KFsndGFibGUnLCAndGQnLCAndGgnXSk7XG5mdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiB0YWJsZUVsZW1lbnRzLmhhcyhnZXROb2RlTmFtZShlbGVtZW50KSk7XG59XG5jb25zdCB0b3BMYXllclNlbGVjdG9ycyA9IFsnOnBvcG92ZXItb3BlbicsICc6bW9kYWwnXTtcbmZ1bmN0aW9uIGlzVG9wTGF5ZXIoZWxlbWVudCkge1xuICByZXR1cm4gdG9wTGF5ZXJTZWxlY3RvcnMuc29tZShzZWxlY3RvciA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBlbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgIH0gY2F0Y2ggKF9lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbn1cbmNvbnN0IHRyYW5zZm9ybVByb3BlcnRpZXMgPSBbJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUnLCAnc2NhbGUnLCAncm90YXRlJywgJ3BlcnNwZWN0aXZlJ107XG5jb25zdCB3aWxsQ2hhbmdlVmFsdWVzID0gWyd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlJywgJ3NjYWxlJywgJ3JvdGF0ZScsICdwZXJzcGVjdGl2ZScsICdmaWx0ZXInXTtcbmNvbnN0IGNvbnRhaW5WYWx1ZXMgPSBbJ3BhaW50JywgJ2xheW91dCcsICdzdHJpY3QnLCAnY29udGVudCddO1xuZnVuY3Rpb24gaXNDb250YWluaW5nQmxvY2soZWxlbWVudE9yQ3NzKSB7XG4gIGNvbnN0IHdlYmtpdCA9IGlzV2ViS2l0KCk7XG4gIGNvbnN0IGNzcyA9IGlzRWxlbWVudChlbGVtZW50T3JDc3MpID8gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50T3JDc3MpIDogZWxlbWVudE9yQ3NzO1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdHJhbnNmb3Jtcy0yLyNpbmRpdmlkdWFsLXRyYW5zZm9ybXNcbiAgcmV0dXJuIHRyYW5zZm9ybVByb3BlcnRpZXMuc29tZSh2YWx1ZSA9PiBjc3NbdmFsdWVdID8gY3NzW3ZhbHVlXSAhPT0gJ25vbmUnIDogZmFsc2UpIHx8IChjc3MuY29udGFpbmVyVHlwZSA/IGNzcy5jb250YWluZXJUeXBlICE9PSAnbm9ybWFsJyA6IGZhbHNlKSB8fCAhd2Via2l0ICYmIChjc3MuYmFja2Ryb3BGaWx0ZXIgPyBjc3MuYmFja2Ryb3BGaWx0ZXIgIT09ICdub25lJyA6IGZhbHNlKSB8fCAhd2Via2l0ICYmIChjc3MuZmlsdGVyID8gY3NzLmZpbHRlciAhPT0gJ25vbmUnIDogZmFsc2UpIHx8IHdpbGxDaGFuZ2VWYWx1ZXMuc29tZSh2YWx1ZSA9PiAoY3NzLndpbGxDaGFuZ2UgfHwgJycpLmluY2x1ZGVzKHZhbHVlKSkgfHwgY29udGFpblZhbHVlcy5zb21lKHZhbHVlID0+IChjc3MuY29udGFpbiB8fCAnJykuaW5jbHVkZXModmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKGN1cnJlbnROb2RlKSkge1xuICAgIGlmIChpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2UgaWYgKGlzVG9wTGF5ZXIoY3VycmVudE5vZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzV2ViS2l0KCkge1xuICBpZiAodHlwZW9mIENTUyA9PT0gJ3VuZGVmaW5lZCcgfHwgIUNTUy5zdXBwb3J0cykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQ1NTLnN1cHBvcnRzKCctd2Via2l0LWJhY2tkcm9wLWZpbHRlcicsICdub25lJyk7XG59XG5jb25zdCBsYXN0VHJhdmVyc2FibGVOb2RlTmFtZXMgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXSk7XG5mdW5jdGlvbiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUobm9kZSkge1xuICByZXR1cm4gbGFzdFRyYXZlcnNhYmxlTm9kZU5hbWVzLmhhcyhnZXROb2RlTmFtZShub2RlKSk7XG59XG5mdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufVxuZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KSB7XG4gIGlmIChpc0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbFgsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhcmVudE5vZGUobm9kZSkge1xuICBpZiAoZ2V0Tm9kZU5hbWUobm9kZSkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9XG4gIC8vIFN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlLlxuICBub2RlLmFzc2lnbmVkU2xvdCB8fFxuICAvLyBET00gRWxlbWVudCBkZXRlY3RlZC5cbiAgbm9kZS5wYXJlbnROb2RlIHx8XG4gIC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWQuXG4gIGlzU2hhZG93Um9vdChub2RlKSAmJiBub2RlLmhvc3QgfHxcbiAgLy8gRmFsbGJhY2suXG4gIGdldERvY3VtZW50RWxlbWVudChub2RlKTtcbiAgcmV0dXJuIGlzU2hhZG93Um9vdChyZXN1bHQpID8gcmVzdWx0Lmhvc3QgOiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKG5vZGUpO1xuICBpZiAoaXNMYXN0VHJhdmVyc2FibGVOb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudCA/IG5vZGUub3duZXJEb2N1bWVudC5ib2R5IDogbm9kZS5ib2R5O1xuICB9XG4gIGlmIChpc0hUTUxFbGVtZW50KHBhcmVudE5vZGUpICYmIGlzT3ZlcmZsb3dFbGVtZW50KHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKHBhcmVudE5vZGUpO1xufVxuZnVuY3Rpb24gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMobm9kZSwgbGlzdCwgdHJhdmVyc2VJZnJhbWVzKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50MjtcbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuICBpZiAodHJhdmVyc2VJZnJhbWVzID09PSB2b2lkIDApIHtcbiAgICB0cmF2ZXJzZUlmcmFtZXMgPSB0cnVlO1xuICB9XG4gIGNvbnN0IHNjcm9sbGFibGVBbmNlc3RvciA9IGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpO1xuICBjb25zdCBpc0JvZHkgPSBzY3JvbGxhYmxlQW5jZXN0b3IgPT09ICgoX25vZGUkb3duZXJEb2N1bWVudDIgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50Mi5ib2R5KTtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KHNjcm9sbGFibGVBbmNlc3Rvcik7XG4gIGlmIChpc0JvZHkpIHtcbiAgICBjb25zdCBmcmFtZUVsZW1lbnQgPSBnZXRGcmFtZUVsZW1lbnQod2luKTtcbiAgICByZXR1cm4gbGlzdC5jb25jYXQod2luLCB3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzT3ZlcmZsb3dFbGVtZW50KHNjcm9sbGFibGVBbmNlc3RvcikgPyBzY3JvbGxhYmxlQW5jZXN0b3IgOiBbXSwgZnJhbWVFbGVtZW50ICYmIHRyYXZlcnNlSWZyYW1lcyA/IGdldE92ZXJmbG93QW5jZXN0b3JzKGZyYW1lRWxlbWVudCkgOiBbXSk7XG4gIH1cbiAgcmV0dXJuIGxpc3QuY29uY2F0KHNjcm9sbGFibGVBbmNlc3RvciwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoc2Nyb2xsYWJsZUFuY2VzdG9yLCBbXSwgdHJhdmVyc2VJZnJhbWVzKSk7XG59XG5mdW5jdGlvbiBnZXRGcmFtZUVsZW1lbnQod2luKSB7XG4gIHJldHVybiB3aW4ucGFyZW50ICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih3aW4ucGFyZW50KSA/IHdpbi5mcmFtZUVsZW1lbnQgOiBudWxsO1xufVxuXG5leHBvcnQgeyBnZXRDb21wdXRlZFN0eWxlLCBnZXRDb250YWluaW5nQmxvY2ssIGdldERvY3VtZW50RWxlbWVudCwgZ2V0RnJhbWVFbGVtZW50LCBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvciwgZ2V0Tm9kZU5hbWUsIGdldE5vZGVTY3JvbGwsIGdldE92ZXJmbG93QW5jZXN0b3JzLCBnZXRQYXJlbnROb2RlLCBnZXRXaW5kb3csIGlzQ29udGFpbmluZ0Jsb2NrLCBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzTGFzdFRyYXZlcnNhYmxlTm9kZSwgaXNOb2RlLCBpc092ZXJmbG93RWxlbWVudCwgaXNTaGFkb3dSb290LCBpc1RhYmxlRWxlbWVudCwgaXNUb3BMYXllciwgaXNXZWJLaXQgfTtcbiIsImltcG9ydCB7IHJlY3RUb0NsaWVudFJlY3QsIGFycm93IGFzIGFycm93JDEsIGF1dG9QbGFjZW1lbnQgYXMgYXV0b1BsYWNlbWVudCQxLCBkZXRlY3RPdmVyZmxvdyBhcyBkZXRlY3RPdmVyZmxvdyQxLCBmbGlwIGFzIGZsaXAkMSwgaGlkZSBhcyBoaWRlJDEsIGlubGluZSBhcyBpbmxpbmUkMSwgbGltaXRTaGlmdCBhcyBsaW1pdFNoaWZ0JDEsIG9mZnNldCBhcyBvZmZzZXQkMSwgc2hpZnQgYXMgc2hpZnQkMSwgc2l6ZSBhcyBzaXplJDEsIGNvbXB1dGVQb3NpdGlvbiBhcyBjb21wdXRlUG9zaXRpb24kMSB9IGZyb20gJ0BmbG9hdGluZy11aS9jb3JlJztcbmltcG9ydCB7IHJvdW5kLCBjcmVhdGVDb29yZHMsIG1heCwgbWluLCBmbG9vciB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5pbXBvcnQgeyBnZXRDb21wdXRlZFN0eWxlIGFzIGdldENvbXB1dGVkU3R5bGUkMSwgaXNIVE1MRWxlbWVudCwgaXNFbGVtZW50LCBnZXRXaW5kb3csIGlzV2ViS2l0LCBnZXRGcmFtZUVsZW1lbnQsIGdldE5vZGVTY3JvbGwsIGdldERvY3VtZW50RWxlbWVudCwgaXNUb3BMYXllciwgZ2V0Tm9kZU5hbWUsIGlzT3ZlcmZsb3dFbGVtZW50LCBnZXRPdmVyZmxvd0FuY2VzdG9ycywgZ2V0UGFyZW50Tm9kZSwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc0NvbnRhaW5pbmdCbG9jaywgaXNUYWJsZUVsZW1lbnQsIGdldENvbnRhaW5pbmdCbG9jayB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuZXhwb3J0IHsgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcblxuZnVuY3Rpb24gZ2V0Q3NzRGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUkMShlbGVtZW50KTtcbiAgLy8gSW4gdGVzdGluZyBlbnZpcm9ubWVudHMsIHRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzIGFyZSBlbXB0eVxuICAvLyBzdHJpbmdzIGZvciBTVkcgZWxlbWVudHMsIHJldHVybmluZyBOYU4uIEZhbGxiYWNrIHRvIGAwYCBpbiB0aGlzIGNhc2UuXG4gIGxldCB3aWR0aCA9IHBhcnNlRmxvYXQoY3NzLndpZHRoKSB8fCAwO1xuICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChjc3MuaGVpZ2h0KSB8fCAwO1xuICBjb25zdCBoYXNPZmZzZXQgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBvZmZzZXRXaWR0aCA9IGhhc09mZnNldCA/IGVsZW1lbnQub2Zmc2V0V2lkdGggOiB3aWR0aDtcbiAgY29uc3Qgb2Zmc2V0SGVpZ2h0ID0gaGFzT2Zmc2V0ID8gZWxlbWVudC5vZmZzZXRIZWlnaHQgOiBoZWlnaHQ7XG4gIGNvbnN0IHNob3VsZEZhbGxiYWNrID0gcm91bmQod2lkdGgpICE9PSBvZmZzZXRXaWR0aCB8fCByb3VuZChoZWlnaHQpICE9PSBvZmZzZXRIZWlnaHQ7XG4gIGlmIChzaG91bGRGYWxsYmFjaykge1xuICAgIHdpZHRoID0gb2Zmc2V0V2lkdGg7XG4gICAgaGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0O1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICQ6IHNob3VsZEZhbGxiYWNrXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVud3JhcEVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gIWlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgOiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRTY2FsZShlbGVtZW50KSB7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZG9tRWxlbWVudCkpIHtcbiAgICByZXR1cm4gY3JlYXRlQ29vcmRzKDEpO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBkb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZG9tRWxlbWVudCk7XG4gIGxldCB4ID0gKCQgPyByb3VuZChyZWN0LndpZHRoKSA6IHJlY3Qud2lkdGgpIC8gd2lkdGg7XG4gIGxldCB5ID0gKCQgPyByb3VuZChyZWN0LmhlaWdodCkgOiByZWN0LmhlaWdodCkgLyBoZWlnaHQ7XG5cbiAgLy8gMCwgTmFOLCBvciBJbmZpbml0eSBzaG91bGQgYWx3YXlzIGZhbGxiYWNrIHRvIDEuXG5cbiAgaWYgKCF4IHx8ICFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICB4ID0gMTtcbiAgfVxuICBpZiAoIXkgfHwgIU51bWJlci5pc0Zpbml0ZSh5KSkge1xuICAgIHkgPSAxO1xuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmNvbnN0IG5vT2Zmc2V0cyA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb29yZHMoMCk7XG5mdW5jdGlvbiBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBpZiAoIWlzV2ViS2l0KCkgfHwgIXdpbi52aXN1YWxWaWV3cG9ydCkge1xuICAgIHJldHVybiBub09mZnNldHM7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCxcbiAgICB5OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wXG4gIH07XG59XG5mdW5jdGlvbiBzaG91bGRBZGRWaXN1YWxPZmZzZXRzKGVsZW1lbnQsIGlzRml4ZWQsIGZsb2F0aW5nT2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cbiAgaWYgKCFmbG9hdGluZ09mZnNldFBhcmVudCB8fCBpc0ZpeGVkICYmIGZsb2F0aW5nT2Zmc2V0UGFyZW50ICE9PSBnZXRXaW5kb3coZWxlbWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzRml4ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSwgb2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBkb21FbGVtZW50ID0gdW53cmFwRWxlbWVudChlbGVtZW50KTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBpZiAoaW5jbHVkZVNjYWxlKSB7XG4gICAgaWYgKG9mZnNldFBhcmVudCkge1xuICAgICAgaWYgKGlzRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHNjYWxlID0gZ2V0U2NhbGUob2Zmc2V0UGFyZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IHNob3VsZEFkZFZpc3VhbE9mZnNldHMoZG9tRWxlbWVudCwgaXNGaXhlZFN0cmF0ZWd5LCBvZmZzZXRQYXJlbnQpID8gZ2V0VmlzdWFsT2Zmc2V0cyhkb21FbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgbGV0IHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgdmlzdWFsT2Zmc2V0cy54KSAvIHNjYWxlLng7XG4gIGxldCB5ID0gKGNsaWVudFJlY3QudG9wICsgdmlzdWFsT2Zmc2V0cy55KSAvIHNjYWxlLnk7XG4gIGxldCB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZS54O1xuICBsZXQgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZS55O1xuICBpZiAoZG9tRWxlbWVudCkge1xuICAgIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhkb21FbGVtZW50KTtcbiAgICBjb25zdCBvZmZzZXRXaW4gPSBvZmZzZXRQYXJlbnQgJiYgaXNFbGVtZW50KG9mZnNldFBhcmVudCkgPyBnZXRXaW5kb3cob2Zmc2V0UGFyZW50KSA6IG9mZnNldFBhcmVudDtcbiAgICBsZXQgY3VycmVudFdpbiA9IHdpbjtcbiAgICBsZXQgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB3aGlsZSAoY3VycmVudElGcmFtZSAmJiBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0V2luICE9PSBjdXJyZW50V2luKSB7XG4gICAgICBjb25zdCBpZnJhbWVTY2FsZSA9IGdldFNjYWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgaWZyYW1lUmVjdCA9IGN1cnJlbnRJRnJhbWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlJDEoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBsZWZ0ID0gaWZyYW1lUmVjdC5sZWZ0ICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50TGVmdCArIHBhcnNlRmxvYXQoY3NzLnBhZGRpbmdMZWZ0KSkgKiBpZnJhbWVTY2FsZS54O1xuICAgICAgY29uc3QgdG9wID0gaWZyYW1lUmVjdC50b3AgKyAoY3VycmVudElGcmFtZS5jbGllbnRUb3AgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nVG9wKSkgKiBpZnJhbWVTY2FsZS55O1xuICAgICAgeCAqPSBpZnJhbWVTY2FsZS54O1xuICAgICAgeSAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgd2lkdGggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIGhlaWdodCAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgeCArPSBsZWZ0O1xuICAgICAgeSArPSB0b3A7XG4gICAgICBjdXJyZW50V2luID0gZ2V0V2luZG93KGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3Qoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfSk7XG59XG5cbi8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbi8vIGluY29ycmVjdCBmb3IgUlRMLlxuZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50LCByZWN0KSB7XG4gIGNvbnN0IGxlZnRTY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG4gIGlmICghcmVjdCkge1xuICAgIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgbGVmdFNjcm9sbDtcbiAgfVxuICByZXR1cm4gcmVjdC5sZWZ0ICsgbGVmdFNjcm9sbDtcbn1cblxuZnVuY3Rpb24gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkge1xuICBjb25zdCBodG1sUmVjdCA9IGRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgeCA9IGh0bWxSZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50LCBodG1sUmVjdCk7XG4gIGNvbnN0IHkgPSBodG1sUmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wO1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgZWxlbWVudHMsXG4gICAgcmVjdCxcbiAgICBvZmZzZXRQYXJlbnQsXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGlzRml4ZWQgPSBzdHJhdGVneSA9PT0gJ2ZpeGVkJztcbiAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IHRvcExheWVyID0gZWxlbWVudHMgPyBpc1RvcExheWVyKGVsZW1lbnRzLmZsb2F0aW5nKSA6IGZhbHNlO1xuICBpZiAob2Zmc2V0UGFyZW50ID09PSBkb2N1bWVudEVsZW1lbnQgfHwgdG9wTGF5ZXIgJiYgaXNGaXhlZCkge1xuICAgIHJldHVybiByZWN0O1xuICB9XG4gIGxldCBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuICBjb25zdCBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBjb25zdCBvZmZzZXRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCk7XG4gICAgICBzY2FsZSA9IGdldFNjYWxlKG9mZnNldFBhcmVudCk7XG4gICAgICBvZmZzZXRzLnggPSBvZmZzZXRSZWN0LnggKyBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSA9IG9mZnNldFJlY3QueSArIG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfVxuICB9XG4gIGNvbnN0IGh0bWxPZmZzZXQgPSBkb2N1bWVudEVsZW1lbnQgJiYgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkID8gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHJlY3Qud2lkdGggKiBzY2FsZS54LFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHQgKiBzY2FsZS55LFxuICAgIHg6IHJlY3QueCAqIHNjYWxlLnggLSBzY3JvbGwuc2Nyb2xsTGVmdCAqIHNjYWxlLnggKyBvZmZzZXRzLnggKyBodG1sT2Zmc2V0LngsXG4gICAgeTogcmVjdC55ICogc2NhbGUueSAtIHNjcm9sbC5zY3JvbGxUb3AgKiBzY2FsZS55ICsgb2Zmc2V0cy55ICsgaHRtbE9mZnNldC55XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oZWxlbWVudC5nZXRDbGllbnRSZWN0cygpKTtcbn1cblxuLy8gR2V0cyB0aGUgZW50aXJlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgZG9jdW1lbnQgYXJlYSwgZXZlbiBleHRlbmRpbmcgb3V0c2lkZVxuLy8gb2YgdGhlIGA8aHRtbD5gIGFuZCBgPGJvZHk+YCByZWN0IGJvdW5kcyBpZiBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZS5cbmZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHNjcm9sbCA9IGdldE5vZGVTY3JvbGwoZWxlbWVudCk7XG4gIGNvbnN0IGJvZHkgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgY29uc3Qgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgYm9keS5jbGllbnRXaWR0aCk7XG4gIGNvbnN0IGhlaWdodCA9IG1heChodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGJvZHkuc2Nyb2xsSGVpZ2h0LCBib2R5LmNsaWVudEhlaWdodCk7XG4gIGxldCB4ID0gLXNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgY29uc3QgeSA9IC1zY3JvbGwuc2Nyb2xsVG9wO1xuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZSQxKGJvZHkpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5LmNsaWVudFdpZHRoKSAtIHdpZHRoO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG4vLyBTYWZldHkgY2hlY2s6IGVuc3VyZSB0aGUgc2Nyb2xsYmFyIHNwYWNlIGlzIHJlYXNvbmFibGUgaW4gY2FzZSB0aGlzXG4vLyBjYWxjdWxhdGlvbiBpcyBhZmZlY3RlZCBieSB1bnVzdWFsIHN0eWxlcy5cbi8vIE1vc3Qgc2Nyb2xsYmFycyBsZWF2ZSAxNS0xOHB4IG9mIHNwYWNlLlxuY29uc3QgU0NST0xMQkFSX01BWCA9IDI1O1xuZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgY29uc3QgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgY29uc3QgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIGxldCB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIGxldCBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgbGV0IHggPSAwO1xuICBsZXQgeSA9IDA7XG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIGNvbnN0IHZpc3VhbFZpZXdwb3J0QmFzZWQgPSBpc1dlYktpdCgpO1xuICAgIGlmICghdmlzdWFsVmlld3BvcnRCYXNlZCB8fCB2aXN1YWxWaWV3cG9ydEJhc2VkICYmIHN0cmF0ZWd5ID09PSAnZml4ZWQnKSB7XG4gICAgICB4ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdDtcbiAgICAgIHkgPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG4gIGNvbnN0IHdpbmRvd1Njcm9sbGJhclggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGh0bWwpO1xuICAvLyA8aHRtbD4gYG92ZXJmbG93OiBoaWRkZW5gICsgYHNjcm9sbGJhci1ndXR0ZXI6IHN0YWJsZWAgcmVkdWNlcyB0aGVcbiAgLy8gdmlzdWFsIHdpZHRoIG9mIHRoZSA8aHRtbD4gYnV0IHRoaXMgaXMgbm90IGNvbnNpZGVyZWQgaW4gdGhlIHNpemVcbiAgLy8gb2YgYGh0bWwuY2xpZW50V2lkdGhgLlxuICBpZiAod2luZG93U2Nyb2xsYmFyWCA8PSAwKSB7XG4gICAgY29uc3QgZG9jID0gaHRtbC5vd25lckRvY3VtZW50O1xuICAgIGNvbnN0IGJvZHkgPSBkb2MuYm9keTtcbiAgICBjb25zdCBib2R5U3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZShib2R5KTtcbiAgICBjb25zdCBib2R5TWFyZ2luSW5saW5lID0gZG9jLmNvbXBhdE1vZGUgPT09ICdDU1MxQ29tcGF0JyA/IHBhcnNlRmxvYXQoYm9keVN0eWxlcy5tYXJnaW5MZWZ0KSArIHBhcnNlRmxvYXQoYm9keVN0eWxlcy5tYXJnaW5SaWdodCkgfHwgMCA6IDA7XG4gICAgY29uc3QgY2xpcHBpbmdTdGFibGVTY3JvbGxiYXJXaWR0aCA9IE1hdGguYWJzKGh0bWwuY2xpZW50V2lkdGggLSBib2R5LmNsaWVudFdpZHRoIC0gYm9keU1hcmdpbklubGluZSk7XG4gICAgaWYgKGNsaXBwaW5nU3RhYmxlU2Nyb2xsYmFyV2lkdGggPD0gU0NST0xMQkFSX01BWCkge1xuICAgICAgd2lkdGggLT0gY2xpcHBpbmdTdGFibGVTY3JvbGxiYXJXaWR0aDtcbiAgICB9XG4gIH0gZWxzZSBpZiAod2luZG93U2Nyb2xsYmFyWCA8PSBTQ1JPTExCQVJfTUFYKSB7XG4gICAgLy8gSWYgdGhlIDxib2R5PiBzY3JvbGxiYXIgaXMgb24gdGhlIGxlZnQsIHRoZSB3aWR0aCBuZWVkcyB0byBiZSBleHRlbmRlZFxuICAgIC8vIGJ5IHRoZSBzY3JvbGxiYXIgYW1vdW50IHNvIHRoZXJlIGlzbid0IGV4dHJhIHNwYWNlIG9uIHRoZSByaWdodC5cbiAgICB3aWR0aCArPSB3aW5kb3dTY3JvbGxiYXJYO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5jb25zdCBhYnNvbHV0ZU9yRml4ZWQgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2Fic29sdXRlJywgJ2ZpeGVkJ10pO1xuLy8gUmV0dXJucyB0aGUgaW5uZXIgY2xpZW50IHJlY3QsIHN1YnRyYWN0aW5nIHNjcm9sbGJhcnMgaWYgcHJlc2VudC5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICBjb25zdCB0b3AgPSBjbGllbnRSZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICBjb25zdCBsZWZ0ID0gY2xpZW50UmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICBjb25zdCBzY2FsZSA9IGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRTY2FsZShlbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgd2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoICogc2NhbGUueDtcbiAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQgKiBzY2FsZS55O1xuICBjb25zdCB4ID0gbGVmdCAqIHNjYWxlLng7XG4gIGNvbnN0IHkgPSB0b3AgKiBzY2FsZS55O1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkge1xuICBsZXQgcmVjdDtcbiAgaWYgKGNsaXBwaW5nQW5jZXN0b3IgPT09ICd2aWV3cG9ydCcpIHtcbiAgICByZWN0ID0gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KTtcbiAgfSBlbHNlIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAnZG9jdW1lbnQnKSB7XG4gICAgcmVjdCA9IGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpO1xuICB9IGVsc2UgaWYgKGlzRWxlbWVudChjbGlwcGluZ0FuY2VzdG9yKSkge1xuICAgIHJlY3QgPSBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IGdldFZpc3VhbE9mZnNldHMoZWxlbWVudCk7XG4gICAgcmVjdCA9IHtcbiAgICAgIHg6IGNsaXBwaW5nQW5jZXN0b3IueCAtIHZpc3VhbE9mZnNldHMueCxcbiAgICAgIHk6IGNsaXBwaW5nQW5jZXN0b3IueSAtIHZpc3VhbE9mZnNldHMueSxcbiAgICAgIHdpZHRoOiBjbGlwcGluZ0FuY2VzdG9yLndpZHRoLFxuICAgICAgaGVpZ2h0OiBjbGlwcGluZ0FuY2VzdG9yLmhlaWdodFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3QocmVjdCk7XG59XG5mdW5jdGlvbiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgc3RvcE5vZGUpIHtcbiAgY29uc3QgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIGlmIChwYXJlbnROb2RlID09PSBzdG9wTm9kZSB8fCAhaXNFbGVtZW50KHBhcmVudE5vZGUpIHx8IGlzTGFzdFRyYXZlcnNhYmxlTm9kZShwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSQxKHBhcmVudE5vZGUpLnBvc2l0aW9uID09PSAnZml4ZWQnIHx8IGhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvcihwYXJlbnROb2RlLCBzdG9wTm9kZSk7XG59XG5cbi8vIEEgXCJjbGlwcGluZyBhbmNlc3RvclwiIGlzIGFuIGBvdmVyZmxvd2AgZWxlbWVudCB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgY2hpbGQgZWxlbWVudHMuIFRoaXMgcmV0dXJucyBhbGwgY2xpcHBpbmcgYW5jZXN0b3JzXG4vLyBvZiB0aGUgZ2l2ZW4gZWxlbWVudCB1cCB0aGUgdHJlZS5cbmZ1bmN0aW9uIGdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyhlbGVtZW50LCBjYWNoZSkge1xuICBjb25zdCBjYWNoZWRSZXN1bHQgPSBjYWNoZS5nZXQoZWxlbWVudCk7XG4gIGlmIChjYWNoZWRSZXN1bHQpIHtcbiAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICB9XG4gIGxldCByZXN1bHQgPSBnZXRPdmVyZmxvd0FuY2VzdG9ycyhlbGVtZW50LCBbXSwgZmFsc2UpLmZpbHRlcihlbCA9PiBpc0VsZW1lbnQoZWwpICYmIGdldE5vZGVOYW1lKGVsKSAhPT0gJ2JvZHknKTtcbiAgbGV0IGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgY29uc3QgZWxlbWVudElzRml4ZWQgPSBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCc7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgd2hpbGUgKGlzRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSQxKGN1cnJlbnROb2RlKTtcbiAgICBjb25zdCBjdXJyZW50Tm9kZUlzQ29udGFpbmluZyA9IGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKTtcbiAgICBpZiAoIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc2hvdWxkRHJvcEN1cnJlbnROb2RlID0gZWxlbWVudElzRml4ZWQgPyAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlIDogIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdzdGF0aWMnICYmICEhY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgJiYgYWJzb2x1dGVPckZpeGVkLmhhcyhjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZS5wb3NpdGlvbikgfHwgaXNPdmVyZmxvd0VsZW1lbnQoY3VycmVudE5vZGUpICYmICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgY3VycmVudE5vZGUpO1xuICAgIGlmIChzaG91bGREcm9wQ3VycmVudE5vZGUpIHtcbiAgICAgIC8vIERyb3Agbm9uLWNvbnRhaW5pbmcgYmxvY2tzLlxuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihhbmNlc3RvciA9PiBhbmNlc3RvciAhPT0gY3VycmVudE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWNvcmQgbGFzdCBjb250YWluaW5nIGJsb2NrIGZvciBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICBjYWNoZS5zZXQoZWxlbWVudCwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgYW5jZXN0b3JzLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBlbGVtZW50LFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9ID0gX3JlZjtcbiAgY29uc3QgZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ0FuY2VzdG9ycycgPyBpc1RvcExheWVyKGVsZW1lbnQpID8gW10gOiBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMoZWxlbWVudCwgdGhpcy5fYykgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICBjb25zdCBjbGlwcGluZ0FuY2VzdG9ycyA9IFsuLi5lbGVtZW50Q2xpcHBpbmdBbmNlc3RvcnMsIHJvb3RCb3VuZGFyeV07XG4gIGNvbnN0IGZpcnN0Q2xpcHBpbmdBbmNlc3RvciA9IGNsaXBwaW5nQW5jZXN0b3JzWzBdO1xuICBjb25zdCBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ0FuY2VzdG9ycy5yZWR1Y2UoKGFjY1JlY3QsIGNsaXBwaW5nQW5jZXN0b3IpID0+IHtcbiAgICBjb25zdCByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgZmlyc3RDbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICBoZWlnaHQ6IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wLFxuICAgIHg6IGNsaXBwaW5nUmVjdC5sZWZ0LFxuICAgIHk6IGNsaXBwaW5nUmVjdC50b3BcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGVsZW1lbnQsIG9mZnNldFBhcmVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuXG4gIC8vIElmIHRoZSA8Ym9keT4gc2Nyb2xsYmFyIGFwcGVhcnMgb24gdGhlIGxlZnQgKGUuZy4gUlRMIHN5c3RlbXMpLiBVc2VcbiAgLy8gRmlyZWZveCB3aXRoIGxheW91dC5zY3JvbGxiYXIuc2lkZSA9IDMgaW4gYWJvdXQ6Y29uZmlnIHRvIHRlc3QgdGhpcy5cbiAgZnVuY3Rpb24gc2V0TGVmdFJUTFNjcm9sbGJhck9mZnNldCgpIHtcbiAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gIH1cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IG9mZnNldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlLCBpc0ZpeGVkLCBvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0KCk7XG4gICAgfVxuICB9XG4gIGlmIChpc0ZpeGVkICYmICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiBkb2N1bWVudEVsZW1lbnQpIHtcbiAgICBzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0KCk7XG4gIH1cbiAgY29uc3QgaHRtbE9mZnNldCA9IGRvY3VtZW50RWxlbWVudCAmJiAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQgPyBnZXRIVE1MT2Zmc2V0KGRvY3VtZW50RWxlbWVudCwgc2Nyb2xsKSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgY29uc3QgeCA9IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54IC0gaHRtbE9mZnNldC54O1xuICBjb25zdCB5ID0gcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55IC0gaHRtbE9mZnNldC55O1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGljUG9zaXRpb25lZChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnO1xufVxuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAocG9seWZpbGwpIHtcbiAgICByZXR1cm4gcG9seWZpbGwoZWxlbWVudCk7XG4gIH1cbiAgbGV0IHJhd09mZnNldFBhcmVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXG4gIC8vIEZpcmVmb3ggcmV0dXJucyB0aGUgPGh0bWw+IGVsZW1lbnQgYXMgdGhlIG9mZnNldFBhcmVudCBpZiBpdCdzIG5vbi1zdGF0aWMsXG4gIC8vIHdoaWxlIENocm9tZSBhbmQgU2FmYXJpIHJldHVybiB0aGUgPGJvZHk+IGVsZW1lbnQuIFRoZSA8Ym9keT4gZWxlbWVudCBtdXN0XG4gIC8vIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUgY29ycmVjdCBjYWxjdWxhdGlvbnMgZXZlbiBpZiB0aGUgPGh0bWw+IGVsZW1lbnQgaXNcbiAgLy8gbm9uLXN0YXRpYy5cbiAgaWYgKGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSA9PT0gcmF3T2Zmc2V0UGFyZW50KSB7XG4gICAgcmF3T2Zmc2V0UGFyZW50ID0gcmF3T2Zmc2V0UGFyZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuICByZXR1cm4gcmF3T2Zmc2V0UGFyZW50O1xufVxuXG4vLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgaWYgKGlzVG9wTGF5ZXIoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIGxldCBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICAgIHdoaWxlIChzdmdPZmZzZXRQYXJlbnQgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICBpZiAoaXNFbGVtZW50KHN2Z09mZnNldFBhcmVudCkgJiYgIWlzU3RhdGljUG9zaXRpb25lZChzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiBzdmdPZmZzZXRQYXJlbnQ7XG4gICAgICB9XG4gICAgICBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKHN2Z09mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIHJldHVybiB3aW47XG4gIH1cbiAgbGV0IG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpO1xuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCwgcG9seWZpbGwpO1xuICB9XG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgaXNMYXN0VHJhdmVyc2FibGVOb2RlKG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkgJiYgIWlzQ29udGFpbmluZ0Jsb2NrKG9mZnNldFBhcmVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbjtcbn1cblxuY29uc3QgZ2V0RWxlbWVudFJlY3RzID0gYXN5bmMgZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgZ2V0T2Zmc2V0UGFyZW50Rm4gPSB0aGlzLmdldE9mZnNldFBhcmVudCB8fCBnZXRPZmZzZXRQYXJlbnQ7XG4gIGNvbnN0IGdldERpbWVuc2lvbnNGbiA9IHRoaXMuZ2V0RGltZW5zaW9ucztcbiAgY29uc3QgZmxvYXRpbmdEaW1lbnNpb25zID0gYXdhaXQgZ2V0RGltZW5zaW9uc0ZuKGRhdGEuZmxvYXRpbmcpO1xuICByZXR1cm4ge1xuICAgIHJlZmVyZW5jZTogZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoZGF0YS5yZWZlcmVuY2UsIGF3YWl0IGdldE9mZnNldFBhcmVudEZuKGRhdGEuZmxvYXRpbmcpLCBkYXRhLnN0cmF0ZWd5KSxcbiAgICBmbG9hdGluZzoge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB3aWR0aDogZmxvYXRpbmdEaW1lbnNpb25zLndpZHRoLFxuICAgICAgaGVpZ2h0OiBmbG9hdGluZ0RpbWVuc2lvbnMuaGVpZ2h0XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNSVEwoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSQxKGVsZW1lbnQpLmRpcmVjdGlvbiA9PT0gJ3J0bCc7XG59XG5cbmNvbnN0IHBsYXRmb3JtID0ge1xuICBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCxcbiAgZ2V0RG9jdW1lbnRFbGVtZW50LFxuICBnZXRDbGlwcGluZ1JlY3QsXG4gIGdldE9mZnNldFBhcmVudCxcbiAgZ2V0RWxlbWVudFJlY3RzLFxuICBnZXRDbGllbnRSZWN0cyxcbiAgZ2V0RGltZW5zaW9ucyxcbiAgZ2V0U2NhbGUsXG4gIGlzRWxlbWVudCxcbiAgaXNSVExcbn07XG5cbmZ1bmN0aW9uIHJlY3RzQXJlRXF1YWwoYSwgYikge1xuICByZXR1cm4gYS54ID09PSBiLnggJiYgYS55ID09PSBiLnkgJiYgYS53aWR0aCA9PT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PT0gYi5oZWlnaHQ7XG59XG5cbi8vIGh0dHBzOi8vc2FtdGhvci5hdS8yMDIxL29ic2VydmluZy1kb20vXG5mdW5jdGlvbiBvYnNlcnZlTW92ZShlbGVtZW50LCBvbk1vdmUpIHtcbiAgbGV0IGlvID0gbnVsbDtcbiAgbGV0IHRpbWVvdXRJZDtcbiAgY29uc3Qgcm9vdCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICB2YXIgX2lvO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgIChfaW8gPSBpbykgPT0gbnVsbCB8fCBfaW8uZGlzY29ubmVjdCgpO1xuICAgIGlvID0gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiByZWZyZXNoKHNraXAsIHRocmVzaG9sZCkge1xuICAgIGlmIChza2lwID09PSB2b2lkIDApIHtcbiAgICAgIHNraXAgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJlc2hvbGQgPSAxO1xuICAgIH1cbiAgICBjbGVhbnVwKCk7XG4gICAgY29uc3QgZWxlbWVudFJlY3RGb3JSb290TWFyZ2luID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB7XG4gICAgICBsZWZ0LFxuICAgICAgdG9wLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9ID0gZWxlbWVudFJlY3RGb3JSb290TWFyZ2luO1xuICAgIGlmICghc2tpcCkge1xuICAgICAgb25Nb3ZlKCk7XG4gICAgfVxuICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnNldFRvcCA9IGZsb29yKHRvcCk7XG4gICAgY29uc3QgaW5zZXRSaWdodCA9IGZsb29yKHJvb3QuY2xpZW50V2lkdGggLSAobGVmdCArIHdpZHRoKSk7XG4gICAgY29uc3QgaW5zZXRCb3R0b20gPSBmbG9vcihyb290LmNsaWVudEhlaWdodCAtICh0b3AgKyBoZWlnaHQpKTtcbiAgICBjb25zdCBpbnNldExlZnQgPSBmbG9vcihsZWZ0KTtcbiAgICBjb25zdCByb290TWFyZ2luID0gLWluc2V0VG9wICsgXCJweCBcIiArIC1pbnNldFJpZ2h0ICsgXCJweCBcIiArIC1pbnNldEJvdHRvbSArIFwicHggXCIgKyAtaW5zZXRMZWZ0ICsgXCJweFwiO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICByb290TWFyZ2luLFxuICAgICAgdGhyZXNob2xkOiBtYXgoMCwgbWluKDEsIHRocmVzaG9sZCkpIHx8IDFcbiAgICB9O1xuICAgIGxldCBpc0ZpcnN0VXBkYXRlID0gdHJ1ZTtcbiAgICBmdW5jdGlvbiBoYW5kbGVPYnNlcnZlKGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IHJhdGlvID0gZW50cmllc1swXS5pbnRlcnNlY3Rpb25SYXRpbztcbiAgICAgIGlmIChyYXRpbyAhPT0gdGhyZXNob2xkKSB7XG4gICAgICAgIGlmICghaXNGaXJzdFVwZGF0ZSkge1xuICAgICAgICAgIHJldHVybiByZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyYXRpbykge1xuICAgICAgICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgY2xpcHBlZCwgdGhlIHJhdGlvIGlzIDAuIFRocm90dGxlIHRoZSByZWZyZXNoXG4gICAgICAgICAgLy8gdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIG9mIHVwZGF0ZXMuXG4gICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZWZyZXNoKGZhbHNlLCAxZS03KTtcbiAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZyZXNoKGZhbHNlLCByYXRpbyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyYXRpbyA9PT0gMSAmJiAhcmVjdHNBcmVFcXVhbChlbGVtZW50UmVjdEZvclJvb3RNYXJnaW4sIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKSB7XG4gICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBldmVuIHRob3VnaCB0aGUgcmF0aW8gaXMgcmVwb3J0ZWQgYXMgMSwgdGhlXG4gICAgICAgIC8vIGVsZW1lbnQgaXMgbm90IGFjdHVhbGx5IGZ1bGx5IHdpdGhpbiB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIncyByb290XG4gICAgICAgIC8vIGFyZWEgYW55bW9yZS4gVGhpcyBjYW4gaGFwcGVuIHVuZGVyIHBlcmZvcm1hbmNlIGNvbnN0cmFpbnRzLiBUaGlzIG1heVxuICAgICAgICAvLyBiZSBhIGJ1ZyBpbiB0aGUgYnJvd3NlcidzIEludGVyc2VjdGlvbk9ic2VydmVyIGltcGxlbWVudGF0aW9uLiBUb1xuICAgICAgICAvLyB3b3JrIGFyb3VuZCB0aGlzLCB3ZSBjb21wYXJlIHRoZSBlbGVtZW50J3MgYm91bmRpbmcgcmVjdCBub3cgd2l0aFxuICAgICAgICAvLyB3aGF0IGl0IHdhcyBhdCB0aGUgdGltZSB3ZSBjcmVhdGVkIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlci4gSWYgdGhleVxuICAgICAgICAvLyBhcmUgbm90IGVxdWFsIHRoZW4gdGhlIGVsZW1lbnQgbW92ZWQsIHNvIHdlIHJlZnJlc2guXG4gICAgICAgIHJlZnJlc2goKTtcbiAgICAgIH1cbiAgICAgIGlzRmlyc3RVcGRhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBPbGRlciBicm93c2VycyBkb24ndCBzdXBwb3J0IGEgYGRvY3VtZW50YCBhcyB0aGUgcm9vdCBhbmQgd2lsbCB0aHJvdyBhblxuICAgIC8vIGVycm9yLlxuICAgIHRyeSB7XG4gICAgICBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihoYW5kbGVPYnNlcnZlLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIC8vIEhhbmRsZSA8aWZyYW1lPnNcbiAgICAgICAgcm9vdDogcm9vdC5vd25lckRvY3VtZW50XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChfZSkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlvLm9ic2VydmUoZWxlbWVudCk7XG4gIH1cbiAgcmVmcmVzaCh0cnVlKTtcbiAgcmV0dXJuIGNsZWFudXA7XG59XG5cbi8qKlxuICogQXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCB3aGVuIG5lY2Vzc2FyeS5cbiAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzIG1vdW50ZWQgb24gdGhlIERPTSBvclxuICogdmlzaWJsZSBvbiB0aGUgc2NyZWVuLlxuICogQHJldHVybnMgY2xlYW51cCBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBpbnZva2VkIHdoZW4gdGhlIGZsb2F0aW5nIGVsZW1lbnQgaXNcbiAqIHJlbW92ZWQgZnJvbSB0aGUgRE9NIG9yIGhpZGRlbiBmcm9tIHRoZSBzY3JlZW4uXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1VwZGF0ZVxuICovXG5mdW5jdGlvbiBhdXRvVXBkYXRlKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHVwZGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICBhbmNlc3RvclNjcm9sbCA9IHRydWUsXG4gICAgYW5jZXN0b3JSZXNpemUgPSB0cnVlLFxuICAgIGVsZW1lbnRSZXNpemUgPSB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgbGF5b3V0U2hpZnQgPSB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgYW5pbWF0aW9uRnJhbWUgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVmZXJlbmNlRWwgPSB1bndyYXBFbGVtZW50KHJlZmVyZW5jZSk7XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGFuY2VzdG9yU2Nyb2xsIHx8IGFuY2VzdG9yUmVzaXplID8gWy4uLihyZWZlcmVuY2VFbCA/IGdldE92ZXJmbG93QW5jZXN0b3JzKHJlZmVyZW5jZUVsKSA6IFtdKSwgLi4uZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZmxvYXRpbmcpXSA6IFtdO1xuICBhbmNlc3RvcnMuZm9yRWFjaChhbmNlc3RvciA9PiB7XG4gICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfSk7XG4gICAgYW5jZXN0b3JSZXNpemUgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlKTtcbiAgfSk7XG4gIGNvbnN0IGNsZWFudXBJbyA9IHJlZmVyZW5jZUVsICYmIGxheW91dFNoaWZ0ID8gb2JzZXJ2ZU1vdmUocmVmZXJlbmNlRWwsIHVwZGF0ZSkgOiBudWxsO1xuICBsZXQgcmVvYnNlcnZlRnJhbWUgPSAtMTtcbiAgbGV0IHJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgaWYgKGVsZW1lbnRSZXNpemUpIHtcbiAgICByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihfcmVmID0+IHtcbiAgICAgIGxldCBbZmlyc3RFbnRyeV0gPSBfcmVmO1xuICAgICAgaWYgKGZpcnN0RW50cnkgJiYgZmlyc3RFbnRyeS50YXJnZXQgPT09IHJlZmVyZW5jZUVsICYmIHJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIC8vIFByZXZlbnQgdXBkYXRlIGxvb3BzIHdoZW4gdXNpbmcgdGhlIGBzaXplYCBtaWRkbGV3YXJlLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzE3NDBcbiAgICAgICAgcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmVvYnNlcnZlRnJhbWUpO1xuICAgICAgICByZW9ic2VydmVGcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdmFyIF9yZXNpemVPYnNlcnZlcjtcbiAgICAgICAgICAoX3Jlc2l6ZU9ic2VydmVyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoZmxvYXRpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIGlmIChyZWZlcmVuY2VFbCAmJiAhYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUocmVmZXJlbmNlRWwpO1xuICAgIH1cbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgfVxuICBsZXQgZnJhbWVJZDtcbiAgbGV0IHByZXZSZWZSZWN0ID0gYW5pbWF0aW9uRnJhbWUgPyBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKSA6IG51bGw7XG4gIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgIGZyYW1lTG9vcCgpO1xuICB9XG4gIGZ1bmN0aW9uIGZyYW1lTG9vcCgpIHtcbiAgICBjb25zdCBuZXh0UmVmUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2UpO1xuICAgIGlmIChwcmV2UmVmUmVjdCAmJiAhcmVjdHNBcmVFcXVhbChwcmV2UmVmUmVjdCwgbmV4dFJlZlJlY3QpKSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gICAgcHJldlJlZlJlY3QgPSBuZXh0UmVmUmVjdDtcbiAgICBmcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lTG9vcCk7XG4gIH1cbiAgdXBkYXRlKCk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgdmFyIF9yZXNpemVPYnNlcnZlcjI7XG4gICAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlKTtcbiAgICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gICAgfSk7XG4gICAgY2xlYW51cElvID09IG51bGwgfHwgY2xlYW51cElvKCk7XG4gICAgKF9yZXNpemVPYnNlcnZlcjIgPSByZXNpemVPYnNlcnZlcikgPT0gbnVsbCB8fCBfcmVzaXplT2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTtcbiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgaWYgKGFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZUlkKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5jb25zdCBkZXRlY3RPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93JDE7XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IG9mZnNldCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGF1dG9QbGFjZW1lbnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gc2hpZnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmbGlwJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IOKAlFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IHNpemUkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBoaWRlJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gYXJyb3ckMTtcblxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gaW5saW5lJDE7XG5cbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBsaW1pdFNoaWZ0JDE7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSAocmVmZXJlbmNlLCBmbG9hdGluZywgb3B0aW9ucykgPT4ge1xuICAvLyBUaGlzIGNhY2hlcyB0aGUgZXhwZW5zaXZlIGBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnNgIGZ1bmN0aW9uIHNvIHRoYXRcbiAgLy8gbXVsdGlwbGUgbGlmZWN5Y2xlIHJlc2V0cyByZS11c2UgdGhlIHNhbWUgcmVzdWx0LiBJdCBvbmx5IGxpdmVzIGZvciBhXG4gIC8vIHNpbmdsZSBjYWxsLiBJZiBvdGhlciBmdW5jdGlvbnMgYmVjb21lIGV4cGVuc2l2ZSwgd2UgY2FuIGFkZCB0aGVtIGFzIHdlbGwuXG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcCgpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0ge1xuICAgIHBsYXRmb3JtLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgY29uc3QgcGxhdGZvcm1XaXRoQ2FjaGUgPSB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucy5wbGF0Zm9ybSxcbiAgICBfYzogY2FjaGVcbiAgfTtcbiAgcmV0dXJuIGNvbXB1dGVQb3NpdGlvbiQxKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgIHBsYXRmb3JtOiBwbGF0Zm9ybVdpdGhDYWNoZVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgcGxhdGZvcm0sIHNoaWZ0LCBzaXplIH07XG4iLCJpbXBvcnQgeyBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24gfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuXG5leHBvcnQgY29uc3QgUVVJQ0tfRVZFTlQgPSB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IHRydWUgfTtcbmV4cG9ydCBjb25zdCBJU19CUk9XU0VSID1cblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCI7XG5cbi8vIFRPRE86IERvY3VtZW50YXRpb24gZm9yIHByZXR0eU51bWJlclxubGV0IElOVExfTlVNOiBJbnRsLk51bWJlckZvcm1hdCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwcmV0dHlOdW1iZXIobnVtYmVyOiBudW1iZXIgfCBzdHJpbmcpIHtcblx0aWYgKCFJTlRMX05VTSlcblx0XHRJTlRMX05VTSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcblx0XHRcdChJU19CUk9XU0VSICYmIGF0dHIoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBcImxhbmdcIikpIHx8IFwibm9cIixcblx0XHQpO1xuXHRyZXR1cm4gSU5UTF9OVU0uZm9ybWF0KE51bWJlcihudW1iZXIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlPFQgZXh0ZW5kcyB1bmtub3duW10+KFxuXHRjYWxsYmFjazogKC4uLmFyZ3M6IFQpID0+IHZvaWQsXG5cdGRlbGF5OiBudW1iZXIsXG4pIHtcblx0bGV0IHRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcblxuXHRyZXR1cm4gKC4uLmFyZ3M6IFQpID0+IHtcblx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRcdHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBjYWxsYmFjayguLi5hcmdzKSwgZGVsYXkpO1xuXHR9O1xufVxuXG4vKipcbiAqIGF0dHJcbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgZ2V0LCBzZXQgYW5kIHJlbW92ZSBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gZWwgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gbmFtZSBUaGUgYXR0cmlidXRlIG5hbWUgdG8gZ2V0LCBzZXQgb3IgcmVtb3ZlLCBvciBhIG9iamVjdCB0byBzZXQgbXVsdGlwbGUgYXR0cmlidXRlc1xuICogQHBhcmFtIHZhbHVlIEEgdmFsaWQgYXR0cmlidXRlIHZhbHVlIG9yIG51bGwgdG8gcmVtb3ZlIGF0dHJpYnV0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0cihcblx0ZWw6IEVsZW1lbnQsXG5cdG5hbWU6IHN0cmluZyxcblx0dmFsdWU/OiBzdHJpbmcgfCBudWxsLFxuKTogc3RyaW5nIHwgbnVsbCB7XG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpID8/IG51bGw7IC8vIEZhbGxiYWNrIHRvIG51bGwgb25seSBpZiBlbCBpcyB1bmRlZmluZWRcblx0aWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG5cdHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIHVzZUlkXG4gKiBAcmV0dXJuIEEgZ2VuZXJhdGVkIHVuaXF1ZSBJRFxuICovXG5sZXQgaWQgPSAwO1xuY29uc3QgVVVJRCA9IGAke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgNSl9YDtcbmV4cG9ydCBmdW5jdGlvbiB1c2VJZChlbDogRWxlbWVudCkge1xuXHRpZiAoIWVsLmlkKSBlbC5pZCA9IGAke1VVSUR9JHsrK2lkfWA7XG5cdHJldHVybiBlbC5pZDtcbn1cblxuLy8gSW50ZXJuYWwgaGVscGVyIGZvciBvbiAvIG9mZlxuY29uc3QgZXZlbnRzID0gKFxuXHRhY3Rpb246IFwiYWRkXCIgfCBcInJlbW92ZVwiLFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHRbLi4ucmVzdF06IFBhcmFtZXRlcnM8dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI+LCAvLyBTcHJlYXQgdG8gbWFrZSBhIGNvcHkgb2YgdGhlIGFycmF5XG4pOiB2b2lkID0+IHtcblx0Zm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG5cdFx0cmVzdFswXSA9IHR5cGU7XG5cdFx0ZWxlbWVudFtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdKC4uLnJlc3QpO1xuXHR9XG59O1xuXG4vKipcbiAqIG9uXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9uID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiB7XG5cdGlmIChVTkJJTkQgJiYgKGVsZW1lbnQgPT09IHdpbmRvdyB8fCBlbGVtZW50ID09PSBkb2N1bWVudCkpXG5cdFx0VU5CSU5ELnB1c2goKCkgPT4gb2ZmKGVsZW1lbnQsIC4uLnJlc3QpKTtcblx0ZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xufTtcblxuLyoqXG4gKiBvZmZcbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIHR5cGVzIEEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBldmVudCB0eXBlc1xuICogQHBhcmFtIGxpc3RlbmVyIEFuIGV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uIG9yIGxpc3RlbmVyIG9iamVjdFxuICovXG5leHBvcnQgY29uc3Qgb2ZmID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIFdpbmRvdyB7XG5cdFx0X210ZHNVbmJpbmRFdmVudHM/OiBNYXA8c3RyaW5nLCBBcnJheTwoKSA9PiB2b2lkPj47XG5cdH1cbn1cblxuLyoqXG4gKiBvbkxvYWRlZFxuICogQGRlc2NyaXB0aW9uIFJ1bnMgYSBjYWxsYmFjayB3aGVuIHdpbmRvdyBpcyBsb2FkZWQgaW4gYnJvd3NlciwgYW5kIGVuc3VyZXMgZXZlbnRzIGFyZSB1bmJvdW5kIGlmIGhvdCByZWxvYWRpbmdcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gdGhlIHBhZ2UgaXMgcmVhZHlcbiAqL1xubGV0IFVOQklORDogQXJyYXk8KCkgPT4gdm9pZD4gfCBudWxsID0gbnVsbDtcbmV4cG9ydCBjb25zdCBvbkxvYWRlZCA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuXHRpZiAoIUlTX0JST1dTRVIgfHwgIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHJldHVybjsgLy8gU2tpcCBpZiBub3QgaW4gYnJvd3NlciBlbnZpcm9ubWVudFxuXHRpZiAoIXdpbmRvdy5fbXRkc1VuYmluZEV2ZW50cykgd2luZG93Ll9tdGRzVW5iaW5kRXZlbnRzID0gbmV3IE1hcCgpO1xuXG5cdGNvbnN0IHJ1biA9ICgpID0+XG5cdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRcdGNvbnN0IGtleSA9IFN0cmluZyhjYWxsYmFjaykucmVwbGFjZSgvKFxcbnxcXHMpL2csIFwiXCIpO1xuXHRcdFx0d2luZG93Ll9tdGRzVW5iaW5kRXZlbnRzPy5nZXQoa2V5KT8uZm9yRWFjaCgodW5iaW5kKSA9PiB7XG5cdFx0XHRcdHVuYmluZCgpOyAvLyBVbmJpbmQgcHJldmlvdXMgZXZlbnRzXG5cdFx0XHR9KTtcblx0XHRcdFVOQklORCA9IFtdOyAvLyBQcmVwYXJlIHRvIGxpc3RlbiBmb3IgbmV3bHkgYm91bmQgZXZlbnRzXG5cdFx0XHRjYWxsYmFjaygpOyAvLyBSdW4gYmluZGluZ1xuXHRcdFx0d2luZG93Ll9tdGRzVW5iaW5kRXZlbnRzPy5zZXQoa2V5LCBVTkJJTkQ/LnNsaWNlKDApKTsgLy8gU3RvcmUgZm9yIGxhdGVyIHVuYmluZGluZ1xuXHRcdFx0VU5CSU5EID0gbnVsbDsgLy8gU3RvcCBsaXN0ZW5pbmcgZm9yIG5ld2x5IGJvdW5kIGV2ZW50c1xuXHRcdH0pO1xuXG5cdGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHJ1bigpO1xuXHRlbHNlIG9uKHdpbmRvdywgXCJsb2FkXCIsIHJ1bik7XG59O1xuXG5jb25zdCBBTkNIT1JFRCA9IG5ldyBXZWFrTWFwPEVsZW1lbnQsIFJldHVyblR5cGU8dHlwZW9mIGF1dG9VcGRhdGU+PigpO1xuZXhwb3J0IGZ1bmN0aW9uIGFuY2hvclBvc2l0aW9uKFxuXHR0YXJnZXQ6IEhUTUxFbGVtZW50LFxuXHRhbmNob3I6IGZhbHNlIHwgRWxlbWVudCxcblx0b3B0aW9ucz86IFBhcmFtZXRlcnM8dHlwZW9mIGNvbXB1dGVQb3NpdGlvbj5bMl0sXG4pIHtcblx0QU5DSE9SRUQuZ2V0KHRhcmdldCk/LigpOyAvLyBVbmJpbmQgcHJldmlvdXMgYW5jaG9yIHBvc2l0aW9uXG5cdEFOQ0hPUkVELmRlbGV0ZSh0YXJnZXQpO1xuXG5cdGlmIChhbmNob3IpXG5cdFx0QU5DSE9SRUQuc2V0KFxuXHRcdFx0dGFyZ2V0LFxuXHRcdFx0YXV0b1VwZGF0ZShhbmNob3IsIHRhcmdldCwgKCkgPT4ge1xuXHRcdFx0XHRpZiAoIXRhcmdldC5pc0Nvbm5lY3RlZCB8fCAhYW5jaG9yLmlzQ29ubmVjdGVkIHx8IHRhcmdldC5oaWRkZW4pXG5cdFx0XHRcdFx0cmV0dXJuIGFuY2hvclBvc2l0aW9uKHRhcmdldCwgZmFsc2UpO1xuXHRcdFx0XHRjb21wdXRlUG9zaXRpb24oYW5jaG9yLCB0YXJnZXQsIG9wdGlvbnMpLnRoZW4oKHsgeCwgeSB9KSA9PiB7XG5cdFx0XHRcdFx0dGFyZ2V0LnN0eWxlLmxlZnQgPSBgJHt4fXB4YDtcblx0XHRcdFx0XHR0YXJnZXQuc3R5bGUudG9wID0gYCR7eX1weGA7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSksXG5cdFx0KTtcbn1cblxuLyoqXG4gKiBTcGVlZCB1cCBNdXRhdGlvbk9ic2VydmVyIGJ5IGRlYm91bmNpbmcgYW5kIG9ubHkgcnVubmluZyB3aGVuIHBhZ2UgaXMgdmlzaWJsZVxuICogQHJldHVybiBuZXcgTXV0YWlvbk9ic2VydmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrOiBNdXRhdGlvbkNhbGxiYWNrKSB7XG5cdGxldCBxdWV1ZSA9IDA7XG5cblx0Y29uc3Qgb25GcmFtZSA9ICgpID0+IHNldFRpbWVvdXQob25UaW1lciwgMjAwKTsgLy8gVXNlIGJvdGggcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGFuZCBzZXRUaW1lb3V0IHRvIGRlYm91bmNlIGFuZCBvbmx5IHJ1biB3aGVuIHZpc2libGVcblx0Y29uc3Qgb25UaW1lciA9ICgpID0+IHtcblx0XHRjYWxsYmFjayhbXSwgb2JzZXJ2ZXIpO1xuXHRcdG9ic2VydmVyLnRha2VSZWNvcmRzKCk7IC8vIENsZWFyIHJlY29yZHMgdG8gYXZvaWQgcnVubmluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuXHRcdHF1ZXVlID0gMDtcblx0fTtcblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG5cdFx0aWYgKCFxdWV1ZSkgcXVldWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUob25GcmFtZSk7XG5cdH0pO1xuXG5cdHJldHVybiBvYnNlcnZlcjtcbn1cblxuLyoqXG4gKiBvbk11dGF0aW9uXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IG9ic2VydmUgbXV0YXRpb25zIG9uIGEgc3BlY2lmaWMgY2xhc3MgbmFtZVxuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgY2xhc3MgbmFtZSB0byBvYnNlcnZlXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHJ1biB3aGVuIG11dGF0aW9ucyBhcmUgZGV0ZWN0ZWRcbiAqL1xuY29uc3QgTVVUQVRPUlMgPSBuZXcgV2Vha01hcDxFbGVtZW50LCBBcnJheTwoKSA9PiB2b2lkPj4oKTtcbmV4cG9ydCBjb25zdCBvbk11dGF0aW9uID0gPFQgZXh0ZW5kcyBFbGVtZW50Pihcblx0ZWw6IEVsZW1lbnQsXG5cdGNsYXNzTmFtZTogc3RyaW5nLFxuXHRjYWxsYmFjazogKGVsZW1zOiBIVE1MQ29sbGVjdGlvbk9mPFQ+KSA9PiB2b2lkLFxuKSA9PiB7XG5cdGlmICghSVNfQlJPV1NFUiB8fCAhd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSkgcmV0dXJuOyAvLyBTa2lwIGlmIG5vdCBpbiBicm93c2VyIGVudmlyb25tZW50XG5cdGNvbnN0IGVsZW1zID0gZWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpO1xuXHRjb25zdCBtdXRhdG9yID0gTVVUQVRPUlMuZ2V0KGVsKSB8fCBbXTtcblxuXHRpZiAoIW11dGF0b3IubGVuZ3RoKSB7XG5cdFx0TVVUQVRPUlMuc2V0KGVsLCBtdXRhdG9yKTtcblx0XHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKChfLCBvYnNlcnZlcikgPT4ge1xuXHRcdFx0aWYgKGVsLmlzQ29ubmVjdGVkICYmIG11dGF0b3I/Lmxlbmd0aCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIG11dGF0b3IpIGNhbGxiYWNrKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRNVVRBVE9SUy5kZWxldGUoZWwpO1xuXHRcdFx0fVxuXHRcdH0pLm9ic2VydmUoZWwsIHtcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wiY2xhc3NcIiwgXCJoaWRkZW5cIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0c3VidHJlZTogdHJ1ZSxcblx0XHR9KTtcblx0fVxuXHRtdXRhdG9yLnB1c2goKCkgPT4gY2FsbGJhY2soZWxlbXMgYXMgSFRNTENvbGxlY3Rpb25PZjxUPikpO1xufTtcblxuLyoqXG4gKiBpc0lucHV0TGlrZVxuICogQGRlc2NyaXB0aW9uIENoZWNrIGlmIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKiBAcGFyYW0gZWwgVGhlIGVsZW1lbnQgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKi9cbmV4cG9ydCBjb25zdCBpc0lucHV0TGlrZSA9IChlbDogdW5rbm93bik6IGVsIGlzIEhUTUxJbnB1dEVsZW1lbnQgPT5cblx0ZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcInZhbGlkaXR5XCIgaW4gZWwgJiZcblx0IShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KTtcblxuLyoqXG4gKiB0b0N1c3RvbUVsZW1lbnRQcm9wc1xuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBjb252ZXJ0IHByb3BzIHRvIGN1c3RvbSBlbGVtZW50IGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcHMgdG8gY29udmVydFxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBwcm9wc1xuICovXG5jb25zdCBTRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xuZXhwb3J0IGNvbnN0IHRvQ3VzdG9tRWxlbWVudFByb3BzID0gKFxuXHR7IGNsYXNzTmFtZSwgaGlkZGVuLCBvcGVuLCAuLi5yZXN0IH06IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRrbGFzcz86IHN0cmluZyxcbikgPT4ge1xuXHRyZXN0LnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyA9IHRydWU7IC8vIE1ha2UgTmV4dC5qcyBoYXBweVxuXHRpZiAocmVzdFtTRUxFQ1RFRF0gIT09IHVuZGVmaW5lZClcblx0XHRyZXN0W1NFTEVDVEVEXSA9IGAkeyhyZXN0W1NFTEVDVEVEXSB8fCBcImZhbHNlXCIpICE9PSBcImZhbHNlXCJ9YDsgLy8gRW5zdXJlIGFyaWEtc2VsZWN0ZWQgYm9vbGVhbiBpcyBzdHJpbmdcblx0aWYgKGNsYXNzTmFtZSB8fCBrbGFzcykgcmVzdC5jbGFzcyA9IGAke2tsYXNzfSAke2NsYXNzTmFtZX1gLnRyaW0oKTsgLy8gVXNlIGNsYXNzIGluc3RlYWQgb2YgY2xhc3NOYW1lXG5cdGlmIChoaWRkZW4pIHJlc3QuaGlkZGVuID0gdHJ1ZTsgLy8gRW5zdXJlIGJvb2xlYW4gcHJvcCBiZWhhdmlvdXJcblx0aWYgKG9wZW4pIHJlc3Qub3BlbiA9IHRydWU7IC8vIEVuc3VyZSBib29sZWFuIHByb3AgYmVoYXZpb3VyXG5cdHJldHVybiByZXN0O1xufTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBJU19CUk9XU0VSLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19CUkVBRENSVU1CUyA9IGAuJHtzdHlsZXMuYnJlYWRjcnVtYnMuc3BsaXQoXCIgXCIpWzBdfWA7XG5jb25zdCBDU1NfQ0hJUCA9IGAuJHtzdHlsZXMuY2hpcC5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENTU19IRUxQVEVYVCA9IGAuJHtzdHlsZXMuaGVscHRleHQuc3BsaXQoXCIgXCIpWzBdfWA7XG5jb25zdCBDU1NfUEFHSU5BVElPTiA9IGAuJHtzdHlsZXMucGFnaW5hdGlvbi5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENMSUNLUyA9IGBzdW1tYXJ5LHUtc3VtbWFyeSxhLGJ1dHRvbixbcm9sZT1cInRhYlwiXSxbcm9sZT1cImJ1dHRvblwiXWA7XG5jb25zdCBFVkVOVFMgPSBcImNsaWNrLHRvZ2dsZSxzdWJtaXQsY2hhbmdlXCI7XG5jb25zdCBNQVRPTU8gPSBcIm1hdHRpbHN5bmV0Lm1hdG9tby5jbG91ZFwiO1xuY29uc3QgQkFOTkVSID0gXCJtdGRzLWFuYWx5dGljcy1iYW5uZXJcIjsgLy8gRGlhbG9nIHRvIHNob3cgTWF0b21vIHNjcmlwdCBsb2FkaW5nXG5jb25zdCBCQU5ORVJfVVJMID1cblx0XCJodHRwczovL3d3dy5tYXR0aWxzeW5ldC5uby9vbS1tYXR0aWxzeW5ldC9wZXJzb252ZXJuZXJrbGFlcmluZy9pbmZvcm1hc2pvbnNrYXBzbGVyXCI7XG5cbnR5cGUgTWF0b21vID0gKFxuXHR8IHN0cmluZ1xuXHR8IG51bWJlclxuXHR8IGJvb2xlYW5cblx0fCBEb2N1bWVudFxuXHR8IEVsZW1lbnRcblx0fCAoKHRoaXM6IFJlY29yZDxzdHJpbmcsIDxUPigpID0+IFQ+KSA9PiB2b2lkKVxuKVtdO1xuZGVjbGFyZSBnbG9iYWwge1xuXHRpbnRlcmZhY2UgV2luZG93IHtcblx0XHRfcGFxPzogTWF0b21vW107XG5cdFx0X210bT86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj5bXTtcblx0XHRfbXRkc1RyYWNraW5nPzogQW5hbHl0aWNzQWN0aW9uc1tcImluaXRcIl07XG5cdFx0X210ZHNVbnRyYWNrPzogKCkgPT4gdm9pZDtcblx0fVxufVxuXG5leHBvcnQgdHlwZSBBbmFseXRpY3NBY3Rpb25zID0ge1xuXHRpbml0OiB7XG5cdFx0ZW5hYmxlZD86IGJvb2xlYW4gfCBcImRlYnVnXCI7XG5cdFx0Y29uc2VudD86IFwiY3VzdG9tXCIgfCB0cnVlO1xuXHR9ICYgKFxuXHRcdHwge1xuXHRcdFx0XHRtYXRvbW9JZDogbnVtYmVyIHwgc3RyaW5nO1xuXHRcdFx0XHRtYXRvbW9UYWdNYW5hZ2VySWQ/OiBuZXZlcjtcblx0XHQgIH1cblx0XHR8IHtcblx0XHRcdFx0bWF0b21vSWQ/OiBuZXZlcjtcblx0XHRcdFx0bWF0b21vVGFnTWFuYWdlcklkOiBzdHJpbmc7XG5cdFx0ICB9XG5cdCk7XG5cdHBhZ2V2aWV3OiB7XG5cdFx0dXJsPzogc3RyaW5nO1xuXHRcdHRpdGxlPzogc3RyaW5nO1xuXHR9O1xuXHRldmVudDoge1xuXHRcdGNhdGVnb3J5OiBzdHJpbmc7XG5cdFx0YWN0aW9uOiBzdHJpbmc7XG5cdFx0bmFtZT86IHN0cmluZztcblx0XHR2YWx1ZT86IG51bWJlcjtcblx0fTtcblx0c2VhcmNoOiB7XG5cdFx0cXVlcnk6IHN0cmluZztcblx0XHRjYXRlZ29yeT86IHN0cmluZztcblx0XHRyZXN1bHRzPzogbnVtYmVyO1xuXHR9O1xuXHRtYXRvbW86IE1hdG9tbztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhbmFseXRpY3M8QWN0aW9uIGV4dGVuZHMga2V5b2YgQW5hbHl0aWNzQWN0aW9ucz4oXG5cdGFjdGlvbjogQWN0aW9uLFxuXHRhcmdzID0ge30gYXMgQW5hbHl0aWNzQWN0aW9uc1tBY3Rpb25dLFxuKSB7XG5cdGlmICghSVNfQlJPV1NFUikgcmV0dXJuO1xuXHRpZiAoIXdpbmRvdy5fcGFxKSB7XG5cdFx0d2luZG93Ll9wYXEgPSBbXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcIkhlYXRtYXBTZXNzaW9uUmVjb3JkaW5nOjpkaXNhYmxlXCJdKTsgLy8gRGlzYWJsZSBoZWF0bWFwcyBieSBkZWZhdWx0IGFzIHRoaXMgcmVxdWlyZSBjb29raWVzXG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJlbmFibGVMaW5rVHJhY2tpbmdcIl0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0VHJhY2tlclVybFwiLCBgaHR0cHM6Ly8ke01BVE9NT30vbWF0b21vLnBocGBdKTtcblx0fVxuXHRpZiAoIXdpbmRvdy5fbXRtKSB7XG5cdFx0d2luZG93Ll9tdG0gPSB3aW5kb3cuX210bSB8fCBbXTsgLy8gUHJlcGFyZSBNYXRvbW8gVGFnIE1hbmFnZXJcblx0XHR3aW5kb3cuX210bS5wdXNoKHsgXCJtdG0uc3RhcnRUaW1lXCI6IERhdGUubm93KCksIGV2ZW50OiBcIm10bS5TdGFydFwiIH0pO1xuXHR9XG5cblx0aWYgKGFjdGlvbiA9PT0gXCJpbml0XCIpIHtcblx0XHR3aW5kb3cuX210ZHNUcmFja2luZyA9IHtcblx0XHRcdGVuYWJsZWQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSAhPT0gXCJsb2NhbGhvc3RcIixcblx0XHRcdC4uLndpbmRvdy5fbXRkc1RyYWNraW5nLFxuXHRcdFx0Li4uYXJncyxcblx0XHR9IGFzIEFuYWx5dGljc0FjdGlvbnNbXCJpbml0XCJdO1xuXHRcdGNvbnN0IHsgY29uc2VudCwgZW5hYmxlZCwgbWF0b21vSWQsIG1hdG9tb1RhZ01hbmFnZXJJZCB9ID1cblx0XHRcdHdpbmRvdy5fbXRkc1RyYWNraW5nO1xuXG5cdFx0aWYgKG1hdG9tb0lkKSB3aW5kb3cuX3BhcS5wdXNoKFtcInNldFNpdGVJZFwiLCBtYXRvbW9JZF0pO1xuXHRcdGlmIChlbmFibGVkKSB7XG5cdFx0XHRpZiAoY29uc2VudCAhPT0gXCJjdXN0b21cIikgcmVuZGVyQmFubmVyKCk7XG5cdFx0XHRjb25zdCBzcmMgPSBtYXRvbW9UYWdNYW5hZ2VySWRcblx0XHRcdFx0PyBgaHR0cHM6Ly9jZG4ubWF0b21vLmNsb3VkLyR7TUFUT01PfS9jb250YWluZXJfJHttYXRvbW9UYWdNYW5hZ2VySWR9LmpzYFxuXHRcdFx0XHQ6IGBodHRwczovL2Nkbi5tYXRvbW8uY2xvdWQvJHtNQVRPTU99L21hdG9tby5qc2A7XG5cblx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHNjcmlwdFtzcmM9XCIke3NyY31cIl1gKSB8fFxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZChcblx0XHRcdFx0XHRPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIiksIHtcblx0XHRcdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRcdFx0c3JjLFxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdGlmICh3aW5kb3cuX210ZHNUcmFja2luZz8uZW5hYmxlZCA9PT0gZmFsc2UpIHJldHVybjtcblx0aWYgKHdpbmRvdy5fbXRkc1RyYWNraW5nPy5lbmFibGVkID09PSBcImRlYnVnXCIpXG5cdFx0cmV0dXJuIGNvbnNvbGUuaW5mbyhgYW5hbHl0aWNzKFwiJHthY3Rpb259XCIsIGAsIGFyZ3MsIFwiKVwiKTtcblxuXHRpZiAoYWN0aW9uID09PSBcInBhZ2V2aWV3XCIpIHtcblx0XHRjb25zdCB7IHVybCwgdGl0bGUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInBhZ2V2aWV3XCJdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0Q3VzdG9tVXJsXCIsIHVybCB8fCBsb2NhdGlvbi5ocmVmXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXREb2N1bWVudFRpdGxlXCIsIHRpdGxlIHx8IGRvY3VtZW50LnRpdGxlXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJ0cmFja1BhZ2VWaWV3XCJdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwiZXZlbnRcIikge1xuXHRcdGNvbnN0IHsgY2F0ZWdvcnksIGFjdGlvbiwgbmFtZSwgdmFsdWUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcImV2ZW50XCJdO1xuXHRcdGNvbnN0IGV2ZW50ID0gW1widHJhY2tFdmVudFwiLCBjYXRlZ29yeSwgYWN0aW9uLCBuYW1lLCB2YWx1ZV07XG5cblx0XHQvLyBXZSBkbyBub3Qgd2FudCB0byB0cmFjayBldmVudHMgd2l0aCBoYXNoIGluIFVSTCBhcyB0aGlzIGNhdXNlcyBoYXJkLXRvLXJlYWQgZGF0YSxcblx0XHQvLyBzbyB0ZW1wb3JhcmlseSByZW1vdmUgdGhlIGhhc2ggcGFydCwgYW5kIGFkZCBpdCBiYWNrIGFmdGVyIHRoZSBldmVudCBpcyBwdXNoZWRcblx0XHRsZXQgdXJsID0gbG9jYXRpb24uaHJlZjtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcblx0XHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dXJsID0gdGhpcy5nZXRDdXJyZW50VXJsPHN0cmluZz4oKTtcblx0XHRcdH0sXG5cdFx0XSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRDdXN0b21VcmxcIiwgdXJsLnNwbGl0KFwiI1wiKVswXV0pOyAvLyBTa2lwIGhhc2ggcGFydCBvZiBVUkxcblx0XHR3aW5kb3cuX3BhcS5wdXNoKGV2ZW50LmZpbHRlcigodikgPT4gdiAhPT0gdW5kZWZpbmVkKSk7IC8vIFB1c2ggZXZlbnRcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCB1cmxdKTsgLy8gUmV2ZXJydCB0byBvcmlnaW5hbCBVUkwgd2l0aCBoYXNoXG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcInNlYXJjaFwiKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0cXVlcnksXG5cdFx0XHRjYXRlZ29yeSA9IGZhbHNlLFxuXHRcdFx0cmVzdWx0cyA9IGZhbHNlLFxuXHRcdH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJzZWFyY2hcIl07XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJ0cmFja1NpdGVTZWFyY2hcIiwgcXVlcnksIGNhdGVnb3J5LCByZXN1bHRzXSk7XG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcIm1hdG9tb1wiKSB7XG5cdFx0d2luZG93Ll9wYXEucHVzaChhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJtYXRvbW9cIl0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbmRlckJhbm5lcigpIHtcblx0Y29uc3QgaGFzU2VlbkJhbm5lciA9XG5cdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoQkFOTkVSKSB8fCB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oQkFOTkVSKTtcblxuXHRpZiAoaGFzU2VlbkJhbm5lcikgcmV0dXJuO1xuXG5cdGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuXHRcdFwiYWZ0ZXJiZWdpblwiLFxuXHRcdGA8ZGlhbG9nIGlkPVwiJHtCQU5ORVJ9XCIgZGF0YS1hbmFseXRpY3M9XCJpZ25vcmVcIj48c3R5bGU+XG5cdFx0XHRcdCMke0JBTk5FUn1bb3Blbl0geyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBiYWNrZ3JvdW5kOiAjMTE2ZTZiOyBib3JkZXItcmFkaXVzOiAuNWVtOyBib3JkZXI6IDA7IGJveC1zaGFkb3c6IDAgLjI1ZW0gLjVlbSByZ2JhKDAsMCwwLC4zKTsgY29sb3I6ICNmZmY7IGZvbnQtc2l6ZTogLjg3NWVtOyBpbnNldDogYXV0byBhdXRvIDFlbSAxZW07IG1heC13aWR0aDogY2FsYygxMDB2dyAtIDJlbSk7IG91dGxpbmU6IDA7IHBhZGRpbmc6IC41ZW07IHBvc2l0aW9uOiBmaXhlZDsgei1pbmRleDogOTk5OTkgfVxuXHRcdFx0XHQjJHtCQU5ORVJ9IGJ1dHRvbiB7IGFsbDogdW5zZXQ7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogZmxleDsgd2lkdGg6IDEuNWVtOyBoZWlnaHQ6IDEuNWVtOyBmb250OiAzMDAgMS41ZW0vMS4zNSBzYW5zLXNlcmlmOyBib3JkZXItcmFkaXVzOiAuMjVlbTsgcGxhY2UtY29udGVudDogY2VudGVyOyB0cmFuc2l0aW9uOiAuMnM7IHRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQsIHNjYWxlIH1cblx0XHRcdFx0IyR7QkFOTkVSfSBidXR0b246Zm9jdXMtdmlzaWJsZSB7IG91dGxpbmU6IDJweCBzb2xpZCB9XG5cdFx0XHRcdCMke0JBTk5FUn0gYnV0dG9uOmhvdmVyIHsgYmFja2dyb3VuZDogIzBhNGU0ZiB9XG5cdFx0XHRcdCMke0JBTk5FUn0gYnV0dG9uOmFjdGl2ZSB7IGJhY2tncm91bmQ6ICMwNTQ0NDk7IHNjYWxlOiAuOSB9XG5cdFx0XHRcdCMke0JBTk5FUn0gcCB7IG1hcmdpbjogMCAuMjVlbSB9XG5cdFx0XHQ8L3N0eWxlPlxuXHRcdFx0PHA+VmkgYnJ1a2VyIDxhIGhyZWY9XCIke0JBTk5FUl9VUkx9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+aW5mb3JtYXNqb25za2Fwc2xlcjwvYT4gZm9yIMOlIGZvcmJlZHJlIGJydWtlcm9wcGxldmVsc2VuLjwvcD5cblx0XHRcdDxmb3JtIG1ldGhvZD1cImRpYWxvZ1wiIGRhdGEtYW5hbHl0aWNzPVwiaWdub3JlXCI+PGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgYXJpYS1sYWJlbD1cIk9LXCI+JnRpbWVzOzwvYnV0dG9uPjwvZm9ybT5cblx0XHQ8L2RpYWxvZz5gLFxuXHQpO1xuXHRjb25zdCBiYW5uZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChCQU5ORVIpIGFzIEhUTUxEaWFsb2dFbGVtZW50O1xuXHRjb25zdCBvbkNsb3NlID0gKCkgPT4gd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKEJBTk5FUiwgXCJzZWVuXCIpO1xuXHRiYW5uZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsb3NlXCIsIG9uQ2xvc2UsIHsgb25jZTogdHJ1ZSB9KTtcblx0YmFubmVyLnNob3coKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlVHJhY2soZXZlbnQ6IEV2ZW50KSB7XG5cdGlmICh3aW5kb3cuX210ZHNUcmFja2luZz8uZW5hYmxlZCkgc2V0VGltZW91dChwcm9jZXNzVHJhY2ssIDAsIGV2ZW50KTsgLy8gTGV0IG90aGVyIGV2ZW50cyBwcm9jZXNzIGZpcnN0XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NUcmFjayh7IHR5cGUsIHRhcmdldCB9OiBFdmVudCkge1xuXHRjb25zdCBlbCA9IHR5cGUgPT09IFwiY2xpY2tcIiA/ICh0YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihDTElDS1MpIDogdGFyZ2V0O1xuXHRpZiAoIShlbCBpbnN0YW5jZW9mIEVsZW1lbnQpIHx8IGVsLmNsb3Nlc3QoJ1tkYXRhLWFuYWx5dGljcz1cImlnbm9yZVwiXScpKVxuXHRcdHJldHVybjtcblxuXHRsZXQgYWN0aW9uID0gXCJjbGlja1wiO1xuXHRsZXQgY2F0ZWdvcnkgPSBcIkJ1dHRvblwiO1xuXHRsZXQgbmFtZSA9IGxhYmVsKGVsKSB8fCBoZWFkaW5nKGVsKSB8fCBhdHRyKGVsLCBcImRhdGEtdG9vbHRpcFwiKSB8fCBcIlwiO1xuXG5cdGlmICh0eXBlID09PSBcInN1Ym1pdFwiKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkZvcm1cIjtcblx0XHRhY3Rpb24gPSBcInN1Ym1pdFwiO1xuXHRcdG5hbWUgPSBuYW1lIHx8IGRvY3VtZW50LnRpdGxlO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT09IFwidG9nZ2xlXCIpIHtcblx0XHRpZiAoIWVsLm1hdGNoZXMoXCJkaWFsb2c6bW9kYWxcIikpIHJldHVybjsgLy8gU2tpcCBub24tbW9kYWwgZGlhbG9nc1xuXHRcdGNhdGVnb3J5ID0gXCJEaWFsb2dcIjtcblx0XHRhY3Rpb24gPSBcIm9wZW5cIjtcblx0fSBlbHNlIGlmICh0eXBlID09PSBcImNoYW5nZVwiKSB7XG5cdFx0Y29uc3QgdHlwZSA9IGF0dHIoZWwsIFwidHlwZVwiKTtcblx0XHRjb25zdCBncm91cCA9XG5cdFx0XHR0eXBlID09PSBcImNoZWNrYm94XCIgfHwgdHlwZSA9PT0gXCJyYWRpb1wiID8gZWwuY2xvc2VzdChcImZpZWxkc2V0XCIpIDogbnVsbDtcblxuXHRcdGNhdGVnb3J5ID0gXCJGb3JtXCI7XG5cdFx0YWN0aW9uID0gXCJjaGFuZ2VcIjtcblx0XHRuYW1lID1cblx0XHRcdGxhYmVsKGdyb3VwIHx8IGVsKSB8fFxuXHRcdFx0dGV4dChncm91cD8ucXVlcnlTZWxlY3RvcihcImxlZ2VuZFwiKSkgfHxcblx0XHRcdHRleHQoKGVsIGFzIEhUTUxJbnB1dEVsZW1lbnQpPy5sYWJlbHM/LlswXSk7XG5cdH0gZWxzZSBpZiAoYXR0cihlbCwgXCJyb2xlXCIpID09PSBcInRhYlwiKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIlRhYlwiO1xuXHRcdGFjdGlvbiA9IFwibmF2aWdhdGVcIjtcblx0fSBlbHNlIGlmIChhdHRyKGVsLCBcInBvcG92ZXJ0YXJnZXRcIikpIHtcblx0XHRpZiAoIXBvcG92ZXIoZWwpPy5tYXRjaGVzKFwiOnBvcG92ZXItb3BlblwiKSkgcmV0dXJuOyAvLyBTa2lwIGlmIG5vdCBvcGVuXG5cdFx0Y2F0ZWdvcnkgPSBlbC5jbG9zZXN0KENTU19IRUxQVEVYVCkgPyBcIkhlbHBUZXh0XCIgOiBcIlBvcG92ZXJcIjtcblx0XHRhY3Rpb24gPSBcIm9wZW5cIjtcblx0fSBlbHNlIGlmIChlbC5ub2RlTmFtZS5lbmRzV2l0aChcIlNVTU1BUllcIikpIHtcblx0XHRpZiAoIShlbC5wYXJlbnRFbGVtZW50IGFzIEhUTUxEZXRhaWxzRWxlbWVudCkub3BlbikgcmV0dXJuOyAvLyBTa2lwIGlmIG5vdCBvcGVuXG5cdFx0Y2F0ZWdvcnkgPSBcIkRldGFpbHNcIjtcblx0XHRhY3Rpb24gPSBcIm9wZW5cIjtcblx0fSBlbHNlIGlmIChhdHRyKGVsLCBcImRhdGEtY29tbWFuZFwiKSA9PT0gXCJ0b2dnbGUtYXBwLWV4cGFuZGVkXCIpIHtcblx0XHRjb25zdCBvcGVuID0gc3R5bGUoZWwsIFwiLS1tdGRzLXRvb2x0aXAtcG9zaXRpb25cIikgPT09IFwibm9uZVwiO1xuXHRcdGNhdGVnb3J5ID0gXCJTaWRlYmFyXCI7XG5cdFx0YWN0aW9uID0gb3BlbiA/IFwiZXhwYW5kXCIgOiBcIm1pbmltaXplXCI7XG5cdFx0bmFtZSA9IChvcGVuICYmIGF0dHIoZWwsIFwiZGF0YS10b29sdGlwXCIpKSB8fCB0ZXh0KGVsKTtcblx0fSBlbHNlIGlmIChlbC5jbG9zZXN0KENTU19CUkVBRENSVU1CUykpIHtcblx0XHRjYXRlZ29yeSA9IFwiQnJlYWRjcnVtYnNcIjtcblx0XHRhY3Rpb24gPSBcIm5hdmlnYXRlXCI7XG5cdH0gZWxzZSBpZiAoZWwuY2xvc2VzdChDU1NfUEFHSU5BVElPTikpIHtcblx0XHRjYXRlZ29yeSA9IFwiUGFnaW50YXRpb25cIjtcblx0XHRhY3Rpb24gPSBcIm5hdmlnYXRlXCI7XG5cdH0gZWxzZSBpZiAoZWwuY2xvc2VzdChDU1NfQ0hJUCkpIHtcblx0XHRjYXRlZ29yeSA9IFwiQ2hpcFwiO1xuXHRcdGFjdGlvbiA9IGVsLmhhc0F0dHJpYnV0ZShcImRhdGEtcmVtb3ZhYmxlXCIpID8gXCJyZW1vdmVcIiA6IFwiY2xpY2tcIjtcblx0fSBlbHNlIGlmIChlbC5jbG9zZXN0KFwidGhbYXJpYS1zb3J0XVwiKSkge1xuXHRcdGNhdGVnb3J5ID0gXCJUYWJsZVwiO1xuXHRcdGFjdGlvbiA9IFwic29ydFwiO1xuXHR9IGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgSFRNTEFuY2hvckVsZW1lbnQpIHtcblx0XHRjYXRlZ29yeSA9IFwiTGlua1wiO1xuXHRcdGFjdGlvbiA9IGVsLnByb3RvY29sID09PSBcIm1haWx0bzpcIiA/IFwiZW1haWxcIiA6IFwibmF2aWdhdGVcIjtcblx0XHRpZiAoZWwuaGFzQXR0cmlidXRlKFwiZG93bmxvYWRcIikpIGFjdGlvbiA9IFwiZG93bmxvYWRcIjtcblx0XHRlbHNlIGlmIChlbC5oYXNoICYmIGVsLmhyZWYuc3RhcnRzV2l0aChsb2NhdGlvbi5ocmVmLnNwbGl0KFwiI1wiKVswXSkpXG5cdFx0XHRhY3Rpb24gPSBcImFuY2hvclwiOyAvLyBPbmx5IHRyYWNrIGFzIGFuY2hvciBpZiBzYW1lIHBhZ2Vcblx0fSBlbHNlIGlmIChlbC5oYXNBdHRyaWJ1dGUoXCJhcmlhLWV4cGFuZGVkXCIpKSB7XG5cdFx0aWYgKGF0dHIoZWwsIFwiYXJpYS1leHBhbmRlZFwiKSAhPT0gXCJ0cnVlXCIpIHJldHVybjsgLy8gU2tpcCBpZiBub3Qgb3BlblxuXHRcdGNhdGVnb3J5ID0gXCJFeHBhbmRcIjtcblx0XHRhY3Rpb24gPSBcIm9wZW5cIjtcblx0fVxuXG5cdC8vIFJlc3BlY3QgYXR0cmlidXRlcyBhbmQgc2VuZFxuXHRhbmFseXRpY3MoXCJldmVudFwiLCB7XG5cdFx0Y2F0ZWdvcnk6IGF0dHIoZWwsIFwiZGF0YS1hbmFseXRpY3MtY2F0ZWdvcnlcIikgPz8gY2F0ZWdvcnksXG5cdFx0YWN0aW9uOiBhdHRyKGVsLCBcImRhdGEtYW5hbHl0aWNzLWFjdGlvblwiKSA/PyBhY3Rpb24sXG5cdFx0bmFtZTogYXR0cihlbCwgXCJkYXRhLWFuYWx5dGljcy1uYW1lXCIpID8/IG5hbWUsXG5cdH0pO1xufVxuXG4vLyBVdGlsaXRpZXNcbmNvbnN0IHRleHQgPSAoZWw/OiBFbGVtZW50IHwgbnVsbCkgPT4gZWw/LnRleHRDb250ZW50Py50cmltKCkgfHwgXCJcIjtcbmNvbnN0IGxhYmVsID0gKGVsPzogRWxlbWVudCB8IG51bGwpID0+IChlbCAmJiBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikpIHx8IFwiXCI7XG5jb25zdCBwb3BvdmVyID0gKGVsOiBFbGVtZW50KSA9PlxuXHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhdHRyKGVsLCBcInBvcG92ZXJ0YXJnZXRcIikgfHwgXCJcIik7XG5jb25zdCBzdHlsZSA9IChlbDogRWxlbWVudCwga2V5OiBzdHJpbmcpID0+XG5cdHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKS5nZXRQcm9wZXJ0eVZhbHVlKGtleSk/LnRyaW0oKTtcbmNvbnN0IGhlYWRpbmcgPSAoZWw6IEVsZW1lbnQpID0+IHtcblx0Y29uc3QgYm9keSA9IHRleHQoZWwpO1xuXHRjb25zdCBoZWFkID0gdGV4dChlbC5xdWVyeVNlbGVjdG9yKFwiaDEsaDIsaDMsaDQsaDUsaDZcIikpOyAvLyBOb3RlOiBoZWFkIG1pZ2h0IGJlIGVtcHR5IHN0cmluZyAnJ1xuXHRyZXR1cm4gKGJvZHkuc3RhcnRzV2l0aChoZWFkKSAmJiBoZWFkKSB8fCBib2R5LnNsaWNlKDAsIDEwMCkudHJpbSgpOyAvLyBMaW1pdCB0byAxMDAgY2hhcmFjdGVyc1xufTtcblxub25Mb2FkZWQoKCkgPT4gb24oZG9jdW1lbnQsIEVWRU5UUywgaGFuZGxlVHJhY2ssIFFVSUNLX0VWRU5UKSk7XG4iLCJpZiAoXG5cdHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0d2luZG93LkNTU1N0eWxlU2hlZXQgJiZcblx0ZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzXG4pXG5cdCgoKSA9PiB7XG5cdFx0Y29uc3Qga2V5ID0gXCItLW10ZHMtYXBwLWV4cGFuZGVkXCI7XG5cdFx0Y29uc3Qgc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXHRcdGNvbnN0IHByZXYgPSAoKSA9PiAhd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk/LmluY2x1ZGVzKFwiZmFsc2VcIik7XG5cblx0XHRkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMucHVzaChzaGVldCk7XG5cdFx0d2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZCA9IChmb3JjZSkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgbmV4dCA9IGZvcmNlID8/ICFwcmV2KCk7XG5cdFx0XHRcdHNoZWV0LnJlcGxhY2VTeW5jPy4oYDpyb290IHsgJHtrZXl9OiB2YXIoJHtrZXl9LS0ke25leHR9KX1gKTtcblx0XHRcdFx0d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgbmV4dCk7XG5cdFx0XHR9IGNhdGNoIChfZXJyKSB7fSAvLyBsb2NhbFN0b3JhZ2UgaXMgZnVsbCBvciByZXBsYWNlU3luYyBpcyBub3Qgc3VwcG9ydGVkXG5cdFx0fTtcblxuXHRcdC8vIFNldCBhbmQgc3RvcmUgaW5pdGlhbCBzdGF0ZVxuXHRcdHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQocHJldigpKTtcblx0fSkoKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBkZWJvdW5jZSwgb24sIG9uTG9hZGVkLCBvbk11dGF0aW9uLCBRVUlDS19FVkVOVCB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IFwiLi9hcHAtdG9nZ2xlXCI7XG5cbmNvbnN0IENTU19BUFAgPSBzdHlsZXMuYXBwLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19TVElDS1kgPSBzdHlsZXMuc3RpY2t5LnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19UT0dHTEUgPSAnW2RhdGEtY29tbWFuZD1cInRvZ2dsZS1hcHAtZXhwYW5kZWRcIl0nO1xuY29uc3QgQ1NTX1NJREVCQVIgPSBgLiR7Q1NTX0FQUH0gPiBkaWFsb2csLiR7Q1NTX0FQUH0gZGlhbG9nIH4gbWFpbmA7XG5cbmNvbnN0IHVzZVRyYW5zaXRpb24gPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcblx0aWYgKCFkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKSBjYWxsYmFjaygpO1xuXHRlbHNlIGRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24oY2FsbGJhY2spO1xufTtcblxuZXhwb3J0IGNvbnN0IHRvZ2dsZUFwcEV4cGFuZGVkID0gKGZvcmNlPzogYm9vbGVhbikgPT5cblx0Ly8gQHRzLWV4cGVjdC1lcnJvciB3aW5kb3cubXRkc0FwcFRvZ2dsZSBjb21lcyBmcm9tIGFwcC10b2dnbGUuanNcblx0dXNlVHJhbnNpdGlvbigoKSA9PiB3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkPy4oZm9yY2UpKTtcblxuZnVuY3Rpb24gaGFuZGxlQXBwVG9nZ2xlQ2xpY2soeyB0YXJnZXQ6IGVsLCBkZWZhdWx0UHJldmVudGVkOiBzdG9wIH06IEV2ZW50KSB7XG5cdGNvbnN0IGxpbmsgPSAoZWwgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImFcIik7XG5cdGlmIChsaW5rPy5jbG9zZXN0KFwiZGlhbG9nXCIpICYmIGxpbms/LmNsb3Nlc3QoQ1NTX1NJREVCQVIpKVxuXHRcdHJldHVybiBjbG9zZVNpZGViYXIoKTsgLy8gQ2xvc2Ugc2lkZWJhciBpZiBsaW5rIGlzIGNsaWNrZWQgaW5zaWRlIHNpZGViYXJcblxuXHRpZiAoc3RvcCB8fCAhKGVsIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpIHx8ICFlbC5tYXRjaGVzKENTU19UT0dHTEUpKVxuXHRcdHJldHVybjtcblx0Y29uc3QgaXNEZXNrdG9wID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCkucG9zaXRpb24gPT09IFwic3RpY2t5XCI7XG5cblx0aWYgKGlzRGVza3RvcCkgdG9nZ2xlQXBwRXhwYW5kZWQoKTtcblx0ZWxzZVxuXHRcdHVzZVRyYW5zaXRpb24oKCkgPT4ge1xuXHRcdFx0Y29uc3Qgc2lkZWJhciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpYWxvZ0VsZW1lbnQ+KENTU19TSURFQkFSKTtcblx0XHRcdHNpZGViYXI/LnNldEF0dHJpYnV0ZShcImRhdGEtY2xvc2VkYnlcIiwgXCJhbnlcIik7IC8vIEFsbG93IGNsb3NpbmcgYnkgY2xpY2tpbmcgb3V0c2lkZVxuXHRcdFx0c2lkZWJhcj8uc2hvd01vZGFsKCk7XG5cdFx0fSk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlU2lkZWJhcigpIHtcblx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGlhbG9nRWxlbWVudD4oQ1NTX1NJREVCQVIpPy5jbG9zZSgpO1xufVxuXG4vLyBTY3JvbGwgc3RhdGVcbmxldCBNSU5fWSA9IDA7IC8vIE9mZnNldCB0byBhdm9pZCBzY3JvbGwganVtcCB3aGVuIHN0aWNreSBpcyBzZXQgdG8gcmVsYXRpdmVcbmxldCBTQ1JPTExfVVA6IGJvb2xlYW47XG5sZXQgU1RJQ0sgPSAwOyAvLyAtMSA9IHN0aWNrIHRvcCwgMCA9IHJlbGF0aXZlLCAxID0gc3RpY2sgYm90dG9tXG5sZXQgU1RJQ0tfRUw6IEhUTUxFbGVtZW50O1xubGV0IFNUSUNLX0ggPSAwO1xubGV0IFNUSUNLX1kgPSAwO1xubGV0IFNUVUNLID0gZmFsc2U7IC8vIFVzZWQgdG8gZmlndXJlIGlmIG5hdiBpcyBsYXJnZXIgdGhhbiB2aWV3cG9ydFxubGV0IFdJTl9IID0gMDtcbmxldCBXSU5fWSA9IDA7XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKFtzdGlja3ldOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRTVElDS19FTCA9IHN0aWNreTtcblx0aGFuZGxlQXBwU2Nyb2xsKCk7IC8vIFJ1biBvbiBjb25uZWN0XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUFwcFNjcm9sbCgpIHtcblx0aWYgKCFTVElDS19FTD8uaXNDb25uZWN0ZWQpIHJldHVybjtcblx0Y29uc3QgTkVYVF9ZID0gd2luZG93LnNjcm9sbFk7XG5cdGNvbnN0IE5FWFRfVVAgPSBORVhUX1kgPCBXSU5fWTtcblx0V0lOX1kgPSBORVhUX1k7XG5cblx0Ly8gT25seSBjYWxjdWxhdGUgaWYgc2Nyb2xsIGRpcmVjdGlvbiBoYXMgY2hhbmdlZFxuXHRpZiAoTkVYVF9VUCAhPT0gU0NST0xMX1VQKSB7XG5cdFx0TUlOX1kgPSAoU1RJQ0tfRUwucGFyZW50RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIHx8IDApICsgV0lOX1k7XG5cdFx0U0NST0xMX1VQID0gTkVYVF9VUDtcblx0XHRTVElDS19IID0gU1RJQ0tfRUwub2Zmc2V0SGVpZ2h0O1xuXHRcdFNUSUNLX1kgPSBTVElDS19FTC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyBXSU5fWTtcblx0XHRTVFVDSyA9IFNUSUNLX0VMLm9mZnNldEhlaWdodCA8PSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdFx0V0lOX0ggPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdH1cblxuXHRpZiAoU1RJQ0sgPT09IC0xICYmIFNUVUNLKSByZXR1cm47IC8vIEFsbHdheXMgc3RpY2t5IHdoZW4gc2lkZWJhciBpcyBzbWFsbGVyIHRoYW4gdmlld3BvcnRcblx0aWYgKFNUSUNLICE9PSAtMSAmJiAoU1RVQ0sgfHwgKFNDUk9MTF9VUCAmJiBXSU5fWSA8PSBTVElDS19ZKSkpIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwic3RpY2t5XCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgXCIwcHhcIik7XG5cdFx0U1RJQ0sgPSAtMTsgLy8gTm90IHN0aWNraW5nIHRvIHRvcCBhbmQgc2lkZWJhciBpcyBzbWFsbGVyIHRoYW4gdmlld3BvcnQgb3Igc2Nyb2xsaW5nIHVwXG5cdH0gZWxzZSBpZiAoU1RJQ0sgPT09IC0xICYmICFTQ1JPTExfVVApIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwicmVsYXRpdmVcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtNYXRoLm1heCgwLCBXSU5fWSAtIE1JTl9ZKX1weGApO1xuXHRcdFNUSUNLID0gMDsgLy8gU3RpY2tpbmcgdG8gdG9wIGFuZCBzY3JvbGxpbmcgZG93blxuXHR9IGVsc2UgaWYgKFNUSUNLICE9PSAxICYmICFTQ1JPTExfVVAgJiYgV0lOX1kgKyBXSU5fSCA+PSBTVElDS19ZICsgU1RJQ0tfSCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJzdGlja3lcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtXSU5fSCAtIFNUSUNLX0h9cHhgKTtcblx0XHRTVElDSyA9IDE7IC8vIE5vdCBzdGlja2luZyB0byBib3R0b20gYW5kIHNjcm9sbGluZyBkb3duXG5cdH0gZWxzZSBpZiAoU1RJQ0sgPT09IDEgJiYgU0NST0xMX1VQKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInJlbGF0aXZlXCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7U1RJQ0tfWSAtIE1JTl9ZfXB4YCk7XG5cdFx0U1RJQ0sgPSAwOyAvLyBTdGlja2luZyB0byBib3R0b20gYW5kIHNjcm9sbGluZyB1cFxuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19TVElDS1ksIGhhbmRsZU11dGF0aW9uKTtcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlQXBwVG9nZ2xlQ2xpY2ssIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcInJlc2l6ZVwiLCBkZWJvdW5jZShjbG9zZVNpZGViYXIsIDEwMCksIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcInNjcm9sbFwiLCBoYW5kbGVBcHBTY3JvbGwsIFFVSUNLX0VWRU5UKTtcbn0pO1xuIiwiY29uc3QgZ2V0U3RlcHMgPSAoXG5cdG5vdzogbnVtYmVyLFxuXHRtYXg6IG51bWJlcixcblx0c2hvdyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbikgPT4ge1xuXHRjb25zdCBvZmZzZXQgPSAoc2hvdyAtIDEpIC8gMjtcblx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heChNYXRoLm1pbihub3cgLSBNYXRoLmZsb29yKG9mZnNldCksIG1heCAtIHNob3cgKyAxKSwgMSk7XG5cdGNvbnN0IGVuZCA9IE1hdGgubWluKE1hdGgubWF4KG5vdyArIE1hdGguY2VpbChvZmZzZXQpLCBzaG93KSwgbWF4KTtcblx0Y29uc3QgcGFnZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBlbmQgKyAxIC0gc3RhcnQgfSwgKF8sIGkpID0+IGkgKyBzdGFydCk7XG5cblx0aWYgKHNob3cgPiA0ICYmIHN0YXJ0ID4gMSkgcGFnZXMuc3BsaWNlKDAsIDIsIDEsIDApO1xuXHRpZiAoc2hvdyA+IDMgJiYgZW5kIDwgbWF4KSBwYWdlcy5zcGxpY2UoLTIsIDIsIDAsIG1heCk7XG5cdHJldHVybiBwYWdlcztcbn07XG5cbmV4cG9ydCBjb25zdCBwYWdpbmF0aW9uID0gKHsgY3VycmVudCA9IDEsIHRvdGFsID0gMTAsIHNob3cgPSA3IH0pID0+ICh7XG5cdHByZXY6IGN1cnJlbnQgPiAxID8gY3VycmVudCAtIDEgOiAwLFxuXHRuZXh0OiBjdXJyZW50IDwgdG90YWwgPyBjdXJyZW50ICsgMSA6IDAsXG5cdHBhZ2VzOiBnZXRTdGVwcyhjdXJyZW50LCB0b3RhbCwgc2hvdykubWFwKChwYWdlLCBpbmRleCkgPT4gKHtcblx0XHRjdXJyZW50OiBwYWdlID09PSBjdXJyZW50ICYmIChcInBhZ2VcIiBhcyBjb25zdCksXG5cdFx0a2V5OiBga2V5LSR7cGFnZX0tJHtpbmRleH1gLFxuXHRcdHBhZ2UsXG5cdH0pKSxcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19CUkVBRENSVU1CUyA9IHN0eWxlcy5icmVhZGNydW1icy5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZUJyZWFkY3J1bWJzTXV0YXRpb24oYnJlYWRjcnVtYnM6IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgYnJlYWRjdW1icyBvZiBicmVhZGNydW1icylcblx0XHRicmVhZGN1bWJzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaSBhXCIpLmZvckVhY2goKGNydW1iLCBpbmRleCwgeyBsZW5ndGggfSkgPT4ge1xuXHRcdFx0YXR0cihjcnVtYiwgXCJhcmlhLWN1cnJlbnRcIiwgaW5kZXggPT09IGxlbmd0aCAtIDEgPyBcInBhZ2VcIiA6IG51bGwpO1xuXHRcdH0pO1xufVxuXG5vbkxvYWRlZCgoKSA9PlxuXHRvbk11dGF0aW9uKFxuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHRDU1NfQlJFQURDUlVNQlMsXG5cdFx0aGFuZGxlQnJlYWRjcnVtYnNNdXRhdGlvbixcblx0KSxcbik7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0YXR0cixcblx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcixcblx0SVNfQlJPV1NFUixcblx0b24sXG5cdG9uTG9hZGVkLFxuXHRRVUlDS19FVkVOVCxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19ESUFMT0cgPSBzdHlsZXMuZGlhbG9nLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IERJQUxPR1MgPSBJU19CUk9XU0VSXG5cdD8gKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG5cdFx0XHRDU1NfRElBTE9HLFxuXHRcdCkgYXMgSFRNTENvbGxlY3Rpb25PZjxIVE1MRGlhbG9nRWxlbWVudD4pXG5cdDogW107XG5cbmNvbnN0IGhhbmRsZU1vZGFsID0gKCkgPT4ge1xuXHRmb3IgKGNvbnN0IGRpYWxvZyBvZiBESUFMT0dTKVxuXHRcdGlmIChkaWFsb2cuaXNDb25uZWN0ZWQgJiYgZGlhbG9nLnNob3dNb2RhbCAmJiBkaWFsb2cuY2xvc2UpIHtcblx0XHRcdGlmIChkaWFsb2cubWF0Y2hlcygnW29wZW5dOm5vdChbZGF0YS1tb2RhbD1cImZhbHNlXCJdKTpub3QoOm1vZGFsKScpKSB7XG5cdFx0XHRcdGF0dHIoZGlhbG9nLCBcIm9wZW5cIiwgbnVsbCk7IC8vIFVzaW5nIGF0dHJpYnV0ZSBpbnN0ZWFkIG9mIC5jbG9zZSB0byBhdm9pZCBgY2xvc2VgIGV2ZW50XG5cdFx0XHRcdGRpYWxvZy5zaG93TW9kYWwoKTtcblx0XHRcdH0gZWxzZSBpZiAoZGlhbG9nLm1hdGNoZXMoXCI6bW9kYWw6bm90KFtvcGVuXSlcIikpIHtcblx0XHRcdFx0YXR0cihkaWFsb2csIFwib3BlblwiLCBcIlwiKTsgLy8gU2V0IGFzIG9wZW5cblx0XHRcdFx0ZGlhbG9nLmNsb3NlKCk7IC8vIFNvIHdlIGNvcnJlY2x0eSBjYW4gY2FsbCAuY2xvc2UsIHJlbW92aW5nIDxkaWFsb2c+IGZyb20gI3RvcC1sYXllclxuXHRcdFx0fVxuXHRcdH1cbn07XG5cbmNvbnN0IGhhbmRsZURpYWxvZ0NsaWNrID0gKHtcblx0Y2xpZW50WDogeCxcblx0Y2xpZW50WTogeSxcblx0dGFyZ2V0OiBlbCxcbn06IE1vdXNlRXZlbnQpID0+IHtcblx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTERpYWxvZ0VsZW1lbnQgJiYgYXR0cihlbCwgXCJkYXRhLWNsb3NlZGJ5XCIpID09PSBcImFueVwiKSB7XG5cdFx0Y29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdGNvbnN0IGlzSW5zaWRlID0gdG9wIDw9IHkgJiYgeSA8PSBib3R0b20gJiYgbGVmdCA8PSB4ICYmIHggPD0gcmlnaHQ7XG5cdFx0aWYgKCFpc0luc2lkZSkgcmV0dXJuIGVsLmNsb3NlKCk7XG5cdH1cblx0Y29uc3QgZGlhbG9nID0gKGVsIGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oXCJkaWFsb2dcIik7XG5cdGNvbnN0IGNsb3NlID0gZGlhbG9nICYmIChlbCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKCdbZGF0YS1jb21tYW5kPVwiY2xvc2VcIl0nKTtcblx0aWYgKGNsb3NlKSBkaWFsb2cuY2xvc2UoKTtcbn07XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlRGlhbG9nQ2xpY2sgYXMgRXZlbnRMaXN0ZW5lciwgUVVJQ0tfRVZFTlQpO1xuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKGhhbmRsZU1vZGFsKS5vYnNlcnZlKFxuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHR7XG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFtcIm9wZW5cIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0c3VidHJlZTogdHJ1ZSxcblx0XHR9LFxuXHQpO1xufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb24sIG9uTG9hZGVkLCBRVUlDS19FVkVOVCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5mdW5jdGlvbiBoYW5kbGVFcnJvc3VtbWFyeUluamVjdChldmVudDogRXZlbnQgJiB7IGFuaW1hdGlvbk5hbWU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSAhPT0gc3R5bGVzLl9lcnJvcnN1bW1hcnkpIHJldHVybjtcblx0Y29uc3QgZmlyc3QgPSAoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpPy5maXJzdEVsZW1lbnRDaGlsZDtcblxuXHRpZiAoZmlyc3QgaW5zdGFuY2VvZiBIVE1MSGVhZGluZ0VsZW1lbnQpIHtcblx0XHRhdHRyKGZpcnN0LCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG5cdFx0Zmlyc3QuZm9jdXMoKTsgLy8gQXV0b2ZvY3VzIGZpcnN0IGhlYWRpbmdcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PlxuXHRvbihkb2N1bWVudCwgXCJhbmltYXRpb25lbmRcIiwgaGFuZGxlRXJyb3N1bW1hcnlJbmplY3QsIFFVSUNLX0VWRU5UKSxcbik7XG4iLCJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5cbi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgU0FGRV9MQUJFTExFREJZID0gYCR7SVNfQU5EUk9JRCA/IFwiZGF0YVwiIDogXCJhcmlhXCJ9LWxhYmVsbGVkYnlgO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBGT0NVU19PVVRMSU5FID0gXCJvdXRsaW5lOiAxcHggZG90dGVkOyBvdXRsaW5lOiA1cHggYXV0byBIaWdobGlnaHQ7IG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvclwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIGF0dGFjaFN0eWxlID0gKGVsZW1lbnQsIGNzcykgPT4gZWxlbWVudC5zaGFkb3dSb290IHx8IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChfZXJyKSB7XG4gIH1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgKGRldGFpbCkgPT4gZWxlbWVudC5oYW5kbGVFdmVudCh7IHR5cGU6IFwibXV0YXRpb25cIiwgZGV0YWlsIH0pXG4gICAgKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIG9ic2VydmVycy5zZXQoZWxlbWVudCwgb2JzZXJ2ZXIpO1xuICB9XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBMSVZFO1xudmFyIExJVkVfU1JfRklYID0gMDtcbnZhciBzcGVhayA9ICh0ZXh0KSA9PiB7XG4gIGlmICghTElWRSkge1xuICAgIExJVkUgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIExJVkUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246Zml4ZWQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXBcIjtcbiAgICBhdHRyKExJVkUsIFwiYXJpYS1saXZlXCIsIFwiYXNzZXJ0aXZlXCIpO1xuICB9XG4gIGlmICghTElWRS5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoTElWRSk7XG4gIGlmICh0ZXh0KSBMSVZFLnRleHRDb250ZW50ID0gYCR7dGV4dH0ke0xJVkVfU1JfRklYKysgJSAyID8gXCJcXHhBMFwiIDogXCJcIn1gO1xufTtcbnZhciBzZXRWYWx1ZSA9IChpbnB1dCwgZGF0YSwgdHlwZSA9IFwiXCIpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSwgZGF0YSwgaW5wdXRUeXBlOiB0eXBlIH07XG4gIGNvbnN0IHByb3RvID0gSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGU7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJiZWZvcmVpbnB1dFwiLCBldmVudCkpO1xuICAoX2IgPSAoX2EyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgXCJ2YWx1ZVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5zZXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKGlucHV0LCBkYXRhKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImlucHV0XCIsIGV2ZW50KSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG59O1xudmFyIElTX1BSRVNTID0gZmFsc2U7XG52YXIgaXNNb3VzZURvd24gPSAoZXZlbnQpID0+IHtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2V1cFwiKSBJU19QUkVTUyA9IGZhbHNlO1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZWRvd25cIikge1xuICAgIElTX1BSRVNTID0gdHJ1ZTtcbiAgICBvbihkb2N1bWVudCwgXCJtb3VzZXVwXCIsIGlzTW91c2VEb3duLCB7IG9uY2U6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIElTX1BSRVNTO1xufTtcbnZhciBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QgPSAoc3R5bGUsIHNsb3QgPSBcIjxzbG90Pjwvc2xvdD5cIikgPT4gYDx0ZW1wbGF0ZSBzaGFkb3dyb290bW9kZT1cIm9wZW5cIj4ke3Nsb3R9PHN0eWxlPiR7c3R5bGV9PC9zdHlsZT48L3RlbXBsYXRlPmA7XG5cbi8vIHUtb3B0aW9uLnRzXG52YXIgRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG52YXIgU0VMRUNURUQgPSBcInNlbGVjdGVkXCI7XG52YXIgVUhUTUxPcHRpb25FbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW0RJU0FCTEVELCBTRUxFQ1RFRF07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFJU19JT1MpIHRoaXMudGFiSW5kZXggPSAtMTtcbiAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKFwicm9sZVwiKSkgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJvcHRpb25cIik7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtZGlzYWJsZWRcIiwgYCR7dGhpcy5kaXNhYmxlZH1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1zZWxlY3RlZFwiLCBgJHt0aGlzLnNlbGVjdGVkfWApO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB3aGV0aGVyIHRoZSBvcHRpb24gaW4gdGhlIGxpc3QgYm94IGlzIHRoZSBkZWZhdWx0IGl0ZW0uICovXG4gIGdldCBkZWZhdWx0U2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXNbU0VMRUNURURdO1xuICB9XG4gIHNldCBkZWZhdWx0U2VsZWN0ZWQodmFsdWUpIHtcbiAgICB0aGlzW1NFTEVDVEVEXSA9IHZhbHVlO1xuICB9XG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBESVNBQkxFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBESVNBQkxFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyBhIHJlZmVyZW5jZSB0byB0aGUgZm9ybSB0aGF0IHRoZSBvYmplY3QgaXMgZW1iZWRkZWQgaW4uICovXG4gIGdldCBmb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJmb3JtXCIpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiBvcHRpb24gaW4gYSBsaXN0IGJveC4gKi9cbiAgZ2V0IGluZGV4KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLigoX2EyID0gdGhpcy5wYXJlbnRFbGVtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLm9wdGlvbnMpIHx8IFt0aGlzXVxuICAgIF0uaW5kZXhPZih0aGlzKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgYSB2YWx1ZSB0aGF0IHlvdSBjYW4gdXNlIHRvIGltcGxlbWVudCB5b3VyIG93biBsYWJlbCBmdW5jdGlvbmFsaXR5IGZvciB0aGUgb2JqZWN0LiAqL1xuICBnZXQgbGFiZWwoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJsYWJlbFwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgbGFiZWwodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwibGFiZWxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBTRUxFQ1RFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBTRUxFQ1RFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSB0ZXh0IHN0cmluZyBzcGVjaWZpZWQgYnkgdGhlIG9wdGlvbiB0YWcuICovXG4gIGdldCB0ZXh0KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gdGhpcy50ZXh0Q29udGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIH1cbiAgc2V0IHRleHQodGV4dCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdmFsdWUgd2hpY2ggaXMgcmV0dXJuZWQgdG8gdGhlIHNlcnZlciB3aGVuIHRoZSBmb3JtIGNvbnRyb2wgaXMgc3VibWl0dGVkLiAqL1xuICBnZXQgdmFsdWUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1vcHRpb25cIiwgVUhUTUxPcHRpb25FbGVtZW50KTtcblxuLy8gdS1kYXRhbGlzdC50c1xudmFyIFVIVE1MRGF0YUxpc3RTdHlsZSA9IGAke0RJU1BMQVlfQkxPQ0t9XG46OnNsb3R0ZWQodS1vcHRpb24pIHsgZGlzcGxheTogYmxvY2s7IGN1cnNvcjogcG9pbnRlciB9XG46OnNsb3R0ZWQodS1vcHRpb246Zm9jdXMpIHsgJHtGT0NVU19PVVRMSU5FfSB9XG46OnNsb3R0ZWQodS1vcHRpb25bYXJpYS1oaWRkZW49XCJ0cnVlXCJdKSxcbjo6c2xvdHRlZCh1LW9wdGlvbltkaXNhYmxlZF0pLFxuOjpzbG90dGVkKHUtb3B0aW9uW2hpZGRlbl0pIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50IH1gO1xudmFyIFVIVE1MRGF0YUxpc3RTaGFkb3dSb290ID0gZGVjbGFyYXRpdmVTaGFkb3dSb290KFVIVE1MRGF0YUxpc3RTdHlsZSk7XG52YXIgTElWRV9USU1FUjtcbnZhciBJTlBVVF9ERUJPVU5DRSA9IDA7XG52YXIgSVNfTU9CSUxFID0gSVNfSU9TIHx8IElTX0FORFJPSUQ7XG52YXIgRVZFTlRTID0gXCJjbGljayxmb2N1c291dCxpbnB1dCxrZXlkb3duLG1vdXNlZG93bixtb3VzZXVwXCI7XG52YXIgRVZFTlRTX0lOUFVUID0gXCJmb2N1cyxmb2N1c2luLGJsdXIsZm9jdXNvdXRcIjtcbnZhciBURVhUUyA9IHtcbiAgc2luZ3VsYXI6IFwiJWQgaGl0XCIsXG4gIHBsdXJhbDogXCIlZCBoaXRzXCJcbn07XG52YXIgVUhUTUxEYXRhTGlzdEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fdGV4dHMgPSBfX3NwcmVhZFZhbHVlcyh7fSwgVEVYVFMpO1xuICAgIHRoaXMuX3ZhbHVlID0gXCJcIjtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBVSFRNTERhdGFMaXN0U3R5bGUpO1xuICB9XG4gIC8vIFVzZWQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBhbm5vdW5jZW1lbnRzXG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJpZFwiLCAuLi5PYmplY3Qua2V5cyhURVhUUykubWFwKChrZXkpID0+IGBkYXRhLXNyLSR7a2V5fWApXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmhpZGRlbiA9IHRydWU7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJsaXN0Ym94XCIpO1xuICAgIGF0dHIodGhpcywgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBvbih0aGlzLl9yb290LCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywge1xuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbXCJkaXNhYmxlZFwiLCBcImhpZGRlblwiLCBcImxhYmVsXCIsIFwidmFsdWVcIl0sXG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLl9yb290IHx8IHRoaXMsIFwiZm9jdXNcIiwgdGhpcywgdHJ1ZSk7XG4gICAgb2ZmKHRoaXMuX3Jvb3QgfHwgdGhpcywgXCJmb2N1c2luXCIsIHRoaXMpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIGRpc2Nvbm5lY3RJbnB1dCh0aGlzKTtcbiAgICB0aGlzLl9yb290ID0gdm9pZCAwO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBfcHJldiwgbmV4dCkge1xuICAgIGNvbnN0IHRleHQgPSBwcm9wID09IG51bGwgPyB2b2lkIDAgOiBwcm9wLnNwbGl0KFwiZGF0YS1zci1cIilbMV07XG4gICAgY29uc3QgY3NzID0gYGlucHV0W2xpc3Q9XCIke3RoaXMuaWR9XCJdYDtcbiAgICBpZiAoVEVYVFNbdGV4dF0pIHRoaXMuX3RleHRzW3RleHRdID0gbmV4dCB8fCBURVhUU1t0ZXh0XTtcbiAgICBlbHNlIGlmICh0aGlzLl9yb290KSB7XG4gICAgICBpZiAodGhpcy5faW5wdXQpIHNldHVwSW5wdXQodGhpcywgdGhpcy5faW5wdXQpO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiB0aGlzLl9yb290LnF1ZXJ5U2VsZWN0b3JBbGwoY3NzKSlcbiAgICAgICAgc2V0dXBJbnB1dCh0aGlzLCBpbnB1dCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgeyB0YXJnZXQsIHR5cGUgfSA9IGV2ZW50O1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKHR5cGUgPT09IFwiY2xpY2tcIikgb25DbGljayh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiZm9jdXNcIiB8fCB0eXBlID09PSBcImZvY3VzaW5cIikgb25Gb2N1cyh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiYmx1clwiIHx8IHR5cGUgPT09IFwiZm9jdXNvdXRcIikgb25CbHVyKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIG9uS2V5RG93bih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgdGhpcy5jb250YWlucyh0YXJnZXQpKVxuICAgICAgaXNNb3VzZURvd24oZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcIm11dGF0aW9uXCIgfHwgdHlwZSA9PT0gXCJpbnB1dFwiKSB7XG4gICAgICBjbGVhclRpbWVvdXQoSU5QVVRfREVCT1VOQ0UpO1xuICAgICAgSU5QVVRfREVCT1VOQ0UgPSBzZXRUaW1lb3V0KG9uSW5wdXQsIDAsIHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ1LW9wdGlvblwiKTtcbiAgfVxufTtcbnZhciBpc0Rpc2FibGVkID0gKGlucHV0KSA9PiAoaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IGlucHV0LmRpc2FibGVkKSB8fCAoaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IGlucHV0LnJlYWRPbmx5KSB8fCBmYWxzZTtcbnZhciBzZXRFeHBhbmRlZCA9IChzZWxmLCBvcGVuKSA9PiB7XG4gIHZhciBfYTIsIF9iLCBfYztcbiAgaWYgKHNlbGYuaGlkZGVuICE9PSBvcGVuKSByZXR1cm47XG4gIHNlbGYuaGlkZGVuID0gaXNEaXNhYmxlZChzZWxmID09IG51bGwgPyB2b2lkIDAgOiBzZWxmLl9pbnB1dCkgfHwgIW9wZW47XG4gIChfYTIgPSBtdXRhdGlvbk9ic2VydmVyKHNlbGYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRha2VSZWNvcmRzKCk7XG4gIGNvbnN0IGlzUG9wb3ZlciA9IHNlbGYuaXNDb25uZWN0ZWQgJiYgc2VsZi5wb3BvdmVyICYmICgoX2IgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmlzQ29ubmVjdGVkKSAmJiAoKF9jID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYy5wb3BvdmVyVGFyZ2V0RWxlbWVudCkgPT09IHNlbGY7XG4gIGlmIChzZWxmLl9pbnB1dCkgc2V0dXBJbnB1dChzZWxmLCBzZWxmLl9pbnB1dCwgb3Blbik7XG4gIGlmIChpc1BvcG92ZXIpIGF0dHIoc2VsZiwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpO1xuICBpZiAoaXNQb3BvdmVyKSBzZWxmLnRvZ2dsZVBvcG92ZXIob3Blbik7XG4gIGlmIChvcGVuKSBvbklucHV0KHNlbGYpO1xufTtcbnZhciBkaXNjb25uZWN0SW5wdXQgPSAoc2VsZikgPT4ge1xuICBpZiAoIXNlbGYuX2lucHV0KSByZXR1cm47XG4gIG9mZihzZWxmLl9pbnB1dCB8fCBzZWxmLCBFVkVOVFNfSU5QVVQsIHNlbGYpO1xuICBvZmYoc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gIHNlbGYuX2lucHV0ID0gdm9pZCAwO1xufTtcbnZhciBzZXR1cElucHV0ID0gKHNlbGYsIGlucHV0LCBvcGVuID0gZmFsc2UpID0+IHtcbiAgaWYgKHNlbGYucG9wb3ZlcikgYXR0cihpbnB1dCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKHNlbGYpKTtcbiAgb24oaW5wdXQsIEVWRU5UU19JTlBVVCwgc2VsZiwgdHJ1ZSk7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1hdXRvY29tcGxldGVcIiwgXCJsaXN0XCIpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtY29udHJvbHNcIiwgdXNlSWQoc2VsZikpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7IUlTX01PQklMRSB8fCBvcGVufWApO1xuICBhdHRyKGlucHV0LCBcImF1dG9jb21wbGV0ZVwiLCBcIm9mZlwiKTtcbiAgYXR0cihpbnB1dCwgXCJyb2xlXCIsIGlzRGlzYWJsZWQoaW5wdXQpID8gbnVsbCA6IFwiY29tYm9ib3hcIik7XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgaXNJbnB1dCA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQ7XG4gIGlmIChpc0lucHV0ICYmIGV2ZW50LmlzVHJ1c3RlZCkgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIGlmIChzZWxmLl9pbnB1dCAhPT0gZXZlbnQudGFyZ2V0ICYmIGlzSW5wdXQgJiYgZXZlbnQudGFyZ2V0Lmxpc3QgPT09IHNlbGYpIHtcbiAgICBpZiAoc2VsZi5faW5wdXQpIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgICBzZWxmLl9pbnB1dCA9IGV2ZW50LnRhcmdldDtcbiAgICBzZWxmLl9pbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNcIikpO1xuICAgIHNlbGYuX2lucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJmb2N1c2luXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgYXR0cihzZWxmLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKChfYTIgPSBzZWxmLl9pbnB1dC5sYWJlbHMpID09IG51bGwgPyB2b2lkIDAgOiBfYTJbMF0pKTtcbiAgICBvbihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gICAgc2V0RXhwYW5kZWQoc2VsZiwgYXR0cihzZWxmLl9pbnB1dCwgXCJpbnB1dG1vZGVcIikgIT09IFwibm9uZVwiKTtcbiAgICBzcGVhaygpO1xuICB9XG59O1xudmFyIG9uQmx1ciA9IChzZWxmLCBldmVudCkgPT4ge1xuICBpZiAoIUlTX0FORFJPSUQgJiYgIWlzTW91c2VEb3duKCkgJiYgc2VsZi5faW5wdXQpXG4gICAgc2V0VGltZW91dChvbkJsdXJyZWQsIDAsIHNlbGYpO1xuICBpZiAoZXZlbnQudGFyZ2V0ID09PSBzZWxmLl9pbnB1dCAmJiBldmVudC5pc1RydXN0ZWQpXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59O1xudmFyIG9uQmx1cnJlZCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSAoKF9hMiA9IHNlbGYuX3Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuYWN0aXZlRWxlbWVudCkgfHwgbnVsbDtcbiAgY29uc3QgaW5wdXQgPSBzZWxmLl9pbnB1dDtcbiAgaWYgKGlucHV0ICYmIGlucHV0ICE9PSByZWxhdGVkVGFyZ2V0ICYmICFzZWxmLmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImJsdXJcIiwgeyByZWxhdGVkVGFyZ2V0IH0pKTtcbiAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEZvY3VzRXZlbnQoXCJmb2N1c291dFwiLCB7IGJ1YmJsZXM6IHRydWUsIHJlbGF0ZWRUYXJnZXQgfSlcbiAgICApO1xuICAgIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgfVxufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9pbnB1dCB8fCBzZWxmLl9pbnB1dCA9PT0gdGFyZ2V0KSByZXR1cm4gc2V0RXhwYW5kZWQoc2VsZiwgdHJ1ZSk7XG4gIGZvciAoY29uc3Qgb3B0IG9mIHNlbGYub3B0aW9ucylcbiAgICBpZiAob3B0LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgIGlmIChhdHRyKHNlbGYsIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIikgIT09IFwidHJ1ZVwiKSB7XG4gICAgICAgIChfYTIgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xuICAgICAgICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2V0VmFsdWUoc2VsZi5faW5wdXQsIG9wdC52YWx1ZSk7XG4gICAgfVxuICBpZiAoSVNfQU5EUk9JRCkgb25CbHVycmVkKHNlbGYpO1xufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IGtleSwgdGFyZ2V0LCBhbHRLZXksIGN0cmxLZXksIHNoaWZ0S2V5LCBtZXRhS2V5IH0gPSBlO1xuICBjb25zdCBpc0VzY2FwZSA9IGtleSA9PT0gXCJFc2NhcGVcIiB8fCBrZXkgPT09IFwiRXNjXCI7XG4gIGlmIChhbHRLZXkgfHwgY3RybEtleSB8fCBtZXRhS2V5IHx8IHNoaWZ0S2V5IHx8IGtleSA9PT0gXCJUYWJcIikgcmV0dXJuO1xuICBpZiAoaXNFc2NhcGUgJiYgIXNlbGYuaGlkZGVuKSBlID09IG51bGwgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gIHNldEV4cGFuZGVkKHNlbGYsICFpc0VzY2FwZSk7XG4gIGNvbnN0IG9wdGlvbnMgPSBbLi4uc2VsZi5vcHRpb25zXS5maWx0ZXIoXG4gICAgKGVsKSA9PiBhdHRyKGVsLCBcImFyaWEtaGlkZGVuXCIpICE9PSBcInRydWVcIiAmJiBlbC5vZmZzZXRIZWlnaHRcbiAgKTtcbiAgY29uc3QgcHJldiA9IG9wdGlvbnMuaW5kZXhPZih0YXJnZXQpO1xuICBsZXQgbmV4dCA9IC0xO1xuICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiKSBuZXh0ID0gKHByZXYgKyAxKSAlIG9wdGlvbnMubGVuZ3RoO1xuICBpZiAoa2V5ID09PSBcIkFycm93VXBcIikgbmV4dCA9ICh+cHJldiA/IHByZXYgOiBvcHRpb25zLmxlbmd0aCkgLSAxO1xuICBpZiAofnByZXYpIHtcbiAgICBpZiAoa2V5ID09PSBcIkhvbWVcIiB8fCBrZXkgPT09IFwiUGFnZVVwXCIpIG5leHQgPSAwO1xuICAgIGlmIChrZXkgPT09IFwiRW5kXCIgfHwga2V5ID09PSBcIlBhZ2VEb3duXCIpIG5leHQgPSBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgaWYgKGtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICBvcHRpb25zW3ByZXZdLmNsaWNrKCk7XG4gICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuICBpZiAob3B0aW9uc1tuZXh0XSkgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykgb3B0aW9uLnRhYkluZGV4ID0gLTE7XG4gIGlmIChvcHRpb25zW25leHRdKSBlLnByZXZlbnREZWZhdWx0KCk7XG4gIChfYTIgPSBvcHRpb25zW25leHRdIHx8IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG4gIGlmICghb3B0aW9uc1tuZXh0XSAmJiBrZXkgPT09IFwiQXJyb3dVcFwiKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIHJldHVybiAoX2EzID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTMuc2V0U2VsZWN0aW9uUmFuZ2UoOTk5LCA5OTkpO1xuICAgIH0pO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGUpID0+IHtcbiAgY29uc3QgeyBfdGV4dHMsIF9yb290LCBfaW5wdXQsIG9wdGlvbnMgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gKF9pbnB1dCA9PSBudWxsID8gdm9pZCAwIDogX2lucHV0LnZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBmaWx0ZXIgPSAhc2VsZi5oYXNBdHRyaWJ1dGUoXCJkYXRhLW5vZmlsdGVyXCIpO1xuICBjb25zdCBoaWRkZW4gPSBbXTtcbiAgY29uc3QgdmlzaWJsZSA9IFtdO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKSB7XG4gICAgY29uc3QgaGlkZSA9IG9wdC5kaXNhYmxlZCB8fCBvcHQuaGlkZGVuIHx8IGZpbHRlciAmJiAhb3B0LmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUpO1xuICAgIChoaWRlID8gaGlkZGVuIDogdmlzaWJsZSkucHVzaChvcHQpO1xuICB9XG4gIGZvciAoY29uc3Qgb3B0IG9mIGhpZGRlbikgYXR0cihvcHQsIFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpO1xuICBmb3IgKGNvbnN0IG9wdCBvZiB2aXNpYmxlKSBhdHRyKG9wdCwgXCJhcmlhLWhpZGRlblwiLCBcImZhbHNlXCIpO1xuICBjb25zdCB0b3RhbCA9IHZpc2libGUubGVuZ3RoO1xuICBjbGVhclRpbWVvdXQoTElWRV9USU1FUik7XG4gIGlmICgoZSA9PSBudWxsID8gdm9pZCAwIDogZS50eXBlKSA9PT0gXCJpbnB1dFwiICYmIHZhbHVlICE9PSBzZWxmLl92YWx1ZSlcbiAgICBMSVZFX1RJTUVSID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gYCR7IXRvdGFsICYmIHNlbGYuaW5uZXJUZXh0LnRyaW0oKSB8fCBgJHtfdGV4dHNbdG90YWwgPT09IDEgPyBcInNpbmd1bGFyXCIgOiBcInBsdXJhbFwiXX1gLnJlcGxhY2UoXCIlZFwiLCBgJHt0b3RhbH1gKX1gO1xuICAgICAgaWYgKCFzZWxmLmhpZGRlbiAmJiAoX3Jvb3QgPT0gbnVsbCA/IHZvaWQgMCA6IF9yb290LmFjdGl2ZUVsZW1lbnQpID09PSBfaW5wdXQpIHNwZWFrKHRleHQpO1xuICAgICAgc2VsZi5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9LCAxZTMpO1xuICBpZiAoSVNfSU9TKVxuICAgIHZpc2libGUubWFwKChvcHQsIGlkeCkgPT4gYXR0cihvcHQsIFwidGl0bGVcIiwgYCR7aWR4ICsgMX0vJHt0b3RhbH1gKSk7XG59O1xuaWYgKElTX0JST1dTRVIpXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJsaXN0XCIsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gZ2V0Um9vdCh0aGlzKS5nZXRFbGVtZW50QnlJZChhdHRyKHRoaXMsIFwibGlzdFwiKSB8fCBcIlwiKTtcbiAgICB9XG4gIH0pO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1kYXRhbGlzdFwiLCBVSFRNTERhdGFMaXN0RWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MRGF0YUxpc3RFbGVtZW50LCBVSFRNTERhdGFMaXN0U2hhZG93Um9vdCwgVUhUTUxEYXRhTGlzdFN0eWxlIH07XG4iLCJpbXBvcnQgeyBmbGlwLCB0eXBlIFBsYWNlbWVudCwgc2hpZnQsIHNpemUgfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuaW1wb3J0IHsgVUhUTUxDb21ib2JveEVsZW1lbnQgfSBmcm9tIFwiQHUtZWxlbWVudHMvdS1jb21ib2JveFwiO1xuaW1wb3J0IHsgVUhUTUxEYXRhTGlzdEVsZW1lbnQgfSBmcm9tIFwiQHUtZWxlbWVudHMvdS1kYXRhbGlzdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRpc0lucHV0TGlrZSxcblx0b24sXG5cdG9uTG9hZGVkLFxuXHRvbk11dGF0aW9uLFxuXHRRVUlDS19FVkVOVCxcblx0dXNlSWQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRklFTEQgPSBzdHlsZXMuZmllbGQuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1ZBTElEQVRJT05TID0gc3R5bGVzLnZhbGlkYXRpb24uc3BsaXQoXCIgXCIpO1xuY29uc3QgQ1NTX1ZBTElEQVRJT04gPSBDU1NfVkFMSURBVElPTlNbMF07XG5cbmNvbnN0IGdldFRleHQgPSAoc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24sIGtleTogc3RyaW5nKSA9PlxuXHRzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGAtLW10ZHMtdGV4dC0ke2tleX1gKT8uc2xpY2UoMSwgLTEpIHx8IFwiXCI7IC8vIHNsaWNlIHRvIHRyaW0gcXVvdGVzXG5cbmZ1bmN0aW9uIGhhbmRsZUZpZWxkTXV0YXRpb24oXG5cdGZpZWxkczogSFRNTENvbGxlY3Rpb25PZjxFbGVtZW50Pixcblx0dmFsaWRhdGU/OiBib29sZWFuLFxuKSB7XG5cdGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKVxuXHRcdGlmIChmaWVsZC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0Y29uc3QgbGFiZWxzOiBIVE1MTGFiZWxFbGVtZW50W10gPSBbXTtcblx0XHRcdGNvbnN0IGRlc2NzOiBFbGVtZW50W10gPSBbXTtcblx0XHRcdGNvbnN0IHZhbGlkczogRWxlbWVudFtdID0gW107XG5cdFx0XHRsZXQgY29tYm9ib3g6IFVIVE1MQ29tYm9ib3hFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblx0XHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRcdGZvciAoY29uc3QgZWwgb2YgZmllbGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpKSB7XG5cdFx0XHRcdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxMYWJlbEVsZW1lbnQpIGxhYmVscy5wdXNoKGVsKTtcblx0XHRcdFx0ZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBVSFRNTENvbWJvYm94RWxlbWVudCkgY29tYm9ib3ggPSBlbDtcblx0XHRcdFx0ZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpICYmICFlbC5oaWRkZW4pIGlucHV0ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGVsLmhhc0F0dHJpYnV0ZShcImRhdGEtZGVzY3JpcHRpb25cIikpIGRlc2NzLnB1c2goZWwpO1xuXHRcdFx0XHRlbHNlIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1ZBTElEQVRJT04pKSB7XG5cdFx0XHRcdFx0dmFsaWQgPSBhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8ICFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0dmFsaWRzLnB1c2goZWwpO1xuXHRcdFx0XHRcdGRlc2NzLnVuc2hpZnQoZWwpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgSFRNTFBhcmFncmFwaEVsZW1lbnQpXG5cdFx0XHRcdFx0ZGVzY3Muc29tZSgoZGVzYykgPT4gZGVzYy5jb250YWlucyhlbCkpIHx8IGRlc2NzLnB1c2goZWwpOyAvLyBPbmx5IGFkZCBpZiBub3QgYWxyZWFkeSBpbnNpZGUgZGVzY3JpcHRpb25cblx0XHRcdH1cblxuXHRcdFx0aWYgKGlucHV0KSB7XG5cdFx0XHRcdGZvciAoY29uc3QgbGFiZWwgb2YgbGFiZWxzKSBsYWJlbC5odG1sRm9yID0gdXNlSWQoaW5wdXQpO1xuXHRcdFx0XHRpZiAodmFsaWRhdGUgJiYgYXR0cihmaWVsZCwgXCJkYXRhLXZhbGlkYXRpb25cIikgPT09IFwiZm9ybVwiKSB7XG5cdFx0XHRcdFx0dmFsaWQgPSBpbnB1dC5tYXRjaGVzKFwiOnZhbGlkXCIpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgZWwgb2YgdmFsaWRzKSBhdHRyKGVsLCBcImhpZGRlblwiLCB2YWxpZCA/IFwiXCIgOiBudWxsKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZW5kZXJDb21ib2JveChjb21ib2JveCk7XG5cdFx0XHRcdHJlbmRlckNvdW50ZXIoaW5wdXQpO1xuXHRcdFx0XHRyZW5kZXJUZXh0YXJlYVNpemUoaW5wdXQpO1xuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgZGVzY3MubWFwKHVzZUlkKS5qb2luKFwiIFwiKSB8fCBudWxsKTsgLy8gUmVtb3ZlIGlmIGVtcHR5XG5cdFx0XHRcdGF0dHIoaW5wdXQsIFwiYXJpYS1pbnZhbGlkXCIsIGAkeyF2YWxpZH1gKTtcblx0XHRcdH1cblx0XHR9XG59XG5cbi8vIGlPUyBkb2VzIG5vdCBzdXBwb3J0IGZpZWxkLXNpemluZzogY29udGVudCwgc28gd2UgbmVlZCB0byBtYW51YWxseSByZXNpemVcbmZ1bmN0aW9uIHJlbmRlclRleHRhcmVhU2l6ZSh0ZXh0YXJlYTogRWxlbWVudCkge1xuXHRpZiAodGV4dGFyZWEgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG5cdFx0dGV4dGFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXCItLW10ZHMtdGV4dGFyZWEtaGVpZ2h0XCIsIFwiYXV0b1wiKTtcblx0XHR0ZXh0YXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcdFwiLS1tdGRzLXRleHRhcmVhLWhlaWdodFwiLFxuXHRcdFx0YCR7dGV4dGFyZWEuc2Nyb2xsSGVpZ2h0fXB4YCxcblx0XHQpO1xuXHR9XG59XG5cbi8vIFNldHVwIHRyYW5zbGF0aW9ucyBmcm9tIENTUyBjdXN0b20gcHJvcGVydGllc1xuZnVuY3Rpb24gcmVuZGVyQ29tYm9ib3goZWw6IFVIVE1MQ29tYm9ib3hFbGVtZW50IHwgbnVsbCkge1xuXHRjb25zdCB7IGNvbnRyb2wsIGxpc3QgfSA9IGVsIHx8IHt9O1xuXG5cdGlmIChlbCAmJiBsaXN0ICYmICFlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLXNyLWFkZGVkXCIpKSB7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWFkZGVkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtYWRkZWRcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1lbXB0eVwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWVtcHR5XCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItZm91bmRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1mb3VuZFwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWludmFsaWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1pbnZhbGlkXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3Itb2ZcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1vZlwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLXJlbW92ZVwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LXJlbW92ZVwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLXJlbW92ZWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1yZW1vdmVkXCIpKTtcblx0XHRhdHRyKGxpc3QsIFwiZGF0YS1zci1wbHVyYWxcIiwgZ2V0VGV4dChzdHlsZSwgXCJkYXRhbGlzdC1wbHVyYWxcIikpO1xuXHRcdGF0dHIobGlzdCwgXCJkYXRhLXNyLXNpbmd1bGFyXCIsIGdldFRleHQoc3R5bGUsIFwiZGF0YWxpc3Qtc2luZ3VsYXJcIikpO1xuXHR9XG5cdGlmIChsaXN0ICYmIGNvbnRyb2wgJiYgIWxpc3QuaGFzQXR0cmlidXRlKFwicG9wb3ZlclwiKSkge1xuXHRcdGF0dHIobGlzdCwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpO1xuXHRcdGF0dHIoY29udHJvbCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKGxpc3QpKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW5kZXJDb3VudGVyKGlucHV0OiBIVE1MSW5wdXRFbGVtZW50KSB7XG5cdGNvbnN0IGVsID0gaW5wdXQ/Lm5leHRFbGVtZW50U2libGluZztcblx0Y29uc3QgbGltaXQgPSBlbCAmJiBhdHRyKGVsLCBcImRhdGEtY291bnRcIik7XG5cblx0aWYgKGVsICYmIGxpbWl0KSB7XG5cdFx0Y29uc3QgcmVtYWluZGVyID0gTnVtYmVyKGxpbWl0KSAtIGlucHV0LnZhbHVlLmxlbmd0aDtcblx0XHRjb25zdCBuZXh0SW52YWxpZCA9IHJlbWFpbmRlciA8IDA7XG5cdFx0Y29uc3QgcHJldkludmFsaWQgPSBhdHRyKGVsLCBcImFyaWEtbGl2ZVwiKSA9PT0gXCJwb2xpdGVcIjtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsIHx8IGlucHV0KTtcblx0XHRjb25zdCBvdmVyID0gZ2V0VGV4dChzdHlsZSwgXCJjb3VudC1vdmVyXCIpO1xuXHRcdGNvbnN0IHVuZGVyID0gZ2V0VGV4dChzdHlsZSwgXCJjb3VudC11bmRlclwiKTtcblxuXHRcdGlmIChwcmV2SW52YWxpZCAhPT0gbmV4dEludmFsaWQpIHtcblx0XHRcdGF0dHIoZWwsIFwiYXJpYS1saXZlXCIsIG5leHRJbnZhbGlkID8gXCJwb2xpdGVcIiA6IFwib2ZmXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBjc3Mgb2YgQ1NTX1ZBTElEQVRJT05TKSBlbC5jbGFzc0xpc3QudG9nZ2xlKGNzcywgbmV4dEludmFsaWQpO1xuXHRcdH1cblx0XHRlbC50ZXh0Q29udGVudCA9IChuZXh0SW52YWxpZCA/IG92ZXIgOiB1bmRlcikucmVwbGFjZShcblx0XHRcdFwiJWRcIixcblx0XHRcdGAke01hdGguYWJzKHJlbWFpbmRlcil9YCxcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZpZWxkVG9nZ2xlKGV2ZW50OiBFdmVudCAmIHsgbmV3U3RhdGU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgVUhUTUxEYXRhTGlzdEVsZW1lbnQpIHtcblx0XHRjb25zdCBsaXN0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdGNvbnN0IHJvb3QgPSBsaXN0LmdldFJvb3ROb2RlKCkgYXMgU2hhZG93Um9vdCB8IG51bGw7XG5cdFx0Y29uc3QgYW5jaG9yID0gcm9vdD8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG5cdFx0XHRgW3BvcG92ZXJ0YXJnZXQ9XCIke2xpc3QuaWR9XCJdYCxcblx0XHQpO1xuXG5cdFx0aWYgKGV2ZW50Lm5ld1N0YXRlID09PSBcImNsb3NlZFwiKSBhbmNob3JQb3NpdGlvbihsaXN0LCBmYWxzZSk7XG5cdFx0ZWxzZSBpZiAoYW5jaG9yKVxuXHRcdFx0YW5jaG9yUG9zaXRpb24obGlzdCwgYW5jaG9yLCB7XG5cdFx0XHRcdHBsYWNlbWVudDogKGF0dHIobGlzdCwgXCJkYXRhLXBvc2l0aW9uXCIpID8/IFwiYm90dG9tXCIpIGFzIFBsYWNlbWVudCxcblx0XHRcdFx0bWlkZGxld2FyZTogW1xuXHRcdFx0XHRcdGZsaXAoKSxcblx0XHRcdFx0XHRzaGlmdCgpLFxuXHRcdFx0XHRcdHNpemUoe1xuXHRcdFx0XHRcdFx0cGFkZGluZzogMTAsXG5cdFx0XHRcdFx0XHRhcHBseSh7IGF2YWlsYWJsZUhlaWdodCB9KSB7XG5cdFx0XHRcdFx0XHRcdGxpc3Quc3R5bGUud2lkdGggPSBgJHthbmNob3Iub2Zmc2V0V2lkdGh9cHhgO1xuXHRcdFx0XHRcdFx0XHRsaXN0LnN0eWxlLm1heEhlaWdodCA9IGAke01hdGgubWF4KDUwLCBhdmFpbGFibGVIZWlnaHQpfXB4YDtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdF0sXG5cdFx0XHR9KTtcblx0fVxufVxuLy8gVXBkYXRlIHdoZW4gdHlwaW5nXG5mdW5jdGlvbiBoYW5kbGVGaWVsZElucHV0KGV2ZW50OiBFdmVudCkge1xuXHRpZiAoaXNJbnB1dExpa2UoZXZlbnQudGFyZ2V0KSkge1xuXHRcdHJlbmRlckNvdW50ZXIoZXZlbnQudGFyZ2V0KTtcblx0XHRyZW5kZXJUZXh0YXJlYVNpemUoZXZlbnQudGFyZ2V0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGaWVsZFZhbGRpYXRpb24oZXZlbnQ6IEV2ZW50KSB7XG5cdGNvbnN0IGZpZWxkID0gKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKGAuJHtDU1NfRklFTER9YCk7XG5cdGlmIChldmVudC50eXBlID09PSBcImludmFsaWRcIiAmJiBmaWVsZCkgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gUHJldmVudCBicm93c2VycyBmcm9tIHNob3dpbmcgZGVmYXVsdCB2YWxpZGF0aW9uIGJ1YmJsZXNcblx0aGFuZGxlRmllbGRNdXRhdGlvbihkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKENTU19GSUVMRCksIHRydWUpOyAvLyBVcGRhdGUgc3RhdGVcbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0ZJRUxELCBoYW5kbGVGaWVsZE11dGF0aW9uKTtcblx0b24oZG9jdW1lbnQsIFwiaW5wdXRcIiwgaGFuZGxlRmllbGRJbnB1dCwgUVVJQ0tfRVZFTlQpO1xuXHRvbihkb2N1bWVudCwgXCJpbnZhbGlkLHN1Ym1pdFwiLCBoYW5kbGVGaWVsZFZhbGRpYXRpb24sIHRydWUpOyAvLyBVc2UgY2FwdHVyZSBhcyBpbnZhbGlkIGFuZCBzdWJtaXQgZG9lcyBub3QgYnViYmxlXG5cdG9uKGRvY3VtZW50LCBcInRvZ2dsZVwiLCBoYW5kbGVGaWVsZFRvZ2dsZSwgUVVJQ0tfRVZFTlQpOyAvLyBVc2UgY2FwdHVyZSBzaW5jZSB0b2dnbGUgZG9lcyBub3QgYnViYmxlXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBpc0lucHV0TGlrZSwgb25Mb2FkZWQsIG9uTXV0YXRpb24sIHVzZUlkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19GSUVMRFNFVCA9IHN0eWxlcy5maWVsZHNldC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVkFMSURBVElPTiA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IEFSSUFfREVTQyA9IFwiYXJpYS1kZXNjcmliZWRieVwiO1xuY29uc3QgQVJJQV9JTlZBTElEID0gXCJhcmlhLWludmFsaWRcIjtcblxuLy8gVXNpbmcgc2V0VGltZW91dCB0byBlbnN1cmUgaXQgcnVucyBhZnRlciBmaWVsZC1vYnNlcnZlclxuZnVuY3Rpb24gaGFuZGxlRmllbGRzZXRNdXRhdGlvbihmaWVsZHNldHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4pIHtcblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBmaWVsZHNldCBvZiBmaWVsZHNldHMpXG5cdFx0XHRpZiAoZmllbGRzZXQuaXNDb25uZWN0ZWQpIHtcblx0XHRcdFx0Y29uc3QgaW5wdXRzOiBIVE1MSW5wdXRFbGVtZW50W10gPSBbXTtcblx0XHRcdFx0bGV0IHZhbGlkSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHRcdFx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgZWwgb2YgZmllbGRzZXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpKSB7XG5cdFx0XHRcdFx0aWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhDU1NfVkFMSURBVElPTikpIHtcblx0XHRcdFx0XHRcdHZhbGlkID0gYXR0cihlbCwgXCJkYXRhLWNvbG9yXCIpID09PSBcInN1Y2Nlc3NcIiB8fCAhZWwuY2xpZW50SGVpZ2h0OyAvLyBPbmx5IHNldCBpbnZhbGlkIGlmIFZhbGlkYXRpb24gaXMgdmlzaWJsZVxuXHRcdFx0XHRcdFx0dmFsaWRJZCA9IHVzZUlkKGVsKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSkgaW5wdXRzLnB1c2goZWwpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dHMpIHtcblx0XHRcdFx0XHRjb25zdCBkZXNjID0gYXR0cihpbnB1dCwgQVJJQV9ERVNDKT8ucmVwbGFjZSh2YWxpZElkIHx8IFwiI1wiLCBcIlwiKTtcblxuXHRcdFx0XHRcdGF0dHIoaW5wdXQsIEFSSUFfREVTQywgYCR7dmFsaWRJZCB8fCBcIlwifSAke2Rlc2MgfHwgXCJcIn1gLnRyaW0oKSk7XG5cdFx0XHRcdFx0YXR0cihpbnB1dCwgQVJJQV9JTlZBTElELCBgJHshdmFsaWR9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfRklFTERTRVQsIGhhbmRsZUZpZWxkc2V0TXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfTE9HTyA9IHN0eWxlcy5sb2dvLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTG9nb011dGF0aW9uKFtsb2dvXTogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0aWYgKGxvZ28/LmlzQ29ubmVjdGVkICYmIGxvZ28/LmZpcnN0RWxlbWVudENoaWxkIGluc3RhbmNlb2YgU1ZHU1ZHRWxlbWVudCkge1xuXHRcdGZvciAoY29uc3QgaWNvbiBvZiBkb2N1bWVudC5oZWFkLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaW5rW3JlbH49J2ljb24nXVwiKSlcblx0XHRcdGljb24uc2V0QXR0cmlidXRlKFwicmVsXCIsIFwiZGlzYWJsZWRcIik7IC8vIERpc2FibGUgcHJldmlvdXMgaWNvbiAoYnV0IG5vdCByZW1vdmUgaXMgYXMgdGhpcyBtYWtlcyBOZXh0LmpzIHNhZClcblxuXHRcdGNvbnN0IHN2ZyA9IGxvZ28uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0Y29uc3QgaXNEb3QgPSBsb2dvPy5oYXNBdHRyaWJ1dGUoXCJkYXRhLWVudlwiKTtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHN2Zyk7XG5cdFx0Y29uc3QgdGV4dCA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJjb2xvclwiKTtcblx0XHRjb25zdCBiYWNrID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIi0tbXRkcy1sb2dvLWNvbG9yXCIpO1xuXHRcdGNvbnN0IGljb24gPSBzdmcub3V0ZXJIVE1MXG5cdFx0XHQucmVwbGFjZSgvXFxuKy9nLCBcIiBcIikgLy8gUHJldmVudCBsaW5lIGJyZWFrc1xuXHRcdFx0LnJlcGxhY2UoLyhmaWxsfHdpZHRofGhlaWdodHx4bWxucyk9XCJbXlwiXStcIi9naSwgXCJcIilcblx0XHRcdC5yZXBsYWNlKFwiPHN2Z1wiLCBgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiBmaWxsPVwiJHt0ZXh0fVwiYCk7XG5cblx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFxuXHRcdFx0T2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKSwge1xuXHRcdFx0XHRocmVmOiBgZGF0YTppbWFnZS9zdmcreG1sLCR7ZW5jb2RlVVJJQ29tcG9uZW50KGA8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDU1IDU1Jz48cmVjdCBmaWxsPScke2lzRG90ID8gXCJub25lXCIgOiBiYWNrfScgd2lkdGg9JzUxJyBoZWlnaHQ9JzUxJyB4PScyJyB5PScyJyBzdHJva2U9JyR7dGV4dH0nIHN0cm9rZS1kYXNoYXJyYXk9JzAuMDkgNi4zOCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2Utb3BhY2l0eT0nJHtpc0RvdCA/IDAuNiA6IDB9JyBzdHJva2Utd2lkdGg9JzIuMycgcng9JzI1LjUnLz48ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNy41IDcuNSlcIj4ke2ljb259PC9nPjwvc3ZnPmApfWAsXG5cdFx0XHRcdHJlbDogXCJpY29uXCIsXG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfTE9HTywgaGFuZGxlTG9nb011dGF0aW9uKSxcbik7XG4iLCJpbXBvcnQgeyBmbGlwLCB0eXBlIFBsYWNlbWVudCwgc2hpZnQsIHNpemUgfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGFuY2hvclBvc2l0aW9uLCBhdHRyLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19QT1BPVkVSID0gc3R5bGVzLnBvcG92ZXIuc3BsaXQoXCIgXCIpWzBdO1xubGV0IE9QRU5fUE9QT1ZFUlMgPSAwOyAvLyBTcGVlZCB1cCBieSBvbmx5IGNoZWNraW5nIGNsaWNrcyBpZiB3ZSBoYXZlIG9wZW4gcG9wb3ZlcnNcblxuZnVuY3Rpb24gaGFuZGxlUG9wb3ZlclRvZ2dsZSh7XG5cdHRhcmdldDogZWwsXG5cdG5ld1N0YXRlLFxufTogRXZlbnQgJiB7IG5ld1N0YXRlPzogc3RyaW5nIH0pIHtcblx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19QT1BPVkVSKSkge1xuXHRcdGNvbnN0IGlzQ2xvc2luZyA9IG5ld1N0YXRlID09PSBcImNsb3NlZFwiO1xuXHRcdGNvbnN0IGlzQ29udGFpbiA9IGF0dHIoZWwsIFwiZGF0YS1vdmVyc2Nyb2xsXCIpID09PSBcImNvbnRhaW5cIjtcblx0XHRjb25zdCBhbmNob3IgPSAoZWwuZ2V0Um9vdE5vZGUoKSBhcyBTaGFkb3dSb290KT8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG5cdFx0XHRgW3BvcG92ZXJ0YXJnZXQ9XCIke2VsLmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdE9QRU5fUE9QT1ZFUlMgKz0gaXNDbG9zaW5nID8gLTEgOiAxO1xuXHRcdGlmIChpc0Nsb3NpbmcpIGFuY2hvclBvc2l0aW9uKGVsLCBmYWxzZSk7XG5cdFx0ZWxzZSBpZiAoYW5jaG9yKVxuXHRcdFx0YW5jaG9yUG9zaXRpb24oZWwsIGFuY2hvciwge1xuXHRcdFx0XHRwbGFjZW1lbnQ6IChhdHRyKGVsLCBcImRhdGEtcG9zaXRpb25cIikgfHwgXCJib3R0b21cIikgYXMgUGxhY2VtZW50LFxuXHRcdFx0XHRtaWRkbGV3YXJlOiBbZmxpcCgpLCBzaGlmdCh7IHBhZGRpbmc6IDEwIH0pXS5jb25jYXQoXG5cdFx0XHRcdFx0aXNDb250YWluXG5cdFx0XHRcdFx0XHQ/IHNpemUoe1xuXHRcdFx0XHRcdFx0XHRcdHBhZGRpbmc6IDEwLFxuXHRcdFx0XHRcdFx0XHRcdGFwcGx5KHsgYXZhaWxhYmxlSGVpZ2h0IH0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVsLnN0eWxlLm1heEhlaWdodCA9IGAke01hdGgubWF4KDUwLCBhdmFpbGFibGVIZWlnaHQpfXB4YDtcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0OiBbXSxcblx0XHRcdFx0KSxcblx0XHRcdH0pO1xuXHR9XG59XG5cbi8vIFBvbHlmaWxsIHBvcG92ZXJ0YXJnZXQgZm9yIDxhPiAobm90IHN1cHBvcnRlZCBieSBuYXRpdmUpXG4vLyBhbmQgYXV0b21hdGljYWxseSBhc3N1bWUgcG9wb3ZlcnRhcmdldCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQgcG9wb3ZlclxuLy8gYnV0IHJlc3BlY3QgdGhlIHBvcG92ZXJ0YXJnZXQgYW5kIHBvcG92ZXJ0YXJnZXRhY3Rpb24gYXR0cmlidXRlXG5mdW5jdGlvbiBoYW5kbGVQb3BvdmVyTGlua0NsaWNrKHsgdGFyZ2V0IH06IEV2ZW50KSB7XG5cdGNvbnN0IGNsb3NlID1cblx0XHRPUEVOX1BPUE9WRVJTICYmICh0YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImEsW3BvcG92ZXJ0YXJnZXRhY3Rpb25dXCIpO1xuXG5cdGlmIChjbG9zZSkge1xuXHRcdGNvbnN0IGFjdGlvbiA9IGF0dHIoY2xvc2UsIFwicG9wb3ZlcnRhcmdldGFjdGlvblwiKSB8fCBcInRvZ2dsZVwiO1xuXHRcdGNvbnN0IG9wZW4gPSBhY3Rpb24gPT09IFwic2hvd1wiIHx8IChhY3Rpb24gPT09IFwiaGlkZVwiID8gZmFsc2UgOiB1bmRlZmluZWQpO1xuXHRcdGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGF0dHIoY2xvc2UsIFwicG9wb3ZlcnRhcmdldFwiKSB8fCBcIlwiKTtcblx0XHRjb25zdCBwb3BvdmVyID0gKHRhcmdldCB8fCBjbG9zZSkuY2xvc2VzdDxIVE1MRWxlbWVudD4oYC4ke0NTU19QT1BPVkVSfWApO1xuXG5cdFx0Ly8gUG9wb3ZlciBjYW4gYmUgZGlzY29ubmV0ZWQgYnkgY2xpY2sgaGFuZGxlciBkZWVwZXIgZG93biBpbiB0aGUgRE9NIHRocmVlIGJlZm9yZSByZWFjaGluZyBkb2N1bWVudFxuXHRcdGlmIChwb3BvdmVyPy5pc0Nvbm5lY3RlZCAmJiBwb3BvdmVyPy50b2dnbGVQb3BvdmVyKVxuXHRcdFx0cG9wb3Zlci50b2dnbGVQb3BvdmVyKG9wZW4pO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwidG9nZ2xlXCIsIGhhbmRsZVBvcG92ZXJUb2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVQb3BvdmVyTGlua0NsaWNrKTsgLy8gQWxsb3cgYDxhPmAgdG8gdXNlIGBwb3BvdmVydGFyZ2V0YCBhcyB3ZWxsXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfVEFCTEUgPSBzdHlsZXMudGFibGUuc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVUYWJsZU11dGF0aW9uKHRhYmxlczogSFRNTENvbGxlY3Rpb25PZjxIVE1MVGFibGVFbGVtZW50Pikge1xuXHRmb3IgKGNvbnN0IHRhYmxlIG9mIHRhYmxlcykge1xuXHRcdGNvbnN0IHRocyA9IEFycmF5LmZyb20odGFibGUudEhlYWQ/LnJvd3NbMF0/LmNlbGxzIHx8IFtdLCAodGgpID0+XG5cdFx0XHR0aC5pbm5lclRleHQudHJpbSgpLFxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IHRib2R5IG9mIHRhYmxlLnRCb2RpZXMpXG5cdFx0XHRmb3IgKGNvbnN0IHJvdyBvZiB0Ym9keS5yb3dzKVxuXHRcdFx0XHRmb3IgKGNvbnN0IGNlbGwgb2Ygcm93LmNlbGxzKVxuXHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJkYXRhLXRoXCIsIHRoc1tjZWxsLmNlbGxJbmRleF0gfHwgXCI6ZW1wdHlcIik7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19UQUJMRSwgaGFuZGxlVGFibGVNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uLCBvbkxvYWRlZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfVE9HR0xFR1JPVVAgPSBgLiR7c3R5bGVzLnRvZ2dsZWdyb3VwLnNwbGl0KFwiIFwiKVswXX1gO1xuXG4vLyBQcmV2ZW50IGJyb3dzZXJzIGZyb20gc2hvd2luZyBkZWZhdWx0IHZhbGlkYXRpb24gYnViYmxlc1xuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlZ3JvdXBLZXlkb3duKGV2ZW50OiBFdmVudCAmIFBhcnRpYWw8S2V5Ym9hcmRFdmVudD4pIHtcblx0Y29uc3QgeyBrZXksIHRhcmdldDogZWwgfSA9IGV2ZW50O1xuXHRjb25zdCBncm91cCA9IGVsIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBlbC5jbG9zZXN0KENTU19UT0dHTEVHUk9VUCk7XG5cblx0aWYgKCFncm91cCkgcmV0dXJuO1xuXHRpZiAoa2V5ID09PSBcIkVudGVyXCIpIGVsLmNsaWNrKCk7XG5cdGlmIChrZXk/LnN0YXJ0c1dpdGgoXCJBcnJvd1wiKSkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0Y29uc3QgaW5wdXRzID0gZ3JvdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKTtcblx0XHRjb25zdCBpbmRleCA9IFsuLi5pbnB1dHNdLmluZGV4T2YoZWwpO1xuXHRcdGNvbnN0IG1vdmUgPSBrZXkubWF0Y2goL0Fycm93KFJpZ2h0fERvd24pLykgPyAxIDogLTE7XG5cdFx0aW5wdXRzWyhpbnB1dHMubGVuZ3RoICsgaW5kZXggKyBtb3ZlKSAlIGlucHV0cy5sZW5ndGhdPy5mb2N1cygpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBcImtleWRvd25cIiwgaGFuZGxlVG9nZ2xlZ3JvdXBLZXlkb3duKSk7XG4iLCJpbXBvcnQgeyBmbGlwLCB0eXBlIFBsYWNlbWVudCwgc2hpZnQgfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRJU19CUk9XU0VSLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdFFVSUNLX0VWRU5ULFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgREVTQ1JJQkVEQlkgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEVTQyA9IFwiRXNjYXBlXCI7XG5jb25zdCBMQUJFTExFREJZID0gXCJhcmlhLWxhYmVsbGVkYnlcIjtcbmNvbnN0IFBPU0lUSU9OX0NTU19QUk9QRVJUWSA9IFwiLS1tdGRzLXRvb2x0aXAtcG9zaXRpb25cIjtcbmNvbnN0IFRIUk9UVExFX0RFTEFZID0gMzAwO1xuY29uc3QgVE9PTFRJUCA9IElTX0JST1dTRVJcblx0PyBPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIHtcblx0XHRcdGNsYXNzTmFtZTogc3R5bGVzLl90b29sdGlwLFxuXHRcdFx0aWQ6IFwibXRkcy10b29sdGlwXCIsXG5cdFx0XHRwb3BvdmVyOiBcIm1hbnVhbFwiLFxuXHRcdH0pXG5cdDogbnVsbDsgLy8gQ3JlYXRlIGEgZHVtbXkgZWxlbWVudCB0byBhdm9pZCBudWxsIGNoZWNrc1xuXG5sZXQgQU5DSE9SOiBFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5sZXQgTEFTVF9DQUxMID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xubGV0IFRIUk9UVExFOiBudW1iZXIgfCBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiA9IDA7XG5cbmZ1bmN0aW9uIGhhbmRsZVRvb2x0aXBNb3ZlKHsgdGFyZ2V0LCB0eXBlLCBrZXkgfTogRXZlbnQgJiB7IGtleT86IHN0cmluZyB9KSB7XG5cdGlmICh0eXBlID09PSBcImtleWRvd25cIiAmJiBrZXkgIT09IEVTQykgcmV0dXJuOyAvLyBBbGxvdyBFU0MgZGlzbWlzcyB0byBmb2xsb3cgaHR0cHM6Ly93d3cudzMub3JnL1dBSS9BUklBL2FwZy9wYXR0ZXJucy90b29sdGlwL1xuXHRjb25zdCB3YWl0ID0gTEFTVF9DQUxMICsgVEhST1RUTEVfREVMQVkgLSBEYXRlLm5vdygpO1xuXHRjbGVhclRpbWVvdXQoVEhST1RUTEUpO1xuXHRUSFJPVFRMRSA9IHNldFRpbWVvdXQoXG5cdFx0aGFuZGxlVG9vbHRpcE1vdmVUaHJvdHRsZWQsXG5cdFx0TWF0aC5tYXgod2FpdCwgMCksXG5cdFx0a2V5ID09PSBFU0MgPyBudWxsIDogdGFyZ2V0LFxuXHQpO1xufVxuXG4vLyBVc2luZyBhIHRocm90dGxlZCBmdW5jdGlvbiB0byBhdm9pZCBwZXJmb3JtYW5jZSBpc3N1ZXNcbmZ1bmN0aW9uIGhhbmRsZVRvb2x0aXBNb3ZlVGhyb3R0bGVkKHRhcmdldDogRWxlbWVudCB8IG51bGwpIHtcblx0TEFTVF9DQUxMID0gRGF0ZS5ub3coKTtcblxuXHQvLyBCdWlsZCBhbmQgYXBwZW5kIHRvb2x0aXAgaWYgbm90IGV4aXN0aW5nXG5cdGlmICghVE9PTFRJUCB8fCB0YXJnZXQgPT09IFRPT0xUSVApIHJldHVybjsgLy8gQWxsb3cgdG9vbHRpcCB0byBiZSBob3ZlcmVkLCBmb2xsb3dpbmcgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMS8jY29udGVudC1vbi1ob3Zlci1vci1mb2N1c1xuXHRpZiAoIVRPT0xUSVA/LmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChUT09MVElQKTsgLy8gRW5zdXJlIGNvbm5lY3RlZFxuXHRsZXQgYW5jaG9yID0gdGFyZ2V0Py5jbG9zZXN0Py48RWxlbWVudD4oXCJbZGF0YS10b29sdGlwXVwiKSB8fCBudWxsO1xuXG5cdC8vIE5vIG5lZWQgdG8gdXBkYXRlXG5cdGlmIChhbmNob3IgPT09IEFOQ0hPUikgcmV0dXJuO1xuXG5cdGNvbnN0IGNvbnRlbnQgPSAoYW5jaG9yICYmIGF0dHIoYW5jaG9yLCBcImRhdGEtdG9vbHRpcFwiKSkgfHwgXCJcIjtcblx0Y29uc3QgcG9zaXRpb24gPVxuXHRcdChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwLXBvc2l0aW9uXCIpKSB8fFxuXHRcdHdpbmRvd1xuXHRcdFx0LmdldENvbXB1dGVkU3R5bGUoYW5jaG9yIHx8IGRvY3VtZW50LmJvZHkpXG5cdFx0XHQuZ2V0UHJvcGVydHlWYWx1ZShQT1NJVElPTl9DU1NfUFJPUEVSVFkpXG5cdFx0XHQ/LnRyaW0oKSB8fFxuXHRcdFwidG9wXCI7XG5cblx0Y29uc3QgaXNIaWRkZW4gPVxuXHRcdCFjb250ZW50IHx8XG5cdFx0Y29udGVudCA9PT0gXCJmYWxzZVwiIHx8XG5cdFx0Y29udGVudCA9PT0gXCJ0cnVlXCIgfHxcblx0XHRwb3NpdGlvbiA9PT0gXCJub25lXCI7XG5cblx0aWYgKGlzSGlkZGVuKSBhbmNob3IgPSBudWxsOyAvLyBEbyBub3Qgc2hvdyB0b29sdGlwIGlmIGJvb2xpc2ggdmFsdWVcblx0aWYgKGFuY2hvcikgVE9PTFRJUC50ZXh0Q29udGVudCA9IGNvbnRlbnQ7IC8vIE9ubHkgdXBkYXRlIGNvbnRlbnQgaWYgbmV3IGFuY2hvclxuXG5cdGNvbnN0IGhhZExhYmVsID0gQU5DSE9SICYmIGF0dHIoQU5DSE9SLCBMQUJFTExFREJZKSA9PT0gVE9PTFRJUD8uaWQ7XG5cdGNvbnN0IGhhc0xhYmVsID1cblx0XHQoYW5jaG9yIGluc3RhbmNlb2YgSFRNTEVsZW1lbnRcblx0XHRcdD8gYW5jaG9yLmlubmVyVGV4dFxuXHRcdFx0OiBhbmNob3I/LnRleHRDb250ZW50XG5cdFx0KT8udHJpbSgpIHx8XG5cdFx0YW5jaG9yPy5oYXNBdHRyaWJ1dGUoTEFCRUxMRURCWSkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShcImFyaWEtbGFiZWxcIik7XG5cblx0QU5DSE9SPy5yZW1vdmVBdHRyaWJ1dGUoaGFkTGFiZWwgPyBMQUJFTExFREJZIDogREVTQ1JJQkVEQlkpOyAvLyBVbmxpbmsgcHJldmlvdXMgYW5jaG9yXG5cdGFuY2hvclBvc2l0aW9uKFRPT0xUSVAsIGZhbHNlKTsgLy8gUmVzZXQgYW5jaG9yIHBvc2l0aW9uXG5cblx0QU5DSE9SID0gYW5jaG9yOyAvLyBTdG9yZSBuZXcgYW5jaG9yIC0gbWlnaHQgYmUgbnVsbCBpZiBubyBuZXcgYW5jaG9yXG5cdGlmIChBTkNIT1IpIGF0dHIoQU5DSE9SLCBoYXNMYWJlbCA/IERFU0NSSUJFREJZIDogTEFCRUxMRURCWSwgVE9PTFRJUD8uaWQpOyAvLyBVc2UgdG9vbHRpcCBhcyBkZXNjcmlwdGlvbiBpZiBhbGxyZWFkeSBoYXMgbGFiZWxcblx0aWYgKEFOQ0hPUj8uaXNDb25uZWN0ZWQpIFRPT0xUSVAuaGlkZVBvcG92ZXIoKTsgLy8gSGlkZSB0b29sdGlwIHNvIGl0IGNhbiBiZSBwbGFjZWQgb24gdG9wLWxheWVyIG9uIG5leHQgc2hvd1xuXHRUT09MVElQLnRvZ2dsZVBvcG92ZXIoISFhbmNob3IpO1xuXHRhbmNob3JQb3NpdGlvbihUT09MVElQLCBhbmNob3IgfHwgZmFsc2UsIHtcblx0XHRwbGFjZW1lbnQ6IHBvc2l0aW9uIGFzIFBsYWNlbWVudCxcblx0XHRtaWRkbGV3YXJlOiBbZmxpcCgpLCBzaGlmdCh7IHBhZGRpbmc6IDEwIH0pXSxcblx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwiYmx1cixmb2N1cyxtb3VzZW91dCxtb3VzZW92ZXJcIiwgaGFuZGxlVG9vbHRpcE1vdmUsIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcImtleWRvd25cIiwgaGFuZGxlVG9vbHRpcE1vdmUsIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcImJsdXJcIiwgaGFuZGxlVG9vbHRpcE1vdmUsIFFVSUNLX0VWRU5UKTtcbn0pO1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIGRlY2xhcmF0aXZlU2hhZG93Um9vdCA9IChzdHlsZSwgc2xvdCA9IFwiPHNsb3Q+PC9zbG90PlwiKSA9PiBgPHRlbXBsYXRlIHNoYWRvd3Jvb3Rtb2RlPVwib3BlblwiPiR7c2xvdH08c3R5bGU+JHtzdHlsZX08L3N0eWxlPjwvdGVtcGxhdGU+YDtcblxuLy8gdS1kZXRhaWxzLnRzXG52YXIgVUhUTUxEZXRhaWxzU3R5bGUgPSBgJHtESVNQTEFZX0JMT0NLfVxuOjpzbG90dGVkKHUtc3VtbWFyeSkgeyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGJsb2NrIH1cbjo6c2xvdHRlZCh1LXN1bW1hcnkpOjpiZWZvcmUgeyBjb250ZW50OiAnJzsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBtYXJnaW4taW5saW5lOiAuMDVlbSAuMzEyNWVtOyBib3JkZXItYmxvY2s6IC4zMTI1ZW0gc29saWQgdHJhbnNwYXJlbnQ7IGJvcmRlci1pbmxpbmUtc3RhcnQ6IC41ZW0gc29saWQgfVxuOjpzbG90dGVkKHUtc3VtbWFyeVthcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXSk6OmJlZm9yZSB7IHJvdGF0ZTogOTBkZWcgfVxuOmhvc3QgPiBbcGFydD1cImRldGFpbHMtY29udGVudFwiXTpub3QoW2hpZGRlbj1cIlwiXSkgeyBkaXNwbGF5OiBibG9jayB9YDtcbnZhciBVSFRNTERldGFpbHNTaGFkb3dSb290ID0gZGVjbGFyYXRpdmVTaGFkb3dSb290KFxuICBVSFRNTERldGFpbHNTdHlsZSxcbiAgJzxzbG90IG5hbWU9XCJzdW1tYXJ5XCI+PC9zbG90PjxzbG90IHBhcnQ9XCJkZXRhaWxzLWNvbnRlbnRcIiBoaWRkZW49XCJ1bnRpbC1mb3VuZFwiPjwvc2xvdD4nXG4pO1xudmFyIFVIVE1MRGV0YWlsc0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgLy8gVXNpbmcgdW5kZXJzY29yZSBpbnN0ZWFkIG9mIHByaXZhdGUgZmllbGRzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICAgIGlmICghdGhpcy5zaGFkb3dSb290KVxuICAgICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgbmFtZTogXCJzdW1tYXJ5XCIgfSksXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgcGFydDogXCJkZXRhaWxzLWNvbnRlbnRcIiB9KSxcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIFVIVE1MRGV0YWlsc1N0eWxlKVxuICAgICAgKTtcbiAgfVxuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wib3BlblwiXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB2YXIgX2EyO1xuICAgIHRoaXMuX2NvbnRlbnQgPSAoX2EyID0gdGhpcy5zaGFkb3dSb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNoaWxkcmVuWzFdO1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwiZ3JvdXBcIik7XG4gICAgb24odGhpcy5fY29udGVudCwgXCJiZWZvcmVtYXRjaFwiLCB0aGlzKTtcbiAgICBvbih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBpZiAodGhpcy5fY29udGVudCkgb2ZmKHRoaXMuX2NvbnRlbnQsIFwiYmVmb3JlbWF0Y2hcIiwgdGhpcyk7XG4gICAgb2ZmKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICB0aGlzLl9jb250ZW50ID0gbnVsbDtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socHJvcCwgcHJldiwgbmV4dCkge1xuICAgIGNvbnN0IGhpZGUgPSBcIm9uYmVmb3JlbWF0Y2hcIiBpbiB0aGlzID8gXCJ1bnRpbC1mb3VuZFwiIDogdHJ1ZTtcbiAgICBjb25zdCBvcGVuID0gdGhpcy5vcGVuO1xuICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5jaGlsZHJlbilcbiAgICAgIGlmIChlbC5ub2RlTmFtZSA9PT0gXCJVLVNVTU1BUllcIikgYXR0cihlbCwgXCJhcmlhLWV4cGFuZGVkXCIsIGAke29wZW59YCk7XG4gICAgaWYgKHRoaXMuX2NvbnRlbnQpIHtcbiAgICAgIGF0dHIodGhpcy5fY29udGVudCwgXCJhcmlhLWhpZGRlblwiLCBgJHshb3Blbn1gKTtcbiAgICAgIHRoaXMuX2NvbnRlbnQuaGlkZGVuID0gb3BlbiA/IGZhbHNlIDogaGlkZTtcbiAgICB9XG4gICAgaWYgKG9wZW4gJiYgdGhpcy5uYW1lKSB7XG4gICAgICBjb25zdCB1RGV0YWlsc0xpc3QgPSBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAke3RoaXMubm9kZU5hbWV9W25hbWU9XCIke3RoaXMubmFtZX1cIl1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCB1RGV0YWlscyBvZiB1RGV0YWlsc0xpc3QpXG4gICAgICAgIGlmICh1RGV0YWlscyAhPT0gdGhpcykgdURldGFpbHMub3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAocHJvcCA9PT0gXCJvcGVuXCIgJiYgcHJldiA9PT0gbnVsbCAhPT0gKG5leHQgPT09IG51bGwpKVxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInRvZ2dsZVwiKSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiOnNjb3BlID4gdS1zdW1tYXJ5XCIpO1xuICAgIGNvbnN0IGlzU3VtbWFyeSA9IHN1bW1hcnkgPT0gbnVsbCA/IHZvaWQgMCA6IHN1bW1hcnkuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJlZm9yZW1hdGNoXCIpIHRoaXMub3BlbiA9IHRydWU7XG4gICAgaWYgKGlzU3VtbWFyeSAmJiBldmVudC50eXBlID09PSBcImtleWRvd25cIikgYXNCdXR0b24oZXZlbnQpO1xuICAgIGlmIChpc1N1bW1hcnkgJiYgZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xuICB9XG4gIGdldCBvcGVuKCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcIm9wZW5cIik7XG4gIH1cbiAgc2V0IG9wZW4odmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwib3BlblwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBcIm5hbWVcIikgfHwgXCJcIjtcbiAgfVxuICBzZXQgbmFtZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJuYW1lXCIsIHZhbHVlKTtcbiAgfVxufTtcbnZhciBVSFRNTFN1bW1hcnlFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgICB0aGlzLnNsb3QgPSBcInN1bW1hcnlcIjtcbiAgICB0aGlzLnRhYkluZGV4ID0gMDtcbiAgfVxufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGV0YWlsc1wiLCBVSFRNTERldGFpbHNFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtc3VtbWFyeVwiLCBVSFRNTFN1bW1hcnlFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxEZXRhaWxzRWxlbWVudCwgVUhUTUxEZXRhaWxzU2hhZG93Um9vdCwgVUhUTUxEZXRhaWxzU3R5bGUsIFVIVE1MU3VtbWFyeUVsZW1lbnQgfTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19GSVJFRk9YID0gSVNfQlJPV1NFUiAmJiAvZmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIGdldExhYmVsID0gKGVsKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IGxhYmVsID0gYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIpIHx8IFwiXCI7XG4gIGNvbnN0IGxhYmVscyA9ICgoX2EyID0gYXR0cihlbCwgXCJhcmlhLWxhYmVsbGVkYnlcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpLnNwbGl0KC9cXHMrLykpIHx8IFtdO1xuICByZXR1cm4gW1xuICAgIC4uLmxhYmVscy5tYXAoKGlkMikgPT4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQyKSksXG4gICAgLy8gR2V0IGFsbCBsYWJlbGxlZGJ5IGVsZW1lbnRzXG4gICAgLi4uQXJyYXkuZnJvbShlbC5sYWJlbHMgfHwgW10pXG4gICAgLy8gR2V0IGFsbCA8bGFiZWw+IGVsZW1lbnRzXG4gIF0ucmVkdWNlKChhY2MsIGVsMikgPT4ge1xuICAgIHZhciBfYTM7XG4gICAgcmV0dXJuIGFjYyB8fCAoKF9hMyA9IGVsMiA9PSBudWxsID8gdm9pZCAwIDogZWwyLmlubmVyVGV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy50cmltKCkpIHx8IFwiXCI7XG4gIH0sIGxhYmVsKTtcbn07XG52YXIgZGVjbGFyYXRpdmVTaGFkb3dSb290ID0gKHN0eWxlLCBzbG90ID0gXCI8c2xvdD48L3Nsb3Q+XCIpID0+IGA8dGVtcGxhdGUgc2hhZG93cm9vdG1vZGU9XCJvcGVuXCI+JHtzbG90fTxzdHlsZT4ke3N0eWxlfTwvc3R5bGU+PC90ZW1wbGF0ZT5gO1xuXG4vLyB1LXByb2dyZXNzLnRzXG52YXIgVUhUTUxQcm9ncmVzc1N0eWxlID0gYDpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGJvcmRlcjogMXB4IHNvbGlkOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGhlaWdodDogLjVlbTsgd2lkdGg6IDEwZW07IG92ZXJmbG93OiBoaWRkZW4gfVxuOmhvc3Q6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiAxMDAlOyBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7IHdpZHRoOiB2YXIoLS1wZXJjZW50YWdlLCAwJSk7IHRyYW5zaXRpb246IHdpZHRoIC4ycyB9XG46aG9zdCg6bm90KFt2YWx1ZV0pKSB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZyxjdXJyZW50Q29sb3IgMjUlLCB0cmFuc3BhcmVudCA1MCUsIGN1cnJlbnRDb2xvciA3NSUpIDUwJS80MDAlIH1cbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSkgeyA6aG9zdCB7IGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZSAycyBsaW5lYXIgaW5maW5pdGUgfSAgfVxuQGtleWZyYW1lcyBpbmRldGVybWluYXRlIHsgZnJvbSB7IGJhY2tncm91bmQtcG9zaXRpb24teDogMTAwJSB9IHRvIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAwIH0gfWA7XG52YXIgVUhUTUxQcm9ncmVzc1NoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoXG4gIFVIVE1MUHJvZ3Jlc3NTdHlsZSxcbiAgXCI8c2xvdCBoaWRkZW4+PC9zbG90PlwiXG4pO1xudmFyIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbnZhciBVSFRNTFByb2dyZXNzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIiwgXCJ2YWx1ZVwiLCBcIm1heFwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICghdGhpcy5zaGFkb3dSb290KVxuICAgICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgaGlkZGVuOiBcIlwiIH0pLFxuICAgICAgICAvLyBTbG90IGhpZGluZyBjb250ZW50IGFsbG93cyBsZWdhY3kgYnJvd3NlciB0byBkaXNwbGF5IGZhbGxiYWNrIHRleHRcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIFVIVE1MUHJvZ3Jlc3NTdHlsZSlcbiAgICAgICk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKFNLSVBfQVRUUl9DSEFOR0UpIHJldHVybjtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gdHJ1ZTtcbiAgICBjb25zdCByb2xlSW1hZ2UgPSBJU19JT1MgfHwgSVNfRklSRUZPWDtcbiAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCh0aGlzLnBvc2l0aW9uICogMTAwKSk7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcGVyY2VudGFnZVwiLCBgJHtwZXJjZW50YWdlfSVgKTtcbiAgICBsZXQgbGFiZWwgPSBnZXRMYWJlbCh0aGlzKTtcbiAgICBpZiAocm9sZUltYWdlKSBsYWJlbCA9IGAke2xhYmVsLnJlcGxhY2UoL1xcZCslJC8sIFwiXCIpfSAke3BlcmNlbnRhZ2V9JWA7XG4gICAgaWYgKElTX0ZJUkVGT1gpIGZvciAoY29uc3QgZWwgb2YgdGhpcy5sYWJlbHMpIGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtYnVzeVwiLCBgJHt0aGlzLnBvc2l0aW9uID09PSAtMX1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbC50cmltKCkpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsbGVkYnlcIiwgbnVsbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtYXhcIiwgXCIxMDBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtaW5cIiwgXCIwXCIpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbm93XCIsIGAke3BlcmNlbnRhZ2V9YCk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgcm9sZUltYWdlID8gXCJpbWdcIiA6IFwicHJvZ3Jlc3NiYXJcIik7XG4gICAgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xuICB9XG4gIGdldCBsYWJlbHMoKSB7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLmNsb3Nlc3QoXCJsYWJlbDpub3QoW2Zvcl0pXCIpO1xuICAgIGNvbnN0IGlkMiA9IHVzZUlkKHRoaXMpO1xuICAgIGlmIChsYWJlbCkgbGFiZWwuaHRtbEZvciA9IGlkMjtcbiAgICBjb25zdCBlbCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGBsYWJlbFtmb3I9XCIke2lkMn1cIl1gXG4gICAgKTtcbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgZ2V0IHBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlID09PSBudWxsID8gLTEgOiBNYXRoLm1pbih0aGlzLnZhbHVlIC8gdGhpcy5tYXgsIDEpO1xuICB9XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIik7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBtYXgoKSB7XG4gICAgcmV0dXJuIGdldE51bWJlcih0aGlzLCBcIm1heFwiKSB8fCAxO1xuICB9XG4gIHNldCBtYXgobWF4KSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwibWF4XCIsIG1heCk7XG4gIH1cbn07XG4vLyBQcmV2ZW50IENocm9tZSBEZXZUb29scyB3YXJuaW5nIGFib3V0IDxsYWJlbCBmb3I9XCJcIj4gcG9pbnRpbmcgdG8gPHUtcHJvZ3Jlc3M+XG5VSFRNTFByb2dyZXNzRWxlbWVudC5mb3JtQXNzb2NpYXRlZCA9IHRydWU7XG52YXIgaXNOdW1lcmljID0gKHZhbHVlKSA9PiAhTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUZsb2F0KGAke3ZhbHVlfWApKSAmJiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKHZhbHVlKSk7XG52YXIgZ2V0TnVtYmVyID0gKGVsLCBrZXkpID0+IHtcbiAgY29uc3QgdmFsdWUgPSBhdHRyKGVsLCBrZXkpO1xuICByZXR1cm4gaXNOdW1lcmljKHZhbHVlKSA/IE1hdGgubWF4KDAsIE51bWJlci5wYXJzZUZsb2F0KHZhbHVlKSkgOiBudWxsO1xufTtcbnZhciBzZXROdW1iZXIgPSAoZWwsIGtleSwgdmFsKSA9PiB7XG4gIGlmICh2YWwgPT09IG51bGwgfHwgaXNOdW1lcmljKHZhbCkpIGF0dHIoZWwsIGtleSwgYCR7dmFsfWApO1xuICBlbHNlIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCBub24tbnVtZXJpYyAnJHthdHRyfSc6ICcke3ZhbH0nYCk7XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1wcm9ncmVzc1wiLCBVSFRNTFByb2dyZXNzRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MUHJvZ3Jlc3NFbGVtZW50LCBVSFRNTFByb2dyZXNzU2hhZG93Um9vdCwgVUhUTUxQcm9ncmVzc1N0eWxlIH07XG4iXSwibmFtZXMiOlsiX19kZWZQcm9wIiwiX19nZXRPd25Qcm9wU3ltYm9scyIsIl9faGFzT3duUHJvcCIsIl9fcHJvcElzRW51bSIsIl9fZGVmTm9ybWFsUHJvcCIsIm9iaiIsImtleSIsInZhbHVlIiwiX19zcHJlYWRWYWx1ZXMiLCJhIiwiYiIsInByb3AiLCJJU19CUk9XU0VSIiwiSVNfQU5EUk9JRCIsIklTX0ZJUkVGT1giLCJJU19JT1MiLCJfYSIsIkZPQ1VTX09VVExJTkUiLCJVSFRNTEVsZW1lbnQiLCJhdHRyIiwiZWwiLCJuYW1lIiwiZXZlbnRzIiwiYWN0aW9uIiwiZWxlbWVudCIsInJlc3QiLCJ0eXBlIiwib24iLCJvZmYiLCJvYnNlcnZlcnMiLCJtdXRhdGlvbk9ic2VydmVyIiwib3B0aW9ucyIsIm9ic2VydmVyIiwiZGV0YWlsIiwiYXNCdXR0b24iLCJldmVudCIsImlzQ2xpY2siLCJnZXRSb290Iiwibm9kZSIsIl9hMiIsInJvb3QiLCJpZCIsInVzZUlkIiwiY3JlYXRlRWxlbWVudCIsInRhZ05hbWUiLCJ0ZXh0MiIsImF0dHJzIiwidmFsIiwiY3VzdG9tRWxlbWVudHMiLCJpbnN0YW5jZSIsImdldExhYmVsIiwibGFiZWwiLCJpZDIiLCJhY2MiLCJlbDIiLCJfYTMiLCJMSVZFIiwiTElWRV9TUl9GSVgiLCJzcGVhayIsInNldFZhbHVlIiwiaW5wdXQiLCJkYXRhIiwiX2IiLCJwcm90byIsIklTX1BSRVNTIiwiaXNNb3VzZURvd24iLCJVSFRNTENvbWJvYm94U3R5bGUiLCJFVkVOVFMiLCJFVkVOVF9PTkNFIiwiSVNfRklSRUZPWF9ERVNLVE9QIiwiSVNfTU9CSUxFIiwiTU9ESUZJRUQiLCJGQUxTRSIsIlRFWFRTIiwiVUhUTUxDb21ib2JveEVsZW1lbnQiLCJyZW5kZXIiLCJzeW5jSW5wdXRWYWx1ZSIsIl8iLCJ0YXJnZXQiLCJpc0Rpc2FibGVkIiwib25CbHVyIiwib25DbGljayIsIm9uRm9jdXMiLCJvbklucHV0Iiwib25LZXlEb3duIiwidGFnIiwidGV4dCIsImlzRGF0YSIsImNvbnRyb2wiLCJzZWxmIiwiX2ZvY3VzIiwiX3RleHRzIiwiaXRlbXMiLCJsaXN0IiwibXVsdGlwbGUiLCJwcmV2IiwibmV4dCIsImVkaXRzIiwiYWRkZWROb2RlcyIsInJlbW92ZWROb2RlcyIsInNob3VsZEFubm91bmNlIiwiYXJpYUV4cGFuZGVkIiwiaW5wdXRNb2RlIiwibmV4dEZvY3VzIiwiaXNSZW1vdmUiLCJpZHgiLCJzZWxlY3QiLCJyZW1vdmUiLCJpdGVtMiIsIm9wdGlvbiIsImxhYmVsMiIsImFyaWEiLCJvcHQiLCJpdGVtIiwic3luY0NsZWFyV2l0aElucHV0Iiwic3luY09wdGlvbnNXaXRoSXRlbXMiLCJfc3BlYWsiLCJ2YWx1ZXMiLCJkaXNwYXRjaE1hdGNoIiwiY2hhbmdlIiwiY3JlYXRhYmxlIiwicXVlcnkiLCJtYXRjaCIsIm8iLCJkaXNwYXRjaENoYW5nZSIsInJlbW92YWJsZSIsImFkZCIsImkiLCJvbkJsdXJyZWQiLCJ4IiwieSIsImNsZWFyIiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwicmVwZWF0IiwiaXNDb250cm9sIiwiaW5UZXh0IiwiaW5kZXgiLCJmb3JtIiwiU0FGRV9MQUJFTExFREJZIiwiRElTUExBWV9CTE9DSyIsImF0dGFjaFN0eWxlIiwiY3NzIiwiVUhUTUxUYWJzU3R5bGUiLCJVSFRNTFRhYkxpc3RTdHlsZSIsIlVIVE1MVGFiUGFuZWxTdHlsZSIsIlVIVE1MVGFiU3R5bGUiLCJBUklBX0NPTlRST0xTIiwiQVJJQV9TRUxFQ1RFRCIsIlVIVE1MVGFic0VsZW1lbnQiLCJxdWVyeVdpdGhvdXROZXN0ZWQiLCJnZXRTZWxlY3RlZEluZGV4Iiwic2V0U2VsZWN0ZWQiLCJVSFRNTFRhYkxpc3RFbGVtZW50IiwidGFiIiwidGFicyIsIlNLSVBfQVRUUl9DSEFOR0UiLCJVSFRNTFRhYkVsZW1lbnQiLCJwYW5lbHMiLCJuZXh0UGFuZWwiLCJnZXRQYW5lbCIsInBhbmVsIiwidGFibGlzdCIsInRhYkxpc3QiLCJVSFRNTFRhYlBhbmVsRWxlbWVudCIsImhpZGRlbiIsImlzRm9jdXNhYmxlIiwibWluIiwibWF4Iiwicm91bmQiLCJmbG9vciIsImNyZWF0ZUNvb3JkcyIsInYiLCJvcHBvc2l0ZVNpZGVNYXAiLCJvcHBvc2l0ZUFsaWdubWVudE1hcCIsImNsYW1wIiwic3RhcnQiLCJlbmQiLCJldmFsdWF0ZSIsInBhcmFtIiwiZ2V0U2lkZSIsInBsYWNlbWVudCIsImdldEFsaWdubWVudCIsImdldE9wcG9zaXRlQXhpcyIsImF4aXMiLCJnZXRBeGlzTGVuZ3RoIiwieUF4aXNTaWRlcyIsImdldFNpZGVBeGlzIiwiZ2V0QWxpZ25tZW50QXhpcyIsImdldEFsaWdubWVudFNpZGVzIiwicmVjdHMiLCJydGwiLCJhbGlnbm1lbnQiLCJhbGlnbm1lbnRBeGlzIiwibGVuZ3RoIiwibWFpbkFsaWdubWVudFNpZGUiLCJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsImdldEV4cGFuZGVkUGxhY2VtZW50cyIsIm9wcG9zaXRlUGxhY2VtZW50IiwiZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQiLCJsclBsYWNlbWVudCIsInJsUGxhY2VtZW50IiwidGJQbGFjZW1lbnQiLCJidFBsYWNlbWVudCIsImdldFNpZGVMaXN0Iiwic2lkZSIsImlzU3RhcnQiLCJnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzIiwiZmxpcEFsaWdubWVudCIsImRpcmVjdGlvbiIsImV4cGFuZFBhZGRpbmdPYmplY3QiLCJwYWRkaW5nIiwiZ2V0UGFkZGluZ09iamVjdCIsInJlY3RUb0NsaWVudFJlY3QiLCJyZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudCIsIl9yZWYiLCJyZWZlcmVuY2UiLCJmbG9hdGluZyIsInNpZGVBeGlzIiwiYWxpZ25MZW5ndGgiLCJpc1ZlcnRpY2FsIiwiY29tbW9uWCIsImNvbW1vblkiLCJjb21tb25BbGlnbiIsImNvb3JkcyIsImNvbXB1dGVQb3NpdGlvbiIsImNvbmZpZyIsInN0cmF0ZWd5IiwibWlkZGxld2FyZSIsInBsYXRmb3JtIiwidmFsaWRNaWRkbGV3YXJlIiwic3RhdGVmdWxQbGFjZW1lbnQiLCJtaWRkbGV3YXJlRGF0YSIsInJlc2V0Q291bnQiLCJmbiIsIm5leHRYIiwibmV4dFkiLCJyZXNldCIsImRldGVjdE92ZXJmbG93Iiwic3RhdGUiLCJfYXdhaXQkcGxhdGZvcm0kaXNFbGUiLCJlbGVtZW50cyIsImJvdW5kYXJ5Iiwicm9vdEJvdW5kYXJ5IiwiZWxlbWVudENvbnRleHQiLCJhbHRCb3VuZGFyeSIsInBhZGRpbmdPYmplY3QiLCJjbGlwcGluZ0NsaWVudFJlY3QiLCJvZmZzZXRQYXJlbnQiLCJvZmZzZXRTY2FsZSIsImVsZW1lbnRDbGllbnRSZWN0IiwiZmxpcCIsIl9taWRkbGV3YXJlRGF0YSRhcnJvdyIsIl9taWRkbGV3YXJlRGF0YSRmbGlwIiwiaW5pdGlhbFBsYWNlbWVudCIsImNoZWNrTWFpbkF4aXMiLCJjaGVja0Nyb3NzQXhpcyIsInNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyIsImZhbGxiYWNrU3RyYXRlZ3kiLCJmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uIiwiZGV0ZWN0T3ZlcmZsb3dPcHRpb25zIiwiaW5pdGlhbFNpZGVBeGlzIiwiaXNCYXNlUGxhY2VtZW50IiwiZmFsbGJhY2tQbGFjZW1lbnRzIiwiaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiIsInBsYWNlbWVudHMiLCJvdmVyZmxvdyIsIm92ZXJmbG93cyIsIm92ZXJmbG93c0RhdGEiLCJzaWRlcyIsIl9taWRkbGV3YXJlRGF0YSRmbGlwMiIsIl9vdmVyZmxvd3NEYXRhJGZpbHRlciIsIm5leHRJbmRleCIsIm5leHRQbGFjZW1lbnQiLCJkIiwicmVzZXRQbGFjZW1lbnQiLCJfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIyIiwiY3VycmVudFNpZGVBeGlzIiwic2hpZnQiLCJsaW1pdGVyIiwiY3Jvc3NBeGlzIiwibWFpbkF4aXMiLCJtYWluQXhpc0Nvb3JkIiwiY3Jvc3NBeGlzQ29vcmQiLCJtaW5TaWRlIiwibWF4U2lkZSIsImxpbWl0ZWRDb29yZHMiLCJzaXplIiwiX3N0YXRlJG1pZGRsZXdhcmVEYXRhIiwiX3N0YXRlJG1pZGRsZXdhcmVEYXRhMiIsImFwcGx5IiwiaXNZQXhpcyIsImhlaWdodFNpZGUiLCJ3aWR0aFNpZGUiLCJtYXhpbXVtQ2xpcHBpbmdIZWlnaHQiLCJtYXhpbXVtQ2xpcHBpbmdXaWR0aCIsIm92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0Iiwib3ZlcmZsb3dBdmFpbGFibGVXaWR0aCIsIm5vU2hpZnQiLCJhdmFpbGFibGVIZWlnaHQiLCJhdmFpbGFibGVXaWR0aCIsInhNaW4iLCJ4TWF4IiwieU1pbiIsInlNYXgiLCJuZXh0RGltZW5zaW9ucyIsImhhc1dpbmRvdyIsImdldE5vZGVOYW1lIiwiaXNOb2RlIiwiZ2V0V2luZG93IiwiX25vZGUkb3duZXJEb2N1bWVudCIsImdldERvY3VtZW50RWxlbWVudCIsImlzRWxlbWVudCIsImlzSFRNTEVsZW1lbnQiLCJpc1NoYWRvd1Jvb3QiLCJpbnZhbGlkT3ZlcmZsb3dEaXNwbGF5VmFsdWVzIiwiaXNPdmVyZmxvd0VsZW1lbnQiLCJvdmVyZmxvd1giLCJvdmVyZmxvd1kiLCJkaXNwbGF5IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInRhYmxlRWxlbWVudHMiLCJpc1RhYmxlRWxlbWVudCIsInRvcExheWVyU2VsZWN0b3JzIiwiaXNUb3BMYXllciIsInNlbGVjdG9yIiwidHJhbnNmb3JtUHJvcGVydGllcyIsIndpbGxDaGFuZ2VWYWx1ZXMiLCJjb250YWluVmFsdWVzIiwiaXNDb250YWluaW5nQmxvY2siLCJlbGVtZW50T3JDc3MiLCJ3ZWJraXQiLCJpc1dlYktpdCIsImdldENvbnRhaW5pbmdCbG9jayIsImN1cnJlbnROb2RlIiwiZ2V0UGFyZW50Tm9kZSIsImlzTGFzdFRyYXZlcnNhYmxlTm9kZSIsImxhc3RUcmF2ZXJzYWJsZU5vZGVOYW1lcyIsImdldE5vZGVTY3JvbGwiLCJyZXN1bHQiLCJnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvciIsInBhcmVudE5vZGUiLCJnZXRPdmVyZmxvd0FuY2VzdG9ycyIsInRyYXZlcnNlSWZyYW1lcyIsIl9ub2RlJG93bmVyRG9jdW1lbnQyIiwic2Nyb2xsYWJsZUFuY2VzdG9yIiwiaXNCb2R5Iiwid2luIiwiZnJhbWVFbGVtZW50IiwiZ2V0RnJhbWVFbGVtZW50IiwiZ2V0Q3NzRGltZW5zaW9ucyIsImdldENvbXB1dGVkU3R5bGUkMSIsImhhc09mZnNldCIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0Iiwic2hvdWxkRmFsbGJhY2siLCJ1bndyYXBFbGVtZW50IiwiZ2V0U2NhbGUiLCJkb21FbGVtZW50IiwiJCIsIm5vT2Zmc2V0cyIsImdldFZpc3VhbE9mZnNldHMiLCJzaG91bGRBZGRWaXN1YWxPZmZzZXRzIiwiaXNGaXhlZCIsImZsb2F0aW5nT2Zmc2V0UGFyZW50IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaW5jbHVkZVNjYWxlIiwiaXNGaXhlZFN0cmF0ZWd5IiwiY2xpZW50UmVjdCIsInNjYWxlIiwidmlzdWFsT2Zmc2V0cyIsIm9mZnNldFdpbiIsImN1cnJlbnRXaW4iLCJjdXJyZW50SUZyYW1lIiwiaWZyYW1lU2NhbGUiLCJpZnJhbWVSZWN0IiwiZ2V0V2luZG93U2Nyb2xsQmFyWCIsImxlZnRTY3JvbGwiLCJnZXRIVE1MT2Zmc2V0IiwiZG9jdW1lbnRFbGVtZW50Iiwic2Nyb2xsIiwiaHRtbFJlY3QiLCJjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCIsInRvcExheWVyIiwib2Zmc2V0cyIsImlzT2Zmc2V0UGFyZW50QW5FbGVtZW50Iiwib2Zmc2V0UmVjdCIsImh0bWxPZmZzZXQiLCJnZXRDbGllbnRSZWN0cyIsImdldERvY3VtZW50UmVjdCIsImh0bWwiLCJib2R5IiwiU0NST0xMQkFSX01BWCIsImdldFZpZXdwb3J0UmVjdCIsInZpc3VhbFZpZXdwb3J0IiwidmlzdWFsVmlld3BvcnRCYXNlZCIsIndpbmRvd1Njcm9sbGJhclgiLCJkb2MiLCJib2R5U3R5bGVzIiwiYm9keU1hcmdpbklubGluZSIsImNsaXBwaW5nU3RhYmxlU2Nyb2xsYmFyV2lkdGgiLCJhYnNvbHV0ZU9yRml4ZWQiLCJnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdCIsImdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvciIsImNsaXBwaW5nQW5jZXN0b3IiLCJoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IiLCJzdG9wTm9kZSIsImdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyIsImNhY2hlIiwiY2FjaGVkUmVzdWx0IiwiY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUiLCJlbGVtZW50SXNGaXhlZCIsImNvbXB1dGVkU3R5bGUiLCJjdXJyZW50Tm9kZUlzQ29udGFpbmluZyIsImFuY2VzdG9yIiwiZ2V0Q2xpcHBpbmdSZWN0IiwiY2xpcHBpbmdBbmNlc3RvcnMiLCJmaXJzdENsaXBwaW5nQW5jZXN0b3IiLCJjbGlwcGluZ1JlY3QiLCJhY2NSZWN0IiwiZ2V0RGltZW5zaW9ucyIsImdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50Iiwic2V0TGVmdFJUTFNjcm9sbGJhck9mZnNldCIsImlzU3RhdGljUG9zaXRpb25lZCIsImdldFRydWVPZmZzZXRQYXJlbnQiLCJwb2x5ZmlsbCIsInJhd09mZnNldFBhcmVudCIsImdldE9mZnNldFBhcmVudCIsInN2Z09mZnNldFBhcmVudCIsImdldEVsZW1lbnRSZWN0cyIsImdldE9mZnNldFBhcmVudEZuIiwiZ2V0RGltZW5zaW9uc0ZuIiwiZmxvYXRpbmdEaW1lbnNpb25zIiwiaXNSVEwiLCJyZWN0c0FyZUVxdWFsIiwib2JzZXJ2ZU1vdmUiLCJvbk1vdmUiLCJpbyIsInRpbWVvdXRJZCIsImNsZWFudXAiLCJfaW8iLCJyZWZyZXNoIiwic2tpcCIsInRocmVzaG9sZCIsImVsZW1lbnRSZWN0Rm9yUm9vdE1hcmdpbiIsImluc2V0VG9wIiwiaW5zZXRSaWdodCIsImluc2V0Qm90dG9tIiwiaW5zZXRMZWZ0IiwiaXNGaXJzdFVwZGF0ZSIsImhhbmRsZU9ic2VydmUiLCJlbnRyaWVzIiwicmF0aW8iLCJhdXRvVXBkYXRlIiwidXBkYXRlIiwiYW5jZXN0b3JTY3JvbGwiLCJhbmNlc3RvclJlc2l6ZSIsImVsZW1lbnRSZXNpemUiLCJsYXlvdXRTaGlmdCIsImFuaW1hdGlvbkZyYW1lIiwicmVmZXJlbmNlRWwiLCJhbmNlc3RvcnMiLCJjbGVhbnVwSW8iLCJyZW9ic2VydmVGcmFtZSIsInJlc2l6ZU9ic2VydmVyIiwiZmlyc3RFbnRyeSIsIl9yZXNpemVPYnNlcnZlciIsImZyYW1lSWQiLCJwcmV2UmVmUmVjdCIsImZyYW1lTG9vcCIsIm5leHRSZWZSZWN0IiwiX3Jlc2l6ZU9ic2VydmVyMiIsInNoaWZ0JDEiLCJmbGlwJDEiLCJzaXplJDEiLCJtZXJnZWRPcHRpb25zIiwicGxhdGZvcm1XaXRoQ2FjaGUiLCJjb21wdXRlUG9zaXRpb24kMSIsIlFVSUNLX0VWRU5UIiwiZGVib3VuY2UiLCJjYWxsYmFjayIsImRlbGF5IiwidGltZXIiLCJhcmdzIiwiVVVJRCIsIlVOQklORCIsIm9uTG9hZGVkIiwicnVuIiwidW5iaW5kIiwiQU5DSE9SRUQiLCJhbmNob3JQb3NpdGlvbiIsImFuY2hvciIsImNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIiLCJxdWV1ZSIsIm9uRnJhbWUiLCJvblRpbWVyIiwiTVVUQVRPUlMiLCJvbk11dGF0aW9uIiwiY2xhc3NOYW1lIiwiZWxlbXMiLCJtdXRhdG9yIiwiaXNJbnB1dExpa2UiLCJDU1NfQlJFQURDUlVNQlMiLCJzdHlsZXMiLCJDU1NfQ0hJUCIsIkNTU19IRUxQVEVYVCIsIkNTU19QQUdJTkFUSU9OIiwiQ0xJQ0tTIiwiTUFUT01PIiwiQkFOTkVSIiwiQkFOTkVSX1VSTCIsImFuYWx5dGljcyIsImNvbnNlbnQiLCJlbmFibGVkIiwibWF0b21vSWQiLCJtYXRvbW9UYWdNYW5hZ2VySWQiLCJyZW5kZXJCYW5uZXIiLCJzcmMiLCJ1cmwiLCJ0aXRsZSIsImNhdGVnb3J5IiwicmVzdWx0cyIsImJhbm5lciIsIm9uQ2xvc2UiLCJoYW5kbGVUcmFjayIsInByb2Nlc3NUcmFjayIsImhlYWRpbmciLCJncm91cCIsInBvcG92ZXIiLCJvcGVuIiwic3R5bGUiLCJoZWFkIiwic2hlZXQiLCJmb3JjZSIsIkNTU19BUFAiLCJDU1NfU1RJQ0tZIiwiQ1NTX1RPR0dMRSIsIkNTU19TSURFQkFSIiwidXNlVHJhbnNpdGlvbiIsInRvZ2dsZUFwcEV4cGFuZGVkIiwiaGFuZGxlQXBwVG9nZ2xlQ2xpY2siLCJzdG9wIiwibGluayIsImNsb3NlU2lkZWJhciIsInNpZGViYXIiLCJNSU5fWSIsIlNDUk9MTF9VUCIsIlNUSUNLIiwiU1RJQ0tfRUwiLCJTVElDS19IIiwiU1RJQ0tfWSIsIlNUVUNLIiwiV0lOX0giLCJXSU5fWSIsImhhbmRsZU11dGF0aW9uIiwic3RpY2t5IiwiaGFuZGxlQXBwU2Nyb2xsIiwiTkVYVF9ZIiwiTkVYVF9VUCIsImdldFN0ZXBzIiwibm93Iiwic2hvdyIsIm9mZnNldCIsInBhZ2VzIiwicGFnaW5hdGlvbiIsImN1cnJlbnQiLCJ0b3RhbCIsInBhZ2UiLCJoYW5kbGVCcmVhZGNydW1ic011dGF0aW9uIiwiYnJlYWRjcnVtYnMiLCJicmVhZGN1bWJzIiwiY3J1bWIiLCJDU1NfRElBTE9HIiwiRElBTE9HUyIsImhhbmRsZU1vZGFsIiwiZGlhbG9nIiwiaGFuZGxlRGlhbG9nQ2xpY2siLCJoYW5kbGVFcnJvc3VtbWFyeUluamVjdCIsImZpcnN0IiwiRElTQUJMRUQiLCJTRUxFQ1RFRCIsIlVIVE1MT3B0aW9uRWxlbWVudCIsIlVIVE1MRGF0YUxpc3RTdHlsZSIsIkxJVkVfVElNRVIiLCJJTlBVVF9ERUJPVU5DRSIsIkVWRU5UU19JTlBVVCIsIlVIVE1MRGF0YUxpc3RFbGVtZW50IiwiZGlzY29ubmVjdElucHV0IiwiX3ByZXYiLCJzZXR1cElucHV0Iiwic2V0RXhwYW5kZWQiLCJfYyIsImlzUG9wb3ZlciIsImlzSW5wdXQiLCJyZWxhdGVkVGFyZ2V0IiwiYWx0S2V5IiwiY3RybEtleSIsInNoaWZ0S2V5IiwibWV0YUtleSIsImlzRXNjYXBlIiwiX3Jvb3QiLCJfaW5wdXQiLCJmaWx0ZXIiLCJ2aXNpYmxlIiwiQ1NTX0ZJRUxEIiwiQ1NTX1ZBTElEQVRJT05TIiwiQ1NTX1ZBTElEQVRJT04iLCJnZXRUZXh0IiwiaGFuZGxlRmllbGRNdXRhdGlvbiIsImZpZWxkcyIsInZhbGlkYXRlIiwiZmllbGQiLCJsYWJlbHMiLCJkZXNjcyIsInZhbGlkcyIsImNvbWJvYm94IiwidmFsaWQiLCJkZXNjIiwicmVuZGVyQ29tYm9ib3giLCJyZW5kZXJDb3VudGVyIiwicmVuZGVyVGV4dGFyZWFTaXplIiwidGV4dGFyZWEiLCJsaW1pdCIsInJlbWFpbmRlciIsIm5leHRJbnZhbGlkIiwicHJldkludmFsaWQiLCJvdmVyIiwidW5kZXIiLCJoYW5kbGVGaWVsZFRvZ2dsZSIsImhhbmRsZUZpZWxkSW5wdXQiLCJoYW5kbGVGaWVsZFZhbGRpYXRpb24iLCJDU1NfRklFTERTRVQiLCJBUklBX0RFU0MiLCJBUklBX0lOVkFMSUQiLCJoYW5kbGVGaWVsZHNldE11dGF0aW9uIiwiZmllbGRzZXRzIiwiZmllbGRzZXQiLCJpbnB1dHMiLCJ2YWxpZElkIiwiQ1NTX0xPR08iLCJoYW5kbGVMb2dvTXV0YXRpb24iLCJsb2dvIiwiaWNvbiIsInN2ZyIsImlzRG90IiwiYmFjayIsIkNTU19QT1BPVkVSIiwiT1BFTl9QT1BPVkVSUyIsImhhbmRsZVBvcG92ZXJUb2dnbGUiLCJuZXdTdGF0ZSIsImlzQ2xvc2luZyIsImlzQ29udGFpbiIsImhhbmRsZVBvcG92ZXJMaW5rQ2xpY2siLCJjbG9zZSIsIkNTU19UQUJMRSIsImhhbmRsZVRhYmxlTXV0YXRpb24iLCJ0YWJsZXMiLCJ0YWJsZSIsInRocyIsInRoIiwidGJvZHkiLCJyb3ciLCJjZWxsIiwiQ1NTX1RPR0dMRUdST1VQIiwiaGFuZGxlVG9nZ2xlZ3JvdXBLZXlkb3duIiwibW92ZSIsIkRFU0NSSUJFREJZIiwiRVNDIiwiTEFCRUxMRURCWSIsIlBPU0lUSU9OX0NTU19QUk9QRVJUWSIsIlRIUk9UVExFX0RFTEFZIiwiVE9PTFRJUCIsIkFOQ0hPUiIsIkxBU1RfQ0FMTCIsIlRIUk9UVExFIiwiaGFuZGxlVG9vbHRpcE1vdmUiLCJ3YWl0IiwiaGFuZGxlVG9vbHRpcE1vdmVUaHJvdHRsZWQiLCJjb250ZW50IiwicG9zaXRpb24iLCJoYWRMYWJlbCIsImhhc0xhYmVsIiwiVUhUTUxEZXRhaWxzU3R5bGUiLCJVSFRNTERldGFpbHNFbGVtZW50IiwiaGlkZSIsInVEZXRhaWxzTGlzdCIsInVEZXRhaWxzIiwic3VtbWFyeSIsImlzU3VtbWFyeSIsIlVIVE1MU3VtbWFyeUVsZW1lbnQiLCJVSFRNTFByb2dyZXNzU3R5bGUiLCJVSFRNTFByb2dyZXNzRWxlbWVudCIsInJvbGVJbWFnZSIsInBlcmNlbnRhZ2UiLCJnZXROdW1iZXIiLCJzZXROdW1iZXIiLCJpc051bWVyaWMiXSwibWFwcGluZ3MiOiJrQ0FBQSxJQUFJQSxHQUFZLE9BQU8sZUFDbkJDLEdBQXNCLE9BQU8sc0JBQzdCQyxHQUFlLE9BQU8sVUFBVSxlQUNoQ0MsR0FBZSxPQUFPLFVBQVUscUJBQ2hDQyxHQUFrQixDQUFDQyxFQUFLQyxFQUFLQyxJQUFVRCxLQUFPRCxFQUFNTCxHQUFVSyxFQUFLQyxFQUFLLENBQUUsV0FBWSxHQUFNLGFBQWMsR0FBTSxTQUFVLEdBQU0sTUFBQUMsQ0FBSyxDQUFFLEVBQUlGLEVBQUlDLENBQUcsRUFBSUMsRUFDdEpDLEdBQWlCLENBQUNDLEVBQUdDLElBQU0sQ0FDN0IsUUFBU0MsS0FBUUQsSUFBTUEsRUFBSSxDQUFBLEdBQ3JCUixHQUFhLEtBQUtRLEVBQUdDLENBQUksR0FDM0JQLEdBQWdCSyxFQUFHRSxFQUFNRCxFQUFFQyxDQUFJLENBQUMsRUFDcEMsR0FBSVYsR0FDRixRQUFTVSxLQUFRVixHQUFvQlMsQ0FBQyxFQUNoQ1AsR0FBYSxLQUFLTyxFQUFHQyxDQUFJLEdBQzNCUCxHQUFnQkssRUFBR0UsRUFBTUQsRUFBRUMsQ0FBSSxDQUFDLEVBRXRDLE9BQU9GLENBQ1QsRUFHSUcsR0FBYSxPQUFPLE9BQVcsS0FBZSxPQUFPLE9BQU8sU0FBYSxLQUFlLE9BQU8sT0FBTyxVQUFjLElBQ3BIQyxHQUFhRCxJQUFjLFdBQVcsS0FBSyxVQUFV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
|
|
32
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtY29tYm9ib3gvZGlzdC91LWNvbWJvYm94LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCIuLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2NvcmUvZGlzdC9mbG9hdGluZy11aS5jb3JlLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5kb20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS9kb20vZGlzdC9mbG9hdGluZy11aS5kb20ubWpzIiwiLi4vZGVzaWduc3lzdGVtL3V0aWxzLnRzIiwiLi4vZGVzaWduc3lzdGVtL2FuYWx5dGljcy9hbmFseXRpY3MudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC10b2dnbGUuanMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9wYWdpbmF0aW9uL3BhZ2luYXRpb24taGVscGVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWJzLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2RpYWxvZy9kaWFsb2ctb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZXJyb3JzdW1tYXJ5L2Vycm9yc3VtbWFyeS1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRhdGFsaXN0L2Rpc3QvdS1kYXRhbGlzdC5qcyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZC9maWVsZC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZHNldC9maWVsZHNldC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9sb2dvL2xvZ28tb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vcG9wb3Zlci9wb3BvdmVyLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RhYmxlL3RhYmxlLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RvZ2dsZWdyb3VwL3RvZ2dsZWdyb3VwLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3Rvb2x0aXAvdG9vbHRpcC1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRldGFpbHMvZGlzdC91LWRldGFpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1wcm9ncmVzcy9kaXN0L3UtcHJvZ3Jlc3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuXG4vLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0ZJUkVGT1ggPSBJU19CUk9XU0VSICYmIC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBGT0NVU19PVVRMSU5FID0gXCJvdXRsaW5lOiAxcHggZG90dGVkOyBvdXRsaW5lOiA1cHggYXV0byBIaWdobGlnaHQ7IG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvclwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChfZXJyKSB7XG4gIH1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgKGRldGFpbCkgPT4gZWxlbWVudC5oYW5kbGVFdmVudCh7IHR5cGU6IFwibXV0YXRpb25cIiwgZGV0YWlsIH0pXG4gICAgKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIG9ic2VydmVycy5zZXQoZWxlbWVudCwgb2JzZXJ2ZXIpO1xuICB9XG59O1xudmFyIGFzQnV0dG9uID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGlzQ2xpY2sgPSBcImtleVwiIGluIGV2ZW50ICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKTtcbiAgaWYgKGlzQ2xpY2spIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChpc0NsaWNrICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBldmVudC50YXJnZXQuY2xpY2soKTtcbiAgcmV0dXJuIGlzQ2xpY2s7XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dDIsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQyKSBlbC50ZXh0Q29udGVudCA9IHRleHQyO1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZ2V0TGFiZWwgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgbGFiZWwgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikgfHwgXCJcIjtcbiAgY29uc3QgbGFiZWxzID0gKChfYTIgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxsZWRieVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkuc3BsaXQoL1xccysvKSkgfHwgW107XG4gIHJldHVybiBbXG4gICAgLi4ubGFiZWxzLm1hcCgoaWQyKSA9PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZDIpKSxcbiAgICAvLyBHZXQgYWxsIGxhYmVsbGVkYnkgZWxlbWVudHNcbiAgICAuLi5BcnJheS5mcm9tKGVsLmxhYmVscyB8fCBbXSlcbiAgICAvLyBHZXQgYWxsIDxsYWJlbD4gZWxlbWVudHNcbiAgXS5yZWR1Y2UoKGFjYywgZWwyKSA9PiB7XG4gICAgdmFyIF9hMztcbiAgICByZXR1cm4gYWNjIHx8ICgoX2EzID0gZWwyID09IG51bGwgPyB2b2lkIDAgOiBlbDIuaW5uZXJUZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnRyaW0oKSkgfHwgXCJcIjtcbiAgfSwgbGFiZWwpO1xufTtcbnZhciBMSVZFO1xudmFyIExJVkVfU1JfRklYID0gMDtcbnZhciBzcGVhayA9ICh0ZXh0MikgPT4ge1xuICBpZiAoIUxJVkUpIHtcbiAgICBMSVZFID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBMSVZFLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gICAgYXR0cihMSVZFLCBcImFyaWEtbGl2ZVwiLCBcImFzc2VydGl2ZVwiKTtcbiAgfVxuICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKExJVkUpO1xuICBpZiAodGV4dDIpIExJVkUudGV4dENvbnRlbnQgPSBgJHt0ZXh0Mn0ke0xJVkVfU1JfRklYKysgJSAyID8gXCJcXHhBMFwiIDogXCJcIn1gO1xufTtcbnZhciBzZXRWYWx1ZSA9IChpbnB1dCwgZGF0YSwgdHlwZSA9IFwiXCIpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSwgZGF0YSwgaW5wdXRUeXBlOiB0eXBlIH07XG4gIGNvbnN0IHByb3RvID0gSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGU7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJiZWZvcmVpbnB1dFwiLCBldmVudCkpO1xuICAoX2IgPSAoX2EyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgXCJ2YWx1ZVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5zZXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKGlucHV0LCBkYXRhKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImlucHV0XCIsIGV2ZW50KSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG59O1xudmFyIElTX1BSRVNTID0gZmFsc2U7XG52YXIgaXNNb3VzZURvd24gPSAoZXZlbnQpID0+IHtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2V1cFwiKSBJU19QUkVTUyA9IGZhbHNlO1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZWRvd25cIikge1xuICAgIElTX1BSRVNTID0gdHJ1ZTtcbiAgICBvbihkb2N1bWVudCwgXCJtb3VzZXVwXCIsIGlzTW91c2VEb3duLCB7IG9uY2U6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIElTX1BSRVNTO1xufTtcbnZhciBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QgPSAoc3R5bGUsIHNsb3QgPSBcIjxzbG90Pjwvc2xvdD5cIikgPT4gYDx0ZW1wbGF0ZSBzaGFkb3dyb290bW9kZT1cIm9wZW5cIj4ke3Nsb3R9PHN0eWxlPiR7c3R5bGV9PC9zdHlsZT48L3RlbXBsYXRlPmA7XG5cbi8vIHUtY29tYm9ib3gudHNcbnZhciBVSFRNTENvbWJvYm94U3R5bGUgPSBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2s7IC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKSB9IC8qIE11c3QgYmUgZGlzcGxheSBibG9jayBpbiBTYWZhcmkgdG8gYWxsb3cgZm9jdXMgaW5zaWRlICovXG46aG9zdCg6bm90KFtkYXRhLW11bHRpcGxlXSkpIDo6c2xvdHRlZChkYXRhKSxcbjpob3N0KFtkYXRhLW11bHRpcGxlPVwiZmFsc2VcIl0pIDo6c2xvdHRlZChkYXRhKSB7IGRpc3BsYXk6IG5vbmUgfSAvKiBIaWRlIGRhdGEgaWYgbm90IG11bHRpcGxlICovXG46OnNsb3R0ZWQoaW5wdXRbaW5wdXRtb2RlPVwibm9uZVwiXSkgeyBvdXRsaW5lOiBub25lIH0gLyogSGlkZSB0ZW1wb3JhcnkgZm91Y3Mgb3V0bGluZSBmbGFzaCAqL1xuOjpzbG90dGVkKGRlbCkgeyB0ZXh0LWRlY29yYXRpb246IG5vbmUgfVxuOjpzbG90dGVkKGRhdGE6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBvaW50ZXItZXZlbnRzOiBub25lIH1cbjo6c2xvdHRlZChkYXRhKTo6YWZ0ZXIgeyBjb250ZW50OiAnXFxcXDAwRDcnOyBjb250ZW50OiAnXFxcXDAwRDcnIC8gJyc7IHBhZGRpbmctaW5saW5lOiAuNWNoOyBwb2ludGVyLWV2ZW50czogYXV0bzsgY3Vyc29yOiBwb2ludGVyIH1cbjo6c2xvdHRlZChkYXRhOmZvY3VzKSB7ICR7Rk9DVVNfT1VUTElORX0gfWA7XG52YXIgVUhUTUxDb21ib2JveFNoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoVUhUTUxDb21ib2JveFN0eWxlKTtcbnZhciBFVkVOVFMgPSBcImJlZm9yZWlucHV0LGJsdXIsZm9jdXMsY2xpY2ssaW5wdXQsa2V5ZG93bixtb3VzZWRvd25cIjtcbnZhciBFVkVOVF9PTkNFID0geyBvbmNlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG52YXIgSVNfRklSRUZPWF9ERVNLVE9QID0gSVNfRklSRUZPWCAmJiAhSVNfQU5EUk9JRDtcbnZhciBJU19NT0JJTEUgPSBJU19BTkRST0lEIHx8IElTX0lPUztcbnZhciBNT0RJRklFRCA9IFwiXFx1MjAwQlwiLnJlcGVhdCg1KTtcbnZhciBGQUxTRSA9IFwiZmFsc2VcIjtcbnZhciBURVhUUyA9IHtcbiAgYWRkZWQ6IFwiQWRkZWRcIixcbiAgZW1wdHk6IFwiTm8gc2VsZWN0ZWRcIixcbiAgZm91bmQ6IFwiTmF2aWdhdGUgbGVmdCB0byBmaW5kICVkIHNlbGVjdGVkXCIsXG4gIGludmFsaWQ6IFwiSW52YWxpZCB2YWx1ZVwiLFxuICBvZjogXCJvZlwiLFxuICByZW1vdmU6IFwiUHJlc3MgdG8gcmVtb3ZlXCIsXG4gIHJlbW92ZWQ6IFwiUmVtb3ZlZFwiXG59O1xudmFyIFVIVE1MQ29tYm9ib3hFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2l0ZW0gPSBcIlwiO1xuICAgIHRoaXMuX3NwZWFrID0gXCJcIjtcbiAgICB0aGlzLl90ZXh0cyA9IF9fc3ByZWFkVmFsdWVzKHt9LCBURVhUUyk7XG4gICAgdGhpcy5fdmFsdWUgPSBcIlwiO1xuICAgIGlmICghdGhpcy5zaGFkb3dSb290KVxuICAgICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAgICAgICAvLyBDb250ZW50IHNsb3RcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIFVIVE1MQ29tYm9ib3hTdHlsZSlcbiAgICAgICk7XG4gIH1cbiAgLy8gTG9jYWxseSBzdG9yZSB2YWx1ZSB0byBzdG9yZSB2YWx1ZSBiZWZvcmUgaW5wdXQtY2xpY2tcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKFRFWFRTKS5tYXAoKGtleSkgPT4gYGRhdGEtc3ItJHtrZXl9YCk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgb24odGhpcywgRVZFTlRTLCB0aGlzLCB0cnVlKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1widmFsdWVcIiwgXCJpZFwiXSxcbiAgICAgIC8vIFJlc3BvbmQgdG8gY2hhbmdlcyBpbiA8ZGF0YT4gdmFsdWUgb3IgY2hhbmdlIG9mIGlkIGZvciA8ZGF0YWxpc3Q+IHRvIHJlY29ubmVjdCB3aXRoIGlucHV0XG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgIC8vIFJlc3BvbmQgdG8gY2hhbmdlcyBpbiA8ZGF0YT4gdGV4dENvbnRlbnRcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KHJlbmRlciwgMCwgdGhpcyk7XG4gICAgc2V0VGltZW91dChzeW5jSW5wdXRWYWx1ZSwgMCwgdGhpcyk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIF8sIHZhbCkge1xuICAgIGNvbnN0IHRleHQyID0gcHJvcC5zcGxpdChcImRhdGEtc3ItXCIpWzFdO1xuICAgIGlmIChURVhUU1t0ZXh0Ml0pIHRoaXMuX3RleHRzW3RleHQyXSA9IHZhbCB8fCBURVhUU1t0ZXh0Ml07XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gICAgb2ZmKHRoaXMsIEVWRU5UUywgdGhpcywgdHJ1ZSk7XG4gICAgdGhpcy5faXRlbXMgPSB0aGlzLl9jbGVhciA9IHRoaXMuX2ZvY3VzID0gdGhpcy5fY29udHJvbCA9IHZvaWQgMDtcbiAgICB0aGlzLl9saXN0ID0gdGhpcy5fb3B0aW9ucyA9IHRoaXMuX3Jvb3QgPSB2b2lkIDA7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJiZWZvcmVpbnB1dFwiKSB0aGlzLl92YWx1ZSA9ICh0YXJnZXQgPT0gbnVsbCA/IHZvaWQgMCA6IHRhcmdldC52YWx1ZSkgfHwgXCJcIjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJibHVyXCIpIG9uQmx1cih0aGlzKTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSBvbkNsaWNrKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJmb2N1c1wiKSBvbkZvY3VzKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJpbnB1dFwiKSBvbklucHV0KHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIG9uS2V5RG93bih0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwibW91c2Vkb3duXCIpIGlzTW91c2VEb3duKGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJtdXRhdGlvblwiKSByZW5kZXIodGhpcywgZXZlbnQpO1xuICB9XG4gIGdldCBtdWx0aXBsZSgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IGF0dHIodGhpcywgXCJkYXRhLW11bHRpcGxlXCIpKSAhPSBudWxsID8gX2EyIDogRkFMU0UpICE9PSBGQUxTRTtcbiAgfVxuICBzZXQgbXVsdGlwbGUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwiZGF0YS1tdWx0aXBsZVwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgY3JlYXRhYmxlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gYXR0cih0aGlzLCBcImRhdGEtY3JlYXRhYmxlXCIpKSAhPSBudWxsID8gX2EyIDogRkFMU0UpICE9PSBGQUxTRTtcbiAgfVxuICBzZXQgY3JlYXRhYmxlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImRhdGEtY3JlYXRhYmxlXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBjb250cm9sKCkge1xuICAgIHZhciBfYTI7XG4gICAgaWYgKCEoKF9hMiA9IHRoaXMuX2NvbnRyb2wpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKVxuICAgICAgdGhpcy5fY29udHJvbCA9IHRoaXMucXVlcnlTZWxlY3RvcihcImlucHV0XCIpO1xuICAgIHJldHVybiB0aGlzLl9jb250cm9sO1xuICB9XG4gIGdldCBsaXN0KCkge1xuICAgIHZhciBfYTI7XG4gICAgaWYgKCEoKF9hMiA9IHRoaXMuX2xpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKVxuICAgICAgdGhpcy5fbGlzdCA9IHRoaXMucXVlcnlTZWxlY3RvcihcInUtZGF0YWxpc3QsZGF0YWxpc3RcIik7XG4gICAgcmV0dXJuIHRoaXMuX2xpc3Q7XG4gIH1cbiAgZ2V0IGNsZWFyKCkge1xuICAgIHZhciBfYTI7XG4gICAgaWYgKCEoKF9hMiA9IHRoaXMuX2NsZWFyKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmlzQ29ubmVjdGVkKSkgdGhpcy5fY2xlYXIgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJkZWxcIik7XG4gICAgcmV0dXJuIHRoaXMuX2NsZWFyO1xuICB9XG4gIGdldCBpdGVtcygpIHtcbiAgICBpZiAoIXRoaXMuX2l0ZW1zKSB0aGlzLl9pdGVtcyA9IHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJkYXRhXCIpO1xuICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgfVxuICBnZXQgb3B0aW9ucygpIHtcbiAgICB2YXIgX2EyLCBfYjtcbiAgICBpZiAoIXRoaXMuX29wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHRhZyA9ICgoX2EyID0gdGhpcy5saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLm5vZGVOYW1lKSA9PT0gXCJVLURBVEFMSVNUXCIgPyBcInUtb3B0aW9uXCIgOiBcIm9wdGlvblwiO1xuICAgICAgdGhpcy5fb3B0aW9ucyA9IChfYiA9IHRoaXMubGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG4gIGdldCB2YWx1ZXMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLml0ZW1zXS5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpO1xuICB9XG59O1xudmFyIHRleHQgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgcmV0dXJuICgoX2EyID0gZWwgPT0gbnVsbCA/IHZvaWQgMCA6IGVsLnRleHRDb250ZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKSkgfHwgXCJcIjtcbn07XG52YXIgaXNEYXRhID0gKGVsKSA9PiBlbCBpbnN0YW5jZW9mIEhUTUxEYXRhRWxlbWVudDtcbnZhciBpc0Rpc2FibGVkID0gKHsgY29udHJvbCB9KSA9PiAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5kaXNhYmxlZCkgfHwgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wucmVhZE9ubHkpIHx8IGZhbHNlO1xudmFyIHJlbmRlciA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF9mb2N1cywgX3RleHRzLCBpdGVtcywgY29udHJvbCwgbGlzdCwgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGlmICghY29udHJvbCB8fCAhbGlzdCkgcmV0dXJuO1xuICBjb25zdCBwcmV2ID0gZ2V0TGFiZWwoY29udHJvbCk7XG4gIGNvbnN0IG5leHQgPSBwcmV2LmVuZHNXaXRoKE1PRElGSUVEKSA/IGF0dHIoY29udHJvbCwgXCJkYXRhLWxhYmVsXCIpIDogcHJldjtcbiAgYXR0cihjb250cm9sLCBcImRhdGEtbGFiZWxcIiwgbmV4dCk7XG4gIGxldCBsYWJlbCA9IGAke25leHR9JHttdWx0aXBsZSA/IGAsICR7aXRlbXMubGVuZ3RoID8gX3RleHRzLmZvdW5kLnJlcGxhY2UoXCIlZFwiLCBgJHtpdGVtcy5sZW5ndGh9YCkgOiBfdGV4dHMuZW1wdHl9YCA6IFwiXCJ9YDtcbiAgY29uc3QgZWRpdHMgPSBbXTtcbiAgZm9yIChjb25zdCB7IGFkZGVkTm9kZXMsIHJlbW92ZWROb2RlcyB9IG9mIChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQuZGV0YWlsKSB8fCBbXSkge1xuICAgIGZvciAoY29uc3QgZWwgb2YgYWRkZWROb2RlcykgaWYgKGlzRGF0YShlbCkpIGVkaXRzLnVuc2hpZnQoZWwpO1xuICAgIGZvciAoY29uc3QgZWwgb2YgcmVtb3ZlZE5vZGVzKSBpZiAoaXNEYXRhKGVsKSkgZWRpdHMucHVzaChlbCk7XG4gIH1cbiAgY29uc3Qgc2hvdWxkQW5ub3VuY2UgPSBtdWx0aXBsZSA/IGVkaXRzLmxlbmd0aCA9PT0gMSA6IGVkaXRzWzBdID09PSBfZm9jdXM7XG4gIGlmIChfZm9jdXMgJiYgc2hvdWxkQW5ub3VuY2UpIHtcbiAgICBjb25zdCBhcmlhRXhwYW5kZWQgPSBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiKTtcbiAgICBjb25zdCBpbnB1dE1vZGUgPSBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIpO1xuICAgIGNvbnN0IG5leHRGb2N1cyA9IGlzRGF0YShfZm9jdXMpID8gY29udHJvbCA6IF9mb2N1cztcbiAgICBjb25zdCBpc1JlbW92ZSA9ICFlZGl0c1swXS5pc0Nvbm5lY3RlZDtcbiAgICBzZWxmLl9zcGVhayA9IGAke190ZXh0c1tpc1JlbW92ZSA/IFwicmVtb3ZlZFwiIDogXCJhZGRlZFwiXX0gJHt0ZXh0KGVkaXRzWzBdKX0sIGA7XG4gICAgaWYgKElTX01PQklMRSB8fCBfZm9jdXMgPT09IGNvbnRyb2wpIHNwZWFrKHNlbGYuX3NwZWFrKTtcbiAgICBpZiAoY29udHJvbCAhPT0gbmV4dEZvY3VzKSB7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiLCBudWxsKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgXCJub25lXCIpO1xuICAgICAgbGFiZWwgPSBcIlxceEEwXCI7XG4gICAgICBjb250cm9sLmZvY3VzKCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIGF0dHIoY29udHJvbCwgXCJhcmlhLWV4cGFuZGVkXCIsIGFyaWFFeHBhbmRlZCk7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIsIGlzUmVtb3ZlID8gXCJub25lXCIgOiBpbnB1dE1vZGUpO1xuICAgICAgKF9hMyA9IG5leHRGb2N1cyA9PSBudWxsID8gdm9pZCAwIDogbmV4dEZvY3VzLmZvY3VzKSA9PSBudWxsID8gdm9pZCAwIDogX2EzLmNhbGwobmV4dEZvY3VzKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgaW5wdXRNb2RlKTtcbiAgICAgIHNlbGYuX3NwZWFrID0gXCJcIjtcbiAgICAgIGlmIChJU19GSVJFRk9YX0RFU0tUT1ApIG9uKHNlbGYsIFwiYmx1clwiLCAoKSA9PiByZW5kZXIoc2VsZiksIEVWRU5UX09OQ0UpO1xuICAgICAgZWxzZSBzZXRUaW1lb3V0KHJlbmRlciwgMTAwLCBzZWxmKTtcbiAgICB9LCAxMDApO1xuICB9XG4gIGxldCBpZHggPSAwO1xuICBjb25zdCBzZWxlY3QgPSBzZWxmLnF1ZXJ5U2VsZWN0b3IoXCJzZWxlY3RcIik7XG4gIGNvbnN0IHJlbW92ZSA9IGlzRGlzYWJsZWQoc2VsZikgPyBcIlwiIDogYCR7X3RleHRzLnJlbW92ZX0sIGA7XG4gIGZvciAoY29uc3QgaXRlbTIgb2YgaXRlbXMpIHtcbiAgICBjb25zdCBvcHRpb24gPSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zW2lkeF07XG4gICAgY29uc3QgbGFiZWwyID0gdGV4dChpdGVtMik7XG4gICAgY29uc3QgdmFsdWUgPSBpdGVtMi52YWx1ZSB8fCBsYWJlbDI7XG4gICAgY29uc3QgYXJpYSA9IGAke3NlbGYuX3NwZWFrfSR7bGFiZWwyfSwgJHtyZW1vdmV9JHsrK2lkeH0gJHtfdGV4dHMub2Z9ICR7aXRlbXMubGVuZ3RofWA7XG4gICAgYXR0cihpdGVtMiwgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIGF0dHIoaXRlbTIsIFwidmFsdWVcIiwgdmFsdWUpO1xuICAgIGF0dHIoaXRlbTIsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICBhdHRyKGl0ZW0yLCBcImFyaWEtbGFiZWxcIiwgYXJpYSk7XG4gICAgaWYgKG9wdGlvbikgT2JqZWN0LmFzc2lnbihvcHRpb24sIHsgdGV4dENvbnRlbnQ6IGxhYmVsMiwgdmFsdWUgfSk7XG4gICAgZWxzZSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5hcHBlbmRDaGlsZChuZXcgT3B0aW9uKGxhYmVsMiwgdmFsdWUsIHRydWUsIHRydWUpKTtcbiAgfVxuICBpZiAoc2VsZWN0KSBhdHRyKHNlbGVjdCwgXCJtdWx0aXBsZVwiLCBtdWx0aXBsZSA/IFwiXCIgOiBudWxsKTtcbiAgZm9yIChjb25zdCBvcHQgb2YgWy4uLihzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zKSB8fCBbXV0uc2xpY2UoaWR4KSkgb3B0LnJlbW92ZSgpO1xuICBpZiAoIW11bHRpcGxlICYmIGlkeCA+IDEpXG4gICAgY29uc29sZS53YXJuKFwidS1jb21ib2JveDogTXVsdGlwbGUgPGRhdGE+IGZvdW5kIGluIHNpbmdsZSBtb2RlLlwiKTtcbiAgYXR0cihsaXN0LCBcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCIsIGAke211bHRpcGxlfWApO1xuICBhdHRyKGNvbnRyb2wsIFwibGlzdFwiLCB1c2VJZChsaXN0KSk7XG4gIGF0dHIoY29udHJvbCwgXCJhcmlhLWxhYmVsXCIsIGAke3NlbGYuX3NwZWFrfSR7bGFiZWx9JHtNT0RJRklFRH1gKTtcbiAgaWYgKGxpc3QuaGFzQXR0cmlidXRlKFwicG9wb3ZlclwiKSkge1xuICAgIGF0dHIoY29udHJvbCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKGxpc3QpKTtcbiAgICBhdHRyKGxpc3QsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcbiAgfVxuICBjb25zdCBpdGVtID0gdGV4dChpdGVtc1swXSk7XG4gIGlmIChpdGVtICE9PSBzZWxmLl9pdGVtKSBzeW5jSW5wdXRWYWx1ZShzZWxmKTtcbiAgc2VsZi5faXRlbSA9IGl0ZW07XG4gIHN5bmNDbGVhcldpdGhJbnB1dChzZWxmKTtcbiAgc3luY09wdGlvbnNXaXRoSXRlbXMoc2VsZik7XG4gIChfYTIgPSBtdXRhdGlvbk9ic2VydmVyKHNlbGYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRha2VSZWNvcmRzKCk7XG59O1xudmFyIHN5bmNDbGVhcldpdGhJbnB1dCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChzZWxmLmNsZWFyKSBhdHRyKHNlbGYuY2xlYXIsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgaWYgKHNlbGYuY2xlYXIpIHNlbGYuY2xlYXIuaGlkZGVuID0gISgoX2EyID0gc2VsZi5jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnZhbHVlKSB8fCBpc0Rpc2FibGVkKHNlbGYpO1xufTtcbnZhciBzeW5jT3B0aW9uc1dpdGhJdGVtcyA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgX3NwZWFrLCBvcHRpb25zID0gW10sIHZhbHVlcyB9ID0gc2VsZjtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gKF9hMiA9IGF0dHIob3B0LCBcInZhbHVlXCIpKSAhPSBudWxsID8gX2EyIDogdGV4dChvcHQpO1xuICAgIGF0dHIob3B0LCBcImFyaWEtbGFiZWxcIiwgX3NwZWFrID8gYCR7X3NwZWFrfSR7dGV4dChvcHQpfWAgOiBudWxsKTtcbiAgICBhdHRyKG9wdCwgXCJzZWxlY3RlZFwiLCB2YWx1ZXMuaW5jbHVkZXModmFsdWUpID8gXCJcIiA6IG51bGwpO1xuICB9XG59O1xudmFyIHN5bmNJbnB1dFZhbHVlID0gKHNlbGYpID0+IHtcbiAgY29uc3QgeyBtdWx0aXBsZSwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gdGV4dChpdGVtc1swXSk7XG4gIGlmICghbXVsdGlwbGUgJiYgY29udHJvbCAmJiB2YWx1ZSAhPT0gY29udHJvbC52YWx1ZSlcbiAgICBzZXRWYWx1ZShjb250cm9sLCB2YWx1ZSwgdmFsdWUgPyBcImluc2VydFRleHRcIiA6IFwiZGVsZXRlQ29udGVudFwiKTtcbn07XG52YXIgZGlzcGF0Y2hNYXRjaCA9IChzZWxmLCBjaGFuZ2UgPSB0cnVlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgX3RleHRzLCBvcHRpb25zID0gW10sIGNyZWF0YWJsZSwgY29udHJvbCwgaXRlbXMsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IHF1ZXJ5ID0gdmFsdWUudG9Mb3dlckNhc2UoKSB8fCBudWxsO1xuICBsZXQgbWF0Y2ggPSBbLi4ub3B0aW9uc10uZmluZChcbiAgICAob3B0KSA9PiAoYXR0cihvcHQsIFwibGFiZWxcIikgfHwgdGV4dChvcHQpKS50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gcXVlcnlcbiAgKTtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogbWF0Y2ggfTtcbiAgaWYgKCFzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiY29tYm9ib3hiZWZvcmVtYXRjaFwiLCBldmVudCkpKVxuICAgIG1hdGNoID0gWy4uLm9wdGlvbnNdLmZpbmQoKG8pID0+IG8uc2VsZWN0ZWQpO1xuICBpZiAoY2hhbmdlKSB7XG4gICAgc3luY09wdGlvbnNXaXRoSXRlbXMoc2VsZik7XG4gICAgaWYgKG1hdGNoKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgbWF0Y2gsIGZhbHNlKTtcbiAgICBpZiAoY3JlYXRhYmxlICYmIHZhbHVlKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgeyB2YWx1ZSB9LCBmYWxzZSk7XG4gICAgaWYgKCFtdWx0aXBsZSAmJiAhdmFsdWUgJiYgaXRlbXNbMF0pIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1zWzBdKTtcbiAgICBlbHNlIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICAgIHJldHVybiBzcGVhayhfdGV4dHMuaW52YWxpZCk7XG4gIH1cbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykgb3B0LnNlbGVjdGVkID0gb3B0ID09PSBtYXRjaDtcbn07XG52YXIgZGlzcGF0Y2hDaGFuZ2UgPSAoc2VsZiwgaXRlbSwgcmVtb3ZhYmxlID0gdHJ1ZSkgPT4ge1xuICBjb25zdCB7IGNvbnRyb2wsIGl0ZW1zLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgYWRkID0gY3JlYXRlRWxlbWVudChcImRhdGFcIiwgaXRlbS5sYWJlbCB8fCBpdGVtLnZhbHVlLCB7XG4gICAgdmFsdWU6IGl0ZW0udmFsdWVcbiAgfSk7XG4gIGNvbnN0IHJlbW92ZSA9IFsuLi5pdGVtc10uZmluZCgoaSkgPT4gaS52YWx1ZSA9PT0gaXRlbS52YWx1ZSk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IHJlbW92ZSB8fCBhZGQgfTtcbiAgY29uc3Qgc2tpcCA9IHJlbW92ZSAmJiAhcmVtb3ZhYmxlO1xuICBpZiAoc2tpcCkgcmV0dXJuIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICBpZiAoc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImNvbWJvYm94YmVmb3Jlc2VsZWN0XCIsIGV2ZW50KSkpIHtcbiAgICBpZiAoIW11bHRpcGxlKSBmb3IgKGNvbnN0IGl0ZW0yIG9mIFsuLi5pdGVtc10pIGl0ZW0yLnJlbW92ZSgpO1xuICAgIGlmIChyZW1vdmUpIHJlbW92ZS5yZW1vdmUoKTtcbiAgICBlbHNlIGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYmVmb3JlYmVnaW5cIiwgYWRkKTtcbiAgICBzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiY29tYm9ib3hhZnRlcnNlbGVjdFwiLCBldmVudCkpO1xuICB9XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgeyB0YXJnZXQgfSkgPT4ge1xuICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHNlbGYuX2ZvY3VzID0gdGFyZ2V0O1xuICBzcGVhaygpO1xufTtcbnZhciBvbkJsdXIgPSAoc2VsZikgPT4gaXNNb3VzZURvd24oKSB8fCBzZXRUaW1lb3V0KG9uQmx1cnJlZCwgMCwgc2VsZik7XG52YXIgb25CbHVycmVkID0gKHNlbGYpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9mb2N1cyB8fCBzZWxmLmNvbnRhaW5zKChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpKSByZXR1cm47XG4gIGlmICghc2VsZi5tdWx0aXBsZSkgZGlzcGF0Y2hNYXRjaChzZWxmKTtcbiAgc2VsZi5fZm9jdXMgPSB2b2lkIDA7XG59O1xudmFyIG9uQ2xpY2sgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgY29uc3QgeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5LCB0YXJnZXQgfSA9IGV2ZW50O1xuICBjb25zdCB7IGNsZWFyLCBjb250cm9sLCBpdGVtcyB9ID0gc2VsZjtcbiAgaWYgKGNsZWFyID09IG51bGwgPyB2b2lkIDAgOiBjbGVhci5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgaWYgKGNvbnRyb2wpIHNldFZhbHVlKGNvbnRyb2wsIFwiXCIsIFwiZGVsZXRlQ29udGVudEJhY2t3YXJkXCIpO1xuICAgIHJldHVybiBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCk7XG4gIH1cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKGl0ZW0uY29udGFpbnModGFyZ2V0KSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW0pO1xuICAgIGlmICh5ID49IHRvcCAmJiB5IDw9IGJvdHRvbSAmJiB4ID49IGxlZnQgJiYgeCA8PSByaWdodCkgcmV0dXJuIGl0ZW0uZm9jdXMoKTtcbiAgfVxuICBpZiAodGFyZ2V0ID09PSBzZWxmKSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCk7XG59O1xudmFyIG9uSW5wdXQgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgeyBvcHRpb25zID0gW10sIGNvbnRyb2wsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IGlzQ2xpY2sgPSBldmVudCBpbnN0YW5jZW9mIElucHV0RXZlbnQgPyAhZXZlbnQuaW5wdXRUeXBlIHx8IGV2ZW50LmlucHV0VHlwZSA9PT0gXCJpbnNlcnRSZXBsYWNlbWVudFRleHRcIiA6ICEhdmFsdWU7XG4gIGlmIChpc0NsaWNrKSB7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGNvbnRyb2wpIGNvbnRyb2wudmFsdWUgPSBzZWxmLl92YWx1ZTtcbiAgICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKVxuICAgICAgaWYgKG9wdC52YWx1ZSAmJiBvcHQudmFsdWUgPT09IHZhbHVlKVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgb3B0LCBtdWx0aXBsZSk7XG4gIH0gZWxzZSBpZiAoIW11bHRpcGxlKSBkaXNwYXRjaE1hdGNoKHNlbGYsIGZhbHNlKTtcbiAgc3luY0NsZWFyV2l0aElucHV0KHNlbGYpO1xufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkpIHJldHVybjtcbiAgY29uc3QgeyBjbGVhciwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGNvbnN0IHsga2V5LCByZXBlYXQsIHRhcmdldCB9ID0gZXZlbnQ7XG4gIGNvbnN0IGlzQ29udHJvbCA9IGNvbnRyb2wgJiYgY29udHJvbCA9PT0gdGFyZ2V0O1xuICBjb25zdCBpblRleHQgPSBpc0NvbnRyb2wgJiYgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuc2VsZWN0aW9uRW5kKTtcbiAgbGV0IGluZGV4ID0gaXNDb250cm9sID8gaXRlbXMubGVuZ3RoIDogWy4uLml0ZW1zXS5pbmRleE9mKHRhcmdldCk7XG4gIGlmIChpc0NvbnRyb2wgJiYga2V5ID09PSBcIlRhYlwiICYmIGNsZWFyICYmICFjbGVhci5oaWRkZW4pIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNsZWFyLnRhYkluZGV4ID0gLTE7XG4gICAgY2xlYXIuZm9jdXMoKTtcbiAgICBvbihjbGVhciwgXCJibHVyXCIsICgpID0+IGF0dHIoY2xlYXIsIFwidGFiaW5kZXhcIiwgbnVsbCksIEVWRU5UX09OQ0UpO1xuICB9XG4gIGlmICghaXNDb250cm9sICYmIGFzQnV0dG9uKGV2ZW50KSB8fCBpbmRleCA9PT0gLTEpIHJldHVybjtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIgJiYgIWlzQ29udHJvbCkgaW5kZXggKz0gMTtcbiAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93TGVmdFwiICYmICFpblRleHQpIGluZGV4IC09IDE7XG4gIGVsc2UgaWYgKGtleSA9PT0gXCJFbnRlclwiICYmIGlzQ29udHJvbCkge1xuICAgIGNvbnN0IGZvcm0gPSBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiKTtcbiAgICBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiLCBcIiNcIik7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IGF0dHIoY29udHJvbCwgXCJmb3JtXCIsIGZvcm0pKTtcbiAgICByZXR1cm4gZGlzcGF0Y2hNYXRjaChzZWxmKTtcbiAgfSBlbHNlIGlmICgoa2V5ID09PSBcIkJhY2tzcGFjZVwiIHx8IGtleSA9PT0gXCJEZWxldGVcIikgJiYgIWluVGV4dCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCFyZXBlYXQgJiYgaXRlbXNbaW5kZXhdKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgaXRlbXNbaW5kZXhdKTtcbiAgICBpZiAoaXNDb250cm9sKSBpbmRleCAtPSAxO1xuICB9IGVsc2UgcmV0dXJuIGlzQ29udHJvbCB8fCAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpKTtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgKF9hMiA9IGl0ZW1zW01hdGgubWF4KDAsIGluZGV4KV0gfHwgY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtY29tYm9ib3hcIiwgVUhUTUxDb21ib2JveEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTENvbWJvYm94RWxlbWVudCwgVUhUTUxDb21ib2JveFNoYWRvd1Jvb3QsIFVIVE1MQ29tYm9ib3hTdHlsZSB9O1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgU0FGRV9MQUJFTExFREJZID0gYCR7SVNfQU5EUk9JRCA/IFwiZGF0YVwiIDogXCJhcmlhXCJ9LWxhYmVsbGVkYnlgO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuc2hhZG93Um9vdCB8fCBlbGVtZW50LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gIC8vIFVubmFtZWQgc2xvdCBkb2VzIGF1dG9tYXRpY2FsbHkgcmVuZGVyIGFsbCB0b3AgZWxlbWVudCBub2Rlc1xuICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgY3NzKVxuKTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoX2Vycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZGVjbGFyYXRpdmVTaGFkb3dSb290ID0gKHN0eWxlLCBzbG90ID0gXCI8c2xvdD48L3Nsb3Q+XCIpID0+IGA8dGVtcGxhdGUgc2hhZG93cm9vdG1vZGU9XCJvcGVuXCI+JHtzbG90fTxzdHlsZT4ke3N0eWxlfTwvc3R5bGU+PC90ZW1wbGF0ZT5gO1xuXG4vLyB1LXRhYnMudHNcbnZhciBVSFRNTFRhYnNTdHlsZSA9IERJU1BMQVlfQkxPQ0s7XG52YXIgVUhUTUxUYWJMaXN0U3R5bGUgPSBESVNQTEFZX0JMT0NLO1xudmFyIFVIVE1MVGFiUGFuZWxTdHlsZSA9IERJU1BMQVlfQkxPQ0s7XG52YXIgVUhUTUxUYWJTdHlsZSA9ICc6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGN1cnNvcjogcG9pbnRlciB9Omhvc3QoW2FyaWEtZGlzYWJsZWQ9XCJ0cnVlXCJdKSB7IGN1cnNvcjogZGVmYXVsdCB9JztcbnZhciBVSFRNTFRhYnNTaGFkb3dSb290ID0gZGVjbGFyYXRpdmVTaGFkb3dSb290KFVIVE1MVGFic1N0eWxlKTtcbnZhciBVSFRNTFRhYkxpc3RTaGFkb3dSb290ID0gZGVjbGFyYXRpdmVTaGFkb3dSb290KFVIVE1MVGFiTGlzdFN0eWxlKTtcbnZhciBVSFRNTFRhYlNoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoVUhUTUxUYWJTdHlsZSk7XG52YXIgVUhUTUxUYWJQYW5lbFNoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoVUhUTUxUYWJQYW5lbFN0eWxlKTtcbnZhciBBUklBX0NPTlRST0xTID0gXCJhcmlhLWNvbnRyb2xzXCI7XG52YXIgQVJJQV9TRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xudmFyIFVIVE1MVGFic0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgVUhUTUxUYWJzU3R5bGUpO1xuICB9XG4gIGdldCB0YWJMaXN0KCkge1xuICAgIHJldHVybiBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYmxpc3RcIiwgdGhpcylbMF0gfHwgbnVsbDtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFiXCIsIHRoaXMpO1xuICB9XG4gIGdldCBwYW5lbHMoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFicGFuZWxcIiwgdGhpcyk7XG4gIH1cbn07XG52YXIgVUhUTUxUYWJMaXN0RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBVSFRNTFRhYkxpc3RTdHlsZSk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJ0YWJsaXN0XCIpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoKSB0aGlzLmhhbmRsZUV2ZW50KCk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgb2ZmKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIGZhbHNlKTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGlmICghZXZlbnQgfHwgZXZlbnQudHlwZSA9PT0gXCJtdXRhdGlvblwiKSB7XG4gICAgICBjb25zdCB0YWIgPSB0aGlzLnRhYnNbTWF0aC5tYXgodGhpcy5zZWxlY3RlZEluZGV4LCAwKV07XG4gICAgICByZXR1cm4gdGFiID09IG51bGwgPyB2b2lkIDAgOiB0YWIuc2V0QXR0cmlidXRlKEFSSUFfU0VMRUNURUQsIFwidHJ1ZVwiKTtcbiAgICB9XG4gICAgY29uc3QgeyBrZXkgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHRhYnMgPSBbLi4udGhpcy50YWJzXTtcbiAgICBjb25zdCBwcmV2ID0gdGFicy5maW5kSW5kZXgoKHRhYikgPT4gdGFiLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpO1xuICAgIGxldCBuZXh0ID0gcHJldjtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCBwcmV2ID09PSAtMSkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIpIHNldFNlbGVjdGVkKHRhYnNbcHJldl0pO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIiAmJiAhYXNCdXR0b24oZXZlbnQpKSB7XG4gICAgICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiIHx8IGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiArIDEpICUgdGFicy5sZW5ndGg7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiQXJyb3dVcFwiIHx8IGtleSA9PT0gXCJBcnJvd0xlZnRcIilcbiAgICAgICAgbmV4dCA9IChwcmV2IHx8IHRhYnMubGVuZ3RoKSAtIDE7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiRW5kXCIpIG5leHQgPSB0YWJzLmxlbmd0aCAtIDE7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiSG9tZVwiKSBuZXh0ID0gMDtcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJUYWJcIikgbmV4dCA9IGdldFNlbGVjdGVkSW5kZXgodGFicyk7XG4gICAgICBlbHNlIHJldHVybjtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0YWJzW3ByZXZdLnRhYkluZGV4ID0gLTE7XG4gICAgICAgIHRhYnNbbmV4dF0udGFiSW5kZXggPSAwO1xuICAgICAgfSk7XG4gICAgICBpZiAoa2V5ICE9PSBcIlRhYlwiKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRhYnNbbmV4dF0uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpO1xuICB9XG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICBzZXRTZWxlY3RlZCh0aGlzLnRhYnNbaW5kZXhdKTtcbiAgfVxufTtcbnZhciBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG52YXIgVUhUTUxUYWJFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiaWRcIiwgQVJJQV9TRUxFQ1RFRCwgQVJJQV9DT05UUk9MU107XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBVSFRNTFRhYlN0eWxlKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcInRhYlwiKTtcbiAgICB0aGlzLnRhYkluZGV4ID0gdGhpcy5zZWxlY3RlZCA/IDAgOiAtMTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFTS0lQX0FUVFJfQ0hBTkdFICYmIHRoaXMuc2VsZWN0ZWQgJiYgdGhpcy50YWJMaXN0KSB7XG4gICAgICBTS0lQX0FUVFJfQ0hBTkdFID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHRhYnMgPSBbLi4udGhpcy50YWJMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKV07XG4gICAgICBjb25zdCBwYW5lbHMgPSBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYnBhbmVsXCIsIHRoaXMudGFic0VsZW1lbnQgfHwgdGhpcyk7XG4gICAgICBjb25zdCBuZXh0UGFuZWwgPSBnZXRQYW5lbCh0aGlzLCBwYW5lbHNbdGFicy5pbmRleE9mKHRoaXMpXSk7XG4gICAgICBpZiAobmV4dFBhbmVsKSBhdHRyKG5leHRQYW5lbCwgU0FGRV9MQUJFTExFREJZLCB1c2VJZCh0aGlzKSk7XG4gICAgICB0YWJzLmZvckVhY2goKHRhYiwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSBnZXRQYW5lbCh0YWIsIHBhbmVsc1tpbmRleF0pO1xuICAgICAgICB0YWIudGFiSW5kZXggPSB0YWIgPT09IHRoaXMgPyAwIDogLTE7XG4gICAgICAgIGF0dHIodGFiLCBBUklBX1NFTEVDVEVELCBgJHt0YWIgPT09IHRoaXN9YCk7XG4gICAgICAgIGF0dHIodGFiLCBBUklBX0NPTlRST0xTLCAocGFuZWwgPT0gbnVsbCA/IHZvaWQgMCA6IHBhbmVsLmlkKSB8fCBudWxsKTtcbiAgICAgICAgaWYgKHBhbmVsKSBwYW5lbC5oaWRkZW4gPSBwYW5lbCAhPT0gbmV4dFBhbmVsO1xuICAgICAgfSk7XG4gICAgICBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJMaXN0KCkge1xuICAgIGNvbnN0IHRhYmxpc3QgPSB0aGlzLnBhcmVudEVsZW1lbnQ7XG4gICAgcmV0dXJuICh0YWJsaXN0ID09IG51bGwgPyB2b2lkIDAgOiB0YWJsaXN0Lm5vZGVOYW1lKSA9PT0gXCJVLVRBQkxJU1RcIiA/IHRhYmxpc3QgOiBudWxsO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBBUklBX1NFTEVDVEVEKSA9PT0gXCJ0cnVlXCI7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBBUklBX1NFTEVDVEVELCBgJHshIXZhbHVlfWApO1xuICB9XG4gIC8qKiBSZXRyaWV2ZXMgdGhlIG9yZGluYWwgcG9zaXRpb24gb2YgYW4gdGFiIGluIGEgdGFibGlzdC4gKi9cbiAgZ2V0IGluZGV4KCkge1xuICAgIGNvbnN0IHRhYkxpc3QgPSB0aGlzLnRhYkxpc3Q7XG4gICAgcmV0dXJuIHRhYkxpc3QgPyBbLi4udGFiTGlzdC5xdWVyeVNlbGVjdG9yQWxsKFwidS10YWJcIildLmluZGV4T2YodGhpcykgOiAwO1xuICB9XG4gIGdldCBwYW5lbCgpIHtcbiAgICByZXR1cm4gZ2V0UGFuZWwodGhpcyk7XG4gIH1cbn07XG52YXIgVUhUTUxUYWJQYW5lbEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJoaWRkZW5cIl07XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBVSFRNTFRhYlBhbmVsU3R5bGUpO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFicGFuZWxcIik7XG4gICAgdGhpcy5oaWRkZW4gPSBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicykgPT09IC0xO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGNvbnN0IGhpZGRlbiA9IHRoaXMuaGlkZGVuO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWhpZGRlblwiLCBgJHtoaWRkZW59YCk7XG4gICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIGhpZGRlbiB8fCBpc0ZvY3VzYWJsZSh0aGlzLmZpcnN0Q2hpbGQpID8gbnVsbCA6IFwiMFwiKTtcbiAgfVxuICBnZXQgdGFic0VsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcInUtdGFic1wiKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICBjb25zdCBjc3MgPSBgdS10YWJbJHtBUklBX0NPTlRST0xTfT1cIiR7dGhpcy5pZH1cIl1gO1xuICAgIHJldHVybiBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoY3NzKTtcbiAgfVxufTtcbnZhciBxdWVyeVdpdGhvdXROZXN0ZWQgPSAodGFnLCBzZWxmKSA9PiBzZWxmLnF1ZXJ5U2VsZWN0b3JBbGwoYCR7dGFnfTpub3QoOnNjb3BlIHUtdGFicGFuZWwgJHt0YWd9KWApO1xudmFyIGdldFBhbmVsID0gKHRhYiwgcGFuZWwpID0+IHtcbiAgY29uc3QgaWQyID0gYXR0cih0YWIsIEFSSUFfQ09OVFJPTFMpIHx8IHVzZUlkKHBhbmVsKTtcbiAgY29uc3QgZWwgPSBnZXRSb290KHRhYikuZ2V0RWxlbWVudEJ5SWQoaWQyKTtcbiAgcmV0dXJuIChlbCA9PSBudWxsID8gdm9pZCAwIDogZWwubm9kZU5hbWUpID09PSBcIlUtVEFCUEFORUxcIiA/IGVsIDogbnVsbDtcbn07XG52YXIgZ2V0U2VsZWN0ZWRJbmRleCA9ICh0YWJzKSA9PiBbLi4udGFic10uZmluZEluZGV4KCh0YWIpID0+IGF0dHIodGFiLCBBUklBX1NFTEVDVEVEKSA9PT0gXCJ0cnVlXCIpO1xudmFyIHNldFNlbGVjdGVkID0gKHRhYikgPT4gdGFiICYmIGF0dHIodGFiLCBcImFyaWEtZGlzYWJsZWRcIikgIT09IFwidHJ1ZVwiICYmIGF0dHIodGFiLCBcImFyaWEtc2VsZWN0ZWRcIiwgXCJ0cnVlXCIpO1xudmFyIGlzRm9jdXNhYmxlID0gKGVsKSA9PiBlbCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgIWVsLm1hdGNoZXMoJzpkaXNhYmxlZCxbdGFiaW5kZXhePVwiLVwiXScpICYmIGVsLm1hdGNoZXMoXG4gIGBbY29udGVudGVkaXRhYmxlXSxbY29udHJvbHNdLFtocmVmXSxbdGFiaW5kZXhdLGlucHV0Om5vdChbdHlwZT1cImhpZGRlblwiXSksc2VsZWN0LHRleHRhcmVhLGJ1dHRvbixzdW1tYXJ5LGlmcmFtZWBcbik7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYnNcIiwgVUhUTUxUYWJzRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYmxpc3RcIiwgVUhUTUxUYWJMaXN0RWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYlwiLCBVSFRNTFRhYkVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJwYW5lbFwiLCBVSFRNTFRhYlBhbmVsRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MVGFiRWxlbWVudCwgVUhUTUxUYWJMaXN0RWxlbWVudCwgVUhUTUxUYWJMaXN0U2hhZG93Um9vdCwgVUhUTUxUYWJMaXN0U3R5bGUsIFVIVE1MVGFiUGFuZWxFbGVtZW50LCBVSFRNTFRhYlBhbmVsU2hhZG93Um9vdCwgVUhUTUxUYWJQYW5lbFN0eWxlLCBVSFRNTFRhYlNoYWRvd1Jvb3QsIFVIVE1MVGFiU3R5bGUsIFVIVE1MVGFic0VsZW1lbnQsIFVIVE1MVGFic1NoYWRvd1Jvb3QsIFVIVE1MVGFic1N0eWxlIH07XG4iLCIvKipcbiAqIEN1c3RvbSBwb3NpdGlvbmluZyByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy92aXJ0dWFsLWVsZW1lbnRzXG4gKi9cblxuY29uc3Qgc2lkZXMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddO1xuY29uc3QgYWxpZ25tZW50cyA9IFsnc3RhcnQnLCAnZW5kJ107XG5jb25zdCBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL3NpZGVzLnJlZHVjZSgoYWNjLCBzaWRlKSA9PiBhY2MuY29uY2F0KHNpZGUsIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMF0sIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMV0pLCBbXSk7XG5jb25zdCBtaW4gPSBNYXRoLm1pbjtcbmNvbnN0IG1heCA9IE1hdGgubWF4O1xuY29uc3Qgcm91bmQgPSBNYXRoLnJvdW5kO1xuY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yO1xuY29uc3QgY3JlYXRlQ29vcmRzID0gdiA9PiAoe1xuICB4OiB2LFxuICB5OiB2XG59KTtcbmNvbnN0IG9wcG9zaXRlU2lkZU1hcCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmNvbnN0IG9wcG9zaXRlQWxpZ25tZW50TWFwID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmZ1bmN0aW9uIGNsYW1wKHN0YXJ0LCB2YWx1ZSwgZW5kKSB7XG4gIHJldHVybiBtYXgoc3RhcnQsIG1pbih2YWx1ZSwgZW5kKSk7XG59XG5mdW5jdGlvbiBldmFsdWF0ZSh2YWx1ZSwgcGFyYW0pIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKHBhcmFtKSA6IHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0U2lkZShwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QXhpc0xlbmd0aChheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG59XG5jb25zdCB5QXhpc1NpZGVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWyd0b3AnLCAnYm90dG9tJ10pO1xuZnVuY3Rpb24gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSB7XG4gIHJldHVybiB5QXhpc1NpZGVzLmhhcyhnZXRTaWRlKHBsYWNlbWVudCkpID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGdldE9wcG9zaXRlQXhpcyhnZXRTaWRlQXhpcyhwbGFjZW1lbnQpKTtcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudFNpZGVzKHBsYWNlbWVudCwgcmVjdHMsIHJ0bCkge1xuICBpZiAocnRsID09PSB2b2lkIDApIHtcbiAgICBydGwgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChhbGlnbm1lbnRBeGlzKTtcbiAgbGV0IG1haW5BbGlnbm1lbnRTaWRlID0gYWxpZ25tZW50QXhpcyA9PT0gJ3gnID8gYWxpZ25tZW50ID09PSAocnRsID8gJ2VuZCcgOiAnc3RhcnQnKSA/ICdyaWdodCcgOiAnbGVmdCcgOiBhbGlnbm1lbnQgPT09ICdzdGFydCcgPyAnYm90dG9tJyA6ICd0b3AnO1xuICBpZiAocmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gPiByZWN0cy5mbG9hdGluZ1tsZW5ndGhdKSB7XG4gICAgbWFpbkFsaWdubWVudFNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluQWxpZ25tZW50U2lkZSk7XG4gIH1cbiAgcmV0dXJuIFttYWluQWxpZ25tZW50U2lkZSwgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpbkFsaWdubWVudFNpZGUpXTtcbn1cbmZ1bmN0aW9uIGdldEV4cGFuZGVkUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgY29uc3Qgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGFsaWdubWVudCA9PiBvcHBvc2l0ZUFsaWdubWVudE1hcFthbGlnbm1lbnRdKTtcbn1cbmNvbnN0IGxyUGxhY2VtZW50ID0gWydsZWZ0JywgJ3JpZ2h0J107XG5jb25zdCBybFBsYWNlbWVudCA9IFsncmlnaHQnLCAnbGVmdCddO1xuY29uc3QgdGJQbGFjZW1lbnQgPSBbJ3RvcCcsICdib3R0b20nXTtcbmNvbnN0IGJ0UGxhY2VtZW50ID0gWydib3R0b20nLCAndG9wJ107XG5mdW5jdGlvbiBnZXRTaWRlTGlzdChzaWRlLCBpc1N0YXJ0LCBydGwpIHtcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgaWYgKHJ0bCkgcmV0dXJuIGlzU3RhcnQgPyBybFBsYWNlbWVudCA6IGxyUGxhY2VtZW50O1xuICAgICAgcmV0dXJuIGlzU3RhcnQgPyBsclBsYWNlbWVudCA6IHJsUGxhY2VtZW50O1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiBpc1N0YXJ0ID8gdGJQbGFjZW1lbnQgOiBidFBsYWNlbWVudDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFtdO1xuICB9XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKHBsYWNlbWVudCwgZmxpcEFsaWdubWVudCwgZGlyZWN0aW9uLCBydGwpIHtcbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGxldCBsaXN0ID0gZ2V0U2lkZUxpc3QoZ2V0U2lkZShwbGFjZW1lbnQpLCBkaXJlY3Rpb24gPT09ICdzdGFydCcsIHJ0bCk7XG4gIGlmIChhbGlnbm1lbnQpIHtcbiAgICBsaXN0ID0gbGlzdC5tYXAoc2lkZSA9PiBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnQpO1xuICAgIGlmIChmbGlwQWxpZ25tZW50KSB7XG4gICAgICBsaXN0ID0gbGlzdC5jb25jYXQobGlzdC5tYXAoZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxpc3Q7XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgc2lkZSA9PiBvcHBvc2l0ZVNpZGVNYXBbc2lkZV0pO1xufVxuZnVuY3Rpb24gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICAgIC4uLnBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhZGRpbmdPYmplY3QocGFkZGluZykge1xuICByZXR1cm4gdHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSA6IHtcbiAgICB0b3A6IHBhZGRpbmcsXG4gICAgcmlnaHQ6IHBhZGRpbmcsXG4gICAgYm90dG9tOiBwYWRkaW5nLFxuICAgIGxlZnQ6IHBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gcmVjdDtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIGxlZnQ6IHgsXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmV4cG9ydCB7IGFsaWdubWVudHMsIGNsYW1wLCBjcmVhdGVDb29yZHMsIGV2YWx1YXRlLCBleHBhbmRQYWRkaW5nT2JqZWN0LCBmbG9vciwgZ2V0QWxpZ25tZW50LCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0QXhpc0xlbmd0aCwgZ2V0RXhwYW5kZWRQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBeGlzLCBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZVBsYWNlbWVudCwgZ2V0UGFkZGluZ09iamVjdCwgZ2V0U2lkZSwgZ2V0U2lkZUF4aXMsIG1heCwgbWluLCBwbGFjZW1lbnRzLCByZWN0VG9DbGllbnRSZWN0LCByb3VuZCwgc2lkZXMgfTtcbiIsImltcG9ydCB7IGdldFNpZGVBeGlzLCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBeGlzTGVuZ3RoLCBnZXRTaWRlLCBnZXRBbGlnbm1lbnQsIGV2YWx1YXRlLCBnZXRQYWRkaW5nT2JqZWN0LCByZWN0VG9DbGllbnRSZWN0LCBtaW4sIGNsYW1wLCBwbGFjZW1lbnRzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQsIGdldE9wcG9zaXRlUGxhY2VtZW50LCBnZXRFeHBhbmRlZFBsYWNlbWVudHMsIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMsIHNpZGVzLCBtYXgsIGdldE9wcG9zaXRlQXhpcyB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5leHBvcnQgeyByZWN0VG9DbGllbnRSZWN0IH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcblxuZnVuY3Rpb24gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQoX3JlZiwgcGxhY2VtZW50LCBydGwpIHtcbiAgbGV0IHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmdcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IHNpZGVBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25MZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGFsaWdubWVudEF4aXMpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBpc1ZlcnRpY2FsID0gc2lkZUF4aXMgPT09ICd5JztcbiAgY29uc3QgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGZsb2F0aW5nLndpZHRoIC8gMjtcbiAgY29uc3QgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBmbG9hdGluZy5oZWlnaHQgLyAyO1xuICBjb25zdCBjb21tb25BbGlnbiA9IHJlZmVyZW5jZVthbGlnbkxlbmd0aF0gLyAyIC0gZmxvYXRpbmdbYWxpZ25MZW5ndGhdIC8gMjtcbiAgbGV0IGNvb3JkcztcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBmbG9hdGluZy5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54IC0gZmxvYXRpbmcud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cbiAgc3dpdGNoIChnZXRBbGlnbm1lbnQocGxhY2VtZW50KSkge1xuICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgIGNvb3Jkc1thbGlnbm1lbnRBeGlzXSAtPSBjb21tb25BbGlnbiAqIChydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmQnOlxuICAgICAgY29vcmRzW2FsaWdubWVudEF4aXNdICs9IGNvbW1vbkFsaWduICogKHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBjb29yZHM7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICpcbiAqIFRoaXMgZXhwb3J0IGRvZXMgbm90IGhhdmUgYW55IGBwbGF0Zm9ybWAgaW50ZXJmYWNlIGxvZ2ljLiBZb3Ugd2lsbCBuZWVkIHRvXG4gKiB3cml0ZSBvbmUgZm9yIHRoZSBwbGF0Zm9ybSB5b3UgYXJlIHVzaW5nIEZsb2F0aW5nIFVJIHdpdGguXG4gKi9cbmNvbnN0IGNvbXB1dGVQb3NpdGlvbiA9IGFzeW5jIChyZWZlcmVuY2UsIGZsb2F0aW5nLCBjb25maWcpID0+IHtcbiAgY29uc3Qge1xuICAgIHBsYWNlbWVudCA9ICdib3R0b20nLFxuICAgIHN0cmF0ZWd5ID0gJ2Fic29sdXRlJyxcbiAgICBtaWRkbGV3YXJlID0gW10sXG4gICAgcGxhdGZvcm1cbiAgfSA9IGNvbmZpZztcbiAgY29uc3QgdmFsaWRNaWRkbGV3YXJlID0gbWlkZGxld2FyZS5maWx0ZXIoQm9vbGVhbik7XG4gIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZmxvYXRpbmcpKTtcbiAgbGV0IHJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmcsXG4gICAgc3RyYXRlZ3lcbiAgfSk7XG4gIGxldCB7XG4gICAgeCxcbiAgICB5XG4gIH0gPSBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChyZWN0cywgcGxhY2VtZW50LCBydGwpO1xuICBsZXQgc3RhdGVmdWxQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gIGxldCBtaWRkbGV3YXJlRGF0YSA9IHt9O1xuICBsZXQgcmVzZXRDb3VudCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsaWRNaWRkbGV3YXJlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIGZuXG4gICAgfSA9IHZhbGlkTWlkZGxld2FyZVtpXTtcbiAgICBjb25zdCB7XG4gICAgICB4OiBuZXh0WCxcbiAgICAgIHk6IG5leHRZLFxuICAgICAgZGF0YSxcbiAgICAgIHJlc2V0XG4gICAgfSA9IGF3YWl0IGZuKHtcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgaW5pdGlhbFBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICAgIHN0cmF0ZWd5LFxuICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICBmbG9hdGluZ1xuICAgICAgfVxuICAgIH0pO1xuICAgIHggPSBuZXh0WCAhPSBudWxsID8gbmV4dFggOiB4O1xuICAgIHkgPSBuZXh0WSAhPSBudWxsID8gbmV4dFkgOiB5O1xuICAgIG1pZGRsZXdhcmVEYXRhID0ge1xuICAgICAgLi4ubWlkZGxld2FyZURhdGEsXG4gICAgICBbbmFtZV06IHtcbiAgICAgICAgLi4ubWlkZGxld2FyZURhdGFbbmFtZV0sXG4gICAgICAgIC4uLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChyZXNldCAmJiByZXNldENvdW50IDw9IDUwKSB7XG4gICAgICByZXNldENvdW50Kys7XG4gICAgICBpZiAodHlwZW9mIHJlc2V0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAocmVzZXQucGxhY2VtZW50KSB7XG4gICAgICAgICAgc3RhdGVmdWxQbGFjZW1lbnQgPSByZXNldC5wbGFjZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc2V0LnJlY3RzKSB7XG4gICAgICAgICAgcmVjdHMgPSByZXNldC5yZWN0cyA9PT0gdHJ1ZSA/IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgICAgICBmbG9hdGluZyxcbiAgICAgICAgICAgIHN0cmF0ZWd5XG4gICAgICAgICAgfSkgOiByZXNldC5yZWN0cztcbiAgICAgICAgfVxuICAgICAgICAoe1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeVxuICAgICAgICB9ID0gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQocmVjdHMsIHN0YXRlZnVsUGxhY2VtZW50LCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGkgPSAtMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICBzdHJhdGVneSxcbiAgICBtaWRkbGV3YXJlRGF0YVxuICB9O1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBvZiBvdmVyZmxvdyBzaWRlIG9mZnNldHMgdGhhdCBkZXRlcm1pbmUgaG93IG11Y2ggdGhlXG4gKiBlbGVtZW50IGlzIG92ZXJmbG93aW5nIGEgZ2l2ZW4gY2xpcHBpbmcgYm91bmRhcnkgb24gZWFjaCBzaWRlLlxuICogLSBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBib3VuZGFyeSBieSB0aGF0IG51bWJlciBvZiBwaXhlbHNcbiAqIC0gbmVnYXRpdmUgPSBob3cgbWFueSBwaXhlbHMgbGVmdCBiZWZvcmUgaXQgd2lsbCBvdmVyZmxvd1xuICogLSAwID0gbGllcyBmbHVzaCB3aXRoIHRoZSBib3VuZGFyeVxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2RldGVjdE92ZXJmbG93XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIHZhciBfYXdhaXQkcGxhdGZvcm0kaXNFbGU7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgY29uc3Qge1xuICAgIHgsXG4gICAgeSxcbiAgICBwbGF0Zm9ybSxcbiAgICByZWN0cyxcbiAgICBlbGVtZW50cyxcbiAgICBzdHJhdGVneVxuICB9ID0gc3RhdGU7XG4gIGNvbnN0IHtcbiAgICBib3VuZGFyeSA9ICdjbGlwcGluZ0FuY2VzdG9ycycsXG4gICAgcm9vdEJvdW5kYXJ5ID0gJ3ZpZXdwb3J0JyxcbiAgICBlbGVtZW50Q29udGV4dCA9ICdmbG9hdGluZycsXG4gICAgYWx0Qm91bmRhcnkgPSBmYWxzZSxcbiAgICBwYWRkaW5nID0gMFxuICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgY29uc3QgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSAnZmxvYXRpbmcnID8gJ3JlZmVyZW5jZScgOiAnZmxvYXRpbmcnO1xuICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICBjb25zdCBjbGlwcGluZ0NsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KGF3YWl0IHBsYXRmb3JtLmdldENsaXBwaW5nUmVjdCh7XG4gICAgZWxlbWVudDogKChfYXdhaXQkcGxhdGZvcm0kaXNFbGUgPSBhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoZWxlbWVudCkpKSAhPSBudWxsID8gX2F3YWl0JHBsYXRmb3JtJGlzRWxlIDogdHJ1ZSkgPyBlbGVtZW50IDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCAoYXdhaXQgKHBsYXRmb3JtLmdldERvY3VtZW50RWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnRzLmZsb2F0aW5nKSkpLFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9KSk7XG4gIGNvbnN0IHJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gJ2Zsb2F0aW5nJyA/IHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGg6IHJlY3RzLmZsb2F0aW5nLndpZHRoLFxuICAgIGhlaWdodDogcmVjdHMuZmxvYXRpbmcuaGVpZ2h0XG4gIH0gOiByZWN0cy5yZWZlcmVuY2U7XG4gIGNvbnN0IG9mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBvZmZzZXRTY2FsZSA9IChhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQob2Zmc2V0UGFyZW50KSkpID8gKGF3YWl0IChwbGF0Zm9ybS5nZXRTY2FsZSA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0U2NhbGUob2Zmc2V0UGFyZW50KSkpIHx8IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfSA6IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfTtcbiAgY29uc3QgZWxlbWVudENsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KHBsYXRmb3JtLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0ID8gYXdhaXQgcGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Qoe1xuICAgIGVsZW1lbnRzLFxuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0pIDogcmVjdCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiAoY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wKSAvIG9mZnNldFNjYWxlLnksXG4gICAgYm90dG9tOiAoZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSAvIG9mZnNldFNjYWxlLnksXG4gICAgbGVmdDogKGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCkgLyBvZmZzZXRTY2FsZS54LFxuICAgIHJpZ2h0OiAoZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0KSAvIG9mZnNldFNjYWxlLnhcbiAgfTtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIHBvc2l0aW9uIGFuIGlubmVyIGVsZW1lbnQgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgc28gdGhhdCBpdFxuICogYXBwZWFycyBjZW50ZXJlZCB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXJyb3dcbiAqL1xuY29uc3QgYXJyb3cgPSBvcHRpb25zID0+ICh7XG4gIG5hbWU6ICdhcnJvdycsXG4gIG9wdGlvbnMsXG4gIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgY29uc3Qge1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBwbGFjZW1lbnQsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHMsXG4gICAgICBtaWRkbGV3YXJlRGF0YVxuICAgIH0gPSBzdGF0ZTtcbiAgICAvLyBTaW5jZSBgZWxlbWVudGAgaXMgcmVxdWlyZWQsIHdlIGRvbid0IFBhcnRpYWw8PiB0aGUgdHlwZS5cbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcGFkZGluZyA9IDBcbiAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpIHx8IHt9O1xuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgeCxcbiAgICAgIHlcbiAgICB9O1xuICAgIGNvbnN0IGF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gICAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChheGlzKTtcbiAgICBjb25zdCBhcnJvd0RpbWVuc2lvbnMgPSBhd2FpdCBwbGF0Zm9ybS5nZXREaW1lbnNpb25zKGVsZW1lbnQpO1xuICAgIGNvbnN0IGlzWUF4aXMgPSBheGlzID09PSAneSc7XG4gICAgY29uc3QgbWluUHJvcCA9IGlzWUF4aXMgPyAndG9wJyA6ICdsZWZ0JztcbiAgICBjb25zdCBtYXhQcm9wID0gaXNZQXhpcyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICBjb25zdCBjbGllbnRQcm9wID0gaXNZQXhpcyA/ICdjbGllbnRIZWlnaHQnIDogJ2NsaWVudFdpZHRoJztcbiAgICBjb25zdCBlbmREaWZmID0gcmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gKyByZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBjb29yZHNbYXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIGNvbnN0IHN0YXJ0RGlmZiA9IGNvb3Jkc1theGlzXSAtIHJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgICBjb25zdCBhcnJvd09mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50KSk7XG4gICAgbGV0IGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGFycm93T2Zmc2V0UGFyZW50W2NsaWVudFByb3BdIDogMDtcblxuICAgIC8vIERPTSBwbGF0Zm9ybSBjYW4gcmV0dXJuIGB3aW5kb3dgIGFzIHRoZSBgb2Zmc2V0UGFyZW50YC5cbiAgICBpZiAoIWNsaWVudFNpemUgfHwgIShhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoYXJyb3dPZmZzZXRQYXJlbnQpKSkpIHtcbiAgICAgIGNsaWVudFNpemUgPSBlbGVtZW50cy5mbG9hdGluZ1tjbGllbnRQcm9wXSB8fCByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIH1cbiAgICBjb25zdCBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjtcblxuICAgIC8vIElmIHRoZSBwYWRkaW5nIGlzIGxhcmdlIGVub3VnaCB0aGF0IGl0IGNhdXNlcyB0aGUgYXJyb3cgdG8gbm8gbG9uZ2VyIGJlXG4gICAgLy8gY2VudGVyZWQsIG1vZGlmeSB0aGUgcGFkZGluZyBzbyB0aGF0IGl0IGlzIGNlbnRlcmVkLlxuICAgIGNvbnN0IGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcgPSBjbGllbnRTaXplIC8gMiAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiAtIDE7XG4gICAgY29uc3QgbWluUGFkZGluZyA9IG1pbihwYWRkaW5nT2JqZWN0W21pblByb3BdLCBsYXJnZXN0UG9zc2libGVQYWRkaW5nKTtcbiAgICBjb25zdCBtYXhQYWRkaW5nID0gbWluKHBhZGRpbmdPYmplY3RbbWF4UHJvcF0sIGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcpO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBmbG9hdGluZyBlbGVtZW50IGlmIHRoZSBjZW50ZXJcbiAgICAvLyBwb2ludCBpcyBvdXRzaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50J3MgYm91bmRzLlxuICAgIGNvbnN0IG1pbiQxID0gbWluUGFkZGluZztcbiAgICBjb25zdCBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLSBtYXhQYWRkaW5nO1xuICAgIGNvbnN0IGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gICAgY29uc3Qgb2Zmc2V0ID0gY2xhbXAobWluJDEsIGNlbnRlciwgbWF4KTtcblxuICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGwgZW5vdWdoIHRoYXQgdGhlIGFycm93J3MgcGFkZGluZyBjYXVzZXMgaXQgdG9cbiAgICAvLyB0byBwb2ludCB0byBub3RoaW5nIGZvciBhbiBhbGlnbmVkIHBsYWNlbWVudCwgYWRqdXN0IHRoZSBvZmZzZXQgb2YgdGhlXG4gICAgLy8gZmxvYXRpbmcgZWxlbWVudCBpdHNlbGYuIFRvIGVuc3VyZSBgc2hpZnQoKWAgY29udGludWVzIHRvIHRha2UgYWN0aW9uLFxuICAgIC8vIGEgc2luZ2xlIHJlc2V0IGlzIHBlcmZvcm1lZCB3aGVuIHRoaXMgaXMgdHJ1ZS5cbiAgICBjb25zdCBzaG91bGRBZGRPZmZzZXQgPSAhbWlkZGxld2FyZURhdGEuYXJyb3cgJiYgZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT0gbnVsbCAmJiBjZW50ZXIgIT09IG9mZnNldCAmJiByZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSAvIDIgLSAoY2VudGVyIDwgbWluJDEgPyBtaW5QYWRkaW5nIDogbWF4UGFkZGluZykgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgPCAwO1xuICAgIGNvbnN0IGFsaWdubWVudE9mZnNldCA9IHNob3VsZEFkZE9mZnNldCA/IGNlbnRlciA8IG1pbiQxID8gY2VudGVyIC0gbWluJDEgOiBjZW50ZXIgLSBtYXggOiAwO1xuICAgIHJldHVybiB7XG4gICAgICBbYXhpc106IGNvb3Jkc1theGlzXSArIGFsaWdubWVudE9mZnNldCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgW2F4aXNdOiBvZmZzZXQsXG4gICAgICAgIGNlbnRlck9mZnNldDogY2VudGVyIC0gb2Zmc2V0IC0gYWxpZ25tZW50T2Zmc2V0LFxuICAgICAgICAuLi4oc2hvdWxkQWRkT2Zmc2V0ICYmIHtcbiAgICAgICAgICBhbGlnbm1lbnRPZmZzZXRcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICByZXNldDogc2hvdWxkQWRkT2Zmc2V0XG4gICAgfTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGdldFBsYWNlbWVudExpc3QoYWxpZ25tZW50LCBhdXRvQWxpZ25tZW50LCBhbGxvd2VkUGxhY2VtZW50cykge1xuICBjb25zdCBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50ID0gYWxpZ25tZW50ID8gWy4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgPT09IGFsaWdubWVudCksIC4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT09IGFsaWdubWVudCldIDogYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRTaWRlKHBsYWNlbWVudCkgPT09IHBsYWNlbWVudCk7XG4gIHJldHVybiBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50LmZpbHRlcihwbGFjZW1lbnQgPT4ge1xuICAgIGlmIChhbGlnbm1lbnQpIHtcbiAgICAgIHJldHVybiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSA9PT0gYWxpZ25tZW50IHx8IChhdXRvQWxpZ25tZW50ID8gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSAhPT0gcGxhY2VtZW50IDogZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYXV0b1BsYWNlbWVudCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRhdXRvUCwgX21pZGRsZXdhcmVEYXRhJGF1dG9QMiwgX3BsYWNlbWVudHNUaGF0Rml0T25FO1xuICAgICAgY29uc3Qge1xuICAgICAgICByZWN0cyxcbiAgICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBhbGlnbm1lbnQsXG4gICAgICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cyxcbiAgICAgICAgYXV0b0FsaWdubWVudCA9IHRydWUsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHMkMSA9IGFsaWdubWVudCAhPT0gdW5kZWZpbmVkIHx8IGFsbG93ZWRQbGFjZW1lbnRzID09PSBwbGFjZW1lbnRzID8gZ2V0UGxhY2VtZW50TGlzdChhbGlnbm1lbnQgfHwgbnVsbCwgYXV0b0FsaWdubWVudCwgYWxsb3dlZFBsYWNlbWVudHMpIDogYWxsb3dlZFBsYWNlbWVudHM7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gKChfbWlkZGxld2FyZURhdGEkYXV0b1AgPSBtaWRkbGV3YXJlRGF0YS5hdXRvUGxhY2VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGF1dG9QLmluZGV4KSB8fCAwO1xuICAgICAgY29uc3QgY3VycmVudFBsYWNlbWVudCA9IHBsYWNlbWVudHMkMVtjdXJyZW50SW5kZXhdO1xuICAgICAgaWYgKGN1cnJlbnRQbGFjZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBjb25zdCBhbGlnbm1lbnRTaWRlcyA9IGdldEFsaWdubWVudFNpZGVzKGN1cnJlbnRQbGFjZW1lbnQsIHJlY3RzLCBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSkpO1xuXG4gICAgICAvLyBNYWtlIGBjb21wdXRlQ29vcmRzYCBzdGFydCBmcm9tIHRoZSByaWdodCBwbGFjZS5cbiAgICAgIGlmIChwbGFjZW1lbnQgIT09IGN1cnJlbnRQbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnRzJDFbMF1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50T3ZlcmZsb3dzID0gW292ZXJmbG93W2dldFNpZGUoY3VycmVudFBsYWNlbWVudCldLCBvdmVyZmxvd1thbGlnbm1lbnRTaWRlc1swXV0sIG92ZXJmbG93W2FsaWdubWVudFNpZGVzWzFdXV07XG4gICAgICBjb25zdCBhbGxPdmVyZmxvd3MgPSBbLi4uKCgoX21pZGRsZXdhcmVEYXRhJGF1dG9QMiA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AyLm92ZXJmbG93cykgfHwgW10pLCB7XG4gICAgICAgIHBsYWNlbWVudDogY3VycmVudFBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzOiBjdXJyZW50T3ZlcmZsb3dzXG4gICAgICB9XTtcbiAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzJDFbY3VycmVudEluZGV4ICsgMV07XG5cbiAgICAgIC8vIFRoZXJlIGFyZSBtb3JlIHBsYWNlbWVudHMgdG8gY2hlY2suXG4gICAgICBpZiAobmV4dFBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGluZGV4OiBjdXJyZW50SW5kZXggKyAxLFxuICAgICAgICAgICAgb3ZlcmZsb3dzOiBhbGxPdmVyZmxvd3NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IG5leHRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UgPSBhbGxPdmVyZmxvd3MubWFwKGQgPT4ge1xuICAgICAgICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQoZC5wbGFjZW1lbnQpO1xuICAgICAgICByZXR1cm4gW2QucGxhY2VtZW50LCBhbGlnbm1lbnQgJiYgY3Jvc3NBeGlzID9cbiAgICAgICAgLy8gQ2hlY2sgYWxvbmcgdGhlIG1haW5BeGlzIGFuZCBtYWluIGNyb3NzQXhpcyBzaWRlLlxuICAgICAgICBkLm92ZXJmbG93cy5zbGljZSgwLCAyKS5yZWR1Y2UoKGFjYywgdikgPT4gYWNjICsgdiwgMCkgOlxuICAgICAgICAvLyBDaGVjayBvbmx5IHRoZSBtYWluQXhpcy5cbiAgICAgICAgZC5vdmVyZmxvd3NbMF0sIGQub3ZlcmZsb3dzXTtcbiAgICAgIH0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHNUaGF0Rml0T25FYWNoU2lkZSA9IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZS5maWx0ZXIoZCA9PiBkWzJdLnNsaWNlKDAsXG4gICAgICAvLyBBbGlnbmVkIHBsYWNlbWVudHMgc2hvdWxkIG5vdCBjaGVjayB0aGVpciBvcHBvc2l0ZSBjcm9zc0F4aXNcbiAgICAgIC8vIHNpZGUuXG4gICAgICBnZXRBbGlnbm1lbnQoZFswXSkgPyAyIDogMykuZXZlcnkodiA9PiB2IDw9IDApKTtcbiAgICAgIGNvbnN0IHJlc2V0UGxhY2VtZW50ID0gKChfcGxhY2VtZW50c1RoYXRGaXRPbkUgPSBwbGFjZW1lbnRzVGhhdEZpdE9uRWFjaFNpZGVbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfcGxhY2VtZW50c1RoYXRGaXRPbkVbMF0pIHx8IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZVswXVswXTtcbiAgICAgIGlmIChyZXNldFBsYWNlbWVudCAhPT0gcGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXG4gICAgICAgICAgICBvdmVyZmxvd3M6IGFsbE92ZXJmbG93c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogcmVzZXRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2ZsaXAnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkYXJyb3csIF9taWRkbGV3YXJlRGF0YSRmbGlwO1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgaW5pdGlhbFBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWUsXG4gICAgICAgIGZhbGxiYWNrUGxhY2VtZW50czogc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgICBmYWxsYmFja1N0cmF0ZWd5ID0gJ2Jlc3RGaXQnLFxuICAgICAgICBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uID0gJ25vbmUnLFxuICAgICAgICBmbGlwQWxpZ25tZW50ID0gdHJ1ZSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuXG4gICAgICAvLyBJZiBhIHJlc2V0IGJ5IHRoZSBhcnJvdyB3YXMgY2F1c2VkIGR1ZSB0byBhbiBhbGlnbm1lbnQgb2Zmc2V0IGJlaW5nXG4gICAgICAvLyBhZGRlZCwgd2Ugc2hvdWxkIHNraXAgYW55IGxvZ2ljIG5vdyBzaW5jZSBgZmxpcCgpYCBoYXMgYWxyZWFkeSBkb25lIGl0c1xuICAgICAgLy8gd29yay5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjU0OSNpc3N1ZWNvbW1lbnQtMTcxOTYwMTY0M1xuICAgICAgaWYgKChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpbml0aWFsU2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhpbml0aWFsUGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGlzQmFzZVBsYWNlbWVudCA9IGdldFNpZGUoaW5pdGlhbFBsYWNlbWVudCkgPT09IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gICAgICBjb25zdCBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcEFsaWdubWVudCA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChpbml0aWFsUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZFBsYWNlbWVudHMoaW5pdGlhbFBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiA9IGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gIT09ICdub25lJztcbiAgICAgIGlmICghc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzICYmIGhhc0ZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24pIHtcbiAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzLnB1c2goLi4uZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cyhpbml0aWFsUGxhY2VtZW50LCBmbGlwQWxpZ25tZW50LCBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uLCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBsYWNlbWVudHMgPSBbaW5pdGlhbFBsYWNlbWVudCwgLi4uZmFsbGJhY2tQbGFjZW1lbnRzXTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBvdmVyZmxvd3MgPSBbXTtcbiAgICAgIGxldCBvdmVyZmxvd3NEYXRhID0gKChfbWlkZGxld2FyZURhdGEkZmxpcCA9IG1pZGRsZXdhcmVEYXRhLmZsaXApID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkZmxpcC5vdmVyZmxvd3MpIHx8IFtdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZV0pO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IHNpZGVzID0gZ2V0QWxpZ25tZW50U2lkZXMocGxhY2VtZW50LCByZWN0cywgcnRsKTtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZXNbMF1dLCBvdmVyZmxvd1tzaWRlc1sxXV0pO1xuICAgICAgfVxuICAgICAgb3ZlcmZsb3dzRGF0YSA9IFsuLi5vdmVyZmxvd3NEYXRhLCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzXG4gICAgICB9XTtcblxuICAgICAgLy8gT25lIG9yIG1vcmUgc2lkZXMgaXMgb3ZlcmZsb3dpbmcuXG4gICAgICBpZiAoIW92ZXJmbG93cy5ldmVyeShzaWRlID0+IHNpZGUgPD0gMCkpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRmbGlwMiwgX292ZXJmbG93c0RhdGEkZmlsdGVyO1xuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoKChfbWlkZGxld2FyZURhdGEkZmxpcDIgPSBtaWRkbGV3YXJlRGF0YS5mbGlwKSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGZsaXAyLmluZGV4KSB8fCAwKSArIDE7XG4gICAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzW25leHRJbmRleF07XG4gICAgICAgIGlmIChuZXh0UGxhY2VtZW50KSB7XG4gICAgICAgICAgY29uc3QgaWdub3JlQ3Jvc3NBeGlzT3ZlcmZsb3cgPSBjaGVja0Nyb3NzQXhpcyA9PT0gJ2FsaWdubWVudCcgPyBpbml0aWFsU2lkZUF4aXMgIT09IGdldFNpZGVBeGlzKG5leHRQbGFjZW1lbnQpIDogZmFsc2U7XG4gICAgICAgICAgaWYgKCFpZ25vcmVDcm9zc0F4aXNPdmVyZmxvdyB8fFxuICAgICAgICAgIC8vIFdlIGxlYXZlIHRoZSBjdXJyZW50IG1haW4gYXhpcyBvbmx5IGlmIGV2ZXJ5IHBsYWNlbWVudCBvbiB0aGF0IGF4aXNcbiAgICAgICAgICAvLyBvdmVyZmxvd3MgdGhlIG1haW4gYXhpcy5cbiAgICAgICAgICBvdmVyZmxvd3NEYXRhLmV2ZXJ5KGQgPT4gZ2V0U2lkZUF4aXMoZC5wbGFjZW1lbnQpID09PSBpbml0aWFsU2lkZUF4aXMgPyBkLm92ZXJmbG93c1swXSA+IDAgOiB0cnVlKSkge1xuICAgICAgICAgICAgLy8gVHJ5IG5leHQgcGxhY2VtZW50IGFuZCByZS1ydW4gdGhlIGxpZmVjeWNsZS5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBpbmRleDogbmV4dEluZGV4LFxuICAgICAgICAgICAgICAgIG92ZXJmbG93czogb3ZlcmZsb3dzRGF0YVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpcnN0LCBmaW5kIHRoZSBjYW5kaWRhdGVzIHRoYXQgZml0IG9uIHRoZSBtYWluQXhpcyBzaWRlIG9mIG92ZXJmbG93LFxuICAgICAgICAvLyB0aGVuIGZpbmQgdGhlIHBsYWNlbWVudCB0aGF0IGZpdHMgdGhlIGJlc3Qgb24gdGhlIG1haW4gY3Jvc3NBeGlzIHNpZGUuXG4gICAgICAgIGxldCByZXNldFBsYWNlbWVudCA9IChfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IGQub3ZlcmZsb3dzWzBdIDw9IDApLnNvcnQoKGEsIGIpID0+IGEub3ZlcmZsb3dzWzFdIC0gYi5vdmVyZmxvd3NbMV0pWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX292ZXJmbG93c0RhdGEkZmlsdGVyLnBsYWNlbWVudDtcblxuICAgICAgICAvLyBPdGhlcndpc2UgZmFsbGJhY2suXG4gICAgICAgIGlmICghcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICBzd2l0Y2ggKGZhbGxiYWNrU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Jlc3RGaXQnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIF9vdmVyZmxvd3NEYXRhJGZpbHRlcjI7XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2VtZW50ID0gKF9vdmVyZmxvd3NEYXRhJGZpbHRlcjIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTaWRlQXhpcyA9IGdldFNpZGVBeGlzKGQucGxhY2VtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTaWRlQXhpcyA9PT0gaW5pdGlhbFNpZGVBeGlzIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGJpYXMgdG8gdGhlIGB5YCBzaWRlIGF4aXMgZHVlIHRvIGhvcml6b250YWxcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVhZGluZyBkaXJlY3Rpb25zIGZhdm9yaW5nIGdyZWF0ZXIgd2lkdGguXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTaWRlQXhpcyA9PT0gJ3knO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSkubWFwKGQgPT4gW2QucGxhY2VtZW50LCBkLm92ZXJmbG93cy5maWx0ZXIob3ZlcmZsb3cgPT4gb3ZlcmZsb3cgPiAwKS5yZWR1Y2UoKGFjYywgb3ZlcmZsb3cpID0+IGFjYyArIG92ZXJmbG93LCAwKV0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9vdmVyZmxvd3NEYXRhJGZpbHRlcjJbMF07XG4gICAgICAgICAgICAgICAgaWYgKHBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdpbml0aWFsUGxhY2VtZW50JzpcbiAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBpbml0aWFsUGxhY2VtZW50O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBsYWNlbWVudCAhPT0gcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgICAgcGxhY2VtZW50OiByZXNldFBsYWNlbWVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQsXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoXG4gIH07XG59XG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIHNpZGVzLnNvbWUoc2lkZSA9PiBvdmVyZmxvd1tzaWRlXSA+PSAwKTtcbn1cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBoaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50IGluIGFwcGxpY2FibGUgc2l0dWF0aW9ucywgc3VjaCBhc1xuICogd2hlbiBpdCBpcyBub3QgaW4gdGhlIHNhbWUgY2xpcHBpbmcgY29udGV4dCBhcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaGlkZVxuICovXG5jb25zdCBoaWRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdoaWRlJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlY3RzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0cmF0ZWd5ID0gJ3JlZmVyZW5jZUhpZGRlbicsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIHN3aXRjaCAoc3RyYXRlZ3kpIHtcbiAgICAgICAgY2FzZSAncmVmZXJlbmNlSGlkZGVuJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdHMucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VIaWRkZW5PZmZzZXRzOiBvZmZzZXRzLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhpZGRlbjogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICdlc2NhcGVkJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5mbG9hdGluZyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZXNjYXBlZE9mZnNldHM6IG9mZnNldHMsXG4gICAgICAgICAgICAgICAgZXNjYXBlZDogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3RzKSB7XG4gIGNvbnN0IG1pblggPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5sZWZ0KSk7XG4gIGNvbnN0IG1pblkgPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC50b3ApKTtcbiAgY29uc3QgbWF4WCA9IG1heCguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LnJpZ2h0KSk7XG4gIGNvbnN0IG1heFkgPSBtYXgoLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5ib3R0b20pKTtcbiAgcmV0dXJuIHtcbiAgICB4OiBtaW5YLFxuICAgIHk6IG1pblksXG4gICAgd2lkdGg6IG1heFggLSBtaW5YLFxuICAgIGhlaWdodDogbWF4WSAtIG1pbllcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFJlY3RzQnlMaW5lKHJlY3RzKSB7XG4gIGNvbnN0IHNvcnRlZFJlY3RzID0gcmVjdHMuc2xpY2UoKS5zb3J0KChhLCBiKSA9PiBhLnkgLSBiLnkpO1xuICBjb25zdCBncm91cHMgPSBbXTtcbiAgbGV0IHByZXZSZWN0ID0gbnVsbDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRSZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHJlY3QgPSBzb3J0ZWRSZWN0c1tpXTtcbiAgICBpZiAoIXByZXZSZWN0IHx8IHJlY3QueSAtIHByZXZSZWN0LnkgPiBwcmV2UmVjdC5oZWlnaHQgLyAyKSB7XG4gICAgICBncm91cHMucHVzaChbcmVjdF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cHNbZ3JvdXBzLmxlbmd0aCAtIDFdLnB1c2gocmVjdCk7XG4gICAgfVxuICAgIHByZXZSZWN0ID0gcmVjdDtcbiAgfVxuICByZXR1cm4gZ3JvdXBzLm1hcChyZWN0ID0+IHJlY3RUb0NsaWVudFJlY3QoZ2V0Qm91bmRpbmdSZWN0KHJlY3QpKSk7XG59XG4vKipcbiAqIFByb3ZpZGVzIGltcHJvdmVkIHBvc2l0aW9uaW5nIGZvciBpbmxpbmUgcmVmZXJlbmNlIGVsZW1lbnRzIHRoYXQgY2FuIHNwYW5cbiAqIG92ZXIgbXVsdGlwbGUgbGluZXMsIHN1Y2ggYXMgaHlwZXJsaW5rcyBvciByYW5nZSBzZWxlY3Rpb25zLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2lubGluZVxuICovXG5jb25zdCBpbmxpbmUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2lubGluZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIHN0cmF0ZWd5XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICAvLyBBIE1vdXNlRXZlbnQncyBjbGllbnR7WCxZfSBjb29yZHMgY2FuIGJlIHVwIHRvIDIgcGl4ZWxzIG9mZiBhXG4gICAgICAvLyBDbGllbnRSZWN0J3MgYm91bmRzLCBkZXNwaXRlIHRoZSBldmVudCBsaXN0ZW5lciBiZWluZyB0cmlnZ2VyZWQuIEFcbiAgICAgIC8vIHBhZGRpbmcgb2YgMiBzZWVtcyB0byBoYW5kbGUgdGhpcyBpc3N1ZS5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGFkZGluZyA9IDIsXG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBuYXRpdmVDbGllbnRSZWN0cyA9IEFycmF5LmZyb20oKGF3YWl0IChwbGF0Zm9ybS5nZXRDbGllbnRSZWN0cyA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0Q2xpZW50UmVjdHMoZWxlbWVudHMucmVmZXJlbmNlKSkpIHx8IFtdKTtcbiAgICAgIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0UmVjdHNCeUxpbmUobmF0aXZlQ2xpZW50UmVjdHMpO1xuICAgICAgY29uc3QgZmFsbGJhY2sgPSByZWN0VG9DbGllbnRSZWN0KGdldEJvdW5kaW5nUmVjdChuYXRpdmVDbGllbnRSZWN0cykpO1xuICAgICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgICBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSB0d28gcmVjdHMgYW5kIHRoZXkgYXJlIGRpc2pvaW5lZC5cbiAgICAgICAgaWYgKGNsaWVudFJlY3RzLmxlbmd0aCA9PT0gMiAmJiBjbGllbnRSZWN0c1swXS5sZWZ0ID4gY2xpZW50UmVjdHNbMV0ucmlnaHQgJiYgeCAhPSBudWxsICYmIHkgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IHJlY3QgaW4gd2hpY2ggdGhlIHBvaW50IGlzIGZ1bGx5IGluc2lkZS5cbiAgICAgICAgICByZXR1cm4gY2xpZW50UmVjdHMuZmluZChyZWN0ID0+IHggPiByZWN0LmxlZnQgLSBwYWRkaW5nT2JqZWN0LmxlZnQgJiYgeCA8IHJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0ICYmIHkgPiByZWN0LnRvcCAtIHBhZGRpbmdPYmplY3QudG9wICYmIHkgPCByZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSB8fCBmYWxsYmFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZXJlIGFyZSAyIG9yIG1vcmUgY29ubmVjdGVkIHJlY3RzLlxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICBpZiAoZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RSZWN0ID0gY2xpZW50UmVjdHNbY2xpZW50UmVjdHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCBpc1RvcCA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ3RvcCc7XG4gICAgICAgICAgICBjb25zdCB0b3AgPSBmaXJzdFJlY3QudG9wO1xuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gbGFzdFJlY3QuYm90dG9tO1xuICAgICAgICAgICAgY29uc3QgbGVmdCA9IGlzVG9wID8gZmlyc3RSZWN0LmxlZnQgOiBsYXN0UmVjdC5sZWZ0O1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBpc1RvcCA/IGZpcnN0UmVjdC5yaWdodCA6IGxhc3RSZWN0LnJpZ2h0O1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgIHg6IGxlZnQsXG4gICAgICAgICAgICAgIHk6IHRvcFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaXNMZWZ0U2lkZSA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ2xlZnQnO1xuICAgICAgICAgIGNvbnN0IG1heFJpZ2h0ID0gbWF4KC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QucmlnaHQpKTtcbiAgICAgICAgICBjb25zdCBtaW5MZWZ0ID0gbWluKC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QubGVmdCkpO1xuICAgICAgICAgIGNvbnN0IG1lYXN1cmVSZWN0cyA9IGNsaWVudFJlY3RzLmZpbHRlcihyZWN0ID0+IGlzTGVmdFNpZGUgPyByZWN0LmxlZnQgPT09IG1pbkxlZnQgOiByZWN0LnJpZ2h0ID09PSBtYXhSaWdodCk7XG4gICAgICAgICAgY29uc3QgdG9wID0gbWVhc3VyZVJlY3RzWzBdLnRvcDtcbiAgICAgICAgICBjb25zdCBib3R0b20gPSBtZWFzdXJlUmVjdHNbbWVhc3VyZVJlY3RzLmxlbmd0aCAtIDFdLmJvdHRvbTtcbiAgICAgICAgICBjb25zdCBsZWZ0ID0gbWluTGVmdDtcbiAgICAgICAgICBjb25zdCByaWdodCA9IG1heFJpZ2h0O1xuICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB4OiBsZWZ0LFxuICAgICAgICAgICAgeTogdG9wXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNldFJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICAgICAgcmVmZXJlbmNlOiB7XG4gICAgICAgICAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG4gICAgICAgIH0sXG4gICAgICAgIGZsb2F0aW5nOiBlbGVtZW50cy5mbG9hdGluZyxcbiAgICAgICAgc3RyYXRlZ3lcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlY3RzLnJlZmVyZW5jZS54ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS54IHx8IHJlY3RzLnJlZmVyZW5jZS55ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS55IHx8IHJlY3RzLnJlZmVyZW5jZS53aWR0aCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2Uud2lkdGggfHwgcmVjdHMucmVmZXJlbmNlLmhlaWdodCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHJlY3RzOiByZXNldFJlY3RzXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IG9yaWdpblNpZGVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWydsZWZ0JywgJ3RvcCddKTtcblxuLy8gRm9yIHR5cGUgYmFja3dhcmRzLWNvbXBhdGliaWxpdHksIHRoZSBgT2Zmc2V0T3B0aW9uc2AgdHlwZSB3YXMgYWxzb1xuLy8gRGVyaXZhYmxlLlxuXG5hc3luYyBmdW5jdGlvbiBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50LFxuICAgIHBsYXRmb3JtLFxuICAgIGVsZW1lbnRzXG4gIH0gPSBzdGF0ZTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgaXNWZXJ0aWNhbCA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgY29uc3QgbWFpbkF4aXNNdWx0aSA9IG9yaWdpblNpZGVzLmhhcyhzaWRlKSA/IC0xIDogMTtcbiAgY29uc3QgY3Jvc3NBeGlzTXVsdGkgPSBydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMTtcbiAgY29uc3QgcmF3VmFsdWUgPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICBsZXQge1xuICAgIG1haW5BeGlzLFxuICAgIGNyb3NzQXhpcyxcbiAgICBhbGlnbm1lbnRBeGlzXG4gIH0gPSB0eXBlb2YgcmF3VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZSxcbiAgICBjcm9zc0F4aXM6IDAsXG4gICAgYWxpZ25tZW50QXhpczogbnVsbFxuICB9IDoge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZS5tYWluQXhpcyB8fCAwLFxuICAgIGNyb3NzQXhpczogcmF3VmFsdWUuY3Jvc3NBeGlzIHx8IDAsXG4gICAgYWxpZ25tZW50QXhpczogcmF3VmFsdWUuYWxpZ25tZW50QXhpc1xuICB9O1xuICBpZiAoYWxpZ25tZW50ICYmIHR5cGVvZiBhbGlnbm1lbnRBeGlzID09PSAnbnVtYmVyJykge1xuICAgIGNyb3NzQXhpcyA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyBhbGlnbm1lbnRBeGlzICogLTEgOiBhbGlnbm1lbnRBeGlzO1xuICB9XG4gIHJldHVybiBpc1ZlcnRpY2FsID8ge1xuICAgIHg6IGNyb3NzQXhpcyAqIGNyb3NzQXhpc011bHRpLFxuICAgIHk6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aVxuICB9IDoge1xuICAgIHg6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aSxcbiAgICB5OiBjcm9zc0F4aXMgKiBjcm9zc0F4aXNNdWx0aVxuICB9O1xufVxuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwbGFjZW1lbnQgYnkgdHJhbnNsYXRpbmcgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYWxvbmcgdGhlXG4gKiBzcGVjaWZpZWQgYXhlcy5cbiAqIEEgbnVtYmVyIChzaG9ydGhhbmQgZm9yIGBtYWluQXhpc2Agb3IgZGlzdGFuY2UpLCBvciBhbiBheGVzIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdCBtYXkgYmUgcGFzc2VkLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL29mZnNldFxuICovXG5jb25zdCBvZmZzZXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IDA7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJG9mZnNlLCBfbWlkZGxld2FyZURhdGEkYXJyb3c7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgbWlkZGxld2FyZURhdGFcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IGRpZmZDb29yZHMgPSBhd2FpdCBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucyk7XG5cbiAgICAgIC8vIElmIHRoZSBwbGFjZW1lbnQgaXMgdGhlIHNhbWUgYW5kIHRoZSBhcnJvdyBjYXVzZWQgYW4gYWxpZ25tZW50IG9mZnNldFxuICAgICAgLy8gdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNoYW5nZSB0aGUgcG9zaXRpb25pbmcgY29vcmRpbmF0ZXMuXG4gICAgICBpZiAocGxhY2VtZW50ID09PSAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZSA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZS5wbGFjZW1lbnQpICYmIChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHggKyBkaWZmQ29vcmRzLngsXG4gICAgICAgIHk6IHkgKyBkaWZmQ29vcmRzLnksXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAuLi5kaWZmQ29vcmRzLFxuICAgICAgICAgIHBsYWNlbWVudFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IHNoaWZ0aW5nIGl0IGluIG9yZGVyIHRvXG4gKiBrZWVwIGl0IGluIHZpZXcgd2hlbiBpdCB3aWxsIG92ZXJmbG93IHRoZSBjbGlwcGluZyBib3VuZGFyeS5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaGlmdFxuICovXG5jb25zdCBzaGlmdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc2hpZnQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBsaW1pdGVyID0ge1xuICAgICAgICAgIGZuOiBfcmVmID0+IHtcbiAgICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgIHlcbiAgICAgICAgICAgIH0gPSBfcmVmO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBjcm9zc0F4aXMgPSBnZXRTaWRlQXhpcyhnZXRTaWRlKHBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgbWFpbkF4aXMgPSBnZXRPcHBvc2l0ZUF4aXMoY3Jvc3NBeGlzKTtcbiAgICAgIGxldCBtYWluQXhpc0Nvb3JkID0gY29vcmRzW21haW5BeGlzXTtcbiAgICAgIGxldCBjcm9zc0F4aXNDb29yZCA9IGNvb3Jkc1tjcm9zc0F4aXNdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyAndG9wJyA6ICdsZWZ0JztcbiAgICAgICAgY29uc3QgbWF4U2lkZSA9IG1haW5BeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IG1haW5BeGlzQ29vcmQgKyBvdmVyZmxvd1ttaW5TaWRlXTtcbiAgICAgICAgY29uc3QgbWF4ID0gbWFpbkF4aXNDb29yZCAtIG92ZXJmbG93W21heFNpZGVdO1xuICAgICAgICBtYWluQXhpc0Nvb3JkID0gY2xhbXAobWluLCBtYWluQXhpc0Nvb3JkLCBtYXgpO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IG1pblNpZGUgPSBjcm9zc0F4aXMgPT09ICd5JyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgICAgICBjb25zdCBtYXhTaWRlID0gY3Jvc3NBeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IGNyb3NzQXhpc0Nvb3JkICsgb3ZlcmZsb3dbbWluU2lkZV07XG4gICAgICAgIGNvbnN0IG1heCA9IGNyb3NzQXhpc0Nvb3JkIC0gb3ZlcmZsb3dbbWF4U2lkZV07XG4gICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gY2xhbXAobWluLCBjcm9zc0F4aXNDb29yZCwgbWF4KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxpbWl0ZWRDb29yZHMgPSBsaW1pdGVyLmZuKHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5saW1pdGVkQ29vcmRzLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgeDogbGltaXRlZENvb3Jkcy54IC0geCxcbiAgICAgICAgICB5OiBsaW1pdGVkQ29vcmRzLnkgLSB5LFxuICAgICAgICAgIGVuYWJsZWQ6IHtcbiAgICAgICAgICAgIFttYWluQXhpc106IGNoZWNrTWFpbkF4aXMsXG4gICAgICAgICAgICBbY3Jvc3NBeGlzXTogY2hlY2tDcm9zc0F4aXNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgb3B0aW9ucyxcbiAgICBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBtaWRkbGV3YXJlRGF0YVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBvZmZzZXQgPSAwLFxuICAgICAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSB0cnVlXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgICAgY29uc3QgY3Jvc3NBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IG1haW5BeGlzID0gZ2V0T3Bwb3NpdGVBeGlzKGNyb3NzQXhpcyk7XG4gICAgICBsZXQgbWFpbkF4aXNDb29yZCA9IGNvb3Jkc1ttYWluQXhpc107XG4gICAgICBsZXQgY3Jvc3NBeGlzQ29vcmQgPSBjb29yZHNbY3Jvc3NBeGlzXTtcbiAgICAgIGNvbnN0IHJhd09mZnNldCA9IGV2YWx1YXRlKG9mZnNldCwgc3RhdGUpO1xuICAgICAgY29uc3QgY29tcHV0ZWRPZmZzZXQgPSB0eXBlb2YgcmF3T2Zmc2V0ID09PSAnbnVtYmVyJyA/IHtcbiAgICAgICAgbWFpbkF4aXM6IHJhd09mZnNldCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwXG4gICAgICB9IDoge1xuICAgICAgICBtYWluQXhpczogMCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwLFxuICAgICAgICAuLi5yYXdPZmZzZXRcbiAgICAgIH07XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgICAgICBjb25zdCBsaW1pdE1pbiA9IHJlY3RzLnJlZmVyZW5jZVttYWluQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGNvbnN0IGxpbWl0TWF4ID0gcmVjdHMucmVmZXJlbmNlW21haW5BeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dIC0gY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGlmIChtYWluQXhpc0Nvb3JkIDwgbGltaXRNaW4pIHtcbiAgICAgICAgICBtYWluQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAobWFpbkF4aXNDb29yZCA+IGxpbWl0TWF4KSB7XG4gICAgICAgICAgbWFpbkF4aXNDb29yZCA9IGxpbWl0TWF4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRvZmZzZSwgX21pZGRsZXdhcmVEYXRhJG9mZnNlMjtcbiAgICAgICAgY29uc3QgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICAgICAgY29uc3QgaXNPcmlnaW5TaWRlID0gb3JpZ2luU2lkZXMuaGFzKGdldFNpZGUocGxhY2VtZW50KSk7XG4gICAgICAgIGNvbnN0IGxpbWl0TWluID0gcmVjdHMucmVmZXJlbmNlW2Nyb3NzQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgKGlzT3JpZ2luU2lkZSA/ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlW2Nyb3NzQXhpc10pIHx8IDAgOiAwKSArIChpc09yaWdpblNpZGUgPyAwIDogY29tcHV0ZWRPZmZzZXQuY3Jvc3NBeGlzKTtcbiAgICAgICAgY29uc3QgbGltaXRNYXggPSByZWN0cy5yZWZlcmVuY2VbY3Jvc3NBeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dICsgKGlzT3JpZ2luU2lkZSA/IDAgOiAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZTIgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2UyW2Nyb3NzQXhpc10pIHx8IDApIC0gKGlzT3JpZ2luU2lkZSA/IGNvbXB1dGVkT2Zmc2V0LmNyb3NzQXhpcyA6IDApO1xuICAgICAgICBpZiAoY3Jvc3NBeGlzQ29vcmQgPCBsaW1pdE1pbikge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBeGlzQ29vcmQgPiBsaW1pdE1heCkge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNYXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCDigJRcbiAqIGZvciBpbnN0YW5jZSwgcHJldmVudCBpdCBmcm9tIG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyBib3VuZGFyeSBvciBtYXRjaCB0aGVcbiAqIHdpZHRoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXG4gKi9cbmNvbnN0IHNpemUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3NpemUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfc3RhdGUkbWlkZGxld2FyZURhdGEsIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTI7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBhcHBseSA9ICgpID0+IHt9LFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaXNZQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSA9IHJlY3RzLmZsb2F0aW5nO1xuICAgICAgbGV0IGhlaWdodFNpZGU7XG4gICAgICBsZXQgd2lkdGhTaWRlO1xuICAgICAgaWYgKHNpZGUgPT09ICd0b3AnIHx8IHNpZGUgPT09ICdib3R0b20nKSB7XG4gICAgICAgIGhlaWdodFNpZGUgPSBzaWRlO1xuICAgICAgICB3aWR0aFNpZGUgPSBhbGlnbm1lbnQgPT09ICgoYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpKSA/ICdzdGFydCcgOiAnZW5kJykgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2lkdGhTaWRlID0gc2lkZTtcbiAgICAgICAgaGVpZ2h0U2lkZSA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyAndG9wJyA6ICdib3R0b20nO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nSGVpZ2h0ID0gaGVpZ2h0IC0gb3ZlcmZsb3cudG9wIC0gb3ZlcmZsb3cuYm90dG9tO1xuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nV2lkdGggPSB3aWR0aCAtIG92ZXJmbG93LmxlZnQgLSBvdmVyZmxvdy5yaWdodDtcbiAgICAgIGNvbnN0IG92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0ID0gbWluKGhlaWdodCAtIG92ZXJmbG93W2hlaWdodFNpZGVdLCBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3dBdmFpbGFibGVXaWR0aCA9IG1pbih3aWR0aCAtIG92ZXJmbG93W3dpZHRoU2lkZV0sIG1heGltdW1DbGlwcGluZ1dpZHRoKTtcbiAgICAgIGNvbnN0IG5vU2hpZnQgPSAhc3RhdGUubWlkZGxld2FyZURhdGEuc2hpZnQ7XG4gICAgICBsZXQgYXZhaWxhYmxlSGVpZ2h0ID0gb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQ7XG4gICAgICBsZXQgYXZhaWxhYmxlV2lkdGggPSBvdmVyZmxvd0F2YWlsYWJsZVdpZHRoO1xuICAgICAgaWYgKChfc3RhdGUkbWlkZGxld2FyZURhdGEgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEuZW5hYmxlZC54KSB7XG4gICAgICAgIGF2YWlsYWJsZVdpZHRoID0gbWF4aW11bUNsaXBwaW5nV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAoKF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTIgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEyLmVuYWJsZWQueSkge1xuICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQ7XG4gICAgICB9XG4gICAgICBpZiAobm9TaGlmdCAmJiAhYWxpZ25tZW50KSB7XG4gICAgICAgIGNvbnN0IHhNaW4gPSBtYXgob3ZlcmZsb3cubGVmdCwgMCk7XG4gICAgICAgIGNvbnN0IHhNYXggPSBtYXgob3ZlcmZsb3cucmlnaHQsIDApO1xuICAgICAgICBjb25zdCB5TWluID0gbWF4KG92ZXJmbG93LnRvcCwgMCk7XG4gICAgICAgIGNvbnN0IHlNYXggPSBtYXgob3ZlcmZsb3cuYm90dG9tLCAwKTtcbiAgICAgICAgaWYgKGlzWUF4aXMpIHtcbiAgICAgICAgICBhdmFpbGFibGVXaWR0aCA9IHdpZHRoIC0gMiAqICh4TWluICE9PSAwIHx8IHhNYXggIT09IDAgPyB4TWluICsgeE1heCA6IG1heChvdmVyZmxvdy5sZWZ0LCBvdmVyZmxvdy5yaWdodCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IGhlaWdodCAtIDIgKiAoeU1pbiAhPT0gMCB8fCB5TWF4ICE9PSAwID8geU1pbiArIHlNYXggOiBtYXgob3ZlcmZsb3cudG9wLCBvdmVyZmxvdy5ib3R0b20pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgYXBwbHkoe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYXZhaWxhYmxlV2lkdGgsXG4gICAgICAgIGF2YWlsYWJsZUhlaWdodFxuICAgICAgfSk7XG4gICAgICBjb25zdCBuZXh0RGltZW5zaW9ucyA9IGF3YWl0IHBsYXRmb3JtLmdldERpbWVuc2lvbnMoZWxlbWVudHMuZmxvYXRpbmcpO1xuICAgICAgaWYgKHdpZHRoICE9PSBuZXh0RGltZW5zaW9ucy53aWR0aCB8fCBoZWlnaHQgIT09IG5leHREaW1lbnNpb25zLmhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICByZWN0czogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnQgeyBhcnJvdywgYXV0b1BsYWNlbWVudCwgY29tcHV0ZVBvc2l0aW9uLCBkZXRlY3RPdmVyZmxvdywgZmxpcCwgaGlkZSwgaW5saW5lLCBsaW1pdFNoaWZ0LCBvZmZzZXQsIHNoaWZ0LCBzaXplIH07XG4iLCJmdW5jdGlvbiBoYXNXaW5kb3coKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbn1cbmZ1bmN0aW9uIGdldE5vZGVOYW1lKG5vZGUpIHtcbiAgaWYgKGlzTm9kZShub2RlKSkge1xuICAgIHJldHVybiAobm9kZS5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgfVxuICAvLyBNb2NrZWQgbm9kZXMgaW4gdGVzdGluZyBlbnZpcm9ubWVudHMgbWF5IG5vdCBiZSBpbnN0YW5jZXMgb2YgTm9kZS4gQnlcbiAgLy8gcmV0dXJuaW5nIGAjZG9jdW1lbnRgIGFuIGluZmluaXRlIGxvb3Agd29uJ3Qgb2NjdXIuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjMxN1xuICByZXR1cm4gJyNkb2N1bWVudCc7XG59XG5mdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIChub2RlID09IG51bGwgfHwgKF9ub2RlJG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSB8fCB3aW5kb3c7XG59XG5mdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQobm9kZSkge1xuICB2YXIgX3JlZjtcbiAgcmV0dXJuIChfcmVmID0gKGlzTm9kZShub2RlKSA/IG5vZGUub3duZXJEb2N1bWVudCA6IG5vZGUuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9yZWYuZG9jdW1lbnRFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNOb2RlKHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgTm9kZSB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuTm9kZTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkhUTUxFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNTaGFkb3dSb290KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkgfHwgdHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLlNoYWRvd1Jvb3Q7XG59XG5jb25zdCBpbnZhbGlkT3ZlcmZsb3dEaXNwbGF5VmFsdWVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWydpbmxpbmUnLCAnY29udGVudHMnXSk7XG5mdW5jdGlvbiBpc092ZXJmbG93RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICBvdmVyZmxvdyxcbiAgICBvdmVyZmxvd1gsXG4gICAgb3ZlcmZsb3dZLFxuICAgIGRpc3BsYXlcbiAgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkgJiYgIWludmFsaWRPdmVyZmxvd0Rpc3BsYXlWYWx1ZXMuaGFzKGRpc3BsYXkpO1xufVxuY29uc3QgdGFibGVFbGVtZW50cyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KFsndGFibGUnLCAndGQnLCAndGgnXSk7XG5mdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiB0YWJsZUVsZW1lbnRzLmhhcyhnZXROb2RlTmFtZShlbGVtZW50KSk7XG59XG5jb25zdCB0b3BMYXllclNlbGVjdG9ycyA9IFsnOnBvcG92ZXItb3BlbicsICc6bW9kYWwnXTtcbmZ1bmN0aW9uIGlzVG9wTGF5ZXIoZWxlbWVudCkge1xuICByZXR1cm4gdG9wTGF5ZXJTZWxlY3RvcnMuc29tZShzZWxlY3RvciA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBlbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgIH0gY2F0Y2ggKF9lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbn1cbmNvbnN0IHRyYW5zZm9ybVByb3BlcnRpZXMgPSBbJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUnLCAnc2NhbGUnLCAncm90YXRlJywgJ3BlcnNwZWN0aXZlJ107XG5jb25zdCB3aWxsQ2hhbmdlVmFsdWVzID0gWyd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlJywgJ3NjYWxlJywgJ3JvdGF0ZScsICdwZXJzcGVjdGl2ZScsICdmaWx0ZXInXTtcbmNvbnN0IGNvbnRhaW5WYWx1ZXMgPSBbJ3BhaW50JywgJ2xheW91dCcsICdzdHJpY3QnLCAnY29udGVudCddO1xuZnVuY3Rpb24gaXNDb250YWluaW5nQmxvY2soZWxlbWVudE9yQ3NzKSB7XG4gIGNvbnN0IHdlYmtpdCA9IGlzV2ViS2l0KCk7XG4gIGNvbnN0IGNzcyA9IGlzRWxlbWVudChlbGVtZW50T3JDc3MpID8gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50T3JDc3MpIDogZWxlbWVudE9yQ3NzO1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdHJhbnNmb3Jtcy0yLyNpbmRpdmlkdWFsLXRyYW5zZm9ybXNcbiAgcmV0dXJuIHRyYW5zZm9ybVByb3BlcnRpZXMuc29tZSh2YWx1ZSA9PiBjc3NbdmFsdWVdID8gY3NzW3ZhbHVlXSAhPT0gJ25vbmUnIDogZmFsc2UpIHx8IChjc3MuY29udGFpbmVyVHlwZSA/IGNzcy5jb250YWluZXJUeXBlICE9PSAnbm9ybWFsJyA6IGZhbHNlKSB8fCAhd2Via2l0ICYmIChjc3MuYmFja2Ryb3BGaWx0ZXIgPyBjc3MuYmFja2Ryb3BGaWx0ZXIgIT09ICdub25lJyA6IGZhbHNlKSB8fCAhd2Via2l0ICYmIChjc3MuZmlsdGVyID8gY3NzLmZpbHRlciAhPT0gJ25vbmUnIDogZmFsc2UpIHx8IHdpbGxDaGFuZ2VWYWx1ZXMuc29tZSh2YWx1ZSA9PiAoY3NzLndpbGxDaGFuZ2UgfHwgJycpLmluY2x1ZGVzKHZhbHVlKSkgfHwgY29udGFpblZhbHVlcy5zb21lKHZhbHVlID0+IChjc3MuY29udGFpbiB8fCAnJykuaW5jbHVkZXModmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKGN1cnJlbnROb2RlKSkge1xuICAgIGlmIChpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2UgaWYgKGlzVG9wTGF5ZXIoY3VycmVudE5vZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzV2ViS2l0KCkge1xuICBpZiAodHlwZW9mIENTUyA9PT0gJ3VuZGVmaW5lZCcgfHwgIUNTUy5zdXBwb3J0cykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQ1NTLnN1cHBvcnRzKCctd2Via2l0LWJhY2tkcm9wLWZpbHRlcicsICdub25lJyk7XG59XG5jb25zdCBsYXN0VHJhdmVyc2FibGVOb2RlTmFtZXMgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXSk7XG5mdW5jdGlvbiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUobm9kZSkge1xuICByZXR1cm4gbGFzdFRyYXZlcnNhYmxlTm9kZU5hbWVzLmhhcyhnZXROb2RlTmFtZShub2RlKSk7XG59XG5mdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufVxuZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KSB7XG4gIGlmIChpc0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbFgsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhcmVudE5vZGUobm9kZSkge1xuICBpZiAoZ2V0Tm9kZU5hbWUobm9kZSkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9XG4gIC8vIFN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlLlxuICBub2RlLmFzc2lnbmVkU2xvdCB8fFxuICAvLyBET00gRWxlbWVudCBkZXRlY3RlZC5cbiAgbm9kZS5wYXJlbnROb2RlIHx8XG4gIC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWQuXG4gIGlzU2hhZG93Um9vdChub2RlKSAmJiBub2RlLmhvc3QgfHxcbiAgLy8gRmFsbGJhY2suXG4gIGdldERvY3VtZW50RWxlbWVudChub2RlKTtcbiAgcmV0dXJuIGlzU2hhZG93Um9vdChyZXN1bHQpID8gcmVzdWx0Lmhvc3QgOiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKG5vZGUpO1xuICBpZiAoaXNMYXN0VHJhdmVyc2FibGVOb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudCA/IG5vZGUub3duZXJEb2N1bWVudC5ib2R5IDogbm9kZS5ib2R5O1xuICB9XG4gIGlmIChpc0hUTUxFbGVtZW50KHBhcmVudE5vZGUpICYmIGlzT3ZlcmZsb3dFbGVtZW50KHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKHBhcmVudE5vZGUpO1xufVxuZnVuY3Rpb24gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMobm9kZSwgbGlzdCwgdHJhdmVyc2VJZnJhbWVzKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50MjtcbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuICBpZiAodHJhdmVyc2VJZnJhbWVzID09PSB2b2lkIDApIHtcbiAgICB0cmF2ZXJzZUlmcmFtZXMgPSB0cnVlO1xuICB9XG4gIGNvbnN0IHNjcm9sbGFibGVBbmNlc3RvciA9IGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpO1xuICBjb25zdCBpc0JvZHkgPSBzY3JvbGxhYmxlQW5jZXN0b3IgPT09ICgoX25vZGUkb3duZXJEb2N1bWVudDIgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50Mi5ib2R5KTtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KHNjcm9sbGFibGVBbmNlc3Rvcik7XG4gIGlmIChpc0JvZHkpIHtcbiAgICBjb25zdCBmcmFtZUVsZW1lbnQgPSBnZXRGcmFtZUVsZW1lbnQod2luKTtcbiAgICByZXR1cm4gbGlzdC5jb25jYXQod2luLCB3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzT3ZlcmZsb3dFbGVtZW50KHNjcm9sbGFibGVBbmNlc3RvcikgPyBzY3JvbGxhYmxlQW5jZXN0b3IgOiBbXSwgZnJhbWVFbGVtZW50ICYmIHRyYXZlcnNlSWZyYW1lcyA/IGdldE92ZXJmbG93QW5jZXN0b3JzKGZyYW1lRWxlbWVudCkgOiBbXSk7XG4gIH1cbiAgcmV0dXJuIGxpc3QuY29uY2F0KHNjcm9sbGFibGVBbmNlc3RvciwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoc2Nyb2xsYWJsZUFuY2VzdG9yLCBbXSwgdHJhdmVyc2VJZnJhbWVzKSk7XG59XG5mdW5jdGlvbiBnZXRGcmFtZUVsZW1lbnQod2luKSB7XG4gIHJldHVybiB3aW4ucGFyZW50ICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih3aW4ucGFyZW50KSA/IHdpbi5mcmFtZUVsZW1lbnQgOiBudWxsO1xufVxuXG5leHBvcnQgeyBnZXRDb21wdXRlZFN0eWxlLCBnZXRDb250YWluaW5nQmxvY2ssIGdldERvY3VtZW50RWxlbWVudCwgZ2V0RnJhbWVFbGVtZW50LCBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvciwgZ2V0Tm9kZU5hbWUsIGdldE5vZGVTY3JvbGwsIGdldE92ZXJmbG93QW5jZXN0b3JzLCBnZXRQYXJlbnROb2RlLCBnZXRXaW5kb3csIGlzQ29udGFpbmluZ0Jsb2NrLCBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzTGFzdFRyYXZlcnNhYmxlTm9kZSwgaXNOb2RlLCBpc092ZXJmbG93RWxlbWVudCwgaXNTaGFkb3dSb290LCBpc1RhYmxlRWxlbWVudCwgaXNUb3BMYXllciwgaXNXZWJLaXQgfTtcbiIsImltcG9ydCB7IHJlY3RUb0NsaWVudFJlY3QsIGFycm93IGFzIGFycm93JDEsIGF1dG9QbGFjZW1lbnQgYXMgYXV0b1BsYWNlbWVudCQxLCBkZXRlY3RPdmVyZmxvdyBhcyBkZXRlY3RPdmVyZmxvdyQxLCBmbGlwIGFzIGZsaXAkMSwgaGlkZSBhcyBoaWRlJDEsIGlubGluZSBhcyBpbmxpbmUkMSwgbGltaXRTaGlmdCBhcyBsaW1pdFNoaWZ0JDEsIG9mZnNldCBhcyBvZmZzZXQkMSwgc2hpZnQgYXMgc2hpZnQkMSwgc2l6ZSBhcyBzaXplJDEsIGNvbXB1dGVQb3NpdGlvbiBhcyBjb21wdXRlUG9zaXRpb24kMSB9IGZyb20gJ0BmbG9hdGluZy11aS9jb3JlJztcbmltcG9ydCB7IHJvdW5kLCBjcmVhdGVDb29yZHMsIG1heCwgbWluLCBmbG9vciB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5pbXBvcnQgeyBnZXRDb21wdXRlZFN0eWxlIGFzIGdldENvbXB1dGVkU3R5bGUkMSwgaXNIVE1MRWxlbWVudCwgaXNFbGVtZW50LCBnZXRXaW5kb3csIGlzV2ViS2l0LCBnZXRGcmFtZUVsZW1lbnQsIGdldE5vZGVTY3JvbGwsIGdldERvY3VtZW50RWxlbWVudCwgaXNUb3BMYXllciwgZ2V0Tm9kZU5hbWUsIGlzT3ZlcmZsb3dFbGVtZW50LCBnZXRPdmVyZmxvd0FuY2VzdG9ycywgZ2V0UGFyZW50Tm9kZSwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc0NvbnRhaW5pbmdCbG9jaywgaXNUYWJsZUVsZW1lbnQsIGdldENvbnRhaW5pbmdCbG9jayB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuZXhwb3J0IHsgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcblxuZnVuY3Rpb24gZ2V0Q3NzRGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUkMShlbGVtZW50KTtcbiAgLy8gSW4gdGVzdGluZyBlbnZpcm9ubWVudHMsIHRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzIGFyZSBlbXB0eVxuICAvLyBzdHJpbmdzIGZvciBTVkcgZWxlbWVudHMsIHJldHVybmluZyBOYU4uIEZhbGxiYWNrIHRvIGAwYCBpbiB0aGlzIGNhc2UuXG4gIGxldCB3aWR0aCA9IHBhcnNlRmxvYXQoY3NzLndpZHRoKSB8fCAwO1xuICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChjc3MuaGVpZ2h0KSB8fCAwO1xuICBjb25zdCBoYXNPZmZzZXQgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBvZmZzZXRXaWR0aCA9IGhhc09mZnNldCA/IGVsZW1lbnQub2Zmc2V0V2lkdGggOiB3aWR0aDtcbiAgY29uc3Qgb2Zmc2V0SGVpZ2h0ID0gaGFzT2Zmc2V0ID8gZWxlbWVudC5vZmZzZXRIZWlnaHQgOiBoZWlnaHQ7XG4gIGNvbnN0IHNob3VsZEZhbGxiYWNrID0gcm91bmQod2lkdGgpICE9PSBvZmZzZXRXaWR0aCB8fCByb3VuZChoZWlnaHQpICE9PSBvZmZzZXRIZWlnaHQ7XG4gIGlmIChzaG91bGRGYWxsYmFjaykge1xuICAgIHdpZHRoID0gb2Zmc2V0V2lkdGg7XG4gICAgaGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0O1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICQ6IHNob3VsZEZhbGxiYWNrXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVud3JhcEVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gIWlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgOiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRTY2FsZShlbGVtZW50KSB7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZG9tRWxlbWVudCkpIHtcbiAgICByZXR1cm4gY3JlYXRlQ29vcmRzKDEpO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBkb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZG9tRWxlbWVudCk7XG4gIGxldCB4ID0gKCQgPyByb3VuZChyZWN0LndpZHRoKSA6IHJlY3Qud2lkdGgpIC8gd2lkdGg7XG4gIGxldCB5ID0gKCQgPyByb3VuZChyZWN0LmhlaWdodCkgOiByZWN0LmhlaWdodCkgLyBoZWlnaHQ7XG5cbiAgLy8gMCwgTmFOLCBvciBJbmZpbml0eSBzaG91bGQgYWx3YXlzIGZhbGxiYWNrIHRvIDEuXG5cbiAgaWYgKCF4IHx8ICFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICB4ID0gMTtcbiAgfVxuICBpZiAoIXkgfHwgIU51bWJlci5pc0Zpbml0ZSh5KSkge1xuICAgIHkgPSAxO1xuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmNvbnN0IG5vT2Zmc2V0cyA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb29yZHMoMCk7XG5mdW5jdGlvbiBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBpZiAoIWlzV2ViS2l0KCkgfHwgIXdpbi52aXN1YWxWaWV3cG9ydCkge1xuICAgIHJldHVybiBub09mZnNldHM7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCxcbiAgICB5OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wXG4gIH07XG59XG5mdW5jdGlvbiBzaG91bGRBZGRWaXN1YWxPZmZzZXRzKGVsZW1lbnQsIGlzRml4ZWQsIGZsb2F0aW5nT2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cbiAgaWYgKCFmbG9hdGluZ09mZnNldFBhcmVudCB8fCBpc0ZpeGVkICYmIGZsb2F0aW5nT2Zmc2V0UGFyZW50ICE9PSBnZXRXaW5kb3coZWxlbWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzRml4ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSwgb2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBkb21FbGVtZW50ID0gdW53cmFwRWxlbWVudChlbGVtZW50KTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBpZiAoaW5jbHVkZVNjYWxlKSB7XG4gICAgaWYgKG9mZnNldFBhcmVudCkge1xuICAgICAgaWYgKGlzRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHNjYWxlID0gZ2V0U2NhbGUob2Zmc2V0UGFyZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IHNob3VsZEFkZFZpc3VhbE9mZnNldHMoZG9tRWxlbWVudCwgaXNGaXhlZFN0cmF0ZWd5LCBvZmZzZXRQYXJlbnQpID8gZ2V0VmlzdWFsT2Zmc2V0cyhkb21FbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgbGV0IHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgdmlzdWFsT2Zmc2V0cy54KSAvIHNjYWxlLng7XG4gIGxldCB5ID0gKGNsaWVudFJlY3QudG9wICsgdmlzdWFsT2Zmc2V0cy55KSAvIHNjYWxlLnk7XG4gIGxldCB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZS54O1xuICBsZXQgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZS55O1xuICBpZiAoZG9tRWxlbWVudCkge1xuICAgIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhkb21FbGVtZW50KTtcbiAgICBjb25zdCBvZmZzZXRXaW4gPSBvZmZzZXRQYXJlbnQgJiYgaXNFbGVtZW50KG9mZnNldFBhcmVudCkgPyBnZXRXaW5kb3cob2Zmc2V0UGFyZW50KSA6IG9mZnNldFBhcmVudDtcbiAgICBsZXQgY3VycmVudFdpbiA9IHdpbjtcbiAgICBsZXQgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB3aGlsZSAoY3VycmVudElGcmFtZSAmJiBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0V2luICE9PSBjdXJyZW50V2luKSB7XG4gICAgICBjb25zdCBpZnJhbWVTY2FsZSA9IGdldFNjYWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgaWZyYW1lUmVjdCA9IGN1cnJlbnRJRnJhbWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlJDEoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBsZWZ0ID0gaWZyYW1lUmVjdC5sZWZ0ICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50TGVmdCArIHBhcnNlRmxvYXQoY3NzLnBhZGRpbmdMZWZ0KSkgKiBpZnJhbWVTY2FsZS54O1xuICAgICAgY29uc3QgdG9wID0gaWZyYW1lUmVjdC50b3AgKyAoY3VycmVudElGcmFtZS5jbGllbnRUb3AgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nVG9wKSkgKiBpZnJhbWVTY2FsZS55O1xuICAgICAgeCAqPSBpZnJhbWVTY2FsZS54O1xuICAgICAgeSAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgd2lkdGggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIGhlaWdodCAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgeCArPSBsZWZ0O1xuICAgICAgeSArPSB0b3A7XG4gICAgICBjdXJyZW50V2luID0gZ2V0V2luZG93KGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3Qoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfSk7XG59XG5cbi8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbi8vIGluY29ycmVjdCBmb3IgUlRMLlxuZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50LCByZWN0KSB7XG4gIGNvbnN0IGxlZnRTY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG4gIGlmICghcmVjdCkge1xuICAgIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgbGVmdFNjcm9sbDtcbiAgfVxuICByZXR1cm4gcmVjdC5sZWZ0ICsgbGVmdFNjcm9sbDtcbn1cblxuZnVuY3Rpb24gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkge1xuICBjb25zdCBodG1sUmVjdCA9IGRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgeCA9IGh0bWxSZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50LCBodG1sUmVjdCk7XG4gIGNvbnN0IHkgPSBodG1sUmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wO1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgZWxlbWVudHMsXG4gICAgcmVjdCxcbiAgICBvZmZzZXRQYXJlbnQsXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGlzRml4ZWQgPSBzdHJhdGVneSA9PT0gJ2ZpeGVkJztcbiAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IHRvcExheWVyID0gZWxlbWVudHMgPyBpc1RvcExheWVyKGVsZW1lbnRzLmZsb2F0aW5nKSA6IGZhbHNlO1xuICBpZiAob2Zmc2V0UGFyZW50ID09PSBkb2N1bWVudEVsZW1lbnQgfHwgdG9wTGF5ZXIgJiYgaXNGaXhlZCkge1xuICAgIHJldHVybiByZWN0O1xuICB9XG4gIGxldCBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuICBjb25zdCBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBjb25zdCBvZmZzZXRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCk7XG4gICAgICBzY2FsZSA9IGdldFNjYWxlKG9mZnNldFBhcmVudCk7XG4gICAgICBvZmZzZXRzLnggPSBvZmZzZXRSZWN0LnggKyBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSA9IG9mZnNldFJlY3QueSArIG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfVxuICB9XG4gIGNvbnN0IGh0bWxPZmZzZXQgPSBkb2N1bWVudEVsZW1lbnQgJiYgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkID8gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHJlY3Qud2lkdGggKiBzY2FsZS54LFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHQgKiBzY2FsZS55LFxuICAgIHg6IHJlY3QueCAqIHNjYWxlLnggLSBzY3JvbGwuc2Nyb2xsTGVmdCAqIHNjYWxlLnggKyBvZmZzZXRzLnggKyBodG1sT2Zmc2V0LngsXG4gICAgeTogcmVjdC55ICogc2NhbGUueSAtIHNjcm9sbC5zY3JvbGxUb3AgKiBzY2FsZS55ICsgb2Zmc2V0cy55ICsgaHRtbE9mZnNldC55XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oZWxlbWVudC5nZXRDbGllbnRSZWN0cygpKTtcbn1cblxuLy8gR2V0cyB0aGUgZW50aXJlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgZG9jdW1lbnQgYXJlYSwgZXZlbiBleHRlbmRpbmcgb3V0c2lkZVxuLy8gb2YgdGhlIGA8aHRtbD5gIGFuZCBgPGJvZHk+YCByZWN0IGJvdW5kcyBpZiBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZS5cbmZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHNjcm9sbCA9IGdldE5vZGVTY3JvbGwoZWxlbWVudCk7XG4gIGNvbnN0IGJvZHkgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgY29uc3Qgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgYm9keS5jbGllbnRXaWR0aCk7XG4gIGNvbnN0IGhlaWdodCA9IG1heChodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGJvZHkuc2Nyb2xsSGVpZ2h0LCBib2R5LmNsaWVudEhlaWdodCk7XG4gIGxldCB4ID0gLXNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgY29uc3QgeSA9IC1zY3JvbGwuc2Nyb2xsVG9wO1xuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZSQxKGJvZHkpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5LmNsaWVudFdpZHRoKSAtIHdpZHRoO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG4vLyBTYWZldHkgY2hlY2s6IGVuc3VyZSB0aGUgc2Nyb2xsYmFyIHNwYWNlIGlzIHJlYXNvbmFibGUgaW4gY2FzZSB0aGlzXG4vLyBjYWxjdWxhdGlvbiBpcyBhZmZlY3RlZCBieSB1bnVzdWFsIHN0eWxlcy5cbi8vIE1vc3Qgc2Nyb2xsYmFycyBsZWF2ZSAxNS0xOHB4IG9mIHNwYWNlLlxuY29uc3QgU0NST0xMQkFSX01BWCA9IDI1O1xuZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgY29uc3QgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgY29uc3QgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIGxldCB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIGxldCBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgbGV0IHggPSAwO1xuICBsZXQgeSA9IDA7XG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIGNvbnN0IHZpc3VhbFZpZXdwb3J0QmFzZWQgPSBpc1dlYktpdCgpO1xuICAgIGlmICghdmlzdWFsVmlld3BvcnRCYXNlZCB8fCB2aXN1YWxWaWV3cG9ydEJhc2VkICYmIHN0cmF0ZWd5ID09PSAnZml4ZWQnKSB7XG4gICAgICB4ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdDtcbiAgICAgIHkgPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG4gIGNvbnN0IHdpbmRvd1Njcm9sbGJhclggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGh0bWwpO1xuICAvLyA8aHRtbD4gYG92ZXJmbG93OiBoaWRkZW5gICsgYHNjcm9sbGJhci1ndXR0ZXI6IHN0YWJsZWAgcmVkdWNlcyB0aGVcbiAgLy8gdmlzdWFsIHdpZHRoIG9mIHRoZSA8aHRtbD4gYnV0IHRoaXMgaXMgbm90IGNvbnNpZGVyZWQgaW4gdGhlIHNpemVcbiAgLy8gb2YgYGh0bWwuY2xpZW50V2lkdGhgLlxuICBpZiAod2luZG93U2Nyb2xsYmFyWCA8PSAwKSB7XG4gICAgY29uc3QgZG9jID0gaHRtbC5vd25lckRvY3VtZW50O1xuICAgIGNvbnN0IGJvZHkgPSBkb2MuYm9keTtcbiAgICBjb25zdCBib2R5U3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZShib2R5KTtcbiAgICBjb25zdCBib2R5TWFyZ2luSW5saW5lID0gZG9jLmNvbXBhdE1vZGUgPT09ICdDU1MxQ29tcGF0JyA/IHBhcnNlRmxvYXQoYm9keVN0eWxlcy5tYXJnaW5MZWZ0KSArIHBhcnNlRmxvYXQoYm9keVN0eWxlcy5tYXJnaW5SaWdodCkgfHwgMCA6IDA7XG4gICAgY29uc3QgY2xpcHBpbmdTdGFibGVTY3JvbGxiYXJXaWR0aCA9IE1hdGguYWJzKGh0bWwuY2xpZW50V2lkdGggLSBib2R5LmNsaWVudFdpZHRoIC0gYm9keU1hcmdpbklubGluZSk7XG4gICAgaWYgKGNsaXBwaW5nU3RhYmxlU2Nyb2xsYmFyV2lkdGggPD0gU0NST0xMQkFSX01BWCkge1xuICAgICAgd2lkdGggLT0gY2xpcHBpbmdTdGFibGVTY3JvbGxiYXJXaWR0aDtcbiAgICB9XG4gIH0gZWxzZSBpZiAod2luZG93U2Nyb2xsYmFyWCA8PSBTQ1JPTExCQVJfTUFYKSB7XG4gICAgLy8gSWYgdGhlIDxib2R5PiBzY3JvbGxiYXIgaXMgb24gdGhlIGxlZnQsIHRoZSB3aWR0aCBuZWVkcyB0byBiZSBleHRlbmRlZFxuICAgIC8vIGJ5IHRoZSBzY3JvbGxiYXIgYW1vdW50IHNvIHRoZXJlIGlzbid0IGV4dHJhIHNwYWNlIG9uIHRoZSByaWdodC5cbiAgICB3aWR0aCArPSB3aW5kb3dTY3JvbGxiYXJYO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5jb25zdCBhYnNvbHV0ZU9yRml4ZWQgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2Fic29sdXRlJywgJ2ZpeGVkJ10pO1xuLy8gUmV0dXJucyB0aGUgaW5uZXIgY2xpZW50IHJlY3QsIHN1YnRyYWN0aW5nIHNjcm9sbGJhcnMgaWYgcHJlc2VudC5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICBjb25zdCB0b3AgPSBjbGllbnRSZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICBjb25zdCBsZWZ0ID0gY2xpZW50UmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICBjb25zdCBzY2FsZSA9IGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRTY2FsZShlbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgd2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoICogc2NhbGUueDtcbiAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQgKiBzY2FsZS55O1xuICBjb25zdCB4ID0gbGVmdCAqIHNjYWxlLng7XG4gIGNvbnN0IHkgPSB0b3AgKiBzY2FsZS55O1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkge1xuICBsZXQgcmVjdDtcbiAgaWYgKGNsaXBwaW5nQW5jZXN0b3IgPT09ICd2aWV3cG9ydCcpIHtcbiAgICByZWN0ID0gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KTtcbiAgfSBlbHNlIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAnZG9jdW1lbnQnKSB7XG4gICAgcmVjdCA9IGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpO1xuICB9IGVsc2UgaWYgKGlzRWxlbWVudChjbGlwcGluZ0FuY2VzdG9yKSkge1xuICAgIHJlY3QgPSBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IGdldFZpc3VhbE9mZnNldHMoZWxlbWVudCk7XG4gICAgcmVjdCA9IHtcbiAgICAgIHg6IGNsaXBwaW5nQW5jZXN0b3IueCAtIHZpc3VhbE9mZnNldHMueCxcbiAgICAgIHk6IGNsaXBwaW5nQW5jZXN0b3IueSAtIHZpc3VhbE9mZnNldHMueSxcbiAgICAgIHdpZHRoOiBjbGlwcGluZ0FuY2VzdG9yLndpZHRoLFxuICAgICAgaGVpZ2h0OiBjbGlwcGluZ0FuY2VzdG9yLmhlaWdodFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3QocmVjdCk7XG59XG5mdW5jdGlvbiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgc3RvcE5vZGUpIHtcbiAgY29uc3QgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIGlmIChwYXJlbnROb2RlID09PSBzdG9wTm9kZSB8fCAhaXNFbGVtZW50KHBhcmVudE5vZGUpIHx8IGlzTGFzdFRyYXZlcnNhYmxlTm9kZShwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSQxKHBhcmVudE5vZGUpLnBvc2l0aW9uID09PSAnZml4ZWQnIHx8IGhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvcihwYXJlbnROb2RlLCBzdG9wTm9kZSk7XG59XG5cbi8vIEEgXCJjbGlwcGluZyBhbmNlc3RvclwiIGlzIGFuIGBvdmVyZmxvd2AgZWxlbWVudCB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgY2hpbGQgZWxlbWVudHMuIFRoaXMgcmV0dXJucyBhbGwgY2xpcHBpbmcgYW5jZXN0b3JzXG4vLyBvZiB0aGUgZ2l2ZW4gZWxlbWVudCB1cCB0aGUgdHJlZS5cbmZ1bmN0aW9uIGdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyhlbGVtZW50LCBjYWNoZSkge1xuICBjb25zdCBjYWNoZWRSZXN1bHQgPSBjYWNoZS5nZXQoZWxlbWVudCk7XG4gIGlmIChjYWNoZWRSZXN1bHQpIHtcbiAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICB9XG4gIGxldCByZXN1bHQgPSBnZXRPdmVyZmxvd0FuY2VzdG9ycyhlbGVtZW50LCBbXSwgZmFsc2UpLmZpbHRlcihlbCA9PiBpc0VsZW1lbnQoZWwpICYmIGdldE5vZGVOYW1lKGVsKSAhPT0gJ2JvZHknKTtcbiAgbGV0IGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgY29uc3QgZWxlbWVudElzRml4ZWQgPSBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCc7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgd2hpbGUgKGlzRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSQxKGN1cnJlbnROb2RlKTtcbiAgICBjb25zdCBjdXJyZW50Tm9kZUlzQ29udGFpbmluZyA9IGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKTtcbiAgICBpZiAoIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc2hvdWxkRHJvcEN1cnJlbnROb2RlID0gZWxlbWVudElzRml4ZWQgPyAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlIDogIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdzdGF0aWMnICYmICEhY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgJiYgYWJzb2x1dGVPckZpeGVkLmhhcyhjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZS5wb3NpdGlvbikgfHwgaXNPdmVyZmxvd0VsZW1lbnQoY3VycmVudE5vZGUpICYmICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgY3VycmVudE5vZGUpO1xuICAgIGlmIChzaG91bGREcm9wQ3VycmVudE5vZGUpIHtcbiAgICAgIC8vIERyb3Agbm9uLWNvbnRhaW5pbmcgYmxvY2tzLlxuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihhbmNlc3RvciA9PiBhbmNlc3RvciAhPT0gY3VycmVudE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWNvcmQgbGFzdCBjb250YWluaW5nIGJsb2NrIGZvciBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICBjYWNoZS5zZXQoZWxlbWVudCwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgYW5jZXN0b3JzLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBlbGVtZW50LFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9ID0gX3JlZjtcbiAgY29uc3QgZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ0FuY2VzdG9ycycgPyBpc1RvcExheWVyKGVsZW1lbnQpID8gW10gOiBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMoZWxlbWVudCwgdGhpcy5fYykgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICBjb25zdCBjbGlwcGluZ0FuY2VzdG9ycyA9IFsuLi5lbGVtZW50Q2xpcHBpbmdBbmNlc3RvcnMsIHJvb3RCb3VuZGFyeV07XG4gIGNvbnN0IGZpcnN0Q2xpcHBpbmdBbmNlc3RvciA9IGNsaXBwaW5nQW5jZXN0b3JzWzBdO1xuICBjb25zdCBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ0FuY2VzdG9ycy5yZWR1Y2UoKGFjY1JlY3QsIGNsaXBwaW5nQW5jZXN0b3IpID0+IHtcbiAgICBjb25zdCByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgZmlyc3RDbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICBoZWlnaHQ6IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wLFxuICAgIHg6IGNsaXBwaW5nUmVjdC5sZWZ0LFxuICAgIHk6IGNsaXBwaW5nUmVjdC50b3BcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGVsZW1lbnQsIG9mZnNldFBhcmVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuXG4gIC8vIElmIHRoZSA8Ym9keT4gc2Nyb2xsYmFyIGFwcGVhcnMgb24gdGhlIGxlZnQgKGUuZy4gUlRMIHN5c3RlbXMpLiBVc2VcbiAgLy8gRmlyZWZveCB3aXRoIGxheW91dC5zY3JvbGxiYXIuc2lkZSA9IDMgaW4gYWJvdXQ6Y29uZmlnIHRvIHRlc3QgdGhpcy5cbiAgZnVuY3Rpb24gc2V0TGVmdFJUTFNjcm9sbGJhck9mZnNldCgpIHtcbiAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gIH1cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IG9mZnNldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlLCBpc0ZpeGVkLCBvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0KCk7XG4gICAgfVxuICB9XG4gIGlmIChpc0ZpeGVkICYmICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiBkb2N1bWVudEVsZW1lbnQpIHtcbiAgICBzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0KCk7XG4gIH1cbiAgY29uc3QgaHRtbE9mZnNldCA9IGRvY3VtZW50RWxlbWVudCAmJiAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQgPyBnZXRIVE1MT2Zmc2V0KGRvY3VtZW50RWxlbWVudCwgc2Nyb2xsKSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgY29uc3QgeCA9IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54IC0gaHRtbE9mZnNldC54O1xuICBjb25zdCB5ID0gcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55IC0gaHRtbE9mZnNldC55O1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGljUG9zaXRpb25lZChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnO1xufVxuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAocG9seWZpbGwpIHtcbiAgICByZXR1cm4gcG9seWZpbGwoZWxlbWVudCk7XG4gIH1cbiAgbGV0IHJhd09mZnNldFBhcmVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXG4gIC8vIEZpcmVmb3ggcmV0dXJucyB0aGUgPGh0bWw+IGVsZW1lbnQgYXMgdGhlIG9mZnNldFBhcmVudCBpZiBpdCdzIG5vbi1zdGF0aWMsXG4gIC8vIHdoaWxlIENocm9tZSBhbmQgU2FmYXJpIHJldHVybiB0aGUgPGJvZHk+IGVsZW1lbnQuIFRoZSA8Ym9keT4gZWxlbWVudCBtdXN0XG4gIC8vIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUgY29ycmVjdCBjYWxjdWxhdGlvbnMgZXZlbiBpZiB0aGUgPGh0bWw+IGVsZW1lbnQgaXNcbiAgLy8gbm9uLXN0YXRpYy5cbiAgaWYgKGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSA9PT0gcmF3T2Zmc2V0UGFyZW50KSB7XG4gICAgcmF3T2Zmc2V0UGFyZW50ID0gcmF3T2Zmc2V0UGFyZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuICByZXR1cm4gcmF3T2Zmc2V0UGFyZW50O1xufVxuXG4vLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgaWYgKGlzVG9wTGF5ZXIoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIGxldCBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICAgIHdoaWxlIChzdmdPZmZzZXRQYXJlbnQgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICBpZiAoaXNFbGVtZW50KHN2Z09mZnNldFBhcmVudCkgJiYgIWlzU3RhdGljUG9zaXRpb25lZChzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiBzdmdPZmZzZXRQYXJlbnQ7XG4gICAgICB9XG4gICAgICBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKHN2Z09mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIHJldHVybiB3aW47XG4gIH1cbiAgbGV0IG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpO1xuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCwgcG9seWZpbGwpO1xuICB9XG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgaXNMYXN0VHJhdmVyc2FibGVOb2RlKG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkgJiYgIWlzQ29udGFpbmluZ0Jsb2NrKG9mZnNldFBhcmVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbjtcbn1cblxuY29uc3QgZ2V0RWxlbWVudFJlY3RzID0gYXN5bmMgZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgZ2V0T2Zmc2V0UGFyZW50Rm4gPSB0aGlzLmdldE9mZnNldFBhcmVudCB8fCBnZXRPZmZzZXRQYXJlbnQ7XG4gIGNvbnN0IGdldERpbWVuc2lvbnNGbiA9IHRoaXMuZ2V0RGltZW5zaW9ucztcbiAgY29uc3QgZmxvYXRpbmdEaW1lbnNpb25zID0gYXdhaXQgZ2V0RGltZW5zaW9uc0ZuKGRhdGEuZmxvYXRpbmcpO1xuICByZXR1cm4ge1xuICAgIHJlZmVyZW5jZTogZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoZGF0YS5yZWZlcmVuY2UsIGF3YWl0IGdldE9mZnNldFBhcmVudEZuKGRhdGEuZmxvYXRpbmcpLCBkYXRhLnN0cmF0ZWd5KSxcbiAgICBmbG9hdGluZzoge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB3aWR0aDogZmxvYXRpbmdEaW1lbnNpb25zLndpZHRoLFxuICAgICAgaGVpZ2h0OiBmbG9hdGluZ0RpbWVuc2lvbnMuaGVpZ2h0XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNSVEwoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSQxKGVsZW1lbnQpLmRpcmVjdGlvbiA9PT0gJ3J0bCc7XG59XG5cbmNvbnN0IHBsYXRmb3JtID0ge1xuICBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCxcbiAgZ2V0RG9jdW1lbnRFbGVtZW50LFxuICBnZXRDbGlwcGluZ1JlY3QsXG4gIGdldE9mZnNldFBhcmVudCxcbiAgZ2V0RWxlbWVudFJlY3RzLFxuICBnZXRDbGllbnRSZWN0cyxcbiAgZ2V0RGltZW5zaW9ucyxcbiAgZ2V0U2NhbGUsXG4gIGlzRWxlbWVudCxcbiAgaXNSVExcbn07XG5cbmZ1bmN0aW9uIHJlY3RzQXJlRXF1YWwoYSwgYikge1xuICByZXR1cm4gYS54ID09PSBiLnggJiYgYS55ID09PSBiLnkgJiYgYS53aWR0aCA9PT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PT0gYi5oZWlnaHQ7XG59XG5cbi8vIGh0dHBzOi8vc2FtdGhvci5hdS8yMDIxL29ic2VydmluZy1kb20vXG5mdW5jdGlvbiBvYnNlcnZlTW92ZShlbGVtZW50LCBvbk1vdmUpIHtcbiAgbGV0IGlvID0gbnVsbDtcbiAgbGV0IHRpbWVvdXRJZDtcbiAgY29uc3Qgcm9vdCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICB2YXIgX2lvO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgIChfaW8gPSBpbykgPT0gbnVsbCB8fCBfaW8uZGlzY29ubmVjdCgpO1xuICAgIGlvID0gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiByZWZyZXNoKHNraXAsIHRocmVzaG9sZCkge1xuICAgIGlmIChza2lwID09PSB2b2lkIDApIHtcbiAgICAgIHNraXAgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJlc2hvbGQgPSAxO1xuICAgIH1cbiAgICBjbGVhbnVwKCk7XG4gICAgY29uc3QgZWxlbWVudFJlY3RGb3JSb290TWFyZ2luID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB7XG4gICAgICBsZWZ0LFxuICAgICAgdG9wLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9ID0gZWxlbWVudFJlY3RGb3JSb290TWFyZ2luO1xuICAgIGlmICghc2tpcCkge1xuICAgICAgb25Nb3ZlKCk7XG4gICAgfVxuICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnNldFRvcCA9IGZsb29yKHRvcCk7XG4gICAgY29uc3QgaW5zZXRSaWdodCA9IGZsb29yKHJvb3QuY2xpZW50V2lkdGggLSAobGVmdCArIHdpZHRoKSk7XG4gICAgY29uc3QgaW5zZXRCb3R0b20gPSBmbG9vcihyb290LmNsaWVudEhlaWdodCAtICh0b3AgKyBoZWlnaHQpKTtcbiAgICBjb25zdCBpbnNldExlZnQgPSBmbG9vcihsZWZ0KTtcbiAgICBjb25zdCByb290TWFyZ2luID0gLWluc2V0VG9wICsgXCJweCBcIiArIC1pbnNldFJpZ2h0ICsgXCJweCBcIiArIC1pbnNldEJvdHRvbSArIFwicHggXCIgKyAtaW5zZXRMZWZ0ICsgXCJweFwiO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICByb290TWFyZ2luLFxuICAgICAgdGhyZXNob2xkOiBtYXgoMCwgbWluKDEsIHRocmVzaG9sZCkpIHx8IDFcbiAgICB9O1xuICAgIGxldCBpc0ZpcnN0VXBkYXRlID0gdHJ1ZTtcbiAgICBmdW5jdGlvbiBoYW5kbGVPYnNlcnZlKGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IHJhdGlvID0gZW50cmllc1swXS5pbnRlcnNlY3Rpb25SYXRpbztcbiAgICAgIGlmIChyYXRpbyAhPT0gdGhyZXNob2xkKSB7XG4gICAgICAgIGlmICghaXNGaXJzdFVwZGF0ZSkge1xuICAgICAgICAgIHJldHVybiByZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyYXRpbykge1xuICAgICAgICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgY2xpcHBlZCwgdGhlIHJhdGlvIGlzIDAuIFRocm90dGxlIHRoZSByZWZyZXNoXG4gICAgICAgICAgLy8gdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIG9mIHVwZGF0ZXMuXG4gICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZWZyZXNoKGZhbHNlLCAxZS03KTtcbiAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZyZXNoKGZhbHNlLCByYXRpbyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyYXRpbyA9PT0gMSAmJiAhcmVjdHNBcmVFcXVhbChlbGVtZW50UmVjdEZvclJvb3RNYXJnaW4sIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKSB7XG4gICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBldmVuIHRob3VnaCB0aGUgcmF0aW8gaXMgcmVwb3J0ZWQgYXMgMSwgdGhlXG4gICAgICAgIC8vIGVsZW1lbnQgaXMgbm90IGFjdHVhbGx5IGZ1bGx5IHdpdGhpbiB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIncyByb290XG4gICAgICAgIC8vIGFyZWEgYW55bW9yZS4gVGhpcyBjYW4gaGFwcGVuIHVuZGVyIHBlcmZvcm1hbmNlIGNvbnN0cmFpbnRzLiBUaGlzIG1heVxuICAgICAgICAvLyBiZSBhIGJ1ZyBpbiB0aGUgYnJvd3NlcidzIEludGVyc2VjdGlvbk9ic2VydmVyIGltcGxlbWVudGF0aW9uLiBUb1xuICAgICAgICAvLyB3b3JrIGFyb3VuZCB0aGlzLCB3ZSBjb21wYXJlIHRoZSBlbGVtZW50J3MgYm91bmRpbmcgcmVjdCBub3cgd2l0aFxuICAgICAgICAvLyB3aGF0IGl0IHdhcyBhdCB0aGUgdGltZSB3ZSBjcmVhdGVkIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlci4gSWYgdGhleVxuICAgICAgICAvLyBhcmUgbm90IGVxdWFsIHRoZW4gdGhlIGVsZW1lbnQgbW92ZWQsIHNvIHdlIHJlZnJlc2guXG4gICAgICAgIHJlZnJlc2goKTtcbiAgICAgIH1cbiAgICAgIGlzRmlyc3RVcGRhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBPbGRlciBicm93c2VycyBkb24ndCBzdXBwb3J0IGEgYGRvY3VtZW50YCBhcyB0aGUgcm9vdCBhbmQgd2lsbCB0aHJvdyBhblxuICAgIC8vIGVycm9yLlxuICAgIHRyeSB7XG4gICAgICBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihoYW5kbGVPYnNlcnZlLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIC8vIEhhbmRsZSA8aWZyYW1lPnNcbiAgICAgICAgcm9vdDogcm9vdC5vd25lckRvY3VtZW50XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChfZSkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlvLm9ic2VydmUoZWxlbWVudCk7XG4gIH1cbiAgcmVmcmVzaCh0cnVlKTtcbiAgcmV0dXJuIGNsZWFudXA7XG59XG5cbi8qKlxuICogQXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCB3aGVuIG5lY2Vzc2FyeS5cbiAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzIG1vdW50ZWQgb24gdGhlIERPTSBvclxuICogdmlzaWJsZSBvbiB0aGUgc2NyZWVuLlxuICogQHJldHVybnMgY2xlYW51cCBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBpbnZva2VkIHdoZW4gdGhlIGZsb2F0aW5nIGVsZW1lbnQgaXNcbiAqIHJlbW92ZWQgZnJvbSB0aGUgRE9NIG9yIGhpZGRlbiBmcm9tIHRoZSBzY3JlZW4uXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1VwZGF0ZVxuICovXG5mdW5jdGlvbiBhdXRvVXBkYXRlKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHVwZGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICBhbmNlc3RvclNjcm9sbCA9IHRydWUsXG4gICAgYW5jZXN0b3JSZXNpemUgPSB0cnVlLFxuICAgIGVsZW1lbnRSZXNpemUgPSB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgbGF5b3V0U2hpZnQgPSB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgYW5pbWF0aW9uRnJhbWUgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVmZXJlbmNlRWwgPSB1bndyYXBFbGVtZW50KHJlZmVyZW5jZSk7XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGFuY2VzdG9yU2Nyb2xsIHx8IGFuY2VzdG9yUmVzaXplID8gWy4uLihyZWZlcmVuY2VFbCA/IGdldE92ZXJmbG93QW5jZXN0b3JzKHJlZmVyZW5jZUVsKSA6IFtdKSwgLi4uZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZmxvYXRpbmcpXSA6IFtdO1xuICBhbmNlc3RvcnMuZm9yRWFjaChhbmNlc3RvciA9PiB7XG4gICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfSk7XG4gICAgYW5jZXN0b3JSZXNpemUgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlKTtcbiAgfSk7XG4gIGNvbnN0IGNsZWFudXBJbyA9IHJlZmVyZW5jZUVsICYmIGxheW91dFNoaWZ0ID8gb2JzZXJ2ZU1vdmUocmVmZXJlbmNlRWwsIHVwZGF0ZSkgOiBudWxsO1xuICBsZXQgcmVvYnNlcnZlRnJhbWUgPSAtMTtcbiAgbGV0IHJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgaWYgKGVsZW1lbnRSZXNpemUpIHtcbiAgICByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihfcmVmID0+IHtcbiAgICAgIGxldCBbZmlyc3RFbnRyeV0gPSBfcmVmO1xuICAgICAgaWYgKGZpcnN0RW50cnkgJiYgZmlyc3RFbnRyeS50YXJnZXQgPT09IHJlZmVyZW5jZUVsICYmIHJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIC8vIFByZXZlbnQgdXBkYXRlIGxvb3BzIHdoZW4gdXNpbmcgdGhlIGBzaXplYCBtaWRkbGV3YXJlLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzE3NDBcbiAgICAgICAgcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmVvYnNlcnZlRnJhbWUpO1xuICAgICAgICByZW9ic2VydmVGcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdmFyIF9yZXNpemVPYnNlcnZlcjtcbiAgICAgICAgICAoX3Jlc2l6ZU9ic2VydmVyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoZmxvYXRpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIGlmIChyZWZlcmVuY2VFbCAmJiAhYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUocmVmZXJlbmNlRWwpO1xuICAgIH1cbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgfVxuICBsZXQgZnJhbWVJZDtcbiAgbGV0IHByZXZSZWZSZWN0ID0gYW5pbWF0aW9uRnJhbWUgPyBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKSA6IG51bGw7XG4gIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgIGZyYW1lTG9vcCgpO1xuICB9XG4gIGZ1bmN0aW9uIGZyYW1lTG9vcCgpIHtcbiAgICBjb25zdCBuZXh0UmVmUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2UpO1xuICAgIGlmIChwcmV2UmVmUmVjdCAmJiAhcmVjdHNBcmVFcXVhbChwcmV2UmVmUmVjdCwgbmV4dFJlZlJlY3QpKSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gICAgcHJldlJlZlJlY3QgPSBuZXh0UmVmUmVjdDtcbiAgICBmcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lTG9vcCk7XG4gIH1cbiAgdXBkYXRlKCk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgdmFyIF9yZXNpemVPYnNlcnZlcjI7XG4gICAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlKTtcbiAgICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gICAgfSk7XG4gICAgY2xlYW51cElvID09IG51bGwgfHwgY2xlYW51cElvKCk7XG4gICAgKF9yZXNpemVPYnNlcnZlcjIgPSByZXNpemVPYnNlcnZlcikgPT0gbnVsbCB8fCBfcmVzaXplT2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTtcbiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgaWYgKGFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZUlkKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5jb25zdCBkZXRlY3RPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93JDE7XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IG9mZnNldCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGF1dG9QbGFjZW1lbnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gc2hpZnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmbGlwJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IOKAlFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IHNpemUkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBoaWRlJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gYXJyb3ckMTtcblxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gaW5saW5lJDE7XG5cbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBsaW1pdFNoaWZ0JDE7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSAocmVmZXJlbmNlLCBmbG9hdGluZywgb3B0aW9ucykgPT4ge1xuICAvLyBUaGlzIGNhY2hlcyB0aGUgZXhwZW5zaXZlIGBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnNgIGZ1bmN0aW9uIHNvIHRoYXRcbiAgLy8gbXVsdGlwbGUgbGlmZWN5Y2xlIHJlc2V0cyByZS11c2UgdGhlIHNhbWUgcmVzdWx0LiBJdCBvbmx5IGxpdmVzIGZvciBhXG4gIC8vIHNpbmdsZSBjYWxsLiBJZiBvdGhlciBmdW5jdGlvbnMgYmVjb21lIGV4cGVuc2l2ZSwgd2UgY2FuIGFkZCB0aGVtIGFzIHdlbGwuXG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcCgpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0ge1xuICAgIHBsYXRmb3JtLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgY29uc3QgcGxhdGZvcm1XaXRoQ2FjaGUgPSB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucy5wbGF0Zm9ybSxcbiAgICBfYzogY2FjaGVcbiAgfTtcbiAgcmV0dXJuIGNvbXB1dGVQb3NpdGlvbiQxKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgIHBsYXRmb3JtOiBwbGF0Zm9ybVdpdGhDYWNoZVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgcGxhdGZvcm0sIHNoaWZ0LCBzaXplIH07XG4iLCJpbXBvcnQgeyBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24gfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuXG5leHBvcnQgY29uc3QgUVVJQ0tfRVZFTlQgPSB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IHRydWUgfTtcbmV4cG9ydCBjb25zdCBJU19CUk9XU0VSID1cblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCI7XG5cbi8vIFRPRE86IERvY3VtZW50YXRpb24gZm9yIHByZXR0eU51bWJlclxubGV0IElOVExfTlVNOiBJbnRsLk51bWJlckZvcm1hdCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwcmV0dHlOdW1iZXIobnVtYmVyOiBudW1iZXIgfCBzdHJpbmcpIHtcblx0aWYgKCFJTlRMX05VTSlcblx0XHRJTlRMX05VTSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcblx0XHRcdChJU19CUk9XU0VSICYmIGF0dHIoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBcImxhbmdcIikpIHx8IFwibm9cIixcblx0XHQpO1xuXHRyZXR1cm4gSU5UTF9OVU0uZm9ybWF0KE51bWJlcihudW1iZXIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlPFQgZXh0ZW5kcyB1bmtub3duW10+KFxuXHRjYWxsYmFjazogKC4uLmFyZ3M6IFQpID0+IHZvaWQsXG5cdGRlbGF5OiBudW1iZXIsXG4pIHtcblx0bGV0IHRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcblxuXHRyZXR1cm4gKC4uLmFyZ3M6IFQpID0+IHtcblx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRcdHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBjYWxsYmFjayguLi5hcmdzKSwgZGVsYXkpO1xuXHR9O1xufVxuXG4vKipcbiAqIGF0dHJcbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgZ2V0LCBzZXQgYW5kIHJlbW92ZSBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gZWwgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gbmFtZSBUaGUgYXR0cmlidXRlIG5hbWUgdG8gZ2V0LCBzZXQgb3IgcmVtb3ZlLCBvciBhIG9iamVjdCB0byBzZXQgbXVsdGlwbGUgYXR0cmlidXRlc1xuICogQHBhcmFtIHZhbHVlIEEgdmFsaWQgYXR0cmlidXRlIHZhbHVlIG9yIG51bGwgdG8gcmVtb3ZlIGF0dHJpYnV0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0cihcblx0ZWw6IEVsZW1lbnQsXG5cdG5hbWU6IHN0cmluZyxcblx0dmFsdWU/OiBzdHJpbmcgfCBudWxsLFxuKTogc3RyaW5nIHwgbnVsbCB7XG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpID8/IG51bGw7IC8vIEZhbGxiYWNrIHRvIG51bGwgb25seSBpZiBlbCBpcyB1bmRlZmluZWRcblx0aWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG5cdHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIHVzZUlkXG4gKiBAcmV0dXJuIEEgZ2VuZXJhdGVkIHVuaXF1ZSBJRFxuICovXG5sZXQgaWQgPSAwO1xuY29uc3QgVVVJRCA9IGAke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgNSl9YDtcbmV4cG9ydCBmdW5jdGlvbiB1c2VJZChlbDogRWxlbWVudCkge1xuXHRpZiAoIWVsLmlkKSBlbC5pZCA9IGAke1VVSUR9JHsrK2lkfWA7XG5cdHJldHVybiBlbC5pZDtcbn1cblxuLy8gSW50ZXJuYWwgaGVscGVyIGZvciBvbiAvIG9mZlxuY29uc3QgZXZlbnRzID0gKFxuXHRhY3Rpb246IFwiYWRkXCIgfCBcInJlbW92ZVwiLFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHRbLi4ucmVzdF06IFBhcmFtZXRlcnM8dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI+LCAvLyBTcHJlYXQgdG8gbWFrZSBhIGNvcHkgb2YgdGhlIGFycmF5XG4pOiB2b2lkID0+IHtcblx0Zm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG5cdFx0cmVzdFswXSA9IHR5cGU7XG5cdFx0ZWxlbWVudFtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdKC4uLnJlc3QpO1xuXHR9XG59O1xuXG4vKipcbiAqIG9uXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9uID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiB7XG5cdGlmIChVTkJJTkQgJiYgKGVsZW1lbnQgPT09IHdpbmRvdyB8fCBlbGVtZW50ID09PSBkb2N1bWVudCkpXG5cdFx0VU5CSU5ELnB1c2goKCkgPT4gb2ZmKGVsZW1lbnQsIC4uLnJlc3QpKTtcblx0ZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xufTtcblxuLyoqXG4gKiBvZmZcbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIHR5cGVzIEEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBldmVudCB0eXBlc1xuICogQHBhcmFtIGxpc3RlbmVyIEFuIGV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uIG9yIGxpc3RlbmVyIG9iamVjdFxuICovXG5leHBvcnQgY29uc3Qgb2ZmID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIFdpbmRvdyB7XG5cdFx0X210ZHNVbmJpbmRFdmVudHM/OiBNYXA8c3RyaW5nLCBBcnJheTwoKSA9PiB2b2lkPj47XG5cdH1cbn1cblxuLyoqXG4gKiBvbkxvYWRlZFxuICogQGRlc2NyaXB0aW9uIFJ1bnMgYSBjYWxsYmFjayB3aGVuIHdpbmRvdyBpcyBsb2FkZWQgaW4gYnJvd3NlciwgYW5kIGVuc3VyZXMgZXZlbnRzIGFyZSB1bmJvdW5kIGlmIGhvdCByZWxvYWRpbmdcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gdGhlIHBhZ2UgaXMgcmVhZHlcbiAqL1xubGV0IFVOQklORDogQXJyYXk8KCkgPT4gdm9pZD4gfCBudWxsID0gbnVsbDtcbmV4cG9ydCBjb25zdCBvbkxvYWRlZCA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuXHRpZiAoIUlTX0JST1dTRVIgfHwgIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHJldHVybjsgLy8gU2tpcCBpZiBub3QgaW4gYnJvd3NlciBlbnZpcm9ubWVudFxuXHRpZiAoIXdpbmRvdy5fbXRkc1VuYmluZEV2ZW50cykgd2luZG93Ll9tdGRzVW5iaW5kRXZlbnRzID0gbmV3IE1hcCgpO1xuXG5cdGNvbnN0IHJ1biA9ICgpID0+XG5cdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRcdGNvbnN0IGtleSA9IFN0cmluZyhjYWxsYmFjaykucmVwbGFjZSgvKFxcbnxcXHMpL2csIFwiXCIpO1xuXHRcdFx0d2luZG93Ll9tdGRzVW5iaW5kRXZlbnRzPy5nZXQoa2V5KT8uZm9yRWFjaCgodW5iaW5kKSA9PiB7XG5cdFx0XHRcdHVuYmluZCgpOyAvLyBVbmJpbmQgcHJldmlvdXMgZXZlbnRzXG5cdFx0XHR9KTtcblx0XHRcdFVOQklORCA9IFtdOyAvLyBQcmVwYXJlIHRvIGxpc3RlbiBmb3IgbmV3bHkgYm91bmQgZXZlbnRzXG5cdFx0XHRjYWxsYmFjaygpOyAvLyBSdW4gYmluZGluZ1xuXHRcdFx0d2luZG93Ll9tdGRzVW5iaW5kRXZlbnRzPy5zZXQoa2V5LCBVTkJJTkQ/LnNsaWNlKDApKTsgLy8gU3RvcmUgZm9yIGxhdGVyIHVuYmluZGluZ1xuXHRcdFx0VU5CSU5EID0gbnVsbDsgLy8gU3RvcCBsaXN0ZW5pbmcgZm9yIG5ld2x5IGJvdW5kIGV2ZW50c1xuXHRcdH0pO1xuXG5cdGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHJ1bigpO1xuXHRlbHNlIG9uKHdpbmRvdywgXCJsb2FkXCIsIHJ1bik7XG59O1xuXG5jb25zdCBBTkNIT1JFRCA9IG5ldyBXZWFrTWFwPEVsZW1lbnQsIFJldHVyblR5cGU8dHlwZW9mIGF1dG9VcGRhdGU+PigpO1xuZXhwb3J0IGZ1bmN0aW9uIGFuY2hvclBvc2l0aW9uKFxuXHR0YXJnZXQ6IEhUTUxFbGVtZW50LFxuXHRhbmNob3I6IGZhbHNlIHwgRWxlbWVudCxcblx0b3B0aW9ucz86IFBhcmFtZXRlcnM8dHlwZW9mIGNvbXB1dGVQb3NpdGlvbj5bMl0sXG4pIHtcblx0QU5DSE9SRUQuZ2V0KHRhcmdldCk/LigpOyAvLyBVbmJpbmQgcHJldmlvdXMgYW5jaG9yIHBvc2l0aW9uXG5cdEFOQ0hPUkVELmRlbGV0ZSh0YXJnZXQpO1xuXG5cdGlmIChhbmNob3IpXG5cdFx0QU5DSE9SRUQuc2V0KFxuXHRcdFx0dGFyZ2V0LFxuXHRcdFx0YXV0b1VwZGF0ZShhbmNob3IsIHRhcmdldCwgKCkgPT4ge1xuXHRcdFx0XHRpZiAoIXRhcmdldC5pc0Nvbm5lY3RlZCB8fCAhYW5jaG9yLmlzQ29ubmVjdGVkIHx8IHRhcmdldC5oaWRkZW4pXG5cdFx0XHRcdFx0cmV0dXJuIGFuY2hvclBvc2l0aW9uKHRhcmdldCwgZmFsc2UpO1xuXHRcdFx0XHRjb21wdXRlUG9zaXRpb24oYW5jaG9yLCB0YXJnZXQsIG9wdGlvbnMpLnRoZW4oKHsgeCwgeSB9KSA9PiB7XG5cdFx0XHRcdFx0dGFyZ2V0LnN0eWxlLmxlZnQgPSBgJHt4fXB4YDtcblx0XHRcdFx0XHR0YXJnZXQuc3R5bGUudG9wID0gYCR7eX1weGA7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSksXG5cdFx0KTtcbn1cblxuLyoqXG4gKiBTcGVlZCB1cCBNdXRhdGlvbk9ic2VydmVyIGJ5IGRlYm91bmNpbmcgYW5kIG9ubHkgcnVubmluZyB3aGVuIHBhZ2UgaXMgdmlzaWJsZVxuICogQHJldHVybiBuZXcgTXV0YWlvbk9ic2VydmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrOiBNdXRhdGlvbkNhbGxiYWNrKSB7XG5cdGxldCBxdWV1ZSA9IDA7XG5cblx0Y29uc3Qgb25GcmFtZSA9ICgpID0+IHNldFRpbWVvdXQob25UaW1lciwgMjAwKTsgLy8gVXNlIGJvdGggcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGFuZCBzZXRUaW1lb3V0IHRvIGRlYm91bmNlIGFuZCBvbmx5IHJ1biB3aGVuIHZpc2libGVcblx0Y29uc3Qgb25UaW1lciA9ICgpID0+IHtcblx0XHRjYWxsYmFjayhbXSwgb2JzZXJ2ZXIpO1xuXHRcdG9ic2VydmVyLnRha2VSZWNvcmRzKCk7IC8vIENsZWFyIHJlY29yZHMgdG8gYXZvaWQgcnVubmluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuXHRcdHF1ZXVlID0gMDtcblx0fTtcblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG5cdFx0aWYgKCFxdWV1ZSkgcXVldWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUob25GcmFtZSk7XG5cdH0pO1xuXG5cdHJldHVybiBvYnNlcnZlcjtcbn1cblxuLyoqXG4gKiBvbk11dGF0aW9uXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IG9ic2VydmUgbXV0YXRpb25zIG9uIGEgc3BlY2lmaWMgY2xhc3MgbmFtZVxuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgY2xhc3MgbmFtZSB0byBvYnNlcnZlXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHJ1biB3aGVuIG11dGF0aW9ucyBhcmUgZGV0ZWN0ZWRcbiAqL1xuY29uc3QgTVVUQVRPUlMgPSBuZXcgV2Vha01hcDxFbGVtZW50LCBBcnJheTwoKSA9PiB2b2lkPj4oKTtcbmV4cG9ydCBjb25zdCBvbk11dGF0aW9uID0gPFQgZXh0ZW5kcyBFbGVtZW50Pihcblx0ZWw6IEVsZW1lbnQsXG5cdGNsYXNzTmFtZTogc3RyaW5nLFxuXHRjYWxsYmFjazogKGVsZW1zOiBIVE1MQ29sbGVjdGlvbk9mPFQ+KSA9PiB2b2lkLFxuKSA9PiB7XG5cdGlmICghSVNfQlJPV1NFUiB8fCAhd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSkgcmV0dXJuOyAvLyBTa2lwIGlmIG5vdCBpbiBicm93c2VyIGVudmlyb25tZW50XG5cdGNvbnN0IGVsZW1zID0gZWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpO1xuXHRjb25zdCBtdXRhdG9yID0gTVVUQVRPUlMuZ2V0KGVsKSB8fCBbXTtcblxuXHRpZiAoIW11dGF0b3IubGVuZ3RoKSB7XG5cdFx0TVVUQVRPUlMuc2V0KGVsLCBtdXRhdG9yKTtcblx0XHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKChfLCBvYnNlcnZlcikgPT4ge1xuXHRcdFx0aWYgKGVsLmlzQ29ubmVjdGVkICYmIG11dGF0b3I/Lmxlbmd0aCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIG11dGF0b3IpIGNhbGxiYWNrKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRNVVRBVE9SUy5kZWxldGUoZWwpO1xuXHRcdFx0fVxuXHRcdH0pLm9ic2VydmUoZWwsIHtcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wiY2xhc3NcIiwgXCJoaWRkZW5cIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0c3VidHJlZTogdHJ1ZSxcblx0XHR9KTtcblx0fVxuXHRtdXRhdG9yLnB1c2goKCkgPT4gY2FsbGJhY2soZWxlbXMgYXMgSFRNTENvbGxlY3Rpb25PZjxUPikpO1xufTtcblxuLyoqXG4gKiBpc0lucHV0TGlrZVxuICogQGRlc2NyaXB0aW9uIENoZWNrIGlmIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKiBAcGFyYW0gZWwgVGhlIGVsZW1lbnQgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKi9cbmV4cG9ydCBjb25zdCBpc0lucHV0TGlrZSA9IChlbDogdW5rbm93bik6IGVsIGlzIEhUTUxJbnB1dEVsZW1lbnQgPT5cblx0ZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcInZhbGlkaXR5XCIgaW4gZWwgJiZcblx0IShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KTtcblxuLyoqXG4gKiB0b0N1c3RvbUVsZW1lbnRQcm9wc1xuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBjb252ZXJ0IHByb3BzIHRvIGN1c3RvbSBlbGVtZW50IGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcHMgdG8gY29udmVydFxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBwcm9wc1xuICovXG5jb25zdCBTRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xuZXhwb3J0IGNvbnN0IHRvQ3VzdG9tRWxlbWVudFByb3BzID0gKFxuXHR7IGNsYXNzTmFtZSwgaGlkZGVuLCBvcGVuLCAuLi5yZXN0IH06IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRrbGFzcz86IHN0cmluZyxcbikgPT4ge1xuXHRyZXN0LnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyA9IHRydWU7IC8vIE1ha2UgTmV4dC5qcyBoYXBweVxuXHRpZiAocmVzdFtTRUxFQ1RFRF0gIT09IHVuZGVmaW5lZClcblx0XHRyZXN0W1NFTEVDVEVEXSA9IGAkeyhyZXN0W1NFTEVDVEVEXSB8fCBcImZhbHNlXCIpICE9PSBcImZhbHNlXCJ9YDsgLy8gRW5zdXJlIGFyaWEtc2VsZWN0ZWQgYm9vbGVhbiBpcyBzdHJpbmdcblx0aWYgKGNsYXNzTmFtZSB8fCBrbGFzcykgcmVzdC5jbGFzcyA9IGAke2tsYXNzfSAke2NsYXNzTmFtZX1gLnRyaW0oKTsgLy8gVXNlIGNsYXNzIGluc3RlYWQgb2YgY2xhc3NOYW1lXG5cdGlmIChoaWRkZW4pIHJlc3QuaGlkZGVuID0gdHJ1ZTsgLy8gRW5zdXJlIGJvb2xlYW4gcHJvcCBiZWhhdmlvdXJcblx0aWYgKG9wZW4pIHJlc3Qub3BlbiA9IHRydWU7IC8vIEVuc3VyZSBib29sZWFuIHByb3AgYmVoYXZpb3VyXG5cdHJldHVybiByZXN0O1xufTtcblxuZXhwb3J0IGNvbnN0IE1URFNFbGVtZW50ID1cblx0dHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiXG5cdFx0PyAoY2xhc3Mge30gYXMgdHlwZW9mIEhUTUxFbGVtZW50KVxuXHRcdDogSFRNTEVsZW1lbnQ7XG5cbmV4cG9ydCBjb25zdCBjdXN0b21FbGVtZW50cyA9IHtcblx0ZGVmaW5lOiAobmFtZTogc3RyaW5nLCBpbnN0YW5jZTogQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKSA9PlxuXHRcdCFJU19CUk9XU0VSIHx8XG5cdFx0d2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fFxuXHRcdHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpLFxufTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBJU19CUk9XU0VSLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19CUkVBRENSVU1CUyA9IGAuJHtzdHlsZXMuYnJlYWRjcnVtYnMuc3BsaXQoXCIgXCIpWzBdfWA7XG5jb25zdCBDU1NfQ0hJUCA9IGAuJHtzdHlsZXMuY2hpcC5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENTU19IRUxQVEVYVCA9IGAuJHtzdHlsZXMuaGVscHRleHQuc3BsaXQoXCIgXCIpWzBdfWA7XG5jb25zdCBDU1NfUEFHSU5BVElPTiA9IGAuJHtzdHlsZXMucGFnaW5hdGlvbi5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENMSUNLUyA9IGBzdW1tYXJ5LHUtc3VtbWFyeSxhLGJ1dHRvbixbcm9sZT1cInRhYlwiXSxbcm9sZT1cImJ1dHRvblwiXWA7XG5jb25zdCBFVkVOVFMgPSBcImNsaWNrLHRvZ2dsZSxzdWJtaXQsY2hhbmdlXCI7XG5jb25zdCBNQVRPTU8gPSBcIm1hdHRpbHN5bmV0Lm1hdG9tby5jbG91ZFwiO1xuY29uc3QgQkFOTkVSID0gXCJtdGRzLWFuYWx5dGljcy1iYW5uZXJcIjsgLy8gRGlhbG9nIHRvIHNob3cgTWF0b21vIHNjcmlwdCBsb2FkaW5nXG5jb25zdCBCQU5ORVJfVVJMID1cblx0XCJodHRwczovL3d3dy5tYXR0aWxzeW5ldC5uby9vbS1tYXR0aWxzeW5ldC9wZXJzb252ZXJuZXJrbGFlcmluZy9pbmZvcm1hc2pvbnNrYXBzbGVyXCI7XG5cbnR5cGUgTWF0b21vID0gKFxuXHR8IHN0cmluZ1xuXHR8IG51bWJlclxuXHR8IGJvb2xlYW5cblx0fCBEb2N1bWVudFxuXHR8IEVsZW1lbnRcblx0fCAoKHRoaXM6IFJlY29yZDxzdHJpbmcsIDxUPigpID0+IFQ+KSA9PiB2b2lkKVxuKVtdO1xuZGVjbGFyZSBnbG9iYWwge1xuXHRpbnRlcmZhY2UgV2luZG93IHtcblx0XHRfcGFxPzogTWF0b21vW107XG5cdFx0X210bT86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj5bXTtcblx0XHRfbXRkc1RyYWNraW5nPzogQW5hbHl0aWNzQWN0aW9uc1tcImluaXRcIl07XG5cdFx0X210ZHNVbnRyYWNrPzogKCkgPT4gdm9pZDtcblx0fVxufVxuXG5leHBvcnQgdHlwZSBBbmFseXRpY3NBY3Rpb25zID0ge1xuXHRpbml0OiB7XG5cdFx0ZW5hYmxlZD86IGJvb2xlYW4gfCBcImRlYnVnXCI7XG5cdFx0Y29uc2VudD86IFwiY3VzdG9tXCIgfCB0cnVlO1xuXHR9ICYgKFxuXHRcdHwge1xuXHRcdFx0XHRtYXRvbW9JZDogbnVtYmVyIHwgc3RyaW5nO1xuXHRcdFx0XHRtYXRvbW9UYWdNYW5hZ2VySWQ/OiBuZXZlcjtcblx0XHQgIH1cblx0XHR8IHtcblx0XHRcdFx0bWF0b21vSWQ/OiBuZXZlcjtcblx0XHRcdFx0bWF0b21vVGFnTWFuYWdlcklkOiBzdHJpbmc7XG5cdFx0ICB9XG5cdCk7XG5cdHBhZ2V2aWV3OiB7XG5cdFx0dXJsPzogc3RyaW5nO1xuXHRcdHRpdGxlPzogc3RyaW5nO1xuXHR9O1xuXHRldmVudDoge1xuXHRcdGNhdGVnb3J5OiBzdHJpbmc7XG5cdFx0YWN0aW9uOiBzdHJpbmc7XG5cdFx0bmFtZT86IHN0cmluZztcblx0XHR2YWx1ZT86IG51bWJlcjtcblx0fTtcblx0c2VhcmNoOiB7XG5cdFx0cXVlcnk6IHN0cmluZztcblx0XHRjYXRlZ29yeT86IHN0cmluZztcblx0XHRyZXN1bHRzPzogbnVtYmVyO1xuXHR9O1xuXHRtYXRvbW86IE1hdG9tbztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhbmFseXRpY3M8QWN0aW9uIGV4dGVuZHMga2V5b2YgQW5hbHl0aWNzQWN0aW9ucz4oXG5cdGFjdGlvbjogQWN0aW9uLFxuXHRhcmdzID0ge30gYXMgQW5hbHl0aWNzQWN0aW9uc1tBY3Rpb25dLFxuKSB7XG5cdGlmICghSVNfQlJPV1NFUikgcmV0dXJuO1xuXHRpZiAoIXdpbmRvdy5fcGFxKSB7XG5cdFx0d2luZG93Ll9wYXEgPSBbXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcIkhlYXRtYXBTZXNzaW9uUmVjb3JkaW5nOjpkaXNhYmxlXCJdKTsgLy8gRGlzYWJsZSBoZWF0bWFwcyBieSBkZWZhdWx0IGFzIHRoaXMgcmVxdWlyZSBjb29raWVzXG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJlbmFibGVMaW5rVHJhY2tpbmdcIl0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0VHJhY2tlclVybFwiLCBgaHR0cHM6Ly8ke01BVE9NT30vbWF0b21vLnBocGBdKTtcblx0fVxuXHRpZiAoIXdpbmRvdy5fbXRtKSB7XG5cdFx0d2luZG93Ll9tdG0gPSB3aW5kb3cuX210bSB8fCBbXTsgLy8gUHJlcGFyZSBNYXRvbW8gVGFnIE1hbmFnZXJcblx0XHR3aW5kb3cuX210bS5wdXNoKHsgXCJtdG0uc3RhcnRUaW1lXCI6IERhdGUubm93KCksIGV2ZW50OiBcIm10bS5TdGFydFwiIH0pO1xuXHR9XG5cblx0aWYgKGFjdGlvbiA9PT0gXCJpbml0XCIpIHtcblx0XHR3aW5kb3cuX210ZHNUcmFja2luZyA9IHtcblx0XHRcdGVuYWJsZWQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSAhPT0gXCJsb2NhbGhvc3RcIixcblx0XHRcdC4uLndpbmRvdy5fbXRkc1RyYWNraW5nLFxuXHRcdFx0Li4uYXJncyxcblx0XHR9IGFzIEFuYWx5dGljc0FjdGlvbnNbXCJpbml0XCJdO1xuXHRcdGNvbnN0IHsgY29uc2VudCwgZW5hYmxlZCwgbWF0b21vSWQsIG1hdG9tb1RhZ01hbmFnZXJJZCB9ID1cblx0XHRcdHdpbmRvdy5fbXRkc1RyYWNraW5nO1xuXG5cdFx0aWYgKG1hdG9tb0lkKSB3aW5kb3cuX3BhcS5wdXNoKFtcInNldFNpdGVJZFwiLCBtYXRvbW9JZF0pO1xuXHRcdGlmIChlbmFibGVkKSB7XG5cdFx0XHRpZiAoY29uc2VudCAhPT0gXCJjdXN0b21cIikgcmVuZGVyQmFubmVyKCk7XG5cdFx0XHRjb25zdCBzcmMgPSBtYXRvbW9UYWdNYW5hZ2VySWRcblx0XHRcdFx0PyBgaHR0cHM6Ly9jZG4ubWF0b21vLmNsb3VkLyR7TUFUT01PfS9jb250YWluZXJfJHttYXRvbW9UYWdNYW5hZ2VySWR9LmpzYFxuXHRcdFx0XHQ6IGBodHRwczovL2Nkbi5tYXRvbW8uY2xvdWQvJHtNQVRPTU99L21hdG9tby5qc2A7XG5cblx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHNjcmlwdFtzcmM9XCIke3NyY31cIl1gKSB8fFxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZChcblx0XHRcdFx0XHRPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIiksIHtcblx0XHRcdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRcdFx0c3JjLFxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdGlmICh3aW5kb3cuX210ZHNUcmFja2luZz8uZW5hYmxlZCA9PT0gZmFsc2UpIHJldHVybjtcblx0aWYgKHdpbmRvdy5fbXRkc1RyYWNraW5nPy5lbmFibGVkID09PSBcImRlYnVnXCIpXG5cdFx0cmV0dXJuIGNvbnNvbGUuaW5mbyhgYW5hbHl0aWNzKFwiJHthY3Rpb259XCIsIGAsIGFyZ3MsIFwiKVwiKTtcblxuXHRpZiAoYWN0aW9uID09PSBcInBhZ2V2aWV3XCIpIHtcblx0XHRjb25zdCB7IHVybCwgdGl0bGUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInBhZ2V2aWV3XCJdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0Q3VzdG9tVXJsXCIsIHVybCB8fCBsb2NhdGlvbi5ocmVmXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXREb2N1bWVudFRpdGxlXCIsIHRpdGxlIHx8IGRvY3VtZW50LnRpdGxlXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJ0cmFja1BhZ2VWaWV3XCJdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwiZXZlbnRcIikge1xuXHRcdGNvbnN0IHsgY2F0ZWdvcnksIGFjdGlvbiwgbmFtZSwgdmFsdWUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcImV2ZW50XCJdO1xuXHRcdGNvbnN0IGV2ZW50ID0gW1widHJhY2tFdmVudFwiLCBjYXRlZ29yeSwgYWN0aW9uLCBuYW1lLCB2YWx1ZV07XG5cblx0XHQvLyBXZSBkbyBub3Qgd2FudCB0byB0cmFjayBldmVudHMgd2l0aCBoYXNoIGluIFVSTCBhcyB0aGlzIGNhdXNlcyBoYXJkLXRvLXJlYWQgZGF0YSxcblx0XHQvLyBzbyB0ZW1wb3JhcmlseSByZW1vdmUgdGhlIGhhc2ggcGFydCwgYW5kIGFkZCBpdCBiYWNrIGFmdGVyIHRoZSBldmVudCBpcyBwdXNoZWRcblx0XHRsZXQgdXJsID0gbG9jYXRpb24uaHJlZjtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcblx0XHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dXJsID0gdGhpcy5nZXRDdXJyZW50VXJsPHN0cmluZz4oKTtcblx0XHRcdH0sXG5cdFx0XSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRDdXN0b21VcmxcIiwgdXJsLnNwbGl0KFwiI1wiKVswXV0pOyAvLyBTa2lwIGhhc2ggcGFydCBvZiBVUkxcblx0XHR3aW5kb3cuX3BhcS5wdXNoKGV2ZW50LmZpbHRlcigodikgPT4gdiAhPT0gdW5kZWZpbmVkKSk7IC8vIFB1c2ggZXZlbnRcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCB1cmxdKTsgLy8gUmV2ZXJydCB0byBvcmlnaW5hbCBVUkwgd2l0aCBoYXNoXG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcInNlYXJjaFwiKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0cXVlcnksXG5cdFx0XHRjYXRlZ29yeSA9IGZhbHNlLFxuXHRcdFx0cmVzdWx0cyA9IGZhbHNlLFxuXHRcdH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJzZWFyY2hcIl07XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJ0cmFja1NpdGVTZWFyY2hcIiwgcXVlcnksIGNhdGVnb3J5LCByZXN1bHRzXSk7XG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcIm1hdG9tb1wiKSB7XG5cdFx0d2luZG93Ll9wYXEucHVzaChhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJtYXRvbW9cIl0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbmRlckJhbm5lcigpIHtcblx0Y29uc3QgaGFzU2VlbkJhbm5lciA9XG5cdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoQkFOTkVSKSB8fCB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oQkFOTkVSKTtcblxuXHRpZiAoaGFzU2VlbkJhbm5lcikgcmV0dXJuO1xuXG5cdGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuXHRcdFwiYWZ0ZXJiZWdpblwiLFxuXHRcdGA8ZGlhbG9nIGlkPVwiJHtCQU5ORVJ9XCIgZGF0YS1hbmFseXRpY3M9XCJpZ25vcmVcIj48c3R5bGU+XG5cdFx0XHRcdCMke0JBTk5FUn1bb3Blbl0geyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBiYWNrZ3JvdW5kOiAjMTE2ZTZiOyBib3JkZXItcmFkaXVzOiAuNWVtOyBib3JkZXI6IDA7IGJveC1zaGFkb3c6IDAgLjI1ZW0gLjVlbSByZ2JhKDAsMCwwLC4zKTsgY29sb3I6ICNmZmY7IGZvbnQtc2l6ZTogLjg3NWVtOyBpbnNldDogYXV0byBhdXRvIDFlbSAxZW07IG1heC13aWR0aDogY2FsYygxMDB2dyAtIDJlbSk7IG91dGxpbmU6IDA7IHBhZGRpbmc6IC41ZW07IHBvc2l0aW9uOiBmaXhlZDsgei1pbmRleDogOTk5OTkgfVxuXHRcdFx0XHQjJHtCQU5ORVJ9IGJ1dHRvbiB7IGFsbDogdW5zZXQ7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogZmxleDsgd2lkdGg6IDEuNWVtOyBoZWlnaHQ6IDEuNWVtOyBmb250OiAzMDAgMS41ZW0vMS4zNSBzYW5zLXNlcmlmOyBib3JkZXItcmFkaXVzOiAuMjVlbTsgcGxhY2UtY29udGVudDogY2VudGVyOyB0cmFuc2l0aW9uOiAuMnM7IHRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQsIHNjYWxlIH1cblx0XHRcdFx0IyR7QkFOTkVSfSBidXR0b246Zm9jdXMtdmlzaWJsZSB7IG91dGxpbmU6IDJweCBzb2xpZCB9XG5cdFx0XHRcdCMke0JBTk5FUn0gYnV0dG9uOmhvdmVyIHsgYmFja2dyb3VuZDogIzBhNGU0ZiB9XG5cdFx0XHRcdCMke0JBTk5FUn0gYnV0dG9uOmFjdGl2ZSB7IGJhY2tncm91bmQ6ICMwNTQ0NDk7IHNjYWxlOiAuOSB9XG5cdFx0XHRcdCMke0JBTk5FUn0gcCB7IG1hcmdpbjogMCAuMjVlbSB9XG5cdFx0XHQ8L3N0eWxlPlxuXHRcdFx0PHA+VmkgYnJ1a2VyIDxhIGhyZWY9XCIke0JBTk5FUl9VUkx9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+aW5mb3JtYXNqb25za2Fwc2xlcjwvYT4gZm9yIMOlIGZvcmJlZHJlIGJydWtlcm9wcGxldmVsc2VuLjwvcD5cblx0XHRcdDxmb3JtIG1ldGhvZD1cImRpYWxvZ1wiIGRhdGEtYW5hbHl0aWNzPVwiaWdub3JlXCI+PGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgYXJpYS1sYWJlbD1cIk9LXCI+JnRpbWVzOzwvYnV0dG9uPjwvZm9ybT5cblx0XHQ8L2RpYWxvZz5gLFxuXHQpO1xuXHRjb25zdCBiYW5uZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChCQU5ORVIpIGFzIEhUTUxEaWFsb2dFbGVtZW50O1xuXHRjb25zdCBvbkNsb3NlID0gKCkgPT4gd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKEJBTk5FUiwgXCJzZWVuXCIpO1xuXHRiYW5uZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsb3NlXCIsIG9uQ2xvc2UsIHsgb25jZTogdHJ1ZSB9KTtcblx0YmFubmVyLnNob3coKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlVHJhY2soZXZlbnQ6IEV2ZW50KSB7XG5cdGlmICh3aW5kb3cuX210ZHNUcmFja2luZz8uZW5hYmxlZCkgc2V0VGltZW91dChwcm9jZXNzVHJhY2ssIDAsIGV2ZW50KTsgLy8gTGV0IG90aGVyIGV2ZW50cyBwcm9jZXNzIGZpcnN0XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NUcmFjayh7IHR5cGUsIHRhcmdldCB9OiBFdmVudCkge1xuXHRjb25zdCBlbCA9IHR5cGUgPT09IFwiY2xpY2tcIiA/ICh0YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihDTElDS1MpIDogdGFyZ2V0O1xuXHRpZiAoIShlbCBpbnN0YW5jZW9mIEVsZW1lbnQpIHx8IGVsLmNsb3Nlc3QoJ1tkYXRhLWFuYWx5dGljcz1cImlnbm9yZVwiXScpKVxuXHRcdHJldHVybjtcblxuXHRsZXQgYWN0aW9uID0gXCJjbGlja1wiO1xuXHRsZXQgY2F0ZWdvcnkgPSBcIkJ1dHRvblwiO1xuXHRsZXQgbmFtZSA9IGxhYmVsKGVsKSB8fCBoZWFkaW5nKGVsKSB8fCBhdHRyKGVsLCBcImRhdGEtdG9vbHRpcFwiKSB8fCBcIlwiO1xuXG5cdGlmICh0eXBlID09PSBcInN1Ym1pdFwiKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkZvcm1cIjtcblx0XHRhY3Rpb24gPSBcInN1Ym1pdFwiO1xuXHRcdG5hbWUgPSBuYW1lIHx8IGRvY3VtZW50LnRpdGxlO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT09IFwidG9nZ2xlXCIpIHtcblx0XHRpZiAoIWVsLm1hdGNoZXMoXCJkaWFsb2c6bW9kYWxcIikpIHJldHVybjsgLy8gU2tpcCBub24tbW9kYWwgZGlhbG9nc1xuXHRcdGNhdGVnb3J5ID0gXCJEaWFsb2dcIjtcblx0XHRhY3Rpb24gPSBcIm9wZW5cIjtcblx0fSBlbHNlIGlmICh0eXBlID09PSBcImNoYW5nZVwiKSB7XG5cdFx0Y29uc3QgdHlwZSA9IGF0dHIoZWwsIFwidHlwZVwiKTtcblx0XHRjb25zdCBncm91cCA9XG5cdFx0XHR0eXBlID09PSBcImNoZWNrYm94XCIgfHwgdHlwZSA9PT0gXCJyYWRpb1wiID8gZWwuY2xvc2VzdChcImZpZWxkc2V0XCIpIDogbnVsbDtcblxuXHRcdGNhdGVnb3J5ID0gXCJGb3JtXCI7XG5cdFx0YWN0aW9uID0gXCJjaGFuZ2VcIjtcblx0XHRuYW1lID1cblx0XHRcdGxhYmVsKGdyb3VwIHx8IGVsKSB8fFxuXHRcdFx0dGV4dChncm91cD8ucXVlcnlTZWxlY3RvcihcImxlZ2VuZFwiKSkgfHxcblx0XHRcdHRleHQoKGVsIGFzIEhUTUxJbnB1dEVsZW1lbnQpPy5sYWJlbHM/LlswXSk7XG5cdH0gZWxzZSBpZiAoYXR0cihlbCwgXCJyb2xlXCIpID09PSBcInRhYlwiKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIlRhYlwiO1xuXHRcdGFjdGlvbiA9IFwibmF2aWdhdGVcIjtcblx0fSBlbHNlIGlmIChhdHRyKGVsLCBcInBvcG92ZXJ0YXJnZXRcIikpIHtcblx0XHRpZiAoIXBvcG92ZXIoZWwpPy5tYXRjaGVzKFwiOnBvcG92ZXItb3BlblwiKSkgcmV0dXJuOyAvLyBTa2lwIGlmIG5vdCBvcGVuXG5cdFx0Y2F0ZWdvcnkgPSBlbC5jbG9zZXN0KENTU19IRUxQVEVYVCkgPyBcIkhlbHBUZXh0XCIgOiBcIlBvcG92ZXJcIjtcblx0XHRhY3Rpb24gPSBcIm9wZW5cIjtcblx0fSBlbHNlIGlmIChlbC5ub2RlTmFtZS5lbmRzV2l0aChcIlNVTU1BUllcIikpIHtcblx0XHRpZiAoIShlbC5wYXJlbnRFbGVtZW50IGFzIEhUTUxEZXRhaWxzRWxlbWVudCkub3BlbikgcmV0dXJuOyAvLyBTa2lwIGlmIG5vdCBvcGVuXG5cdFx0Y2F0ZWdvcnkgPSBcIkRldGFpbHNcIjtcblx0XHRhY3Rpb24gPSBcIm9wZW5cIjtcblx0fSBlbHNlIGlmIChhdHRyKGVsLCBcImRhdGEtY29tbWFuZFwiKSA9PT0gXCJ0b2dnbGUtYXBwLWV4cGFuZGVkXCIpIHtcblx0XHRjb25zdCBvcGVuID0gc3R5bGUoZWwsIFwiLS1tdGRzLXRvb2x0aXAtcG9zaXRpb25cIikgPT09IFwibm9uZVwiO1xuXHRcdGNhdGVnb3J5ID0gXCJTaWRlYmFyXCI7XG5cdFx0YWN0aW9uID0gb3BlbiA/IFwiZXhwYW5kXCIgOiBcIm1pbmltaXplXCI7XG5cdFx0bmFtZSA9IChvcGVuICYmIGF0dHIoZWwsIFwiZGF0YS10b29sdGlwXCIpKSB8fCB0ZXh0KGVsKTtcblx0fSBlbHNlIGlmIChlbC5jbG9zZXN0KENTU19CUkVBRENSVU1CUykpIHtcblx0XHRjYXRlZ29yeSA9IFwiQnJlYWRjcnVtYnNcIjtcblx0XHRhY3Rpb24gPSBcIm5hdmlnYXRlXCI7XG5cdH0gZWxzZSBpZiAoZWwuY2xvc2VzdChDU1NfUEFHSU5BVElPTikpIHtcblx0XHRjYXRlZ29yeSA9IFwiUGFnaW50YXRpb25cIjtcblx0XHRhY3Rpb24gPSBcIm5hdmlnYXRlXCI7XG5cdH0gZWxzZSBpZiAoZWwuY2xvc2VzdChDU1NfQ0hJUCkpIHtcblx0XHRjYXRlZ29yeSA9IFwiQ2hpcFwiO1xuXHRcdGFjdGlvbiA9IGVsLmhhc0F0dHJpYnV0ZShcImRhdGEtcmVtb3ZhYmxlXCIpID8gXCJyZW1vdmVcIiA6IFwiY2xpY2tcIjtcblx0fSBlbHNlIGlmIChlbC5jbG9zZXN0KFwidGhbYXJpYS1zb3J0XVwiKSkge1xuXHRcdGNhdGVnb3J5ID0gXCJUYWJsZVwiO1xuXHRcdGFjdGlvbiA9IFwic29ydFwiO1xuXHR9IGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgSFRNTEFuY2hvckVsZW1lbnQpIHtcblx0XHRjYXRlZ29yeSA9IFwiTGlua1wiO1xuXHRcdGFjdGlvbiA9IGVsLnByb3RvY29sID09PSBcIm1haWx0bzpcIiA/IFwiZW1haWxcIiA6IFwibmF2aWdhdGVcIjtcblx0XHRpZiAoZWwuaGFzQXR0cmlidXRlKFwiZG93bmxvYWRcIikpIGFjdGlvbiA9IFwiZG93bmxvYWRcIjtcblx0XHRlbHNlIGlmIChlbC5oYXNoICYmIGVsLmhyZWYuc3RhcnRzV2l0aChsb2NhdGlvbi5ocmVmLnNwbGl0KFwiI1wiKVswXSkpXG5cdFx0XHRhY3Rpb24gPSBcImFuY2hvclwiOyAvLyBPbmx5IHRyYWNrIGFzIGFuY2hvciBpZiBzYW1lIHBhZ2Vcblx0fSBlbHNlIGlmIChlbC5oYXNBdHRyaWJ1dGUoXCJhcmlhLWV4cGFuZGVkXCIpKSB7XG5cdFx0aWYgKGF0dHIoZWwsIFwiYXJpYS1leHBhbmRlZFwiKSAhPT0gXCJ0cnVlXCIpIHJldHVybjsgLy8gU2tpcCBpZiBub3Qgb3BlblxuXHRcdGNhdGVnb3J5ID0gXCJFeHBhbmRcIjtcblx0XHRhY3Rpb24gPSBcIm9wZW5cIjtcblx0fVxuXG5cdC8vIFJlc3BlY3QgYXR0cmlidXRlcyBhbmQgc2VuZFxuXHRhbmFseXRpY3MoXCJldmVudFwiLCB7XG5cdFx0Y2F0ZWdvcnk6IGF0dHIoZWwsIFwiZGF0YS1hbmFseXRpY3MtY2F0ZWdvcnlcIikgPz8gY2F0ZWdvcnksXG5cdFx0YWN0aW9uOiBhdHRyKGVsLCBcImRhdGEtYW5hbHl0aWNzLWFjdGlvblwiKSA/PyBhY3Rpb24sXG5cdFx0bmFtZTogYXR0cihlbCwgXCJkYXRhLWFuYWx5dGljcy1uYW1lXCIpID8/IG5hbWUsXG5cdH0pO1xufVxuXG4vLyBVdGlsaXRpZXNcbmNvbnN0IHRleHQgPSAoZWw/OiBFbGVtZW50IHwgbnVsbCkgPT4gZWw/LnRleHRDb250ZW50Py50cmltKCkgfHwgXCJcIjtcbmNvbnN0IGxhYmVsID0gKGVsPzogRWxlbWVudCB8IG51bGwpID0+IChlbCAmJiBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikpIHx8IFwiXCI7XG5jb25zdCBwb3BvdmVyID0gKGVsOiBFbGVtZW50KSA9PlxuXHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhdHRyKGVsLCBcInBvcG92ZXJ0YXJnZXRcIikgfHwgXCJcIik7XG5jb25zdCBzdHlsZSA9IChlbDogRWxlbWVudCwga2V5OiBzdHJpbmcpID0+XG5cdHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKS5nZXRQcm9wZXJ0eVZhbHVlKGtleSk/LnRyaW0oKTtcbmNvbnN0IGhlYWRpbmcgPSAoZWw6IEVsZW1lbnQpID0+IHtcblx0Y29uc3QgYm9keSA9IHRleHQoZWwpO1xuXHRjb25zdCBoZWFkID0gdGV4dChlbC5xdWVyeVNlbGVjdG9yKFwiaDEsaDIsaDMsaDQsaDUsaDZcIikpOyAvLyBOb3RlOiBoZWFkIG1pZ2h0IGJlIGVtcHR5IHN0cmluZyAnJ1xuXHRyZXR1cm4gKGJvZHkuc3RhcnRzV2l0aChoZWFkKSAmJiBoZWFkKSB8fCBib2R5LnNsaWNlKDAsIDEwMCkudHJpbSgpOyAvLyBMaW1pdCB0byAxMDAgY2hhcmFjdGVyc1xufTtcblxub25Mb2FkZWQoKCkgPT4gb24oZG9jdW1lbnQsIEVWRU5UUywgaGFuZGxlVHJhY2ssIFFVSUNLX0VWRU5UKSk7XG4iLCJpZiAoXG5cdHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0d2luZG93LkNTU1N0eWxlU2hlZXQgJiZcblx0ZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzXG4pXG5cdCgoKSA9PiB7XG5cdFx0Y29uc3Qga2V5ID0gXCItLW10ZHMtYXBwLWV4cGFuZGVkXCI7XG5cdFx0Y29uc3Qgc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXHRcdGNvbnN0IHByZXYgPSAoKSA9PiAhd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk/LmluY2x1ZGVzKFwiZmFsc2VcIik7XG5cblx0XHRkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMucHVzaChzaGVldCk7XG5cdFx0d2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZCA9IChmb3JjZSkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgbmV4dCA9IGZvcmNlID8/ICFwcmV2KCk7XG5cdFx0XHRcdHNoZWV0LnJlcGxhY2VTeW5jPy4oYDpyb290IHsgJHtrZXl9OiB2YXIoJHtrZXl9LS0ke25leHR9KX1gKTtcblx0XHRcdFx0d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgbmV4dCk7XG5cdFx0XHR9IGNhdGNoIChfZXJyKSB7fSAvLyBsb2NhbFN0b3JhZ2UgaXMgZnVsbCBvciByZXBsYWNlU3luYyBpcyBub3Qgc3VwcG9ydGVkXG5cdFx0fTtcblxuXHRcdC8vIFNldCBhbmQgc3RvcmUgaW5pdGlhbCBzdGF0ZVxuXHRcdHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQocHJldigpKTtcblx0fSkoKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBkZWJvdW5jZSwgb24sIG9uTG9hZGVkLCBvbk11dGF0aW9uLCBRVUlDS19FVkVOVCB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IFwiLi9hcHAtdG9nZ2xlXCI7XG5cbmNvbnN0IENTU19BUFAgPSBzdHlsZXMuYXBwLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19TVElDS1kgPSBzdHlsZXMuc3RpY2t5LnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19UT0dHTEUgPSAnW2RhdGEtY29tbWFuZD1cInRvZ2dsZS1hcHAtZXhwYW5kZWRcIl0nO1xuY29uc3QgQ1NTX1NJREVCQVIgPSBgLiR7Q1NTX0FQUH0gPiBkaWFsb2csLiR7Q1NTX0FQUH0gZGlhbG9nIH4gbWFpbmA7XG5cbmNvbnN0IHVzZVRyYW5zaXRpb24gPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcblx0aWYgKCFkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKSBjYWxsYmFjaygpO1xuXHRlbHNlIGRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24oY2FsbGJhY2spO1xufTtcblxuZXhwb3J0IGNvbnN0IHRvZ2dsZUFwcEV4cGFuZGVkID0gKGZvcmNlPzogYm9vbGVhbikgPT5cblx0Ly8gQHRzLWV4cGVjdC1lcnJvciB3aW5kb3cubXRkc0FwcFRvZ2dsZSBjb21lcyBmcm9tIGFwcC10b2dnbGUuanNcblx0dXNlVHJhbnNpdGlvbigoKSA9PiB3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkPy4oZm9yY2UpKTtcblxuZnVuY3Rpb24gaGFuZGxlQXBwVG9nZ2xlQ2xpY2soeyB0YXJnZXQ6IGVsLCBkZWZhdWx0UHJldmVudGVkOiBzdG9wIH06IEV2ZW50KSB7XG5cdGNvbnN0IGxpbmsgPSAoZWwgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImFcIik7XG5cdGlmIChsaW5rPy5jbG9zZXN0KFwiZGlhbG9nXCIpICYmIGxpbms/LmNsb3Nlc3QoQ1NTX1NJREVCQVIpKVxuXHRcdHJldHVybiBjbG9zZVNpZGViYXIoKTsgLy8gQ2xvc2Ugc2lkZWJhciBpZiBsaW5rIGlzIGNsaWNrZWQgaW5zaWRlIHNpZGViYXJcblxuXHRpZiAoc3RvcCB8fCAhKGVsIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpIHx8ICFlbC5tYXRjaGVzKENTU19UT0dHTEUpKVxuXHRcdHJldHVybjtcblx0Y29uc3QgaXNEZXNrdG9wID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCkucG9zaXRpb24gPT09IFwic3RpY2t5XCI7XG5cblx0aWYgKGlzRGVza3RvcCkgdG9nZ2xlQXBwRXhwYW5kZWQoKTtcblx0ZWxzZVxuXHRcdHVzZVRyYW5zaXRpb24oKCkgPT4ge1xuXHRcdFx0Y29uc3Qgc2lkZWJhciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpYWxvZ0VsZW1lbnQ+KENTU19TSURFQkFSKTtcblx0XHRcdHNpZGViYXI/LnNldEF0dHJpYnV0ZShcImRhdGEtY2xvc2VkYnlcIiwgXCJhbnlcIik7IC8vIEFsbG93IGNsb3NpbmcgYnkgY2xpY2tpbmcgb3V0c2lkZVxuXHRcdFx0c2lkZWJhcj8uc2hvd01vZGFsKCk7XG5cdFx0fSk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlU2lkZWJhcigpIHtcblx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGlhbG9nRWxlbWVudD4oQ1NTX1NJREVCQVIpPy5jbG9zZSgpO1xufVxuXG4vLyBTY3JvbGwgc3RhdGVcbmxldCBNSU5fWSA9IDA7IC8vIE9mZnNldCB0byBhdm9pZCBzY3JvbGwganVtcCB3aGVuIHN0aWNreSBpcyBzZXQgdG8gcmVsYXRpdmVcbmxldCBTQ1JPTExfVVA6IGJvb2xlYW47XG5sZXQgU1RJQ0sgPSAwOyAvLyAtMSA9IHN0aWNrIHRvcCwgMCA9IHJlbGF0aXZlLCAxID0gc3RpY2sgYm90dG9tXG5sZXQgU1RJQ0tfRUw6IEhUTUxFbGVtZW50O1xubGV0IFNUSUNLX0ggPSAwO1xubGV0IFNUSUNLX1kgPSAwO1xubGV0IFNUVUNLID0gZmFsc2U7IC8vIFVzZWQgdG8gZmlndXJlIGlmIG5hdiBpcyBsYXJnZXIgdGhhbiB2aWV3cG9ydFxubGV0IFdJTl9IID0gMDtcbmxldCBXSU5fWSA9IDA7XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKFtzdGlja3ldOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRTVElDS19FTCA9IHN0aWNreTtcblx0aGFuZGxlQXBwU2Nyb2xsKCk7IC8vIFJ1biBvbiBjb25uZWN0XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUFwcFNjcm9sbCgpIHtcblx0aWYgKCFTVElDS19FTD8uaXNDb25uZWN0ZWQpIHJldHVybjtcblx0Y29uc3QgTkVYVF9ZID0gd2luZG93LnNjcm9sbFk7XG5cdGNvbnN0IE5FWFRfVVAgPSBORVhUX1kgPCBXSU5fWTtcblx0V0lOX1kgPSBORVhUX1k7XG5cblx0Ly8gT25seSBjYWxjdWxhdGUgaWYgc2Nyb2xsIGRpcmVjdGlvbiBoYXMgY2hhbmdlZFxuXHRpZiAoTkVYVF9VUCAhPT0gU0NST0xMX1VQKSB7XG5cdFx0TUlOX1kgPSAoU1RJQ0tfRUwucGFyZW50RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIHx8IDApICsgV0lOX1k7XG5cdFx0U0NST0xMX1VQID0gTkVYVF9VUDtcblx0XHRTVElDS19IID0gU1RJQ0tfRUwub2Zmc2V0SGVpZ2h0O1xuXHRcdFNUSUNLX1kgPSBTVElDS19FTC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyBXSU5fWTtcblx0XHRTVFVDSyA9IFNUSUNLX0VMLm9mZnNldEhlaWdodCA8PSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdFx0V0lOX0ggPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdH1cblxuXHRpZiAoU1RJQ0sgPT09IC0xICYmIFNUVUNLKSByZXR1cm47IC8vIEFsbHdheXMgc3RpY2t5IHdoZW4gc2lkZWJhciBpcyBzbWFsbGVyIHRoYW4gdmlld3BvcnRcblx0aWYgKFNUSUNLICE9PSAtMSAmJiAoU1RVQ0sgfHwgKFNDUk9MTF9VUCAmJiBXSU5fWSA8PSBTVElDS19ZKSkpIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwic3RpY2t5XCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgXCIwcHhcIik7XG5cdFx0U1RJQ0sgPSAtMTsgLy8gTm90IHN0aWNraW5nIHRvIHRvcCBhbmQgc2lkZWJhciBpcyBzbWFsbGVyIHRoYW4gdmlld3BvcnQgb3Igc2Nyb2xsaW5nIHVwXG5cdH0gZWxzZSBpZiAoU1RJQ0sgPT09IC0xICYmICFTQ1JPTExfVVApIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwicmVsYXRpdmVcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtNYXRoLm1heCgwLCBXSU5fWSAtIE1JTl9ZKX1weGApO1xuXHRcdFNUSUNLID0gMDsgLy8gU3RpY2tpbmcgdG8gdG9wIGFuZCBzY3JvbGxpbmcgZG93blxuXHR9IGVsc2UgaWYgKFNUSUNLICE9PSAxICYmICFTQ1JPTExfVVAgJiYgV0lOX1kgKyBXSU5fSCA+PSBTVElDS19ZICsgU1RJQ0tfSCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJzdGlja3lcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtXSU5fSCAtIFNUSUNLX0h9cHhgKTtcblx0XHRTVElDSyA9IDE7IC8vIE5vdCBzdGlja2luZyB0byBib3R0b20gYW5kIHNjcm9sbGluZyBkb3duXG5cdH0gZWxzZSBpZiAoU1RJQ0sgPT09IDEgJiYgU0NST0xMX1VQKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInJlbGF0aXZlXCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7U1RJQ0tfWSAtIE1JTl9ZfXB4YCk7XG5cdFx0U1RJQ0sgPSAwOyAvLyBTdGlja2luZyB0byBib3R0b20gYW5kIHNjcm9sbGluZyB1cFxuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19TVElDS1ksIGhhbmRsZU11dGF0aW9uKTtcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlQXBwVG9nZ2xlQ2xpY2ssIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcInJlc2l6ZVwiLCBkZWJvdW5jZShjbG9zZVNpZGViYXIsIDEwMCksIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcInNjcm9sbFwiLCBoYW5kbGVBcHBTY3JvbGwsIFFVSUNLX0VWRU5UKTtcbn0pO1xuIiwiY29uc3QgZ2V0U3RlcHMgPSAoXG5cdG5vdzogbnVtYmVyLFxuXHRtYXg6IG51bWJlcixcblx0c2hvdyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbikgPT4ge1xuXHRjb25zdCBvZmZzZXQgPSAoc2hvdyAtIDEpIC8gMjtcblx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heChNYXRoLm1pbihub3cgLSBNYXRoLmZsb29yKG9mZnNldCksIG1heCAtIHNob3cgKyAxKSwgMSk7XG5cdGNvbnN0IGVuZCA9IE1hdGgubWluKE1hdGgubWF4KG5vdyArIE1hdGguY2VpbChvZmZzZXQpLCBzaG93KSwgbWF4KTtcblx0Y29uc3QgcGFnZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBlbmQgKyAxIC0gc3RhcnQgfSwgKF8sIGkpID0+IGkgKyBzdGFydCk7XG5cblx0aWYgKHNob3cgPiA0ICYmIHN0YXJ0ID4gMSkgcGFnZXMuc3BsaWNlKDAsIDIsIDEsIDApO1xuXHRpZiAoc2hvdyA+IDMgJiYgZW5kIDwgbWF4KSBwYWdlcy5zcGxpY2UoLTIsIDIsIDAsIG1heCk7XG5cdHJldHVybiBwYWdlcztcbn07XG5cbmV4cG9ydCBjb25zdCBwYWdpbmF0aW9uID0gKHsgY3VycmVudCA9IDEsIHRvdGFsID0gMTAsIHNob3cgPSA3IH0pID0+ICh7XG5cdHByZXY6IGN1cnJlbnQgPiAxID8gY3VycmVudCAtIDEgOiAwLFxuXHRuZXh0OiBjdXJyZW50IDwgdG90YWwgPyBjdXJyZW50ICsgMSA6IDAsXG5cdHBhZ2VzOiBnZXRTdGVwcyhjdXJyZW50LCB0b3RhbCwgc2hvdykubWFwKChwYWdlLCBpbmRleCkgPT4gKHtcblx0XHRjdXJyZW50OiBwYWdlID09PSBjdXJyZW50ICYmIChcInBhZ2VcIiBhcyBjb25zdCksXG5cdFx0a2V5OiBga2V5LSR7cGFnZX0tJHtpbmRleH1gLFxuXHRcdHBhZ2UsXG5cdH0pKSxcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19CUkVBRENSVU1CUyA9IHN0eWxlcy5icmVhZGNydW1icy5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZUJyZWFkY3J1bWJzTXV0YXRpb24oYnJlYWRjcnVtYnM6IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgYnJlYWRjdW1icyBvZiBicmVhZGNydW1icylcblx0XHRicmVhZGN1bWJzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaSBhXCIpLmZvckVhY2goKGNydW1iLCBpbmRleCwgeyBsZW5ndGggfSkgPT4ge1xuXHRcdFx0YXR0cihjcnVtYiwgXCJhcmlhLWN1cnJlbnRcIiwgaW5kZXggPT09IGxlbmd0aCAtIDEgPyBcInBhZ2VcIiA6IG51bGwpO1xuXHRcdH0pO1xufVxuXG5vbkxvYWRlZCgoKSA9PlxuXHRvbk11dGF0aW9uKFxuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHRDU1NfQlJFQURDUlVNQlMsXG5cdFx0aGFuZGxlQnJlYWRjcnVtYnNNdXRhdGlvbixcblx0KSxcbik7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0YXR0cixcblx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcixcblx0SVNfQlJPV1NFUixcblx0b24sXG5cdG9uTG9hZGVkLFxuXHRRVUlDS19FVkVOVCxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19ESUFMT0cgPSBzdHlsZXMuZGlhbG9nLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IERJQUxPR1MgPSBJU19CUk9XU0VSXG5cdD8gKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG5cdFx0XHRDU1NfRElBTE9HLFxuXHRcdCkgYXMgSFRNTENvbGxlY3Rpb25PZjxIVE1MRGlhbG9nRWxlbWVudD4pXG5cdDogW107XG5cbmNvbnN0IGhhbmRsZU1vZGFsID0gKCkgPT4ge1xuXHRmb3IgKGNvbnN0IGRpYWxvZyBvZiBESUFMT0dTKVxuXHRcdGlmIChkaWFsb2cuaXNDb25uZWN0ZWQgJiYgZGlhbG9nLnNob3dNb2RhbCAmJiBkaWFsb2cuY2xvc2UpIHtcblx0XHRcdGlmIChkaWFsb2cubWF0Y2hlcygnW29wZW5dOm5vdChbZGF0YS1tb2RhbD1cImZhbHNlXCJdKTpub3QoOm1vZGFsKScpKSB7XG5cdFx0XHRcdGF0dHIoZGlhbG9nLCBcIm9wZW5cIiwgbnVsbCk7IC8vIFVzaW5nIGF0dHJpYnV0ZSBpbnN0ZWFkIG9mIC5jbG9zZSB0byBhdm9pZCBgY2xvc2VgIGV2ZW50XG5cdFx0XHRcdGRpYWxvZy5zaG93TW9kYWwoKTtcblx0XHRcdH0gZWxzZSBpZiAoZGlhbG9nLm1hdGNoZXMoXCI6bW9kYWw6bm90KFtvcGVuXSlcIikpIHtcblx0XHRcdFx0YXR0cihkaWFsb2csIFwib3BlblwiLCBcIlwiKTsgLy8gU2V0IGFzIG9wZW5cblx0XHRcdFx0ZGlhbG9nLmNsb3NlKCk7IC8vIFNvIHdlIGNvcnJlY2x0eSBjYW4gY2FsbCAuY2xvc2UsIHJlbW92aW5nIDxkaWFsb2c+IGZyb20gI3RvcC1sYXllclxuXHRcdFx0fVxuXHRcdH1cbn07XG5cbmNvbnN0IGhhbmRsZURpYWxvZ0NsaWNrID0gKHtcblx0Y2xpZW50WDogeCxcblx0Y2xpZW50WTogeSxcblx0dGFyZ2V0OiBlbCxcbn06IE1vdXNlRXZlbnQpID0+IHtcblx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTERpYWxvZ0VsZW1lbnQgJiYgYXR0cihlbCwgXCJkYXRhLWNsb3NlZGJ5XCIpID09PSBcImFueVwiKSB7XG5cdFx0Y29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdGNvbnN0IGlzSW5zaWRlID0gdG9wIDw9IHkgJiYgeSA8PSBib3R0b20gJiYgbGVmdCA8PSB4ICYmIHggPD0gcmlnaHQ7XG5cdFx0aWYgKCFpc0luc2lkZSkgcmV0dXJuIGVsLmNsb3NlKCk7XG5cdH1cblx0Y29uc3QgZGlhbG9nID0gKGVsIGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oXCJkaWFsb2dcIik7XG5cdGNvbnN0IGNsb3NlID0gZGlhbG9nICYmIChlbCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKCdbZGF0YS1jb21tYW5kPVwiY2xvc2VcIl0nKTtcblx0aWYgKGNsb3NlKSBkaWFsb2cuY2xvc2UoKTtcbn07XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlRGlhbG9nQ2xpY2sgYXMgRXZlbnRMaXN0ZW5lciwgUVVJQ0tfRVZFTlQpO1xuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKGhhbmRsZU1vZGFsKS5vYnNlcnZlKFxuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHR7XG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFtcIm9wZW5cIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0c3VidHJlZTogdHJ1ZSxcblx0XHR9LFxuXHQpO1xufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb24sIG9uTG9hZGVkLCBRVUlDS19FVkVOVCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5mdW5jdGlvbiBoYW5kbGVFcnJvc3VtbWFyeUluamVjdChldmVudDogRXZlbnQgJiB7IGFuaW1hdGlvbk5hbWU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSAhPT0gc3R5bGVzLl9lcnJvcnN1bW1hcnkpIHJldHVybjtcblx0Y29uc3QgZmlyc3QgPSAoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpPy5maXJzdEVsZW1lbnRDaGlsZDtcblxuXHRpZiAoZmlyc3QgaW5zdGFuY2VvZiBIVE1MSGVhZGluZ0VsZW1lbnQpIHtcblx0XHRhdHRyKGZpcnN0LCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG5cdFx0Zmlyc3QuZm9jdXMoKTsgLy8gQXV0b2ZvY3VzIGZpcnN0IGhlYWRpbmdcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PlxuXHRvbihkb2N1bWVudCwgXCJhbmltYXRpb25lbmRcIiwgaGFuZGxlRXJyb3N1bW1hcnlJbmplY3QsIFFVSUNLX0VWRU5UKSxcbik7XG4iLCJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5cbi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgU0FGRV9MQUJFTExFREJZID0gYCR7SVNfQU5EUk9JRCA/IFwiZGF0YVwiIDogXCJhcmlhXCJ9LWxhYmVsbGVkYnlgO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBGT0NVU19PVVRMSU5FID0gXCJvdXRsaW5lOiAxcHggZG90dGVkOyBvdXRsaW5lOiA1cHggYXV0byBIaWdobGlnaHQ7IG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvclwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIGF0dGFjaFN0eWxlID0gKGVsZW1lbnQsIGNzcykgPT4gZWxlbWVudC5zaGFkb3dSb290IHx8IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChfZXJyKSB7XG4gIH1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgKGRldGFpbCkgPT4gZWxlbWVudC5oYW5kbGVFdmVudCh7IHR5cGU6IFwibXV0YXRpb25cIiwgZGV0YWlsIH0pXG4gICAgKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIG9ic2VydmVycy5zZXQoZWxlbWVudCwgb2JzZXJ2ZXIpO1xuICB9XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBMSVZFO1xudmFyIExJVkVfU1JfRklYID0gMDtcbnZhciBzcGVhayA9ICh0ZXh0KSA9PiB7XG4gIGlmICghTElWRSkge1xuICAgIExJVkUgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIExJVkUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246Zml4ZWQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXBcIjtcbiAgICBhdHRyKExJVkUsIFwiYXJpYS1saXZlXCIsIFwiYXNzZXJ0aXZlXCIpO1xuICB9XG4gIGlmICghTElWRS5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoTElWRSk7XG4gIGlmICh0ZXh0KSBMSVZFLnRleHRDb250ZW50ID0gYCR7dGV4dH0ke0xJVkVfU1JfRklYKysgJSAyID8gXCJcXHhBMFwiIDogXCJcIn1gO1xufTtcbnZhciBzZXRWYWx1ZSA9IChpbnB1dCwgZGF0YSwgdHlwZSA9IFwiXCIpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSwgZGF0YSwgaW5wdXRUeXBlOiB0eXBlIH07XG4gIGNvbnN0IHByb3RvID0gSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGU7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJiZWZvcmVpbnB1dFwiLCBldmVudCkpO1xuICAoX2IgPSAoX2EyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgXCJ2YWx1ZVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5zZXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKGlucHV0LCBkYXRhKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImlucHV0XCIsIGV2ZW50KSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG59O1xudmFyIElTX1BSRVNTID0gZmFsc2U7XG52YXIgaXNNb3VzZURvd24gPSAoZXZlbnQpID0+IHtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2V1cFwiKSBJU19QUkVTUyA9IGZhbHNlO1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZWRvd25cIikge1xuICAgIElTX1BSRVNTID0gdHJ1ZTtcbiAgICBvbihkb2N1bWVudCwgXCJtb3VzZXVwXCIsIGlzTW91c2VEb3duLCB7IG9uY2U6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIElTX1BSRVNTO1xufTtcbnZhciBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QgPSAoc3R5bGUsIHNsb3QgPSBcIjxzbG90Pjwvc2xvdD5cIikgPT4gYDx0ZW1wbGF0ZSBzaGFkb3dyb290bW9kZT1cIm9wZW5cIj4ke3Nsb3R9PHN0eWxlPiR7c3R5bGV9PC9zdHlsZT48L3RlbXBsYXRlPmA7XG5cbi8vIHUtb3B0aW9uLnRzXG52YXIgRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG52YXIgU0VMRUNURUQgPSBcInNlbGVjdGVkXCI7XG52YXIgVUhUTUxPcHRpb25FbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW0RJU0FCTEVELCBTRUxFQ1RFRF07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFJU19JT1MpIHRoaXMudGFiSW5kZXggPSAtMTtcbiAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKFwicm9sZVwiKSkgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJvcHRpb25cIik7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtZGlzYWJsZWRcIiwgYCR7dGhpcy5kaXNhYmxlZH1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1zZWxlY3RlZFwiLCBgJHt0aGlzLnNlbGVjdGVkfWApO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB3aGV0aGVyIHRoZSBvcHRpb24gaW4gdGhlIGxpc3QgYm94IGlzIHRoZSBkZWZhdWx0IGl0ZW0uICovXG4gIGdldCBkZWZhdWx0U2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXNbU0VMRUNURURdO1xuICB9XG4gIHNldCBkZWZhdWx0U2VsZWN0ZWQodmFsdWUpIHtcbiAgICB0aGlzW1NFTEVDVEVEXSA9IHZhbHVlO1xuICB9XG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBESVNBQkxFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBESVNBQkxFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyBhIHJlZmVyZW5jZSB0byB0aGUgZm9ybSB0aGF0IHRoZSBvYmplY3QgaXMgZW1iZWRkZWQgaW4uICovXG4gIGdldCBmb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJmb3JtXCIpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiBvcHRpb24gaW4gYSBsaXN0IGJveC4gKi9cbiAgZ2V0IGluZGV4KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLigoX2EyID0gdGhpcy5wYXJlbnRFbGVtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLm9wdGlvbnMpIHx8IFt0aGlzXVxuICAgIF0uaW5kZXhPZih0aGlzKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgYSB2YWx1ZSB0aGF0IHlvdSBjYW4gdXNlIHRvIGltcGxlbWVudCB5b3VyIG93biBsYWJlbCBmdW5jdGlvbmFsaXR5IGZvciB0aGUgb2JqZWN0LiAqL1xuICBnZXQgbGFiZWwoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJsYWJlbFwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgbGFiZWwodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwibGFiZWxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBTRUxFQ1RFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBTRUxFQ1RFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSB0ZXh0IHN0cmluZyBzcGVjaWZpZWQgYnkgdGhlIG9wdGlvbiB0YWcuICovXG4gIGdldCB0ZXh0KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gdGhpcy50ZXh0Q29udGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIH1cbiAgc2V0IHRleHQodGV4dCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdmFsdWUgd2hpY2ggaXMgcmV0dXJuZWQgdG8gdGhlIHNlcnZlciB3aGVuIHRoZSBmb3JtIGNvbnRyb2wgaXMgc3VibWl0dGVkLiAqL1xuICBnZXQgdmFsdWUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1vcHRpb25cIiwgVUhUTUxPcHRpb25FbGVtZW50KTtcblxuLy8gdS1kYXRhbGlzdC50c1xudmFyIFVIVE1MRGF0YUxpc3RTdHlsZSA9IGAke0RJU1BMQVlfQkxPQ0t9XG46OnNsb3R0ZWQodS1vcHRpb24pIHsgZGlzcGxheTogYmxvY2s7IGN1cnNvcjogcG9pbnRlciB9XG46OnNsb3R0ZWQodS1vcHRpb246Zm9jdXMpIHsgJHtGT0NVU19PVVRMSU5FfSB9XG46OnNsb3R0ZWQodS1vcHRpb25bYXJpYS1oaWRkZW49XCJ0cnVlXCJdKSxcbjo6c2xvdHRlZCh1LW9wdGlvbltkaXNhYmxlZF0pLFxuOjpzbG90dGVkKHUtb3B0aW9uW2hpZGRlbl0pIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50IH1gO1xudmFyIFVIVE1MRGF0YUxpc3RTaGFkb3dSb290ID0gZGVjbGFyYXRpdmVTaGFkb3dSb290KFVIVE1MRGF0YUxpc3RTdHlsZSk7XG52YXIgTElWRV9USU1FUjtcbnZhciBJTlBVVF9ERUJPVU5DRSA9IDA7XG52YXIgSVNfTU9CSUxFID0gSVNfSU9TIHx8IElTX0FORFJPSUQ7XG52YXIgRVZFTlRTID0gXCJjbGljayxmb2N1c291dCxpbnB1dCxrZXlkb3duLG1vdXNlZG93bixtb3VzZXVwXCI7XG52YXIgRVZFTlRTX0lOUFVUID0gXCJmb2N1cyxmb2N1c2luLGJsdXIsZm9jdXNvdXRcIjtcbnZhciBURVhUUyA9IHtcbiAgc2luZ3VsYXI6IFwiJWQgaGl0XCIsXG4gIHBsdXJhbDogXCIlZCBoaXRzXCJcbn07XG52YXIgVUhUTUxEYXRhTGlzdEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fdGV4dHMgPSBfX3NwcmVhZFZhbHVlcyh7fSwgVEVYVFMpO1xuICAgIHRoaXMuX3ZhbHVlID0gXCJcIjtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBVSFRNTERhdGFMaXN0U3R5bGUpO1xuICB9XG4gIC8vIFVzZWQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBhbm5vdW5jZW1lbnRzXG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJpZFwiLCAuLi5PYmplY3Qua2V5cyhURVhUUykubWFwKChrZXkpID0+IGBkYXRhLXNyLSR7a2V5fWApXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmhpZGRlbiA9IHRydWU7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJsaXN0Ym94XCIpO1xuICAgIGF0dHIodGhpcywgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBvbih0aGlzLl9yb290LCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywge1xuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbXCJkaXNhYmxlZFwiLCBcImhpZGRlblwiLCBcImxhYmVsXCIsIFwidmFsdWVcIl0sXG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLl9yb290IHx8IHRoaXMsIFwiZm9jdXNcIiwgdGhpcywgdHJ1ZSk7XG4gICAgb2ZmKHRoaXMuX3Jvb3QgfHwgdGhpcywgXCJmb2N1c2luXCIsIHRoaXMpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIGRpc2Nvbm5lY3RJbnB1dCh0aGlzKTtcbiAgICB0aGlzLl9yb290ID0gdm9pZCAwO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBfcHJldiwgbmV4dCkge1xuICAgIGNvbnN0IHRleHQgPSBwcm9wID09IG51bGwgPyB2b2lkIDAgOiBwcm9wLnNwbGl0KFwiZGF0YS1zci1cIilbMV07XG4gICAgY29uc3QgY3NzID0gYGlucHV0W2xpc3Q9XCIke3RoaXMuaWR9XCJdYDtcbiAgICBpZiAoVEVYVFNbdGV4dF0pIHRoaXMuX3RleHRzW3RleHRdID0gbmV4dCB8fCBURVhUU1t0ZXh0XTtcbiAgICBlbHNlIGlmICh0aGlzLl9yb290KSB7XG4gICAgICBpZiAodGhpcy5faW5wdXQpIHNldHVwSW5wdXQodGhpcywgdGhpcy5faW5wdXQpO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiB0aGlzLl9yb290LnF1ZXJ5U2VsZWN0b3JBbGwoY3NzKSlcbiAgICAgICAgc2V0dXBJbnB1dCh0aGlzLCBpbnB1dCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgeyB0YXJnZXQsIHR5cGUgfSA9IGV2ZW50O1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKHR5cGUgPT09IFwiY2xpY2tcIikgb25DbGljayh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiZm9jdXNcIiB8fCB0eXBlID09PSBcImZvY3VzaW5cIikgb25Gb2N1cyh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiYmx1clwiIHx8IHR5cGUgPT09IFwiZm9jdXNvdXRcIikgb25CbHVyKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIG9uS2V5RG93bih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgdGhpcy5jb250YWlucyh0YXJnZXQpKVxuICAgICAgaXNNb3VzZURvd24oZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcIm11dGF0aW9uXCIgfHwgdHlwZSA9PT0gXCJpbnB1dFwiKSB7XG4gICAgICBjbGVhclRpbWVvdXQoSU5QVVRfREVCT1VOQ0UpO1xuICAgICAgSU5QVVRfREVCT1VOQ0UgPSBzZXRUaW1lb3V0KG9uSW5wdXQsIDAsIHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ1LW9wdGlvblwiKTtcbiAgfVxufTtcbnZhciBpc0Rpc2FibGVkID0gKGlucHV0KSA9PiAoaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IGlucHV0LmRpc2FibGVkKSB8fCAoaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IGlucHV0LnJlYWRPbmx5KSB8fCBmYWxzZTtcbnZhciBzZXRFeHBhbmRlZCA9IChzZWxmLCBvcGVuKSA9PiB7XG4gIHZhciBfYTIsIF9iLCBfYztcbiAgaWYgKHNlbGYuaGlkZGVuICE9PSBvcGVuKSByZXR1cm47XG4gIHNlbGYuaGlkZGVuID0gaXNEaXNhYmxlZChzZWxmID09IG51bGwgPyB2b2lkIDAgOiBzZWxmLl9pbnB1dCkgfHwgIW9wZW47XG4gIChfYTIgPSBtdXRhdGlvbk9ic2VydmVyKHNlbGYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRha2VSZWNvcmRzKCk7XG4gIGNvbnN0IGlzUG9wb3ZlciA9IHNlbGYuaXNDb25uZWN0ZWQgJiYgc2VsZi5wb3BvdmVyICYmICgoX2IgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmlzQ29ubmVjdGVkKSAmJiAoKF9jID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYy5wb3BvdmVyVGFyZ2V0RWxlbWVudCkgPT09IHNlbGY7XG4gIGlmIChzZWxmLl9pbnB1dCkgc2V0dXBJbnB1dChzZWxmLCBzZWxmLl9pbnB1dCwgb3Blbik7XG4gIGlmIChpc1BvcG92ZXIpIGF0dHIoc2VsZiwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpO1xuICBpZiAoaXNQb3BvdmVyKSBzZWxmLnRvZ2dsZVBvcG92ZXIob3Blbik7XG4gIGlmIChvcGVuKSBvbklucHV0KHNlbGYpO1xufTtcbnZhciBkaXNjb25uZWN0SW5wdXQgPSAoc2VsZikgPT4ge1xuICBpZiAoIXNlbGYuX2lucHV0KSByZXR1cm47XG4gIG9mZihzZWxmLl9pbnB1dCB8fCBzZWxmLCBFVkVOVFNfSU5QVVQsIHNlbGYpO1xuICBvZmYoc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gIHNlbGYuX2lucHV0ID0gdm9pZCAwO1xufTtcbnZhciBzZXR1cElucHV0ID0gKHNlbGYsIGlucHV0LCBvcGVuID0gZmFsc2UpID0+IHtcbiAgaWYgKHNlbGYucG9wb3ZlcikgYXR0cihpbnB1dCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKHNlbGYpKTtcbiAgb24oaW5wdXQsIEVWRU5UU19JTlBVVCwgc2VsZiwgdHJ1ZSk7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1hdXRvY29tcGxldGVcIiwgXCJsaXN0XCIpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtY29udHJvbHNcIiwgdXNlSWQoc2VsZikpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7IUlTX01PQklMRSB8fCBvcGVufWApO1xuICBhdHRyKGlucHV0LCBcImF1dG9jb21wbGV0ZVwiLCBcIm9mZlwiKTtcbiAgYXR0cihpbnB1dCwgXCJyb2xlXCIsIGlzRGlzYWJsZWQoaW5wdXQpID8gbnVsbCA6IFwiY29tYm9ib3hcIik7XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgaXNJbnB1dCA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQ7XG4gIGlmIChpc0lucHV0ICYmIGV2ZW50LmlzVHJ1c3RlZCkgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIGlmIChzZWxmLl9pbnB1dCAhPT0gZXZlbnQudGFyZ2V0ICYmIGlzSW5wdXQgJiYgZXZlbnQudGFyZ2V0Lmxpc3QgPT09IHNlbGYpIHtcbiAgICBpZiAoc2VsZi5faW5wdXQpIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgICBzZWxmLl9pbnB1dCA9IGV2ZW50LnRhcmdldDtcbiAgICBzZWxmLl9pbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNcIikpO1xuICAgIHNlbGYuX2lucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJmb2N1c2luXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgYXR0cihzZWxmLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKChfYTIgPSBzZWxmLl9pbnB1dC5sYWJlbHMpID09IG51bGwgPyB2b2lkIDAgOiBfYTJbMF0pKTtcbiAgICBvbihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gICAgc2V0RXhwYW5kZWQoc2VsZiwgYXR0cihzZWxmLl9pbnB1dCwgXCJpbnB1dG1vZGVcIikgIT09IFwibm9uZVwiKTtcbiAgICBzcGVhaygpO1xuICB9XG59O1xudmFyIG9uQmx1ciA9IChzZWxmLCBldmVudCkgPT4ge1xuICBpZiAoIUlTX0FORFJPSUQgJiYgIWlzTW91c2VEb3duKCkgJiYgc2VsZi5faW5wdXQpXG4gICAgc2V0VGltZW91dChvbkJsdXJyZWQsIDAsIHNlbGYpO1xuICBpZiAoZXZlbnQudGFyZ2V0ID09PSBzZWxmLl9pbnB1dCAmJiBldmVudC5pc1RydXN0ZWQpXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59O1xudmFyIG9uQmx1cnJlZCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSAoKF9hMiA9IHNlbGYuX3Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuYWN0aXZlRWxlbWVudCkgfHwgbnVsbDtcbiAgY29uc3QgaW5wdXQgPSBzZWxmLl9pbnB1dDtcbiAgaWYgKGlucHV0ICYmIGlucHV0ICE9PSByZWxhdGVkVGFyZ2V0ICYmICFzZWxmLmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImJsdXJcIiwgeyByZWxhdGVkVGFyZ2V0IH0pKTtcbiAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEZvY3VzRXZlbnQoXCJmb2N1c291dFwiLCB7IGJ1YmJsZXM6IHRydWUsIHJlbGF0ZWRUYXJnZXQgfSlcbiAgICApO1xuICAgIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgfVxufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9pbnB1dCB8fCBzZWxmLl9pbnB1dCA9PT0gdGFyZ2V0KSByZXR1cm4gc2V0RXhwYW5kZWQoc2VsZiwgdHJ1ZSk7XG4gIGZvciAoY29uc3Qgb3B0IG9mIHNlbGYub3B0aW9ucylcbiAgICBpZiAob3B0LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgIGlmIChhdHRyKHNlbGYsIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIikgIT09IFwidHJ1ZVwiKSB7XG4gICAgICAgIChfYTIgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xuICAgICAgICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2V0VmFsdWUoc2VsZi5faW5wdXQsIG9wdC52YWx1ZSk7XG4gICAgfVxuICBpZiAoSVNfQU5EUk9JRCkgb25CbHVycmVkKHNlbGYpO1xufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IGtleSwgdGFyZ2V0LCBhbHRLZXksIGN0cmxLZXksIHNoaWZ0S2V5LCBtZXRhS2V5IH0gPSBlO1xuICBjb25zdCBpc0VzY2FwZSA9IGtleSA9PT0gXCJFc2NhcGVcIiB8fCBrZXkgPT09IFwiRXNjXCI7XG4gIGlmIChhbHRLZXkgfHwgY3RybEtleSB8fCBtZXRhS2V5IHx8IHNoaWZ0S2V5IHx8IGtleSA9PT0gXCJUYWJcIikgcmV0dXJuO1xuICBpZiAoaXNFc2NhcGUgJiYgIXNlbGYuaGlkZGVuKSBlID09IG51bGwgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gIHNldEV4cGFuZGVkKHNlbGYsICFpc0VzY2FwZSk7XG4gIGNvbnN0IG9wdGlvbnMgPSBbLi4uc2VsZi5vcHRpb25zXS5maWx0ZXIoXG4gICAgKGVsKSA9PiBhdHRyKGVsLCBcImFyaWEtaGlkZGVuXCIpICE9PSBcInRydWVcIiAmJiBlbC5vZmZzZXRIZWlnaHRcbiAgKTtcbiAgY29uc3QgcHJldiA9IG9wdGlvbnMuaW5kZXhPZih0YXJnZXQpO1xuICBsZXQgbmV4dCA9IC0xO1xuICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiKSBuZXh0ID0gKHByZXYgKyAxKSAlIG9wdGlvbnMubGVuZ3RoO1xuICBpZiAoa2V5ID09PSBcIkFycm93VXBcIikgbmV4dCA9ICh+cHJldiA/IHByZXYgOiBvcHRpb25zLmxlbmd0aCkgLSAxO1xuICBpZiAofnByZXYpIHtcbiAgICBpZiAoa2V5ID09PSBcIkhvbWVcIiB8fCBrZXkgPT09IFwiUGFnZVVwXCIpIG5leHQgPSAwO1xuICAgIGlmIChrZXkgPT09IFwiRW5kXCIgfHwga2V5ID09PSBcIlBhZ2VEb3duXCIpIG5leHQgPSBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgaWYgKGtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICBvcHRpb25zW3ByZXZdLmNsaWNrKCk7XG4gICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuICBpZiAob3B0aW9uc1tuZXh0XSkgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykgb3B0aW9uLnRhYkluZGV4ID0gLTE7XG4gIGlmIChvcHRpb25zW25leHRdKSBlLnByZXZlbnREZWZhdWx0KCk7XG4gIChfYTIgPSBvcHRpb25zW25leHRdIHx8IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG4gIGlmICghb3B0aW9uc1tuZXh0XSAmJiBrZXkgPT09IFwiQXJyb3dVcFwiKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIHJldHVybiAoX2EzID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTMuc2V0U2VsZWN0aW9uUmFuZ2UoOTk5LCA5OTkpO1xuICAgIH0pO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGUpID0+IHtcbiAgY29uc3QgeyBfdGV4dHMsIF9yb290LCBfaW5wdXQsIG9wdGlvbnMgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gKF9pbnB1dCA9PSBudWxsID8gdm9pZCAwIDogX2lucHV0LnZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBmaWx0ZXIgPSAhc2VsZi5oYXNBdHRyaWJ1dGUoXCJkYXRhLW5vZmlsdGVyXCIpO1xuICBjb25zdCBoaWRkZW4gPSBbXTtcbiAgY29uc3QgdmlzaWJsZSA9IFtdO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKSB7XG4gICAgY29uc3QgaGlkZSA9IG9wdC5kaXNhYmxlZCB8fCBvcHQuaGlkZGVuIHx8IGZpbHRlciAmJiAhb3B0LmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUpO1xuICAgIChoaWRlID8gaGlkZGVuIDogdmlzaWJsZSkucHVzaChvcHQpO1xuICB9XG4gIGZvciAoY29uc3Qgb3B0IG9mIGhpZGRlbikgYXR0cihvcHQsIFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpO1xuICBmb3IgKGNvbnN0IG9wdCBvZiB2aXNpYmxlKSBhdHRyKG9wdCwgXCJhcmlhLWhpZGRlblwiLCBcImZhbHNlXCIpO1xuICBjb25zdCB0b3RhbCA9IHZpc2libGUubGVuZ3RoO1xuICBjbGVhclRpbWVvdXQoTElWRV9USU1FUik7XG4gIGlmICgoZSA9PSBudWxsID8gdm9pZCAwIDogZS50eXBlKSA9PT0gXCJpbnB1dFwiICYmIHZhbHVlICE9PSBzZWxmLl92YWx1ZSlcbiAgICBMSVZFX1RJTUVSID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gYCR7IXRvdGFsICYmIHNlbGYuaW5uZXJUZXh0LnRyaW0oKSB8fCBgJHtfdGV4dHNbdG90YWwgPT09IDEgPyBcInNpbmd1bGFyXCIgOiBcInBsdXJhbFwiXX1gLnJlcGxhY2UoXCIlZFwiLCBgJHt0b3RhbH1gKX1gO1xuICAgICAgaWYgKCFzZWxmLmhpZGRlbiAmJiAoX3Jvb3QgPT0gbnVsbCA/IHZvaWQgMCA6IF9yb290LmFjdGl2ZUVsZW1lbnQpID09PSBfaW5wdXQpIHNwZWFrKHRleHQpO1xuICAgICAgc2VsZi5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9LCAxZTMpO1xuICBpZiAoSVNfSU9TKVxuICAgIHZpc2libGUubWFwKChvcHQsIGlkeCkgPT4gYXR0cihvcHQsIFwidGl0bGVcIiwgYCR7aWR4ICsgMX0vJHt0b3RhbH1gKSk7XG59O1xuaWYgKElTX0JST1dTRVIpXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJsaXN0XCIsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gZ2V0Um9vdCh0aGlzKS5nZXRFbGVtZW50QnlJZChhdHRyKHRoaXMsIFwibGlzdFwiKSB8fCBcIlwiKTtcbiAgICB9XG4gIH0pO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1kYXRhbGlzdFwiLCBVSFRNTERhdGFMaXN0RWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MRGF0YUxpc3RFbGVtZW50LCBVSFRNTERhdGFMaXN0U2hhZG93Um9vdCwgVUhUTUxEYXRhTGlzdFN0eWxlIH07XG4iLCJpbXBvcnQgeyBmbGlwLCB0eXBlIFBsYWNlbWVudCwgc2hpZnQsIHNpemUgfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuaW1wb3J0IHsgVUhUTUxDb21ib2JveEVsZW1lbnQgfSBmcm9tIFwiQHUtZWxlbWVudHMvdS1jb21ib2JveFwiO1xuaW1wb3J0IHsgVUhUTUxEYXRhTGlzdEVsZW1lbnQgfSBmcm9tIFwiQHUtZWxlbWVudHMvdS1kYXRhbGlzdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRpc0lucHV0TGlrZSxcblx0b24sXG5cdG9uTG9hZGVkLFxuXHRvbk11dGF0aW9uLFxuXHRRVUlDS19FVkVOVCxcblx0dXNlSWQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRklFTEQgPSBzdHlsZXMuZmllbGQuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1ZBTElEQVRJT05TID0gc3R5bGVzLnZhbGlkYXRpb24uc3BsaXQoXCIgXCIpO1xuY29uc3QgQ1NTX1ZBTElEQVRJT04gPSBDU1NfVkFMSURBVElPTlNbMF07XG5cbmNvbnN0IGdldFRleHQgPSAoc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24sIGtleTogc3RyaW5nKSA9PlxuXHRzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGAtLW10ZHMtdGV4dC0ke2tleX1gKT8uc2xpY2UoMSwgLTEpIHx8IFwiXCI7IC8vIHNsaWNlIHRvIHRyaW0gcXVvdGVzXG5cbmZ1bmN0aW9uIGhhbmRsZUZpZWxkTXV0YXRpb24oXG5cdGZpZWxkczogSFRNTENvbGxlY3Rpb25PZjxFbGVtZW50Pixcblx0dmFsaWRhdGU/OiBib29sZWFuLFxuKSB7XG5cdGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKVxuXHRcdGlmIChmaWVsZC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0Y29uc3QgbGFiZWxzOiBIVE1MTGFiZWxFbGVtZW50W10gPSBbXTtcblx0XHRcdGNvbnN0IGRlc2NzOiBFbGVtZW50W10gPSBbXTtcblx0XHRcdGNvbnN0IHZhbGlkczogRWxlbWVudFtdID0gW107XG5cdFx0XHRsZXQgY29tYm9ib3g6IFVIVE1MQ29tYm9ib3hFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblx0XHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRcdGZvciAoY29uc3QgZWwgb2YgZmllbGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpKSB7XG5cdFx0XHRcdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxMYWJlbEVsZW1lbnQpIGxhYmVscy5wdXNoKGVsKTtcblx0XHRcdFx0ZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBVSFRNTENvbWJvYm94RWxlbWVudCkgY29tYm9ib3ggPSBlbDtcblx0XHRcdFx0ZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpICYmICFlbC5oaWRkZW4pIGlucHV0ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGVsLmhhc0F0dHJpYnV0ZShcImRhdGEtZGVzY3JpcHRpb25cIikpIGRlc2NzLnB1c2goZWwpO1xuXHRcdFx0XHRlbHNlIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1ZBTElEQVRJT04pKSB7XG5cdFx0XHRcdFx0dmFsaWQgPSBhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8ICFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0dmFsaWRzLnB1c2goZWwpO1xuXHRcdFx0XHRcdGRlc2NzLnVuc2hpZnQoZWwpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgSFRNTFBhcmFncmFwaEVsZW1lbnQpXG5cdFx0XHRcdFx0ZGVzY3Muc29tZSgoZGVzYykgPT4gZGVzYy5jb250YWlucyhlbCkpIHx8IGRlc2NzLnB1c2goZWwpOyAvLyBPbmx5IGFkZCBpZiBub3QgYWxyZWFkeSBpbnNpZGUgZGVzY3JpcHRpb25cblx0XHRcdH1cblxuXHRcdFx0aWYgKGlucHV0KSB7XG5cdFx0XHRcdGZvciAoY29uc3QgbGFiZWwgb2YgbGFiZWxzKSBsYWJlbC5odG1sRm9yID0gdXNlSWQoaW5wdXQpO1xuXHRcdFx0XHRpZiAodmFsaWRhdGUgJiYgYXR0cihmaWVsZCwgXCJkYXRhLXZhbGlkYXRpb25cIikgPT09IFwiZm9ybVwiKSB7XG5cdFx0XHRcdFx0dmFsaWQgPSBpbnB1dC5tYXRjaGVzKFwiOnZhbGlkXCIpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgZWwgb2YgdmFsaWRzKSBhdHRyKGVsLCBcImhpZGRlblwiLCB2YWxpZCA/IFwiXCIgOiBudWxsKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZW5kZXJDb21ib2JveChjb21ib2JveCk7XG5cdFx0XHRcdHJlbmRlckNvdW50ZXIoaW5wdXQpO1xuXHRcdFx0XHRyZW5kZXJUZXh0YXJlYVNpemUoaW5wdXQpO1xuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgZGVzY3MubWFwKHVzZUlkKS5qb2luKFwiIFwiKSB8fCBudWxsKTsgLy8gUmVtb3ZlIGlmIGVtcHR5XG5cdFx0XHRcdGF0dHIoaW5wdXQsIFwiYXJpYS1pbnZhbGlkXCIsIGAkeyF2YWxpZH1gKTtcblx0XHRcdH1cblx0XHR9XG59XG5cbi8vIGlPUyBkb2VzIG5vdCBzdXBwb3J0IGZpZWxkLXNpemluZzogY29udGVudCwgc28gd2UgbmVlZCB0byBtYW51YWxseSByZXNpemVcbmZ1bmN0aW9uIHJlbmRlclRleHRhcmVhU2l6ZSh0ZXh0YXJlYTogRWxlbWVudCkge1xuXHRpZiAodGV4dGFyZWEgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG5cdFx0dGV4dGFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXCItLW10ZHMtdGV4dGFyZWEtaGVpZ2h0XCIsIFwiYXV0b1wiKTtcblx0XHR0ZXh0YXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcdFwiLS1tdGRzLXRleHRhcmVhLWhlaWdodFwiLFxuXHRcdFx0YCR7dGV4dGFyZWEuc2Nyb2xsSGVpZ2h0fXB4YCxcblx0XHQpO1xuXHR9XG59XG5cbi8vIFNldHVwIHRyYW5zbGF0aW9ucyBmcm9tIENTUyBjdXN0b20gcHJvcGVydGllc1xuZnVuY3Rpb24gcmVuZGVyQ29tYm9ib3goZWw6IFVIVE1MQ29tYm9ib3hFbGVtZW50IHwgbnVsbCkge1xuXHRjb25zdCB7IGNvbnRyb2wsIGxpc3QgfSA9IGVsIHx8IHt9O1xuXG5cdGlmIChlbCAmJiBsaXN0ICYmICFlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLXNyLWFkZGVkXCIpKSB7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWFkZGVkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtYWRkZWRcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1lbXB0eVwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWVtcHR5XCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItZm91bmRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1mb3VuZFwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWludmFsaWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1pbnZhbGlkXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3Itb2ZcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1vZlwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLXJlbW92ZVwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LXJlbW92ZVwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLXJlbW92ZWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1yZW1vdmVkXCIpKTtcblx0XHRhdHRyKGxpc3QsIFwiZGF0YS1zci1wbHVyYWxcIiwgZ2V0VGV4dChzdHlsZSwgXCJkYXRhbGlzdC1wbHVyYWxcIikpO1xuXHRcdGF0dHIobGlzdCwgXCJkYXRhLXNyLXNpbmd1bGFyXCIsIGdldFRleHQoc3R5bGUsIFwiZGF0YWxpc3Qtc2luZ3VsYXJcIikpO1xuXHR9XG5cdGlmIChsaXN0ICYmIGNvbnRyb2wgJiYgIWxpc3QuaGFzQXR0cmlidXRlKFwicG9wb3ZlclwiKSkge1xuXHRcdGF0dHIobGlzdCwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpO1xuXHRcdGF0dHIoY29udHJvbCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKGxpc3QpKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW5kZXJDb3VudGVyKGlucHV0OiBIVE1MSW5wdXRFbGVtZW50KSB7XG5cdGNvbnN0IGVsID0gaW5wdXQ/Lm5leHRFbGVtZW50U2libGluZztcblx0Y29uc3QgbGltaXQgPSBlbCAmJiBhdHRyKGVsLCBcImRhdGEtY291bnRcIik7XG5cblx0aWYgKGVsICYmIGxpbWl0KSB7XG5cdFx0Y29uc3QgcmVtYWluZGVyID0gTnVtYmVyKGxpbWl0KSAtIGlucHV0LnZhbHVlLmxlbmd0aDtcblx0XHRjb25zdCBuZXh0SW52YWxpZCA9IHJlbWFpbmRlciA8IDA7XG5cdFx0Y29uc3QgcHJldkludmFsaWQgPSBhdHRyKGVsLCBcImFyaWEtbGl2ZVwiKSA9PT0gXCJwb2xpdGVcIjtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsIHx8IGlucHV0KTtcblx0XHRjb25zdCBvdmVyID0gZ2V0VGV4dChzdHlsZSwgXCJjb3VudC1vdmVyXCIpO1xuXHRcdGNvbnN0IHVuZGVyID0gZ2V0VGV4dChzdHlsZSwgXCJjb3VudC11bmRlclwiKTtcblxuXHRcdGlmIChwcmV2SW52YWxpZCAhPT0gbmV4dEludmFsaWQpIHtcblx0XHRcdGF0dHIoZWwsIFwiYXJpYS1saXZlXCIsIG5leHRJbnZhbGlkID8gXCJwb2xpdGVcIiA6IFwib2ZmXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBjc3Mgb2YgQ1NTX1ZBTElEQVRJT05TKSBlbC5jbGFzc0xpc3QudG9nZ2xlKGNzcywgbmV4dEludmFsaWQpO1xuXHRcdH1cblx0XHRlbC50ZXh0Q29udGVudCA9IChuZXh0SW52YWxpZCA/IG92ZXIgOiB1bmRlcikucmVwbGFjZShcblx0XHRcdFwiJWRcIixcblx0XHRcdGAke01hdGguYWJzKHJlbWFpbmRlcil9YCxcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZpZWxkVG9nZ2xlKGV2ZW50OiBFdmVudCAmIHsgbmV3U3RhdGU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgVUhUTUxEYXRhTGlzdEVsZW1lbnQpIHtcblx0XHRjb25zdCBsaXN0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdGNvbnN0IHJvb3QgPSBsaXN0LmdldFJvb3ROb2RlKCkgYXMgU2hhZG93Um9vdCB8IG51bGw7XG5cdFx0Y29uc3QgYW5jaG9yID0gcm9vdD8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG5cdFx0XHRgW3BvcG92ZXJ0YXJnZXQ9XCIke2xpc3QuaWR9XCJdYCxcblx0XHQpO1xuXG5cdFx0aWYgKGV2ZW50Lm5ld1N0YXRlID09PSBcImNsb3NlZFwiKSBhbmNob3JQb3NpdGlvbihsaXN0LCBmYWxzZSk7XG5cdFx0ZWxzZSBpZiAoYW5jaG9yKVxuXHRcdFx0YW5jaG9yUG9zaXRpb24obGlzdCwgYW5jaG9yLCB7XG5cdFx0XHRcdHBsYWNlbWVudDogKGF0dHIobGlzdCwgXCJkYXRhLXBvc2l0aW9uXCIpID8/IFwiYm90dG9tXCIpIGFzIFBsYWNlbWVudCxcblx0XHRcdFx0bWlkZGxld2FyZTogW1xuXHRcdFx0XHRcdGZsaXAoKSxcblx0XHRcdFx0XHRzaGlmdCgpLFxuXHRcdFx0XHRcdHNpemUoe1xuXHRcdFx0XHRcdFx0cGFkZGluZzogMTAsXG5cdFx0XHRcdFx0XHRhcHBseSh7IGF2YWlsYWJsZUhlaWdodCB9KSB7XG5cdFx0XHRcdFx0XHRcdGxpc3Quc3R5bGUud2lkdGggPSBgJHthbmNob3Iub2Zmc2V0V2lkdGh9cHhgO1xuXHRcdFx0XHRcdFx0XHRsaXN0LnN0eWxlLm1heEhlaWdodCA9IGAke01hdGgubWF4KDUwLCBhdmFpbGFibGVIZWlnaHQpfXB4YDtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdF0sXG5cdFx0XHR9KTtcblx0fVxufVxuLy8gVXBkYXRlIHdoZW4gdHlwaW5nXG5mdW5jdGlvbiBoYW5kbGVGaWVsZElucHV0KGV2ZW50OiBFdmVudCkge1xuXHRpZiAoaXNJbnB1dExpa2UoZXZlbnQudGFyZ2V0KSkge1xuXHRcdHJlbmRlckNvdW50ZXIoZXZlbnQudGFyZ2V0KTtcblx0XHRyZW5kZXJUZXh0YXJlYVNpemUoZXZlbnQudGFyZ2V0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGaWVsZFZhbGRpYXRpb24oZXZlbnQ6IEV2ZW50KSB7XG5cdGNvbnN0IGZpZWxkID0gKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKGAuJHtDU1NfRklFTER9YCk7XG5cdGlmIChldmVudC50eXBlID09PSBcImludmFsaWRcIiAmJiBmaWVsZCkgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gUHJldmVudCBicm93c2VycyBmcm9tIHNob3dpbmcgZGVmYXVsdCB2YWxpZGF0aW9uIGJ1YmJsZXNcblx0aGFuZGxlRmllbGRNdXRhdGlvbihkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKENTU19GSUVMRCksIHRydWUpOyAvLyBVcGRhdGUgc3RhdGVcbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0ZJRUxELCBoYW5kbGVGaWVsZE11dGF0aW9uKTtcblx0b24oZG9jdW1lbnQsIFwiaW5wdXRcIiwgaGFuZGxlRmllbGRJbnB1dCwgUVVJQ0tfRVZFTlQpO1xuXHRvbihkb2N1bWVudCwgXCJpbnZhbGlkLHN1Ym1pdFwiLCBoYW5kbGVGaWVsZFZhbGRpYXRpb24sIHRydWUpOyAvLyBVc2UgY2FwdHVyZSBhcyBpbnZhbGlkIGFuZCBzdWJtaXQgZG9lcyBub3QgYnViYmxlXG5cdG9uKGRvY3VtZW50LCBcInRvZ2dsZVwiLCBoYW5kbGVGaWVsZFRvZ2dsZSwgUVVJQ0tfRVZFTlQpOyAvLyBVc2UgY2FwdHVyZSBzaW5jZSB0b2dnbGUgZG9lcyBub3QgYnViYmxlXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBpc0lucHV0TGlrZSwgb25Mb2FkZWQsIG9uTXV0YXRpb24sIHVzZUlkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19GSUVMRFNFVCA9IHN0eWxlcy5maWVsZHNldC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVkFMSURBVElPTiA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IEFSSUFfREVTQyA9IFwiYXJpYS1kZXNjcmliZWRieVwiO1xuY29uc3QgQVJJQV9JTlZBTElEID0gXCJhcmlhLWludmFsaWRcIjtcblxuLy8gVXNpbmcgc2V0VGltZW91dCB0byBlbnN1cmUgaXQgcnVucyBhZnRlciBmaWVsZC1vYnNlcnZlclxuZnVuY3Rpb24gaGFuZGxlRmllbGRzZXRNdXRhdGlvbihmaWVsZHNldHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4pIHtcblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBmaWVsZHNldCBvZiBmaWVsZHNldHMpXG5cdFx0XHRpZiAoZmllbGRzZXQuaXNDb25uZWN0ZWQpIHtcblx0XHRcdFx0Y29uc3QgaW5wdXRzOiBIVE1MSW5wdXRFbGVtZW50W10gPSBbXTtcblx0XHRcdFx0bGV0IHZhbGlkSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHRcdFx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgZWwgb2YgZmllbGRzZXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpKSB7XG5cdFx0XHRcdFx0aWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhDU1NfVkFMSURBVElPTikpIHtcblx0XHRcdFx0XHRcdHZhbGlkID0gYXR0cihlbCwgXCJkYXRhLWNvbG9yXCIpID09PSBcInN1Y2Nlc3NcIiB8fCAhZWwuY2xpZW50SGVpZ2h0OyAvLyBPbmx5IHNldCBpbnZhbGlkIGlmIFZhbGlkYXRpb24gaXMgdmlzaWJsZVxuXHRcdFx0XHRcdFx0dmFsaWRJZCA9IHVzZUlkKGVsKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSkgaW5wdXRzLnB1c2goZWwpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dHMpIHtcblx0XHRcdFx0XHRjb25zdCBkZXNjID0gYXR0cihpbnB1dCwgQVJJQV9ERVNDKT8ucmVwbGFjZSh2YWxpZElkIHx8IFwiI1wiLCBcIlwiKTtcblxuXHRcdFx0XHRcdGF0dHIoaW5wdXQsIEFSSUFfREVTQywgYCR7dmFsaWRJZCB8fCBcIlwifSAke2Rlc2MgfHwgXCJcIn1gLnRyaW0oKSk7XG5cdFx0XHRcdFx0YXR0cihpbnB1dCwgQVJJQV9JTlZBTElELCBgJHshdmFsaWR9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfRklFTERTRVQsIGhhbmRsZUZpZWxkc2V0TXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfTE9HTyA9IHN0eWxlcy5sb2dvLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTG9nb011dGF0aW9uKFtsb2dvXTogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0aWYgKGxvZ28/LmlzQ29ubmVjdGVkICYmIGxvZ28/LmZpcnN0RWxlbWVudENoaWxkIGluc3RhbmNlb2YgU1ZHU1ZHRWxlbWVudCkge1xuXHRcdGZvciAoY29uc3QgaWNvbiBvZiBkb2N1bWVudC5oZWFkLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaW5rW3JlbH49J2ljb24nXVwiKSlcblx0XHRcdGljb24uc2V0QXR0cmlidXRlKFwicmVsXCIsIFwiZGlzYWJsZWRcIik7IC8vIERpc2FibGUgcHJldmlvdXMgaWNvbiAoYnV0IG5vdCByZW1vdmUgaXMgYXMgdGhpcyBtYWtlcyBOZXh0LmpzIHNhZClcblxuXHRcdGNvbnN0IHN2ZyA9IGxvZ28uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0Y29uc3QgaXNEb3QgPSBsb2dvPy5oYXNBdHRyaWJ1dGUoXCJkYXRhLWVudlwiKTtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHN2Zyk7XG5cdFx0Y29uc3QgdGV4dCA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJjb2xvclwiKTtcblx0XHRjb25zdCBiYWNrID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIi0tbXRkcy1sb2dvLWNvbG9yXCIpO1xuXHRcdGNvbnN0IGljb24gPSBzdmcub3V0ZXJIVE1MXG5cdFx0XHQucmVwbGFjZSgvXFxuKy9nLCBcIiBcIikgLy8gUHJldmVudCBsaW5lIGJyZWFrc1xuXHRcdFx0LnJlcGxhY2UoLyhmaWxsfHdpZHRofGhlaWdodHx4bWxucyk9XCJbXlwiXStcIi9naSwgXCJcIilcblx0XHRcdC5yZXBsYWNlKFwiPHN2Z1wiLCBgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiBmaWxsPVwiJHt0ZXh0fVwiYCk7XG5cblx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFxuXHRcdFx0T2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKSwge1xuXHRcdFx0XHRocmVmOiBgZGF0YTppbWFnZS9zdmcreG1sLCR7ZW5jb2RlVVJJQ29tcG9uZW50KGA8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDU1IDU1Jz48cmVjdCBmaWxsPScke2lzRG90ID8gXCJub25lXCIgOiBiYWNrfScgd2lkdGg9JzUxJyBoZWlnaHQ9JzUxJyB4PScyJyB5PScyJyBzdHJva2U9JyR7dGV4dH0nIHN0cm9rZS1kYXNoYXJyYXk9JzAuMDkgNi4zOCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2Utb3BhY2l0eT0nJHtpc0RvdCA/IDAuNiA6IDB9JyBzdHJva2Utd2lkdGg9JzIuMycgcng9JzI1LjUnLz48ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNy41IDcuNSlcIj4ke2ljb259PC9nPjwvc3ZnPmApfWAsXG5cdFx0XHRcdHJlbDogXCJpY29uXCIsXG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfTE9HTywgaGFuZGxlTG9nb011dGF0aW9uKSxcbik7XG4iLCJpbXBvcnQgeyBmbGlwLCB0eXBlIFBsYWNlbWVudCwgc2hpZnQsIHNpemUgfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGFuY2hvclBvc2l0aW9uLCBhdHRyLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19QT1BPVkVSID0gc3R5bGVzLnBvcG92ZXIuc3BsaXQoXCIgXCIpWzBdO1xubGV0IE9QRU5fUE9QT1ZFUlMgPSAwOyAvLyBTcGVlZCB1cCBieSBvbmx5IGNoZWNraW5nIGNsaWNrcyBpZiB3ZSBoYXZlIG9wZW4gcG9wb3ZlcnNcblxuZnVuY3Rpb24gaGFuZGxlUG9wb3ZlclRvZ2dsZSh7XG5cdHRhcmdldDogZWwsXG5cdG5ld1N0YXRlLFxufTogRXZlbnQgJiB7IG5ld1N0YXRlPzogc3RyaW5nIH0pIHtcblx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19QT1BPVkVSKSkge1xuXHRcdGNvbnN0IGlzQ2xvc2luZyA9IG5ld1N0YXRlID09PSBcImNsb3NlZFwiO1xuXHRcdGNvbnN0IGlzQ29udGFpbiA9IGF0dHIoZWwsIFwiZGF0YS1vdmVyc2Nyb2xsXCIpID09PSBcImNvbnRhaW5cIjtcblx0XHRjb25zdCBhbmNob3IgPSAoZWwuZ2V0Um9vdE5vZGUoKSBhcyBTaGFkb3dSb290KT8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG5cdFx0XHRgW3BvcG92ZXJ0YXJnZXQ9XCIke2VsLmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdE9QRU5fUE9QT1ZFUlMgKz0gaXNDbG9zaW5nID8gLTEgOiAxO1xuXHRcdGlmIChpc0Nsb3NpbmcpIGFuY2hvclBvc2l0aW9uKGVsLCBmYWxzZSk7XG5cdFx0ZWxzZSBpZiAoYW5jaG9yKVxuXHRcdFx0YW5jaG9yUG9zaXRpb24oZWwsIGFuY2hvciwge1xuXHRcdFx0XHRwbGFjZW1lbnQ6IChhdHRyKGVsLCBcImRhdGEtcG9zaXRpb25cIikgfHwgXCJib3R0b21cIikgYXMgUGxhY2VtZW50LFxuXHRcdFx0XHRtaWRkbGV3YXJlOiBbZmxpcCgpLCBzaGlmdCh7IHBhZGRpbmc6IDEwIH0pXS5jb25jYXQoXG5cdFx0XHRcdFx0aXNDb250YWluXG5cdFx0XHRcdFx0XHQ/IHNpemUoe1xuXHRcdFx0XHRcdFx0XHRcdHBhZGRpbmc6IDEwLFxuXHRcdFx0XHRcdFx0XHRcdGFwcGx5KHsgYXZhaWxhYmxlSGVpZ2h0IH0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVsLnN0eWxlLm1heEhlaWdodCA9IGAke01hdGgubWF4KDUwLCBhdmFpbGFibGVIZWlnaHQpfXB4YDtcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0OiBbXSxcblx0XHRcdFx0KSxcblx0XHRcdH0pO1xuXHR9XG59XG5cbi8vIFBvbHlmaWxsIHBvcG92ZXJ0YXJnZXQgZm9yIDxhPiAobm90IHN1cHBvcnRlZCBieSBuYXRpdmUpXG4vLyBhbmQgYXV0b21hdGljYWxseSBhc3N1bWUgcG9wb3ZlcnRhcmdldCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQgcG9wb3ZlclxuLy8gYnV0IHJlc3BlY3QgdGhlIHBvcG92ZXJ0YXJnZXQgYW5kIHBvcG92ZXJ0YXJnZXRhY3Rpb24gYXR0cmlidXRlXG5mdW5jdGlvbiBoYW5kbGVQb3BvdmVyTGlua0NsaWNrKHsgdGFyZ2V0IH06IEV2ZW50KSB7XG5cdGNvbnN0IGNsb3NlID1cblx0XHRPUEVOX1BPUE9WRVJTICYmICh0YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImEsW3BvcG92ZXJ0YXJnZXRhY3Rpb25dXCIpO1xuXG5cdGlmIChjbG9zZSkge1xuXHRcdGNvbnN0IGFjdGlvbiA9IGF0dHIoY2xvc2UsIFwicG9wb3ZlcnRhcmdldGFjdGlvblwiKSB8fCBcInRvZ2dsZVwiO1xuXHRcdGNvbnN0IG9wZW4gPSBhY3Rpb24gPT09IFwic2hvd1wiIHx8IChhY3Rpb24gPT09IFwiaGlkZVwiID8gZmFsc2UgOiB1bmRlZmluZWQpO1xuXHRcdGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGF0dHIoY2xvc2UsIFwicG9wb3ZlcnRhcmdldFwiKSB8fCBcIlwiKTtcblx0XHRjb25zdCBwb3BvdmVyID0gKHRhcmdldCB8fCBjbG9zZSkuY2xvc2VzdDxIVE1MRWxlbWVudD4oYC4ke0NTU19QT1BPVkVSfWApO1xuXG5cdFx0Ly8gUG9wb3ZlciBjYW4gYmUgZGlzY29ubmV0ZWQgYnkgY2xpY2sgaGFuZGxlciBkZWVwZXIgZG93biBpbiB0aGUgRE9NIHRocmVlIGJlZm9yZSByZWFjaGluZyBkb2N1bWVudFxuXHRcdGlmIChwb3BvdmVyPy5pc0Nvbm5lY3RlZCAmJiBwb3BvdmVyPy50b2dnbGVQb3BvdmVyKVxuXHRcdFx0cG9wb3Zlci50b2dnbGVQb3BvdmVyKG9wZW4pO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwidG9nZ2xlXCIsIGhhbmRsZVBvcG92ZXJUb2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVQb3BvdmVyTGlua0NsaWNrKTsgLy8gQWxsb3cgYDxhPmAgdG8gdXNlIGBwb3BvdmVydGFyZ2V0YCBhcyB3ZWxsXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfVEFCTEUgPSBzdHlsZXMudGFibGUuc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVUYWJsZU11dGF0aW9uKHRhYmxlczogSFRNTENvbGxlY3Rpb25PZjxIVE1MVGFibGVFbGVtZW50Pikge1xuXHRmb3IgKGNvbnN0IHRhYmxlIG9mIHRhYmxlcykge1xuXHRcdGNvbnN0IHRocyA9IEFycmF5LmZyb20odGFibGUudEhlYWQ/LnJvd3NbMF0/LmNlbGxzIHx8IFtdLCAodGgpID0+XG5cdFx0XHR0aC5pbm5lclRleHQudHJpbSgpLFxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IHRib2R5IG9mIHRhYmxlLnRCb2RpZXMpXG5cdFx0XHRmb3IgKGNvbnN0IHJvdyBvZiB0Ym9keS5yb3dzKVxuXHRcdFx0XHRmb3IgKGNvbnN0IGNlbGwgb2Ygcm93LmNlbGxzKVxuXHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJkYXRhLXRoXCIsIHRoc1tjZWxsLmNlbGxJbmRleF0gfHwgXCI6ZW1wdHlcIik7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19UQUJMRSwgaGFuZGxlVGFibGVNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uLCBvbkxvYWRlZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfVE9HR0xFR1JPVVAgPSBgLiR7c3R5bGVzLnRvZ2dsZWdyb3VwLnNwbGl0KFwiIFwiKVswXX1gO1xuXG4vLyBQcmV2ZW50IGJyb3dzZXJzIGZyb20gc2hvd2luZyBkZWZhdWx0IHZhbGlkYXRpb24gYnViYmxlc1xuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlZ3JvdXBLZXlkb3duKGV2ZW50OiBFdmVudCAmIFBhcnRpYWw8S2V5Ym9hcmRFdmVudD4pIHtcblx0Y29uc3QgeyBrZXksIHRhcmdldDogZWwgfSA9IGV2ZW50O1xuXHRjb25zdCBncm91cCA9IGVsIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBlbC5jbG9zZXN0KENTU19UT0dHTEVHUk9VUCk7XG5cblx0aWYgKCFncm91cCkgcmV0dXJuO1xuXHRpZiAoa2V5ID09PSBcIkVudGVyXCIpIGVsLmNsaWNrKCk7XG5cdGlmIChrZXk/LnN0YXJ0c1dpdGgoXCJBcnJvd1wiKSkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0Y29uc3QgaW5wdXRzID0gZ3JvdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKTtcblx0XHRjb25zdCBpbmRleCA9IFsuLi5pbnB1dHNdLmluZGV4T2YoZWwpO1xuXHRcdGNvbnN0IG1vdmUgPSBrZXkubWF0Y2goL0Fycm93KFJpZ2h0fERvd24pLykgPyAxIDogLTE7XG5cdFx0aW5wdXRzWyhpbnB1dHMubGVuZ3RoICsgaW5kZXggKyBtb3ZlKSAlIGlucHV0cy5sZW5ndGhdPy5mb2N1cygpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBcImtleWRvd25cIiwgaGFuZGxlVG9nZ2xlZ3JvdXBLZXlkb3duKSk7XG4iLCJpbXBvcnQgeyBmbGlwLCB0eXBlIFBsYWNlbWVudCwgc2hpZnQgfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRJU19CUk9XU0VSLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdFFVSUNLX0VWRU5ULFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgREVTQ1JJQkVEQlkgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEVTQyA9IFwiRXNjYXBlXCI7XG5jb25zdCBMQUJFTExFREJZID0gXCJhcmlhLWxhYmVsbGVkYnlcIjtcbmNvbnN0IFBPU0lUSU9OX0NTU19QUk9QRVJUWSA9IFwiLS1tdGRzLXRvb2x0aXAtcG9zaXRpb25cIjtcbmNvbnN0IFRIUk9UVExFX0RFTEFZID0gMzAwO1xuY29uc3QgVE9PTFRJUCA9IElTX0JST1dTRVJcblx0PyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm10ZHMtdG9vbHRpcFwiKSB8fFxuXHRcdE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwge1xuXHRcdFx0Y2xhc3NOYW1lOiBzdHlsZXMuX3Rvb2x0aXAsXG5cdFx0XHRpZDogXCJtdGRzLXRvb2x0aXBcIixcblx0XHRcdHBvcG92ZXI6IFwibWFudWFsXCIsXG5cdFx0fSlcblx0OiBudWxsOyAvLyBDcmVhdGUgYSBkdW1teSBlbGVtZW50IHRvIGF2b2lkIG51bGwgY2hlY2tzXG5cbmxldCBBTkNIT1I6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbmxldCBMQVNUX0NBTEwgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5sZXQgVEhST1RUTEU6IG51bWJlciB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+ID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlVG9vbHRpcE1vdmUoeyB0YXJnZXQsIHR5cGUsIGtleSB9OiBFdmVudCAmIHsga2V5Pzogc3RyaW5nIH0pIHtcblx0aWYgKHR5cGUgPT09IFwia2V5ZG93blwiICYmIGtleSAhPT0gRVNDKSByZXR1cm47IC8vIEFsbG93IEVTQyBkaXNtaXNzIHRvIGZvbGxvdyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL3Rvb2x0aXAvXG5cdGNvbnN0IHdhaXQgPSBMQVNUX0NBTEwgKyBUSFJPVFRMRV9ERUxBWSAtIERhdGUubm93KCk7XG5cdGNsZWFyVGltZW91dChUSFJPVFRMRSk7XG5cdFRIUk9UVExFID0gc2V0VGltZW91dChcblx0XHRoYW5kbGVUb29sdGlwTW92ZVRocm90dGxlZCxcblx0XHRNYXRoLm1heCh3YWl0LCAwKSxcblx0XHRrZXkgPT09IEVTQyA/IG51bGwgOiB0YXJnZXQsXG5cdCk7XG59XG5cbi8vIFVzaW5nIGEgdGhyb3R0bGVkIGZ1bmN0aW9uIHRvIGF2b2lkIHBlcmZvcm1hbmNlIGlzc3Vlc1xuZnVuY3Rpb24gaGFuZGxlVG9vbHRpcE1vdmVUaHJvdHRsZWQodGFyZ2V0OiBFbGVtZW50IHwgbnVsbCkge1xuXHRMQVNUX0NBTEwgPSBEYXRlLm5vdygpO1xuXG5cdC8vIEJ1aWxkIGFuZCBhcHBlbmQgdG9vbHRpcCBpZiBub3QgZXhpc3Rpbmdcblx0aWYgKCFUT09MVElQIHx8IHRhcmdldCA9PT0gVE9PTFRJUCkgcmV0dXJuOyAvLyBBbGxvdyB0b29sdGlwIHRvIGJlIGhvdmVyZWQsIGZvbGxvd2luZyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIxLyNjb250ZW50LW9uLWhvdmVyLW9yLWZvY3VzXG5cdGlmICghVE9PTFRJUD8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFRPT0xUSVApOyAvLyBFbnN1cmUgY29ubmVjdGVkXG5cdGxldCBhbmNob3IgPSB0YXJnZXQ/LmNsb3Nlc3Q/LjxFbGVtZW50PihcIltkYXRhLXRvb2x0aXBdXCIpIHx8IG51bGw7XG5cblx0Ly8gTm8gbmVlZCB0byB1cGRhdGVcblx0aWYgKGFuY2hvciA9PT0gQU5DSE9SKSByZXR1cm47XG5cblx0Y29uc3QgY29udGVudCA9IChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwXCIpKSB8fCBcIlwiO1xuXHRjb25zdCBwb3NpdGlvbiA9XG5cdFx0KGFuY2hvciAmJiBhdHRyKGFuY2hvciwgXCJkYXRhLXRvb2x0aXAtcG9zaXRpb25cIikpIHx8XG5cdFx0d2luZG93XG5cdFx0XHQuZ2V0Q29tcHV0ZWRTdHlsZShhbmNob3IgfHwgZG9jdW1lbnQuYm9keSlcblx0XHRcdC5nZXRQcm9wZXJ0eVZhbHVlKFBPU0lUSU9OX0NTU19QUk9QRVJUWSlcblx0XHRcdD8udHJpbSgpIHx8XG5cdFx0XCJ0b3BcIjtcblxuXHRjb25zdCBpc0hpZGRlbiA9XG5cdFx0IWNvbnRlbnQgfHxcblx0XHRjb250ZW50ID09PSBcImZhbHNlXCIgfHxcblx0XHRjb250ZW50ID09PSBcInRydWVcIiB8fFxuXHRcdHBvc2l0aW9uID09PSBcIm5vbmVcIjtcblxuXHRpZiAoaXNIaWRkZW4pIGFuY2hvciA9IG51bGw7IC8vIERvIG5vdCBzaG93IHRvb2x0aXAgaWYgYm9vbGlzaCB2YWx1ZVxuXHRpZiAoYW5jaG9yKSBUT09MVElQLnRleHRDb250ZW50ID0gY29udGVudDsgLy8gT25seSB1cGRhdGUgY29udGVudCBpZiBuZXcgYW5jaG9yXG5cblx0Y29uc3QgaGFkTGFiZWwgPSBBTkNIT1IgJiYgYXR0cihBTkNIT1IsIExBQkVMTEVEQlkpID09PSBUT09MVElQPy5pZDtcblx0Y29uc3QgaGFzTGFiZWwgPVxuXHRcdChhbmNob3IgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuXHRcdFx0PyBhbmNob3IuaW5uZXJUZXh0XG5cdFx0XHQ6IGFuY2hvcj8udGV4dENvbnRlbnRcblx0XHQpPy50cmltKCkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShMQUJFTExFREJZKSB8fFxuXHRcdGFuY2hvcj8uaGFzQXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKTtcblxuXHRBTkNIT1I/LnJlbW92ZUF0dHJpYnV0ZShoYWRMYWJlbCA/IExBQkVMTEVEQlkgOiBERVNDUklCRURCWSk7IC8vIFVubGluayBwcmV2aW91cyBhbmNob3Jcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgZmFsc2UpOyAvLyBSZXNldCBhbmNob3IgcG9zaXRpb25cblxuXHRBTkNIT1IgPSBhbmNob3I7IC8vIFN0b3JlIG5ldyBhbmNob3IgLSBtaWdodCBiZSBudWxsIGlmIG5vIG5ldyBhbmNob3Jcblx0aWYgKEFOQ0hPUikgYXR0cihBTkNIT1IsIGhhc0xhYmVsID8gREVTQ1JJQkVEQlkgOiBMQUJFTExFREJZLCBUT09MVElQPy5pZCk7IC8vIFVzZSB0b29sdGlwIGFzIGRlc2NyaXB0aW9uIGlmIGFsbHJlYWR5IGhhcyBsYWJlbFxuXHRpZiAoQU5DSE9SPy5pc0Nvbm5lY3RlZCkgVE9PTFRJUC5oaWRlUG9wb3ZlcigpOyAvLyBIaWRlIHRvb2x0aXAgc28gaXQgY2FuIGJlIHBsYWNlZCBvbiB0b3AtbGF5ZXIgb24gbmV4dCBzaG93XG5cdFRPT0xUSVAudG9nZ2xlUG9wb3ZlcighIWFuY2hvcik7XG5cdGFuY2hvclBvc2l0aW9uKFRPT0xUSVAsIGFuY2hvciB8fCBmYWxzZSwge1xuXHRcdHBsYWNlbWVudDogcG9zaXRpb24gYXMgUGxhY2VtZW50LFxuXHRcdG1pZGRsZXdhcmU6IFtmbGlwKCksIHNoaWZ0KHsgcGFkZGluZzogMTAgfSldLFxuXHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJibHVyLGZvY3VzLG1vdXNlb3V0LG1vdXNlb3ZlclwiLCBoYW5kbGVUb29sdGlwTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwia2V5ZG93blwiLCBoYW5kbGVUb29sdGlwTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwiYmx1clwiLCBoYW5kbGVUb29sdGlwTW92ZSwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZGVjbGFyYXRpdmVTaGFkb3dSb290ID0gKHN0eWxlLCBzbG90ID0gXCI8c2xvdD48L3Nsb3Q+XCIpID0+IGA8dGVtcGxhdGUgc2hhZG93cm9vdG1vZGU9XCJvcGVuXCI+JHtzbG90fTxzdHlsZT4ke3N0eWxlfTwvc3R5bGU+PC90ZW1wbGF0ZT5gO1xuXG4vLyB1LWRldGFpbHMudHNcbnZhciBVSFRNTERldGFpbHNTdHlsZSA9IGAke0RJU1BMQVlfQkxPQ0t9XG46OnNsb3R0ZWQodS1zdW1tYXJ5KSB7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogYmxvY2sgfVxuOjpzbG90dGVkKHUtc3VtbWFyeSk6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi1pbmxpbmU6IC4wNWVtIC4zMTI1ZW07IGJvcmRlci1ibG9jazogLjMxMjVlbSBzb2xpZCB0cmFuc3BhcmVudDsgYm9yZGVyLWlubGluZS1zdGFydDogLjVlbSBzb2xpZCB9XG46OnNsb3R0ZWQodS1zdW1tYXJ5W2FyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJdKTo6YmVmb3JlIHsgcm90YXRlOiA5MGRlZyB9XG46aG9zdCA+IFtwYXJ0PVwiZGV0YWlscy1jb250ZW50XCJdOm5vdChbaGlkZGVuPVwiXCJdKSB7IGRpc3BsYXk6IGJsb2NrIH1gO1xudmFyIFVIVE1MRGV0YWlsc1NoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoXG4gIFVIVE1MRGV0YWlsc1N0eWxlLFxuICAnPHNsb3QgbmFtZT1cInN1bW1hcnlcIj48L3Nsb3Q+PHNsb3QgcGFydD1cImRldGFpbHMtY29udGVudFwiIGhpZGRlbj1cInVudGlsLWZvdW5kXCI+PC9zbG90Pidcbik7XG52YXIgVUhUTUxEZXRhaWxzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyBVc2luZyB1bmRlcnNjb3JlIGluc3RlYWQgb2YgcHJpdmF0ZSBmaWVsZHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5fY29udGVudCA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnNoYWRvd1Jvb3QpXG4gICAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBuYW1lOiBcInN1bW1hcnlcIiB9KSxcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBwYXJ0OiBcImRldGFpbHMtY29udGVudFwiIH0pLFxuICAgICAgICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgVUhUTUxEZXRhaWxzU3R5bGUpXG4gICAgICApO1xuICB9XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJvcGVuXCJdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHZhciBfYTI7XG4gICAgdGhpcy5fY29udGVudCA9IChfYTIgPSB0aGlzLnNoYWRvd1Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2hpbGRyZW5bMV07XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJncm91cFwiKTtcbiAgICBvbih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLl9jb250ZW50KSBvZmYodGhpcy5fY29udGVudCwgXCJiZWZvcmVtYXRjaFwiLCB0aGlzKTtcbiAgICBvZmYodGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBwcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgaGlkZSA9IFwib25iZWZvcmVtYXRjaFwiIGluIHRoaXMgPyBcInVudGlsLWZvdW5kXCIgOiB0cnVlO1xuICAgIGNvbnN0IG9wZW4gPSB0aGlzLm9wZW47XG4gICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLmNoaWxkcmVuKVxuICAgICAgaWYgKGVsLm5vZGVOYW1lID09PSBcIlUtU1VNTUFSWVwiKSBhdHRyKGVsLCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7b3Blbn1gKTtcbiAgICBpZiAodGhpcy5fY29udGVudCkge1xuICAgICAgYXR0cih0aGlzLl9jb250ZW50LCBcImFyaWEtaGlkZGVuXCIsIGAkeyFvcGVufWApO1xuICAgICAgdGhpcy5fY29udGVudC5oaWRkZW4gPSBvcGVuID8gZmFsc2UgOiBoaWRlO1xuICAgIH1cbiAgICBpZiAob3BlbiAmJiB0aGlzLm5hbWUpIHtcbiAgICAgIGNvbnN0IHVEZXRhaWxzTGlzdCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYCR7dGhpcy5ub2RlTmFtZX1bbmFtZT1cIiR7dGhpcy5uYW1lfVwiXWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IHVEZXRhaWxzIG9mIHVEZXRhaWxzTGlzdClcbiAgICAgICAgaWYgKHVEZXRhaWxzICE9PSB0aGlzKSB1RGV0YWlscy5vcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChwcm9wID09PSBcIm9wZW5cIiAmJiBwcmV2ID09PSBudWxsICE9PSAobmV4dCA9PT0gbnVsbCkpXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwidG9nZ2xlXCIpKTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCI6c2NvcGUgPiB1LXN1bW1hcnlcIik7XG4gICAgY29uc3QgaXNTdW1tYXJ5ID0gc3VtbWFyeSA9PSBudWxsID8gdm9pZCAwIDogc3VtbWFyeS5jb250YWlucyhldmVudC50YXJnZXQpO1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmVmb3JlbWF0Y2hcIikgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICBpZiAoaXNTdW1tYXJ5ICYmIGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiKSBhc0J1dHRvbihldmVudCk7XG4gICAgaWYgKGlzU3VtbWFyeSAmJiBldmVudC50eXBlID09PSBcImNsaWNrXCIpIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG4gIH1cbiAgZ2V0IG9wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwib3BlblwiKTtcbiAgfVxuICBzZXQgb3Blbih2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJvcGVuXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFwibmFtZVwiKSB8fCBcIlwiO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcIm5hbWVcIiwgdmFsdWUpO1xuICB9XG59O1xudmFyIFVIVE1MU3VtbWFyeUVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIHRoaXMuc2xvdCA9IFwic3VtbWFyeVwiO1xuICAgIHRoaXMudGFiSW5kZXggPSAwO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1kZXRhaWxzXCIsIFVIVE1MRGV0YWlsc0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1zdW1tYXJ5XCIsIFVIVE1MU3VtbWFyeUVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERldGFpbHNFbGVtZW50LCBVSFRNTERldGFpbHNTaGFkb3dSb290LCBVSFRNTERldGFpbHNTdHlsZSwgVUhUTUxTdW1tYXJ5RWxlbWVudCB9O1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0ZJUkVGT1ggPSBJU19CUk9XU0VSICYmIC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZ2V0TGFiZWwgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgbGFiZWwgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikgfHwgXCJcIjtcbiAgY29uc3QgbGFiZWxzID0gKChfYTIgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxsZWRieVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkuc3BsaXQoL1xccysvKSkgfHwgW107XG4gIHJldHVybiBbXG4gICAgLi4ubGFiZWxzLm1hcCgoaWQyKSA9PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZDIpKSxcbiAgICAvLyBHZXQgYWxsIGxhYmVsbGVkYnkgZWxlbWVudHNcbiAgICAuLi5BcnJheS5mcm9tKGVsLmxhYmVscyB8fCBbXSlcbiAgICAvLyBHZXQgYWxsIDxsYWJlbD4gZWxlbWVudHNcbiAgXS5yZWR1Y2UoKGFjYywgZWwyKSA9PiB7XG4gICAgdmFyIF9hMztcbiAgICByZXR1cm4gYWNjIHx8ICgoX2EzID0gZWwyID09IG51bGwgPyB2b2lkIDAgOiBlbDIuaW5uZXJUZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnRyaW0oKSkgfHwgXCJcIjtcbiAgfSwgbGFiZWwpO1xufTtcbnZhciBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QgPSAoc3R5bGUsIHNsb3QgPSBcIjxzbG90Pjwvc2xvdD5cIikgPT4gYDx0ZW1wbGF0ZSBzaGFkb3dyb290bW9kZT1cIm9wZW5cIj4ke3Nsb3R9PHN0eWxlPiR7c3R5bGV9PC9zdHlsZT48L3RlbXBsYXRlPmA7XG5cbi8vIHUtcHJvZ3Jlc3MudHNcbnZhciBVSFRNTFByb2dyZXNzU3R5bGUgPSBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgYm9yZGVyOiAxcHggc29saWQ7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgaGVpZ2h0OiAuNWVtOyB3aWR0aDogMTBlbTsgb3ZlcmZsb3c6IGhpZGRlbiB9XG46aG9zdDo6YmVmb3JlIHsgY29udGVudDogJyc7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDEwMCU7IGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsgd2lkdGg6IHZhcigtLXBlcmNlbnRhZ2UsIDAlKTsgdHJhbnNpdGlvbjogd2lkdGggLjJzIH1cbjpob3N0KDpub3QoW3ZhbHVlXSkpIHsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLGN1cnJlbnRDb2xvciAyNSUsIHRyYW5zcGFyZW50IDUwJSwgY3VycmVudENvbG9yIDc1JSkgNTAlLzQwMCUgfVxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSB7IDpob3N0IHsgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlIDJzIGxpbmVhciBpbmZpbml0ZSB9ICB9XG5Aa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUgeyBmcm9tIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAxMDAlIH0gdG8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDAgfSB9YDtcbnZhciBVSFRNTFByb2dyZXNzU2hhZG93Um9vdCA9IGRlY2xhcmF0aXZlU2hhZG93Um9vdChcbiAgVUhUTUxQcm9ncmVzc1N0eWxlLFxuICBcIjxzbG90IGhpZGRlbj48L3Nsb3Q+XCJcbik7XG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MUHJvZ3Jlc3NFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcInZhbHVlXCIsIFwibWF4XCJdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKCF0aGlzLnNoYWRvd1Jvb3QpXG4gICAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBoaWRkZW46IFwiXCIgfSksXG4gICAgICAgIC8vIFNsb3QgaGlkaW5nIGNvbnRlbnQgYWxsb3dzIGxlZ2FjeSBicm93c2VyIHRvIGRpc3BsYXkgZmFsbGJhY2sgdGV4dFxuICAgICAgICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgVUhUTUxQcm9ncmVzc1N0eWxlKVxuICAgICAgKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoU0tJUF9BVFRSX0NIQU5HRSkgcmV0dXJuO1xuICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgIGNvbnN0IHJvbGVJbWFnZSA9IElTX0lPUyB8fCBJU19GSVJFRk9YO1xuICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKHRoaXMucG9zaXRpb24gKiAxMDApKTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wZXJjZW50YWdlXCIsIGAke3BlcmNlbnRhZ2V9JWApO1xuICAgIGxldCBsYWJlbCA9IGdldExhYmVsKHRoaXMpO1xuICAgIGlmIChyb2xlSW1hZ2UpIGxhYmVsID0gYCR7bGFiZWwucmVwbGFjZSgvXFxkKyUkLywgXCJcIil9ICR7cGVyY2VudGFnZX0lYDtcbiAgICBpZiAoSVNfRklSRUZPWCkgZm9yIChjb25zdCBlbCBvZiB0aGlzLmxhYmVscykgYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIsIGxhYmVsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1idXN5XCIsIGAke3RoaXMucG9zaXRpb24gPT09IC0xfWApO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsXCIsIGxhYmVsLnRyaW0oKSk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtbGFiZWxsZWRieVwiLCBudWxsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1heFwiLCBcIjEwMFwiKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1pblwiLCBcIjBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVub3dcIiwgYCR7cGVyY2VudGFnZX1gKTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCByb2xlSW1hZ2UgPyBcImltZ1wiIDogXCJwcm9ncmVzc2JhclwiKTtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG4gIH1cbiAgZ2V0IGxhYmVscygpIHtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuY2xvc2VzdChcImxhYmVsOm5vdChbZm9yXSlcIik7XG4gICAgY29uc3QgaWQyID0gdXNlSWQodGhpcyk7XG4gICAgaWYgKGxhYmVsKSBsYWJlbC5odG1sRm9yID0gaWQyO1xuICAgIGNvbnN0IGVsID0gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYGxhYmVsW2Zvcj1cIiR7aWQyfVwiXWBcbiAgICApO1xuICAgIHJldHVybiBlbDtcbiAgfVxuICBnZXQgcG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUgPT09IG51bGwgPyAtMSA6IE1hdGgubWluKHRoaXMudmFsdWUgLyB0aGlzLm1heCwgMSk7XG4gIH1cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBnZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiKTtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IG1heCgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwibWF4XCIpIHx8IDE7XG4gIH1cbiAgc2V0IG1heChtYXgpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJtYXhcIiwgbWF4KTtcbiAgfVxufTtcbi8vIFByZXZlbnQgQ2hyb21lIERldlRvb2xzIHdhcm5pbmcgYWJvdXQgPGxhYmVsIGZvcj1cIlwiPiBwb2ludGluZyB0byA8dS1wcm9ncmVzcz5cblVIVE1MUHJvZ3Jlc3NFbGVtZW50LmZvcm1Bc3NvY2lhdGVkID0gdHJ1ZTtcbnZhciBpc051bWVyaWMgPSAodmFsdWUpID0+ICFOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlRmxvYXQoYCR7dmFsdWV9YCkpICYmIE51bWJlci5pc0Zpbml0ZShOdW1iZXIodmFsdWUpKTtcbnZhciBnZXROdW1iZXIgPSAoZWwsIGtleSkgPT4ge1xuICBjb25zdCB2YWx1ZSA9IGF0dHIoZWwsIGtleSk7XG4gIHJldHVybiBpc051bWVyaWModmFsdWUpID8gTWF0aC5tYXgoMCwgTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUpKSA6IG51bGw7XG59O1xudmFyIHNldE51bWJlciA9IChlbCwga2V5LCB2YWwpID0+IHtcbiAgaWYgKHZhbCA9PT0gbnVsbCB8fCBpc051bWVyaWModmFsKSkgYXR0cihlbCwga2V5LCBgJHt2YWx9YCk7XG4gIGVsc2UgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2V0IG5vbi1udW1lcmljICcke2F0dHJ9JzogJyR7dmFsfSdgKTtcbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXByb2dyZXNzXCIsIFVIVE1MUHJvZ3Jlc3NFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxQcm9ncmVzc0VsZW1lbnQsIFVIVE1MUHJvZ3Jlc3NTaGFkb3dSb290LCBVSFRNTFByb2dyZXNzU3R5bGUgfTtcbiJdLCJuYW1lcyI6WyJfX2RlZlByb3AiLCJfX2dldE93blByb3BTeW1ib2xzIiwiX19oYXNPd25Qcm9wIiwiX19wcm9wSXNFbnVtIiwiX19kZWZOb3JtYWxQcm9wIiwib2JqIiwia2V5IiwidmFsdWUiLCJfX3NwcmVhZFZhbHVlcyIsImEiLCJiIiwicHJvcCIsIklTX0JST1dTRVIiLCJJU19BTkRST0lEIiwiSVNfRklSRUZPWCIsIklTX0lPUyIsIl9hIiwiRk9DVVNfT1VUTElORSIsIlVIVE1MRWxlbWVudCIsImF0dHIiLCJlbCIsIm5hbWUiLCJldmVudHMiLCJhY3Rpb24iLCJlbGVtZW50IiwicmVzdCIsInR5cGUiLCJvbiIsIm9mZiIsIm9ic2VydmVycyIsIm11dGF0aW9uT2JzZXJ2ZXIiLCJvcHRpb25zIiwib2JzZXJ2ZXIiLCJkZXRhaWwiLCJhc0J1dHRvbiIsImV2ZW50IiwiaXNDbGljayIsImdldFJvb3QiLCJub2RlIiwiX2EyIiwicm9vdCIsImlkIiwidXNlSWQiLCJjcmVhdGVFbGVtZW50IiwidGFnTmFtZSIsInRleHQyIiwiYXR0cnMiLCJ2YWwiLCJjdXN0b21FbGVtZW50cyIsImluc3RhbmNlIiwiZ2V0TGFiZWwiLCJsYWJlbCIsImlkMiIsImFjYyIsImVsMiIsIl9hMyIsIkxJVkUiLCJMSVZFX1NSX0ZJWCIsInNwZWFrIiwic2V0VmFsdWUiLCJpbnB1dCIsImRhdGEiLCJfYiIsInByb3RvIiwiSVNfUFJFU1MiLCJpc01vdXNlRG93biIsIlVIVE1MQ29tYm9ib3hTdHlsZSIsIkVWRU5UUyIsIkVWRU5UX09OQ0UiLCJJU19GSVJFRk9YX0RFU0tUT1AiLCJJU19NT0JJTEUiLCJNT0RJRklFRCIsIkZBTFNFIiwiVEVYVFMiLCJVSFRNTENvbWJvYm94RWxlbWVudCIsInJlbmRlciIsInN5bmNJbnB1dFZhbHVlIiwiXyIsInRhcmdldCIsImlzRGlzYWJsZWQiLCJvbkJsdXIiLCJvbkNsaWNrIiwib25Gb2N1cyIsIm9uSW5wdXQiLCJvbktleURvd24iLCJ0YWciLCJ0ZXh0IiwiaXNEYXRhIiwiY29udHJvbCIsInNlbGYiLCJfZm9jdXMiLCJfdGV4dHMiLCJpdGVtcyIsImxpc3QiLCJtdWx0aXBsZSIsInByZXYiLCJuZXh0IiwiZWRpdHMiLCJhZGRlZE5vZGVzIiwicmVtb3ZlZE5vZGVzIiwic2hvdWxkQW5ub3VuY2UiLCJhcmlhRXhwYW5kZWQiLCJpbnB1dE1vZGUiLCJuZXh0Rm9jdXMiLCJpc1JlbW92ZSIsImlkeCIsInNlbGVjdCIsInJlbW92ZSIsIml0ZW0yIiwib3B0aW9uIiwibGFiZWwyIiwiYXJpYSIsIm9wdCIsIml0ZW0iLCJzeW5jQ2xlYXJXaXRoSW5wdXQiLCJzeW5jT3B0aW9uc1dpdGhJdGVtcyIsIl9zcGVhayIsInZhbHVlcyIsImRpc3BhdGNoTWF0Y2giLCJjaGFuZ2UiLCJjcmVhdGFibGUiLCJxdWVyeSIsIm1hdGNoIiwibyIsImRpc3BhdGNoQ2hhbmdlIiwicmVtb3ZhYmxlIiwiYWRkIiwiaSIsIm9uQmx1cnJlZCIsIngiLCJ5IiwiY2xlYXIiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJyZXBlYXQiLCJpc0NvbnRyb2wiLCJpblRleHQiLCJpbmRleCIsImZvcm0iLCJTQUZFX0xBQkVMTEVEQlkiLCJESVNQTEFZX0JMT0NLIiwiYXR0YWNoU3R5bGUiLCJjc3MiLCJVSFRNTFRhYnNTdHlsZSIsIlVIVE1MVGFiTGlzdFN0eWxlIiwiVUhUTUxUYWJQYW5lbFN0eWxlIiwiVUhUTUxUYWJTdHlsZSIsIkFSSUFfQ09OVFJPTFMiLCJBUklBX1NFTEVDVEVEIiwiVUhUTUxUYWJzRWxlbWVudCIsInF1ZXJ5V2l0aG91dE5lc3RlZCIsImdldFNlbGVjdGVkSW5kZXgiLCJzZXRTZWxlY3RlZCIsIlVIVE1MVGFiTGlzdEVsZW1lbnQiLCJ0YWIiLCJ0YWJzIiwiU0tJUF9BVFRSX0NIQU5HRSIsIlVIVE1MVGFiRWxlbWVudCIsInBhbmVscyIsIm5leHRQYW5lbCIsImdldFBhbmVsIiwicGFuZWwiLCJ0YWJsaXN0IiwidGFiTGlzdCIsIlVIVE1MVGFiUGFuZWxFbGVtZW50IiwiaGlkZGVuIiwiaXNGb2N1c2FibGUiLCJtaW4iLCJtYXgiLCJyb3VuZCIsImZsb29yIiwiY3JlYXRlQ29vcmRzIiwidiIsIm9wcG9zaXRlU2lkZU1hcCIsIm9wcG9zaXRlQWxpZ25tZW50TWFwIiwiY2xhbXAiLCJzdGFydCIsImVuZCIsImV2YWx1YXRlIiwicGFyYW0iLCJnZXRTaWRlIiwicGxhY2VtZW50IiwiZ2V0QWxpZ25tZW50IiwiZ2V0T3Bwb3NpdGVBeGlzIiwiYXhpcyIsImdldEF4aXNMZW5ndGgiLCJ5QXhpc1NpZGVzIiwiZ2V0U2lkZUF4aXMiLCJnZXRBbGlnbm1lbnRBeGlzIiwiZ2V0QWxpZ25tZW50U2lkZXMiLCJyZWN0cyIsInJ0bCIsImFsaWdubWVudCIsImFsaWdubWVudEF4aXMiLCJsZW5ndGgiLCJtYWluQWxpZ25tZW50U2lkZSIsImdldE9wcG9zaXRlUGxhY2VtZW50IiwiZ2V0RXhwYW5kZWRQbGFjZW1lbnRzIiwib3Bwb3NpdGVQbGFjZW1lbnQiLCJnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCIsImxyUGxhY2VtZW50IiwicmxQbGFjZW1lbnQiLCJ0YlBsYWNlbWVudCIsImJ0UGxhY2VtZW50IiwiZ2V0U2lkZUxpc3QiLCJzaWRlIiwiaXNTdGFydCIsImdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMiLCJmbGlwQWxpZ25tZW50IiwiZGlyZWN0aW9uIiwiZXhwYW5kUGFkZGluZ09iamVjdCIsInBhZGRpbmciLCJnZXRQYWRkaW5nT2JqZWN0IiwicmVjdFRvQ2xpZW50UmVjdCIsInJlY3QiLCJ3aWR0aCIsImhlaWdodCIsImNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50IiwiX3JlZiIsInJlZmVyZW5jZSIsImZsb2F0aW5nIiwic2lkZUF4aXMiLCJhbGlnbkxlbmd0aCIsImlzVmVydGljYWwiLCJjb21tb25YIiwiY29tbW9uWSIsImNvbW1vbkFsaWduIiwiY29vcmRzIiwiY29tcHV0ZVBvc2l0aW9uIiwiY29uZmlnIiwic3RyYXRlZ3kiLCJtaWRkbGV3YXJlIiwicGxhdGZvcm0iLCJ2YWxpZE1pZGRsZXdhcmUiLCJzdGF0ZWZ1bFBsYWNlbWVudCIsIm1pZGRsZXdhcmVEYXRhIiwicmVzZXRDb3VudCIsImZuIiwibmV4dFgiLCJuZXh0WSIsInJlc2V0IiwiZGV0ZWN0T3ZlcmZsb3ciLCJzdGF0ZSIsIl9hd2FpdCRwbGF0Zm9ybSRpc0VsZSIsImVsZW1lbnRzIiwiYm91bmRhcnkiLCJyb290Qm91bmRhcnkiLCJlbGVtZW50Q29udGV4dCIsImFsdEJvdW5kYXJ5IiwicGFkZGluZ09iamVjdCIsImNsaXBwaW5nQ2xpZW50UmVjdCIsIm9mZnNldFBhcmVudCIsIm9mZnNldFNjYWxlIiwiZWxlbWVudENsaWVudFJlY3QiLCJmbGlwIiwiX21pZGRsZXdhcmVEYXRhJGFycm93IiwiX21pZGRsZXdhcmVEYXRhJGZsaXAiLCJpbml0aWFsUGxhY2VtZW50IiwiY2hlY2tNYWluQXhpcyIsImNoZWNrQ3Jvc3NBeGlzIiwic3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIiwiZmFsbGJhY2tTdHJhdGVneSIsImZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24iLCJkZXRlY3RPdmVyZmxvd09wdGlvbnMiLCJpbml0aWFsU2lkZUF4aXMiLCJpc0Jhc2VQbGFjZW1lbnQiLCJmYWxsYmFja1BsYWNlbWVudHMiLCJoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uIiwicGxhY2VtZW50cyIsIm92ZXJmbG93Iiwib3ZlcmZsb3dzIiwib3ZlcmZsb3dzRGF0YSIsInNpZGVzIiwiX21pZGRsZXdhcmVEYXRhJGZsaXAyIiwiX292ZXJmbG93c0RhdGEkZmlsdGVyIiwibmV4dEluZGV4IiwibmV4dFBsYWNlbWVudCIsImQiLCJyZXNldFBsYWNlbWVudCIsIl9vdmVyZmxvd3NEYXRhJGZpbHRlcjIiLCJjdXJyZW50U2lkZUF4aXMiLCJzaGlmdCIsImxpbWl0ZXIiLCJjcm9zc0F4aXMiLCJtYWluQXhpcyIsIm1haW5BeGlzQ29vcmQiLCJjcm9zc0F4aXNDb29yZCIsIm1pblNpZGUiLCJtYXhTaWRlIiwibGltaXRlZENvb3JkcyIsInNpemUiLCJfc3RhdGUkbWlkZGxld2FyZURhdGEiLCJfc3RhdGUkbWlkZGxld2FyZURhdGEyIiwiYXBwbHkiLCJpc1lBeGlzIiwiaGVpZ2h0U2lkZSIsIndpZHRoU2lkZSIsIm1heGltdW1DbGlwcGluZ0hlaWdodCIsIm1heGltdW1DbGlwcGluZ1dpZHRoIiwib3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQiLCJvdmVyZmxvd0F2YWlsYWJsZVdpZHRoIiwibm9TaGlmdCIsImF2YWlsYWJsZUhlaWdodCIsImF2YWlsYWJsZVdpZHRoIiwieE1pbiIsInhNYXgiLCJ5TWluIiwieU1heCIsIm5leHREaW1lbnNpb25zIiwiaGFzV2luZG93IiwiZ2V0Tm9kZU5hbWUiLCJpc05vZGUiLCJnZXRXaW5kb3ciLCJfbm9kZSRvd25lckRvY3VtZW50IiwiZ2V0RG9jdW1lbnRFbGVtZW50IiwiaXNFbGVtZW50IiwiaXNIVE1MRWxlbWVudCIsImlzU2hhZG93Um9vdCIsImludmFsaWRPdmVyZmxvd0Rpc3BsYXlWYWx1ZXMiLCJpc092ZXJmbG93RWxlbWVudCIsIm92ZXJmbG93WCIsIm92ZXJmbG93WSIsImRpc3BsYXkiLCJnZXRDb21wdXRlZFN0eWxlIiwidGFibGVFbGVtZW50cyIsImlzVGFibGVFbGVtZW50IiwidG9wTGF5ZXJTZWxlY3RvcnMiLCJpc1RvcExheWVyIiwic2VsZWN0b3IiLCJ0cmFuc2Zvcm1Qcm9wZXJ0aWVzIiwid2lsbENoYW5nZVZhbHVlcyIsImNvbnRhaW5WYWx1ZXMiLCJpc0NvbnRhaW5pbmdCbG9jayIsImVsZW1lbnRPckNzcyIsIndlYmtpdCIsImlzV2ViS2l0IiwiZ2V0Q29udGFpbmluZ0Jsb2NrIiwiY3VycmVudE5vZGUiLCJnZXRQYXJlbnROb2RlIiwiaXNMYXN0VHJhdmVyc2FibGVOb2RlIiwibGFzdFRyYXZlcnNhYmxlTm9kZU5hbWVzIiwiZ2V0Tm9kZVNjcm9sbCIsInJlc3VsdCIsImdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yIiwicGFyZW50Tm9kZSIsImdldE92ZXJmbG93QW5jZXN0b3JzIiwidHJhdmVyc2VJZnJhbWVzIiwiX25vZGUkb3duZXJEb2N1bWVudDIiLCJzY3JvbGxhYmxlQW5jZXN0b3IiLCJpc0JvZHkiLCJ3aW4iLCJmcmFtZUVsZW1lbnQiLCJnZXRGcmFtZUVsZW1lbnQiLCJnZXRDc3NEaW1lbnNpb25zIiwiZ2V0Q29tcHV0ZWRTdHlsZSQxIiwiaGFzT2Zmc2V0Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJzaG91bGRGYWxsYmFjayIsInVud3JhcEVsZW1lbnQiLCJnZXRTY2FsZSIsImRvbUVsZW1lbnQiLCIkIiwibm9PZmZzZXRzIiwiZ2V0VmlzdWFsT2Zmc2V0cyIsInNob3VsZEFkZFZpc3VhbE9mZnNldHMiLCJpc0ZpeGVkIiwiZmxvYXRpbmdPZmZzZXRQYXJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJpbmNsdWRlU2NhbGUiLCJpc0ZpeGVkU3RyYXRlZ3kiLCJjbGllbnRSZWN0Iiwic2NhbGUiLCJ2aXN1YWxPZmZzZXRzIiwib2Zmc2V0V2luIiwiY3VycmVudFdpbiIsImN1cnJlbnRJRnJhbWUiLCJpZnJhbWVTY2FsZSIsImlmcmFtZVJlY3QiLCJnZXRXaW5kb3dTY3JvbGxCYXJYIiwibGVmdFNjcm9sbCIsImdldEhUTUxPZmZzZXQiLCJkb2N1bWVudEVsZW1lbnQiLCJzY3JvbGwiLCJodG1sUmVjdCIsImNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0IiwidG9wTGF5ZXIiLCJvZmZzZXRzIiwiaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQiLCJvZmZzZXRSZWN0IiwiaHRtbE9mZnNldCIsImdldENsaWVudFJlY3RzIiwiZ2V0RG9jdW1lbnRSZWN0IiwiaHRtbCIsImJvZHkiLCJTQ1JPTExCQVJfTUFYIiwiZ2V0Vmlld3BvcnRSZWN0IiwidmlzdWFsVmlld3BvcnQiLCJ2aXN1YWxWaWV3cG9ydEJhc2VkIiwid2luZG93U2Nyb2xsYmFyWCIsImRvYyIsImJvZHlTdHlsZXMiLCJib2R5TWFyZ2luSW5saW5lIiwiY2xpcHBpbmdTdGFibGVTY3JvbGxiYXJXaWR0aCIsImFic29sdXRlT3JGaXhlZCIsImdldElubmVyQm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yIiwiY2xpcHBpbmdBbmNlc3RvciIsImhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvciIsInN0b3BOb2RlIiwiZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzIiwiY2FjaGUiLCJjYWNoZWRSZXN1bHQiLCJjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSIsImVsZW1lbnRJc0ZpeGVkIiwiY29tcHV0ZWRTdHlsZSIsImN1cnJlbnROb2RlSXNDb250YWluaW5nIiwiYW5jZXN0b3IiLCJnZXRDbGlwcGluZ1JlY3QiLCJjbGlwcGluZ0FuY2VzdG9ycyIsImZpcnN0Q2xpcHBpbmdBbmNlc3RvciIsImNsaXBwaW5nUmVjdCIsImFjY1JlY3QiLCJnZXREaW1lbnNpb25zIiwiZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQiLCJzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0IiwiaXNTdGF0aWNQb3NpdGlvbmVkIiwiZ2V0VHJ1ZU9mZnNldFBhcmVudCIsInBvbHlmaWxsIiwicmF3T2Zmc2V0UGFyZW50IiwiZ2V0T2Zmc2V0UGFyZW50Iiwic3ZnT2Zmc2V0UGFyZW50IiwiZ2V0RWxlbWVudFJlY3RzIiwiZ2V0T2Zmc2V0UGFyZW50Rm4iLCJnZXREaW1lbnNpb25zRm4iLCJmbG9hdGluZ0RpbWVuc2lvbnMiLCJpc1JUTCIsInJlY3RzQXJlRXF1YWwiLCJvYnNlcnZlTW92ZSIsIm9uTW92ZSIsImlvIiwidGltZW91dElkIiwiY2xlYW51cCIsIl9pbyIsInJlZnJlc2giLCJza2lwIiwidGhyZXNob2xkIiwiZWxlbWVudFJlY3RGb3JSb290TWFyZ2luIiwiaW5zZXRUb3AiLCJpbnNldFJpZ2h0IiwiaW5zZXRCb3R0b20iLCJpbnNldExlZnQiLCJpc0ZpcnN0VXBkYXRlIiwiaGFuZGxlT2JzZXJ2ZSIsImVudHJpZXMiLCJyYXRpbyIsImF1dG9VcGRhdGUiLCJ1cGRhdGUiLCJhbmNlc3RvclNjcm9sbCIsImFuY2VzdG9yUmVzaXplIiwiZWxlbWVudFJlc2l6ZSIsImxheW91dFNoaWZ0IiwiYW5pbWF0aW9uRnJhbWUiLCJyZWZlcmVuY2VFbCIsImFuY2VzdG9ycyIsImNsZWFudXBJbyIsInJlb2JzZXJ2ZUZyYW1lIiwicmVzaXplT2JzZXJ2ZXIiLCJmaXJzdEVudHJ5IiwiX3Jlc2l6ZU9ic2VydmVyIiwiZnJhbWVJZCIsInByZXZSZWZSZWN0IiwiZnJhbWVMb29wIiwibmV4dFJlZlJlY3QiLCJfcmVzaXplT2JzZXJ2ZXIyIiwic2hpZnQkMSIsImZsaXAkMSIsInNpemUkMSIsIm1lcmdlZE9wdGlvbnMiLCJwbGF0Zm9ybVdpdGhDYWNoZSIsImNvbXB1dGVQb3NpdGlvbiQxIiwiUVVJQ0tfRVZFTlQiLCJkZWJvdW5jZSIsImNhbGxiYWNrIiwiZGVsYXkiLCJ0aW1lciIsImFyZ3MiLCJVVUlEIiwiVU5CSU5EIiwib25Mb2FkZWQiLCJydW4iLCJ1bmJpbmQiLCJBTkNIT1JFRCIsImFuY2hvclBvc2l0aW9uIiwiYW5jaG9yIiwiY3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlciIsInF1ZXVlIiwib25GcmFtZSIsIm9uVGltZXIiLCJNVVRBVE9SUyIsIm9uTXV0YXRpb24iLCJjbGFzc05hbWUiLCJlbGVtcyIsIm11dGF0b3IiLCJpc0lucHV0TGlrZSIsIkNTU19CUkVBRENSVU1CUyIsInN0eWxlcyIsIkNTU19DSElQIiwiQ1NTX0hFTFBURVhUIiwiQ1NTX1BBR0lOQVRJT04iLCJDTElDS1MiLCJNQVRPTU8iLCJCQU5ORVIiLCJCQU5ORVJfVVJMIiwiYW5hbHl0aWNzIiwiY29uc2VudCIsImVuYWJsZWQiLCJtYXRvbW9JZCIsIm1hdG9tb1RhZ01hbmFnZXJJZCIsInJlbmRlckJhbm5lciIsInNyYyIsInVybCIsInRpdGxlIiwiY2F0ZWdvcnkiLCJyZXN1bHRzIiwiYmFubmVyIiwib25DbG9zZSIsImhhbmRsZVRyYWNrIiwicHJvY2Vzc1RyYWNrIiwiaGVhZGluZyIsImdyb3VwIiwicG9wb3ZlciIsIm9wZW4iLCJzdHlsZSIsImhlYWQiLCJzaGVldCIsImZvcmNlIiwiQ1NTX0FQUCIsIkNTU19TVElDS1kiLCJDU1NfVE9HR0xFIiwiQ1NTX1NJREVCQVIiLCJ1c2VUcmFuc2l0aW9uIiwidG9nZ2xlQXBwRXhwYW5kZWQiLCJoYW5kbGVBcHBUb2dnbGVDbGljayIsInN0b3AiLCJsaW5rIiwiY2xvc2VTaWRlYmFyIiwic2lkZWJhciIsIk1JTl9ZIiwiU0NST0xMX1VQIiwiU1RJQ0siLCJTVElDS19FTCIsIlNUSUNLX0giLCJTVElDS19ZIiwiU1RVQ0siLCJXSU5fSCIsIldJTl9ZIiwiaGFuZGxlTXV0YXRpb24iLCJzdGlja3kiLCJoYW5kbGVBcHBTY3JvbGwiLCJORVhUX1kiLCJORVhUX1VQIiwiZ2V0U3RlcHMiLCJub3ciLCJzaG93Iiwib2Zmc2V0IiwicGFnZXMiLCJwYWdpbmF0aW9uIiwiY3VycmVudCIsInRvdGFsIiwicGFnZSIsImhhbmRsZUJyZWFkY3J1bWJzTXV0YXRpb24iLCJicmVhZGNydW1icyIsImJyZWFkY3VtYnMiLCJjcnVtYiIsIkNTU19ESUFMT0ciLCJESUFMT0dTIiwiaGFuZGxlTW9kYWwiLCJkaWFsb2ciLCJoYW5kbGVEaWFsb2dDbGljayIsImhhbmRsZUVycm9zdW1tYXJ5SW5qZWN0IiwiZmlyc3QiLCJESVNBQkxFRCIsIlNFTEVDVEVEIiwiVUhUTUxPcHRpb25FbGVtZW50IiwiVUhUTUxEYXRhTGlzdFN0eWxlIiwiTElWRV9USU1FUiIsIklOUFVUX0RFQk9VTkNFIiwiRVZFTlRTX0lOUFVUIiwiVUhUTUxEYXRhTGlzdEVsZW1lbnQiLCJkaXNjb25uZWN0SW5wdXQiLCJfcHJldiIsInNldHVwSW5wdXQiLCJzZXRFeHBhbmRlZCIsIl9jIiwiaXNQb3BvdmVyIiwiaXNJbnB1dCIsInJlbGF0ZWRUYXJnZXQiLCJhbHRLZXkiLCJjdHJsS2V5Iiwic2hpZnRLZXkiLCJtZXRhS2V5IiwiaXNFc2NhcGUiLCJfcm9vdCIsIl9pbnB1dCIsImZpbHRlciIsInZpc2libGUiLCJDU1NfRklFTEQiLCJDU1NfVkFMSURBVElPTlMiLCJDU1NfVkFMSURBVElPTiIsImdldFRleHQiLCJoYW5kbGVGaWVsZE11dGF0aW9uIiwiZmllbGRzIiwidmFsaWRhdGUiLCJmaWVsZCIsImxhYmVscyIsImRlc2NzIiwidmFsaWRzIiwiY29tYm9ib3giLCJ2YWxpZCIsImRlc2MiLCJyZW5kZXJDb21ib2JveCIsInJlbmRlckNvdW50ZXIiLCJyZW5kZXJUZXh0YXJlYVNpemUiLCJ0ZXh0YXJlYSIsImxpbWl0IiwicmVtYWluZGVyIiwibmV4dEludmFsaWQiLCJwcmV2SW52YWxpZCIsIm92ZXIiLCJ1bmRlciIsImhhbmRsZUZpZWxkVG9nZ2xlIiwiaGFuZGxlRmllbGRJbnB1dCIsImhhbmRsZUZpZWxkVmFsZGlhdGlvbiIsIkNTU19GSUVMRFNFVCIsIkFSSUFfREVTQyIsIkFSSUFfSU5WQUxJRCIsImhhbmRsZUZpZWxkc2V0TXV0YXRpb24iLCJmaWVsZHNldHMiLCJmaWVsZHNldCIsImlucHV0cyIsInZhbGlkSWQiLCJDU1NfTE9HTyIsImhhbmRsZUxvZ29NdXRhdGlvbiIsImxvZ28iLCJpY29uIiwic3ZnIiwiaXNEb3QiLCJiYWNrIiwiQ1NTX1BPUE9WRVIiLCJPUEVOX1BPUE9WRVJTIiwiaGFuZGxlUG9wb3ZlclRvZ2dsZSIsIm5ld1N0YXRlIiwiaXNDbG9zaW5nIiwiaXNDb250YWluIiwiaGFuZGxlUG9wb3ZlckxpbmtDbGljayIsImNsb3NlIiwiQ1NTX1RBQkxFIiwiaGFuZGxlVGFibGVNdXRhdGlvbiIsInRhYmxlcyIsInRhYmxlIiwidGhzIiwidGgiLCJ0Ym9keSIsInJvdyIsImNlbGwiLCJDU1NfVE9HR0xFR1JPVVAiLCJoYW5kbGVUb2dnbGVncm91cEtleWRvd24iLCJtb3ZlIiwiREVTQ1JJQkVEQlkiLCJFU0MiLCJMQUJFTExFREJZIiwiUE9TSVRJT05fQ1NTX1BST1BFUlRZIiwiVEhST1RUTEVfREVMQVkiLCJUT09MVElQIiwiQU5DSE9SIiwiTEFTVF9DQUxMIiwiVEhST1RUTEUiLCJoYW5kbGVUb29sdGlwTW92ZSIsIndhaXQiLCJoYW5kbGVUb29sdGlwTW92ZVRocm90dGxlZCIsImNvbnRlbnQiLCJwb3NpdGlvbiIsImhhZExhYmVsIiwiaGFzTGFiZWwiLCJVSFRNTERldGFpbHNTdHlsZSIsIlVIVE1MRGV0YWlsc0VsZW1lbnQiLCJoaWRlIiwidURldGFpbHNMaXN0IiwidURldGFpbHMiLCJzdW1tYXJ5IiwiaXNTdW1tYXJ5IiwiVUhUTUxTdW1tYXJ5RWxlbWVudCIsIlVIVE1MUHJvZ3Jlc3NTdHlsZSIsIlVIVE1MUHJvZ3Jlc3NFbGVtZW50Iiwicm9sZUltYWdlIiwicGVyY2VudGFnZSIsImdldE51bWJlciIsInNldE51bWJlciIsImlzTnVtZXJpYyJdLCJtYXBwaW5ncyI6ImtDQUFBLElBQUlBLEdBQVksT0FBTyxlQUNuQkMsR0FBc0IsT0FBTyxzQkFDN0JDLEdBQWUsT0FBTyxVQUFVLGVBQ2hDQyxHQUFlLE9BQU8sVUFBVSxxQkFDaENDLEdBQWtCLENBQUNDLEVBQUtDLEVBQUtDLElBQVVELEtBQU9ELEVBQU1MLEdBQVVLLEVBQUtDLEVBQUssQ0FBRSxXQUFZLEdBQU0sYUFBYyxHQUFNLFNBQVUsR0FBTSxN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dEMsSUFBSUssR0FBYXRyQixHQUFVLENBQUMsT0FBTyxNQUFNLE9BQU8sV0FBVyxHQUFHQSxDQUFLLEVBQUUsQ0FBQyxHQUFLLE9BQU8sU0FBUyxPQUFPQSxDQUFLLENBQUMsRUFDcEdvckIsR0FBWSxDQUFDdnFCLEVBQUlkLElBQVEsQ0FDM0IsTUFBTUMsRUFBUVksRUFBS0MsRUFBSWQsQ0FBRyxFQUMxQixPQUFPdXJCLEdBQVV0ckIsQ0FBSyxFQUFJLEtBQUssSUFBSSxFQUFHLE9BQU8sV0FBV0EsQ0FBSyxDQUFDLEVBQUksSUFDcEUsRUFDSXFyQixHQUFZLENBQUN4cUIsRUFBSWQsRUFBS3lDLElBQVEsQ0FDaEMsR0FBSUEsSUFBUSxNQUFROG9CLEdBQVU5b0IsQ0FBRyxFQUFHNUIsRUFBS0MsRUFBSWQsRUFBSyxHQUFHeUMsQ0FBRyxFQUFFLE1BQ3JELE9BQU0sSUFBSSxNQUFNLDhCQUE4QjVCLENBQUksT0FBTzRCLENBQUcsR0FBRyxDQUN0RSxFQUNBLE9BQUFDLEdBQWUsT0FBTyxhQUFjd29CLEVBQW9CIiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDMsNCw1LDE0LDIyLDIzXX0=
|