@mattilsynet/design 2.2.5 → 2.2.6
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/chart/chart-element.js +1 -1
- package/mtds/chart/chart-element.js.map +1 -1
- package/mtds/chart/chart-lines.d.ts +1 -1
- package/mtds/chart/chart-lines.js +30 -30
- package/mtds/chart/chart-lines.js.map +1 -1
- package/mtds/chart/chart.css.js +10 -4
- package/mtds/chart/chart.css.js.map +1 -1
- package/mtds/chart/chart.d.ts +2 -2
- package/mtds/chart/chart.js.map +1 -1
- package/mtds/chart/chart.stories.d.ts +1 -1
- package/mtds/index.d.ts +1 -0
- package/mtds/index.iife.js +20 -14
- package/mtds/map/map.d.ts +13 -3
- package/mtds/package.json.js +1 -1
- package/mtds/popover/popover-observer.js +1 -2
- package/mtds/popover/popover-observer.js.map +1 -1
- package/mtds/styles.css +1 -1
- package/mtds/styles.json +42 -41
- package/mtds/styles.module.css.js +82 -80
- package/mtds/styles.module.css.js.map +1 -1
- package/mtds/tailwind.css +5 -0
- package/package.json +1 -1
package/mtds/index.iife.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
var mtds=function(M){"use strict";var
|
|
1
|
+
var mtds=function(M){"use strict";var os=Object.defineProperty,ln=Object.getOwnPropertySymbols,is=Object.prototype.hasOwnProperty,ss=Object.prototype.propertyIsEnumerable,cn=(t,e,n)=>e in t?os(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,as=(t,e)=>{for(var n in e||(e={}))is.call(e,n)&&cn(t,n,e[n]);if(ln)for(var n of ln(e))ss.call(e,n)&&cn(t,n,e[n]);return t},xt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",dn=xt&&/android/i.test(navigator.userAgent),rs=xt&&/firefox/i.test(navigator.userAgent),ls=xt&&/iPad|iPhone|iPod/.test(navigator.userAgent),un;xt&&/^Mac/i.test(((un=navigator.userAgentData)==null?void 0:un.platform)||navigator.platform);var cs="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",ds=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 fn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Dt=(t,...e)=>fn("add",t,e),us=(t,...e)=>fn("remove",t,e),Nt=new WeakMap,he=(t,e)=>{if(e===void 0)return Nt.get(t);try{Nt.get(t).disconnect(),Nt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),Nt.set(t,n)}},fs=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},ps=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},ms=0,pn=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++ms).toString(32)}`),t.id):"",Ht=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))_(o,i,s);return o},hs={define:(t,e)=>!xt||window.customElements.get(t)||window.customElements.define(t,e)},gs=t=>{var e;const n=_(t,"aria-label")||"";return[...(((e=_(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(i=>document.getElementById(i)),...Array.from(t.labels||[])].reduce((i,s)=>{var a;return i||((a=s?.innerText)==null?void 0:a.trim())||""},n)},nt,vs=0,ge=t=>{nt||(nt=Ht("div"),nt.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",_(nt,"aria-live","assertive")),nt.isConnected||document.body.append(nt),t&&(nt.textContent=`${t}${vs++%2?" ":""}`)},mn=(t,e,n="")=>{var o,i;const s={bubbles:!0,composed:!0,data:e,inputType:n},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(o=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:o.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},ve=!1,be=t=>(t?.type==="mouseup"&&(ve=!1),t?.type==="mousedown"&&(ve=!0,Dt(document,"mouseup",be,{once:!0})),ve),bs=`:host(:not([hidden])) { display: block; -webkit-tap-highlight-color: rgba(0, 0, 0, 0) } /* Must be display block in Safari to allow focus inside */
|
|
2
2
|
:host(:not([data-multiple])) ::slotted(data),
|
|
3
3
|
:host([data-multiple="false"]) ::slotted(data) { display: none } /* Hide data if not multiple */
|
|
4
4
|
::slotted(input[inputmode="none"]) { outline: none } /* Hide temporary foucs outline flash */
|
|
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) { ${ls} }`,mn="beforeinput,blur,focus,click,input,keydown,mousedown",gn={once:!0,passive:!0},vs=rs&&!dn,ws=dn||as,bn="".repeat(5),Bt="false",Ft={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},we=class extends cs{constructor(){super(),this._item="",this._speak="",this._texts=ss({},Ft),this._value="",this.shadowRoot||this.attachShadow({mode:"open"}).append(Ht("slot"),Ht("style",bs))}static get observedAttributes(){return Object.keys(Ft).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=fs(this),Dt(this,mn,this,!0),me(this,{attributeFilter:["value","id"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(Ut,0,this),setTimeout(zt,0,this)}attributeChangedCallback(t,e,n){const o=t.split("data-sr-")[1];Ft[o]&&(this._texts[o]=n||Ft[o])}disconnectedCallback(){me(this,!1),ds(this,mn,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;ye(this)||(t.type==="beforeinput"&&(this._value=e?.value||""),t.type==="blur"&&ys(this),t.type==="click"&&Es(this,t),t.type==="focus"&&_s(this,t),t.type==="input"&&Ss(this,t),t.type==="keydown"&&Ts(this,t),t.type==="mousedown"&&ve(t),t.type==="mutation"&&Ut(this,t))}get multiple(){var t;return((t=_(this,"data-multiple"))!=null?t:Bt)!==Bt}set multiple(t){_(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=_(this,"data-creatable"))!=null?t:Bt)!==Bt}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)}},ot=t=>{var e;return((e=t?.textContent)==null?void 0:e.trim())||""},_e=t=>t instanceof HTMLDataElement,ye=({control:t})=>t?.disabled||t?.readOnly||!1,Ut=(t,e)=>{var n;const{_focus:o,_texts:i,items:s,control:r,list:a,multiple:c}=t;if(!r||!a)return;const l=ms(r),d=l.endsWith(bn)?_(r,"data-label"):l;_(r,"data-label",d);let u=`${d}${c?`, ${s.length?i.found.replace("%d",`${s.length}`):i.empty}`:""}`;const h=[];for(const{addedNodes:b,removedNodes:x}of e?.detail||[]){for(const y of b)_e(y)&&h.unshift(y);for(const y of x)_e(y)&&h.push(y)}const p=c?h.length===1:h[0]===o;if(o&&p){const b=_(r,"aria-expanded"),x=_(r,"inputmode"),y=_e(o)?r:o,S=!h[0].isConnected;t._speak=`${i[S?"removed":"added"]} ${ot(h[0])}, `,(ws||o===r)&&ge(t._speak),r!==y&&(_(r,"aria-expanded",null),_(r,"inputmode","none"),u=" ",r.focus()),setTimeout(()=>{var N;_(r,"aria-expanded",b),_(r,"inputmode",S?"none":x),(N=y?.focus)==null||N.call(y),_(r,"inputmode",x),t._speak="",vs?Dt(t,"blur",()=>Ut(t),gn):setTimeout(Ut,100,t)},100)}let g=0;const m=t.querySelector("select"),w=ye(t)?"":`${i.remove}, `;for(const b of s){const x=m?.options[g],y=ot(b),S=b.value||y,N=`${t._speak}${y}, ${w}${++g} ${i.of} ${s.length}`;_(b,"role","button"),_(b,"value",S),_(b,"tabindex","-1"),_(b,"aria-label",N),x?Object.assign(x,{textContent:y,value:S}):m?.appendChild(new Option(y,S,!0,!0))}m&&_(m,"multiple",c?"":null);for(const b of[...m?.options||[]].slice(g))b.remove();!c&&g>1&&console.warn("u-combobox: Multiple <data> found in single mode."),_(a,"aria-multiselectable",`${c}`),_(r,"list",pn(a)),_(r,"aria-label",`${t._speak}${u}${bn}`),a.hasAttribute("popover")&&(_(r,"popovertarget",pn(a)),_(a,"popover","manual"));const v=ot(s[0]);v!==t._item&&zt(t),t._item=v,vn(t),wn(t),(n=me(t))==null||n.takeRecords()},vn=t=>{var e;t.clear&&_(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value)||ye(t))},wn=t=>{var e;const{_speak:n,options:o=[],values:i}=t;for(const s of o){const r=(e=_(s,"value"))!=null?e:ot(s);_(s,"aria-label",n?`${n}${ot(s)}`:null),_(s,"selected",i.includes(r)?"":null)}},zt=t=>{const{multiple:e,control:n,items:o}=t,i=ot(o[0]);!e&&n&&i!==n.value&&hn(n,i,i?"insertText":"deleteContent")},xe=(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(p=>(_(p,"label")||ot(p)).trim().toLowerCase()===d);const h={bubbles:!0,cancelable:!0,detail:u};if(t.dispatchEvent(new CustomEvent("comboboxbeforematch",h))||(u=[...i].find(p=>p.selected)),e)return wn(t),u?ht(t,u,!1):s&&l?ht(t,{value:l},!1):(!c&&!l&&a[0]?ht(t,a[0]):zt(t),ge(o.invalid));for(const p of i)p.selected=p===u},ht=(t,e,n=!0)=>{const{control:o,items:i,multiple:s}=t,r=Ht("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 zt(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))}},_s=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),ge()},ys=t=>ve()||setTimeout(xs,0,t),xs=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t.multiple||xe(t),t._focus=void 0)},Es=(t,e)=>{const{clientX:n,clientY:o,target:i}=e,{clear:s,control:r,items:a}=t;if(s?.contains(i))return r&&hn(r,"","deleteContentBackward"),r?.focus();for(const c of a){const{top:l,right:d,bottom:u,left:h}=c.getBoundingClientRect();if(c.contains(i))return ht(t,c);if(o>=l&&o<=u&&n>=h&&n<=d)return c.focus()}i===t&&r?.focus()},Ss=(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 ht(t,c,s)}else s||xe(t,!1);vn(t)},Ts=(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(),Dt(o,"blur",()=>_(o,"tabindex",null),gn)),!(!l&&us(e)||u===-1)){if(r==="ArrowRight"&&!l)u+=1;else if(r==="ArrowLeft"&&!d)u-=1;else if(r==="Enter"&&l){const h=_(i,"form");return _(i,"form","#"),requestAnimationFrame(()=>_(i,"form",h)),xe(t)}else if((r==="Backspace"||r==="Delete")&&!d){if(e.preventDefault(),!a&&s[u])return ht(t,s[u]);l&&(u-=1)}else return l||i?.focus();e.preventDefault(),(n=s[Math.max(0,u)]||i)==null||n.focus()}};hs.define("u-combobox",we);var Ee=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Cs=Ee&&/android/i.test(navigator.userAgent),_n;Ee&&/^Mac/i.test(((_n=navigator.userAgentData)==null?void 0:_n.platform)||navigator.platform);var $s=`${Cs?"data":"aria"}-labelledby`,Se=":host(:not([hidden])) { display: block }",qt=typeof HTMLElement>"u"?class{}:HTMLElement;function A(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 yn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},ks=(t,...e)=>yn("add",t,e),As=(t,...e)=>yn("remove",t,e),Vt=(t,e)=>t.shadowRoot||t.attachShadow({mode:"open"}).append(Tn("slot"),Tn("style",e)),Wt=new WeakMap,xn=(t,e)=>{if(e===void 0)return Wt.get(t);try{Wt.get(t).disconnect(),Wt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),Wt.set(t,n)}},Ls=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},En=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},Is=0,Sn=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Is).toString(32)}`),t.id):"",Tn=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},jt={define:(t,e)=>!Ee||window.customElements.get(t)||window.customElements.define(t,e)},Ms=Se,Os=Se,Rs=Se,Ps=':host(:not([hidden])) { display: inline-block; cursor: pointer }:host([aria-disabled="true"]) { cursor: default }',Gt="aria-controls",mt="aria-selected",Cn=class extends qt{constructor(){super(),Vt(this,Ms)}get tabList(){return Yt("u-tablist",this)[0]||null}get selectedIndex(){return Kt(this.tabs)}set selectedIndex(t){$e(this.tabs[t])}get tabs(){return Yt("u-tab",this)}get panels(){return Yt("u-tabpanel",this)}},$n=class extends qt{constructor(){super(),Vt(this,Os)}connectedCallback(){A(this,"role","tablist"),ks(this,"click,keydown",this),xn(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){As(this,"click,keydown",this),xn(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s?.setAttribute(mt,"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"&&$e(n[o]),t.type==="keydown"&&!Ls(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=Kt(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 Kt(this.tabs)}set selectedIndex(t){$e(this.tabs[t])}},Te=!1,kn=class extends qt{static get observedAttributes(){return["id",mt,Gt]}constructor(){super(),Vt(this,Ps)}connectedCallback(){A(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!Te&&this.selected&&this.tabList){Te=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=Yt("u-tabpanel",this.tabsElement||this),n=Ce(this,e[t.indexOf(this)]);n&&A(n,$s,Sn(this)),t.forEach((o,i)=>{const s=Ce(o,e[i]);o.tabIndex=o===this?0:-1,A(o,mt,`${o===this}`),A(o,Gt,s?.id||null),s&&(s.hidden=s!==n)}),Te=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return t?.nodeName==="U-TABLIST"?t:null}get selected(){return A(this,mt)==="true"}set selected(t){A(this,mt,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return Ce(this)}},An=class extends qt{static get observedAttributes(){return["hidden"]}constructor(){super(),Vt(this,Rs)}connectedCallback(){A(this,"role","tabpanel"),this.hidden=Kt(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){const t=this.hidden;A(this,"aria-hidden",`${t}`),A(this,"tabindex",t||Ds(this.firstChild)?null:"0")}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${Gt}="${this.id}"]`;return En(this).querySelectorAll(t)}},Yt=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),Ce=(t,e)=>{const n=A(t,Gt)||Sn(e),o=En(t).getElementById(n);return o?.nodeName==="U-TABPANEL"?o:null},Kt=t=>[...t].findIndex(e=>A(e,mt)==="true"),$e=t=>t&&A(t,"aria-disabled")!=="true"&&A(t,"aria-selected","true"),Ds=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');jt.define("u-tabs",Cn),jt.define("u-tablist",$n),jt.define("u-tab",kn),jt.define("u-tabpanel",An);const Ns="2.2.5",Ln="_alert_1nshl_1 _ds-alert_nwz76_3",In="_app_1nshl_1",Mn="_sticky_1nshl_1",On="_avatar_1nshl_1 _ds-avatar_nwz76_1",Rn="_badge_1nshl_1",Pn="_breadcrumbs_1nshl_1 _ds-breadcrumbs_nwz76_5",Dn="_button_1nshl_1 _ds-button_nwz76_1",Nn="_card_1nshl_1",Hn="_group_1nshl_1",Bn="_chip_1nshl_1 _ds-chip_nwz76_5",Fn="_details_1nshl_1 _ds-details_nwz76_3",Un="_dialog_1nshl_1 _ds-dialog_nwz76_5",zn="__drawer_1nshl_1",qn="_divider_1nshl_1",Vn="_errorsummary_1nshl_1 _ds-error-summary_nwz76_5",Wn="__errorsummary_1nshl_1",jn="_field_1nshl_1 _ds-field_nwz76_1",Gn="__datalist_1nshl_1",Yn="_affixes_1nshl_1 _ds-field-affixes_nwz76_3",Kn="_fieldset_1nshl_1 _ds-fieldset_nwz76_3",Xn="_helptext_1nshl_1 _ds-focus_nwz76_1",Qn="_input_1nshl_1 _ds-input_nwz76_1",Jn="_grid_1nshl_1",Zn="_flex_1nshl_1",to="_link_1nshl_1",eo="_logo_1nshl_1",no="_pagination_1nshl_1 _ds-pagination_nwz76_5",oo="_popover_1nshl_1",io="_progress_1nshl_1",so="__indeterminate_1nshl_1",ro="_skeleton_1nshl_1 _ds-skeleton_nwz76_5",ao="__skeleton_1nshl_1",lo="_spinner_1nshl_1",co="_steps_1nshl_1",uo="_table_1nshl_1 _ds-table_nwz76_5",fo="__scrollShadow_1nshl_1",po="_tabs_1nshl_1 _ds-tabs_nwz76_5",ho="__scrollMask_1nshl_1",mo="_tag_1nshl_1 _ds-tag_nwz76_5",go="_toast_1nshl_1",bo="__toastClose_1nshl_1",vo="__toastOpen_1nshl_1",wo="__toastTimeout_1nshl_1",_o="_togglegroup_1nshl_1",yo="__tooltip_1nshl_1",xo="_heading_1nshl_1 _ds-heading_nwz76_1",Eo="_ingress_1nshl_1",So="_muted_1nshl_1",To="_info_1nshl_1",Co="_prose_1nshl_1",$o="_validation_1nshl_1 _ds-validation-message_nwz76_1",ko="_body_1nshl_172",Ao="__checked_1nshl_1",T={alert:Ln,app:In,sticky:Mn,avatar:On,badge:Rn,breadcrumbs:Pn,button:Dn,card:Nn,group:Hn,chip:Bn,details:Fn,dialog:Un,_drawer:zn,divider:qn,errorsummary:Vn,_errorsummary:Wn,field:jn,_datalist:Gn,affixes:Yn,fieldset:Kn,helptext:Xn,input:Qn,grid:Jn,flex:Zn,link:to,logo:eo,pagination:no,popover:oo,progress:io,_indeterminate:so,skeleton:ro,_skeleton:ao,spinner:lo,steps:co,table:uo,_scrollShadow:fo,tabs:po,_scrollMask:ho,tag:mo,toast:go,_toastClose:bo,_toastOpen:vo,_toastTimeout:wo,togglegroup:_o,_tooltip:yo,heading:xo,ingress:Eo,muted:So,info:To,prose:Co,validation:$o,body:ko,_checked:Ao},Hs=Object.freeze(Object.defineProperty({__proto__:null,_checked:Ao,_datalist:Gn,_drawer:zn,_errorsummary:Wn,_indeterminate:so,_scrollMask:ho,_scrollShadow:fo,_skeleton:ao,_toastClose:bo,_toastOpen:vo,_toastTimeout:wo,_tooltip:yo,affixes:Yn,alert:Ln,app:In,avatar:On,badge:Rn,body:ko,breadcrumbs:Pn,button:Dn,card:Nn,chip:Bn,default:T,details:Fn,dialog:Un,divider:qn,errorsummary:Vn,field:jn,fieldset:Kn,flex:Zn,grid:Jn,group:Hn,heading:xo,helptext:Xn,info:To,ingress:Eo,input:Qn,link:to,logo:eo,muted:So,pagination:no,popover:oo,progress:io,prose:Co,skeleton:ro,spinner:lo,steps:co,sticky:Mn,table:uo,tabs:po,tag:mo,toast:go,togglegroup:_o,validation:$o},Symbol.toStringTag,{value:"Module"})),gt=Math.min,O=Math.max,Xt=Math.round,Qt=Math.floor,V=t=>({x:t,y:t}),Bs={left:"right",right:"left",bottom:"top",top:"bottom"},Fs={start:"end",end:"start"};function Lo(t,e,n){return O(t,gt(e,n))}function Jt(t,e){return typeof t=="function"?t(e):t}function it(t){return t.split("-")[0]}function Zt(t){return t.split("-")[1]}function Io(t){return t==="x"?"y":"x"}function Mo(t){return t==="y"?"height":"width"}const Us=new Set(["top","bottom"]);function Q(t){return Us.has(it(t))?"y":"x"}function Oo(t){return Io(Q(t))}function zs(t,e,n){n===void 0&&(n=!1);const o=Zt(t),i=Oo(t),s=Mo(i);let r=i==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return e.reference[s]>e.floating[s]&&(r=te(r)),[r,te(r)]}function qs(t){const e=te(t);return[ke(t),e,ke(e)]}function ke(t){return t.replace(/start|end/g,e=>Fs[e])}const Ro=["left","right"],Po=["right","left"],Vs=["top","bottom"],Ws=["bottom","top"];function js(t,e,n){switch(t){case"top":case"bottom":return n?e?Po:Ro:e?Ro:Po;case"left":case"right":return e?Vs:Ws;default:return[]}}function Gs(t,e,n,o){const i=Zt(t);let s=js(it(t),n==="start",o);return i&&(s=s.map(r=>r+"-"+i),e&&(s=s.concat(s.map(ke)))),s}function te(t){return t.replace(/left|right|bottom|top/g,e=>Bs[e])}function Ys(t){return{top:0,right:0,bottom:0,left:0,...t}}function Ks(t){return typeof t!="number"?Ys(t):{top:t,right:t,bottom:t,left:t}}function ee(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 Do(t,e,n){let{reference:o,floating:i}=t;const s=Q(e),r=Oo(e),a=Mo(r),c=it(e),l=s==="y",d=o.x+o.width/2-i.width/2,u=o.y+o.height/2-i.height/2,h=o[a]/2-i[a]/2;let p;switch(c){case"top":p={x:d,y:o.y-i.height};break;case"bottom":p={x:d,y:o.y+o.height};break;case"right":p={x:o.x+o.width,y:u};break;case"left":p={x:o.x-i.width,y:u};break;default:p={x:o.x,y:o.y}}switch(Zt(e)){case"start":p[r]-=h*(n&&l?-1:1);break;case"end":p[r]+=h*(n&&l?-1:1);break}return p}const Xs=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}=Do(l,o,c),h=o,p={},g=0;for(let m=0;m<a.length;m++){const{name:w,fn:v}=a[m],{x:b,y:x,data:y,reset:S}=await v({x:d,y:u,initialPlacement:o,placement:h,strategy:i,middlewareData:p,rects:l,platform:r,elements:{reference:t,floating:e}});d=b??d,u=x??u,p={...p,[w]:{...p[w],...y}},S&&g<=50&&(g++,typeof S=="object"&&(S.placement&&(h=S.placement),S.rects&&(l=S.rects===!0?await r.getElementRects({reference:t,floating:e,strategy:i}):S.rects),{x:d,y:u}=Do(l,h,c)),m=-1)}return{x:d,y:u,placement:h,strategy:i,middlewareData:p}};async function Ae(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:h=!1,padding:p=0}=Jt(e,t),g=Ks(p),w=a[h?u==="floating"?"reference":"floating":u],v=ee(await s.getClippingRect({element:(n=await(s.isElement==null?void 0:s.isElement(w)))==null||n?w:w.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(a.floating)),boundary:l,rootBoundary:d,strategy:c})),b=u==="floating"?{x:o,y:i,width:r.floating.width,height:r.floating.height}:r.reference,x=await(s.getOffsetParent==null?void 0:s.getOffsetParent(a.floating)),y=await(s.isElement==null?void 0:s.isElement(x))?await(s.getScale==null?void 0:s.getScale(x))||{x:1,y:1}:{x:1,y:1},S=ee(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:a,rect:b,offsetParent:x,strategy:c}):b);return{top:(v.top-S.top+g.top)/y.y,bottom:(S.bottom-v.bottom+g.bottom)/y.y,left:(v.left-S.left+g.left)/y.x,right:(S.right-v.right+g.right)/y.x}}const Qs=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:h,fallbackStrategy:p="bestFit",fallbackAxisSideDirection:g="none",flipAlignment:m=!0,...w}=Jt(t,e);if((n=s.arrow)!=null&&n.alignmentOffset)return{};const v=it(i),b=Q(a),x=it(a)===a,y=await(c.isRTL==null?void 0:c.isRTL(l.floating)),S=h||(x||!m?[te(a)]:qs(a)),N=g!=="none";!h&&N&&S.push(...Gs(a,m,g,y));const G=[a,...S],dt=await Ae(e,w),ut=[];let X=((o=s.flip)==null?void 0:o.overflows)||[];if(d&&ut.push(dt[v]),u){const ft=zs(i,r,y);ut.push(dt[ft[0]],dt[ft[1]])}if(X=[...X,{placement:i,overflows:ut}],!ut.every(ft=>ft<=0)){var Mt,Ot;const ft=(((Mt=s.flip)==null?void 0:Mt.index)||0)+1,an=G[ft];if(an&&(!(u==="alignment"?b!==Q(an):!1)||X.every(q=>Q(q.placement)===b?q.overflows[0]>0:!0)))return{data:{index:ft,overflows:X},reset:{placement:an}};let Pt=(Ot=X.filter(pt=>pt.overflows[0]<=0).sort((pt,q)=>pt.overflows[1]-q.overflows[1])[0])==null?void 0:Ot.placement;if(!Pt)switch(p){case"bestFit":{var Rt;const pt=(Rt=X.filter(q=>{if(N){const et=Q(q.placement);return et===b||et==="y"}return!0}).map(q=>[q.placement,q.overflows.filter(et=>et>0).reduce((et,_l)=>et+_l,0)]).sort((q,et)=>q[1]-et[1])[0])==null?void 0:Rt[0];pt&&(Pt=pt);break}case"initialPlacement":Pt=a;break}if(i!==Pt)return{reset:{placement:Pt}}}return{}}}},Js=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:w=>{let{x:v,y:b}=w;return{x:v,y:b}}},...c}=Jt(t,e),l={x:n,y:o},d=await Ae(e,c),u=Q(it(i)),h=Io(u);let p=l[h],g=l[u];if(s){const w=h==="y"?"top":"left",v=h==="y"?"bottom":"right",b=p+d[w],x=p-d[v];p=Lo(b,p,x)}if(r){const w=u==="y"?"top":"left",v=u==="y"?"bottom":"right",b=g+d[w],x=g-d[v];g=Lo(b,g,x)}const m=a.fn({...e,[h]:p,[u]:g});return{...m,data:{x:m.x-n,y:m.y-o,enabled:{[h]:s,[u]:r}}}}}},Zs=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}=Jt(t,e),d=await Ae(e,l),u=it(i),h=Zt(i),p=Q(i)==="y",{width:g,height:m}=s.floating;let w,v;u==="top"||u==="bottom"?(w=u,v=h===(await(r.isRTL==null?void 0:r.isRTL(a.floating))?"start":"end")?"left":"right"):(v=u,w=h==="end"?"top":"bottom");const b=m-d.top-d.bottom,x=g-d.left-d.right,y=gt(m-d[w],b),S=gt(g-d[v],x),N=!e.middlewareData.shift;let G=y,dt=S;if((n=e.middlewareData.shift)!=null&&n.enabled.x&&(dt=x),(o=e.middlewareData.shift)!=null&&o.enabled.y&&(G=b),N&&!h){const X=O(d.left,0),Mt=O(d.right,0),Ot=O(d.top,0),Rt=O(d.bottom,0);p?dt=g-2*(X!==0||Mt!==0?X+Mt:O(d.left,d.right)):G=m-2*(Ot!==0||Rt!==0?Ot+Rt:O(d.top,d.bottom))}await c({...e,availableWidth:dt,availableHeight:G});const ut=await r.getDimensions(a.floating);return g!==ut.width||m!==ut.height?{reset:{rects:!0}}:{}}}};function ne(){return typeof window<"u"}function bt(t){return No(t)?(t.nodeName||"").toLowerCase():"#document"}function R(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function W(t){var e;return(e=(No(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function No(t){return ne()?t instanceof Node||t instanceof R(t).Node:!1}function H(t){return ne()?t instanceof Element||t instanceof R(t).Element:!1}function j(t){return ne()?t instanceof HTMLElement||t instanceof R(t).HTMLElement:!1}function Ho(t){return!ne()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof R(t).ShadowRoot}const tr=new Set(["inline","contents"]);function Et(t){const{overflow:e,overflowX:n,overflowY:o,display:i}=B(t);return/auto|scroll|overlay|hidden|clip/.test(e+o+n)&&!tr.has(i)}const er=new Set(["table","td","th"]);function nr(t){return er.has(bt(t))}const or=[":popover-open",":modal"];function oe(t){return or.some(e=>{try{return t.matches(e)}catch{return!1}})}const ir=["transform","translate","scale","rotate","perspective"],sr=["transform","translate","scale","rotate","perspective","filter"],rr=["paint","layout","strict","content"];function Le(t){const e=Ie(),n=H(t)?B(t):t;return ir.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)||sr.some(o=>(n.willChange||"").includes(o))||rr.some(o=>(n.contain||"").includes(o))}function ar(t){let e=J(t);for(;j(e)&&!vt(e);){if(Le(e))return e;if(oe(e))return null;e=J(e)}return null}function Ie(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const lr=new Set(["html","body","#document"]);function vt(t){return lr.has(bt(t))}function B(t){return R(t).getComputedStyle(t)}function ie(t){return H(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function J(t){if(bt(t)==="html")return t;const e=t.assignedSlot||t.parentNode||Ho(t)&&t.host||W(t);return Ho(e)?e.host:e}function Bo(t){const e=J(t);return vt(e)?t.ownerDocument?t.ownerDocument.body:t.body:j(e)&&Et(e)?e:Bo(e)}function St(t,e,n){var o;e===void 0&&(e=[]),n===void 0&&(n=!0);const i=Bo(t),s=i===((o=t.ownerDocument)==null?void 0:o.body),r=R(i);if(s){const a=Me(r);return e.concat(r,r.visualViewport||[],Et(i)?i:[],a&&n?St(a):[])}return e.concat(i,St(i,[],n))}function Me(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function Fo(t){const e=B(t);let n=parseFloat(e.width)||0,o=parseFloat(e.height)||0;const i=j(t),s=i?t.offsetWidth:n,r=i?t.offsetHeight:o,a=Xt(n)!==s||Xt(o)!==r;return a&&(n=s,o=r),{width:n,height:o,$:a}}function Oe(t){return H(t)?t:t.contextElement}function wt(t){const e=Oe(t);if(!j(e))return V(1);const n=e.getBoundingClientRect(),{width:o,height:i,$:s}=Fo(e);let r=(s?Xt(n.width):n.width)/o,a=(s?Xt(n.height):n.height)/i;return(!r||!Number.isFinite(r))&&(r=1),(!a||!Number.isFinite(a))&&(a=1),{x:r,y:a}}const cr=V(0);function Uo(t){const e=R(t);return!Ie()||!e.visualViewport?cr:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function dr(t,e,n){return e===void 0&&(e=!1),!n||e&&n!==R(t)?!1:e}function st(t,e,n,o){e===void 0&&(e=!1),n===void 0&&(n=!1);const i=t.getBoundingClientRect(),s=Oe(t);let r=V(1);e&&(o?H(o)&&(r=wt(o)):r=wt(t));const a=dr(s,n,o)?Uo(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 h=R(s),p=o&&H(o)?R(o):o;let g=h,m=Me(g);for(;m&&o&&p!==g;){const w=wt(m),v=m.getBoundingClientRect(),b=B(m),x=v.left+(m.clientLeft+parseFloat(b.paddingLeft))*w.x,y=v.top+(m.clientTop+parseFloat(b.paddingTop))*w.y;c*=w.x,l*=w.y,d*=w.x,u*=w.y,c+=x,l+=y,g=R(m),m=Me(g)}}return ee({width:d,height:u,x:c,y:l})}function se(t,e){const n=ie(t).scrollLeft;return e?e.left+n:st(W(t)).left+n}function zo(t,e){const n=t.getBoundingClientRect(),o=n.left+e.scrollLeft-se(t,n),i=n.top+e.scrollTop;return{x:o,y:i}}function ur(t){let{elements:e,rect:n,offsetParent:o,strategy:i}=t;const s=i==="fixed",r=W(o),a=e?oe(e.floating):!1;if(o===r||a&&s)return n;let c={scrollLeft:0,scrollTop:0},l=V(1);const d=V(0),u=j(o);if((u||!u&&!s)&&((bt(o)!=="body"||Et(r))&&(c=ie(o)),j(o))){const p=st(o);l=wt(o),d.x=p.x+o.clientLeft,d.y=p.y+o.clientTop}const h=r&&!u&&!s?zo(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+h.x,y:n.y*l.y-c.scrollTop*l.y+d.y+h.y}}function fr(t){return Array.from(t.getClientRects())}function pr(t){const e=W(t),n=ie(t),o=t.ownerDocument.body,i=O(e.scrollWidth,e.clientWidth,o.scrollWidth,o.clientWidth),s=O(e.scrollHeight,e.clientHeight,o.scrollHeight,o.clientHeight);let r=-n.scrollLeft+se(t);const a=-n.scrollTop;return B(o).direction==="rtl"&&(r+=O(e.clientWidth,o.clientWidth)-i),{width:i,height:s,x:r,y:a}}const qo=25;function hr(t,e){const n=R(t),o=W(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=Ie();(!d||d&&e==="fixed")&&(a=i.offsetLeft,c=i.offsetTop)}const l=se(o);if(l<=0){const d=o.ownerDocument,u=d.body,h=getComputedStyle(u),p=d.compatMode==="CSS1Compat"&&parseFloat(h.marginLeft)+parseFloat(h.marginRight)||0,g=Math.abs(o.clientWidth-u.clientWidth-p);g<=qo&&(s-=g)}else l<=qo&&(s+=l);return{width:s,height:r,x:a,y:c}}const mr=new Set(["absolute","fixed"]);function gr(t,e){const n=st(t,!0,e==="fixed"),o=n.top+t.clientTop,i=n.left+t.clientLeft,s=j(t)?wt(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 Vo(t,e,n){let o;if(e==="viewport")o=hr(t,n);else if(e==="document")o=pr(W(t));else if(H(e))o=gr(e,n);else{const i=Uo(t);o={x:e.x-i.x,y:e.y-i.y,width:e.width,height:e.height}}return ee(o)}function Wo(t,e){const n=J(t);return n===e||!H(n)||vt(n)?!1:B(n).position==="fixed"||Wo(n,e)}function br(t,e){const n=e.get(t);if(n)return n;let o=St(t,[],!1).filter(a=>H(a)&&bt(a)!=="body"),i=null;const s=B(t).position==="fixed";let r=s?J(t):t;for(;H(r)&&!vt(r);){const a=B(r),c=Le(r);!c&&a.position==="fixed"&&(i=null),(s?!c&&!i:!c&&a.position==="static"&&!!i&&mr.has(i.position)||Et(r)&&!c&&Wo(t,r))?o=o.filter(d=>d!==r):i=a,r=J(r)}return e.set(t,o),o}function vr(t){let{element:e,boundary:n,rootBoundary:o,strategy:i}=t;const r=[...n==="clippingAncestors"?oe(e)?[]:br(e,this._c):[].concat(n),o],a=r[0],c=r.reduce((l,d)=>{const u=Vo(e,d,i);return l.top=O(u.top,l.top),l.right=gt(u.right,l.right),l.bottom=gt(u.bottom,l.bottom),l.left=O(u.left,l.left),l},Vo(e,a,i));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function wr(t){const{width:e,height:n}=Fo(t);return{width:e,height:n}}function _r(t,e,n){const o=j(e),i=W(e),s=n==="fixed",r=st(t,!0,s,e);let a={scrollLeft:0,scrollTop:0};const c=V(0);function l(){c.x=se(i)}if(o||!o&&!s)if((bt(e)!=="body"||Et(i))&&(a=ie(e)),o){const p=st(e,!0,s,e);c.x=p.x+e.clientLeft,c.y=p.y+e.clientTop}else i&&l();s&&!o&&i&&l();const d=i&&!o&&!s?zo(i,a):V(0),u=r.left+a.scrollLeft-c.x-d.x,h=r.top+a.scrollTop-c.y-d.y;return{x:u,y:h,width:r.width,height:r.height}}function Re(t){return B(t).position==="static"}function jo(t,e){if(!j(t)||B(t).position==="fixed")return null;if(e)return e(t);let n=t.offsetParent;return W(t)===n&&(n=n.ownerDocument.body),n}function Go(t,e){const n=R(t);if(oe(t))return n;if(!j(t)){let i=J(t);for(;i&&!vt(i);){if(H(i)&&!Re(i))return i;i=J(i)}return n}let o=jo(t,e);for(;o&&nr(o)&&Re(o);)o=jo(o,e);return o&&vt(o)&&Re(o)&&!Le(o)?n:o||ar(t)||n}const yr=async function(t){const e=this.getOffsetParent||Go,n=this.getDimensions,o=await n(t.floating);return{reference:_r(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function xr(t){return B(t).direction==="rtl"}const Er={convertOffsetParentRelativeRectToViewportRelativeRect:ur,getDocumentElement:W,getClippingRect:vr,getOffsetParent:Go,getElementRects:yr,getClientRects:fr,getDimensions:wr,getScale:wt,isElement:H,isRTL:xr};function Yo(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function Sr(t,e){let n=null,o;const i=W(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:h,height:p}=l;if(a||e(),!h||!p)return;const g=Qt(u),m=Qt(i.clientWidth-(d+h)),w=Qt(i.clientHeight-(u+p)),v=Qt(d),x={rootMargin:-g+"px "+-m+"px "+-w+"px "+-v+"px",threshold:O(0,gt(1,c))||1};let y=!0;function S(N){const G=N[0].intersectionRatio;if(G!==c){if(!y)return r();G?r(!1,G):o=setTimeout(()=>{r(!1,1e-7)},1e3)}G===1&&!Yo(l,t.getBoundingClientRect())&&r(),y=!1}try{n=new IntersectionObserver(S,{...x,root:i.ownerDocument})}catch{n=new IntersectionObserver(S,x)}n.observe(t)}return r(!0),s}function Tr(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=Oe(t),d=i||s?[...l?St(l):[],...St(e)]:[];d.forEach(v=>{i&&v.addEventListener("scroll",n,{passive:!0}),s&&v.addEventListener("resize",n)});const u=l&&a?Sr(l,n):null;let h=-1,p=null;r&&(p=new ResizeObserver(v=>{let[b]=v;b&&b.target===l&&p&&(p.unobserve(e),cancelAnimationFrame(h),h=requestAnimationFrame(()=>{var x;(x=p)==null||x.observe(e)})),n()}),l&&!c&&p.observe(l),p.observe(e));let g,m=c?st(t):null;c&&w();function w(){const v=st(t);m&&!Yo(m,v)&&n(),m=v,g=requestAnimationFrame(w)}return n(),()=>{var v;d.forEach(b=>{i&&b.removeEventListener("scroll",n),s&&b.removeEventListener("resize",n)}),u?.(),(v=p)==null||v.disconnect(),p=null,c&&cancelAnimationFrame(g)}}const Pe=Js,De=Qs,Ko=Zs,Cr=(t,e,n)=>{const o=new Map,i={platform:Er,...n},s={...i.platform,_c:o};return Xs(t,e,{...i,platform:s})};function Xo(t){var e,n,o="";if(typeof t=="string"||typeof t=="number")o+=t;else if(typeof t=="object")if(Array.isArray(t)){var i=t.length;for(e=0;e<i;e++)t[e]&&(n=Xo(t[e]))&&(o&&(o+=" "),o+=n)}else for(n in t)t[n]&&(o&&(o+=" "),o+=n);return o}function $r(){for(var t,e,n=0,o="",i=arguments.length;n<i;n++)(t=arguments[n])&&(e=Xo(t))&&(o&&(o+=" "),o+=e);return o}const P={capture:!0,passive:!0},rt=typeof window<"u"&&typeof document<"u";function kr(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function f(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 Ar=0;const Lr=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function re(t){return t.id||(t.id=`${Lr}${++Ar}`),t.id}const Qo=(t,e,[...n])=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},C=(t,...e)=>{Tt&&(t===window||t===document)&&Tt.push(()=>Jo(t,...e)),Qo("add",t,e)},Jo=(t,...e)=>Qo("remove",t,e);let Tt=null;const D=t=>{if(!rt||!window.requestAnimationFrame)return;window._mtdsUnbindEvents||(window._mtdsUnbindEvents=new Map);const e=()=>requestAnimationFrame(()=>{const n=String(t).replace(/(\n|\s)/g,"");window._mtdsUnbindEvents?.get(n)?.map(o=>o()),Tt=[],t(),window._mtdsUnbindEvents?.set(n,Tt?.slice(0)),Tt=null});document.readyState==="complete"?e():C(window,"load",e)},Ne=new WeakMap;function at(t,e,n){Ne.get(t)?.(),Ne.delete(t),e&&Ne.set(t,Tr(e,t,()=>{if(!t.isConnected||!e.isConnected||t.hidden)return at(t,!1);Cr(e,t,n).then(({x:o,y:i})=>{t.style.left=`${o}px`,t.style.top=`${i}px`})}))}function Zo(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 He=new WeakMap,_t=(t,e,n)=>{if(!rt||!window.requestAnimationFrame)return;const o=t.getElementsByClassName(e),i=He.get(t)||[];i.length||(He.set(t,i),Zo((s,r)=>{if(t.isConnected&&i?.length)for(const a of i)a();else r?.disconnect(),He.delete(t)}).observe(t,{attributeFilter:["class","hidden"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>n(o))},Be=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),$=(t,e,n)=>{const o=document.createElement(t);if(n&&(o.textContent=n),e)for(const[i,s]of Object.entries(e))f(o,i,s);return o},Ir=typeof HTMLElement>"u"?class{}:HTMLElement,Mr=`.${T.breadcrumbs.split(" ")[0]}`,Or=`.${T.card.split(" ")[0]}`,ti=`.${T.chip.split(" ")[0]}`,Rr=`.${T.helptext.split(" ")[0]}`,Pr=`.${T.pagination.split(" ")[0]}`,Dr='summary,u-summary,a,button,[role="tab"],[role="button"]',Nr="click,toggle,submit,change",Fe="mattilsynet.matomo.cloud",F="mtds-analytics-banner",Hr="https://www.mattilsynet.no/om-mattilsynet/personvernerklaering/informasjonskapsler";function ei(t,e={}){if(rt){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${Fe}/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"&&Br();const r=s?`https://cdn.matomo.cloud/${Fe}/container_${s}.js`:`https://cdn.matomo.cloud/${Fe}/matomo.js`;document.querySelector(`script[src="${r}"]`)||document.head.append($("script",{async:"",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 Br(){if(document.getElementById(F)||window.localStorage.getItem(F))return;document.body.insertAdjacentHTML("afterbegin",`<dialog id="${F}" data-analytics="ignore"><style>
|
|
8
|
+
::slotted(data:focus) { ${cs} }`,hn="beforeinput,blur,focus,click,input,keydown,mousedown",gn={once:!0,passive:!0},ws=rs&&!dn,_s=dn||ls,vn="".repeat(5),Bt="false",Ft={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},we=class extends ds{constructor(){super(),this._item="",this._speak="",this._texts=as({},Ft),this._value="",this.shadowRoot||this.attachShadow({mode:"open"}).append(Ht("slot"),Ht("style",bs))}static get observedAttributes(){return Object.keys(Ft).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=ps(this),Dt(this,hn,this,!0),he(this,{attributeFilter:["value","id"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(Ut,0,this),setTimeout(zt,0,this)}attributeChangedCallback(t,e,n){const o=t.split("data-sr-")[1];Ft[o]&&(this._texts[o]=n||Ft[o])}disconnectedCallback(){he(this,!1),us(this,hn,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;ye(this)||(t.type==="beforeinput"&&(this._value=e?.value||""),t.type==="blur"&&xs(this),t.type==="click"&&Ss(this,t),t.type==="focus"&&ys(this,t),t.type==="input"&&Ts(this,t),t.type==="keydown"&&Cs(this,t),t.type==="mousedown"&&be(t),t.type==="mutation"&&Ut(this,t))}get multiple(){var t;return((t=_(this,"data-multiple"))!=null?t:Bt)!==Bt}set multiple(t){_(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=_(this,"data-creatable"))!=null?t:Bt)!==Bt}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)}},ot=t=>{var e;return((e=t?.textContent)==null?void 0:e.trim())||""},_e=t=>t instanceof HTMLDataElement,ye=({control:t})=>t?.disabled||t?.readOnly||!1,Ut=(t,e)=>{var n;const{_focus:o,_texts:i,items:s,control:a,list:r,multiple:c}=t;if(!a||!r)return;const l=gs(a),d=l.endsWith(vn)?_(a,"data-label"):l;_(a,"data-label",d);let u=`${d}${c?`, ${s.length?i.found.replace("%d",`${s.length}`):i.empty}`:""}`;const m=[];for(const{addedNodes:g,removedNodes:x}of e?.detail||[]){for(const y of g)_e(y)&&m.unshift(y);for(const y of x)_e(y)&&m.push(y)}const p=c?m.length===1:m[0]===o;if(o&&p){const g=_(a,"aria-expanded"),x=_(a,"inputmode"),y=_e(o)?a:o,S=!m[0].isConnected;t._speak=`${i[S?"removed":"added"]} ${ot(m[0])}, `,(_s||o===a)&&ge(t._speak),a!==y&&(_(a,"aria-expanded",null),_(a,"inputmode","none"),u=" ",a.focus()),setTimeout(()=>{var N;_(a,"aria-expanded",g),_(a,"inputmode",S?"none":x),(N=y?.focus)==null||N.call(y),_(a,"inputmode",x),t._speak="",ws?Dt(t,"blur",()=>Ut(t),gn):setTimeout(Ut,100,t)},100)}let v=0;const h=t.querySelector("select"),w=ye(t)?"":`${i.remove}, `;for(const g of s){const x=h?.options[v],y=ot(g),S=g.value||y,N=`${t._speak}${y}, ${w}${++v} ${i.of} ${s.length}`;_(g,"role","button"),_(g,"value",S),_(g,"tabindex","-1"),_(g,"aria-label",N),x?Object.assign(x,{textContent:y,value:S}):h?.appendChild(new Option(y,S,!0,!0))}h&&_(h,"multiple",c?"":null);for(const g of[...h?.options||[]].slice(v))g.remove();!c&&v>1&&console.warn("u-combobox: Multiple <data> found in single mode."),_(r,"aria-multiselectable",`${c}`),_(a,"list",pn(r)),_(a,"aria-label",`${t._speak}${u}${vn}`),r.hasAttribute("popover")&&(_(a,"popovertarget",pn(r)),_(r,"popover","manual"));const b=ot(s[0]);b!==t._item&&zt(t),t._item=b,bn(t),wn(t),(n=he(t))==null||n.takeRecords()},bn=t=>{var e;t.clear&&_(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value)||ye(t))},wn=t=>{var e;const{_speak:n,options:o=[],values:i}=t;for(const s of o){const a=(e=_(s,"value"))!=null?e:ot(s);_(s,"aria-label",n?`${n}${ot(s)}`:null),_(s,"selected",i.includes(a)?"":null)}},zt=t=>{const{multiple:e,control:n,items:o}=t,i=ot(o[0]);!e&&n&&i!==n.value&&mn(n,i,i?"insertText":"deleteContent")},xe=(t,e=!0)=>{var n;const{_texts:o,options:i=[],creatable:s,control:a,items:r,multiple:c}=t,l=((n=a?.value)==null?void 0:n.trim())||"",d=l.toLowerCase()||null;let u=[...i].find(p=>(_(p,"label")||ot(p)).trim().toLowerCase()===d);const m={bubbles:!0,cancelable:!0,detail:u};if(t.dispatchEvent(new CustomEvent("comboboxbeforematch",m))||(u=[...i].find(p=>p.selected)),e)return wn(t),u?mt(t,u,!1):s&&l?mt(t,{value:l},!1):(!c&&!l&&r[0]?mt(t,r[0]):zt(t),ge(o.invalid));for(const p of i)p.selected=p===u},mt=(t,e,n=!0)=>{const{control:o,items:i,multiple:s}=t,a=Ht("data",e.label||e.value,{value:e.value}),r=[...i].find(d=>d.value===e.value),c={bubbles:!0,cancelable:!0,detail:r||a};if(r&&!n)return zt(t);if(t.dispatchEvent(new CustomEvent("comboboxbeforeselect",c))){if(!s)for(const d of[...i])d.remove();r?r.remove():o?.insertAdjacentElement("beforebegin",a),t.dispatchEvent(new CustomEvent("comboboxafterselect",c))}},ys=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),ge()},xs=t=>be()||setTimeout(Es,0,t),Es=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t.multiple||xe(t),t._focus=void 0)},Ss=(t,e)=>{const{clientX:n,clientY:o,target:i}=e,{clear:s,control:a,items:r}=t;if(s?.contains(i))return a&&mn(a,"","deleteContentBackward"),a?.focus();for(const c of r){const{top:l,right:d,bottom:u,left:m}=c.getBoundingClientRect();if(c.contains(i))return mt(t,c);if(o>=l&&o<=u&&n>=m&&n<=d)return c.focus()}i===t&&a?.focus()},Ts=(t,e)=>{var n;const{options:o=[],control:i,multiple:s}=t,a=((n=i?.value)==null?void 0:n.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType==="insertReplacementText":!!a){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const c of o)if(c.value&&c.value===a)return mt(t,c,s)}else s||xe(t,!1);bn(t)},Cs=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const{clear:o,control:i,items:s}=t,{key:a,repeat:r,target:c}=e,l=i&&i===c,d=l&&i?.selectionEnd;let u=l?s.length:[...s].indexOf(c);if(l&&a==="Tab"&&o&&!o.hidden&&(e.preventDefault(),o.tabIndex=-1,o.focus(),Dt(o,"blur",()=>_(o,"tabindex",null),gn)),!(!l&&fs(e)||u===-1)){if(a==="ArrowRight"&&!l)u+=1;else if(a==="ArrowLeft"&&!d)u-=1;else if(a==="Enter"&&l){const m=_(i,"form");return _(i,"form","#"),requestAnimationFrame(()=>_(i,"form",m)),xe(t)}else if((a==="Backspace"||a==="Delete")&&!d){if(e.preventDefault(),!r&&s[u])return mt(t,s[u]);l&&(u-=1)}else return l||i?.focus();e.preventDefault(),(n=s[Math.max(0,u)]||i)==null||n.focus()}};hs.define("u-combobox",we);var Ee=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",$s=Ee&&/android/i.test(navigator.userAgent),_n;Ee&&/^Mac/i.test(((_n=navigator.userAgentData)==null?void 0:_n.platform)||navigator.platform);var ks=`${$s?"data":"aria"}-labelledby`,Se=":host(:not([hidden])) { display: block }",qt=typeof HTMLElement>"u"?class{}:HTMLElement;function A(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 yn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},As=(t,...e)=>yn("add",t,e),Ls=(t,...e)=>yn("remove",t,e),Vt=(t,e)=>t.shadowRoot||t.attachShadow({mode:"open"}).append(Tn("slot"),Tn("style",e)),Wt=new WeakMap,xn=(t,e)=>{if(e===void 0)return Wt.get(t);try{Wt.get(t).disconnect(),Wt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),Wt.set(t,n)}},Is=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},En=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},Ms=0,Sn=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Ms).toString(32)}`),t.id):"",Tn=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},jt={define:(t,e)=>!Ee||window.customElements.get(t)||window.customElements.define(t,e)},Os=Se,Rs=Se,Ps=Se,Ds=':host(:not([hidden])) { display: inline-block; cursor: pointer }:host([aria-disabled="true"]) { cursor: default }',Gt="aria-controls",ht="aria-selected",Cn=class extends qt{constructor(){super(),Vt(this,Os)}get tabList(){return Yt("u-tablist",this)[0]||null}get selectedIndex(){return Kt(this.tabs)}set selectedIndex(t){$e(this.tabs[t])}get tabs(){return Yt("u-tab",this)}get panels(){return Yt("u-tabpanel",this)}},$n=class extends qt{constructor(){super(),Vt(this,Rs)}connectedCallback(){A(this,"role","tablist"),As(this,"click,keydown",this),xn(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){Ls(this,"click,keydown",this),xn(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s?.setAttribute(ht,"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"&&$e(n[o]),t.type==="keydown"&&!Is(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=Kt(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 Kt(this.tabs)}set selectedIndex(t){$e(this.tabs[t])}},Te=!1,kn=class extends qt{static get observedAttributes(){return["id",ht,Gt]}constructor(){super(),Vt(this,Ds)}connectedCallback(){A(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!Te&&this.selected&&this.tabList){Te=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=Yt("u-tabpanel",this.tabsElement||this),n=Ce(this,e[t.indexOf(this)]);n&&A(n,ks,Sn(this)),t.forEach((o,i)=>{const s=Ce(o,e[i]);o.tabIndex=o===this?0:-1,A(o,ht,`${o===this}`),A(o,Gt,s?.id||null),s&&(s.hidden=s!==n)}),Te=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return t?.nodeName==="U-TABLIST"?t:null}get selected(){return A(this,ht)==="true"}set selected(t){A(this,ht,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return Ce(this)}},An=class extends qt{static get observedAttributes(){return["hidden"]}constructor(){super(),Vt(this,Ps)}connectedCallback(){A(this,"role","tabpanel"),this.hidden=Kt(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){const t=this.hidden;A(this,"aria-hidden",`${t}`),A(this,"tabindex",t||Ns(this.firstChild)?null:"0")}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${Gt}="${this.id}"]`;return En(this).querySelectorAll(t)}},Yt=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),Ce=(t,e)=>{const n=A(t,Gt)||Sn(e),o=En(t).getElementById(n);return o?.nodeName==="U-TABPANEL"?o:null},Kt=t=>[...t].findIndex(e=>A(e,ht)==="true"),$e=t=>t&&A(t,"aria-disabled")!=="true"&&A(t,"aria-selected","true"),Ns=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');jt.define("u-tabs",Cn),jt.define("u-tablist",$n),jt.define("u-tab",kn),jt.define("u-tabpanel",An);const Hs="2.2.6",Ln="_alert_1a0v1_1 _ds-alert_nwz76_3",In="_app_1a0v1_1",Mn="_sticky_1a0v1_1",On="_avatar_1a0v1_1 _ds-avatar_nwz76_1",Rn="_badge_1a0v1_1",Pn="_breadcrumbs_1a0v1_1 _ds-breadcrumbs_nwz76_5",Dn="_button_1a0v1_1 _ds-button_nwz76_1",Nn="_card_1a0v1_1",Hn="_group_1a0v1_1",Bn="_chip_1a0v1_1 _ds-chip_nwz76_5",Fn="_details_1a0v1_1 _ds-details_nwz76_3",Un="_dialog_1a0v1_1 _ds-dialog_nwz76_5",zn="__drawer_1a0v1_1",qn="_divider_1a0v1_1",Vn="_errorsummary_1a0v1_1 _ds-error-summary_nwz76_5",Wn="__errorsummary_1a0v1_1",jn="_field_1a0v1_1 _ds-field_nwz76_1",Gn="__datalist_1a0v1_1",Yn="_affixes_1a0v1_1 _ds-field-affixes_nwz76_3",Kn="_fieldset_1a0v1_1 _ds-fieldset_nwz76_3",Xn="_helptext_1a0v1_1 _ds-focus_nwz76_1",Qn="_input_1a0v1_1 _ds-input_nwz76_1",Jn="_grid_1a0v1_1",Zn="_flex_1a0v1_1",to="_link_1a0v1_1",eo="_logo_1a0v1_1",no="_map_1a0v1_1",oo="_pagination_1a0v1_1 _ds-pagination_nwz76_5",io="_popover_1a0v1_1",so="_progress_1a0v1_1",ao="__indeterminate_1a0v1_1",ro="_skeleton_1a0v1_1 _ds-skeleton_nwz76_5",lo="__skeleton_1a0v1_1",co="_spinner_1a0v1_1",uo="_steps_1a0v1_1",fo="_table_1a0v1_1 _ds-table_nwz76_5",po="__scrollShadow_1a0v1_1",mo="_tabs_1a0v1_1 _ds-tabs_nwz76_5",ho="__scrollMask_1a0v1_1",go="_tag_1a0v1_1 _ds-tag_nwz76_5",vo="_toast_1a0v1_1",bo="__toastClose_1a0v1_1",wo="__toastOpen_1a0v1_1",_o="__toastTimeout_1a0v1_1",yo="_togglegroup_1a0v1_1",xo="__tooltip_1a0v1_1",Eo="_heading_1a0v1_1 _ds-heading_nwz76_1",So="_ingress_1a0v1_1",To="_muted_1a0v1_1",Co="_info_1a0v1_1",$o="_prose_1a0v1_1",ko="_validation_1a0v1_1 _ds-validation-message_nwz76_1",Ao="_body_1a0v1_173",Lo="__checked_1a0v1_1",T={alert:Ln,app:In,sticky:Mn,avatar:On,badge:Rn,breadcrumbs:Pn,button:Dn,card:Nn,group:Hn,chip:Bn,details:Fn,dialog:Un,_drawer:zn,divider:qn,errorsummary:Vn,_errorsummary:Wn,field:jn,_datalist:Gn,affixes:Yn,fieldset:Kn,helptext:Xn,input:Qn,grid:Jn,flex:Zn,link:to,logo:eo,map:no,pagination:oo,popover:io,progress:so,_indeterminate:ao,skeleton:ro,_skeleton:lo,spinner:co,steps:uo,table:fo,_scrollShadow:po,tabs:mo,_scrollMask:ho,tag:go,toast:vo,_toastClose:bo,_toastOpen:wo,_toastTimeout:_o,togglegroup:yo,_tooltip:xo,heading:Eo,ingress:So,muted:To,info:Co,prose:$o,validation:ko,body:Ao,_checked:Lo},Bs=Object.freeze(Object.defineProperty({__proto__:null,_checked:Lo,_datalist:Gn,_drawer:zn,_errorsummary:Wn,_indeterminate:ao,_scrollMask:ho,_scrollShadow:po,_skeleton:lo,_toastClose:bo,_toastOpen:wo,_toastTimeout:_o,_tooltip:xo,affixes:Yn,alert:Ln,app:In,avatar:On,badge:Rn,body:Ao,breadcrumbs:Pn,button:Dn,card:Nn,chip:Bn,default:T,details:Fn,dialog:Un,divider:qn,errorsummary:Vn,field:jn,fieldset:Kn,flex:Zn,grid:Jn,group:Hn,heading:Eo,helptext:Xn,info:Co,ingress:So,input:Qn,link:to,logo:eo,map:no,muted:To,pagination:oo,popover:io,progress:so,prose:$o,skeleton:ro,spinner:co,steps:uo,sticky:Mn,table:fo,tabs:mo,tag:go,toast:vo,togglegroup:yo,validation:ko},Symbol.toStringTag,{value:"Module"})),gt=Math.min,O=Math.max,Xt=Math.round,Qt=Math.floor,V=t=>({x:t,y:t}),Fs={left:"right",right:"left",bottom:"top",top:"bottom"},Us={start:"end",end:"start"};function Io(t,e,n){return O(t,gt(e,n))}function Jt(t,e){return typeof t=="function"?t(e):t}function it(t){return t.split("-")[0]}function Zt(t){return t.split("-")[1]}function Mo(t){return t==="x"?"y":"x"}function Oo(t){return t==="y"?"height":"width"}const zs=new Set(["top","bottom"]);function Q(t){return zs.has(it(t))?"y":"x"}function Ro(t){return Mo(Q(t))}function qs(t,e,n){n===void 0&&(n=!1);const o=Zt(t),i=Ro(t),s=Oo(i);let a=i==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return e.reference[s]>e.floating[s]&&(a=te(a)),[a,te(a)]}function Vs(t){const e=te(t);return[ke(t),e,ke(e)]}function ke(t){return t.replace(/start|end/g,e=>Us[e])}const Po=["left","right"],Do=["right","left"],Ws=["top","bottom"],js=["bottom","top"];function Gs(t,e,n){switch(t){case"top":case"bottom":return n?e?Do:Po:e?Po:Do;case"left":case"right":return e?Ws:js;default:return[]}}function Ys(t,e,n,o){const i=Zt(t);let s=Gs(it(t),n==="start",o);return i&&(s=s.map(a=>a+"-"+i),e&&(s=s.concat(s.map(ke)))),s}function te(t){return t.replace(/left|right|bottom|top/g,e=>Fs[e])}function Ks(t){return{top:0,right:0,bottom:0,left:0,...t}}function Xs(t){return typeof t!="number"?Ks(t):{top:t,right:t,bottom:t,left:t}}function ee(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 No(t,e,n){let{reference:o,floating:i}=t;const s=Q(e),a=Ro(e),r=Oo(a),c=it(e),l=s==="y",d=o.x+o.width/2-i.width/2,u=o.y+o.height/2-i.height/2,m=o[r]/2-i[r]/2;let p;switch(c){case"top":p={x:d,y:o.y-i.height};break;case"bottom":p={x:d,y:o.y+o.height};break;case"right":p={x:o.x+o.width,y:u};break;case"left":p={x:o.x-i.width,y:u};break;default:p={x:o.x,y:o.y}}switch(Zt(e)){case"start":p[a]-=m*(n&&l?-1:1);break;case"end":p[a]+=m*(n&&l?-1:1);break}return p}const Qs=async(t,e,n)=>{const{placement:o="bottom",strategy:i="absolute",middleware:s=[],platform:a}=n,r=s.filter(Boolean),c=await(a.isRTL==null?void 0:a.isRTL(e));let l=await a.getElementRects({reference:t,floating:e,strategy:i}),{x:d,y:u}=No(l,o,c),m=o,p={},v=0;for(let h=0;h<r.length;h++){const{name:w,fn:b}=r[h],{x:g,y:x,data:y,reset:S}=await b({x:d,y:u,initialPlacement:o,placement:m,strategy:i,middlewareData:p,rects:l,platform:a,elements:{reference:t,floating:e}});d=g??d,u=x??u,p={...p,[w]:{...p[w],...y}},S&&v<=50&&(v++,typeof S=="object"&&(S.placement&&(m=S.placement),S.rects&&(l=S.rects===!0?await a.getElementRects({reference:t,floating:e,strategy:i}):S.rects),{x:d,y:u}=No(l,m,c)),h=-1)}return{x:d,y:u,placement:m,strategy:i,middlewareData:p}};async function Ae(t,e){var n;e===void 0&&(e={});const{x:o,y:i,platform:s,rects:a,elements:r,strategy:c}=t,{boundary:l="clippingAncestors",rootBoundary:d="viewport",elementContext:u="floating",altBoundary:m=!1,padding:p=0}=Jt(e,t),v=Xs(p),w=r[m?u==="floating"?"reference":"floating":u],b=ee(await s.getClippingRect({element:(n=await(s.isElement==null?void 0:s.isElement(w)))==null||n?w:w.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(r.floating)),boundary:l,rootBoundary:d,strategy:c})),g=u==="floating"?{x:o,y:i,width:a.floating.width,height:a.floating.height}:a.reference,x=await(s.getOffsetParent==null?void 0:s.getOffsetParent(r.floating)),y=await(s.isElement==null?void 0:s.isElement(x))?await(s.getScale==null?void 0:s.getScale(x))||{x:1,y:1}:{x:1,y:1},S=ee(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:r,rect:g,offsetParent:x,strategy:c}):g);return{top:(b.top-S.top+v.top)/y.y,bottom:(S.bottom-b.bottom+v.bottom)/y.y,left:(b.left-S.left+v.left)/y.x,right:(S.right-b.right+v.right)/y.x}}const Js=function(t){return t===void 0&&(t={}),{name:"flip",options:t,async fn(e){var n,o;const{placement:i,middlewareData:s,rects:a,initialPlacement:r,platform:c,elements:l}=e,{mainAxis:d=!0,crossAxis:u=!0,fallbackPlacements:m,fallbackStrategy:p="bestFit",fallbackAxisSideDirection:v="none",flipAlignment:h=!0,...w}=Jt(t,e);if((n=s.arrow)!=null&&n.alignmentOffset)return{};const b=it(i),g=Q(r),x=it(r)===r,y=await(c.isRTL==null?void 0:c.isRTL(l.floating)),S=m||(x||!h?[te(r)]:Vs(r)),N=v!=="none";!m&&N&&S.push(...Ys(r,h,v,y));const G=[r,...S],dt=await Ae(e,w),ut=[];let X=((o=s.flip)==null?void 0:o.overflows)||[];if(d&&ut.push(dt[b]),u){const ft=qs(i,a,y);ut.push(dt[ft[0]],dt[ft[1]])}if(X=[...X,{placement:i,overflows:ut}],!ut.every(ft=>ft<=0)){var Mt,Ot;const ft=(((Mt=s.flip)==null?void 0:Mt.index)||0)+1,rn=G[ft];if(rn&&(!(u==="alignment"?g!==Q(rn):!1)||X.every(q=>Q(q.placement)===g?q.overflows[0]>0:!0)))return{data:{index:ft,overflows:X},reset:{placement:rn}};let Pt=(Ot=X.filter(pt=>pt.overflows[0]<=0).sort((pt,q)=>pt.overflows[1]-q.overflows[1])[0])==null?void 0:Ot.placement;if(!Pt)switch(p){case"bestFit":{var Rt;const pt=(Rt=X.filter(q=>{if(N){const et=Q(q.placement);return et===g||et==="y"}return!0}).map(q=>[q.placement,q.overflows.filter(et=>et>0).reduce((et,yl)=>et+yl,0)]).sort((q,et)=>q[1]-et[1])[0])==null?void 0:Rt[0];pt&&(Pt=pt);break}case"initialPlacement":Pt=r;break}if(i!==Pt)return{reset:{placement:Pt}}}return{}}}},Zs=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:a=!1,limiter:r={fn:w=>{let{x:b,y:g}=w;return{x:b,y:g}}},...c}=Jt(t,e),l={x:n,y:o},d=await Ae(e,c),u=Q(it(i)),m=Mo(u);let p=l[m],v=l[u];if(s){const w=m==="y"?"top":"left",b=m==="y"?"bottom":"right",g=p+d[w],x=p-d[b];p=Io(g,p,x)}if(a){const w=u==="y"?"top":"left",b=u==="y"?"bottom":"right",g=v+d[w],x=v-d[b];v=Io(g,v,x)}const h=r.fn({...e,[m]:p,[u]:v});return{...h,data:{x:h.x-n,y:h.y-o,enabled:{[m]:s,[u]:a}}}}}},ta=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){var n,o;const{placement:i,rects:s,platform:a,elements:r}=e,{apply:c=()=>{},...l}=Jt(t,e),d=await Ae(e,l),u=it(i),m=Zt(i),p=Q(i)==="y",{width:v,height:h}=s.floating;let w,b;u==="top"||u==="bottom"?(w=u,b=m===(await(a.isRTL==null?void 0:a.isRTL(r.floating))?"start":"end")?"left":"right"):(b=u,w=m==="end"?"top":"bottom");const g=h-d.top-d.bottom,x=v-d.left-d.right,y=gt(h-d[w],g),S=gt(v-d[b],x),N=!e.middlewareData.shift;let G=y,dt=S;if((n=e.middlewareData.shift)!=null&&n.enabled.x&&(dt=x),(o=e.middlewareData.shift)!=null&&o.enabled.y&&(G=g),N&&!m){const X=O(d.left,0),Mt=O(d.right,0),Ot=O(d.top,0),Rt=O(d.bottom,0);p?dt=v-2*(X!==0||Mt!==0?X+Mt:O(d.left,d.right)):G=h-2*(Ot!==0||Rt!==0?Ot+Rt:O(d.top,d.bottom))}await c({...e,availableWidth:dt,availableHeight:G});const ut=await a.getDimensions(r.floating);return v!==ut.width||h!==ut.height?{reset:{rects:!0}}:{}}}};function ne(){return typeof window<"u"}function vt(t){return Ho(t)?(t.nodeName||"").toLowerCase():"#document"}function R(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function W(t){var e;return(e=(Ho(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function Ho(t){return ne()?t instanceof Node||t instanceof R(t).Node:!1}function H(t){return ne()?t instanceof Element||t instanceof R(t).Element:!1}function j(t){return ne()?t instanceof HTMLElement||t instanceof R(t).HTMLElement:!1}function Bo(t){return!ne()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof R(t).ShadowRoot}const ea=new Set(["inline","contents"]);function Et(t){const{overflow:e,overflowX:n,overflowY:o,display:i}=B(t);return/auto|scroll|overlay|hidden|clip/.test(e+o+n)&&!ea.has(i)}const na=new Set(["table","td","th"]);function oa(t){return na.has(vt(t))}const ia=[":popover-open",":modal"];function oe(t){return ia.some(e=>{try{return t.matches(e)}catch{return!1}})}const sa=["transform","translate","scale","rotate","perspective"],aa=["transform","translate","scale","rotate","perspective","filter"],ra=["paint","layout","strict","content"];function Le(t){const e=Ie(),n=H(t)?B(t):t;return sa.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)||aa.some(o=>(n.willChange||"").includes(o))||ra.some(o=>(n.contain||"").includes(o))}function la(t){let e=J(t);for(;j(e)&&!bt(e);){if(Le(e))return e;if(oe(e))return null;e=J(e)}return null}function Ie(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const ca=new Set(["html","body","#document"]);function bt(t){return ca.has(vt(t))}function B(t){return R(t).getComputedStyle(t)}function ie(t){return H(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function J(t){if(vt(t)==="html")return t;const e=t.assignedSlot||t.parentNode||Bo(t)&&t.host||W(t);return Bo(e)?e.host:e}function Fo(t){const e=J(t);return bt(e)?t.ownerDocument?t.ownerDocument.body:t.body:j(e)&&Et(e)?e:Fo(e)}function St(t,e,n){var o;e===void 0&&(e=[]),n===void 0&&(n=!0);const i=Fo(t),s=i===((o=t.ownerDocument)==null?void 0:o.body),a=R(i);if(s){const r=Me(a);return e.concat(a,a.visualViewport||[],Et(i)?i:[],r&&n?St(r):[])}return e.concat(i,St(i,[],n))}function Me(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function Uo(t){const e=B(t);let n=parseFloat(e.width)||0,o=parseFloat(e.height)||0;const i=j(t),s=i?t.offsetWidth:n,a=i?t.offsetHeight:o,r=Xt(n)!==s||Xt(o)!==a;return r&&(n=s,o=a),{width:n,height:o,$:r}}function Oe(t){return H(t)?t:t.contextElement}function wt(t){const e=Oe(t);if(!j(e))return V(1);const n=e.getBoundingClientRect(),{width:o,height:i,$:s}=Uo(e);let a=(s?Xt(n.width):n.width)/o,r=(s?Xt(n.height):n.height)/i;return(!a||!Number.isFinite(a))&&(a=1),(!r||!Number.isFinite(r))&&(r=1),{x:a,y:r}}const da=V(0);function zo(t){const e=R(t);return!Ie()||!e.visualViewport?da:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function ua(t,e,n){return e===void 0&&(e=!1),!n||e&&n!==R(t)?!1:e}function st(t,e,n,o){e===void 0&&(e=!1),n===void 0&&(n=!1);const i=t.getBoundingClientRect(),s=Oe(t);let a=V(1);e&&(o?H(o)&&(a=wt(o)):a=wt(t));const r=ua(s,n,o)?zo(s):V(0);let c=(i.left+r.x)/a.x,l=(i.top+r.y)/a.y,d=i.width/a.x,u=i.height/a.y;if(s){const m=R(s),p=o&&H(o)?R(o):o;let v=m,h=Me(v);for(;h&&o&&p!==v;){const w=wt(h),b=h.getBoundingClientRect(),g=B(h),x=b.left+(h.clientLeft+parseFloat(g.paddingLeft))*w.x,y=b.top+(h.clientTop+parseFloat(g.paddingTop))*w.y;c*=w.x,l*=w.y,d*=w.x,u*=w.y,c+=x,l+=y,v=R(h),h=Me(v)}}return ee({width:d,height:u,x:c,y:l})}function se(t,e){const n=ie(t).scrollLeft;return e?e.left+n:st(W(t)).left+n}function qo(t,e){const n=t.getBoundingClientRect(),o=n.left+e.scrollLeft-se(t,n),i=n.top+e.scrollTop;return{x:o,y:i}}function fa(t){let{elements:e,rect:n,offsetParent:o,strategy:i}=t;const s=i==="fixed",a=W(o),r=e?oe(e.floating):!1;if(o===a||r&&s)return n;let c={scrollLeft:0,scrollTop:0},l=V(1);const d=V(0),u=j(o);if((u||!u&&!s)&&((vt(o)!=="body"||Et(a))&&(c=ie(o)),j(o))){const p=st(o);l=wt(o),d.x=p.x+o.clientLeft,d.y=p.y+o.clientTop}const m=a&&!u&&!s?qo(a,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+m.x,y:n.y*l.y-c.scrollTop*l.y+d.y+m.y}}function pa(t){return Array.from(t.getClientRects())}function ma(t){const e=W(t),n=ie(t),o=t.ownerDocument.body,i=O(e.scrollWidth,e.clientWidth,o.scrollWidth,o.clientWidth),s=O(e.scrollHeight,e.clientHeight,o.scrollHeight,o.clientHeight);let a=-n.scrollLeft+se(t);const r=-n.scrollTop;return B(o).direction==="rtl"&&(a+=O(e.clientWidth,o.clientWidth)-i),{width:i,height:s,x:a,y:r}}const Vo=25;function ha(t,e){const n=R(t),o=W(t),i=n.visualViewport;let s=o.clientWidth,a=o.clientHeight,r=0,c=0;if(i){s=i.width,a=i.height;const d=Ie();(!d||d&&e==="fixed")&&(r=i.offsetLeft,c=i.offsetTop)}const l=se(o);if(l<=0){const d=o.ownerDocument,u=d.body,m=getComputedStyle(u),p=d.compatMode==="CSS1Compat"&&parseFloat(m.marginLeft)+parseFloat(m.marginRight)||0,v=Math.abs(o.clientWidth-u.clientWidth-p);v<=Vo&&(s-=v)}else l<=Vo&&(s+=l);return{width:s,height:a,x:r,y:c}}const ga=new Set(["absolute","fixed"]);function va(t,e){const n=st(t,!0,e==="fixed"),o=n.top+t.clientTop,i=n.left+t.clientLeft,s=j(t)?wt(t):V(1),a=t.clientWidth*s.x,r=t.clientHeight*s.y,c=i*s.x,l=o*s.y;return{width:a,height:r,x:c,y:l}}function Wo(t,e,n){let o;if(e==="viewport")o=ha(t,n);else if(e==="document")o=ma(W(t));else if(H(e))o=va(e,n);else{const i=zo(t);o={x:e.x-i.x,y:e.y-i.y,width:e.width,height:e.height}}return ee(o)}function jo(t,e){const n=J(t);return n===e||!H(n)||bt(n)?!1:B(n).position==="fixed"||jo(n,e)}function ba(t,e){const n=e.get(t);if(n)return n;let o=St(t,[],!1).filter(r=>H(r)&&vt(r)!=="body"),i=null;const s=B(t).position==="fixed";let a=s?J(t):t;for(;H(a)&&!bt(a);){const r=B(a),c=Le(a);!c&&r.position==="fixed"&&(i=null),(s?!c&&!i:!c&&r.position==="static"&&!!i&&ga.has(i.position)||Et(a)&&!c&&jo(t,a))?o=o.filter(d=>d!==a):i=r,a=J(a)}return e.set(t,o),o}function wa(t){let{element:e,boundary:n,rootBoundary:o,strategy:i}=t;const a=[...n==="clippingAncestors"?oe(e)?[]:ba(e,this._c):[].concat(n),o],r=a[0],c=a.reduce((l,d)=>{const u=Wo(e,d,i);return l.top=O(u.top,l.top),l.right=gt(u.right,l.right),l.bottom=gt(u.bottom,l.bottom),l.left=O(u.left,l.left),l},Wo(e,r,i));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function _a(t){const{width:e,height:n}=Uo(t);return{width:e,height:n}}function ya(t,e,n){const o=j(e),i=W(e),s=n==="fixed",a=st(t,!0,s,e);let r={scrollLeft:0,scrollTop:0};const c=V(0);function l(){c.x=se(i)}if(o||!o&&!s)if((vt(e)!=="body"||Et(i))&&(r=ie(e)),o){const p=st(e,!0,s,e);c.x=p.x+e.clientLeft,c.y=p.y+e.clientTop}else i&&l();s&&!o&&i&&l();const d=i&&!o&&!s?qo(i,r):V(0),u=a.left+r.scrollLeft-c.x-d.x,m=a.top+r.scrollTop-c.y-d.y;return{x:u,y:m,width:a.width,height:a.height}}function Re(t){return B(t).position==="static"}function Go(t,e){if(!j(t)||B(t).position==="fixed")return null;if(e)return e(t);let n=t.offsetParent;return W(t)===n&&(n=n.ownerDocument.body),n}function Yo(t,e){const n=R(t);if(oe(t))return n;if(!j(t)){let i=J(t);for(;i&&!bt(i);){if(H(i)&&!Re(i))return i;i=J(i)}return n}let o=Go(t,e);for(;o&&oa(o)&&Re(o);)o=Go(o,e);return o&&bt(o)&&Re(o)&&!Le(o)?n:o||la(t)||n}const xa=async function(t){const e=this.getOffsetParent||Yo,n=this.getDimensions,o=await n(t.floating);return{reference:ya(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function Ea(t){return B(t).direction==="rtl"}const Sa={convertOffsetParentRelativeRectToViewportRelativeRect:fa,getDocumentElement:W,getClippingRect:wa,getOffsetParent:Yo,getElementRects:xa,getClientRects:pa,getDimensions:_a,getScale:wt,isElement:H,isRTL:Ea};function Ko(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function Ta(t,e){let n=null,o;const i=W(t);function s(){var r;clearTimeout(o),(r=n)==null||r.disconnect(),n=null}function a(r,c){r===void 0&&(r=!1),c===void 0&&(c=1),s();const l=t.getBoundingClientRect(),{left:d,top:u,width:m,height:p}=l;if(r||e(),!m||!p)return;const v=Qt(u),h=Qt(i.clientWidth-(d+m)),w=Qt(i.clientHeight-(u+p)),b=Qt(d),x={rootMargin:-v+"px "+-h+"px "+-w+"px "+-b+"px",threshold:O(0,gt(1,c))||1};let y=!0;function S(N){const G=N[0].intersectionRatio;if(G!==c){if(!y)return a();G?a(!1,G):o=setTimeout(()=>{a(!1,1e-7)},1e3)}G===1&&!Ko(l,t.getBoundingClientRect())&&a(),y=!1}try{n=new IntersectionObserver(S,{...x,root:i.ownerDocument})}catch{n=new IntersectionObserver(S,x)}n.observe(t)}return a(!0),s}function Ca(t,e,n,o){o===void 0&&(o={});const{ancestorScroll:i=!0,ancestorResize:s=!0,elementResize:a=typeof ResizeObserver=="function",layoutShift:r=typeof IntersectionObserver=="function",animationFrame:c=!1}=o,l=Oe(t),d=i||s?[...l?St(l):[],...St(e)]:[];d.forEach(b=>{i&&b.addEventListener("scroll",n,{passive:!0}),s&&b.addEventListener("resize",n)});const u=l&&r?Ta(l,n):null;let m=-1,p=null;a&&(p=new ResizeObserver(b=>{let[g]=b;g&&g.target===l&&p&&(p.unobserve(e),cancelAnimationFrame(m),m=requestAnimationFrame(()=>{var x;(x=p)==null||x.observe(e)})),n()}),l&&!c&&p.observe(l),p.observe(e));let v,h=c?st(t):null;c&&w();function w(){const b=st(t);h&&!Ko(h,b)&&n(),h=b,v=requestAnimationFrame(w)}return n(),()=>{var b;d.forEach(g=>{i&&g.removeEventListener("scroll",n),s&&g.removeEventListener("resize",n)}),u?.(),(b=p)==null||b.disconnect(),p=null,c&&cancelAnimationFrame(v)}}const Pe=Zs,De=Js,Xo=ta,$a=(t,e,n)=>{const o=new Map,i={platform:Sa,...n},s={...i.platform,_c:o};return Qs(t,e,{...i,platform:s})};function Qo(t){var e,n,o="";if(typeof t=="string"||typeof t=="number")o+=t;else if(typeof t=="object")if(Array.isArray(t)){var i=t.length;for(e=0;e<i;e++)t[e]&&(n=Qo(t[e]))&&(o&&(o+=" "),o+=n)}else for(n in t)t[n]&&(o&&(o+=" "),o+=n);return o}function ka(){for(var t,e,n=0,o="",i=arguments.length;n<i;n++)(t=arguments[n])&&(e=Qo(t))&&(o&&(o+=" "),o+=e);return o}const P={capture:!0,passive:!0},at=typeof window<"u"&&typeof document<"u";function Aa(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function f(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 La=0;const Ia=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function ae(t){return t.id||(t.id=`${Ia}${++La}`),t.id}const Jo=(t,e,[...n])=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},C=(t,...e)=>{Tt&&(t===window||t===document)&&Tt.push(()=>Zo(t,...e)),Jo("add",t,e)},Zo=(t,...e)=>Jo("remove",t,e);let Tt=null;const D=t=>{if(!at||!window.requestAnimationFrame)return;window._mtdsUnbindEvents||(window._mtdsUnbindEvents=new Map);const e=()=>requestAnimationFrame(()=>{const n=String(t).replace(/(\n|\s)/g,"");window._mtdsUnbindEvents?.get(n)?.map(o=>o()),Tt=[],t(),window._mtdsUnbindEvents?.set(n,Tt?.slice(0)),Tt=null});document.readyState==="complete"?e():C(window,"load",e)},Ne=new WeakMap;function rt(t,e,n){Ne.get(t)?.(),Ne.delete(t),e&&Ne.set(t,Ca(e,t,()=>{if(!t.isConnected||!e.isConnected||t.hidden)return rt(t,!1);$a(e,t,n).then(({x:o,y:i})=>{t.style.left=`${o}px`,t.style.top=`${i}px`})}))}function ti(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 He=new WeakMap,_t=(t,e,n)=>{if(!at||!window.requestAnimationFrame)return;const o=t.getElementsByClassName(e),i=He.get(t)||[];i.length||(He.set(t,i),ti((s,a)=>{if(t.isConnected&&i?.length)for(const r of i)r();else a?.disconnect(),He.delete(t)}).observe(t,{attributeFilter:["class","hidden"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>n(o))},Be=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),$=(t,e,n)=>{const o=document.createElement(t);if(n&&(o.textContent=n),e)for(const[i,s]of Object.entries(e))f(o,i,s);return o},Ma=typeof HTMLElement>"u"?class{}:HTMLElement,Oa=`.${T.breadcrumbs.split(" ")[0]}`,Ra=`.${T.card.split(" ")[0]}`,ei=`.${T.chip.split(" ")[0]}`,Pa=`.${T.helptext.split(" ")[0]}`,Da=`.${T.pagination.split(" ")[0]}`,Na='summary,u-summary,a,button,[role="tab"],[role="button"]',Ha="click,toggle,submit,change",Fe="mattilsynet.matomo.cloud",F="mtds-analytics-banner",Ba="https://www.mattilsynet.no/om-mattilsynet/personvernerklaering/informasjonskapsler";function ni(t,e={}){if(at){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${Fe}/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"&&Fa();const a=s?`https://cdn.matomo.cloud/${Fe}/container_${s}.js`:`https://cdn.matomo.cloud/${Fe}/matomo.js`;document.querySelector(`script[src="${a}"]`)||document.head.append($("script",{async:"",src:a}))}}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,a=["trackEvent",n,o,i,s];let r=location.href;window._paq.push([function(){r=this.getCurrentUrl()}]),window._paq.push(["setCustomUrl",r.split("#")[0]]),window._paq.push(a.filter(c=>c!==void 0)),window._paq.push(["setCustomUrl",r])}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 Fa(){if(document.getElementById(F)||window.localStorage.getItem(F))return;document.body.insertAdjacentHTML("afterbegin",`<dialog id="${F}" data-analytics="ignore"><style>
|
|
9
9
|
#${F}[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
|
#${F} 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
|
#${F} button:focus-visible { outline: 2px solid }
|
|
@@ -13,9 +13,9 @@ var mtds=function(M){"use strict";var ns=Object.defineProperty,ln=Object.getOwnP
|
|
|
13
13
|
#${F} button:active { background: #054449; scale: .9 }
|
|
14
14
|
#${F} p { margin: 0 .25em }
|
|
15
15
|
</style>
|
|
16
|
-
<p>Vi bruker <a href="${
|
|
16
|
+
<p>Vi bruker <a href="${Ba}" target="_blank">informasjonskapsler</a> for å forbedre brukeropplevelsen.</p>
|
|
17
17
|
<form method="dialog" data-analytics="ignore"><button type="submit" aria-label="OK">×</button></form>
|
|
18
|
-
</dialog>`);const e=document.getElementById(F),n=()=>window.localStorage.setItem(F,"seen");e.addEventListener("close",n,{once:!0}),e.show()}function
|
|
18
|
+
</dialog>`);const e=document.getElementById(F),n=()=>window.localStorage.setItem(F,"seen");e.addEventListener("close",n,{once:!0}),e.show()}function Ua(t){window._mtdsTracking?.enabled&&setTimeout(za,0,t)}function za({type:t,target:e}){const n=t==="click"?e?.closest?.(Na):e;if(!(n instanceof Element)||n.closest('[data-analytics="ignore"]'))return;let o="click",i="Button",s=oi(n)||Wa(n)||f(n,"data-tooltip")||"";if(t==="submit")i="Form",o="submit",s=s||document.title;else if(t==="toggle"){if(!n.matches("dialog:modal"))return;i="Dialog",o="open"}else if(t==="change"){const a=f(n,"type"),r=a==="checkbox"||a==="radio"?n.closest("fieldset"):null;i=n.closest(ei)?"Chip":"Form",o="change",s=oi(r||n)||Ct(r?.querySelector("legend"))||Ct(n?.labels?.[0])}else if(f(n,"role")==="tab")i="Tab",o="navigate";else if(f(n,"popovertarget")){if(!qa(n)?.matches(":popover-open"))return;i=n.closest(Pa)?"HelpText":"Popover",o="open"}else if(n.nodeName.endsWith("SUMMARY")){if(!n.parentElement.open)return;i="Details",o="open"}else if(f(n,"data-command")==="toggle-app-expanded"){const a=Va(n,"--mtds-tooltip-position")==="none";i="Sidebar",o=a?"expand":"minimize",s=a&&f(n,"data-tooltip")||Ct(n)}else if(n.closest(Oa))i="Breadcrumbs",o="navigate";else if(n.closest(Da))i="Pagintation",o="navigate";else if(n.closest(Ra))i="Card",o=n instanceof HTMLAnchorElement?"navigate":"click";else if(n.closest(ei))i="Chip",o=n.hasAttribute("data-removable")?"remove":"click";else if(n.closest("th[aria-sort]"))i="Table",o="sort";else if(n instanceof HTMLAnchorElement)i="Link",o=n.protocol==="mailto:"?"email":"navigate",n.hasAttribute("download")?o="download":n.hash&&n.href.startsWith(location.href.split("#")[0])&&(o="anchor");else if(n.hasAttribute("aria-expanded")){if(f(n,"aria-expanded")!=="true")return;i="Expand",o="open"}ni("event",{category:f(n,"data-analytics-category")??i,action:f(n,"data-analytics-action")??o,name:f(n,"data-analytics-name")??s})}const Ct=t=>t?.textContent?.trim()||"",oi=t=>t&&f(t,"aria-label")||"",qa=t=>document.getElementById(f(t,"popovertarget")||""),Va=(t,e)=>window.getComputedStyle(t).getPropertyValue(e)?.trim(),Wa=t=>{const e=Ct(t),n=Ct(t.querySelector("h1,h2,h3,h4,h5,h6"));return e.startsWith(n)&&n||e.slice(0,100).trim()};D(()=>C(document,Ha,Ua,P)),typeof window<"u"&&window.CSSStyleSheet&&document.adoptedStyleSheets&&(()=>{const t="--mtds-app-expanded",e=new CSSStyleSheet,n=()=>!window.localStorage.getItem(t)?.includes("false");document.adoptedStyleSheets.push(e),window.mtdsToggleAppExpanded=o=>{try{const i=o??!n();e.replaceSync?.(`:root { ${t}: var(${t}--${i})}`),window.localStorage.setItem(t,i)}catch{}},window.mtdsToggleAppExpanded(n())})();const ii=T.app.split(" ")[0],ja=T.sticky.split(" ")[0],Ga='[data-command="toggle-app-expanded"]',Ue=`.${ii} > dialog,.${ii} dialog ~ main`,si=t=>{document.startViewTransition?document.startViewTransition(t):t()},ai=t=>si(()=>window.mtdsToggleAppExpanded?.(t));function Ya({target:t,defaultPrevented:e}){const n=t?.closest?.("a");if(n?.closest("dialog")&&n?.closest(Ue))return ri();if(e||!(t instanceof HTMLButtonElement)||!t.matches(Ga))return;getComputedStyle(t).position==="sticky"?ai():si(()=>{const i=document.querySelector(Ue);i?.setAttribute("data-closedby","any"),i?.showModal()})}function ri(){document.querySelector(Ue)?.close()}let ze=0,yt,Y=0,L,qe=0,re=0,Ve=!1,We=0,lt=0;function Ka([t]){L=t,li()}function li(){if(!L?.isConnected)return;const t=window.scrollY,e=t<lt;lt=t,e!==yt&&(ze=(L.parentElement?.getBoundingClientRect().top||0)+lt,yt=e,qe=L.offsetHeight,re=L.getBoundingClientRect().top+lt,Ve=L.offsetHeight<=window.innerHeight,We=window.innerHeight),!(Y===-1&&Ve)&&(Y!==-1&&(Ve||yt&<<=re)?(L.style.setProperty("--pos","sticky"),L.style.setProperty("--top","0px"),Y=-1):Y===-1&&!yt?(L.style.setProperty("--pos","relative"),L.style.setProperty("--top",`${Math.max(0,lt-ze)}px`),Y=0):Y!==1&&!yt&<+We>=re+qe?(L.style.setProperty("--pos","sticky"),L.style.setProperty("--top",`${We-qe}px`),Y=1):Y===1&&yt&&(L.style.setProperty("--pos","relative"),L.style.setProperty("--top",`${re-ze}px`),Y=0))}D(()=>{_t(document.documentElement,ja,Ka),C(document,"click",Ya,P),C(window,"resize",Aa(ri,100),P),C(window,"scroll",li,P)});const Xa=(t,e,n=Number.POSITIVE_INFINITY)=>{const o=(n-1)/2,i=Math.max(Math.min(t-Math.floor(o),e-n+1),1),s=Math.min(Math.max(t+Math.ceil(o),n),e),a=Array.from({length:s+1-i},(r,c)=>c+i);return n>4&&i>1&&a.splice(0,2,1,0),n>3&&s<e&&a.splice(-2,2,0,e),a},Qa=({current:t=1,total:e=10,show:n=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:Xa(t,e,n).map((o,i)=>({current:o===t&&"page",key:`key-${o}-${i}`,page:o}))});function k(t,e={}){const n=document.getElementById(e.id||"")||$("dialog");return f(n,"aria-busy",e.busy?"true":null),f(n,"class",ka(T.toast,e.className)),f(n,"data-closedby",e.closedby||null),f(n,"data-color",e.color||null),f(n,"data-icon",`${e.icon??""}`||null),f(n,"data-timeout",`${e.timeout??""}`||null),f(n,"id",e.id||`${Date.now()}`),f(n,"open",e.open===!1?null:""),n.innerHTML=t,n.addEventListener("animationend",Ja,{once:!0}),document.body.appendChild(n),n.id}function Ja({animationName:t,target:e}){t===T._toastClose&&e.remove()}k.success=(t,e)=>k(t,{color:"success",...e}),k.danger=(t,e)=>k(t,{color:"danger",...e}),k.info=(t,e)=>k(t,{color:"info",...e}),k.warning=(t,e)=>k(t,{color:"warning",...e}),k.neutral=(t,e)=>k(t,{color:"neutral",...e}),k.promise=async function(e,n){const{loading:o,success:i,error:s,...a}=n,r=k(o,{busy:!0,...a});try{const c=await e();return k.success(i,{id:r,busy:!1}),c}catch(c){throw k.danger(s,{id:r,busy:!1}),c}};const Za=T.breadcrumbs.split(" ")[0];function tr(t){for(const e of t)e.querySelectorAll("li a").forEach((n,o,{length:i})=>{f(n,"aria-current",o===i-1?"page":null)})}D(()=>_t(document.documentElement,Za,tr));const er=`:host(:not([hidden])) {
|
|
19
19
|
display: grid;
|
|
20
20
|
gap: var(--ds-size-6);
|
|
21
21
|
}
|
|
@@ -248,24 +248,30 @@ var mtds=function(M){"use strict";var ns=Object.defineProperty,ln=Object.getOwnP
|
|
|
248
248
|
stroke: var(--color);
|
|
249
249
|
stroke-linejoin: round;
|
|
250
250
|
stroke-linecap: round;
|
|
251
|
-
stroke-width:
|
|
251
|
+
stroke-width: 1.5;
|
|
252
252
|
vector-effect: non-scaling-stroke;
|
|
253
253
|
}
|
|
254
|
-
|
|
255
|
-
filter: brightness(0.8) saturate(2); /* Ensure more contrast for line colors */
|
|
256
|
-
}
|
|
254
|
+
|
|
257
255
|
.lineShade {
|
|
258
256
|
stroke: none;
|
|
259
257
|
fill: var(--color);
|
|
260
258
|
opacity: 0.3;
|
|
261
259
|
mask: linear-gradient(to bottom, black, transparent);
|
|
262
260
|
}
|
|
261
|
+
|
|
262
|
+
.line,
|
|
263
|
+
.linePoint,
|
|
264
|
+
:host:has(.linePoint) .legend::before {
|
|
265
|
+
filter: brightness(0.8) saturate(2); /* Ensure more contrast for line colors */
|
|
266
|
+
}
|
|
267
|
+
|
|
263
268
|
.linePoint {
|
|
264
269
|
--size: var(--ds-size-3);
|
|
265
270
|
background-color: var(--color);
|
|
266
271
|
border-radius: var(--ds-border-radius-full);
|
|
267
272
|
border: var(--mtdsc-chart-border-width) solid var(--mtdsc-chart-border-color);
|
|
268
273
|
box-sizing: border-box;
|
|
274
|
+
filter: brightness(0.8) saturate(2);
|
|
269
275
|
height: var(--size);
|
|
270
276
|
margin: calc(var(--size) / -2);
|
|
271
277
|
padding: 0;
|
|
@@ -309,18 +315,18 @@ var mtds=function(M){"use strict";var ns=Object.defineProperty,ln=Object.getOwnP
|
|
|
309
315
|
vertical-align: middle;
|
|
310
316
|
width: var(--ds-size-5);
|
|
311
317
|
}
|
|
312
|
-
`;function
|
|
318
|
+
`;function nr(t,{type:e}){const n=e==="stacked",o=t[0].reduce((d,u,m)=>{const p=t.map(h=>h[m].number),v=p.reduce((h,w)=>h+w,0);return Math.max(d,...n?[v]:p)},0),i=10**(`${~~o}`.length-1),s=o/i<5?i/2:i,a=Math.ceil(o/s)*s,r=$("div",{class:"axisGroups"}),c=$("div");c.classList.add("axisSteps"),c.append(...Array.from({length:a/s+1},(d,u)=>or(s*u)).reverse().map(d=>$("div",{class:"axisStep","data-label":d})));const l=$("div",{"aria-label":t[0][0].value||null,class:"axis",role:"figure"});return l.style.setProperty("--groups",`${t.length-1}`),l.style.setProperty("--total",`${a}`),l.append(c,r),{total:a,groups:r,axis:l}}const or=new Intl.NumberFormat().format;function ir(t){return t[0].slice(1).map(({value:e,event:n},o)=>{const i=$("div",{class:"axisGroup","data-label":e}),s=i.appendChild($("div",{class:"axisGroupContent"}));return t.slice(1).map(a=>a[o+1]).map(({tooltip:a,style:r,number:c})=>s.appendChild($("div",{"aria-label":a,"data-event":n,class:"bar",role:"img",style:`${r}; --value: ${c}`,tabindex:"0"}))),i})}function sr(t,{total:e,variant:n}){const i=$("div",{class:"axisGroup"});return t.slice(1).forEach(([,...s])=>{const a=$("div",{class:"lineContainer",role:"list",style:s[0].style}),r=ar(s.map(({number:d},u,{length:m})=>[100/(m-1)*u,100-d/e*100]),0/100),c=document.createElementNS("http://www.w3.org/2000/svg","svg");f(c,"aria-hidden","true"),f(c,"preserveAspectRatio","none"),f(c,"viewBox","0 0 100 100");const l=document.createElementNS("http://www.w3.org/2000/svg","path");if(f(l,"class","line"),f(l,"d",r),f(l,"fill","none"),f(l,"stroke","currentColor"),n==="area"){const d=l.cloneNode(!0);f(d,"d",`M-100,100 L${r.slice(1)}L200,100`),f(d,"class","lineShade"),c.append(d)}s.forEach(({number:d,tooltip:u,event:m})=>{const p=$("div",{role:"listitem"});p.appendChild($("div",{"aria-label":u,"data-event":m,tabindex:"0",class:"linePoint",role:"img",style:`--value: ${d}`})),a.append(p)}),a.appendChild(c).append(l),i.append(a)}),i}const ar=(t,e)=>t.map(([n,o],i,s)=>i?rr(i,s,e):`M${n},${o}`).join(" "),ci=([t,e],[n,o])=>[t+n,e+o],di=([t,e],[n,o])=>[t-n,e-o],ui=(t,[e,n])=>[t*e,t*n],rr=(t,e,n)=>{const o=e[t-1],i=e[t],[s,a]=ci(o,ui(n,di(i,e[t-2]||o))),[r,c]=ci(i,ui(n,di(o,e[t+1]||i)));return`C ${s},${a} ${r},${c} ${i[0]},${i[1]}`};function lr(t,{variant:e}){const n=document.createElementNS("http://www.w3.org/2000/svg","svg");f(n,"class","pie"),f(n,"viewBox","0 0 100 100");let o=0;const i=50,s=e==="doughnut"?25:0,a=t.slice(1).reduce((r,[,c])=>r+c.number,0);return t.slice(1).forEach(([,{tooltip:r,number:c,event:l,style:d}])=>{const u=document.createElementNS("http://www.w3.org/2000/svg","path"),m=o/a;o+=c;const p=o/a,v=p-m>.5?1:0,h=2*Math.PI*(m-.25),w=2*Math.PI*(p-.25),b=Math.cos(h),g=Math.sin(h),x=Math.cos(w),y=Math.sin(w),S=`M ${i+s*b} ${i+s*g} L ${i+i*b} ${i+i*g} A ${i} ${i} 0 ${v} 1 ${i+i*x} ${i+i*y} L ${i+s*x} ${i+s*y} A ${s} ${s} 0 ${v} 0 ${i+s*b} ${i+s*g}`;f(u,"aria-label",r),f(u,"data-event",l),f(u,"style",d),f(u,"d",S),f(u,"role","img"),f(u,"tabindex","0"),n.appendChild(u)}),n}const fi="click,keydown,mousemove,mouseout",pi="mtds-chart-tooltip",Z=at?document.getElementById(pi)||$("div",{class:T._tooltip,id:pi,hidden:""}):null;class cr extends Ma{_observer;static get observedAttributes(){return["data-variant"]}constructor(){super(),this.attachShadow({mode:"open"})}connectedCallback(){this._observer=new MutationObserver(this.attributeChangedCallback.bind(this)),this._observer.observe(this,{attributeFilter:["data-tooltip"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),this.attributeChangedCallback(),C(this,fi,this)}disconnectedCallback(){Z&&(Z.hidden=!0),Zo(this,fi,this),this._observer?.disconnect(),this._observer=void 0}attributeChangedCallback(){Array.from(this.shadowRoot?.children||[]).map(l=>l.remove());const e=fr(this.querySelector("table")),[n,o]=(f(this,"data-variant")||"bar").split("-"),i=$("style",{},er),s=$("div",{class:"legends"});e.slice(1).forEach(([{value:l,style:d}])=>{s.appendChild($("div",{class:"legend",style:d},l))});const{axis:a,groups:r,total:c}=nr(e,{type:o});(n==="bar"||n==="column")&&r.append(...ir(e)),(n==="line"||n==="area")&&r.append(sr(e,{total:c,variant:n})),(n==="doughnut"||n==="pie")&&this.shadowRoot?.append(lr(e,{variant:n})),this.shadowRoot?.append(i,a,s)}handleEvent(e){e.type==="click"||e.type==="keydown"?dr(e,this):ur(e)}}function dr(t,e){if(t instanceof KeyboardEvent&&t.key!=="Enter")return;const n=t.composedPath()[0],o=e.querySelector("table"),[i,s]=n instanceof Element&&f(n,"data-event")?.split("-").map(Number)||[];o?.rows[i]?.cells[s]?.querySelector("a,button")?.click?.()}let mi="";function ur(t){if(!Z)return;Z?.isConnected||document.body.append(Z);const e=t.composedPath()[0],n=e instanceof Element&&e.getAttribute("aria-label")||"";n&&(Z.style.transform=`translate(${t.pageX}px, ${t.pageY}px)`),n!==mi&&(n&&(Z.textContent=n),mi=n,Z.hidden=!n)}const $t=t=>t?.textContent?.trim()||"",fr=t=>Array.from(t?.rows||[],(e,n)=>Array.from(e.cells,(o,i)=>({number:i&&n&&Number.parseFloat($t(o))||0,event:o.querySelector("a,button")&&`${n}-${i}`,style:`--color: var(--mtdsc-chart-color-${n}, var(--mtdsc-chart-color-base))`,value:$t(o),tooltip:f(o,"data-tooltip")||`${$t(e.cells[0])}: ${$t(o)} (${$t(t?.rows[0].cells[i])})`})));at&&!window.customElements.get("mtds-chart")&&window.customElements.define("mtds-chart",cr);const pr=T.dialog.split(" ")[0],mr=at?document.getElementsByClassName(pr):[],hr=()=>{for(const t of mr)t.isConnected&&t.showModal&&t.close&&(t.matches('[open]:not([data-modal="false"]):not(:modal)')?(f(t,"open",null),t.showModal()):t.matches(":modal:not([open])")&&(f(t,"open",""),t.close()))},gr=({clientX:t,clientY:e,target:n})=>{if(n instanceof HTMLDialogElement&&f(n,"data-closedby")==="any"){const{top:s,right:a,bottom:r,left:c}=n.getBoundingClientRect();if(!(s<=e&&e<=r&&c<=t&&t<=a))return n.close()}const o=n?.closest?.("dialog");o&&n?.closest?.('[data-command="close"]')&&o.close()};D(()=>{C(document,"click",gr,P),ti(hr).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function vr(t){if(t.animationName!==T._errorsummary)return;const e=t.target?.firstElementChild;e instanceof HTMLHeadingElement&&(f(e,"tabindex","-1"),e.focus())}D(()=>C(document,"animationend",vr,P));var br=Object.defineProperty,hi=Object.getOwnPropertySymbols,wr=Object.prototype.hasOwnProperty,_r=Object.prototype.propertyIsEnumerable,gi=(t,e,n)=>e in t?br(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,yr=(t,e)=>{for(var n in e||(e={}))wr.call(e,n)&&gi(t,n,e[n]);if(hi)for(var n of hi(e))_r.call(e,n)&&gi(t,n,e[n]);return t},kt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",le=kt&&/android/i.test(navigator.userAgent),je=kt&&/iPad|iPhone|iPod/.test(navigator.userAgent),vi;kt&&/^Mac/i.test(((vi=navigator.userAgentData)==null?void 0:vi.platform)||navigator.platform);var xr=`${le?"data":"aria"}-labelledby`,Er=":host(:not([hidden])) { display: block }",Sr="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",bi=typeof HTMLElement>"u"?class{}:HTMLElement;function E(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 wi=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},At=(t,...e)=>wi("add",t,e),ce=(t,...e)=>wi("remove",t,e),Tr=(t,e)=>t.shadowRoot||t.attachShadow({mode:"open"}).append(Ke("slot"),Ke("style",e)),de=new WeakMap,Ge=(t,e)=>{if(e===void 0)return de.get(t);try{de.get(t).disconnect(),de.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),de.set(t,n)}},_i=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},Cr=0,Ye=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Cr).toString(32)}`),t.id):"",Ke=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},yi={define:(t,e)=>!kt||window.customElements.get(t)||window.customElements.define(t,e)},ct,$r=0,xi=t=>{ct||(ct=Ke("div"),ct.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",E(ct,"aria-live","assertive")),ct.isConnected||document.body.append(ct),t&&(ct.textContent=`${t}${$r++%2?" ":""}`)},kr=(t,e,n="")=>{var o,i;const s={bubbles:!0,composed:!0,data:e,inputType:n},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(o=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:o.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},Xe=!1,Qe=t=>(t?.type==="mouseup"&&(Xe=!1),t?.type==="mousedown"&&(Xe=!0,At(document,"mouseup",Qe,{once:!0})),Xe),Je="disabled",Lt="selected",Ar=class extends bi{static get observedAttributes(){return[Je,Lt]}connectedCallback(){je||(this.tabIndex=-1),this.hasAttribute("role")||E(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){E(this,"aria-disabled",`${this.disabled}`),E(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[Lt]}set defaultSelected(t){this[Lt]=t}get disabled(){return E(this,Je)!==null}set disabled(t){E(this,Je,t?"":null)}get form(){return this.closest("form")}get index(){var t;return[...((t=this.parentElement)==null?void 0:t.options)||[this]].indexOf(this)}get label(){var t;return(t=E(this,"label"))!=null?t:this.text}set label(t){E(this,"label",t)}get selected(){return E(this,Lt)!==null}set selected(t){E(this,Lt,t?"":null)}get text(){var t;return((t=this.textContent)==null?void 0:t.trim())||""}set text(t){this.textContent=t}get value(){var t;return(t=E(this,"value"))!=null?t:this.text}set value(t){E(this,"value",t)}};yi.define("u-option",Ar);var Lr=`${Er}
|
|
313
319
|
::slotted(u-option) { display: block; cursor: pointer }
|
|
314
|
-
::slotted(u-option:focus) { ${
|
|
320
|
+
::slotted(u-option:focus) { ${Sr} }
|
|
315
321
|
::slotted(u-option[aria-hidden="true"]),
|
|
316
322
|
::slotted(u-option[disabled]),
|
|
317
|
-
::slotted(u-option[hidden]) { display: none !important }`,xi,Ei=0,La=je||le,Si="click,focusout,input,keydown,mousedown,mouseup",Ti="focus,focusin,blur,focusout",ue={singular:"%d hit",plural:"%d hits"},Ci=class extends bi{constructor(){super(),this._texts=_a({},ue),this._value="",Sa(this,Aa)}static get observedAttributes(){return["id",...Object.keys(ue).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=wi(this),E(this,"role","listbox"),E(this,"tabindex","-1"),At(this._root,"focusin",this),At(this._root,"focus",this,!0),Ge(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){ce(this._root||this,"focus",this,!0),ce(this._root||this,"focusin",this),Ge(this,!1),Ze(this),this._root=void 0}attributeChangedCallback(t,e,n){const o=t?.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(ue[o])this._texts[o]=n||ue[o];else if(this._root){this._input&&tn(this,this._input);for(const s of this._root.querySelectorAll(i))tn(this,s)}}handleEvent(t){const{target:e,type:n}=t;t.defaultPrevented||(n==="click"&&Oa(this,t),(n==="focus"||n==="focusin")&&Ia(this,t),(n==="blur"||n==="focusout")&&Ma(this,t),n==="keydown"&&Ra(this,t),n==="mousedown"&&this.contains(e)&&Qe(t),(n==="mutation"||n==="input")&&(clearTimeout(Ei),Ei=setTimeout(Ai,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},$i=t=>t?.disabled||t?.readOnly||!1,It=(t,e)=>{var n,o,i;if(t.hidden!==e)return;t.hidden=$i(t?._input)||!e,(n=Ge(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&&tn(t,t._input,e),s&&E(t,"popover","manual"),s&&t.togglePopover(e),e&&Ai(t)},Ze=t=>{t._input&&(ce(t._input||t,Ti,t),ce(t._root||t,Si,t),It(t,!1),t._input=void 0)},tn=(t,e,n=!1)=>{t.popover&&E(e,"popovertarget",Ye(t)),At(e,Ti,t,!0),E(e,"aria-autocomplete","list"),E(e,"aria-controls",Ye(t)),E(e,"aria-expanded",`${!La||n}`),E(e,"autocomplete","off"),E(e,"role",$i(e)?null:"combobox")},Ia=(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&&Ze(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),E(t,ya,Ye((n=t._input.labels)==null?void 0:n[0])),At(t._root||t,Si,t),It(t,E(t._input,"inputmode")!=="none"),yi())},Ma=(t,e)=>{!le&&!Qe()&&t._input&&setTimeout(ki,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},ki=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})),Ze(t))},Oa=(t,{target:e})=>{var n;if(!t._input||t._input===e)return It(t,!0);for(const o of t.options)if(o.contains(e))return E(t,"aria-multiselectable")!=="true"&&((n=t._input)==null||n.focus(),It(t,!1)),$a(t._input,o.value);le&&ki(t)},Ra=(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(),It(t,!l);const d=[...t.options].filter(p=>E(p,"aria-hidden")!=="true"&&p.offsetHeight),u=d.indexOf(i);let h=-1;if(o==="ArrowDown"&&(h=(u+1)%d.length),o==="ArrowUp"&&(h=(~u?u:d.length)-1),~u&&((o==="Home"||o==="PageUp")&&(h=0),(o==="End"||o==="PageDown")&&(h=d.length-1),o==="Enter"))return d[u].click(),e.preventDefault();if(d[h])for(const p of d)p.tabIndex=-1;d[h]&&e.preventDefault(),(n=d[h]||t._input)==null||n.focus(),!d[h]&&o==="ArrowUp"&&setTimeout(()=>{var p;return(p=t._input)==null?void 0:p.setSelectionRange(999,999)})},Ai=(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)E(u,"aria-hidden","true");for(const u of l)E(u,"aria-hidden","false");const d=l.length;clearTimeout(xi),e?.type==="input"&&r!==t._value&&(xi=setTimeout(()=>{const u=`${!d&&t.innerText.trim()||`${n[d===1?"singular":"plural"]}`.replace("%d",`${d}`)}`;!t.hidden&&o?.activeElement===i&&yi(u),t._value=r},1e3)),je&&l.map((u,h)=>E(u,"title",`${h+1}/${d}`))};kt&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return wi(this).getElementById(E(this,"list")||"")}}),_i.define("u-datalist",Ci);const en=T.field.split(" ")[0],Li=T.validation.split(" "),Pa=Li[0],U=(t,e)=>t.getPropertyValue(`--mtds-text-${e}`)?.slice(1,-1)||"";function Ii(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 we?r=l:Be(l)&&!l.hidden?a=l:l.hasAttribute("data-description")?i.push(l):l.classList.contains(Pa)?(c=f(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=re(a);if(e&&f(n,"data-validation")==="form"){c=a.matches(":valid");for(const l of s)f(l,"hidden",c?"":null)}Da(r),Oi(a),Mi(a),f(a,"aria-describedby",i.map(re).join(" ")||null),f(a,"aria-invalid",`${!c}`)}}}function Mi(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function Da(t){const{control:e,list:n}=t||{};if(t&&n&&!t.hasAttribute("data-sr-added")){const o=window.getComputedStyle(t);f(t,"data-sr-added",U(o,"combobox-added")),f(t,"data-sr-empty",U(o,"combobox-empty")),f(t,"data-sr-found",U(o,"combobox-found")),f(t,"data-sr-invalid",U(o,"combobox-invalid")),f(t,"data-sr-of",U(o,"combobox-of")),f(t,"data-sr-remove",U(o,"combobox-remove")),f(t,"data-sr-removed",U(o,"combobox-removed")),f(n,"data-sr-plural",U(o,"datalist-plural")),f(n,"data-sr-singular",U(o,"datalist-singular"))}n&&e&&!n.hasAttribute("popover")&&(f(n,"popover","manual"),f(e,"popovertarget",re(n)))}function Oi(t){const e=t?.nextElementSibling,n=e&&f(e,"data-count");if(e&&n){const o=Number(n)-t.value.length,i=o<0,s=f(e,"aria-live")==="polite",r=window.getComputedStyle(e||t),a=U(r,"count-over"),c=U(r,"count-under");if(s!==i){f(e,"aria-live",i?"polite":"off");for(const l of Li)e.classList.toggle(l,i)}e.textContent=(i?a:c).replace("%d",`${Math.abs(o)}`)}}function Na(t){if(t.target instanceof Ci){const e=t.target,o=e.getRootNode()?.querySelector(`[popovertarget="${e.id}"]`);t.newState==="closed"?at(e,!1):o&&at(e,o,{placement:f(e,"data-position")??"bottom",middleware:[De(),Pe(),Ko({padding:10,apply({availableHeight:i}){e.style.width=`${o.offsetWidth}px`,e.style.maxHeight=`${Math.max(50,i)}px`}})]})}}function Ha(t){Be(t.target)&&(Oi(t.target),Mi(t.target))}function Ba(t){const e=t.target?.closest?.(`.${en}`);t.type==="invalid"&&e&&t.preventDefault(),Ii(document.getElementsByClassName(en),!0)}D(()=>{_t(document.documentElement,en,Ii),C(document,"input",Ha,P),C(document,"invalid,submit",Ba,!0),C(document,"toggle",Na,P)});const Fa=T.fieldset.split(" ")[0],Ua=T.validation.split(" ")[0],Ri="aria-describedby",za="aria-invalid";function qa(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(Ua)?(i=f(s,"data-color")==="success"||!s.clientHeight,o=re(s)):Be(s)&&n.push(s);for(const s of n){const r=f(s,Ri)?.replace(o||"#","");f(s,Ri,`${o||""} ${r||""}`.trim()),f(s,za,`${!i}`)}}})}D(()=>_t(document.documentElement,Fa,qa));const Va=T.logo.split(" ")[0];function Wa([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($("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"}))}}D(()=>_t(document.documentElement,Va,Wa));const nn=T.popover.split(" ")[0],Pi="_mtds-popover-auto";function ja({target:t,newState:e}){if(t instanceof HTMLElement&&t.classList.contains(nn)){const n=e==="closed",o=f(t,"data-overscroll")==="contain",i=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);n?at(t,!1):i&&at(t,i,{placement:f(t,"data-position")||"bottom",middleware:[De(),Pe({padding:10})].concat(o?Ko({padding:10,apply({availableHeight:s}){t.style.maxHeight=`${Math.max(50,s)}px`}}):[])})}}function Ga({target:t,newState:e}){e==="open"&&t instanceof HTMLElement&&t.classList.contains(nn)&&f(t,"popover")!=="manual"&&(t.classList.add(Pi),f(t,"popover","manual"))}function Ya(t){const e=t.target?.closest?.("a,button"),n=e&&f(e,"popovertarget"),o=n?document.getElementById(n):e?.closest(`.${nn}`);for(const i of document.getElementsByClassName(Pi))!i.contains(t.target)&&o!==i&&i.hidePopover();if(o&&e){t.preventDefault();const i=f(e,"popovertargetaction"),s=i==="show"||(i==="hide"?!1:void 0);if(e instanceof HTMLButtonElement&&!i&&o.contains(e))return;o instanceof HTMLElement&&o.isConnected&&o.togglePopover&&o.togglePopover(s)}}D(()=>{C(document,"click",Ya),C(document,"toggle",ja,P),C(document,"beforetoggle",Ga,P)});const Ka=T.table.split(" ")[0],Xa='a,button,label,input,select,textarea,[role="button"]';function Qa(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)f(s,"data-th",n[s.cellIndex]||":empty")}}function Ja({target:t}){if(!(t instanceof Element))return;const n=t.closest("tr")?.querySelector('[data-command="row"]');n&&!t.closest(Xa)&&n.click?.()}D(()=>{_t(document.documentElement,Ka,Qa),C(document,"click",Ja)});const Di=T.toast.split(" ")[0],fe="data-sort";function Za({animationName:t,target:e}){const n=e;if(t===T._toastTimeout&&n.close(),t!==T._toastOpen)return;const o=Number(f(n,"data-timeout"));n.style.setProperty("--mtdsc-toast-timeout",o?`${o}ms`:null),n.hasAttribute(fe)||f(n,fe,`${Date.now()}`),f(n,"tabindex","0"),[...document.querySelectorAll(`.${Di}[open]`)].sort((i,s)=>Number(f(s,fe))-Number(f(i,fe))).reduce((i,s)=>(s.style.translate=`0 ${s===e?0:i}px`,i+s.offsetHeight+5),0)}function tl({target:t,clientX:e,clientY:n}){if(t instanceof HTMLDialogElement&&t.classList.contains(Di)&&f(t,"data-closedby")!=="none"){const o=t.getBoundingClientRect(),i=window.getComputedStyle(t),s=window.getComputedStyle(t,"::after"),r=o.top+Number.parseInt(i.paddingTop,10),a=r+Number.parseInt(s.height,10),c=o.right-Number.parseInt(i.paddingRight,10),l=c-Number.parseInt(s.width,10);r<=n&&n<=a&&l<=e&&e<=c&&t.close()}}D(()=>{C(document,"animationstart",Za),C(document,"click",tl)});const el=`.${T.togglegroup.split(" ")[0]}`;function nl(t){const{key:e,target:n}=t,o=n instanceof HTMLInputElement&&n.closest(el);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()}}D(()=>C(document,"keydown",nl));const Ni="aria-describedby",Hi="Escape",pe="aria-labelledby",ol="--mtds-tooltip-position",il=300,Bi="mtds-tooltip",z=rt?document.getElementById(Bi)||$("div",{class:T._tooltip,id:Bi,popover:"manual"}):null;let tt=null,Fi=Number.NEGATIVE_INFINITY,Ui=0;function on({target:t,type:e,key:n}){if(e==="keydown"&&n!==Hi)return;const o=Fi+il-Date.now();clearTimeout(Ui),Ui=setTimeout(sl,Math.max(o,0),n===Hi?null:t)}function sl(t){if(Fi=Date.now(),!z||t===z)return;z?.isConnected||document.body.append(z);let e=t?.closest?.("[data-tooltip]")||null;if(e===tt)return;const n=e&&f(e,"data-tooltip")||"",o=e&&f(e,"data-tooltip-position")||window.getComputedStyle(e||document.body).getPropertyValue(ol)?.trim()||"top";(!n||n==="false"||n==="true"||o==="none")&&(e=null),e&&(z.textContent=n);const s=tt&&f(tt,pe)===z?.id,r=(e instanceof HTMLElement?e.innerText:e?.textContent)?.trim()||e?.hasAttribute(pe)||e?.hasAttribute("aria-label");tt?.removeAttribute(s?pe:Ni),at(z,!1),tt=e,tt&&f(tt,r?Ni:pe,z?.id),tt?.isConnected&&z.hidePopover(),z.togglePopover(!!e),at(z,e||!1,{placement:o,middleware:[De(),Pe({padding:10})]})}D(()=>{C(document,"blur,focus,mouseout,mouseover",on,P),C(window,"keydown",on,P),C(window,"blur",on,P)});var zi=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",qi;zi&&/^Mac/i.test(((qi=navigator.userAgentData)==null?void 0:qi.platform)||navigator.platform);var rl=":host(:not([hidden])) { display: block }",Vi=typeof HTMLElement>"u"?class{}:HTMLElement;function K(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 Wi=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},ji=(t,...e)=>Wi("add",t,e),Gi=(t,...e)=>Wi("remove",t,e),al=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},ll=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},sn=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))K(o,i,s);return o},Yi={define:(t,e)=>!zi||window.customElements.get(t)||window.customElements.define(t,e)},cl=`${rl}
|
|
323
|
+
::slotted(u-option[hidden]) { display: none !important }`,Ei,Si=0,Ir=je||le,Ti="click,focusout,input,keydown,mousedown,mouseup",Ci="focus,focusin,blur,focusout",ue={singular:"%d hit",plural:"%d hits"},$i=class extends bi{constructor(){super(),this._texts=yr({},ue),this._value="",Tr(this,Lr)}static get observedAttributes(){return["id",...Object.keys(ue).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=_i(this),E(this,"role","listbox"),E(this,"tabindex","-1"),At(this._root,"focusin",this),At(this._root,"focus",this,!0),Ge(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){ce(this._root||this,"focus",this,!0),ce(this._root||this,"focusin",this),Ge(this,!1),Ze(this),this._root=void 0}attributeChangedCallback(t,e,n){const o=t?.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(ue[o])this._texts[o]=n||ue[o];else if(this._root){this._input&&tn(this,this._input);for(const s of this._root.querySelectorAll(i))tn(this,s)}}handleEvent(t){const{target:e,type:n}=t;t.defaultPrevented||(n==="click"&&Rr(this,t),(n==="focus"||n==="focusin")&&Mr(this,t),(n==="blur"||n==="focusout")&&Or(this,t),n==="keydown"&&Pr(this,t),n==="mousedown"&&this.contains(e)&&Qe(t),(n==="mutation"||n==="input")&&(clearTimeout(Si),Si=setTimeout(Li,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},ki=t=>t?.disabled||t?.readOnly||!1,It=(t,e)=>{var n,o,i;if(t.hidden!==e)return;t.hidden=ki(t?._input)||!e,(n=Ge(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&&tn(t,t._input,e),s&&E(t,"popover","manual"),s&&t.togglePopover(e),e&&Li(t)},Ze=t=>{t._input&&(ce(t._input||t,Ci,t),ce(t._root||t,Ti,t),It(t,!1),t._input=void 0)},tn=(t,e,n=!1)=>{t.popover&&E(e,"popovertarget",Ye(t)),At(e,Ci,t,!0),E(e,"aria-autocomplete","list"),E(e,"aria-controls",Ye(t)),E(e,"aria-expanded",`${!Ir||n}`),E(e,"autocomplete","off"),E(e,"role",ki(e)?null:"combobox")},Mr=(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&&Ze(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),E(t,xr,Ye((n=t._input.labels)==null?void 0:n[0])),At(t._root||t,Ti,t),It(t,E(t._input,"inputmode")!=="none"),xi())},Or=(t,e)=>{!le&&!Qe()&&t._input&&setTimeout(Ai,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},Ai=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})),Ze(t))},Rr=(t,{target:e})=>{var n;if(!t._input||t._input===e)return It(t,!0);for(const o of t.options)if(o.contains(e))return E(t,"aria-multiselectable")!=="true"&&((n=t._input)==null||n.focus(),It(t,!1)),kr(t._input,o.value);le&&Ai(t)},Pr=(t,e)=>{var n;const{key:o,target:i,altKey:s,ctrlKey:a,shiftKey:r,metaKey:c}=e,l=o==="Escape"||o==="Esc";if(s||a||c||r||o==="Tab")return;l&&!t.hidden&&e?.preventDefault(),It(t,!l);const d=[...t.options].filter(p=>E(p,"aria-hidden")!=="true"&&p.offsetHeight),u=d.indexOf(i);let m=-1;if(o==="ArrowDown"&&(m=(u+1)%d.length),o==="ArrowUp"&&(m=(~u?u:d.length)-1),~u&&((o==="Home"||o==="PageUp")&&(m=0),(o==="End"||o==="PageDown")&&(m=d.length-1),o==="Enter"))return d[u].click(),e.preventDefault();if(d[m])for(const p of d)p.tabIndex=-1;d[m]&&e.preventDefault(),(n=d[m]||t._input)==null||n.focus(),!d[m]&&o==="ArrowUp"&&setTimeout(()=>{var p;return(p=t._input)==null?void 0:p.setSelectionRange(999,999)})},Li=(t,e)=>{const{_texts:n,_root:o,_input:i,options:s}=t,a=i?.value.toLowerCase().trim()||"",r=!t.hasAttribute("data-nofilter"),c=[],l=[];for(const u of s)(u.disabled||u.hidden||r&&!u.label.toLowerCase().includes(a)?c:l).push(u);for(const u of c)E(u,"aria-hidden","true");for(const u of l)E(u,"aria-hidden","false");const d=l.length;clearTimeout(Ei),e?.type==="input"&&a!==t._value&&(Ei=setTimeout(()=>{const u=`${!d&&t.innerText.trim()||`${n[d===1?"singular":"plural"]}`.replace("%d",`${d}`)}`;!t.hidden&&o?.activeElement===i&&xi(u),t._value=a},1e3)),je&&l.map((u,m)=>E(u,"title",`${m+1}/${d}`))};kt&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return _i(this).getElementById(E(this,"list")||"")}}),yi.define("u-datalist",$i);const en=T.field.split(" ")[0],Ii=T.validation.split(" "),Dr=Ii[0],U=(t,e)=>t.getPropertyValue(`--mtds-text-${e}`)?.slice(1,-1)||"";function Mi(t,e){for(const n of t)if(n.isConnected){const o=[],i=[],s=[];let a=null,r=null,c=!0;for(const l of n.getElementsByTagName("*"))l instanceof HTMLLabelElement?o.push(l):l instanceof we?a=l:Be(l)&&!l.hidden?r=l:l.hasAttribute("data-description")?i.push(l):l.classList.contains(Dr)?(c=f(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(r){for(const l of o)l.htmlFor=ae(r);if(e&&f(n,"data-validation")==="form"){c=r.matches(":valid");for(const l of s)f(l,"hidden",c?"":null)}Nr(a),Ri(r),Oi(r),f(r,"aria-describedby",i.map(ae).join(" ")||null),f(r,"aria-invalid",`${!c}`)}}}function Oi(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function Nr(t){const{control:e,list:n}=t||{};if(t&&n&&!t.hasAttribute("data-sr-added")){const o=window.getComputedStyle(t);f(t,"data-sr-added",U(o,"combobox-added")),f(t,"data-sr-empty",U(o,"combobox-empty")),f(t,"data-sr-found",U(o,"combobox-found")),f(t,"data-sr-invalid",U(o,"combobox-invalid")),f(t,"data-sr-of",U(o,"combobox-of")),f(t,"data-sr-remove",U(o,"combobox-remove")),f(t,"data-sr-removed",U(o,"combobox-removed")),f(n,"data-sr-plural",U(o,"datalist-plural")),f(n,"data-sr-singular",U(o,"datalist-singular"))}n&&e&&!n.hasAttribute("popover")&&(f(n,"popover","manual"),f(e,"popovertarget",ae(n)))}function Ri(t){const e=t?.nextElementSibling,n=e&&f(e,"data-count");if(e&&n){const o=Number(n)-t.value.length,i=o<0,s=f(e,"aria-live")==="polite",a=window.getComputedStyle(e||t),r=U(a,"count-over"),c=U(a,"count-under");if(s!==i){f(e,"aria-live",i?"polite":"off");for(const l of Ii)e.classList.toggle(l,i)}e.textContent=(i?r:c).replace("%d",`${Math.abs(o)}`)}}function Hr(t){if(t.target instanceof $i){const e=t.target,o=e.getRootNode()?.querySelector(`[popovertarget="${e.id}"]`);t.newState==="closed"?rt(e,!1):o&&rt(e,o,{placement:f(e,"data-position")??"bottom",middleware:[De(),Pe(),Xo({padding:10,apply({availableHeight:i}){e.style.width=`${o.offsetWidth}px`,e.style.maxHeight=`${Math.max(50,i)}px`}})]})}}function Br(t){Be(t.target)&&(Ri(t.target),Oi(t.target))}function Fr(t){const e=t.target?.closest?.(`.${en}`);t.type==="invalid"&&e&&t.preventDefault(),Mi(document.getElementsByClassName(en),!0)}D(()=>{_t(document.documentElement,en,Mi),C(document,"input",Br,P),C(document,"invalid,submit",Fr,!0),C(document,"toggle",Hr,P)});const Ur=T.fieldset.split(" ")[0],zr=T.validation.split(" ")[0],Pi="aria-describedby",qr="aria-invalid";function Vr(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(zr)?(i=f(s,"data-color")==="success"||!s.clientHeight,o=ae(s)):Be(s)&&n.push(s);for(const s of n){const a=f(s,Pi)?.replace(o||"#","");f(s,Pi,`${o||""} ${a||""}`.trim()),f(s,qr,`${!i}`)}}})}D(()=>_t(document.documentElement,Ur,Vr));const Wr=T.logo.split(" ")[0];function jr([t]){if(t?.isConnected&&t?.firstElementChild instanceof SVGSVGElement){for(const r of document.head.querySelectorAll("link[rel~='icon']"))r.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"),a=e.outerHTML.replace(/\n+/g," ").replace(/(fill|width|height|xmlns)="[^"]+"/gi,"").replace("<svg",`<svg width="40" height="40" fill="${i}"`);document.head.appendChild($("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)">${a}</g></svg>`)}`,rel:"icon"}))}}D(()=>_t(document.documentElement,Wr,jr));const nn=T.popover.split(" ")[0],Di="_mtds-popover-auto";function Gr({target:t,newState:e}){if(t instanceof HTMLElement&&t.classList.contains(nn)){const n=e==="closed",o=f(t,"data-overscroll")==="contain",i=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);n?rt(t,!1):i&&rt(t,i,{placement:f(t,"data-position")||"bottom",middleware:[De(),Pe({padding:10})].concat(o?Xo({padding:10,apply({availableHeight:s}){t.style.maxHeight=`${Math.max(50,s)}px`}}):[])})}}function Yr({target:t,newState:e}){e==="open"&&t instanceof HTMLElement&&t.classList.contains(nn)&&f(t,"popover")!=="manual"&&(t.classList.add(Di),f(t,"popover","manual"))}function Kr(t){const e=t.target?.closest?.("a,button"),n=e&&f(e,"popovertarget"),o=n?document.getElementById(n):e?.closest(`.${nn}`);for(const i of document.getElementsByClassName(Di))!i.contains(t.target)&&o!==i&&i.hidePopover();if(o&&e){const i=f(e,"popovertargetaction"),s=i==="show"||(i==="hide"?!1:void 0);if(e instanceof HTMLButtonElement&&!i&&o.contains(e))return;o instanceof HTMLElement&&o.isConnected&&o.togglePopover&&(t.preventDefault(),o.togglePopover(s))}}D(()=>{C(document,"click",Kr),C(document,"toggle",Gr,P),C(document,"beforetoggle",Yr,P)});const Xr=T.table.split(" ")[0],Qr='a,button,label,input,select,textarea,[role="button"]';function Jr(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)f(s,"data-th",n[s.cellIndex]||":empty")}}function Zr({target:t}){if(!(t instanceof Element))return;const n=t.closest("tr")?.querySelector('[data-command="row"]');n&&!t.closest(Qr)&&n.click?.()}D(()=>{_t(document.documentElement,Xr,Jr),C(document,"click",Zr)});const Ni=T.toast.split(" ")[0],fe="data-sort";function tl({animationName:t,target:e}){const n=e;if(t===T._toastTimeout&&n.close(),t!==T._toastOpen)return;const o=Number(f(n,"data-timeout"));n.style.setProperty("--mtdsc-toast-timeout",o?`${o}ms`:null),n.hasAttribute(fe)||f(n,fe,`${Date.now()}`),f(n,"tabindex","0"),[...document.querySelectorAll(`.${Ni}[open]`)].sort((i,s)=>Number(f(s,fe))-Number(f(i,fe))).reduce((i,s)=>(s.style.translate=`0 ${s===e?0:i}px`,i+s.offsetHeight+5),0)}function el({target:t,clientX:e,clientY:n}){if(t instanceof HTMLDialogElement&&t.classList.contains(Ni)&&f(t,"data-closedby")!=="none"){const o=t.getBoundingClientRect(),i=window.getComputedStyle(t),s=window.getComputedStyle(t,"::after"),a=o.top+Number.parseInt(i.paddingTop,10),r=a+Number.parseInt(s.height,10),c=o.right-Number.parseInt(i.paddingRight,10),l=c-Number.parseInt(s.width,10);a<=n&&n<=r&&l<=e&&e<=c&&t.close()}}D(()=>{C(document,"animationstart",tl),C(document,"click",el)});const nl=`.${T.togglegroup.split(" ")[0]}`;function ol(t){const{key:e,target:n}=t,o=n instanceof HTMLInputElement&&n.closest(nl);if(o&&(e==="Enter"&&n.click(),e?.startsWith("Arrow"))){t.preventDefault();const i=o.getElementsByTagName("input"),s=[...i].indexOf(n),a=e.match(/Arrow(Right|Down)/)?1:-1;i[(i.length+s+a)%i.length]?.focus()}}D(()=>C(document,"keydown",ol));const Hi="aria-describedby",Bi="Escape",pe="aria-labelledby",il="--mtds-tooltip-position",sl=300,Fi="mtds-tooltip",z=at?document.getElementById(Fi)||$("div",{class:T._tooltip,id:Fi,popover:"manual"}):null;let tt=null,Ui=Number.NEGATIVE_INFINITY,zi=0;function on({target:t,type:e,key:n}){if(e==="keydown"&&n!==Bi)return;const o=Ui+sl-Date.now();clearTimeout(zi),zi=setTimeout(al,Math.max(o,0),n===Bi?null:t)}function al(t){if(Ui=Date.now(),!z||t===z)return;z?.isConnected||document.body.append(z);let e=t?.closest?.("[data-tooltip]")||null;if(e===tt)return;const n=e&&f(e,"data-tooltip")||"",o=e&&f(e,"data-tooltip-position")||window.getComputedStyle(e||document.body).getPropertyValue(il)?.trim()||"top";(!n||n==="false"||n==="true"||o==="none")&&(e=null),e&&(z.textContent=n);const s=tt&&f(tt,pe)===z?.id,a=(e instanceof HTMLElement?e.innerText:e?.textContent)?.trim()||e?.hasAttribute(pe)||e?.hasAttribute("aria-label");tt?.removeAttribute(s?pe:Hi),rt(z,!1),tt=e,tt&&f(tt,a?Hi:pe,z?.id),tt?.isConnected&&z.hidePopover(),z.togglePopover(!!e),rt(z,e||!1,{placement:o,middleware:[De(),Pe({padding:10})]})}D(()=>{C(document,"blur,focus,mouseout,mouseover",on,P),C(window,"keydown",on,P),C(window,"blur",on,P)});var qi=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Vi;qi&&/^Mac/i.test(((Vi=navigator.userAgentData)==null?void 0:Vi.platform)||navigator.platform);var rl=":host(:not([hidden])) { display: block }",Wi=typeof HTMLElement>"u"?class{}:HTMLElement;function K(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 ji=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Gi=(t,...e)=>ji("add",t,e),Yi=(t,...e)=>ji("remove",t,e),ll=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},cl=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},sn=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))K(o,i,s);return o},Ki={define:(t,e)=>!qi||window.customElements.get(t)||window.customElements.define(t,e)},dl=`${rl}
|
|
318
324
|
::slotted(u-summary) { cursor: pointer; display: block }
|
|
319
325
|
::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 }
|
|
320
326
|
::slotted(u-summary[aria-expanded="true"])::before { rotate: 90deg }
|
|
321
|
-
:host > [part="details-content"]:not([hidden=""]) { display: block }`,
|
|
327
|
+
:host > [part="details-content"]:not([hidden=""]) { display: block }`,ul=class extends Wi{constructor(){super(),this._content=null,this.shadowRoot||this.attachShadow({mode:"open"}).append(sn("slot",null,{name:"summary"}),sn("slot",null,{part:"details-content"}),sn("style",dl))}static get observedAttributes(){return["open"]}connectedCallback(){var t;this._content=(t=this.shadowRoot)==null?void 0:t.children[1],K(this,"role","group"),Gi(this._content,"beforematch",this),Gi(this,"click,keydown",this),this.attributeChangedCallback()}disconnectedCallback(){this._content&&Yi(this._content,"beforematch",this),Yi(this,"click,keydown",this),this._content=null}attributeChangedCallback(t,e,n){const o="onbeforematch"in this?"until-found":!0,i=this.open;for(const s of this.children)s.nodeName==="U-SUMMARY"&&K(s,"aria-expanded",`${i}`);if(this._content&&(K(this._content,"aria-hidden",`${!i}`),K(this._content,"tabindex",i?null:"-1"),this._content.hidden=i?!1:o),i&&this.name){const s=cl(this).querySelectorAll(`${this.nodeName}[name="${this.name}"]`);for(const a of s)a!==this&&(a.open=!1)}t==="open"&&e===null!=(n===null)&&this.dispatchEvent(new Event("toggle"))}handleEvent(t){const e=this.querySelector(":scope > u-summary"),n=e?.contains(t.target);t.defaultPrevented||(t.type==="beforematch"&&(this.open=!0),n&&t.type==="keydown"&&ll(t),n&&t.type==="click"&&(this.open=!this.open))}get open(){return this.hasAttribute("open")}set open(t){K(this,"open",t?"":null)}get name(){return K(this,"name")||""}set name(t){K(this,"name",t)}},fl=class extends Wi{connectedCallback(){K(this,"role","button"),this.slot="summary",this.tabIndex=0}};Ki.define("u-details",ul),Ki.define("u-summary",fl);var me=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Xi=me&&/firefox/i.test(navigator.userAgent),pl=me&&/iPad|iPhone|iPod/.test(navigator.userAgent),Qi;me&&/^Mac/i.test(((Qi=navigator.userAgentData)==null?void 0:Qi.platform)||navigator.platform);var ml=typeof HTMLElement>"u"?class{}:HTMLElement;function I(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 hl=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},gl=0,vl=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++gl).toString(32)}`),t.id):"",Ji=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))I(o,i,s);return o},bl={define:(t,e)=>!me||window.customElements.get(t)||window.customElements.define(t,e)},wl=t=>{var e;const n=I(t,"aria-label")||"";return[...(((e=I(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(i=>document.getElementById(i)),...Array.from(t.labels||[])].reduce((i,s)=>{var a;return i||((a=s?.innerText)==null?void 0:a.trim())||""},n)},_l=`:host(:not([hidden])) { box-sizing: border-box; border: 1px solid; display: inline-block; height: .5em; width: 10em; overflow: hidden }
|
|
322
328
|
:host::before { content: ''; display: block; height: 100%; background: currentColor; width: var(--percentage, 0%); transition: width .2s }
|
|
323
329
|
:host(:not([value])) { background: linear-gradient(90deg,currentColor 25%, transparent 50%, currentColor 75%) 50%/400% }
|
|
324
330
|
@media (prefers-reduced-motion: no-preference) { :host { animation: indeterminate 2s linear infinite } }
|
|
325
|
-
@keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`,
|
|
326
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtY29tYm9ib3gvZGlzdC91LWNvbWJvYm94LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCIuLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2NvcmUvZGlzdC9mbG9hdGluZy11aS5jb3JlLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5kb20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS9kb20vZGlzdC9mbG9hdGluZy11aS5kb20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL2Nsc3gvZGlzdC9jbHN4Lm1qcyIsIi4uL2Rlc2lnbnN5c3RlbS91dGlscy50cyIsIi4uL2Rlc2lnbnN5c3RlbS9hbmFseXRpY3MvYW5hbHl0aWNzLnRzIiwiLi4vZGVzaWduc3lzdGVtL2FwcC9hcHAtdG9nZ2xlLmpzIiwiLi4vZGVzaWduc3lzdGVtL2FwcC9hcHAtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vcGFnaW5hdGlvbi9wYWdpbmF0aW9uLWhlbHBlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b2FzdC90b2FzdC1oZWxwZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYnMtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vY2hhcnQvY2hhcnQuY3NzP3JhdyIsIi4uL2Rlc2lnbnN5c3RlbS9jaGFydC9jaGFydC1heGlzLnRzIiwiLi4vZGVzaWduc3lzdGVtL2NoYXJ0L2NoYXJ0LWJhcnMudHMiLCIuLi9kZXNpZ25zeXN0ZW0vY2hhcnQvY2hhcnQtbGluZXMudHMiLCIuLi9kZXNpZ25zeXN0ZW0vY2hhcnQvY2hhcnQtcGllcy50cyIsIi4uL2Rlc2lnbnN5c3RlbS9jaGFydC9jaGFydC1lbGVtZW50LnRzIiwiLi4vZGVzaWduc3lzdGVtL2RpYWxvZy9kaWFsb2ctb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZXJyb3JzdW1tYXJ5L2Vycm9yc3VtbWFyeS1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRhdGFsaXN0L2Rpc3QvdS1kYXRhbGlzdC5qcyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZC9maWVsZC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZHNldC9maWVsZHNldC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9sb2dvL2xvZ28tb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vcG9wb3Zlci9wb3BvdmVyLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RhYmxlL3RhYmxlLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RvYXN0L3RvYXN0LW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RvZ2dsZWdyb3VwL3RvZ2dsZWdyb3VwLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3Rvb2x0aXAvdG9vbHRpcC1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRldGFpbHMvZGlzdC91LWRldGFpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1wcm9ncmVzcy9kaXN0L3UtcHJvZ3Jlc3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/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+IHtcbiAgICAgIGxldCBbZmlyc3RFbnRyeV0gPSBfcmVmO1xuICAgICAgaWYgKGZpcnN0RW50cnkgJiYgZmlyc3RFbnRyeS50YXJnZXQgPT09IHJlZmVyZW5jZUVsICYmIHJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIC8vIFByZXZlbnQgdXBkYXRlIGxvb3BzIHdoZW4gdXNpbmcgdGhlIGBzaXplYCBtaWRkbGV3YXJlLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzE3NDBcbiAgICAgICAgcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmVvYnNlcnZlRnJhbWUpO1xuICAgICAgICByZW9ic2VydmVGcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdmFyIF9yZXNpemVPYnNlcnZlcjtcbiAgICAgICAgICAoX3Jlc2l6ZU9ic2VydmVyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoZmxvYXRpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIGlmIChyZWZlcmVuY2VFbCAmJiAhYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUocmVmZXJlbmNlRWwpO1xuICAgIH1cbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgfVxuICBsZXQgZnJhbWVJZDtcbiAgbGV0IHByZXZSZWZSZWN0ID0gYW5pbWF0aW9uRnJhbWUgPyBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKSA6IG51bGw7XG4gIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgIGZyYW1lTG9vcCgpO1xuICB9XG4gIGZ1bmN0aW9uIGZyYW1lTG9vcCgpIHtcbiAgICBjb25zdCBuZXh0UmVmUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2UpO1xuICAgIGlmIChwcmV2UmVmUmVjdCAmJiAhcmVjdHNBcmVFcXVhbChwcmV2UmVmUmVjdCwgbmV4dFJlZlJlY3QpKSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gICAgcHJldlJlZlJlY3QgPSBuZXh0UmVmUmVjdDtcbiAgICBmcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lTG9vcCk7XG4gIH1cbiAgdXBkYXRlKCk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgdmFyIF9yZXNpemVPYnNlcnZlcjI7XG4gICAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlKTtcbiAgICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gICAgfSk7XG4gICAgY2xlYW51cElvID09IG51bGwgfHwgY2xlYW51cElvKCk7XG4gICAgKF9yZXNpemVPYnNlcnZlcjIgPSByZXNpemVPYnNlcnZlcikgPT0gbnVsbCB8fCBfcmVzaXplT2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTtcbiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgaWYgKGFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZUlkKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5jb25zdCBkZXRlY3RPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93JDE7XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IG9mZnNldCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGF1dG9QbGFjZW1lbnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gc2hpZnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmbGlwJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IOKAlFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IHNpemUkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBoaWRlJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gYXJyb3ckMTtcblxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gaW5saW5lJDE7XG5cbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBsaW1pdFNoaWZ0JDE7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSAocmVmZXJlbmNlLCBmbG9hdGluZywgb3B0aW9ucykgPT4ge1xuICAvLyBUaGlzIGNhY2hlcyB0aGUgZXhwZW5zaXZlIGBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnNgIGZ1bmN0aW9uIHNvIHRoYXRcbiAgLy8gbXVsdGlwbGUgbGlmZWN5Y2xlIHJlc2V0cyByZS11c2UgdGhlIHNhbWUgcmVzdWx0LiBJdCBvbmx5IGxpdmVzIGZvciBhXG4gIC8vIHNpbmdsZSBjYWxsLiBJZiBvdGhlciBmdW5jdGlvbnMgYmVjb21lIGV4cGVuc2l2ZSwgd2UgY2FuIGFkZCB0aGVtIGFzIHdlbGwuXG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcCgpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0ge1xuICAgIHBsYXRmb3JtLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgY29uc3QgcGxhdGZvcm1XaXRoQ2FjaGUgPSB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucy5wbGF0Zm9ybSxcbiAgICBfYzogY2FjaGVcbiAgfTtcbiAgcmV0dXJuIGNvbXB1dGVQb3NpdGlvbiQxKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgIHBsYXRmb3JtOiBwbGF0Zm9ybVdpdGhDYWNoZVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgcGxhdGZvcm0sIHNoaWZ0LCBzaXplIH07XG4iLCJmdW5jdGlvbiByKGUpe3ZhciB0LGYsbj1cIlwiO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZSluKz1lO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIGUpaWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIG89ZS5sZW5ndGg7Zm9yKHQ9MDt0PG87dCsrKWVbdF0mJihmPXIoZVt0XSkpJiYobiYmKG4rPVwiIFwiKSxuKz1mKX1lbHNlIGZvcihmIGluIGUpZVtmXSYmKG4mJihuKz1cIiBcIiksbis9Zik7cmV0dXJuIG59ZXhwb3J0IGZ1bmN0aW9uIGNsc3goKXtmb3IodmFyIGUsdCxmPTAsbj1cIlwiLG89YXJndW1lbnRzLmxlbmd0aDtmPG87ZisrKShlPWFyZ3VtZW50c1tmXSkmJih0PXIoZSkpJiYobiYmKG4rPVwiIFwiKSxuKz10KTtyZXR1cm4gbn1leHBvcnQgZGVmYXVsdCBjbHN4OyIsImltcG9ydCB7IGF1dG9VcGRhdGUsIGNvbXB1dGVQb3NpdGlvbiB9IGZyb20gXCJAZmxvYXRpbmctdWkvZG9tXCI7XG5pbXBvcnQgY2xzeCBmcm9tIFwiY2xzeFwiO1xuXG5leHBvcnQgY29uc3QgUVVJQ0tfRVZFTlQgPSB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IHRydWUgfTtcbmV4cG9ydCBjb25zdCBJU19CUk9XU0VSID1cblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCI7XG5cbi8vIFRPRE86IERvY3VtZW50YXRpb24gZm9yIHByZXR0eU51bWJlclxubGV0IElOVExfTlVNOiBJbnRsLk51bWJlckZvcm1hdCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwcmV0dHlOdW1iZXIobnVtYmVyOiBudW1iZXIgfCBzdHJpbmcpIHtcblx0aWYgKCFJTlRMX05VTSlcblx0XHRJTlRMX05VTSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcblx0XHRcdChJU19CUk9XU0VSICYmIGF0dHIoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBcImxhbmdcIikpIHx8IFwibm9cIixcblx0XHQpO1xuXHRyZXR1cm4gSU5UTF9OVU0uZm9ybWF0KE51bWJlcihudW1iZXIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlPFQgZXh0ZW5kcyB1bmtub3duW10+KFxuXHRjYWxsYmFjazogKC4uLmFyZ3M6IFQpID0+IHZvaWQsXG5cdGRlbGF5OiBudW1iZXIsXG4pIHtcblx0bGV0IHRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcblxuXHRyZXR1cm4gKC4uLmFyZ3M6IFQpID0+IHtcblx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRcdHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBjYWxsYmFjayguLi5hcmdzKSwgZGVsYXkpO1xuXHR9O1xufVxuXG4vKipcbiAqIGF0dHJcbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgZ2V0LCBzZXQgYW5kIHJlbW92ZSBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gZWwgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gbmFtZSBUaGUgYXR0cmlidXRlIG5hbWUgdG8gZ2V0LCBzZXQgb3IgcmVtb3ZlLCBvciBhIG9iamVjdCB0byBzZXQgbXVsdGlwbGUgYXR0cmlidXRlc1xuICogQHBhcmFtIHZhbHVlIEEgdmFsaWQgYXR0cmlidXRlIHZhbHVlIG9yIG51bGwgdG8gcmVtb3ZlIGF0dHJpYnV0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0cihcblx0ZWw6IEVsZW1lbnQsXG5cdG5hbWU6IHN0cmluZyxcblx0dmFsdWU/OiBzdHJpbmcgfCBudWxsLFxuKTogc3RyaW5nIHwgbnVsbCB7XG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpID8/IG51bGw7IC8vIEZhbGxiYWNrIHRvIG51bGwgb25seSBpZiBlbCBpcyB1bmRlZmluZWRcblx0aWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG5cdHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIHVzZUlkXG4gKiBAcmV0dXJuIEEgZ2VuZXJhdGVkIHVuaXF1ZSBJRFxuICovXG5sZXQgaWQgPSAwO1xuY29uc3QgVVVJRCA9IGAke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgNSl9YDtcbmV4cG9ydCBmdW5jdGlvbiB1c2VJZChlbDogRWxlbWVudCkge1xuXHRpZiAoIWVsLmlkKSBlbC5pZCA9IGAke1VVSUR9JHsrK2lkfWA7XG5cdHJldHVybiBlbC5pZDtcbn1cblxuLy8gSW50ZXJuYWwgaGVscGVyIGZvciBvbiAvIG9mZlxuY29uc3QgZXZlbnRzID0gKFxuXHRhY3Rpb246IFwiYWRkXCIgfCBcInJlbW92ZVwiLFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHRbLi4ucmVzdF06IFBhcmFtZXRlcnM8dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI+LCAvLyBTcHJlYXQgdG8gbWFrZSBhIGNvcHkgb2YgdGhlIGFycmF5XG4pOiB2b2lkID0+IHtcblx0Zm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG5cdFx0cmVzdFswXSA9IHR5cGU7XG5cdFx0ZWxlbWVudFtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdKC4uLnJlc3QpO1xuXHR9XG59O1xuXG4vKipcbiAqIG9uXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9uID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiB7XG5cdGlmIChVTkJJTkQgJiYgKGVsZW1lbnQgPT09IHdpbmRvdyB8fCBlbGVtZW50ID09PSBkb2N1bWVudCkpXG5cdFx0VU5CSU5ELnB1c2goKCkgPT4gb2ZmKGVsZW1lbnQsIC4uLnJlc3QpKTtcblx0ZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xufTtcblxuLyoqXG4gKiBvZmZcbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIHR5cGVzIEEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBldmVudCB0eXBlc1xuICogQHBhcmFtIGxpc3RlbmVyIEFuIGV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uIG9yIGxpc3RlbmVyIG9iamVjdFxuICovXG5leHBvcnQgY29uc3Qgb2ZmID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIFdpbmRvdyB7XG5cdFx0X210ZHNVbmJpbmRFdmVudHM/OiBNYXA8c3RyaW5nLCBBcnJheTwoKSA9PiB2b2lkPj47XG5cdH1cbn1cblxuLyoqXG4gKiBvbkxvYWRlZFxuICogQGRlc2NyaXB0aW9uIFJ1bnMgYSBjYWxsYmFjayB3aGVuIHdpbmRvdyBpcyBsb2FkZWQgaW4gYnJvd3NlciwgYW5kIGVuc3VyZXMgZXZlbnRzIGFyZSB1bmJvdW5kIGlmIGhvdCByZWxvYWRpbmdcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gdGhlIHBhZ2UgaXMgcmVhZHlcbiAqL1xubGV0IFVOQklORDogQXJyYXk8KCkgPT4gdm9pZD4gfCBudWxsID0gbnVsbDtcbmV4cG9ydCBjb25zdCBvbkxvYWRlZCA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuXHRpZiAoIUlTX0JST1dTRVIgfHwgIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHJldHVybjsgLy8gU2tpcCBpZiBub3QgaW4gYnJvd3NlciBlbnZpcm9ubWVudFxuXHRpZiAoIXdpbmRvdy5fbXRkc1VuYmluZEV2ZW50cykgd2luZG93Ll9tdGRzVW5iaW5kRXZlbnRzID0gbmV3IE1hcCgpO1xuXG5cdGNvbnN0IHJ1biA9ICgpID0+XG5cdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRcdGNvbnN0IGtleSA9IFN0cmluZyhjYWxsYmFjaykucmVwbGFjZSgvKFxcbnxcXHMpL2csIFwiXCIpO1xuXHRcdFx0d2luZG93Ll9tdGRzVW5iaW5kRXZlbnRzPy5nZXQoa2V5KT8ubWFwKCh1bmJpbmQpID0+IHVuYmluZCgpKTsgLy8gVW5iaW5kIHByZXZpb3VzIGV2ZW50c1xuXHRcdFx0VU5CSU5EID0gW107IC8vIFByZXBhcmUgdG8gbGlzdGVuIGZvciBuZXdseSBib3VuZCBldmVudHNcblx0XHRcdGNhbGxiYWNrKCk7IC8vIFJ1biBiaW5kaW5nXG5cdFx0XHR3aW5kb3cuX210ZHNVbmJpbmRFdmVudHM/LnNldChrZXksIFVOQklORD8uc2xpY2UoMCkpOyAvLyBTdG9yZSBmb3IgbGF0ZXIgdW5iaW5kaW5nXG5cdFx0XHRVTkJJTkQgPSBudWxsOyAvLyBTdG9wIGxpc3RlbmluZyBmb3IgbmV3bHkgYm91bmQgZXZlbnRzXG5cdFx0fSk7XG5cblx0aWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikgcnVuKCk7XG5cdGVsc2Ugb24od2luZG93LCBcImxvYWRcIiwgcnVuKTtcbn07XG5cbmNvbnN0IEFOQ0hPUkVEID0gbmV3IFdlYWtNYXA8RWxlbWVudCwgUmV0dXJuVHlwZTx0eXBlb2YgYXV0b1VwZGF0ZT4+KCk7XG5leHBvcnQgZnVuY3Rpb24gYW5jaG9yUG9zaXRpb24oXG5cdHRhcmdldDogSFRNTEVsZW1lbnQsXG5cdGFuY2hvcjogZmFsc2UgfCBFbGVtZW50LFxuXHRvcHRpb25zPzogUGFyYW1ldGVyczx0eXBlb2YgY29tcHV0ZVBvc2l0aW9uPlsyXSxcbikge1xuXHRBTkNIT1JFRC5nZXQodGFyZ2V0KT8uKCk7IC8vIFVuYmluZCBwcmV2aW91cyBhbmNob3IgcG9zaXRpb25cblx0QU5DSE9SRUQuZGVsZXRlKHRhcmdldCk7XG5cblx0aWYgKGFuY2hvcilcblx0XHRBTkNIT1JFRC5zZXQoXG5cdFx0XHR0YXJnZXQsXG5cdFx0XHRhdXRvVXBkYXRlKGFuY2hvciwgdGFyZ2V0LCAoKSA9PiB7XG5cdFx0XHRcdGlmICghdGFyZ2V0LmlzQ29ubmVjdGVkIHx8ICFhbmNob3IuaXNDb25uZWN0ZWQgfHwgdGFyZ2V0LmhpZGRlbilcblx0XHRcdFx0XHRyZXR1cm4gYW5jaG9yUG9zaXRpb24odGFyZ2V0LCBmYWxzZSk7XG5cdFx0XHRcdGNvbXB1dGVQb3NpdGlvbihhbmNob3IsIHRhcmdldCwgb3B0aW9ucykudGhlbigoeyB4LCB5IH0pID0+IHtcblx0XHRcdFx0XHR0YXJnZXQuc3R5bGUubGVmdCA9IGAke3h9cHhgO1xuXHRcdFx0XHRcdHRhcmdldC5zdHlsZS50b3AgPSBgJHt5fXB4YDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KSxcblx0XHQpO1xufVxuXG4vKipcbiAqIFNwZWVkIHVwIE11dGF0aW9uT2JzZXJ2ZXIgYnkgZGVib3VuY2luZyBhbmQgb25seSBydW5uaW5nIHdoZW4gcGFnZSBpcyB2aXNpYmxlXG4gKiBAcmV0dXJuIG5ldyBNdXRhaW9uT2JzZXJ2ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2s6IE11dGF0aW9uQ2FsbGJhY2spIHtcblx0bGV0IHF1ZXVlID0gMDtcblxuXHRjb25zdCBvbkZyYW1lID0gKCkgPT4gc2V0VGltZW91dChvblRpbWVyLCAyMDApOyAvLyBVc2UgYm90aCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgYW5kIHNldFRpbWVvdXQgdG8gZGVib3VuY2UgYW5kIG9ubHkgcnVuIHdoZW4gdmlzaWJsZVxuXHRjb25zdCBvblRpbWVyID0gKCkgPT4ge1xuXHRcdGNhbGxiYWNrKFtdLCBvYnNlcnZlcik7XG5cdFx0b2JzZXJ2ZXIudGFrZVJlY29yZHMoKTsgLy8gQ2xlYXIgcmVjb3JkcyB0byBhdm9pZCBydW5uaW5nIGNhbGxiYWNrIG11bHRpcGxlIHRpbWVzXG5cdFx0cXVldWUgPSAwO1xuXHR9O1xuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcblx0XHRpZiAoIXF1ZXVlKSBxdWV1ZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShvbkZyYW1lKTtcblx0fSk7XG5cblx0cmV0dXJuIG9ic2VydmVyO1xufVxuXG4vKipcbiAqIG9uTXV0YXRpb25cbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgb2JzZXJ2ZSBtdXRhdGlvbnMgb24gYSBzcGVjaWZpYyBjbGFzcyBuYW1lXG4gKiBAcGFyYW0gZWwgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBjbGFzcyBuYW1lIHRvIG9ic2VydmVcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gbXV0YXRpb25zIGFyZSBkZXRlY3RlZFxuICovXG5jb25zdCBNVVRBVE9SUyA9IG5ldyBXZWFrTWFwPEVsZW1lbnQsIEFycmF5PCgpID0+IHZvaWQ+PigpO1xuZXhwb3J0IGNvbnN0IG9uTXV0YXRpb24gPSA8VCBleHRlbmRzIEVsZW1lbnQ+KFxuXHRlbDogRWxlbWVudCxcblx0Y2xhc3NOYW1lOiBzdHJpbmcsXG5cdGNhbGxiYWNrOiAoZWxlbXM6IEhUTUxDb2xsZWN0aW9uT2Y8VD4pID0+IHZvaWQsXG4pID0+IHtcblx0aWYgKCFJU19CUk9XU0VSIHx8ICF3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSByZXR1cm47IC8vIFNraXAgaWYgbm90IGluIGJyb3dzZXIgZW52aXJvbm1lbnRcblx0Y29uc3QgZWxlbXMgPSBlbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7XG5cdGNvbnN0IG11dGF0b3IgPSBNVVRBVE9SUy5nZXQoZWwpIHx8IFtdO1xuXG5cdGlmICghbXV0YXRvci5sZW5ndGgpIHtcblx0XHRNVVRBVE9SUy5zZXQoZWwsIG11dGF0b3IpO1xuXHRcdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoKF8sIG9ic2VydmVyKSA9PiB7XG5cdFx0XHRpZiAoZWwuaXNDb25uZWN0ZWQgJiYgbXV0YXRvcj8ubGVuZ3RoKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgY2FsbGJhY2sgb2YgbXV0YXRvcikgY2FsbGJhY2soKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdE1VVEFUT1JTLmRlbGV0ZShlbCk7XG5cdFx0XHR9XG5cdFx0fSkub2JzZXJ2ZShlbCwge1xuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbXCJjbGFzc1wiLCBcImhpZGRlblwiXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdH0pO1xuXHR9XG5cdG11dGF0b3IucHVzaCgoKSA9PiBjYWxsYmFjayhlbGVtcyBhcyBIVE1MQ29sbGVjdGlvbk9mPFQ+KSk7XG59O1xuXG4vKipcbiAqIGlzSW5wdXRMaWtlXG4gKiBAZGVzY3JpcHRpb24gQ2hlY2sgaWYgZWxlbWVudCBpcyBhbiBpbnB1dCBsaWtlIGVsZW1lbnRcbiAqIEBwYXJhbSBlbCBUaGUgZWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBhbiBpbnB1dCBsaWtlIGVsZW1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGlzSW5wdXRMaWtlID0gKGVsOiB1bmtub3duKTogZWwgaXMgSFRNTElucHV0RWxlbWVudCA9PlxuXHRlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG5cdFwidmFsaWRpdHlcIiBpbiBlbCAmJlxuXHQhKGVsIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpO1xuXG4vKipcbiAqIHRvQ3VzdG9tRWxlbWVudFByb3BzXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IGNvbnZlcnQgcHJvcHMgdG8gY3VzdG9tIGVsZW1lbnQgYXR0cmlidXRlc1xuICogQHBhcmFtIHByb3BzIFRoZSBwcm9wcyB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIHByb3BzXG4gKi9cbmNvbnN0IFNFTEVDVEVEID0gXCJhcmlhLXNlbGVjdGVkXCI7XG5leHBvcnQgY29uc3QgdG9DdXN0b21FbGVtZW50UHJvcHMgPSAoXG5cdHsgY2xhc3NOYW1lLCBoaWRkZW4sIG9wZW4sIC4uLnJlc3QgfTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGtsYXNzPzogc3RyaW5nLFxuKSA9PiB7XG5cdHJlc3Quc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nID0gdHJ1ZTsgLy8gTWFrZSBOZXh0LmpzIGhhcHB5XG5cdGlmIChyZXN0W1NFTEVDVEVEXSAhPT0gdW5kZWZpbmVkKVxuXHRcdHJlc3RbU0VMRUNURURdID0gYCR7KHJlc3RbU0VMRUNURURdIHx8IFwiZmFsc2VcIikgIT09IFwiZmFsc2VcIn1gOyAvLyBFbnN1cmUgYXJpYS1zZWxlY3RlZCBib29sZWFuIGlzIHN0cmluZ1xuXHRpZiAoY2xhc3NOYW1lIHx8IGtsYXNzKSByZXN0LmNsYXNzID0gY2xzeChrbGFzcywgY2xhc3NOYW1lIGFzIHN0cmluZyk7IC8vIFVzZSBjbGFzcyBpbnN0ZWFkIG9mIGNsYXNzTmFtZVxuXHRpZiAoaGlkZGVuKSByZXN0LmhpZGRlbiA9IHRydWU7IC8vIEVuc3VyZSBib29sZWFuIHByb3AgYmVoYXZpb3VyXG5cdGlmIChvcGVuKSByZXN0Lm9wZW4gPSB0cnVlOyAvLyBFbnN1cmUgYm9vbGVhbiBwcm9wIGJlaGF2aW91clxuXHRyZXR1cm4gcmVzdDtcbn07XG5cbi8qKlxuICogdGFnXG4gKiBAZGVzY3JpcHRpb24gY3JlYXRlcyBlbGVtZW50IGFuZCBhc3NpZ25zIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB0YWdOYW1lIFRoZSB0YWduYW1lIG9mIGVsZW1lbnQgdG8gY3JlYXRlXG4gKiBAcGFyYW0gYXR0cnMgT3B0aW9uYWwgYXR0cmlidXRlcyB0byBhZGQgdG8gdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSB0ZXh0IE9wdGlvbmFsIHRleHQgY29udGVudCB0byBhZGQgdG8gdGhlIGVsZW1lbnRcbiAqIEByZXR1cm4gSFRNTEVsZW1lbnQgd2l0aCBwcm9wc1xuICovXG5leHBvcnQgY29uc3QgdGFnID0gPFRhZ05hbWUgZXh0ZW5kcyBrZXlvZiBIVE1MRWxlbWVudFRhZ05hbWVNYXA+KFxuXHR0YWdOYW1lOiBUYWdOYW1lLFxuXHRhdHRycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGw+LFxuXHR0ZXh0Pzogc3RyaW5nIHwgbnVsbCxcbik6IEhUTUxFbGVtZW50VGFnTmFtZU1hcFtUYWdOYW1lXSA9PiB7XG5cdGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcblx0aWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcblx0aWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG5cdHJldHVybiBlbDtcbn07XG5cbi8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgSFRNTEVsZW1lbnQgdG8gZXh0ZW5kIChmb3Igc2VydmVyIHNpZGUgcmVuZGVyaW5nKVxuZXhwb3J0IGNvbnN0IE1URFNFbGVtZW50ID1cblx0dHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiXG5cdFx0PyAoY2xhc3Mge30gYXMgdHlwZW9mIEhUTUxFbGVtZW50KVxuXHRcdDogSFRNTEVsZW1lbnQ7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgSVNfQlJPV1NFUiwgb24sIG9uTG9hZGVkLCBRVUlDS19FVkVOVCwgdGFnIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19CUkVBRENSVU1CUyA9IGAuJHtzdHlsZXMuYnJlYWRjcnVtYnMuc3BsaXQoXCIgXCIpWzBdfWA7XG5jb25zdCBDU1NfQ0FSRCA9IGAuJHtzdHlsZXMuY2FyZC5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENTU19DSElQID0gYC4ke3N0eWxlcy5jaGlwLnNwbGl0KFwiIFwiKVswXX1gO1xuY29uc3QgQ1NTX0hFTFBURVhUID0gYC4ke3N0eWxlcy5oZWxwdGV4dC5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENTU19QQUdJTkFUSU9OID0gYC4ke3N0eWxlcy5wYWdpbmF0aW9uLnNwbGl0KFwiIFwiKVswXX1gO1xuY29uc3QgQ0xJQ0tTID0gYHN1bW1hcnksdS1zdW1tYXJ5LGEsYnV0dG9uLFtyb2xlPVwidGFiXCJdLFtyb2xlPVwiYnV0dG9uXCJdYDtcbmNvbnN0IEVWRU5UUyA9IFwiY2xpY2ssdG9nZ2xlLHN1Ym1pdCxjaGFuZ2VcIjtcbmNvbnN0IE1BVE9NTyA9IFwibWF0dGlsc3luZXQubWF0b21vLmNsb3VkXCI7XG5jb25zdCBCQU5ORVIgPSBcIm10ZHMtYW5hbHl0aWNzLWJhbm5lclwiOyAvLyBEaWFsb2cgdG8gc2hvdyBNYXRvbW8gc2NyaXB0IGxvYWRpbmdcbmNvbnN0IEJBTk5FUl9VUkwgPVxuXHRcImh0dHBzOi8vd3d3Lm1hdHRpbHN5bmV0Lm5vL29tLW1hdHRpbHN5bmV0L3BlcnNvbnZlcm5lcmtsYWVyaW5nL2luZm9ybWFzam9uc2thcHNsZXJcIjtcblxudHlwZSBNYXRvbW8gPSAoXG5cdHwgc3RyaW5nXG5cdHwgbnVtYmVyXG5cdHwgYm9vbGVhblxuXHR8IERvY3VtZW50XG5cdHwgRWxlbWVudFxuXHR8ICgodGhpczogUmVjb3JkPHN0cmluZywgPFQ+KCkgPT4gVD4pID0+IHZvaWQpXG4pW107XG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBXaW5kb3cge1xuXHRcdF9wYXE/OiBNYXRvbW9bXTtcblx0XHRfbXRtPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPltdO1xuXHRcdF9tdGRzVHJhY2tpbmc/OiBBbmFseXRpY3NBY3Rpb25zW1wiaW5pdFwiXTtcblx0XHRfbXRkc1VudHJhY2s/OiAoKSA9PiB2b2lkO1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIEFuYWx5dGljc0FjdGlvbnMgPSB7XG5cdGluaXQ6IHtcblx0XHRlbmFibGVkPzogYm9vbGVhbiB8IFwiZGVidWdcIjtcblx0XHRjb25zZW50PzogXCJjdXN0b21cIiB8IHRydWU7XG5cdH0gJiAoXG5cdFx0fCB7XG5cdFx0XHRcdG1hdG9tb0lkOiBudW1iZXIgfCBzdHJpbmc7XG5cdFx0XHRcdG1hdG9tb1RhZ01hbmFnZXJJZD86IG5ldmVyO1xuXHRcdCAgfVxuXHRcdHwge1xuXHRcdFx0XHRtYXRvbW9JZD86IG5ldmVyO1xuXHRcdFx0XHRtYXRvbW9UYWdNYW5hZ2VySWQ6IHN0cmluZztcblx0XHQgIH1cblx0KTtcblx0cGFnZXZpZXc6IHtcblx0XHR1cmw/OiBzdHJpbmc7XG5cdFx0dGl0bGU/OiBzdHJpbmc7XG5cdH07XG5cdGV2ZW50OiB7XG5cdFx0Y2F0ZWdvcnk6IHN0cmluZztcblx0XHRhY3Rpb246IHN0cmluZztcblx0XHRuYW1lPzogc3RyaW5nO1xuXHRcdHZhbHVlPzogbnVtYmVyO1xuXHR9O1xuXHRzZWFyY2g6IHtcblx0XHRxdWVyeTogc3RyaW5nO1xuXHRcdGNhdGVnb3J5Pzogc3RyaW5nO1xuXHRcdHJlc3VsdHM/OiBudW1iZXI7XG5cdH07XG5cdG1hdG9tbzogTWF0b21vO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFuYWx5dGljczxBY3Rpb24gZXh0ZW5kcyBrZXlvZiBBbmFseXRpY3NBY3Rpb25zPihcblx0YWN0aW9uOiBBY3Rpb24sXG5cdGFyZ3MgPSB7fSBhcyBBbmFseXRpY3NBY3Rpb25zW0FjdGlvbl0sXG4pIHtcblx0aWYgKCFJU19CUk9XU0VSKSByZXR1cm47XG5cdGlmICghd2luZG93Ll9wYXEpIHtcblx0XHR3aW5kb3cuX3BhcSA9IFtdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wiSGVhdG1hcFNlc3Npb25SZWNvcmRpbmc6OmRpc2FibGVcIl0pOyAvLyBEaXNhYmxlIGhlYXRtYXBzIGJ5IGRlZmF1bHQgYXMgdGhpcyByZXF1aXJlIGNvb2tpZXNcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcImVuYWJsZUxpbmtUcmFja2luZ1wiXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRUcmFja2VyVXJsXCIsIGBodHRwczovLyR7TUFUT01PfS9tYXRvbW8ucGhwYF0pO1xuXHR9XG5cdGlmICghd2luZG93Ll9tdG0pIHtcblx0XHR3aW5kb3cuX210bSA9IHdpbmRvdy5fbXRtIHx8IFtdOyAvLyBQcmVwYXJlIE1hdG9tbyBUYWcgTWFuYWdlclxuXHRcdHdpbmRvdy5fbXRtLnB1c2goeyBcIm10bS5zdGFydFRpbWVcIjogRGF0ZS5ub3coKSwgZXZlbnQ6IFwibXRtLlN0YXJ0XCIgfSk7XG5cdH1cblxuXHRpZiAoYWN0aW9uID09PSBcImluaXRcIikge1xuXHRcdHdpbmRvdy5fbXRkc1RyYWNraW5nID0ge1xuXHRcdFx0ZW5hYmxlZDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICE9PSBcImxvY2FsaG9zdFwiLFxuXHRcdFx0Li4ud2luZG93Ll9tdGRzVHJhY2tpbmcsXG5cdFx0XHQuLi5hcmdzLFxuXHRcdH0gYXMgQW5hbHl0aWNzQWN0aW9uc1tcImluaXRcIl07XG5cdFx0Y29uc3QgeyBjb25zZW50LCBlbmFibGVkLCBtYXRvbW9JZCwgbWF0b21vVGFnTWFuYWdlcklkIH0gPVxuXHRcdFx0d2luZG93Ll9tdGRzVHJhY2tpbmc7XG5cblx0XHRpZiAobWF0b21vSWQpIHdpbmRvdy5fcGFxLnB1c2goW1wic2V0U2l0ZUlkXCIsIG1hdG9tb0lkXSk7XG5cdFx0aWYgKGVuYWJsZWQpIHtcblx0XHRcdGlmIChjb25zZW50ICE9PSBcImN1c3RvbVwiKSByZW5kZXJCYW5uZXIoKTtcblx0XHRcdGNvbnN0IHNyYyA9IG1hdG9tb1RhZ01hbmFnZXJJZFxuXHRcdFx0XHQ/IGBodHRwczovL2Nkbi5tYXRvbW8uY2xvdWQvJHtNQVRPTU99L2NvbnRhaW5lcl8ke21hdG9tb1RhZ01hbmFnZXJJZH0uanNgXG5cdFx0XHRcdDogYGh0dHBzOi8vY2RuLm1hdG9tby5jbG91ZC8ke01BVE9NT30vbWF0b21vLmpzYDtcblxuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihgc2NyaXB0W3NyYz1cIiR7c3JjfVwiXWApIHx8XG5cdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kKHRhZyhcInNjcmlwdFwiLCB7IGFzeW5jOiBcIlwiLCBzcmMgfSkpO1xuXHRcdH1cblx0fVxuXG5cdGlmICh3aW5kb3cuX210ZHNUcmFja2luZz8uZW5hYmxlZCA9PT0gZmFsc2UpIHJldHVybjtcblx0aWYgKHdpbmRvdy5fbXRkc1RyYWNraW5nPy5lbmFibGVkID09PSBcImRlYnVnXCIpXG5cdFx0cmV0dXJuIGNvbnNvbGUuaW5mbyhgYW5hbHl0aWNzKFwiJHthY3Rpb259XCIsIGAsIGFyZ3MsIFwiKVwiKTtcblxuXHRpZiAoYWN0aW9uID09PSBcInBhZ2V2aWV3XCIpIHtcblx0XHRjb25zdCB7IHVybCwgdGl0bGUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInBhZ2V2aWV3XCJdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0Q3VzdG9tVXJsXCIsIHVybCB8fCBsb2NhdGlvbi5ocmVmXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXREb2N1bWVudFRpdGxlXCIsIHRpdGxlIHx8IGRvY3VtZW50LnRpdGxlXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJ0cmFja1BhZ2VWaWV3XCJdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwiZXZlbnRcIikge1xuXHRcdGNvbnN0IHsgY2F0ZWdvcnksIGFjdGlvbiwgbmFtZSwgdmFsdWUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcImV2ZW50XCJdO1xuXHRcdGNvbnN0IGV2ZW50ID0gW1widHJhY2tFdmVudFwiLCBjYXRlZ29yeSwgYWN0aW9uLCBuYW1lLCB2YWx1ZV07XG5cblx0XHQvLyBXZSBkbyBub3Qgd2FudCB0byB0cmFjayBldmVudHMgd2l0aCBoYXNoIGluIFVSTCBhcyB0aGlzIGNhdXNlcyBoYXJkLXRvLXJlYWQgZGF0YSxcblx0XHQvLyBzbyB0ZW1wb3JhcmlseSByZW1vdmUgdGhlIGhhc2ggcGFydCwgYW5kIGFkZCBpdCBiYWNrIGFmdGVyIHRoZSBldmVudCBpcyBwdXNoZWRcblx0XHRsZXQgdXJsID0gbG9jYXRpb24uaHJlZjtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcblx0XHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dXJsID0gdGhpcy5nZXRDdXJyZW50VXJsPHN0cmluZz4oKTtcblx0XHRcdH0sXG5cdFx0XSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRDdXN0b21VcmxcIiwgdXJsLnNwbGl0KFwiI1wiKVswXV0pOyAvLyBTa2lwIGhhc2ggcGFydCBvZiBVUkxcblx0XHR3aW5kb3cuX3BhcS5wdXNoKGV2ZW50LmZpbHRlcigodikgPT4gdiAhPT0gdW5kZWZpbmVkKSk7IC8vIFB1c2ggZXZlbnRcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCB1cmxdKTsgLy8gUmV2ZXJydCB0byBvcmlnaW5hbCBVUkwgd2l0aCBoYXNoXG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcInNlYXJjaFwiKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0cXVlcnksXG5cdFx0XHRjYXRlZ29yeSA9IGZhbHNlLFxuXHRcdFx0cmVzdWx0cyA9IGZhbHNlLFxuXHRcdH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJzZWFyY2hcIl07XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJ0cmFja1NpdGVTZWFyY2hcIiwgcXVlcnksIGNhdGVnb3J5LCByZXN1bHRzXSk7XG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcIm1hdG9tb1wiKSB7XG5cdFx0d2luZG93Ll9wYXEucHVzaChhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJtYXRvbW9cIl0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbmRlckJhbm5lcigpIHtcblx0Y29uc3QgaGFzU2VlbkJhbm5lciA9XG5cdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoQkFOTkVSKSB8fCB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oQkFOTkVSKTtcblxuXHRpZiAoaGFzU2VlbkJhbm5lcikgcmV0dXJuO1xuXG5cdGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuXHRcdFwiYWZ0ZXJiZWdpblwiLFxuXHRcdGA8ZGlhbG9nIGlkPVwiJHtCQU5ORVJ9XCIgZGF0YS1hbmFseXRpY3M9XCJpZ25vcmVcIj48c3R5bGU+XG5cdFx0XHRcdCMke0JBTk5FUn1bb3Blbl0geyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBiYWNrZ3JvdW5kOiAjMTE2ZTZiOyBib3JkZXItcmFkaXVzOiAuNWVtOyBib3JkZXI6IDA7IGJveC1zaGFkb3c6IDAgLjI1ZW0gLjVlbSByZ2JhKDAsMCwwLC4zKTsgY29sb3I6ICNmZmY7IGZvbnQtc2l6ZTogLjg3NWVtOyBpbnNldDogYXV0byBhdXRvIDFlbSAxZW07IG1heC13aWR0aDogY2FsYygxMDB2dyAtIDJlbSk7IG91dGxpbmU6IDA7IHBhZGRpbmc6IC41ZW07IHBvc2l0aW9uOiBmaXhlZDsgei1pbmRleDogOTk5OTkgfVxuXHRcdFx0XHQjJHtCQU5ORVJ9IGJ1dHRvbiB7IGFsbDogdW5zZXQ7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogZmxleDsgd2lkdGg6IDEuNWVtOyBoZWlnaHQ6IDEuNWVtOyBmb250OiAzMDAgMS41ZW0vMS4zNSBzYW5zLXNlcmlmOyBib3JkZXItcmFkaXVzOiAuMjVlbTsgcGxhY2UtY29udGVudDogY2VudGVyOyB0cmFuc2l0aW9uOiAuMnM7IHRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQsIHNjYWxlIH1cblx0XHRcdFx0IyR7QkFOTkVSfSBidXR0b246Zm9jdXMtdmlzaWJsZSB7IG91dGxpbmU6IDJweCBzb2xpZCB9XG5cdFx0XHRcdCMke0JBTk5FUn0gYnV0dG9uOmhvdmVyIHsgYmFja2dyb3VuZDogIzBhNGU0ZiB9XG5cdFx0XHRcdCMke0JBTk5FUn0gYnV0dG9uOmFjdGl2ZSB7IGJhY2tncm91bmQ6ICMwNTQ0NDk7IHNjYWxlOiAuOSB9XG5cdFx0XHRcdCMke0JBTk5FUn0gcCB7IG1hcmdpbjogMCAuMjVlbSB9XG5cdFx0XHQ8L3N0eWxlPlxuXHRcdFx0PHA+VmkgYnJ1a2VyIDxhIGhyZWY9XCIke0JBTk5FUl9VUkx9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+aW5mb3JtYXNqb25za2Fwc2xlcjwvYT4gZm9yIMOlIGZvcmJlZHJlIGJydWtlcm9wcGxldmVsc2VuLjwvcD5cblx0XHRcdDxmb3JtIG1ldGhvZD1cImRpYWxvZ1wiIGRhdGEtYW5hbHl0aWNzPVwiaWdub3JlXCI+PGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgYXJpYS1sYWJlbD1cIk9LXCI+JnRpbWVzOzwvYnV0dG9uPjwvZm9ybT5cblx0XHQ8L2RpYWxvZz5gLFxuXHQpO1xuXHRjb25zdCBiYW5uZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChCQU5ORVIpIGFzIEhUTUxEaWFsb2dFbGVtZW50O1xuXHRjb25zdCBvbkNsb3NlID0gKCkgPT4gd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKEJBTk5FUiwgXCJzZWVuXCIpO1xuXHRiYW5uZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsb3NlXCIsIG9uQ2xvc2UsIHsgb25jZTogdHJ1ZSB9KTtcblx0YmFubmVyLnNob3coKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlVHJhY2soZXZlbnQ6IEV2ZW50KSB7XG5cdGlmICh3aW5kb3cuX210ZHNUcmFja2luZz8uZW5hYmxlZCkgc2V0VGltZW91dChwcm9jZXNzVHJhY2ssIDAsIGV2ZW50KTsgLy8gTGV0IG90aGVyIGV2ZW50cyBwcm9jZXNzIGZpcnN0XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NUcmFjayh7IHR5cGUsIHRhcmdldCB9OiBFdmVudCkge1xuXHRjb25zdCBlbCA9IHR5cGUgPT09IFwiY2xpY2tcIiA/ICh0YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihDTElDS1MpIDogdGFyZ2V0O1xuXHRpZiAoIShlbCBpbnN0YW5jZW9mIEVsZW1lbnQpIHx8IGVsLmNsb3Nlc3QoJ1tkYXRhLWFuYWx5dGljcz1cImlnbm9yZVwiXScpKVxuXHRcdHJldHVybjtcblxuXHRsZXQgYWN0aW9uID0gXCJjbGlja1wiO1xuXHRsZXQgY2F0ZWdvcnkgPSBcIkJ1dHRvblwiO1xuXHRsZXQgbmFtZSA9IGxhYmVsKGVsKSB8fCBoZWFkaW5nKGVsKSB8fCBhdHRyKGVsLCBcImRhdGEtdG9vbHRpcFwiKSB8fCBcIlwiO1xuXG5cdGlmICh0eXBlID09PSBcInN1Ym1pdFwiKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkZvcm1cIjtcblx0XHRhY3Rpb24gPSBcInN1Ym1pdFwiO1xuXHRcdG5hbWUgPSBuYW1lIHx8IGRvY3VtZW50LnRpdGxlO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT09IFwidG9nZ2xlXCIpIHtcblx0XHRpZiAoIWVsLm1hdGNoZXMoXCJkaWFsb2c6bW9kYWxcIikpIHJldHVybjsgLy8gU2tpcCBub24tbW9kYWwgZGlhbG9nc1xuXHRcdGNhdGVnb3J5ID0gXCJEaWFsb2dcIjtcblx0XHRhY3Rpb24gPSBcIm9wZW5cIjtcblx0fSBlbHNlIGlmICh0eXBlID09PSBcImNoYW5nZVwiKSB7XG5cdFx0Y29uc3QgdHlwZSA9IGF0dHIoZWwsIFwidHlwZVwiKTtcblx0XHRjb25zdCBncm91cCA9XG5cdFx0XHR0eXBlID09PSBcImNoZWNrYm94XCIgfHwgdHlwZSA9PT0gXCJyYWRpb1wiID8gZWwuY2xvc2VzdChcImZpZWxkc2V0XCIpIDogbnVsbDtcblxuXHRcdGNhdGVnb3J5ID0gZWwuY2xvc2VzdChDU1NfQ0hJUCkgPyBcIkNoaXBcIiA6IFwiRm9ybVwiO1xuXHRcdGFjdGlvbiA9IFwiY2hhbmdlXCI7XG5cdFx0bmFtZSA9XG5cdFx0XHRsYWJlbChncm91cCB8fCBlbCkgfHxcblx0XHRcdHRleHQoZ3JvdXA/LnF1ZXJ5U2VsZWN0b3IoXCJsZWdlbmRcIikpIHx8XG5cdFx0XHR0ZXh0KChlbCBhcyBIVE1MSW5wdXRFbGVtZW50KT8ubGFiZWxzPy5bMF0pO1xuXHR9IGVsc2UgaWYgKGF0dHIoZWwsIFwicm9sZVwiKSA9PT0gXCJ0YWJcIikge1xuXHRcdGNhdGVnb3J5ID0gXCJUYWJcIjtcblx0XHRhY3Rpb24gPSBcIm5hdmlnYXRlXCI7XG5cdH0gZWxzZSBpZiAoYXR0cihlbCwgXCJwb3BvdmVydGFyZ2V0XCIpKSB7XG5cdFx0aWYgKCFwb3BvdmVyKGVsKT8ubWF0Y2hlcyhcIjpwb3BvdmVyLW9wZW5cIikpIHJldHVybjsgLy8gU2tpcCBpZiBub3Qgb3BlblxuXHRcdGNhdGVnb3J5ID0gZWwuY2xvc2VzdChDU1NfSEVMUFRFWFQpID8gXCJIZWxwVGV4dFwiIDogXCJQb3BvdmVyXCI7XG5cdFx0YWN0aW9uID0gXCJvcGVuXCI7XG5cdH0gZWxzZSBpZiAoZWwubm9kZU5hbWUuZW5kc1dpdGgoXCJTVU1NQVJZXCIpKSB7XG5cdFx0aWYgKCEoZWwucGFyZW50RWxlbWVudCBhcyBIVE1MRGV0YWlsc0VsZW1lbnQpLm9wZW4pIHJldHVybjsgLy8gU2tpcCBpZiBub3Qgb3BlblxuXHRcdGNhdGVnb3J5ID0gXCJEZXRhaWxzXCI7XG5cdFx0YWN0aW9uID0gXCJvcGVuXCI7XG5cdH0gZWxzZSBpZiAoYXR0cihlbCwgXCJkYXRhLWNvbW1hbmRcIikgPT09IFwidG9nZ2xlLWFwcC1leHBhbmRlZFwiKSB7XG5cdFx0Y29uc3Qgb3BlbiA9IHN0eWxlKGVsLCBcIi0tbXRkcy10b29sdGlwLXBvc2l0aW9uXCIpID09PSBcIm5vbmVcIjtcblx0XHRjYXRlZ29yeSA9IFwiU2lkZWJhclwiO1xuXHRcdGFjdGlvbiA9IG9wZW4gPyBcImV4cGFuZFwiIDogXCJtaW5pbWl6ZVwiO1xuXHRcdG5hbWUgPSAob3BlbiAmJiBhdHRyKGVsLCBcImRhdGEtdG9vbHRpcFwiKSkgfHwgdGV4dChlbCk7XG5cdH0gZWxzZSBpZiAoZWwuY2xvc2VzdChDU1NfQlJFQURDUlVNQlMpKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkJyZWFkY3J1bWJzXCI7XG5cdFx0YWN0aW9uID0gXCJuYXZpZ2F0ZVwiO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoQ1NTX1BBR0lOQVRJT04pKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIlBhZ2ludGF0aW9uXCI7XG5cdFx0YWN0aW9uID0gXCJuYXZpZ2F0ZVwiO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoQ1NTX0NBUkQpKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkNhcmRcIjtcblx0XHRhY3Rpb24gPSBlbCBpbnN0YW5jZW9mIEhUTUxBbmNob3JFbGVtZW50ID8gXCJuYXZpZ2F0ZVwiIDogXCJjbGlja1wiO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoQ1NTX0NISVApKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkNoaXBcIjtcblx0XHRhY3Rpb24gPSBlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLXJlbW92YWJsZVwiKSA/IFwicmVtb3ZlXCIgOiBcImNsaWNrXCI7XG5cdH0gZWxzZSBpZiAoZWwuY2xvc2VzdChcInRoW2FyaWEtc29ydF1cIikpIHtcblx0XHRjYXRlZ29yeSA9IFwiVGFibGVcIjtcblx0XHRhY3Rpb24gPSBcInNvcnRcIjtcblx0fSBlbHNlIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxBbmNob3JFbGVtZW50KSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkxpbmtcIjtcblx0XHRhY3Rpb24gPSBlbC5wcm90b2NvbCA9PT0gXCJtYWlsdG86XCIgPyBcImVtYWlsXCIgOiBcIm5hdmlnYXRlXCI7XG5cdFx0aWYgKGVsLmhhc0F0dHJpYnV0ZShcImRvd25sb2FkXCIpKSBhY3Rpb24gPSBcImRvd25sb2FkXCI7XG5cdFx0ZWxzZSBpZiAoZWwuaGFzaCAmJiBlbC5ocmVmLnN0YXJ0c1dpdGgobG9jYXRpb24uaHJlZi5zcGxpdChcIiNcIilbMF0pKVxuXHRcdFx0YWN0aW9uID0gXCJhbmNob3JcIjsgLy8gT25seSB0cmFjayBhcyBhbmNob3IgaWYgc2FtZSBwYWdlXG5cdH0gZWxzZSBpZiAoZWwuaGFzQXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiKSkge1xuXHRcdGlmIChhdHRyKGVsLCBcImFyaWEtZXhwYW5kZWRcIikgIT09IFwidHJ1ZVwiKSByZXR1cm47IC8vIFNraXAgaWYgbm90IG9wZW5cblx0XHRjYXRlZ29yeSA9IFwiRXhwYW5kXCI7XG5cdFx0YWN0aW9uID0gXCJvcGVuXCI7XG5cdH1cblxuXHQvLyBSZXNwZWN0IGF0dHJpYnV0ZXMgYW5kIHNlbmRcblx0YW5hbHl0aWNzKFwiZXZlbnRcIiwge1xuXHRcdGNhdGVnb3J5OiBhdHRyKGVsLCBcImRhdGEtYW5hbHl0aWNzLWNhdGVnb3J5XCIpID8/IGNhdGVnb3J5LFxuXHRcdGFjdGlvbjogYXR0cihlbCwgXCJkYXRhLWFuYWx5dGljcy1hY3Rpb25cIikgPz8gYWN0aW9uLFxuXHRcdG5hbWU6IGF0dHIoZWwsIFwiZGF0YS1hbmFseXRpY3MtbmFtZVwiKSA/PyBuYW1lLFxuXHR9KTtcbn1cblxuLy8gVXRpbGl0aWVzXG5jb25zdCB0ZXh0ID0gKGVsPzogRWxlbWVudCB8IG51bGwpID0+IGVsPy50ZXh0Q29udGVudD8udHJpbSgpIHx8IFwiXCI7XG5jb25zdCBsYWJlbCA9IChlbD86IEVsZW1lbnQgfCBudWxsKSA9PiAoZWwgJiYgYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIpKSB8fCBcIlwiO1xuY29uc3QgcG9wb3ZlciA9IChlbDogRWxlbWVudCkgPT5cblx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXR0cihlbCwgXCJwb3BvdmVydGFyZ2V0XCIpIHx8IFwiXCIpO1xuY29uc3Qgc3R5bGUgPSAoZWw6IEVsZW1lbnQsIGtleTogc3RyaW5nKSA9PlxuXHR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCkuZ2V0UHJvcGVydHlWYWx1ZShrZXkpPy50cmltKCk7XG5jb25zdCBoZWFkaW5nID0gKGVsOiBFbGVtZW50KSA9PiB7XG5cdGNvbnN0IGJvZHkgPSB0ZXh0KGVsKTtcblx0Y29uc3QgaGVhZCA9IHRleHQoZWwucXVlcnlTZWxlY3RvcihcImgxLGgyLGgzLGg0LGg1LGg2XCIpKTsgLy8gTm90ZTogaGVhZCBtaWdodCBiZSBlbXB0eSBzdHJpbmcgJydcblx0cmV0dXJuIChib2R5LnN0YXJ0c1dpdGgoaGVhZCkgJiYgaGVhZCkgfHwgYm9keS5zbGljZSgwLCAxMDApLnRyaW0oKTsgLy8gTGltaXQgdG8gMTAwIGNoYXJhY3RlcnNcbn07XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBFVkVOVFMsIGhhbmRsZVRyYWNrLCBRVUlDS19FVkVOVCkpO1xuIiwiaWYgKFxuXHR0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdHdpbmRvdy5DU1NTdHlsZVNoZWV0ICYmXG5cdGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0c1xuKVxuXHQoKCkgPT4ge1xuXHRcdGNvbnN0IGtleSA9IFwiLS1tdGRzLWFwcC1leHBhbmRlZFwiO1xuXHRcdGNvbnN0IHNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblx0XHRjb25zdCBwcmV2ID0gKCkgPT4gIXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpPy5pbmNsdWRlcyhcImZhbHNlXCIpO1xuXG5cdFx0ZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLnB1c2goc2hlZXQpO1xuXHRcdHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQgPSAoZm9yY2UpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IG5leHQgPSBmb3JjZSA/PyAhcHJldigpO1xuXHRcdFx0XHRzaGVldC5yZXBsYWNlU3luYz8uKGA6cm9vdCB7ICR7a2V5fTogdmFyKCR7a2V5fS0tJHtuZXh0fSl9YCk7XG5cdFx0XHRcdHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIG5leHQpO1xuXHRcdFx0fSBjYXRjaCAoX2Vycikge30gLy8gbG9jYWxTdG9yYWdlIGlzIGZ1bGwgb3IgcmVwbGFjZVN5bmMgaXMgbm90IHN1cHBvcnRlZFxuXHRcdH07XG5cblx0XHQvLyBTZXQgYW5kIHN0b3JlIGluaXRpYWwgc3RhdGVcblx0XHR3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkKHByZXYoKSk7XG5cdH0pKCk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgZGVib3VuY2UsIG9uLCBvbkxvYWRlZCwgb25NdXRhdGlvbiwgUVVJQ0tfRVZFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCBcIi4vYXBwLXRvZ2dsZVwiO1xuXG5jb25zdCBDU1NfQVBQID0gc3R5bGVzLmFwcC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfU1RJQ0tZID0gc3R5bGVzLnN0aWNreS5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVE9HR0xFID0gJ1tkYXRhLWNvbW1hbmQ9XCJ0b2dnbGUtYXBwLWV4cGFuZGVkXCJdJztcbmNvbnN0IENTU19TSURFQkFSID0gYC4ke0NTU19BUFB9ID4gZGlhbG9nLC4ke0NTU19BUFB9IGRpYWxvZyB+IG1haW5gO1xuXG5jb25zdCB1c2VUcmFuc2l0aW9uID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XG5cdGlmICghZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbikgY2FsbGJhY2soKTtcblx0ZWxzZSBkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0b2dnbGVBcHBFeHBhbmRlZCA9IChmb3JjZT86IGJvb2xlYW4pID0+XG5cdC8vIEB0cy1leHBlY3QtZXJyb3Igd2luZG93Lm10ZHNBcHBUb2dnbGUgY29tZXMgZnJvbSBhcHAtdG9nZ2xlLmpzXG5cdHVzZVRyYW5zaXRpb24oKCkgPT4gd2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZD8uKGZvcmNlKSk7XG5cbmZ1bmN0aW9uIGhhbmRsZUFwcFRvZ2dsZUNsaWNrKHsgdGFyZ2V0OiBlbCwgZGVmYXVsdFByZXZlbnRlZDogc3RvcCB9OiBFdmVudCkge1xuXHRjb25zdCBsaW5rID0gKGVsIGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oXCJhXCIpO1xuXHRpZiAobGluaz8uY2xvc2VzdChcImRpYWxvZ1wiKSAmJiBsaW5rPy5jbG9zZXN0KENTU19TSURFQkFSKSlcblx0XHRyZXR1cm4gY2xvc2VTaWRlYmFyKCk7IC8vIENsb3NlIHNpZGViYXIgaWYgbGluayBpcyBjbGlja2VkIGluc2lkZSBzaWRlYmFyXG5cblx0aWYgKHN0b3AgfHwgIShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSB8fCAhZWwubWF0Y2hlcyhDU1NfVE9HR0xFKSlcblx0XHRyZXR1cm47XG5cdGNvbnN0IGlzRGVza3RvcCA9IGdldENvbXB1dGVkU3R5bGUoZWwpLnBvc2l0aW9uID09PSBcInN0aWNreVwiO1xuXG5cdGlmIChpc0Rlc2t0b3ApIHRvZ2dsZUFwcEV4cGFuZGVkKCk7XG5cdGVsc2Vcblx0XHR1c2VUcmFuc2l0aW9uKCgpID0+IHtcblx0XHRcdGNvbnN0IHNpZGViYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaWFsb2dFbGVtZW50PihDU1NfU0lERUJBUik7XG5cdFx0XHRzaWRlYmFyPy5zZXRBdHRyaWJ1dGUoXCJkYXRhLWNsb3NlZGJ5XCIsIFwiYW55XCIpOyAvLyBBbGxvdyBjbG9zaW5nIGJ5IGNsaWNraW5nIG91dHNpZGVcblx0XHRcdHNpZGViYXI/LnNob3dNb2RhbCgpO1xuXHRcdH0pO1xufVxuXG5mdW5jdGlvbiBjbG9zZVNpZGViYXIoKSB7XG5cdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpYWxvZ0VsZW1lbnQ+KENTU19TSURFQkFSKT8uY2xvc2UoKTtcbn1cblxuLy8gU2Nyb2xsIHN0YXRlXG5sZXQgTUlOX1kgPSAwOyAvLyBPZmZzZXQgdG8gYXZvaWQgc2Nyb2xsIGp1bXAgd2hlbiBzdGlja3kgaXMgc2V0IHRvIHJlbGF0aXZlXG5sZXQgU0NST0xMX1VQOiBib29sZWFuO1xubGV0IFNUSUNLID0gMDsgLy8gLTEgPSBzdGljayB0b3AsIDAgPSByZWxhdGl2ZSwgMSA9IHN0aWNrIGJvdHRvbVxubGV0IFNUSUNLX0VMOiBIVE1MRWxlbWVudDtcbmxldCBTVElDS19IID0gMDtcbmxldCBTVElDS19ZID0gMDtcbmxldCBTVFVDSyA9IGZhbHNlOyAvLyBVc2VkIHRvIGZpZ3VyZSBpZiBuYXYgaXMgbGFyZ2VyIHRoYW4gdmlld3BvcnRcbmxldCBXSU5fSCA9IDA7XG5sZXQgV0lOX1kgPSAwO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihbc3RpY2t5XTogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0U1RJQ0tfRUwgPSBzdGlja3k7XG5cdGhhbmRsZUFwcFNjcm9sbCgpOyAvLyBSdW4gb24gY29ubmVjdFxufVxuXG5mdW5jdGlvbiBoYW5kbGVBcHBTY3JvbGwoKSB7XG5cdGlmICghU1RJQ0tfRUw/LmlzQ29ubmVjdGVkKSByZXR1cm47XG5cdGNvbnN0IE5FWFRfWSA9IHdpbmRvdy5zY3JvbGxZO1xuXHRjb25zdCBORVhUX1VQID0gTkVYVF9ZIDwgV0lOX1k7XG5cdFdJTl9ZID0gTkVYVF9ZO1xuXG5cdC8vIE9ubHkgY2FsY3VsYXRlIGlmIHNjcm9sbCBkaXJlY3Rpb24gaGFzIGNoYW5nZWRcblx0aWYgKE5FWFRfVVAgIT09IFNDUk9MTF9VUCkge1xuXHRcdE1JTl9ZID0gKFNUSUNLX0VMLnBhcmVudEVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCB8fCAwKSArIFdJTl9ZO1xuXHRcdFNDUk9MTF9VUCA9IE5FWFRfVVA7XG5cdFx0U1RJQ0tfSCA9IFNUSUNLX0VMLm9mZnNldEhlaWdodDtcblx0XHRTVElDS19ZID0gU1RJQ0tfRUwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgV0lOX1k7XG5cdFx0U1RVQ0sgPSBTVElDS19FTC5vZmZzZXRIZWlnaHQgPD0gd2luZG93LmlubmVySGVpZ2h0O1xuXHRcdFdJTl9IID0gd2luZG93LmlubmVySGVpZ2h0O1xuXHR9XG5cblx0aWYgKFNUSUNLID09PSAtMSAmJiBTVFVDSykgcmV0dXJuOyAvLyBBbGx3YXlzIHN0aWNreSB3aGVuIHNpZGViYXIgaXMgc21hbGxlciB0aGFuIHZpZXdwb3J0XG5cdGlmIChTVElDSyAhPT0gLTEgJiYgKFNUVUNLIHx8IChTQ1JPTExfVVAgJiYgV0lOX1kgPD0gU1RJQ0tfWSkpKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInN0aWNreVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIFwiMHB4XCIpO1xuXHRcdFNUSUNLID0gLTE7IC8vIE5vdCBzdGlja2luZyB0byB0b3AgYW5kIHNpZGViYXIgaXMgc21hbGxlciB0aGFuIHZpZXdwb3J0IG9yIHNjcm9sbGluZyB1cFxuXHR9IGVsc2UgaWYgKFNUSUNLID09PSAtMSAmJiAhU0NST0xMX1VQKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInJlbGF0aXZlXCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7TWF0aC5tYXgoMCwgV0lOX1kgLSBNSU5fWSl9cHhgKTtcblx0XHRTVElDSyA9IDA7IC8vIFN0aWNraW5nIHRvIHRvcCBhbmQgc2Nyb2xsaW5nIGRvd25cblx0fSBlbHNlIGlmIChTVElDSyAhPT0gMSAmJiAhU0NST0xMX1VQICYmIFdJTl9ZICsgV0lOX0ggPj0gU1RJQ0tfWSArIFNUSUNLX0gpIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwic3RpY2t5XCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7V0lOX0ggLSBTVElDS19IfXB4YCk7XG5cdFx0U1RJQ0sgPSAxOyAvLyBOb3Qgc3RpY2tpbmcgdG8gYm90dG9tIGFuZCBzY3JvbGxpbmcgZG93blxuXHR9IGVsc2UgaWYgKFNUSUNLID09PSAxICYmIFNDUk9MTF9VUCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJyZWxhdGl2ZVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke1NUSUNLX1kgLSBNSU5fWX1weGApO1xuXHRcdFNUSUNLID0gMDsgLy8gU3RpY2tpbmcgdG8gYm90dG9tIGFuZCBzY3JvbGxpbmcgdXBcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfU1RJQ0tZLCBoYW5kbGVNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZUFwcFRvZ2dsZUNsaWNrLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJyZXNpemVcIiwgZGVib3VuY2UoY2xvc2VTaWRlYmFyLCAxMDApLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJzY3JvbGxcIiwgaGFuZGxlQXBwU2Nyb2xsLCBRVUlDS19FVkVOVCk7XG59KTtcbiIsImNvbnN0IGdldFN0ZXBzID0gKFxuXHRub3c6IG51bWJlcixcblx0bWF4OiBudW1iZXIsXG5cdHNob3cgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXG4pID0+IHtcblx0Y29uc3Qgb2Zmc2V0ID0gKHNob3cgLSAxKSAvIDI7XG5cdGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoTWF0aC5taW4obm93IC0gTWF0aC5mbG9vcihvZmZzZXQpLCBtYXggLSBzaG93ICsgMSksIDEpO1xuXHRjb25zdCBlbmQgPSBNYXRoLm1pbihNYXRoLm1heChub3cgKyBNYXRoLmNlaWwob2Zmc2V0KSwgc2hvdyksIG1heCk7XG5cdGNvbnN0IHBhZ2VzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogZW5kICsgMSAtIHN0YXJ0IH0sIChfLCBpKSA9PiBpICsgc3RhcnQpO1xuXG5cdGlmIChzaG93ID4gNCAmJiBzdGFydCA+IDEpIHBhZ2VzLnNwbGljZSgwLCAyLCAxLCAwKTtcblx0aWYgKHNob3cgPiAzICYmIGVuZCA8IG1heCkgcGFnZXMuc3BsaWNlKC0yLCAyLCAwLCBtYXgpO1xuXHRyZXR1cm4gcGFnZXM7XG59O1xuXG5leHBvcnQgY29uc3QgcGFnaW5hdGlvbiA9ICh7IGN1cnJlbnQgPSAxLCB0b3RhbCA9IDEwLCBzaG93ID0gNyB9KSA9PiAoe1xuXHRwcmV2OiBjdXJyZW50ID4gMSA/IGN1cnJlbnQgLSAxIDogMCxcblx0bmV4dDogY3VycmVudCA8IHRvdGFsID8gY3VycmVudCArIDEgOiAwLFxuXHRwYWdlczogZ2V0U3RlcHMoY3VycmVudCwgdG90YWwsIHNob3cpLm1hcCgocGFnZSwgaW5kZXgpID0+ICh7XG5cdFx0Y3VycmVudDogcGFnZSA9PT0gY3VycmVudCAmJiAoXCJwYWdlXCIgYXMgY29uc3QpLFxuXHRcdGtleTogYGtleS0ke3BhZ2V9LSR7aW5kZXh9YCxcblx0XHRwYWdlLFxuXHR9KSksXG59KTtcbiIsImltcG9ydCBjbHN4IGZyb20gXCJjbHN4XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgdGFnIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmV4cG9ydCB0eXBlIFRvYXN0T3B0aW9ucyA9IHtcblx0Y2xhc3NOYW1lPzogc3RyaW5nO1xuXHRjbG9zZWRieT86IFwibm9uZVwiO1xuXHRjb2xvcj86IFwibWFpblwiIHwgXCJuZXV0cmFsXCIgfCBcInN1Y2Nlc3NcIiB8IFwiZGFuZ2VyXCIgfCBcImluZm9cIiB8IFwid2FybmluZ1wiO1xuXHRpY29uPzogYm9vbGVhbiB8IFwibm9uZVwiO1xuXHR0aW1lb3V0PzogbnVtYmVyIHwgZmFsc2U7XG5cdGJ1c3k/OiBib29sZWFuO1xuXHRvcGVuPzogYm9vbGVhbjtcblx0aWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdG9hc3QoY29udGVudDogc3RyaW5nLCBvcHQ6IFRvYXN0T3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IGRpYWxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9wdC5pZCB8fCBcIlwiKSB8fCB0YWcoXCJkaWFsb2dcIik7XG5cblx0YXR0cihkaWFsb2csIFwiYXJpYS1idXN5XCIsIG9wdC5idXN5ID8gXCJ0cnVlXCIgOiBudWxsKTtcblx0YXR0cihkaWFsb2csIFwiY2xhc3NcIiwgY2xzeChzdHlsZXMudG9hc3QsIG9wdC5jbGFzc05hbWUpKTtcblx0YXR0cihkaWFsb2csIFwiZGF0YS1jbG9zZWRieVwiLCBvcHQuY2xvc2VkYnkgfHwgbnVsbCk7XG5cdGF0dHIoZGlhbG9nLCBcImRhdGEtY29sb3JcIiwgb3B0LmNvbG9yIHx8IG51bGwpO1xuXHRhdHRyKGRpYWxvZywgXCJkYXRhLWljb25cIiwgYCR7b3B0Lmljb24gPz8gXCJcIn1gIHx8IG51bGwpO1xuXHRhdHRyKGRpYWxvZywgXCJkYXRhLXRpbWVvdXRcIiwgYCR7b3B0LnRpbWVvdXQgPz8gXCJcIn1gIHx8IG51bGwpO1xuXHRhdHRyKGRpYWxvZywgXCJpZFwiLCBvcHQuaWQgfHwgYCR7RGF0ZS5ub3coKX1gKTtcblx0YXR0cihkaWFsb2csIFwib3BlblwiLCBvcHQub3BlbiA9PT0gZmFsc2UgPyBudWxsIDogXCJcIik7XG5cblx0ZGlhbG9nLmlubmVySFRNTCA9IGNvbnRlbnQ7XG5cdGRpYWxvZy5hZGRFdmVudExpc3RlbmVyKFwiYW5pbWF0aW9uZW5kXCIsIGhhbmRsZVRvYXN0Q2xvc2UsIHsgb25jZTogdHJ1ZSB9KTtcblx0ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaWFsb2cpO1xuXHRyZXR1cm4gZGlhbG9nLmlkO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVUb2FzdENsb3NlKHsgYW5pbWF0aW9uTmFtZSwgdGFyZ2V0IH06IFBhcnRpYWw8QW5pbWF0aW9uRXZlbnQ+KSB7XG5cdGlmIChhbmltYXRpb25OYW1lID09PSBzdHlsZXMuX3RvYXN0Q2xvc2UpXG5cdFx0KHRhcmdldCBhcyBIVE1MRGlhbG9nRWxlbWVudCkucmVtb3ZlKCk7XG59XG5cbi8vIEV4cG9zZSB0b2FzdC5kYW5nZXIsIHRvYXN0LmluZm8sIHRvYXN0LnN1Y2Nlc3MgZXRjLlxudG9hc3Quc3VjY2VzcyA9IChjb250ZW50OiBzdHJpbmcsIG9wdD86IFRvYXN0T3B0aW9ucykgPT5cblx0dG9hc3QoY29udGVudCwgeyBjb2xvcjogXCJzdWNjZXNzXCIsIC4uLm9wdCB9KTtcbnRvYXN0LmRhbmdlciA9IChjb250ZW50OiBzdHJpbmcsIG9wdD86IFRvYXN0T3B0aW9ucykgPT5cblx0dG9hc3QoY29udGVudCwgeyBjb2xvcjogXCJkYW5nZXJcIiwgLi4ub3B0IH0pO1xudG9hc3QuaW5mbyA9IChjb250ZW50OiBzdHJpbmcsIG9wdDogVG9hc3RPcHRpb25zKSA9PlxuXHR0b2FzdChjb250ZW50LCB7IGNvbG9yOiBcImluZm9cIiwgLi4ub3B0IH0pO1xudG9hc3Qud2FybmluZyA9IChjb250ZW50OiBzdHJpbmcsIG9wdD86IFRvYXN0T3B0aW9ucykgPT5cblx0dG9hc3QoY29udGVudCwgeyBjb2xvcjogXCJ3YXJuaW5nXCIsIC4uLm9wdCB9KTtcbnRvYXN0Lm5ldXRyYWwgPSAoY29udGVudDogc3RyaW5nLCBvcHQ/OiBUb2FzdE9wdGlvbnMpID0+XG5cdHRvYXN0KGNvbnRlbnQsIHsgY29sb3I6IFwibmV1dHJhbFwiLCAuLi5vcHQgfSk7XG50b2FzdC5wcm9taXNlID0gYXN5bmMgZnVuY3Rpb24gcHJvbWlzZTxUPihcblx0YWN0aW9uOiAoKSA9PiBQcm9taXNlPFQ+LFxuXHRwcm9wczogVG9hc3RPcHRpb25zICYge1xuXHRcdGxvYWRpbmc6IHN0cmluZztcblx0XHRzdWNjZXNzOiBzdHJpbmc7XG5cdFx0ZXJyb3I6IHN0cmluZztcblx0fSxcbik6IFByb21pc2U8VD4ge1xuXHRjb25zdCB7IGxvYWRpbmcsIHN1Y2Nlc3MsIGVycm9yLCAuLi5vcHQgfSA9IHByb3BzO1xuXHRjb25zdCBpZCA9IHRvYXN0KGxvYWRpbmcsIHsgYnVzeTogdHJ1ZSwgLi4ub3B0IH0pO1xuXHR0cnkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFjdGlvbigpO1xuXHRcdHRvYXN0LnN1Y2Nlc3Moc3VjY2VzcywgeyBpZCwgYnVzeTogZmFsc2UgfSk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSBjYXRjaCAoX2Vycm9yKSB7XG5cdFx0dG9hc3QuZGFuZ2VyKGVycm9yLCB7IGlkLCBidXN5OiBmYWxzZSB9KTtcblx0XHR0aHJvdyBfZXJyb3I7XG5cdH1cbn07XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0JSRUFEQ1JVTUJTID0gc3R5bGVzLmJyZWFkY3J1bWJzLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlQnJlYWRjcnVtYnNNdXRhdGlvbihicmVhZGNydW1iczogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCBicmVhZGN1bWJzIG9mIGJyZWFkY3J1bWJzKVxuXHRcdGJyZWFkY3VtYnMucXVlcnlTZWxlY3RvckFsbChcImxpIGFcIikuZm9yRWFjaCgoY3J1bWIsIGluZGV4LCB7IGxlbmd0aCB9KSA9PiB7XG5cdFx0XHRhdHRyKGNydW1iLCBcImFyaWEtY3VycmVudFwiLCBpbmRleCA9PT0gbGVuZ3RoIC0gMSA/IFwicGFnZVwiIDogbnVsbCk7XG5cdFx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRcdENTU19CUkVBRENSVU1CUyxcblx0XHRoYW5kbGVCcmVhZGNydW1ic011dGF0aW9uLFxuXHQpLFxuKTtcbiIsImV4cG9ydCBkZWZhdWx0IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHtcXG5cXHRkaXNwbGF5OiBncmlkO1xcblxcdGdhcDogdmFyKC0tZHMtc2l6ZS02KTtcXG59XFxuXFxuW2RhdGEtZXZlbnQtcHJveHldIHtcXG5cXHRjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5waWUge1xcblxcdG92ZXJmbG93OiB2aXNpYmxlO1xcblxcdGFzcGVjdC1yYXRpbzogdmFyKC0tbXRkc2MtY2hhcnQtYXNwZWN0KTtcXG59XFxuLnBpZSA+IHBhdGgge1xcblxcdGZpbGw6IHZhcigtLWNvbG9yKTtcXG5cXHRvdXRsaW5lOiBub25lO1xcblxcdHN0cm9rZS13aWR0aDogdmFyKC0tbXRkc2MtY2hhcnQtYm9yZGVyLXdpZHRoKTtcXG5cXHRzdHJva2U6IHZhcigtLW10ZHNjLWNoYXJ0LWJvcmRlci1jb2xvcik7XFxuXFx0dHJhbnNmb3JtLW9yaWdpbjogY2VudGVyO1xcblxcdHRyYW5zaXRpb246IHNjYWxlIDAuMnM7XFxuXFx0dmVjdG9yLWVmZmVjdDogbm9uLXNjYWxpbmctc3Ryb2tlO1xcbn1cXG4ucGllID4gcGF0aDpmb2N1cy12aXNpYmxlLFxcbi5waWUgPiBwYXRoOmhvdmVyIHtcXG5cXHRzY2FsZTogMS4wNTtcXG59XFxuXFxuOmhvc3QoW2RhdGEtdmFyaWFudD1cXFwiZG91Z2hudXRcXFwiXSkgLmF4aXMsXFxuOmhvc3QoW2RhdGEtdmFyaWFudD1cXFwicGllXFxcIl0pIC5heGlzIHtcXG5cXHRkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4uYXhpcyB7XFxuXFx0Zm9udC1zaXplOiB2YXIoLS1kcy1ib2R5LXNtLWZvbnQtc2l6ZSk7XFxuXFx0YXNwZWN0LXJhdGlvOiB2YXIoLS1tdGRzYy1jaGFydC1hc3BlY3QpO1xcblxcdGRpc3BsYXk6IGdyaWQ7XFxuXFx0Z2FwOiB2YXIoLS1tdGRzYy1jaGFydC1heGlzLWdhcCk7XFxuXFx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBmaXQtY29udGVudCg3ZW0pIDFmcjtcXG5cXHRncmlkLXRlbXBsYXRlLXJvd3M6IDFmciBhdXRvO1xcblxcdGdyaWQtdGVtcGxhdGUtYXJlYXM6XFxuXFx0XFx0XFxcInktYXhpcyBjaGFydFxcXCJcXG5cXHRcXHRcXFwieS1heGlzIHgtYXhpc1xcXCI7XFxufVxcblxcbi5heGlzOjpiZWZvcmUge1xcblxcdGNvbnRlbnQ6IFxcXCJcXFwiO1xcblxcdGdyaWQtYXJlYTogY2hhcnQ7XFxuXFx0Ym9yZGVyLXN0eWxlOiBzb2xpZDtcXG5cXHRib3JkZXItd2lkdGg6IDAgMCB2YXIoLS1kcy1ib3JkZXItd2lkdGgtZGVmYXVsdClcXG5cXHRcXHR2YXIoLS1kcy1ib3JkZXItd2lkdGgtZGVmYXVsdCk7XFxuXFx0Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogdmFyKC0tZHMtYm9yZGVyLXJhZGl1cy1sZyk7XFxufVxcblxcbi5heGlzU3RlcHMsXFxuLmF4aXNTdGVwLFxcbi5heGlzR3JvdXBzLFxcbi5heGlzR3JvdXAge1xcblxcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuXFx0ZGlzcGxheTogZ3JpZDtcXG5cXHRwb3NpdGlvbjogcmVsYXRpdmU7IC8qIEhlbHAgLmxpbmVDb250YWluZXIgcG9zaXRpb25pbmcgKi9cXG59XFxuXFxuLmF4aXNHcm91cHMge1xcblxcdGdhcDogdmFyKC0tbXRkc2MtY2hhcnQtYXhpcy1nYXApO1xcblxcdGdyaWQtYXJlYTogY2hhcnQgLyBjaGFydCAvIHgtYXhpcyAvIGNoYXJ0O1xcblxcdGdyaWQtdGVtcGxhdGUtcm93czogc3ViZ3JpZDtcXG5cXHRncmlkLWF1dG8tY29sdW1uczogbWlubWF4KDAsIDFmcik7XFxuXFx0cGFkZGluZzogMCB2YXIoLS1tdGRzYy1jaGFydC1heGlzLWdhcCk7XFxuXFx0dGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4uYXhpc0dyb3VwIHtcXG5cXHRncmlkLXJvdzogaW5oZXJpdDtcXG5cXHRncmlkLXRlbXBsYXRlOiBpbmhlcml0O1xcbn1cXG4uYXhpc0dyb3VwOjphZnRlciB7XFxuXFx0Y29udGVudDogYXR0cihkYXRhLWxhYmVsKTtcXG59XFxuLmF4aXNTdGVwcyB7XFxuXFx0Z3JpZC1hdXRvLXJvd3M6IDFmcjtcXG5cXHRncmlkLWFyZWE6IGNoYXJ0IC8geS1heGlzIC8gY2hhcnQgLyBjaGFydDtcXG5cXHRncmlkLXRlbXBsYXRlOiAxcHggLyBzdWJncmlkO1xcbn1cXG4uYXhpc1N0ZXAge1xcblxcdGdyaWQtY29sdW1uOiBpbmhlcml0O1xcblxcdGdyaWQtdGVtcGxhdGUtY29sdW1uczogaW5oZXJpdDtcXG5cXHRwbGFjZS1jb250ZW50OiBlbmQgc3RhcnQ7XFxuXFx0dGV4dC1hbGlnbjogcmlnaHQ7XFxufVxcbi5heGlzU3RlcDo6YWZ0ZXIge1xcblxcdGJvcmRlci1ib3R0b206IHZhcigtLW10ZHNjLWNoYXJ0LWF4aXMtYm9yZGVyKTtcXG5cXHRjb250ZW50OiBcXFwiXFxcIjtcXG59XFxuLmF4aXNTdGVwOjpiZWZvcmUge1xcblxcdGNvbnRlbnQ6IGF0dHIoZGF0YS1sYWJlbCk7XFxuXFx0dHJhbnNsYXRlOiAwIDUwJTtcXG59XFxuLmF4aXNTdGVwW2RhdGEtbGFiZWw9XFxcIjBcXFwiXTo6YWZ0ZXIge1xcblxcdG9wYWNpdHk6IDA7IC8qIEhpZGUgMCBsaW5lIGFzIGl0IG92ZXJsYXBwcyB3aXRoIC5heGlzOjpiZWZvcmUgKi9cXG59XFxuXFxuOmhvc3QoW2RhdGEtdmFyaWFudHw9XFxcImNvbHVtblxcXCJdKSAuYXhpc1N0ZXBzLFxcbjpob3N0KFtkYXRhLXZhcmlhbnR8PVxcXCJjb2x1bW5cXFwiXSkgLmF4aXNHcm91cCB7XFxuXFx0ZGlyZWN0aW9uOiBydGw7IC8qIFJldmVyc2Ugb3JkZXJzICovXFxufVxcbjpob3N0KFtkYXRhLXZhcmlhbnR8PVxcXCJjb2x1bW5cXFwiXSkgLmF4aXNTdGVwcyA+ICosXFxuOmhvc3QoW2RhdGEtdmFyaWFudHw9XFxcImNvbHVtblxcXCJdKSAuYXhpc0dyb3VwID4gKiB7XFxuXFx0ZGlyZWN0aW9uOiBsdHI7XFxufVxcbjpob3N0KFtkYXRhLXZhcmlhbnR8PVxcXCJjb2x1bW5cXFwiXSkgLmF4aXNHcm91cHMge1xcblxcdGdyaWQtYXJlYTogY2hhcnQgLyB5LWF4aXMgLyBjaGFydCAvIGNoYXJ0O1xcblxcdGdyaWQtdGVtcGxhdGU6IG5vbmUgLyBzdWJncmlkO1xcblxcdHBhZGRpbmc6IHZhcigtLW10ZHNjLWNoYXJ0LWF4aXMtZ2FwKSAwO1xcblxcdHJvdy1nYXA6IHZhcigtLW10ZHNjLWNoYXJ0LWF4aXMtZ2FwKTtcXG5cXHR0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuOmhvc3QoW2RhdGEtdmFyaWFudHw9XFxcImNvbHVtblxcXCJdKSAuYXhpc0dyb3VwOjphZnRlciB7XFxuXFx0YWxpZ24tc2VsZjogY2VudGVyOyAvKiBTaW5jZSB0ZXh0LWFsaWduIGRvZXMgbm90IHdvcmsgdmVydGljYWxseSAqL1xcbn1cXG46aG9zdChbZGF0YS12YXJpYW50fD1cXFwiY29sdW1uXFxcIl0pIC5heGlzR3JvdXAge1xcblxcdGdyaWQtY29sdW1uOiBpbmhlcml0O1xcblxcdGdyaWQtcm93OiBhdXRvO1xcbn1cXG46aG9zdChbZGF0YS12YXJpYW50fD1cXFwiY29sdW1uXFxcIl0pIC5heGlzU3RlcHMge1xcblxcdGdyaWQtYXV0by1jb2x1bW5zOiAxZnI7XFxuXFx0Z3JpZC1hcmVhOiBjaGFydCAvIGNoYXJ0IC8geC1heGlzIC8gY2hhcnQ7XFxuXFx0Z3JpZC10ZW1wbGF0ZTogc3ViZ3JpZCAvIDFweDtcXG59XFxuOmhvc3QoW2RhdGEtdmFyaWFudHw9XFxcImNvbHVtblxcXCJdKSAuYXhpc1N0ZXAge1xcblxcdGdyaWQtcm93OiBpbmhlcml0O1xcblxcdGdyaWQtY29sdW1uOiBhdXRvO1xcblxcdGdyaWQtdGVtcGxhdGUtcm93czogaW5oZXJpdDtcXG5cXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG5vbmU7XFxufVxcbjpob3N0KFtkYXRhLXZhcmlhbnR8PVxcXCJjb2x1bW5cXFwiXSkgLmF4aXNTdGVwOjphZnRlciB7XFxuXFx0b3JkZXI6IC0xO1xcblxcdGJvcmRlci1sZWZ0OiB2YXIoLS1tdGRzYy1jaGFydC1heGlzLWJvcmRlcik7XFxuXFx0Ym9yZGVyLWJvdHRvbTogMDtcXG59XFxuOmhvc3QoW2RhdGEtdmFyaWFudHw9XFxcImNvbHVtblxcXCJdKSAuYXhpc1N0ZXA6OmJlZm9yZSB7XFxuXFx0dHJhbnNsYXRlOiAtNTAlIDA7XFxufVxcblxcbi5heGlzR3JvdXBDb250ZW50IHtcXG5cXHRkaXNwbGF5OiBmbGV4O1xcbn1cXG46aG9zdChbZGF0YS12YXJpYW50PVxcXCJiYXItc3RhY2tlZFxcXCJdKSAuYXhpc0dyb3VwQ29udGVudCB7XFxuXFx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xcbn1cXG46aG9zdChbZGF0YS12YXJpYW50PVxcXCJjb2x1bW5cXFwiXSkgLmF4aXNHcm91cENvbnRlbnQge1xcblxcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxufVxcbjpob3N0KFtkYXRhLXZhcmlhbnQ9XFxcImNvbHVtbi1zdGFja2VkXFxcIl0pIC5heGlzR3JvdXBDb250ZW50IHtcXG5cXHRmbGV4LWRpcmVjdGlvbjogcm93O1xcbn1cXG5cXG4uYmFyIHtcXG5cXHQtLXNpemU6IGNhbGModmFyKC0tdmFsdWUpIC8gdmFyKC0tdG90YWwsIDEpICogMTAwJSk7XFxuXFx0YWxpZ24tc2VsZjogZW5kO1xcblxcdGJhY2tncm91bmQ6IHZhcigtLWNvbG9yKTtcXG5cXHRib3JkZXI6IHZhcigtLW10ZHNjLWNoYXJ0LWJvcmRlci1jb2xvcikgc29saWQgdmFyKC0tbXRkc2MtY2hhcnQtYm9yZGVyLXdpZHRoKTtcXG5cXHRib3JkZXItcmFkaXVzOiB2YXIoLS1kcy1ib3JkZXItcmFkaXVzLXNtKSB2YXIoLS1kcy1ib3JkZXItcmFkaXVzLXNtKSAwIDA7XFxuXFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcXG5cXHRoZWlnaHQ6IHZhcigtLXNpemUpO1xcblxcdHdpZHRoOiAxMDAlO1xcbn1cXG4uYmFyOmZvY3VzLXZpc2libGUsXFxuLmxpbmVQb2ludDpmb2N1cy12aXNpYmxlIHtcXG5cXHRib3gtc2hhZG93OiB2YXIoLS1kc2MtZm9jdXMtYm94U2hhZG93KTtcXG5cXHRvdXRsaW5lOiB2YXIoLS1kc2MtZm9jdXMtb3V0bGluZSk7XFxuXFx0b3V0bGluZS1vZmZzZXQ6IHZhcigtLWRzLWJvcmRlci13aWR0aC1mb2N1cyk7XFxuXFx0ei1pbmRleDogMjsgLyogei1pbmRleCB0byBwbGFjZSBvbiB0b3Agd2hlbiBvdXRsaW5lZCAqL1xcbn1cXG5cXG46aG9zdChbZGF0YS12YXJpYW50fD1cXFwiY29sdW1uXFxcIl0pIC5iYXIge1xcblxcdGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tZHMtYm9yZGVyLXJhZGl1cy1zbSkgdmFyKC0tZHMtYm9yZGVyLXJhZGl1cy1zbSkgMDtcXG5cXHR3aWR0aDogdmFyKC0tc2l6ZSk7XFxuXFx0aGVpZ2h0OiAxMDAlO1xcblxcdGFsaWduLXNlbGY6IHN0YXJ0O1xcbn1cXG5cXG4vKiBQcmV2ZW50IGRvdWJsZSBib3JkZXIgLSB1c2luZyBtYXJnaW4gdG8gc2VlIGJvcmRlciBhcm91bmQgYmFycyAqL1xcbi8qIFByZXZlbnQgZG91YmxlIGJvcmRlciAtIHVzaW5nIGJvcmRlciB0byBhdm9pZCBhZmZlY3Rpbmcgc2l6ZSAqL1xcbjpob3N0KDpub3QoW2RhdGEtdmFyaWFudF0pKSAuYmFyICsgLmJhcixcXG46aG9zdChbZGF0YS12YXJpYW50PVxcXCJiYXJcXFwiXSkgLmJhciArIC5iYXIge1xcblxcdG1hcmdpbi1sZWZ0OiAtMXB4O1xcbn1cXG46aG9zdChbZGF0YS12YXJpYW50PVxcXCJiYXItc3RhY2tlZFxcXCJdKSAuYmFyOm5vdCg6bGFzdC1jaGlsZCkge1xcblxcdGJvcmRlci1yYWRpdXM6IDA7XFxufVxcbjpob3N0KFtkYXRhLXZhcmlhbnQ9XFxcImJhci1zdGFja2VkXFxcIl0pIC5iYXIgKyAuYmFyIHtcXG5cXHRib3JkZXItYm90dG9tOiBub25lO1xcbn1cXG46aG9zdChbZGF0YS12YXJpYW50PVxcXCJjb2x1bW5cXFwiXSkgLmJhciArIC5iYXIge1xcblxcdG1hcmdpbi10b3A6IC0xcHg7XFxufVxcbjpob3N0KFtkYXRhLXZhcmlhbnQ9XFxcImNvbHVtbi1zdGFja2VkXFxcIl0pIC5iYXI6bm90KDpsYXN0LWNoaWxkKSB7XFxuXFx0Ym9yZGVyLXJhZGl1czogMDtcXG59XFxuOmhvc3QoW2RhdGEtdmFyaWFudD1cXFwiY29sdW1uLXN0YWNrZWRcXFwiXSkgLmJhciArIC5iYXIge1xcblxcdGJvcmRlci1sZWZ0OiBub25lO1xcbn1cXG5cXG4ubGluZUNvbnRhaW5lciB7XFxuXFx0YWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuXFx0ZGlzcGxheTogZmxleDtcXG5cXHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuXFx0cG9pbnRlci1ldmVudHM6IG5vbmU7XFxuXFx0Z3JpZC1yb3c6IGNoYXJ0O1xcbn1cXG4ubGluZUNvbnRhaW5lciA+IHN2ZyxcXG4ubGluZUNvbnRhaW5lciB7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdHdpZHRoOiAxMDAlO1xcblxcdGhlaWdodDogMTAwJTtcXG59XFxuLmxpbmVDb250YWluZXIgPiBzdmcge1xcblxcdG92ZXJmbG93OiBjbGlwIHZpc2libGU7XFxufVxcbi5saW5lQ29udGFpbmVyID4gZGl2W3JvbGU9XFxcImxpc3RpdGVtXFxcIl0ge1xcblxcdGRpc3BsYXk6IGNvbnRlbnRzO1xcbn1cXG5cXG46aG9zdChbZGF0YS12YXJpYW50fD1cXFwibGluZVxcXCJdKSAuYXhpc0dyb3VwcyxcXG46aG9zdChbZGF0YS12YXJpYW50fD1cXFwiYXJlYVxcXCJdKSAuYXhpc0dyb3VwcyB7XFxuXFx0cGFkZGluZzogMDtcXG59XFxuXFxuLmxpbmUsXFxuLmxpbmVTaGFkZSB7XFxuXFx0ZmlsbDogbm9uZTtcXG5cXHRzdHJva2U6IHZhcigtLWNvbG9yKTtcXG5cXHRzdHJva2UtbGluZWpvaW46IHJvdW5kO1xcblxcdHN0cm9rZS1saW5lY2FwOiByb3VuZDtcXG5cXHRzdHJva2Utd2lkdGg6IDM7XFxuXFx0dmVjdG9yLWVmZmVjdDogbm9uLXNjYWxpbmctc3Ryb2tlO1xcbn1cXG4ubGluZSB7XFxuXFx0ZmlsdGVyOiBicmlnaHRuZXNzKDAuOCkgc2F0dXJhdGUoMik7IC8qIEVuc3VyZSBtb3JlIGNvbnRyYXN0IGZvciBsaW5lIGNvbG9ycyAqL1xcbn1cXG4ubGluZVNoYWRlIHtcXG5cXHRzdHJva2U6IG5vbmU7XFxuXFx0ZmlsbDogdmFyKC0tY29sb3IpO1xcblxcdG9wYWNpdHk6IDAuMztcXG5cXHRtYXNrOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCBibGFjaywgdHJhbnNwYXJlbnQpO1xcbn1cXG4ubGluZVBvaW50IHtcXG5cXHQtLXNpemU6IHZhcigtLWRzLXNpemUtMyk7XFxuXFx0YmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3IpO1xcblxcdGJvcmRlci1yYWRpdXM6IHZhcigtLWRzLWJvcmRlci1yYWRpdXMtZnVsbCk7XFxuXFx0Ym9yZGVyOiB2YXIoLS1tdGRzYy1jaGFydC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLW10ZHNjLWNoYXJ0LWJvcmRlci1jb2xvcik7XFxuXFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcXG5cXHRoZWlnaHQ6IHZhcigtLXNpemUpO1xcblxcdG1hcmdpbjogY2FsYyh2YXIoLS1zaXplKSAvIC0yKTtcXG5cXHRwYWRkaW5nOiAwO1xcblxcdHBvaW50ZXItZXZlbnRzOiBhbGw7XFxuXFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblxcdHRvcDogY2FsYygxMDAlIC0gdmFyKC0tdmFsdWUpIC8gdmFyKC0tdG90YWwsIDEpICogMTAwJSk7XFxuXFx0dHJhbnNpdGlvbjogc2NhbGUgMC4ycztcXG5cXHR3aWR0aDogdmFyKC0tc2l6ZSk7XFxuXFx0ei1pbmRleDogMjtcXG59XFxuLmxpbmVQb2ludDpmb2N1cy12aXNpYmxlLFxcbi5saW5lUG9pbnQ6aG92ZXIge1xcblxcdHNjYWxlOiAxLjM7XFxufVxcbi5saW5lUG9pbnQ6OmJlZm9yZSB7XFxuXFx0Y29udGVudDogXFxcIlxcXCI7XFxuXFx0aW5zZXQ6IGNhbGModmFyKC0tZHMtc2l6ZS0yKSAqIC0xKTsgLyogSW5jcmVhc2UgY2xpY2sgc3VyZmFjZSAqL1xcblxcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuXFxuLmxlZ2VuZHMge1xcblxcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuXFx0ZGlzcGxheTogZmxleDtcXG5cXHRmbGV4LXdyYXA6IHdyYXA7XFxuXFx0Z2FwOiB2YXIoLS1kcy1zaXplLTIpIHZhcigtLWRzLXNpemUtNSk7XFxuXFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxufVxcbi5sZWdlbmQge1xcblxcdGRpc3BsYXk6IGZsZXg7XFxuXFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cXHRnYXA6IHZhcigtLWRzLXNpemUtMik7XFxufVxcbi5sZWdlbmQ6OmJlZm9yZSB7XFxuXFx0YmFja2dyb3VuZDogdmFyKC0tY29sb3IpO1xcblxcdGJvcmRlci1yYWRpdXM6IHZhcigtLWRzLWJvcmRlci1yYWRpdXMtZnVsbCk7XFxuXFx0Ym9yZGVyOiB2YXIoLS1tdGRzYy1jaGFydC1ib3JkZXItY29sb3IpIHNvbGlkIHZhcigtLW10ZHNjLWNoYXJ0LWJvcmRlci13aWR0aCk7XFxuXFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcXG5cXHRjb250ZW50OiBcXFwiXFxcIjtcXG5cXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuXFx0aGVpZ2h0OiB2YXIoLS1kcy1zaXplLTUpO1xcblxcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuXFx0d2lkdGg6IHZhcigtLWRzLXNpemUtNSk7XFxufVxcblwiIiwiaW1wb3J0IHsgdGFnIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0RGF0YSB9IGZyb20gXCIuL2NoYXJ0LWVsZW1lbnRcIjtcblxudHlwZSBDb25maWcgPSB7IHR5cGU6IHN0cmluZyB9O1xuXG5leHBvcnQgZnVuY3Rpb24gdG9BeGlzKGRhdGE6IENoYXJ0RGF0YSwgeyB0eXBlIH06IENvbmZpZykge1xuXHRjb25zdCBpc1N0YWNrZWQgPSB0eXBlID09PSBcInN0YWNrZWRcIjtcblx0Y29uc3QgbWF4ID0gZGF0YVswXS5yZWR1Y2UoKGFjYywgXywgaW5kZXgpID0+IHtcblx0XHRjb25zdCBhbGwgPSBkYXRhLm1hcCgocm93KSA9PiByb3dbaW5kZXhdLm51bWJlcik7XG5cdFx0Y29uc3Qgc3VtID0gYWxsLnJlZHVjZSgoYWNjLCBudW0pID0+IGFjYyArIG51bSwgMCk7XG5cdFx0cmV0dXJuIE1hdGgubWF4KGFjYywgLi4uKGlzU3RhY2tlZCA/IFtzdW1dIDogYWxsKSk7XG5cdH0sIDApO1xuXG5cdGNvbnN0IGRpZ2l0cyA9IDEwICoqIChgJHt+fm1heH1gLmxlbmd0aCAtIDEpOyAvLyBHZXQgYW1vdW50IG9mIGRpZ2l0cyBpbiB0b3RhbCBudW1iZXJcblx0Y29uc3Qgc3RlcCA9IG1heCAvIGRpZ2l0cyA8IDUgPyBkaWdpdHMgLyAyIDogZGlnaXRzOyAvLyBJZiB3ZSBnZXQgbGVzcyB0aGFuIDUgc3RlcHMsIG1ha2Ugc21hbGxlciBzdGVwc1xuXHRjb25zdCB0b3RhbCA9IE1hdGguY2VpbChtYXggLyBzdGVwKSAqIHN0ZXA7XG5cdGNvbnN0IGdyb3VwcyA9IHRhZyhcImRpdlwiLCB7IGNsYXNzOiBcImF4aXNHcm91cHNcIiB9KTtcblx0Y29uc3Qgc3RlcHMgPSB0YWcoXCJkaXZcIik7XG5cblx0c3RlcHMuY2xhc3NMaXN0LmFkZChcImF4aXNTdGVwc1wiKTtcblx0c3RlcHMuYXBwZW5kKFxuXHRcdC4uLkFycmF5LmZyb20oeyBsZW5ndGg6IHRvdGFsIC8gc3RlcCArIDEgfSwgKF8sIGkpID0+IGdldE51bShzdGVwICogaSkpXG5cdFx0XHQucmV2ZXJzZSgpXG5cdFx0XHQubWFwKChudW0pID0+IHRhZyhcImRpdlwiLCB7IGNsYXNzOiBcImF4aXNTdGVwXCIsIFwiZGF0YS1sYWJlbFwiOiBudW0gfSkpLFxuXHQpO1xuXG5cdGNvbnN0IGF4aXMgPSB0YWcoXCJkaXZcIiwge1xuXHRcdFwiYXJpYS1sYWJlbFwiOiBkYXRhWzBdWzBdLnZhbHVlIHx8IG51bGwsXG5cdFx0Y2xhc3M6IFwiYXhpc1wiLFxuXHRcdHJvbGU6IFwiZmlndXJlXCIsXG5cdH0pO1xuXHRheGlzLnN0eWxlLnNldFByb3BlcnR5KFwiLS1ncm91cHNcIiwgYCR7ZGF0YS5sZW5ndGggLSAxfWApO1xuXHRheGlzLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3RhbFwiLCBgJHt0b3RhbH1gKTtcblx0YXhpcy5hcHBlbmQoc3RlcHMsIGdyb3Vwcyk7XG5cblx0cmV0dXJuIHsgdG90YWwsIGdyb3VwcywgYXhpcyB9O1xufVxuXG5jb25zdCBnZXROdW0gPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoKS5mb3JtYXQ7XG4iLCJpbXBvcnQgeyB0YWcgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnREYXRhIH0gZnJvbSBcIi4vY2hhcnQtZWxlbWVudFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gdG9CYXJzKGRhdGE6IENoYXJ0RGF0YSkge1xuXHRyZXR1cm4gZGF0YVswXS5zbGljZSgxKS5tYXAoKHsgdmFsdWUsIGV2ZW50IH0sIGluZGV4KSA9PiB7XG5cdFx0Y29uc3QgZ3JvdXAgPSB0YWcoXCJkaXZcIiwgeyBjbGFzczogXCJheGlzR3JvdXBcIiwgXCJkYXRhLWxhYmVsXCI6IHZhbHVlIH0pO1xuXHRcdGNvbnN0IGNvbnRlbnQgPSBncm91cC5hcHBlbmRDaGlsZChcblx0XHRcdHRhZyhcImRpdlwiLCB7IGNsYXNzOiBcImF4aXNHcm91cENvbnRlbnRcIiB9KSxcblx0XHQpO1xuXG5cdFx0ZGF0YVxuXHRcdFx0LnNsaWNlKDEpXG5cdFx0XHQubWFwKCh2YWx1ZXMpID0+IHZhbHVlc1tpbmRleCArIDFdKVxuXHRcdFx0Lm1hcCgoeyB0b29sdGlwLCBzdHlsZSwgbnVtYmVyIH0pID0+XG5cdFx0XHRcdGNvbnRlbnQuYXBwZW5kQ2hpbGQoXG5cdFx0XHRcdFx0dGFnKFwiZGl2XCIsIHtcblx0XHRcdFx0XHRcdFwiYXJpYS1sYWJlbFwiOiB0b29sdGlwLFxuXHRcdFx0XHRcdFx0XCJkYXRhLWV2ZW50XCI6IGV2ZW50LFxuXHRcdFx0XHRcdFx0Y2xhc3M6IFwiYmFyXCIsXG5cdFx0XHRcdFx0XHRyb2xlOiBcImltZ1wiLFxuXHRcdFx0XHRcdFx0c3R5bGU6IGAke3N0eWxlfTsgLS12YWx1ZTogJHtudW1iZXJ9YCxcblx0XHRcdFx0XHRcdHRhYmluZGV4OiBcIjBcIixcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0KSxcblx0XHRcdCk7XG5cdFx0cmV0dXJuIGdyb3VwO1xuXHR9KTtcbn1cbiIsImltcG9ydCB7IGF0dHIsIHRhZyB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBDaGFydERhdGEgfSBmcm9tIFwiLi9jaGFydC1lbGVtZW50XCI7XG5cbnR5cGUgQ29uZmlnID0ge1xuXHR0b3RhbDogbnVtYmVyO1xuXHR0eXBlOiBzdHJpbmc7XG5cdHZhcmlhbnQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0xpbmVzKGRhdGE6IENoYXJ0RGF0YSwgeyB0b3RhbCwgdHlwZSwgdmFyaWFudCB9OiBDb25maWcpIHtcblx0Y29uc3Qgc21vb3RoaW5nID0gTnVtYmVyLnBhcnNlRmxvYXQodHlwZSB8fCBcIjEwXCIpIHx8IDA7XG5cdGNvbnN0IGdyb3VwID0gdGFnKFwiZGl2XCIsIHsgY2xhc3M6IFwiYXhpc0dyb3VwXCIgfSk7XG5cdGRhdGEuc2xpY2UoMSkuZm9yRWFjaCgoWywgLi4udmFsdWVzXSkgPT4ge1xuXHRcdGNvbnN0IGxpbmVDb250YWluZXIgPSB0YWcoXCJkaXZcIiwge1xuXHRcdFx0Y2xhc3M6IGBsaW5lQ29udGFpbmVyYCxcblx0XHRcdHJvbGU6IFwibGlzdFwiLFxuXHRcdFx0c3R5bGU6IHZhbHVlc1swXS5zdHlsZSxcblx0XHR9KTtcblxuXHRcdGNvbnN0IHBhdGhEZWZpbnRpb24gPSB0b1BhdGgoXG5cdFx0XHR2YWx1ZXMubWFwKCh7IG51bWJlciB9LCBpbmRleCwgeyBsZW5ndGggfSkgPT4gW1xuXHRcdFx0XHQoMTAwIC8gKGxlbmd0aCAtIDEpKSAqIGluZGV4LFxuXHRcdFx0XHQxMDAgLSAobnVtYmVyIC8gdG90YWwpICogMTAwLFxuXHRcdFx0XSksXG5cdFx0XHRzbW9vdGhpbmcgLyAxMDAsXG5cdFx0KTtcblxuXHRcdGNvbnN0IGxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInN2Z1wiKTtcblx0XHRhdHRyKGxpbmUsIFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpO1xuXHRcdGF0dHIobGluZSwgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsIFwibm9uZVwiKTtcblx0XHRhdHRyKGxpbmUsIFwidmlld0JveFwiLCBcIjAgMCAxMDAgMTAwXCIpO1xuXG5cdFx0Y29uc3QgcGF0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwicGF0aFwiKTtcblx0XHRhdHRyKHBhdGgsIFwiY2xhc3NcIiwgXCJsaW5lXCIpO1xuXHRcdGF0dHIocGF0aCwgXCJkXCIsIHBhdGhEZWZpbnRpb24pO1xuXHRcdGF0dHIocGF0aCwgXCJmaWxsXCIsIFwibm9uZVwiKTtcblx0XHRhdHRyKHBhdGgsIFwic3Ryb2tlXCIsIFwiY3VycmVudENvbG9yXCIpO1xuXG5cdFx0aWYgKHZhcmlhbnQgPT09IFwiYXJlYVwiKSB7XG5cdFx0XHRjb25zdCBsaW5lU2hhZGUgPSBwYXRoLmNsb25lTm9kZSh0cnVlKSBhcyBTVkdQYXRoRWxlbWVudDtcblx0XHRcdGF0dHIobGluZVNoYWRlLCBcImRcIiwgYE0tMTAwLDEwMCBMJHtwYXRoRGVmaW50aW9uLnNsaWNlKDEpfUwyMDAsMTAwYCk7XG5cdFx0XHRhdHRyKGxpbmVTaGFkZSwgXCJjbGFzc1wiLCBcImxpbmVTaGFkZVwiKTtcblx0XHRcdGxpbmUuYXBwZW5kKGxpbmVTaGFkZSk7XG5cdFx0fVxuXG5cdFx0dmFsdWVzLmZvckVhY2goKHsgbnVtYmVyLCB0b29sdGlwLCBldmVudCB9KSA9PiB7XG5cdFx0XHRjb25zdCBjb2wgPSB0YWcoXCJkaXZcIiwgeyByb2xlOiBcImxpc3RpdGVtXCIgfSk7XG5cdFx0XHRjb2wuYXBwZW5kQ2hpbGQoXG5cdFx0XHRcdHRhZyhcImRpdlwiLCB7XG5cdFx0XHRcdFx0XCJhcmlhLWxhYmVsXCI6IHRvb2x0aXAsXG5cdFx0XHRcdFx0XCJkYXRhLWV2ZW50XCI6IGV2ZW50LFxuXHRcdFx0XHRcdHRhYmluZGV4OiBcIjBcIixcblx0XHRcdFx0XHRjbGFzczogXCJsaW5lUG9pbnRcIixcblx0XHRcdFx0XHRyb2xlOiBcImltZ1wiLFxuXHRcdFx0XHRcdHN0eWxlOiBgLS12YWx1ZTogJHtudW1iZXJ9YCxcblx0XHRcdFx0fSksXG5cdFx0XHQpO1xuXHRcdFx0bGluZUNvbnRhaW5lci5hcHBlbmQoY29sKTtcblx0XHR9KTtcblxuXHRcdGxpbmVDb250YWluZXIuYXBwZW5kQ2hpbGQobGluZSkuYXBwZW5kKHBhdGgpO1xuXHRcdGdyb3VwLmFwcGVuZChsaW5lQ29udGFpbmVyKTtcblx0fSk7XG5cdHJldHVybiBncm91cDtcbn1cblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9vYnNlcnZhYmxlaHEuY29tL0BuZHJ5L3Ntb290aC1hLXN2Zy1wYXRoLXdpdGgtY3ViaWMtYmV6aWVyLWN1cnZlc1xuY29uc3QgdG9QYXRoID0gKHBvaW50czogbnVtYmVyW11bXSwgczogbnVtYmVyKSA9PlxuXHRwb2ludHMubWFwKChbeCwgeV0sIGksIGEpID0+IChpID8gc21vb3RoKGksIGEsIHMpIDogYE0ke3h9LCR7eX1gKSkuam9pbihcIiBcIik7XG5jb25zdCBhZGQgPSAoW2F4LCBheV06IG51bWJlcltdLCBbYngsIGJ5XTogbnVtYmVyW10pID0+IFtheCArIGJ4LCBheSArIGJ5XTtcbmNvbnN0IHN1YiA9IChbYXgsIGF5XTogbnVtYmVyW10sIFtieCwgYnldOiBudW1iZXJbXSkgPT4gW2F4IC0gYngsIGF5IC0gYnldO1xuY29uc3Qgc2NhbGUgPSAoczogbnVtYmVyLCBbeCwgeV06IG51bWJlcltdKSA9PiBbcyAqIHgsIHMgKiB5XTtcbmNvbnN0IHNtb290aCA9IChpOiBudW1iZXIsIGFsbDogbnVtYmVyW11bXSwgc21vb3RoOiBudW1iZXIpID0+IHtcblx0Y29uc3Qgc3RhcnQgPSBhbGxbaSAtIDFdO1xuXHRjb25zdCBlbmQgPSBhbGxbaV07XG5cdGNvbnN0IFtjc1gsIGNzWV0gPSBhZGQoc3RhcnQsIHNjYWxlKHNtb290aCwgc3ViKGVuZCwgYWxsW2kgLSAyXSB8fCBzdGFydCkpKTsgLy8gc3RhcnQgY29udHJvbCBwb2ludFxuXHRjb25zdCBbY2VYLCBjZVldID0gYWRkKGVuZCwgc2NhbGUoc21vb3RoLCBzdWIoc3RhcnQsIGFsbFtpICsgMV0gfHwgZW5kKSkpOyAvLyBlbmQgY29udHJvbCBwb2ludFxuXHRyZXR1cm4gYEMgJHtjc1h9LCR7Y3NZfSAke2NlWH0sJHtjZVl9ICR7ZW5kWzBdfSwke2VuZFsxXX1gO1xufTtcbiIsImltcG9ydCB7IGF0dHIgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnREYXRhIH0gZnJvbSBcIi4vY2hhcnQtZWxlbWVudFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gdG9QaWVzKGRhdGE6IENoYXJ0RGF0YSwgeyB2YXJpYW50IH06IHsgdmFyaWFudDogc3RyaW5nIH0pIHtcblx0Y29uc3QgcGllID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJzdmdcIik7XG5cdGF0dHIocGllLCBcImNsYXNzXCIsIFwicGllXCIpO1xuXHRhdHRyKHBpZSwgXCJ2aWV3Qm94XCIsIFwiMCAwIDEwMCAxMDBcIik7XG5cblx0bGV0IG9mZnNldCA9IDA7XG5cdGNvbnN0IHJhZGl1cyA9IDUwO1xuXHRjb25zdCBpbm5lciA9IHZhcmlhbnQgPT09IFwiZG91Z2hudXRcIiA/IDI1IDogMDtcblx0Y29uc3QgdG90YWwgPSBkYXRhLnNsaWNlKDEpLnJlZHVjZSgodG90LCBbLCB0ZF0pID0+IHRvdCArIHRkLm51bWJlciwgMCk7XG5cblx0ZGF0YS5zbGljZSgxKS5mb3JFYWNoKChbLCB7IHRvb2x0aXAsIG51bWJlciwgZXZlbnQsIHN0eWxlIH1dKSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwicGF0aFwiKTtcblx0XHRjb25zdCBzdGFydCA9IG9mZnNldCAvIHRvdGFsO1xuXHRcdG9mZnNldCArPSBudW1iZXI7XG5cdFx0Y29uc3QgZW5kID0gb2Zmc2V0IC8gdG90YWw7XG5cdFx0Y29uc3QgbGFyZ2VBcmMgPSBlbmQgLSBzdGFydCA+IDAuNSA/IDEgOiAwO1xuXHRcdGNvbnN0IGEwID0gMiAqIE1hdGguUEkgKiAoc3RhcnQgLSAwLjI1KTtcblx0XHRjb25zdCBhMSA9IDIgKiBNYXRoLlBJICogKGVuZCAtIDAuMjUpO1xuXHRcdGNvbnN0IHgwID0gTWF0aC5jb3MoYTApO1xuXHRcdGNvbnN0IHkwID0gTWF0aC5zaW4oYTApO1xuXHRcdGNvbnN0IHgxID0gTWF0aC5jb3MoYTEpO1xuXHRcdGNvbnN0IHkxID0gTWF0aC5zaW4oYTEpO1xuXHRcdGNvbnN0IGQgPSBgTSAke3JhZGl1cyArIGlubmVyICogeDB9ICR7cmFkaXVzICsgaW5uZXIgKiB5MH0gTCAke3JhZGl1cyArIHJhZGl1cyAqIHgwfSAke3JhZGl1cyArIHJhZGl1cyAqIHkwfSBBICR7cmFkaXVzfSAke3JhZGl1c30gMCAke2xhcmdlQXJjfSAxICR7cmFkaXVzICsgcmFkaXVzICogeDF9ICR7cmFkaXVzICsgcmFkaXVzICogeTF9IEwgJHtyYWRpdXMgKyBpbm5lciAqIHgxfSAke3JhZGl1cyArIGlubmVyICogeTF9IEEgJHtpbm5lcn0gJHtpbm5lcn0gMCAke2xhcmdlQXJjfSAwICR7cmFkaXVzICsgaW5uZXIgKiB4MH0gJHtyYWRpdXMgKyBpbm5lciAqIHkwfWA7XG5cblx0XHRhdHRyKHBhdGgsIFwiYXJpYS1sYWJlbFwiLCB0b29sdGlwKTtcblx0XHRhdHRyKHBhdGgsIFwiZGF0YS1ldmVudFwiLCBldmVudCk7XG5cdFx0YXR0cihwYXRoLCBcInN0eWxlXCIsIHN0eWxlKTtcblx0XHRhdHRyKHBhdGgsIFwiZFwiLCBkKTtcblx0XHRhdHRyKHBhdGgsIFwicm9sZVwiLCBcImltZ1wiKTtcblx0XHRhdHRyKHBhdGgsIFwidGFiaW5kZXhcIiwgXCIwXCIpO1xuXHRcdHBpZS5hcHBlbmRDaGlsZChwYXRoKTtcblx0fSk7XG5cdHJldHVybiBwaWU7XG59XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgSVNfQlJPV1NFUiwgTVREU0VsZW1lbnQsIG9mZiwgb24sIHRhZyB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IGNzcyBmcm9tIFwiLi9jaGFydC5jc3M/cmF3XCI7XG5pbXBvcnQgeyB0b0F4aXMgfSBmcm9tIFwiLi9jaGFydC1heGlzXCI7XG5pbXBvcnQgeyB0b0JhcnMgfSBmcm9tIFwiLi9jaGFydC1iYXJzXCI7XG5pbXBvcnQgeyB0b0xpbmVzIH0gZnJvbSBcIi4vY2hhcnQtbGluZXNcIjtcbmltcG9ydCB7IHRvUGllcyB9IGZyb20gXCIuL2NoYXJ0LXBpZXNcIjtcblxuZXhwb3J0IHR5cGUgQ2hhcnREYXRhID0gUmV0dXJuVHlwZTx0eXBlb2YgdG9EYXRhPjtcblxuY29uc3QgRVZFTlRTID0gXCJjbGljayxrZXlkb3duLG1vdXNlbW92ZSxtb3VzZW91dFwiO1xuY29uc3QgVE9PTFRJUF9JRCA9IFwibXRkcy1jaGFydC10b29sdGlwXCI7XG5jb25zdCBUT09MVElQID0gSVNfQlJPV1NFUlxuXHQ/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFRPT0xUSVBfSUQpIHx8XG5cdFx0dGFnKFwiZGl2XCIsIHsgY2xhc3M6IHN0eWxlcy5fdG9vbHRpcCwgaWQ6IFRPT0xUSVBfSUQsIGhpZGRlbjogXCJcIiB9KVxuXHQ6IG51bGw7XG5leHBvcnQgY2xhc3MgTVREU0NoYXJ0IGV4dGVuZHMgTVREU0VsZW1lbnQge1xuXHRfb2JzZXJ2ZXI/OiBNdXRhdGlvbk9ic2VydmVyOyAvLyBVc2luZyB1bmRlcnNjb3JlIGluc3RlYWQgb2YgIyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblxuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRyZXR1cm4gW1wiZGF0YS12YXJpYW50XCJdOyAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXHR9XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcblx0fVxuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHR0aGlzLl9vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuXHRcdFx0dGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2suYmluZCh0aGlzKSxcblx0XHQpO1xuXHRcdHRoaXMuX29ic2VydmVyLm9ic2VydmUodGhpcywge1xuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbXCJkYXRhLXRvb2x0aXBcIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hhcmFjdGVyRGF0YTogdHJ1ZSxcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0fSk7XG5cdFx0dGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTsgLy8gSW5pdGlhbCBzZXR1cFxuXHRcdG9uKHRoaXMsIEVWRU5UUywgdGhpcyk7XG5cdH1cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0aWYgKFRPT0xUSVApIFRPT0xUSVAuaGlkZGVuID0gdHJ1ZTtcblx0XHRvZmYodGhpcywgRVZFTlRTLCB0aGlzKTtcblx0XHR0aGlzLl9vYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuXHRcdHRoaXMuX29ic2VydmVyID0gdW5kZWZpbmVkO1xuXHR9XG5cdGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcblx0XHRBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdD8uY2hpbGRyZW4gfHwgW10pLm1hcCgoZWwpID0+IGVsLnJlbW92ZSgpKTsgLy8gQ2xlYXIgc2hhZG93Um9vdFxuXG5cdFx0Y29uc3QgZGF0YSA9IHRvRGF0YSh0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJ0YWJsZVwiKSk7XG5cdFx0Y29uc3QgW3ZhcmlhbnQsIHR5cGVdID0gKGF0dHIodGhpcywgXCJkYXRhLXZhcmlhbnRcIikgfHwgXCJiYXJcIikuc3BsaXQoXCItXCIpO1xuXHRcdGNvbnN0IHN0eWxlID0gdGFnKFwic3R5bGVcIiwge30sIGNzcyk7XG5cdFx0Y29uc3QgbGVnZW5kID0gdGFnKFwiZGl2XCIsIHsgY2xhc3M6IFwibGVnZW5kc1wiIH0pO1xuXHRcdGRhdGEuc2xpY2UoMSkuZm9yRWFjaCgoW3sgdmFsdWUsIHN0eWxlIH1dKSA9PiB7XG5cdFx0XHRsZWdlbmQuYXBwZW5kQ2hpbGQodGFnKFwiZGl2XCIsIHsgY2xhc3M6IFwibGVnZW5kXCIsIHN0eWxlIH0sIHZhbHVlKSk7XG5cdFx0fSk7XG5cblx0XHRjb25zdCB7IGF4aXMsIGdyb3VwcywgdG90YWwgfSA9IHRvQXhpcyhkYXRhLCB7IHR5cGUgfSk7XG5cdFx0aWYgKHZhcmlhbnQgPT09IFwiYmFyXCIgfHwgdmFyaWFudCA9PT0gXCJjb2x1bW5cIilcblx0XHRcdGdyb3Vwcy5hcHBlbmQoLi4udG9CYXJzKGRhdGEpKTtcblx0XHRpZiAodmFyaWFudCA9PT0gXCJsaW5lXCIgfHwgdmFyaWFudCA9PT0gXCJhcmVhXCIpXG5cdFx0XHRncm91cHMuYXBwZW5kKHRvTGluZXMoZGF0YSwgeyB0b3RhbCwgdmFyaWFudCwgdHlwZSB9KSk7XG5cdFx0aWYgKHZhcmlhbnQgPT09IFwiZG91Z2hudXRcIiB8fCB2YXJpYW50ID09PSBcInBpZVwiKVxuXHRcdFx0dGhpcy5zaGFkb3dSb290Py5hcHBlbmQodG9QaWVzKGRhdGEsIHsgdmFyaWFudCB9KSk7XG5cblx0XHR0aGlzLnNoYWRvd1Jvb3Q/LmFwcGVuZChzdHlsZSwgYXhpcywgbGVnZW5kKTtcblx0fVxuXHRoYW5kbGVFdmVudChlOiBFdmVudCkge1xuXHRcdGlmIChlLnR5cGUgPT09IFwiY2xpY2tcIiB8fCBlLnR5cGUgPT09IFwia2V5ZG93blwiKSBvbkNsaWNrKGUsIHRoaXMpO1xuXHRcdGVsc2Ugb25Nb3ZlVG9vbHRpcChlIGFzIE1vdXNlRXZlbnQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQ6IEV2ZW50LCBzZWxmOiBNVERTQ2hhcnQpIHtcblx0aWYgKGV2ZW50IGluc3RhbmNlb2YgS2V5Ym9hcmRFdmVudCAmJiBldmVudC5rZXkgIT09IFwiRW50ZXJcIikgcmV0dXJuOyAvLyBPbmx5IGhhbmRsZSBlbnRlciBrZXlcblx0Y29uc3QgZWwgPSBldmVudC5jb21wb3NlZFBhdGgoKVswXTtcblx0Y29uc3QgdGFibGUgPSBzZWxmLnF1ZXJ5U2VsZWN0b3IoXCJ0YWJsZVwiKTtcblx0Y29uc3QgW3RyLCB0ZF0gPVxuXHRcdChlbCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgYXR0cihlbCwgXCJkYXRhLWV2ZW50XCIpPy5zcGxpdChcIi1cIikubWFwKE51bWJlcikpIHx8XG5cdFx0W107XG5cblx0dGFibGU/LnJvd3NbdHJdPy5jZWxsc1t0ZF0/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFwiYSxidXR0b25cIik/LmNsaWNrPy4oKTtcbn1cblxubGV0IFRPT0xUSVBfVEVYVCA9IFwiXCI7XG5mdW5jdGlvbiBvbk1vdmVUb29sdGlwKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG5cdGlmICghVE9PTFRJUCkgcmV0dXJuO1xuXHRpZiAoIVRPT0xUSVA/LmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChUT09MVElQKTsgLy8gRW5zdXJlIGNvbm5lY3RlZFxuXG5cdGNvbnN0IGVsID0gZXZlbnQuY29tcG9zZWRQYXRoKClbMF07XG5cdGNvbnN0IHRpcCA9IChlbCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgZWwuZ2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKSkgfHwgXCJcIjtcblxuXHRpZiAodGlwKVxuXHRcdFRPT0xUSVAuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke2V2ZW50LnBhZ2VYfXB4LCAke2V2ZW50LnBhZ2VZfXB4KWA7XG5cdGlmICh0aXAgIT09IFRPT0xUSVBfVEVYVCkge1xuXHRcdGlmICh0aXApIFRPT0xUSVAudGV4dENvbnRlbnQgPSB0aXA7XG5cdFx0VE9PTFRJUF9URVhUID0gdGlwO1xuXHRcdFRPT0xUSVAuaGlkZGVuID0gIXRpcDtcblx0fVxufVxuXG5jb25zdCB0ZXh0ID0gKGVsPzogRWxlbWVudCB8IG51bGwpID0+IGVsPy50ZXh0Q29udGVudD8udHJpbSgpIHx8IFwiXCI7IC8vIEhlbHBlciB0byBnZXQgdHJpbW1lZCB0ZXh0XG5jb25zdCB0b0RhdGEgPSAodGFibGU/OiBIVE1MVGFibGVFbGVtZW50IHwgbnVsbCkgPT5cblx0QXJyYXkuZnJvbSh0YWJsZT8ucm93cyB8fCBbXSwgKHJvdywgcm93SW5kZXgpID0+XG5cdFx0QXJyYXkuZnJvbShyb3cuY2VsbHMsIChjZWxsLCBjZWxsSW5kZXgpID0+ICh7XG5cdFx0XHRudW1iZXI6IChjZWxsSW5kZXggJiYgcm93SW5kZXggJiYgTnVtYmVyLnBhcnNlRmxvYXQodGV4dChjZWxsKSkpIHx8IDAsIC8vIEZpcnN0IHJvdyBhbmQgY29sdW1uIGlzIG5vdCBhIG51bWJlclxuXHRcdFx0ZXZlbnQ6IGNlbGwucXVlcnlTZWxlY3RvcihcImEsYnV0dG9uXCIpICYmIGAke3Jvd0luZGV4fS0ke2NlbGxJbmRleH1gLCAvLyBSZWZlcmVuY2UgdG8gcHJveHkgZXZlbnRzXG5cdFx0XHRzdHlsZTogYC0tY29sb3I6IHZhcigtLW10ZHNjLWNoYXJ0LWNvbG9yLSR7cm93SW5kZXh9LCB2YXIoLS1tdGRzYy1jaGFydC1jb2xvci1iYXNlKSlgLFxuXHRcdFx0dmFsdWU6IHRleHQoY2VsbCksXG5cdFx0XHR0b29sdGlwOlxuXHRcdFx0XHRhdHRyKGNlbGwsIFwiZGF0YS10b29sdGlwXCIpIHx8XG5cdFx0XHRcdGAke3RleHQocm93LmNlbGxzWzBdKX06ICR7dGV4dChjZWxsKX0gKCR7dGV4dCh0YWJsZT8ucm93c1swXS5jZWxsc1tjZWxsSW5kZXhdKX0pYCxcblx0XHR9KSksXG5cdCk7XG5cbmlmIChJU19CUk9XU0VSICYmICF3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KFwibXRkcy1jaGFydFwiKSlcblx0d2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShcIm10ZHMtY2hhcnRcIiwgTVREU0NoYXJ0KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRhdHRyLFxuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyLFxuXHRJU19CUk9XU0VSLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdFFVSUNLX0VWRU5ULFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0RJQUxPRyA9IHN0eWxlcy5kaWFsb2cuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgRElBTE9HUyA9IElTX0JST1dTRVJcblx0PyAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcblx0XHRcdENTU19ESUFMT0csXG5cdFx0KSBhcyBIVE1MQ29sbGVjdGlvbk9mPEhUTUxEaWFsb2dFbGVtZW50Pilcblx0OiBbXTtcblxuY29uc3QgaGFuZGxlTW9kYWwgPSAoKSA9PiB7XG5cdGZvciAoY29uc3QgZGlhbG9nIG9mIERJQUxPR1MpXG5cdFx0aWYgKGRpYWxvZy5pc0Nvbm5lY3RlZCAmJiBkaWFsb2cuc2hvd01vZGFsICYmIGRpYWxvZy5jbG9zZSkge1xuXHRcdFx0aWYgKGRpYWxvZy5tYXRjaGVzKCdbb3Blbl06bm90KFtkYXRhLW1vZGFsPVwiZmFsc2VcIl0pOm5vdCg6bW9kYWwpJykpIHtcblx0XHRcdFx0YXR0cihkaWFsb2csIFwib3BlblwiLCBudWxsKTsgLy8gVXNpbmcgYXR0cmlidXRlIGluc3RlYWQgb2YgLmNsb3NlIHRvIGF2b2lkIGBjbG9zZWAgZXZlbnRcblx0XHRcdFx0ZGlhbG9nLnNob3dNb2RhbCgpO1xuXHRcdFx0fSBlbHNlIGlmIChkaWFsb2cubWF0Y2hlcyhcIjptb2RhbDpub3QoW29wZW5dKVwiKSkge1xuXHRcdFx0XHRhdHRyKGRpYWxvZywgXCJvcGVuXCIsIFwiXCIpOyAvLyBTZXQgYXMgb3BlblxuXHRcdFx0XHRkaWFsb2cuY2xvc2UoKTsgLy8gU28gd2UgY29ycmVjbHR5IGNhbiBjYWxsIC5jbG9zZSwgcmVtb3ZpbmcgPGRpYWxvZz4gZnJvbSAjdG9wLWxheWVyXG5cdFx0XHR9XG5cdFx0fVxufTtcblxuY29uc3QgaGFuZGxlRGlhbG9nQ2xpY2sgPSAoe1xuXHRjbGllbnRYOiB4LFxuXHRjbGllbnRZOiB5LFxuXHR0YXJnZXQ6IGVsLFxufTogTW91c2VFdmVudCkgPT4ge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRGlhbG9nRWxlbWVudCAmJiBhdHRyKGVsLCBcImRhdGEtY2xvc2VkYnlcIikgPT09IFwiYW55XCIpIHtcblx0XHRjb25zdCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0Y29uc3QgaXNJbnNpZGUgPSB0b3AgPD0geSAmJiB5IDw9IGJvdHRvbSAmJiBsZWZ0IDw9IHggJiYgeCA8PSByaWdodDtcblx0XHRpZiAoIWlzSW5zaWRlKSByZXR1cm4gZWwuY2xvc2UoKTtcblx0fVxuXHRjb25zdCBkaWFsb2cgPSAoZWwgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImRpYWxvZ1wiKTtcblx0Y29uc3QgY2xvc2UgPSBkaWFsb2cgJiYgKGVsIGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oJ1tkYXRhLWNvbW1hbmQ9XCJjbG9zZVwiXScpO1xuXHRpZiAoY2xvc2UpIGRpYWxvZy5jbG9zZSgpO1xufTtcblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVEaWFsb2dDbGljayBhcyBFdmVudExpc3RlbmVyLCBRVUlDS19FVkVOVCk7XG5cdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoaGFuZGxlTW9kYWwpLm9ic2VydmUoXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRcdHtcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wib3BlblwiXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdH0sXG5cdCk7XG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9zdW1tYXJ5SW5qZWN0KGV2ZW50OiBFdmVudCAmIHsgYW5pbWF0aW9uTmFtZT86IHN0cmluZyB9KSB7XG5cdGlmIChldmVudC5hbmltYXRpb25OYW1lICE9PSBzdHlsZXMuX2Vycm9yc3VtbWFyeSkgcmV0dXJuO1xuXHRjb25zdCBmaXJzdCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmZpcnN0RWxlbWVudENoaWxkO1xuXG5cdGlmIChmaXJzdCBpbnN0YW5jZW9mIEhUTUxIZWFkaW5nRWxlbWVudCkge1xuXHRcdGF0dHIoZmlyc3QsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcblx0XHRmaXJzdC5mb2N1cygpOyAvLyBBdXRvZm9jdXMgZmlyc3QgaGVhZGluZ1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uKGRvY3VtZW50LCBcImFuaW1hdGlvbmVuZFwiLCBoYW5kbGVFcnJvc3VtbWFyeUluamVjdCwgUVVJQ0tfRVZFTlQpLFxuKTtcbiIsInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcblxuLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBTQUZFX0xBQkVMTEVEQlkgPSBgJHtJU19BTkRST0lEID8gXCJkYXRhXCIgOiBcImFyaWFcIn0tbGFiZWxsZWRieWA7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIEZPQ1VTX09VVExJTkUgPSBcIm91dGxpbmU6IDFweCBkb3R0ZWQ7IG91dGxpbmU6IDVweCBhdXRvIEhpZ2hsaWdodDsgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXR0YWNoU3R5bGUgPSAoZWxlbWVudCwgY3NzKSA9PiBlbGVtZW50LnNoYWRvd1Jvb3QgfHwgZWxlbWVudC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAvLyBVbm5hbWVkIHNsb3QgZG9lcyBhdXRvbWF0aWNhbGx5IHJlbmRlciBhbGwgdG9wIGVsZW1lbnQgbm9kZXNcbiAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIGNzcylcbik7XG52YXIgb2JzZXJ2ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgbXV0YXRpb25PYnNlcnZlciA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHJldHVybiBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICB0cnkge1xuICAgIG9ic2VydmVycy5nZXQoZWxlbWVudCkuZGlzY29ubmVjdCgpO1xuICAgIG9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gIH0gY2F0Y2ggKF9lcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIExJVkU7XG52YXIgTElWRV9TUl9GSVggPSAwO1xudmFyIHNwZWFrID0gKHRleHQpID0+IHtcbiAgaWYgKCFMSVZFKSB7XG4gICAgTElWRSA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgTElWRS5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjpmaXhlZDtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcFwiO1xuICAgIGF0dHIoTElWRSwgXCJhcmlhLWxpdmVcIiwgXCJhc3NlcnRpdmVcIik7XG4gIH1cbiAgaWYgKCFMSVZFLmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChMSVZFKTtcbiAgaWYgKHRleHQpIExJVkUudGV4dENvbnRlbnQgPSBgJHt0ZXh0fSR7TElWRV9TUl9GSVgrKyAlIDIgPyBcIlxceEEwXCIgOiBcIlwifWA7XG59O1xudmFyIHNldFZhbHVlID0gKGlucHV0LCBkYXRhLCB0eXBlID0gXCJcIikgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlLCBkYXRhLCBpbnB1dFR5cGU6IHR5cGUgfTtcbiAgY29uc3QgcHJvdG8gPSBIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImJlZm9yZWlucHV0XCIsIGV2ZW50KSk7XG4gIChfYiA9IChfYTIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBcInZhbHVlXCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoaW5wdXQsIGRhdGEpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiaW5wdXRcIiwgZXZlbnQpKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbn07XG52YXIgSVNfUFJFU1MgPSBmYWxzZTtcbnZhciBpc01vdXNlRG93biA9IChldmVudCkgPT4ge1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZXVwXCIpIElTX1BSRVNTID0gZmFsc2U7XG4gIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm1vdXNlZG93blwiKSB7XG4gICAgSVNfUFJFU1MgPSB0cnVlO1xuICAgIG9uKGRvY3VtZW50LCBcIm1vdXNldXBcIiwgaXNNb3VzZURvd24sIHsgb25jZTogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gSVNfUFJFU1M7XG59O1xudmFyIGRlY2xhcmF0aXZlU2hhZG93Um9vdCA9IChzdHlsZSwgc2xvdCA9IFwiPHNsb3Q+PC9zbG90PlwiKSA9PiBgPHRlbXBsYXRlIHNoYWRvd3Jvb3Rtb2RlPVwib3BlblwiPiR7c2xvdH08c3R5bGU+JHtzdHlsZX08L3N0eWxlPjwvdGVtcGxhdGU+YDtcblxuLy8gdS1vcHRpb24udHNcbnZhciBESVNBQkxFRCA9IFwiZGlzYWJsZWRcIjtcbnZhciBTRUxFQ1RFRCA9IFwic2VsZWN0ZWRcIjtcbnZhciBVSFRNTE9wdGlvbkVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbRElTQUJMRUQsIFNFTEVDVEVEXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoIUlTX0lPUykgdGhpcy50YWJJbmRleCA9IC0xO1xuICAgIGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoXCJyb2xlXCIpKSBhdHRyKHRoaXMsIFwicm9sZVwiLCBcIm9wdGlvblwiKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1kaXNhYmxlZFwiLCBgJHt0aGlzLmRpc2FibGVkfWApO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXNlbGVjdGVkXCIsIGAke3RoaXMuc2VsZWN0ZWR9YCk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHdoZXRoZXIgdGhlIG9wdGlvbiBpbiB0aGUgbGlzdCBib3ggaXMgdGhlIGRlZmF1bHQgaXRlbS4gKi9cbiAgZ2V0IGRlZmF1bHRTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpc1tTRUxFQ1RFRF07XG4gIH1cbiAgc2V0IGRlZmF1bHRTZWxlY3RlZCh2YWx1ZSkge1xuICAgIHRoaXNbU0VMRUNURURdID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGRpc2FibGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIERJU0FCTEVEKSAhPT0gbnVsbDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIERJU0FCTEVELCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICAvKiogUmV0cmlldmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBmb3JtIHRoYXQgdGhlIG9iamVjdCBpcyBlbWJlZGRlZCBpbi4gKi9cbiAgZ2V0IGZvcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcImZvcm1cIik7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSBvcmRpbmFsIHBvc2l0aW9uIG9mIGFuIG9wdGlvbiBpbiBhIGxpc3QgYm94LiAqL1xuICBnZXQgaW5kZXgoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uKChfYTIgPSB0aGlzLnBhcmVudEVsZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIub3B0aW9ucykgfHwgW3RoaXNdXG4gICAgXS5pbmRleE9mKHRoaXMpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyBhIHZhbHVlIHRoYXQgeW91IGNhbiB1c2UgdG8gaW1wbGVtZW50IHlvdXIgb3duIGxhYmVsIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBvYmplY3QuICovXG4gIGdldCBsYWJlbCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoX2EyID0gYXR0cih0aGlzLCBcImxhYmVsXCIpKSAhPSBudWxsID8gX2EyIDogdGhpcy50ZXh0O1xuICB9XG4gIHNldCBsYWJlbCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJsYWJlbFwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFNFTEVDVEVEKSAhPT0gbnVsbDtcbiAgfVxuICBzZXQgc2VsZWN0ZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFNFTEVDVEVELCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIHRleHQgc3RyaW5nIHNwZWNpZmllZCBieSB0aGUgb3B0aW9uIHRhZy4gKi9cbiAgZ2V0IHRleHQoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSB0aGlzLnRleHRDb250ZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKSkgfHwgXCJcIjtcbiAgfVxuICBzZXQgdGV4dCh0ZXh0KSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHRleHQ7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSB2YWx1ZSB3aGljaCBpcyByZXR1cm5lZCB0byB0aGUgc2VydmVyIHdoZW4gdGhlIGZvcm0gY29udHJvbCBpcyBzdWJtaXR0ZWQuICovXG4gIGdldCB2YWx1ZSgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoX2EyID0gYXR0cih0aGlzLCBcInZhbHVlXCIpKSAhPSBudWxsID8gX2EyIDogdGhpcy50ZXh0O1xuICB9XG4gIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gIH1cbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LW9wdGlvblwiLCBVSFRNTE9wdGlvbkVsZW1lbnQpO1xuXG4vLyB1LWRhdGFsaXN0LnRzXG52YXIgVUhUTUxEYXRhTGlzdFN0eWxlID0gYCR7RElTUExBWV9CTE9DS31cbjo6c2xvdHRlZCh1LW9wdGlvbikgeyBkaXNwbGF5OiBibG9jazsgY3Vyc29yOiBwb2ludGVyIH1cbjo6c2xvdHRlZCh1LW9wdGlvbjpmb2N1cykgeyAke0ZPQ1VTX09VVExJTkV9IH1cbjo6c2xvdHRlZCh1LW9wdGlvblthcmlhLWhpZGRlbj1cInRydWVcIl0pLFxuOjpzbG90dGVkKHUtb3B0aW9uW2Rpc2FibGVkXSksXG46OnNsb3R0ZWQodS1vcHRpb25baGlkZGVuXSkgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQgfWA7XG52YXIgVUhUTUxEYXRhTGlzdFNoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoVUhUTUxEYXRhTGlzdFN0eWxlKTtcbnZhciBMSVZFX1RJTUVSO1xudmFyIElOUFVUX0RFQk9VTkNFID0gMDtcbnZhciBJU19NT0JJTEUgPSBJU19JT1MgfHwgSVNfQU5EUk9JRDtcbnZhciBFVkVOVFMgPSBcImNsaWNrLGZvY3Vzb3V0LGlucHV0LGtleWRvd24sbW91c2Vkb3duLG1vdXNldXBcIjtcbnZhciBFVkVOVFNfSU5QVVQgPSBcImZvY3VzLGZvY3VzaW4sYmx1cixmb2N1c291dFwiO1xudmFyIFRFWFRTID0ge1xuICBzaW5ndWxhcjogXCIlZCBoaXRcIixcbiAgcGx1cmFsOiBcIiVkIGhpdHNcIlxufTtcbnZhciBVSFRNTERhdGFMaXN0RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl90ZXh0cyA9IF9fc3ByZWFkVmFsdWVzKHt9LCBURVhUUyk7XG4gICAgdGhpcy5fdmFsdWUgPSBcIlwiO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIFVIVE1MRGF0YUxpc3RTdHlsZSk7XG4gIH1cbiAgLy8gVXNlZCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IGFubm91bmNlbWVudHNcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIC4uLk9iamVjdC5rZXlzKFRFWFRTKS5tYXAoKGtleSkgPT4gYGRhdGEtc3ItJHtrZXl9YCldO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuaGlkZGVuID0gdHJ1ZTtcbiAgICB0aGlzLl9yb290ID0gZ2V0Um9vdCh0aGlzKTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcImxpc3Rib3hcIik7XG4gICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG4gICAgb24odGhpcy5fcm9vdCwgXCJmb2N1c2luXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNcIiwgdGhpcywgdHJ1ZSk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7XG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFtcImRpc2FibGVkXCIsIFwiaGlkZGVuXCIsIFwibGFiZWxcIiwgXCJ2YWx1ZVwiXSxcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgb2ZmKHRoaXMuX3Jvb3QgfHwgdGhpcywgXCJmb2N1c1wiLCB0aGlzLCB0cnVlKTtcbiAgICBvZmYodGhpcy5fcm9vdCB8fCB0aGlzLCBcImZvY3VzaW5cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gICAgZGlzY29ubmVjdElucHV0KHRoaXMpO1xuICAgIHRoaXMuX3Jvb3QgPSB2b2lkIDA7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIF9wcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgdGV4dCA9IHByb3AgPT0gbnVsbCA/IHZvaWQgMCA6IHByb3Auc3BsaXQoXCJkYXRhLXNyLVwiKVsxXTtcbiAgICBjb25zdCBjc3MgPSBgaW5wdXRbbGlzdD1cIiR7dGhpcy5pZH1cIl1gO1xuICAgIGlmIChURVhUU1t0ZXh0XSkgdGhpcy5fdGV4dHNbdGV4dF0gPSBuZXh0IHx8IFRFWFRTW3RleHRdO1xuICAgIGVsc2UgaWYgKHRoaXMuX3Jvb3QpIHtcbiAgICAgIGlmICh0aGlzLl9pbnB1dCkgc2V0dXBJbnB1dCh0aGlzLCB0aGlzLl9pbnB1dCk7XG4gICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHRoaXMuX3Jvb3QucXVlcnlTZWxlY3RvckFsbChjc3MpKVxuICAgICAgICBzZXR1cElucHV0KHRoaXMsIGlucHV0KTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCB7IHRhcmdldCwgdHlwZSB9ID0gZXZlbnQ7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICBpZiAodHlwZSA9PT0gXCJjbGlja1wiKSBvbkNsaWNrKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJmb2N1c1wiIHx8IHR5cGUgPT09IFwiZm9jdXNpblwiKSBvbkZvY3VzKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJibHVyXCIgfHwgdHlwZSA9PT0gXCJmb2N1c291dFwiKSBvbkJsdXIodGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgb25LZXlEb3duKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiB0aGlzLmNvbnRhaW5zKHRhcmdldCkpXG4gICAgICBpc01vdXNlRG93bihldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwibXV0YXRpb25cIiB8fCB0eXBlID09PSBcImlucHV0XCIpIHtcbiAgICAgIGNsZWFyVGltZW91dChJTlBVVF9ERUJPVU5DRSk7XG4gICAgICBJTlBVVF9ERUJPVU5DRSA9IHNldFRpbWVvdXQob25JbnB1dCwgMCwgdGhpcywgZXZlbnQpO1xuICAgIH1cbiAgfVxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcInUtb3B0aW9uXCIpO1xuICB9XG59O1xudmFyIGlzRGlzYWJsZWQgPSAoaW5wdXQpID0+IChpbnB1dCA9PSBudWxsID8gdm9pZCAwIDogaW5wdXQuZGlzYWJsZWQpIHx8IChpbnB1dCA9PSBudWxsID8gdm9pZCAwIDogaW5wdXQucmVhZE9ubHkpIHx8IGZhbHNlO1xudmFyIHNldEV4cGFuZGVkID0gKHNlbGYsIG9wZW4pID0+IHtcbiAgdmFyIF9hMiwgX2IsIF9jO1xuICBpZiAoc2VsZi5oaWRkZW4gIT09IG9wZW4pIHJldHVybjtcbiAgc2VsZi5oaWRkZW4gPSBpc0Rpc2FibGVkKHNlbGYgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGYuX2lucHV0KSB8fCAhb3BlbjtcbiAgKF9hMiA9IG11dGF0aW9uT2JzZXJ2ZXIoc2VsZikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudGFrZVJlY29yZHMoKTtcbiAgY29uc3QgaXNQb3BvdmVyID0gc2VsZi5pc0Nvbm5lY3RlZCAmJiBzZWxmLnBvcG92ZXIgJiYgKChfYiA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuaXNDb25uZWN0ZWQpICYmICgoX2MgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jLnBvcG92ZXJUYXJnZXRFbGVtZW50KSA9PT0gc2VsZjtcbiAgaWYgKHNlbGYuX2lucHV0KSBzZXR1cElucHV0KHNlbGYsIHNlbGYuX2lucHV0LCBvcGVuKTtcbiAgaWYgKGlzUG9wb3ZlcikgYXR0cihzZWxmLCBcInBvcG92ZXJcIiwgXCJtYW51YWxcIik7XG4gIGlmIChpc1BvcG92ZXIpIHNlbGYudG9nZ2xlUG9wb3ZlcihvcGVuKTtcbiAgaWYgKG9wZW4pIG9uSW5wdXQoc2VsZik7XG59O1xudmFyIGRpc2Nvbm5lY3RJbnB1dCA9IChzZWxmKSA9PiB7XG4gIGlmICghc2VsZi5faW5wdXQpIHJldHVybjtcbiAgb2ZmKHNlbGYuX2lucHV0IHx8IHNlbGYsIEVWRU5UU19JTlBVVCwgc2VsZik7XG4gIG9mZihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gIHNldEV4cGFuZGVkKHNlbGYsIGZhbHNlKTtcbiAgc2VsZi5faW5wdXQgPSB2b2lkIDA7XG59O1xudmFyIHNldHVwSW5wdXQgPSAoc2VsZiwgaW5wdXQsIG9wZW4gPSBmYWxzZSkgPT4ge1xuICBpZiAoc2VsZi5wb3BvdmVyKSBhdHRyKGlucHV0LCBcInBvcG92ZXJ0YXJnZXRcIiwgdXNlSWQoc2VsZikpO1xuICBvbihpbnB1dCwgRVZFTlRTX0lOUFVULCBzZWxmLCB0cnVlKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWF1dG9jb21wbGV0ZVwiLCBcImxpc3RcIik7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1jb250cm9sc1wiLCB1c2VJZChzZWxmKSk7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1leHBhbmRlZFwiLCBgJHshSVNfTU9CSUxFIHx8IG9wZW59YCk7XG4gIGF0dHIoaW5wdXQsIFwiYXV0b2NvbXBsZXRlXCIsIFwib2ZmXCIpO1xuICBhdHRyKGlucHV0LCBcInJvbGVcIiwgaXNEaXNhYmxlZChpbnB1dCkgPyBudWxsIDogXCJjb21ib2JveFwiKTtcbn07XG52YXIgb25Gb2N1cyA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCBpc0lucHV0ID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudDtcbiAgaWYgKGlzSW5wdXQgJiYgZXZlbnQuaXNUcnVzdGVkKSBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgaWYgKHNlbGYuX2lucHV0ICE9PSBldmVudC50YXJnZXQgJiYgaXNJbnB1dCAmJiBldmVudC50YXJnZXQubGlzdCA9PT0gc2VsZikge1xuICAgIGlmIChzZWxmLl9pbnB1dCkgZGlzY29ubmVjdElucHV0KHNlbGYpO1xuICAgIHNlbGYuX2lucHV0ID0gZXZlbnQudGFyZ2V0O1xuICAgIHNlbGYuX2lucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJmb2N1c1wiKSk7XG4gICAgc2VsZi5faW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImZvY3VzaW5cIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICBhdHRyKHNlbGYsIFNBRkVfTEFCRUxMRURCWSwgdXNlSWQoKF9hMiA9IHNlbGYuX2lucHV0LmxhYmVscykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMlswXSkpO1xuICAgIG9uKHNlbGYuX3Jvb3QgfHwgc2VsZiwgRVZFTlRTLCBzZWxmKTtcbiAgICBzZXRFeHBhbmRlZChzZWxmLCBhdHRyKHNlbGYuX2lucHV0LCBcImlucHV0bW9kZVwiKSAhPT0gXCJub25lXCIpO1xuICAgIHNwZWFrKCk7XG4gIH1cbn07XG52YXIgb25CbHVyID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIGlmICghSVNfQU5EUk9JRCAmJiAhaXNNb3VzZURvd24oKSAmJiBzZWxmLl9pbnB1dClcbiAgICBzZXRUaW1lb3V0KG9uQmx1cnJlZCwgMCwgc2VsZik7XG4gIGlmIChldmVudC50YXJnZXQgPT09IHNlbGYuX2lucHV0ICYmIGV2ZW50LmlzVHJ1c3RlZClcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn07XG52YXIgb25CbHVycmVkID0gKHNlbGYpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgcmVsYXRlZFRhcmdldCA9ICgoX2EyID0gc2VsZi5fcm9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5hY3RpdmVFbGVtZW50KSB8fCBudWxsO1xuICBjb25zdCBpbnB1dCA9IHNlbGYuX2lucHV0O1xuICBpZiAoaW5wdXQgJiYgaW5wdXQgIT09IHJlbGF0ZWRUYXJnZXQgJiYgIXNlbGYuY29udGFpbnMocmVsYXRlZFRhcmdldCkpIHtcbiAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiYmx1clwiLCB7IHJlbGF0ZWRUYXJnZXQgfSkpO1xuICAgIGlucHV0LmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgRm9jdXNFdmVudChcImZvY3Vzb3V0XCIsIHsgYnViYmxlczogdHJ1ZSwgcmVsYXRlZFRhcmdldCB9KVxuICAgICk7XG4gICAgZGlzY29ubmVjdElucHV0KHNlbGYpO1xuICB9XG59O1xudmFyIG9uQ2xpY2sgPSAoc2VsZiwgeyB0YXJnZXQgfSkgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoIXNlbGYuX2lucHV0IHx8IHNlbGYuX2lucHV0ID09PSB0YXJnZXQpIHJldHVybiBzZXRFeHBhbmRlZChzZWxmLCB0cnVlKTtcbiAgZm9yIChjb25zdCBvcHQgb2Ygc2VsZi5vcHRpb25zKVxuICAgIGlmIChvcHQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgaWYgKGF0dHIoc2VsZiwgXCJhcmlhLW11bHRpc2VsZWN0YWJsZVwiKSAhPT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgKF9hMiA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG4gICAgICAgIHNldEV4cGFuZGVkKHNlbGYsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXRWYWx1ZShzZWxmLl9pbnB1dCwgb3B0LnZhbHVlKTtcbiAgICB9XG4gIGlmIChJU19BTkRST0lEKSBvbkJsdXJyZWQoc2VsZik7XG59O1xudmFyIG9uS2V5RG93biA9IChzZWxmLCBlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsga2V5LCB0YXJnZXQsIGFsdEtleSwgY3RybEtleSwgc2hpZnRLZXksIG1ldGFLZXkgfSA9IGU7XG4gIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSBcIkVzY2FwZVwiIHx8IGtleSA9PT0gXCJFc2NcIjtcbiAgaWYgKGFsdEtleSB8fCBjdHJsS2V5IHx8IG1ldGFLZXkgfHwgc2hpZnRLZXkgfHwga2V5ID09PSBcIlRhYlwiKSByZXR1cm47XG4gIGlmIChpc0VzY2FwZSAmJiAhc2VsZi5oaWRkZW4pIGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgc2V0RXhwYW5kZWQoc2VsZiwgIWlzRXNjYXBlKTtcbiAgY29uc3Qgb3B0aW9ucyA9IFsuLi5zZWxmLm9wdGlvbnNdLmZpbHRlcihcbiAgICAoZWwpID0+IGF0dHIoZWwsIFwiYXJpYS1oaWRkZW5cIikgIT09IFwidHJ1ZVwiICYmIGVsLm9mZnNldEhlaWdodFxuICApO1xuICBjb25zdCBwcmV2ID0gb3B0aW9ucy5pbmRleE9mKHRhcmdldCk7XG4gIGxldCBuZXh0ID0gLTE7XG4gIGlmIChrZXkgPT09IFwiQXJyb3dEb3duXCIpIG5leHQgPSAocHJldiArIDEpICUgb3B0aW9ucy5sZW5ndGg7XG4gIGlmIChrZXkgPT09IFwiQXJyb3dVcFwiKSBuZXh0ID0gKH5wcmV2ID8gcHJldiA6IG9wdGlvbnMubGVuZ3RoKSAtIDE7XG4gIGlmICh+cHJldikge1xuICAgIGlmIChrZXkgPT09IFwiSG9tZVwiIHx8IGtleSA9PT0gXCJQYWdlVXBcIikgbmV4dCA9IDA7XG4gICAgaWYgKGtleSA9PT0gXCJFbmRcIiB8fCBrZXkgPT09IFwiUGFnZURvd25cIikgbmV4dCA9IG9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICBpZiAoa2V5ID09PSBcIkVudGVyXCIpIHtcbiAgICAgIG9wdGlvbnNbcHJldl0uY2xpY2soKTtcbiAgICAgIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG4gIGlmIChvcHRpb25zW25leHRdKSBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSBvcHRpb24udGFiSW5kZXggPSAtMTtcbiAgaWYgKG9wdGlvbnNbbmV4dF0pIGUucHJldmVudERlZmF1bHQoKTtcbiAgKF9hMiA9IG9wdGlvbnNbbmV4dF0gfHwgc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbiAgaWYgKCFvcHRpb25zW25leHRdICYmIGtleSA9PT0gXCJBcnJvd1VwXCIpXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB2YXIgX2EzO1xuICAgICAgcmV0dXJuIChfYTMgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy5zZXRTZWxlY3Rpb25SYW5nZSg5OTksIDk5OSk7XG4gICAgfSk7XG59O1xudmFyIG9uSW5wdXQgPSAoc2VsZiwgZSkgPT4ge1xuICBjb25zdCB7IF90ZXh0cywgX3Jvb3QsIF9pbnB1dCwgb3B0aW9ucyB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoX2lucHV0ID09IG51bGwgPyB2b2lkIDAgOiBfaW5wdXQudmFsdWUudG9Mb3dlckNhc2UoKS50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IGZpbHRlciA9ICFzZWxmLmhhc0F0dHJpYnV0ZShcImRhdGEtbm9maWx0ZXJcIik7XG4gIGNvbnN0IGhpZGRlbiA9IFtdO1xuICBjb25zdCB2aXNpYmxlID0gW107XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIHtcbiAgICBjb25zdCBoaWRlID0gb3B0LmRpc2FibGVkIHx8IG9wdC5oaWRkZW4gfHwgZmlsdGVyICYmICFvcHQubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh2YWx1ZSk7XG4gICAgKGhpZGUgPyBoaWRkZW4gOiB2aXNpYmxlKS5wdXNoKG9wdCk7XG4gIH1cbiAgZm9yIChjb25zdCBvcHQgb2YgaGlkZGVuKSBhdHRyKG9wdCwgXCJhcmlhLWhpZGRlblwiLCBcInRydWVcIik7XG4gIGZvciAoY29uc3Qgb3B0IG9mIHZpc2libGUpIGF0dHIob3B0LCBcImFyaWEtaGlkZGVuXCIsIFwiZmFsc2VcIik7XG4gIGNvbnN0IHRvdGFsID0gdmlzaWJsZS5sZW5ndGg7XG4gIGNsZWFyVGltZW91dChMSVZFX1RJTUVSKTtcbiAgaWYgKChlID09IG51bGwgPyB2b2lkIDAgOiBlLnR5cGUpID09PSBcImlucHV0XCIgJiYgdmFsdWUgIT09IHNlbGYuX3ZhbHVlKVxuICAgIExJVkVfVElNRVIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBgJHshdG90YWwgJiYgc2VsZi5pbm5lclRleHQudHJpbSgpIHx8IGAke190ZXh0c1t0b3RhbCA9PT0gMSA/IFwic2luZ3VsYXJcIiA6IFwicGx1cmFsXCJdfWAucmVwbGFjZShcIiVkXCIsIGAke3RvdGFsfWApfWA7XG4gICAgICBpZiAoIXNlbGYuaGlkZGVuICYmIChfcm9vdCA9PSBudWxsID8gdm9pZCAwIDogX3Jvb3QuYWN0aXZlRWxlbWVudCkgPT09IF9pbnB1dCkgc3BlYWsodGV4dCk7XG4gICAgICBzZWxmLl92YWx1ZSA9IHZhbHVlO1xuICAgIH0sIDFlMyk7XG4gIGlmIChJU19JT1MpXG4gICAgdmlzaWJsZS5tYXAoKG9wdCwgaWR4KSA9PiBhdHRyKG9wdCwgXCJ0aXRsZVwiLCBgJHtpZHggKyAxfS8ke3RvdGFsfWApKTtcbn07XG5pZiAoSVNfQlJPV1NFUilcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcImxpc3RcIiwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBnZXRSb290KHRoaXMpLmdldEVsZW1lbnRCeUlkKGF0dHIodGhpcywgXCJsaXN0XCIpIHx8IFwiXCIpO1xuICAgIH1cbiAgfSk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWRhdGFsaXN0XCIsIFVIVE1MRGF0YUxpc3RFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxEYXRhTGlzdEVsZW1lbnQsIFVIVE1MRGF0YUxpc3RTaGFkb3dSb290LCBVSFRNTERhdGFMaXN0U3R5bGUgfTtcbiIsImltcG9ydCB7IGZsaXAsIHR5cGUgUGxhY2VtZW50LCBzaGlmdCwgc2l6ZSB9IGZyb20gXCJAZmxvYXRpbmctdWkvZG9tXCI7XG5pbXBvcnQgeyBVSFRNTENvbWJvYm94RWxlbWVudCB9IGZyb20gXCJAdS1lbGVtZW50cy91LWNvbWJvYm94XCI7XG5pbXBvcnQgeyBVSFRNTERhdGFMaXN0RWxlbWVudCB9IGZyb20gXCJAdS1lbGVtZW50cy91LWRhdGFsaXN0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0YW5jaG9yUG9zaXRpb24sXG5cdGF0dHIsXG5cdGlzSW5wdXRMaWtlLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdG9uTXV0YXRpb24sXG5cdFFVSUNLX0VWRU5ULFxuXHR1c2VJZCxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19GSUVMRCA9IHN0eWxlcy5maWVsZC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVkFMSURBVElPTlMgPSBzdHlsZXMudmFsaWRhdGlvbi5zcGxpdChcIiBcIik7XG5jb25zdCBDU1NfVkFMSURBVElPTiA9IENTU19WQUxJREFUSU9OU1swXTtcblxuY29uc3QgZ2V0VGV4dCA9IChzdHlsZTogQ1NTU3R5bGVEZWNsYXJhdGlvbiwga2V5OiBzdHJpbmcpID0+XG5cdHN0eWxlLmdldFByb3BlcnR5VmFsdWUoYC0tbXRkcy10ZXh0LSR7a2V5fWApPy5zbGljZSgxLCAtMSkgfHwgXCJcIjsgLy8gc2xpY2UgdG8gdHJpbSBxdW90ZXNcblxuZnVuY3Rpb24gaGFuZGxlRmllbGRNdXRhdGlvbihcblx0ZmllbGRzOiBIVE1MQ29sbGVjdGlvbk9mPEVsZW1lbnQ+LFxuXHR2YWxpZGF0ZT86IGJvb2xlYW4sXG4pIHtcblx0Zm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpXG5cdFx0aWYgKGZpZWxkLmlzQ29ubmVjdGVkKSB7XG5cdFx0XHRjb25zdCBsYWJlbHM6IEhUTUxMYWJlbEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0Y29uc3QgZGVzY3M6IEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0Y29uc3QgdmFsaWRzOiBFbGVtZW50W10gPSBbXTtcblx0XHRcdGxldCBjb21ib2JveDogVUhUTUxDb21ib2JveEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblx0XHRcdGxldCBpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IHZhbGlkID0gdHJ1ZTtcblxuXHRcdFx0Zm9yIChjb25zdCBlbCBvZiBmaWVsZC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpIHtcblx0XHRcdFx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTExhYmVsRWxlbWVudCkgbGFiZWxzLnB1c2goZWwpO1xuXHRcdFx0XHRlbHNlIGlmIChlbCBpbnN0YW5jZW9mIFVIVE1MQ29tYm9ib3hFbGVtZW50KSBjb21ib2JveCA9IGVsO1xuXHRcdFx0XHRlbHNlIGlmIChpc0lucHV0TGlrZShlbCkgJiYgIWVsLmhpZGRlbikgaW5wdXQgPSBlbDtcblx0XHRcdFx0ZWxzZSBpZiAoZWwuaGFzQXR0cmlidXRlKFwiZGF0YS1kZXNjcmlwdGlvblwiKSkgZGVzY3MucHVzaChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhDU1NfVkFMSURBVElPTikpIHtcblx0XHRcdFx0XHR2YWxpZCA9IGF0dHIoZWwsIFwiZGF0YS1jb2xvclwiKSA9PT0gXCJzdWNjZXNzXCIgfHwgIWVsLmNsaWVudEhlaWdodDsgLy8gT25seSBzZXQgaW52YWxpZCBpZiBWYWxpZGF0aW9uIGlzIHZpc2libGVcblx0XHRcdFx0XHR2YWxpZHMucHVzaChlbCk7XG5cdFx0XHRcdFx0ZGVzY3MudW5zaGlmdChlbCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBIVE1MUGFyYWdyYXBoRWxlbWVudClcblx0XHRcdFx0XHRkZXNjcy5zb21lKChkZXNjKSA9PiBkZXNjLmNvbnRhaW5zKGVsKSkgfHwgZGVzY3MucHVzaChlbCk7IC8vIE9ubHkgYWRkIGlmIG5vdCBhbHJlYWR5IGluc2lkZSBkZXNjcmlwdGlvblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaW5wdXQpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBsYWJlbCBvZiBsYWJlbHMpIGxhYmVsLmh0bWxGb3IgPSB1c2VJZChpbnB1dCk7XG5cdFx0XHRcdGlmICh2YWxpZGF0ZSAmJiBhdHRyKGZpZWxkLCBcImRhdGEtdmFsaWRhdGlvblwiKSA9PT0gXCJmb3JtXCIpIHtcblx0XHRcdFx0XHR2YWxpZCA9IGlucHV0Lm1hdGNoZXMoXCI6dmFsaWRcIik7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiB2YWxpZHMpIGF0dHIoZWwsIFwiaGlkZGVuXCIsIHZhbGlkID8gXCJcIiA6IG51bGwpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlbmRlckNvbWJvYm94KGNvbWJvYm94KTtcblx0XHRcdFx0cmVuZGVyQ291bnRlcihpbnB1dCk7XG5cdFx0XHRcdHJlbmRlclRleHRhcmVhU2l6ZShpbnB1dCk7XG5cdFx0XHRcdGF0dHIoaW5wdXQsIFwiYXJpYS1kZXNjcmliZWRieVwiLCBkZXNjcy5tYXAodXNlSWQpLmpvaW4oXCIgXCIpIHx8IG51bGwpOyAvLyBSZW1vdmUgaWYgZW1wdHlcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWludmFsaWRcIiwgYCR7IXZhbGlkfWApO1xuXHRcdFx0fVxuXHRcdH1cbn1cblxuLy8gaU9TIGRvZXMgbm90IHN1cHBvcnQgZmllbGQtc2l6aW5nOiBjb250ZW50LCBzbyB3ZSBuZWVkIHRvIG1hbnVhbGx5IHJlc2l6ZVxuZnVuY3Rpb24gcmVuZGVyVGV4dGFyZWFTaXplKHRleHRhcmVhOiBFbGVtZW50KSB7XG5cdGlmICh0ZXh0YXJlYSBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcblx0XHR0ZXh0YXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tbXRkcy10ZXh0YXJlYS1oZWlnaHRcIiwgXCJhdXRvXCIpO1xuXHRcdHRleHRhcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuXHRcdFx0XCItLW10ZHMtdGV4dGFyZWEtaGVpZ2h0XCIsXG5cdFx0XHRgJHt0ZXh0YXJlYS5zY3JvbGxIZWlnaHR9cHhgLFxuXHRcdCk7XG5cdH1cbn1cblxuLy8gU2V0dXAgdHJhbnNsYXRpb25zIGZyb20gQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzXG5mdW5jdGlvbiByZW5kZXJDb21ib2JveChlbDogVUhUTUxDb21ib2JveEVsZW1lbnQgfCBudWxsKSB7XG5cdGNvbnN0IHsgY29udHJvbCwgbGlzdCB9ID0gZWwgfHwge307XG5cblx0aWYgKGVsICYmIGxpc3QgJiYgIWVsLmhhc0F0dHJpYnV0ZShcImRhdGEtc3ItYWRkZWRcIikpIHtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItYWRkZWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1hZGRlZFwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWVtcHR5XCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtZW1wdHlcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1mb3VuZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWZvdW5kXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItaW52YWxpZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWludmFsaWRcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1vZlwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LW9mXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItcmVtb3ZlXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtcmVtb3ZlXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItcmVtb3ZlZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LXJlbW92ZWRcIikpO1xuXHRcdGF0dHIobGlzdCwgXCJkYXRhLXNyLXBsdXJhbFwiLCBnZXRUZXh0KHN0eWxlLCBcImRhdGFsaXN0LXBsdXJhbFwiKSk7XG5cdFx0YXR0cihsaXN0LCBcImRhdGEtc3Itc2luZ3VsYXJcIiwgZ2V0VGV4dChzdHlsZSwgXCJkYXRhbGlzdC1zaW5ndWxhclwiKSk7XG5cdH1cblx0aWYgKGxpc3QgJiYgY29udHJvbCAmJiAhbGlzdC5oYXNBdHRyaWJ1dGUoXCJwb3BvdmVyXCIpKSB7XG5cdFx0YXR0cihsaXN0LCBcInBvcG92ZXJcIiwgXCJtYW51YWxcIik7XG5cdFx0YXR0cihjb250cm9sLCBcInBvcG92ZXJ0YXJnZXRcIiwgdXNlSWQobGlzdCkpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNvdW50ZXIoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0Y29uc3QgZWwgPSBpbnB1dD8ubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRjb25zdCBsaW1pdCA9IGVsICYmIGF0dHIoZWwsIFwiZGF0YS1jb3VudFwiKTtcblxuXHRpZiAoZWwgJiYgbGltaXQpIHtcblx0XHRjb25zdCByZW1haW5kZXIgPSBOdW1iZXIobGltaXQpIC0gaW5wdXQudmFsdWUubGVuZ3RoO1xuXHRcdGNvbnN0IG5leHRJbnZhbGlkID0gcmVtYWluZGVyIDwgMDtcblx0XHRjb25zdCBwcmV2SW52YWxpZCA9IGF0dHIoZWwsIFwiYXJpYS1saXZlXCIpID09PSBcInBvbGl0ZVwiO1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwgfHwgaW5wdXQpO1xuXHRcdGNvbnN0IG92ZXIgPSBnZXRUZXh0KHN0eWxlLCBcImNvdW50LW92ZXJcIik7XG5cdFx0Y29uc3QgdW5kZXIgPSBnZXRUZXh0KHN0eWxlLCBcImNvdW50LXVuZGVyXCIpO1xuXG5cdFx0aWYgKHByZXZJbnZhbGlkICE9PSBuZXh0SW52YWxpZCkge1xuXHRcdFx0YXR0cihlbCwgXCJhcmlhLWxpdmVcIiwgbmV4dEludmFsaWQgPyBcInBvbGl0ZVwiIDogXCJvZmZcIik7XG5cdFx0XHRmb3IgKGNvbnN0IGNzcyBvZiBDU1NfVkFMSURBVElPTlMpIGVsLmNsYXNzTGlzdC50b2dnbGUoY3NzLCBuZXh0SW52YWxpZCk7XG5cdFx0fVxuXHRcdGVsLnRleHRDb250ZW50ID0gKG5leHRJbnZhbGlkID8gb3ZlciA6IHVuZGVyKS5yZXBsYWNlKFxuXHRcdFx0XCIlZFwiLFxuXHRcdFx0YCR7TWF0aC5hYnMocmVtYWluZGVyKX1gLFxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRmllbGRUb2dnbGUoZXZlbnQ6IEV2ZW50ICYgeyBuZXdTdGF0ZT86IHN0cmluZyB9KSB7XG5cdGlmIChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBVSFRNTERhdGFMaXN0RWxlbWVudCkge1xuXHRcdGNvbnN0IGxpc3QgPSBldmVudC50YXJnZXQ7XG5cdFx0Y29uc3Qgcm9vdCA9IGxpc3QuZ2V0Um9vdE5vZGUoKSBhcyBTaGFkb3dSb290IHwgbnVsbDtcblx0XHRjb25zdCBhbmNob3IgPSByb290Py5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pihcblx0XHRcdGBbcG9wb3ZlcnRhcmdldD1cIiR7bGlzdC5pZH1cIl1gLFxuXHRcdCk7XG5cblx0XHRpZiAoZXZlbnQubmV3U3RhdGUgPT09IFwiY2xvc2VkXCIpIGFuY2hvclBvc2l0aW9uKGxpc3QsIGZhbHNlKTtcblx0XHRlbHNlIGlmIChhbmNob3IpXG5cdFx0XHRhbmNob3JQb3NpdGlvbihsaXN0LCBhbmNob3IsIHtcblx0XHRcdFx0cGxhY2VtZW50OiAoYXR0cihsaXN0LCBcImRhdGEtcG9zaXRpb25cIikgPz8gXCJib3R0b21cIikgYXMgUGxhY2VtZW50LFxuXHRcdFx0XHRtaWRkbGV3YXJlOiBbXG5cdFx0XHRcdFx0ZmxpcCgpLFxuXHRcdFx0XHRcdHNoaWZ0KCksXG5cdFx0XHRcdFx0c2l6ZSh7XG5cdFx0XHRcdFx0XHRwYWRkaW5nOiAxMCxcblx0XHRcdFx0XHRcdGFwcGx5KHsgYXZhaWxhYmxlSGVpZ2h0IH0pIHtcblx0XHRcdFx0XHRcdFx0bGlzdC5zdHlsZS53aWR0aCA9IGAke2FuY2hvci5vZmZzZXRXaWR0aH1weGA7XG5cdFx0XHRcdFx0XHRcdGxpc3Quc3R5bGUubWF4SGVpZ2h0ID0gYCR7TWF0aC5tYXgoNTAsIGF2YWlsYWJsZUhlaWdodCl9cHhgO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XSxcblx0XHRcdH0pO1xuXHR9XG59XG4vLyBVcGRhdGUgd2hlbiB0eXBpbmdcbmZ1bmN0aW9uIGhhbmRsZUZpZWxkSW5wdXQoZXZlbnQ6IEV2ZW50KSB7XG5cdGlmIChpc0lucHV0TGlrZShldmVudC50YXJnZXQpKSB7XG5cdFx0cmVuZGVyQ291bnRlcihldmVudC50YXJnZXQpO1xuXHRcdHJlbmRlclRleHRhcmVhU2l6ZShldmVudC50YXJnZXQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZpZWxkVmFsZGlhdGlvbihldmVudDogRXZlbnQpIHtcblx0Y29uc3QgZmllbGQgPSAoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oYC4ke0NTU19GSUVMRH1gKTtcblx0aWYgKGV2ZW50LnR5cGUgPT09IFwiaW52YWxpZFwiICYmIGZpZWxkKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBQcmV2ZW50IGJyb3dzZXJzIGZyb20gc2hvd2luZyBkZWZhdWx0IHZhbGlkYXRpb24gYnViYmxlc1xuXHRoYW5kbGVGaWVsZE11dGF0aW9uKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ1NTX0ZJRUxEKSwgdHJ1ZSk7IC8vIFVwZGF0ZSBzdGF0ZVxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfRklFTEQsIGhhbmRsZUZpZWxkTXV0YXRpb24pO1xuXHRvbihkb2N1bWVudCwgXCJpbnB1dFwiLCBoYW5kbGVGaWVsZElucHV0LCBRVUlDS19FVkVOVCk7XG5cdG9uKGRvY3VtZW50LCBcImludmFsaWQsc3VibWl0XCIsIGhhbmRsZUZpZWxkVmFsZGlhdGlvbiwgdHJ1ZSk7IC8vIFVzZSBjYXB0dXJlIGFzIGludmFsaWQgYW5kIHN1Ym1pdCBkb2VzIG5vdCBidWJibGVcblx0b24oZG9jdW1lbnQsIFwidG9nZ2xlXCIsIGhhbmRsZUZpZWxkVG9nZ2xlLCBRVUlDS19FVkVOVCk7IC8vIFVzZSBjYXB0dXJlIHNpbmNlIHRvZ2dsZSBkb2VzIG5vdCBidWJibGVcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIGlzSW5wdXRMaWtlLCBvbkxvYWRlZCwgb25NdXRhdGlvbiwgdXNlSWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0ZJRUxEU0VUID0gc3R5bGVzLmZpZWxkc2V0LnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19WQUxJREFUSU9OID0gc3R5bGVzLnZhbGlkYXRpb24uc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQVJJQV9ERVNDID0gXCJhcmlhLWRlc2NyaWJlZGJ5XCI7XG5jb25zdCBBUklBX0lOVkFMSUQgPSBcImFyaWEtaW52YWxpZFwiO1xuXG4vLyBVc2luZyBzZXRUaW1lb3V0IHRvIGVuc3VyZSBpdCBydW5zIGFmdGVyIGZpZWxkLW9ic2VydmVyXG5mdW5jdGlvbiBoYW5kbGVGaWVsZHNldE11dGF0aW9uKGZpZWxkc2V0czogSFRNTENvbGxlY3Rpb25PZjxFbGVtZW50Pikge1xuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRmb3IgKGNvbnN0IGZpZWxkc2V0IG9mIGZpZWxkc2V0cylcblx0XHRcdGlmIChmaWVsZHNldC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0XHRjb25zdCBpbnB1dHM6IEhUTUxJbnB1dEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0XHRsZXQgdmFsaWRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdFx0XHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiBmaWVsZHNldC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpIHtcblx0XHRcdFx0XHRpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdFx0dmFsaWQgPSBhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8ICFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0XHR2YWxpZElkID0gdXNlSWQoZWwpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpKSBpbnB1dHMucHVzaChlbCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykge1xuXHRcdFx0XHRcdGNvbnN0IGRlc2MgPSBhdHRyKGlucHV0LCBBUklBX0RFU0MpPy5yZXBsYWNlKHZhbGlkSWQgfHwgXCIjXCIsIFwiXCIpO1xuXG5cdFx0XHRcdFx0YXR0cihpbnB1dCwgQVJJQV9ERVNDLCBgJHt2YWxpZElkIHx8IFwiXCJ9ICR7ZGVzYyB8fCBcIlwifWAudHJpbSgpKTtcblx0XHRcdFx0XHRhdHRyKGlucHV0LCBBUklBX0lOVkFMSUQsIGAkeyF2YWxpZH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRFNFVCwgaGFuZGxlRmllbGRzZXRNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uTG9hZGVkLCBvbk11dGF0aW9uLCB0YWcgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0xPR08gPSBzdHlsZXMubG9nby5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZUxvZ29NdXRhdGlvbihbbG9nb106IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdGlmIChsb2dvPy5pc0Nvbm5lY3RlZCAmJiBsb2dvPy5maXJzdEVsZW1lbnRDaGlsZCBpbnN0YW5jZW9mIFNWR1NWR0VsZW1lbnQpIHtcblx0XHRmb3IgKGNvbnN0IGljb24gb2YgZG9jdW1lbnQuaGVhZC5xdWVyeVNlbGVjdG9yQWxsKFwibGlua1tyZWx+PSdpY29uJ11cIikpXG5cdFx0XHRpY29uLnNldEF0dHJpYnV0ZShcInJlbFwiLCBcImRpc2FibGVkXCIpOyAvLyBEaXNhYmxlIHByZXZpb3VzIGljb24gKGJ1dCBub3QgcmVtb3ZlIGlzIGFzIHRoaXMgbWFrZXMgTmV4dC5qcyBzYWQpXG5cblx0XHRjb25zdCBzdmcgPSBsb2dvLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdGNvbnN0IGlzRG90ID0gbG9nbz8uaGFzQXR0cmlidXRlKFwiZGF0YS1lbnZcIik7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzdmcpO1xuXHRcdGNvbnN0IHRleHQgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sb3JcIik7XG5cdFx0Y29uc3QgYmFjayA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCItLW10ZHMtbG9nby1jb2xvclwiKTtcblx0XHRjb25zdCBpY29uID0gc3ZnLm91dGVySFRNTFxuXHRcdFx0LnJlcGxhY2UoL1xcbisvZywgXCIgXCIpIC8vIFByZXZlbnQgbGluZSBicmVha3Ncblx0XHRcdC5yZXBsYWNlKC8oZmlsbHx3aWR0aHxoZWlnaHR8eG1sbnMpPVwiW15cIl0rXCIvZ2ksIFwiXCIpXG5cdFx0XHQucmVwbGFjZShcIjxzdmdcIiwgYDxzdmcgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgZmlsbD1cIiR7dGV4dH1cImApO1xuXG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChcblx0XHRcdHRhZyhcImxpbmtcIiwge1xuXHRcdFx0XHRocmVmOiBgZGF0YTppbWFnZS9zdmcreG1sLCR7ZW5jb2RlVVJJQ29tcG9uZW50KGA8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDU1IDU1Jz48cmVjdCBmaWxsPScke2lzRG90ID8gXCJub25lXCIgOiBiYWNrfScgd2lkdGg9JzUxJyBoZWlnaHQ9JzUxJyB4PScyJyB5PScyJyBzdHJva2U9JyR7dGV4dH0nIHN0cm9rZS1kYXNoYXJyYXk9JzAuMDkgNi4zOCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2Utb3BhY2l0eT0nJHtpc0RvdCA/IDAuNiA6IDB9JyBzdHJva2Utd2lkdGg9JzIuMycgcng9JzI1LjUnLz48ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNy41IDcuNSlcIj4ke2ljb259PC9nPjwvc3ZnPmApfWAsXG5cdFx0XHRcdHJlbDogXCJpY29uXCIsXG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfTE9HTywgaGFuZGxlTG9nb011dGF0aW9uKSxcbik7XG4iLCJpbXBvcnQgeyBmbGlwLCB0eXBlIFBsYWNlbWVudCwgc2hpZnQsIHNpemUgfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGFuY2hvclBvc2l0aW9uLCBhdHRyLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19QT1BPVkVSID0gc3R5bGVzLnBvcG92ZXIuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX0FVVE8gPSBgX210ZHMtcG9wb3Zlci1hdXRvYDtcblxudHlwZSBFdmVudFRvZ2dsZSA9IEV2ZW50ICYgUGFydGlhbDxUb2dnbGVFdmVudD47XG5cbmZ1bmN0aW9uIGhhbmRsZVBvcG92ZXJUb2dnbGUoeyB0YXJnZXQ6IGVsLCBuZXdTdGF0ZSB9OiBFdmVudFRvZ2dsZSkge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1BPUE9WRVIpKSB7XG5cdFx0Y29uc3QgaXNDbG9zaW5nID0gbmV3U3RhdGUgPT09IFwiY2xvc2VkXCI7XG5cdFx0Y29uc3QgaXNDb250YWluID0gYXR0cihlbCwgXCJkYXRhLW92ZXJzY3JvbGxcIikgPT09IFwiY29udGFpblwiO1xuXHRcdGNvbnN0IGFuY2hvciA9IChlbC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QpPy5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pihcblx0XHRcdGBbcG9wb3ZlcnRhcmdldD1cIiR7ZWwuaWR9XCJdYCxcblx0XHQpO1xuXG5cdFx0aWYgKGlzQ2xvc2luZykgYW5jaG9yUG9zaXRpb24oZWwsIGZhbHNlKTtcblx0XHRlbHNlIGlmIChhbmNob3IpXG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgYW5jaG9yLCB7XG5cdFx0XHRcdHBsYWNlbWVudDogKGF0dHIoZWwsIFwiZGF0YS1wb3NpdGlvblwiKSB8fCBcImJvdHRvbVwiKSBhcyBQbGFjZW1lbnQsXG5cdFx0XHRcdG1pZGRsZXdhcmU6IFtmbGlwKCksIHNoaWZ0KHsgcGFkZGluZzogMTAgfSldLmNvbmNhdChcblx0XHRcdFx0XHRpc0NvbnRhaW5cblx0XHRcdFx0XHRcdD8gc2l6ZSh7XG5cdFx0XHRcdFx0XHRcdFx0cGFkZGluZzogMTAsXG5cdFx0XHRcdFx0XHRcdFx0YXBwbHkoeyBhdmFpbGFibGVIZWlnaHQgfSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWwuc3R5bGUubWF4SGVpZ2h0ID0gYCR7TWF0aC5tYXgoNTAsIGF2YWlsYWJsZUhlaWdodCl9cHhgO1xuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQ6IFtdLFxuXHRcdFx0XHQpLFxuXHRcdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlUG9wb3ZlckJlZm9yZXRvZ2dsZSh7IHRhcmdldDogZWwsIG5ld1N0YXRlIH06IEV2ZW50VG9nZ2xlKSB7XG5cdGlmIChcblx0XHRuZXdTdGF0ZSA9PT0gXCJvcGVuXCIgJiZcblx0XHRlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG5cdFx0ZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19QT1BPVkVSKSAmJlxuXHRcdGF0dHIoZWwsIFwicG9wb3ZlclwiKSAhPT0gXCJtYW51YWxcIlxuXHQpIHtcblx0XHRlbC5jbGFzc0xpc3QuYWRkKENTU19BVVRPKTtcblx0XHRhdHRyKGVsLCBcInBvcG92ZXJcIiwgXCJtYW51YWxcIik7IC8vIE1ha2UgbWFudWFsIHRvIHByZXZlbnQgY2xvc2luZyB3aGVuIGNsaWNraW5nIHNjcm9sbGJhclxuXHR9XG59XG5cbi8vIFBvbHlmaWxsIHBvcG92ZXJ0YXJnZXQgZm9yIDxhPiAobm90IHN1cHBvcnRlZCBieSBuYXRpdmUpXG4vLyBhbmQgYXV0b21hdGljYWxseSBhc3N1bWUgcG9wb3ZlcnRhcmdldCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQgcG9wb3ZlclxuLy8gYnV0IHJlc3BlY3QgdGhlIHBvcG92ZXJ0YXJnZXQgYW5kIHBvcG92ZXJ0YXJnZXRhY3Rpb24gYXR0cmlidXRlXG5mdW5jdGlvbiBoYW5kbGVQb3BvdmVyTGlua0NsaWNrKGV2ZW50OiBFdmVudCkge1xuXHRjb25zdCBlbCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImEsYnV0dG9uXCIpO1xuXHRjb25zdCBpZCA9IGVsICYmIGF0dHIoZWwsIFwicG9wb3ZlcnRhcmdldFwiKTtcblx0Y29uc3QgcG9wID0gaWQgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkgOiBlbD8uY2xvc2VzdChgLiR7Q1NTX1BPUE9WRVJ9YCk7XG5cblx0Ly8gTWFudWFsbHkgY2xvc2UgcG9wb3ZlcnMgd2hlcmUgY2xpY2sgd2FzIG91dHNpZGVcblx0Zm9yIChjb25zdCBvcGVuIG9mIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ1NTX0FVVE8pKVxuXHRcdGlmICghb3Blbi5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkgJiYgcG9wICE9PSBvcGVuKVxuXHRcdFx0KG9wZW4gYXMgSFRNTEVsZW1lbnQpLmhpZGVQb3BvdmVyKCk7XG5cblx0aWYgKHBvcCAmJiBlbCkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIFByZXZlbnQgYnJvd3NlciBwb3BvdmVyIEFQSVxuXHRcdGNvbnN0IGFjdGlvbiA9IGF0dHIoZWwsIFwicG9wb3ZlcnRhcmdldGFjdGlvblwiKTtcblx0XHRjb25zdCBvcGVuID0gYWN0aW9uID09PSBcInNob3dcIiB8fCAoYWN0aW9uID09PSBcImhpZGVcIiA/IGZhbHNlIDogdW5kZWZpbmVkKTtcblxuXHRcdC8vIFBvcG92ZXIgY2FuIGJlIGRpc2Nvbm5ldGVkIGJ5IGNsaWNrIGhhbmRsZXIgZGVlcGVyIGRvd24gaW4gdGhlIERPTSB0aHJlZSBiZWZvcmUgcmVhY2hpbmcgZG9jdW1lbnRcblx0XHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiAhYWN0aW9uICYmIHBvcC5jb250YWlucyhlbCkpIHJldHVybjsgLy8gUmVxdWlyZSBcInBvcG92ZXJ0YXJnZXRhY3Rpb25cIiBhdHRyaWJ1dGUgdG8gbWFrZSBidXR0b25zIGluc2lkZSBwb3BvdmVyIHRvZ2dsZVxuXHRcdGlmIChwb3AgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBwb3AuaXNDb25uZWN0ZWQgJiYgcG9wLnRvZ2dsZVBvcG92ZXIpXG5cdFx0XHRwb3AudG9nZ2xlUG9wb3ZlcihvcGVuKTtcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZVBvcG92ZXJMaW5rQ2xpY2spOyAvLyBBbGxvdyBgPGE+YCB0byB1c2UgYHBvcG92ZXJ0YXJnZXRgIGFzIHdlbGxcblx0b24oZG9jdW1lbnQsIFwidG9nZ2xlXCIsIGhhbmRsZVBvcG92ZXJUb2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxuXHRvbihkb2N1bWVudCwgXCJiZWZvcmV0b2dnbGVcIiwgaGFuZGxlUG9wb3ZlckJlZm9yZXRvZ2dsZSwgUVVJQ0tfRVZFTlQpOyAvLyBVc2UgY2FwdHVyZSBzaW5jZSB0b2dnbGUgZG9lcyBub3QgYnViYmxlXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbiwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1RBQkxFID0gc3R5bGVzLnRhYmxlLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IElOVEVSQUNUSVZFID0gJ2EsYnV0dG9uLGxhYmVsLGlucHV0LHNlbGVjdCx0ZXh0YXJlYSxbcm9sZT1cImJ1dHRvblwiXSc7XG5cbmZ1bmN0aW9uIGhhbmRsZVRhYmxlTXV0YXRpb24odGFibGVzOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxUYWJsZUVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgdGFibGUgb2YgdGFibGVzKSB7XG5cdFx0Y29uc3QgdGhzID0gQXJyYXkuZnJvbSh0YWJsZS50SGVhZD8ucm93c1swXT8uY2VsbHMgfHwgW10sICh0aCkgPT5cblx0XHRcdHRoLmlubmVyVGV4dC50cmltKCksXG5cdFx0KTtcblxuXHRcdGZvciAoY29uc3QgdGJvZHkgb2YgdGFibGUudEJvZGllcylcblx0XHRcdGZvciAoY29uc3Qgcm93IG9mIHRib2R5LnJvd3MpXG5cdFx0XHRcdGZvciAoY29uc3QgY2VsbCBvZiByb3cuY2VsbHMpXG5cdFx0XHRcdFx0YXR0cihjZWxsLCBcImRhdGEtdGhcIiwgdGhzW2NlbGwuY2VsbEluZGV4XSB8fCBcIjplbXB0eVwiKTtcblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGVUYWJsZUNsaWNrKHsgdGFyZ2V0OiBlbCB9OiBFdmVudCkge1xuXHRpZiAoIShlbCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XG5cdGNvbnN0IHJvdyA9IGVsLmNsb3Nlc3QoXCJ0clwiKTtcblx0Y29uc3QgYWN0aW9uID0gcm93Py5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KCdbZGF0YS1jb21tYW5kPVwicm93XCJdJyk7XG5cdGlmIChhY3Rpb24gJiYgIWVsLmNsb3Nlc3QoSU5URVJBQ1RJVkUpKSBhY3Rpb24uY2xpY2s/LigpOyAvLyBGb3J3YXJkIGNsaWNrIHRvIGRhdGEtY29tbWFuZD1cInJvd1wiIGVsZW1lbnRcbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX1RBQkxFLCBoYW5kbGVUYWJsZU11dGF0aW9uKTtcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlVGFibGVDbGljayk7XG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbiwgb25Mb2FkZWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1RPQVNUID0gc3R5bGVzLnRvYXN0LnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IEFUVFJfU09SVCA9IFwiZGF0YS1zb3J0XCI7XG5cbmZ1bmN0aW9uIGhhbmRsZVRvYXN0U3RhdGUoeyBhbmltYXRpb25OYW1lLCB0YXJnZXQgfTogUGFydGlhbDxBbmltYXRpb25FdmVudD4pIHtcblx0Y29uc3QgZGlhbG9nID0gdGFyZ2V0IGFzIEhUTUxEaWFsb2dFbGVtZW50O1xuXHRpZiAoYW5pbWF0aW9uTmFtZSA9PT0gc3R5bGVzLl90b2FzdFRpbWVvdXQpIGRpYWxvZy5jbG9zZSgpO1xuXHRpZiAoYW5pbWF0aW9uTmFtZSAhPT0gc3R5bGVzLl90b2FzdE9wZW4pIHJldHVybjtcblxuXHRjb25zdCBtcyA9IE51bWJlcihhdHRyKGRpYWxvZywgXCJkYXRhLXRpbWVvdXRcIikpO1xuXHRkaWFsb2cuc3R5bGUuc2V0UHJvcGVydHkoXCItLW10ZHNjLXRvYXN0LXRpbWVvdXRcIiwgbXMgPyBgJHttc31tc2AgOiBudWxsKTtcblx0ZGlhbG9nLmhhc0F0dHJpYnV0ZShBVFRSX1NPUlQpIHx8IGF0dHIoZGlhbG9nLCBBVFRSX1NPUlQsIGAke0RhdGUubm93KCl9YCk7XG5cdGF0dHIoZGlhbG9nLCBcInRhYmluZGV4XCIsIFwiMFwiKTsgLy8gTWFrZSBmb2N1c2FibGVcblxuXHQvLyBTZXR1cCBsYXlvdXRcblx0Wy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTERpYWxvZ0VsZW1lbnQ+KGAuJHtDU1NfVE9BU1R9W29wZW5dYCldXG5cdFx0LnNvcnQoKGEsIGIpID0+IE51bWJlcihhdHRyKGIsIEFUVFJfU09SVCkpIC0gTnVtYmVyKGF0dHIoYSwgQVRUUl9TT1JUKSkpXG5cdFx0LnJlZHVjZSgodG9wLCB0b2FzdCkgPT4ge1xuXHRcdFx0dG9hc3Quc3R5bGUudHJhbnNsYXRlID0gYDAgJHt0b2FzdCA9PT0gdGFyZ2V0ID8gMCA6IHRvcH1weGA7XG5cdFx0XHRyZXR1cm4gdG9wICsgdG9hc3Qub2Zmc2V0SGVpZ2h0ICsgNTtcblx0XHR9LCAwKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlVG9hc3RDbGljayh7IHRhcmdldCwgY2xpZW50WDogeCwgY2xpZW50WTogeSB9OiBNb3VzZUV2ZW50KSB7XG5cdGlmIChcblx0XHR0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRGlhbG9nRWxlbWVudCAmJlxuXHRcdHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1RPQVNUKSAmJlxuXHRcdGF0dHIodGFyZ2V0LCBcImRhdGEtY2xvc2VkYnlcIikgIT09IFwibm9uZVwiXG5cdCkge1xuXHRcdGNvbnN0IHJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0Y29uc3QgdG9hc3QgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpO1xuXHRcdGNvbnN0IGNsb3NlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGFyZ2V0LCBcIjo6YWZ0ZXJcIik7XG5cdFx0Y29uc3QgdG9wID0gcmVjdC50b3AgKyBOdW1iZXIucGFyc2VJbnQodG9hc3QucGFkZGluZ1RvcCwgMTApO1xuXHRcdGNvbnN0IGJvdHRvbSA9IHRvcCArIE51bWJlci5wYXJzZUludChjbG9zZS5oZWlnaHQsIDEwKTtcblx0XHRjb25zdCByaWdodCA9IHJlY3QucmlnaHQgLSBOdW1iZXIucGFyc2VJbnQodG9hc3QucGFkZGluZ1JpZ2h0LCAxMCk7XG5cdFx0Y29uc3QgbGVmdCA9IHJpZ2h0IC0gTnVtYmVyLnBhcnNlSW50KGNsb3NlLndpZHRoLCAxMCk7XG5cdFx0Y29uc3QgaXNDbG9zZSA9IHRvcCA8PSB5ICYmIHkgPD0gYm90dG9tICYmIGxlZnQgPD0geCAmJiB4IDw9IHJpZ2h0O1xuXG5cdFx0aWYgKGlzQ2xvc2UpIHRhcmdldC5jbG9zZSgpOyAvLyBDbGljayBpcyBvbiA6OmFmdGVyIGVsZW1lbnRcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcImFuaW1hdGlvbnN0YXJ0XCIsIGhhbmRsZVRvYXN0U3RhdGUpO1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVUb2FzdENsaWNrIGFzIEV2ZW50TGlzdGVuZXIpO1xufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgb24sIG9uTG9hZGVkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UT0dHTEVHUk9VUCA9IGAuJHtzdHlsZXMudG9nZ2xlZ3JvdXAuc3BsaXQoXCIgXCIpWzBdfWA7XG5cbi8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBzaG93aW5nIGRlZmF1bHQgdmFsaWRhdGlvbiBidWJibGVzXG5mdW5jdGlvbiBoYW5kbGVUb2dnbGVncm91cEtleWRvd24oZXZlbnQ6IEV2ZW50ICYgUGFydGlhbDxLZXlib2FyZEV2ZW50Pikge1xuXHRjb25zdCB7IGtleSwgdGFyZ2V0OiBlbCB9ID0gZXZlbnQ7XG5cdGNvbnN0IGdyb3VwID0gZWwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIGVsLmNsb3Nlc3QoQ1NTX1RPR0dMRUdST1VQKTtcblxuXHRpZiAoIWdyb3VwKSByZXR1cm47XG5cdGlmIChrZXkgPT09IFwiRW50ZXJcIikgZWwuY2xpY2soKTtcblx0aWYgKGtleT8uc3RhcnRzV2l0aChcIkFycm93XCIpKSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRjb25zdCBpbnB1dHMgPSBncm91cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpO1xuXHRcdGNvbnN0IGluZGV4ID0gWy4uLmlucHV0c10uaW5kZXhPZihlbCk7XG5cdFx0Y29uc3QgbW92ZSA9IGtleS5tYXRjaCgvQXJyb3coUmlnaHR8RG93bikvKSA/IDEgOiAtMTtcblx0XHRpbnB1dHNbKGlucHV0cy5sZW5ndGggKyBpbmRleCArIG1vdmUpICUgaW5wdXRzLmxlbmd0aF0/LmZvY3VzKCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb24oZG9jdW1lbnQsIFwia2V5ZG93blwiLCBoYW5kbGVUb2dnbGVncm91cEtleWRvd24pKTtcbiIsImltcG9ydCB7IGZsaXAsIHR5cGUgUGxhY2VtZW50LCBzaGlmdCB9IGZyb20gXCJAZmxvYXRpbmctdWkvZG9tXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0YW5jaG9yUG9zaXRpb24sXG5cdGF0dHIsXG5cdElTX0JST1dTRVIsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0UVVJQ0tfRVZFTlQsXG5cdHRhZyxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IERFU0NSSUJFREJZID0gXCJhcmlhLWRlc2NyaWJlZGJ5XCI7XG5jb25zdCBFU0MgPSBcIkVzY2FwZVwiO1xuY29uc3QgTEFCRUxMRURCWSA9IFwiYXJpYS1sYWJlbGxlZGJ5XCI7XG5jb25zdCBQT1NJVElPTl9DU1NfUFJPUEVSVFkgPSBcIi0tbXRkcy10b29sdGlwLXBvc2l0aW9uXCI7XG5jb25zdCBUSFJPVFRMRV9ERUxBWSA9IDMwMDtcbmNvbnN0IFRPT0xUSVBfSUQgPSBcIm10ZHMtdG9vbHRpcFwiO1xuY29uc3QgVE9PTFRJUCA9IElTX0JST1dTRVJcblx0PyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChUT09MVElQX0lEKSB8fFxuXHRcdHRhZyhcImRpdlwiLCB7XG5cdFx0XHRjbGFzczogc3R5bGVzLl90b29sdGlwLFxuXHRcdFx0aWQ6IFRPT0xUSVBfSUQsXG5cdFx0XHRwb3BvdmVyOiBcIm1hbnVhbFwiLFxuXHRcdH0pXG5cdDogbnVsbDtcblxubGV0IEFOQ0hPUjogRWxlbWVudCB8IG51bGwgPSBudWxsO1xubGV0IExBU1RfQ0FMTCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbmxldCBUSFJPVFRMRTogbnVtYmVyIHwgUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gPSAwO1xuXG5mdW5jdGlvbiBoYW5kbGVUb29sdGlwTW92ZSh7IHRhcmdldCwgdHlwZSwga2V5IH06IEV2ZW50ICYgeyBrZXk/OiBzdHJpbmcgfSkge1xuXHRpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIgJiYga2V5ICE9PSBFU0MpIHJldHVybjsgLy8gQWxsb3cgRVNDIGRpc21pc3MgdG8gZm9sbG93IGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvQVJJQS9hcGcvcGF0dGVybnMvdG9vbHRpcC9cblx0Y29uc3Qgd2FpdCA9IExBU1RfQ0FMTCArIFRIUk9UVExFX0RFTEFZIC0gRGF0ZS5ub3coKTtcblx0Y2xlYXJUaW1lb3V0KFRIUk9UVExFKTtcblx0VEhST1RUTEUgPSBzZXRUaW1lb3V0KFxuXHRcdGhhbmRsZVRvb2x0aXBNb3ZlVGhyb3R0bGVkLFxuXHRcdE1hdGgubWF4KHdhaXQsIDApLFxuXHRcdGtleSA9PT0gRVNDID8gbnVsbCA6IHRhcmdldCxcblx0KTtcbn1cblxuLy8gVXNpbmcgYSB0aHJvdHRsZWQgZnVuY3Rpb24gdG8gYXZvaWQgcGVyZm9ybWFuY2UgaXNzdWVzXG5mdW5jdGlvbiBoYW5kbGVUb29sdGlwTW92ZVRocm90dGxlZCh0YXJnZXQ6IEVsZW1lbnQgfCBudWxsKSB7XG5cdExBU1RfQ0FMTCA9IERhdGUubm93KCk7XG5cblx0Ly8gQnVpbGQgYW5kIGFwcGVuZCB0b29sdGlwIGlmIG5vdCBleGlzdGluZ1xuXHRpZiAoIVRPT0xUSVAgfHwgdGFyZ2V0ID09PSBUT09MVElQKSByZXR1cm47IC8vIEFsbG93IHRvb2x0aXAgdG8gYmUgaG92ZXJlZCwgZm9sbG93aW5nIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjEvI2NvbnRlbnQtb24taG92ZXItb3ItZm9jdXNcblx0aWYgKCFUT09MVElQPy5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoVE9PTFRJUCk7IC8vIEVuc3VyZSBjb25uZWN0ZWRcblx0bGV0IGFuY2hvciA9IHRhcmdldD8uY2xvc2VzdD8uPEVsZW1lbnQ+KFwiW2RhdGEtdG9vbHRpcF1cIikgfHwgbnVsbDtcblxuXHQvLyBObyBuZWVkIHRvIHVwZGF0ZVxuXHRpZiAoYW5jaG9yID09PSBBTkNIT1IpIHJldHVybjtcblxuXHRjb25zdCBjb250ZW50ID0gKGFuY2hvciAmJiBhdHRyKGFuY2hvciwgXCJkYXRhLXRvb2x0aXBcIikpIHx8IFwiXCI7XG5cdGNvbnN0IHBvc2l0aW9uID1cblx0XHQoYW5jaG9yICYmIGF0dHIoYW5jaG9yLCBcImRhdGEtdG9vbHRpcC1wb3NpdGlvblwiKSkgfHxcblx0XHR3aW5kb3dcblx0XHRcdC5nZXRDb21wdXRlZFN0eWxlKGFuY2hvciB8fCBkb2N1bWVudC5ib2R5KVxuXHRcdFx0LmdldFByb3BlcnR5VmFsdWUoUE9TSVRJT05fQ1NTX1BST1BFUlRZKVxuXHRcdFx0Py50cmltKCkgfHxcblx0XHRcInRvcFwiO1xuXG5cdGNvbnN0IGlzSGlkZGVuID1cblx0XHQhY29udGVudCB8fFxuXHRcdGNvbnRlbnQgPT09IFwiZmFsc2VcIiB8fFxuXHRcdGNvbnRlbnQgPT09IFwidHJ1ZVwiIHx8XG5cdFx0cG9zaXRpb24gPT09IFwibm9uZVwiO1xuXG5cdGlmIChpc0hpZGRlbikgYW5jaG9yID0gbnVsbDsgLy8gRG8gbm90IHNob3cgdG9vbHRpcCBpZiBib29saXNoIHZhbHVlXG5cdGlmIChhbmNob3IpIFRPT0xUSVAudGV4dENvbnRlbnQgPSBjb250ZW50OyAvLyBPbmx5IHVwZGF0ZSBjb250ZW50IGlmIG5ldyBhbmNob3JcblxuXHRjb25zdCBoYWRMYWJlbCA9IEFOQ0hPUiAmJiBhdHRyKEFOQ0hPUiwgTEFCRUxMRURCWSkgPT09IFRPT0xUSVA/LmlkO1xuXHRjb25zdCBoYXNMYWJlbCA9XG5cdFx0KGFuY2hvciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50XG5cdFx0XHQ/IGFuY2hvci5pbm5lclRleHRcblx0XHRcdDogYW5jaG9yPy50ZXh0Q29udGVudFxuXHRcdCk/LnRyaW0oKSB8fFxuXHRcdGFuY2hvcj8uaGFzQXR0cmlidXRlKExBQkVMTEVEQlkpIHx8XG5cdFx0YW5jaG9yPy5oYXNBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIpO1xuXG5cdEFOQ0hPUj8ucmVtb3ZlQXR0cmlidXRlKGhhZExhYmVsID8gTEFCRUxMRURCWSA6IERFU0NSSUJFREJZKTsgLy8gVW5saW5rIHByZXZpb3VzIGFuY2hvclxuXHRhbmNob3JQb3NpdGlvbihUT09MVElQLCBmYWxzZSk7IC8vIFJlc2V0IGFuY2hvciBwb3NpdGlvblxuXG5cdEFOQ0hPUiA9IGFuY2hvcjsgLy8gU3RvcmUgbmV3IGFuY2hvciAtIG1pZ2h0IGJlIG51bGwgaWYgbm8gbmV3IGFuY2hvclxuXHRpZiAoQU5DSE9SKSBhdHRyKEFOQ0hPUiwgaGFzTGFiZWwgPyBERVNDUklCRURCWSA6IExBQkVMTEVEQlksIFRPT0xUSVA/LmlkKTsgLy8gVXNlIHRvb2x0aXAgYXMgZGVzY3JpcHRpb24gaWYgYWxscmVhZHkgaGFzIGxhYmVsXG5cdGlmIChBTkNIT1I/LmlzQ29ubmVjdGVkKSBUT09MVElQLmhpZGVQb3BvdmVyKCk7IC8vIEhpZGUgdG9vbHRpcCBzbyBpdCBjYW4gYmUgcGxhY2VkIG9uIHRvcC1sYXllciBvbiBuZXh0IHNob3dcblx0VE9PTFRJUC50b2dnbGVQb3BvdmVyKCEhYW5jaG9yKTtcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgYW5jaG9yIHx8IGZhbHNlLCB7XG5cdFx0cGxhY2VtZW50OiBwb3NpdGlvbiBhcyBQbGFjZW1lbnQsXG5cdFx0bWlkZGxld2FyZTogW2ZsaXAoKSwgc2hpZnQoeyBwYWRkaW5nOiAxMCB9KV0sXG5cdH0pO1xufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcImJsdXIsZm9jdXMsbW91c2VvdXQsbW91c2VvdmVyXCIsIGhhbmRsZVRvb2x0aXBNb3ZlLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJrZXlkb3duXCIsIGhhbmRsZVRvb2x0aXBNb3ZlLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJibHVyXCIsIGhhbmRsZVRvb2x0aXBNb3ZlLCBRVUlDS19FVkVOVCk7XG59KTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIGFzQnV0dG9uID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGlzQ2xpY2sgPSBcImtleVwiIGluIGV2ZW50ICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKTtcbiAgaWYgKGlzQ2xpY2spIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChpc0NsaWNrICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBldmVudC50YXJnZXQuY2xpY2soKTtcbiAgcmV0dXJuIGlzQ2xpY2s7XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIGlmIChhdHRycykgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkgYXR0cihlbCwga2V5LCB2YWwpO1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QgPSAoc3R5bGUsIHNsb3QgPSBcIjxzbG90Pjwvc2xvdD5cIikgPT4gYDx0ZW1wbGF0ZSBzaGFkb3dyb290bW9kZT1cIm9wZW5cIj4ke3Nsb3R9PHN0eWxlPiR7c3R5bGV9PC9zdHlsZT48L3RlbXBsYXRlPmA7XG5cbi8vIHUtZGV0YWlscy50c1xudmFyIFVIVE1MRGV0YWlsc1N0eWxlID0gYCR7RElTUExBWV9CTE9DS31cbjo6c2xvdHRlZCh1LXN1bW1hcnkpIHsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBibG9jayB9XG46OnNsb3R0ZWQodS1zdW1tYXJ5KTo6YmVmb3JlIHsgY29udGVudDogJyc7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgbWFyZ2luLWlubGluZTogLjA1ZW0gLjMxMjVlbTsgYm9yZGVyLWJsb2NrOiAuMzEyNWVtIHNvbGlkIHRyYW5zcGFyZW50OyBib3JkZXItaW5saW5lLXN0YXJ0OiAuNWVtIHNvbGlkIH1cbjo6c2xvdHRlZCh1LXN1bW1hcnlbYXJpYS1leHBhbmRlZD1cInRydWVcIl0pOjpiZWZvcmUgeyByb3RhdGU6IDkwZGVnIH1cbjpob3N0ID4gW3BhcnQ9XCJkZXRhaWxzLWNvbnRlbnRcIl06bm90KFtoaWRkZW49XCJcIl0pIHsgZGlzcGxheTogYmxvY2sgfWA7XG52YXIgVUhUTUxEZXRhaWxzU2hhZG93Um9vdCA9IGRlY2xhcmF0aXZlU2hhZG93Um9vdChcbiAgVUhUTUxEZXRhaWxzU3R5bGUsXG4gICc8c2xvdCBuYW1lPVwic3VtbWFyeVwiPjwvc2xvdD48c2xvdCBwYXJ0PVwiZGV0YWlscy1jb250ZW50XCIgaGlkZGVuPVwidW50aWwtZm91bmRcIj48L3Nsb3Q+J1xuKTtcbnZhciBVSFRNTERldGFpbHNFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIFVzaW5nIHVuZGVyc2NvcmUgaW5zdGVhZCBvZiBwcml2YXRlIGZpZWxkcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLl9jb250ZW50ID0gbnVsbDtcbiAgICBpZiAoIXRoaXMuc2hhZG93Um9vdClcbiAgICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IG5hbWU6IFwic3VtbWFyeVwiIH0pLFxuICAgICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IHBhcnQ6IFwiZGV0YWlscy1jb250ZW50XCIgfSksXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBVSFRNTERldGFpbHNTdHlsZSlcbiAgICAgICk7XG4gIH1cbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcIm9wZW5cIl07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdmFyIF9hMjtcbiAgICB0aGlzLl9jb250ZW50ID0gKF9hMiA9IHRoaXMuc2hhZG93Um9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jaGlsZHJlblsxXTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcImdyb3VwXCIpO1xuICAgIG9uKHRoaXMuX2NvbnRlbnQsIFwiYmVmb3JlbWF0Y2hcIiwgdGhpcyk7XG4gICAgb24odGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMuX2NvbnRlbnQpIG9mZih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgdGhpcy5fY29udGVudCA9IG51bGw7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIHByZXYsIG5leHQpIHtcbiAgICBjb25zdCBoaWRlID0gXCJvbmJlZm9yZW1hdGNoXCIgaW4gdGhpcyA/IFwidW50aWwtZm91bmRcIiA6IHRydWU7XG4gICAgY29uc3Qgb3BlbiA9IHRoaXMub3BlbjtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuY2hpbGRyZW4pXG4gICAgICBpZiAoZWwubm9kZU5hbWUgPT09IFwiVS1TVU1NQVJZXCIpIGF0dHIoZWwsIFwiYXJpYS1leHBhbmRlZFwiLCBgJHtvcGVufWApO1xuICAgIGlmICh0aGlzLl9jb250ZW50KSB7XG4gICAgICBhdHRyKHRoaXMuX2NvbnRlbnQsIFwiYXJpYS1oaWRkZW5cIiwgYCR7IW9wZW59YCk7XG4gICAgICBhdHRyKHRoaXMuX2NvbnRlbnQsIFwidGFiaW5kZXhcIiwgb3BlbiA/IG51bGwgOiBcIi0xXCIpO1xuICAgICAgdGhpcy5fY29udGVudC5oaWRkZW4gPSBvcGVuID8gZmFsc2UgOiBoaWRlO1xuICAgIH1cbiAgICBpZiAob3BlbiAmJiB0aGlzLm5hbWUpIHtcbiAgICAgIGNvbnN0IHVEZXRhaWxzTGlzdCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYCR7dGhpcy5ub2RlTmFtZX1bbmFtZT1cIiR7dGhpcy5uYW1lfVwiXWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IHVEZXRhaWxzIG9mIHVEZXRhaWxzTGlzdClcbiAgICAgICAgaWYgKHVEZXRhaWxzICE9PSB0aGlzKSB1RGV0YWlscy5vcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChwcm9wID09PSBcIm9wZW5cIiAmJiBwcmV2ID09PSBudWxsICE9PSAobmV4dCA9PT0gbnVsbCkpXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwidG9nZ2xlXCIpKTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCI6c2NvcGUgPiB1LXN1bW1hcnlcIik7XG4gICAgY29uc3QgaXNTdW1tYXJ5ID0gc3VtbWFyeSA9PSBudWxsID8gdm9pZCAwIDogc3VtbWFyeS5jb250YWlucyhldmVudC50YXJnZXQpO1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmVmb3JlbWF0Y2hcIikgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICBpZiAoaXNTdW1tYXJ5ICYmIGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiKSBhc0J1dHRvbihldmVudCk7XG4gICAgaWYgKGlzU3VtbWFyeSAmJiBldmVudC50eXBlID09PSBcImNsaWNrXCIpIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG4gIH1cbiAgZ2V0IG9wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwib3BlblwiKTtcbiAgfVxuICBzZXQgb3Blbih2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJvcGVuXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFwibmFtZVwiKSB8fCBcIlwiO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcIm5hbWVcIiwgdmFsdWUpO1xuICB9XG59O1xudmFyIFVIVE1MU3VtbWFyeUVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIHRoaXMuc2xvdCA9IFwic3VtbWFyeVwiO1xuICAgIHRoaXMudGFiSW5kZXggPSAwO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1kZXRhaWxzXCIsIFVIVE1MRGV0YWlsc0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1zdW1tYXJ5XCIsIFVIVE1MU3VtbWFyeUVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERldGFpbHNFbGVtZW50LCBVSFRNTERldGFpbHNTaGFkb3dSb290LCBVSFRNTERldGFpbHNTdHlsZSwgVUhUTUxTdW1tYXJ5RWxlbWVudCB9O1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0ZJUkVGT1ggPSBJU19CUk9XU0VSICYmIC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZ2V0TGFiZWwgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgbGFiZWwgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikgfHwgXCJcIjtcbiAgY29uc3QgbGFiZWxzID0gKChfYTIgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxsZWRieVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkuc3BsaXQoL1xccysvKSkgfHwgW107XG4gIHJldHVybiBbXG4gICAgLi4ubGFiZWxzLm1hcCgoaWQyKSA9PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZDIpKSxcbiAgICAvLyBHZXQgYWxsIGxhYmVsbGVkYnkgZWxlbWVudHNcbiAgICAuLi5BcnJheS5mcm9tKGVsLmxhYmVscyB8fCBbXSlcbiAgICAvLyBHZXQgYWxsIDxsYWJlbD4gZWxlbWVudHNcbiAgXS5yZWR1Y2UoKGFjYywgZWwyKSA9PiB7XG4gICAgdmFyIF9hMztcbiAgICByZXR1cm4gYWNjIHx8ICgoX2EzID0gZWwyID09IG51bGwgPyB2b2lkIDAgOiBlbDIuaW5uZXJUZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnRyaW0oKSkgfHwgXCJcIjtcbiAgfSwgbGFiZWwpO1xufTtcbnZhciBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QgPSAoc3R5bGUsIHNsb3QgPSBcIjxzbG90Pjwvc2xvdD5cIikgPT4gYDx0ZW1wbGF0ZSBzaGFkb3dyb290bW9kZT1cIm9wZW5cIj4ke3Nsb3R9PHN0eWxlPiR7c3R5bGV9PC9zdHlsZT48L3RlbXBsYXRlPmA7XG5cbi8vIHUtcHJvZ3Jlc3MudHNcbnZhciBVSFRNTFByb2dyZXNzU3R5bGUgPSBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgYm9yZGVyOiAxcHggc29saWQ7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgaGVpZ2h0OiAuNWVtOyB3aWR0aDogMTBlbTsgb3ZlcmZsb3c6IGhpZGRlbiB9XG46aG9zdDo6YmVmb3JlIHsgY29udGVudDogJyc7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDEwMCU7IGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsgd2lkdGg6IHZhcigtLXBlcmNlbnRhZ2UsIDAlKTsgdHJhbnNpdGlvbjogd2lkdGggLjJzIH1cbjpob3N0KDpub3QoW3ZhbHVlXSkpIHsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLGN1cnJlbnRDb2xvciAyNSUsIHRyYW5zcGFyZW50IDUwJSwgY3VycmVudENvbG9yIDc1JSkgNTAlLzQwMCUgfVxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSB7IDpob3N0IHsgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlIDJzIGxpbmVhciBpbmZpbml0ZSB9ICB9XG5Aa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUgeyBmcm9tIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAxMDAlIH0gdG8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDAgfSB9YDtcbnZhciBVSFRNTFByb2dyZXNzU2hhZG93Um9vdCA9IGRlY2xhcmF0aXZlU2hhZG93Um9vdChcbiAgVUhUTUxQcm9ncmVzc1N0eWxlLFxuICBcIjxzbG90IGhpZGRlbj48L3Nsb3Q+XCJcbik7XG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MUHJvZ3Jlc3NFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcInZhbHVlXCIsIFwibWF4XCJdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKCF0aGlzLnNoYWRvd1Jvb3QpXG4gICAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBoaWRkZW46IFwiXCIgfSksXG4gICAgICAgIC8vIFNsb3QgaGlkaW5nIGNvbnRlbnQgYWxsb3dzIGxlZ2FjeSBicm93c2VyIHRvIGRpc3BsYXkgZmFsbGJhY2sgdGV4dFxuICAgICAgICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgVUhUTUxQcm9ncmVzc1N0eWxlKVxuICAgICAgKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoU0tJUF9BVFRSX0NIQU5HRSkgcmV0dXJuO1xuICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgIGNvbnN0IHJvbGVJbWFnZSA9IElTX0lPUyB8fCBJU19GSVJFRk9YO1xuICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKHRoaXMucG9zaXRpb24gKiAxMDApKTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wZXJjZW50YWdlXCIsIGAke3BlcmNlbnRhZ2V9JWApO1xuICAgIGxldCBsYWJlbCA9IGdldExhYmVsKHRoaXMpO1xuICAgIGlmIChyb2xlSW1hZ2UpIGxhYmVsID0gYCR7bGFiZWwucmVwbGFjZSgvXFxkKyUkLywgXCJcIil9ICR7cGVyY2VudGFnZX0lYDtcbiAgICBpZiAoSVNfRklSRUZPWCkgZm9yIChjb25zdCBlbCBvZiB0aGlzLmxhYmVscykgYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIsIGxhYmVsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1idXN5XCIsIGAke3RoaXMucG9zaXRpb24gPT09IC0xfWApO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsXCIsIGxhYmVsLnRyaW0oKSk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtbGFiZWxsZWRieVwiLCBudWxsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1heFwiLCBcIjEwMFwiKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1pblwiLCBcIjBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVub3dcIiwgYCR7cGVyY2VudGFnZX1gKTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCByb2xlSW1hZ2UgPyBcImltZ1wiIDogXCJwcm9ncmVzc2JhclwiKTtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG4gIH1cbiAgZ2V0IGxhYmVscygpIHtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuY2xvc2VzdChcImxhYmVsOm5vdChbZm9yXSlcIik7XG4gICAgY29uc3QgaWQyID0gdXNlSWQodGhpcyk7XG4gICAgaWYgKGxhYmVsKSBsYWJlbC5odG1sRm9yID0gaWQyO1xuICAgIGNvbnN0IGVsID0gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYGxhYmVsW2Zvcj1cIiR7aWQyfVwiXWBcbiAgICApO1xuICAgIHJldHVybiBlbDtcbiAgfVxuICBnZXQgcG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUgPT09IG51bGwgPyAtMSA6IE1hdGgubWluKHRoaXMudmFsdWUgLyB0aGlzLm1heCwgMSk7XG4gIH1cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBnZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiKTtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IG1heCgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwibWF4XCIpIHx8IDE7XG4gIH1cbiAgc2V0IG1heChtYXgpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJtYXhcIiwgbWF4KTtcbiAgfVxufTtcbi8vIFByZXZlbnQgQ2hyb21lIERldlRvb2xzIHdhcm5pbmcgYWJvdXQgPGxhYmVsIGZvcj1cIlwiPiBwb2ludGluZyB0byA8dS1wcm9ncmVzcz5cblVIVE1MUHJvZ3Jlc3NFbGVtZW50LmZvcm1Bc3NvY2lhdGVkID0gdHJ1ZTtcbnZhciBpc051bWVyaWMgPSAodmFsdWUpID0+ICFOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlRmxvYXQoYCR7dmFsdWV9YCkpICYmIE51bWJlci5pc0Zpbml0ZShOdW1iZXIodmFsdWUpKTtcbnZhciBnZXROdW1iZXIgPSAoZWwsIGtleSkgPT4ge1xuICBjb25zdCB2YWx1ZSA9IGF0dHIoZWwsIGtleSk7XG4gIHJldHVybiBpc051bWVyaWModmFsdWUpID8gTWF0aC5tYXgoMCwgTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUpKSA6IG51bGw7XG59O1xudmFyIHNldE51bWJlciA9IChlbCwga2V5LCB2YWwpID0+IHtcbiAgaWYgKHZhbCA9PT0gbnVsbCB8fCBpc051bWVyaWModmFsKSkgYXR0cihlbCwga2V5LCBgJHt2YWx9YCk7XG4gIGVsc2UgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2V0IG5vbi1udW1lcmljICcke2F0dHJ9JzogJyR7dmFsfSdgKTtcbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXByb2dyZXNzXCIsIFVIVE1MUHJvZ3Jlc3NFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxQcm9ncmVzc0VsZW1lbnQsIFVIVE1MUHJvZ3Jlc3NTaGFkb3dSb290LCBVSFRNTFByb2dyZXNzU3R5bGUgfTtcbiJdLCJuYW1lcyI6WyJfX2RlZlByb3AiLCJfX2dldE93blByb3BTeW1ib2xzIiwiX19oYXNPd25Qcm9wIiwiX19wcm9wSXNFbnVtIiwiX19kZWZOb3JtYWxQcm9wIiwib2JqIiwia2V5IiwidmFsdWUiLCJfX3NwcmVhZFZhbHVlcyIsImEiLCJiIiwicHJvcCIsIklTX0JST1dTRVIiLCJJU19BTkRST0lEIiwiSVNfRklSRUZPWCIsIklTX0lPUyIsIl9hIiwiRk9DVVNfT1VUTElORSIsIlVIVE1MRWxlbWVudCIsImF0dHIiLCJlbCIsIm5hbWUiLCJldmVudHMiLCJhY3Rpb24iLCJlbGVtZW50IiwicmVzdCIsInR5cGUiLCJvbiIsIm9mZiIsIm9ic2VydmVycyIsIm11dGF0aW9uT2JzZXJ2ZXIiLCJvcHRpb25zIiwib2JzZXJ2ZXIiLCJkZXRhaWwiLCJhc0J1dHRvbiIsImV2ZW50IiwiaXNDbGljayIsImdldFJvb3QiLCJub2RlIiwiX2EyIiwicm9vdCIsImlkIiwidXNlSWQiLCJjcmVhdGVFbGVtZW50IiwidGFnTmFtZSIsInRleHQyIiwiYXR0cnMiLCJ2YWwiLCJjdXN0b21FbGVtZW50cyIsImluc3RhbmNlIiwiZ2V0TGFiZWwiLCJsYWJlbCIsImlkMiIsImFjYyIsImVsMiIsIl9hMyIsIkxJVkUiLCJMSVZFX1NSX0ZJWCIsInNwZWFrIiwic2V0VmFsdWUiLCJpbnB1dCIsImRhdGEiLCJfYiIsInByb3RvIiwiSVNfUFJFU1MiLCJpc01vdXNlRG93biIsIlVIVE1MQ29tYm9ib3hTdHlsZSIsIkVWRU5UUyIsIkVWRU5UX09OQ0UiLCJJU19GSVJFRk9YX0RFU0tUT1AiLCJJU19NT0JJTEUiLCJNT0RJRklFRCIsIkZBTFNFIiwiVEVYVFMiLCJVSFRNTENvbWJvYm94RWxlbWVudCIsInJlbmRlciIsInN5bmNJbnB1dFZhbHVlIiwiXyIsInRhcmdldCIsImlzRGlzYWJsZWQiLCJvbkJsdXIiLCJvbkNsaWNrIiwib25Gb2N1cyIsIm9uSW5wdXQiLCJvbktleURvd24iLCJ0YWciLCJ0ZXh0IiwiaXNEYXRhIiwiY29udHJvbCIsInNlbGYiLCJfZm9jdXMiLCJfdGV4dHMiLCJpdGVtcyIsImxpc3QiLCJtdWx0aXBsZSIsInByZXYiLCJuZXh0IiwiZWRpdHMiLCJhZGRlZE5vZGVzIiwicmVtb3ZlZE5vZGVzIiwic2hvdWxkQW5ub3VuY2UiLCJhcmlhRXhwYW5kZWQiLCJpbnB1dE1vZGUiLCJuZXh0Rm9jdXMiLCJpc1JlbW92ZSIsImlkeCIsInNlbGVjdCIsInJlbW92ZSIsIml0ZW0yIiwib3B0aW9uIiwibGFiZWwyIiwiYXJpYSIsIm9wdCIsIml0ZW0iLCJzeW5jQ2xlYXJXaXRoSW5wdXQiLCJzeW5jT3B0aW9uc1dpdGhJdGVtcyIsIl9zcGVhayIsInZhbHVlcyIsImRpc3BhdGNoTWF0Y2giLCJjaGFuZ2UiLCJjcmVhdGFibGUiLCJxdWVyeSIsIm1hdGNoIiwibyIsImRpc3BhdGNoQ2hhbmdlIiwicmVtb3ZhYmxlIiwiYWRkIiwiaSIsIm9uQmx1cnJlZCIsIngiLCJ5IiwiY2xlYXIiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJyZXBlYXQiLCJpc0NvbnRyb2wiLCJpblRleHQiLCJpbmRleCIsImZvcm0iLCJTQUZFX0xBQkVMTEVEQlkiLCJESVNQTEFZX0JMT0NLIiwiYXR0YWNoU3R5bGUiLCJjc3MiLCJVSFRNTFRhYnNTdHlsZSIsIlVIVE1MVGFiTGlzdFN0eWxlIiwiVUhUTUxUYWJQYW5lbFN0eWxlIiwiVUhUTUxUYWJTdHlsZSIsIkFSSUFfQ09OVFJPTFMiLCJBUklBX1NFTEVDVEVEIiwiVUhUTUxUYWJzRWxlbWVudCIsInF1ZXJ5V2l0aG91dE5lc3RlZCIsImdldFNlbGVjdGVkSW5kZXgiLCJzZXRTZWxlY3RlZCIsIlVIVE1MVGFiTGlzdEVsZW1lbnQiLCJ0YWIiLCJ0YWJzIiwiU0tJUF9BVFRSX0NIQU5HRSIsIlVIVE1MVGFiRWxlbWVudCIsInBhbmVscyIsIm5leHRQYW5lbCIsImdldFBhbmVsIiwicGFuZWwiLCJ0YWJsaXN0IiwidGFiTGlzdCIsIlVIVE1MVGFiUGFuZWxFbGVtZW50IiwiaGlkZGVuIiwiaXNGb2N1c2FibGUiLCJtaW4iLCJtYXgiLCJyb3VuZCIsImZsb29yIiwiY3JlYXRlQ29vcmRzIiwidiIsIm9wcG9zaXRlU2lkZU1hcCIsIm9wcG9zaXRlQWxpZ25tZW50TWFwIiwiY2xhbXAiLCJzdGFydCIsImVuZCIsImV2YWx1YXRlIiwicGFyYW0iLCJnZXRTaWRlIiwicGxhY2VtZW50IiwiZ2V0QWxpZ25tZW50IiwiZ2V0T3Bwb3NpdGVBeGlzIiwiYXhpcyIsImdldEF4aXNMZW5ndGgiLCJ5QXhpc1NpZGVzIiwiZ2V0U2lkZUF4aXMiLCJnZXRBbGlnbm1lbnRBeGlzIiwiZ2V0QWxpZ25tZW50U2lkZXMiLCJyZWN0cyIsInJ0bCIsImFsaWdubWVudCIsImFsaWdubWVudEF4aXMiLCJsZW5ndGgiLCJtYWluQWxpZ25tZW50U2lkZSIsImdldE9wcG9zaXRlUGxhY2VtZW50IiwiZ2V0RXhwYW5kZWRQbGFjZW1lbnRzIiwib3Bwb3NpdGVQbGFjZW1lbnQiLCJnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCIsImxyUGxhY2VtZW50IiwicmxQbGFjZW1lbnQiLCJ0YlBsYWNlbWVudCIsImJ0UGxhY2VtZW50IiwiZ2V0U2lkZUxpc3QiLCJzaWRlIiwiaXNTdGFydCIsImdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMiLCJmbGlwQWxpZ25tZW50IiwiZGlyZWN0aW9uIiwiZXhwYW5kUGFkZGluZ09iamVjdCIsInBhZGRpbmciLCJnZXRQYWRkaW5nT2JqZWN0IiwicmVjdFRvQ2xpZW50UmVjdCIsInJlY3QiLCJ3aWR0aCIsImhlaWdodCIsImNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50IiwiX3JlZiIsInJlZmVyZW5jZSIsImZsb2F0aW5nIiwic2lkZUF4aXMiLCJhbGlnbkxlbmd0aCIsImlzVmVydGljYWwiLCJjb21tb25YIiwiY29tbW9uWSIsImNvbW1vbkFsaWduIiwiY29vcmRzIiwiY29tcHV0ZVBvc2l0aW9uIiwiY29uZmlnIiwic3RyYXRlZ3kiLCJtaWRkbGV3YXJlIiwicGxhdGZvcm0iLCJ2YWxpZE1pZGRsZXdhcmUiLCJzdGF0ZWZ1bFBsYWNlbWVudCIsIm1pZGRsZXdhcmVEYXRhIiwicmVzZXRDb3VudCIsImZuIiwibmV4dFgiLCJuZXh0WSIsInJlc2V0IiwiZGV0ZWN0T3ZlcmZsb3ciLCJzdGF0ZSIsIl9hd2FpdCRwbGF0Zm9ybSRpc0VsZSIsImVsZW1lbnRzIiwiYm91bmRhcnkiLCJyb290Qm91bmRhcnkiLCJlbGVtZW50Q29udGV4dCIsImFsdEJvdW5kYXJ5IiwicGFkZGluZ09iamVjdCIsImNsaXBwaW5nQ2xpZW50UmVjdCIsIm9mZnNldFBhcmVudCIsIm9mZnNldFNjYWxlIiwiZWxlbWVudENsaWVudFJlY3QiLCJmbGlwIiwiX21pZGRsZXdhcmVEYXRhJGFycm93IiwiX21pZGRsZXdhcmVEYXRhJGZsaXAiLCJpbml0aWFsUGxhY2VtZW50IiwiY2hlY2tNYWluQXhpcyIsImNoZWNrQ3Jvc3NBeGlzIiwic3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIiwiZmFsbGJhY2tTdHJhdGVneSIsImZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24iLCJkZXRlY3RPdmVyZmxvd09wdGlvbnMiLCJpbml0aWFsU2lkZUF4aXMiLCJpc0Jhc2VQbGFjZW1lbnQiLCJmYWxsYmFja1BsYWNlbWVudHMiLCJoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uIiwicGxhY2VtZW50cyIsIm92ZXJmbG93Iiwib3ZlcmZsb3dzIiwib3ZlcmZsb3dzRGF0YSIsInNpZGVzIiwiX21pZGRsZXdhcmVEYXRhJGZsaXAyIiwiX292ZXJmbG93c0RhdGEkZmlsdGVyIiwibmV4dEluZGV4IiwibmV4dFBsYWNlbWVudCIsImQiLCJyZXNldFBsYWNlbWVudCIsIl9vdmVyZmxvd3NEYXRhJGZpbHRlcjIiLCJjdXJyZW50U2lkZUF4aXMiLCJzaGlmdCIsImxpbWl0ZXIiLCJjcm9zc0F4aXMiLCJtYWluQXhpcyIsIm1haW5BeGlzQ29vcmQiLCJjcm9zc0F4aXNDb29yZCIsIm1pblNpZGUiLCJtYXhTaWRlIiwibGltaXRlZENvb3JkcyIsInNpemUiLCJfc3RhdGUkbWlkZGxld2FyZURhdGEiLCJfc3RhdGUkbWlkZGxld2FyZURhdGEyIiwiYXBwbHkiLCJpc1lBeGlzIiwiaGVpZ2h0U2lkZSIsIndpZHRoU2lkZSIsIm1heGltdW1DbGlwcGluZ0hlaWdodCIsIm1heGltdW1DbGlwcGluZ1dpZHRoIiwib3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQiLCJvdmVyZmxvd0F2YWlsYWJsZVdpZHRoIiwibm9TaGlmdCIsImF2YWlsYWJsZUhlaWdodCIsImF2YWlsYWJsZVdpZHRoIiwieE1pbiIsInhNYXgiLCJ5TWluIiwieU1heCIsIm5leHREaW1lbnNpb25zIiwiaGFzV2luZG93IiwiZ2V0Tm9kZU5hbWUiLCJpc05vZGUiLCJnZXRXaW5kb3ciLCJfbm9kZSRvd25lckRvY3VtZW50IiwiZ2V0RG9jdW1lbnRFbGVtZW50IiwiaXNFbGVtZW50IiwiaXNIVE1MRWxlbWVudCIsImlzU2hhZG93Um9vdCIsImludmFsaWRPdmVyZmxvd0Rpc3BsYXlWYWx1ZXMiLCJpc092ZXJmbG93RWxlbWVudCIsIm92ZXJmbG93WCIsIm92ZXJmbG93WSIsImRpc3BsYXkiLCJnZXRDb21wdXRlZFN0eWxlIiwidGFibGVFbGVtZW50cyIsImlzVGFibGVFbGVtZW50IiwidG9wTGF5ZXJTZWxlY3RvcnMiLCJpc1RvcExheWVyIiwic2VsZWN0b3IiLCJ0cmFuc2Zvcm1Qcm9wZXJ0aWVzIiwid2lsbENoYW5nZVZhbHVlcyIsImNvbnRhaW5WYWx1ZXMiLCJpc0NvbnRhaW5pbmdCbG9jayIsImVsZW1lbnRPckNzcyIsIndlYmtpdCIsImlzV2ViS2l0IiwiZ2V0Q29udGFpbmluZ0Jsb2NrIiwiY3VycmVudE5vZGUiLCJnZXRQYXJlbnROb2RlIiwiaXNMYXN0VHJhdmVyc2FibGVOb2RlIiwibGFzdFRyYXZlcnNhYmxlTm9kZU5hbWVzIiwiZ2V0Tm9kZVNjcm9sbCIsInJlc3VsdCIsImdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yIiwicGFyZW50Tm9kZSIsImdldE92ZXJmbG93QW5jZXN0b3JzIiwidHJhdmVyc2VJZnJhbWVzIiwiX25vZGUkb3duZXJEb2N1bWVudDIiLCJzY3JvbGxhYmxlQW5jZXN0b3IiLCJpc0JvZHkiLCJ3aW4iLCJmcmFtZUVsZW1lbnQiLCJnZXRGcmFtZUVsZW1lbnQiLCJnZXRDc3NEaW1lbnNpb25zIiwiZ2V0Q29tcHV0ZWRTdHlsZSQxIiwiaGFzT2Zmc2V0Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJzaG91bGRGYWxsYmFjayIsInVud3JhcEVsZW1lbnQiLCJnZXRTY2FsZSIsImRvbUVsZW1lbnQiLCIkIiwibm9PZmZzZXRzIiwiZ2V0VmlzdWFsT2Zmc2V0cyIsInNob3VsZEFkZFZpc3VhbE9mZnNldHMiLCJpc0ZpeGVkIiwiZmxvYXRpbmdPZmZzZXRQYXJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJpbmNsdWRlU2NhbGUiLCJpc0ZpeGVkU3RyYXRlZ3kiLCJjbGllbnRSZWN0Iiwic2NhbGUiLCJ2aXN1YWxPZmZzZXRzIiwib2Zmc2V0V2luIiwiY3VycmVudFdpbiIsImN1cnJlbnRJRnJhbWUiLCJpZnJhbWVTY2FsZSIsImlmcmFtZVJlY3QiLCJnZXRXaW5kb3dTY3JvbGxCYXJYIiwibGVmdFNjcm9sbCIsImdldEhUTUxPZmZzZXQiLCJkb2N1bWVudEVsZW1lbnQiLCJzY3JvbGwiLCJodG1sUmVjdCIsImNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0IiwidG9wTGF5ZXIiLCJvZmZzZXRzIiwiaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQiLCJvZmZzZXRSZWN0IiwiaHRtbE9mZnNldCIsImdldENsaWVudFJlY3RzIiwiZ2V0RG9jdW1lbnRSZWN0IiwiaHRtbCIsImJvZHkiLCJTQ1JPTExCQVJfTUFYIiwiZ2V0Vmlld3BvcnRSZWN0IiwidmlzdWFsVmlld3BvcnQiLCJ2aXN1YWxWaWV3cG9ydEJhc2VkIiwid2luZG93U2Nyb2xsYmFyWCIsImRvYyIsImJvZHlTdHlsZXMiLCJib2R5TWFyZ2luSW5saW5lIiwiY2xpcHBpbmdTdGFibGVTY3JvbGxiYXJXaWR0aCIsImFic29sdXRlT3JGaXhlZCIsImdldElubmVyQm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yIiwiY2xpcHBpbmdBbmNlc3RvciIsImhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvciIsInN0b3BOb2RlIiwiZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzIiwiY2FjaGUiLCJjYWNoZWRSZXN1bHQiLCJjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSIsImVsZW1lbnRJc0ZpeGVkIiwiY29tcHV0ZWRTdHlsZSIsImN1cnJlbnROb2RlSXNDb250YWluaW5nIiwiYW5jZXN0b3IiLCJnZXRDbGlwcGluZ1JlY3QiLCJjbGlwcGluZ0FuY2VzdG9ycyIsImZpcnN0Q2xpcHBpbmdBbmNlc3RvciIsImNsaXBwaW5nUmVjdCIsImFjY1JlY3QiLCJnZXREaW1lbnNpb25zIiwiZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQiLCJzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0IiwiaXNTdGF0aWNQb3NpdGlvbmVkIiwiZ2V0VHJ1ZU9mZnNldFBhcmVudCIsInBvbHlmaWxsIiwicmF3T2Zmc2V0UGFyZW50IiwiZ2V0T2Zmc2V0UGFyZW50Iiwic3ZnT2Zmc2V0UGFyZW50IiwiZ2V0RWxlbWVudFJlY3RzIiwiZ2V0T2Zmc2V0UGFyZW50Rm4iLCJnZXREaW1lbnNpb25zRm4iLCJmbG9hdGluZ0RpbWVuc2lvbnMiLCJpc1JUTCIsInJlY3RzQXJlRXF1YWwiLCJvYnNlcnZlTW92ZSIsIm9uTW92ZSIsImlvIiwidGltZW91dElkIiwiY2xlYW51cCIsIl9pbyIsInJlZnJlc2giLCJza2lwIiwidGhyZXNob2xkIiwiZWxlbWVudFJlY3RGb3JSb290TWFyZ2luIiwiaW5zZXRUb3AiLCJpbnNldFJpZ2h0IiwiaW5zZXRCb3R0b20iLCJpbnNldExlZnQiLCJpc0ZpcnN0VXBkYXRlIiwiaGFuZGxlT2JzZXJ2ZSIsImVudHJpZXMiLCJyYXRpbyIsImF1dG9VcGRhdGUiLCJ1cGRhdGUiLCJhbmNlc3RvclNjcm9sbCIsImFuY2VzdG9yUmVzaXplIiwiZWxlbWVudFJlc2l6ZSIsImxheW91dFNoaWZ0IiwiYW5pbWF0aW9uRnJhbWUiLCJyZWZlcmVuY2VFbCIsImFuY2VzdG9ycyIsImNsZWFudXBJbyIsInJlb2JzZXJ2ZUZyYW1lIiwicmVzaXplT2JzZXJ2ZXIiLCJmaXJzdEVudHJ5IiwiX3Jlc2l6ZU9ic2VydmVyIiwiZnJhbWVJZCIsInByZXZSZWZSZWN0IiwiZnJhbWVMb29wIiwibmV4dFJlZlJlY3QiLCJfcmVzaXplT2JzZXJ2ZXIyIiwic2hpZnQkMSIsImZsaXAkMSIsInNpemUkMSIsIm1lcmdlZE9wdGlvbnMiLCJwbGF0Zm9ybVdpdGhDYWNoZSIsImNvbXB1dGVQb3NpdGlvbiQxIiwiciIsImUiLCJ0IiwiZiIsIm4iLCJjbHN4IiwiUVVJQ0tfRVZFTlQiLCJkZWJvdW5jZSIsImNhbGxiYWNrIiwiZGVsYXkiLCJ0aW1lciIsImFyZ3MiLCJVVUlEIiwiVU5CSU5EIiwib25Mb2FkZWQiLCJydW4iLCJ1bmJpbmQiLCJBTkNIT1JFRCIsImFuY2hvclBvc2l0aW9uIiwiYW5jaG9yIiwiY3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlciIsInF1ZXVlIiwib25GcmFtZSIsIm9uVGltZXIiLCJNVVRBVE9SUyIsIm9uTXV0YXRpb24iLCJjbGFzc05hbWUiLCJlbGVtcyIsIm11dGF0b3IiLCJpc0lucHV0TGlrZSIsIk1URFNFbGVtZW50IiwiQ1NTX0JSRUFEQ1JVTUJTIiwic3R5bGVzIiwiQ1NTX0NBUkQiLCJDU1NfQ0hJUCIsIkNTU19IRUxQVEVYVCIsIkNTU19QQUdJTkFUSU9OIiwiQ0xJQ0tTIiwiTUFUT01PIiwiQkFOTkVSIiwiQkFOTkVSX1VSTCIsImFuYWx5dGljcyIsImNvbnNlbnQiLCJlbmFibGVkIiwibWF0b21vSWQiLCJtYXRvbW9UYWdNYW5hZ2VySWQiLCJyZW5kZXJCYW5uZXIiLCJzcmMiLCJ1cmwiLCJ0aXRsZSIsImNhdGVnb3J5IiwicmVzdWx0cyIsImJhbm5lciIsIm9uQ2xvc2UiLCJoYW5kbGVUcmFjayIsInByb2Nlc3NUcmFjayIsImhlYWRpbmciLCJncm91cCIsInBvcG92ZXIiLCJvcGVuIiwic3R5bGUiLCJoZWFkIiwic2hlZXQiLCJmb3JjZSIsIkNTU19BUFAiLCJDU1NfU1RJQ0tZIiwiQ1NTX1RPR0dMRSIsIkNTU19TSURFQkFSIiwidXNlVHJhbnNpdGlvbiIsInRvZ2dsZUFwcEV4cGFuZGVkIiwiaGFuZGxlQXBwVG9nZ2xlQ2xpY2siLCJzdG9wIiwibGluayIsImNsb3NlU2lkZWJhciIsInNpZGViYXIiLCJNSU5fWSIsIlNDUk9MTF9VUCIsIlNUSUNLIiwiU1RJQ0tfRUwiLCJTVElDS19IIiwiU1RJQ0tfWSIsIlNUVUNLIiwiV0lOX0giLCJXSU5fWSIsImhhbmRsZU11dGF0aW9uIiwic3RpY2t5IiwiaGFuZGxlQXBwU2Nyb2xsIiwiTkVYVF9ZIiwiTkVYVF9VUCIsImdldFN0ZXBzIiwibm93Iiwic2hvdyIsIm9mZnNldCIsInBhZ2VzIiwicGFnaW5hdGlvbiIsImN1cnJlbnQiLCJ0b3RhbCIsInBhZ2UiLCJ0b2FzdCIsImNvbnRlbnQiLCJkaWFsb2ciLCJoYW5kbGVUb2FzdENsb3NlIiwiYW5pbWF0aW9uTmFtZSIsInByb3BzIiwibG9hZGluZyIsInN1Y2Nlc3MiLCJlcnJvciIsIl9lcnJvciIsImhhbmRsZUJyZWFkY3J1bWJzTXV0YXRpb24iLCJicmVhZGNydW1icyIsImJyZWFkY3VtYnMiLCJjcnVtYiIsInRvQXhpcyIsImlzU3RhY2tlZCIsImFsbCIsInJvdyIsInN1bSIsIm51bSIsImRpZ2l0cyIsInN0ZXAiLCJncm91cHMiLCJzdGVwcyIsImdldE51bSIsInRvQmFycyIsInRvb2x0aXAiLCJudW1iZXIiLCJ0b0xpbmVzIiwidmFyaWFudCIsInNtb290aGluZyIsImxpbmVDb250YWluZXIiLCJwYXRoRGVmaW50aW9uIiwidG9QYXRoIiwibGluZSIsInBhdGgiLCJsaW5lU2hhZGUiLCJjb2wiLCJwb2ludHMiLCJzIiwic21vb3RoIiwiYXgiLCJheSIsImJ4IiwiYnkiLCJzdWIiLCJjc1giLCJjc1kiLCJjZVgiLCJjZVkiLCJ0b1BpZXMiLCJwaWUiLCJyYWRpdXMiLCJpbm5lciIsInRvdCIsInRkIiwibGFyZ2VBcmMiLCJhMCIsImExIiwieDAiLCJ5MCIsIngxIiwieTEiLCJUT09MVElQX0lEIiwiVE9PTFRJUCIsIk1URFNDaGFydCIsInRvRGF0YSIsImxlZ2VuZCIsInRhYmxlIiwidHIiLCJUT09MVElQX1RFWFQiLCJvbk1vdmVUb29sdGlwIiwidGlwIiwicm93SW5kZXgiLCJjZWxsIiwiY2VsbEluZGV4IiwiQ1NTX0RJQUxPRyIsIkRJQUxPR1MiLCJoYW5kbGVNb2RhbCIsImhhbmRsZURpYWxvZ0NsaWNrIiwiaGFuZGxlRXJyb3N1bW1hcnlJbmplY3QiLCJmaXJzdCIsIkRJU0FCTEVEIiwiU0VMRUNURUQiLCJVSFRNTE9wdGlvbkVsZW1lbnQiLCJVSFRNTERhdGFMaXN0U3R5bGUiLCJMSVZFX1RJTUVSIiwiSU5QVVRfREVCT1VOQ0UiLCJFVkVOVFNfSU5QVVQiLCJVSFRNTERhdGFMaXN0RWxlbWVudCIsImRpc2Nvbm5lY3RJbnB1dCIsIl9wcmV2Iiwic2V0dXBJbnB1dCIsInNldEV4cGFuZGVkIiwiX2MiLCJpc1BvcG92ZXIiLCJpc0lucHV0IiwicmVsYXRlZFRhcmdldCIsImFsdEtleSIsImN0cmxLZXkiLCJzaGlmdEtleSIsIm1ldGFLZXkiLCJpc0VzY2FwZSIsIl9yb290IiwiX2lucHV0IiwiZmlsdGVyIiwidmlzaWJsZSIsIkNTU19GSUVMRCIsIkNTU19WQUxJREFUSU9OUyIsIkNTU19WQUxJREFUSU9OIiwiZ2V0VGV4dCIsImhhbmRsZUZpZWxkTXV0YXRpb24iLCJmaWVsZHMiLCJ2YWxpZGF0ZSIsImZpZWxkIiwibGFiZWxzIiwiZGVzY3MiLCJ2YWxpZHMiLCJjb21ib2JveCIsInZhbGlkIiwiZGVzYyIsInJlbmRlckNvbWJvYm94IiwicmVuZGVyQ291bnRlciIsInJlbmRlclRleHRhcmVhU2l6ZSIsInRleHRhcmVhIiwibGltaXQiLCJyZW1haW5kZXIiLCJuZXh0SW52YWxpZCIsInByZXZJbnZhbGlkIiwib3ZlciIsInVuZGVyIiwiaGFuZGxlRmllbGRUb2dnbGUiLCJoYW5kbGVGaWVsZElucHV0IiwiaGFuZGxlRmllbGRWYWxkaWF0aW9uIiwiQ1NTX0ZJRUxEU0VUIiwiQVJJQV9ERVNDIiwiQVJJQV9JTlZBTElEIiwiaGFuZGxlRmllbGRzZXRNdXRhdGlvbiIsImZpZWxkc2V0cyIsImZpZWxkc2V0IiwiaW5wdXRzIiwidmFsaWRJZCIsIkNTU19MT0dPIiwiaGFuZGxlTG9nb011dGF0aW9uIiwibG9nbyIsImljb24iLCJzdmciLCJpc0RvdCIsImJhY2siLCJDU1NfUE9QT1ZFUiIsIkNTU19BVVRPIiwiaGFuZGxlUG9wb3ZlclRvZ2dsZSIsIm5ld1N0YXRlIiwiaXNDbG9zaW5nIiwiaXNDb250YWluIiwiaGFuZGxlUG9wb3ZlckJlZm9yZXRvZ2dsZSIsImhhbmRsZVBvcG92ZXJMaW5rQ2xpY2siLCJwb3AiLCJDU1NfVEFCTEUiLCJJTlRFUkFDVElWRSIsImhhbmRsZVRhYmxlTXV0YXRpb24iLCJ0YWJsZXMiLCJ0aHMiLCJ0aCIsInRib2R5IiwiaGFuZGxlVGFibGVDbGljayIsIkNTU19UT0FTVCIsIkFUVFJfU09SVCIsImhhbmRsZVRvYXN0U3RhdGUiLCJtcyIsImhhbmRsZVRvYXN0Q2xpY2siLCJjbG9zZSIsIkNTU19UT0dHTEVHUk9VUCIsImhhbmRsZVRvZ2dsZWdyb3VwS2V5ZG93biIsIm1vdmUiLCJERVNDUklCRURCWSIsIkVTQyIsIkxBQkVMTEVEQlkiLCJQT1NJVElPTl9DU1NfUFJPUEVSVFkiLCJUSFJPVFRMRV9ERUxBWSIsIkFOQ0hPUiIsIkxBU1RfQ0FMTCIsIlRIUk9UVExFIiwiaGFuZGxlVG9vbHRpcE1vdmUiLCJ3YWl0IiwiaGFuZGxlVG9vbHRpcE1vdmVUaHJvdHRsZWQiLCJwb3NpdGlvbiIsImhhZExhYmVsIiwiaGFzTGFiZWwiLCJVSFRNTERldGFpbHNTdHlsZSIsIlVIVE1MRGV0YWlsc0VsZW1lbnQiLCJoaWRlIiwidURldGFpbHNMaXN0IiwidURldGFpbHMiLCJzdW1tYXJ5IiwiaXNTdW1tYXJ5IiwiVUhUTUxTdW1tYXJ5RWxlbWVudCIsIlVIVE1MUHJvZ3Jlc3NTdHlsZSIsIlVIVE1MUHJvZ3Jlc3NFbGVtZW50Iiwicm9sZUltYWdlIiwicGVyY2VudGFnZSIsImdldE51bWJlciIsInNldE51bWJlciIsImlzTnVtZXJpYyJdLCJtYXBwaW5ncyI6ImtDQUFBLElBQUlBLEdBQVksT0FBTyxlQUNuQkMsR0FBc0IsT0FBTyxzQkFDN0JDLEdBQWUs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LE1BQUEvYixHQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FB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
|
|
331
|
+
@keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`,an=!1,Zi=class extends ml{static get observedAttributes(){return["aria-label","aria-labelledby","value","max"]}constructor(){super(),this.shadowRoot||this.attachShadow({mode:"open"}).append(Ji("slot",null,{hidden:""}),Ji("style",_l))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(an)return;an=!0;const t=pl||Xi,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let n=wl(this);if(t&&(n=`${n.replace(/\d+%$/,"")} ${e}%`),Xi)for(const o of this.labels)I(o,"aria-label",n);I(this,"aria-busy",`${this.position===-1}`),I(this,"aria-label",n.trim()),I(this,"aria-labelledby",null),I(this,"aria-valuemax","100"),I(this,"aria-valuemin","0"),I(this,"aria-valuenow",`${e}`),I(this,"role",t?"img":"progressbar"),an=!1}get labels(){const t=this.closest("label:not([for])"),e=vl(this);return t&&(t.htmlFor=e),hl(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return es(this,"value")}set value(t){ns(this,"value",t)}get max(){return es(this,"max")||1}set max(t){ns(this,"max",t)}};Zi.formAssociated=!0;var ts=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),es=(t,e)=>{const n=I(t,e);return ts(n)?Math.max(0,Number.parseFloat(n)):null},ns=(t,e,n)=>{if(n===null||ts(n))I(t,e,`${n}`);else throw new Error(`Failed to set non-numeric '${I}': '${n}'`)};return bl.define("u-progress",Zi),M.UHTMLComboboxElement=we,M.UHTMLTabElement=kn,M.UHTMLTabListElement=$n,M.UHTMLTabPanelElement=An,M.UHTMLTabsElement=Cn,M.analytics=ni,M.pagination=Qa,M.styles=Bs,M.toast=k,M.toggleAppExpanded=ai,M.version=Hs,Object.defineProperty(M,Symbol.toStringTag,{value:"Module"}),M}({});
|
|
332
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtY29tYm9ib3gvZGlzdC91LWNvbWJvYm94LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCIuLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2NvcmUvZGlzdC9mbG9hdGluZy11aS5jb3JlLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5kb20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS9kb20vZGlzdC9mbG9hdGluZy11aS5kb20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL2Nsc3gvZGlzdC9jbHN4Lm1qcyIsIi4uL2Rlc2lnbnN5c3RlbS91dGlscy50cyIsIi4uL2Rlc2lnbnN5c3RlbS9hbmFseXRpY3MvYW5hbHl0aWNzLnRzIiwiLi4vZGVzaWduc3lzdGVtL2FwcC9hcHAtdG9nZ2xlLmpzIiwiLi4vZGVzaWduc3lzdGVtL2FwcC9hcHAtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vcGFnaW5hdGlvbi9wYWdpbmF0aW9uLWhlbHBlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b2FzdC90b2FzdC1oZWxwZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYnMtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vY2hhcnQvY2hhcnQuY3NzP3JhdyIsIi4uL2Rlc2lnbnN5c3RlbS9jaGFydC9jaGFydC1heGlzLnRzIiwiLi4vZGVzaWduc3lzdGVtL2NoYXJ0L2NoYXJ0LWJhcnMudHMiLCIuLi9kZXNpZ25zeXN0ZW0vY2hhcnQvY2hhcnQtbGluZXMudHMiLCIuLi9kZXNpZ25zeXN0ZW0vY2hhcnQvY2hhcnQtcGllcy50cyIsIi4uL2Rlc2lnbnN5c3RlbS9jaGFydC9jaGFydC1lbGVtZW50LnRzIiwiLi4vZGVzaWduc3lzdGVtL2RpYWxvZy9kaWFsb2ctb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZXJyb3JzdW1tYXJ5L2Vycm9yc3VtbWFyeS1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRhdGFsaXN0L2Rpc3QvdS1kYXRhbGlzdC5qcyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZC9maWVsZC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZHNldC9maWVsZHNldC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9sb2dvL2xvZ28tb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vcG9wb3Zlci9wb3BvdmVyLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RhYmxlL3RhYmxlLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RvYXN0L3RvYXN0LW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RvZ2dsZWdyb3VwL3RvZ2dsZWdyb3VwLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3Rvb2x0aXAvdG9vbHRpcC1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRldGFpbHMvZGlzdC91LWRldGFpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1wcm9ncmVzcy9kaXN0L3UtcHJvZ3Jlc3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/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+IHtcbiAgICAgIGxldCBbZmlyc3RFbnRyeV0gPSBfcmVmO1xuICAgICAgaWYgKGZpcnN0RW50cnkgJiYgZmlyc3RFbnRyeS50YXJnZXQgPT09IHJlZmVyZW5jZUVsICYmIHJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIC8vIFByZXZlbnQgdXBkYXRlIGxvb3BzIHdoZW4gdXNpbmcgdGhlIGBzaXplYCBtaWRkbGV3YXJlLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzE3NDBcbiAgICAgICAgcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmVvYnNlcnZlRnJhbWUpO1xuICAgICAgICByZW9ic2VydmVGcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdmFyIF9yZXNpemVPYnNlcnZlcjtcbiAgICAgICAgICAoX3Jlc2l6ZU9ic2VydmVyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoZmxvYXRpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIGlmIChyZWZlcmVuY2VFbCAmJiAhYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUocmVmZXJlbmNlRWwpO1xuICAgIH1cbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgfVxuICBsZXQgZnJhbWVJZDtcbiAgbGV0IHByZXZSZWZSZWN0ID0gYW5pbWF0aW9uRnJhbWUgPyBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKSA6IG51bGw7XG4gIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgIGZyYW1lTG9vcCgpO1xuICB9XG4gIGZ1bmN0aW9uIGZyYW1lTG9vcCgpIHtcbiAgICBjb25zdCBuZXh0UmVmUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2UpO1xuICAgIGlmIChwcmV2UmVmUmVjdCAmJiAhcmVjdHNBcmVFcXVhbChwcmV2UmVmUmVjdCwgbmV4dFJlZlJlY3QpKSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gICAgcHJldlJlZlJlY3QgPSBuZXh0UmVmUmVjdDtcbiAgICBmcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lTG9vcCk7XG4gIH1cbiAgdXBkYXRlKCk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgdmFyIF9yZXNpemVPYnNlcnZlcjI7XG4gICAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlKTtcbiAgICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gICAgfSk7XG4gICAgY2xlYW51cElvID09IG51bGwgfHwgY2xlYW51cElvKCk7XG4gICAgKF9yZXNpemVPYnNlcnZlcjIgPSByZXNpemVPYnNlcnZlcikgPT0gbnVsbCB8fCBfcmVzaXplT2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTtcbiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgaWYgKGFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZUlkKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5jb25zdCBkZXRlY3RPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93JDE7XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IG9mZnNldCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGF1dG9QbGFjZW1lbnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gc2hpZnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmbGlwJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IOKAlFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IHNpemUkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBoaWRlJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gYXJyb3ckMTtcblxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gaW5saW5lJDE7XG5cbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBsaW1pdFNoaWZ0JDE7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSAocmVmZXJlbmNlLCBmbG9hdGluZywgb3B0aW9ucykgPT4ge1xuICAvLyBUaGlzIGNhY2hlcyB0aGUgZXhwZW5zaXZlIGBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnNgIGZ1bmN0aW9uIHNvIHRoYXRcbiAgLy8gbXVsdGlwbGUgbGlmZWN5Y2xlIHJlc2V0cyByZS11c2UgdGhlIHNhbWUgcmVzdWx0LiBJdCBvbmx5IGxpdmVzIGZvciBhXG4gIC8vIHNpbmdsZSBjYWxsLiBJZiBvdGhlciBmdW5jdGlvbnMgYmVjb21lIGV4cGVuc2l2ZSwgd2UgY2FuIGFkZCB0aGVtIGFzIHdlbGwuXG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcCgpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0ge1xuICAgIHBsYXRmb3JtLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgY29uc3QgcGxhdGZvcm1XaXRoQ2FjaGUgPSB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucy5wbGF0Zm9ybSxcbiAgICBfYzogY2FjaGVcbiAgfTtcbiAgcmV0dXJuIGNvbXB1dGVQb3NpdGlvbiQxKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgIHBsYXRmb3JtOiBwbGF0Zm9ybVdpdGhDYWNoZVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgcGxhdGZvcm0sIHNoaWZ0LCBzaXplIH07XG4iLCJmdW5jdGlvbiByKGUpe3ZhciB0LGYsbj1cIlwiO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZSluKz1lO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIGUpaWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIG89ZS5sZW5ndGg7Zm9yKHQ9MDt0PG87dCsrKWVbdF0mJihmPXIoZVt0XSkpJiYobiYmKG4rPVwiIFwiKSxuKz1mKX1lbHNlIGZvcihmIGluIGUpZVtmXSYmKG4mJihuKz1cIiBcIiksbis9Zik7cmV0dXJuIG59ZXhwb3J0IGZ1bmN0aW9uIGNsc3goKXtmb3IodmFyIGUsdCxmPTAsbj1cIlwiLG89YXJndW1lbnRzLmxlbmd0aDtmPG87ZisrKShlPWFyZ3VtZW50c1tmXSkmJih0PXIoZSkpJiYobiYmKG4rPVwiIFwiKSxuKz10KTtyZXR1cm4gbn1leHBvcnQgZGVmYXVsdCBjbHN4OyIsImltcG9ydCB7IGF1dG9VcGRhdGUsIGNvbXB1dGVQb3NpdGlvbiB9IGZyb20gXCJAZmxvYXRpbmctdWkvZG9tXCI7XG5pbXBvcnQgY2xzeCBmcm9tIFwiY2xzeFwiO1xuXG5leHBvcnQgY29uc3QgUVVJQ0tfRVZFTlQgPSB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IHRydWUgfTtcbmV4cG9ydCBjb25zdCBJU19CUk9XU0VSID1cblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCI7XG5cbi8vIFRPRE86IERvY3VtZW50YXRpb24gZm9yIHByZXR0eU51bWJlclxubGV0IElOVExfTlVNOiBJbnRsLk51bWJlckZvcm1hdCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwcmV0dHlOdW1iZXIobnVtYmVyOiBudW1iZXIgfCBzdHJpbmcpIHtcblx0aWYgKCFJTlRMX05VTSlcblx0XHRJTlRMX05VTSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcblx0XHRcdChJU19CUk9XU0VSICYmIGF0dHIoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBcImxhbmdcIikpIHx8IFwibm9cIixcblx0XHQpO1xuXHRyZXR1cm4gSU5UTF9OVU0uZm9ybWF0KE51bWJlcihudW1iZXIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlPFQgZXh0ZW5kcyB1bmtub3duW10+KFxuXHRjYWxsYmFjazogKC4uLmFyZ3M6IFQpID0+IHZvaWQsXG5cdGRlbGF5OiBudW1iZXIsXG4pIHtcblx0bGV0IHRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcblxuXHRyZXR1cm4gKC4uLmFyZ3M6IFQpID0+IHtcblx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRcdHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBjYWxsYmFjayguLi5hcmdzKSwgZGVsYXkpO1xuXHR9O1xufVxuXG4vKipcbiAqIGF0dHJcbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgZ2V0LCBzZXQgYW5kIHJlbW92ZSBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gZWwgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gbmFtZSBUaGUgYXR0cmlidXRlIG5hbWUgdG8gZ2V0LCBzZXQgb3IgcmVtb3ZlLCBvciBhIG9iamVjdCB0byBzZXQgbXVsdGlwbGUgYXR0cmlidXRlc1xuICogQHBhcmFtIHZhbHVlIEEgdmFsaWQgYXR0cmlidXRlIHZhbHVlIG9yIG51bGwgdG8gcmVtb3ZlIGF0dHJpYnV0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0cihcblx0ZWw6IEVsZW1lbnQsXG5cdG5hbWU6IHN0cmluZyxcblx0dmFsdWU/OiBzdHJpbmcgfCBudWxsLFxuKTogc3RyaW5nIHwgbnVsbCB7XG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpID8/IG51bGw7IC8vIEZhbGxiYWNrIHRvIG51bGwgb25seSBpZiBlbCBpcyB1bmRlZmluZWRcblx0aWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG5cdHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIHVzZUlkXG4gKiBAcmV0dXJuIEEgZ2VuZXJhdGVkIHVuaXF1ZSBJRFxuICovXG5sZXQgaWQgPSAwO1xuY29uc3QgVVVJRCA9IGAke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgNSl9YDtcbmV4cG9ydCBmdW5jdGlvbiB1c2VJZChlbDogRWxlbWVudCkge1xuXHRpZiAoIWVsLmlkKSBlbC5pZCA9IGAke1VVSUR9JHsrK2lkfWA7XG5cdHJldHVybiBlbC5pZDtcbn1cblxuLy8gSW50ZXJuYWwgaGVscGVyIGZvciBvbiAvIG9mZlxuY29uc3QgZXZlbnRzID0gKFxuXHRhY3Rpb246IFwiYWRkXCIgfCBcInJlbW92ZVwiLFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHRbLi4ucmVzdF06IFBhcmFtZXRlcnM8dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI+LCAvLyBTcHJlYXQgdG8gbWFrZSBhIGNvcHkgb2YgdGhlIGFycmF5XG4pOiB2b2lkID0+IHtcblx0Zm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG5cdFx0cmVzdFswXSA9IHR5cGU7XG5cdFx0ZWxlbWVudFtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdKC4uLnJlc3QpO1xuXHR9XG59O1xuXG4vKipcbiAqIG9uXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9uID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiB7XG5cdGlmIChVTkJJTkQgJiYgKGVsZW1lbnQgPT09IHdpbmRvdyB8fCBlbGVtZW50ID09PSBkb2N1bWVudCkpXG5cdFx0VU5CSU5ELnB1c2goKCkgPT4gb2ZmKGVsZW1lbnQsIC4uLnJlc3QpKTtcblx0ZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xufTtcblxuLyoqXG4gKiBvZmZcbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIHR5cGVzIEEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBldmVudCB0eXBlc1xuICogQHBhcmFtIGxpc3RlbmVyIEFuIGV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uIG9yIGxpc3RlbmVyIG9iamVjdFxuICovXG5leHBvcnQgY29uc3Qgb2ZmID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIFdpbmRvdyB7XG5cdFx0X210ZHNVbmJpbmRFdmVudHM/OiBNYXA8c3RyaW5nLCBBcnJheTwoKSA9PiB2b2lkPj47XG5cdH1cbn1cblxuLyoqXG4gKiBvbkxvYWRlZFxuICogQGRlc2NyaXB0aW9uIFJ1bnMgYSBjYWxsYmFjayB3aGVuIHdpbmRvdyBpcyBsb2FkZWQgaW4gYnJvd3NlciwgYW5kIGVuc3VyZXMgZXZlbnRzIGFyZSB1bmJvdW5kIGlmIGhvdCByZWxvYWRpbmdcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gdGhlIHBhZ2UgaXMgcmVhZHlcbiAqL1xubGV0IFVOQklORDogQXJyYXk8KCkgPT4gdm9pZD4gfCBudWxsID0gbnVsbDtcbmV4cG9ydCBjb25zdCBvbkxvYWRlZCA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuXHRpZiAoIUlTX0JST1dTRVIgfHwgIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHJldHVybjsgLy8gU2tpcCBpZiBub3QgaW4gYnJvd3NlciBlbnZpcm9ubWVudFxuXHRpZiAoIXdpbmRvdy5fbXRkc1VuYmluZEV2ZW50cykgd2luZG93Ll9tdGRzVW5iaW5kRXZlbnRzID0gbmV3IE1hcCgpO1xuXG5cdGNvbnN0IHJ1biA9ICgpID0+XG5cdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRcdGNvbnN0IGtleSA9IFN0cmluZyhjYWxsYmFjaykucmVwbGFjZSgvKFxcbnxcXHMpL2csIFwiXCIpO1xuXHRcdFx0d2luZG93Ll9tdGRzVW5iaW5kRXZlbnRzPy5nZXQoa2V5KT8ubWFwKCh1bmJpbmQpID0+IHVuYmluZCgpKTsgLy8gVW5iaW5kIHByZXZpb3VzIGV2ZW50c1xuXHRcdFx0VU5CSU5EID0gW107IC8vIFByZXBhcmUgdG8gbGlzdGVuIGZvciBuZXdseSBib3VuZCBldmVudHNcblx0XHRcdGNhbGxiYWNrKCk7IC8vIFJ1biBiaW5kaW5nXG5cdFx0XHR3aW5kb3cuX210ZHNVbmJpbmRFdmVudHM/LnNldChrZXksIFVOQklORD8uc2xpY2UoMCkpOyAvLyBTdG9yZSBmb3IgbGF0ZXIgdW5iaW5kaW5nXG5cdFx0XHRVTkJJTkQgPSBudWxsOyAvLyBTdG9wIGxpc3RlbmluZyBmb3IgbmV3bHkgYm91bmQgZXZlbnRzXG5cdFx0fSk7XG5cblx0aWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikgcnVuKCk7XG5cdGVsc2Ugb24od2luZG93LCBcImxvYWRcIiwgcnVuKTtcbn07XG5cbmNvbnN0IEFOQ0hPUkVEID0gbmV3IFdlYWtNYXA8RWxlbWVudCwgUmV0dXJuVHlwZTx0eXBlb2YgYXV0b1VwZGF0ZT4+KCk7XG5leHBvcnQgZnVuY3Rpb24gYW5jaG9yUG9zaXRpb24oXG5cdHRhcmdldDogSFRNTEVsZW1lbnQsXG5cdGFuY2hvcjogZmFsc2UgfCBFbGVtZW50LFxuXHRvcHRpb25zPzogUGFyYW1ldGVyczx0eXBlb2YgY29tcHV0ZVBvc2l0aW9uPlsyXSxcbikge1xuXHRBTkNIT1JFRC5nZXQodGFyZ2V0KT8uKCk7IC8vIFVuYmluZCBwcmV2aW91cyBhbmNob3IgcG9zaXRpb25cblx0QU5DSE9SRUQuZGVsZXRlKHRhcmdldCk7XG5cblx0aWYgKGFuY2hvcilcblx0XHRBTkNIT1JFRC5zZXQoXG5cdFx0XHR0YXJnZXQsXG5cdFx0XHRhdXRvVXBkYXRlKGFuY2hvciwgdGFyZ2V0LCAoKSA9PiB7XG5cdFx0XHRcdGlmICghdGFyZ2V0LmlzQ29ubmVjdGVkIHx8ICFhbmNob3IuaXNDb25uZWN0ZWQgfHwgdGFyZ2V0LmhpZGRlbilcblx0XHRcdFx0XHRyZXR1cm4gYW5jaG9yUG9zaXRpb24odGFyZ2V0LCBmYWxzZSk7XG5cdFx0XHRcdGNvbXB1dGVQb3NpdGlvbihhbmNob3IsIHRhcmdldCwgb3B0aW9ucykudGhlbigoeyB4LCB5IH0pID0+IHtcblx0XHRcdFx0XHR0YXJnZXQuc3R5bGUubGVmdCA9IGAke3h9cHhgO1xuXHRcdFx0XHRcdHRhcmdldC5zdHlsZS50b3AgPSBgJHt5fXB4YDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KSxcblx0XHQpO1xufVxuXG4vKipcbiAqIFNwZWVkIHVwIE11dGF0aW9uT2JzZXJ2ZXIgYnkgZGVib3VuY2luZyBhbmQgb25seSBydW5uaW5nIHdoZW4gcGFnZSBpcyB2aXNpYmxlXG4gKiBAcmV0dXJuIG5ldyBNdXRhaW9uT2JzZXJ2ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2s6IE11dGF0aW9uQ2FsbGJhY2spIHtcblx0bGV0IHF1ZXVlID0gMDtcblxuXHRjb25zdCBvbkZyYW1lID0gKCkgPT4gc2V0VGltZW91dChvblRpbWVyLCAyMDApOyAvLyBVc2UgYm90aCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgYW5kIHNldFRpbWVvdXQgdG8gZGVib3VuY2UgYW5kIG9ubHkgcnVuIHdoZW4gdmlzaWJsZVxuXHRjb25zdCBvblRpbWVyID0gKCkgPT4ge1xuXHRcdGNhbGxiYWNrKFtdLCBvYnNlcnZlcik7XG5cdFx0b2JzZXJ2ZXIudGFrZVJlY29yZHMoKTsgLy8gQ2xlYXIgcmVjb3JkcyB0byBhdm9pZCBydW5uaW5nIGNhbGxiYWNrIG11bHRpcGxlIHRpbWVzXG5cdFx0cXVldWUgPSAwO1xuXHR9O1xuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcblx0XHRpZiAoIXF1ZXVlKSBxdWV1ZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShvbkZyYW1lKTtcblx0fSk7XG5cblx0cmV0dXJuIG9ic2VydmVyO1xufVxuXG4vKipcbiAqIG9uTXV0YXRpb25cbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgb2JzZXJ2ZSBtdXRhdGlvbnMgb24gYSBzcGVjaWZpYyBjbGFzcyBuYW1lXG4gKiBAcGFyYW0gZWwgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBjbGFzcyBuYW1lIHRvIG9ic2VydmVcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gbXV0YXRpb25zIGFyZSBkZXRlY3RlZFxuICovXG5jb25zdCBNVVRBVE9SUyA9IG5ldyBXZWFrTWFwPEVsZW1lbnQsIEFycmF5PCgpID0+IHZvaWQ+PigpO1xuZXhwb3J0IGNvbnN0IG9uTXV0YXRpb24gPSA8VCBleHRlbmRzIEVsZW1lbnQ+KFxuXHRlbDogRWxlbWVudCxcblx0Y2xhc3NOYW1lOiBzdHJpbmcsXG5cdGNhbGxiYWNrOiAoZWxlbXM6IEhUTUxDb2xsZWN0aW9uT2Y8VD4pID0+IHZvaWQsXG4pID0+IHtcblx0aWYgKCFJU19CUk9XU0VSIHx8ICF3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSByZXR1cm47IC8vIFNraXAgaWYgbm90IGluIGJyb3dzZXIgZW52aXJvbm1lbnRcblx0Y29uc3QgZWxlbXMgPSBlbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7XG5cdGNvbnN0IG11dGF0b3IgPSBNVVRBVE9SUy5nZXQoZWwpIHx8IFtdO1xuXG5cdGlmICghbXV0YXRvci5sZW5ndGgpIHtcblx0XHRNVVRBVE9SUy5zZXQoZWwsIG11dGF0b3IpO1xuXHRcdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoKF8sIG9ic2VydmVyKSA9PiB7XG5cdFx0XHRpZiAoZWwuaXNDb25uZWN0ZWQgJiYgbXV0YXRvcj8ubGVuZ3RoKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgY2FsbGJhY2sgb2YgbXV0YXRvcikgY2FsbGJhY2soKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdE1VVEFUT1JTLmRlbGV0ZShlbCk7XG5cdFx0XHR9XG5cdFx0fSkub2JzZXJ2ZShlbCwge1xuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbXCJjbGFzc1wiLCBcImhpZGRlblwiXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdH0pO1xuXHR9XG5cdG11dGF0b3IucHVzaCgoKSA9PiBjYWxsYmFjayhlbGVtcyBhcyBIVE1MQ29sbGVjdGlvbk9mPFQ+KSk7XG59O1xuXG4vKipcbiAqIGlzSW5wdXRMaWtlXG4gKiBAZGVzY3JpcHRpb24gQ2hlY2sgaWYgZWxlbWVudCBpcyBhbiBpbnB1dCBsaWtlIGVsZW1lbnRcbiAqIEBwYXJhbSBlbCBUaGUgZWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBhbiBpbnB1dCBsaWtlIGVsZW1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGlzSW5wdXRMaWtlID0gKGVsOiB1bmtub3duKTogZWwgaXMgSFRNTElucHV0RWxlbWVudCA9PlxuXHRlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG5cdFwidmFsaWRpdHlcIiBpbiBlbCAmJlxuXHQhKGVsIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpO1xuXG4vKipcbiAqIHRvQ3VzdG9tRWxlbWVudFByb3BzXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IGNvbnZlcnQgcHJvcHMgdG8gY3VzdG9tIGVsZW1lbnQgYXR0cmlidXRlc1xuICogQHBhcmFtIHByb3BzIFRoZSBwcm9wcyB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIHByb3BzXG4gKi9cbmNvbnN0IFNFTEVDVEVEID0gXCJhcmlhLXNlbGVjdGVkXCI7XG5leHBvcnQgY29uc3QgdG9DdXN0b21FbGVtZW50UHJvcHMgPSAoXG5cdHsgY2xhc3NOYW1lLCBoaWRkZW4sIG9wZW4sIC4uLnJlc3QgfTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGtsYXNzPzogc3RyaW5nLFxuKSA9PiB7XG5cdHJlc3Quc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nID0gdHJ1ZTsgLy8gTWFrZSBOZXh0LmpzIGhhcHB5XG5cdGlmIChyZXN0W1NFTEVDVEVEXSAhPT0gdW5kZWZpbmVkKVxuXHRcdHJlc3RbU0VMRUNURURdID0gYCR7KHJlc3RbU0VMRUNURURdIHx8IFwiZmFsc2VcIikgIT09IFwiZmFsc2VcIn1gOyAvLyBFbnN1cmUgYXJpYS1zZWxlY3RlZCBib29sZWFuIGlzIHN0cmluZ1xuXHRpZiAoY2xhc3NOYW1lIHx8IGtsYXNzKSByZXN0LmNsYXNzID0gY2xzeChrbGFzcywgY2xhc3NOYW1lIGFzIHN0cmluZyk7IC8vIFVzZSBjbGFzcyBpbnN0ZWFkIG9mIGNsYXNzTmFtZVxuXHRpZiAoaGlkZGVuKSByZXN0LmhpZGRlbiA9IHRydWU7IC8vIEVuc3VyZSBib29sZWFuIHByb3AgYmVoYXZpb3VyXG5cdGlmIChvcGVuKSByZXN0Lm9wZW4gPSB0cnVlOyAvLyBFbnN1cmUgYm9vbGVhbiBwcm9wIGJlaGF2aW91clxuXHRyZXR1cm4gcmVzdDtcbn07XG5cbi8qKlxuICogdGFnXG4gKiBAZGVzY3JpcHRpb24gY3JlYXRlcyBlbGVtZW50IGFuZCBhc3NpZ25zIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB0YWdOYW1lIFRoZSB0YWduYW1lIG9mIGVsZW1lbnQgdG8gY3JlYXRlXG4gKiBAcGFyYW0gYXR0cnMgT3B0aW9uYWwgYXR0cmlidXRlcyB0byBhZGQgdG8gdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSB0ZXh0IE9wdGlvbmFsIHRleHQgY29udGVudCB0byBhZGQgdG8gdGhlIGVsZW1lbnRcbiAqIEByZXR1cm4gSFRNTEVsZW1lbnQgd2l0aCBwcm9wc1xuICovXG5leHBvcnQgY29uc3QgdGFnID0gPFRhZ05hbWUgZXh0ZW5kcyBrZXlvZiBIVE1MRWxlbWVudFRhZ05hbWVNYXA+KFxuXHR0YWdOYW1lOiBUYWdOYW1lLFxuXHRhdHRycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGw+LFxuXHR0ZXh0Pzogc3RyaW5nIHwgbnVsbCxcbik6IEhUTUxFbGVtZW50VGFnTmFtZU1hcFtUYWdOYW1lXSA9PiB7XG5cdGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcblx0aWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcblx0aWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG5cdHJldHVybiBlbDtcbn07XG5cbi8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgSFRNTEVsZW1lbnQgdG8gZXh0ZW5kIChmb3Igc2VydmVyIHNpZGUgcmVuZGVyaW5nKVxuZXhwb3J0IGNvbnN0IE1URFNFbGVtZW50ID1cblx0dHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiXG5cdFx0PyAoY2xhc3Mge30gYXMgdHlwZW9mIEhUTUxFbGVtZW50KVxuXHRcdDogSFRNTEVsZW1lbnQ7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgSVNfQlJPV1NFUiwgb24sIG9uTG9hZGVkLCBRVUlDS19FVkVOVCwgdGFnIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19CUkVBRENSVU1CUyA9IGAuJHtzdHlsZXMuYnJlYWRjcnVtYnMuc3BsaXQoXCIgXCIpWzBdfWA7XG5jb25zdCBDU1NfQ0FSRCA9IGAuJHtzdHlsZXMuY2FyZC5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENTU19DSElQID0gYC4ke3N0eWxlcy5jaGlwLnNwbGl0KFwiIFwiKVswXX1gO1xuY29uc3QgQ1NTX0hFTFBURVhUID0gYC4ke3N0eWxlcy5oZWxwdGV4dC5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENTU19QQUdJTkFUSU9OID0gYC4ke3N0eWxlcy5wYWdpbmF0aW9uLnNwbGl0KFwiIFwiKVswXX1gO1xuY29uc3QgQ0xJQ0tTID0gYHN1bW1hcnksdS1zdW1tYXJ5LGEsYnV0dG9uLFtyb2xlPVwidGFiXCJdLFtyb2xlPVwiYnV0dG9uXCJdYDtcbmNvbnN0IEVWRU5UUyA9IFwiY2xpY2ssdG9nZ2xlLHN1Ym1pdCxjaGFuZ2VcIjtcbmNvbnN0IE1BVE9NTyA9IFwibWF0dGlsc3luZXQubWF0b21vLmNsb3VkXCI7XG5jb25zdCBCQU5ORVIgPSBcIm10ZHMtYW5hbHl0aWNzLWJhbm5lclwiOyAvLyBEaWFsb2cgdG8gc2hvdyBNYXRvbW8gc2NyaXB0IGxvYWRpbmdcbmNvbnN0IEJBTk5FUl9VUkwgPVxuXHRcImh0dHBzOi8vd3d3Lm1hdHRpbHN5bmV0Lm5vL29tLW1hdHRpbHN5bmV0L3BlcnNvbnZlcm5lcmtsYWVyaW5nL2luZm9ybWFzam9uc2thcHNsZXJcIjtcblxudHlwZSBNYXRvbW8gPSAoXG5cdHwgc3RyaW5nXG5cdHwgbnVtYmVyXG5cdHwgYm9vbGVhblxuXHR8IERvY3VtZW50XG5cdHwgRWxlbWVudFxuXHR8ICgodGhpczogUmVjb3JkPHN0cmluZywgPFQ+KCkgPT4gVD4pID0+IHZvaWQpXG4pW107XG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBXaW5kb3cge1xuXHRcdF9wYXE/OiBNYXRvbW9bXTtcblx0XHRfbXRtPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPltdO1xuXHRcdF9tdGRzVHJhY2tpbmc/OiBBbmFseXRpY3NBY3Rpb25zW1wiaW5pdFwiXTtcblx0XHRfbXRkc1VudHJhY2s/OiAoKSA9PiB2b2lkO1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIEFuYWx5dGljc0FjdGlvbnMgPSB7XG5cdGluaXQ6IHtcblx0XHRlbmFibGVkPzogYm9vbGVhbiB8IFwiZGVidWdcIjtcblx0XHRjb25zZW50PzogXCJjdXN0b21cIiB8IHRydWU7XG5cdH0gJiAoXG5cdFx0fCB7XG5cdFx0XHRcdG1hdG9tb0lkOiBudW1iZXIgfCBzdHJpbmc7XG5cdFx0XHRcdG1hdG9tb1RhZ01hbmFnZXJJZD86IG5ldmVyO1xuXHRcdCAgfVxuXHRcdHwge1xuXHRcdFx0XHRtYXRvbW9JZD86IG5ldmVyO1xuXHRcdFx0XHRtYXRvbW9UYWdNYW5hZ2VySWQ6IHN0cmluZztcblx0XHQgIH1cblx0KTtcblx0cGFnZXZpZXc6IHtcblx0XHR1cmw/OiBzdHJpbmc7XG5cdFx0dGl0bGU/OiBzdHJpbmc7XG5cdH07XG5cdGV2ZW50OiB7XG5cdFx0Y2F0ZWdvcnk6IHN0cmluZztcblx0XHRhY3Rpb246IHN0cmluZztcblx0XHRuYW1lPzogc3RyaW5nO1xuXHRcdHZhbHVlPzogbnVtYmVyO1xuXHR9O1xuXHRzZWFyY2g6IHtcblx0XHRxdWVyeTogc3RyaW5nO1xuXHRcdGNhdGVnb3J5Pzogc3RyaW5nO1xuXHRcdHJlc3VsdHM/OiBudW1iZXI7XG5cdH07XG5cdG1hdG9tbzogTWF0b21vO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFuYWx5dGljczxBY3Rpb24gZXh0ZW5kcyBrZXlvZiBBbmFseXRpY3NBY3Rpb25zPihcblx0YWN0aW9uOiBBY3Rpb24sXG5cdGFyZ3MgPSB7fSBhcyBBbmFseXRpY3NBY3Rpb25zW0FjdGlvbl0sXG4pIHtcblx0aWYgKCFJU19CUk9XU0VSKSByZXR1cm47XG5cdGlmICghd2luZG93Ll9wYXEpIHtcblx0XHR3aW5kb3cuX3BhcSA9IFtdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wiSGVhdG1hcFNlc3Npb25SZWNvcmRpbmc6OmRpc2FibGVcIl0pOyAvLyBEaXNhYmxlIGhlYXRtYXBzIGJ5IGRlZmF1bHQgYXMgdGhpcyByZXF1aXJlIGNvb2tpZXNcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcImVuYWJsZUxpbmtUcmFja2luZ1wiXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRUcmFja2VyVXJsXCIsIGBodHRwczovLyR7TUFUT01PfS9tYXRvbW8ucGhwYF0pO1xuXHR9XG5cdGlmICghd2luZG93Ll9tdG0pIHtcblx0XHR3aW5kb3cuX210bSA9IHdpbmRvdy5fbXRtIHx8IFtdOyAvLyBQcmVwYXJlIE1hdG9tbyBUYWcgTWFuYWdlclxuXHRcdHdpbmRvdy5fbXRtLnB1c2goeyBcIm10bS5zdGFydFRpbWVcIjogRGF0ZS5ub3coKSwgZXZlbnQ6IFwibXRtLlN0YXJ0XCIgfSk7XG5cdH1cblxuXHRpZiAoYWN0aW9uID09PSBcImluaXRcIikge1xuXHRcdHdpbmRvdy5fbXRkc1RyYWNraW5nID0ge1xuXHRcdFx0ZW5hYmxlZDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICE9PSBcImxvY2FsaG9zdFwiLFxuXHRcdFx0Li4ud2luZG93Ll9tdGRzVHJhY2tpbmcsXG5cdFx0XHQuLi5hcmdzLFxuXHRcdH0gYXMgQW5hbHl0aWNzQWN0aW9uc1tcImluaXRcIl07XG5cdFx0Y29uc3QgeyBjb25zZW50LCBlbmFibGVkLCBtYXRvbW9JZCwgbWF0b21vVGFnTWFuYWdlcklkIH0gPVxuXHRcdFx0d2luZG93Ll9tdGRzVHJhY2tpbmc7XG5cblx0XHRpZiAobWF0b21vSWQpIHdpbmRvdy5fcGFxLnB1c2goW1wic2V0U2l0ZUlkXCIsIG1hdG9tb0lkXSk7XG5cdFx0aWYgKGVuYWJsZWQpIHtcblx0XHRcdGlmIChjb25zZW50ICE9PSBcImN1c3RvbVwiKSByZW5kZXJCYW5uZXIoKTtcblx0XHRcdGNvbnN0IHNyYyA9IG1hdG9tb1RhZ01hbmFnZXJJZFxuXHRcdFx0XHQ/IGBodHRwczovL2Nkbi5tYXRvbW8uY2xvdWQvJHtNQVRPTU99L2NvbnRhaW5lcl8ke21hdG9tb1RhZ01hbmFnZXJJZH0uanNgXG5cdFx0XHRcdDogYGh0dHBzOi8vY2RuLm1hdG9tby5jbG91ZC8ke01BVE9NT30vbWF0b21vLmpzYDtcblxuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihgc2NyaXB0W3NyYz1cIiR7c3JjfVwiXWApIHx8XG5cdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kKHRhZyhcInNjcmlwdFwiLCB7IGFzeW5jOiBcIlwiLCBzcmMgfSkpO1xuXHRcdH1cblx0fVxuXG5cdGlmICh3aW5kb3cuX210ZHNUcmFja2luZz8uZW5hYmxlZCA9PT0gZmFsc2UpIHJldHVybjtcblx0aWYgKHdpbmRvdy5fbXRkc1RyYWNraW5nPy5lbmFibGVkID09PSBcImRlYnVnXCIpXG5cdFx0cmV0dXJuIGNvbnNvbGUuaW5mbyhgYW5hbHl0aWNzKFwiJHthY3Rpb259XCIsIGAsIGFyZ3MsIFwiKVwiKTtcblxuXHRpZiAoYWN0aW9uID09PSBcInBhZ2V2aWV3XCIpIHtcblx0XHRjb25zdCB7IHVybCwgdGl0bGUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInBhZ2V2aWV3XCJdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0Q3VzdG9tVXJsXCIsIHVybCB8fCBsb2NhdGlvbi5ocmVmXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXREb2N1bWVudFRpdGxlXCIsIHRpdGxlIHx8IGRvY3VtZW50LnRpdGxlXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJ0cmFja1BhZ2VWaWV3XCJdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwiZXZlbnRcIikge1xuXHRcdGNvbnN0IHsgY2F0ZWdvcnksIGFjdGlvbiwgbmFtZSwgdmFsdWUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcImV2ZW50XCJdO1xuXHRcdGNvbnN0IGV2ZW50ID0gW1widHJhY2tFdmVudFwiLCBjYXRlZ29yeSwgYWN0aW9uLCBuYW1lLCB2YWx1ZV07XG5cblx0XHQvLyBXZSBkbyBub3Qgd2FudCB0byB0cmFjayBldmVudHMgd2l0aCBoYXNoIGluIFVSTCBhcyB0aGlzIGNhdXNlcyBoYXJkLXRvLXJlYWQgZGF0YSxcblx0XHQvLyBzbyB0ZW1wb3JhcmlseSByZW1vdmUgdGhlIGhhc2ggcGFydCwgYW5kIGFkZCBpdCBiYWNrIGFmdGVyIHRoZSBldmVudCBpcyBwdXNoZWRcblx0XHRsZXQgdXJsID0gbG9jYXRpb24uaHJlZjtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcblx0XHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dXJsID0gdGhpcy5nZXRDdXJyZW50VXJsPHN0cmluZz4oKTtcblx0XHRcdH0sXG5cdFx0XSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRDdXN0b21VcmxcIiwgdXJsLnNwbGl0KFwiI1wiKVswXV0pOyAvLyBTa2lwIGhhc2ggcGFydCBvZiBVUkxcblx0XHR3aW5kb3cuX3BhcS5wdXNoKGV2ZW50LmZpbHRlcigodikgPT4gdiAhPT0gdW5kZWZpbmVkKSk7IC8vIFB1c2ggZXZlbnRcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCB1cmxdKTsgLy8gUmV2ZXJydCB0byBvcmlnaW5hbCBVUkwgd2l0aCBoYXNoXG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcInNlYXJjaFwiKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0cXVlcnksXG5cdFx0XHRjYXRlZ29yeSA9IGZhbHNlLFxuXHRcdFx0cmVzdWx0cyA9IGZhbHNlLFxuXHRcdH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJzZWFyY2hcIl07XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJ0cmFja1NpdGVTZWFyY2hcIiwgcXVlcnksIGNhdGVnb3J5LCByZXN1bHRzXSk7XG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcIm1hdG9tb1wiKSB7XG5cdFx0d2luZG93Ll9wYXEucHVzaChhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJtYXRvbW9cIl0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbmRlckJhbm5lcigpIHtcblx0Y29uc3QgaGFzU2VlbkJhbm5lciA9XG5cdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoQkFOTkVSKSB8fCB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oQkFOTkVSKTtcblxuXHRpZiAoaGFzU2VlbkJhbm5lcikgcmV0dXJuO1xuXG5cdGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuXHRcdFwiYWZ0ZXJiZWdpblwiLFxuXHRcdGA8ZGlhbG9nIGlkPVwiJHtCQU5ORVJ9XCIgZGF0YS1hbmFseXRpY3M9XCJpZ25vcmVcIj48c3R5bGU+XG5cdFx0XHRcdCMke0JBTk5FUn1bb3Blbl0geyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBiYWNrZ3JvdW5kOiAjMTE2ZTZiOyBib3JkZXItcmFkaXVzOiAuNWVtOyBib3JkZXI6IDA7IGJveC1zaGFkb3c6IDAgLjI1ZW0gLjVlbSByZ2JhKDAsMCwwLC4zKTsgY29sb3I6ICNmZmY7IGZvbnQtc2l6ZTogLjg3NWVtOyBpbnNldDogYXV0byBhdXRvIDFlbSAxZW07IG1heC13aWR0aDogY2FsYygxMDB2dyAtIDJlbSk7IG91dGxpbmU6IDA7IHBhZGRpbmc6IC41ZW07IHBvc2l0aW9uOiBmaXhlZDsgei1pbmRleDogOTk5OTkgfVxuXHRcdFx0XHQjJHtCQU5ORVJ9IGJ1dHRvbiB7IGFsbDogdW5zZXQ7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogZmxleDsgd2lkdGg6IDEuNWVtOyBoZWlnaHQ6IDEuNWVtOyBmb250OiAzMDAgMS41ZW0vMS4zNSBzYW5zLXNlcmlmOyBib3JkZXItcmFkaXVzOiAuMjVlbTsgcGxhY2UtY29udGVudDogY2VudGVyOyB0cmFuc2l0aW9uOiAuMnM7IHRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQsIHNjYWxlIH1cblx0XHRcdFx0IyR7QkFOTkVSfSBidXR0b246Zm9jdXMtdmlzaWJsZSB7IG91dGxpbmU6IDJweCBzb2xpZCB9XG5cdFx0XHRcdCMke0JBTk5FUn0gYnV0dG9uOmhvdmVyIHsgYmFja2dyb3VuZDogIzBhNGU0ZiB9XG5cdFx0XHRcdCMke0JBTk5FUn0gYnV0dG9uOmFjdGl2ZSB7IGJhY2tncm91bmQ6ICMwNTQ0NDk7IHNjYWxlOiAuOSB9XG5cdFx0XHRcdCMke0JBTk5FUn0gcCB7IG1hcmdpbjogMCAuMjVlbSB9XG5cdFx0XHQ8L3N0eWxlPlxuXHRcdFx0PHA+VmkgYnJ1a2VyIDxhIGhyZWY9XCIke0JBTk5FUl9VUkx9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+aW5mb3JtYXNqb25za2Fwc2xlcjwvYT4gZm9yIMOlIGZvcmJlZHJlIGJydWtlcm9wcGxldmVsc2VuLjwvcD5cblx0XHRcdDxmb3JtIG1ldGhvZD1cImRpYWxvZ1wiIGRhdGEtYW5hbHl0aWNzPVwiaWdub3JlXCI+PGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgYXJpYS1sYWJlbD1cIk9LXCI+JnRpbWVzOzwvYnV0dG9uPjwvZm9ybT5cblx0XHQ8L2RpYWxvZz5gLFxuXHQpO1xuXHRjb25zdCBiYW5uZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChCQU5ORVIpIGFzIEhUTUxEaWFsb2dFbGVtZW50O1xuXHRjb25zdCBvbkNsb3NlID0gKCkgPT4gd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKEJBTk5FUiwgXCJzZWVuXCIpO1xuXHRiYW5uZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsb3NlXCIsIG9uQ2xvc2UsIHsgb25jZTogdHJ1ZSB9KTtcblx0YmFubmVyLnNob3coKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlVHJhY2soZXZlbnQ6IEV2ZW50KSB7XG5cdGlmICh3aW5kb3cuX210ZHNUcmFja2luZz8uZW5hYmxlZCkgc2V0VGltZW91dChwcm9jZXNzVHJhY2ssIDAsIGV2ZW50KTsgLy8gTGV0IG90aGVyIGV2ZW50cyBwcm9jZXNzIGZpcnN0XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NUcmFjayh7IHR5cGUsIHRhcmdldCB9OiBFdmVudCkge1xuXHRjb25zdCBlbCA9IHR5cGUgPT09IFwiY2xpY2tcIiA/ICh0YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihDTElDS1MpIDogdGFyZ2V0O1xuXHRpZiAoIShlbCBpbnN0YW5jZW9mIEVsZW1lbnQpIHx8IGVsLmNsb3Nlc3QoJ1tkYXRhLWFuYWx5dGljcz1cImlnbm9yZVwiXScpKVxuXHRcdHJldHVybjtcblxuXHRsZXQgYWN0aW9uID0gXCJjbGlja1wiO1xuXHRsZXQgY2F0ZWdvcnkgPSBcIkJ1dHRvblwiO1xuXHRsZXQgbmFtZSA9IGxhYmVsKGVsKSB8fCBoZWFkaW5nKGVsKSB8fCBhdHRyKGVsLCBcImRhdGEtdG9vbHRpcFwiKSB8fCBcIlwiO1xuXG5cdGlmICh0eXBlID09PSBcInN1Ym1pdFwiKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkZvcm1cIjtcblx0XHRhY3Rpb24gPSBcInN1Ym1pdFwiO1xuXHRcdG5hbWUgPSBuYW1lIHx8IGRvY3VtZW50LnRpdGxlO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT09IFwidG9nZ2xlXCIpIHtcblx0XHRpZiAoIWVsLm1hdGNoZXMoXCJkaWFsb2c6bW9kYWxcIikpIHJldHVybjsgLy8gU2tpcCBub24tbW9kYWwgZGlhbG9nc1xuXHRcdGNhdGVnb3J5ID0gXCJEaWFsb2dcIjtcblx0XHRhY3Rpb24gPSBcIm9wZW5cIjtcblx0fSBlbHNlIGlmICh0eXBlID09PSBcImNoYW5nZVwiKSB7XG5cdFx0Y29uc3QgdHlwZSA9IGF0dHIoZWwsIFwidHlwZVwiKTtcblx0XHRjb25zdCBncm91cCA9XG5cdFx0XHR0eXBlID09PSBcImNoZWNrYm94XCIgfHwgdHlwZSA9PT0gXCJyYWRpb1wiID8gZWwuY2xvc2VzdChcImZpZWxkc2V0XCIpIDogbnVsbDtcblxuXHRcdGNhdGVnb3J5ID0gZWwuY2xvc2VzdChDU1NfQ0hJUCkgPyBcIkNoaXBcIiA6IFwiRm9ybVwiO1xuXHRcdGFjdGlvbiA9IFwiY2hhbmdlXCI7XG5cdFx0bmFtZSA9XG5cdFx0XHRsYWJlbChncm91cCB8fCBlbCkgfHxcblx0XHRcdHRleHQoZ3JvdXA/LnF1ZXJ5U2VsZWN0b3IoXCJsZWdlbmRcIikpIHx8XG5cdFx0XHR0ZXh0KChlbCBhcyBIVE1MSW5wdXRFbGVtZW50KT8ubGFiZWxzPy5bMF0pO1xuXHR9IGVsc2UgaWYgKGF0dHIoZWwsIFwicm9sZVwiKSA9PT0gXCJ0YWJcIikge1xuXHRcdGNhdGVnb3J5ID0gXCJUYWJcIjtcblx0XHRhY3Rpb24gPSBcIm5hdmlnYXRlXCI7XG5cdH0gZWxzZSBpZiAoYXR0cihlbCwgXCJwb3BvdmVydGFyZ2V0XCIpKSB7XG5cdFx0aWYgKCFwb3BvdmVyKGVsKT8ubWF0Y2hlcyhcIjpwb3BvdmVyLW9wZW5cIikpIHJldHVybjsgLy8gU2tpcCBpZiBub3Qgb3BlblxuXHRcdGNhdGVnb3J5ID0gZWwuY2xvc2VzdChDU1NfSEVMUFRFWFQpID8gXCJIZWxwVGV4dFwiIDogXCJQb3BvdmVyXCI7XG5cdFx0YWN0aW9uID0gXCJvcGVuXCI7XG5cdH0gZWxzZSBpZiAoZWwubm9kZU5hbWUuZW5kc1dpdGgoXCJTVU1NQVJZXCIpKSB7XG5cdFx0aWYgKCEoZWwucGFyZW50RWxlbWVudCBhcyBIVE1MRGV0YWlsc0VsZW1lbnQpLm9wZW4pIHJldHVybjsgLy8gU2tpcCBpZiBub3Qgb3BlblxuXHRcdGNhdGVnb3J5ID0gXCJEZXRhaWxzXCI7XG5cdFx0YWN0aW9uID0gXCJvcGVuXCI7XG5cdH0gZWxzZSBpZiAoYXR0cihlbCwgXCJkYXRhLWNvbW1hbmRcIikgPT09IFwidG9nZ2xlLWFwcC1leHBhbmRlZFwiKSB7XG5cdFx0Y29uc3Qgb3BlbiA9IHN0eWxlKGVsLCBcIi0tbXRkcy10b29sdGlwLXBvc2l0aW9uXCIpID09PSBcIm5vbmVcIjtcblx0XHRjYXRlZ29yeSA9IFwiU2lkZWJhclwiO1xuXHRcdGFjdGlvbiA9IG9wZW4gPyBcImV4cGFuZFwiIDogXCJtaW5pbWl6ZVwiO1xuXHRcdG5hbWUgPSAob3BlbiAmJiBhdHRyKGVsLCBcImRhdGEtdG9vbHRpcFwiKSkgfHwgdGV4dChlbCk7XG5cdH0gZWxzZSBpZiAoZWwuY2xvc2VzdChDU1NfQlJFQURDUlVNQlMpKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkJyZWFkY3J1bWJzXCI7XG5cdFx0YWN0aW9uID0gXCJuYXZpZ2F0ZVwiO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoQ1NTX1BBR0lOQVRJT04pKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIlBhZ2ludGF0aW9uXCI7XG5cdFx0YWN0aW9uID0gXCJuYXZpZ2F0ZVwiO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoQ1NTX0NBUkQpKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkNhcmRcIjtcblx0XHRhY3Rpb24gPSBlbCBpbnN0YW5jZW9mIEhUTUxBbmNob3JFbGVtZW50ID8gXCJuYXZpZ2F0ZVwiIDogXCJjbGlja1wiO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoQ1NTX0NISVApKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkNoaXBcIjtcblx0XHRhY3Rpb24gPSBlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLXJlbW92YWJsZVwiKSA/IFwicmVtb3ZlXCIgOiBcImNsaWNrXCI7XG5cdH0gZWxzZSBpZiAoZWwuY2xvc2VzdChcInRoW2FyaWEtc29ydF1cIikpIHtcblx0XHRjYXRlZ29yeSA9IFwiVGFibGVcIjtcblx0XHRhY3Rpb24gPSBcInNvcnRcIjtcblx0fSBlbHNlIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxBbmNob3JFbGVtZW50KSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkxpbmtcIjtcblx0XHRhY3Rpb24gPSBlbC5wcm90b2NvbCA9PT0gXCJtYWlsdG86XCIgPyBcImVtYWlsXCIgOiBcIm5hdmlnYXRlXCI7XG5cdFx0aWYgKGVsLmhhc0F0dHJpYnV0ZShcImRvd25sb2FkXCIpKSBhY3Rpb24gPSBcImRvd25sb2FkXCI7XG5cdFx0ZWxzZSBpZiAoZWwuaGFzaCAmJiBlbC5ocmVmLnN0YXJ0c1dpdGgobG9jYXRpb24uaHJlZi5zcGxpdChcIiNcIilbMF0pKVxuXHRcdFx0YWN0aW9uID0gXCJhbmNob3JcIjsgLy8gT25seSB0cmFjayBhcyBhbmNob3IgaWYgc2FtZSBwYWdlXG5cdH0gZWxzZSBpZiAoZWwuaGFzQXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiKSkge1xuXHRcdGlmIChhdHRyKGVsLCBcImFyaWEtZXhwYW5kZWRcIikgIT09IFwidHJ1ZVwiKSByZXR1cm47IC8vIFNraXAgaWYgbm90IG9wZW5cblx0XHRjYXRlZ29yeSA9IFwiRXhwYW5kXCI7XG5cdFx0YWN0aW9uID0gXCJvcGVuXCI7XG5cdH1cblxuXHQvLyBSZXNwZWN0IGF0dHJpYnV0ZXMgYW5kIHNlbmRcblx0YW5hbHl0aWNzKFwiZXZlbnRcIiwge1xuXHRcdGNhdGVnb3J5OiBhdHRyKGVsLCBcImRhdGEtYW5hbHl0aWNzLWNhdGVnb3J5XCIpID8/IGNhdGVnb3J5LFxuXHRcdGFjdGlvbjogYXR0cihlbCwgXCJkYXRhLWFuYWx5dGljcy1hY3Rpb25cIikgPz8gYWN0aW9uLFxuXHRcdG5hbWU6IGF0dHIoZWwsIFwiZGF0YS1hbmFseXRpY3MtbmFtZVwiKSA/PyBuYW1lLFxuXHR9KTtcbn1cblxuLy8gVXRpbGl0aWVzXG5jb25zdCB0ZXh0ID0gKGVsPzogRWxlbWVudCB8IG51bGwpID0+IGVsPy50ZXh0Q29udGVudD8udHJpbSgpIHx8IFwiXCI7XG5jb25zdCBsYWJlbCA9IChlbD86IEVsZW1lbnQgfCBudWxsKSA9PiAoZWwgJiYgYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIpKSB8fCBcIlwiO1xuY29uc3QgcG9wb3ZlciA9IChlbDogRWxlbWVudCkgPT5cblx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXR0cihlbCwgXCJwb3BvdmVydGFyZ2V0XCIpIHx8IFwiXCIpO1xuY29uc3Qgc3R5bGUgPSAoZWw6IEVsZW1lbnQsIGtleTogc3RyaW5nKSA9PlxuXHR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCkuZ2V0UHJvcGVydHlWYWx1ZShrZXkpPy50cmltKCk7XG5jb25zdCBoZWFkaW5nID0gKGVsOiBFbGVtZW50KSA9PiB7XG5cdGNvbnN0IGJvZHkgPSB0ZXh0KGVsKTtcblx0Y29uc3QgaGVhZCA9IHRleHQoZWwucXVlcnlTZWxlY3RvcihcImgxLGgyLGgzLGg0LGg1LGg2XCIpKTsgLy8gTm90ZTogaGVhZCBtaWdodCBiZSBlbXB0eSBzdHJpbmcgJydcblx0cmV0dXJuIChib2R5LnN0YXJ0c1dpdGgoaGVhZCkgJiYgaGVhZCkgfHwgYm9keS5zbGljZSgwLCAxMDApLnRyaW0oKTsgLy8gTGltaXQgdG8gMTAwIGNoYXJhY3RlcnNcbn07XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBFVkVOVFMsIGhhbmRsZVRyYWNrLCBRVUlDS19FVkVOVCkpO1xuIiwiaWYgKFxuXHR0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdHdpbmRvdy5DU1NTdHlsZVNoZWV0ICYmXG5cdGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0c1xuKVxuXHQoKCkgPT4ge1xuXHRcdGNvbnN0IGtleSA9IFwiLS1tdGRzLWFwcC1leHBhbmRlZFwiO1xuXHRcdGNvbnN0IHNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblx0XHRjb25zdCBwcmV2ID0gKCkgPT4gIXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpPy5pbmNsdWRlcyhcImZhbHNlXCIpO1xuXG5cdFx0ZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLnB1c2goc2hlZXQpO1xuXHRcdHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQgPSAoZm9yY2UpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IG5leHQgPSBmb3JjZSA/PyAhcHJldigpO1xuXHRcdFx0XHRzaGVldC5yZXBsYWNlU3luYz8uKGA6cm9vdCB7ICR7a2V5fTogdmFyKCR7a2V5fS0tJHtuZXh0fSl9YCk7XG5cdFx0XHRcdHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIG5leHQpO1xuXHRcdFx0fSBjYXRjaCAoX2Vycikge30gLy8gbG9jYWxTdG9yYWdlIGlzIGZ1bGwgb3IgcmVwbGFjZVN5bmMgaXMgbm90IHN1cHBvcnRlZFxuXHRcdH07XG5cblx0XHQvLyBTZXQgYW5kIHN0b3JlIGluaXRpYWwgc3RhdGVcblx0XHR3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkKHByZXYoKSk7XG5cdH0pKCk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgZGVib3VuY2UsIG9uLCBvbkxvYWRlZCwgb25NdXRhdGlvbiwgUVVJQ0tfRVZFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCBcIi4vYXBwLXRvZ2dsZVwiO1xuXG5jb25zdCBDU1NfQVBQID0gc3R5bGVzLmFwcC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfU1RJQ0tZID0gc3R5bGVzLnN0aWNreS5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVE9HR0xFID0gJ1tkYXRhLWNvbW1hbmQ9XCJ0b2dnbGUtYXBwLWV4cGFuZGVkXCJdJztcbmNvbnN0IENTU19TSURFQkFSID0gYC4ke0NTU19BUFB9ID4gZGlhbG9nLC4ke0NTU19BUFB9IGRpYWxvZyB+IG1haW5gO1xuXG5jb25zdCB1c2VUcmFuc2l0aW9uID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XG5cdGlmICghZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbikgY2FsbGJhY2soKTtcblx0ZWxzZSBkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0b2dnbGVBcHBFeHBhbmRlZCA9IChmb3JjZT86IGJvb2xlYW4pID0+XG5cdC8vIEB0cy1leHBlY3QtZXJyb3Igd2luZG93Lm10ZHNBcHBUb2dnbGUgY29tZXMgZnJvbSBhcHAtdG9nZ2xlLmpzXG5cdHVzZVRyYW5zaXRpb24oKCkgPT4gd2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZD8uKGZvcmNlKSk7XG5cbmZ1bmN0aW9uIGhhbmRsZUFwcFRvZ2dsZUNsaWNrKHsgdGFyZ2V0OiBlbCwgZGVmYXVsdFByZXZlbnRlZDogc3RvcCB9OiBFdmVudCkge1xuXHRjb25zdCBsaW5rID0gKGVsIGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oXCJhXCIpO1xuXHRpZiAobGluaz8uY2xvc2VzdChcImRpYWxvZ1wiKSAmJiBsaW5rPy5jbG9zZXN0KENTU19TSURFQkFSKSlcblx0XHRyZXR1cm4gY2xvc2VTaWRlYmFyKCk7IC8vIENsb3NlIHNpZGViYXIgaWYgbGluayBpcyBjbGlja2VkIGluc2lkZSBzaWRlYmFyXG5cblx0aWYgKHN0b3AgfHwgIShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSB8fCAhZWwubWF0Y2hlcyhDU1NfVE9HR0xFKSlcblx0XHRyZXR1cm47XG5cdGNvbnN0IGlzRGVza3RvcCA9IGdldENvbXB1dGVkU3R5bGUoZWwpLnBvc2l0aW9uID09PSBcInN0aWNreVwiO1xuXG5cdGlmIChpc0Rlc2t0b3ApIHRvZ2dsZUFwcEV4cGFuZGVkKCk7XG5cdGVsc2Vcblx0XHR1c2VUcmFuc2l0aW9uKCgpID0+IHtcblx0XHRcdGNvbnN0IHNpZGViYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaWFsb2dFbGVtZW50PihDU1NfU0lERUJBUik7XG5cdFx0XHRzaWRlYmFyPy5zZXRBdHRyaWJ1dGUoXCJkYXRhLWNsb3NlZGJ5XCIsIFwiYW55XCIpOyAvLyBBbGxvdyBjbG9zaW5nIGJ5IGNsaWNraW5nIG91dHNpZGVcblx0XHRcdHNpZGViYXI/LnNob3dNb2RhbCgpO1xuXHRcdH0pO1xufVxuXG5mdW5jdGlvbiBjbG9zZVNpZGViYXIoKSB7XG5cdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpYWxvZ0VsZW1lbnQ+KENTU19TSURFQkFSKT8uY2xvc2UoKTtcbn1cblxuLy8gU2Nyb2xsIHN0YXRlXG5sZXQgTUlOX1kgPSAwOyAvLyBPZmZzZXQgdG8gYXZvaWQgc2Nyb2xsIGp1bXAgd2hlbiBzdGlja3kgaXMgc2V0IHRvIHJlbGF0aXZlXG5sZXQgU0NST0xMX1VQOiBib29sZWFuO1xubGV0IFNUSUNLID0gMDsgLy8gLTEgPSBzdGljayB0b3AsIDAgPSByZWxhdGl2ZSwgMSA9IHN0aWNrIGJvdHRvbVxubGV0IFNUSUNLX0VMOiBIVE1MRWxlbWVudDtcbmxldCBTVElDS19IID0gMDtcbmxldCBTVElDS19ZID0gMDtcbmxldCBTVFVDSyA9IGZhbHNlOyAvLyBVc2VkIHRvIGZpZ3VyZSBpZiBuYXYgaXMgbGFyZ2VyIHRoYW4gdmlld3BvcnRcbmxldCBXSU5fSCA9IDA7XG5sZXQgV0lOX1kgPSAwO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihbc3RpY2t5XTogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0U1RJQ0tfRUwgPSBzdGlja3k7XG5cdGhhbmRsZUFwcFNjcm9sbCgpOyAvLyBSdW4gb24gY29ubmVjdFxufVxuXG5mdW5jdGlvbiBoYW5kbGVBcHBTY3JvbGwoKSB7XG5cdGlmICghU1RJQ0tfRUw/LmlzQ29ubmVjdGVkKSByZXR1cm47XG5cdGNvbnN0IE5FWFRfWSA9IHdpbmRvdy5zY3JvbGxZO1xuXHRjb25zdCBORVhUX1VQID0gTkVYVF9ZIDwgV0lOX1k7XG5cdFdJTl9ZID0gTkVYVF9ZO1xuXG5cdC8vIE9ubHkgY2FsY3VsYXRlIGlmIHNjcm9sbCBkaXJlY3Rpb24gaGFzIGNoYW5nZWRcblx0aWYgKE5FWFRfVVAgIT09IFNDUk9MTF9VUCkge1xuXHRcdE1JTl9ZID0gKFNUSUNLX0VMLnBhcmVudEVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCB8fCAwKSArIFdJTl9ZO1xuXHRcdFNDUk9MTF9VUCA9IE5FWFRfVVA7XG5cdFx0U1RJQ0tfSCA9IFNUSUNLX0VMLm9mZnNldEhlaWdodDtcblx0XHRTVElDS19ZID0gU1RJQ0tfRUwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgV0lOX1k7XG5cdFx0U1RVQ0sgPSBTVElDS19FTC5vZmZzZXRIZWlnaHQgPD0gd2luZG93LmlubmVySGVpZ2h0O1xuXHRcdFdJTl9IID0gd2luZG93LmlubmVySGVpZ2h0O1xuXHR9XG5cblx0aWYgKFNUSUNLID09PSAtMSAmJiBTVFVDSykgcmV0dXJuOyAvLyBBbGx3YXlzIHN0aWNreSB3aGVuIHNpZGViYXIgaXMgc21hbGxlciB0aGFuIHZpZXdwb3J0XG5cdGlmIChTVElDSyAhPT0gLTEgJiYgKFNUVUNLIHx8IChTQ1JPTExfVVAgJiYgV0lOX1kgPD0gU1RJQ0tfWSkpKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInN0aWNreVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIFwiMHB4XCIpO1xuXHRcdFNUSUNLID0gLTE7IC8vIE5vdCBzdGlja2luZyB0byB0b3AgYW5kIHNpZGViYXIgaXMgc21hbGxlciB0aGFuIHZpZXdwb3J0IG9yIHNjcm9sbGluZyB1cFxuXHR9IGVsc2UgaWYgKFNUSUNLID09PSAtMSAmJiAhU0NST0xMX1VQKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInJlbGF0aXZlXCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7TWF0aC5tYXgoMCwgV0lOX1kgLSBNSU5fWSl9cHhgKTtcblx0XHRTVElDSyA9IDA7IC8vIFN0aWNraW5nIHRvIHRvcCBhbmQgc2Nyb2xsaW5nIGRvd25cblx0fSBlbHNlIGlmIChTVElDSyAhPT0gMSAmJiAhU0NST0xMX1VQICYmIFdJTl9ZICsgV0lOX0ggPj0gU1RJQ0tfWSArIFNUSUNLX0gpIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwic3RpY2t5XCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7V0lOX0ggLSBTVElDS19IfXB4YCk7XG5cdFx0U1RJQ0sgPSAxOyAvLyBOb3Qgc3RpY2tpbmcgdG8gYm90dG9tIGFuZCBzY3JvbGxpbmcgZG93blxuXHR9IGVsc2UgaWYgKFNUSUNLID09PSAxICYmIFNDUk9MTF9VUCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJyZWxhdGl2ZVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke1NUSUNLX1kgLSBNSU5fWX1weGApO1xuXHRcdFNUSUNLID0gMDsgLy8gU3RpY2tpbmcgdG8gYm90dG9tIGFuZCBzY3JvbGxpbmcgdXBcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfU1RJQ0tZLCBoYW5kbGVNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZUFwcFRvZ2dsZUNsaWNrLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJyZXNpemVcIiwgZGVib3VuY2UoY2xvc2VTaWRlYmFyLCAxMDApLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJzY3JvbGxcIiwgaGFuZGxlQXBwU2Nyb2xsLCBRVUlDS19FVkVOVCk7XG59KTtcbiIsImNvbnN0IGdldFN0ZXBzID0gKFxuXHRub3c6IG51bWJlcixcblx0bWF4OiBudW1iZXIsXG5cdHNob3cgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXG4pID0+IHtcblx0Y29uc3Qgb2Zmc2V0ID0gKHNob3cgLSAxKSAvIDI7XG5cdGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoTWF0aC5taW4obm93IC0gTWF0aC5mbG9vcihvZmZzZXQpLCBtYXggLSBzaG93ICsgMSksIDEpO1xuXHRjb25zdCBlbmQgPSBNYXRoLm1pbihNYXRoLm1heChub3cgKyBNYXRoLmNlaWwob2Zmc2V0KSwgc2hvdyksIG1heCk7XG5cdGNvbnN0IHBhZ2VzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogZW5kICsgMSAtIHN0YXJ0IH0sIChfLCBpKSA9PiBpICsgc3RhcnQpO1xuXG5cdGlmIChzaG93ID4gNCAmJiBzdGFydCA+IDEpIHBhZ2VzLnNwbGljZSgwLCAyLCAxLCAwKTtcblx0aWYgKHNob3cgPiAzICYmIGVuZCA8IG1heCkgcGFnZXMuc3BsaWNlKC0yLCAyLCAwLCBtYXgpO1xuXHRyZXR1cm4gcGFnZXM7XG59O1xuXG5leHBvcnQgY29uc3QgcGFnaW5hdGlvbiA9ICh7IGN1cnJlbnQgPSAxLCB0b3RhbCA9IDEwLCBzaG93ID0gNyB9KSA9PiAoe1xuXHRwcmV2OiBjdXJyZW50ID4gMSA/IGN1cnJlbnQgLSAxIDogMCxcblx0bmV4dDogY3VycmVudCA8IHRvdGFsID8gY3VycmVudCArIDEgOiAwLFxuXHRwYWdlczogZ2V0U3RlcHMoY3VycmVudCwgdG90YWwsIHNob3cpLm1hcCgocGFnZSwgaW5kZXgpID0+ICh7XG5cdFx0Y3VycmVudDogcGFnZSA9PT0gY3VycmVudCAmJiAoXCJwYWdlXCIgYXMgY29uc3QpLFxuXHRcdGtleTogYGtleS0ke3BhZ2V9LSR7aW5kZXh9YCxcblx0XHRwYWdlLFxuXHR9KSksXG59KTtcbiIsImltcG9ydCBjbHN4IGZyb20gXCJjbHN4XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgdGFnIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmV4cG9ydCB0eXBlIFRvYXN0T3B0aW9ucyA9IHtcblx0Y2xhc3NOYW1lPzogc3RyaW5nO1xuXHRjbG9zZWRieT86IFwibm9uZVwiO1xuXHRjb2xvcj86IFwibWFpblwiIHwgXCJuZXV0cmFsXCIgfCBcInN1Y2Nlc3NcIiB8IFwiZGFuZ2VyXCIgfCBcImluZm9cIiB8IFwid2FybmluZ1wiO1xuXHRpY29uPzogYm9vbGVhbiB8IFwibm9uZVwiO1xuXHR0aW1lb3V0PzogbnVtYmVyIHwgZmFsc2U7XG5cdGJ1c3k/OiBib29sZWFuO1xuXHRvcGVuPzogYm9vbGVhbjtcblx0aWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdG9hc3QoY29udGVudDogc3RyaW5nLCBvcHQ6IFRvYXN0T3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IGRpYWxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9wdC5pZCB8fCBcIlwiKSB8fCB0YWcoXCJkaWFsb2dcIik7XG5cblx0YXR0cihkaWFsb2csIFwiYXJpYS1idXN5XCIsIG9wdC5idXN5ID8gXCJ0cnVlXCIgOiBudWxsKTtcblx0YXR0cihkaWFsb2csIFwiY2xhc3NcIiwgY2xzeChzdHlsZXMudG9hc3QsIG9wdC5jbGFzc05hbWUpKTtcblx0YXR0cihkaWFsb2csIFwiZGF0YS1jbG9zZWRieVwiLCBvcHQuY2xvc2VkYnkgfHwgbnVsbCk7XG5cdGF0dHIoZGlhbG9nLCBcImRhdGEtY29sb3JcIiwgb3B0LmNvbG9yIHx8IG51bGwpO1xuXHRhdHRyKGRpYWxvZywgXCJkYXRhLWljb25cIiwgYCR7b3B0Lmljb24gPz8gXCJcIn1gIHx8IG51bGwpO1xuXHRhdHRyKGRpYWxvZywgXCJkYXRhLXRpbWVvdXRcIiwgYCR7b3B0LnRpbWVvdXQgPz8gXCJcIn1gIHx8IG51bGwpO1xuXHRhdHRyKGRpYWxvZywgXCJpZFwiLCBvcHQuaWQgfHwgYCR7RGF0ZS5ub3coKX1gKTtcblx0YXR0cihkaWFsb2csIFwib3BlblwiLCBvcHQub3BlbiA9PT0gZmFsc2UgPyBudWxsIDogXCJcIik7XG5cblx0ZGlhbG9nLmlubmVySFRNTCA9IGNvbnRlbnQ7XG5cdGRpYWxvZy5hZGRFdmVudExpc3RlbmVyKFwiYW5pbWF0aW9uZW5kXCIsIGhhbmRsZVRvYXN0Q2xvc2UsIHsgb25jZTogdHJ1ZSB9KTtcblx0ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaWFsb2cpO1xuXHRyZXR1cm4gZGlhbG9nLmlkO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVUb2FzdENsb3NlKHsgYW5pbWF0aW9uTmFtZSwgdGFyZ2V0IH06IFBhcnRpYWw8QW5pbWF0aW9uRXZlbnQ+KSB7XG5cdGlmIChhbmltYXRpb25OYW1lID09PSBzdHlsZXMuX3RvYXN0Q2xvc2UpXG5cdFx0KHRhcmdldCBhcyBIVE1MRGlhbG9nRWxlbWVudCkucmVtb3ZlKCk7XG59XG5cbi8vIEV4cG9zZSB0b2FzdC5kYW5nZXIsIHRvYXN0LmluZm8sIHRvYXN0LnN1Y2Nlc3MgZXRjLlxudG9hc3Quc3VjY2VzcyA9IChjb250ZW50OiBzdHJpbmcsIG9wdD86IFRvYXN0T3B0aW9ucykgPT5cblx0dG9hc3QoY29udGVudCwgeyBjb2xvcjogXCJzdWNjZXNzXCIsIC4uLm9wdCB9KTtcbnRvYXN0LmRhbmdlciA9IChjb250ZW50OiBzdHJpbmcsIG9wdD86IFRvYXN0T3B0aW9ucykgPT5cblx0dG9hc3QoY29udGVudCwgeyBjb2xvcjogXCJkYW5nZXJcIiwgLi4ub3B0IH0pO1xudG9hc3QuaW5mbyA9IChjb250ZW50OiBzdHJpbmcsIG9wdDogVG9hc3RPcHRpb25zKSA9PlxuXHR0b2FzdChjb250ZW50LCB7IGNvbG9yOiBcImluZm9cIiwgLi4ub3B0IH0pO1xudG9hc3Qud2FybmluZyA9IChjb250ZW50OiBzdHJpbmcsIG9wdD86IFRvYXN0T3B0aW9ucykgPT5cblx0dG9hc3QoY29udGVudCwgeyBjb2xvcjogXCJ3YXJuaW5nXCIsIC4uLm9wdCB9KTtcbnRvYXN0Lm5ldXRyYWwgPSAoY29udGVudDogc3RyaW5nLCBvcHQ/OiBUb2FzdE9wdGlvbnMpID0+XG5cdHRvYXN0KGNvbnRlbnQsIHsgY29sb3I6IFwibmV1dHJhbFwiLCAuLi5vcHQgfSk7XG50b2FzdC5wcm9taXNlID0gYXN5bmMgZnVuY3Rpb24gcHJvbWlzZTxUPihcblx0YWN0aW9uOiAoKSA9PiBQcm9taXNlPFQ+LFxuXHRwcm9wczogVG9hc3RPcHRpb25zICYge1xuXHRcdGxvYWRpbmc6IHN0cmluZztcblx0XHRzdWNjZXNzOiBzdHJpbmc7XG5cdFx0ZXJyb3I6IHN0cmluZztcblx0fSxcbik6IFByb21pc2U8VD4ge1xuXHRjb25zdCB7IGxvYWRpbmcsIHN1Y2Nlc3MsIGVycm9yLCAuLi5vcHQgfSA9IHByb3BzO1xuXHRjb25zdCBpZCA9IHRvYXN0KGxvYWRpbmcsIHsgYnVzeTogdHJ1ZSwgLi4ub3B0IH0pO1xuXHR0cnkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFjdGlvbigpO1xuXHRcdHRvYXN0LnN1Y2Nlc3Moc3VjY2VzcywgeyBpZCwgYnVzeTogZmFsc2UgfSk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSBjYXRjaCAoX2Vycm9yKSB7XG5cdFx0dG9hc3QuZGFuZ2VyKGVycm9yLCB7IGlkLCBidXN5OiBmYWxzZSB9KTtcblx0XHR0aHJvdyBfZXJyb3I7XG5cdH1cbn07XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0JSRUFEQ1JVTUJTID0gc3R5bGVzLmJyZWFkY3J1bWJzLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlQnJlYWRjcnVtYnNNdXRhdGlvbihicmVhZGNydW1iczogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCBicmVhZGN1bWJzIG9mIGJyZWFkY3J1bWJzKVxuXHRcdGJyZWFkY3VtYnMucXVlcnlTZWxlY3RvckFsbChcImxpIGFcIikuZm9yRWFjaCgoY3J1bWIsIGluZGV4LCB7IGxlbmd0aCB9KSA9PiB7XG5cdFx0XHRhdHRyKGNydW1iLCBcImFyaWEtY3VycmVudFwiLCBpbmRleCA9PT0gbGVuZ3RoIC0gMSA/IFwicGFnZVwiIDogbnVsbCk7XG5cdFx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRcdENTU19CUkVBRENSVU1CUyxcblx0XHRoYW5kbGVCcmVhZGNydW1ic011dGF0aW9uLFxuXHQpLFxuKTtcbiIsImV4cG9ydCBkZWZhdWx0IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHtcXG5cXHRkaXNwbGF5OiBncmlkO1xcblxcdGdhcDogdmFyKC0tZHMtc2l6ZS02KTtcXG59XFxuXFxuW2RhdGEtZXZlbnQtcHJveHldIHtcXG5cXHRjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5waWUge1xcblxcdG92ZXJmbG93OiB2aXNpYmxlO1xcblxcdGFzcGVjdC1yYXRpbzogdmFyKC0tbXRkc2MtY2hhcnQtYXNwZWN0KTtcXG59XFxuLnBpZSA+IHBhdGgge1xcblxcdGZpbGw6IHZhcigtLWNvbG9yKTtcXG5cXHRvdXRsaW5lOiBub25lO1xcblxcdHN0cm9rZS13aWR0aDogdmFyKC0tbXRkc2MtY2hhcnQtYm9yZGVyLXdpZHRoKTtcXG5cXHRzdHJva2U6IHZhcigtLW10ZHNjLWNoYXJ0LWJvcmRlci1jb2xvcik7XFxuXFx0dHJhbnNmb3JtLW9yaWdpbjogY2VudGVyO1xcblxcdHRyYW5zaXRpb246IHNjYWxlIDAuMnM7XFxuXFx0dmVjdG9yLWVmZmVjdDogbm9uLXNjYWxpbmctc3Ryb2tlO1xcbn1cXG4ucGllID4gcGF0aDpmb2N1cy12aXNpYmxlLFxcbi5waWUgPiBwYXRoOmhvdmVyIHtcXG5cXHRzY2FsZTogMS4wNTtcXG59XFxuXFxuOmhvc3QoW2RhdGEtdmFyaWFudD1cXFwiZG91Z2hudXRcXFwiXSkgLmF4aXMsXFxuOmhvc3QoW2RhdGEtdmFyaWFudD1cXFwicGllXFxcIl0pIC5heGlzIHtcXG5cXHRkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4uYXhpcyB7XFxuXFx0Zm9udC1zaXplOiB2YXIoLS1kcy1ib2R5LXNtLWZvbnQtc2l6ZSk7XFxuXFx0YXNwZWN0LXJhdGlvOiB2YXIoLS1tdGRzYy1jaGFydC1hc3BlY3QpO1xcblxcdGRpc3BsYXk6IGdyaWQ7XFxuXFx0Z2FwOiB2YXIoLS1tdGRzYy1jaGFydC1heGlzLWdhcCk7XFxuXFx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBmaXQtY29udGVudCg3ZW0pIDFmcjtcXG5cXHRncmlkLXRlbXBsYXRlLXJvd3M6IDFmciBhdXRvO1xcblxcdGdyaWQtdGVtcGxhdGUtYXJlYXM6XFxuXFx0XFx0XFxcInktYXhpcyBjaGFydFxcXCJcXG5cXHRcXHRcXFwieS1heGlzIHgtYXhpc1xcXCI7XFxufVxcblxcbi5heGlzOjpiZWZvcmUge1xcblxcdGNvbnRlbnQ6IFxcXCJcXFwiO1xcblxcdGdyaWQtYXJlYTogY2hhcnQ7XFxuXFx0Ym9yZGVyLXN0eWxlOiBzb2xpZDtcXG5cXHRib3JkZXItd2lkdGg6IDAgMCB2YXIoLS1kcy1ib3JkZXItd2lkdGgtZGVmYXVsdClcXG5cXHRcXHR2YXIoLS1kcy1ib3JkZXItd2lkdGgtZGVmYXVsdCk7XFxuXFx0Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogdmFyKC0tZHMtYm9yZGVyLXJhZGl1cy1sZyk7XFxufVxcblxcbi5heGlzU3RlcHMsXFxuLmF4aXNTdGVwLFxcbi5heGlzR3JvdXBzLFxcbi5heGlzR3JvdXAge1xcblxcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuXFx0ZGlzcGxheTogZ3JpZDtcXG5cXHRwb3NpdGlvbjogcmVsYXRpdmU7IC8qIEhlbHAgLmxpbmVDb250YWluZXIgcG9zaXRpb25pbmcgKi9cXG59XFxuXFxuLmF4aXNHcm91cHMge1xcblxcdGdhcDogdmFyKC0tbXRkc2MtY2hhcnQtYXhpcy1nYXApO1xcblxcdGdyaWQtYXJlYTogY2hhcnQgLyBjaGFydCAvIHgtYXhpcyAvIGNoYXJ0O1xcblxcdGdyaWQtdGVtcGxhdGUtcm93czogc3ViZ3JpZDtcXG5cXHRncmlkLWF1dG8tY29sdW1uczogbWlubWF4KDAsIDFmcik7XFxuXFx0cGFkZGluZzogMCB2YXIoLS1tdGRzYy1jaGFydC1heGlzLWdhcCk7XFxuXFx0dGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4uYXhpc0dyb3VwIHtcXG5cXHRncmlkLXJvdzogaW5oZXJpdDtcXG5cXHRncmlkLXRlbXBsYXRlOiBpbmhlcml0O1xcbn1cXG4uYXhpc0dyb3VwOjphZnRlciB7XFxuXFx0Y29udGVudDogYXR0cihkYXRhLWxhYmVsKTtcXG59XFxuLmF4aXNTdGVwcyB7XFxuXFx0Z3JpZC1hdXRvLXJvd3M6IDFmcjtcXG5cXHRncmlkLWFyZWE6IGNoYXJ0IC8geS1heGlzIC8gY2hhcnQgLyBjaGFydDtcXG5cXHRncmlkLXRlbXBsYXRlOiAxcHggLyBzdWJncmlkO1xcbn1cXG4uYXhpc1N0ZXAge1xcblxcdGdyaWQtY29sdW1uOiBpbmhlcml0O1xcblxcdGdyaWQtdGVtcGxhdGUtY29sdW1uczogaW5oZXJpdDtcXG5cXHRwbGFjZS1jb250ZW50OiBlbmQgc3RhcnQ7XFxuXFx0dGV4dC1hbGlnbjogcmlnaHQ7XFxufVxcbi5heGlzU3RlcDo6YWZ0ZXIge1xcblxcdGJvcmRlci1ib3R0b206IHZhcigtLW10ZHNjLWNoYXJ0LWF4aXMtYm9yZGVyKTtcXG5cXHRjb250ZW50OiBcXFwiXFxcIjtcXG59XFxuLmF4aXNTdGVwOjpiZWZvcmUge1xcblxcdGNvbnRlbnQ6IGF0dHIoZGF0YS1sYWJlbCk7XFxuXFx0dHJhbnNsYXRlOiAwIDUwJTtcXG59XFxuLmF4aXNTdGVwW2RhdGEtbGFiZWw9XFxcIjBcXFwiXTo6YWZ0ZXIge1xcblxcdG9wYWNpdHk6IDA7IC8qIEhpZGUgMCBsaW5lIGFzIGl0IG92ZXJsYXBwcyB3aXRoIC5heGlzOjpiZWZvcmUgKi9cXG59XFxuXFxuOmhvc3QoW2RhdGEtdmFyaWFudHw9XFxcImNvbHVtblxcXCJdKSAuYXhpc1N0ZXBzLFxcbjpob3N0KFtkYXRhLXZhcmlhbnR8PVxcXCJjb2x1bW5cXFwiXSkgLmF4aXNHcm91cCB7XFxuXFx0ZGlyZWN0aW9uOiBydGw7IC8qIFJldmVyc2Ugb3JkZXJzICovXFxufVxcbjpob3N0KFtkYXRhLXZhcmlhbnR8PVxcXCJjb2x1bW5cXFwiXSkgLmF4aXNTdGVwcyA+ICosXFxuOmhvc3QoW2RhdGEtdmFyaWFudHw9XFxcImNvbHVtblxcXCJdKSAuYXhpc0dyb3VwID4gKiB7XFxuXFx0ZGlyZWN0aW9uOiBsdHI7XFxufVxcbjpob3N0KFtkYXRhLXZhcmlhbnR8PVxcXCJjb2x1bW5cXFwiXSkgLmF4aXNHcm91cHMge1xcblxcdGdyaWQtYXJlYTogY2hhcnQgLyB5LWF4aXMgLyBjaGFydCAvIGNoYXJ0O1xcblxcdGdyaWQtdGVtcGxhdGU6IG5vbmUgLyBzdWJncmlkO1xcblxcdHBhZGRpbmc6IHZhcigtLW10ZHNjLWNoYXJ0LWF4aXMtZ2FwKSAwO1xcblxcdHJvdy1nYXA6IHZhcigtLW10ZHNjLWNoYXJ0LWF4aXMtZ2FwKTtcXG5cXHR0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuOmhvc3QoW2RhdGEtdmFyaWFudHw9XFxcImNvbHVtblxcXCJdKSAuYXhpc0dyb3VwOjphZnRlciB7XFxuXFx0YWxpZ24tc2VsZjogY2VudGVyOyAvKiBTaW5jZSB0ZXh0LWFsaWduIGRvZXMgbm90IHdvcmsgdmVydGljYWxseSAqL1xcbn1cXG46aG9zdChbZGF0YS12YXJpYW50fD1cXFwiY29sdW1uXFxcIl0pIC5heGlzR3JvdXAge1xcblxcdGdyaWQtY29sdW1uOiBpbmhlcml0O1xcblxcdGdyaWQtcm93OiBhdXRvO1xcbn1cXG46aG9zdChbZGF0YS12YXJpYW50fD1cXFwiY29sdW1uXFxcIl0pIC5heGlzU3RlcHMge1xcblxcdGdyaWQtYXV0by1jb2x1bW5zOiAxZnI7XFxuXFx0Z3JpZC1hcmVhOiBjaGFydCAvIGNoYXJ0IC8geC1heGlzIC8gY2hhcnQ7XFxuXFx0Z3JpZC10ZW1wbGF0ZTogc3ViZ3JpZCAvIDFweDtcXG59XFxuOmhvc3QoW2RhdGEtdmFyaWFudHw9XFxcImNvbHVtblxcXCJdKSAuYXhpc1N0ZXAge1xcblxcdGdyaWQtcm93OiBpbmhlcml0O1xcblxcdGdyaWQtY29sdW1uOiBhdXRvO1xcblxcdGdyaWQtdGVtcGxhdGUtcm93czogaW5oZXJpdDtcXG5cXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG5vbmU7XFxufVxcbjpob3N0KFtkYXRhLXZhcmlhbnR8PVxcXCJjb2x1bW5cXFwiXSkgLmF4aXNTdGVwOjphZnRlciB7XFxuXFx0b3JkZXI6IC0xO1xcblxcdGJvcmRlci1sZWZ0OiB2YXIoLS1tdGRzYy1jaGFydC1heGlzLWJvcmRlcik7XFxuXFx0Ym9yZGVyLWJvdHRvbTogMDtcXG59XFxuOmhvc3QoW2RhdGEtdmFyaWFudHw9XFxcImNvbHVtblxcXCJdKSAuYXhpc1N0ZXA6OmJlZm9yZSB7XFxuXFx0dHJhbnNsYXRlOiAtNTAlIDA7XFxufVxcblxcbi5heGlzR3JvdXBDb250ZW50IHtcXG5cXHRkaXNwbGF5OiBmbGV4O1xcbn1cXG46aG9zdChbZGF0YS12YXJpYW50PVxcXCJiYXItc3RhY2tlZFxcXCJdKSAuYXhpc0dyb3VwQ29udGVudCB7XFxuXFx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xcbn1cXG46aG9zdChbZGF0YS12YXJpYW50PVxcXCJjb2x1bW5cXFwiXSkgLmF4aXNHcm91cENvbnRlbnQge1xcblxcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxufVxcbjpob3N0KFtkYXRhLXZhcmlhbnQ9XFxcImNvbHVtbi1zdGFja2VkXFxcIl0pIC5heGlzR3JvdXBDb250ZW50IHtcXG5cXHRmbGV4LWRpcmVjdGlvbjogcm93O1xcbn1cXG5cXG4uYmFyIHtcXG5cXHQtLXNpemU6IGNhbGModmFyKC0tdmFsdWUpIC8gdmFyKC0tdG90YWwsIDEpICogMTAwJSk7XFxuXFx0YWxpZ24tc2VsZjogZW5kO1xcblxcdGJhY2tncm91bmQ6IHZhcigtLWNvbG9yKTtcXG5cXHRib3JkZXI6IHZhcigtLW10ZHNjLWNoYXJ0LWJvcmRlci1jb2xvcikgc29saWQgdmFyKC0tbXRkc2MtY2hhcnQtYm9yZGVyLXdpZHRoKTtcXG5cXHRib3JkZXItcmFkaXVzOiB2YXIoLS1kcy1ib3JkZXItcmFkaXVzLXNtKSB2YXIoLS1kcy1ib3JkZXItcmFkaXVzLXNtKSAwIDA7XFxuXFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcXG5cXHRoZWlnaHQ6IHZhcigtLXNpemUpO1xcblxcdHdpZHRoOiAxMDAlO1xcbn1cXG4uYmFyOmZvY3VzLXZpc2libGUsXFxuLmxpbmVQb2ludDpmb2N1cy12aXNpYmxlIHtcXG5cXHRib3gtc2hhZG93OiB2YXIoLS1kc2MtZm9jdXMtYm94U2hhZG93KTtcXG5cXHRvdXRsaW5lOiB2YXIoLS1kc2MtZm9jdXMtb3V0bGluZSk7XFxuXFx0b3V0bGluZS1vZmZzZXQ6IHZhcigtLWRzLWJvcmRlci13aWR0aC1mb2N1cyk7XFxuXFx0ei1pbmRleDogMjsgLyogei1pbmRleCB0byBwbGFjZSBvbiB0b3Agd2hlbiBvdXRsaW5lZCAqL1xcbn1cXG5cXG46aG9zdChbZGF0YS12YXJpYW50fD1cXFwiY29sdW1uXFxcIl0pIC5iYXIge1xcblxcdGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tZHMtYm9yZGVyLXJhZGl1cy1zbSkgdmFyKC0tZHMtYm9yZGVyLXJhZGl1cy1zbSkgMDtcXG5cXHR3aWR0aDogdmFyKC0tc2l6ZSk7XFxuXFx0aGVpZ2h0OiAxMDAlO1xcblxcdGFsaWduLXNlbGY6IHN0YXJ0O1xcbn1cXG5cXG4vKiBQcmV2ZW50IGRvdWJsZSBib3JkZXIgLSB1c2luZyBtYXJnaW4gdG8gc2VlIGJvcmRlciBhcm91bmQgYmFycyAqL1xcbi8qIFByZXZlbnQgZG91YmxlIGJvcmRlciAtIHVzaW5nIGJvcmRlciB0byBhdm9pZCBhZmZlY3Rpbmcgc2l6ZSAqL1xcbjpob3N0KDpub3QoW2RhdGEtdmFyaWFudF0pKSAuYmFyICsgLmJhcixcXG46aG9zdChbZGF0YS12YXJpYW50PVxcXCJiYXJcXFwiXSkgLmJhciArIC5iYXIge1xcblxcdG1hcmdpbi1sZWZ0OiAtMXB4O1xcbn1cXG46aG9zdChbZGF0YS12YXJpYW50PVxcXCJiYXItc3RhY2tlZFxcXCJdKSAuYmFyOm5vdCg6bGFzdC1jaGlsZCkge1xcblxcdGJvcmRlci1yYWRpdXM6IDA7XFxufVxcbjpob3N0KFtkYXRhLXZhcmlhbnQ9XFxcImJhci1zdGFja2VkXFxcIl0pIC5iYXIgKyAuYmFyIHtcXG5cXHRib3JkZXItYm90dG9tOiBub25lO1xcbn1cXG46aG9zdChbZGF0YS12YXJpYW50PVxcXCJjb2x1bW5cXFwiXSkgLmJhciArIC5iYXIge1xcblxcdG1hcmdpbi10b3A6IC0xcHg7XFxufVxcbjpob3N0KFtkYXRhLXZhcmlhbnQ9XFxcImNvbHVtbi1zdGFja2VkXFxcIl0pIC5iYXI6bm90KDpsYXN0LWNoaWxkKSB7XFxuXFx0Ym9yZGVyLXJhZGl1czogMDtcXG59XFxuOmhvc3QoW2RhdGEtdmFyaWFudD1cXFwiY29sdW1uLXN0YWNrZWRcXFwiXSkgLmJhciArIC5iYXIge1xcblxcdGJvcmRlci1sZWZ0OiBub25lO1xcbn1cXG5cXG4ubGluZUNvbnRhaW5lciB7XFxuXFx0YWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuXFx0ZGlzcGxheTogZmxleDtcXG5cXHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuXFx0cG9pbnRlci1ldmVudHM6IG5vbmU7XFxuXFx0Z3JpZC1yb3c6IGNoYXJ0O1xcbn1cXG4ubGluZUNvbnRhaW5lciA+IHN2ZyxcXG4ubGluZUNvbnRhaW5lciB7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdHdpZHRoOiAxMDAlO1xcblxcdGhlaWdodDogMTAwJTtcXG59XFxuLmxpbmVDb250YWluZXIgPiBzdmcge1xcblxcdG92ZXJmbG93OiBjbGlwIHZpc2libGU7XFxufVxcbi5saW5lQ29udGFpbmVyID4gZGl2W3JvbGU9XFxcImxpc3RpdGVtXFxcIl0ge1xcblxcdGRpc3BsYXk6IGNvbnRlbnRzO1xcbn1cXG5cXG46aG9zdChbZGF0YS12YXJpYW50fD1cXFwibGluZVxcXCJdKSAuYXhpc0dyb3VwcyxcXG46aG9zdChbZGF0YS12YXJpYW50fD1cXFwiYXJlYVxcXCJdKSAuYXhpc0dyb3VwcyB7XFxuXFx0cGFkZGluZzogMDtcXG59XFxuXFxuLmxpbmUsXFxuLmxpbmVTaGFkZSB7XFxuXFx0ZmlsbDogbm9uZTtcXG5cXHRzdHJva2U6IHZhcigtLWNvbG9yKTtcXG5cXHRzdHJva2UtbGluZWpvaW46IHJvdW5kO1xcblxcdHN0cm9rZS1saW5lY2FwOiByb3VuZDtcXG5cXHRzdHJva2Utd2lkdGg6IDEuNTtcXG5cXHR2ZWN0b3ItZWZmZWN0OiBub24tc2NhbGluZy1zdHJva2U7XFxufVxcblxcbi5saW5lU2hhZGUge1xcblxcdHN0cm9rZTogbm9uZTtcXG5cXHRmaWxsOiB2YXIoLS1jb2xvcik7XFxuXFx0b3BhY2l0eTogMC4zO1xcblxcdG1hc2s6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIGJsYWNrLCB0cmFuc3BhcmVudCk7XFxufVxcblxcbi5saW5lLFxcbi5saW5lUG9pbnQsXFxuOmhvc3Q6aGFzKC5saW5lUG9pbnQpIC5sZWdlbmQ6OmJlZm9yZSB7XFxuXFx0ZmlsdGVyOiBicmlnaHRuZXNzKDAuOCkgc2F0dXJhdGUoMik7IC8qIEVuc3VyZSBtb3JlIGNvbnRyYXN0IGZvciBsaW5lIGNvbG9ycyAqL1xcbn1cXG5cXG4ubGluZVBvaW50IHtcXG5cXHQtLXNpemU6IHZhcigtLWRzLXNpemUtMyk7XFxuXFx0YmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3IpO1xcblxcdGJvcmRlci1yYWRpdXM6IHZhcigtLWRzLWJvcmRlci1yYWRpdXMtZnVsbCk7XFxuXFx0Ym9yZGVyOiB2YXIoLS1tdGRzYy1jaGFydC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLW10ZHNjLWNoYXJ0LWJvcmRlci1jb2xvcik7XFxuXFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcXG5cXHRmaWx0ZXI6IGJyaWdodG5lc3MoMC44KSBzYXR1cmF0ZSgyKTtcXG5cXHRoZWlnaHQ6IHZhcigtLXNpemUpO1xcblxcdG1hcmdpbjogY2FsYyh2YXIoLS1zaXplKSAvIC0yKTtcXG5cXHRwYWRkaW5nOiAwO1xcblxcdHBvaW50ZXItZXZlbnRzOiBhbGw7XFxuXFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblxcdHRvcDogY2FsYygxMDAlIC0gdmFyKC0tdmFsdWUpIC8gdmFyKC0tdG90YWwsIDEpICogMTAwJSk7XFxuXFx0dHJhbnNpdGlvbjogc2NhbGUgMC4ycztcXG5cXHR3aWR0aDogdmFyKC0tc2l6ZSk7XFxuXFx0ei1pbmRleDogMjtcXG59XFxuLmxpbmVQb2ludDpmb2N1cy12aXNpYmxlLFxcbi5saW5lUG9pbnQ6aG92ZXIge1xcblxcdHNjYWxlOiAxLjM7XFxufVxcbi5saW5lUG9pbnQ6OmJlZm9yZSB7XFxuXFx0Y29udGVudDogXFxcIlxcXCI7XFxuXFx0aW5zZXQ6IGNhbGModmFyKC0tZHMtc2l6ZS0yKSAqIC0xKTsgLyogSW5jcmVhc2UgY2xpY2sgc3VyZmFjZSAqL1xcblxcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuXFxuLmxlZ2VuZHMge1xcblxcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuXFx0ZGlzcGxheTogZmxleDtcXG5cXHRmbGV4LXdyYXA6IHdyYXA7XFxuXFx0Z2FwOiB2YXIoLS1kcy1zaXplLTIpIHZhcigtLWRzLXNpemUtNSk7XFxuXFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxufVxcbi5sZWdlbmQge1xcblxcdGRpc3BsYXk6IGZsZXg7XFxuXFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cXHRnYXA6IHZhcigtLWRzLXNpemUtMik7XFxufVxcbi5sZWdlbmQ6OmJlZm9yZSB7XFxuXFx0YmFja2dyb3VuZDogdmFyKC0tY29sb3IpO1xcblxcdGJvcmRlci1yYWRpdXM6IHZhcigtLWRzLWJvcmRlci1yYWRpdXMtZnVsbCk7XFxuXFx0Ym9yZGVyOiB2YXIoLS1tdGRzYy1jaGFydC1ib3JkZXItY29sb3IpIHNvbGlkIHZhcigtLW10ZHNjLWNoYXJ0LWJvcmRlci13aWR0aCk7XFxuXFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcXG5cXHRjb250ZW50OiBcXFwiXFxcIjtcXG5cXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuXFx0aGVpZ2h0OiB2YXIoLS1kcy1zaXplLTUpO1xcblxcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuXFx0d2lkdGg6IHZhcigtLWRzLXNpemUtNSk7XFxufVxcblwiIiwiaW1wb3J0IHsgdGFnIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0RGF0YSB9IGZyb20gXCIuL2NoYXJ0LWVsZW1lbnRcIjtcblxudHlwZSBDb25maWcgPSB7IHR5cGU6IHN0cmluZyB9O1xuXG5leHBvcnQgZnVuY3Rpb24gdG9BeGlzKGRhdGE6IENoYXJ0RGF0YSwgeyB0eXBlIH06IENvbmZpZykge1xuXHRjb25zdCBpc1N0YWNrZWQgPSB0eXBlID09PSBcInN0YWNrZWRcIjtcblx0Y29uc3QgbWF4ID0gZGF0YVswXS5yZWR1Y2UoKGFjYywgXywgaW5kZXgpID0+IHtcblx0XHRjb25zdCBhbGwgPSBkYXRhLm1hcCgocm93KSA9PiByb3dbaW5kZXhdLm51bWJlcik7XG5cdFx0Y29uc3Qgc3VtID0gYWxsLnJlZHVjZSgoYWNjLCBudW0pID0+IGFjYyArIG51bSwgMCk7XG5cdFx0cmV0dXJuIE1hdGgubWF4KGFjYywgLi4uKGlzU3RhY2tlZCA/IFtzdW1dIDogYWxsKSk7XG5cdH0sIDApO1xuXG5cdGNvbnN0IGRpZ2l0cyA9IDEwICoqIChgJHt+fm1heH1gLmxlbmd0aCAtIDEpOyAvLyBHZXQgYW1vdW50IG9mIGRpZ2l0cyBpbiB0b3RhbCBudW1iZXJcblx0Y29uc3Qgc3RlcCA9IG1heCAvIGRpZ2l0cyA8IDUgPyBkaWdpdHMgLyAyIDogZGlnaXRzOyAvLyBJZiB3ZSBnZXQgbGVzcyB0aGFuIDUgc3RlcHMsIG1ha2Ugc21hbGxlciBzdGVwc1xuXHRjb25zdCB0b3RhbCA9IE1hdGguY2VpbChtYXggLyBzdGVwKSAqIHN0ZXA7XG5cdGNvbnN0IGdyb3VwcyA9IHRhZyhcImRpdlwiLCB7IGNsYXNzOiBcImF4aXNHcm91cHNcIiB9KTtcblx0Y29uc3Qgc3RlcHMgPSB0YWcoXCJkaXZcIik7XG5cblx0c3RlcHMuY2xhc3NMaXN0LmFkZChcImF4aXNTdGVwc1wiKTtcblx0c3RlcHMuYXBwZW5kKFxuXHRcdC4uLkFycmF5LmZyb20oeyBsZW5ndGg6IHRvdGFsIC8gc3RlcCArIDEgfSwgKF8sIGkpID0+IGdldE51bShzdGVwICogaSkpXG5cdFx0XHQucmV2ZXJzZSgpXG5cdFx0XHQubWFwKChudW0pID0+IHRhZyhcImRpdlwiLCB7IGNsYXNzOiBcImF4aXNTdGVwXCIsIFwiZGF0YS1sYWJlbFwiOiBudW0gfSkpLFxuXHQpO1xuXG5cdGNvbnN0IGF4aXMgPSB0YWcoXCJkaXZcIiwge1xuXHRcdFwiYXJpYS1sYWJlbFwiOiBkYXRhWzBdWzBdLnZhbHVlIHx8IG51bGwsXG5cdFx0Y2xhc3M6IFwiYXhpc1wiLFxuXHRcdHJvbGU6IFwiZmlndXJlXCIsXG5cdH0pO1xuXHRheGlzLnN0eWxlLnNldFByb3BlcnR5KFwiLS1ncm91cHNcIiwgYCR7ZGF0YS5sZW5ndGggLSAxfWApO1xuXHRheGlzLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3RhbFwiLCBgJHt0b3RhbH1gKTtcblx0YXhpcy5hcHBlbmQoc3RlcHMsIGdyb3Vwcyk7XG5cblx0cmV0dXJuIHsgdG90YWwsIGdyb3VwcywgYXhpcyB9O1xufVxuXG5jb25zdCBnZXROdW0gPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoKS5mb3JtYXQ7XG4iLCJpbXBvcnQgeyB0YWcgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnREYXRhIH0gZnJvbSBcIi4vY2hhcnQtZWxlbWVudFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gdG9CYXJzKGRhdGE6IENoYXJ0RGF0YSkge1xuXHRyZXR1cm4gZGF0YVswXS5zbGljZSgxKS5tYXAoKHsgdmFsdWUsIGV2ZW50IH0sIGluZGV4KSA9PiB7XG5cdFx0Y29uc3QgZ3JvdXAgPSB0YWcoXCJkaXZcIiwgeyBjbGFzczogXCJheGlzR3JvdXBcIiwgXCJkYXRhLWxhYmVsXCI6IHZhbHVlIH0pO1xuXHRcdGNvbnN0IGNvbnRlbnQgPSBncm91cC5hcHBlbmRDaGlsZChcblx0XHRcdHRhZyhcImRpdlwiLCB7IGNsYXNzOiBcImF4aXNHcm91cENvbnRlbnRcIiB9KSxcblx0XHQpO1xuXG5cdFx0ZGF0YVxuXHRcdFx0LnNsaWNlKDEpXG5cdFx0XHQubWFwKCh2YWx1ZXMpID0+IHZhbHVlc1tpbmRleCArIDFdKVxuXHRcdFx0Lm1hcCgoeyB0b29sdGlwLCBzdHlsZSwgbnVtYmVyIH0pID0+XG5cdFx0XHRcdGNvbnRlbnQuYXBwZW5kQ2hpbGQoXG5cdFx0XHRcdFx0dGFnKFwiZGl2XCIsIHtcblx0XHRcdFx0XHRcdFwiYXJpYS1sYWJlbFwiOiB0b29sdGlwLFxuXHRcdFx0XHRcdFx0XCJkYXRhLWV2ZW50XCI6IGV2ZW50LFxuXHRcdFx0XHRcdFx0Y2xhc3M6IFwiYmFyXCIsXG5cdFx0XHRcdFx0XHRyb2xlOiBcImltZ1wiLFxuXHRcdFx0XHRcdFx0c3R5bGU6IGAke3N0eWxlfTsgLS12YWx1ZTogJHtudW1iZXJ9YCxcblx0XHRcdFx0XHRcdHRhYmluZGV4OiBcIjBcIixcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0KSxcblx0XHRcdCk7XG5cdFx0cmV0dXJuIGdyb3VwO1xuXHR9KTtcbn1cbiIsImltcG9ydCB7IGF0dHIsIHRhZyB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBDaGFydERhdGEgfSBmcm9tIFwiLi9jaGFydC1lbGVtZW50XCI7XG5cbnR5cGUgQ29uZmlnID0ge1xuXHR0b3RhbDogbnVtYmVyO1xuXHR0eXBlOiBzdHJpbmc7XG5cdHZhcmlhbnQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0xpbmVzKGRhdGE6IENoYXJ0RGF0YSwgeyB0b3RhbCwgdmFyaWFudCB9OiBDb25maWcpIHtcblx0Y29uc3Qgc21vb3RoaW5nID0gMDsgLy8gTnVtYmVyLnBhcnNlRmxvYXQodHlwZSB8fCBcIjEwXCIpIHx8IDA7XG5cdGNvbnN0IGdyb3VwID0gdGFnKFwiZGl2XCIsIHsgY2xhc3M6IFwiYXhpc0dyb3VwXCIgfSk7XG5cdGRhdGEuc2xpY2UoMSkuZm9yRWFjaCgoWywgLi4udmFsdWVzXSkgPT4ge1xuXHRcdGNvbnN0IGxpbmVDb250YWluZXIgPSB0YWcoXCJkaXZcIiwge1xuXHRcdFx0Y2xhc3M6IGBsaW5lQ29udGFpbmVyYCxcblx0XHRcdHJvbGU6IFwibGlzdFwiLFxuXHRcdFx0c3R5bGU6IHZhbHVlc1swXS5zdHlsZSxcblx0XHR9KTtcblxuXHRcdGNvbnN0IHBhdGhEZWZpbnRpb24gPSB0b1BhdGgoXG5cdFx0XHR2YWx1ZXMubWFwKCh7IG51bWJlciB9LCBpbmRleCwgeyBsZW5ndGggfSkgPT4gW1xuXHRcdFx0XHQoMTAwIC8gKGxlbmd0aCAtIDEpKSAqIGluZGV4LFxuXHRcdFx0XHQxMDAgLSAobnVtYmVyIC8gdG90YWwpICogMTAwLFxuXHRcdFx0XSksXG5cdFx0XHRzbW9vdGhpbmcgLyAxMDAsXG5cdFx0KTtcblxuXHRcdGNvbnN0IGxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInN2Z1wiKTtcblx0XHRhdHRyKGxpbmUsIFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpO1xuXHRcdGF0dHIobGluZSwgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsIFwibm9uZVwiKTtcblx0XHRhdHRyKGxpbmUsIFwidmlld0JveFwiLCBcIjAgMCAxMDAgMTAwXCIpO1xuXG5cdFx0Y29uc3QgcGF0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwicGF0aFwiKTtcblx0XHRhdHRyKHBhdGgsIFwiY2xhc3NcIiwgXCJsaW5lXCIpO1xuXHRcdGF0dHIocGF0aCwgXCJkXCIsIHBhdGhEZWZpbnRpb24pO1xuXHRcdGF0dHIocGF0aCwgXCJmaWxsXCIsIFwibm9uZVwiKTtcblx0XHRhdHRyKHBhdGgsIFwic3Ryb2tlXCIsIFwiY3VycmVudENvbG9yXCIpO1xuXG5cdFx0aWYgKHZhcmlhbnQgPT09IFwiYXJlYVwiKSB7XG5cdFx0XHRjb25zdCBsaW5lU2hhZGUgPSBwYXRoLmNsb25lTm9kZSh0cnVlKSBhcyBTVkdQYXRoRWxlbWVudDtcblx0XHRcdGF0dHIobGluZVNoYWRlLCBcImRcIiwgYE0tMTAwLDEwMCBMJHtwYXRoRGVmaW50aW9uLnNsaWNlKDEpfUwyMDAsMTAwYCk7XG5cdFx0XHRhdHRyKGxpbmVTaGFkZSwgXCJjbGFzc1wiLCBcImxpbmVTaGFkZVwiKTtcblx0XHRcdGxpbmUuYXBwZW5kKGxpbmVTaGFkZSk7XG5cdFx0fVxuXG5cdFx0dmFsdWVzLmZvckVhY2goKHsgbnVtYmVyLCB0b29sdGlwLCBldmVudCB9KSA9PiB7XG5cdFx0XHRjb25zdCBjb2wgPSB0YWcoXCJkaXZcIiwgeyByb2xlOiBcImxpc3RpdGVtXCIgfSk7XG5cdFx0XHRjb2wuYXBwZW5kQ2hpbGQoXG5cdFx0XHRcdHRhZyhcImRpdlwiLCB7XG5cdFx0XHRcdFx0XCJhcmlhLWxhYmVsXCI6IHRvb2x0aXAsXG5cdFx0XHRcdFx0XCJkYXRhLWV2ZW50XCI6IGV2ZW50LFxuXHRcdFx0XHRcdHRhYmluZGV4OiBcIjBcIixcblx0XHRcdFx0XHRjbGFzczogXCJsaW5lUG9pbnRcIixcblx0XHRcdFx0XHRyb2xlOiBcImltZ1wiLFxuXHRcdFx0XHRcdHN0eWxlOiBgLS12YWx1ZTogJHtudW1iZXJ9YCxcblx0XHRcdFx0fSksXG5cdFx0XHQpO1xuXHRcdFx0bGluZUNvbnRhaW5lci5hcHBlbmQoY29sKTtcblx0XHR9KTtcblxuXHRcdGxpbmVDb250YWluZXIuYXBwZW5kQ2hpbGQobGluZSkuYXBwZW5kKHBhdGgpO1xuXHRcdGdyb3VwLmFwcGVuZChsaW5lQ29udGFpbmVyKTtcblx0fSk7XG5cdHJldHVybiBncm91cDtcbn1cblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9vYnNlcnZhYmxlaHEuY29tL0BuZHJ5L3Ntb290aC1hLXN2Zy1wYXRoLXdpdGgtY3ViaWMtYmV6aWVyLWN1cnZlc1xuY29uc3QgdG9QYXRoID0gKHBvaW50czogbnVtYmVyW11bXSwgczogbnVtYmVyKSA9PlxuXHRwb2ludHMubWFwKChbeCwgeV0sIGksIGEpID0+IChpID8gc21vb3RoKGksIGEsIHMpIDogYE0ke3h9LCR7eX1gKSkuam9pbihcIiBcIik7XG5jb25zdCBhZGQgPSAoW2F4LCBheV06IG51bWJlcltdLCBbYngsIGJ5XTogbnVtYmVyW10pID0+IFtheCArIGJ4LCBheSArIGJ5XTtcbmNvbnN0IHN1YiA9IChbYXgsIGF5XTogbnVtYmVyW10sIFtieCwgYnldOiBudW1iZXJbXSkgPT4gW2F4IC0gYngsIGF5IC0gYnldO1xuY29uc3Qgc2NhbGUgPSAoczogbnVtYmVyLCBbeCwgeV06IG51bWJlcltdKSA9PiBbcyAqIHgsIHMgKiB5XTtcbmNvbnN0IHNtb290aCA9IChpOiBudW1iZXIsIGFsbDogbnVtYmVyW11bXSwgc21vb3RoOiBudW1iZXIpID0+IHtcblx0Y29uc3Qgc3RhcnQgPSBhbGxbaSAtIDFdO1xuXHRjb25zdCBlbmQgPSBhbGxbaV07XG5cdGNvbnN0IFtjc1gsIGNzWV0gPSBhZGQoc3RhcnQsIHNjYWxlKHNtb290aCwgc3ViKGVuZCwgYWxsW2kgLSAyXSB8fCBzdGFydCkpKTsgLy8gc3RhcnQgY29udHJvbCBwb2ludFxuXHRjb25zdCBbY2VYLCBjZVldID0gYWRkKGVuZCwgc2NhbGUoc21vb3RoLCBzdWIoc3RhcnQsIGFsbFtpICsgMV0gfHwgZW5kKSkpOyAvLyBlbmQgY29udHJvbCBwb2ludFxuXHRyZXR1cm4gYEMgJHtjc1h9LCR7Y3NZfSAke2NlWH0sJHtjZVl9ICR7ZW5kWzBdfSwke2VuZFsxXX1gO1xufTtcbiIsImltcG9ydCB7IGF0dHIgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnREYXRhIH0gZnJvbSBcIi4vY2hhcnQtZWxlbWVudFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gdG9QaWVzKGRhdGE6IENoYXJ0RGF0YSwgeyB2YXJpYW50IH06IHsgdmFyaWFudDogc3RyaW5nIH0pIHtcblx0Y29uc3QgcGllID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJzdmdcIik7XG5cdGF0dHIocGllLCBcImNsYXNzXCIsIFwicGllXCIpO1xuXHRhdHRyKHBpZSwgXCJ2aWV3Qm94XCIsIFwiMCAwIDEwMCAxMDBcIik7XG5cblx0bGV0IG9mZnNldCA9IDA7XG5cdGNvbnN0IHJhZGl1cyA9IDUwO1xuXHRjb25zdCBpbm5lciA9IHZhcmlhbnQgPT09IFwiZG91Z2hudXRcIiA/IDI1IDogMDtcblx0Y29uc3QgdG90YWwgPSBkYXRhLnNsaWNlKDEpLnJlZHVjZSgodG90LCBbLCB0ZF0pID0+IHRvdCArIHRkLm51bWJlciwgMCk7XG5cblx0ZGF0YS5zbGljZSgxKS5mb3JFYWNoKChbLCB7IHRvb2x0aXAsIG51bWJlciwgZXZlbnQsIHN0eWxlIH1dKSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwicGF0aFwiKTtcblx0XHRjb25zdCBzdGFydCA9IG9mZnNldCAvIHRvdGFsO1xuXHRcdG9mZnNldCArPSBudW1iZXI7XG5cdFx0Y29uc3QgZW5kID0gb2Zmc2V0IC8gdG90YWw7XG5cdFx0Y29uc3QgbGFyZ2VBcmMgPSBlbmQgLSBzdGFydCA+IDAuNSA/IDEgOiAwO1xuXHRcdGNvbnN0IGEwID0gMiAqIE1hdGguUEkgKiAoc3RhcnQgLSAwLjI1KTtcblx0XHRjb25zdCBhMSA9IDIgKiBNYXRoLlBJICogKGVuZCAtIDAuMjUpO1xuXHRcdGNvbnN0IHgwID0gTWF0aC5jb3MoYTApO1xuXHRcdGNvbnN0IHkwID0gTWF0aC5zaW4oYTApO1xuXHRcdGNvbnN0IHgxID0gTWF0aC5jb3MoYTEpO1xuXHRcdGNvbnN0IHkxID0gTWF0aC5zaW4oYTEpO1xuXHRcdGNvbnN0IGQgPSBgTSAke3JhZGl1cyArIGlubmVyICogeDB9ICR7cmFkaXVzICsgaW5uZXIgKiB5MH0gTCAke3JhZGl1cyArIHJhZGl1cyAqIHgwfSAke3JhZGl1cyArIHJhZGl1cyAqIHkwfSBBICR7cmFkaXVzfSAke3JhZGl1c30gMCAke2xhcmdlQXJjfSAxICR7cmFkaXVzICsgcmFkaXVzICogeDF9ICR7cmFkaXVzICsgcmFkaXVzICogeTF9IEwgJHtyYWRpdXMgKyBpbm5lciAqIHgxfSAke3JhZGl1cyArIGlubmVyICogeTF9IEEgJHtpbm5lcn0gJHtpbm5lcn0gMCAke2xhcmdlQXJjfSAwICR7cmFkaXVzICsgaW5uZXIgKiB4MH0gJHtyYWRpdXMgKyBpbm5lciAqIHkwfWA7XG5cblx0XHRhdHRyKHBhdGgsIFwiYXJpYS1sYWJlbFwiLCB0b29sdGlwKTtcblx0XHRhdHRyKHBhdGgsIFwiZGF0YS1ldmVudFwiLCBldmVudCk7XG5cdFx0YXR0cihwYXRoLCBcInN0eWxlXCIsIHN0eWxlKTtcblx0XHRhdHRyKHBhdGgsIFwiZFwiLCBkKTtcblx0XHRhdHRyKHBhdGgsIFwicm9sZVwiLCBcImltZ1wiKTtcblx0XHRhdHRyKHBhdGgsIFwidGFiaW5kZXhcIiwgXCIwXCIpO1xuXHRcdHBpZS5hcHBlbmRDaGlsZChwYXRoKTtcblx0fSk7XG5cdHJldHVybiBwaWU7XG59XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgSVNfQlJPV1NFUiwgTVREU0VsZW1lbnQsIG9mZiwgb24sIHRhZyB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IGNzcyBmcm9tIFwiLi9jaGFydC5jc3M/cmF3XCI7XG5pbXBvcnQgeyB0b0F4aXMgfSBmcm9tIFwiLi9jaGFydC1heGlzXCI7XG5pbXBvcnQgeyB0b0JhcnMgfSBmcm9tIFwiLi9jaGFydC1iYXJzXCI7XG5pbXBvcnQgeyB0b0xpbmVzIH0gZnJvbSBcIi4vY2hhcnQtbGluZXNcIjtcbmltcG9ydCB7IHRvUGllcyB9IGZyb20gXCIuL2NoYXJ0LXBpZXNcIjtcblxuZXhwb3J0IHR5cGUgQ2hhcnREYXRhID0gUmV0dXJuVHlwZTx0eXBlb2YgdG9EYXRhPjtcblxuY29uc3QgRVZFTlRTID0gXCJjbGljayxrZXlkb3duLG1vdXNlbW92ZSxtb3VzZW91dFwiO1xuY29uc3QgVE9PTFRJUF9JRCA9IFwibXRkcy1jaGFydC10b29sdGlwXCI7XG5jb25zdCBUT09MVElQID0gSVNfQlJPV1NFUlxuXHQ/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFRPT0xUSVBfSUQpIHx8XG5cdFx0dGFnKFwiZGl2XCIsIHsgY2xhc3M6IHN0eWxlcy5fdG9vbHRpcCwgaWQ6IFRPT0xUSVBfSUQsIGhpZGRlbjogXCJcIiB9KVxuXHQ6IG51bGw7XG5leHBvcnQgY2xhc3MgTVREU0NoYXJ0IGV4dGVuZHMgTVREU0VsZW1lbnQge1xuXHRfb2JzZXJ2ZXI/OiBNdXRhdGlvbk9ic2VydmVyOyAvLyBVc2luZyB1bmRlcnNjb3JlIGluc3RlYWQgb2YgIyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblxuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRyZXR1cm4gW1wiZGF0YS12YXJpYW50XCJdOyAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXHR9XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcblx0fVxuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHR0aGlzLl9vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuXHRcdFx0dGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2suYmluZCh0aGlzKSxcblx0XHQpO1xuXHRcdHRoaXMuX29ic2VydmVyLm9ic2VydmUodGhpcywge1xuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbXCJkYXRhLXRvb2x0aXBcIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hhcmFjdGVyRGF0YTogdHJ1ZSxcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0fSk7XG5cdFx0dGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTsgLy8gSW5pdGlhbCBzZXR1cFxuXHRcdG9uKHRoaXMsIEVWRU5UUywgdGhpcyk7XG5cdH1cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0aWYgKFRPT0xUSVApIFRPT0xUSVAuaGlkZGVuID0gdHJ1ZTtcblx0XHRvZmYodGhpcywgRVZFTlRTLCB0aGlzKTtcblx0XHR0aGlzLl9vYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuXHRcdHRoaXMuX29ic2VydmVyID0gdW5kZWZpbmVkO1xuXHR9XG5cdGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcblx0XHRBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdD8uY2hpbGRyZW4gfHwgW10pLm1hcCgoZWwpID0+IGVsLnJlbW92ZSgpKTsgLy8gQ2xlYXIgc2hhZG93Um9vdFxuXG5cdFx0Y29uc3QgZGF0YSA9IHRvRGF0YSh0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJ0YWJsZVwiKSk7XG5cdFx0Y29uc3QgW3ZhcmlhbnQsIHR5cGVdID0gKGF0dHIodGhpcywgXCJkYXRhLXZhcmlhbnRcIikgfHwgXCJiYXJcIikuc3BsaXQoXCItXCIpO1xuXHRcdGNvbnN0IHN0eWxlID0gdGFnKFwic3R5bGVcIiwge30sIGNzcyk7XG5cdFx0Y29uc3QgbGVnZW5kID0gdGFnKFwiZGl2XCIsIHsgY2xhc3M6IFwibGVnZW5kc1wiIH0pO1xuXHRcdGRhdGEuc2xpY2UoMSkuZm9yRWFjaCgoW3sgdmFsdWUsIHN0eWxlIH1dKSA9PiB7XG5cdFx0XHRsZWdlbmQuYXBwZW5kQ2hpbGQodGFnKFwiZGl2XCIsIHsgY2xhc3M6IFwibGVnZW5kXCIsIHN0eWxlIH0sIHZhbHVlKSk7XG5cdFx0fSk7XG5cblx0XHRjb25zdCB7IGF4aXMsIGdyb3VwcywgdG90YWwgfSA9IHRvQXhpcyhkYXRhLCB7IHR5cGUgfSk7XG5cdFx0aWYgKHZhcmlhbnQgPT09IFwiYmFyXCIgfHwgdmFyaWFudCA9PT0gXCJjb2x1bW5cIilcblx0XHRcdGdyb3Vwcy5hcHBlbmQoLi4udG9CYXJzKGRhdGEpKTtcblx0XHRpZiAodmFyaWFudCA9PT0gXCJsaW5lXCIgfHwgdmFyaWFudCA9PT0gXCJhcmVhXCIpXG5cdFx0XHRncm91cHMuYXBwZW5kKHRvTGluZXMoZGF0YSwgeyB0b3RhbCwgdmFyaWFudCwgdHlwZSB9KSk7XG5cdFx0aWYgKHZhcmlhbnQgPT09IFwiZG91Z2hudXRcIiB8fCB2YXJpYW50ID09PSBcInBpZVwiKVxuXHRcdFx0dGhpcy5zaGFkb3dSb290Py5hcHBlbmQodG9QaWVzKGRhdGEsIHsgdmFyaWFudCB9KSk7XG5cblx0XHR0aGlzLnNoYWRvd1Jvb3Q/LmFwcGVuZChzdHlsZSwgYXhpcywgbGVnZW5kKTtcblx0fVxuXHRoYW5kbGVFdmVudChlOiBFdmVudCkge1xuXHRcdGlmIChlLnR5cGUgPT09IFwiY2xpY2tcIiB8fCBlLnR5cGUgPT09IFwia2V5ZG93blwiKSBvbkNsaWNrKGUsIHRoaXMpO1xuXHRcdGVsc2Ugb25Nb3ZlVG9vbHRpcChlIGFzIE1vdXNlRXZlbnQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQ6IEV2ZW50LCBzZWxmOiBNVERTQ2hhcnQpIHtcblx0aWYgKGV2ZW50IGluc3RhbmNlb2YgS2V5Ym9hcmRFdmVudCAmJiBldmVudC5rZXkgIT09IFwiRW50ZXJcIikgcmV0dXJuOyAvLyBPbmx5IGhhbmRsZSBlbnRlciBrZXlcblx0Y29uc3QgZWwgPSBldmVudC5jb21wb3NlZFBhdGgoKVswXTtcblx0Y29uc3QgdGFibGUgPSBzZWxmLnF1ZXJ5U2VsZWN0b3IoXCJ0YWJsZVwiKTtcblx0Y29uc3QgW3RyLCB0ZF0gPVxuXHRcdChlbCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgYXR0cihlbCwgXCJkYXRhLWV2ZW50XCIpPy5zcGxpdChcIi1cIikubWFwKE51bWJlcikpIHx8XG5cdFx0W107XG5cblx0dGFibGU/LnJvd3NbdHJdPy5jZWxsc1t0ZF0/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFwiYSxidXR0b25cIik/LmNsaWNrPy4oKTtcbn1cblxubGV0IFRPT0xUSVBfVEVYVCA9IFwiXCI7XG5mdW5jdGlvbiBvbk1vdmVUb29sdGlwKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG5cdGlmICghVE9PTFRJUCkgcmV0dXJuO1xuXHRpZiAoIVRPT0xUSVA/LmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChUT09MVElQKTsgLy8gRW5zdXJlIGNvbm5lY3RlZFxuXG5cdGNvbnN0IGVsID0gZXZlbnQuY29tcG9zZWRQYXRoKClbMF07XG5cdGNvbnN0IHRpcCA9IChlbCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgZWwuZ2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKSkgfHwgXCJcIjtcblxuXHRpZiAodGlwKVxuXHRcdFRPT0xUSVAuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke2V2ZW50LnBhZ2VYfXB4LCAke2V2ZW50LnBhZ2VZfXB4KWA7XG5cdGlmICh0aXAgIT09IFRPT0xUSVBfVEVYVCkge1xuXHRcdGlmICh0aXApIFRPT0xUSVAudGV4dENvbnRlbnQgPSB0aXA7XG5cdFx0VE9PTFRJUF9URVhUID0gdGlwO1xuXHRcdFRPT0xUSVAuaGlkZGVuID0gIXRpcDtcblx0fVxufVxuXG5jb25zdCB0ZXh0ID0gKGVsPzogRWxlbWVudCB8IG51bGwpID0+IGVsPy50ZXh0Q29udGVudD8udHJpbSgpIHx8IFwiXCI7IC8vIEhlbHBlciB0byBnZXQgdHJpbW1lZCB0ZXh0XG5jb25zdCB0b0RhdGEgPSAodGFibGU/OiBIVE1MVGFibGVFbGVtZW50IHwgbnVsbCkgPT5cblx0QXJyYXkuZnJvbSh0YWJsZT8ucm93cyB8fCBbXSwgKHJvdywgcm93SW5kZXgpID0+XG5cdFx0QXJyYXkuZnJvbShyb3cuY2VsbHMsIChjZWxsLCBjZWxsSW5kZXgpID0+ICh7XG5cdFx0XHRudW1iZXI6IChjZWxsSW5kZXggJiYgcm93SW5kZXggJiYgTnVtYmVyLnBhcnNlRmxvYXQodGV4dChjZWxsKSkpIHx8IDAsIC8vIEZpcnN0IHJvdyBhbmQgY29sdW1uIGlzIG5vdCBhIG51bWJlclxuXHRcdFx0ZXZlbnQ6IGNlbGwucXVlcnlTZWxlY3RvcihcImEsYnV0dG9uXCIpICYmIGAke3Jvd0luZGV4fS0ke2NlbGxJbmRleH1gLCAvLyBSZWZlcmVuY2UgdG8gcHJveHkgZXZlbnRzXG5cdFx0XHRzdHlsZTogYC0tY29sb3I6IHZhcigtLW10ZHNjLWNoYXJ0LWNvbG9yLSR7cm93SW5kZXh9LCB2YXIoLS1tdGRzYy1jaGFydC1jb2xvci1iYXNlKSlgLFxuXHRcdFx0dmFsdWU6IHRleHQoY2VsbCksXG5cdFx0XHR0b29sdGlwOlxuXHRcdFx0XHRhdHRyKGNlbGwsIFwiZGF0YS10b29sdGlwXCIpIHx8XG5cdFx0XHRcdGAke3RleHQocm93LmNlbGxzWzBdKX06ICR7dGV4dChjZWxsKX0gKCR7dGV4dCh0YWJsZT8ucm93c1swXS5jZWxsc1tjZWxsSW5kZXhdKX0pYCxcblx0XHR9KSksXG5cdCk7XG5cbmlmIChJU19CUk9XU0VSICYmICF3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KFwibXRkcy1jaGFydFwiKSlcblx0d2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShcIm10ZHMtY2hhcnRcIiwgTVREU0NoYXJ0KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRhdHRyLFxuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyLFxuXHRJU19CUk9XU0VSLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdFFVSUNLX0VWRU5ULFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0RJQUxPRyA9IHN0eWxlcy5kaWFsb2cuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgRElBTE9HUyA9IElTX0JST1dTRVJcblx0PyAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcblx0XHRcdENTU19ESUFMT0csXG5cdFx0KSBhcyBIVE1MQ29sbGVjdGlvbk9mPEhUTUxEaWFsb2dFbGVtZW50Pilcblx0OiBbXTtcblxuY29uc3QgaGFuZGxlTW9kYWwgPSAoKSA9PiB7XG5cdGZvciAoY29uc3QgZGlhbG9nIG9mIERJQUxPR1MpXG5cdFx0aWYgKGRpYWxvZy5pc0Nvbm5lY3RlZCAmJiBkaWFsb2cuc2hvd01vZGFsICYmIGRpYWxvZy5jbG9zZSkge1xuXHRcdFx0aWYgKGRpYWxvZy5tYXRjaGVzKCdbb3Blbl06bm90KFtkYXRhLW1vZGFsPVwiZmFsc2VcIl0pOm5vdCg6bW9kYWwpJykpIHtcblx0XHRcdFx0YXR0cihkaWFsb2csIFwib3BlblwiLCBudWxsKTsgLy8gVXNpbmcgYXR0cmlidXRlIGluc3RlYWQgb2YgLmNsb3NlIHRvIGF2b2lkIGBjbG9zZWAgZXZlbnRcblx0XHRcdFx0ZGlhbG9nLnNob3dNb2RhbCgpO1xuXHRcdFx0fSBlbHNlIGlmIChkaWFsb2cubWF0Y2hlcyhcIjptb2RhbDpub3QoW29wZW5dKVwiKSkge1xuXHRcdFx0XHRhdHRyKGRpYWxvZywgXCJvcGVuXCIsIFwiXCIpOyAvLyBTZXQgYXMgb3BlblxuXHRcdFx0XHRkaWFsb2cuY2xvc2UoKTsgLy8gU28gd2UgY29ycmVjbHR5IGNhbiBjYWxsIC5jbG9zZSwgcmVtb3ZpbmcgPGRpYWxvZz4gZnJvbSAjdG9wLWxheWVyXG5cdFx0XHR9XG5cdFx0fVxufTtcblxuY29uc3QgaGFuZGxlRGlhbG9nQ2xpY2sgPSAoe1xuXHRjbGllbnRYOiB4LFxuXHRjbGllbnRZOiB5LFxuXHR0YXJnZXQ6IGVsLFxufTogTW91c2VFdmVudCkgPT4ge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRGlhbG9nRWxlbWVudCAmJiBhdHRyKGVsLCBcImRhdGEtY2xvc2VkYnlcIikgPT09IFwiYW55XCIpIHtcblx0XHRjb25zdCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0Y29uc3QgaXNJbnNpZGUgPSB0b3AgPD0geSAmJiB5IDw9IGJvdHRvbSAmJiBsZWZ0IDw9IHggJiYgeCA8PSByaWdodDtcblx0XHRpZiAoIWlzSW5zaWRlKSByZXR1cm4gZWwuY2xvc2UoKTtcblx0fVxuXHRjb25zdCBkaWFsb2cgPSAoZWwgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImRpYWxvZ1wiKTtcblx0Y29uc3QgY2xvc2UgPSBkaWFsb2cgJiYgKGVsIGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oJ1tkYXRhLWNvbW1hbmQ9XCJjbG9zZVwiXScpO1xuXHRpZiAoY2xvc2UpIGRpYWxvZy5jbG9zZSgpO1xufTtcblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVEaWFsb2dDbGljayBhcyBFdmVudExpc3RlbmVyLCBRVUlDS19FVkVOVCk7XG5cdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoaGFuZGxlTW9kYWwpLm9ic2VydmUoXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRcdHtcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wib3BlblwiXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdH0sXG5cdCk7XG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9zdW1tYXJ5SW5qZWN0KGV2ZW50OiBFdmVudCAmIHsgYW5pbWF0aW9uTmFtZT86IHN0cmluZyB9KSB7XG5cdGlmIChldmVudC5hbmltYXRpb25OYW1lICE9PSBzdHlsZXMuX2Vycm9yc3VtbWFyeSkgcmV0dXJuO1xuXHRjb25zdCBmaXJzdCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmZpcnN0RWxlbWVudENoaWxkO1xuXG5cdGlmIChmaXJzdCBpbnN0YW5jZW9mIEhUTUxIZWFkaW5nRWxlbWVudCkge1xuXHRcdGF0dHIoZmlyc3QsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcblx0XHRmaXJzdC5mb2N1cygpOyAvLyBBdXRvZm9jdXMgZmlyc3QgaGVhZGluZ1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uKGRvY3VtZW50LCBcImFuaW1hdGlvbmVuZFwiLCBoYW5kbGVFcnJvc3VtbWFyeUluamVjdCwgUVVJQ0tfRVZFTlQpLFxuKTtcbiIsInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcblxuLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBTQUZFX0xBQkVMTEVEQlkgPSBgJHtJU19BTkRST0lEID8gXCJkYXRhXCIgOiBcImFyaWFcIn0tbGFiZWxsZWRieWA7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIEZPQ1VTX09VVExJTkUgPSBcIm91dGxpbmU6IDFweCBkb3R0ZWQ7IG91dGxpbmU6IDVweCBhdXRvIEhpZ2hsaWdodDsgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXR0YWNoU3R5bGUgPSAoZWxlbWVudCwgY3NzKSA9PiBlbGVtZW50LnNoYWRvd1Jvb3QgfHwgZWxlbWVudC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAvLyBVbm5hbWVkIHNsb3QgZG9lcyBhdXRvbWF0aWNhbGx5IHJlbmRlciBhbGwgdG9wIGVsZW1lbnQgbm9kZXNcbiAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIGNzcylcbik7XG52YXIgb2JzZXJ2ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgbXV0YXRpb25PYnNlcnZlciA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHJldHVybiBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICB0cnkge1xuICAgIG9ic2VydmVycy5nZXQoZWxlbWVudCkuZGlzY29ubmVjdCgpO1xuICAgIG9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gIH0gY2F0Y2ggKF9lcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIExJVkU7XG52YXIgTElWRV9TUl9GSVggPSAwO1xudmFyIHNwZWFrID0gKHRleHQpID0+IHtcbiAgaWYgKCFMSVZFKSB7XG4gICAgTElWRSA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgTElWRS5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjpmaXhlZDtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcFwiO1xuICAgIGF0dHIoTElWRSwgXCJhcmlhLWxpdmVcIiwgXCJhc3NlcnRpdmVcIik7XG4gIH1cbiAgaWYgKCFMSVZFLmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChMSVZFKTtcbiAgaWYgKHRleHQpIExJVkUudGV4dENvbnRlbnQgPSBgJHt0ZXh0fSR7TElWRV9TUl9GSVgrKyAlIDIgPyBcIlxceEEwXCIgOiBcIlwifWA7XG59O1xudmFyIHNldFZhbHVlID0gKGlucHV0LCBkYXRhLCB0eXBlID0gXCJcIikgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlLCBkYXRhLCBpbnB1dFR5cGU6IHR5cGUgfTtcbiAgY29uc3QgcHJvdG8gPSBIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImJlZm9yZWlucHV0XCIsIGV2ZW50KSk7XG4gIChfYiA9IChfYTIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBcInZhbHVlXCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoaW5wdXQsIGRhdGEpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiaW5wdXRcIiwgZXZlbnQpKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbn07XG52YXIgSVNfUFJFU1MgPSBmYWxzZTtcbnZhciBpc01vdXNlRG93biA9IChldmVudCkgPT4ge1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZXVwXCIpIElTX1BSRVNTID0gZmFsc2U7XG4gIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm1vdXNlZG93blwiKSB7XG4gICAgSVNfUFJFU1MgPSB0cnVlO1xuICAgIG9uKGRvY3VtZW50LCBcIm1vdXNldXBcIiwgaXNNb3VzZURvd24sIHsgb25jZTogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gSVNfUFJFU1M7XG59O1xudmFyIGRlY2xhcmF0aXZlU2hhZG93Um9vdCA9IChzdHlsZSwgc2xvdCA9IFwiPHNsb3Q+PC9zbG90PlwiKSA9PiBgPHRlbXBsYXRlIHNoYWRvd3Jvb3Rtb2RlPVwib3BlblwiPiR7c2xvdH08c3R5bGU+JHtzdHlsZX08L3N0eWxlPjwvdGVtcGxhdGU+YDtcblxuLy8gdS1vcHRpb24udHNcbnZhciBESVNBQkxFRCA9IFwiZGlzYWJsZWRcIjtcbnZhciBTRUxFQ1RFRCA9IFwic2VsZWN0ZWRcIjtcbnZhciBVSFRNTE9wdGlvbkVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbRElTQUJMRUQsIFNFTEVDVEVEXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoIUlTX0lPUykgdGhpcy50YWJJbmRleCA9IC0xO1xuICAgIGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoXCJyb2xlXCIpKSBhdHRyKHRoaXMsIFwicm9sZVwiLCBcIm9wdGlvblwiKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1kaXNhYmxlZFwiLCBgJHt0aGlzLmRpc2FibGVkfWApO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXNlbGVjdGVkXCIsIGAke3RoaXMuc2VsZWN0ZWR9YCk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHdoZXRoZXIgdGhlIG9wdGlvbiBpbiB0aGUgbGlzdCBib3ggaXMgdGhlIGRlZmF1bHQgaXRlbS4gKi9cbiAgZ2V0IGRlZmF1bHRTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpc1tTRUxFQ1RFRF07XG4gIH1cbiAgc2V0IGRlZmF1bHRTZWxlY3RlZCh2YWx1ZSkge1xuICAgIHRoaXNbU0VMRUNURURdID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGRpc2FibGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIERJU0FCTEVEKSAhPT0gbnVsbDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIERJU0FCTEVELCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICAvKiogUmV0cmlldmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBmb3JtIHRoYXQgdGhlIG9iamVjdCBpcyBlbWJlZGRlZCBpbi4gKi9cbiAgZ2V0IGZvcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcImZvcm1cIik7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSBvcmRpbmFsIHBvc2l0aW9uIG9mIGFuIG9wdGlvbiBpbiBhIGxpc3QgYm94LiAqL1xuICBnZXQgaW5kZXgoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uKChfYTIgPSB0aGlzLnBhcmVudEVsZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIub3B0aW9ucykgfHwgW3RoaXNdXG4gICAgXS5pbmRleE9mKHRoaXMpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyBhIHZhbHVlIHRoYXQgeW91IGNhbiB1c2UgdG8gaW1wbGVtZW50IHlvdXIgb3duIGxhYmVsIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBvYmplY3QuICovXG4gIGdldCBsYWJlbCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoX2EyID0gYXR0cih0aGlzLCBcImxhYmVsXCIpKSAhPSBudWxsID8gX2EyIDogdGhpcy50ZXh0O1xuICB9XG4gIHNldCBsYWJlbCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJsYWJlbFwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFNFTEVDVEVEKSAhPT0gbnVsbDtcbiAgfVxuICBzZXQgc2VsZWN0ZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFNFTEVDVEVELCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIHRleHQgc3RyaW5nIHNwZWNpZmllZCBieSB0aGUgb3B0aW9uIHRhZy4gKi9cbiAgZ2V0IHRleHQoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSB0aGlzLnRleHRDb250ZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKSkgfHwgXCJcIjtcbiAgfVxuICBzZXQgdGV4dCh0ZXh0KSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHRleHQ7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSB2YWx1ZSB3aGljaCBpcyByZXR1cm5lZCB0byB0aGUgc2VydmVyIHdoZW4gdGhlIGZvcm0gY29udHJvbCBpcyBzdWJtaXR0ZWQuICovXG4gIGdldCB2YWx1ZSgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoX2EyID0gYXR0cih0aGlzLCBcInZhbHVlXCIpKSAhPSBudWxsID8gX2EyIDogdGhpcy50ZXh0O1xuICB9XG4gIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gIH1cbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LW9wdGlvblwiLCBVSFRNTE9wdGlvbkVsZW1lbnQpO1xuXG4vLyB1LWRhdGFsaXN0LnRzXG52YXIgVUhUTUxEYXRhTGlzdFN0eWxlID0gYCR7RElTUExBWV9CTE9DS31cbjo6c2xvdHRlZCh1LW9wdGlvbikgeyBkaXNwbGF5OiBibG9jazsgY3Vyc29yOiBwb2ludGVyIH1cbjo6c2xvdHRlZCh1LW9wdGlvbjpmb2N1cykgeyAke0ZPQ1VTX09VVExJTkV9IH1cbjo6c2xvdHRlZCh1LW9wdGlvblthcmlhLWhpZGRlbj1cInRydWVcIl0pLFxuOjpzbG90dGVkKHUtb3B0aW9uW2Rpc2FibGVkXSksXG46OnNsb3R0ZWQodS1vcHRpb25baGlkZGVuXSkgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQgfWA7XG52YXIgVUhUTUxEYXRhTGlzdFNoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoVUhUTUxEYXRhTGlzdFN0eWxlKTtcbnZhciBMSVZFX1RJTUVSO1xudmFyIElOUFVUX0RFQk9VTkNFID0gMDtcbnZhciBJU19NT0JJTEUgPSBJU19JT1MgfHwgSVNfQU5EUk9JRDtcbnZhciBFVkVOVFMgPSBcImNsaWNrLGZvY3Vzb3V0LGlucHV0LGtleWRvd24sbW91c2Vkb3duLG1vdXNldXBcIjtcbnZhciBFVkVOVFNfSU5QVVQgPSBcImZvY3VzLGZvY3VzaW4sYmx1cixmb2N1c291dFwiO1xudmFyIFRFWFRTID0ge1xuICBzaW5ndWxhcjogXCIlZCBoaXRcIixcbiAgcGx1cmFsOiBcIiVkIGhpdHNcIlxufTtcbnZhciBVSFRNTERhdGFMaXN0RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl90ZXh0cyA9IF9fc3ByZWFkVmFsdWVzKHt9LCBURVhUUyk7XG4gICAgdGhpcy5fdmFsdWUgPSBcIlwiO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIFVIVE1MRGF0YUxpc3RTdHlsZSk7XG4gIH1cbiAgLy8gVXNlZCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IGFubm91bmNlbWVudHNcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIC4uLk9iamVjdC5rZXlzKFRFWFRTKS5tYXAoKGtleSkgPT4gYGRhdGEtc3ItJHtrZXl9YCldO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuaGlkZGVuID0gdHJ1ZTtcbiAgICB0aGlzLl9yb290ID0gZ2V0Um9vdCh0aGlzKTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcImxpc3Rib3hcIik7XG4gICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG4gICAgb24odGhpcy5fcm9vdCwgXCJmb2N1c2luXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNcIiwgdGhpcywgdHJ1ZSk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7XG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFtcImRpc2FibGVkXCIsIFwiaGlkZGVuXCIsIFwibGFiZWxcIiwgXCJ2YWx1ZVwiXSxcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgb2ZmKHRoaXMuX3Jvb3QgfHwgdGhpcywgXCJmb2N1c1wiLCB0aGlzLCB0cnVlKTtcbiAgICBvZmYodGhpcy5fcm9vdCB8fCB0aGlzLCBcImZvY3VzaW5cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gICAgZGlzY29ubmVjdElucHV0KHRoaXMpO1xuICAgIHRoaXMuX3Jvb3QgPSB2b2lkIDA7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIF9wcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgdGV4dCA9IHByb3AgPT0gbnVsbCA/IHZvaWQgMCA6IHByb3Auc3BsaXQoXCJkYXRhLXNyLVwiKVsxXTtcbiAgICBjb25zdCBjc3MgPSBgaW5wdXRbbGlzdD1cIiR7dGhpcy5pZH1cIl1gO1xuICAgIGlmIChURVhUU1t0ZXh0XSkgdGhpcy5fdGV4dHNbdGV4dF0gPSBuZXh0IHx8IFRFWFRTW3RleHRdO1xuICAgIGVsc2UgaWYgKHRoaXMuX3Jvb3QpIHtcbiAgICAgIGlmICh0aGlzLl9pbnB1dCkgc2V0dXBJbnB1dCh0aGlzLCB0aGlzLl9pbnB1dCk7XG4gICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHRoaXMuX3Jvb3QucXVlcnlTZWxlY3RvckFsbChjc3MpKVxuICAgICAgICBzZXR1cElucHV0KHRoaXMsIGlucHV0KTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCB7IHRhcmdldCwgdHlwZSB9ID0gZXZlbnQ7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICBpZiAodHlwZSA9PT0gXCJjbGlja1wiKSBvbkNsaWNrKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJmb2N1c1wiIHx8IHR5cGUgPT09IFwiZm9jdXNpblwiKSBvbkZvY3VzKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJibHVyXCIgfHwgdHlwZSA9PT0gXCJmb2N1c291dFwiKSBvbkJsdXIodGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgb25LZXlEb3duKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiB0aGlzLmNvbnRhaW5zKHRhcmdldCkpXG4gICAgICBpc01vdXNlRG93bihldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwibXV0YXRpb25cIiB8fCB0eXBlID09PSBcImlucHV0XCIpIHtcbiAgICAgIGNsZWFyVGltZW91dChJTlBVVF9ERUJPVU5DRSk7XG4gICAgICBJTlBVVF9ERUJPVU5DRSA9IHNldFRpbWVvdXQob25JbnB1dCwgMCwgdGhpcywgZXZlbnQpO1xuICAgIH1cbiAgfVxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcInUtb3B0aW9uXCIpO1xuICB9XG59O1xudmFyIGlzRGlzYWJsZWQgPSAoaW5wdXQpID0+IChpbnB1dCA9PSBudWxsID8gdm9pZCAwIDogaW5wdXQuZGlzYWJsZWQpIHx8IChpbnB1dCA9PSBudWxsID8gdm9pZCAwIDogaW5wdXQucmVhZE9ubHkpIHx8IGZhbHNlO1xudmFyIHNldEV4cGFuZGVkID0gKHNlbGYsIG9wZW4pID0+IHtcbiAgdmFyIF9hMiwgX2IsIF9jO1xuICBpZiAoc2VsZi5oaWRkZW4gIT09IG9wZW4pIHJldHVybjtcbiAgc2VsZi5oaWRkZW4gPSBpc0Rpc2FibGVkKHNlbGYgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGYuX2lucHV0KSB8fCAhb3BlbjtcbiAgKF9hMiA9IG11dGF0aW9uT2JzZXJ2ZXIoc2VsZikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudGFrZVJlY29yZHMoKTtcbiAgY29uc3QgaXNQb3BvdmVyID0gc2VsZi5pc0Nvbm5lY3RlZCAmJiBzZWxmLnBvcG92ZXIgJiYgKChfYiA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuaXNDb25uZWN0ZWQpICYmICgoX2MgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jLnBvcG92ZXJUYXJnZXRFbGVtZW50KSA9PT0gc2VsZjtcbiAgaWYgKHNlbGYuX2lucHV0KSBzZXR1cElucHV0KHNlbGYsIHNlbGYuX2lucHV0LCBvcGVuKTtcbiAgaWYgKGlzUG9wb3ZlcikgYXR0cihzZWxmLCBcInBvcG92ZXJcIiwgXCJtYW51YWxcIik7XG4gIGlmIChpc1BvcG92ZXIpIHNlbGYudG9nZ2xlUG9wb3ZlcihvcGVuKTtcbiAgaWYgKG9wZW4pIG9uSW5wdXQoc2VsZik7XG59O1xudmFyIGRpc2Nvbm5lY3RJbnB1dCA9IChzZWxmKSA9PiB7XG4gIGlmICghc2VsZi5faW5wdXQpIHJldHVybjtcbiAgb2ZmKHNlbGYuX2lucHV0IHx8IHNlbGYsIEVWRU5UU19JTlBVVCwgc2VsZik7XG4gIG9mZihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gIHNldEV4cGFuZGVkKHNlbGYsIGZhbHNlKTtcbiAgc2VsZi5faW5wdXQgPSB2b2lkIDA7XG59O1xudmFyIHNldHVwSW5wdXQgPSAoc2VsZiwgaW5wdXQsIG9wZW4gPSBmYWxzZSkgPT4ge1xuICBpZiAoc2VsZi5wb3BvdmVyKSBhdHRyKGlucHV0LCBcInBvcG92ZXJ0YXJnZXRcIiwgdXNlSWQoc2VsZikpO1xuICBvbihpbnB1dCwgRVZFTlRTX0lOUFVULCBzZWxmLCB0cnVlKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWF1dG9jb21wbGV0ZVwiLCBcImxpc3RcIik7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1jb250cm9sc1wiLCB1c2VJZChzZWxmKSk7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1leHBhbmRlZFwiLCBgJHshSVNfTU9CSUxFIHx8IG9wZW59YCk7XG4gIGF0dHIoaW5wdXQsIFwiYXV0b2NvbXBsZXRlXCIsIFwib2ZmXCIpO1xuICBhdHRyKGlucHV0LCBcInJvbGVcIiwgaXNEaXNhYmxlZChpbnB1dCkgPyBudWxsIDogXCJjb21ib2JveFwiKTtcbn07XG52YXIgb25Gb2N1cyA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCBpc0lucHV0ID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudDtcbiAgaWYgKGlzSW5wdXQgJiYgZXZlbnQuaXNUcnVzdGVkKSBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgaWYgKHNlbGYuX2lucHV0ICE9PSBldmVudC50YXJnZXQgJiYgaXNJbnB1dCAmJiBldmVudC50YXJnZXQubGlzdCA9PT0gc2VsZikge1xuICAgIGlmIChzZWxmLl9pbnB1dCkgZGlzY29ubmVjdElucHV0KHNlbGYpO1xuICAgIHNlbGYuX2lucHV0ID0gZXZlbnQudGFyZ2V0O1xuICAgIHNlbGYuX2lucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJmb2N1c1wiKSk7XG4gICAgc2VsZi5faW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImZvY3VzaW5cIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICBhdHRyKHNlbGYsIFNBRkVfTEFCRUxMRURCWSwgdXNlSWQoKF9hMiA9IHNlbGYuX2lucHV0LmxhYmVscykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMlswXSkpO1xuICAgIG9uKHNlbGYuX3Jvb3QgfHwgc2VsZiwgRVZFTlRTLCBzZWxmKTtcbiAgICBzZXRFeHBhbmRlZChzZWxmLCBhdHRyKHNlbGYuX2lucHV0LCBcImlucHV0bW9kZVwiKSAhPT0gXCJub25lXCIpO1xuICAgIHNwZWFrKCk7XG4gIH1cbn07XG52YXIgb25CbHVyID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIGlmICghSVNfQU5EUk9JRCAmJiAhaXNNb3VzZURvd24oKSAmJiBzZWxmLl9pbnB1dClcbiAgICBzZXRUaW1lb3V0KG9uQmx1cnJlZCwgMCwgc2VsZik7XG4gIGlmIChldmVudC50YXJnZXQgPT09IHNlbGYuX2lucHV0ICYmIGV2ZW50LmlzVHJ1c3RlZClcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn07XG52YXIgb25CbHVycmVkID0gKHNlbGYpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgcmVsYXRlZFRhcmdldCA9ICgoX2EyID0gc2VsZi5fcm9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5hY3RpdmVFbGVtZW50KSB8fCBudWxsO1xuICBjb25zdCBpbnB1dCA9IHNlbGYuX2lucHV0O1xuICBpZiAoaW5wdXQgJiYgaW5wdXQgIT09IHJlbGF0ZWRUYXJnZXQgJiYgIXNlbGYuY29udGFpbnMocmVsYXRlZFRhcmdldCkpIHtcbiAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiYmx1clwiLCB7IHJlbGF0ZWRUYXJnZXQgfSkpO1xuICAgIGlucHV0LmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgRm9jdXNFdmVudChcImZvY3Vzb3V0XCIsIHsgYnViYmxlczogdHJ1ZSwgcmVsYXRlZFRhcmdldCB9KVxuICAgICk7XG4gICAgZGlzY29ubmVjdElucHV0KHNlbGYpO1xuICB9XG59O1xudmFyIG9uQ2xpY2sgPSAoc2VsZiwgeyB0YXJnZXQgfSkgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoIXNlbGYuX2lucHV0IHx8IHNlbGYuX2lucHV0ID09PSB0YXJnZXQpIHJldHVybiBzZXRFeHBhbmRlZChzZWxmLCB0cnVlKTtcbiAgZm9yIChjb25zdCBvcHQgb2Ygc2VsZi5vcHRpb25zKVxuICAgIGlmIChvcHQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgaWYgKGF0dHIoc2VsZiwgXCJhcmlhLW11bHRpc2VsZWN0YWJsZVwiKSAhPT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgKF9hMiA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG4gICAgICAgIHNldEV4cGFuZGVkKHNlbGYsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXRWYWx1ZShzZWxmLl9pbnB1dCwgb3B0LnZhbHVlKTtcbiAgICB9XG4gIGlmIChJU19BTkRST0lEKSBvbkJsdXJyZWQoc2VsZik7XG59O1xudmFyIG9uS2V5RG93biA9IChzZWxmLCBlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsga2V5LCB0YXJnZXQsIGFsdEtleSwgY3RybEtleSwgc2hpZnRLZXksIG1ldGFLZXkgfSA9IGU7XG4gIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSBcIkVzY2FwZVwiIHx8IGtleSA9PT0gXCJFc2NcIjtcbiAgaWYgKGFsdEtleSB8fCBjdHJsS2V5IHx8IG1ldGFLZXkgfHwgc2hpZnRLZXkgfHwga2V5ID09PSBcIlRhYlwiKSByZXR1cm47XG4gIGlmIChpc0VzY2FwZSAmJiAhc2VsZi5oaWRkZW4pIGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgc2V0RXhwYW5kZWQoc2VsZiwgIWlzRXNjYXBlKTtcbiAgY29uc3Qgb3B0aW9ucyA9IFsuLi5zZWxmLm9wdGlvbnNdLmZpbHRlcihcbiAgICAoZWwpID0+IGF0dHIoZWwsIFwiYXJpYS1oaWRkZW5cIikgIT09IFwidHJ1ZVwiICYmIGVsLm9mZnNldEhlaWdodFxuICApO1xuICBjb25zdCBwcmV2ID0gb3B0aW9ucy5pbmRleE9mKHRhcmdldCk7XG4gIGxldCBuZXh0ID0gLTE7XG4gIGlmIChrZXkgPT09IFwiQXJyb3dEb3duXCIpIG5leHQgPSAocHJldiArIDEpICUgb3B0aW9ucy5sZW5ndGg7XG4gIGlmIChrZXkgPT09IFwiQXJyb3dVcFwiKSBuZXh0ID0gKH5wcmV2ID8gcHJldiA6IG9wdGlvbnMubGVuZ3RoKSAtIDE7XG4gIGlmICh+cHJldikge1xuICAgIGlmIChrZXkgPT09IFwiSG9tZVwiIHx8IGtleSA9PT0gXCJQYWdlVXBcIikgbmV4dCA9IDA7XG4gICAgaWYgKGtleSA9PT0gXCJFbmRcIiB8fCBrZXkgPT09IFwiUGFnZURvd25cIikgbmV4dCA9IG9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICBpZiAoa2V5ID09PSBcIkVudGVyXCIpIHtcbiAgICAgIG9wdGlvbnNbcHJldl0uY2xpY2soKTtcbiAgICAgIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG4gIGlmIChvcHRpb25zW25leHRdKSBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSBvcHRpb24udGFiSW5kZXggPSAtMTtcbiAgaWYgKG9wdGlvbnNbbmV4dF0pIGUucHJldmVudERlZmF1bHQoKTtcbiAgKF9hMiA9IG9wdGlvbnNbbmV4dF0gfHwgc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbiAgaWYgKCFvcHRpb25zW25leHRdICYmIGtleSA9PT0gXCJBcnJvd1VwXCIpXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB2YXIgX2EzO1xuICAgICAgcmV0dXJuIChfYTMgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy5zZXRTZWxlY3Rpb25SYW5nZSg5OTksIDk5OSk7XG4gICAgfSk7XG59O1xudmFyIG9uSW5wdXQgPSAoc2VsZiwgZSkgPT4ge1xuICBjb25zdCB7IF90ZXh0cywgX3Jvb3QsIF9pbnB1dCwgb3B0aW9ucyB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoX2lucHV0ID09IG51bGwgPyB2b2lkIDAgOiBfaW5wdXQudmFsdWUudG9Mb3dlckNhc2UoKS50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IGZpbHRlciA9ICFzZWxmLmhhc0F0dHJpYnV0ZShcImRhdGEtbm9maWx0ZXJcIik7XG4gIGNvbnN0IGhpZGRlbiA9IFtdO1xuICBjb25zdCB2aXNpYmxlID0gW107XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIHtcbiAgICBjb25zdCBoaWRlID0gb3B0LmRpc2FibGVkIHx8IG9wdC5oaWRkZW4gfHwgZmlsdGVyICYmICFvcHQubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh2YWx1ZSk7XG4gICAgKGhpZGUgPyBoaWRkZW4gOiB2aXNpYmxlKS5wdXNoKG9wdCk7XG4gIH1cbiAgZm9yIChjb25zdCBvcHQgb2YgaGlkZGVuKSBhdHRyKG9wdCwgXCJhcmlhLWhpZGRlblwiLCBcInRydWVcIik7XG4gIGZvciAoY29uc3Qgb3B0IG9mIHZpc2libGUpIGF0dHIob3B0LCBcImFyaWEtaGlkZGVuXCIsIFwiZmFsc2VcIik7XG4gIGNvbnN0IHRvdGFsID0gdmlzaWJsZS5sZW5ndGg7XG4gIGNsZWFyVGltZW91dChMSVZFX1RJTUVSKTtcbiAgaWYgKChlID09IG51bGwgPyB2b2lkIDAgOiBlLnR5cGUpID09PSBcImlucHV0XCIgJiYgdmFsdWUgIT09IHNlbGYuX3ZhbHVlKVxuICAgIExJVkVfVElNRVIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBgJHshdG90YWwgJiYgc2VsZi5pbm5lclRleHQudHJpbSgpIHx8IGAke190ZXh0c1t0b3RhbCA9PT0gMSA/IFwic2luZ3VsYXJcIiA6IFwicGx1cmFsXCJdfWAucmVwbGFjZShcIiVkXCIsIGAke3RvdGFsfWApfWA7XG4gICAgICBpZiAoIXNlbGYuaGlkZGVuICYmIChfcm9vdCA9PSBudWxsID8gdm9pZCAwIDogX3Jvb3QuYWN0aXZlRWxlbWVudCkgPT09IF9pbnB1dCkgc3BlYWsodGV4dCk7XG4gICAgICBzZWxmLl92YWx1ZSA9IHZhbHVlO1xuICAgIH0sIDFlMyk7XG4gIGlmIChJU19JT1MpXG4gICAgdmlzaWJsZS5tYXAoKG9wdCwgaWR4KSA9PiBhdHRyKG9wdCwgXCJ0aXRsZVwiLCBgJHtpZHggKyAxfS8ke3RvdGFsfWApKTtcbn07XG5pZiAoSVNfQlJPV1NFUilcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcImxpc3RcIiwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBnZXRSb290KHRoaXMpLmdldEVsZW1lbnRCeUlkKGF0dHIodGhpcywgXCJsaXN0XCIpIHx8IFwiXCIpO1xuICAgIH1cbiAgfSk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWRhdGFsaXN0XCIsIFVIVE1MRGF0YUxpc3RFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxEYXRhTGlzdEVsZW1lbnQsIFVIVE1MRGF0YUxpc3RTaGFkb3dSb290LCBVSFRNTERhdGFMaXN0U3R5bGUgfTtcbiIsImltcG9ydCB7IGZsaXAsIHR5cGUgUGxhY2VtZW50LCBzaGlmdCwgc2l6ZSB9IGZyb20gXCJAZmxvYXRpbmctdWkvZG9tXCI7XG5pbXBvcnQgeyBVSFRNTENvbWJvYm94RWxlbWVudCB9IGZyb20gXCJAdS1lbGVtZW50cy91LWNvbWJvYm94XCI7XG5pbXBvcnQgeyBVSFRNTERhdGFMaXN0RWxlbWVudCB9IGZyb20gXCJAdS1lbGVtZW50cy91LWRhdGFsaXN0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0YW5jaG9yUG9zaXRpb24sXG5cdGF0dHIsXG5cdGlzSW5wdXRMaWtlLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdG9uTXV0YXRpb24sXG5cdFFVSUNLX0VWRU5ULFxuXHR1c2VJZCxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19GSUVMRCA9IHN0eWxlcy5maWVsZC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVkFMSURBVElPTlMgPSBzdHlsZXMudmFsaWRhdGlvbi5zcGxpdChcIiBcIik7XG5jb25zdCBDU1NfVkFMSURBVElPTiA9IENTU19WQUxJREFUSU9OU1swXTtcblxuY29uc3QgZ2V0VGV4dCA9IChzdHlsZTogQ1NTU3R5bGVEZWNsYXJhdGlvbiwga2V5OiBzdHJpbmcpID0+XG5cdHN0eWxlLmdldFByb3BlcnR5VmFsdWUoYC0tbXRkcy10ZXh0LSR7a2V5fWApPy5zbGljZSgxLCAtMSkgfHwgXCJcIjsgLy8gc2xpY2UgdG8gdHJpbSBxdW90ZXNcblxuZnVuY3Rpb24gaGFuZGxlRmllbGRNdXRhdGlvbihcblx0ZmllbGRzOiBIVE1MQ29sbGVjdGlvbk9mPEVsZW1lbnQ+LFxuXHR2YWxpZGF0ZT86IGJvb2xlYW4sXG4pIHtcblx0Zm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpXG5cdFx0aWYgKGZpZWxkLmlzQ29ubmVjdGVkKSB7XG5cdFx0XHRjb25zdCBsYWJlbHM6IEhUTUxMYWJlbEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0Y29uc3QgZGVzY3M6IEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0Y29uc3QgdmFsaWRzOiBFbGVtZW50W10gPSBbXTtcblx0XHRcdGxldCBjb21ib2JveDogVUhUTUxDb21ib2JveEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblx0XHRcdGxldCBpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IHZhbGlkID0gdHJ1ZTtcblxuXHRcdFx0Zm9yIChjb25zdCBlbCBvZiBmaWVsZC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpIHtcblx0XHRcdFx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTExhYmVsRWxlbWVudCkgbGFiZWxzLnB1c2goZWwpO1xuXHRcdFx0XHRlbHNlIGlmIChlbCBpbnN0YW5jZW9mIFVIVE1MQ29tYm9ib3hFbGVtZW50KSBjb21ib2JveCA9IGVsO1xuXHRcdFx0XHRlbHNlIGlmIChpc0lucHV0TGlrZShlbCkgJiYgIWVsLmhpZGRlbikgaW5wdXQgPSBlbDtcblx0XHRcdFx0ZWxzZSBpZiAoZWwuaGFzQXR0cmlidXRlKFwiZGF0YS1kZXNjcmlwdGlvblwiKSkgZGVzY3MucHVzaChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhDU1NfVkFMSURBVElPTikpIHtcblx0XHRcdFx0XHR2YWxpZCA9IGF0dHIoZWwsIFwiZGF0YS1jb2xvclwiKSA9PT0gXCJzdWNjZXNzXCIgfHwgIWVsLmNsaWVudEhlaWdodDsgLy8gT25seSBzZXQgaW52YWxpZCBpZiBWYWxpZGF0aW9uIGlzIHZpc2libGVcblx0XHRcdFx0XHR2YWxpZHMucHVzaChlbCk7XG5cdFx0XHRcdFx0ZGVzY3MudW5zaGlmdChlbCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBIVE1MUGFyYWdyYXBoRWxlbWVudClcblx0XHRcdFx0XHRkZXNjcy5zb21lKChkZXNjKSA9PiBkZXNjLmNvbnRhaW5zKGVsKSkgfHwgZGVzY3MucHVzaChlbCk7IC8vIE9ubHkgYWRkIGlmIG5vdCBhbHJlYWR5IGluc2lkZSBkZXNjcmlwdGlvblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaW5wdXQpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBsYWJlbCBvZiBsYWJlbHMpIGxhYmVsLmh0bWxGb3IgPSB1c2VJZChpbnB1dCk7XG5cdFx0XHRcdGlmICh2YWxpZGF0ZSAmJiBhdHRyKGZpZWxkLCBcImRhdGEtdmFsaWRhdGlvblwiKSA9PT0gXCJmb3JtXCIpIHtcblx0XHRcdFx0XHR2YWxpZCA9IGlucHV0Lm1hdGNoZXMoXCI6dmFsaWRcIik7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiB2YWxpZHMpIGF0dHIoZWwsIFwiaGlkZGVuXCIsIHZhbGlkID8gXCJcIiA6IG51bGwpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlbmRlckNvbWJvYm94KGNvbWJvYm94KTtcblx0XHRcdFx0cmVuZGVyQ291bnRlcihpbnB1dCk7XG5cdFx0XHRcdHJlbmRlclRleHRhcmVhU2l6ZShpbnB1dCk7XG5cdFx0XHRcdGF0dHIoaW5wdXQsIFwiYXJpYS1kZXNjcmliZWRieVwiLCBkZXNjcy5tYXAodXNlSWQpLmpvaW4oXCIgXCIpIHx8IG51bGwpOyAvLyBSZW1vdmUgaWYgZW1wdHlcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWludmFsaWRcIiwgYCR7IXZhbGlkfWApO1xuXHRcdFx0fVxuXHRcdH1cbn1cblxuLy8gaU9TIGRvZXMgbm90IHN1cHBvcnQgZmllbGQtc2l6aW5nOiBjb250ZW50LCBzbyB3ZSBuZWVkIHRvIG1hbnVhbGx5IHJlc2l6ZVxuZnVuY3Rpb24gcmVuZGVyVGV4dGFyZWFTaXplKHRleHRhcmVhOiBFbGVtZW50KSB7XG5cdGlmICh0ZXh0YXJlYSBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcblx0XHR0ZXh0YXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tbXRkcy10ZXh0YXJlYS1oZWlnaHRcIiwgXCJhdXRvXCIpO1xuXHRcdHRleHRhcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuXHRcdFx0XCItLW10ZHMtdGV4dGFyZWEtaGVpZ2h0XCIsXG5cdFx0XHRgJHt0ZXh0YXJlYS5zY3JvbGxIZWlnaHR9cHhgLFxuXHRcdCk7XG5cdH1cbn1cblxuLy8gU2V0dXAgdHJhbnNsYXRpb25zIGZyb20gQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzXG5mdW5jdGlvbiByZW5kZXJDb21ib2JveChlbDogVUhUTUxDb21ib2JveEVsZW1lbnQgfCBudWxsKSB7XG5cdGNvbnN0IHsgY29udHJvbCwgbGlzdCB9ID0gZWwgfHwge307XG5cblx0aWYgKGVsICYmIGxpc3QgJiYgIWVsLmhhc0F0dHJpYnV0ZShcImRhdGEtc3ItYWRkZWRcIikpIHtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItYWRkZWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1hZGRlZFwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWVtcHR5XCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtZW1wdHlcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1mb3VuZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWZvdW5kXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItaW52YWxpZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWludmFsaWRcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1vZlwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LW9mXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItcmVtb3ZlXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtcmVtb3ZlXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItcmVtb3ZlZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LXJlbW92ZWRcIikpO1xuXHRcdGF0dHIobGlzdCwgXCJkYXRhLXNyLXBsdXJhbFwiLCBnZXRUZXh0KHN0eWxlLCBcImRhdGFsaXN0LXBsdXJhbFwiKSk7XG5cdFx0YXR0cihsaXN0LCBcImRhdGEtc3Itc2luZ3VsYXJcIiwgZ2V0VGV4dChzdHlsZSwgXCJkYXRhbGlzdC1zaW5ndWxhclwiKSk7XG5cdH1cblx0aWYgKGxpc3QgJiYgY29udHJvbCAmJiAhbGlzdC5oYXNBdHRyaWJ1dGUoXCJwb3BvdmVyXCIpKSB7XG5cdFx0YXR0cihsaXN0LCBcInBvcG92ZXJcIiwgXCJtYW51YWxcIik7XG5cdFx0YXR0cihjb250cm9sLCBcInBvcG92ZXJ0YXJnZXRcIiwgdXNlSWQobGlzdCkpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNvdW50ZXIoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0Y29uc3QgZWwgPSBpbnB1dD8ubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRjb25zdCBsaW1pdCA9IGVsICYmIGF0dHIoZWwsIFwiZGF0YS1jb3VudFwiKTtcblxuXHRpZiAoZWwgJiYgbGltaXQpIHtcblx0XHRjb25zdCByZW1haW5kZXIgPSBOdW1iZXIobGltaXQpIC0gaW5wdXQudmFsdWUubGVuZ3RoO1xuXHRcdGNvbnN0IG5leHRJbnZhbGlkID0gcmVtYWluZGVyIDwgMDtcblx0XHRjb25zdCBwcmV2SW52YWxpZCA9IGF0dHIoZWwsIFwiYXJpYS1saXZlXCIpID09PSBcInBvbGl0ZVwiO1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwgfHwgaW5wdXQpO1xuXHRcdGNvbnN0IG92ZXIgPSBnZXRUZXh0KHN0eWxlLCBcImNvdW50LW92ZXJcIik7XG5cdFx0Y29uc3QgdW5kZXIgPSBnZXRUZXh0KHN0eWxlLCBcImNvdW50LXVuZGVyXCIpO1xuXG5cdFx0aWYgKHByZXZJbnZhbGlkICE9PSBuZXh0SW52YWxpZCkge1xuXHRcdFx0YXR0cihlbCwgXCJhcmlhLWxpdmVcIiwgbmV4dEludmFsaWQgPyBcInBvbGl0ZVwiIDogXCJvZmZcIik7XG5cdFx0XHRmb3IgKGNvbnN0IGNzcyBvZiBDU1NfVkFMSURBVElPTlMpIGVsLmNsYXNzTGlzdC50b2dnbGUoY3NzLCBuZXh0SW52YWxpZCk7XG5cdFx0fVxuXHRcdGVsLnRleHRDb250ZW50ID0gKG5leHRJbnZhbGlkID8gb3ZlciA6IHVuZGVyKS5yZXBsYWNlKFxuXHRcdFx0XCIlZFwiLFxuXHRcdFx0YCR7TWF0aC5hYnMocmVtYWluZGVyKX1gLFxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRmllbGRUb2dnbGUoZXZlbnQ6IEV2ZW50ICYgeyBuZXdTdGF0ZT86IHN0cmluZyB9KSB7XG5cdGlmIChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBVSFRNTERhdGFMaXN0RWxlbWVudCkge1xuXHRcdGNvbnN0IGxpc3QgPSBldmVudC50YXJnZXQ7XG5cdFx0Y29uc3Qgcm9vdCA9IGxpc3QuZ2V0Um9vdE5vZGUoKSBhcyBTaGFkb3dSb290IHwgbnVsbDtcblx0XHRjb25zdCBhbmNob3IgPSByb290Py5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pihcblx0XHRcdGBbcG9wb3ZlcnRhcmdldD1cIiR7bGlzdC5pZH1cIl1gLFxuXHRcdCk7XG5cblx0XHRpZiAoZXZlbnQubmV3U3RhdGUgPT09IFwiY2xvc2VkXCIpIGFuY2hvclBvc2l0aW9uKGxpc3QsIGZhbHNlKTtcblx0XHRlbHNlIGlmIChhbmNob3IpXG5cdFx0XHRhbmNob3JQb3NpdGlvbihsaXN0LCBhbmNob3IsIHtcblx0XHRcdFx0cGxhY2VtZW50OiAoYXR0cihsaXN0LCBcImRhdGEtcG9zaXRpb25cIikgPz8gXCJib3R0b21cIikgYXMgUGxhY2VtZW50LFxuXHRcdFx0XHRtaWRkbGV3YXJlOiBbXG5cdFx0XHRcdFx0ZmxpcCgpLFxuXHRcdFx0XHRcdHNoaWZ0KCksXG5cdFx0XHRcdFx0c2l6ZSh7XG5cdFx0XHRcdFx0XHRwYWRkaW5nOiAxMCxcblx0XHRcdFx0XHRcdGFwcGx5KHsgYXZhaWxhYmxlSGVpZ2h0IH0pIHtcblx0XHRcdFx0XHRcdFx0bGlzdC5zdHlsZS53aWR0aCA9IGAke2FuY2hvci5vZmZzZXRXaWR0aH1weGA7XG5cdFx0XHRcdFx0XHRcdGxpc3Quc3R5bGUubWF4SGVpZ2h0ID0gYCR7TWF0aC5tYXgoNTAsIGF2YWlsYWJsZUhlaWdodCl9cHhgO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XSxcblx0XHRcdH0pO1xuXHR9XG59XG4vLyBVcGRhdGUgd2hlbiB0eXBpbmdcbmZ1bmN0aW9uIGhhbmRsZUZpZWxkSW5wdXQoZXZlbnQ6IEV2ZW50KSB7XG5cdGlmIChpc0lucHV0TGlrZShldmVudC50YXJnZXQpKSB7XG5cdFx0cmVuZGVyQ291bnRlcihldmVudC50YXJnZXQpO1xuXHRcdHJlbmRlclRleHRhcmVhU2l6ZShldmVudC50YXJnZXQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZpZWxkVmFsZGlhdGlvbihldmVudDogRXZlbnQpIHtcblx0Y29uc3QgZmllbGQgPSAoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oYC4ke0NTU19GSUVMRH1gKTtcblx0aWYgKGV2ZW50LnR5cGUgPT09IFwiaW52YWxpZFwiICYmIGZpZWxkKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBQcmV2ZW50IGJyb3dzZXJzIGZyb20gc2hvd2luZyBkZWZhdWx0IHZhbGlkYXRpb24gYnViYmxlc1xuXHRoYW5kbGVGaWVsZE11dGF0aW9uKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ1NTX0ZJRUxEKSwgdHJ1ZSk7IC8vIFVwZGF0ZSBzdGF0ZVxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfRklFTEQsIGhhbmRsZUZpZWxkTXV0YXRpb24pO1xuXHRvbihkb2N1bWVudCwgXCJpbnB1dFwiLCBoYW5kbGVGaWVsZElucHV0LCBRVUlDS19FVkVOVCk7XG5cdG9uKGRvY3VtZW50LCBcImludmFsaWQsc3VibWl0XCIsIGhhbmRsZUZpZWxkVmFsZGlhdGlvbiwgdHJ1ZSk7IC8vIFVzZSBjYXB0dXJlIGFzIGludmFsaWQgYW5kIHN1Ym1pdCBkb2VzIG5vdCBidWJibGVcblx0b24oZG9jdW1lbnQsIFwidG9nZ2xlXCIsIGhhbmRsZUZpZWxkVG9nZ2xlLCBRVUlDS19FVkVOVCk7IC8vIFVzZSBjYXB0dXJlIHNpbmNlIHRvZ2dsZSBkb2VzIG5vdCBidWJibGVcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIGlzSW5wdXRMaWtlLCBvbkxvYWRlZCwgb25NdXRhdGlvbiwgdXNlSWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0ZJRUxEU0VUID0gc3R5bGVzLmZpZWxkc2V0LnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19WQUxJREFUSU9OID0gc3R5bGVzLnZhbGlkYXRpb24uc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQVJJQV9ERVNDID0gXCJhcmlhLWRlc2NyaWJlZGJ5XCI7XG5jb25zdCBBUklBX0lOVkFMSUQgPSBcImFyaWEtaW52YWxpZFwiO1xuXG4vLyBVc2luZyBzZXRUaW1lb3V0IHRvIGVuc3VyZSBpdCBydW5zIGFmdGVyIGZpZWxkLW9ic2VydmVyXG5mdW5jdGlvbiBoYW5kbGVGaWVsZHNldE11dGF0aW9uKGZpZWxkc2V0czogSFRNTENvbGxlY3Rpb25PZjxFbGVtZW50Pikge1xuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRmb3IgKGNvbnN0IGZpZWxkc2V0IG9mIGZpZWxkc2V0cylcblx0XHRcdGlmIChmaWVsZHNldC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0XHRjb25zdCBpbnB1dHM6IEhUTUxJbnB1dEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0XHRsZXQgdmFsaWRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdFx0XHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiBmaWVsZHNldC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpIHtcblx0XHRcdFx0XHRpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdFx0dmFsaWQgPSBhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8ICFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0XHR2YWxpZElkID0gdXNlSWQoZWwpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpKSBpbnB1dHMucHVzaChlbCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykge1xuXHRcdFx0XHRcdGNvbnN0IGRlc2MgPSBhdHRyKGlucHV0LCBBUklBX0RFU0MpPy5yZXBsYWNlKHZhbGlkSWQgfHwgXCIjXCIsIFwiXCIpO1xuXG5cdFx0XHRcdFx0YXR0cihpbnB1dCwgQVJJQV9ERVNDLCBgJHt2YWxpZElkIHx8IFwiXCJ9ICR7ZGVzYyB8fCBcIlwifWAudHJpbSgpKTtcblx0XHRcdFx0XHRhdHRyKGlucHV0LCBBUklBX0lOVkFMSUQsIGAkeyF2YWxpZH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRFNFVCwgaGFuZGxlRmllbGRzZXRNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uTG9hZGVkLCBvbk11dGF0aW9uLCB0YWcgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0xPR08gPSBzdHlsZXMubG9nby5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZUxvZ29NdXRhdGlvbihbbG9nb106IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdGlmIChsb2dvPy5pc0Nvbm5lY3RlZCAmJiBsb2dvPy5maXJzdEVsZW1lbnRDaGlsZCBpbnN0YW5jZW9mIFNWR1NWR0VsZW1lbnQpIHtcblx0XHRmb3IgKGNvbnN0IGljb24gb2YgZG9jdW1lbnQuaGVhZC5xdWVyeVNlbGVjdG9yQWxsKFwibGlua1tyZWx+PSdpY29uJ11cIikpXG5cdFx0XHRpY29uLnNldEF0dHJpYnV0ZShcInJlbFwiLCBcImRpc2FibGVkXCIpOyAvLyBEaXNhYmxlIHByZXZpb3VzIGljb24gKGJ1dCBub3QgcmVtb3ZlIGlzIGFzIHRoaXMgbWFrZXMgTmV4dC5qcyBzYWQpXG5cblx0XHRjb25zdCBzdmcgPSBsb2dvLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdGNvbnN0IGlzRG90ID0gbG9nbz8uaGFzQXR0cmlidXRlKFwiZGF0YS1lbnZcIik7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzdmcpO1xuXHRcdGNvbnN0IHRleHQgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sb3JcIik7XG5cdFx0Y29uc3QgYmFjayA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCItLW10ZHMtbG9nby1jb2xvclwiKTtcblx0XHRjb25zdCBpY29uID0gc3ZnLm91dGVySFRNTFxuXHRcdFx0LnJlcGxhY2UoL1xcbisvZywgXCIgXCIpIC8vIFByZXZlbnQgbGluZSBicmVha3Ncblx0XHRcdC5yZXBsYWNlKC8oZmlsbHx3aWR0aHxoZWlnaHR8eG1sbnMpPVwiW15cIl0rXCIvZ2ksIFwiXCIpXG5cdFx0XHQucmVwbGFjZShcIjxzdmdcIiwgYDxzdmcgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgZmlsbD1cIiR7dGV4dH1cImApO1xuXG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChcblx0XHRcdHRhZyhcImxpbmtcIiwge1xuXHRcdFx0XHRocmVmOiBgZGF0YTppbWFnZS9zdmcreG1sLCR7ZW5jb2RlVVJJQ29tcG9uZW50KGA8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDU1IDU1Jz48cmVjdCBmaWxsPScke2lzRG90ID8gXCJub25lXCIgOiBiYWNrfScgd2lkdGg9JzUxJyBoZWlnaHQ9JzUxJyB4PScyJyB5PScyJyBzdHJva2U9JyR7dGV4dH0nIHN0cm9rZS1kYXNoYXJyYXk9JzAuMDkgNi4zOCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2Utb3BhY2l0eT0nJHtpc0RvdCA/IDAuNiA6IDB9JyBzdHJva2Utd2lkdGg9JzIuMycgcng9JzI1LjUnLz48ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNy41IDcuNSlcIj4ke2ljb259PC9nPjwvc3ZnPmApfWAsXG5cdFx0XHRcdHJlbDogXCJpY29uXCIsXG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfTE9HTywgaGFuZGxlTG9nb011dGF0aW9uKSxcbik7XG4iLCJpbXBvcnQgeyBmbGlwLCB0eXBlIFBsYWNlbWVudCwgc2hpZnQsIHNpemUgfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGFuY2hvclBvc2l0aW9uLCBhdHRyLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19QT1BPVkVSID0gc3R5bGVzLnBvcG92ZXIuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX0FVVE8gPSBgX210ZHMtcG9wb3Zlci1hdXRvYDtcblxudHlwZSBFdmVudFRvZ2dsZSA9IEV2ZW50ICYgUGFydGlhbDxUb2dnbGVFdmVudD47XG5cbmZ1bmN0aW9uIGhhbmRsZVBvcG92ZXJUb2dnbGUoeyB0YXJnZXQ6IGVsLCBuZXdTdGF0ZSB9OiBFdmVudFRvZ2dsZSkge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1BPUE9WRVIpKSB7XG5cdFx0Y29uc3QgaXNDbG9zaW5nID0gbmV3U3RhdGUgPT09IFwiY2xvc2VkXCI7XG5cdFx0Y29uc3QgaXNDb250YWluID0gYXR0cihlbCwgXCJkYXRhLW92ZXJzY3JvbGxcIikgPT09IFwiY29udGFpblwiO1xuXHRcdGNvbnN0IGFuY2hvciA9IChlbC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QpPy5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pihcblx0XHRcdGBbcG9wb3ZlcnRhcmdldD1cIiR7ZWwuaWR9XCJdYCxcblx0XHQpO1xuXG5cdFx0aWYgKGlzQ2xvc2luZykgYW5jaG9yUG9zaXRpb24oZWwsIGZhbHNlKTtcblx0XHRlbHNlIGlmIChhbmNob3IpXG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgYW5jaG9yLCB7XG5cdFx0XHRcdHBsYWNlbWVudDogKGF0dHIoZWwsIFwiZGF0YS1wb3NpdGlvblwiKSB8fCBcImJvdHRvbVwiKSBhcyBQbGFjZW1lbnQsXG5cdFx0XHRcdG1pZGRsZXdhcmU6IFtmbGlwKCksIHNoaWZ0KHsgcGFkZGluZzogMTAgfSldLmNvbmNhdChcblx0XHRcdFx0XHRpc0NvbnRhaW5cblx0XHRcdFx0XHRcdD8gc2l6ZSh7XG5cdFx0XHRcdFx0XHRcdFx0cGFkZGluZzogMTAsXG5cdFx0XHRcdFx0XHRcdFx0YXBwbHkoeyBhdmFpbGFibGVIZWlnaHQgfSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWwuc3R5bGUubWF4SGVpZ2h0ID0gYCR7TWF0aC5tYXgoNTAsIGF2YWlsYWJsZUhlaWdodCl9cHhgO1xuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQ6IFtdLFxuXHRcdFx0XHQpLFxuXHRcdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlUG9wb3ZlckJlZm9yZXRvZ2dsZSh7IHRhcmdldDogZWwsIG5ld1N0YXRlIH06IEV2ZW50VG9nZ2xlKSB7XG5cdGlmIChcblx0XHRuZXdTdGF0ZSA9PT0gXCJvcGVuXCIgJiZcblx0XHRlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG5cdFx0ZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19QT1BPVkVSKSAmJlxuXHRcdGF0dHIoZWwsIFwicG9wb3ZlclwiKSAhPT0gXCJtYW51YWxcIlxuXHQpIHtcblx0XHRlbC5jbGFzc0xpc3QuYWRkKENTU19BVVRPKTtcblx0XHRhdHRyKGVsLCBcInBvcG92ZXJcIiwgXCJtYW51YWxcIik7IC8vIE1ha2UgbWFudWFsIHRvIHByZXZlbnQgY2xvc2luZyB3aGVuIGNsaWNraW5nIHNjcm9sbGJhclxuXHR9XG59XG5cbi8vIFBvbHlmaWxsIHBvcG92ZXJ0YXJnZXQgZm9yIDxhPiAobm90IHN1cHBvcnRlZCBieSBuYXRpdmUpXG4vLyBhbmQgYXV0b21hdGljYWxseSBhc3N1bWUgcG9wb3ZlcnRhcmdldCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQgcG9wb3ZlclxuLy8gYnV0IHJlc3BlY3QgdGhlIHBvcG92ZXJ0YXJnZXQgYW5kIHBvcG92ZXJ0YXJnZXRhY3Rpb24gYXR0cmlidXRlXG5mdW5jdGlvbiBoYW5kbGVQb3BvdmVyTGlua0NsaWNrKGV2ZW50OiBFdmVudCkge1xuXHRjb25zdCBlbCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImEsYnV0dG9uXCIpO1xuXHRjb25zdCBpZCA9IGVsICYmIGF0dHIoZWwsIFwicG9wb3ZlcnRhcmdldFwiKTtcblx0Y29uc3QgcG9wID0gaWQgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkgOiBlbD8uY2xvc2VzdChgLiR7Q1NTX1BPUE9WRVJ9YCk7XG5cblx0Ly8gTWFudWFsbHkgY2xvc2UgcG9wb3ZlcnMgd2hlcmUgY2xpY2sgd2FzIG91dHNpZGVcblx0Zm9yIChjb25zdCBvcGVuIG9mIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ1NTX0FVVE8pKVxuXHRcdGlmICghb3Blbi5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkgJiYgcG9wICE9PSBvcGVuKVxuXHRcdFx0KG9wZW4gYXMgSFRNTEVsZW1lbnQpLmhpZGVQb3BvdmVyKCk7XG5cblx0aWYgKHBvcCAmJiBlbCkge1xuXHRcdGNvbnN0IGFjdGlvbiA9IGF0dHIoZWwsIFwicG9wb3ZlcnRhcmdldGFjdGlvblwiKTtcblx0XHRjb25zdCBvcGVuID0gYWN0aW9uID09PSBcInNob3dcIiB8fCAoYWN0aW9uID09PSBcImhpZGVcIiA/IGZhbHNlIDogdW5kZWZpbmVkKTtcblxuXHRcdC8vIFBvcG92ZXIgY2FuIGJlIGRpc2Nvbm5ldGVkIGJ5IGNsaWNrIGhhbmRsZXIgZGVlcGVyIGRvd24gaW4gdGhlIERPTSB0aHJlZSBiZWZvcmUgcmVhY2hpbmcgZG9jdW1lbnRcblx0XHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiAhYWN0aW9uICYmIHBvcC5jb250YWlucyhlbCkpIHJldHVybjsgLy8gUmVxdWlyZSBcInBvcG92ZXJ0YXJnZXRhY3Rpb25cIiBhdHRyaWJ1dGUgdG8gbWFrZSBidXR0b25zIGluc2lkZSBwb3BvdmVyIHRvZ2dsZVxuXHRcdGlmIChwb3AgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBwb3AuaXNDb25uZWN0ZWQgJiYgcG9wLnRvZ2dsZVBvcG92ZXIpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIFByZXZlbnQgYnJvd3NlciBwb3BvdmVyIEFQSSBzaW5jZSB3ZSBhcmUgZG9pbmcgaXQgb3Vyc2VsdmVzXG5cdFx0XHRwb3AudG9nZ2xlUG9wb3ZlcihvcGVuKTtcblx0XHR9XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVQb3BvdmVyTGlua0NsaWNrKTsgLy8gQWxsb3cgYDxhPmAgdG8gdXNlIGBwb3BvdmVydGFyZ2V0YCBhcyB3ZWxsXG5cdG9uKGRvY3VtZW50LCBcInRvZ2dsZVwiLCBoYW5kbGVQb3BvdmVyVG9nZ2xlLCBRVUlDS19FVkVOVCk7IC8vIFVzZSBjYXB0dXJlIHNpbmNlIHRvZ2dsZSBkb2VzIG5vdCBidWJibGVcblx0b24oZG9jdW1lbnQsIFwiYmVmb3JldG9nZ2xlXCIsIGhhbmRsZVBvcG92ZXJCZWZvcmV0b2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb24sIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UQUJMRSA9IHN0eWxlcy50YWJsZS5zcGxpdChcIiBcIilbMF07XG5jb25zdCBJTlRFUkFDVElWRSA9ICdhLGJ1dHRvbixsYWJlbCxpbnB1dCxzZWxlY3QsdGV4dGFyZWEsW3JvbGU9XCJidXR0b25cIl0nO1xuXG5mdW5jdGlvbiBoYW5kbGVUYWJsZU11dGF0aW9uKHRhYmxlczogSFRNTENvbGxlY3Rpb25PZjxIVE1MVGFibGVFbGVtZW50Pikge1xuXHRmb3IgKGNvbnN0IHRhYmxlIG9mIHRhYmxlcykge1xuXHRcdGNvbnN0IHRocyA9IEFycmF5LmZyb20odGFibGUudEhlYWQ/LnJvd3NbMF0/LmNlbGxzIHx8IFtdLCAodGgpID0+XG5cdFx0XHR0aC5pbm5lclRleHQudHJpbSgpLFxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IHRib2R5IG9mIHRhYmxlLnRCb2RpZXMpXG5cdFx0XHRmb3IgKGNvbnN0IHJvdyBvZiB0Ym9keS5yb3dzKVxuXHRcdFx0XHRmb3IgKGNvbnN0IGNlbGwgb2Ygcm93LmNlbGxzKVxuXHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJkYXRhLXRoXCIsIHRoc1tjZWxsLmNlbGxJbmRleF0gfHwgXCI6ZW1wdHlcIik7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlVGFibGVDbGljayh7IHRhcmdldDogZWwgfTogRXZlbnQpIHtcblx0aWYgKCEoZWwgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xuXHRjb25zdCByb3cgPSBlbC5jbG9zZXN0KFwidHJcIik7XG5cdGNvbnN0IGFjdGlvbiA9IHJvdz8ucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PignW2RhdGEtY29tbWFuZD1cInJvd1wiXScpO1xuXHRpZiAoYWN0aW9uICYmICFlbC5jbG9zZXN0KElOVEVSQUNUSVZFKSkgYWN0aW9uLmNsaWNrPy4oKTsgLy8gRm9yd2FyZCBjbGljayB0byBkYXRhLWNvbW1hbmQ9XCJyb3dcIiBlbGVtZW50XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19UQUJMRSwgaGFuZGxlVGFibGVNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZVRhYmxlQ2xpY2spO1xufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb24sIG9uTG9hZGVkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UT0FTVCA9IHN0eWxlcy50b2FzdC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBBVFRSX1NPUlQgPSBcImRhdGEtc29ydFwiO1xuXG5mdW5jdGlvbiBoYW5kbGVUb2FzdFN0YXRlKHsgYW5pbWF0aW9uTmFtZSwgdGFyZ2V0IH06IFBhcnRpYWw8QW5pbWF0aW9uRXZlbnQ+KSB7XG5cdGNvbnN0IGRpYWxvZyA9IHRhcmdldCBhcyBIVE1MRGlhbG9nRWxlbWVudDtcblx0aWYgKGFuaW1hdGlvbk5hbWUgPT09IHN0eWxlcy5fdG9hc3RUaW1lb3V0KSBkaWFsb2cuY2xvc2UoKTtcblx0aWYgKGFuaW1hdGlvbk5hbWUgIT09IHN0eWxlcy5fdG9hc3RPcGVuKSByZXR1cm47XG5cblx0Y29uc3QgbXMgPSBOdW1iZXIoYXR0cihkaWFsb2csIFwiZGF0YS10aW1lb3V0XCIpKTtcblx0ZGlhbG9nLnN0eWxlLnNldFByb3BlcnR5KFwiLS1tdGRzYy10b2FzdC10aW1lb3V0XCIsIG1zID8gYCR7bXN9bXNgIDogbnVsbCk7XG5cdGRpYWxvZy5oYXNBdHRyaWJ1dGUoQVRUUl9TT1JUKSB8fCBhdHRyKGRpYWxvZywgQVRUUl9TT1JULCBgJHtEYXRlLm5vdygpfWApO1xuXHRhdHRyKGRpYWxvZywgXCJ0YWJpbmRleFwiLCBcIjBcIik7IC8vIE1ha2UgZm9jdXNhYmxlXG5cblx0Ly8gU2V0dXAgbGF5b3V0XG5cdFsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxEaWFsb2dFbGVtZW50PihgLiR7Q1NTX1RPQVNUfVtvcGVuXWApXVxuXHRcdC5zb3J0KChhLCBiKSA9PiBOdW1iZXIoYXR0cihiLCBBVFRSX1NPUlQpKSAtIE51bWJlcihhdHRyKGEsIEFUVFJfU09SVCkpKVxuXHRcdC5yZWR1Y2UoKHRvcCwgdG9hc3QpID0+IHtcblx0XHRcdHRvYXN0LnN0eWxlLnRyYW5zbGF0ZSA9IGAwICR7dG9hc3QgPT09IHRhcmdldCA/IDAgOiB0b3B9cHhgO1xuXHRcdFx0cmV0dXJuIHRvcCArIHRvYXN0Lm9mZnNldEhlaWdodCArIDU7XG5cdFx0fSwgMCk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRvYXN0Q2xpY2soeyB0YXJnZXQsIGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfTogTW91c2VFdmVudCkge1xuXHRpZiAoXG5cdFx0dGFyZ2V0IGluc3RhbmNlb2YgSFRNTERpYWxvZ0VsZW1lbnQgJiZcblx0XHR0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19UT0FTVCkgJiZcblx0XHRhdHRyKHRhcmdldCwgXCJkYXRhLWNsb3NlZGJ5XCIpICE9PSBcIm5vbmVcIlxuXHQpIHtcblx0XHRjb25zdCByZWN0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdGNvbnN0IHRvYXN0ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGFyZ2V0KTtcblx0XHRjb25zdCBjbG9zZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRhcmdldCwgXCI6OmFmdGVyXCIpO1xuXHRcdGNvbnN0IHRvcCA9IHJlY3QudG9wICsgTnVtYmVyLnBhcnNlSW50KHRvYXN0LnBhZGRpbmdUb3AsIDEwKTtcblx0XHRjb25zdCBib3R0b20gPSB0b3AgKyBOdW1iZXIucGFyc2VJbnQoY2xvc2UuaGVpZ2h0LCAxMCk7XG5cdFx0Y29uc3QgcmlnaHQgPSByZWN0LnJpZ2h0IC0gTnVtYmVyLnBhcnNlSW50KHRvYXN0LnBhZGRpbmdSaWdodCwgMTApO1xuXHRcdGNvbnN0IGxlZnQgPSByaWdodCAtIE51bWJlci5wYXJzZUludChjbG9zZS53aWR0aCwgMTApO1xuXHRcdGNvbnN0IGlzQ2xvc2UgPSB0b3AgPD0geSAmJiB5IDw9IGJvdHRvbSAmJiBsZWZ0IDw9IHggJiYgeCA8PSByaWdodDtcblxuXHRcdGlmIChpc0Nsb3NlKSB0YXJnZXQuY2xvc2UoKTsgLy8gQ2xpY2sgaXMgb24gOjphZnRlciBlbGVtZW50XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJhbmltYXRpb25zdGFydFwiLCBoYW5kbGVUb2FzdFN0YXRlKTtcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlVG9hc3RDbGljayBhcyBFdmVudExpc3RlbmVyKTtcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uLCBvbkxvYWRlZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfVE9HR0xFR1JPVVAgPSBgLiR7c3R5bGVzLnRvZ2dsZWdyb3VwLnNwbGl0KFwiIFwiKVswXX1gO1xuXG4vLyBQcmV2ZW50IGJyb3dzZXJzIGZyb20gc2hvd2luZyBkZWZhdWx0IHZhbGlkYXRpb24gYnViYmxlc1xuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlZ3JvdXBLZXlkb3duKGV2ZW50OiBFdmVudCAmIFBhcnRpYWw8S2V5Ym9hcmRFdmVudD4pIHtcblx0Y29uc3QgeyBrZXksIHRhcmdldDogZWwgfSA9IGV2ZW50O1xuXHRjb25zdCBncm91cCA9IGVsIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBlbC5jbG9zZXN0KENTU19UT0dHTEVHUk9VUCk7XG5cblx0aWYgKCFncm91cCkgcmV0dXJuO1xuXHRpZiAoa2V5ID09PSBcIkVudGVyXCIpIGVsLmNsaWNrKCk7XG5cdGlmIChrZXk/LnN0YXJ0c1dpdGgoXCJBcnJvd1wiKSkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0Y29uc3QgaW5wdXRzID0gZ3JvdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKTtcblx0XHRjb25zdCBpbmRleCA9IFsuLi5pbnB1dHNdLmluZGV4T2YoZWwpO1xuXHRcdGNvbnN0IG1vdmUgPSBrZXkubWF0Y2goL0Fycm93KFJpZ2h0fERvd24pLykgPyAxIDogLTE7XG5cdFx0aW5wdXRzWyhpbnB1dHMubGVuZ3RoICsgaW5kZXggKyBtb3ZlKSAlIGlucHV0cy5sZW5ndGhdPy5mb2N1cygpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBcImtleWRvd25cIiwgaGFuZGxlVG9nZ2xlZ3JvdXBLZXlkb3duKSk7XG4iLCJpbXBvcnQgeyBmbGlwLCB0eXBlIFBsYWNlbWVudCwgc2hpZnQgfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRJU19CUk9XU0VSLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdFFVSUNLX0VWRU5ULFxuXHR0YWcsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBERVNDUklCRURCWSA9IFwiYXJpYS1kZXNjcmliZWRieVwiO1xuY29uc3QgRVNDID0gXCJFc2NhcGVcIjtcbmNvbnN0IExBQkVMTEVEQlkgPSBcImFyaWEtbGFiZWxsZWRieVwiO1xuY29uc3QgUE9TSVRJT05fQ1NTX1BST1BFUlRZID0gXCItLW10ZHMtdG9vbHRpcC1wb3NpdGlvblwiO1xuY29uc3QgVEhST1RUTEVfREVMQVkgPSAzMDA7XG5jb25zdCBUT09MVElQX0lEID0gXCJtdGRzLXRvb2x0aXBcIjtcbmNvbnN0IFRPT0xUSVAgPSBJU19CUk9XU0VSXG5cdD8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoVE9PTFRJUF9JRCkgfHxcblx0XHR0YWcoXCJkaXZcIiwge1xuXHRcdFx0Y2xhc3M6IHN0eWxlcy5fdG9vbHRpcCxcblx0XHRcdGlkOiBUT09MVElQX0lELFxuXHRcdFx0cG9wb3ZlcjogXCJtYW51YWxcIixcblx0XHR9KVxuXHQ6IG51bGw7XG5cbmxldCBBTkNIT1I6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbmxldCBMQVNUX0NBTEwgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5sZXQgVEhST1RUTEU6IG51bWJlciB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+ID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlVG9vbHRpcE1vdmUoeyB0YXJnZXQsIHR5cGUsIGtleSB9OiBFdmVudCAmIHsga2V5Pzogc3RyaW5nIH0pIHtcblx0aWYgKHR5cGUgPT09IFwia2V5ZG93blwiICYmIGtleSAhPT0gRVNDKSByZXR1cm47IC8vIEFsbG93IEVTQyBkaXNtaXNzIHRvIGZvbGxvdyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL3Rvb2x0aXAvXG5cdGNvbnN0IHdhaXQgPSBMQVNUX0NBTEwgKyBUSFJPVFRMRV9ERUxBWSAtIERhdGUubm93KCk7XG5cdGNsZWFyVGltZW91dChUSFJPVFRMRSk7XG5cdFRIUk9UVExFID0gc2V0VGltZW91dChcblx0XHRoYW5kbGVUb29sdGlwTW92ZVRocm90dGxlZCxcblx0XHRNYXRoLm1heCh3YWl0LCAwKSxcblx0XHRrZXkgPT09IEVTQyA/IG51bGwgOiB0YXJnZXQsXG5cdCk7XG59XG5cbi8vIFVzaW5nIGEgdGhyb3R0bGVkIGZ1bmN0aW9uIHRvIGF2b2lkIHBlcmZvcm1hbmNlIGlzc3Vlc1xuZnVuY3Rpb24gaGFuZGxlVG9vbHRpcE1vdmVUaHJvdHRsZWQodGFyZ2V0OiBFbGVtZW50IHwgbnVsbCkge1xuXHRMQVNUX0NBTEwgPSBEYXRlLm5vdygpO1xuXG5cdC8vIEJ1aWxkIGFuZCBhcHBlbmQgdG9vbHRpcCBpZiBub3QgZXhpc3Rpbmdcblx0aWYgKCFUT09MVElQIHx8IHRhcmdldCA9PT0gVE9PTFRJUCkgcmV0dXJuOyAvLyBBbGxvdyB0b29sdGlwIHRvIGJlIGhvdmVyZWQsIGZvbGxvd2luZyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIxLyNjb250ZW50LW9uLWhvdmVyLW9yLWZvY3VzXG5cdGlmICghVE9PTFRJUD8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFRPT0xUSVApOyAvLyBFbnN1cmUgY29ubmVjdGVkXG5cdGxldCBhbmNob3IgPSB0YXJnZXQ/LmNsb3Nlc3Q/LjxFbGVtZW50PihcIltkYXRhLXRvb2x0aXBdXCIpIHx8IG51bGw7XG5cblx0Ly8gTm8gbmVlZCB0byB1cGRhdGVcblx0aWYgKGFuY2hvciA9PT0gQU5DSE9SKSByZXR1cm47XG5cblx0Y29uc3QgY29udGVudCA9IChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwXCIpKSB8fCBcIlwiO1xuXHRjb25zdCBwb3NpdGlvbiA9XG5cdFx0KGFuY2hvciAmJiBhdHRyKGFuY2hvciwgXCJkYXRhLXRvb2x0aXAtcG9zaXRpb25cIikpIHx8XG5cdFx0d2luZG93XG5cdFx0XHQuZ2V0Q29tcHV0ZWRTdHlsZShhbmNob3IgfHwgZG9jdW1lbnQuYm9keSlcblx0XHRcdC5nZXRQcm9wZXJ0eVZhbHVlKFBPU0lUSU9OX0NTU19QUk9QRVJUWSlcblx0XHRcdD8udHJpbSgpIHx8XG5cdFx0XCJ0b3BcIjtcblxuXHRjb25zdCBpc0hpZGRlbiA9XG5cdFx0IWNvbnRlbnQgfHxcblx0XHRjb250ZW50ID09PSBcImZhbHNlXCIgfHxcblx0XHRjb250ZW50ID09PSBcInRydWVcIiB8fFxuXHRcdHBvc2l0aW9uID09PSBcIm5vbmVcIjtcblxuXHRpZiAoaXNIaWRkZW4pIGFuY2hvciA9IG51bGw7IC8vIERvIG5vdCBzaG93IHRvb2x0aXAgaWYgYm9vbGlzaCB2YWx1ZVxuXHRpZiAoYW5jaG9yKSBUT09MVElQLnRleHRDb250ZW50ID0gY29udGVudDsgLy8gT25seSB1cGRhdGUgY29udGVudCBpZiBuZXcgYW5jaG9yXG5cblx0Y29uc3QgaGFkTGFiZWwgPSBBTkNIT1IgJiYgYXR0cihBTkNIT1IsIExBQkVMTEVEQlkpID09PSBUT09MVElQPy5pZDtcblx0Y29uc3QgaGFzTGFiZWwgPVxuXHRcdChhbmNob3IgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuXHRcdFx0PyBhbmNob3IuaW5uZXJUZXh0XG5cdFx0XHQ6IGFuY2hvcj8udGV4dENvbnRlbnRcblx0XHQpPy50cmltKCkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShMQUJFTExFREJZKSB8fFxuXHRcdGFuY2hvcj8uaGFzQXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKTtcblxuXHRBTkNIT1I/LnJlbW92ZUF0dHJpYnV0ZShoYWRMYWJlbCA/IExBQkVMTEVEQlkgOiBERVNDUklCRURCWSk7IC8vIFVubGluayBwcmV2aW91cyBhbmNob3Jcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgZmFsc2UpOyAvLyBSZXNldCBhbmNob3IgcG9zaXRpb25cblxuXHRBTkNIT1IgPSBhbmNob3I7IC8vIFN0b3JlIG5ldyBhbmNob3IgLSBtaWdodCBiZSBudWxsIGlmIG5vIG5ldyBhbmNob3Jcblx0aWYgKEFOQ0hPUikgYXR0cihBTkNIT1IsIGhhc0xhYmVsID8gREVTQ1JJQkVEQlkgOiBMQUJFTExFREJZLCBUT09MVElQPy5pZCk7IC8vIFVzZSB0b29sdGlwIGFzIGRlc2NyaXB0aW9uIGlmIGFsbHJlYWR5IGhhcyBsYWJlbFxuXHRpZiAoQU5DSE9SPy5pc0Nvbm5lY3RlZCkgVE9PTFRJUC5oaWRlUG9wb3ZlcigpOyAvLyBIaWRlIHRvb2x0aXAgc28gaXQgY2FuIGJlIHBsYWNlZCBvbiB0b3AtbGF5ZXIgb24gbmV4dCBzaG93XG5cdFRPT0xUSVAudG9nZ2xlUG9wb3ZlcighIWFuY2hvcik7XG5cdGFuY2hvclBvc2l0aW9uKFRPT0xUSVAsIGFuY2hvciB8fCBmYWxzZSwge1xuXHRcdHBsYWNlbWVudDogcG9zaXRpb24gYXMgUGxhY2VtZW50LFxuXHRcdG1pZGRsZXdhcmU6IFtmbGlwKCksIHNoaWZ0KHsgcGFkZGluZzogMTAgfSldLFxuXHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJibHVyLGZvY3VzLG1vdXNlb3V0LG1vdXNlb3ZlclwiLCBoYW5kbGVUb29sdGlwTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwia2V5ZG93blwiLCBoYW5kbGVUb29sdGlwTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwiYmx1clwiLCBoYW5kbGVUb29sdGlwTW92ZSwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZGVjbGFyYXRpdmVTaGFkb3dSb290ID0gKHN0eWxlLCBzbG90ID0gXCI8c2xvdD48L3Nsb3Q+XCIpID0+IGA8dGVtcGxhdGUgc2hhZG93cm9vdG1vZGU9XCJvcGVuXCI+JHtzbG90fTxzdHlsZT4ke3N0eWxlfTwvc3R5bGU+PC90ZW1wbGF0ZT5gO1xuXG4vLyB1LWRldGFpbHMudHNcbnZhciBVSFRNTERldGFpbHNTdHlsZSA9IGAke0RJU1BMQVlfQkxPQ0t9XG46OnNsb3R0ZWQodS1zdW1tYXJ5KSB7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogYmxvY2sgfVxuOjpzbG90dGVkKHUtc3VtbWFyeSk6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi1pbmxpbmU6IC4wNWVtIC4zMTI1ZW07IGJvcmRlci1ibG9jazogLjMxMjVlbSBzb2xpZCB0cmFuc3BhcmVudDsgYm9yZGVyLWlubGluZS1zdGFydDogLjVlbSBzb2xpZCB9XG46OnNsb3R0ZWQodS1zdW1tYXJ5W2FyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJdKTo6YmVmb3JlIHsgcm90YXRlOiA5MGRlZyB9XG46aG9zdCA+IFtwYXJ0PVwiZGV0YWlscy1jb250ZW50XCJdOm5vdChbaGlkZGVuPVwiXCJdKSB7IGRpc3BsYXk6IGJsb2NrIH1gO1xudmFyIFVIVE1MRGV0YWlsc1NoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoXG4gIFVIVE1MRGV0YWlsc1N0eWxlLFxuICAnPHNsb3QgbmFtZT1cInN1bW1hcnlcIj48L3Nsb3Q+PHNsb3QgcGFydD1cImRldGFpbHMtY29udGVudFwiIGhpZGRlbj1cInVudGlsLWZvdW5kXCI+PC9zbG90Pidcbik7XG52YXIgVUhUTUxEZXRhaWxzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyBVc2luZyB1bmRlcnNjb3JlIGluc3RlYWQgb2YgcHJpdmF0ZSBmaWVsZHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5fY29udGVudCA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnNoYWRvd1Jvb3QpXG4gICAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBuYW1lOiBcInN1bW1hcnlcIiB9KSxcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBwYXJ0OiBcImRldGFpbHMtY29udGVudFwiIH0pLFxuICAgICAgICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgVUhUTUxEZXRhaWxzU3R5bGUpXG4gICAgICApO1xuICB9XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJvcGVuXCJdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHZhciBfYTI7XG4gICAgdGhpcy5fY29udGVudCA9IChfYTIgPSB0aGlzLnNoYWRvd1Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2hpbGRyZW5bMV07XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJncm91cFwiKTtcbiAgICBvbih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLl9jb250ZW50KSBvZmYodGhpcy5fY29udGVudCwgXCJiZWZvcmVtYXRjaFwiLCB0aGlzKTtcbiAgICBvZmYodGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBwcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgaGlkZSA9IFwib25iZWZvcmVtYXRjaFwiIGluIHRoaXMgPyBcInVudGlsLWZvdW5kXCIgOiB0cnVlO1xuICAgIGNvbnN0IG9wZW4gPSB0aGlzLm9wZW47XG4gICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLmNoaWxkcmVuKVxuICAgICAgaWYgKGVsLm5vZGVOYW1lID09PSBcIlUtU1VNTUFSWVwiKSBhdHRyKGVsLCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7b3Blbn1gKTtcbiAgICBpZiAodGhpcy5fY29udGVudCkge1xuICAgICAgYXR0cih0aGlzLl9jb250ZW50LCBcImFyaWEtaGlkZGVuXCIsIGAkeyFvcGVufWApO1xuICAgICAgYXR0cih0aGlzLl9jb250ZW50LCBcInRhYmluZGV4XCIsIG9wZW4gPyBudWxsIDogXCItMVwiKTtcbiAgICAgIHRoaXMuX2NvbnRlbnQuaGlkZGVuID0gb3BlbiA/IGZhbHNlIDogaGlkZTtcbiAgICB9XG4gICAgaWYgKG9wZW4gJiYgdGhpcy5uYW1lKSB7XG4gICAgICBjb25zdCB1RGV0YWlsc0xpc3QgPSBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAke3RoaXMubm9kZU5hbWV9W25hbWU9XCIke3RoaXMubmFtZX1cIl1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCB1RGV0YWlscyBvZiB1RGV0YWlsc0xpc3QpXG4gICAgICAgIGlmICh1RGV0YWlscyAhPT0gdGhpcykgdURldGFpbHMub3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAocHJvcCA9PT0gXCJvcGVuXCIgJiYgcHJldiA9PT0gbnVsbCAhPT0gKG5leHQgPT09IG51bGwpKVxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInRvZ2dsZVwiKSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiOnNjb3BlID4gdS1zdW1tYXJ5XCIpO1xuICAgIGNvbnN0IGlzU3VtbWFyeSA9IHN1bW1hcnkgPT0gbnVsbCA/IHZvaWQgMCA6IHN1bW1hcnkuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJlZm9yZW1hdGNoXCIpIHRoaXMub3BlbiA9IHRydWU7XG4gICAgaWYgKGlzU3VtbWFyeSAmJiBldmVudC50eXBlID09PSBcImtleWRvd25cIikgYXNCdXR0b24oZXZlbnQpO1xuICAgIGlmIChpc1N1bW1hcnkgJiYgZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xuICB9XG4gIGdldCBvcGVuKCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcIm9wZW5cIik7XG4gIH1cbiAgc2V0IG9wZW4odmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwib3BlblwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBcIm5hbWVcIikgfHwgXCJcIjtcbiAgfVxuICBzZXQgbmFtZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJuYW1lXCIsIHZhbHVlKTtcbiAgfVxufTtcbnZhciBVSFRNTFN1bW1hcnlFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgICB0aGlzLnNsb3QgPSBcInN1bW1hcnlcIjtcbiAgICB0aGlzLnRhYkluZGV4ID0gMDtcbiAgfVxufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGV0YWlsc1wiLCBVSFRNTERldGFpbHNFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtc3VtbWFyeVwiLCBVSFRNTFN1bW1hcnlFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxEZXRhaWxzRWxlbWVudCwgVUhUTUxEZXRhaWxzU2hhZG93Um9vdCwgVUhUTUxEZXRhaWxzU3R5bGUsIFVIVE1MU3VtbWFyeUVsZW1lbnQgfTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19GSVJFRk9YID0gSVNfQlJPV1NFUiAmJiAvZmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIGdldExhYmVsID0gKGVsKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IGxhYmVsID0gYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIpIHx8IFwiXCI7XG4gIGNvbnN0IGxhYmVscyA9ICgoX2EyID0gYXR0cihlbCwgXCJhcmlhLWxhYmVsbGVkYnlcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpLnNwbGl0KC9cXHMrLykpIHx8IFtdO1xuICByZXR1cm4gW1xuICAgIC4uLmxhYmVscy5tYXAoKGlkMikgPT4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQyKSksXG4gICAgLy8gR2V0IGFsbCBsYWJlbGxlZGJ5IGVsZW1lbnRzXG4gICAgLi4uQXJyYXkuZnJvbShlbC5sYWJlbHMgfHwgW10pXG4gICAgLy8gR2V0IGFsbCA8bGFiZWw+IGVsZW1lbnRzXG4gIF0ucmVkdWNlKChhY2MsIGVsMikgPT4ge1xuICAgIHZhciBfYTM7XG4gICAgcmV0dXJuIGFjYyB8fCAoKF9hMyA9IGVsMiA9PSBudWxsID8gdm9pZCAwIDogZWwyLmlubmVyVGV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy50cmltKCkpIHx8IFwiXCI7XG4gIH0sIGxhYmVsKTtcbn07XG52YXIgZGVjbGFyYXRpdmVTaGFkb3dSb290ID0gKHN0eWxlLCBzbG90ID0gXCI8c2xvdD48L3Nsb3Q+XCIpID0+IGA8dGVtcGxhdGUgc2hhZG93cm9vdG1vZGU9XCJvcGVuXCI+JHtzbG90fTxzdHlsZT4ke3N0eWxlfTwvc3R5bGU+PC90ZW1wbGF0ZT5gO1xuXG4vLyB1LXByb2dyZXNzLnRzXG52YXIgVUhUTUxQcm9ncmVzc1N0eWxlID0gYDpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGJvcmRlcjogMXB4IHNvbGlkOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGhlaWdodDogLjVlbTsgd2lkdGg6IDEwZW07IG92ZXJmbG93OiBoaWRkZW4gfVxuOmhvc3Q6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiAxMDAlOyBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7IHdpZHRoOiB2YXIoLS1wZXJjZW50YWdlLCAwJSk7IHRyYW5zaXRpb246IHdpZHRoIC4ycyB9XG46aG9zdCg6bm90KFt2YWx1ZV0pKSB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZyxjdXJyZW50Q29sb3IgMjUlLCB0cmFuc3BhcmVudCA1MCUsIGN1cnJlbnRDb2xvciA3NSUpIDUwJS80MDAlIH1cbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSkgeyA6aG9zdCB7IGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZSAycyBsaW5lYXIgaW5maW5pdGUgfSAgfVxuQGtleWZyYW1lcyBpbmRldGVybWluYXRlIHsgZnJvbSB7IGJhY2tncm91bmQtcG9zaXRpb24teDogMTAwJSB9IHRvIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAwIH0gfWA7XG52YXIgVUhUTUxQcm9ncmVzc1NoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoXG4gIFVIVE1MUHJvZ3Jlc3NTdHlsZSxcbiAgXCI8c2xvdCBoaWRkZW4+PC9zbG90PlwiXG4pO1xudmFyIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbnZhciBVSFRNTFByb2dyZXNzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIiwgXCJ2YWx1ZVwiLCBcIm1heFwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICghdGhpcy5zaGFkb3dSb290KVxuICAgICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgaGlkZGVuOiBcIlwiIH0pLFxuICAgICAgICAvLyBTbG90IGhpZGluZyBjb250ZW50IGFsbG93cyBsZWdhY3kgYnJvd3NlciB0byBkaXNwbGF5IGZhbGxiYWNrIHRleHRcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIFVIVE1MUHJvZ3Jlc3NTdHlsZSlcbiAgICAgICk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKFNLSVBfQVRUUl9DSEFOR0UpIHJldHVybjtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gdHJ1ZTtcbiAgICBjb25zdCByb2xlSW1hZ2UgPSBJU19JT1MgfHwgSVNfRklSRUZPWDtcbiAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCh0aGlzLnBvc2l0aW9uICogMTAwKSk7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcGVyY2VudGFnZVwiLCBgJHtwZXJjZW50YWdlfSVgKTtcbiAgICBsZXQgbGFiZWwgPSBnZXRMYWJlbCh0aGlzKTtcbiAgICBpZiAocm9sZUltYWdlKSBsYWJlbCA9IGAke2xhYmVsLnJlcGxhY2UoL1xcZCslJC8sIFwiXCIpfSAke3BlcmNlbnRhZ2V9JWA7XG4gICAgaWYgKElTX0ZJUkVGT1gpIGZvciAoY29uc3QgZWwgb2YgdGhpcy5sYWJlbHMpIGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtYnVzeVwiLCBgJHt0aGlzLnBvc2l0aW9uID09PSAtMX1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbC50cmltKCkpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsbGVkYnlcIiwgbnVsbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtYXhcIiwgXCIxMDBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtaW5cIiwgXCIwXCIpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbm93XCIsIGAke3BlcmNlbnRhZ2V9YCk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgcm9sZUltYWdlID8gXCJpbWdcIiA6IFwicHJvZ3Jlc3NiYXJcIik7XG4gICAgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xuICB9XG4gIGdldCBsYWJlbHMoKSB7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLmNsb3Nlc3QoXCJsYWJlbDpub3QoW2Zvcl0pXCIpO1xuICAgIGNvbnN0IGlkMiA9IHVzZUlkKHRoaXMpO1xuICAgIGlmIChsYWJlbCkgbGFiZWwuaHRtbEZvciA9IGlkMjtcbiAgICBjb25zdCBlbCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGBsYWJlbFtmb3I9XCIke2lkMn1cIl1gXG4gICAgKTtcbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgZ2V0IHBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlID09PSBudWxsID8gLTEgOiBNYXRoLm1pbih0aGlzLnZhbHVlIC8gdGhpcy5tYXgsIDEpO1xuICB9XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIik7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBtYXgoKSB7XG4gICAgcmV0dXJuIGdldE51bWJlcih0aGlzLCBcIm1heFwiKSB8fCAxO1xuICB9XG4gIHNldCBtYXgobWF4KSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwibWF4XCIsIG1heCk7XG4gIH1cbn07XG4vLyBQcmV2ZW50IENocm9tZSBEZXZUb29scyB3YXJuaW5nIGFib3V0IDxsYWJlbCBmb3I9XCJcIj4gcG9pbnRpbmcgdG8gPHUtcHJvZ3Jlc3M+XG5VSFRNTFByb2dyZXNzRWxlbWVudC5mb3JtQXNzb2NpYXRlZCA9IHRydWU7XG52YXIgaXNOdW1lcmljID0gKHZhbHVlKSA9PiAhTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUZsb2F0KGAke3ZhbHVlfWApKSAmJiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKHZhbHVlKSk7XG52YXIgZ2V0TnVtYmVyID0gKGVsLCBrZXkpID0+IHtcbiAgY29uc3QgdmFsdWUgPSBhdHRyKGVsLCBrZXkpO1xuICByZXR1cm4gaXNOdW1lcmljKHZhbHVlKSA/IE1hdGgubWF4KDAsIE51bWJlci5wYXJzZUZsb2F0KHZhbHVlKSkgOiBudWxsO1xufTtcbnZhciBzZXROdW1iZXIgPSAoZWwsIGtleSwgdmFsKSA9PiB7XG4gIGlmICh2YWwgPT09IG51bGwgfHwgaXNOdW1lcmljKHZhbCkpIGF0dHIoZWwsIGtleSwgYCR7dmFsfWApO1xuICBlbHNlIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCBub24tbnVtZXJpYyAnJHthdHRyfSc6ICcke3ZhbH0nYCk7XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1wcm9ncmVzc1wiLCBVSFRNTFByb2dyZXNzRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MUHJvZ3Jlc3NFbGVtZW50LCBVSFRNTFByb2dyZXNzU2hhZG93Um9vdCwgVUhUTUxQcm9ncmVzc1N0eWxlIH07XG4iXSwibmFtZXMiOlsiX19kZWZQcm9wIiwiX19nZXRPd25Qcm9wU3ltYm9scyIsIl9faGFzT3duUHJvcCIsIl9fcHJvcElzRW51bSIsIl9fZGVmTm9ybWFsUHJvcCIsIm9iaiIsImtleSIsInZhbHVlIiwiX19zcHJlYWRWYWx1ZXMiLCJhIiwiYiIsInByb3AiLCJJU19CUk9XU0VSIiwiSVNfQU5EUk9JRCIsIklTX0ZJUkVGT1giLCJJU19JT1MiLCJfYSIsIkZPQ1VTX09VVExJTkUiLCJVSFRNTEVsZW1lbnQiLCJhdHRyIiwiZWwiLCJuYW1lIiwiZXZlbnRzIiwiYWN0aW9uIiwiZWxlbWVudCIsInJlc3QiLCJ0eXBlIiwib24iLCJvZmYiLCJvYnNlcnZlcnMiLCJtdXRhdGlvbk9ic2VydmVyIiwib3B0aW9ucyIsIm9ic2VydmVyIiwiZGV0YWlsIiwiYXNCdXR0b24iLCJldmVudCIsImlzQ2xpY2siLCJnZXRSb290Iiwibm9kZSIsIl9hMiIsInJvb3QiLCJpZCIsInVzZUlkIiwiY3JlYXRlRWxlbWVudCIsInRhZ05hbWUiLCJ0ZXh0MiIsImF0dHJzIiwidmFsIiwiY3VzdG9tRWxlbWVudHMiLCJpbnN0YW5jZSIsImdldExhYmVsIiwibGFiZWwiLCJpZDIiLCJhY2MiLCJlbDIiLCJfYTMiLCJMSVZFIiwiTElWRV9TUl9GSVgiLCJzcGVhayIsInNldFZhbHVlIiwiaW5wdXQiLCJkYXRhIiwiX2IiLCJwcm90byIsIklTX1BSRVNTIiwiaXNNb3VzZURvd24iLCJVSFRNTENvbWJvYm94U3R5bGUiLCJFVkVOVFMiLCJFVkVOVF9PTkNFIiwiSVNfRklSRUZPWF9ERVNLVE9QIiwiSVNfTU9CSUxFIiwiTU9ESUZJRUQiLCJGQUxTRSIsIlRFWFRTIiwiVUhUTUxDb21ib2JveEVsZW1lbnQiLCJyZW5kZXIiLCJzeW5jSW5wdXRWYWx1ZSIsIl8iLCJ0YXJnZXQiLCJpc0Rpc2FibGVkIiwib25CbHVyIiwib25DbGljayIsIm9uRm9jdXMiLCJvbklucHV0Iiwib25LZXlEb3duIiwidGFnIiwidGV4dCIsImlzRGF0YSIsImNvbnRyb2wiLCJzZWxmIiwiX2ZvY3VzIiwiX3RleHRzIiwiaXRlbXMiLCJsaXN0IiwibXVsdGlwbGUiLCJwcmV2IiwibmV4dCIsImVkaXRzIiwiYWRkZWROb2RlcyIsInJlbW92ZWROb2RlcyIsInNob3VsZEFubm91bmNlIiwiYXJpYUV4cGFuZGVkIiwiaW5wdXRNb2RlIiwibmV4dEZvY3VzIiwiaXNSZW1vdmUiLCJpZHgiLCJzZWxlY3QiLCJyZW1vdmUiLCJpdGVtMiIsIm9wdGlvbiIsImxhYmVsMiIsImFyaWEiLCJvcHQiLCJpdGVtIiwic3luY0NsZWFyV2l0aElucHV0Iiwic3luY09wdGlvbnNXaXRoSXRlbXMiLCJfc3BlYWsiLCJ2YWx1ZXMiLCJkaXNwYXRjaE1hdGNoIiwiY2hhbmdlIiwiY3JlYXRhYmxlIiwicXVlcnkiLCJtYXRjaCIsIm8iLCJkaXNwYXRjaENoYW5nZSIsInJlbW92YWJsZSIsImFkZCIsImkiLCJvbkJsdXJyZWQiLCJ4IiwieSIsImNsZWFyIiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwicmVwZWF0IiwiaXNDb250cm9sIiwiaW5UZXh0IiwiaW5kZXgiLCJmb3JtIiwiU0FGRV9MQUJFTExFREJZIiwiRElTUExBWV9CTE9DSyIsImF0dGFjaFN0eWxlIiwiY3NzIiwiVUhUTUxUYWJzU3R5bGUiLCJVSFRNTFRhYkxpc3RTdHlsZSIsIlVIVE1MVGFiUGFuZWxTdHlsZSIsIlVIVE1MVGFiU3R5bGUiLCJBUklBX0NPTlRST0xTIiwiQVJJQV9TRUxFQ1RFRCIsIlVIVE1MVGFic0VsZW1lbnQiLCJxdWVyeVdpdGhvdXROZXN0ZWQiLCJnZXRTZWxlY3RlZEluZGV4Iiwic2V0U2VsZWN0ZWQiLCJVSFRNTFRhYkxpc3RFbGVtZW50IiwidGFiIiwidGFicyIsIlNLSVBfQVRUUl9DSEFOR0UiLCJVSFRNTFRhYkVsZW1lbnQiLCJwYW5lbHMiLCJuZXh0UGFuZWwiLCJnZXRQYW5lbCIsInBhbmVsIiwidGFibGlzdCIsInRhYkxpc3QiLCJVSFRNTFRhYlBhbmVsRWxlbWVudCIsImhpZGRlbiIsImlzRm9jdXNhYmxlIiwibWluIiwibWF4Iiwicm91bmQiLCJmbG9vciIsImNyZWF0ZUNvb3JkcyIsInYiLCJvcHBvc2l0ZVNpZGVNYXAiLCJvcHBvc2l0ZUFsaWdubWVudE1hcCIsImNsYW1wIiwic3RhcnQiLCJlbmQiLCJldmFsdWF0ZSIsInBhcmFtIiwiZ2V0U2lkZSIsInBsYWNlbWVudCIsImdldEFsaWdubWVudCIsImdldE9wcG9zaXRlQXhpcyIsImF4aXMiLCJnZXRBeGlzTGVuZ3RoIiwieUF4aXNTaWRlcyIsImdldFNpZGVBeGlzIiwiZ2V0QWxpZ25tZW50QXhpcyIsImdldEFsaWdubWVudFNpZGVzIiwicmVjdHMiLCJydGwiLCJhbGlnbm1lbnQiLCJhbGlnbm1lbnRBeGlzIiwibGVuZ3RoIiwibWFpbkFsaWdubWVudFNpZGUiLCJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsImdldEV4cGFuZGVkUGxhY2VtZW50cyIsIm9wcG9zaXRlUGxhY2VtZW50IiwiZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQiLCJsclBsYWNlbWVudCIsInJsUGxhY2VtZW50IiwidGJQbGFjZW1lbnQiLCJidFBsYWNlbWVudCIsImdldFNpZGVMaXN0Iiwic2lkZSIsImlzU3RhcnQiLCJnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzIiwiZmxpcEFsaWdubWVudCIsImRpcmVjdGlvbiIsImV4cGFuZFBhZGRpbmdPYmplY3QiLCJwYWRkaW5nIiwiZ2V0UGFkZGluZ09iamVjdCIsInJlY3RUb0NsaWVudFJlY3QiLCJyZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudCIsIl9yZWYiLCJyZWZlcmVuY2UiLCJmbG9hdGluZyIsInNpZGVBeGlzIiwiYWxpZ25MZW5ndGgiLCJpc1ZlcnRpY2FsIiwiY29tbW9uWCIsImNvbW1vblkiLCJjb21tb25BbGlnbiIsImNvb3JkcyIsImNvbXB1dGVQb3NpdGlvbiIsImNvbmZpZyIsInN0cmF0ZWd5IiwibWlkZGxld2FyZSIsInBsYXRmb3JtIiwidmFsaWRNaWRkbGV3YXJlIiwic3RhdGVmdWxQbGFjZW1lbnQiLCJtaWRkbGV3YXJlRGF0YSIsInJlc2V0Q291bnQiLCJmbiIsIm5leHRYIiwibmV4dFkiLCJyZXNldCIsImRldGVjdE92ZXJmbG93Iiwic3RhdGUiLCJfYXdhaXQkcGxhdGZvcm0kaXNFbGUiLCJlbGVtZW50cyIsImJvdW5kYXJ5Iiwicm9vdEJvdW5kYXJ5IiwiZWxlbWVudENvbnRleHQiLCJhbHRCb3VuZGFyeSIsInBhZGRpbmdPYmplY3QiLCJjbGlwcGluZ0NsaWVudFJlY3QiLCJvZmZzZXRQYXJlbnQiLCJvZmZzZXRTY2FsZSIsImVsZW1lbnRDbGllbnRSZWN0IiwiZmxpcCIsIl9taWRkbGV3YXJlRGF0YSRhcnJvdyIsIl9taWRkbGV3YXJlRGF0YSRmbGlwIiwiaW5pdGlhbFBsYWNlbWVudCIsImNoZWNrTWFpbkF4aXMiLCJjaGVja0Nyb3NzQXhpcyIsInNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyIsImZhbGxiYWNrU3RyYXRlZ3kiLCJmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uIiwiZGV0ZWN0T3ZlcmZsb3dPcHRpb25zIiwiaW5pdGlhbFNpZGVBeGlzIiwiaXNCYXNlUGxhY2VtZW50IiwiZmFsbGJhY2tQbGFjZW1lbnRzIiwiaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiIsInBsYWNlbWVudHMiLCJvdmVyZmxvdyIsIm92ZXJmbG93cyIsIm92ZXJmbG93c0RhdGEiLCJzaWRlcyIsIl9taWRkbGV3YXJlRGF0YSRmbGlwMiIsIl9vdmVyZmxvd3NEYXRhJGZpbHRlciIsIm5leHRJbmRleCIsIm5leHRQbGFjZW1lbnQiLCJkIiwicmVzZXRQbGFjZW1lbnQiLCJfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIyIiwiY3VycmVudFNpZGVBeGlzIiwic2hpZnQiLCJsaW1pdGVyIiwiY3Jvc3NBeGlzIiwibWFpbkF4aXMiLCJtYWluQXhpc0Nvb3JkIiwiY3Jvc3NBeGlzQ29vcmQiLCJtaW5TaWRlIiwibWF4U2lkZSIsImxpbWl0ZWRDb29yZHMiLCJzaXplIiwiX3N0YXRlJG1pZGRsZXdhcmVEYXRhIiwiX3N0YXRlJG1pZGRsZXdhcmVEYXRhMiIsImFwcGx5IiwiaXNZQXhpcyIsImhlaWdodFNpZGUiLCJ3aWR0aFNpZGUiLCJtYXhpbXVtQ2xpcHBpbmdIZWlnaHQiLCJtYXhpbXVtQ2xpcHBpbmdXaWR0aCIsIm92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0Iiwib3ZlcmZsb3dBdmFpbGFibGVXaWR0aCIsIm5vU2hpZnQiLCJhdmFpbGFibGVIZWlnaHQiLCJhdmFpbGFibGVXaWR0aCIsInhNaW4iLCJ4TWF4IiwieU1pbiIsInlNYXgiLCJuZXh0RGltZW5zaW9ucyIsImhhc1dpbmRvdyIsImdldE5vZGVOYW1lIiwiaXNOb2RlIiwiZ2V0V2luZG93IiwiX25vZGUkb3duZXJEb2N1bWVudCIsImdldERvY3VtZW50RWxlbWVudCIsImlzRWxlbWVudCIsImlzSFRNTEVsZW1lbnQiLCJpc1NoYWRvd1Jvb3QiLCJpbnZhbGlkT3ZlcmZsb3dEaXNwbGF5VmFsdWVzIiwiaXNPdmVyZmxvd0VsZW1lbnQiLCJvdmVyZmxvd1giLCJvdmVyZmxvd1kiLCJkaXNwbGF5IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInRhYmxlRWxlbWVudHMiLCJpc1RhYmxlRWxlbWVudCIsInRvcExheWVyU2VsZWN0b3JzIiwiaXNUb3BMYXllciIsInNlbGVjdG9yIiwidHJhbnNmb3JtUHJvcGVydGllcyIsIndpbGxDaGFuZ2VWYWx1ZXMiLCJjb250YWluVmFsdWVzIiwiaXNDb250YWluaW5nQmxvY2siLCJlbGVtZW50T3JDc3MiLCJ3ZWJraXQiLCJpc1dlYktpdCIsImdldENvbnRhaW5pbmdCbG9jayIsImN1cnJlbnROb2RlIiwiZ2V0UGFyZW50Tm9kZSIsImlzTGFzdFRyYXZlcnNhYmxlTm9kZSIsImxhc3RUcmF2ZXJzYWJsZU5vZGVOYW1lcyIsImdldE5vZGVTY3JvbGwiLCJyZXN1bHQiLCJnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvciIsInBhcmVudE5vZGUiLCJnZXRPdmVyZmxvd0FuY2VzdG9ycyIsInRyYXZlcnNlSWZyYW1lcyIsIl9ub2RlJG93bmVyRG9jdW1lbnQyIiwic2Nyb2xsYWJsZUFuY2VzdG9yIiwiaXNCb2R5Iiwid2luIiwiZnJhbWVFbGVtZW50IiwiZ2V0RnJhbWVFbGVtZW50IiwiZ2V0Q3NzRGltZW5zaW9ucyIsImdldENvbXB1dGVkU3R5bGUkMSIsImhhc09mZnNldCIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0Iiwic2hvdWxkRmFsbGJhY2siLCJ1bndyYXBFbGVtZW50IiwiZ2V0U2NhbGUiLCJkb21FbGVtZW50IiwiJCIsIm5vT2Zmc2V0cyIsImdldFZpc3VhbE9mZnNldHMiLCJzaG91bGRBZGRWaXN1YWxPZmZzZXRzIiwiaXNGaXhlZCIsImZsb2F0aW5nT2Zmc2V0UGFyZW50IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaW5jbHVkZVNjYWxlIiwiaXNGaXhlZFN0cmF0ZWd5IiwiY2xpZW50UmVjdCIsInNjYWxlIiwidmlzdWFsT2Zmc2V0cyIsIm9mZnNldFdpbiIsImN1cnJlbnRXaW4iLCJjdXJyZW50SUZyYW1lIiwiaWZyYW1lU2NhbGUiLCJpZnJhbWVSZWN0IiwiZ2V0V2luZG93U2Nyb2xsQmFyWCIsImxlZnRTY3JvbGwiLCJnZXRIVE1MT2Zmc2V0IiwiZG9jdW1lbnRFbGVtZW50Iiwic2Nyb2xsIiwiaHRtbFJlY3QiLCJjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCIsInRvcExheWVyIiwib2Zmc2V0cyIsImlzT2Zmc2V0UGFyZW50QW5FbGVtZW50Iiwib2Zmc2V0UmVjdCIsImh0bWxPZmZzZXQiLCJnZXRDbGllbnRSZWN0cyIsImdldERvY3VtZW50UmVjdCIsImh0bWwiLCJib2R5IiwiU0NST0xMQkFSX01BWCIsImdldFZpZXdwb3J0UmVjdCIsInZpc3VhbFZpZXdwb3J0IiwidmlzdWFsVmlld3BvcnRCYXNlZCIsIndpbmRvd1Njcm9sbGJhclgiLCJkb2MiLCJib2R5U3R5bGVzIiwiYm9keU1hcmdpbklubGluZSIsImNsaXBwaW5nU3RhYmxlU2Nyb2xsYmFyV2lkdGgiLCJhYnNvbHV0ZU9yRml4ZWQiLCJnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdCIsImdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvciIsImNsaXBwaW5nQW5jZXN0b3IiLCJoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IiLCJzdG9wTm9kZSIsImdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyIsImNhY2hlIiwiY2FjaGVkUmVzdWx0IiwiY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUiLCJlbGVtZW50SXNGaXhlZCIsImNvbXB1dGVkU3R5bGUiLCJjdXJyZW50Tm9kZUlzQ29udGFpbmluZyIsImFuY2VzdG9yIiwiZ2V0Q2xpcHBpbmdSZWN0IiwiY2xpcHBpbmdBbmNlc3RvcnMiLCJmaXJzdENsaXBwaW5nQW5jZXN0b3IiLCJjbGlwcGluZ1JlY3QiLCJhY2NSZWN0IiwiZ2V0RGltZW5zaW9ucyIsImdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50Iiwic2V0TGVmdFJUTFNjcm9sbGJhck9mZnNldCIsImlzU3RhdGljUG9zaXRpb25lZCIsImdldFRydWVPZmZzZXRQYXJlbnQiLCJwb2x5ZmlsbCIsInJhd09mZnNldFBhcmVudCIsImdldE9mZnNldFBhcmVudCIsInN2Z09mZnNldFBhcmVudCIsImdldEVsZW1lbnRSZWN0cyIsImdldE9mZnNldFBhcmVudEZuIiwiZ2V0RGltZW5zaW9uc0ZuIiwiZmxvYXRpbmdEaW1lbnNpb25zIiwiaXNSVEwiLCJyZWN0c0FyZUVxdWFsIiwib2JzZXJ2ZU1vdmUiLCJvbk1vdmUiLCJpbyIsInRpbWVvdXRJZCIsImNsZWFudXAiLCJfaW8iLCJyZWZyZXNoIiwic2tpcCIsInRocmVzaG9sZCIsImVsZW1lbnRSZWN0Rm9yUm9vdE1hcmdpbiIsImluc2V0VG9wIiwiaW5zZXRSaWdodCIsImluc2V0Qm90dG9tIiwiaW5zZXRMZWZ0IiwiaXNGaXJzdFVwZGF0ZSIsImhhbmRsZU9ic2VydmUiLCJlbnRyaWVzIiwicmF0aW8iLCJhdXRvVXBkYXRlIiwidXBkYXRlIiwiYW5jZXN0b3JTY3JvbGwiLCJhbmNlc3RvclJlc2l6ZSIsImVsZW1lbnRSZXNpemUiLCJsYXlvdXRTaGlmdCIsImFuaW1hdGlvbkZyYW1lIiwicmVmZXJlbmNlRWwiLCJhbmNlc3RvcnMiLCJjbGVhbnVwSW8iLCJyZW9ic2VydmVGcmFtZSIsInJlc2l6ZU9ic2VydmVyIiwiZmlyc3RFbnRyeSIsIl9yZXNpemVPYnNlcnZlciIsImZyYW1lSWQiLCJwcmV2UmVmUmVjdCIsImZyYW1lTG9vcCIsIm5leHRSZWZSZWN0IiwiX3Jlc2l6ZU9ic2VydmVyMiIsInNoaWZ0JDEiLCJmbGlwJDEiLCJzaXplJDEiLCJtZXJnZWRPcHRpb25zIiwicGxhdGZvcm1XaXRoQ2FjaGUiLCJjb21wdXRlUG9zaXRpb24kMSIsInIiLCJlIiwidCIsImYiLCJuIiwiY2xzeCIsIlFVSUNLX0VWRU5UIiwiZGVib3VuY2UiLCJjYWxsYmFjayIsImRlbGF5IiwidGltZXIiLCJhcmdzIiwiVVVJRCIsIlVOQklORCIsIm9uTG9hZGVkIiwicnVuIiwidW5iaW5kIiwiQU5DSE9SRUQiLCJhbmNob3JQb3NpdGlvbiIsImFuY2hvciIsImNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIiLCJxdWV1ZSIsIm9uRnJhbWUiLCJvblRpbWVyIiwiTVVUQVRPUlMiLCJvbk11dGF0aW9uIiwiY2xhc3NOYW1lIiwiZWxlbXMiLCJtdXRhdG9yIiwiaXNJbnB1dExpa2UiLCJNVERTRWxlbWVudCIsIkNTU19CUkVBRENSVU1CUyIsInN0eWxlcyIsIkNTU19DQVJEIiwiQ1NTX0NISVAiLCJDU1NfSEVMUFRFWFQiLCJDU1NfUEFHSU5BVElPTiIsIkNMSUNLUyIsIk1BVE9NTyIsIkJBTk5FUiIsIkJBTk5FUl9VUkwiLCJhbmFseXRpY3MiLCJjb25zZW50IiwiZW5hYmxlZCIsIm1hdG9tb0lkIiwibWF0b21vVGFnTWFuYWdlcklkIiwicmVuZGVyQmFubmVyIiwic3JjIiwidXJsIiwidGl0bGUiLCJjYXRlZ29yeSIsInJlc3VsdHMiLCJiYW5uZXIiLCJvbkNsb3NlIiwiaGFuZGxlVHJhY2siLCJwcm9jZXNzVHJhY2siLCJoZWFkaW5nIiwiZ3JvdXAiLCJwb3BvdmVyIiwib3BlbiIsInN0eWxlIiwiaGVhZCIsInNoZWV0IiwiZm9yY2UiLCJDU1NfQVBQIiwiQ1NTX1NUSUNLWSIsIkNTU19UT0dHTEUiLCJDU1NfU0lERUJBUiIsInVzZVRyYW5zaXRpb24iLCJ0b2dnbGVBcHBFeHBhbmRlZCIsImhhbmRsZUFwcFRvZ2dsZUNsaWNrIiwic3RvcCIsImxpbmsiLCJjbG9zZVNpZGViYXIiLCJzaWRlYmFyIiwiTUlOX1kiLCJTQ1JPTExfVVAiLCJTVElDSyIsIlNUSUNLX0VMIiwiU1RJQ0tfSCIsIlNUSUNLX1kiLCJTVFVDSyIsIldJTl9IIiwiV0lOX1kiLCJoYW5kbGVNdXRhdGlvbiIsInN0aWNreSIsImhhbmRsZUFwcFNjcm9sbCIsIk5FWFRfWSIsIk5FWFRfVVAiLCJnZXRTdGVwcyIsIm5vdyIsInNob3ciLCJvZmZzZXQiLCJwYWdlcyIsInBhZ2luYXRpb24iLCJjdXJyZW50IiwidG90YWwiLCJwYWdlIiwidG9hc3QiLCJjb250ZW50IiwiZGlhbG9nIiwiaGFuZGxlVG9hc3RDbG9zZSIsImFuaW1hdGlvbk5hbWUiLCJwcm9wcyIsImxvYWRpbmciLCJzdWNjZXNzIiwiZXJyb3IiLCJfZXJyb3IiLCJoYW5kbGVCcmVhZGNydW1ic011dGF0aW9uIiwiYnJlYWRjcnVtYnMiLCJicmVhZGN1bWJzIiwiY3J1bWIiLCJ0b0F4aXMiLCJpc1N0YWNrZWQiLCJhbGwiLCJyb3ciLCJzdW0iLCJudW0iLCJkaWdpdHMiLCJzdGVwIiwiZ3JvdXBzIiwic3RlcHMiLCJnZXROdW0iLCJ0b0JhcnMiLCJ0b29sdGlwIiwibnVtYmVyIiwidG9MaW5lcyIsInZhcmlhbnQiLCJsaW5lQ29udGFpbmVyIiwicGF0aERlZmludGlvbiIsInRvUGF0aCIsImxpbmUiLCJwYXRoIiwibGluZVNoYWRlIiwiY29sIiwicG9pbnRzIiwicyIsInNtb290aCIsImF4IiwiYXkiLCJieCIsImJ5Iiwic3ViIiwiY3NYIiwiY3NZIiwiY2VYIiwiY2VZIiwidG9QaWVzIiwicGllIiwicmFkaXVzIiwiaW5uZXIiLCJ0b3QiLCJ0ZCIsImxhcmdlQXJjIiwiYTAiLCJhMSIsIngwIiwieTAiLCJ4MSIsInkxIiwiVE9PTFRJUF9JRCIsIlRPT0xUSVAiLCJNVERTQ2hhcnQiLCJ0b0RhdGEiLCJsZWdlbmQiLCJ0YWJsZSIsInRyIiwiVE9PTFRJUF9URVhUIiwib25Nb3ZlVG9vbHRpcCIsInRpcCIsInJvd0luZGV4IiwiY2VsbCIsImNlbGxJbmRleCIsIkNTU19ESUFMT0ciLCJESUFMT0dTIiwiaGFuZGxlTW9kYWwiLCJoYW5kbGVEaWFsb2dDbGljayIsImhhbmRsZUVycm9zdW1tYXJ5SW5qZWN0IiwiZmlyc3QiLCJESVNBQkxFRCIsIlNFTEVDVEVEIiwiVUhUTUxPcHRpb25FbGVtZW50IiwiVUhUTUxEYXRhTGlzdFN0eWxlIiwiTElWRV9USU1FUiIsIklOUFVUX0RFQk9VTkNFIiwiRVZFTlRTX0lOUFVUIiwiVUhUTUxEYXRhTGlzdEVsZW1lbnQiLCJkaXNjb25uZWN0SW5wdXQiLCJfcHJldiIsInNldHVwSW5wdXQiLCJzZXRFeHBhbmRlZCIsIl9jIiwiaXNQb3BvdmVyIiwiaXNJbnB1dCIsInJlbGF0ZWRUYXJnZXQiLCJhbHRLZXkiLCJjdHJsS2V5Iiwic2hpZnRLZXkiLCJtZXRhS2V5IiwiaXNFc2NhcGUiLCJfcm9vdCIsIl9pbnB1dCIsImZpbHRlciIsInZpc2libGUiLCJDU1NfRklFTEQiLCJDU1NfVkFMSURBVElPTlMiLCJDU1NfVkFMSURBVElPTiIsImdldFRleHQiLCJoYW5kbGVGaWVsZE11dGF0aW9uIiwiZmllbGRzIiwidmFsaWRhdGUiLCJmaWVsZCIsImxhYmVscyIsImRlc2NzIiwidmFsaWRzIiwiY29tYm9ib3giLCJ2YWxpZCIsImRlc2MiLCJyZW5kZXJDb21ib2JveCIsInJlbmRlckNvdW50ZXIiLCJyZW5kZXJUZXh0YXJlYVNpemUiLCJ0ZXh0YXJlYSIsImxpbWl0IiwicmVtYWluZGVyIiwibmV4dEludmFsaWQiLCJwcmV2SW52YWxpZCIsIm92ZXIiLCJ1bmRlciIsImhhbmRsZUZpZWxkVG9nZ2xlIiwiaGFuZGxlRmllbGRJbnB1dCIsImhhbmRsZUZpZWxkVmFsZGlhdGlvbiIsIkNTU19GSUVMRFNFVCIsIkFSSUFfREVTQyIsIkFSSUFfSU5WQUxJRCIsImhhbmRsZUZpZWxkc2V0TXV0YXRpb24iLCJmaWVsZHNldHMiLCJmaWVsZHNldCIsImlucHV0cyIsInZhbGlkSWQiLCJDU1NfTE9HTyIsImhhbmRsZUxvZ29NdXRhdGlvbiIsImxvZ28iLCJpY29uIiwic3ZnIiwiaXNEb3QiLCJiYWNrIiwiQ1NTX1BPUE9WRVIiLCJDU1NfQVVUTyIsImhhbmRsZVBvcG92ZXJUb2dnbGUiLCJuZXdTdGF0ZSIsImlzQ2xvc2luZyIsImlzQ29udGFpbiIsImhhbmRsZVBvcG92ZXJCZWZvcmV0b2dnbGUiLCJoYW5kbGVQb3BvdmVyTGlua0NsaWNrIiwicG9wIiwiQ1NTX1RBQkxFIiwiSU5URVJBQ1RJVkUiLCJoYW5kbGVUYWJsZU11dGF0aW9uIiwidGFibGVzIiwidGhzIiwidGgiLCJ0Ym9keSIsImhhbmRsZVRhYmxlQ2xpY2siLCJDU1NfVE9BU1QiLCJBVFRSX1NPUlQiLCJoYW5kbGVUb2FzdFN0YXRlIiwibXMiLCJoYW5kbGVUb2FzdENsaWNrIiwiY2xvc2UiLCJDU1NfVE9HR0xFR1JPVVAiLCJoYW5kbGVUb2dnbGVncm91cEtleWRvd24iLCJtb3ZlIiwiREVTQ1JJQkVEQlkiLCJFU0MiLCJMQUJFTExFREJZIiwiUE9TSVRJT05fQ1NTX1BST1BFUlRZIiwiVEhST1RUTEVfREVMQVkiLCJBTkNIT1IiLCJMQVNUX0NBTEwiLCJUSFJPVFRMRSIsImhhbmRsZVRvb2x0aXBNb3ZlIiwid2FpdCIsImhhbmRsZVRvb2x0aXBNb3ZlVGhyb3R0bGVkIiwicG9zaXRpb24iLCJoYWRMYWJlbCIsImhhc0xhYmVsIiwiVUhUTUxEZXRhaWxzU3R5bGUiLCJVSFRNTERldGFpbHNFbGVtZW50IiwiaGlkZSIsInVEZXRhaWxzTGlzdCIsInVEZXRhaWxzIiwic3VtbWFyeSIsImlzU3VtbWFyeSIsIlVIVE1MU3VtbWFyeUVsZW1lbnQiLCJVSFRNTFByb2dyZXNzU3R5bGUiLCJVSFRNTFByb2dyZXNzRWxlbWVudCIsInJvbGVJbWFnZSIsInBlcmNlbnRhZ2UiLCJnZXROdW1iZXIiLCJzZXROdW1iZXIiLCJpc051bWVyaWMiXSwibWFwcGluZ3MiOiJrQ0FBQSxJQUFJQSxHQUFZLE9BQU8sZUFDbkJDLEdBQXNCLE9BQU8sc0JBQzdCQyxHQUFlLE9BQU8sVUFBVSxlQUNoQ0MsR0FBZSxPQUFPLFVBQVUscUJBQ2hDQyxHQUFrQixDQUFDQyxFQUFLQyxFQUFLQyxJQUFVRCxLQUFPRCxFQUFNTCxHQUFVSyxFQUFLQyxFQUFLLENBQUUsV0FBWSxHQUFNLGFBQWMsR0FBTSxTQUFVLEdBQU0sTUFBQUMsQ0FBSyxDQUFFLEVBQUlGLEVBQUlDLENBQUcsRUFBSUMsRUFDdEpDLEdBQWlCLENBQUNDLEVBQUdDLElBQU0sQ0FDN0IsUUFBU0MsS0FBUUQsSUFBTUEsRUFBSSxDQUFBLEdBQ3JCUixHQUFhLEtBQUtRLEVBQUdDLENBQUksR0FDM0JQLEdBQWdCSyxFQUFHRSxFQUFNRCxFQUFFQyxDQUFJLENBQUMsRUFDcEMsR0FBSVYsR0FDRixRQUFTVSxLQUFRVixHQUFvQlMsQ0FBQyxFQUNoQ1AsR0FBYSxLQUFLTyxFQUFHQyxDQUFJLEdBQzNCUCxHQUFnQkssRUFBR0UsRUFBTUQsRUFBRUMsQ0FBSSxDQUFDLEVBRXRDLE9BQU9GLENBQ1QsRUFHSUcsR0FBYSxPQUFPLE9BQVcsS0FBZSxPQUFPLE9BQU8sU0FBYSxLQUFlLE9BQU8sT0FBTyxVQUFjLElBQ3BIQyxHQUFhRCxJQUFjLFdBQVcsS0FBSyxVQUFVLFNBQVMsRUFDOURFLEdBQWFGLElBQWMsV0FBVyxLQUFLLFVBQVUsU0FBUyxFQUM5REcsR0FBU0gsSUFBYyxtQkFBbUIsS0FBSyxVQUFVLFNBQVMsRUFDbEVJLEdBQ0pKLElBQ0EsUUFBUSxPQUFPSSxHQUFLLFVBQVUsZ0JBQWtCLEtBQU8sT0FBU0EsR0FBRyxXQUFhLFVBQVUsUUFBUSxFQUNsRyxJQUFJQyxHQUFnQiwrRkFDaEJDLEdBQWUsT0FBTyxZQUFnQixJQUFjLEtBQU0sQ0FDOUQsRUFBSSxZQUNKLFNB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
|