@mattilsynet/design 1.3.6 → 1.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/mtds/app/app-observer.js +23 -28
- package/mtds/app/app-observer.js.map +1 -1
- package/mtds/app/app-toggle.js +10 -26
- package/mtds/app/app-toggle.js.map +1 -1
- package/mtds/app/app-toggle2.js +26 -14
- package/mtds/app/app-toggle2.js.map +1 -1
- package/mtds/app/app.js +1 -1
- package/mtds/dialog/dialog-observer.js +14 -15
- package/mtds/dialog/dialog-observer.js.map +1 -1
- package/mtds/errorsummary/errorsummary-observer.js +7 -8
- package/mtds/errorsummary/errorsummary-observer.js.map +1 -1
- package/mtds/external/@u-elements/u-combobox/dist/u-combobox.js +146 -132
- package/mtds/external/@u-elements/u-combobox/dist/u-combobox.js.map +1 -1
- package/mtds/external/@u-elements/u-datalist/dist/u-datalist.js +80 -79
- package/mtds/external/@u-elements/u-datalist/dist/u-datalist.js.map +1 -1
- package/mtds/external/@u-elements/u-details/dist/u-details.js +1 -1
- package/mtds/external/@u-elements/u-details/dist/u-details.js.map +1 -1
- package/mtds/external/@u-elements/u-progress/dist/u-progress.js +2 -2
- package/mtds/external/@u-elements/u-progress/dist/u-progress.js.map +1 -1
- package/mtds/external/@u-elements/u-tabs/dist/u-tabs.js +3 -3
- package/mtds/external/@u-elements/u-tabs/dist/u-tabs.js.map +1 -1
- package/mtds/field/field-observer.js +29 -34
- package/mtds/field/field-observer.js.map +1 -1
- package/mtds/field/field.d.ts +3 -0
- package/mtds/field/field.js +45 -45
- package/mtds/field/field.js.map +1 -1
- package/mtds/field/field.stories.d.ts +2 -1
- package/mtds/fieldset/fieldset-observer.js +10 -11
- package/mtds/fieldset/fieldset-observer.js.map +1 -1
- package/mtds/illustrations/index.json +17 -0
- package/mtds/illustrations/person-alert.svg +1 -0
- package/mtds/index.iife.js +7 -7
- package/mtds/logo/logo-observer.js +9 -9
- package/mtds/logo/logo-observer.js.map +1 -1
- package/mtds/package.json.js +1 -1
- package/mtds/popover/popover-observer.js +15 -17
- package/mtds/popover/popover-observer.js.map +1 -1
- package/mtds/popover/popover.d.ts +2 -1
- package/mtds/popover/popover.js.map +1 -1
- package/mtds/styles.css +1 -1
- package/mtds/styles.json +20 -20
- package/mtds/styles.module.css.js +88 -86
- package/mtds/styles.module.css.js.map +1 -1
- package/mtds/togglegroup/togglegroup-observer.js +9 -10
- package/mtds/togglegroup/togglegroup-observer.js.map +1 -1
- package/mtds/tooltip/tooltip-observer.js +20 -21
- package/mtds/tooltip/tooltip-observer.js.map +1 -1
- package/mtds/utils.d.ts +13 -0
- package/mtds/utils.js +68 -64
- package/mtds/utils.js.map +1 -1
- package/package.json +17 -15
- package/mtds/helptext/helptext-observer.d.ts +0 -1
- package/mtds/steps/steps-observer.d.ts +0 -1
package/mtds/index.iife.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
var mtds=function(
|
|
1
|
+
var mtds=function($){"use strict";var Et=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",pn=Et&&/android/i.test(navigator.userAgent),ee;Et&&/^Mac/i.test(((ee=navigator.userAgentData)==null?void 0:ee.platform)||navigator.platform);var hn=`${pn?"data":"aria"}-labelledby`,$t=":host(:not([hidden])) { display: block }",Z=typeof HTMLElement>"u"?class{}:HTMLElement;function S(t,e,o){var n;return o===void 0?(n=t.getAttribute(e))!=null?n:null:(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var oe=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},mn=(t,...e)=>oe("add",t,e),bn=(t,...e)=>oe("remove",t,e),tt=(t,e)=>t.attachShadow({mode:"open"}).append(ae("slot"),ae("style",e)),et=new WeakMap,ne=(t,e)=>{if(e===void 0)return et.get(t);try{et.get(t).disconnect(),et.delete(t)}catch{}if(e){const o=new MutationObserver(n=>t.handleEvent({type:"mutation",detail:n}));o.observe(t,e),et.set(t,o)}},vn=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},ie=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},_n=0,se=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++_n).toString(32)}`),t.id):"",ae=(t,e,o)=>{const n=document.createElement(t);return e&&(n.textContent=e),n},ot={define:(t,e)=>!Et||window.customElements.get(t)||window.customElements.define(t,e)},nt="aria-controls",U="aria-selected",re=class extends Z{constructor(){super(),tt(this,$t)}get tabList(){return it("u-tablist",this)[0]||null}get selectedIndex(){return st(this.tabs)}set selectedIndex(t){xt(this.tabs[t])}get tabs(){return it("u-tab",this)}get panels(){return it("u-tabpanel",this)}},le=class extends Z{constructor(){super(),tt(this,$t)}connectedCallback(){S(this,"role","tablist"),mn(this,"click,keydown",this),ne(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){bn(this,"click,keydown",this),ne(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s?.setAttribute(U,"true")}const{key:e}=t,o=[...this.tabs],n=o.findIndex(s=>s.contains(t.target));let i=n;if(!(t.defaultPrevented||n===-1)&&(t.type==="click"&&xt(o[n]),t.type==="keydown"&&!vn(t))){if(e==="ArrowDown"||e==="ArrowRight")i=(n+1)%o.length;else if(e==="ArrowUp"||e==="ArrowLeft")i=(n||o.length)-1;else if(e==="End")i=o.length-1;else if(e==="Home")i=0;else if(e==="Tab")i=st(o);else return;setTimeout(()=>{o[n].tabIndex=-1,o[i].tabIndex=0}),e!=="Tab"&&(t.preventDefault(),o[i].focus())}}get tabsElement(){return this.closest("u-tabs")}get tabs(){return this.querySelectorAll("u-tab")}get selectedIndex(){return st(this.tabs)}set selectedIndex(t){xt(this.tabs[t])}},St=!1,ce=class extends Z{static get observedAttributes(){return["id",U,nt]}constructor(){super(),tt(this,":host(:not([hidden])) { cursor: pointer; display: inline-block }")}connectedCallback(){S(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!St&&this.selected&&this.tabList){St=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=it("u-tabpanel",this.tabsElement||this),o=Tt(this,e[t.indexOf(this)]);o&&S(o,hn,se(this)),t.forEach((n,i)=>{const s=Tt(n,e[i]);n.tabIndex=n===this?0:-1,S(n,U,`${n===this}`),s&&(s.hidden=s!==o),s&&S(n,nt,s.id)}),St=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return t?.nodeName==="U-TABLIST"?t:null}get selected(){return S(this,U)==="true"}set selected(t){S(this,U,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return Tt(this)}},de=class extends Z{static get observedAttributes(){return["hidden"]}constructor(){super(),tt(this,$t)}connectedCallback(){S(this,"role","tabpanel"),this.hidden=st(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){this.hidden||gn(this.firstChild)?S(this,"tabindex",null):this.tabIndex=0}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${nt}="${this.id}"]`;return ie(this).querySelectorAll(t)}},it=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),Tt=(t,e)=>{const o=S(t,nt)||se(e),n=ie(t).getElementById(o);return n?.nodeName==="U-TABPANEL"?n:null},st=t=>[...t].findIndex(e=>S(e,U)==="true"),xt=t=>t&&S(t,"aria-selected","true"),gn=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');ot.define("u-tabs",re),ot.define("u-tablist",le),ot.define("u-tab",ce),ot.define("u-tabpanel",de);var yn=Object.defineProperty,ue=Object.getOwnPropertySymbols,wn=Object.prototype.hasOwnProperty,En=Object.prototype.propertyIsEnumerable,fe=(t,e,o)=>e in t?yn(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,$n=(t,e)=>{for(var o in e||(e={}))wn.call(e,o)&&fe(t,o,e[o]);if(ue)for(var o of ue(e))En.call(e,o)&&fe(t,o,e[o]);return t},j=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",pe=j&&/android/i.test(navigator.userAgent),Sn=j&&/firefox/i.test(navigator.userAgent),Tn=j&&/iPad|iPhone|iPod/.test(navigator.userAgent),he;j&&/^Mac/i.test(((he=navigator.userAgentData)==null?void 0:he.platform)||navigator.platform);var xn="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",Cn=typeof HTMLElement>"u"?class{}:HTMLElement;function f(t,e,o){return o===void 0?t.getAttribute(e):(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var me=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},at=(t,...e)=>me("add",t,e),kn=(t,...e)=>me("remove",t,e),rt=new WeakMap,Ct=(t,e)=>{if(e===void 0)return rt.get(t);try{rt.get(t).disconnect(),rt.delete(t)}catch{}if(e){const o=new MutationObserver(n=>t.handleEvent({type:"mutation",detail:n}));o.observe(t,e),rt.set(t,o)}},In=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Ln=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},An=0,Mn=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++An).toString(32)}`),t.id):"",lt=(t,e,o)=>{const n=document.createElement(t);if(e&&(n.textContent=e),o)for(const[i,s]of Object.entries(o))f(n,i,s);return n},On={define:(t,e)=>!j||window.customElements.get(t)||window.customElements.define(t,e)},D,Pn=0,kt=t=>{D||(D=lt("div"),D.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",f(D,"aria-live","assertive")),D.isConnected||document.body.append(D),t&&(D.textContent=`${t}${Pn++%2?" ":""}`)},be=(t,e,o="")=>{var n,i;const s={bubbles:!0,composed:!0,data:e,inputType:o},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(n=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:n.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},It=!1,Lt=t=>(t?.type==="mouseup"&&(It=!1),t?.type==="mousedown"&&(It=!0,at(document,"mouseup",Lt,{once:!0})),It),ve="beforeinput,blur,focus,click,input,keydown,mousedown",_e={once:!0,passive:!0},Dn=Sn&&!pe,Nn=pe||Tn,ct="false",dt={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},ut=class extends Cn{constructor(){super(),this._itemText="",this._speak="",this._texts=$n({},dt),this._value="",this.attachShadow({mode:"open"}).append(lt("slot"),lt("style",`:host(:not([hidden])) { display: block; cursor: pointer; -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 }
|
|
8
|
-
::slotted(data:focus) { ${wo} }`))}static get observedAttributes(){return Object.keys(at).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=To(this),$t(this,ue,this,!0),St(this,{childList:!0,subtree:!0}),setTimeout(lt,0,this),setTimeout(Ct,0,this)}attributeChangedCallback(t,e,n){const o=t.split("data-sr-")[1];at[o]&&(this._texts[o]=n||at[o])}disconnectedCallback(){St(this,!1),$o(this,ue,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;t.type==="beforeinput"&&(this._value=(e==null?void 0:e.value)||""),t.type==="blur"&&Do(this),t.type==="click"&&No(this,t),t.type==="focus"&&Oo(this,t),t.type==="input"&&Ho(this,t),t.type==="keydown"&&Ro(this,t),t.type==="mousedown"&&(xt=this.contains(e)),t.type==="mouseup"&&(xt=!1),t.type==="mutation"&<(this,t)}get multiple(){var t;return((t=p(this,"data-multiple"))!=null?t:st)!==st}set multiple(t){p(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=p(this,"data-creatable"))!=null?t:st)!==st}set creatable(t){p(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)}},U=t=>{var e;return((e=t==null?void 0:t.textContent)==null?void 0:e.trim())||""},kt=t=>t instanceof HTMLDataElement,lt=(t,e)=>{var n,o;const{_focus:i,_texts:s,items:a,control:r,list:c,multiple:l}=t;let h=`${U((n=r==null?void 0:r.labels)==null?void 0:n[0])}, ${l?a.length?s.found.replace("%d",`${a.length}`):s.empty:""}`;const u=[];for(const{addedNodes:m,removedNodes:I}of(e==null?void 0:e.detail)||[]){for(const T of m)kt(T)&&u.unshift(T);for(const T of I)kt(T)&&u.push(T)}const S=l?u.length===1:u[0]===i;if(i&&r&&S){const m=p(r,"inputmode"),I=kt(i)?r:i;t._speak=`${s[u[0].isConnected?"added":"removed"]} ${U(u[0])}, `,(Lo||i===r)&&Tt(t._speak),r!==I&&(p(r,"aria-expanded",null),p(r,"inputmode","none"),h=" ",r.focus()),setTimeout(()=>{var T;p(r,"aria-expanded","true"),p(r,"inputmode",m),(T=I==null?void 0:I.focus)==null||T.call(I),t._speak="",Io?$t(t,"blur",()=>lt(t),fe):setTimeout(lt,100,t)},100)}let C=0;for(const m of a){const I=U(m),T=m.value||I,Gt=`${t._speak}${I}, ${s.remove}, ${++C} ${s.of} ${a.length}`;p(m,"role","button"),p(m,"value",T),p(m,"tabindex","-1"),p(m,"aria-label",Gt)}!l&&C>1&&console.warn("u-combobox: Multiple <data> found in single mode."),c&&p(c,"aria-multiselectable",`${l}`),r&&p(r,"list",ko(c)),r&&p(r,"aria-label",`${t._speak}${h}`);const A=t.querySelector("select");A&&(A.multiple=l),A&&(A.textContent=""),A==null||A.append(...t.values.map(m=>new Option(m,m,!0,!0))),pe(t),me(t),(o=St(t))==null||o.takeRecords()},pe=t=>{var e;t.clear&&p(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value))},me=t=>{var e;const{_speak:n,options:o=[],values:i}=t;for(const s of o){const a=(e=p(s,"value"))!=null?e:U(s);p(s,"aria-label",n?`${n}${U(s)}`:null),p(s,"selected",i.includes(a)?"":null)}},Ct=t=>{const{multiple:e,control:n,items:o}=t,i=U(o[0]);!e&&n&&i!==n.value&&de(n,i,"insertText")},he=(t,e=!0)=>{var n;const{_texts:o,options:i=[],creatable:s,control:a,items:r,multiple:c}=t,l=((n=a==null?void 0:a.value)==null?void 0:n.trim())||"",h=l.toLowerCase()||null;let u=[...i].find(C=>C.label.trim().toLowerCase()===h);const S={bubbles:!0,cancelable:!0,detail:u};if(t.dispatchEvent(new CustomEvent("beforematch",S)))for(const C of i)C.selected=C===u;if(u=[...i].find(C=>C.selected),me(t),u)return q(t,u,!1,!!e);if(s&&l)return q(t,{value:l},!1);!c&&r[0]&&q(t,r[0],!0,!1),e&&Tt(o.invalid)},q=(t,e,n=!0,o=!0)=>{const{control:i,items:s,multiple:a}=t,r=it("data",e.label||e.value,{value:e.value}),c=[...s].find(u=>u.value===e.value),l={bubbles:!0,cancelable:!0,detail:c||r};if(!(c&&!n)&&t.dispatchEvent(new CustomEvent("beforechange",l))){if(!a)for(const u of[...s])u.remove();c?c.remove():i==null||i.insertAdjacentElement("beforebegin",r),t.dispatchEvent(new CustomEvent("afterchange",l))}o&&setTimeout(Ct,10,t)},Oo=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),Tt()},Do=t=>xt||setTimeout(Po,0,t),Po=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t._focus=void 0,Ct(t))},No=(t,e)=>{const{clientX:n,clientY:o,target:i}=e,{clear:s,control:a,items:r}=t;if(s!=null&&s.contains(i))return a&&de(a,"","deleteContentBackward"),a==null?void 0:a.focus();for(const c of r){const{top:l,right:h,bottom:u,left:S}=c.getBoundingClientRect();if(c.contains(i))return q(t,c);if(o>=l&&o<=u&&n>=S&&n<=h)return c.focus()}i===t&&(a==null||a.focus())},Ho=(t,e)=>{var n;const{options:o=[],control:i,multiple:s}=t,a=((n=i==null?void 0:i.value)==null?void 0:n.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType===Mo:!!a){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const c of o)if(c.value&&c.value===a)return q(t,c,s)}else s||he(t,!1);pe(t)},Ro=(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,h=l&&(i==null?void 0:i.selectionEnd);let u=l?s.length:[...s].indexOf(c);if(l&&a==="Tab"&&o&&!o.hidden&&(e.preventDefault(),o.tabIndex=-1,o.focus(),$t(o,"blur",()=>p(o,"tabindex",null),fe)),!(!l&&So(e)||u===-1)){if(a==="ArrowRight"&&!l)u+=1;else if(a==="ArrowLeft"&&!h)u-=1;else if(a==="Enter"&&l){const S=p(i,"form");return p(i,"form","#"),requestAnimationFrame(()=>p(i,"form",S)),he(t)}else if((a==="Backspace"||a==="Delete")&&!h){if(e.preventDefault(),!r&&s[u])return q(t,s[u]);l&&(u-=1)}else return l||(i==null?void 0:i.focus());e.preventDefault(),(n=s[Math.max(0,u)]||i)==null||n.focus()}};Co.define("u-combobox",rt);const Bo="1.3.6",w={capture:!0,passive:!0},j=typeof window<"u"&&typeof document<"u";function Uo(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function d(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 qo=0;const Fo=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function At(t){return t.id||(t.id=`${Fo}${++qo}`),t.id}const Vo=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},b=(t,...e)=>Vo("add",t,e),L=j?document.createElement("div"):null,ct=new Map,Wo=()=>{for(const[t,e]of ct)e()};L&&(L.style.cssText="position:absolute;padding:1px;top:0;left:0px",b(window,"load,resize,scroll",Wo,w));const F={top:0,right:1,bottom:2,left:3};function D(t,e,n,o){const i=F[n]??Number(n)??F.bottom;if(e===!1||!e.isConnected||!t.isConnected)return ct.delete(t);L!=null&&L.isConnected||document.body.append(L||""),ct.has(t)||ct.set(t,()=>D(t,e,i,o));const s=e instanceof HTMLElement,{offsetWidth:a,offsetHeight:r}=t,c=s?e.offsetWidth:e.clientWidth,l=s?e.offsetHeight:e.clientHeight,{width:h,height:u,left:S,top:C}=e.getBoundingClientRect(),A=Math.round(S-(c-h)/2),m=Math.round(C-(l-u)/2),I=A-a>0,T=c+c+a<window.innerWidth,Gt=m-r>0,ns=m+l+r<window.innerHeight,os=i===F.right&&(o||T)||!I,so=i===F.bottom&&(o||ns)||!Gt,is=Math.min(Math.max(10,A-(a-c)/2),window.innerWidth-a-10),ss=Math.min(Math.max(10,m-(r-l)/2),window.innerHeight-r-10),ao=i===F.top||i===F.bottom;t.style.left=`${Math.round(ao?is:os?A+c:A-a)}px`,t.style.top=`${Math.round(ao?so?m+l:m-r:ss)}px`,L==null||L.style.setProperty("translate",`0px ${Math.round(so?window.scrollY+m+l+r+30:0)}px`)}function be(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 It=new WeakMap,V=(t,e,n)=>{const o=t.getElementsByClassName(e),i=It.get(t)||[];i.length||(It.set(t,i),be((s,a)=>{if(t.isConnected&&(i!=null&&i.length))for(const r of i)r();else a==null||a.disconnect(),It.delete(t)}).observe(t,{attributeFilter:["class"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>n(o))},x=t=>{if(!j)return;const e=()=>requestAnimationFrame(t);document.readyState==="complete"?e():b(window,"load",e)},Lt=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),ve="mattilsynet.matomo.cloud";let Mt=!0;function Yo(t,e={}){if(j){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${ve}/matomo.php`]),document.querySelector('script[src*="matomo.js"]')||document.head.append(Object.assign(document.createElement("script"),{async:!0,src:`https://cdn.matomo.cloud/${ve}/matomo.js`}))),t==="init"){const{matomoId:n,enabled:o=!0}=e;Mt=o,window._paq.push(["setSiteId",n])}if(Mt==="debug")return console.info(`Analytics: "${t}"`,e);if(!(Mt===!1||window.location.hostname==="localhost"))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];window._paq.push(a.filter(r=>r!==void 0))}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)}}const jo=(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},Ko=({current:t=1,total:e=10,show:n=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:jo(t,e,n).map((o,i)=>({current:o===t&&"page",key:`key-${o}-${i}`,page:o}))}),_e="_alert_1bf95_1 _ds-alert_1ymwv_1",ge="_app_1bf95_1",ye="_sticky_1bf95_1",we="_avatar_1bf95_1 _ds-avatar_1ymwv_1",Ee="_badge_1bf95_1",$e="_breadcrumbs_1bf95_1 _ds-breadcrumbs_1ymwv_1",Se="_button_1bf95_1 _ds-button_1ymwv_1",Te="_card_1bf95_1",xe="_group_1bf95_1",ke="_chip_1bf95_1 _ds-chip_1ymwv_1",Ce="_details_1bf95_1 _ds-details_1ymwv_1",Ae="_dialog_1bf95_1 _ds-dialog_1ymwv_1",Ie="_divider_1bf95_1",Le="_errorsummary_1bf95_1 _ds-error-summary_1ymwv_1",Me="__errorsummary_1bf95_1",Oe="_field_1bf95_1 _ds-field_1ymwv_1",De="_affixes_1bf95_1 _ds-field-affixes_1ymwv_1",Pe="_fieldset_1bf95_1 _ds-fieldset_1ymwv_1",Ne="_heading_1bf95_1 _ds-heading_1ymwv_1",He="_ingress_1bf95_1",Re="_muted_1bf95_1",Be="_info_1bf95_1",Ue="_prose_1bf95_1",qe="_helptext_1bf95_1 _ds-focus_1ymwv_1",Fe="_input_1bf95_1 _ds-input_1ymwv_1",Ve="_grid_1bf95_1",We="_flex_1bf95_1",Ye="_link_1bf95_1",je="_logo_1bf95_1",Ke="_pagination_1bf95_1 _ds-pagination_1ymwv_1",Ge="_popover_1bf95_1",Xe="_progress_1bf95_1",ze="__indeterminate_1bf95_1",Qe="_skeleton_1bf95_1 _ds-skeleton_1ymwv_1",Je="__skeleton_1bf95_1",Ze="_spinner_1bf95_1",tn="_steps_1bf95_1",en="_table_1bf95_1 _ds-table_1ymwv_1",nn="__scrollShadow_1bf95_1",on="_tabs_1bf95_1 _ds-tabs_1ymwv_1",sn="__scrollMask_1bf95_1",an="_tag_1bf95_1 _ds-tag_1ymwv_1",rn="_togglegroup_1bf95_1",ln="__tooltip_1bf95_1",cn="_validation_1bf95_1 _ds-validation-message_1ymwv_1",dn="_body_1bf95_153",un="__checked_1bf95_1",g={alert:_e,app:ge,sticky:ye,avatar:we,badge:Ee,breadcrumbs:$e,button:Se,card:Te,group:xe,chip:ke,details:Ce,dialog:Ae,divider:Ie,errorsummary:Le,_errorsummary:Me,field:Oe,affixes:De,fieldset:Pe,heading:Ne,ingress:He,muted:Re,info:Be,prose:Ue,helptext:qe,input:Fe,grid:Ve,flex:We,link:Ye,logo:je,pagination:Ke,popover:Ge,progress:Xe,_indeterminate:ze,skeleton:Qe,_skeleton:Je,spinner:Ze,steps:tn,table:en,_scrollShadow:nn,tabs:on,_scrollMask:sn,tag:an,togglegroup:rn,_tooltip:ln,validation:cn,body:dn,_checked:un},Go=Object.freeze(Object.defineProperty({__proto__:null,_checked:un,_errorsummary:Me,_indeterminate:ze,_scrollMask:sn,_scrollShadow:nn,_skeleton:Je,_tooltip:ln,affixes:De,alert:_e,app:ge,avatar:we,badge:Ee,body:dn,breadcrumbs:$e,button:Se,card:Te,chip:ke,default:g,details:Ce,dialog:Ae,divider:Ie,errorsummary:Le,field:Oe,fieldset:Pe,flex:We,grid:Ve,group:xe,heading:Ne,helptext:qe,info:Be,ingress:He,input:Fe,link:Ye,logo:je,muted:Re,pagination:Ke,popover:Ge,progress:Xe,prose:Ue,skeleton:Qe,spinner:Ze,steps:tn,sticky:ye,table:en,tabs:on,tag:an,togglegroup:rn,validation:cn},Symbol.toStringTag,{value:"Module"}));typeof window<"u"&&window.CSSStyleSheet&&document.adoptedStyleSheets&&(()=>{const t="--mtds-app-expanded",e=new CSSStyleSheet,n=()=>{var o;return!((o=window.localStorage.getItem(t))!=null&&o.includes("false"))};document.adoptedStyleSheets.push(e),window.mtdsToggleAppExpanded=o=>{var i;try{const s=o??!n();(i=e.replaceSync)==null||i.call(e,`:root { ${t}: var(${t}--${s})}`),window.localStorage.setItem(t,s)}catch{}},window.mtdsToggleAppExpanded(n())})();const fn=g.app.split(" ")[0],Xo=g.sticky.split(" ")[0],zo='[data-command="toggle-app-expanded"]',pn=`.${fn} > dialog,.${fn} dialog ~ main`,mn=t=>{document.startViewTransition?document.startViewTransition(t):t()},hn=t=>mn(()=>{var e;return(e=window.mtdsToggleAppExpanded)==null?void 0:e.call(window,t)});function Qo({target:t,defaultPrevented:e}){if(!(e||!(t instanceof HTMLButtonElement)||!t.matches(zo))){if(getComputedStyle(t).position==="sticky")return hn();mn(()=>{const n=document.querySelector(pn);n==null||n.setAttribute("data-closedby","any"),n==null||n.showModal()})}}function Jo(){var t;(t=document.querySelector(pn))==null||t.close()}let Ot=0,W,M=0,v,Dt=0,dt=0,Pt=!1,Nt=0,N=0;function Zo([t]){v=t,bn()}function bn(){var n;if(!(v!=null&&v.isConnected))return;const t=window.scrollY,e=t<N;N=t,e!==W&&(Ot=(((n=v.parentElement)==null?void 0:n.getBoundingClientRect().top)||0)+N,W=e,Dt=v.offsetHeight,dt=v.getBoundingClientRect().top+N,Pt=v.offsetHeight<=window.innerHeight,Nt=window.innerHeight),!(M===-1&&Pt)&&(M!==-1&&(Pt||W&&N<=dt)?(v.style.setProperty("--pos","sticky"),v.style.setProperty("--top","0px"),M=-1):M===-1&&!W?(v.style.setProperty("--pos","relative"),v.style.setProperty("--top",`${Math.max(0,N-Ot)}px`),M=0):M!==1&&!W&&N+Nt>=dt+Dt?(v.style.setProperty("--pos","sticky"),v.style.setProperty("--top",`${Nt-Dt}px`),M=1):M===1&&W&&(v.style.setProperty("--pos","relative"),v.style.setProperty("--top",`${dt-Ot}px`),M=0))}x(()=>{V(document.documentElement,Xo,Zo),b(document,"click",Qo,w),b(window,"resize",Uo(Jo,100),w),b(window,"scroll",bn,w)});const ti=g.breadcrumbs.split(" ")[0];function ei(t){for(const e of t)e.querySelectorAll("li a").forEach((n,o,{length:i})=>{d(n,"aria-current",o===i-1?"page":null)})}x(()=>V(document.documentElement,ti,ei));const ni=g.dialog.split(" ")[0],oi=j?document.getElementsByClassName(ni):[],ii=()=>{for(const t of oi)t.isConnected&&t.showModal&&t.close&&(t.matches('[open]:not([data-modal="false"]):not(:modal)')?(d(t,"open",null),t.showModal()):t.matches(":modal:not([open])")&&(d(t,"open",""),t.close()))},si=({clientX:t,clientY:e,target:n})=>{var o;if(n instanceof HTMLDialogElement&&d(n,"data-closedby")==="any"){const{top:i,right:s,bottom:a,left:r}=n.getBoundingClientRect();i<=e&&e<=a&&r<=t&&t<=s||n.close()}else n instanceof Element&&n.closest('button[data-command="close"]')&&((o=n==null?void 0:n.closest("dialog"))==null||o.close())};x(()=>{b(document,"click",si,w),be(ii).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function ai(t){var n;if(t.animationName!==g._errorsummary)return;const e=(n=t.target)==null?void 0:n.firstElementChild;e instanceof HTMLHeadingElement&&(d(e,"tabindex","-1"),e.focus())}x(()=>b(document,"animationend",ai,w));var ri=Object.defineProperty,vn=Object.getOwnPropertySymbols,li=Object.prototype.hasOwnProperty,ci=Object.prototype.propertyIsEnumerable,_n=(t,e,n)=>e in t?ri(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,di=(t,e)=>{for(var n in e||(e={}))li.call(e,n)&&_n(t,n,e[n]);if(vn)for(var n of vn(e))ci.call(e,n)&&_n(t,n,e[n]);return t},K=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",ut=K&&/android/i.test(navigator.userAgent),Ht=K&&/iPad|iPhone|iPod/.test(navigator.userAgent),gn;K&&/^Mac/i.test(((gn=navigator.userAgentData)==null?void 0:gn.platform)||navigator.platform);var ui=`${ut?"data":"aria"}-labelledby`,fi=":host(:not([hidden])) { display: block }",pi="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",yn=typeof HTMLElement>"u"?class{}:HTMLElement;function f(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 wn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},ft=(t,...e)=>wn("add",t,e),pt=(t,...e)=>wn("remove",t,e),mi=(t,e)=>t.attachShadow({mode:"open"}).append(Bt("slot"),Bt("style",e)),mt=new WeakMap,En=(t,e)=>{if(e===void 0)return mt.get(t);try{mt.get(t).disconnect(),mt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),mt.set(t,n)}},$n=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},hi=0,Rt=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++hi).toString(32)}`),t.id):"",Bt=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},Sn={define:(t,e)=>!K||window.customElements.get(t)||window.customElements.define(t,e)},H,bi=0,Tn=t=>{H||(H=Bt("div"),H.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",f(H,"aria-live","assertive")),H.isConnected||document.body.append(H),t&&(H.textContent=`${t}${bi++%2?" ":""}`)},vi=(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}))},Ut="disabled",G="selected",_i=class extends yn{static get observedAttributes(){return[Ut,G]}connectedCallback(){Ht||(this.tabIndex=-1),this.hasAttribute("role")||f(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){f(this,"aria-disabled",`${this.disabled}`),f(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[G]}set defaultSelected(t){this[G]=t}get disabled(){return f(this,Ut)!==null}set disabled(t){f(this,Ut,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=f(this,"label"))!=null?t:this.text}set label(t){f(this,"label",t)}get selected(){return f(this,G)!==null}set selected(t){f(this,G,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=f(this,"value"))!=null?t:this.text}set value(t){f(this,"value",t)}};Sn.define("u-option",_i);var xn,kn=0,qt=!1,gi=Ht||ut,Cn="click,focusout,input,keydown,mousedown,mouseup",An="focus,focusin,blur,focusout",ht={singular:"%d hit",plural:"%d hits"},In=class extends yn{constructor(){super(),this._texts=di({},ht),this._value="",mi(this,`${fi}
|
|
8
|
+
::slotted(data:focus) { ${xn} }`))}static get observedAttributes(){return Object.keys(dt).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=Ln(this),at(this,ve,this,!0),Ct(this,{attributeFilter:["value"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(ft,0,this),setTimeout(pt,0,this)}attributeChangedCallback(t,e,o){const n=t.split("data-sr-")[1];dt[n]&&(this._texts[n]=o||dt[n])}disconnectedCallback(){Ct(this,!1),kn(this,ve,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;t.type==="beforeinput"&&(this._value=e?.value||""),t.type==="blur"&&Rn(this),t.type==="click"&&Un(this,t),t.type==="focus"&&Hn(this,t),t.type==="input"&&qn(this,t),t.type==="keydown"&&Fn(this,t),t.type==="mousedown"&&Lt(t),t.type==="mutation"&&ft(this,t)}get multiple(){var t;return((t=f(this,"data-multiple"))!=null?t:ct)!==ct}set multiple(t){f(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=f(this,"data-creatable"))!=null?t:ct)!==ct}set creatable(t){f(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 o=((t=this.list)==null?void 0:t.nodeName)==="U-DATALIST"?"u-option":"option";this._options=(e=this.list)==null?void 0:e.getElementsByTagName(o)}return this._options}get values(){return[...this.items].map(({value:t})=>t)}},O=t=>{var e;return((e=t?.textContent)==null?void 0:e.trim())||""},At=t=>t instanceof HTMLDataElement,ft=(t,e)=>{var o,n;const{_focus:i,_texts:s,items:a,control:r,list:d,multiple:l}=t;let h=`${O((o=r?.labels)==null?void 0:o[0])}, ${l?a.length?s.found.replace("%d",`${a.length}`):s.empty:""}`;const u=[];for(const{addedNodes:_,removedNodes:I}of e?.detail||[]){for(const m of _)At(m)&&u.unshift(m);for(const m of I)At(m)&&u.push(m)}const T=l?u.length===1:u[0]===i;if(i&&r&&T){const _=f(r,"inputmode"),I=At(i)?r:i;t._speak=`${s[u[0].isConnected?"added":"removed"]} ${O(u[0])}, `,(Nn||i===r)&&kt(t._speak),r!==I&&(f(r,"aria-expanded",null),f(r,"inputmode","none"),h=" ",r.focus()),setTimeout(()=>{var m;f(r,"aria-expanded","true"),f(r,"inputmode",_),(m=I?.focus)==null||m.call(I),t._speak="",Dn?at(t,"blur",()=>ft(t),_e):setTimeout(ft,100,t)},100)}let w=0;const k=t.querySelector("select");for(const _ of a){const I=k?.options[w],m=O(_),A=_.value||m,te=`${t._speak}${m}, ${s.remove}, ${++w} ${s.of} ${a.length}`;f(_,"role","button"),f(_,"value",A),f(_,"tabindex","-1"),f(_,"aria-label",te),I?Object.assign(I,{textContent:m,value:A}):k?.appendChild(new Option(m,A,!0,!0))}k&&f(k,"multiple",l?"":null);for(const _ of[...k?.options||[]].slice(w))_.remove();!l&&w>1&&console.warn("u-combobox: Multiple <data> found in single mode."),d&&f(d,"aria-multiselectable",`${l}`),r&&f(r,"list",Mn(d)),r&&f(r,"aria-label",`${t._speak}${h}`);const J=O(a[0]);J!==t._itemText&&pt(t,!1),t._itemText=J,ge(t),ye(t),(n=Ct(t))==null||n.takeRecords()},ge=t=>{var e;t.clear&&f(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value))},ye=t=>{var e;const{_speak:o,options:n=[],values:i}=t;for(const s of n){const a=(e=f(s,"value"))!=null?e:O(s);f(s,"aria-label",o?`${o}${O(s)}`:null),f(s,"selected",i.includes(a)?"":null)}},pt=(t,e=!0)=>{const{multiple:o,control:n,items:i}=t,s=O(i[0]);if(!(o||!n||s===n.value)){if(e)return be(n,s,"insertText");n.value=s}},Mt=(t,e=!0)=>{var o;const{_texts:n,options:i=[],creatable:s,control:a,items:r,multiple:d}=t,l=((o=a?.value)==null?void 0:o.trim())||"",h=l.toLowerCase()||null;let u=[...i].find(w=>(f(w,"label")||O(w)).trim().toLowerCase()===h);const T={bubbles:!0,cancelable:!0,detail:u};if(t.dispatchEvent(new CustomEvent("beforematch",T))||(u=[...i].find(w=>w.selected)),e)return ye(t),u?q(t,u,!1):s&&l?q(t,{value:l},!1):(!d&&r[0]?q(t,r[0]):pt(t),kt(n.invalid));for(const w of i)w.selected=w===u},q=(t,e,o=!0)=>{const{control:n,items:i,multiple:s}=t,a=lt("data",e.label||e.value,{value:e.value}),r=[...i].find(h=>h.value===e.value),d={bubbles:!0,cancelable:!0,detail:r||a};if(r&&!o)return pt(t);if(t.dispatchEvent(new CustomEvent("beforechange",d))){if(!s)for(const h of[...i])h.remove();r?r.remove():n?.insertAdjacentElement("beforebegin",a),t.dispatchEvent(new CustomEvent("afterchange",d))}},Hn=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),kt()},Rn=t=>Lt()||setTimeout(Bn,0,t),Bn=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t.multiple||Mt(t),t._focus=void 0)},Un=(t,e)=>{const{clientX:o,clientY:n,target:i}=e,{clear:s,control:a,items:r}=t;if(s?.contains(i))return a&&be(a,"","deleteContentBackward"),a?.focus();for(const d of r){const{top:l,right:h,bottom:u,left:T}=d.getBoundingClientRect();if(d.contains(i))return q(t,d);if(n>=l&&n<=u&&o>=T&&o<=h)return d.focus()}i===t&&a?.focus()},qn=(t,e)=>{var o;const{options:n=[],control:i,multiple:s}=t,a=((o=i?.value)==null?void 0:o.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType==="insertReplacementText":!!a){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const d of n)if(d.value&&d.value===a)return q(t,d,s)}else s||Mt(t,!1);ge(t)},Fn=(t,e)=>{var o;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const{clear:n,control:i,items:s}=t,{key:a,repeat:r,target:d}=e,l=i&&i===d,h=l&&i?.selectionEnd;let u=l?s.length:[...s].indexOf(d);if(l&&a==="Tab"&&n&&!n.hidden&&(e.preventDefault(),n.tabIndex=-1,n.focus(),at(n,"blur",()=>f(n,"tabindex",null),_e)),!(!l&&In(e)||u===-1)){if(a==="ArrowRight"&&!l)u+=1;else if(a==="ArrowLeft"&&!h)u-=1;else if(a==="Enter"&&l){const T=f(i,"form");return f(i,"form","#"),requestAnimationFrame(()=>f(i,"form",T)),Mt(t)}else if((a==="Backspace"||a==="Delete")&&!h){if(e.preventDefault(),!r&&s[u])return q(t,s[u]);l&&(u-=1)}else return l||i?.focus();e.preventDefault(),(o=s[Math.max(0,u)]||i)==null||o.focus()}};On.define("u-combobox",ut);const Vn="1.3.7",E={capture:!0,passive:!0},K=typeof window<"u"&&typeof document<"u";function Yn(t,e){let o;return(...n)=>{clearTimeout(o),o=setTimeout(()=>t(...n),e)}}function c(t,e,o){return o===void 0?t.getAttribute(e)??null:(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}let jn=0;const Kn=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function Ot(t){return t.id||(t.id=`${Kn}${++jn}`),t.id}const Wn=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,e[`${t}EventListener`](...o)},b=(t,...e)=>Wn("add",t,e),W=K?document.createElement("div"):null,ht=new Map,Xn=()=>{for(const[t,e]of ht)e()};W&&(W.style.cssText="position:absolute;padding:1px;top:0;left:0px",b(window,"load,resize,scroll",Xn,E));const F={top:0,right:1,bottom:2,left:3};function P(t,e,o,n){const i=F[o]??Number(o)??F.bottom;if(e===!1||!e.isConnected||!t.isConnected)return ht.delete(t);W?.isConnected||document.body.append(W||""),ht.has(t)||ht.set(t,()=>P(t,e,i,n));const s=e instanceof HTMLElement,{offsetWidth:a,offsetHeight:r}=t,d=s?e.offsetWidth:e.clientWidth,l=s?e.offsetHeight:e.clientHeight,{width:h,height:u,left:T,top:w}=e.getBoundingClientRect(),k=window.visualViewport?.width||window.innerWidth,J=window.visualViewport?.height||window.innerHeight,_=window.pageXOffset||document.documentElement.scrollLeft,I=window.pageYOffset||document.documentElement.scrollTop,m=Math.round(T-(d-h)/2),A=Math.round(w-(l-u)/2),te=Math.min(Math.max(10,m-(a-d)/2),k-a-10),as=Math.min(Math.max(10,A-(r-l)/2),J-r-10),rs=m-a>0,ls=m+d+a<k,cs=A-r>0,ds=A+l+r<J,un=i===F.top||i===F.bottom,us=i===F.right&&(n||ls)||!rs,fn=i===F.bottom&&(n||ds)||!cs,fs=Math.round(un?te:us?m+d:m-a),ps=Math.round(un?fn?A+l:A-r:as);t.style.position="absolute",t.style.left=`${fs+_}px`,t.style.top=`${ps+I}px`,W?.style.setProperty("translate",`0px ${Math.round(fn?_+A+l+r+30:0)}px`)}function we(t){let e=0;const o=()=>setTimeout(n,200),n=()=>{t([],i),i.takeRecords(),e=0},i=new MutationObserver(()=>{e||(e=requestAnimationFrame(o))});return i}const Pt=new WeakMap,V=(t,e,o)=>{const n=t.getElementsByClassName(e),i=Pt.get(t)||[];i.length||(Pt.set(t,i),we((s,a)=>{if(t.isConnected&&i?.length)for(const r of i)r();else a?.disconnect(),Pt.delete(t)}).observe(t,{attributeFilter:["class","hidden"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>o(n))},x=t=>{if(!K)return;const e=()=>requestAnimationFrame(t);document.readyState==="complete"?e():b(window,"load",e)},Dt=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),Ee="mattilsynet.matomo.cloud";let Nt=!0;function Gn(t,e={}){if(K){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${Ee}/matomo.php`]),document.querySelector('script[src*="matomo.js"]')||document.head.append(Object.assign(document.createElement("script"),{async:!0,src:`https://cdn.matomo.cloud/${Ee}/matomo.js`}))),t==="init"){const{matomoId:o,enabled:n=!0}=e;Nt=n,window._paq.push(["setSiteId",o])}if(Nt==="debug")return console.info(`Analytics: "${t}"`,e);if(!(Nt===!1||window.location.hostname==="localhost"))if(t==="pageview"){const{url:o,title:n}=e;window._paq.push(["setCustomUrl",o||location.href]),window._paq.push(["setDocumentTitle",n||document.title]),window._paq.push(["trackPageView"])}else if(t==="event"){const{category:o,action:n,name:i,value:s}=e,a=["trackEvent",o,n,i,s];window._paq.push(a.filter(r=>r!==void 0))}else if(t==="search"){const{query:o,category:n=!1,results:i=!1}=e;window._paq.push(["trackSiteSearch",o,n,i])}else t==="matomo"&&window._paq.push(e)}}const zn=(t,e,o=Number.POSITIVE_INFINITY)=>{const n=(o-1)/2,i=Math.max(Math.min(t-Math.floor(n),e-o+1),1),s=Math.min(Math.max(t+Math.ceil(n),o),e),a=Array.from({length:s+1-i},(r,d)=>d+i);return o>4&&i>1&&a.splice(0,2,1,0),o>3&&s<e&&a.splice(-2,2,0,e),a},Qn=({current:t=1,total:e=10,show:o=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:zn(t,e,o).map((n,i)=>({current:n===t&&"page",key:`key-${n}-${i}`,page:n}))}),$e="_alert_1bf95_1 _ds-alert_uxa1f_1",Se="_app_1bf95_1",Te="_sticky_1bf95_1",xe="_avatar_1bf95_1 _ds-avatar_uxa1f_1",Ce="_badge_1bf95_1",ke="_breadcrumbs_1bf95_1 _ds-breadcrumbs_uxa1f_1",Ie="_button_1bf95_1 _ds-button_uxa1f_1",Le="_card_1bf95_1",Ae="_group_1bf95_1",Me="_chip_1bf95_1 _ds-chip_uxa1f_1",Oe="_details_1bf95_1 _ds-details_uxa1f_1",Pe="_dialog_1bf95_1 _ds-dialog_uxa1f_1",De="_divider_1bf95_1",Ne="_errorsummary_1bf95_1 _ds-error-summary_uxa1f_1",He="__errorsummary_1bf95_1",Re="_field_1bf95_1 _ds-field_uxa1f_1",Be="__datalist_1bf95_1",Ue="_affixes_1bf95_1 _ds-field-affixes_uxa1f_1",qe="_fieldset_1bf95_1 _ds-fieldset_uxa1f_1",Fe="_heading_1bf95_1 _ds-heading_uxa1f_1",Ve="_ingress_1bf95_1",Ye="_muted_1bf95_1",je="_info_1bf95_1",Ke="_prose_1bf95_1",We="_helptext_1bf95_1 _ds-focus_uxa1f_1",Xe="_input_1bf95_1 _ds-input_uxa1f_1",Ge="_grid_1bf95_1",ze="_flex_1bf95_1",Qe="_link_1bf95_1",Je="_logo_1bf95_1",Ze="_pagination_1bf95_1 _ds-pagination_uxa1f_1",to="_popover_1bf95_1",eo="_progress_1bf95_1",oo="__indeterminate_1bf95_1",no="_skeleton_1bf95_1 _ds-skeleton_uxa1f_1",io="__skeleton_1bf95_1",so="_spinner_1bf95_1",ao="_steps_1bf95_1",ro="_table_1bf95_1 _ds-table_uxa1f_1",lo="__scrollShadow_1bf95_1",co="_tabs_1bf95_1 _ds-tabs_uxa1f_1",uo="__scrollMask_1bf95_1",fo="_tag_1bf95_1 _ds-tag_uxa1f_1",po="_togglegroup_1bf95_1",ho="__tooltip_1bf95_1",mo="_validation_1bf95_1 _ds-validation-message_uxa1f_1",bo="_body_1bf95_153",vo="__checked_1bf95_1",v={alert:$e,app:Se,sticky:Te,avatar:xe,badge:Ce,breadcrumbs:ke,button:Ie,card:Le,group:Ae,chip:Me,details:Oe,dialog:Pe,divider:De,errorsummary:Ne,_errorsummary:He,field:Re,_datalist:Be,affixes:Ue,fieldset:qe,heading:Fe,ingress:Ve,muted:Ye,info:je,prose:Ke,helptext:We,input:Xe,grid:Ge,flex:ze,link:Qe,logo:Je,pagination:Ze,popover:to,progress:eo,_indeterminate:oo,skeleton:no,_skeleton:io,spinner:so,steps:ao,table:ro,_scrollShadow:lo,tabs:co,_scrollMask:uo,tag:fo,togglegroup:po,_tooltip:ho,validation:mo,body:bo,_checked:vo},Jn=Object.freeze(Object.defineProperty({__proto__:null,_checked:vo,_datalist:Be,_errorsummary:He,_indeterminate:oo,_scrollMask:uo,_scrollShadow:lo,_skeleton:io,_tooltip:ho,affixes:Ue,alert:$e,app:Se,avatar:xe,badge:Ce,body:bo,breadcrumbs:ke,button:Ie,card:Le,chip:Me,default:v,details:Oe,dialog:Pe,divider:De,errorsummary:Ne,field:Re,fieldset:qe,flex:ze,grid:Ge,group:Ae,heading:Fe,helptext:We,info:je,ingress:Ve,input:Xe,link:Qe,logo:Je,muted:Ye,pagination:Ze,popover:to,progress:eo,prose:Ke,skeleton:no,spinner:so,steps:ao,sticky:Te,table:ro,tabs:co,tag:fo,togglegroup:po,validation:mo},Symbol.toStringTag,{value:"Module"}));typeof window<"u"&&window.CSSStyleSheet&&document.adoptedStyleSheets&&(()=>{const t="--mtds-app-expanded",e=new CSSStyleSheet,o=()=>!window.localStorage.getItem(t)?.includes("false");document.adoptedStyleSheets.push(e),window.mtdsToggleAppExpanded=n=>{try{const i=n??!o();e.replaceSync?.(`:root { ${t}: var(${t}--${i})}`),window.localStorage.setItem(t,i)}catch{}},window.mtdsToggleAppExpanded(o())})();const _o=v.app.split(" ")[0],Zn=v.sticky.split(" ")[0],ti='[data-command="toggle-app-expanded"]',go=`.${_o} > dialog,.${_o} dialog ~ main`,yo=t=>{document.startViewTransition?document.startViewTransition(t):t()},wo=t=>yo(()=>window.mtdsToggleAppExpanded?.(t));function ei({target:t,defaultPrevented:e}){if(!(e||!(t instanceof HTMLButtonElement)||!t.matches(ti))){if(getComputedStyle(t).position==="sticky")return wo();yo(()=>{const o=document.querySelector(go);o?.setAttribute("data-closedby","any"),o?.showModal()})}}function oi(){document.querySelector(go)?.close()}let Ht=0,Y,M=0,g,Rt=0,mt=0,Bt=!1,Ut=0,N=0;function ni([t]){g=t,Eo()}function Eo(){if(!g?.isConnected)return;const t=window.scrollY,e=t<N;N=t,e!==Y&&(Ht=(g.parentElement?.getBoundingClientRect().top||0)+N,Y=e,Rt=g.offsetHeight,mt=g.getBoundingClientRect().top+N,Bt=g.offsetHeight<=window.innerHeight,Ut=window.innerHeight),!(M===-1&&Bt)&&(M!==-1&&(Bt||Y&&N<=mt)?(g.style.setProperty("--pos","sticky"),g.style.setProperty("--top","0px"),M=-1):M===-1&&!Y?(g.style.setProperty("--pos","relative"),g.style.setProperty("--top",`${Math.max(0,N-Ht)}px`),M=0):M!==1&&!Y&&N+Ut>=mt+Rt?(g.style.setProperty("--pos","sticky"),g.style.setProperty("--top",`${Ut-Rt}px`),M=1):M===1&&Y&&(g.style.setProperty("--pos","relative"),g.style.setProperty("--top",`${mt-Ht}px`),M=0))}x(()=>{V(document.documentElement,Zn,ni),b(document,"click",ei,E),b(window,"resize",Yn(oi,100),E),b(window,"scroll",Eo,E)});const ii=v.breadcrumbs.split(" ")[0];function si(t){for(const e of t)e.querySelectorAll("li a").forEach((o,n,{length:i})=>{c(o,"aria-current",n===i-1?"page":null)})}x(()=>V(document.documentElement,ii,si));const ai=v.dialog.split(" ")[0],ri=K?document.getElementsByClassName(ai):[],li=()=>{for(const t of ri)t.isConnected&&t.showModal&&t.close&&(t.matches('[open]:not([data-modal="false"]):not(:modal)')?(c(t,"open",null),t.showModal()):t.matches(":modal:not([open])")&&(c(t,"open",""),t.close()))},ci=({clientX:t,clientY:e,target:o})=>{if(o instanceof HTMLDialogElement&&c(o,"data-closedby")==="any"){const{top:n,right:i,bottom:s,left:a}=o.getBoundingClientRect();n<=e&&e<=s&&a<=t&&t<=i||o.close()}else o instanceof Element&&o.closest('button[data-command="close"]')&&o?.closest("dialog")?.close()};x(()=>{b(document,"click",ci,E),we(li).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function di(t){if(t.animationName!==v._errorsummary)return;const e=t.target?.firstElementChild;e instanceof HTMLHeadingElement&&(c(e,"tabindex","-1"),e.focus())}x(()=>b(document,"animationend",di,E));var ui=Object.defineProperty,$o=Object.getOwnPropertySymbols,fi=Object.prototype.hasOwnProperty,pi=Object.prototype.propertyIsEnumerable,So=(t,e,o)=>e in t?ui(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,hi=(t,e)=>{for(var o in e||(e={}))fi.call(e,o)&&So(t,o,e[o]);if($o)for(var o of $o(e))pi.call(e,o)&&So(t,o,e[o]);return t},X=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",bt=X&&/android/i.test(navigator.userAgent),qt=X&&/iPad|iPhone|iPod/.test(navigator.userAgent),To;X&&/^Mac/i.test(((To=navigator.userAgentData)==null?void 0:To.platform)||navigator.platform);var mi=`${bt?"data":"aria"}-labelledby`,bi=":host(:not([hidden])) { display: block }",vi="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",xo=typeof HTMLElement>"u"?class{}:HTMLElement;function p(t,e,o){return o===void 0?t.getAttribute(e):(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var Co=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},G=(t,...e)=>Co("add",t,e),vt=(t,...e)=>Co("remove",t,e),_i=(t,e)=>t.attachShadow({mode:"open"}).append(Yt("slot"),Yt("style",e)),_t=new WeakMap,Ft=(t,e)=>{if(e===void 0)return _t.get(t);try{_t.get(t).disconnect(),_t.delete(t)}catch{}if(e){const o=new MutationObserver(n=>t.handleEvent({type:"mutation",detail:n}));o.observe(t,e),_t.set(t,o)}},ko=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},gi=0,Vt=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++gi).toString(32)}`),t.id):"",Yt=(t,e,o)=>{const n=document.createElement(t);return e&&(n.textContent=e),n},Io={define:(t,e)=>!X||window.customElements.get(t)||window.customElements.define(t,e)},H,yi=0,Lo=t=>{H||(H=Yt("div"),H.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",p(H,"aria-live","assertive")),H.isConnected||document.body.append(H),t&&(H.textContent=`${t}${yi++%2?" ":""}`)},wi=(t,e,o="")=>{var n,i;const s={bubbles:!0,composed:!0,data:e,inputType:o},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(n=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:n.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},jt=!1,Kt=t=>(t?.type==="mouseup"&&(jt=!1),t?.type==="mousedown"&&(jt=!0,G(document,"mouseup",Kt,{once:!0})),jt),Wt="disabled",z="selected",Ei=class extends xo{static get observedAttributes(){return[Wt,z]}connectedCallback(){qt||(this.tabIndex=-1),this.hasAttribute("role")||p(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){p(this,"aria-disabled",`${this.disabled}`),p(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[z]}set defaultSelected(t){this[z]=t}get disabled(){return p(this,Wt)!==null}set disabled(t){p(this,Wt,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=p(this,"label"))!=null?t:this.text}set label(t){p(this,"label",t)}get selected(){return p(this,z)!==null}set selected(t){p(this,z,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=p(this,"value"))!=null?t:this.text}set value(t){p(this,"value",t)}};Io.define("u-option",Ei);var Ao,Mo=0,$i=qt||bt,Oo="click,focusout,input,keydown,mousedown,mouseup",Po="focus,focusin,blur,focusout",gt={singular:"%d hit",plural:"%d hits"},Do=class extends xo{constructor(){super(),this._texts=hi({},gt),this._value="",_i(this,`${bi}
|
|
9
9
|
::slotted(u-option) { display: block; cursor: pointer }
|
|
10
|
-
::slotted(u-option:focus) { ${
|
|
10
|
+
::slotted(u-option:focus) { ${vi} }
|
|
11
11
|
::slotted(u-option[aria-hidden="true"]),
|
|
12
12
|
::slotted(u-option[disabled]),
|
|
13
|
-
::slotted(u-option[hidden]) { display: none !important }`)}static get observedAttributes(){return["id",...Object.keys(ht).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=$n(this),f(this,"role","listbox"),f(this,"tabindex","-1"),ft(this._root,"focusin",this),ft(this._root,"focus",this,!0),En(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){pt(this._root||this,"focus",this,!0),pt(this._root||this,"focusin",this),En(this,!1),Ft(this),this._root=void 0}attributeChangedCallback(t,e,n){const o=t==null?void 0:t.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(ht[o])this._texts[o]=n||ht[o];else if(this._root)for(const s of this._root.querySelectorAll(i))Ln(this,s)}handleEvent(t){const{target:e,type:n}=t;t.defaultPrevented||(n==="click"&&Ei(this,t),(n==="focus"||n==="focusin")&&yi(this,t),(n==="blur"||n==="focusout")&&wi(this,t),n==="keydown"&&$i(this,t),n==="mousedown"&&(qt=this.contains(e)),n==="mouseup"&&(qt=!1),(n==="mutation"||n==="input")&&(clearTimeout(kn),kn=setTimeout(On,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},X=(t,e)=>{var n;t.hidden===e&&(t.hidden=!e,t._input&&Ln(t,t._input,e),t.popover&&((n=t._input)!=null&&n.isConnected)&&(f(t._input,"popovertarget",Rt(t)),f(t,"popover","manual"),t.togglePopover(e)),e&&On(t))},Ft=t=>{t._input&&(pt(t._input||t,An,t),pt(t._root||t,Cn,t),X(t,!1),t._input=void 0)},Ln=(t,e,n=!1)=>{ft(e,An,t,!0),f(e,"aria-autocomplete","list"),f(e,"aria-controls",Rt(t)),f(e,"aria-expanded",`${gi?n:"true"}`),f(e,"autocomplete","off"),f(e,"role","combobox")},yi=(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&&Ft(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),f(t,ui,Rt((n=t._input.labels)==null?void 0:n[0])),ft(t._root||t,Cn,t),X(t,!0),Tn())},wi=(t,e)=>{!ut&&!qt&&t._input&&setTimeout(Mn,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},Mn=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})),Ft(t))},Ei=(t,{target:e})=>{var n;if(!t._input||t._input===e)return X(t,!0);for(const o of t.options)if(o.contains(e))return f(t,"aria-multiselectable")!=="true"&&((n=t._input)==null||n.focus(),X(t,!1)),vi(t._input,o.value);ut&&Mn(t)},$i=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey||e.key==="Tab")return;X(t,e.key!=="Escape");const{key:o,target:i}=e,s=[...t.options].filter(c=>f(c,"aria-hidden")!=="true"&&c.offsetHeight),a=s.indexOf(i);let r=-1;if(o==="ArrowDown"&&(r=(a+1)%s.length),o==="ArrowUp"&&(r=(~a?a:s.length)-1),~a&&((o==="Home"||o==="PageUp")&&(r=0),(o==="End"||o==="PageDown")&&(r=s.length-1),o==="Enter"))return s[a].click(),e.preventDefault();if(s[r])for(const c of s)c.tabIndex=-1;s[r]&&e.preventDefault(),(n=s[r]||t._input)==null||n.focus()},On=(t,e)=>{const{_texts:n,_root:o,_input:i,options:s}=t,a=(i==null?void 0: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)f(u,"aria-hidden","true");for(const u of l)f(u,"aria-hidden","false");const h=l.length;clearTimeout(xn),(e==null?void 0:e.type)==="input"&&a!==t._value&&(xn=setTimeout(()=>{const u=`${!h&&t.innerText.trim()||`${n[h===1?"singular":"plural"]}`.replace("%d",`${h}`)}`;!t.hidden&&(o==null?void 0:o.activeElement)===i&&Tn(u),t._value=a},1e3)),Ht&&l.forEach((u,S)=>f(u,"title",`${S+1}/${h}`))};K&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return $n(this).getElementById(f(this,"list")||"")}}),Sn.define("u-datalist",In);const Vt=g.field.split(" ")[0],Dn=g.validation.split(" "),Si=Dn[0],k=(t,e)=>{var n;return((n=t.getPropertyValue(`--mtds-text-${e}`))==null?void 0:n.slice(1,-1))||""};function Pn(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 rt?a=l:Lt(l)?r=l:l.hasAttribute("data-description")?i.push(l):l.classList.contains(Si)?(c=d(l,"data-color")==="success"||!l.clientHeight,s.push(l),i.unshift(l)):l instanceof HTMLParagraphElement&&(i.some(h=>h.contains(l))||i.push(l));if(r){for(const l of o)l.htmlFor=At(r);if(e&&d(n,"data-validation")==="form"){c=r.matches(":valid");for(const l of s)d(l,"hidden",c?"":null)}Ti(a),Hn(r),Nn(r),d(r,"aria-describedby",i.map(At).join(" ")||null),d(r,"aria-invalid",`${!c}`)}}}function Nn(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function Ti(t){var n;if(!(t!=null&&t.list)||(n=t.list)!=null&&n.hasAttribute("popover"))return;const e=window.getComputedStyle(t);d(t,"data-sr-added",k(e,"combobox-added")),d(t,"data-sr-empty",k(e,"combobox-empty")),d(t,"data-sr-found",k(e,"combobox-found")),d(t,"data-sr-invalid",k(e,"combobox-invalid")),d(t,"data-sr-of",k(e,"combobox-of")),d(t,"data-sr-remove",k(e,"combobox-remove")),d(t,"data-sr-removed",k(e,"combobox-removed")),d(t.list,"data-sr-plural",k(e,"datalist-plural")),d(t.list,"data-sr-singular",k(e,"datalist-singular")),d(t.list,"popover","manual")}function Hn(t){const e=t==null?void 0:t.nextElementSibling,n=e&&d(e,"data-count");if(e&&n){const o=Number(n)-t.value.length,i=o<0,s=d(e,"aria-live")==="polite",a=window.getComputedStyle(e||t),r=k(a,"count-over"),c=k(a,"count-under");if(s!==i){d(e,"aria-live",i?"polite":"off");for(const l of Dn)e.classList.toggle(l,i)}e.textContent=(i?r:c).replace("%d",`${Math.abs(o)}`)}}function xi({target:t,newState:e}){if(t instanceof In){const n=t.getRootNode(),o=n==null?void 0:n.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?D(t,!1):o&&(t.style.width=`${o.clientWidth}px`,D(t,o,"bottom",!0))}}function ki({target:t}){Lt(t)&&(Hn(t),Nn(t))}function Ci(t){var n,o;const e=(o=(n=t.target)==null?void 0:n.closest)==null?void 0:o.call(n,`.${Vt}`);t.type==="invalid"&&e&&t.preventDefault(),Pn(document.getElementsByClassName(Vt),!0)}function Ai({target:t}){const e=t instanceof rt&&t.list;e&&!(e!=null&&e.hidden)&&setTimeout(()=>D(e,t,2,!0),10)}x(()=>{V(document.documentElement,Vt,Pn),b(document,"beforechange",Ai,w),b(document,"input",ki,w),b(document,"invalid,submit",Ci,!0),b(document,"toggle",xi,w)});const Ii=g.fieldset.split(" ")[0],Li=g.validation.split(" ")[0],Rn="aria-describedby",Mi="aria-invalid";function Oi(t){requestAnimationFrame(()=>{var e;for(const n of t)if(n.isConnected){const o=[];let i=null;for(const s of n.getElementsByTagName("*"))s.classList.contains(Li)?i=At(s):Lt(s)&&o.push(s);for(const s of o){const a=(e=d(s,Rn))==null?void 0:e.replace(i||"#","");d(s,Rn,`${i||""} ${a||""}`.trim()),d(s,Mi,`${!!i}`)}}})}x(()=>V(document.documentElement,Ii,Oi));const Di=g.logo.split(" ")[0];function Pi([t]){if(t!=null&&t.isConnected&&(t==null?void 0:t.firstElementChild)instanceof SVGSVGElement){for(const r of document.head.querySelectorAll("link[rel~='icon']"))r.setAttribute("rel","disabled");const e=t.firstElementChild,n=t==null?void 0: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(Object.assign(document.createElement("link"),{href:`data:image/svg+xml,${encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 55 55'><rect fill='${n?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${n?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${a}</g></svg>`)}`,rel:"icon"}))}}x(()=>V(document.documentElement,Di,Pi));const Bn=g.popover.split(" ")[0];let Wt=0;function Ni({target:t,newState:e}){var n;if(t instanceof HTMLElement&&t.classList.contains(Bn)){const o=(n=t.getRootNode())==null?void 0:n.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?(Wt-=1,D(t,!1)):o&&(Wt+=1,D(t,o,d(t,"data-position")||"bottom"))}}function Hi({target:t}){var n;const e=Wt&&((n=t==null?void 0:t.closest)==null?void 0:n.call(t,"a,[popovertargetaction]"));if(e){const o=d(e,"popovertargetaction")||"toggle",i=o==="show"||(o==="hide"?!1:void 0),a=(document.getElementById(d(e,"popovertarget")||"")||e).closest(`.${Bn}`);a!=null&&a.isConnected&&(a!=null&&a.togglePopover)&&a.togglePopover(i)}}x(()=>{b(document,"toggle",Ni,w),b(document,"click",Hi)});const Ri=g.table.split(" ")[0];function Bi(t){for(const e of t){const n=[];d(e,"role","table"),e.caption&&d(e.caption,"role","caption");for(const o of[e.tHead,e.tFoot,...e.tBodies])if(o){d(o,"role","rowgroup");const i=o.nodeName==="TBODY";for(const s of o.rows){d(s,"role","row");for(const a of s.cells)i?d(a,"data-th",n[a.cellIndex]||":empty"):n.push(a.innerText.trim()),a.nodeName==="TD"?d(a,"role","cell"):(d(a,"role",i?"rowheader":"columnheader"),d(a,"scope",i?"row":"col"))}}}}x(()=>V(document.documentElement,Ri,Bi));const Ui=`.${g.togglegroup.split(" ")[0]}`;function qi(t){var i;const{key:e,target:n}=t,o=n instanceof HTMLInputElement&&n.closest(Ui);if(o&&(e==="Enter"&&n.click(),e!=null&&e.startsWith("Arrow"))){t.preventDefault();const s=o.getElementsByTagName("input"),a=[...s].indexOf(n),r=e.match(/Arrow(Right|Down)/)?1:-1;(i=s[(s.length+a+r)%s.length])==null||i.focus()}}x(()=>b(document,"keydown",qi));const Un="aria-describedby",qn="Escape",bt="aria-labelledby",Fi="--mtds-tooltip-position",Vi=300,_=j?Object.assign(document.createElement("div"),{className:g._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let O=null,Fn=Number.NEGATIVE_INFINITY,Vn=0;function Yt({target:t,type:e,key:n}){if(e==="keydown"&&n!==qn)return;const o=Fn+Vi-Date.now();clearTimeout(Vn),Vn=setTimeout(Wi,Math.max(o,0),n===qn?null:t)}function Wi(t){var r,c,l;if(Fn=Date.now(),!_||t===_)return;_!=null&&_.isConnected||document.body.append(_);let e=((r=t==null?void 0:t.closest)==null?void 0:r.call(t,"[data-tooltip]"))||null;if(e===O)return;const n=e&&d(e,"data-tooltip")||"",o=e&&d(e,"data-tooltip-position")||((c=window.getComputedStyle(e||document.body).getPropertyValue(Fi))==null?void 0:c.trim())||"top";(!n||n==="false"||n==="true"||o==="none")&&(e=null),e&&(_.textContent=n);const s=O&&d(O,bt)===(_==null?void 0:_.id),a=((l=e instanceof HTMLElement?e.innerText:e==null?void 0:e.textContent)==null?void 0:l.trim())||(e==null?void 0:e.hasAttribute(bt))||(e==null?void 0:e.hasAttribute("aria-label"));O==null||O.removeAttribute(s?bt:Un),D(_,!1),O=e,O&&d(O,a?Un:bt,_==null?void 0:_.id),_.togglePopover(!!e),D(_,e||!1,o)}x(()=>{b(document,"blur,focus,mouseout,mouseover",Yt,w),b(window,"keydown",Yt,w),b(window,"blur",Yt,w)});var Wn=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Yn;Wn&&/^Mac/i.test(((Yn=navigator.userAgentData)==null?void 0:Yn.platform)||navigator.platform);var Yi=":host(:not([hidden])) { display: block }",jn=typeof HTMLElement>"u"?class{}:HTMLElement;function R(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var Kn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Gn=(t,...e)=>Kn("add",t,e),Xn=(t,...e)=>Kn("remove",t,e),ji=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Ki=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},jt=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))R(o,i,s);return o},zn={define:(t,e)=>!Wn||window.customElements.get(t)||window.customElements.define(t,e)},Gi=class extends jn{constructor(){super(),this._content=null,this.attachShadow({mode:"open"}).append(jt("slot",null,{name:"summary"}),jt("slot",null,{part:"details-content"}),jt("style",`${Yi}
|
|
13
|
+
::slotted(u-option[hidden]) { display: none !important }`)}static get observedAttributes(){return["id",...Object.keys(gt).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=ko(this),p(this,"role","listbox"),p(this,"tabindex","-1"),G(this._root,"focusin",this),G(this._root,"focus",this,!0),Ft(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){vt(this._root||this,"focus",this,!0),vt(this._root||this,"focusin",this),Ft(this,!1),Xt(this),this._root=void 0}attributeChangedCallback(t,e,o){const n=t?.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(gt[n])this._texts[n]=o||gt[n];else if(this._root)for(const s of this._root.querySelectorAll(i))No(this,s)}handleEvent(t){const{target:e,type:o}=t;t.defaultPrevented||(o==="click"&&xi(this,t),(o==="focus"||o==="focusin")&&Si(this,t),(o==="blur"||o==="focusout")&&Ti(this,t),o==="keydown"&&Ci(this,t),o==="mousedown"&&this.contains(e)&&Kt(t),(o==="mutation"||o==="input")&&(clearTimeout(Mo),Mo=setTimeout(Ro,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},Q=(t,e)=>{var o,n;t.hidden===e&&(t.hidden=!e,(o=Ft(t))==null||o.takeRecords(),t._input&&No(t,t._input,e),t.popover&&((n=t._input)!=null&&n.isConnected)&&(p(t._input,"popovertarget",Vt(t)),p(t,"popover","manual"),t.togglePopover(e)),e&&Ro(t))},Xt=t=>{t._input&&(vt(t._input||t,Po,t),vt(t._root||t,Oo,t),Q(t,!1),t._input=void 0)},No=(t,e,o=!1)=>{G(e,Po,t,!0),p(e,"aria-autocomplete","list"),p(e,"aria-controls",Vt(t)),p(e,"aria-expanded",`${$i?o:"true"}`),p(e,"autocomplete","off"),p(e,"role","combobox")},Si=(t,e)=>{var o;const n=e.target instanceof HTMLInputElement;n&&e.isTrusted&&e.stopImmediatePropagation(),t._input!==e.target&&n&&e.target.list===t&&(t._input&&Xt(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),p(t,mi,Vt((o=t._input.labels)==null?void 0:o[0])),G(t._root||t,Oo,t),Q(t,!0),Lo())},Ti=(t,e)=>{!bt&&!Kt()&&t._input&&setTimeout(Ho,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},Ho=t=>{var e;const o=((e=t._root)==null?void 0:e.activeElement)||null,n=t._input;n&&n!==o&&!t.contains(o)&&(n.dispatchEvent(new FocusEvent("blur",{relatedTarget:o})),n.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:o})),Xt(t))},xi=(t,{target:e})=>{var o;if(!t._input||t._input===e)return Q(t,!0);for(const n of t.options)if(n.contains(e))return p(t,"aria-multiselectable")!=="true"&&((o=t._input)==null||o.focus(),Q(t,!1)),wi(t._input,n.value);bt&&Ho(t)},Ci=(t,e)=>{var o;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey||e.key==="Tab")return;Q(t,e.key!=="Escape");const{key:n,target:i}=e,s=[...t.options].filter(d=>p(d,"aria-hidden")!=="true"&&d.offsetHeight),a=s.indexOf(i);let r=-1;if(n==="ArrowDown"&&(r=(a+1)%s.length),n==="ArrowUp"&&(r=(~a?a:s.length)-1),~a&&((n==="Home"||n==="PageUp")&&(r=0),(n==="End"||n==="PageDown")&&(r=s.length-1),n==="Enter"))return s[a].click(),e.preventDefault();if(s[r])for(const d of s)d.tabIndex=-1;s[r]&&e.preventDefault(),(o=s[r]||t._input)==null||o.focus()},Ro=(t,e)=>{const{_texts:o,_root:n,_input:i,options:s}=t,a=i?.value.toLowerCase().trim()||"",r=!t.hasAttribute("data-nofilter"),d=[],l=[];for(const u of s)(u.disabled||u.hidden||r&&!u.label.toLowerCase().includes(a)?d:l).push(u);for(const u of d)p(u,"aria-hidden","true");for(const u of l)p(u,"aria-hidden","false");const h=l.length;clearTimeout(Ao),e?.type==="input"&&a!==t._value&&(Ao=setTimeout(()=>{const u=`${!h&&t.innerText.trim()||`${o[h===1?"singular":"plural"]}`.replace("%d",`${h}`)}`;!t.hidden&&n?.activeElement===i&&Lo(u),t._value=a},1e3)),qt&&l.forEach((u,T)=>p(u,"title",`${T+1}/${h}`))};X&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return ko(this).getElementById(p(this,"list")||"")}}),Io.define("u-datalist",Do);const Gt=v.field.split(" ")[0],Bo=v.validation.split(" "),ki=Bo[0],C=(t,e)=>t.getPropertyValue(`--mtds-text-${e}`)?.slice(1,-1)||"";function Uo(t,e){for(const o of t)if(o.isConnected){const n=[],i=[],s=[];let a=null,r=null,d=!0;for(const l of o.getElementsByTagName("*"))l instanceof HTMLLabelElement?n.push(l):l instanceof ut?a=l:Dt(l)&&!l.hidden?r=l:l.hasAttribute("data-description")?i.push(l):l.classList.contains(ki)?(d=c(l,"data-color")==="success"||!l.clientHeight,s.push(l),i.unshift(l)):l instanceof HTMLParagraphElement&&(i.some(h=>h.contains(l))||i.push(l));if(r){for(const l of n)l.htmlFor=Ot(r);if(e&&c(o,"data-validation")==="form"){d=r.matches(":valid");for(const l of s)c(l,"hidden",d?"":null)}Ii(a),Fo(r),qo(r),c(r,"aria-describedby",i.map(Ot).join(" ")||null),c(r,"aria-invalid",`${!d}`)}}}function qo(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function Ii(t){if(!t?.list||t.list?.hasAttribute("popover"))return;const e=window.getComputedStyle(t);c(t,"data-sr-added",C(e,"combobox-added")),c(t,"data-sr-empty",C(e,"combobox-empty")),c(t,"data-sr-found",C(e,"combobox-found")),c(t,"data-sr-invalid",C(e,"combobox-invalid")),c(t,"data-sr-of",C(e,"combobox-of")),c(t,"data-sr-remove",C(e,"combobox-remove")),c(t,"data-sr-removed",C(e,"combobox-removed")),c(t.list,"data-sr-plural",C(e,"datalist-plural")),c(t.list,"data-sr-singular",C(e,"datalist-singular")),c(t.list,"popover","manual")}function Fo(t){const e=t?.nextElementSibling,o=e&&c(e,"data-count");if(e&&o){const n=Number(o)-t.value.length,i=n<0,s=c(e,"aria-live")==="polite",a=window.getComputedStyle(e||t),r=C(a,"count-over"),d=C(a,"count-under");if(s!==i){c(e,"aria-live",i?"polite":"off");for(const l of Bo)e.classList.toggle(l,i)}e.textContent=(i?r:d).replace("%d",`${Math.abs(n)}`)}}function Li({target:t,newState:e}){if(t instanceof Do){const n=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?P(t,!1):n&&(t.style.width=`${n.clientWidth}px`,P(t,n,c(t,"data-position")??"bottom",!0))}}function Ai({target:t}){Dt(t)&&(Fo(t),qo(t))}function Mi(t){const e=t.target?.closest?.(`.${Gt}`);t.type==="invalid"&&e&&t.preventDefault(),Uo(document.getElementsByClassName(Gt),!0)}function Oi({target:t}){const e=t instanceof ut&&t.list;e&&!e?.hidden&&setTimeout(()=>P(e,t,2,!0),10)}x(()=>{V(document.documentElement,Gt,Uo),b(document,"beforechange",Oi,E),b(document,"input",Ai,E),b(document,"invalid,submit",Mi,!0),b(document,"toggle",Li,E)});const Pi=v.fieldset.split(" ")[0],Di=v.validation.split(" ")[0],Vo="aria-describedby",Ni="aria-invalid";function Hi(t){requestAnimationFrame(()=>{for(const e of t)if(e.isConnected){const o=[];let n=null,i=!0;for(const s of e.getElementsByTagName("*"))s.classList.contains(Di)?(i=c(s,"data-color")==="success"||!s.clientHeight,n=Ot(s)):Dt(s)&&o.push(s);for(const s of o){const a=c(s,Vo)?.replace(n||"#","");c(s,Vo,`${n||""} ${a||""}`.trim()),c(s,Ni,`${!i}`)}}})}x(()=>V(document.documentElement,Pi,Hi));const Ri=v.logo.split(" ")[0];function Bi([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,o=t?.hasAttribute("data-env"),n=window.getComputedStyle(e),i=n.getPropertyValue("color"),s=n.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(Object.assign(document.createElement("link"),{href:`data:image/svg+xml,${encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 55 55'><rect fill='${o?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${o?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${a}</g></svg>`)}`,rel:"icon"}))}}x(()=>V(document.documentElement,Ri,Bi));const Yo=v.popover.split(" ")[0];let zt=0;function Ui({target:t,newState:e}){if(t instanceof HTMLElement&&t.classList.contains(Yo)){const o=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?(zt-=1,P(t,!1)):o&&(zt+=1,P(t,o,c(t,"data-position")||"bottom"))}}function qi({target:t}){const e=zt&&t?.closest?.("a,[popovertargetaction]");if(e){const o=c(e,"popovertargetaction")||"toggle",n=o==="show"||(o==="hide"?!1:void 0),s=(document.getElementById(c(e,"popovertarget")||"")||e).closest(`.${Yo}`);s?.isConnected&&s?.togglePopover&&s.togglePopover(n)}}x(()=>{b(document,"toggle",Ui,E),b(document,"click",qi)});const Fi=v.table.split(" ")[0];function Vi(t){for(const e of t){const o=[];c(e,"role","table"),e.caption&&c(e.caption,"role","caption");for(const n of[e.tHead,e.tFoot,...e.tBodies])if(n){c(n,"role","rowgroup");const i=n.nodeName==="TBODY";for(const s of n.rows){c(s,"role","row");for(const a of s.cells)i?c(a,"data-th",o[a.cellIndex]||":empty"):o.push(a.innerText.trim()),a.nodeName==="TD"?c(a,"role","cell"):(c(a,"role",i?"rowheader":"columnheader"),c(a,"scope",i?"row":"col"))}}}}x(()=>V(document.documentElement,Fi,Vi));const Yi=`.${v.togglegroup.split(" ")[0]}`;function ji(t){const{key:e,target:o}=t,n=o instanceof HTMLInputElement&&o.closest(Yi);if(n&&(e==="Enter"&&o.click(),e?.startsWith("Arrow"))){t.preventDefault();const i=n.getElementsByTagName("input"),s=[...i].indexOf(o),a=e.match(/Arrow(Right|Down)/)?1:-1;i[(i.length+s+a)%i.length]?.focus()}}x(()=>b(document,"keydown",ji));const jo="aria-describedby",Ko="Escape",yt="aria-labelledby",Ki="--mtds-tooltip-position",Wi=300,L=K?Object.assign(document.createElement("div"),{className:v._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let R=null,Wo=Number.NEGATIVE_INFINITY,Xo=0;function Qt({target:t,type:e,key:o}){if(e==="keydown"&&o!==Ko)return;const n=Wo+Wi-Date.now();clearTimeout(Xo),Xo=setTimeout(Xi,Math.max(n,0),o===Ko?null:t)}function Xi(t){if(Wo=Date.now(),!L||t===L)return;L?.isConnected||document.body.append(L);let e=t?.closest?.("[data-tooltip]")||null;if(e===R)return;const o=e&&c(e,"data-tooltip")||"",n=e&&c(e,"data-tooltip-position")||window.getComputedStyle(e||document.body).getPropertyValue(Ki)?.trim()||"top";(!o||o==="false"||o==="true"||n==="none")&&(e=null),e&&(L.textContent=o);const s=R&&c(R,yt)===L?.id,a=(e instanceof HTMLElement?e.innerText:e?.textContent)?.trim()||e?.hasAttribute(yt)||e?.hasAttribute("aria-label");R?.removeAttribute(s?yt:jo),P(L,!1),R=e,R&&c(R,a?jo:yt,L?.id),L.togglePopover(!!e),P(L,e||!1,n)}x(()=>{b(document,"blur,focus,mouseout,mouseover",Qt,E),b(window,"keydown",Qt,E),b(window,"blur",Qt,E)});var Go=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",zo;Go&&/^Mac/i.test(((zo=navigator.userAgentData)==null?void 0:zo.platform)||navigator.platform);var Gi=":host(:not([hidden])) { display: block }",Qo=typeof HTMLElement>"u"?class{}:HTMLElement;function B(t,e,o){var n;return o===void 0?(n=t.getAttribute(e))!=null?n:null:(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var Jo=(t,e,o)=>{for(const n of o[0].split(","))o[0]=n,Element.prototype[`${t}EventListener`].apply(e,o)},Zo=(t,...e)=>Jo("add",t,e),tn=(t,...e)=>Jo("remove",t,e),zi=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Qi=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},Jt=(t,e,o)=>{const n=document.createElement(t);if(e&&(n.textContent=e),o)for(const[i,s]of Object.entries(o))B(n,i,s);return n},en={define:(t,e)=>!Go||window.customElements.get(t)||window.customElements.define(t,e)},Ji=class extends Qo{constructor(){super(),this._content=null,this.attachShadow({mode:"open"}).append(Jt("slot",null,{name:"summary"}),Jt("slot",null,{part:"details-content"}),Jt("style",`${Gi}
|
|
14
14
|
::slotted(u-summary) { cursor: pointer; display: block }
|
|
15
15
|
::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 }
|
|
16
16
|
::slotted(u-summary[aria-expanded="true"])::before { rotate: 90deg }
|
|
17
|
-
:host > [part="details-content"]:not([hidden=""]) { display: block }`))}static get observedAttributes(){return["open"]}connectedCallback(){var t;this._content=(t=this.shadowRoot)==null?void 0:t.children[1],
|
|
17
|
+
:host > [part="details-content"]:not([hidden=""]) { display: block }`))}static get observedAttributes(){return["open"]}connectedCallback(){var t;this._content=(t=this.shadowRoot)==null?void 0:t.children[1],Zo(this._content,"beforematch",this),Zo(this,"click,keydown",this),this.attributeChangedCallback()}disconnectedCallback(){this._content&&tn(this._content,"beforematch",this),tn(this,"click,keydown",this),this._content=null}attributeChangedCallback(t,e,o){const n="onbeforematch"in this?"until-found":!0,i=this.open;for(const s of this.children)s.nodeName==="U-SUMMARY"&&B(s,"aria-expanded",`${i}`);if(this._content&&(B(this._content,"aria-hidden",`${!i}`),this._content.hidden=i?!1:n),i&&this.name){const s=Qi(this).querySelectorAll(`${this.nodeName}[name="${this.name}"]`);for(const a of s)a!==this&&(a.open=!1)}t==="open"&&e===null!=(o===null)&&this.dispatchEvent(new Event("toggle"))}handleEvent(t){const e=this.querySelector(":scope > u-summary"),o=e?.contains(t.target);t.defaultPrevented||(t.type==="beforematch"&&(this.open=!0),o&&t.type==="keydown"&&zi(t),o&&t.type==="click"&&(this.open=!this.open))}get open(){return this.hasAttribute("open")}set open(t){B(this,"open",t?"":null)}get name(){return B(this,"name")||""}set name(t){B(this,"name",t)}},Zi=class extends Qo{connectedCallback(){B(this,"role","button"),this.slot="summary",this.tabIndex=0}};en.define("u-details",Ji),en.define("u-summary",Zi);var wt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",on=wt&&/firefox/i.test(navigator.userAgent),ts=wt&&/iPad|iPhone|iPod/.test(navigator.userAgent),nn;wt&&/^Mac/i.test(((nn=navigator.userAgentData)==null?void 0:nn.platform)||navigator.platform);var es=typeof HTMLElement>"u"?class{}:HTMLElement;function y(t,e,o){var n;return o===void 0?(n=t.getAttribute(e))!=null?n:null:(o===null?t.removeAttribute(e):t.getAttribute(e)!==o&&t.setAttribute(e,o),null)}var sn=t=>{var e;const o=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return o instanceof Document||o instanceof ShadowRoot?o:document},os=0,ns=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++os).toString(32)}`),t.id):"",an=(t,e,o)=>{const n=document.createElement(t);if(e&&(n.textContent=e),o)for(const[i,s]of Object.entries(o))y(n,i,s);return n},is={define:(t,e)=>!wt||window.customElements.get(t)||window.customElements.define(t,e)},ss=t=>{var e;const o=sn(t),n=y(t,"aria-label")||"";return[...(((e=y(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(s=>o?.querySelector(`[id="${s}"]`)),...Array.from(t.labels||[])].reduce((s,a)=>{var r;return s||((r=a?.innerText)==null?void 0:r.trim())||""},n)},Zt=!1,rn=class extends es{static get observedAttributes(){return["aria-label","aria-labelledby","value","max"]}constructor(){super(),this.attachShadow({mode:"open"}).append(an("slot",null,{hidden:""}),an("style",`:host(:not([hidden])) { box-sizing: border-box; border: 1px solid; display: inline-block; height: .5em; width: 10em; overflow: hidden }
|
|
18
18
|
:host::before { content: ''; display: block; height: 100%; background: currentColor; width: var(--percentage, 0%); transition: width .2s }
|
|
19
19
|
:host(:not([value])) { background: linear-gradient(90deg,currentColor 25%, transparent 50%, currentColor 75%) 50%/400% }
|
|
20
20
|
@media (prefers-reduced-motion: no-preference) { :host { animation: indeterminate 2s linear infinite } }
|
|
21
|
-
@keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(
|
|
22
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWNvbWJvYm94L2Rpc3QvdS1jb21ib2JveC5qcyIsIi4uL2Rlc2lnbnN5c3RlbS91dGlscy50cyIsIi4uL2Rlc2lnbnN5c3RlbS9hbmFseXRpY3MvYW5hbHl0aWNzLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BhZ2luYXRpb24vcGFnaW5hdGlvbi1oZWxwZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC10b2dnbGUuanMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9icmVhZGNydW1icy9icmVhZGNydW1icy1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9kaWFsb2cvZGlhbG9nLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2Vycm9yc3VtbWFyeS9lcnJvcnN1bW1hcnktb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kYXRhbGlzdC9kaXN0L3UtZGF0YWxpc3QuanMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGQvZmllbGQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGRzZXQvZmllbGRzZXQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vbG9nby9sb2dvLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BvcG92ZXIvcG9wb3Zlci1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90YWJsZS90YWJsZS1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b2dnbGVncm91cC90b2dnbGVncm91cC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b29sdGlwL3Rvb2x0aXAtb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kZXRhaWxzL2Rpc3QvdS1kZXRhaWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtcHJvZ3Jlc3MvZGlzdC91LXByb2dyZXNzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xuXG4vLyB1LXRhYnMudHNcbnZhciBBUklBX0NPTlRST0xTID0gXCJhcmlhLWNvbnRyb2xzXCI7XG52YXIgQVJJQV9TRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xudmFyIFVIVE1MVGFic0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgRElTUExBWV9CTE9DSyk7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFibGlzdFwiLCB0aGlzKVswXSB8fCBudWxsO1xuICB9XG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICBzZXRTZWxlY3RlZCh0aGlzLnRhYnNbaW5kZXhdKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJcIiwgdGhpcyk7XG4gIH1cbiAgZ2V0IHBhbmVscygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJwYW5lbFwiLCB0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYkxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFibGlzdFwiKTtcbiAgICBvbih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCkgdGhpcy5oYW5kbGVFdmVudCgpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LnR5cGUgPT09IFwibXV0YXRpb25cIikge1xuICAgICAgY29uc3QgdGFiID0gdGhpcy50YWJzW01hdGgubWF4KHRoaXMuc2VsZWN0ZWRJbmRleCwgMCldO1xuICAgICAgcmV0dXJuIHRhYiA9PSBudWxsID8gdm9pZCAwIDogdGFiLnNldEF0dHJpYnV0ZShBUklBX1NFTEVDVEVELCBcInRydWVcIik7XG4gICAgfVxuICAgIGNvbnN0IHsga2V5IH0gPSBldmVudDtcbiAgICBjb25zdCB0YWJzID0gWy4uLnRoaXMudGFic107XG4gICAgY29uc3QgcHJldiA9IHRhYnMuZmluZEluZGV4KCh0YWIpID0+IHRhYi5jb250YWlucyhldmVudC50YXJnZXQpKTtcbiAgICBsZXQgbmV4dCA9IHByZXY7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgcHJldiA9PT0gLTEpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSBzZXRTZWxlY3RlZCh0YWJzW3ByZXZdKTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIgJiYgIWFzQnV0dG9uKGV2ZW50KSkge1xuICAgICAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIiB8fCBrZXkgPT09IFwiQXJyb3dSaWdodFwiKVxuICAgICAgICBuZXh0ID0gKHByZXYgKyAxKSAlIHRhYnMubGVuZ3RoO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93VXBcIiB8fCBrZXkgPT09IFwiQXJyb3dMZWZ0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiB8fCB0YWJzLmxlbmd0aCkgLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkVuZFwiKSBuZXh0ID0gdGFicy5sZW5ndGggLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkhvbWVcIikgbmV4dCA9IDA7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiVGFiXCIpIG5leHQgPSBnZXRTZWxlY3RlZEluZGV4KHRhYnMpO1xuICAgICAgZWxzZSByZXR1cm47XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGFic1twcmV2XS50YWJJbmRleCA9IC0xO1xuICAgICAgICB0YWJzW25leHRdLnRhYkluZGV4ID0gMDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGtleSAhPT0gXCJUYWJcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0YWJzW25leHRdLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJzKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbn07XG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MVGFiRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIEFSSUFfU0VMRUNURUQsIEFSSUFfQ09OVFJPTFNdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jayB9XCJcbiAgICApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFiXCIpO1xuICAgIHRoaXMudGFiSW5kZXggPSB0aGlzLnNlbGVjdGVkID8gMCA6IC0xO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoIVNLSVBfQVRUUl9DSEFOR0UgJiYgdGhpcy5zZWxlY3RlZCAmJiB0aGlzLnRhYkxpc3QpIHtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgICAgY29uc3QgdGFicyA9IFsuLi50aGlzLnRhYkxpc3QucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpXTtcbiAgICAgIGNvbnN0IHBhbmVscyA9IHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFicGFuZWxcIiwgdGhpcy50YWJzRWxlbWVudCB8fCB0aGlzKTtcbiAgICAgIGNvbnN0IG5leHRQYW5lbCA9IGdldFBhbmVsKHRoaXMsIHBhbmVsc1t0YWJzLmluZGV4T2YodGhpcyldKTtcbiAgICAgIGlmIChuZXh0UGFuZWwpIGF0dHIobmV4dFBhbmVsLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKHRoaXMpKTtcbiAgICAgIHRhYnMuZm9yRWFjaCgodGFiLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBwYW5lbCA9IGdldFBhbmVsKHRhYiwgcGFuZWxzW2luZGV4XSk7XG4gICAgICAgIHRhYi50YWJJbmRleCA9IHRhYiA9PT0gdGhpcyA/IDAgOiAtMTtcbiAgICAgICAgYXR0cih0YWIsIEFSSUFfU0VMRUNURUQsIGAke3RhYiA9PT0gdGhpc31gKTtcbiAgICAgICAgaWYgKHBhbmVsKSBwYW5lbC5oaWRkZW4gPSBwYW5lbCAhPT0gbmV4dFBhbmVsO1xuICAgICAgICBpZiAocGFuZWwpIGF0dHIodGFiLCBBUklBX0NPTlRST0xTLCBwYW5lbC5pZCk7XG4gICAgICB9KTtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgY29uc3QgdGFibGlzdCA9IHRoaXMucGFyZW50RWxlbWVudDtcbiAgICByZXR1cm4gKHRhYmxpc3QgPT0gbnVsbCA/IHZvaWQgMCA6IHRhYmxpc3Qubm9kZU5hbWUpID09PSBcIlUtVEFCTElTVFwiID8gdGFibGlzdCA6IG51bGw7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQpID09PSBcInRydWVcIjtcbiAgfVxuICBzZXQgc2VsZWN0ZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQsIGAkeyEhdmFsdWV9YCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiB0YWIgaW4gYSB0YWJsaXN0LiAqL1xuICBnZXQgaW5kZXgoKSB7XG4gICAgY29uc3QgdGFiTGlzdCA9IHRoaXMudGFiTGlzdDtcbiAgICByZXR1cm4gdGFiTGlzdCA/IFsuLi50YWJMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKV0uaW5kZXhPZih0aGlzKSA6IDA7XG4gIH1cbiAgZ2V0IHBhbmVsKCkge1xuICAgIHJldHVybiBnZXRQYW5lbCh0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYlBhbmVsRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImhpZGRlblwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFicGFuZWxcIik7XG4gICAgdGhpcy5oaWRkZW4gPSBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicykgPT09IC0xO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLmhpZGRlbiB8fCBpc0ZvY3VzYWJsZSh0aGlzLmZpcnN0Q2hpbGQpKVxuICAgICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIG51bGwpO1xuICAgIGVsc2UgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgY29uc3QgY3NzID0gYHUtdGFiWyR7QVJJQV9DT05UUk9MU309XCIke3RoaXMuaWR9XCJdYDtcbiAgICByZXR1cm4gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKGNzcyk7XG4gIH1cbn07XG52YXIgcXVlcnlXaXRob3V0TmVzdGVkID0gKHRhZywgc2VsZikgPT4gc2VsZi5xdWVyeVNlbGVjdG9yQWxsKGAke3RhZ306bm90KDpzY29wZSB1LXRhYnBhbmVsICR7dGFnfSlgKTtcbnZhciBnZXRQYW5lbCA9ICh0YWIsIHBhbmVsKSA9PiB7XG4gIGNvbnN0IGlkMiA9IGF0dHIodGFiLCBBUklBX0NPTlRST0xTKSB8fCB1c2VJZChwYW5lbCk7XG4gIGNvbnN0IGVsID0gZ2V0Um9vdCh0YWIpLmdldEVsZW1lbnRCeUlkKGlkMik7XG4gIHJldHVybiAoZWwgPT0gbnVsbCA/IHZvaWQgMCA6IGVsLm5vZGVOYW1lKSA9PT0gXCJVLVRBQlBBTkVMXCIgPyBlbCA6IG51bGw7XG59O1xudmFyIGdldFNlbGVjdGVkSW5kZXggPSAodGFicykgPT4gWy4uLnRhYnNdLmZpbmRJbmRleCgodGFiKSA9PiBhdHRyKHRhYiwgQVJJQV9TRUxFQ1RFRCkgPT09IFwidHJ1ZVwiKTtcbnZhciBzZXRTZWxlY3RlZCA9ICh0YWIpID0+IHRhYiAmJiBhdHRyKHRhYiwgXCJhcmlhLXNlbGVjdGVkXCIsIFwidHJ1ZVwiKTtcbnZhciBpc0ZvY3VzYWJsZSA9IChlbCkgPT4gZWwgaW5zdGFuY2VvZiBFbGVtZW50ICYmICFlbC5tYXRjaGVzKCc6ZGlzYWJsZWQsW3RhYmluZGV4Xj1cIi1cIl0nKSAmJiBlbC5tYXRjaGVzKFxuICBgW2NvbnRlbnRlZGl0YWJsZV0sW2NvbnRyb2xzXSxbaHJlZl0sW3RhYmluZGV4XSxpbnB1dDpub3QoW3R5cGU9XCJoaWRkZW5cIl0pLHNlbGVjdCx0ZXh0YXJlYSxidXR0b24sc3VtbWFyeSxpZnJhbWVgXG4pO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJzXCIsIFVIVE1MVGFic0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJsaXN0XCIsIFVIVE1MVGFiTGlzdEVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJcIiwgVUhUTUxUYWJFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFicGFuZWxcIiwgVUhUTUxUYWJQYW5lbEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTFRhYkVsZW1lbnQsIFVIVE1MVGFiTGlzdEVsZW1lbnQsIFVIVE1MVGFiUGFuZWxFbGVtZW50LCBVSFRNTFRhYnNFbGVtZW50IH07XG4iLCJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5cbi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfRklSRUZPWCA9IElTX0JST1dTRVIgJiYgL2ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIEZPQ1VTX09VVExJTkUgPSBcIm91dGxpbmU6IDFweCBkb3R0ZWQ7IG91dGxpbmU6IDVweCBhdXRvIEhpZ2hsaWdodDsgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2JzZXJ2ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgbXV0YXRpb25PYnNlcnZlciA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHJldHVybiBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICB0cnkge1xuICAgIG9ic2VydmVycy5nZXQoZWxlbWVudCkuZGlzY29ubmVjdCgpO1xuICAgIG9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQyLCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0MikgZWwudGV4dENvbnRlbnQgPSB0ZXh0MjtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIExJVkU7XG52YXIgTElWRV9TUl9GSVggPSAwO1xudmFyIHNwZWFrID0gKHRleHQyKSA9PiB7XG4gIGlmICghTElWRSkge1xuICAgIExJVkUgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIExJVkUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246Zml4ZWQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXBcIjtcbiAgICBhdHRyKExJVkUsIFwiYXJpYS1saXZlXCIsIFwiYXNzZXJ0aXZlXCIpO1xuICB9XG4gIGlmICghTElWRS5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoTElWRSk7XG4gIGlmICh0ZXh0MikgTElWRS50ZXh0Q29udGVudCA9IGAke3RleHQyfSR7TElWRV9TUl9GSVgrKyAlIDIgPyBcIlxceEEwXCIgOiBcIlwifWA7XG59O1xudmFyIHNldFZhbHVlID0gKGlucHV0LCBkYXRhLCB0eXBlID0gXCJcIikgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlLCBkYXRhLCBpbnB1dFR5cGU6IHR5cGUgfTtcbiAgY29uc3QgcHJvdG8gPSBIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImJlZm9yZWlucHV0XCIsIGV2ZW50KSk7XG4gIChfYiA9IChfYTIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBcInZhbHVlXCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoaW5wdXQsIGRhdGEpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiaW5wdXRcIiwgZXZlbnQpKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbn07XG5cbi8vIHUtY29tYm9ib3gudHNcbnZhciBJU19QUkVTUyA9IGZhbHNlO1xudmFyIEVWRU5UUyA9IFwiYmVmb3JlaW5wdXQsYmx1cixmb2N1cyxjbGljayxpbnB1dCxrZXlkb3duLG1vdXNlZG93bixtb3VzZXVwXCI7XG52YXIgRVZFTlRfT05DRSA9IHsgb25jZTogdHJ1ZSwgcGFzc2l2ZTogdHJ1ZSB9O1xudmFyIElTX0ZJUkVGT1hfTUFDID0gSVNfRklSRUZPWCAmJiAhSVNfQU5EUk9JRDtcbnZhciBJU19NT0JJTEUgPSBJU19BTkRST0lEIHx8IElTX0lPUztcbnZhciBGQUxTRSA9IFwiZmFsc2VcIjtcbnZhciBDTElDSyA9IFwiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0XCI7XG52YXIgVEVYVFMgPSB7XG4gIGFkZGVkOiBcIkFkZGVkXCIsXG4gIGVtcHR5OiBcIk5vIHNlbGVjdGVkXCIsXG4gIGZvdW5kOiBcIk5hdmlnYXRlIGxlZnQgdG8gZmluZCAlZCBzZWxlY3RlZFwiLFxuICBpbnZhbGlkOiBcIkludmFsaWQgdmFsdWVcIixcbiAgb2Y6IFwib2ZcIixcbiAgcmVtb3ZlOiBcIlByZXNzIHRvIHJlbW92ZVwiLFxuICByZW1vdmVkOiBcIlJlbW92ZWRcIlxufTtcbnZhciBVSFRNTENvbWJvYm94RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9zcGVhayA9IFwiXCI7XG4gICAgdGhpcy5fdGV4dHMgPSBfX3NwcmVhZFZhbHVlcyh7fSwgVEVYVFMpO1xuICAgIHRoaXMuX3ZhbHVlID0gXCJcIjtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAgICAgLy8gQ29udGVudCBzbG90XG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGA6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jazsgY3Vyc29yOiBwb2ludGVyOyAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCkgfSAvKiBNdXN0IGJlIGRpc3BsYXkgYmxvY2sgaW4gU2FmYXJpIHRvIGFsbG93IGZvY3VzIGluc2lkZSAqL1xuXHRcdFx0XHQ6aG9zdCg6bm90KFtkYXRhLW11bHRpcGxlXSkpIDo6c2xvdHRlZChkYXRhKSxcblx0XHRcdFx0Omhvc3QoW2RhdGEtbXVsdGlwbGU9XCJmYWxzZVwiXSkgOjpzbG90dGVkKGRhdGEpIHsgZGlzcGxheTogbm9uZSB9IC8qIEhpZGUgZGF0YSBpZiBub3QgbXVsdGlwbGUgKi9cblx0XHRcdFx0OjpzbG90dGVkKGlucHV0W2lucHV0bW9kZT1cIm5vbmVcIl0pIHsgb3V0bGluZTogbm9uZSB9IC8qIEhpZGUgdGVtcG9yYXJ5IGZvdWNzIG91dGxpbmUgZmxhc2ggKi9cblx0XHRcdFx0OjpzbG90dGVkKGRlbCkgeyB0ZXh0LWRlY29yYXRpb246IG5vbmUgfVxuXHRcdFx0XHQ6OnNsb3R0ZWQoZGF0YTpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcG9pbnRlci1ldmVudHM6IG5vbmUgfVxuICAgICAgICA6OnNsb3R0ZWQoZGF0YSk6OmFmdGVyIHsgY29udGVudDogJ1xcXFwwMEQ3JzsgY29udGVudDogJ1xcXFwwMEQ3JyAvICcnOyBwYWRkaW5nLWlubGluZTogLjVjaDsgcG9pbnRlci1ldmVudHM6IGF1dG8gfVxuICAgICAgICA6OnNsb3R0ZWQoZGF0YTpmb2N1cykgeyAke0ZPQ1VTX09VVExJTkV9IH1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuICAvLyBMb2NhbGx5IHN0b3JlIHZhbHVlIHRvIHN0b3JlIHZhbHVlIGJlZm9yZSBpbnB1dC1jbGlja1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoVEVYVFMpLm1hcCgoa2V5KSA9PiBgZGF0YS1zci0ke2tleX1gKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLl9yb290ID0gZ2V0Um9vdCh0aGlzKTtcbiAgICBvbih0aGlzLCBFVkVOVFMsIHRoaXMsIHRydWUpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG4gICAgc2V0VGltZW91dChyZW5kZXIsIDAsIHRoaXMpO1xuICAgIHNldFRpbWVvdXQoc3luY0lucHV0VmFsdWUsIDAsIHRoaXMpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBfLCB2YWwpIHtcbiAgICBjb25zdCB0ZXh0MiA9IHByb3Auc3BsaXQoXCJkYXRhLXNyLVwiKVsxXTtcbiAgICBpZiAoVEVYVFNbdGV4dDJdKSB0aGlzLl90ZXh0c1t0ZXh0Ml0gPSB2YWwgfHwgVEVYVFNbdGV4dDJdO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIG9mZih0aGlzLCBFVkVOVFMsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fY2xlYXIgPSB0aGlzLl9mb2N1cyA9IHRoaXMuX2NvbnRyb2wgPSB2b2lkIDA7XG4gICAgdGhpcy5fbGlzdCA9IHRoaXMuX29wdGlvbnMgPSB0aGlzLl9yb290ID0gdm9pZCAwO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJlZm9yZWlucHV0XCIpIHRoaXMuX3ZhbHVlID0gKHRhcmdldCA9PSBudWxsID8gdm9pZCAwIDogdGFyZ2V0LnZhbHVlKSB8fCBcIlwiO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJsdXJcIikgb25CbHVyKHRoaXMpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImZvY3VzXCIpIG9uRm9jdXModGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImlucHV0XCIpIG9uSW5wdXQodGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgb25LZXlEb3duKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgSVNfUFJFU1MgPSB0aGlzLmNvbnRhaW5zKHRhcmdldCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwibW91c2V1cFwiKSBJU19QUkVTUyA9IGZhbHNlO1xuICAgIGlmIChldmVudC50eXBlID09PSBcIm11dGF0aW9uXCIpIHJlbmRlcih0aGlzLCBldmVudCk7XG4gIH1cbiAgZ2V0IG11bHRpcGxlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gYXR0cih0aGlzLCBcImRhdGEtbXVsdGlwbGVcIikpICE9IG51bGwgPyBfYTIgOiBGQUxTRSkgIT09IEZBTFNFO1xuICB9XG4gIHNldCBtdWx0aXBsZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJkYXRhLW11bHRpcGxlXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBjcmVhdGFibGUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSBhdHRyKHRoaXMsIFwiZGF0YS1jcmVhdGFibGVcIikpICE9IG51bGwgPyBfYTIgOiBGQUxTRSkgIT09IEZBTFNFO1xuICB9XG4gIHNldCBjcmVhdGFibGUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwiZGF0YS1jcmVhdGFibGVcIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IGNvbnRyb2woKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpXG4gICAgICB0aGlzLl9jb250cm9sID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2w7XG4gIH1cbiAgZ2V0IGxpc3QoKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fbGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpXG4gICAgICB0aGlzLl9saXN0ID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwidS1kYXRhbGlzdCxkYXRhbGlzdFwiKTtcbiAgICByZXR1cm4gdGhpcy5fbGlzdDtcbiAgfVxuICBnZXQgY2xlYXIoKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fY2xlYXIpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKSB0aGlzLl9jbGVhciA9IHRoaXMucXVlcnlTZWxlY3RvcihcImRlbFwiKTtcbiAgICByZXR1cm4gdGhpcy5fY2xlYXI7XG4gIH1cbiAgZ2V0IGl0ZW1zKCkge1xuICAgIGlmICghdGhpcy5faXRlbXMpIHRoaXMuX2l0ZW1zID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRhdGFcIik7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHZhciBfYTIsIF9iO1xuICAgIGlmICghdGhpcy5fb3B0aW9ucykge1xuICAgICAgY29uc3QgdGFnID0gKChfYTIgPSB0aGlzLmxpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIubm9kZU5hbWUpID09PSBcIlUtREFUQUxJU1RcIiA/IFwidS1vcHRpb25cIiA6IFwib3B0aW9uXCI7XG4gICAgICB0aGlzLl9vcHRpb25zID0gKF9iID0gdGhpcy5saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cbiAgZ2V0IHZhbHVlcygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuaXRlbXNdLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSk7XG4gIH1cbn07XG52YXIgdGV4dCA9IChlbCkgPT4ge1xuICB2YXIgX2EyO1xuICByZXR1cm4gKChfYTIgPSBlbCA9PSBudWxsID8gdm9pZCAwIDogZWwudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xufTtcbnZhciBpc0RhdGEgPSAoZWwpID0+IGVsIGluc3RhbmNlb2YgSFRNTERhdGFFbGVtZW50O1xudmFyIHJlbmRlciA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgeyBfZm9jdXMsIF90ZXh0cywgaXRlbXMsIGNvbnRyb2wsIGxpc3QsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBsZXQgbGFiZWwgPSBgJHt0ZXh0KChfYTIgPSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmxhYmVscykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMlswXSl9LCAke211bHRpcGxlID8gaXRlbXMubGVuZ3RoID8gX3RleHRzLmZvdW5kLnJlcGxhY2UoXCIlZFwiLCBgJHtpdGVtcy5sZW5ndGh9YCkgOiBfdGV4dHMuZW1wdHkgOiBcIlwifWA7XG4gIGNvbnN0IGVkaXRzID0gW107XG4gIGZvciAoY29uc3QgeyBhZGRlZE5vZGVzLCByZW1vdmVkTm9kZXMgfSBvZiAoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LmRldGFpbCkgfHwgW10pIHtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIGFkZGVkTm9kZXMpIGlmIChpc0RhdGEoZWwpKSBlZGl0cy51bnNoaWZ0KGVsKTtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIHJlbW92ZWROb2RlcykgaWYgKGlzRGF0YShlbCkpIGVkaXRzLnB1c2goZWwpO1xuICB9XG4gIGNvbnN0IHNob3VsZEFubm91bmNlID0gbXVsdGlwbGUgPyBlZGl0cy5sZW5ndGggPT09IDEgOiBlZGl0c1swXSA9PT0gX2ZvY3VzO1xuICBpZiAoX2ZvY3VzICYmIGNvbnRyb2wgJiYgc2hvdWxkQW5ub3VuY2UpIHtcbiAgICBjb25zdCBpbnB1dE1vZGUgPSBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIpO1xuICAgIGNvbnN0IG5leHRGb2N1cyA9IGlzRGF0YShfZm9jdXMpID8gY29udHJvbCA6IF9mb2N1cztcbiAgICBzZWxmLl9zcGVhayA9IGAke190ZXh0c1tlZGl0c1swXS5pc0Nvbm5lY3RlZCA/IFwiYWRkZWRcIiA6IFwicmVtb3ZlZFwiXX0gJHt0ZXh0KGVkaXRzWzBdKX0sIGA7XG4gICAgaWYgKElTX01PQklMRSB8fCBfZm9jdXMgPT09IGNvbnRyb2wpIHNwZWFrKHNlbGYuX3NwZWFrKTtcbiAgICBpZiAoY29udHJvbCAhPT0gbmV4dEZvY3VzKSB7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiLCBudWxsKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgXCJub25lXCIpO1xuICAgICAgbGFiZWwgPSBcIlxceEEwXCI7XG4gICAgICBjb250cm9sLmZvY3VzKCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIGF0dHIoY29udHJvbCwgXCJhcmlhLWV4cGFuZGVkXCIsIFwidHJ1ZVwiKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgaW5wdXRNb2RlKTtcbiAgICAgIChfYTMgPSBuZXh0Rm9jdXMgPT0gbnVsbCA/IHZvaWQgMCA6IG5leHRGb2N1cy5mb2N1cykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy5jYWxsKG5leHRGb2N1cyk7XG4gICAgICBzZWxmLl9zcGVhayA9IFwiXCI7XG4gICAgICBpZiAoSVNfRklSRUZPWF9NQUMpIG9uKHNlbGYsIFwiYmx1clwiLCAoKSA9PiByZW5kZXIoc2VsZiksIEVWRU5UX09OQ0UpO1xuICAgICAgZWxzZSBzZXRUaW1lb3V0KHJlbmRlciwgMTAwLCBzZWxmKTtcbiAgICB9LCAxMDApO1xuICB9XG4gIGxldCBpZHggPSAwO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCBsYWJlbDIgPSB0ZXh0KGl0ZW0pO1xuICAgIGNvbnN0IHZhbHVlID0gaXRlbS52YWx1ZSB8fCBsYWJlbDI7XG4gICAgY29uc3QgYXJpYSA9IGAke3NlbGYuX3NwZWFrfSR7bGFiZWwyfSwgJHtfdGV4dHMucmVtb3ZlfSwgJHsrK2lkeH0gJHtfdGV4dHMub2Z9ICR7aXRlbXMubGVuZ3RofWA7XG4gICAgYXR0cihpdGVtLCBcInJvbGVcIiwgXCJidXR0b25cIik7XG4gICAgYXR0cihpdGVtLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgICBhdHRyKGl0ZW0sIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICBhdHRyKGl0ZW0sIFwiYXJpYS1sYWJlbFwiLCBhcmlhKTtcbiAgfVxuICBpZiAoIW11bHRpcGxlICYmIGlkeCA+IDEpXG4gICAgY29uc29sZS53YXJuKFwidS1jb21ib2JveDogTXVsdGlwbGUgPGRhdGE+IGZvdW5kIGluIHNpbmdsZSBtb2RlLlwiKTtcbiAgaWYgKGxpc3QpIGF0dHIobGlzdCwgXCJhcmlhLW11bHRpc2VsZWN0YWJsZVwiLCBgJHttdWx0aXBsZX1gKTtcbiAgaWYgKGNvbnRyb2wpIGF0dHIoY29udHJvbCwgXCJsaXN0XCIsIHVzZUlkKGxpc3QpKTtcbiAgaWYgKGNvbnRyb2wpIGF0dHIoY29udHJvbCwgXCJhcmlhLWxhYmVsXCIsIGAke3NlbGYuX3NwZWFrfSR7bGFiZWx9YCk7XG4gIGNvbnN0IHNlbGVjdCA9IHNlbGYucXVlcnlTZWxlY3RvcihcInNlbGVjdFwiKTtcbiAgaWYgKHNlbGVjdCkgc2VsZWN0Lm11bHRpcGxlID0gbXVsdGlwbGU7XG4gIGlmIChzZWxlY3QpIHNlbGVjdC50ZXh0Q29udGVudCA9IFwiXCI7XG4gIHNlbGVjdCA9PSBudWxsID8gdm9pZCAwIDogc2VsZWN0LmFwcGVuZCguLi5zZWxmLnZhbHVlcy5tYXAoKHZhbCkgPT4gbmV3IE9wdGlvbih2YWwsIHZhbCwgdHJ1ZSwgdHJ1ZSkpKTtcbiAgc3luY0NsZWFyV2l0aElucHV0KHNlbGYpO1xuICBzeW5jT3B0aW9uc1dpdGhJdGVtcyhzZWxmKTtcbiAgKF9iID0gbXV0YXRpb25PYnNlcnZlcihzZWxmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLnRha2VSZWNvcmRzKCk7XG59O1xudmFyIHN5bmNDbGVhcldpdGhJbnB1dCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChzZWxmLmNsZWFyKSBhdHRyKHNlbGYuY2xlYXIsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgaWYgKHNlbGYuY2xlYXIpIHNlbGYuY2xlYXIuaGlkZGVuID0gISgoX2EyID0gc2VsZi5jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnZhbHVlKTtcbn07XG52YXIgc3luY09wdGlvbnNXaXRoSXRlbXMgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF9zcGVhaywgb3B0aW9ucyA9IFtdLCB2YWx1ZXMgfSA9IHNlbGY7XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IChfYTIgPSBhdHRyKG9wdCwgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRleHQob3B0KTtcbiAgICBhdHRyKG9wdCwgXCJhcmlhLWxhYmVsXCIsIF9zcGVhayA/IGAke19zcGVha30ke3RleHQob3B0KX1gIDogbnVsbCk7XG4gICAgYXR0cihvcHQsIFwic2VsZWN0ZWRcIiwgdmFsdWVzLmluY2x1ZGVzKHZhbHVlKSA/IFwiXCIgOiBudWxsKTtcbiAgfVxufTtcbnZhciBzeW5jSW5wdXRWYWx1ZSA9IChzZWxmKSA9PiB7XG4gIGNvbnN0IHsgbXVsdGlwbGUsIGNvbnRyb2wsIGl0ZW1zIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9IHRleHQoaXRlbXNbMF0pO1xuICBpZiAoIW11bHRpcGxlICYmIGNvbnRyb2wgJiYgdmFsdWUgIT09IGNvbnRyb2wudmFsdWUpXG4gICAgc2V0VmFsdWUoY29udHJvbCwgdmFsdWUsIFwiaW5zZXJ0VGV4dFwiKTtcbn07XG52YXIgZGlzcGF0Y2hNYXRjaCA9IChzZWxmLCBzeW5jID0gdHJ1ZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF90ZXh0cywgb3B0aW9ucyA9IFtdLCBjcmVhdGFibGUsIGNvbnRyb2wsIGl0ZW1zLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBxdWVyeSA9IHZhbHVlLnRvTG93ZXJDYXNlKCkgfHwgbnVsbDtcbiAgbGV0IG1hdGNoID0gWy4uLm9wdGlvbnNdLmZpbmQoKG8pID0+IG8ubGFiZWwudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IHF1ZXJ5KTtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogbWF0Y2ggfTtcbiAgaWYgKHNlbGYuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJiZWZvcmVtYXRjaFwiLCBldmVudCkpKVxuICAgIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIG9wdC5zZWxlY3RlZCA9IG9wdCA9PT0gbWF0Y2g7XG4gIG1hdGNoID0gWy4uLm9wdGlvbnNdLmZpbmQoKG8pID0+IG8uc2VsZWN0ZWQpO1xuICBzeW5jT3B0aW9uc1dpdGhJdGVtcyhzZWxmKTtcbiAgaWYgKG1hdGNoKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgbWF0Y2gsIGZhbHNlLCAhIXN5bmMpO1xuICBpZiAoY3JlYXRhYmxlICYmIHZhbHVlKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgeyB2YWx1ZSB9LCBmYWxzZSk7XG4gIGlmICghbXVsdGlwbGUgJiYgaXRlbXNbMF0pIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1zWzBdLCB0cnVlLCBmYWxzZSk7XG4gIGlmIChzeW5jKSBzcGVhayhfdGV4dHMuaW52YWxpZCk7XG59O1xudmFyIGRpc3BhdGNoQ2hhbmdlID0gKHNlbGYsIGl0ZW0sIHJlbW92YWJsZSA9IHRydWUsIHN5bmMgPSB0cnVlKSA9PiB7XG4gIGNvbnN0IHsgY29udHJvbCwgaXRlbXMsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCBhZGQgPSBjcmVhdGVFbGVtZW50KFwiZGF0YVwiLCBpdGVtLmxhYmVsIHx8IGl0ZW0udmFsdWUsIHtcbiAgICB2YWx1ZTogaXRlbS52YWx1ZVxuICB9KTtcbiAgY29uc3QgcmVtb3ZlID0gWy4uLml0ZW1zXS5maW5kKChpKSA9PiBpLnZhbHVlID09PSBpdGVtLnZhbHVlKTtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogcmVtb3ZlIHx8IGFkZCB9O1xuICBjb25zdCBza2lwID0gcmVtb3ZlICYmICFyZW1vdmFibGU7XG4gIGlmICghc2tpcCAmJiBzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiYmVmb3JlY2hhbmdlXCIsIGV2ZW50KSkpIHtcbiAgICBpZiAoIW11bHRpcGxlKSBmb3IgKGNvbnN0IGl0ZW0yIG9mIFsuLi5pdGVtc10pIGl0ZW0yLnJlbW92ZSgpO1xuICAgIGlmIChyZW1vdmUpIHJlbW92ZS5yZW1vdmUoKTtcbiAgICBlbHNlIGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYmVmb3JlYmVnaW5cIiwgYWRkKTtcbiAgICBzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiYWZ0ZXJjaGFuZ2VcIiwgZXZlbnQpKTtcbiAgfVxuICBpZiAoc3luYykgc2V0VGltZW91dChzeW5jSW5wdXRWYWx1ZSwgMTAsIHNlbGYpO1xufTtcbnZhciBvbkZvY3VzID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBzZWxmLl9mb2N1cyA9IHRhcmdldDtcbiAgc3BlYWsoKTtcbn07XG52YXIgb25CbHVyID0gKHNlbGYpID0+IElTX1BSRVNTIHx8IHNldFRpbWVvdXQob25CbHVycmVkLCAwLCBzZWxmKTtcbnZhciBvbkJsdXJyZWQgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoIXNlbGYuX2ZvY3VzIHx8IHNlbGYuY29udGFpbnMoKF9hMiA9IHNlbGYuX3Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuYWN0aXZlRWxlbWVudCkpIHJldHVybjtcbiAgc2VsZi5fZm9jdXMgPSB2b2lkIDA7XG4gIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIGNvbnN0IHsgY2xpZW50WDogeCwgY2xpZW50WTogeSwgdGFyZ2V0IH0gPSBldmVudDtcbiAgY29uc3QgeyBjbGVhciwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGlmIChjbGVhciA9PSBudWxsID8gdm9pZCAwIDogY2xlYXIuY29udGFpbnModGFyZ2V0KSkge1xuICAgIGlmIChjb250cm9sKSBzZXRWYWx1ZShjb250cm9sLCBcIlwiLCBcImRlbGV0ZUNvbnRlbnRCYWNrd2FyZFwiKTtcbiAgICByZXR1cm4gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpO1xuICB9XG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChpdGVtLmNvbnRhaW5zKHRhcmdldCkpIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtKTtcbiAgICBpZiAoeSA+PSB0b3AgJiYgeSA8PSBib3R0b20gJiYgeCA+PSBsZWZ0ICYmIHggPD0gcmlnaHQpIHJldHVybiBpdGVtLmZvY3VzKCk7XG4gIH1cbiAgaWYgKHRhcmdldCA9PT0gc2VsZikgY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgb3B0aW9ucyA9IFtdLCBjb250cm9sLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBpc0NsaWNrID0gZXZlbnQgaW5zdGFuY2VvZiBJbnB1dEV2ZW50ID8gIWV2ZW50LmlucHV0VHlwZSB8fCBldmVudC5pbnB1dFR5cGUgPT09IENMSUNLIDogISF2YWx1ZTtcbiAgaWYgKGlzQ2xpY2spIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoY29udHJvbCkgY29udHJvbC52YWx1ZSA9IHNlbGYuX3ZhbHVlO1xuICAgIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpXG4gICAgICBpZiAob3B0LnZhbHVlICYmIG9wdC52YWx1ZSA9PT0gdmFsdWUpXG4gICAgICAgIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBvcHQsIG11bHRpcGxlKTtcbiAgfSBlbHNlIGlmICghbXVsdGlwbGUpIGRpc3BhdGNoTWF0Y2goc2VsZiwgZmFsc2UpO1xuICBzeW5jQ2xlYXJXaXRoSW5wdXQoc2VsZik7XG59O1xudmFyIG9uS2V5RG93biA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSkgcmV0dXJuO1xuICBjb25zdCB7IGNsZWFyLCBjb250cm9sLCBpdGVtcyB9ID0gc2VsZjtcbiAgY29uc3QgeyBrZXksIHJlcGVhdCwgdGFyZ2V0IH0gPSBldmVudDtcbiAgY29uc3QgaXNDb250cm9sID0gY29udHJvbCAmJiBjb250cm9sID09PSB0YXJnZXQ7XG4gIGNvbnN0IGluVGV4dCA9IGlzQ29udHJvbCAmJiAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5zZWxlY3Rpb25FbmQpO1xuICBsZXQgaW5kZXggPSBpc0NvbnRyb2wgPyBpdGVtcy5sZW5ndGggOiBbLi4uaXRlbXNdLmluZGV4T2YodGFyZ2V0KTtcbiAgaWYgKGlzQ29udHJvbCAmJiBrZXkgPT09IFwiVGFiXCIgJiYgY2xlYXIgJiYgIWNsZWFyLmhpZGRlbikge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY2xlYXIudGFiSW5kZXggPSAtMTtcbiAgICBjbGVhci5mb2N1cygpO1xuICAgIG9uKGNsZWFyLCBcImJsdXJcIiwgKCkgPT4gYXR0cihjbGVhciwgXCJ0YWJpbmRleFwiLCBudWxsKSwgRVZFTlRfT05DRSk7XG4gIH1cbiAgaWYgKCFpc0NvbnRyb2wgJiYgYXNCdXR0b24oZXZlbnQpIHx8IGluZGV4ID09PSAtMSkgcmV0dXJuO1xuICBpZiAoa2V5ID09PSBcIkFycm93UmlnaHRcIiAmJiAhaXNDb250cm9sKSBpbmRleCArPSAxO1xuICBlbHNlIGlmIChrZXkgPT09IFwiQXJyb3dMZWZ0XCIgJiYgIWluVGV4dCkgaW5kZXggLT0gMTtcbiAgZWxzZSBpZiAoa2V5ID09PSBcIkVudGVyXCIgJiYgaXNDb250cm9sKSB7XG4gICAgY29uc3QgZm9ybSA9IGF0dHIoY29udHJvbCwgXCJmb3JtXCIpO1xuICAgIGF0dHIoY29udHJvbCwgXCJmb3JtXCIsIFwiI1wiKTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gYXR0cihjb250cm9sLCBcImZvcm1cIiwgZm9ybSkpO1xuICAgIHJldHVybiBkaXNwYXRjaE1hdGNoKHNlbGYpO1xuICB9IGVsc2UgaWYgKChrZXkgPT09IFwiQmFja3NwYWNlXCIgfHwga2V5ID09PSBcIkRlbGV0ZVwiKSAmJiAhaW5UZXh0KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoIXJlcGVhdCAmJiBpdGVtc1tpbmRleF0pIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtc1tpbmRleF0pO1xuICAgIGlmIChpc0NvbnRyb2wpIGluZGV4IC09IDE7XG4gIH0gZWxzZSByZXR1cm4gaXNDb250cm9sIHx8IChjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCkpO1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAoX2EyID0gaXRlbXNbTWF0aC5tYXgoMCwgaW5kZXgpXSB8fCBjb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1jb21ib2JveFwiLCBVSFRNTENvbWJvYm94RWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MQ29tYm9ib3hFbGVtZW50IH07XG4iLCJpbXBvcnQgeyBjbHN4IH0gZnJvbSBcImNsc3hcIjtcblxuZXhwb3J0IGNvbnN0IFFVSUNLX0VWRU5UID0geyBjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG5leHBvcnQgY29uc3QgSVNfQlJPV1NFUiA9XG5cdHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiO1xuXG4vLyBUT0RPOiBEb2N1bWVudGF0aW9uIGZvciBwcmV0dHlOdW1iZXJcbmxldCBJTlRMX05VTTogSW50bC5OdW1iZXJGb3JtYXQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcHJldHR5TnVtYmVyKG51bWJlcjogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdGlmICghSU5UTF9OVU0pXG5cdFx0SU5UTF9OVU0gPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXG5cdFx0XHQoSVNfQlJPV1NFUiAmJiBhdHRyKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgXCJsYW5nXCIpKSB8fCBcIm5vXCIsXG5cdFx0KTtcblx0cmV0dXJuIElOVExfTlVNLmZvcm1hdChOdW1iZXIobnVtYmVyKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZTxUIGV4dGVuZHMgdW5rbm93bltdPihcblx0Y2FsbGJhY2s6ICguLi5hcmdzOiBUKSA9PiB2b2lkLFxuXHRkZWxheTogbnVtYmVyLFxuKSB7XG5cdGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cblx0cmV0dXJuICguLi5hcmdzOiBUKSA9PiB7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0XHR0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gY2FsbGJhY2soLi4uYXJncyksIGRlbGF5KTtcblx0fTtcbn1cblxuLyoqXG4gKiBhdHRyXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IGdldCwgc2V0IGFuZCByZW1vdmUgYXR0cmlidXRlc1xuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIG5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lIHRvIGdldCwgc2V0IG9yIHJlbW92ZSwgb3IgYSBvYmplY3QgdG8gc2V0IG11bHRpcGxlIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB2YWx1ZSBBIHZhbGlkIGF0dHJpYnV0ZSB2YWx1ZSBvciBudWxsIHRvIHJlbW92ZSBhdHRyaWJ1dGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dHIoXG5cdGVsOiBFbGVtZW50LFxuXHRuYW1lOiBzdHJpbmcsXG5cdHZhbHVlPzogc3RyaW5nIHwgbnVsbCxcbik6IHN0cmluZyB8IG51bGwge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKSA/PyBudWxsOyAvLyBGYWxsYmFjayB0byBudWxsIG9ubHkgaWYgZWwgaXMgdW5kZWZpbmVkXG5cdGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuXHRyZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiB1c2VJZFxuICogQHJldHVybiBBIGdlbmVyYXRlZCB1bmlxdWUgSURcbiAqL1xubGV0IGlkID0gMDtcbmNvbnN0IFVVSUQgPSBgJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDUpfWA7XG5leHBvcnQgZnVuY3Rpb24gdXNlSWQoZWw6IEVsZW1lbnQpIHtcblx0aWYgKCFlbC5pZCkgZWwuaWQgPSBgJHtVVUlEfSR7KytpZH1gO1xuXHRyZXR1cm4gZWwuaWQ7XG59XG5cbi8vIEludGVybmFsIGhlbHBlciBmb3Igb24gLyBvZmZcbmNvbnN0IGV2ZW50cyA9IChcblx0YWN0aW9uOiBcImFkZFwiIHwgXCJyZW1vdmVcIixcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0cmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj4sXG4pOiB2b2lkID0+IHtcblx0Zm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG5cdFx0cmVzdFswXSA9IHR5cGU7XG5cdFx0ZWxlbWVudFtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdKC4uLnJlc3QpO1xuXHR9XG59O1xuXG4vKipcbiAqIG9uXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9uID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG5cbi8qKlxuICogb2ZmXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9mZiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xuXG4vKipcbiAqIFNjcm9sbGVyIHRhcmdlcyBoZWxwaW5nIGFuY2hvclBvc2l0aW9uXG4gKi9cbmNvbnN0IFNDUk9MTEVSID0gSVNfQlJPV1NFUiA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikgOiBudWxsOyAvLyBVc2VkIHRvIGVuc3VyZSB3ZSBoYXZlIHNjcm9sbGFiaWxpdHkgdW5kZXJcbmNvbnN0IFRBUkdFVFMgPSBuZXcgTWFwPEVsZW1lbnQsICgpID0+IHZvaWQ+KCk7IC8vIFN0b3JlIGN1cnJlbnQgb3BlbiBwb3BwZXJzIGFuZCB0aGVpciB1cGRhdGUgZnVuY3Rpb25zXG5jb25zdCBUQVJHRVRTX1VQREFURSA9ICgpID0+IHtcblx0Zm9yIChjb25zdCBbXywgdXBkYXRlXSBvZiBUQVJHRVRTKSB1cGRhdGUoKTtcbn07XG5cbmlmIChTQ1JPTExFUikge1xuXHRTQ1JPTExFUi5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtwYWRkaW5nOjFweDt0b3A6MDtsZWZ0OjBweFwiO1xuXHRvbih3aW5kb3csIFwibG9hZCxyZXNpemUsc2Nyb2xsXCIsIFRBUkdFVFNfVVBEQVRFLCBRVUlDS19FVkVOVCk7XG59XG5cbi8qKlxuICogYW5jaG9yUG9zaXRpb25cbiAqIEBwYXJhbSB0YXJnZXQgVGhlIEVsZW1lbnQgdG8gcG9zaXRpb25cbiAqIEBwYXJhbSBhbmNob3IgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIGFuY2hvclxuICovXG5jb25zdCBQT1NJVElPTiA9IHsgdG9wOiAwLCByaWdodDogMSwgYm90dG9tOiAyLCBsZWZ0OiAzIH07IC8vIFNwZWVkIHVwIGJ5IHVzaW5nIGEgY29uc3QgbWFwXG5cbmV4cG9ydCBmdW5jdGlvbiBhbmNob3JQb3NpdGlvbihcblx0dGFyZ2V0OiBIVE1MRWxlbWVudCxcblx0YW5jaG9yOiBFbGVtZW50IHwgZmFsc2UsXG5cdHBsYWNlPzogc3RyaW5nIHwgbnVtYmVyLFxuXHRmb3JjZT86IGJvb2xlYW4sXG4pIHtcblx0Y29uc3QgcG9zaXRpb24gPVxuXHRcdFBPU0lUSU9OW3BsYWNlIGFzIGtleW9mIHR5cGVvZiBQT1NJVElPTl0gPz9cblx0XHROdW1iZXIocGxhY2UpID8/XG5cdFx0UE9TSVRJT04uYm90dG9tO1xuXG5cdGlmIChhbmNob3IgPT09IGZhbHNlIHx8ICFhbmNob3IuaXNDb25uZWN0ZWQgfHwgIXRhcmdldC5pc0Nvbm5lY3RlZClcblx0XHRyZXR1cm4gVEFSR0VUUy5kZWxldGUodGFyZ2V0KTsgLy8gU3RvcCB3YXRjaGluZyBpZiBhbmNob3IgaXMgcmVtb3ZlZCBmcm9tIERPTVxuXHRpZiAoIVNDUk9MTEVSPy5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoU0NST0xMRVIgfHwgXCJcIik7IC8vIEVuc3VyZSB3ZSBoYXZlIHRoZSBzY3JvbGxlclxuXHRpZiAoIVRBUkdFVFMuaGFzKHRhcmdldCkpXG5cdFx0VEFSR0VUUy5zZXQodGFyZ2V0LCAoKSA9PiBhbmNob3JQb3NpdGlvbih0YXJnZXQsIGFuY2hvciwgcG9zaXRpb24sIGZvcmNlKSk7XG5cblx0Y29uc3QgaXNIVE1MQW5jaG9yID0gYW5jaG9yIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7IC8vIFNWRyBvciBYTUwgZWxlbWVudHMgZG9lcyBub3QgaGF2ZSBvZmZzZXRXaWR0aCBvciBvZmZzZXRIZWlnaHRcblx0Y29uc3QgeyBvZmZzZXRXaWR0aDogdGFyZ2V0Vywgb2Zmc2V0SGVpZ2h0OiB0YXJnZXRIIH0gPSB0YXJnZXQ7XG5cdGNvbnN0IGFuY2hvclcgPSBpc0hUTUxBbmNob3IgPyBhbmNob3Iub2Zmc2V0V2lkdGggOiBhbmNob3IuY2xpZW50V2lkdGg7XG5cdGNvbnN0IGFuY2hvckggPSBpc0hUTUxBbmNob3IgPyBhbmNob3Iub2Zmc2V0SGVpZ2h0IDogYW5jaG9yLmNsaWVudEhlaWdodDtcblx0Y29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3AgfSA9IGFuY2hvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0Y29uc3QgYW5jaG9yWCA9IE1hdGgucm91bmQobGVmdCAtIChhbmNob3JXIC0gd2lkdGgpIC8gMik7IC8vIENvcnJlY3QgZm9yIENTUyB0cmFuc2Zvcm0gc2NhbGVcblx0Y29uc3QgYW5jaG9yWSA9IE1hdGgucm91bmQodG9wIC0gKGFuY2hvckggLSBoZWlnaHQpIC8gMik7IC8vIENvcnJlY3QgZm9yIENTUyB0cmFuc2Zvcm0gc2NhbGVcblxuXHRjb25zdCBoYXNTcGFjZUxlZnQgPSBhbmNob3JYIC0gdGFyZ2V0VyA+IDA7XG5cdGNvbnN0IGhhc1NwYWNlUmlnaHQgPSBhbmNob3JXICsgYW5jaG9yVyArIHRhcmdldFcgPCB3aW5kb3cuaW5uZXJXaWR0aDtcblx0Y29uc3QgaGFzU3BhY2VPdmVyID0gYW5jaG9yWSAtIHRhcmdldEggPiAwO1xuXHRjb25zdCBoYXNTcGFjZVVuZGVyID0gYW5jaG9yWSArIGFuY2hvckggKyB0YXJnZXRIIDwgd2luZG93LmlubmVySGVpZ2h0O1xuXHRjb25zdCBwb3NpdGlvblJpZ2h0ID1cblx0XHQocG9zaXRpb24gPT09IFBPU0lUSU9OLnJpZ2h0ICYmIChmb3JjZSB8fCBoYXNTcGFjZVJpZ2h0KSkgfHwgIWhhc1NwYWNlTGVmdDsgLy8gQWx3YXlzIHBvc2l0aW9uIHJpZ2h0IHdoZW4gbm8gaGFzU3BhY2VMZWZ0LCBhcyBubyBPUyBzY3JvbGxzIGZ1cnRoZXIgdXAgdGhhbiAwXG5cdGNvbnN0IHBvc2l0aW9uVW5kZXIgPVxuXHRcdChwb3NpdGlvbiA9PT0gUE9TSVRJT04uYm90dG9tICYmIChmb3JjZSB8fCBoYXNTcGFjZVVuZGVyKSkgfHwgIWhhc1NwYWNlT3ZlcjsgLy8gQWx3YXlzIHBvc2l0aW9uIHVuZGVyIHdoZW4gbm8gaGFzU3BhY2VPdmVyLCBhcyBubyBPUyBzY3JvbGxzIGZ1cnRoZXIgdXAgdGhhbiAwXG5cdGNvbnN0IGNlbnRlclggPSBNYXRoLm1pbihcblx0XHRNYXRoLm1heCgxMCwgYW5jaG9yWCAtICh0YXJnZXRXIC0gYW5jaG9yVykgLyAyKSxcblx0XHR3aW5kb3cuaW5uZXJXaWR0aCAtIHRhcmdldFcgLSAxMCxcblx0KTtcblx0Y29uc3QgY2VudGVyWSA9IE1hdGgubWluKFxuXHRcdE1hdGgubWF4KDEwLCBhbmNob3JZIC0gKHRhcmdldEggLSBhbmNob3JIKSAvIDIpLFxuXHRcdHdpbmRvdy5pbm5lckhlaWdodCAtIHRhcmdldEggLSAxMCxcblx0KTtcblx0Y29uc3QgaXNWZXJ0aWNhbCA9IHBvc2l0aW9uID09PSBQT1NJVElPTi50b3AgfHwgcG9zaXRpb24gPT09IFBPU0lUSU9OLmJvdHRvbTtcblxuXHR0YXJnZXQuc3R5bGUubGVmdCA9IGAke01hdGgucm91bmQoaXNWZXJ0aWNhbCA/IGNlbnRlclggOiBwb3NpdGlvblJpZ2h0ID8gYW5jaG9yWCArIGFuY2hvclcgOiBhbmNob3JYIC0gdGFyZ2V0Vyl9cHhgO1xuXHR0YXJnZXQuc3R5bGUudG9wID0gYCR7TWF0aC5yb3VuZChpc1ZlcnRpY2FsID8gKHBvc2l0aW9uVW5kZXIgPyBhbmNob3JZICsgYW5jaG9ySCA6IGFuY2hvclkgLSB0YXJnZXRIKSA6IGNlbnRlclkpfXB4YDtcblx0U0NST0xMRVI/LnN0eWxlLnNldFByb3BlcnR5KFxuXHRcdFwidHJhbnNsYXRlXCIsXG5cdFx0YDBweCAke01hdGgucm91bmQocG9zaXRpb25VbmRlciA/IHdpbmRvdy5zY3JvbGxZICsgYW5jaG9yWSArIGFuY2hvckggKyB0YXJnZXRIICsgMzAgOiAwKX1weGAsXG5cdCk7XG59XG5cbi8qKlxuICogU3BlZWQgdXAgTXV0YXRpb25PYnNlcnZlciBieSBkZWJvdW5jaW5nIGFuZCBvbmx5IHJ1bm5pbmcgd2hlbiBwYWdlIGlzIHZpc2libGVcbiAqIEByZXR1cm4gbmV3IE11dGFpb25PYnNlcnZlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjazogTXV0YXRpb25DYWxsYmFjaykge1xuXHRsZXQgcXVldWUgPSAwO1xuXG5cdGNvbnN0IG9uRnJhbWUgPSAoKSA9PiBzZXRUaW1lb3V0KG9uVGltZXIsIDIwMCk7IC8vIFVzZSBib3RoIHJlcXVlc3RBbmltYXRpb25GcmFtZSBhbmQgc2V0VGltZW91dCB0byBkZWJvdW5jZSBhbmQgb25seSBydW4gd2hlbiB2aXNpYmxlXG5cdGNvbnN0IG9uVGltZXIgPSAoKSA9PiB7XG5cdFx0Y2FsbGJhY2soW10sIG9ic2VydmVyKTtcblx0XHRvYnNlcnZlci50YWtlUmVjb3JkcygpOyAvLyBDbGVhciByZWNvcmRzIHRvIGF2b2lkIHJ1bm5pbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcblx0XHRxdWV1ZSA9IDA7XG5cdH07XG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdGlmICghcXVldWUpIHF1ZXVlID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKG9uRnJhbWUpO1xuXHR9KTtcblxuXHRyZXR1cm4gb2JzZXJ2ZXI7XG59XG5cbi8qKlxuICogb25NdXRhdGlvblxuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBvYnNlcnZlIG11dGF0aW9ucyBvbiBhIHNwZWNpZmljIGNsYXNzIG5hbWVcbiAqIEBwYXJhbSBlbCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSBjbGFzc05hbWUgVGhlIGNsYXNzIG5hbWUgdG8gb2JzZXJ2ZVxuICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBydW4gd2hlbiBtdXRhdGlvbnMgYXJlIGRldGVjdGVkXG4gKi9cbmNvbnN0IE1VVEFUT1JTID0gbmV3IFdlYWtNYXA8RWxlbWVudCwgQXJyYXk8KCkgPT4gdm9pZD4+KCk7XG5leHBvcnQgY29uc3Qgb25NdXRhdGlvbiA9IDxUIGV4dGVuZHMgRWxlbWVudD4oXG5cdGVsOiBFbGVtZW50LFxuXHRjbGFzc05hbWU6IHN0cmluZyxcblx0Y2FsbGJhY2s6IChlbGVtczogSFRNTENvbGxlY3Rpb25PZjxUPikgPT4gdm9pZCxcbikgPT4ge1xuXHRjb25zdCBlbGVtcyA9IGVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcblx0Y29uc3QgbXV0YXRvciA9IE1VVEFUT1JTLmdldChlbCkgfHwgW107XG5cblx0aWYgKCFtdXRhdG9yLmxlbmd0aCkge1xuXHRcdE1VVEFUT1JTLnNldChlbCwgbXV0YXRvcik7XG5cdFx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcigoXywgb2JzZXJ2ZXIpID0+IHtcblx0XHRcdGlmIChlbC5pc0Nvbm5lY3RlZCAmJiBtdXRhdG9yPy5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBjYWxsYmFjayBvZiBtdXRhdG9yKSBjYWxsYmFjaygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0TVVUQVRPUlMuZGVsZXRlKGVsKTtcblx0XHRcdH1cblx0XHR9KS5vYnNlcnZlKGVsLCB7XG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFtcImNsYXNzXCJdLFxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0fSk7XG5cdH1cblx0bXV0YXRvci5wdXNoKCgpID0+IGNhbGxiYWNrKGVsZW1zIGFzIEhUTUxDb2xsZWN0aW9uT2Y8VD4pKTtcbn07XG5cbi8qKlxuICogb25Mb2FkZWRcbiAqIEBkZXNjcmlwdGlvbiBSdW5zIGEgY2FsbGJhY2sgd2hlbiB3aW5kb3cgaXMgbG9hZGVkIGluIGJyb3dzZXJcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gdGhlIHBhZ2UgaXMgcmVhZHlcbiAqL1xuZXhwb3J0IGNvbnN0IG9uTG9hZGVkID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XG5cdGlmICghSVNfQlJPV1NFUikgcmV0dXJuO1xuXHRjb25zdCBydW4gPSAoKSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spOyAvLyBFbnN1cmUgd2UgcnVuIGFmdGVyIGFsbCBvdGhlciBsb2FkIGV2ZW50c1xuXHRpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSBydW4oKTtcblx0ZWxzZSBvbih3aW5kb3csIFwibG9hZFwiLCBydW4pO1xufTtcblxuLyoqXG4gKiBpc0lucHV0TGlrZVxuICogQGRlc2NyaXB0aW9uIENoZWNrIGlmIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKiBAcGFyYW0gZWwgVGhlIGVsZW1lbnQgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKi9cbmV4cG9ydCBjb25zdCBpc0lucHV0TGlrZSA9IChlbDogdW5rbm93bik6IGVsIGlzIEhUTUxJbnB1dEVsZW1lbnQgPT5cblx0ZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcInZhbGlkaXR5XCIgaW4gZWwgJiZcblx0IShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KTtcblxuLyoqXG4gKiB0b0N1c3RvbUVsZW1lbnRQcm9wc1xuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBjb252ZXJ0IHByb3BzIHRvIGN1c3RvbSBlbGVtZW50IGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcHMgdG8gY29udmVydFxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBwcm9wc1xuICovXG5leHBvcnQgY29uc3QgdG9DdXN0b21FbGVtZW50UHJvcHMgPSAoXG5cdHsgY2xhc3NOYW1lLCBoaWRkZW4sIG9wZW4sIC4uLnJlc3QgfTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGtsYXNzPzogc3RyaW5nLFxuKSA9PiB7XG5cdHJlc3Quc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nID0gdHJ1ZTsgLy8gTWFrZSBOZXh0LmpzIGhhcHB5XG5cdHJlc3QuY2xhc3MgPSBjbHN4KGtsYXNzLCBjbGFzc05hbWUgfHwgXCJcIikgfHwgdW5kZWZpbmVkOyAvLyBVc2UgY2xhc3MgaW5zdGVhZCBvZiBjbGFzc05hbWVcblx0aWYgKGhpZGRlbikgcmVzdC5oaWRkZW4gPSB0cnVlOyAvLyBFbnN1cmUgYm9vbGVhbiBwcm9wIGJlaGF2aW91clxuXHRpZiAob3BlbikgcmVzdC5vcGVuID0gdHJ1ZTsgLy8gRW5zdXJlIGJvb2xlYW4gcHJvcCBiZWhhdmlvdXJcblx0cmV0dXJuIHJlc3Q7XG59O1xuIiwiaW1wb3J0IHsgSVNfQlJPV1NFUiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBNQVRPTU8gPSBcIm1hdHRpbHN5bmV0Lm1hdG9tby5jbG91ZFwiO1xubGV0IEVOQUJMRUQ6IEFuYWx5dGljc0FjdGlvbnNbXCJpbml0XCJdW1wiZW5hYmxlZFwiXSA9IHRydWU7XG5cbnR5cGUgTWF0b21vID0gKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4pW107XG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBXaW5kb3cge1xuXHRcdF9wYXE/OiBNYXRvbW9bXTtcblx0XHRfbXRtPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPltdO1xuXHR9XG59XG5cbi8vIHdpbmRvdy5fcGFxID0gd2luZG93Ll9wYXEgfHwgW107XG4vLyB3aW5kb3cuX210bSA9IHdpbmRvdy5fbXRtIHx8IFtdO1xuXG4vLyB3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCBgJHtkb2N1bWVudC5sb2NhdGlvbi5ocmVmfSZlaXJpa2BdKTtcbi8vIHdpbmRvdy5fcGFxLnB1c2goW1wic2V0RG9jdW1lbnRUaXRsZVwiLCBcIkVpcmlrIDNcIl0pO1xuLy8gd2luZG93Ll9tdG0ucHVzaCh7XG4vLyBcdGV2ZW50OiBcIm10bS5TdGFydFwiLFxuLy8gXHRcIm10bS5zdGFydFRpbWVcIjogbmV3IERhdGUoKS5nZXRUaW1lKCksXG4vLyBcdGN1c3RvbVRpdGxlOiBcIkVpcmlrIDFcIixcbi8vIFx0Y3VzdG9tVXJsOiBgJHtkb2N1bWVudC5sb2NhdGlvbi5ocmVmfSZlaXJpa2AsXG4vLyB9KTtcblxuLy8gd2luZG93Ll9tdG0ucHVzaCh7XG4vLyBcdGV2ZW50OiBcIm10bS5QYWdlVmlld1wiLFxuLy8gXHRjdXN0b21UaXRsZTogXCJFaXJpayAyXCIsXG4vLyBcdGN1c3RvbVVybDogYCR7ZG9jdW1lbnQubG9jYXRpb24uaHJlZn0mZWlyaWtgLFxuLy8gfSk7XG5cbi8vIGNvbnN0IGNvbnRhaW5lcklkID0gXCJBOXV0S2szT1wiO1xuXG4vLyBkb2N1bWVudC5oZWFkLmFwcGVuZChcbi8vIFx0T2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpLCB7XG4vLyBcdFx0c3JjOiBgaHR0cHM6Ly9jZG4ubWF0b21vLmNsb3VkL21hdHRpbHN5bmV0Lm1hdG9tby5jbG91ZC9jb250YWluZXJfJHtjb250YWluZXJJZH0uanNgLFxuLy8gXHRcdGFzeW5jOiB0cnVlLFxuLy8gXHRcdG9ubG9hZDogKCkgPT4gY29uc29sZS5sb2cod2luZG93Ll9wYXEpLFxuLy8gXHR9KSxcbi8vICk7XG5cbmV4cG9ydCB0eXBlIEFuYWx5dGljc0FjdGlvbnMgPSB7XG5cdGluaXQ6IHtcblx0XHRtYXRvbW9JZDogbnVtYmVyIHwgc3RyaW5nO1xuXHRcdGVuYWJsZWQ/OiBib29sZWFuIHwgXCJkZWJ1Z1wiO1xuXHR9O1xuXHRwYWdldmlldzoge1xuXHRcdHVybD86IHN0cmluZztcblx0XHR0aXRsZT86IHN0cmluZztcblx0fTtcblx0ZXZlbnQ6IHtcblx0XHRjYXRlZ29yeTogc3RyaW5nO1xuXHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdG5hbWU/OiBzdHJpbmc7XG5cdFx0dmFsdWU/OiBudW1iZXI7XG5cdH07XG5cdHNlYXJjaDoge1xuXHRcdHF1ZXJ5OiBzdHJpbmc7XG5cdFx0Y2F0ZWdvcnk/OiBzdHJpbmc7XG5cdFx0cmVzdWx0cz86IG51bWJlcjtcblx0fTtcblx0bWF0b21vOiBNYXRvbW87XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYW5hbHl0aWNzPEFjdGlvbiBleHRlbmRzIGtleW9mIEFuYWx5dGljc0FjdGlvbnM+KFxuXHRhY3Rpb246IEFjdGlvbixcblx0YXJncyA9IHt9IGFzIEFuYWx5dGljc0FjdGlvbnNbQWN0aW9uXSxcbikge1xuXHRpZiAoIUlTX0JST1dTRVIpIHJldHVybjtcblx0aWYgKCF3aW5kb3cuX3BhcSkge1xuXHRcdHdpbmRvdy5fcGFxID0gW107XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJIZWF0bWFwU2Vzc2lvblJlY29yZGluZzo6ZGlzYWJsZVwiXSk7IC8vIERpc2FibGUgaGVhdG1hcHMgYnkgZGVmYXVsdCBhcyB0aGlzIHJlcXVpcmUgY29va2llc1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wiZW5hYmxlTGlua1RyYWNraW5nXCJdKTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldFRyYWNrZXJVcmxcIiwgYGh0dHBzOi8vJHtNQVRPTU99L21hdG9tby5waHBgXSk7XG5cdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc2NyaXB0W3NyYyo9XCJtYXRvbW8uanNcIl0nKSB8fFxuXHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmQoXG5cdFx0XHRcdE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSwge1xuXHRcdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRcdHNyYzogYGh0dHBzOi8vY2RuLm1hdG9tby5jbG91ZC8ke01BVE9NT30vbWF0b21vLmpzYCxcblx0XHRcdFx0fSksXG5cdFx0XHQpO1xuXHR9XG5cdGlmIChhY3Rpb24gPT09IFwiaW5pdFwiKSB7XG5cdFx0Y29uc3QgeyBtYXRvbW9JZCwgZW5hYmxlZCA9IHRydWUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcImluaXRcIl07XG5cdFx0RU5BQkxFRCA9IGVuYWJsZWQ7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRTaXRlSWRcIiwgbWF0b21vSWRdKTtcblx0fVxuXG5cdGlmIChFTkFCTEVEID09PSBcImRlYnVnXCIpIHJldHVybiBjb25zb2xlLmluZm8oYEFuYWx5dGljczogXCIke2FjdGlvbn1cImAsIGFyZ3MpO1xuXHRpZiAoRU5BQkxFRCA9PT0gZmFsc2UgfHwgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lID09PSBcImxvY2FsaG9zdFwiKSByZXR1cm47XG5cblx0aWYgKGFjdGlvbiA9PT0gXCJwYWdldmlld1wiKSB7XG5cdFx0Y29uc3QgeyB1cmwsIHRpdGxlIH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJwYWdldmlld1wiXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCB1cmwgfHwgbG9jYXRpb24uaHJlZl0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0RG9jdW1lbnRUaXRsZVwiLCB0aXRsZSB8fCBkb2N1bWVudC50aXRsZV0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1widHJhY2tQYWdlVmlld1wiXSk7XG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcImV2ZW50XCIpIHtcblx0XHRjb25zdCB7IGNhdGVnb3J5LCBhY3Rpb24sIG5hbWUsIHZhbHVlIH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJldmVudFwiXTtcblx0XHRjb25zdCBldmVudCA9IFtcInRyYWNrRXZlbnRcIiwgY2F0ZWdvcnksIGFjdGlvbiwgbmFtZSwgdmFsdWVdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goZXZlbnQuZmlsdGVyKCh2KSA9PiB2ICE9PSB1bmRlZmluZWQpKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwic2VhcmNoXCIpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRxdWVyeSxcblx0XHRcdGNhdGVnb3J5ID0gZmFsc2UsXG5cdFx0XHRyZXN1bHRzID0gZmFsc2UsXG5cdFx0fSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInNlYXJjaFwiXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInRyYWNrU2l0ZVNlYXJjaFwiLCBxdWVyeSwgY2F0ZWdvcnksIHJlc3VsdHNdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwibWF0b21vXCIpIHtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcIm1hdG9tb1wiXSk7XG5cdH1cbn1cbiIsImNvbnN0IGdldFN0ZXBzID0gKFxuXHRub3c6IG51bWJlcixcblx0bWF4OiBudW1iZXIsXG5cdHNob3cgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXG4pID0+IHtcblx0Y29uc3Qgb2Zmc2V0ID0gKHNob3cgLSAxKSAvIDI7XG5cdGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoTWF0aC5taW4obm93IC0gTWF0aC5mbG9vcihvZmZzZXQpLCBtYXggLSBzaG93ICsgMSksIDEpO1xuXHRjb25zdCBlbmQgPSBNYXRoLm1pbihNYXRoLm1heChub3cgKyBNYXRoLmNlaWwob2Zmc2V0KSwgc2hvdyksIG1heCk7XG5cdGNvbnN0IHBhZ2VzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogZW5kICsgMSAtIHN0YXJ0IH0sIChfLCBpKSA9PiBpICsgc3RhcnQpO1xuXG5cdGlmIChzaG93ID4gNCAmJiBzdGFydCA+IDEpIHBhZ2VzLnNwbGljZSgwLCAyLCAxLCAwKTtcblx0aWYgKHNob3cgPiAzICYmIGVuZCA8IG1heCkgcGFnZXMuc3BsaWNlKC0yLCAyLCAwLCBtYXgpO1xuXHRyZXR1cm4gcGFnZXM7XG59O1xuXG5leHBvcnQgY29uc3QgcGFnaW5hdGlvbiA9ICh7IGN1cnJlbnQgPSAxLCB0b3RhbCA9IDEwLCBzaG93ID0gNyB9KSA9PiAoe1xuXHRwcmV2OiBjdXJyZW50ID4gMSA/IGN1cnJlbnQgLSAxIDogMCxcblx0bmV4dDogY3VycmVudCA8IHRvdGFsID8gY3VycmVudCArIDEgOiAwLFxuXHRwYWdlczogZ2V0U3RlcHMoY3VycmVudCwgdG90YWwsIHNob3cpLm1hcCgocGFnZSwgaW5kZXgpID0+ICh7XG5cdFx0Y3VycmVudDogcGFnZSA9PT0gY3VycmVudCAmJiAoXCJwYWdlXCIgYXMgY29uc3QpLFxuXHRcdGtleTogYGtleS0ke3BhZ2V9LSR7aW5kZXh9YCxcblx0XHRwYWdlLFxuXHR9KSksXG59KTtcbiIsImlmIChcblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHR3aW5kb3cuQ1NTU3R5bGVTaGVldCAmJlxuXHRkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHNcbilcblx0KCgpID0+IHtcblx0XHRjb25zdCBrZXkgPSBcIi0tbXRkcy1hcHAtZXhwYW5kZWRcIjtcblx0XHRjb25zdCBzaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cdFx0Y29uc3QgcHJldiA9ICgpID0+ICF3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KT8uaW5jbHVkZXMoXCJmYWxzZVwiKTtcblxuXHRcdGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKHNoZWV0KTtcblx0XHR3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkID0gKGZvcmNlKSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBuZXh0ID0gZm9yY2UgPz8gIXByZXYoKTtcblx0XHRcdFx0c2hlZXQucmVwbGFjZVN5bmM/LihgOnJvb3QgeyAke2tleX06IHZhcigke2tleX0tLSR7bmV4dH0pfWApO1xuXHRcdFx0XHR3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBuZXh0KTtcblx0XHRcdH0gY2F0Y2ggKGVycikge30gLy8gbG9jYWxTdG9yYWdlIGlzIGZ1bGwgb3IgcmVwbGFjZVN5bmMgaXMgbm90IHN1cHBvcnRlZFxuXHRcdH07XG5cblx0XHQvLyBTZXQgYW5kIHN0b3JlIGluaXRpYWwgc3RhdGVcblx0XHR3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkKHByZXYoKSk7XG5cdH0pKCk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgUVVJQ0tfRVZFTlQsIGRlYm91bmNlLCBvbiwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCBcIi4vYXBwLXRvZ2dsZVwiO1xuXG5jb25zdCBDU1NfQVBQID0gc3R5bGVzLmFwcC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfU1RJQ0tZID0gc3R5bGVzLnN0aWNreS5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVE9HR0xFID0gJ1tkYXRhLWNvbW1hbmQ9XCJ0b2dnbGUtYXBwLWV4cGFuZGVkXCJdJztcbmNvbnN0IENTU19TSURFQkFSID0gYC4ke0NTU19BUFB9ID4gZGlhbG9nLC4ke0NTU19BUFB9IGRpYWxvZyB+IG1haW5gO1xuXG5jb25zdCB1c2VUcmFuc2l0aW9uID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XG5cdGlmICghZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbikgY2FsbGJhY2soKTtcblx0ZWxzZSBkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0b2dnbGVBcHBFeHBhbmRlZCA9IChmb3JjZT86IGJvb2xlYW4pID0+XG5cdC8vIEB0cy1leHBlY3QtZXJyb3Igd2luZG93Lm10ZHNBcHBUb2dnbGUgY29tZXMgZnJvbSBhcHAtdG9nZ2xlLmpzXG5cdHVzZVRyYW5zaXRpb24oKCkgPT4gd2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZD8uKGZvcmNlKSk7XG5cbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZUNsaWNrKHsgdGFyZ2V0OiBlbCwgZGVmYXVsdFByZXZlbnRlZDogc3RvcCB9OiBFdmVudCkge1xuXHRpZiAoc3RvcCB8fCAhKGVsIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpIHx8ICFlbC5tYXRjaGVzKENTU19UT0dHTEUpKVxuXHRcdHJldHVybjtcblx0aWYgKGdldENvbXB1dGVkU3R5bGUoZWwpLnBvc2l0aW9uID09PSBcInN0aWNreVwiKSByZXR1cm4gdG9nZ2xlQXBwRXhwYW5kZWQoKTtcblx0dXNlVHJhbnNpdGlvbigoKSA9PiB7XG5cdFx0Y29uc3Qgc2lkZWJhciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpYWxvZ0VsZW1lbnQ+KENTU19TSURFQkFSKTtcblx0XHRzaWRlYmFyPy5zZXRBdHRyaWJ1dGUoXCJkYXRhLWNsb3NlZGJ5XCIsIFwiYW55XCIpOyAvLyBBbGxvdyBjbG9zaW5nIGJ5IGNsaWNraW5nIG91dHNpZGVcblx0XHRzaWRlYmFyPy5zaG93TW9kYWwoKTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVJlc2l6ZSgpIHtcblx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGlhbG9nRWxlbWVudD4oQ1NTX1NJREVCQVIpPy5jbG9zZSgpO1xufVxuXG4vLyBTY3JvbGwgc3RhdGVcbmxldCBNSU5fWSA9IDA7IC8vIE9mZnNldCB0byBhdm9pZCBzY3JvbGwganVtcCB3aGVuIHN0aWNreSBpcyBzZXQgdG8gcmVsYXRpdmVcbmxldCBTQ1JPTExfVVA6IGJvb2xlYW47XG5sZXQgU1RJQ0sgPSAwOyAvLyAtMSA9IHN0aWNrIHRvcCwgMCA9IHJlbGF0aXZlLCAxID0gc3RpY2sgYm90dG9tXG5sZXQgU1RJQ0tfRUw6IEhUTUxFbGVtZW50O1xubGV0IFNUSUNLX0ggPSAwO1xubGV0IFNUSUNLX1kgPSAwO1xubGV0IFNUVUNLID0gZmFsc2U7IC8vIFVzZWQgdG8gZmlndXJlIGlmIG5hdiBpcyBsYXJnZXIgdGhhbiB2aWV3cG9ydFxubGV0IFdJTl9IID0gMDtcbmxldCBXSU5fWSA9IDA7XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKFtzdGlja3ldOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRTVElDS19FTCA9IHN0aWNreTtcblx0aGFuZGxlU2Nyb2xsKCk7IC8vIFJ1biBvbiBjb25uZWN0XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVNjcm9sbCgpIHtcblx0aWYgKCFTVElDS19FTD8uaXNDb25uZWN0ZWQpIHJldHVybjtcblx0Y29uc3QgTkVYVF9ZID0gd2luZG93LnNjcm9sbFk7XG5cdGNvbnN0IE5FWFRfVVAgPSBORVhUX1kgPCBXSU5fWTtcblx0V0lOX1kgPSBORVhUX1k7XG5cblx0Ly8gT25seSBjYWxjdWxhdGUgaWYgc2Nyb2xsIGRpcmVjdGlvbiBoYXMgY2hhbmdlZFxuXHRpZiAoTkVYVF9VUCAhPT0gU0NST0xMX1VQKSB7XG5cdFx0TUlOX1kgPSAoU1RJQ0tfRUwucGFyZW50RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIHx8IDApICsgV0lOX1k7XG5cdFx0U0NST0xMX1VQID0gTkVYVF9VUDtcblx0XHRTVElDS19IID0gU1RJQ0tfRUwub2Zmc2V0SGVpZ2h0O1xuXHRcdFNUSUNLX1kgPSBTVElDS19FTC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyBXSU5fWTtcblx0XHRTVFVDSyA9IFNUSUNLX0VMLm9mZnNldEhlaWdodCA8PSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdFx0V0lOX0ggPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdH1cblxuXHRpZiAoU1RJQ0sgPT09IC0xICYmIFNUVUNLKSByZXR1cm47IC8vIEFsbHdheXMgc3RpY2t5IHdoZW4gc2lkZWJhciBpcyBzbWFsbGVyIHRoYW4gdmlld3BvcnRcblx0aWYgKFNUSUNLICE9PSAtMSAmJiAoU1RVQ0sgfHwgKFNDUk9MTF9VUCAmJiBXSU5fWSA8PSBTVElDS19ZKSkpIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwic3RpY2t5XCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgXCIwcHhcIik7XG5cdFx0U1RJQ0sgPSAtMTsgLy8gTm90IHN0aWNraW5nIHRvIHRvcCBhbmQgc2lkZWJhciBpcyBzbWFsbGVyIHRoYW4gdmlld3BvcnQgb3Igc2Nyb2xsaW5nIHVwXG5cdH0gZWxzZSBpZiAoU1RJQ0sgPT09IC0xICYmICFTQ1JPTExfVVApIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwicmVsYXRpdmVcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtNYXRoLm1heCgwLCBXSU5fWSAtIE1JTl9ZKX1weGApO1xuXHRcdFNUSUNLID0gMDsgLy8gU3RpY2tpbmcgdG8gdG9wIGFuZCBzY3JvbGxpbmcgZG93blxuXHR9IGVsc2UgaWYgKFNUSUNLICE9PSAxICYmICFTQ1JPTExfVVAgJiYgV0lOX1kgKyBXSU5fSCA+PSBTVElDS19ZICsgU1RJQ0tfSCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJzdGlja3lcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtXSU5fSCAtIFNUSUNLX0h9cHhgKTtcblx0XHRTVElDSyA9IDE7IC8vIE5vdCBzdGlja2luZyB0byBib3R0b20gYW5kIHNjcm9sbGluZyBkb3duXG5cdH0gZWxzZSBpZiAoU1RJQ0sgPT09IDEgJiYgU0NST0xMX1VQKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInJlbGF0aXZlXCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7U1RJQ0tfWSAtIE1JTl9ZfXB4YCk7XG5cdFx0U1RJQ0sgPSAwOyAvLyBTdGlja2luZyB0byBib3R0b20gYW5kIHNjcm9sbGluZyB1cFxuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19TVElDS1ksIGhhbmRsZU11dGF0aW9uKTtcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlVG9nZ2xlQ2xpY2ssIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcInJlc2l6ZVwiLCBkZWJvdW5jZShoYW5kbGVSZXNpemUsIDEwMCksIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcInNjcm9sbFwiLCBoYW5kbGVTY3JvbGwsIFFVSUNLX0VWRU5UKTtcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19CUkVBRENSVU1CUyA9IHN0eWxlcy5icmVhZGNydW1icy5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKGJyZWFkY3J1bWJzOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRmb3IgKGNvbnN0IGJyZWFkY3VtYnMgb2YgYnJlYWRjcnVtYnMpXG5cdFx0YnJlYWRjdW1icy5xdWVyeVNlbGVjdG9yQWxsKFwibGkgYVwiKS5mb3JFYWNoKChjcnVtYiwgaW5kZXgsIHsgbGVuZ3RoIH0pID0+IHtcblx0XHRcdGF0dHIoY3J1bWIsIFwiYXJpYS1jdXJyZW50XCIsIGluZGV4ID09PSBsZW5ndGggLSAxID8gXCJwYWdlXCIgOiBudWxsKTtcblx0XHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19CUkVBRENSVU1CUywgaGFuZGxlTXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRJU19CUk9XU0VSLFxuXHRRVUlDS19FVkVOVCxcblx0YXR0cixcblx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcixcblx0b24sXG5cdG9uTG9hZGVkLFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0RJQUxPRyA9IHN0eWxlcy5kaWFsb2cuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgRElBTE9HUyA9IElTX0JST1dTRVJcblx0PyAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcblx0XHRcdENTU19ESUFMT0csXG5cdFx0KSBhcyBIVE1MQ29sbGVjdGlvbk9mPEhUTUxEaWFsb2dFbGVtZW50Pilcblx0OiBbXTtcblxuY29uc3QgaGFuZGxlTW9kYWwgPSAoKSA9PiB7XG5cdGZvciAoY29uc3QgZGlhbG9nIG9mIERJQUxPR1MpXG5cdFx0aWYgKGRpYWxvZy5pc0Nvbm5lY3RlZCAmJiBkaWFsb2cuc2hvd01vZGFsICYmIGRpYWxvZy5jbG9zZSkge1xuXHRcdFx0aWYgKGRpYWxvZy5tYXRjaGVzKCdbb3Blbl06bm90KFtkYXRhLW1vZGFsPVwiZmFsc2VcIl0pOm5vdCg6bW9kYWwpJykpIHtcblx0XHRcdFx0YXR0cihkaWFsb2csIFwib3BlblwiLCBudWxsKTsgLy8gVXNpbmcgYXR0cmlidXRlIGluc3RlYWQgb2YgLmNsb3NlIHRvIGF2b2lkIGBjbG9zZWAgZXZlbnRcblx0XHRcdFx0ZGlhbG9nLnNob3dNb2RhbCgpO1xuXHRcdFx0fSBlbHNlIGlmIChkaWFsb2cubWF0Y2hlcyhcIjptb2RhbDpub3QoW29wZW5dKVwiKSkge1xuXHRcdFx0XHRhdHRyKGRpYWxvZywgXCJvcGVuXCIsIFwiXCIpOyAvLyBTZXQgYXMgb3BlblxuXHRcdFx0XHRkaWFsb2cuY2xvc2UoKTsgLy8gU28gd2UgY29ycmVjbHR5IGNhbiBjYWxsIC5jbG9zZSwgcmVtb3ZpbmcgPGRpYWxvZz4gZnJvbSAjdG9wLWxheWVyXG5cdFx0XHR9XG5cdFx0fVxufTtcblxuY29uc3QgaGFuZGxlQ2xpY2sgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5LCB0YXJnZXQ6IGVsIH06IE1vdXNlRXZlbnQpID0+IHtcblx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTERpYWxvZ0VsZW1lbnQgJiYgYXR0cihlbCwgXCJkYXRhLWNsb3NlZGJ5XCIpID09PSBcImFueVwiKSB7XG5cdFx0Y29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdGNvbnN0IGlzSW5zaWRlID0gdG9wIDw9IHkgJiYgeSA8PSBib3R0b20gJiYgbGVmdCA8PSB4ICYmIHggPD0gcmlnaHQ7XG5cblx0XHRpZiAoIWlzSW5zaWRlKSBlbC5jbG9zZSgpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdGVsIGluc3RhbmNlb2YgRWxlbWVudCAmJlxuXHRcdGVsLmNsb3Nlc3QoJ2J1dHRvbltkYXRhLWNvbW1hbmQ9XCJjbG9zZVwiXScpXG5cdCkge1xuXHRcdGVsPy5jbG9zZXN0KFwiZGlhbG9nXCIpPy5jbG9zZSgpO1xuXHR9XG59O1xuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZUNsaWNrIGFzIEV2ZW50TGlzdGVuZXIsIFFVSUNLX0VWRU5UKTtcblx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcihoYW5kbGVNb2RhbCkub2JzZXJ2ZShcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdFx0e1xuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbXCJvcGVuXCJdLFxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0fSxcblx0KTtcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFFVSUNLX0VWRU5ULCBhdHRyLCBvbiwgb25Mb2FkZWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZnVuY3Rpb24gaGFuZGxlSW5qZWN0KGV2ZW50OiBFdmVudCAmIHsgYW5pbWF0aW9uTmFtZT86IHN0cmluZyB9KSB7XG5cdGlmIChldmVudC5hbmltYXRpb25OYW1lICE9PSBzdHlsZXMuX2Vycm9yc3VtbWFyeSkgcmV0dXJuO1xuXHRjb25zdCBmaXJzdCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmZpcnN0RWxlbWVudENoaWxkO1xuXG5cdGlmIChmaXJzdCBpbnN0YW5jZW9mIEhUTUxIZWFkaW5nRWxlbWVudCkge1xuXHRcdGF0dHIoZmlyc3QsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcblx0XHRmaXJzdC5mb2N1cygpOyAvLyBBdXRvZm9jdXMgZmlyc3QgaGVhZGluZ1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBcImFuaW1hdGlvbmVuZFwiLCBoYW5kbGVJbmplY3QsIFFVSUNLX0VWRU5UKSk7XG4iLCJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5cbi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgU0FGRV9MQUJFTExFREJZID0gYCR7SVNfQU5EUk9JRCA/IFwiZGF0YVwiIDogXCJhcmlhXCJ9LWxhYmVsbGVkYnlgO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBGT0NVU19PVVRMSU5FID0gXCJvdXRsaW5lOiAxcHggZG90dGVkOyBvdXRsaW5lOiA1cHggYXV0byBIaWdobGlnaHQ7IG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvclwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIGF0dGFjaFN0eWxlID0gKGVsZW1lbnQsIGNzcykgPT4gZWxlbWVudC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAvLyBVbm5hbWVkIHNsb3QgZG9lcyBhdXRvbWF0aWNhbGx5IHJlbmRlciBhbGwgdG9wIGVsZW1lbnQgbm9kZXNcbiAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIGNzcylcbik7XG52YXIgb2JzZXJ2ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgbXV0YXRpb25PYnNlcnZlciA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHJldHVybiBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICB0cnkge1xuICAgIG9ic2VydmVycy5nZXQoZWxlbWVudCkuZGlzY29ubmVjdCgpO1xuICAgIG9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgTElWRTtcbnZhciBMSVZFX1NSX0ZJWCA9IDA7XG52YXIgc3BlYWsgPSAodGV4dCkgPT4ge1xuICBpZiAoIUxJVkUpIHtcbiAgICBMSVZFID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBMSVZFLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gICAgYXR0cihMSVZFLCBcImFyaWEtbGl2ZVwiLCBcImFzc2VydGl2ZVwiKTtcbiAgfVxuICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKExJVkUpO1xuICBpZiAodGV4dCkgTElWRS50ZXh0Q29udGVudCA9IGAke3RleHR9JHtMSVZFX1NSX0ZJWCsrICUgMiA/IFwiXFx4QTBcIiA6IFwiXCJ9YDtcbn07XG52YXIgc2V0VmFsdWUgPSAoaW5wdXQsIGRhdGEsIHR5cGUgPSBcIlwiKSA9PiB7XG4gIHZhciBfYTIsIF9iO1xuICBjb25zdCBldmVudCA9IHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUsIGRhdGEsIGlucHV0VHlwZTogdHlwZSB9O1xuICBjb25zdCBwcm90byA9IEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiYmVmb3JlaW5wdXRcIiwgZXZlbnQpKTtcbiAgKF9iID0gKF9hMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIFwidmFsdWVcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChpbnB1dCwgZGF0YSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJpbnB1dFwiLCBldmVudCkpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImNoYW5nZVwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xufTtcblxuLy8gdS1vcHRpb24udHNcbnZhciBESVNBQkxFRCA9IFwiZGlzYWJsZWRcIjtcbnZhciBTRUxFQ1RFRCA9IFwic2VsZWN0ZWRcIjtcbnZhciBVSFRNTE9wdGlvbkVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbRElTQUJMRUQsIFNFTEVDVEVEXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoIUlTX0lPUykgdGhpcy50YWJJbmRleCA9IC0xO1xuICAgIGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoXCJyb2xlXCIpKSBhdHRyKHRoaXMsIFwicm9sZVwiLCBcIm9wdGlvblwiKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1kaXNhYmxlZFwiLCBgJHt0aGlzLmRpc2FibGVkfWApO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXNlbGVjdGVkXCIsIGAke3RoaXMuc2VsZWN0ZWR9YCk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHdoZXRoZXIgdGhlIG9wdGlvbiBpbiB0aGUgbGlzdCBib3ggaXMgdGhlIGRlZmF1bHQgaXRlbS4gKi9cbiAgZ2V0IGRlZmF1bHRTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpc1tTRUxFQ1RFRF07XG4gIH1cbiAgc2V0IGRlZmF1bHRTZWxlY3RlZCh2YWx1ZSkge1xuICAgIHRoaXNbU0VMRUNURURdID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGRpc2FibGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIERJU0FCTEVEKSAhPT0gbnVsbDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIERJU0FCTEVELCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICAvKiogUmV0cmlldmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBmb3JtIHRoYXQgdGhlIG9iamVjdCBpcyBlbWJlZGRlZCBpbi4gKi9cbiAgZ2V0IGZvcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcImZvcm1cIik7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSBvcmRpbmFsIHBvc2l0aW9uIG9mIGFuIG9wdGlvbiBpbiBhIGxpc3QgYm94LiAqL1xuICBnZXQgaW5kZXgoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uKChfYTIgPSB0aGlzLnBhcmVudEVsZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIub3B0aW9ucykgfHwgW3RoaXNdXG4gICAgXS5pbmRleE9mKHRoaXMpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyBhIHZhbHVlIHRoYXQgeW91IGNhbiB1c2UgdG8gaW1wbGVtZW50IHlvdXIgb3duIGxhYmVsIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBvYmplY3QuICovXG4gIGdldCBsYWJlbCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoX2EyID0gYXR0cih0aGlzLCBcImxhYmVsXCIpKSAhPSBudWxsID8gX2EyIDogdGhpcy50ZXh0O1xuICB9XG4gIHNldCBsYWJlbCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJsYWJlbFwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFNFTEVDVEVEKSAhPT0gbnVsbDtcbiAgfVxuICBzZXQgc2VsZWN0ZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFNFTEVDVEVELCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIHRleHQgc3RyaW5nIHNwZWNpZmllZCBieSB0aGUgb3B0aW9uIHRhZy4gKi9cbiAgZ2V0IHRleHQoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSB0aGlzLnRleHRDb250ZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKSkgfHwgXCJcIjtcbiAgfVxuICBzZXQgdGV4dCh0ZXh0KSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHRleHQ7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSB2YWx1ZSB3aGljaCBpcyByZXR1cm5lZCB0byB0aGUgc2VydmVyIHdoZW4gdGhlIGZvcm0gY29udHJvbCBpcyBzdWJtaXR0ZWQuICovXG4gIGdldCB2YWx1ZSgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoX2EyID0gYXR0cih0aGlzLCBcInZhbHVlXCIpKSAhPSBudWxsID8gX2EyIDogdGhpcy50ZXh0O1xuICB9XG4gIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gIH1cbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LW9wdGlvblwiLCBVSFRNTE9wdGlvbkVsZW1lbnQpO1xuXG4vLyB1LWRhdGFsaXN0LnRzXG52YXIgTElWRV9USU1FUjtcbnZhciBJTlBVVF9ERUJPVU5DRSA9IDA7XG52YXIgSVNfUFJFU1MgPSBmYWxzZTtcbnZhciBJU19NT0JJTEUgPSBJU19JT1MgfHwgSVNfQU5EUk9JRDtcbnZhciBFVkVOVFMgPSBcImNsaWNrLGZvY3Vzb3V0LGlucHV0LGtleWRvd24sbW91c2Vkb3duLG1vdXNldXBcIjtcbnZhciBFVkVOVFNfSU5QVVQgPSBcImZvY3VzLGZvY3VzaW4sYmx1cixmb2N1c291dFwiO1xudmFyIFRFWFRTID0ge1xuICBzaW5ndWxhcjogXCIlZCBoaXRcIixcbiAgcGx1cmFsOiBcIiVkIGhpdHNcIlxufTtcbnZhciBVSFRNTERhdGFMaXN0RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl90ZXh0cyA9IF9fc3ByZWFkVmFsdWVzKHt9LCBURVhUUyk7XG4gICAgdGhpcy5fdmFsdWUgPSBcIlwiO1xuICAgIGF0dGFjaFN0eWxlKFxuICAgICAgdGhpcyxcbiAgICAgIGAke0RJU1BMQVlfQkxPQ0t9XG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb24pIHsgZGlzcGxheTogYmxvY2s7IGN1cnNvcjogcG9pbnRlciB9XG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb246Zm9jdXMpIHsgJHtGT0NVU19PVVRMSU5FfSB9XG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb25bYXJpYS1oaWRkZW49XCJ0cnVlXCJdKSxcblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbltkaXNhYmxlZF0pLFxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uW2hpZGRlbl0pIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50IH1gXG4gICAgKTtcbiAgfVxuICAvLyBVc2VkIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgYW5ub3VuY2VtZW50c1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiaWRcIiwgLi4uT2JqZWN0LmtleXMoVEVYVFMpLm1hcCgoa2V5KSA9PiBgZGF0YS1zci0ke2tleX1gKV07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuX3Jvb3QgPSBnZXRSb290KHRoaXMpO1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwibGlzdGJveFwiKTtcbiAgICBhdHRyKHRoaXMsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICBvbih0aGlzLl9yb290LCBcImZvY3VzaW5cIiwgdGhpcyk7XG4gICAgb24odGhpcy5fcm9vdCwgXCJmb2N1c1wiLCB0aGlzLCB0cnVlKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1wiZGlzYWJsZWRcIiwgXCJoaWRkZW5cIiwgXCJsYWJlbFwiLCBcInZhbHVlXCJdLFxuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLl9yb290IHx8IHRoaXMsIFwiZm9jdXNcIiwgdGhpcywgdHJ1ZSk7XG4gICAgb2ZmKHRoaXMuX3Jvb3QgfHwgdGhpcywgXCJmb2N1c2luXCIsIHRoaXMpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIGRpc2Nvbm5lY3RJbnB1dCh0aGlzKTtcbiAgICB0aGlzLl9yb290ID0gdm9pZCAwO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBfcHJldiwgbmV4dCkge1xuICAgIGNvbnN0IHRleHQgPSBwcm9wID09IG51bGwgPyB2b2lkIDAgOiBwcm9wLnNwbGl0KFwiZGF0YS1zci1cIilbMV07XG4gICAgY29uc3QgY3NzID0gYGlucHV0W2xpc3Q9XCIke3RoaXMuaWR9XCJdYDtcbiAgICBpZiAoVEVYVFNbdGV4dF0pIHRoaXMuX3RleHRzW3RleHRdID0gbmV4dCB8fCBURVhUU1t0ZXh0XTtcbiAgICBlbHNlIGlmICh0aGlzLl9yb290KVxuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiB0aGlzLl9yb290LnF1ZXJ5U2VsZWN0b3JBbGwoY3NzKSlcbiAgICAgICAgc2V0dXBJbnB1dCh0aGlzLCBpbnB1dCk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCB7IHRhcmdldCwgdHlwZSB9ID0gZXZlbnQ7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICBpZiAodHlwZSA9PT0gXCJjbGlja1wiKSBvbkNsaWNrKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJmb2N1c1wiIHx8IHR5cGUgPT09IFwiZm9jdXNpblwiKSBvbkZvY3VzKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJibHVyXCIgfHwgdHlwZSA9PT0gXCJmb2N1c291dFwiKSBvbkJsdXIodGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgb25LZXlEb3duKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgSVNfUFJFU1MgPSB0aGlzLmNvbnRhaW5zKHRhcmdldCk7XG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiKSBJU19QUkVTUyA9IGZhbHNlO1xuICAgIGlmICh0eXBlID09PSBcIm11dGF0aW9uXCIgfHwgdHlwZSA9PT0gXCJpbnB1dFwiKSB7XG4gICAgICBjbGVhclRpbWVvdXQoSU5QVVRfREVCT1VOQ0UpO1xuICAgICAgSU5QVVRfREVCT1VOQ0UgPSBzZXRUaW1lb3V0KG9uSW5wdXQsIDAsIHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ1LW9wdGlvblwiKTtcbiAgfVxufTtcbnZhciBzZXRFeHBhbmRlZCA9IChzZWxmLCBvcGVuKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChzZWxmLmhpZGRlbiAhPT0gb3BlbikgcmV0dXJuO1xuICBzZWxmLmhpZGRlbiA9ICFvcGVuO1xuICBpZiAoc2VsZi5faW5wdXQpIHNldHVwSW5wdXQoc2VsZiwgc2VsZi5faW5wdXQsIG9wZW4pO1xuICBpZiAoc2VsZi5wb3BvdmVyICYmICgoX2EyID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKSB7XG4gICAgYXR0cihzZWxmLl9pbnB1dCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKHNlbGYpKTtcbiAgICBhdHRyKHNlbGYsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcbiAgICBzZWxmLnRvZ2dsZVBvcG92ZXIob3Blbik7XG4gIH1cbiAgaWYgKG9wZW4pIG9uSW5wdXQoc2VsZik7XG59O1xudmFyIGRpc2Nvbm5lY3RJbnB1dCA9IChzZWxmKSA9PiB7XG4gIGlmICghc2VsZi5faW5wdXQpIHJldHVybjtcbiAgb2ZmKHNlbGYuX2lucHV0IHx8IHNlbGYsIEVWRU5UU19JTlBVVCwgc2VsZik7XG4gIG9mZihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gIHNldEV4cGFuZGVkKHNlbGYsIGZhbHNlKTtcbiAgc2VsZi5faW5wdXQgPSB2b2lkIDA7XG59O1xudmFyIHNldHVwSW5wdXQgPSAoc2VsZiwgaW5wdXQsIG9wZW4gPSBmYWxzZSkgPT4ge1xuICBvbihpbnB1dCwgRVZFTlRTX0lOUFVULCBzZWxmLCB0cnVlKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWF1dG9jb21wbGV0ZVwiLCBcImxpc3RcIik7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1jb250cm9sc1wiLCB1c2VJZChzZWxmKSk7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1leHBhbmRlZFwiLCBgJHtJU19NT0JJTEUgPyBvcGVuIDogXCJ0cnVlXCJ9YCk7XG4gIGF0dHIoaW5wdXQsIFwiYXV0b2NvbXBsZXRlXCIsIFwib2ZmXCIpO1xuICBhdHRyKGlucHV0LCBcInJvbGVcIiwgXCJjb21ib2JveFwiKTtcbn07XG52YXIgb25Gb2N1cyA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCBpc0lucHV0ID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudDtcbiAgaWYgKGlzSW5wdXQgJiYgZXZlbnQuaXNUcnVzdGVkKSBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgaWYgKHNlbGYuX2lucHV0ICE9PSBldmVudC50YXJnZXQgJiYgaXNJbnB1dCAmJiBldmVudC50YXJnZXQubGlzdCA9PT0gc2VsZikge1xuICAgIGlmIChzZWxmLl9pbnB1dCkgZGlzY29ubmVjdElucHV0KHNlbGYpO1xuICAgIHNlbGYuX2lucHV0ID0gZXZlbnQudGFyZ2V0O1xuICAgIHNlbGYuX2lucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJmb2N1c1wiKSk7XG4gICAgc2VsZi5faW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImZvY3VzaW5cIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICBhdHRyKHNlbGYsIFNBRkVfTEFCRUxMRURCWSwgdXNlSWQoKF9hMiA9IHNlbGYuX2lucHV0LmxhYmVscykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMlswXSkpO1xuICAgIG9uKHNlbGYuX3Jvb3QgfHwgc2VsZiwgRVZFTlRTLCBzZWxmKTtcbiAgICBzZXRFeHBhbmRlZChzZWxmLCB0cnVlKTtcbiAgICBzcGVhaygpO1xuICB9XG59O1xudmFyIG9uQmx1ciA9IChzZWxmLCBldmVudCkgPT4ge1xuICBpZiAoIUlTX0FORFJPSUQgJiYgIUlTX1BSRVNTICYmIHNlbGYuX2lucHV0KSBzZXRUaW1lb3V0KG9uQmx1cnJlZCwgMCwgc2VsZik7XG4gIGlmIChldmVudC50YXJnZXQgPT09IHNlbGYuX2lucHV0ICYmIGV2ZW50LmlzVHJ1c3RlZClcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn07XG52YXIgb25CbHVycmVkID0gKHNlbGYpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgcmVsYXRlZFRhcmdldCA9ICgoX2EyID0gc2VsZi5fcm9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5hY3RpdmVFbGVtZW50KSB8fCBudWxsO1xuICBjb25zdCBpbnB1dCA9IHNlbGYuX2lucHV0O1xuICBpZiAoaW5wdXQgJiYgaW5wdXQgIT09IHJlbGF0ZWRUYXJnZXQgJiYgIXNlbGYuY29udGFpbnMocmVsYXRlZFRhcmdldCkpIHtcbiAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiYmx1clwiLCB7IHJlbGF0ZWRUYXJnZXQgfSkpO1xuICAgIGlucHV0LmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgRm9jdXNFdmVudChcImZvY3Vzb3V0XCIsIHsgYnViYmxlczogdHJ1ZSwgcmVsYXRlZFRhcmdldCB9KVxuICAgICk7XG4gICAgZGlzY29ubmVjdElucHV0KHNlbGYpO1xuICB9XG59O1xudmFyIG9uQ2xpY2sgPSAoc2VsZiwgeyB0YXJnZXQgfSkgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoIXNlbGYuX2lucHV0IHx8IHNlbGYuX2lucHV0ID09PSB0YXJnZXQpIHJldHVybiBzZXRFeHBhbmRlZChzZWxmLCB0cnVlKTtcbiAgZm9yIChjb25zdCBvcHQgb2Ygc2VsZi5vcHRpb25zKVxuICAgIGlmIChvcHQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgaWYgKGF0dHIoc2VsZiwgXCJhcmlhLW11bHRpc2VsZWN0YWJsZVwiKSAhPT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgKF9hMiA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG4gICAgICAgIHNldEV4cGFuZGVkKHNlbGYsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXRWYWx1ZShzZWxmLl9pbnB1dCwgb3B0LnZhbHVlKTtcbiAgICB9XG4gIGlmIChJU19BTkRST0lEKSBvbkJsdXJyZWQoc2VsZik7XG59O1xudmFyIG9uS2V5RG93biA9IChzZWxmLCBlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChlLmFsdEtleSB8fCBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5IHx8IGUuc2hpZnRLZXkgfHwgZS5rZXkgPT09IFwiVGFiXCIpXG4gICAgcmV0dXJuO1xuICBzZXRFeHBhbmRlZChzZWxmLCBlLmtleSAhPT0gXCJFc2NhcGVcIik7XG4gIGNvbnN0IHsga2V5LCB0YXJnZXQgfSA9IGU7XG4gIGNvbnN0IG9wdGlvbnMgPSBbLi4uc2VsZi5vcHRpb25zXS5maWx0ZXIoXG4gICAgKGVsKSA9PiBhdHRyKGVsLCBcImFyaWEtaGlkZGVuXCIpICE9PSBcInRydWVcIiAmJiBlbC5vZmZzZXRIZWlnaHRcbiAgKTtcbiAgY29uc3QgcHJldiA9IG9wdGlvbnMuaW5kZXhPZih0YXJnZXQpO1xuICBsZXQgbmV4dCA9IC0xO1xuICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiKSBuZXh0ID0gKHByZXYgKyAxKSAlIG9wdGlvbnMubGVuZ3RoO1xuICBpZiAoa2V5ID09PSBcIkFycm93VXBcIikgbmV4dCA9ICh+cHJldiA/IHByZXYgOiBvcHRpb25zLmxlbmd0aCkgLSAxO1xuICBpZiAofnByZXYpIHtcbiAgICBpZiAoa2V5ID09PSBcIkhvbWVcIiB8fCBrZXkgPT09IFwiUGFnZVVwXCIpIG5leHQgPSAwO1xuICAgIGlmIChrZXkgPT09IFwiRW5kXCIgfHwga2V5ID09PSBcIlBhZ2VEb3duXCIpIG5leHQgPSBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgaWYgKGtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICBvcHRpb25zW3ByZXZdLmNsaWNrKCk7XG4gICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuICBpZiAob3B0aW9uc1tuZXh0XSkgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykgb3B0aW9uLnRhYkluZGV4ID0gLTE7XG4gIGlmIChvcHRpb25zW25leHRdKSBlLnByZXZlbnREZWZhdWx0KCk7XG4gIChfYTIgPSBvcHRpb25zW25leHRdIHx8IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG59O1xudmFyIG9uSW5wdXQgPSAoc2VsZiwgZSkgPT4ge1xuICBjb25zdCB7IF90ZXh0cywgX3Jvb3QsIF9pbnB1dCwgb3B0aW9ucyB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoX2lucHV0ID09IG51bGwgPyB2b2lkIDAgOiBfaW5wdXQudmFsdWUudG9Mb3dlckNhc2UoKS50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IGZpbHRlciA9ICFzZWxmLmhhc0F0dHJpYnV0ZShcImRhdGEtbm9maWx0ZXJcIik7XG4gIGNvbnN0IGhpZGRlbiA9IFtdO1xuICBjb25zdCB2aXNpYmxlID0gW107XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIHtcbiAgICBjb25zdCBoaWRlID0gb3B0LmRpc2FibGVkIHx8IG9wdC5oaWRkZW4gfHwgZmlsdGVyICYmICFvcHQubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh2YWx1ZSk7XG4gICAgKGhpZGUgPyBoaWRkZW4gOiB2aXNpYmxlKS5wdXNoKG9wdCk7XG4gIH1cbiAgZm9yIChjb25zdCBvcHQgb2YgaGlkZGVuKSBhdHRyKG9wdCwgXCJhcmlhLWhpZGRlblwiLCBcInRydWVcIik7XG4gIGZvciAoY29uc3Qgb3B0IG9mIHZpc2libGUpIGF0dHIob3B0LCBcImFyaWEtaGlkZGVuXCIsIFwiZmFsc2VcIik7XG4gIGNvbnN0IHRvdGFsID0gdmlzaWJsZS5sZW5ndGg7XG4gIGNsZWFyVGltZW91dChMSVZFX1RJTUVSKTtcbiAgaWYgKChlID09IG51bGwgPyB2b2lkIDAgOiBlLnR5cGUpID09PSBcImlucHV0XCIgJiYgdmFsdWUgIT09IHNlbGYuX3ZhbHVlKVxuICAgIExJVkVfVElNRVIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBgJHshdG90YWwgJiYgc2VsZi5pbm5lclRleHQudHJpbSgpIHx8IGAke190ZXh0c1t0b3RhbCA9PT0gMSA/IFwic2luZ3VsYXJcIiA6IFwicGx1cmFsXCJdfWAucmVwbGFjZShcIiVkXCIsIGAke3RvdGFsfWApfWA7XG4gICAgICBpZiAoIXNlbGYuaGlkZGVuICYmIChfcm9vdCA9PSBudWxsID8gdm9pZCAwIDogX3Jvb3QuYWN0aXZlRWxlbWVudCkgPT09IF9pbnB1dCkgc3BlYWsodGV4dCk7XG4gICAgICBzZWxmLl92YWx1ZSA9IHZhbHVlO1xuICAgIH0sIDFlMyk7XG4gIGlmIChJU19JT1MpXG4gICAgdmlzaWJsZS5mb3JFYWNoKChvcHQsIGlkeCkgPT4gYXR0cihvcHQsIFwidGl0bGVcIiwgYCR7aWR4ICsgMX0vJHt0b3RhbH1gKSk7XG59O1xuaWYgKElTX0JST1dTRVIpXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJsaXN0XCIsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gZ2V0Um9vdCh0aGlzKS5nZXRFbGVtZW50QnlJZChhdHRyKHRoaXMsIFwibGlzdFwiKSB8fCBcIlwiKTtcbiAgICB9XG4gIH0pO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1kYXRhbGlzdFwiLCBVSFRNTERhdGFMaXN0RWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MRGF0YUxpc3RFbGVtZW50IH07XG4iLCJpbXBvcnQgeyBVSFRNTENvbWJvYm94RWxlbWVudCB9IGZyb20gXCJAdS1lbGVtZW50cy91LWNvbWJvYm94XCI7XG5pbXBvcnQgeyBVSFRNTERhdGFMaXN0RWxlbWVudCB9IGZyb20gXCJAdS1lbGVtZW50cy91LWRhdGFsaXN0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0UVVJQ0tfRVZFTlQsXG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRpc0lucHV0TGlrZSxcblx0b24sXG5cdG9uTG9hZGVkLFxuXHRvbk11dGF0aW9uLFxuXHR1c2VJZCxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19GSUVMRCA9IHN0eWxlcy5maWVsZC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVkFMSURBVElPTlMgPSBzdHlsZXMudmFsaWRhdGlvbi5zcGxpdChcIiBcIik7XG5jb25zdCBDU1NfVkFMSURBVElPTiA9IENTU19WQUxJREFUSU9OU1swXTtcblxuY29uc3QgZ2V0VGV4dCA9IChzdHlsZTogQ1NTU3R5bGVEZWNsYXJhdGlvbiwga2V5OiBzdHJpbmcpID0+XG5cdHN0eWxlLmdldFByb3BlcnR5VmFsdWUoYC0tbXRkcy10ZXh0LSR7a2V5fWApPy5zbGljZSgxLCAtMSkgfHwgXCJcIjsgLy8gc2xpY2UgdG8gdHJpbSBxdW90ZXNcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oZmllbGRzOiBIVE1MQ29sbGVjdGlvbk9mPEVsZW1lbnQ+LCB2YWxpZGF0ZT86IGJvb2xlYW4pIHtcblx0Zm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpXG5cdFx0aWYgKGZpZWxkLmlzQ29ubmVjdGVkKSB7XG5cdFx0XHRjb25zdCBsYWJlbHM6IEhUTUxMYWJlbEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0Y29uc3QgZGVzY3M6IEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0Y29uc3QgdmFsaWRzOiBFbGVtZW50W10gPSBbXTtcblx0XHRcdGxldCBjb21ib2JveDogVUhUTUxDb21ib2JveEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblx0XHRcdGxldCBpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IHZhbGlkID0gdHJ1ZTtcblxuXHRcdFx0Zm9yIChjb25zdCBlbCBvZiBmaWVsZC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpIHtcblx0XHRcdFx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTExhYmVsRWxlbWVudCkgbGFiZWxzLnB1c2goZWwpO1xuXHRcdFx0XHRlbHNlIGlmIChlbCBpbnN0YW5jZW9mIFVIVE1MQ29tYm9ib3hFbGVtZW50KSBjb21ib2JveCA9IGVsO1xuXHRcdFx0XHRlbHNlIGlmIChpc0lucHV0TGlrZShlbCkpIGlucHV0ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGVsLmhhc0F0dHJpYnV0ZShcImRhdGEtZGVzY3JpcHRpb25cIikpIGRlc2NzLnB1c2goZWwpO1xuXHRcdFx0XHRlbHNlIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1ZBTElEQVRJT04pKSB7XG5cdFx0XHRcdFx0dmFsaWQgPSBhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8ICFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0dmFsaWRzLnB1c2goZWwpO1xuXHRcdFx0XHRcdGRlc2NzLnVuc2hpZnQoZWwpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgSFRNTFBhcmFncmFwaEVsZW1lbnQpXG5cdFx0XHRcdFx0ZGVzY3Muc29tZSgoZGVzYykgPT4gZGVzYy5jb250YWlucyhlbCkpIHx8IGRlc2NzLnB1c2goZWwpOyAvLyBPbmx5IGFkZCBpZiBub3QgYWxyZWFkeSBpbnNpZGUgZGVzY3JpcHRpb25cblx0XHRcdH1cblxuXHRcdFx0aWYgKGlucHV0KSB7XG5cdFx0XHRcdGZvciAoY29uc3QgbGFiZWwgb2YgbGFiZWxzKSBsYWJlbC5odG1sRm9yID0gdXNlSWQoaW5wdXQpO1xuXHRcdFx0XHRpZiAodmFsaWRhdGUgJiYgYXR0cihmaWVsZCwgXCJkYXRhLXZhbGlkYXRpb25cIikgPT09IFwiZm9ybVwiKSB7XG5cdFx0XHRcdFx0dmFsaWQgPSBpbnB1dC5tYXRjaGVzKFwiOnZhbGlkXCIpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgZWwgb2YgdmFsaWRzKSBhdHRyKGVsLCBcImhpZGRlblwiLCB2YWxpZCA/IFwiXCIgOiBudWxsKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZW5kZXJDb21ib2JveChjb21ib2JveCk7XG5cdFx0XHRcdHJlbmRlckNvdW50ZXIoaW5wdXQpO1xuXHRcdFx0XHRyZW5kZXJUZXh0YXJlYVNpemUoaW5wdXQpO1xuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgZGVzY3MubWFwKHVzZUlkKS5qb2luKFwiIFwiKSB8fCBudWxsKTsgLy8gUmVtb3ZlIGlmIGVtcHR5XG5cdFx0XHRcdGF0dHIoaW5wdXQsIFwiYXJpYS1pbnZhbGlkXCIsIGAkeyF2YWxpZH1gKTtcblx0XHRcdH1cblx0XHR9XG59XG5cbi8vIGlPUyBkb2VzIG5vdCBzdXBwb3J0IGZpZWxkLXNpemluZzogY29udGVudCwgc28gd2UgbmVlZCB0byBtYW51YWxseSByZXNpemVcbmZ1bmN0aW9uIHJlbmRlclRleHRhcmVhU2l6ZSh0ZXh0YXJlYTogRWxlbWVudCkge1xuXHRpZiAodGV4dGFyZWEgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG5cdFx0dGV4dGFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXCItLW10ZHMtdGV4dGFyZWEtaGVpZ2h0XCIsIFwiYXV0b1wiKTtcblx0XHR0ZXh0YXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcdFwiLS1tdGRzLXRleHRhcmVhLWhlaWdodFwiLFxuXHRcdFx0YCR7dGV4dGFyZWEuc2Nyb2xsSGVpZ2h0fXB4YCxcblx0XHQpO1xuXHR9XG59XG5cbi8vIFNldHVwIHRyYW5zbGF0aW9ucyBmcm9tIENTUyBjdXN0b20gcHJvcGVydGllc1xuZnVuY3Rpb24gcmVuZGVyQ29tYm9ib3goZWw6IFVIVE1MQ29tYm9ib3hFbGVtZW50IHwgbnVsbCkge1xuXHRpZiAoIWVsPy5saXN0IHx8IGVsLmxpc3Q/Lmhhc0F0dHJpYnV0ZShcInBvcG92ZXJcIikpIHJldHVybjtcblx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1hZGRlZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWFkZGVkXCIpKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLWVtcHR5XCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtZW1wdHlcIikpO1xuXHRhdHRyKGVsLCBcImRhdGEtc3ItZm91bmRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1mb3VuZFwiKSk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1pbnZhbGlkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtaW52YWxpZFwiKSk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1vZlwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LW9mXCIpKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLXJlbW92ZVwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LXJlbW92ZVwiKSk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1yZW1vdmVkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtcmVtb3ZlZFwiKSk7XG5cdGF0dHIoZWwubGlzdCwgXCJkYXRhLXNyLXBsdXJhbFwiLCBnZXRUZXh0KHN0eWxlLCBcImRhdGFsaXN0LXBsdXJhbFwiKSk7XG5cdGF0dHIoZWwubGlzdCwgXCJkYXRhLXNyLXNpbmd1bGFyXCIsIGdldFRleHQoc3R5bGUsIFwiZGF0YWxpc3Qtc2luZ3VsYXJcIikpO1xuXHRhdHRyKGVsLmxpc3QsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyQ291bnRlcihpbnB1dDogSFRNTElucHV0RWxlbWVudCkge1xuXHRjb25zdCBlbCA9IGlucHV0Py5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdGNvbnN0IGxpbWl0ID0gZWwgJiYgYXR0cihlbCwgXCJkYXRhLWNvdW50XCIpO1xuXG5cdGlmIChlbCAmJiBsaW1pdCkge1xuXHRcdGNvbnN0IHJlbWFpbmRlciA9IE51bWJlcihsaW1pdCkgLSBpbnB1dC52YWx1ZS5sZW5ndGg7XG5cdFx0Y29uc3QgbmV4dEludmFsaWQgPSByZW1haW5kZXIgPCAwO1xuXHRcdGNvbnN0IHByZXZJbnZhbGlkID0gYXR0cihlbCwgXCJhcmlhLWxpdmVcIikgPT09IFwicG9saXRlXCI7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCB8fCBpbnB1dCk7XG5cdFx0Y29uc3Qgb3ZlciA9IGdldFRleHQoc3R5bGUsIFwiY291bnQtb3ZlclwiKTtcblx0XHRjb25zdCB1bmRlciA9IGdldFRleHQoc3R5bGUsIFwiY291bnQtdW5kZXJcIik7XG5cblx0XHRpZiAocHJldkludmFsaWQgIT09IG5leHRJbnZhbGlkKSB7XG5cdFx0XHRhdHRyKGVsLCBcImFyaWEtbGl2ZVwiLCBuZXh0SW52YWxpZCA/IFwicG9saXRlXCIgOiBcIm9mZlwiKTtcblx0XHRcdGZvciAoY29uc3QgY3NzIG9mIENTU19WQUxJREFUSU9OUykgZWwuY2xhc3NMaXN0LnRvZ2dsZShjc3MsIG5leHRJbnZhbGlkKTtcblx0XHR9XG5cdFx0ZWwudGV4dENvbnRlbnQgPSAobmV4dEludmFsaWQgPyBvdmVyIDogdW5kZXIpLnJlcGxhY2UoXG5cdFx0XHRcIiVkXCIsXG5cdFx0XHRgJHtNYXRoLmFicyhyZW1haW5kZXIpfWAsXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGVUb2dnbGUoeyB0YXJnZXQ6IGVsLCBuZXdTdGF0ZSB9OiBFdmVudCAmIHsgbmV3U3RhdGU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBVSFRNTERhdGFMaXN0RWxlbWVudCkge1xuXHRcdGNvbnN0IHJvb3QgPSBlbC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QgfCBudWxsO1xuXHRcdGNvbnN0IGFuY2hvciA9IHJvb3Q/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuXHRcdFx0YFtwb3BvdmVydGFyZ2V0PVwiJHtlbC5pZH1cIl1gLFxuXHRcdCk7XG5cblx0XHRpZiAobmV3U3RhdGUgPT09IFwiY2xvc2VkXCIpIGFuY2hvclBvc2l0aW9uKGVsLCBmYWxzZSk7XG5cdFx0ZWxzZSBpZiAoYW5jaG9yKSB7XG5cdFx0XHRlbC5zdHlsZS53aWR0aCA9IGAke2FuY2hvci5jbGllbnRXaWR0aH1weGA7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgYW5jaG9yLCBcImJvdHRvbVwiLCB0cnVlKTtcblx0XHR9XG5cdH1cbn1cbi8vIFVwZGF0ZSB3aGVuIHR5cGluZ1xuZnVuY3Rpb24gaGFuZGxlSW5wdXQoeyB0YXJnZXQgfTogRXZlbnQpIHtcblx0aWYgKGlzSW5wdXRMaWtlKHRhcmdldCkpIHtcblx0XHRyZW5kZXJDb3VudGVyKHRhcmdldCk7XG5cdFx0cmVuZGVyVGV4dGFyZWFTaXplKHRhcmdldCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlVmFsZGlhdGlvbihldmVudDogRXZlbnQpIHtcblx0Y29uc3QgZmllbGQgPSAoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oYC4ke0NTU19GSUVMRH1gKTtcblxuXHRpZiAoZXZlbnQudHlwZSA9PT0gXCJpbnZhbGlkXCIgJiYgZmllbGQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBzaG93aW5nIGRlZmF1bHQgdmFsaWRhdGlvbiBidWJibGVzXG5cdGhhbmRsZU11dGF0aW9uKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ1NTX0ZJRUxEKSwgdHJ1ZSk7IC8vIFVwZGF0ZSBzdGF0ZVxufVxuXG4vLyBQb3NpdGlvbiBjb21ib2JveCB3aGVuIGNoYW5naW5nIGNvbnRlbnRcbmZ1bmN0aW9uIGhhbmRsZUJlZm9yZUNoYW5nZSh7IHRhcmdldDogZWwgfTogRXZlbnQpIHtcblx0Y29uc3QgbGlzdCA9IGVsIGluc3RhbmNlb2YgVUhUTUxDb21ib2JveEVsZW1lbnQgJiYgZWwubGlzdDtcblx0aWYgKGxpc3QgJiYgIWxpc3Q/LmhpZGRlbilcblx0XHRzZXRUaW1lb3V0KCgpID0+IGFuY2hvclBvc2l0aW9uKGxpc3QsIGVsLCAyLCB0cnVlKSwgMTApOyAvLyBSZXBvc2l0aW9uIGxpc3QgaWYgbm90IGhpZGRlblxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfRklFTEQsIGhhbmRsZU11dGF0aW9uKTtcblx0b24oZG9jdW1lbnQsIFwiYmVmb3JlY2hhbmdlXCIsIGhhbmRsZUJlZm9yZUNoYW5nZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbihkb2N1bWVudCwgXCJpbnB1dFwiLCBoYW5kbGVJbnB1dCwgUVVJQ0tfRVZFTlQpO1xuXHRvbihkb2N1bWVudCwgXCJpbnZhbGlkLHN1Ym1pdFwiLCBoYW5kbGVWYWxkaWF0aW9uLCB0cnVlKTsgLy8gVXNlIGNhcHR1cmUgYXMgaW52YWxpZCBhbmQgc3VibWl0IGRvZXMgbm90IGJ1YmJsZVxuXHRvbihkb2N1bWVudCwgXCJ0b2dnbGVcIiwgaGFuZGxlVG9nZ2xlLCBRVUlDS19FVkVOVCk7IC8vIFVzZSBjYXB0dXJlIHNpbmNlIHRvZ2dsZSBkb2VzIG5vdCBidWJibGVcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIGlzSW5wdXRMaWtlLCBvbkxvYWRlZCwgb25NdXRhdGlvbiwgdXNlSWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0ZJRUxEU0VUID0gc3R5bGVzLmZpZWxkc2V0LnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19WQUxJREFUSU9OID0gc3R5bGVzLnZhbGlkYXRpb24uc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQVJJQV9ERVNDID0gXCJhcmlhLWRlc2NyaWJlZGJ5XCI7XG5jb25zdCBBUklBX0lOVkFMSUQgPSBcImFyaWEtaW52YWxpZFwiO1xuXG4vLyBVc2luZyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgdG8gZW5zdXJlIGl0IHJ1bnMgYWZ0ZXIgZmllbGQtb2JzZXJ2ZXJcbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKGZpZWxkc2V0czogSFRNTENvbGxlY3Rpb25PZjxFbGVtZW50Pikge1xuXHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdGZvciAoY29uc3QgZmllbGRzZXQgb2YgZmllbGRzZXRzKVxuXHRcdFx0aWYgKGZpZWxkc2V0LmlzQ29ubmVjdGVkKSB7XG5cdFx0XHRcdGNvbnN0IGlucHV0czogSFRNTElucHV0RWxlbWVudFtdID0gW107XG5cdFx0XHRcdGxldCB2YWxpZGF0aW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgZWwgb2YgZmllbGRzZXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpKSB7XG5cdFx0XHRcdFx0aWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhDU1NfVkFMSURBVElPTikpIHZhbGlkYXRpb25JZCA9IHVzZUlkKGVsKTtcblx0XHRcdFx0XHRlbHNlIGlmIChpc0lucHV0TGlrZShlbCkpIGlucHV0cy5wdXNoKGVsKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAoY29uc3QgaW5wdXQgb2YgaW5wdXRzKSB7XG5cdFx0XHRcdFx0Y29uc3QgZGVzYyA9IGF0dHIoaW5wdXQsIEFSSUFfREVTQyk/LnJlcGxhY2UodmFsaWRhdGlvbklkIHx8IFwiI1wiLCBcIlwiKTtcblxuXHRcdFx0XHRcdGF0dHIoaW5wdXQsIEFSSUFfREVTQywgYCR7dmFsaWRhdGlvbklkIHx8IFwiXCJ9ICR7ZGVzYyB8fCBcIlwifWAudHJpbSgpKTtcblx0XHRcdFx0XHRhdHRyKGlucHV0LCBBUklBX0lOVkFMSUQsIGAkeyEhdmFsaWRhdGlvbklkfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdH0pO1xufVxuXG5vbkxvYWRlZCgoKSA9PlxuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0ZJRUxEU0VULCBoYW5kbGVNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19MT0dPID0gc3R5bGVzLmxvZ28uc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihbbG9nb106IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdGlmIChsb2dvPy5pc0Nvbm5lY3RlZCAmJiBsb2dvPy5maXJzdEVsZW1lbnRDaGlsZCBpbnN0YW5jZW9mIFNWR1NWR0VsZW1lbnQpIHtcblx0XHRmb3IgKGNvbnN0IGljb24gb2YgZG9jdW1lbnQuaGVhZC5xdWVyeVNlbGVjdG9yQWxsKFwibGlua1tyZWx+PSdpY29uJ11cIikpXG5cdFx0XHRpY29uLnNldEF0dHJpYnV0ZShcInJlbFwiLCBcImRpc2FibGVkXCIpOyAvLyBEaXNhYmxlIHByZXZpb3VzIGljb24gKGJ1dCBub3QgcmVtb3ZlIGlzIGFzIHRoaXMgbWFrZXMgTmV4dC5qcyBzYWQpXG5cblx0XHRjb25zdCBzdmcgPSBsb2dvLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdGNvbnN0IGlzRG90ID0gbG9nbz8uaGFzQXR0cmlidXRlKFwiZGF0YS1lbnZcIik7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzdmcpO1xuXHRcdGNvbnN0IHRleHQgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sb3JcIik7XG5cdFx0Y29uc3QgYmFjayA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCItLW10ZHMtbG9nby1jb2xvclwiKTtcblx0XHRjb25zdCBpY29uID0gc3ZnLm91dGVySFRNTFxuXHRcdFx0LnJlcGxhY2UoL1xcbisvZywgXCIgXCIpIC8vIFByZXZlbnQgbGluZSBicmVha3Ncblx0XHRcdC5yZXBsYWNlKC8oZmlsbHx3aWR0aHxoZWlnaHR8eG1sbnMpPVwiW15cIl0rXCIvZ2ksIFwiXCIpXG5cdFx0XHQucmVwbGFjZShcIjxzdmdcIiwgYDxzdmcgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgZmlsbD1cIiR7dGV4dH1cImApO1xuXG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChcblx0XHRcdE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIiksIHtcblx0XHRcdFx0aHJlZjogYGRhdGE6aW1hZ2Uvc3ZnK3htbCwke2VuY29kZVVSSUNvbXBvbmVudChgPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA1NSA1NSc+PHJlY3QgZmlsbD0nJHtpc0RvdCA/IFwibm9uZVwiIDogYmFja30nIHdpZHRoPSc1MScgaGVpZ2h0PSc1MScgeD0nMicgeT0nMicgc3Ryb2tlPScke3RleHR9JyBzdHJva2UtZGFzaGFycmF5PScwLjA5IDYuMzgnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW9wYWNpdHk9JyR7aXNEb3QgPyAwLjYgOiAwfScgc3Ryb2tlLXdpZHRoPScyLjMnIHJ4PScyNS41Jy8+PGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDcuNSA3LjUpXCI+JHtpY29ufTwvZz48L3N2Zz5gKX1gLFxuXHRcdFx0XHRyZWw6IFwiaWNvblwiLFxuXHRcdFx0fSksXG5cdFx0KTtcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiBvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0xPR08sIGhhbmRsZU11dGF0aW9uKSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgUVVJQ0tfRVZFTlQsIGFuY2hvclBvc2l0aW9uLCBhdHRyLCBvbiwgb25Mb2FkZWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1BPUE9WRVIgPSBzdHlsZXMucG9wb3Zlci5zcGxpdChcIiBcIilbMF07XG5sZXQgT1BFTl9QT1BPVkVSUyA9IDA7IC8vIFNwZWVkIHVwIGJ5IG9ubHkgY2hlY2tpbmcgY2xpY2tzIGlmIHdlIGhhdmUgb3BlbiBwb3BvdmVyc1xuXG5mdW5jdGlvbiBoYW5kbGVUb2dnbGUoeyB0YXJnZXQ6IGVsLCBuZXdTdGF0ZSB9OiBFdmVudCAmIHsgbmV3U3RhdGU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1BPUE9WRVIpKSB7XG5cdFx0Y29uc3QgYW5jaG9yID0gKGVsLmdldFJvb3ROb2RlKCkgYXMgU2hhZG93Um9vdCk/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuXHRcdFx0YFtwb3BvdmVydGFyZ2V0PVwiJHtlbC5pZH1cIl1gLFxuXHRcdCk7XG5cblx0XHRpZiAobmV3U3RhdGUgPT09IFwiY2xvc2VkXCIpIHtcblx0XHRcdE9QRU5fUE9QT1ZFUlMgLT0gMTtcblx0XHRcdGFuY2hvclBvc2l0aW9uKGVsLCBmYWxzZSk7XG5cdFx0fSBlbHNlIGlmIChhbmNob3IpIHtcblx0XHRcdE9QRU5fUE9QT1ZFUlMgKz0gMTtcblx0XHRcdGFuY2hvclBvc2l0aW9uKGVsLCBhbmNob3IsIGF0dHIoZWwsIFwiZGF0YS1wb3NpdGlvblwiKSB8fCBcImJvdHRvbVwiKTtcblx0XHR9XG5cdH1cbn1cblxuLy8gUG9seWZpbGwgcG9wb3ZlcnRhcmdldCBmb3IgPGE+IChub3Qgc3VwcG9ydGVkIGJ5IG5hdGl2ZSlcbi8vIGFuZCBhdXRvbWF0aWNhbGx5IGFzc3VtZSBwb3BvdmVydGFyZ2V0IGlzIHRoZSBjbG9zZXN0IHBhcmVudCBwb3BvdmVyXG4vLyBidXQgcmVzcGVjdCB0aGUgcG9wb3ZlcnRhcmdldCBhbmQgcG9wb3ZlcnRhcmdldGFjdGlvbiBhdHRyaWJ1dGVcbmZ1bmN0aW9uIGhhbmRsZUxpbmtDbGljayh7IHRhcmdldCB9OiBFdmVudCkge1xuXHRjb25zdCBjbG9zZSA9XG5cdFx0T1BFTl9QT1BPVkVSUyAmJiAodGFyZ2V0IGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oXCJhLFtwb3BvdmVydGFyZ2V0YWN0aW9uXVwiKTtcblxuXHRpZiAoY2xvc2UpIHtcblx0XHRjb25zdCBhY3Rpb24gPSBhdHRyKGNsb3NlLCBcInBvcG92ZXJ0YXJnZXRhY3Rpb25cIikgfHwgXCJ0b2dnbGVcIjtcblx0XHRjb25zdCBvcGVuID0gYWN0aW9uID09PSBcInNob3dcIiB8fCAoYWN0aW9uID09PSBcImhpZGVcIiA/IGZhbHNlIDogdW5kZWZpbmVkKTtcblx0XHRjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhdHRyKGNsb3NlLCBcInBvcG92ZXJ0YXJnZXRcIikgfHwgXCJcIik7XG5cdFx0Y29uc3QgcG9wb3ZlciA9ICh0YXJnZXQgfHwgY2xvc2UpLmNsb3Nlc3Q8SFRNTEVsZW1lbnQ+KGAuJHtDU1NfUE9QT1ZFUn1gKTtcblxuXHRcdC8vIFBvcG92ZXIgY2FuIGJlIGRpc2Nvbm5ldGVkIGJ5IGNsaWNrIGhhbmRsZXIgZGVlcGVyIGRvd24gaW4gdGhlIERPTSB0aHJlZSBiZWZvcmUgcmVhY2hpbmcgZG9jdW1lbnRcblx0XHRpZiAocG9wb3Zlcj8uaXNDb25uZWN0ZWQgJiYgcG9wb3Zlcj8udG9nZ2xlUG9wb3Zlcilcblx0XHRcdHBvcG92ZXIudG9nZ2xlUG9wb3ZlcihvcGVuKTtcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcInRvZ2dsZVwiLCBoYW5kbGVUb2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVMaW5rQ2xpY2spOyAvLyBBbGxvdyBgPGE+YCB0byB1c2UgYHBvcG92ZXJ0YXJnZXRgIGFzIHdlbGxcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UQUJMRSA9IHN0eWxlcy50YWJsZS5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKHRhYmxlczogSFRNTENvbGxlY3Rpb25PZjxIVE1MVGFibGVFbGVtZW50Pikge1xuXHRmb3IgKGNvbnN0IHRhYmxlIG9mIHRhYmxlcykge1xuXHRcdGNvbnN0IHRoczogc3RyaW5nW10gPSBbXTsgLy8gQWRkIGRhdGEtdGg9XCJcIiB0byBlYWNoIGNlbGwgdG8gc3VwcG9ydCBkYXRhLW1vYmlsZSBkZXNpZ25zXG5cblx0XHRhdHRyKHRhYmxlLCBcInJvbGVcIiwgXCJ0YWJsZVwiKTsgLy8gQWRkIGhlbHBpbmcgcm9sZT1cIlwiIHRvIGVuc3VyZSBzY3JlZW4gcmVhZGVycyB1bmRlcnN0YW5kIHRoZSB0YWJsZSByZWdhcmRsZXNzIG9mIENTUyBkaXNwbGF5XG5cdFx0aWYgKHRhYmxlLmNhcHRpb24pIGF0dHIodGFibGUuY2FwdGlvbiwgXCJyb2xlXCIsIFwiY2FwdGlvblwiKTtcblx0XHRmb3IgKGNvbnN0IGdyb3VwIG9mIFt0YWJsZS50SGVhZCwgdGFibGUudEZvb3QsIC4uLnRhYmxlLnRCb2RpZXNdKVxuXHRcdFx0aWYgKGdyb3VwKSB7XG5cdFx0XHRcdGF0dHIoZ3JvdXAsIFwicm9sZVwiLCBcInJvd2dyb3VwXCIpO1xuXHRcdFx0XHRjb25zdCBpc1Rib2R5ID0gZ3JvdXAubm9kZU5hbWUgPT09IFwiVEJPRFlcIjtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHJvdyBvZiBncm91cC5yb3dzKSB7XG5cdFx0XHRcdFx0YXR0cihyb3csIFwicm9sZVwiLCBcInJvd1wiKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGNlbGwgb2Ygcm93LmNlbGxzKSB7XG5cdFx0XHRcdFx0XHRpZiAoaXNUYm9keSkgYXR0cihjZWxsLCBcImRhdGEtdGhcIiwgdGhzW2NlbGwuY2VsbEluZGV4XSB8fCBcIjplbXB0eVwiKTtcblx0XHRcdFx0XHRcdGVsc2UgdGhzLnB1c2goY2VsbC5pbm5lclRleHQudHJpbSgpKTsgLy8gVXNpbmcgaW5uZXJUZXh0IHRvIG9ubHkgaW5jbHVkZSB2aXNpYmxlIHRleHRcblx0XHRcdFx0XHRcdGlmIChjZWxsLm5vZGVOYW1lID09PSBcIlREXCIpIGF0dHIoY2VsbCwgXCJyb2xlXCIsIFwiY2VsbFwiKTtcblx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhdHRyKGNlbGwsIFwicm9sZVwiLCBpc1Rib2R5ID8gXCJyb3doZWFkZXJcIiA6IFwiY29sdW1uaGVhZGVyXCIpO1xuXHRcdFx0XHRcdFx0XHRhdHRyKGNlbGwsIFwic2NvcGVcIiwgaXNUYm9keSA/IFwicm93XCIgOiBcImNvbFwiKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiBvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX1RBQkxFLCBoYW5kbGVNdXRhdGlvbikpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uLCBvbkxvYWRlZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfVE9HR0xFR1JPVVAgPSBgLiR7c3R5bGVzLnRvZ2dsZWdyb3VwLnNwbGl0KFwiIFwiKVswXX1gO1xuXG4vLyBQcmV2ZW50IGJyb3dzZXJzIGZyb20gc2hvd2luZyBkZWZhdWx0IHZhbGlkYXRpb24gYnViYmxlc1xuZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudDogRXZlbnQgJiBQYXJ0aWFsPEtleWJvYXJkRXZlbnQ+KSB7XG5cdGNvbnN0IHsga2V5LCB0YXJnZXQ6IGVsIH0gPSBldmVudDtcblx0Y29uc3QgZ3JvdXAgPSBlbCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgZWwuY2xvc2VzdChDU1NfVE9HR0xFR1JPVVApO1xuXG5cdGlmICghZ3JvdXApIHJldHVybjtcblx0aWYgKGtleSA9PT0gXCJFbnRlclwiKSBlbC5jbGljaygpO1xuXHRpZiAoa2V5Py5zdGFydHNXaXRoKFwiQXJyb3dcIikpIHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGNvbnN0IGlucHV0cyA9IGdyb3VwLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIik7XG5cdFx0Y29uc3QgaW5kZXggPSBbLi4uaW5wdXRzXS5pbmRleE9mKGVsKTtcblx0XHRjb25zdCBtb3ZlID0ga2V5Lm1hdGNoKC9BcnJvdyhSaWdodHxEb3duKS8pID8gMSA6IC0xO1xuXHRcdGlucHV0c1soaW5wdXRzLmxlbmd0aCArIGluZGV4ICsgbW92ZSkgJSBpbnB1dHMubGVuZ3RoXT8uZm9jdXMoKTtcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiBvbihkb2N1bWVudCwgXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRJU19CUk9XU0VSLFxuXHRRVUlDS19FVkVOVCxcblx0YW5jaG9yUG9zaXRpb24sXG5cdGF0dHIsXG5cdG9uLFxuXHRvbkxvYWRlZCxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IERFU0NSSUJFREJZID0gXCJhcmlhLWRlc2NyaWJlZGJ5XCI7XG5jb25zdCBFU0MgPSBcIkVzY2FwZVwiO1xuY29uc3QgTEFCRUxMRURCWSA9IFwiYXJpYS1sYWJlbGxlZGJ5XCI7XG5jb25zdCBQT1NJVElPTl9DU1NfUFJPUEVSVFkgPSBcIi0tbXRkcy10b29sdGlwLXBvc2l0aW9uXCI7XG5jb25zdCBUSFJPVFRMRV9ERUxBWSA9IDMwMDtcbmNvbnN0IFRPT0xUSVAgPSBJU19CUk9XU0VSXG5cdD8gT2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCB7XG5cdFx0XHRjbGFzc05hbWU6IHN0eWxlcy5fdG9vbHRpcCxcblx0XHRcdGlkOiBcIm10ZHMtdG9vbHRpcFwiLFxuXHRcdFx0cG9wb3ZlcjogXCJtYW51YWxcIixcblx0XHR9KVxuXHQ6IG51bGw7IC8vIENyZWF0ZSBhIGR1bW15IGVsZW1lbnQgdG8gYXZvaWQgbnVsbCBjaGVja3NcblxubGV0IEFOQ0hPUjogRWxlbWVudCB8IG51bGwgPSBudWxsO1xubGV0IExBU1RfQ0FMTCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbmxldCBUSFJPVFRMRTogbnVtYmVyIHwgUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gPSAwO1xuXG5mdW5jdGlvbiBoYW5kbGVNb3ZlKHsgdGFyZ2V0LCB0eXBlLCBrZXkgfTogRXZlbnQgJiB7IGtleT86IHN0cmluZyB9KSB7XG5cdGlmICh0eXBlID09PSBcImtleWRvd25cIiAmJiBrZXkgIT09IEVTQykgcmV0dXJuOyAvLyBBbGxvdyBFU0MgZGlzbWlzcyB0byBmb2xsb3cgaHR0cHM6Ly93d3cudzMub3JnL1dBSS9BUklBL2FwZy9wYXR0ZXJucy90b29sdGlwL1xuXHRjb25zdCB3YWl0ID0gTEFTVF9DQUxMICsgVEhST1RUTEVfREVMQVkgLSBEYXRlLm5vdygpO1xuXHRjbGVhclRpbWVvdXQoVEhST1RUTEUpO1xuXHRUSFJPVFRMRSA9IHNldFRpbWVvdXQoXG5cdFx0aGFuZGxlTW92ZVRocm90dGxlZCxcblx0XHRNYXRoLm1heCh3YWl0LCAwKSxcblx0XHRrZXkgPT09IEVTQyA/IG51bGwgOiB0YXJnZXQsXG5cdCk7XG59XG5cbi8vIFVzaW5nIGEgdGhyb3R0bGVkIGZ1bmN0aW9uIHRvIGF2b2lkIHBlcmZvcm1hbmNlIGlzc3Vlc1xuZnVuY3Rpb24gaGFuZGxlTW92ZVRocm90dGxlZCh0YXJnZXQ6IEVsZW1lbnQgfCBudWxsKSB7XG5cdExBU1RfQ0FMTCA9IERhdGUubm93KCk7XG5cblx0Ly8gQnVpbGQgYW5kIGFwcGVuZCB0b29sdGlwIGlmIG5vdCBleGlzdGluZ1xuXHRpZiAoIVRPT0xUSVAgfHwgdGFyZ2V0ID09PSBUT09MVElQKSByZXR1cm47IC8vIEFsbG93IHRvb2x0aXAgdG8gYmUgaG92ZXJlZCwgZm9sbG93aW5nIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjEvI2NvbnRlbnQtb24taG92ZXItb3ItZm9jdXNcblx0aWYgKCFUT09MVElQPy5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoVE9PTFRJUCk7IC8vIEVuc3VyZSBjb25uZWN0ZWRcblx0bGV0IGFuY2hvciA9IHRhcmdldD8uY2xvc2VzdD8uPEVsZW1lbnQ+KFwiW2RhdGEtdG9vbHRpcF1cIikgfHwgbnVsbDtcblxuXHQvLyBObyBuZWVkIHRvIHVwZGF0ZVxuXHRpZiAoYW5jaG9yID09PSBBTkNIT1IpIHJldHVybjtcblxuXHRjb25zdCBjb250ZW50ID0gKGFuY2hvciAmJiBhdHRyKGFuY2hvciwgXCJkYXRhLXRvb2x0aXBcIikpIHx8IFwiXCI7XG5cdGNvbnN0IHBvc2l0aW9uID1cblx0XHQoYW5jaG9yICYmIGF0dHIoYW5jaG9yLCBcImRhdGEtdG9vbHRpcC1wb3NpdGlvblwiKSkgfHxcblx0XHR3aW5kb3dcblx0XHRcdC5nZXRDb21wdXRlZFN0eWxlKGFuY2hvciB8fCBkb2N1bWVudC5ib2R5KVxuXHRcdFx0LmdldFByb3BlcnR5VmFsdWUoUE9TSVRJT05fQ1NTX1BST1BFUlRZKVxuXHRcdFx0Py50cmltKCkgfHxcblx0XHRcInRvcFwiO1xuXG5cdGNvbnN0IGlzSGlkZGVuID1cblx0XHQhY29udGVudCB8fFxuXHRcdGNvbnRlbnQgPT09IFwiZmFsc2VcIiB8fFxuXHRcdGNvbnRlbnQgPT09IFwidHJ1ZVwiIHx8XG5cdFx0cG9zaXRpb24gPT09IFwibm9uZVwiO1xuXG5cdGlmIChpc0hpZGRlbikgYW5jaG9yID0gbnVsbDsgLy8gRG8gbm90IHNob3cgdG9vbHRpcCBpZiBib29saXNoIHZhbHVlXG5cdGlmIChhbmNob3IpIFRPT0xUSVAudGV4dENvbnRlbnQgPSBjb250ZW50OyAvLyBPbmx5IHVwZGF0ZSBjb250ZW50IGlmIG5ldyBhbmNob3JcblxuXHRjb25zdCBoYWRMYWJlbCA9IEFOQ0hPUiAmJiBhdHRyKEFOQ0hPUiwgTEFCRUxMRURCWSkgPT09IFRPT0xUSVA/LmlkO1xuXHRjb25zdCBoYXNMYWJlbCA9XG5cdFx0KGFuY2hvciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50XG5cdFx0XHQ/IGFuY2hvci5pbm5lclRleHRcblx0XHRcdDogYW5jaG9yPy50ZXh0Q29udGVudFxuXHRcdCk/LnRyaW0oKSB8fFxuXHRcdGFuY2hvcj8uaGFzQXR0cmlidXRlKExBQkVMTEVEQlkpIHx8XG5cdFx0YW5jaG9yPy5oYXNBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIpO1xuXG5cdEFOQ0hPUj8ucmVtb3ZlQXR0cmlidXRlKGhhZExhYmVsID8gTEFCRUxMRURCWSA6IERFU0NSSUJFREJZKTsgLy8gVW5saW5rIHByZXZpb3VzIGFuY2hvclxuXHRhbmNob3JQb3NpdGlvbihUT09MVElQLCBmYWxzZSk7IC8vIFJlc2V0IGFuY2hvciBwb3NpdGlvblxuXG5cdEFOQ0hPUiA9IGFuY2hvcjsgLy8gU3RvcmUgbmV3IGFuY2hvciAtIG1pZ2h0IGJlIG51bGwgaWYgbm8gbmV3IGFuY2hvclxuXHRpZiAoQU5DSE9SKSBhdHRyKEFOQ0hPUiwgaGFzTGFiZWwgPyBERVNDUklCRURCWSA6IExBQkVMTEVEQlksIFRPT0xUSVA/LmlkKTsgLy8gVXNlIHRvb2x0aXAgYXMgZGVzY3JpcHRpb24gaWYgYWxscmVhZHkgaGFzIGxhYmVsXG5cdFRPT0xUSVAudG9nZ2xlUG9wb3ZlcighIWFuY2hvcik7XG5cdGFuY2hvclBvc2l0aW9uKFRPT0xUSVAsIGFuY2hvciB8fCBmYWxzZSwgcG9zaXRpb24pO1xufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcImJsdXIsZm9jdXMsbW91c2VvdXQsbW91c2VvdmVyXCIsIGhhbmRsZU1vdmUsIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcImtleWRvd25cIiwgaGFuZGxlTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwiYmx1clwiLCBoYW5kbGVNb3ZlLCBRVUlDS19FVkVOVCk7XG59KTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBfYTI7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gKF9hMiA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKSkgIT0gbnVsbCA/IF9hMiA6IG51bGw7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xuXG4vLyB1LWRldGFpbHMudHNcbnZhciBVSFRNTERldGFpbHNFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIFVzaW5nIHVuZGVyc2NvcmUgaW5zdGVhZCBvZiBwcml2YXRlIGZpZWxkcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLl9jb250ZW50ID0gbnVsbDtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgbmFtZTogXCJzdW1tYXJ5XCIgfSksXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IHBhcnQ6IFwiZGV0YWlscy1jb250ZW50XCIgfSksXG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGAke0RJU1BMQVlfQkxPQ0t9XG4gICAgICAgIDo6c2xvdHRlZCh1LXN1bW1hcnkpIHsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBibG9jayB9XG5cdFx0XHRcdDo6c2xvdHRlZCh1LXN1bW1hcnkpOjpiZWZvcmUgeyBjb250ZW50OiAnJzsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBtYXJnaW4taW5saW5lOiAuMDVlbSAuMzEyNWVtOyBib3JkZXItYmxvY2s6IC4zMTI1ZW0gc29saWQgdHJhbnNwYXJlbnQ7IGJvcmRlci1pbmxpbmUtc3RhcnQ6IC41ZW0gc29saWQgfVxuXHRcdFx0XHQ6OnNsb3R0ZWQodS1zdW1tYXJ5W2FyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJdKTo6YmVmb3JlIHsgcm90YXRlOiA5MGRlZyB9XG5cdFx0XHRcdDpob3N0ID4gW3BhcnQ9XCJkZXRhaWxzLWNvbnRlbnRcIl06bm90KFtoaWRkZW49XCJcIl0pIHsgZGlzcGxheTogYmxvY2sgfWBcbiAgICAgIClcbiAgICApO1xuICB9XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJvcGVuXCJdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHZhciBfYTI7XG4gICAgdGhpcy5fY29udGVudCA9IChfYTIgPSB0aGlzLnNoYWRvd1Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2hpbGRyZW5bMV07XG4gICAgb24odGhpcy5fY29udGVudCwgXCJiZWZvcmVtYXRjaFwiLCB0aGlzKTtcbiAgICBvbih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBpZiAodGhpcy5fY29udGVudCkgb2ZmKHRoaXMuX2NvbnRlbnQsIFwiYmVmb3JlbWF0Y2hcIiwgdGhpcyk7XG4gICAgb2ZmKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICB0aGlzLl9jb250ZW50ID0gbnVsbDtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socHJvcCwgcHJldiwgbmV4dCkge1xuICAgIGNvbnN0IGhpZGUgPSBcIm9uYmVmb3JlbWF0Y2hcIiBpbiB0aGlzID8gXCJ1bnRpbC1mb3VuZFwiIDogdHJ1ZTtcbiAgICBjb25zdCBvcGVuID0gdGhpcy5vcGVuO1xuICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5jaGlsZHJlbilcbiAgICAgIGlmIChlbC5ub2RlTmFtZSA9PT0gXCJVLVNVTU1BUllcIikgYXR0cihlbCwgXCJhcmlhLWV4cGFuZGVkXCIsIGAke29wZW59YCk7XG4gICAgaWYgKHRoaXMuX2NvbnRlbnQpIHtcbiAgICAgIGF0dHIodGhpcy5fY29udGVudCwgXCJhcmlhLWhpZGRlblwiLCBgJHshb3Blbn1gKTtcbiAgICAgIHRoaXMuX2NvbnRlbnQuaGlkZGVuID0gb3BlbiA/IGZhbHNlIDogaGlkZTtcbiAgICB9XG4gICAgaWYgKG9wZW4gJiYgdGhpcy5uYW1lKSB7XG4gICAgICBjb25zdCB1RGV0YWlsc0xpc3QgPSBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAke3RoaXMubm9kZU5hbWV9W25hbWU9XCIke3RoaXMubmFtZX1cIl1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCB1RGV0YWlscyBvZiB1RGV0YWlsc0xpc3QpXG4gICAgICAgIGlmICh1RGV0YWlscyAhPT0gdGhpcykgdURldGFpbHMub3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAocHJvcCA9PT0gXCJvcGVuXCIgJiYgcHJldiA9PT0gbnVsbCAhPT0gKG5leHQgPT09IG51bGwpKVxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInRvZ2dsZVwiKSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiOnNjb3BlID4gdS1zdW1tYXJ5XCIpO1xuICAgIGNvbnN0IGlzU3VtbWFyeSA9IHN1bW1hcnkgPT0gbnVsbCA/IHZvaWQgMCA6IHN1bW1hcnkuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJlZm9yZW1hdGNoXCIpIHRoaXMub3BlbiA9IHRydWU7XG4gICAgaWYgKGlzU3VtbWFyeSAmJiBldmVudC50eXBlID09PSBcImtleWRvd25cIikgYXNCdXR0b24oZXZlbnQpO1xuICAgIGlmIChpc1N1bW1hcnkgJiYgZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xuICB9XG4gIGdldCBvcGVuKCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcIm9wZW5cIik7XG4gIH1cbiAgc2V0IG9wZW4odmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwib3BlblwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBcIm5hbWVcIikgfHwgXCJcIjtcbiAgfVxuICBzZXQgbmFtZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJuYW1lXCIsIHZhbHVlKTtcbiAgfVxufTtcbnZhciBVSFRNTFN1bW1hcnlFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgICB0aGlzLnNsb3QgPSBcInN1bW1hcnlcIjtcbiAgICB0aGlzLnRhYkluZGV4ID0gMDtcbiAgfVxufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGV0YWlsc1wiLCBVSFRNTERldGFpbHNFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtc3VtbWFyeVwiLCBVSFRNTFN1bW1hcnlFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxEZXRhaWxzRWxlbWVudCwgVUhUTUxTdW1tYXJ5RWxlbWVudCB9O1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0ZJUkVGT1ggPSBJU19CUk9XU0VSICYmIC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgX2EyO1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIChfYTIgPSBlbC5nZXRBdHRyaWJ1dGUobmFtZSkpICE9IG51bGwgPyBfYTIgOiBudWxsO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIGlmIChhdHRycykgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkgYXR0cihlbCwga2V5LCB2YWwpO1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBnZXRMYWJlbCA9IChlbCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gZ2V0Um9vdChlbCk7XG4gIGNvbnN0IGxhYmVsID0gYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIpIHx8IFwiXCI7XG4gIGNvbnN0IGxhYmVscyA9ICgoX2EyID0gYXR0cihlbCwgXCJhcmlhLWxhYmVsbGVkYnlcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpLnNwbGl0KC9cXHMrLykpIHx8IFtdO1xuICByZXR1cm4gW1xuICAgIC4uLmxhYmVscy5tYXAoKGlkMikgPT4gcm9vdCA9PSBudWxsID8gdm9pZCAwIDogcm9vdC5xdWVyeVNlbGVjdG9yKGBbaWQ9XCIke2lkMn1cIl1gKSksXG4gICAgLy8gR2V0IGFsbCBsYWJlbGxlZGJ5IGVsZW1lbnRzXG4gICAgLi4uQXJyYXkuZnJvbShlbC5sYWJlbHMgfHwgW10pXG4gICAgLy8gR2V0IGFsbCA8bGFiZWw+IGVsZW1lbnRzXG4gIF0ucmVkdWNlKChhY2MsIGVsMikgPT4ge1xuICAgIHZhciBfYTM7XG4gICAgcmV0dXJuIGFjYyB8fCAoKF9hMyA9IGVsMiA9PSBudWxsID8gdm9pZCAwIDogZWwyLmlubmVyVGV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy50cmltKCkpIHx8IFwiXCI7XG4gIH0sIGxhYmVsKTtcbn07XG5cbi8vIHUtcHJvZ3Jlc3MudHNcbnZhciBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG52YXIgVUhUTUxQcm9ncmVzc0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIFwidmFsdWVcIiwgXCJtYXhcIl07XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgaGlkZGVuOiBcIlwiIH0pLFxuICAgICAgLy8gU2xvdCBoaWRpbmcgY29udGVudCBhbGxvd3MgbGVnYWN5IGJyb3dzZXIgdG8gZGlzcGxheSBmYWxsYmFjayB0ZXh0XG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGA6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBib3JkZXI6IDFweCBzb2xpZDsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBoZWlnaHQ6IC41ZW07IHdpZHRoOiAxMGVtOyBvdmVyZmxvdzogaGlkZGVuIH1cbiAgICAgICAgOmhvc3Q6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiAxMDAlOyBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7IHdpZHRoOiB2YXIoLS1wZXJjZW50YWdlLCAwJSk7IHRyYW5zaXRpb246IHdpZHRoIC4ycyB9XG4gICAgICAgIDpob3N0KDpub3QoW3ZhbHVlXSkpIHsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLGN1cnJlbnRDb2xvciAyNSUsIHRyYW5zcGFyZW50IDUwJSwgY3VycmVudENvbG9yIDc1JSkgNTAlLzQwMCUgfVxuICAgICAgICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IG5vLXByZWZlcmVuY2UpIHsgOmhvc3QgeyBhbmltYXRpb246IGluZGV0ZXJtaW5hdGUgMnMgbGluZWFyIGluZmluaXRlIH0gIH1cbiAgICAgICAgQGtleWZyYW1lcyBpbmRldGVybWluYXRlIHsgZnJvbSB7IGJhY2tncm91bmQtcG9zaXRpb24teDogMTAwJSB9IHRvIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAwIH0gfWBcbiAgICAgIClcbiAgICApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmIChTS0lQX0FUVFJfQ0hBTkdFKSByZXR1cm47XG4gICAgU0tJUF9BVFRSX0NIQU5HRSA9IHRydWU7XG4gICAgY29uc3Qgcm9sZUltYWdlID0gSVNfSU9TIHx8IElTX0ZJUkVGT1g7XG4gICAgY29uc3QgcGVyY2VudGFnZSA9IE1hdGgubWF4KDAsIE1hdGgucm91bmQodGhpcy5wb3NpdGlvbiAqIDEwMCkpO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBlcmNlbnRhZ2VcIiwgYCR7cGVyY2VudGFnZX0lYCk7XG4gICAgbGV0IGxhYmVsID0gZ2V0TGFiZWwodGhpcyk7XG4gICAgaWYgKHJvbGVJbWFnZSkgbGFiZWwgPSBgJHtsYWJlbC5yZXBsYWNlKC9cXGQrJSQvLCBcIlwiKX0gJHtwZXJjZW50YWdlfSVgO1xuICAgIGlmIChJU19GSVJFRk9YKSBmb3IgKGNvbnN0IGVsIG9mIHRoaXMubGFiZWxzKSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIiwgbGFiZWwpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWJ1c3lcIiwgYCR7dGhpcy5wb3NpdGlvbiA9PT0gLTF9YCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtbGFiZWxcIiwgbGFiZWwudHJpbSgpKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIG51bGwpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbWF4XCIsIFwiMTAwXCIpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbWluXCIsIFwiMFwiKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW5vd1wiLCBgJHtwZXJjZW50YWdlfWApO1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIHJvbGVJbWFnZSA/IFwiaW1nXCIgOiBcInByb2dyZXNzYmFyXCIpO1xuICAgIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbiAgfVxuICBnZXQgbGFiZWxzKCkge1xuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5jbG9zZXN0KFwibGFiZWw6bm90KFtmb3JdKVwiKTtcbiAgICBjb25zdCBpZDIgPSB1c2VJZCh0aGlzKTtcbiAgICBpZiAobGFiZWwpIGxhYmVsLmh0bWxGb3IgPSBpZDI7XG4gICAgY29uc3QgZWwgPSBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgbGFiZWxbZm9yPVwiJHtpZDJ9XCJdYFxuICAgICk7XG4gICAgcmV0dXJuIGVsO1xuICB9XG4gIGdldCBwb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSA9PT0gbnVsbCA/IC0xIDogTWF0aC5taW4odGhpcy52YWx1ZSAvIHRoaXMubWF4LCAxKTtcbiAgfVxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIGdldE51bWJlcih0aGlzLCBcInZhbHVlXCIpO1xuICB9XG4gIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgIHNldE51bWJlcih0aGlzLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbWF4KCkge1xuICAgIHJldHVybiBnZXROdW1iZXIodGhpcywgXCJtYXhcIikgfHwgMTtcbiAgfVxuICBzZXQgbWF4KG1heCkge1xuICAgIHNldE51bWJlcih0aGlzLCBcIm1heFwiLCBtYXgpO1xuICB9XG59O1xuLy8gUHJldmVudCBDaHJvbWUgRGV2VG9vbHMgd2FybmluZyBhYm91dCA8bGFiZWwgZm9yPVwiXCI+IHBvaW50aW5nIHRvIDx1LXByb2dyZXNzPlxuVUhUTUxQcm9ncmVzc0VsZW1lbnQuZm9ybUFzc29jaWF0ZWQgPSB0cnVlO1xudmFyIGlzTnVtZXJpYyA9ICh2YWx1ZSkgPT4gIU51bWJlci5pc05hTihOdW1iZXIucGFyc2VGbG9hdChgJHt2YWx1ZX1gKSkgJiYgTnVtYmVyLmlzRmluaXRlKE51bWJlcih2YWx1ZSkpO1xudmFyIGdldE51bWJlciA9IChlbCwga2V5KSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gYXR0cihlbCwga2V5KTtcbiAgcmV0dXJuIGlzTnVtZXJpYyh2YWx1ZSkgPyBNYXRoLm1heCgwLCBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZSkpIDogbnVsbDtcbn07XG52YXIgc2V0TnVtYmVyID0gKGVsLCBrZXksIHZhbCkgPT4ge1xuICBpZiAodmFsID09PSBudWxsIHx8IGlzTnVtZXJpYyh2YWwpKSBhdHRyKGVsLCBrZXksIGAke3ZhbH1gKTtcbiAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBzZXQgbm9uLW51bWVyaWMgJyR7YXR0cn0nOiAnJHt2YWx9J2ApO1xufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtcHJvZ3Jlc3NcIiwgVUhUTUxQcm9ncmVzc0VsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTFByb2dyZXNzRWxlbWVudCB9O1xuIl0sIm5hbWVzIjpbIklTX0JST1dTRVIiLCJJU19BTkRST0lEIiwiX2EiLCJJU19CUk9XU0VSJDUiLCJTQUZFX0xBQkVMTEVEQlkiLCJESVNQTEFZX0JMT0NLIiwiVUhUTUxFbGVtZW50IiwiYXR0ciIsImVsIiwibmFtZSIsInZhbHVlIiwiX2EyIiwiZXZlbnRzIiwiYWN0aW9uIiwiZWxlbWVudCIsInJlc3QiLCJ0eXBlIiwib24iLCJvZmYiLCJhdHRhY2hTdHlsZSIsImNzcyIsImNyZWF0ZUVsZW1lbnQiLCJvYnNlcnZlcnMiLCJtdXRhdGlvbk9ic2VydmVyIiwib3B0aW9ucyIsIm9ic2VydmVyIiwiZGV0YWlsIiwiYXNCdXR0b24iLCJldmVudCIsImlzQ2xpY2siLCJnZXRSb290Iiwibm9kZSIsInJvb3QiLCJpZCIsInVzZUlkIiwidGFnTmFtZSIsInRleHQiLCJhdHRycyIsImN1c3RvbUVsZW1lbnRzIiwiaW5zdGFuY2UiLCJBUklBX0NPTlRST0xTIiwiQVJJQV9TRUxFQ1RFRCIsIlVIVE1MVGFic0VsZW1lbnQiLCJxdWVyeVdpdGhvdXROZXN0ZWQiLCJnZXRTZWxlY3RlZEluZGV4IiwiaW5kZXgiLCJzZXRTZWxlY3RlZCIsIlVIVE1MVGFiTGlzdEVsZW1lbnQiLCJ0YWIiLCJrZXkiLCJ0YWJzIiwicHJldiIsIm5leHQiLCJTS0lQX0FUVFJfQ0hBTkdFIiwiVUhUTUxUYWJFbGVtZW50IiwicGFuZWxzIiwibmV4dFBhbmVsIiwiZ2V0UGFuZWwiLCJwYW5lbCIsInRhYmxpc3QiLCJ0YWJMaXN0IiwiVUhUTUxUYWJQYW5lbEVsZW1lbnQiLCJpc0ZvY3VzYWJsZSIsInRhZyIsInNlbGYiLCJpZDIiLCJfX2RlZlByb3AiLCJfX2dldE93blByb3BTeW1ib2xzIiwiX19oYXNPd25Qcm9wIiwiX19wcm9wSXNFbnVtIiwiX19kZWZOb3JtYWxQcm9wIiwib2JqIiwiX19zcHJlYWRWYWx1ZXMiLCJhIiwiYiIsInByb3AiLCJJU19GSVJFRk9YIiwiSVNfSU9TIiwiSVNfQlJPV1NFUiQ0IiwiRk9DVVNfT1VUTElORSIsInRleHQyIiwidmFsIiwiTElWRSIsIkxJVkVfU1JfRklYIiwic3BlYWsiLCJzZXRWYWx1ZSIsImlucHV0IiwiZGF0YSIsIl9iIiwicHJvdG8iLCJJU19QUkVTUyIsIkVWRU5UUyIsIkVWRU5UX09OQ0UiLCJJU19GSVJFRk9YX01BQyIsIklTX01PQklMRSIsIkZBTFNFIiwiQ0xJQ0siLCJURVhUUyIsIlVIVE1MQ29tYm9ib3hFbGVtZW50IiwicmVuZGVyIiwic3luY0lucHV0VmFsdWUiLCJfIiwidGFyZ2V0Iiwib25CbHVyIiwib25DbGljayIsIm9uRm9jdXMiLCJvbklucHV0Iiwib25LZXlEb3duIiwiaXNEYXRhIiwiX2ZvY3VzIiwiX3RleHRzIiwiaXRlbXMiLCJjb250cm9sIiwibGlzdCIsIm11bHRpcGxlIiwibGFiZWwiLCJlZGl0cyIsImFkZGVkTm9kZXMiLCJyZW1vdmVkTm9kZXMiLCJzaG91bGRBbm5vdW5jZSIsImlucHV0TW9kZSIsIm5leHRGb2N1cyIsIl9hMyIsImlkeCIsIml0ZW0iLCJsYWJlbDIiLCJhcmlhIiwic2VsZWN0Iiwic3luY0NsZWFyV2l0aElucHV0Iiwic3luY09wdGlvbnNXaXRoSXRlbXMiLCJfc3BlYWsiLCJ2YWx1ZXMiLCJvcHQiLCJkaXNwYXRjaE1hdGNoIiwic3luYyIsImNyZWF0YWJsZSIsInF1ZXJ5IiwibWF0Y2giLCJvIiwiZGlzcGF0Y2hDaGFuZ2UiLCJyZW1vdmFibGUiLCJhZGQiLCJyZW1vdmUiLCJpIiwiaXRlbTIiLCJvbkJsdXJyZWQiLCJ4IiwieSIsImNsZWFyIiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwicmVwZWF0IiwiaXNDb250cm9sIiwiaW5UZXh0IiwiZm9ybSIsIlFVSUNLX0VWRU5UIiwiZGVib3VuY2UiLCJjYWxsYmFjayIsImRlbGF5IiwidGltZXIiLCJhcmdzIiwiVVVJRCIsIlNDUk9MTEVSIiwiVEFSR0VUUyIsIlRBUkdFVFNfVVBEQVRFIiwidXBkYXRlIiwiUE9TSVRJT04iLCJhbmNob3JQb3NpdGlvbiIsImFuY2hvciIsInBsYWNlIiwiZm9yY2UiLCJwb3NpdGlvbiIsImlzSFRNTEFuY2hvciIsInRhcmdldFciLCJ0YXJnZXRIIiwiYW5jaG9yVyIsImFuY2hvckgiLCJ3aWR0aCIsImhlaWdodCIsImFuY2hvclgiLCJhbmNob3JZIiwiaGFzU3BhY2VMZWZ0IiwiaGFzU3BhY2VSaWdodCIsImhhc1NwYWNlT3ZlciIsImhhc1NwYWNlVW5kZXIiLCJwb3NpdGlvblJpZ2h0IiwicG9zaXRpb25VbmRlciIsImNlbnRlclgiLCJjZW50ZXJZIiwiaXNWZXJ0aWNhbCIsImNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIiLCJxdWV1ZSIsIm9uRnJhbWUiLCJvblRpbWVyIiwiTVVUQVRPUlMiLCJvbk11dGF0aW9uIiwiY2xhc3NOYW1lIiwiZWxlbXMiLCJtdXRhdG9yIiwib25Mb2FkZWQiLCJydW4iLCJpc0lucHV0TGlrZSIsIk1BVE9NTyIsIkVOQUJMRUQiLCJhbmFseXRpY3MiLCJtYXRvbW9JZCIsImVuYWJsZWQiLCJ1cmwiLCJ0aXRsZSIsImNhdGVnb3J5IiwidiIsInJlc3VsdHMiLCJnZXRTdGVwcyIsIm5vdyIsIm1heCIsInNob3ciLCJvZmZzZXQiLCJzdGFydCIsImVuZCIsInBhZ2VzIiwicGFnaW5hdGlvbiIsImN1cnJlbnQiLCJ0b3RhbCIsInBhZ2UiLCJzaGVldCIsIkNTU19BUFAiLCJzdHlsZXMiLCJDU1NfU1RJQ0tZIiwiQ1NTX1RPR0dMRSIsIkNTU19TSURFQkFSIiwidXNlVHJhbnNpdGlvbiIsInRvZ2dsZUFwcEV4cGFuZGVkIiwiaGFuZGxlVG9nZ2xlQ2xpY2siLCJzdG9wIiwic2lkZWJhciIsImhhbmRsZVJlc2l6ZSIsIk1JTl9ZIiwiU0NST0xMX1VQIiwiU1RJQ0siLCJTVElDS19FTCIsIlNUSUNLX0giLCJTVElDS19ZIiwiU1RVQ0siLCJXSU5fSCIsIldJTl9ZIiwiaGFuZGxlTXV0YXRpb24iLCJzdGlja3kiLCJoYW5kbGVTY3JvbGwiLCJORVhUX1kiLCJORVhUX1VQIiwiQ1NTX0JSRUFEQ1JVTUJTIiwiYnJlYWRjcnVtYnMiLCJicmVhZGN1bWJzIiwiY3J1bWIiLCJsZW5ndGgiLCJDU1NfRElBTE9HIiwiRElBTE9HUyIsImhhbmRsZU1vZGFsIiwiZGlhbG9nIiwiaGFuZGxlQ2xpY2siLCJoYW5kbGVJbmplY3QiLCJmaXJzdCIsIklTX0JST1dTRVIkMiIsIkRJU0FCTEVEIiwiU0VMRUNURUQiLCJVSFRNTE9wdGlvbkVsZW1lbnQiLCJMSVZFX1RJTUVSIiwiSU5QVVRfREVCT1VOQ0UiLCJFVkVOVFNfSU5QVVQiLCJVSFRNTERhdGFMaXN0RWxlbWVudCIsImRpc2Nvbm5lY3RJbnB1dCIsIl9wcmV2Iiwic2V0dXBJbnB1dCIsInNldEV4cGFuZGVkIiwib3BlbiIsImlzSW5wdXQiLCJyZWxhdGVkVGFyZ2V0Iiwib3B0aW9uIiwiX3Jvb3QiLCJfaW5wdXQiLCJmaWx0ZXIiLCJoaWRkZW4iLCJ2aXNpYmxlIiwiQ1NTX0ZJRUxEIiwiQ1NTX1ZBTElEQVRJT05TIiwiQ1NTX1ZBTElEQVRJT04iLCJnZXRUZXh0Iiwic3R5bGUiLCJmaWVsZHMiLCJ2YWxpZGF0ZSIsImZpZWxkIiwibGFiZWxzIiwiZGVzY3MiLCJ2YWxpZHMiLCJjb21ib2JveCIsInZhbGlkIiwiZGVzYyIsInJlbmRlckNvbWJvYm94IiwicmVuZGVyQ291bnRlciIsInJlbmRlclRleHRhcmVhU2l6ZSIsInRleHRhcmVhIiwibGltaXQiLCJyZW1haW5kZXIiLCJuZXh0SW52YWxpZCIsInByZXZJbnZhbGlkIiwib3ZlciIsInVuZGVyIiwiaGFuZGxlVG9nZ2xlIiwibmV3U3RhdGUiLCJoYW5kbGVJbnB1dCIsImhhbmRsZVZhbGRpYXRpb24iLCJoYW5kbGVCZWZvcmVDaGFuZ2UiLCJDU1NfRklFTERTRVQiLCJBUklBX0RFU0MiLCJBUklBX0lOVkFMSUQiLCJmaWVsZHNldHMiLCJmaWVsZHNldCIsImlucHV0cyIsInZhbGlkYXRpb25JZCIsIkNTU19MT0dPIiwibG9nbyIsImljb24iLCJzdmciLCJpc0RvdCIsImJhY2siLCJDU1NfUE9QT1ZFUiIsIk9QRU5fUE9QT1ZFUlMiLCJoYW5kbGVMaW5rQ2xpY2siLCJjbG9zZSIsInBvcG92ZXIiLCJDU1NfVEFCTEUiLCJ0YWJsZXMiLCJ0YWJsZSIsInRocyIsImdyb3VwIiwiaXNUYm9keSIsInJvdyIsImNlbGwiLCJDU1NfVE9HR0xFR1JPVVAiLCJoYW5kbGVLZXlEb3duIiwibW92ZSIsIkRFU0NSSUJFREJZIiwiRVNDIiwiTEFCRUxMRURCWSIsIlBPU0lUSU9OX0NTU19QUk9QRVJUWSIsIlRIUk9UVExFX0RFTEFZIiwiVE9PTFRJUCIsIkFOQ0hPUiIsIkxBU1RfQ0FMTCIsIlRIUk9UVExFIiwiaGFuZGxlTW92ZSIsIndhaXQiLCJoYW5kbGVNb3ZlVGhyb3R0bGVkIiwiY29udGVudCIsImhhZExhYmVsIiwiaGFzTGFiZWwiLCJfYyIsIklTX0JST1dTRVIkMSIsIlVIVE1MRGV0YWlsc0VsZW1lbnQiLCJoaWRlIiwidURldGFpbHNMaXN0IiwidURldGFpbHMiLCJzdW1tYXJ5IiwiaXNTdW1tYXJ5IiwiVUhUTUxTdW1tYXJ5RWxlbWVudCIsImdldExhYmVsIiwiYWNjIiwiZWwyIiwiVUhUTUxQcm9ncmVzc0VsZW1lbnQiLCJyb2xlSW1hZ2UiLCJwZXJjZW50YWdlIiwiZ2V0TnVtYmVyIiwic2V0TnVtYmVyIiwiaXNOdW1lcmljIl0sIm1hcHBpbmdzIjoia0NBQ0EsSUFBSUEsR0FBYSxPQUFPLE9BQVcsS0FBZSxPQUFPLE9BQU8sU0FBYSxLQUFlLE9BQU8sT0FBTyxVQUFjLElBQ3BIQyxHQUFhRCxJQUFjLFdBQVcsS0FBSyxVQUFVLFNBQVMsRUFDOURFLEdBQ01DLElBQ1YsUUFBUSxPQUFPRCxHQUFLLFVBQVUsZ0JBQWtCLEtBQU8sT0FBU0EsR0FBRyxXQUFhLFVBQVUsUUFBUSxFQUNsRyxJQUFJRSxHQUFrQixHQUFHSCxHQUFhLE9BQVMsTUFBTSxjQUNqREksR0FBZ0IsMkNBQ2hCQyxFQUFlLE9BQU8sWUFBZ0IsSUFBYyxLQUFNLENBQzlELEVBQUksWUFDSixTQUFTQyxFQUFLQyxFQUFJQyxFQUFNQyxFQUFPLENBQzdCLElBQUlDLEVBQ0osT0FBSUQsSUFBVSxRQUFnQkMsRUFBTUgsRUFBRyxhQUFhQyxDQUFJLElBQU0sS0FBT0UsRUFBTSxNQUN2RUQsSUFBVSxLQUFNRixFQUFHLGdCQUFnQkMsQ0FBSSxFQUNsQ0QsRUFBRyxhQUFhQyxDQUFJLElBQU1DLEdBQU9GLEVBQUcsYUFBYUMsRUFBTUMsQ0FBSyxFQUM5RCxLQUNULENBQ0EsSUFBSUUsR0FBUyxDQUFDQyxFQUFRQyxFQUFTQyxJQUFTLENBQ3RDLFVBQVdDLEtBQVFELEVBQUssQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUNsQ0EsRUFBSyxDQUFDLEVBQUlDLEVBQ1YsUUFBUSxVQUFVLEdBQUdILENBQU0sZUFBZSxFQUFFLE1BQU1DLEVBQVNDLENBQUksQ0FFbkUsRUFDSUUsR0FBSyxDQUFDSCxLQUFZQyxJQUFTSCxHQUFPLE1BQU9FLEVBQVNDLENBQUksRUFDdERHLEdBQU0sQ0FBQ0osS0FBWUMsSUFBU0gsR0FBTyxTQUFVRSxFQUFTQyxDQUFJLEVBQzFESSxFQUFjLENBQUNMLEVBQVNNLElBQVFOLEVBQVEsYUFBYSxDQUFFLEtBQU0sTUFBUSxDQUFBLEVBQUUsT0FDekVPLEdBQWMsTUFBTSxFQUVwQkEsR0FBYyxRQUFTRCxDQUFHLENBQzVCLEVBQ0lFLEVBQTRCLElBQUksUUFDaENDLEdBQW1CLENBQUNULEVBQVNVLElBQVksQ0FDM0MsR0FBSUEsSUFBWSxPQUFRLE9BQU9GLEVBQVUsSUFBSVIsQ0FBTyxFQUNwRCxHQUFJLENBQ0ZRLEVBQVUsSUFBSVIsQ0FBTyxFQUFFLFdBQVksRUFDbkNRLEVBQVUsT0FBT1IsQ0FBTyxDQUN6QixNQUFhLENBQ2hCLENBQ0UsR0FBSVUsRUFBUyxDQUNYLE1BQU1DLEVBQVcsSUFBSSxpQkFDbEJDLEdBQVdaLEVBQVEsWUFBWSxDQUFFLEtBQU0sV0FBWSxPQUFBWSxDQUFRLENBQUEsQ0FDN0QsRUFDREQsRUFBUyxRQUFRWCxFQUFTVSxDQUFPLEVBQ2pDRixFQUFVLElBQUlSLEVBQVNXLENBQVEsQ0FDbkMsQ0FDQSxFQUNJRSxHQUFZQyxHQUFVLENBQ3hCLE1BQU1DLEVBQVUsUUFBU0QsSUFBVUEsRUFBTSxNQUFRLEtBQU9BLEVBQU0sTUFBUSxTQUN0RSxPQUFJQyxHQUFTRCxFQUFNLGVBQWdCLEVBQy9CQyxHQUFXRCxFQUFNLGtCQUFrQixhQUFhQSxFQUFNLE9BQU8sTUFBTyxFQUNqRUMsQ0FDVCxFQUNJQyxHQUFXQyxHQUFTLENBQ3RCLElBQUlwQixFQUNKLE1BQU1xQixJQUFTckIsRUFBTW9CLEVBQUssY0FBZ0IsS0FBTyxPQUFTcEIsRUFBSSxLQUFLb0IsQ0FBSSxJQUFNQSxFQUFLLGNBQ2xGLE9BQU9DLGFBQWdCLFVBQVlBLGFBQWdCLFdBQWFBLEVBQU8sUUFDekUsRUFDSUMsR0FBSyxFQUNMQyxHQUFTMUIsR0FDTkEsR0FDQUEsRUFBRyxLQUFJQSxFQUFHLEdBQUssSUFBSUEsRUFBRyxTQUFTLFlBQVcsQ0FBRSxJQUFJLEVBQUV5QixJQUFJLFNBQVMsRUFBRSxDQUFDLElBQ2hFekIsRUFBRyxJQUZNLEdBSWRhLEdBQWdCLENBQUNjLEVBQVNDLEVBQU1DLElBQVUsQ0FDNUMsTUFBTTdCLEVBQUssU0FBUyxjQUFjMkIsQ0FBTyxFQUN6QyxPQUFJQyxJQUFNNUIsRUFBRyxZQUFjNEIsR0FDcEI1QixDQUNULEVBQ0k4QixFQUFpQixDQUNuQixPQUFRLENBQUM3QixFQUFNOEIsSUFBYSxDQUFDdkMsSUFBYyxPQUFPLGVBQWUsSUFBSVMsQ0FBSSxHQUFLLE9BQU8sZUFBZSxPQUFPQSxFQUFNOEIsQ0FBUSxDQUMzSCxFQUdJQyxHQUFnQixnQkFDaEJDLEVBQWdCLGdCQUNoQkMsR0FBbUIsY0FBY3BDLENBQWEsQ0FDaEQsYUFBYyxDQUNaLE1BQU8sRUFDUGEsRUFBWSxLQUFNZCxFQUFhLENBQ25DLENBQ0UsSUFBSSxTQUFVLENBQ1osT0FBT3NDLEdBQW1CLFlBQWEsSUFBSSxFQUFFLENBQUMsR0FBSyxJQUN2RCxDQUNFLElBQUksZUFBZ0IsQ0FDbEIsT0FBT0MsR0FBaUIsS0FBSyxJQUFJLENBQ3JDLENBQ0UsSUFBSSxjQUFjQyxFQUFPLENBQ3ZCQyxHQUFZLEtBQUssS0FBS0QsQ0FBSyxDQUFDLENBQ2hDLENBQ0UsSUFBSSxNQUFPLENBQ1QsT0FBT0YsR0FBbUIsUUFBUyxJQUFJLENBQzNDLENBQ0UsSUFBSSxRQUFTLENBQ1gsT0FBT0EsR0FBbUIsYUFBYyxJQUFJLENBQ2hELENBQ0EsRUFDSUksR0FBc0IsY0FBY3pDLENBQWEsQ0FDbkQsYUFBYyxDQUNaLE1BQU8sRUFDUGEsRUFBWSxLQUFNZCxFQUFhLENBQ25DLENBQ0UsbUJBQW9CLENBQ2xCRSxFQUFLLEtBQU0sT0FBUSxTQUFTLEVBQzVCVSxHQUFHLEtBQU0sZ0JBQWlCLElBQUksRUFDOUJNLEdBQWlCLEtBQU0sQ0FBRSxVQUFXLEVBQUksQ0FBRSxFQUN0QyxLQUFLLEtBQUssUUFBUSxLQUFLLFlBQWEsQ0FDNUMsQ0FDRSxzQkFBdUIsQ0FDckJMLEdBQUksS0FBTSxnQkFBaUIsSUFBSSxFQUMvQkssR0FBaUIsS0FBTSxFQUFLLENBQ2hDLENBQ0UsWUFBWUssRUFBTyxDQUNqQixHQUFJLENBQUNBLEdBQVNBLEVBQU0sT0FBUyxXQUFZLENBQ3ZDLE1BQU1vQixFQUFNLEtBQUssS0FBSyxLQUFLLElBQUksS0FBSyxjQUFlLENBQUMsQ0FBQyxFQUNyRCxPQUFPQSxHQUFPLEtBQU8sT0FBU0EsRUFBSSxhQUFhUCxFQUFlLE1BQU0sQ0FDMUUsQ0FDSSxLQUFNLENBQUUsSUFBQVEsQ0FBRyxFQUFLckIsRUFDVnNCLEVBQU8sQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUNwQkMsRUFBT0QsRUFBSyxVQUFXRixHQUFRQSxFQUFJLFNBQVNwQixFQUFNLE1BQU0sQ0FBQyxFQUMvRCxJQUFJd0IsRUFBT0QsRUFDWCxHQUFJLEVBQUF2QixFQUFNLGtCQUFvQnVCLElBQVMsTUFDbkN2QixFQUFNLE9BQVMsU0FBU2tCLEdBQVlJLEVBQUtDLENBQUksQ0FBQyxFQUM5Q3ZCLEVBQU0sT0FBUyxXQUFhLENBQUNELEdBQVNDLENBQUssR0FBRyxDQUNoRCxHQUFJcUIsSUFBUSxhQUFlQSxJQUFRLGFBQ2pDRyxHQUFRRCxFQUFPLEdBQUtELEVBQUssZUFDbEJELElBQVEsV0FBYUEsSUFBUSxZQUNwQ0csR0FBUUQsR0FBUUQsRUFBSyxRQUFVLFVBQ3hCRCxJQUFRLE1BQU9HLEVBQU9GLEVBQUssT0FBUyxVQUNwQ0QsSUFBUSxPQUFRRyxFQUFPLFVBQ3ZCSCxJQUFRLE1BQU9HLEVBQU9SLEdBQWlCTSxDQUFJLE1BQy9DLFFBQ0wsV0FBVyxJQUFNLENBQ2ZBLEVBQUtDLENBQUksRUFBRSxTQUFXLEdBQ3RCRCxFQUFLRSxDQUFJLEVBQUUsU0FBVyxDQUM5QixDQUFPLEVBQ0dILElBQVEsUUFDVnJCLEVBQU0sZUFBZ0IsRUFDdEJzQixFQUFLRSxDQUFJLEVBQUUsTUFBTyxFQUUxQixDQUNBLENBQ0UsSUFBSSxhQUFjLENBQ2hCLE9BQU8sS0FBSyxRQUFRLFFBQVEsQ0FDaEMsQ0FDRSxJQUFJLE1BQU8sQ0FDVCxPQUFPLEtBQUssaUJBQWlCLE9BQU8sQ0FDeEMsQ0FDRSxJQUFJLGVBQWdCLENBQ2xCLE9BQU9SLEdBQWlCLEtBQUssSUFBSSxDQUNyQyxDQUNFLElBQUksY0FBY0MsRUFBTyxDQUN2QkMsR0FBWSxLQUFLLEtBQUtELENBQUssQ0FBQyxDQUNoQyxDQUNBLEVBQ0lRLEdBQW1CLEdBQ25CQyxHQUFrQixjQUFjaEQsQ0FBYSxDQUUvQyxXQUFXLG9CQUFxQixDQUM5QixNQUFPLENBQUMsS0FBTW1DLEVBQWVELEVBQWEsQ0FDOUMsQ0FDRSxhQUFjLENBQ1osTUFBTyxFQUNQckIsRUFDRSxLQUNBLGtFQUNELENBQ0wsQ0FDRSxtQkFBb0IsQ0FDbEJaLEVBQUssS0FBTSxPQUFRLEtBQUssRUFDeEIsS0FBSyxTQUFXLEtBQUssU0FBVyxFQUFJLEVBQ3hDLENBQ0UsMEJBQTJCLENBQ3pCLEdBQUksQ0FBQzhDLElBQW9CLEtBQUssVUFBWSxLQUFLLFFBQVMsQ0FDdERBLEdBQW1CLEdBQ25CLE1BQU1ILEVBQU8sQ0FBQyxHQUFHLEtBQUssUUFBUSxpQkFBaUIsT0FBTyxDQUFDLEVBQ2pESyxFQUFTWixHQUFtQixhQUFjLEtBQUssYUFBZSxJQUFJLEVBQ2xFYSxFQUFZQyxHQUFTLEtBQU1GLEVBQU9MLEVBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxFQUN2RE0sR0FBV2pELEVBQUtpRCxFQUFXcEQsR0FBaUI4QixHQUFNLElBQUksQ0FBQyxFQUMzRGdCLEVBQUssUUFBUSxDQUFDRixFQUFLSCxJQUFVLENBQzNCLE1BQU1hLEVBQVFELEdBQVNULEVBQUtPLEVBQU9WLENBQUssQ0FBQyxFQUN6Q0csRUFBSSxTQUFXQSxJQUFRLEtBQU8sRUFBSSxHQUNsQ3pDLEVBQUt5QyxFQUFLUCxFQUFlLEdBQUdPLElBQVEsSUFBSSxFQUFFLEVBQ3RDVSxJQUFPQSxFQUFNLE9BQVNBLElBQVVGLEdBQ2hDRSxHQUFPbkQsRUFBS3lDLEVBQUtSLEdBQWVrQixFQUFNLEVBQUUsQ0FDcEQsQ0FBTyxFQUNETCxHQUFtQixFQUN6QixDQUNBLENBQ0UsSUFBSSxhQUFjLENBQ2hCLE9BQU8sS0FBSyxRQUFRLFFBQVEsQ0FDaEMsQ0FDRSxJQUFJLFNBQVUsQ0FDWixNQUFNTSxFQUFVLEtBQUssY0FDckIsT0FBUUEsR0FBVyxLQUFPLE9BQVNBLEVBQVEsWUFBYyxZQUFjQSxFQUFVLElBQ3JGLENBQ0UsSUFBSSxVQUFXLENBQ2IsT0FBT3BELEVBQUssS0FBTWtDLENBQWEsSUFBTSxNQUN6QyxDQUNFLElBQUksU0FBUy9CLEVBQU8sQ0FDbEJILEVBQUssS0FBTWtDLEVBQWUsR0FBRyxDQUFDLENBQUMvQixDQUFLLEVBQUUsQ0FDMUMsQ0FFRSxJQUFJLE9BQVEsQ0FDVixNQUFNa0QsRUFBVSxLQUFLLFFBQ3JCLE9BQU9BLEVBQVUsQ0FBQyxHQUFHQSxFQUFRLGlCQUFpQixPQUFPLENBQUMsRUFBRSxRQUFRLElBQUksRUFBSSxDQUM1RSxDQUNFLElBQUksT0FBUSxDQUNWLE9BQU9ILEdBQVMsSUFBSSxDQUN4QixDQUNBLEVBQ0lJLEdBQXVCLGNBQWN2RCxDQUFhLENBRXBELFdBQVcsb0JBQXFCLENBQzlCLE1BQU8sQ0FBQyxRQUFRLENBQ3BCLENBQ0UsYUFBYyxDQUNaLE1BQU8sRUFDUGEsRUFBWSxLQUFNZCxFQUFhLENBQ25DLENBQ0UsbUJBQW9CLENBQ2xCRSxFQUFLLEtBQU0sT0FBUSxVQUFVLEVBQzdCLEtBQUssT0FBU3FDLEdBQWlCLEtBQUssSUFBSSxJQUFNLEdBQzlDLEtBQUsseUJBQTBCLENBQ25DLENBQ0UsMEJBQTJCLENBQ3JCLEtBQUssUUFBVWtCLEdBQVksS0FBSyxVQUFVLEVBQzVDdkQsRUFBSyxLQUFNLFdBQVksSUFBSSxFQUN4QixLQUFLLFNBQVcsQ0FDekIsQ0FDRSxJQUFJLGFBQWMsQ0FDaEIsT0FBTyxLQUFLLFFBQVEsUUFBUSxDQUNoQyxDQUNFLElBQUksTUFBTyxDQUNULE1BQU1hLEVBQU0sU0FBU29CLEVBQWEsS0FBSyxLQUFLLEVBQUUsS0FDOUMsT0FBT1YsR0FBUSxJQUFJLEVBQUUsaUJBQWlCVixDQUFHLENBQzdDLENBQ0EsRUFDSXVCLEdBQXFCLENBQUNvQixFQUFLQyxJQUFTQSxFQUFLLGlCQUFpQixHQUFHRCxDQUFHLDBCQUEwQkEsQ0FBRyxHQUFHLEVBQ2hHTixHQUFXLENBQUNULEVBQUtVLElBQVUsQ0FDN0IsTUFBTU8sRUFBTTFELEVBQUt5QyxFQUFLUixFQUFhLEdBQUtOLEdBQU13QixDQUFLLEVBQzdDbEQsRUFBS3NCLEdBQVFrQixDQUFHLEVBQUUsZUFBZWlCLENBQUcsRUFDMUMsT0FBUXpELEdBQU0sS0FBTyxPQUFTQSxFQUFHLFlBQWMsYUFBZUEsRUFBSyxJQUNyRSxFQUNJb0MsR0FBb0JNLEdBQVMsQ0FBQyxHQUFHQSxDQUFJLEVBQUUsVUFBV0YsR0FBUXpDLEVBQUt5QyxFQUFLUCxDQUFhLElBQU0sTUFBTSxFQUM3RkssR0FBZUUsR0FBUUEsR0FBT3pDLEVBQUt5QyxFQUFLLGdCQUFpQixNQUFNLEVBQy9EYyxHQUFldEQsR0FBT0EsYUFBYyxTQUFXLENBQUNBLEVBQUcsUUFBUSwyQkFBMkIsR0FBS0EsRUFBRyxRQUNoRyxpSEFDRixFQUNBOEIsRUFBZSxPQUFPLFNBQVVJLEVBQWdCLEVBQ2hESixFQUFlLE9BQU8sWUFBYVMsRUFBbUIsRUFDdERULEVBQWUsT0FBTyxRQUFTZ0IsRUFBZSxFQUM5Q2hCLEVBQWUsT0FBTyxhQUFjdUIsRUFBb0IsRUMzUHhELElBQUlLLEdBQVksT0FBTyxlQUNuQkMsR0FBc0IsT0FBTyxzQkFDN0JDLEdBQWUsT0FBTyxVQUFVLGVBQ2hDQyxHQUFlLE9BQU8sVUFBVSxxQkFDaENDLEdBQWtCLENBQUNDLEVBQUt0QixFQUFLdkMsSUFBVXVDLEtBQU9zQixFQUFNTCxHQUFVSyxFQUFLdEIsRUFBSyxDQUFFLFdBQVksR0FBTSxhQUFjLEdBQU0sU0FBVSxHQUFNLE1BQUF2QyxDQUFLLENBQUUsRUFBSTZELEVBQUl0QixDQUFHLEVBQUl2QyxFQUN0SjhELEdBQWlCLENBQUNDLEVBQUdDLElBQU0sQ0FDN0IsUUFBU0MsS0FBUUQsSUFBTUEsRUFBSSxDQUFBLEdBQ3JCTixHQUFhLEtBQUtNLEVBQUdDLENBQUksR0FDM0JMLEdBQWdCRyxFQUFHRSxFQUFNRCxFQUFFQyxDQUFJLENBQUMsRUFDcEMsR0FBSVIsR0FDRixRQUFTUSxLQUFRUixHQUFvQk8sQ0FBQyxFQUNoQ0wsR0FBYSxLQUFLSyxFQUFHQyxDQUFJLEdBQzNCTCxHQUFnQkcsRUFBR0UsRUFBTUQsRUFBRUMsQ0FBSSxDQUFDLEVBRXRDLE9BQU9GLENBQ1QsRUFHSXpFLEVBQWEsT0FBTyxPQUFXLEtBQWUsT0FBTyxPQUFPLFNBQWEsS0FBZSxPQUFPLE9BQU8sVUFBYyxJQUNwSEMsR0FBYUQsR0FBYyxXQUFXLEtBQUssVUFBVSxTQUFTLEVBQzlENEUsR0FBYTVFLEdBQWMsV0FBVyxLQUFLLFVBQVUsU0FBUyxFQUM5RDZFLEdBQVM3RSxHQUFjLG1CQUFtQixLQUFLLFVBQVUsU0FBUyxFQUNsRUUsR0FDTTRFLEdBQ1YsUUFBUSxPQUFPNUUsR0FBSyxVQUFVLGdCQUFrQixLQUFPLE9BQVNBLEdBQUcsV0FBYSxVQUFVLFFBQVEsRUFDbEcsSUFBSTZFLEdBQWdCLCtGQUNoQnpFLEdBQWUsT0FBTyxZQUFnQixJQUFjLEtBQU0sQ0FDOUQsRUFBSSxZQUNKLFNBQVNDLEVBQUtDLEVBQUlDLEVBQU1DLEVBQU8sQ0FDN0IsT0FBSUEsSUFBVSxPQUFlRixFQUFHLGFBQWFDLENBQUksR0FDN0NDLElBQVUsS0FBTUYsRUFBRyxnQkFBZ0JDLENBQUksRUFDbENELEVBQUcsYUFBYUMsQ0FBSSxJQUFNQyxHQUFPRixFQUFHLGFBQWFDLEVBQU1DLENBQUssRUFDOUQsS0FDVCxDQUNBLElBQUlFLEdBQVMsQ0FBQ0MsRUFBUUMsRUFBU0MsSUFBUyxDQUN0QyxVQUFXQyxLQUFRRCxFQUFLLENBQUMsRUFBRSxNQUFNLEdBQUcsRUFDbENBLEVBQUssQ0FBQyxFQUFJQyxFQUNWLFFBQVEsVUFBVSxHQUFHSCxDQUFNLGVBQWUsRUFBRSxNQUFNQyxFQUFTQyxDQUFJLENBRW5FLEVBQ0lFLEdBQUssQ0FBQ0gsS0FBWUMsSUFBU0gsR0FBTyxNQUFPRSxFQUFTQyxDQUFJLEVBQ3RERyxHQUFNLENBQUNKLEtBQVlDLElBQVNILEdBQU8sU0FBVUUsRUFBU0MsQ0FBSSxFQUMxRE8sR0FBNEIsSUFBSSxRQUNoQ0MsR0FBbUIsQ0FBQ1QsRUFBU1UsSUFBWSxDQUMzQyxHQUFJQSxJQUFZLE9BQVEsT0FBT0YsR0FBVSxJQUFJUixDQUFPLEVBQ3BELEdBQUksQ0FDRlEsR0FBVSxJQUFJUixDQUFPLEVBQUUsV0FBWSxFQUNuQ1EsR0FBVSxPQUFPUixDQUFPLENBQ3pCLE1BQWEsQ0FDaEIsQ0FDRSxHQUFJVSxFQUFTLENBQ1gsTUFBTUMsRUFBVyxJQUFJLGlCQUNsQkMsR0FBV1osRUFBUSxZQUFZLENBQUUsS0FBTSxXQUFZLE9BQUFZLENBQVEsQ0FBQSxDQUM3RCxFQUNERCxFQUFTLFFBQVFYLEVBQVNVLENBQU8sRUFDakNGLEdBQVUsSUFBSVIsRUFBU1csQ0FBUSxDQUNuQyxDQUNBLEVBQ0lFLEdBQVlDLEdBQVUsQ0FDeEIsTUFBTUMsRUFBVSxRQUFTRCxJQUFVQSxFQUFNLE1BQVEsS0FBT0EsRUFBTSxNQUFRLFNBQ3RFLE9BQUlDLEdBQVNELEVBQU0sZUFBZ0IsRUFDL0JDLEdBQVdELEVBQU0sa0JBQWtCLGFBQWFBLEVBQU0sT0FBTyxNQUFPLEVBQ2pFQyxDQUNULEVBQ0lDLEdBQVdDLEdBQVMsQ0FDdEIsSUFBSXBCLEVBQ0osTUFBTXFCLElBQVNyQixFQUFNb0IsRUFBSyxjQUFnQixLQUFPLE9BQVNwQixFQUFJLEtBQUtvQixDQUFJLElBQU1BLEVBQUssY0FDbEYsT0FBT0MsYUFBZ0IsVUFBWUEsYUFBZ0IsV0FBYUEsRUFBTyxRQUN6RSxFQUNJQyxHQUFLLEVBQ0xDLEdBQVMxQixHQUNOQSxHQUNBQSxFQUFHLEtBQUlBLEVBQUcsR0FBSyxJQUFJQSxFQUFHLFNBQVMsWUFBVyxDQUFFLElBQUksRUFBRXlCLElBQUksU0FBUyxFQUFFLENBQUMsSUFDaEV6QixFQUFHLElBRk0sR0FJZGEsR0FBZ0IsQ0FBQ2MsRUFBUzZDLEVBQU8zQyxJQUFVLENBQzdDLE1BQU03QixFQUFLLFNBQVMsY0FBYzJCLENBQU8sRUFFekMsR0FESTZDLElBQU94RSxFQUFHLFlBQWN3RSxHQUN4QjNDLEVBQU8sU0FBVyxDQUFDWSxFQUFLZ0MsQ0FBRyxJQUFLLE9BQU8sUUFBUTVDLENBQUssRUFBRzlCLEVBQUtDLEVBQUl5QyxFQUFLZ0MsQ0FBRyxFQUM1RSxPQUFPekUsQ0FDVCxFQUNJOEIsR0FBaUIsQ0FDbkIsT0FBUSxDQUFDN0IsRUFBTThCLElBQWEsQ0FBQ3ZDLEdBQWMsT0FBTyxlQUFlLElBQUlTLENBQUksR0FBSyxPQUFPLGVBQWUsT0FBT0EsRUFBTThCLENBQVEsQ0FDM0gsRUFDSTJDLEVBQ0FDLEdBQWMsRUFDZEMsR0FBU0osR0FBVSxDQUNoQkUsSUFDSEEsRUFBTzdELEdBQWMsS0FBSyxFQUMxQjZELEVBQUssTUFBTSxRQUFVLDhEQUNyQjNFLEVBQUsyRSxFQUFNLFlBQWEsV0FBVyxHQUVoQ0EsRUFBSyxhQUFhLFNBQVMsS0FBSyxPQUFPQSxDQUFJLEVBQzVDRixJQUFPRSxFQUFLLFlBQWMsR0FBR0YsQ0FBSyxHQUFHRyxLQUFnQixFQUFJLElBQVMsRUFBRSxHQUMxRSxFQUNJRSxHQUFXLENBQUNDLEVBQU9DLEVBQU12RSxFQUFPLEtBQU8sQ0FDekMsSUFBSUwsRUFBSzZFLEVBQ1QsTUFBTTVELEVBQVEsQ0FBRSxRQUFTLEdBQU0sU0FBVSxHQUFNLEtBQUEyRCxFQUFNLFVBQVd2RSxDQUFNLEVBQ2hFeUUsRUFBUSxpQkFBaUIsVUFDL0JILEVBQU0sY0FBYyxJQUFJLFdBQVcsY0FBZTFELENBQUssQ0FBQyxHQUN2RDRELEdBQU03RSxFQUFNLE9BQU8seUJBQXlCOEUsRUFBTyxPQUFPLElBQU0sS0FBTyxPQUFTOUUsRUFBSSxNQUFRLE1BQWdCNkUsRUFBRyxLQUFLRixFQUFPQyxDQUFJLEVBQ2hJRCxFQUFNLGNBQWMsSUFBSSxXQUFXLFFBQVMxRCxDQUFLLENBQUMsRUFDbEQwRCxFQUFNLGNBQWMsSUFBSSxNQUFNLFNBQVUsQ0FBRSxRQUFTLEVBQUksQ0FBRSxDQUFDLENBQzVELEVBR0lJLEdBQVcsR0FDWEMsR0FBUywrREFDVEMsR0FBYSxDQUFFLEtBQU0sR0FBTSxRQUFTLEVBQU0sRUFDMUNDLEdBQWlCakIsSUFBYyxDQUFDM0UsR0FDaEM2RixHQUFZN0YsSUFBYzRFLEdBQzFCa0IsR0FBUSxRQUNSQyxHQUFRLHdCQUNSQyxHQUFRLENBQ1YsTUFBTyxRQUNQLE1BQU8sY0FDUCxNQUFPLG9DQUNQLFFBQVMsZ0JBQ1QsR0FBSSxLQUNKLE9BQVEsa0JBQ1IsUUFBUyxTQUNYLEVBQ0lDLEdBQXVCLGNBQWM1RixFQUFhLENBQ3BELGFBQWMsQ0FDWixNQUFPLEVBQ1AsS0FBSyxPQUFTLEdBQ2QsS0FBSyxPQUFTa0UsR0FBZSxDQUFBLEVBQUl5QixFQUFLLEVBQ3RDLEtBQUssT0FBUyxHQUNkLEtBQUssYUFBYSxDQUFFLEtBQU0sTUFBTSxDQUFFLEVBQUUsT0FDbEM1RSxHQUFjLE1BQU0sRUFFcEJBLEdBQ0UsUUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGtDQU8wQjBELEVBQWEsSUFDL0MsQ0FDSyxDQUNMLENBR0UsV0FBVyxvQkFBcUIsQ0FDOUIsT0FBTyxPQUFPLEtBQUtrQixFQUFLLEVBQUUsSUFBS2hELEdBQVEsV0FBV0EsQ0FBRyxFQUFFLENBQzNELENBQ0UsbUJBQW9CLENBQ2xCLEtBQUssTUFBUW5CLEdBQVEsSUFBSSxFQUN6QmIsR0FBRyxLQUFNMEUsR0FBUSxLQUFNLEVBQUksRUFDM0JwRSxHQUFpQixLQUFNLENBQUUsVUFBVyxHQUFNLFFBQVMsR0FBTSxFQUN6RCxXQUFXNEUsR0FBUSxFQUFHLElBQUksRUFDMUIsV0FBV0MsR0FBZ0IsRUFBRyxJQUFJLENBQ3RDLENBQ0UseUJBQXlCekIsRUFBTTBCLEVBQUdwQixFQUFLLENBQ3JDLE1BQU1ELEVBQVFMLEVBQUssTUFBTSxVQUFVLEVBQUUsQ0FBQyxFQUNsQ3NCLEdBQU1qQixDQUFLLElBQUcsS0FBSyxPQUFPQSxDQUFLLEVBQUlDLEdBQU9nQixHQUFNakIsQ0FBSyxFQUM3RCxDQUNFLHNCQUF1QixDQUNyQnpELEdBQWlCLEtBQU0sRUFBSyxFQUM1QkwsR0FBSSxLQUFNeUUsR0FBUSxLQUFNLEVBQUksRUFDNUIsS0FBSyxPQUFTLEtBQUssT0FBUyxLQUFLLE9BQVMsS0FBSyxTQUFXLE9BQzFELEtBQUssTUFBUSxLQUFLLFNBQVcsS0FBSyxNQUFRLE1BQzlDLENBQ0UsWUFBWS9ELEVBQU8sQ0FDakIsTUFBTTBFLEVBQVMxRSxFQUFNLE9BQ2pCQSxFQUFNLE9BQVMsZ0JBQWUsS0FBSyxRQUFVMEUsR0FBVSxLQUFPLE9BQVNBLEVBQU8sUUFBVSxJQUN4RjFFLEVBQU0sT0FBUyxRQUFRMkUsR0FBTyxJQUFJLEVBQ2xDM0UsRUFBTSxPQUFTLFNBQVM0RSxHQUFRLEtBQU01RSxDQUFLLEVBQzNDQSxFQUFNLE9BQVMsU0FBUzZFLEdBQVEsS0FBTTdFLENBQUssRUFDM0NBLEVBQU0sT0FBUyxTQUFTOEUsR0FBUSxLQUFNOUUsQ0FBSyxFQUMzQ0EsRUFBTSxPQUFTLFdBQVcrRSxHQUFVLEtBQU0vRSxDQUFLLEVBQy9DQSxFQUFNLE9BQVMsY0FBYThELEdBQVcsS0FBSyxTQUFTWSxDQUFNLEdBQzNEMUUsRUFBTSxPQUFTLFlBQVc4RCxHQUFXLElBQ3JDOUQsRUFBTSxPQUFTLFlBQVl1RSxHQUFPLEtBQU12RSxDQUFLLENBQ3JELENBQ0UsSUFBSSxVQUFXLENBQ2IsSUFBSWpCLEVBQ0osUUFBU0EsRUFBTUosRUFBSyxLQUFNLGVBQWUsSUFBTSxLQUFPSSxFQUFNb0YsTUFBV0EsRUFDM0UsQ0FDRSxJQUFJLFNBQVNyRixFQUFPLENBQ2xCSCxFQUFLLEtBQU0sZ0JBQWlCRyxFQUFRLEdBQUssSUFBSSxDQUNqRCxDQUNFLElBQUksV0FBWSxDQUNkLElBQUlDLEVBQ0osUUFBU0EsRUFBTUosRUFBSyxLQUFNLGdCQUFnQixJQUFNLEtBQU9JLEVBQU1vRixNQUFXQSxFQUM1RSxDQUNFLElBQUksVUFBVXJGLEVBQU8sQ0FDbkJILEVBQUssS0FBTSxpQkFBa0JHLEVBQVEsR0FBSyxJQUFJLENBQ2xELENBQ0UsSUFBSSxTQUFVLENBQ1osSUFBSUMsRUFDSixPQUFPQSxFQUFNLEtBQUssV0FBYSxNQUFnQkEsRUFBSSxjQUNqRCxLQUFLLFNBQVcsS0FBSyxjQUFjLE9BQU8sR0FDckMsS0FBSyxRQUNoQixDQUNFLElBQUksTUFBTyxDQUNULElBQUlBLEVBQ0osT0FBT0EsRUFBTSxLQUFLLFFBQVUsTUFBZ0JBLEVBQUksY0FDOUMsS0FBSyxNQUFRLEtBQUssY0FBYyxxQkFBcUIsR0FDaEQsS0FBSyxLQUNoQixDQUNFLElBQUksT0FBUSxDQUNWLElBQUlBLEVBQ0osT0FBT0EsRUFBTSxLQUFLLFNBQVcsTUFBZ0JBLEVBQUksY0FBYyxLQUFLLE9BQVMsS0FBSyxjQUFjLEtBQUssR0FDOUYsS0FBSyxNQUNoQixDQUNFLElBQUksT0FBUSxDQUNWLE9BQUssS0FBSyxTQUFRLEtBQUssT0FBUyxLQUFLLHFCQUFxQixNQUFNLEdBQ3pELEtBQUssTUFDaEIsQ0FDRSxJQUFJLFNBQVUsQ0FDWixJQUFJQSxFQUFLNkUsRUFDVCxHQUFJLENBQUMsS0FBSyxTQUFVLENBQ2xCLE1BQU16QixJQUFRcEQsRUFBTSxLQUFLLE9BQVMsS0FBTyxPQUFTQSxFQUFJLFlBQWMsYUFBZSxXQUFhLFNBQ2hHLEtBQUssVUFBWTZFLEVBQUssS0FBSyxPQUFTLEtBQU8sT0FBU0EsRUFBRyxxQkFBcUJ6QixDQUFHLENBQ3JGLENBQ0ksT0FBTyxLQUFLLFFBQ2hCLENBQ0UsSUFBSSxRQUFTLENBQ1gsTUFBTyxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUUsTUFBQXJELENBQU8sSUFBS0EsQ0FBSyxDQUNuRCxDQUNBLEVBQ0kwQixFQUFRNUIsR0FBTyxDQUNqQixJQUFJRyxFQUNKLFFBQVNBLEVBQU1ILEdBQU0sS0FBTyxPQUFTQSxFQUFHLGNBQWdCLEtBQU8sT0FBU0csRUFBSSxLQUFNLElBQUssRUFDekYsRUFDSWlHLEdBQVVwRyxHQUFPQSxhQUFjLGdCQUMvQjJGLEdBQVMsQ0FBQ25DLEVBQU1wQyxJQUFVLENBQzVCLElBQUlqQixFQUFLNkUsRUFDVCxLQUFNLENBQUUsT0FBQXFCLEVBQVEsT0FBQUMsRUFBUSxNQUFBQyxFQUFPLFFBQUFDLEVBQVMsS0FBQUMsRUFBTSxTQUFBQyxDQUFRLEVBQUtsRCxFQUMzRCxJQUFJbUQsRUFBUSxHQUFHL0UsR0FBTXpCLEVBQU1xRyxHQUFXLEtBQU8sT0FBU0EsRUFBUSxTQUFXLEtBQU8sT0FBU3JHLEVBQUksQ0FBQyxDQUFDLENBQUMsS0FBS3VHLEVBQVdILEVBQU0sT0FBU0QsRUFBTyxNQUFNLFFBQVEsS0FBTSxHQUFHQyxFQUFNLE1BQU0sRUFBRSxFQUFJRCxFQUFPLE1BQVEsRUFBRSxHQUNoTSxNQUFNTSxFQUFRLENBQUUsRUFDaEIsU0FBVyxDQUFFLFdBQUFDLEVBQVksYUFBQUMsQ0FBWSxJQUFPMUYsR0FBUyxLQUFPLE9BQVNBLEVBQU0sU0FBVyxHQUFJLENBQ3hGLFVBQVdwQixLQUFNNkcsRUFBZ0JULEdBQU9wRyxDQUFFLEdBQUc0RyxFQUFNLFFBQVE1RyxDQUFFLEVBQzdELFVBQVdBLEtBQU04RyxFQUFrQlYsR0FBT3BHLENBQUUsR0FBRzRHLEVBQU0sS0FBSzVHLENBQUUsQ0FDaEUsQ0FDRSxNQUFNK0csRUFBaUJMLEVBQVdFLEVBQU0sU0FBVyxFQUFJQSxFQUFNLENBQUMsSUFBTVAsRUFDcEUsR0FBSUEsR0FBVUcsR0FBV08sRUFBZ0IsQ0FDdkMsTUFBTUMsRUFBWWpILEVBQUt5RyxFQUFTLFdBQVcsRUFDckNTLEVBQVliLEdBQU9DLENBQU0sRUFBSUcsRUFBVUgsRUFDN0M3QyxFQUFLLE9BQVMsR0FBRzhDLEVBQU9NLEVBQU0sQ0FBQyxFQUFFLFlBQWMsUUFBVSxTQUFTLENBQUMsSUFBSWhGLEVBQUtnRixFQUFNLENBQUMsQ0FBQyxDQUFDLE1BQ2pGdEIsSUFBYWUsSUFBV0csSUFBUzVCLEdBQU1wQixFQUFLLE1BQU0sRUFDbERnRCxJQUFZUyxJQUNkbEgsRUFBS3lHLEVBQVMsZ0JBQWlCLElBQUksRUFDbkN6RyxFQUFLeUcsRUFBUyxZQUFhLE1BQU0sRUFDakNHLEVBQVEsSUFDUkgsRUFBUSxNQUFPLEdBRWpCLFdBQVcsSUFBTSxDQUNmLElBQUlVLEVBQ0puSCxFQUFLeUcsRUFBUyxnQkFBaUIsTUFBTSxFQUNyQ3pHLEVBQUt5RyxFQUFTLFlBQWFRLENBQVMsR0FDbkNFLEVBQU1ELEdBQWEsS0FBTyxPQUFTQSxFQUFVLFFBQVUsTUFBZ0JDLEVBQUksS0FBS0QsQ0FBUyxFQUMxRnpELEVBQUssT0FBUyxHQUNWNkIsR0FBZ0I1RSxHQUFHK0MsRUFBTSxPQUFRLElBQU1tQyxHQUFPbkMsQ0FBSSxFQUFHNEIsRUFBVSxFQUM5RCxXQUFXTyxHQUFRLElBQUtuQyxDQUFJLENBQ2xDLEVBQUUsR0FBRyxDQUNWLENBQ0UsSUFBSTJELEVBQU0sRUFDVixVQUFXQyxLQUFRYixFQUFPLENBQ3hCLE1BQU1jLEVBQVN6RixFQUFLd0YsQ0FBSSxFQUNsQmxILEVBQVFrSCxFQUFLLE9BQVNDLEVBQ3RCQyxHQUFPLEdBQUc5RCxFQUFLLE1BQU0sR0FBRzZELENBQU0sS0FBS2YsRUFBTyxNQUFNLEtBQUssRUFBRWEsQ0FBRyxJQUFJYixFQUFPLEVBQUUsSUFBSUMsRUFBTSxNQUFNLEdBQzdGeEcsRUFBS3FILEVBQU0sT0FBUSxRQUFRLEVBQzNCckgsRUFBS3FILEVBQU0sUUFBU2xILENBQUssRUFDekJILEVBQUtxSCxFQUFNLFdBQVksSUFBSSxFQUMzQnJILEVBQUtxSCxFQUFNLGFBQWNFLEVBQUksQ0FDakMsQ0FDTSxDQUFDWixHQUFZUyxFQUFNLEdBQ3JCLFFBQVEsS0FBSyxtREFBbUQsRUFDOURWLEdBQU0xRyxFQUFLMEcsRUFBTSx1QkFBd0IsR0FBR0MsQ0FBUSxFQUFFLEVBQ3RERixHQUFTekcsRUFBS3lHLEVBQVMsT0FBUTlFLEdBQU0rRSxDQUFJLENBQUMsRUFDMUNELEdBQVN6RyxFQUFLeUcsRUFBUyxhQUFjLEdBQUdoRCxFQUFLLE1BQU0sR0FBR21ELENBQUssRUFBRSxFQUNqRSxNQUFNWSxFQUFTL0QsRUFBSyxjQUFjLFFBQVEsRUFDdEMrRCxJQUFRQSxFQUFPLFNBQVdiLEdBQzFCYSxJQUFRQSxFQUFPLFlBQWMsSUFDakNBLEdBQVUsTUFBZ0JBLEVBQU8sT0FBTyxHQUFHL0QsRUFBSyxPQUFPLElBQUtpQixHQUFRLElBQUksT0FBT0EsRUFBS0EsRUFBSyxHQUFNLEVBQUksQ0FBQyxDQUFDLEVBQ3JHK0MsR0FBbUJoRSxDQUFJLEVBQ3ZCaUUsR0FBcUJqRSxDQUFJLEdBQ3hCd0IsRUFBS2pFLEdBQWlCeUMsQ0FBSSxJQUFNLE1BQWdCd0IsRUFBRyxZQUFhLENBQ25FLEVBQ0l3QyxHQUFzQmhFLEdBQVMsQ0FDakMsSUFBSXJELEVBQ0FxRCxFQUFLLE9BQU96RCxFQUFLeUQsRUFBSyxNQUFPLE9BQVEsUUFBUSxFQUM3Q0EsRUFBSyxRQUFPQSxFQUFLLE1BQU0sT0FBUyxHQUFHckQsRUFBTXFELEVBQUssVUFBWSxNQUFnQnJELEVBQUksT0FDcEYsRUFDSXNILEdBQXdCakUsR0FBUyxDQUNuQyxJQUFJckQsRUFDSixLQUFNLENBQUUsT0FBQXVILEVBQVEsUUFBQTFHLEVBQVUsQ0FBQSxFQUFJLE9BQUEyRyxDQUFRLEVBQUduRSxFQUN6QyxVQUFXb0UsS0FBTzVHLEVBQVMsQ0FDekIsTUFBTWQsR0FBU0MsRUFBTUosRUFBSzZILEVBQUssT0FBTyxJQUFNLEtBQU96SCxFQUFNeUIsRUFBS2dHLENBQUcsRUFDakU3SCxFQUFLNkgsRUFBSyxhQUFjRixFQUFTLEdBQUdBLENBQU0sR0FBRzlGLEVBQUtnRyxDQUFHLENBQUMsR0FBSyxJQUFJLEVBQy9EN0gsRUFBSzZILEVBQUssV0FBWUQsRUFBTyxTQUFTekgsQ0FBSyxFQUFJLEdBQUssSUFBSSxDQUM1RCxDQUNBLEVBQ0kwRixHQUFrQnBDLEdBQVMsQ0FDN0IsS0FBTSxDQUFFLFNBQUFrRCxFQUFVLFFBQUFGLEVBQVMsTUFBQUQsQ0FBTyxFQUFHL0MsRUFDL0J0RCxFQUFRMEIsRUFBSzJFLEVBQU0sQ0FBQyxDQUFDLEVBQ3ZCLENBQUNHLEdBQVlGLEdBQVd0RyxJQUFVc0csRUFBUSxPQUM1QzNCLEdBQVMyQixFQUFTdEcsRUFBTyxZQUFZLENBQ3pDLEVBQ0kySCxHQUFnQixDQUFDckUsRUFBTXNFLEVBQU8sS0FBUyxDQUN6QyxJQUFJM0gsRUFDSixLQUFNLENBQUUsT0FBQW1HLEVBQVEsUUFBQXRGLEVBQVUsQ0FBRSxFQUFFLFVBQUErRyxFQUFXLFFBQUF2QixFQUFTLE1BQUFELEVBQU8sU0FBQUcsQ0FBUSxFQUFLbEQsRUFDaEV0RCxJQUFVQyxFQUFNcUcsR0FBVyxLQUFPLE9BQVNBLEVBQVEsUUFBVSxLQUFPLE9BQVNyRyxFQUFJLEtBQU0sSUFBSyxHQUM1RjZILEVBQVE5SCxFQUFNLFlBQVcsR0FBTSxLQUNyQyxJQUFJK0gsRUFBUSxDQUFDLEdBQUdqSCxDQUFPLEVBQUUsS0FBTWtILEdBQU1BLEVBQUUsTUFBTSxLQUFJLEVBQUcsWUFBVyxJQUFPRixDQUFLLEVBQzNFLE1BQU01RyxFQUFRLENBQUUsUUFBUyxHQUFNLFdBQVksR0FBTSxPQUFRNkcsQ0FBTyxFQUNoRSxHQUFJekUsRUFBSyxjQUFjLElBQUksWUFBWSxjQUFlcEMsQ0FBSyxDQUFDLEVBQzFELFVBQVd3RyxLQUFPNUcsRUFBUzRHLEVBQUksU0FBV0EsSUFBUUssRUFHcEQsR0FGQUEsRUFBUSxDQUFDLEdBQUdqSCxDQUFPLEVBQUUsS0FBTWtILEdBQU1BLEVBQUUsUUFBUSxFQUMzQ1QsR0FBcUJqRSxDQUFJLEVBQ3JCeUUsRUFBTyxPQUFPRSxFQUFlM0UsRUFBTXlFLEVBQU8sR0FBTyxDQUFDLENBQUNILENBQUksRUFDM0QsR0FBSUMsR0FBYTdILEVBQU8sT0FBT2lJLEVBQWUzRSxFQUFNLENBQUUsTUFBQXRELENBQU8sRUFBRSxFQUFLLEVBQ2hFLENBQUN3RyxHQUFZSCxFQUFNLENBQUMsR0FBRzRCLEVBQWUzRSxFQUFNK0MsRUFBTSxDQUFDLEVBQUcsR0FBTSxFQUFLLEVBQ2pFdUIsR0FBTWxELEdBQU0wQixFQUFPLE9BQU8sQ0FDaEMsRUFDSTZCLEVBQWlCLENBQUMzRSxFQUFNNEQsRUFBTWdCLEVBQVksR0FBTU4sRUFBTyxLQUFTLENBQ2xFLEtBQU0sQ0FBRSxRQUFBdEIsRUFBUyxNQUFBRCxFQUFPLFNBQUFHLENBQVUsRUFBR2xELEVBQy9CNkUsRUFBTXhILEdBQWMsT0FBUXVHLEVBQUssT0FBU0EsRUFBSyxNQUFPLENBQzFELE1BQU9BLEVBQUssS0FDaEIsQ0FBRyxFQUNLa0IsRUFBUyxDQUFDLEdBQUcvQixDQUFLLEVBQUUsS0FBTWdDLEdBQU1BLEVBQUUsUUFBVW5CLEVBQUssS0FBSyxFQUN0RGhHLEVBQVEsQ0FBRSxRQUFTLEdBQU0sV0FBWSxHQUFNLE9BQVFrSCxHQUFVRCxDQUFLLEVBRXhFLEdBQUksRUFEU0MsR0FBVSxDQUFDRixJQUNYNUUsRUFBSyxjQUFjLElBQUksWUFBWSxlQUFnQnBDLENBQUssQ0FBQyxFQUFHLENBQ3ZFLEdBQUksQ0FBQ3NGLEVBQVUsVUFBVzhCLElBQVMsQ0FBQyxHQUFHakMsQ0FBSyxFQUFHaUMsRUFBTSxPQUFRLEVBQ3pERixFQUFRQSxFQUFPLE9BQVEsRUFDdEI5QixHQUFXLE1BQWdCQSxFQUFRLHNCQUFzQixjQUFlNkIsQ0FBRyxFQUNoRjdFLEVBQUssY0FBYyxJQUFJLFlBQVksY0FBZXBDLENBQUssQ0FBQyxDQUM1RCxDQUNNMEcsR0FBTSxXQUFXbEMsR0FBZ0IsR0FBSXBDLENBQUksQ0FDL0MsRUFDSXlDLEdBQVUsQ0FBQ3pDLEVBQU0sQ0FBRSxPQUFBc0MsS0FBYSxDQUM5QkEsYUFBa0IsY0FBYXRDLEVBQUssT0FBU3NDLEdBQ2pEbEIsR0FBTyxDQUNULEVBQ0ltQixHQUFVdkMsR0FBUzBCLElBQVksV0FBV3VELEdBQVcsRUFBR2pGLENBQUksRUFDNURpRixHQUFhakYsR0FBUyxDQUN4QixJQUFJckQsRUFDQSxDQUFDcUQsRUFBSyxRQUFVQSxFQUFLLFVBQVVyRCxFQUFNcUQsRUFBSyxRQUFVLEtBQU8sT0FBU3JELEVBQUksYUFBYSxJQUN6RnFELEVBQUssT0FBUyxPQUNkb0MsR0FBZXBDLENBQUksRUFDckIsRUFDSXdDLEdBQVUsQ0FBQ3hDLEVBQU1wQyxJQUFVLENBQzdCLEtBQU0sQ0FBRSxRQUFTc0gsRUFBRyxRQUFTQyxFQUFHLE9BQUE3QyxDQUFNLEVBQUsxRSxFQUNyQyxDQUFFLE1BQUF3SCxFQUFPLFFBQUFwQyxFQUFTLE1BQUFELENBQU8sRUFBRy9DLEVBQ2xDLEdBQUlvRixHQUFTLE1BQWdCQSxFQUFNLFNBQVM5QyxDQUFNLEVBQ2hELE9BQUlVLEdBQVMzQixHQUFTMkIsRUFBUyxHQUFJLHVCQUF1QixFQUNuREEsR0FBVyxLQUFPLE9BQVNBLEVBQVEsTUFBTyxFQUVuRCxVQUFXWSxLQUFRYixFQUFPLENBQ3hCLEtBQU0sQ0FBRSxJQUFBc0MsRUFBSyxNQUFBQyxFQUFPLE9BQUFDLEVBQVEsS0FBQUMsQ0FBTSxFQUFHNUIsRUFBSyxzQkFBdUIsRUFDakUsR0FBSUEsRUFBSyxTQUFTdEIsQ0FBTSxFQUFHLE9BQU9xQyxFQUFlM0UsRUFBTTRELENBQUksRUFDM0QsR0FBSXVCLEdBQUtFLEdBQU9GLEdBQUtJLEdBQVVMLEdBQUtNLEdBQVFOLEdBQUtJLEVBQU8sT0FBTzFCLEVBQUssTUFBTyxDQUMvRSxDQUNNdEIsSUFBV3RDLElBQU1nRCxHQUFXLE1BQWdCQSxFQUFRLE1BQU8sRUFDakUsRUFDSU4sR0FBVSxDQUFDMUMsRUFBTXBDLElBQVUsQ0FDN0IsSUFBSWpCLEVBQ0osS0FBTSxDQUFFLFFBQUFhLEVBQVUsQ0FBQSxFQUFJLFFBQUF3RixFQUFTLFNBQUFFLENBQVUsRUFBR2xELEVBQ3RDdEQsSUFBVUMsRUFBTXFHLEdBQVcsS0FBTyxPQUFTQSxFQUFRLFFBQVUsS0FBTyxPQUFTckcsRUFBSSxLQUFNLElBQUssR0FFbEcsR0FEZ0JpQixhQUFpQixXQUFhLENBQUNBLEVBQU0sV0FBYUEsRUFBTSxZQUFjb0UsR0FBUSxDQUFDLENBQUN0RixFQUNuRixDQUNYa0IsRUFBTSx5QkFBMEIsRUFDNUJvRixJQUFTQSxFQUFRLE1BQVFoRCxFQUFLLFFBQ2xDLFVBQVdvRSxLQUFPNUcsRUFDaEIsR0FBSTRHLEVBQUksT0FBU0EsRUFBSSxRQUFVMUgsRUFDN0IsT0FBT2lJLEVBQWUzRSxFQUFNb0UsRUFBS2xCLENBQVEsQ0FDOUMsTUFBV0EsR0FBVW1CLEdBQWNyRSxFQUFNLEVBQUssRUFDL0NnRSxHQUFtQmhFLENBQUksQ0FDekIsRUFDSTJDLEdBQVksQ0FBQzNDLEVBQU1wQyxJQUFVLENBQy9CLElBQUlqQixFQUNKLEdBQUlpQixFQUFNLFFBQVVBLEVBQU0sU0FBV0EsRUFBTSxTQUFXQSxFQUFNLFNBQVUsT0FDdEUsS0FBTSxDQUFFLE1BQUF3SCxFQUFPLFFBQUFwQyxFQUFTLE1BQUFELENBQU8sRUFBRy9DLEVBQzVCLENBQUUsSUFBQWYsRUFBSyxPQUFBd0csRUFBUSxPQUFBbkQsQ0FBUSxFQUFHMUUsRUFDMUI4SCxFQUFZMUMsR0FBV0EsSUFBWVYsRUFDbkNxRCxFQUFTRCxJQUFjMUMsR0FBVyxLQUFPLE9BQVNBLEVBQVEsY0FDaEUsSUFBSW5FLEVBQVE2RyxFQUFZM0MsRUFBTSxPQUFTLENBQUMsR0FBR0EsQ0FBSyxFQUFFLFFBQVFULENBQU0sRUFPaEUsR0FOSW9ELEdBQWF6RyxJQUFRLE9BQVNtRyxHQUFTLENBQUNBLEVBQU0sU0FDaER4SCxFQUFNLGVBQWdCLEVBQ3RCd0gsRUFBTSxTQUFXLEdBQ2pCQSxFQUFNLE1BQU8sRUFDYm5JLEdBQUdtSSxFQUFPLE9BQVEsSUFBTTdJLEVBQUs2SSxFQUFPLFdBQVksSUFBSSxFQUFHeEQsRUFBVSxHQUUvRCxHQUFDOEQsR0FBYS9ILEdBQVNDLENBQUssR0FBS2lCLElBQVUsSUFDL0MsSUFBSUksSUFBUSxjQUFnQixDQUFDeUcsRUFBVzdHLEdBQVMsVUFDeENJLElBQVEsYUFBZSxDQUFDMEcsRUFBUTlHLEdBQVMsVUFDekNJLElBQVEsU0FBV3lHLEVBQVcsQ0FDckMsTUFBTUUsRUFBT3JKLEVBQUt5RyxFQUFTLE1BQU0sRUFDakN6RyxPQUFBQSxFQUFLeUcsRUFBUyxPQUFRLEdBQUcsRUFDekIsc0JBQXNCLElBQU16RyxFQUFLeUcsRUFBUyxPQUFRNEMsQ0FBSSxDQUFDLEVBQ2hEdkIsR0FBY3JFLENBQUksQ0FDN0IsVUFBY2YsSUFBUSxhQUFlQSxJQUFRLFdBQWEsQ0FBQzBHLEVBQVEsQ0FFL0QsR0FEQS9ILEVBQU0sZUFBZ0IsRUFDbEIsQ0FBQzZILEdBQVUxQyxFQUFNbEUsQ0FBSyxFQUFHLE9BQU84RixFQUFlM0UsRUFBTStDLEVBQU1sRSxDQUFLLENBQUMsRUFDakU2RyxJQUFXN0csR0FBUyxFQUM1QixLQUFTLFFBQU82RyxJQUFjMUMsR0FBVyxLQUFPLE9BQVNBLEVBQVEsU0FDL0RwRixFQUFNLGVBQWdCLEdBQ3JCakIsRUFBTW9HLEVBQU0sS0FBSyxJQUFJLEVBQUdsRSxDQUFLLENBQUMsR0FBS21FLElBQVksTUFBZ0JyRyxFQUFJLE1BQU8sRUFDN0UsRUFDQTJCLEdBQWUsT0FBTyxhQUFjNEQsRUFBb0IsbUJDblozQzJELEVBQWMsQ0FBRSxRQUFTLEdBQU0sUUFBUyxFQUFLLEVBQzdDN0osRUFDWixPQUFPLE9BQVcsS0FBZSxPQUFPLFNBQWEsSUFZdEMsU0FBQThKLEdBQ2ZDLEVBQ0FDLEVBQ0MsQ0FDRyxJQUFBQyxFQUVKLE1BQU8sSUFBSUMsSUFBWSxDQUN0QixhQUFhRCxDQUFLLEVBQ2xCQSxFQUFRLFdBQVcsSUFBTUYsRUFBUyxHQUFHRyxDQUFJLEVBQUdGLENBQUssQ0FDbEQsQ0FDRCxDQVNnQixTQUFBekosRUFDZkMsRUFDQUMsRUFDQUMsRUFDZ0IsQ0FDaEIsT0FBSUEsSUFBVSxPQUFrQkYsRUFBRyxhQUFhQyxDQUFJLEdBQUssTUFDckRDLElBQVUsS0FBU0YsRUFBQSxnQkFBZ0JDLENBQUksRUFDbENELEVBQUcsYUFBYUMsQ0FBSSxJQUFNQyxHQUFVRixFQUFBLGFBQWFDLEVBQU1DLENBQUssRUFDOUQsS0FDUixDQU1BLElBQUl1QixHQUFLLEVBQ1QsTUFBTWtJLEdBQU8sR0FBRyxLQUFLLElBQU0sRUFBQSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEtBQUssU0FBUyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUcsQ0FBQyxDQUFDLEdBQ3pFLFNBQVNqSSxHQUFNMUIsRUFBYSxDQUM5QixPQUFDQSxFQUFHLEtBQUlBLEVBQUcsR0FBSyxHQUFHMkosRUFBSSxHQUFHLEVBQUVsSSxFQUFFLElBQzNCekIsRUFBRyxFQUNYLENBR0EsTUFBTUksR0FBUyxDQUNkQyxFQUNBQyxFQUNBQyxJQUNVLENBQ1YsVUFBV0MsS0FBUUQsRUFBSyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQ25DQSxFQUFLLENBQUMsRUFBSUMsRUFDVkYsRUFBUSxHQUFHRCxDQUFNLGVBQWUsRUFBRSxHQUFHRSxDQUFJLENBRTNDLEVBUWFFLEVBQUssQ0FDakJILEtBQ0dDLElBQ09ILEdBQU8sTUFBT0UsRUFBU0MsQ0FBSSxFQWdCaENxSixFQUFXcEssRUFBYSxTQUFTLGNBQWMsS0FBSyxFQUFJLEtBQ3hEcUssT0FBYyxJQUNkQyxHQUFpQixJQUFNLENBQzVCLFNBQVcsQ0FBQ2pFLEVBQUdrRSxDQUFNLElBQUtGLEdBQWdCRSxFQUFBLENBQzNDLEVBRUlILElBQ0hBLEVBQVMsTUFBTSxRQUFVLCtDQUN0Qm5KLEVBQUEsT0FBUSxxQkFBc0JxSixHQUFnQlQsQ0FBVyxHQVE3RCxNQUFNVyxFQUFXLENBQUUsSUFBSyxFQUFHLE1BQU8sRUFBRyxPQUFRLEVBQUcsS0FBTSxDQUFFLEVBRWpELFNBQVNDLEVBQ2ZuRSxFQUNBb0UsRUFDQUMsRUFDQUMsRUFDQyxDQUNELE1BQU1DLEVBQ0xMLEVBQVNHLENBQThCLEdBQ3ZDLE9BQU9BLENBQUssR0FDWkgsRUFBUyxPQUVWLEdBQUlFLElBQVcsSUFBUyxDQUFDQSxFQUFPLGFBQWUsQ0FBQ3BFLEVBQU8sWUFDL0MsT0FBQStELEdBQVEsT0FBTy9ELENBQU0sRUFDeEI4RCxHQUFBLE1BQUFBLEVBQVUsc0JBQXNCLEtBQUssT0FBT0EsR0FBWSxFQUFFLEVBQzFEQyxHQUFRLElBQUkvRCxDQUFNLEdBQ2QrRCxHQUFBLElBQUkvRCxFQUFRLElBQU1tRSxFQUFlbkUsRUFBUW9FLEVBQVFHLEVBQVVELENBQUssQ0FBQyxFQUUxRSxNQUFNRSxFQUFlSixhQUFrQixZQUNqQyxDQUFFLFlBQWFLLEVBQVMsYUFBY0MsQ0FBWSxFQUFBMUUsRUFDbEQyRSxFQUFVSCxFQUFlSixFQUFPLFlBQWNBLEVBQU8sWUFDckRRLEVBQVVKLEVBQWVKLEVBQU8sYUFBZUEsRUFBTyxhQUN0RCxDQUFFLE1BQUFTLEVBQU8sT0FBQUMsRUFBUSxLQUFBNUIsRUFBTSxJQUFBSCxDQUFJLEVBQUlxQixFQUFPLHNCQUFzQixFQUM1RFcsRUFBVSxLQUFLLE1BQU03QixHQUFReUIsRUFBVUUsR0FBUyxDQUFDLEVBQ2pERyxFQUFVLEtBQUssTUFBTWpDLEdBQU82QixFQUFVRSxHQUFVLENBQUMsRUFFakRHLEVBQWVGLEVBQVVOLEVBQVUsRUFDbkNTLEVBQWdCUCxFQUFVQSxFQUFVRixFQUFVLE9BQU8sV0FDckRVLEdBQWVILEVBQVVOLEVBQVUsRUFDbkNVLEdBQWdCSixFQUFVSixFQUFVRixFQUFVLE9BQU8sWUFDckRXLEdBQ0pkLElBQWFMLEVBQVMsUUFBVUksR0FBU1ksSUFBbUIsQ0FBQ0QsRUFDekRLLEdBQ0pmLElBQWFMLEVBQVMsU0FBV0ksR0FBU2MsS0FBbUIsQ0FBQ0QsR0FDMURJLEdBQVUsS0FBSyxJQUNwQixLQUFLLElBQUksR0FBSVIsR0FBV04sRUFBVUUsR0FBVyxDQUFDLEVBQzlDLE9BQU8sV0FBYUYsRUFBVSxFQUMvQixFQUNNZSxHQUFVLEtBQUssSUFDcEIsS0FBSyxJQUFJLEdBQUlSLEdBQVdOLEVBQVVFLEdBQVcsQ0FBQyxFQUM5QyxPQUFPLFlBQWNGLEVBQVUsRUFDaEMsRUFDTWUsR0FBYWxCLElBQWFMLEVBQVMsS0FBT0ssSUFBYUwsRUFBUyxPQUV0RWxFLEVBQU8sTUFBTSxLQUFPLEdBQUcsS0FBSyxNQUFNeUYsR0FBYUYsR0FBVUYsR0FBZ0JOLEVBQVVKLEVBQVVJLEVBQVVOLENBQU8sQ0FBQyxLQUMvR3pFLEVBQU8sTUFBTSxJQUFNLEdBQUcsS0FBSyxNQUFNeUYsR0FBY0gsR0FBZ0JOLEVBQVVKLEVBQVVJLEVBQVVOLEVBQVdjLEVBQU8sQ0FBQyxLQUNoSDFCLEdBQUEsTUFBQUEsRUFBVSxNQUFNLFlBQ2YsWUFDQSxPQUFPLEtBQUssTUFBTXdCLEdBQWdCLE9BQU8sUUFBVU4sRUFBVUosRUFBVUYsRUFBVSxHQUFLLENBQUMsQ0FBQyxLQUUxRixDQU1PLFNBQVNnQixHQUFnQ2pDLEVBQTRCLENBQzNFLElBQUlrQyxFQUFRLEVBRVosTUFBTUMsRUFBVSxJQUFNLFdBQVdDLEVBQVMsR0FBRyxFQUN2Q0EsRUFBVSxJQUFNLENBQ1pwQyxFQUFBLEdBQUl0SSxDQUFRLEVBQ3JCQSxFQUFTLFlBQVksRUFDYndLLEVBQUEsQ0FDVCxFQUNNeEssRUFBVyxJQUFJLGlCQUFpQixJQUFNLENBQ3RDd0ssSUFBZUEsRUFBQSxzQkFBc0JDLENBQU8sRUFBQSxDQUNqRCxFQUVNLE9BQUF6SyxDQUNSLENBU0EsTUFBTTJLLE9BQWUsUUFDUkMsRUFBYSxDQUN6QjdMLEVBQ0E4TCxFQUNBdkMsSUFDSSxDQUNFLE1BQUF3QyxFQUFRL0wsRUFBRyx1QkFBdUI4TCxDQUFTLEVBQzNDRSxFQUFVSixHQUFTLElBQUk1TCxDQUFFLEdBQUssQ0FBQyxFQUVoQ2dNLEVBQVEsU0FDSEosR0FBQSxJQUFJNUwsRUFBSWdNLENBQU8sRUFDUVIsR0FBQSxDQUFDM0YsRUFBRzVFLElBQWEsQ0FDNUMsR0FBQWpCLEVBQUcsY0FBZWdNLEdBQUEsTUFBQUEsRUFBUyxRQUNuQnpDLFVBQUFBLEtBQVl5QyxFQUFTekMsRUFBUyxPQUV6Q3RJLEdBQUEsTUFBQUEsRUFBVSxhQUNWMkssR0FBUyxPQUFPNUwsQ0FBRSxDQUNuQixDQUNBLEVBQUUsUUFBUUEsRUFBSSxDQUNkLGdCQUFpQixDQUFDLE9BQU8sRUFDekIsV0FBWSxHQUNaLFVBQVcsR0FDWCxRQUFTLEVBQUEsQ0FDVCxHQUVGZ00sRUFBUSxLQUFLLElBQU16QyxFQUFTd0MsQ0FBNEIsQ0FBQyxDQUMxRCxFQU9hRSxFQUFZMUMsR0FBeUIsQ0FDakQsR0FBSSxDQUFDL0osRUFBWSxPQUNYLE1BQUEwTSxFQUFNLElBQU0sc0JBQXNCM0MsQ0FBUSxFQUM1QyxTQUFTLGFBQWUsV0FBZ0IyQyxFQUFBLEVBQ3ZDekwsRUFBRyxPQUFRLE9BQVF5TCxDQUFHLENBQzVCLEVBUWFDLEdBQWVuTSxHQUMzQkEsYUFBYyxhQUNkLGFBQWNBLEdBQ2QsRUFBRUEsYUFBYyxtQkM3T1hvTSxHQUFTLDJCQUNmLElBQUlDLEdBQStDLEdBNkQ1QyxTQUFTQyxHQUNmak0sRUFDQXFKLEVBQU8sR0FDTixDQUNELEdBQUtsSyxFQWNMLElBYkssT0FBTyxPQUNYLE9BQU8sS0FBTyxDQUFDLEVBQ2YsT0FBTyxLQUFLLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxFQUNyRCxPQUFPLEtBQUssS0FBSyxDQUFDLG9CQUFvQixDQUFDLEVBQ3ZDLE9BQU8sS0FBSyxLQUFLLENBQUMsZ0JBQWlCLFdBQVc0TSxFQUFNLGFBQWEsQ0FBQyxFQUNsRSxTQUFTLGNBQWMsMEJBQTBCLEdBQ2hELFNBQVMsS0FBSyxPQUNiLE9BQU8sT0FBTyxTQUFTLGNBQWMsUUFBUSxFQUFHLENBQy9DLE1BQU8sR0FDUCxJQUFLLDRCQUE0QkEsRUFBTSxZQUN2QyxDQUFBLENBQ0YsR0FFRS9MLElBQVcsT0FBUSxDQUN0QixLQUFNLENBQUUsU0FBQWtNLEVBQVUsUUFBQUMsRUFBVSxFQUFTLEVBQUE5QyxFQUMzQjJDLEdBQUFHLEVBQ1YsT0FBTyxLQUFLLEtBQUssQ0FBQyxZQUFhRCxDQUFRLENBQUMsQ0FBQSxDQUdyQyxHQUFBRixLQUFZLFFBQWdCLE9BQUEsUUFBUSxLQUFLLGVBQWVoTSxDQUFNLElBQUtxSixDQUFJLEVBQzNFLEdBQUksRUFBQTJDLEtBQVksSUFBUyxPQUFPLFNBQVMsV0FBYSxhQUV0RCxHQUFJaE0sSUFBVyxXQUFZLENBQ3BCLEtBQUEsQ0FBRSxJQUFBb00sRUFBSyxNQUFBQyxDQUFBLEVBQVVoRCxFQUN2QixPQUFPLEtBQUssS0FBSyxDQUFDLGVBQWdCK0MsR0FBTyxTQUFTLElBQUksQ0FBQyxFQUN2RCxPQUFPLEtBQUssS0FBSyxDQUFDLG1CQUFvQkMsR0FBUyxTQUFTLEtBQUssQ0FBQyxFQUM5RCxPQUFPLEtBQUssS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFBLFNBQ3hCck0sSUFBVyxRQUFTLENBQzlCLEtBQU0sQ0FBRSxTQUFBc00sRUFBVSxPQUFBdE0sRUFBUSxLQUFBSixFQUFNLE1BQUFDLEdBQVV3SixFQUNwQ3RJLEVBQVEsQ0FBQyxhQUFjdUwsRUFBVXRNLEVBQVFKLEVBQU1DLENBQUssRUFDbkQsT0FBQSxLQUFLLEtBQUtrQixFQUFNLE9BQVF3TCxHQUFNQSxJQUFNLE1BQVMsQ0FBQyxDQUFBLFNBQzNDdk0sSUFBVyxTQUFVLENBQ3pCLEtBQUEsQ0FDTCxNQUFBMkgsRUFDQSxTQUFBMkUsRUFBVyxHQUNYLFFBQUFFLEVBQVUsRUFBQSxFQUNQbkQsRUFDSixPQUFPLEtBQUssS0FBSyxDQUFDLGtCQUFtQjFCLEVBQU8yRSxFQUFVRSxDQUFPLENBQUMsQ0FBQSxNQUNwRHhNLElBQVcsVUFDZCxPQUFBLEtBQUssS0FBS3FKLENBQWtDLEVBRXJELENDOUdBLE1BQU1vRCxHQUFXLENBQ2hCQyxFQUNBQyxFQUNBQyxFQUFPLE9BQU8sb0JBQ1YsQ0FDRSxNQUFBQyxHQUFVRCxFQUFPLEdBQUssRUFDdEJFLEVBQVEsS0FBSyxJQUFJLEtBQUssSUFBSUosRUFBTSxLQUFLLE1BQU1HLENBQU0sRUFBR0YsRUFBTUMsRUFBTyxDQUFDLEVBQUcsQ0FBQyxFQUN0RUcsRUFBTSxLQUFLLElBQUksS0FBSyxJQUFJTCxFQUFNLEtBQUssS0FBS0csQ0FBTSxFQUFHRCxDQUFJLEVBQUdELENBQUcsRUFDM0RLLEVBQVEsTUFBTSxLQUFLLENBQUUsT0FBUUQsRUFBTSxFQUFJRCxDQUFTLEVBQUEsQ0FBQ3RILEVBQUcwQyxJQUFNQSxFQUFJNEUsQ0FBSyxFQUVyRSxPQUFBRixFQUFPLEdBQUtFLEVBQVEsS0FBUyxPQUFPLEVBQUcsRUFBRyxFQUFHLENBQUMsRUFDOUNGLEVBQU8sR0FBS0csRUFBTUosS0FBVyxPQUFPLEdBQUksRUFBRyxFQUFHQSxDQUFHLEVBQzlDSyxDQUNSLEVBRWFDLEdBQWEsQ0FBQyxDQUFFLFFBQUFDLEVBQVUsRUFBRyxNQUFBQyxFQUFRLEdBQUksS0FBQVAsRUFBTyxNQUFTLENBQ3JFLEtBQU1NLEVBQVUsRUFBSUEsRUFBVSxFQUFJLEVBQ2xDLEtBQU1BLEVBQVVDLEVBQVFELEVBQVUsRUFBSSxFQUN0QyxNQUFPVCxHQUFTUyxFQUFTQyxFQUFPUCxDQUFJLEVBQUUsSUFBSSxDQUFDUSxFQUFNcEwsS0FBVyxDQUMzRCxRQUFTb0wsSUFBU0YsR0FBWSxPQUM5QixJQUFLLE9BQU9FLENBQUksSUFBSXBMLENBQUssR0FDekIsS0FBQW9MLENBQUEsRUFDQyxDQUNILHlnRkN0QkMsT0FBTyxPQUFXLEtBQ2xCLE9BQU8sZUFDUCxTQUFTLHFCQUVSLElBQU0sQ0FDTixNQUFNaEwsRUFBTSxzQkFDTmlMLEVBQVEsSUFBSSxjQUNaL0ssRUFBTyxJQUFNLE9BQUEsU0FBQ2pELEVBQUEsT0FBTyxhQUFhLFFBQVErQyxDQUFHLElBQS9CLE1BQUEvQyxFQUFrQyxTQUFTLFdBRS9ELFNBQVMsbUJBQW1CLEtBQUtnTyxDQUFLLEVBQ3RDLE9BQU8sc0JBQXlCdEQsR0FBVSxPQUN6QyxHQUFJLENBQ0gsTUFBTXhILEVBQU93SCxHQUFTLENBQUN6SCxFQUFNLEdBQzdCakQsRUFBQWdPLEVBQU0sY0FBTixNQUFBaE8sRUFBQSxLQUFBZ08sRUFBb0IsV0FBV2pMLENBQUcsU0FBU0EsQ0FBRyxLQUFLRyxDQUFJLE1BQ3ZELE9BQU8sYUFBYSxRQUFRSCxFQUFLRyxDQUFJLENBQ3pDLE1BQWlCLENBQUUsQ0FDaEIsRUFHRCxPQUFPLHNCQUFzQkQsR0FBTSxDQUNyQyxHQUFLLEVDakJMLE1BQU1nTCxHQUFVQyxFQUFPLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUNqQ0MsR0FBYUQsRUFBTyxPQUFPLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFDdkNFLEdBQWEsdUNBQ2JDLEdBQWMsSUFBSUosRUFBTyxjQUFjQSxFQUFPLGlCQUU5Q0ssR0FBaUJ6RSxHQUF5QixDQUMxQyxTQUFTLG9CQUNULFNBQVMsb0JBQW9CQSxDQUFRLEVBREVBLEVBQUEsQ0FFN0MsRUFFYTBFLEdBQXFCN0QsR0FFakM0RCxHQUFjLElBQU0sT0FBQSxPQUFBdE8sRUFBQSxPQUFPLHdCQUFQLFlBQUFBLEVBQUEsWUFBK0IwSyxHQUFNLEVBRTFELFNBQVM4RCxHQUFrQixDQUFFLE9BQVFsTyxFQUFJLGlCQUFrQm1PLEdBQWUsQ0FDekUsR0FBSSxFQUFBQSxHQUFRLEVBQUVuTyxhQUFjLG9CQUFzQixDQUFDQSxFQUFHLFFBQVE4TixFQUFVLEdBRXhFLElBQUksaUJBQWlCOU4sQ0FBRSxFQUFFLFdBQWEsZ0JBQWlCaU8sR0FBa0IsRUFDekVELEdBQWMsSUFBTSxDQUNiLE1BQUFJLEVBQVUsU0FBUyxjQUFpQ0wsRUFBVyxFQUM1REssR0FBQSxNQUFBQSxFQUFBLGFBQWEsZ0JBQWlCLE9BQ3ZDQSxHQUFBLE1BQUFBLEVBQVMsV0FBVSxDQUNuQixFQUNGLENBRUEsU0FBU0MsSUFBZSxRQUNkM08sRUFBQSxTQUFBLGNBQWlDcU8sRUFBVyxJQUE1QyxNQUFBck8sRUFBK0MsT0FDekQsQ0FHQSxJQUFJNE8sR0FBUSxFQUNSQyxFQUNBQyxFQUFRLEVBQ1JDLEVBQ0FDLEdBQVUsRUFDVkMsR0FBVSxFQUNWQyxHQUFRLEdBQ1JDLEdBQVEsRUFDUkMsRUFBUSxFQUVaLFNBQVNDLEdBQWUsQ0FBQ0MsQ0FBTSxFQUFrQyxDQUNyRFAsRUFBQU8sRUFDRUMsR0FBQSxDQUNkLENBRUEsU0FBU0EsSUFBZSxPQUNuQixHQUFBLEVBQUNSLEdBQUEsTUFBQUEsRUFBVSxhQUFhLE9BQzVCLE1BQU1TLEVBQVMsT0FBTyxRQUNoQkMsRUFBVUQsRUFBU0osRUFDakJBLEVBQUFJLEVBR0pDLElBQVlaLElBQ2ZELE1BQVM1TyxFQUFBK08sRUFBUyxnQkFBVCxZQUFBL08sRUFBd0Isd0JBQXdCLE1BQU8sR0FBS29QLEVBQ3pEUCxFQUFBWSxFQUNaVCxHQUFVRCxFQUFTLGFBQ1RFLEdBQUFGLEVBQVMsc0JBQXNCLEVBQUUsSUFBTUssRUFDekNGLEdBQUFILEVBQVMsY0FBZ0IsT0FBTyxZQUN4Q0ksR0FBUSxPQUFPLGFBR1osRUFBQUwsSUFBVSxJQUFNSSxNQUNoQkosSUFBVSxLQUFPSSxJQUFVTCxHQUFhTyxHQUFTSCxLQUMzQ0YsRUFBQSxNQUFNLFlBQVksUUFBUyxRQUFRLEVBQ25DQSxFQUFBLE1BQU0sWUFBWSxRQUFTLEtBQUssRUFDakNELEVBQUEsSUFDRUEsSUFBVSxJQUFNLENBQUNELEdBQ2xCRSxFQUFBLE1BQU0sWUFBWSxRQUFTLFVBQVUsRUFDckNBLEVBQUEsTUFBTSxZQUFZLFFBQVMsR0FBRyxLQUFLLElBQUksRUFBR0ssRUFBUVIsRUFBSyxDQUFDLElBQUksRUFDN0RFLEVBQUEsR0FDRUEsSUFBVSxHQUFLLENBQUNELEdBQWFPLEVBQVFELElBQVNGLEdBQVVELElBQ3pERCxFQUFBLE1BQU0sWUFBWSxRQUFTLFFBQVEsRUFDNUNBLEVBQVMsTUFBTSxZQUFZLFFBQVMsR0FBR0ksR0FBUUgsRUFBTyxJQUFJLEVBQ2xERixFQUFBLEdBQ0VBLElBQVUsR0FBS0QsSUFDaEJFLEVBQUEsTUFBTSxZQUFZLFFBQVMsVUFBVSxFQUM5Q0EsRUFBUyxNQUFNLFlBQVksUUFBUyxHQUFHRSxHQUFVTCxFQUFLLElBQUksRUFDbERFLEVBQUEsR0FFVixDQUVBdkMsRUFBUyxJQUFNLENBQ0hKLEVBQUEsU0FBUyxnQkFBaUJnQyxHQUFZa0IsRUFBYyxFQUM1RHRPLEVBQUEsU0FBVSxRQUFTeU4sR0FBbUI3RSxDQUFXLEVBQ3BENUksRUFBRyxPQUFRLFNBQVU2SSxHQUFTK0UsR0FBYyxHQUFHLEVBQUdoRixDQUFXLEVBQzFENUksRUFBQSxPQUFRLFNBQVV3TyxHQUFjNUYsQ0FBVyxDQUMvQyxDQUFDLEVDdkZELE1BQU0rRixHQUFrQnhCLEVBQU8sWUFBWSxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBRXZELFNBQVNtQixHQUFlTSxFQUE0QyxDQUNuRSxVQUFXQyxLQUFjRCxFQUNiQyxFQUFBLGlCQUFpQixNQUFNLEVBQUUsUUFBUSxDQUFDQyxFQUFPbE4sRUFBTyxDQUFFLE9BQUFtTixLQUFhLENBQ3pFelAsRUFBS3dQLEVBQU8sZUFBZ0JsTixJQUFVbU4sRUFBUyxFQUFJLE9BQVMsSUFBSSxDQUFBLENBQ2hFLENBQ0gsQ0FFQXZELEVBQVMsSUFDUkosRUFBVyxTQUFTLGdCQUFpQnVELEdBQWlCTCxFQUFjLENBQ3JFLEVDSkEsTUFBTVUsR0FBYTdCLEVBQU8sT0FBTyxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQ3ZDOEIsR0FBVWxRLEVBQ1osU0FBUyx1QkFDVmlRLEVBQ0QsRUFDQyxDQUFDLEVBRUVFLEdBQWMsSUFBTSxDQUN6QixVQUFXQyxLQUFVRixHQUNoQkUsRUFBTyxhQUFlQSxFQUFPLFdBQWFBLEVBQU8sUUFDaERBLEVBQU8sUUFBUSw4Q0FBOEMsR0FDM0Q3UCxFQUFBNlAsRUFBUSxPQUFRLElBQUksRUFDekJBLEVBQU8sVUFBVSxHQUNQQSxFQUFPLFFBQVEsb0JBQW9CLElBQ3hDN1AsRUFBQTZQLEVBQVEsT0FBUSxFQUFFLEVBQ3ZCQSxFQUFPLE1BQU0sR0FHakIsRUFFTUMsR0FBYyxDQUFDLENBQUUsUUFBU25ILEVBQUcsUUFBU0MsRUFBRyxPQUFRM0ksS0FBcUIsT0FDM0UsR0FBSUEsYUFBYyxtQkFBcUJELEVBQUtDLEVBQUksZUFBZSxJQUFNLE1BQU8sQ0FDM0UsS0FBTSxDQUFFLElBQUE2SSxFQUFLLE1BQUFDLEVBQU8sT0FBQUMsRUFBUSxLQUFBQyxDQUFLLEVBQUloSixFQUFHLHNCQUFzQixFQUM3QzZJLEdBQU9GLEdBQUtBLEdBQUtJLEdBQVVDLEdBQVFOLEdBQUtBLEdBQUtJLEdBRS9DOUksRUFBRyxNQUFNLENBQUEsTUFFeEJBLGFBQWMsU0FDZEEsRUFBRyxRQUFRLDhCQUE4QixLQUVyQ04sRUFBQU0sR0FBQSxZQUFBQSxFQUFBLFFBQVEsWUFBUixNQUFBTixFQUFtQixRQUV6QixFQUVBdU0sRUFBUyxJQUFNLENBQ1h4TCxFQUFBLFNBQVUsUUFBU29QLEdBQThCeEcsQ0FBVyxFQUMvRG1DLEdBQWdDbUUsRUFBVyxFQUFFLFFBQzVDLFNBQVMsZ0JBQ1QsQ0FDQyxnQkFBaUIsQ0FBQyxNQUFNLEVBQ3hCLFdBQVksR0FDWixVQUFXLEdBQ1gsUUFBUyxFQUFBLENBRVgsQ0FDRCxDQUFDLEVDcERELFNBQVNHLEdBQWExTyxFQUEyQyxPQUM1RCxHQUFBQSxFQUFNLGdCQUFrQndNLEVBQU8sY0FBZSxPQUM1QyxNQUFBbUMsR0FBU3JRLEVBQUEwQixFQUFNLFNBQU4sWUFBQTFCLEVBQTBCLGtCQUVyQ3FRLGFBQWlCLHFCQUNmaFEsRUFBQWdRLEVBQU8sV0FBWSxJQUFJLEVBQzVCQSxFQUFNLE1BQU0sRUFFZCxDQUVBOUQsRUFBUyxJQUFNeEwsRUFBRyxTQUFVLGVBQWdCcVAsR0FBY3pHLENBQVcsQ0FBQyxFQ2J0RSxJQUFJM0YsR0FBWSxPQUFPLGVBQ25CQyxHQUFzQixPQUFPLHNCQUM3QkMsR0FBZSxPQUFPLFVBQVUsZUFDaENDLEdBQWUsT0FBTyxVQUFVLHFCQUNoQ0MsR0FBa0IsQ0FBQ0MsRUFBS3RCLEVBQUt2QyxJQUFVdUMsS0FBT3NCLEVBQU1MLEdBQVVLLEVBQUt0QixFQUFLLENBQUUsV0FBWSxHQUFNLGFBQWMsR0FBTSxTQUFVLEdBQU0sTUFBQXZDLENBQUssQ0FBRSxFQUFJNkQsRUFBSXRCLENBQUcsRUFBSXZDLEVBQ3RKOEQsR0FBaUIsQ0FBQ0MsRUFBR0MsSUFBTSxDQUM3QixRQUFTQyxLQUFRRCxJQUFNQSxFQUFJLENBQUEsR0FDckJOLEdBQWEsS0FBS00sRUFBR0MsQ0FBSSxHQUMzQkwsR0FBZ0JHLEVBQUdFLEVBQU1ELEVBQUVDLENBQUksQ0FBQyxFQUNwQyxHQUFJUixHQUNGLFFBQVNRLEtBQVFSLEdBQW9CTyxDQUFDLEVBQ2hDTCxHQUFhLEtBQUtLLEVBQUdDLENBQUksR0FDM0JMLEdBQWdCRyxFQUFHRSxFQUFNRCxFQUFFQyxDQUFJLENBQUMsRUFFdEMsT0FBT0YsQ0FDVCxFQUdJekUsRUFBYSxPQUFPLE9BQVcsS0FBZSxPQUFPLE9BQU8sU0FBYSxLQUFlLE9BQU8sT0FBTyxVQUFjLElBQ3BIQyxHQUFhRCxHQUFjLFdBQVcsS0FBSyxVQUFVLFNBQVMsRUFDOUQ2RSxHQUFTN0UsR0FBYyxtQkFBbUIsS0FBSyxVQUFVLFNBQVMsRUFDbEVFLEdBQ01zUSxHQUNWLFFBQVEsT0FBT3RRLEdBQUssVUFBVSxnQkFBa0IsS0FBTyxPQUFTQSxHQUFHLFdBQWEsVUFBVSxRQUFRLEVBQ2xHLElBQUlFLEdBQWtCLEdBQUdILEdBQWEsT0FBUyxNQUFNLGNBQ2pESSxHQUFnQiwyQ0FDaEIwRSxHQUFnQiwrRkFDaEJ6RSxHQUFlLE9BQU8sWUFBZ0IsSUFBYyxLQUFNLENBQzlELEVBQUksWUFDSixTQUFTQyxFQUFLQyxFQUFJQyxFQUFNQyxFQUFPLENBQzdCLE9BQUlBLElBQVUsT0FBZUYsRUFBRyxhQUFhQyxDQUFJLEdBQzdDQyxJQUFVLEtBQU1GLEVBQUcsZ0JBQWdCQyxDQUFJLEVBQ2xDRCxFQUFHLGFBQWFDLENBQUksSUFBTUMsR0FBT0YsRUFBRyxhQUFhQyxFQUFNQyxDQUFLLEVBQzlELEtBQ1QsQ0FDQSxJQUFJRSxHQUFTLENBQUNDLEVBQVFDLEVBQVNDLElBQVMsQ0FDdEMsVUFBV0MsS0FBUUQsRUFBSyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQ2xDQSxFQUFLLENBQUMsRUFBSUMsRUFDVixRQUFRLFVBQVUsR0FBR0gsQ0FBTSxlQUFlLEVBQUUsTUFBTUMsRUFBU0MsQ0FBSSxDQUVuRSxFQUNJRSxHQUFLLENBQUNILEtBQVlDLElBQVNILEdBQU8sTUFBT0UsRUFBU0MsQ0FBSSxFQUN0REcsR0FBTSxDQUFDSixLQUFZQyxJQUFTSCxHQUFPLFNBQVVFLEVBQVNDLENBQUksRUFDMURJLEdBQWMsQ0FBQ0wsRUFBU00sSUFBUU4sRUFBUSxhQUFhLENBQUUsS0FBTSxNQUFRLENBQUEsRUFBRSxPQUN6RU8sR0FBYyxNQUFNLEVBRXBCQSxHQUFjLFFBQVNELENBQUcsQ0FDNUIsRUFDSUUsR0FBNEIsSUFBSSxRQUNoQ0MsR0FBbUIsQ0FBQ1QsRUFBU1UsSUFBWSxDQUMzQyxHQUFJQSxJQUFZLE9BQVEsT0FBT0YsR0FBVSxJQUFJUixDQUFPLEVBQ3BELEdBQUksQ0FDRlEsR0FBVSxJQUFJUixDQUFPLEVBQUUsV0FBWSxFQUNuQ1EsR0FBVSxPQUFPUixDQUFPLENBQ3pCLE1BQWEsQ0FDaEIsQ0FDRSxHQUFJVSxFQUFTLENBQ1gsTUFBTUMsRUFBVyxJQUFJLGlCQUNsQkMsR0FBV1osRUFBUSxZQUFZLENBQUUsS0FBTSxXQUFZLE9BQUFZLENBQVEsQ0FBQSxDQUM3RCxFQUNERCxFQUFTLFFBQVFYLEVBQVNVLENBQU8sRUFDakNGLEdBQVUsSUFBSVIsRUFBU1csQ0FBUSxDQUNuQyxDQUNBLEVBQ0lLLEdBQVdDLEdBQVMsQ0FDdEIsSUFBSXBCLEVBQ0osTUFBTXFCLElBQVNyQixFQUFNb0IsRUFBSyxjQUFnQixLQUFPLE9BQVNwQixFQUFJLEtBQUtvQixDQUFJLElBQU1BLEVBQUssY0FDbEYsT0FBT0MsYUFBZ0IsVUFBWUEsYUFBZ0IsV0FBYUEsRUFBTyxRQUN6RSxFQUNJQyxHQUFLLEVBQ0xDLEdBQVMxQixHQUNOQSxHQUNBQSxFQUFHLEtBQUlBLEVBQUcsR0FBSyxJQUFJQSxFQUFHLFNBQVMsWUFBVyxDQUFFLElBQUksRUFBRXlCLElBQUksU0FBUyxFQUFFLENBQUMsSUFDaEV6QixFQUFHLElBRk0sR0FJZGEsR0FBZ0IsQ0FBQ2MsRUFBU0MsRUFBTUMsSUFBVSxDQUM1QyxNQUFNN0IsRUFBSyxTQUFTLGNBQWMyQixDQUFPLEVBQ3pDLE9BQUlDLElBQU01QixFQUFHLFlBQWM0QixHQUNwQjVCLENBQ1QsRUFDSThCLEdBQWlCLENBQ25CLE9BQVEsQ0FBQzdCLEVBQU04QixJQUFhLENBQUN2QyxHQUFjLE9BQU8sZUFBZSxJQUFJUyxDQUFJLEdBQUssT0FBTyxlQUFlLE9BQU9BLEVBQU04QixDQUFRLENBQzNILEVBQ0kyQyxFQUNBQyxHQUFjLEVBQ2RDLEdBQVNoRCxHQUFTLENBQ2Y4QyxJQUNIQSxFQUFPN0QsR0FBYyxLQUFLLEVBQzFCNkQsRUFBSyxNQUFNLFFBQVUsOERBQ3JCM0UsRUFBSzJFLEVBQU0sWUFBYSxXQUFXLEdBRWhDQSxFQUFLLGFBQWEsU0FBUyxLQUFLLE9BQU9BLENBQUksRUFDNUM5QyxJQUFNOEMsRUFBSyxZQUFjLEdBQUc5QyxDQUFJLEdBQUcrQyxLQUFnQixFQUFJLElBQVMsRUFBRSxHQUN4RSxFQUNJRSxHQUFXLENBQUNDLEVBQU9DLEVBQU12RSxFQUFPLEtBQU8sQ0FDekMsSUFBSUwsRUFBSzZFLEVBQ1QsTUFBTTVELEVBQVEsQ0FBRSxRQUFTLEdBQU0sU0FBVSxHQUFNLEtBQUEyRCxFQUFNLFVBQVd2RSxDQUFNLEVBQ2hFeUUsRUFBUSxpQkFBaUIsVUFDL0JILEVBQU0sY0FBYyxJQUFJLFdBQVcsY0FBZTFELENBQUssQ0FBQyxHQUN2RDRELEdBQU03RSxFQUFNLE9BQU8seUJBQXlCOEUsRUFBTyxPQUFPLElBQU0sS0FBTyxPQUFTOUUsRUFBSSxNQUFRLE1BQWdCNkUsRUFBRyxLQUFLRixFQUFPQyxDQUFJLEVBQ2hJRCxFQUFNLGNBQWMsSUFBSSxXQUFXLFFBQVMxRCxDQUFLLENBQUMsRUFDbEQwRCxFQUFNLGNBQWMsSUFBSSxNQUFNLFNBQVUsQ0FBRSxRQUFTLEVBQUksQ0FBRSxDQUFDLENBQzVELEVBR0ltTCxHQUFXLFdBQ1hDLEVBQVcsV0FDWEMsR0FBcUIsY0FBY3JRLEVBQWEsQ0FFbEQsV0FBVyxvQkFBcUIsQ0FDOUIsTUFBTyxDQUFDbVEsR0FBVUMsQ0FBUSxDQUM5QixDQUNFLG1CQUFvQixDQUNiN0wsS0FBUSxLQUFLLFNBQVcsSUFDeEIsS0FBSyxhQUFhLE1BQU0sR0FBR3RFLEVBQUssS0FBTSxPQUFRLFFBQVEsRUFDM0QsS0FBSyx5QkFBMEIsQ0FDbkMsQ0FDRSwwQkFBMkIsQ0FDekJBLEVBQUssS0FBTSxnQkFBaUIsR0FBRyxLQUFLLFFBQVEsRUFBRSxFQUM5Q0EsRUFBSyxLQUFNLGdCQUFpQixHQUFHLEtBQUssUUFBUSxFQUFFLENBQ2xELENBRUUsSUFBSSxpQkFBa0IsQ0FDcEIsT0FBTyxLQUFLbVEsQ0FBUSxDQUN4QixDQUNFLElBQUksZ0JBQWdCaFEsRUFBTyxDQUN6QixLQUFLZ1EsQ0FBUSxFQUFJaFEsQ0FDckIsQ0FDRSxJQUFJLFVBQVcsQ0FDYixPQUFPSCxFQUFLLEtBQU1rUSxFQUFRLElBQU0sSUFDcEMsQ0FDRSxJQUFJLFNBQVMvUCxFQUFPLENBQ2xCSCxFQUFLLEtBQU1rUSxHQUFVL1AsRUFBUSxHQUFLLElBQUksQ0FDMUMsQ0FFRSxJQUFJLE1BQU8sQ0FDVCxPQUFPLEtBQUssUUFBUSxNQUFNLENBQzlCLENBRUUsSUFBSSxPQUFRLENBQ1YsSUFBSUMsRUFDSixNQUFPLENBQ0wsS0FBS0EsRUFBTSxLQUFLLGdCQUFrQixLQUFPLE9BQVNBLEVBQUksVUFBWSxDQUFDLElBQUksQ0FDN0UsRUFBTSxRQUFRLElBQUksQ0FDbEIsQ0FFRSxJQUFJLE9BQVEsQ0FDVixJQUFJQSxFQUNKLE9BQVFBLEVBQU1KLEVBQUssS0FBTSxPQUFPLElBQU0sS0FBT0ksRUFBTSxLQUFLLElBQzVELENBQ0UsSUFBSSxNQUFNRCxFQUFPLENBQ2ZILEVBQUssS0FBTSxRQUFTRyxDQUFLLENBQzdCLENBQ0UsSUFBSSxVQUFXLENBQ2IsT0FBT0gsRUFBSyxLQUFNbVEsQ0FBUSxJQUFNLElBQ3BDLENBQ0UsSUFBSSxTQUFTaFEsRUFBTyxDQUNsQkgsRUFBSyxLQUFNbVEsRUFBVWhRLEVBQVEsR0FBSyxJQUFJLENBQzFDLENBRUUsSUFBSSxNQUFPLENBQ1QsSUFBSUMsRUFDSixRQUFTQSxFQUFNLEtBQUssY0FBZ0IsS0FBTyxPQUFTQSxFQUFJLEtBQUksSUFBTyxFQUN2RSxDQUNFLElBQUksS0FBS3lCLEVBQU0sQ0FDYixLQUFLLFlBQWNBLENBQ3ZCLENBRUUsSUFBSSxPQUFRLENBQ1YsSUFBSXpCLEVBQ0osT0FBUUEsRUFBTUosRUFBSyxLQUFNLE9BQU8sSUFBTSxLQUFPSSxFQUFNLEtBQUssSUFDNUQsQ0FDRSxJQUFJLE1BQU1ELEVBQU8sQ0FDZkgsRUFBSyxLQUFNLFFBQVNHLENBQUssQ0FDN0IsQ0FDQSxFQUNBNEIsR0FBZSxPQUFPLFdBQVlxTyxFQUFrQixFQUdwRCxJQUFJQyxHQUNBQyxHQUFpQixFQUNqQm5MLEdBQVcsR0FDWEksR0FBWWpCLElBQVU1RSxHQUN0QjBGLEdBQVMsaURBQ1RtTCxHQUFlLDhCQUNmN0ssR0FBUSxDQUNWLFNBQVUsU0FDVixPQUFRLFNBQ1YsRUFDSThLLEdBQXVCLGNBQWN6USxFQUFhLENBQ3BELGFBQWMsQ0FDWixNQUFPLEVBQ1AsS0FBSyxPQUFTa0UsR0FBZSxDQUFBLEVBQUl5QixFQUFLLEVBQ3RDLEtBQUssT0FBUyxHQUNkOUUsR0FDRSxLQUNBLEdBQUdkLEVBQWE7QUFBQTtBQUFBLGlDQUVXMEUsRUFBYTtBQUFBO0FBQUE7QUFBQSw0REFJekMsQ0FDTCxDQUdFLFdBQVcsb0JBQXFCLENBQzlCLE1BQU8sQ0FBQyxLQUFNLEdBQUcsT0FBTyxLQUFLa0IsRUFBSyxFQUFFLElBQUtoRCxHQUFRLFdBQVdBLENBQUcsRUFBRSxDQUFDLENBQ3RFLENBQ0UsbUJBQW9CLENBQ2xCLEtBQUssT0FBUyxHQUNkLEtBQUssTUFBUW5CLEdBQVEsSUFBSSxFQUN6QnZCLEVBQUssS0FBTSxPQUFRLFNBQVMsRUFDNUJBLEVBQUssS0FBTSxXQUFZLElBQUksRUFDM0JVLEdBQUcsS0FBSyxNQUFPLFVBQVcsSUFBSSxFQUM5QkEsR0FBRyxLQUFLLE1BQU8sUUFBUyxLQUFNLEVBQUksRUFDbENNLEdBQWlCLEtBQU0sQ0FDckIsZ0JBQWlCLENBQUMsV0FBWSxTQUFVLFFBQVMsT0FBTyxFQUN4RCxXQUFZLEdBQ1osVUFBVyxHQUNYLFFBQVMsRUFDZixDQUFLLEVBQ0QsV0FBVyxJQUFNLEtBQUssMEJBQTBCLENBQ3BELENBQ0Usc0JBQXVCLENBQ3JCTCxHQUFJLEtBQUssT0FBUyxLQUFNLFFBQVMsS0FBTSxFQUFJLEVBQzNDQSxHQUFJLEtBQUssT0FBUyxLQUFNLFVBQVcsSUFBSSxFQUN2Q0ssR0FBaUIsS0FBTSxFQUFLLEVBQzVCeVAsR0FBZ0IsSUFBSSxFQUNwQixLQUFLLE1BQVEsTUFDakIsQ0FDRSx5QkFBeUJyTSxFQUFNc00sRUFBTzdOLEVBQU0sQ0FDMUMsTUFBTWhCLEVBQU91QyxHQUFRLEtBQU8sT0FBU0EsRUFBSyxNQUFNLFVBQVUsRUFBRSxDQUFDLEVBQ3ZEdkQsRUFBTSxlQUFlLEtBQUssRUFBRSxLQUNsQyxHQUFJNkUsR0FBTTdELENBQUksRUFBRyxLQUFLLE9BQU9BLENBQUksRUFBSWdCLEdBQVE2QyxHQUFNN0QsQ0FBSSxVQUM5QyxLQUFLLE1BQ1osVUFBV2tELEtBQVMsS0FBSyxNQUFNLGlCQUFpQmxFLENBQUcsRUFDakQ4UCxHQUFXLEtBQU01TCxDQUFLLENBQzlCLENBQ0UsWUFBWTFELEVBQU8sQ0FDakIsS0FBTSxDQUFFLE9BQUEwRSxFQUFRLEtBQUF0RixDQUFJLEVBQUtZLEVBQ3JCQSxFQUFNLG1CQUNOWixJQUFTLFNBQVN3RixHQUFRLEtBQU01RSxDQUFLLEdBQ3JDWixJQUFTLFNBQVdBLElBQVMsWUFBV3lGLEdBQVEsS0FBTTdFLENBQUssR0FDM0RaLElBQVMsUUFBVUEsSUFBUyxhQUFZdUYsR0FBTyxLQUFNM0UsQ0FBSyxFQUMxRFosSUFBUyxXQUFXMkYsR0FBVSxLQUFNL0UsQ0FBSyxFQUN6Q1osSUFBUyxjQUFhMEUsR0FBVyxLQUFLLFNBQVNZLENBQU0sR0FDckR0RixJQUFTLFlBQVcwRSxHQUFXLEtBQy9CMUUsSUFBUyxZQUFjQSxJQUFTLFdBQ2xDLGFBQWE2UCxFQUFjLEVBQzNCQSxHQUFpQixXQUFXbkssR0FBUyxFQUFHLEtBQU05RSxDQUFLLEdBRXpELENBQ0UsSUFBSSxTQUFVLENBQ1osT0FBTyxLQUFLLHFCQUFxQixVQUFVLENBQy9DLENBQ0EsRUFDSXVQLEVBQWMsQ0FBQ25OLEVBQU1vTixJQUFTLENBQ2hDLElBQUl6USxFQUNBcUQsRUFBSyxTQUFXb04sSUFDcEJwTixFQUFLLE9BQVMsQ0FBQ29OLEVBQ1hwTixFQUFLLFFBQVFrTixHQUFXbE4sRUFBTUEsRUFBSyxPQUFRb04sQ0FBSSxFQUMvQ3BOLEVBQUssV0FBYXJELEVBQU1xRCxFQUFLLFNBQVcsTUFBZ0JyRCxFQUFJLGVBQzlESixFQUFLeUQsRUFBSyxPQUFRLGdCQUFpQjlCLEdBQU04QixDQUFJLENBQUMsRUFDOUN6RCxFQUFLeUQsRUFBTSxVQUFXLFFBQVEsRUFDOUJBLEVBQUssY0FBY29OLENBQUksR0FFckJBLEdBQU0xSyxHQUFRMUMsQ0FBSSxFQUN4QixFQUNJZ04sR0FBbUJoTixHQUFTLENBQ3pCQSxFQUFLLFNBQ1Y5QyxHQUFJOEMsRUFBSyxRQUFVQSxFQUFNOE0sR0FBYzlNLENBQUksRUFDM0M5QyxHQUFJOEMsRUFBSyxPQUFTQSxFQUFNMkIsR0FBUTNCLENBQUksRUFDcENtTixFQUFZbk4sRUFBTSxFQUFLLEVBQ3ZCQSxFQUFLLE9BQVMsT0FDaEIsRUFDSWtOLEdBQWEsQ0FBQ2xOLEVBQU1zQixFQUFPOEwsRUFBTyxLQUFVLENBQzlDblEsR0FBR3FFLEVBQU93TCxHQUFjOU0sRUFBTSxFQUFJLEVBQ2xDekQsRUFBSytFLEVBQU8sb0JBQXFCLE1BQU0sRUFDdkMvRSxFQUFLK0UsRUFBTyxnQkFBaUJwRCxHQUFNOEIsQ0FBSSxDQUFDLEVBQ3hDekQsRUFBSytFLEVBQU8sZ0JBQWlCLEdBQUdRLEdBQVlzTCxFQUFPLE1BQU0sRUFBRSxFQUMzRDdRLEVBQUsrRSxFQUFPLGVBQWdCLEtBQUssRUFDakMvRSxFQUFLK0UsRUFBTyxPQUFRLFVBQVUsQ0FDaEMsRUFDSW1CLEdBQVUsQ0FBQ3pDLEVBQU1wQyxJQUFVLENBQzdCLElBQUlqQixFQUNKLE1BQU0wUSxFQUFVelAsRUFBTSxrQkFBa0IsaUJBQ3BDeVAsR0FBV3pQLEVBQU0sV0FBV0EsRUFBTSx5QkFBMEIsRUFDNURvQyxFQUFLLFNBQVdwQyxFQUFNLFFBQVV5UCxHQUFXelAsRUFBTSxPQUFPLE9BQVNvQyxJQUMvREEsRUFBSyxRQUFRZ04sR0FBZ0JoTixDQUFJLEVBQ3JDQSxFQUFLLE9BQVNwQyxFQUFNLE9BQ3BCb0MsRUFBSyxPQUFPLGNBQWMsSUFBSSxXQUFXLE9BQU8sQ0FBQyxFQUNqREEsRUFBSyxPQUFPLGNBQWMsSUFBSSxXQUFXLFVBQVcsQ0FBRSxRQUFTLEVBQUksQ0FBRSxDQUFDLEVBQ3RFekQsRUFBS3lELEVBQU01RCxHQUFpQjhCLElBQU92QixFQUFNcUQsRUFBSyxPQUFPLFNBQVcsS0FBTyxPQUFTckQsRUFBSSxDQUFDLENBQUMsQ0FBQyxFQUN2Rk0sR0FBRytDLEVBQUssT0FBU0EsRUFBTTJCLEdBQVEzQixDQUFJLEVBQ25DbU4sRUFBWW5OLEVBQU0sRUFBSSxFQUN0Qm9CLEdBQU8sRUFFWCxFQUNJbUIsR0FBUyxDQUFDdkMsRUFBTXBDLElBQVUsQ0FDeEIsQ0FBQzNCLElBQWMsQ0FBQ3lGLElBQVkxQixFQUFLLFFBQVEsV0FBV2lGLEdBQVcsRUFBR2pGLENBQUksRUFDdEVwQyxFQUFNLFNBQVdvQyxFQUFLLFFBQVVwQyxFQUFNLFdBQ3hDQSxFQUFNLHlCQUEwQixDQUNwQyxFQUNJcUgsR0FBYWpGLEdBQVMsQ0FDeEIsSUFBSXJELEVBQ0osTUFBTTJRLElBQWtCM1EsRUFBTXFELEVBQUssUUFBVSxLQUFPLE9BQVNyRCxFQUFJLGdCQUFrQixLQUM3RTJFLEVBQVF0QixFQUFLLE9BQ2ZzQixHQUFTQSxJQUFVZ00sR0FBaUIsQ0FBQ3ROLEVBQUssU0FBU3NOLENBQWEsSUFDbEVoTSxFQUFNLGNBQWMsSUFBSSxXQUFXLE9BQVEsQ0FBRSxjQUFBZ00sQ0FBYSxDQUFFLENBQUMsRUFDN0RoTSxFQUFNLGNBQ0osSUFBSSxXQUFXLFdBQVksQ0FBRSxRQUFTLEdBQU0sY0FBQWdNLENBQWUsQ0FBQSxDQUM1RCxFQUNETixHQUFnQmhOLENBQUksRUFFeEIsRUFDSXdDLEdBQVUsQ0FBQ3hDLEVBQU0sQ0FBRSxPQUFBc0MsS0FBYSxDQUNsQyxJQUFJM0YsRUFDSixHQUFJLENBQUNxRCxFQUFLLFFBQVVBLEVBQUssU0FBV3NDLEVBQVEsT0FBTzZLLEVBQVluTixFQUFNLEVBQUksRUFDekUsVUFBV29FLEtBQU9wRSxFQUFLLFFBQ3JCLEdBQUlvRSxFQUFJLFNBQVM5QixDQUFNLEVBQ3JCLE9BQUkvRixFQUFLeUQsRUFBTSxzQkFBc0IsSUFBTSxVQUN4Q3JELEVBQU1xRCxFQUFLLFNBQVcsTUFBZ0JyRCxFQUFJLE1BQU8sRUFDbER3USxFQUFZbk4sRUFBTSxFQUFLLEdBRWxCcUIsR0FBU3JCLEVBQUssT0FBUW9FLEVBQUksS0FBSyxFQUV0Q25JLElBQVlnSixHQUFVakYsQ0FBSSxDQUNoQyxFQUNJMkMsR0FBWSxDQUFDM0MsRUFBTSxJQUFNLENBQzNCLElBQUlyRCxFQUNKLEdBQUksRUFBRSxRQUFVLEVBQUUsU0FBVyxFQUFFLFNBQVcsRUFBRSxVQUFZLEVBQUUsTUFBUSxNQUNoRSxPQUNGd1EsRUFBWW5OLEVBQU0sRUFBRSxNQUFRLFFBQVEsRUFDcEMsS0FBTSxDQUFFLElBQUFmLEVBQUssT0FBQXFELENBQU0sRUFBSyxFQUNsQjlFLEVBQVUsQ0FBQyxHQUFHd0MsRUFBSyxPQUFPLEVBQUUsT0FDL0J4RCxHQUFPRCxFQUFLQyxFQUFJLGFBQWEsSUFBTSxRQUFVQSxFQUFHLFlBQ2xELEVBQ0syQyxFQUFPM0IsRUFBUSxRQUFROEUsQ0FBTSxFQUNuQyxJQUFJbEQsRUFBTyxHQUdYLEdBRklILElBQVEsY0FBYUcsR0FBUUQsRUFBTyxHQUFLM0IsRUFBUSxRQUNqRHlCLElBQVEsWUFBV0csR0FBUSxDQUFDRCxFQUFPQSxFQUFPM0IsRUFBUSxRQUFVLEdBQzVELENBQUMyQixLQUNDRixJQUFRLFFBQVVBLElBQVEsWUFBVUcsRUFBTyxJQUMzQ0gsSUFBUSxPQUFTQSxJQUFRLGNBQVlHLEVBQU81QixFQUFRLE9BQVMsR0FDN0R5QixJQUFRLFNBQ1YsT0FBQXpCLEVBQVEyQixDQUFJLEVBQUUsTUFBTyxFQUNkLEVBQUUsZUFBZ0IsRUFHN0IsR0FBSTNCLEVBQVE0QixDQUFJLEVBQUcsVUFBV21PLEtBQVUvUCxFQUFTK1AsRUFBTyxTQUFXLEdBQy9EL1AsRUFBUTRCLENBQUksR0FBRyxFQUFFLGVBQWdCLEdBQ3BDekMsRUFBTWEsRUFBUTRCLENBQUksR0FBS1ksRUFBSyxTQUFXLE1BQWdCckQsRUFBSSxNQUFPLENBQ3JFLEVBQ0krRixHQUFVLENBQUMxQyxFQUFNLElBQU0sQ0FDekIsS0FBTSxDQUFFLE9BQUE4QyxFQUFRLE1BQUEwSyxFQUFPLE9BQUFDLEVBQVEsUUFBQWpRLENBQVMsRUFBR3dDLEVBQ3JDdEQsR0FBUytRLEdBQVUsS0FBTyxPQUFTQSxFQUFPLE1BQU0sWUFBVyxFQUFHLEtBQUksSUFBTyxHQUN6RUMsRUFBUyxDQUFDMU4sRUFBSyxhQUFhLGVBQWUsRUFDM0MyTixFQUFTLENBQUUsRUFDWEMsRUFBVSxDQUFFLEVBQ2xCLFVBQVd4SixLQUFPNUcsR0FDSDRHLEVBQUksVUFBWUEsRUFBSSxRQUFVc0osR0FBVSxDQUFDdEosRUFBSSxNQUFNLGNBQWMsU0FBUzFILENBQUssRUFDcEZpUixFQUFTQyxHQUFTLEtBQUt4SixDQUFHLEVBRXBDLFVBQVdBLEtBQU91SixFQUFRcFIsRUFBSzZILEVBQUssY0FBZSxNQUFNLEVBQ3pELFVBQVdBLEtBQU93SixFQUFTclIsRUFBSzZILEVBQUssY0FBZSxPQUFPLEVBQzNELE1BQU00RixFQUFRNEQsRUFBUSxPQUN0QixhQUFhaEIsRUFBVSxHQUNsQixHQUFLLEtBQU8sT0FBUyxFQUFFLFFBQVUsU0FBV2xRLElBQVVzRCxFQUFLLFNBQzlENE0sR0FBYSxXQUFXLElBQU0sQ0FDNUIsTUFBTXhPLEVBQU8sR0FBRyxDQUFDNEwsR0FBU2hLLEVBQUssVUFBVSxLQUFJLEdBQU0sR0FBRzhDLEVBQU9rSCxJQUFVLEVBQUksV0FBYSxRQUFRLENBQUMsR0FBRyxRQUFRLEtBQU0sR0FBR0EsQ0FBSyxFQUFFLENBQUMsR0FDekgsQ0FBQ2hLLEVBQUssU0FBV3dOLEdBQVMsS0FBTyxPQUFTQSxFQUFNLGlCQUFtQkMsR0FBUXJNLEdBQU1oRCxDQUFJLEVBQ3pGNEIsRUFBSyxPQUFTdEQsQ0FDZixFQUFFLEdBQUcsR0FDSm1FLElBQ0YrTSxFQUFRLFFBQVEsQ0FBQ3hKLEVBQUtULElBQVFwSCxFQUFLNkgsRUFBSyxRQUFTLEdBQUdULEVBQU0sQ0FBQyxJQUFJcUcsQ0FBSyxFQUFFLENBQUMsQ0FDM0UsRUFDSWhPLEdBQ0YsT0FBTyxlQUFlLGlCQUFpQixVQUFXLE9BQVEsQ0FDeEQsYUFBYyxHQUNkLFdBQVksR0FDWixLQUFNLENBQ0osT0FBTzhCLEdBQVEsSUFBSSxFQUFFLGVBQWV2QixFQUFLLEtBQU0sTUFBTSxHQUFLLEVBQUUsQ0FDbEUsQ0FDQSxDQUFHLEVBQ0grQixHQUFlLE9BQU8sYUFBY3lPLEVBQW9CLEVDblh4RCxNQUFNYyxHQUFZekQsRUFBTyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFDckMwRCxHQUFrQjFELEVBQU8sV0FBVyxNQUFNLEdBQUcsRUFDN0MyRCxHQUFpQkQsR0FBZ0IsQ0FBQyxFQUVsQ0UsRUFBVSxDQUFDQyxFQUE0QmhQLElBQUEsT0FDNUMsUUFBQS9DLEVBQUErUixFQUFNLGlCQUFpQixlQUFlaFAsQ0FBRyxFQUFFLElBQTNDLFlBQUEvQyxFQUE4QyxNQUFNLEVBQUcsTUFBTyxJQUUvRCxTQUFTcVAsR0FBZTJDLEVBQW1DQyxFQUFvQixDQUM5RSxVQUFXQyxLQUFTRixFQUNuQixHQUFJRSxFQUFNLFlBQWEsQ0FDdEIsTUFBTUMsRUFBNkIsQ0FBQyxFQUM5QkMsRUFBbUIsQ0FBQyxFQUNwQkMsRUFBb0IsQ0FBQyxFQUMzQixJQUFJQyxFQUF3QyxLQUN4Q2xOLEVBQWlDLEtBQ2pDbU4sRUFBUSxHQUVaLFVBQVdqUyxLQUFNNFIsRUFBTSxxQkFBcUIsR0FBRyxFQUMxQzVSLGFBQWMsaUJBQXlCNlIsRUFBQSxLQUFLN1IsQ0FBRSxFQUN6Q0EsYUFBYzBGLEdBQWlDc00sRUFBQWhTLEVBQy9DbU0sR0FBWW5NLENBQUUsRUFBVzhFLEVBQUE5RSxFQUN6QkEsRUFBRyxhQUFhLGtCQUFrQixFQUFHOFIsRUFBTSxLQUFLOVIsQ0FBRSxFQUNsREEsRUFBRyxVQUFVLFNBQVN1UixFQUFjLEdBQzVDVSxFQUFRbFMsRUFBS0MsRUFBSSxZQUFZLElBQU0sV0FBYSxDQUFDQSxFQUFHLGFBQ3BEK1IsRUFBTyxLQUFLL1IsQ0FBRSxFQUNkOFIsRUFBTSxRQUFROVIsQ0FBRSxHQUNOQSxhQUFjLHVCQUNsQjhSLEVBQUEsS0FBTUksR0FBU0EsRUFBSyxTQUFTbFMsQ0FBRSxDQUFDLEdBQUs4UixFQUFNLEtBQUs5UixDQUFFLEdBRzFELEdBQUk4RSxFQUFPLENBQ1YsVUFBVzZCLEtBQVNrTCxFQUFjbEwsRUFBQSxRQUFVakYsR0FBTW9ELENBQUssRUFDdkQsR0FBSTZNLEdBQVk1UixFQUFLNlIsRUFBTyxpQkFBaUIsSUFBTSxPQUFRLENBQ2xESyxFQUFBbk4sRUFBTSxRQUFRLFFBQVEsRUFDOUIsVUFBVzlFLEtBQU0rUixFQUFRaFMsRUFBS0MsRUFBSSxTQUFVaVMsRUFBUSxHQUFLLElBQUksQ0FBQSxDQUU5REUsR0FBZUgsQ0FBUSxFQUN2QkksR0FBY3ROLENBQUssRUFDbkJ1TixHQUFtQnZOLENBQUssRUFDbkIvRSxFQUFBK0UsRUFBTyxtQkFBb0JnTixFQUFNLElBQUlwUSxFQUFLLEVBQUUsS0FBSyxHQUFHLEdBQUssSUFBSSxFQUNsRTNCLEVBQUsrRSxFQUFPLGVBQWdCLEdBQUcsQ0FBQ21OLENBQUssRUFBRSxDQUFBLENBQ3hDLENBRUgsQ0FHQSxTQUFTSSxHQUFtQkMsRUFBbUIsQ0FDMUNBLGFBQW9CLHNCQUNkQSxFQUFBLE1BQU0sWUFBWSx5QkFBMEIsTUFBTSxFQUMzREEsRUFBUyxNQUFNLFlBQ2QseUJBQ0EsR0FBR0EsRUFBUyxZQUFZLElBQ3pCLEVBRUYsQ0FHQSxTQUFTSCxHQUFlblMsRUFBaUMsT0FDeEQsR0FBSSxFQUFDQSxHQUFBLE1BQUFBLEVBQUksUUFBUU4sRUFBQU0sRUFBRyxPQUFILE1BQUFOLEVBQVMsYUFBYSxXQUFZLE9BQzdDLE1BQUErUixFQUFRLE9BQU8saUJBQWlCelIsQ0FBRSxFQUN4Q0QsRUFBS0MsRUFBSSxnQkFBaUJ3UixFQUFRQyxFQUFPLGdCQUFnQixDQUFDLEVBQzFEMVIsRUFBS0MsRUFBSSxnQkFBaUJ3UixFQUFRQyxFQUFPLGdCQUFnQixDQUFDLEVBQzFEMVIsRUFBS0MsRUFBSSxnQkFBaUJ3UixFQUFRQyxFQUFPLGdCQUFnQixDQUFDLEVBQzFEMVIsRUFBS0MsRUFBSSxrQkFBbUJ3UixFQUFRQyxFQUFPLGtCQUFrQixDQUFDLEVBQzlEMVIsRUFBS0MsRUFBSSxhQUFjd1IsRUFBUUMsRUFBTyxhQUFhLENBQUMsRUFDcEQxUixFQUFLQyxFQUFJLGlCQUFrQndSLEVBQVFDLEVBQU8saUJBQWlCLENBQUMsRUFDNUQxUixFQUFLQyxFQUFJLGtCQUFtQndSLEVBQVFDLEVBQU8sa0JBQWtCLENBQUMsRUFDOUQxUixFQUFLQyxFQUFHLEtBQU0saUJBQWtCd1IsRUFBUUMsRUFBTyxpQkFBaUIsQ0FBQyxFQUNqRTFSLEVBQUtDLEVBQUcsS0FBTSxtQkFBb0J3UixFQUFRQyxFQUFPLG1CQUFtQixDQUFDLEVBQ2hFMVIsRUFBQUMsRUFBRyxLQUFNLFVBQVcsUUFBUSxDQUNsQyxDQUVBLFNBQVNvUyxHQUFjdE4sRUFBeUIsQ0FDL0MsTUFBTTlFLEVBQUs4RSxHQUFBLFlBQUFBLEVBQU8sbUJBQ1p5TixFQUFRdlMsR0FBTUQsRUFBS0MsRUFBSSxZQUFZLEVBRXpDLEdBQUlBLEdBQU11UyxFQUFPLENBQ2hCLE1BQU1DLEVBQVksT0FBT0QsQ0FBSyxFQUFJek4sRUFBTSxNQUFNLE9BQ3hDMk4sRUFBY0QsRUFBWSxFQUMxQkUsRUFBYzNTLEVBQUtDLEVBQUksV0FBVyxJQUFNLFNBQ3hDeVIsRUFBUSxPQUFPLGlCQUFpQnpSLEdBQU04RSxDQUFLLEVBQzNDNk4sRUFBT25CLEVBQVFDLEVBQU8sWUFBWSxFQUNsQ21CLEVBQVFwQixFQUFRQyxFQUFPLGFBQWEsRUFFMUMsR0FBSWlCLElBQWdCRCxFQUFhLENBQ2hDMVMsRUFBS0MsRUFBSSxZQUFheVMsRUFBYyxTQUFXLEtBQUssRUFDcEQsVUFBVzdSLEtBQU8wUSxHQUFpQnRSLEVBQUcsVUFBVSxPQUFPWSxFQUFLNlIsQ0FBVyxDQUFBLENBRXJFelMsRUFBQSxhQUFleVMsRUFBY0UsRUFBT0MsR0FBTyxRQUM3QyxLQUNBLEdBQUcsS0FBSyxJQUFJSixDQUFTLENBQUMsRUFDdkIsQ0FBQSxDQUVGLENBRUEsU0FBU0ssR0FBYSxDQUFFLE9BQVE3UyxFQUFJLFNBQUE4UyxHQUEyQyxDQUM5RSxHQUFJOVMsYUFBY3VRLEdBQXNCLENBQ2pDLE1BQUEvTyxFQUFPeEIsRUFBRyxZQUFZLEVBQ3RCa0ssRUFBUzFJLEdBQUEsWUFBQUEsRUFBTSxjQUNwQixtQkFBbUJ4QixFQUFHLEVBQUUsTUFHckI4UyxJQUFhLFNBQXlCN0ksRUFBQWpLLEVBQUksRUFBSyxFQUMxQ2tLLElBQ1JsSyxFQUFHLE1BQU0sTUFBUSxHQUFHa0ssRUFBTyxXQUFXLEtBQ3ZCRCxFQUFBakssRUFBSWtLLEVBQVEsU0FBVSxFQUFJLEVBQzFDLENBRUYsQ0FFQSxTQUFTNkksR0FBWSxDQUFFLE9BQUFqTixHQUFpQixDQUNuQ3FHLEdBQVlyRyxDQUFNLElBQ3JCc00sR0FBY3RNLENBQU0sRUFDcEJ1TSxHQUFtQnZNLENBQU0sRUFFM0IsQ0FFQSxTQUFTa04sR0FBaUI1UixFQUFjLFNBQ3ZDLE1BQU13USxHQUFTNU0sR0FBQXRGLEVBQUEwQixFQUFNLFNBQU4sWUFBQTFCLEVBQTBCLFVBQTFCLFlBQUFzRixFQUFBLEtBQUF0RixFQUFvQyxJQUFJMlIsRUFBUyxJQUU1RGpRLEVBQU0sT0FBUyxXQUFhd1EsS0FBYSxlQUFlLEVBQzVEN0MsR0FBZSxTQUFTLHVCQUF1QnNDLEVBQVMsRUFBRyxFQUFJLENBQ2hFLENBR0EsU0FBUzRCLEdBQW1CLENBQUUsT0FBUWpULEdBQWEsQ0FDNUMsTUFBQXlHLEVBQU96RyxhQUFjMEYsSUFBd0IxRixFQUFHLEtBQ2xEeUcsR0FBUSxFQUFDQSxHQUFBLE1BQUFBLEVBQU0sU0FDbEIsV0FBVyxJQUFNd0QsRUFBZXhELEVBQU16RyxFQUFJLEVBQUcsRUFBSSxFQUFHLEVBQUUsQ0FDeEQsQ0FFQWlNLEVBQVMsSUFBTSxDQUNISixFQUFBLFNBQVMsZ0JBQWlCd0YsR0FBV3RDLEVBQWMsRUFDM0R0TyxFQUFBLFNBQVUsZUFBZ0J3UyxHQUFvQjVKLENBQVcsRUFDekQ1SSxFQUFBLFNBQVUsUUFBU3NTLEdBQWExSixDQUFXLEVBQzNDNUksRUFBQSxTQUFVLGlCQUFrQnVTLEdBQWtCLEVBQUksRUFDbER2UyxFQUFBLFNBQVUsU0FBVW9TLEdBQWN4SixDQUFXLENBQ2pELENBQUMsRUNwSkQsTUFBTTZKLEdBQWV0RixFQUFPLFNBQVMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUMzQzJELEdBQWlCM0QsRUFBTyxXQUFXLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFDL0N1RixHQUFZLG1CQUNaQyxHQUFlLGVBR3JCLFNBQVNyRSxHQUFlc0UsRUFBc0MsQ0FDN0Qsc0JBQXNCLElBQU0sT0FDM0IsVUFBV0MsS0FBWUQsRUFDdEIsR0FBSUMsRUFBUyxZQUFhLENBQ3pCLE1BQU1DLEVBQTZCLENBQUMsRUFDcEMsSUFBSUMsRUFBOEIsS0FFbEMsVUFBV3hULEtBQU1zVCxFQUFTLHFCQUFxQixHQUFHLEVBQzdDdFQsRUFBRyxVQUFVLFNBQVN1UixFQUFjLEVBQUdpQyxFQUFlOVIsR0FBTTFCLENBQUUsRUFDekRtTSxHQUFZbk0sQ0FBRSxHQUFHdVQsRUFBTyxLQUFLdlQsQ0FBRSxFQUd6QyxVQUFXOEUsS0FBU3lPLEVBQVEsQ0FDckIsTUFBQXJCLEdBQU9uUyxFQUFBQSxFQUFLK0UsRUFBT3FPLEVBQVMsSUFBckJwVCxZQUFBQSxFQUF3QixRQUFReVQsR0FBZ0IsSUFBSyxJQUU3RHpULEVBQUErRSxFQUFPcU8sR0FBVyxHQUFHSyxHQUFnQixFQUFFLElBQUl0QixHQUFRLEVBQUUsR0FBRyxLQUFBLENBQU0sRUFDbkVuUyxFQUFLK0UsRUFBT3NPLEdBQWMsR0FBRyxDQUFDLENBQUNJLENBQVksRUFBRSxDQUFBLENBQzlDLENBQ0QsQ0FDRCxDQUNGLENBRUF2SCxFQUFTLElBQ1JKLEVBQVcsU0FBUyxnQkFBaUJxSCxHQUFjbkUsRUFBYyxDQUNsRSxFQzlCQSxNQUFNMEUsR0FBVzdGLEVBQU8sS0FBSyxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBRXpDLFNBQVNtQixHQUFlLENBQUMyRSxDQUFJLEVBQWtDLENBQzlELEdBQUlBLEdBQUEsTUFBQUEsRUFBTSxjQUFlQSxHQUFBLFlBQUFBLEVBQU0sNkJBQTZCLGNBQWUsQ0FDMUUsVUFBV0MsS0FBUSxTQUFTLEtBQUssaUJBQWlCLG1CQUFtQixFQUNwRUEsRUFBSyxhQUFhLE1BQU8sVUFBVSxFQUVwQyxNQUFNQyxFQUFNRixFQUFLLGtCQUNYRyxFQUFRSCxHQUFBLFlBQUFBLEVBQU0sYUFBYSxZQUMzQmpDLEVBQVEsT0FBTyxpQkFBaUJtQyxDQUFHLEVBQ25DaFMsRUFBTzZQLEVBQU0saUJBQWlCLE9BQU8sRUFDckNxQyxFQUFPckMsRUFBTSxpQkFBaUIsbUJBQW1CLEVBQ2pEa0MsRUFBT0MsRUFBSSxVQUNmLFFBQVEsT0FBUSxHQUFHLEVBQ25CLFFBQVEsc0NBQXVDLEVBQUUsRUFDakQsUUFBUSxPQUFRLHFDQUFxQ2hTLENBQUksR0FBRyxFQUU5RCxTQUFTLEtBQUssWUFDYixPQUFPLE9BQU8sU0FBUyxjQUFjLE1BQU0sRUFBRyxDQUM3QyxLQUFNLHNCQUFzQixtQkFBbUIsMkVBQTJFaVMsRUFBUSxPQUFTQyxDQUFJLGdEQUFnRGxTLENBQUkseUVBQXlFaVMsRUFBUSxHQUFNLENBQUMscUVBQXFFRixDQUFJLFlBQVksQ0FBQyxHQUNqWCxJQUFLLE1BQ0wsQ0FBQSxDQUNGLENBQUEsQ0FFRixDQUVBMUgsRUFBUyxJQUFNSixFQUFXLFNBQVMsZ0JBQWlCNEgsR0FBVTFFLEVBQWMsQ0FBQyxFQzFCN0UsTUFBTWdGLEdBQWNuRyxFQUFPLFFBQVEsTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUMvQyxJQUFJb0csR0FBZ0IsRUFFcEIsU0FBU25CLEdBQWEsQ0FBRSxPQUFRN1MsRUFBSSxTQUFBOFMsR0FBMkMsT0FDOUUsR0FBSTlTLGFBQWMsYUFBZUEsRUFBRyxVQUFVLFNBQVMrVCxFQUFXLEVBQUcsQ0FDOUQsTUFBQTdKLEdBQVV4SyxFQUFBTSxFQUFHLFlBQUEsSUFBSCxZQUFBTixFQUFpQyxjQUNoRCxtQkFBbUJNLEVBQUcsRUFBRSxNQUdyQjhTLElBQWEsVUFDQ2tCLElBQUEsRUFDakIvSixFQUFlakssRUFBSSxFQUFLLEdBQ2RrSyxJQUNPOEosSUFBQSxFQUNqQi9KLEVBQWVqSyxFQUFJa0ssRUFBUW5LLEVBQUtDLEVBQUksZUFBZSxHQUFLLFFBQVEsRUFDakUsQ0FFRixDQUtBLFNBQVNpVSxHQUFnQixDQUFFLE9BQUFuTyxHQUFpQixPQUMzQyxNQUFNb08sRUFDTEYsTUFBa0J0VSxFQUFBb0csR0FBQSxZQUFBQSxFQUFvQixVQUFwQixZQUFBcEcsRUFBQSxLQUFBb0csRUFBOEIsNEJBRWpELEdBQUlvTyxFQUFPLENBQ1YsTUFBTTdULEVBQVNOLEVBQUttVSxFQUFPLHFCQUFxQixHQUFLLFNBQy9DdEQsRUFBT3ZRLElBQVcsU0FBV0EsSUFBVyxPQUFTLEdBQVEsUUFFekQ4VCxHQURTLFNBQVMsZUFBZXBVLEVBQUttVSxFQUFPLGVBQWUsR0FBSyxFQUFFLEdBQzlDQSxHQUFPLFFBQXFCLElBQUlILEVBQVcsRUFBRSxFQUdwRUksR0FBQSxNQUFBQSxFQUFTLGNBQWVBLEdBQUEsTUFBQUEsRUFBUyxnQkFDcENBLEVBQVEsY0FBY3ZELENBQUksQ0FBQSxDQUU3QixDQUVBM0UsRUFBUyxJQUFNLENBQ1h4TCxFQUFBLFNBQVUsU0FBVW9TLEdBQWN4SixDQUFXLEVBQzdDNUksRUFBQSxTQUFVLFFBQVN3VCxFQUFlLENBQ3RDLENBQUMsRUN6Q0QsTUFBTUcsR0FBWXhHLEVBQU8sTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBRTNDLFNBQVNtQixHQUFlc0YsRUFBNEMsQ0FDbkUsVUFBV0MsS0FBU0QsRUFBUSxDQUMzQixNQUFNRSxFQUFnQixDQUFDLEVBRWxCeFUsRUFBQXVVLEVBQU8sT0FBUSxPQUFPLEVBQ3ZCQSxFQUFNLFNBQVN2VSxFQUFLdVUsRUFBTSxRQUFTLE9BQVEsU0FBUyxFQUM3QyxVQUFBRSxJQUFTLENBQUNGLEVBQU0sTUFBT0EsRUFBTSxNQUFPLEdBQUdBLEVBQU0sT0FBTyxFQUM5RCxHQUFJRSxFQUFPLENBQ0x6VSxFQUFBeVUsRUFBTyxPQUFRLFVBQVUsRUFDeEIsTUFBQUMsRUFBVUQsRUFBTSxXQUFhLFFBRXhCLFVBQUFFLEtBQU9GLEVBQU0sS0FBTSxDQUN4QnpVLEVBQUEyVSxFQUFLLE9BQVEsS0FBSyxFQUNaLFVBQUFDLEtBQVFELEVBQUksTUFDbEJELElBQWNFLEVBQU0sVUFBV0osRUFBSUksRUFBSyxTQUFTLEdBQUssUUFBUSxFQUN6REosRUFBQSxLQUFLSSxFQUFLLFVBQVUsTUFBTSxFQUMvQkEsRUFBSyxXQUFhLEtBQVc1VSxFQUFBNFUsRUFBTSxPQUFRLE1BQU0sR0FFcEQ1VSxFQUFLNFUsRUFBTSxPQUFRRixFQUFVLFlBQWMsY0FBYyxFQUN6RDFVLEVBQUs0VSxFQUFNLFFBQVNGLEVBQVUsTUFBUSxLQUFLLEVBRTdDLENBQ0QsQ0FDRCxDQUVILENBRUF4SSxFQUFTLElBQU1KLEVBQVcsU0FBUyxnQkFBaUJ1SSxHQUFXckYsRUFBYyxDQUFDLEVDN0I5RSxNQUFNNkYsR0FBa0IsSUFBSWhILEVBQU8sWUFBWSxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FHNUQsU0FBU2lILEdBQWN6VCxFQUF1QyxPQUM3RCxLQUFNLENBQUUsSUFBQXFCLEVBQUssT0FBUXpDLENBQU8sRUFBQW9CLEVBQ3RCb1QsRUFBUXhVLGFBQWMsa0JBQW9CQSxFQUFHLFFBQVE0VSxFQUFlLEVBRTFFLEdBQUtKLElBQ0QvUixJQUFRLFNBQVN6QyxFQUFHLE1BQU0sRUFDMUJ5QyxHQUFBLE1BQUFBLEVBQUssV0FBVyxVQUFVLENBQzdCckIsRUFBTSxlQUFlLEVBQ2YsTUFBQW1TLEVBQVNpQixFQUFNLHFCQUFxQixPQUFPLEVBQzNDblMsRUFBUSxDQUFDLEdBQUdrUixDQUFNLEVBQUUsUUFBUXZULENBQUUsRUFDOUI4VSxFQUFPclMsRUFBSSxNQUFNLG1CQUFtQixFQUFJLEVBQUksSUFDbEQvQyxFQUFBNlQsR0FBUUEsRUFBTyxPQUFTbFIsRUFBUXlTLEdBQVF2QixFQUFPLE1BQU0sSUFBckQsTUFBQTdULEVBQXdELE9BQU0sQ0FFaEUsQ0FFQXVNLEVBQVMsSUFBTXhMLEVBQUcsU0FBVSxVQUFXb1UsRUFBYSxDQUFDLEVDWHJELE1BQU1FLEdBQWMsbUJBQ2RDLEdBQU0sU0FDTkMsR0FBYSxrQkFDYkMsR0FBd0IsMEJBQ3hCQyxHQUFpQixJQUNqQkMsRUFBVTVWLEVBQ2IsT0FBTyxPQUFPLFNBQVMsY0FBYyxLQUFLLEVBQUcsQ0FDN0MsVUFBV29PLEVBQU8sU0FDbEIsR0FBSSxlQUNKLFFBQVMsUUFDVixDQUFDLEVBQ0EsS0FFSCxJQUFJeUgsRUFBeUIsS0FDekJDLEdBQVksT0FBTyxrQkFDbkJDLEdBQW1ELEVBRXZELFNBQVNDLEdBQVcsQ0FBRSxPQUFBMVAsRUFBUSxLQUFBdEYsRUFBTSxJQUFBaUMsR0FBaUMsQ0FDaEUsR0FBQWpDLElBQVMsV0FBYWlDLElBQVF1UyxHQUFLLE9BQ3ZDLE1BQU1TLEVBQU9ILEdBQVlILEdBQWlCLEtBQUssSUFBSSxFQUNuRCxhQUFhSSxFQUFRLEVBQ1ZBLEdBQUEsV0FDVkcsR0FDQSxLQUFLLElBQUlELEVBQU0sQ0FBQyxFQUNoQmhULElBQVF1UyxHQUFNLEtBQU9sUCxDQUN0QixDQUNELENBR0EsU0FBUzRQLEdBQW9CNVAsRUFBd0IsV0FJaEQsR0FISndQLEdBQVksS0FBSyxJQUFJLEVBR2pCLENBQUNGLEdBQVd0UCxJQUFXc1AsRUFBUyxPQUMvQkEsR0FBQSxNQUFBQSxFQUFTLGFBQXNCLFNBQUEsS0FBSyxPQUFPQSxDQUFPLEVBQ3ZELElBQUlsTCxJQUFTeEssRUFBQW9HLEdBQUEsWUFBQUEsRUFBUSxVQUFSLFlBQUFwRyxFQUFBLEtBQUFvRyxFQUEyQixvQkFBcUIsS0FHN0QsR0FBSW9FLElBQVdtTCxFQUFRLE9BRXZCLE1BQU1NLEVBQVd6TCxHQUFVbkssRUFBS21LLEVBQVEsY0FBYyxHQUFNLEdBQ3RERyxFQUNKSCxHQUFVbkssRUFBS21LLEVBQVEsdUJBQXVCLEtBQy9DbEYsRUFBQSxPQUNFLGlCQUFpQmtGLEdBQVUsU0FBUyxJQUFJLEVBQ3hDLGlCQUFpQmdMLEVBQXFCLElBRnhDLFlBQUFsUSxFQUdHLFNBQ0gsT0FHQSxDQUFDMlEsR0FDREEsSUFBWSxTQUNaQSxJQUFZLFFBQ1p0TCxJQUFhLFVBRVNILEVBQUEsTUFDbkJBLE1BQWdCLFlBQWN5TCxHQUVsQyxNQUFNQyxFQUFXUCxHQUFVdFYsRUFBS3NWLEVBQVFKLEVBQVUsS0FBTUcsR0FBQSxZQUFBQSxFQUFTLElBQzNEUyxJQUNKQyxFQUFBNUwsYUFBa0IsWUFDaEJBLEVBQU8sVUFDUEEsR0FBQSxZQUFBQSxFQUFRLGNBRlYsWUFBQTRMLEVBR0UsVUFDSDVMLEdBQUEsWUFBQUEsRUFBUSxhQUFhK0ssT0FDckIvSyxHQUFBLFlBQUFBLEVBQVEsYUFBYSxlQUVkbUwsR0FBQSxNQUFBQSxFQUFBLGdCQUFnQk8sRUFBV1gsR0FBYUYsSUFDaEQ5SyxFQUFlbUwsRUFBUyxFQUFLLEVBRXBCQyxFQUFBbkwsRUFDTG1MLEdBQWF0VixFQUFBc1YsRUFBUVEsRUFBV2QsR0FBY0UsR0FBWUcsR0FBQSxZQUFBQSxFQUFTLEVBQUUsRUFDakVBLEVBQUEsY0FBYyxDQUFDLENBQUNsTCxDQUFNLEVBQ2ZELEVBQUFtTCxFQUFTbEwsR0FBVSxHQUFPRyxDQUFRLENBQ2xELENBRUE0QixFQUFTLElBQU0sQ0FDWHhMLEVBQUEsU0FBVSxnQ0FBaUMrVSxHQUFZbk0sQ0FBVyxFQUNsRTVJLEVBQUEsT0FBUSxVQUFXK1UsR0FBWW5NLENBQVcsRUFDMUM1SSxFQUFBLE9BQVEsT0FBUStVLEdBQVluTSxDQUFXLENBQzNDLENBQUMsRUN6RkQsSUFBSTdKLEdBQWEsT0FBTyxPQUFXLEtBQWUsT0FBTyxPQUFPLFNBQWEsS0FBZSxPQUFPLE9BQU8sVUFBYyxJQUNwSEUsR0FDTXFXLElBQ1YsUUFBUSxPQUFPclcsR0FBSyxVQUFVLGdCQUFrQixLQUFPLE9BQVNBLEdBQUcsV0FBYSxVQUFVLFFBQVEsRUFDbEcsSUFBSUcsR0FBZ0IsMkNBQ2hCQyxHQUFlLE9BQU8sWUFBZ0IsSUFBYyxLQUFNLENBQzlELEVBQUksWUFDSixTQUFTQyxFQUFLQyxFQUFJQyxFQUFNQyxFQUFPLENBQzdCLElBQUlDLEVBQ0osT0FBSUQsSUFBVSxRQUFnQkMsRUFBTUgsRUFBRyxhQUFhQyxDQUFJLElBQU0sS0FBT0UsRUFBTSxNQUN2RUQsSUFBVSxLQUFNRixFQUFHLGdCQUFnQkMsQ0FBSSxFQUNsQ0QsRUFBRyxhQUFhQyxDQUFJLElBQU1DLEdBQU9GLEVBQUcsYUFBYUMsRUFBTUMsQ0FBSyxFQUM5RCxLQUNULENBQ0EsSUFBSUUsR0FBUyxDQUFDQyxFQUFRQyxFQUFTQyxJQUFTLENBQ3RDLFVBQVdDLEtBQVFELEVBQUssQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUNsQ0EsRUFBSyxDQUFDLEVBQUlDLEVBQ1YsUUFBUSxVQUFVLEdBQUdILENBQU0sZUFBZSxFQUFFLE1BQU1DLEVBQVNDLENBQUksQ0FFbkUsRUFDSUUsR0FBSyxDQUFDSCxLQUFZQyxJQUFTSCxHQUFPLE1BQU9FLEVBQVNDLENBQUksRUFDdERHLEdBQU0sQ0FBQ0osS0FBWUMsSUFBU0gsR0FBTyxTQUFVRSxFQUFTQyxDQUFJLEVBQzFEWSxHQUFZQyxHQUFVLENBQ3hCLE1BQU1DLEVBQVUsUUFBU0QsSUFBVUEsRUFBTSxNQUFRLEtBQU9BLEVBQU0sTUFBUSxTQUN0RSxPQUFJQyxHQUFTRCxFQUFNLGVBQWdCLEVBQy9CQyxHQUFXRCxFQUFNLGtCQUFrQixhQUFhQSxFQUFNLE9BQU8sTUFBTyxFQUNqRUMsQ0FDVCxFQUNJQyxHQUFXQyxHQUFTLENBQ3RCLElBQUlwQixFQUNKLE1BQU1xQixJQUFTckIsRUFBTW9CLEVBQUssY0FBZ0IsS0FBTyxPQUFTcEIsRUFBSSxLQUFLb0IsQ0FBSSxJQUFNQSxFQUFLLGNBQ2xGLE9BQU9DLGFBQWdCLFVBQVlBLGFBQWdCLFdBQWFBLEVBQU8sUUFDekUsRUFDSVgsR0FBZ0IsQ0FBQ2MsRUFBU0MsRUFBTUMsSUFBVSxDQUM1QyxNQUFNN0IsRUFBSyxTQUFTLGNBQWMyQixDQUFPLEVBRXpDLEdBRElDLElBQU01QixFQUFHLFlBQWM0QixHQUN2QkMsRUFBTyxTQUFXLENBQUNZLEVBQUtnQyxDQUFHLElBQUssT0FBTyxRQUFRNUMsQ0FBSyxFQUFHOUIsRUFBS0MsRUFBSXlDLEVBQUtnQyxDQUFHLEVBQzVFLE9BQU96RSxDQUNULEVBQ0k4QixHQUFpQixDQUNuQixPQUFRLENBQUM3QixFQUFNOEIsSUFBYSxDQUFDdkMsSUFBYyxPQUFPLGVBQWUsSUFBSVMsQ0FBSSxHQUFLLE9BQU8sZUFBZSxPQUFPQSxFQUFNOEIsQ0FBUSxDQUMzSCxFQUdJaVUsR0FBc0IsY0FBY2xXLEVBQWEsQ0FDbkQsYUFBYyxDQUNaLE1BQU8sRUFFUCxLQUFLLFNBQVcsS0FDaEIsS0FBSyxhQUFhLENBQUUsS0FBTSxNQUFNLENBQUUsRUFBRSxPQUNsQ2UsR0FBYyxPQUFRLEtBQU0sQ0FBRSxLQUFNLFNBQVMsQ0FBRSxFQUMvQ0EsR0FBYyxPQUFRLEtBQU0sQ0FBRSxLQUFNLGlCQUFpQixDQUFFLEVBQ3ZEQSxHQUNFLFFBQ0EsR0FBR2hCLEVBQWE7QUFBQTtBQUFBO0FBQUE7QUFBQSx5RUFLeEIsQ0FDSyxDQUNMLENBRUUsV0FBVyxvQkFBcUIsQ0FDOUIsTUFBTyxDQUFDLE1BQU0sQ0FDbEIsQ0FDRSxtQkFBb0IsQ0FDbEIsSUFBSU0sRUFDSixLQUFLLFVBQVlBLEVBQU0sS0FBSyxhQUFlLEtBQU8sT0FBU0EsRUFBSSxTQUFTLENBQUMsRUFDekVNLEdBQUcsS0FBSyxTQUFVLGNBQWUsSUFBSSxFQUNyQ0EsR0FBRyxLQUFNLGdCQUFpQixJQUFJLEVBQzlCLEtBQUsseUJBQTBCLENBQ25DLENBQ0Usc0JBQXVCLENBQ2pCLEtBQUssVUFBVUMsR0FBSSxLQUFLLFNBQVUsY0FBZSxJQUFJLEVBQ3pEQSxHQUFJLEtBQU0sZ0JBQWlCLElBQUksRUFDL0IsS0FBSyxTQUFXLElBQ3BCLENBQ0UseUJBQXlCeUQsRUFBTXhCLEVBQU1DLEVBQU0sQ0FDekMsTUFBTXFULEVBQU8sa0JBQW1CLEtBQU8sY0FBZ0IsR0FDakRyRixFQUFPLEtBQUssS0FDbEIsVUFBVzVRLEtBQU0sS0FBSyxTQUNoQkEsRUFBRyxXQUFhLGFBQWFELEVBQUtDLEVBQUksZ0JBQWlCLEdBQUc0USxDQUFJLEVBQUUsRUFLdEUsR0FKSSxLQUFLLFdBQ1A3USxFQUFLLEtBQUssU0FBVSxjQUFlLEdBQUcsQ0FBQzZRLENBQUksRUFBRSxFQUM3QyxLQUFLLFNBQVMsT0FBU0EsRUFBTyxHQUFRcUYsR0FFcENyRixHQUFRLEtBQUssS0FBTSxDQUNyQixNQUFNc0YsRUFBZTVVLEdBQVEsSUFBSSxFQUFFLGlCQUNqQyxHQUFHLEtBQUssUUFBUSxVQUFVLEtBQUssSUFBSSxJQUNwQyxFQUNELFVBQVc2VSxLQUFZRCxFQUNqQkMsSUFBYSxPQUFNQSxFQUFTLEtBQU8sR0FDL0MsQ0FDUWhTLElBQVMsUUFBVXhCLElBQVMsT0FBVUMsSUFBUyxPQUNqRCxLQUFLLGNBQWMsSUFBSSxNQUFNLFFBQVEsQ0FBQyxDQUM1QyxDQUNFLFlBQVl4QixFQUFPLENBQ2pCLE1BQU1nVixFQUFVLEtBQUssY0FBYyxvQkFBb0IsRUFDakRDLEVBQVlELEdBQVcsS0FBTyxPQUFTQSxFQUFRLFNBQVNoVixFQUFNLE1BQU0sRUFDdEVBLEVBQU0sbUJBQ05BLEVBQU0sT0FBUyxnQkFBZSxLQUFLLEtBQU8sSUFDMUNpVixHQUFhalYsRUFBTSxPQUFTLFdBQVdELEdBQVNDLENBQUssRUFDckRpVixHQUFhalYsRUFBTSxPQUFTLFVBQVMsS0FBSyxLQUFPLENBQUMsS0FBSyxNQUMvRCxDQUNFLElBQUksTUFBTyxDQUNULE9BQU8sS0FBSyxhQUFhLE1BQU0sQ0FDbkMsQ0FDRSxJQUFJLEtBQUtsQixFQUFPLENBQ2RILEVBQUssS0FBTSxPQUFRRyxFQUFRLEdBQUssSUFBSSxDQUN4QyxDQUNFLElBQUksTUFBTyxDQUNULE9BQU9ILEVBQUssS0FBTSxNQUFNLEdBQUssRUFDakMsQ0FDRSxJQUFJLEtBQUtHLEVBQU8sQ0FDZEgsRUFBSyxLQUFNLE9BQVFHLENBQUssQ0FDNUIsQ0FDQSxFQUNJb1csR0FBc0IsY0FBY3hXLEVBQWEsQ0FDbkQsbUJBQW9CLENBQ2xCQyxFQUFLLEtBQU0sT0FBUSxRQUFRLEVBQzNCLEtBQUssS0FBTyxVQUNaLEtBQUssU0FBVyxDQUNwQixDQUNBLEVBQ0ErQixHQUFlLE9BQU8sWUFBYWtVLEVBQW1CLEVBQ3REbFUsR0FBZSxPQUFPLFlBQWF3VSxFQUFtQixFQzlIdEQsSUFBSTlXLEdBQWEsT0FBTyxPQUFXLEtBQWUsT0FBTyxPQUFPLFNBQWEsS0FBZSxPQUFPLE9BQU8sVUFBYyxJQUNwSDRFLEdBQWE1RSxJQUFjLFdBQVcsS0FBSyxVQUFVLFNBQVMsRUFDOUQ2RSxHQUFTN0UsSUFBYyxtQkFBbUIsS0FBSyxVQUFVLFNBQVMsRUFDbEVFLEdBQ0pGLElBQ0EsUUFBUSxPQUFPRSxHQUFLLFVBQVUsZ0JBQWtCLEtBQU8sT0FBU0EsR0FBRyxXQUFhLFVBQVUsUUFBUSxFQUNsRyxJQUFJSSxHQUFlLE9BQU8sWUFBZ0IsSUFBYyxLQUFNLENBQzlELEVBQUksWUFDSixTQUFTQyxFQUFLQyxFQUFJQyxFQUFNQyxFQUFPLENBQzdCLElBQUlDLEVBQ0osT0FBSUQsSUFBVSxRQUFnQkMsRUFBTUgsRUFBRyxhQUFhQyxDQUFJLElBQU0sS0FBT0UsRUFBTSxNQUN2RUQsSUFBVSxLQUFNRixFQUFHLGdCQUFnQkMsQ0FBSSxFQUNsQ0QsRUFBRyxhQUFhQyxDQUFJLElBQU1DLEdBQU9GLEVBQUcsYUFBYUMsRUFBTUMsQ0FBSyxFQUM5RCxLQUNULENBQ0EsSUFBSW9CLEdBQVdDLEdBQVMsQ0FDdEIsSUFBSXBCLEVBQ0osTUFBTXFCLElBQVNyQixFQUFNb0IsRUFBSyxjQUFnQixLQUFPLE9BQVNwQixFQUFJLEtBQUtvQixDQUFJLElBQU1BLEVBQUssY0FDbEYsT0FBT0MsYUFBZ0IsVUFBWUEsYUFBZ0IsV0FBYUEsRUFBTyxRQUN6RSxFQUNJQyxHQUFLLEVBQ0xDLEdBQVMxQixHQUNOQSxHQUNBQSxFQUFHLEtBQUlBLEVBQUcsR0FBSyxJQUFJQSxFQUFHLFNBQVMsWUFBVyxDQUFFLElBQUksRUFBRXlCLElBQUksU0FBUyxFQUFFLENBQUMsSUFDaEV6QixFQUFHLElBRk0sR0FJZGEsR0FBZ0IsQ0FBQ2MsRUFBU0MsRUFBTUMsSUFBVSxDQUM1QyxNQUFNN0IsRUFBSyxTQUFTLGNBQWMyQixDQUFPLEVBRXpDLEdBRElDLElBQU01QixFQUFHLFlBQWM0QixHQUN2QkMsRUFBTyxTQUFXLENBQUNZLEVBQUtnQyxDQUFHLElBQUssT0FBTyxRQUFRNUMsQ0FBSyxFQUFHOUIsRUFBS0MsRUFBSXlDLEVBQUtnQyxDQUFHLEVBQzVFLE9BQU96RSxDQUNULEVBQ0k4QixHQUFpQixDQUNuQixPQUFRLENBQUM3QixFQUFNOEIsSUFBYSxDQUFDdkMsSUFBYyxPQUFPLGVBQWUsSUFBSVMsQ0FBSSxHQUFLLE9BQU8sZUFBZSxPQUFPQSxFQUFNOEIsQ0FBUSxDQUMzSCxFQUNJd1UsR0FBWXZXLEdBQU8sQ0FDckIsSUFBSUcsRUFDSixNQUFNcUIsRUFBT0YsR0FBUXRCLENBQUUsRUFDakIyRyxFQUFRNUcsRUFBS0MsRUFBSSxZQUFZLEdBQUssR0FFeEMsTUFBTyxDQUNMLE1BRmVHLEVBQU1KLEVBQUtDLEVBQUksaUJBQWlCLElBQU0sS0FBTyxPQUFTRyxFQUFJLEtBQUksRUFBRyxNQUFNLEtBQUssSUFBTSxDQUFFLEdBRXpGLElBQUtzRCxHQUFRakMsR0FBUSxLQUFPLE9BQVNBLEVBQUssY0FBYyxRQUFRaUMsQ0FBRyxJQUFJLENBQUMsRUFFbEYsR0FBRyxNQUFNLEtBQUt6RCxFQUFHLFFBQVUsQ0FBRSxDQUFBLENBRWpDLEVBQUksT0FBTyxDQUFDd1csRUFBS0MsSUFBUSxDQUNyQixJQUFJdlAsRUFDSixPQUFPc1AsS0FBU3RQLEVBQU11UCxHQUFPLEtBQU8sT0FBU0EsRUFBSSxZQUFjLEtBQU8sT0FBU3ZQLEVBQUksS0FBSSxJQUFPLEVBQy9GLEVBQUVQLENBQUssQ0FDVixFQUdJOUQsR0FBbUIsR0FDbkI2VCxHQUF1QixjQUFjNVcsRUFBYSxDQUVwRCxXQUFXLG9CQUFxQixDQUM5QixNQUFPLENBQUMsYUFBYyxrQkFBbUIsUUFBUyxLQUFLLENBQzNELENBQ0UsYUFBYyxDQUNaLE1BQU8sRUFDUCxLQUFLLGFBQWEsQ0FBRSxLQUFNLE1BQU0sQ0FBRSxFQUFFLE9BQ2xDZSxHQUFjLE9BQVEsS0FBTSxDQUFFLE9BQVEsRUFBRSxDQUFFLEVBRTFDQSxHQUNFLFFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQSwwR0FLUixDQUNLLENBQ0wsQ0FDRSxtQkFBb0IsQ0FDbEIsS0FBSyx5QkFBMEIsQ0FDbkMsQ0FDRSwwQkFBMkIsQ0FDekIsR0FBSWdDLEdBQWtCLE9BQ3RCQSxHQUFtQixHQUNuQixNQUFNOFQsRUFBWXRTLElBQVVELEdBQ3RCd1MsRUFBYSxLQUFLLElBQUksRUFBRyxLQUFLLE1BQU0sS0FBSyxTQUFXLEdBQUcsQ0FBQyxFQUM5RCxLQUFLLE1BQU0sWUFBWSxlQUFnQixHQUFHQSxDQUFVLEdBQUcsRUFDdkQsSUFBSWpRLEVBQVE0UCxHQUFTLElBQUksRUFFekIsR0FESUksSUFBV2hRLEVBQVEsR0FBR0EsRUFBTSxRQUFRLFFBQVMsRUFBRSxDQUFDLElBQUlpUSxDQUFVLEtBQzlEeFMsR0FBWSxVQUFXcEUsS0FBTSxLQUFLLE9BQVFELEVBQUtDLEVBQUksYUFBYzJHLENBQUssRUFDMUU1RyxFQUFLLEtBQU0sWUFBYSxHQUFHLEtBQUssV0FBYSxFQUFFLEVBQUUsRUFDakRBLEVBQUssS0FBTSxhQUFjNEcsRUFBTSxLQUFJLENBQUUsRUFDckM1RyxFQUFLLEtBQU0sa0JBQW1CLElBQUksRUFDbENBLEVBQUssS0FBTSxnQkFBaUIsS0FBSyxFQUNqQ0EsRUFBSyxLQUFNLGdCQUFpQixHQUFHLEVBQy9CQSxFQUFLLEtBQU0sZ0JBQWlCLEdBQUc2VyxDQUFVLEVBQUUsRUFDM0M3VyxFQUFLLEtBQU0sT0FBUTRXLEVBQVksTUFBUSxhQUFhLEVBQ3BEOVQsR0FBbUIsRUFDdkIsQ0FDRSxJQUFJLFFBQVMsQ0FDWCxNQUFNOEQsRUFBUSxLQUFLLFFBQVEsa0JBQWtCLEVBQ3ZDbEQsRUFBTS9CLEdBQU0sSUFBSSxFQUN0QixPQUFJaUYsSUFBT0EsRUFBTSxRQUFVbEQsR0FDaEJuQyxHQUFRLElBQUksRUFBRSxpQkFDdkIsY0FBY21DLENBQUcsSUFDbEIsQ0FFTCxDQUNFLElBQUksVUFBVyxDQUNiLE9BQU8sS0FBSyxRQUFVLEtBQU8sR0FBSyxLQUFLLElBQUksS0FBSyxNQUFRLEtBQUssSUFBSyxDQUFDLENBQ3ZFLENBQ0UsSUFBSSxPQUFRLENBQ1YsT0FBT29ULEdBQVUsS0FBTSxPQUFPLENBQ2xDLENBQ0UsSUFBSSxNQUFNM1csRUFBTyxDQUNmNFcsR0FBVSxLQUFNLFFBQVM1VyxDQUFLLENBQ2xDLENBQ0UsSUFBSSxLQUFNLENBQ1IsT0FBTzJXLEdBQVUsS0FBTSxLQUFLLEdBQUssQ0FDckMsQ0FDRSxJQUFJLElBQUk3SixFQUFLLENBQ1g4SixHQUFVLEtBQU0sTUFBTzlKLENBQUcsQ0FDOUIsQ0FDQSxFQUVBMEosR0FBcUIsZUFBaUIsR0FDdEMsSUFBSUssR0FBYTdXLEdBQVUsQ0FBQyxPQUFPLE1BQU0sT0FBTyxXQUFXLEdBQUdBLENBQUssRUFBRSxDQUFDLEdBQUssT0FBTyxTQUFTLE9BQU9BLENBQUssQ0FBQyxFQUNwRzJXLEdBQVksQ0FBQzdXLEVBQUl5QyxJQUFRLENBQzNCLE1BQU12QyxFQUFRSCxFQUFLQyxFQUFJeUMsQ0FBRyxFQUMxQixPQUFPc1UsR0FBVTdXLENBQUssRUFBSSxLQUFLLElBQUksRUFBRyxPQUFPLFdBQVdBLENBQUssQ0FBQyxFQUFJLElBQ3BFLEVBQ0k0VyxHQUFZLENBQUM5VyxFQUFJeUMsRUFBS2dDLElBQVEsQ0FDaEMsR0FBSUEsSUFBUSxNQUFRc1MsR0FBVXRTLENBQUcsRUFBRzFFLEVBQUtDLEVBQUl5QyxFQUFLLEdBQUdnQyxDQUFHLEVBQUUsTUFDckQsT0FBTSxJQUFJLE1BQU0sOEJBQThCMUUsQ0FBSSxPQUFPMEUsQ0FBRyxHQUFHLENBQ3RFLEVBQ0EsT0FBQTNDLEdBQWUsT0FBTyxhQUFjNFUsRUFBb0IiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDEwLDE4LDE5XX0=
|
|
21
|
+
@keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(Zt)return;Zt=!0;const t=ts||on,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let o=ss(this);if(t&&(o=`${o.replace(/\d+%$/,"")} ${e}%`),on)for(const n of this.labels)y(n,"aria-label",o);y(this,"aria-busy",`${this.position===-1}`),y(this,"aria-label",o.trim()),y(this,"aria-labelledby",null),y(this,"aria-valuemax","100"),y(this,"aria-valuemin","0"),y(this,"aria-valuenow",`${e}`),y(this,"role",t?"img":"progressbar"),Zt=!1}get labels(){const t=this.closest("label:not([for])"),e=ns(this);return t&&(t.htmlFor=e),sn(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return cn(this,"value")}set value(t){dn(this,"value",t)}get max(){return cn(this,"max")||1}set max(t){dn(this,"max",t)}};rn.formAssociated=!0;var ln=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),cn=(t,e)=>{const o=y(t,e);return ln(o)?Math.max(0,Number.parseFloat(o)):null},dn=(t,e,o)=>{if(o===null||ln(o))y(t,e,`${o}`);else throw new Error(`Failed to set non-numeric '${y}': '${o}'`)};return is.define("u-progress",rn),$.UHTMLComboboxElement=ut,$.UHTMLTabElement=ce,$.UHTMLTabListElement=le,$.UHTMLTabPanelElement=de,$.UHTMLTabsElement=re,$.analytics=Gn,$.pagination=Qn,$.styles=Jn,$.toggleAppExpanded=wo,$.version=Vn,Object.defineProperty($,Symbol.toStringTag,{value:"Module"}),$}({});
|
|
22
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWNvbWJvYm94L2Rpc3QvdS1jb21ib2JveC5qcyIsIi4uL2Rlc2lnbnN5c3RlbS91dGlscy50cyIsIi4uL2Rlc2lnbnN5c3RlbS9hbmFseXRpY3MvYW5hbHl0aWNzLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BhZ2luYXRpb24vcGFnaW5hdGlvbi1oZWxwZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC10b2dnbGUuanMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9icmVhZGNydW1icy9icmVhZGNydW1icy1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9kaWFsb2cvZGlhbG9nLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2Vycm9yc3VtbWFyeS9lcnJvcnN1bW1hcnktb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kYXRhbGlzdC9kaXN0L3UtZGF0YWxpc3QuanMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGQvZmllbGQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGRzZXQvZmllbGRzZXQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vbG9nby9sb2dvLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BvcG92ZXIvcG9wb3Zlci1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90YWJsZS90YWJsZS1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b2dnbGVncm91cC90b2dnbGVncm91cC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b29sdGlwL3Rvb2x0aXAtb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kZXRhaWxzL2Rpc3QvdS1kZXRhaWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtcHJvZ3Jlc3MvZGlzdC91LXByb2dyZXNzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xuXG4vLyB1LXRhYnMudHNcbnZhciBBUklBX0NPTlRST0xTID0gXCJhcmlhLWNvbnRyb2xzXCI7XG52YXIgQVJJQV9TRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xudmFyIFVIVE1MVGFic0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgRElTUExBWV9CTE9DSyk7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFibGlzdFwiLCB0aGlzKVswXSB8fCBudWxsO1xuICB9XG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICBzZXRTZWxlY3RlZCh0aGlzLnRhYnNbaW5kZXhdKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJcIiwgdGhpcyk7XG4gIH1cbiAgZ2V0IHBhbmVscygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJwYW5lbFwiLCB0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYkxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFibGlzdFwiKTtcbiAgICBvbih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCkgdGhpcy5oYW5kbGVFdmVudCgpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LnR5cGUgPT09IFwibXV0YXRpb25cIikge1xuICAgICAgY29uc3QgdGFiID0gdGhpcy50YWJzW01hdGgubWF4KHRoaXMuc2VsZWN0ZWRJbmRleCwgMCldO1xuICAgICAgcmV0dXJuIHRhYiA9PSBudWxsID8gdm9pZCAwIDogdGFiLnNldEF0dHJpYnV0ZShBUklBX1NFTEVDVEVELCBcInRydWVcIik7XG4gICAgfVxuICAgIGNvbnN0IHsga2V5IH0gPSBldmVudDtcbiAgICBjb25zdCB0YWJzID0gWy4uLnRoaXMudGFic107XG4gICAgY29uc3QgcHJldiA9IHRhYnMuZmluZEluZGV4KCh0YWIpID0+IHRhYi5jb250YWlucyhldmVudC50YXJnZXQpKTtcbiAgICBsZXQgbmV4dCA9IHByZXY7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgcHJldiA9PT0gLTEpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSBzZXRTZWxlY3RlZCh0YWJzW3ByZXZdKTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIgJiYgIWFzQnV0dG9uKGV2ZW50KSkge1xuICAgICAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIiB8fCBrZXkgPT09IFwiQXJyb3dSaWdodFwiKVxuICAgICAgICBuZXh0ID0gKHByZXYgKyAxKSAlIHRhYnMubGVuZ3RoO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93VXBcIiB8fCBrZXkgPT09IFwiQXJyb3dMZWZ0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiB8fCB0YWJzLmxlbmd0aCkgLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkVuZFwiKSBuZXh0ID0gdGFicy5sZW5ndGggLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkhvbWVcIikgbmV4dCA9IDA7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiVGFiXCIpIG5leHQgPSBnZXRTZWxlY3RlZEluZGV4KHRhYnMpO1xuICAgICAgZWxzZSByZXR1cm47XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGFic1twcmV2XS50YWJJbmRleCA9IC0xO1xuICAgICAgICB0YWJzW25leHRdLnRhYkluZGV4ID0gMDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGtleSAhPT0gXCJUYWJcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0YWJzW25leHRdLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJzKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbn07XG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MVGFiRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIEFSSUFfU0VMRUNURUQsIEFSSUFfQ09OVFJPTFNdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jayB9XCJcbiAgICApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFiXCIpO1xuICAgIHRoaXMudGFiSW5kZXggPSB0aGlzLnNlbGVjdGVkID8gMCA6IC0xO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoIVNLSVBfQVRUUl9DSEFOR0UgJiYgdGhpcy5zZWxlY3RlZCAmJiB0aGlzLnRhYkxpc3QpIHtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgICAgY29uc3QgdGFicyA9IFsuLi50aGlzLnRhYkxpc3QucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpXTtcbiAgICAgIGNvbnN0IHBhbmVscyA9IHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFicGFuZWxcIiwgdGhpcy50YWJzRWxlbWVudCB8fCB0aGlzKTtcbiAgICAgIGNvbnN0IG5leHRQYW5lbCA9IGdldFBhbmVsKHRoaXMsIHBhbmVsc1t0YWJzLmluZGV4T2YodGhpcyldKTtcbiAgICAgIGlmIChuZXh0UGFuZWwpIGF0dHIobmV4dFBhbmVsLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKHRoaXMpKTtcbiAgICAgIHRhYnMuZm9yRWFjaCgodGFiLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBwYW5lbCA9IGdldFBhbmVsKHRhYiwgcGFuZWxzW2luZGV4XSk7XG4gICAgICAgIHRhYi50YWJJbmRleCA9IHRhYiA9PT0gdGhpcyA/IDAgOiAtMTtcbiAgICAgICAgYXR0cih0YWIsIEFSSUFfU0VMRUNURUQsIGAke3RhYiA9PT0gdGhpc31gKTtcbiAgICAgICAgaWYgKHBhbmVsKSBwYW5lbC5oaWRkZW4gPSBwYW5lbCAhPT0gbmV4dFBhbmVsO1xuICAgICAgICBpZiAocGFuZWwpIGF0dHIodGFiLCBBUklBX0NPTlRST0xTLCBwYW5lbC5pZCk7XG4gICAgICB9KTtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgY29uc3QgdGFibGlzdCA9IHRoaXMucGFyZW50RWxlbWVudDtcbiAgICByZXR1cm4gKHRhYmxpc3QgPT0gbnVsbCA/IHZvaWQgMCA6IHRhYmxpc3Qubm9kZU5hbWUpID09PSBcIlUtVEFCTElTVFwiID8gdGFibGlzdCA6IG51bGw7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQpID09PSBcInRydWVcIjtcbiAgfVxuICBzZXQgc2VsZWN0ZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQsIGAkeyEhdmFsdWV9YCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiB0YWIgaW4gYSB0YWJsaXN0LiAqL1xuICBnZXQgaW5kZXgoKSB7XG4gICAgY29uc3QgdGFiTGlzdCA9IHRoaXMudGFiTGlzdDtcbiAgICByZXR1cm4gdGFiTGlzdCA/IFsuLi50YWJMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKV0uaW5kZXhPZih0aGlzKSA6IDA7XG4gIH1cbiAgZ2V0IHBhbmVsKCkge1xuICAgIHJldHVybiBnZXRQYW5lbCh0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYlBhbmVsRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImhpZGRlblwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFicGFuZWxcIik7XG4gICAgdGhpcy5oaWRkZW4gPSBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicykgPT09IC0xO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLmhpZGRlbiB8fCBpc0ZvY3VzYWJsZSh0aGlzLmZpcnN0Q2hpbGQpKVxuICAgICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIG51bGwpO1xuICAgIGVsc2UgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgY29uc3QgY3NzID0gYHUtdGFiWyR7QVJJQV9DT05UUk9MU309XCIke3RoaXMuaWR9XCJdYDtcbiAgICByZXR1cm4gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKGNzcyk7XG4gIH1cbn07XG52YXIgcXVlcnlXaXRob3V0TmVzdGVkID0gKHRhZywgc2VsZikgPT4gc2VsZi5xdWVyeVNlbGVjdG9yQWxsKGAke3RhZ306bm90KDpzY29wZSB1LXRhYnBhbmVsICR7dGFnfSlgKTtcbnZhciBnZXRQYW5lbCA9ICh0YWIsIHBhbmVsKSA9PiB7XG4gIGNvbnN0IGlkMiA9IGF0dHIodGFiLCBBUklBX0NPTlRST0xTKSB8fCB1c2VJZChwYW5lbCk7XG4gIGNvbnN0IGVsID0gZ2V0Um9vdCh0YWIpLmdldEVsZW1lbnRCeUlkKGlkMik7XG4gIHJldHVybiAoZWwgPT0gbnVsbCA/IHZvaWQgMCA6IGVsLm5vZGVOYW1lKSA9PT0gXCJVLVRBQlBBTkVMXCIgPyBlbCA6IG51bGw7XG59O1xudmFyIGdldFNlbGVjdGVkSW5kZXggPSAodGFicykgPT4gWy4uLnRhYnNdLmZpbmRJbmRleCgodGFiKSA9PiBhdHRyKHRhYiwgQVJJQV9TRUxFQ1RFRCkgPT09IFwidHJ1ZVwiKTtcbnZhciBzZXRTZWxlY3RlZCA9ICh0YWIpID0+IHRhYiAmJiBhdHRyKHRhYiwgXCJhcmlhLXNlbGVjdGVkXCIsIFwidHJ1ZVwiKTtcbnZhciBpc0ZvY3VzYWJsZSA9IChlbCkgPT4gZWwgaW5zdGFuY2VvZiBFbGVtZW50ICYmICFlbC5tYXRjaGVzKCc6ZGlzYWJsZWQsW3RhYmluZGV4Xj1cIi1cIl0nKSAmJiBlbC5tYXRjaGVzKFxuICBgW2NvbnRlbnRlZGl0YWJsZV0sW2NvbnRyb2xzXSxbaHJlZl0sW3RhYmluZGV4XSxpbnB1dDpub3QoW3R5cGU9XCJoaWRkZW5cIl0pLHNlbGVjdCx0ZXh0YXJlYSxidXR0b24sc3VtbWFyeSxpZnJhbWVgXG4pO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJzXCIsIFVIVE1MVGFic0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJsaXN0XCIsIFVIVE1MVGFiTGlzdEVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJcIiwgVUhUTUxUYWJFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFicGFuZWxcIiwgVUhUTUxUYWJQYW5lbEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTFRhYkVsZW1lbnQsIFVIVE1MVGFiTGlzdEVsZW1lbnQsIFVIVE1MVGFiUGFuZWxFbGVtZW50LCBVSFRNTFRhYnNFbGVtZW50IH07XG4iLCJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5cbi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfRklSRUZPWCA9IElTX0JST1dTRVIgJiYgL2ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIEZPQ1VTX09VVExJTkUgPSBcIm91dGxpbmU6IDFweCBkb3R0ZWQ7IG91dGxpbmU6IDVweCBhdXRvIEhpZ2hsaWdodDsgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2JzZXJ2ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgbXV0YXRpb25PYnNlcnZlciA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHJldHVybiBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICB0cnkge1xuICAgIG9ic2VydmVycy5nZXQoZWxlbWVudCkuZGlzY29ubmVjdCgpO1xuICAgIG9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gIH0gY2F0Y2ggKF9lcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0MiwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dDIpIGVsLnRleHRDb250ZW50ID0gdGV4dDI7XG4gIGlmIChhdHRycykgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkgYXR0cihlbCwga2V5LCB2YWwpO1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBMSVZFO1xudmFyIExJVkVfU1JfRklYID0gMDtcbnZhciBzcGVhayA9ICh0ZXh0MikgPT4ge1xuICBpZiAoIUxJVkUpIHtcbiAgICBMSVZFID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBMSVZFLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gICAgYXR0cihMSVZFLCBcImFyaWEtbGl2ZVwiLCBcImFzc2VydGl2ZVwiKTtcbiAgfVxuICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKExJVkUpO1xuICBpZiAodGV4dDIpIExJVkUudGV4dENvbnRlbnQgPSBgJHt0ZXh0Mn0ke0xJVkVfU1JfRklYKysgJSAyID8gXCJcXHhBMFwiIDogXCJcIn1gO1xufTtcbnZhciBzZXRWYWx1ZSA9IChpbnB1dCwgZGF0YSwgdHlwZSA9IFwiXCIpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSwgZGF0YSwgaW5wdXRUeXBlOiB0eXBlIH07XG4gIGNvbnN0IHByb3RvID0gSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGU7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJiZWZvcmVpbnB1dFwiLCBldmVudCkpO1xuICAoX2IgPSAoX2EyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgXCJ2YWx1ZVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5zZXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKGlucHV0LCBkYXRhKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImlucHV0XCIsIGV2ZW50KSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG59O1xudmFyIElTX1BSRVNTID0gZmFsc2U7XG52YXIgaXNNb3VzZURvd24gPSAoZXZlbnQpID0+IHtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2V1cFwiKSBJU19QUkVTUyA9IGZhbHNlO1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZWRvd25cIikge1xuICAgIElTX1BSRVNTID0gdHJ1ZTtcbiAgICBvbihkb2N1bWVudCwgXCJtb3VzZXVwXCIsIGlzTW91c2VEb3duLCB7IG9uY2U6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIElTX1BSRVNTO1xufTtcblxuLy8gdS1jb21ib2JveC50c1xudmFyIEVWRU5UUyA9IFwiYmVmb3JlaW5wdXQsYmx1cixmb2N1cyxjbGljayxpbnB1dCxrZXlkb3duLG1vdXNlZG93blwiO1xudmFyIEVWRU5UX09OQ0UgPSB7IG9uY2U6IHRydWUsIHBhc3NpdmU6IHRydWUgfTtcbnZhciBJU19GSVJFRk9YX0RFU0tUT1AgPSBJU19GSVJFRk9YICYmICFJU19BTkRST0lEO1xudmFyIElTX01PQklMRSA9IElTX0FORFJPSUQgfHwgSVNfSU9TO1xudmFyIEZBTFNFID0gXCJmYWxzZVwiO1xudmFyIFRFWFRTID0ge1xuICBhZGRlZDogXCJBZGRlZFwiLFxuICBlbXB0eTogXCJObyBzZWxlY3RlZFwiLFxuICBmb3VuZDogXCJOYXZpZ2F0ZSBsZWZ0IHRvIGZpbmQgJWQgc2VsZWN0ZWRcIixcbiAgaW52YWxpZDogXCJJbnZhbGlkIHZhbHVlXCIsXG4gIG9mOiBcIm9mXCIsXG4gIHJlbW92ZTogXCJQcmVzcyB0byByZW1vdmVcIixcbiAgcmVtb3ZlZDogXCJSZW1vdmVkXCJcbn07XG52YXIgVUhUTUxDb21ib2JveEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5faXRlbVRleHQgPSBcIlwiO1xuICAgIC8vIExvY2FsbHkgc3RvcmUgaXRlbSB0ZXh0IHRvIGNvbXBhcmUgY2hhbmdlIGluIHNpbmdsZSBtb2RlXG4gICAgdGhpcy5fc3BlYWsgPSBcIlwiO1xuICAgIHRoaXMuX3RleHRzID0gX19zcHJlYWRWYWx1ZXMoe30sIFRFWFRTKTtcbiAgICB0aGlzLl92YWx1ZSA9IFwiXCI7XG4gICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgICAgIC8vIENvbnRlbnQgc2xvdFxuICAgICAgY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2s7IGN1cnNvcjogcG9pbnRlcjsgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApIH0gLyogTXVzdCBiZSBkaXNwbGF5IGJsb2NrIGluIFNhZmFyaSB0byBhbGxvdyBmb2N1cyBpbnNpZGUgKi9cblx0XHRcdFx0Omhvc3QoOm5vdChbZGF0YS1tdWx0aXBsZV0pKSA6OnNsb3R0ZWQoZGF0YSksXG5cdFx0XHRcdDpob3N0KFtkYXRhLW11bHRpcGxlPVwiZmFsc2VcIl0pIDo6c2xvdHRlZChkYXRhKSB7IGRpc3BsYXk6IG5vbmUgfSAvKiBIaWRlIGRhdGEgaWYgbm90IG11bHRpcGxlICovXG5cdFx0XHRcdDo6c2xvdHRlZChpbnB1dFtpbnB1dG1vZGU9XCJub25lXCJdKSB7IG91dGxpbmU6IG5vbmUgfSAvKiBIaWRlIHRlbXBvcmFyeSBmb3VjcyBvdXRsaW5lIGZsYXNoICovXG5cdFx0XHRcdDo6c2xvdHRlZChkZWwpIHsgdGV4dC1kZWNvcmF0aW9uOiBub25lIH1cblx0XHRcdFx0OjpzbG90dGVkKGRhdGE6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBvaW50ZXItZXZlbnRzOiBub25lIH1cbiAgICAgICAgOjpzbG90dGVkKGRhdGEpOjphZnRlciB7IGNvbnRlbnQ6ICdcXFxcMDBENyc7IGNvbnRlbnQ6ICdcXFxcMDBENycgLyAnJzsgcGFkZGluZy1pbmxpbmU6IC41Y2g7IHBvaW50ZXItZXZlbnRzOiBhdXRvIH1cbiAgICAgICAgOjpzbG90dGVkKGRhdGE6Zm9jdXMpIHsgJHtGT0NVU19PVVRMSU5FfSB9YFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgLy8gTG9jYWxseSBzdG9yZSB2YWx1ZSB0byBzdG9yZSB2YWx1ZSBiZWZvcmUgaW5wdXQtY2xpY2tcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKFRFWFRTKS5tYXAoKGtleSkgPT4gYGRhdGEtc3ItJHtrZXl9YCk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgb24odGhpcywgRVZFTlRTLCB0aGlzLCB0cnVlKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1widmFsdWVcIl0sXG4gICAgICAvLyBSZXNwb25kIHRvIGNoYW5nZXMgaW4gPGRhdGE+IHZhbHVlLFxuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICAvLyBSZXNwb25kIHRvIGNoYW5nZXMgaW4gPGRhdGE+IHRleHRDb250ZW50XG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfSk7XG4gICAgc2V0VGltZW91dChyZW5kZXIsIDAsIHRoaXMpO1xuICAgIHNldFRpbWVvdXQoc3luY0lucHV0VmFsdWUsIDAsIHRoaXMpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBfLCB2YWwpIHtcbiAgICBjb25zdCB0ZXh0MiA9IHByb3Auc3BsaXQoXCJkYXRhLXNyLVwiKVsxXTtcbiAgICBpZiAoVEVYVFNbdGV4dDJdKSB0aGlzLl90ZXh0c1t0ZXh0Ml0gPSB2YWwgfHwgVEVYVFNbdGV4dDJdO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIG9mZih0aGlzLCBFVkVOVFMsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fY2xlYXIgPSB0aGlzLl9mb2N1cyA9IHRoaXMuX2NvbnRyb2wgPSB2b2lkIDA7XG4gICAgdGhpcy5fbGlzdCA9IHRoaXMuX29wdGlvbnMgPSB0aGlzLl9yb290ID0gdm9pZCAwO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJlZm9yZWlucHV0XCIpIHRoaXMuX3ZhbHVlID0gKHRhcmdldCA9PSBudWxsID8gdm9pZCAwIDogdGFyZ2V0LnZhbHVlKSB8fCBcIlwiO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJsdXJcIikgb25CbHVyKHRoaXMpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImZvY3VzXCIpIG9uRm9jdXModGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImlucHV0XCIpIG9uSW5wdXQodGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgb25LZXlEb3duKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgaXNNb3VzZURvd24oZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcIm11dGF0aW9uXCIpIHJlbmRlcih0aGlzLCBldmVudCk7XG4gIH1cbiAgZ2V0IG11bHRpcGxlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gYXR0cih0aGlzLCBcImRhdGEtbXVsdGlwbGVcIikpICE9IG51bGwgPyBfYTIgOiBGQUxTRSkgIT09IEZBTFNFO1xuICB9XG4gIHNldCBtdWx0aXBsZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJkYXRhLW11bHRpcGxlXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBjcmVhdGFibGUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSBhdHRyKHRoaXMsIFwiZGF0YS1jcmVhdGFibGVcIikpICE9IG51bGwgPyBfYTIgOiBGQUxTRSkgIT09IEZBTFNFO1xuICB9XG4gIHNldCBjcmVhdGFibGUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwiZGF0YS1jcmVhdGFibGVcIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IGNvbnRyb2woKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpXG4gICAgICB0aGlzLl9jb250cm9sID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2w7XG4gIH1cbiAgZ2V0IGxpc3QoKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fbGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpXG4gICAgICB0aGlzLl9saXN0ID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwidS1kYXRhbGlzdCxkYXRhbGlzdFwiKTtcbiAgICByZXR1cm4gdGhpcy5fbGlzdDtcbiAgfVxuICBnZXQgY2xlYXIoKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fY2xlYXIpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKSB0aGlzLl9jbGVhciA9IHRoaXMucXVlcnlTZWxlY3RvcihcImRlbFwiKTtcbiAgICByZXR1cm4gdGhpcy5fY2xlYXI7XG4gIH1cbiAgZ2V0IGl0ZW1zKCkge1xuICAgIGlmICghdGhpcy5faXRlbXMpIHRoaXMuX2l0ZW1zID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRhdGFcIik7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHZhciBfYTIsIF9iO1xuICAgIGlmICghdGhpcy5fb3B0aW9ucykge1xuICAgICAgY29uc3QgdGFnID0gKChfYTIgPSB0aGlzLmxpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIubm9kZU5hbWUpID09PSBcIlUtREFUQUxJU1RcIiA/IFwidS1vcHRpb25cIiA6IFwib3B0aW9uXCI7XG4gICAgICB0aGlzLl9vcHRpb25zID0gKF9iID0gdGhpcy5saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cbiAgZ2V0IHZhbHVlcygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuaXRlbXNdLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSk7XG4gIH1cbn07XG52YXIgdGV4dCA9IChlbCkgPT4ge1xuICB2YXIgX2EyO1xuICByZXR1cm4gKChfYTIgPSBlbCA9PSBudWxsID8gdm9pZCAwIDogZWwudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xufTtcbnZhciBpc0RhdGEgPSAoZWwpID0+IGVsIGluc3RhbmNlb2YgSFRNTERhdGFFbGVtZW50O1xudmFyIHJlbmRlciA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgeyBfZm9jdXMsIF90ZXh0cywgaXRlbXMsIGNvbnRyb2wsIGxpc3QsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBsZXQgbGFiZWwgPSBgJHt0ZXh0KChfYTIgPSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmxhYmVscykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMlswXSl9LCAke211bHRpcGxlID8gaXRlbXMubGVuZ3RoID8gX3RleHRzLmZvdW5kLnJlcGxhY2UoXCIlZFwiLCBgJHtpdGVtcy5sZW5ndGh9YCkgOiBfdGV4dHMuZW1wdHkgOiBcIlwifWA7XG4gIGNvbnN0IGVkaXRzID0gW107XG4gIGZvciAoY29uc3QgeyBhZGRlZE5vZGVzLCByZW1vdmVkTm9kZXMgfSBvZiAoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LmRldGFpbCkgfHwgW10pIHtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIGFkZGVkTm9kZXMpIGlmIChpc0RhdGEoZWwpKSBlZGl0cy51bnNoaWZ0KGVsKTtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIHJlbW92ZWROb2RlcykgaWYgKGlzRGF0YShlbCkpIGVkaXRzLnB1c2goZWwpO1xuICB9XG4gIGNvbnN0IHNob3VsZEFubm91bmNlID0gbXVsdGlwbGUgPyBlZGl0cy5sZW5ndGggPT09IDEgOiBlZGl0c1swXSA9PT0gX2ZvY3VzO1xuICBpZiAoX2ZvY3VzICYmIGNvbnRyb2wgJiYgc2hvdWxkQW5ub3VuY2UpIHtcbiAgICBjb25zdCBpbnB1dE1vZGUgPSBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIpO1xuICAgIGNvbnN0IG5leHRGb2N1cyA9IGlzRGF0YShfZm9jdXMpID8gY29udHJvbCA6IF9mb2N1cztcbiAgICBzZWxmLl9zcGVhayA9IGAke190ZXh0c1tlZGl0c1swXS5pc0Nvbm5lY3RlZCA/IFwiYWRkZWRcIiA6IFwicmVtb3ZlZFwiXX0gJHt0ZXh0KGVkaXRzWzBdKX0sIGA7XG4gICAgaWYgKElTX01PQklMRSB8fCBfZm9jdXMgPT09IGNvbnRyb2wpIHNwZWFrKHNlbGYuX3NwZWFrKTtcbiAgICBpZiAoY29udHJvbCAhPT0gbmV4dEZvY3VzKSB7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiLCBudWxsKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgXCJub25lXCIpO1xuICAgICAgbGFiZWwgPSBcIlxceEEwXCI7XG4gICAgICBjb250cm9sLmZvY3VzKCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIGF0dHIoY29udHJvbCwgXCJhcmlhLWV4cGFuZGVkXCIsIFwidHJ1ZVwiKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgaW5wdXRNb2RlKTtcbiAgICAgIChfYTMgPSBuZXh0Rm9jdXMgPT0gbnVsbCA/IHZvaWQgMCA6IG5leHRGb2N1cy5mb2N1cykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy5jYWxsKG5leHRGb2N1cyk7XG4gICAgICBzZWxmLl9zcGVhayA9IFwiXCI7XG4gICAgICBpZiAoSVNfRklSRUZPWF9ERVNLVE9QKSBvbihzZWxmLCBcImJsdXJcIiwgKCkgPT4gcmVuZGVyKHNlbGYpLCBFVkVOVF9PTkNFKTtcbiAgICAgIGVsc2Ugc2V0VGltZW91dChyZW5kZXIsIDEwMCwgc2VsZik7XG4gICAgfSwgMTAwKTtcbiAgfVxuICBsZXQgaWR4ID0gMDtcbiAgY29uc3Qgc2VsZWN0ID0gc2VsZi5xdWVyeVNlbGVjdG9yKFwic2VsZWN0XCIpO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCBvcHRpb24gPSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zW2lkeF07XG4gICAgY29uc3QgbGFiZWwyID0gdGV4dChpdGVtKTtcbiAgICBjb25zdCB2YWx1ZSA9IGl0ZW0udmFsdWUgfHwgbGFiZWwyO1xuICAgIGNvbnN0IGFyaWEgPSBgJHtzZWxmLl9zcGVha30ke2xhYmVsMn0sICR7X3RleHRzLnJlbW92ZX0sICR7KytpZHh9ICR7X3RleHRzLm9mfSAke2l0ZW1zLmxlbmd0aH1gO1xuICAgIGF0dHIoaXRlbSwgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIGF0dHIoaXRlbSwgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gICAgYXR0cihpdGVtLCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG4gICAgYXR0cihpdGVtLCBcImFyaWEtbGFiZWxcIiwgYXJpYSk7XG4gICAgaWYgKG9wdGlvbikgT2JqZWN0LmFzc2lnbihvcHRpb24sIHsgdGV4dENvbnRlbnQ6IGxhYmVsMiwgdmFsdWUgfSk7XG4gICAgZWxzZSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5hcHBlbmRDaGlsZChuZXcgT3B0aW9uKGxhYmVsMiwgdmFsdWUsIHRydWUsIHRydWUpKTtcbiAgfVxuICBpZiAoc2VsZWN0KSBhdHRyKHNlbGVjdCwgXCJtdWx0aXBsZVwiLCBtdWx0aXBsZSA/IFwiXCIgOiBudWxsKTtcbiAgZm9yIChjb25zdCBvcHQgb2YgWy4uLihzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zKSB8fCBbXV0uc2xpY2UoaWR4KSkgb3B0LnJlbW92ZSgpO1xuICBpZiAoIW11bHRpcGxlICYmIGlkeCA+IDEpXG4gICAgY29uc29sZS53YXJuKFwidS1jb21ib2JveDogTXVsdGlwbGUgPGRhdGE+IGZvdW5kIGluIHNpbmdsZSBtb2RlLlwiKTtcbiAgaWYgKGxpc3QpIGF0dHIobGlzdCwgXCJhcmlhLW11bHRpc2VsZWN0YWJsZVwiLCBgJHttdWx0aXBsZX1gKTtcbiAgaWYgKGNvbnRyb2wpIGF0dHIoY29udHJvbCwgXCJsaXN0XCIsIHVzZUlkKGxpc3QpKTtcbiAgaWYgKGNvbnRyb2wpIGF0dHIoY29udHJvbCwgXCJhcmlhLWxhYmVsXCIsIGAke3NlbGYuX3NwZWFrfSR7bGFiZWx9YCk7XG4gIGNvbnN0IGl0ZW1UZXh0ID0gdGV4dChpdGVtc1swXSk7XG4gIGlmIChpdGVtVGV4dCAhPT0gc2VsZi5faXRlbVRleHQpIHN5bmNJbnB1dFZhbHVlKHNlbGYsIGZhbHNlKTtcbiAgc2VsZi5faXRlbVRleHQgPSBpdGVtVGV4dDtcbiAgc3luY0NsZWFyV2l0aElucHV0KHNlbGYpO1xuICBzeW5jT3B0aW9uc1dpdGhJdGVtcyhzZWxmKTtcbiAgKF9iID0gbXV0YXRpb25PYnNlcnZlcihzZWxmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLnRha2VSZWNvcmRzKCk7XG59O1xudmFyIHN5bmNDbGVhcldpdGhJbnB1dCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChzZWxmLmNsZWFyKSBhdHRyKHNlbGYuY2xlYXIsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgaWYgKHNlbGYuY2xlYXIpIHNlbGYuY2xlYXIuaGlkZGVuID0gISgoX2EyID0gc2VsZi5jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnZhbHVlKTtcbn07XG52YXIgc3luY09wdGlvbnNXaXRoSXRlbXMgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF9zcGVhaywgb3B0aW9ucyA9IFtdLCB2YWx1ZXMgfSA9IHNlbGY7XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IChfYTIgPSBhdHRyKG9wdCwgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRleHQob3B0KTtcbiAgICBhdHRyKG9wdCwgXCJhcmlhLWxhYmVsXCIsIF9zcGVhayA/IGAke19zcGVha30ke3RleHQob3B0KX1gIDogbnVsbCk7XG4gICAgYXR0cihvcHQsIFwic2VsZWN0ZWRcIiwgdmFsdWVzLmluY2x1ZGVzKHZhbHVlKSA/IFwiXCIgOiBudWxsKTtcbiAgfVxufTtcbnZhciBzeW5jSW5wdXRWYWx1ZSA9IChzZWxmLCB3aXRoRXZlbnQgPSB0cnVlKSA9PiB7XG4gIGNvbnN0IHsgbXVsdGlwbGUsIGNvbnRyb2wsIGl0ZW1zIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9IHRleHQoaXRlbXNbMF0pO1xuICBpZiAobXVsdGlwbGUgfHwgIWNvbnRyb2wgfHwgdmFsdWUgPT09IGNvbnRyb2wudmFsdWUpIHJldHVybjtcbiAgaWYgKHdpdGhFdmVudCkgcmV0dXJuIHNldFZhbHVlKGNvbnRyb2wsIHZhbHVlLCBcImluc2VydFRleHRcIik7XG4gIGNvbnRyb2wudmFsdWUgPSB2YWx1ZTtcbn07XG52YXIgZGlzcGF0Y2hNYXRjaCA9IChzZWxmLCBjaGFuZ2UgPSB0cnVlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgX3RleHRzLCBvcHRpb25zID0gW10sIGNyZWF0YWJsZSwgY29udHJvbCwgaXRlbXMsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IHF1ZXJ5ID0gdmFsdWUudG9Mb3dlckNhc2UoKSB8fCBudWxsO1xuICBsZXQgbWF0Y2ggPSBbLi4ub3B0aW9uc10uZmluZChcbiAgICAob3B0KSA9PiAoYXR0cihvcHQsIFwibGFiZWxcIikgfHwgdGV4dChvcHQpKS50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gcXVlcnlcbiAgKTtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogbWF0Y2ggfTtcbiAgaWYgKCFzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiYmVmb3JlbWF0Y2hcIiwgZXZlbnQpKSlcbiAgICBtYXRjaCA9IFsuLi5vcHRpb25zXS5maW5kKChvKSA9PiBvLnNlbGVjdGVkKTtcbiAgaWYgKGNoYW5nZSkge1xuICAgIHN5bmNPcHRpb25zV2l0aEl0ZW1zKHNlbGYpO1xuICAgIGlmIChtYXRjaCkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIG1hdGNoLCBmYWxzZSk7XG4gICAgaWYgKGNyZWF0YWJsZSAmJiB2YWx1ZSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIHsgdmFsdWUgfSwgZmFsc2UpO1xuICAgIGlmICghbXVsdGlwbGUgJiYgaXRlbXNbMF0pIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1zWzBdKTtcbiAgICBlbHNlIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICAgIHJldHVybiBzcGVhayhfdGV4dHMuaW52YWxpZCk7XG4gIH1cbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykgb3B0LnNlbGVjdGVkID0gb3B0ID09PSBtYXRjaDtcbn07XG52YXIgZGlzcGF0Y2hDaGFuZ2UgPSAoc2VsZiwgaXRlbSwgcmVtb3ZhYmxlID0gdHJ1ZSkgPT4ge1xuICBjb25zdCB7IGNvbnRyb2wsIGl0ZW1zLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgYWRkID0gY3JlYXRlRWxlbWVudChcImRhdGFcIiwgaXRlbS5sYWJlbCB8fCBpdGVtLnZhbHVlLCB7XG4gICAgdmFsdWU6IGl0ZW0udmFsdWVcbiAgfSk7XG4gIGNvbnN0IHJlbW92ZSA9IFsuLi5pdGVtc10uZmluZCgoaSkgPT4gaS52YWx1ZSA9PT0gaXRlbS52YWx1ZSk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IHJlbW92ZSB8fCBhZGQgfTtcbiAgY29uc3Qgc2tpcCA9IHJlbW92ZSAmJiAhcmVtb3ZhYmxlO1xuICBpZiAoc2tpcCkgcmV0dXJuIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICBpZiAoc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImJlZm9yZWNoYW5nZVwiLCBldmVudCkpKSB7XG4gICAgaWYgKCFtdWx0aXBsZSkgZm9yIChjb25zdCBpdGVtMiBvZiBbLi4uaXRlbXNdKSBpdGVtMi5yZW1vdmUoKTtcbiAgICBpZiAocmVtb3ZlKSByZW1vdmUucmVtb3ZlKCk7XG4gICAgZWxzZSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmluc2VydEFkamFjZW50RWxlbWVudChcImJlZm9yZWJlZ2luXCIsIGFkZCk7XG4gICAgc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImFmdGVyY2hhbmdlXCIsIGV2ZW50KSk7XG4gIH1cbn07XG52YXIgb25Gb2N1cyA9IChzZWxmLCB7IHRhcmdldCB9KSA9PiB7XG4gIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgc2VsZi5fZm9jdXMgPSB0YXJnZXQ7XG4gIHNwZWFrKCk7XG59O1xudmFyIG9uQmx1ciA9IChzZWxmKSA9PiBpc01vdXNlRG93bigpIHx8IHNldFRpbWVvdXQob25CbHVycmVkLCAwLCBzZWxmKTtcbnZhciBvbkJsdXJyZWQgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoIXNlbGYuX2ZvY3VzIHx8IHNlbGYuY29udGFpbnMoKF9hMiA9IHNlbGYuX3Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuYWN0aXZlRWxlbWVudCkpIHJldHVybjtcbiAgaWYgKCFzZWxmLm11bHRpcGxlKSBkaXNwYXRjaE1hdGNoKHNlbGYpO1xuICBzZWxmLl9mb2N1cyA9IHZvaWQgMDtcbn07XG52YXIgb25DbGljayA9IChzZWxmLCBldmVudCkgPT4ge1xuICBjb25zdCB7IGNsaWVudFg6IHgsIGNsaWVudFk6IHksIHRhcmdldCB9ID0gZXZlbnQ7XG4gIGNvbnN0IHsgY2xlYXIsIGNvbnRyb2wsIGl0ZW1zIH0gPSBzZWxmO1xuICBpZiAoY2xlYXIgPT0gbnVsbCA/IHZvaWQgMCA6IGNsZWFyLmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICBpZiAoY29udHJvbCkgc2V0VmFsdWUoY29udHJvbCwgXCJcIiwgXCJkZWxldGVDb250ZW50QmFja3dhcmRcIik7XG4gICAgcmV0dXJuIGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuZm9jdXMoKTtcbiAgfVxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9ID0gaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBpZiAoaXRlbS5jb250YWlucyh0YXJnZXQpKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgaXRlbSk7XG4gICAgaWYgKHkgPj0gdG9wICYmIHkgPD0gYm90dG9tICYmIHggPj0gbGVmdCAmJiB4IDw9IHJpZ2h0KSByZXR1cm4gaXRlbS5mb2N1cygpO1xuICB9XG4gIGlmICh0YXJnZXQgPT09IHNlbGYpIGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuZm9jdXMoKTtcbn07XG52YXIgb25JbnB1dCA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IG9wdGlvbnMgPSBbXSwgY29udHJvbCwgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gKChfYTIgPSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKSkgfHwgXCJcIjtcbiAgY29uc3QgaXNDbGljayA9IGV2ZW50IGluc3RhbmNlb2YgSW5wdXRFdmVudCA/ICFldmVudC5pbnB1dFR5cGUgfHwgZXZlbnQuaW5wdXRUeXBlID09PSBcImluc2VydFJlcGxhY2VtZW50VGV4dFwiIDogISF2YWx1ZTtcbiAgaWYgKGlzQ2xpY2spIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoY29udHJvbCkgY29udHJvbC52YWx1ZSA9IHNlbGYuX3ZhbHVlO1xuICAgIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpXG4gICAgICBpZiAob3B0LnZhbHVlICYmIG9wdC52YWx1ZSA9PT0gdmFsdWUpXG4gICAgICAgIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBvcHQsIG11bHRpcGxlKTtcbiAgfSBlbHNlIGlmICghbXVsdGlwbGUpIGRpc3BhdGNoTWF0Y2goc2VsZiwgZmFsc2UpO1xuICBzeW5jQ2xlYXJXaXRoSW5wdXQoc2VsZik7XG59O1xudmFyIG9uS2V5RG93biA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSkgcmV0dXJuO1xuICBjb25zdCB7IGNsZWFyLCBjb250cm9sLCBpdGVtcyB9ID0gc2VsZjtcbiAgY29uc3QgeyBrZXksIHJlcGVhdCwgdGFyZ2V0IH0gPSBldmVudDtcbiAgY29uc3QgaXNDb250cm9sID0gY29udHJvbCAmJiBjb250cm9sID09PSB0YXJnZXQ7XG4gIGNvbnN0IGluVGV4dCA9IGlzQ29udHJvbCAmJiAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5zZWxlY3Rpb25FbmQpO1xuICBsZXQgaW5kZXggPSBpc0NvbnRyb2wgPyBpdGVtcy5sZW5ndGggOiBbLi4uaXRlbXNdLmluZGV4T2YodGFyZ2V0KTtcbiAgaWYgKGlzQ29udHJvbCAmJiBrZXkgPT09IFwiVGFiXCIgJiYgY2xlYXIgJiYgIWNsZWFyLmhpZGRlbikge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY2xlYXIudGFiSW5kZXggPSAtMTtcbiAgICBjbGVhci5mb2N1cygpO1xuICAgIG9uKGNsZWFyLCBcImJsdXJcIiwgKCkgPT4gYXR0cihjbGVhciwgXCJ0YWJpbmRleFwiLCBudWxsKSwgRVZFTlRfT05DRSk7XG4gIH1cbiAgaWYgKCFpc0NvbnRyb2wgJiYgYXNCdXR0b24oZXZlbnQpIHx8IGluZGV4ID09PSAtMSkgcmV0dXJuO1xuICBpZiAoa2V5ID09PSBcIkFycm93UmlnaHRcIiAmJiAhaXNDb250cm9sKSBpbmRleCArPSAxO1xuICBlbHNlIGlmIChrZXkgPT09IFwiQXJyb3dMZWZ0XCIgJiYgIWluVGV4dCkgaW5kZXggLT0gMTtcbiAgZWxzZSBpZiAoa2V5ID09PSBcIkVudGVyXCIgJiYgaXNDb250cm9sKSB7XG4gICAgY29uc3QgZm9ybSA9IGF0dHIoY29udHJvbCwgXCJmb3JtXCIpO1xuICAgIGF0dHIoY29udHJvbCwgXCJmb3JtXCIsIFwiI1wiKTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gYXR0cihjb250cm9sLCBcImZvcm1cIiwgZm9ybSkpO1xuICAgIHJldHVybiBkaXNwYXRjaE1hdGNoKHNlbGYpO1xuICB9IGVsc2UgaWYgKChrZXkgPT09IFwiQmFja3NwYWNlXCIgfHwga2V5ID09PSBcIkRlbGV0ZVwiKSAmJiAhaW5UZXh0KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoIXJlcGVhdCAmJiBpdGVtc1tpbmRleF0pIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtc1tpbmRleF0pO1xuICAgIGlmIChpc0NvbnRyb2wpIGluZGV4IC09IDE7XG4gIH0gZWxzZSByZXR1cm4gaXNDb250cm9sIHx8IChjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCkpO1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAoX2EyID0gaXRlbXNbTWF0aC5tYXgoMCwgaW5kZXgpXSB8fCBjb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1jb21ib2JveFwiLCBVSFRNTENvbWJvYm94RWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MQ29tYm9ib3hFbGVtZW50IH07XG4iLCJpbXBvcnQgeyBjbHN4IH0gZnJvbSBcImNsc3hcIjtcblxuZXhwb3J0IGNvbnN0IFFVSUNLX0VWRU5UID0geyBjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG5leHBvcnQgY29uc3QgSVNfQlJPV1NFUiA9XG5cdHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiO1xuXG4vLyBUT0RPOiBEb2N1bWVudGF0aW9uIGZvciBwcmV0dHlOdW1iZXJcbmxldCBJTlRMX05VTTogSW50bC5OdW1iZXJGb3JtYXQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcHJldHR5TnVtYmVyKG51bWJlcjogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdGlmICghSU5UTF9OVU0pXG5cdFx0SU5UTF9OVU0gPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXG5cdFx0XHQoSVNfQlJPV1NFUiAmJiBhdHRyKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgXCJsYW5nXCIpKSB8fCBcIm5vXCIsXG5cdFx0KTtcblx0cmV0dXJuIElOVExfTlVNLmZvcm1hdChOdW1iZXIobnVtYmVyKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZTxUIGV4dGVuZHMgdW5rbm93bltdPihcblx0Y2FsbGJhY2s6ICguLi5hcmdzOiBUKSA9PiB2b2lkLFxuXHRkZWxheTogbnVtYmVyLFxuKSB7XG5cdGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cblx0cmV0dXJuICguLi5hcmdzOiBUKSA9PiB7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0XHR0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gY2FsbGJhY2soLi4uYXJncyksIGRlbGF5KTtcblx0fTtcbn1cblxuLyoqXG4gKiBhdHRyXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IGdldCwgc2V0IGFuZCByZW1vdmUgYXR0cmlidXRlc1xuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIG5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lIHRvIGdldCwgc2V0IG9yIHJlbW92ZSwgb3IgYSBvYmplY3QgdG8gc2V0IG11bHRpcGxlIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB2YWx1ZSBBIHZhbGlkIGF0dHJpYnV0ZSB2YWx1ZSBvciBudWxsIHRvIHJlbW92ZSBhdHRyaWJ1dGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dHIoXG5cdGVsOiBFbGVtZW50LFxuXHRuYW1lOiBzdHJpbmcsXG5cdHZhbHVlPzogc3RyaW5nIHwgbnVsbCxcbik6IHN0cmluZyB8IG51bGwge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKSA/PyBudWxsOyAvLyBGYWxsYmFjayB0byBudWxsIG9ubHkgaWYgZWwgaXMgdW5kZWZpbmVkXG5cdGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuXHRyZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiB1c2VJZFxuICogQHJldHVybiBBIGdlbmVyYXRlZCB1bmlxdWUgSURcbiAqL1xubGV0IGlkID0gMDtcbmNvbnN0IFVVSUQgPSBgJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDUpfWA7XG5leHBvcnQgZnVuY3Rpb24gdXNlSWQoZWw6IEVsZW1lbnQpIHtcblx0aWYgKCFlbC5pZCkgZWwuaWQgPSBgJHtVVUlEfSR7KytpZH1gO1xuXHRyZXR1cm4gZWwuaWQ7XG59XG5cbi8vIEludGVybmFsIGhlbHBlciBmb3Igb24gLyBvZmZcbmNvbnN0IGV2ZW50cyA9IChcblx0YWN0aW9uOiBcImFkZFwiIHwgXCJyZW1vdmVcIixcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0cmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj4sXG4pOiB2b2lkID0+IHtcblx0Zm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG5cdFx0cmVzdFswXSA9IHR5cGU7XG5cdFx0ZWxlbWVudFtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdKC4uLnJlc3QpO1xuXHR9XG59O1xuXG4vKipcbiAqIG9uXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9uID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG5cbi8qKlxuICogb2ZmXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9mZiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xuXG4vKipcbiAqIFNjcm9sbGVyIHRhcmdlcyBoZWxwaW5nIGFuY2hvclBvc2l0aW9uXG4gKi9cbmNvbnN0IFNDUk9MTEVSID0gSVNfQlJPV1NFUiA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikgOiBudWxsOyAvLyBVc2VkIHRvIGVuc3VyZSB3ZSBoYXZlIHNjcm9sbGFiaWxpdHkgdW5kZXJcbmNvbnN0IFRBUkdFVFMgPSBuZXcgTWFwPEVsZW1lbnQsICgpID0+IHZvaWQ+KCk7IC8vIFN0b3JlIGN1cnJlbnQgb3BlbiBwb3BwZXJzIGFuZCB0aGVpciB1cGRhdGUgZnVuY3Rpb25zXG5jb25zdCBUQVJHRVRTX1VQREFURSA9ICgpID0+IHtcblx0Zm9yIChjb25zdCBbXywgdXBkYXRlXSBvZiBUQVJHRVRTKSB1cGRhdGUoKTtcbn07XG5cbmlmIChTQ1JPTExFUikge1xuXHRTQ1JPTExFUi5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtwYWRkaW5nOjFweDt0b3A6MDtsZWZ0OjBweFwiO1xuXHRvbih3aW5kb3csIFwibG9hZCxyZXNpemUsc2Nyb2xsXCIsIFRBUkdFVFNfVVBEQVRFLCBRVUlDS19FVkVOVCk7XG59XG5cbi8qKlxuICogYW5jaG9yUG9zaXRpb25cbiAqIEBwYXJhbSB0YXJnZXQgVGhlIEVsZW1lbnQgdG8gcG9zaXRpb25cbiAqIEBwYXJhbSBhbmNob3IgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIGFuY2hvclxuICovXG5jb25zdCBQT1NJVElPTiA9IHsgdG9wOiAwLCByaWdodDogMSwgYm90dG9tOiAyLCBsZWZ0OiAzIH07IC8vIFNwZWVkIHVwIGJ5IHVzaW5nIGEgY29uc3QgbWFwXG5cbmV4cG9ydCB0eXBlIEFuY2hvclBvc2l0aW9uID0ga2V5b2YgdHlwZW9mIFBPU0lUSU9OO1xuXG5leHBvcnQgZnVuY3Rpb24gYW5jaG9yUG9zaXRpb24oXG5cdHRhcmdldDogSFRNTEVsZW1lbnQsXG5cdGFuY2hvcjogRWxlbWVudCB8IGZhbHNlLFxuXHRwbGFjZT86IHN0cmluZyB8IG51bWJlcixcblx0Zm9yY2U/OiBib29sZWFuLFxuKSB7XG5cdGNvbnN0IHBvc2l0aW9uID1cblx0XHRQT1NJVElPTltwbGFjZSBhcyBrZXlvZiB0eXBlb2YgUE9TSVRJT05dID8/XG5cdFx0TnVtYmVyKHBsYWNlKSA/P1xuXHRcdFBPU0lUSU9OLmJvdHRvbTtcblxuXHRpZiAoYW5jaG9yID09PSBmYWxzZSB8fCAhYW5jaG9yLmlzQ29ubmVjdGVkIHx8ICF0YXJnZXQuaXNDb25uZWN0ZWQpXG5cdFx0cmV0dXJuIFRBUkdFVFMuZGVsZXRlKHRhcmdldCk7IC8vIFN0b3Agd2F0Y2hpbmcgaWYgYW5jaG9yIGlzIHJlbW92ZWQgZnJvbSBET01cblx0aWYgKCFTQ1JPTExFUj8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFNDUk9MTEVSIHx8IFwiXCIpOyAvLyBFbnN1cmUgd2UgaGF2ZSB0aGUgc2Nyb2xsZXJcblx0aWYgKCFUQVJHRVRTLmhhcyh0YXJnZXQpKVxuXHRcdFRBUkdFVFMuc2V0KHRhcmdldCwgKCkgPT4gYW5jaG9yUG9zaXRpb24odGFyZ2V0LCBhbmNob3IsIHBvc2l0aW9uLCBmb3JjZSkpO1xuXG5cdGNvbnN0IGlzSFRNTEFuY2hvciA9IGFuY2hvciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OyAvLyBTVkcgb3IgWE1MIGVsZW1lbnRzIGRvZXMgbm90IGhhdmUgb2Zmc2V0V2lkdGggb3Igb2Zmc2V0SGVpZ2h0XG5cdGNvbnN0IHsgb2Zmc2V0V2lkdGg6IHRhcmdldFcsIG9mZnNldEhlaWdodDogdGFyZ2V0SCB9ID0gdGFyZ2V0O1xuXHRjb25zdCBhbmNob3JXID0gaXNIVE1MQW5jaG9yID8gYW5jaG9yLm9mZnNldFdpZHRoIDogYW5jaG9yLmNsaWVudFdpZHRoO1xuXHRjb25zdCBhbmNob3JIID0gaXNIVE1MQW5jaG9yID8gYW5jaG9yLm9mZnNldEhlaWdodCA6IGFuY2hvci5jbGllbnRIZWlnaHQ7XG5cdGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wIH0gPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0Ly8gR2V0IHZpc3VhbCB2aWV3cG9ydCBpbmZvXG5cdGNvbnN0IHZpZXdXID0gd2luZG93LnZpc3VhbFZpZXdwb3J0Py53aWR0aCB8fCB3aW5kb3cuaW5uZXJXaWR0aDtcblx0Y29uc3Qgdmlld0ggPSB3aW5kb3cudmlzdWFsVmlld3BvcnQ/LmhlaWdodCB8fCB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdGNvbnN0IHNjcm9sbFggPSB3aW5kb3cucGFnZVhPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XG5cdGNvbnN0IHNjcm9sbFkgPSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcblxuXHRjb25zdCBhbmNob3JYID0gTWF0aC5yb3VuZChsZWZ0IC0gKGFuY2hvclcgLSB3aWR0aCkgLyAyKTsgLy8gQ29ycmVjdCBmb3IgQ1NTIHRyYW5zZm9ybSBzY2FsZVxuXHRjb25zdCBhbmNob3JZID0gTWF0aC5yb3VuZCh0b3AgLSAoYW5jaG9ySCAtIGhlaWdodCkgLyAyKTsgLy8gQ29ycmVjdCBmb3IgQ1NTIHRyYW5zZm9ybSBzY2FsZVxuXHRjb25zdCBjZW50ZXJYID0gTWF0aC5taW4oXG5cdFx0TWF0aC5tYXgoMTAsIGFuY2hvclggLSAodGFyZ2V0VyAtIGFuY2hvclcpIC8gMiksXG5cdFx0dmlld1cgLSB0YXJnZXRXIC0gMTAsXG5cdCk7XG5cdGNvbnN0IGNlbnRlclkgPSBNYXRoLm1pbihcblx0XHRNYXRoLm1heCgxMCwgYW5jaG9yWSAtICh0YXJnZXRIIC0gYW5jaG9ySCkgLyAyKSxcblx0XHR2aWV3SCAtIHRhcmdldEggLSAxMCxcblx0KTtcblxuXHQvLyBVc2UgdmlzdWFsIHZpZXdwb3J0IGRpbWVuc2lvbnMgZm9yIHNwYWNlIGNhbGN1bGF0aW9uc1xuXHRjb25zdCBoYXNTcGFjZUxlZnQgPSBhbmNob3JYIC0gdGFyZ2V0VyA+IDA7XG5cdGNvbnN0IGhhc1NwYWNlUmlnaHQgPSBhbmNob3JYICsgYW5jaG9yVyArIHRhcmdldFcgPCB2aWV3Vztcblx0Y29uc3QgaGFzU3BhY2VPdmVyID0gYW5jaG9yWSAtIHRhcmdldEggPiAwO1xuXHRjb25zdCBoYXNTcGFjZVVuZGVyID0gYW5jaG9yWSArIGFuY2hvckggKyB0YXJnZXRIIDwgdmlld0g7XG5cblx0Y29uc3QgaXNWZXJ0aWNhbCA9IHBvc2l0aW9uID09PSBQT1NJVElPTi50b3AgfHwgcG9zaXRpb24gPT09IFBPU0lUSU9OLmJvdHRvbTtcblx0Y29uc3QgaXNSaWdodCA9XG5cdFx0KHBvc2l0aW9uID09PSBQT1NJVElPTi5yaWdodCAmJiAoZm9yY2UgfHwgaGFzU3BhY2VSaWdodCkpIHx8ICFoYXNTcGFjZUxlZnQ7IC8vIEFsd2F5cyBwb3NpdGlvbiByaWdodCB3aGVuIG5vIGhhc1NwYWNlTGVmdCwgYXMgbm8gT1Mgc2Nyb2xscyBmdXJ0aGVyIGxlZnQgdGhhbiAwXG5cdGNvbnN0IGlzVW5kZXIgPVxuXHRcdChwb3NpdGlvbiA9PT0gUE9TSVRJT04uYm90dG9tICYmIChmb3JjZSB8fCBoYXNTcGFjZVVuZGVyKSkgfHwgIWhhc1NwYWNlT3ZlcjsgLy8gQWx3YXlzIHBvc2l0aW9uIHVuZGVyIHdoZW4gbm8gaGFzU3BhY2VPdmVyLCBhcyBubyBPUyBzY3JvbGxzIGZ1cnRoZXIgdXAgdGhhbiAwXG5cblx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9ucyBpbiB2aWV3cG9ydCBjb29yZGluYXRlc1xuXHRjb25zdCB2aWV3WCA9IE1hdGgucm91bmQoXG5cdFx0aXNWZXJ0aWNhbCA/IGNlbnRlclggOiBpc1JpZ2h0ID8gYW5jaG9yWCArIGFuY2hvclcgOiBhbmNob3JYIC0gdGFyZ2V0Vyxcblx0KTtcblx0Y29uc3Qgdmlld1kgPSBNYXRoLnJvdW5kKFxuXHRcdGlzVmVydGljYWwgPyAoaXNVbmRlciA/IGFuY2hvclkgKyBhbmNob3JIIDogYW5jaG9yWSAtIHRhcmdldEgpIDogY2VudGVyWSxcblx0KTtcblxuXHQvLyBVc2UgYWJzb2x1dGUgcG9zaXRpb25pbmdcblx0dGFyZ2V0LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXHR0YXJnZXQuc3R5bGUubGVmdCA9IGAke3ZpZXdYICsgc2Nyb2xsWH1weGA7XG5cdHRhcmdldC5zdHlsZS50b3AgPSBgJHt2aWV3WSArIHNjcm9sbFl9cHhgO1xuXG5cdFNDUk9MTEVSPy5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcInRyYW5zbGF0ZVwiLFxuXHRcdGAwcHggJHtNYXRoLnJvdW5kKGlzVW5kZXIgPyBzY3JvbGxYICsgYW5jaG9yWSArIGFuY2hvckggKyB0YXJnZXRIICsgMzAgOiAwKX1weGAsXG5cdCk7XG59XG5cbi8qKlxuICogU3BlZWQgdXAgTXV0YXRpb25PYnNlcnZlciBieSBkZWJvdW5jaW5nIGFuZCBvbmx5IHJ1bm5pbmcgd2hlbiBwYWdlIGlzIHZpc2libGVcbiAqIEByZXR1cm4gbmV3IE11dGFpb25PYnNlcnZlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjazogTXV0YXRpb25DYWxsYmFjaykge1xuXHRsZXQgcXVldWUgPSAwO1xuXG5cdGNvbnN0IG9uRnJhbWUgPSAoKSA9PiBzZXRUaW1lb3V0KG9uVGltZXIsIDIwMCk7IC8vIFVzZSBib3RoIHJlcXVlc3RBbmltYXRpb25GcmFtZSBhbmQgc2V0VGltZW91dCB0byBkZWJvdW5jZSBhbmQgb25seSBydW4gd2hlbiB2aXNpYmxlXG5cdGNvbnN0IG9uVGltZXIgPSAoKSA9PiB7XG5cdFx0Y2FsbGJhY2soW10sIG9ic2VydmVyKTtcblx0XHRvYnNlcnZlci50YWtlUmVjb3JkcygpOyAvLyBDbGVhciByZWNvcmRzIHRvIGF2b2lkIHJ1bm5pbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcblx0XHRxdWV1ZSA9IDA7XG5cdH07XG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdGlmICghcXVldWUpIHF1ZXVlID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKG9uRnJhbWUpO1xuXHR9KTtcblxuXHRyZXR1cm4gb2JzZXJ2ZXI7XG59XG5cbi8qKlxuICogb25NdXRhdGlvblxuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBvYnNlcnZlIG11dGF0aW9ucyBvbiBhIHNwZWNpZmljIGNsYXNzIG5hbWVcbiAqIEBwYXJhbSBlbCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSBjbGFzc05hbWUgVGhlIGNsYXNzIG5hbWUgdG8gb2JzZXJ2ZVxuICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBydW4gd2hlbiBtdXRhdGlvbnMgYXJlIGRldGVjdGVkXG4gKi9cbmNvbnN0IE1VVEFUT1JTID0gbmV3IFdlYWtNYXA8RWxlbWVudCwgQXJyYXk8KCkgPT4gdm9pZD4+KCk7XG5leHBvcnQgY29uc3Qgb25NdXRhdGlvbiA9IDxUIGV4dGVuZHMgRWxlbWVudD4oXG5cdGVsOiBFbGVtZW50LFxuXHRjbGFzc05hbWU6IHN0cmluZyxcblx0Y2FsbGJhY2s6IChlbGVtczogSFRNTENvbGxlY3Rpb25PZjxUPikgPT4gdm9pZCxcbikgPT4ge1xuXHRjb25zdCBlbGVtcyA9IGVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcblx0Y29uc3QgbXV0YXRvciA9IE1VVEFUT1JTLmdldChlbCkgfHwgW107XG5cblx0aWYgKCFtdXRhdG9yLmxlbmd0aCkge1xuXHRcdE1VVEFUT1JTLnNldChlbCwgbXV0YXRvcik7XG5cdFx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcigoXywgb2JzZXJ2ZXIpID0+IHtcblx0XHRcdGlmIChlbC5pc0Nvbm5lY3RlZCAmJiBtdXRhdG9yPy5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBjYWxsYmFjayBvZiBtdXRhdG9yKSBjYWxsYmFjaygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0TVVUQVRPUlMuZGVsZXRlKGVsKTtcblx0XHRcdH1cblx0XHR9KS5vYnNlcnZlKGVsLCB7XG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFtcImNsYXNzXCIsIFwiaGlkZGVuXCJdLFxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0fSk7XG5cdH1cblx0bXV0YXRvci5wdXNoKCgpID0+IGNhbGxiYWNrKGVsZW1zIGFzIEhUTUxDb2xsZWN0aW9uT2Y8VD4pKTtcbn07XG5cbi8qKlxuICogb25Mb2FkZWRcbiAqIEBkZXNjcmlwdGlvbiBSdW5zIGEgY2FsbGJhY2sgd2hlbiB3aW5kb3cgaXMgbG9hZGVkIGluIGJyb3dzZXJcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gdGhlIHBhZ2UgaXMgcmVhZHlcbiAqL1xuZXhwb3J0IGNvbnN0IG9uTG9hZGVkID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XG5cdGlmICghSVNfQlJPV1NFUikgcmV0dXJuO1xuXHRjb25zdCBydW4gPSAoKSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spOyAvLyBFbnN1cmUgd2UgcnVuIGFmdGVyIGFsbCBvdGhlciBsb2FkIGV2ZW50c1xuXHRpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSBydW4oKTtcblx0ZWxzZSBvbih3aW5kb3csIFwibG9hZFwiLCBydW4pO1xufTtcblxuLyoqXG4gKiBpc0lucHV0TGlrZVxuICogQGRlc2NyaXB0aW9uIENoZWNrIGlmIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKiBAcGFyYW0gZWwgVGhlIGVsZW1lbnQgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKi9cbmV4cG9ydCBjb25zdCBpc0lucHV0TGlrZSA9IChlbDogdW5rbm93bik6IGVsIGlzIEhUTUxJbnB1dEVsZW1lbnQgPT5cblx0ZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcInZhbGlkaXR5XCIgaW4gZWwgJiZcblx0IShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KTtcblxuLyoqXG4gKiB0b0N1c3RvbUVsZW1lbnRQcm9wc1xuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBjb252ZXJ0IHByb3BzIHRvIGN1c3RvbSBlbGVtZW50IGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcHMgdG8gY29udmVydFxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBwcm9wc1xuICovXG5leHBvcnQgY29uc3QgdG9DdXN0b21FbGVtZW50UHJvcHMgPSAoXG5cdHsgY2xhc3NOYW1lLCBoaWRkZW4sIG9wZW4sIC4uLnJlc3QgfTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGtsYXNzPzogc3RyaW5nLFxuKSA9PiB7XG5cdHJlc3Quc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nID0gdHJ1ZTsgLy8gTWFrZSBOZXh0LmpzIGhhcHB5XG5cdHJlc3QuY2xhc3MgPSBjbHN4KGtsYXNzLCBjbGFzc05hbWUgfHwgXCJcIikgfHwgdW5kZWZpbmVkOyAvLyBVc2UgY2xhc3MgaW5zdGVhZCBvZiBjbGFzc05hbWVcblx0aWYgKGhpZGRlbikgcmVzdC5oaWRkZW4gPSB0cnVlOyAvLyBFbnN1cmUgYm9vbGVhbiBwcm9wIGJlaGF2aW91clxuXHRpZiAob3BlbikgcmVzdC5vcGVuID0gdHJ1ZTsgLy8gRW5zdXJlIGJvb2xlYW4gcHJvcCBiZWhhdmlvdXJcblx0cmV0dXJuIHJlc3Q7XG59O1xuIiwiaW1wb3J0IHsgSVNfQlJPV1NFUiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBNQVRPTU8gPSBcIm1hdHRpbHN5bmV0Lm1hdG9tby5jbG91ZFwiO1xubGV0IEVOQUJMRUQ6IEFuYWx5dGljc0FjdGlvbnNbXCJpbml0XCJdW1wiZW5hYmxlZFwiXSA9IHRydWU7XG5cbnR5cGUgTWF0b21vID0gKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4pW107XG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBXaW5kb3cge1xuXHRcdF9wYXE/OiBNYXRvbW9bXTtcblx0XHRfbXRtPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPltdO1xuXHR9XG59XG5cbi8vIHdpbmRvdy5fcGFxID0gd2luZG93Ll9wYXEgfHwgW107XG4vLyB3aW5kb3cuX210bSA9IHdpbmRvdy5fbXRtIHx8IFtdO1xuXG4vLyB3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCBgJHtkb2N1bWVudC5sb2NhdGlvbi5ocmVmfSZlaXJpa2BdKTtcbi8vIHdpbmRvdy5fcGFxLnB1c2goW1wic2V0RG9jdW1lbnRUaXRsZVwiLCBcIkVpcmlrIDNcIl0pO1xuLy8gd2luZG93Ll9tdG0ucHVzaCh7XG4vLyBcdGV2ZW50OiBcIm10bS5TdGFydFwiLFxuLy8gXHRcIm10bS5zdGFydFRpbWVcIjogbmV3IERhdGUoKS5nZXRUaW1lKCksXG4vLyBcdGN1c3RvbVRpdGxlOiBcIkVpcmlrIDFcIixcbi8vIFx0Y3VzdG9tVXJsOiBgJHtkb2N1bWVudC5sb2NhdGlvbi5ocmVmfSZlaXJpa2AsXG4vLyB9KTtcblxuLy8gd2luZG93Ll9tdG0ucHVzaCh7XG4vLyBcdGV2ZW50OiBcIm10bS5QYWdlVmlld1wiLFxuLy8gXHRjdXN0b21UaXRsZTogXCJFaXJpayAyXCIsXG4vLyBcdGN1c3RvbVVybDogYCR7ZG9jdW1lbnQubG9jYXRpb24uaHJlZn0mZWlyaWtgLFxuLy8gfSk7XG5cbi8vIGNvbnN0IGNvbnRhaW5lcklkID0gXCJBOXV0S2szT1wiO1xuXG4vLyBkb2N1bWVudC5oZWFkLmFwcGVuZChcbi8vIFx0T2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpLCB7XG4vLyBcdFx0c3JjOiBgaHR0cHM6Ly9jZG4ubWF0b21vLmNsb3VkL21hdHRpbHN5bmV0Lm1hdG9tby5jbG91ZC9jb250YWluZXJfJHtjb250YWluZXJJZH0uanNgLFxuLy8gXHRcdGFzeW5jOiB0cnVlLFxuLy8gXHRcdG9ubG9hZDogKCkgPT4gY29uc29sZS5sb2cod2luZG93Ll9wYXEpLFxuLy8gXHR9KSxcbi8vICk7XG5cbmV4cG9ydCB0eXBlIEFuYWx5dGljc0FjdGlvbnMgPSB7XG5cdGluaXQ6IHtcblx0XHRtYXRvbW9JZDogbnVtYmVyIHwgc3RyaW5nO1xuXHRcdGVuYWJsZWQ/OiBib29sZWFuIHwgXCJkZWJ1Z1wiO1xuXHR9O1xuXHRwYWdldmlldzoge1xuXHRcdHVybD86IHN0cmluZztcblx0XHR0aXRsZT86IHN0cmluZztcblx0fTtcblx0ZXZlbnQ6IHtcblx0XHRjYXRlZ29yeTogc3RyaW5nO1xuXHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdG5hbWU/OiBzdHJpbmc7XG5cdFx0dmFsdWU/OiBudW1iZXI7XG5cdH07XG5cdHNlYXJjaDoge1xuXHRcdHF1ZXJ5OiBzdHJpbmc7XG5cdFx0Y2F0ZWdvcnk/OiBzdHJpbmc7XG5cdFx0cmVzdWx0cz86IG51bWJlcjtcblx0fTtcblx0bWF0b21vOiBNYXRvbW87XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYW5hbHl0aWNzPEFjdGlvbiBleHRlbmRzIGtleW9mIEFuYWx5dGljc0FjdGlvbnM+KFxuXHRhY3Rpb246IEFjdGlvbixcblx0YXJncyA9IHt9IGFzIEFuYWx5dGljc0FjdGlvbnNbQWN0aW9uXSxcbikge1xuXHRpZiAoIUlTX0JST1dTRVIpIHJldHVybjtcblx0aWYgKCF3aW5kb3cuX3BhcSkge1xuXHRcdHdpbmRvdy5fcGFxID0gW107XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJIZWF0bWFwU2Vzc2lvblJlY29yZGluZzo6ZGlzYWJsZVwiXSk7IC8vIERpc2FibGUgaGVhdG1hcHMgYnkgZGVmYXVsdCBhcyB0aGlzIHJlcXVpcmUgY29va2llc1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wiZW5hYmxlTGlua1RyYWNraW5nXCJdKTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldFRyYWNrZXJVcmxcIiwgYGh0dHBzOi8vJHtNQVRPTU99L21hdG9tby5waHBgXSk7XG5cdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc2NyaXB0W3NyYyo9XCJtYXRvbW8uanNcIl0nKSB8fFxuXHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmQoXG5cdFx0XHRcdE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSwge1xuXHRcdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRcdHNyYzogYGh0dHBzOi8vY2RuLm1hdG9tby5jbG91ZC8ke01BVE9NT30vbWF0b21vLmpzYCxcblx0XHRcdFx0fSksXG5cdFx0XHQpO1xuXHR9XG5cdGlmIChhY3Rpb24gPT09IFwiaW5pdFwiKSB7XG5cdFx0Y29uc3QgeyBtYXRvbW9JZCwgZW5hYmxlZCA9IHRydWUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcImluaXRcIl07XG5cdFx0RU5BQkxFRCA9IGVuYWJsZWQ7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRTaXRlSWRcIiwgbWF0b21vSWRdKTtcblx0fVxuXG5cdGlmIChFTkFCTEVEID09PSBcImRlYnVnXCIpIHJldHVybiBjb25zb2xlLmluZm8oYEFuYWx5dGljczogXCIke2FjdGlvbn1cImAsIGFyZ3MpO1xuXHRpZiAoRU5BQkxFRCA9PT0gZmFsc2UgfHwgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lID09PSBcImxvY2FsaG9zdFwiKSByZXR1cm47XG5cblx0aWYgKGFjdGlvbiA9PT0gXCJwYWdldmlld1wiKSB7XG5cdFx0Y29uc3QgeyB1cmwsIHRpdGxlIH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJwYWdldmlld1wiXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCB1cmwgfHwgbG9jYXRpb24uaHJlZl0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0RG9jdW1lbnRUaXRsZVwiLCB0aXRsZSB8fCBkb2N1bWVudC50aXRsZV0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1widHJhY2tQYWdlVmlld1wiXSk7XG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcImV2ZW50XCIpIHtcblx0XHRjb25zdCB7IGNhdGVnb3J5LCBhY3Rpb24sIG5hbWUsIHZhbHVlIH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJldmVudFwiXTtcblx0XHRjb25zdCBldmVudCA9IFtcInRyYWNrRXZlbnRcIiwgY2F0ZWdvcnksIGFjdGlvbiwgbmFtZSwgdmFsdWVdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goZXZlbnQuZmlsdGVyKCh2KSA9PiB2ICE9PSB1bmRlZmluZWQpKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwic2VhcmNoXCIpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRxdWVyeSxcblx0XHRcdGNhdGVnb3J5ID0gZmFsc2UsXG5cdFx0XHRyZXN1bHRzID0gZmFsc2UsXG5cdFx0fSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInNlYXJjaFwiXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInRyYWNrU2l0ZVNlYXJjaFwiLCBxdWVyeSwgY2F0ZWdvcnksIHJlc3VsdHNdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwibWF0b21vXCIpIHtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcIm1hdG9tb1wiXSk7XG5cdH1cbn1cbiIsImNvbnN0IGdldFN0ZXBzID0gKFxuXHRub3c6IG51bWJlcixcblx0bWF4OiBudW1iZXIsXG5cdHNob3cgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXG4pID0+IHtcblx0Y29uc3Qgb2Zmc2V0ID0gKHNob3cgLSAxKSAvIDI7XG5cdGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoTWF0aC5taW4obm93IC0gTWF0aC5mbG9vcihvZmZzZXQpLCBtYXggLSBzaG93ICsgMSksIDEpO1xuXHRjb25zdCBlbmQgPSBNYXRoLm1pbihNYXRoLm1heChub3cgKyBNYXRoLmNlaWwob2Zmc2V0KSwgc2hvdyksIG1heCk7XG5cdGNvbnN0IHBhZ2VzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogZW5kICsgMSAtIHN0YXJ0IH0sIChfLCBpKSA9PiBpICsgc3RhcnQpO1xuXG5cdGlmIChzaG93ID4gNCAmJiBzdGFydCA+IDEpIHBhZ2VzLnNwbGljZSgwLCAyLCAxLCAwKTtcblx0aWYgKHNob3cgPiAzICYmIGVuZCA8IG1heCkgcGFnZXMuc3BsaWNlKC0yLCAyLCAwLCBtYXgpO1xuXHRyZXR1cm4gcGFnZXM7XG59O1xuXG5leHBvcnQgY29uc3QgcGFnaW5hdGlvbiA9ICh7IGN1cnJlbnQgPSAxLCB0b3RhbCA9IDEwLCBzaG93ID0gNyB9KSA9PiAoe1xuXHRwcmV2OiBjdXJyZW50ID4gMSA/IGN1cnJlbnQgLSAxIDogMCxcblx0bmV4dDogY3VycmVudCA8IHRvdGFsID8gY3VycmVudCArIDEgOiAwLFxuXHRwYWdlczogZ2V0U3RlcHMoY3VycmVudCwgdG90YWwsIHNob3cpLm1hcCgocGFnZSwgaW5kZXgpID0+ICh7XG5cdFx0Y3VycmVudDogcGFnZSA9PT0gY3VycmVudCAmJiAoXCJwYWdlXCIgYXMgY29uc3QpLFxuXHRcdGtleTogYGtleS0ke3BhZ2V9LSR7aW5kZXh9YCxcblx0XHRwYWdlLFxuXHR9KSksXG59KTtcbiIsImlmIChcblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHR3aW5kb3cuQ1NTU3R5bGVTaGVldCAmJlxuXHRkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHNcbilcblx0KCgpID0+IHtcblx0XHRjb25zdCBrZXkgPSBcIi0tbXRkcy1hcHAtZXhwYW5kZWRcIjtcblx0XHRjb25zdCBzaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cdFx0Y29uc3QgcHJldiA9ICgpID0+ICF3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KT8uaW5jbHVkZXMoXCJmYWxzZVwiKTtcblxuXHRcdGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKHNoZWV0KTtcblx0XHR3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkID0gKGZvcmNlKSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBuZXh0ID0gZm9yY2UgPz8gIXByZXYoKTtcblx0XHRcdFx0c2hlZXQucmVwbGFjZVN5bmM/LihgOnJvb3QgeyAke2tleX06IHZhcigke2tleX0tLSR7bmV4dH0pfWApO1xuXHRcdFx0XHR3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBuZXh0KTtcblx0XHRcdH0gY2F0Y2ggKF9lcnIpIHt9IC8vIGxvY2FsU3RvcmFnZSBpcyBmdWxsIG9yIHJlcGxhY2VTeW5jIGlzIG5vdCBzdXBwb3J0ZWRcblx0XHR9O1xuXG5cdFx0Ly8gU2V0IGFuZCBzdG9yZSBpbml0aWFsIHN0YXRlXG5cdFx0d2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZChwcmV2KCkpO1xuXHR9KSgpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGRlYm91bmNlLCBvbiwgb25Mb2FkZWQsIG9uTXV0YXRpb24sIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgXCIuL2FwcC10b2dnbGVcIjtcblxuY29uc3QgQ1NTX0FQUCA9IHN0eWxlcy5hcHAuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1NUSUNLWSA9IHN0eWxlcy5zdGlja3kuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1RPR0dMRSA9ICdbZGF0YS1jb21tYW5kPVwidG9nZ2xlLWFwcC1leHBhbmRlZFwiXSc7XG5jb25zdCBDU1NfU0lERUJBUiA9IGAuJHtDU1NfQVBQfSA+IGRpYWxvZywuJHtDU1NfQVBQfSBkaWFsb2cgfiBtYWluYDtcblxuY29uc3QgdXNlVHJhbnNpdGlvbiA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuXHRpZiAoIWRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24pIGNhbGxiYWNrKCk7XG5cdGVsc2UgZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbihjYWxsYmFjayk7XG59O1xuXG5leHBvcnQgY29uc3QgdG9nZ2xlQXBwRXhwYW5kZWQgPSAoZm9yY2U/OiBib29sZWFuKSA9PlxuXHQvLyBAdHMtZXhwZWN0LWVycm9yIHdpbmRvdy5tdGRzQXBwVG9nZ2xlIGNvbWVzIGZyb20gYXBwLXRvZ2dsZS5qc1xuXHR1c2VUcmFuc2l0aW9uKCgpID0+IHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQ/Lihmb3JjZSkpO1xuXG5mdW5jdGlvbiBoYW5kbGVUb2dnbGVDbGljayh7IHRhcmdldDogZWwsIGRlZmF1bHRQcmV2ZW50ZWQ6IHN0b3AgfTogRXZlbnQpIHtcblx0aWYgKHN0b3AgfHwgIShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSB8fCAhZWwubWF0Y2hlcyhDU1NfVE9HR0xFKSlcblx0XHRyZXR1cm47XG5cdGlmIChnZXRDb21wdXRlZFN0eWxlKGVsKS5wb3NpdGlvbiA9PT0gXCJzdGlja3lcIikgcmV0dXJuIHRvZ2dsZUFwcEV4cGFuZGVkKCk7XG5cdHVzZVRyYW5zaXRpb24oKCkgPT4ge1xuXHRcdGNvbnN0IHNpZGViYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaWFsb2dFbGVtZW50PihDU1NfU0lERUJBUik7XG5cdFx0c2lkZWJhcj8uc2V0QXR0cmlidXRlKFwiZGF0YS1jbG9zZWRieVwiLCBcImFueVwiKTsgLy8gQWxsb3cgY2xvc2luZyBieSBjbGlja2luZyBvdXRzaWRlXG5cdFx0c2lkZWJhcj8uc2hvd01vZGFsKCk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVSZXNpemUoKSB7XG5cdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpYWxvZ0VsZW1lbnQ+KENTU19TSURFQkFSKT8uY2xvc2UoKTtcbn1cblxuLy8gU2Nyb2xsIHN0YXRlXG5sZXQgTUlOX1kgPSAwOyAvLyBPZmZzZXQgdG8gYXZvaWQgc2Nyb2xsIGp1bXAgd2hlbiBzdGlja3kgaXMgc2V0IHRvIHJlbGF0aXZlXG5sZXQgU0NST0xMX1VQOiBib29sZWFuO1xubGV0IFNUSUNLID0gMDsgLy8gLTEgPSBzdGljayB0b3AsIDAgPSByZWxhdGl2ZSwgMSA9IHN0aWNrIGJvdHRvbVxubGV0IFNUSUNLX0VMOiBIVE1MRWxlbWVudDtcbmxldCBTVElDS19IID0gMDtcbmxldCBTVElDS19ZID0gMDtcbmxldCBTVFVDSyA9IGZhbHNlOyAvLyBVc2VkIHRvIGZpZ3VyZSBpZiBuYXYgaXMgbGFyZ2VyIHRoYW4gdmlld3BvcnRcbmxldCBXSU5fSCA9IDA7XG5sZXQgV0lOX1kgPSAwO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihbc3RpY2t5XTogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0U1RJQ0tfRUwgPSBzdGlja3k7XG5cdGhhbmRsZVNjcm9sbCgpOyAvLyBSdW4gb24gY29ubmVjdFxufVxuXG5mdW5jdGlvbiBoYW5kbGVTY3JvbGwoKSB7XG5cdGlmICghU1RJQ0tfRUw/LmlzQ29ubmVjdGVkKSByZXR1cm47XG5cdGNvbnN0IE5FWFRfWSA9IHdpbmRvdy5zY3JvbGxZO1xuXHRjb25zdCBORVhUX1VQID0gTkVYVF9ZIDwgV0lOX1k7XG5cdFdJTl9ZID0gTkVYVF9ZO1xuXG5cdC8vIE9ubHkgY2FsY3VsYXRlIGlmIHNjcm9sbCBkaXJlY3Rpb24gaGFzIGNoYW5nZWRcblx0aWYgKE5FWFRfVVAgIT09IFNDUk9MTF9VUCkge1xuXHRcdE1JTl9ZID0gKFNUSUNLX0VMLnBhcmVudEVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCB8fCAwKSArIFdJTl9ZO1xuXHRcdFNDUk9MTF9VUCA9IE5FWFRfVVA7XG5cdFx0U1RJQ0tfSCA9IFNUSUNLX0VMLm9mZnNldEhlaWdodDtcblx0XHRTVElDS19ZID0gU1RJQ0tfRUwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgV0lOX1k7XG5cdFx0U1RVQ0sgPSBTVElDS19FTC5vZmZzZXRIZWlnaHQgPD0gd2luZG93LmlubmVySGVpZ2h0O1xuXHRcdFdJTl9IID0gd2luZG93LmlubmVySGVpZ2h0O1xuXHR9XG5cblx0aWYgKFNUSUNLID09PSAtMSAmJiBTVFVDSykgcmV0dXJuOyAvLyBBbGx3YXlzIHN0aWNreSB3aGVuIHNpZGViYXIgaXMgc21hbGxlciB0aGFuIHZpZXdwb3J0XG5cdGlmIChTVElDSyAhPT0gLTEgJiYgKFNUVUNLIHx8IChTQ1JPTExfVVAgJiYgV0lOX1kgPD0gU1RJQ0tfWSkpKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInN0aWNreVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIFwiMHB4XCIpO1xuXHRcdFNUSUNLID0gLTE7IC8vIE5vdCBzdGlja2luZyB0byB0b3AgYW5kIHNpZGViYXIgaXMgc21hbGxlciB0aGFuIHZpZXdwb3J0IG9yIHNjcm9sbGluZyB1cFxuXHR9IGVsc2UgaWYgKFNUSUNLID09PSAtMSAmJiAhU0NST0xMX1VQKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInJlbGF0aXZlXCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7TWF0aC5tYXgoMCwgV0lOX1kgLSBNSU5fWSl9cHhgKTtcblx0XHRTVElDSyA9IDA7IC8vIFN0aWNraW5nIHRvIHRvcCBhbmQgc2Nyb2xsaW5nIGRvd25cblx0fSBlbHNlIGlmIChTVElDSyAhPT0gMSAmJiAhU0NST0xMX1VQICYmIFdJTl9ZICsgV0lOX0ggPj0gU1RJQ0tfWSArIFNUSUNLX0gpIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwic3RpY2t5XCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7V0lOX0ggLSBTVElDS19IfXB4YCk7XG5cdFx0U1RJQ0sgPSAxOyAvLyBOb3Qgc3RpY2tpbmcgdG8gYm90dG9tIGFuZCBzY3JvbGxpbmcgZG93blxuXHR9IGVsc2UgaWYgKFNUSUNLID09PSAxICYmIFNDUk9MTF9VUCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJyZWxhdGl2ZVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke1NUSUNLX1kgLSBNSU5fWX1weGApO1xuXHRcdFNUSUNLID0gMDsgLy8gU3RpY2tpbmcgdG8gYm90dG9tIGFuZCBzY3JvbGxpbmcgdXBcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfU1RJQ0tZLCBoYW5kbGVNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZVRvZ2dsZUNsaWNrLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJyZXNpemVcIiwgZGVib3VuY2UoaGFuZGxlUmVzaXplLCAxMDApLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJzY3JvbGxcIiwgaGFuZGxlU2Nyb2xsLCBRVUlDS19FVkVOVCk7XG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfQlJFQURDUlVNQlMgPSBzdHlsZXMuYnJlYWRjcnVtYnMuc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihicmVhZGNydW1iczogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCBicmVhZGN1bWJzIG9mIGJyZWFkY3J1bWJzKVxuXHRcdGJyZWFkY3VtYnMucXVlcnlTZWxlY3RvckFsbChcImxpIGFcIikuZm9yRWFjaCgoY3J1bWIsIGluZGV4LCB7IGxlbmd0aCB9KSA9PiB7XG5cdFx0XHRhdHRyKGNydW1iLCBcImFyaWEtY3VycmVudFwiLCBpbmRleCA9PT0gbGVuZ3RoIC0gMSA/IFwicGFnZVwiIDogbnVsbCk7XG5cdFx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfQlJFQURDUlVNQlMsIGhhbmRsZU11dGF0aW9uKSxcbik7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0YXR0cixcblx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcixcblx0SVNfQlJPV1NFUixcblx0b24sXG5cdG9uTG9hZGVkLFxuXHRRVUlDS19FVkVOVCxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19ESUFMT0cgPSBzdHlsZXMuZGlhbG9nLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IERJQUxPR1MgPSBJU19CUk9XU0VSXG5cdD8gKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG5cdFx0XHRDU1NfRElBTE9HLFxuXHRcdCkgYXMgSFRNTENvbGxlY3Rpb25PZjxIVE1MRGlhbG9nRWxlbWVudD4pXG5cdDogW107XG5cbmNvbnN0IGhhbmRsZU1vZGFsID0gKCkgPT4ge1xuXHRmb3IgKGNvbnN0IGRpYWxvZyBvZiBESUFMT0dTKVxuXHRcdGlmIChkaWFsb2cuaXNDb25uZWN0ZWQgJiYgZGlhbG9nLnNob3dNb2RhbCAmJiBkaWFsb2cuY2xvc2UpIHtcblx0XHRcdGlmIChkaWFsb2cubWF0Y2hlcygnW29wZW5dOm5vdChbZGF0YS1tb2RhbD1cImZhbHNlXCJdKTpub3QoOm1vZGFsKScpKSB7XG5cdFx0XHRcdGF0dHIoZGlhbG9nLCBcIm9wZW5cIiwgbnVsbCk7IC8vIFVzaW5nIGF0dHJpYnV0ZSBpbnN0ZWFkIG9mIC5jbG9zZSB0byBhdm9pZCBgY2xvc2VgIGV2ZW50XG5cdFx0XHRcdGRpYWxvZy5zaG93TW9kYWwoKTtcblx0XHRcdH0gZWxzZSBpZiAoZGlhbG9nLm1hdGNoZXMoXCI6bW9kYWw6bm90KFtvcGVuXSlcIikpIHtcblx0XHRcdFx0YXR0cihkaWFsb2csIFwib3BlblwiLCBcIlwiKTsgLy8gU2V0IGFzIG9wZW5cblx0XHRcdFx0ZGlhbG9nLmNsb3NlKCk7IC8vIFNvIHdlIGNvcnJlY2x0eSBjYW4gY2FsbCAuY2xvc2UsIHJlbW92aW5nIDxkaWFsb2c+IGZyb20gI3RvcC1sYXllclxuXHRcdFx0fVxuXHRcdH1cbn07XG5cbmNvbnN0IGhhbmRsZUNsaWNrID0gKHsgY2xpZW50WDogeCwgY2xpZW50WTogeSwgdGFyZ2V0OiBlbCB9OiBNb3VzZUV2ZW50KSA9PiB7XG5cdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxEaWFsb2dFbGVtZW50ICYmIGF0dHIoZWwsIFwiZGF0YS1jbG9zZWRieVwiKSA9PT0gXCJhbnlcIikge1xuXHRcdGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRjb25zdCBpc0luc2lkZSA9IHRvcCA8PSB5ICYmIHkgPD0gYm90dG9tICYmIGxlZnQgPD0geCAmJiB4IDw9IHJpZ2h0O1xuXG5cdFx0aWYgKCFpc0luc2lkZSkgZWwuY2xvc2UoKTtcblx0fSBlbHNlIGlmIChcblx0XHRlbCBpbnN0YW5jZW9mIEVsZW1lbnQgJiZcblx0XHRlbC5jbG9zZXN0KCdidXR0b25bZGF0YS1jb21tYW5kPVwiY2xvc2VcIl0nKVxuXHQpIHtcblx0XHRlbD8uY2xvc2VzdChcImRpYWxvZ1wiKT8uY2xvc2UoKTtcblx0fVxufTtcblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVDbGljayBhcyBFdmVudExpc3RlbmVyLCBRVUlDS19FVkVOVCk7XG5cdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoaGFuZGxlTW9kYWwpLm9ic2VydmUoXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRcdHtcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wib3BlblwiXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdH0sXG5cdCk7XG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmZ1bmN0aW9uIGhhbmRsZUluamVjdChldmVudDogRXZlbnQgJiB7IGFuaW1hdGlvbk5hbWU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSAhPT0gc3R5bGVzLl9lcnJvcnN1bW1hcnkpIHJldHVybjtcblx0Y29uc3QgZmlyc3QgPSAoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpPy5maXJzdEVsZW1lbnRDaGlsZDtcblxuXHRpZiAoZmlyc3QgaW5zdGFuY2VvZiBIVE1MSGVhZGluZ0VsZW1lbnQpIHtcblx0XHRhdHRyKGZpcnN0LCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG5cdFx0Zmlyc3QuZm9jdXMoKTsgLy8gQXV0b2ZvY3VzIGZpcnN0IGhlYWRpbmdcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiBvbihkb2N1bWVudCwgXCJhbmltYXRpb25lbmRcIiwgaGFuZGxlSW5qZWN0LCBRVUlDS19FVkVOVCkpO1xuIiwidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuXG4vLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgRk9DVVNfT1VUTElORSA9IFwib3V0bGluZTogMXB4IGRvdHRlZDsgb3V0bGluZTogNXB4IGF1dG8gSGlnaGxpZ2h0OyBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3JcIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChfZXJyKSB7XG4gIH1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgKGRldGFpbCkgPT4gZWxlbWVudC5oYW5kbGVFdmVudCh7IHR5cGU6IFwibXV0YXRpb25cIiwgZGV0YWlsIH0pXG4gICAgKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIG9ic2VydmVycy5zZXQoZWxlbWVudCwgb2JzZXJ2ZXIpO1xuICB9XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBMSVZFO1xudmFyIExJVkVfU1JfRklYID0gMDtcbnZhciBzcGVhayA9ICh0ZXh0KSA9PiB7XG4gIGlmICghTElWRSkge1xuICAgIExJVkUgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIExJVkUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246Zml4ZWQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXBcIjtcbiAgICBhdHRyKExJVkUsIFwiYXJpYS1saXZlXCIsIFwiYXNzZXJ0aXZlXCIpO1xuICB9XG4gIGlmICghTElWRS5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoTElWRSk7XG4gIGlmICh0ZXh0KSBMSVZFLnRleHRDb250ZW50ID0gYCR7dGV4dH0ke0xJVkVfU1JfRklYKysgJSAyID8gXCJcXHhBMFwiIDogXCJcIn1gO1xufTtcbnZhciBzZXRWYWx1ZSA9IChpbnB1dCwgZGF0YSwgdHlwZSA9IFwiXCIpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSwgZGF0YSwgaW5wdXRUeXBlOiB0eXBlIH07XG4gIGNvbnN0IHByb3RvID0gSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGU7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJiZWZvcmVpbnB1dFwiLCBldmVudCkpO1xuICAoX2IgPSAoX2EyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgXCJ2YWx1ZVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5zZXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKGlucHV0LCBkYXRhKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImlucHV0XCIsIGV2ZW50KSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG59O1xudmFyIElTX1BSRVNTID0gZmFsc2U7XG52YXIgaXNNb3VzZURvd24gPSAoZXZlbnQpID0+IHtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2V1cFwiKSBJU19QUkVTUyA9IGZhbHNlO1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZWRvd25cIikge1xuICAgIElTX1BSRVNTID0gdHJ1ZTtcbiAgICBvbihkb2N1bWVudCwgXCJtb3VzZXVwXCIsIGlzTW91c2VEb3duLCB7IG9uY2U6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIElTX1BSRVNTO1xufTtcblxuLy8gdS1vcHRpb24udHNcbnZhciBESVNBQkxFRCA9IFwiZGlzYWJsZWRcIjtcbnZhciBTRUxFQ1RFRCA9IFwic2VsZWN0ZWRcIjtcbnZhciBVSFRNTE9wdGlvbkVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbRElTQUJMRUQsIFNFTEVDVEVEXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoIUlTX0lPUykgdGhpcy50YWJJbmRleCA9IC0xO1xuICAgIGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoXCJyb2xlXCIpKSBhdHRyKHRoaXMsIFwicm9sZVwiLCBcIm9wdGlvblwiKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1kaXNhYmxlZFwiLCBgJHt0aGlzLmRpc2FibGVkfWApO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXNlbGVjdGVkXCIsIGAke3RoaXMuc2VsZWN0ZWR9YCk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHdoZXRoZXIgdGhlIG9wdGlvbiBpbiB0aGUgbGlzdCBib3ggaXMgdGhlIGRlZmF1bHQgaXRlbS4gKi9cbiAgZ2V0IGRlZmF1bHRTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpc1tTRUxFQ1RFRF07XG4gIH1cbiAgc2V0IGRlZmF1bHRTZWxlY3RlZCh2YWx1ZSkge1xuICAgIHRoaXNbU0VMRUNURURdID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGRpc2FibGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIERJU0FCTEVEKSAhPT0gbnVsbDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIERJU0FCTEVELCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICAvKiogUmV0cmlldmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBmb3JtIHRoYXQgdGhlIG9iamVjdCBpcyBlbWJlZGRlZCBpbi4gKi9cbiAgZ2V0IGZvcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcImZvcm1cIik7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSBvcmRpbmFsIHBvc2l0aW9uIG9mIGFuIG9wdGlvbiBpbiBhIGxpc3QgYm94LiAqL1xuICBnZXQgaW5kZXgoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uKChfYTIgPSB0aGlzLnBhcmVudEVsZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIub3B0aW9ucykgfHwgW3RoaXNdXG4gICAgXS5pbmRleE9mKHRoaXMpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyBhIHZhbHVlIHRoYXQgeW91IGNhbiB1c2UgdG8gaW1wbGVtZW50IHlvdXIgb3duIGxhYmVsIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBvYmplY3QuICovXG4gIGdldCBsYWJlbCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoX2EyID0gYXR0cih0aGlzLCBcImxhYmVsXCIpKSAhPSBudWxsID8gX2EyIDogdGhpcy50ZXh0O1xuICB9XG4gIHNldCBsYWJlbCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJsYWJlbFwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFNFTEVDVEVEKSAhPT0gbnVsbDtcbiAgfVxuICBzZXQgc2VsZWN0ZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFNFTEVDVEVELCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIHRleHQgc3RyaW5nIHNwZWNpZmllZCBieSB0aGUgb3B0aW9uIHRhZy4gKi9cbiAgZ2V0IHRleHQoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSB0aGlzLnRleHRDb250ZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKSkgfHwgXCJcIjtcbiAgfVxuICBzZXQgdGV4dCh0ZXh0KSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHRleHQ7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSB2YWx1ZSB3aGljaCBpcyByZXR1cm5lZCB0byB0aGUgc2VydmVyIHdoZW4gdGhlIGZvcm0gY29udHJvbCBpcyBzdWJtaXR0ZWQuICovXG4gIGdldCB2YWx1ZSgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoX2EyID0gYXR0cih0aGlzLCBcInZhbHVlXCIpKSAhPSBudWxsID8gX2EyIDogdGhpcy50ZXh0O1xuICB9XG4gIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gIH1cbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LW9wdGlvblwiLCBVSFRNTE9wdGlvbkVsZW1lbnQpO1xuXG4vLyB1LWRhdGFsaXN0LnRzXG52YXIgTElWRV9USU1FUjtcbnZhciBJTlBVVF9ERUJPVU5DRSA9IDA7XG52YXIgSVNfTU9CSUxFID0gSVNfSU9TIHx8IElTX0FORFJPSUQ7XG52YXIgRVZFTlRTID0gXCJjbGljayxmb2N1c291dCxpbnB1dCxrZXlkb3duLG1vdXNlZG93bixtb3VzZXVwXCI7XG52YXIgRVZFTlRTX0lOUFVUID0gXCJmb2N1cyxmb2N1c2luLGJsdXIsZm9jdXNvdXRcIjtcbnZhciBURVhUUyA9IHtcbiAgc2luZ3VsYXI6IFwiJWQgaGl0XCIsXG4gIHBsdXJhbDogXCIlZCBoaXRzXCJcbn07XG52YXIgVUhUTUxEYXRhTGlzdEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fdGV4dHMgPSBfX3NwcmVhZFZhbHVlcyh7fSwgVEVYVFMpO1xuICAgIHRoaXMuX3ZhbHVlID0gXCJcIjtcbiAgICBhdHRhY2hTdHlsZShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtESVNQTEFZX0JMT0NLfVxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uKSB7IGRpc3BsYXk6IGJsb2NrOyBjdXJzb3I6IHBvaW50ZXIgfVxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uOmZvY3VzKSB7ICR7Rk9DVVNfT1VUTElORX0gfVxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uW2FyaWEtaGlkZGVuPVwidHJ1ZVwiXSksXG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb25bZGlzYWJsZWRdKSxcblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbltoaWRkZW5dKSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudCB9YFxuICAgICk7XG4gIH1cbiAgLy8gVXNlZCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IGFubm91bmNlbWVudHNcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIC4uLk9iamVjdC5rZXlzKFRFWFRTKS5tYXAoKGtleSkgPT4gYGRhdGEtc3ItJHtrZXl9YCldO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuaGlkZGVuID0gdHJ1ZTtcbiAgICB0aGlzLl9yb290ID0gZ2V0Um9vdCh0aGlzKTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcImxpc3Rib3hcIik7XG4gICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG4gICAgb24odGhpcy5fcm9vdCwgXCJmb2N1c2luXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNcIiwgdGhpcywgdHJ1ZSk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7XG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFtcImRpc2FibGVkXCIsIFwiaGlkZGVuXCIsIFwibGFiZWxcIiwgXCJ2YWx1ZVwiXSxcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgb2ZmKHRoaXMuX3Jvb3QgfHwgdGhpcywgXCJmb2N1c1wiLCB0aGlzLCB0cnVlKTtcbiAgICBvZmYodGhpcy5fcm9vdCB8fCB0aGlzLCBcImZvY3VzaW5cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gICAgZGlzY29ubmVjdElucHV0KHRoaXMpO1xuICAgIHRoaXMuX3Jvb3QgPSB2b2lkIDA7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIF9wcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgdGV4dCA9IHByb3AgPT0gbnVsbCA/IHZvaWQgMCA6IHByb3Auc3BsaXQoXCJkYXRhLXNyLVwiKVsxXTtcbiAgICBjb25zdCBjc3MgPSBgaW5wdXRbbGlzdD1cIiR7dGhpcy5pZH1cIl1gO1xuICAgIGlmIChURVhUU1t0ZXh0XSkgdGhpcy5fdGV4dHNbdGV4dF0gPSBuZXh0IHx8IFRFWFRTW3RleHRdO1xuICAgIGVsc2UgaWYgKHRoaXMuX3Jvb3QpXG4gICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHRoaXMuX3Jvb3QucXVlcnlTZWxlY3RvckFsbChjc3MpKVxuICAgICAgICBzZXR1cElucHV0KHRoaXMsIGlucHV0KTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHsgdGFyZ2V0LCB0eXBlIH0gPSBldmVudDtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmICh0eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImZvY3VzXCIgfHwgdHlwZSA9PT0gXCJmb2N1c2luXCIpIG9uRm9jdXModGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImJsdXJcIiB8fCB0eXBlID09PSBcImZvY3Vzb3V0XCIpIG9uQmx1cih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwia2V5ZG93blwiKSBvbktleURvd24odGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiICYmIHRoaXMuY29udGFpbnModGFyZ2V0KSlcbiAgICAgIGlzTW91c2VEb3duKGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJtdXRhdGlvblwiIHx8IHR5cGUgPT09IFwiaW5wdXRcIikge1xuICAgICAgY2xlYXJUaW1lb3V0KElOUFVUX0RFQk9VTkNFKTtcbiAgICAgIElOUFVUX0RFQk9VTkNFID0gc2V0VGltZW91dChvbklucHV0LCAwLCB0aGlzLCBldmVudCk7XG4gICAgfVxuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidS1vcHRpb25cIik7XG4gIH1cbn07XG52YXIgc2V0RXhwYW5kZWQgPSAoc2VsZiwgb3BlbikgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgaWYgKHNlbGYuaGlkZGVuICE9PSBvcGVuKSByZXR1cm47XG4gIHNlbGYuaGlkZGVuID0gIW9wZW47XG4gIChfYTIgPSBtdXRhdGlvbk9ic2VydmVyKHNlbGYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRha2VSZWNvcmRzKCk7XG4gIGlmIChzZWxmLl9pbnB1dCkgc2V0dXBJbnB1dChzZWxmLCBzZWxmLl9pbnB1dCwgb3Blbik7XG4gIGlmIChzZWxmLnBvcG92ZXIgJiYgKChfYiA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuaXNDb25uZWN0ZWQpKSB7XG4gICAgYXR0cihzZWxmLl9pbnB1dCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKHNlbGYpKTtcbiAgICBhdHRyKHNlbGYsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcbiAgICBzZWxmLnRvZ2dsZVBvcG92ZXIob3Blbik7XG4gIH1cbiAgaWYgKG9wZW4pIG9uSW5wdXQoc2VsZik7XG59O1xudmFyIGRpc2Nvbm5lY3RJbnB1dCA9IChzZWxmKSA9PiB7XG4gIGlmICghc2VsZi5faW5wdXQpIHJldHVybjtcbiAgb2ZmKHNlbGYuX2lucHV0IHx8IHNlbGYsIEVWRU5UU19JTlBVVCwgc2VsZik7XG4gIG9mZihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gIHNldEV4cGFuZGVkKHNlbGYsIGZhbHNlKTtcbiAgc2VsZi5faW5wdXQgPSB2b2lkIDA7XG59O1xudmFyIHNldHVwSW5wdXQgPSAoc2VsZiwgaW5wdXQsIG9wZW4gPSBmYWxzZSkgPT4ge1xuICBvbihpbnB1dCwgRVZFTlRTX0lOUFVULCBzZWxmLCB0cnVlKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWF1dG9jb21wbGV0ZVwiLCBcImxpc3RcIik7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1jb250cm9sc1wiLCB1c2VJZChzZWxmKSk7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1leHBhbmRlZFwiLCBgJHtJU19NT0JJTEUgPyBvcGVuIDogXCJ0cnVlXCJ9YCk7XG4gIGF0dHIoaW5wdXQsIFwiYXV0b2NvbXBsZXRlXCIsIFwib2ZmXCIpO1xuICBhdHRyKGlucHV0LCBcInJvbGVcIiwgXCJjb21ib2JveFwiKTtcbn07XG52YXIgb25Gb2N1cyA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCBpc0lucHV0ID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudDtcbiAgaWYgKGlzSW5wdXQgJiYgZXZlbnQuaXNUcnVzdGVkKSBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgaWYgKHNlbGYuX2lucHV0ICE9PSBldmVudC50YXJnZXQgJiYgaXNJbnB1dCAmJiBldmVudC50YXJnZXQubGlzdCA9PT0gc2VsZikge1xuICAgIGlmIChzZWxmLl9pbnB1dCkgZGlzY29ubmVjdElucHV0KHNlbGYpO1xuICAgIHNlbGYuX2lucHV0ID0gZXZlbnQudGFyZ2V0O1xuICAgIHNlbGYuX2lucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJmb2N1c1wiKSk7XG4gICAgc2VsZi5faW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImZvY3VzaW5cIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICBhdHRyKHNlbGYsIFNBRkVfTEFCRUxMRURCWSwgdXNlSWQoKF9hMiA9IHNlbGYuX2lucHV0LmxhYmVscykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMlswXSkpO1xuICAgIG9uKHNlbGYuX3Jvb3QgfHwgc2VsZiwgRVZFTlRTLCBzZWxmKTtcbiAgICBzZXRFeHBhbmRlZChzZWxmLCB0cnVlKTtcbiAgICBzcGVhaygpO1xuICB9XG59O1xudmFyIG9uQmx1ciA9IChzZWxmLCBldmVudCkgPT4ge1xuICBpZiAoIUlTX0FORFJPSUQgJiYgIWlzTW91c2VEb3duKCkgJiYgc2VsZi5faW5wdXQpXG4gICAgc2V0VGltZW91dChvbkJsdXJyZWQsIDAsIHNlbGYpO1xuICBpZiAoZXZlbnQudGFyZ2V0ID09PSBzZWxmLl9pbnB1dCAmJiBldmVudC5pc1RydXN0ZWQpXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59O1xudmFyIG9uQmx1cnJlZCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSAoKF9hMiA9IHNlbGYuX3Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuYWN0aXZlRWxlbWVudCkgfHwgbnVsbDtcbiAgY29uc3QgaW5wdXQgPSBzZWxmLl9pbnB1dDtcbiAgaWYgKGlucHV0ICYmIGlucHV0ICE9PSByZWxhdGVkVGFyZ2V0ICYmICFzZWxmLmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImJsdXJcIiwgeyByZWxhdGVkVGFyZ2V0IH0pKTtcbiAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEZvY3VzRXZlbnQoXCJmb2N1c291dFwiLCB7IGJ1YmJsZXM6IHRydWUsIHJlbGF0ZWRUYXJnZXQgfSlcbiAgICApO1xuICAgIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgfVxufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9pbnB1dCB8fCBzZWxmLl9pbnB1dCA9PT0gdGFyZ2V0KSByZXR1cm4gc2V0RXhwYW5kZWQoc2VsZiwgdHJ1ZSk7XG4gIGZvciAoY29uc3Qgb3B0IG9mIHNlbGYub3B0aW9ucylcbiAgICBpZiAob3B0LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgIGlmIChhdHRyKHNlbGYsIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIikgIT09IFwidHJ1ZVwiKSB7XG4gICAgICAgIChfYTIgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xuICAgICAgICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2V0VmFsdWUoc2VsZi5faW5wdXQsIG9wdC52YWx1ZSk7XG4gICAgfVxuICBpZiAoSVNfQU5EUk9JRCkgb25CbHVycmVkKHNlbGYpO1xufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZSkgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoZS5hbHRLZXkgfHwgZS5jdHJsS2V5IHx8IGUubWV0YUtleSB8fCBlLnNoaWZ0S2V5IHx8IGUua2V5ID09PSBcIlRhYlwiKVxuICAgIHJldHVybjtcbiAgc2V0RXhwYW5kZWQoc2VsZiwgZS5rZXkgIT09IFwiRXNjYXBlXCIpO1xuICBjb25zdCB7IGtleSwgdGFyZ2V0IH0gPSBlO1xuICBjb25zdCBvcHRpb25zID0gWy4uLnNlbGYub3B0aW9uc10uZmlsdGVyKFxuICAgIChlbCkgPT4gYXR0cihlbCwgXCJhcmlhLWhpZGRlblwiKSAhPT0gXCJ0cnVlXCIgJiYgZWwub2Zmc2V0SGVpZ2h0XG4gICk7XG4gIGNvbnN0IHByZXYgPSBvcHRpb25zLmluZGV4T2YodGFyZ2V0KTtcbiAgbGV0IG5leHQgPSAtMTtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIikgbmV4dCA9IChwcmV2ICsgMSkgJSBvcHRpb25zLmxlbmd0aDtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1VwXCIpIG5leHQgPSAofnByZXYgPyBwcmV2IDogb3B0aW9ucy5sZW5ndGgpIC0gMTtcbiAgaWYgKH5wcmV2KSB7XG4gICAgaWYgKGtleSA9PT0gXCJIb21lXCIgfHwga2V5ID09PSBcIlBhZ2VVcFwiKSBuZXh0ID0gMDtcbiAgICBpZiAoa2V5ID09PSBcIkVuZFwiIHx8IGtleSA9PT0gXCJQYWdlRG93blwiKSBuZXh0ID0gb3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIGlmIChrZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgb3B0aW9uc1twcmV2XS5jbGljaygpO1xuICAgICAgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbiAgaWYgKG9wdGlvbnNbbmV4dF0pIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIG9wdGlvbi50YWJJbmRleCA9IC0xO1xuICBpZiAob3B0aW9uc1tuZXh0XSkgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAoX2EyID0gb3B0aW9uc1tuZXh0XSB8fCBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGUpID0+IHtcbiAgY29uc3QgeyBfdGV4dHMsIF9yb290LCBfaW5wdXQsIG9wdGlvbnMgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gKF9pbnB1dCA9PSBudWxsID8gdm9pZCAwIDogX2lucHV0LnZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBmaWx0ZXIgPSAhc2VsZi5oYXNBdHRyaWJ1dGUoXCJkYXRhLW5vZmlsdGVyXCIpO1xuICBjb25zdCBoaWRkZW4gPSBbXTtcbiAgY29uc3QgdmlzaWJsZSA9IFtdO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKSB7XG4gICAgY29uc3QgaGlkZSA9IG9wdC5kaXNhYmxlZCB8fCBvcHQuaGlkZGVuIHx8IGZpbHRlciAmJiAhb3B0LmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUpO1xuICAgIChoaWRlID8gaGlkZGVuIDogdmlzaWJsZSkucHVzaChvcHQpO1xuICB9XG4gIGZvciAoY29uc3Qgb3B0IG9mIGhpZGRlbikgYXR0cihvcHQsIFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpO1xuICBmb3IgKGNvbnN0IG9wdCBvZiB2aXNpYmxlKSBhdHRyKG9wdCwgXCJhcmlhLWhpZGRlblwiLCBcImZhbHNlXCIpO1xuICBjb25zdCB0b3RhbCA9IHZpc2libGUubGVuZ3RoO1xuICBjbGVhclRpbWVvdXQoTElWRV9USU1FUik7XG4gIGlmICgoZSA9PSBudWxsID8gdm9pZCAwIDogZS50eXBlKSA9PT0gXCJpbnB1dFwiICYmIHZhbHVlICE9PSBzZWxmLl92YWx1ZSlcbiAgICBMSVZFX1RJTUVSID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gYCR7IXRvdGFsICYmIHNlbGYuaW5uZXJUZXh0LnRyaW0oKSB8fCBgJHtfdGV4dHNbdG90YWwgPT09IDEgPyBcInNpbmd1bGFyXCIgOiBcInBsdXJhbFwiXX1gLnJlcGxhY2UoXCIlZFwiLCBgJHt0b3RhbH1gKX1gO1xuICAgICAgaWYgKCFzZWxmLmhpZGRlbiAmJiAoX3Jvb3QgPT0gbnVsbCA/IHZvaWQgMCA6IF9yb290LmFjdGl2ZUVsZW1lbnQpID09PSBfaW5wdXQpIHNwZWFrKHRleHQpO1xuICAgICAgc2VsZi5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9LCAxZTMpO1xuICBpZiAoSVNfSU9TKVxuICAgIHZpc2libGUuZm9yRWFjaCgob3B0LCBpZHgpID0+IGF0dHIob3B0LCBcInRpdGxlXCIsIGAke2lkeCArIDF9LyR7dG90YWx9YCkpO1xufTtcbmlmIChJU19CUk9XU0VSKVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwibGlzdFwiLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGdldFJvb3QodGhpcykuZ2V0RWxlbWVudEJ5SWQoYXR0cih0aGlzLCBcImxpc3RcIikgfHwgXCJcIik7XG4gICAgfVxuICB9KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGF0YWxpc3RcIiwgVUhUTUxEYXRhTGlzdEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERhdGFMaXN0RWxlbWVudCB9O1xuIiwiaW1wb3J0IHsgVUhUTUxDb21ib2JveEVsZW1lbnQgfSBmcm9tIFwiQHUtZWxlbWVudHMvdS1jb21ib2JveFwiO1xuaW1wb3J0IHsgVUhUTUxEYXRhTGlzdEVsZW1lbnQgfSBmcm9tIFwiQHUtZWxlbWVudHMvdS1kYXRhbGlzdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRpc0lucHV0TGlrZSxcblx0b24sXG5cdG9uTG9hZGVkLFxuXHRvbk11dGF0aW9uLFxuXHRRVUlDS19FVkVOVCxcblx0dXNlSWQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRklFTEQgPSBzdHlsZXMuZmllbGQuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1ZBTElEQVRJT05TID0gc3R5bGVzLnZhbGlkYXRpb24uc3BsaXQoXCIgXCIpO1xuY29uc3QgQ1NTX1ZBTElEQVRJT04gPSBDU1NfVkFMSURBVElPTlNbMF07XG5cbmNvbnN0IGdldFRleHQgPSAoc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24sIGtleTogc3RyaW5nKSA9PlxuXHRzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGAtLW10ZHMtdGV4dC0ke2tleX1gKT8uc2xpY2UoMSwgLTEpIHx8IFwiXCI7IC8vIHNsaWNlIHRvIHRyaW0gcXVvdGVzXG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKGZpZWxkczogSFRNTENvbGxlY3Rpb25PZjxFbGVtZW50PiwgdmFsaWRhdGU/OiBib29sZWFuKSB7XG5cdGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKVxuXHRcdGlmIChmaWVsZC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0Y29uc3QgbGFiZWxzOiBIVE1MTGFiZWxFbGVtZW50W10gPSBbXTtcblx0XHRcdGNvbnN0IGRlc2NzOiBFbGVtZW50W10gPSBbXTtcblx0XHRcdGNvbnN0IHZhbGlkczogRWxlbWVudFtdID0gW107XG5cdFx0XHRsZXQgY29tYm9ib3g6IFVIVE1MQ29tYm9ib3hFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblx0XHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRcdGZvciAoY29uc3QgZWwgb2YgZmllbGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpKSB7XG5cdFx0XHRcdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxMYWJlbEVsZW1lbnQpIGxhYmVscy5wdXNoKGVsKTtcblx0XHRcdFx0ZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBVSFRNTENvbWJvYm94RWxlbWVudCkgY29tYm9ib3ggPSBlbDtcblx0XHRcdFx0ZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpICYmICFlbC5oaWRkZW4pIGlucHV0ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGVsLmhhc0F0dHJpYnV0ZShcImRhdGEtZGVzY3JpcHRpb25cIikpIGRlc2NzLnB1c2goZWwpO1xuXHRcdFx0XHRlbHNlIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1ZBTElEQVRJT04pKSB7XG5cdFx0XHRcdFx0dmFsaWQgPSBhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8ICFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0dmFsaWRzLnB1c2goZWwpO1xuXHRcdFx0XHRcdGRlc2NzLnVuc2hpZnQoZWwpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgSFRNTFBhcmFncmFwaEVsZW1lbnQpXG5cdFx0XHRcdFx0ZGVzY3Muc29tZSgoZGVzYykgPT4gZGVzYy5jb250YWlucyhlbCkpIHx8IGRlc2NzLnB1c2goZWwpOyAvLyBPbmx5IGFkZCBpZiBub3QgYWxyZWFkeSBpbnNpZGUgZGVzY3JpcHRpb25cblx0XHRcdH1cblxuXHRcdFx0aWYgKGlucHV0KSB7XG5cdFx0XHRcdGZvciAoY29uc3QgbGFiZWwgb2YgbGFiZWxzKSBsYWJlbC5odG1sRm9yID0gdXNlSWQoaW5wdXQpO1xuXHRcdFx0XHRpZiAodmFsaWRhdGUgJiYgYXR0cihmaWVsZCwgXCJkYXRhLXZhbGlkYXRpb25cIikgPT09IFwiZm9ybVwiKSB7XG5cdFx0XHRcdFx0dmFsaWQgPSBpbnB1dC5tYXRjaGVzKFwiOnZhbGlkXCIpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgZWwgb2YgdmFsaWRzKSBhdHRyKGVsLCBcImhpZGRlblwiLCB2YWxpZCA/IFwiXCIgOiBudWxsKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZW5kZXJDb21ib2JveChjb21ib2JveCk7XG5cdFx0XHRcdHJlbmRlckNvdW50ZXIoaW5wdXQpO1xuXHRcdFx0XHRyZW5kZXJUZXh0YXJlYVNpemUoaW5wdXQpO1xuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgZGVzY3MubWFwKHVzZUlkKS5qb2luKFwiIFwiKSB8fCBudWxsKTsgLy8gUmVtb3ZlIGlmIGVtcHR5XG5cdFx0XHRcdGF0dHIoaW5wdXQsIFwiYXJpYS1pbnZhbGlkXCIsIGAkeyF2YWxpZH1gKTtcblx0XHRcdH1cblx0XHR9XG59XG5cbi8vIGlPUyBkb2VzIG5vdCBzdXBwb3J0IGZpZWxkLXNpemluZzogY29udGVudCwgc28gd2UgbmVlZCB0byBtYW51YWxseSByZXNpemVcbmZ1bmN0aW9uIHJlbmRlclRleHRhcmVhU2l6ZSh0ZXh0YXJlYTogRWxlbWVudCkge1xuXHRpZiAodGV4dGFyZWEgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG5cdFx0dGV4dGFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXCItLW10ZHMtdGV4dGFyZWEtaGVpZ2h0XCIsIFwiYXV0b1wiKTtcblx0XHR0ZXh0YXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcdFwiLS1tdGRzLXRleHRhcmVhLWhlaWdodFwiLFxuXHRcdFx0YCR7dGV4dGFyZWEuc2Nyb2xsSGVpZ2h0fXB4YCxcblx0XHQpO1xuXHR9XG59XG5cbi8vIFNldHVwIHRyYW5zbGF0aW9ucyBmcm9tIENTUyBjdXN0b20gcHJvcGVydGllc1xuZnVuY3Rpb24gcmVuZGVyQ29tYm9ib3goZWw6IFVIVE1MQ29tYm9ib3hFbGVtZW50IHwgbnVsbCkge1xuXHRpZiAoIWVsPy5saXN0IHx8IGVsLmxpc3Q/Lmhhc0F0dHJpYnV0ZShcInBvcG92ZXJcIikpIHJldHVybjtcblx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1hZGRlZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWFkZGVkXCIpKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLWVtcHR5XCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtZW1wdHlcIikpO1xuXHRhdHRyKGVsLCBcImRhdGEtc3ItZm91bmRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1mb3VuZFwiKSk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1pbnZhbGlkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtaW52YWxpZFwiKSk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1vZlwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LW9mXCIpKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLXJlbW92ZVwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LXJlbW92ZVwiKSk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1yZW1vdmVkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtcmVtb3ZlZFwiKSk7XG5cdGF0dHIoZWwubGlzdCwgXCJkYXRhLXNyLXBsdXJhbFwiLCBnZXRUZXh0KHN0eWxlLCBcImRhdGFsaXN0LXBsdXJhbFwiKSk7XG5cdGF0dHIoZWwubGlzdCwgXCJkYXRhLXNyLXNpbmd1bGFyXCIsIGdldFRleHQoc3R5bGUsIFwiZGF0YWxpc3Qtc2luZ3VsYXJcIikpO1xuXHRhdHRyKGVsLmxpc3QsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyQ291bnRlcihpbnB1dDogSFRNTElucHV0RWxlbWVudCkge1xuXHRjb25zdCBlbCA9IGlucHV0Py5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdGNvbnN0IGxpbWl0ID0gZWwgJiYgYXR0cihlbCwgXCJkYXRhLWNvdW50XCIpO1xuXG5cdGlmIChlbCAmJiBsaW1pdCkge1xuXHRcdGNvbnN0IHJlbWFpbmRlciA9IE51bWJlcihsaW1pdCkgLSBpbnB1dC52YWx1ZS5sZW5ndGg7XG5cdFx0Y29uc3QgbmV4dEludmFsaWQgPSByZW1haW5kZXIgPCAwO1xuXHRcdGNvbnN0IHByZXZJbnZhbGlkID0gYXR0cihlbCwgXCJhcmlhLWxpdmVcIikgPT09IFwicG9saXRlXCI7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCB8fCBpbnB1dCk7XG5cdFx0Y29uc3Qgb3ZlciA9IGdldFRleHQoc3R5bGUsIFwiY291bnQtb3ZlclwiKTtcblx0XHRjb25zdCB1bmRlciA9IGdldFRleHQoc3R5bGUsIFwiY291bnQtdW5kZXJcIik7XG5cblx0XHRpZiAocHJldkludmFsaWQgIT09IG5leHRJbnZhbGlkKSB7XG5cdFx0XHRhdHRyKGVsLCBcImFyaWEtbGl2ZVwiLCBuZXh0SW52YWxpZCA/IFwicG9saXRlXCIgOiBcIm9mZlwiKTtcblx0XHRcdGZvciAoY29uc3QgY3NzIG9mIENTU19WQUxJREFUSU9OUykgZWwuY2xhc3NMaXN0LnRvZ2dsZShjc3MsIG5leHRJbnZhbGlkKTtcblx0XHR9XG5cdFx0ZWwudGV4dENvbnRlbnQgPSAobmV4dEludmFsaWQgPyBvdmVyIDogdW5kZXIpLnJlcGxhY2UoXG5cdFx0XHRcIiVkXCIsXG5cdFx0XHRgJHtNYXRoLmFicyhyZW1haW5kZXIpfWAsXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGVUb2dnbGUoeyB0YXJnZXQ6IGVsLCBuZXdTdGF0ZSB9OiBFdmVudCAmIHsgbmV3U3RhdGU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBVSFRNTERhdGFMaXN0RWxlbWVudCkge1xuXHRcdGNvbnN0IHJvb3QgPSBlbC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QgfCBudWxsO1xuXHRcdGNvbnN0IGFuY2hvciA9IHJvb3Q/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuXHRcdFx0YFtwb3BvdmVydGFyZ2V0PVwiJHtlbC5pZH1cIl1gLFxuXHRcdCk7XG5cblx0XHRpZiAobmV3U3RhdGUgPT09IFwiY2xvc2VkXCIpIGFuY2hvclBvc2l0aW9uKGVsLCBmYWxzZSk7XG5cdFx0ZWxzZSBpZiAoYW5jaG9yKSB7XG5cdFx0XHRlbC5zdHlsZS53aWR0aCA9IGAke2FuY2hvci5jbGllbnRXaWR0aH1weGA7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgYW5jaG9yLCBhdHRyKGVsLCBcImRhdGEtcG9zaXRpb25cIikgPz8gXCJib3R0b21cIiwgdHJ1ZSk7XG5cdFx0fVxuXHR9XG59XG4vLyBVcGRhdGUgd2hlbiB0eXBpbmdcbmZ1bmN0aW9uIGhhbmRsZUlucHV0KHsgdGFyZ2V0IH06IEV2ZW50KSB7XG5cdGlmIChpc0lucHV0TGlrZSh0YXJnZXQpKSB7XG5cdFx0cmVuZGVyQ291bnRlcih0YXJnZXQpO1xuXHRcdHJlbmRlclRleHRhcmVhU2l6ZSh0YXJnZXQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVZhbGRpYXRpb24oZXZlbnQ6IEV2ZW50KSB7XG5cdGNvbnN0IGZpZWxkID0gKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKGAuJHtDU1NfRklFTER9YCk7XG5cblx0aWYgKGV2ZW50LnR5cGUgPT09IFwiaW52YWxpZFwiICYmIGZpZWxkKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBQcmV2ZW50IGJyb3dzZXJzIGZyb20gc2hvd2luZyBkZWZhdWx0IHZhbGlkYXRpb24gYnViYmxlc1xuXHRoYW5kbGVNdXRhdGlvbihkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKENTU19GSUVMRCksIHRydWUpOyAvLyBVcGRhdGUgc3RhdGVcbn1cblxuLy8gUG9zaXRpb24gY29tYm9ib3ggd2hlbiBjaGFuZ2luZyBjb250ZW50XG5mdW5jdGlvbiBoYW5kbGVCZWZvcmVDaGFuZ2UoeyB0YXJnZXQ6IGVsIH06IEV2ZW50KSB7XG5cdGNvbnN0IGxpc3QgPSBlbCBpbnN0YW5jZW9mIFVIVE1MQ29tYm9ib3hFbGVtZW50ICYmIGVsLmxpc3Q7XG5cdGlmIChsaXN0ICYmICFsaXN0Py5oaWRkZW4pXG5cdFx0c2V0VGltZW91dCgoKSA9PiBhbmNob3JQb3NpdGlvbihsaXN0LCBlbCwgMiwgdHJ1ZSksIDEwKTsgLy8gUmVwb3NpdGlvbiBsaXN0IGlmIG5vdCBoaWRkZW5cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0ZJRUxELCBoYW5kbGVNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImJlZm9yZWNoYW5nZVwiLCBoYW5kbGVCZWZvcmVDaGFuZ2UsIFFVSUNLX0VWRU5UKTtcblx0b24oZG9jdW1lbnQsIFwiaW5wdXRcIiwgaGFuZGxlSW5wdXQsIFFVSUNLX0VWRU5UKTtcblx0b24oZG9jdW1lbnQsIFwiaW52YWxpZCxzdWJtaXRcIiwgaGFuZGxlVmFsZGlhdGlvbiwgdHJ1ZSk7IC8vIFVzZSBjYXB0dXJlIGFzIGludmFsaWQgYW5kIHN1Ym1pdCBkb2VzIG5vdCBidWJibGVcblx0b24oZG9jdW1lbnQsIFwidG9nZ2xlXCIsIGhhbmRsZVRvZ2dsZSwgUVVJQ0tfRVZFTlQpOyAvLyBVc2UgY2FwdHVyZSBzaW5jZSB0b2dnbGUgZG9lcyBub3QgYnViYmxlXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBpc0lucHV0TGlrZSwgb25Mb2FkZWQsIG9uTXV0YXRpb24sIHVzZUlkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19GSUVMRFNFVCA9IHN0eWxlcy5maWVsZHNldC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVkFMSURBVElPTiA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IEFSSUFfREVTQyA9IFwiYXJpYS1kZXNjcmliZWRieVwiO1xuY29uc3QgQVJJQV9JTlZBTElEID0gXCJhcmlhLWludmFsaWRcIjtcblxuLy8gVXNpbmcgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHRvIGVuc3VyZSBpdCBydW5zIGFmdGVyIGZpZWxkLW9ic2VydmVyXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihmaWVsZHNldHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4pIHtcblx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRmb3IgKGNvbnN0IGZpZWxkc2V0IG9mIGZpZWxkc2V0cylcblx0XHRcdGlmIChmaWVsZHNldC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0XHRjb25zdCBpbnB1dHM6IEhUTUxJbnB1dEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0XHRsZXQgdmFsaWRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdFx0XHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiBmaWVsZHNldC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpIHtcblx0XHRcdFx0XHRpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdFx0dmFsaWQgPSBhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8ICFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0XHR2YWxpZElkID0gdXNlSWQoZWwpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpKSBpbnB1dHMucHVzaChlbCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykge1xuXHRcdFx0XHRcdGNvbnN0IGRlc2MgPSBhdHRyKGlucHV0LCBBUklBX0RFU0MpPy5yZXBsYWNlKHZhbGlkSWQgfHwgXCIjXCIsIFwiXCIpO1xuXG5cdFx0XHRcdFx0YXR0cihpbnB1dCwgQVJJQV9ERVNDLCBgJHt2YWxpZElkIHx8IFwiXCJ9ICR7ZGVzYyB8fCBcIlwifWAudHJpbSgpKTtcblx0XHRcdFx0XHRhdHRyKGlucHV0LCBBUklBX0lOVkFMSUQsIGAkeyF2YWxpZH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRFNFVCwgaGFuZGxlTXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfTE9HTyA9IHN0eWxlcy5sb2dvLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oW2xvZ29dOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRpZiAobG9nbz8uaXNDb25uZWN0ZWQgJiYgbG9nbz8uZmlyc3RFbGVtZW50Q2hpbGQgaW5zdGFuY2VvZiBTVkdTVkdFbGVtZW50KSB7XG5cdFx0Zm9yIChjb25zdCBpY29uIG9mIGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvckFsbChcImxpbmtbcmVsfj0naWNvbiddXCIpKVxuXHRcdFx0aWNvbi5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgXCJkaXNhYmxlZFwiKTsgLy8gRGlzYWJsZSBwcmV2aW91cyBpY29uIChidXQgbm90IHJlbW92ZSBpcyBhcyB0aGlzIG1ha2VzIE5leHQuanMgc2FkKVxuXG5cdFx0Y29uc3Qgc3ZnID0gbG9nby5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRjb25zdCBpc0RvdCA9IGxvZ28/Lmhhc0F0dHJpYnV0ZShcImRhdGEtZW52XCIpO1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoc3ZnKTtcblx0XHRjb25zdCB0ZXh0ID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcImNvbG9yXCIpO1xuXHRcdGNvbnN0IGJhY2sgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1tdGRzLWxvZ28tY29sb3JcIik7XG5cdFx0Y29uc3QgaWNvbiA9IHN2Zy5vdXRlckhUTUxcblx0XHRcdC5yZXBsYWNlKC9cXG4rL2csIFwiIFwiKSAvLyBQcmV2ZW50IGxpbmUgYnJlYWtzXG5cdFx0XHQucmVwbGFjZSgvKGZpbGx8d2lkdGh8aGVpZ2h0fHhtbG5zKT1cIlteXCJdK1wiL2dpLCBcIlwiKVxuXHRcdFx0LnJlcGxhY2UoXCI8c3ZnXCIsIGA8c3ZnIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIGZpbGw9XCIke3RleHR9XCJgKTtcblxuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoXG5cdFx0XHRPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpLCB7XG5cdFx0XHRcdGhyZWY6IGBkYXRhOmltYWdlL3N2Zyt4bWwsJHtlbmNvZGVVUklDb21wb25lbnQoYDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNTUgNTUnPjxyZWN0IGZpbGw9JyR7aXNEb3QgPyBcIm5vbmVcIiA6IGJhY2t9JyB3aWR0aD0nNTEnIGhlaWdodD0nNTEnIHg9JzInIHk9JzInIHN0cm9rZT0nJHt0ZXh0fScgc3Ryb2tlLWRhc2hhcnJheT0nMC4wOSA2LjM4JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1vcGFjaXR5PScke2lzRG90ID8gMC42IDogMH0nIHN0cm9rZS13aWR0aD0nMi4zJyByeD0nMjUuNScvPjxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg3LjUgNy41KVwiPiR7aWNvbn08L2c+PC9zdmc+YCl9YCxcblx0XHRcdFx0cmVsOiBcImljb25cIixcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19MT0dPLCBoYW5kbGVNdXRhdGlvbikpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFFVSUNLX0VWRU5ULCBhbmNob3JQb3NpdGlvbiwgYXR0ciwgb24sIG9uTG9hZGVkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19QT1BPVkVSID0gc3R5bGVzLnBvcG92ZXIuc3BsaXQoXCIgXCIpWzBdO1xubGV0IE9QRU5fUE9QT1ZFUlMgPSAwOyAvLyBTcGVlZCB1cCBieSBvbmx5IGNoZWNraW5nIGNsaWNrcyBpZiB3ZSBoYXZlIG9wZW4gcG9wb3ZlcnNcblxuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlKHsgdGFyZ2V0OiBlbCwgbmV3U3RhdGUgfTogRXZlbnQgJiB7IG5ld1N0YXRlPzogc3RyaW5nIH0pIHtcblx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19QT1BPVkVSKSkge1xuXHRcdGNvbnN0IGFuY2hvciA9IChlbC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QpPy5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pihcblx0XHRcdGBbcG9wb3ZlcnRhcmdldD1cIiR7ZWwuaWR9XCJdYCxcblx0XHQpO1xuXG5cdFx0aWYgKG5ld1N0YXRlID09PSBcImNsb3NlZFwiKSB7XG5cdFx0XHRPUEVOX1BPUE9WRVJTIC09IDE7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgZmFsc2UpO1xuXHRcdH0gZWxzZSBpZiAoYW5jaG9yKSB7XG5cdFx0XHRPUEVOX1BPUE9WRVJTICs9IDE7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgYW5jaG9yLCBhdHRyKGVsLCBcImRhdGEtcG9zaXRpb25cIikgfHwgXCJib3R0b21cIik7XG5cdFx0fVxuXHR9XG59XG5cbi8vIFBvbHlmaWxsIHBvcG92ZXJ0YXJnZXQgZm9yIDxhPiAobm90IHN1cHBvcnRlZCBieSBuYXRpdmUpXG4vLyBhbmQgYXV0b21hdGljYWxseSBhc3N1bWUgcG9wb3ZlcnRhcmdldCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQgcG9wb3ZlclxuLy8gYnV0IHJlc3BlY3QgdGhlIHBvcG92ZXJ0YXJnZXQgYW5kIHBvcG92ZXJ0YXJnZXRhY3Rpb24gYXR0cmlidXRlXG5mdW5jdGlvbiBoYW5kbGVMaW5rQ2xpY2soeyB0YXJnZXQgfTogRXZlbnQpIHtcblx0Y29uc3QgY2xvc2UgPVxuXHRcdE9QRU5fUE9QT1ZFUlMgJiYgKHRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKFwiYSxbcG9wb3ZlcnRhcmdldGFjdGlvbl1cIik7XG5cblx0aWYgKGNsb3NlKSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0YWN0aW9uXCIpIHx8IFwidG9nZ2xlXCI7XG5cdFx0Y29uc3Qgb3BlbiA9IGFjdGlvbiA9PT0gXCJzaG93XCIgfHwgKGFjdGlvbiA9PT0gXCJoaWRlXCIgPyBmYWxzZSA6IHVuZGVmaW5lZCk7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0XCIpIHx8IFwiXCIpO1xuXHRcdGNvbnN0IHBvcG92ZXIgPSAodGFyZ2V0IHx8IGNsb3NlKS5jbG9zZXN0PEhUTUxFbGVtZW50PihgLiR7Q1NTX1BPUE9WRVJ9YCk7XG5cblx0XHQvLyBQb3BvdmVyIGNhbiBiZSBkaXNjb25uZXRlZCBieSBjbGljayBoYW5kbGVyIGRlZXBlciBkb3duIGluIHRoZSBET00gdGhyZWUgYmVmb3JlIHJlYWNoaW5nIGRvY3VtZW50XG5cdFx0aWYgKHBvcG92ZXI/LmlzQ29ubmVjdGVkICYmIHBvcG92ZXI/LnRvZ2dsZVBvcG92ZXIpXG5cdFx0XHRwb3BvdmVyLnRvZ2dsZVBvcG92ZXIob3Blbik7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJ0b2dnbGVcIiwgaGFuZGxlVG9nZ2xlLCBRVUlDS19FVkVOVCk7IC8vIFVzZSBjYXB0dXJlIHNpbmNlIHRvZ2dsZSBkb2VzIG5vdCBidWJibGVcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlTGlua0NsaWNrKTsgLy8gQWxsb3cgYDxhPmAgdG8gdXNlIGBwb3BvdmVydGFyZ2V0YCBhcyB3ZWxsXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfVEFCTEUgPSBzdHlsZXMudGFibGUuc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbih0YWJsZXM6IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTFRhYmxlRWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCB0YWJsZSBvZiB0YWJsZXMpIHtcblx0XHRjb25zdCB0aHM6IHN0cmluZ1tdID0gW107IC8vIEFkZCBkYXRhLXRoPVwiXCIgdG8gZWFjaCBjZWxsIHRvIHN1cHBvcnQgZGF0YS1tb2JpbGUgZGVzaWduc1xuXG5cdFx0YXR0cih0YWJsZSwgXCJyb2xlXCIsIFwidGFibGVcIik7IC8vIEFkZCBoZWxwaW5nIHJvbGU9XCJcIiB0byBlbnN1cmUgc2NyZWVuIHJlYWRlcnMgdW5kZXJzdGFuZCB0aGUgdGFibGUgcmVnYXJkbGVzcyBvZiBDU1MgZGlzcGxheVxuXHRcdGlmICh0YWJsZS5jYXB0aW9uKSBhdHRyKHRhYmxlLmNhcHRpb24sIFwicm9sZVwiLCBcImNhcHRpb25cIik7XG5cdFx0Zm9yIChjb25zdCBncm91cCBvZiBbdGFibGUudEhlYWQsIHRhYmxlLnRGb290LCAuLi50YWJsZS50Qm9kaWVzXSlcblx0XHRcdGlmIChncm91cCkge1xuXHRcdFx0XHRhdHRyKGdyb3VwLCBcInJvbGVcIiwgXCJyb3dncm91cFwiKTtcblx0XHRcdFx0Y29uc3QgaXNUYm9keSA9IGdyb3VwLm5vZGVOYW1lID09PSBcIlRCT0RZXCI7XG5cblx0XHRcdFx0Zm9yIChjb25zdCByb3cgb2YgZ3JvdXAucm93cykge1xuXHRcdFx0XHRcdGF0dHIocm93LCBcInJvbGVcIiwgXCJyb3dcIik7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjZWxsIG9mIHJvdy5jZWxscykge1xuXHRcdFx0XHRcdFx0aWYgKGlzVGJvZHkpIGF0dHIoY2VsbCwgXCJkYXRhLXRoXCIsIHRoc1tjZWxsLmNlbGxJbmRleF0gfHwgXCI6ZW1wdHlcIik7XG5cdFx0XHRcdFx0XHRlbHNlIHRocy5wdXNoKGNlbGwuaW5uZXJUZXh0LnRyaW0oKSk7IC8vIFVzaW5nIGlubmVyVGV4dCB0byBvbmx5IGluY2x1ZGUgdmlzaWJsZSB0ZXh0XG5cdFx0XHRcdFx0XHRpZiAoY2VsbC5ub2RlTmFtZSA9PT0gXCJURFwiKSBhdHRyKGNlbGwsIFwicm9sZVwiLCBcImNlbGxcIik7XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0YXR0cihjZWxsLCBcInJvbGVcIiwgaXNUYm9keSA/IFwicm93aGVhZGVyXCIgOiBcImNvbHVtbmhlYWRlclwiKTtcblx0XHRcdFx0XHRcdFx0YXR0cihjZWxsLCBcInNjb3BlXCIsIGlzVGJvZHkgPyBcInJvd1wiIDogXCJjb2xcIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19UQUJMRSwgaGFuZGxlTXV0YXRpb24pKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBvbiwgb25Mb2FkZWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1RPR0dMRUdST1VQID0gYC4ke3N0eWxlcy50b2dnbGVncm91cC5zcGxpdChcIiBcIilbMF19YDtcblxuLy8gUHJldmVudCBicm93c2VycyBmcm9tIHNob3dpbmcgZGVmYXVsdCB2YWxpZGF0aW9uIGJ1YmJsZXNcbmZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQ6IEV2ZW50ICYgUGFydGlhbDxLZXlib2FyZEV2ZW50Pikge1xuXHRjb25zdCB7IGtleSwgdGFyZ2V0OiBlbCB9ID0gZXZlbnQ7XG5cdGNvbnN0IGdyb3VwID0gZWwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIGVsLmNsb3Nlc3QoQ1NTX1RPR0dMRUdST1VQKTtcblxuXHRpZiAoIWdyb3VwKSByZXR1cm47XG5cdGlmIChrZXkgPT09IFwiRW50ZXJcIikgZWwuY2xpY2soKTtcblx0aWYgKGtleT8uc3RhcnRzV2l0aChcIkFycm93XCIpKSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRjb25zdCBpbnB1dHMgPSBncm91cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpO1xuXHRcdGNvbnN0IGluZGV4ID0gWy4uLmlucHV0c10uaW5kZXhPZihlbCk7XG5cdFx0Y29uc3QgbW92ZSA9IGtleS5tYXRjaCgvQXJyb3coUmlnaHR8RG93bikvKSA/IDEgOiAtMTtcblx0XHRpbnB1dHNbKGlucHV0cy5sZW5ndGggKyBpbmRleCArIG1vdmUpICUgaW5wdXRzLmxlbmd0aF0/LmZvY3VzKCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb24oZG9jdW1lbnQsIFwia2V5ZG93blwiLCBoYW5kbGVLZXlEb3duKSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0YW5jaG9yUG9zaXRpb24sXG5cdGF0dHIsXG5cdElTX0JST1dTRVIsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0UVVJQ0tfRVZFTlQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBERVNDUklCRURCWSA9IFwiYXJpYS1kZXNjcmliZWRieVwiO1xuY29uc3QgRVNDID0gXCJFc2NhcGVcIjtcbmNvbnN0IExBQkVMTEVEQlkgPSBcImFyaWEtbGFiZWxsZWRieVwiO1xuY29uc3QgUE9TSVRJT05fQ1NTX1BST1BFUlRZID0gXCItLW10ZHMtdG9vbHRpcC1wb3NpdGlvblwiO1xuY29uc3QgVEhST1RUTEVfREVMQVkgPSAzMDA7XG5jb25zdCBUT09MVElQID0gSVNfQlJPV1NFUlxuXHQ/IE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwge1xuXHRcdFx0Y2xhc3NOYW1lOiBzdHlsZXMuX3Rvb2x0aXAsXG5cdFx0XHRpZDogXCJtdGRzLXRvb2x0aXBcIixcblx0XHRcdHBvcG92ZXI6IFwibWFudWFsXCIsXG5cdFx0fSlcblx0OiBudWxsOyAvLyBDcmVhdGUgYSBkdW1teSBlbGVtZW50IHRvIGF2b2lkIG51bGwgY2hlY2tzXG5cbmxldCBBTkNIT1I6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbmxldCBMQVNUX0NBTEwgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5sZXQgVEhST1RUTEU6IG51bWJlciB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+ID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlTW92ZSh7IHRhcmdldCwgdHlwZSwga2V5IH06IEV2ZW50ICYgeyBrZXk/OiBzdHJpbmcgfSkge1xuXHRpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIgJiYga2V5ICE9PSBFU0MpIHJldHVybjsgLy8gQWxsb3cgRVNDIGRpc21pc3MgdG8gZm9sbG93IGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvQVJJQS9hcGcvcGF0dGVybnMvdG9vbHRpcC9cblx0Y29uc3Qgd2FpdCA9IExBU1RfQ0FMTCArIFRIUk9UVExFX0RFTEFZIC0gRGF0ZS5ub3coKTtcblx0Y2xlYXJUaW1lb3V0KFRIUk9UVExFKTtcblx0VEhST1RUTEUgPSBzZXRUaW1lb3V0KFxuXHRcdGhhbmRsZU1vdmVUaHJvdHRsZWQsXG5cdFx0TWF0aC5tYXgod2FpdCwgMCksXG5cdFx0a2V5ID09PSBFU0MgPyBudWxsIDogdGFyZ2V0LFxuXHQpO1xufVxuXG4vLyBVc2luZyBhIHRocm90dGxlZCBmdW5jdGlvbiB0byBhdm9pZCBwZXJmb3JtYW5jZSBpc3N1ZXNcbmZ1bmN0aW9uIGhhbmRsZU1vdmVUaHJvdHRsZWQodGFyZ2V0OiBFbGVtZW50IHwgbnVsbCkge1xuXHRMQVNUX0NBTEwgPSBEYXRlLm5vdygpO1xuXG5cdC8vIEJ1aWxkIGFuZCBhcHBlbmQgdG9vbHRpcCBpZiBub3QgZXhpc3Rpbmdcblx0aWYgKCFUT09MVElQIHx8IHRhcmdldCA9PT0gVE9PTFRJUCkgcmV0dXJuOyAvLyBBbGxvdyB0b29sdGlwIHRvIGJlIGhvdmVyZWQsIGZvbGxvd2luZyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIxLyNjb250ZW50LW9uLWhvdmVyLW9yLWZvY3VzXG5cdGlmICghVE9PTFRJUD8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFRPT0xUSVApOyAvLyBFbnN1cmUgY29ubmVjdGVkXG5cdGxldCBhbmNob3IgPSB0YXJnZXQ/LmNsb3Nlc3Q/LjxFbGVtZW50PihcIltkYXRhLXRvb2x0aXBdXCIpIHx8IG51bGw7XG5cblx0Ly8gTm8gbmVlZCB0byB1cGRhdGVcblx0aWYgKGFuY2hvciA9PT0gQU5DSE9SKSByZXR1cm47XG5cblx0Y29uc3QgY29udGVudCA9IChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwXCIpKSB8fCBcIlwiO1xuXHRjb25zdCBwb3NpdGlvbiA9XG5cdFx0KGFuY2hvciAmJiBhdHRyKGFuY2hvciwgXCJkYXRhLXRvb2x0aXAtcG9zaXRpb25cIikpIHx8XG5cdFx0d2luZG93XG5cdFx0XHQuZ2V0Q29tcHV0ZWRTdHlsZShhbmNob3IgfHwgZG9jdW1lbnQuYm9keSlcblx0XHRcdC5nZXRQcm9wZXJ0eVZhbHVlKFBPU0lUSU9OX0NTU19QUk9QRVJUWSlcblx0XHRcdD8udHJpbSgpIHx8XG5cdFx0XCJ0b3BcIjtcblxuXHRjb25zdCBpc0hpZGRlbiA9XG5cdFx0IWNvbnRlbnQgfHxcblx0XHRjb250ZW50ID09PSBcImZhbHNlXCIgfHxcblx0XHRjb250ZW50ID09PSBcInRydWVcIiB8fFxuXHRcdHBvc2l0aW9uID09PSBcIm5vbmVcIjtcblxuXHRpZiAoaXNIaWRkZW4pIGFuY2hvciA9IG51bGw7IC8vIERvIG5vdCBzaG93IHRvb2x0aXAgaWYgYm9vbGlzaCB2YWx1ZVxuXHRpZiAoYW5jaG9yKSBUT09MVElQLnRleHRDb250ZW50ID0gY29udGVudDsgLy8gT25seSB1cGRhdGUgY29udGVudCBpZiBuZXcgYW5jaG9yXG5cblx0Y29uc3QgaGFkTGFiZWwgPSBBTkNIT1IgJiYgYXR0cihBTkNIT1IsIExBQkVMTEVEQlkpID09PSBUT09MVElQPy5pZDtcblx0Y29uc3QgaGFzTGFiZWwgPVxuXHRcdChhbmNob3IgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuXHRcdFx0PyBhbmNob3IuaW5uZXJUZXh0XG5cdFx0XHQ6IGFuY2hvcj8udGV4dENvbnRlbnRcblx0XHQpPy50cmltKCkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShMQUJFTExFREJZKSB8fFxuXHRcdGFuY2hvcj8uaGFzQXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKTtcblxuXHRBTkNIT1I/LnJlbW92ZUF0dHJpYnV0ZShoYWRMYWJlbCA/IExBQkVMTEVEQlkgOiBERVNDUklCRURCWSk7IC8vIFVubGluayBwcmV2aW91cyBhbmNob3Jcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgZmFsc2UpOyAvLyBSZXNldCBhbmNob3IgcG9zaXRpb25cblxuXHRBTkNIT1IgPSBhbmNob3I7IC8vIFN0b3JlIG5ldyBhbmNob3IgLSBtaWdodCBiZSBudWxsIGlmIG5vIG5ldyBhbmNob3Jcblx0aWYgKEFOQ0hPUikgYXR0cihBTkNIT1IsIGhhc0xhYmVsID8gREVTQ1JJQkVEQlkgOiBMQUJFTExFREJZLCBUT09MVElQPy5pZCk7IC8vIFVzZSB0b29sdGlwIGFzIGRlc2NyaXB0aW9uIGlmIGFsbHJlYWR5IGhhcyBsYWJlbFxuXHRUT09MVElQLnRvZ2dsZVBvcG92ZXIoISFhbmNob3IpO1xuXHRhbmNob3JQb3NpdGlvbihUT09MVElQLCBhbmNob3IgfHwgZmFsc2UsIHBvc2l0aW9uKTtcbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJibHVyLGZvY3VzLG1vdXNlb3V0LG1vdXNlb3ZlclwiLCBoYW5kbGVNb3ZlLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJrZXlkb3duXCIsIGhhbmRsZU1vdmUsIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcImJsdXJcIiwgaGFuZGxlTW92ZSwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgX2EyO1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIChfYTIgPSBlbC5nZXRBdHRyaWJ1dGUobmFtZSkpICE9IG51bGwgPyBfYTIgOiBudWxsO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIGFzQnV0dG9uID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGlzQ2xpY2sgPSBcImtleVwiIGluIGV2ZW50ICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKTtcbiAgaWYgKGlzQ2xpY2spIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChpc0NsaWNrICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBldmVudC50YXJnZXQuY2xpY2soKTtcbiAgcmV0dXJuIGlzQ2xpY2s7XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIGlmIChhdHRycykgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkgYXR0cihlbCwga2V5LCB2YWwpO1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcblxuLy8gdS1kZXRhaWxzLnRzXG52YXIgVUhUTUxEZXRhaWxzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyBVc2luZyB1bmRlcnNjb3JlIGluc3RlYWQgb2YgcHJpdmF0ZSBmaWVsZHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5fY29udGVudCA9IG51bGw7XG4gICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IG5hbWU6IFwic3VtbWFyeVwiIH0pLFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBwYXJ0OiBcImRldGFpbHMtY29udGVudFwiIH0pLFxuICAgICAgY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgJHtESVNQTEFZX0JMT0NLfVxuICAgICAgICA6OnNsb3R0ZWQodS1zdW1tYXJ5KSB7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogYmxvY2sgfVxuXHRcdFx0XHQ6OnNsb3R0ZWQodS1zdW1tYXJ5KTo6YmVmb3JlIHsgY29udGVudDogJyc7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgbWFyZ2luLWlubGluZTogLjA1ZW0gLjMxMjVlbTsgYm9yZGVyLWJsb2NrOiAuMzEyNWVtIHNvbGlkIHRyYW5zcGFyZW50OyBib3JkZXItaW5saW5lLXN0YXJ0OiAuNWVtIHNvbGlkIH1cblx0XHRcdFx0OjpzbG90dGVkKHUtc3VtbWFyeVthcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXSk6OmJlZm9yZSB7IHJvdGF0ZTogOTBkZWcgfVxuXHRcdFx0XHQ6aG9zdCA+IFtwYXJ0PVwiZGV0YWlscy1jb250ZW50XCJdOm5vdChbaGlkZGVuPVwiXCJdKSB7IGRpc3BsYXk6IGJsb2NrIH1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wib3BlblwiXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB2YXIgX2EyO1xuICAgIHRoaXMuX2NvbnRlbnQgPSAoX2EyID0gdGhpcy5zaGFkb3dSb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNoaWxkcmVuWzFdO1xuICAgIG9uKHRoaXMuX2NvbnRlbnQsIFwiYmVmb3JlbWF0Y2hcIiwgdGhpcyk7XG4gICAgb24odGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMuX2NvbnRlbnQpIG9mZih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgdGhpcy5fY29udGVudCA9IG51bGw7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIHByZXYsIG5leHQpIHtcbiAgICBjb25zdCBoaWRlID0gXCJvbmJlZm9yZW1hdGNoXCIgaW4gdGhpcyA/IFwidW50aWwtZm91bmRcIiA6IHRydWU7XG4gICAgY29uc3Qgb3BlbiA9IHRoaXMub3BlbjtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuY2hpbGRyZW4pXG4gICAgICBpZiAoZWwubm9kZU5hbWUgPT09IFwiVS1TVU1NQVJZXCIpIGF0dHIoZWwsIFwiYXJpYS1leHBhbmRlZFwiLCBgJHtvcGVufWApO1xuICAgIGlmICh0aGlzLl9jb250ZW50KSB7XG4gICAgICBhdHRyKHRoaXMuX2NvbnRlbnQsIFwiYXJpYS1oaWRkZW5cIiwgYCR7IW9wZW59YCk7XG4gICAgICB0aGlzLl9jb250ZW50LmhpZGRlbiA9IG9wZW4gPyBmYWxzZSA6IGhpZGU7XG4gICAgfVxuICAgIGlmIChvcGVuICYmIHRoaXMubmFtZSkge1xuICAgICAgY29uc3QgdURldGFpbHNMaXN0ID0gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgJHt0aGlzLm5vZGVOYW1lfVtuYW1lPVwiJHt0aGlzLm5hbWV9XCJdYFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgdURldGFpbHMgb2YgdURldGFpbHNMaXN0KVxuICAgICAgICBpZiAodURldGFpbHMgIT09IHRoaXMpIHVEZXRhaWxzLm9wZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHByb3AgPT09IFwib3BlblwiICYmIHByZXYgPT09IG51bGwgIT09IChuZXh0ID09PSBudWxsKSlcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJ0b2dnbGVcIikpO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IHRoaXMucXVlcnlTZWxlY3RvcihcIjpzY29wZSA+IHUtc3VtbWFyeVwiKTtcbiAgICBjb25zdCBpc1N1bW1hcnkgPSBzdW1tYXJ5ID09IG51bGwgPyB2b2lkIDAgOiBzdW1tYXJ5LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJiZWZvcmVtYXRjaFwiKSB0aGlzLm9wZW4gPSB0cnVlO1xuICAgIGlmIChpc1N1bW1hcnkgJiYgZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIGFzQnV0dG9uKGV2ZW50KTtcbiAgICBpZiAoaXNTdW1tYXJ5ICYmIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikgdGhpcy5vcGVuID0gIXRoaXMub3BlbjtcbiAgfVxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJvcGVuXCIpO1xuICB9XG4gIHNldCBvcGVuKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcIm9wZW5cIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgXCJuYW1lXCIpIHx8IFwiXCI7XG4gIH1cbiAgc2V0IG5hbWUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwibmFtZVwiLCB2YWx1ZSk7XG4gIH1cbn07XG52YXIgVUhUTUxTdW1tYXJ5RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJidXR0b25cIik7XG4gICAgdGhpcy5zbG90ID0gXCJzdW1tYXJ5XCI7XG4gICAgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWRldGFpbHNcIiwgVUhUTUxEZXRhaWxzRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXN1bW1hcnlcIiwgVUhUTUxTdW1tYXJ5RWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MRGV0YWlsc0VsZW1lbnQsIFVIVE1MU3VtbWFyeUVsZW1lbnQgfTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19GSVJFRk9YID0gSVNfQlJPV1NFUiAmJiAvZmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZ2V0TGFiZWwgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9IGdldFJvb3QoZWwpO1xuICBjb25zdCBsYWJlbCA9IGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiKSB8fCBcIlwiO1xuICBjb25zdCBsYWJlbHMgPSAoKF9hMiA9IGF0dHIoZWwsIFwiYXJpYS1sYWJlbGxlZGJ5XCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKS5zcGxpdCgvXFxzKy8pKSB8fCBbXTtcbiAgcmV0dXJuIFtcbiAgICAuLi5sYWJlbHMubWFwKChpZDIpID0+IHJvb3QgPT0gbnVsbCA/IHZvaWQgMCA6IHJvb3QucXVlcnlTZWxlY3RvcihgW2lkPVwiJHtpZDJ9XCJdYCkpLFxuICAgIC8vIEdldCBhbGwgbGFiZWxsZWRieSBlbGVtZW50c1xuICAgIC4uLkFycmF5LmZyb20oZWwubGFiZWxzIHx8IFtdKVxuICAgIC8vIEdldCBhbGwgPGxhYmVsPiBlbGVtZW50c1xuICBdLnJlZHVjZSgoYWNjLCBlbDIpID0+IHtcbiAgICB2YXIgX2EzO1xuICAgIHJldHVybiBhY2MgfHwgKChfYTMgPSBlbDIgPT0gbnVsbCA/IHZvaWQgMCA6IGVsMi5pbm5lclRleHQpID09IG51bGwgPyB2b2lkIDAgOiBfYTMudHJpbSgpKSB8fCBcIlwiO1xuICB9LCBsYWJlbCk7XG59O1xuXG4vLyB1LXByb2dyZXNzLnRzXG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MUHJvZ3Jlc3NFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcInZhbHVlXCIsIFwibWF4XCJdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IGhpZGRlbjogXCJcIiB9KSxcbiAgICAgIC8vIFNsb3QgaGlkaW5nIGNvbnRlbnQgYWxsb3dzIGxlZ2FjeSBicm93c2VyIHRvIGRpc3BsYXkgZmFsbGJhY2sgdGV4dFxuICAgICAgY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgYm9yZGVyOiAxcHggc29saWQ7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgaGVpZ2h0OiAuNWVtOyB3aWR0aDogMTBlbTsgb3ZlcmZsb3c6IGhpZGRlbiB9XG4gICAgICAgIDpob3N0OjpiZWZvcmUgeyBjb250ZW50OiAnJzsgZGlzcGxheTogYmxvY2s7IGhlaWdodDogMTAwJTsgYmFja2dyb3VuZDogY3VycmVudENvbG9yOyB3aWR0aDogdmFyKC0tcGVyY2VudGFnZSwgMCUpOyB0cmFuc2l0aW9uOiB3aWR0aCAuMnMgfVxuICAgICAgICA6aG9zdCg6bm90KFt2YWx1ZV0pKSB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZyxjdXJyZW50Q29sb3IgMjUlLCB0cmFuc3BhcmVudCA1MCUsIGN1cnJlbnRDb2xvciA3NSUpIDUwJS80MDAlIH1cbiAgICAgICAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSB7IDpob3N0IHsgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlIDJzIGxpbmVhciBpbmZpbml0ZSB9ICB9XG4gICAgICAgIEBrZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZSB7IGZyb20geyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDEwMCUgfSB0byB7IGJhY2tncm91bmQtcG9zaXRpb24teDogMCB9IH1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoU0tJUF9BVFRSX0NIQU5HRSkgcmV0dXJuO1xuICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgIGNvbnN0IHJvbGVJbWFnZSA9IElTX0lPUyB8fCBJU19GSVJFRk9YO1xuICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKHRoaXMucG9zaXRpb24gKiAxMDApKTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wZXJjZW50YWdlXCIsIGAke3BlcmNlbnRhZ2V9JWApO1xuICAgIGxldCBsYWJlbCA9IGdldExhYmVsKHRoaXMpO1xuICAgIGlmIChyb2xlSW1hZ2UpIGxhYmVsID0gYCR7bGFiZWwucmVwbGFjZSgvXFxkKyUkLywgXCJcIil9ICR7cGVyY2VudGFnZX0lYDtcbiAgICBpZiAoSVNfRklSRUZPWCkgZm9yIChjb25zdCBlbCBvZiB0aGlzLmxhYmVscykgYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIsIGxhYmVsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1idXN5XCIsIGAke3RoaXMucG9zaXRpb24gPT09IC0xfWApO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsXCIsIGxhYmVsLnRyaW0oKSk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtbGFiZWxsZWRieVwiLCBudWxsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1heFwiLCBcIjEwMFwiKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1pblwiLCBcIjBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVub3dcIiwgYCR7cGVyY2VudGFnZX1gKTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCByb2xlSW1hZ2UgPyBcImltZ1wiIDogXCJwcm9ncmVzc2JhclwiKTtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG4gIH1cbiAgZ2V0IGxhYmVscygpIHtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuY2xvc2VzdChcImxhYmVsOm5vdChbZm9yXSlcIik7XG4gICAgY29uc3QgaWQyID0gdXNlSWQodGhpcyk7XG4gICAgaWYgKGxhYmVsKSBsYWJlbC5odG1sRm9yID0gaWQyO1xuICAgIGNvbnN0IGVsID0gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYGxhYmVsW2Zvcj1cIiR7aWQyfVwiXWBcbiAgICApO1xuICAgIHJldHVybiBlbDtcbiAgfVxuICBnZXQgcG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUgPT09IG51bGwgPyAtMSA6IE1hdGgubWluKHRoaXMudmFsdWUgLyB0aGlzLm1heCwgMSk7XG4gIH1cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBnZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiKTtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IG1heCgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwibWF4XCIpIHx8IDE7XG4gIH1cbiAgc2V0IG1heChtYXgpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJtYXhcIiwgbWF4KTtcbiAgfVxufTtcbi8vIFByZXZlbnQgQ2hyb21lIERldlRvb2xzIHdhcm5pbmcgYWJvdXQgPGxhYmVsIGZvcj1cIlwiPiBwb2ludGluZyB0byA8dS1wcm9ncmVzcz5cblVIVE1MUHJvZ3Jlc3NFbGVtZW50LmZvcm1Bc3NvY2lhdGVkID0gdHJ1ZTtcbnZhciBpc051bWVyaWMgPSAodmFsdWUpID0+ICFOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlRmxvYXQoYCR7dmFsdWV9YCkpICYmIE51bWJlci5pc0Zpbml0ZShOdW1iZXIodmFsdWUpKTtcbnZhciBnZXROdW1iZXIgPSAoZWwsIGtleSkgPT4ge1xuICBjb25zdCB2YWx1ZSA9IGF0dHIoZWwsIGtleSk7XG4gIHJldHVybiBpc051bWVyaWModmFsdWUpID8gTWF0aC5tYXgoMCwgTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUpKSA6IG51bGw7XG59O1xudmFyIHNldE51bWJlciA9IChlbCwga2V5LCB2YWwpID0+IHtcbiAgaWYgKHZhbCA9PT0gbnVsbCB8fCBpc051bWVyaWModmFsKSkgYXR0cihlbCwga2V5LCBgJHt2YWx9YCk7XG4gIGVsc2UgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2V0IG5vbi1udW1lcmljICcke2F0dHJ9JzogJyR7dmFsfSdgKTtcbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXByb2dyZXNzXCIsIFVIVE1MUHJvZ3Jlc3NFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxQcm9ncmVzc0VsZW1lbnQgfTtcbiJdLCJuYW1lcyI6WyJJU19CUk9XU0VSIiwiSVNfQU5EUk9JRCIsIl9hIiwiSVNfQlJPV1NFUiQ1IiwiU0FGRV9MQUJFTExFREJZIiwiRElTUExBWV9CTE9DSyIsIlVIVE1MRWxlbWVudCIsImF0dHIiLCJlbCIsIm5hbWUiLCJ2YWx1ZSIsIl9hMiIsImV2ZW50cyIsImFjdGlvbiIsImVsZW1lbnQiLCJyZXN0IiwidHlwZSIsIm9uIiwib2ZmIiwiYXR0YWNoU3R5bGUiLCJjc3MiLCJjcmVhdGVFbGVtZW50Iiwib2JzZXJ2ZXJzIiwibXV0YXRpb25PYnNlcnZlciIsIm9wdGlvbnMiLCJvYnNlcnZlciIsImRldGFpbCIsImFzQnV0dG9uIiwiZXZlbnQiLCJpc0NsaWNrIiwiZ2V0Um9vdCIsIm5vZGUiLCJyb290IiwiaWQiLCJ1c2VJZCIsInRhZ05hbWUiLCJ0ZXh0IiwiYXR0cnMiLCJjdXN0b21FbGVtZW50cyIsImluc3RhbmNlIiwiQVJJQV9DT05UUk9MUyIsIkFSSUFfU0VMRUNURUQiLCJVSFRNTFRhYnNFbGVtZW50IiwicXVlcnlXaXRob3V0TmVzdGVkIiwiZ2V0U2VsZWN0ZWRJbmRleCIsImluZGV4Iiwic2V0U2VsZWN0ZWQiLCJVSFRNTFRhYkxpc3RFbGVtZW50IiwidGFiIiwia2V5IiwidGFicyIsInByZXYiLCJuZXh0IiwiU0tJUF9BVFRSX0NIQU5HRSIsIlVIVE1MVGFiRWxlbWVudCIsInBhbmVscyIsIm5leHRQYW5lbCIsImdldFBhbmVsIiwicGFuZWwiLCJ0YWJsaXN0IiwidGFiTGlzdCIsIlVIVE1MVGFiUGFuZWxFbGVtZW50IiwiaXNGb2N1c2FibGUiLCJ0YWciLCJzZWxmIiwiaWQyIiwiX19kZWZQcm9wIiwiX19nZXRPd25Qcm9wU3ltYm9scyIsIl9faGFzT3duUHJvcCIsIl9fcHJvcElzRW51bSIsIl9fZGVmTm9ybWFsUHJvcCIsIm9iaiIsIl9fc3ByZWFkVmFsdWVzIiwiYSIsImIiLCJwcm9wIiwiSVNfRklSRUZPWCIsIklTX0lPUyIsIklTX0JST1dTRVIkNCIsIkZPQ1VTX09VVExJTkUiLCJ0ZXh0MiIsInZhbCIsIkxJVkUiLCJMSVZFX1NSX0ZJWCIsInNwZWFrIiwic2V0VmFsdWUiLCJpbnB1dCIsImRhdGEiLCJfYiIsInByb3RvIiwiSVNfUFJFU1MiLCJpc01vdXNlRG93biIsIkVWRU5UUyIsIkVWRU5UX09OQ0UiLCJJU19GSVJFRk9YX0RFU0tUT1AiLCJJU19NT0JJTEUiLCJGQUxTRSIsIlRFWFRTIiwiVUhUTUxDb21ib2JveEVsZW1lbnQiLCJyZW5kZXIiLCJzeW5jSW5wdXRWYWx1ZSIsIl8iLCJ0YXJnZXQiLCJvbkJsdXIiLCJvbkNsaWNrIiwib25Gb2N1cyIsIm9uSW5wdXQiLCJvbktleURvd24iLCJpc0RhdGEiLCJfZm9jdXMiLCJfdGV4dHMiLCJpdGVtcyIsImNvbnRyb2wiLCJsaXN0IiwibXVsdGlwbGUiLCJsYWJlbCIsImVkaXRzIiwiYWRkZWROb2RlcyIsInJlbW92ZWROb2RlcyIsInNob3VsZEFubm91bmNlIiwiaW5wdXRNb2RlIiwibmV4dEZvY3VzIiwiX2EzIiwiaWR4Iiwic2VsZWN0IiwiaXRlbSIsIm9wdGlvbiIsImxhYmVsMiIsImFyaWEiLCJvcHQiLCJpdGVtVGV4dCIsInN5bmNDbGVhcldpdGhJbnB1dCIsInN5bmNPcHRpb25zV2l0aEl0ZW1zIiwiX3NwZWFrIiwidmFsdWVzIiwid2l0aEV2ZW50IiwiZGlzcGF0Y2hNYXRjaCIsImNoYW5nZSIsImNyZWF0YWJsZSIsInF1ZXJ5IiwibWF0Y2giLCJvIiwiZGlzcGF0Y2hDaGFuZ2UiLCJyZW1vdmFibGUiLCJhZGQiLCJyZW1vdmUiLCJpIiwiaXRlbTIiLCJvbkJsdXJyZWQiLCJ4IiwieSIsImNsZWFyIiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwicmVwZWF0IiwiaXNDb250cm9sIiwiaW5UZXh0IiwiZm9ybSIsIlFVSUNLX0VWRU5UIiwiZGVib3VuY2UiLCJjYWxsYmFjayIsImRlbGF5IiwidGltZXIiLCJhcmdzIiwiVVVJRCIsIlNDUk9MTEVSIiwiVEFSR0VUUyIsIlRBUkdFVFNfVVBEQVRFIiwidXBkYXRlIiwiUE9TSVRJT04iLCJhbmNob3JQb3NpdGlvbiIsImFuY2hvciIsInBsYWNlIiwiZm9yY2UiLCJwb3NpdGlvbiIsImlzSFRNTEFuY2hvciIsInRhcmdldFciLCJ0YXJnZXRIIiwiYW5jaG9yVyIsImFuY2hvckgiLCJ3aWR0aCIsImhlaWdodCIsInZpZXdXIiwidmlld0giLCJzY3JvbGxYIiwic2Nyb2xsWSIsImFuY2hvclgiLCJhbmNob3JZIiwiY2VudGVyWCIsImNlbnRlclkiLCJoYXNTcGFjZUxlZnQiLCJoYXNTcGFjZVJpZ2h0IiwiaGFzU3BhY2VPdmVyIiwiaGFzU3BhY2VVbmRlciIsImlzVmVydGljYWwiLCJpc1JpZ2h0IiwiaXNVbmRlciIsInZpZXdYIiwidmlld1kiLCJjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyIiwicXVldWUiLCJvbkZyYW1lIiwib25UaW1lciIsIk1VVEFUT1JTIiwib25NdXRhdGlvbiIsImNsYXNzTmFtZSIsImVsZW1zIiwibXV0YXRvciIsIm9uTG9hZGVkIiwicnVuIiwiaXNJbnB1dExpa2UiLCJNQVRPTU8iLCJFTkFCTEVEIiwiYW5hbHl0aWNzIiwibWF0b21vSWQiLCJlbmFibGVkIiwidXJsIiwidGl0bGUiLCJjYXRlZ29yeSIsInYiLCJyZXN1bHRzIiwiZ2V0U3RlcHMiLCJub3ciLCJtYXgiLCJzaG93Iiwib2Zmc2V0Iiwic3RhcnQiLCJlbmQiLCJwYWdlcyIsInBhZ2luYXRpb24iLCJjdXJyZW50IiwidG90YWwiLCJwYWdlIiwic2hlZXQiLCJDU1NfQVBQIiwic3R5bGVzIiwiQ1NTX1NUSUNLWSIsIkNTU19UT0dHTEUiLCJDU1NfU0lERUJBUiIsInVzZVRyYW5zaXRpb24iLCJ0b2dnbGVBcHBFeHBhbmRlZCIsImhhbmRsZVRvZ2dsZUNsaWNrIiwic3RvcCIsInNpZGViYXIiLCJoYW5kbGVSZXNpemUiLCJNSU5fWSIsIlNDUk9MTF9VUCIsIlNUSUNLIiwiU1RJQ0tfRUwiLCJTVElDS19IIiwiU1RJQ0tfWSIsIlNUVUNLIiwiV0lOX0giLCJXSU5fWSIsImhhbmRsZU11dGF0aW9uIiwic3RpY2t5IiwiaGFuZGxlU2Nyb2xsIiwiTkVYVF9ZIiwiTkVYVF9VUCIsIkNTU19CUkVBRENSVU1CUyIsImJyZWFkY3J1bWJzIiwiYnJlYWRjdW1icyIsImNydW1iIiwibGVuZ3RoIiwiQ1NTX0RJQUxPRyIsIkRJQUxPR1MiLCJoYW5kbGVNb2RhbCIsImRpYWxvZyIsImhhbmRsZUNsaWNrIiwiaGFuZGxlSW5qZWN0IiwiZmlyc3QiLCJJU19CUk9XU0VSJDIiLCJESVNBQkxFRCIsIlNFTEVDVEVEIiwiVUhUTUxPcHRpb25FbGVtZW50IiwiTElWRV9USU1FUiIsIklOUFVUX0RFQk9VTkNFIiwiRVZFTlRTX0lOUFVUIiwiVUhUTUxEYXRhTGlzdEVsZW1lbnQiLCJkaXNjb25uZWN0SW5wdXQiLCJfcHJldiIsInNldHVwSW5wdXQiLCJzZXRFeHBhbmRlZCIsIm9wZW4iLCJpc0lucHV0IiwicmVsYXRlZFRhcmdldCIsIl9yb290IiwiX2lucHV0IiwiZmlsdGVyIiwiaGlkZGVuIiwidmlzaWJsZSIsIkNTU19GSUVMRCIsIkNTU19WQUxJREFUSU9OUyIsIkNTU19WQUxJREFUSU9OIiwiZ2V0VGV4dCIsInN0eWxlIiwiZmllbGRzIiwidmFsaWRhdGUiLCJmaWVsZCIsImxhYmVscyIsImRlc2NzIiwidmFsaWRzIiwiY29tYm9ib3giLCJ2YWxpZCIsImRlc2MiLCJyZW5kZXJDb21ib2JveCIsInJlbmRlckNvdW50ZXIiLCJyZW5kZXJUZXh0YXJlYVNpemUiLCJ0ZXh0YXJlYSIsImxpbWl0IiwicmVtYWluZGVyIiwibmV4dEludmFsaWQiLCJwcmV2SW52YWxpZCIsIm92ZXIiLCJ1bmRlciIsImhhbmRsZVRvZ2dsZSIsIm5ld1N0YXRlIiwiaGFuZGxlSW5wdXQiLCJoYW5kbGVWYWxkaWF0aW9uIiwiaGFuZGxlQmVmb3JlQ2hhbmdlIiwiQ1NTX0ZJRUxEU0VUIiwiQVJJQV9ERVNDIiwiQVJJQV9JTlZBTElEIiwiZmllbGRzZXRzIiwiZmllbGRzZXQiLCJpbnB1dHMiLCJ2YWxpZElkIiwiQ1NTX0xPR08iLCJsb2dvIiwiaWNvbiIsInN2ZyIsImlzRG90IiwiYmFjayIsIkNTU19QT1BPVkVSIiwiT1BFTl9QT1BPVkVSUyIsImhhbmRsZUxpbmtDbGljayIsImNsb3NlIiwicG9wb3ZlciIsIkNTU19UQUJMRSIsInRhYmxlcyIsInRhYmxlIiwidGhzIiwiZ3JvdXAiLCJpc1Rib2R5Iiwicm93IiwiY2VsbCIsIkNTU19UT0dHTEVHUk9VUCIsImhhbmRsZUtleURvd24iLCJtb3ZlIiwiREVTQ1JJQkVEQlkiLCJFU0MiLCJMQUJFTExFREJZIiwiUE9TSVRJT05fQ1NTX1BST1BFUlRZIiwiVEhST1RUTEVfREVMQVkiLCJUT09MVElQIiwiQU5DSE9SIiwiTEFTVF9DQUxMIiwiVEhST1RUTEUiLCJoYW5kbGVNb3ZlIiwid2FpdCIsImhhbmRsZU1vdmVUaHJvdHRsZWQiLCJjb250ZW50IiwiaGFkTGFiZWwiLCJoYXNMYWJlbCIsIklTX0JST1dTRVIkMSIsIlVIVE1MRGV0YWlsc0VsZW1lbnQiLCJoaWRlIiwidURldGFpbHNMaXN0IiwidURldGFpbHMiLCJzdW1tYXJ5IiwiaXNTdW1tYXJ5IiwiVUhUTUxTdW1tYXJ5RWxlbWVudCIsImdldExhYmVsIiwiYWNjIiwiZWwyIiwiVUhUTUxQcm9ncmVzc0VsZW1lbnQiLCJyb2xlSW1hZ2UiLCJwZXJj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WUFBYSxHQUFHLEtBQUssV0FBYSxFQUFFLEVBQUUsRUFDakRBLEVBQUssS0FBTSxhQUFjNEcsRUFBTSxLQUFJLENBQUUsRUFDckM1RyxFQUFLLEtBQU0sa0JBQW1CLElBQUksRUFDbENBLEVBQUssS0FBTSxnQkFBaUIsS0FBSyxFQUNqQ0EsRUFBSyxLQUFNLGdCQUFpQixHQUFHLEVBQy9CQSxFQUFLLEtBQU0sZ0JBQWlCLEdBQUdvWCxDQUFVLEVBQUUsRUFDM0NwWCxFQUFLLEtBQU0sT0FBUW1YLEVBQVksTUFBUSxhQUFhLEVBQ3BEclUsR0FBbUIsRUFDdkIsQ0FDRSxJQUFJLFFBQVMsQ0FDWCxNQUFNOEQsRUFBUSxLQUFLLFFBQVEsa0JBQWtCLEVBQ3ZDbEQsRUFBTS9CLEdBQU0sSUFBSSxFQUN0QixPQUFJaUYsSUFBT0EsRUFBTSxRQUFVbEQsR0FDaEJuQyxHQUFRLElBQUksRUFBRSxpQkFDdkIsY0FBY21DLENBQUcsSUFDbEIsQ0FFTCxDQUNFLElBQUksVUFBVyxDQUNiLE9BQU8sS0FBSyxRQUFVLEtBQU8sR0FBSyxLQUFLLElBQUksS0FBSyxNQUFRLEtBQUssSUFBSyxDQUFDLENBQ3ZFLENBQ0UsSUFBSSxPQUFRLENBQ1YsT0FBTzJULEdBQVUsS0FBTSxPQUFPLENBQ2xDLENBQ0UsSUFBSSxNQUFNbFgsRUFBTyxDQUNmbVgsR0FBVSxLQUFNLFFBQVNuWCxDQUFLLENBQ2xDLENBQ0UsSUFBSSxLQUFNLENBQ1IsT0FBT2tYLEdBQVUsS0FBTSxLQUFLLEdBQUssQ0FDckMsQ0FDRSxJQUFJLElBQUkzSixFQUFLLENBQ1g0SixHQUFVLEtBQU0sTUFBTzVKLENBQUcsQ0FDOUIsQ0FDQSxFQUVBd0osR0FBcUIsZUFBaUIsR0FDdEMsSUFBSUssR0FBYXBYLEdBQVUsQ0FBQyxPQUFPLE1BQU0sT0FBTyxXQUFXLEdBQUdBLENBQUssRUFBRSxDQUFDLEdBQUssT0FBTyxTQUFTLE9BQU9BLENBQUssQ0FBQyxFQUNwR2tYLEdBQVksQ0FBQ3BYLEVBQUl5QyxJQUFRLENBQzNCLE1BQU12QyxFQUFRSCxFQUFLQyxFQUFJeUMsQ0FBRyxFQUMxQixPQUFPNlUsR0FBVXBYLENBQUssRUFBSSxLQUFLLElBQUksRUFBRyxPQUFPLFdBQVdBLENBQUssQ0FBQyxFQUFJLElBQ3BFLEVBQ0ltWCxHQUFZLENBQUNyWCxFQUFJeUMsRUFBS2dDLElBQVEsQ0FDaEMsR0FBSUEsSUFBUSxNQUFRNlMsR0FBVTdTLENBQUcsRUFBRzFFLEVBQUtDLEVBQUl5QyxFQUFLLEdBQUdnQyxDQUFHLEVBQUUsTUFDckQsT0FBTSxJQUFJLE1BQU0sOEJBQThCMUUsQ0FBSSxPQUFPMEUsQ0FBRyxHQUFHLENBQ3RFLEVBQ0EsT0FBQTNDLEdBQWUsT0FBTyxhQUFjbVYsRUFBb0IiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDEwLDE4LDE5XX0=
|