@mattilsynet/design 2.1.12 → 2.2.0

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.
Files changed (87) hide show
  1. package/mtds/_virtual/client.js +6 -0
  2. package/mtds/_virtual/client.js.map +1 -0
  3. package/mtds/_virtual/client2.js +5 -0
  4. package/mtds/_virtual/client2.js.map +1 -0
  5. package/mtds/_virtual/index.js +5 -0
  6. package/mtds/_virtual/index.js.map +1 -0
  7. package/mtds/_virtual/react-dom-client.development.js +5 -0
  8. package/mtds/_virtual/react-dom-client.development.js.map +1 -0
  9. package/mtds/_virtual/react-dom-client.production.js +5 -0
  10. package/mtds/_virtual/react-dom-client.production.js.map +1 -0
  11. package/mtds/_virtual/scheduler.development.js +5 -0
  12. package/mtds/_virtual/scheduler.development.js.map +1 -0
  13. package/mtds/_virtual/scheduler.production.js +5 -0
  14. package/mtds/_virtual/scheduler.production.js.map +1 -0
  15. package/mtds/analytics/analytics.js +16 -14
  16. package/mtds/analytics/analytics.js.map +1 -1
  17. package/mtds/app/app.js +3 -2
  18. package/mtds/app/app.js.map +1 -1
  19. package/mtds/button/button.d.ts +2 -1
  20. package/mtds/button/button.js +12 -12
  21. package/mtds/button/button.js.map +1 -1
  22. package/mtds/chart/chart-element.d.ts +5 -4
  23. package/mtds/chart/chart-element.js +111 -0
  24. package/mtds/chart/chart-element.js.map +1 -0
  25. package/mtds/chart/chart.d.ts +6 -0
  26. package/mtds/chart/chart.module.css.js +325 -0
  27. package/mtds/chart/chart.module.css.js.map +1 -0
  28. package/mtds/chart/chart.stories.d.ts +10 -0
  29. package/mtds/external/@u-elements/u-details/dist/u-details.js +1 -1
  30. package/mtds/external/@u-elements/u-details/dist/u-details.js.map +1 -1
  31. package/mtds/external/react-dom/cjs/react-dom-client.development.js +15323 -0
  32. package/mtds/external/react-dom/cjs/react-dom-client.development.js.map +1 -0
  33. package/mtds/external/react-dom/cjs/react-dom-client.production.js +9409 -0
  34. package/mtds/external/react-dom/cjs/react-dom-client.production.js.map +1 -0
  35. package/mtds/external/react-dom/client.js +24 -0
  36. package/mtds/external/react-dom/client.js.map +1 -0
  37. package/mtds/external/scheduler/cjs/scheduler.development.js +237 -0
  38. package/mtds/external/scheduler/cjs/scheduler.development.js.map +1 -0
  39. package/mtds/external/scheduler/cjs/scheduler.production.js +234 -0
  40. package/mtds/external/scheduler/cjs/scheduler.production.js.map +1 -0
  41. package/mtds/external/scheduler/index.js +11 -0
  42. package/mtds/external/scheduler/index.js.map +1 -0
  43. package/mtds/field/field.js +36 -35
  44. package/mtds/field/field.js.map +1 -1
  45. package/mtds/illustrations/bunny.svg +1 -0
  46. package/mtds/illustrations/eagle.svg +1 -0
  47. package/mtds/illustrations/index.json +22 -2
  48. package/mtds/illustrations/moose.svg +1 -0
  49. package/mtds/illustrations/polarbear.svg +1 -0
  50. package/mtds/illustrations/puppy.svg +1 -0
  51. package/mtds/index.d.ts +29 -5
  52. package/mtds/index.iife.js +335 -15
  53. package/mtds/index.js +19 -15
  54. package/mtds/index.js.map +1 -1
  55. package/mtds/package.json.js +1 -1
  56. package/mtds/pagination/pagination.js +3 -2
  57. package/mtds/pagination/pagination.js.map +1 -1
  58. package/mtds/popover/popover-observer.js +24 -23
  59. package/mtds/popover/popover-observer.js.map +1 -1
  60. package/mtds/react.d.ts +1 -0
  61. package/mtds/react.js +16 -14
  62. package/mtds/react.js.map +1 -1
  63. package/mtds/styles.css +1 -1
  64. package/mtds/styles.json +63 -40
  65. package/mtds/styles.module.css.js +138 -92
  66. package/mtds/styles.module.css.js.map +1 -1
  67. package/mtds/table/table-observer.js +20 -15
  68. package/mtds/table/table-observer.js.map +1 -1
  69. package/mtds/table/table.d.ts +2 -2
  70. package/mtds/table/table.js.map +1 -1
  71. package/mtds/table/table.stories.d.ts +5 -4
  72. package/mtds/tailwind.css +1 -0
  73. package/mtds/toast/toast-helper.d.ts +11 -0
  74. package/mtds/toast/toast-helper.js +14 -0
  75. package/mtds/toast/toast-helper.js.map +1 -0
  76. package/mtds/toast/toast-observer.js +19 -0
  77. package/mtds/toast/toast-observer.js.map +1 -0
  78. package/mtds/toast/toast.d.ts +10 -2
  79. package/mtds/toast/toast.js +39 -0
  80. package/mtds/toast/toast.js.map +1 -0
  81. package/mtds/toast/toast.stories.d.ts +19 -0
  82. package/mtds/utils.d.ts +0 -7
  83. package/mtds/utils.js +14 -16
  84. package/mtds/utils.js.map +1 -1
  85. package/package.json +21 -14
  86. package/mtds/chart/chart-doughnut.d.ts +0 -1
  87. /package/mtds/{chart/chart-axis.d.ts → toast/toast-observer.d.ts} +0 -0
@@ -1,32 +1,352 @@
1
- var mtds=function(O){"use strict";var Pi=Object.defineProperty,en=Object.getOwnPropertySymbols,Ni=Object.prototype.hasOwnProperty,Hi=Object.prototype.propertyIsEnumerable,nn=(t,e,n)=>e in t?Pi(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Bi=(t,e)=>{for(var n in e||(e={}))Ni.call(e,n)&&nn(t,n,e[n]);if(en)for(var n of en(e))Hi.call(e,n)&&nn(t,n,e[n]);return t},vt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",on=vt&&/android/i.test(navigator.userAgent),Fi=vt&&/firefox/i.test(navigator.userAgent),Ui=vt&&/iPad|iPhone|iPod/.test(navigator.userAgent),sn;vt&&/^Mac/i.test(((sn=navigator.userAgentData)==null?void 0:sn.platform)||navigator.platform);var Vi="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",qi=typeof HTMLElement>"u"?class{}:HTMLElement;function _(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var rn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Ot=(t,...e)=>rn("add",t,e),Wi=(t,...e)=>rn("remove",t,e),Mt=new WeakMap,de=(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)}},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},ji=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},Ki=0,an=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Ki).toString(32)}`),t.id):"",Rt=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))_(o,i,s);return o},Yi={define:(t,e)=>!vt||window.customElements.get(t)||window.customElements.define(t,e)},Xi=t=>{var e;const n=_(t,"aria-label")||"";return[...(((e=_(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(i=>document.getElementById(i)),...Array.from(t.labels||[])].reduce((i,s)=>{var r;return i||((r=s?.innerText)==null?void 0:r.trim())||""},n)},Z,Gi=0,ue=t=>{Z||(Z=Rt("div"),Z.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",_(Z,"aria-live","assertive")),Z.isConnected||document.body.append(Z),t&&(Z.textContent=`${t}${Gi++%2?" ":""}`)},ln=(t,e,n="")=>{var o,i;const s={bubbles:!0,composed:!0,data:e,inputType:n},r=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(o=Object.getOwnPropertyDescriptor(r,"value"))==null?void 0:o.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},fe=!1,pe=t=>(t?.type==="mouseup"&&(fe=!1),t?.type==="mousedown"&&(fe=!0,Ot(document,"mouseup",pe,{once:!0})),fe),Qi=`:host(:not([hidden])) { display: block; -webkit-tap-highlight-color: rgba(0, 0, 0, 0) } /* Must be display block in Safari to allow focus inside */
1
+ var mtds=function(N){"use strict";var ds=Object.defineProperty,rn=Object.getOwnPropertySymbols,us=Object.prototype.hasOwnProperty,fs=Object.prototype.propertyIsEnumerable,an=(t,e,n)=>e in t?ds(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,ps=(t,e)=>{for(var n in e||(e={}))us.call(e,n)&&an(t,n,e[n]);if(rn)for(var n of rn(e))fs.call(e,n)&&an(t,n,e[n]);return t},Ct=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",ln=Ct&&/android/i.test(navigator.userAgent),ms=Ct&&/firefox/i.test(navigator.userAgent),hs=Ct&&/iPad|iPhone|iPod/.test(navigator.userAgent),cn;Ct&&/^Mac/i.test(((cn=navigator.userAgentData)==null?void 0:cn.platform)||navigator.platform);var bs="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",gs=typeof HTMLElement>"u"?class{}:HTMLElement;function x(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 dn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Pt=(t,...e)=>dn("add",t,e),vs=(t,...e)=>dn("remove",t,e),Dt=new WeakMap,me=(t,e)=>{if(e===void 0)return Dt.get(t);try{Dt.get(t).disconnect(),Dt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),Dt.set(t,n)}},_s=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},ws=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},ys=0,un=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++ys).toString(32)}`),t.id):"",Nt=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))x(o,i,s);return o},xs={define:(t,e)=>!Ct||window.customElements.get(t)||window.customElements.define(t,e)},Es=t=>{var e;const n=x(t,"aria-label")||"";return[...(((e=x(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(i=>document.getElementById(i)),...Array.from(t.labels||[])].reduce((i,s)=>{var r;return i||((r=s?.innerText)==null?void 0:r.trim())||""},n)},lt,Ss=0,he=t=>{lt||(lt=Nt("div"),lt.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",x(lt,"aria-live","assertive")),lt.isConnected||document.body.append(lt),t&&(lt.textContent=`${t}${Ss++%2?" ":""}`)},fn=(t,e,n="")=>{var o,i;const s={bubbles:!0,composed:!0,data:e,inputType:n},r=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(o=Object.getOwnPropertyDescriptor(r,"value"))==null?void 0:o.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},be=!1,ge=t=>(t?.type==="mouseup"&&(be=!1),t?.type==="mousedown"&&(be=!0,Pt(document,"mouseup",ge,{once:!0})),be),Cs=`:host(:not([hidden])) { display: block; -webkit-tap-highlight-color: rgba(0, 0, 0, 0) } /* Must be display block in Safari to allow focus inside */
2
2
  :host(:not([data-multiple])) ::slotted(data),
3
3
  :host([data-multiple="false"]) ::slotted(data) { display: none } /* Hide data if not multiple */
4
4
  ::slotted(input[inputmode="none"]) { outline: none } /* Hide temporary foucs outline flash */
5
5
  ::slotted(del) { text-decoration: none }
6
6
  ::slotted(data:not([hidden])) { display: inline-block; pointer-events: none }
7
7
  ::slotted(data)::after { content: '\\00D7'; content: '\\00D7' / ''; padding-inline: .5ch; pointer-events: auto; cursor: pointer }
8
- ::slotted(data:focus) { ${Vi} }`,cn="beforeinput,blur,focus,click,input,keydown,mousedown",dn={once:!0,passive:!0},Ji=Fi&&!on,Zi=on||Ui,un="​".repeat(5),Dt="false",Pt={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},me=class extends qi{constructor(){super(),this._item="",this._speak="",this._texts=Bi({},Pt),this._value="",this.shadowRoot||this.attachShadow({mode:"open"}).append(Rt("slot"),Rt("style",Qi))}static get observedAttributes(){return Object.keys(Pt).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=ji(this),Ot(this,cn,this,!0),de(this,{attributeFilter:["value","id"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(Nt,0,this),setTimeout(Ht,0,this)}attributeChangedCallback(t,e,n){const o=t.split("data-sr-")[1];Pt[o]&&(this._texts[o]=n||Pt[o])}disconnectedCallback(){de(this,!1),Wi(this,cn,this,!0),this._items=this._clear=this._focus=this._control=void 0,this._list=this._options=this._root=void 0}handleEvent(t){const e=t.target;ge(this)||(t.type==="beforeinput"&&(this._value=e?.value||""),t.type==="blur"&&es(this),t.type==="click"&&os(this,t),t.type==="focus"&&ts(this,t),t.type==="input"&&is(this,t),t.type==="keydown"&&ss(this,t),t.type==="mousedown"&&pe(t),t.type==="mutation"&&Nt(this,t))}get multiple(){var t;return((t=_(this,"data-multiple"))!=null?t:Dt)!==Dt}set multiple(t){_(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=_(this,"data-creatable"))!=null?t:Dt)!==Dt}set creatable(t){_(this,"data-creatable",t?"":null)}get control(){var t;return(t=this._control)!=null&&t.isConnected||(this._control=this.querySelector("input")),this._control}get list(){var t;return(t=this._list)!=null&&t.isConnected||(this._list=this.querySelector("u-datalist,datalist")),this._list}get clear(){var t;return(t=this._clear)!=null&&t.isConnected||(this._clear=this.querySelector("del")),this._clear}get items(){return this._items||(this._items=this.getElementsByTagName("data")),this._items}get options(){var t,e;if(!this._options){const n=((t=this.list)==null?void 0:t.nodeName)==="U-DATALIST"?"u-option":"option";this._options=(e=this.list)==null?void 0:e.getElementsByTagName(n)}return this._options}get values(){return[...this.items].map(({value:t})=>t)}},tt=t=>{var e;return((e=t?.textContent)==null?void 0:e.trim())||""},he=t=>t instanceof HTMLDataElement,ge=({control:t})=>t?.disabled||t?.readOnly||!1,Nt=(t,e)=>{var n;const{_focus:o,_texts:i,items:s,control:r,list:a,multiple:c}=t;if(!r||!a)return;const l=Xi(r),d=l.endsWith(un)?_(r,"data-label"):l;_(r,"data-label",d);let u=`${d}${c?`, ${s.length?i.found.replace("%d",`${s.length}`):i.empty}`:""}`;const p=[];for(const{addedNodes:g,removedNodes:E}of e?.detail||[]){for(const w of g)he(w)&&p.unshift(w);for(const w of E)he(w)&&p.push(w)}const f=c?p.length===1:p[0]===o;if(o&&f){const g=_(r,"aria-expanded"),E=_(r,"inputmode"),w=he(o)?r:o,S=!p[0].isConnected;t._speak=`${i[S?"removed":"added"]} ${tt(p[0])}, `,(Zi||o===r)&&ue(t._speak),r!==w&&(_(r,"aria-expanded",null),_(r,"inputmode","none"),u=" ",r.focus()),setTimeout(()=>{var D;_(r,"aria-expanded",g),_(r,"inputmode",S?"none":E),(D=w?.focus)==null||D.call(w),_(r,"inputmode",E),t._speak="",Ji?Ot(t,"blur",()=>Nt(t),dn):setTimeout(Nt,100,t)},100)}let b=0;const h=t.querySelector("select"),y=ge(t)?"":`${i.remove}, `;for(const g of s){const E=h?.options[b],w=tt(g),S=g.value||w,D=`${t._speak}${w}, ${y}${++b} ${i.of} ${s.length}`;_(g,"role","button"),_(g,"value",S),_(g,"tabindex","-1"),_(g,"aria-label",D),E?Object.assign(E,{textContent:w,value:S}):h?.appendChild(new Option(w,S,!0,!0))}h&&_(h,"multiple",c?"":null);for(const g of[...h?.options||[]].slice(b))g.remove();!c&&b>1&&console.warn("u-combobox: Multiple <data> found in single mode."),_(a,"aria-multiselectable",`${c}`),_(r,"list",an(a)),_(r,"aria-label",`${t._speak}${u}${un}`),a.hasAttribute("popover")&&(_(r,"popovertarget",an(a)),_(a,"popover","manual"));const v=tt(s[0]);v!==t._item&&Ht(t),t._item=v,fn(t),pn(t),(n=de(t))==null||n.takeRecords()},fn=t=>{var e;t.clear&&_(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value)||ge(t))},pn=t=>{var e;const{_speak:n,options:o=[],values:i}=t;for(const s of o){const r=(e=_(s,"value"))!=null?e:tt(s);_(s,"aria-label",n?`${n}${tt(s)}`:null),_(s,"selected",i.includes(r)?"":null)}},Ht=t=>{const{multiple:e,control:n,items:o}=t,i=tt(o[0]);!e&&n&&i!==n.value&&ln(n,i,i?"insertText":"deleteContent")},be=(t,e=!0)=>{var n;const{_texts:o,options:i=[],creatable:s,control:r,items:a,multiple:c}=t,l=((n=r?.value)==null?void 0:n.trim())||"",d=l.toLowerCase()||null;let u=[...i].find(f=>(_(f,"label")||tt(f)).trim().toLowerCase()===d);const p={bubbles:!0,cancelable:!0,detail:u};if(t.dispatchEvent(new CustomEvent("comboboxbeforematch",p))||(u=[...i].find(f=>f.selected)),e)return pn(t),u?dt(t,u,!1):s&&l?dt(t,{value:l},!1):(!c&&!l&&a[0]?dt(t,a[0]):Ht(t),ue(o.invalid));for(const f of i)f.selected=f===u},dt=(t,e,n=!0)=>{const{control:o,items:i,multiple:s}=t,r=Rt("data",e.label||e.value,{value:e.value}),a=[...i].find(d=>d.value===e.value),c={bubbles:!0,cancelable:!0,detail:a||r};if(a&&!n)return Ht(t);if(t.dispatchEvent(new CustomEvent("comboboxbeforeselect",c))){if(!s)for(const d of[...i])d.remove();a?a.remove():o?.insertAdjacentElement("beforebegin",r),t.dispatchEvent(new CustomEvent("comboboxafterselect",c))}},ts=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),ue()},es=t=>pe()||setTimeout(ns,0,t),ns=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t.multiple||be(t),t._focus=void 0)},os=(t,e)=>{const{clientX:n,clientY:o,target:i}=e,{clear:s,control:r,items:a}=t;if(s?.contains(i))return r&&ln(r,"","deleteContentBackward"),r?.focus();for(const c of a){const{top:l,right:d,bottom:u,left:p}=c.getBoundingClientRect();if(c.contains(i))return dt(t,c);if(o>=l&&o<=u&&n>=p&&n<=d)return c.focus()}i===t&&r?.focus()},is=(t,e)=>{var n;const{options:o=[],control:i,multiple:s}=t,r=((n=i?.value)==null?void 0:n.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType==="insertReplacementText":!!r){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const c of o)if(c.value&&c.value===r)return dt(t,c,s)}else s||be(t,!1);fn(t)},ss=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const{clear:o,control:i,items:s}=t,{key:r,repeat:a,target:c}=e,l=i&&i===c,d=l&&i?.selectionEnd;let u=l?s.length:[...s].indexOf(c);if(l&&r==="Tab"&&o&&!o.hidden&&(e.preventDefault(),o.tabIndex=-1,o.focus(),Ot(o,"blur",()=>_(o,"tabindex",null),dn)),!(!l&&zi(e)||u===-1)){if(r==="ArrowRight"&&!l)u+=1;else if(r==="ArrowLeft"&&!d)u-=1;else if(r==="Enter"&&l){const p=_(i,"form");return _(i,"form","#"),requestAnimationFrame(()=>_(i,"form",p)),be(t)}else if((r==="Backspace"||r==="Delete")&&!d){if(e.preventDefault(),!a&&s[u])return dt(t,s[u]);l&&(u-=1)}else return l||i?.focus();e.preventDefault(),(n=s[Math.max(0,u)]||i)==null||n.focus()}};Yi.define("u-combobox",me);var ve=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",rs=ve&&/android/i.test(navigator.userAgent),mn;ve&&/^Mac/i.test(((mn=navigator.userAgentData)==null?void 0:mn.platform)||navigator.platform);var as=`${rs?"data":"aria"}-labelledby`,_e=":host(:not([hidden])) { display: block }",Bt=typeof HTMLElement>"u"?class{}:HTMLElement;function $(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var hn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},ls=(t,...e)=>hn("add",t,e),cs=(t,...e)=>hn("remove",t,e),Ft=(t,e)=>t.shadowRoot||t.attachShadow({mode:"open"}).append(_n("slot"),_n("style",e)),Ut=new WeakMap,gn=(t,e)=>{if(e===void 0)return Ut.get(t);try{Ut.get(t).disconnect(),Ut.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),Ut.set(t,n)}},ds=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},bn=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},us=0,vn=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++us).toString(32)}`),t.id):"",_n=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},Vt={define:(t,e)=>!ve||window.customElements.get(t)||window.customElements.define(t,e)},fs=_e,ps=_e,ms=_e,hs=':host(:not([hidden])) { display: inline-block; cursor: pointer }:host([aria-disabled="true"]) { cursor: default }',qt="aria-controls",ut="aria-selected",yn=class extends Bt{constructor(){super(),Ft(this,fs)}get tabList(){return Wt("u-tablist",this)[0]||null}get selectedIndex(){return zt(this.tabs)}set selectedIndex(t){Ee(this.tabs[t])}get tabs(){return Wt("u-tab",this)}get panels(){return Wt("u-tabpanel",this)}},wn=class extends Bt{constructor(){super(),Ft(this,ps)}connectedCallback(){$(this,"role","tablist"),ls(this,"click,keydown",this),gn(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){cs(this,"click,keydown",this),gn(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s?.setAttribute(ut,"true")}const{key:e}=t,n=[...this.tabs],o=n.findIndex(s=>s.contains(t.target));let i=o;if(!(t.defaultPrevented||o===-1)&&(t.type==="click"&&Ee(n[o]),t.type==="keydown"&&!ds(t))){if(e==="ArrowDown"||e==="ArrowRight")i=(o+1)%n.length;else if(e==="ArrowUp"||e==="ArrowLeft")i=(o||n.length)-1;else if(e==="End")i=n.length-1;else if(e==="Home")i=0;else if(e==="Tab")i=zt(n);else return;setTimeout(()=>{n[o].tabIndex=-1,n[i].tabIndex=0}),e!=="Tab"&&(t.preventDefault(),n[i].focus())}}get tabsElement(){return this.closest("u-tabs")}get tabs(){return this.querySelectorAll("u-tab")}get selectedIndex(){return zt(this.tabs)}set selectedIndex(t){Ee(this.tabs[t])}},ye=!1,En=class extends Bt{static get observedAttributes(){return["id",ut,qt]}constructor(){super(),Ft(this,hs)}connectedCallback(){$(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!ye&&this.selected&&this.tabList){ye=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=Wt("u-tabpanel",this.tabsElement||this),n=we(this,e[t.indexOf(this)]);n&&$(n,as,vn(this)),t.forEach((o,i)=>{const s=we(o,e[i]);o.tabIndex=o===this?0:-1,$(o,ut,`${o===this}`),$(o,qt,s?.id||null),s&&(s.hidden=s!==n)}),ye=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return t?.nodeName==="U-TABLIST"?t:null}get selected(){return $(this,ut)==="true"}set selected(t){$(this,ut,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return we(this)}},xn=class extends Bt{static get observedAttributes(){return["hidden"]}constructor(){super(),Ft(this,ms)}connectedCallback(){$(this,"role","tabpanel"),this.hidden=zt(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){const t=this.hidden;$(this,"aria-hidden",`${t}`),$(this,"tabindex",t||gs(this.firstChild)?null:"0")}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${qt}="${this.id}"]`;return bn(this).querySelectorAll(t)}},Wt=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),we=(t,e)=>{const n=$(t,qt)||vn(e),o=bn(t).getElementById(n);return o?.nodeName==="U-TABPANEL"?o:null},zt=t=>[...t].findIndex(e=>$(e,ut)==="true"),Ee=t=>t&&$(t,"aria-disabled")!=="true"&&$(t,"aria-selected","true"),gs=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');Vt.define("u-tabs",yn),Vt.define("u-tablist",wn),Vt.define("u-tab",En),Vt.define("u-tabpanel",xn);const bs="2.1.12",Sn="_alert_2uhem_1 _ds-alert_alzsp_1",Tn="_app_2uhem_1",Cn="_sticky_2uhem_1",$n="_avatar_2uhem_1 _ds-avatar_alzsp_1",An="_badge_2uhem_1",kn="_breadcrumbs_2uhem_1 _ds-breadcrumbs_alzsp_1",Ln="_button_2uhem_1 _ds-button_alzsp_1",In="_card_2uhem_1",On="_group_2uhem_1",Mn="_chip_2uhem_1 _ds-chip_alzsp_1",Rn="_details_2uhem_1 _ds-details_alzsp_1",Dn="_dialog_2uhem_1 _ds-dialog_alzsp_1",Pn="__drawer_2uhem_1",Nn="_divider_2uhem_1",Hn="_errorsummary_2uhem_1 _ds-error-summary_alzsp_1",Bn="__errorsummary_2uhem_1",Fn="_field_2uhem_1 _ds-field_alzsp_1",Un="__datalist_2uhem_1",Vn="_affixes_2uhem_1 _ds-field-affixes_alzsp_1",qn="_fieldset_2uhem_1 _ds-fieldset_alzsp_1",Wn="_heading_2uhem_1 _ds-heading_alzsp_1",zn="_ingress_2uhem_1",jn="_muted_2uhem_1",Kn="_info_2uhem_1",Yn="_prose_2uhem_1",Xn="_helptext_2uhem_1 _ds-focus_alzsp_1",Gn="_input_2uhem_1 _ds-input_alzsp_1",Qn="_grid_2uhem_1",Jn="_flex_2uhem_1",Zn="_link_2uhem_1",to="_logo_2uhem_1",eo="_pagination_2uhem_1 _ds-pagination_alzsp_1",no="_popover_2uhem_1",oo="_progress_2uhem_1",io="__indeterminate_2uhem_1",so="_skeleton_2uhem_1 _ds-skeleton_alzsp_1",ro="__skeleton_2uhem_1",ao="_spinner_2uhem_1",lo="_steps_2uhem_1",co="_table_2uhem_1 _ds-table_alzsp_1",uo="__scrollShadow_2uhem_1",fo="_tabs_2uhem_1 _ds-tabs_alzsp_1",po="__scrollMask_2uhem_1",mo="_tag_2uhem_1 _ds-tag_alzsp_1",ho="_togglegroup_2uhem_1",go="__tooltip_2uhem_1",bo="_validation_2uhem_1 _ds-validation-message_alzsp_1",vo="_body_2uhem_154",_o="__checked_2uhem_1",T={alert:Sn,app:Tn,sticky:Cn,avatar:$n,badge:An,breadcrumbs:kn,button:Ln,card:In,group:On,chip:Mn,details:Rn,dialog:Dn,_drawer:Pn,divider:Nn,errorsummary:Hn,_errorsummary:Bn,field:Fn,_datalist:Un,affixes:Vn,fieldset:qn,heading:Wn,ingress:zn,muted:jn,info:Kn,prose:Yn,helptext:Xn,input:Gn,grid:Qn,flex:Jn,link:Zn,logo:to,pagination:eo,popover:no,progress:oo,_indeterminate:io,skeleton:so,_skeleton:ro,spinner:ao,steps:lo,table:co,_scrollShadow:uo,tabs:fo,_scrollMask:po,tag:mo,togglegroup:ho,_tooltip:go,validation:bo,body:vo,_checked:_o},vs=Object.freeze(Object.defineProperty({__proto__:null,_checked:_o,_datalist:Un,_drawer:Pn,_errorsummary:Bn,_indeterminate:io,_scrollMask:po,_scrollShadow:uo,_skeleton:ro,_tooltip:go,affixes:Vn,alert:Sn,app:Tn,avatar:$n,badge:An,body:vo,breadcrumbs:kn,button:Ln,card:In,chip:Mn,default:T,details:Rn,dialog:Dn,divider:Nn,errorsummary:Hn,field:Fn,fieldset:qn,flex:Jn,grid:Qn,group:On,heading:Wn,helptext:Xn,info:Kn,ingress:zn,input:Gn,link:Zn,logo:to,muted:jn,pagination:eo,popover:no,progress:oo,prose:Yn,skeleton:so,spinner:ao,steps:lo,sticky:Cn,table:co,tabs:fo,tag:mo,togglegroup:ho,validation:bo},Symbol.toStringTag,{value:"Module"})),ft=Math.min,L=Math.max,jt=Math.round,Kt=Math.floor,V=t=>({x:t,y:t}),_s={left:"right",right:"left",bottom:"top",top:"bottom"},ys={start:"end",end:"start"};function yo(t,e,n){return L(t,ft(e,n))}function Yt(t,e){return typeof t=="function"?t(e):t}function et(t){return t.split("-")[0]}function Xt(t){return t.split("-")[1]}function wo(t){return t==="x"?"y":"x"}function Eo(t){return t==="y"?"height":"width"}const ws=new Set(["top","bottom"]);function Y(t){return ws.has(et(t))?"y":"x"}function xo(t){return wo(Y(t))}function Es(t,e,n){n===void 0&&(n=!1);const o=Xt(t),i=xo(t),s=Eo(i);let r=i==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return e.reference[s]>e.floating[s]&&(r=Gt(r)),[r,Gt(r)]}function xs(t){const e=Gt(t);return[xe(t),e,xe(e)]}function xe(t){return t.replace(/start|end/g,e=>ys[e])}const So=["left","right"],To=["right","left"],Ss=["top","bottom"],Ts=["bottom","top"];function Cs(t,e,n){switch(t){case"top":case"bottom":return n?e?To:So:e?So:To;case"left":case"right":return e?Ss:Ts;default:return[]}}function $s(t,e,n,o){const i=Xt(t);let s=Cs(et(t),n==="start",o);return i&&(s=s.map(r=>r+"-"+i),e&&(s=s.concat(s.map(xe)))),s}function Gt(t){return t.replace(/left|right|bottom|top/g,e=>_s[e])}function As(t){return{top:0,right:0,bottom:0,left:0,...t}}function ks(t){return typeof t!="number"?As(t):{top:t,right:t,bottom:t,left:t}}function Qt(t){const{x:e,y:n,width:o,height:i}=t;return{width:o,height:i,top:n,left:e,right:e+o,bottom:n+i,x:e,y:n}}function Co(t,e,n){let{reference:o,floating:i}=t;const s=Y(e),r=xo(e),a=Eo(r),c=et(e),l=s==="y",d=o.x+o.width/2-i.width/2,u=o.y+o.height/2-i.height/2,p=o[a]/2-i[a]/2;let f;switch(c){case"top":f={x:d,y:o.y-i.height};break;case"bottom":f={x:d,y:o.y+o.height};break;case"right":f={x:o.x+o.width,y:u};break;case"left":f={x:o.x-i.width,y:u};break;default:f={x:o.x,y:o.y}}switch(Xt(e)){case"start":f[r]-=p*(n&&l?-1:1);break;case"end":f[r]+=p*(n&&l?-1:1);break}return f}const Ls=async(t,e,n)=>{const{placement:o="bottom",strategy:i="absolute",middleware:s=[],platform:r}=n,a=s.filter(Boolean),c=await(r.isRTL==null?void 0:r.isRTL(e));let l=await r.getElementRects({reference:t,floating:e,strategy:i}),{x:d,y:u}=Co(l,o,c),p=o,f={},b=0;for(let h=0;h<a.length;h++){const{name:y,fn:v}=a[h],{x:g,y:E,data:w,reset:S}=await v({x:d,y:u,initialPlacement:o,placement:p,strategy:i,middlewareData:f,rects:l,platform:r,elements:{reference:t,floating:e}});d=g??d,u=E??u,f={...f,[y]:{...f[y],...w}},S&&b<=50&&(b++,typeof S=="object"&&(S.placement&&(p=S.placement),S.rects&&(l=S.rects===!0?await r.getElementRects({reference:t,floating:e,strategy:i}):S.rects),{x:d,y:u}=Co(l,p,c)),h=-1)}return{x:d,y:u,placement:p,strategy:i,middlewareData:f}};async function Se(t,e){var n;e===void 0&&(e={});const{x:o,y:i,platform:s,rects:r,elements:a,strategy:c}=t,{boundary:l="clippingAncestors",rootBoundary:d="viewport",elementContext:u="floating",altBoundary:p=!1,padding:f=0}=Yt(e,t),b=ks(f),y=a[p?u==="floating"?"reference":"floating":u],v=Qt(await s.getClippingRect({element:(n=await(s.isElement==null?void 0:s.isElement(y)))==null||n?y:y.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(a.floating)),boundary:l,rootBoundary:d,strategy:c})),g=u==="floating"?{x:o,y:i,width:r.floating.width,height:r.floating.height}:r.reference,E=await(s.getOffsetParent==null?void 0:s.getOffsetParent(a.floating)),w=await(s.isElement==null?void 0:s.isElement(E))?await(s.getScale==null?void 0:s.getScale(E))||{x:1,y:1}:{x:1,y:1},S=Qt(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:a,rect:g,offsetParent:E,strategy:c}):g);return{top:(v.top-S.top+b.top)/w.y,bottom:(S.bottom-v.bottom+b.bottom)/w.y,left:(v.left-S.left+b.left)/w.x,right:(S.right-v.right+b.right)/w.x}}const Is=function(t){return t===void 0&&(t={}),{name:"flip",options:t,async fn(e){var n,o;const{placement:i,middlewareData:s,rects:r,initialPlacement:a,platform:c,elements:l}=e,{mainAxis:d=!0,crossAxis:u=!0,fallbackPlacements:p,fallbackStrategy:f="bestFit",fallbackAxisSideDirection:b="none",flipAlignment:h=!0,...y}=Yt(t,e);if((n=s.arrow)!=null&&n.alignmentOffset)return{};const v=et(i),g=Y(a),E=et(a)===a,w=await(c.isRTL==null?void 0:c.isRTL(l.floating)),S=p||(E||!h?[Gt(a)]:xs(a)),D=b!=="none";!p&&D&&S.push(...$s(a,h,b,w));const z=[a,...S],rt=await Se(e,y),at=[];let K=((o=s.flip)==null?void 0:o.overflows)||[];if(d&&at.push(rt[v]),u){const lt=Es(i,r,w);at.push(rt[lt[0]],rt[lt[1]])}if(K=[...K,{placement:i,overflows:at}],!at.every(lt=>lt<=0)){var At,kt;const lt=(((At=s.flip)==null?void 0:At.index)||0)+1,tn=z[lt];if(tn&&(!(u==="alignment"?g!==Y(tn):!1)||K.every(U=>Y(U.placement)===g?U.overflows[0]>0:!0)))return{data:{index:lt,overflows:K},reset:{placement:tn}};let It=(kt=K.filter(ct=>ct.overflows[0]<=0).sort((ct,U)=>ct.overflows[1]-U.overflows[1])[0])==null?void 0:kt.placement;if(!It)switch(f){case"bestFit":{var Lt;const ct=(Lt=K.filter(U=>{if(D){const J=Y(U.placement);return J===g||J==="y"}return!0}).map(U=>[U.placement,U.overflows.filter(J=>J>0).reduce((J,Da)=>J+Da,0)]).sort((U,J)=>U[1]-J[1])[0])==null?void 0:Lt[0];ct&&(It=ct);break}case"initialPlacement":It=a;break}if(i!==It)return{reset:{placement:It}}}return{}}}},Os=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){const{x:n,y:o,placement:i}=e,{mainAxis:s=!0,crossAxis:r=!1,limiter:a={fn:y=>{let{x:v,y:g}=y;return{x:v,y:g}}},...c}=Yt(t,e),l={x:n,y:o},d=await Se(e,c),u=Y(et(i)),p=wo(u);let f=l[p],b=l[u];if(s){const y=p==="y"?"top":"left",v=p==="y"?"bottom":"right",g=f+d[y],E=f-d[v];f=yo(g,f,E)}if(r){const y=u==="y"?"top":"left",v=u==="y"?"bottom":"right",g=b+d[y],E=b-d[v];b=yo(g,b,E)}const h=a.fn({...e,[p]:f,[u]:b});return{...h,data:{x:h.x-n,y:h.y-o,enabled:{[p]:s,[u]:r}}}}}},Ms=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){var n,o;const{placement:i,rects:s,platform:r,elements:a}=e,{apply:c=()=>{},...l}=Yt(t,e),d=await Se(e,l),u=et(i),p=Xt(i),f=Y(i)==="y",{width:b,height:h}=s.floating;let y,v;u==="top"||u==="bottom"?(y=u,v=p===(await(r.isRTL==null?void 0:r.isRTL(a.floating))?"start":"end")?"left":"right"):(v=u,y=p==="end"?"top":"bottom");const g=h-d.top-d.bottom,E=b-d.left-d.right,w=ft(h-d[y],g),S=ft(b-d[v],E),D=!e.middlewareData.shift;let z=w,rt=S;if((n=e.middlewareData.shift)!=null&&n.enabled.x&&(rt=E),(o=e.middlewareData.shift)!=null&&o.enabled.y&&(z=g),D&&!p){const K=L(d.left,0),At=L(d.right,0),kt=L(d.top,0),Lt=L(d.bottom,0);f?rt=b-2*(K!==0||At!==0?K+At:L(d.left,d.right)):z=h-2*(kt!==0||Lt!==0?kt+Lt:L(d.top,d.bottom))}await c({...e,availableWidth:rt,availableHeight:z});const at=await r.getDimensions(a.floating);return b!==at.width||h!==at.height?{reset:{rects:!0}}:{}}}};function Jt(){return typeof window<"u"}function pt(t){return $o(t)?(t.nodeName||"").toLowerCase():"#document"}function I(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function q(t){var e;return(e=($o(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function $o(t){return Jt()?t instanceof Node||t instanceof I(t).Node:!1}function P(t){return Jt()?t instanceof Element||t instanceof I(t).Element:!1}function W(t){return Jt()?t instanceof HTMLElement||t instanceof I(t).HTMLElement:!1}function Ao(t){return!Jt()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof I(t).ShadowRoot}const Rs=new Set(["inline","contents"]);function _t(t){const{overflow:e,overflowX:n,overflowY:o,display:i}=N(t);return/auto|scroll|overlay|hidden|clip/.test(e+o+n)&&!Rs.has(i)}const Ds=new Set(["table","td","th"]);function Ps(t){return Ds.has(pt(t))}const Ns=[":popover-open",":modal"];function Zt(t){return Ns.some(e=>{try{return t.matches(e)}catch{return!1}})}const Hs=["transform","translate","scale","rotate","perspective"],Bs=["transform","translate","scale","rotate","perspective","filter"],Fs=["paint","layout","strict","content"];function Te(t){const e=Ce(),n=P(t)?N(t):t;return Hs.some(o=>n[o]?n[o]!=="none":!1)||(n.containerType?n.containerType!=="normal":!1)||!e&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!e&&(n.filter?n.filter!=="none":!1)||Bs.some(o=>(n.willChange||"").includes(o))||Fs.some(o=>(n.contain||"").includes(o))}function Us(t){let e=X(t);for(;W(e)&&!mt(e);){if(Te(e))return e;if(Zt(e))return null;e=X(e)}return null}function Ce(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const Vs=new Set(["html","body","#document"]);function mt(t){return Vs.has(pt(t))}function N(t){return I(t).getComputedStyle(t)}function te(t){return P(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function X(t){if(pt(t)==="html")return t;const e=t.assignedSlot||t.parentNode||Ao(t)&&t.host||q(t);return Ao(e)?e.host:e}function ko(t){const e=X(t);return mt(e)?t.ownerDocument?t.ownerDocument.body:t.body:W(e)&&_t(e)?e:ko(e)}function yt(t,e,n){var o;e===void 0&&(e=[]),n===void 0&&(n=!0);const i=ko(t),s=i===((o=t.ownerDocument)==null?void 0:o.body),r=I(i);if(s){const a=$e(r);return e.concat(r,r.visualViewport||[],_t(i)?i:[],a&&n?yt(a):[])}return e.concat(i,yt(i,[],n))}function $e(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function Lo(t){const e=N(t);let n=parseFloat(e.width)||0,o=parseFloat(e.height)||0;const i=W(t),s=i?t.offsetWidth:n,r=i?t.offsetHeight:o,a=jt(n)!==s||jt(o)!==r;return a&&(n=s,o=r),{width:n,height:o,$:a}}function Ae(t){return P(t)?t:t.contextElement}function ht(t){const e=Ae(t);if(!W(e))return V(1);const n=e.getBoundingClientRect(),{width:o,height:i,$:s}=Lo(e);let r=(s?jt(n.width):n.width)/o,a=(s?jt(n.height):n.height)/i;return(!r||!Number.isFinite(r))&&(r=1),(!a||!Number.isFinite(a))&&(a=1),{x:r,y:a}}const qs=V(0);function Io(t){const e=I(t);return!Ce()||!e.visualViewport?qs:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function Ws(t,e,n){return e===void 0&&(e=!1),!n||e&&n!==I(t)?!1:e}function nt(t,e,n,o){e===void 0&&(e=!1),n===void 0&&(n=!1);const i=t.getBoundingClientRect(),s=Ae(t);let r=V(1);e&&(o?P(o)&&(r=ht(o)):r=ht(t));const a=Ws(s,n,o)?Io(s):V(0);let c=(i.left+a.x)/r.x,l=(i.top+a.y)/r.y,d=i.width/r.x,u=i.height/r.y;if(s){const p=I(s),f=o&&P(o)?I(o):o;let b=p,h=$e(b);for(;h&&o&&f!==b;){const y=ht(h),v=h.getBoundingClientRect(),g=N(h),E=v.left+(h.clientLeft+parseFloat(g.paddingLeft))*y.x,w=v.top+(h.clientTop+parseFloat(g.paddingTop))*y.y;c*=y.x,l*=y.y,d*=y.x,u*=y.y,c+=E,l+=w,b=I(h),h=$e(b)}}return Qt({width:d,height:u,x:c,y:l})}function ee(t,e){const n=te(t).scrollLeft;return e?e.left+n:nt(q(t)).left+n}function Oo(t,e){const n=t.getBoundingClientRect(),o=n.left+e.scrollLeft-ee(t,n),i=n.top+e.scrollTop;return{x:o,y:i}}function zs(t){let{elements:e,rect:n,offsetParent:o,strategy:i}=t;const s=i==="fixed",r=q(o),a=e?Zt(e.floating):!1;if(o===r||a&&s)return n;let c={scrollLeft:0,scrollTop:0},l=V(1);const d=V(0),u=W(o);if((u||!u&&!s)&&((pt(o)!=="body"||_t(r))&&(c=te(o)),W(o))){const f=nt(o);l=ht(o),d.x=f.x+o.clientLeft,d.y=f.y+o.clientTop}const p=r&&!u&&!s?Oo(r,c):V(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+d.x+p.x,y:n.y*l.y-c.scrollTop*l.y+d.y+p.y}}function js(t){return Array.from(t.getClientRects())}function Ks(t){const e=q(t),n=te(t),o=t.ownerDocument.body,i=L(e.scrollWidth,e.clientWidth,o.scrollWidth,o.clientWidth),s=L(e.scrollHeight,e.clientHeight,o.scrollHeight,o.clientHeight);let r=-n.scrollLeft+ee(t);const a=-n.scrollTop;return N(o).direction==="rtl"&&(r+=L(e.clientWidth,o.clientWidth)-i),{width:i,height:s,x:r,y:a}}const Mo=25;function Ys(t,e){const n=I(t),o=q(t),i=n.visualViewport;let s=o.clientWidth,r=o.clientHeight,a=0,c=0;if(i){s=i.width,r=i.height;const d=Ce();(!d||d&&e==="fixed")&&(a=i.offsetLeft,c=i.offsetTop)}const l=ee(o);if(l<=0){const d=o.ownerDocument,u=d.body,p=getComputedStyle(u),f=d.compatMode==="CSS1Compat"&&parseFloat(p.marginLeft)+parseFloat(p.marginRight)||0,b=Math.abs(o.clientWidth-u.clientWidth-f);b<=Mo&&(s-=b)}else l<=Mo&&(s+=l);return{width:s,height:r,x:a,y:c}}const Xs=new Set(["absolute","fixed"]);function Gs(t,e){const n=nt(t,!0,e==="fixed"),o=n.top+t.clientTop,i=n.left+t.clientLeft,s=W(t)?ht(t):V(1),r=t.clientWidth*s.x,a=t.clientHeight*s.y,c=i*s.x,l=o*s.y;return{width:r,height:a,x:c,y:l}}function Ro(t,e,n){let o;if(e==="viewport")o=Ys(t,n);else if(e==="document")o=Ks(q(t));else if(P(e))o=Gs(e,n);else{const i=Io(t);o={x:e.x-i.x,y:e.y-i.y,width:e.width,height:e.height}}return Qt(o)}function Do(t,e){const n=X(t);return n===e||!P(n)||mt(n)?!1:N(n).position==="fixed"||Do(n,e)}function Qs(t,e){const n=e.get(t);if(n)return n;let o=yt(t,[],!1).filter(a=>P(a)&&pt(a)!=="body"),i=null;const s=N(t).position==="fixed";let r=s?X(t):t;for(;P(r)&&!mt(r);){const a=N(r),c=Te(r);!c&&a.position==="fixed"&&(i=null),(s?!c&&!i:!c&&a.position==="static"&&!!i&&Xs.has(i.position)||_t(r)&&!c&&Do(t,r))?o=o.filter(d=>d!==r):i=a,r=X(r)}return e.set(t,o),o}function Js(t){let{element:e,boundary:n,rootBoundary:o,strategy:i}=t;const r=[...n==="clippingAncestors"?Zt(e)?[]:Qs(e,this._c):[].concat(n),o],a=r[0],c=r.reduce((l,d)=>{const u=Ro(e,d,i);return l.top=L(u.top,l.top),l.right=ft(u.right,l.right),l.bottom=ft(u.bottom,l.bottom),l.left=L(u.left,l.left),l},Ro(e,a,i));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function Zs(t){const{width:e,height:n}=Lo(t);return{width:e,height:n}}function tr(t,e,n){const o=W(e),i=q(e),s=n==="fixed",r=nt(t,!0,s,e);let a={scrollLeft:0,scrollTop:0};const c=V(0);function l(){c.x=ee(i)}if(o||!o&&!s)if((pt(e)!=="body"||_t(i))&&(a=te(e)),o){const f=nt(e,!0,s,e);c.x=f.x+e.clientLeft,c.y=f.y+e.clientTop}else i&&l();s&&!o&&i&&l();const d=i&&!o&&!s?Oo(i,a):V(0),u=r.left+a.scrollLeft-c.x-d.x,p=r.top+a.scrollTop-c.y-d.y;return{x:u,y:p,width:r.width,height:r.height}}function ke(t){return N(t).position==="static"}function Po(t,e){if(!W(t)||N(t).position==="fixed")return null;if(e)return e(t);let n=t.offsetParent;return q(t)===n&&(n=n.ownerDocument.body),n}function No(t,e){const n=I(t);if(Zt(t))return n;if(!W(t)){let i=X(t);for(;i&&!mt(i);){if(P(i)&&!ke(i))return i;i=X(i)}return n}let o=Po(t,e);for(;o&&Ps(o)&&ke(o);)o=Po(o,e);return o&&mt(o)&&ke(o)&&!Te(o)?n:o||Us(t)||n}const er=async function(t){const e=this.getOffsetParent||No,n=this.getDimensions,o=await n(t.floating);return{reference:tr(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function nr(t){return N(t).direction==="rtl"}const or={convertOffsetParentRelativeRectToViewportRelativeRect:zs,getDocumentElement:q,getClippingRect:Js,getOffsetParent:No,getElementRects:er,getClientRects:js,getDimensions:Zs,getScale:ht,isElement:P,isRTL:nr};function Ho(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function ir(t,e){let n=null,o;const i=q(t);function s(){var a;clearTimeout(o),(a=n)==null||a.disconnect(),n=null}function r(a,c){a===void 0&&(a=!1),c===void 0&&(c=1),s();const l=t.getBoundingClientRect(),{left:d,top:u,width:p,height:f}=l;if(a||e(),!p||!f)return;const b=Kt(u),h=Kt(i.clientWidth-(d+p)),y=Kt(i.clientHeight-(u+f)),v=Kt(d),E={rootMargin:-b+"px "+-h+"px "+-y+"px "+-v+"px",threshold:L(0,ft(1,c))||1};let w=!0;function S(D){const z=D[0].intersectionRatio;if(z!==c){if(!w)return r();z?r(!1,z):o=setTimeout(()=>{r(!1,1e-7)},1e3)}z===1&&!Ho(l,t.getBoundingClientRect())&&r(),w=!1}try{n=new IntersectionObserver(S,{...E,root:i.ownerDocument})}catch{n=new IntersectionObserver(S,E)}n.observe(t)}return r(!0),s}function sr(t,e,n,o){o===void 0&&(o={});const{ancestorScroll:i=!0,ancestorResize:s=!0,elementResize:r=typeof ResizeObserver=="function",layoutShift:a=typeof IntersectionObserver=="function",animationFrame:c=!1}=o,l=Ae(t),d=i||s?[...l?yt(l):[],...yt(e)]:[];d.forEach(v=>{i&&v.addEventListener("scroll",n,{passive:!0}),s&&v.addEventListener("resize",n)});const u=l&&a?ir(l,n):null;let p=-1,f=null;r&&(f=new ResizeObserver(v=>{let[g]=v;g&&g.target===l&&f&&(f.unobserve(e),cancelAnimationFrame(p),p=requestAnimationFrame(()=>{var E;(E=f)==null||E.observe(e)})),n()}),l&&!c&&f.observe(l),f.observe(e));let b,h=c?nt(t):null;c&&y();function y(){const v=nt(t);h&&!Ho(h,v)&&n(),h=v,b=requestAnimationFrame(y)}return n(),()=>{var v;d.forEach(g=>{i&&g.removeEventListener("scroll",n),s&&g.removeEventListener("resize",n)}),u?.(),(v=f)==null||v.disconnect(),f=null,c&&cancelAnimationFrame(b)}}const Le=Os,Ie=Is,Bo=Ms,rr=(t,e,n)=>{const o=new Map,i={platform:or,...n},s={...i.platform,_c:o};return Ls(t,e,{...i,platform:s})},M={capture:!0,passive:!0},wt=typeof window<"u"&&typeof document<"u";function ar(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function m(t,e,n){return n===void 0?t.getAttribute(e)??null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}let lr=0;const cr=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function ne(t){return t.id||(t.id=`${cr}${++lr}`),t.id}const Fo=(t,e,[...n])=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},C=(t,...e)=>{Et&&(t===window||t===document)&&Et.push(()=>dr(t,...e)),Fo("add",t,e)},dr=(t,...e)=>Fo("remove",t,e);let Et=null;const R=t=>{if(!wt||!window.requestAnimationFrame)return;window._mtdsUnbindEvents||(window._mtdsUnbindEvents=new Map);const e=()=>requestAnimationFrame(()=>{const n=String(t).replace(/(\n|\s)/g,"");window._mtdsUnbindEvents?.get(n)?.forEach(o=>{o()}),Et=[],t(),window._mtdsUnbindEvents?.set(n,Et?.slice(0)),Et=null});document.readyState==="complete"?e():C(window,"load",e)},Oe=new WeakMap;function ot(t,e,n){Oe.get(t)?.(),Oe.delete(t),e&&Oe.set(t,sr(e,t,()=>{if(!t.isConnected||!e.isConnected||t.hidden)return ot(t,!1);rr(e,t,n).then(({x:o,y:i})=>{t.style.left=`${o}px`,t.style.top=`${i}px`})}))}function Uo(t){let e=0;const n=()=>setTimeout(o,200),o=()=>{t([],i),i.takeRecords(),e=0},i=new MutationObserver(()=>{e||(e=requestAnimationFrame(n))});return i}const Me=new WeakMap,gt=(t,e,n)=>{if(!wt||!window.requestAnimationFrame)return;const o=t.getElementsByClassName(e),i=Me.get(t)||[];i.length||(Me.set(t,i),Uo((s,r)=>{if(t.isConnected&&i?.length)for(const a of i)a();else r?.disconnect(),Me.delete(t)}).observe(t,{attributeFilter:["class","hidden"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>n(o))},Re=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),ur=`.${T.breadcrumbs.split(" ")[0]}`,fr=`.${T.chip.split(" ")[0]}`,pr=`.${T.helptext.split(" ")[0]}`,mr=`.${T.pagination.split(" ")[0]}`,hr='summary,u-summary,a,button,[role="tab"],[role="button"]',gr="click,toggle,submit,change",De="mattilsynet.matomo.cloud",H="mtds-analytics-banner",br="https://www.mattilsynet.no/om-mattilsynet/personvernerklaering/informasjonskapsler";function Vo(t,e={}){if(wt){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${De}/matomo.php`])),window._mtm||(window._mtm=window._mtm||[],window._mtm.push({"mtm.startTime":Date.now(),event:"mtm.Start"})),t==="init"){window._mtdsTracking={enabled:window.location.hostname!=="localhost",...window._mtdsTracking,...e};const{consent:n,enabled:o,matomoId:i,matomoTagManagerId:s}=window._mtdsTracking;if(i&&window._paq.push(["setSiteId",i]),o){n!=="custom"&&vr();const r=s?`https://cdn.matomo.cloud/${De}/container_${s}.js`:`https://cdn.matomo.cloud/${De}/matomo.js`;document.querySelector(`script[src="${r}"]`)||document.head.append(Object.assign(document.createElement("script"),{async:!0,src:r}))}}if(window._mtdsTracking?.enabled!==!1){if(window._mtdsTracking?.enabled==="debug")return console.info(`analytics("${t}", `,e,")");if(t==="pageview"){const{url:n,title:o}=e;window._paq.push(["setCustomUrl",n||location.href]),window._paq.push(["setDocumentTitle",o||document.title]),window._paq.push(["trackPageView"])}else if(t==="event"){const{category:n,action:o,name:i,value:s}=e,r=["trackEvent",n,o,i,s];let a=location.href;window._paq.push([function(){a=this.getCurrentUrl()}]),window._paq.push(["setCustomUrl",a.split("#")[0]]),window._paq.push(r.filter(c=>c!==void 0)),window._paq.push(["setCustomUrl",a])}else if(t==="search"){const{query:n,category:o=!1,results:i=!1}=e;window._paq.push(["trackSiteSearch",n,o,i])}else t==="matomo"&&window._paq.push(e)}}}function vr(){if(document.getElementById(H)||window.localStorage.getItem(H))return;document.body.insertAdjacentHTML("afterbegin",`<dialog id="${H}" data-analytics="ignore"><style>
9
- #${H}[open] { box-sizing: border-box; display: flex; align-items: center; background: #116e6b; border-radius: .5em; border: 0; box-shadow: 0 .25em .5em rgba(0,0,0,.3); color: #fff; font-size: .875em; inset: auto auto 1em 1em; max-width: calc(100vw - 2em); outline: 0; padding: .5em; position: fixed; z-index: 99999 }
10
- #${H} button { all: unset; box-sizing: border-box; cursor: pointer; display: flex; width: 1.5em; height: 1.5em; font: 300 1.5em/1.35 sans-serif; border-radius: .25em; place-content: center; transition: .2s; transition-property: background, scale }
11
- #${H} button:focus-visible { outline: 2px solid }
12
- #${H} button:hover { background: #0a4e4f }
13
- #${H} button:active { background: #054449; scale: .9 }
14
- #${H} p { margin: 0 .25em }
8
+ ::slotted(data:focus) { ${bs} }`,pn="beforeinput,blur,focus,click,input,keydown,mousedown",mn={once:!0,passive:!0},Ts=ms&&!ln,$s=ln||hs,hn="​".repeat(5),Ht="false",Bt={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},ve=class extends gs{constructor(){super(),this._item="",this._speak="",this._texts=ps({},Bt),this._value="",this.shadowRoot||this.attachShadow({mode:"open"}).append(Nt("slot"),Nt("style",Cs))}static get observedAttributes(){return Object.keys(Bt).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=ws(this),Pt(this,pn,this,!0),me(this,{attributeFilter:["value","id"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(zt,0,this),setTimeout(Ft,0,this)}attributeChangedCallback(t,e,n){const o=t.split("data-sr-")[1];Bt[o]&&(this._texts[o]=n||Bt[o])}disconnectedCallback(){me(this,!1),vs(this,pn,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;we(this)||(t.type==="beforeinput"&&(this._value=e?.value||""),t.type==="blur"&&As(this),t.type==="click"&&Is(this,t),t.type==="focus"&&ks(this,t),t.type==="input"&&Ms(this,t),t.type==="keydown"&&Os(this,t),t.type==="mousedown"&&ge(t),t.type==="mutation"&&zt(this,t))}get multiple(){var t;return((t=x(this,"data-multiple"))!=null?t:Ht)!==Ht}set multiple(t){x(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=x(this,"data-creatable"))!=null?t:Ht)!==Ht}set creatable(t){x(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)}},ct=t=>{var e;return((e=t?.textContent)==null?void 0:e.trim())||""},_e=t=>t instanceof HTMLDataElement,we=({control:t})=>t?.disabled||t?.readOnly||!1,zt=(t,e)=>{var n;const{_focus:o,_texts:i,items:s,control:r,list:a,multiple:c}=t;if(!r||!a)return;const l=Es(r),u=l.endsWith(hn)?x(r,"data-label"):l;x(r,"data-label",u);let d=`${u}${c?`, ${s.length?i.found.replace("%d",`${s.length}`):i.empty}`:""}`;const m=[];for(const{addedNodes:b,removedNodes:_}of e?.detail||[]){for(const h of b)_e(h)&&m.unshift(h);for(const h of _)_e(h)&&m.push(h)}const p=c?m.length===1:m[0]===o;if(o&&p){const b=x(r,"aria-expanded"),_=x(r,"inputmode"),h=_e(o)?r:o,w=!m[0].isConnected;t._speak=`${i[w?"removed":"added"]} ${ct(m[0])}, `,($s||o===r)&&he(t._speak),r!==h&&(x(r,"aria-expanded",null),x(r,"inputmode","none"),d=" ",r.focus()),setTimeout(()=>{var C;x(r,"aria-expanded",b),x(r,"inputmode",w?"none":_),(C=h?.focus)==null||C.call(h),x(r,"inputmode",_),t._speak="",Ts?Pt(t,"blur",()=>zt(t),mn):setTimeout(zt,100,t)},100)}let y=0;const v=t.querySelector("select"),E=we(t)?"":`${i.remove}, `;for(const b of s){const _=v?.options[y],h=ct(b),w=b.value||h,C=`${t._speak}${h}, ${E}${++y} ${i.of} ${s.length}`;x(b,"role","button"),x(b,"value",w),x(b,"tabindex","-1"),x(b,"aria-label",C),_?Object.assign(_,{textContent:h,value:w}):v?.appendChild(new Option(h,w,!0,!0))}v&&x(v,"multiple",c?"":null);for(const b of[...v?.options||[]].slice(y))b.remove();!c&&y>1&&console.warn("u-combobox: Multiple <data> found in single mode."),x(a,"aria-multiselectable",`${c}`),x(r,"list",un(a)),x(r,"aria-label",`${t._speak}${d}${hn}`),a.hasAttribute("popover")&&(x(r,"popovertarget",un(a)),x(a,"popover","manual"));const g=ct(s[0]);g!==t._item&&Ft(t),t._item=g,bn(t),gn(t),(n=me(t))==null||n.takeRecords()},bn=t=>{var e;t.clear&&x(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value)||we(t))},gn=t=>{var e;const{_speak:n,options:o=[],values:i}=t;for(const s of o){const r=(e=x(s,"value"))!=null?e:ct(s);x(s,"aria-label",n?`${n}${ct(s)}`:null),x(s,"selected",i.includes(r)?"":null)}},Ft=t=>{const{multiple:e,control:n,items:o}=t,i=ct(o[0]);!e&&n&&i!==n.value&&fn(n,i,i?"insertText":"deleteContent")},ye=(t,e=!0)=>{var n;const{_texts:o,options:i=[],creatable:s,control:r,items:a,multiple:c}=t,l=((n=r?.value)==null?void 0:n.trim())||"",u=l.toLowerCase()||null;let d=[...i].find(p=>(x(p,"label")||ct(p)).trim().toLowerCase()===u);const m={bubbles:!0,cancelable:!0,detail:d};if(t.dispatchEvent(new CustomEvent("comboboxbeforematch",m))||(d=[...i].find(p=>p.selected)),e)return gn(t),d?bt(t,d,!1):s&&l?bt(t,{value:l},!1):(!c&&!l&&a[0]?bt(t,a[0]):Ft(t),he(o.invalid));for(const p of i)p.selected=p===d},bt=(t,e,n=!0)=>{const{control:o,items:i,multiple:s}=t,r=Nt("data",e.label||e.value,{value:e.value}),a=[...i].find(u=>u.value===e.value),c={bubbles:!0,cancelable:!0,detail:a||r};if(a&&!n)return Ft(t);if(t.dispatchEvent(new CustomEvent("comboboxbeforeselect",c))){if(!s)for(const u of[...i])u.remove();a?a.remove():o?.insertAdjacentElement("beforebegin",r),t.dispatchEvent(new CustomEvent("comboboxafterselect",c))}},ks=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),he()},As=t=>ge()||setTimeout(Ls,0,t),Ls=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t.multiple||ye(t),t._focus=void 0)},Is=(t,e)=>{const{clientX:n,clientY:o,target:i}=e,{clear:s,control:r,items:a}=t;if(s?.contains(i))return r&&fn(r,"","deleteContentBackward"),r?.focus();for(const c of a){const{top:l,right:u,bottom:d,left:m}=c.getBoundingClientRect();if(c.contains(i))return bt(t,c);if(o>=l&&o<=d&&n>=m&&n<=u)return c.focus()}i===t&&r?.focus()},Ms=(t,e)=>{var n;const{options:o=[],control:i,multiple:s}=t,r=((n=i?.value)==null?void 0:n.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType==="insertReplacementText":!!r){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const c of o)if(c.value&&c.value===r)return bt(t,c,s)}else s||ye(t,!1);bn(t)},Os=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const{clear:o,control:i,items:s}=t,{key:r,repeat:a,target:c}=e,l=i&&i===c,u=l&&i?.selectionEnd;let d=l?s.length:[...s].indexOf(c);if(l&&r==="Tab"&&o&&!o.hidden&&(e.preventDefault(),o.tabIndex=-1,o.focus(),Pt(o,"blur",()=>x(o,"tabindex",null),mn)),!(!l&&_s(e)||d===-1)){if(r==="ArrowRight"&&!l)d+=1;else if(r==="ArrowLeft"&&!u)d-=1;else if(r==="Enter"&&l){const m=x(i,"form");return x(i,"form","#"),requestAnimationFrame(()=>x(i,"form",m)),ye(t)}else if((r==="Backspace"||r==="Delete")&&!u){if(e.preventDefault(),!a&&s[d])return bt(t,s[d]);l&&(d-=1)}else return l||i?.focus();e.preventDefault(),(n=s[Math.max(0,d)]||i)==null||n.focus()}};xs.define("u-combobox",ve);var xe=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Rs=xe&&/android/i.test(navigator.userAgent),vn;xe&&/^Mac/i.test(((vn=navigator.userAgentData)==null?void 0:vn.platform)||navigator.platform);var Ps=`${Rs?"data":"aria"}-labelledby`,Ee=":host(:not([hidden])) { display: block }",Ut=typeof HTMLElement>"u"?class{}:HTMLElement;function O(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 _n=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Ds=(t,...e)=>_n("add",t,e),Ns=(t,...e)=>_n("remove",t,e),Vt=(t,e)=>t.shadowRoot||t.attachShadow({mode:"open"}).append(En("slot"),En("style",e)),qt=new WeakMap,wn=(t,e)=>{if(e===void 0)return qt.get(t);try{qt.get(t).disconnect(),qt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),qt.set(t,n)}},Hs=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},yn=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},Bs=0,xn=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Bs).toString(32)}`),t.id):"",En=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},Wt={define:(t,e)=>!xe||window.customElements.get(t)||window.customElements.define(t,e)},zs=Ee,Fs=Ee,Us=Ee,Vs=':host(:not([hidden])) { display: inline-block; cursor: pointer }:host([aria-disabled="true"]) { cursor: default }',Gt="aria-controls",gt="aria-selected",Sn=class extends Ut{constructor(){super(),Vt(this,zs)}get tabList(){return jt("u-tablist",this)[0]||null}get selectedIndex(){return Yt(this.tabs)}set selectedIndex(t){Te(this.tabs[t])}get tabs(){return jt("u-tab",this)}get panels(){return jt("u-tabpanel",this)}},Cn=class extends Ut{constructor(){super(),Vt(this,Fs)}connectedCallback(){O(this,"role","tablist"),Ds(this,"click,keydown",this),wn(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){Ns(this,"click,keydown",this),wn(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s?.setAttribute(gt,"true")}const{key:e}=t,n=[...this.tabs],o=n.findIndex(s=>s.contains(t.target));let i=o;if(!(t.defaultPrevented||o===-1)&&(t.type==="click"&&Te(n[o]),t.type==="keydown"&&!Hs(t))){if(e==="ArrowDown"||e==="ArrowRight")i=(o+1)%n.length;else if(e==="ArrowUp"||e==="ArrowLeft")i=(o||n.length)-1;else if(e==="End")i=n.length-1;else if(e==="Home")i=0;else if(e==="Tab")i=Yt(n);else return;setTimeout(()=>{n[o].tabIndex=-1,n[i].tabIndex=0}),e!=="Tab"&&(t.preventDefault(),n[i].focus())}}get tabsElement(){return this.closest("u-tabs")}get tabs(){return this.querySelectorAll("u-tab")}get selectedIndex(){return Yt(this.tabs)}set selectedIndex(t){Te(this.tabs[t])}},Se=!1,Tn=class extends Ut{static get observedAttributes(){return["id",gt,Gt]}constructor(){super(),Vt(this,Vs)}connectedCallback(){O(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!Se&&this.selected&&this.tabList){Se=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=jt("u-tabpanel",this.tabsElement||this),n=Ce(this,e[t.indexOf(this)]);n&&O(n,Ps,xn(this)),t.forEach((o,i)=>{const s=Ce(o,e[i]);o.tabIndex=o===this?0:-1,O(o,gt,`${o===this}`),O(o,Gt,s?.id||null),s&&(s.hidden=s!==n)}),Se=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return t?.nodeName==="U-TABLIST"?t:null}get selected(){return O(this,gt)==="true"}set selected(t){O(this,gt,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return Ce(this)}},$n=class extends Ut{static get observedAttributes(){return["hidden"]}constructor(){super(),Vt(this,Us)}connectedCallback(){O(this,"role","tabpanel"),this.hidden=Yt(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){const t=this.hidden;O(this,"aria-hidden",`${t}`),O(this,"tabindex",t||qs(this.firstChild)?null:"0")}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${Gt}="${this.id}"]`;return yn(this).querySelectorAll(t)}},jt=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),Ce=(t,e)=>{const n=O(t,Gt)||xn(e),o=yn(t).getElementById(n);return o?.nodeName==="U-TABPANEL"?o:null},Yt=t=>[...t].findIndex(e=>O(e,gt)==="true"),Te=t=>t&&O(t,"aria-disabled")!=="true"&&O(t,"aria-selected","true"),qs=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');Wt.define("u-tabs",Sn),Wt.define("u-tablist",Cn),Wt.define("u-tab",Tn),Wt.define("u-tabpanel",$n);const Ws="2.2.0",kn="_alert_1n16b_1 _ds-alert_nwz76_3",An="_app_1n16b_1",Ln="_sticky_1n16b_1",In="_avatar_1n16b_1 _ds-avatar_nwz76_1",Mn="_badge_1n16b_1",On="_breadcrumbs_1n16b_1 _ds-breadcrumbs_nwz76_5",Rn="_button_1n16b_1 _ds-button_nwz76_1",Pn="_card_1n16b_1",Dn="_group_1n16b_1",Nn="_doughnut_1n16b_1",Hn="_axis_1n16b_1",Bn="_axisSteps_1n16b_1",zn="_axisStep_1n16b_1",Fn="_axisGroups_1n16b_1",Un="_axisGroup_1n16b_1",Vn="_axisLabel_1n16b_1",qn="_axisGroupContent_1n16b_1",Wn="_bar_1n16b_1",Gn="_lineContainer_1n16b_1",jn="_linePoint_1n16b_1",Yn="_line_1n16b_1",Kn="_lineBorder_1n16b_1",Xn="_lineShade_1n16b_1",Qn="_legends_1n16b_1",Jn="_legend_1n16b_1",Zn="_chip_1n16b_1 _ds-chip_nwz76_5",to="_details_1n16b_1 _ds-details_nwz76_3",eo="_dialog_1n16b_1 _ds-dialog_nwz76_5",no="__drawer_1n16b_1",oo="_divider_1n16b_1",io="_errorsummary_1n16b_1 _ds-error-summary_nwz76_5",so="__errorsummary_1n16b_1",ro="_field_1n16b_1 _ds-field_nwz76_1",ao="__datalist_1n16b_1",lo="_affixes_1n16b_1 _ds-field-affixes_nwz76_3",co="_fieldset_1n16b_1 _ds-fieldset_nwz76_3",uo="_helptext_1n16b_1 _ds-focus_nwz76_1",fo="_input_1n16b_1 _ds-input_nwz76_1",po="_grid_1n16b_1",mo="_flex_1n16b_1",ho="_link_1n16b_1",bo="_logo_1n16b_1",go="_pagination_1n16b_1 _ds-pagination_nwz76_5",vo="_popover_1n16b_1",_o="_progress_1n16b_1",wo="__indeterminate_1n16b_1",yo="_skeleton_1n16b_1 _ds-skeleton_nwz76_5",xo="__skeleton_1n16b_1",Eo="_spinner_1n16b_1",So="_steps_1n16b_1",Co="_table_1n16b_1 _ds-table_nwz76_5",To="__scrollShadow_1n16b_1",$o="_tabs_1n16b_1 _ds-tabs_nwz76_5",ko="__scrollMask_1n16b_1",Ao="_tag_1n16b_1 _ds-tag_nwz76_5",Lo="_toast_1n16b_1",Io="__toastClose_1n16b_1",Mo="__toastOpen_1n16b_1",Oo="__toastTimeout_1n16b_1",Ro="_togglegroup_1n16b_1",Po="__tooltip_1n16b_1",Do="_heading_1n16b_1 _ds-heading_nwz76_1",No="_ingress_1n16b_1",Ho="_muted_1n16b_1",Bo="_info_1n16b_1",zo="_prose_1n16b_1",Fo="_validation_1n16b_1 _ds-validation-message_nwz76_1",Uo="_body_1n16b_169",Vo="__checked_1n16b_1",T={alert:kn,app:An,sticky:Ln,avatar:In,badge:Mn,breadcrumbs:On,button:Rn,card:Pn,group:Dn,doughnut:Nn,"color-1":"_color-1_1n16b_1","color-2":"_color-2_1n16b_1","color-3":"_color-3_1n16b_1",axis:Hn,axisSteps:Bn,axisStep:zn,axisGroups:Fn,axisGroup:Un,"is-horizontal":"_is-horizontal_1n16b_1",axisLabel:Vn,"is-vertical":"_is-vertical_1n16b_1",axisGroupContent:qn,"is-stacked":"_is-stacked_1n16b_1",bar:Wn,lineContainer:Gn,linePoint:jn,line:Yn,lineBorder:Kn,lineShade:Xn,legends:Qn,legend:Jn,chip:Zn,details:to,dialog:eo,_drawer:no,divider:oo,errorsummary:io,_errorsummary:so,field:ro,_datalist:ao,affixes:lo,fieldset:co,helptext:uo,input:fo,grid:po,flex:mo,link:ho,logo:bo,pagination:go,popover:vo,progress:_o,_indeterminate:wo,skeleton:yo,_skeleton:xo,spinner:Eo,steps:So,table:Co,_scrollShadow:To,tabs:$o,_scrollMask:ko,tag:Ao,toast:Lo,_toastClose:Io,_toastOpen:Mo,_toastTimeout:Oo,togglegroup:Ro,_tooltip:Po,heading:Do,ingress:No,muted:Ho,info:Bo,prose:zo,validation:Fo,body:Uo,_checked:Vo},Gs=Object.freeze(Object.defineProperty({__proto__:null,_checked:Vo,_datalist:ao,_drawer:no,_errorsummary:so,_indeterminate:wo,_scrollMask:ko,_scrollShadow:To,_skeleton:xo,_toastClose:Io,_toastOpen:Mo,_toastTimeout:Oo,_tooltip:Po,affixes:lo,alert:kn,app:An,avatar:In,axis:Hn,axisGroup:Un,axisGroupContent:qn,axisGroups:Fn,axisLabel:Vn,axisStep:zn,axisSteps:Bn,badge:Mn,bar:Wn,body:Uo,breadcrumbs:On,button:Rn,card:Pn,chip:Zn,default:T,details:to,dialog:eo,divider:oo,doughnut:Nn,errorsummary:io,field:ro,fieldset:co,flex:mo,grid:po,group:Dn,heading:Do,helptext:uo,info:Bo,ingress:No,input:fo,legend:Jn,legends:Qn,line:Yn,lineBorder:Kn,lineContainer:Gn,linePoint:jn,lineShade:Xn,link:ho,logo:bo,muted:Ho,pagination:go,popover:vo,progress:_o,prose:zo,skeleton:yo,spinner:Eo,steps:So,sticky:Ln,table:Co,tabs:$o,tag:Ao,toast:Lo,togglegroup:Ro,validation:Fo},Symbol.toStringTag,{value:"Module"})),vt=Math.min,H=Math.max,Kt=Math.round,Xt=Math.floor,K=t=>({x:t,y:t}),js={left:"right",right:"left",bottom:"top",top:"bottom"},Ys={start:"end",end:"start"};function qo(t,e,n){return H(t,vt(e,n))}function Qt(t,e){return typeof t=="function"?t(e):t}function dt(t){return t.split("-")[0]}function Jt(t){return t.split("-")[1]}function Wo(t){return t==="x"?"y":"x"}function Go(t){return t==="y"?"height":"width"}const Ks=new Set(["top","bottom"]);function it(t){return Ks.has(dt(t))?"y":"x"}function jo(t){return Wo(it(t))}function Xs(t,e,n){n===void 0&&(n=!1);const o=Jt(t),i=jo(t),s=Go(i);let r=i==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return e.reference[s]>e.floating[s]&&(r=Zt(r)),[r,Zt(r)]}function Qs(t){const e=Zt(t);return[$e(t),e,$e(e)]}function $e(t){return t.replace(/start|end/g,e=>Ys[e])}const Yo=["left","right"],Ko=["right","left"],Js=["top","bottom"],Zs=["bottom","top"];function tr(t,e,n){switch(t){case"top":case"bottom":return n?e?Ko:Yo:e?Yo:Ko;case"left":case"right":return e?Js:Zs;default:return[]}}function er(t,e,n,o){const i=Jt(t);let s=tr(dt(t),n==="start",o);return i&&(s=s.map(r=>r+"-"+i),e&&(s=s.concat(s.map($e)))),s}function Zt(t){return t.replace(/left|right|bottom|top/g,e=>js[e])}function nr(t){return{top:0,right:0,bottom:0,left:0,...t}}function or(t){return typeof t!="number"?nr(t):{top:t,right:t,bottom:t,left:t}}function te(t){const{x:e,y:n,width:o,height:i}=t;return{width:o,height:i,top:n,left:e,right:e+o,bottom:n+i,x:e,y:n}}function Xo(t,e,n){let{reference:o,floating:i}=t;const s=it(e),r=jo(e),a=Go(r),c=dt(e),l=s==="y",u=o.x+o.width/2-i.width/2,d=o.y+o.height/2-i.height/2,m=o[a]/2-i[a]/2;let p;switch(c){case"top":p={x:u,y:o.y-i.height};break;case"bottom":p={x:u,y:o.y+o.height};break;case"right":p={x:o.x+o.width,y:d};break;case"left":p={x:o.x-i.width,y:d};break;default:p={x:o.x,y:o.y}}switch(Jt(e)){case"start":p[r]-=m*(n&&l?-1:1);break;case"end":p[r]+=m*(n&&l?-1:1);break}return p}const ir=async(t,e,n)=>{const{placement:o="bottom",strategy:i="absolute",middleware:s=[],platform:r}=n,a=s.filter(Boolean),c=await(r.isRTL==null?void 0:r.isRTL(e));let l=await r.getElementRects({reference:t,floating:e,strategy:i}),{x:u,y:d}=Xo(l,o,c),m=o,p={},y=0;for(let v=0;v<a.length;v++){const{name:E,fn:g}=a[v],{x:b,y:_,data:h,reset:w}=await g({x:u,y:d,initialPlacement:o,placement:m,strategy:i,middlewareData:p,rects:l,platform:r,elements:{reference:t,floating:e}});u=b??u,d=_??d,p={...p,[E]:{...p[E],...h}},w&&y<=50&&(y++,typeof w=="object"&&(w.placement&&(m=w.placement),w.rects&&(l=w.rects===!0?await r.getElementRects({reference:t,floating:e,strategy:i}):w.rects),{x:u,y:d}=Xo(l,m,c)),v=-1)}return{x:u,y:d,placement:m,strategy:i,middlewareData:p}};async function ke(t,e){var n;e===void 0&&(e={});const{x:o,y:i,platform:s,rects:r,elements:a,strategy:c}=t,{boundary:l="clippingAncestors",rootBoundary:u="viewport",elementContext:d="floating",altBoundary:m=!1,padding:p=0}=Qt(e,t),y=or(p),E=a[m?d==="floating"?"reference":"floating":d],g=te(await s.getClippingRect({element:(n=await(s.isElement==null?void 0:s.isElement(E)))==null||n?E:E.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(a.floating)),boundary:l,rootBoundary:u,strategy:c})),b=d==="floating"?{x:o,y:i,width:r.floating.width,height:r.floating.height}:r.reference,_=await(s.getOffsetParent==null?void 0:s.getOffsetParent(a.floating)),h=await(s.isElement==null?void 0:s.isElement(_))?await(s.getScale==null?void 0:s.getScale(_))||{x:1,y:1}:{x:1,y:1},w=te(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:a,rect:b,offsetParent:_,strategy:c}):b);return{top:(g.top-w.top+y.top)/h.y,bottom:(w.bottom-g.bottom+y.bottom)/h.y,left:(g.left-w.left+y.left)/h.x,right:(w.right-g.right+y.right)/h.x}}const sr=function(t){return t===void 0&&(t={}),{name:"flip",options:t,async fn(e){var n,o;const{placement:i,middlewareData:s,rects:r,initialPlacement:a,platform:c,elements:l}=e,{mainAxis:u=!0,crossAxis:d=!0,fallbackPlacements:m,fallbackStrategy:p="bestFit",fallbackAxisSideDirection:y="none",flipAlignment:v=!0,...E}=Qt(t,e);if((n=s.arrow)!=null&&n.alignmentOffset)return{};const g=dt(i),b=it(a),_=dt(a)===a,h=await(c.isRTL==null?void 0:c.isRTL(l.floating)),w=m||(_||!v?[Zt(a)]:Qs(a)),C=y!=="none";!m&&C&&w.push(...er(a,v,y,h));const $=[a,...w],k=await ke(e,E),I=[];let A=((o=s.flip)==null?void 0:o.overflows)||[];if(u&&I.push(k[g]),d){const J=Xs(i,r,h);I.push(k[J[0]],k[J[1]])}if(A=[...A,{placement:i,overflows:I}],!I.every(J=>J<=0)){var V,U;const J=(((V=s.flip)==null?void 0:V.index)||0)+1,ht=$[J];if(ht&&(!(d==="alignment"?b!==it(ht):!1)||A.every(D=>it(D.placement)===b?D.overflows[0]>0:!0)))return{data:{index:J,overflows:A},reset:{placement:ht}};let ot=(U=A.filter(Z=>Z.overflows[0]<=0).sort((Z,D)=>Z.overflows[1]-D.overflows[1])[0])==null?void 0:U.placement;if(!ot)switch(p){case"bestFit":{var at;const Z=(at=A.filter(D=>{if(C){const tt=it(D.placement);return tt===b||tt==="y"}return!0}).map(D=>[D.placement,D.overflows.filter(tt=>tt>0).reduce((tt,Cl)=>tt+Cl,0)]).sort((D,tt)=>D[1]-tt[1])[0])==null?void 0:at[0];Z&&(ot=Z);break}case"initialPlacement":ot=a;break}if(i!==ot)return{reset:{placement:ot}}}return{}}}},rr=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){const{x:n,y:o,placement:i}=e,{mainAxis:s=!0,crossAxis:r=!1,limiter:a={fn:E=>{let{x:g,y:b}=E;return{x:g,y:b}}},...c}=Qt(t,e),l={x:n,y:o},u=await ke(e,c),d=it(dt(i)),m=Wo(d);let p=l[m],y=l[d];if(s){const E=m==="y"?"top":"left",g=m==="y"?"bottom":"right",b=p+u[E],_=p-u[g];p=qo(b,p,_)}if(r){const E=d==="y"?"top":"left",g=d==="y"?"bottom":"right",b=y+u[E],_=y-u[g];y=qo(b,y,_)}const v=a.fn({...e,[m]:p,[d]:y});return{...v,data:{x:v.x-n,y:v.y-o,enabled:{[m]:s,[d]:r}}}}}},ar=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){var n,o;const{placement:i,rects:s,platform:r,elements:a}=e,{apply:c=()=>{},...l}=Qt(t,e),u=await ke(e,l),d=dt(i),m=Jt(i),p=it(i)==="y",{width:y,height:v}=s.floating;let E,g;d==="top"||d==="bottom"?(E=d,g=m===(await(r.isRTL==null?void 0:r.isRTL(a.floating))?"start":"end")?"left":"right"):(g=d,E=m==="end"?"top":"bottom");const b=v-u.top-u.bottom,_=y-u.left-u.right,h=vt(v-u[E],b),w=vt(y-u[g],_),C=!e.middlewareData.shift;let $=h,k=w;if((n=e.middlewareData.shift)!=null&&n.enabled.x&&(k=_),(o=e.middlewareData.shift)!=null&&o.enabled.y&&($=b),C&&!m){const A=H(u.left,0),V=H(u.right,0),U=H(u.top,0),at=H(u.bottom,0);p?k=y-2*(A!==0||V!==0?A+V:H(u.left,u.right)):$=v-2*(U!==0||at!==0?U+at:H(u.top,u.bottom))}await c({...e,availableWidth:k,availableHeight:$});const I=await r.getDimensions(a.floating);return y!==I.width||v!==I.height?{reset:{rects:!0}}:{}}}};function ee(){return typeof window<"u"}function _t(t){return Qo(t)?(t.nodeName||"").toLowerCase():"#document"}function B(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function X(t){var e;return(e=(Qo(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function Qo(t){return ee()?t instanceof Node||t instanceof B(t).Node:!1}function q(t){return ee()?t instanceof Element||t instanceof B(t).Element:!1}function Q(t){return ee()?t instanceof HTMLElement||t instanceof B(t).HTMLElement:!1}function Jo(t){return!ee()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof B(t).ShadowRoot}const lr=new Set(["inline","contents"]);function Tt(t){const{overflow:e,overflowX:n,overflowY:o,display:i}=W(t);return/auto|scroll|overlay|hidden|clip/.test(e+o+n)&&!lr.has(i)}const cr=new Set(["table","td","th"]);function dr(t){return cr.has(_t(t))}const ur=[":popover-open",":modal"];function ne(t){return ur.some(e=>{try{return t.matches(e)}catch{return!1}})}const fr=["transform","translate","scale","rotate","perspective"],pr=["transform","translate","scale","rotate","perspective","filter"],mr=["paint","layout","strict","content"];function Ae(t){const e=Le(),n=q(t)?W(t):t;return fr.some(o=>n[o]?n[o]!=="none":!1)||(n.containerType?n.containerType!=="normal":!1)||!e&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!e&&(n.filter?n.filter!=="none":!1)||pr.some(o=>(n.willChange||"").includes(o))||mr.some(o=>(n.contain||"").includes(o))}function hr(t){let e=st(t);for(;Q(e)&&!wt(e);){if(Ae(e))return e;if(ne(e))return null;e=st(e)}return null}function Le(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const br=new Set(["html","body","#document"]);function wt(t){return br.has(_t(t))}function W(t){return B(t).getComputedStyle(t)}function oe(t){return q(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function st(t){if(_t(t)==="html")return t;const e=t.assignedSlot||t.parentNode||Jo(t)&&t.host||X(t);return Jo(e)?e.host:e}function Zo(t){const e=st(t);return wt(e)?t.ownerDocument?t.ownerDocument.body:t.body:Q(e)&&Tt(e)?e:Zo(e)}function $t(t,e,n){var o;e===void 0&&(e=[]),n===void 0&&(n=!0);const i=Zo(t),s=i===((o=t.ownerDocument)==null?void 0:o.body),r=B(i);if(s){const a=Ie(r);return e.concat(r,r.visualViewport||[],Tt(i)?i:[],a&&n?$t(a):[])}return e.concat(i,$t(i,[],n))}function Ie(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function ti(t){const e=W(t);let n=parseFloat(e.width)||0,o=parseFloat(e.height)||0;const i=Q(t),s=i?t.offsetWidth:n,r=i?t.offsetHeight:o,a=Kt(n)!==s||Kt(o)!==r;return a&&(n=s,o=r),{width:n,height:o,$:a}}function Me(t){return q(t)?t:t.contextElement}function yt(t){const e=Me(t);if(!Q(e))return K(1);const n=e.getBoundingClientRect(),{width:o,height:i,$:s}=ti(e);let r=(s?Kt(n.width):n.width)/o,a=(s?Kt(n.height):n.height)/i;return(!r||!Number.isFinite(r))&&(r=1),(!a||!Number.isFinite(a))&&(a=1),{x:r,y:a}}const gr=K(0);function ei(t){const e=B(t);return!Le()||!e.visualViewport?gr:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function vr(t,e,n){return e===void 0&&(e=!1),!n||e&&n!==B(t)?!1:e}function ut(t,e,n,o){e===void 0&&(e=!1),n===void 0&&(n=!1);const i=t.getBoundingClientRect(),s=Me(t);let r=K(1);e&&(o?q(o)&&(r=yt(o)):r=yt(t));const a=vr(s,n,o)?ei(s):K(0);let c=(i.left+a.x)/r.x,l=(i.top+a.y)/r.y,u=i.width/r.x,d=i.height/r.y;if(s){const m=B(s),p=o&&q(o)?B(o):o;let y=m,v=Ie(y);for(;v&&o&&p!==y;){const E=yt(v),g=v.getBoundingClientRect(),b=W(v),_=g.left+(v.clientLeft+parseFloat(b.paddingLeft))*E.x,h=g.top+(v.clientTop+parseFloat(b.paddingTop))*E.y;c*=E.x,l*=E.y,u*=E.x,d*=E.y,c+=_,l+=h,y=B(v),v=Ie(y)}}return te({width:u,height:d,x:c,y:l})}function ie(t,e){const n=oe(t).scrollLeft;return e?e.left+n:ut(X(t)).left+n}function ni(t,e){const n=t.getBoundingClientRect(),o=n.left+e.scrollLeft-ie(t,n),i=n.top+e.scrollTop;return{x:o,y:i}}function _r(t){let{elements:e,rect:n,offsetParent:o,strategy:i}=t;const s=i==="fixed",r=X(o),a=e?ne(e.floating):!1;if(o===r||a&&s)return n;let c={scrollLeft:0,scrollTop:0},l=K(1);const u=K(0),d=Q(o);if((d||!d&&!s)&&((_t(o)!=="body"||Tt(r))&&(c=oe(o)),Q(o))){const p=ut(o);l=yt(o),u.x=p.x+o.clientLeft,u.y=p.y+o.clientTop}const m=r&&!d&&!s?ni(r,c):K(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+u.x+m.x,y:n.y*l.y-c.scrollTop*l.y+u.y+m.y}}function wr(t){return Array.from(t.getClientRects())}function yr(t){const e=X(t),n=oe(t),o=t.ownerDocument.body,i=H(e.scrollWidth,e.clientWidth,o.scrollWidth,o.clientWidth),s=H(e.scrollHeight,e.clientHeight,o.scrollHeight,o.clientHeight);let r=-n.scrollLeft+ie(t);const a=-n.scrollTop;return W(o).direction==="rtl"&&(r+=H(e.clientWidth,o.clientWidth)-i),{width:i,height:s,x:r,y:a}}const oi=25;function xr(t,e){const n=B(t),o=X(t),i=n.visualViewport;let s=o.clientWidth,r=o.clientHeight,a=0,c=0;if(i){s=i.width,r=i.height;const u=Le();(!u||u&&e==="fixed")&&(a=i.offsetLeft,c=i.offsetTop)}const l=ie(o);if(l<=0){const u=o.ownerDocument,d=u.body,m=getComputedStyle(d),p=u.compatMode==="CSS1Compat"&&parseFloat(m.marginLeft)+parseFloat(m.marginRight)||0,y=Math.abs(o.clientWidth-d.clientWidth-p);y<=oi&&(s-=y)}else l<=oi&&(s+=l);return{width:s,height:r,x:a,y:c}}const Er=new Set(["absolute","fixed"]);function Sr(t,e){const n=ut(t,!0,e==="fixed"),o=n.top+t.clientTop,i=n.left+t.clientLeft,s=Q(t)?yt(t):K(1),r=t.clientWidth*s.x,a=t.clientHeight*s.y,c=i*s.x,l=o*s.y;return{width:r,height:a,x:c,y:l}}function ii(t,e,n){let o;if(e==="viewport")o=xr(t,n);else if(e==="document")o=yr(X(t));else if(q(e))o=Sr(e,n);else{const i=ei(t);o={x:e.x-i.x,y:e.y-i.y,width:e.width,height:e.height}}return te(o)}function si(t,e){const n=st(t);return n===e||!q(n)||wt(n)?!1:W(n).position==="fixed"||si(n,e)}function Cr(t,e){const n=e.get(t);if(n)return n;let o=$t(t,[],!1).filter(a=>q(a)&&_t(a)!=="body"),i=null;const s=W(t).position==="fixed";let r=s?st(t):t;for(;q(r)&&!wt(r);){const a=W(r),c=Ae(r);!c&&a.position==="fixed"&&(i=null),(s?!c&&!i:!c&&a.position==="static"&&!!i&&Er.has(i.position)||Tt(r)&&!c&&si(t,r))?o=o.filter(u=>u!==r):i=a,r=st(r)}return e.set(t,o),o}function Tr(t){let{element:e,boundary:n,rootBoundary:o,strategy:i}=t;const r=[...n==="clippingAncestors"?ne(e)?[]:Cr(e,this._c):[].concat(n),o],a=r[0],c=r.reduce((l,u)=>{const d=ii(e,u,i);return l.top=H(d.top,l.top),l.right=vt(d.right,l.right),l.bottom=vt(d.bottom,l.bottom),l.left=H(d.left,l.left),l},ii(e,a,i));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function $r(t){const{width:e,height:n}=ti(t);return{width:e,height:n}}function kr(t,e,n){const o=Q(e),i=X(e),s=n==="fixed",r=ut(t,!0,s,e);let a={scrollLeft:0,scrollTop:0};const c=K(0);function l(){c.x=ie(i)}if(o||!o&&!s)if((_t(e)!=="body"||Tt(i))&&(a=oe(e)),o){const p=ut(e,!0,s,e);c.x=p.x+e.clientLeft,c.y=p.y+e.clientTop}else i&&l();s&&!o&&i&&l();const u=i&&!o&&!s?ni(i,a):K(0),d=r.left+a.scrollLeft-c.x-u.x,m=r.top+a.scrollTop-c.y-u.y;return{x:d,y:m,width:r.width,height:r.height}}function Oe(t){return W(t).position==="static"}function ri(t,e){if(!Q(t)||W(t).position==="fixed")return null;if(e)return e(t);let n=t.offsetParent;return X(t)===n&&(n=n.ownerDocument.body),n}function ai(t,e){const n=B(t);if(ne(t))return n;if(!Q(t)){let i=st(t);for(;i&&!wt(i);){if(q(i)&&!Oe(i))return i;i=st(i)}return n}let o=ri(t,e);for(;o&&dr(o)&&Oe(o);)o=ri(o,e);return o&&wt(o)&&Oe(o)&&!Ae(o)?n:o||hr(t)||n}const Ar=async function(t){const e=this.getOffsetParent||ai,n=this.getDimensions,o=await n(t.floating);return{reference:kr(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function Lr(t){return W(t).direction==="rtl"}const Ir={convertOffsetParentRelativeRectToViewportRelativeRect:_r,getDocumentElement:X,getClippingRect:Tr,getOffsetParent:ai,getElementRects:Ar,getClientRects:wr,getDimensions:$r,getScale:yt,isElement:q,isRTL:Lr};function li(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function Mr(t,e){let n=null,o;const i=X(t);function s(){var a;clearTimeout(o),(a=n)==null||a.disconnect(),n=null}function r(a,c){a===void 0&&(a=!1),c===void 0&&(c=1),s();const l=t.getBoundingClientRect(),{left:u,top:d,width:m,height:p}=l;if(a||e(),!m||!p)return;const y=Xt(d),v=Xt(i.clientWidth-(u+m)),E=Xt(i.clientHeight-(d+p)),g=Xt(u),_={rootMargin:-y+"px "+-v+"px "+-E+"px "+-g+"px",threshold:H(0,vt(1,c))||1};let h=!0;function w(C){const $=C[0].intersectionRatio;if($!==c){if(!h)return r();$?r(!1,$):o=setTimeout(()=>{r(!1,1e-7)},1e3)}$===1&&!li(l,t.getBoundingClientRect())&&r(),h=!1}try{n=new IntersectionObserver(w,{..._,root:i.ownerDocument})}catch{n=new IntersectionObserver(w,_)}n.observe(t)}return r(!0),s}function Or(t,e,n,o){o===void 0&&(o={});const{ancestorScroll:i=!0,ancestorResize:s=!0,elementResize:r=typeof ResizeObserver=="function",layoutShift:a=typeof IntersectionObserver=="function",animationFrame:c=!1}=o,l=Me(t),u=i||s?[...l?$t(l):[],...$t(e)]:[];u.forEach(g=>{i&&g.addEventListener("scroll",n,{passive:!0}),s&&g.addEventListener("resize",n)});const d=l&&a?Mr(l,n):null;let m=-1,p=null;r&&(p=new ResizeObserver(g=>{let[b]=g;b&&b.target===l&&p&&(p.unobserve(e),cancelAnimationFrame(m),m=requestAnimationFrame(()=>{var _;(_=p)==null||_.observe(e)})),n()}),l&&!c&&p.observe(l),p.observe(e));let y,v=c?ut(t):null;c&&E();function E(){const g=ut(t);v&&!li(v,g)&&n(),v=g,y=requestAnimationFrame(E)}return n(),()=>{var g;u.forEach(b=>{i&&b.removeEventListener("scroll",n),s&&b.removeEventListener("resize",n)}),d?.(),(g=p)==null||g.disconnect(),p=null,c&&cancelAnimationFrame(y)}}const Re=rr,Pe=sr,ci=ar,Rr=(t,e,n)=>{const o=new Map,i={platform:Ir,...n},s={...i.platform,_c:o};return ir(t,e,{...i,platform:s})},z={capture:!0,passive:!0},xt=typeof window<"u"&&typeof document<"u";function Pr(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function f(t,e,n){return n===void 0?t.getAttribute(e)??null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}let Dr=0;const Nr=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function kt(t){return t.id||(t.id=`${Nr}${++Dr}`),t.id}const di=(t,e,[...n])=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},L=(t,...e)=>{At&&(t===window||t===document)&&At.push(()=>Hr(t,...e)),di("add",t,e)},Hr=(t,...e)=>di("remove",t,e);let At=null;const F=t=>{if(!xt||!window.requestAnimationFrame)return;window._mtdsUnbindEvents||(window._mtdsUnbindEvents=new Map);const e=()=>requestAnimationFrame(()=>{const n=String(t).replace(/(\n|\s)/g,"");window._mtdsUnbindEvents?.get(n)?.map(o=>o()),At=[],t(),window._mtdsUnbindEvents?.set(n,At?.slice(0)),At=null});document.readyState==="complete"?e():L(window,"load",e)},De=new WeakMap;function ft(t,e,n){De.get(t)?.(),De.delete(t),e&&De.set(t,Or(e,t,()=>{if(!t.isConnected||!e.isConnected||t.hidden)return ft(t,!1);Rr(e,t,n).then(({x:o,y:i})=>{t.style.left=`${o}px`,t.style.top=`${i}px`})}))}function ui(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 Ne=new WeakMap,Et=(t,e,n)=>{if(!xt||!window.requestAnimationFrame)return;const o=t.getElementsByClassName(e),i=Ne.get(t)||[];i.length||(Ne.set(t,i),ui((s,r)=>{if(t.isConnected&&i?.length)for(const a of i)a();else r?.disconnect(),Ne.delete(t)}).observe(t,{attributeFilter:["class","hidden"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>n(o))},He=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),Br=`.${T.breadcrumbs.split(" ")[0]}`,zr=`.${T.card.split(" ")[0]}`,Fr=`.${T.chip.split(" ")[0]}`,Ur=`.${T.helptext.split(" ")[0]}`,Vr=`.${T.pagination.split(" ")[0]}`,qr='summary,u-summary,a,button,[role="tab"],[role="button"]',Wr="click,toggle,submit,change",Be="mattilsynet.matomo.cloud",G="mtds-analytics-banner",Gr="https://www.mattilsynet.no/om-mattilsynet/personvernerklaering/informasjonskapsler";function fi(t,e={}){if(xt){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${Be}/matomo.php`])),window._mtm||(window._mtm=window._mtm||[],window._mtm.push({"mtm.startTime":Date.now(),event:"mtm.Start"})),t==="init"){window._mtdsTracking={enabled:window.location.hostname!=="localhost",...window._mtdsTracking,...e};const{consent:n,enabled:o,matomoId:i,matomoTagManagerId:s}=window._mtdsTracking;if(i&&window._paq.push(["setSiteId",i]),o){n!=="custom"&&jr();const r=s?`https://cdn.matomo.cloud/${Be}/container_${s}.js`:`https://cdn.matomo.cloud/${Be}/matomo.js`;document.querySelector(`script[src="${r}"]`)||document.head.append(Object.assign(document.createElement("script"),{async:!0,src:r}))}}if(window._mtdsTracking?.enabled!==!1){if(window._mtdsTracking?.enabled==="debug")return console.info(`analytics("${t}", `,e,")");if(t==="pageview"){const{url:n,title:o}=e;window._paq.push(["setCustomUrl",n||location.href]),window._paq.push(["setDocumentTitle",o||document.title]),window._paq.push(["trackPageView"])}else if(t==="event"){const{category:n,action:o,name:i,value:s}=e,r=["trackEvent",n,o,i,s];let a=location.href;window._paq.push([function(){a=this.getCurrentUrl()}]),window._paq.push(["setCustomUrl",a.split("#")[0]]),window._paq.push(r.filter(c=>c!==void 0)),window._paq.push(["setCustomUrl",a])}else if(t==="search"){const{query:n,category:o=!1,results:i=!1}=e;window._paq.push(["trackSiteSearch",n,o,i])}else t==="matomo"&&window._paq.push(e)}}}function jr(){if(document.getElementById(G)||window.localStorage.getItem(G))return;document.body.insertAdjacentHTML("afterbegin",`<dialog id="${G}" data-analytics="ignore"><style>
9
+ #${G}[open] { box-sizing: border-box; display: flex; align-items: center; background: #116e6b; border-radius: .5em; border: 0; box-shadow: 0 .25em .5em rgba(0,0,0,.3); color: #fff; font-size: .875em; inset: auto auto 1em 1em; max-width: calc(100vw - 2em); outline: 0; padding: .5em; position: fixed; z-index: 99999 }
10
+ #${G} button { all: unset; box-sizing: border-box; cursor: pointer; display: flex; width: 1.5em; height: 1.5em; font: 300 1.5em/1.35 sans-serif; border-radius: .25em; place-content: center; transition: .2s; transition-property: background, scale }
11
+ #${G} button:focus-visible { outline: 2px solid }
12
+ #${G} button:hover { background: #0a4e4f }
13
+ #${G} button:active { background: #054449; scale: .9 }
14
+ #${G} p { margin: 0 .25em }
15
15
  </style>
16
- <p>Vi bruker <a href="${br}" target="_blank">informasjonskapsler</a> for å forbedre brukeropplevelsen.</p>
16
+ <p>Vi bruker <a href="${Gr}" target="_blank">informasjonskapsler</a> for å forbedre brukeropplevelsen.</p>
17
17
  <form method="dialog" data-analytics="ignore"><button type="submit" aria-label="OK">&times;</button></form>
18
- </dialog>`);const e=document.getElementById(H),n=()=>window.localStorage.setItem(H,"seen");e.addEventListener("close",n,{once:!0}),e.show()}function _r(t){window._mtdsTracking?.enabled&&setTimeout(yr,0,t)}function yr({type:t,target:e}){const n=t==="click"?e?.closest?.(hr):e;if(!(n instanceof Element)||n.closest('[data-analytics="ignore"]'))return;let o="click",i="Button",s=qo(n)||xr(n)||m(n,"data-tooltip")||"";if(t==="submit")i="Form",o="submit",s=s||document.title;else if(t==="toggle"){if(!n.matches("dialog:modal"))return;i="Dialog",o="open"}else if(t==="change"){const r=m(n,"type"),a=r==="checkbox"||r==="radio"?n.closest("fieldset"):null;i="Form",o="change",s=qo(a||n)||xt(a?.querySelector("legend"))||xt(n?.labels?.[0])}else if(m(n,"role")==="tab")i="Tab",o="navigate";else if(m(n,"popovertarget")){if(!wr(n)?.matches(":popover-open"))return;i=n.closest(pr)?"HelpText":"Popover",o="open"}else if(n.nodeName.endsWith("SUMMARY")){if(!n.parentElement.open)return;i="Details",o="open"}else if(m(n,"data-command")==="toggle-app-expanded"){const r=Er(n,"--mtds-tooltip-position")==="none";i="Sidebar",o=r?"expand":"minimize",s=r&&m(n,"data-tooltip")||xt(n)}else if(n.closest(ur))i="Breadcrumbs",o="navigate";else if(n.closest(mr))i="Pagintation",o="navigate";else if(n.closest(fr))i="Chip",o=n.hasAttribute("data-removable")?"remove":"click";else if(n.closest("th[aria-sort]"))i="Table",o="sort";else if(n instanceof HTMLAnchorElement)i="Link",o=n.protocol==="mailto:"?"email":"navigate",n.hasAttribute("download")?o="download":n.hash&&n.href.startsWith(location.href.split("#")[0])&&(o="anchor");else if(n.hasAttribute("aria-expanded")){if(m(n,"aria-expanded")!=="true")return;i="Expand",o="open"}Vo("event",{category:m(n,"data-analytics-category")??i,action:m(n,"data-analytics-action")??o,name:m(n,"data-analytics-name")??s})}const xt=t=>t?.textContent?.trim()||"",qo=t=>t&&m(t,"aria-label")||"",wr=t=>document.getElementById(m(t,"popovertarget")||""),Er=(t,e)=>window.getComputedStyle(t).getPropertyValue(e)?.trim(),xr=t=>{const e=xt(t),n=xt(t.querySelector("h1,h2,h3,h4,h5,h6"));return e.startsWith(n)&&n||e.slice(0,100).trim()};R(()=>C(document,gr,_r,M)),typeof window<"u"&&window.CSSStyleSheet&&document.adoptedStyleSheets&&(()=>{const t="--mtds-app-expanded",e=new CSSStyleSheet,n=()=>!window.localStorage.getItem(t)?.includes("false");document.adoptedStyleSheets.push(e),window.mtdsToggleAppExpanded=o=>{try{const i=o??!n();e.replaceSync?.(`:root { ${t}: var(${t}--${i})}`),window.localStorage.setItem(t,i)}catch{}},window.mtdsToggleAppExpanded(n())})();const Wo=T.app.split(" ")[0],Sr=T.sticky.split(" ")[0],Tr='[data-command="toggle-app-expanded"]',Pe=`.${Wo} > dialog,.${Wo} dialog ~ main`,zo=t=>{document.startViewTransition?document.startViewTransition(t):t()},jo=t=>zo(()=>window.mtdsToggleAppExpanded?.(t));function Cr({target:t,defaultPrevented:e}){const n=t?.closest?.("a");if(n?.closest("dialog")&&n?.closest(Pe))return Ko();if(e||!(t instanceof HTMLButtonElement)||!t.matches(Tr))return;getComputedStyle(t).position==="sticky"?jo():zo(()=>{const i=document.querySelector(Pe);i?.setAttribute("data-closedby","any"),i?.showModal()})}function Ko(){document.querySelector(Pe)?.close()}let Ne=0,bt,j=0,A,He=0,oe=0,Be=!1,Fe=0,it=0;function $r([t]){A=t,Yo()}function Yo(){if(!A?.isConnected)return;const t=window.scrollY,e=t<it;it=t,e!==bt&&(Ne=(A.parentElement?.getBoundingClientRect().top||0)+it,bt=e,He=A.offsetHeight,oe=A.getBoundingClientRect().top+it,Be=A.offsetHeight<=window.innerHeight,Fe=window.innerHeight),!(j===-1&&Be)&&(j!==-1&&(Be||bt&&it<=oe)?(A.style.setProperty("--pos","sticky"),A.style.setProperty("--top","0px"),j=-1):j===-1&&!bt?(A.style.setProperty("--pos","relative"),A.style.setProperty("--top",`${Math.max(0,it-Ne)}px`),j=0):j!==1&&!bt&&it+Fe>=oe+He?(A.style.setProperty("--pos","sticky"),A.style.setProperty("--top",`${Fe-He}px`),j=1):j===1&&bt&&(A.style.setProperty("--pos","relative"),A.style.setProperty("--top",`${oe-Ne}px`),j=0))}R(()=>{gt(document.documentElement,Sr,$r),C(document,"click",Cr,M),C(window,"resize",ar(Ko,100),M),C(window,"scroll",Yo,M)});const Ar=(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),r=Array.from({length:s+1-i},(a,c)=>c+i);return n>4&&i>1&&r.splice(0,2,1,0),n>3&&s<e&&r.splice(-2,2,0,e),r},kr=({current:t=1,total:e=10,show:n=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:Ar(t,e,n).map((o,i)=>({current:o===t&&"page",key:`key-${o}-${i}`,page:o}))}),Lr=T.breadcrumbs.split(" ")[0];function Ir(t){for(const e of t)e.querySelectorAll("li a").forEach((n,o,{length:i})=>{m(n,"aria-current",o===i-1?"page":null)})}R(()=>gt(document.documentElement,Lr,Ir));const Or=T.dialog.split(" ")[0],Mr=wt?document.getElementsByClassName(Or):[],Rr=()=>{for(const t of Mr)t.isConnected&&t.showModal&&t.close&&(t.matches('[open]:not([data-modal="false"]):not(:modal)')?(m(t,"open",null),t.showModal()):t.matches(":modal:not([open])")&&(m(t,"open",""),t.close()))},Dr=({clientX:t,clientY:e,target:n})=>{if(n instanceof HTMLDialogElement&&m(n,"data-closedby")==="any"){const{top:s,right:r,bottom:a,left:c}=n.getBoundingClientRect();if(!(s<=e&&e<=a&&c<=t&&t<=r))return n.close()}const o=n?.closest?.("dialog");o&&n?.closest?.('[data-command="close"]')&&o.close()};R(()=>{C(document,"click",Dr,M),Uo(Rr).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function Pr(t){if(t.animationName!==T._errorsummary)return;const e=t.target?.firstElementChild;e instanceof HTMLHeadingElement&&(m(e,"tabindex","-1"),e.focus())}R(()=>C(document,"animationend",Pr,M));var Nr=Object.defineProperty,Xo=Object.getOwnPropertySymbols,Hr=Object.prototype.hasOwnProperty,Br=Object.prototype.propertyIsEnumerable,Go=(t,e,n)=>e in t?Nr(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Fr=(t,e)=>{for(var n in e||(e={}))Hr.call(e,n)&&Go(t,n,e[n]);if(Xo)for(var n of Xo(e))Br.call(e,n)&&Go(t,n,e[n]);return t},St=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",ie=St&&/android/i.test(navigator.userAgent),Ue=St&&/iPad|iPhone|iPod/.test(navigator.userAgent),Qo;St&&/^Mac/i.test(((Qo=navigator.userAgentData)==null?void 0:Qo.platform)||navigator.platform);var Ur=`${ie?"data":"aria"}-labelledby`,Vr=":host(:not([hidden])) { display: block }",qr="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",Jo=typeof HTMLElement>"u"?class{}:HTMLElement;function x(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 Zo=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Tt=(t,...e)=>Zo("add",t,e),se=(t,...e)=>Zo("remove",t,e),Wr=(t,e)=>t.shadowRoot||t.attachShadow({mode:"open"}).append(We("slot"),We("style",e)),re=new WeakMap,Ve=(t,e)=>{if(e===void 0)return re.get(t);try{re.get(t).disconnect(),re.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),re.set(t,n)}},ti=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},zr=0,qe=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++zr).toString(32)}`),t.id):"",We=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},ei={define:(t,e)=>!St||window.customElements.get(t)||window.customElements.define(t,e)},st,jr=0,ni=t=>{st||(st=We("div"),st.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",x(st,"aria-live","assertive")),st.isConnected||document.body.append(st),t&&(st.textContent=`${t}${jr++%2?" ":""}`)},Kr=(t,e,n="")=>{var o,i;const s={bubbles:!0,composed:!0,data:e,inputType:n},r=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(o=Object.getOwnPropertyDescriptor(r,"value"))==null?void 0:o.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},ze=!1,je=t=>(t?.type==="mouseup"&&(ze=!1),t?.type==="mousedown"&&(ze=!0,Tt(document,"mouseup",je,{once:!0})),ze),Ke="disabled",Ct="selected",Yr=class extends Jo{static get observedAttributes(){return[Ke,Ct]}connectedCallback(){Ue||(this.tabIndex=-1),this.hasAttribute("role")||x(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){x(this,"aria-disabled",`${this.disabled}`),x(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[Ct]}set defaultSelected(t){this[Ct]=t}get disabled(){return x(this,Ke)!==null}set disabled(t){x(this,Ke,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=x(this,"label"))!=null?t:this.text}set label(t){x(this,"label",t)}get selected(){return x(this,Ct)!==null}set selected(t){x(this,Ct,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=x(this,"value"))!=null?t:this.text}set value(t){x(this,"value",t)}};ei.define("u-option",Yr);var Xr=`${Vr}
18
+ </dialog>`);const e=document.getElementById(G),n=()=>window.localStorage.setItem(G,"seen");e.addEventListener("close",n,{once:!0}),e.show()}function Yr(t){window._mtdsTracking?.enabled&&setTimeout(Kr,0,t)}function Kr({type:t,target:e}){const n=t==="click"?e?.closest?.(qr):e;if(!(n instanceof Element)||n.closest('[data-analytics="ignore"]'))return;let o="click",i="Button",s=pi(n)||Jr(n)||f(n,"data-tooltip")||"";if(t==="submit")i="Form",o="submit",s=s||document.title;else if(t==="toggle"){if(!n.matches("dialog:modal"))return;i="Dialog",o="open"}else if(t==="change"){const r=f(n,"type"),a=r==="checkbox"||r==="radio"?n.closest("fieldset"):null;i="Form",o="change",s=pi(a||n)||Lt(a?.querySelector("legend"))||Lt(n?.labels?.[0])}else if(f(n,"role")==="tab")i="Tab",o="navigate";else if(f(n,"popovertarget")){if(!Xr(n)?.matches(":popover-open"))return;i=n.closest(Ur)?"HelpText":"Popover",o="open"}else if(n.nodeName.endsWith("SUMMARY")){if(!n.parentElement.open)return;i="Details",o="open"}else if(f(n,"data-command")==="toggle-app-expanded"){const r=Qr(n,"--mtds-tooltip-position")==="none";i="Sidebar",o=r?"expand":"minimize",s=r&&f(n,"data-tooltip")||Lt(n)}else if(n.closest(Br))i="Breadcrumbs",o="navigate";else if(n.closest(Vr))i="Pagintation",o="navigate";else if(n.closest(zr))i="Card",o=n instanceof HTMLAnchorElement?"navigate":"click";else if(n.closest(Fr))i="Chip",o=n.hasAttribute("data-removable")?"remove":"click";else if(n.closest("th[aria-sort]"))i="Table",o="sort";else if(n instanceof HTMLAnchorElement)i="Link",o=n.protocol==="mailto:"?"email":"navigate",n.hasAttribute("download")?o="download":n.hash&&n.href.startsWith(location.href.split("#")[0])&&(o="anchor");else if(n.hasAttribute("aria-expanded")){if(f(n,"aria-expanded")!=="true")return;i="Expand",o="open"}fi("event",{category:f(n,"data-analytics-category")??i,action:f(n,"data-analytics-action")??o,name:f(n,"data-analytics-name")??s})}const Lt=t=>t?.textContent?.trim()||"",pi=t=>t&&f(t,"aria-label")||"",Xr=t=>document.getElementById(f(t,"popovertarget")||""),Qr=(t,e)=>window.getComputedStyle(t).getPropertyValue(e)?.trim(),Jr=t=>{const e=Lt(t),n=Lt(t.querySelector("h1,h2,h3,h4,h5,h6"));return e.startsWith(n)&&n||e.slice(0,100).trim()};F(()=>L(document,Wr,Yr,z)),typeof window<"u"&&window.CSSStyleSheet&&document.adoptedStyleSheets&&(()=>{const t="--mtds-app-expanded",e=new CSSStyleSheet,n=()=>!window.localStorage.getItem(t)?.includes("false");document.adoptedStyleSheets.push(e),window.mtdsToggleAppExpanded=o=>{try{const i=o??!n();e.replaceSync?.(`:root { ${t}: var(${t}--${i})}`),window.localStorage.setItem(t,i)}catch{}},window.mtdsToggleAppExpanded(n())})();const mi=T.app.split(" ")[0],Zr=T.sticky.split(" ")[0],ta='[data-command="toggle-app-expanded"]',ze=`.${mi} > dialog,.${mi} dialog ~ main`,hi=t=>{document.startViewTransition?document.startViewTransition(t):t()},bi=t=>hi(()=>window.mtdsToggleAppExpanded?.(t));function ea({target:t,defaultPrevented:e}){const n=t?.closest?.("a");if(n?.closest("dialog")&&n?.closest(ze))return gi();if(e||!(t instanceof HTMLButtonElement)||!t.matches(ta))return;getComputedStyle(t).position==="sticky"?bi():hi(()=>{const i=document.querySelector(ze);i?.setAttribute("data-closedby","any"),i?.showModal()})}function gi(){document.querySelector(ze)?.close()}let Fe=0,St,et=0,R,Ue=0,se=0,Ve=!1,qe=0,pt=0;function na([t]){R=t,vi()}function vi(){if(!R?.isConnected)return;const t=window.scrollY,e=t<pt;pt=t,e!==St&&(Fe=(R.parentElement?.getBoundingClientRect().top||0)+pt,St=e,Ue=R.offsetHeight,se=R.getBoundingClientRect().top+pt,Ve=R.offsetHeight<=window.innerHeight,qe=window.innerHeight),!(et===-1&&Ve)&&(et!==-1&&(Ve||St&&pt<=se)?(R.style.setProperty("--pos","sticky"),R.style.setProperty("--top","0px"),et=-1):et===-1&&!St?(R.style.setProperty("--pos","relative"),R.style.setProperty("--top",`${Math.max(0,pt-Fe)}px`),et=0):et!==1&&!St&&pt+qe>=se+Ue?(R.style.setProperty("--pos","sticky"),R.style.setProperty("--top",`${qe-Ue}px`),et=1):et===1&&St&&(R.style.setProperty("--pos","relative"),R.style.setProperty("--top",`${se-Fe}px`),et=0))}F(()=>{Et(document.documentElement,Zr,na),L(document,"click",ea,z),L(window,"resize",Pr(gi,100),z),L(window,"scroll",vi,z)});const oa=(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),r=Array.from({length:s+1-i},(a,c)=>c+i);return n>4&&i>1&&r.splice(0,2,1,0),n>3&&s<e&&r.splice(-2,2,0,e),r},ia=({current:t=1,total:e=10,show:n=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:oa(t,e,n).map((o,i)=>({current:o===t&&"page",key:`key-${o}-${i}`,page:o}))});function _i(t){var e,n,o="";if(typeof t=="string"||typeof t=="number")o+=t;else if(typeof t=="object")if(Array.isArray(t)){var i=t.length;for(e=0;e<i;e++)t[e]&&(n=_i(t[e]))&&(o&&(o+=" "),o+=n)}else for(n in t)t[n]&&(o&&(o+=" "),o+=n);return o}function sa(){for(var t,e,n=0,o="",i=arguments.length;n<i;n++)(t=arguments[n])&&(e=_i(t))&&(o&&(o+=" "),o+=e);return o}function ra(t,e={}){const n=document.getElementById(e.id||"")||document.createElement("dialog");return f(n,"aria-busy",e.busy?"true":null),f(n,"class",sa(T.toast,e.className)),f(n,"data-closedby",e.closedby||null),f(n,"data-color",e.color||null),f(n,"data-icon",`${e.icon??""}`||null),f(n,"data-timeout",`${e.timeout??""}`||null),f(n,"id",e.id||`${Date.now()}`),f(n,"open",e.open===!1?null:""),n.innerHTML=t,n.addEventListener("animationend",aa,{once:!0}),document.body.appendChild(n),n.id}function aa({animationName:t,target:e}){t===T._toastClose&&e.remove()}const la=T.breadcrumbs.split(" ")[0];function ca(t){for(const e of t)e.querySelectorAll("li a").forEach((n,o,{length:i})=>{f(n,"aria-current",o===i-1?"page":null)})}F(()=>Et(document.documentElement,la,ca));const da=`:host(:not([hidden])) {
19
+ display: block;
20
+ --mtdsc-chart-aspect: 16 / 9;
21
+ --mtdsc-chart-axis-border: var(--ds-border-width-default) solid
22
+ var(--ds-color-border-subtle);
23
+ --mtdsc-chart-axis-gap: var(--ds-size-2);
24
+ --mtdsc-chart-border-color: var(--ds-color-border-default);
25
+ --mtdsc-chart-color-text: var(--ds-color-text-default);
26
+ --mtdsc-chart-color: var(--ds-color-surface-tinted);
27
+ --mtdsc-chart-color-1: #b4cea0;
28
+ --mtdsc-chart-color-2: #68b096;
29
+ --mtdsc-chart-color-3: #cde5f2;
30
+ --mtdsc-chart-border-color-1: var(--ds-color-success-border-subtle);
31
+ --mtdsc-chart-border-color-2: var(--ds-color-info-border-subtle);
32
+ --mtdsc-chart-border-color-3: var(--ds-color-warning-border-subtle);
33
+ }
34
+
35
+ :host([data-variant="doughnut"]) {
36
+ --mtdsc-chart-aspect: 1 / 1;
37
+ }
38
+
39
+ .doughnut {
40
+ overflow: visible;
41
+ height: 100%;
42
+ width: 100%;
43
+ }
44
+ .doughnut > path {
45
+ cursor: pointer;
46
+ fill: var(--mtdsc-chart-color);
47
+ outline: none;
48
+ stroke-width: var(--ds-border-width-default);
49
+ /* stroke: var(--ds-color-border-default); */
50
+ transform-origin: center;
51
+ transition: scale 0.2s;
52
+ vector-effect: non-scaling-stroke;
53
+ }
54
+ .doughnut > path:focus-visible,
55
+ .doughnut > path:hover {
56
+ scale: 1.05;
57
+ }
58
+
59
+ .color-1 {
60
+ --mtdsc-chart-color: var(--mtdsc-chart-color-1);
61
+ --mtdsc-chart-border-color: var(--mtdsc-chart-border-color-1);
62
+ }
63
+ .color-2 {
64
+ --mtdsc-chart-color: var(--mtdsc-chart-color-2);
65
+ --mtdsc-chart-border-color: var(--mtdsc-chart-border-color-2);
66
+ }
67
+ .color-3 {
68
+ --mtdsc-chart-color: var(--mtdsc-chart-color-3);
69
+ --mtdsc-chart-border-color: var(--mtdsc-chart-border-color-3);
70
+ }
71
+
72
+ .axis {
73
+ aspect-ratio: var(--mtdsc-chart-aspect);
74
+ display: grid;
75
+ gap: calc(var(--mtdsc-chart-axis-gap) / 2);
76
+ grid-template-columns: fit-content(7em) 1fr;
77
+ grid-template-rows: 1fr auto;
78
+ grid-template-areas:
79
+ "y-axis chart"
80
+ "y-axis x-axis";
81
+ }
82
+ .axisSteps,
83
+ .axisStep,
84
+ .axisGroups,
85
+ .axisGroup {
86
+ box-sizing: border-box;
87
+ display: grid;
88
+ position: relative; /* Help .lineContainer positioning */
89
+ }
90
+
91
+ .is-horizontal .axisGroups {
92
+ column-gap: var(--mtdsc-chart-axis-gap);
93
+ grid-column: chart;
94
+ grid-row: chart / x-axis;
95
+ grid-template-rows: subgrid;
96
+ padding-inline: var(--mtdsc-chart-axis-gap);
97
+ text-align: center;
98
+ }
99
+ .is-horizontal .axisGroup {
100
+ grid-row: chart / x-axis;
101
+ grid-template-rows: inherit;
102
+ }
103
+ .is-horizontal .axisSteps {
104
+ grid-auto-rows: 1fr;
105
+ grid-column: y-axis / chart;
106
+ grid-row: chart;
107
+ grid-template-columns: subgrid;
108
+ grid-template-rows: 1px;
109
+ }
110
+ .is-horizontal .axisStep {
111
+ align-content: flex-end;
112
+ grid-column: inherit;
113
+ grid-template-columns: inherit;
114
+ text-align: right;
115
+ }
116
+ .is-horizontal .axisStep::after {
117
+ content: "";
118
+ border-bottom: var(--mtdsc-chart-axis-border);
119
+ }
120
+ .is-horizontal .axisStep .axisLabel {
121
+ transform: translateY(50%);
122
+ }
123
+
124
+ .is-vertical .axisSteps,
125
+ .is-vertical .axisGroup {
126
+ direction: rtl; /* Reverse orders */
127
+ }
128
+ .is-vertical .axisSteps > *,
129
+ .is-vertical .axisGroup > * {
130
+ direction: ltr;
131
+ }
132
+ .is-vertical .axisGroups {
133
+ grid-column: y-axis / chart;
134
+ grid-row: chart;
135
+ grid-template-columns: subgrid;
136
+ padding-block: var(--mtdsc-chart-axis-gap);
137
+ row-gap: var(--mtdsc-chart-axis-gap);
138
+ text-align: right;
139
+ }
140
+ .is-vertical .axisGroups .axisLabel {
141
+ align-self: center; /* Since text-align does not work vertically */
142
+ }
143
+ .is-vertical .axisGroup {
144
+ grid-column: inherit;
145
+ grid-template-columns: inherit;
146
+ }
147
+ .is-vertical .axisSteps {
148
+ grid-auto-columns: 1fr;
149
+ grid-column: chart;
150
+ grid-row: chart / x-axis;
151
+ grid-template-columns: 1px;
152
+ grid-template-rows: subgrid;
153
+ }
154
+ .is-vertical .axisStep {
155
+ grid-row: inherit;
156
+ grid-template-rows: inherit;
157
+ justify-content: flex-start;
158
+ text-align: center;
159
+ }
160
+ .is-vertical .axisStep::before {
161
+ content: "";
162
+ border-left: var(--mtdsc-chart-axis-border);
163
+ }
164
+ .is-vertical .axisStep .axisLabel {
165
+ transform: translateX(-50%);
166
+ }
167
+
168
+ .axisGroupContent {
169
+ display: flex;
170
+ /* gap: 1px; */
171
+ }
172
+ .is-horizontal.is-stacked .axisGroupContent {
173
+ flex-direction: column-reverse;
174
+ row-gap: 0px;
175
+ }
176
+ .is-vertical.is-stacked .axisGroupContent {
177
+ column-gap: 0px;
178
+ }
179
+ .is-vertical:not(.is-stacked) .axisGroupContent {
180
+ flex-direction: column;
181
+ }
182
+
183
+ .bar {
184
+ --size: calc(var(--value) / var(--total, 1) * 100%);
185
+ background: var(--mtdsc-chart-color);
186
+ /* border: 1px solid var(--mtdsc-chart-border-color); */
187
+ box-sizing: border-box;
188
+ color: var(--mtdsc-chart-color-text);
189
+ padding: var(--ds-size-1);
190
+ position: relative; /* Place above .lineContainer */
191
+ }
192
+ .bar:hover,
193
+ .bar:focus-visible {
194
+ box-shadow: var(--dsc-focus-boxShadow);
195
+ outline: var(--dsc-focus-outline);
196
+ outline-offset: var(--ds-border-width-focus);
197
+ z-index: 2; /* z-index to place on top when outlined */
198
+ }
199
+
200
+ .is-horizontal .bar {
201
+ width: 100%;
202
+ height: var(--size);
203
+ align-self: flex-end;
204
+ grid-row: chart;
205
+ } /* grid-row is only used if placed directly in Chart.Axis */
206
+ .is-vertical .bar {
207
+ width: var(--size);
208
+ height: 100%;
209
+ grid-column: chart;
210
+ } /* grid-column is only used if placed directly in Chart.Axis */
211
+ .is-horizontal:not(.is-stacked) .axisGroup .bar + .bar {
212
+ /* margin-left: -1px; */
213
+ } /* Prevent double border - using margin to see border around bars */
214
+ .is-vertical:not(.is-stacked) .axisGroup .bar + .bar {
215
+ /* margin-top: -1px; */
216
+ } /* Prevent double border - using margin to see border around bars */
217
+ .is-horizontal.is-stacked .axisGroup .bar + .bar {
218
+ border-bottom: none;
219
+ } /* Prevent double border - using border to avoid affecting size */
220
+ .is-vertical.is-stacked .axisGroup .bar + .bar {
221
+ border-left: none;
222
+ } /* Prevent double border - using border to avoid affecting size */
223
+
224
+ .lineContainer {
225
+ align-items: flex-start;
226
+ display: flex;
227
+ justify-content: space-between;
228
+ pointer-events: none;
229
+ }
230
+ .lineContainer > svg,
231
+ .lineContainer {
232
+ position: absolute;
233
+ width: 100%;
234
+ height: 100%;
235
+ }
236
+ .lineContainer > svg:first-child {
237
+ z-index: 2;
238
+ }
239
+ .is-horizontal .lineContainer {
240
+ grid-row: chart;
241
+ }
242
+ .is-horizontal .lineContainer > svg {
243
+ overflow: clip visible;
244
+ }
245
+ .is-horizontal .lineContainer > div[role="listitem"] {
246
+ display: contents;
247
+ }
248
+ .is-horizontal .lineContainer .linePoint {
249
+ top: calc(100% - var(--value) / var(--total, 1) * 100%);
250
+ }
251
+ .is-vertical .lineContainer {
252
+ flex-direction: column;
253
+ grid-column: chart;
254
+ }
255
+ .is-vertical .lineContainer > svg {
256
+ overflow: visible clip;
257
+ }
258
+ .is-vertical .lineContainer .linePoint {
259
+ left: calc(var(--value) / var(--total, 1) * 100%);
260
+ }
261
+
262
+ .line,
263
+ .lineBorder,
264
+ .lineShade {
265
+ fill: none;
266
+ stroke: var(--mtdsc-chart-color);
267
+ stroke-linejoin: round;
268
+ stroke-linecap: round;
269
+ stroke-width: 3;
270
+ vector-effect: non-scaling-stroke;
271
+ }
272
+ .line.line {
273
+ /* fill: none; /* Use double selector as fill should always be drawn by .lineShade */
274
+ }
275
+ .lineBorder {
276
+ /* stroke-width: 5;
277
+ stroke: var(--mtdsc-chart-border-color); */
278
+ }
279
+ .lineShade {
280
+ stroke: none;
281
+ fill: var(--mtdsc-chart-color);
282
+ opacity: 0.15;
283
+ }
284
+ .linePoint {
285
+ --size: 0.625rem; /* 10px */
286
+ background-color: var(--mtdsc-chart-color);
287
+ border-radius: var(--ds-border-radius-full);
288
+ /* border: 1px solid var(--mtdsc-chart-border-color); */
289
+ box-sizing: border-box;
290
+ margin: calc(var(--size) / -2);
291
+ padding: 0;
292
+ pointer-events: all;
293
+ position: relative;
294
+ transition: scale 0.2s;
295
+ width: var(--size);
296
+ height: var(--size);
297
+ z-index: 2;
298
+ }
299
+ .linePoint[hidden] {
300
+ display: block;
301
+ visibility: hidden;
302
+ } /* All dots need to render to make parent display: flex work, so instead hide visibility */
303
+ .linePoint:focus-visible,
304
+ .linePoint:hover {
305
+ scale: 1.3;
306
+ }
307
+ .linePoint::before {
308
+ content: "";
309
+ inset: calc(var(--ds-size-2) * -1); /* Increase click surface */
310
+ position: absolute;
311
+ }
312
+
313
+ .legends {
314
+ align-items: center;
315
+ display: flex;
316
+ flex-wrap: wrap;
317
+ gap: var(--ds-size-6);
318
+ justify-content: center;
319
+ margin-top: var(--ds-size-6);
320
+ }
321
+
322
+ .legend {
323
+ display: flex;
324
+ align-items: center;
325
+ gap: var(--ds-size-2);
326
+ }
327
+ .legend::before {
328
+ background-color: var(--mtdsc-chart-color);
329
+ border-radius: var(--ds-border-radius-full);
330
+ /* border: 1px solid var(--mtdsc-chart-border-color); */
331
+ box-sizing: border-box;
332
+ content: "";
333
+ display: inline-block;
334
+ vertical-align: middle;
335
+ width: var(--ds-size-6);
336
+ height: var(--ds-size-6);
337
+ }
338
+ `,ua=typeof HTMLElement>"u"?class{}:HTMLElement,re="http://www.w3.org/2000/svg";class fa extends ua{constructor(){super(),this.attachShadow({mode:"open"})}connectedCallback(){let e=0,n=0;const o=this.querySelector("table"),i=Array.from(o?.rows||[],(g,b)=>{let _=0;const h=Array.from(g.cells,(w,C)=>{const $=w.textContent.trim()||"",k=Number($)||0;return b&&C&&(e=Math.max(e,k),_+=k),$});return n=Math.max(n,_),h}),[s,r]=(f(this,"data-variant")||"bar").split("-"),a=s==="column",c=r==="stacked",l=Number(r||10)||0,u=M("style",{},da),d=M("div",{"aria-label":i[0][0]||null,class:"axis",role:"figure"}),m=M("div",{class:"axisGroups"}),p=ba(c?n:e),y=M("div",{class:"legends"}),v=i.slice(1).map(([g],b)=>M("div",{class:`legend color-${b+1}`},g)),E=v.map(kt);if(d.classList.toggle("is-horizontal",!a),d.classList.toggle("is-vertical",a),d.classList.toggle("is-stacked",c),d.style.setProperty("--groups",`${i.length-1}`),d.style.setProperty("--total",`${p.total}`),d.append(p.el,m),(s==="bar"||s==="column")&&i[0].forEach((g,b)=>{if(b===0)return;const _=M("div",{class:"axisGroup"}),h=M("div",{class:"axisGroupContent"}),w=M("div",{class:"axisLabel"},g);_.append(h,w),m.append(_),i.slice(1).forEach((C,$)=>{h.append(M("div",{"aria-describedby":E[$],class:`bar color-${$+1}`,role:"img",style:`--value: ${C[b]}`,tabindex:"0",title:`${C[0]}: ${C[b]}`}))})}),s==="line"||s==="area"){const g=M("div",{class:"axisGroup"});i.slice(1).forEach(([b,..._],h)=>{const w=M("div",{class:`lineContainer color-${h+1}`,role:"list"}),C=document.createElementNS(re,"svg");f(C,"aria-hidden","true"),f(C,"preserveAspectRatio","none"),f(C,"viewBox","0 0 100 100");const $=pa(_.map((A,V,{length:U})=>[100/(U-1)*V,100-Number(A)/p.total*100]),l/100),k=document.createElementNS(re,"path");f(k,"class","line"),f(k,"d",$),f(k,"fill","none"),f(k,"stroke","currentColor");const I=k.cloneNode(!0);if(f(I,"class","lineBorder"),s==="area"){const A=k.cloneNode(!0);f(A,"d",`M-100,100 L${$.slice(1)}L200,100`),f(A,"class","lineShade"),C.append(A)}_.forEach((A,V)=>{const U=M("div",{role:"listitem"});U.appendChild(M("div",{"aria-describedby":E[h],tabindex:"0",title:`${i[0][V+1]}: ${A} (${b})`,class:"linePoint",role:"img",style:`--value: ${A}`})),w.append(U)}),C.append(I,k),w.append(C),g.append(w)}),m.append(g)}if(s==="doughnut"){const g=document.createElementNS(re,"svg"),b=i.slice(1).reduce((C,[,$])=>C+Number($),0);f(g,"class","doughnut"),f(g,"viewBox","0 0 100 100");let _=0;const h=50,w=25;i.slice(1).forEach(([C,$],k)=>{const I=document.createElementNS(re,"path"),A=_/b;_+=Number($);const V=_/b,U=V-A>.5?1:0,at=2*Math.PI*(A-.25),J=2*Math.PI*(V-.25),ht=Math.cos(at),ot=Math.sin(at),Z=Math.cos(J),D=Math.sin(J),tt=`M ${h+w*ht} ${h+w*ot} L ${h+h*ht} ${h+h*ot} A ${h} ${h} 0 ${U} 1 ${h+h*Z} ${h+h*D} L ${h+w*Z} ${h+w*D} A ${w} ${w} 0 ${U} 0 ${h+w*ht} ${h+w*ot}`;f(I,"aria-describedby",E[k]),f(I,"class",`color-${k+1}`),f(I,"d",tt),f(I,"role","img"),f(I,"tabindex","0"),f(I,"title",C||null),g.appendChild(I),this.shadowRoot?.append(g)})}s!=="doughnut"&&this.shadowRoot?.append(d),y.append(...v),this.shadowRoot?.append(u,y)}}xt&&!window.customElements.get("mtds-chart")&&window.customElements.define("mtds-chart",fa);const pa=(t,e)=>t.map(([n,o],i,s)=>i?ma(i,s,e):`M${n},${o}`).join(" "),wi=([t,e],[n,o])=>[t+n,e+o],yi=([t,e],[n,o])=>[t-n,e-o],xi=(t,[e,n])=>[t*e,t*n],ma=(t,e,n)=>{const o=e[t-1],i=e[t],[s,r]=wi(o,xi(n,yi(i,e[t-2]||o))),[a,c]=wi(i,xi(n,yi(o,e[t+1]||i)));return`C ${s},${r} ${a},${c} ${i[0]},${i[1]}`},ha=new Intl.NumberFormat().format,ba=t=>{const e=10**(`${~~t}`.length-1),n=t/e<5?e/2:e,o=Math.ceil(t/n)*n,i=M("div");return i.classList.add("axisSteps"),i.append(...Array.from({length:o/n+1},(s,r)=>ha(n*r)).reverse().map(s=>{const r=M("div",{class:"axisLabel"},s),a=M("div",{class:"axisStep"});return a.append(r),a})),{total:o,el:i}},M=(t,e,n)=>{const o=document.createElement(t);if(n&&(o.textContent=n),e)for(const[i,s]of Object.entries(e))f(o,i,s);return o},ga=T.dialog.split(" ")[0],va=xt?document.getElementsByClassName(ga):[],_a=()=>{for(const t of va)t.isConnected&&t.showModal&&t.close&&(t.matches('[open]:not([data-modal="false"]):not(:modal)')?(f(t,"open",null),t.showModal()):t.matches(":modal:not([open])")&&(f(t,"open",""),t.close()))},wa=({clientX:t,clientY:e,target:n})=>{if(n instanceof HTMLDialogElement&&f(n,"data-closedby")==="any"){const{top:s,right:r,bottom:a,left:c}=n.getBoundingClientRect();if(!(s<=e&&e<=a&&c<=t&&t<=r))return n.close()}const o=n?.closest?.("dialog");o&&n?.closest?.('[data-command="close"]')&&o.close()};F(()=>{L(document,"click",wa,z),ui(_a).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function ya(t){if(t.animationName!==T._errorsummary)return;const e=t.target?.firstElementChild;e instanceof HTMLHeadingElement&&(f(e,"tabindex","-1"),e.focus())}F(()=>L(document,"animationend",ya,z));var xa=Object.defineProperty,Ei=Object.getOwnPropertySymbols,Ea=Object.prototype.hasOwnProperty,Sa=Object.prototype.propertyIsEnumerable,Si=(t,e,n)=>e in t?xa(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Ca=(t,e)=>{for(var n in e||(e={}))Ea.call(e,n)&&Si(t,n,e[n]);if(Ei)for(var n of Ei(e))Sa.call(e,n)&&Si(t,n,e[n]);return t},It=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",ae=It&&/android/i.test(navigator.userAgent),We=It&&/iPad|iPhone|iPod/.test(navigator.userAgent),Ci;It&&/^Mac/i.test(((Ci=navigator.userAgentData)==null?void 0:Ci.platform)||navigator.platform);var Ta=`${ae?"data":"aria"}-labelledby`,$a=":host(:not([hidden])) { display: block }",ka="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",Ti=typeof HTMLElement>"u"?class{}:HTMLElement;function S(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 $i=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Mt=(t,...e)=>$i("add",t,e),le=(t,...e)=>$i("remove",t,e),Aa=(t,e)=>t.shadowRoot||t.attachShadow({mode:"open"}).append(Ye("slot"),Ye("style",e)),ce=new WeakMap,Ge=(t,e)=>{if(e===void 0)return ce.get(t);try{ce.get(t).disconnect(),ce.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),ce.set(t,n)}},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},La=0,je=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++La).toString(32)}`),t.id):"",Ye=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},Ai={define:(t,e)=>!It||window.customElements.get(t)||window.customElements.define(t,e)},mt,Ia=0,Li=t=>{mt||(mt=Ye("div"),mt.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",S(mt,"aria-live","assertive")),mt.isConnected||document.body.append(mt),t&&(mt.textContent=`${t}${Ia++%2?" ":""}`)},Ma=(t,e,n="")=>{var o,i;const s={bubbles:!0,composed:!0,data:e,inputType:n},r=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(o=Object.getOwnPropertyDescriptor(r,"value"))==null?void 0:o.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},Ke=!1,Xe=t=>(t?.type==="mouseup"&&(Ke=!1),t?.type==="mousedown"&&(Ke=!0,Mt(document,"mouseup",Xe,{once:!0})),Ke),Qe="disabled",Ot="selected",Oa=class extends Ti{static get observedAttributes(){return[Qe,Ot]}connectedCallback(){We||(this.tabIndex=-1),this.hasAttribute("role")||S(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){S(this,"aria-disabled",`${this.disabled}`),S(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[Ot]}set defaultSelected(t){this[Ot]=t}get disabled(){return S(this,Qe)!==null}set disabled(t){S(this,Qe,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=S(this,"label"))!=null?t:this.text}set label(t){S(this,"label",t)}get selected(){return S(this,Ot)!==null}set selected(t){S(this,Ot,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=S(this,"value"))!=null?t:this.text}set value(t){S(this,"value",t)}};Ai.define("u-option",Oa);var Ra=`${$a}
19
339
  ::slotted(u-option) { display: block; cursor: pointer }
20
- ::slotted(u-option:focus) { ${qr} }
340
+ ::slotted(u-option:focus) { ${ka} }
21
341
  ::slotted(u-option[aria-hidden="true"]),
22
342
  ::slotted(u-option[disabled]),
23
- ::slotted(u-option[hidden]) { display: none !important }`,oi,ii=0,Gr=Ue||ie,si="click,focusout,input,keydown,mousedown,mouseup",ri="focus,focusin,blur,focusout",ae={singular:"%d hit",plural:"%d hits"},ai=class extends Jo{constructor(){super(),this._texts=Fr({},ae),this._value="",Wr(this,Xr)}static get observedAttributes(){return["id",...Object.keys(ae).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=ti(this),x(this,"role","listbox"),x(this,"tabindex","-1"),Tt(this._root,"focusin",this),Tt(this._root,"focus",this,!0),Ve(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){se(this._root||this,"focus",this,!0),se(this._root||this,"focusin",this),Ve(this,!1),Ye(this),this._root=void 0}attributeChangedCallback(t,e,n){const o=t?.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(ae[o])this._texts[o]=n||ae[o];else if(this._root){this._input&&Xe(this,this._input);for(const s of this._root.querySelectorAll(i))Xe(this,s)}}handleEvent(t){const{target:e,type:n}=t;t.defaultPrevented||(n==="click"&&Zr(this,t),(n==="focus"||n==="focusin")&&Qr(this,t),(n==="blur"||n==="focusout")&&Jr(this,t),n==="keydown"&&ta(this,t),n==="mousedown"&&this.contains(e)&&je(t),(n==="mutation"||n==="input")&&(clearTimeout(ii),ii=setTimeout(di,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},li=t=>t?.disabled||t?.readOnly||!1,$t=(t,e)=>{var n,o,i;if(t.hidden!==e)return;t.hidden=li(t?._input)||!e,(n=Ve(t))==null||n.takeRecords();const s=t.isConnected&&t.popover&&((o=t._input)==null?void 0:o.isConnected)&&((i=t._input)==null?void 0:i.popoverTargetElement)===t;t._input&&Xe(t,t._input,e),s&&x(t,"popover","manual"),s&&t.togglePopover(e),e&&di(t)},Ye=t=>{t._input&&(se(t._input||t,ri,t),se(t._root||t,si,t),$t(t,!1),t._input=void 0)},Xe=(t,e,n=!1)=>{t.popover&&x(e,"popovertarget",qe(t)),Tt(e,ri,t,!0),x(e,"aria-autocomplete","list"),x(e,"aria-controls",qe(t)),x(e,"aria-expanded",`${!Gr||n}`),x(e,"autocomplete","off"),x(e,"role",li(e)?null:"combobox")},Qr=(t,e)=>{var n;const o=e.target instanceof HTMLInputElement;o&&e.isTrusted&&e.stopImmediatePropagation(),t._input!==e.target&&o&&e.target.list===t&&(t._input&&Ye(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),x(t,Ur,qe((n=t._input.labels)==null?void 0:n[0])),Tt(t._root||t,si,t),$t(t,x(t._input,"inputmode")!=="none"),ni())},Jr=(t,e)=>{!ie&&!je()&&t._input&&setTimeout(ci,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},ci=t=>{var e;const n=((e=t._root)==null?void 0:e.activeElement)||null,o=t._input;o&&o!==n&&!t.contains(n)&&(o.dispatchEvent(new FocusEvent("blur",{relatedTarget:n})),o.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:n})),Ye(t))},Zr=(t,{target:e})=>{var n;if(!t._input||t._input===e)return $t(t,!0);for(const o of t.options)if(o.contains(e))return x(t,"aria-multiselectable")!=="true"&&((n=t._input)==null||n.focus(),$t(t,!1)),Kr(t._input,o.value);ie&&ci(t)},ta=(t,e)=>{var n;const{key:o,target:i,altKey:s,ctrlKey:r,shiftKey:a,metaKey:c}=e,l=o==="Escape"||o==="Esc";if(s||r||c||a||o==="Tab")return;l&&!t.hidden&&e?.preventDefault(),$t(t,!l);const d=[...t.options].filter(f=>x(f,"aria-hidden")!=="true"&&f.offsetHeight),u=d.indexOf(i);let p=-1;if(o==="ArrowDown"&&(p=(u+1)%d.length),o==="ArrowUp"&&(p=(~u?u:d.length)-1),~u&&((o==="Home"||o==="PageUp")&&(p=0),(o==="End"||o==="PageDown")&&(p=d.length-1),o==="Enter"))return d[u].click(),e.preventDefault();if(d[p])for(const f of d)f.tabIndex=-1;d[p]&&e.preventDefault(),(n=d[p]||t._input)==null||n.focus(),!d[p]&&o==="ArrowUp"&&setTimeout(()=>{var f;return(f=t._input)==null?void 0:f.setSelectionRange(999,999)})},di=(t,e)=>{const{_texts:n,_root:o,_input:i,options:s}=t,r=i?.value.toLowerCase().trim()||"",a=!t.hasAttribute("data-nofilter"),c=[],l=[];for(const u of s)(u.disabled||u.hidden||a&&!u.label.toLowerCase().includes(r)?c:l).push(u);for(const u of c)x(u,"aria-hidden","true");for(const u of l)x(u,"aria-hidden","false");const d=l.length;clearTimeout(oi),e?.type==="input"&&r!==t._value&&(oi=setTimeout(()=>{const u=`${!d&&t.innerText.trim()||`${n[d===1?"singular":"plural"]}`.replace("%d",`${d}`)}`;!t.hidden&&o?.activeElement===i&&ni(u),t._value=r},1e3)),Ue&&l.map((u,p)=>x(u,"title",`${p+1}/${d}`))};St&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return ti(this).getElementById(x(this,"list")||"")}}),ei.define("u-datalist",ai);const Ge=T.field.split(" ")[0],ui=T.validation.split(" "),ea=ui[0],B=(t,e)=>t.getPropertyValue(`--mtds-text-${e}`)?.slice(1,-1)||"";function fi(t,e){for(const n of t)if(n.isConnected){const o=[],i=[],s=[];let r=null,a=null,c=!0;for(const l of n.getElementsByTagName("*"))l instanceof HTMLLabelElement?o.push(l):l instanceof me?r=l:Re(l)&&!l.hidden?a=l:l.hasAttribute("data-description")?i.push(l):l.classList.contains(ea)?(c=m(l,"data-color")==="success"||!l.clientHeight,s.push(l),i.unshift(l)):l instanceof HTMLParagraphElement&&(i.some(d=>d.contains(l))||i.push(l));if(a){for(const l of o)l.htmlFor=ne(a);if(e&&m(n,"data-validation")==="form"){c=a.matches(":valid");for(const l of s)m(l,"hidden",c?"":null)}na(r),mi(a),pi(a),m(a,"aria-describedby",i.map(ne).join(" ")||null),m(a,"aria-invalid",`${!c}`)}}}function pi(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function na(t){const{control:e,list:n}=t||{};if(t&&n&&!t.hasAttribute("data-sr-added")){const o=window.getComputedStyle(t);m(t,"data-sr-added",B(o,"combobox-added")),m(t,"data-sr-empty",B(o,"combobox-empty")),m(t,"data-sr-found",B(o,"combobox-found")),m(t,"data-sr-invalid",B(o,"combobox-invalid")),m(t,"data-sr-of",B(o,"combobox-of")),m(t,"data-sr-remove",B(o,"combobox-remove")),m(t,"data-sr-removed",B(o,"combobox-removed")),m(n,"data-sr-plural",B(o,"datalist-plural")),m(n,"data-sr-singular",B(o,"datalist-singular"))}n&&e&&!n.hasAttribute("popover")&&(m(n,"popover","manual"),m(e,"popovertarget",ne(n)))}function mi(t){const e=t?.nextElementSibling,n=e&&m(e,"data-count");if(e&&n){const o=Number(n)-t.value.length,i=o<0,s=m(e,"aria-live")==="polite",r=window.getComputedStyle(e||t),a=B(r,"count-over"),c=B(r,"count-under");if(s!==i){m(e,"aria-live",i?"polite":"off");for(const l of ui)e.classList.toggle(l,i)}e.textContent=(i?a:c).replace("%d",`${Math.abs(o)}`)}}function oa(t){if(t.target instanceof ai){const e=t.target,o=e.getRootNode()?.querySelector(`[popovertarget="${e.id}"]`);t.newState==="closed"?ot(e,!1):o&&ot(e,o,{placement:m(e,"data-position")??"bottom",middleware:[Ie(),Le(),Bo({padding:10,apply({availableHeight:i}){e.style.width=`${o.offsetWidth}px`,e.style.maxHeight=`${Math.max(50,i)}px`}})]})}}function ia(t){Re(t.target)&&(mi(t.target),pi(t.target))}function sa(t){const e=t.target?.closest?.(`.${Ge}`);t.type==="invalid"&&e&&t.preventDefault(),fi(document.getElementsByClassName(Ge),!0)}R(()=>{gt(document.documentElement,Ge,fi),C(document,"input",ia,M),C(document,"invalid,submit",sa,!0),C(document,"toggle",oa,M)});const ra=T.fieldset.split(" ")[0],aa=T.validation.split(" ")[0],hi="aria-describedby",la="aria-invalid";function ca(t){setTimeout(()=>{for(const e of t)if(e.isConnected){const n=[];let o=null,i=!0;for(const s of e.getElementsByTagName("*"))s.classList.contains(aa)?(i=m(s,"data-color")==="success"||!s.clientHeight,o=ne(s)):Re(s)&&n.push(s);for(const s of n){const r=m(s,hi)?.replace(o||"#","");m(s,hi,`${o||""} ${r||""}`.trim()),m(s,la,`${!i}`)}}})}R(()=>gt(document.documentElement,ra,ca));const da=T.logo.split(" ")[0];function ua([t]){if(t?.isConnected&&t?.firstElementChild instanceof SVGSVGElement){for(const a of document.head.querySelectorAll("link[rel~='icon']"))a.setAttribute("rel","disabled");const e=t.firstElementChild,n=t?.hasAttribute("data-env"),o=window.getComputedStyle(e),i=o.getPropertyValue("color"),s=o.getPropertyValue("--mtds-logo-color"),r=e.outerHTML.replace(/\n+/g," ").replace(/(fill|width|height|xmlns)="[^"]+"/gi,"").replace("<svg",`<svg width="40" height="40" fill="${i}"`);document.head.appendChild(Object.assign(document.createElement("link"),{href:`data:image/svg+xml,${encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 55 55'><rect fill='${n?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${n?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${r}</g></svg>`)}`,rel:"icon"}))}}R(()=>gt(document.documentElement,da,ua));const gi=T.popover.split(" ")[0];let bi=0;function fa({target:t,newState:e}){if(t instanceof HTMLElement&&t.classList.contains(gi)){const n=e==="closed",o=m(t,"data-overscroll")==="contain",i=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);bi+=n?-1:1,n?ot(t,!1):i&&ot(t,i,{placement:m(t,"data-position")||"bottom",middleware:[Ie(),Le({padding:10})].concat(o?Bo({padding:10,apply({availableHeight:s}){t.style.maxHeight=`${Math.max(50,s)}px`}}):[])})}}function pa({target:t}){const e=bi&&t?.closest?.("a,[popovertargetaction]");if(e){const n=m(e,"popovertargetaction")||"toggle",o=n==="show"||(n==="hide"?!1:void 0),s=(document.getElementById(m(e,"popovertarget")||"")||e).closest(`.${gi}`);s?.isConnected&&s?.togglePopover&&s.togglePopover(o)}}R(()=>{C(document,"toggle",fa,M),C(document,"click",pa)});const ma=T.table.split(" ")[0];function ha(t){for(const e of t){const n=Array.from(e.tHead?.rows[0]?.cells||[],o=>o.innerText.trim());for(const o of e.tBodies)for(const i of o.rows)for(const s of i.cells)m(s,"data-th",n[s.cellIndex]||":empty")}}R(()=>gt(document.documentElement,ma,ha));const ga=`.${T.togglegroup.split(" ")[0]}`;function ba(t){const{key:e,target:n}=t,o=n instanceof HTMLInputElement&&n.closest(ga);if(o&&(e==="Enter"&&n.click(),e?.startsWith("Arrow"))){t.preventDefault();const i=o.getElementsByTagName("input"),s=[...i].indexOf(n),r=e.match(/Arrow(Right|Down)/)?1:-1;i[(i.length+s+r)%i.length]?.focus()}}R(()=>C(document,"keydown",ba));const vi="aria-describedby",_i="Escape",le="aria-labelledby",va="--mtds-tooltip-position",_a=300,F=wt?document.getElementById("mtds-tooltip")||Object.assign(document.createElement("div"),{className:T._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let G=null,yi=Number.NEGATIVE_INFINITY,wi=0;function Qe({target:t,type:e,key:n}){if(e==="keydown"&&n!==_i)return;const o=yi+_a-Date.now();clearTimeout(wi),wi=setTimeout(ya,Math.max(o,0),n===_i?null:t)}function ya(t){if(yi=Date.now(),!F||t===F)return;F?.isConnected||document.body.append(F);let e=t?.closest?.("[data-tooltip]")||null;if(e===G)return;const n=e&&m(e,"data-tooltip")||"",o=e&&m(e,"data-tooltip-position")||window.getComputedStyle(e||document.body).getPropertyValue(va)?.trim()||"top";(!n||n==="false"||n==="true"||o==="none")&&(e=null),e&&(F.textContent=n);const s=G&&m(G,le)===F?.id,r=(e instanceof HTMLElement?e.innerText:e?.textContent)?.trim()||e?.hasAttribute(le)||e?.hasAttribute("aria-label");G?.removeAttribute(s?le:vi),ot(F,!1),G=e,G&&m(G,r?vi:le,F?.id),G?.isConnected&&F.hidePopover(),F.togglePopover(!!e),ot(F,e||!1,{placement:o,middleware:[Ie(),Le({padding:10})]})}R(()=>{C(document,"blur,focus,mouseout,mouseover",Qe,M),C(window,"keydown",Qe,M),C(window,"blur",Qe,M)});var Ei=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",xi;Ei&&/^Mac/i.test(((xi=navigator.userAgentData)==null?void 0:xi.platform)||navigator.platform);var wa=":host(:not([hidden])) { display: block }",Si=typeof HTMLElement>"u"?class{}:HTMLElement;function Q(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var Ti=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Ci=(t,...e)=>Ti("add",t,e),$i=(t,...e)=>Ti("remove",t,e),Ea=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},xa=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},Je=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))Q(o,i,s);return o},Ai={define:(t,e)=>!Ei||window.customElements.get(t)||window.customElements.define(t,e)},Sa=`${wa}
343
+ ::slotted(u-option[hidden]) { display: none !important }`,Ii,Mi=0,Pa=We||ae,Oi="click,focusout,input,keydown,mousedown,mouseup",Ri="focus,focusin,blur,focusout",de={singular:"%d hit",plural:"%d hits"},Pi=class extends Ti{constructor(){super(),this._texts=Ca({},de),this._value="",Aa(this,Ra)}static get observedAttributes(){return["id",...Object.keys(de).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=ki(this),S(this,"role","listbox"),S(this,"tabindex","-1"),Mt(this._root,"focusin",this),Mt(this._root,"focus",this,!0),Ge(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){le(this._root||this,"focus",this,!0),le(this._root||this,"focusin",this),Ge(this,!1),Je(this),this._root=void 0}attributeChangedCallback(t,e,n){const o=t?.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(de[o])this._texts[o]=n||de[o];else if(this._root){this._input&&Ze(this,this._input);for(const s of this._root.querySelectorAll(i))Ze(this,s)}}handleEvent(t){const{target:e,type:n}=t;t.defaultPrevented||(n==="click"&&Ha(this,t),(n==="focus"||n==="focusin")&&Da(this,t),(n==="blur"||n==="focusout")&&Na(this,t),n==="keydown"&&Ba(this,t),n==="mousedown"&&this.contains(e)&&Xe(t),(n==="mutation"||n==="input")&&(clearTimeout(Mi),Mi=setTimeout(Hi,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},Di=t=>t?.disabled||t?.readOnly||!1,Rt=(t,e)=>{var n,o,i;if(t.hidden!==e)return;t.hidden=Di(t?._input)||!e,(n=Ge(t))==null||n.takeRecords();const s=t.isConnected&&t.popover&&((o=t._input)==null?void 0:o.isConnected)&&((i=t._input)==null?void 0:i.popoverTargetElement)===t;t._input&&Ze(t,t._input,e),s&&S(t,"popover","manual"),s&&t.togglePopover(e),e&&Hi(t)},Je=t=>{t._input&&(le(t._input||t,Ri,t),le(t._root||t,Oi,t),Rt(t,!1),t._input=void 0)},Ze=(t,e,n=!1)=>{t.popover&&S(e,"popovertarget",je(t)),Mt(e,Ri,t,!0),S(e,"aria-autocomplete","list"),S(e,"aria-controls",je(t)),S(e,"aria-expanded",`${!Pa||n}`),S(e,"autocomplete","off"),S(e,"role",Di(e)?null:"combobox")},Da=(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&&Je(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),S(t,Ta,je((n=t._input.labels)==null?void 0:n[0])),Mt(t._root||t,Oi,t),Rt(t,S(t._input,"inputmode")!=="none"),Li())},Na=(t,e)=>{!ae&&!Xe()&&t._input&&setTimeout(Ni,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},Ni=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})),Je(t))},Ha=(t,{target:e})=>{var n;if(!t._input||t._input===e)return Rt(t,!0);for(const o of t.options)if(o.contains(e))return S(t,"aria-multiselectable")!=="true"&&((n=t._input)==null||n.focus(),Rt(t,!1)),Ma(t._input,o.value);ae&&Ni(t)},Ba=(t,e)=>{var n;const{key:o,target:i,altKey:s,ctrlKey:r,shiftKey:a,metaKey:c}=e,l=o==="Escape"||o==="Esc";if(s||r||c||a||o==="Tab")return;l&&!t.hidden&&e?.preventDefault(),Rt(t,!l);const u=[...t.options].filter(p=>S(p,"aria-hidden")!=="true"&&p.offsetHeight),d=u.indexOf(i);let m=-1;if(o==="ArrowDown"&&(m=(d+1)%u.length),o==="ArrowUp"&&(m=(~d?d:u.length)-1),~d&&((o==="Home"||o==="PageUp")&&(m=0),(o==="End"||o==="PageDown")&&(m=u.length-1),o==="Enter"))return u[d].click(),e.preventDefault();if(u[m])for(const p of u)p.tabIndex=-1;u[m]&&e.preventDefault(),(n=u[m]||t._input)==null||n.focus(),!u[m]&&o==="ArrowUp"&&setTimeout(()=>{var p;return(p=t._input)==null?void 0:p.setSelectionRange(999,999)})},Hi=(t,e)=>{const{_texts:n,_root:o,_input:i,options:s}=t,r=i?.value.toLowerCase().trim()||"",a=!t.hasAttribute("data-nofilter"),c=[],l=[];for(const d of s)(d.disabled||d.hidden||a&&!d.label.toLowerCase().includes(r)?c:l).push(d);for(const d of c)S(d,"aria-hidden","true");for(const d of l)S(d,"aria-hidden","false");const u=l.length;clearTimeout(Ii),e?.type==="input"&&r!==t._value&&(Ii=setTimeout(()=>{const d=`${!u&&t.innerText.trim()||`${n[u===1?"singular":"plural"]}`.replace("%d",`${u}`)}`;!t.hidden&&o?.activeElement===i&&Li(d),t._value=r},1e3)),We&&l.map((d,m)=>S(d,"title",`${m+1}/${u}`))};It&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return ki(this).getElementById(S(this,"list")||"")}}),Ai.define("u-datalist",Pi);const tn=T.field.split(" ")[0],Bi=T.validation.split(" "),za=Bi[0],j=(t,e)=>t.getPropertyValue(`--mtds-text-${e}`)?.slice(1,-1)||"";function zi(t,e){for(const n of t)if(n.isConnected){const o=[],i=[],s=[];let r=null,a=null,c=!0;for(const l of n.getElementsByTagName("*"))l instanceof HTMLLabelElement?o.push(l):l instanceof ve?r=l:He(l)&&!l.hidden?a=l:l.hasAttribute("data-description")?i.push(l):l.classList.contains(za)?(c=f(l,"data-color")==="success"||!l.clientHeight,s.push(l),i.unshift(l)):l instanceof HTMLParagraphElement&&(i.some(u=>u.contains(l))||i.push(l));if(a){for(const l of o)l.htmlFor=kt(a);if(e&&f(n,"data-validation")==="form"){c=a.matches(":valid");for(const l of s)f(l,"hidden",c?"":null)}Fa(r),Ui(a),Fi(a),f(a,"aria-describedby",i.map(kt).join(" ")||null),f(a,"aria-invalid",`${!c}`)}}}function Fi(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function Fa(t){const{control:e,list:n}=t||{};if(t&&n&&!t.hasAttribute("data-sr-added")){const o=window.getComputedStyle(t);f(t,"data-sr-added",j(o,"combobox-added")),f(t,"data-sr-empty",j(o,"combobox-empty")),f(t,"data-sr-found",j(o,"combobox-found")),f(t,"data-sr-invalid",j(o,"combobox-invalid")),f(t,"data-sr-of",j(o,"combobox-of")),f(t,"data-sr-remove",j(o,"combobox-remove")),f(t,"data-sr-removed",j(o,"combobox-removed")),f(n,"data-sr-plural",j(o,"datalist-plural")),f(n,"data-sr-singular",j(o,"datalist-singular"))}n&&e&&!n.hasAttribute("popover")&&(f(n,"popover","manual"),f(e,"popovertarget",kt(n)))}function Ui(t){const e=t?.nextElementSibling,n=e&&f(e,"data-count");if(e&&n){const o=Number(n)-t.value.length,i=o<0,s=f(e,"aria-live")==="polite",r=window.getComputedStyle(e||t),a=j(r,"count-over"),c=j(r,"count-under");if(s!==i){f(e,"aria-live",i?"polite":"off");for(const l of Bi)e.classList.toggle(l,i)}e.textContent=(i?a:c).replace("%d",`${Math.abs(o)}`)}}function Ua(t){if(t.target instanceof Pi){const e=t.target,o=e.getRootNode()?.querySelector(`[popovertarget="${e.id}"]`);t.newState==="closed"?ft(e,!1):o&&ft(e,o,{placement:f(e,"data-position")??"bottom",middleware:[Pe(),Re(),ci({padding:10,apply({availableHeight:i}){e.style.width=`${o.offsetWidth}px`,e.style.maxHeight=`${Math.max(50,i)}px`}})]})}}function Va(t){He(t.target)&&(Ui(t.target),Fi(t.target))}function qa(t){const e=t.target?.closest?.(`.${tn}`);t.type==="invalid"&&e&&t.preventDefault(),zi(document.getElementsByClassName(tn),!0)}F(()=>{Et(document.documentElement,tn,zi),L(document,"input",Va,z),L(document,"invalid,submit",qa,!0),L(document,"toggle",Ua,z)});const Wa=T.fieldset.split(" ")[0],Ga=T.validation.split(" ")[0],Vi="aria-describedby",ja="aria-invalid";function Ya(t){setTimeout(()=>{for(const e of t)if(e.isConnected){const n=[];let o=null,i=!0;for(const s of e.getElementsByTagName("*"))s.classList.contains(Ga)?(i=f(s,"data-color")==="success"||!s.clientHeight,o=kt(s)):He(s)&&n.push(s);for(const s of n){const r=f(s,Vi)?.replace(o||"#","");f(s,Vi,`${o||""} ${r||""}`.trim()),f(s,ja,`${!i}`)}}})}F(()=>Et(document.documentElement,Wa,Ya));const Ka=T.logo.split(" ")[0];function Xa([t]){if(t?.isConnected&&t?.firstElementChild instanceof SVGSVGElement){for(const a of document.head.querySelectorAll("link[rel~='icon']"))a.setAttribute("rel","disabled");const e=t.firstElementChild,n=t?.hasAttribute("data-env"),o=window.getComputedStyle(e),i=o.getPropertyValue("color"),s=o.getPropertyValue("--mtds-logo-color"),r=e.outerHTML.replace(/\n+/g," ").replace(/(fill|width|height|xmlns)="[^"]+"/gi,"").replace("<svg",`<svg width="40" height="40" fill="${i}"`);document.head.appendChild(Object.assign(document.createElement("link"),{href:`data:image/svg+xml,${encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 55 55'><rect fill='${n?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${n?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${r}</g></svg>`)}`,rel:"icon"}))}}F(()=>Et(document.documentElement,Ka,Xa));const en=T.popover.split(" ")[0],qi="_mtds-popover-auto";function Qa({target:t,newState:e}){if(t instanceof HTMLElement&&t.classList.contains(en)){const n=e==="closed",o=f(t,"data-overscroll")==="contain",i=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);n?ft(t,!1):i&&ft(t,i,{placement:f(t,"data-position")||"bottom",middleware:[Pe(),Re({padding:10})].concat(o?ci({padding:10,apply({availableHeight:s}){t.style.maxHeight=`${Math.max(50,s)}px`}}):[])})}}function Ja({target:t,newState:e}){e==="open"&&t instanceof HTMLElement&&t.classList.contains(en)&&f(t,"popover")!=="manual"&&(t.classList.add(qi),f(t,"popover","manual"))}function Za({target:t}){const e=t?.closest?.("a,[popovertargetaction]"),n=e&&f(e,"popovertarget"),o=n?document.getElementById(n):e?.closest(`.${en}`);for(const i of document.getElementsByClassName(qi))i.contains(t)||i.hidePopover();if(o&&e){const i=f(e,"popovertargetaction")||"toggle",s=i==="show"||(i==="hide"?!1:void 0);o instanceof HTMLElement&&o.isConnected&&o.togglePopover&&o.togglePopover(s)}}F(()=>{L(document,"click",Za),L(document,"toggle",Qa,z),L(document,"beforetoggle",Ja,z)});const tl=T.table.split(" ")[0],el='a,button,label,input,select,textarea,[role="button"]';function nl(t){for(const e of t){const n=Array.from(e.tHead?.rows[0]?.cells||[],o=>o.innerText.trim());for(const o of e.tBodies)for(const i of o.rows)for(const s of i.cells)f(s,"data-th",n[s.cellIndex]||":empty")}}function ol({target:t}){if(!(t instanceof Element))return;const n=t.closest("tr")?.querySelector('[data-command="row"]');n&&!t.closest(el)&&n.click?.()}F(()=>{Et(document.documentElement,tl,nl),L(document,"click",ol)});const Wi=T.toast.split(" ")[0],ue="data-sort";function il({animationName:t,target:e}){const n=e;if(t===T._toastTimeout&&n.close(),t!==T._toastOpen)return;const o=Number(f(n,"data-timeout"));n.style.setProperty("--mtdsc-toast-timeout",o?`${o}ms`:null),n.hasAttribute(ue)||f(n,ue,`${Date.now()}`),f(n,"tabindex","0"),[...document.querySelectorAll(`.${Wi}[open]`)].sort((i,s)=>Number(f(s,ue))-Number(f(i,ue))).reduce((i,s)=>(s.style.translate=`0 ${s===e?0:i}px`,i+s.offsetHeight+5),0)}function sl({target:t,clientX:e,clientY:n}){if(t instanceof HTMLDialogElement&&t.classList.contains(Wi)&&f(t,"data-closedby")!=="none"){const o=t.getBoundingClientRect(),i=window.getComputedStyle(t),s=window.getComputedStyle(t,"::after"),r=o.top+Number.parseInt(i.paddingTop,10),a=r+Number.parseInt(s.height,10),c=o.right-Number.parseInt(i.paddingRight,10),l=c-Number.parseInt(s.width,10);r<=n&&n<=a&&l<=e&&e<=c&&t.close()}}F(()=>{L(document,"animationstart",il),L(document,"click",sl)});const rl=`.${T.togglegroup.split(" ")[0]}`;function al(t){const{key:e,target:n}=t,o=n instanceof HTMLInputElement&&n.closest(rl);if(o&&(e==="Enter"&&n.click(),e?.startsWith("Arrow"))){t.preventDefault();const i=o.getElementsByTagName("input"),s=[...i].indexOf(n),r=e.match(/Arrow(Right|Down)/)?1:-1;i[(i.length+s+r)%i.length]?.focus()}}F(()=>L(document,"keydown",al));const Gi="aria-describedby",ji="Escape",fe="aria-labelledby",ll="--mtds-tooltip-position",cl=300,Y=xt?document.getElementById("mtds-tooltip")||Object.assign(document.createElement("div"),{className:T._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let rt=null,Yi=Number.NEGATIVE_INFINITY,Ki=0;function nn({target:t,type:e,key:n}){if(e==="keydown"&&n!==ji)return;const o=Yi+cl-Date.now();clearTimeout(Ki),Ki=setTimeout(dl,Math.max(o,0),n===ji?null:t)}function dl(t){if(Yi=Date.now(),!Y||t===Y)return;Y?.isConnected||document.body.append(Y);let e=t?.closest?.("[data-tooltip]")||null;if(e===rt)return;const n=e&&f(e,"data-tooltip")||"",o=e&&f(e,"data-tooltip-position")||window.getComputedStyle(e||document.body).getPropertyValue(ll)?.trim()||"top";(!n||n==="false"||n==="true"||o==="none")&&(e=null),e&&(Y.textContent=n);const s=rt&&f(rt,fe)===Y?.id,r=(e instanceof HTMLElement?e.innerText:e?.textContent)?.trim()||e?.hasAttribute(fe)||e?.hasAttribute("aria-label");rt?.removeAttribute(s?fe:Gi),ft(Y,!1),rt=e,rt&&f(rt,r?Gi:fe,Y?.id),rt?.isConnected&&Y.hidePopover(),Y.togglePopover(!!e),ft(Y,e||!1,{placement:o,middleware:[Pe(),Re({padding:10})]})}F(()=>{L(document,"blur,focus,mouseout,mouseover",nn,z),L(window,"keydown",nn,z),L(window,"blur",nn,z)});var Xi=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Qi;Xi&&/^Mac/i.test(((Qi=navigator.userAgentData)==null?void 0:Qi.platform)||navigator.platform);var ul=":host(:not([hidden])) { display: block }",Ji=typeof HTMLElement>"u"?class{}:HTMLElement;function nt(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 Zi=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},ts=(t,...e)=>Zi("add",t,e),es=(t,...e)=>Zi("remove",t,e),fl=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},pl=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},on=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))nt(o,i,s);return o},ns={define:(t,e)=>!Xi||window.customElements.get(t)||window.customElements.define(t,e)},ml=`${ul}
24
344
  ::slotted(u-summary) { cursor: pointer; display: block }
25
345
  ::slotted(u-summary)::before { content: ''; display: inline-block; vertical-align: middle; margin-inline: .05em .3125em; border-block: .3125em solid transparent; border-inline-start: .5em solid }
26
346
  ::slotted(u-summary[aria-expanded="true"])::before { rotate: 90deg }
27
- :host > [part="details-content"]:not([hidden=""]) { display: block }`,Ta=class extends Si{constructor(){super(),this._content=null,this.shadowRoot||this.attachShadow({mode:"open"}).append(Je("slot",null,{name:"summary"}),Je("slot",null,{part:"details-content"}),Je("style",Sa))}static get observedAttributes(){return["open"]}connectedCallback(){var t;this._content=(t=this.shadowRoot)==null?void 0:t.children[1],Q(this,"role","group"),Ci(this._content,"beforematch",this),Ci(this,"click,keydown",this),this.attributeChangedCallback()}disconnectedCallback(){this._content&&$i(this._content,"beforematch",this),$i(this,"click,keydown",this),this._content=null}attributeChangedCallback(t,e,n){const o="onbeforematch"in this?"until-found":!0,i=this.open;for(const s of this.children)s.nodeName==="U-SUMMARY"&&Q(s,"aria-expanded",`${i}`);if(this._content&&(Q(this._content,"aria-hidden",`${!i}`),this._content.hidden=i?!1:o),i&&this.name){const s=xa(this).querySelectorAll(`${this.nodeName}[name="${this.name}"]`);for(const r of s)r!==this&&(r.open=!1)}t==="open"&&e===null!=(n===null)&&this.dispatchEvent(new Event("toggle"))}handleEvent(t){const e=this.querySelector(":scope > u-summary"),n=e?.contains(t.target);t.defaultPrevented||(t.type==="beforematch"&&(this.open=!0),n&&t.type==="keydown"&&Ea(t),n&&t.type==="click"&&(this.open=!this.open))}get open(){return this.hasAttribute("open")}set open(t){Q(this,"open",t?"":null)}get name(){return Q(this,"name")||""}set name(t){Q(this,"name",t)}},Ca=class extends Si{connectedCallback(){Q(this,"role","button"),this.slot="summary",this.tabIndex=0}};Ai.define("u-details",Ta),Ai.define("u-summary",Ca);var ce=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",ki=ce&&/firefox/i.test(navigator.userAgent),$a=ce&&/iPad|iPhone|iPod/.test(navigator.userAgent),Li;ce&&/^Mac/i.test(((Li=navigator.userAgentData)==null?void 0:Li.platform)||navigator.platform);var Aa=typeof HTMLElement>"u"?class{}:HTMLElement;function k(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var ka=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},La=0,Ia=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++La).toString(32)}`),t.id):"",Ii=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))k(o,i,s);return o},Oa={define:(t,e)=>!ce||window.customElements.get(t)||window.customElements.define(t,e)},Ma=t=>{var e;const n=k(t,"aria-label")||"";return[...(((e=k(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(i=>document.getElementById(i)),...Array.from(t.labels||[])].reduce((i,s)=>{var r;return i||((r=s?.innerText)==null?void 0:r.trim())||""},n)},Ra=`:host(:not([hidden])) { box-sizing: border-box; border: 1px solid; display: inline-block; height: .5em; width: 10em; overflow: hidden }
347
+ :host > [part="details-content"]:not([hidden=""]) { display: block }`,hl=class extends Ji{constructor(){super(),this._content=null,this.shadowRoot||this.attachShadow({mode:"open"}).append(on("slot",null,{name:"summary"}),on("slot",null,{part:"details-content"}),on("style",ml))}static get observedAttributes(){return["open"]}connectedCallback(){var t;this._content=(t=this.shadowRoot)==null?void 0:t.children[1],nt(this,"role","group"),ts(this._content,"beforematch",this),ts(this,"click,keydown",this),this.attributeChangedCallback()}disconnectedCallback(){this._content&&es(this._content,"beforematch",this),es(this,"click,keydown",this),this._content=null}attributeChangedCallback(t,e,n){const o="onbeforematch"in this?"until-found":!0,i=this.open;for(const s of this.children)s.nodeName==="U-SUMMARY"&&nt(s,"aria-expanded",`${i}`);if(this._content&&(nt(this._content,"aria-hidden",`${!i}`),nt(this._content,"tabindex",i?null:"-1"),this._content.hidden=i?!1:o),i&&this.name){const s=pl(this).querySelectorAll(`${this.nodeName}[name="${this.name}"]`);for(const r of s)r!==this&&(r.open=!1)}t==="open"&&e===null!=(n===null)&&this.dispatchEvent(new Event("toggle"))}handleEvent(t){const e=this.querySelector(":scope > u-summary"),n=e?.contains(t.target);t.defaultPrevented||(t.type==="beforematch"&&(this.open=!0),n&&t.type==="keydown"&&fl(t),n&&t.type==="click"&&(this.open=!this.open))}get open(){return this.hasAttribute("open")}set open(t){nt(this,"open",t?"":null)}get name(){return nt(this,"name")||""}set name(t){nt(this,"name",t)}},bl=class extends Ji{connectedCallback(){nt(this,"role","button"),this.slot="summary",this.tabIndex=0}};ns.define("u-details",hl),ns.define("u-summary",bl);var pe=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",os=pe&&/firefox/i.test(navigator.userAgent),gl=pe&&/iPad|iPhone|iPod/.test(navigator.userAgent),is;pe&&/^Mac/i.test(((is=navigator.userAgentData)==null?void 0:is.platform)||navigator.platform);var vl=typeof HTMLElement>"u"?class{}:HTMLElement;function P(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 _l=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},wl=0,yl=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++wl).toString(32)}`),t.id):"",ss=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))P(o,i,s);return o},xl={define:(t,e)=>!pe||window.customElements.get(t)||window.customElements.define(t,e)},El=t=>{var e;const n=P(t,"aria-label")||"";return[...(((e=P(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(i=>document.getElementById(i)),...Array.from(t.labels||[])].reduce((i,s)=>{var r;return i||((r=s?.innerText)==null?void 0:r.trim())||""},n)},Sl=`:host(:not([hidden])) { box-sizing: border-box; border: 1px solid; display: inline-block; height: .5em; width: 10em; overflow: hidden }
28
348
  :host::before { content: ''; display: block; height: 100%; background: currentColor; width: var(--percentage, 0%); transition: width .2s }
29
349
  :host(:not([value])) { background: linear-gradient(90deg,currentColor 25%, transparent 50%, currentColor 75%) 50%/400% }
30
350
  @media (prefers-reduced-motion: no-preference) { :host { animation: indeterminate 2s linear infinite } }
31
- @keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`,Ze=!1,Oi=class extends Aa{static get observedAttributes(){return["aria-label","aria-labelledby","value","max"]}constructor(){super(),this.shadowRoot||this.attachShadow({mode:"open"}).append(Ii("slot",null,{hidden:""}),Ii("style",Ra))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(Ze)return;Ze=!0;const t=$a||ki,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let n=Ma(this);if(t&&(n=`${n.replace(/\d+%$/,"")} ${e}%`),ki)for(const o of this.labels)k(o,"aria-label",n);k(this,"aria-busy",`${this.position===-1}`),k(this,"aria-label",n.trim()),k(this,"aria-labelledby",null),k(this,"aria-valuemax","100"),k(this,"aria-valuemin","0"),k(this,"aria-valuenow",`${e}`),k(this,"role",t?"img":"progressbar"),Ze=!1}get labels(){const t=this.closest("label:not([for])"),e=Ia(this);return t&&(t.htmlFor=e),ka(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return Ri(this,"value")}set value(t){Di(this,"value",t)}get max(){return Ri(this,"max")||1}set max(t){Di(this,"max",t)}};Oi.formAssociated=!0;var Mi=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),Ri=(t,e)=>{const n=k(t,e);return Mi(n)?Math.max(0,Number.parseFloat(n)):null},Di=(t,e,n)=>{if(n===null||Mi(n))k(t,e,`${n}`);else throw new Error(`Failed to set non-numeric '${k}': '${n}'`)};return Oa.define("u-progress",Oi),O.UHTMLComboboxElement=me,O.UHTMLTabElement=En,O.UHTMLTabListElement=wn,O.UHTMLTabPanelElement=xn,O.UHTMLTabsElement=yn,O.analytics=Vo,O.pagination=kr,O.styles=vs,O.toggleAppExpanded=jo,O.version=bs,Object.defineProperty(O,Symbol.toStringTag,{value:"Module"}),O}({});
32
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtY29tYm9ib3gvZGlzdC91LWNvbWJvYm94LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCIuLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2NvcmUvZGlzdC9mbG9hdGluZy11aS5jb3JlLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5kb20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS9kb20vZGlzdC9mbG9hdGluZy11aS5kb20ubWpzIiwiLi4vZGVzaWduc3lzdGVtL3V0aWxzLnRzIiwiLi4vZGVzaWduc3lzdGVtL2FuYWx5dGljcy9hbmFseXRpY3MudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC10b2dnbGUuanMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9wYWdpbmF0aW9uL3BhZ2luYXRpb24taGVscGVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWJzLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2RpYWxvZy9kaWFsb2ctb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZXJyb3JzdW1tYXJ5L2Vycm9yc3VtbWFyeS1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRhdGFsaXN0L2Rpc3QvdS1kYXRhbGlzdC5qcyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZC9maWVsZC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZHNldC9maWVsZHNldC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9sb2dvL2xvZ28tb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vcG9wb3Zlci9wb3BvdmVyLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RhYmxlL3RhYmxlLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RvZ2dsZWdyb3VwL3RvZ2dsZWdyb3VwLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3Rvb2x0aXAvdG9vbHRpcC1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRldGFpbHMvZGlzdC91LWRldGFpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1wcm9ncmVzcy9kaXN0L3UtcHJvZ3Jlc3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuXG4vLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0ZJUkVGT1ggPSBJU19CUk9XU0VSICYmIC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBGT0NVU19PVVRMSU5FID0gXCJvdXRsaW5lOiAxcHggZG90dGVkOyBvdXRsaW5lOiA1cHggYXV0byBIaWdobGlnaHQ7IG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvclwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChfZXJyKSB7XG4gIH1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgKGRldGFpbCkgPT4gZWxlbWVudC5oYW5kbGVFdmVudCh7IHR5cGU6IFwibXV0YXRpb25cIiwgZGV0YWlsIH0pXG4gICAgKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIG9ic2VydmVycy5zZXQoZWxlbWVudCwgb2JzZXJ2ZXIpO1xuICB9XG59O1xudmFyIGFzQnV0dG9uID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGlzQ2xpY2sgPSBcImtleVwiIGluIGV2ZW50ICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKTtcbiAgaWYgKGlzQ2xpY2spIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChpc0NsaWNrICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBldmVudC50YXJnZXQuY2xpY2soKTtcbiAgcmV0dXJuIGlzQ2xpY2s7XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dDIsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQyKSBlbC50ZXh0Q29udGVudCA9IHRleHQyO1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZ2V0TGFiZWwgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgbGFiZWwgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikgfHwgXCJcIjtcbiAgY29uc3QgbGFiZWxzID0gKChfYTIgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxsZWRieVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkuc3BsaXQoL1xccysvKSkgfHwgW107XG4gIHJldHVybiBbXG4gICAgLi4ubGFiZWxzLm1hcCgoaWQyKSA9PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZDIpKSxcbiAgICAvLyBHZXQgYWxsIGxhYmVsbGVkYnkgZWxlbWVudHNcbiAgICAuLi5BcnJheS5mcm9tKGVsLmxhYmVscyB8fCBbXSlcbiAgICAvLyBHZXQgYWxsIDxsYWJlbD4gZWxlbWVudHNcbiAgXS5yZWR1Y2UoKGFjYywgZWwyKSA9PiB7XG4gICAgdmFyIF9hMztcbiAgICByZXR1cm4gYWNjIHx8ICgoX2EzID0gZWwyID09IG51bGwgPyB2b2lkIDAgOiBlbDIuaW5uZXJUZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnRyaW0oKSkgfHwgXCJcIjtcbiAgfSwgbGFiZWwpO1xufTtcbnZhciBMSVZFO1xudmFyIExJVkVfU1JfRklYID0gMDtcbnZhciBzcGVhayA9ICh0ZXh0MikgPT4ge1xuICBpZiAoIUxJVkUpIHtcbiAgICBMSVZFID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBMSVZFLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gICAgYXR0cihMSVZFLCBcImFyaWEtbGl2ZVwiLCBcImFzc2VydGl2ZVwiKTtcbiAgfVxuICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKExJVkUpO1xuICBpZiAodGV4dDIpIExJVkUudGV4dENvbnRlbnQgPSBgJHt0ZXh0Mn0ke0xJVkVfU1JfRklYKysgJSAyID8gXCJcXHhBMFwiIDogXCJcIn1gO1xufTtcbnZhciBzZXRWYWx1ZSA9IChpbnB1dCwgZGF0YSwgdHlwZSA9IFwiXCIpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSwgZGF0YSwgaW5wdXRUeXBlOiB0eXBlIH07XG4gIGNvbnN0IHByb3RvID0gSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGU7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJiZWZvcmVpbnB1dFwiLCBldmVudCkpO1xuICAoX2IgPSAoX2EyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgXCJ2YWx1ZVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5zZXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKGlucHV0LCBkYXRhKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImlucHV0XCIsIGV2ZW50KSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG59O1xudmFyIElTX1BSRVNTID0gZmFsc2U7XG52YXIgaXNNb3VzZURvd24gPSAoZXZlbnQpID0+IHtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2V1cFwiKSBJU19QUkVTUyA9IGZhbHNlO1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZWRvd25cIikge1xuICAgIElTX1BSRVNTID0gdHJ1ZTtcbiAgICBvbihkb2N1bWVudCwgXCJtb3VzZXVwXCIsIGlzTW91c2VEb3duLCB7IG9uY2U6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIElTX1BSRVNTO1xufTtcbnZhciBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QgPSAoc3R5bGUsIHNsb3QgPSBcIjxzbG90Pjwvc2xvdD5cIikgPT4gYDx0ZW1wbGF0ZSBzaGFkb3dyb290bW9kZT1cIm9wZW5cIj4ke3Nsb3R9PHN0eWxlPiR7c3R5bGV9PC9zdHlsZT48L3RlbXBsYXRlPmA7XG5cbi8vIHUtY29tYm9ib3gudHNcbnZhciBVSFRNTENvbWJvYm94U3R5bGUgPSBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2s7IC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKSB9IC8qIE11c3QgYmUgZGlzcGxheSBibG9jayBpbiBTYWZhcmkgdG8gYWxsb3cgZm9jdXMgaW5zaWRlICovXG46aG9zdCg6bm90KFtkYXRhLW11bHRpcGxlXSkpIDo6c2xvdHRlZChkYXRhKSxcbjpob3N0KFtkYXRhLW11bHRpcGxlPVwiZmFsc2VcIl0pIDo6c2xvdHRlZChkYXRhKSB7IGRpc3BsYXk6IG5vbmUgfSAvKiBIaWRlIGRhdGEgaWYgbm90IG11bHRpcGxlICovXG46OnNsb3R0ZWQoaW5wdXRbaW5wdXRtb2RlPVwibm9uZVwiXSkgeyBvdXRsaW5lOiBub25lIH0gLyogSGlkZSB0ZW1wb3JhcnkgZm91Y3Mgb3V0bGluZSBmbGFzaCAqL1xuOjpzbG90dGVkKGRlbCkgeyB0ZXh0LWRlY29yYXRpb246IG5vbmUgfVxuOjpzbG90dGVkKGRhdGE6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBvaW50ZXItZXZlbnRzOiBub25lIH1cbjo6c2xvdHRlZChkYXRhKTo6YWZ0ZXIgeyBjb250ZW50OiAnXFxcXDAwRDcnOyBjb250ZW50OiAnXFxcXDAwRDcnIC8gJyc7IHBhZGRpbmctaW5saW5lOiAuNWNoOyBwb2ludGVyLWV2ZW50czogYXV0bzsgY3Vyc29yOiBwb2ludGVyIH1cbjo6c2xvdHRlZChkYXRhOmZvY3VzKSB7ICR7Rk9DVVNfT1VUTElORX0gfWA7XG52YXIgVUhUTUxDb21ib2JveFNoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoVUhUTUxDb21ib2JveFN0eWxlKTtcbnZhciBFVkVOVFMgPSBcImJlZm9yZWlucHV0LGJsdXIsZm9jdXMsY2xpY2ssaW5wdXQsa2V5ZG93bixtb3VzZWRvd25cIjtcbnZhciBFVkVOVF9PTkNFID0geyBvbmNlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG52YXIgSVNfRklSRUZPWF9ERVNLVE9QID0gSVNfRklSRUZPWCAmJiAhSVNfQU5EUk9JRDtcbnZhciBJU19NT0JJTEUgPSBJU19BTkRST0lEIHx8IElTX0lPUztcbnZhciBNT0RJRklFRCA9IFwiXFx1MjAwQlwiLnJlcGVhdCg1KTtcbnZhciBGQUxTRSA9IFwiZmFsc2VcIjtcbnZhciBURVhUUyA9IHtcbiAgYWRkZWQ6IFwiQWRkZWRcIixcbiAgZW1wdHk6IFwiTm8gc2VsZWN0ZWRcIixcbiAgZm91bmQ6IFwiTmF2aWdhdGUgbGVmdCB0byBmaW5kICVkIHNlbGVjdGVkXCIsXG4gIGludmFsaWQ6IFwiSW52YWxpZCB2YWx1ZVwiLFxuICBvZjogXCJvZlwiLFxuICByZW1vdmU6IFwiUHJlc3MgdG8gcmVtb3ZlXCIsXG4gIHJlbW92ZWQ6IFwiUmVtb3ZlZFwiXG59O1xudmFyIFVIVE1MQ29tYm9ib3hFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2l0ZW0gPSBcIlwiO1xuICAgIHRoaXMuX3NwZWFrID0gXCJcIjtcbiAgICB0aGlzLl90ZXh0cyA9IF9fc3ByZWFkVmFsdWVzKHt9LCBURVhUUyk7XG4gICAgdGhpcy5fdmFsdWUgPSBcIlwiO1xuICAgIGlmICghdGhpcy5zaGFkb3dSb290KVxuICAgICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAgICAgICAvLyBDb250ZW50IHNsb3RcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIFVIVE1MQ29tYm9ib3hTdHlsZSlcbiAgICAgICk7XG4gIH1cbiAgLy8gTG9jYWxseSBzdG9yZSB2YWx1ZSB0byBzdG9yZSB2YWx1ZSBiZWZvcmUgaW5wdXQtY2xpY2tcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKFRFWFRTKS5tYXAoKGtleSkgPT4gYGRhdGEtc3ItJHtrZXl9YCk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgb24odGhpcywgRVZFTlRTLCB0aGlzLCB0cnVlKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1widmFsdWVcIiwgXCJpZFwiXSxcbiAgICAgIC8vIFJlc3BvbmQgdG8gY2hhbmdlcyBpbiA8ZGF0YT4gdmFsdWUgb3IgY2hhbmdlIG9mIGlkIGZvciA8ZGF0YWxpc3Q+IHRvIHJlY29ubmVjdCB3aXRoIGlucHV0XG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgIC8vIFJlc3BvbmQgdG8gY2hhbmdlcyBpbiA8ZGF0YT4gdGV4dENvbnRlbnRcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KHJlbmRlciwgMCwgdGhpcyk7XG4gICAgc2V0VGltZW91dChzeW5jSW5wdXRWYWx1ZSwgMCwgdGhpcyk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIF8sIHZhbCkge1xuICAgIGNvbnN0IHRleHQyID0gcHJvcC5zcGxpdChcImRhdGEtc3ItXCIpWzFdO1xuICAgIGlmIChURVhUU1t0ZXh0Ml0pIHRoaXMuX3RleHRzW3RleHQyXSA9IHZhbCB8fCBURVhUU1t0ZXh0Ml07XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gICAgb2ZmKHRoaXMsIEVWRU5UUywgdGhpcywgdHJ1ZSk7XG4gICAgdGhpcy5faXRlbXMgPSB0aGlzLl9jbGVhciA9IHRoaXMuX2ZvY3VzID0gdGhpcy5fY29udHJvbCA9IHZvaWQgMDtcbiAgICB0aGlzLl9saXN0ID0gdGhpcy5fb3B0aW9ucyA9IHRoaXMuX3Jvb3QgPSB2b2lkIDA7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJiZWZvcmVpbnB1dFwiKSB0aGlzLl92YWx1ZSA9ICh0YXJnZXQgPT0gbnVsbCA/IHZvaWQgMCA6IHRhcmdldC52YWx1ZSkgfHwgXCJcIjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJibHVyXCIpIG9uQmx1cih0aGlzKTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSBvbkNsaWNrKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJmb2N1c1wiKSBvbkZvY3VzKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJpbnB1dFwiKSBvbklucHV0KHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIG9uS2V5RG93bih0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwibW91c2Vkb3duXCIpIGlzTW91c2VEb3duKGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJtdXRhdGlvblwiKSByZW5kZXIodGhpcywgZXZlbnQpO1xuICB9XG4gIGdldCBtdWx0aXBsZSgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IGF0dHIodGhpcywgXCJkYXRhLW11bHRpcGxlXCIpKSAhPSBudWxsID8gX2EyIDogRkFMU0UpICE9PSBGQUxTRTtcbiAgfVxuICBzZXQgbXVsdGlwbGUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwiZGF0YS1tdWx0aXBsZVwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgY3JlYXRhYmxlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gYXR0cih0aGlzLCBcImRhdGEtY3JlYXRhYmxlXCIpKSAhPSBudWxsID8gX2EyIDogRkFMU0UpICE9PSBGQUxTRTtcbiAgfVxuICBzZXQgY3JlYXRhYmxlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImRhdGEtY3JlYXRhYmxlXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBjb250cm9sKCkge1xuICAgIHZhciBfYTI7XG4gICAgaWYgKCEoKF9hMiA9IHRoaXMuX2NvbnRyb2wpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKVxuICAgICAgdGhpcy5fY29udHJvbCA9IHRoaXMucXVlcnlTZWxlY3RvcihcImlucHV0XCIpO1xuICAgIHJldHVybiB0aGlzLl9jb250cm9sO1xuICB9XG4gIGdldCBsaXN0KCkge1xuICAgIHZhciBfYTI7XG4gICAgaWYgKCEoKF9hMiA9IHRoaXMuX2xpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKVxuICAgICAgdGhpcy5fbGlzdCA9IHRoaXMucXVlcnlTZWxlY3RvcihcInUtZGF0YWxpc3QsZGF0YWxpc3RcIik7XG4gICAgcmV0dXJuIHRoaXMuX2xpc3Q7XG4gIH1cbiAgZ2V0IGNsZWFyKCkge1xuICAgIHZhciBfYTI7XG4gICAgaWYgKCEoKF9hMiA9IHRoaXMuX2NsZWFyKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmlzQ29ubmVjdGVkKSkgdGhpcy5fY2xlYXIgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJkZWxcIik7XG4gICAgcmV0dXJuIHRoaXMuX2NsZWFyO1xuICB9XG4gIGdldCBpdGVtcygpIHtcbiAgICBpZiAoIXRoaXMuX2l0ZW1zKSB0aGlzLl9pdGVtcyA9IHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJkYXRhXCIpO1xuICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgfVxuICBnZXQgb3B0aW9ucygpIHtcbiAgICB2YXIgX2EyLCBfYjtcbiAgICBpZiAoIXRoaXMuX29wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHRhZyA9ICgoX2EyID0gdGhpcy5saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLm5vZGVOYW1lKSA9PT0gXCJVLURBVEFMSVNUXCIgPyBcInUtb3B0aW9uXCIgOiBcIm9wdGlvblwiO1xuICAgICAgdGhpcy5fb3B0aW9ucyA9IChfYiA9IHRoaXMubGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG4gIGdldCB2YWx1ZXMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLml0ZW1zXS5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpO1xuICB9XG59O1xudmFyIHRleHQgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgcmV0dXJuICgoX2EyID0gZWwgPT0gbnVsbCA/IHZvaWQgMCA6IGVsLnRleHRDb250ZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKSkgfHwgXCJcIjtcbn07XG52YXIgaXNEYXRhID0gKGVsKSA9PiBlbCBpbnN0YW5jZW9mIEhUTUxEYXRhRWxlbWVudDtcbnZhciBpc0Rpc2FibGVkID0gKHsgY29udHJvbCB9KSA9PiAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5kaXNhYmxlZCkgfHwgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wucmVhZE9ubHkpIHx8IGZhbHNlO1xudmFyIHJlbmRlciA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF9mb2N1cywgX3RleHRzLCBpdGVtcywgY29udHJvbCwgbGlzdCwgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGlmICghY29udHJvbCB8fCAhbGlzdCkgcmV0dXJuO1xuICBjb25zdCBwcmV2ID0gZ2V0TGFiZWwoY29udHJvbCk7XG4gIGNvbnN0IG5leHQgPSBwcmV2LmVuZHNXaXRoKE1PRElGSUVEKSA/IGF0dHIoY29udHJvbCwgXCJkYXRhLWxhYmVsXCIpIDogcHJldjtcbiAgYXR0cihjb250cm9sLCBcImRhdGEtbGFiZWxcIiwgbmV4dCk7XG4gIGxldCBsYWJlbCA9IGAke25leHR9JHttdWx0aXBsZSA/IGAsICR7aXRlbXMubGVuZ3RoID8gX3RleHRzLmZvdW5kLnJlcGxhY2UoXCIlZFwiLCBgJHtpdGVtcy5sZW5ndGh9YCkgOiBfdGV4dHMuZW1wdHl9YCA6IFwiXCJ9YDtcbiAgY29uc3QgZWRpdHMgPSBbXTtcbiAgZm9yIChjb25zdCB7IGFkZGVkTm9kZXMsIHJlbW92ZWROb2RlcyB9IG9mIChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQuZGV0YWlsKSB8fCBbXSkge1xuICAgIGZvciAoY29uc3QgZWwgb2YgYWRkZWROb2RlcykgaWYgKGlzRGF0YShlbCkpIGVkaXRzLnVuc2hpZnQoZWwpO1xuICAgIGZvciAoY29uc3QgZWwgb2YgcmVtb3ZlZE5vZGVzKSBpZiAoaXNEYXRhKGVsKSkgZWRpdHMucHVzaChlbCk7XG4gIH1cbiAgY29uc3Qgc2hvdWxkQW5ub3VuY2UgPSBtdWx0aXBsZSA/IGVkaXRzLmxlbmd0aCA9PT0gMSA6IGVkaXRzWzBdID09PSBfZm9jdXM7XG4gIGlmIChfZm9jdXMgJiYgc2hvdWxkQW5ub3VuY2UpIHtcbiAgICBjb25zdCBhcmlhRXhwYW5kZWQgPSBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiKTtcbiAgICBjb25zdCBpbnB1dE1vZGUgPSBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIpO1xuICAgIGNvbnN0IG5leHRGb2N1cyA9IGlzRGF0YShfZm9jdXMpID8gY29udHJvbCA6IF9mb2N1cztcbiAgICBjb25zdCBpc1JlbW92ZSA9ICFlZGl0c1swXS5pc0Nvbm5lY3RlZDtcbiAgICBzZWxmLl9zcGVhayA9IGAke190ZXh0c1tpc1JlbW92ZSA/IFwicmVtb3ZlZFwiIDogXCJhZGRlZFwiXX0gJHt0ZXh0KGVkaXRzWzBdKX0sIGA7XG4gICAgaWYgKElTX01PQklMRSB8fCBfZm9jdXMgPT09IGNvbnRyb2wpIHNwZWFrKHNlbGYuX3NwZWFrKTtcbiAgICBpZiAoY29udHJvbCAhPT0gbmV4dEZvY3VzKSB7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiLCBudWxsKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgXCJub25lXCIpO1xuICAgICAgbGFiZWwgPSBcIlxceEEwXCI7XG4gICAgICBjb250cm9sLmZvY3VzKCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIGF0dHIoY29udHJvbCwgXCJhcmlhLWV4cGFuZGVkXCIsIGFyaWFFeHBhbmRlZCk7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIsIGlzUmVtb3ZlID8gXCJub25lXCIgOiBpbnB1dE1vZGUpO1xuICAgICAgKF9hMyA9IG5leHRGb2N1cyA9PSBudWxsID8gdm9pZCAwIDogbmV4dEZvY3VzLmZvY3VzKSA9PSBudWxsID8gdm9pZCAwIDogX2EzLmNhbGwobmV4dEZvY3VzKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgaW5wdXRNb2RlKTtcbiAgICAgIHNlbGYuX3NwZWFrID0gXCJcIjtcbiAgICAgIGlmIChJU19GSVJFRk9YX0RFU0tUT1ApIG9uKHNlbGYsIFwiYmx1clwiLCAoKSA9PiByZW5kZXIoc2VsZiksIEVWRU5UX09OQ0UpO1xuICAgICAgZWxzZSBzZXRUaW1lb3V0KHJlbmRlciwgMTAwLCBzZWxmKTtcbiAgICB9LCAxMDApO1xuICB9XG4gIGxldCBpZHggPSAwO1xuICBjb25zdCBzZWxlY3QgPSBzZWxmLnF1ZXJ5U2VsZWN0b3IoXCJzZWxlY3RcIik7XG4gIGNvbnN0IHJlbW92ZSA9IGlzRGlzYWJsZWQoc2VsZikgPyBcIlwiIDogYCR7X3RleHRzLnJlbW92ZX0sIGA7XG4gIGZvciAoY29uc3QgaXRlbTIgb2YgaXRlbXMpIHtcbiAgICBjb25zdCBvcHRpb24gPSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zW2lkeF07XG4gICAgY29uc3QgbGFiZWwyID0gdGV4dChpdGVtMik7XG4gICAgY29uc3QgdmFsdWUgPSBpdGVtMi52YWx1ZSB8fCBsYWJlbDI7XG4gICAgY29uc3QgYXJpYSA9IGAke3NlbGYuX3NwZWFrfSR7bGFiZWwyfSwgJHtyZW1vdmV9JHsrK2lkeH0gJHtfdGV4dHMub2Z9ICR7aXRlbXMubGVuZ3RofWA7XG4gICAgYXR0cihpdGVtMiwgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIGF0dHIoaXRlbTIsIFwidmFsdWVcIiwgdmFsdWUpO1xuICAgIGF0dHIoaXRlbTIsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICBhdHRyKGl0ZW0yLCBcImFyaWEtbGFiZWxcIiwgYXJpYSk7XG4gICAgaWYgKG9wdGlvbikgT2JqZWN0LmFzc2lnbihvcHRpb24sIHsgdGV4dENvbnRlbnQ6IGxhYmVsMiwgdmFsdWUgfSk7XG4gICAgZWxzZSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5hcHBlbmRDaGlsZChuZXcgT3B0aW9uKGxhYmVsMiwgdmFsdWUsIHRydWUsIHRydWUpKTtcbiAgfVxuICBpZiAoc2VsZWN0KSBhdHRyKHNlbGVjdCwgXCJtdWx0aXBsZVwiLCBtdWx0aXBsZSA/IFwiXCIgOiBudWxsKTtcbiAgZm9yIChjb25zdCBvcHQgb2YgWy4uLihzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zKSB8fCBbXV0uc2xpY2UoaWR4KSkgb3B0LnJlbW92ZSgpO1xuICBpZiAoIW11bHRpcGxlICYmIGlkeCA+IDEpXG4gICAgY29uc29sZS53YXJuKFwidS1jb21ib2JveDogTXVsdGlwbGUgPGRhdGE+IGZvdW5kIGluIHNpbmdsZSBtb2RlLlwiKTtcbiAgYXR0cihsaXN0LCBcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCIsIGAke211bHRpcGxlfWApO1xuICBhdHRyKGNvbnRyb2wsIFwibGlzdFwiLCB1c2VJZChsaXN0KSk7XG4gIGF0dHIoY29udHJvbCwgXCJhcmlhLWxhYmVsXCIsIGAke3NlbGYuX3NwZWFrfSR7bGFiZWx9JHtNT0RJRklFRH1gKTtcbiAgaWYgKGxpc3QuaGFzQXR0cmlidXRlKFwicG9wb3ZlclwiKSkge1xuICAgIGF0dHIoY29udHJvbCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKGxpc3QpKTtcbiAgICBhdHRyKGxpc3QsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcbiAgfVxuICBjb25zdCBpdGVtID0gdGV4dChpdGVtc1swXSk7XG4gIGlmIChpdGVtICE9PSBzZWxmLl9pdGVtKSBzeW5jSW5wdXRWYWx1ZShzZWxmKTtcbiAgc2VsZi5faXRlbSA9IGl0ZW07XG4gIHN5bmNDbGVhcldpdGhJbnB1dChzZWxmKTtcbiAgc3luY09wdGlvbnNXaXRoSXRlbXMoc2VsZik7XG4gIChfYTIgPSBtdXRhdGlvbk9ic2VydmVyKHNlbGYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRha2VSZWNvcmRzKCk7XG59O1xudmFyIHN5bmNDbGVhcldpdGhJbnB1dCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChzZWxmLmNsZWFyKSBhdHRyKHNlbGYuY2xlYXIsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgaWYgKHNlbGYuY2xlYXIpIHNlbGYuY2xlYXIuaGlkZGVuID0gISgoX2EyID0gc2VsZi5jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnZhbHVlKSB8fCBpc0Rpc2FibGVkKHNlbGYpO1xufTtcbnZhciBzeW5jT3B0aW9uc1dpdGhJdGVtcyA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgX3NwZWFrLCBvcHRpb25zID0gW10sIHZhbHVlcyB9ID0gc2VsZjtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gKF9hMiA9IGF0dHIob3B0LCBcInZhbHVlXCIpKSAhPSBudWxsID8gX2EyIDogdGV4dChvcHQpO1xuICAgIGF0dHIob3B0LCBcImFyaWEtbGFiZWxcIiwgX3NwZWFrID8gYCR7X3NwZWFrfSR7dGV4dChvcHQpfWAgOiBudWxsKTtcbiAgICBhdHRyKG9wdCwgXCJzZWxlY3RlZFwiLCB2YWx1ZXMuaW5jbHVkZXModmFsdWUpID8gXCJcIiA6IG51bGwpO1xuICB9XG59O1xudmFyIHN5bmNJbnB1dFZhbHVlID0gKHNlbGYpID0+IHtcbiAgY29uc3QgeyBtdWx0aXBsZSwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gdGV4dChpdGVtc1swXSk7XG4gIGlmICghbXVsdGlwbGUgJiYgY29udHJvbCAmJiB2YWx1ZSAhPT0gY29udHJvbC52YWx1ZSlcbiAgICBzZXRWYWx1ZShjb250cm9sLCB2YWx1ZSwgdmFsdWUgPyBcImluc2VydFRleHRcIiA6IFwiZGVsZXRlQ29udGVudFwiKTtcbn07XG52YXIgZGlzcGF0Y2hNYXRjaCA9IChzZWxmLCBjaGFuZ2UgPSB0cnVlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgX3RleHRzLCBvcHRpb25zID0gW10sIGNyZWF0YWJsZSwgY29udHJvbCwgaXRlbXMsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IHF1ZXJ5ID0gdmFsdWUudG9Mb3dlckNhc2UoKSB8fCBudWxsO1xuICBsZXQgbWF0Y2ggPSBbLi4ub3B0aW9uc10uZmluZChcbiAgICAob3B0KSA9PiAoYXR0cihvcHQsIFwibGFiZWxcIikgfHwgdGV4dChvcHQpKS50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gcXVlcnlcbiAgKTtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogbWF0Y2ggfTtcbiAgaWYgKCFzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiY29tYm9ib3hiZWZvcmVtYXRjaFwiLCBldmVudCkpKVxuICAgIG1hdGNoID0gWy4uLm9wdGlvbnNdLmZpbmQoKG8pID0+IG8uc2VsZWN0ZWQpO1xuICBpZiAoY2hhbmdlKSB7XG4gICAgc3luY09wdGlvbnNXaXRoSXRlbXMoc2VsZik7XG4gICAgaWYgKG1hdGNoKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgbWF0Y2gsIGZhbHNlKTtcbiAgICBpZiAoY3JlYXRhYmxlICYmIHZhbHVlKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgeyB2YWx1ZSB9LCBmYWxzZSk7XG4gICAgaWYgKCFtdWx0aXBsZSAmJiAhdmFsdWUgJiYgaXRlbXNbMF0pIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1zWzBdKTtcbiAgICBlbHNlIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICAgIHJldHVybiBzcGVhayhfdGV4dHMuaW52YWxpZCk7XG4gIH1cbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykgb3B0LnNlbGVjdGVkID0gb3B0ID09PSBtYXRjaDtcbn07XG52YXIgZGlzcGF0Y2hDaGFuZ2UgPSAoc2VsZiwgaXRlbSwgcmVtb3ZhYmxlID0gdHJ1ZSkgPT4ge1xuICBjb25zdCB7IGNvbnRyb2wsIGl0ZW1zLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgYWRkID0gY3JlYXRlRWxlbWVudChcImRhdGFcIiwgaXRlbS5sYWJlbCB8fCBpdGVtLnZhbHVlLCB7XG4gICAgdmFsdWU6IGl0ZW0udmFsdWVcbiAgfSk7XG4gIGNvbnN0IHJlbW92ZSA9IFsuLi5pdGVtc10uZmluZCgoaSkgPT4gaS52YWx1ZSA9PT0gaXRlbS52YWx1ZSk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IHJlbW92ZSB8fCBhZGQgfTtcbiAgY29uc3Qgc2tpcCA9IHJlbW92ZSAmJiAhcmVtb3ZhYmxlO1xuICBpZiAoc2tpcCkgcmV0dXJuIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICBpZiAoc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImNvbWJvYm94YmVmb3Jlc2VsZWN0XCIsIGV2ZW50KSkpIHtcbiAgICBpZiAoIW11bHRpcGxlKSBmb3IgKGNvbnN0IGl0ZW0yIG9mIFsuLi5pdGVtc10pIGl0ZW0yLnJlbW92ZSgpO1xuICAgIGlmIChyZW1vdmUpIHJlbW92ZS5yZW1vdmUoKTtcbiAgICBlbHNlIGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYmVmb3JlYmVnaW5cIiwgYWRkKTtcbiAgICBzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiY29tYm9ib3hhZnRlcnNlbGVjdFwiLCBldmVudCkpO1xuICB9XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgeyB0YXJnZXQgfSkgPT4ge1xuICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHNlbGYuX2ZvY3VzID0gdGFyZ2V0O1xuICBzcGVhaygpO1xufTtcbnZhciBvbkJsdXIgPSAoc2VsZikgPT4gaXNNb3VzZURvd24oKSB8fCBzZXRUaW1lb3V0KG9uQmx1cnJlZCwgMCwgc2VsZik7XG52YXIgb25CbHVycmVkID0gKHNlbGYpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9mb2N1cyB8fCBzZWxmLmNvbnRhaW5zKChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpKSByZXR1cm47XG4gIGlmICghc2VsZi5tdWx0aXBsZSkgZGlzcGF0Y2hNYXRjaChzZWxmKTtcbiAgc2VsZi5fZm9jdXMgPSB2b2lkIDA7XG59O1xudmFyIG9uQ2xpY2sgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgY29uc3QgeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5LCB0YXJnZXQgfSA9IGV2ZW50O1xuICBjb25zdCB7IGNsZWFyLCBjb250cm9sLCBpdGVtcyB9ID0gc2VsZjtcbiAgaWYgKGNsZWFyID09IG51bGwgPyB2b2lkIDAgOiBjbGVhci5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgaWYgKGNvbnRyb2wpIHNldFZhbHVlKGNvbnRyb2wsIFwiXCIsIFwiZGVsZXRlQ29udGVudEJhY2t3YXJkXCIpO1xuICAgIHJldHVybiBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCk7XG4gIH1cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKGl0ZW0uY29udGFpbnModGFyZ2V0KSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW0pO1xuICAgIGlmICh5ID49IHRvcCAmJiB5IDw9IGJvdHRvbSAmJiB4ID49IGxlZnQgJiYgeCA8PSByaWdodCkgcmV0dXJuIGl0ZW0uZm9jdXMoKTtcbiAgfVxuICBpZiAodGFyZ2V0ID09PSBzZWxmKSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCk7XG59O1xudmFyIG9uSW5wdXQgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgeyBvcHRpb25zID0gW10sIGNvbnRyb2wsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IGlzQ2xpY2sgPSBldmVudCBpbnN0YW5jZW9mIElucHV0RXZlbnQgPyAhZXZlbnQuaW5wdXRUeXBlIHx8IGV2ZW50LmlucHV0VHlwZSA9PT0gXCJpbnNlcnRSZXBsYWNlbWVudFRleHRcIiA6ICEhdmFsdWU7XG4gIGlmIChpc0NsaWNrKSB7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGNvbnRyb2wpIGNvbnRyb2wudmFsdWUgPSBzZWxmLl92YWx1ZTtcbiAgICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKVxuICAgICAgaWYgKG9wdC52YWx1ZSAmJiBvcHQudmFsdWUgPT09IHZhbHVlKVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgb3B0LCBtdWx0aXBsZSk7XG4gIH0gZWxzZSBpZiAoIW11bHRpcGxlKSBkaXNwYXRjaE1hdGNoKHNlbGYsIGZhbHNlKTtcbiAgc3luY0NsZWFyV2l0aElucHV0KHNlbGYpO1xufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkpIHJldHVybjtcbiAgY29uc3QgeyBjbGVhciwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGNvbnN0IHsga2V5LCByZXBlYXQsIHRhcmdldCB9ID0gZXZlbnQ7XG4gIGNvbnN0IGlzQ29udHJvbCA9IGNvbnRyb2wgJiYgY29udHJvbCA9PT0gdGFyZ2V0O1xuICBjb25zdCBpblRleHQgPSBpc0NvbnRyb2wgJiYgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuc2VsZWN0aW9uRW5kKTtcbiAgbGV0IGluZGV4ID0gaXNDb250cm9sID8gaXRlbXMubGVuZ3RoIDogWy4uLml0ZW1zXS5pbmRleE9mKHRhcmdldCk7XG4gIGlmIChpc0NvbnRyb2wgJiYga2V5ID09PSBcIlRhYlwiICYmIGNsZWFyICYmICFjbGVhci5oaWRkZW4pIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNsZWFyLnRhYkluZGV4ID0gLTE7XG4gICAgY2xlYXIuZm9jdXMoKTtcbiAgICBvbihjbGVhciwgXCJibHVyXCIsICgpID0+IGF0dHIoY2xlYXIsIFwidGFiaW5kZXhcIiwgbnVsbCksIEVWRU5UX09OQ0UpO1xuICB9XG4gIGlmICghaXNDb250cm9sICYmIGFzQnV0dG9uKGV2ZW50KSB8fCBpbmRleCA9PT0gLTEpIHJldHVybjtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIgJiYgIWlzQ29udHJvbCkgaW5kZXggKz0gMTtcbiAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93TGVmdFwiICYmICFpblRleHQpIGluZGV4IC09IDE7XG4gIGVsc2UgaWYgKGtleSA9PT0gXCJFbnRlclwiICYmIGlzQ29udHJvbCkge1xuICAgIGNvbnN0IGZvcm0gPSBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiKTtcbiAgICBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiLCBcIiNcIik7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IGF0dHIoY29udHJvbCwgXCJmb3JtXCIsIGZvcm0pKTtcbiAgICByZXR1cm4gZGlzcGF0Y2hNYXRjaChzZWxmKTtcbiAgfSBlbHNlIGlmICgoa2V5ID09PSBcIkJhY2tzcGFjZVwiIHx8IGtleSA9PT0gXCJEZWxldGVcIikgJiYgIWluVGV4dCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCFyZXBlYXQgJiYgaXRlbXNbaW5kZXhdKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgaXRlbXNbaW5kZXhdKTtcbiAgICBpZiAoaXNDb250cm9sKSBpbmRleCAtPSAxO1xuICB9IGVsc2UgcmV0dXJuIGlzQ29udHJvbCB8fCAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpKTtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgKF9hMiA9IGl0ZW1zW01hdGgubWF4KDAsIGluZGV4KV0gfHwgY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtY29tYm9ib3hcIiwgVUhUTUxDb21ib2JveEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTENvbWJvYm94RWxlbWVudCwgVUhUTUxDb21ib2JveFNoYWRvd1Jvb3QsIFVIVE1MQ29tYm9ib3hTdHlsZSB9O1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgU0FGRV9MQUJFTExFREJZID0gYCR7SVNfQU5EUk9JRCA/IFwiZGF0YVwiIDogXCJhcmlhXCJ9LWxhYmVsbGVkYnlgO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuc2hhZG93Um9vdCB8fCBlbGVtZW50LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gIC8vIFVubmFtZWQgc2xvdCBkb2VzIGF1dG9tYXRpY2FsbHkgcmVuZGVyIGFsbCB0b3AgZWxlbWVudCBub2Rlc1xuICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgY3NzKVxuKTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoX2Vycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZGVjbGFyYXRpdmVTaGFkb3dSb290ID0gKHN0eWxlLCBzbG90ID0gXCI8c2xvdD48L3Nsb3Q+XCIpID0+IGA8dGVtcGxhdGUgc2hhZG93cm9vdG1vZGU9XCJvcGVuXCI+JHtzbG90fTxzdHlsZT4ke3N0eWxlfTwvc3R5bGU+PC90ZW1wbGF0ZT5gO1xuXG4vLyB1LXRhYnMudHNcbnZhciBVSFRNTFRhYnNTdHlsZSA9IERJU1BMQVlfQkxPQ0s7XG52YXIgVUhUTUxUYWJMaXN0U3R5bGUgPSBESVNQTEFZX0JMT0NLO1xudmFyIFVIVE1MVGFiUGFuZWxTdHlsZSA9IERJU1BMQVlfQkxPQ0s7XG52YXIgVUhUTUxUYWJTdHlsZSA9ICc6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGN1cnNvcjogcG9pbnRlciB9Omhvc3QoW2FyaWEtZGlzYWJsZWQ9XCJ0cnVlXCJdKSB7IGN1cnNvcjogZGVmYXVsdCB9JztcbnZhciBVSFRNTFRhYnNTaGFkb3dSb290ID0gZGVjbGFyYXRpdmVTaGFkb3dSb290KFVIVE1MVGFic1N0eWxlKTtcbnZhciBVSFRNTFRhYkxpc3RTaGFkb3dSb290ID0gZGVjbGFyYXRpdmVTaGFkb3dSb290KFVIVE1MVGFiTGlzdFN0eWxlKTtcbnZhciBVSFRNTFRhYlNoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoVUhUTUxUYWJTdHlsZSk7XG52YXIgVUhUTUxUYWJQYW5lbFNoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoVUhUTUxUYWJQYW5lbFN0eWxlKTtcbnZhciBBUklBX0NPTlRST0xTID0gXCJhcmlhLWNvbnRyb2xzXCI7XG52YXIgQVJJQV9TRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xudmFyIFVIVE1MVGFic0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgVUhUTUxUYWJzU3R5bGUpO1xuICB9XG4gIGdldCB0YWJMaXN0KCkge1xuICAgIHJldHVybiBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYmxpc3RcIiwgdGhpcylbMF0gfHwgbnVsbDtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFiXCIsIHRoaXMpO1xuICB9XG4gIGdldCBwYW5lbHMoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFicGFuZWxcIiwgdGhpcyk7XG4gIH1cbn07XG52YXIgVUhUTUxUYWJMaXN0RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBVSFRNTFRhYkxpc3RTdHlsZSk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJ0YWJsaXN0XCIpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoKSB0aGlzLmhhbmRsZUV2ZW50KCk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgb2ZmKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIGZhbHNlKTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGlmICghZXZlbnQgfHwgZXZlbnQudHlwZSA9PT0gXCJtdXRhdGlvblwiKSB7XG4gICAgICBjb25zdCB0YWIgPSB0aGlzLnRhYnNbTWF0aC5tYXgodGhpcy5zZWxlY3RlZEluZGV4LCAwKV07XG4gICAgICByZXR1cm4gdGFiID09IG51bGwgPyB2b2lkIDAgOiB0YWIuc2V0QXR0cmlidXRlKEFSSUFfU0VMRUNURUQsIFwidHJ1ZVwiKTtcbiAgICB9XG4gICAgY29uc3QgeyBrZXkgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHRhYnMgPSBbLi4udGhpcy50YWJzXTtcbiAgICBjb25zdCBwcmV2ID0gdGFicy5maW5kSW5kZXgoKHRhYikgPT4gdGFiLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpO1xuICAgIGxldCBuZXh0ID0gcHJldjtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCBwcmV2ID09PSAtMSkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIpIHNldFNlbGVjdGVkKHRhYnNbcHJldl0pO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIiAmJiAhYXNCdXR0b24oZXZlbnQpKSB7XG4gICAgICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiIHx8IGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiArIDEpICUgdGFicy5sZW5ndGg7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiQXJyb3dVcFwiIHx8IGtleSA9PT0gXCJBcnJvd0xlZnRcIilcbiAgICAgICAgbmV4dCA9IChwcmV2IHx8IHRhYnMubGVuZ3RoKSAtIDE7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiRW5kXCIpIG5leHQgPSB0YWJzLmxlbmd0aCAtIDE7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiSG9tZVwiKSBuZXh0ID0gMDtcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJUYWJcIikgbmV4dCA9IGdldFNlbGVjdGVkSW5kZXgodGFicyk7XG4gICAgICBlbHNlIHJldHVybjtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0YWJzW3ByZXZdLnRhYkluZGV4ID0gLTE7XG4gICAgICAgIHRhYnNbbmV4dF0udGFiSW5kZXggPSAwO1xuICAgICAgfSk7XG4gICAgICBpZiAoa2V5ICE9PSBcIlRhYlwiKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRhYnNbbmV4dF0uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpO1xuICB9XG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICBzZXRTZWxlY3RlZCh0aGlzLnRhYnNbaW5kZXhdKTtcbiAgfVxufTtcbnZhciBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG52YXIgVUhUTUxUYWJFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiaWRcIiwgQVJJQV9TRUxFQ1RFRCwgQVJJQV9DT05UUk9MU107XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBVSFRNTFRhYlN0eWxlKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcInRhYlwiKTtcbiAgICB0aGlzLnRhYkluZGV4ID0gdGhpcy5zZWxlY3RlZCA/IDAgOiAtMTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFTS0lQX0FUVFJfQ0hBTkdFICYmIHRoaXMuc2VsZWN0ZWQgJiYgdGhpcy50YWJMaXN0KSB7XG4gICAgICBTS0lQX0FUVFJfQ0hBTkdFID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHRhYnMgPSBbLi4udGhpcy50YWJMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKV07XG4gICAgICBjb25zdCBwYW5lbHMgPSBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYnBhbmVsXCIsIHRoaXMudGFic0VsZW1lbnQgfHwgdGhpcyk7XG4gICAgICBjb25zdCBuZXh0UGFuZWwgPSBnZXRQYW5lbCh0aGlzLCBwYW5lbHNbdGFicy5pbmRleE9mKHRoaXMpXSk7XG4gICAgICBpZiAobmV4dFBhbmVsKSBhdHRyKG5leHRQYW5lbCwgU0FGRV9MQUJFTExFREJZLCB1c2VJZCh0aGlzKSk7XG4gICAgICB0YWJzLmZvckVhY2goKHRhYiwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSBnZXRQYW5lbCh0YWIsIHBhbmVsc1tpbmRleF0pO1xuICAgICAgICB0YWIudGFiSW5kZXggPSB0YWIgPT09IHRoaXMgPyAwIDogLTE7XG4gICAgICAgIGF0dHIodGFiLCBBUklBX1NFTEVDVEVELCBgJHt0YWIgPT09IHRoaXN9YCk7XG4gICAgICAgIGF0dHIodGFiLCBBUklBX0NPTlRST0xTLCAocGFuZWwgPT0gbnVsbCA/IHZvaWQgMCA6IHBhbmVsLmlkKSB8fCBudWxsKTtcbiAgICAgICAgaWYgKHBhbmVsKSBwYW5lbC5oaWRkZW4gPSBwYW5lbCAhPT0gbmV4dFBhbmVsO1xuICAgICAgfSk7XG4gICAgICBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJMaXN0KCkge1xuICAgIGNvbnN0IHRhYmxpc3QgPSB0aGlzLnBhcmVudEVsZW1lbnQ7XG4gICAgcmV0dXJuICh0YWJsaXN0ID09IG51bGwgPyB2b2lkIDAgOiB0YWJsaXN0Lm5vZGVOYW1lKSA9PT0gXCJVLVRBQkxJU1RcIiA/IHRhYmxpc3QgOiBudWxsO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBBUklBX1NFTEVDVEVEKSA9PT0gXCJ0cnVlXCI7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBBUklBX1NFTEVDVEVELCBgJHshIXZhbHVlfWApO1xuICB9XG4gIC8qKiBSZXRyaWV2ZXMgdGhlIG9yZGluYWwgcG9zaXRpb24gb2YgYW4gdGFiIGluIGEgdGFibGlzdC4gKi9cbiAgZ2V0IGluZGV4KCkge1xuICAgIGNvbnN0IHRhYkxpc3QgPSB0aGlzLnRhYkxpc3Q7XG4gICAgcmV0dXJuIHRhYkxpc3QgPyBbLi4udGFiTGlzdC5xdWVyeVNlbGVjdG9yQWxsKFwidS10YWJcIildLmluZGV4T2YodGhpcykgOiAwO1xuICB9XG4gIGdldCBwYW5lbCgpIHtcbiAgICByZXR1cm4gZ2V0UGFuZWwodGhpcyk7XG4gIH1cbn07XG52YXIgVUhUTUxUYWJQYW5lbEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJoaWRkZW5cIl07XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBVSFRNTFRhYlBhbmVsU3R5bGUpO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFicGFuZWxcIik7XG4gICAgdGhpcy5oaWRkZW4gPSBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicykgPT09IC0xO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGNvbnN0IGhpZGRlbiA9IHRoaXMuaGlkZGVuO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWhpZGRlblwiLCBgJHtoaWRkZW59YCk7XG4gICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIGhpZGRlbiB8fCBpc0ZvY3VzYWJsZSh0aGlzLmZpcnN0Q2hpbGQpID8gbnVsbCA6IFwiMFwiKTtcbiAgfVxuICBnZXQgdGFic0VsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcInUtdGFic1wiKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICBjb25zdCBjc3MgPSBgdS10YWJbJHtBUklBX0NPTlRST0xTfT1cIiR7dGhpcy5pZH1cIl1gO1xuICAgIHJldHVybiBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoY3NzKTtcbiAgfVxufTtcbnZhciBxdWVyeVdpdGhvdXROZXN0ZWQgPSAodGFnLCBzZWxmKSA9PiBzZWxmLnF1ZXJ5U2VsZWN0b3JBbGwoYCR7dGFnfTpub3QoOnNjb3BlIHUtdGFicGFuZWwgJHt0YWd9KWApO1xudmFyIGdldFBhbmVsID0gKHRhYiwgcGFuZWwpID0+IHtcbiAgY29uc3QgaWQyID0gYXR0cih0YWIsIEFSSUFfQ09OVFJPTFMpIHx8IHVzZUlkKHBhbmVsKTtcbiAgY29uc3QgZWwgPSBnZXRSb290KHRhYikuZ2V0RWxlbWVudEJ5SWQoaWQyKTtcbiAgcmV0dXJuIChlbCA9PSBudWxsID8gdm9pZCAwIDogZWwubm9kZU5hbWUpID09PSBcIlUtVEFCUEFORUxcIiA/IGVsIDogbnVsbDtcbn07XG52YXIgZ2V0U2VsZWN0ZWRJbmRleCA9ICh0YWJzKSA9PiBbLi4udGFic10uZmluZEluZGV4KCh0YWIpID0+IGF0dHIodGFiLCBBUklBX1NFTEVDVEVEKSA9PT0gXCJ0cnVlXCIpO1xudmFyIHNldFNlbGVjdGVkID0gKHRhYikgPT4gdGFiICYmIGF0dHIodGFiLCBcImFyaWEtZGlzYWJsZWRcIikgIT09IFwidHJ1ZVwiICYmIGF0dHIodGFiLCBcImFyaWEtc2VsZWN0ZWRcIiwgXCJ0cnVlXCIpO1xudmFyIGlzRm9jdXNhYmxlID0gKGVsKSA9PiBlbCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgIWVsLm1hdGNoZXMoJzpkaXNhYmxlZCxbdGFiaW5kZXhePVwiLVwiXScpICYmIGVsLm1hdGNoZXMoXG4gIGBbY29udGVudGVkaXRhYmxlXSxbY29udHJvbHNdLFtocmVmXSxbdGFiaW5kZXhdLGlucHV0Om5vdChbdHlwZT1cImhpZGRlblwiXSksc2VsZWN0LHRleHRhcmVhLGJ1dHRvbixzdW1tYXJ5LGlmcmFtZWBcbik7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYnNcIiwgVUhUTUxUYWJzRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYmxpc3RcIiwgVUhUTUxUYWJMaXN0RWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYlwiLCBVSFRNTFRhYkVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJwYW5lbFwiLCBVSFRNTFRhYlBhbmVsRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MVGFiRWxlbWVudCwgVUhUTUxUYWJMaXN0RWxlbWVudCwgVUhUTUxUYWJMaXN0U2hhZG93Um9vdCwgVUhUTUxUYWJMaXN0U3R5bGUsIFVIVE1MVGFiUGFuZWxFbGVtZW50LCBVSFRNTFRhYlBhbmVsU2hhZG93Um9vdCwgVUhUTUxUYWJQYW5lbFN0eWxlLCBVSFRNTFRhYlNoYWRvd1Jvb3QsIFVIVE1MVGFiU3R5bGUsIFVIVE1MVGFic0VsZW1lbnQsIFVIVE1MVGFic1NoYWRvd1Jvb3QsIFVIVE1MVGFic1N0eWxlIH07XG4iLCIvKipcbiAqIEN1c3RvbSBwb3NpdGlvbmluZyByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy92aXJ0dWFsLWVsZW1lbnRzXG4gKi9cblxuY29uc3Qgc2lkZXMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddO1xuY29uc3QgYWxpZ25tZW50cyA9IFsnc3RhcnQnLCAnZW5kJ107XG5jb25zdCBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL3NpZGVzLnJlZHVjZSgoYWNjLCBzaWRlKSA9PiBhY2MuY29uY2F0KHNpZGUsIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMF0sIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMV0pLCBbXSk7XG5jb25zdCBtaW4gPSBNYXRoLm1pbjtcbmNvbnN0IG1heCA9IE1hdGgubWF4O1xuY29uc3Qgcm91bmQgPSBNYXRoLnJvdW5kO1xuY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yO1xuY29uc3QgY3JlYXRlQ29vcmRzID0gdiA9PiAoe1xuICB4OiB2LFxuICB5OiB2XG59KTtcbmNvbnN0IG9wcG9zaXRlU2lkZU1hcCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmNvbnN0IG9wcG9zaXRlQWxpZ25tZW50TWFwID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmZ1bmN0aW9uIGNsYW1wKHN0YXJ0LCB2YWx1ZSwgZW5kKSB7XG4gIHJldHVybiBtYXgoc3RhcnQsIG1pbih2YWx1ZSwgZW5kKSk7XG59XG5mdW5jdGlvbiBldmFsdWF0ZSh2YWx1ZSwgcGFyYW0pIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKHBhcmFtKSA6IHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0U2lkZShwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QXhpc0xlbmd0aChheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG59XG5jb25zdCB5QXhpc1NpZGVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWyd0b3AnLCAnYm90dG9tJ10pO1xuZnVuY3Rpb24gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSB7XG4gIHJldHVybiB5QXhpc1NpZGVzLmhhcyhnZXRTaWRlKHBsYWNlbWVudCkpID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGdldE9wcG9zaXRlQXhpcyhnZXRTaWRlQXhpcyhwbGFjZW1lbnQpKTtcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudFNpZGVzKHBsYWNlbWVudCwgcmVjdHMsIHJ0bCkge1xuICBpZiAocnRsID09PSB2b2lkIDApIHtcbiAgICBydGwgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChhbGlnbm1lbnRBeGlzKTtcbiAgbGV0IG1haW5BbGlnbm1lbnRTaWRlID0gYWxpZ25tZW50QXhpcyA9PT0gJ3gnID8gYWxpZ25tZW50ID09PSAocnRsID8gJ2VuZCcgOiAnc3RhcnQnKSA/ICdyaWdodCcgOiAnbGVmdCcgOiBhbGlnbm1lbnQgPT09ICdzdGFydCcgPyAnYm90dG9tJyA6ICd0b3AnO1xuICBpZiAocmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gPiByZWN0cy5mbG9hdGluZ1tsZW5ndGhdKSB7XG4gICAgbWFpbkFsaWdubWVudFNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluQWxpZ25tZW50U2lkZSk7XG4gIH1cbiAgcmV0dXJuIFttYWluQWxpZ25tZW50U2lkZSwgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpbkFsaWdubWVudFNpZGUpXTtcbn1cbmZ1bmN0aW9uIGdldEV4cGFuZGVkUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgY29uc3Qgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGFsaWdubWVudCA9PiBvcHBvc2l0ZUFsaWdubWVudE1hcFthbGlnbm1lbnRdKTtcbn1cbmNvbnN0IGxyUGxhY2VtZW50ID0gWydsZWZ0JywgJ3JpZ2h0J107XG5jb25zdCBybFBsYWNlbWVudCA9IFsncmlnaHQnLCAnbGVmdCddO1xuY29uc3QgdGJQbGFjZW1lbnQgPSBbJ3RvcCcsICdib3R0b20nXTtcbmNvbnN0IGJ0UGxhY2VtZW50ID0gWydib3R0b20nLCAndG9wJ107XG5mdW5jdGlvbiBnZXRTaWRlTGlzdChzaWRlLCBpc1N0YXJ0LCBydGwpIHtcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgaWYgKHJ0bCkgcmV0dXJuIGlzU3RhcnQgPyBybFBsYWNlbWVudCA6IGxyUGxhY2VtZW50O1xuICAgICAgcmV0dXJuIGlzU3RhcnQgPyBsclBsYWNlbWVudCA6IHJsUGxhY2VtZW50O1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiBpc1N0YXJ0ID8gdGJQbGFjZW1lbnQgOiBidFBsYWNlbWVudDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFtdO1xuICB9XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKHBsYWNlbWVudCwgZmxpcEFsaWdubWVudCwgZGlyZWN0aW9uLCBydGwpIHtcbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGxldCBsaXN0ID0gZ2V0U2lkZUxpc3QoZ2V0U2lkZShwbGFjZW1lbnQpLCBkaXJlY3Rpb24gPT09ICdzdGFydCcsIHJ0bCk7XG4gIGlmIChhbGlnbm1lbnQpIHtcbiAgICBsaXN0ID0gbGlzdC5tYXAoc2lkZSA9PiBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnQpO1xuICAgIGlmIChmbGlwQWxpZ25tZW50KSB7XG4gICAgICBsaXN0ID0gbGlzdC5jb25jYXQobGlzdC5tYXAoZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxpc3Q7XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgc2lkZSA9PiBvcHBvc2l0ZVNpZGVNYXBbc2lkZV0pO1xufVxuZnVuY3Rpb24gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICAgIC4uLnBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhZGRpbmdPYmplY3QocGFkZGluZykge1xuICByZXR1cm4gdHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSA6IHtcbiAgICB0b3A6IHBhZGRpbmcsXG4gICAgcmlnaHQ6IHBhZGRpbmcsXG4gICAgYm90dG9tOiBwYWRkaW5nLFxuICAgIGxlZnQ6IHBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gcmVjdDtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIGxlZnQ6IHgsXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmV4cG9ydCB7IGFsaWdubWVudHMsIGNsYW1wLCBjcmVhdGVDb29yZHMsIGV2YWx1YXRlLCBleHBhbmRQYWRkaW5nT2JqZWN0LCBmbG9vciwgZ2V0QWxpZ25tZW50LCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0QXhpc0xlbmd0aCwgZ2V0RXhwYW5kZWRQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBeGlzLCBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZVBsYWNlbWVudCwgZ2V0UGFkZGluZ09iamVjdCwgZ2V0U2lkZSwgZ2V0U2lkZUF4aXMsIG1heCwgbWluLCBwbGFjZW1lbnRzLCByZWN0VG9DbGllbnRSZWN0LCByb3VuZCwgc2lkZXMgfTtcbiIsImltcG9ydCB7IGdldFNpZGVBeGlzLCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBeGlzTGVuZ3RoLCBnZXRTaWRlLCBnZXRBbGlnbm1lbnQsIGV2YWx1YXRlLCBnZXRQYWRkaW5nT2JqZWN0LCByZWN0VG9DbGllbnRSZWN0LCBtaW4sIGNsYW1wLCBwbGFjZW1lbnRzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQsIGdldE9wcG9zaXRlUGxhY2VtZW50LCBnZXRFeHBhbmRlZFBsYWNlbWVudHMsIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMsIHNpZGVzLCBtYXgsIGdldE9wcG9zaXRlQXhpcyB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5leHBvcnQgeyByZWN0VG9DbGllbnRSZWN0IH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcblxuZnVuY3Rpb24gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQoX3JlZiwgcGxhY2VtZW50LCBydGwpIHtcbiAgbGV0IHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmdcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IHNpZGVBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25MZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGFsaWdubWVudEF4aXMpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBpc1ZlcnRpY2FsID0gc2lkZUF4aXMgPT09ICd5JztcbiAgY29uc3QgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGZsb2F0aW5nLndpZHRoIC8gMjtcbiAgY29uc3QgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBmbG9hdGluZy5oZWlnaHQgLyAyO1xuICBjb25zdCBjb21tb25BbGlnbiA9IHJlZmVyZW5jZVthbGlnbkxlbmd0aF0gLyAyIC0gZmxvYXRpbmdbYWxpZ25MZW5ndGhdIC8gMjtcbiAgbGV0IGNvb3JkcztcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBmbG9hdGluZy5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54IC0gZmxvYXRpbmcud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cbiAgc3dpdGNoIChnZXRBbGlnbm1lbnQocGxhY2VtZW50KSkge1xuICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgIGNvb3Jkc1thbGlnbm1lbnRBeGlzXSAtPSBjb21tb25BbGlnbiAqIChydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmQnOlxuICAgICAgY29vcmRzW2FsaWdubWVudEF4aXNdICs9IGNvbW1vbkFsaWduICogKHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBjb29yZHM7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICpcbiAqIFRoaXMgZXhwb3J0IGRvZXMgbm90IGhhdmUgYW55IGBwbGF0Zm9ybWAgaW50ZXJmYWNlIGxvZ2ljLiBZb3Ugd2lsbCBuZWVkIHRvXG4gKiB3cml0ZSBvbmUgZm9yIHRoZSBwbGF0Zm9ybSB5b3UgYXJlIHVzaW5nIEZsb2F0aW5nIFVJIHdpdGguXG4gKi9cbmNvbnN0IGNvbXB1dGVQb3NpdGlvbiA9IGFzeW5jIChyZWZlcmVuY2UsIGZsb2F0aW5nLCBjb25maWcpID0+IHtcbiAgY29uc3Qge1xuICAgIHBsYWNlbWVudCA9ICdib3R0b20nLFxuICAgIHN0cmF0ZWd5ID0gJ2Fic29sdXRlJyxcbiAgICBtaWRkbGV3YXJlID0gW10sXG4gICAgcGxhdGZvcm1cbiAgfSA9IGNvbmZpZztcbiAgY29uc3QgdmFsaWRNaWRkbGV3YXJlID0gbWlkZGxld2FyZS5maWx0ZXIoQm9vbGVhbik7XG4gIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZmxvYXRpbmcpKTtcbiAgbGV0IHJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmcsXG4gICAgc3RyYXRlZ3lcbiAgfSk7XG4gIGxldCB7XG4gICAgeCxcbiAgICB5XG4gIH0gPSBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChyZWN0cywgcGxhY2VtZW50LCBydGwpO1xuICBsZXQgc3RhdGVmdWxQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gIGxldCBtaWRkbGV3YXJlRGF0YSA9IHt9O1xuICBsZXQgcmVzZXRDb3VudCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsaWRNaWRkbGV3YXJlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIGZuXG4gICAgfSA9IHZhbGlkTWlkZGxld2FyZVtpXTtcbiAgICBjb25zdCB7XG4gICAgICB4OiBuZXh0WCxcbiAgICAgIHk6IG5leHRZLFxuICAgICAgZGF0YSxcbiAgICAgIHJlc2V0XG4gICAgfSA9IGF3YWl0IGZuKHtcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgaW5pdGlhbFBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICAgIHN0cmF0ZWd5LFxuICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICBmbG9hdGluZ1xuICAgICAgfVxuICAgIH0pO1xuICAgIHggPSBuZXh0WCAhPSBudWxsID8gbmV4dFggOiB4O1xuICAgIHkgPSBuZXh0WSAhPSBudWxsID8gbmV4dFkgOiB5O1xuICAgIG1pZGRsZXdhcmVEYXRhID0ge1xuICAgICAgLi4ubWlkZGxld2FyZURhdGEsXG4gICAgICBbbmFtZV06IHtcbiAgICAgICAgLi4ubWlkZGxld2FyZURhdGFbbmFtZV0sXG4gICAgICAgIC4uLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChyZXNldCAmJiByZXNldENvdW50IDw9IDUwKSB7XG4gICAgICByZXNldENvdW50Kys7XG4gICAgICBpZiAodHlwZW9mIHJlc2V0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAocmVzZXQucGxhY2VtZW50KSB7XG4gICAgICAgICAgc3RhdGVmdWxQbGFjZW1lbnQgPSByZXNldC5wbGFjZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc2V0LnJlY3RzKSB7XG4gICAgICAgICAgcmVjdHMgPSByZXNldC5yZWN0cyA9PT0gdHJ1ZSA/IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgICAgICBmbG9hdGluZyxcbiAgICAgICAgICAgIHN0cmF0ZWd5XG4gICAgICAgICAgfSkgOiByZXNldC5yZWN0cztcbiAgICAgICAgfVxuICAgICAgICAoe1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeVxuICAgICAgICB9ID0gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQocmVjdHMsIHN0YXRlZnVsUGxhY2VtZW50LCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGkgPSAtMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICBzdHJhdGVneSxcbiAgICBtaWRkbGV3YXJlRGF0YVxuICB9O1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBvZiBvdmVyZmxvdyBzaWRlIG9mZnNldHMgdGhhdCBkZXRlcm1pbmUgaG93IG11Y2ggdGhlXG4gKiBlbGVtZW50IGlzIG92ZXJmbG93aW5nIGEgZ2l2ZW4gY2xpcHBpbmcgYm91bmRhcnkgb24gZWFjaCBzaWRlLlxuICogLSBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBib3VuZGFyeSBieSB0aGF0IG51bWJlciBvZiBwaXhlbHNcbiAqIC0gbmVnYXRpdmUgPSBob3cgbWFueSBwaXhlbHMgbGVmdCBiZWZvcmUgaXQgd2lsbCBvdmVyZmxvd1xuICogLSAwID0gbGllcyBmbHVzaCB3aXRoIHRoZSBib3VuZGFyeVxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2RldGVjdE92ZXJmbG93XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIHZhciBfYXdhaXQkcGxhdGZvcm0kaXNFbGU7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgY29uc3Qge1xuICAgIHgsXG4gICAgeSxcbiAgICBwbGF0Zm9ybSxcbiAgICByZWN0cyxcbiAgICBlbGVtZW50cyxcbiAgICBzdHJhdGVneVxuICB9ID0gc3RhdGU7XG4gIGNvbnN0IHtcbiAgICBib3VuZGFyeSA9ICdjbGlwcGluZ0FuY2VzdG9ycycsXG4gICAgcm9vdEJvdW5kYXJ5ID0gJ3ZpZXdwb3J0JyxcbiAgICBlbGVtZW50Q29udGV4dCA9ICdmbG9hdGluZycsXG4gICAgYWx0Qm91bmRhcnkgPSBmYWxzZSxcbiAgICBwYWRkaW5nID0gMFxuICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgY29uc3QgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSAnZmxvYXRpbmcnID8gJ3JlZmVyZW5jZScgOiAnZmxvYXRpbmcnO1xuICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICBjb25zdCBjbGlwcGluZ0NsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KGF3YWl0IHBsYXRmb3JtLmdldENsaXBwaW5nUmVjdCh7XG4gICAgZWxlbWVudDogKChfYXdhaXQkcGxhdGZvcm0kaXNFbGUgPSBhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoZWxlbWVudCkpKSAhPSBudWxsID8gX2F3YWl0JHBsYXRmb3JtJGlzRWxlIDogdHJ1ZSkgPyBlbGVtZW50IDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCAoYXdhaXQgKHBsYXRmb3JtLmdldERvY3VtZW50RWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnRzLmZsb2F0aW5nKSkpLFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9KSk7XG4gIGNvbnN0IHJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gJ2Zsb2F0aW5nJyA/IHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGg6IHJlY3RzLmZsb2F0aW5nLndpZHRoLFxuICAgIGhlaWdodDogcmVjdHMuZmxvYXRpbmcuaGVpZ2h0XG4gIH0gOiByZWN0cy5yZWZlcmVuY2U7XG4gIGNvbnN0IG9mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBvZmZzZXRTY2FsZSA9IChhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQob2Zmc2V0UGFyZW50KSkpID8gKGF3YWl0IChwbGF0Zm9ybS5nZXRTY2FsZSA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0U2NhbGUob2Zmc2V0UGFyZW50KSkpIHx8IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfSA6IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfTtcbiAgY29uc3QgZWxlbWVudENsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KHBsYXRmb3JtLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0ID8gYXdhaXQgcGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Qoe1xuICAgIGVsZW1lbnRzLFxuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0pIDogcmVjdCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiAoY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wKSAvIG9mZnNldFNjYWxlLnksXG4gICAgYm90dG9tOiAoZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSAvIG9mZnNldFNjYWxlLnksXG4gICAgbGVmdDogKGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCkgLyBvZmZzZXRTY2FsZS54LFxuICAgIHJpZ2h0OiAoZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0KSAvIG9mZnNldFNjYWxlLnhcbiAgfTtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIHBvc2l0aW9uIGFuIGlubmVyIGVsZW1lbnQgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgc28gdGhhdCBpdFxuICogYXBwZWFycyBjZW50ZXJlZCB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXJyb3dcbiAqL1xuY29uc3QgYXJyb3cgPSBvcHRpb25zID0+ICh7XG4gIG5hbWU6ICdhcnJvdycsXG4gIG9wdGlvbnMsXG4gIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgY29uc3Qge1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBwbGFjZW1lbnQsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHMsXG4gICAgICBtaWRkbGV3YXJlRGF0YVxuICAgIH0gPSBzdGF0ZTtcbiAgICAvLyBTaW5jZSBgZWxlbWVudGAgaXMgcmVxdWlyZWQsIHdlIGRvbid0IFBhcnRpYWw8PiB0aGUgdHlwZS5cbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcGFkZGluZyA9IDBcbiAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpIHx8IHt9O1xuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgeCxcbiAgICAgIHlcbiAgICB9O1xuICAgIGNvbnN0IGF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gICAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChheGlzKTtcbiAgICBjb25zdCBhcnJvd0RpbWVuc2lvbnMgPSBhd2FpdCBwbGF0Zm9ybS5nZXREaW1lbnNpb25zKGVsZW1lbnQpO1xuICAgIGNvbnN0IGlzWUF4aXMgPSBheGlzID09PSAneSc7XG4gICAgY29uc3QgbWluUHJvcCA9IGlzWUF4aXMgPyAndG9wJyA6ICdsZWZ0JztcbiAgICBjb25zdCBtYXhQcm9wID0gaXNZQXhpcyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICBjb25zdCBjbGllbnRQcm9wID0gaXNZQXhpcyA/ICdjbGllbnRIZWlnaHQnIDogJ2NsaWVudFdpZHRoJztcbiAgICBjb25zdCBlbmREaWZmID0gcmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gKyByZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBjb29yZHNbYXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIGNvbnN0IHN0YXJ0RGlmZiA9IGNvb3Jkc1theGlzXSAtIHJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgICBjb25zdCBhcnJvd09mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50KSk7XG4gICAgbGV0IGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGFycm93T2Zmc2V0UGFyZW50W2NsaWVudFByb3BdIDogMDtcblxuICAgIC8vIERPTSBwbGF0Zm9ybSBjYW4gcmV0dXJuIGB3aW5kb3dgIGFzIHRoZSBgb2Zmc2V0UGFyZW50YC5cbiAgICBpZiAoIWNsaWVudFNpemUgfHwgIShhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoYXJyb3dPZmZzZXRQYXJlbnQpKSkpIHtcbiAgICAgIGNsaWVudFNpemUgPSBlbGVtZW50cy5mbG9hdGluZ1tjbGllbnRQcm9wXSB8fCByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIH1cbiAgICBjb25zdCBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjtcblxuICAgIC8vIElmIHRoZSBwYWRkaW5nIGlzIGxhcmdlIGVub3VnaCB0aGF0IGl0IGNhdXNlcyB0aGUgYXJyb3cgdG8gbm8gbG9uZ2VyIGJlXG4gICAgLy8gY2VudGVyZWQsIG1vZGlmeSB0aGUgcGFkZGluZyBzbyB0aGF0IGl0IGlzIGNlbnRlcmVkLlxuICAgIGNvbnN0IGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcgPSBjbGllbnRTaXplIC8gMiAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiAtIDE7XG4gICAgY29uc3QgbWluUGFkZGluZyA9IG1pbihwYWRkaW5nT2JqZWN0W21pblByb3BdLCBsYXJnZXN0UG9zc2libGVQYWRkaW5nKTtcbiAgICBjb25zdCBtYXhQYWRkaW5nID0gbWluKHBhZGRpbmdPYmplY3RbbWF4UHJvcF0sIGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcpO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBmbG9hdGluZyBlbGVtZW50IGlmIHRoZSBjZW50ZXJcbiAgICAvLyBwb2ludCBpcyBvdXRzaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50J3MgYm91bmRzLlxuICAgIGNvbnN0IG1pbiQxID0gbWluUGFkZGluZztcbiAgICBjb25zdCBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLSBtYXhQYWRkaW5nO1xuICAgIGNvbnN0IGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gICAgY29uc3Qgb2Zmc2V0ID0gY2xhbXAobWluJDEsIGNlbnRlciwgbWF4KTtcblxuICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGwgZW5vdWdoIHRoYXQgdGhlIGFycm93J3MgcGFkZGluZyBjYXVzZXMgaXQgdG9cbiAgICAvLyB0byBwb2ludCB0byBub3RoaW5nIGZvciBhbiBhbGlnbmVkIHBsYWNlbWVudCwgYWRqdXN0IHRoZSBvZmZzZXQgb2YgdGhlXG4gICAgLy8gZmxvYXRpbmcgZWxlbWVudCBpdHNlbGYuIFRvIGVuc3VyZSBgc2hpZnQoKWAgY29udGludWVzIHRvIHRha2UgYWN0aW9uLFxuICAgIC8vIGEgc2luZ2xlIHJlc2V0IGlzIHBlcmZvcm1lZCB3aGVuIHRoaXMgaXMgdHJ1ZS5cbiAgICBjb25zdCBzaG91bGRBZGRPZmZzZXQgPSAhbWlkZGxld2FyZURhdGEuYXJyb3cgJiYgZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT0gbnVsbCAmJiBjZW50ZXIgIT09IG9mZnNldCAmJiByZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSAvIDIgLSAoY2VudGVyIDwgbWluJDEgPyBtaW5QYWRkaW5nIDogbWF4UGFkZGluZykgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgPCAwO1xuICAgIGNvbnN0IGFsaWdubWVudE9mZnNldCA9IHNob3VsZEFkZE9mZnNldCA/IGNlbnRlciA8IG1pbiQxID8gY2VudGVyIC0gbWluJDEgOiBjZW50ZXIgLSBtYXggOiAwO1xuICAgIHJldHVybiB7XG4gICAgICBbYXhpc106IGNvb3Jkc1theGlzXSArIGFsaWdubWVudE9mZnNldCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgW2F4aXNdOiBvZmZzZXQsXG4gICAgICAgIGNlbnRlck9mZnNldDogY2VudGVyIC0gb2Zmc2V0IC0gYWxpZ25tZW50T2Zmc2V0LFxuICAgICAgICAuLi4oc2hvdWxkQWRkT2Zmc2V0ICYmIHtcbiAgICAgICAgICBhbGlnbm1lbnRPZmZzZXRcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICByZXNldDogc2hvdWxkQWRkT2Zmc2V0XG4gICAgfTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGdldFBsYWNlbWVudExpc3QoYWxpZ25tZW50LCBhdXRvQWxpZ25tZW50LCBhbGxvd2VkUGxhY2VtZW50cykge1xuICBjb25zdCBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50ID0gYWxpZ25tZW50ID8gWy4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgPT09IGFsaWdubWVudCksIC4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT09IGFsaWdubWVudCldIDogYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRTaWRlKHBsYWNlbWVudCkgPT09IHBsYWNlbWVudCk7XG4gIHJldHVybiBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50LmZpbHRlcihwbGFjZW1lbnQgPT4ge1xuICAgIGlmIChhbGlnbm1lbnQpIHtcbiAgICAgIHJldHVybiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSA9PT0gYWxpZ25tZW50IHx8IChhdXRvQWxpZ25tZW50ID8gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSAhPT0gcGxhY2VtZW50IDogZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYXV0b1BsYWNlbWVudCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRhdXRvUCwgX21pZGRsZXdhcmVEYXRhJGF1dG9QMiwgX3BsYWNlbWVudHNUaGF0Rml0T25FO1xuICAgICAgY29uc3Qge1xuICAgICAgICByZWN0cyxcbiAgICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBhbGlnbm1lbnQsXG4gICAgICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cyxcbiAgICAgICAgYXV0b0FsaWdubWVudCA9IHRydWUsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHMkMSA9IGFsaWdubWVudCAhPT0gdW5kZWZpbmVkIHx8IGFsbG93ZWRQbGFjZW1lbnRzID09PSBwbGFjZW1lbnRzID8gZ2V0UGxhY2VtZW50TGlzdChhbGlnbm1lbnQgfHwgbnVsbCwgYXV0b0FsaWdubWVudCwgYWxsb3dlZFBsYWNlbWVudHMpIDogYWxsb3dlZFBsYWNlbWVudHM7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gKChfbWlkZGxld2FyZURhdGEkYXV0b1AgPSBtaWRkbGV3YXJlRGF0YS5hdXRvUGxhY2VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGF1dG9QLmluZGV4KSB8fCAwO1xuICAgICAgY29uc3QgY3VycmVudFBsYWNlbWVudCA9IHBsYWNlbWVudHMkMVtjdXJyZW50SW5kZXhdO1xuICAgICAgaWYgKGN1cnJlbnRQbGFjZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBjb25zdCBhbGlnbm1lbnRTaWRlcyA9IGdldEFsaWdubWVudFNpZGVzKGN1cnJlbnRQbGFjZW1lbnQsIHJlY3RzLCBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSkpO1xuXG4gICAgICAvLyBNYWtlIGBjb21wdXRlQ29vcmRzYCBzdGFydCBmcm9tIHRoZSByaWdodCBwbGFjZS5cbiAgICAgIGlmIChwbGFjZW1lbnQgIT09IGN1cnJlbnRQbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnRzJDFbMF1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50T3ZlcmZsb3dzID0gW292ZXJmbG93W2dldFNpZGUoY3VycmVudFBsYWNlbWVudCldLCBvdmVyZmxvd1thbGlnbm1lbnRTaWRlc1swXV0sIG92ZXJmbG93W2FsaWdubWVudFNpZGVzWzFdXV07XG4gICAgICBjb25zdCBhbGxPdmVyZmxvd3MgPSBbLi4uKCgoX21pZGRsZXdhcmVEYXRhJGF1dG9QMiA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AyLm92ZXJmbG93cykgfHwgW10pLCB7XG4gICAgICAgIHBsYWNlbWVudDogY3VycmVudFBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzOiBjdXJyZW50T3ZlcmZsb3dzXG4gICAgICB9XTtcbiAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzJDFbY3VycmVudEluZGV4ICsgMV07XG5cbiAgICAgIC8vIFRoZXJlIGFyZSBtb3JlIHBsYWNlbWVudHMgdG8gY2hlY2suXG4gICAgICBpZiAobmV4dFBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGluZGV4OiBjdXJyZW50SW5kZXggKyAxLFxuICAgICAgICAgICAgb3ZlcmZsb3dzOiBhbGxPdmVyZmxvd3NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IG5leHRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UgPSBhbGxPdmVyZmxvd3MubWFwKGQgPT4ge1xuICAgICAgICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQoZC5wbGFjZW1lbnQpO1xuICAgICAgICByZXR1cm4gW2QucGxhY2VtZW50LCBhbGlnbm1lbnQgJiYgY3Jvc3NBeGlzID9cbiAgICAgICAgLy8gQ2hlY2sgYWxvbmcgdGhlIG1haW5BeGlzIGFuZCBtYWluIGNyb3NzQXhpcyBzaWRlLlxuICAgICAgICBkLm92ZXJmbG93cy5zbGljZSgwLCAyKS5yZWR1Y2UoKGFjYywgdikgPT4gYWNjICsgdiwgMCkgOlxuICAgICAgICAvLyBDaGVjayBvbmx5IHRoZSBtYWluQXhpcy5cbiAgICAgICAgZC5vdmVyZmxvd3NbMF0sIGQub3ZlcmZsb3dzXTtcbiAgICAgIH0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHNUaGF0Rml0T25FYWNoU2lkZSA9IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZS5maWx0ZXIoZCA9PiBkWzJdLnNsaWNlKDAsXG4gICAgICAvLyBBbGlnbmVkIHBsYWNlbWVudHMgc2hvdWxkIG5vdCBjaGVjayB0aGVpciBvcHBvc2l0ZSBjcm9zc0F4aXNcbiAgICAgIC8vIHNpZGUuXG4gICAgICBnZXRBbGlnbm1lbnQoZFswXSkgPyAyIDogMykuZXZlcnkodiA9PiB2IDw9IDApKTtcbiAgICAgIGNvbnN0IHJlc2V0UGxhY2VtZW50ID0gKChfcGxhY2VtZW50c1RoYXRGaXRPbkUgPSBwbGFjZW1lbnRzVGhhdEZpdE9uRWFjaFNpZGVbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfcGxhY2VtZW50c1RoYXRGaXRPbkVbMF0pIHx8IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZVswXVswXTtcbiAgICAgIGlmIChyZXNldFBsYWNlbWVudCAhPT0gcGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXG4gICAgICAgICAgICBvdmVyZmxvd3M6IGFsbE92ZXJmbG93c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogcmVzZXRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2ZsaXAnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkYXJyb3csIF9taWRkbGV3YXJlRGF0YSRmbGlwO1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgaW5pdGlhbFBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWUsXG4gICAgICAgIGZhbGxiYWNrUGxhY2VtZW50czogc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgICBmYWxsYmFja1N0cmF0ZWd5ID0gJ2Jlc3RGaXQnLFxuICAgICAgICBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uID0gJ25vbmUnLFxuICAgICAgICBmbGlwQWxpZ25tZW50ID0gdHJ1ZSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuXG4gICAgICAvLyBJZiBhIHJlc2V0IGJ5IHRoZSBhcnJvdyB3YXMgY2F1c2VkIGR1ZSB0byBhbiBhbGlnbm1lbnQgb2Zmc2V0IGJlaW5nXG4gICAgICAvLyBhZGRlZCwgd2Ugc2hvdWxkIHNraXAgYW55IGxvZ2ljIG5vdyBzaW5jZSBgZmxpcCgpYCBoYXMgYWxyZWFkeSBkb25lIGl0c1xuICAgICAgLy8gd29yay5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjU0OSNpc3N1ZWNvbW1lbnQtMTcxOTYwMTY0M1xuICAgICAgaWYgKChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpbml0aWFsU2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhpbml0aWFsUGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGlzQmFzZVBsYWNlbWVudCA9IGdldFNpZGUoaW5pdGlhbFBsYWNlbWVudCkgPT09IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gICAgICBjb25zdCBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcEFsaWdubWVudCA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChpbml0aWFsUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZFBsYWNlbWVudHMoaW5pdGlhbFBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiA9IGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gIT09ICdub25lJztcbiAgICAgIGlmICghc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzICYmIGhhc0ZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24pIHtcbiAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzLnB1c2goLi4uZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cyhpbml0aWFsUGxhY2VtZW50LCBmbGlwQWxpZ25tZW50LCBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uLCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBsYWNlbWVudHMgPSBbaW5pdGlhbFBsYWNlbWVudCwgLi4uZmFsbGJhY2tQbGFjZW1lbnRzXTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBvdmVyZmxvd3MgPSBbXTtcbiAgICAgIGxldCBvdmVyZmxvd3NEYXRhID0gKChfbWlkZGxld2FyZURhdGEkZmxpcCA9IG1pZGRsZXdhcmVEYXRhLmZsaXApID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkZmxpcC5vdmVyZmxvd3MpIHx8IFtdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZV0pO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IHNpZGVzID0gZ2V0QWxpZ25tZW50U2lkZXMocGxhY2VtZW50LCByZWN0cywgcnRsKTtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZXNbMF1dLCBvdmVyZmxvd1tzaWRlc1sxXV0pO1xuICAgICAgfVxuICAgICAgb3ZlcmZsb3dzRGF0YSA9IFsuLi5vdmVyZmxvd3NEYXRhLCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzXG4gICAgICB9XTtcblxuICAgICAgLy8gT25lIG9yIG1vcmUgc2lkZXMgaXMgb3ZlcmZsb3dpbmcuXG4gICAgICBpZiAoIW92ZXJmbG93cy5ldmVyeShzaWRlID0+IHNpZGUgPD0gMCkpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRmbGlwMiwgX292ZXJmbG93c0RhdGEkZmlsdGVyO1xuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoKChfbWlkZGxld2FyZURhdGEkZmxpcDIgPSBtaWRkbGV3YXJlRGF0YS5mbGlwKSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGZsaXAyLmluZGV4KSB8fCAwKSArIDE7XG4gICAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzW25leHRJbmRleF07XG4gICAgICAgIGlmIChuZXh0UGxhY2VtZW50KSB7XG4gICAgICAgICAgY29uc3QgaWdub3JlQ3Jvc3NBeGlzT3ZlcmZsb3cgPSBjaGVja0Nyb3NzQXhpcyA9PT0gJ2FsaWdubWVudCcgPyBpbml0aWFsU2lkZUF4aXMgIT09IGdldFNpZGVBeGlzKG5leHRQbGFjZW1lbnQpIDogZmFsc2U7XG4gICAgICAgICAgaWYgKCFpZ25vcmVDcm9zc0F4aXNPdmVyZmxvdyB8fFxuICAgICAgICAgIC8vIFdlIGxlYXZlIHRoZSBjdXJyZW50IG1haW4gYXhpcyBvbmx5IGlmIGV2ZXJ5IHBsYWNlbWVudCBvbiB0aGF0IGF4aXNcbiAgICAgICAgICAvLyBvdmVyZmxvd3MgdGhlIG1haW4gYXhpcy5cbiAgICAgICAgICBvdmVyZmxvd3NEYXRhLmV2ZXJ5KGQgPT4gZ2V0U2lkZUF4aXMoZC5wbGFjZW1lbnQpID09PSBpbml0aWFsU2lkZUF4aXMgPyBkLm92ZXJmbG93c1swXSA+IDAgOiB0cnVlKSkge1xuICAgICAgICAgICAgLy8gVHJ5IG5leHQgcGxhY2VtZW50IGFuZCByZS1ydW4gdGhlIGxpZmVjeWNsZS5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBpbmRleDogbmV4dEluZGV4LFxuICAgICAgICAgICAgICAgIG92ZXJmbG93czogb3ZlcmZsb3dzRGF0YVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpcnN0LCBmaW5kIHRoZSBjYW5kaWRhdGVzIHRoYXQgZml0IG9uIHRoZSBtYWluQXhpcyBzaWRlIG9mIG92ZXJmbG93LFxuICAgICAgICAvLyB0aGVuIGZpbmQgdGhlIHBsYWNlbWVudCB0aGF0IGZpdHMgdGhlIGJlc3Qgb24gdGhlIG1haW4gY3Jvc3NBeGlzIHNpZGUuXG4gICAgICAgIGxldCByZXNldFBsYWNlbWVudCA9IChfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IGQub3ZlcmZsb3dzWzBdIDw9IDApLnNvcnQoKGEsIGIpID0+IGEub3ZlcmZsb3dzWzFdIC0gYi5vdmVyZmxvd3NbMV0pWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX292ZXJmbG93c0RhdGEkZmlsdGVyLnBsYWNlbWVudDtcblxuICAgICAgICAvLyBPdGhlcndpc2UgZmFsbGJhY2suXG4gICAgICAgIGlmICghcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICBzd2l0Y2ggKGZhbGxiYWNrU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Jlc3RGaXQnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIF9vdmVyZmxvd3NEYXRhJGZpbHRlcjI7XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2VtZW50ID0gKF9vdmVyZmxvd3NEYXRhJGZpbHRlcjIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTaWRlQXhpcyA9IGdldFNpZGVBeGlzKGQucGxhY2VtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTaWRlQXhpcyA9PT0gaW5pdGlhbFNpZGVBeGlzIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGJpYXMgdG8gdGhlIGB5YCBzaWRlIGF4aXMgZHVlIHRvIGhvcml6b250YWxcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVhZGluZyBkaXJlY3Rpb25zIGZhdm9yaW5nIGdyZWF0ZXIgd2lkdGguXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTaWRlQXhpcyA9PT0gJ3knO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSkubWFwKGQgPT4gW2QucGxhY2VtZW50LCBkLm92ZXJmbG93cy5maWx0ZXIob3ZlcmZsb3cgPT4gb3ZlcmZsb3cgPiAwKS5yZWR1Y2UoKGFjYywgb3ZlcmZsb3cpID0+IGFjYyArIG92ZXJmbG93LCAwKV0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9vdmVyZmxvd3NEYXRhJGZpbHRlcjJbMF07XG4gICAgICAgICAgICAgICAgaWYgKHBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdpbml0aWFsUGxhY2VtZW50JzpcbiAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBpbml0aWFsUGxhY2VtZW50O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBsYWNlbWVudCAhPT0gcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgICAgcGxhY2VtZW50OiByZXNldFBsYWNlbWVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQsXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoXG4gIH07XG59XG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIHNpZGVzLnNvbWUoc2lkZSA9PiBvdmVyZmxvd1tzaWRlXSA+PSAwKTtcbn1cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBoaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50IGluIGFwcGxpY2FibGUgc2l0dWF0aW9ucywgc3VjaCBhc1xuICogd2hlbiBpdCBpcyBub3QgaW4gdGhlIHNhbWUgY2xpcHBpbmcgY29udGV4dCBhcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaGlkZVxuICovXG5jb25zdCBoaWRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdoaWRlJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlY3RzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0cmF0ZWd5ID0gJ3JlZmVyZW5jZUhpZGRlbicsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIHN3aXRjaCAoc3RyYXRlZ3kpIHtcbiAgICAgICAgY2FzZSAncmVmZXJlbmNlSGlkZGVuJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdHMucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VIaWRkZW5PZmZzZXRzOiBvZmZzZXRzLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhpZGRlbjogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICdlc2NhcGVkJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5mbG9hdGluZyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZXNjYXBlZE9mZnNldHM6IG9mZnNldHMsXG4gICAgICAgICAgICAgICAgZXNjYXBlZDogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3RzKSB7XG4gIGNvbnN0IG1pblggPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5sZWZ0KSk7XG4gIGNvbnN0IG1pblkgPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC50b3ApKTtcbiAgY29uc3QgbWF4WCA9IG1heCguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LnJpZ2h0KSk7XG4gIGNvbnN0IG1heFkgPSBtYXgoLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5ib3R0b20pKTtcbiAgcmV0dXJuIHtcbiAgICB4OiBtaW5YLFxuICAgIHk6IG1pblksXG4gICAgd2lkdGg6IG1heFggLSBtaW5YLFxuICAgIGhlaWdodDogbWF4WSAtIG1pbllcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFJlY3RzQnlMaW5lKHJlY3RzKSB7XG4gIGNvbnN0IHNvcnRlZFJlY3RzID0gcmVjdHMuc2xpY2UoKS5zb3J0KChhLCBiKSA9PiBhLnkgLSBiLnkpO1xuICBjb25zdCBncm91cHMgPSBbXTtcbiAgbGV0IHByZXZSZWN0ID0gbnVsbDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRSZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHJlY3QgPSBzb3J0ZWRSZWN0c1tpXTtcbiAgICBpZiAoIXByZXZSZWN0IHx8IHJlY3QueSAtIHByZXZSZWN0LnkgPiBwcmV2UmVjdC5oZWlnaHQgLyAyKSB7XG4gICAgICBncm91cHMucHVzaChbcmVjdF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cHNbZ3JvdXBzLmxlbmd0aCAtIDFdLnB1c2gocmVjdCk7XG4gICAgfVxuICAgIHByZXZSZWN0ID0gcmVjdDtcbiAgfVxuICByZXR1cm4gZ3JvdXBzLm1hcChyZWN0ID0+IHJlY3RUb0NsaWVudFJlY3QoZ2V0Qm91bmRpbmdSZWN0KHJlY3QpKSk7XG59XG4vKipcbiAqIFByb3ZpZGVzIGltcHJvdmVkIHBvc2l0aW9uaW5nIGZvciBpbmxpbmUgcmVmZXJlbmNlIGVsZW1lbnRzIHRoYXQgY2FuIHNwYW5cbiAqIG92ZXIgbXVsdGlwbGUgbGluZXMsIHN1Y2ggYXMgaHlwZXJsaW5rcyBvciByYW5nZSBzZWxlY3Rpb25zLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2lubGluZVxuICovXG5jb25zdCBpbmxpbmUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2lubGluZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIHN0cmF0ZWd5XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICAvLyBBIE1vdXNlRXZlbnQncyBjbGllbnR7WCxZfSBjb29yZHMgY2FuIGJlIHVwIHRvIDIgcGl4ZWxzIG9mZiBhXG4gICAgICAvLyBDbGllbnRSZWN0J3MgYm91bmRzLCBkZXNwaXRlIHRoZSBldmVudCBsaXN0ZW5lciBiZWluZyB0cmlnZ2VyZWQuIEFcbiAgICAgIC8vIHBhZGRpbmcgb2YgMiBzZWVtcyB0byBoYW5kbGUgdGhpcyBpc3N1ZS5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGFkZGluZyA9IDIsXG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBuYXRpdmVDbGllbnRSZWN0cyA9IEFycmF5LmZyb20oKGF3YWl0IChwbGF0Zm9ybS5nZXRDbGllbnRSZWN0cyA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0Q2xpZW50UmVjdHMoZWxlbWVudHMucmVmZXJlbmNlKSkpIHx8IFtdKTtcbiAgICAgIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0UmVjdHNCeUxpbmUobmF0aXZlQ2xpZW50UmVjdHMpO1xuICAgICAgY29uc3QgZmFsbGJhY2sgPSByZWN0VG9DbGllbnRSZWN0KGdldEJvdW5kaW5nUmVjdChuYXRpdmVDbGllbnRSZWN0cykpO1xuICAgICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgICBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSB0d28gcmVjdHMgYW5kIHRoZXkgYXJlIGRpc2pvaW5lZC5cbiAgICAgICAgaWYgKGNsaWVudFJlY3RzLmxlbmd0aCA9PT0gMiAmJiBjbGllbnRSZWN0c1swXS5sZWZ0ID4gY2xpZW50UmVjdHNbMV0ucmlnaHQgJiYgeCAhPSBudWxsICYmIHkgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IHJlY3QgaW4gd2hpY2ggdGhlIHBvaW50IGlzIGZ1bGx5IGluc2lkZS5cbiAgICAgICAgICByZXR1cm4gY2xpZW50UmVjdHMuZmluZChyZWN0ID0+IHggPiByZWN0LmxlZnQgLSBwYWRkaW5nT2JqZWN0LmxlZnQgJiYgeCA8IHJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0ICYmIHkgPiByZWN0LnRvcCAtIHBhZGRpbmdPYmplY3QudG9wICYmIHkgPCByZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSB8fCBmYWxsYmFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZXJlIGFyZSAyIG9yIG1vcmUgY29ubmVjdGVkIHJlY3RzLlxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICBpZiAoZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RSZWN0ID0gY2xpZW50UmVjdHNbY2xpZW50UmVjdHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCBpc1RvcCA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ3RvcCc7XG4gICAgICAgICAgICBjb25zdCB0b3AgPSBmaXJzdFJlY3QudG9wO1xuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gbGFzdFJlY3QuYm90dG9tO1xuICAgICAgICAgICAgY29uc3QgbGVmdCA9IGlzVG9wID8gZmlyc3RSZWN0LmxlZnQgOiBsYXN0UmVjdC5sZWZ0O1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBpc1RvcCA/IGZpcnN0UmVjdC5yaWdodCA6IGxhc3RSZWN0LnJpZ2h0O1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgIHg6IGxlZnQsXG4gICAgICAgICAgICAgIHk6IHRvcFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaXNMZWZ0U2lkZSA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ2xlZnQnO1xuICAgICAgICAgIGNvbnN0IG1heFJpZ2h0ID0gbWF4KC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QucmlnaHQpKTtcbiAgICAgICAgICBjb25zdCBtaW5MZWZ0ID0gbWluKC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QubGVmdCkpO1xuICAgICAgICAgIGNvbnN0IG1lYXN1cmVSZWN0cyA9IGNsaWVudFJlY3RzLmZpbHRlcihyZWN0ID0+IGlzTGVmdFNpZGUgPyByZWN0LmxlZnQgPT09IG1pbkxlZnQgOiByZWN0LnJpZ2h0ID09PSBtYXhSaWdodCk7XG4gICAgICAgICAgY29uc3QgdG9wID0gbWVhc3VyZVJlY3RzWzBdLnRvcDtcbiAgICAgICAgICBjb25zdCBib3R0b20gPSBtZWFzdXJlUmVjdHNbbWVhc3VyZVJlY3RzLmxlbmd0aCAtIDFdLmJvdHRvbTtcbiAgICAgICAgICBjb25zdCBsZWZ0ID0gbWluTGVmdDtcbiAgICAgICAgICBjb25zdCByaWdodCA9IG1heFJpZ2h0O1xuICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB4OiBsZWZ0LFxuICAgICAgICAgICAgeTogdG9wXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNldFJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICAgICAgcmVmZXJlbmNlOiB7XG4gICAgICAgICAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG4gICAgICAgIH0sXG4gICAgICAgIGZsb2F0aW5nOiBlbGVtZW50cy5mbG9hdGluZyxcbiAgICAgICAgc3RyYXRlZ3lcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlY3RzLnJlZmVyZW5jZS54ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS54IHx8IHJlY3RzLnJlZmVyZW5jZS55ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS55IHx8IHJlY3RzLnJlZmVyZW5jZS53aWR0aCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2Uud2lkdGggfHwgcmVjdHMucmVmZXJlbmNlLmhlaWdodCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHJlY3RzOiByZXNldFJlY3RzXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IG9yaWdpblNpZGVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWydsZWZ0JywgJ3RvcCddKTtcblxuLy8gRm9yIHR5cGUgYmFja3dhcmRzLWNvbXBhdGliaWxpdHksIHRoZSBgT2Zmc2V0T3B0aW9uc2AgdHlwZSB3YXMgYWxzb1xuLy8gRGVyaXZhYmxlLlxuXG5hc3luYyBmdW5jdGlvbiBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50LFxuICAgIHBsYXRmb3JtLFxuICAgIGVsZW1lbnRzXG4gIH0gPSBzdGF0ZTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgaXNWZXJ0aWNhbCA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgY29uc3QgbWFpbkF4aXNNdWx0aSA9IG9yaWdpblNpZGVzLmhhcyhzaWRlKSA/IC0xIDogMTtcbiAgY29uc3QgY3Jvc3NBeGlzTXVsdGkgPSBydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMTtcbiAgY29uc3QgcmF3VmFsdWUgPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICBsZXQge1xuICAgIG1haW5BeGlzLFxuICAgIGNyb3NzQXhpcyxcbiAgICBhbGlnbm1lbnRBeGlzXG4gIH0gPSB0eXBlb2YgcmF3VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZSxcbiAgICBjcm9zc0F4aXM6IDAsXG4gICAgYWxpZ25tZW50QXhpczogbnVsbFxuICB9IDoge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZS5tYWluQXhpcyB8fCAwLFxuICAgIGNyb3NzQXhpczogcmF3VmFsdWUuY3Jvc3NBeGlzIHx8IDAsXG4gICAgYWxpZ25tZW50QXhpczogcmF3VmFsdWUuYWxpZ25tZW50QXhpc1xuICB9O1xuICBpZiAoYWxpZ25tZW50ICYmIHR5cGVvZiBhbGlnbm1lbnRBeGlzID09PSAnbnVtYmVyJykge1xuICAgIGNyb3NzQXhpcyA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyBhbGlnbm1lbnRBeGlzICogLTEgOiBhbGlnbm1lbnRBeGlzO1xuICB9XG4gIHJldHVybiBpc1ZlcnRpY2FsID8ge1xuICAgIHg6IGNyb3NzQXhpcyAqIGNyb3NzQXhpc011bHRpLFxuICAgIHk6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aVxuICB9IDoge1xuICAgIHg6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aSxcbiAgICB5OiBjcm9zc0F4aXMgKiBjcm9zc0F4aXNNdWx0aVxuICB9O1xufVxuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwbGFjZW1lbnQgYnkgdHJhbnNsYXRpbmcgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYWxvbmcgdGhlXG4gKiBzcGVjaWZpZWQgYXhlcy5cbiAqIEEgbnVtYmVyIChzaG9ydGhhbmQgZm9yIGBtYWluQXhpc2Agb3IgZGlzdGFuY2UpLCBvciBhbiBheGVzIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdCBtYXkgYmUgcGFzc2VkLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL29mZnNldFxuICovXG5jb25zdCBvZmZzZXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IDA7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJG9mZnNlLCBfbWlkZGxld2FyZURhdGEkYXJyb3c7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgbWlkZGxld2FyZURhdGFcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IGRpZmZDb29yZHMgPSBhd2FpdCBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucyk7XG5cbiAgICAgIC8vIElmIHRoZSBwbGFjZW1lbnQgaXMgdGhlIHNhbWUgYW5kIHRoZSBhcnJvdyBjYXVzZWQgYW4gYWxpZ25tZW50IG9mZnNldFxuICAgICAgLy8gdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNoYW5nZSB0aGUgcG9zaXRpb25pbmcgY29vcmRpbmF0ZXMuXG4gICAgICBpZiAocGxhY2VtZW50ID09PSAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZSA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZS5wbGFjZW1lbnQpICYmIChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHggKyBkaWZmQ29vcmRzLngsXG4gICAgICAgIHk6IHkgKyBkaWZmQ29vcmRzLnksXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAuLi5kaWZmQ29vcmRzLFxuICAgICAgICAgIHBsYWNlbWVudFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IHNoaWZ0aW5nIGl0IGluIG9yZGVyIHRvXG4gKiBrZWVwIGl0IGluIHZpZXcgd2hlbiBpdCB3aWxsIG92ZXJmbG93IHRoZSBjbGlwcGluZyBib3VuZGFyeS5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaGlmdFxuICovXG5jb25zdCBzaGlmdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc2hpZnQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBsaW1pdGVyID0ge1xuICAgICAgICAgIGZuOiBfcmVmID0+IHtcbiAgICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgIHlcbiAgICAgICAgICAgIH0gPSBfcmVmO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBjcm9zc0F4aXMgPSBnZXRTaWRlQXhpcyhnZXRTaWRlKHBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgbWFpbkF4aXMgPSBnZXRPcHBvc2l0ZUF4aXMoY3Jvc3NBeGlzKTtcbiAgICAgIGxldCBtYWluQXhpc0Nvb3JkID0gY29vcmRzW21haW5BeGlzXTtcbiAgICAgIGxldCBjcm9zc0F4aXNDb29yZCA9IGNvb3Jkc1tjcm9zc0F4aXNdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyAndG9wJyA6ICdsZWZ0JztcbiAgICAgICAgY29uc3QgbWF4U2lkZSA9IG1haW5BeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IG1haW5BeGlzQ29vcmQgKyBvdmVyZmxvd1ttaW5TaWRlXTtcbiAgICAgICAgY29uc3QgbWF4ID0gbWFpbkF4aXNDb29yZCAtIG92ZXJmbG93W21heFNpZGVdO1xuICAgICAgICBtYWluQXhpc0Nvb3JkID0gY2xhbXAobWluLCBtYWluQXhpc0Nvb3JkLCBtYXgpO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IG1pblNpZGUgPSBjcm9zc0F4aXMgPT09ICd5JyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgICAgICBjb25zdCBtYXhTaWRlID0gY3Jvc3NBeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IGNyb3NzQXhpc0Nvb3JkICsgb3ZlcmZsb3dbbWluU2lkZV07XG4gICAgICAgIGNvbnN0IG1heCA9IGNyb3NzQXhpc0Nvb3JkIC0gb3ZlcmZsb3dbbWF4U2lkZV07XG4gICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gY2xhbXAobWluLCBjcm9zc0F4aXNDb29yZCwgbWF4KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxpbWl0ZWRDb29yZHMgPSBsaW1pdGVyLmZuKHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5saW1pdGVkQ29vcmRzLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgeDogbGltaXRlZENvb3Jkcy54IC0geCxcbiAgICAgICAgICB5OiBsaW1pdGVkQ29vcmRzLnkgLSB5LFxuICAgICAgICAgIGVuYWJsZWQ6IHtcbiAgICAgICAgICAgIFttYWluQXhpc106IGNoZWNrTWFpbkF4aXMsXG4gICAgICAgICAgICBbY3Jvc3NBeGlzXTogY2hlY2tDcm9zc0F4aXNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgb3B0aW9ucyxcbiAgICBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBtaWRkbGV3YXJlRGF0YVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBvZmZzZXQgPSAwLFxuICAgICAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSB0cnVlXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgICAgY29uc3QgY3Jvc3NBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IG1haW5BeGlzID0gZ2V0T3Bwb3NpdGVBeGlzKGNyb3NzQXhpcyk7XG4gICAgICBsZXQgbWFpbkF4aXNDb29yZCA9IGNvb3Jkc1ttYWluQXhpc107XG4gICAgICBsZXQgY3Jvc3NBeGlzQ29vcmQgPSBjb29yZHNbY3Jvc3NBeGlzXTtcbiAgICAgIGNvbnN0IHJhd09mZnNldCA9IGV2YWx1YXRlKG9mZnNldCwgc3RhdGUpO1xuICAgICAgY29uc3QgY29tcHV0ZWRPZmZzZXQgPSB0eXBlb2YgcmF3T2Zmc2V0ID09PSAnbnVtYmVyJyA/IHtcbiAgICAgICAgbWFpbkF4aXM6IHJhd09mZnNldCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwXG4gICAgICB9IDoge1xuICAgICAgICBtYWluQXhpczogMCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwLFxuICAgICAgICAuLi5yYXdPZmZzZXRcbiAgICAgIH07XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgICAgICBjb25zdCBsaW1pdE1pbiA9IHJlY3RzLnJlZmVyZW5jZVttYWluQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGNvbnN0IGxpbWl0TWF4ID0gcmVjdHMucmVmZXJlbmNlW21haW5BeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dIC0gY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGlmIChtYWluQXhpc0Nvb3JkIDwgbGltaXRNaW4pIHtcbiAgICAgICAgICBtYWluQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAobWFpbkF4aXNDb29yZCA+IGxpbWl0TWF4KSB7XG4gICAgICAgICAgbWFpbkF4aXNDb29yZCA9IGxpbWl0TWF4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRvZmZzZSwgX21pZGRsZXdhcmVEYXRhJG9mZnNlMjtcbiAgICAgICAgY29uc3QgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICAgICAgY29uc3QgaXNPcmlnaW5TaWRlID0gb3JpZ2luU2lkZXMuaGFzKGdldFNpZGUocGxhY2VtZW50KSk7XG4gICAgICAgIGNvbnN0IGxpbWl0TWluID0gcmVjdHMucmVmZXJlbmNlW2Nyb3NzQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgKGlzT3JpZ2luU2lkZSA/ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlW2Nyb3NzQXhpc10pIHx8IDAgOiAwKSArIChpc09yaWdpblNpZGUgPyAwIDogY29tcHV0ZWRPZmZzZXQuY3Jvc3NBeGlzKTtcbiAgICAgICAgY29uc3QgbGltaXRNYXggPSByZWN0cy5yZWZlcmVuY2VbY3Jvc3NBeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dICsgKGlzT3JpZ2luU2lkZSA/IDAgOiAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZTIgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2UyW2Nyb3NzQXhpc10pIHx8IDApIC0gKGlzT3JpZ2luU2lkZSA/IGNvbXB1dGVkT2Zmc2V0LmNyb3NzQXhpcyA6IDApO1xuICAgICAgICBpZiAoY3Jvc3NBeGlzQ29vcmQgPCBsaW1pdE1pbikge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBeGlzQ29vcmQgPiBsaW1pdE1heCkge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNYXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCDigJRcbiAqIGZvciBpbnN0YW5jZSwgcHJldmVudCBpdCBmcm9tIG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyBib3VuZGFyeSBvciBtYXRjaCB0aGVcbiAqIHdpZHRoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXG4gKi9cbmNvbnN0IHNpemUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3NpemUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfc3RhdGUkbWlkZGxld2FyZURhdGEsIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTI7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBhcHBseSA9ICgpID0+IHt9LFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaXNZQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSA9IHJlY3RzLmZsb2F0aW5nO1xuICAgICAgbGV0IGhlaWdodFNpZGU7XG4gICAgICBsZXQgd2lkdGhTaWRlO1xuICAgICAgaWYgKHNpZGUgPT09ICd0b3AnIHx8IHNpZGUgPT09ICdib3R0b20nKSB7XG4gICAgICAgIGhlaWdodFNpZGUgPSBzaWRlO1xuICAgICAgICB3aWR0aFNpZGUgPSBhbGlnbm1lbnQgPT09ICgoYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpKSA/ICdzdGFydCcgOiAnZW5kJykgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2lkdGhTaWRlID0gc2lkZTtcbiAgICAgICAgaGVpZ2h0U2lkZSA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyAndG9wJyA6ICdib3R0b20nO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nSGVpZ2h0ID0gaGVpZ2h0IC0gb3ZlcmZsb3cudG9wIC0gb3ZlcmZsb3cuYm90dG9tO1xuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nV2lkdGggPSB3aWR0aCAtIG92ZXJmbG93LmxlZnQgLSBvdmVyZmxvdy5yaWdodDtcbiAgICAgIGNvbnN0IG92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0ID0gbWluKGhlaWdodCAtIG92ZXJmbG93W2hlaWdodFNpZGVdLCBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3dBdmFpbGFibGVXaWR0aCA9IG1pbih3aWR0aCAtIG92ZXJmbG93W3dpZHRoU2lkZV0sIG1heGltdW1DbGlwcGluZ1dpZHRoKTtcbiAgICAgIGNvbnN0IG5vU2hpZnQgPSAhc3RhdGUubWlkZGxld2FyZURhdGEuc2hpZnQ7XG4gICAgICBsZXQgYXZhaWxhYmxlSGVpZ2h0ID0gb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQ7XG4gICAgICBsZXQgYXZhaWxhYmxlV2lkdGggPSBvdmVyZmxvd0F2YWlsYWJsZVdpZHRoO1xuICAgICAgaWYgKChfc3RhdGUkbWlkZGxld2FyZURhdGEgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEuZW5hYmxlZC54KSB7XG4gICAgICAgIGF2YWlsYWJsZVdpZHRoID0gbWF4aW11bUNsaXBwaW5nV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAoKF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTIgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEyLmVuYWJsZWQueSkge1xuICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQ7XG4gICAgICB9XG4gICAgICBpZiAobm9TaGlmdCAmJiAhYWxpZ25tZW50KSB7XG4gICAgICAgIGNvbnN0IHhNaW4gPSBtYXgob3ZlcmZsb3cubGVmdCwgMCk7XG4gICAgICAgIGNvbnN0IHhNYXggPSBtYXgob3ZlcmZsb3cucmlnaHQsIDApO1xuICAgICAgICBjb25zdCB5TWluID0gbWF4KG92ZXJmbG93LnRvcCwgMCk7XG4gICAgICAgIGNvbnN0IHlNYXggPSBtYXgob3ZlcmZsb3cuYm90dG9tLCAwKTtcbiAgICAgICAgaWYgKGlzWUF4aXMpIHtcbiAgICAgICAgICBhdmFpbGFibGVXaWR0aCA9IHdpZHRoIC0gMiAqICh4TWluICE9PSAwIHx8IHhNYXggIT09IDAgPyB4TWluICsgeE1heCA6IG1heChvdmVyZmxvdy5sZWZ0LCBvdmVyZmxvdy5yaWdodCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IGhlaWdodCAtIDIgKiAoeU1pbiAhPT0gMCB8fCB5TWF4ICE9PSAwID8geU1pbiArIHlNYXggOiBtYXgob3ZlcmZsb3cudG9wLCBvdmVyZmxvdy5ib3R0b20pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgYXBwbHkoe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYXZhaWxhYmxlV2lkdGgsXG4gICAgICAgIGF2YWlsYWJsZUhlaWdodFxuICAgICAgfSk7XG4gICAgICBjb25zdCBuZXh0RGltZW5zaW9ucyA9IGF3YWl0IHBsYXRmb3JtLmdldERpbWVuc2lvbnMoZWxlbWVudHMuZmxvYXRpbmcpO1xuICAgICAgaWYgKHdpZHRoICE9PSBuZXh0RGltZW5zaW9ucy53aWR0aCB8fCBoZWlnaHQgIT09IG5leHREaW1lbnNpb25zLmhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICByZWN0czogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnQgeyBhcnJvdywgYXV0b1BsYWNlbWVudCwgY29tcHV0ZVBvc2l0aW9uLCBkZXRlY3RPdmVyZmxvdywgZmxpcCwgaGlkZSwgaW5saW5lLCBsaW1pdFNoaWZ0LCBvZmZzZXQsIHNoaWZ0LCBzaXplIH07XG4iLCJmdW5jdGlvbiBoYXNXaW5kb3coKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbn1cbmZ1bmN0aW9uIGdldE5vZGVOYW1lKG5vZGUpIHtcbiAgaWYgKGlzTm9kZShub2RlKSkge1xuICAgIHJldHVybiAobm9kZS5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgfVxuICAvLyBNb2NrZWQgbm9kZXMgaW4gdGVzdGluZyBlbnZpcm9ubWVudHMgbWF5IG5vdCBiZSBpbnN0YW5jZXMgb2YgTm9kZS4gQnlcbiAgLy8gcmV0dXJuaW5nIGAjZG9jdW1lbnRgIGFuIGluZmluaXRlIGxvb3Agd29uJ3Qgb2NjdXIuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjMxN1xuICByZXR1cm4gJyNkb2N1bWVudCc7XG59XG5mdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIChub2RlID09IG51bGwgfHwgKF9ub2RlJG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSB8fCB3aW5kb3c7XG59XG5mdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQobm9kZSkge1xuICB2YXIgX3JlZjtcbiAgcmV0dXJuIChfcmVmID0gKGlzTm9kZShub2RlKSA/IG5vZGUub3duZXJEb2N1bWVudCA6IG5vZGUuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9yZWYuZG9jdW1lbnRFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNOb2RlKHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgTm9kZSB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuTm9kZTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkhUTUxFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNTaGFkb3dSb290KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkgfHwgdHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLlNoYWRvd1Jvb3Q7XG59XG5jb25zdCBpbnZhbGlkT3ZlcmZsb3dEaXNwbGF5VmFsdWVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWydpbmxpbmUnLCAnY29udGVudHMnXSk7XG5mdW5jdGlvbiBpc092ZXJmbG93RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICBvdmVyZmxvdyxcbiAgICBvdmVyZmxvd1gsXG4gICAgb3ZlcmZsb3dZLFxuICAgIGRpc3BsYXlcbiAgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkgJiYgIWludmFsaWRPdmVyZmxvd0Rpc3BsYXlWYWx1ZXMuaGFzKGRpc3BsYXkpO1xufVxuY29uc3QgdGFibGVFbGVtZW50cyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KFsndGFibGUnLCAndGQnLCAndGgnXSk7XG5mdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiB0YWJsZUVsZW1lbnRzLmhhcyhnZXROb2RlTmFtZShlbGVtZW50KSk7XG59XG5jb25zdCB0b3BMYXllclNlbGVjdG9ycyA9IFsnOnBvcG92ZXItb3BlbicsICc6bW9kYWwnXTtcbmZ1bmN0aW9uIGlzVG9wTGF5ZXIoZWxlbWVudCkge1xuICByZXR1cm4gdG9wTGF5ZXJTZWxlY3RvcnMuc29tZShzZWxlY3RvciA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBlbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgIH0gY2F0Y2ggKF9lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbn1cbmNvbnN0IHRyYW5zZm9ybVByb3BlcnRpZXMgPSBbJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUnLCAnc2NhbGUnLCAncm90YXRlJywgJ3BlcnNwZWN0aXZlJ107XG5jb25zdCB3aWxsQ2hhbmdlVmFsdWVzID0gWyd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlJywgJ3NjYWxlJywgJ3JvdGF0ZScsICdwZXJzcGVjdGl2ZScsICdmaWx0ZXInXTtcbmNvbnN0IGNvbnRhaW5WYWx1ZXMgPSBbJ3BhaW50JywgJ2xheW91dCcsICdzdHJpY3QnLCAnY29udGVudCddO1xuZnVuY3Rpb24gaXNDb250YWluaW5nQmxvY2soZWxlbWVudE9yQ3NzKSB7XG4gIGNvbnN0IHdlYmtpdCA9IGlzV2ViS2l0KCk7XG4gIGNvbnN0IGNzcyA9IGlzRWxlbWVudChlbGVtZW50T3JDc3MpID8gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50T3JDc3MpIDogZWxlbWVudE9yQ3NzO1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdHJhbnNmb3Jtcy0yLyNpbmRpdmlkdWFsLXRyYW5zZm9ybXNcbiAgcmV0dXJuIHRyYW5zZm9ybVByb3BlcnRpZXMuc29tZSh2YWx1ZSA9PiBjc3NbdmFsdWVdID8gY3NzW3ZhbHVlXSAhPT0gJ25vbmUnIDogZmFsc2UpIHx8IChjc3MuY29udGFpbmVyVHlwZSA/IGNzcy5jb250YWluZXJUeXBlICE9PSAnbm9ybWFsJyA6IGZhbHNlKSB8fCAhd2Via2l0ICYmIChjc3MuYmFja2Ryb3BGaWx0ZXIgPyBjc3MuYmFja2Ryb3BGaWx0ZXIgIT09ICdub25lJyA6IGZhbHNlKSB8fCAhd2Via2l0ICYmIChjc3MuZmlsdGVyID8gY3NzLmZpbHRlciAhPT0gJ25vbmUnIDogZmFsc2UpIHx8IHdpbGxDaGFuZ2VWYWx1ZXMuc29tZSh2YWx1ZSA9PiAoY3NzLndpbGxDaGFuZ2UgfHwgJycpLmluY2x1ZGVzKHZhbHVlKSkgfHwgY29udGFpblZhbHVlcy5zb21lKHZhbHVlID0+IChjc3MuY29udGFpbiB8fCAnJykuaW5jbHVkZXModmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKGN1cnJlbnROb2RlKSkge1xuICAgIGlmIChpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2UgaWYgKGlzVG9wTGF5ZXIoY3VycmVudE5vZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzV2ViS2l0KCkge1xuICBpZiAodHlwZW9mIENTUyA9PT0gJ3VuZGVmaW5lZCcgfHwgIUNTUy5zdXBwb3J0cykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQ1NTLnN1cHBvcnRzKCctd2Via2l0LWJhY2tkcm9wLWZpbHRlcicsICdub25lJyk7XG59XG5jb25zdCBsYXN0VHJhdmVyc2FibGVOb2RlTmFtZXMgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXSk7XG5mdW5jdGlvbiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUobm9kZSkge1xuICByZXR1cm4gbGFzdFRyYXZlcnNhYmxlTm9kZU5hbWVzLmhhcyhnZXROb2RlTmFtZShub2RlKSk7XG59XG5mdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufVxuZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KSB7XG4gIGlmIChpc0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbFgsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhcmVudE5vZGUobm9kZSkge1xuICBpZiAoZ2V0Tm9kZU5hbWUobm9kZSkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9XG4gIC8vIFN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlLlxuICBub2RlLmFzc2lnbmVkU2xvdCB8fFxuICAvLyBET00gRWxlbWVudCBkZXRlY3RlZC5cbiAgbm9kZS5wYXJlbnROb2RlIHx8XG4gIC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWQuXG4gIGlzU2hhZG93Um9vdChub2RlKSAmJiBub2RlLmhvc3QgfHxcbiAgLy8gRmFsbGJhY2suXG4gIGdldERvY3VtZW50RWxlbWVudChub2RlKTtcbiAgcmV0dXJuIGlzU2hhZG93Um9vdChyZXN1bHQpID8gcmVzdWx0Lmhvc3QgOiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKG5vZGUpO1xuICBpZiAoaXNMYXN0VHJhdmVyc2FibGVOb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudCA/IG5vZGUub3duZXJEb2N1bWVudC5ib2R5IDogbm9kZS5ib2R5O1xuICB9XG4gIGlmIChpc0hUTUxFbGVtZW50KHBhcmVudE5vZGUpICYmIGlzT3ZlcmZsb3dFbGVtZW50KHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKHBhcmVudE5vZGUpO1xufVxuZnVuY3Rpb24gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMobm9kZSwgbGlzdCwgdHJhdmVyc2VJZnJhbWVzKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50MjtcbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuICBpZiAodHJhdmVyc2VJZnJhbWVzID09PSB2b2lkIDApIHtcbiAgICB0cmF2ZXJzZUlmcmFtZXMgPSB0cnVlO1xuICB9XG4gIGNvbnN0IHNjcm9sbGFibGVBbmNlc3RvciA9IGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpO1xuICBjb25zdCBpc0JvZHkgPSBzY3JvbGxhYmxlQW5jZXN0b3IgPT09ICgoX25vZGUkb3duZXJEb2N1bWVudDIgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50Mi5ib2R5KTtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KHNjcm9sbGFibGVBbmNlc3Rvcik7XG4gIGlmIChpc0JvZHkpIHtcbiAgICBjb25zdCBmcmFtZUVsZW1lbnQgPSBnZXRGcmFtZUVsZW1lbnQod2luKTtcbiAgICByZXR1cm4gbGlzdC5jb25jYXQod2luLCB3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzT3ZlcmZsb3dFbGVtZW50KHNjcm9sbGFibGVBbmNlc3RvcikgPyBzY3JvbGxhYmxlQW5jZXN0b3IgOiBbXSwgZnJhbWVFbGVtZW50ICYmIHRyYXZlcnNlSWZyYW1lcyA/IGdldE92ZXJmbG93QW5jZXN0b3JzKGZyYW1lRWxlbWVudCkgOiBbXSk7XG4gIH1cbiAgcmV0dXJuIGxpc3QuY29uY2F0KHNjcm9sbGFibGVBbmNlc3RvciwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoc2Nyb2xsYWJsZUFuY2VzdG9yLCBbXSwgdHJhdmVyc2VJZnJhbWVzKSk7XG59XG5mdW5jdGlvbiBnZXRGcmFtZUVsZW1lbnQod2luKSB7XG4gIHJldHVybiB3aW4ucGFyZW50ICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih3aW4ucGFyZW50KSA/IHdpbi5mcmFtZUVsZW1lbnQgOiBudWxsO1xufVxuXG5leHBvcnQgeyBnZXRDb21wdXRlZFN0eWxlLCBnZXRDb250YWluaW5nQmxvY2ssIGdldERvY3VtZW50RWxlbWVudCwgZ2V0RnJhbWVFbGVtZW50LCBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvciwgZ2V0Tm9kZU5hbWUsIGdldE5vZGVTY3JvbGwsIGdldE92ZXJmbG93QW5jZXN0b3JzLCBnZXRQYXJlbnROb2RlLCBnZXRXaW5kb3csIGlzQ29udGFpbmluZ0Jsb2NrLCBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzTGFzdFRyYXZlcnNhYmxlTm9kZSwgaXNOb2RlLCBpc092ZXJmbG93RWxlbWVudCwgaXNTaGFkb3dSb290LCBpc1RhYmxlRWxlbWVudCwgaXNUb3BMYXllciwgaXNXZWJLaXQgfTtcbiIsImltcG9ydCB7IHJlY3RUb0NsaWVudFJlY3QsIGFycm93IGFzIGFycm93JDEsIGF1dG9QbGFjZW1lbnQgYXMgYXV0b1BsYWNlbWVudCQxLCBkZXRlY3RPdmVyZmxvdyBhcyBkZXRlY3RPdmVyZmxvdyQxLCBmbGlwIGFzIGZsaXAkMSwgaGlkZSBhcyBoaWRlJDEsIGlubGluZSBhcyBpbmxpbmUkMSwgbGltaXRTaGlmdCBhcyBsaW1pdFNoaWZ0JDEsIG9mZnNldCBhcyBvZmZzZXQkMSwgc2hpZnQgYXMgc2hpZnQkMSwgc2l6ZSBhcyBzaXplJDEsIGNvbXB1dGVQb3NpdGlvbiBhcyBjb21wdXRlUG9zaXRpb24kMSB9IGZyb20gJ0BmbG9hdGluZy11aS9jb3JlJztcbmltcG9ydCB7IHJvdW5kLCBjcmVhdGVDb29yZHMsIG1heCwgbWluLCBmbG9vciB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5pbXBvcnQgeyBnZXRDb21wdXRlZFN0eWxlIGFzIGdldENvbXB1dGVkU3R5bGUkMSwgaXNIVE1MRWxlbWVudCwgaXNFbGVtZW50LCBnZXRXaW5kb3csIGlzV2ViS2l0LCBnZXRGcmFtZUVsZW1lbnQsIGdldE5vZGVTY3JvbGwsIGdldERvY3VtZW50RWxlbWVudCwgaXNUb3BMYXllciwgZ2V0Tm9kZU5hbWUsIGlzT3ZlcmZsb3dFbGVtZW50LCBnZXRPdmVyZmxvd0FuY2VzdG9ycywgZ2V0UGFyZW50Tm9kZSwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc0NvbnRhaW5pbmdCbG9jaywgaXNUYWJsZUVsZW1lbnQsIGdldENvbnRhaW5pbmdCbG9jayB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuZXhwb3J0IHsgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcblxuZnVuY3Rpb24gZ2V0Q3NzRGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUkMShlbGVtZW50KTtcbiAgLy8gSW4gdGVzdGluZyBlbnZpcm9ubWVudHMsIHRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzIGFyZSBlbXB0eVxuICAvLyBzdHJpbmdzIGZvciBTVkcgZWxlbWVudHMsIHJldHVybmluZyBOYU4uIEZhbGxiYWNrIHRvIGAwYCBpbiB0aGlzIGNhc2UuXG4gIGxldCB3aWR0aCA9IHBhcnNlRmxvYXQoY3NzLndpZHRoKSB8fCAwO1xuICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChjc3MuaGVpZ2h0KSB8fCAwO1xuICBjb25zdCBoYXNPZmZzZXQgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBvZmZzZXRXaWR0aCA9IGhhc09mZnNldCA/IGVsZW1lbnQub2Zmc2V0V2lkdGggOiB3aWR0aDtcbiAgY29uc3Qgb2Zmc2V0SGVpZ2h0ID0gaGFzT2Zmc2V0ID8gZWxlbWVudC5vZmZzZXRIZWlnaHQgOiBoZWlnaHQ7XG4gIGNvbnN0IHNob3VsZEZhbGxiYWNrID0gcm91bmQod2lkdGgpICE9PSBvZmZzZXRXaWR0aCB8fCByb3VuZChoZWlnaHQpICE9PSBvZmZzZXRIZWlnaHQ7XG4gIGlmIChzaG91bGRGYWxsYmFjaykge1xuICAgIHdpZHRoID0gb2Zmc2V0V2lkdGg7XG4gICAgaGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0O1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICQ6IHNob3VsZEZhbGxiYWNrXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVud3JhcEVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gIWlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgOiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRTY2FsZShlbGVtZW50KSB7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZG9tRWxlbWVudCkpIHtcbiAgICByZXR1cm4gY3JlYXRlQ29vcmRzKDEpO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBkb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZG9tRWxlbWVudCk7XG4gIGxldCB4ID0gKCQgPyByb3VuZChyZWN0LndpZHRoKSA6IHJlY3Qud2lkdGgpIC8gd2lkdGg7XG4gIGxldCB5ID0gKCQgPyByb3VuZChyZWN0LmhlaWdodCkgOiByZWN0LmhlaWdodCkgLyBoZWlnaHQ7XG5cbiAgLy8gMCwgTmFOLCBvciBJbmZpbml0eSBzaG91bGQgYWx3YXlzIGZhbGxiYWNrIHRvIDEuXG5cbiAgaWYgKCF4IHx8ICFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICB4ID0gMTtcbiAgfVxuICBpZiAoIXkgfHwgIU51bWJlci5pc0Zpbml0ZSh5KSkge1xuICAgIHkgPSAxO1xuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmNvbnN0IG5vT2Zmc2V0cyA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb29yZHMoMCk7XG5mdW5jdGlvbiBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBpZiAoIWlzV2ViS2l0KCkgfHwgIXdpbi52aXN1YWxWaWV3cG9ydCkge1xuICAgIHJldHVybiBub09mZnNldHM7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCxcbiAgICB5OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wXG4gIH07XG59XG5mdW5jdGlvbiBzaG91bGRBZGRWaXN1YWxPZmZzZXRzKGVsZW1lbnQsIGlzRml4ZWQsIGZsb2F0aW5nT2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cbiAgaWYgKCFmbG9hdGluZ09mZnNldFBhcmVudCB8fCBpc0ZpeGVkICYmIGZsb2F0aW5nT2Zmc2V0UGFyZW50ICE9PSBnZXRXaW5kb3coZWxlbWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzRml4ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSwgb2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBkb21FbGVtZW50ID0gdW53cmFwRWxlbWVudChlbGVtZW50KTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBpZiAoaW5jbHVkZVNjYWxlKSB7XG4gICAgaWYgKG9mZnNldFBhcmVudCkge1xuICAgICAgaWYgKGlzRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHNjYWxlID0gZ2V0U2NhbGUob2Zmc2V0UGFyZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IHNob3VsZEFkZFZpc3VhbE9mZnNldHMoZG9tRWxlbWVudCwgaXNGaXhlZFN0cmF0ZWd5LCBvZmZzZXRQYXJlbnQpID8gZ2V0VmlzdWFsT2Zmc2V0cyhkb21FbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgbGV0IHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgdmlzdWFsT2Zmc2V0cy54KSAvIHNjYWxlLng7XG4gIGxldCB5ID0gKGNsaWVudFJlY3QudG9wICsgdmlzdWFsT2Zmc2V0cy55KSAvIHNjYWxlLnk7XG4gIGxldCB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZS54O1xuICBsZXQgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZS55O1xuICBpZiAoZG9tRWxlbWVudCkge1xuICAgIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhkb21FbGVtZW50KTtcbiAgICBjb25zdCBvZmZzZXRXaW4gPSBvZmZzZXRQYXJlbnQgJiYgaXNFbGVtZW50KG9mZnNldFBhcmVudCkgPyBnZXRXaW5kb3cob2Zmc2V0UGFyZW50KSA6IG9mZnNldFBhcmVudDtcbiAgICBsZXQgY3VycmVudFdpbiA9IHdpbjtcbiAgICBsZXQgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB3aGlsZSAoY3VycmVudElGcmFtZSAmJiBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0V2luICE9PSBjdXJyZW50V2luKSB7XG4gICAgICBjb25zdCBpZnJhbWVTY2FsZSA9IGdldFNjYWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgaWZyYW1lUmVjdCA9IGN1cnJlbnRJRnJhbWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlJDEoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBsZWZ0ID0gaWZyYW1lUmVjdC5sZWZ0ICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50TGVmdCArIHBhcnNlRmxvYXQoY3NzLnBhZGRpbmdMZWZ0KSkgKiBpZnJhbWVTY2FsZS54O1xuICAgICAgY29uc3QgdG9wID0gaWZyYW1lUmVjdC50b3AgKyAoY3VycmVudElGcmFtZS5jbGllbnRUb3AgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nVG9wKSkgKiBpZnJhbWVTY2FsZS55O1xuICAgICAgeCAqPSBpZnJhbWVTY2FsZS54O1xuICAgICAgeSAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgd2lkdGggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIGhlaWdodCAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgeCArPSBsZWZ0O1xuICAgICAgeSArPSB0b3A7XG4gICAgICBjdXJyZW50V2luID0gZ2V0V2luZG93KGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3Qoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfSk7XG59XG5cbi8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbi8vIGluY29ycmVjdCBmb3IgUlRMLlxuZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50LCByZWN0KSB7XG4gIGNvbnN0IGxlZnRTY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG4gIGlmICghcmVjdCkge1xuICAgIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgbGVmdFNjcm9sbDtcbiAgfVxuICByZXR1cm4gcmVjdC5sZWZ0ICsgbGVmdFNjcm9sbDtcbn1cblxuZnVuY3Rpb24gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkge1xuICBjb25zdCBodG1sUmVjdCA9IGRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgeCA9IGh0bWxSZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50LCBodG1sUmVjdCk7XG4gIGNvbnN0IHkgPSBodG1sUmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wO1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgZWxlbWVudHMsXG4gICAgcmVjdCxcbiAgICBvZmZzZXRQYXJlbnQsXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGlzRml4ZWQgPSBzdHJhdGVneSA9PT0gJ2ZpeGVkJztcbiAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IHRvcExheWVyID0gZWxlbWVudHMgPyBpc1RvcExheWVyKGVsZW1lbnRzLmZsb2F0aW5nKSA6IGZhbHNlO1xuICBpZiAob2Zmc2V0UGFyZW50ID09PSBkb2N1bWVudEVsZW1lbnQgfHwgdG9wTGF5ZXIgJiYgaXNGaXhlZCkge1xuICAgIHJldHVybiByZWN0O1xuICB9XG4gIGxldCBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuICBjb25zdCBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBjb25zdCBvZmZzZXRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCk7XG4gICAgICBzY2FsZSA9IGdldFNjYWxlKG9mZnNldFBhcmVudCk7XG4gICAgICBvZmZzZXRzLnggPSBvZmZzZXRSZWN0LnggKyBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSA9IG9mZnNldFJlY3QueSArIG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfVxuICB9XG4gIGNvbnN0IGh0bWxPZmZzZXQgPSBkb2N1bWVudEVsZW1lbnQgJiYgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkID8gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHJlY3Qud2lkdGggKiBzY2FsZS54LFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHQgKiBzY2FsZS55LFxuICAgIHg6IHJlY3QueCAqIHNjYWxlLnggLSBzY3JvbGwuc2Nyb2xsTGVmdCAqIHNjYWxlLnggKyBvZmZzZXRzLnggKyBodG1sT2Zmc2V0LngsXG4gICAgeTogcmVjdC55ICogc2NhbGUueSAtIHNjcm9sbC5zY3JvbGxUb3AgKiBzY2FsZS55ICsgb2Zmc2V0cy55ICsgaHRtbE9mZnNldC55XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oZWxlbWVudC5nZXRDbGllbnRSZWN0cygpKTtcbn1cblxuLy8gR2V0cyB0aGUgZW50aXJlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgZG9jdW1lbnQgYXJlYSwgZXZlbiBleHRlbmRpbmcgb3V0c2lkZVxuLy8gb2YgdGhlIGA8aHRtbD5gIGFuZCBgPGJvZHk+YCByZWN0IGJvdW5kcyBpZiBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZS5cbmZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHNjcm9sbCA9IGdldE5vZGVTY3JvbGwoZWxlbWVudCk7XG4gIGNvbnN0IGJvZHkgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgY29uc3Qgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgYm9keS5jbGllbnRXaWR0aCk7XG4gIGNvbnN0IGhlaWdodCA9IG1heChodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGJvZHkuc2Nyb2xsSGVpZ2h0LCBib2R5LmNsaWVudEhlaWdodCk7XG4gIGxldCB4ID0gLXNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgY29uc3QgeSA9IC1zY3JvbGwuc2Nyb2xsVG9wO1xuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZSQxKGJvZHkpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5LmNsaWVudFdpZHRoKSAtIHdpZHRoO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG4vLyBTYWZldHkgY2hlY2s6IGVuc3VyZSB0aGUgc2Nyb2xsYmFyIHNwYWNlIGlzIHJlYXNvbmFibGUgaW4gY2FzZSB0aGlzXG4vLyBjYWxjdWxhdGlvbiBpcyBhZmZlY3RlZCBieSB1bnVzdWFsIHN0eWxlcy5cbi8vIE1vc3Qgc2Nyb2xsYmFycyBsZWF2ZSAxNS0xOHB4IG9mIHNwYWNlLlxuY29uc3QgU0NST0xMQkFSX01BWCA9IDI1O1xuZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgY29uc3QgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgY29uc3QgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIGxldCB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIGxldCBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgbGV0IHggPSAwO1xuICBsZXQgeSA9IDA7XG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIGNvbnN0IHZpc3VhbFZpZXdwb3J0QmFzZWQgPSBpc1dlYktpdCgpO1xuICAgIGlmICghdmlzdWFsVmlld3BvcnRCYXNlZCB8fCB2aXN1YWxWaWV3cG9ydEJhc2VkICYmIHN0cmF0ZWd5ID09PSAnZml4ZWQnKSB7XG4gICAgICB4ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdDtcbiAgICAgIHkgPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG4gIGNvbnN0IHdpbmRvd1Njcm9sbGJhclggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGh0bWwpO1xuICAvLyA8aHRtbD4gYG92ZXJmbG93OiBoaWRkZW5gICsgYHNjcm9sbGJhci1ndXR0ZXI6IHN0YWJsZWAgcmVkdWNlcyB0aGVcbiAgLy8gdmlzdWFsIHdpZHRoIG9mIHRoZSA8aHRtbD4gYnV0IHRoaXMgaXMgbm90IGNvbnNpZGVyZWQgaW4gdGhlIHNpemVcbiAgLy8gb2YgYGh0bWwuY2xpZW50V2lkdGhgLlxuICBpZiAod2luZG93U2Nyb2xsYmFyWCA8PSAwKSB7XG4gICAgY29uc3QgZG9jID0gaHRtbC5vd25lckRvY3VtZW50O1xuICAgIGNvbnN0IGJvZHkgPSBkb2MuYm9keTtcbiAgICBjb25zdCBib2R5U3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZShib2R5KTtcbiAgICBjb25zdCBib2R5TWFyZ2luSW5saW5lID0gZG9jLmNvbXBhdE1vZGUgPT09ICdDU1MxQ29tcGF0JyA/IHBhcnNlRmxvYXQoYm9keVN0eWxlcy5tYXJnaW5MZWZ0KSArIHBhcnNlRmxvYXQoYm9keVN0eWxlcy5tYXJnaW5SaWdodCkgfHwgMCA6IDA7XG4gICAgY29uc3QgY2xpcHBpbmdTdGFibGVTY3JvbGxiYXJXaWR0aCA9IE1hdGguYWJzKGh0bWwuY2xpZW50V2lkdGggLSBib2R5LmNsaWVudFdpZHRoIC0gYm9keU1hcmdpbklubGluZSk7XG4gICAgaWYgKGNsaXBwaW5nU3RhYmxlU2Nyb2xsYmFyV2lkdGggPD0gU0NST0xMQkFSX01BWCkge1xuICAgICAgd2lkdGggLT0gY2xpcHBpbmdTdGFibGVTY3JvbGxiYXJXaWR0aDtcbiAgICB9XG4gIH0gZWxzZSBpZiAod2luZG93U2Nyb2xsYmFyWCA8PSBTQ1JPTExCQVJfTUFYKSB7XG4gICAgLy8gSWYgdGhlIDxib2R5PiBzY3JvbGxiYXIgaXMgb24gdGhlIGxlZnQsIHRoZSB3aWR0aCBuZWVkcyB0byBiZSBleHRlbmRlZFxuICAgIC8vIGJ5IHRoZSBzY3JvbGxiYXIgYW1vdW50IHNvIHRoZXJlIGlzbid0IGV4dHJhIHNwYWNlIG9uIHRoZSByaWdodC5cbiAgICB3aWR0aCArPSB3aW5kb3dTY3JvbGxiYXJYO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5jb25zdCBhYnNvbHV0ZU9yRml4ZWQgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2Fic29sdXRlJywgJ2ZpeGVkJ10pO1xuLy8gUmV0dXJucyB0aGUgaW5uZXIgY2xpZW50IHJlY3QsIHN1YnRyYWN0aW5nIHNjcm9sbGJhcnMgaWYgcHJlc2VudC5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICBjb25zdCB0b3AgPSBjbGllbnRSZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICBjb25zdCBsZWZ0ID0gY2xpZW50UmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICBjb25zdCBzY2FsZSA9IGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRTY2FsZShlbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgd2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoICogc2NhbGUueDtcbiAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQgKiBzY2FsZS55O1xuICBjb25zdCB4ID0gbGVmdCAqIHNjYWxlLng7XG4gIGNvbnN0IHkgPSB0b3AgKiBzY2FsZS55O1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkge1xuICBsZXQgcmVjdDtcbiAgaWYgKGNsaXBwaW5nQW5jZXN0b3IgPT09ICd2aWV3cG9ydCcpIHtcbiAgICByZWN0ID0gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KTtcbiAgfSBlbHNlIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAnZG9jdW1lbnQnKSB7XG4gICAgcmVjdCA9IGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpO1xuICB9IGVsc2UgaWYgKGlzRWxlbWVudChjbGlwcGluZ0FuY2VzdG9yKSkge1xuICAgIHJlY3QgPSBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IGdldFZpc3VhbE9mZnNldHMoZWxlbWVudCk7XG4gICAgcmVjdCA9IHtcbiAgICAgIHg6IGNsaXBwaW5nQW5jZXN0b3IueCAtIHZpc3VhbE9mZnNldHMueCxcbiAgICAgIHk6IGNsaXBwaW5nQW5jZXN0b3IueSAtIHZpc3VhbE9mZnNldHMueSxcbiAgICAgIHdpZHRoOiBjbGlwcGluZ0FuY2VzdG9yLndpZHRoLFxuICAgICAgaGVpZ2h0OiBjbGlwcGluZ0FuY2VzdG9yLmhlaWdodFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3QocmVjdCk7XG59XG5mdW5jdGlvbiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgc3RvcE5vZGUpIHtcbiAgY29uc3QgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIGlmIChwYXJlbnROb2RlID09PSBzdG9wTm9kZSB8fCAhaXNFbGVtZW50KHBhcmVudE5vZGUpIHx8IGlzTGFzdFRyYXZlcnNhYmxlTm9kZShwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSQxKHBhcmVudE5vZGUpLnBvc2l0aW9uID09PSAnZml4ZWQnIHx8IGhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvcihwYXJlbnROb2RlLCBzdG9wTm9kZSk7XG59XG5cbi8vIEEgXCJjbGlwcGluZyBhbmNlc3RvclwiIGlzIGFuIGBvdmVyZmxvd2AgZWxlbWVudCB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgY2hpbGQgZWxlbWVudHMuIFRoaXMgcmV0dXJucyBhbGwgY2xpcHBpbmcgYW5jZXN0b3JzXG4vLyBvZiB0aGUgZ2l2ZW4gZWxlbWVudCB1cCB0aGUgdHJlZS5cbmZ1bmN0aW9uIGdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyhlbGVtZW50LCBjYWNoZSkge1xuICBjb25zdCBjYWNoZWRSZXN1bHQgPSBjYWNoZS5nZXQoZWxlbWVudCk7XG4gIGlmIChjYWNoZWRSZXN1bHQpIHtcbiAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICB9XG4gIGxldCByZXN1bHQgPSBnZXRPdmVyZmxvd0FuY2VzdG9ycyhlbGVtZW50LCBbXSwgZmFsc2UpLmZpbHRlcihlbCA9PiBpc0VsZW1lbnQoZWwpICYmIGdldE5vZGVOYW1lKGVsKSAhPT0gJ2JvZHknKTtcbiAgbGV0IGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgY29uc3QgZWxlbWVudElzRml4ZWQgPSBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCc7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgd2hpbGUgKGlzRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSQxKGN1cnJlbnROb2RlKTtcbiAgICBjb25zdCBjdXJyZW50Tm9kZUlzQ29udGFpbmluZyA9IGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKTtcbiAgICBpZiAoIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc2hvdWxkRHJvcEN1cnJlbnROb2RlID0gZWxlbWVudElzRml4ZWQgPyAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlIDogIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdzdGF0aWMnICYmICEhY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgJiYgYWJzb2x1dGVPckZpeGVkLmhhcyhjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZS5wb3NpdGlvbikgfHwgaXNPdmVyZmxvd0VsZW1lbnQoY3VycmVudE5vZGUpICYmICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgY3VycmVudE5vZGUpO1xuICAgIGlmIChzaG91bGREcm9wQ3VycmVudE5vZGUpIHtcbiAgICAgIC8vIERyb3Agbm9uLWNvbnRhaW5pbmcgYmxvY2tzLlxuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihhbmNlc3RvciA9PiBhbmNlc3RvciAhPT0gY3VycmVudE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWNvcmQgbGFzdCBjb250YWluaW5nIGJsb2NrIGZvciBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICBjYWNoZS5zZXQoZWxlbWVudCwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgYW5jZXN0b3JzLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBlbGVtZW50LFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9ID0gX3JlZjtcbiAgY29uc3QgZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ0FuY2VzdG9ycycgPyBpc1RvcExheWVyKGVsZW1lbnQpID8gW10gOiBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMoZWxlbWVudCwgdGhpcy5fYykgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICBjb25zdCBjbGlwcGluZ0FuY2VzdG9ycyA9IFsuLi5lbGVtZW50Q2xpcHBpbmdBbmNlc3RvcnMsIHJvb3RCb3VuZGFyeV07XG4gIGNvbnN0IGZpcnN0Q2xpcHBpbmdBbmNlc3RvciA9IGNsaXBwaW5nQW5jZXN0b3JzWzBdO1xuICBjb25zdCBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ0FuY2VzdG9ycy5yZWR1Y2UoKGFjY1JlY3QsIGNsaXBwaW5nQW5jZXN0b3IpID0+IHtcbiAgICBjb25zdCByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgZmlyc3RDbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICBoZWlnaHQ6IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wLFxuICAgIHg6IGNsaXBwaW5nUmVjdC5sZWZ0LFxuICAgIHk6IGNsaXBwaW5nUmVjdC50b3BcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGVsZW1lbnQsIG9mZnNldFBhcmVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuXG4gIC8vIElmIHRoZSA8Ym9keT4gc2Nyb2xsYmFyIGFwcGVhcnMgb24gdGhlIGxlZnQgKGUuZy4gUlRMIHN5c3RlbXMpLiBVc2VcbiAgLy8gRmlyZWZveCB3aXRoIGxheW91dC5zY3JvbGxiYXIuc2lkZSA9IDMgaW4gYWJvdXQ6Y29uZmlnIHRvIHRlc3QgdGhpcy5cbiAgZnVuY3Rpb24gc2V0TGVmdFJUTFNjcm9sbGJhck9mZnNldCgpIHtcbiAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gIH1cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IG9mZnNldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlLCBpc0ZpeGVkLCBvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0KCk7XG4gICAgfVxuICB9XG4gIGlmIChpc0ZpeGVkICYmICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiBkb2N1bWVudEVsZW1lbnQpIHtcbiAgICBzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0KCk7XG4gIH1cbiAgY29uc3QgaHRtbE9mZnNldCA9IGRvY3VtZW50RWxlbWVudCAmJiAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQgPyBnZXRIVE1MT2Zmc2V0KGRvY3VtZW50RWxlbWVudCwgc2Nyb2xsKSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgY29uc3QgeCA9IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54IC0gaHRtbE9mZnNldC54O1xuICBjb25zdCB5ID0gcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55IC0gaHRtbE9mZnNldC55O1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGljUG9zaXRpb25lZChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnO1xufVxuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAocG9seWZpbGwpIHtcbiAgICByZXR1cm4gcG9seWZpbGwoZWxlbWVudCk7XG4gIH1cbiAgbGV0IHJhd09mZnNldFBhcmVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXG4gIC8vIEZpcmVmb3ggcmV0dXJucyB0aGUgPGh0bWw+IGVsZW1lbnQgYXMgdGhlIG9mZnNldFBhcmVudCBpZiBpdCdzIG5vbi1zdGF0aWMsXG4gIC8vIHdoaWxlIENocm9tZSBhbmQgU2FmYXJpIHJldHVybiB0aGUgPGJvZHk+IGVsZW1lbnQuIFRoZSA8Ym9keT4gZWxlbWVudCBtdXN0XG4gIC8vIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUgY29ycmVjdCBjYWxjdWxhdGlvbnMgZXZlbiBpZiB0aGUgPGh0bWw+IGVsZW1lbnQgaXNcbiAgLy8gbm9uLXN0YXRpYy5cbiAgaWYgKGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSA9PT0gcmF3T2Zmc2V0UGFyZW50KSB7XG4gICAgcmF3T2Zmc2V0UGFyZW50ID0gcmF3T2Zmc2V0UGFyZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuICByZXR1cm4gcmF3T2Zmc2V0UGFyZW50O1xufVxuXG4vLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgaWYgKGlzVG9wTGF5ZXIoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIGxldCBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICAgIHdoaWxlIChzdmdPZmZzZXRQYXJlbnQgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICBpZiAoaXNFbGVtZW50KHN2Z09mZnNldFBhcmVudCkgJiYgIWlzU3RhdGljUG9zaXRpb25lZChzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiBzdmdPZmZzZXRQYXJlbnQ7XG4gICAgICB9XG4gICAgICBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKHN2Z09mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIHJldHVybiB3aW47XG4gIH1cbiAgbGV0IG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpO1xuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCwgcG9seWZpbGwpO1xuICB9XG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgaXNMYXN0VHJhdmVyc2FibGVOb2RlKG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkgJiYgIWlzQ29udGFpbmluZ0Jsb2NrKG9mZnNldFBhcmVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbjtcbn1cblxuY29uc3QgZ2V0RWxlbWVudFJlY3RzID0gYXN5bmMgZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgZ2V0T2Zmc2V0UGFyZW50Rm4gPSB0aGlzLmdldE9mZnNldFBhcmVudCB8fCBnZXRPZmZzZXRQYXJlbnQ7XG4gIGNvbnN0IGdldERpbWVuc2lvbnNGbiA9IHRoaXMuZ2V0RGltZW5zaW9ucztcbiAgY29uc3QgZmxvYXRpbmdEaW1lbnNpb25zID0gYXdhaXQgZ2V0RGltZW5zaW9uc0ZuKGRhdGEuZmxvYXRpbmcpO1xuICByZXR1cm4ge1xuICAgIHJlZmVyZW5jZTogZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoZGF0YS5yZWZlcmVuY2UsIGF3YWl0IGdldE9mZnNldFBhcmVudEZuKGRhdGEuZmxvYXRpbmcpLCBkYXRhLnN0cmF0ZWd5KSxcbiAgICBmbG9hdGluZzoge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB3aWR0aDogZmxvYXRpbmdEaW1lbnNpb25zLndpZHRoLFxuICAgICAgaGVpZ2h0OiBmbG9hdGluZ0RpbWVuc2lvbnMuaGVpZ2h0XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNSVEwoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSQxKGVsZW1lbnQpLmRpcmVjdGlvbiA9PT0gJ3J0bCc7XG59XG5cbmNvbnN0IHBsYXRmb3JtID0ge1xuICBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCxcbiAgZ2V0RG9jdW1lbnRFbGVtZW50LFxuICBnZXRDbGlwcGluZ1JlY3QsXG4gIGdldE9mZnNldFBhcmVudCxcbiAgZ2V0RWxlbWVudFJlY3RzLFxuICBnZXRDbGllbnRSZWN0cyxcbiAgZ2V0RGltZW5zaW9ucyxcbiAgZ2V0U2NhbGUsXG4gIGlzRWxlbWVudCxcbiAgaXNSVExcbn07XG5cbmZ1bmN0aW9uIHJlY3RzQXJlRXF1YWwoYSwgYikge1xuICByZXR1cm4gYS54ID09PSBiLnggJiYgYS55ID09PSBiLnkgJiYgYS53aWR0aCA9PT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PT0gYi5oZWlnaHQ7XG59XG5cbi8vIGh0dHBzOi8vc2FtdGhvci5hdS8yMDIxL29ic2VydmluZy1kb20vXG5mdW5jdGlvbiBvYnNlcnZlTW92ZShlbGVtZW50LCBvbk1vdmUpIHtcbiAgbGV0IGlvID0gbnVsbDtcbiAgbGV0IHRpbWVvdXRJZDtcbiAgY29uc3Qgcm9vdCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICB2YXIgX2lvO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgIChfaW8gPSBpbykgPT0gbnVsbCB8fCBfaW8uZGlzY29ubmVjdCgpO1xuICAgIGlvID0gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiByZWZyZXNoKHNraXAsIHRocmVzaG9sZCkge1xuICAgIGlmIChza2lwID09PSB2b2lkIDApIHtcbiAgICAgIHNraXAgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJlc2hvbGQgPSAxO1xuICAgIH1cbiAgICBjbGVhbnVwKCk7XG4gICAgY29uc3QgZWxlbWVudFJlY3RGb3JSb290TWFyZ2luID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB7XG4gICAgICBsZWZ0LFxuICAgICAgdG9wLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9ID0gZWxlbWVudFJlY3RGb3JSb290TWFyZ2luO1xuICAgIGlmICghc2tpcCkge1xuICAgICAgb25Nb3ZlKCk7XG4gICAgfVxuICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnNldFRvcCA9IGZsb29yKHRvcCk7XG4gICAgY29uc3QgaW5zZXRSaWdodCA9IGZsb29yKHJvb3QuY2xpZW50V2lkdGggLSAobGVmdCArIHdpZHRoKSk7XG4gICAgY29uc3QgaW5zZXRCb3R0b20gPSBmbG9vcihyb290LmNsaWVudEhlaWdodCAtICh0b3AgKyBoZWlnaHQpKTtcbiAgICBjb25zdCBpbnNldExlZnQgPSBmbG9vcihsZWZ0KTtcbiAgICBjb25zdCByb290TWFyZ2luID0gLWluc2V0VG9wICsgXCJweCBcIiArIC1pbnNldFJpZ2h0ICsgXCJweCBcIiArIC1pbnNldEJvdHRvbSArIFwicHggXCIgKyAtaW5zZXRMZWZ0ICsgXCJweFwiO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICByb290TWFyZ2luLFxuICAgICAgdGhyZXNob2xkOiBtYXgoMCwgbWluKDEsIHRocmVzaG9sZCkpIHx8IDFcbiAgICB9O1xuICAgIGxldCBpc0ZpcnN0VXBkYXRlID0gdHJ1ZTtcbiAgICBmdW5jdGlvbiBoYW5kbGVPYnNlcnZlKGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IHJhdGlvID0gZW50cmllc1swXS5pbnRlcnNlY3Rpb25SYXRpbztcbiAgICAgIGlmIChyYXRpbyAhPT0gdGhyZXNob2xkKSB7XG4gICAgICAgIGlmICghaXNGaXJzdFVwZGF0ZSkge1xuICAgICAgICAgIHJldHVybiByZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyYXRpbykge1xuICAgICAgICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgY2xpcHBlZCwgdGhlIHJhdGlvIGlzIDAuIFRocm90dGxlIHRoZSByZWZyZXNoXG4gICAgICAgICAgLy8gdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIG9mIHVwZGF0ZXMuXG4gICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZWZyZXNoKGZhbHNlLCAxZS03KTtcbiAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZyZXNoKGZhbHNlLCByYXRpbyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyYXRpbyA9PT0gMSAmJiAhcmVjdHNBcmVFcXVhbChlbGVtZW50UmVjdEZvclJvb3RNYXJnaW4sIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKSB7XG4gICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBldmVuIHRob3VnaCB0aGUgcmF0aW8gaXMgcmVwb3J0ZWQgYXMgMSwgdGhlXG4gICAgICAgIC8vIGVsZW1lbnQgaXMgbm90IGFjdHVhbGx5IGZ1bGx5IHdpdGhpbiB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIncyByb290XG4gICAgICAgIC8vIGFyZWEgYW55bW9yZS4gVGhpcyBjYW4gaGFwcGVuIHVuZGVyIHBlcmZvcm1hbmNlIGNvbnN0cmFpbnRzLiBUaGlzIG1heVxuICAgICAgICAvLyBiZSBhIGJ1ZyBpbiB0aGUgYnJvd3NlcidzIEludGVyc2VjdGlvbk9ic2VydmVyIGltcGxlbWVudGF0aW9uLiBUb1xuICAgICAgICAvLyB3b3JrIGFyb3VuZCB0aGlzLCB3ZSBjb21wYXJlIHRoZSBlbGVtZW50J3MgYm91bmRpbmcgcmVjdCBub3cgd2l0aFxuICAgICAgICAvLyB3aGF0IGl0IHdhcyBhdCB0aGUgdGltZSB3ZSBjcmVhdGVkIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlci4gSWYgdGhleVxuICAgICAgICAvLyBhcmUgbm90IGVxdWFsIHRoZW4gdGhlIGVsZW1lbnQgbW92ZWQsIHNvIHdlIHJlZnJlc2guXG4gICAgICAgIHJlZnJlc2goKTtcbiAgICAgIH1cbiAgICAgIGlzRmlyc3RVcGRhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBPbGRlciBicm93c2VycyBkb24ndCBzdXBwb3J0IGEgYGRvY3VtZW50YCBhcyB0aGUgcm9vdCBhbmQgd2lsbCB0aHJvdyBhblxuICAgIC8vIGVycm9yLlxuICAgIHRyeSB7XG4gICAgICBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihoYW5kbGVPYnNlcnZlLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIC8vIEhhbmRsZSA8aWZyYW1lPnNcbiAgICAgICAgcm9vdDogcm9vdC5vd25lckRvY3VtZW50XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChfZSkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlvLm9ic2VydmUoZWxlbWVudCk7XG4gIH1cbiAgcmVmcmVzaCh0cnVlKTtcbiAgcmV0dXJuIGNsZWFudXA7XG59XG5cbi8qKlxuICogQXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCB3aGVuIG5lY2Vzc2FyeS5cbiAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzIG1vdW50ZWQgb24gdGhlIERPTSBvclxuICogdmlzaWJsZSBvbiB0aGUgc2NyZWVuLlxuICogQHJldHVybnMgY2xlYW51cCBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBpbnZva2VkIHdoZW4gdGhlIGZsb2F0aW5nIGVsZW1lbnQgaXNcbiAqIHJlbW92ZWQgZnJvbSB0aGUgRE9NIG9yIGhpZGRlbiBmcm9tIHRoZSBzY3JlZW4uXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1VwZGF0ZVxuICovXG5mdW5jdGlvbiBhdXRvVXBkYXRlKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHVwZGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICBhbmNlc3RvclNjcm9sbCA9IHRydWUsXG4gICAgYW5jZXN0b3JSZXNpemUgPSB0cnVlLFxuICAgIGVsZW1lbnRSZXNpemUgPSB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgbGF5b3V0U2hpZnQgPSB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgYW5pbWF0aW9uRnJhbWUgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVmZXJlbmNlRWwgPSB1bndyYXBFbGVtZW50KHJlZmVyZW5jZSk7XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGFuY2VzdG9yU2Nyb2xsIHx8IGFuY2VzdG9yUmVzaXplID8gWy4uLihyZWZlcmVuY2VFbCA/IGdldE92ZXJmbG93QW5jZXN0b3JzKHJlZmVyZW5jZUVsKSA6IFtdKSwgLi4uZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZmxvYXRpbmcpXSA6IFtdO1xuICBhbmNlc3RvcnMuZm9yRWFjaChhbmNlc3RvciA9PiB7XG4gICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfSk7XG4gICAgYW5jZXN0b3JSZXNpemUgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlKTtcbiAgfSk7XG4gIGNvbnN0IGNsZWFudXBJbyA9IHJlZmVyZW5jZUVsICYmIGxheW91dFNoaWZ0ID8gb2JzZXJ2ZU1vdmUocmVmZXJlbmNlRWwsIHVwZGF0ZSkgOiBudWxsO1xuICBsZXQgcmVvYnNlcnZlRnJhbWUgPSAtMTtcbiAgbGV0IHJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgaWYgKGVsZW1lbnRSZXNpemUpIHtcbiAgICByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihfcmVmID0+IHtcbiAgICAgIGxldCBbZmlyc3RFbnRyeV0gPSBfcmVmO1xuICAgICAgaWYgKGZpcnN0RW50cnkgJiYgZmlyc3RFbnRyeS50YXJnZXQgPT09IHJlZmVyZW5jZUVsICYmIHJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIC8vIFByZXZlbnQgdXBkYXRlIGxvb3BzIHdoZW4gdXNpbmcgdGhlIGBzaXplYCBtaWRkbGV3YXJlLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzE3NDBcbiAgICAgICAgcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmVvYnNlcnZlRnJhbWUpO1xuICAgICAgICByZW9ic2VydmVGcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdmFyIF9yZXNpemVPYnNlcnZlcjtcbiAgICAgICAgICAoX3Jlc2l6ZU9ic2VydmVyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoZmxvYXRpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIGlmIChyZWZlcmVuY2VFbCAmJiAhYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUocmVmZXJlbmNlRWwpO1xuICAgIH1cbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgfVxuICBsZXQgZnJhbWVJZDtcbiAgbGV0IHByZXZSZWZSZWN0ID0gYW5pbWF0aW9uRnJhbWUgPyBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKSA6IG51bGw7XG4gIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgIGZyYW1lTG9vcCgpO1xuICB9XG4gIGZ1bmN0aW9uIGZyYW1lTG9vcCgpIHtcbiAgICBjb25zdCBuZXh0UmVmUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2UpO1xuICAgIGlmIChwcmV2UmVmUmVjdCAmJiAhcmVjdHNBcmVFcXVhbChwcmV2UmVmUmVjdCwgbmV4dFJlZlJlY3QpKSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gICAgcHJldlJlZlJlY3QgPSBuZXh0UmVmUmVjdDtcbiAgICBmcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lTG9vcCk7XG4gIH1cbiAgdXBkYXRlKCk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgdmFyIF9yZXNpemVPYnNlcnZlcjI7XG4gICAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlKTtcbiAgICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gICAgfSk7XG4gICAgY2xlYW51cElvID09IG51bGwgfHwgY2xlYW51cElvKCk7XG4gICAgKF9yZXNpemVPYnNlcnZlcjIgPSByZXNpemVPYnNlcnZlcikgPT0gbnVsbCB8fCBfcmVzaXplT2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTtcbiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgaWYgKGFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZUlkKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5jb25zdCBkZXRlY3RPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93JDE7XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IG9mZnNldCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGF1dG9QbGFjZW1lbnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gc2hpZnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmbGlwJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IOKAlFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IHNpemUkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBoaWRlJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gYXJyb3ckMTtcblxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gaW5saW5lJDE7XG5cbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBsaW1pdFNoaWZ0JDE7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSAocmVmZXJlbmNlLCBmbG9hdGluZywgb3B0aW9ucykgPT4ge1xuICAvLyBUaGlzIGNhY2hlcyB0aGUgZXhwZW5zaXZlIGBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnNgIGZ1bmN0aW9uIHNvIHRoYXRcbiAgLy8gbXVsdGlwbGUgbGlmZWN5Y2xlIHJlc2V0cyByZS11c2UgdGhlIHNhbWUgcmVzdWx0LiBJdCBvbmx5IGxpdmVzIGZvciBhXG4gIC8vIHNpbmdsZSBjYWxsLiBJZiBvdGhlciBmdW5jdGlvbnMgYmVjb21lIGV4cGVuc2l2ZSwgd2UgY2FuIGFkZCB0aGVtIGFzIHdlbGwuXG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcCgpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0ge1xuICAgIHBsYXRmb3JtLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgY29uc3QgcGxhdGZvcm1XaXRoQ2FjaGUgPSB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucy5wbGF0Zm9ybSxcbiAgICBfYzogY2FjaGVcbiAgfTtcbiAgcmV0dXJuIGNvbXB1dGVQb3NpdGlvbiQxKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgIHBsYXRmb3JtOiBwbGF0Zm9ybVdpdGhDYWNoZVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgcGxhdGZvcm0sIHNoaWZ0LCBzaXplIH07XG4iLCJpbXBvcnQgeyBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24gfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuXG5leHBvcnQgY29uc3QgUVVJQ0tfRVZFTlQgPSB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IHRydWUgfTtcbmV4cG9ydCBjb25zdCBJU19CUk9XU0VSID1cblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCI7XG5cbi8vIFRPRE86IERvY3VtZW50YXRpb24gZm9yIHByZXR0eU51bWJlclxubGV0IElOVExfTlVNOiBJbnRsLk51bWJlckZvcm1hdCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwcmV0dHlOdW1iZXIobnVtYmVyOiBudW1iZXIgfCBzdHJpbmcpIHtcblx0aWYgKCFJTlRMX05VTSlcblx0XHRJTlRMX05VTSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcblx0XHRcdChJU19CUk9XU0VSICYmIGF0dHIoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBcImxhbmdcIikpIHx8IFwibm9cIixcblx0XHQpO1xuXHRyZXR1cm4gSU5UTF9OVU0uZm9ybWF0KE51bWJlcihudW1iZXIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlPFQgZXh0ZW5kcyB1bmtub3duW10+KFxuXHRjYWxsYmFjazogKC4uLmFyZ3M6IFQpID0+IHZvaWQsXG5cdGRlbGF5OiBudW1iZXIsXG4pIHtcblx0bGV0IHRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcblxuXHRyZXR1cm4gKC4uLmFyZ3M6IFQpID0+IHtcblx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRcdHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBjYWxsYmFjayguLi5hcmdzKSwgZGVsYXkpO1xuXHR9O1xufVxuXG4vKipcbiAqIGF0dHJcbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgZ2V0LCBzZXQgYW5kIHJlbW92ZSBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gZWwgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gbmFtZSBUaGUgYXR0cmlidXRlIG5hbWUgdG8gZ2V0LCBzZXQgb3IgcmVtb3ZlLCBvciBhIG9iamVjdCB0byBzZXQgbXVsdGlwbGUgYXR0cmlidXRlc1xuICogQHBhcmFtIHZhbHVlIEEgdmFsaWQgYXR0cmlidXRlIHZhbHVlIG9yIG51bGwgdG8gcmVtb3ZlIGF0dHJpYnV0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0cihcblx0ZWw6IEVsZW1lbnQsXG5cdG5hbWU6IHN0cmluZyxcblx0dmFsdWU/OiBzdHJpbmcgfCBudWxsLFxuKTogc3RyaW5nIHwgbnVsbCB7XG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpID8/IG51bGw7IC8vIEZhbGxiYWNrIHRvIG51bGwgb25seSBpZiBlbCBpcyB1bmRlZmluZWRcblx0aWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG5cdHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIHVzZUlkXG4gKiBAcmV0dXJuIEEgZ2VuZXJhdGVkIHVuaXF1ZSBJRFxuICovXG5sZXQgaWQgPSAwO1xuY29uc3QgVVVJRCA9IGAke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgNSl9YDtcbmV4cG9ydCBmdW5jdGlvbiB1c2VJZChlbDogRWxlbWVudCkge1xuXHRpZiAoIWVsLmlkKSBlbC5pZCA9IGAke1VVSUR9JHsrK2lkfWA7XG5cdHJldHVybiBlbC5pZDtcbn1cblxuLy8gSW50ZXJuYWwgaGVscGVyIGZvciBvbiAvIG9mZlxuY29uc3QgZXZlbnRzID0gKFxuXHRhY3Rpb246IFwiYWRkXCIgfCBcInJlbW92ZVwiLFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHRbLi4ucmVzdF06IFBhcmFtZXRlcnM8dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI+LCAvLyBTcHJlYXQgdG8gbWFrZSBhIGNvcHkgb2YgdGhlIGFycmF5XG4pOiB2b2lkID0+IHtcblx0Zm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG5cdFx0cmVzdFswXSA9IHR5cGU7XG5cdFx0ZWxlbWVudFtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdKC4uLnJlc3QpO1xuXHR9XG59O1xuXG4vKipcbiAqIG9uXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9uID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiB7XG5cdGlmIChVTkJJTkQgJiYgKGVsZW1lbnQgPT09IHdpbmRvdyB8fCBlbGVtZW50ID09PSBkb2N1bWVudCkpXG5cdFx0VU5CSU5ELnB1c2goKCkgPT4gb2ZmKGVsZW1lbnQsIC4uLnJlc3QpKTtcblx0ZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xufTtcblxuLyoqXG4gKiBvZmZcbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIHR5cGVzIEEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBldmVudCB0eXBlc1xuICogQHBhcmFtIGxpc3RlbmVyIEFuIGV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uIG9yIGxpc3RlbmVyIG9iamVjdFxuICovXG5leHBvcnQgY29uc3Qgb2ZmID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIFdpbmRvdyB7XG5cdFx0X210ZHNVbmJpbmRFdmVudHM/OiBNYXA8c3RyaW5nLCBBcnJheTwoKSA9PiB2b2lkPj47XG5cdH1cbn1cblxuLyoqXG4gKiBvbkxvYWRlZFxuICogQGRlc2NyaXB0aW9uIFJ1bnMgYSBjYWxsYmFjayB3aGVuIHdpbmRvdyBpcyBsb2FkZWQgaW4gYnJvd3NlciwgYW5kIGVuc3VyZXMgZXZlbnRzIGFyZSB1bmJvdW5kIGlmIGhvdCByZWxvYWRpbmdcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gdGhlIHBhZ2UgaXMgcmVhZHlcbiAqL1xubGV0IFVOQklORDogQXJyYXk8KCkgPT4gdm9pZD4gfCBudWxsID0gbnVsbDtcbmV4cG9ydCBjb25zdCBvbkxvYWRlZCA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuXHRpZiAoIUlTX0JST1dTRVIgfHwgIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHJldHVybjsgLy8gU2tpcCBpZiBub3QgaW4gYnJvd3NlciBlbnZpcm9ubWVudFxuXHRpZiAoIXdpbmRvdy5fbXRkc1VuYmluZEV2ZW50cykgd2luZG93Ll9tdGRzVW5iaW5kRXZlbnRzID0gbmV3IE1hcCgpO1xuXG5cdGNvbnN0IHJ1biA9ICgpID0+XG5cdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRcdGNvbnN0IGtleSA9IFN0cmluZyhjYWxsYmFjaykucmVwbGFjZSgvKFxcbnxcXHMpL2csIFwiXCIpO1xuXHRcdFx0d2luZG93Ll9tdGRzVW5iaW5kRXZlbnRzPy5nZXQoa2V5KT8uZm9yRWFjaCgodW5iaW5kKSA9PiB7XG5cdFx0XHRcdHVuYmluZCgpOyAvLyBVbmJpbmQgcHJldmlvdXMgZXZlbnRzXG5cdFx0XHR9KTtcblx0XHRcdFVOQklORCA9IFtdOyAvLyBQcmVwYXJlIHRvIGxpc3RlbiBmb3IgbmV3bHkgYm91bmQgZXZlbnRzXG5cdFx0XHRjYWxsYmFjaygpOyAvLyBSdW4gYmluZGluZ1xuXHRcdFx0d2luZG93Ll9tdGRzVW5iaW5kRXZlbnRzPy5zZXQoa2V5LCBVTkJJTkQ/LnNsaWNlKDApKTsgLy8gU3RvcmUgZm9yIGxhdGVyIHVuYmluZGluZ1xuXHRcdFx0VU5CSU5EID0gbnVsbDsgLy8gU3RvcCBsaXN0ZW5pbmcgZm9yIG5ld2x5IGJvdW5kIGV2ZW50c1xuXHRcdH0pO1xuXG5cdGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHJ1bigpO1xuXHRlbHNlIG9uKHdpbmRvdywgXCJsb2FkXCIsIHJ1bik7XG59O1xuXG5jb25zdCBBTkNIT1JFRCA9IG5ldyBXZWFrTWFwPEVsZW1lbnQsIFJldHVyblR5cGU8dHlwZW9mIGF1dG9VcGRhdGU+PigpO1xuZXhwb3J0IGZ1bmN0aW9uIGFuY2hvclBvc2l0aW9uKFxuXHR0YXJnZXQ6IEhUTUxFbGVtZW50LFxuXHRhbmNob3I6IGZhbHNlIHwgRWxlbWVudCxcblx0b3B0aW9ucz86IFBhcmFtZXRlcnM8dHlwZW9mIGNvbXB1dGVQb3NpdGlvbj5bMl0sXG4pIHtcblx0QU5DSE9SRUQuZ2V0KHRhcmdldCk/LigpOyAvLyBVbmJpbmQgcHJldmlvdXMgYW5jaG9yIHBvc2l0aW9uXG5cdEFOQ0hPUkVELmRlbGV0ZSh0YXJnZXQpO1xuXG5cdGlmIChhbmNob3IpXG5cdFx0QU5DSE9SRUQuc2V0KFxuXHRcdFx0dGFyZ2V0LFxuXHRcdFx0YXV0b1VwZGF0ZShhbmNob3IsIHRhcmdldCwgKCkgPT4ge1xuXHRcdFx0XHRpZiAoIXRhcmdldC5pc0Nvbm5lY3RlZCB8fCAhYW5jaG9yLmlzQ29ubmVjdGVkIHx8IHRhcmdldC5oaWRkZW4pXG5cdFx0XHRcdFx0cmV0dXJuIGFuY2hvclBvc2l0aW9uKHRhcmdldCwgZmFsc2UpO1xuXHRcdFx0XHRjb21wdXRlUG9zaXRpb24oYW5jaG9yLCB0YXJnZXQsIG9wdGlvbnMpLnRoZW4oKHsgeCwgeSB9KSA9PiB7XG5cdFx0XHRcdFx0dGFyZ2V0LnN0eWxlLmxlZnQgPSBgJHt4fXB4YDtcblx0XHRcdFx0XHR0YXJnZXQuc3R5bGUudG9wID0gYCR7eX1weGA7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSksXG5cdFx0KTtcbn1cblxuLyoqXG4gKiBTcGVlZCB1cCBNdXRhdGlvbk9ic2VydmVyIGJ5IGRlYm91bmNpbmcgYW5kIG9ubHkgcnVubmluZyB3aGVuIHBhZ2UgaXMgdmlzaWJsZVxuICogQHJldHVybiBuZXcgTXV0YWlvbk9ic2VydmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrOiBNdXRhdGlvbkNhbGxiYWNrKSB7XG5cdGxldCBxdWV1ZSA9IDA7XG5cblx0Y29uc3Qgb25GcmFtZSA9ICgpID0+IHNldFRpbWVvdXQob25UaW1lciwgMjAwKTsgLy8gVXNlIGJvdGggcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGFuZCBzZXRUaW1lb3V0IHRvIGRlYm91bmNlIGFuZCBvbmx5IHJ1biB3aGVuIHZpc2libGVcblx0Y29uc3Qgb25UaW1lciA9ICgpID0+IHtcblx0XHRjYWxsYmFjayhbXSwgb2JzZXJ2ZXIpO1xuXHRcdG9ic2VydmVyLnRha2VSZWNvcmRzKCk7IC8vIENsZWFyIHJlY29yZHMgdG8gYXZvaWQgcnVubmluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuXHRcdHF1ZXVlID0gMDtcblx0fTtcblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG5cdFx0aWYgKCFxdWV1ZSkgcXVldWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUob25GcmFtZSk7XG5cdH0pO1xuXG5cdHJldHVybiBvYnNlcnZlcjtcbn1cblxuLyoqXG4gKiBvbk11dGF0aW9uXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IG9ic2VydmUgbXV0YXRpb25zIG9uIGEgc3BlY2lmaWMgY2xhc3MgbmFtZVxuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgY2xhc3MgbmFtZSB0byBvYnNlcnZlXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHJ1biB3aGVuIG11dGF0aW9ucyBhcmUgZGV0ZWN0ZWRcbiAqL1xuY29uc3QgTVVUQVRPUlMgPSBuZXcgV2Vha01hcDxFbGVtZW50LCBBcnJheTwoKSA9PiB2b2lkPj4oKTtcbmV4cG9ydCBjb25zdCBvbk11dGF0aW9uID0gPFQgZXh0ZW5kcyBFbGVtZW50Pihcblx0ZWw6IEVsZW1lbnQsXG5cdGNsYXNzTmFtZTogc3RyaW5nLFxuXHRjYWxsYmFjazogKGVsZW1zOiBIVE1MQ29sbGVjdGlvbk9mPFQ+KSA9PiB2b2lkLFxuKSA9PiB7XG5cdGlmICghSVNfQlJPV1NFUiB8fCAhd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSkgcmV0dXJuOyAvLyBTa2lwIGlmIG5vdCBpbiBicm93c2VyIGVudmlyb25tZW50XG5cdGNvbnN0IGVsZW1zID0gZWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpO1xuXHRjb25zdCBtdXRhdG9yID0gTVVUQVRPUlMuZ2V0KGVsKSB8fCBbXTtcblxuXHRpZiAoIW11dGF0b3IubGVuZ3RoKSB7XG5cdFx0TVVUQVRPUlMuc2V0KGVsLCBtdXRhdG9yKTtcblx0XHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKChfLCBvYnNlcnZlcikgPT4ge1xuXHRcdFx0aWYgKGVsLmlzQ29ubmVjdGVkICYmIG11dGF0b3I/Lmxlbmd0aCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIG11dGF0b3IpIGNhbGxiYWNrKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRNVVRBVE9SUy5kZWxldGUoZWwpO1xuXHRcdFx0fVxuXHRcdH0pLm9ic2VydmUoZWwsIHtcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wiY2xhc3NcIiwgXCJoaWRkZW5cIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0c3VidHJlZTogdHJ1ZSxcblx0XHR9KTtcblx0fVxuXHRtdXRhdG9yLnB1c2goKCkgPT4gY2FsbGJhY2soZWxlbXMgYXMgSFRNTENvbGxlY3Rpb25PZjxUPikpO1xufTtcblxuLyoqXG4gKiBpc0lucHV0TGlrZVxuICogQGRlc2NyaXB0aW9uIENoZWNrIGlmIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKiBAcGFyYW0gZWwgVGhlIGVsZW1lbnQgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKi9cbmV4cG9ydCBjb25zdCBpc0lucHV0TGlrZSA9IChlbDogdW5rbm93bik6IGVsIGlzIEhUTUxJbnB1dEVsZW1lbnQgPT5cblx0ZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcInZhbGlkaXR5XCIgaW4gZWwgJiZcblx0IShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KTtcblxuLyoqXG4gKiB0b0N1c3RvbUVsZW1lbnRQcm9wc1xuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBjb252ZXJ0IHByb3BzIHRvIGN1c3RvbSBlbGVtZW50IGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcHMgdG8gY29udmVydFxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBwcm9wc1xuICovXG5jb25zdCBTRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xuZXhwb3J0IGNvbnN0IHRvQ3VzdG9tRWxlbWVudFByb3BzID0gKFxuXHR7IGNsYXNzTmFtZSwgaGlkZGVuLCBvcGVuLCAuLi5yZXN0IH06IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRrbGFzcz86IHN0cmluZyxcbikgPT4ge1xuXHRyZXN0LnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyA9IHRydWU7IC8vIE1ha2UgTmV4dC5qcyBoYXBweVxuXHRpZiAocmVzdFtTRUxFQ1RFRF0gIT09IHVuZGVmaW5lZClcblx0XHRyZXN0W1NFTEVDVEVEXSA9IGAkeyhyZXN0W1NFTEVDVEVEXSB8fCBcImZhbHNlXCIpICE9PSBcImZhbHNlXCJ9YDsgLy8gRW5zdXJlIGFyaWEtc2VsZWN0ZWQgYm9vbGVhbiBpcyBzdHJpbmdcblx0aWYgKGNsYXNzTmFtZSB8fCBrbGFzcykgcmVzdC5jbGFzcyA9IGAke2tsYXNzfSAke2NsYXNzTmFtZX1gLnRyaW0oKTsgLy8gVXNlIGNsYXNzIGluc3RlYWQgb2YgY2xhc3NOYW1lXG5cdGlmIChoaWRkZW4pIHJlc3QuaGlkZGVuID0gdHJ1ZTsgLy8gRW5zdXJlIGJvb2xlYW4gcHJvcCBiZWhhdmlvdXJcblx0aWYgKG9wZW4pIHJlc3Qub3BlbiA9IHRydWU7IC8vIEVuc3VyZSBib29sZWFuIHByb3AgYmVoYXZpb3VyXG5cdHJldHVybiByZXN0O1xufTtcblxuZXhwb3J0IGNvbnN0IE1URFNFbGVtZW50ID1cblx0dHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiXG5cdFx0PyAoY2xhc3Mge30gYXMgdHlwZW9mIEhUTUxFbGVtZW50KVxuXHRcdDogSFRNTEVsZW1lbnQ7XG5cbmV4cG9ydCBjb25zdCBjdXN0b21FbGVtZW50cyA9IHtcblx0ZGVmaW5lOiAobmFtZTogc3RyaW5nLCBpbnN0YW5jZTogQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yKSA9PlxuXHRcdCFJU19CUk9XU0VSIHx8XG5cdFx0d2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fFxuXHRcdHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpLFxufTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBJU19CUk9XU0VSLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19CUkVBRENSVU1CUyA9IGAuJHtzdHlsZXMuYnJlYWRjcnVtYnMuc3BsaXQoXCIgXCIpWzBdfWA7XG5jb25zdCBDU1NfQ0hJUCA9IGAuJHtzdHlsZXMuY2hpcC5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENTU19IRUxQVEVYVCA9IGAuJHtzdHlsZXMuaGVscHRleHQuc3BsaXQoXCIgXCIpWzBdfWA7XG5jb25zdCBDU1NfUEFHSU5BVElPTiA9IGAuJHtzdHlsZXMucGFnaW5hdGlvbi5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENMSUNLUyA9IGBzdW1tYXJ5LHUtc3VtbWFyeSxhLGJ1dHRvbixbcm9sZT1cInRhYlwiXSxbcm9sZT1cImJ1dHRvblwiXWA7XG5jb25zdCBFVkVOVFMgPSBcImNsaWNrLHRvZ2dsZSxzdWJtaXQsY2hhbmdlXCI7XG5jb25zdCBNQVRPTU8gPSBcIm1hdHRpbHN5bmV0Lm1hdG9tby5jbG91ZFwiO1xuY29uc3QgQkFOTkVSID0gXCJtdGRzLWFuYWx5dGljcy1iYW5uZXJcIjsgLy8gRGlhbG9nIHRvIHNob3cgTWF0b21vIHNjcmlwdCBsb2FkaW5nXG5jb25zdCBCQU5ORVJfVVJMID1cblx0XCJodHRwczovL3d3dy5tYXR0aWxzeW5ldC5uby9vbS1tYXR0aWxzeW5ldC9wZXJzb252ZXJuZXJrbGFlcmluZy9pbmZvcm1hc2pvbnNrYXBzbGVyXCI7XG5cbnR5cGUgTWF0b21vID0gKFxuXHR8IHN0cmluZ1xuXHR8IG51bWJlclxuXHR8IGJvb2xlYW5cblx0fCBEb2N1bWVudFxuXHR8IEVsZW1lbnRcblx0fCAoKHRoaXM6IFJlY29yZDxzdHJpbmcsIDxUPigpID0+IFQ+KSA9PiB2b2lkKVxuKVtdO1xuZGVjbGFyZSBnbG9iYWwge1xuXHRpbnRlcmZhY2UgV2luZG93IHtcblx0XHRfcGFxPzogTWF0b21vW107XG5cdFx0X210bT86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj5bXTtcblx0XHRfbXRkc1RyYWNraW5nPzogQW5hbHl0aWNzQWN0aW9uc1tcImluaXRcIl07XG5cdFx0X210ZHNVbnRyYWNrPzogKCkgPT4gdm9pZDtcblx0fVxufVxuXG5leHBvcnQgdHlwZSBBbmFseXRpY3NBY3Rpb25zID0ge1xuXHRpbml0OiB7XG5cdFx0ZW5hYmxlZD86IGJvb2xlYW4gfCBcImRlYnVnXCI7XG5cdFx0Y29uc2VudD86IFwiY3VzdG9tXCIgfCB0cnVlO1xuXHR9ICYgKFxuXHRcdHwge1xuXHRcdFx0XHRtYXRvbW9JZDogbnVtYmVyIHwgc3RyaW5nO1xuXHRcdFx0XHRtYXRvbW9UYWdNYW5hZ2VySWQ/OiBuZXZlcjtcblx0XHQgIH1cblx0XHR8IHtcblx0XHRcdFx0bWF0b21vSWQ/OiBuZXZlcjtcblx0XHRcdFx0bWF0b21vVGFnTWFuYWdlcklkOiBzdHJpbmc7XG5cdFx0ICB9XG5cdCk7XG5cdHBhZ2V2aWV3OiB7XG5cdFx0dXJsPzogc3RyaW5nO1xuXHRcdHRpdGxlPzogc3RyaW5nO1xuXHR9O1xuXHRldmVudDoge1xuXHRcdGNhdGVnb3J5OiBzdHJpbmc7XG5cdFx0YWN0aW9uOiBzdHJpbmc7XG5cdFx0bmFtZT86IHN0cmluZztcblx0XHR2YWx1ZT86IG51bWJlcjtcblx0fTtcblx0c2VhcmNoOiB7XG5cdFx0cXVlcnk6IHN0cmluZztcblx0XHRjYXRlZ29yeT86IHN0cmluZztcblx0XHRyZXN1bHRzPzogbnVtYmVyO1xuXHR9O1xuXHRtYXRvbW86IE1hdG9tbztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhbmFseXRpY3M8QWN0aW9uIGV4dGVuZHMga2V5b2YgQW5hbHl0aWNzQWN0aW9ucz4oXG5cdGFjdGlvbjogQWN0aW9uLFxuXHRhcmdzID0ge30gYXMgQW5hbHl0aWNzQWN0aW9uc1tBY3Rpb25dLFxuKSB7XG5cdGlmICghSVNfQlJPV1NFUikgcmV0dXJuO1xuXHRpZiAoIXdpbmRvdy5fcGFxKSB7XG5cdFx0d2luZG93Ll9wYXEgPSBbXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcIkhlYXRtYXBTZXNzaW9uUmVjb3JkaW5nOjpkaXNhYmxlXCJdKTsgLy8gRGlzYWJsZSBoZWF0bWFwcyBieSBkZWZhdWx0IGFzIHRoaXMgcmVxdWlyZSBjb29raWVzXG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJlbmFibGVMaW5rVHJhY2tpbmdcIl0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0VHJhY2tlclVybFwiLCBgaHR0cHM6Ly8ke01BVE9NT30vbWF0b21vLnBocGBdKTtcblx0fVxuXHRpZiAoIXdpbmRvdy5fbXRtKSB7XG5cdFx0d2luZG93Ll9tdG0gPSB3aW5kb3cuX210bSB8fCBbXTsgLy8gUHJlcGFyZSBNYXRvbW8gVGFnIE1hbmFnZXJcblx0XHR3aW5kb3cuX210bS5wdXNoKHsgXCJtdG0uc3RhcnRUaW1lXCI6IERhdGUubm93KCksIGV2ZW50OiBcIm10bS5TdGFydFwiIH0pO1xuXHR9XG5cblx0aWYgKGFjdGlvbiA9PT0gXCJpbml0XCIpIHtcblx0XHR3aW5kb3cuX210ZHNUcmFja2luZyA9IHtcblx0XHRcdGVuYWJsZWQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSAhPT0gXCJsb2NhbGhvc3RcIixcblx0XHRcdC4uLndpbmRvdy5fbXRkc1RyYWNraW5nLFxuXHRcdFx0Li4uYXJncyxcblx0XHR9IGFzIEFuYWx5dGljc0FjdGlvbnNbXCJpbml0XCJdO1xuXHRcdGNvbnN0IHsgY29uc2VudCwgZW5hYmxlZCwgbWF0b21vSWQsIG1hdG9tb1RhZ01hbmFnZXJJZCB9ID1cblx0XHRcdHdpbmRvdy5fbXRkc1RyYWNraW5nO1xuXG5cdFx0aWYgKG1hdG9tb0lkKSB3aW5kb3cuX3BhcS5wdXNoKFtcInNldFNpdGVJZFwiLCBtYXRvbW9JZF0pO1xuXHRcdGlmIChlbmFibGVkKSB7XG5cdFx0XHRpZiAoY29uc2VudCAhPT0gXCJjdXN0b21cIikgcmVuZGVyQmFubmVyKCk7XG5cdFx0XHRjb25zdCBzcmMgPSBtYXRvbW9UYWdNYW5hZ2VySWRcblx0XHRcdFx0PyBgaHR0cHM6Ly9jZG4ubWF0b21vLmNsb3VkLyR7TUFUT01PfS9jb250YWluZXJfJHttYXRvbW9UYWdNYW5hZ2VySWR9LmpzYFxuXHRcdFx0XHQ6IGBodHRwczovL2Nkbi5tYXRvbW8uY2xvdWQvJHtNQVRPTU99L21hdG9tby5qc2A7XG5cblx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHNjcmlwdFtzcmM9XCIke3NyY31cIl1gKSB8fFxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZChcblx0XHRcdFx0XHRPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIiksIHtcblx0XHRcdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRcdFx0c3JjLFxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdGlmICh3aW5kb3cuX210ZHNUcmFja2luZz8uZW5hYmxlZCA9PT0gZmFsc2UpIHJldHVybjtcblx0aWYgKHdpbmRvdy5fbXRkc1RyYWNraW5nPy5lbmFibGVkID09PSBcImRlYnVnXCIpXG5cdFx0cmV0dXJuIGNvbnNvbGUuaW5mbyhgYW5hbHl0aWNzKFwiJHthY3Rpb259XCIsIGAsIGFyZ3MsIFwiKVwiKTtcblxuXHRpZiAoYWN0aW9uID09PSBcInBhZ2V2aWV3XCIpIHtcblx0XHRjb25zdCB7IHVybCwgdGl0bGUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInBhZ2V2aWV3XCJdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0Q3VzdG9tVXJsXCIsIHVybCB8fCBsb2NhdGlvbi5ocmVmXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXREb2N1bWVudFRpdGxlXCIsIHRpdGxlIHx8IGRvY3VtZW50LnRpdGxlXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJ0cmFja1BhZ2VWaWV3XCJdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwiZXZlbnRcIikge1xuXHRcdGNvbnN0IHsgY2F0ZWdvcnksIGFjdGlvbiwgbmFtZSwgdmFsdWUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcImV2ZW50XCJdO1xuXHRcdGNvbnN0IGV2ZW50ID0gW1widHJhY2tFdmVudFwiLCBjYXRlZ29yeSwgYWN0aW9uLCBuYW1lLCB2YWx1ZV07XG5cblx0XHQvLyBXZSBkbyBub3Qgd2FudCB0byB0cmFjayBldmVudHMgd2l0aCBoYXNoIGluIFVSTCBhcyB0aGlzIGNhdXNlcyBoYXJkLXRvLXJlYWQgZGF0YSxcblx0XHQvLyBzbyB0ZW1wb3JhcmlseSByZW1vdmUgdGhlIGhhc2ggcGFydCwgYW5kIGFkZCBpdCBiYWNrIGFmdGVyIHRoZSBldmVudCBpcyBwdXNoZWRcblx0XHRsZXQgdXJsID0gbG9jYXRpb24uaHJlZjtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcblx0XHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dXJsID0gdGhpcy5nZXRDdXJyZW50VXJsPHN0cmluZz4oKTtcblx0XHRcdH0sXG5cdFx0XSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRDdXN0b21VcmxcIiwgdXJsLnNwbGl0KFwiI1wiKVswXV0pOyAvLyBTa2lwIGhhc2ggcGFydCBvZiBVUkxcblx0XHR3aW5kb3cuX3BhcS5wdXNoKGV2ZW50LmZpbHRlcigodikgPT4gdiAhPT0gdW5kZWZpbmVkKSk7IC8vIFB1c2ggZXZlbnRcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCB1cmxdKTsgLy8gUmV2ZXJydCB0byBvcmlnaW5hbCBVUkwgd2l0aCBoYXNoXG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcInNlYXJjaFwiKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0cXVlcnksXG5cdFx0XHRjYXRlZ29yeSA9IGZhbHNlLFxuXHRcdFx0cmVzdWx0cyA9IGZhbHNlLFxuXHRcdH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJzZWFyY2hcIl07XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJ0cmFja1NpdGVTZWFyY2hcIiwgcXVlcnksIGNhdGVnb3J5LCByZXN1bHRzXSk7XG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcIm1hdG9tb1wiKSB7XG5cdFx0d2luZG93Ll9wYXEucHVzaChhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJtYXRvbW9cIl0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbmRlckJhbm5lcigpIHtcblx0Y29uc3QgaGFzU2VlbkJhbm5lciA9XG5cdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoQkFOTkVSKSB8fCB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oQkFOTkVSKTtcblxuXHRpZiAoaGFzU2VlbkJhbm5lcikgcmV0dXJuO1xuXG5cdGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuXHRcdFwiYWZ0ZXJiZWdpblwiLFxuXHRcdGA8ZGlhbG9nIGlkPVwiJHtCQU5ORVJ9XCIgZGF0YS1hbmFseXRpY3M9XCJpZ25vcmVcIj48c3R5bGU+XG5cdFx0XHRcdCMke0JBTk5FUn1bb3Blbl0geyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBiYWNrZ3JvdW5kOiAjMTE2ZTZiOyBib3JkZXItcmFkaXVzOiAuNWVtOyBib3JkZXI6IDA7IGJveC1zaGFkb3c6IDAgLjI1ZW0gLjVlbSByZ2JhKDAsMCwwLC4zKTsgY29sb3I6ICNmZmY7IGZvbnQtc2l6ZTogLjg3NWVtOyBpbnNldDogYXV0byBhdXRvIDFlbSAxZW07IG1heC13aWR0aDogY2FsYygxMDB2dyAtIDJlbSk7IG91dGxpbmU6IDA7IHBhZGRpbmc6IC41ZW07IHBvc2l0aW9uOiBmaXhlZDsgei1pbmRleDogOTk5OTkgfVxuXHRcdFx0XHQjJHtCQU5ORVJ9IGJ1dHRvbiB7IGFsbDogdW5zZXQ7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogZmxleDsgd2lkdGg6IDEuNWVtOyBoZWlnaHQ6IDEuNWVtOyBmb250OiAzMDAgMS41ZW0vMS4zNSBzYW5zLXNlcmlmOyBib3JkZXItcmFkaXVzOiAuMjVlbTsgcGxhY2UtY29udGVudDogY2VudGVyOyB0cmFuc2l0aW9uOiAuMnM7IHRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQsIHNjYWxlIH1cblx0XHRcdFx0IyR7QkFOTkVSfSBidXR0b246Zm9jdXMtdmlzaWJsZSB7IG91dGxpbmU6IDJweCBzb2xpZCB9XG5cdFx0XHRcdCMke0JBTk5FUn0gYnV0dG9uOmhvdmVyIHsgYmFja2dyb3VuZDogIzBhNGU0ZiB9XG5cdFx0XHRcdCMke0JBTk5FUn0gYnV0dG9uOmFjdGl2ZSB7IGJhY2tncm91bmQ6ICMwNTQ0NDk7IHNjYWxlOiAuOSB9XG5cdFx0XHRcdCMke0JBTk5FUn0gcCB7IG1hcmdpbjogMCAuMjVlbSB9XG5cdFx0XHQ8L3N0eWxlPlxuXHRcdFx0PHA+VmkgYnJ1a2VyIDxhIGhyZWY9XCIke0JBTk5FUl9VUkx9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+aW5mb3JtYXNqb25za2Fwc2xlcjwvYT4gZm9yIMOlIGZvcmJlZHJlIGJydWtlcm9wcGxldmVsc2VuLjwvcD5cblx0XHRcdDxmb3JtIG1ldGhvZD1cImRpYWxvZ1wiIGRhdGEtYW5hbHl0aWNzPVwiaWdub3JlXCI+PGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgYXJpYS1sYWJlbD1cIk9LXCI+JnRpbWVzOzwvYnV0dG9uPjwvZm9ybT5cblx0XHQ8L2RpYWxvZz5gLFxuXHQpO1xuXHRjb25zdCBiYW5uZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChCQU5ORVIpIGFzIEhUTUxEaWFsb2dFbGVtZW50O1xuXHRjb25zdCBvbkNsb3NlID0gKCkgPT4gd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKEJBTk5FUiwgXCJzZWVuXCIpO1xuXHRiYW5uZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsb3NlXCIsIG9uQ2xvc2UsIHsgb25jZTogdHJ1ZSB9KTtcblx0YmFubmVyLnNob3coKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlVHJhY2soZXZlbnQ6IEV2ZW50KSB7XG5cdGlmICh3aW5kb3cuX210ZHNUcmFja2luZz8uZW5hYmxlZCkgc2V0VGltZW91dChwcm9jZXNzVHJhY2ssIDAsIGV2ZW50KTsgLy8gTGV0IG90aGVyIGV2ZW50cyBwcm9jZXNzIGZpcnN0XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NUcmFjayh7IHR5cGUsIHRhcmdldCB9OiBFdmVudCkge1xuXHRjb25zdCBlbCA9IHR5cGUgPT09IFwiY2xpY2tcIiA/ICh0YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihDTElDS1MpIDogdGFyZ2V0O1xuXHRpZiAoIShlbCBpbnN0YW5jZW9mIEVsZW1lbnQpIHx8IGVsLmNsb3Nlc3QoJ1tkYXRhLWFuYWx5dGljcz1cImlnbm9yZVwiXScpKVxuXHRcdHJldHVybjtcblxuXHRsZXQgYWN0aW9uID0gXCJjbGlja1wiO1xuXHRsZXQgY2F0ZWdvcnkgPSBcIkJ1dHRvblwiO1xuXHRsZXQgbmFtZSA9IGxhYmVsKGVsKSB8fCBoZWFkaW5nKGVsKSB8fCBhdHRyKGVsLCBcImRhdGEtdG9vbHRpcFwiKSB8fCBcIlwiO1xuXG5cdGlmICh0eXBlID09PSBcInN1Ym1pdFwiKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkZvcm1cIjtcblx0XHRhY3Rpb24gPSBcInN1Ym1pdFwiO1xuXHRcdG5hbWUgPSBuYW1lIHx8IGRvY3VtZW50LnRpdGxlO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT09IFwidG9nZ2xlXCIpIHtcblx0XHRpZiAoIWVsLm1hdGNoZXMoXCJkaWFsb2c6bW9kYWxcIikpIHJldHVybjsgLy8gU2tpcCBub24tbW9kYWwgZGlhbG9nc1xuXHRcdGNhdGVnb3J5ID0gXCJEaWFsb2dcIjtcblx0XHRhY3Rpb24gPSBcIm9wZW5cIjtcblx0fSBlbHNlIGlmICh0eXBlID09PSBcImNoYW5nZVwiKSB7XG5cdFx0Y29uc3QgdHlwZSA9IGF0dHIoZWwsIFwidHlwZVwiKTtcblx0XHRjb25zdCBncm91cCA9XG5cdFx0XHR0eXBlID09PSBcImNoZWNrYm94XCIgfHwgdHlwZSA9PT0gXCJyYWRpb1wiID8gZWwuY2xvc2VzdChcImZpZWxkc2V0XCIpIDogbnVsbDtcblxuXHRcdGNhdGVnb3J5ID0gXCJGb3JtXCI7XG5cdFx0YWN0aW9uID0gXCJjaGFuZ2VcIjtcblx0XHRuYW1lID1cblx0XHRcdGxhYmVsKGdyb3VwIHx8IGVsKSB8fFxuXHRcdFx0dGV4dChncm91cD8ucXVlcnlTZWxlY3RvcihcImxlZ2VuZFwiKSkgfHxcblx0XHRcdHRleHQoKGVsIGFzIEhUTUxJbnB1dEVsZW1lbnQpPy5sYWJlbHM/LlswXSk7XG5cdH0gZWxzZSBpZiAoYXR0cihlbCwgXCJyb2xlXCIpID09PSBcInRhYlwiKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIlRhYlwiO1xuXHRcdGFjdGlvbiA9IFwibmF2aWdhdGVcIjtcblx0fSBlbHNlIGlmIChhdHRyKGVsLCBcInBvcG92ZXJ0YXJnZXRcIikpIHtcblx0XHRpZiAoIXBvcG92ZXIoZWwpPy5tYXRjaGVzKFwiOnBvcG92ZXItb3BlblwiKSkgcmV0dXJuOyAvLyBTa2lwIGlmIG5vdCBvcGVuXG5cdFx0Y2F0ZWdvcnkgPSBlbC5jbG9zZXN0KENTU19IRUxQVEVYVCkgPyBcIkhlbHBUZXh0XCIgOiBcIlBvcG92ZXJcIjtcblx0XHRhY3Rpb24gPSBcIm9wZW5cIjtcblx0fSBlbHNlIGlmIChlbC5ub2RlTmFtZS5lbmRzV2l0aChcIlNVTU1BUllcIikpIHtcblx0XHRpZiAoIShlbC5wYXJlbnRFbGVtZW50IGFzIEhUTUxEZXRhaWxzRWxlbWVudCkub3BlbikgcmV0dXJuOyAvLyBTa2lwIGlmIG5vdCBvcGVuXG5cdFx0Y2F0ZWdvcnkgPSBcIkRldGFpbHNcIjtcblx0XHRhY3Rpb24gPSBcIm9wZW5cIjtcblx0fSBlbHNlIGlmIChhdHRyKGVsLCBcImRhdGEtY29tbWFuZFwiKSA9PT0gXCJ0b2dnbGUtYXBwLWV4cGFuZGVkXCIpIHtcblx0XHRjb25zdCBvcGVuID0gc3R5bGUoZWwsIFwiLS1tdGRzLXRvb2x0aXAtcG9zaXRpb25cIikgPT09IFwibm9uZVwiO1xuXHRcdGNhdGVnb3J5ID0gXCJTaWRlYmFyXCI7XG5cdFx0YWN0aW9uID0gb3BlbiA/IFwiZXhwYW5kXCIgOiBcIm1pbmltaXplXCI7XG5cdFx0bmFtZSA9IChvcGVuICYmIGF0dHIoZWwsIFwiZGF0YS10b29sdGlwXCIpKSB8fCB0ZXh0KGVsKTtcblx0fSBlbHNlIGlmIChlbC5jbG9zZXN0KENTU19CUkVBRENSVU1CUykpIHtcblx0XHRjYXRlZ29yeSA9IFwiQnJlYWRjcnVtYnNcIjtcblx0XHRhY3Rpb24gPSBcIm5hdmlnYXRlXCI7XG5cdH0gZWxzZSBpZiAoZWwuY2xvc2VzdChDU1NfUEFHSU5BVElPTikpIHtcblx0XHRjYXRlZ29yeSA9IFwiUGFnaW50YXRpb25cIjtcblx0XHRhY3Rpb24gPSBcIm5hdmlnYXRlXCI7XG5cdH0gZWxzZSBpZiAoZWwuY2xvc2VzdChDU1NfQ0hJUCkpIHtcblx0XHRjYXRlZ29yeSA9IFwiQ2hpcFwiO1xuXHRcdGFjdGlvbiA9IGVsLmhhc0F0dHJpYnV0ZShcImRhdGEtcmVtb3ZhYmxlXCIpID8gXCJyZW1vdmVcIiA6IFwiY2xpY2tcIjtcblx0fSBlbHNlIGlmIChlbC5jbG9zZXN0KFwidGhbYXJpYS1zb3J0XVwiKSkge1xuXHRcdGNhdGVnb3J5ID0gXCJUYWJsZVwiO1xuXHRcdGFjdGlvbiA9IFwic29ydFwiO1xuXHR9IGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgSFRNTEFuY2hvckVsZW1lbnQpIHtcblx0XHRjYXRlZ29yeSA9IFwiTGlua1wiO1xuXHRcdGFjdGlvbiA9IGVsLnByb3RvY29sID09PSBcIm1haWx0bzpcIiA/IFwiZW1haWxcIiA6IFwibmF2aWdhdGVcIjtcblx0XHRpZiAoZWwuaGFzQXR0cmlidXRlKFwiZG93bmxvYWRcIikpIGFjdGlvbiA9IFwiZG93bmxvYWRcIjtcblx0XHRlbHNlIGlmIChlbC5oYXNoICYmIGVsLmhyZWYuc3RhcnRzV2l0aChsb2NhdGlvbi5ocmVmLnNwbGl0KFwiI1wiKVswXSkpXG5cdFx0XHRhY3Rpb24gPSBcImFuY2hvclwiOyAvLyBPbmx5IHRyYWNrIGFzIGFuY2hvciBpZiBzYW1lIHBhZ2Vcblx0fSBlbHNlIGlmIChlbC5oYXNBdHRyaWJ1dGUoXCJhcmlhLWV4cGFuZGVkXCIpKSB7XG5cdFx0aWYgKGF0dHIoZWwsIFwiYXJpYS1leHBhbmRlZFwiKSAhPT0gXCJ0cnVlXCIpIHJldHVybjsgLy8gU2tpcCBpZiBub3Qgb3BlblxuXHRcdGNhdGVnb3J5ID0gXCJFeHBhbmRcIjtcblx0XHRhY3Rpb24gPSBcIm9wZW5cIjtcblx0fVxuXG5cdC8vIFJlc3BlY3QgYXR0cmlidXRlcyBhbmQgc2VuZFxuXHRhbmFseXRpY3MoXCJldmVudFwiLCB7XG5cdFx0Y2F0ZWdvcnk6IGF0dHIoZWwsIFwiZGF0YS1hbmFseXRpY3MtY2F0ZWdvcnlcIikgPz8gY2F0ZWdvcnksXG5cdFx0YWN0aW9uOiBhdHRyKGVsLCBcImRhdGEtYW5hbHl0aWNzLWFjdGlvblwiKSA/PyBhY3Rpb24sXG5cdFx0bmFtZTogYXR0cihlbCwgXCJkYXRhLWFuYWx5dGljcy1uYW1lXCIpID8/IG5hbWUsXG5cdH0pO1xufVxuXG4vLyBVdGlsaXRpZXNcbmNvbnN0IHRleHQgPSAoZWw/OiBFbGVtZW50IHwgbnVsbCkgPT4gZWw/LnRleHRDb250ZW50Py50cmltKCkgfHwgXCJcIjtcbmNvbnN0IGxhYmVsID0gKGVsPzogRWxlbWVudCB8IG51bGwpID0+IChlbCAmJiBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikpIHx8IFwiXCI7XG5jb25zdCBwb3BvdmVyID0gKGVsOiBFbGVtZW50KSA9PlxuXHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhdHRyKGVsLCBcInBvcG92ZXJ0YXJnZXRcIikgfHwgXCJcIik7XG5jb25zdCBzdHlsZSA9IChlbDogRWxlbWVudCwga2V5OiBzdHJpbmcpID0+XG5cdHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKS5nZXRQcm9wZXJ0eVZhbHVlKGtleSk/LnRyaW0oKTtcbmNvbnN0IGhlYWRpbmcgPSAoZWw6IEVsZW1lbnQpID0+IHtcblx0Y29uc3QgYm9keSA9IHRleHQoZWwpO1xuXHRjb25zdCBoZWFkID0gdGV4dChlbC5xdWVyeVNlbGVjdG9yKFwiaDEsaDIsaDMsaDQsaDUsaDZcIikpOyAvLyBOb3RlOiBoZWFkIG1pZ2h0IGJlIGVtcHR5IHN0cmluZyAnJ1xuXHRyZXR1cm4gKGJvZHkuc3RhcnRzV2l0aChoZWFkKSAmJiBoZWFkKSB8fCBib2R5LnNsaWNlKDAsIDEwMCkudHJpbSgpOyAvLyBMaW1pdCB0byAxMDAgY2hhcmFjdGVyc1xufTtcblxub25Mb2FkZWQoKCkgPT4gb24oZG9jdW1lbnQsIEVWRU5UUywgaGFuZGxlVHJhY2ssIFFVSUNLX0VWRU5UKSk7XG4iLCJpZiAoXG5cdHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0d2luZG93LkNTU1N0eWxlU2hlZXQgJiZcblx0ZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzXG4pXG5cdCgoKSA9PiB7XG5cdFx0Y29uc3Qga2V5ID0gXCItLW10ZHMtYXBwLWV4cGFuZGVkXCI7XG5cdFx0Y29uc3Qgc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXHRcdGNvbnN0IHByZXYgPSAoKSA9PiAhd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk/LmluY2x1ZGVzKFwiZmFsc2VcIik7XG5cblx0XHRkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMucHVzaChzaGVldCk7XG5cdFx0d2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZCA9IChmb3JjZSkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgbmV4dCA9IGZvcmNlID8/ICFwcmV2KCk7XG5cdFx0XHRcdHNoZWV0LnJlcGxhY2VTeW5jPy4oYDpyb290IHsgJHtrZXl9OiB2YXIoJHtrZXl9LS0ke25leHR9KX1gKTtcblx0XHRcdFx0d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgbmV4dCk7XG5cdFx0XHR9IGNhdGNoIChfZXJyKSB7fSAvLyBsb2NhbFN0b3JhZ2UgaXMgZnVsbCBvciByZXBsYWNlU3luYyBpcyBub3Qgc3VwcG9ydGVkXG5cdFx0fTtcblxuXHRcdC8vIFNldCBhbmQgc3RvcmUgaW5pdGlhbCBzdGF0ZVxuXHRcdHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQocHJldigpKTtcblx0fSkoKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBkZWJvdW5jZSwgb24sIG9uTG9hZGVkLCBvbk11dGF0aW9uLCBRVUlDS19FVkVOVCB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IFwiLi9hcHAtdG9nZ2xlXCI7XG5cbmNvbnN0IENTU19BUFAgPSBzdHlsZXMuYXBwLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19TVElDS1kgPSBzdHlsZXMuc3RpY2t5LnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19UT0dHTEUgPSAnW2RhdGEtY29tbWFuZD1cInRvZ2dsZS1hcHAtZXhwYW5kZWRcIl0nO1xuY29uc3QgQ1NTX1NJREVCQVIgPSBgLiR7Q1NTX0FQUH0gPiBkaWFsb2csLiR7Q1NTX0FQUH0gZGlhbG9nIH4gbWFpbmA7XG5cbmNvbnN0IHVzZVRyYW5zaXRpb24gPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcblx0aWYgKCFkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKSBjYWxsYmFjaygpO1xuXHRlbHNlIGRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24oY2FsbGJhY2spO1xufTtcblxuZXhwb3J0IGNvbnN0IHRvZ2dsZUFwcEV4cGFuZGVkID0gKGZvcmNlPzogYm9vbGVhbikgPT5cblx0Ly8gQHRzLWV4cGVjdC1lcnJvciB3aW5kb3cubXRkc0FwcFRvZ2dsZSBjb21lcyBmcm9tIGFwcC10b2dnbGUuanNcblx0dXNlVHJhbnNpdGlvbigoKSA9PiB3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkPy4oZm9yY2UpKTtcblxuZnVuY3Rpb24gaGFuZGxlQXBwVG9nZ2xlQ2xpY2soeyB0YXJnZXQ6IGVsLCBkZWZhdWx0UHJldmVudGVkOiBzdG9wIH06IEV2ZW50KSB7XG5cdGNvbnN0IGxpbmsgPSAoZWwgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImFcIik7XG5cdGlmIChsaW5rPy5jbG9zZXN0KFwiZGlhbG9nXCIpICYmIGxpbms/LmNsb3Nlc3QoQ1NTX1NJREVCQVIpKVxuXHRcdHJldHVybiBjbG9zZVNpZGViYXIoKTsgLy8gQ2xvc2Ugc2lkZWJhciBpZiBsaW5rIGlzIGNsaWNrZWQgaW5zaWRlIHNpZGViYXJcblxuXHRpZiAoc3RvcCB8fCAhKGVsIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpIHx8ICFlbC5tYXRjaGVzKENTU19UT0dHTEUpKVxuXHRcdHJldHVybjtcblx0Y29uc3QgaXNEZXNrdG9wID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCkucG9zaXRpb24gPT09IFwic3RpY2t5XCI7XG5cblx0aWYgKGlzRGVza3RvcCkgdG9nZ2xlQXBwRXhwYW5kZWQoKTtcblx0ZWxzZVxuXHRcdHVzZVRyYW5zaXRpb24oKCkgPT4ge1xuXHRcdFx0Y29uc3Qgc2lkZWJhciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpYWxvZ0VsZW1lbnQ+KENTU19TSURFQkFSKTtcblx0XHRcdHNpZGViYXI/LnNldEF0dHJpYnV0ZShcImRhdGEtY2xvc2VkYnlcIiwgXCJhbnlcIik7IC8vIEFsbG93IGNsb3NpbmcgYnkgY2xpY2tpbmcgb3V0c2lkZVxuXHRcdFx0c2lkZWJhcj8uc2hvd01vZGFsKCk7XG5cdFx0fSk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlU2lkZWJhcigpIHtcblx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGlhbG9nRWxlbWVudD4oQ1NTX1NJREVCQVIpPy5jbG9zZSgpO1xufVxuXG4vLyBTY3JvbGwgc3RhdGVcbmxldCBNSU5fWSA9IDA7IC8vIE9mZnNldCB0byBhdm9pZCBzY3JvbGwganVtcCB3aGVuIHN0aWNreSBpcyBzZXQgdG8gcmVsYXRpdmVcbmxldCBTQ1JPTExfVVA6IGJvb2xlYW47XG5sZXQgU1RJQ0sgPSAwOyAvLyAtMSA9IHN0aWNrIHRvcCwgMCA9IHJlbGF0aXZlLCAxID0gc3RpY2sgYm90dG9tXG5sZXQgU1RJQ0tfRUw6IEhUTUxFbGVtZW50O1xubGV0IFNUSUNLX0ggPSAwO1xubGV0IFNUSUNLX1kgPSAwO1xubGV0IFNUVUNLID0gZmFsc2U7IC8vIFVzZWQgdG8gZmlndXJlIGlmIG5hdiBpcyBsYXJnZXIgdGhhbiB2aWV3cG9ydFxubGV0IFdJTl9IID0gMDtcbmxldCBXSU5fWSA9IDA7XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKFtzdGlja3ldOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRTVElDS19FTCA9IHN0aWNreTtcblx0aGFuZGxlQXBwU2Nyb2xsKCk7IC8vIFJ1biBvbiBjb25uZWN0XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUFwcFNjcm9sbCgpIHtcblx0aWYgKCFTVElDS19FTD8uaXNDb25uZWN0ZWQpIHJldHVybjtcblx0Y29uc3QgTkVYVF9ZID0gd2luZG93LnNjcm9sbFk7XG5cdGNvbnN0IE5FWFRfVVAgPSBORVhUX1kgPCBXSU5fWTtcblx0V0lOX1kgPSBORVhUX1k7XG5cblx0Ly8gT25seSBjYWxjdWxhdGUgaWYgc2Nyb2xsIGRpcmVjdGlvbiBoYXMgY2hhbmdlZFxuXHRpZiAoTkVYVF9VUCAhPT0gU0NST0xMX1VQKSB7XG5cdFx0TUlOX1kgPSAoU1RJQ0tfRUwucGFyZW50RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIHx8IDApICsgV0lOX1k7XG5cdFx0U0NST0xMX1VQID0gTkVYVF9VUDtcblx0XHRTVElDS19IID0gU1RJQ0tfRUwub2Zmc2V0SGVpZ2h0O1xuXHRcdFNUSUNLX1kgPSBTVElDS19FTC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyBXSU5fWTtcblx0XHRTVFVDSyA9IFNUSUNLX0VMLm9mZnNldEhlaWdodCA8PSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdFx0V0lOX0ggPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdH1cblxuXHRpZiAoU1RJQ0sgPT09IC0xICYmIFNUVUNLKSByZXR1cm47IC8vIEFsbHdheXMgc3RpY2t5IHdoZW4gc2lkZWJhciBpcyBzbWFsbGVyIHRoYW4gdmlld3BvcnRcblx0aWYgKFNUSUNLICE9PSAtMSAmJiAoU1RVQ0sgfHwgKFNDUk9MTF9VUCAmJiBXSU5fWSA8PSBTVElDS19ZKSkpIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwic3RpY2t5XCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgXCIwcHhcIik7XG5cdFx0U1RJQ0sgPSAtMTsgLy8gTm90IHN0aWNraW5nIHRvIHRvcCBhbmQgc2lkZWJhciBpcyBzbWFsbGVyIHRoYW4gdmlld3BvcnQgb3Igc2Nyb2xsaW5nIHVwXG5cdH0gZWxzZSBpZiAoU1RJQ0sgPT09IC0xICYmICFTQ1JPTExfVVApIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwicmVsYXRpdmVcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtNYXRoLm1heCgwLCBXSU5fWSAtIE1JTl9ZKX1weGApO1xuXHRcdFNUSUNLID0gMDsgLy8gU3RpY2tpbmcgdG8gdG9wIGFuZCBzY3JvbGxpbmcgZG93blxuXHR9IGVsc2UgaWYgKFNUSUNLICE9PSAxICYmICFTQ1JPTExfVVAgJiYgV0lOX1kgKyBXSU5fSCA+PSBTVElDS19ZICsgU1RJQ0tfSCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJzdGlja3lcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtXSU5fSCAtIFNUSUNLX0h9cHhgKTtcblx0XHRTVElDSyA9IDE7IC8vIE5vdCBzdGlja2luZyB0byBib3R0b20gYW5kIHNjcm9sbGluZyBkb3duXG5cdH0gZWxzZSBpZiAoU1RJQ0sgPT09IDEgJiYgU0NST0xMX1VQKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInJlbGF0aXZlXCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7U1RJQ0tfWSAtIE1JTl9ZfXB4YCk7XG5cdFx0U1RJQ0sgPSAwOyAvLyBTdGlja2luZyB0byBib3R0b20gYW5kIHNjcm9sbGluZyB1cFxuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19TVElDS1ksIGhhbmRsZU11dGF0aW9uKTtcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlQXBwVG9nZ2xlQ2xpY2ssIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcInJlc2l6ZVwiLCBkZWJvdW5jZShjbG9zZVNpZGViYXIsIDEwMCksIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcInNjcm9sbFwiLCBoYW5kbGVBcHBTY3JvbGwsIFFVSUNLX0VWRU5UKTtcbn0pO1xuIiwiY29uc3QgZ2V0U3RlcHMgPSAoXG5cdG5vdzogbnVtYmVyLFxuXHRtYXg6IG51bWJlcixcblx0c2hvdyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbikgPT4ge1xuXHRjb25zdCBvZmZzZXQgPSAoc2hvdyAtIDEpIC8gMjtcblx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heChNYXRoLm1pbihub3cgLSBNYXRoLmZsb29yKG9mZnNldCksIG1heCAtIHNob3cgKyAxKSwgMSk7XG5cdGNvbnN0IGVuZCA9IE1hdGgubWluKE1hdGgubWF4KG5vdyArIE1hdGguY2VpbChvZmZzZXQpLCBzaG93KSwgbWF4KTtcblx0Y29uc3QgcGFnZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBlbmQgKyAxIC0gc3RhcnQgfSwgKF8sIGkpID0+IGkgKyBzdGFydCk7XG5cblx0aWYgKHNob3cgPiA0ICYmIHN0YXJ0ID4gMSkgcGFnZXMuc3BsaWNlKDAsIDIsIDEsIDApO1xuXHRpZiAoc2hvdyA+IDMgJiYgZW5kIDwgbWF4KSBwYWdlcy5zcGxpY2UoLTIsIDIsIDAsIG1heCk7XG5cdHJldHVybiBwYWdlcztcbn07XG5cbmV4cG9ydCBjb25zdCBwYWdpbmF0aW9uID0gKHsgY3VycmVudCA9IDEsIHRvdGFsID0gMTAsIHNob3cgPSA3IH0pID0+ICh7XG5cdHByZXY6IGN1cnJlbnQgPiAxID8gY3VycmVudCAtIDEgOiAwLFxuXHRuZXh0OiBjdXJyZW50IDwgdG90YWwgPyBjdXJyZW50ICsgMSA6IDAsXG5cdHBhZ2VzOiBnZXRTdGVwcyhjdXJyZW50LCB0b3RhbCwgc2hvdykubWFwKChwYWdlLCBpbmRleCkgPT4gKHtcblx0XHRjdXJyZW50OiBwYWdlID09PSBjdXJyZW50ICYmIChcInBhZ2VcIiBhcyBjb25zdCksXG5cdFx0a2V5OiBga2V5LSR7cGFnZX0tJHtpbmRleH1gLFxuXHRcdHBhZ2UsXG5cdH0pKSxcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19CUkVBRENSVU1CUyA9IHN0eWxlcy5icmVhZGNydW1icy5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZUJyZWFkY3J1bWJzTXV0YXRpb24oYnJlYWRjcnVtYnM6IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgYnJlYWRjdW1icyBvZiBicmVhZGNydW1icylcblx0XHRicmVhZGN1bWJzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaSBhXCIpLmZvckVhY2goKGNydW1iLCBpbmRleCwgeyBsZW5ndGggfSkgPT4ge1xuXHRcdFx0YXR0cihjcnVtYiwgXCJhcmlhLWN1cnJlbnRcIiwgaW5kZXggPT09IGxlbmd0aCAtIDEgPyBcInBhZ2VcIiA6IG51bGwpO1xuXHRcdH0pO1xufVxuXG5vbkxvYWRlZCgoKSA9PlxuXHRvbk11dGF0aW9uKFxuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHRDU1NfQlJFQURDUlVNQlMsXG5cdFx0aGFuZGxlQnJlYWRjcnVtYnNNdXRhdGlvbixcblx0KSxcbik7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0YXR0cixcblx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcixcblx0SVNfQlJPV1NFUixcblx0b24sXG5cdG9uTG9hZGVkLFxuXHRRVUlDS19FVkVOVCxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19ESUFMT0cgPSBzdHlsZXMuZGlhbG9nLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IERJQUxPR1MgPSBJU19CUk9XU0VSXG5cdD8gKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG5cdFx0XHRDU1NfRElBTE9HLFxuXHRcdCkgYXMgSFRNTENvbGxlY3Rpb25PZjxIVE1MRGlhbG9nRWxlbWVudD4pXG5cdDogW107XG5cbmNvbnN0IGhhbmRsZU1vZGFsID0gKCkgPT4ge1xuXHRmb3IgKGNvbnN0IGRpYWxvZyBvZiBESUFMT0dTKVxuXHRcdGlmIChkaWFsb2cuaXNDb25uZWN0ZWQgJiYgZGlhbG9nLnNob3dNb2RhbCAmJiBkaWFsb2cuY2xvc2UpIHtcblx0XHRcdGlmIChkaWFsb2cubWF0Y2hlcygnW29wZW5dOm5vdChbZGF0YS1tb2RhbD1cImZhbHNlXCJdKTpub3QoOm1vZGFsKScpKSB7XG5cdFx0XHRcdGF0dHIoZGlhbG9nLCBcIm9wZW5cIiwgbnVsbCk7IC8vIFVzaW5nIGF0dHJpYnV0ZSBpbnN0ZWFkIG9mIC5jbG9zZSB0byBhdm9pZCBgY2xvc2VgIGV2ZW50XG5cdFx0XHRcdGRpYWxvZy5zaG93TW9kYWwoKTtcblx0XHRcdH0gZWxzZSBpZiAoZGlhbG9nLm1hdGNoZXMoXCI6bW9kYWw6bm90KFtvcGVuXSlcIikpIHtcblx0XHRcdFx0YXR0cihkaWFsb2csIFwib3BlblwiLCBcIlwiKTsgLy8gU2V0IGFzIG9wZW5cblx0XHRcdFx0ZGlhbG9nLmNsb3NlKCk7IC8vIFNvIHdlIGNvcnJlY2x0eSBjYW4gY2FsbCAuY2xvc2UsIHJlbW92aW5nIDxkaWFsb2c+IGZyb20gI3RvcC1sYXllclxuXHRcdFx0fVxuXHRcdH1cbn07XG5cbmNvbnN0IGhhbmRsZURpYWxvZ0NsaWNrID0gKHtcblx0Y2xpZW50WDogeCxcblx0Y2xpZW50WTogeSxcblx0dGFyZ2V0OiBlbCxcbn06IE1vdXNlRXZlbnQpID0+IHtcblx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTERpYWxvZ0VsZW1lbnQgJiYgYXR0cihlbCwgXCJkYXRhLWNsb3NlZGJ5XCIpID09PSBcImFueVwiKSB7XG5cdFx0Y29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdGNvbnN0IGlzSW5zaWRlID0gdG9wIDw9IHkgJiYgeSA8PSBib3R0b20gJiYgbGVmdCA8PSB4ICYmIHggPD0gcmlnaHQ7XG5cdFx0aWYgKCFpc0luc2lkZSkgcmV0dXJuIGVsLmNsb3NlKCk7XG5cdH1cblx0Y29uc3QgZGlhbG9nID0gKGVsIGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oXCJkaWFsb2dcIik7XG5cdGNvbnN0IGNsb3NlID0gZGlhbG9nICYmIChlbCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKCdbZGF0YS1jb21tYW5kPVwiY2xvc2VcIl0nKTtcblx0aWYgKGNsb3NlKSBkaWFsb2cuY2xvc2UoKTtcbn07XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlRGlhbG9nQ2xpY2sgYXMgRXZlbnRMaXN0ZW5lciwgUVVJQ0tfRVZFTlQpO1xuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKGhhbmRsZU1vZGFsKS5vYnNlcnZlKFxuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHR7XG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFtcIm9wZW5cIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0c3VidHJlZTogdHJ1ZSxcblx0XHR9LFxuXHQpO1xufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb24sIG9uTG9hZGVkLCBRVUlDS19FVkVOVCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5mdW5jdGlvbiBoYW5kbGVFcnJvc3VtbWFyeUluamVjdChldmVudDogRXZlbnQgJiB7IGFuaW1hdGlvbk5hbWU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSAhPT0gc3R5bGVzLl9lcnJvcnN1bW1hcnkpIHJldHVybjtcblx0Y29uc3QgZmlyc3QgPSAoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpPy5maXJzdEVsZW1lbnRDaGlsZDtcblxuXHRpZiAoZmlyc3QgaW5zdGFuY2VvZiBIVE1MSGVhZGluZ0VsZW1lbnQpIHtcblx0XHRhdHRyKGZpcnN0LCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG5cdFx0Zmlyc3QuZm9jdXMoKTsgLy8gQXV0b2ZvY3VzIGZpcnN0IGhlYWRpbmdcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PlxuXHRvbihkb2N1bWVudCwgXCJhbmltYXRpb25lbmRcIiwgaGFuZGxlRXJyb3N1bW1hcnlJbmplY3QsIFFVSUNLX0VWRU5UKSxcbik7XG4iLCJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5cbi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgU0FGRV9MQUJFTExFREJZID0gYCR7SVNfQU5EUk9JRCA/IFwiZGF0YVwiIDogXCJhcmlhXCJ9LWxhYmVsbGVkYnlgO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBGT0NVU19PVVRMSU5FID0gXCJvdXRsaW5lOiAxcHggZG90dGVkOyBvdXRsaW5lOiA1cHggYXV0byBIaWdobGlnaHQ7IG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvclwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIGF0dGFjaFN0eWxlID0gKGVsZW1lbnQsIGNzcykgPT4gZWxlbWVudC5zaGFkb3dSb290IHx8IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChfZXJyKSB7XG4gIH1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgKGRldGFpbCkgPT4gZWxlbWVudC5oYW5kbGVFdmVudCh7IHR5cGU6IFwibXV0YXRpb25cIiwgZGV0YWlsIH0pXG4gICAgKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIG9ic2VydmVycy5zZXQoZWxlbWVudCwgb2JzZXJ2ZXIpO1xuICB9XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBMSVZFO1xudmFyIExJVkVfU1JfRklYID0gMDtcbnZhciBzcGVhayA9ICh0ZXh0KSA9PiB7XG4gIGlmICghTElWRSkge1xuICAgIExJVkUgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIExJVkUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246Zml4ZWQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXBcIjtcbiAgICBhdHRyKExJVkUsIFwiYXJpYS1saXZlXCIsIFwiYXNzZXJ0aXZlXCIpO1xuICB9XG4gIGlmICghTElWRS5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoTElWRSk7XG4gIGlmICh0ZXh0KSBMSVZFLnRleHRDb250ZW50ID0gYCR7dGV4dH0ke0xJVkVfU1JfRklYKysgJSAyID8gXCJcXHhBMFwiIDogXCJcIn1gO1xufTtcbnZhciBzZXRWYWx1ZSA9IChpbnB1dCwgZGF0YSwgdHlwZSA9IFwiXCIpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSwgZGF0YSwgaW5wdXRUeXBlOiB0eXBlIH07XG4gIGNvbnN0IHByb3RvID0gSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGU7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJiZWZvcmVpbnB1dFwiLCBldmVudCkpO1xuICAoX2IgPSAoX2EyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgXCJ2YWx1ZVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5zZXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKGlucHV0LCBkYXRhKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImlucHV0XCIsIGV2ZW50KSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG59O1xudmFyIElTX1BSRVNTID0gZmFsc2U7XG52YXIgaXNNb3VzZURvd24gPSAoZXZlbnQpID0+IHtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2V1cFwiKSBJU19QUkVTUyA9IGZhbHNlO1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZWRvd25cIikge1xuICAgIElTX1BSRVNTID0gdHJ1ZTtcbiAgICBvbihkb2N1bWVudCwgXCJtb3VzZXVwXCIsIGlzTW91c2VEb3duLCB7IG9uY2U6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIElTX1BSRVNTO1xufTtcbnZhciBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QgPSAoc3R5bGUsIHNsb3QgPSBcIjxzbG90Pjwvc2xvdD5cIikgPT4gYDx0ZW1wbGF0ZSBzaGFkb3dyb290bW9kZT1cIm9wZW5cIj4ke3Nsb3R9PHN0eWxlPiR7c3R5bGV9PC9zdHlsZT48L3RlbXBsYXRlPmA7XG5cbi8vIHUtb3B0aW9uLnRzXG52YXIgRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG52YXIgU0VMRUNURUQgPSBcInNlbGVjdGVkXCI7XG52YXIgVUhUTUxPcHRpb25FbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW0RJU0FCTEVELCBTRUxFQ1RFRF07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFJU19JT1MpIHRoaXMudGFiSW5kZXggPSAtMTtcbiAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKFwicm9sZVwiKSkgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJvcHRpb25cIik7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtZGlzYWJsZWRcIiwgYCR7dGhpcy5kaXNhYmxlZH1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1zZWxlY3RlZFwiLCBgJHt0aGlzLnNlbGVjdGVkfWApO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB3aGV0aGVyIHRoZSBvcHRpb24gaW4gdGhlIGxpc3QgYm94IGlzIHRoZSBkZWZhdWx0IGl0ZW0uICovXG4gIGdldCBkZWZhdWx0U2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXNbU0VMRUNURURdO1xuICB9XG4gIHNldCBkZWZhdWx0U2VsZWN0ZWQodmFsdWUpIHtcbiAgICB0aGlzW1NFTEVDVEVEXSA9IHZhbHVlO1xuICB9XG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBESVNBQkxFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBESVNBQkxFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyBhIHJlZmVyZW5jZSB0byB0aGUgZm9ybSB0aGF0IHRoZSBvYmplY3QgaXMgZW1iZWRkZWQgaW4uICovXG4gIGdldCBmb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJmb3JtXCIpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiBvcHRpb24gaW4gYSBsaXN0IGJveC4gKi9cbiAgZ2V0IGluZGV4KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLigoX2EyID0gdGhpcy5wYXJlbnRFbGVtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLm9wdGlvbnMpIHx8IFt0aGlzXVxuICAgIF0uaW5kZXhPZih0aGlzKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgYSB2YWx1ZSB0aGF0IHlvdSBjYW4gdXNlIHRvIGltcGxlbWVudCB5b3VyIG93biBsYWJlbCBmdW5jdGlvbmFsaXR5IGZvciB0aGUgb2JqZWN0LiAqL1xuICBnZXQgbGFiZWwoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJsYWJlbFwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgbGFiZWwodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwibGFiZWxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBTRUxFQ1RFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBTRUxFQ1RFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSB0ZXh0IHN0cmluZyBzcGVjaWZpZWQgYnkgdGhlIG9wdGlvbiB0YWcuICovXG4gIGdldCB0ZXh0KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gdGhpcy50ZXh0Q29udGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIH1cbiAgc2V0IHRleHQodGV4dCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdmFsdWUgd2hpY2ggaXMgcmV0dXJuZWQgdG8gdGhlIHNlcnZlciB3aGVuIHRoZSBmb3JtIGNvbnRyb2wgaXMgc3VibWl0dGVkLiAqL1xuICBnZXQgdmFsdWUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1vcHRpb25cIiwgVUhUTUxPcHRpb25FbGVtZW50KTtcblxuLy8gdS1kYXRhbGlzdC50c1xudmFyIFVIVE1MRGF0YUxpc3RTdHlsZSA9IGAke0RJU1BMQVlfQkxPQ0t9XG46OnNsb3R0ZWQodS1vcHRpb24pIHsgZGlzcGxheTogYmxvY2s7IGN1cnNvcjogcG9pbnRlciB9XG46OnNsb3R0ZWQodS1vcHRpb246Zm9jdXMpIHsgJHtGT0NVU19PVVRMSU5FfSB9XG46OnNsb3R0ZWQodS1vcHRpb25bYXJpYS1oaWRkZW49XCJ0cnVlXCJdKSxcbjo6c2xvdHRlZCh1LW9wdGlvbltkaXNhYmxlZF0pLFxuOjpzbG90dGVkKHUtb3B0aW9uW2hpZGRlbl0pIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50IH1gO1xudmFyIFVIVE1MRGF0YUxpc3RTaGFkb3dSb290ID0gZGVjbGFyYXRpdmVTaGFkb3dSb290KFVIVE1MRGF0YUxpc3RTdHlsZSk7XG52YXIgTElWRV9USU1FUjtcbnZhciBJTlBVVF9ERUJPVU5DRSA9IDA7XG52YXIgSVNfTU9CSUxFID0gSVNfSU9TIHx8IElTX0FORFJPSUQ7XG52YXIgRVZFTlRTID0gXCJjbGljayxmb2N1c291dCxpbnB1dCxrZXlkb3duLG1vdXNlZG93bixtb3VzZXVwXCI7XG52YXIgRVZFTlRTX0lOUFVUID0gXCJmb2N1cyxmb2N1c2luLGJsdXIsZm9jdXNvdXRcIjtcbnZhciBURVhUUyA9IHtcbiAgc2luZ3VsYXI6IFwiJWQgaGl0XCIsXG4gIHBsdXJhbDogXCIlZCBoaXRzXCJcbn07XG52YXIgVUhUTUxEYXRhTGlzdEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fdGV4dHMgPSBfX3NwcmVhZFZhbHVlcyh7fSwgVEVYVFMpO1xuICAgIHRoaXMuX3ZhbHVlID0gXCJcIjtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBVSFRNTERhdGFMaXN0U3R5bGUpO1xuICB9XG4gIC8vIFVzZWQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBhbm5vdW5jZW1lbnRzXG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJpZFwiLCAuLi5PYmplY3Qua2V5cyhURVhUUykubWFwKChrZXkpID0+IGBkYXRhLXNyLSR7a2V5fWApXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmhpZGRlbiA9IHRydWU7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJsaXN0Ym94XCIpO1xuICAgIGF0dHIodGhpcywgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBvbih0aGlzLl9yb290LCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywge1xuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbXCJkaXNhYmxlZFwiLCBcImhpZGRlblwiLCBcImxhYmVsXCIsIFwidmFsdWVcIl0sXG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLl9yb290IHx8IHRoaXMsIFwiZm9jdXNcIiwgdGhpcywgdHJ1ZSk7XG4gICAgb2ZmKHRoaXMuX3Jvb3QgfHwgdGhpcywgXCJmb2N1c2luXCIsIHRoaXMpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIGRpc2Nvbm5lY3RJbnB1dCh0aGlzKTtcbiAgICB0aGlzLl9yb290ID0gdm9pZCAwO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBfcHJldiwgbmV4dCkge1xuICAgIGNvbnN0IHRleHQgPSBwcm9wID09IG51bGwgPyB2b2lkIDAgOiBwcm9wLnNwbGl0KFwiZGF0YS1zci1cIilbMV07XG4gICAgY29uc3QgY3NzID0gYGlucHV0W2xpc3Q9XCIke3RoaXMuaWR9XCJdYDtcbiAgICBpZiAoVEVYVFNbdGV4dF0pIHRoaXMuX3RleHRzW3RleHRdID0gbmV4dCB8fCBURVhUU1t0ZXh0XTtcbiAgICBlbHNlIGlmICh0aGlzLl9yb290KSB7XG4gICAgICBpZiAodGhpcy5faW5wdXQpIHNldHVwSW5wdXQodGhpcywgdGhpcy5faW5wdXQpO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiB0aGlzLl9yb290LnF1ZXJ5U2VsZWN0b3JBbGwoY3NzKSlcbiAgICAgICAgc2V0dXBJbnB1dCh0aGlzLCBpbnB1dCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgeyB0YXJnZXQsIHR5cGUgfSA9IGV2ZW50O1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKHR5cGUgPT09IFwiY2xpY2tcIikgb25DbGljayh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiZm9jdXNcIiB8fCB0eXBlID09PSBcImZvY3VzaW5cIikgb25Gb2N1cyh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiYmx1clwiIHx8IHR5cGUgPT09IFwiZm9jdXNvdXRcIikgb25CbHVyKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIG9uS2V5RG93bih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgdGhpcy5jb250YWlucyh0YXJnZXQpKVxuICAgICAgaXNNb3VzZURvd24oZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcIm11dGF0aW9uXCIgfHwgdHlwZSA9PT0gXCJpbnB1dFwiKSB7XG4gICAgICBjbGVhclRpbWVvdXQoSU5QVVRfREVCT1VOQ0UpO1xuICAgICAgSU5QVVRfREVCT1VOQ0UgPSBzZXRUaW1lb3V0KG9uSW5wdXQsIDAsIHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ1LW9wdGlvblwiKTtcbiAgfVxufTtcbnZhciBpc0Rpc2FibGVkID0gKGlucHV0KSA9PiAoaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IGlucHV0LmRpc2FibGVkKSB8fCAoaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IGlucHV0LnJlYWRPbmx5KSB8fCBmYWxzZTtcbnZhciBzZXRFeHBhbmRlZCA9IChzZWxmLCBvcGVuKSA9PiB7XG4gIHZhciBfYTIsIF9iLCBfYztcbiAgaWYgKHNlbGYuaGlkZGVuICE9PSBvcGVuKSByZXR1cm47XG4gIHNlbGYuaGlkZGVuID0gaXNEaXNhYmxlZChzZWxmID09IG51bGwgPyB2b2lkIDAgOiBzZWxmLl9pbnB1dCkgfHwgIW9wZW47XG4gIChfYTIgPSBtdXRhdGlvbk9ic2VydmVyKHNlbGYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRha2VSZWNvcmRzKCk7XG4gIGNvbnN0IGlzUG9wb3ZlciA9IHNlbGYuaXNDb25uZWN0ZWQgJiYgc2VsZi5wb3BvdmVyICYmICgoX2IgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmlzQ29ubmVjdGVkKSAmJiAoKF9jID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYy5wb3BvdmVyVGFyZ2V0RWxlbWVudCkgPT09IHNlbGY7XG4gIGlmIChzZWxmLl9pbnB1dCkgc2V0dXBJbnB1dChzZWxmLCBzZWxmLl9pbnB1dCwgb3Blbik7XG4gIGlmIChpc1BvcG92ZXIpIGF0dHIoc2VsZiwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpO1xuICBpZiAoaXNQb3BvdmVyKSBzZWxmLnRvZ2dsZVBvcG92ZXIob3Blbik7XG4gIGlmIChvcGVuKSBvbklucHV0KHNlbGYpO1xufTtcbnZhciBkaXNjb25uZWN0SW5wdXQgPSAoc2VsZikgPT4ge1xuICBpZiAoIXNlbGYuX2lucHV0KSByZXR1cm47XG4gIG9mZihzZWxmLl9pbnB1dCB8fCBzZWxmLCBFVkVOVFNfSU5QVVQsIHNlbGYpO1xuICBvZmYoc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gIHNlbGYuX2lucHV0ID0gdm9pZCAwO1xufTtcbnZhciBzZXR1cElucHV0ID0gKHNlbGYsIGlucHV0LCBvcGVuID0gZmFsc2UpID0+IHtcbiAgaWYgKHNlbGYucG9wb3ZlcikgYXR0cihpbnB1dCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKHNlbGYpKTtcbiAgb24oaW5wdXQsIEVWRU5UU19JTlBVVCwgc2VsZiwgdHJ1ZSk7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1hdXRvY29tcGxldGVcIiwgXCJsaXN0XCIpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtY29udHJvbHNcIiwgdXNlSWQoc2VsZikpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7IUlTX01PQklMRSB8fCBvcGVufWApO1xuICBhdHRyKGlucHV0LCBcImF1dG9jb21wbGV0ZVwiLCBcIm9mZlwiKTtcbiAgYXR0cihpbnB1dCwgXCJyb2xlXCIsIGlzRGlzYWJsZWQoaW5wdXQpID8gbnVsbCA6IFwiY29tYm9ib3hcIik7XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgaXNJbnB1dCA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQ7XG4gIGlmIChpc0lucHV0ICYmIGV2ZW50LmlzVHJ1c3RlZCkgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIGlmIChzZWxmLl9pbnB1dCAhPT0gZXZlbnQudGFyZ2V0ICYmIGlzSW5wdXQgJiYgZXZlbnQudGFyZ2V0Lmxpc3QgPT09IHNlbGYpIHtcbiAgICBpZiAoc2VsZi5faW5wdXQpIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgICBzZWxmLl9pbnB1dCA9IGV2ZW50LnRhcmdldDtcbiAgICBzZWxmLl9pbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNcIikpO1xuICAgIHNlbGYuX2lucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJmb2N1c2luXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgYXR0cihzZWxmLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKChfYTIgPSBzZWxmLl9pbnB1dC5sYWJlbHMpID09IG51bGwgPyB2b2lkIDAgOiBfYTJbMF0pKTtcbiAgICBvbihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gICAgc2V0RXhwYW5kZWQoc2VsZiwgYXR0cihzZWxmLl9pbnB1dCwgXCJpbnB1dG1vZGVcIikgIT09IFwibm9uZVwiKTtcbiAgICBzcGVhaygpO1xuICB9XG59O1xudmFyIG9uQmx1ciA9IChzZWxmLCBldmVudCkgPT4ge1xuICBpZiAoIUlTX0FORFJPSUQgJiYgIWlzTW91c2VEb3duKCkgJiYgc2VsZi5faW5wdXQpXG4gICAgc2V0VGltZW91dChvbkJsdXJyZWQsIDAsIHNlbGYpO1xuICBpZiAoZXZlbnQudGFyZ2V0ID09PSBzZWxmLl9pbnB1dCAmJiBldmVudC5pc1RydXN0ZWQpXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59O1xudmFyIG9uQmx1cnJlZCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSAoKF9hMiA9IHNlbGYuX3Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuYWN0aXZlRWxlbWVudCkgfHwgbnVsbDtcbiAgY29uc3QgaW5wdXQgPSBzZWxmLl9pbnB1dDtcbiAgaWYgKGlucHV0ICYmIGlucHV0ICE9PSByZWxhdGVkVGFyZ2V0ICYmICFzZWxmLmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImJsdXJcIiwgeyByZWxhdGVkVGFyZ2V0IH0pKTtcbiAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEZvY3VzRXZlbnQoXCJmb2N1c291dFwiLCB7IGJ1YmJsZXM6IHRydWUsIHJlbGF0ZWRUYXJnZXQgfSlcbiAgICApO1xuICAgIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgfVxufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9pbnB1dCB8fCBzZWxmLl9pbnB1dCA9PT0gdGFyZ2V0KSByZXR1cm4gc2V0RXhwYW5kZWQoc2VsZiwgdHJ1ZSk7XG4gIGZvciAoY29uc3Qgb3B0IG9mIHNlbGYub3B0aW9ucylcbiAgICBpZiAob3B0LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgIGlmIChhdHRyKHNlbGYsIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIikgIT09IFwidHJ1ZVwiKSB7XG4gICAgICAgIChfYTIgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xuICAgICAgICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2V0VmFsdWUoc2VsZi5faW5wdXQsIG9wdC52YWx1ZSk7XG4gICAgfVxuICBpZiAoSVNfQU5EUk9JRCkgb25CbHVycmVkKHNlbGYpO1xufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IGtleSwgdGFyZ2V0LCBhbHRLZXksIGN0cmxLZXksIHNoaWZ0S2V5LCBtZXRhS2V5IH0gPSBlO1xuICBjb25zdCBpc0VzY2FwZSA9IGtleSA9PT0gXCJFc2NhcGVcIiB8fCBrZXkgPT09IFwiRXNjXCI7XG4gIGlmIChhbHRLZXkgfHwgY3RybEtleSB8fCBtZXRhS2V5IHx8IHNoaWZ0S2V5IHx8IGtleSA9PT0gXCJUYWJcIikgcmV0dXJuO1xuICBpZiAoaXNFc2NhcGUgJiYgIXNlbGYuaGlkZGVuKSBlID09IG51bGwgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gIHNldEV4cGFuZGVkKHNlbGYsICFpc0VzY2FwZSk7XG4gIGNvbnN0IG9wdGlvbnMgPSBbLi4uc2VsZi5vcHRpb25zXS5maWx0ZXIoXG4gICAgKGVsKSA9PiBhdHRyKGVsLCBcImFyaWEtaGlkZGVuXCIpICE9PSBcInRydWVcIiAmJiBlbC5vZmZzZXRIZWlnaHRcbiAgKTtcbiAgY29uc3QgcHJldiA9IG9wdGlvbnMuaW5kZXhPZih0YXJnZXQpO1xuICBsZXQgbmV4dCA9IC0xO1xuICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiKSBuZXh0ID0gKHByZXYgKyAxKSAlIG9wdGlvbnMubGVuZ3RoO1xuICBpZiAoa2V5ID09PSBcIkFycm93VXBcIikgbmV4dCA9ICh+cHJldiA/IHByZXYgOiBvcHRpb25zLmxlbmd0aCkgLSAxO1xuICBpZiAofnByZXYpIHtcbiAgICBpZiAoa2V5ID09PSBcIkhvbWVcIiB8fCBrZXkgPT09IFwiUGFnZVVwXCIpIG5leHQgPSAwO1xuICAgIGlmIChrZXkgPT09IFwiRW5kXCIgfHwga2V5ID09PSBcIlBhZ2VEb3duXCIpIG5leHQgPSBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgaWYgKGtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICBvcHRpb25zW3ByZXZdLmNsaWNrKCk7XG4gICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuICBpZiAob3B0aW9uc1tuZXh0XSkgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykgb3B0aW9uLnRhYkluZGV4ID0gLTE7XG4gIGlmIChvcHRpb25zW25leHRdKSBlLnByZXZlbnREZWZhdWx0KCk7XG4gIChfYTIgPSBvcHRpb25zW25leHRdIHx8IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG4gIGlmICghb3B0aW9uc1tuZXh0XSAmJiBrZXkgPT09IFwiQXJyb3dVcFwiKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIHJldHVybiAoX2EzID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTMuc2V0U2VsZWN0aW9uUmFuZ2UoOTk5LCA5OTkpO1xuICAgIH0pO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGUpID0+IHtcbiAgY29uc3QgeyBfdGV4dHMsIF9yb290LCBfaW5wdXQsIG9wdGlvbnMgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gKF9pbnB1dCA9PSBudWxsID8gdm9pZCAwIDogX2lucHV0LnZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBmaWx0ZXIgPSAhc2VsZi5oYXNBdHRyaWJ1dGUoXCJkYXRhLW5vZmlsdGVyXCIpO1xuICBjb25zdCBoaWRkZW4gPSBbXTtcbiAgY29uc3QgdmlzaWJsZSA9IFtdO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKSB7XG4gICAgY29uc3QgaGlkZSA9IG9wdC5kaXNhYmxlZCB8fCBvcHQuaGlkZGVuIHx8IGZpbHRlciAmJiAhb3B0LmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUpO1xuICAgIChoaWRlID8gaGlkZGVuIDogdmlzaWJsZSkucHVzaChvcHQpO1xuICB9XG4gIGZvciAoY29uc3Qgb3B0IG9mIGhpZGRlbikgYXR0cihvcHQsIFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpO1xuICBmb3IgKGNvbnN0IG9wdCBvZiB2aXNpYmxlKSBhdHRyKG9wdCwgXCJhcmlhLWhpZGRlblwiLCBcImZhbHNlXCIpO1xuICBjb25zdCB0b3RhbCA9IHZpc2libGUubGVuZ3RoO1xuICBjbGVhclRpbWVvdXQoTElWRV9USU1FUik7XG4gIGlmICgoZSA9PSBudWxsID8gdm9pZCAwIDogZS50eXBlKSA9PT0gXCJpbnB1dFwiICYmIHZhbHVlICE9PSBzZWxmLl92YWx1ZSlcbiAgICBMSVZFX1RJTUVSID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gYCR7IXRvdGFsICYmIHNlbGYuaW5uZXJUZXh0LnRyaW0oKSB8fCBgJHtfdGV4dHNbdG90YWwgPT09IDEgPyBcInNpbmd1bGFyXCIgOiBcInBsdXJhbFwiXX1gLnJlcGxhY2UoXCIlZFwiLCBgJHt0b3RhbH1gKX1gO1xuICAgICAgaWYgKCFzZWxmLmhpZGRlbiAmJiAoX3Jvb3QgPT0gbnVsbCA/IHZvaWQgMCA6IF9yb290LmFjdGl2ZUVsZW1lbnQpID09PSBfaW5wdXQpIHNwZWFrKHRleHQpO1xuICAgICAgc2VsZi5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9LCAxZTMpO1xuICBpZiAoSVNfSU9TKVxuICAgIHZpc2libGUubWFwKChvcHQsIGlkeCkgPT4gYXR0cihvcHQsIFwidGl0bGVcIiwgYCR7aWR4ICsgMX0vJHt0b3RhbH1gKSk7XG59O1xuaWYgKElTX0JST1dTRVIpXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJsaXN0XCIsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gZ2V0Um9vdCh0aGlzKS5nZXRFbGVtZW50QnlJZChhdHRyKHRoaXMsIFwibGlzdFwiKSB8fCBcIlwiKTtcbiAgICB9XG4gIH0pO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1kYXRhbGlzdFwiLCBVSFRNTERhdGFMaXN0RWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MRGF0YUxpc3RFbGVtZW50LCBVSFRNTERhdGFMaXN0U2hhZG93Um9vdCwgVUhUTUxEYXRhTGlzdFN0eWxlIH07XG4iLCJpbXBvcnQgeyBmbGlwLCB0eXBlIFBsYWNlbWVudCwgc2hpZnQsIHNpemUgfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuaW1wb3J0IHsgVUhUTUxDb21ib2JveEVsZW1lbnQgfSBmcm9tIFwiQHUtZWxlbWVudHMvdS1jb21ib2JveFwiO1xuaW1wb3J0IHsgVUhUTUxEYXRhTGlzdEVsZW1lbnQgfSBmcm9tIFwiQHUtZWxlbWVudHMvdS1kYXRhbGlzdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRpc0lucHV0TGlrZSxcblx0b24sXG5cdG9uTG9hZGVkLFxuXHRvbk11dGF0aW9uLFxuXHRRVUlDS19FVkVOVCxcblx0dXNlSWQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRklFTEQgPSBzdHlsZXMuZmllbGQuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1ZBTElEQVRJT05TID0gc3R5bGVzLnZhbGlkYXRpb24uc3BsaXQoXCIgXCIpO1xuY29uc3QgQ1NTX1ZBTElEQVRJT04gPSBDU1NfVkFMSURBVElPTlNbMF07XG5cbmNvbnN0IGdldFRleHQgPSAoc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24sIGtleTogc3RyaW5nKSA9PlxuXHRzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGAtLW10ZHMtdGV4dC0ke2tleX1gKT8uc2xpY2UoMSwgLTEpIHx8IFwiXCI7IC8vIHNsaWNlIHRvIHRyaW0gcXVvdGVzXG5cbmZ1bmN0aW9uIGhhbmRsZUZpZWxkTXV0YXRpb24oXG5cdGZpZWxkczogSFRNTENvbGxlY3Rpb25PZjxFbGVtZW50Pixcblx0dmFsaWRhdGU/OiBib29sZWFuLFxuKSB7XG5cdGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKVxuXHRcdGlmIChmaWVsZC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0Y29uc3QgbGFiZWxzOiBIVE1MTGFiZWxFbGVtZW50W10gPSBbXTtcblx0XHRcdGNvbnN0IGRlc2NzOiBFbGVtZW50W10gPSBbXTtcblx0XHRcdGNvbnN0IHZhbGlkczogRWxlbWVudFtdID0gW107XG5cdFx0XHRsZXQgY29tYm9ib3g6IFVIVE1MQ29tYm9ib3hFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblx0XHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRcdGZvciAoY29uc3QgZWwgb2YgZmllbGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpKSB7XG5cdFx0XHRcdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxMYWJlbEVsZW1lbnQpIGxhYmVscy5wdXNoKGVsKTtcblx0XHRcdFx0ZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBVSFRNTENvbWJvYm94RWxlbWVudCkgY29tYm9ib3ggPSBlbDtcblx0XHRcdFx0ZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpICYmICFlbC5oaWRkZW4pIGlucHV0ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGVsLmhhc0F0dHJpYnV0ZShcImRhdGEtZGVzY3JpcHRpb25cIikpIGRlc2NzLnB1c2goZWwpO1xuXHRcdFx0XHRlbHNlIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1ZBTElEQVRJT04pKSB7XG5cdFx0XHRcdFx0dmFsaWQgPSBhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8ICFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0dmFsaWRzLnB1c2goZWwpO1xuXHRcdFx0XHRcdGRlc2NzLnVuc2hpZnQoZWwpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgSFRNTFBhcmFncmFwaEVsZW1lbnQpXG5cdFx0XHRcdFx0ZGVzY3Muc29tZSgoZGVzYykgPT4gZGVzYy5jb250YWlucyhlbCkpIHx8IGRlc2NzLnB1c2goZWwpOyAvLyBPbmx5IGFkZCBpZiBub3QgYWxyZWFkeSBpbnNpZGUgZGVzY3JpcHRpb25cblx0XHRcdH1cblxuXHRcdFx0aWYgKGlucHV0KSB7XG5cdFx0XHRcdGZvciAoY29uc3QgbGFiZWwgb2YgbGFiZWxzKSBsYWJlbC5odG1sRm9yID0gdXNlSWQoaW5wdXQpO1xuXHRcdFx0XHRpZiAodmFsaWRhdGUgJiYgYXR0cihmaWVsZCwgXCJkYXRhLXZhbGlkYXRpb25cIikgPT09IFwiZm9ybVwiKSB7XG5cdFx0XHRcdFx0dmFsaWQgPSBpbnB1dC5tYXRjaGVzKFwiOnZhbGlkXCIpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgZWwgb2YgdmFsaWRzKSBhdHRyKGVsLCBcImhpZGRlblwiLCB2YWxpZCA/IFwiXCIgOiBudWxsKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZW5kZXJDb21ib2JveChjb21ib2JveCk7XG5cdFx0XHRcdHJlbmRlckNvdW50ZXIoaW5wdXQpO1xuXHRcdFx0XHRyZW5kZXJUZXh0YXJlYVNpemUoaW5wdXQpO1xuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgZGVzY3MubWFwKHVzZUlkKS5qb2luKFwiIFwiKSB8fCBudWxsKTsgLy8gUmVtb3ZlIGlmIGVtcHR5XG5cdFx0XHRcdGF0dHIoaW5wdXQsIFwiYXJpYS1pbnZhbGlkXCIsIGAkeyF2YWxpZH1gKTtcblx0XHRcdH1cblx0XHR9XG59XG5cbi8vIGlPUyBkb2VzIG5vdCBzdXBwb3J0IGZpZWxkLXNpemluZzogY29udGVudCwgc28gd2UgbmVlZCB0byBtYW51YWxseSByZXNpemVcbmZ1bmN0aW9uIHJlbmRlclRleHRhcmVhU2l6ZSh0ZXh0YXJlYTogRWxlbWVudCkge1xuXHRpZiAodGV4dGFyZWEgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG5cdFx0dGV4dGFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXCItLW10ZHMtdGV4dGFyZWEtaGVpZ2h0XCIsIFwiYXV0b1wiKTtcblx0XHR0ZXh0YXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcdFwiLS1tdGRzLXRleHRhcmVhLWhlaWdodFwiLFxuXHRcdFx0YCR7dGV4dGFyZWEuc2Nyb2xsSGVpZ2h0fXB4YCxcblx0XHQpO1xuXHR9XG59XG5cbi8vIFNldHVwIHRyYW5zbGF0aW9ucyBmcm9tIENTUyBjdXN0b20gcHJvcGVydGllc1xuZnVuY3Rpb24gcmVuZGVyQ29tYm9ib3goZWw6IFVIVE1MQ29tYm9ib3hFbGVtZW50IHwgbnVsbCkge1xuXHRjb25zdCB7IGNvbnRyb2wsIGxpc3QgfSA9IGVsIHx8IHt9O1xuXG5cdGlmIChlbCAmJiBsaXN0ICYmICFlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLXNyLWFkZGVkXCIpKSB7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWFkZGVkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtYWRkZWRcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1lbXB0eVwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWVtcHR5XCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItZm91bmRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1mb3VuZFwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWludmFsaWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1pbnZhbGlkXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3Itb2ZcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1vZlwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLXJlbW92ZVwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LXJlbW92ZVwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLXJlbW92ZWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1yZW1vdmVkXCIpKTtcblx0XHRhdHRyKGxpc3QsIFwiZGF0YS1zci1wbHVyYWxcIiwgZ2V0VGV4dChzdHlsZSwgXCJkYXRhbGlzdC1wbHVyYWxcIikpO1xuXHRcdGF0dHIobGlzdCwgXCJkYXRhLXNyLXNpbmd1bGFyXCIsIGdldFRleHQoc3R5bGUsIFwiZGF0YWxpc3Qtc2luZ3VsYXJcIikpO1xuXHR9XG5cdGlmIChsaXN0ICYmIGNvbnRyb2wgJiYgIWxpc3QuaGFzQXR0cmlidXRlKFwicG9wb3ZlclwiKSkge1xuXHRcdGF0dHIobGlzdCwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpO1xuXHRcdGF0dHIoY29udHJvbCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKGxpc3QpKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW5kZXJDb3VudGVyKGlucHV0OiBIVE1MSW5wdXRFbGVtZW50KSB7XG5cdGNvbnN0IGVsID0gaW5wdXQ/Lm5leHRFbGVtZW50U2libGluZztcblx0Y29uc3QgbGltaXQgPSBlbCAmJiBhdHRyKGVsLCBcImRhdGEtY291bnRcIik7XG5cblx0aWYgKGVsICYmIGxpbWl0KSB7XG5cdFx0Y29uc3QgcmVtYWluZGVyID0gTnVtYmVyKGxpbWl0KSAtIGlucHV0LnZhbHVlLmxlbmd0aDtcblx0XHRjb25zdCBuZXh0SW52YWxpZCA9IHJlbWFpbmRlciA8IDA7XG5cdFx0Y29uc3QgcHJldkludmFsaWQgPSBhdHRyKGVsLCBcImFyaWEtbGl2ZVwiKSA9PT0gXCJwb2xpdGVcIjtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsIHx8IGlucHV0KTtcblx0XHRjb25zdCBvdmVyID0gZ2V0VGV4dChzdHlsZSwgXCJjb3VudC1vdmVyXCIpO1xuXHRcdGNvbnN0IHVuZGVyID0gZ2V0VGV4dChzdHlsZSwgXCJjb3VudC11bmRlclwiKTtcblxuXHRcdGlmIChwcmV2SW52YWxpZCAhPT0gbmV4dEludmFsaWQpIHtcblx0XHRcdGF0dHIoZWwsIFwiYXJpYS1saXZlXCIsIG5leHRJbnZhbGlkID8gXCJwb2xpdGVcIiA6IFwib2ZmXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBjc3Mgb2YgQ1NTX1ZBTElEQVRJT05TKSBlbC5jbGFzc0xpc3QudG9nZ2xlKGNzcywgbmV4dEludmFsaWQpO1xuXHRcdH1cblx0XHRlbC50ZXh0Q29udGVudCA9IChuZXh0SW52YWxpZCA/IG92ZXIgOiB1bmRlcikucmVwbGFjZShcblx0XHRcdFwiJWRcIixcblx0XHRcdGAke01hdGguYWJzKHJlbWFpbmRlcil9YCxcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZpZWxkVG9nZ2xlKGV2ZW50OiBFdmVudCAmIHsgbmV3U3RhdGU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgVUhUTUxEYXRhTGlzdEVsZW1lbnQpIHtcblx0XHRjb25zdCBsaXN0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdGNvbnN0IHJvb3QgPSBsaXN0LmdldFJvb3ROb2RlKCkgYXMgU2hhZG93Um9vdCB8IG51bGw7XG5cdFx0Y29uc3QgYW5jaG9yID0gcm9vdD8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG5cdFx0XHRgW3BvcG92ZXJ0YXJnZXQ9XCIke2xpc3QuaWR9XCJdYCxcblx0XHQpO1xuXG5cdFx0aWYgKGV2ZW50Lm5ld1N0YXRlID09PSBcImNsb3NlZFwiKSBhbmNob3JQb3NpdGlvbihsaXN0LCBmYWxzZSk7XG5cdFx0ZWxzZSBpZiAoYW5jaG9yKVxuXHRcdFx0YW5jaG9yUG9zaXRpb24obGlzdCwgYW5jaG9yLCB7XG5cdFx0XHRcdHBsYWNlbWVudDogKGF0dHIobGlzdCwgXCJkYXRhLXBvc2l0aW9uXCIpID8/IFwiYm90dG9tXCIpIGFzIFBsYWNlbWVudCxcblx0XHRcdFx0bWlkZGxld2FyZTogW1xuXHRcdFx0XHRcdGZsaXAoKSxcblx0XHRcdFx0XHRzaGlmdCgpLFxuXHRcdFx0XHRcdHNpemUoe1xuXHRcdFx0XHRcdFx0cGFkZGluZzogMTAsXG5cdFx0XHRcdFx0XHRhcHBseSh7IGF2YWlsYWJsZUhlaWdodCB9KSB7XG5cdFx0XHRcdFx0XHRcdGxpc3Quc3R5bGUud2lkdGggPSBgJHthbmNob3Iub2Zmc2V0V2lkdGh9cHhgO1xuXHRcdFx0XHRcdFx0XHRsaXN0LnN0eWxlLm1heEhlaWdodCA9IGAke01hdGgubWF4KDUwLCBhdmFpbGFibGVIZWlnaHQpfXB4YDtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdF0sXG5cdFx0XHR9KTtcblx0fVxufVxuLy8gVXBkYXRlIHdoZW4gdHlwaW5nXG5mdW5jdGlvbiBoYW5kbGVGaWVsZElucHV0KGV2ZW50OiBFdmVudCkge1xuXHRpZiAoaXNJbnB1dExpa2UoZXZlbnQudGFyZ2V0KSkge1xuXHRcdHJlbmRlckNvdW50ZXIoZXZlbnQudGFyZ2V0KTtcblx0XHRyZW5kZXJUZXh0YXJlYVNpemUoZXZlbnQudGFyZ2V0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGaWVsZFZhbGRpYXRpb24oZXZlbnQ6IEV2ZW50KSB7XG5cdGNvbnN0IGZpZWxkID0gKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKGAuJHtDU1NfRklFTER9YCk7XG5cdGlmIChldmVudC50eXBlID09PSBcImludmFsaWRcIiAmJiBmaWVsZCkgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gUHJldmVudCBicm93c2VycyBmcm9tIHNob3dpbmcgZGVmYXVsdCB2YWxpZGF0aW9uIGJ1YmJsZXNcblx0aGFuZGxlRmllbGRNdXRhdGlvbihkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKENTU19GSUVMRCksIHRydWUpOyAvLyBVcGRhdGUgc3RhdGVcbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0ZJRUxELCBoYW5kbGVGaWVsZE11dGF0aW9uKTtcblx0b24oZG9jdW1lbnQsIFwiaW5wdXRcIiwgaGFuZGxlRmllbGRJbnB1dCwgUVVJQ0tfRVZFTlQpO1xuXHRvbihkb2N1bWVudCwgXCJpbnZhbGlkLHN1Ym1pdFwiLCBoYW5kbGVGaWVsZFZhbGRpYXRpb24sIHRydWUpOyAvLyBVc2UgY2FwdHVyZSBhcyBpbnZhbGlkIGFuZCBzdWJtaXQgZG9lcyBub3QgYnViYmxlXG5cdG9uKGRvY3VtZW50LCBcInRvZ2dsZVwiLCBoYW5kbGVGaWVsZFRvZ2dsZSwgUVVJQ0tfRVZFTlQpOyAvLyBVc2UgY2FwdHVyZSBzaW5jZSB0b2dnbGUgZG9lcyBub3QgYnViYmxlXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBpc0lucHV0TGlrZSwgb25Mb2FkZWQsIG9uTXV0YXRpb24sIHVzZUlkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19GSUVMRFNFVCA9IHN0eWxlcy5maWVsZHNldC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVkFMSURBVElPTiA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IEFSSUFfREVTQyA9IFwiYXJpYS1kZXNjcmliZWRieVwiO1xuY29uc3QgQVJJQV9JTlZBTElEID0gXCJhcmlhLWludmFsaWRcIjtcblxuLy8gVXNpbmcgc2V0VGltZW91dCB0byBlbnN1cmUgaXQgcnVucyBhZnRlciBmaWVsZC1vYnNlcnZlclxuZnVuY3Rpb24gaGFuZGxlRmllbGRzZXRNdXRhdGlvbihmaWVsZHNldHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4pIHtcblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBmaWVsZHNldCBvZiBmaWVsZHNldHMpXG5cdFx0XHRpZiAoZmllbGRzZXQuaXNDb25uZWN0ZWQpIHtcblx0XHRcdFx0Y29uc3QgaW5wdXRzOiBIVE1MSW5wdXRFbGVtZW50W10gPSBbXTtcblx0XHRcdFx0bGV0IHZhbGlkSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHRcdFx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgZWwgb2YgZmllbGRzZXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpKSB7XG5cdFx0XHRcdFx0aWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhDU1NfVkFMSURBVElPTikpIHtcblx0XHRcdFx0XHRcdHZhbGlkID0gYXR0cihlbCwgXCJkYXRhLWNvbG9yXCIpID09PSBcInN1Y2Nlc3NcIiB8fCAhZWwuY2xpZW50SGVpZ2h0OyAvLyBPbmx5IHNldCBpbnZhbGlkIGlmIFZhbGlkYXRpb24gaXMgdmlzaWJsZVxuXHRcdFx0XHRcdFx0dmFsaWRJZCA9IHVzZUlkKGVsKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSkgaW5wdXRzLnB1c2goZWwpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dHMpIHtcblx0XHRcdFx0XHRjb25zdCBkZXNjID0gYXR0cihpbnB1dCwgQVJJQV9ERVNDKT8ucmVwbGFjZSh2YWxpZElkIHx8IFwiI1wiLCBcIlwiKTtcblxuXHRcdFx0XHRcdGF0dHIoaW5wdXQsIEFSSUFfREVTQywgYCR7dmFsaWRJZCB8fCBcIlwifSAke2Rlc2MgfHwgXCJcIn1gLnRyaW0oKSk7XG5cdFx0XHRcdFx0YXR0cihpbnB1dCwgQVJJQV9JTlZBTElELCBgJHshdmFsaWR9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfRklFTERTRVQsIGhhbmRsZUZpZWxkc2V0TXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfTE9HTyA9IHN0eWxlcy5sb2dvLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTG9nb011dGF0aW9uKFtsb2dvXTogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0aWYgKGxvZ28/LmlzQ29ubmVjdGVkICYmIGxvZ28/LmZpcnN0RWxlbWVudENoaWxkIGluc3RhbmNlb2YgU1ZHU1ZHRWxlbWVudCkge1xuXHRcdGZvciAoY29uc3QgaWNvbiBvZiBkb2N1bWVudC5oZWFkLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaW5rW3JlbH49J2ljb24nXVwiKSlcblx0XHRcdGljb24uc2V0QXR0cmlidXRlKFwicmVsXCIsIFwiZGlzYWJsZWRcIik7IC8vIERpc2FibGUgcHJldmlvdXMgaWNvbiAoYnV0IG5vdCByZW1vdmUgaXMgYXMgdGhpcyBtYWtlcyBOZXh0LmpzIHNhZClcblxuXHRcdGNvbnN0IHN2ZyA9IGxvZ28uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0Y29uc3QgaXNEb3QgPSBsb2dvPy5oYXNBdHRyaWJ1dGUoXCJkYXRhLWVudlwiKTtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHN2Zyk7XG5cdFx0Y29uc3QgdGV4dCA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJjb2xvclwiKTtcblx0XHRjb25zdCBiYWNrID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIi0tbXRkcy1sb2dvLWNvbG9yXCIpO1xuXHRcdGNvbnN0IGljb24gPSBzdmcub3V0ZXJIVE1MXG5cdFx0XHQucmVwbGFjZSgvXFxuKy9nLCBcIiBcIikgLy8gUHJldmVudCBsaW5lIGJyZWFrc1xuXHRcdFx0LnJlcGxhY2UoLyhmaWxsfHdpZHRofGhlaWdodHx4bWxucyk9XCJbXlwiXStcIi9naSwgXCJcIilcblx0XHRcdC5yZXBsYWNlKFwiPHN2Z1wiLCBgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiBmaWxsPVwiJHt0ZXh0fVwiYCk7XG5cblx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFxuXHRcdFx0T2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKSwge1xuXHRcdFx0XHRocmVmOiBgZGF0YTppbWFnZS9zdmcreG1sLCR7ZW5jb2RlVVJJQ29tcG9uZW50KGA8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDU1IDU1Jz48cmVjdCBmaWxsPScke2lzRG90ID8gXCJub25lXCIgOiBiYWNrfScgd2lkdGg9JzUxJyBoZWlnaHQ9JzUxJyB4PScyJyB5PScyJyBzdHJva2U9JyR7dGV4dH0nIHN0cm9rZS1kYXNoYXJyYXk9JzAuMDkgNi4zOCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2Utb3BhY2l0eT0nJHtpc0RvdCA/IDAuNiA6IDB9JyBzdHJva2Utd2lkdGg9JzIuMycgcng9JzI1LjUnLz48ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNy41IDcuNSlcIj4ke2ljb259PC9nPjwvc3ZnPmApfWAsXG5cdFx0XHRcdHJlbDogXCJpY29uXCIsXG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfTE9HTywgaGFuZGxlTG9nb011dGF0aW9uKSxcbik7XG4iLCJpbXBvcnQgeyBmbGlwLCB0eXBlIFBsYWNlbWVudCwgc2hpZnQsIHNpemUgfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGFuY2hvclBvc2l0aW9uLCBhdHRyLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19QT1BPVkVSID0gc3R5bGVzLnBvcG92ZXIuc3BsaXQoXCIgXCIpWzBdO1xubGV0IE9QRU5fUE9QT1ZFUlMgPSAwOyAvLyBTcGVlZCB1cCBieSBvbmx5IGNoZWNraW5nIGNsaWNrcyBpZiB3ZSBoYXZlIG9wZW4gcG9wb3ZlcnNcblxuZnVuY3Rpb24gaGFuZGxlUG9wb3ZlclRvZ2dsZSh7XG5cdHRhcmdldDogZWwsXG5cdG5ld1N0YXRlLFxufTogRXZlbnQgJiB7IG5ld1N0YXRlPzogc3RyaW5nIH0pIHtcblx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19QT1BPVkVSKSkge1xuXHRcdGNvbnN0IGlzQ2xvc2luZyA9IG5ld1N0YXRlID09PSBcImNsb3NlZFwiO1xuXHRcdGNvbnN0IGlzQ29udGFpbiA9IGF0dHIoZWwsIFwiZGF0YS1vdmVyc2Nyb2xsXCIpID09PSBcImNvbnRhaW5cIjtcblx0XHRjb25zdCBhbmNob3IgPSAoZWwuZ2V0Um9vdE5vZGUoKSBhcyBTaGFkb3dSb290KT8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG5cdFx0XHRgW3BvcG92ZXJ0YXJnZXQ9XCIke2VsLmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdE9QRU5fUE9QT1ZFUlMgKz0gaXNDbG9zaW5nID8gLTEgOiAxO1xuXHRcdGlmIChpc0Nsb3NpbmcpIGFuY2hvclBvc2l0aW9uKGVsLCBmYWxzZSk7XG5cdFx0ZWxzZSBpZiAoYW5jaG9yKVxuXHRcdFx0YW5jaG9yUG9zaXRpb24oZWwsIGFuY2hvciwge1xuXHRcdFx0XHRwbGFjZW1lbnQ6IChhdHRyKGVsLCBcImRhdGEtcG9zaXRpb25cIikgfHwgXCJib3R0b21cIikgYXMgUGxhY2VtZW50LFxuXHRcdFx0XHRtaWRkbGV3YXJlOiBbZmxpcCgpLCBzaGlmdCh7IHBhZGRpbmc6IDEwIH0pXS5jb25jYXQoXG5cdFx0XHRcdFx0aXNDb250YWluXG5cdFx0XHRcdFx0XHQ/IHNpemUoe1xuXHRcdFx0XHRcdFx0XHRcdHBhZGRpbmc6IDEwLFxuXHRcdFx0XHRcdFx0XHRcdGFwcGx5KHsgYXZhaWxhYmxlSGVpZ2h0IH0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVsLnN0eWxlLm1heEhlaWdodCA9IGAke01hdGgubWF4KDUwLCBhdmFpbGFibGVIZWlnaHQpfXB4YDtcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0OiBbXSxcblx0XHRcdFx0KSxcblx0XHRcdH0pO1xuXHR9XG59XG5cbi8vIFBvbHlmaWxsIHBvcG92ZXJ0YXJnZXQgZm9yIDxhPiAobm90IHN1cHBvcnRlZCBieSBuYXRpdmUpXG4vLyBhbmQgYXV0b21hdGljYWxseSBhc3N1bWUgcG9wb3ZlcnRhcmdldCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQgcG9wb3ZlclxuLy8gYnV0IHJlc3BlY3QgdGhlIHBvcG92ZXJ0YXJnZXQgYW5kIHBvcG92ZXJ0YXJnZXRhY3Rpb24gYXR0cmlidXRlXG5mdW5jdGlvbiBoYW5kbGVQb3BvdmVyTGlua0NsaWNrKHsgdGFyZ2V0IH06IEV2ZW50KSB7XG5cdGNvbnN0IGNsb3NlID1cblx0XHRPUEVOX1BPUE9WRVJTICYmICh0YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImEsW3BvcG92ZXJ0YXJnZXRhY3Rpb25dXCIpO1xuXG5cdGlmIChjbG9zZSkge1xuXHRcdGNvbnN0IGFjdGlvbiA9IGF0dHIoY2xvc2UsIFwicG9wb3ZlcnRhcmdldGFjdGlvblwiKSB8fCBcInRvZ2dsZVwiO1xuXHRcdGNvbnN0IG9wZW4gPSBhY3Rpb24gPT09IFwic2hvd1wiIHx8IChhY3Rpb24gPT09IFwiaGlkZVwiID8gZmFsc2UgOiB1bmRlZmluZWQpO1xuXHRcdGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGF0dHIoY2xvc2UsIFwicG9wb3ZlcnRhcmdldFwiKSB8fCBcIlwiKTtcblx0XHRjb25zdCBwb3BvdmVyID0gKHRhcmdldCB8fCBjbG9zZSkuY2xvc2VzdDxIVE1MRWxlbWVudD4oYC4ke0NTU19QT1BPVkVSfWApO1xuXG5cdFx0Ly8gUG9wb3ZlciBjYW4gYmUgZGlzY29ubmV0ZWQgYnkgY2xpY2sgaGFuZGxlciBkZWVwZXIgZG93biBpbiB0aGUgRE9NIHRocmVlIGJlZm9yZSByZWFjaGluZyBkb2N1bWVudFxuXHRcdGlmIChwb3BvdmVyPy5pc0Nvbm5lY3RlZCAmJiBwb3BvdmVyPy50b2dnbGVQb3BvdmVyKVxuXHRcdFx0cG9wb3Zlci50b2dnbGVQb3BvdmVyKG9wZW4pO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwidG9nZ2xlXCIsIGhhbmRsZVBvcG92ZXJUb2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVQb3BvdmVyTGlua0NsaWNrKTsgLy8gQWxsb3cgYDxhPmAgdG8gdXNlIGBwb3BvdmVydGFyZ2V0YCBhcyB3ZWxsXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfVEFCTEUgPSBzdHlsZXMudGFibGUuc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVUYWJsZU11dGF0aW9uKHRhYmxlczogSFRNTENvbGxlY3Rpb25PZjxIVE1MVGFibGVFbGVtZW50Pikge1xuXHRmb3IgKGNvbnN0IHRhYmxlIG9mIHRhYmxlcykge1xuXHRcdGNvbnN0IHRocyA9IEFycmF5LmZyb20odGFibGUudEhlYWQ/LnJvd3NbMF0/LmNlbGxzIHx8IFtdLCAodGgpID0+XG5cdFx0XHR0aC5pbm5lclRleHQudHJpbSgpLFxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IHRib2R5IG9mIHRhYmxlLnRCb2RpZXMpXG5cdFx0XHRmb3IgKGNvbnN0IHJvdyBvZiB0Ym9keS5yb3dzKVxuXHRcdFx0XHRmb3IgKGNvbnN0IGNlbGwgb2Ygcm93LmNlbGxzKVxuXHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJkYXRhLXRoXCIsIHRoc1tjZWxsLmNlbGxJbmRleF0gfHwgXCI6ZW1wdHlcIik7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19UQUJMRSwgaGFuZGxlVGFibGVNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uLCBvbkxvYWRlZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfVE9HR0xFR1JPVVAgPSBgLiR7c3R5bGVzLnRvZ2dsZWdyb3VwLnNwbGl0KFwiIFwiKVswXX1gO1xuXG4vLyBQcmV2ZW50IGJyb3dzZXJzIGZyb20gc2hvd2luZyBkZWZhdWx0IHZhbGlkYXRpb24gYnViYmxlc1xuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlZ3JvdXBLZXlkb3duKGV2ZW50OiBFdmVudCAmIFBhcnRpYWw8S2V5Ym9hcmRFdmVudD4pIHtcblx0Y29uc3QgeyBrZXksIHRhcmdldDogZWwgfSA9IGV2ZW50O1xuXHRjb25zdCBncm91cCA9IGVsIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBlbC5jbG9zZXN0KENTU19UT0dHTEVHUk9VUCk7XG5cblx0aWYgKCFncm91cCkgcmV0dXJuO1xuXHRpZiAoa2V5ID09PSBcIkVudGVyXCIpIGVsLmNsaWNrKCk7XG5cdGlmIChrZXk/LnN0YXJ0c1dpdGgoXCJBcnJvd1wiKSkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0Y29uc3QgaW5wdXRzID0gZ3JvdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKTtcblx0XHRjb25zdCBpbmRleCA9IFsuLi5pbnB1dHNdLmluZGV4T2YoZWwpO1xuXHRcdGNvbnN0IG1vdmUgPSBrZXkubWF0Y2goL0Fycm93KFJpZ2h0fERvd24pLykgPyAxIDogLTE7XG5cdFx0aW5wdXRzWyhpbnB1dHMubGVuZ3RoICsgaW5kZXggKyBtb3ZlKSAlIGlucHV0cy5sZW5ndGhdPy5mb2N1cygpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBcImtleWRvd25cIiwgaGFuZGxlVG9nZ2xlZ3JvdXBLZXlkb3duKSk7XG4iLCJpbXBvcnQgeyBmbGlwLCB0eXBlIFBsYWNlbWVudCwgc2hpZnQgfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRJU19CUk9XU0VSLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdFFVSUNLX0VWRU5ULFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgREVTQ1JJQkVEQlkgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEVTQyA9IFwiRXNjYXBlXCI7XG5jb25zdCBMQUJFTExFREJZID0gXCJhcmlhLWxhYmVsbGVkYnlcIjtcbmNvbnN0IFBPU0lUSU9OX0NTU19QUk9QRVJUWSA9IFwiLS1tdGRzLXRvb2x0aXAtcG9zaXRpb25cIjtcbmNvbnN0IFRIUk9UVExFX0RFTEFZID0gMzAwO1xuY29uc3QgVE9PTFRJUCA9IElTX0JST1dTRVJcblx0PyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm10ZHMtdG9vbHRpcFwiKSB8fFxuXHRcdE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwge1xuXHRcdFx0Y2xhc3NOYW1lOiBzdHlsZXMuX3Rvb2x0aXAsXG5cdFx0XHRpZDogXCJtdGRzLXRvb2x0aXBcIixcblx0XHRcdHBvcG92ZXI6IFwibWFudWFsXCIsXG5cdFx0fSlcblx0OiBudWxsOyAvLyBDcmVhdGUgYSBkdW1teSBlbGVtZW50IHRvIGF2b2lkIG51bGwgY2hlY2tzXG5cbmxldCBBTkNIT1I6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbmxldCBMQVNUX0NBTEwgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5sZXQgVEhST1RUTEU6IG51bWJlciB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+ID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlVG9vbHRpcE1vdmUoeyB0YXJnZXQsIHR5cGUsIGtleSB9OiBFdmVudCAmIHsga2V5Pzogc3RyaW5nIH0pIHtcblx0aWYgKHR5cGUgPT09IFwia2V5ZG93blwiICYmIGtleSAhPT0gRVNDKSByZXR1cm47IC8vIEFsbG93IEVTQyBkaXNtaXNzIHRvIGZvbGxvdyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL3Rvb2x0aXAvXG5cdGNvbnN0IHdhaXQgPSBMQVNUX0NBTEwgKyBUSFJPVFRMRV9ERUxBWSAtIERhdGUubm93KCk7XG5cdGNsZWFyVGltZW91dChUSFJPVFRMRSk7XG5cdFRIUk9UVExFID0gc2V0VGltZW91dChcblx0XHRoYW5kbGVUb29sdGlwTW92ZVRocm90dGxlZCxcblx0XHRNYXRoLm1heCh3YWl0LCAwKSxcblx0XHRrZXkgPT09IEVTQyA/IG51bGwgOiB0YXJnZXQsXG5cdCk7XG59XG5cbi8vIFVzaW5nIGEgdGhyb3R0bGVkIGZ1bmN0aW9uIHRvIGF2b2lkIHBlcmZvcm1hbmNlIGlzc3Vlc1xuZnVuY3Rpb24gaGFuZGxlVG9vbHRpcE1vdmVUaHJvdHRsZWQodGFyZ2V0OiBFbGVtZW50IHwgbnVsbCkge1xuXHRMQVNUX0NBTEwgPSBEYXRlLm5vdygpO1xuXG5cdC8vIEJ1aWxkIGFuZCBhcHBlbmQgdG9vbHRpcCBpZiBub3QgZXhpc3Rpbmdcblx0aWYgKCFUT09MVElQIHx8IHRhcmdldCA9PT0gVE9PTFRJUCkgcmV0dXJuOyAvLyBBbGxvdyB0b29sdGlwIHRvIGJlIGhvdmVyZWQsIGZvbGxvd2luZyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIxLyNjb250ZW50LW9uLWhvdmVyLW9yLWZvY3VzXG5cdGlmICghVE9PTFRJUD8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFRPT0xUSVApOyAvLyBFbnN1cmUgY29ubmVjdGVkXG5cdGxldCBhbmNob3IgPSB0YXJnZXQ/LmNsb3Nlc3Q/LjxFbGVtZW50PihcIltkYXRhLXRvb2x0aXBdXCIpIHx8IG51bGw7XG5cblx0Ly8gTm8gbmVlZCB0byB1cGRhdGVcblx0aWYgKGFuY2hvciA9PT0gQU5DSE9SKSByZXR1cm47XG5cblx0Y29uc3QgY29udGVudCA9IChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwXCIpKSB8fCBcIlwiO1xuXHRjb25zdCBwb3NpdGlvbiA9XG5cdFx0KGFuY2hvciAmJiBhdHRyKGFuY2hvciwgXCJkYXRhLXRvb2x0aXAtcG9zaXRpb25cIikpIHx8XG5cdFx0d2luZG93XG5cdFx0XHQuZ2V0Q29tcHV0ZWRTdHlsZShhbmNob3IgfHwgZG9jdW1lbnQuYm9keSlcblx0XHRcdC5nZXRQcm9wZXJ0eVZhbHVlKFBPU0lUSU9OX0NTU19QUk9QRVJUWSlcblx0XHRcdD8udHJpbSgpIHx8XG5cdFx0XCJ0b3BcIjtcblxuXHRjb25zdCBpc0hpZGRlbiA9XG5cdFx0IWNvbnRlbnQgfHxcblx0XHRjb250ZW50ID09PSBcImZhbHNlXCIgfHxcblx0XHRjb250ZW50ID09PSBcInRydWVcIiB8fFxuXHRcdHBvc2l0aW9uID09PSBcIm5vbmVcIjtcblxuXHRpZiAoaXNIaWRkZW4pIGFuY2hvciA9IG51bGw7IC8vIERvIG5vdCBzaG93IHRvb2x0aXAgaWYgYm9vbGlzaCB2YWx1ZVxuXHRpZiAoYW5jaG9yKSBUT09MVElQLnRleHRDb250ZW50ID0gY29udGVudDsgLy8gT25seSB1cGRhdGUgY29udGVudCBpZiBuZXcgYW5jaG9yXG5cblx0Y29uc3QgaGFkTGFiZWwgPSBBTkNIT1IgJiYgYXR0cihBTkNIT1IsIExBQkVMTEVEQlkpID09PSBUT09MVElQPy5pZDtcblx0Y29uc3QgaGFzTGFiZWwgPVxuXHRcdChhbmNob3IgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuXHRcdFx0PyBhbmNob3IuaW5uZXJUZXh0XG5cdFx0XHQ6IGFuY2hvcj8udGV4dENvbnRlbnRcblx0XHQpPy50cmltKCkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShMQUJFTExFREJZKSB8fFxuXHRcdGFuY2hvcj8uaGFzQXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKTtcblxuXHRBTkNIT1I/LnJlbW92ZUF0dHJpYnV0ZShoYWRMYWJlbCA/IExBQkVMTEVEQlkgOiBERVNDUklCRURCWSk7IC8vIFVubGluayBwcmV2aW91cyBhbmNob3Jcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgZmFsc2UpOyAvLyBSZXNldCBhbmNob3IgcG9zaXRpb25cblxuXHRBTkNIT1IgPSBhbmNob3I7IC8vIFN0b3JlIG5ldyBhbmNob3IgLSBtaWdodCBiZSBudWxsIGlmIG5vIG5ldyBhbmNob3Jcblx0aWYgKEFOQ0hPUikgYXR0cihBTkNIT1IsIGhhc0xhYmVsID8gREVTQ1JJQkVEQlkgOiBMQUJFTExFREJZLCBUT09MVElQPy5pZCk7IC8vIFVzZSB0b29sdGlwIGFzIGRlc2NyaXB0aW9uIGlmIGFsbHJlYWR5IGhhcyBsYWJlbFxuXHRpZiAoQU5DSE9SPy5pc0Nvbm5lY3RlZCkgVE9PTFRJUC5oaWRlUG9wb3ZlcigpOyAvLyBIaWRlIHRvb2x0aXAgc28gaXQgY2FuIGJlIHBsYWNlZCBvbiB0b3AtbGF5ZXIgb24gbmV4dCBzaG93XG5cdFRPT0xUSVAudG9nZ2xlUG9wb3ZlcighIWFuY2hvcik7XG5cdGFuY2hvclBvc2l0aW9uKFRPT0xUSVAsIGFuY2hvciB8fCBmYWxzZSwge1xuXHRcdHBsYWNlbWVudDogcG9zaXRpb24gYXMgUGxhY2VtZW50LFxuXHRcdG1pZGRsZXdhcmU6IFtmbGlwKCksIHNoaWZ0KHsgcGFkZGluZzogMTAgfSldLFxuXHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJibHVyLGZvY3VzLG1vdXNlb3V0LG1vdXNlb3ZlclwiLCBoYW5kbGVUb29sdGlwTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwia2V5ZG93blwiLCBoYW5kbGVUb29sdGlwTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwiYmx1clwiLCBoYW5kbGVUb29sdGlwTW92ZSwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZGVjbGFyYXRpdmVTaGFkb3dSb290ID0gKHN0eWxlLCBzbG90ID0gXCI8c2xvdD48L3Nsb3Q+XCIpID0+IGA8dGVtcGxhdGUgc2hhZG93cm9vdG1vZGU9XCJvcGVuXCI+JHtzbG90fTxzdHlsZT4ke3N0eWxlfTwvc3R5bGU+PC90ZW1wbGF0ZT5gO1xuXG4vLyB1LWRldGFpbHMudHNcbnZhciBVSFRNTERldGFpbHNTdHlsZSA9IGAke0RJU1BMQVlfQkxPQ0t9XG46OnNsb3R0ZWQodS1zdW1tYXJ5KSB7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogYmxvY2sgfVxuOjpzbG90dGVkKHUtc3VtbWFyeSk6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi1pbmxpbmU6IC4wNWVtIC4zMTI1ZW07IGJvcmRlci1ibG9jazogLjMxMjVlbSBzb2xpZCB0cmFuc3BhcmVudDsgYm9yZGVyLWlubGluZS1zdGFydDogLjVlbSBzb2xpZCB9XG46OnNsb3R0ZWQodS1zdW1tYXJ5W2FyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJdKTo6YmVmb3JlIHsgcm90YXRlOiA5MGRlZyB9XG46aG9zdCA+IFtwYXJ0PVwiZGV0YWlscy1jb250ZW50XCJdOm5vdChbaGlkZGVuPVwiXCJdKSB7IGRpc3BsYXk6IGJsb2NrIH1gO1xudmFyIFVIVE1MRGV0YWlsc1NoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoXG4gIFVIVE1MRGV0YWlsc1N0eWxlLFxuICAnPHNsb3QgbmFtZT1cInN1bW1hcnlcIj48L3Nsb3Q+PHNsb3QgcGFydD1cImRldGFpbHMtY29udGVudFwiIGhpZGRlbj1cInVudGlsLWZvdW5kXCI+PC9zbG90Pidcbik7XG52YXIgVUhUTUxEZXRhaWxzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyBVc2luZyB1bmRlcnNjb3JlIGluc3RlYWQgb2YgcHJpdmF0ZSBmaWVsZHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5fY29udGVudCA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnNoYWRvd1Jvb3QpXG4gICAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBuYW1lOiBcInN1bW1hcnlcIiB9KSxcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBwYXJ0OiBcImRldGFpbHMtY29udGVudFwiIH0pLFxuICAgICAgICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgVUhUTUxEZXRhaWxzU3R5bGUpXG4gICAgICApO1xuICB9XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJvcGVuXCJdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHZhciBfYTI7XG4gICAgdGhpcy5fY29udGVudCA9IChfYTIgPSB0aGlzLnNoYWRvd1Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2hpbGRyZW5bMV07XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJncm91cFwiKTtcbiAgICBvbih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLl9jb250ZW50KSBvZmYodGhpcy5fY29udGVudCwgXCJiZWZvcmVtYXRjaFwiLCB0aGlzKTtcbiAgICBvZmYodGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBwcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgaGlkZSA9IFwib25iZWZvcmVtYXRjaFwiIGluIHRoaXMgPyBcInVudGlsLWZvdW5kXCIgOiB0cnVlO1xuICAgIGNvbnN0IG9wZW4gPSB0aGlzLm9wZW47XG4gICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLmNoaWxkcmVuKVxuICAgICAgaWYgKGVsLm5vZGVOYW1lID09PSBcIlUtU1VNTUFSWVwiKSBhdHRyKGVsLCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7b3Blbn1gKTtcbiAgICBpZiAodGhpcy5fY29udGVudCkge1xuICAgICAgYXR0cih0aGlzLl9jb250ZW50LCBcImFyaWEtaGlkZGVuXCIsIGAkeyFvcGVufWApO1xuICAgICAgdGhpcy5fY29udGVudC5oaWRkZW4gPSBvcGVuID8gZmFsc2UgOiBoaWRlO1xuICAgIH1cbiAgICBpZiAob3BlbiAmJiB0aGlzLm5hbWUpIHtcbiAgICAgIGNvbnN0IHVEZXRhaWxzTGlzdCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYCR7dGhpcy5ub2RlTmFtZX1bbmFtZT1cIiR7dGhpcy5uYW1lfVwiXWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IHVEZXRhaWxzIG9mIHVEZXRhaWxzTGlzdClcbiAgICAgICAgaWYgKHVEZXRhaWxzICE9PSB0aGlzKSB1RGV0YWlscy5vcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChwcm9wID09PSBcIm9wZW5cIiAmJiBwcmV2ID09PSBudWxsICE9PSAobmV4dCA9PT0gbnVsbCkpXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwidG9nZ2xlXCIpKTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCI6c2NvcGUgPiB1LXN1bW1hcnlcIik7XG4gICAgY29uc3QgaXNTdW1tYXJ5ID0gc3VtbWFyeSA9PSBudWxsID8gdm9pZCAwIDogc3VtbWFyeS5jb250YWlucyhldmVudC50YXJnZXQpO1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmVmb3JlbWF0Y2hcIikgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICBpZiAoaXNTdW1tYXJ5ICYmIGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiKSBhc0J1dHRvbihldmVudCk7XG4gICAgaWYgKGlzU3VtbWFyeSAmJiBldmVudC50eXBlID09PSBcImNsaWNrXCIpIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG4gIH1cbiAgZ2V0IG9wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwib3BlblwiKTtcbiAgfVxuICBzZXQgb3Blbih2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJvcGVuXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFwibmFtZVwiKSB8fCBcIlwiO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcIm5hbWVcIiwgdmFsdWUpO1xuICB9XG59O1xudmFyIFVIVE1MU3VtbWFyeUVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIHRoaXMuc2xvdCA9IFwic3VtbWFyeVwiO1xuICAgIHRoaXMudGFiSW5kZXggPSAwO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1kZXRhaWxzXCIsIFVIVE1MRGV0YWlsc0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1zdW1tYXJ5XCIsIFVIVE1MU3VtbWFyeUVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERldGFpbHNFbGVtZW50LCBVSFRNTERldGFpbHNTaGFkb3dSb290LCBVSFRNTERldGFpbHNTdHlsZSwgVUhUTUxTdW1tYXJ5RWxlbWVudCB9O1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0ZJUkVGT1ggPSBJU19CUk9XU0VSICYmIC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZ2V0TGFiZWwgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgbGFiZWwgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikgfHwgXCJcIjtcbiAgY29uc3QgbGFiZWxzID0gKChfYTIgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxsZWRieVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkuc3BsaXQoL1xccysvKSkgfHwgW107XG4gIHJldHVybiBbXG4gICAgLi4ubGFiZWxzLm1hcCgoaWQyKSA9PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZDIpKSxcbiAgICAvLyBHZXQgYWxsIGxhYmVsbGVkYnkgZWxlbWVudHNcbiAgICAuLi5BcnJheS5mcm9tKGVsLmxhYmVscyB8fCBbXSlcbiAgICAvLyBHZXQgYWxsIDxsYWJlbD4gZWxlbWVudHNcbiAgXS5yZWR1Y2UoKGFjYywgZWwyKSA9PiB7XG4gICAgdmFyIF9hMztcbiAgICByZXR1cm4gYWNjIHx8ICgoX2EzID0gZWwyID09IG51bGwgPyB2b2lkIDAgOiBlbDIuaW5uZXJUZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnRyaW0oKSkgfHwgXCJcIjtcbiAgfSwgbGFiZWwpO1xufTtcbnZhciBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QgPSAoc3R5bGUsIHNsb3QgPSBcIjxzbG90Pjwvc2xvdD5cIikgPT4gYDx0ZW1wbGF0ZSBzaGFkb3dyb290bW9kZT1cIm9wZW5cIj4ke3Nsb3R9PHN0eWxlPiR7c3R5bGV9PC9zdHlsZT48L3RlbXBsYXRlPmA7XG5cbi8vIHUtcHJvZ3Jlc3MudHNcbnZhciBVSFRNTFByb2dyZXNzU3R5bGUgPSBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgYm9yZGVyOiAxcHggc29saWQ7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgaGVpZ2h0OiAuNWVtOyB3aWR0aDogMTBlbTsgb3ZlcmZsb3c6IGhpZGRlbiB9XG46aG9zdDo6YmVmb3JlIHsgY29udGVudDogJyc7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDEwMCU7IGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsgd2lkdGg6IHZhcigtLXBlcmNlbnRhZ2UsIDAlKTsgdHJhbnNpdGlvbjogd2lkdGggLjJzIH1cbjpob3N0KDpub3QoW3ZhbHVlXSkpIHsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLGN1cnJlbnRDb2xvciAyNSUsIHRyYW5zcGFyZW50IDUwJSwgY3VycmVudENvbG9yIDc1JSkgNTAlLzQwMCUgfVxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSB7IDpob3N0IHsgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlIDJzIGxpbmVhciBpbmZpbml0ZSB9ICB9XG5Aa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUgeyBmcm9tIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAxMDAlIH0gdG8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDAgfSB9YDtcbnZhciBVSFRNTFByb2dyZXNzU2hhZG93Um9vdCA9IGRlY2xhcmF0aXZlU2hhZG93Um9vdChcbiAgVUhUTUxQcm9ncmVzc1N0eWxlLFxuICBcIjxzbG90IGhpZGRlbj48L3Nsb3Q+XCJcbik7XG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MUHJvZ3Jlc3NFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcInZhbHVlXCIsIFwibWF4XCJdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKCF0aGlzLnNoYWRvd1Jvb3QpXG4gICAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBoaWRkZW46IFwiXCIgfSksXG4gICAgICAgIC8vIFNsb3QgaGlkaW5nIGNvbnRlbnQgYWxsb3dzIGxlZ2FjeSBicm93c2VyIHRvIGRpc3BsYXkgZmFsbGJhY2sgdGV4dFxuICAgICAgICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgVUhUTUxQcm9ncmVzc1N0eWxlKVxuICAgICAgKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoU0tJUF9BVFRSX0NIQU5HRSkgcmV0dXJuO1xuICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgIGNvbnN0IHJvbGVJbWFnZSA9IElTX0lPUyB8fCBJU19GSVJFRk9YO1xuICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKHRoaXMucG9zaXRpb24gKiAxMDApKTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wZXJjZW50YWdlXCIsIGAke3BlcmNlbnRhZ2V9JWApO1xuICAgIGxldCBsYWJlbCA9IGdldExhYmVsKHRoaXMpO1xuICAgIGlmIChyb2xlSW1hZ2UpIGxhYmVsID0gYCR7bGFiZWwucmVwbGFjZSgvXFxkKyUkLywgXCJcIil9ICR7cGVyY2VudGFnZX0lYDtcbiAgICBpZiAoSVNfRklSRUZPWCkgZm9yIChjb25zdCBlbCBvZiB0aGlzLmxhYmVscykgYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIsIGxhYmVsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1idXN5XCIsIGAke3RoaXMucG9zaXRpb24gPT09IC0xfWApO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsXCIsIGxhYmVsLnRyaW0oKSk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtbGFiZWxsZWRieVwiLCBudWxsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1heFwiLCBcIjEwMFwiKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1pblwiLCBcIjBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVub3dcIiwgYCR7cGVyY2VudGFnZX1gKTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCByb2xlSW1hZ2UgPyBcImltZ1wiIDogXCJwcm9ncmVzc2JhclwiKTtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG4gIH1cbiAgZ2V0IGxhYmVscygpIHtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuY2xvc2VzdChcImxhYmVsOm5vdChbZm9yXSlcIik7XG4gICAgY29uc3QgaWQyID0gdXNlSWQodGhpcyk7XG4gICAgaWYgKGxhYmVsKSBsYWJlbC5odG1sRm9yID0gaWQyO1xuICAgIGNvbnN0IGVsID0gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYGxhYmVsW2Zvcj1cIiR7aWQyfVwiXWBcbiAgICApO1xuICAgIHJldHVybiBlbDtcbiAgfVxuICBnZXQgcG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUgPT09IG51bGwgPyAtMSA6IE1hdGgubWluKHRoaXMudmFsdWUgLyB0aGlzLm1heCwgMSk7XG4gIH1cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBnZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiKTtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IG1heCgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwibWF4XCIpIHx8IDE7XG4gIH1cbiAgc2V0IG1heChtYXgpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJtYXhcIiwgbWF4KTtcbiAgfVxufTtcbi8vIFByZXZlbnQgQ2hyb21lIERldlRvb2xzIHdhcm5pbmcgYWJvdXQgPGxhYmVsIGZvcj1cIlwiPiBwb2ludGluZyB0byA8dS1wcm9ncmVzcz5cblVIVE1MUHJvZ3Jlc3NFbGVtZW50LmZvcm1Bc3NvY2lhdGVkID0gdHJ1ZTtcbnZhciBpc051bWVyaWMgPSAodmFsdWUpID0+ICFOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlRmxvYXQoYCR7dmFsdWV9YCkpICYmIE51bWJlci5pc0Zpbml0ZShOdW1iZXIodmFsdWUpKTtcbnZhciBnZXROdW1iZXIgPSAoZWwsIGtleSkgPT4ge1xuICBjb25zdCB2YWx1ZSA9IGF0dHIoZWwsIGtleSk7XG4gIHJldHVybiBpc051bWVyaWModmFsdWUpID8gTWF0aC5tYXgoMCwgTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUpKSA6IG51bGw7XG59O1xudmFyIHNldE51bWJlciA9IChlbCwga2V5LCB2YWwpID0+IHtcbiAgaWYgKHZhbCA9PT0gbnVsbCB8fCBpc051bWVyaWModmFsKSkgYXR0cihlbCwga2V5LCBgJHt2YWx9YCk7XG4gIGVsc2UgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2V0IG5vbi1udW1lcmljICcke2F0dHJ9JzogJyR7dmFsfSdgKTtcbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXByb2dyZXNzXCIsIFVIVE1MUHJvZ3Jlc3NFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxQcm9ncmVzc0VsZW1lbnQsIFVIVE1MUHJvZ3Jlc3NTaGFkb3dSb290LCBVSFRNTFByb2dyZXNzU3R5bGUgfTtcbiJdLCJuYW1lcyI6WyJfX2RlZlByb3AiLCJfX2dldE93blByb3BTeW1ib2xzIiwiX19oYXNPd25Qcm9wIiwiX19wcm9wSXNFbnVtIiwiX19kZWZOb3JtYWxQcm9wIiwib2JqIiwia2V5IiwidmFsdWUiLCJfX3NwcmVhZFZhbHVlcyIsImEiLCJiIiwicHJvcCIsIklTX0JST1dTRVIiLCJJU19BTkRST0lEIiwiSVNfRklSRUZPWCIsIklTX0lPUyIsIl9hIiwiRk9DVVNfT1VUTElORSIsIlVIVE1MRWxlbWVudCIsImF0dHIiLCJlbCIsIm5hbWUiLCJldmVudHMiLCJhY3Rpb24iLCJlbGVtZW50IiwicmVzdCIsInR5cGUiLCJvbiIsIm9mZiIsIm9ic2VydmVycyIsIm11dGF0aW9uT2JzZXJ2ZXIiLCJvcHRpb25zIiwib2JzZXJ2ZXIiLCJkZXRhaWwiLCJhc0J1dHRvbiIsImV2ZW50IiwiaXNDbGljayIsImdldFJvb3QiLCJub2RlIiwiX2EyIiwicm9vdCIsImlkIiwidXNlSWQiLCJjcmVhdGVFbGVtZW50IiwidGFnTmFtZSIsInRleHQyIiwiYXR0cnMiLCJ2YWwiLCJjdXN0b21FbGVtZW50cyIsImluc3RhbmNlIiwiZ2V0TGFiZWwiLCJsYWJlbCIsImlkMiIsImFjYyIsImVsMiIsIl9hMyIsIkxJVkUiLCJMSVZFX1NSX0ZJWCIsInNwZWFrIiwic2V0VmFsdWUiLCJpbnB1dCIsImRhdGEiLCJfYiIsInByb3RvIiwiSVNfUFJFU1MiLCJpc01vdXNlRG93biIsIlVIVE1MQ29tYm9ib3hTdHlsZSIsIkVWRU5UUyIsIkVWRU5UX09OQ0UiLCJJU19GSVJFRk9YX0RFU0tUT1AiLCJJU19NT0JJTEUiLCJNT0RJRklFRCIsIkZBTFNFIiwiVEVYVFMiLCJVSFRNTENvbWJvYm94RWxlbWVudCIsInJlbmRlciIsInN5bmNJbnB1dFZhbHVlIiwiXyIsInRhcmdldCIsImlzRGlzYWJsZWQiLCJvbkJsdXIiLCJvbkNsaWNrIiwib25Gb2N1cyIsIm9uSW5wdXQiLCJvbktleURvd24iLCJ0YWciLCJ0ZXh0IiwiaXNEYXRhIiwiY29udHJvbCIsInNlbGYiLCJfZm9jdXMiLCJfdGV4dHMiLCJpdGVtcyIsImxpc3QiLCJtdWx0aXBsZSIsInByZXYiLCJuZXh0IiwiZWRpdHMiLCJhZGRlZE5vZGVzIiwicmVtb3ZlZE5vZGVzIiwic2hvdWxkQW5ub3VuY2UiLCJhcmlhRXhwYW5kZWQiLCJpbnB1dE1vZGUiLCJuZXh0Rm9jdXMiLCJpc1JlbW92ZSIsImlkeCIsInNlbGVjdCIsInJlbW92ZSIsIml0ZW0yIiwib3B0aW9uIiwibGFiZWwyIiwiYXJpYSIsIm9wdCIsIml0ZW0iLCJzeW5jQ2xlYXJXaXRoSW5wdXQiLCJzeW5jT3B0aW9uc1dpdGhJdGVtcyIsIl9zcGVhayIsInZhbHVlcyIsImRpc3BhdGNoTWF0Y2giLCJjaGFuZ2UiLCJjcmVhdGFibGUiLCJxdWVyeSIsIm1hdGNoIiwibyIsImRpc3BhdGNoQ2hhbmdlIiwicmVtb3ZhYmxlIiwiYWRkIiwiaSIsIm9uQmx1cnJlZCIsIngiLCJ5IiwiY2xlYXIiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJyZXBlYXQiLCJpc0NvbnRyb2wiLCJpblRleHQiLCJpbmRleCIsImZvcm0iLCJTQUZFX0xBQkVMTEVEQlkiLCJESVNQTEFZX0JMT0NLIiwiYXR0YWNoU3R5bGUiLCJjc3MiLCJVSFRNTFRhYnNTdHlsZSIsIlVIVE1MVGFiTGlzdFN0eWxlIiwiVUhUTUxUYWJQYW5lbFN0eWxlIiwiVUhUTUxUYWJTdHlsZSIsIkFSSUFfQ09OVFJPTFMiLCJBUklBX1NFTEVDVEVEIiwiVUhUTUxUYWJzRWxlbWVudCIsInF1ZXJ5V2l0aG91dE5lc3RlZCIsImdldFNlbGVjdGVkSW5kZXgiLCJzZXRTZWxlY3RlZCIsIlVIVE1MVGFiTGlzdEVsZW1lbnQiLCJ0YWIiLCJ0YWJzIiwiU0tJUF9BVFRSX0NIQU5HRSIsIlVIVE1MVGFiRWxlbWVudCIsInBhbmVscyIsIm5leHRQYW5lbCIsImdldFBhbmVsIiwicGFuZWwiLCJ0YWJsaXN0IiwidGFiTGlzdCIsIlVIVE1MVGFiUGFuZWxFbGVtZW50IiwiaGlkZGVuIiwiaXNGb2N1c2FibGUiLCJtaW4iLCJtYXgiLCJyb3VuZCIsImZsb29yIiwiY3JlYXRlQ29vcmRzIiwidiIsIm9wcG9zaXRlU2lkZU1hcCIsIm9wcG9zaXRlQWxpZ25tZW50TWFwIiwiY2xhbXAiLCJzdGFydCIsImVuZCIsImV2YWx1YXRlIiwicGFyYW0iLCJnZXRTaWRlIiwicGxhY2VtZW50IiwiZ2V0QWxpZ25tZW50IiwiZ2V0T3Bwb3NpdGVBeGlzIiwiYXhpcyIsImdldEF4aXNMZW5ndGgiLCJ5QXhpc1NpZGVzIiwiZ2V0U2lkZUF4aXMiLCJnZXRBbGlnbm1lbnRBeGlzIiwiZ2V0QWxpZ25tZW50U2lkZXMiLCJyZWN0cyIsInJ0bCIsImFsaWdubWVudCIsImFsaWdubWVudEF4aXMiLCJsZW5ndGgiLCJtYWluQWxpZ25tZW50U2lkZSIsImdldE9wcG9zaXRlUGxhY2VtZW50IiwiZ2V0RXhwYW5kZWRQbGFjZW1lbnRzIiwib3Bwb3NpdGVQbGFjZW1lbnQiLCJnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCIsImxyUGxhY2VtZW50IiwicmxQbGFjZW1lbnQiLCJ0YlBsYWNlbWVudCIsImJ0UGxhY2VtZW50IiwiZ2V0U2lkZUxpc3QiLCJzaWRlIiwiaXNTdGFydCIsImdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMiLCJmbGlwQWxpZ25tZW50IiwiZGlyZWN0aW9uIiwiZXhwYW5kUGFkZGluZ09iamVjdCIsInBhZGRpbmciLCJnZXRQYWRkaW5nT2JqZWN0IiwicmVjdFRvQ2xpZW50UmVjdCIsInJlY3QiLCJ3aWR0aCIsImhlaWdodCIsImNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50IiwiX3JlZiIsInJlZmVyZW5jZSIsImZsb2F0aW5nIiwic2lkZUF4aXMiLCJhbGlnbkxlbmd0aCIsImlzVmVydGljYWwiLCJjb21tb25YIiwiY29tbW9uWSIsImNvbW1vbkFsaWduIiwiY29vcmRzIiwiY29tcHV0ZVBvc2l0aW9uIiwiY29uZmlnIiwic3RyYXRlZ3kiLCJtaWRkbGV3YXJlIiwicGxhdGZvcm0iLCJ2YWxpZE1pZGRsZXdhcmUiLCJzdGF0ZWZ1bFBsYWNlbWVudCIsIm1pZGRsZXdhcmVEYXRhIiwicmVzZXRDb3VudCIsImZuIiwibmV4dFgiLCJuZXh0WSIsInJlc2V0IiwiZGV0ZWN0T3ZlcmZsb3ciLCJzdGF0ZSIsIl9hd2FpdCRwbGF0Zm9ybSRpc0VsZSIsImVsZW1lbnRzIiwiYm91bmRhcnkiLCJyb290Qm91bmRhcnkiLCJlbGVtZW50Q29udGV4dCIsImFsdEJvdW5kYXJ5IiwicGFkZGluZ09iamVjdCIsImNsaXBwaW5nQ2xpZW50UmVjdCIsIm9mZnNldFBhcmVudCIsIm9mZnNldFNjYWxlIiwiZWxlbWVudENsaWVudFJlY3QiLCJmbGlwIiwiX21pZGRsZXdhcmVEYXRhJGFycm93IiwiX21pZGRsZXdhcmVEYXRhJGZsaXAiLCJpbml0aWFsUGxhY2VtZW50IiwiY2hlY2tNYWluQXhpcyIsImNoZWNrQ3Jvc3NBeGlzIiwic3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIiwiZmFsbGJhY2tTdHJhdGVneSIsImZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24iLCJkZXRlY3RPdmVyZmxvd09wdGlvbnMiLCJpbml0aWFsU2lkZUF4aXMiLCJpc0Jhc2VQbGFjZW1lbnQiLCJmYWxsYmFja1BsYWNlbWVudHMiLCJoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uIiwicGxhY2VtZW50cyIsIm92ZXJmbG93Iiwib3ZlcmZsb3dzIiwib3ZlcmZsb3dzRGF0YSIsInNpZGVzIiwiX21pZGRsZXdhcmVEYXRhJGZsaXAyIiwiX292ZXJmbG93c0RhdGEkZmlsdGVyIiwibmV4dEluZGV4IiwibmV4dFBsYWNlbWVudCIsImQiLCJyZXNldFBsYWNlbWVudCIsIl9vdmVyZmxvd3NEYXRhJGZpbHRlcjIiLCJjdXJyZW50U2lkZUF4aXMiLCJzaGlmdCIsImxpbWl0ZXIiLCJjcm9zc0F4aXMiLCJtYWluQXhpcyIsIm1haW5BeGlzQ29vcmQiLCJjcm9zc0F4aXNDb29yZCIsIm1pblNpZGUiLCJtYXhTaWRlIiwibGltaXRlZENvb3JkcyIsInNpemUiLCJfc3RhdGUkbWlkZGxld2FyZURhdGEiLCJfc3RhdGUkbWlkZGxld2FyZURhdGEyIiwiYXBwbHkiLCJpc1lBeGlzIiwiaGVpZ2h0U2lkZSIsIndpZHRoU2lkZSIsIm1heGltdW1DbGlwcGluZ0hlaWdodCIsIm1heGltdW1DbGlwcGluZ1dpZHRoIiwib3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQiLCJvdmVyZmxvd0F2YWlsYWJsZVdpZHRoIiwibm9TaGlmdCIsImF2YWlsYWJsZUhlaWdodCIsImF2YWlsYWJsZVdpZHRoIiwieE1pbiIsInhNYXgiLCJ5TWluIiwieU1heCIsIm5leHREaW1lbnNpb25zIiwiaGFzV2luZG93IiwiZ2V0Tm9kZU5hbWUiLCJpc05vZGUiLCJnZXRXaW5kb3ciLCJfbm9kZSRvd25lckRvY3VtZW50IiwiZ2V0RG9jdW1lbnRFbGVtZW50IiwiaXNFbGVtZW50IiwiaXNIVE1MRWxlbWVudCIsImlzU2hhZG93Um9vdCIsImludmFsaWRPdmVyZmxvd0Rpc3BsYXlWYWx1ZXMiLCJpc092ZXJmbG93RWxlbWVudCIsIm92ZXJmbG93WCIsIm92ZXJmbG93WSIsImRpc3BsYXkiLCJnZXRDb21wdXRlZFN0eWxlIiwidGFibGVFbGVtZW50cyIsImlzVGFibGVFbGVtZW50IiwidG9wTGF5ZXJTZWxlY3RvcnMiLCJpc1RvcExheWVyIiwic2VsZWN0b3IiLCJ0cmFuc2Zvcm1Qcm9wZXJ0aWVzIiwid2lsbENoYW5nZVZhbHVlcyIsImNvbnRhaW5WYWx1ZXMiLCJpc0NvbnRhaW5pbmdCbG9jayIsImVsZW1lbnRPckNzcyIsIndlYmtpdCIsImlzV2ViS2l0IiwiZ2V0Q29udGFpbmluZ0Jsb2NrIiwiY3VycmVudE5vZGUiLCJnZXRQYXJlbnROb2RlIiwiaXNMYXN0VHJhdmVyc2FibGVOb2RlIiwibGFzdFRyYXZlcnNhYmxlTm9kZU5hbWVzIiwiZ2V0Tm9kZVNjcm9sbCIsInJlc3VsdCIsImdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yIiwicGFyZW50Tm9kZSIsImdldE92ZXJmbG93QW5jZXN0b3JzIiwidHJhdmVyc2VJZnJhbWVzIiwiX25vZGUkb3duZXJEb2N1bWVudDIiLCJzY3JvbGxhYmxlQW5jZXN0b3IiLCJpc0JvZHkiLCJ3aW4iLCJmcmFtZUVsZW1lbnQiLCJnZXRGcmFtZUVsZW1lbnQiLCJnZXRDc3NEaW1lbnNpb25zIiwiZ2V0Q29tcHV0ZWRTdHlsZSQxIiwiaGFzT2Zmc2V0Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJzaG91bGRGYWxsYmFjayIsInVud3JhcEVsZW1lbnQiLCJnZXRTY2FsZSIsImRvbUVsZW1lbnQiLCIkIiwibm9PZmZzZXRzIiwiZ2V0VmlzdWFsT2Zmc2V0cyIsInNob3VsZEFkZFZpc3VhbE9mZnNldHMiLCJpc0ZpeGVkIiwiZmxvYXRpbmdPZmZzZXRQYXJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJpbmNsdWRlU2NhbGUiLCJpc0ZpeGVkU3RyYXRlZ3kiLCJjbGllbnRSZWN0Iiwic2NhbGUiLCJ2aXN1YWxPZmZzZXRzIiwib2Zmc2V0V2luIiwiY3VycmVudFdpbiIsImN1cnJlbnRJRnJhbWUiLCJpZnJhbWVTY2FsZSIsImlmcmFtZVJlY3QiLCJnZXRXaW5kb3dTY3JvbGxCYXJYIiwibGVmdFNjcm9sbCIsImdldEhUTUxPZmZzZXQiLCJkb2N1bWVudEVsZW1lbnQiLCJzY3JvbGwiLCJodG1sUmVjdCIsImNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0IiwidG9wTGF5ZXIiLCJvZmZzZXRzIiwiaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQiLCJvZmZzZXRSZWN0IiwiaHRtbE9mZnNldCIsImdldENsaWVudFJlY3RzIiwiZ2V0RG9jdW1lbnRSZWN0IiwiaHRtbCIsImJvZHkiLCJTQ1JPTExCQVJfTUFYIiwiZ2V0Vmlld3BvcnRSZWN0IiwidmlzdWFsVmlld3BvcnQiLCJ2aXN1YWxWaWV3cG9ydEJhc2VkIiwid2luZG93U2Nyb2xsYmFyWCIsImRvYyIsImJvZHlTdHlsZXMiLCJib2R5TWFyZ2luSW5saW5lIiwiY2xpcHBpbmdTdGFibGVTY3JvbGxiYXJXaWR0aCIsImFic29sdXRlT3JGaXhlZCIsImdldElubmVyQm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yIiwiY2xpcHBpbmdBbmNlc3RvciIsImhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvciIsInN0b3BOb2RlIiwiZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzIiwiY2FjaGUiLCJjYWNoZWRSZXN1bHQiLCJjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSIsImVsZW1lbnRJc0ZpeGVkIiwiY29tcHV0ZWRTdHlsZSIsImN1cnJlbnROb2RlSXNDb250YWluaW5nIiwiYW5jZXN0b3IiLCJnZXRDbGlwcGluZ1JlY3QiLCJjbGlwcGluZ0FuY2VzdG9ycyIsImZpcnN0Q2xpcHBpbmdBbmNlc3RvciIsImNsaXBwaW5nUmVjdCIsImFjY1JlY3QiLCJnZXREaW1lbnNpb25zIiwiZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQiLCJzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0IiwiaXNTdGF0aWNQb3NpdGlvbmVkIiwiZ2V0VHJ1ZU9mZnNldFBhcmVudCIsInBvbHlmaWxsIiwicmF3T2Zmc2V0UGFyZW50IiwiZ2V0T2Zmc2V0UGFyZW50Iiwic3ZnT2Zmc2V0UGFyZW50IiwiZ2V0RWxlbWVudFJlY3RzIiwiZ2V0T2Zmc2V0UGFyZW50Rm4iLCJnZXREaW1lbnNpb25zRm4iLCJmbG9hdGluZ0RpbWVuc2lvbnMiLCJpc1JUTCIsInJlY3RzQXJlRXF1YWwiLCJvYnNlcnZlTW92ZSIsIm9uTW92ZSIsImlvIiwidGltZW91dElkIiwiY2xlYW51cCIsIl9pbyIsInJlZnJlc2giLCJza2lwIiwidGhyZXNob2xkIiwiZWxlbWVudFJlY3RGb3JSb290TWFyZ2luIiwiaW5zZXRUb3AiLCJpbnNldFJpZ2h0IiwiaW5zZXRCb3R0b20iLCJpbnNldExlZnQiLCJpc0ZpcnN0VXBkYXRlIiwiaGFuZGxlT2JzZXJ2ZSIsImVudHJpZXMiLCJyYXRpbyIsImF1dG9VcGRhdGUiLCJ1cGRhdGUiLCJhbmNlc3RvclNjcm9sbCIsImFuY2VzdG9yUmVzaXplIiwiZWxlbWVudFJlc2l6ZSIsImxheW91dFNoaWZ0IiwiYW5pbWF0aW9uRnJhbWUiLCJyZWZlcmVuY2VFbCIsImFuY2VzdG9ycyIsImNsZWFudXBJbyIsInJlb2JzZXJ2ZUZyYW1lIiwicmVzaXplT2JzZXJ2ZXIiLCJmaXJzdEVudHJ5IiwiX3Jlc2l6ZU9ic2VydmVyIiwiZnJhbWVJZCIsInByZXZSZWZSZWN0IiwiZnJhbWVMb29wIiwibmV4dFJlZlJlY3QiLCJfcmVzaXplT2JzZXJ2ZXIyIiwic2hpZnQkMSIsImZsaXAkMSIsInNpemUkMSIsIm1lcmdlZE9wdGlvbnMiLCJwbGF0Zm9ybVdpdGhDYWNoZSIsImNvbXB1dGVQb3NpdGlvbiQxIiwiUVVJQ0tfRVZFTlQiLCJkZWJvdW5jZSIsImNhbGxiYWNrIiwiZGVsYXkiLCJ0aW1lciIsImFyZ3MiLCJVVUlEIiwiVU5CSU5EIiwib25Mb2FkZWQiLCJydW4iLCJ1bmJpbmQiLCJBTkNIT1JFRCIsImFuY2hvclBvc2l0aW9uIiwiYW5jaG9yIiwiY3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlciIsInF1ZXVlIiwib25GcmFtZSIsIm9uVGltZXIiLCJNVVRBVE9SUyIsIm9uTXV0YXRpb24iLCJjbGFzc05hbWUiLCJlbGVtcyIsIm11dGF0b3IiLCJpc0lucHV0TGlrZSIsIkNTU19CUkVBRENSVU1CUyIsInN0eWxlcyIsIkNTU19DSElQIiwiQ1NTX0hFTFBURVhUIiwiQ1NTX1BBR0lOQVRJT04iLCJDTElDS1MiLCJNQVRPTU8iLCJCQU5ORVIiLCJCQU5ORVJfVVJMIiwiYW5hbHl0aWNzIiwiY29uc2VudCIsImVuYWJsZWQiLCJtYXRvbW9JZCIsIm1hdG9tb1RhZ01hbmFnZXJJZCIsInJlbmRlckJhbm5lciIsInNyYyIsInVybCIsInRpdGxlIiwiY2F0ZWdvcnkiLCJyZXN1bHRzIiwiYmFubmVyIiwib25DbG9zZSIsImhhbmRsZVRyYWNrIiwicHJvY2Vzc1RyYWNrIiwiaGVhZGluZyIsImdyb3VwIiwicG9wb3ZlciIsIm9wZW4iLCJzdHlsZSIsImhlYWQiLCJzaGVldCIsImZvcmNlIiwiQ1NTX0FQUCIsIkNTU19TVElDS1kiLCJDU1NfVE9HR0xFIiwiQ1NTX1NJREVCQVIiLCJ1c2VUcmFuc2l0aW9uIiwidG9nZ2xlQXBwRXhwYW5kZWQiLCJoYW5kbGVBcHBUb2dnbGVDbGljayIsInN0b3AiLCJsaW5rIiwiY2xvc2VTaWRlYmFyIiwic2lkZWJhciIsIk1JTl9ZIiwiU0NST0xMX1VQIiwiU1RJQ0siLCJTVElDS19FTCIsIlNUSUNLX0giLCJTVElDS19ZIiwiU1RVQ0siLCJXSU5fSCIsIldJTl9ZIiwiaGFuZGxlTXV0YXRpb24iLCJzdGlja3kiLCJoYW5kbGVBcHBTY3JvbGwiLCJORVhUX1kiLCJORVhUX1VQIiwiZ2V0U3RlcHMiLCJub3ciLCJzaG93Iiwib2Zmc2V0IiwicGFnZXMiLCJwYWdpbmF0aW9uIiwiY3VycmVudCIsInRvdGFsIiwicGFnZSIsImhhbmRsZUJyZWFkY3J1bWJzTXV0YXRpb24iLCJicmVhZGNydW1icyIsImJyZWFkY3VtYnMiLCJjcnVtYiIsIkNTU19ESUFMT0ciLCJESUFMT0dTIiwiaGFuZGxlTW9kYWwiLCJkaWFsb2ciLCJoYW5kbGVEaWFsb2dDbGljayIsImhhbmRsZUVycm9zdW1tYXJ5SW5qZWN0IiwiZmlyc3QiLCJESVNBQkxFRCIsIlNFTEVDVEVEIiwiVUhUTUxPcHRpb25FbGVtZW50IiwiVUhUTUxEYXRhTGlzdFN0eWxlIiwiTElWRV9USU1FUiIsIklOUFVUX0RFQk9VTkNFIiwiRVZFTlRTX0lOUFVUIiwiVUhUTUxEYXRhTGlzdEVsZW1lbnQiLCJkaXNjb25uZWN0SW5wdXQiLCJfcHJldiIsInNldHVwSW5wdXQiLCJzZXRFeHBhbmRlZCIsIl9jIiwiaXNQb3BvdmVyIiwiaXNJbnB1dCIsInJlbGF0ZWRUYXJnZXQiLCJhbHRLZXkiLCJjdHJsS2V5Iiwic2hpZnRLZXkiLCJtZXRhS2V5IiwiaXNFc2NhcGUiLCJfcm9vdCIsIl9pbnB1dCIsImZpbHRlciIsInZpc2libGUiLCJDU1NfRklFTEQiLCJDU1NfVkFMSURBVElPTlMiLCJDU1NfVkFMSURBVElPTiIsImdldFRleHQiLCJoYW5kbGVGaWVsZE11dGF0aW9uIiwiZmllbGRzIiwidmFsaWRhdGUiLCJmaWVsZCIsImxhYmVscyIsImRlc2NzIiwidmFsaWRzIiwiY29tYm9ib3giLCJ2YWxpZCIsImRlc2MiLCJyZW5kZXJDb21ib2JveCIsInJlbmRlckNvdW50ZXIiLCJyZW5kZXJUZXh0YXJlYVNpemUiLCJ0ZXh0YXJlYSIsImxpbWl0IiwicmVtYWluZGVyIiwibmV4dEludmFsaWQiLCJwcmV2SW52YWxpZCIsIm92ZXIiLCJ1bmRlciIsImhhbmRsZUZpZWxkVG9nZ2xlIiwiaGFuZGxlRmllbGRJbnB1dCIsImhhbmRsZUZpZWxkVmFsZGlhdGlvbiIsIkNTU19GSUVMRFNFVCIsIkFSSUFfREVTQyIsIkFSSUFfSU5WQUxJRCIsImhhbmRsZUZpZWxkc2V0TXV0YXRpb24iLCJmaWVsZHNldHMiLCJmaWVsZHNldCIsImlucHV0cyIsInZhbGlkSWQiLCJDU1NfTE9HTyIsImhhbmRsZUxvZ29NdXRhdGlvbiIsImxvZ28iLCJpY29uIiwic3ZnIiwiaXNEb3QiLCJiYWNrIiwiQ1NTX1BPUE9WRVIiLCJPUEVOX1BPUE9WRVJTIiwiaGFuZGxlUG9wb3ZlclRvZ2dsZSIsIm5ld1N0YXRlIiwiaXNDbG9zaW5nIiwiaXNDb250YWluIiwiaGFuZGxlUG9wb3ZlckxpbmtDbGljayIsImNsb3NlIiwiQ1NTX1RBQkxFIiwiaGFuZGxlVGFibGVNdXRhdGlvbiIsInRhYmxlcyIsInRhYmxlIiwidGhzIiwidGgiLCJ0Ym9keSIsInJvdyIsImNlbGwiLCJDU1NfVE9HR0xFR1JPVVAiLCJoYW5kbGVUb2dnbGVncm91cEtleWRvd24iLCJtb3ZlIiwiREVTQ1JJQkVEQlkiLCJFU0MiLCJMQUJFTExFREJZIiwiUE9TSVRJT05fQ1NTX1BST1BFUlRZIiwiVEhST1RUTEVfREVMQVkiLCJUT09MVElQIiwiQU5DSE9SIiwiTEFTVF9DQUxMIiwiVEhST1RUTEUiLCJoYW5kbGVUb29sdGlwTW92ZSIsIndhaXQiLCJoYW5kbGVUb29sdGlwTW92ZVRocm90dGxlZCIsImNvbnRlbnQiLCJwb3NpdGlvbiIsImhhZExhYmVsIiwiaGFzTGFiZWwiLCJVSFRNTERldGFpbHNTdHlsZSIsIlVIVE1MRGV0YWlsc0VsZW1lbnQiLCJoaWRlIiwidURldGFpbHNMaXN0IiwidURldGFpbHMiLCJzdW1tYXJ5IiwiaXNTdW1tYXJ5IiwiVUhUTUxTdW1tYXJ5RWxlbWVudCIsIlVIVE1MUHJvZ3Jlc3NTdHlsZSIsIlVIVE1MUHJvZ3Jlc3NFbGVtZW50Iiwicm9sZUltYWdlIiwicGVyY2VudGFnZSIsImdldE51bWJlciIsInNldE51bWJlciIsImlzTnVtZXJpYyJdLCJtYXBwaW5ncyI6ImtDQUFBLElBQUlBLEdBQVksT0FBTyxlQUNuQkMsR0FBc0IsT0FBTyxzQkFDN0JDLEdBQWUsT0FBTyxVQUFVLGVBQ2hDQyxHQUFlLE9BQU8sVUFBVSxxQkFDaENDLEdBQWtCLENBQUNDLEVBQUtDLEVBQUtDLElBQVVELEtBQU9ELEVBQU1MLEdBQVVLLEVBQUtDLEVBQUssQ0FBRSxXQUFZLEdBQU0sYUFBYyxHQUFNLFNBQVUsR0FBTSxN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dEMsSUFBSUssR0FBYXRyQixHQUFVLENBQUMsT0FBTyxNQUFNLE9BQU8sV0FBVyxHQUFHQSxDQUFLLEVBQUUsQ0FBQyxHQUFLLE9BQU8sU0FBUyxPQUFPQSxDQUFLLENBQUMsRUFDcEdvckIsR0FBWSxDQUFDdnFCLEVBQUlkLElBQVEsQ0FDM0IsTUFBTUMsRUFBUVksRUFBS0MsRUFBSWQsQ0FBRyxFQUMxQixPQUFPdXJCLEdBQVV0ckIsQ0FBSyxFQUFJLEtBQUssSUFBSSxFQUFHLE9BQU8sV0FBV0EsQ0FBSyxDQUFDLEVBQUksSUFDcEUsRUFDSXFyQixHQUFZLENBQUN4cUIsRUFBSWQsRUFBS3lDLElBQVEsQ0FDaEMsR0FBSUEsSUFBUSxNQUFROG9CLEdBQVU5b0IsQ0FBRyxFQUFHNUIsRUFBS0MsRUFBSWQsRUFBSyxHQUFHeUMsQ0FBRyxFQUFFLE1BQ3JELE9BQU0sSUFBSSxNQUFNLDhCQUE4QjVCLENBQUksT0FBTzRCLENBQUcsR0FBRyxDQUN0RSxFQUNBLE9BQUFDLEdBQWUsT0FBTyxhQUFjd29CLEVBQW9CIiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDMsNCw1LDE0LDIyLDIzXX0=
351
+ @keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`,sn=!1,rs=class extends vl{static get observedAttributes(){return["aria-label","aria-labelledby","value","max"]}constructor(){super(),this.shadowRoot||this.attachShadow({mode:"open"}).append(ss("slot",null,{hidden:""}),ss("style",Sl))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(sn)return;sn=!0;const t=gl||os,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let n=El(this);if(t&&(n=`${n.replace(/\d+%$/,"")} ${e}%`),os)for(const o of this.labels)P(o,"aria-label",n);P(this,"aria-busy",`${this.position===-1}`),P(this,"aria-label",n.trim()),P(this,"aria-labelledby",null),P(this,"aria-valuemax","100"),P(this,"aria-valuemin","0"),P(this,"aria-valuenow",`${e}`),P(this,"role",t?"img":"progressbar"),sn=!1}get labels(){const t=this.closest("label:not([for])"),e=yl(this);return t&&(t.htmlFor=e),_l(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return ls(this,"value")}set value(t){cs(this,"value",t)}get max(){return ls(this,"max")||1}set max(t){cs(this,"max",t)}};rs.formAssociated=!0;var as=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),ls=(t,e)=>{const n=P(t,e);return as(n)?Math.max(0,Number.parseFloat(n)):null},cs=(t,e,n)=>{if(n===null||as(n))P(t,e,`${n}`);else throw new Error(`Failed to set non-numeric '${P}': '${n}'`)};return xl.define("u-progress",rs),N.UHTMLComboboxElement=ve,N.UHTMLTabElement=Tn,N.UHTMLTabListElement=Cn,N.UHTMLTabPanelElement=$n,N.UHTMLTabsElement=Sn,N.analytics=fi,N.pagination=ia,N.styles=Gs,N.toast=ra,N.toggleAppExpanded=bi,N.version=Ws,Object.defineProperty(N,Symbol.toStringTag,{value:"Module"}),N}({});
352
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtY29tYm9ib3gvZGlzdC91LWNvbWJvYm94LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCIuLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2NvcmUvZGlzdC9mbG9hdGluZy11aS5jb3JlLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5kb20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS9kb20vZGlzdC9mbG9hdGluZy11aS5kb20ubWpzIiwiLi4vZGVzaWduc3lzdGVtL3V0aWxzLnRzIiwiLi4vZGVzaWduc3lzdGVtL2FuYWx5dGljcy9hbmFseXRpY3MudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC10b2dnbGUuanMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9wYWdpbmF0aW9uL3BhZ2luYXRpb24taGVscGVyLnRzIiwiLi4vbm9kZV9tb2R1bGVzL2Nsc3gvZGlzdC9jbHN4Lm1qcyIsIi4uL2Rlc2lnbnN5c3RlbS90b2FzdC90b2FzdC1oZWxwZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYnMtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vY2hhcnQvY2hhcnQubW9kdWxlLmNzcz9yYXciLCIuLi9kZXNpZ25zeXN0ZW0vY2hhcnQvY2hhcnQtZWxlbWVudC50cyIsIi4uL2Rlc2lnbnN5c3RlbS9kaWFsb2cvZGlhbG9nLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2Vycm9yc3VtbWFyeS9lcnJvcnN1bW1hcnktb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kYXRhbGlzdC9kaXN0L3UtZGF0YWxpc3QuanMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGQvZmllbGQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGRzZXQvZmllbGRzZXQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vbG9nby9sb2dvLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BvcG92ZXIvcG9wb3Zlci1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90YWJsZS90YWJsZS1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b2FzdC90b2FzdC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b2dnbGVncm91cC90b2dnbGVncm91cC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b29sdGlwL3Rvb2x0aXAtb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kZXRhaWxzL2Rpc3QvdS1kZXRhaWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtcHJvZ3Jlc3MvZGlzdC91LXByb2dyZXNzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcblxuLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19GSVJFRk9YID0gSVNfQlJPV1NFUiAmJiAvZmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgRk9DVVNfT1VUTElORSA9IFwib3V0bGluZTogMXB4IGRvdHRlZDsgb3V0bGluZTogNXB4IGF1dG8gSGlnaGxpZ2h0OyBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3JcIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoX2Vycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQyLCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0MikgZWwudGV4dENvbnRlbnQgPSB0ZXh0MjtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIGdldExhYmVsID0gKGVsKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IGxhYmVsID0gYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIpIHx8IFwiXCI7XG4gIGNvbnN0IGxhYmVscyA9ICgoX2EyID0gYXR0cihlbCwgXCJhcmlhLWxhYmVsbGVkYnlcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpLnNwbGl0KC9cXHMrLykpIHx8IFtdO1xuICByZXR1cm4gW1xuICAgIC4uLmxhYmVscy5tYXAoKGlkMikgPT4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQyKSksXG4gICAgLy8gR2V0IGFsbCBsYWJlbGxlZGJ5IGVsZW1lbnRzXG4gICAgLi4uQXJyYXkuZnJvbShlbC5sYWJlbHMgfHwgW10pXG4gICAgLy8gR2V0IGFsbCA8bGFiZWw+IGVsZW1lbnRzXG4gIF0ucmVkdWNlKChhY2MsIGVsMikgPT4ge1xuICAgIHZhciBfYTM7XG4gICAgcmV0dXJuIGFjYyB8fCAoKF9hMyA9IGVsMiA9PSBudWxsID8gdm9pZCAwIDogZWwyLmlubmVyVGV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy50cmltKCkpIHx8IFwiXCI7XG4gIH0sIGxhYmVsKTtcbn07XG52YXIgTElWRTtcbnZhciBMSVZFX1NSX0ZJWCA9IDA7XG52YXIgc3BlYWsgPSAodGV4dDIpID0+IHtcbiAgaWYgKCFMSVZFKSB7XG4gICAgTElWRSA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgTElWRS5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjpmaXhlZDtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcFwiO1xuICAgIGF0dHIoTElWRSwgXCJhcmlhLWxpdmVcIiwgXCJhc3NlcnRpdmVcIik7XG4gIH1cbiAgaWYgKCFMSVZFLmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChMSVZFKTtcbiAgaWYgKHRleHQyKSBMSVZFLnRleHRDb250ZW50ID0gYCR7dGV4dDJ9JHtMSVZFX1NSX0ZJWCsrICUgMiA/IFwiXFx4QTBcIiA6IFwiXCJ9YDtcbn07XG52YXIgc2V0VmFsdWUgPSAoaW5wdXQsIGRhdGEsIHR5cGUgPSBcIlwiKSA9PiB7XG4gIHZhciBfYTIsIF9iO1xuICBjb25zdCBldmVudCA9IHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUsIGRhdGEsIGlucHV0VHlwZTogdHlwZSB9O1xuICBjb25zdCBwcm90byA9IEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiYmVmb3JlaW5wdXRcIiwgZXZlbnQpKTtcbiAgKF9iID0gKF9hMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIFwidmFsdWVcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChpbnB1dCwgZGF0YSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJpbnB1dFwiLCBldmVudCkpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImNoYW5nZVwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xufTtcbnZhciBJU19QUkVTUyA9IGZhbHNlO1xudmFyIGlzTW91c2VEb3duID0gKGV2ZW50KSA9PiB7XG4gIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm1vdXNldXBcIikgSVNfUFJFU1MgPSBmYWxzZTtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2Vkb3duXCIpIHtcbiAgICBJU19QUkVTUyA9IHRydWU7XG4gICAgb24oZG9jdW1lbnQsIFwibW91c2V1cFwiLCBpc01vdXNlRG93biwgeyBvbmNlOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiBJU19QUkVTUztcbn07XG52YXIgZGVjbGFyYXRpdmVTaGFkb3dSb290ID0gKHN0eWxlLCBzbG90ID0gXCI8c2xvdD48L3Nsb3Q+XCIpID0+IGA8dGVtcGxhdGUgc2hhZG93cm9vdG1vZGU9XCJvcGVuXCI+JHtzbG90fTxzdHlsZT4ke3N0eWxlfTwvc3R5bGU+PC90ZW1wbGF0ZT5gO1xuXG4vLyB1LWNvbWJvYm94LnRzXG52YXIgVUhUTUxDb21ib2JveFN0eWxlID0gYDpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrOyAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCkgfSAvKiBNdXN0IGJlIGRpc3BsYXkgYmxvY2sgaW4gU2FmYXJpIHRvIGFsbG93IGZvY3VzIGluc2lkZSAqL1xuOmhvc3QoOm5vdChbZGF0YS1tdWx0aXBsZV0pKSA6OnNsb3R0ZWQoZGF0YSksXG46aG9zdChbZGF0YS1tdWx0aXBsZT1cImZhbHNlXCJdKSA6OnNsb3R0ZWQoZGF0YSkgeyBkaXNwbGF5OiBub25lIH0gLyogSGlkZSBkYXRhIGlmIG5vdCBtdWx0aXBsZSAqL1xuOjpzbG90dGVkKGlucHV0W2lucHV0bW9kZT1cIm5vbmVcIl0pIHsgb3V0bGluZTogbm9uZSB9IC8qIEhpZGUgdGVtcG9yYXJ5IGZvdWNzIG91dGxpbmUgZmxhc2ggKi9cbjo6c2xvdHRlZChkZWwpIHsgdGV4dC1kZWNvcmF0aW9uOiBub25lIH1cbjo6c2xvdHRlZChkYXRhOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwb2ludGVyLWV2ZW50czogbm9uZSB9XG46OnNsb3R0ZWQoZGF0YSk6OmFmdGVyIHsgY29udGVudDogJ1xcXFwwMEQ3JzsgY29udGVudDogJ1xcXFwwMEQ3JyAvICcnOyBwYWRkaW5nLWlubGluZTogLjVjaDsgcG9pbnRlci1ldmVudHM6IGF1dG87IGN1cnNvcjogcG9pbnRlciB9XG46OnNsb3R0ZWQoZGF0YTpmb2N1cykgeyAke0ZPQ1VTX09VVExJTkV9IH1gO1xudmFyIFVIVE1MQ29tYm9ib3hTaGFkb3dSb290ID0gZGVjbGFyYXRpdmVTaGFkb3dSb290KFVIVE1MQ29tYm9ib3hTdHlsZSk7XG52YXIgRVZFTlRTID0gXCJiZWZvcmVpbnB1dCxibHVyLGZvY3VzLGNsaWNrLGlucHV0LGtleWRvd24sbW91c2Vkb3duXCI7XG52YXIgRVZFTlRfT05DRSA9IHsgb25jZTogdHJ1ZSwgcGFzc2l2ZTogdHJ1ZSB9O1xudmFyIElTX0ZJUkVGT1hfREVTS1RPUCA9IElTX0ZJUkVGT1ggJiYgIUlTX0FORFJPSUQ7XG52YXIgSVNfTU9CSUxFID0gSVNfQU5EUk9JRCB8fCBJU19JT1M7XG52YXIgTU9ESUZJRUQgPSBcIlxcdTIwMEJcIi5yZXBlYXQoNSk7XG52YXIgRkFMU0UgPSBcImZhbHNlXCI7XG52YXIgVEVYVFMgPSB7XG4gIGFkZGVkOiBcIkFkZGVkXCIsXG4gIGVtcHR5OiBcIk5vIHNlbGVjdGVkXCIsXG4gIGZvdW5kOiBcIk5hdmlnYXRlIGxlZnQgdG8gZmluZCAlZCBzZWxlY3RlZFwiLFxuICBpbnZhbGlkOiBcIkludmFsaWQgdmFsdWVcIixcbiAgb2Y6IFwib2ZcIixcbiAgcmVtb3ZlOiBcIlByZXNzIHRvIHJlbW92ZVwiLFxuICByZW1vdmVkOiBcIlJlbW92ZWRcIlxufTtcbnZhciBVSFRNTENvbWJvYm94RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9pdGVtID0gXCJcIjtcbiAgICB0aGlzLl9zcGVhayA9IFwiXCI7XG4gICAgdGhpcy5fdGV4dHMgPSBfX3NwcmVhZFZhbHVlcyh7fSwgVEVYVFMpO1xuICAgIHRoaXMuX3ZhbHVlID0gXCJcIjtcbiAgICBpZiAoIXRoaXMuc2hhZG93Um9vdClcbiAgICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgICAgICAgLy8gQ29udGVudCBzbG90XG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBVSFRNTENvbWJvYm94U3R5bGUpXG4gICAgICApO1xuICB9XG4gIC8vIExvY2FsbHkgc3RvcmUgdmFsdWUgdG8gc3RvcmUgdmFsdWUgYmVmb3JlIGlucHV0LWNsaWNrXG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhURVhUUykubWFwKChrZXkpID0+IGBkYXRhLXNyLSR7a2V5fWApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuX3Jvb3QgPSBnZXRSb290KHRoaXMpO1xuICAgIG9uKHRoaXMsIEVWRU5UUywgdGhpcywgdHJ1ZSk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7XG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFtcInZhbHVlXCIsIFwiaWRcIl0sXG4gICAgICAvLyBSZXNwb25kIHRvIGNoYW5nZXMgaW4gPGRhdGE+IHZhbHVlIG9yIGNoYW5nZSBvZiBpZCBmb3IgPGRhdGFsaXN0PiB0byByZWNvbm5lY3Qgd2l0aCBpbnB1dFxuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICAvLyBSZXNwb25kIHRvIGNoYW5nZXMgaW4gPGRhdGE+IHRleHRDb250ZW50XG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfSk7XG4gICAgc2V0VGltZW91dChyZW5kZXIsIDAsIHRoaXMpO1xuICAgIHNldFRpbWVvdXQoc3luY0lucHV0VmFsdWUsIDAsIHRoaXMpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBfLCB2YWwpIHtcbiAgICBjb25zdCB0ZXh0MiA9IHByb3Auc3BsaXQoXCJkYXRhLXNyLVwiKVsxXTtcbiAgICBpZiAoVEVYVFNbdGV4dDJdKSB0aGlzLl90ZXh0c1t0ZXh0Ml0gPSB2YWwgfHwgVEVYVFNbdGV4dDJdO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIG9mZih0aGlzLCBFVkVOVFMsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fY2xlYXIgPSB0aGlzLl9mb2N1cyA9IHRoaXMuX2NvbnRyb2wgPSB2b2lkIDA7XG4gICAgdGhpcy5fbGlzdCA9IHRoaXMuX29wdGlvbnMgPSB0aGlzLl9yb290ID0gdm9pZCAwO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMpKSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmVmb3JlaW5wdXRcIikgdGhpcy5fdmFsdWUgPSAodGFyZ2V0ID09IG51bGwgPyB2b2lkIDAgOiB0YXJnZXQudmFsdWUpIHx8IFwiXCI7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmx1clwiKSBvbkJsdXIodGhpcyk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikgb25DbGljayh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiZm9jdXNcIikgb25Gb2N1cyh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiaW5wdXRcIikgb25JbnB1dCh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiKSBvbktleURvd24odGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcIm1vdXNlZG93blwiKSBpc01vdXNlRG93bihldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwibXV0YXRpb25cIikgcmVuZGVyKHRoaXMsIGV2ZW50KTtcbiAgfVxuICBnZXQgbXVsdGlwbGUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSBhdHRyKHRoaXMsIFwiZGF0YS1tdWx0aXBsZVwiKSkgIT0gbnVsbCA/IF9hMiA6IEZBTFNFKSAhPT0gRkFMU0U7XG4gIH1cbiAgc2V0IG11bHRpcGxlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImRhdGEtbXVsdGlwbGVcIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IGNyZWF0YWJsZSgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IGF0dHIodGhpcywgXCJkYXRhLWNyZWF0YWJsZVwiKSkgIT0gbnVsbCA/IF9hMiA6IEZBTFNFKSAhPT0gRkFMU0U7XG4gIH1cbiAgc2V0IGNyZWF0YWJsZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJkYXRhLWNyZWF0YWJsZVwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgY29udHJvbCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIGlmICghKChfYTIgPSB0aGlzLl9jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmlzQ29ubmVjdGVkKSlcbiAgICAgIHRoaXMuX2NvbnRyb2wgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKTtcbiAgICByZXR1cm4gdGhpcy5fY29udHJvbDtcbiAgfVxuICBnZXQgbGlzdCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIGlmICghKChfYTIgPSB0aGlzLl9saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmlzQ29ubmVjdGVkKSlcbiAgICAgIHRoaXMuX2xpc3QgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJ1LWRhdGFsaXN0LGRhdGFsaXN0XCIpO1xuICAgIHJldHVybiB0aGlzLl9saXN0O1xuICB9XG4gIGdldCBjbGVhcigpIHtcbiAgICB2YXIgX2EyO1xuICAgIGlmICghKChfYTIgPSB0aGlzLl9jbGVhcikgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpIHRoaXMuX2NsZWFyID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiZGVsXCIpO1xuICAgIHJldHVybiB0aGlzLl9jbGVhcjtcbiAgfVxuICBnZXQgaXRlbXMoKSB7XG4gICAgaWYgKCF0aGlzLl9pdGVtcykgdGhpcy5faXRlbXMgPSB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGF0YVwiKTtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgdmFyIF9hMiwgX2I7XG4gICAgaWYgKCF0aGlzLl9vcHRpb25zKSB7XG4gICAgICBjb25zdCB0YWcgPSAoKF9hMiA9IHRoaXMubGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5ub2RlTmFtZSkgPT09IFwiVS1EQVRBTElTVFwiID8gXCJ1LW9wdGlvblwiIDogXCJvcHRpb25cIjtcbiAgICAgIHRoaXMuX29wdGlvbnMgPSAoX2IgPSB0aGlzLmxpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYi5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuICBnZXQgdmFsdWVzKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5pdGVtc10ubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKTtcbiAgfVxufTtcbnZhciB0ZXh0ID0gKGVsKSA9PiB7XG4gIHZhciBfYTI7XG4gIHJldHVybiAoKF9hMiA9IGVsID09IG51bGwgPyB2b2lkIDAgOiBlbC50ZXh0Q29udGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG59O1xudmFyIGlzRGF0YSA9IChlbCkgPT4gZWwgaW5zdGFuY2VvZiBIVE1MRGF0YUVsZW1lbnQ7XG52YXIgaXNEaXNhYmxlZCA9ICh7IGNvbnRyb2wgfSkgPT4gKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuZGlzYWJsZWQpIHx8IChjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLnJlYWRPbmx5KSB8fCBmYWxzZTtcbnZhciByZW5kZXIgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgeyBfZm9jdXMsIF90ZXh0cywgaXRlbXMsIGNvbnRyb2wsIGxpc3QsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBpZiAoIWNvbnRyb2wgfHwgIWxpc3QpIHJldHVybjtcbiAgY29uc3QgcHJldiA9IGdldExhYmVsKGNvbnRyb2wpO1xuICBjb25zdCBuZXh0ID0gcHJldi5lbmRzV2l0aChNT0RJRklFRCkgPyBhdHRyKGNvbnRyb2wsIFwiZGF0YS1sYWJlbFwiKSA6IHByZXY7XG4gIGF0dHIoY29udHJvbCwgXCJkYXRhLWxhYmVsXCIsIG5leHQpO1xuICBsZXQgbGFiZWwgPSBgJHtuZXh0fSR7bXVsdGlwbGUgPyBgLCAke2l0ZW1zLmxlbmd0aCA/IF90ZXh0cy5mb3VuZC5yZXBsYWNlKFwiJWRcIiwgYCR7aXRlbXMubGVuZ3RofWApIDogX3RleHRzLmVtcHR5fWAgOiBcIlwifWA7XG4gIGNvbnN0IGVkaXRzID0gW107XG4gIGZvciAoY29uc3QgeyBhZGRlZE5vZGVzLCByZW1vdmVkTm9kZXMgfSBvZiAoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LmRldGFpbCkgfHwgW10pIHtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIGFkZGVkTm9kZXMpIGlmIChpc0RhdGEoZWwpKSBlZGl0cy51bnNoaWZ0KGVsKTtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIHJlbW92ZWROb2RlcykgaWYgKGlzRGF0YShlbCkpIGVkaXRzLnB1c2goZWwpO1xuICB9XG4gIGNvbnN0IHNob3VsZEFubm91bmNlID0gbXVsdGlwbGUgPyBlZGl0cy5sZW5ndGggPT09IDEgOiBlZGl0c1swXSA9PT0gX2ZvY3VzO1xuICBpZiAoX2ZvY3VzICYmIHNob3VsZEFubm91bmNlKSB7XG4gICAgY29uc3QgYXJpYUV4cGFuZGVkID0gYXR0cihjb250cm9sLCBcImFyaWEtZXhwYW5kZWRcIik7XG4gICAgY29uc3QgaW5wdXRNb2RlID0gYXR0cihjb250cm9sLCBcImlucHV0bW9kZVwiKTtcbiAgICBjb25zdCBuZXh0Rm9jdXMgPSBpc0RhdGEoX2ZvY3VzKSA/IGNvbnRyb2wgOiBfZm9jdXM7XG4gICAgY29uc3QgaXNSZW1vdmUgPSAhZWRpdHNbMF0uaXNDb25uZWN0ZWQ7XG4gICAgc2VsZi5fc3BlYWsgPSBgJHtfdGV4dHNbaXNSZW1vdmUgPyBcInJlbW92ZWRcIiA6IFwiYWRkZWRcIl19ICR7dGV4dChlZGl0c1swXSl9LCBgO1xuICAgIGlmIChJU19NT0JJTEUgfHwgX2ZvY3VzID09PSBjb250cm9sKSBzcGVhayhzZWxmLl9zcGVhayk7XG4gICAgaWYgKGNvbnRyb2wgIT09IG5leHRGb2N1cykge1xuICAgICAgYXR0cihjb250cm9sLCBcImFyaWEtZXhwYW5kZWRcIiwgbnVsbCk7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIsIFwibm9uZVwiKTtcbiAgICAgIGxhYmVsID0gXCJcXHhBMFwiO1xuICAgICAgY29udHJvbC5mb2N1cygpO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHZhciBfYTM7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiLCBhcmlhRXhwYW5kZWQpO1xuICAgICAgYXR0cihjb250cm9sLCBcImlucHV0bW9kZVwiLCBpc1JlbW92ZSA/IFwibm9uZVwiIDogaW5wdXRNb2RlKTtcbiAgICAgIChfYTMgPSBuZXh0Rm9jdXMgPT0gbnVsbCA/IHZvaWQgMCA6IG5leHRGb2N1cy5mb2N1cykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy5jYWxsKG5leHRGb2N1cyk7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIsIGlucHV0TW9kZSk7XG4gICAgICBzZWxmLl9zcGVhayA9IFwiXCI7XG4gICAgICBpZiAoSVNfRklSRUZPWF9ERVNLVE9QKSBvbihzZWxmLCBcImJsdXJcIiwgKCkgPT4gcmVuZGVyKHNlbGYpLCBFVkVOVF9PTkNFKTtcbiAgICAgIGVsc2Ugc2V0VGltZW91dChyZW5kZXIsIDEwMCwgc2VsZik7XG4gICAgfSwgMTAwKTtcbiAgfVxuICBsZXQgaWR4ID0gMDtcbiAgY29uc3Qgc2VsZWN0ID0gc2VsZi5xdWVyeVNlbGVjdG9yKFwic2VsZWN0XCIpO1xuICBjb25zdCByZW1vdmUgPSBpc0Rpc2FibGVkKHNlbGYpID8gXCJcIiA6IGAke190ZXh0cy5yZW1vdmV9LCBgO1xuICBmb3IgKGNvbnN0IGl0ZW0yIG9mIGl0ZW1zKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gc2VsZWN0ID09IG51bGwgPyB2b2lkIDAgOiBzZWxlY3Qub3B0aW9uc1tpZHhdO1xuICAgIGNvbnN0IGxhYmVsMiA9IHRleHQoaXRlbTIpO1xuICAgIGNvbnN0IHZhbHVlID0gaXRlbTIudmFsdWUgfHwgbGFiZWwyO1xuICAgIGNvbnN0IGFyaWEgPSBgJHtzZWxmLl9zcGVha30ke2xhYmVsMn0sICR7cmVtb3ZlfSR7KytpZHh9ICR7X3RleHRzLm9mfSAke2l0ZW1zLmxlbmd0aH1gO1xuICAgIGF0dHIoaXRlbTIsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgICBhdHRyKGl0ZW0yLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgICBhdHRyKGl0ZW0yLCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG4gICAgYXR0cihpdGVtMiwgXCJhcmlhLWxhYmVsXCIsIGFyaWEpO1xuICAgIGlmIChvcHRpb24pIE9iamVjdC5hc3NpZ24ob3B0aW9uLCB7IHRleHRDb250ZW50OiBsYWJlbDIsIHZhbHVlIH0pO1xuICAgIGVsc2Ugc2VsZWN0ID09IG51bGwgPyB2b2lkIDAgOiBzZWxlY3QuYXBwZW5kQ2hpbGQobmV3IE9wdGlvbihsYWJlbDIsIHZhbHVlLCB0cnVlLCB0cnVlKSk7XG4gIH1cbiAgaWYgKHNlbGVjdCkgYXR0cihzZWxlY3QsIFwibXVsdGlwbGVcIiwgbXVsdGlwbGUgPyBcIlwiIDogbnVsbCk7XG4gIGZvciAoY29uc3Qgb3B0IG9mIFsuLi4oc2VsZWN0ID09IG51bGwgPyB2b2lkIDAgOiBzZWxlY3Qub3B0aW9ucykgfHwgW11dLnNsaWNlKGlkeCkpIG9wdC5yZW1vdmUoKTtcbiAgaWYgKCFtdWx0aXBsZSAmJiBpZHggPiAxKVxuICAgIGNvbnNvbGUud2FybihcInUtY29tYm9ib3g6IE11bHRpcGxlIDxkYXRhPiBmb3VuZCBpbiBzaW5nbGUgbW9kZS5cIik7XG4gIGF0dHIobGlzdCwgXCJhcmlhLW11bHRpc2VsZWN0YWJsZVwiLCBgJHttdWx0aXBsZX1gKTtcbiAgYXR0cihjb250cm9sLCBcImxpc3RcIiwgdXNlSWQobGlzdCkpO1xuICBhdHRyKGNvbnRyb2wsIFwiYXJpYS1sYWJlbFwiLCBgJHtzZWxmLl9zcGVha30ke2xhYmVsfSR7TU9ESUZJRUR9YCk7XG4gIGlmIChsaXN0Lmhhc0F0dHJpYnV0ZShcInBvcG92ZXJcIikpIHtcbiAgICBhdHRyKGNvbnRyb2wsIFwicG9wb3ZlcnRhcmdldFwiLCB1c2VJZChsaXN0KSk7XG4gICAgYXR0cihsaXN0LCBcInBvcG92ZXJcIiwgXCJtYW51YWxcIik7XG4gIH1cbiAgY29uc3QgaXRlbSA9IHRleHQoaXRlbXNbMF0pO1xuICBpZiAoaXRlbSAhPT0gc2VsZi5faXRlbSkgc3luY0lucHV0VmFsdWUoc2VsZik7XG4gIHNlbGYuX2l0ZW0gPSBpdGVtO1xuICBzeW5jQ2xlYXJXaXRoSW5wdXQoc2VsZik7XG4gIHN5bmNPcHRpb25zV2l0aEl0ZW1zKHNlbGYpO1xuICAoX2EyID0gbXV0YXRpb25PYnNlcnZlcihzZWxmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50YWtlUmVjb3JkcygpO1xufTtcbnZhciBzeW5jQ2xlYXJXaXRoSW5wdXQgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoc2VsZi5jbGVhcikgYXR0cihzZWxmLmNsZWFyLCBcInJvbGVcIiwgXCJidXR0b25cIik7XG4gIGlmIChzZWxmLmNsZWFyKSBzZWxmLmNsZWFyLmhpZGRlbiA9ICEoKF9hMiA9IHNlbGYuY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi52YWx1ZSkgfHwgaXNEaXNhYmxlZChzZWxmKTtcbn07XG52YXIgc3luY09wdGlvbnNXaXRoSXRlbXMgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF9zcGVhaywgb3B0aW9ucyA9IFtdLCB2YWx1ZXMgfSA9IHNlbGY7XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IChfYTIgPSBhdHRyKG9wdCwgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRleHQob3B0KTtcbiAgICBhdHRyKG9wdCwgXCJhcmlhLWxhYmVsXCIsIF9zcGVhayA/IGAke19zcGVha30ke3RleHQob3B0KX1gIDogbnVsbCk7XG4gICAgYXR0cihvcHQsIFwic2VsZWN0ZWRcIiwgdmFsdWVzLmluY2x1ZGVzKHZhbHVlKSA/IFwiXCIgOiBudWxsKTtcbiAgfVxufTtcbnZhciBzeW5jSW5wdXRWYWx1ZSA9IChzZWxmKSA9PiB7XG4gIGNvbnN0IHsgbXVsdGlwbGUsIGNvbnRyb2wsIGl0ZW1zIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9IHRleHQoaXRlbXNbMF0pO1xuICBpZiAoIW11bHRpcGxlICYmIGNvbnRyb2wgJiYgdmFsdWUgIT09IGNvbnRyb2wudmFsdWUpXG4gICAgc2V0VmFsdWUoY29udHJvbCwgdmFsdWUsIHZhbHVlID8gXCJpbnNlcnRUZXh0XCIgOiBcImRlbGV0ZUNvbnRlbnRcIik7XG59O1xudmFyIGRpc3BhdGNoTWF0Y2ggPSAoc2VsZiwgY2hhbmdlID0gdHJ1ZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF90ZXh0cywgb3B0aW9ucyA9IFtdLCBjcmVhdGFibGUsIGNvbnRyb2wsIGl0ZW1zLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBxdWVyeSA9IHZhbHVlLnRvTG93ZXJDYXNlKCkgfHwgbnVsbDtcbiAgbGV0IG1hdGNoID0gWy4uLm9wdGlvbnNdLmZpbmQoXG4gICAgKG9wdCkgPT4gKGF0dHIob3B0LCBcImxhYmVsXCIpIHx8IHRleHQob3B0KSkudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IHF1ZXJ5XG4gICk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IG1hdGNoIH07XG4gIGlmICghc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImNvbWJvYm94YmVmb3JlbWF0Y2hcIiwgZXZlbnQpKSlcbiAgICBtYXRjaCA9IFsuLi5vcHRpb25zXS5maW5kKChvKSA9PiBvLnNlbGVjdGVkKTtcbiAgaWYgKGNoYW5nZSkge1xuICAgIHN5bmNPcHRpb25zV2l0aEl0ZW1zKHNlbGYpO1xuICAgIGlmIChtYXRjaCkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIG1hdGNoLCBmYWxzZSk7XG4gICAgaWYgKGNyZWF0YWJsZSAmJiB2YWx1ZSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIHsgdmFsdWUgfSwgZmFsc2UpO1xuICAgIGlmICghbXVsdGlwbGUgJiYgIXZhbHVlICYmIGl0ZW1zWzBdKSBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtc1swXSk7XG4gICAgZWxzZSBzeW5jSW5wdXRWYWx1ZShzZWxmKTtcbiAgICByZXR1cm4gc3BlYWsoX3RleHRzLmludmFsaWQpO1xuICB9XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIG9wdC5zZWxlY3RlZCA9IG9wdCA9PT0gbWF0Y2g7XG59O1xudmFyIGRpc3BhdGNoQ2hhbmdlID0gKHNlbGYsIGl0ZW0sIHJlbW92YWJsZSA9IHRydWUpID0+IHtcbiAgY29uc3QgeyBjb250cm9sLCBpdGVtcywgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGNvbnN0IGFkZCA9IGNyZWF0ZUVsZW1lbnQoXCJkYXRhXCIsIGl0ZW0ubGFiZWwgfHwgaXRlbS52YWx1ZSwge1xuICAgIHZhbHVlOiBpdGVtLnZhbHVlXG4gIH0pO1xuICBjb25zdCByZW1vdmUgPSBbLi4uaXRlbXNdLmZpbmQoKGkpID0+IGkudmFsdWUgPT09IGl0ZW0udmFsdWUpO1xuICBjb25zdCBldmVudCA9IHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSwgZGV0YWlsOiByZW1vdmUgfHwgYWRkIH07XG4gIGNvbnN0IHNraXAgPSByZW1vdmUgJiYgIXJlbW92YWJsZTtcbiAgaWYgKHNraXApIHJldHVybiBzeW5jSW5wdXRWYWx1ZShzZWxmKTtcbiAgaWYgKHNlbGYuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJjb21ib2JveGJlZm9yZXNlbGVjdFwiLCBldmVudCkpKSB7XG4gICAgaWYgKCFtdWx0aXBsZSkgZm9yIChjb25zdCBpdGVtMiBvZiBbLi4uaXRlbXNdKSBpdGVtMi5yZW1vdmUoKTtcbiAgICBpZiAocmVtb3ZlKSByZW1vdmUucmVtb3ZlKCk7XG4gICAgZWxzZSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmluc2VydEFkamFjZW50RWxlbWVudChcImJlZm9yZWJlZ2luXCIsIGFkZCk7XG4gICAgc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImNvbWJvYm94YWZ0ZXJzZWxlY3RcIiwgZXZlbnQpKTtcbiAgfVxufTtcbnZhciBvbkZvY3VzID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBzZWxmLl9mb2N1cyA9IHRhcmdldDtcbiAgc3BlYWsoKTtcbn07XG52YXIgb25CbHVyID0gKHNlbGYpID0+IGlzTW91c2VEb3duKCkgfHwgc2V0VGltZW91dChvbkJsdXJyZWQsIDAsIHNlbGYpO1xudmFyIG9uQmx1cnJlZCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmICghc2VsZi5fZm9jdXMgfHwgc2VsZi5jb250YWlucygoX2EyID0gc2VsZi5fcm9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5hY3RpdmVFbGVtZW50KSkgcmV0dXJuO1xuICBpZiAoIXNlbGYubXVsdGlwbGUpIGRpc3BhdGNoTWF0Y2goc2VsZik7XG4gIHNlbGYuX2ZvY3VzID0gdm9pZCAwO1xufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIGNvbnN0IHsgY2xpZW50WDogeCwgY2xpZW50WTogeSwgdGFyZ2V0IH0gPSBldmVudDtcbiAgY29uc3QgeyBjbGVhciwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGlmIChjbGVhciA9PSBudWxsID8gdm9pZCAwIDogY2xlYXIuY29udGFpbnModGFyZ2V0KSkge1xuICAgIGlmIChjb250cm9sKSBzZXRWYWx1ZShjb250cm9sLCBcIlwiLCBcImRlbGV0ZUNvbnRlbnRCYWNrd2FyZFwiKTtcbiAgICByZXR1cm4gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpO1xuICB9XG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChpdGVtLmNvbnRhaW5zKHRhcmdldCkpIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtKTtcbiAgICBpZiAoeSA+PSB0b3AgJiYgeSA8PSBib3R0b20gJiYgeCA+PSBsZWZ0ICYmIHggPD0gcmlnaHQpIHJldHVybiBpdGVtLmZvY3VzKCk7XG4gIH1cbiAgaWYgKHRhcmdldCA9PT0gc2VsZikgY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgb3B0aW9ucyA9IFtdLCBjb250cm9sLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBpc0NsaWNrID0gZXZlbnQgaW5zdGFuY2VvZiBJbnB1dEV2ZW50ID8gIWV2ZW50LmlucHV0VHlwZSB8fCBldmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0XCIgOiAhIXZhbHVlO1xuICBpZiAoaXNDbGljaykge1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIGlmIChjb250cm9sKSBjb250cm9sLnZhbHVlID0gc2VsZi5fdmFsdWU7XG4gICAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucylcbiAgICAgIGlmIChvcHQudmFsdWUgJiYgb3B0LnZhbHVlID09PSB2YWx1ZSlcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIG9wdCwgbXVsdGlwbGUpO1xuICB9IGVsc2UgaWYgKCFtdWx0aXBsZSkgZGlzcGF0Y2hNYXRjaChzZWxmLCBmYWxzZSk7XG4gIHN5bmNDbGVhcldpdGhJbnB1dChzZWxmKTtcbn07XG52YXIgb25LZXlEb3duID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5KSByZXR1cm47XG4gIGNvbnN0IHsgY2xlYXIsIGNvbnRyb2wsIGl0ZW1zIH0gPSBzZWxmO1xuICBjb25zdCB7IGtleSwgcmVwZWF0LCB0YXJnZXQgfSA9IGV2ZW50O1xuICBjb25zdCBpc0NvbnRyb2wgPSBjb250cm9sICYmIGNvbnRyb2wgPT09IHRhcmdldDtcbiAgY29uc3QgaW5UZXh0ID0gaXNDb250cm9sICYmIChjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLnNlbGVjdGlvbkVuZCk7XG4gIGxldCBpbmRleCA9IGlzQ29udHJvbCA/IGl0ZW1zLmxlbmd0aCA6IFsuLi5pdGVtc10uaW5kZXhPZih0YXJnZXQpO1xuICBpZiAoaXNDb250cm9sICYmIGtleSA9PT0gXCJUYWJcIiAmJiBjbGVhciAmJiAhY2xlYXIuaGlkZGVuKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjbGVhci50YWJJbmRleCA9IC0xO1xuICAgIGNsZWFyLmZvY3VzKCk7XG4gICAgb24oY2xlYXIsIFwiYmx1clwiLCAoKSA9PiBhdHRyKGNsZWFyLCBcInRhYmluZGV4XCIsIG51bGwpLCBFVkVOVF9PTkNFKTtcbiAgfVxuICBpZiAoIWlzQ29udHJvbCAmJiBhc0J1dHRvbihldmVudCkgfHwgaW5kZXggPT09IC0xKSByZXR1cm47XG4gIGlmIChrZXkgPT09IFwiQXJyb3dSaWdodFwiICYmICFpc0NvbnRyb2wpIGluZGV4ICs9IDE7XG4gIGVsc2UgaWYgKGtleSA9PT0gXCJBcnJvd0xlZnRcIiAmJiAhaW5UZXh0KSBpbmRleCAtPSAxO1xuICBlbHNlIGlmIChrZXkgPT09IFwiRW50ZXJcIiAmJiBpc0NvbnRyb2wpIHtcbiAgICBjb25zdCBmb3JtID0gYXR0cihjb250cm9sLCBcImZvcm1cIik7XG4gICAgYXR0cihjb250cm9sLCBcImZvcm1cIiwgXCIjXCIpO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiLCBmb3JtKSk7XG4gICAgcmV0dXJuIGRpc3BhdGNoTWF0Y2goc2VsZik7XG4gIH0gZWxzZSBpZiAoKGtleSA9PT0gXCJCYWNrc3BhY2VcIiB8fCBrZXkgPT09IFwiRGVsZXRlXCIpICYmICFpblRleHQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghcmVwZWF0ICYmIGl0ZW1zW2luZGV4XSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1zW2luZGV4XSk7XG4gICAgaWYgKGlzQ29udHJvbCkgaW5kZXggLT0gMTtcbiAgfSBlbHNlIHJldHVybiBpc0NvbnRyb2wgfHwgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuZm9jdXMoKSk7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIChfYTIgPSBpdGVtc1tNYXRoLm1heCgwLCBpbmRleCldIHx8IGNvbnRyb2wpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWNvbWJvYm94XCIsIFVIVE1MQ29tYm9ib3hFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxDb21ib2JveEVsZW1lbnQsIFVIVE1MQ29tYm9ib3hTaGFkb3dSb290LCBVSFRNTENvbWJvYm94U3R5bGUgfTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXR0YWNoU3R5bGUgPSAoZWxlbWVudCwgY3NzKSA9PiBlbGVtZW50LnNoYWRvd1Jvb3QgfHwgZWxlbWVudC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAvLyBVbm5hbWVkIHNsb3QgZG9lcyBhdXRvbWF0aWNhbGx5IHJlbmRlciBhbGwgdG9wIGVsZW1lbnQgbm9kZXNcbiAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIGNzcylcbik7XG52YXIgb2JzZXJ2ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgbXV0YXRpb25PYnNlcnZlciA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHJldHVybiBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICB0cnkge1xuICAgIG9ic2VydmVycy5nZXQoZWxlbWVudCkuZGlzY29ubmVjdCgpO1xuICAgIG9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gIH0gY2F0Y2ggKF9lcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIGRlY2xhcmF0aXZlU2hhZG93Um9vdCA9IChzdHlsZSwgc2xvdCA9IFwiPHNsb3Q+PC9zbG90PlwiKSA9PiBgPHRlbXBsYXRlIHNoYWRvd3Jvb3Rtb2RlPVwib3BlblwiPiR7c2xvdH08c3R5bGU+JHtzdHlsZX08L3N0eWxlPjwvdGVtcGxhdGU+YDtcblxuLy8gdS10YWJzLnRzXG52YXIgVUhUTUxUYWJzU3R5bGUgPSBESVNQTEFZX0JMT0NLO1xudmFyIFVIVE1MVGFiTGlzdFN0eWxlID0gRElTUExBWV9CTE9DSztcbnZhciBVSFRNTFRhYlBhbmVsU3R5bGUgPSBESVNQTEFZX0JMT0NLO1xudmFyIFVIVE1MVGFiU3R5bGUgPSAnOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBjdXJzb3I6IHBvaW50ZXIgfTpob3N0KFthcmlhLWRpc2FibGVkPVwidHJ1ZVwiXSkgeyBjdXJzb3I6IGRlZmF1bHQgfSc7XG52YXIgVUhUTUxUYWJzU2hhZG93Um9vdCA9IGRlY2xhcmF0aXZlU2hhZG93Um9vdChVSFRNTFRhYnNTdHlsZSk7XG52YXIgVUhUTUxUYWJMaXN0U2hhZG93Um9vdCA9IGRlY2xhcmF0aXZlU2hhZG93Um9vdChVSFRNTFRhYkxpc3RTdHlsZSk7XG52YXIgVUhUTUxUYWJTaGFkb3dSb290ID0gZGVjbGFyYXRpdmVTaGFkb3dSb290KFVIVE1MVGFiU3R5bGUpO1xudmFyIFVIVE1MVGFiUGFuZWxTaGFkb3dSb290ID0gZGVjbGFyYXRpdmVTaGFkb3dSb290KFVIVE1MVGFiUGFuZWxTdHlsZSk7XG52YXIgQVJJQV9DT05UUk9MUyA9IFwiYXJpYS1jb250cm9sc1wiO1xudmFyIEFSSUFfU0VMRUNURUQgPSBcImFyaWEtc2VsZWN0ZWRcIjtcbnZhciBVSFRNTFRhYnNFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIFVIVE1MVGFic1N0eWxlKTtcbiAgfVxuICBnZXQgdGFiTGlzdCgpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJsaXN0XCIsIHRoaXMpWzBdIHx8IG51bGw7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldFNlbGVjdGVkSW5kZXgodGhpcy50YWJzKTtcbiAgfVxuICBzZXQgc2VsZWN0ZWRJbmRleChpbmRleCkge1xuICAgIHNldFNlbGVjdGVkKHRoaXMudGFic1tpbmRleF0pO1xuICB9XG4gIGdldCB0YWJzKCkge1xuICAgIHJldHVybiBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYlwiLCB0aGlzKTtcbiAgfVxuICBnZXQgcGFuZWxzKCkge1xuICAgIHJldHVybiBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYnBhbmVsXCIsIHRoaXMpO1xuICB9XG59O1xudmFyIFVIVE1MVGFiTGlzdEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgVUhUTUxUYWJMaXN0U3R5bGUpO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFibGlzdFwiKTtcbiAgICBvbih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCkgdGhpcy5oYW5kbGVFdmVudCgpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LnR5cGUgPT09IFwibXV0YXRpb25cIikge1xuICAgICAgY29uc3QgdGFiID0gdGhpcy50YWJzW01hdGgubWF4KHRoaXMuc2VsZWN0ZWRJbmRleCwgMCldO1xuICAgICAgcmV0dXJuIHRhYiA9PSBudWxsID8gdm9pZCAwIDogdGFiLnNldEF0dHJpYnV0ZShBUklBX1NFTEVDVEVELCBcInRydWVcIik7XG4gICAgfVxuICAgIGNvbnN0IHsga2V5IH0gPSBldmVudDtcbiAgICBjb25zdCB0YWJzID0gWy4uLnRoaXMudGFic107XG4gICAgY29uc3QgcHJldiA9IHRhYnMuZmluZEluZGV4KCh0YWIpID0+IHRhYi5jb250YWlucyhldmVudC50YXJnZXQpKTtcbiAgICBsZXQgbmV4dCA9IHByZXY7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgcHJldiA9PT0gLTEpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSBzZXRTZWxlY3RlZCh0YWJzW3ByZXZdKTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIgJiYgIWFzQnV0dG9uKGV2ZW50KSkge1xuICAgICAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIiB8fCBrZXkgPT09IFwiQXJyb3dSaWdodFwiKVxuICAgICAgICBuZXh0ID0gKHByZXYgKyAxKSAlIHRhYnMubGVuZ3RoO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93VXBcIiB8fCBrZXkgPT09IFwiQXJyb3dMZWZ0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiB8fCB0YWJzLmxlbmd0aCkgLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkVuZFwiKSBuZXh0ID0gdGFicy5sZW5ndGggLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkhvbWVcIikgbmV4dCA9IDA7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiVGFiXCIpIG5leHQgPSBnZXRTZWxlY3RlZEluZGV4KHRhYnMpO1xuICAgICAgZWxzZSByZXR1cm47XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGFic1twcmV2XS50YWJJbmRleCA9IC0xO1xuICAgICAgICB0YWJzW25leHRdLnRhYkluZGV4ID0gMDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGtleSAhPT0gXCJUYWJcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0YWJzW25leHRdLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJzKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbn07XG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MVGFiRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIEFSSUFfU0VMRUNURUQsIEFSSUFfQ09OVFJPTFNdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgVUhUTUxUYWJTdHlsZSk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJ0YWJcIik7XG4gICAgdGhpcy50YWJJbmRleCA9IHRoaXMuc2VsZWN0ZWQgPyAwIDogLTE7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmICghU0tJUF9BVFRSX0NIQU5HRSAmJiB0aGlzLnNlbGVjdGVkICYmIHRoaXMudGFiTGlzdCkge1xuICAgICAgU0tJUF9BVFRSX0NIQU5HRSA9IHRydWU7XG4gICAgICBjb25zdCB0YWJzID0gWy4uLnRoaXMudGFiTGlzdC5xdWVyeVNlbGVjdG9yQWxsKFwidS10YWJcIildO1xuICAgICAgY29uc3QgcGFuZWxzID0gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJwYW5lbFwiLCB0aGlzLnRhYnNFbGVtZW50IHx8IHRoaXMpO1xuICAgICAgY29uc3QgbmV4dFBhbmVsID0gZ2V0UGFuZWwodGhpcywgcGFuZWxzW3RhYnMuaW5kZXhPZih0aGlzKV0pO1xuICAgICAgaWYgKG5leHRQYW5lbCkgYXR0cihuZXh0UGFuZWwsIFNBRkVfTEFCRUxMRURCWSwgdXNlSWQodGhpcykpO1xuICAgICAgdGFicy5mb3JFYWNoKCh0YWIsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhbmVsID0gZ2V0UGFuZWwodGFiLCBwYW5lbHNbaW5kZXhdKTtcbiAgICAgICAgdGFiLnRhYkluZGV4ID0gdGFiID09PSB0aGlzID8gMCA6IC0xO1xuICAgICAgICBhdHRyKHRhYiwgQVJJQV9TRUxFQ1RFRCwgYCR7dGFiID09PSB0aGlzfWApO1xuICAgICAgICBhdHRyKHRhYiwgQVJJQV9DT05UUk9MUywgKHBhbmVsID09IG51bGwgPyB2b2lkIDAgOiBwYW5lbC5pZCkgfHwgbnVsbCk7XG4gICAgICAgIGlmIChwYW5lbCkgcGFuZWwuaGlkZGVuID0gcGFuZWwgIT09IG5leHRQYW5lbDtcbiAgICAgIH0pO1xuICAgICAgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBnZXQgdGFic0VsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcInUtdGFic1wiKTtcbiAgfVxuICBnZXQgdGFiTGlzdCgpIHtcbiAgICBjb25zdCB0YWJsaXN0ID0gdGhpcy5wYXJlbnRFbGVtZW50O1xuICAgIHJldHVybiAodGFibGlzdCA9PSBudWxsID8gdm9pZCAwIDogdGFibGlzdC5ub2RlTmFtZSkgPT09IFwiVS1UQUJMSVNUXCIgPyB0YWJsaXN0IDogbnVsbDtcbiAgfVxuICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgQVJJQV9TRUxFQ1RFRCkgPT09IFwidHJ1ZVwiO1xuICB9XG4gIHNldCBzZWxlY3RlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgQVJJQV9TRUxFQ1RFRCwgYCR7ISF2YWx1ZX1gKTtcbiAgfVxuICAvKiogUmV0cmlldmVzIHRoZSBvcmRpbmFsIHBvc2l0aW9uIG9mIGFuIHRhYiBpbiBhIHRhYmxpc3QuICovXG4gIGdldCBpbmRleCgpIHtcbiAgICBjb25zdCB0YWJMaXN0ID0gdGhpcy50YWJMaXN0O1xuICAgIHJldHVybiB0YWJMaXN0ID8gWy4uLnRhYkxpc3QucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpXS5pbmRleE9mKHRoaXMpIDogMDtcbiAgfVxuICBnZXQgcGFuZWwoKSB7XG4gICAgcmV0dXJuIGdldFBhbmVsKHRoaXMpO1xuICB9XG59O1xudmFyIFVIVE1MVGFiUGFuZWxFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiaGlkZGVuXCJdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgVUhUTUxUYWJQYW5lbFN0eWxlKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcInRhYnBhbmVsXCIpO1xuICAgIHRoaXMuaGlkZGVuID0gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpID09PSAtMTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBjb25zdCBoaWRkZW4gPSB0aGlzLmhpZGRlbjtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1oaWRkZW5cIiwgYCR7aGlkZGVufWApO1xuICAgIGF0dHIodGhpcywgXCJ0YWJpbmRleFwiLCBoaWRkZW4gfHwgaXNGb2N1c2FibGUodGhpcy5maXJzdENoaWxkKSA/IG51bGwgOiBcIjBcIik7XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgY29uc3QgY3NzID0gYHUtdGFiWyR7QVJJQV9DT05UUk9MU309XCIke3RoaXMuaWR9XCJdYDtcbiAgICByZXR1cm4gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKGNzcyk7XG4gIH1cbn07XG52YXIgcXVlcnlXaXRob3V0TmVzdGVkID0gKHRhZywgc2VsZikgPT4gc2VsZi5xdWVyeVNlbGVjdG9yQWxsKGAke3RhZ306bm90KDpzY29wZSB1LXRhYnBhbmVsICR7dGFnfSlgKTtcbnZhciBnZXRQYW5lbCA9ICh0YWIsIHBhbmVsKSA9PiB7XG4gIGNvbnN0IGlkMiA9IGF0dHIodGFiLCBBUklBX0NPTlRST0xTKSB8fCB1c2VJZChwYW5lbCk7XG4gIGNvbnN0IGVsID0gZ2V0Um9vdCh0YWIpLmdldEVsZW1lbnRCeUlkKGlkMik7XG4gIHJldHVybiAoZWwgPT0gbnVsbCA/IHZvaWQgMCA6IGVsLm5vZGVOYW1lKSA9PT0gXCJVLVRBQlBBTkVMXCIgPyBlbCA6IG51bGw7XG59O1xudmFyIGdldFNlbGVjdGVkSW5kZXggPSAodGFicykgPT4gWy4uLnRhYnNdLmZpbmRJbmRleCgodGFiKSA9PiBhdHRyKHRhYiwgQVJJQV9TRUxFQ1RFRCkgPT09IFwidHJ1ZVwiKTtcbnZhciBzZXRTZWxlY3RlZCA9ICh0YWIpID0+IHRhYiAmJiBhdHRyKHRhYiwgXCJhcmlhLWRpc2FibGVkXCIpICE9PSBcInRydWVcIiAmJiBhdHRyKHRhYiwgXCJhcmlhLXNlbGVjdGVkXCIsIFwidHJ1ZVwiKTtcbnZhciBpc0ZvY3VzYWJsZSA9IChlbCkgPT4gZWwgaW5zdGFuY2VvZiBFbGVtZW50ICYmICFlbC5tYXRjaGVzKCc6ZGlzYWJsZWQsW3RhYmluZGV4Xj1cIi1cIl0nKSAmJiBlbC5tYXRjaGVzKFxuICBgW2NvbnRlbnRlZGl0YWJsZV0sW2NvbnRyb2xzXSxbaHJlZl0sW3RhYmluZGV4XSxpbnB1dDpub3QoW3R5cGU9XCJoaWRkZW5cIl0pLHNlbGVjdCx0ZXh0YXJlYSxidXR0b24sc3VtbWFyeSxpZnJhbWVgXG4pO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJzXCIsIFVIVE1MVGFic0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJsaXN0XCIsIFVIVE1MVGFiTGlzdEVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJcIiwgVUhUTUxUYWJFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFicGFuZWxcIiwgVUhUTUxUYWJQYW5lbEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTFRhYkVsZW1lbnQsIFVIVE1MVGFiTGlzdEVsZW1lbnQsIFVIVE1MVGFiTGlzdFNoYWRvd1Jvb3QsIFVIVE1MVGFiTGlzdFN0eWxlLCBVSFRNTFRhYlBhbmVsRWxlbWVudCwgVUhUTUxUYWJQYW5lbFNoYWRvd1Jvb3QsIFVIVE1MVGFiUGFuZWxTdHlsZSwgVUhUTUxUYWJTaGFkb3dSb290LCBVSFRNTFRhYlN0eWxlLCBVSFRNTFRhYnNFbGVtZW50LCBVSFRNTFRhYnNTaGFkb3dSb290LCBVSFRNTFRhYnNTdHlsZSB9O1xuIiwiLyoqXG4gKiBDdXN0b20gcG9zaXRpb25pbmcgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvdmlydHVhbC1lbGVtZW50c1xuICovXG5cbmNvbnN0IHNpZGVzID0gWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXTtcbmNvbnN0IGFsaWdubWVudHMgPSBbJ3N0YXJ0JywgJ2VuZCddO1xuY29uc3QgcGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9zaWRlcy5yZWR1Y2UoKGFjYywgc2lkZSkgPT4gYWNjLmNvbmNhdChzaWRlLCBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnRzWzBdLCBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnRzWzFdKSwgW10pO1xuY29uc3QgbWluID0gTWF0aC5taW47XG5jb25zdCBtYXggPSBNYXRoLm1heDtcbmNvbnN0IHJvdW5kID0gTWF0aC5yb3VuZDtcbmNvbnN0IGZsb29yID0gTWF0aC5mbG9vcjtcbmNvbnN0IGNyZWF0ZUNvb3JkcyA9IHYgPT4gKHtcbiAgeDogdixcbiAgeTogdlxufSk7XG5jb25zdCBvcHBvc2l0ZVNpZGVNYXAgPSB7XG4gIGxlZnQ6ICdyaWdodCcsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIHRvcDogJ2JvdHRvbSdcbn07XG5jb25zdCBvcHBvc2l0ZUFsaWdubWVudE1hcCA9IHtcbiAgc3RhcnQ6ICdlbmQnLFxuICBlbmQ6ICdzdGFydCdcbn07XG5mdW5jdGlvbiBjbGFtcChzdGFydCwgdmFsdWUsIGVuZCkge1xuICByZXR1cm4gbWF4KHN0YXJ0LCBtaW4odmFsdWUsIGVuZCkpO1xufVxuZnVuY3Rpb24gZXZhbHVhdGUodmFsdWUsIHBhcmFtKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyB2YWx1ZShwYXJhbSkgOiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGdldFNpZGUocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBeGlzKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4Jztcbn1cbmZ1bmN0aW9uIGdldEF4aXNMZW5ndGgoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xufVxuY29uc3QgeUF4aXNTaWRlcyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KFsndG9wJywgJ2JvdHRvbSddKTtcbmZ1bmN0aW9uIGdldFNpZGVBeGlzKHBsYWNlbWVudCkge1xuICByZXR1cm4geUF4aXNTaWRlcy5oYXMoZ2V0U2lkZShwbGFjZW1lbnQpKSA/ICd5JyA6ICd4Jztcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KSB7XG4gIHJldHVybiBnZXRPcHBvc2l0ZUF4aXMoZ2V0U2lkZUF4aXMocGxhY2VtZW50KSk7XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnRTaWRlcyhwbGFjZW1lbnQsIHJlY3RzLCBydGwpIHtcbiAgaWYgKHJ0bCA9PT0gdm9pZCAwKSB7XG4gICAgcnRsID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWdubWVudEF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gIGNvbnN0IGxlbmd0aCA9IGdldEF4aXNMZW5ndGgoYWxpZ25tZW50QXhpcyk7XG4gIGxldCBtYWluQWxpZ25tZW50U2lkZSA9IGFsaWdubWVudEF4aXMgPT09ICd4JyA/IGFsaWdubWVudCA9PT0gKHJ0bCA/ICdlbmQnIDogJ3N0YXJ0JykgPyAncmlnaHQnIDogJ2xlZnQnIDogYWxpZ25tZW50ID09PSAnc3RhcnQnID8gJ2JvdHRvbScgOiAndG9wJztcbiAgaWYgKHJlY3RzLnJlZmVyZW5jZVtsZW5ndGhdID4gcmVjdHMuZmxvYXRpbmdbbGVuZ3RoXSkge1xuICAgIG1haW5BbGlnbm1lbnRTaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpbkFsaWdubWVudFNpZGUpO1xuICB9XG4gIHJldHVybiBbbWFpbkFsaWdubWVudFNpZGUsIGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5BbGlnbm1lbnRTaWRlKV07XG59XG5mdW5jdGlvbiBnZXRFeHBhbmRlZFBsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGNvbnN0IG9wcG9zaXRlUGxhY2VtZW50ID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgcmV0dXJuIFtnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpLCBvcHBvc2l0ZVBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQob3Bwb3NpdGVQbGFjZW1lbnQpXTtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBhbGlnbm1lbnQgPT4gb3Bwb3NpdGVBbGlnbm1lbnRNYXBbYWxpZ25tZW50XSk7XG59XG5jb25zdCBsclBsYWNlbWVudCA9IFsnbGVmdCcsICdyaWdodCddO1xuY29uc3QgcmxQbGFjZW1lbnQgPSBbJ3JpZ2h0JywgJ2xlZnQnXTtcbmNvbnN0IHRiUGxhY2VtZW50ID0gWyd0b3AnLCAnYm90dG9tJ107XG5jb25zdCBidFBsYWNlbWVudCA9IFsnYm90dG9tJywgJ3RvcCddO1xuZnVuY3Rpb24gZ2V0U2lkZUxpc3Qoc2lkZSwgaXNTdGFydCwgcnRsKSB7XG4gIHN3aXRjaCAoc2lkZSkge1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIGlmIChydGwpIHJldHVybiBpc1N0YXJ0ID8gcmxQbGFjZW1lbnQgOiBsclBsYWNlbWVudDtcbiAgICAgIHJldHVybiBpc1N0YXJ0ID8gbHJQbGFjZW1lbnQgOiBybFBsYWNlbWVudDtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICByZXR1cm4gaXNTdGFydCA/IHRiUGxhY2VtZW50IDogYnRQbGFjZW1lbnQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBbXTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cyhwbGFjZW1lbnQsIGZsaXBBbGlnbm1lbnQsIGRpcmVjdGlvbiwgcnRsKSB7XG4gIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICBsZXQgbGlzdCA9IGdldFNpZGVMaXN0KGdldFNpZGUocGxhY2VtZW50KSwgZGlyZWN0aW9uID09PSAnc3RhcnQnLCBydGwpO1xuICBpZiAoYWxpZ25tZW50KSB7XG4gICAgbGlzdCA9IGxpc3QubWFwKHNpZGUgPT4gc2lkZSArIFwiLVwiICsgYWxpZ25tZW50KTtcbiAgICBpZiAoZmxpcEFsaWdubWVudCkge1xuICAgICAgbGlzdCA9IGxpc3QuY29uY2F0KGxpc3QubWFwKGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBsaXN0O1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIHNpZGUgPT4gb3Bwb3NpdGVTaWRlTWFwW3NpZGVdKTtcbn1cbmZ1bmN0aW9uIGV4cGFuZFBhZGRpbmdPYmplY3QocGFkZGluZykge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMCxcbiAgICAuLi5wYWRkaW5nXG4gIH07XG59XG5mdW5jdGlvbiBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IGV4cGFuZFBhZGRpbmdPYmplY3QocGFkZGluZykgOiB7XG4gICAgdG9wOiBwYWRkaW5nLFxuICAgIHJpZ2h0OiBwYWRkaW5nLFxuICAgIGJvdHRvbTogcGFkZGluZyxcbiAgICBsZWZ0OiBwYWRkaW5nXG4gIH07XG59XG5mdW5jdGlvbiByZWN0VG9DbGllbnRSZWN0KHJlY3QpIHtcbiAgY29uc3Qge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IHJlY3Q7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHRvcDogeSxcbiAgICBsZWZ0OiB4LFxuICAgIHJpZ2h0OiB4ICsgd2lkdGgsXG4gICAgYm90dG9tOiB5ICsgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5leHBvcnQgeyBhbGlnbm1lbnRzLCBjbGFtcCwgY3JlYXRlQ29vcmRzLCBldmFsdWF0ZSwgZXhwYW5kUGFkZGluZ09iamVjdCwgZmxvb3IsIGdldEFsaWdubWVudCwgZ2V0QWxpZ25tZW50QXhpcywgZ2V0QWxpZ25tZW50U2lkZXMsIGdldEF4aXNMZW5ndGgsIGdldEV4cGFuZGVkUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQsIGdldE9wcG9zaXRlQXhpcywgZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQsIGdldFBhZGRpbmdPYmplY3QsIGdldFNpZGUsIGdldFNpZGVBeGlzLCBtYXgsIG1pbiwgcGxhY2VtZW50cywgcmVjdFRvQ2xpZW50UmVjdCwgcm91bmQsIHNpZGVzIH07XG4iLCJpbXBvcnQgeyBnZXRTaWRlQXhpcywgZ2V0QWxpZ25tZW50QXhpcywgZ2V0QXhpc0xlbmd0aCwgZ2V0U2lkZSwgZ2V0QWxpZ25tZW50LCBldmFsdWF0ZSwgZ2V0UGFkZGluZ09iamVjdCwgcmVjdFRvQ2xpZW50UmVjdCwgbWluLCBjbGFtcCwgcGxhY2VtZW50cywgZ2V0QWxpZ25tZW50U2lkZXMsIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50LCBnZXRPcHBvc2l0ZVBsYWNlbWVudCwgZ2V0RXhwYW5kZWRQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzLCBzaWRlcywgbWF4LCBnZXRPcHBvc2l0ZUF4aXMgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMnO1xuZXhwb3J0IHsgcmVjdFRvQ2xpZW50UmVjdCB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5cbmZ1bmN0aW9uIGNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50KF9yZWYsIHBsYWNlbWVudCwgcnRsKSB7XG4gIGxldCB7XG4gICAgcmVmZXJlbmNlLFxuICAgIGZsb2F0aW5nXG4gIH0gPSBfcmVmO1xuICBjb25zdCBzaWRlQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWdubWVudEF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWduTGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChhbGlnbm1lbnRBeGlzKTtcbiAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgY29uc3QgaXNWZXJ0aWNhbCA9IHNpZGVBeGlzID09PSAneSc7XG4gIGNvbnN0IGNvbW1vblggPSByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCAvIDIgLSBmbG9hdGluZy53aWR0aCAvIDI7XG4gIGNvbnN0IGNvbW1vblkgPSByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHQgLyAyIC0gZmxvYXRpbmcuaGVpZ2h0IC8gMjtcbiAgY29uc3QgY29tbW9uQWxpZ24gPSByZWZlcmVuY2VbYWxpZ25MZW5ndGhdIC8gMiAtIGZsb2F0aW5nW2FsaWduTGVuZ3RoXSAvIDI7XG4gIGxldCBjb29yZHM7XG4gIHN3aXRjaCAoc2lkZSkge1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55IC0gZmxvYXRpbmcuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCAtIGZsb2F0aW5nLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55XG4gICAgICB9O1xuICB9XG4gIHN3aXRjaCAoZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkpIHtcbiAgICBjYXNlICdzdGFydCc6XG4gICAgICBjb29yZHNbYWxpZ25tZW50QXhpc10gLT0gY29tbW9uQWxpZ24gKiAocnRsICYmIGlzVmVydGljYWwgPyAtMSA6IDEpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZW5kJzpcbiAgICAgIGNvb3Jkc1thbGlnbm1lbnRBeGlzXSArPSBjb21tb25BbGlnbiAqIChydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gY29vcmRzO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyB0aGF0IHdpbGwgcGxhY2UgdGhlIGZsb2F0aW5nIGVsZW1lbnRcbiAqIG5leHQgdG8gYSBnaXZlbiByZWZlcmVuY2UgZWxlbWVudC5cbiAqXG4gKiBUaGlzIGV4cG9ydCBkb2VzIG5vdCBoYXZlIGFueSBgcGxhdGZvcm1gIGludGVyZmFjZSBsb2dpYy4gWW91IHdpbGwgbmVlZCB0b1xuICogd3JpdGUgb25lIGZvciB0aGUgcGxhdGZvcm0geW91IGFyZSB1c2luZyBGbG9hdGluZyBVSSB3aXRoLlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSBhc3luYyAocmVmZXJlbmNlLCBmbG9hdGluZywgY29uZmlnKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBwbGFjZW1lbnQgPSAnYm90dG9tJyxcbiAgICBzdHJhdGVneSA9ICdhYnNvbHV0ZScsXG4gICAgbWlkZGxld2FyZSA9IFtdLFxuICAgIHBsYXRmb3JtXG4gIH0gPSBjb25maWc7XG4gIGNvbnN0IHZhbGlkTWlkZGxld2FyZSA9IG1pZGRsZXdhcmUuZmlsdGVyKEJvb2xlYW4pO1xuICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGZsb2F0aW5nKSk7XG4gIGxldCByZWN0cyA9IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgcmVmZXJlbmNlLFxuICAgIGZsb2F0aW5nLFxuICAgIHN0cmF0ZWd5XG4gIH0pO1xuICBsZXQge1xuICAgIHgsXG4gICAgeVxuICB9ID0gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQocmVjdHMsIHBsYWNlbWVudCwgcnRsKTtcbiAgbGV0IHN0YXRlZnVsUGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICBsZXQgbWlkZGxld2FyZURhdGEgPSB7fTtcbiAgbGV0IHJlc2V0Q291bnQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbGlkTWlkZGxld2FyZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHtcbiAgICAgIG5hbWUsXG4gICAgICBmblxuICAgIH0gPSB2YWxpZE1pZGRsZXdhcmVbaV07XG4gICAgY29uc3Qge1xuICAgICAgeDogbmV4dFgsXG4gICAgICB5OiBuZXh0WSxcbiAgICAgIGRhdGEsXG4gICAgICByZXNldFxuICAgIH0gPSBhd2FpdCBmbih7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIGluaXRpYWxQbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIHBsYWNlbWVudDogc3RhdGVmdWxQbGFjZW1lbnQsXG4gICAgICBzdHJhdGVneSxcbiAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgcmVjdHMsXG4gICAgICBwbGF0Zm9ybSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgZmxvYXRpbmdcbiAgICAgIH1cbiAgICB9KTtcbiAgICB4ID0gbmV4dFggIT0gbnVsbCA/IG5leHRYIDogeDtcbiAgICB5ID0gbmV4dFkgIT0gbnVsbCA/IG5leHRZIDogeTtcbiAgICBtaWRkbGV3YXJlRGF0YSA9IHtcbiAgICAgIC4uLm1pZGRsZXdhcmVEYXRhLFxuICAgICAgW25hbWVdOiB7XG4gICAgICAgIC4uLm1pZGRsZXdhcmVEYXRhW25hbWVdLFxuICAgICAgICAuLi5kYXRhXG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAocmVzZXQgJiYgcmVzZXRDb3VudCA8PSA1MCkge1xuICAgICAgcmVzZXRDb3VudCsrO1xuICAgICAgaWYgKHR5cGVvZiByZXNldCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHJlc2V0LnBsYWNlbWVudCkge1xuICAgICAgICAgIHN0YXRlZnVsUGxhY2VtZW50ID0gcmVzZXQucGxhY2VtZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNldC5yZWN0cykge1xuICAgICAgICAgIHJlY3RzID0gcmVzZXQucmVjdHMgPT09IHRydWUgPyBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgICAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICAgICAgZmxvYXRpbmcsXG4gICAgICAgICAgICBzdHJhdGVneVxuICAgICAgICAgIH0pIDogcmVzZXQucmVjdHM7XG4gICAgICAgIH1cbiAgICAgICAgKHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHlcbiAgICAgICAgfSA9IGNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50KHJlY3RzLCBzdGF0ZWZ1bFBsYWNlbWVudCwgcnRsKSk7XG4gICAgICB9XG4gICAgICBpID0gLTE7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5LFxuICAgIHBsYWNlbWVudDogc3RhdGVmdWxQbGFjZW1lbnQsXG4gICAgc3RyYXRlZ3ksXG4gICAgbWlkZGxld2FyZURhdGFcbiAgfTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5hc3luYyBmdW5jdGlvbiBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX2F3YWl0JHBsYXRmb3JtJGlzRWxlO1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICB4LFxuICAgIHksXG4gICAgcGxhdGZvcm0sXG4gICAgcmVjdHMsXG4gICAgZWxlbWVudHMsXG4gICAgc3RyYXRlZ3lcbiAgfSA9IHN0YXRlO1xuICBjb25zdCB7XG4gICAgYm91bmRhcnkgPSAnY2xpcHBpbmdBbmNlc3RvcnMnLFxuICAgIHJvb3RCb3VuZGFyeSA9ICd2aWV3cG9ydCcsXG4gICAgZWxlbWVudENvbnRleHQgPSAnZmxvYXRpbmcnLFxuICAgIGFsdEJvdW5kYXJ5ID0gZmFsc2UsXG4gICAgcGFkZGluZyA9IDBcbiAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gIGNvbnN0IGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gJ2Zsb2F0aW5nJyA/ICdyZWZlcmVuY2UnIDogJ2Zsb2F0aW5nJztcbiAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2FsdEJvdW5kYXJ5ID8gYWx0Q29udGV4dCA6IGVsZW1lbnRDb250ZXh0XTtcbiAgY29uc3QgY2xpcHBpbmdDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChhd2FpdCBwbGF0Zm9ybS5nZXRDbGlwcGluZ1JlY3Qoe1xuICAgIGVsZW1lbnQ6ICgoX2F3YWl0JHBsYXRmb3JtJGlzRWxlID0gYXdhaXQgKHBsYXRmb3JtLmlzRWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNFbGVtZW50KGVsZW1lbnQpKSkgIT0gbnVsbCA/IF9hd2FpdCRwbGF0Zm9ybSRpc0VsZSA6IHRydWUpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgKGF3YWl0IChwbGF0Zm9ybS5nZXREb2N1bWVudEVsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldERvY3VtZW50RWxlbWVudChlbGVtZW50cy5mbG9hdGluZykpKSxcbiAgICBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnksXG4gICAgc3RyYXRlZ3lcbiAgfSkpO1xuICBjb25zdCByZWN0ID0gZWxlbWVudENvbnRleHQgPT09ICdmbG9hdGluZycgPyB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoOiByZWN0cy5mbG9hdGluZy53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3RzLmZsb2F0aW5nLmhlaWdodFxuICB9IDogcmVjdHMucmVmZXJlbmNlO1xuICBjb25zdCBvZmZzZXRQYXJlbnQgPSBhd2FpdCAocGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQoZWxlbWVudHMuZmxvYXRpbmcpKTtcbiAgY29uc3Qgb2Zmc2V0U2NhbGUgPSAoYXdhaXQgKHBsYXRmb3JtLmlzRWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNFbGVtZW50KG9mZnNldFBhcmVudCkpKSA/IChhd2FpdCAocGxhdGZvcm0uZ2V0U2NhbGUgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldFNjYWxlKG9mZnNldFBhcmVudCkpKSB8fCB7XG4gICAgeDogMSxcbiAgICB5OiAxXG4gIH0gOiB7XG4gICAgeDogMSxcbiAgICB5OiAxXG4gIH07XG4gIGNvbnN0IGVsZW1lbnRDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChwbGF0Zm9ybS5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCA/IGF3YWl0IHBsYXRmb3JtLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0KHtcbiAgICBlbGVtZW50cyxcbiAgICByZWN0LFxuICAgIG9mZnNldFBhcmVudCxcbiAgICBzdHJhdGVneVxuICB9KSA6IHJlY3QpO1xuICByZXR1cm4ge1xuICAgIHRvcDogKGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCkgLyBvZmZzZXRTY2FsZS55LFxuICAgIGJvdHRvbTogKGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSkgLyBvZmZzZXRTY2FsZS55LFxuICAgIGxlZnQ6IChjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQpIC8gb2Zmc2V0U2NhbGUueCxcbiAgICByaWdodDogKGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodCkgLyBvZmZzZXRTY2FsZS54XG4gIH07XG59XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gb3B0aW9ucyA9PiAoe1xuICBuYW1lOiAnYXJyb3cnLFxuICBvcHRpb25zLFxuICBhc3luYyBmbihzdGF0ZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgcGxhY2VtZW50LFxuICAgICAgcmVjdHMsXG4gICAgICBwbGF0Zm9ybSxcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgbWlkZGxld2FyZURhdGFcbiAgICB9ID0gc3RhdGU7XG4gICAgLy8gU2luY2UgYGVsZW1lbnRgIGlzIHJlcXVpcmVkLCB3ZSBkb24ndCBQYXJ0aWFsPD4gdGhlIHR5cGUuXG4gICAgY29uc3Qge1xuICAgICAgZWxlbWVudCxcbiAgICAgIHBhZGRpbmcgPSAwXG4gICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKSB8fCB7fTtcbiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHBhZGRpbmdPYmplY3QgPSBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpO1xuICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgIHgsXG4gICAgICB5XG4gICAgfTtcbiAgICBjb25zdCBheGlzID0gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpO1xuICAgIGNvbnN0IGxlbmd0aCA9IGdldEF4aXNMZW5ndGgoYXhpcyk7XG4gICAgY29uc3QgYXJyb3dEaW1lbnNpb25zID0gYXdhaXQgcGxhdGZvcm0uZ2V0RGltZW5zaW9ucyhlbGVtZW50KTtcbiAgICBjb25zdCBpc1lBeGlzID0gYXhpcyA9PT0gJ3knO1xuICAgIGNvbnN0IG1pblByb3AgPSBpc1lBeGlzID8gJ3RvcCcgOiAnbGVmdCc7XG4gICAgY29uc3QgbWF4UHJvcCA9IGlzWUF4aXMgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgY29uc3QgY2xpZW50UHJvcCA9IGlzWUF4aXMgPyAnY2xpZW50SGVpZ2h0JyA6ICdjbGllbnRXaWR0aCc7XG4gICAgY29uc3QgZW5kRGlmZiA9IHJlY3RzLnJlZmVyZW5jZVtsZW5ndGhdICsgcmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gY29vcmRzW2F4aXNdIC0gcmVjdHMuZmxvYXRpbmdbbGVuZ3RoXTtcbiAgICBjb25zdCBzdGFydERpZmYgPSBjb29yZHNbYXhpc10gLSByZWN0cy5yZWZlcmVuY2VbYXhpc107XG4gICAgY29uc3QgYXJyb3dPZmZzZXRQYXJlbnQgPSBhd2FpdCAocGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkpO1xuICAgIGxldCBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBhcnJvd09mZnNldFBhcmVudFtjbGllbnRQcm9wXSA6IDA7XG5cbiAgICAvLyBET00gcGxhdGZvcm0gY2FuIHJldHVybiBgd2luZG93YCBhcyB0aGUgYG9mZnNldFBhcmVudGAuXG4gICAgaWYgKCFjbGllbnRTaXplIHx8ICEoYXdhaXQgKHBsYXRmb3JtLmlzRWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNFbGVtZW50KGFycm93T2Zmc2V0UGFyZW50KSkpKSB7XG4gICAgICBjbGllbnRTaXplID0gZWxlbWVudHMuZmxvYXRpbmdbY2xpZW50UHJvcF0gfHwgcmVjdHMuZmxvYXRpbmdbbGVuZ3RoXTtcbiAgICB9XG4gICAgY29uc3QgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7XG5cbiAgICAvLyBJZiB0aGUgcGFkZGluZyBpcyBsYXJnZSBlbm91Z2ggdGhhdCBpdCBjYXVzZXMgdGhlIGFycm93IHRvIG5vIGxvbmdlciBiZVxuICAgIC8vIGNlbnRlcmVkLCBtb2RpZnkgdGhlIHBhZGRpbmcgc28gdGhhdCBpdCBpcyBjZW50ZXJlZC5cbiAgICBjb25zdCBsYXJnZXN0UG9zc2libGVQYWRkaW5nID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgLSAxO1xuICAgIGNvbnN0IG1pblBhZGRpbmcgPSBtaW4ocGFkZGluZ09iamVjdFttaW5Qcm9wXSwgbGFyZ2VzdFBvc3NpYmxlUGFkZGluZyk7XG4gICAgY29uc3QgbWF4UGFkZGluZyA9IG1pbihwYWRkaW5nT2JqZWN0W21heFByb3BdLCBsYXJnZXN0UG9zc2libGVQYWRkaW5nKTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgZmxvYXRpbmcgZWxlbWVudCBpZiB0aGUgY2VudGVyXG4gICAgLy8gcG9pbnQgaXMgb3V0c2lkZSB0aGUgZmxvYXRpbmcgZWxlbWVudCdzIGJvdW5kcy5cbiAgICBjb25zdCBtaW4kMSA9IG1pblBhZGRpbmc7XG4gICAgY29uc3QgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC0gbWF4UGFkZGluZztcbiAgICBjb25zdCBjZW50ZXIgPSBjbGllbnRTaXplIC8gMiAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiArIGNlbnRlclRvUmVmZXJlbmNlO1xuICAgIGNvbnN0IG9mZnNldCA9IGNsYW1wKG1pbiQxLCBjZW50ZXIsIG1heCk7XG5cbiAgICAvLyBJZiB0aGUgcmVmZXJlbmNlIGlzIHNtYWxsIGVub3VnaCB0aGF0IHRoZSBhcnJvdydzIHBhZGRpbmcgY2F1c2VzIGl0IHRvXG4gICAgLy8gdG8gcG9pbnQgdG8gbm90aGluZyBmb3IgYW4gYWxpZ25lZCBwbGFjZW1lbnQsIGFkanVzdCB0aGUgb2Zmc2V0IG9mIHRoZVxuICAgIC8vIGZsb2F0aW5nIGVsZW1lbnQgaXRzZWxmLiBUbyBlbnN1cmUgYHNoaWZ0KClgIGNvbnRpbnVlcyB0byB0YWtlIGFjdGlvbixcbiAgICAvLyBhIHNpbmdsZSByZXNldCBpcyBwZXJmb3JtZWQgd2hlbiB0aGlzIGlzIHRydWUuXG4gICAgY29uc3Qgc2hvdWxkQWRkT2Zmc2V0ID0gIW1pZGRsZXdhcmVEYXRhLmFycm93ICYmIGdldEFsaWdubWVudChwbGFjZW1lbnQpICE9IG51bGwgJiYgY2VudGVyICE9PSBvZmZzZXQgJiYgcmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gLyAyIC0gKGNlbnRlciA8IG1pbiQxID8gbWluUGFkZGluZyA6IG1heFBhZGRpbmcpIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyIDwgMDtcbiAgICBjb25zdCBhbGlnbm1lbnRPZmZzZXQgPSBzaG91bGRBZGRPZmZzZXQgPyBjZW50ZXIgPCBtaW4kMSA/IGNlbnRlciAtIG1pbiQxIDogY2VudGVyIC0gbWF4IDogMDtcbiAgICByZXR1cm4ge1xuICAgICAgW2F4aXNdOiBjb29yZHNbYXhpc10gKyBhbGlnbm1lbnRPZmZzZXQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIFtheGlzXTogb2Zmc2V0LFxuICAgICAgICBjZW50ZXJPZmZzZXQ6IGNlbnRlciAtIG9mZnNldCAtIGFsaWdubWVudE9mZnNldCxcbiAgICAgICAgLi4uKHNob3VsZEFkZE9mZnNldCAmJiB7XG4gICAgICAgICAgYWxpZ25tZW50T2Zmc2V0XG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgcmVzZXQ6IHNob3VsZEFkZE9mZnNldFxuICAgIH07XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBnZXRQbGFjZW1lbnRMaXN0KGFsaWdubWVudCwgYXV0b0FsaWdubWVudCwgYWxsb3dlZFBsYWNlbWVudHMpIHtcbiAgY29uc3QgYWxsb3dlZFBsYWNlbWVudHNTb3J0ZWRCeUFsaWdubWVudCA9IGFsaWdubWVudCA/IFsuLi5hbGxvd2VkUGxhY2VtZW50cy5maWx0ZXIocGxhY2VtZW50ID0+IGdldEFsaWdubWVudChwbGFjZW1lbnQpID09PSBhbGlnbm1lbnQpLCAuLi5hbGxvd2VkUGxhY2VtZW50cy5maWx0ZXIocGxhY2VtZW50ID0+IGdldEFsaWdubWVudChwbGFjZW1lbnQpICE9PSBhbGlnbm1lbnQpXSA6IGFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0U2lkZShwbGFjZW1lbnQpID09PSBwbGFjZW1lbnQpO1xuICByZXR1cm4gYWxsb3dlZFBsYWNlbWVudHNTb3J0ZWRCeUFsaWdubWVudC5maWx0ZXIocGxhY2VtZW50ID0+IHtcbiAgICBpZiAoYWxpZ25tZW50KSB7XG4gICAgICByZXR1cm4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgPT09IGFsaWdubWVudCB8fCAoYXV0b0FsaWdubWVudCA/IGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCkgIT09IHBsYWNlbWVudCA6IGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xufVxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgY2hvb3NpbmcgdGhlIHBsYWNlbWVudFxuICogdGhhdCBoYXMgdGhlIG1vc3Qgc3BhY2UgYXZhaWxhYmxlIGF1dG9tYXRpY2FsbHksIHdpdGhvdXQgbmVlZGluZyB0byBzcGVjaWZ5IGFcbiAqIHByZWZlcnJlZCBwbGFjZW1lbnQuIEFsdGVybmF0aXZlIHRvIGBmbGlwYC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hdXRvUGxhY2VtZW50XG4gKi9cbmNvbnN0IGF1dG9QbGFjZW1lbnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2F1dG9QbGFjZW1lbnQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkYXV0b1AsIF9taWRkbGV3YXJlRGF0YSRhdXRvUDIsIF9wbGFjZW1lbnRzVGhhdEZpdE9uRTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBjcm9zc0F4aXMgPSBmYWxzZSxcbiAgICAgICAgYWxpZ25tZW50LFxuICAgICAgICBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHMsXG4gICAgICAgIGF1dG9BbGlnbm1lbnQgPSB0cnVlLFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBwbGFjZW1lbnRzJDEgPSBhbGlnbm1lbnQgIT09IHVuZGVmaW5lZCB8fCBhbGxvd2VkUGxhY2VtZW50cyA9PT0gcGxhY2VtZW50cyA/IGdldFBsYWNlbWVudExpc3QoYWxpZ25tZW50IHx8IG51bGwsIGF1dG9BbGlnbm1lbnQsIGFsbG93ZWRQbGFjZW1lbnRzKSA6IGFsbG93ZWRQbGFjZW1lbnRzO1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9ICgoX21pZGRsZXdhcmVEYXRhJGF1dG9QID0gbWlkZGxld2FyZURhdGEuYXV0b1BsYWNlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRhdXRvUC5pbmRleCkgfHwgMDtcbiAgICAgIGNvbnN0IGN1cnJlbnRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzJDFbY3VycmVudEluZGV4XTtcbiAgICAgIGlmIChjdXJyZW50UGxhY2VtZW50ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgY29uc3QgYWxpZ25tZW50U2lkZXMgPSBnZXRBbGlnbm1lbnRTaWRlcyhjdXJyZW50UGxhY2VtZW50LCByZWN0cywgYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpKTtcblxuICAgICAgLy8gTWFrZSBgY29tcHV0ZUNvb3Jkc2Agc3RhcnQgZnJvbSB0aGUgcmlnaHQgcGxhY2UuXG4gICAgICBpZiAocGxhY2VtZW50ICE9PSBjdXJyZW50UGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50cyQxWzBdXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudE92ZXJmbG93cyA9IFtvdmVyZmxvd1tnZXRTaWRlKGN1cnJlbnRQbGFjZW1lbnQpXSwgb3ZlcmZsb3dbYWxpZ25tZW50U2lkZXNbMF1dLCBvdmVyZmxvd1thbGlnbm1lbnRTaWRlc1sxXV1dO1xuICAgICAgY29uc3QgYWxsT3ZlcmZsb3dzID0gWy4uLigoKF9taWRkbGV3YXJlRGF0YSRhdXRvUDIgPSBtaWRkbGV3YXJlRGF0YS5hdXRvUGxhY2VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGF1dG9QMi5vdmVyZmxvd3MpIHx8IFtdKSwge1xuICAgICAgICBwbGFjZW1lbnQ6IGN1cnJlbnRQbGFjZW1lbnQsXG4gICAgICAgIG92ZXJmbG93czogY3VycmVudE92ZXJmbG93c1xuICAgICAgfV07XG4gICAgICBjb25zdCBuZXh0UGxhY2VtZW50ID0gcGxhY2VtZW50cyQxW2N1cnJlbnRJbmRleCArIDFdO1xuXG4gICAgICAvLyBUaGVyZSBhcmUgbW9yZSBwbGFjZW1lbnRzIHRvIGNoZWNrLlxuICAgICAgaWYgKG5leHRQbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBpbmRleDogY3VycmVudEluZGV4ICsgMSxcbiAgICAgICAgICAgIG92ZXJmbG93czogYWxsT3ZlcmZsb3dzXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBuZXh0UGxhY2VtZW50XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgcGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlID0gYWxsT3ZlcmZsb3dzLm1hcChkID0+IHtcbiAgICAgICAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KGQucGxhY2VtZW50KTtcbiAgICAgICAgcmV0dXJuIFtkLnBsYWNlbWVudCwgYWxpZ25tZW50ICYmIGNyb3NzQXhpcyA/XG4gICAgICAgIC8vIENoZWNrIGFsb25nIHRoZSBtYWluQXhpcyBhbmQgbWFpbiBjcm9zc0F4aXMgc2lkZS5cbiAgICAgICAgZC5vdmVyZmxvd3Muc2xpY2UoMCwgMikucmVkdWNlKChhY2MsIHYpID0+IGFjYyArIHYsIDApIDpcbiAgICAgICAgLy8gQ2hlY2sgb25seSB0aGUgbWFpbkF4aXMuXG4gICAgICAgIGQub3ZlcmZsb3dzWzBdLCBkLm92ZXJmbG93c107XG4gICAgICB9KS5zb3J0KChhLCBiKSA9PiBhWzFdIC0gYlsxXSk7XG4gICAgICBjb25zdCBwbGFjZW1lbnRzVGhhdEZpdE9uRWFjaFNpZGUgPSBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UuZmlsdGVyKGQgPT4gZFsyXS5zbGljZSgwLFxuICAgICAgLy8gQWxpZ25lZCBwbGFjZW1lbnRzIHNob3VsZCBub3QgY2hlY2sgdGhlaXIgb3Bwb3NpdGUgY3Jvc3NBeGlzXG4gICAgICAvLyBzaWRlLlxuICAgICAgZ2V0QWxpZ25tZW50KGRbMF0pID8gMiA6IDMpLmV2ZXJ5KHYgPT4gdiA8PSAwKSk7XG4gICAgICBjb25zdCByZXNldFBsYWNlbWVudCA9ICgoX3BsYWNlbWVudHNUaGF0Rml0T25FID0gcGxhY2VtZW50c1RoYXRGaXRPbkVhY2hTaWRlWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX3BsYWNlbWVudHNUaGF0Rml0T25FWzBdKSB8fCBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2VbMF1bMF07XG4gICAgICBpZiAocmVzZXRQbGFjZW1lbnQgIT09IHBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGluZGV4OiBjdXJyZW50SW5kZXggKyAxLFxuICAgICAgICAgICAgb3ZlcmZsb3dzOiBhbGxPdmVyZmxvd3NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IHJlc2V0UGxhY2VtZW50XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGZsaXBwaW5nIHRoZSBgcGxhY2VtZW50YFxuICogaW4gb3JkZXIgdG8ga2VlcCBpdCBpbiB2aWV3IHdoZW4gdGhlIHByZWZlcnJlZCBwbGFjZW1lbnQocykgd2lsbCBvdmVyZmxvdyB0aGVcbiAqIGNsaXBwaW5nIGJvdW5kYXJ5LiBBbHRlcm5hdGl2ZSB0byBgYXV0b1BsYWNlbWVudGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZmxpcFxuICovXG5jb25zdCBmbGlwID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdmbGlwJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJGFycm93LCBfbWlkZGxld2FyZURhdGEkZmxpcDtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBtaWRkbGV3YXJlRGF0YSxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIGluaXRpYWxQbGFjZW1lbnQsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSB0cnVlLFxuICAgICAgICBmYWxsYmFja1BsYWNlbWVudHM6IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyxcbiAgICAgICAgZmFsbGJhY2tTdHJhdGVneSA9ICdiZXN0Rml0JyxcbiAgICAgICAgZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiA9ICdub25lJyxcbiAgICAgICAgZmxpcEFsaWdubWVudCA9IHRydWUsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcblxuICAgICAgLy8gSWYgYSByZXNldCBieSB0aGUgYXJyb3cgd2FzIGNhdXNlZCBkdWUgdG8gYW4gYWxpZ25tZW50IG9mZnNldCBiZWluZ1xuICAgICAgLy8gYWRkZWQsIHdlIHNob3VsZCBza2lwIGFueSBsb2dpYyBub3cgc2luY2UgYGZsaXAoKWAgaGFzIGFscmVhZHkgZG9uZSBpdHNcbiAgICAgIC8vIHdvcmsuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzI1NDkjaXNzdWVjb21tZW50LTE3MTk2MDE2NDNcbiAgICAgIGlmICgoX21pZGRsZXdhcmVEYXRhJGFycm93ID0gbWlkZGxld2FyZURhdGEuYXJyb3cpICE9IG51bGwgJiYgX21pZGRsZXdhcmVEYXRhJGFycm93LmFsaWdubWVudE9mZnNldCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaW5pdGlhbFNpZGVBeGlzID0gZ2V0U2lkZUF4aXMoaW5pdGlhbFBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpc0Jhc2VQbGFjZW1lbnQgPSBnZXRTaWRlKGluaXRpYWxQbGFjZW1lbnQpID09PSBpbml0aWFsUGxhY2VtZW50O1xuICAgICAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpO1xuICAgICAgY29uc3QgZmFsbGJhY2tQbGFjZW1lbnRzID0gc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIHx8IChpc0Jhc2VQbGFjZW1lbnQgfHwgIWZsaXBBbGlnbm1lbnQgPyBbZ2V0T3Bwb3NpdGVQbGFjZW1lbnQoaW5pdGlhbFBsYWNlbWVudCldIDogZ2V0RXhwYW5kZWRQbGFjZW1lbnRzKGluaXRpYWxQbGFjZW1lbnQpKTtcbiAgICAgIGNvbnN0IGhhc0ZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gPSBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uICE9PSAnbm9uZSc7XG4gICAgICBpZiAoIXNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyAmJiBoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uKSB7XG4gICAgICAgIGZhbGxiYWNrUGxhY2VtZW50cy5wdXNoKC4uLmdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMoaW5pdGlhbFBsYWNlbWVudCwgZmxpcEFsaWdubWVudCwgZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiwgcnRsKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBwbGFjZW1lbnRzID0gW2luaXRpYWxQbGFjZW1lbnQsIC4uLmZhbGxiYWNrUGxhY2VtZW50c107XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3dzID0gW107XG4gICAgICBsZXQgb3ZlcmZsb3dzRGF0YSA9ICgoX21pZGRsZXdhcmVEYXRhJGZsaXAgPSBtaWRkbGV3YXJlRGF0YS5mbGlwKSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGZsaXAub3ZlcmZsb3dzKSB8fCBbXTtcbiAgICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICAgIG92ZXJmbG93cy5wdXNoKG92ZXJmbG93W3NpZGVdKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGVja0Nyb3NzQXhpcykge1xuICAgICAgICBjb25zdCBzaWRlcyA9IGdldEFsaWdubWVudFNpZGVzKHBsYWNlbWVudCwgcmVjdHMsIHJ0bCk7XG4gICAgICAgIG92ZXJmbG93cy5wdXNoKG92ZXJmbG93W3NpZGVzWzBdXSwgb3ZlcmZsb3dbc2lkZXNbMV1dKTtcbiAgICAgIH1cbiAgICAgIG92ZXJmbG93c0RhdGEgPSBbLi4ub3ZlcmZsb3dzRGF0YSwge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG92ZXJmbG93c1xuICAgICAgfV07XG5cbiAgICAgIC8vIE9uZSBvciBtb3JlIHNpZGVzIGlzIG92ZXJmbG93aW5nLlxuICAgICAgaWYgKCFvdmVyZmxvd3MuZXZlcnkoc2lkZSA9PiBzaWRlIDw9IDApKSB7XG4gICAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkZmxpcDIsIF9vdmVyZmxvd3NEYXRhJGZpbHRlcjtcbiAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gKCgoX21pZGRsZXdhcmVEYXRhJGZsaXAyID0gbWlkZGxld2FyZURhdGEuZmxpcCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRmbGlwMi5pbmRleCkgfHwgMCkgKyAxO1xuICAgICAgICBjb25zdCBuZXh0UGxhY2VtZW50ID0gcGxhY2VtZW50c1tuZXh0SW5kZXhdO1xuICAgICAgICBpZiAobmV4dFBsYWNlbWVudCkge1xuICAgICAgICAgIGNvbnN0IGlnbm9yZUNyb3NzQXhpc092ZXJmbG93ID0gY2hlY2tDcm9zc0F4aXMgPT09ICdhbGlnbm1lbnQnID8gaW5pdGlhbFNpZGVBeGlzICE9PSBnZXRTaWRlQXhpcyhuZXh0UGxhY2VtZW50KSA6IGZhbHNlO1xuICAgICAgICAgIGlmICghaWdub3JlQ3Jvc3NBeGlzT3ZlcmZsb3cgfHxcbiAgICAgICAgICAvLyBXZSBsZWF2ZSB0aGUgY3VycmVudCBtYWluIGF4aXMgb25seSBpZiBldmVyeSBwbGFjZW1lbnQgb24gdGhhdCBheGlzXG4gICAgICAgICAgLy8gb3ZlcmZsb3dzIHRoZSBtYWluIGF4aXMuXG4gICAgICAgICAgb3ZlcmZsb3dzRGF0YS5ldmVyeShkID0+IGdldFNpZGVBeGlzKGQucGxhY2VtZW50KSA9PT0gaW5pdGlhbFNpZGVBeGlzID8gZC5vdmVyZmxvd3NbMF0gPiAwIDogdHJ1ZSkpIHtcbiAgICAgICAgICAgIC8vIFRyeSBuZXh0IHBsYWNlbWVudCBhbmQgcmUtcnVuIHRoZSBsaWZlY3ljbGUuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IG5leHRJbmRleCxcbiAgICAgICAgICAgICAgICBvdmVyZmxvd3M6IG92ZXJmbG93c0RhdGFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ6IG5leHRQbGFjZW1lbnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaXJzdCwgZmluZCB0aGUgY2FuZGlkYXRlcyB0aGF0IGZpdCBvbiB0aGUgbWFpbkF4aXMgc2lkZSBvZiBvdmVyZmxvdyxcbiAgICAgICAgLy8gdGhlbiBmaW5kIHRoZSBwbGFjZW1lbnQgdGhhdCBmaXRzIHRoZSBiZXN0IG9uIHRoZSBtYWluIGNyb3NzQXhpcyBzaWRlLlxuICAgICAgICBsZXQgcmVzZXRQbGFjZW1lbnQgPSAoX292ZXJmbG93c0RhdGEkZmlsdGVyID0gb3ZlcmZsb3dzRGF0YS5maWx0ZXIoZCA9PiBkLm92ZXJmbG93c1swXSA8PSAwKS5zb3J0KChhLCBiKSA9PiBhLm92ZXJmbG93c1sxXSAtIGIub3ZlcmZsb3dzWzFdKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9vdmVyZmxvd3NEYXRhJGZpbHRlci5wbGFjZW1lbnQ7XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGZhbGxiYWNrLlxuICAgICAgICBpZiAoIXJlc2V0UGxhY2VtZW50KSB7XG4gICAgICAgICAgc3dpdGNoIChmYWxsYmFja1N0cmF0ZWd5KSB7XG4gICAgICAgICAgICBjYXNlICdiZXN0Rml0JzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIyO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlbWVudCA9IChfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIyID0gb3ZlcmZsb3dzRGF0YS5maWx0ZXIoZCA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhkLnBsYWNlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50U2lkZUF4aXMgPT09IGluaXRpYWxTaWRlQXhpcyB8fFxuICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBiaWFzIHRvIHRoZSBgeWAgc2lkZSBheGlzIGR1ZSB0byBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlYWRpbmcgZGlyZWN0aW9ucyBmYXZvcmluZyBncmVhdGVyIHdpZHRoLlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2lkZUF4aXMgPT09ICd5JztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0pLm1hcChkID0+IFtkLnBsYWNlbWVudCwgZC5vdmVyZmxvd3MuZmlsdGVyKG92ZXJmbG93ID0+IG92ZXJmbG93ID4gMCkucmVkdWNlKChhY2MsIG92ZXJmbG93KSA9PiBhY2MgKyBvdmVyZmxvdywgMCldKS5zb3J0KChhLCBiKSA9PiBhWzFdIC0gYlsxXSlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIyWzBdO1xuICAgICAgICAgICAgICAgIGlmIChwbGFjZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgIHJlc2V0UGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnaW5pdGlhbFBsYWNlbWVudCc6XG4gICAgICAgICAgICAgIHJlc2V0UGxhY2VtZW50ID0gaW5pdGlhbFBsYWNlbWVudDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwbGFjZW1lbnQgIT09IHJlc2V0UGxhY2VtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICAgIHBsYWNlbWVudDogcmVzZXRQbGFjZW1lbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3QpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGgsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aFxuICB9O1xufVxuZnVuY3Rpb24gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG92ZXJmbG93KSB7XG4gIHJldHVybiBzaWRlcy5zb21lKHNpZGUgPT4gb3ZlcmZsb3dbc2lkZV0gPj0gMCk7XG59XG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gaGlkZSB0aGUgZmxvYXRpbmcgZWxlbWVudCBpbiBhcHBsaWNhYmxlIHNpdHVhdGlvbnMsIHN1Y2ggYXNcbiAqIHdoZW4gaXQgaXMgbm90IGluIHRoZSBzYW1lIGNsaXBwaW5nIGNvbnRleHQgYXMgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2hpZGVcbiAqL1xuY29uc3QgaGlkZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnaGlkZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICByZWN0c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBzdHJhdGVneSA9ICdyZWZlcmVuY2VIaWRkZW4nLFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBzd2l0Y2ggKHN0cmF0ZWd5KSB7XG4gICAgICAgIGNhc2UgJ3JlZmVyZW5jZUhpZGRlbic6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnMsXG4gICAgICAgICAgICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3RzLnJlZmVyZW5jZSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlSGlkZGVuT2Zmc2V0czogb2Zmc2V0cyxcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VIaWRkZW46IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvZmZzZXRzKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnZXNjYXBlZCc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnMsXG4gICAgICAgICAgICAgIGFsdEJvdW5kYXJ5OiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdHMuZmxvYXRpbmcpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGVzY2FwZWRPZmZzZXRzOiBvZmZzZXRzLFxuICAgICAgICAgICAgICAgIGVzY2FwZWQ6IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvZmZzZXRzKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0cykge1xuICBjb25zdCBtaW5YID0gbWluKC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QubGVmdCkpO1xuICBjb25zdCBtaW5ZID0gbWluKC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QudG9wKSk7XG4gIGNvbnN0IG1heFggPSBtYXgoLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5yaWdodCkpO1xuICBjb25zdCBtYXhZID0gbWF4KC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QuYm90dG9tKSk7XG4gIHJldHVybiB7XG4gICAgeDogbWluWCxcbiAgICB5OiBtaW5ZLFxuICAgIHdpZHRoOiBtYXhYIC0gbWluWCxcbiAgICBoZWlnaHQ6IG1heFkgLSBtaW5ZXG4gIH07XG59XG5mdW5jdGlvbiBnZXRSZWN0c0J5TGluZShyZWN0cykge1xuICBjb25zdCBzb3J0ZWRSZWN0cyA9IHJlY3RzLnNsaWNlKCkuc29ydCgoYSwgYikgPT4gYS55IC0gYi55KTtcbiAgY29uc3QgZ3JvdXBzID0gW107XG4gIGxldCBwcmV2UmVjdCA9IG51bGw7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkUmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCByZWN0ID0gc29ydGVkUmVjdHNbaV07XG4gICAgaWYgKCFwcmV2UmVjdCB8fCByZWN0LnkgLSBwcmV2UmVjdC55ID4gcHJldlJlY3QuaGVpZ2h0IC8gMikge1xuICAgICAgZ3JvdXBzLnB1c2goW3JlY3RdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JvdXBzW2dyb3Vwcy5sZW5ndGggLSAxXS5wdXNoKHJlY3QpO1xuICAgIH1cbiAgICBwcmV2UmVjdCA9IHJlY3Q7XG4gIH1cbiAgcmV0dXJuIGdyb3Vwcy5tYXAocmVjdCA9PiByZWN0VG9DbGllbnRSZWN0KGdldEJvdW5kaW5nUmVjdChyZWN0KSkpO1xufVxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdpbmxpbmUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBzdHJhdGVneVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgLy8gQSBNb3VzZUV2ZW50J3MgY2xpZW50e1gsWX0gY29vcmRzIGNhbiBiZSB1cCB0byAyIHBpeGVscyBvZmYgYVxuICAgICAgLy8gQ2xpZW50UmVjdCdzIGJvdW5kcywgZGVzcGl0ZSB0aGUgZXZlbnQgbGlzdGVuZXIgYmVpbmcgdHJpZ2dlcmVkLiBBXG4gICAgICAvLyBwYWRkaW5nIG9mIDIgc2VlbXMgdG8gaGFuZGxlIHRoaXMgaXNzdWUuXG4gICAgICBjb25zdCB7XG4gICAgICAgIHBhZGRpbmcgPSAyLFxuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgbmF0aXZlQ2xpZW50UmVjdHMgPSBBcnJheS5mcm9tKChhd2FpdCAocGxhdGZvcm0uZ2V0Q2xpZW50UmVjdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldENsaWVudFJlY3RzKGVsZW1lbnRzLnJlZmVyZW5jZSkpKSB8fCBbXSk7XG4gICAgICBjb25zdCBjbGllbnRSZWN0cyA9IGdldFJlY3RzQnlMaW5lKG5hdGl2ZUNsaWVudFJlY3RzKTtcbiAgICAgIGNvbnN0IGZhbGxiYWNrID0gcmVjdFRvQ2xpZW50UmVjdChnZXRCb3VuZGluZ1JlY3QobmF0aXZlQ2xpZW50UmVjdHMpKTtcbiAgICAgIGNvbnN0IHBhZGRpbmdPYmplY3QgPSBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpO1xuICAgICAgZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkge1xuICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHJlY3RzIGFuZCB0aGV5IGFyZSBkaXNqb2luZWQuXG4gICAgICAgIGlmIChjbGllbnRSZWN0cy5sZW5ndGggPT09IDIgJiYgY2xpZW50UmVjdHNbMF0ubGVmdCA+IGNsaWVudFJlY3RzWzFdLnJpZ2h0ICYmIHggIT0gbnVsbCAmJiB5ICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCByZWN0IGluIHdoaWNoIHRoZSBwb2ludCBpcyBmdWxseSBpbnNpZGUuXG4gICAgICAgICAgcmV0dXJuIGNsaWVudFJlY3RzLmZpbmQocmVjdCA9PiB4ID4gcmVjdC5sZWZ0IC0gcGFkZGluZ09iamVjdC5sZWZ0ICYmIHggPCByZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodCAmJiB5ID4gcmVjdC50b3AgLSBwYWRkaW5nT2JqZWN0LnRvcCAmJiB5IDwgcmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSkgfHwgZmFsbGJhY2s7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGVyZSBhcmUgMiBvciBtb3JlIGNvbm5lY3RlZCByZWN0cy5cbiAgICAgICAgaWYgKGNsaWVudFJlY3RzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgaWYgKGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5Jykge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RSZWN0ID0gY2xpZW50UmVjdHNbMF07XG4gICAgICAgICAgICBjb25zdCBsYXN0UmVjdCA9IGNsaWVudFJlY3RzW2NsaWVudFJlY3RzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgY29uc3QgaXNUb3AgPSBnZXRTaWRlKHBsYWNlbWVudCkgPT09ICd0b3AnO1xuICAgICAgICAgICAgY29uc3QgdG9wID0gZmlyc3RSZWN0LnRvcDtcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IGxhc3RSZWN0LmJvdHRvbTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBpc1RvcCA/IGZpcnN0UmVjdC5sZWZ0IDogbGFzdFJlY3QubGVmdDtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gaXNUb3AgPyBmaXJzdFJlY3QucmlnaHQgOiBsYXN0UmVjdC5yaWdodDtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgICBib3R0b20sXG4gICAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICAgIHJpZ2h0LFxuICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICB4OiBsZWZ0LFxuICAgICAgICAgICAgICB5OiB0b3BcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGlzTGVmdFNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCkgPT09ICdsZWZ0JztcbiAgICAgICAgICBjb25zdCBtYXhSaWdodCA9IG1heCguLi5jbGllbnRSZWN0cy5tYXAocmVjdCA9PiByZWN0LnJpZ2h0KSk7XG4gICAgICAgICAgY29uc3QgbWluTGVmdCA9IG1pbiguLi5jbGllbnRSZWN0cy5tYXAocmVjdCA9PiByZWN0LmxlZnQpKTtcbiAgICAgICAgICBjb25zdCBtZWFzdXJlUmVjdHMgPSBjbGllbnRSZWN0cy5maWx0ZXIocmVjdCA9PiBpc0xlZnRTaWRlID8gcmVjdC5sZWZ0ID09PSBtaW5MZWZ0IDogcmVjdC5yaWdodCA9PT0gbWF4UmlnaHQpO1xuICAgICAgICAgIGNvbnN0IHRvcCA9IG1lYXN1cmVSZWN0c1swXS50b3A7XG4gICAgICAgICAgY29uc3QgYm90dG9tID0gbWVhc3VyZVJlY3RzW21lYXN1cmVSZWN0cy5sZW5ndGggLSAxXS5ib3R0b207XG4gICAgICAgICAgY29uc3QgbGVmdCA9IG1pbkxlZnQ7XG4gICAgICAgICAgY29uc3QgcmlnaHQgPSBtYXhSaWdodDtcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICByaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgeDogbGVmdCxcbiAgICAgICAgICAgIHk6IHRvcFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzZXRSZWN0cyA9IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgICAgIHJlZmVyZW5jZToge1xuICAgICAgICAgIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuICAgICAgICB9LFxuICAgICAgICBmbG9hdGluZzogZWxlbWVudHMuZmxvYXRpbmcsXG4gICAgICAgIHN0cmF0ZWd5XG4gICAgICB9KTtcbiAgICAgIGlmIChyZWN0cy5yZWZlcmVuY2UueCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UueCB8fCByZWN0cy5yZWZlcmVuY2UueSAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UueSB8fCByZWN0cy5yZWZlcmVuY2Uud2lkdGggIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLndpZHRoIHx8IHJlY3RzLnJlZmVyZW5jZS5oZWlnaHQgIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLmhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICByZWN0czogcmVzZXRSZWN0c1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBvcmlnaW5TaWRlcyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KFsnbGVmdCcsICd0b3AnXSk7XG5cbi8vIEZvciB0eXBlIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5LCB0aGUgYE9mZnNldE9wdGlvbnNgIHR5cGUgd2FzIGFsc29cbi8vIERlcml2YWJsZS5cblxuYXN5bmMgZnVuY3Rpb24gY29udmVydFZhbHVlVG9Db29yZHMoc3RhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIHBsYWNlbWVudCxcbiAgICBwbGF0Zm9ybSxcbiAgICBlbGVtZW50c1xuICB9ID0gc3RhdGU7XG4gIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKTtcbiAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGNvbnN0IGlzVmVydGljYWwgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpID09PSAneSc7XG4gIGNvbnN0IG1haW5BeGlzTXVsdGkgPSBvcmlnaW5TaWRlcy5oYXMoc2lkZSkgPyAtMSA6IDE7XG4gIGNvbnN0IGNyb3NzQXhpc011bHRpID0gcnRsICYmIGlzVmVydGljYWwgPyAtMSA6IDE7XG4gIGNvbnN0IHJhd1ZhbHVlID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgbGV0IHtcbiAgICBtYWluQXhpcyxcbiAgICBjcm9zc0F4aXMsXG4gICAgYWxpZ25tZW50QXhpc1xuICB9ID0gdHlwZW9mIHJhd1ZhbHVlID09PSAnbnVtYmVyJyA/IHtcbiAgICBtYWluQXhpczogcmF3VmFsdWUsXG4gICAgY3Jvc3NBeGlzOiAwLFxuICAgIGFsaWdubWVudEF4aXM6IG51bGxcbiAgfSA6IHtcbiAgICBtYWluQXhpczogcmF3VmFsdWUubWFpbkF4aXMgfHwgMCxcbiAgICBjcm9zc0F4aXM6IHJhd1ZhbHVlLmNyb3NzQXhpcyB8fCAwLFxuICAgIGFsaWdubWVudEF4aXM6IHJhd1ZhbHVlLmFsaWdubWVudEF4aXNcbiAgfTtcbiAgaWYgKGFsaWdubWVudCAmJiB0eXBlb2YgYWxpZ25tZW50QXhpcyA9PT0gJ251bWJlcicpIHtcbiAgICBjcm9zc0F4aXMgPSBhbGlnbm1lbnQgPT09ICdlbmQnID8gYWxpZ25tZW50QXhpcyAqIC0xIDogYWxpZ25tZW50QXhpcztcbiAgfVxuICByZXR1cm4gaXNWZXJ0aWNhbCA/IHtcbiAgICB4OiBjcm9zc0F4aXMgKiBjcm9zc0F4aXNNdWx0aSxcbiAgICB5OiBtYWluQXhpcyAqIG1haW5BeGlzTXVsdGlcbiAgfSA6IHtcbiAgICB4OiBtYWluQXhpcyAqIG1haW5BeGlzTXVsdGksXG4gICAgeTogY3Jvc3NBeGlzICogY3Jvc3NBeGlzTXVsdGlcbiAgfTtcbn1cblxuLyoqXG4gKiBNb2RpZmllcyB0aGUgcGxhY2VtZW50IGJ5IHRyYW5zbGF0aW5nIHRoZSBmbG9hdGluZyBlbGVtZW50IGFsb25nIHRoZVxuICogc3BlY2lmaWVkIGF4ZXMuXG4gKiBBIG51bWJlciAoc2hvcnRoYW5kIGZvciBgbWFpbkF4aXNgIG9yIGRpc3RhbmNlKSwgb3IgYW4gYXhlcyBjb25maWd1cmF0aW9uXG4gKiBvYmplY3QgbWF5IGJlIHBhc3NlZC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9vZmZzZXRcbiAqL1xuY29uc3Qgb2Zmc2V0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSAwO1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ29mZnNldCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRvZmZzZSwgX21pZGRsZXdhcmVEYXRhJGFycm93O1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCBkaWZmQ29vcmRzID0gYXdhaXQgY29udmVydFZhbHVlVG9Db29yZHMoc3RhdGUsIG9wdGlvbnMpO1xuXG4gICAgICAvLyBJZiB0aGUgcGxhY2VtZW50IGlzIHRoZSBzYW1lIGFuZCB0aGUgYXJyb3cgY2F1c2VkIGFuIGFsaWdubWVudCBvZmZzZXRcbiAgICAgIC8vIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBjaGFuZ2UgdGhlIHBvc2l0aW9uaW5nIGNvb3JkaW5hdGVzLlxuICAgICAgaWYgKHBsYWNlbWVudCA9PT0gKChfbWlkZGxld2FyZURhdGEkb2Zmc2UgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2UucGxhY2VtZW50KSAmJiAoX21pZGRsZXdhcmVEYXRhJGFycm93ID0gbWlkZGxld2FyZURhdGEuYXJyb3cpICE9IG51bGwgJiYgX21pZGRsZXdhcmVEYXRhJGFycm93LmFsaWdubWVudE9mZnNldCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiB4ICsgZGlmZkNvb3Jkcy54LFxuICAgICAgICB5OiB5ICsgZGlmZkNvb3Jkcy55LFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgLi4uZGlmZkNvb3JkcyxcbiAgICAgICAgICBwbGFjZW1lbnRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBzaGlmdGluZyBpdCBpbiBvcmRlciB0b1xuICoga2VlcCBpdCBpbiB2aWV3IHdoZW4gaXQgd2lsbCBvdmVyZmxvdyB0aGUgY2xpcHBpbmcgYm91bmRhcnkuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvc2hpZnRcbiAqL1xuY29uc3Qgc2hpZnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3NoaWZ0JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudFxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSBmYWxzZSxcbiAgICAgICAgbGltaXRlciA9IHtcbiAgICAgICAgICBmbjogX3JlZiA9PiB7XG4gICAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICB5XG4gICAgICAgICAgICB9ID0gX3JlZjtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgIHlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH07XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3QgY3Jvc3NBeGlzID0gZ2V0U2lkZUF4aXMoZ2V0U2lkZShwbGFjZW1lbnQpKTtcbiAgICAgIGNvbnN0IG1haW5BeGlzID0gZ2V0T3Bwb3NpdGVBeGlzKGNyb3NzQXhpcyk7XG4gICAgICBsZXQgbWFpbkF4aXNDb29yZCA9IGNvb3Jkc1ttYWluQXhpc107XG4gICAgICBsZXQgY3Jvc3NBeGlzQ29vcmQgPSBjb29yZHNbY3Jvc3NBeGlzXTtcbiAgICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICAgIGNvbnN0IG1pblNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gJ3RvcCcgOiAnbGVmdCc7XG4gICAgICAgIGNvbnN0IG1heFNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICAgICAgICBjb25zdCBtaW4gPSBtYWluQXhpc0Nvb3JkICsgb3ZlcmZsb3dbbWluU2lkZV07XG4gICAgICAgIGNvbnN0IG1heCA9IG1haW5BeGlzQ29vcmQgLSBvdmVyZmxvd1ttYXhTaWRlXTtcbiAgICAgICAgbWFpbkF4aXNDb29yZCA9IGNsYW1wKG1pbiwgbWFpbkF4aXNDb29yZCwgbWF4KTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGVja0Nyb3NzQXhpcykge1xuICAgICAgICBjb25zdCBtaW5TaWRlID0gY3Jvc3NBeGlzID09PSAneScgPyAndG9wJyA6ICdsZWZ0JztcbiAgICAgICAgY29uc3QgbWF4U2lkZSA9IGNyb3NzQXhpcyA9PT0gJ3knID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICAgICAgICBjb25zdCBtaW4gPSBjcm9zc0F4aXNDb29yZCArIG92ZXJmbG93W21pblNpZGVdO1xuICAgICAgICBjb25zdCBtYXggPSBjcm9zc0F4aXNDb29yZCAtIG92ZXJmbG93W21heFNpZGVdO1xuICAgICAgICBjcm9zc0F4aXNDb29yZCA9IGNsYW1wKG1pbiwgY3Jvc3NBeGlzQ29vcmQsIG1heCk7XG4gICAgICB9XG4gICAgICBjb25zdCBsaW1pdGVkQ29vcmRzID0gbGltaXRlci5mbih7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBbbWFpbkF4aXNdOiBtYWluQXhpc0Nvb3JkLFxuICAgICAgICBbY3Jvc3NBeGlzXTogY3Jvc3NBeGlzQ29vcmRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubGltaXRlZENvb3JkcyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHg6IGxpbWl0ZWRDb29yZHMueCAtIHgsXG4gICAgICAgICAgeTogbGltaXRlZENvb3Jkcy55IC0geSxcbiAgICAgICAgICBlbmFibGVkOiB7XG4gICAgICAgICAgICBbbWFpbkF4aXNdOiBjaGVja01haW5BeGlzLFxuICAgICAgICAgICAgW2Nyb3NzQXhpc106IGNoZWNrQ3Jvc3NBeGlzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG4vKipcbiAqIEJ1aWx0LWluIGBsaW1pdGVyYCB0aGF0IHdpbGwgc3RvcCBgc2hpZnQoKWAgYXQgYSBjZXJ0YWluIHBvaW50LlxuICovXG5jb25zdCBsaW1pdFNoaWZ0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG9wdGlvbnMsXG4gICAgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICByZWN0cyxcbiAgICAgICAgbWlkZGxld2FyZURhdGFcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgb2Zmc2V0ID0gMCxcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gdHJ1ZVxuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNyb3NzQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBtYWluQXhpcyA9IGdldE9wcG9zaXRlQXhpcyhjcm9zc0F4aXMpO1xuICAgICAgbGV0IG1haW5BeGlzQ29vcmQgPSBjb29yZHNbbWFpbkF4aXNdO1xuICAgICAgbGV0IGNyb3NzQXhpc0Nvb3JkID0gY29vcmRzW2Nyb3NzQXhpc107XG4gICAgICBjb25zdCByYXdPZmZzZXQgPSBldmFsdWF0ZShvZmZzZXQsIHN0YXRlKTtcbiAgICAgIGNvbnN0IGNvbXB1dGVkT2Zmc2V0ID0gdHlwZW9mIHJhd09mZnNldCA9PT0gJ251bWJlcicgPyB7XG4gICAgICAgIG1haW5BeGlzOiByYXdPZmZzZXQsXG4gICAgICAgIGNyb3NzQXhpczogMFxuICAgICAgfSA6IHtcbiAgICAgICAgbWFpbkF4aXM6IDAsXG4gICAgICAgIGNyb3NzQXhpczogMCxcbiAgICAgICAgLi4ucmF3T2Zmc2V0XG4gICAgICB9O1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgY29uc3QgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICAgICAgY29uc3QgbGltaXRNaW4gPSByZWN0cy5yZWZlcmVuY2VbbWFpbkF4aXNdIC0gcmVjdHMuZmxvYXRpbmdbbGVuXSArIGNvbXB1dGVkT2Zmc2V0Lm1haW5BeGlzO1xuICAgICAgICBjb25zdCBsaW1pdE1heCA9IHJlY3RzLnJlZmVyZW5jZVttYWluQXhpc10gKyByZWN0cy5yZWZlcmVuY2VbbGVuXSAtIGNvbXB1dGVkT2Zmc2V0Lm1haW5BeGlzO1xuICAgICAgICBpZiAobWFpbkF4aXNDb29yZCA8IGxpbWl0TWluKSB7XG4gICAgICAgICAgbWFpbkF4aXNDb29yZCA9IGxpbWl0TWluO1xuICAgICAgICB9IGVsc2UgaWYgKG1haW5BeGlzQ29vcmQgPiBsaW1pdE1heCkge1xuICAgICAgICAgIG1haW5BeGlzQ29vcmQgPSBsaW1pdE1heDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkb2Zmc2UsIF9taWRkbGV3YXJlRGF0YSRvZmZzZTI7XG4gICAgICAgIGNvbnN0IGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG4gICAgICAgIGNvbnN0IGlzT3JpZ2luU2lkZSA9IG9yaWdpblNpZGVzLmhhcyhnZXRTaWRlKHBsYWNlbWVudCkpO1xuICAgICAgICBjb25zdCBsaW1pdE1pbiA9IHJlY3RzLnJlZmVyZW5jZVtjcm9zc0F4aXNdIC0gcmVjdHMuZmxvYXRpbmdbbGVuXSArIChpc09yaWdpblNpZGUgPyAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZSA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZVtjcm9zc0F4aXNdKSB8fCAwIDogMCkgKyAoaXNPcmlnaW5TaWRlID8gMCA6IGNvbXB1dGVkT2Zmc2V0LmNyb3NzQXhpcyk7XG4gICAgICAgIGNvbnN0IGxpbWl0TWF4ID0gcmVjdHMucmVmZXJlbmNlW2Nyb3NzQXhpc10gKyByZWN0cy5yZWZlcmVuY2VbbGVuXSArIChpc09yaWdpblNpZGUgPyAwIDogKChfbWlkZGxld2FyZURhdGEkb2Zmc2UyID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlMltjcm9zc0F4aXNdKSB8fCAwKSAtIChpc09yaWdpblNpZGUgPyBjb21wdXRlZE9mZnNldC5jcm9zc0F4aXMgOiAwKTtcbiAgICAgICAgaWYgKGNyb3NzQXhpc0Nvb3JkIDwgbGltaXRNaW4pIHtcbiAgICAgICAgICBjcm9zc0F4aXNDb29yZCA9IGxpbWl0TWluO1xuICAgICAgICB9IGVsc2UgaWYgKGNyb3NzQXhpc0Nvb3JkID4gbGltaXRNYXgpIHtcbiAgICAgICAgICBjcm9zc0F4aXNDb29yZCA9IGxpbWl0TWF4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbbWFpbkF4aXNdOiBtYWluQXhpc0Nvb3JkLFxuICAgICAgICBbY3Jvc3NBeGlzXTogY3Jvc3NBeGlzQ29vcmRcbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRoYXQgYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQg4oCUXG4gKiBmb3IgaW5zdGFuY2UsIHByZXZlbnQgaXQgZnJvbSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgYm91bmRhcnkgb3IgbWF0Y2ggdGhlXG4gKiB3aWR0aCBvZiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvc2l6ZVxuICovXG5jb25zdCBzaXplID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzaXplJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX3N0YXRlJG1pZGRsZXdhcmVEYXRhLCBfc3RhdGUkbWlkZGxld2FyZURhdGEyO1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgZWxlbWVudHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYXBwbHkgPSAoKSA9PiB7fSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGlzWUF4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpID09PSAneSc7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICAgIH0gPSByZWN0cy5mbG9hdGluZztcbiAgICAgIGxldCBoZWlnaHRTaWRlO1xuICAgICAgbGV0IHdpZHRoU2lkZTtcbiAgICAgIGlmIChzaWRlID09PSAndG9wJyB8fCBzaWRlID09PSAnYm90dG9tJykge1xuICAgICAgICBoZWlnaHRTaWRlID0gc2lkZTtcbiAgICAgICAgd2lkdGhTaWRlID0gYWxpZ25tZW50ID09PSAoKGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKSkgPyAnc3RhcnQnIDogJ2VuZCcpID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpZHRoU2lkZSA9IHNpZGU7XG4gICAgICAgIGhlaWdodFNpZGUgPSBhbGlnbm1lbnQgPT09ICdlbmQnID8gJ3RvcCcgOiAnYm90dG9tJztcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1heGltdW1DbGlwcGluZ0hlaWdodCA9IGhlaWdodCAtIG92ZXJmbG93LnRvcCAtIG92ZXJmbG93LmJvdHRvbTtcbiAgICAgIGNvbnN0IG1heGltdW1DbGlwcGluZ1dpZHRoID0gd2lkdGggLSBvdmVyZmxvdy5sZWZ0IC0gb3ZlcmZsb3cucmlnaHQ7XG4gICAgICBjb25zdCBvdmVyZmxvd0F2YWlsYWJsZUhlaWdodCA9IG1pbihoZWlnaHQgLSBvdmVyZmxvd1toZWlnaHRTaWRlXSwgbWF4aW11bUNsaXBwaW5nSGVpZ2h0KTtcbiAgICAgIGNvbnN0IG92ZXJmbG93QXZhaWxhYmxlV2lkdGggPSBtaW4od2lkdGggLSBvdmVyZmxvd1t3aWR0aFNpZGVdLCBtYXhpbXVtQ2xpcHBpbmdXaWR0aCk7XG4gICAgICBjb25zdCBub1NoaWZ0ID0gIXN0YXRlLm1pZGRsZXdhcmVEYXRhLnNoaWZ0O1xuICAgICAgbGV0IGF2YWlsYWJsZUhlaWdodCA9IG92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0O1xuICAgICAgbGV0IGF2YWlsYWJsZVdpZHRoID0gb3ZlcmZsb3dBdmFpbGFibGVXaWR0aDtcbiAgICAgIGlmICgoX3N0YXRlJG1pZGRsZXdhcmVEYXRhID0gc3RhdGUubWlkZGxld2FyZURhdGEuc2hpZnQpICE9IG51bGwgJiYgX3N0YXRlJG1pZGRsZXdhcmVEYXRhLmVuYWJsZWQueCkge1xuICAgICAgICBhdmFpbGFibGVXaWR0aCA9IG1heGltdW1DbGlwcGluZ1dpZHRoO1xuICAgICAgfVxuICAgICAgaWYgKChfc3RhdGUkbWlkZGxld2FyZURhdGEyID0gc3RhdGUubWlkZGxld2FyZURhdGEuc2hpZnQpICE9IG51bGwgJiYgX3N0YXRlJG1pZGRsZXdhcmVEYXRhMi5lbmFibGVkLnkpIHtcbiAgICAgICAgYXZhaWxhYmxlSGVpZ2h0ID0gbWF4aW11bUNsaXBwaW5nSGVpZ2h0O1xuICAgICAgfVxuICAgICAgaWYgKG5vU2hpZnQgJiYgIWFsaWdubWVudCkge1xuICAgICAgICBjb25zdCB4TWluID0gbWF4KG92ZXJmbG93LmxlZnQsIDApO1xuICAgICAgICBjb25zdCB4TWF4ID0gbWF4KG92ZXJmbG93LnJpZ2h0LCAwKTtcbiAgICAgICAgY29uc3QgeU1pbiA9IG1heChvdmVyZmxvdy50b3AsIDApO1xuICAgICAgICBjb25zdCB5TWF4ID0gbWF4KG92ZXJmbG93LmJvdHRvbSwgMCk7XG4gICAgICAgIGlmIChpc1lBeGlzKSB7XG4gICAgICAgICAgYXZhaWxhYmxlV2lkdGggPSB3aWR0aCAtIDIgKiAoeE1pbiAhPT0gMCB8fCB4TWF4ICE9PSAwID8geE1pbiArIHhNYXggOiBtYXgob3ZlcmZsb3cubGVmdCwgb3ZlcmZsb3cucmlnaHQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBoZWlnaHQgLSAyICogKHlNaW4gIT09IDAgfHwgeU1heCAhPT0gMCA/IHlNaW4gKyB5TWF4IDogbWF4KG92ZXJmbG93LnRvcCwgb3ZlcmZsb3cuYm90dG9tKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IGFwcGx5KHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGF2YWlsYWJsZVdpZHRoLFxuICAgICAgICBhdmFpbGFibGVIZWlnaHRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbmV4dERpbWVuc2lvbnMgPSBhd2FpdCBwbGF0Zm9ybS5nZXREaW1lbnNpb25zKGVsZW1lbnRzLmZsb2F0aW5nKTtcbiAgICAgIGlmICh3aWR0aCAhPT0gbmV4dERpbWVuc2lvbnMud2lkdGggfHwgaGVpZ2h0ICE9PSBuZXh0RGltZW5zaW9ucy5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcmVjdHM6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0IHsgYXJyb3csIGF1dG9QbGFjZW1lbnQsIGNvbXB1dGVQb3NpdGlvbiwgZGV0ZWN0T3ZlcmZsb3csIGZsaXAsIGhpZGUsIGlubGluZSwgbGltaXRTaGlmdCwgb2Zmc2V0LCBzaGlmdCwgc2l6ZSB9O1xuIiwiZnVuY3Rpb24gaGFzV2luZG93KCkge1xuICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG59XG5mdW5jdGlvbiBnZXROb2RlTmFtZShub2RlKSB7XG4gIGlmIChpc05vZGUobm9kZSkpIHtcbiAgICByZXR1cm4gKG5vZGUubm9kZU5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgLy8gTW9ja2VkIG5vZGVzIGluIHRlc3RpbmcgZW52aXJvbm1lbnRzIG1heSBub3QgYmUgaW5zdGFuY2VzIG9mIE5vZGUuIEJ5XG4gIC8vIHJldHVybmluZyBgI2RvY3VtZW50YCBhbiBpbmZpbml0ZSBsb29wIHdvbid0IG9jY3VyLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzIzMTdcbiAgcmV0dXJuICcjZG9jdW1lbnQnO1xufVxuZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgdmFyIF9ub2RlJG93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiAobm9kZSA9PSBudWxsIHx8IChfbm9kZSRvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX25vZGUkb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgfHwgd2luZG93O1xufVxuZnVuY3Rpb24gZ2V0RG9jdW1lbnRFbGVtZW50KG5vZGUpIHtcbiAgdmFyIF9yZWY7XG4gIHJldHVybiAoX3JlZiA9IChpc05vZGUobm9kZSkgPyBub2RlLm93bmVyRG9jdW1lbnQgOiBub2RlLmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfcmVmLmRvY3VtZW50RWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzTm9kZSh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIE5vZGUgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLk5vZGU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQodmFsdWUpIHtcbiAgaWYgKCFoYXNXaW5kb3coKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBFbGVtZW50IHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5FbGVtZW50O1xufVxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudCh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5IVE1MRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzU2hhZG93Um9vdCh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpIHx8IHR5cGVvZiBTaGFkb3dSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBTaGFkb3dSb290IHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5TaGFkb3dSb290O1xufVxuY29uc3QgaW52YWxpZE92ZXJmbG93RGlzcGxheVZhbHVlcyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KFsnaW5saW5lJywgJ2NvbnRlbnRzJ10pO1xuZnVuY3Rpb24gaXNPdmVyZmxvd0VsZW1lbnQoZWxlbWVudCkge1xuICBjb25zdCB7XG4gICAgb3ZlcmZsb3csXG4gICAgb3ZlcmZsb3dYLFxuICAgIG92ZXJmbG93WSxcbiAgICBkaXNwbGF5XG4gIH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICByZXR1cm4gL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVufGNsaXAvLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpICYmICFpbnZhbGlkT3ZlcmZsb3dEaXNwbGF5VmFsdWVzLmhhcyhkaXNwbGF5KTtcbn1cbmNvbnN0IHRhYmxlRWxlbWVudHMgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ3RhYmxlJywgJ3RkJywgJ3RoJ10pO1xuZnVuY3Rpb24gaXNUYWJsZUVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gdGFibGVFbGVtZW50cy5oYXMoZ2V0Tm9kZU5hbWUoZWxlbWVudCkpO1xufVxuY29uc3QgdG9wTGF5ZXJTZWxlY3RvcnMgPSBbJzpwb3BvdmVyLW9wZW4nLCAnOm1vZGFsJ107XG5mdW5jdGlvbiBpc1RvcExheWVyKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHRvcExheWVyU2VsZWN0b3JzLnNvbWUoc2VsZWN0b3IgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgICB9IGNhdGNoIChfZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG59XG5jb25zdCB0cmFuc2Zvcm1Qcm9wZXJ0aWVzID0gWyd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlJywgJ3NjYWxlJywgJ3JvdGF0ZScsICdwZXJzcGVjdGl2ZSddO1xuY29uc3Qgd2lsbENoYW5nZVZhbHVlcyA9IFsndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZScsICdzY2FsZScsICdyb3RhdGUnLCAncGVyc3BlY3RpdmUnLCAnZmlsdGVyJ107XG5jb25zdCBjb250YWluVmFsdWVzID0gWydwYWludCcsICdsYXlvdXQnLCAnc3RyaWN0JywgJ2NvbnRlbnQnXTtcbmZ1bmN0aW9uIGlzQ29udGFpbmluZ0Jsb2NrKGVsZW1lbnRPckNzcykge1xuICBjb25zdCB3ZWJraXQgPSBpc1dlYktpdCgpO1xuICBjb25zdCBjc3MgPSBpc0VsZW1lbnQoZWxlbWVudE9yQ3NzKSA/IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudE9yQ3NzKSA6IGVsZW1lbnRPckNzcztcblxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXRyYW5zZm9ybXMtMi8jaW5kaXZpZHVhbC10cmFuc2Zvcm1zXG4gIHJldHVybiB0cmFuc2Zvcm1Qcm9wZXJ0aWVzLnNvbWUodmFsdWUgPT4gY3NzW3ZhbHVlXSA/IGNzc1t2YWx1ZV0gIT09ICdub25lJyA6IGZhbHNlKSB8fCAoY3NzLmNvbnRhaW5lclR5cGUgPyBjc3MuY29udGFpbmVyVHlwZSAhPT0gJ25vcm1hbCcgOiBmYWxzZSkgfHwgIXdlYmtpdCAmJiAoY3NzLmJhY2tkcm9wRmlsdGVyID8gY3NzLmJhY2tkcm9wRmlsdGVyICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgIXdlYmtpdCAmJiAoY3NzLmZpbHRlciA/IGNzcy5maWx0ZXIgIT09ICdub25lJyA6IGZhbHNlKSB8fCB3aWxsQ2hhbmdlVmFsdWVzLnNvbWUodmFsdWUgPT4gKGNzcy53aWxsQ2hhbmdlIHx8ICcnKS5pbmNsdWRlcyh2YWx1ZSkpIHx8IGNvbnRhaW5WYWx1ZXMuc29tZSh2YWx1ZSA9PiAoY3NzLmNvbnRhaW4gfHwgJycpLmluY2x1ZGVzKHZhbHVlKSk7XG59XG5mdW5jdGlvbiBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICBsZXQgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICB3aGlsZSAoaXNIVE1MRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBpZiAoaXNDb250YWluaW5nQmxvY2soY3VycmVudE5vZGUpKSB7XG4gICAgICByZXR1cm4gY3VycmVudE5vZGU7XG4gICAgfSBlbHNlIGlmIChpc1RvcExheWVyKGN1cnJlbnROb2RlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShjdXJyZW50Tm9kZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBpc1dlYktpdCgpIHtcbiAgaWYgKHR5cGVvZiBDU1MgPT09ICd1bmRlZmluZWQnIHx8ICFDU1Muc3VwcG9ydHMpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIENTUy5zdXBwb3J0cygnLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXInLCAnbm9uZScpO1xufVxuY29uc3QgbGFzdFRyYXZlcnNhYmxlTm9kZU5hbWVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10pO1xuZnVuY3Rpb24gaXNMYXN0VHJhdmVyc2FibGVOb2RlKG5vZGUpIHtcbiAgcmV0dXJuIGxhc3RUcmF2ZXJzYWJsZU5vZGVOYW1lcy5oYXMoZ2V0Tm9kZU5hbWUobm9kZSkpO1xufVxuZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn1cbmZ1bmN0aW9uIGdldE5vZGVTY3JvbGwoZWxlbWVudCkge1xuICBpZiAoaXNFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxYLFxuICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxZXG4gIH07XG59XG5mdW5jdGlvbiBnZXRQYXJlbnROb2RlKG5vZGUpIHtcbiAgaWYgKGdldE5vZGVOYW1lKG5vZGUpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICBjb25zdCByZXN1bHQgPVxuICAvLyBTdGVwIGludG8gdGhlIHNoYWRvdyBET00gb2YgdGhlIHBhcmVudCBvZiBhIHNsb3R0ZWQgbm9kZS5cbiAgbm9kZS5hc3NpZ25lZFNsb3QgfHxcbiAgLy8gRE9NIEVsZW1lbnQgZGV0ZWN0ZWQuXG4gIG5vZGUucGFyZW50Tm9kZSB8fFxuICAvLyBTaGFkb3dSb290IGRldGVjdGVkLlxuICBpc1NoYWRvd1Jvb3Qobm9kZSkgJiYgbm9kZS5ob3N0IHx8XG4gIC8vIEZhbGxiYWNrLlxuICBnZXREb2N1bWVudEVsZW1lbnQobm9kZSk7XG4gIHJldHVybiBpc1NoYWRvd1Jvb3QocmVzdWx0KSA/IHJlc3VsdC5ob3N0IDogcmVzdWx0O1xufVxuZnVuY3Rpb24gZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3Iobm9kZSkge1xuICBjb25zdCBwYXJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShub2RlKTtcbiAgaWYgKGlzTGFzdFRyYXZlcnNhYmxlTm9kZShwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQgPyBub2RlLm93bmVyRG9jdW1lbnQuYm9keSA6IG5vZGUuYm9keTtcbiAgfVxuICBpZiAoaXNIVE1MRWxlbWVudChwYXJlbnROb2RlKSAmJiBpc092ZXJmbG93RWxlbWVudChwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBwYXJlbnROb2RlO1xuICB9XG4gIHJldHVybiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvcihwYXJlbnROb2RlKTtcbn1cbmZ1bmN0aW9uIGdldE92ZXJmbG93QW5jZXN0b3JzKG5vZGUsIGxpc3QsIHRyYXZlcnNlSWZyYW1lcykge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDI7XG4gIGlmIChsaXN0ID09PSB2b2lkIDApIHtcbiAgICBsaXN0ID0gW107XG4gIH1cbiAgaWYgKHRyYXZlcnNlSWZyYW1lcyA9PT0gdm9pZCAwKSB7XG4gICAgdHJhdmVyc2VJZnJhbWVzID0gdHJ1ZTtcbiAgfVxuICBjb25zdCBzY3JvbGxhYmxlQW5jZXN0b3IgPSBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKTtcbiAgY29uc3QgaXNCb2R5ID0gc2Nyb2xsYWJsZUFuY2VzdG9yID09PSAoKF9ub2RlJG93bmVyRG9jdW1lbnQyID0gbm9kZS5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX25vZGUkb3duZXJEb2N1bWVudDIuYm9keSk7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhzY3JvbGxhYmxlQW5jZXN0b3IpO1xuICBpZiAoaXNCb2R5KSB7XG4gICAgY29uc3QgZnJhbWVFbGVtZW50ID0gZ2V0RnJhbWVFbGVtZW50KHdpbik7XG4gICAgcmV0dXJuIGxpc3QuY29uY2F0KHdpbiwgd2luLnZpc3VhbFZpZXdwb3J0IHx8IFtdLCBpc092ZXJmbG93RWxlbWVudChzY3JvbGxhYmxlQW5jZXN0b3IpID8gc2Nyb2xsYWJsZUFuY2VzdG9yIDogW10sIGZyYW1lRWxlbWVudCAmJiB0cmF2ZXJzZUlmcmFtZXMgPyBnZXRPdmVyZmxvd0FuY2VzdG9ycyhmcmFtZUVsZW1lbnQpIDogW10pO1xuICB9XG4gIHJldHVybiBsaXN0LmNvbmNhdChzY3JvbGxhYmxlQW5jZXN0b3IsIGdldE92ZXJmbG93QW5jZXN0b3JzKHNjcm9sbGFibGVBbmNlc3RvciwgW10sIHRyYXZlcnNlSWZyYW1lcykpO1xufVxuZnVuY3Rpb24gZ2V0RnJhbWVFbGVtZW50KHdpbikge1xuICByZXR1cm4gd2luLnBhcmVudCAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yod2luLnBhcmVudCkgPyB3aW4uZnJhbWVFbGVtZW50IDogbnVsbDtcbn1cblxuZXhwb3J0IHsgZ2V0Q29tcHV0ZWRTdHlsZSwgZ2V0Q29udGFpbmluZ0Jsb2NrLCBnZXREb2N1bWVudEVsZW1lbnQsIGdldEZyYW1lRWxlbWVudCwgZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3IsIGdldE5vZGVOYW1lLCBnZXROb2RlU2Nyb2xsLCBnZXRPdmVyZmxvd0FuY2VzdG9ycywgZ2V0UGFyZW50Tm9kZSwgZ2V0V2luZG93LCBpc0NvbnRhaW5pbmdCbG9jaywgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50LCBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUsIGlzTm9kZSwgaXNPdmVyZmxvd0VsZW1lbnQsIGlzU2hhZG93Um9vdCwgaXNUYWJsZUVsZW1lbnQsIGlzVG9wTGF5ZXIsIGlzV2ViS2l0IH07XG4iLCJpbXBvcnQgeyByZWN0VG9DbGllbnRSZWN0LCBhcnJvdyBhcyBhcnJvdyQxLCBhdXRvUGxhY2VtZW50IGFzIGF1dG9QbGFjZW1lbnQkMSwgZGV0ZWN0T3ZlcmZsb3cgYXMgZGV0ZWN0T3ZlcmZsb3ckMSwgZmxpcCBhcyBmbGlwJDEsIGhpZGUgYXMgaGlkZSQxLCBpbmxpbmUgYXMgaW5saW5lJDEsIGxpbWl0U2hpZnQgYXMgbGltaXRTaGlmdCQxLCBvZmZzZXQgYXMgb2Zmc2V0JDEsIHNoaWZ0IGFzIHNoaWZ0JDEsIHNpemUgYXMgc2l6ZSQxLCBjb21wdXRlUG9zaXRpb24gYXMgY29tcHV0ZVBvc2l0aW9uJDEgfSBmcm9tICdAZmxvYXRpbmctdWkvY29yZSc7XG5pbXBvcnQgeyByb3VuZCwgY3JlYXRlQ29vcmRzLCBtYXgsIG1pbiwgZmxvb3IgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMnO1xuaW1wb3J0IHsgZ2V0Q29tcHV0ZWRTdHlsZSBhcyBnZXRDb21wdXRlZFN0eWxlJDEsIGlzSFRNTEVsZW1lbnQsIGlzRWxlbWVudCwgZ2V0V2luZG93LCBpc1dlYktpdCwgZ2V0RnJhbWVFbGVtZW50LCBnZXROb2RlU2Nyb2xsLCBnZXREb2N1bWVudEVsZW1lbnQsIGlzVG9wTGF5ZXIsIGdldE5vZGVOYW1lLCBpc092ZXJmbG93RWxlbWVudCwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMsIGdldFBhcmVudE5vZGUsIGlzTGFzdFRyYXZlcnNhYmxlTm9kZSwgaXNDb250YWluaW5nQmxvY2ssIGlzVGFibGVFbGVtZW50LCBnZXRDb250YWluaW5nQmxvY2sgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcbmV4cG9ydCB7IGdldE92ZXJmbG93QW5jZXN0b3JzIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzL2RvbSc7XG5cbmZ1bmN0aW9uIGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCkge1xuICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCk7XG4gIC8vIEluIHRlc3RpbmcgZW52aXJvbm1lbnRzLCB0aGUgYHdpZHRoYCBhbmQgYGhlaWdodGAgcHJvcGVydGllcyBhcmUgZW1wdHlcbiAgLy8gc3RyaW5ncyBmb3IgU1ZHIGVsZW1lbnRzLCByZXR1cm5pbmcgTmFOLiBGYWxsYmFjayB0byBgMGAgaW4gdGhpcyBjYXNlLlxuICBsZXQgd2lkdGggPSBwYXJzZUZsb2F0KGNzcy53aWR0aCkgfHwgMDtcbiAgbGV0IGhlaWdodCA9IHBhcnNlRmxvYXQoY3NzLmhlaWdodCkgfHwgMDtcbiAgY29uc3QgaGFzT2Zmc2V0ID0gaXNIVE1MRWxlbWVudChlbGVtZW50KTtcbiAgY29uc3Qgb2Zmc2V0V2lkdGggPSBoYXNPZmZzZXQgPyBlbGVtZW50Lm9mZnNldFdpZHRoIDogd2lkdGg7XG4gIGNvbnN0IG9mZnNldEhlaWdodCA9IGhhc09mZnNldCA/IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IDogaGVpZ2h0O1xuICBjb25zdCBzaG91bGRGYWxsYmFjayA9IHJvdW5kKHdpZHRoKSAhPT0gb2Zmc2V0V2lkdGggfHwgcm91bmQoaGVpZ2h0KSAhPT0gb2Zmc2V0SGVpZ2h0O1xuICBpZiAoc2hvdWxkRmFsbGJhY2spIHtcbiAgICB3aWR0aCA9IG9mZnNldFdpZHRoO1xuICAgIGhlaWdodCA9IG9mZnNldEhlaWdodDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICAkOiBzaG91bGRGYWxsYmFja1xuICB9O1xufVxuXG5mdW5jdGlvbiB1bndyYXBFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuICFpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50LmNvbnRleHRFbGVtZW50IDogZWxlbWVudDtcbn1cblxuZnVuY3Rpb24gZ2V0U2NhbGUoZWxlbWVudCkge1xuICBjb25zdCBkb21FbGVtZW50ID0gdW53cmFwRWxlbWVudChlbGVtZW50KTtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGRvbUVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNvb3JkcygxKTtcbiAgfVxuICBjb25zdCByZWN0ID0gZG9tRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3Qge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICAkXG4gIH0gPSBnZXRDc3NEaW1lbnNpb25zKGRvbUVsZW1lbnQpO1xuICBsZXQgeCA9ICgkID8gcm91bmQocmVjdC53aWR0aCkgOiByZWN0LndpZHRoKSAvIHdpZHRoO1xuICBsZXQgeSA9ICgkID8gcm91bmQocmVjdC5oZWlnaHQpIDogcmVjdC5oZWlnaHQpIC8gaGVpZ2h0O1xuXG4gIC8vIDAsIE5hTiwgb3IgSW5maW5pdHkgc2hvdWxkIGFsd2F5cyBmYWxsYmFjayB0byAxLlxuXG4gIGlmICgheCB8fCAhTnVtYmVyLmlzRmluaXRlKHgpKSB7XG4gICAgeCA9IDE7XG4gIH1cbiAgaWYgKCF5IHx8ICFOdW1iZXIuaXNGaW5pdGUoeSkpIHtcbiAgICB5ID0gMTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5jb25zdCBub09mZnNldHMgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29vcmRzKDApO1xuZnVuY3Rpb24gZ2V0VmlzdWFsT2Zmc2V0cyhlbGVtZW50KSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgaWYgKCFpc1dlYktpdCgpIHx8ICF3aW4udmlzdWFsVmlld3BvcnQpIHtcbiAgICByZXR1cm4gbm9PZmZzZXRzO1xuICB9XG4gIHJldHVybiB7XG4gICAgeDogd2luLnZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQsXG4gICAgeTogd2luLnZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcFxuICB9O1xufVxuZnVuY3Rpb24gc2hvdWxkQWRkVmlzdWFsT2Zmc2V0cyhlbGVtZW50LCBpc0ZpeGVkLCBmbG9hdGluZ09mZnNldFBhcmVudCkge1xuICBpZiAoaXNGaXhlZCA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZCA9IGZhbHNlO1xuICB9XG4gIGlmICghZmxvYXRpbmdPZmZzZXRQYXJlbnQgfHwgaXNGaXhlZCAmJiBmbG9hdGluZ09mZnNldFBhcmVudCAhPT0gZ2V0V2luZG93KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBpc0ZpeGVkO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgaW5jbHVkZVNjYWxlLCBpc0ZpeGVkU3RyYXRlZ3ksIG9mZnNldFBhcmVudCkge1xuICBpZiAoaW5jbHVkZVNjYWxlID09PSB2b2lkIDApIHtcbiAgICBpbmNsdWRlU2NhbGUgPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNGaXhlZFN0cmF0ZWd5ID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkU3RyYXRlZ3kgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBjbGllbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgZG9tRWxlbWVudCA9IHVud3JhcEVsZW1lbnQoZWxlbWVudCk7XG4gIGxldCBzY2FsZSA9IGNyZWF0ZUNvb3JkcygxKTtcbiAgaWYgKGluY2x1ZGVTY2FsZSkge1xuICAgIGlmIChvZmZzZXRQYXJlbnQpIHtcbiAgICAgIGlmIChpc0VsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgICBzY2FsZSA9IGdldFNjYWxlKG9mZnNldFBhcmVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjYWxlID0gZ2V0U2NhbGUoZWxlbWVudCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHZpc3VhbE9mZnNldHMgPSBzaG91bGRBZGRWaXN1YWxPZmZzZXRzKGRvbUVsZW1lbnQsIGlzRml4ZWRTdHJhdGVneSwgb2Zmc2V0UGFyZW50KSA/IGdldFZpc3VhbE9mZnNldHMoZG9tRWxlbWVudCkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIGxldCB4ID0gKGNsaWVudFJlY3QubGVmdCArIHZpc3VhbE9mZnNldHMueCkgLyBzY2FsZS54O1xuICBsZXQgeSA9IChjbGllbnRSZWN0LnRvcCArIHZpc3VhbE9mZnNldHMueSkgLyBzY2FsZS55O1xuICBsZXQgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoIC8gc2NhbGUueDtcbiAgbGV0IGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0IC8gc2NhbGUueTtcbiAgaWYgKGRvbUVsZW1lbnQpIHtcbiAgICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZG9tRWxlbWVudCk7XG4gICAgY29uc3Qgb2Zmc2V0V2luID0gb2Zmc2V0UGFyZW50ICYmIGlzRWxlbWVudChvZmZzZXRQYXJlbnQpID8gZ2V0V2luZG93KG9mZnNldFBhcmVudCkgOiBvZmZzZXRQYXJlbnQ7XG4gICAgbGV0IGN1cnJlbnRXaW4gPSB3aW47XG4gICAgbGV0IGN1cnJlbnRJRnJhbWUgPSBnZXRGcmFtZUVsZW1lbnQoY3VycmVudFdpbik7XG4gICAgd2hpbGUgKGN1cnJlbnRJRnJhbWUgJiYgb2Zmc2V0UGFyZW50ICYmIG9mZnNldFdpbiAhPT0gY3VycmVudFdpbikge1xuICAgICAgY29uc3QgaWZyYW1lU2NhbGUgPSBnZXRTY2FsZShjdXJyZW50SUZyYW1lKTtcbiAgICAgIGNvbnN0IGlmcmFtZVJlY3QgPSBjdXJyZW50SUZyYW1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZSQxKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgbGVmdCA9IGlmcmFtZVJlY3QubGVmdCArIChjdXJyZW50SUZyYW1lLmNsaWVudExlZnQgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nTGVmdCkpICogaWZyYW1lU2NhbGUueDtcbiAgICAgIGNvbnN0IHRvcCA9IGlmcmFtZVJlY3QudG9wICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50VG9wICsgcGFyc2VGbG9hdChjc3MucGFkZGluZ1RvcCkpICogaWZyYW1lU2NhbGUueTtcbiAgICAgIHggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIHkgKj0gaWZyYW1lU2NhbGUueTtcbiAgICAgIHdpZHRoICo9IGlmcmFtZVNjYWxlLng7XG4gICAgICBoZWlnaHQgKj0gaWZyYW1lU2NhbGUueTtcbiAgICAgIHggKz0gbGVmdDtcbiAgICAgIHkgKz0gdG9wO1xuICAgICAgY3VycmVudFdpbiA9IGdldFdpbmRvdyhjdXJyZW50SUZyYW1lKTtcbiAgICAgIGN1cnJlbnRJRnJhbWUgPSBnZXRGcmFtZUVsZW1lbnQoY3VycmVudFdpbik7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0VG9DbGllbnRSZWN0KHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH0pO1xufVxuXG4vLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4vLyBpbmNvcnJlY3QgZm9yIFJUTC5cbmZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCwgcmVjdCkge1xuICBjb25zdCBsZWZ0U2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KS5zY3JvbGxMZWZ0O1xuICBpZiAoIXJlY3QpIHtcbiAgICByZXR1cm4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkubGVmdCArIGxlZnRTY3JvbGw7XG4gIH1cbiAgcmV0dXJuIHJlY3QubGVmdCArIGxlZnRTY3JvbGw7XG59XG5cbmZ1bmN0aW9uIGdldEhUTUxPZmZzZXQoZG9jdW1lbnRFbGVtZW50LCBzY3JvbGwpIHtcbiAgY29uc3QgaHRtbFJlY3QgPSBkb2N1bWVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHggPSBodG1sUmVjdC5sZWZ0ICsgc2Nyb2xsLnNjcm9sbExlZnQgLSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCwgaHRtbFJlY3QpO1xuICBjb25zdCB5ID0gaHRtbFJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcDtcbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QoX3JlZikge1xuICBsZXQge1xuICAgIGVsZW1lbnRzLFxuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0gPSBfcmVmO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCB0b3BMYXllciA9IGVsZW1lbnRzID8gaXNUb3BMYXllcihlbGVtZW50cy5mbG9hdGluZykgOiBmYWxzZTtcbiAgaWYgKG9mZnNldFBhcmVudCA9PT0gZG9jdW1lbnRFbGVtZW50IHx8IHRvcExheWVyICYmIGlzRml4ZWQpIHtcbiAgICByZXR1cm4gcmVjdDtcbiAgfVxuICBsZXQgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIGxldCBzY2FsZSA9IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgb2Zmc2V0cyA9IGNyZWF0ZUNvb3JkcygwKTtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgaWYgKGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgY29uc3Qgb2Zmc2V0UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQpO1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH1cbiAgfVxuICBjb25zdCBodG1sT2Zmc2V0ID0gZG9jdW1lbnRFbGVtZW50ICYmICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCA/IGdldEhUTUxPZmZzZXQoZG9jdW1lbnRFbGVtZW50LCBzY3JvbGwpIDogY3JlYXRlQ29vcmRzKDApO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiByZWN0LndpZHRoICogc2NhbGUueCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0ICogc2NhbGUueSxcbiAgICB4OiByZWN0LnggKiBzY2FsZS54IC0gc2Nyb2xsLnNjcm9sbExlZnQgKiBzY2FsZS54ICsgb2Zmc2V0cy54ICsgaHRtbE9mZnNldC54LFxuICAgIHk6IHJlY3QueSAqIHNjYWxlLnkgLSBzY3JvbGwuc2Nyb2xsVG9wICogc2NhbGUueSArIG9mZnNldHMueSArIGh0bWxPZmZzZXQueVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0cyhlbGVtZW50KSB7XG4gIHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKSk7XG59XG5cbi8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGUuXG5mdW5jdGlvbiBnZXREb2N1bWVudFJlY3QoZWxlbWVudCkge1xuICBjb25zdCBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpO1xuICBjb25zdCBib2R5ID0gZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gIGNvbnN0IHdpZHRoID0gbWF4KGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGJvZHkuc2Nyb2xsV2lkdGgsIGJvZHkuY2xpZW50V2lkdGgpO1xuICBjb25zdCBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5LnNjcm9sbEhlaWdodCwgYm9keS5jbGllbnRIZWlnaHQpO1xuICBsZXQgeCA9IC1zY3JvbGwuc2Nyb2xsTGVmdCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCk7XG4gIGNvbnN0IHkgPSAtc2Nyb2xsLnNjcm9sbFRvcDtcbiAgaWYgKGdldENvbXB1dGVkU3R5bGUkMShib2R5KS5kaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgeCArPSBtYXgoaHRtbC5jbGllbnRXaWR0aCwgYm9keS5jbGllbnRXaWR0aCkgLSB3aWR0aDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuLy8gU2FmZXR5IGNoZWNrOiBlbnN1cmUgdGhlIHNjcm9sbGJhciBzcGFjZSBpcyByZWFzb25hYmxlIGluIGNhc2UgdGhpc1xuLy8gY2FsY3VsYXRpb24gaXMgYWZmZWN0ZWQgYnkgdW51c3VhbCBzdHlsZXMuXG4vLyBNb3N0IHNjcm9sbGJhcnMgbGVhdmUgMTUtMThweCBvZiBzcGFjZS5cbmNvbnN0IFNDUk9MTEJBUl9NQVggPSAyNTtcbmZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICBsZXQgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICBsZXQgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIGxldCB4ID0gMDtcbiAgbGV0IHkgPSAwO1xuICBpZiAodmlzdWFsVmlld3BvcnQpIHtcbiAgICB3aWR0aCA9IHZpc3VhbFZpZXdwb3J0LndpZHRoO1xuICAgIGhlaWdodCA9IHZpc3VhbFZpZXdwb3J0LmhlaWdodDtcbiAgICBjb25zdCB2aXN1YWxWaWV3cG9ydEJhc2VkID0gaXNXZWJLaXQoKTtcbiAgICBpZiAoIXZpc3VhbFZpZXdwb3J0QmFzZWQgfHwgdmlzdWFsVmlld3BvcnRCYXNlZCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuICBjb25zdCB3aW5kb3dTY3JvbGxiYXJYID0gZ2V0V2luZG93U2Nyb2xsQmFyWChodG1sKTtcbiAgLy8gPGh0bWw+IGBvdmVyZmxvdzogaGlkZGVuYCArIGBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGVgIHJlZHVjZXMgdGhlXG4gIC8vIHZpc3VhbCB3aWR0aCBvZiB0aGUgPGh0bWw+IGJ1dCB0aGlzIGlzIG5vdCBjb25zaWRlcmVkIGluIHRoZSBzaXplXG4gIC8vIG9mIGBodG1sLmNsaWVudFdpZHRoYC5cbiAgaWYgKHdpbmRvd1Njcm9sbGJhclggPD0gMCkge1xuICAgIGNvbnN0IGRvYyA9IGh0bWwub3duZXJEb2N1bWVudDtcbiAgICBjb25zdCBib2R5ID0gZG9jLmJvZHk7XG4gICAgY29uc3QgYm9keVN0eWxlcyA9IGdldENvbXB1dGVkU3R5bGUoYm9keSk7XG4gICAgY29uc3QgYm9keU1hcmdpbklubGluZSA9IGRvYy5jb21wYXRNb2RlID09PSAnQ1NTMUNvbXBhdCcgPyBwYXJzZUZsb2F0KGJvZHlTdHlsZXMubWFyZ2luTGVmdCkgKyBwYXJzZUZsb2F0KGJvZHlTdHlsZXMubWFyZ2luUmlnaHQpIHx8IDAgOiAwO1xuICAgIGNvbnN0IGNsaXBwaW5nU3RhYmxlU2Nyb2xsYmFyV2lkdGggPSBNYXRoLmFicyhodG1sLmNsaWVudFdpZHRoIC0gYm9keS5jbGllbnRXaWR0aCAtIGJvZHlNYXJnaW5JbmxpbmUpO1xuICAgIGlmIChjbGlwcGluZ1N0YWJsZVNjcm9sbGJhcldpZHRoIDw9IFNDUk9MTEJBUl9NQVgpIHtcbiAgICAgIHdpZHRoIC09IGNsaXBwaW5nU3RhYmxlU2Nyb2xsYmFyV2lkdGg7XG4gICAgfVxuICB9IGVsc2UgaWYgKHdpbmRvd1Njcm9sbGJhclggPD0gU0NST0xMQkFSX01BWCkge1xuICAgIC8vIElmIHRoZSA8Ym9keT4gc2Nyb2xsYmFyIGlzIG9uIHRoZSBsZWZ0LCB0aGUgd2lkdGggbmVlZHMgdG8gYmUgZXh0ZW5kZWRcbiAgICAvLyBieSB0aGUgc2Nyb2xsYmFyIGFtb3VudCBzbyB0aGVyZSBpc24ndCBleHRyYSBzcGFjZSBvbiB0aGUgcmlnaHQuXG4gICAgd2lkdGggKz0gd2luZG93U2Nyb2xsYmFyWDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuY29uc3QgYWJzb2x1dGVPckZpeGVkID0gLyojX19QVVJFX18qL25ldyBTZXQoWydhYnNvbHV0ZScsICdmaXhlZCddKTtcbi8vIFJldHVybnMgdGhlIGlubmVyIGNsaWVudCByZWN0LCBzdWJ0cmFjdGluZyBzY3JvbGxiYXJzIGlmIHByZXNlbnQuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICBjb25zdCBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHRydWUsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgY29uc3QgdG9wID0gY2xpZW50UmVjdC50b3AgKyBlbGVtZW50LmNsaWVudFRvcDtcbiAgY29uc3QgbGVmdCA9IGNsaWVudFJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgY29uc3Qgc2NhbGUgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0U2NhbGUoZWxlbWVudCkgOiBjcmVhdGVDb29yZHMoMSk7XG4gIGNvbnN0IHdpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aCAqIHNjYWxlLng7XG4gIGNvbnN0IGhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0ICogc2NhbGUueTtcbiAgY29uc3QgeCA9IGxlZnQgKiBzY2FsZS54O1xuICBjb25zdCB5ID0gdG9wICogc2NhbGUueTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpIHtcbiAgbGV0IHJlY3Q7XG4gIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAndmlld3BvcnQnKSB7XG4gICAgcmVjdCA9IGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSk7XG4gIH0gZWxzZSBpZiAoY2xpcHBpbmdBbmNlc3RvciA9PT0gJ2RvY3VtZW50Jykge1xuICAgIHJlY3QgPSBnZXREb2N1bWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKTtcbiAgfSBlbHNlIGlmIChpc0VsZW1lbnQoY2xpcHBpbmdBbmNlc3RvcikpIHtcbiAgICByZWN0ID0gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHZpc3VhbE9mZnNldHMgPSBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpO1xuICAgIHJlY3QgPSB7XG4gICAgICB4OiBjbGlwcGluZ0FuY2VzdG9yLnggLSB2aXN1YWxPZmZzZXRzLngsXG4gICAgICB5OiBjbGlwcGluZ0FuY2VzdG9yLnkgLSB2aXN1YWxPZmZzZXRzLnksXG4gICAgICB3aWR0aDogY2xpcHBpbmdBbmNlc3Rvci53aWR0aCxcbiAgICAgIGhlaWdodDogY2xpcHBpbmdBbmNlc3Rvci5oZWlnaHRcbiAgICB9O1xuICB9XG4gIHJldHVybiByZWN0VG9DbGllbnRSZWN0KHJlY3QpO1xufVxuZnVuY3Rpb24gaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKGVsZW1lbnQsIHN0b3BOb2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICBpZiAocGFyZW50Tm9kZSA9PT0gc3RvcE5vZGUgfHwgIWlzRWxlbWVudChwYXJlbnROb2RlKSB8fCBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUocGFyZW50Tm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUkMShwYXJlbnROb2RlKS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJyB8fCBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IocGFyZW50Tm9kZSwgc3RvcE5vZGUpO1xufVxuXG4vLyBBIFwiY2xpcHBpbmcgYW5jZXN0b3JcIiBpcyBhbiBgb3ZlcmZsb3dgIGVsZW1lbnQgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIGNoaWxkIGVsZW1lbnRzLiBUaGlzIHJldHVybnMgYWxsIGNsaXBwaW5nIGFuY2VzdG9yc1xuLy8gb2YgdGhlIGdpdmVuIGVsZW1lbnQgdXAgdGhlIHRyZWUuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMoZWxlbWVudCwgY2FjaGUpIHtcbiAgY29uc3QgY2FjaGVkUmVzdWx0ID0gY2FjaGUuZ2V0KGVsZW1lbnQpO1xuICBpZiAoY2FjaGVkUmVzdWx0KSB7XG4gICAgcmV0dXJuIGNhY2hlZFJlc3VsdDtcbiAgfVxuICBsZXQgcmVzdWx0ID0gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZWxlbWVudCwgW10sIGZhbHNlKS5maWx0ZXIoZWwgPT4gaXNFbGVtZW50KGVsKSAmJiBnZXROb2RlTmFtZShlbCkgIT09ICdib2R5Jyk7XG4gIGxldCBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IG51bGw7XG4gIGNvbnN0IGVsZW1lbnRJc0ZpeGVkID0gZ2V0Q29tcHV0ZWRTdHlsZSQxKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnO1xuICBsZXQgY3VycmVudE5vZGUgPSBlbGVtZW50SXNGaXhlZCA/IGdldFBhcmVudE5vZGUoZWxlbWVudCkgOiBlbGVtZW50O1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIHdoaWxlIChpc0VsZW1lbnQoY3VycmVudE5vZGUpICYmICFpc0xhc3RUcmF2ZXJzYWJsZU5vZGUoY3VycmVudE5vZGUpKSB7XG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUkMShjdXJyZW50Tm9kZSk7XG4gICAgY29uc3QgY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgPSBpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSk7XG4gICAgaWYgKCFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHNob3VsZERyb3BDdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmICFjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA6ICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJyAmJiAhIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlICYmIGFic29sdXRlT3JGaXhlZC5oYXMoY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUucG9zaXRpb24pIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKGVsZW1lbnQsIGN1cnJlbnROb2RlKTtcbiAgICBpZiAoc2hvdWxkRHJvcEN1cnJlbnROb2RlKSB7XG4gICAgICAvLyBEcm9wIG5vbi1jb250YWluaW5nIGJsb2Nrcy5cbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoYW5jZXN0b3IgPT4gYW5jZXN0b3IgIT09IGN1cnJlbnROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVjb3JkIGxhc3QgY29udGFpbmluZyBibG9jayBmb3IgbmV4dCBpdGVyYXRpb24uXG4gICAgICBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IGNvbXB1dGVkU3R5bGU7XG4gICAgfVxuICAgIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShjdXJyZW50Tm9kZSk7XG4gIH1cbiAgY2FjaGUuc2V0KGVsZW1lbnQsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIGFuY2VzdG9ycy5cbmZ1bmN0aW9uIGdldENsaXBwaW5nUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgZWxlbWVudCxcbiAgICBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnksXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGVsZW1lbnRDbGlwcGluZ0FuY2VzdG9ycyA9IGJvdW5kYXJ5ID09PSAnY2xpcHBpbmdBbmNlc3RvcnMnID8gaXNUb3BMYXllcihlbGVtZW50KSA/IFtdIDogZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzKGVsZW1lbnQsIHRoaXMuX2MpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgY29uc3QgY2xpcHBpbmdBbmNlc3RvcnMgPSBbLi4uZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzLCByb290Qm91bmRhcnldO1xuICBjb25zdCBmaXJzdENsaXBwaW5nQW5jZXN0b3IgPSBjbGlwcGluZ0FuY2VzdG9yc1swXTtcbiAgY29uc3QgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdBbmNlc3RvcnMucmVkdWNlKChhY2NSZWN0LCBjbGlwcGluZ0FuY2VzdG9yKSA9PiB7XG4gICAgY29uc3QgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGZpcnN0Q2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpKTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQsXG4gICAgaGVpZ2h0OiBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcCxcbiAgICB4OiBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICB5OiBjbGlwcGluZ1JlY3QudG9wXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERpbWVuc2lvbnMoZWxlbWVudCkge1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH0gPSBnZXRDc3NEaW1lbnNpb25zKGVsZW1lbnQpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudChlbGVtZW50LCBvZmZzZXRQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgY29uc3QgaXNGaXhlZCA9IHN0cmF0ZWd5ID09PSAnZml4ZWQnO1xuICBjb25zdCByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHRydWUsIGlzRml4ZWQsIG9mZnNldFBhcmVudCk7XG4gIGxldCBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgY29uc3Qgb2Zmc2V0cyA9IGNyZWF0ZUNvb3JkcygwKTtcblxuICAvLyBJZiB0aGUgPGJvZHk+IHNjcm9sbGJhciBhcHBlYXJzIG9uIHRoZSBsZWZ0IChlLmcuIFJUTCBzeXN0ZW1zKS4gVXNlXG4gIC8vIEZpcmVmb3ggd2l0aCBsYXlvdXQuc2Nyb2xsYmFyLnNpZGUgPSAzIGluIGFib3V0OmNvbmZpZyB0byB0ZXN0IHRoaXMuXG4gIGZ1bmN0aW9uIHNldExlZnRSVExTY3JvbGxiYXJPZmZzZXQoKSB7XG4gICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICB9XG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50KSB7XG4gICAgICBjb25zdCBvZmZzZXRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgICAgIG9mZnNldHMueCA9IG9mZnNldFJlY3QueCArIG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ID0gb2Zmc2V0UmVjdC55ICsgb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgc2V0TGVmdFJUTFNjcm9sbGJhck9mZnNldCgpO1xuICAgIH1cbiAgfVxuICBpZiAoaXNGaXhlZCAmJiAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgc2V0TGVmdFJUTFNjcm9sbGJhck9mZnNldCgpO1xuICB9XG4gIGNvbnN0IGh0bWxPZmZzZXQgPSBkb2N1bWVudEVsZW1lbnQgJiYgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkID8gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIGNvbnN0IHggPSByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCAtIGh0bWxPZmZzZXQueDtcbiAgY29uc3QgeSA9IHJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcCAtIG9mZnNldHMueSAtIGh0bWxPZmZzZXQueTtcbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1N0YXRpY1Bvc2l0aW9uZWQoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSQxKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJztcbn1cblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCkge1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgZ2V0Q29tcHV0ZWRTdHlsZSQxKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHBvbHlmaWxsKSB7XG4gICAgcmV0dXJuIHBvbHlmaWxsKGVsZW1lbnQpO1xuICB9XG4gIGxldCByYXdPZmZzZXRQYXJlbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDtcblxuICAvLyBGaXJlZm94IHJldHVybnMgdGhlIDxodG1sPiBlbGVtZW50IGFzIHRoZSBvZmZzZXRQYXJlbnQgaWYgaXQncyBub24tc3RhdGljLFxuICAvLyB3aGlsZSBDaHJvbWUgYW5kIFNhZmFyaSByZXR1cm4gdGhlIDxib2R5PiBlbGVtZW50LiBUaGUgPGJvZHk+IGVsZW1lbnQgbXVzdFxuICAvLyBiZSB1c2VkIHRvIHBlcmZvcm0gdGhlIGNvcnJlY3QgY2FsY3VsYXRpb25zIGV2ZW4gaWYgdGhlIDxodG1sPiBlbGVtZW50IGlzXG4gIC8vIG5vbi1zdGF0aWMuXG4gIGlmIChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkgPT09IHJhd09mZnNldFBhcmVudCkge1xuICAgIHJhd09mZnNldFBhcmVudCA9IHJhd09mZnNldFBhcmVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gIH1cbiAgcmV0dXJuIHJhd09mZnNldFBhcmVudDtcbn1cblxuLy8gR2V0cyB0aGUgY2xvc2VzdCBhbmNlc3RvciBwb3NpdGlvbmVkIGVsZW1lbnQuIEhhbmRsZXMgc29tZSBlZGdlIGNhc2VzLFxuLy8gc3VjaCBhcyB0YWJsZSBhbmNlc3RvcnMgYW5kIGNyb3NzIGJyb3dzZXIgYnVncy5cbmZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGlmIChpc1RvcExheWVyKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHdpbjtcbiAgfVxuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBsZXQgc3ZnT2Zmc2V0UGFyZW50ID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgICB3aGlsZSAoc3ZnT2Zmc2V0UGFyZW50ICYmICFpc0xhc3RUcmF2ZXJzYWJsZU5vZGUoc3ZnT2Zmc2V0UGFyZW50KSkge1xuICAgICAgaWYgKGlzRWxlbWVudChzdmdPZmZzZXRQYXJlbnQpICYmICFpc1N0YXRpY1Bvc2l0aW9uZWQoc3ZnT2Zmc2V0UGFyZW50KSkge1xuICAgICAgICByZXR1cm4gc3ZnT2Zmc2V0UGFyZW50O1xuICAgICAgfVxuICAgICAgc3ZnT2Zmc2V0UGFyZW50ID0gZ2V0UGFyZW50Tm9kZShzdmdPZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gd2luO1xuICB9XG4gIGxldCBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKTtcbiAgd2hpbGUgKG9mZnNldFBhcmVudCAmJiBpc1RhYmxlRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGlzU3RhdGljUG9zaXRpb25lZChvZmZzZXRQYXJlbnQpKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQsIHBvbHlmaWxsKTtcbiAgfVxuICBpZiAob2Zmc2V0UGFyZW50ICYmIGlzTGFzdFRyYXZlcnNhYmxlTm9kZShvZmZzZXRQYXJlbnQpICYmIGlzU3RhdGljUG9zaXRpb25lZChvZmZzZXRQYXJlbnQpICYmICFpc0NvbnRhaW5pbmdCbG9jayhvZmZzZXRQYXJlbnQpKSB7XG4gICAgcmV0dXJuIHdpbjtcbiAgfVxuICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB8fCB3aW47XG59XG5cbmNvbnN0IGdldEVsZW1lbnRSZWN0cyA9IGFzeW5jIGZ1bmN0aW9uIChkYXRhKSB7XG4gIGNvbnN0IGdldE9mZnNldFBhcmVudEZuID0gdGhpcy5nZXRPZmZzZXRQYXJlbnQgfHwgZ2V0T2Zmc2V0UGFyZW50O1xuICBjb25zdCBnZXREaW1lbnNpb25zRm4gPSB0aGlzLmdldERpbWVuc2lvbnM7XG4gIGNvbnN0IGZsb2F0aW5nRGltZW5zaW9ucyA9IGF3YWl0IGdldERpbWVuc2lvbnNGbihkYXRhLmZsb2F0aW5nKTtcbiAgcmV0dXJuIHtcbiAgICByZWZlcmVuY2U6IGdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGRhdGEucmVmZXJlbmNlLCBhd2FpdCBnZXRPZmZzZXRQYXJlbnRGbihkYXRhLmZsb2F0aW5nKSwgZGF0YS5zdHJhdGVneSksXG4gICAgZmxvYXRpbmc6IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwLFxuICAgICAgd2lkdGg6IGZsb2F0aW5nRGltZW5zaW9ucy53aWR0aCxcbiAgICAgIGhlaWdodDogZmxvYXRpbmdEaW1lbnNpb25zLmhlaWdodFxuICAgIH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGlzUlRMKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUkMShlbGVtZW50KS5kaXJlY3Rpb24gPT09ICdydGwnO1xufVxuXG5jb25zdCBwbGF0Zm9ybSA9IHtcbiAgY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QsXG4gIGdldERvY3VtZW50RWxlbWVudCxcbiAgZ2V0Q2xpcHBpbmdSZWN0LFxuICBnZXRPZmZzZXRQYXJlbnQsXG4gIGdldEVsZW1lbnRSZWN0cyxcbiAgZ2V0Q2xpZW50UmVjdHMsXG4gIGdldERpbWVuc2lvbnMsXG4gIGdldFNjYWxlLFxuICBpc0VsZW1lbnQsXG4gIGlzUlRMXG59O1xuXG5mdW5jdGlvbiByZWN0c0FyZUVxdWFsKGEsIGIpIHtcbiAgcmV0dXJuIGEueCA9PT0gYi54ICYmIGEueSA9PT0gYi55ICYmIGEud2lkdGggPT09IGIud2lkdGggJiYgYS5oZWlnaHQgPT09IGIuaGVpZ2h0O1xufVxuXG4vLyBodHRwczovL3NhbXRob3IuYXUvMjAyMS9vYnNlcnZpbmctZG9tL1xuZnVuY3Rpb24gb2JzZXJ2ZU1vdmUoZWxlbWVudCwgb25Nb3ZlKSB7XG4gIGxldCBpbyA9IG51bGw7XG4gIGxldCB0aW1lb3V0SWQ7XG4gIGNvbnN0IHJvb3QgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgdmFyIF9pbztcbiAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAoX2lvID0gaW8pID09IG51bGwgfHwgX2lvLmRpc2Nvbm5lY3QoKTtcbiAgICBpbyA9IG51bGw7XG4gIH1cbiAgZnVuY3Rpb24gcmVmcmVzaChza2lwLCB0aHJlc2hvbGQpIHtcbiAgICBpZiAoc2tpcCA9PT0gdm9pZCAwKSB7XG4gICAgICBza2lwID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aHJlc2hvbGQgPT09IHZvaWQgMCkge1xuICAgICAgdGhyZXNob2xkID0gMTtcbiAgICB9XG4gICAgY2xlYW51cCgpO1xuICAgIGNvbnN0IGVsZW1lbnRSZWN0Rm9yUm9vdE1hcmdpbiA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qge1xuICAgICAgbGVmdCxcbiAgICAgIHRvcCxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0XG4gICAgfSA9IGVsZW1lbnRSZWN0Rm9yUm9vdE1hcmdpbjtcbiAgICBpZiAoIXNraXApIHtcbiAgICAgIG9uTW92ZSgpO1xuICAgIH1cbiAgICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5zZXRUb3AgPSBmbG9vcih0b3ApO1xuICAgIGNvbnN0IGluc2V0UmlnaHQgPSBmbG9vcihyb290LmNsaWVudFdpZHRoIC0gKGxlZnQgKyB3aWR0aCkpO1xuICAgIGNvbnN0IGluc2V0Qm90dG9tID0gZmxvb3Iocm9vdC5jbGllbnRIZWlnaHQgLSAodG9wICsgaGVpZ2h0KSk7XG4gICAgY29uc3QgaW5zZXRMZWZ0ID0gZmxvb3IobGVmdCk7XG4gICAgY29uc3Qgcm9vdE1hcmdpbiA9IC1pbnNldFRvcCArIFwicHggXCIgKyAtaW5zZXRSaWdodCArIFwicHggXCIgKyAtaW5zZXRCb3R0b20gKyBcInB4IFwiICsgLWluc2V0TGVmdCArIFwicHhcIjtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcm9vdE1hcmdpbixcbiAgICAgIHRocmVzaG9sZDogbWF4KDAsIG1pbigxLCB0aHJlc2hvbGQpKSB8fCAxXG4gICAgfTtcbiAgICBsZXQgaXNGaXJzdFVwZGF0ZSA9IHRydWU7XG4gICAgZnVuY3Rpb24gaGFuZGxlT2JzZXJ2ZShlbnRyaWVzKSB7XG4gICAgICBjb25zdCByYXRpbyA9IGVudHJpZXNbMF0uaW50ZXJzZWN0aW9uUmF0aW87XG4gICAgICBpZiAocmF0aW8gIT09IHRocmVzaG9sZCkge1xuICAgICAgICBpZiAoIWlzRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgICByZXR1cm4gcmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmF0aW8pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgcmVmZXJlbmNlIGlzIGNsaXBwZWQsIHRoZSByYXRpbyBpcyAwLiBUaHJvdHRsZSB0aGUgcmVmcmVzaFxuICAgICAgICAgIC8vIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBvZiB1cGRhdGVzLlxuICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgcmVmcmVzaChmYWxzZSwgMWUtNyk7XG4gICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVmcmVzaChmYWxzZSwgcmF0aW8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmF0aW8gPT09IDEgJiYgIXJlY3RzQXJlRXF1YWwoZWxlbWVudFJlY3RGb3JSb290TWFyZ2luLCBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSkge1xuICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgZXZlbiB0aG91Z2ggdGhlIHJhdGlvIGlzIHJlcG9ydGVkIGFzIDEsIHRoZVxuICAgICAgICAvLyBlbGVtZW50IGlzIG5vdCBhY3R1YWxseSBmdWxseSB3aXRoaW4gdGhlIEludGVyc2VjdGlvbk9ic2VydmVyJ3Mgcm9vdFxuICAgICAgICAvLyBhcmVhIGFueW1vcmUuIFRoaXMgY2FuIGhhcHBlbiB1bmRlciBwZXJmb3JtYW5jZSBjb25zdHJhaW50cy4gVGhpcyBtYXlcbiAgICAgICAgLy8gYmUgYSBidWcgaW4gdGhlIGJyb3dzZXIncyBJbnRlcnNlY3Rpb25PYnNlcnZlciBpbXBsZW1lbnRhdGlvbi4gVG9cbiAgICAgICAgLy8gd29yayBhcm91bmQgdGhpcywgd2UgY29tcGFyZSB0aGUgZWxlbWVudCdzIGJvdW5kaW5nIHJlY3Qgbm93IHdpdGhcbiAgICAgICAgLy8gd2hhdCBpdCB3YXMgYXQgdGhlIHRpbWUgd2UgY3JlYXRlZCB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuIElmIHRoZXlcbiAgICAgICAgLy8gYXJlIG5vdCBlcXVhbCB0aGVuIHRoZSBlbGVtZW50IG1vdmVkLCBzbyB3ZSByZWZyZXNoLlxuICAgICAgICByZWZyZXNoKCk7XG4gICAgICB9XG4gICAgICBpc0ZpcnN0VXBkYXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gT2xkZXIgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCBhIGBkb2N1bWVudGAgYXMgdGhlIHJvb3QgYW5kIHdpbGwgdGhyb3cgYW5cbiAgICAvLyBlcnJvci5cbiAgICB0cnkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAvLyBIYW5kbGUgPGlmcmFtZT5zXG4gICAgICAgIHJvb3Q6IHJvb3Qub3duZXJEb2N1bWVudFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoX2UpIHtcbiAgICAgIGlvID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZU9ic2VydmUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpby5vYnNlcnZlKGVsZW1lbnQpO1xuICB9XG4gIHJlZnJlc2godHJ1ZSk7XG4gIHJldHVybiBjbGVhbnVwO1xufVxuXG4vKipcbiAqIEF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgd2hlbiBuZWNlc3NhcnkuXG4gKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgZmxvYXRpbmcgZWxlbWVudCBpcyBtb3VudGVkIG9uIHRoZSBET00gb3JcbiAqIHZpc2libGUgb24gdGhlIHNjcmVlbi5cbiAqIEByZXR1cm5zIGNsZWFudXAgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgaW52b2tlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzXG4gKiByZW1vdmVkIGZyb20gdGhlIERPTSBvciBoaWRkZW4gZnJvbSB0aGUgc2NyZWVuLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9VcGRhdGVcbiAqL1xuZnVuY3Rpb24gYXV0b1VwZGF0ZShyZWZlcmVuY2UsIGZsb2F0aW5nLCB1cGRhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBjb25zdCB7XG4gICAgYW5jZXN0b3JTY3JvbGwgPSB0cnVlLFxuICAgIGFuY2VzdG9yUmVzaXplID0gdHJ1ZSxcbiAgICBlbGVtZW50UmVzaXplID0gdHlwZW9mIFJlc2l6ZU9ic2VydmVyID09PSAnZnVuY3Rpb24nLFxuICAgIGxheW91dFNoaWZ0ID0gdHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyID09PSAnZnVuY3Rpb24nLFxuICAgIGFuaW1hdGlvbkZyYW1lID0gZmFsc2VcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJlZmVyZW5jZUVsID0gdW53cmFwRWxlbWVudChyZWZlcmVuY2UpO1xuICBjb25zdCBhbmNlc3RvcnMgPSBhbmNlc3RvclNjcm9sbCB8fCBhbmNlc3RvclJlc2l6ZSA/IFsuLi4ocmVmZXJlbmNlRWwgPyBnZXRPdmVyZmxvd0FuY2VzdG9ycyhyZWZlcmVuY2VFbCkgOiBbXSksIC4uLmdldE92ZXJmbG93QW5jZXN0b3JzKGZsb2F0aW5nKV0gOiBbXTtcbiAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgIGFuY2VzdG9yU2Nyb2xsICYmIGFuY2VzdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZVxuICAgIH0pO1xuICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gIH0pO1xuICBjb25zdCBjbGVhbnVwSW8gPSByZWZlcmVuY2VFbCAmJiBsYXlvdXRTaGlmdCA/IG9ic2VydmVNb3ZlKHJlZmVyZW5jZUVsLCB1cGRhdGUpIDogbnVsbDtcbiAgbGV0IHJlb2JzZXJ2ZUZyYW1lID0gLTE7XG4gIGxldCByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gIGlmIChlbGVtZW50UmVzaXplKSB7XG4gICAgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoX3JlZiA9PiB7XG4gICAgICBsZXQgW2ZpcnN0RW50cnldID0gX3JlZjtcbiAgICAgIGlmIChmaXJzdEVudHJ5ICYmIGZpcnN0RW50cnkudGFyZ2V0ID09PSByZWZlcmVuY2VFbCAmJiByZXNpemVPYnNlcnZlcikge1xuICAgICAgICAvLyBQcmV2ZW50IHVwZGF0ZSBsb29wcyB3aGVuIHVzaW5nIHRoZSBgc2l6ZWAgbWlkZGxld2FyZS5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8xNzQwXG4gICAgICAgIHJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZShmbG9hdGluZyk7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJlb2JzZXJ2ZUZyYW1lKTtcbiAgICAgICAgcmVvYnNlcnZlRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIHZhciBfcmVzaXplT2JzZXJ2ZXI7XG4gICAgICAgICAgKF9yZXNpemVPYnNlcnZlciA9IHJlc2l6ZU9ic2VydmVyKSA9PSBudWxsIHx8IF9yZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB1cGRhdGUoKTtcbiAgICB9KTtcbiAgICBpZiAocmVmZXJlbmNlRWwgJiYgIWFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHJlZmVyZW5jZUVsKTtcbiAgICB9XG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShmbG9hdGluZyk7XG4gIH1cbiAgbGV0IGZyYW1lSWQ7XG4gIGxldCBwcmV2UmVmUmVjdCA9IGFuaW1hdGlvbkZyYW1lID8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHJlZmVyZW5jZSkgOiBudWxsO1xuICBpZiAoYW5pbWF0aW9uRnJhbWUpIHtcbiAgICBmcmFtZUxvb3AoKTtcbiAgfVxuICBmdW5jdGlvbiBmcmFtZUxvb3AoKSB7XG4gICAgY29uc3QgbmV4dFJlZlJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKTtcbiAgICBpZiAocHJldlJlZlJlY3QgJiYgIXJlY3RzQXJlRXF1YWwocHJldlJlZlJlY3QsIG5leHRSZWZSZWN0KSkge1xuICAgICAgdXBkYXRlKCk7XG4gICAgfVxuICAgIHByZXZSZWZSZWN0ID0gbmV4dFJlZlJlY3Q7XG4gICAgZnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShmcmFtZUxvb3ApO1xuICB9XG4gIHVwZGF0ZSgpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIHZhciBfcmVzaXplT2JzZXJ2ZXIyO1xuICAgIGFuY2VzdG9ycy5mb3JFYWNoKGFuY2VzdG9yID0+IHtcbiAgICAgIGFuY2VzdG9yU2Nyb2xsICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZSk7XG4gICAgICBhbmNlc3RvclJlc2l6ZSAmJiBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGUpO1xuICAgIH0pO1xuICAgIGNsZWFudXBJbyA9PSBudWxsIHx8IGNsZWFudXBJbygpO1xuICAgIChfcmVzaXplT2JzZXJ2ZXIyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyMi5kaXNjb25uZWN0KCk7XG4gICAgcmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICAgIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoZnJhbWVJZCk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHdpdGggYW4gb2JqZWN0IG9mIG92ZXJmbG93IHNpZGUgb2Zmc2V0cyB0aGF0IGRldGVybWluZSBob3cgbXVjaCB0aGVcbiAqIGVsZW1lbnQgaXMgb3ZlcmZsb3dpbmcgYSBnaXZlbiBjbGlwcGluZyBib3VuZGFyeSBvbiBlYWNoIHNpZGUuXG4gKiAtIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGJvdW5kYXJ5IGJ5IHRoYXQgbnVtYmVyIG9mIHBpeGVsc1xuICogLSBuZWdhdGl2ZSA9IGhvdyBtYW55IHBpeGVscyBsZWZ0IGJlZm9yZSBpdCB3aWxsIG92ZXJmbG93XG4gKiAtIDAgPSBsaWVzIGZsdXNoIHdpdGggdGhlIGJvdW5kYXJ5XG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZGV0ZWN0T3ZlcmZsb3dcbiAqL1xuY29uc3QgZGV0ZWN0T3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyQxO1xuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwbGFjZW1lbnQgYnkgdHJhbnNsYXRpbmcgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYWxvbmcgdGhlXG4gKiBzcGVjaWZpZWQgYXhlcy5cbiAqIEEgbnVtYmVyIChzaG9ydGhhbmQgZm9yIGBtYWluQXhpc2Agb3IgZGlzdGFuY2UpLCBvciBhbiBheGVzIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdCBtYXkgYmUgcGFzc2VkLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL29mZnNldFxuICovXG5jb25zdCBvZmZzZXQgPSBvZmZzZXQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgY2hvb3NpbmcgdGhlIHBsYWNlbWVudFxuICogdGhhdCBoYXMgdGhlIG1vc3Qgc3BhY2UgYXZhaWxhYmxlIGF1dG9tYXRpY2FsbHksIHdpdGhvdXQgbmVlZGluZyB0byBzcGVjaWZ5IGFcbiAqIHByZWZlcnJlZCBwbGFjZW1lbnQuIEFsdGVybmF0aXZlIHRvIGBmbGlwYC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hdXRvUGxhY2VtZW50XG4gKi9cbmNvbnN0IGF1dG9QbGFjZW1lbnQgPSBhdXRvUGxhY2VtZW50JDE7XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IHNoaWZ0aW5nIGl0IGluIG9yZGVyIHRvXG4gKiBrZWVwIGl0IGluIHZpZXcgd2hlbiBpdCB3aWxsIG92ZXJmbG93IHRoZSBjbGlwcGluZyBib3VuZGFyeS5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaGlmdFxuICovXG5jb25zdCBzaGlmdCA9IHNoaWZ0JDE7XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGZsaXBwaW5nIHRoZSBgcGxhY2VtZW50YFxuICogaW4gb3JkZXIgdG8ga2VlcCBpdCBpbiB2aWV3IHdoZW4gdGhlIHByZWZlcnJlZCBwbGFjZW1lbnQocykgd2lsbCBvdmVyZmxvdyB0aGVcbiAqIGNsaXBwaW5nIGJvdW5kYXJ5LiBBbHRlcm5hdGl2ZSB0byBgYXV0b1BsYWNlbWVudGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZmxpcFxuICovXG5jb25zdCBmbGlwID0gZmxpcCQxO1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCDigJRcbiAqIGZvciBpbnN0YW5jZSwgcHJldmVudCBpdCBmcm9tIG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyBib3VuZGFyeSBvciBtYXRjaCB0aGVcbiAqIHdpZHRoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXG4gKi9cbmNvbnN0IHNpemUgPSBzaXplJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBoaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50IGluIGFwcGxpY2FibGUgc2l0dWF0aW9ucywgc3VjaCBhc1xuICogd2hlbiBpdCBpcyBub3QgaW4gdGhlIHNhbWUgY2xpcHBpbmcgY29udGV4dCBhcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaGlkZVxuICovXG5jb25zdCBoaWRlID0gaGlkZSQxO1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gcG9zaXRpb24gYW4gaW5uZXIgZWxlbWVudCBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBzbyB0aGF0IGl0XG4gKiBhcHBlYXJzIGNlbnRlcmVkIHRvIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hcnJvd1xuICovXG5jb25zdCBhcnJvdyA9IGFycm93JDE7XG5cbi8qKlxuICogUHJvdmlkZXMgaW1wcm92ZWQgcG9zaXRpb25pbmcgZm9yIGlubGluZSByZWZlcmVuY2UgZWxlbWVudHMgdGhhdCBjYW4gc3BhblxuICogb3ZlciBtdWx0aXBsZSBsaW5lcywgc3VjaCBhcyBoeXBlcmxpbmtzIG9yIHJhbmdlIHNlbGVjdGlvbnMuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaW5saW5lXG4gKi9cbmNvbnN0IGlubGluZSA9IGlubGluZSQxO1xuXG4vKipcbiAqIEJ1aWx0LWluIGBsaW1pdGVyYCB0aGF0IHdpbGwgc3RvcCBgc2hpZnQoKWAgYXQgYSBjZXJ0YWluIHBvaW50LlxuICovXG5jb25zdCBsaW1pdFNoaWZ0ID0gbGltaXRTaGlmdCQxO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyB0aGF0IHdpbGwgcGxhY2UgdGhlIGZsb2F0aW5nIGVsZW1lbnRcbiAqIG5leHQgdG8gYSBnaXZlbiByZWZlcmVuY2UgZWxlbWVudC5cbiAqL1xuY29uc3QgY29tcHV0ZVBvc2l0aW9uID0gKHJlZmVyZW5jZSwgZmxvYXRpbmcsIG9wdGlvbnMpID0+IHtcbiAgLy8gVGhpcyBjYWNoZXMgdGhlIGV4cGVuc2l2ZSBgZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzYCBmdW5jdGlvbiBzbyB0aGF0XG4gIC8vIG11bHRpcGxlIGxpZmVjeWNsZSByZXNldHMgcmUtdXNlIHRoZSBzYW1lIHJlc3VsdC4gSXQgb25seSBsaXZlcyBmb3IgYVxuICAvLyBzaW5nbGUgY2FsbC4gSWYgb3RoZXIgZnVuY3Rpb25zIGJlY29tZSBleHBlbnNpdmUsIHdlIGNhbiBhZGQgdGhlbSBhcyB3ZWxsLlxuICBjb25zdCBjYWNoZSA9IG5ldyBNYXAoKTtcbiAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IHtcbiAgICBwbGF0Zm9ybSxcbiAgICAuLi5vcHRpb25zXG4gIH07XG4gIGNvbnN0IHBsYXRmb3JtV2l0aENhY2hlID0ge1xuICAgIC4uLm1lcmdlZE9wdGlvbnMucGxhdGZvcm0sXG4gICAgX2M6IGNhY2hlXG4gIH07XG4gIHJldHVybiBjb21wdXRlUG9zaXRpb24kMShyZWZlcmVuY2UsIGZsb2F0aW5nLCB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucyxcbiAgICBwbGF0Zm9ybTogcGxhdGZvcm1XaXRoQ2FjaGVcbiAgfSk7XG59O1xuXG5leHBvcnQgeyBhcnJvdywgYXV0b1BsYWNlbWVudCwgYXV0b1VwZGF0ZSwgY29tcHV0ZVBvc2l0aW9uLCBkZXRlY3RPdmVyZmxvdywgZmxpcCwgaGlkZSwgaW5saW5lLCBsaW1pdFNoaWZ0LCBvZmZzZXQsIHBsYXRmb3JtLCBzaGlmdCwgc2l6ZSB9O1xuIiwiaW1wb3J0IHsgYXV0b1VwZGF0ZSwgY29tcHV0ZVBvc2l0aW9uIH0gZnJvbSBcIkBmbG9hdGluZy11aS9kb21cIjtcblxuZXhwb3J0IGNvbnN0IFFVSUNLX0VWRU5UID0geyBjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG5leHBvcnQgY29uc3QgSVNfQlJPV1NFUiA9XG5cdHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiO1xuXG4vLyBUT0RPOiBEb2N1bWVudGF0aW9uIGZvciBwcmV0dHlOdW1iZXJcbmxldCBJTlRMX05VTTogSW50bC5OdW1iZXJGb3JtYXQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcHJldHR5TnVtYmVyKG51bWJlcjogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdGlmICghSU5UTF9OVU0pXG5cdFx0SU5UTF9OVU0gPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXG5cdFx0XHQoSVNfQlJPV1NFUiAmJiBhdHRyKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgXCJsYW5nXCIpKSB8fCBcIm5vXCIsXG5cdFx0KTtcblx0cmV0dXJuIElOVExfTlVNLmZvcm1hdChOdW1iZXIobnVtYmVyKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZTxUIGV4dGVuZHMgdW5rbm93bltdPihcblx0Y2FsbGJhY2s6ICguLi5hcmdzOiBUKSA9PiB2b2lkLFxuXHRkZWxheTogbnVtYmVyLFxuKSB7XG5cdGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cblx0cmV0dXJuICguLi5hcmdzOiBUKSA9PiB7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0XHR0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gY2FsbGJhY2soLi4uYXJncyksIGRlbGF5KTtcblx0fTtcbn1cblxuLyoqXG4gKiBhdHRyXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IGdldCwgc2V0IGFuZCByZW1vdmUgYXR0cmlidXRlc1xuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIG5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lIHRvIGdldCwgc2V0IG9yIHJlbW92ZSwgb3IgYSBvYmplY3QgdG8gc2V0IG11bHRpcGxlIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB2YWx1ZSBBIHZhbGlkIGF0dHJpYnV0ZSB2YWx1ZSBvciBudWxsIHRvIHJlbW92ZSBhdHRyaWJ1dGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dHIoXG5cdGVsOiBFbGVtZW50LFxuXHRuYW1lOiBzdHJpbmcsXG5cdHZhbHVlPzogc3RyaW5nIHwgbnVsbCxcbik6IHN0cmluZyB8IG51bGwge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKSA/PyBudWxsOyAvLyBGYWxsYmFjayB0byBudWxsIG9ubHkgaWYgZWwgaXMgdW5kZWZpbmVkXG5cdGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuXHRyZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiB1c2VJZFxuICogQHJldHVybiBBIGdlbmVyYXRlZCB1bmlxdWUgSURcbiAqL1xubGV0IGlkID0gMDtcbmNvbnN0IFVVSUQgPSBgJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDUpfWA7XG5leHBvcnQgZnVuY3Rpb24gdXNlSWQoZWw6IEVsZW1lbnQpIHtcblx0aWYgKCFlbC5pZCkgZWwuaWQgPSBgJHtVVUlEfSR7KytpZH1gO1xuXHRyZXR1cm4gZWwuaWQ7XG59XG5cbi8vIEludGVybmFsIGhlbHBlciBmb3Igb24gLyBvZmZcbmNvbnN0IGV2ZW50cyA9IChcblx0YWN0aW9uOiBcImFkZFwiIHwgXCJyZW1vdmVcIixcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Wy4uLnJlc3RdOiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPiwgLy8gU3ByZWF0IHRvIG1ha2UgYSBjb3B5IG9mIHRoZSBhcnJheVxuKTogdm9pZCA9PiB7XG5cdGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuXHRcdHJlc3RbMF0gPSB0eXBlO1xuXHRcdGVsZW1lbnRbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXSguLi5yZXN0KTtcblx0fVxufTtcblxuLyoqXG4gKiBvblxuICogQHBhcmFtIGVsZW1lbnQgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gdHlwZXMgQSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGV2ZW50IHR5cGVzXG4gKiBAcGFyYW0gbGlzdGVuZXIgQW4gZXZlbnQgbGlzdGVuZXIgZnVuY3Rpb24gb3IgbGlzdGVuZXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBvbiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4ge1xuXHRpZiAoVU5CSU5EICYmIChlbGVtZW50ID09PSB3aW5kb3cgfHwgZWxlbWVudCA9PT0gZG9jdW1lbnQpKVxuXHRcdFVOQklORC5wdXNoKCgpID0+IG9mZihlbGVtZW50LCAuLi5yZXN0KSk7XG5cdGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbn07XG5cbi8qKlxuICogb2ZmXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9mZiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBXaW5kb3cge1xuXHRcdF9tdGRzVW5iaW5kRXZlbnRzPzogTWFwPHN0cmluZywgQXJyYXk8KCkgPT4gdm9pZD4+O1xuXHR9XG59XG5cbi8qKlxuICogb25Mb2FkZWRcbiAqIEBkZXNjcmlwdGlvbiBSdW5zIGEgY2FsbGJhY2sgd2hlbiB3aW5kb3cgaXMgbG9hZGVkIGluIGJyb3dzZXIsIGFuZCBlbnN1cmVzIGV2ZW50cyBhcmUgdW5ib3VuZCBpZiBob3QgcmVsb2FkaW5nXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHJ1biB3aGVuIHRoZSBwYWdlIGlzIHJlYWR5XG4gKi9cbmxldCBVTkJJTkQ6IEFycmF5PCgpID0+IHZvaWQ+IHwgbnVsbCA9IG51bGw7XG5leHBvcnQgY29uc3Qgb25Mb2FkZWQgPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcblx0aWYgKCFJU19CUk9XU0VSIHx8ICF3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSByZXR1cm47IC8vIFNraXAgaWYgbm90IGluIGJyb3dzZXIgZW52aXJvbm1lbnRcblx0aWYgKCF3aW5kb3cuX210ZHNVbmJpbmRFdmVudHMpIHdpbmRvdy5fbXRkc1VuYmluZEV2ZW50cyA9IG5ldyBNYXAoKTtcblxuXHRjb25zdCBydW4gPSAoKSA9PlxuXHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0XHRjb25zdCBrZXkgPSBTdHJpbmcoY2FsbGJhY2spLnJlcGxhY2UoLyhcXG58XFxzKS9nLCBcIlwiKTtcblx0XHRcdHdpbmRvdy5fbXRkc1VuYmluZEV2ZW50cz8uZ2V0KGtleSk/Lm1hcCgodW5iaW5kKSA9PiB1bmJpbmQoKSk7IC8vIFVuYmluZCBwcmV2aW91cyBldmVudHNcblx0XHRcdFVOQklORCA9IFtdOyAvLyBQcmVwYXJlIHRvIGxpc3RlbiBmb3IgbmV3bHkgYm91bmQgZXZlbnRzXG5cdFx0XHRjYWxsYmFjaygpOyAvLyBSdW4gYmluZGluZ1xuXHRcdFx0d2luZG93Ll9tdGRzVW5iaW5kRXZlbnRzPy5zZXQoa2V5LCBVTkJJTkQ/LnNsaWNlKDApKTsgLy8gU3RvcmUgZm9yIGxhdGVyIHVuYmluZGluZ1xuXHRcdFx0VU5CSU5EID0gbnVsbDsgLy8gU3RvcCBsaXN0ZW5pbmcgZm9yIG5ld2x5IGJvdW5kIGV2ZW50c1xuXHRcdH0pO1xuXG5cdGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHJ1bigpO1xuXHRlbHNlIG9uKHdpbmRvdywgXCJsb2FkXCIsIHJ1bik7XG59O1xuXG5jb25zdCBBTkNIT1JFRCA9IG5ldyBXZWFrTWFwPEVsZW1lbnQsIFJldHVyblR5cGU8dHlwZW9mIGF1dG9VcGRhdGU+PigpO1xuZXhwb3J0IGZ1bmN0aW9uIGFuY2hvclBvc2l0aW9uKFxuXHR0YXJnZXQ6IEhUTUxFbGVtZW50LFxuXHRhbmNob3I6IGZhbHNlIHwgRWxlbWVudCxcblx0b3B0aW9ucz86IFBhcmFtZXRlcnM8dHlwZW9mIGNvbXB1dGVQb3NpdGlvbj5bMl0sXG4pIHtcblx0QU5DSE9SRUQuZ2V0KHRhcmdldCk/LigpOyAvLyBVbmJpbmQgcHJldmlvdXMgYW5jaG9yIHBvc2l0aW9uXG5cdEFOQ0hPUkVELmRlbGV0ZSh0YXJnZXQpO1xuXG5cdGlmIChhbmNob3IpXG5cdFx0QU5DSE9SRUQuc2V0KFxuXHRcdFx0dGFyZ2V0LFxuXHRcdFx0YXV0b1VwZGF0ZShhbmNob3IsIHRhcmdldCwgKCkgPT4ge1xuXHRcdFx0XHRpZiAoIXRhcmdldC5pc0Nvbm5lY3RlZCB8fCAhYW5jaG9yLmlzQ29ubmVjdGVkIHx8IHRhcmdldC5oaWRkZW4pXG5cdFx0XHRcdFx0cmV0dXJuIGFuY2hvclBvc2l0aW9uKHRhcmdldCwgZmFsc2UpO1xuXHRcdFx0XHRjb21wdXRlUG9zaXRpb24oYW5jaG9yLCB0YXJnZXQsIG9wdGlvbnMpLnRoZW4oKHsgeCwgeSB9KSA9PiB7XG5cdFx0XHRcdFx0dGFyZ2V0LnN0eWxlLmxlZnQgPSBgJHt4fXB4YDtcblx0XHRcdFx0XHR0YXJnZXQuc3R5bGUudG9wID0gYCR7eX1weGA7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSksXG5cdFx0KTtcbn1cblxuLyoqXG4gKiBTcGVlZCB1cCBNdXRhdGlvbk9ic2VydmVyIGJ5IGRlYm91bmNpbmcgYW5kIG9ubHkgcnVubmluZyB3aGVuIHBhZ2UgaXMgdmlzaWJsZVxuICogQHJldHVybiBuZXcgTXV0YWlvbk9ic2VydmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrOiBNdXRhdGlvbkNhbGxiYWNrKSB7XG5cdGxldCBxdWV1ZSA9IDA7XG5cblx0Y29uc3Qgb25GcmFtZSA9ICgpID0+IHNldFRpbWVvdXQob25UaW1lciwgMjAwKTsgLy8gVXNlIGJvdGggcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGFuZCBzZXRUaW1lb3V0IHRvIGRlYm91bmNlIGFuZCBvbmx5IHJ1biB3aGVuIHZpc2libGVcblx0Y29uc3Qgb25UaW1lciA9ICgpID0+IHtcblx0XHRjYWxsYmFjayhbXSwgb2JzZXJ2ZXIpO1xuXHRcdG9ic2VydmVyLnRha2VSZWNvcmRzKCk7IC8vIENsZWFyIHJlY29yZHMgdG8gYXZvaWQgcnVubmluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuXHRcdHF1ZXVlID0gMDtcblx0fTtcblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG5cdFx0aWYgKCFxdWV1ZSkgcXVldWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUob25GcmFtZSk7XG5cdH0pO1xuXG5cdHJldHVybiBvYnNlcnZlcjtcbn1cblxuLyoqXG4gKiBvbk11dGF0aW9uXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IG9ic2VydmUgbXV0YXRpb25zIG9uIGEgc3BlY2lmaWMgY2xhc3MgbmFtZVxuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgY2xhc3MgbmFtZSB0byBvYnNlcnZlXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHJ1biB3aGVuIG11dGF0aW9ucyBhcmUgZGV0ZWN0ZWRcbiAqL1xuY29uc3QgTVVUQVRPUlMgPSBuZXcgV2Vha01hcDxFbGVtZW50LCBBcnJheTwoKSA9PiB2b2lkPj4oKTtcbmV4cG9ydCBjb25zdCBvbk11dGF0aW9uID0gPFQgZXh0ZW5kcyBFbGVtZW50Pihcblx0ZWw6IEVsZW1lbnQsXG5cdGNsYXNzTmFtZTogc3RyaW5nLFxuXHRjYWxsYmFjazogKGVsZW1zOiBIVE1MQ29sbGVjdGlvbk9mPFQ+KSA9PiB2b2lkLFxuKSA9PiB7XG5cdGlmICghSVNfQlJPV1NFUiB8fCAhd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSkgcmV0dXJuOyAvLyBTa2lwIGlmIG5vdCBpbiBicm93c2VyIGVudmlyb25tZW50XG5cdGNvbnN0IGVsZW1zID0gZWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpO1xuXHRjb25zdCBtdXRhdG9yID0gTVVUQVRPUlMuZ2V0KGVsKSB8fCBbXTtcblxuXHRpZiAoIW11dGF0b3IubGVuZ3RoKSB7XG5cdFx0TVVUQVRPUlMuc2V0KGVsLCBtdXRhdG9yKTtcblx0XHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKChfLCBvYnNlcnZlcikgPT4ge1xuXHRcdFx0aWYgKGVsLmlzQ29ubmVjdGVkICYmIG11dGF0b3I/Lmxlbmd0aCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIG11dGF0b3IpIGNhbGxiYWNrKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRNVVRBVE9SUy5kZWxldGUoZWwpO1xuXHRcdFx0fVxuXHRcdH0pLm9ic2VydmUoZWwsIHtcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wiY2xhc3NcIiwgXCJoaWRkZW5cIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0c3VidHJlZTogdHJ1ZSxcblx0XHR9KTtcblx0fVxuXHRtdXRhdG9yLnB1c2goKCkgPT4gY2FsbGJhY2soZWxlbXMgYXMgSFRNTENvbGxlY3Rpb25PZjxUPikpO1xufTtcblxuLyoqXG4gKiBpc0lucHV0TGlrZVxuICogQGRlc2NyaXB0aW9uIENoZWNrIGlmIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKiBAcGFyYW0gZWwgVGhlIGVsZW1lbnQgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKi9cbmV4cG9ydCBjb25zdCBpc0lucHV0TGlrZSA9IChlbDogdW5rbm93bik6IGVsIGlzIEhUTUxJbnB1dEVsZW1lbnQgPT5cblx0ZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcInZhbGlkaXR5XCIgaW4gZWwgJiZcblx0IShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KTtcblxuLyoqXG4gKiB0b0N1c3RvbUVsZW1lbnRQcm9wc1xuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBjb252ZXJ0IHByb3BzIHRvIGN1c3RvbSBlbGVtZW50IGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcHMgdG8gY29udmVydFxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBwcm9wc1xuICovXG5jb25zdCBTRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xuZXhwb3J0IGNvbnN0IHRvQ3VzdG9tRWxlbWVudFByb3BzID0gKFxuXHR7IGNsYXNzTmFtZSwgaGlkZGVuLCBvcGVuLCAuLi5yZXN0IH06IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRrbGFzcz86IHN0cmluZyxcbikgPT4ge1xuXHRyZXN0LnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyA9IHRydWU7IC8vIE1ha2UgTmV4dC5qcyBoYXBweVxuXHRpZiAocmVzdFtTRUxFQ1RFRF0gIT09IHVuZGVmaW5lZClcblx0XHRyZXN0W1NFTEVDVEVEXSA9IGAkeyhyZXN0W1NFTEVDVEVEXSB8fCBcImZhbHNlXCIpICE9PSBcImZhbHNlXCJ9YDsgLy8gRW5zdXJlIGFyaWEtc2VsZWN0ZWQgYm9vbGVhbiBpcyBzdHJpbmdcblx0aWYgKGNsYXNzTmFtZSB8fCBrbGFzcykgcmVzdC5jbGFzcyA9IGAke2tsYXNzfSAke2NsYXNzTmFtZX1gLnRyaW0oKTsgLy8gVXNlIGNsYXNzIGluc3RlYWQgb2YgY2xhc3NOYW1lXG5cdGlmIChoaWRkZW4pIHJlc3QuaGlkZGVuID0gdHJ1ZTsgLy8gRW5zdXJlIGJvb2xlYW4gcHJvcCBiZWhhdmlvdXJcblx0aWYgKG9wZW4pIHJlc3Qub3BlbiA9IHRydWU7IC8vIEVuc3VyZSBib29sZWFuIHByb3AgYmVoYXZpb3VyXG5cdHJldHVybiByZXN0O1xufTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBJU19CUk9XU0VSLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19CUkVBRENSVU1CUyA9IGAuJHtzdHlsZXMuYnJlYWRjcnVtYnMuc3BsaXQoXCIgXCIpWzBdfWA7XG5jb25zdCBDU1NfQ0FSRCA9IGAuJHtzdHlsZXMuY2FyZC5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENTU19DSElQID0gYC4ke3N0eWxlcy5jaGlwLnNwbGl0KFwiIFwiKVswXX1gO1xuY29uc3QgQ1NTX0hFTFBURVhUID0gYC4ke3N0eWxlcy5oZWxwdGV4dC5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENTU19QQUdJTkFUSU9OID0gYC4ke3N0eWxlcy5wYWdpbmF0aW9uLnNwbGl0KFwiIFwiKVswXX1gO1xuY29uc3QgQ0xJQ0tTID0gYHN1bW1hcnksdS1zdW1tYXJ5LGEsYnV0dG9uLFtyb2xlPVwidGFiXCJdLFtyb2xlPVwiYnV0dG9uXCJdYDtcbmNvbnN0IEVWRU5UUyA9IFwiY2xpY2ssdG9nZ2xlLHN1Ym1pdCxjaGFuZ2VcIjtcbmNvbnN0IE1BVE9NTyA9IFwibWF0dGlsc3luZXQubWF0b21vLmNsb3VkXCI7XG5jb25zdCBCQU5ORVIgPSBcIm10ZHMtYW5hbHl0aWNzLWJhbm5lclwiOyAvLyBEaWFsb2cgdG8gc2hvdyBNYXRvbW8gc2NyaXB0IGxvYWRpbmdcbmNvbnN0IEJBTk5FUl9VUkwgPVxuXHRcImh0dHBzOi8vd3d3Lm1hdHRpbHN5bmV0Lm5vL29tLW1hdHRpbHN5bmV0L3BlcnNvbnZlcm5lcmtsYWVyaW5nL2luZm9ybWFzam9uc2thcHNsZXJcIjtcblxudHlwZSBNYXRvbW8gPSAoXG5cdHwgc3RyaW5nXG5cdHwgbnVtYmVyXG5cdHwgYm9vbGVhblxuXHR8IERvY3VtZW50XG5cdHwgRWxlbWVudFxuXHR8ICgodGhpczogUmVjb3JkPHN0cmluZywgPFQ+KCkgPT4gVD4pID0+IHZvaWQpXG4pW107XG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBXaW5kb3cge1xuXHRcdF9wYXE/OiBNYXRvbW9bXTtcblx0XHRfbXRtPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPltdO1xuXHRcdF9tdGRzVHJhY2tpbmc/OiBBbmFseXRpY3NBY3Rpb25zW1wiaW5pdFwiXTtcblx0XHRfbXRkc1VudHJhY2s/OiAoKSA9PiB2b2lkO1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIEFuYWx5dGljc0FjdGlvbnMgPSB7XG5cdGluaXQ6IHtcblx0XHRlbmFibGVkPzogYm9vbGVhbiB8IFwiZGVidWdcIjtcblx0XHRjb25zZW50PzogXCJjdXN0b21cIiB8IHRydWU7XG5cdH0gJiAoXG5cdFx0fCB7XG5cdFx0XHRcdG1hdG9tb0lkOiBudW1iZXIgfCBzdHJpbmc7XG5cdFx0XHRcdG1hdG9tb1RhZ01hbmFnZXJJZD86IG5ldmVyO1xuXHRcdCAgfVxuXHRcdHwge1xuXHRcdFx0XHRtYXRvbW9JZD86IG5ldmVyO1xuXHRcdFx0XHRtYXRvbW9UYWdNYW5hZ2VySWQ6IHN0cmluZztcblx0XHQgIH1cblx0KTtcblx0cGFnZXZpZXc6IHtcblx0XHR1cmw/OiBzdHJpbmc7XG5cdFx0dGl0bGU/OiBzdHJpbmc7XG5cdH07XG5cdGV2ZW50OiB7XG5cdFx0Y2F0ZWdvcnk6IHN0cmluZztcblx0XHRhY3Rpb246IHN0cmluZztcblx0XHRuYW1lPzogc3RyaW5nO1xuXHRcdHZhbHVlPzogbnVtYmVyO1xuXHR9O1xuXHRzZWFyY2g6IHtcblx0XHRxdWVyeTogc3RyaW5nO1xuXHRcdGNhdGVnb3J5Pzogc3RyaW5nO1xuXHRcdHJlc3VsdHM/OiBudW1iZXI7XG5cdH07XG5cdG1hdG9tbzogTWF0b21vO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFuYWx5dGljczxBY3Rpb24gZXh0ZW5kcyBrZXlvZiBBbmFseXRpY3NBY3Rpb25zPihcblx0YWN0aW9uOiBBY3Rpb24sXG5cdGFyZ3MgPSB7fSBhcyBBbmFseXRpY3NBY3Rpb25zW0FjdGlvbl0sXG4pIHtcblx0aWYgKCFJU19CUk9XU0VSKSByZXR1cm47XG5cdGlmICghd2luZG93Ll9wYXEpIHtcblx0XHR3aW5kb3cuX3BhcSA9IFtdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wiSGVhdG1hcFNlc3Npb25SZWNvcmRpbmc6OmRpc2FibGVcIl0pOyAvLyBEaXNhYmxlIGhlYXRtYXBzIGJ5IGRlZmF1bHQgYXMgdGhpcyByZXF1aXJlIGNvb2tpZXNcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcImVuYWJsZUxpbmtUcmFja2luZ1wiXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRUcmFja2VyVXJsXCIsIGBodHRwczovLyR7TUFUT01PfS9tYXRvbW8ucGhwYF0pO1xuXHR9XG5cdGlmICghd2luZG93Ll9tdG0pIHtcblx0XHR3aW5kb3cuX210bSA9IHdpbmRvdy5fbXRtIHx8IFtdOyAvLyBQcmVwYXJlIE1hdG9tbyBUYWcgTWFuYWdlclxuXHRcdHdpbmRvdy5fbXRtLnB1c2goeyBcIm10bS5zdGFydFRpbWVcIjogRGF0ZS5ub3coKSwgZXZlbnQ6IFwibXRtLlN0YXJ0XCIgfSk7XG5cdH1cblxuXHRpZiAoYWN0aW9uID09PSBcImluaXRcIikge1xuXHRcdHdpbmRvdy5fbXRkc1RyYWNraW5nID0ge1xuXHRcdFx0ZW5hYmxlZDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICE9PSBcImxvY2FsaG9zdFwiLFxuXHRcdFx0Li4ud2luZG93Ll9tdGRzVHJhY2tpbmcsXG5cdFx0XHQuLi5hcmdzLFxuXHRcdH0gYXMgQW5hbHl0aWNzQWN0aW9uc1tcImluaXRcIl07XG5cdFx0Y29uc3QgeyBjb25zZW50LCBlbmFibGVkLCBtYXRvbW9JZCwgbWF0b21vVGFnTWFuYWdlcklkIH0gPVxuXHRcdFx0d2luZG93Ll9tdGRzVHJhY2tpbmc7XG5cblx0XHRpZiAobWF0b21vSWQpIHdpbmRvdy5fcGFxLnB1c2goW1wic2V0U2l0ZUlkXCIsIG1hdG9tb0lkXSk7XG5cdFx0aWYgKGVuYWJsZWQpIHtcblx0XHRcdGlmIChjb25zZW50ICE9PSBcImN1c3RvbVwiKSByZW5kZXJCYW5uZXIoKTtcblx0XHRcdGNvbnN0IHNyYyA9IG1hdG9tb1RhZ01hbmFnZXJJZFxuXHRcdFx0XHQ/IGBodHRwczovL2Nkbi5tYXRvbW8uY2xvdWQvJHtNQVRPTU99L2NvbnRhaW5lcl8ke21hdG9tb1RhZ01hbmFnZXJJZH0uanNgXG5cdFx0XHRcdDogYGh0dHBzOi8vY2RuLm1hdG9tby5jbG91ZC8ke01BVE9NT30vbWF0b21vLmpzYDtcblxuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihgc2NyaXB0W3NyYz1cIiR7c3JjfVwiXWApIHx8XG5cdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kKFxuXHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSwge1xuXHRcdFx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdFx0XHRzcmMsXG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHdpbmRvdy5fbXRkc1RyYWNraW5nPy5lbmFibGVkID09PSBmYWxzZSkgcmV0dXJuO1xuXHRpZiAod2luZG93Ll9tdGRzVHJhY2tpbmc/LmVuYWJsZWQgPT09IFwiZGVidWdcIilcblx0XHRyZXR1cm4gY29uc29sZS5pbmZvKGBhbmFseXRpY3MoXCIke2FjdGlvbn1cIiwgYCwgYXJncywgXCIpXCIpO1xuXG5cdGlmIChhY3Rpb24gPT09IFwicGFnZXZpZXdcIikge1xuXHRcdGNvbnN0IHsgdXJsLCB0aXRsZSB9ID0gYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wicGFnZXZpZXdcIl07XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRDdXN0b21VcmxcIiwgdXJsIHx8IGxvY2F0aW9uLmhyZWZdKTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldERvY3VtZW50VGl0bGVcIiwgdGl0bGUgfHwgZG9jdW1lbnQudGl0bGVdKTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInRyYWNrUGFnZVZpZXdcIl0pO1xuXHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJldmVudFwiKSB7XG5cdFx0Y29uc3QgeyBjYXRlZ29yeSwgYWN0aW9uLCBuYW1lLCB2YWx1ZSB9ID0gYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wiZXZlbnRcIl07XG5cdFx0Y29uc3QgZXZlbnQgPSBbXCJ0cmFja0V2ZW50XCIsIGNhdGVnb3J5LCBhY3Rpb24sIG5hbWUsIHZhbHVlXTtcblxuXHRcdC8vIFdlIGRvIG5vdCB3YW50IHRvIHRyYWNrIGV2ZW50cyB3aXRoIGhhc2ggaW4gVVJMIGFzIHRoaXMgY2F1c2VzIGhhcmQtdG8tcmVhZCBkYXRhLFxuXHRcdC8vIHNvIHRlbXBvcmFyaWx5IHJlbW92ZSB0aGUgaGFzaCBwYXJ0LCBhbmQgYWRkIGl0IGJhY2sgYWZ0ZXIgdGhlIGV2ZW50IGlzIHB1c2hlZFxuXHRcdGxldCB1cmwgPSBsb2NhdGlvbi5ocmVmO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1xuXHRcdFx0ZnVuY3Rpb24gKCkge1xuXHRcdFx0XHR1cmwgPSB0aGlzLmdldEN1cnJlbnRVcmw8c3RyaW5nPigpO1xuXHRcdFx0fSxcblx0XHRdKTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCB1cmwuc3BsaXQoXCIjXCIpWzBdXSk7IC8vIFNraXAgaGFzaCBwYXJ0IG9mIFVSTFxuXHRcdHdpbmRvdy5fcGFxLnB1c2goZXZlbnQuZmlsdGVyKCh2KSA9PiB2ICE9PSB1bmRlZmluZWQpKTsgLy8gUHVzaCBldmVudFxuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0Q3VzdG9tVXJsXCIsIHVybF0pOyAvLyBSZXZlcnJ0IHRvIG9yaWdpbmFsIFVSTCB3aXRoIGhhc2hcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwic2VhcmNoXCIpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRxdWVyeSxcblx0XHRcdGNhdGVnb3J5ID0gZmFsc2UsXG5cdFx0XHRyZXN1bHRzID0gZmFsc2UsXG5cdFx0fSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInNlYXJjaFwiXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInRyYWNrU2l0ZVNlYXJjaFwiLCBxdWVyeSwgY2F0ZWdvcnksIHJlc3VsdHNdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwibWF0b21vXCIpIHtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcIm1hdG9tb1wiXSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQmFubmVyKCkge1xuXHRjb25zdCBoYXNTZWVuQmFubmVyID1cblx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZChCQU5ORVIpIHx8IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShCQU5ORVIpO1xuXG5cdGlmIChoYXNTZWVuQmFubmVyKSByZXR1cm47XG5cblx0ZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEhUTUwoXG5cdFx0XCJhZnRlcmJlZ2luXCIsXG5cdFx0YDxkaWFsb2cgaWQ9XCIke0JBTk5FUn1cIiBkYXRhLWFuYWx5dGljcz1cImlnbm9yZVwiPjxzdHlsZT5cblx0XHRcdFx0IyR7QkFOTkVSfVtvcGVuXSB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGJhY2tncm91bmQ6ICMxMTZlNmI7IGJvcmRlci1yYWRpdXM6IC41ZW07IGJvcmRlcjogMDsgYm94LXNoYWRvdzogMCAuMjVlbSAuNWVtIHJnYmEoMCwwLDAsLjMpOyBjb2xvcjogI2ZmZjsgZm9udC1zaXplOiAuODc1ZW07IGluc2V0OiBhdXRvIGF1dG8gMWVtIDFlbTsgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gMmVtKTsgb3V0bGluZTogMDsgcGFkZGluZzogLjVlbTsgcG9zaXRpb246IGZpeGVkOyB6LWluZGV4OiA5OTk5OSB9XG5cdFx0XHRcdCMke0JBTk5FUn0gYnV0dG9uIHsgYWxsOiB1bnNldDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBmbGV4OyB3aWR0aDogMS41ZW07IGhlaWdodDogMS41ZW07IGZvbnQ6IDMwMCAxLjVlbS8xLjM1IHNhbnMtc2VyaWY7IGJvcmRlci1yYWRpdXM6IC4yNWVtOyBwbGFjZS1jb250ZW50OiBjZW50ZXI7IHRyYW5zaXRpb246IC4yczsgdHJhbnNpdGlvbi1wcm9wZXJ0eTogYmFja2dyb3VuZCwgc2NhbGUgfVxuXHRcdFx0XHQjJHtCQU5ORVJ9IGJ1dHRvbjpmb2N1cy12aXNpYmxlIHsgb3V0bGluZTogMnB4IHNvbGlkIH1cblx0XHRcdFx0IyR7QkFOTkVSfSBidXR0b246aG92ZXIgeyBiYWNrZ3JvdW5kOiAjMGE0ZTRmIH1cblx0XHRcdFx0IyR7QkFOTkVSfSBidXR0b246YWN0aXZlIHsgYmFja2dyb3VuZDogIzA1NDQ0OTsgc2NhbGU6IC45IH1cblx0XHRcdFx0IyR7QkFOTkVSfSBwIHsgbWFyZ2luOiAwIC4yNWVtIH1cblx0XHRcdDwvc3R5bGU+XG5cdFx0XHQ8cD5WaSBicnVrZXIgPGEgaHJlZj1cIiR7QkFOTkVSX1VSTH1cIiB0YXJnZXQ9XCJfYmxhbmtcIj5pbmZvcm1hc2pvbnNrYXBzbGVyPC9hPiBmb3Igw6UgZm9yYmVkcmUgYnJ1a2Vyb3BwbGV2ZWxzZW4uPC9wPlxuXHRcdFx0PGZvcm0gbWV0aG9kPVwiZGlhbG9nXCIgZGF0YS1hbmFseXRpY3M9XCJpZ25vcmVcIj48YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBhcmlhLWxhYmVsPVwiT0tcIj4mdGltZXM7PC9idXR0b24+PC9mb3JtPlxuXHRcdDwvZGlhbG9nPmAsXG5cdCk7XG5cdGNvbnN0IGJhbm5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKEJBTk5FUikgYXMgSFRNTERpYWxvZ0VsZW1lbnQ7XG5cdGNvbnN0IG9uQ2xvc2UgPSAoKSA9PiB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oQkFOTkVSLCBcInNlZW5cIik7XG5cdGJhbm5lci5hZGRFdmVudExpc3RlbmVyKFwiY2xvc2VcIiwgb25DbG9zZSwgeyBvbmNlOiB0cnVlIH0pO1xuXHRiYW5uZXIuc2hvdygpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVUcmFjayhldmVudDogRXZlbnQpIHtcblx0aWYgKHdpbmRvdy5fbXRkc1RyYWNraW5nPy5lbmFibGVkKSBzZXRUaW1lb3V0KHByb2Nlc3NUcmFjaywgMCwgZXZlbnQpOyAvLyBMZXQgb3RoZXIgZXZlbnRzIHByb2Nlc3MgZmlyc3Rcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1RyYWNrKHsgdHlwZSwgdGFyZ2V0IH06IEV2ZW50KSB7XG5cdGNvbnN0IGVsID0gdHlwZSA9PT0gXCJjbGlja1wiID8gKHRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKENMSUNLUykgOiB0YXJnZXQ7XG5cdGlmICghKGVsIGluc3RhbmNlb2YgRWxlbWVudCkgfHwgZWwuY2xvc2VzdCgnW2RhdGEtYW5hbHl0aWNzPVwiaWdub3JlXCJdJykpXG5cdFx0cmV0dXJuO1xuXG5cdGxldCBhY3Rpb24gPSBcImNsaWNrXCI7XG5cdGxldCBjYXRlZ29yeSA9IFwiQnV0dG9uXCI7XG5cdGxldCBuYW1lID0gbGFiZWwoZWwpIHx8IGhlYWRpbmcoZWwpIHx8IGF0dHIoZWwsIFwiZGF0YS10b29sdGlwXCIpIHx8IFwiXCI7XG5cblx0aWYgKHR5cGUgPT09IFwic3VibWl0XCIpIHtcblx0XHRjYXRlZ29yeSA9IFwiRm9ybVwiO1xuXHRcdGFjdGlvbiA9IFwic3VibWl0XCI7XG5cdFx0bmFtZSA9IG5hbWUgfHwgZG9jdW1lbnQudGl0bGU7XG5cdH0gZWxzZSBpZiAodHlwZSA9PT0gXCJ0b2dnbGVcIikge1xuXHRcdGlmICghZWwubWF0Y2hlcyhcImRpYWxvZzptb2RhbFwiKSkgcmV0dXJuOyAvLyBTa2lwIG5vbi1tb2RhbCBkaWFsb2dzXG5cdFx0Y2F0ZWdvcnkgPSBcIkRpYWxvZ1wiO1xuXHRcdGFjdGlvbiA9IFwib3BlblwiO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT09IFwiY2hhbmdlXCIpIHtcblx0XHRjb25zdCB0eXBlID0gYXR0cihlbCwgXCJ0eXBlXCIpO1xuXHRcdGNvbnN0IGdyb3VwID1cblx0XHRcdHR5cGUgPT09IFwiY2hlY2tib3hcIiB8fCB0eXBlID09PSBcInJhZGlvXCIgPyBlbC5jbG9zZXN0KFwiZmllbGRzZXRcIikgOiBudWxsO1xuXG5cdFx0Y2F0ZWdvcnkgPSBcIkZvcm1cIjtcblx0XHRhY3Rpb24gPSBcImNoYW5nZVwiO1xuXHRcdG5hbWUgPVxuXHRcdFx0bGFiZWwoZ3JvdXAgfHwgZWwpIHx8XG5cdFx0XHR0ZXh0KGdyb3VwPy5xdWVyeVNlbGVjdG9yKFwibGVnZW5kXCIpKSB8fFxuXHRcdFx0dGV4dCgoZWwgYXMgSFRNTElucHV0RWxlbWVudCk/LmxhYmVscz8uWzBdKTtcblx0fSBlbHNlIGlmIChhdHRyKGVsLCBcInJvbGVcIikgPT09IFwidGFiXCIpIHtcblx0XHRjYXRlZ29yeSA9IFwiVGFiXCI7XG5cdFx0YWN0aW9uID0gXCJuYXZpZ2F0ZVwiO1xuXHR9IGVsc2UgaWYgKGF0dHIoZWwsIFwicG9wb3ZlcnRhcmdldFwiKSkge1xuXHRcdGlmICghcG9wb3ZlcihlbCk/Lm1hdGNoZXMoXCI6cG9wb3Zlci1vcGVuXCIpKSByZXR1cm47IC8vIFNraXAgaWYgbm90IG9wZW5cblx0XHRjYXRlZ29yeSA9IGVsLmNsb3Nlc3QoQ1NTX0hFTFBURVhUKSA/IFwiSGVscFRleHRcIiA6IFwiUG9wb3ZlclwiO1xuXHRcdGFjdGlvbiA9IFwib3BlblwiO1xuXHR9IGVsc2UgaWYgKGVsLm5vZGVOYW1lLmVuZHNXaXRoKFwiU1VNTUFSWVwiKSkge1xuXHRcdGlmICghKGVsLnBhcmVudEVsZW1lbnQgYXMgSFRNTERldGFpbHNFbGVtZW50KS5vcGVuKSByZXR1cm47IC8vIFNraXAgaWYgbm90IG9wZW5cblx0XHRjYXRlZ29yeSA9IFwiRGV0YWlsc1wiO1xuXHRcdGFjdGlvbiA9IFwib3BlblwiO1xuXHR9IGVsc2UgaWYgKGF0dHIoZWwsIFwiZGF0YS1jb21tYW5kXCIpID09PSBcInRvZ2dsZS1hcHAtZXhwYW5kZWRcIikge1xuXHRcdGNvbnN0IG9wZW4gPSBzdHlsZShlbCwgXCItLW10ZHMtdG9vbHRpcC1wb3NpdGlvblwiKSA9PT0gXCJub25lXCI7XG5cdFx0Y2F0ZWdvcnkgPSBcIlNpZGViYXJcIjtcblx0XHRhY3Rpb24gPSBvcGVuID8gXCJleHBhbmRcIiA6IFwibWluaW1pemVcIjtcblx0XHRuYW1lID0gKG9wZW4gJiYgYXR0cihlbCwgXCJkYXRhLXRvb2x0aXBcIikpIHx8IHRleHQoZWwpO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoQ1NTX0JSRUFEQ1JVTUJTKSkge1xuXHRcdGNhdGVnb3J5ID0gXCJCcmVhZGNydW1ic1wiO1xuXHRcdGFjdGlvbiA9IFwibmF2aWdhdGVcIjtcblx0fSBlbHNlIGlmIChlbC5jbG9zZXN0KENTU19QQUdJTkFUSU9OKSkge1xuXHRcdGNhdGVnb3J5ID0gXCJQYWdpbnRhdGlvblwiO1xuXHRcdGFjdGlvbiA9IFwibmF2aWdhdGVcIjtcblx0fSBlbHNlIGlmIChlbC5jbG9zZXN0KENTU19DQVJEKSkge1xuXHRcdGNhdGVnb3J5ID0gXCJDYXJkXCI7XG5cdFx0YWN0aW9uID0gZWwgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudCA/IFwibmF2aWdhdGVcIiA6IFwiY2xpY2tcIjtcblx0fSBlbHNlIGlmIChlbC5jbG9zZXN0KENTU19DSElQKSkge1xuXHRcdGNhdGVnb3J5ID0gXCJDaGlwXCI7XG5cdFx0YWN0aW9uID0gZWwuaGFzQXR0cmlidXRlKFwiZGF0YS1yZW1vdmFibGVcIikgPyBcInJlbW92ZVwiIDogXCJjbGlja1wiO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoXCJ0aFthcmlhLXNvcnRdXCIpKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIlRhYmxlXCI7XG5cdFx0YWN0aW9uID0gXCJzb3J0XCI7XG5cdH0gZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudCkge1xuXHRcdGNhdGVnb3J5ID0gXCJMaW5rXCI7XG5cdFx0YWN0aW9uID0gZWwucHJvdG9jb2wgPT09IFwibWFpbHRvOlwiID8gXCJlbWFpbFwiIDogXCJuYXZpZ2F0ZVwiO1xuXHRcdGlmIChlbC5oYXNBdHRyaWJ1dGUoXCJkb3dubG9hZFwiKSkgYWN0aW9uID0gXCJkb3dubG9hZFwiO1xuXHRcdGVsc2UgaWYgKGVsLmhhc2ggJiYgZWwuaHJlZi5zdGFydHNXaXRoKGxvY2F0aW9uLmhyZWYuc3BsaXQoXCIjXCIpWzBdKSlcblx0XHRcdGFjdGlvbiA9IFwiYW5jaG9yXCI7IC8vIE9ubHkgdHJhY2sgYXMgYW5jaG9yIGlmIHNhbWUgcGFnZVxuXHR9IGVsc2UgaWYgKGVsLmhhc0F0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIikpIHtcblx0XHRpZiAoYXR0cihlbCwgXCJhcmlhLWV4cGFuZGVkXCIpICE9PSBcInRydWVcIikgcmV0dXJuOyAvLyBTa2lwIGlmIG5vdCBvcGVuXG5cdFx0Y2F0ZWdvcnkgPSBcIkV4cGFuZFwiO1xuXHRcdGFjdGlvbiA9IFwib3BlblwiO1xuXHR9XG5cblx0Ly8gUmVzcGVjdCBhdHRyaWJ1dGVzIGFuZCBzZW5kXG5cdGFuYWx5dGljcyhcImV2ZW50XCIsIHtcblx0XHRjYXRlZ29yeTogYXR0cihlbCwgXCJkYXRhLWFuYWx5dGljcy1jYXRlZ29yeVwiKSA/PyBjYXRlZ29yeSxcblx0XHRhY3Rpb246IGF0dHIoZWwsIFwiZGF0YS1hbmFseXRpY3MtYWN0aW9uXCIpID8/IGFjdGlvbixcblx0XHRuYW1lOiBhdHRyKGVsLCBcImRhdGEtYW5hbHl0aWNzLW5hbWVcIikgPz8gbmFtZSxcblx0fSk7XG59XG5cbi8vIFV0aWxpdGllc1xuY29uc3QgdGV4dCA9IChlbD86IEVsZW1lbnQgfCBudWxsKSA9PiBlbD8udGV4dENvbnRlbnQ/LnRyaW0oKSB8fCBcIlwiO1xuY29uc3QgbGFiZWwgPSAoZWw/OiBFbGVtZW50IHwgbnVsbCkgPT4gKGVsICYmIGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiKSkgfHwgXCJcIjtcbmNvbnN0IHBvcG92ZXIgPSAoZWw6IEVsZW1lbnQpID0+XG5cdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGF0dHIoZWwsIFwicG9wb3ZlcnRhcmdldFwiKSB8fCBcIlwiKTtcbmNvbnN0IHN0eWxlID0gKGVsOiBFbGVtZW50LCBrZXk6IHN0cmluZykgPT5cblx0d2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLmdldFByb3BlcnR5VmFsdWUoa2V5KT8udHJpbSgpO1xuY29uc3QgaGVhZGluZyA9IChlbDogRWxlbWVudCkgPT4ge1xuXHRjb25zdCBib2R5ID0gdGV4dChlbCk7XG5cdGNvbnN0IGhlYWQgPSB0ZXh0KGVsLnF1ZXJ5U2VsZWN0b3IoXCJoMSxoMixoMyxoNCxoNSxoNlwiKSk7IC8vIE5vdGU6IGhlYWQgbWlnaHQgYmUgZW1wdHkgc3RyaW5nICcnXG5cdHJldHVybiAoYm9keS5zdGFydHNXaXRoKGhlYWQpICYmIGhlYWQpIHx8IGJvZHkuc2xpY2UoMCwgMTAwKS50cmltKCk7IC8vIExpbWl0IHRvIDEwMCBjaGFyYWN0ZXJzXG59O1xuXG5vbkxvYWRlZCgoKSA9PiBvbihkb2N1bWVudCwgRVZFTlRTLCBoYW5kbGVUcmFjaywgUVVJQ0tfRVZFTlQpKTtcbiIsImlmIChcblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHR3aW5kb3cuQ1NTU3R5bGVTaGVldCAmJlxuXHRkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHNcbilcblx0KCgpID0+IHtcblx0XHRjb25zdCBrZXkgPSBcIi0tbXRkcy1hcHAtZXhwYW5kZWRcIjtcblx0XHRjb25zdCBzaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cdFx0Y29uc3QgcHJldiA9ICgpID0+ICF3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KT8uaW5jbHVkZXMoXCJmYWxzZVwiKTtcblxuXHRcdGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKHNoZWV0KTtcblx0XHR3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkID0gKGZvcmNlKSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBuZXh0ID0gZm9yY2UgPz8gIXByZXYoKTtcblx0XHRcdFx0c2hlZXQucmVwbGFjZVN5bmM/LihgOnJvb3QgeyAke2tleX06IHZhcigke2tleX0tLSR7bmV4dH0pfWApO1xuXHRcdFx0XHR3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBuZXh0KTtcblx0XHRcdH0gY2F0Y2ggKF9lcnIpIHt9IC8vIGxvY2FsU3RvcmFnZSBpcyBmdWxsIG9yIHJlcGxhY2VTeW5jIGlzIG5vdCBzdXBwb3J0ZWRcblx0XHR9O1xuXG5cdFx0Ly8gU2V0IGFuZCBzdG9yZSBpbml0aWFsIHN0YXRlXG5cdFx0d2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZChwcmV2KCkpO1xuXHR9KSgpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGRlYm91bmNlLCBvbiwgb25Mb2FkZWQsIG9uTXV0YXRpb24sIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgXCIuL2FwcC10b2dnbGVcIjtcblxuY29uc3QgQ1NTX0FQUCA9IHN0eWxlcy5hcHAuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1NUSUNLWSA9IHN0eWxlcy5zdGlja3kuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1RPR0dMRSA9ICdbZGF0YS1jb21tYW5kPVwidG9nZ2xlLWFwcC1leHBhbmRlZFwiXSc7XG5jb25zdCBDU1NfU0lERUJBUiA9IGAuJHtDU1NfQVBQfSA+IGRpYWxvZywuJHtDU1NfQVBQfSBkaWFsb2cgfiBtYWluYDtcblxuY29uc3QgdXNlVHJhbnNpdGlvbiA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuXHRpZiAoIWRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24pIGNhbGxiYWNrKCk7XG5cdGVsc2UgZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbihjYWxsYmFjayk7XG59O1xuXG5leHBvcnQgY29uc3QgdG9nZ2xlQXBwRXhwYW5kZWQgPSAoZm9yY2U/OiBib29sZWFuKSA9PlxuXHQvLyBAdHMtZXhwZWN0LWVycm9yIHdpbmRvdy5tdGRzQXBwVG9nZ2xlIGNvbWVzIGZyb20gYXBwLXRvZ2dsZS5qc1xuXHR1c2VUcmFuc2l0aW9uKCgpID0+IHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQ/Lihmb3JjZSkpO1xuXG5mdW5jdGlvbiBoYW5kbGVBcHBUb2dnbGVDbGljayh7IHRhcmdldDogZWwsIGRlZmF1bHRQcmV2ZW50ZWQ6IHN0b3AgfTogRXZlbnQpIHtcblx0Y29uc3QgbGluayA9IChlbCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKFwiYVwiKTtcblx0aWYgKGxpbms/LmNsb3Nlc3QoXCJkaWFsb2dcIikgJiYgbGluaz8uY2xvc2VzdChDU1NfU0lERUJBUikpXG5cdFx0cmV0dXJuIGNsb3NlU2lkZWJhcigpOyAvLyBDbG9zZSBzaWRlYmFyIGlmIGxpbmsgaXMgY2xpY2tlZCBpbnNpZGUgc2lkZWJhclxuXG5cdGlmIChzdG9wIHx8ICEoZWwgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCkgfHwgIWVsLm1hdGNoZXMoQ1NTX1RPR0dMRSkpXG5cdFx0cmV0dXJuO1xuXHRjb25zdCBpc0Rlc2t0b3AgPSBnZXRDb21wdXRlZFN0eWxlKGVsKS5wb3NpdGlvbiA9PT0gXCJzdGlja3lcIjtcblxuXHRpZiAoaXNEZXNrdG9wKSB0b2dnbGVBcHBFeHBhbmRlZCgpO1xuXHRlbHNlXG5cdFx0dXNlVHJhbnNpdGlvbigoKSA9PiB7XG5cdFx0XHRjb25zdCBzaWRlYmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGlhbG9nRWxlbWVudD4oQ1NTX1NJREVCQVIpO1xuXHRcdFx0c2lkZWJhcj8uc2V0QXR0cmlidXRlKFwiZGF0YS1jbG9zZWRieVwiLCBcImFueVwiKTsgLy8gQWxsb3cgY2xvc2luZyBieSBjbGlja2luZyBvdXRzaWRlXG5cdFx0XHRzaWRlYmFyPy5zaG93TW9kYWwoKTtcblx0XHR9KTtcbn1cblxuZnVuY3Rpb24gY2xvc2VTaWRlYmFyKCkge1xuXHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaWFsb2dFbGVtZW50PihDU1NfU0lERUJBUik/LmNsb3NlKCk7XG59XG5cbi8vIFNjcm9sbCBzdGF0ZVxubGV0IE1JTl9ZID0gMDsgLy8gT2Zmc2V0IHRvIGF2b2lkIHNjcm9sbCBqdW1wIHdoZW4gc3RpY2t5IGlzIHNldCB0byByZWxhdGl2ZVxubGV0IFNDUk9MTF9VUDogYm9vbGVhbjtcbmxldCBTVElDSyA9IDA7IC8vIC0xID0gc3RpY2sgdG9wLCAwID0gcmVsYXRpdmUsIDEgPSBzdGljayBib3R0b21cbmxldCBTVElDS19FTDogSFRNTEVsZW1lbnQ7XG5sZXQgU1RJQ0tfSCA9IDA7XG5sZXQgU1RJQ0tfWSA9IDA7XG5sZXQgU1RVQ0sgPSBmYWxzZTsgLy8gVXNlZCB0byBmaWd1cmUgaWYgbmF2IGlzIGxhcmdlciB0aGFuIHZpZXdwb3J0XG5sZXQgV0lOX0ggPSAwO1xubGV0IFdJTl9ZID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oW3N0aWNreV06IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdFNUSUNLX0VMID0gc3RpY2t5O1xuXHRoYW5kbGVBcHBTY3JvbGwoKTsgLy8gUnVuIG9uIGNvbm5lY3Rcbn1cblxuZnVuY3Rpb24gaGFuZGxlQXBwU2Nyb2xsKCkge1xuXHRpZiAoIVNUSUNLX0VMPy5pc0Nvbm5lY3RlZCkgcmV0dXJuO1xuXHRjb25zdCBORVhUX1kgPSB3aW5kb3cuc2Nyb2xsWTtcblx0Y29uc3QgTkVYVF9VUCA9IE5FWFRfWSA8IFdJTl9ZO1xuXHRXSU5fWSA9IE5FWFRfWTtcblxuXHQvLyBPbmx5IGNhbGN1bGF0ZSBpZiBzY3JvbGwgZGlyZWN0aW9uIGhhcyBjaGFuZ2VkXG5cdGlmIChORVhUX1VQICE9PSBTQ1JPTExfVVApIHtcblx0XHRNSU5fWSA9IChTVElDS19FTC5wYXJlbnRFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgfHwgMCkgKyBXSU5fWTtcblx0XHRTQ1JPTExfVVAgPSBORVhUX1VQO1xuXHRcdFNUSUNLX0ggPSBTVElDS19FTC5vZmZzZXRIZWlnaHQ7XG5cdFx0U1RJQ0tfWSA9IFNUSUNLX0VMLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIFdJTl9ZO1xuXHRcdFNUVUNLID0gU1RJQ0tfRUwub2Zmc2V0SGVpZ2h0IDw9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0XHRXSU5fSCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0fVxuXG5cdGlmIChTVElDSyA9PT0gLTEgJiYgU1RVQ0spIHJldHVybjsgLy8gQWxsd2F5cyBzdGlja3kgd2hlbiBzaWRlYmFyIGlzIHNtYWxsZXIgdGhhbiB2aWV3cG9ydFxuXHRpZiAoU1RJQ0sgIT09IC0xICYmIChTVFVDSyB8fCAoU0NST0xMX1VQICYmIFdJTl9ZIDw9IFNUSUNLX1kpKSkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJzdGlja3lcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBcIjBweFwiKTtcblx0XHRTVElDSyA9IC0xOyAvLyBOb3Qgc3RpY2tpbmcgdG8gdG9wIGFuZCBzaWRlYmFyIGlzIHNtYWxsZXIgdGhhbiB2aWV3cG9ydCBvciBzY3JvbGxpbmcgdXBcblx0fSBlbHNlIGlmIChTVElDSyA9PT0gLTEgJiYgIVNDUk9MTF9VUCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJyZWxhdGl2ZVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke01hdGgubWF4KDAsIFdJTl9ZIC0gTUlOX1kpfXB4YCk7XG5cdFx0U1RJQ0sgPSAwOyAvLyBTdGlja2luZyB0byB0b3AgYW5kIHNjcm9sbGluZyBkb3duXG5cdH0gZWxzZSBpZiAoU1RJQ0sgIT09IDEgJiYgIVNDUk9MTF9VUCAmJiBXSU5fWSArIFdJTl9IID49IFNUSUNLX1kgKyBTVElDS19IKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInN0aWNreVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke1dJTl9IIC0gU1RJQ0tfSH1weGApO1xuXHRcdFNUSUNLID0gMTsgLy8gTm90IHN0aWNraW5nIHRvIGJvdHRvbSBhbmQgc2Nyb2xsaW5nIGRvd25cblx0fSBlbHNlIGlmIChTVElDSyA9PT0gMSAmJiBTQ1JPTExfVVApIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwicmVsYXRpdmVcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtTVElDS19ZIC0gTUlOX1l9cHhgKTtcblx0XHRTVElDSyA9IDA7IC8vIFN0aWNraW5nIHRvIGJvdHRvbSBhbmQgc2Nyb2xsaW5nIHVwXG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX1NUSUNLWSwgaGFuZGxlTXV0YXRpb24pO1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVBcHBUb2dnbGVDbGljaywgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwicmVzaXplXCIsIGRlYm91bmNlKGNsb3NlU2lkZWJhciwgMTAwKSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwic2Nyb2xsXCIsIGhhbmRsZUFwcFNjcm9sbCwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCJjb25zdCBnZXRTdGVwcyA9IChcblx0bm93OiBudW1iZXIsXG5cdG1heDogbnVtYmVyLFxuXHRzaG93ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuKSA9PiB7XG5cdGNvbnN0IG9mZnNldCA9IChzaG93IC0gMSkgLyAyO1xuXHRjb25zdCBzdGFydCA9IE1hdGgubWF4KE1hdGgubWluKG5vdyAtIE1hdGguZmxvb3Iob2Zmc2V0KSwgbWF4IC0gc2hvdyArIDEpLCAxKTtcblx0Y29uc3QgZW5kID0gTWF0aC5taW4oTWF0aC5tYXgobm93ICsgTWF0aC5jZWlsKG9mZnNldCksIHNob3cpLCBtYXgpO1xuXHRjb25zdCBwYWdlcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGVuZCArIDEgLSBzdGFydCB9LCAoXywgaSkgPT4gaSArIHN0YXJ0KTtcblxuXHRpZiAoc2hvdyA+IDQgJiYgc3RhcnQgPiAxKSBwYWdlcy5zcGxpY2UoMCwgMiwgMSwgMCk7XG5cdGlmIChzaG93ID4gMyAmJiBlbmQgPCBtYXgpIHBhZ2VzLnNwbGljZSgtMiwgMiwgMCwgbWF4KTtcblx0cmV0dXJuIHBhZ2VzO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhZ2luYXRpb24gPSAoeyBjdXJyZW50ID0gMSwgdG90YWwgPSAxMCwgc2hvdyA9IDcgfSkgPT4gKHtcblx0cHJldjogY3VycmVudCA+IDEgPyBjdXJyZW50IC0gMSA6IDAsXG5cdG5leHQ6IGN1cnJlbnQgPCB0b3RhbCA/IGN1cnJlbnQgKyAxIDogMCxcblx0cGFnZXM6IGdldFN0ZXBzKGN1cnJlbnQsIHRvdGFsLCBzaG93KS5tYXAoKHBhZ2UsIGluZGV4KSA9PiAoe1xuXHRcdGN1cnJlbnQ6IHBhZ2UgPT09IGN1cnJlbnQgJiYgKFwicGFnZVwiIGFzIGNvbnN0KSxcblx0XHRrZXk6IGBrZXktJHtwYWdlfS0ke2luZGV4fWAsXG5cdFx0cGFnZSxcblx0fSkpLFxufSk7XG4iLCJmdW5jdGlvbiByKGUpe3ZhciB0LGYsbj1cIlwiO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZSluKz1lO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIGUpaWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIG89ZS5sZW5ndGg7Zm9yKHQ9MDt0PG87dCsrKWVbdF0mJihmPXIoZVt0XSkpJiYobiYmKG4rPVwiIFwiKSxuKz1mKX1lbHNlIGZvcihmIGluIGUpZVtmXSYmKG4mJihuKz1cIiBcIiksbis9Zik7cmV0dXJuIG59ZXhwb3J0IGZ1bmN0aW9uIGNsc3goKXtmb3IodmFyIGUsdCxmPTAsbj1cIlwiLG89YXJndW1lbnRzLmxlbmd0aDtmPG87ZisrKShlPWFyZ3VtZW50c1tmXSkmJih0PXIoZSkpJiYobiYmKG4rPVwiIFwiKSxuKz10KTtyZXR1cm4gbn1leHBvcnQgZGVmYXVsdCBjbHN4OyIsImltcG9ydCBjbHN4IGZyb20gXCJjbHN4XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5leHBvcnQgdHlwZSBUb2FzdE9wdGlvbnMgPSB7XG5cdGNsYXNzTmFtZT86IHN0cmluZztcblx0Y2xvc2VkYnk/OiBcIm5vbmVcIjtcblx0Y29sb3I/OiBcIm1haW5cIiB8IFwibmV1dHJhbFwiIHwgXCJzdWNjZXNzXCIgfCBcImRhbmdlclwiIHwgXCJpbmZvXCIgfCBcIndhcm5pbmdcIjtcblx0aWNvbj86IGJvb2xlYW4gfCBcIm5vbmVcIjtcblx0dGltZW91dD86IG51bWJlciB8IGZhbHNlO1xuXHRidXN5PzogYm9vbGVhbjtcblx0b3Blbj86IGJvb2xlYW47XG5cdGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRvYXN0KGNvbnRlbnQ6IHN0cmluZywgb3B0OiBUb2FzdE9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBkaWFsb2cgPVxuXHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9wdC5pZCB8fCBcIlwiKSB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGlhbG9nXCIpO1xuXG5cdGF0dHIoZGlhbG9nLCBcImFyaWEtYnVzeVwiLCBvcHQuYnVzeSA/IFwidHJ1ZVwiIDogbnVsbCk7XG5cdGF0dHIoZGlhbG9nLCBcImNsYXNzXCIsIGNsc3goc3R5bGVzLnRvYXN0LCBvcHQuY2xhc3NOYW1lKSk7XG5cdGF0dHIoZGlhbG9nLCBcImRhdGEtY2xvc2VkYnlcIiwgb3B0LmNsb3NlZGJ5IHx8IG51bGwpO1xuXHRhdHRyKGRpYWxvZywgXCJkYXRhLWNvbG9yXCIsIG9wdC5jb2xvciB8fCBudWxsKTtcblx0YXR0cihkaWFsb2csIFwiZGF0YS1pY29uXCIsIGAke29wdC5pY29uID8/IFwiXCJ9YCB8fCBudWxsKTtcblx0YXR0cihkaWFsb2csIFwiZGF0YS10aW1lb3V0XCIsIGAke29wdC50aW1lb3V0ID8/IFwiXCJ9YCB8fCBudWxsKTtcblx0YXR0cihkaWFsb2csIFwiaWRcIiwgb3B0LmlkIHx8IGAke0RhdGUubm93KCl9YCk7XG5cdGF0dHIoZGlhbG9nLCBcIm9wZW5cIiwgb3B0Lm9wZW4gPT09IGZhbHNlID8gbnVsbCA6IFwiXCIpO1xuXG5cdGRpYWxvZy5pbm5lckhUTUwgPSBjb250ZW50O1xuXHRkaWFsb2cuYWRkRXZlbnRMaXN0ZW5lcihcImFuaW1hdGlvbmVuZFwiLCBoYW5kbGVUb2FzdENsb3NlLCB7IG9uY2U6IHRydWUgfSk7XG5cdGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGlhbG9nKTtcblx0cmV0dXJuIGRpYWxvZy5pZDtcbn1cblxuZnVuY3Rpb24gaGFuZGxlVG9hc3RDbG9zZSh7IGFuaW1hdGlvbk5hbWUsIHRhcmdldCB9OiBQYXJ0aWFsPEFuaW1hdGlvbkV2ZW50Pikge1xuXHRpZiAoYW5pbWF0aW9uTmFtZSA9PT0gc3R5bGVzLl90b2FzdENsb3NlKVxuXHRcdCh0YXJnZXQgYXMgSFRNTERpYWxvZ0VsZW1lbnQpLnJlbW92ZSgpO1xufVxuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19CUkVBRENSVU1CUyA9IHN0eWxlcy5icmVhZGNydW1icy5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZUJyZWFkY3J1bWJzTXV0YXRpb24oYnJlYWRjcnVtYnM6IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgYnJlYWRjdW1icyBvZiBicmVhZGNydW1icylcblx0XHRicmVhZGN1bWJzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaSBhXCIpLmZvckVhY2goKGNydW1iLCBpbmRleCwgeyBsZW5ndGggfSkgPT4ge1xuXHRcdFx0YXR0cihjcnVtYiwgXCJhcmlhLWN1cnJlbnRcIiwgaW5kZXggPT09IGxlbmd0aCAtIDEgPyBcInBhZ2VcIiA6IG51bGwpO1xuXHRcdH0pO1xufVxuXG5vbkxvYWRlZCgoKSA9PlxuXHRvbk11dGF0aW9uKFxuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHRDU1NfQlJFQURDUlVNQlMsXG5cdFx0aGFuZGxlQnJlYWRjcnVtYnNNdXRhdGlvbixcblx0KSxcbik7XG4iLCJleHBvcnQgZGVmYXVsdCBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7XFxuXFx0ZGlzcGxheTogYmxvY2s7XFxuXFx0LS1tdGRzYy1jaGFydC1hc3BlY3Q6IDE2IC8gOTtcXG5cXHQtLW10ZHNjLWNoYXJ0LWF4aXMtYm9yZGVyOiB2YXIoLS1kcy1ib3JkZXItd2lkdGgtZGVmYXVsdCkgc29saWRcXG5cXHRcXHR2YXIoLS1kcy1jb2xvci1ib3JkZXItc3VidGxlKTtcXG5cXHQtLW10ZHNjLWNoYXJ0LWF4aXMtZ2FwOiB2YXIoLS1kcy1zaXplLTIpO1xcblxcdC0tbXRkc2MtY2hhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS1kcy1jb2xvci1ib3JkZXItZGVmYXVsdCk7XFxuXFx0LS1tdGRzYy1jaGFydC1jb2xvci10ZXh0OiB2YXIoLS1kcy1jb2xvci10ZXh0LWRlZmF1bHQpO1xcblxcdC0tbXRkc2MtY2hhcnQtY29sb3I6IHZhcigtLWRzLWNvbG9yLXN1cmZhY2UtdGludGVkKTtcXG5cXHQtLW10ZHNjLWNoYXJ0LWNvbG9yLTE6ICNiNGNlYTA7XFxuXFx0LS1tdGRzYy1jaGFydC1jb2xvci0yOiAjNjhiMDk2O1xcblxcdC0tbXRkc2MtY2hhcnQtY29sb3ItMzogI2NkZTVmMjtcXG5cXHQtLW10ZHNjLWNoYXJ0LWJvcmRlci1jb2xvci0xOiB2YXIoLS1kcy1jb2xvci1zdWNjZXNzLWJvcmRlci1zdWJ0bGUpO1xcblxcdC0tbXRkc2MtY2hhcnQtYm9yZGVyLWNvbG9yLTI6IHZhcigtLWRzLWNvbG9yLWluZm8tYm9yZGVyLXN1YnRsZSk7XFxuXFx0LS1tdGRzYy1jaGFydC1ib3JkZXItY29sb3ItMzogdmFyKC0tZHMtY29sb3Itd2FybmluZy1ib3JkZXItc3VidGxlKTtcXG59XFxuXFxuOmhvc3QoW2RhdGEtdmFyaWFudD1cXFwiZG91Z2hudXRcXFwiXSkge1xcblxcdC0tbXRkc2MtY2hhcnQtYXNwZWN0OiAxIC8gMTtcXG59XFxuXFxuLmRvdWdobnV0IHtcXG5cXHRvdmVyZmxvdzogdmlzaWJsZTtcXG5cXHRoZWlnaHQ6IDEwMCU7XFxuXFx0d2lkdGg6IDEwMCU7XFxufVxcbi5kb3VnaG51dCA+IHBhdGgge1xcblxcdGN1cnNvcjogcG9pbnRlcjtcXG5cXHRmaWxsOiB2YXIoLS1tdGRzYy1jaGFydC1jb2xvcik7XFxuXFx0b3V0bGluZTogbm9uZTtcXG5cXHRzdHJva2Utd2lkdGg6IHZhcigtLWRzLWJvcmRlci13aWR0aC1kZWZhdWx0KTtcXG5cXHQvKiBzdHJva2U6IHZhcigtLWRzLWNvbG9yLWJvcmRlci1kZWZhdWx0KTsgKi9cXG5cXHR0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XFxuXFx0dHJhbnNpdGlvbjogc2NhbGUgMC4ycztcXG5cXHR2ZWN0b3ItZWZmZWN0OiBub24tc2NhbGluZy1zdHJva2U7XFxufVxcbi5kb3VnaG51dCA+IHBhdGg6Zm9jdXMtdmlzaWJsZSxcXG4uZG91Z2hudXQgPiBwYXRoOmhvdmVyIHtcXG5cXHRzY2FsZTogMS4wNTtcXG59XFxuXFxuLmNvbG9yLTEge1xcblxcdC0tbXRkc2MtY2hhcnQtY29sb3I6IHZhcigtLW10ZHNjLWNoYXJ0LWNvbG9yLTEpO1xcblxcdC0tbXRkc2MtY2hhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS1tdGRzYy1jaGFydC1ib3JkZXItY29sb3ItMSk7XFxufVxcbi5jb2xvci0yIHtcXG5cXHQtLW10ZHNjLWNoYXJ0LWNvbG9yOiB2YXIoLS1tdGRzYy1jaGFydC1jb2xvci0yKTtcXG5cXHQtLW10ZHNjLWNoYXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tbXRkc2MtY2hhcnQtYm9yZGVyLWNvbG9yLTIpO1xcbn1cXG4uY29sb3ItMyB7XFxuXFx0LS1tdGRzYy1jaGFydC1jb2xvcjogdmFyKC0tbXRkc2MtY2hhcnQtY29sb3ItMyk7XFxuXFx0LS1tdGRzYy1jaGFydC1ib3JkZXItY29sb3I6IHZhcigtLW10ZHNjLWNoYXJ0LWJvcmRlci1jb2xvci0zKTtcXG59XFxuXFxuLmF4aXMge1xcblxcdGFzcGVjdC1yYXRpbzogdmFyKC0tbXRkc2MtY2hhcnQtYXNwZWN0KTtcXG5cXHRkaXNwbGF5OiBncmlkO1xcblxcdGdhcDogY2FsYyh2YXIoLS1tdGRzYy1jaGFydC1heGlzLWdhcCkgLyAyKTtcXG5cXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGZpdC1jb250ZW50KDdlbSkgMWZyO1xcblxcdGdyaWQtdGVtcGxhdGUtcm93czogMWZyIGF1dG87XFxuXFx0Z3JpZC10ZW1wbGF0ZS1hcmVhczpcXG5cXHRcXHRcXFwieS1heGlzIGNoYXJ0XFxcIlxcblxcdFxcdFxcXCJ5LWF4aXMgeC1heGlzXFxcIjtcXG59XFxuLmF4aXNTdGVwcyxcXG4uYXhpc1N0ZXAsXFxuLmF4aXNHcm91cHMsXFxuLmF4aXNHcm91cCB7XFxuXFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcXG5cXHRkaXNwbGF5OiBncmlkO1xcblxcdHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogSGVscCAubGluZUNvbnRhaW5lciBwb3NpdGlvbmluZyAqL1xcbn1cXG5cXG4uaXMtaG9yaXpvbnRhbCAuYXhpc0dyb3VwcyB7XFxuXFx0Y29sdW1uLWdhcDogdmFyKC0tbXRkc2MtY2hhcnQtYXhpcy1nYXApO1xcblxcdGdyaWQtY29sdW1uOiBjaGFydDtcXG5cXHRncmlkLXJvdzogY2hhcnQgLyB4LWF4aXM7XFxuXFx0Z3JpZC10ZW1wbGF0ZS1yb3dzOiBzdWJncmlkO1xcblxcdHBhZGRpbmctaW5saW5lOiB2YXIoLS1tdGRzYy1jaGFydC1heGlzLWdhcCk7XFxuXFx0dGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4uaXMtaG9yaXpvbnRhbCAuYXhpc0dyb3VwIHtcXG5cXHRncmlkLXJvdzogY2hhcnQgLyB4LWF4aXM7XFxuXFx0Z3JpZC10ZW1wbGF0ZS1yb3dzOiBpbmhlcml0O1xcbn1cXG4uaXMtaG9yaXpvbnRhbCAuYXhpc1N0ZXBzIHtcXG5cXHRncmlkLWF1dG8tcm93czogMWZyO1xcblxcdGdyaWQtY29sdW1uOiB5LWF4aXMgLyBjaGFydDtcXG5cXHRncmlkLXJvdzogY2hhcnQ7XFxuXFx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBzdWJncmlkO1xcblxcdGdyaWQtdGVtcGxhdGUtcm93czogMXB4O1xcbn1cXG4uaXMtaG9yaXpvbnRhbCAuYXhpc1N0ZXAge1xcblxcdGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kO1xcblxcdGdyaWQtY29sdW1uOiBpbmhlcml0O1xcblxcdGdyaWQtdGVtcGxhdGUtY29sdW1uczogaW5oZXJpdDtcXG5cXHR0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuLmlzLWhvcml6b250YWwgLmF4aXNTdGVwOjphZnRlciB7XFxuXFx0Y29udGVudDogXFxcIlxcXCI7XFxuXFx0Ym9yZGVyLWJvdHRvbTogdmFyKC0tbXRkc2MtY2hhcnQtYXhpcy1ib3JkZXIpO1xcbn1cXG4uaXMtaG9yaXpvbnRhbCAuYXhpc1N0ZXAgLmF4aXNMYWJlbCB7XFxuXFx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKDUwJSk7XFxufVxcblxcbi5pcy12ZXJ0aWNhbCAuYXhpc1N0ZXBzLFxcbi5pcy12ZXJ0aWNhbCAuYXhpc0dyb3VwIHtcXG5cXHRkaXJlY3Rpb246IHJ0bDsgLyogUmV2ZXJzZSBvcmRlcnMgKi9cXG59XFxuLmlzLXZlcnRpY2FsIC5heGlzU3RlcHMgPiAqLFxcbi5pcy12ZXJ0aWNhbCAuYXhpc0dyb3VwID4gKiB7XFxuXFx0ZGlyZWN0aW9uOiBsdHI7XFxufVxcbi5pcy12ZXJ0aWNhbCAuYXhpc0dyb3VwcyB7XFxuXFx0Z3JpZC1jb2x1bW46IHktYXhpcyAvIGNoYXJ0O1xcblxcdGdyaWQtcm93OiBjaGFydDtcXG5cXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHN1YmdyaWQ7XFxuXFx0cGFkZGluZy1ibG9jazogdmFyKC0tbXRkc2MtY2hhcnQtYXhpcy1nYXApO1xcblxcdHJvdy1nYXA6IHZhcigtLW10ZHNjLWNoYXJ0LWF4aXMtZ2FwKTtcXG5cXHR0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuLmlzLXZlcnRpY2FsIC5heGlzR3JvdXBzIC5heGlzTGFiZWwge1xcblxcdGFsaWduLXNlbGY6IGNlbnRlcjsgLyogU2luY2UgdGV4dC1hbGlnbiBkb2VzIG5vdCB3b3JrIHZlcnRpY2FsbHkgKi9cXG59XFxuLmlzLXZlcnRpY2FsIC5heGlzR3JvdXAge1xcblxcdGdyaWQtY29sdW1uOiBpbmhlcml0O1xcblxcdGdyaWQtdGVtcGxhdGUtY29sdW1uczogaW5oZXJpdDtcXG59XFxuLmlzLXZlcnRpY2FsIC5heGlzU3RlcHMge1xcblxcdGdyaWQtYXV0by1jb2x1bW5zOiAxZnI7XFxuXFx0Z3JpZC1jb2x1bW46IGNoYXJ0O1xcblxcdGdyaWQtcm93OiBjaGFydCAvIHgtYXhpcztcXG5cXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFweDtcXG5cXHRncmlkLXRlbXBsYXRlLXJvd3M6IHN1YmdyaWQ7XFxufVxcbi5pcy12ZXJ0aWNhbCAuYXhpc1N0ZXAge1xcblxcdGdyaWQtcm93OiBpbmhlcml0O1xcblxcdGdyaWQtdGVtcGxhdGUtcm93czogaW5oZXJpdDtcXG5cXHRqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxuXFx0dGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4uaXMtdmVydGljYWwgLmF4aXNTdGVwOjpiZWZvcmUge1xcblxcdGNvbnRlbnQ6IFxcXCJcXFwiO1xcblxcdGJvcmRlci1sZWZ0OiB2YXIoLS1tdGRzYy1jaGFydC1heGlzLWJvcmRlcik7XFxufVxcbi5pcy12ZXJ0aWNhbCAuYXhpc1N0ZXAgLmF4aXNMYWJlbCB7XFxuXFx0dHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xcbn1cXG5cXG4uYXhpc0dyb3VwQ29udGVudCB7XFxuXFx0ZGlzcGxheTogZmxleDtcXG5cXHQvKiBnYXA6IDFweDsgKi9cXG59XFxuLmlzLWhvcml6b250YWwuaXMtc3RhY2tlZCAuYXhpc0dyb3VwQ29udGVudCB7XFxuXFx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xcblxcdHJvdy1nYXA6IDBweDtcXG59XFxuLmlzLXZlcnRpY2FsLmlzLXN0YWNrZWQgLmF4aXNHcm91cENvbnRlbnQge1xcblxcdGNvbHVtbi1nYXA6IDBweDtcXG59XFxuLmlzLXZlcnRpY2FsOm5vdCguaXMtc3RhY2tlZCkgLmF4aXNHcm91cENvbnRlbnQge1xcblxcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxufVxcblxcbi5iYXIge1xcblxcdC0tc2l6ZTogY2FsYyh2YXIoLS12YWx1ZSkgLyB2YXIoLS10b3RhbCwgMSkgKiAxMDAlKTtcXG5cXHRiYWNrZ3JvdW5kOiB2YXIoLS1tdGRzYy1jaGFydC1jb2xvcik7XFxuXFx0LyogYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbXRkc2MtY2hhcnQtYm9yZGVyLWNvbG9yKTsgKi9cXG5cXHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xcblxcdGNvbG9yOiB2YXIoLS1tdGRzYy1jaGFydC1jb2xvci10ZXh0KTtcXG5cXHRwYWRkaW5nOiB2YXIoLS1kcy1zaXplLTEpO1xcblxcdHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogUGxhY2UgYWJvdmUgLmxpbmVDb250YWluZXIgKi9cXG59XFxuLmJhcjpob3ZlcixcXG4uYmFyOmZvY3VzLXZpc2libGUge1xcblxcdGJveC1zaGFkb3c6IHZhcigtLWRzYy1mb2N1cy1ib3hTaGFkb3cpO1xcblxcdG91dGxpbmU6IHZhcigtLWRzYy1mb2N1cy1vdXRsaW5lKTtcXG5cXHRvdXRsaW5lLW9mZnNldDogdmFyKC0tZHMtYm9yZGVyLXdpZHRoLWZvY3VzKTtcXG5cXHR6LWluZGV4OiAyOyAvKiB6LWluZGV4IHRvIHBsYWNlIG9uIHRvcCB3aGVuIG91dGxpbmVkICovXFxufVxcblxcbi5pcy1ob3Jpem9udGFsIC5iYXIge1xcblxcdHdpZHRoOiAxMDAlO1xcblxcdGhlaWdodDogdmFyKC0tc2l6ZSk7XFxuXFx0YWxpZ24tc2VsZjogZmxleC1lbmQ7XFxuXFx0Z3JpZC1yb3c6IGNoYXJ0O1xcbn0gLyogZ3JpZC1yb3cgaXMgb25seSB1c2VkIGlmIHBsYWNlZCBkaXJlY3RseSBpbiBDaGFydC5BeGlzICovXFxuLmlzLXZlcnRpY2FsIC5iYXIge1xcblxcdHdpZHRoOiB2YXIoLS1zaXplKTtcXG5cXHRoZWlnaHQ6IDEwMCU7XFxuXFx0Z3JpZC1jb2x1bW46IGNoYXJ0O1xcbn0gLyogZ3JpZC1jb2x1bW4gaXMgb25seSB1c2VkIGlmIHBsYWNlZCBkaXJlY3RseSBpbiBDaGFydC5BeGlzICovXFxuLmlzLWhvcml6b250YWw6bm90KC5pcy1zdGFja2VkKSAuYXhpc0dyb3VwIC5iYXIgKyAuYmFyIHtcXG5cXHQvKiBtYXJnaW4tbGVmdDogLTFweDsgKi9cXG59IC8qIFByZXZlbnQgZG91YmxlIGJvcmRlciAtIHVzaW5nIG1hcmdpbiB0byBzZWUgYm9yZGVyIGFyb3VuZCBiYXJzICovXFxuLmlzLXZlcnRpY2FsOm5vdCguaXMtc3RhY2tlZCkgLmF4aXNHcm91cCAuYmFyICsgLmJhciB7XFxuXFx0LyogbWFyZ2luLXRvcDogLTFweDsgKi9cXG59IC8qIFByZXZlbnQgZG91YmxlIGJvcmRlciAtIHVzaW5nIG1hcmdpbiB0byBzZWUgYm9yZGVyIGFyb3VuZCBiYXJzICovXFxuLmlzLWhvcml6b250YWwuaXMtc3RhY2tlZCAuYXhpc0dyb3VwIC5iYXIgKyAuYmFyIHtcXG5cXHRib3JkZXItYm90dG9tOiBub25lO1xcbn0gLyogUHJldmVudCBkb3VibGUgYm9yZGVyIC0gdXNpbmcgYm9yZGVyIHRvIGF2b2lkIGFmZmVjdGluZyBzaXplICovXFxuLmlzLXZlcnRpY2FsLmlzLXN0YWNrZWQgLmF4aXNHcm91cCAuYmFyICsgLmJhciB7XFxuXFx0Ym9yZGVyLWxlZnQ6IG5vbmU7XFxufSAvKiBQcmV2ZW50IGRvdWJsZSBib3JkZXIgLSB1c2luZyBib3JkZXIgdG8gYXZvaWQgYWZmZWN0aW5nIHNpemUgKi9cXG5cXG4ubGluZUNvbnRhaW5lciB7XFxuXFx0YWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuXFx0ZGlzcGxheTogZmxleDtcXG5cXHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuXFx0cG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi5saW5lQ29udGFpbmVyID4gc3ZnLFxcbi5saW5lQ29udGFpbmVyIHtcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0d2lkdGg6IDEwMCU7XFxuXFx0aGVpZ2h0OiAxMDAlO1xcbn1cXG4ubGluZUNvbnRhaW5lciA+IHN2ZzpmaXJzdC1jaGlsZCB7XFxuXFx0ei1pbmRleDogMjtcXG59XFxuLmlzLWhvcml6b250YWwgLmxpbmVDb250YWluZXIge1xcblxcdGdyaWQtcm93OiBjaGFydDtcXG59XFxuLmlzLWhvcml6b250YWwgLmxpbmVDb250YWluZXIgPiBzdmcge1xcblxcdG92ZXJmbG93OiBjbGlwIHZpc2libGU7XFxufVxcbi5pcy1ob3Jpem9udGFsIC5saW5lQ29udGFpbmVyID4gZGl2W3JvbGU9XFxcImxpc3RpdGVtXFxcIl0ge1xcblxcdGRpc3BsYXk6IGNvbnRlbnRzO1xcbn1cXG4uaXMtaG9yaXpvbnRhbCAubGluZUNvbnRhaW5lciAubGluZVBvaW50IHtcXG5cXHR0b3A6IGNhbGMoMTAwJSAtIHZhcigtLXZhbHVlKSAvIHZhcigtLXRvdGFsLCAxKSAqIDEwMCUpO1xcbn1cXG4uaXMtdmVydGljYWwgLmxpbmVDb250YWluZXIge1xcblxcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuXFx0Z3JpZC1jb2x1bW46IGNoYXJ0O1xcbn1cXG4uaXMtdmVydGljYWwgLmxpbmVDb250YWluZXIgPiBzdmcge1xcblxcdG92ZXJmbG93OiB2aXNpYmxlIGNsaXA7XFxufVxcbi5pcy12ZXJ0aWNhbCAubGluZUNvbnRhaW5lciAubGluZVBvaW50IHtcXG5cXHRsZWZ0OiBjYWxjKHZhcigtLXZhbHVlKSAvIHZhcigtLXRvdGFsLCAxKSAqIDEwMCUpO1xcbn1cXG5cXG4ubGluZSxcXG4ubGluZUJvcmRlcixcXG4ubGluZVNoYWRlIHtcXG5cXHRmaWxsOiBub25lO1xcblxcdHN0cm9rZTogdmFyKC0tbXRkc2MtY2hhcnQtY29sb3IpO1xcblxcdHN0cm9rZS1saW5lam9pbjogcm91bmQ7XFxuXFx0c3Ryb2tlLWxpbmVjYXA6IHJvdW5kO1xcblxcdHN0cm9rZS13aWR0aDogMztcXG5cXHR2ZWN0b3ItZWZmZWN0OiBub24tc2NhbGluZy1zdHJva2U7XFxufVxcbi5saW5lLmxpbmUge1xcblxcdC8qIGZpbGw6IG5vbmU7IC8qIFVzZSBkb3VibGUgc2VsZWN0b3IgYXMgZmlsbCBzaG91bGQgYWx3YXlzIGJlIGRyYXduIGJ5IC5saW5lU2hhZGUgKi9cXG59XFxuLmxpbmVCb3JkZXIge1xcblxcdC8qIHN0cm9rZS13aWR0aDogNTtcXG5cXHRzdHJva2U6IHZhcigtLW10ZHNjLWNoYXJ0LWJvcmRlci1jb2xvcik7ICovXFxufVxcbi5saW5lU2hhZGUge1xcblxcdHN0cm9rZTogbm9uZTtcXG5cXHRmaWxsOiB2YXIoLS1tdGRzYy1jaGFydC1jb2xvcik7XFxuXFx0b3BhY2l0eTogMC4xNTtcXG59XFxuLmxpbmVQb2ludCB7XFxuXFx0LS1zaXplOiAwLjYyNXJlbTsgLyogMTBweCAqL1xcblxcdGJhY2tncm91bmQtY29sb3I6IHZhcigtLW10ZHNjLWNoYXJ0LWNvbG9yKTtcXG5cXHRib3JkZXItcmFkaXVzOiB2YXIoLS1kcy1ib3JkZXItcmFkaXVzLWZ1bGwpO1xcblxcdC8qIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW10ZHNjLWNoYXJ0LWJvcmRlci1jb2xvcik7ICovXFxuXFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcXG5cXHRtYXJnaW46IGNhbGModmFyKC0tc2l6ZSkgLyAtMik7XFxuXFx0cGFkZGluZzogMDtcXG5cXHRwb2ludGVyLWV2ZW50czogYWxsO1xcblxcdHBvc2l0aW9uOiByZWxhdGl2ZTtcXG5cXHR0cmFuc2l0aW9uOiBzY2FsZSAwLjJzO1xcblxcdHdpZHRoOiB2YXIoLS1zaXplKTtcXG5cXHRoZWlnaHQ6IHZhcigtLXNpemUpO1xcblxcdHotaW5kZXg6IDI7XFxufVxcbi5saW5lUG9pbnRbaGlkZGVuXSB7XFxuXFx0ZGlzcGxheTogYmxvY2s7XFxuXFx0dmlzaWJpbGl0eTogaGlkZGVuO1xcbn0gLyogQWxsIGRvdHMgbmVlZCB0byByZW5kZXIgdG8gbWFrZSBwYXJlbnQgZGlzcGxheTogZmxleCB3b3JrLCBzbyBpbnN0ZWFkIGhpZGUgdmlzaWJpbGl0eSAqL1xcbi5saW5lUG9pbnQ6Zm9jdXMtdmlzaWJsZSxcXG4ubGluZVBvaW50OmhvdmVyIHtcXG5cXHRzY2FsZTogMS4zO1xcbn1cXG4ubGluZVBvaW50OjpiZWZvcmUge1xcblxcdGNvbnRlbnQ6IFxcXCJcXFwiO1xcblxcdGluc2V0OiBjYWxjKHZhcigtLWRzLXNpemUtMikgKiAtMSk7IC8qIEluY3JlYXNlIGNsaWNrIHN1cmZhY2UgKi9cXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcblxcbi5sZWdlbmRzIHtcXG5cXHRhbGlnbi1pdGVtczogY2VudGVyO1xcblxcdGRpc3BsYXk6IGZsZXg7XFxuXFx0ZmxleC13cmFwOiB3cmFwO1xcblxcdGdhcDogdmFyKC0tZHMtc2l6ZS02KTtcXG5cXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG5cXHRtYXJnaW4tdG9wOiB2YXIoLS1kcy1zaXplLTYpO1xcbn1cXG5cXG4ubGVnZW5kIHtcXG5cXHRkaXNwbGF5OiBmbGV4O1xcblxcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuXFx0Z2FwOiB2YXIoLS1kcy1zaXplLTIpO1xcbn1cXG4ubGVnZW5kOjpiZWZvcmUge1xcblxcdGJhY2tncm91bmQtY29sb3I6IHZhcigtLW10ZHNjLWNoYXJ0LWNvbG9yKTtcXG5cXHRib3JkZXItcmFkaXVzOiB2YXIoLS1kcy1ib3JkZXItcmFkaXVzLWZ1bGwpO1xcblxcdC8qIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW10ZHNjLWNoYXJ0LWJvcmRlci1jb2xvcik7ICovXFxuXFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcXG5cXHRjb250ZW50OiBcXFwiXFxcIjtcXG5cXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuXFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG5cXHR3aWR0aDogdmFyKC0tZHMtc2l6ZS02KTtcXG5cXHRoZWlnaHQ6IHZhcigtLWRzLXNpemUtNik7XFxufVxcblwiIiwiaW1wb3J0IHR5cGUgKiBhcyBSZWFjdFR5cGVzIGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgYXR0ciwgSVNfQlJPV1NFUiwgdXNlSWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCBjc3MgZnJvbSBcIi4vY2hhcnQubW9kdWxlLmNzcz9yYXdcIjtcblxuY29uc3QgTVREU0VsZW1lbnQgPVxuXHR0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCJcblx0XHQ/IChjbGFzcyB7fSBhcyB0eXBlb2YgSFRNTEVsZW1lbnQpXG5cdFx0OiBIVE1MRWxlbWVudDtcblxuZXhwb3J0IHR5cGUgUmVhY3RDaGFydCA9IFJlYWN0VHlwZXMuSlNYLkludHJpbnNpY0VsZW1lbnRzW1wiZGl2XCJdICYge1xuXHRjbGFzcz86IHN0cmluZztcbn07XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0bmFtZXNwYWNlIFJlYWN0LkpTWCB7XG5cdFx0aW50ZXJmYWNlIEludHJpbnNpY0VsZW1lbnRzIHtcblx0XHRcdFwibXRkcy1jaGFydFwiOiBSZWFjdENoYXJ0O1xuXHRcdH1cblx0fVxufVxuXG5jb25zdCB4bWxucyA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbmV4cG9ydCBjbGFzcyBNVERTQ2hhcnQgZXh0ZW5kcyBNVERTRWxlbWVudCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcblx0fVxuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRsZXQgbWF4ID0gMDtcblx0XHRsZXQgcm93TWF4ID0gMDtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMucXVlcnlTZWxlY3RvcihcInRhYmxlXCIpO1xuXHRcdGNvbnN0IGRhdGEgPSBBcnJheS5mcm9tKHRhYmxlPy5yb3dzIHx8IFtdLCAocm93LCBpc1Rib2R5KSA9PiB7XG5cdFx0XHRsZXQgcm93VG90YWwgPSAwO1xuXHRcdFx0Y29uc3QgdmFsdWVzID0gQXJyYXkuZnJvbShyb3cuY2VsbHMsIChjZWxsLCBpc1RkKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHZhbCA9IGNlbGwudGV4dENvbnRlbnQudHJpbSgpIHx8IFwiXCI7XG5cdFx0XHRcdGNvbnN0IG51bSA9IE51bWJlcih2YWwpIHx8IDA7XG5cdFx0XHRcdGlmIChpc1Rib2R5ICYmIGlzVGQpIHtcblx0XHRcdFx0XHRtYXggPSBNYXRoLm1heChtYXgsIG51bSk7XG5cdFx0XHRcdFx0cm93VG90YWwgKz0gbnVtO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWw7XG5cdFx0XHR9KTtcblx0XHRcdHJvd01heCA9IE1hdGgubWF4KHJvd01heCwgcm93VG90YWwpO1xuXHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHR9KTtcblxuXHRcdGNvbnN0IFt2YXJpYW50LCB0eXBlXSA9IChhdHRyKHRoaXMsIFwiZGF0YS12YXJpYW50XCIpIHx8IFwiYmFyXCIpLnNwbGl0KFwiLVwiKTtcblx0XHRjb25zdCBpc1ZlcnRpY2FsID0gdmFyaWFudCA9PT0gXCJjb2x1bW5cIjtcblx0XHRjb25zdCBpc1N0YWNrZWQgPSB0eXBlID09PSBcInN0YWNrZWRcIjtcblxuXHRcdGNvbnN0IHNtb290aGluZyA9IE51bWJlcih0eXBlIHx8IDEwKSB8fCAwO1xuXHRcdGNvbnN0IHN0eWxlID0gY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIHt9LCBjc3MpO1xuXHRcdGNvbnN0IGF4aXMgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcblx0XHRcdFwiYXJpYS1sYWJlbFwiOiBkYXRhWzBdWzBdIHx8IG51bGwsXG5cdFx0XHRjbGFzczogXCJheGlzXCIsXG5cdFx0XHRyb2xlOiBcImZpZ3VyZVwiLFxuXHRcdH0pO1xuXHRcdGNvbnN0IGdyb3VwcyA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzczogXCJheGlzR3JvdXBzXCIgfSk7XG5cdFx0Y29uc3Qgc3RlcHMgPSB0b1N0ZXBzKGlzU3RhY2tlZCA/IHJvd01heCA6IG1heCk7XG5cdFx0Y29uc3QgbGVnZW5kID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzOiBcImxlZ2VuZHNcIiB9KTtcblx0XHRjb25zdCBsZWdlbmRzID0gZGF0YVxuXHRcdFx0LnNsaWNlKDEpXG5cdFx0XHQubWFwKChbdGV4dF0sIGluZGV4KSA9PlxuXHRcdFx0XHRjcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3M6IGBsZWdlbmQgY29sb3ItJHtpbmRleCArIDF9YCB9LCB0ZXh0KSxcblx0XHRcdCk7XG5cdFx0Y29uc3QgbGVnZW5kSWRzID0gbGVnZW5kcy5tYXAodXNlSWQpO1xuXG5cdFx0YXhpcy5jbGFzc0xpc3QudG9nZ2xlKFwiaXMtaG9yaXpvbnRhbFwiLCAhaXNWZXJ0aWNhbCk7XG5cdFx0YXhpcy5jbGFzc0xpc3QudG9nZ2xlKFwiaXMtdmVydGljYWxcIiwgaXNWZXJ0aWNhbCk7XG5cdFx0YXhpcy5jbGFzc0xpc3QudG9nZ2xlKFwiaXMtc3RhY2tlZFwiLCBpc1N0YWNrZWQpO1xuXHRcdGF4aXMuc3R5bGUuc2V0UHJvcGVydHkoXCItLWdyb3Vwc1wiLCBgJHtkYXRhLmxlbmd0aCAtIDF9YCk7XG5cdFx0YXhpcy5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG90YWxcIiwgYCR7c3RlcHMudG90YWx9YCk7XG5cdFx0YXhpcy5hcHBlbmQoc3RlcHMuZWwsIGdyb3Vwcyk7XG5cblx0XHRpZiAodmFyaWFudCA9PT0gXCJiYXJcIiB8fCB2YXJpYW50ID09PSBcImNvbHVtblwiKSB7XG5cdFx0XHRkYXRhWzBdLmZvckVhY2goKGdyb3VwTGFiZWwsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGlmIChpbmRleCA9PT0gMCkgcmV0dXJuOyAvLyBTa2lwIGZpcnN0IGNvbHVtbiBpbnRlcm5hbGx5IHNvIGluZGV4IG1hdGNoZXMgcmVzdCBvZiBkYXRhXG5cdFx0XHRcdGNvbnN0IGdyb3VwID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzOiBcImF4aXNHcm91cFwiIH0pO1xuXHRcdFx0XHRjb25zdCBjb250ZW50ID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzOiBcImF4aXNHcm91cENvbnRlbnRcIiB9KTtcblx0XHRcdFx0Y29uc3QgbGFiZWwgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3M6IFwiYXhpc0xhYmVsXCIgfSwgZ3JvdXBMYWJlbCk7XG5cdFx0XHRcdGdyb3VwLmFwcGVuZChjb250ZW50LCBsYWJlbCk7XG5cdFx0XHRcdGdyb3Vwcy5hcHBlbmQoZ3JvdXApO1xuXG5cdFx0XHRcdGRhdGEuc2xpY2UoMSkuZm9yRWFjaCgodmFsdWVzLCBsZWdlbmRJbmRleCkgPT4ge1xuXHRcdFx0XHRcdGNvbnRlbnQuYXBwZW5kKFxuXHRcdFx0XHRcdFx0Y3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG5cdFx0XHRcdFx0XHRcdFwiYXJpYS1kZXNjcmliZWRieVwiOiBsZWdlbmRJZHNbbGVnZW5kSW5kZXhdLFxuXHRcdFx0XHRcdFx0XHRjbGFzczogYGJhciBjb2xvci0ke2xlZ2VuZEluZGV4ICsgMX1gLFxuXHRcdFx0XHRcdFx0XHRyb2xlOiBcImltZ1wiLFxuXHRcdFx0XHRcdFx0XHRzdHlsZTogYC0tdmFsdWU6ICR7dmFsdWVzW2luZGV4XX1gLFxuXHRcdFx0XHRcdFx0XHR0YWJpbmRleDogXCIwXCIsXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiBgJHt2YWx1ZXNbMF19OiAke3ZhbHVlc1tpbmRleF19YCxcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKHZhcmlhbnQgPT09IFwibGluZVwiIHx8IHZhcmlhbnQgPT09IFwiYXJlYVwiKSB7XG5cdFx0XHRjb25zdCBncm91cCA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzczogXCJheGlzR3JvdXBcIiB9KTtcblx0XHRcdGRhdGEuc2xpY2UoMSkuZm9yRWFjaCgoW2xlZ2VuZCwgLi4udmFsdWVzXSwgbGVnZW5kSW5kZXgpID0+IHtcblx0XHRcdFx0Y29uc3QgbGluZUNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuXHRcdFx0XHRcdGNsYXNzOiBgbGluZUNvbnRhaW5lciBjb2xvci0ke2xlZ2VuZEluZGV4ICsgMX1gLFxuXHRcdFx0XHRcdHJvbGU6IFwibGlzdFwiLFxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRjb25zdCBsaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHhtbG5zLCBcInN2Z1wiKTtcblx0XHRcdFx0YXR0cihsaW5lLCBcImFyaWEtaGlkZGVuXCIsIFwidHJ1ZVwiKTtcblx0XHRcdFx0YXR0cihsaW5lLCBcInByZXNlcnZlQXNwZWN0UmF0aW9cIiwgXCJub25lXCIpO1xuXHRcdFx0XHRhdHRyKGxpbmUsIFwidmlld0JveFwiLCBcIjAgMCAxMDAgMTAwXCIpO1xuXG5cdFx0XHRcdGNvbnN0IHBhdGggPSB0b1BhdGgoXG5cdFx0XHRcdFx0dmFsdWVzLm1hcCgodmFsdWUsIGluZGV4LCB7IGxlbmd0aCB9KSA9PiBbXG5cdFx0XHRcdFx0XHQoMTAwIC8gKGxlbmd0aCAtIDEpKSAqIGluZGV4LFxuXHRcdFx0XHRcdFx0MTAwIC0gKE51bWJlcih2YWx1ZSkgLyBzdGVwcy50b3RhbCkgKiAxMDAsXG5cdFx0XHRcdFx0XSksXG5cdFx0XHRcdFx0c21vb3RoaW5nIC8gMTAwLFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGNvbnN0IGxpbmVQYXRoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHhtbG5zLCBcInBhdGhcIik7XG5cdFx0XHRcdGF0dHIobGluZVBhdGgsIFwiY2xhc3NcIiwgXCJsaW5lXCIpO1xuXHRcdFx0XHRhdHRyKGxpbmVQYXRoLCBcImRcIiwgcGF0aCk7XG5cdFx0XHRcdGF0dHIobGluZVBhdGgsIFwiZmlsbFwiLCBcIm5vbmVcIik7XG5cdFx0XHRcdGF0dHIobGluZVBhdGgsIFwic3Ryb2tlXCIsIFwiY3VycmVudENvbG9yXCIpO1xuXHRcdFx0XHRjb25zdCBsaW5lQm9yZGVyID0gbGluZVBhdGguY2xvbmVOb2RlKHRydWUpIGFzIFNWR1BhdGhFbGVtZW50O1xuXHRcdFx0XHRhdHRyKGxpbmVCb3JkZXIsIFwiY2xhc3NcIiwgXCJsaW5lQm9yZGVyXCIpO1xuXG5cdFx0XHRcdGlmICh2YXJpYW50ID09PSBcImFyZWFcIikge1xuXHRcdFx0XHRcdGNvbnN0IGxpbmVTaGFkZSA9IGxpbmVQYXRoLmNsb25lTm9kZSh0cnVlKSBhcyBTVkdQYXRoRWxlbWVudDtcblx0XHRcdFx0XHRhdHRyKGxpbmVTaGFkZSwgXCJkXCIsIGBNLTEwMCwxMDAgTCR7cGF0aC5zbGljZSgxKX1MMjAwLDEwMGApO1xuXHRcdFx0XHRcdGF0dHIobGluZVNoYWRlLCBcImNsYXNzXCIsIFwibGluZVNoYWRlXCIpO1xuXHRcdFx0XHRcdGxpbmUuYXBwZW5kKGxpbmVTaGFkZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YWx1ZXMuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgY29sID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IHJvbGU6IFwibGlzdGl0ZW1cIiB9KTtcblx0XHRcdFx0XHRjb2wuYXBwZW5kQ2hpbGQoXG5cdFx0XHRcdFx0XHRjcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcblx0XHRcdFx0XHRcdFx0XCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGxlZ2VuZElkc1tsZWdlbmRJbmRleF0sXG5cdFx0XHRcdFx0XHRcdHRhYmluZGV4OiBcIjBcIixcblx0XHRcdFx0XHRcdFx0dGl0bGU6IGAke2RhdGFbMF1baW5kZXggKyAxXX06ICR7dmFsdWV9ICgke2xlZ2VuZH0pYCxcblx0XHRcdFx0XHRcdFx0Y2xhc3M6IFwibGluZVBvaW50XCIsXG5cdFx0XHRcdFx0XHRcdHJvbGU6IFwiaW1nXCIsXG5cdFx0XHRcdFx0XHRcdHN0eWxlOiBgLS12YWx1ZTogJHt2YWx1ZX1gLFxuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRsaW5lQ29udGFpbmVyLmFwcGVuZChjb2wpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRsaW5lLmFwcGVuZChsaW5lQm9yZGVyLCBsaW5lUGF0aCk7XG5cdFx0XHRcdGxpbmVDb250YWluZXIuYXBwZW5kKGxpbmUpO1xuXHRcdFx0XHRncm91cC5hcHBlbmQobGluZUNvbnRhaW5lcik7XG5cdFx0XHR9KTtcblx0XHRcdGdyb3Vwcy5hcHBlbmQoZ3JvdXApO1xuXHRcdH1cblxuXHRcdGlmICh2YXJpYW50ID09PSBcImRvdWdobnV0XCIpIHtcblx0XHRcdGNvbnN0IGRvdWdobnV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHhtbG5zLCBcInN2Z1wiKTtcblx0XHRcdGNvbnN0IHRvdCA9IGRhdGEuc2xpY2UoMSkucmVkdWNlKChhY2MsIFssIHZhbF0pID0+IGFjYyArIE51bWJlcih2YWwpLCAwKTtcblx0XHRcdGF0dHIoZG91Z2hudXQsIFwiY2xhc3NcIiwgXCJkb3VnaG51dFwiKTtcblx0XHRcdGF0dHIoZG91Z2hudXQsIFwidmlld0JveFwiLCBcIjAgMCAxMDAgMTAwXCIpO1xuXG5cdFx0XHRsZXQgb2Zmc2V0ID0gMDtcblx0XHRcdGNvbnN0IHJhZGl1cyA9IDUwO1xuXHRcdFx0Y29uc3QgaW5uZXIgPSAyNTtcblxuXHRcdFx0ZGF0YS5zbGljZSgxKS5mb3JFYWNoKChbbGFiZWwsIHZhbHVlXSwgbGVnZW5kSW5kZXgpID0+IHtcblx0XHRcdFx0Y29uc3QgcGF0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh4bWxucywgXCJwYXRoXCIpO1xuXHRcdFx0XHRjb25zdCBzdGFydCA9IG9mZnNldCAvIHRvdDtcblx0XHRcdFx0b2Zmc2V0ICs9IE51bWJlcih2YWx1ZSk7XG5cdFx0XHRcdGNvbnN0IGVuZCA9IG9mZnNldCAvIHRvdDtcblx0XHRcdFx0Y29uc3QgbGFyZ2VBcmMgPSBlbmQgLSBzdGFydCA+IDAuNSA/IDEgOiAwO1xuXHRcdFx0XHRjb25zdCBhMCA9IDIgKiBNYXRoLlBJICogKHN0YXJ0IC0gMC4yNSk7XG5cdFx0XHRcdGNvbnN0IGExID0gMiAqIE1hdGguUEkgKiAoZW5kIC0gMC4yNSk7XG5cdFx0XHRcdGNvbnN0IHgwID0gTWF0aC5jb3MoYTApO1xuXHRcdFx0XHRjb25zdCB5MCA9IE1hdGguc2luKGEwKTtcblx0XHRcdFx0Y29uc3QgeDEgPSBNYXRoLmNvcyhhMSk7XG5cdFx0XHRcdGNvbnN0IHkxID0gTWF0aC5zaW4oYTEpO1xuXHRcdFx0XHRjb25zdCBkID0gYE0gJHtyYWRpdXMgKyBpbm5lciAqIHgwfSAke3JhZGl1cyArIGlubmVyICogeTB9IEwgJHtyYWRpdXMgKyByYWRpdXMgKiB4MH0gJHtyYWRpdXMgKyByYWRpdXMgKiB5MH0gQSAke3JhZGl1c30gJHtyYWRpdXN9IDAgJHtsYXJnZUFyY30gMSAke3JhZGl1cyArIHJhZGl1cyAqIHgxfSAke3JhZGl1cyArIHJhZGl1cyAqIHkxfSBMICR7cmFkaXVzICsgaW5uZXIgKiB4MX0gJHtyYWRpdXMgKyBpbm5lciAqIHkxfSBBICR7aW5uZXJ9ICR7aW5uZXJ9IDAgJHtsYXJnZUFyY30gMCAke3JhZGl1cyArIGlubmVyICogeDB9ICR7cmFkaXVzICsgaW5uZXIgKiB5MH1gO1xuXG5cdFx0XHRcdGF0dHIocGF0aCwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIGxlZ2VuZElkc1tsZWdlbmRJbmRleF0pO1xuXHRcdFx0XHRhdHRyKHBhdGgsIFwiY2xhc3NcIiwgYGNvbG9yLSR7bGVnZW5kSW5kZXggKyAxfWApO1xuXHRcdFx0XHRhdHRyKHBhdGgsIFwiZFwiLCBkKTtcblx0XHRcdFx0YXR0cihwYXRoLCBcInJvbGVcIiwgXCJpbWdcIik7XG5cdFx0XHRcdGF0dHIocGF0aCwgXCJ0YWJpbmRleFwiLCBcIjBcIik7XG5cdFx0XHRcdGF0dHIocGF0aCwgXCJ0aXRsZVwiLCBsYWJlbCB8fCBudWxsKTtcblx0XHRcdFx0ZG91Z2hudXQuYXBwZW5kQ2hpbGQocGF0aCk7XG5cdFx0XHRcdHRoaXMuc2hhZG93Um9vdD8uYXBwZW5kKGRvdWdobnV0KTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmICh2YXJpYW50ICE9PSBcImRvdWdobnV0XCIpIHRoaXMuc2hhZG93Um9vdD8uYXBwZW5kKGF4aXMpO1xuXG5cdFx0bGVnZW5kLmFwcGVuZCguLi5sZWdlbmRzKTtcblxuXHRcdHRoaXMuc2hhZG93Um9vdD8uYXBwZW5kKHN0eWxlLCBsZWdlbmQpO1xuXHR9XG59XG5cbmlmIChJU19CUk9XU0VSICYmICF3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KFwibXRkcy1jaGFydFwiKSlcblx0d2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShcIm10ZHMtY2hhcnRcIiwgTVREU0NoYXJ0KTtcblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9vYnNlcnZhYmxlaHEuY29tL0BuZHJ5L3Ntb290aC1hLXN2Zy1wYXRoLXdpdGgtY3ViaWMtYmV6aWVyLWN1cnZlc1xuY29uc3QgdG9QYXRoID0gKHBvaW50czogbnVtYmVyW11bXSwgczogbnVtYmVyKSA9PlxuXHRwb2ludHMubWFwKChbeCwgeV0sIGksIGEpID0+IChpID8gc21vb3RoKGksIGEsIHMpIDogYE0ke3h9LCR7eX1gKSkuam9pbihcIiBcIik7XG5jb25zdCBhZGQgPSAoW2F4LCBheV06IG51bWJlcltdLCBbYngsIGJ5XTogbnVtYmVyW10pID0+IFtheCArIGJ4LCBheSArIGJ5XTtcbmNvbnN0IHN1YiA9IChbYXgsIGF5XTogbnVtYmVyW10sIFtieCwgYnldOiBudW1iZXJbXSkgPT4gW2F4IC0gYngsIGF5IC0gYnldO1xuY29uc3Qgc2NhbGUgPSAoczogbnVtYmVyLCBbeCwgeV06IG51bWJlcltdKSA9PiBbcyAqIHgsIHMgKiB5XTtcbmNvbnN0IHNtb290aCA9IChpOiBudW1iZXIsIGFsbDogbnVtYmVyW11bXSwgc21vb3RoOiBudW1iZXIpID0+IHtcblx0Y29uc3Qgc3RhcnQgPSBhbGxbaSAtIDFdO1xuXHRjb25zdCBlbmQgPSBhbGxbaV07XG5cdGNvbnN0IFtjc1gsIGNzWV0gPSBhZGQoc3RhcnQsIHNjYWxlKHNtb290aCwgc3ViKGVuZCwgYWxsW2kgLSAyXSB8fCBzdGFydCkpKTsgLy8gc3RhcnQgY29udHJvbCBwb2ludFxuXHRjb25zdCBbY2VYLCBjZVldID0gYWRkKGVuZCwgc2NhbGUoc21vb3RoLCBzdWIoc3RhcnQsIGFsbFtpICsgMV0gfHwgZW5kKSkpOyAvLyBlbmQgY29udHJvbCBwb2ludFxuXHRyZXR1cm4gYEMgJHtjc1h9LCR7Y3NZfSAke2NlWH0sJHtjZVl9ICR7ZW5kWzBdfSwke2VuZFsxXX1gO1xufTtcblxuY29uc3QgZ2V0TnVtID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KCkuZm9ybWF0O1xuY29uc3QgdG9TdGVwcyA9IChtYXg6IG51bWJlcikgPT4ge1xuXHRjb25zdCBkaWdpdHMgPSAxMCAqKiAoYCR7fn5tYXh9YC5sZW5ndGggLSAxKTsgLy8gR2V0IGFtb3VudCBvZiBkaWdpdHMgaW4gdG90YWwgbnVtYmVyXG5cdGNvbnN0IHN0ZXAgPSBtYXggLyBkaWdpdHMgPCA1ID8gZGlnaXRzIC8gMiA6IGRpZ2l0czsgLy8gSWYgd2UgZ2V0IGxlc3MgdGhhbiA1IHN0ZXBzLCBtYWtlIHNtYWxsZXIgc3RlcHNcblx0Y29uc3QgdG90YWwgPSBNYXRoLmNlaWwobWF4IC8gc3RlcCkgKiBzdGVwO1xuXHRjb25zdCBlbCA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cblx0ZWwuY2xhc3NMaXN0LmFkZChcImF4aXNTdGVwc1wiKTtcblx0ZWwuYXBwZW5kKFxuXHRcdC4uLkFycmF5LmZyb20oeyBsZW5ndGg6IHRvdGFsIC8gc3RlcCArIDEgfSwgKF8sIGkpID0+IGdldE51bShzdGVwICogaSkpXG5cdFx0XHQucmV2ZXJzZSgpXG5cdFx0XHQubWFwKChudW0pID0+IHtcblx0XHRcdFx0Y29uc3QgbGFiZWwgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3M6IFwiYXhpc0xhYmVsXCIgfSwgbnVtKTtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3M6IFwiYXhpc1N0ZXBcIiB9KTtcblx0XHRcdFx0dmFsdWUuYXBwZW5kKGxhYmVsKTtcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0fSksXG5cdCk7XG5cblx0cmV0dXJuIHsgdG90YWwsIGVsIH07XG59O1xuXG4vKipcbiAqIGNyZWF0ZUVsZW1lbnRcbiAqIEBkZXNjcmlwdGlvbiBjcmVhdGVzIGVsZW1lbnQgYW5kIGFzc2lnbnMgcHJvcGVydGllc1xuICogQHBhcmFtIHRhTmFtZSBUaGUgdGFnbmFtZSBvZiBlbGVtZW50IHRvIGNyZWF0ZVxuICogQHBhcmFtIHByb3BzIE9wdGlvbmFsIHByb3BlcnRpZXMgdG8gYWRkIHRvIHRoZSBlbGVtZW50XG4gKiBAcmV0dXJuIEhUTUxFbGVtZW50IHdpdGggcHJvcHNcbiAqL1xuY29uc3QgY3JlYXRlRWxlbWVudCA9IDxUYWdOYW1lIGV4dGVuZHMga2V5b2YgSFRNTEVsZW1lbnRUYWdOYW1lTWFwPihcblx0dGFnTmFtZTogVGFnTmFtZSxcblx0YXR0cnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsPixcblx0dGV4dD86IHN0cmluZyB8IG51bGwsXG4pOiBIVE1MRWxlbWVudFRhZ05hbWVNYXBbVGFnTmFtZV0gPT4ge1xuXHRjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG5cdGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG5cdGlmIChhdHRycykgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkgYXR0cihlbCwga2V5LCB2YWwpO1xuXHRyZXR1cm4gZWw7XG59O1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGF0dHIsXG5cdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIsXG5cdElTX0JST1dTRVIsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0UVVJQ0tfRVZFTlQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRElBTE9HID0gc3R5bGVzLmRpYWxvZy5zcGxpdChcIiBcIilbMF07XG5jb25zdCBESUFMT0dTID0gSVNfQlJPV1NFUlxuXHQ/IChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuXHRcdFx0Q1NTX0RJQUxPRyxcblx0XHQpIGFzIEhUTUxDb2xsZWN0aW9uT2Y8SFRNTERpYWxvZ0VsZW1lbnQ+KVxuXHQ6IFtdO1xuXG5jb25zdCBoYW5kbGVNb2RhbCA9ICgpID0+IHtcblx0Zm9yIChjb25zdCBkaWFsb2cgb2YgRElBTE9HUylcblx0XHRpZiAoZGlhbG9nLmlzQ29ubmVjdGVkICYmIGRpYWxvZy5zaG93TW9kYWwgJiYgZGlhbG9nLmNsb3NlKSB7XG5cdFx0XHRpZiAoZGlhbG9nLm1hdGNoZXMoJ1tvcGVuXTpub3QoW2RhdGEtbW9kYWw9XCJmYWxzZVwiXSk6bm90KDptb2RhbCknKSkge1xuXHRcdFx0XHRhdHRyKGRpYWxvZywgXCJvcGVuXCIsIG51bGwpOyAvLyBVc2luZyBhdHRyaWJ1dGUgaW5zdGVhZCBvZiAuY2xvc2UgdG8gYXZvaWQgYGNsb3NlYCBldmVudFxuXHRcdFx0XHRkaWFsb2cuc2hvd01vZGFsKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGRpYWxvZy5tYXRjaGVzKFwiOm1vZGFsOm5vdChbb3Blbl0pXCIpKSB7XG5cdFx0XHRcdGF0dHIoZGlhbG9nLCBcIm9wZW5cIiwgXCJcIik7IC8vIFNldCBhcyBvcGVuXG5cdFx0XHRcdGRpYWxvZy5jbG9zZSgpOyAvLyBTbyB3ZSBjb3JyZWNsdHkgY2FuIGNhbGwgLmNsb3NlLCByZW1vdmluZyA8ZGlhbG9nPiBmcm9tICN0b3AtbGF5ZXJcblx0XHRcdH1cblx0XHR9XG59O1xuXG5jb25zdCBoYW5kbGVEaWFsb2dDbGljayA9ICh7XG5cdGNsaWVudFg6IHgsXG5cdGNsaWVudFk6IHksXG5cdHRhcmdldDogZWwsXG59OiBNb3VzZUV2ZW50KSA9PiB7XG5cdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxEaWFsb2dFbGVtZW50ICYmIGF0dHIoZWwsIFwiZGF0YS1jbG9zZWRieVwiKSA9PT0gXCJhbnlcIikge1xuXHRcdGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRjb25zdCBpc0luc2lkZSA9IHRvcCA8PSB5ICYmIHkgPD0gYm90dG9tICYmIGxlZnQgPD0geCAmJiB4IDw9IHJpZ2h0O1xuXHRcdGlmICghaXNJbnNpZGUpIHJldHVybiBlbC5jbG9zZSgpO1xuXHR9XG5cdGNvbnN0IGRpYWxvZyA9IChlbCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKFwiZGlhbG9nXCIpO1xuXHRjb25zdCBjbG9zZSA9IGRpYWxvZyAmJiAoZWwgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LignW2RhdGEtY29tbWFuZD1cImNsb3NlXCJdJyk7XG5cdGlmIChjbG9zZSkgZGlhbG9nLmNsb3NlKCk7XG59O1xuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZURpYWxvZ0NsaWNrIGFzIEV2ZW50TGlzdGVuZXIsIFFVSUNLX0VWRU5UKTtcblx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcihoYW5kbGVNb2RhbCkub2JzZXJ2ZShcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdFx0e1xuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbXCJvcGVuXCJdLFxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0fSxcblx0KTtcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uLCBvbkxvYWRlZCwgUVVJQ0tfRVZFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZnVuY3Rpb24gaGFuZGxlRXJyb3N1bW1hcnlJbmplY3QoZXZlbnQ6IEV2ZW50ICYgeyBhbmltYXRpb25OYW1lPzogc3RyaW5nIH0pIHtcblx0aWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgIT09IHN0eWxlcy5fZXJyb3JzdW1tYXJ5KSByZXR1cm47XG5cdGNvbnN0IGZpcnN0ID0gKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KT8uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cblx0aWYgKGZpcnN0IGluc3RhbmNlb2YgSFRNTEhlYWRpbmdFbGVtZW50KSB7XG5cdFx0YXR0cihmaXJzdCwgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuXHRcdGZpcnN0LmZvY3VzKCk7IC8vIEF1dG9mb2N1cyBmaXJzdCBoZWFkaW5nXG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b24oZG9jdW1lbnQsIFwiYW5pbWF0aW9uZW5kXCIsIGhhbmRsZUVycm9zdW1tYXJ5SW5qZWN0LCBRVUlDS19FVkVOVCksXG4pO1xuIiwidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuXG4vLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgRk9DVVNfT1VUTElORSA9IFwib3V0bGluZTogMXB4IGRvdHRlZDsgb3V0bGluZTogNXB4IGF1dG8gSGlnaGxpZ2h0OyBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3JcIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuc2hhZG93Um9vdCB8fCBlbGVtZW50LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gIC8vIFVubmFtZWQgc2xvdCBkb2VzIGF1dG9tYXRpY2FsbHkgcmVuZGVyIGFsbCB0b3AgZWxlbWVudCBub2Rlc1xuICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgY3NzKVxuKTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoX2Vycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgTElWRTtcbnZhciBMSVZFX1NSX0ZJWCA9IDA7XG52YXIgc3BlYWsgPSAodGV4dCkgPT4ge1xuICBpZiAoIUxJVkUpIHtcbiAgICBMSVZFID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBMSVZFLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gICAgYXR0cihMSVZFLCBcImFyaWEtbGl2ZVwiLCBcImFzc2VydGl2ZVwiKTtcbiAgfVxuICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKExJVkUpO1xuICBpZiAodGV4dCkgTElWRS50ZXh0Q29udGVudCA9IGAke3RleHR9JHtMSVZFX1NSX0ZJWCsrICUgMiA/IFwiXFx4QTBcIiA6IFwiXCJ9YDtcbn07XG52YXIgc2V0VmFsdWUgPSAoaW5wdXQsIGRhdGEsIHR5cGUgPSBcIlwiKSA9PiB7XG4gIHZhciBfYTIsIF9iO1xuICBjb25zdCBldmVudCA9IHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUsIGRhdGEsIGlucHV0VHlwZTogdHlwZSB9O1xuICBjb25zdCBwcm90byA9IEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiYmVmb3JlaW5wdXRcIiwgZXZlbnQpKTtcbiAgKF9iID0gKF9hMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIFwidmFsdWVcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChpbnB1dCwgZGF0YSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJpbnB1dFwiLCBldmVudCkpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImNoYW5nZVwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xufTtcbnZhciBJU19QUkVTUyA9IGZhbHNlO1xudmFyIGlzTW91c2VEb3duID0gKGV2ZW50KSA9PiB7XG4gIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm1vdXNldXBcIikgSVNfUFJFU1MgPSBmYWxzZTtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2Vkb3duXCIpIHtcbiAgICBJU19QUkVTUyA9IHRydWU7XG4gICAgb24oZG9jdW1lbnQsIFwibW91c2V1cFwiLCBpc01vdXNlRG93biwgeyBvbmNlOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiBJU19QUkVTUztcbn07XG52YXIgZGVjbGFyYXRpdmVTaGFkb3dSb290ID0gKHN0eWxlLCBzbG90ID0gXCI8c2xvdD48L3Nsb3Q+XCIpID0+IGA8dGVtcGxhdGUgc2hhZG93cm9vdG1vZGU9XCJvcGVuXCI+JHtzbG90fTxzdHlsZT4ke3N0eWxlfTwvc3R5bGU+PC90ZW1wbGF0ZT5gO1xuXG4vLyB1LW9wdGlvbi50c1xudmFyIERJU0FCTEVEID0gXCJkaXNhYmxlZFwiO1xudmFyIFNFTEVDVEVEID0gXCJzZWxlY3RlZFwiO1xudmFyIFVIVE1MT3B0aW9uRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtESVNBQkxFRCwgU0VMRUNURURdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICghSVNfSU9TKSB0aGlzLnRhYkluZGV4ID0gLTE7XG4gICAgaWYgKCF0aGlzLmhhc0F0dHJpYnV0ZShcInJvbGVcIikpIGF0dHIodGhpcywgXCJyb2xlXCIsIFwib3B0aW9uXCIpO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWRpc2FibGVkXCIsIGAke3RoaXMuZGlzYWJsZWR9YCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtc2VsZWN0ZWRcIiwgYCR7dGhpcy5zZWxlY3RlZH1gKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgd2hldGhlciB0aGUgb3B0aW9uIGluIHRoZSBsaXN0IGJveCBpcyB0aGUgZGVmYXVsdCBpdGVtLiAqL1xuICBnZXQgZGVmYXVsdFNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzW1NFTEVDVEVEXTtcbiAgfVxuICBzZXQgZGVmYXVsdFNlbGVjdGVkKHZhbHVlKSB7XG4gICAgdGhpc1tTRUxFQ1RFRF0gPSB2YWx1ZTtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgRElTQUJMRUQpICE9PSBudWxsO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgRElTQUJMRUQsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIC8qKiBSZXRyaWV2ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGZvcm0gdGhhdCB0aGUgb2JqZWN0IGlzIGVtYmVkZGVkIGluLiAqL1xuICBnZXQgZm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwiZm9ybVwiKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIG9yZGluYWwgcG9zaXRpb24gb2YgYW4gb3B0aW9uIGluIGEgbGlzdCBib3guICovXG4gIGdldCBpbmRleCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oKF9hMiA9IHRoaXMucGFyZW50RWxlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5vcHRpb25zKSB8fCBbdGhpc11cbiAgICBdLmluZGV4T2YodGhpcyk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIGEgdmFsdWUgdGhhdCB5b3UgY2FuIHVzZSB0byBpbXBsZW1lbnQgeW91ciBvd24gbGFiZWwgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIG9iamVjdC4gKi9cbiAgZ2V0IGxhYmVsKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIChfYTIgPSBhdHRyKHRoaXMsIFwibGFiZWxcIikpICE9IG51bGwgPyBfYTIgOiB0aGlzLnRleHQ7XG4gIH1cbiAgc2V0IGxhYmVsKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImxhYmVsXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgU0VMRUNURUQpICE9PSBudWxsO1xuICB9XG4gIHNldCBzZWxlY3RlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgU0VMRUNURUQsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdGV4dCBzdHJpbmcgc3BlY2lmaWVkIGJ5IHRoZSBvcHRpb24gdGFnLiAqL1xuICBnZXQgdGV4dCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IHRoaXMudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICB9XG4gIHNldCB0ZXh0KHRleHQpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIHZhbHVlIHdoaWNoIGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIgd2hlbiB0aGUgZm9ybSBjb250cm9sIGlzIHN1Ym1pdHRlZC4gKi9cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIChfYTIgPSBhdHRyKHRoaXMsIFwidmFsdWVcIikpICE9IG51bGwgPyBfYTIgOiB0aGlzLnRleHQ7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgfVxufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtb3B0aW9uXCIsIFVIVE1MT3B0aW9uRWxlbWVudCk7XG5cbi8vIHUtZGF0YWxpc3QudHNcbnZhciBVSFRNTERhdGFMaXN0U3R5bGUgPSBgJHtESVNQTEFZX0JMT0NLfVxuOjpzbG90dGVkKHUtb3B0aW9uKSB7IGRpc3BsYXk6IGJsb2NrOyBjdXJzb3I6IHBvaW50ZXIgfVxuOjpzbG90dGVkKHUtb3B0aW9uOmZvY3VzKSB7ICR7Rk9DVVNfT1VUTElORX0gfVxuOjpzbG90dGVkKHUtb3B0aW9uW2FyaWEtaGlkZGVuPVwidHJ1ZVwiXSksXG46OnNsb3R0ZWQodS1vcHRpb25bZGlzYWJsZWRdKSxcbjo6c2xvdHRlZCh1LW9wdGlvbltoaWRkZW5dKSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudCB9YDtcbnZhciBVSFRNTERhdGFMaXN0U2hhZG93Um9vdCA9IGRlY2xhcmF0aXZlU2hhZG93Um9vdChVSFRNTERhdGFMaXN0U3R5bGUpO1xudmFyIExJVkVfVElNRVI7XG52YXIgSU5QVVRfREVCT1VOQ0UgPSAwO1xudmFyIElTX01PQklMRSA9IElTX0lPUyB8fCBJU19BTkRST0lEO1xudmFyIEVWRU5UUyA9IFwiY2xpY2ssZm9jdXNvdXQsaW5wdXQsa2V5ZG93bixtb3VzZWRvd24sbW91c2V1cFwiO1xudmFyIEVWRU5UU19JTlBVVCA9IFwiZm9jdXMsZm9jdXNpbixibHVyLGZvY3Vzb3V0XCI7XG52YXIgVEVYVFMgPSB7XG4gIHNpbmd1bGFyOiBcIiVkIGhpdFwiLFxuICBwbHVyYWw6IFwiJWQgaGl0c1wiXG59O1xudmFyIFVIVE1MRGF0YUxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3RleHRzID0gX19zcHJlYWRWYWx1ZXMoe30sIFRFWFRTKTtcbiAgICB0aGlzLl92YWx1ZSA9IFwiXCI7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgVUhUTUxEYXRhTGlzdFN0eWxlKTtcbiAgfVxuICAvLyBVc2VkIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgYW5ub3VuY2VtZW50c1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiaWRcIiwgLi4uT2JqZWN0LmtleXMoVEVYVFMpLm1hcCgoa2V5KSA9PiBgZGF0YS1zci0ke2tleX1gKV07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuX3Jvb3QgPSBnZXRSb290KHRoaXMpO1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwibGlzdGJveFwiKTtcbiAgICBhdHRyKHRoaXMsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICBvbih0aGlzLl9yb290LCBcImZvY3VzaW5cIiwgdGhpcyk7XG4gICAgb24odGhpcy5fcm9vdCwgXCJmb2N1c1wiLCB0aGlzLCB0cnVlKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1wiZGlzYWJsZWRcIiwgXCJoaWRkZW5cIiwgXCJsYWJlbFwiLCBcInZhbHVlXCJdLFxuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpKTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBvZmYodGhpcy5fcm9vdCB8fCB0aGlzLCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIG9mZih0aGlzLl9yb290IHx8IHRoaXMsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIGZhbHNlKTtcbiAgICBkaXNjb25uZWN0SW5wdXQodGhpcyk7XG4gICAgdGhpcy5fcm9vdCA9IHZvaWQgMDtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socHJvcCwgX3ByZXYsIG5leHQpIHtcbiAgICBjb25zdCB0ZXh0ID0gcHJvcCA9PSBudWxsID8gdm9pZCAwIDogcHJvcC5zcGxpdChcImRhdGEtc3ItXCIpWzFdO1xuICAgIGNvbnN0IGNzcyA9IGBpbnB1dFtsaXN0PVwiJHt0aGlzLmlkfVwiXWA7XG4gICAgaWYgKFRFWFRTW3RleHRdKSB0aGlzLl90ZXh0c1t0ZXh0XSA9IG5leHQgfHwgVEVYVFNbdGV4dF07XG4gICAgZWxzZSBpZiAodGhpcy5fcm9vdCkge1xuICAgICAgaWYgKHRoaXMuX2lucHV0KSBzZXR1cElucHV0KHRoaXMsIHRoaXMuX2lucHV0KTtcbiAgICAgIGZvciAoY29uc3QgaW5wdXQgb2YgdGhpcy5fcm9vdC5xdWVyeVNlbGVjdG9yQWxsKGNzcykpXG4gICAgICAgIHNldHVwSW5wdXQodGhpcywgaW5wdXQpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHsgdGFyZ2V0LCB0eXBlIH0gPSBldmVudDtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmICh0eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImZvY3VzXCIgfHwgdHlwZSA9PT0gXCJmb2N1c2luXCIpIG9uRm9jdXModGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImJsdXJcIiB8fCB0eXBlID09PSBcImZvY3Vzb3V0XCIpIG9uQmx1cih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwia2V5ZG93blwiKSBvbktleURvd24odGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiICYmIHRoaXMuY29udGFpbnModGFyZ2V0KSlcbiAgICAgIGlzTW91c2VEb3duKGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJtdXRhdGlvblwiIHx8IHR5cGUgPT09IFwiaW5wdXRcIikge1xuICAgICAgY2xlYXJUaW1lb3V0KElOUFVUX0RFQk9VTkNFKTtcbiAgICAgIElOUFVUX0RFQk9VTkNFID0gc2V0VGltZW91dChvbklucHV0LCAwLCB0aGlzLCBldmVudCk7XG4gICAgfVxuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidS1vcHRpb25cIik7XG4gIH1cbn07XG52YXIgaXNEaXNhYmxlZCA9IChpbnB1dCkgPT4gKGlucHV0ID09IG51bGwgPyB2b2lkIDAgOiBpbnB1dC5kaXNhYmxlZCkgfHwgKGlucHV0ID09IG51bGwgPyB2b2lkIDAgOiBpbnB1dC5yZWFkT25seSkgfHwgZmFsc2U7XG52YXIgc2V0RXhwYW5kZWQgPSAoc2VsZiwgb3BlbikgPT4ge1xuICB2YXIgX2EyLCBfYiwgX2M7XG4gIGlmIChzZWxmLmhpZGRlbiAhPT0gb3BlbikgcmV0dXJuO1xuICBzZWxmLmhpZGRlbiA9IGlzRGlzYWJsZWQoc2VsZiA9PSBudWxsID8gdm9pZCAwIDogc2VsZi5faW5wdXQpIHx8ICFvcGVuO1xuICAoX2EyID0gbXV0YXRpb25PYnNlcnZlcihzZWxmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50YWtlUmVjb3JkcygpO1xuICBjb25zdCBpc1BvcG92ZXIgPSBzZWxmLmlzQ29ubmVjdGVkICYmIHNlbGYucG9wb3ZlciAmJiAoKF9iID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5pc0Nvbm5lY3RlZCkgJiYgKChfYyA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2MucG9wb3ZlclRhcmdldEVsZW1lbnQpID09PSBzZWxmO1xuICBpZiAoc2VsZi5faW5wdXQpIHNldHVwSW5wdXQoc2VsZiwgc2VsZi5faW5wdXQsIG9wZW4pO1xuICBpZiAoaXNQb3BvdmVyKSBhdHRyKHNlbGYsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcbiAgaWYgKGlzUG9wb3Zlcikgc2VsZi50b2dnbGVQb3BvdmVyKG9wZW4pO1xuICBpZiAob3Blbikgb25JbnB1dChzZWxmKTtcbn07XG52YXIgZGlzY29ubmVjdElucHV0ID0gKHNlbGYpID0+IHtcbiAgaWYgKCFzZWxmLl9pbnB1dCkgcmV0dXJuO1xuICBvZmYoc2VsZi5faW5wdXQgfHwgc2VsZiwgRVZFTlRTX0lOUFVULCBzZWxmKTtcbiAgb2ZmKHNlbGYuX3Jvb3QgfHwgc2VsZiwgRVZFTlRTLCBzZWxmKTtcbiAgc2V0RXhwYW5kZWQoc2VsZiwgZmFsc2UpO1xuICBzZWxmLl9pbnB1dCA9IHZvaWQgMDtcbn07XG52YXIgc2V0dXBJbnB1dCA9IChzZWxmLCBpbnB1dCwgb3BlbiA9IGZhbHNlKSA9PiB7XG4gIGlmIChzZWxmLnBvcG92ZXIpIGF0dHIoaW5wdXQsIFwicG9wb3ZlcnRhcmdldFwiLCB1c2VJZChzZWxmKSk7XG4gIG9uKGlucHV0LCBFVkVOVFNfSU5QVVQsIHNlbGYsIHRydWUpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtYXV0b2NvbXBsZXRlXCIsIFwibGlzdFwiKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWNvbnRyb2xzXCIsIHVzZUlkKHNlbGYpKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWV4cGFuZGVkXCIsIGAkeyFJU19NT0JJTEUgfHwgb3Blbn1gKTtcbiAgYXR0cihpbnB1dCwgXCJhdXRvY29tcGxldGVcIiwgXCJvZmZcIik7XG4gIGF0dHIoaW5wdXQsIFwicm9sZVwiLCBpc0Rpc2FibGVkKGlucHV0KSA/IG51bGwgOiBcImNvbWJvYm94XCIpO1xufTtcbnZhciBvbkZvY3VzID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IGlzSW5wdXQgPSBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50O1xuICBpZiAoaXNJbnB1dCAmJiBldmVudC5pc1RydXN0ZWQpIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICBpZiAoc2VsZi5faW5wdXQgIT09IGV2ZW50LnRhcmdldCAmJiBpc0lucHV0ICYmIGV2ZW50LnRhcmdldC5saXN0ID09PSBzZWxmKSB7XG4gICAgaWYgKHNlbGYuX2lucHV0KSBkaXNjb25uZWN0SW5wdXQoc2VsZik7XG4gICAgc2VsZi5faW5wdXQgPSBldmVudC50YXJnZXQ7XG4gICAgc2VsZi5faW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImZvY3VzXCIpKTtcbiAgICBzZWxmLl9pbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNpblwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgIGF0dHIoc2VsZiwgU0FGRV9MQUJFTExFREJZLCB1c2VJZCgoX2EyID0gc2VsZi5faW5wdXQubGFiZWxzKSA9PSBudWxsID8gdm9pZCAwIDogX2EyWzBdKSk7XG4gICAgb24oc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICAgIHNldEV4cGFuZGVkKHNlbGYsIGF0dHIoc2VsZi5faW5wdXQsIFwiaW5wdXRtb2RlXCIpICE9PSBcIm5vbmVcIik7XG4gICAgc3BlYWsoKTtcbiAgfVxufTtcbnZhciBvbkJsdXIgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgaWYgKCFJU19BTkRST0lEICYmICFpc01vdXNlRG93bigpICYmIHNlbGYuX2lucHV0KVxuICAgIHNldFRpbWVvdXQob25CbHVycmVkLCAwLCBzZWxmKTtcbiAgaWYgKGV2ZW50LnRhcmdldCA9PT0gc2VsZi5faW5wdXQgJiYgZXZlbnQuaXNUcnVzdGVkKVxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufTtcbnZhciBvbkJsdXJyZWQgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByZWxhdGVkVGFyZ2V0ID0gKChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpIHx8IG51bGw7XG4gIGNvbnN0IGlucHV0ID0gc2VsZi5faW5wdXQ7XG4gIGlmIChpbnB1dCAmJiBpbnB1dCAhPT0gcmVsYXRlZFRhcmdldCAmJiAhc2VsZi5jb250YWlucyhyZWxhdGVkVGFyZ2V0KSkge1xuICAgIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJibHVyXCIsIHsgcmVsYXRlZFRhcmdldCB9KSk7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNvdXRcIiwgeyBidWJibGVzOiB0cnVlLCByZWxhdGVkVGFyZ2V0IH0pXG4gICAgKTtcbiAgICBkaXNjb25uZWN0SW5wdXQoc2VsZik7XG4gIH1cbn07XG52YXIgb25DbGljayA9IChzZWxmLCB7IHRhcmdldCB9KSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmICghc2VsZi5faW5wdXQgfHwgc2VsZi5faW5wdXQgPT09IHRhcmdldCkgcmV0dXJuIHNldEV4cGFuZGVkKHNlbGYsIHRydWUpO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBzZWxmLm9wdGlvbnMpXG4gICAgaWYgKG9wdC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICBpZiAoYXR0cihzZWxmLCBcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCIpICE9PSBcInRydWVcIikge1xuICAgICAgICAoX2EyID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbiAgICAgICAgc2V0RXhwYW5kZWQoc2VsZiwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldFZhbHVlKHNlbGYuX2lucHV0LCBvcHQudmFsdWUpO1xuICAgIH1cbiAgaWYgKElTX0FORFJPSUQpIG9uQmx1cnJlZChzZWxmKTtcbn07XG52YXIgb25LZXlEb3duID0gKHNlbGYsIGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgeyBrZXksIHRhcmdldCwgYWx0S2V5LCBjdHJsS2V5LCBzaGlmdEtleSwgbWV0YUtleSB9ID0gZTtcbiAgY29uc3QgaXNFc2NhcGUgPSBrZXkgPT09IFwiRXNjYXBlXCIgfHwga2V5ID09PSBcIkVzY1wiO1xuICBpZiAoYWx0S2V5IHx8IGN0cmxLZXkgfHwgbWV0YUtleSB8fCBzaGlmdEtleSB8fCBrZXkgPT09IFwiVGFiXCIpIHJldHVybjtcbiAgaWYgKGlzRXNjYXBlICYmICFzZWxmLmhpZGRlbikgZSA9PSBudWxsID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICBzZXRFeHBhbmRlZChzZWxmLCAhaXNFc2NhcGUpO1xuICBjb25zdCBvcHRpb25zID0gWy4uLnNlbGYub3B0aW9uc10uZmlsdGVyKFxuICAgIChlbCkgPT4gYXR0cihlbCwgXCJhcmlhLWhpZGRlblwiKSAhPT0gXCJ0cnVlXCIgJiYgZWwub2Zmc2V0SGVpZ2h0XG4gICk7XG4gIGNvbnN0IHByZXYgPSBvcHRpb25zLmluZGV4T2YodGFyZ2V0KTtcbiAgbGV0IG5leHQgPSAtMTtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIikgbmV4dCA9IChwcmV2ICsgMSkgJSBvcHRpb25zLmxlbmd0aDtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1VwXCIpIG5leHQgPSAofnByZXYgPyBwcmV2IDogb3B0aW9ucy5sZW5ndGgpIC0gMTtcbiAgaWYgKH5wcmV2KSB7XG4gICAgaWYgKGtleSA9PT0gXCJIb21lXCIgfHwga2V5ID09PSBcIlBhZ2VVcFwiKSBuZXh0ID0gMDtcbiAgICBpZiAoa2V5ID09PSBcIkVuZFwiIHx8IGtleSA9PT0gXCJQYWdlRG93blwiKSBuZXh0ID0gb3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIGlmIChrZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgb3B0aW9uc1twcmV2XS5jbGljaygpO1xuICAgICAgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbiAgaWYgKG9wdGlvbnNbbmV4dF0pIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIG9wdGlvbi50YWJJbmRleCA9IC0xO1xuICBpZiAob3B0aW9uc1tuZXh0XSkgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAoX2EyID0gb3B0aW9uc1tuZXh0XSB8fCBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xuICBpZiAoIW9wdGlvbnNbbmV4dF0gJiYga2V5ID09PSBcIkFycm93VXBcIilcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHZhciBfYTM7XG4gICAgICByZXR1cm4gKF9hMyA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnNldFNlbGVjdGlvblJhbmdlKDk5OSwgOTk5KTtcbiAgICB9KTtcbn07XG52YXIgb25JbnB1dCA9IChzZWxmLCBlKSA9PiB7XG4gIGNvbnN0IHsgX3RleHRzLCBfcm9vdCwgX2lucHV0LCBvcHRpb25zIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9IChfaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IF9pbnB1dC52YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKSkgfHwgXCJcIjtcbiAgY29uc3QgZmlsdGVyID0gIXNlbGYuaGFzQXR0cmlidXRlKFwiZGF0YS1ub2ZpbHRlclwiKTtcbiAgY29uc3QgaGlkZGVuID0gW107XG4gIGNvbnN0IHZpc2libGUgPSBbXTtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGNvbnN0IGhpZGUgPSBvcHQuZGlzYWJsZWQgfHwgb3B0LmhpZGRlbiB8fCBmaWx0ZXIgJiYgIW9wdC5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZhbHVlKTtcbiAgICAoaGlkZSA/IGhpZGRlbiA6IHZpc2libGUpLnB1c2gob3B0KTtcbiAgfVxuICBmb3IgKGNvbnN0IG9wdCBvZiBoaWRkZW4pIGF0dHIob3B0LCBcImFyaWEtaGlkZGVuXCIsIFwidHJ1ZVwiKTtcbiAgZm9yIChjb25zdCBvcHQgb2YgdmlzaWJsZSkgYXR0cihvcHQsIFwiYXJpYS1oaWRkZW5cIiwgXCJmYWxzZVwiKTtcbiAgY29uc3QgdG90YWwgPSB2aXNpYmxlLmxlbmd0aDtcbiAgY2xlYXJUaW1lb3V0KExJVkVfVElNRVIpO1xuICBpZiAoKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUudHlwZSkgPT09IFwiaW5wdXRcIiAmJiB2YWx1ZSAhPT0gc2VsZi5fdmFsdWUpXG4gICAgTElWRV9USU1FUiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IGAkeyF0b3RhbCAmJiBzZWxmLmlubmVyVGV4dC50cmltKCkgfHwgYCR7X3RleHRzW3RvdGFsID09PSAxID8gXCJzaW5ndWxhclwiIDogXCJwbHVyYWxcIl19YC5yZXBsYWNlKFwiJWRcIiwgYCR7dG90YWx9YCl9YDtcbiAgICAgIGlmICghc2VsZi5oaWRkZW4gJiYgKF9yb290ID09IG51bGwgPyB2b2lkIDAgOiBfcm9vdC5hY3RpdmVFbGVtZW50KSA9PT0gX2lucHV0KSBzcGVhayh0ZXh0KTtcbiAgICAgIHNlbGYuX3ZhbHVlID0gdmFsdWU7XG4gICAgfSwgMWUzKTtcbiAgaWYgKElTX0lPUylcbiAgICB2aXNpYmxlLm1hcCgob3B0LCBpZHgpID0+IGF0dHIob3B0LCBcInRpdGxlXCIsIGAke2lkeCArIDF9LyR7dG90YWx9YCkpO1xufTtcbmlmIChJU19CUk9XU0VSKVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwibGlzdFwiLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGdldFJvb3QodGhpcykuZ2V0RWxlbWVudEJ5SWQoYXR0cih0aGlzLCBcImxpc3RcIikgfHwgXCJcIik7XG4gICAgfVxuICB9KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGF0YWxpc3RcIiwgVUhUTUxEYXRhTGlzdEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERhdGFMaXN0RWxlbWVudCwgVUhUTUxEYXRhTGlzdFNoYWRvd1Jvb3QsIFVIVE1MRGF0YUxpc3RTdHlsZSB9O1xuIiwiaW1wb3J0IHsgZmxpcCwgdHlwZSBQbGFjZW1lbnQsIHNoaWZ0LCBzaXplIH0gZnJvbSBcIkBmbG9hdGluZy11aS9kb21cIjtcbmltcG9ydCB7IFVIVE1MQ29tYm9ib3hFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtY29tYm9ib3hcIjtcbmltcG9ydCB7IFVIVE1MRGF0YUxpc3RFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtZGF0YWxpc3RcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRhbmNob3JQb3NpdGlvbixcblx0YXR0cixcblx0aXNJbnB1dExpa2UsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0b25NdXRhdGlvbixcblx0UVVJQ0tfRVZFTlQsXG5cdHVzZUlkLFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0ZJRUxEID0gc3R5bGVzLmZpZWxkLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19WQUxJREFUSU9OUyA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKTtcbmNvbnN0IENTU19WQUxJREFUSU9OID0gQ1NTX1ZBTElEQVRJT05TWzBdO1xuXG5jb25zdCBnZXRUZXh0ID0gKHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uLCBrZXk6IHN0cmluZykgPT5cblx0c3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShgLS1tdGRzLXRleHQtJHtrZXl9YCk/LnNsaWNlKDEsIC0xKSB8fCBcIlwiOyAvLyBzbGljZSB0byB0cmltIHF1b3Rlc1xuXG5mdW5jdGlvbiBoYW5kbGVGaWVsZE11dGF0aW9uKFxuXHRmaWVsZHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4sXG5cdHZhbGlkYXRlPzogYm9vbGVhbixcbikge1xuXHRmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcylcblx0XHRpZiAoZmllbGQuaXNDb25uZWN0ZWQpIHtcblx0XHRcdGNvbnN0IGxhYmVsczogSFRNTExhYmVsRWxlbWVudFtdID0gW107XG5cdFx0XHRjb25zdCBkZXNjczogRWxlbWVudFtdID0gW107XG5cdFx0XHRjb25zdCB2YWxpZHM6IEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0bGV0IGNvbWJvYm94OiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGVsIG9mIGZpZWxkLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSkge1xuXHRcdFx0XHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MTGFiZWxFbGVtZW50KSBsYWJlbHMucHVzaChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgVUhUTUxDb21ib2JveEVsZW1lbnQpIGNvbWJvYm94ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSAmJiAhZWwuaGlkZGVuKSBpbnB1dCA9IGVsO1xuXHRcdFx0XHRlbHNlIGlmIChlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLWRlc2NyaXB0aW9uXCIpKSBkZXNjcy5wdXNoKGVsKTtcblx0XHRcdFx0ZWxzZSBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdHZhbGlkID0gYXR0cihlbCwgXCJkYXRhLWNvbG9yXCIpID09PSBcInN1Y2Nlc3NcIiB8fCAhZWwuY2xpZW50SGVpZ2h0OyAvLyBPbmx5IHNldCBpbnZhbGlkIGlmIFZhbGlkYXRpb24gaXMgdmlzaWJsZVxuXHRcdFx0XHRcdHZhbGlkcy5wdXNoKGVsKTtcblx0XHRcdFx0XHRkZXNjcy51bnNoaWZ0KGVsKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxQYXJhZ3JhcGhFbGVtZW50KVxuXHRcdFx0XHRcdGRlc2NzLnNvbWUoKGRlc2MpID0+IGRlc2MuY29udGFpbnMoZWwpKSB8fCBkZXNjcy5wdXNoKGVsKTsgLy8gT25seSBhZGQgaWYgbm90IGFscmVhZHkgaW5zaWRlIGRlc2NyaXB0aW9uXG5cdFx0XHR9XG5cblx0XHRcdGlmIChpbnB1dCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGxhYmVsIG9mIGxhYmVscykgbGFiZWwuaHRtbEZvciA9IHVzZUlkKGlucHV0KTtcblx0XHRcdFx0aWYgKHZhbGlkYXRlICYmIGF0dHIoZmllbGQsIFwiZGF0YS12YWxpZGF0aW9uXCIpID09PSBcImZvcm1cIikge1xuXHRcdFx0XHRcdHZhbGlkID0gaW5wdXQubWF0Y2hlcyhcIjp2YWxpZFwiKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGVsIG9mIHZhbGlkcykgYXR0cihlbCwgXCJoaWRkZW5cIiwgdmFsaWQgPyBcIlwiIDogbnVsbCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVuZGVyQ29tYm9ib3goY29tYm9ib3gpO1xuXHRcdFx0XHRyZW5kZXJDb3VudGVyKGlucHV0KTtcblx0XHRcdFx0cmVuZGVyVGV4dGFyZWFTaXplKGlucHV0KTtcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIGRlc2NzLm1hcCh1c2VJZCkuam9pbihcIiBcIikgfHwgbnVsbCk7IC8vIFJlbW92ZSBpZiBlbXB0eVxuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtaW52YWxpZFwiLCBgJHshdmFsaWR9YCk7XG5cdFx0XHR9XG5cdFx0fVxufVxuXG4vLyBpT1MgZG9lcyBub3Qgc3VwcG9ydCBmaWVsZC1zaXppbmc6IGNvbnRlbnQsIHNvIHdlIG5lZWQgdG8gbWFudWFsbHkgcmVzaXplXG5mdW5jdGlvbiByZW5kZXJUZXh0YXJlYVNpemUodGV4dGFyZWE6IEVsZW1lbnQpIHtcblx0aWYgKHRleHRhcmVhIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuXHRcdHRleHRhcmVhLnN0eWxlLnNldFByb3BlcnR5KFwiLS1tdGRzLXRleHRhcmVhLWhlaWdodFwiLCBcImF1dG9cIik7XG5cdFx0dGV4dGFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG5cdFx0XHRcIi0tbXRkcy10ZXh0YXJlYS1oZWlnaHRcIixcblx0XHRcdGAke3RleHRhcmVhLnNjcm9sbEhlaWdodH1weGAsXG5cdFx0KTtcblx0fVxufVxuXG4vLyBTZXR1cCB0cmFuc2xhdGlvbnMgZnJvbSBDU1MgY3VzdG9tIHByb3BlcnRpZXNcbmZ1bmN0aW9uIHJlbmRlckNvbWJvYm94KGVsOiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwpIHtcblx0Y29uc3QgeyBjb250cm9sLCBsaXN0IH0gPSBlbCB8fCB7fTtcblxuXHRpZiAoZWwgJiYgbGlzdCAmJiAhZWwuaGFzQXR0cmlidXRlKFwiZGF0YS1zci1hZGRlZFwiKSkge1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1hZGRlZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWFkZGVkXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItZW1wdHlcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1lbXB0eVwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWZvdW5kXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtZm91bmRcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1pbnZhbGlkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtaW52YWxpZFwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLW9mXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtb2ZcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1yZW1vdmVcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1yZW1vdmVcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1yZW1vdmVkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtcmVtb3ZlZFwiKSk7XG5cdFx0YXR0cihsaXN0LCBcImRhdGEtc3ItcGx1cmFsXCIsIGdldFRleHQoc3R5bGUsIFwiZGF0YWxpc3QtcGx1cmFsXCIpKTtcblx0XHRhdHRyKGxpc3QsIFwiZGF0YS1zci1zaW5ndWxhclwiLCBnZXRUZXh0KHN0eWxlLCBcImRhdGFsaXN0LXNpbmd1bGFyXCIpKTtcblx0fVxuXHRpZiAobGlzdCAmJiBjb250cm9sICYmICFsaXN0Lmhhc0F0dHJpYnV0ZShcInBvcG92ZXJcIikpIHtcblx0XHRhdHRyKGxpc3QsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcblx0XHRhdHRyKGNvbnRyb2wsIFwicG9wb3ZlcnRhcmdldFwiLCB1c2VJZChsaXN0KSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQ291bnRlcihpbnB1dDogSFRNTElucHV0RWxlbWVudCkge1xuXHRjb25zdCBlbCA9IGlucHV0Py5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdGNvbnN0IGxpbWl0ID0gZWwgJiYgYXR0cihlbCwgXCJkYXRhLWNvdW50XCIpO1xuXG5cdGlmIChlbCAmJiBsaW1pdCkge1xuXHRcdGNvbnN0IHJlbWFpbmRlciA9IE51bWJlcihsaW1pdCkgLSBpbnB1dC52YWx1ZS5sZW5ndGg7XG5cdFx0Y29uc3QgbmV4dEludmFsaWQgPSByZW1haW5kZXIgPCAwO1xuXHRcdGNvbnN0IHByZXZJbnZhbGlkID0gYXR0cihlbCwgXCJhcmlhLWxpdmVcIikgPT09IFwicG9saXRlXCI7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCB8fCBpbnB1dCk7XG5cdFx0Y29uc3Qgb3ZlciA9IGdldFRleHQoc3R5bGUsIFwiY291bnQtb3ZlclwiKTtcblx0XHRjb25zdCB1bmRlciA9IGdldFRleHQoc3R5bGUsIFwiY291bnQtdW5kZXJcIik7XG5cblx0XHRpZiAocHJldkludmFsaWQgIT09IG5leHRJbnZhbGlkKSB7XG5cdFx0XHRhdHRyKGVsLCBcImFyaWEtbGl2ZVwiLCBuZXh0SW52YWxpZCA/IFwicG9saXRlXCIgOiBcIm9mZlwiKTtcblx0XHRcdGZvciAoY29uc3QgY3NzIG9mIENTU19WQUxJREFUSU9OUykgZWwuY2xhc3NMaXN0LnRvZ2dsZShjc3MsIG5leHRJbnZhbGlkKTtcblx0XHR9XG5cdFx0ZWwudGV4dENvbnRlbnQgPSAobmV4dEludmFsaWQgPyBvdmVyIDogdW5kZXIpLnJlcGxhY2UoXG5cdFx0XHRcIiVkXCIsXG5cdFx0XHRgJHtNYXRoLmFicyhyZW1haW5kZXIpfWAsXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGaWVsZFRvZ2dsZShldmVudDogRXZlbnQgJiB7IG5ld1N0YXRlPzogc3RyaW5nIH0pIHtcblx0aWYgKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIFVIVE1MRGF0YUxpc3RFbGVtZW50KSB7XG5cdFx0Y29uc3QgbGlzdCA9IGV2ZW50LnRhcmdldDtcblx0XHRjb25zdCByb290ID0gbGlzdC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QgfCBudWxsO1xuXHRcdGNvbnN0IGFuY2hvciA9IHJvb3Q/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuXHRcdFx0YFtwb3BvdmVydGFyZ2V0PVwiJHtsaXN0LmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdGlmIChldmVudC5uZXdTdGF0ZSA9PT0gXCJjbG9zZWRcIikgYW5jaG9yUG9zaXRpb24obGlzdCwgZmFsc2UpO1xuXHRcdGVsc2UgaWYgKGFuY2hvcilcblx0XHRcdGFuY2hvclBvc2l0aW9uKGxpc3QsIGFuY2hvciwge1xuXHRcdFx0XHRwbGFjZW1lbnQ6IChhdHRyKGxpc3QsIFwiZGF0YS1wb3NpdGlvblwiKSA/PyBcImJvdHRvbVwiKSBhcyBQbGFjZW1lbnQsXG5cdFx0XHRcdG1pZGRsZXdhcmU6IFtcblx0XHRcdFx0XHRmbGlwKCksXG5cdFx0XHRcdFx0c2hpZnQoKSxcblx0XHRcdFx0XHRzaXplKHtcblx0XHRcdFx0XHRcdHBhZGRpbmc6IDEwLFxuXHRcdFx0XHRcdFx0YXBwbHkoeyBhdmFpbGFibGVIZWlnaHQgfSkge1xuXHRcdFx0XHRcdFx0XHRsaXN0LnN0eWxlLndpZHRoID0gYCR7YW5jaG9yLm9mZnNldFdpZHRofXB4YDtcblx0XHRcdFx0XHRcdFx0bGlzdC5zdHlsZS5tYXhIZWlnaHQgPSBgJHtNYXRoLm1heCg1MCwgYXZhaWxhYmxlSGVpZ2h0KX1weGA7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRdLFxuXHRcdFx0fSk7XG5cdH1cbn1cbi8vIFVwZGF0ZSB3aGVuIHR5cGluZ1xuZnVuY3Rpb24gaGFuZGxlRmllbGRJbnB1dChldmVudDogRXZlbnQpIHtcblx0aWYgKGlzSW5wdXRMaWtlKGV2ZW50LnRhcmdldCkpIHtcblx0XHRyZW5kZXJDb3VudGVyKGV2ZW50LnRhcmdldCk7XG5cdFx0cmVuZGVyVGV4dGFyZWFTaXplKGV2ZW50LnRhcmdldCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRmllbGRWYWxkaWF0aW9uKGV2ZW50OiBFdmVudCkge1xuXHRjb25zdCBmaWVsZCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihgLiR7Q1NTX0ZJRUxEfWApO1xuXHRpZiAoZXZlbnQudHlwZSA9PT0gXCJpbnZhbGlkXCIgJiYgZmllbGQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBzaG93aW5nIGRlZmF1bHQgdmFsaWRhdGlvbiBidWJibGVzXG5cdGhhbmRsZUZpZWxkTXV0YXRpb24oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShDU1NfRklFTEQpLCB0cnVlKTsgLy8gVXBkYXRlIHN0YXRlXG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRCwgaGFuZGxlRmllbGRNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImlucHV0XCIsIGhhbmRsZUZpZWxkSW5wdXQsIFFVSUNLX0VWRU5UKTtcblx0b24oZG9jdW1lbnQsIFwiaW52YWxpZCxzdWJtaXRcIiwgaGFuZGxlRmllbGRWYWxkaWF0aW9uLCB0cnVlKTsgLy8gVXNlIGNhcHR1cmUgYXMgaW52YWxpZCBhbmQgc3VibWl0IGRvZXMgbm90IGJ1YmJsZVxuXHRvbihkb2N1bWVudCwgXCJ0b2dnbGVcIiwgaGFuZGxlRmllbGRUb2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgaXNJbnB1dExpa2UsIG9uTG9hZGVkLCBvbk11dGF0aW9uLCB1c2VJZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRklFTERTRVQgPSBzdHlsZXMuZmllbGRzZXQuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1ZBTElEQVRJT04gPSBzdHlsZXMudmFsaWRhdGlvbi5zcGxpdChcIiBcIilbMF07XG5jb25zdCBBUklBX0RFU0MgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEFSSUFfSU5WQUxJRCA9IFwiYXJpYS1pbnZhbGlkXCI7XG5cbi8vIFVzaW5nIHNldFRpbWVvdXQgdG8gZW5zdXJlIGl0IHJ1bnMgYWZ0ZXIgZmllbGQtb2JzZXJ2ZXJcbmZ1bmN0aW9uIGhhbmRsZUZpZWxkc2V0TXV0YXRpb24oZmllbGRzZXRzOiBIVE1MQ29sbGVjdGlvbk9mPEVsZW1lbnQ+KSB7XG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGZvciAoY29uc3QgZmllbGRzZXQgb2YgZmllbGRzZXRzKVxuXHRcdFx0aWYgKGZpZWxkc2V0LmlzQ29ubmVjdGVkKSB7XG5cdFx0XHRcdGNvbnN0IGlucHV0czogSFRNTElucHV0RWxlbWVudFtdID0gW107XG5cdFx0XHRcdGxldCB2YWxpZElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblx0XHRcdFx0bGV0IHZhbGlkID0gdHJ1ZTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGVsIG9mIGZpZWxkc2V0LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSkge1xuXHRcdFx0XHRcdGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1ZBTElEQVRJT04pKSB7XG5cdFx0XHRcdFx0XHR2YWxpZCA9IGF0dHIoZWwsIFwiZGF0YS1jb2xvclwiKSA9PT0gXCJzdWNjZXNzXCIgfHwgIWVsLmNsaWVudEhlaWdodDsgLy8gT25seSBzZXQgaW52YWxpZCBpZiBWYWxpZGF0aW9uIGlzIHZpc2libGVcblx0XHRcdFx0XHRcdHZhbGlkSWQgPSB1c2VJZChlbCk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChpc0lucHV0TGlrZShlbCkpIGlucHV0cy5wdXNoKGVsKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAoY29uc3QgaW5wdXQgb2YgaW5wdXRzKSB7XG5cdFx0XHRcdFx0Y29uc3QgZGVzYyA9IGF0dHIoaW5wdXQsIEFSSUFfREVTQyk/LnJlcGxhY2UodmFsaWRJZCB8fCBcIiNcIiwgXCJcIik7XG5cblx0XHRcdFx0XHRhdHRyKGlucHV0LCBBUklBX0RFU0MsIGAke3ZhbGlkSWQgfHwgXCJcIn0gJHtkZXNjIHx8IFwiXCJ9YC50cmltKCkpO1xuXHRcdFx0XHRcdGF0dHIoaW5wdXQsIEFSSUFfSU5WQUxJRCwgYCR7IXZhbGlkfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdH0pO1xufVxuXG5vbkxvYWRlZCgoKSA9PlxuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0ZJRUxEU0VULCBoYW5kbGVGaWVsZHNldE11dGF0aW9uKSxcbik7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0xPR08gPSBzdHlsZXMubG9nby5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZUxvZ29NdXRhdGlvbihbbG9nb106IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdGlmIChsb2dvPy5pc0Nvbm5lY3RlZCAmJiBsb2dvPy5maXJzdEVsZW1lbnRDaGlsZCBpbnN0YW5jZW9mIFNWR1NWR0VsZW1lbnQpIHtcblx0XHRmb3IgKGNvbnN0IGljb24gb2YgZG9jdW1lbnQuaGVhZC5xdWVyeVNlbGVjdG9yQWxsKFwibGlua1tyZWx+PSdpY29uJ11cIikpXG5cdFx0XHRpY29uLnNldEF0dHJpYnV0ZShcInJlbFwiLCBcImRpc2FibGVkXCIpOyAvLyBEaXNhYmxlIHByZXZpb3VzIGljb24gKGJ1dCBub3QgcmVtb3ZlIGlzIGFzIHRoaXMgbWFrZXMgTmV4dC5qcyBzYWQpXG5cblx0XHRjb25zdCBzdmcgPSBsb2dvLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdGNvbnN0IGlzRG90ID0gbG9nbz8uaGFzQXR0cmlidXRlKFwiZGF0YS1lbnZcIik7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzdmcpO1xuXHRcdGNvbnN0IHRleHQgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sb3JcIik7XG5cdFx0Y29uc3QgYmFjayA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCItLW10ZHMtbG9nby1jb2xvclwiKTtcblx0XHRjb25zdCBpY29uID0gc3ZnLm91dGVySFRNTFxuXHRcdFx0LnJlcGxhY2UoL1xcbisvZywgXCIgXCIpIC8vIFByZXZlbnQgbGluZSBicmVha3Ncblx0XHRcdC5yZXBsYWNlKC8oZmlsbHx3aWR0aHxoZWlnaHR8eG1sbnMpPVwiW15cIl0rXCIvZ2ksIFwiXCIpXG5cdFx0XHQucmVwbGFjZShcIjxzdmdcIiwgYDxzdmcgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgZmlsbD1cIiR7dGV4dH1cImApO1xuXG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChcblx0XHRcdE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIiksIHtcblx0XHRcdFx0aHJlZjogYGRhdGE6aW1hZ2Uvc3ZnK3htbCwke2VuY29kZVVSSUNvbXBvbmVudChgPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA1NSA1NSc+PHJlY3QgZmlsbD0nJHtpc0RvdCA/IFwibm9uZVwiIDogYmFja30nIHdpZHRoPSc1MScgaGVpZ2h0PSc1MScgeD0nMicgeT0nMicgc3Ryb2tlPScke3RleHR9JyBzdHJva2UtZGFzaGFycmF5PScwLjA5IDYuMzgnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW9wYWNpdHk9JyR7aXNEb3QgPyAwLjYgOiAwfScgc3Ryb2tlLXdpZHRoPScyLjMnIHJ4PScyNS41Jy8+PGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDcuNSA3LjUpXCI+JHtpY29ufTwvZz48L3N2Zz5gKX1gLFxuXHRcdFx0XHRyZWw6IFwiaWNvblwiLFxuXHRcdFx0fSksXG5cdFx0KTtcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PlxuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0xPR08sIGhhbmRsZUxvZ29NdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHsgZmxpcCwgdHlwZSBQbGFjZW1lbnQsIHNoaWZ0LCBzaXplIH0gZnJvbSBcIkBmbG9hdGluZy11aS9kb21cIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhbmNob3JQb3NpdGlvbiwgYXR0ciwgb24sIG9uTG9hZGVkLCBRVUlDS19FVkVOVCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfUE9QT1ZFUiA9IHN0eWxlcy5wb3BvdmVyLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19BVVRPID0gYF9tdGRzLXBvcG92ZXItYXV0b2A7XG5cbnR5cGUgRXZlbnRUb2dnbGUgPSBFdmVudCAmIFBhcnRpYWw8VG9nZ2xlRXZlbnQ+O1xuXG5mdW5jdGlvbiBoYW5kbGVQb3BvdmVyVG9nZ2xlKHsgdGFyZ2V0OiBlbCwgbmV3U3RhdGUgfTogRXZlbnRUb2dnbGUpIHtcblx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19QT1BPVkVSKSkge1xuXHRcdGNvbnN0IGlzQ2xvc2luZyA9IG5ld1N0YXRlID09PSBcImNsb3NlZFwiO1xuXHRcdGNvbnN0IGlzQ29udGFpbiA9IGF0dHIoZWwsIFwiZGF0YS1vdmVyc2Nyb2xsXCIpID09PSBcImNvbnRhaW5cIjtcblx0XHRjb25zdCBhbmNob3IgPSAoZWwuZ2V0Um9vdE5vZGUoKSBhcyBTaGFkb3dSb290KT8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG5cdFx0XHRgW3BvcG92ZXJ0YXJnZXQ9XCIke2VsLmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdGlmIChpc0Nsb3NpbmcpIGFuY2hvclBvc2l0aW9uKGVsLCBmYWxzZSk7XG5cdFx0ZWxzZSBpZiAoYW5jaG9yKVxuXHRcdFx0YW5jaG9yUG9zaXRpb24oZWwsIGFuY2hvciwge1xuXHRcdFx0XHRwbGFjZW1lbnQ6IChhdHRyKGVsLCBcImRhdGEtcG9zaXRpb25cIikgfHwgXCJib3R0b21cIikgYXMgUGxhY2VtZW50LFxuXHRcdFx0XHRtaWRkbGV3YXJlOiBbZmxpcCgpLCBzaGlmdCh7IHBhZGRpbmc6IDEwIH0pXS5jb25jYXQoXG5cdFx0XHRcdFx0aXNDb250YWluXG5cdFx0XHRcdFx0XHQ/IHNpemUoe1xuXHRcdFx0XHRcdFx0XHRcdHBhZGRpbmc6IDEwLFxuXHRcdFx0XHRcdFx0XHRcdGFwcGx5KHsgYXZhaWxhYmxlSGVpZ2h0IH0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVsLnN0eWxlLm1heEhlaWdodCA9IGAke01hdGgubWF4KDUwLCBhdmFpbGFibGVIZWlnaHQpfXB4YDtcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0OiBbXSxcblx0XHRcdFx0KSxcblx0XHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVBvcG92ZXJCZWZvcmV0b2dnbGUoeyB0YXJnZXQ6IGVsLCBuZXdTdGF0ZSB9OiBFdmVudFRvZ2dsZSkge1xuXHRpZiAoXG5cdFx0bmV3U3RhdGUgPT09IFwib3BlblwiICYmXG5cdFx0ZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcdGVsLmNsYXNzTGlzdC5jb250YWlucyhDU1NfUE9QT1ZFUikgJiZcblx0XHRhdHRyKGVsLCBcInBvcG92ZXJcIikgIT09IFwibWFudWFsXCJcblx0KSB7XG5cdFx0ZWwuY2xhc3NMaXN0LmFkZChDU1NfQVVUTyk7XG5cdFx0YXR0cihlbCwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpOyAvLyBNYWtlIG1hbnVhbCB0byBwcmV2ZW50IGNsb3Npbmcgd2hlbiBjbGlja2luZyBzY3JvbGxiYXJcblx0fVxufVxuXG4vLyBQb2x5ZmlsbCBwb3BvdmVydGFyZ2V0IGZvciA8YT4gKG5vdCBzdXBwb3J0ZWQgYnkgbmF0aXZlKVxuLy8gYW5kIGF1dG9tYXRpY2FsbHkgYXNzdW1lIHBvcG92ZXJ0YXJnZXQgaXMgdGhlIGNsb3Nlc3QgcGFyZW50IHBvcG92ZXJcbi8vIGJ1dCByZXNwZWN0IHRoZSBwb3BvdmVydGFyZ2V0IGFuZCBwb3BvdmVydGFyZ2V0YWN0aW9uIGF0dHJpYnV0ZVxuZnVuY3Rpb24gaGFuZGxlUG9wb3ZlckxpbmtDbGljayh7IHRhcmdldCB9OiBFdmVudCkge1xuXHRjb25zdCBlbCA9ICh0YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImEsW3BvcG92ZXJ0YXJnZXRhY3Rpb25dXCIpO1xuXHRjb25zdCBpZCA9IGVsICYmIGF0dHIoZWwsIFwicG9wb3ZlcnRhcmdldFwiKTtcblx0Y29uc3QgcG9wID0gaWQgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkgOiBlbD8uY2xvc2VzdChgLiR7Q1NTX1BPUE9WRVJ9YCk7XG5cblx0Ly8gTWFudWFsbHkgY2xvc2UgcG9wb3ZlcnMgd2hlcmUgY2xpY2sgd2FzIG91dHNpZGVcblx0Zm9yIChjb25zdCBlbCBvZiBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKENTU19BVVRPKSlcblx0XHRlbC5jb250YWlucyh0YXJnZXQgYXMgTm9kZSkgfHwgKGVsIGFzIEhUTUxFbGVtZW50KS5oaWRlUG9wb3ZlcigpO1xuXG5cdGlmIChwb3AgJiYgZWwpIHtcblx0XHRjb25zdCBhY3Rpb24gPSBhdHRyKGVsLCBcInBvcG92ZXJ0YXJnZXRhY3Rpb25cIikgfHwgXCJ0b2dnbGVcIjtcblx0XHRjb25zdCBvcGVuID0gYWN0aW9uID09PSBcInNob3dcIiB8fCAoYWN0aW9uID09PSBcImhpZGVcIiA/IGZhbHNlIDogdW5kZWZpbmVkKTtcblxuXHRcdC8vIFBvcG92ZXIgY2FuIGJlIGRpc2Nvbm5ldGVkIGJ5IGNsaWNrIGhhbmRsZXIgZGVlcGVyIGRvd24gaW4gdGhlIERPTSB0aHJlZSBiZWZvcmUgcmVhY2hpbmcgZG9jdW1lbnRcblx0XHRpZiAocG9wIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgcG9wLmlzQ29ubmVjdGVkICYmIHBvcC50b2dnbGVQb3BvdmVyKVxuXHRcdFx0cG9wLnRvZ2dsZVBvcG92ZXIob3Blbik7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVQb3BvdmVyTGlua0NsaWNrKTsgLy8gQWxsb3cgYDxhPmAgdG8gdXNlIGBwb3BvdmVydGFyZ2V0YCBhcyB3ZWxsXG5cdG9uKGRvY3VtZW50LCBcInRvZ2dsZVwiLCBoYW5kbGVQb3BvdmVyVG9nZ2xlLCBRVUlDS19FVkVOVCk7IC8vIFVzZSBjYXB0dXJlIHNpbmNlIHRvZ2dsZSBkb2VzIG5vdCBidWJibGVcblx0b24oZG9jdW1lbnQsIFwiYmVmb3JldG9nZ2xlXCIsIGhhbmRsZVBvcG92ZXJCZWZvcmV0b2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb24sIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UQUJMRSA9IHN0eWxlcy50YWJsZS5zcGxpdChcIiBcIilbMF07XG5jb25zdCBJTlRFUkFDVElWRSA9ICdhLGJ1dHRvbixsYWJlbCxpbnB1dCxzZWxlY3QsdGV4dGFyZWEsW3JvbGU9XCJidXR0b25cIl0nO1xuXG5mdW5jdGlvbiBoYW5kbGVUYWJsZU11dGF0aW9uKHRhYmxlczogSFRNTENvbGxlY3Rpb25PZjxIVE1MVGFibGVFbGVtZW50Pikge1xuXHRmb3IgKGNvbnN0IHRhYmxlIG9mIHRhYmxlcykge1xuXHRcdGNvbnN0IHRocyA9IEFycmF5LmZyb20odGFibGUudEhlYWQ/LnJvd3NbMF0/LmNlbGxzIHx8IFtdLCAodGgpID0+XG5cdFx0XHR0aC5pbm5lclRleHQudHJpbSgpLFxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IHRib2R5IG9mIHRhYmxlLnRCb2RpZXMpXG5cdFx0XHRmb3IgKGNvbnN0IHJvdyBvZiB0Ym9keS5yb3dzKVxuXHRcdFx0XHRmb3IgKGNvbnN0IGNlbGwgb2Ygcm93LmNlbGxzKVxuXHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJkYXRhLXRoXCIsIHRoc1tjZWxsLmNlbGxJbmRleF0gfHwgXCI6ZW1wdHlcIik7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlVGFibGVDbGljayh7IHRhcmdldDogZWwgfTogRXZlbnQpIHtcblx0aWYgKCEoZWwgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xuXHRjb25zdCByb3cgPSBlbC5jbG9zZXN0KFwidHJcIik7XG5cdGNvbnN0IGFjdGlvbiA9IHJvdz8ucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PignW2RhdGEtY29tbWFuZD1cInJvd1wiXScpO1xuXHRpZiAoYWN0aW9uICYmICFlbC5jbG9zZXN0KElOVEVSQUNUSVZFKSkgYWN0aW9uLmNsaWNrPy4oKTsgLy8gRm9yd2FyZCBjbGljayB0byBkYXRhLWNvbW1hbmQ9XCJyb3dcIiBlbGVtZW50XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19UQUJMRSwgaGFuZGxlVGFibGVNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZVRhYmxlQ2xpY2spO1xufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb24sIG9uTG9hZGVkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UT0FTVCA9IHN0eWxlcy50b2FzdC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBBVFRSX1NPUlQgPSBcImRhdGEtc29ydFwiO1xuXG5mdW5jdGlvbiBoYW5kbGVUb2FzdFN0YXRlKHsgYW5pbWF0aW9uTmFtZSwgdGFyZ2V0IH06IFBhcnRpYWw8QW5pbWF0aW9uRXZlbnQ+KSB7XG5cdGNvbnN0IGRpYWxvZyA9IHRhcmdldCBhcyBIVE1MRGlhbG9nRWxlbWVudDtcblx0aWYgKGFuaW1hdGlvbk5hbWUgPT09IHN0eWxlcy5fdG9hc3RUaW1lb3V0KSBkaWFsb2cuY2xvc2UoKTtcblx0aWYgKGFuaW1hdGlvbk5hbWUgIT09IHN0eWxlcy5fdG9hc3RPcGVuKSByZXR1cm47XG5cblx0Y29uc3QgbXMgPSBOdW1iZXIoYXR0cihkaWFsb2csIFwiZGF0YS10aW1lb3V0XCIpKTtcblx0ZGlhbG9nLnN0eWxlLnNldFByb3BlcnR5KFwiLS1tdGRzYy10b2FzdC10aW1lb3V0XCIsIG1zID8gYCR7bXN9bXNgIDogbnVsbCk7XG5cdGRpYWxvZy5oYXNBdHRyaWJ1dGUoQVRUUl9TT1JUKSB8fCBhdHRyKGRpYWxvZywgQVRUUl9TT1JULCBgJHtEYXRlLm5vdygpfWApO1xuXHRhdHRyKGRpYWxvZywgXCJ0YWJpbmRleFwiLCBcIjBcIik7IC8vIE1ha2UgZm9jdXNhYmxlXG5cblx0Ly8gU2V0dXAgbGF5b3V0XG5cdFsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxEaWFsb2dFbGVtZW50PihgLiR7Q1NTX1RPQVNUfVtvcGVuXWApXVxuXHRcdC5zb3J0KChhLCBiKSA9PiBOdW1iZXIoYXR0cihiLCBBVFRSX1NPUlQpKSAtIE51bWJlcihhdHRyKGEsIEFUVFJfU09SVCkpKVxuXHRcdC5yZWR1Y2UoKHRvcCwgdG9hc3QpID0+IHtcblx0XHRcdHRvYXN0LnN0eWxlLnRyYW5zbGF0ZSA9IGAwICR7dG9hc3QgPT09IHRhcmdldCA/IDAgOiB0b3B9cHhgO1xuXHRcdFx0cmV0dXJuIHRvcCArIHRvYXN0Lm9mZnNldEhlaWdodCArIDU7XG5cdFx0fSwgMCk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRvYXN0Q2xpY2soeyB0YXJnZXQsIGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfTogTW91c2VFdmVudCkge1xuXHRpZiAoXG5cdFx0dGFyZ2V0IGluc3RhbmNlb2YgSFRNTERpYWxvZ0VsZW1lbnQgJiZcblx0XHR0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19UT0FTVCkgJiZcblx0XHRhdHRyKHRhcmdldCwgXCJkYXRhLWNsb3NlZGJ5XCIpICE9PSBcIm5vbmVcIlxuXHQpIHtcblx0XHRjb25zdCByZWN0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdGNvbnN0IHRvYXN0ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGFyZ2V0KTtcblx0XHRjb25zdCBjbG9zZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRhcmdldCwgXCI6OmFmdGVyXCIpO1xuXHRcdGNvbnN0IHRvcCA9IHJlY3QudG9wICsgTnVtYmVyLnBhcnNlSW50KHRvYXN0LnBhZGRpbmdUb3AsIDEwKTtcblx0XHRjb25zdCBib3R0b20gPSB0b3AgKyBOdW1iZXIucGFyc2VJbnQoY2xvc2UuaGVpZ2h0LCAxMCk7XG5cdFx0Y29uc3QgcmlnaHQgPSByZWN0LnJpZ2h0IC0gTnVtYmVyLnBhcnNlSW50KHRvYXN0LnBhZGRpbmdSaWdodCwgMTApO1xuXHRcdGNvbnN0IGxlZnQgPSByaWdodCAtIE51bWJlci5wYXJzZUludChjbG9zZS53aWR0aCwgMTApO1xuXHRcdGNvbnN0IGlzQ2xvc2UgPSB0b3AgPD0geSAmJiB5IDw9IGJvdHRvbSAmJiBsZWZ0IDw9IHggJiYgeCA8PSByaWdodDtcblxuXHRcdGlmIChpc0Nsb3NlKSB0YXJnZXQuY2xvc2UoKTsgLy8gQ2xpY2sgaXMgb24gOjphZnRlciBlbGVtZW50XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJhbmltYXRpb25zdGFydFwiLCBoYW5kbGVUb2FzdFN0YXRlKTtcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlVG9hc3RDbGljayBhcyBFdmVudExpc3RlbmVyKTtcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uLCBvbkxvYWRlZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfVE9HR0xFR1JPVVAgPSBgLiR7c3R5bGVzLnRvZ2dsZWdyb3VwLnNwbGl0KFwiIFwiKVswXX1gO1xuXG4vLyBQcmV2ZW50IGJyb3dzZXJzIGZyb20gc2hvd2luZyBkZWZhdWx0IHZhbGlkYXRpb24gYnViYmxlc1xuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlZ3JvdXBLZXlkb3duKGV2ZW50OiBFdmVudCAmIFBhcnRpYWw8S2V5Ym9hcmRFdmVudD4pIHtcblx0Y29uc3QgeyBrZXksIHRhcmdldDogZWwgfSA9IGV2ZW50O1xuXHRjb25zdCBncm91cCA9IGVsIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBlbC5jbG9zZXN0KENTU19UT0dHTEVHUk9VUCk7XG5cblx0aWYgKCFncm91cCkgcmV0dXJuO1xuXHRpZiAoa2V5ID09PSBcIkVudGVyXCIpIGVsLmNsaWNrKCk7XG5cdGlmIChrZXk/LnN0YXJ0c1dpdGgoXCJBcnJvd1wiKSkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0Y29uc3QgaW5wdXRzID0gZ3JvdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKTtcblx0XHRjb25zdCBpbmRleCA9IFsuLi5pbnB1dHNdLmluZGV4T2YoZWwpO1xuXHRcdGNvbnN0IG1vdmUgPSBrZXkubWF0Y2goL0Fycm93KFJpZ2h0fERvd24pLykgPyAxIDogLTE7XG5cdFx0aW5wdXRzWyhpbnB1dHMubGVuZ3RoICsgaW5kZXggKyBtb3ZlKSAlIGlucHV0cy5sZW5ndGhdPy5mb2N1cygpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBcImtleWRvd25cIiwgaGFuZGxlVG9nZ2xlZ3JvdXBLZXlkb3duKSk7XG4iLCJpbXBvcnQgeyBmbGlwLCB0eXBlIFBsYWNlbWVudCwgc2hpZnQgfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRJU19CUk9XU0VSLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdFFVSUNLX0VWRU5ULFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgREVTQ1JJQkVEQlkgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEVTQyA9IFwiRXNjYXBlXCI7XG5jb25zdCBMQUJFTExFREJZID0gXCJhcmlhLWxhYmVsbGVkYnlcIjtcbmNvbnN0IFBPU0lUSU9OX0NTU19QUk9QRVJUWSA9IFwiLS1tdGRzLXRvb2x0aXAtcG9zaXRpb25cIjtcbmNvbnN0IFRIUk9UVExFX0RFTEFZID0gMzAwO1xuY29uc3QgVE9PTFRJUCA9IElTX0JST1dTRVJcblx0PyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm10ZHMtdG9vbHRpcFwiKSB8fFxuXHRcdE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwge1xuXHRcdFx0Y2xhc3NOYW1lOiBzdHlsZXMuX3Rvb2x0aXAsXG5cdFx0XHRpZDogXCJtdGRzLXRvb2x0aXBcIixcblx0XHRcdHBvcG92ZXI6IFwibWFudWFsXCIsXG5cdFx0fSlcblx0OiBudWxsOyAvLyBDcmVhdGUgYSBkdW1teSBlbGVtZW50IHRvIGF2b2lkIG51bGwgY2hlY2tzXG5cbmxldCBBTkNIT1I6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbmxldCBMQVNUX0NBTEwgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5sZXQgVEhST1RUTEU6IG51bWJlciB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+ID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlVG9vbHRpcE1vdmUoeyB0YXJnZXQsIHR5cGUsIGtleSB9OiBFdmVudCAmIHsga2V5Pzogc3RyaW5nIH0pIHtcblx0aWYgKHR5cGUgPT09IFwia2V5ZG93blwiICYmIGtleSAhPT0gRVNDKSByZXR1cm47IC8vIEFsbG93IEVTQyBkaXNtaXNzIHRvIGZvbGxvdyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL3Rvb2x0aXAvXG5cdGNvbnN0IHdhaXQgPSBMQVNUX0NBTEwgKyBUSFJPVFRMRV9ERUxBWSAtIERhdGUubm93KCk7XG5cdGNsZWFyVGltZW91dChUSFJPVFRMRSk7XG5cdFRIUk9UVExFID0gc2V0VGltZW91dChcblx0XHRoYW5kbGVUb29sdGlwTW92ZVRocm90dGxlZCxcblx0XHRNYXRoLm1heCh3YWl0LCAwKSxcblx0XHRrZXkgPT09IEVTQyA/IG51bGwgOiB0YXJnZXQsXG5cdCk7XG59XG5cbi8vIFVzaW5nIGEgdGhyb3R0bGVkIGZ1bmN0aW9uIHRvIGF2b2lkIHBlcmZvcm1hbmNlIGlzc3Vlc1xuZnVuY3Rpb24gaGFuZGxlVG9vbHRpcE1vdmVUaHJvdHRsZWQodGFyZ2V0OiBFbGVtZW50IHwgbnVsbCkge1xuXHRMQVNUX0NBTEwgPSBEYXRlLm5vdygpO1xuXG5cdC8vIEJ1aWxkIGFuZCBhcHBlbmQgdG9vbHRpcCBpZiBub3QgZXhpc3Rpbmdcblx0aWYgKCFUT09MVElQIHx8IHRhcmdldCA9PT0gVE9PTFRJUCkgcmV0dXJuOyAvLyBBbGxvdyB0b29sdGlwIHRvIGJlIGhvdmVyZWQsIGZvbGxvd2luZyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIxLyNjb250ZW50LW9uLWhvdmVyLW9yLWZvY3VzXG5cdGlmICghVE9PTFRJUD8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFRPT0xUSVApOyAvLyBFbnN1cmUgY29ubmVjdGVkXG5cdGxldCBhbmNob3IgPSB0YXJnZXQ/LmNsb3Nlc3Q/LjxFbGVtZW50PihcIltkYXRhLXRvb2x0aXBdXCIpIHx8IG51bGw7XG5cblx0Ly8gTm8gbmVlZCB0byB1cGRhdGVcblx0aWYgKGFuY2hvciA9PT0gQU5DSE9SKSByZXR1cm47XG5cblx0Y29uc3QgY29udGVudCA9IChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwXCIpKSB8fCBcIlwiO1xuXHRjb25zdCBwb3NpdGlvbiA9XG5cdFx0KGFuY2hvciAmJiBhdHRyKGFuY2hvciwgXCJkYXRhLXRvb2x0aXAtcG9zaXRpb25cIikpIHx8XG5cdFx0d2luZG93XG5cdFx0XHQuZ2V0Q29tcHV0ZWRTdHlsZShhbmNob3IgfHwgZG9jdW1lbnQuYm9keSlcblx0XHRcdC5nZXRQcm9wZXJ0eVZhbHVlKFBPU0lUSU9OX0NTU19QUk9QRVJUWSlcblx0XHRcdD8udHJpbSgpIHx8XG5cdFx0XCJ0b3BcIjtcblxuXHRjb25zdCBpc0hpZGRlbiA9XG5cdFx0IWNvbnRlbnQgfHxcblx0XHRjb250ZW50ID09PSBcImZhbHNlXCIgfHxcblx0XHRjb250ZW50ID09PSBcInRydWVcIiB8fFxuXHRcdHBvc2l0aW9uID09PSBcIm5vbmVcIjtcblxuXHRpZiAoaXNIaWRkZW4pIGFuY2hvciA9IG51bGw7IC8vIERvIG5vdCBzaG93IHRvb2x0aXAgaWYgYm9vbGlzaCB2YWx1ZVxuXHRpZiAoYW5jaG9yKSBUT09MVElQLnRleHRDb250ZW50ID0gY29udGVudDsgLy8gT25seSB1cGRhdGUgY29udGVudCBpZiBuZXcgYW5jaG9yXG5cblx0Y29uc3QgaGFkTGFiZWwgPSBBTkNIT1IgJiYgYXR0cihBTkNIT1IsIExBQkVMTEVEQlkpID09PSBUT09MVElQPy5pZDtcblx0Y29uc3QgaGFzTGFiZWwgPVxuXHRcdChhbmNob3IgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuXHRcdFx0PyBhbmNob3IuaW5uZXJUZXh0XG5cdFx0XHQ6IGFuY2hvcj8udGV4dENvbnRlbnRcblx0XHQpPy50cmltKCkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShMQUJFTExFREJZKSB8fFxuXHRcdGFuY2hvcj8uaGFzQXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKTtcblxuXHRBTkNIT1I/LnJlbW92ZUF0dHJpYnV0ZShoYWRMYWJlbCA/IExBQkVMTEVEQlkgOiBERVNDUklCRURCWSk7IC8vIFVubGluayBwcmV2aW91cyBhbmNob3Jcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgZmFsc2UpOyAvLyBSZXNldCBhbmNob3IgcG9zaXRpb25cblxuXHRBTkNIT1IgPSBhbmNob3I7IC8vIFN0b3JlIG5ldyBhbmNob3IgLSBtaWdodCBiZSBudWxsIGlmIG5vIG5ldyBhbmNob3Jcblx0aWYgKEFOQ0hPUikgYXR0cihBTkNIT1IsIGhhc0xhYmVsID8gREVTQ1JJQkVEQlkgOiBMQUJFTExFREJZLCBUT09MVElQPy5pZCk7IC8vIFVzZSB0b29sdGlwIGFzIGRlc2NyaXB0aW9uIGlmIGFsbHJlYWR5IGhhcyBsYWJlbFxuXHRpZiAoQU5DSE9SPy5pc0Nvbm5lY3RlZCkgVE9PTFRJUC5oaWRlUG9wb3ZlcigpOyAvLyBIaWRlIHRvb2x0aXAgc28gaXQgY2FuIGJlIHBsYWNlZCBvbiB0b3AtbGF5ZXIgb24gbmV4dCBzaG93XG5cdFRPT0xUSVAudG9nZ2xlUG9wb3ZlcighIWFuY2hvcik7XG5cdGFuY2hvclBvc2l0aW9uKFRPT0xUSVAsIGFuY2hvciB8fCBmYWxzZSwge1xuXHRcdHBsYWNlbWVudDogcG9zaXRpb24gYXMgUGxhY2VtZW50LFxuXHRcdG1pZGRsZXdhcmU6IFtmbGlwKCksIHNoaWZ0KHsgcGFkZGluZzogMTAgfSldLFxuXHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJibHVyLGZvY3VzLG1vdXNlb3V0LG1vdXNlb3ZlclwiLCBoYW5kbGVUb29sdGlwTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwia2V5ZG93blwiLCBoYW5kbGVUb29sdGlwTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwiYmx1clwiLCBoYW5kbGVUb29sdGlwTW92ZSwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZGVjbGFyYXRpdmVTaGFkb3dSb290ID0gKHN0eWxlLCBzbG90ID0gXCI8c2xvdD48L3Nsb3Q+XCIpID0+IGA8dGVtcGxhdGUgc2hhZG93cm9vdG1vZGU9XCJvcGVuXCI+JHtzbG90fTxzdHlsZT4ke3N0eWxlfTwvc3R5bGU+PC90ZW1wbGF0ZT5gO1xuXG4vLyB1LWRldGFpbHMudHNcbnZhciBVSFRNTERldGFpbHNTdHlsZSA9IGAke0RJU1BMQVlfQkxPQ0t9XG46OnNsb3R0ZWQodS1zdW1tYXJ5KSB7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogYmxvY2sgfVxuOjpzbG90dGVkKHUtc3VtbWFyeSk6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi1pbmxpbmU6IC4wNWVtIC4zMTI1ZW07IGJvcmRlci1ibG9jazogLjMxMjVlbSBzb2xpZCB0cmFuc3BhcmVudDsgYm9yZGVyLWlubGluZS1zdGFydDogLjVlbSBzb2xpZCB9XG46OnNsb3R0ZWQodS1zdW1tYXJ5W2FyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJdKTo6YmVmb3JlIHsgcm90YXRlOiA5MGRlZyB9XG46aG9zdCA+IFtwYXJ0PVwiZGV0YWlscy1jb250ZW50XCJdOm5vdChbaGlkZGVuPVwiXCJdKSB7IGRpc3BsYXk6IGJsb2NrIH1gO1xudmFyIFVIVE1MRGV0YWlsc1NoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoXG4gIFVIVE1MRGV0YWlsc1N0eWxlLFxuICAnPHNsb3QgbmFtZT1cInN1bW1hcnlcIj48L3Nsb3Q+PHNsb3QgcGFydD1cImRldGFpbHMtY29udGVudFwiIGhpZGRlbj1cInVudGlsLWZvdW5kXCI+PC9zbG90Pidcbik7XG52YXIgVUhUTUxEZXRhaWxzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyBVc2luZyB1bmRlcnNjb3JlIGluc3RlYWQgb2YgcHJpdmF0ZSBmaWVsZHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5fY29udGVudCA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnNoYWRvd1Jvb3QpXG4gICAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBuYW1lOiBcInN1bW1hcnlcIiB9KSxcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBwYXJ0OiBcImRldGFpbHMtY29udGVudFwiIH0pLFxuICAgICAgICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgVUhUTUxEZXRhaWxzU3R5bGUpXG4gICAgICApO1xuICB9XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJvcGVuXCJdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHZhciBfYTI7XG4gICAgdGhpcy5fY29udGVudCA9IChfYTIgPSB0aGlzLnNoYWRvd1Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2hpbGRyZW5bMV07XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJncm91cFwiKTtcbiAgICBvbih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLl9jb250ZW50KSBvZmYodGhpcy5fY29udGVudCwgXCJiZWZvcmVtYXRjaFwiLCB0aGlzKTtcbiAgICBvZmYodGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBwcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgaGlkZSA9IFwib25iZWZvcmVtYXRjaFwiIGluIHRoaXMgPyBcInVudGlsLWZvdW5kXCIgOiB0cnVlO1xuICAgIGNvbnN0IG9wZW4gPSB0aGlzLm9wZW47XG4gICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLmNoaWxkcmVuKVxuICAgICAgaWYgKGVsLm5vZGVOYW1lID09PSBcIlUtU1VNTUFSWVwiKSBhdHRyKGVsLCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7b3Blbn1gKTtcbiAgICBpZiAodGhpcy5fY29udGVudCkge1xuICAgICAgYXR0cih0aGlzLl9jb250ZW50LCBcImFyaWEtaGlkZGVuXCIsIGAkeyFvcGVufWApO1xuICAgICAgYXR0cih0aGlzLl9jb250ZW50LCBcInRhYmluZGV4XCIsIG9wZW4gPyBudWxsIDogXCItMVwiKTtcbiAgICAgIHRoaXMuX2NvbnRlbnQuaGlkZGVuID0gb3BlbiA/IGZhbHNlIDogaGlkZTtcbiAgICB9XG4gICAgaWYgKG9wZW4gJiYgdGhpcy5uYW1lKSB7XG4gICAgICBjb25zdCB1RGV0YWlsc0xpc3QgPSBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAke3RoaXMubm9kZU5hbWV9W25hbWU9XCIke3RoaXMubmFtZX1cIl1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCB1RGV0YWlscyBvZiB1RGV0YWlsc0xpc3QpXG4gICAgICAgIGlmICh1RGV0YWlscyAhPT0gdGhpcykgdURldGFpbHMub3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAocHJvcCA9PT0gXCJvcGVuXCIgJiYgcHJldiA9PT0gbnVsbCAhPT0gKG5leHQgPT09IG51bGwpKVxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInRvZ2dsZVwiKSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiOnNjb3BlID4gdS1zdW1tYXJ5XCIpO1xuICAgIGNvbnN0IGlzU3VtbWFyeSA9IHN1bW1hcnkgPT0gbnVsbCA/IHZvaWQgMCA6IHN1bW1hcnkuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJlZm9yZW1hdGNoXCIpIHRoaXMub3BlbiA9IHRydWU7XG4gICAgaWYgKGlzU3VtbWFyeSAmJiBldmVudC50eXBlID09PSBcImtleWRvd25cIikgYXNCdXR0b24oZXZlbnQpO1xuICAgIGlmIChpc1N1bW1hcnkgJiYgZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xuICB9XG4gIGdldCBvcGVuKCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcIm9wZW5cIik7XG4gIH1cbiAgc2V0IG9wZW4odmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwib3BlblwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBcIm5hbWVcIikgfHwgXCJcIjtcbiAgfVxuICBzZXQgbmFtZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJuYW1lXCIsIHZhbHVlKTtcbiAgfVxufTtcbnZhciBVSFRNTFN1bW1hcnlFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgICB0aGlzLnNsb3QgPSBcInN1bW1hcnlcIjtcbiAgICB0aGlzLnRhYkluZGV4ID0gMDtcbiAgfVxufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGV0YWlsc1wiLCBVSFRNTERldGFpbHNFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtc3VtbWFyeVwiLCBVSFRNTFN1bW1hcnlFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxEZXRhaWxzRWxlbWVudCwgVUhUTUxEZXRhaWxzU2hhZG93Um9vdCwgVUhUTUxEZXRhaWxzU3R5bGUsIFVIVE1MU3VtbWFyeUVsZW1lbnQgfTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19GSVJFRk9YID0gSVNfQlJPV1NFUiAmJiAvZmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIGdldExhYmVsID0gKGVsKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IGxhYmVsID0gYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIpIHx8IFwiXCI7XG4gIGNvbnN0IGxhYmVscyA9ICgoX2EyID0gYXR0cihlbCwgXCJhcmlhLWxhYmVsbGVkYnlcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpLnNwbGl0KC9cXHMrLykpIHx8IFtdO1xuICByZXR1cm4gW1xuICAgIC4uLmxhYmVscy5tYXAoKGlkMikgPT4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQyKSksXG4gICAgLy8gR2V0IGFsbCBsYWJlbGxlZGJ5IGVsZW1lbnRzXG4gICAgLi4uQXJyYXkuZnJvbShlbC5sYWJlbHMgfHwgW10pXG4gICAgLy8gR2V0IGFsbCA8bGFiZWw+IGVsZW1lbnRzXG4gIF0ucmVkdWNlKChhY2MsIGVsMikgPT4ge1xuICAgIHZhciBfYTM7XG4gICAgcmV0dXJuIGFjYyB8fCAoKF9hMyA9IGVsMiA9PSBudWxsID8gdm9pZCAwIDogZWwyLmlubmVyVGV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy50cmltKCkpIHx8IFwiXCI7XG4gIH0sIGxhYmVsKTtcbn07XG52YXIgZGVjbGFyYXRpdmVTaGFkb3dSb290ID0gKHN0eWxlLCBzbG90ID0gXCI8c2xvdD48L3Nsb3Q+XCIpID0+IGA8dGVtcGxhdGUgc2hhZG93cm9vdG1vZGU9XCJvcGVuXCI+JHtzbG90fTxzdHlsZT4ke3N0eWxlfTwvc3R5bGU+PC90ZW1wbGF0ZT5gO1xuXG4vLyB1LXByb2dyZXNzLnRzXG52YXIgVUhUTUxQcm9ncmVzc1N0eWxlID0gYDpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGJvcmRlcjogMXB4IHNvbGlkOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGhlaWdodDogLjVlbTsgd2lkdGg6IDEwZW07IG92ZXJmbG93OiBoaWRkZW4gfVxuOmhvc3Q6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiAxMDAlOyBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7IHdpZHRoOiB2YXIoLS1wZXJjZW50YWdlLCAwJSk7IHRyYW5zaXRpb246IHdpZHRoIC4ycyB9XG46aG9zdCg6bm90KFt2YWx1ZV0pKSB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZyxjdXJyZW50Q29sb3IgMjUlLCB0cmFuc3BhcmVudCA1MCUsIGN1cnJlbnRDb2xvciA3NSUpIDUwJS80MDAlIH1cbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSkgeyA6aG9zdCB7IGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZSAycyBsaW5lYXIgaW5maW5pdGUgfSAgfVxuQGtleWZyYW1lcyBpbmRldGVybWluYXRlIHsgZnJvbSB7IGJhY2tncm91bmQtcG9zaXRpb24teDogMTAwJSB9IHRvIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAwIH0gfWA7XG52YXIgVUhUTUxQcm9ncmVzc1NoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoXG4gIFVIVE1MUHJvZ3Jlc3NTdHlsZSxcbiAgXCI8c2xvdCBoaWRkZW4+PC9zbG90PlwiXG4pO1xudmFyIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbnZhciBVSFRNTFByb2dyZXNzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIiwgXCJ2YWx1ZVwiLCBcIm1heFwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICghdGhpcy5zaGFkb3dSb290KVxuICAgICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgaGlkZGVuOiBcIlwiIH0pLFxuICAgICAgICAvLyBTbG90IGhpZGluZyBjb250ZW50IGFsbG93cyBsZWdhY3kgYnJvd3NlciB0byBkaXNwbGF5IGZhbGxiYWNrIHRleHRcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIFVIVE1MUHJvZ3Jlc3NTdHlsZSlcbiAgICAgICk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKFNLSVBfQVRUUl9DSEFOR0UpIHJldHVybjtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gdHJ1ZTtcbiAgICBjb25zdCByb2xlSW1hZ2UgPSBJU19JT1MgfHwgSVNfRklSRUZPWDtcbiAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCh0aGlzLnBvc2l0aW9uICogMTAwKSk7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcGVyY2VudGFnZVwiLCBgJHtwZXJjZW50YWdlfSVgKTtcbiAgICBsZXQgbGFiZWwgPSBnZXRMYWJlbCh0aGlzKTtcbiAgICBpZiAocm9sZUltYWdlKSBsYWJlbCA9IGAke2xhYmVsLnJlcGxhY2UoL1xcZCslJC8sIFwiXCIpfSAke3BlcmNlbnRhZ2V9JWA7XG4gICAgaWYgKElTX0ZJUkVGT1gpIGZvciAoY29uc3QgZWwgb2YgdGhpcy5sYWJlbHMpIGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtYnVzeVwiLCBgJHt0aGlzLnBvc2l0aW9uID09PSAtMX1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbC50cmltKCkpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsbGVkYnlcIiwgbnVsbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtYXhcIiwgXCIxMDBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtaW5cIiwgXCIwXCIpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbm93XCIsIGAke3BlcmNlbnRhZ2V9YCk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgcm9sZUltYWdlID8gXCJpbWdcIiA6IFwicHJvZ3Jlc3NiYXJcIik7XG4gICAgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xuICB9XG4gIGdldCBsYWJlbHMoKSB7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLmNsb3Nlc3QoXCJsYWJlbDpub3QoW2Zvcl0pXCIpO1xuICAgIGNvbnN0IGlkMiA9IHVzZUlkKHRoaXMpO1xuICAgIGlmIChsYWJlbCkgbGFiZWwuaHRtbEZvciA9IGlkMjtcbiAgICBjb25zdCBlbCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGBsYWJlbFtmb3I9XCIke2lkMn1cIl1gXG4gICAgKTtcbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgZ2V0IHBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlID09PSBudWxsID8gLTEgOiBNYXRoLm1pbih0aGlzLnZhbHVlIC8gdGhpcy5tYXgsIDEpO1xuICB9XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIik7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBtYXgoKSB7XG4gICAgcmV0dXJuIGdldE51bWJlcih0aGlzLCBcIm1heFwiKSB8fCAxO1xuICB9XG4gIHNldCBtYXgobWF4KSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwibWF4XCIsIG1heCk7XG4gIH1cbn07XG4vLyBQcmV2ZW50IENocm9tZSBEZXZUb29scyB3YXJuaW5nIGFib3V0IDxsYWJlbCBmb3I9XCJcIj4gcG9pbnRpbmcgdG8gPHUtcHJvZ3Jlc3M+XG5VSFRNTFByb2dyZXNzRWxlbWVudC5mb3JtQXNzb2NpYXRlZCA9IHRydWU7XG52YXIgaXNOdW1lcmljID0gKHZhbHVlKSA9PiAhTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUZsb2F0KGAke3ZhbHVlfWApKSAmJiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKHZhbHVlKSk7XG52YXIgZ2V0TnVtYmVyID0gKGVsLCBrZXkpID0+IHtcbiAgY29uc3QgdmFsdWUgPSBhdHRyKGVsLCBrZXkpO1xuICByZXR1cm4gaXNOdW1lcmljKHZhbHVlKSA/IE1hdGgubWF4KDAsIE51bWJlci5wYXJzZUZsb2F0KHZhbHVlKSkgOiBudWxsO1xufTtcbnZhciBzZXROdW1iZXIgPSAoZWwsIGtleSwgdmFsKSA9PiB7XG4gIGlmICh2YWwgPT09IG51bGwgfHwgaXNOdW1lcmljKHZhbCkpIGF0dHIoZWwsIGtleSwgYCR7dmFsfWApO1xuICBlbHNlIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCBub24tbnVtZXJpYyAnJHthdHRyfSc6ICcke3ZhbH0nYCk7XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1wcm9ncmVzc1wiLCBVSFRNTFByb2dyZXNzRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MUHJvZ3Jlc3NFbGVtZW50LCBVSFRNTFByb2dyZXNzU2hhZG93Um9vdCwgVUhUTUxQcm9ncmVzc1N0eWxlIH07XG4iXSwibmFtZXMiOlsiX19kZWZQcm9wIiwiX19nZXRPd25Qcm9wU3ltYm9scyIsIl9faGFzT3duUHJvcCIsIl9fcHJvcElzRW51bSIsIl9fZGVmTm9ybWFsUHJvcCIsIm9iaiIsImtleSIsInZhbHVlIiwiX19zcHJlYWRWYWx1ZXMiLCJhIiwiYiIsInByb3AiLCJJU19CUk9XU0VSIiwiSVNfQU5EUk9JRCIsIklTX0ZJUkVGT1giLCJJU19JT1MiLCJfYSIsIkZPQ1VTX09VVExJTkUiLCJVSFRNTEVsZW1lbnQiLCJhdHRyIiwiZWwiLCJuYW1lIiwiZXZlbnRzIiwiYWN0aW9uIiwiZWxlbWVudCIsInJlc3QiLCJ0eXBlIiwib24iLCJvZmYiLCJvYnNlcnZlcnMiLCJtdXRhdGlvbk9ic2VydmVyIiwib3B0aW9ucyIsIm9ic2VydmVyIiwiZGV0YWlsIiwiYXNCdXR0b24iLCJldmVudCIsImlzQ2xpY2siLCJnZXRSb290Iiwibm9kZSIsIl9hMiIsInJvb3QiLCJpZCIsInVzZUlkIiwiY3JlYXRlRWxlbWVudCIsInRhZ05hbWUiLCJ0ZXh0MiIsImF0dHJzIiwidmFsIiwiY3VzdG9tRWxlbWVudHMiLCJpbnN0YW5jZSIsImdldExhYmVsIiwibGFiZWwiLCJpZDIiLCJhY2MiLCJlbDIiLCJfYTMiLCJMSVZFIiwiTElWRV9TUl9GSVgiLCJzcGVhayIsInNldFZhbHVlIiwiaW5wdXQiLCJkYXRhIiwiX2IiLCJwcm90byIsIklTX1BSRVNTIiwiaXNNb3VzZURvd24iLCJVSFRNTENvbWJvYm94U3R5bGUiLCJFVkVOVFMiLCJFVkVOVF9PTkNFIiwiSVNfRklSRUZPWF9ERVNLVE9QIiwiSVNfTU9CSUxFIiwiTU9ESUZJRUQiLCJGQUxTRSIsIlRFWFRTIiwiVUhUTUxDb21ib2JveEVsZW1lbnQiLCJyZW5kZXIiLCJzeW5jSW5wdXRWYWx1ZSIsIl8iLCJ0YXJnZXQiLCJpc0Rpc2FibGVkIiwib25CbHVyIiwib25DbGljayIsIm9uRm9jdXMiLCJvbklucHV0Iiwib25LZXlEb3duIiwidGFnIiwidGV4dCIsImlzRGF0YSIsImNvbnRyb2wiLCJzZWxmIiwiX2ZvY3VzIiwiX3RleHRzIiwiaXRlbXMiLCJsaXN0IiwibXVsdGlwbGUiLCJwcmV2IiwibmV4dCIsImVkaXRzIiwiYWRkZWROb2RlcyIsInJlbW92ZWROb2RlcyIsInNob3VsZEFubm91bmNlIiwiYXJpYUV4cGFuZGVkIiwiaW5wdXRNb2RlIiwibmV4dEZvY3VzIiwiaXNSZW1vdmUiLCJpZHgiLCJzZWxlY3QiLCJyZW1vdmUiLCJpdGVtMiIsIm9wdGlvbiIsImxhYmVsMiIsImFyaWEiLCJvcHQiLCJpdGVtIiwic3luY0NsZWFyV2l0aElucHV0Iiwic3luY09wdGlvbnNXaXRoSXRlbXMiLCJfc3BlYWsiLCJ2YWx1ZXMiLCJkaXNwYXRjaE1hdGNoIiwiY2hhbmdlIiwiY3JlYXRhYmxlIiwicXVlcnkiLCJtYXRjaCIsIm8iLCJkaXNwYXRjaENoYW5nZSIsInJlbW92YWJsZSIsImFkZCIsImkiLCJvbkJsdXJyZWQiLCJ4IiwieSIsImNsZWFyIiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwicmVwZWF0IiwiaXNDb250cm9sIiwiaW5UZXh0IiwiaW5kZXgiLCJmb3JtIiwiU0FGRV9MQUJFTExFREJZIiwiRElTUExBWV9CTE9DSyIsImF0dGFjaFN0eWxlIiwiY3NzIiwiVUhUTUxUYWJzU3R5bGUiLCJVSFRNTFRhYkxpc3RTdHlsZSIsIlVIVE1MVGFiUGFuZWxTdHlsZSIsIlVIVE1MVGFiU3R5bGUiLCJBUklBX0NPTlRST0xTIiwiQVJJQV9TRUxFQ1RFRCIsIlVIVE1MVGFic0VsZW1lbnQiLCJxdWVyeVdpdGhvdXROZXN0ZWQiLCJnZXRTZWxlY3RlZEluZGV4Iiwic2V0U2VsZWN0ZWQiLCJVSFRNTFRhYkxpc3RFbGVtZW50IiwidGFiIiwidGFicyIsIlNLSVBfQVRUUl9DSEFOR0UiLCJVSFRNTFRhYkVsZW1lbnQiLCJwYW5lbHMiLCJuZXh0UGFuZWwiLCJnZXRQYW5lbCIsInBhbmVsIiwidGFibGlzdCIsInRhYkxpc3QiLCJVSFRNTFRhYlBhbmVsRWxlbWVudCIsImhpZGRlbiIsImlzRm9jdXNhYmxlIiwibWluIiwibWF4Iiwicm91bmQiLCJmbG9vciIsImNyZWF0ZUNvb3JkcyIsInYiLCJvcHBvc2l0ZVNpZGVNYXAiLCJvcHBvc2l0ZUFsaWdubWVudE1hcCIsImNsYW1wIiwic3RhcnQiLCJlbmQiLCJldmFsdWF0ZSIsInBhcmFtIiwiZ2V0U2lkZSIsInBsYWNlbWVudCIsImdldEFsaWdubWVudCIsImdldE9wcG9zaXRlQXhpcyIsImF4aXMiLCJnZXRBeGlzTGVuZ3RoIiwieUF4aXNTaWRlcyIsImdldFNpZGVBeGlzIiwiZ2V0QWxpZ25tZW50QXhpcyIsImdldEFsaWdubWVudFNpZGVzIiwicmVjdHMiLCJydGwiLCJhbGlnbm1lbnQiLCJhbGlnbm1lbnRBeGlzIiwibGVuZ3RoIiwibWFpbkFsaWdubWVudFNpZGUiLCJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsImdldEV4cGFuZGVkUGxhY2VtZW50cyIsIm9wcG9zaXRlUGxhY2VtZW50IiwiZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQiLCJsclBsYWNlbWVudCIsInJsUGxhY2VtZW50IiwidGJQbGFjZW1lbnQiLCJidFBsYWNlbWVudCIsImdldFNpZGVMaXN0Iiwic2lkZSIsImlzU3RhcnQiLCJnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzIiwiZmxpcEFsaWdubWVudCIsImRpcmVjdGlvbiIsImV4cGFuZFBhZGRpbmdPYmplY3QiLCJwYWRkaW5nIiwiZ2V0UGFkZGluZ09iamVjdCIsInJlY3RUb0NsaWVudFJlY3QiLCJyZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudCIsIl9yZWYiLCJyZWZlcmVuY2UiLCJmbG9hdGluZyIsInNpZGVBeGlzIiwiYWxpZ25MZW5ndGgiLCJpc1ZlcnRpY2FsIiwiY29tbW9uWCIsImNvbW1vblkiLCJjb21tb25BbGlnbiIsImNvb3JkcyIsImNvbXB1dGVQb3NpdGlvbiIsImNvbmZpZyIsInN0cmF0ZWd5IiwibWlkZGxld2FyZSIsInBsYXRmb3JtIiwidmFsaWRNaWRkbGV3YXJlIiwic3RhdGVmdWxQbGFjZW1lbnQiLCJtaWRkbGV3YXJlRGF0YSIsInJlc2V0Q291bnQiLCJmbiIsIm5leHRYIiwibmV4dFkiLCJyZXNldCIsImRldGVjdE92ZXJmbG93Iiwic3RhdGUiLCJfYXdhaXQkcGxhdGZvcm0kaXNFbGUiLCJlbGVtZW50cyIsImJvdW5kYXJ5Iiwicm9vdEJvdW5kYXJ5IiwiZWxlbWVudENvbnRleHQiLCJhbHRCb3VuZGFyeSIsInBhZGRpbmdPYmplY3QiLCJjbGlwcGluZ0NsaWVudFJlY3QiLCJvZmZzZXRQYXJlbnQiLCJvZmZzZXRTY2FsZSIsImVsZW1lbnRDbGllbnRSZWN0IiwiZmxpcCIsIl9taWRkbGV3YXJlRGF0YSRhcnJvdyIsIl9taWRkbGV3YXJlRGF0YSRmbGlwIiwiaW5pdGlhbFBsYWNlbWVudCIsImNoZWNrTWFpbkF4aXMiLCJjaGVja0Nyb3NzQXhpcyIsInNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyIsImZhbGxiYWNrU3RyYXRlZ3kiLCJmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uIiwiZGV0ZWN0T3ZlcmZsb3dPcHRpb25zIiwiaW5pdGlhbFNpZGVBeGlzIiwiaXNCYXNlUGxhY2VtZW50IiwiZmFsbGJhY2tQbGFjZW1lbnRzIiwiaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiIsInBsYWNlbWVudHMiLCJvdmVyZmxvdyIsIm92ZXJmbG93cyIsIm92ZXJmbG93c0RhdGEiLCJzaWRlcyIsIl9taWRkbGV3YXJlRGF0YSRmbGlwMiIsIl9vdmVyZmxvd3NEYXRhJGZpbHRlciIsIm5leHRJbmRleCIsIm5leHRQbGFjZW1lbnQiLCJkIiwicmVzZXRQbGFjZW1lbnQiLCJfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIyIiwiY3VycmVudFNpZGVBeGlzIiwic2hpZnQiLCJsaW1pdGVyIiwiY3Jvc3NBeGlzIiwibWFpbkF4aXMiLCJtYWluQXhpc0Nvb3JkIiwiY3Jvc3NBeGlzQ29vcmQiLCJtaW5TaWRlIiwibWF4U2lkZSIsImxpbWl0ZWRDb29yZHMiLCJzaXplIiwiX3N0YXRlJG1pZGRsZXdhcmVEYXRhIiwiX3N0YXRlJG1pZGRsZXdhcmVEYXRhMiIsImFwcGx5IiwiaXNZQXhpcyIsImhlaWdodFNpZGUiLCJ3aWR0aFNpZGUiLCJtYXhpbXVtQ2xpcHBpbmdIZWlnaHQiLCJtYXhpbXVtQ2xpcHBpbmdXaWR0aCIsIm92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0Iiwib3ZlcmZsb3dBdmFpbGFibGVXaWR0aCIsIm5vU2hpZnQiLCJhdmFpbGFibGVIZWlnaHQiLCJhdmFpbGFibGVXaWR0aCIsInhNaW4iLCJ4TWF4IiwieU1pbiIsInlNYXgiLCJuZXh0RGltZW5zaW9ucyIsImhhc1dpbmRvdyIsImdldE5vZGVOYW1lIiwiaXNOb2RlIiwiZ2V0V2luZG93IiwiX25vZGUkb3duZXJEb2N1bWVudCIsImdldERvY3VtZW50RWxlbWVudCIsImlzRWxlbWVudCIsImlzSFRNTEVsZW1lbnQiLCJpc1NoYWRvd1Jvb3QiLCJpbnZhbGlkT3ZlcmZsb3dEaXNwbGF5VmFsdWVzIiwiaXNPdmVyZmxvd0VsZW1lbnQiLCJvdmVyZmxvd1giLCJvdmVyZmxvd1kiLCJkaXNwbGF5IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInRhYmxlRWxlbWVudHMiLCJpc1RhYmxlRWxlbWVudCIsInRvcExheWVyU2VsZWN0b3JzIiwiaXNUb3BMYXllciIsInNlbGVjdG9yIiwidHJhbnNmb3JtUHJvcGVydGllcyIsIndpbGxDaGFuZ2VWYWx1ZXMiLCJjb250YWluVmFsdWVzIiwiaXNDb250YWluaW5nQmxvY2siLCJlbGVtZW50T3JDc3MiLCJ3ZWJraXQiLCJpc1dlYktpdCIsImdldENvbnRhaW5pbmdCbG9jayIsImN1cnJlbnROb2RlIiwiZ2V0UGFyZW50Tm9kZSIsImlzTGFzdFRyYXZlcnNhYmxlTm9kZSIsImxhc3RUcmF2ZXJzYWJsZU5vZGVOYW1lcyIsImdldE5vZGVTY3JvbGwiLCJyZXN1bHQiLCJnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvciIsInBhcmVudE5vZGUiLCJnZXRPdmVyZmxvd0FuY2VzdG9ycyIsInRyYXZlcnNlSWZyYW1lcyIsIl9ub2RlJG93bmVyRG9jdW1lbnQyIiwic2Nyb2xsYWJsZUFuY2VzdG9yIiwiaXNCb2R5Iiwid2luIiwiZnJhbWVFbGVtZW50IiwiZ2V0RnJhbWVFbGVtZW50IiwiZ2V0Q3NzRGltZW5zaW9ucyIsImdldENvbXB1dGVkU3R5bGUkMSIsImhhc09mZnNldCIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0Iiwic2hvdWxkRmFsbGJhY2siLCJ1bndyYXBFbGVtZW50IiwiZ2V0U2NhbGUiLCJkb21FbGVtZW50IiwiJCIsIm5vT2Zmc2V0cyIsImdldFZpc3VhbE9mZnNldHMiLCJzaG91bGRBZGRWaXN1YWxPZmZzZXRzIiwiaXNGaXhlZCIsImZsb2F0aW5nT2Zmc2V0UGFyZW50IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaW5jbHVkZVNjYWxlIiwiaXNGaXhlZFN0cmF0ZWd5IiwiY2xpZW50UmVjdCIsInNjYWxlIiwidmlzdWFsT2Zmc2V0cyIsIm9mZnNldFdpbiIsImN1cnJlbnRXaW4iLCJjdXJyZW50SUZyYW1lIiwiaWZyYW1lU2NhbGUiLCJpZnJhbWVSZWN0IiwiZ2V0V2luZG93U2Nyb2xsQmFyWCIsImxlZnRTY3JvbGwiLCJnZXRIVE1MT2Zmc2V0IiwiZG9jdW1lbnRFbGVtZW50Iiwic2Nyb2xsIiwiaHRtbFJlY3QiLCJjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCIsInRvcExheWVyIiwib2Zmc2V0cyIsImlzT2Zmc2V0UGFyZW50QW5FbGVtZW50Iiwib2Zmc2V0UmVjdCIsImh0bWxPZmZzZXQiLCJnZXRDbGllbnRSZWN0cyIsImdldERvY3VtZW50UmVjdCIsImh0bWwiLCJib2R5IiwiU0NST0xMQkFSX01BWCIsImdldFZpZXdwb3J0UmVjdCIsInZpc3VhbFZpZXdwb3J0IiwidmlzdWFsVmlld3BvcnRCYXNlZCIsIndpbmRvd1Njcm9sbGJhclgiLCJkb2MiLCJib2R5U3R5bGVzIiwiYm9keU1hcmdpbklubGluZSIsImNsaXBwaW5nU3RhYmxlU2Nyb2xsYmFyV2lkdGgiLCJhYnNvbHV0ZU9yRml4ZWQiLCJnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdCIsImdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvciIsImNsaXBwaW5nQW5jZXN0b3IiLCJoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IiLCJzdG9wTm9kZSIsImdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyIsImNhY2hlIiwiY2FjaGVkUmVzdWx0IiwiY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUiLCJlbGVtZW50SXNGaXhlZCIsImNvbXB1dGVkU3R5bGUiLCJjdXJyZW50Tm9kZUlzQ29udGFpbmluZyIsImFuY2VzdG9yIiwiZ2V0Q2xpcHBpbmdSZWN0IiwiY2xpcHBpbmdBbmNlc3RvcnMiLCJmaXJzdENsaXBwaW5nQW5jZXN0b3IiLCJjbGlwcGluZ1JlY3QiLCJhY2NSZWN0IiwiZ2V0RGltZW5zaW9ucyIsImdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50Iiwic2V0TGVmdFJUTFNjcm9sbGJhck9mZnNldCIsImlzU3RhdGljUG9zaXRpb25lZCIsImdldFRydWVPZmZzZXRQYXJlbnQiLCJwb2x5ZmlsbCIsInJhd09mZnNldFBhcmVudCIsImdldE9mZnNldFBhcmVudCIsInN2Z09mZnNldFBhcmVudCIsImdldEVsZW1lbnRSZWN0cyIsImdldE9mZnNldFBhcmVudEZuIiwiZ2V0RGltZW5zaW9uc0ZuIiwiZmxvYXRpbmdEaW1lbnNpb25zIiwiaXNSVEwiLCJyZWN0c0FyZUVxdWFsIiwib2JzZXJ2ZU1vdmUiLCJvbk1vdmUiLCJpbyIsInRpbWVvdXRJZCIsImNsZWFudXAiLCJfaW8iLCJyZWZyZXNoIiwic2tpcCIsInRocmVzaG9sZCIsImVsZW1lbnRSZWN0Rm9yUm9vdE1hcmdpbiIsImluc2V0VG9wIiwiaW5zZXRSaWdodCIsImluc2V0Qm90dG9tIiwiaW5zZXRMZWZ0IiwiaXNGaXJzdFVwZGF0ZSIsImhhbmRsZU9ic2VydmUiLCJlbnRyaWVzIiwicmF0aW8iLCJhdXRvVXBkYXRlIiwidXBkYXRlIiwiYW5jZXN0b3JTY3JvbGwiLCJhbmNlc3RvclJlc2l6ZSIsImVsZW1lbnRSZXNpemUiLCJsYXlvdXRTaGlmdCIsImFuaW1hdGlvbkZyYW1lIiwicmVmZXJlbmNlRWwiLCJhbmNlc3RvcnMiLCJjbGVhbnVwSW8iLCJyZW9ic2VydmVGcmFtZSIsInJlc2l6ZU9ic2VydmVyIiwiZmlyc3RFbnRyeSIsIl9yZXNpemVPYnNlcnZlciIsImZyYW1lSWQiLCJwcmV2UmVmUmVjdCIsImZyYW1lTG9vcCIsIm5leHRSZWZSZWN0IiwiX3Jlc2l6ZU9ic2VydmVyMiIsInNoaWZ0JDEiLCJmbGlwJDEiLCJzaXplJDEiLCJtZXJnZWRPcHRpb25zIiwicGxhdGZvcm1XaXRoQ2FjaGUiLCJjb21wdXRlUG9zaXRpb24kMSIsIlFVSUNLX0VWRU5UIiwiZGVib3VuY2UiLCJjYWxsYmFjayIsImRlbGF5IiwidGltZXIiLCJhcmdzIiwiVVVJRCIsIlVOQklORCIsIm9uTG9hZGVkIiwicnVuIiwidW5iaW5kIiwiQU5DSE9SRUQiLCJhbmNob3JQb3NpdGlvbiIsImFuY2hvciIsImNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIiLCJxdWV1ZSIsIm9uRnJhbWUiLCJvblRpbWVyIiwiTVVUQVRPUlMiLCJvbk11dGF0aW9uIiwiY2xhc3NOYW1lIiwiZWxlbXMiLCJtdXRhdG9yIiwiaXNJbnB1dExpa2UiLCJDU1NfQlJFQURDUlVNQlMiLCJzdHlsZXMiLCJDU1NfQ0FSRCIsIkNTU19DSElQIiwiQ1NTX0hFTFBURVhUIiwiQ1NTX1BBR0lOQVRJT04iLCJDTElDS1MiLCJNQVRPTU8iLCJCQU5ORVIiLCJCQU5ORVJfVVJMIiwiYW5hbHl0aWNzIiwiY29uc2VudCIsImVuYWJsZWQiLCJtYXRvbW9JZCIsIm1hdG9tb1RhZ01hbmFnZXJJZCIsInJlbmRlckJhbm5lciIsInNyYyIsInVybCIsInRpdGxlIiwiY2F0ZWdvcnkiLCJyZXN1bHRzIiwiYmFubmVyIiwib25DbG9zZSIsImhhbmRsZVRyYWNrIiwicHJvY2Vzc1RyYWNrIiwiaGVhZGluZyIsImdyb3VwIiwicG9wb3ZlciIsIm9wZW4iLCJzdHlsZSIsImhlYWQiLCJzaGVldCIsImZvcmNlIiwiQ1NTX0FQUCIsIkNTU19TVElDS1kiLCJDU1NfVE9HR0xFIiwiQ1NTX1NJREVCQVIiLCJ1c2VUcmFuc2l0aW9uIiwidG9nZ2xlQXBwRXhwYW5kZWQiLCJoYW5kbGVBcHBUb2dnbGVDbGljayIsInN0b3AiLCJsaW5rIiwiY2xvc2VTaWRlYmFyIiwic2lkZWJhciIsIk1JTl9ZIiwiU0NST0xMX1VQIiwiU1RJQ0siLCJTVElDS19FTCIsIlNUSUNLX0giLCJTVElDS19ZIiwiU1RVQ0siLCJXSU5fSCIsIldJTl9ZIiwiaGFuZGxlTXV0YXRpb24iLCJzdGlja3kiLCJoYW5kbGVBcHBTY3JvbGwiLCJORVhUX1kiLCJORVhUX1VQIiwiZ2V0U3RlcHMiLCJub3ciLCJzaG93Iiwib2Zmc2V0IiwicGFnZXMiLCJwYWdpbmF0aW9uIiwiY3VycmVudCIsInRvdGFsIiwicGFnZSIsInIiLCJlIiwidCIsImYiLCJuIiwiY2xzeCIsInRvYXN0IiwiY29udGVudCIsImRpYWxvZyIsImhhbmRsZVRvYXN0Q2xvc2UiLCJhbmltYXRpb25OYW1lIiwiaGFuZGxlQnJlYWRjcnVtYnNNdXRhdGlvbiIsImJyZWFkY3J1bWJzIiwiYnJlYWRjdW1icyIsImNydW1iIiwiTVREU0VsZW1lbnQiLCJ4bWxucyIsIk1URFNDaGFydCIsInJvd01heCIsInRhYmxlIiwicm93IiwiaXNUYm9keSIsInJvd1RvdGFsIiwiY2VsbCIsImlzVGQiLCJudW0iLCJ2YXJpYW50IiwiaXNTdGFja2VkIiwic21vb3RoaW5nIiwiZ3JvdXBzIiwic3RlcHMiLCJ0b1N0ZXBzIiwibGVnZW5kIiwibGVnZW5kcyIsImxlZ2VuZElkcyIsImdyb3VwTGFiZWwiLCJsZWdlbmRJbmRleCIsImxpbmVDb250YWluZXIiLCJsaW5lIiwicGF0aCIsInRvUGF0aCIsImxpbmVQYXRoIiwibGluZUJvcmRlciIsImxpbmVTaGFkZSIsImNvbCIsImRvdWdobnV0IiwidG90IiwicmFkaXVzIiwiaW5uZXIiLCJsYXJnZUFyYyIsImEwIiwiYTEiLCJ4MCIsInkwIiwieDEiLCJ5MSIsInBvaW50cyIsInMiLCJzbW9vdGgiLCJheCIsImF5IiwiYngiLCJieSIsInN1YiIsImFsbCIsImNzWCIsImNzWSIsImNlWCIsImNlWSIsImdldE51bSIsImRpZ2l0cyIsInN0ZXAiLCJDU1NfRElBTE9HIiwiRElBTE9HUyIsImhhbmRsZU1vZGFsIiwiaGFuZGxlRGlhbG9nQ2xpY2siLCJoYW5kbGVFcnJvc3VtbWFyeUluamVjdCIsImZpcnN0IiwiRElTQUJMRUQiLCJTRUxFQ1RFRCIsIlVIVE1MT3B0aW9uRWxlbWVudCIsIlVIVE1MRGF0YUxpc3RTdHlsZSIsIkxJVkVfVElNRVIiLCJJTlBVVF9ERUJPVU5DRSIsIkVWRU5UU19JTlBVVCIsIlVIVE1MRGF0YUxpc3RFbGVtZW50IiwiZGlzY29ubmVjdElucHV0IiwiX3ByZXYiLCJzZXR1cElucHV0Iiwic2V0RXhwYW5kZWQiLCJfYyIsImlzUG9wb3ZlciIsImlzSW5wdXQiLCJyZWxhdGVkVGFyZ2V0IiwiYWx0S2V5IiwiY3RybEtleSIsInNoaWZ0S2V5IiwibWV0YUtleSIsImlzRXNjYXBlIiwiX3Jvb3QiLCJfaW5wdXQiLCJmaWx0ZXIiLCJ2aXNpYmxlIiwiQ1NTX0ZJRUxEIiwiQ1NTX1ZBTElEQVRJT05TIiwiQ1NTX1ZBTElEQVRJT04iLCJnZXRUZXh0IiwiaGFuZGxlRmllbGRNdXRhdGlvbiIsImZpZWxkcyIsInZhbGlkYXRlIiwiZmllbGQiLCJsYWJlbHMiLCJkZXNjcyIsInZhbGlkcyIsImNvbWJvYm94IiwidmFsaWQiLCJkZXNjIiwicmVuZGVyQ29tYm9ib3giLCJyZW5kZXJDb3VudGVyIiwicmVuZGVyVGV4dGFyZWFTaXplIiwidGV4dGFyZWEiLCJsaW1pdCIsInJlbWFpbmRlciIsIm5leHRJbnZhbGlkIiwicHJldkludmFsaWQiLCJvdmVyIiwidW5kZXIiLCJoYW5kbGVGaWVsZFRvZ2dsZSIsImhhbmRsZUZpZWxkSW5wdXQiLCJoYW5kbGVGaWVsZFZhbGRpYXRpb24iLCJDU1NfRklFTERTRVQiLCJBUklBX0RFU0MiLCJBUklBX0lOVkFMSUQiLCJoYW5kbGVGaWVsZHNldE11dGF0aW9uIiwiZmllbGRzZXRzIiwiZmllbGRzZXQiLCJpbnB1dHMiLCJ2YWxpZElkIiwiQ1NTX0xPR08iLCJoYW5kbGVMb2dvTXV0YXRpb24iLCJsb2dvIiwiaWNvbiIsInN2ZyIsImlzRG90IiwiYmFjayIsIkNTU19QT1BPVkVSIiwiQ1NTX0FVVE8iLCJoYW5kbGVQb3BvdmVyVG9nZ2xlIiwibmV3U3RhdGUiLCJpc0Nsb3NpbmciLCJpc0NvbnRhaW4iLCJoYW5kbGVQb3BvdmVyQmVmb3JldG9nZ2xlIiwiaGFuZGxlUG9wb3ZlckxpbmtDbGljayIsInBvcCIsIkNTU19UQUJMRSIsIklOVEVSQUNUSVZFIiwiaGFuZGxlVGFibGVNdXRhdGlvbiIsInRhYmxlcyIsInRocyIsInRoIiwidGJvZHkiLCJoYW5kbGVUYWJsZUNsaWNrIiwiQ1NTX1RPQVNUIiwiQVRUUl9TT1JUIiwiaGFuZGxlVG9hc3RTdGF0ZSIsIm1zIiwiaGFuZGxlVG9hc3RDbGljayIsImNsb3NlIiwiQ1NTX1RPR0dMRUdST1VQIiwiaGFuZGxlVG9nZ2xlZ3JvdXBLZXlkb3duIiwibW92ZSIsIkRFU0NSSUJFREJZIiwiRVNDIiwiTEFCRUxMRURCWSIsIlBPU0lUSU9OX0NTU19QUk9QRVJUWSIsIlRIUk9UVExFX0RFTEFZIiwiVE9PTFRJUCIsIkFOQ0hPUiIsIkxBU1RfQ0FMTCIsIlRIUk9UVExFIiwiaGFuZGxlVG9vbHRpcE1vdmUiLCJ3YWl0IiwiaGFuZGxlVG9vbHRpcE1vdmVUaHJvdHRsZWQiLCJwb3NpdGlvbiIsImhhZExhYmVsIiwiaGFzTGFiZWwiLCJVSFRNTERldGFpbHNTdHlsZSIsIlVIVE1MRGV0YWlsc0VsZW1lbnQiLCJoaWRlIiwidURldGFpbHNMaXN0IiwidURldGFpbHMiLCJzdW1tYXJ5IiwiaXNTdW1tYXJ5IiwiVUhUTUxTdW1tYXJ5RWxlbWVudCIsIlVIVE1MUHJvZ3Jlc3NTdHlsZSIsIlVIVE1MUHJvZ3Jlc3NFbGVtZW50Iiwicm9sZUltYWdlIiwicGVyY2VudGFnZSIsImdldE51bWJlciIsInNldE51bWJlciIsImlzTnVtZXJpYyJdLCJtYXBwaW5ncyI6ImtDQUFBLElBQUlBLEdBQVksT0FBTyxlQUNuQkMsR0FBc0IsT0FBTyxzQkFDN0JDLEdBQWUsT0FBTyxVQUFVLGVBQ2hDQyxHQUFlLE9BQU8sVUFBVSxxQkFDaENDLEdBQWtCLENBQUNDLEVBQUtDLEVBQUtDLElBQVVELEtBQU9ELEVBQU1MLEdBQVVLLEVBQUtDLEVBQUssQ0FBRSxXQUFZLEdBQU0sYUFBYyxHQUFNLFNBQVUsR0FBTSxNQUFBQyxDQUFLLENBQUUsRUFBSUYsRUFBSUMsQ0FBRyxFQUFJQyxFQUN0SkMsR0FBaUIsQ0FBQ0MsRUFBR0MsSUFBTSxDQUM3QixRQUFTQyxLQUFRRCxJQUFNQSxFQUFJLENBQUEsR0FDckJSLEdBQWEsS0FBS1EsRUFBR0MsQ0FBSSxHQUMzQlAsR0FBZ0JLLEVBQUdFLEVBQU1ELEVBQUVDLENBQUksQ0FBQyxFQUNwQyxHQUFJVixHQUNGLFFBQVNVLEtBQVFWLEdBQW9CUyxDQUFDLEVBQ2hDUCxHQUFhLEtBQUtPLEVBQUdDLENBQUksR0FDM0JQLEdBQWdCSyxFQUFHRSxFQUFNRCxFQUFFQyxDQUFJLENBQUMsRUFFdEMsT0FBT0YsQ0FDVCxFQUdJRyxHQUFhLE9BQU8sT0FBVyxLQUFlLE9BQU8sT0FBTyxTQUFhLEtBQWUsT0FBTyxPQUFPLFVBQWMsSUFDcEhDLEdBQWFELElBQWMsV0FBVyxLQUFLLFVBQVUsU0FBUyxFQUM5REUsR0FBYUYsSUFBYyxXQUFXLEtBQUssVUFBVSxTQUFTLEVBQzlERyxHQUFTSCxJQUFjLG1CQUFtQixLQUFLLFVBQVUsU0FBUyxFQUNsRUksR0FDSkosSUFDQSxRQUFRLE9BQU9JLEdBQUssVUFBVSxnQkFBa0IsS0FBTyxPQUFTQSxHQUFHLFdBQWEsVUFBVSxRQUFRLEVBQ2xHLElBQUlDLEdBQWdCLCtGQUNoQkMsR0FBZSxPQUFPLFlBQWdCLElBQWMsS0FBTSxDQUM5RCxFQUFJLFlBQ0osU0FBU0MsRUFBS0MsRUFBSUMsRUFBTWQsRUFBTyxDQUM3QixPQUFJQSxJQUFVLE9BQWVhLEVBQUcsYUFBYUMsQ0FBSSxHQUM3Q2QsSUFBVSxLQUFNYSxFQUFHLGdCQUFnQkMsQ0FBSSxFQUNsQ0QsRUFBRyxhQUFhQyxDQUFJLElBQU1kLEdBQU9hLEVBQUcsYUFBYUMsRUFBTWQsQ0FBSyxFQUM5RCxLQUNULENBQ0EsSUFBSWUsR0FBUyxDQUFDQyxFQUFRQyxFQUFTQyxJQUFTLENBQ3RDLFVBQVdDLEtBQVFELEVBQUssQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUNsQ0EsRUFBSyxDQUFDLEVBQUlDLEVBQ1YsUUFBUSxVQUFVLEdBQUdILENBQU0sZUFBZSxFQUFFLE1BQU1DLEVBQVNDLENBQUksQ0FFbkUsRUFDSUUsR0FBSyxDQUFDSCxLQUFZQyxJQUFTSCxHQUFPLE1BQU9FLEVBQVNDLENBQUksRUFDdERHLEdBQU0sQ0FBQ0osS0FBWUMsSUFBU0gsR0FBTyxTQUFVRSxFQUFTQyxDQUFJLEVBQzFESSxHQUE0QixJQUFJLFFBQ2hDQyxHQUFtQixDQUFDTixFQUFTTyxJQUFZLENBQzNDLEdBQUlBLElBQVksT0FBUSxPQUFPRixHQUFVLElBQUlMLENBQU8sRUFDcEQsR0FBSSxDQUNGSyxHQUFVLElBQUlMLENBQU8sRUFBRSxXQUFVLEVBQ2pDSyxHQUFVLE9BQU9MLENBQU8sQ0FDMUIsTUFBZSxDQUNmLENBQ0EsR0FBSU8sRUFBUyxDQUNYLE1BQU1DLEVBQVcsSUFBSSxpQkFDbEJDLEdBQVdULEVBQVEsWUFBWSxDQUFFLEtBQU0sV0FBWSxPQUFBUyxDQUFNLENBQUUsQ0FDbEUsRUFDSUQsRUFBUyxRQUFRUixFQUFTTyxDQUFPLEVBQ2pDRixHQUFVLElBQUlMLEVBQVNRLENBQVEsQ0FDakMsQ0FDRixFQUNJRSxHQUFZQyxHQUFVLENBQ3hCLE1BQU1DLEVBQVUsUUFBU0QsSUFBVUEsRUFBTSxNQUFRLEtBQU9BLEVBQU0sTUFBUSxTQUN0RSxPQUFJQyxHQUFTRCxFQUFNLGVBQWMsRUFDN0JDLEdBQVdELEVBQU0sa0JBQWtCLGFBQWFBLEVBQU0sT0FBTyxNQUFLLEVBQy9EQyxDQUNULEVBQ0lDLEdBQVdDLEdBQVMsQ0FDdEIsSUFBSUMsRUFDSixNQUFNQyxJQUFTRCxFQUFNRCxFQUFLLGNBQWdCLEtBQU8sT0FBU0MsRUFBSSxLQUFLRCxDQUFJLElBQU1BLEVBQUssY0FDbEYsT0FBT0UsYUFBZ0IsVUFBWUEsYUFBZ0IsV0FBYUEsRUFBTyxRQUN6RSxFQUNJQyxHQUFLLEVBQ0xDLEdBQVN0QixHQUNOQSxHQUNBQSxFQUFHLEtBQUlBLEVBQUcsR0FBSyxJQUFJQSxFQUFHLFNBQVMsWUFBVyxDQUFFLElBQUksRUFBRXFCLElBQUksU0FBUyxFQUFFLENBQUMsSUFDaEVyQixFQUFHLElBRk0sR0FJZHVCLEdBQWdCLENBQUNDLEVBQVNDLEVBQU9DLElBQVUsQ0FDN0MsTUFBTTFCLEVBQUssU0FBUyxjQUFjd0IsQ0FBTyxFQUV6QyxHQURJQyxJQUFPekIsRUFBRyxZQUFjeUIsR0FDeEJDLEVBQU8sU0FBVyxDQUFDeEMsRUFBS3lDLENBQUcsSUFBSyxPQUFPLFFBQVFELENBQUssRUFBRzNCLEVBQUtDLEVBQUlkLEVBQUt5QyxDQUFHLEVBQzVFLE9BQU8zQixDQUNULEVBQ0k0QixHQUFpQixDQUNuQixPQUFRLENBQUMzQixFQUFNNEIsSUFBYSxDQUFDckMsSUFBYyxPQUFPLGVBQWUsSUFBSVMsQ0FBSSxHQUFLLE9BQU8sZUFBZSxPQUFPQSxFQUFNNEIsQ0FBUSxDQUMzSCxFQUNJQyxHQUFZOUIsR0FBTyxDQUNyQixJQUFJbUIsRUFDSixNQUFNWSxFQUFRaEMsRUFBS0MsRUFBSSxZQUFZLEdBQUssR0FFeEMsTUFBTyxDQUNMLE1BRmVtQixFQUFNcEIsRUFBS0MsRUFBSSxpQkFBaUIsSUFBTSxLQUFPLE9BQVNtQixFQUFJLEtBQUksRUFBRyxNQUFNLEtBQUssSUFBTSxDQUFBLEdBRXZGLElBQUthLEdBQVEsU0FBUyxlQUFlQSxDQUFHLENBQUMsRUFFbkQsR0FBRyxNQUFNLEtBQUtoQyxFQUFHLFFBQVUsQ0FBQSxDQUFFLENBRWpDLEVBQUksT0FBTyxDQUFDaUMsRUFBS0MsSUFBUSxDQUNyQixJQUFJQyxFQUNKLE9BQU9GLEtBQVNFLEVBQTZCRCxHQUFJLFlBQWMsS0FBTyxPQUFTQyxFQUFJLEtBQUksSUFBTyxFQUNoRyxFQUFHSixDQUFLLENBQ1YsRUFDSUssR0FDQUMsR0FBYyxFQUNkQyxHQUFTYixHQUFVLENBQ2hCVyxLQUNIQSxHQUFPYixHQUFjLEtBQUssRUFDMUJhLEdBQUssTUFBTSxRQUFVLDhEQUNyQnJDLEVBQUtxQyxHQUFNLFlBQWEsV0FBVyxHQUVoQ0EsR0FBSyxhQUFhLFNBQVMsS0FBSyxPQUFPQSxFQUFJLEVBQzVDWCxJQUFPVyxHQUFLLFlBQWMsR0FBR1gsQ0FBSyxHQUFHWSxLQUFnQixFQUFJLElBQVMsRUFBRSxHQUMxRSxFQUNJRSxHQUFXLENBQUNDLEVBQU9DLEVBQU1uQyxFQUFPLEtBQU8sQ0FDekMsSUFBSWEsRUFBS3VCLEVBQ1QsTUFBTTNCLEVBQVEsQ0FBRSxRQUFTLEdBQU0sU0FBVSxHQUFNLEtBQUEwQixFQUFNLFVBQVduQyxDQUFJLEVBQzlEcUMsRUFBUSxpQkFBaUIsVUFDL0JILEVBQU0sY0FBYyxJQUFJLFdBQVcsY0FBZXpCLENBQUssQ0FBQyxHQUN2RDJCLEdBQU12QixFQUFNLE9BQU8seUJBQXlCd0IsRUFBTyxPQUFPLElBQU0sS0FBTyxPQUFTeEIsRUFBSSxNQUFRLE1BQWdCdUIsRUFBRyxLQUFLRixFQUFPQyxDQUFJLEVBQ2hJRCxFQUFNLGNBQWMsSUFBSSxXQUFXLFFBQVN6QixDQUFLLENBQUMsRUFDbER5QixFQUFNLGNBQWMsSUFBSSxNQUFNLFNBQVUsQ0FBRSxRQUFTLEVBQUksQ0FBRSxDQUFDLENBQzVELEVBQ0lJLEdBQVcsR0FDWEMsR0FBZTlCLElBQ2FBLEdBQU0sT0FBVSxZQUFXNkIsR0FBVyxJQUN0QzdCLEdBQU0sT0FBVSxjQUM1QzZCLEdBQVcsR0FDWHJDLEdBQUcsU0FBVSxVQUFXc0MsR0FBYSxDQUFFLEtBQU0sR0FBTSxHQUU5Q0QsSUFLTEUsR0FBcUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSwwQkFPQ2pELEVBQWEsS0FFbkNrRCxHQUFTLHVEQUNUQyxHQUFhLENBQUUsS0FBTSxHQUFNLFFBQVMsRUFBSSxFQUN4Q0MsR0FBcUJ2RCxJQUFjLENBQUNELEdBQ3BDeUQsR0FBWXpELElBQWNFLEdBQzFCd0QsR0FBVyxJQUFTLE9BQU8sQ0FBQyxFQUM1QkMsR0FBUSxRQUNSQyxHQUFRLENBQ1YsTUFBTyxRQUNQLE1BQU8sY0FDUCxNQUFPLG9DQUNQLFFBQVMsZ0JBQ1QsR0FBSSxLQUNKLE9BQVEsa0JBQ1IsUUFBUyxTQUNYLEVBQ0lDLEdBQXVCLGNBQWN4RCxFQUFhLENBQ3BELGFBQWMsQ0FDWixNQUFLLEVBQ0wsS0FBSyxNQUFRLEdBQ2IsS0FBSyxPQUFTLEdBQ2QsS0FBSyxPQUFTVixHQUFlLENBQUEsRUFBSWlFLEVBQUssRUFDdEMsS0FBSyxPQUFTLEdBQ1QsS0FBSyxZQUNSLEtBQUssYUFBYSxDQUFFLEtBQU0sTUFBTSxDQUFFLEVBQUUsT0FDbEM5QixHQUFjLE1BQU0sRUFFcEJBLEdBQWMsUUFBU3VCLEVBQWtCLENBQ2pELENBQ0UsQ0FHQSxXQUFXLG9CQUFxQixDQUM5QixPQUFPLE9BQU8sS0FBS08sRUFBSyxFQUFFLElBQUtuRSxHQUFRLFdBQVdBLENBQUcsRUFBRSxDQUN6RCxDQUNBLG1CQUFvQixDQUNsQixLQUFLLE1BQVErQixHQUFRLElBQUksRUFDekJWLEdBQUcsS0FBTXdDLEdBQVEsS0FBTSxFQUFJLEVBQzNCckMsR0FBaUIsS0FBTSxDQUNyQixnQkFBaUIsQ0FBQyxRQUFTLElBQUksRUFFL0IsV0FBWSxHQUNaLGNBQWUsR0FFZixVQUFXLEdBQ1gsUUFBUyxFQUNmLENBQUssRUFDRCxXQUFXNkMsR0FBUSxFQUFHLElBQUksRUFDMUIsV0FBV0MsR0FBZ0IsRUFBRyxJQUFJLENBQ3BDLENBQ0EseUJBQXlCakUsRUFBTWtFLEVBQUc5QixFQUFLLENBQ3JDLE1BQU1GLEVBQVFsQyxFQUFLLE1BQU0sVUFBVSxFQUFFLENBQUMsRUFDbEM4RCxHQUFNNUIsQ0FBSyxJQUFHLEtBQUssT0FBT0EsQ0FBSyxFQUFJRSxHQUFPMEIsR0FBTTVCLENBQUssRUFDM0QsQ0FDQSxzQkFBdUIsQ0FDckJmLEdBQWlCLEtBQU0sRUFBSyxFQUM1QkYsR0FBSSxLQUFNdUMsR0FBUSxLQUFNLEVBQUksRUFDNUIsS0FBSyxPQUFTLEtBQUssT0FBUyxLQUFLLE9BQVMsS0FBSyxTQUFXLE9BQzFELEtBQUssTUFBUSxLQUFLLFNBQVcsS0FBSyxNQUFRLE1BQzVDLENBQ0EsWUFBWWhDLEVBQU8sQ0FDakIsTUFBTTJDLEVBQVMzQyxFQUFNLE9BQ2pCNEMsR0FBVyxJQUFJLElBQ2Y1QyxFQUFNLE9BQVMsZ0JBQWUsS0FBSyxPQUFvQzJDLEdBQU8sT0FBVSxJQUN4RjNDLEVBQU0sT0FBUyxRQUFRNkMsR0FBTyxJQUFJLEVBQ2xDN0MsRUFBTSxPQUFTLFNBQVM4QyxHQUFRLEtBQU05QyxDQUFLLEVBQzNDQSxFQUFNLE9BQVMsU0FBUytDLEdBQVEsS0FBTS9DLENBQUssRUFDM0NBLEVBQU0sT0FBUyxTQUFTZ0QsR0FBUSxLQUFNaEQsQ0FBSyxFQUMzQ0EsRUFBTSxPQUFTLFdBQVdpRCxHQUFVLEtBQU1qRCxDQUFLLEVBQy9DQSxFQUFNLE9BQVMsYUFBYThCLEdBQVk5QixDQUFLLEVBQzdDQSxFQUFNLE9BQVMsWUFBWXdDLEdBQU8sS0FBTXhDLENBQUssRUFDbkQsQ0FDQSxJQUFJLFVBQVcsQ0FDYixJQUFJSSxFQUNKLFFBQVNBLEVBQU1wQixFQUFLLEtBQU0sZUFBZSxJQUFNLEtBQU9vQixFQUFNaUMsTUFBV0EsRUFDekUsQ0FDQSxJQUFJLFNBQVNqRSxFQUFPLENBQ2xCWSxFQUFLLEtBQU0sZ0JBQWlCWixFQUFRLEdBQUssSUFBSSxDQUMvQyxDQUNBLElBQUksV0FBWSxDQUNkLElBQUlnQyxFQUNKLFFBQVNBLEVBQU1wQixFQUFLLEtBQU0sZ0JBQWdCLElBQU0sS0FBT29CLEVBQU1pQyxNQUFXQSxFQUMxRSxDQUNBLElBQUksVUFBVWpFLEVBQU8sQ0FDbkJZLEVBQUssS0FBTSxpQkFBa0JaLEVBQVEsR0FBSyxJQUFJLENBQ2hELENBQ0EsSUFBSSxTQUFVLENBQ1osSUFBSWdDLEVBQ0osT0FBT0EsRUFBTSxLQUFLLFdBQWEsTUFBZ0JBLEVBQUksY0FDakQsS0FBSyxTQUFXLEtBQUssY0FBYyxPQUFPLEdBQ3JDLEtBQUssUUFDZCxDQUNBLElBQUksTUFBTyxDQUNULElBQUlBLEVBQ0osT0FBT0EsRUFBTSxLQUFLLFFBQVUsTUFBZ0JBLEVBQUksY0FDOUMsS0FBSyxNQUFRLEtBQUssY0FBYyxxQkFBcUIsR0FDaEQsS0FBSyxLQUNkLENBQ0EsSUFBSSxPQUFRLENBQ1YsSUFBSUEsRUFDSixPQUFPQSxFQUFNLEtBQUssU0FBVyxNQUFnQkEsRUFBSSxjQUFjLEtBQUssT0FBUyxLQUFLLGNBQWMsS0FBSyxHQUM5RixLQUFLLE1BQ2QsQ0FDQSxJQUFJLE9BQVEsQ0FDVixPQUFLLEtBQUssU0FBUSxLQUFLLE9BQVMsS0FBSyxxQkFBcUIsTUFBTSxHQUN6RCxLQUFLLE1BQ2QsQ0FDQSxJQUFJLFNBQVUsQ0FDWixJQUFJQSxFQUFLdUIsRUFDVCxHQUFJLENBQUMsS0FBSyxTQUFVLENBQ2xCLE1BQU11QixJQUFROUMsRUFBTSxLQUFLLE9BQVMsS0FBTyxPQUFTQSxFQUFJLFlBQWMsYUFBZSxXQUFhLFNBQ2hHLEtBQUssVUFBWXVCLEVBQUssS0FBSyxPQUFTLEtBQU8sT0FBU0EsRUFBRyxxQkFBcUJ1QixDQUFHLENBQ2pGLENBQ0EsT0FBTyxLQUFLLFFBQ2QsQ0FDQSxJQUFJLFFBQVMsQ0FDWCxNQUFPLENBQUMsR0FBRyxLQUFLLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBRSxNQUFBOUUsQ0FBSyxJQUFPQSxDQUFLLENBQ2pELENBQ0YsRUFDSStFLEdBQVFsRSxHQUFPLENBQ2pCLElBQUltQixFQUNKLFFBQVNBLEVBQTRCbkIsR0FBRyxjQUFnQixLQUFPLE9BQVNtQixFQUFJLEtBQUksSUFBTyxFQUN6RixFQUNJZ0QsR0FBVW5FLEdBQU9BLGFBQWMsZ0JBQy9CMkQsR0FBYSxDQUFDLENBQUUsUUFBQVMsQ0FBTyxJQUFtQ0EsR0FBUSxVQUF5Q0EsR0FBUSxVQUFhLEdBQ2hJYixHQUFTLENBQUNjLEVBQU10RCxJQUFVLENBQzVCLElBQUlJLEVBQ0osS0FBTSxDQUFFLE9BQUFtRCxFQUFRLE9BQUFDLEVBQVEsTUFBQUMsRUFBTyxRQUFBSixFQUFTLEtBQUFLLEVBQU0sU0FBQUMsQ0FBUSxFQUFLTCxFQUMzRCxHQUFJLENBQUNELEdBQVcsQ0FBQ0ssRUFBTSxPQUN2QixNQUFNRSxFQUFPN0MsR0FBU3NDLENBQU8sRUFDdkJRLEVBQU9ELEVBQUssU0FBU3hCLEVBQVEsRUFBSXBELEVBQUtxRSxFQUFTLFlBQVksRUFBSU8sRUFDckU1RSxFQUFLcUUsRUFBUyxhQUFjUSxDQUFJLEVBQ2hDLElBQUk3QyxFQUFRLEdBQUc2QyxDQUFJLEdBQUdGLEVBQVcsS0FBS0YsRUFBTSxPQUFTRCxFQUFPLE1BQU0sUUFBUSxLQUFNLEdBQUdDLEVBQU0sTUFBTSxFQUFFLEVBQUlELEVBQU8sS0FBSyxHQUFLLEVBQUUsR0FDeEgsTUFBTU0sRUFBUSxDQUFBLEVBQ2QsU0FBVyxDQUFFLFdBQUFDLEVBQVksYUFBQUMsQ0FBWSxJQUFnQ2hFLEdBQU0sUUFBVyxHQUFJLENBQ3hGLFVBQVdmLEtBQU04RSxFQUFnQlgsR0FBT25FLENBQUUsR0FBRzZFLEVBQU0sUUFBUTdFLENBQUUsRUFDN0QsVUFBV0EsS0FBTStFLEVBQWtCWixHQUFPbkUsQ0FBRSxHQUFHNkUsRUFBTSxLQUFLN0UsQ0FBRSxDQUM5RCxDQUNBLE1BQU1nRixFQUFpQk4sRUFBV0csRUFBTSxTQUFXLEVBQUlBLEVBQU0sQ0FBQyxJQUFNUCxFQUNwRSxHQUFJQSxHQUFVVSxFQUFnQixDQUM1QixNQUFNQyxFQUFlbEYsRUFBS3FFLEVBQVMsZUFBZSxFQUM1Q2MsRUFBWW5GLEVBQUtxRSxFQUFTLFdBQVcsRUFDckNlLEVBQVloQixHQUFPRyxDQUFNLEVBQUlGLEVBQVVFLEVBQ3ZDYyxFQUFXLENBQUNQLEVBQU0sQ0FBQyxFQUFFLFlBQzNCUixFQUFLLE9BQVMsR0FBR0UsRUFBT2EsRUFBVyxVQUFZLE9BQU8sQ0FBQyxJQUFJbEIsR0FBS1csRUFBTSxDQUFDLENBQUMsQ0FBQyxNQUNyRTNCLElBQWFvQixJQUFXRixJQUFTOUIsR0FBTStCLEVBQUssTUFBTSxFQUNsREQsSUFBWWUsSUFDZHBGLEVBQUtxRSxFQUFTLGdCQUFpQixJQUFJLEVBQ25DckUsRUFBS3FFLEVBQVMsWUFBYSxNQUFNLEVBQ2pDckMsRUFBUSxJQUNScUMsRUFBUSxNQUFLLEdBRWYsV0FBVyxJQUFNLENBQ2YsSUFBSWpDLEVBQ0pwQyxFQUFLcUUsRUFBUyxnQkFBaUJhLENBQVksRUFDM0NsRixFQUFLcUUsRUFBUyxZQUFhZ0IsRUFBVyxPQUFTRixDQUFTLEdBQ3ZEL0MsRUFBbUNnRCxHQUFVLFFBQVUsTUFBZ0JoRCxFQUFJLEtBQUtnRCxDQUFTLEVBQzFGcEYsRUFBS3FFLEVBQVMsWUFBYWMsQ0FBUyxFQUNwQ2IsRUFBSyxPQUFTLEdBQ1ZwQixHQUFvQjFDLEdBQUc4RCxFQUFNLE9BQVEsSUFBTWQsR0FBT2MsQ0FBSSxFQUFHckIsRUFBVSxFQUNsRSxXQUFXTyxHQUFRLElBQUtjLENBQUksQ0FDbkMsRUFBRyxHQUFHLENBQ1IsQ0FDQSxJQUFJZ0IsRUFBTSxFQUNWLE1BQU1DLEVBQVNqQixFQUFLLGNBQWMsUUFBUSxFQUNwQ2tCLEVBQVM1QixHQUFXVSxDQUFJLEVBQUksR0FBSyxHQUFHRSxFQUFPLE1BQU0sS0FDdkQsVUFBV2lCLEtBQVNoQixFQUFPLENBQ3pCLE1BQU1pQixFQUFtQ0gsR0FBTyxRQUFRRCxDQUFHLEVBQ3JESyxFQUFTeEIsR0FBS3NCLENBQUssRUFDbkJyRyxFQUFRcUcsRUFBTSxPQUFTRSxFQUN2QkMsRUFBTyxHQUFHdEIsRUFBSyxNQUFNLEdBQUdxQixDQUFNLEtBQUtILENBQU0sR0FBRyxFQUFFRixDQUFHLElBQUlkLEVBQU8sRUFBRSxJQUFJQyxFQUFNLE1BQU0sR0FDcEZ6RSxFQUFLeUYsRUFBTyxPQUFRLFFBQVEsRUFDNUJ6RixFQUFLeUYsRUFBTyxRQUFTckcsQ0FBSyxFQUMxQlksRUFBS3lGLEVBQU8sV0FBWSxJQUFJLEVBQzVCekYsRUFBS3lGLEVBQU8sYUFBY0csQ0FBSSxFQUMxQkYsRUFBUSxPQUFPLE9BQU9BLEVBQVEsQ0FBRSxZQUFhQyxFQUFRLE1BQUF2RyxFQUFPLEVBQ2pDbUcsR0FBTyxZQUFZLElBQUksT0FBT0ksRUFBUXZHLEVBQU8sR0FBTSxFQUFJLENBQUMsQ0FDekYsQ0FDSW1HLEdBQVF2RixFQUFLdUYsRUFBUSxXQUFZWixFQUFXLEdBQUssSUFBSSxFQUN6RCxVQUFXa0IsSUFBTyxDQUFDLEdBQThCTixHQUFPLFNBQVksQ0FBQSxDQUFFLEVBQUUsTUFBTUQsQ0FBRyxFQUFHTyxFQUFJLE9BQU0sRUFDMUYsQ0FBQ2xCLEdBQVlXLEVBQU0sR0FDckIsUUFBUSxLQUFLLG1EQUFtRCxFQUNsRXRGLEVBQUswRSxFQUFNLHVCQUF3QixHQUFHQyxDQUFRLEVBQUUsRUFDaEQzRSxFQUFLcUUsRUFBUyxPQUFROUMsR0FBTW1ELENBQUksQ0FBQyxFQUNqQzFFLEVBQUtxRSxFQUFTLGFBQWMsR0FBR0MsRUFBSyxNQUFNLEdBQUd0QyxDQUFLLEdBQUdvQixFQUFRLEVBQUUsRUFDM0RzQixFQUFLLGFBQWEsU0FBUyxJQUM3QjFFLEVBQUtxRSxFQUFTLGdCQUFpQjlDLEdBQU1tRCxDQUFJLENBQUMsRUFDMUMxRSxFQUFLMEUsRUFBTSxVQUFXLFFBQVEsR0FFaEMsTUFBTW9CLEVBQU8zQixHQUFLTSxFQUFNLENBQUMsQ0FBQyxFQUN0QnFCLElBQVN4QixFQUFLLE9BQU9iLEdBQWVhLENBQUksRUFDNUNBLEVBQUssTUFBUXdCLEVBQ2JDLEdBQW1CekIsQ0FBSSxFQUN2QjBCLEdBQXFCMUIsQ0FBSSxHQUN4QmxELEVBQU1ULEdBQWlCMkQsQ0FBSSxJQUFNLE1BQWdCbEQsRUFBSSxZQUFXLENBQ25FLEVBQ0kyRSxHQUFzQnpCLEdBQVMsQ0FDakMsSUFBSWxELEVBQ0FrRCxFQUFLLE9BQU90RSxFQUFLc0UsRUFBSyxNQUFPLE9BQVEsUUFBUSxFQUM3Q0EsRUFBSyxRQUFPQSxFQUFLLE1BQU0sT0FBUyxHQUFHbEQsRUFBTWtELEVBQUssVUFBWSxNQUFnQmxELEVBQUksUUFBVXdDLEdBQVdVLENBQUksRUFDN0csRUFDSTBCLEdBQXdCMUIsR0FBUyxDQUNuQyxJQUFJbEQsRUFDSixLQUFNLENBQUUsT0FBQTZFLEVBQVEsUUFBQXJGLEVBQVUsQ0FBQSxFQUFJLE9BQUFzRixDQUFNLEVBQUs1QixFQUN6QyxVQUFXdUIsS0FBT2pGLEVBQVMsQ0FDekIsTUFBTXhCLEdBQVNnQyxFQUFNcEIsRUFBSzZGLEVBQUssT0FBTyxJQUFNLEtBQU96RSxFQUFNK0MsR0FBSzBCLENBQUcsRUFDakU3RixFQUFLNkYsRUFBSyxhQUFjSSxFQUFTLEdBQUdBLENBQU0sR0FBRzlCLEdBQUswQixDQUFHLENBQUMsR0FBSyxJQUFJLEVBQy9EN0YsRUFBSzZGLEVBQUssV0FBWUssRUFBTyxTQUFTOUcsQ0FBSyxFQUFJLEdBQUssSUFBSSxDQUMxRCxDQUNGLEVBQ0lxRSxHQUFrQmEsR0FBUyxDQUM3QixLQUFNLENBQUUsU0FBQUssRUFBVSxRQUFBTixFQUFTLE1BQUFJLENBQUssRUFBS0gsRUFDL0JsRixFQUFRK0UsR0FBS00sRUFBTSxDQUFDLENBQUMsRUFDdkIsQ0FBQ0UsR0FBWU4sR0FBV2pGLElBQVVpRixFQUFRLE9BQzVDN0IsR0FBUzZCLEVBQVNqRixFQUFPQSxFQUFRLGFBQWUsZUFBZSxDQUNuRSxFQUNJK0csR0FBZ0IsQ0FBQzdCLEVBQU04QixFQUFTLEtBQVMsQ0FDM0MsSUFBSWhGLEVBQ0osS0FBTSxDQUFFLE9BQUFvRCxFQUFRLFFBQUE1RCxFQUFVLENBQUEsRUFBSSxVQUFBeUYsRUFBVyxRQUFBaEMsRUFBUyxNQUFBSSxFQUFPLFNBQUFFLENBQVEsRUFBS0wsRUFDaEVsRixJQUFVZ0MsRUFBaUNpRCxHQUFRLFFBQVUsS0FBTyxPQUFTakQsRUFBSSxLQUFJLElBQU8sR0FDNUZrRixFQUFRbEgsRUFBTSxZQUFXLEdBQU0sS0FDckMsSUFBSW1ILEVBQVEsQ0FBQyxHQUFHM0YsQ0FBTyxFQUFFLEtBQ3RCaUYsSUFBUzdGLEVBQUs2RixFQUFLLE9BQU8sR0FBSzFCLEdBQUswQixDQUFHLEdBQUcsS0FBSSxFQUFHLFlBQVcsSUFBT1MsQ0FDeEUsRUFDRSxNQUFNdEYsRUFBUSxDQUFFLFFBQVMsR0FBTSxXQUFZLEdBQU0sT0FBUXVGLENBQUssRUFHOUQsR0FGS2pDLEVBQUssY0FBYyxJQUFJLFlBQVksc0JBQXVCdEQsQ0FBSyxDQUFDLElBQ25FdUYsRUFBUSxDQUFDLEdBQUczRixDQUFPLEVBQUUsS0FBTTRGLEdBQU1BLEVBQUUsUUFBUSxHQUN6Q0osRUFFRixPQURBSixHQUFxQjFCLENBQUksRUFDckJpQyxFQUFjRSxHQUFlbkMsRUFBTWlDLEVBQU8sRUFBSyxFQUMvQ0YsR0FBYWpILEVBQWNxSCxHQUFlbkMsRUFBTSxDQUFFLE1BQUFsRixDQUFLLEVBQUksRUFBSyxHQUNoRSxDQUFDdUYsR0FBWSxDQUFDdkYsR0FBU3FGLEVBQU0sQ0FBQyxFQUFHZ0MsR0FBZW5DLEVBQU1HLEVBQU0sQ0FBQyxDQUFDLEVBQzdEaEIsR0FBZWEsQ0FBSSxFQUNqQi9CLEdBQU1pQyxFQUFPLE9BQU8sR0FFN0IsVUFBV3FCLEtBQU9qRixFQUFTaUYsRUFBSSxTQUFXQSxJQUFRVSxDQUNwRCxFQUNJRSxHQUFpQixDQUFDbkMsRUFBTXdCLEVBQU1ZLEVBQVksS0FBUyxDQUNyRCxLQUFNLENBQUUsUUFBQXJDLEVBQVMsTUFBQUksRUFBTyxTQUFBRSxDQUFRLEVBQUtMLEVBQy9CcUMsRUFBTW5GLEdBQWMsT0FBUXNFLEVBQUssT0FBU0EsRUFBSyxNQUFPLENBQzFELE1BQU9BLEVBQUssS0FDaEIsQ0FBRyxFQUNLTixFQUFTLENBQUMsR0FBR2YsQ0FBSyxFQUFFLEtBQU1tQyxHQUFNQSxFQUFFLFFBQVVkLEVBQUssS0FBSyxFQUN0RDlFLEVBQVEsQ0FBRSxRQUFTLEdBQU0sV0FBWSxHQUFNLE9BQVF3RSxHQUFVbUIsQ0FBRyxFQUV0RSxHQURhbkIsR0FBVSxDQUFDa0IsRUFDZCxPQUFPakQsR0FBZWEsQ0FBSSxFQUNwQyxHQUFJQSxFQUFLLGNBQWMsSUFBSSxZQUFZLHVCQUF3QnRELENBQUssQ0FBQyxFQUFHLENBQ3RFLEdBQUksQ0FBQzJELEVBQVUsVUFBV2MsSUFBUyxDQUFDLEdBQUdoQixDQUFLLEVBQUdnQixFQUFNLE9BQU0sRUFDdkRELEVBQVFBLEVBQU8sT0FBTSxFQUNPbkIsR0FBUSxzQkFBc0IsY0FBZXNDLENBQUcsRUFDaEZyQyxFQUFLLGNBQWMsSUFBSSxZQUFZLHNCQUF1QnRELENBQUssQ0FBQyxDQUNsRSxDQUNGLEVBQ0krQyxHQUFVLENBQUNPLEVBQU0sQ0FBRSxPQUFBWCxLQUFhLENBQzlCQSxhQUFrQixjQUFhVyxFQUFLLE9BQVNYLEdBQ2pEcEIsR0FBSyxDQUNQLEVBQ0lzQixHQUFVUyxHQUFTeEIsR0FBVyxHQUFNLFdBQVcrRCxHQUFXLEVBQUd2QyxDQUFJLEVBQ2pFdUMsR0FBYXZDLEdBQVMsQ0FDeEIsSUFBSWxELEVBQ0EsQ0FBQ2tELEVBQUssUUFBVUEsRUFBSyxVQUFVbEQsRUFBTWtELEVBQUssUUFBVSxLQUFPLE9BQVNsRCxFQUFJLGFBQWEsSUFDcEZrRCxFQUFLLFVBQVU2QixHQUFjN0IsQ0FBSSxFQUN0Q0EsRUFBSyxPQUFTLE9BQ2hCLEVBQ0lSLEdBQVUsQ0FBQ1EsRUFBTXRELElBQVUsQ0FDN0IsS0FBTSxDQUFFLFFBQVM4RixFQUFHLFFBQVNDLEVBQUcsT0FBQXBELENBQU0sRUFBSzNDLEVBQ3JDLENBQUUsTUFBQWdHLEVBQU8sUUFBQTNDLEVBQVMsTUFBQUksQ0FBSyxFQUFLSCxFQUNsQyxHQUE2QjBDLEdBQU0sU0FBU3JELENBQU0sRUFDaEQsT0FBSVUsR0FBUzdCLEdBQVM2QixFQUFTLEdBQUksdUJBQXVCLEVBQ3hCQSxHQUFRLE1BQUssRUFFakQsVUFBV3lCLEtBQVFyQixFQUFPLENBQ3hCLEtBQU0sQ0FBRSxJQUFBd0MsRUFBSyxNQUFBQyxFQUFPLE9BQUFDLEVBQVEsS0FBQUMsQ0FBSSxFQUFLdEIsRUFBSyxzQkFBcUIsRUFDL0QsR0FBSUEsRUFBSyxTQUFTbkMsQ0FBTSxFQUFHLE9BQU84QyxHQUFlbkMsRUFBTXdCLENBQUksRUFDM0QsR0FBSWlCLEdBQUtFLEdBQU9GLEdBQUtJLEdBQVVMLEdBQUtNLEdBQVFOLEdBQUtJLEVBQU8sT0FBT3BCLEVBQUssTUFBSyxDQUMzRSxDQUNJbkMsSUFBV1csR0FBaUNELEdBQVEsTUFBSyxDQUMvRCxFQUNJTCxHQUFVLENBQUNNLEVBQU10RCxJQUFVLENBQzdCLElBQUlJLEVBQ0osS0FBTSxDQUFFLFFBQUFSLEVBQVUsQ0FBQSxFQUFJLFFBQUF5RCxFQUFTLFNBQUFNLENBQVEsRUFBS0wsRUFDdENsRixJQUFVZ0MsRUFBaUNpRCxHQUFRLFFBQVUsS0FBTyxPQUFTakQsRUFBSSxLQUFJLElBQU8sR0FFbEcsR0FEZ0JKLGFBQWlCLFdBQWEsQ0FBQ0EsRUFBTSxXQUFhQSxFQUFNLFlBQWMsd0JBQTBCLENBQUMsQ0FBQzVCLEVBQ3JHLENBQ1g0QixFQUFNLHlCQUF3QixFQUMxQnFELElBQVNBLEVBQVEsTUFBUUMsRUFBSyxRQUNsQyxVQUFXdUIsS0FBT2pGLEVBQ2hCLEdBQUlpRixFQUFJLE9BQVNBLEVBQUksUUFBVXpHLEVBQzdCLE9BQU9xSCxHQUFlbkMsRUFBTXVCLEVBQUtsQixDQUFRLENBQy9DLE1BQVlBLEdBQVV3QixHQUFjN0IsRUFBTSxFQUFLLEVBQy9DeUIsR0FBbUJ6QixDQUFJLENBQ3pCLEVBQ0lMLEdBQVksQ0FBQ0ssRUFBTXRELElBQVUsQ0FDL0IsSUFBSUksRUFDSixHQUFJSixFQUFNLFFBQVVBLEVBQU0sU0FBV0EsRUFBTSxTQUFXQSxFQUFNLFNBQVUsT0FDdEUsS0FBTSxDQUFFLE1BQUFnRyxFQUFPLFFBQUEzQyxFQUFTLE1BQUFJLENBQUssRUFBS0gsRUFDNUIsQ0FBRSxJQUFBbkYsRUFBSyxPQUFBa0ksRUFBUSxPQUFBMUQsQ0FBTSxFQUFLM0MsRUFDMUJzRyxFQUFZakQsR0FBV0EsSUFBWVYsRUFDbkM0RCxFQUFTRCxHQUF5Q2pELEdBQVEsYUFDaEUsSUFBSW1ELEVBQVFGLEVBQVk3QyxFQUFNLE9BQVMsQ0FBQyxHQUFHQSxDQUFLLEVBQUUsUUFBUWQsQ0FBTSxFQU9oRSxHQU5JMkQsR0FBYW5JLElBQVEsT0FBUzZILEdBQVMsQ0FBQ0EsRUFBTSxTQUNoRGhHLEVBQU0sZUFBYyxFQUNwQmdHLEVBQU0sU0FBVyxHQUNqQkEsRUFBTSxNQUFLLEVBQ1h4RyxHQUFHd0csRUFBTyxPQUFRLElBQU1oSCxFQUFLZ0gsRUFBTyxXQUFZLElBQUksRUFBRy9ELEVBQVUsR0FFL0QsR0FBQ3FFLEdBQWF2RyxHQUFTQyxDQUFLLEdBQUt3RyxJQUFVLElBQy9DLElBQUlySSxJQUFRLGNBQWdCLENBQUNtSSxFQUFXRSxHQUFTLFVBQ3hDckksSUFBUSxhQUFlLENBQUNvSSxFQUFRQyxHQUFTLFVBQ3pDckksSUFBUSxTQUFXbUksRUFBVyxDQUNyQyxNQUFNRyxFQUFPekgsRUFBS3FFLEVBQVMsTUFBTSxFQUNqQ3JFLE9BQUFBLEVBQUtxRSxFQUFTLE9BQVEsR0FBRyxFQUN6QixzQkFBc0IsSUFBTXJFLEVBQUtxRSxFQUFTLE9BQVFvRCxDQUFJLENBQUMsRUFDaER0QixHQUFjN0IsQ0FBSSxDQUMzQixVQUFZbkYsSUFBUSxhQUFlQSxJQUFRLFdBQWEsQ0FBQ29JLEVBQVEsQ0FFL0QsR0FEQXZHLEVBQU0sZUFBYyxFQUNoQixDQUFDcUcsR0FBVTVDLEVBQU0rQyxDQUFLLEVBQUcsT0FBT2YsR0FBZW5DLEVBQU1HLEVBQU0rQyxDQUFLLENBQUMsRUFDakVGLElBQVdFLEdBQVMsRUFDMUIsS0FBTyxRQUFPRixHQUF5Q2pELEdBQVEsUUFDL0RyRCxFQUFNLGVBQWMsR0FDbkJJLEVBQU1xRCxFQUFNLEtBQUssSUFBSSxFQUFHK0MsQ0FBSyxDQUFDLEdBQUtuRCxJQUFZLE1BQWdCakQsRUFBSSxNQUFLLEVBQzNFLEVBQ0FTLEdBQWUsT0FBTyxhQUFjMEIsRUFBb0IsRUMzY3hELElBQUk5RCxHQUFhLE9BQU8sT0FBVyxLQUFlLE9BQU8sT0FBTyxTQUFhLEtBQWUsT0FBTyxPQUFPLFVBQWMsSUFDcEhDLEdBQWFELElBQWMsV0FBVyxLQUFLLFVBQVUsU0FBUyxFQUM5REksR0FDSkosSUFDQSxRQUFRLE9BQU9JLEdBQUssVUFBVSxnQkFBa0IsS0FBTyxPQUFTQSxHQUFHLFdBQWEsVUFBVSxRQUFRLEVBQ2xHLElBQUk2SCxHQUFrQixHQUFHaEksR0FBYSxPQUFTLE1BQU0sY0FDakRpSSxHQUFnQiwyQ0FDaEI1SCxHQUFlLE9BQU8sWUFBZ0IsSUFBYyxLQUFNLENBQzlELEVBQUksWUFDSixTQUFTQyxFQUFLQyxFQUFJQyxFQUFNZCxFQUFPLENBQzdCLE9BQUlBLElBQVUsT0FBZWEsRUFBRyxhQUFhQyxDQUFJLEdBQzdDZCxJQUFVLEtBQU1hLEVBQUcsZ0JBQWdCQyxDQUFJLEVBQ2xDRCxFQUFHLGFBQWFDLENBQUksSUFBTWQsR0FBT2EsRUFBRyxhQUFhQyxFQUFNZCxDQUFLLEVBQzlELEtBQ1QsQ0FDQSxJQUFJZSxHQUFTLENBQUNDLEVBQVFDLEVBQVNDLElBQVMsQ0FDdEMsVUFBV0MsS0FBUUQsRUFBSyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQ2xDQSxFQUFLLENBQUMsRUFBSUMsRUFDVixRQUFRLFVBQVUsR0FBR0gsQ0FBTSxlQUFlLEVBQUUsTUFBTUMsRUFBU0MsQ0FBSSxDQUVuRSxFQUNJRSxHQUFLLENBQUNILEtBQVlDLElBQVNILEdBQU8sTUFBT0UsRUFBU0MsQ0FBSSxFQUN0REcsR0FBTSxDQUFDSixLQUFZQyxJQUFTSCxHQUFPLFNBQVVFLEVBQVNDLENBQUksRUFDMURzSCxHQUFjLENBQUN2SCxFQUFTd0gsSUFBUXhILEVBQVEsWUFBY0EsRUFBUSxhQUFhLENBQUUsS0FBTSxNQUFNLENBQUUsRUFBRSxPQUMvRm1CLEdBQWMsTUFBTSxFQUVwQkEsR0FBYyxRQUFTcUcsQ0FBRyxDQUM1QixFQUNJbkgsR0FBNEIsSUFBSSxRQUNoQ0MsR0FBbUIsQ0FBQ04sRUFBU08sSUFBWSxDQUMzQyxHQUFJQSxJQUFZLE9BQVEsT0FBT0YsR0FBVSxJQUFJTCxDQUFPLEVBQ3BELEdBQUksQ0FDRkssR0FBVSxJQUFJTCxDQUFPLEVBQUUsV0FBVSxFQUNqQ0ssR0FBVSxPQUFPTCxDQUFPLENBQzFCLE1BQWUsQ0FDZixDQUNBLEdBQUlPLEVBQVMsQ0FDWCxNQUFNQyxFQUFXLElBQUksaUJBQ2xCQyxHQUFXVCxFQUFRLFlBQVksQ0FBRSxLQUFNLFdBQVksT0FBQVMsQ0FBTSxDQUFFLENBQ2xFLEVBQ0lELEVBQVMsUUFBUVIsRUFBU08sQ0FBTyxFQUNqQ0YsR0FBVSxJQUFJTCxFQUFTUSxDQUFRLENBQ2pDLENBQ0YsRUFDSUUsR0FBWUMsR0FBVSxDQUN4QixNQUFNQyxFQUFVLFFBQVNELElBQVVBLEVBQU0sTUFBUSxLQUFPQSxFQUFNLE1BQVEsU0FDdEUsT0FBSUMsR0FBU0QsRUFBTSxlQUFjLEVBQzdCQyxHQUFXRCxFQUFNLGtCQUFrQixhQUFhQSxFQUFNLE9BQU8sTUFBSyxFQUMvREMsQ0FDVCxFQUNJQyxHQUFXQyxHQUFTLENBQ3RCLElBQUlDLEVBQ0osTUFBTUMsSUFBU0QsRUFBTUQsRUFBSyxjQUFnQixLQUFPLE9BQVNDLEVBQUksS0FBS0QsQ0FBSSxJQUFNQSxFQUFLLGNBQ2xGLE9BQU9FLGFBQWdCLFVBQVlBLGFBQWdCLFdBQWFBLEVBQU8sUUFDekUsRUFDSUMsR0FBSyxFQUNMQyxHQUFTdEIsR0FDTkEsR0FDQUEsRUFBRyxLQUFJQSxFQUFHLEdBQUssSUFBSUEsRUFBRyxTQUFTLFlBQVcsQ0FBRSxJQUFJLEVBQUVxQixJQUFJLFNBQVMsRUFBRSxDQUFDLElBQ2hFckIsRUFBRyxJQUZNLEdBSWR1QixHQUFnQixDQUFDQyxFQUFTMEMsRUFBTXhDLElBQVUsQ0FDNUMsTUFBTTFCLEVBQUssU0FBUyxjQUFjd0IsQ0FBTyxFQUN6QyxPQUFJMEMsSUFBTWxFLEVBQUcsWUFBY2tFLEdBQ3BCbEUsQ0FDVCxFQUNJNEIsR0FBaUIsQ0FDbkIsT0FBUSxDQUFDM0IsRUFBTTRCLElBQWEsQ0FBQ3JDLElBQWMsT0FBTyxlQUFlLElBQUlTLENBQUksR0FBSyxPQUFPLGVBQWUsT0FBT0EsRUFBTTRCLENBQVEsQ0FDM0gsRUFJSWdHLEdBQWlCSCxHQUNqQkksR0FBb0JKLEdBQ3BCSyxHQUFxQkwsR0FDckJNLEdBQWdCLG9IQUtoQkMsR0FBZ0IsZ0JBQ2hCQyxHQUFnQixnQkFDaEJDLEdBQW1CLGNBQWNySSxFQUFhLENBQ2hELGFBQWMsQ0FDWixNQUFLLEVBQ0w2SCxHQUFZLEtBQU1FLEVBQWMsQ0FDbEMsQ0FDQSxJQUFJLFNBQVUsQ0FDWixPQUFPTyxHQUFtQixZQUFhLElBQUksRUFBRSxDQUFDLEdBQUssSUFDckQsQ0FDQSxJQUFJLGVBQWdCLENBQ2xCLE9BQU9DLEdBQWlCLEtBQUssSUFBSSxDQUNuQyxDQUNBLElBQUksY0FBY2QsRUFBTyxDQUN2QmUsR0FBWSxLQUFLLEtBQUtmLENBQUssQ0FBQyxDQUM5QixDQUNBLElBQUksTUFBTyxDQUNULE9BQU9hLEdBQW1CLFFBQVMsSUFBSSxDQUN6QyxDQUNBLElBQUksUUFBUyxDQUNYLE9BQU9BLEdBQW1CLGFBQWMsSUFBSSxDQUM5QyxDQUNGLEVBQ0lHLEdBQXNCLGNBQWN6SSxFQUFhLENBQ25ELGFBQWMsQ0FDWixNQUFLLEVBQ0w2SCxHQUFZLEtBQU1HLEVBQWlCLENBQ3JDLENBQ0EsbUJBQW9CLENBQ2xCL0gsRUFBSyxLQUFNLE9BQVEsU0FBUyxFQUM1QlEsR0FBRyxLQUFNLGdCQUFpQixJQUFJLEVBQzlCRyxHQUFpQixLQUFNLENBQUUsVUFBVyxFQUFJLENBQUUsRUFDdEMsS0FBSyxLQUFLLFFBQVEsS0FBSyxZQUFXLENBQ3hDLENBQ0Esc0JBQXVCLENBQ3JCRixHQUFJLEtBQU0sZ0JBQWlCLElBQUksRUFDL0JFLEdBQWlCLEtBQU0sRUFBSyxDQUM5QixDQUNBLFlBQVlLLEVBQU8sQ0FDakIsR0FBSSxDQUFDQSxHQUFTQSxFQUFNLE9BQVMsV0FBWSxDQUN2QyxNQUFNeUgsRUFBTSxLQUFLLEtBQUssS0FBSyxJQUFJLEtBQUssY0FBZSxDQUFDLENBQUMsRUFDckQsT0FBOEJBLEdBQUksYUFBYU4sR0FBZSxNQUFNLENBQ3RFLENBQ0EsS0FBTSxDQUFFLElBQUFoSixDQUFHLEVBQUs2QixFQUNWMEgsRUFBTyxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQ3BCOUQsRUFBTzhELEVBQUssVUFBV0QsR0FBUUEsRUFBSSxTQUFTekgsRUFBTSxNQUFNLENBQUMsRUFDL0QsSUFBSTZELEVBQU9ELEVBQ1gsR0FBSSxFQUFBNUQsRUFBTSxrQkFBb0I0RCxJQUFTLE1BQ25DNUQsRUFBTSxPQUFTLFNBQVN1SCxHQUFZRyxFQUFLOUQsQ0FBSSxDQUFDLEVBQzlDNUQsRUFBTSxPQUFTLFdBQWEsQ0FBQ0QsR0FBU0MsQ0FBSyxHQUFHLENBQ2hELEdBQUk3QixJQUFRLGFBQWVBLElBQVEsYUFDakMwRixHQUFRRCxFQUFPLEdBQUs4RCxFQUFLLGVBQ2xCdkosSUFBUSxXQUFhQSxJQUFRLFlBQ3BDMEYsR0FBUUQsR0FBUThELEVBQUssUUFBVSxVQUN4QnZKLElBQVEsTUFBTzBGLEVBQU82RCxFQUFLLE9BQVMsVUFDcEN2SixJQUFRLE9BQVEwRixFQUFPLFVBQ3ZCMUYsSUFBUSxNQUFPMEYsRUFBT3lELEdBQWlCSSxDQUFJLE1BQy9DLFFBQ0wsV0FBVyxJQUFNLENBQ2ZBLEVBQUs5RCxDQUFJLEVBQUUsU0FBVyxHQUN0QjhELEVBQUs3RCxDQUFJLEVBQUUsU0FBVyxDQUN4QixDQUFDLEVBQ0cxRixJQUFRLFFBQ1Y2QixFQUFNLGVBQWMsRUFDcEIwSCxFQUFLN0QsQ0FBSSxFQUFFLE1BQUssRUFFcEIsQ0FDRixDQUNBLElBQUksYUFBYyxDQUNoQixPQUFPLEtBQUssUUFBUSxRQUFRLENBQzlCLENBQ0EsSUFBSSxNQUFPLENBQ1QsT0FBTyxLQUFLLGlCQUFpQixPQUFPLENBQ3RDLENBQ0EsSUFBSSxlQUFnQixDQUNsQixPQUFPeUQsR0FBaUIsS0FBSyxJQUFJLENBQ25DLENBQ0EsSUFBSSxjQUFjZCxFQUFPLENBQ3ZCZSxHQUFZLEtBQUssS0FBS2YsQ0FBSyxDQUFDLENBQzlCLENBQ0YsRUFDSW1CLEdBQW1CLEdBQ25CQyxHQUFrQixjQUFjN0ksRUFBYSxDQUUvQyxXQUFXLG9CQUFxQixDQUM5QixNQUFPLENBQUMsS0FBTW9JLEdBQWVELEVBQWEsQ0FDNUMsQ0FDQSxhQUFjLENBQ1osTUFBSyxFQUNMTixHQUFZLEtBQU1LLEVBQWEsQ0FDakMsQ0FDQSxtQkFBb0IsQ0FDbEJqSSxFQUFLLEtBQU0sT0FBUSxLQUFLLEVBQ3hCLEtBQUssU0FBVyxLQUFLLFNBQVcsRUFBSSxFQUN0QyxDQUNBLDBCQUEyQixDQUN6QixHQUFJLENBQUMySSxJQUFvQixLQUFLLFVBQVksS0FBSyxRQUFTLENBQ3REQSxHQUFtQixHQUNuQixNQUFNRCxFQUFPLENBQUMsR0FBRyxLQUFLLFFBQVEsaUJBQWlCLE9BQU8sQ0FBQyxFQUNqREcsRUFBU1IsR0FBbUIsYUFBYyxLQUFLLGFBQWUsSUFBSSxFQUNsRVMsRUFBWUMsR0FBUyxLQUFNRixFQUFPSCxFQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFDdkRJLEdBQVc5SSxFQUFLOEksRUFBV3BCLEdBQWlCbkcsR0FBTSxJQUFJLENBQUMsRUFDM0RtSCxFQUFLLFFBQVEsQ0FBQ0QsRUFBS2pCLElBQVUsQ0FDM0IsTUFBTXdCLEVBQVFELEdBQVNOLEVBQUtJLEVBQU9yQixDQUFLLENBQUMsRUFDekNpQixFQUFJLFNBQVdBLElBQVEsS0FBTyxFQUFJLEdBQ2xDekksRUFBS3lJLEVBQUtOLEdBQWUsR0FBR00sSUFBUSxJQUFJLEVBQUUsRUFDMUN6SSxFQUFLeUksRUFBS1AsR0FBeUNjLEdBQU0sSUFBTyxJQUFJLEVBQ2hFQSxJQUFPQSxFQUFNLE9BQVNBLElBQVVGLEVBQ3RDLENBQUMsRUFDREgsR0FBbUIsRUFDckIsQ0FDRixDQUNBLElBQUksYUFBYyxDQUNoQixPQUFPLEtBQUssUUFBUSxRQUFRLENBQzlCLENBQ0EsSUFBSSxTQUFVLENBQ1osTUFBTU0sRUFBVSxLQUFLLGNBQ3JCLE9BQW1DQSxHQUFRLFdBQWMsWUFBY0EsRUFBVSxJQUNuRixDQUNBLElBQUksVUFBVyxDQUNiLE9BQU9qSixFQUFLLEtBQU1tSSxFQUFhLElBQU0sTUFDdkMsQ0FDQSxJQUFJLFNBQVMvSSxFQUFPLENBQ2xCWSxFQUFLLEtBQU1tSSxHQUFlLEdBQUcsQ0FBQyxDQUFDL0ksQ0FBSyxFQUFFLENBQ3hDLENBRUEsSUFBSSxPQUFRLENBQ1YsTUFBTThKLEVBQVUsS0FBSyxRQUNyQixPQUFPQSxFQUFVLENBQUMsR0FBR0EsRUFBUSxpQkFBaUIsT0FBTyxDQUFDLEVBQUUsUUFBUSxJQUFJLEVBQUksQ0FDMUUsQ0FDQSxJQUFJLE9BQVEsQ0FDVixPQUFPSCxHQUFTLElBQUksQ0FDdEIsQ0FDRixFQUNJSSxHQUF1QixjQUFjcEosRUFBYSxDQUVwRCxXQUFXLG9CQUFxQixDQUM5QixNQUFPLENBQUMsUUFBUSxDQUNsQixDQUNBLGFBQWMsQ0FDWixNQUFLLEVBQ0w2SCxHQUFZLEtBQU1JLEVBQWtCLENBQ3RDLENBQ0EsbUJBQW9CLENBQ2xCaEksRUFBSyxLQUFNLE9BQVEsVUFBVSxFQUM3QixLQUFLLE9BQVNzSSxHQUFpQixLQUFLLElBQUksSUFBTSxHQUM5QyxLQUFLLHlCQUF3QixDQUMvQixDQUNBLDBCQUEyQixDQUN6QixNQUFNYyxFQUFTLEtBQUssT0FDcEJwSixFQUFLLEtBQU0sY0FBZSxHQUFHb0osQ0FBTSxFQUFFLEVBQ3JDcEosRUFBSyxLQUFNLFdBQVlvSixHQUFVQyxHQUFZLEtBQUssVUFBVSxFQUFJLEtBQU8sR0FBRyxDQUM1RSxDQUNBLElBQUksYUFBYyxDQUNoQixPQUFPLEtBQUssUUFBUSxRQUFRLENBQzlCLENBQ0EsSUFBSSxNQUFPLENBQ1QsTUFBTXhCLEVBQU0sU0FBU0ssRUFBYSxLQUFLLEtBQUssRUFBRSxLQUM5QyxPQUFPaEgsR0FBUSxJQUFJLEVBQUUsaUJBQWlCMkcsQ0FBRyxDQUMzQyxDQUNGLEVBQ0lRLEdBQXFCLENBQUNuRSxFQUFLSSxJQUFTQSxFQUFLLGlCQUFpQixHQUFHSixDQUFHLDBCQUEwQkEsQ0FBRyxHQUFHLEVBQ2hHNkUsR0FBVyxDQUFDTixFQUFLTyxJQUFVLENBQzdCLE1BQU0vRyxFQUFNakMsRUFBS3lJLEVBQUtQLEVBQWEsR0FBSzNHLEdBQU15SCxDQUFLLEVBQzdDL0ksRUFBS2lCLEdBQVF1SCxDQUFHLEVBQUUsZUFBZXhHLENBQUcsRUFDMUMsT0FBOEJoQyxHQUFHLFdBQWMsYUFBZUEsRUFBSyxJQUNyRSxFQUNJcUksR0FBb0JJLEdBQVMsQ0FBQyxHQUFHQSxDQUFJLEVBQUUsVUFBV0QsR0FBUXpJLEVBQUt5SSxFQUFLTixFQUFhLElBQU0sTUFBTSxFQUM3RkksR0FBZUUsR0FBUUEsR0FBT3pJLEVBQUt5SSxFQUFLLGVBQWUsSUFBTSxRQUFVekksRUFBS3lJLEVBQUssZ0JBQWlCLE1BQU0sRUFDeEdZLEdBQWVwSixHQUFPQSxhQUFjLFNBQVcsQ0FBQ0EsRUFBRyxRQUFRLDJCQUEyQixHQUFLQSxFQUFHLFFBQ2hHLGlIQUNGLEVBQ0E0QixHQUFlLE9BQU8sU0FBVXVHLEVBQWdCLEVBQ2hEdkcsR0FBZSxPQUFPLFlBQWEyRyxFQUFtQixFQUN0RDNHLEdBQWUsT0FBTyxRQUFTK0csRUFBZSxFQUM5Qy9HLEdBQWUsT0FBTyxhQUFjc0gsRUFBb0Isa3hIQ3hQbERHLEdBQU0sS0FBSyxJQUNYQyxFQUFNLEtBQUssSUFDWEMsR0FBUSxLQUFLLE1BQ2JDLEdBQVEsS0FBSyxNQUNiQyxFQUFlQyxJQUFNLENBQ3pCLEVBQUdBLEVBQ0gsRUFBR0EsQ0FDTCxHQUNNQyxHQUFrQixDQUN0QixLQUFNLFFBQ04sTUFBTyxPQUNQLE9BQVEsTUFDUixJQUFLLFFBQ1AsRUFDTUMsR0FBdUIsQ0FDM0IsTUFBTyxNQUNQLElBQUssT0FDUCxFQUNBLFNBQVNDLEdBQU1DLEVBQU8zSyxFQUFPNEssRUFBSyxDQUNoQyxPQUFPVCxFQUFJUSxFQUFPVCxHQUFJbEssRUFBTzRLLENBQUcsQ0FBQyxDQUNuQyxDQUNBLFNBQVNDLEdBQVM3SyxFQUFPOEssRUFBTyxDQUM5QixPQUFPLE9BQU85SyxHQUFVLFdBQWFBLEVBQU04SyxDQUFLLEVBQUk5SyxDQUN0RCxDQUNBLFNBQVMrSyxHQUFRQyxFQUFXLENBQzFCLE9BQU9BLEVBQVUsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUMvQixDQUNBLFNBQVNDLEdBQWFELEVBQVcsQ0FDL0IsT0FBT0EsRUFBVSxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQy9CLENBQ0EsU0FBU0UsR0FBZ0JDLEVBQU0sQ0FDN0IsT0FBT0EsSUFBUyxJQUFNLElBQU0sR0FDOUIsQ0FDQSxTQUFTQyxHQUFjRCxFQUFNLENBQzNCLE9BQU9BLElBQVMsSUFBTSxTQUFXLE9BQ25DLENBQ0EsTUFBTUUsR0FBMEIsSUFBSSxJQUFJLENBQUMsTUFBTyxRQUFRLENBQUMsRUFDekQsU0FBU0MsR0FBWU4sRUFBVyxDQUM5QixPQUFPSyxHQUFXLElBQUlOLEdBQVFDLENBQVMsQ0FBQyxFQUFJLElBQU0sR0FDcEQsQ0FDQSxTQUFTTyxHQUFpQlAsRUFBVyxDQUNuQyxPQUFPRSxHQUFnQkksR0FBWU4sQ0FBUyxDQUFDLENBQy9DLENBQ0EsU0FBU1EsR0FBa0JSLEVBQVdTLEVBQU9DLEVBQUssQ0FDNUNBLElBQVEsU0FDVkEsRUFBTSxJQUVSLE1BQU1DLEVBQVlWLEdBQWFELENBQVMsRUFDbENZLEVBQWdCTCxHQUFpQlAsQ0FBUyxFQUMxQ2EsRUFBU1QsR0FBY1EsQ0FBYSxFQUMxQyxJQUFJRSxFQUFvQkYsSUFBa0IsSUFBTUQsS0FBZUQsRUFBTSxNQUFRLFNBQVcsUUFBVSxPQUFTQyxJQUFjLFFBQVUsU0FBVyxNQUM5SSxPQUFJRixFQUFNLFVBQVVJLENBQU0sRUFBSUosRUFBTSxTQUFTSSxDQUFNLElBQ2pEQyxFQUFvQkMsR0FBcUJELENBQWlCLEdBRXJELENBQUNBLEVBQW1CQyxHQUFxQkQsQ0FBaUIsQ0FBQyxDQUNwRSxDQUNBLFNBQVNFLEdBQXNCaEIsRUFBVyxDQUN4QyxNQUFNaUIsRUFBb0JGLEdBQXFCZixDQUFTLEVBQ3hELE1BQU8sQ0FBQ2tCLEdBQThCbEIsQ0FBUyxFQUFHaUIsRUFBbUJDLEdBQThCRCxDQUFpQixDQUFDLENBQ3ZILENBQ0EsU0FBU0MsR0FBOEJsQixFQUFXLENBQ2hELE9BQU9BLEVBQVUsUUFBUSxhQUFjVyxHQUFhbEIsR0FBcUJrQixDQUFTLENBQUMsQ0FDckYsQ0FDQSxNQUFNUSxHQUFjLENBQUMsT0FBUSxPQUFPLEVBQzlCQyxHQUFjLENBQUMsUUFBUyxNQUFNLEVBQzlCQyxHQUFjLENBQUMsTUFBTyxRQUFRLEVBQzlCQyxHQUFjLENBQUMsU0FBVSxLQUFLLEVBQ3BDLFNBQVNDLEdBQVlDLEVBQU1DLEVBQVNmLEVBQUssQ0FDdkMsT0FBUWMsRUFBSSxDQUNWLElBQUssTUFDTCxJQUFLLFNBQ0gsT0FBSWQsRUFBWWUsRUFBVUwsR0FBY0QsR0FDakNNLEVBQVVOLEdBQWNDLEdBQ2pDLElBQUssT0FDTCxJQUFLLFFBQ0gsT0FBT0ssRUFBVUosR0FBY0MsR0FDakMsUUFDRSxNQUFPLENBQUEsQ0FDYixDQUNBLENBQ0EsU0FBU0ksR0FBMEIxQixFQUFXMkIsRUFBZUMsRUFBV2xCLEVBQUssQ0FDM0UsTUFBTUMsRUFBWVYsR0FBYUQsQ0FBUyxFQUN4QyxJQUFJMUYsRUFBT2lILEdBQVl4QixHQUFRQyxDQUFTLEVBQUc0QixJQUFjLFFBQVNsQixDQUFHLEVBQ3JFLE9BQUlDLElBQ0ZyRyxFQUFPQSxFQUFLLElBQUlrSCxHQUFRQSxFQUFPLElBQU1iLENBQVMsRUFDMUNnQixJQUNGckgsRUFBT0EsRUFBSyxPQUFPQSxFQUFLLElBQUk0RyxFQUE2QixDQUFDLElBR3ZENUcsQ0FDVCxDQUNBLFNBQVN5RyxHQUFxQmYsRUFBVyxDQUN2QyxPQUFPQSxFQUFVLFFBQVEseUJBQTBCd0IsR0FBUWhDLEdBQWdCZ0MsQ0FBSSxDQUFDLENBQ2xGLENBQ0EsU0FBU0ssR0FBb0JDLEVBQVMsQ0FDcEMsTUFBTyxDQUNMLElBQUssRUFDTCxNQUFPLEVBQ1AsT0FBUSxFQUNSLEtBQU0sRUFDTixHQUFHQSxDQUNQLENBQ0EsQ0FDQSxTQUFTQyxHQUFpQkQsRUFBUyxDQUNqQyxPQUFPLE9BQU9BLEdBQVksU0FBV0QsR0FBb0JDLENBQU8sRUFBSSxDQUNsRSxJQUFLQSxFQUNMLE1BQU9BLEVBQ1AsT0FBUUEsRUFDUixLQUFNQSxDQUNWLENBQ0EsQ0FDQSxTQUFTRSxHQUFpQkMsRUFBTSxDQUM5QixLQUFNLENBQ0osRUFBQXZGLEVBQ0EsRUFBQUMsRUFDQSxNQUFBdUYsRUFDQSxPQUFBQyxDQUNKLEVBQU1GLEVBQ0osTUFBTyxDQUNMLE1BQUFDLEVBQ0EsT0FBQUMsRUFDQSxJQUFLeEYsRUFDTCxLQUFNRCxFQUNOLE1BQU9BLEVBQUl3RixFQUNYLE9BQVF2RixFQUFJd0YsRUFDWixFQUFBekYsRUFDQSxFQUFBQyxDQUNKLENBQ0EsQ0NySUEsU0FBU3lGLEdBQTJCQyxFQUFNckMsRUFBV1UsRUFBSyxDQUN4RCxHQUFJLENBQ0YsVUFBQTRCLEVBQ0EsU0FBQUMsQ0FDSixFQUFNRixFQUNKLE1BQU1HLEVBQVdsQyxHQUFZTixDQUFTLEVBQ2hDWSxFQUFnQkwsR0FBaUJQLENBQVMsRUFDMUN5QyxFQUFjckMsR0FBY1EsQ0FBYSxFQUN6Q1ksRUFBT3pCLEdBQVFDLENBQVMsRUFDeEIwQyxFQUFhRixJQUFhLElBQzFCRyxFQUFVTCxFQUFVLEVBQUlBLEVBQVUsTUFBUSxFQUFJQyxFQUFTLE1BQVEsRUFDL0RLLEVBQVVOLEVBQVUsRUFBSUEsRUFBVSxPQUFTLEVBQUlDLEVBQVMsT0FBUyxFQUNqRU0sRUFBY1AsRUFBVUcsQ0FBVyxFQUFJLEVBQUlGLEVBQVNFLENBQVcsRUFBSSxFQUN6RSxJQUFJSyxFQUNKLE9BQVF0QixFQUFJLENBQ1YsSUFBSyxNQUNIc0IsRUFBUyxDQUNQLEVBQUdILEVBQ0gsRUFBR0wsRUFBVSxFQUFJQyxFQUFTLE1BQ2xDLEVBQ00sTUFDRixJQUFLLFNBQ0hPLEVBQVMsQ0FDUCxFQUFHSCxFQUNILEVBQUdMLEVBQVUsRUFBSUEsRUFBVSxNQUNuQyxFQUNNLE1BQ0YsSUFBSyxRQUNIUSxFQUFTLENBQ1AsRUFBR1IsRUFBVSxFQUFJQSxFQUFVLE1BQzNCLEVBQUdNLENBQ1gsRUFDTSxNQUNGLElBQUssT0FDSEUsRUFBUyxDQUNQLEVBQUdSLEVBQVUsRUFBSUMsRUFBUyxNQUMxQixFQUFHSyxDQUNYLEVBQ00sTUFDRixRQUNFRSxFQUFTLENBQ1AsRUFBR1IsRUFBVSxFQUNiLEVBQUdBLEVBQVUsQ0FDckIsQ0FDQSxDQUNFLE9BQVFyQyxHQUFhRCxDQUFTLEVBQUMsQ0FDN0IsSUFBSyxRQUNIOEMsRUFBT2xDLENBQWEsR0FBS2lDLEdBQWVuQyxHQUFPZ0MsRUFBYSxHQUFLLEdBQ2pFLE1BQ0YsSUFBSyxNQUNISSxFQUFPbEMsQ0FBYSxHQUFLaUMsR0FBZW5DLEdBQU9nQyxFQUFhLEdBQUssR0FDakUsS0FDTixDQUNFLE9BQU9JLENBQ1QsQ0FTQSxNQUFNQyxHQUFrQixNQUFPVCxFQUFXQyxFQUFVUyxJQUFXLENBQzdELEtBQU0sQ0FDSixVQUFBaEQsRUFBWSxTQUNaLFNBQUFpRCxFQUFXLFdBQ1gsV0FBQUMsRUFBYSxDQUFBLEVBQ2IsU0FBQUMsQ0FDSixFQUFNSCxFQUNFSSxFQUFrQkYsRUFBVyxPQUFPLE9BQU8sRUFDM0N4QyxFQUFNLE1BQU95QyxFQUFTLE9BQVMsS0FBTyxPQUFTQSxFQUFTLE1BQU1aLENBQVEsR0FDNUUsSUFBSTlCLEVBQVEsTUFBTTBDLEVBQVMsZ0JBQWdCLENBQ3pDLFVBQUFiLEVBQ0EsU0FBQUMsRUFDQSxTQUFBVSxDQUNKLENBQUcsRUFDRyxDQUNGLEVBQUF2RyxFQUNBLEVBQUFDLENBQ0osRUFBTXlGLEdBQTJCM0IsRUFBT1QsRUFBV1UsQ0FBRyxFQUNoRDJDLEVBQW9CckQsRUFDcEJzRCxFQUFpQixDQUFBLEVBQ2pCQyxFQUFhLEVBQ2pCLFFBQVMvRyxFQUFJLEVBQUdBLEVBQUk0RyxFQUFnQixPQUFRNUcsSUFBSyxDQUMvQyxLQUFNLENBQ0osS0FBQTFHLEVBQ0EsR0FBQTBOLENBQ04sRUFBUUosRUFBZ0I1RyxDQUFDLEVBQ2YsQ0FDSixFQUFHaUgsRUFDSCxFQUFHQyxFQUNILEtBQUFwTCxFQUNBLE1BQUFxTCxDQUNOLEVBQVEsTUFBTUgsRUFBRyxDQUNYLEVBQUE5RyxFQUNBLEVBQUFDLEVBQ0EsaUJBQWtCcUQsRUFDbEIsVUFBV3FELEVBQ1gsU0FBQUosRUFDQSxlQUFBSyxFQUNBLE1BQUE3QyxFQUNBLFNBQUEwQyxFQUNBLFNBQVUsQ0FDUixVQUFBYixFQUNBLFNBQUFDLENBQ1IsQ0FDQSxDQUFLLEVBQ0Q3RixFQUFJK0csR0FBd0IvRyxFQUM1QkMsRUFBSStHLEdBQXdCL0csRUFDNUIyRyxFQUFpQixDQUNmLEdBQUdBLEVBQ0gsQ0FBQ3hOLENBQUksRUFBRyxDQUNOLEdBQUd3TixFQUFleE4sQ0FBSSxFQUN0QixHQUFHd0MsQ0FDWCxDQUNBLEVBQ1FxTCxHQUFTSixHQUFjLEtBQ3pCQSxJQUNJLE9BQU9JLEdBQVUsV0FDZkEsRUFBTSxZQUNSTixFQUFvQk0sRUFBTSxXQUV4QkEsRUFBTSxRQUNSbEQsRUFBUWtELEVBQU0sUUFBVSxHQUFPLE1BQU1SLEVBQVMsZ0JBQWdCLENBQzVELFVBQUFiLEVBQ0EsU0FBQUMsRUFDQSxTQUFBVSxDQUNaLENBQVcsRUFBSVUsRUFBTSxPQUVaLENBQ0MsRUFBQWpILEVBQ0EsRUFBQUMsQ0FDVixFQUFZeUYsR0FBMkIzQixFQUFPNEMsRUFBbUIzQyxDQUFHLEdBRTlEbEUsRUFBSSxHQUVSLENBQ0EsTUFBTyxDQUNMLEVBQUFFLEVBQ0EsRUFBQUMsRUFDQSxVQUFXMEcsRUFDWCxTQUFBSixFQUNBLGVBQUFLLENBQ0osQ0FDQSxFQVVBLGVBQWVNLEdBQWVDLEVBQU9yTixFQUFTLENBQzVDLElBQUlzTixFQUNBdE4sSUFBWSxTQUNkQSxFQUFVLENBQUEsR0FFWixLQUFNLENBQ0osRUFBQWtHLEVBQ0EsRUFBQUMsRUFDQSxTQUFBd0csRUFDQSxNQUFBMUMsRUFDQSxTQUFBc0QsRUFDQSxTQUFBZCxDQUNKLEVBQU1ZLEVBQ0UsQ0FDSixTQUFBRyxFQUFXLG9CQUNYLGFBQUFDLEVBQWUsV0FDZixlQUFBQyxFQUFpQixXQUNqQixZQUFBQyxFQUFjLEdBQ2QsUUFBQXJDLEVBQVUsQ0FDZCxFQUFNakMsR0FBU3JKLEVBQVNxTixDQUFLLEVBQ3JCTyxFQUFnQnJDLEdBQWlCRCxDQUFPLEVBRXhDN0wsRUFBVThOLEVBQVNJLEVBRE5ELElBQW1CLFdBQWEsWUFBYyxXQUNiQSxDQUFjLEVBQzVERyxFQUFxQnJDLEdBQWlCLE1BQU1tQixFQUFTLGdCQUFnQixDQUN6RSxTQUFXVyxFQUF3QixNQUFPWCxFQUFTLFdBQWEsS0FBTyxPQUFTQSxFQUFTLFVBQVVsTixDQUFPLEtBQU8sTUFBTzZOLEVBQWdDN04sRUFBVUEsRUFBUSxnQkFBbUIsTUFBT2tOLEVBQVMsb0JBQXNCLEtBQU8sT0FBU0EsRUFBUyxtQkFBbUJZLEVBQVMsUUFBUSxHQUNoUyxTQUFBQyxFQUNBLGFBQUFDLEVBQ0EsU0FBQWhCLENBQ0osQ0FBRyxDQUFDLEVBQ0loQixFQUFPaUMsSUFBbUIsV0FBYSxDQUMzQyxFQUFBeEgsRUFDQSxFQUFBQyxFQUNBLE1BQU84RCxFQUFNLFNBQVMsTUFDdEIsT0FBUUEsRUFBTSxTQUFTLE1BQzNCLEVBQU1BLEVBQU0sVUFDSjZELEVBQWUsTUFBT25CLEVBQVMsaUJBQW1CLEtBQU8sT0FBU0EsRUFBUyxnQkFBZ0JZLEVBQVMsUUFBUSxHQUM1R1EsRUFBZSxNQUFPcEIsRUFBUyxXQUFhLEtBQU8sT0FBU0EsRUFBUyxVQUFVbUIsQ0FBWSxHQUFPLE1BQU9uQixFQUFTLFVBQVksS0FBTyxPQUFTQSxFQUFTLFNBQVNtQixDQUFZLElBQU8sQ0FDdkwsRUFBRyxFQUNILEVBQUcsQ0FDUCxFQUFNLENBQ0YsRUFBRyxFQUNILEVBQUcsQ0FDUCxFQUNRRSxFQUFvQnhDLEdBQWlCbUIsRUFBUyxzREFBd0QsTUFBTUEsRUFBUyxzREFBc0QsQ0FDL0ssU0FBQVksRUFDQSxLQUFBOUIsRUFDQSxhQUFBcUMsRUFDQSxTQUFBckIsQ0FDSixDQUFHLEVBQUloQixDQUFJLEVBQ1QsTUFBTyxDQUNMLEtBQU1vQyxFQUFtQixJQUFNRyxFQUFrQixJQUFNSixFQUFjLEtBQU9HLEVBQVksRUFDeEYsUUFBU0MsRUFBa0IsT0FBU0gsRUFBbUIsT0FBU0QsRUFBYyxRQUFVRyxFQUFZLEVBQ3BHLE1BQU9GLEVBQW1CLEtBQU9HLEVBQWtCLEtBQU9KLEVBQWMsTUFBUUcsRUFBWSxFQUM1RixPQUFRQyxFQUFrQixNQUFRSCxFQUFtQixNQUFRRCxFQUFjLE9BQVNHLEVBQVksQ0FDcEcsQ0FDQSxDQWlNQSxNQUFNRSxHQUFPLFNBQVVqTyxFQUFTLENBQzlCLE9BQUlBLElBQVksU0FDZEEsRUFBVSxDQUFBLEdBRUwsQ0FDTCxLQUFNLE9BQ04sUUFBQUEsRUFDQSxNQUFNLEdBQUdxTixFQUFPLENBQ2QsSUFBSWEsRUFBdUJDLEVBQzNCLEtBQU0sQ0FDSixVQUFBM0UsRUFDQSxlQUFBc0QsRUFDQSxNQUFBN0MsRUFDQSxpQkFBQW1FLEVBQ0EsU0FBQXpCLEVBQ0EsU0FBQVksQ0FDUixFQUFVRixFQUNFLENBQ0osU0FBVWdCLEVBQWdCLEdBQzFCLFVBQVdDLEVBQWlCLEdBQzVCLG1CQUFvQkMsRUFDcEIsaUJBQUFDLEVBQW1CLFVBQ25CLDBCQUFBQyxFQUE0QixPQUM1QixjQUFBdEQsRUFBZ0IsR0FDaEIsR0FBR3VELENBQ1gsRUFBVXJGLEdBQVNySixFQUFTcU4sQ0FBSyxFQU0zQixJQUFLYSxFQUF3QnBCLEVBQWUsUUFBVSxNQUFRb0IsRUFBc0IsZ0JBQ2xGLE1BQU8sQ0FBQSxFQUVULE1BQU1sRCxFQUFPekIsR0FBUUMsQ0FBUyxFQUN4Qm1GLEVBQWtCN0UsR0FBWXNFLENBQWdCLEVBQzlDUSxFQUFrQnJGLEdBQVE2RSxDQUFnQixJQUFNQSxFQUNoRGxFLEVBQU0sTUFBT3lDLEVBQVMsT0FBUyxLQUFPLE9BQVNBLEVBQVMsTUFBTVksRUFBUyxRQUFRLEdBQy9Fc0IsRUFBcUJOLElBQWdDSyxHQUFtQixDQUFDekQsRUFBZ0IsQ0FBQ1osR0FBcUI2RCxDQUFnQixDQUFDLEVBQUk1RCxHQUFzQjRELENBQWdCLEdBQzFLVSxFQUErQkwsSUFBOEIsT0FDL0QsQ0FBQ0YsR0FBK0JPLEdBQ2xDRCxFQUFtQixLQUFLLEdBQUczRCxHQUEwQmtELEVBQWtCakQsRUFBZXNELEVBQTJCdkUsQ0FBRyxDQUFDLEVBRXZILE1BQU02RSxFQUFhLENBQUNYLEVBQWtCLEdBQUdTLENBQWtCLEVBQ3JERyxFQUFXLE1BQU01QixHQUFlQyxFQUFPcUIsQ0FBcUIsRUFDNURPLEVBQVksQ0FBQSxFQUNsQixJQUFJQyxJQUFrQmYsRUFBdUJyQixFQUFlLE9BQVMsS0FBTyxPQUFTcUIsRUFBcUIsWUFBYyxDQUFBLEVBSXhILEdBSElFLEdBQ0ZZLEVBQVUsS0FBS0QsRUFBU2hFLENBQUksQ0FBQyxFQUUzQnNELEVBQWdCLENBQ2xCLE1BQU1hLEVBQVFuRixHQUFrQlIsRUFBV1MsRUFBT0MsQ0FBRyxFQUNyRCtFLEVBQVUsS0FBS0QsRUFBU0csRUFBTSxDQUFDLENBQUMsRUFBR0gsRUFBU0csRUFBTSxDQUFDLENBQUMsQ0FBQyxDQUN2RCxDQU9BLEdBTkFELEVBQWdCLENBQUMsR0FBR0EsRUFBZSxDQUNqQyxVQUFBMUYsRUFDQSxVQUFBeUYsQ0FDUixDQUFPLEVBR0csQ0FBQ0EsRUFBVSxNQUFNakUsR0FBUUEsR0FBUSxDQUFDLEVBQUcsQ0FDdkMsSUFBSW9FLEVBQXVCQyxFQUMzQixNQUFNQyxLQUFlRixFQUF3QnRDLEVBQWUsT0FBUyxLQUFPLE9BQVNzQyxFQUFzQixRQUFVLEdBQUssRUFDcEhHLEdBQWdCUixFQUFXTyxDQUFTLEVBQzFDLEdBQUlDLEtBRUUsRUFENEJqQixJQUFtQixZQUFjSyxJQUFvQjdFLEdBQVl5RixFQUFhLEVBQUksS0FJbEhMLEVBQWMsTUFBTU0sR0FBSzFGLEdBQVkwRixFQUFFLFNBQVMsSUFBTWIsRUFBa0JhLEVBQUUsVUFBVSxDQUFDLEVBQUksRUFBSSxFQUFJLEdBRS9GLE1BQU8sQ0FDTCxLQUFNLENBQ0osTUFBT0YsRUFDUCxVQUFXSixDQUMzQixFQUNjLE1BQU8sQ0FDTCxVQUFXSyxFQUMzQixDQUNBLEVBTVEsSUFBSUUsSUFBa0JKLEVBQXdCSCxFQUFjLE9BQU9NLEdBQUtBLEVBQUUsVUFBVSxDQUFDLEdBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQzlRLEVBQUdDLElBQU1ELEVBQUUsVUFBVSxDQUFDLEVBQUlDLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQU0sS0FBTyxPQUFTMFEsRUFBc0IsVUFHMUwsR0FBSSxDQUFDSSxHQUNILE9BQVFqQixFQUFnQixDQUN0QixJQUFLLFVBQ0gsQ0FDRSxJQUFJa0IsR0FDSixNQUFNbEcsR0FBYWtHLEdBQXlCUixFQUFjLE9BQU9NLEdBQUssQ0FDcEUsR0FBSVYsRUFBOEIsQ0FDaEMsTUFBTWEsR0FBa0I3RixHQUFZMEYsRUFBRSxTQUFTLEVBQy9DLE9BQU9HLEtBQW9CaEIsR0FHM0JnQixLQUFvQixHQUN0QixDQUNBLE1BQU8sRUFDVCxDQUFDLEVBQUUsSUFBSUgsR0FBSyxDQUFDQSxFQUFFLFVBQVdBLEVBQUUsVUFBVSxPQUFPUixJQUFZQSxHQUFXLENBQUMsRUFBRSxPQUFPLENBQUMxTixHQUFLME4sS0FBYTFOLEdBQU0wTixHQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDdFEsRUFBR0MsS0FBTUQsRUFBRSxDQUFDLEVBQUlDLEdBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFNLEtBQU8sT0FBUytRLEdBQXVCLENBQUMsRUFDN0xsRyxJQUNGaUcsR0FBaUJqRyxHQUVuQixLQUNGLENBQ0YsSUFBSyxtQkFDSGlHLEdBQWlCckIsRUFDakIsS0FDZCxDQUVRLEdBQUk1RSxJQUFjaUcsR0FDaEIsTUFBTyxDQUNMLE1BQU8sQ0FDTCxVQUFXQSxFQUN6QixDQUNBLENBRU0sQ0FDQSxNQUFPLENBQUEsQ0FDVCxDQUNKLENBQ0EsRUFxU01HLEdBQVEsU0FBVTVQLEVBQVMsQ0FDL0IsT0FBSUEsSUFBWSxTQUNkQSxFQUFVLENBQUEsR0FFTCxDQUNMLEtBQU0sUUFDTixRQUFBQSxFQUNBLE1BQU0sR0FBR3FOLEVBQU8sQ0FDZCxLQUFNLENBQ0osRUFBQW5ILEVBQ0EsRUFBQUMsRUFDQSxVQUFBcUQsQ0FDUixFQUFVNkQsRUFDRSxDQUNKLFNBQVVnQixFQUFnQixHQUMxQixVQUFXQyxFQUFpQixHQUM1QixRQUFBdUIsRUFBVSxDQUNSLEdBQUloRSxHQUFRLENBQ1YsR0FBSSxDQUNGLEVBQUEzRixFQUNBLEVBQUFDLENBQ2QsRUFBZ0IwRixFQUNKLE1BQU8sQ0FDTCxFQUFBM0YsRUFDQSxFQUFBQyxDQUNkLENBQ1UsQ0FDVixFQUNRLEdBQUd1SSxDQUNYLEVBQVVyRixHQUFTckosRUFBU3FOLENBQUssRUFDckJmLEVBQVMsQ0FDYixFQUFBcEcsRUFDQSxFQUFBQyxDQUNSLEVBQ1k2SSxFQUFXLE1BQU01QixHQUFlQyxFQUFPcUIsQ0FBcUIsRUFDNURvQixFQUFZaEcsR0FBWVAsR0FBUUMsQ0FBUyxDQUFDLEVBQzFDdUcsRUFBV3JHLEdBQWdCb0csQ0FBUyxFQUMxQyxJQUFJRSxFQUFnQjFELEVBQU95RCxDQUFRLEVBQy9CRSxFQUFpQjNELEVBQU93RCxDQUFTLEVBQ3JDLEdBQUl6QixFQUFlLENBQ2pCLE1BQU02QixFQUFVSCxJQUFhLElBQU0sTUFBUSxPQUNyQ0ksRUFBVUosSUFBYSxJQUFNLFNBQVcsUUFDeENySCxFQUFNc0gsRUFBZ0JoQixFQUFTa0IsQ0FBTyxFQUN0Q3ZILEVBQU1xSCxFQUFnQmhCLEVBQVNtQixDQUFPLEVBQzVDSCxFQUFnQjlHLEdBQU1SLEVBQUtzSCxFQUFlckgsQ0FBRyxDQUMvQyxDQUNBLEdBQUkyRixFQUFnQixDQUNsQixNQUFNNEIsRUFBVUosSUFBYyxJQUFNLE1BQVEsT0FDdENLLEVBQVVMLElBQWMsSUFBTSxTQUFXLFFBQ3pDcEgsRUFBTXVILEVBQWlCakIsRUFBU2tCLENBQU8sRUFDdkN2SCxFQUFNc0gsRUFBaUJqQixFQUFTbUIsQ0FBTyxFQUM3Q0YsRUFBaUIvRyxHQUFNUixFQUFLdUgsRUFBZ0J0SCxDQUFHLENBQ2pELENBQ0EsTUFBTXlILEVBQWdCUCxFQUFRLEdBQUcsQ0FDL0IsR0FBR3hDLEVBQ0gsQ0FBQzBDLENBQVEsRUFBR0MsRUFDWixDQUFDRixDQUFTLEVBQUdHLENBQ3JCLENBQU8sRUFDRCxNQUFPLENBQ0wsR0FBR0csRUFDSCxLQUFNLENBQ0osRUFBR0EsRUFBYyxFQUFJbEssRUFDckIsRUFBR2tLLEVBQWMsRUFBSWpLLEVBQ3JCLFFBQVMsQ0FDUCxDQUFDNEosQ0FBUSxFQUFHMUIsRUFDWixDQUFDeUIsQ0FBUyxFQUFHeEIsQ0FDekIsQ0FDQSxDQUNBLENBQ0ksQ0FDSixDQUNBLEVBNEVNK0IsR0FBTyxTQUFVclEsRUFBUyxDQUM5QixPQUFJQSxJQUFZLFNBQ2RBLEVBQVUsQ0FBQSxHQUVMLENBQ0wsS0FBTSxPQUNOLFFBQUFBLEVBQ0EsTUFBTSxHQUFHcU4sRUFBTyxDQUNkLElBQUlpRCxFQUF1QkMsRUFDM0IsS0FBTSxDQUNKLFVBQUEvRyxFQUNBLE1BQUFTLEVBQ0EsU0FBQTBDLEVBQ0EsU0FBQVksQ0FDUixFQUFVRixFQUNFLENBQ0osTUFBQW1ELEVBQVEsSUFBTSxDQUFDLEVBQ2YsR0FBRzlCLENBQ1gsRUFBVXJGLEdBQVNySixFQUFTcU4sQ0FBSyxFQUNyQjJCLEVBQVcsTUFBTTVCLEdBQWVDLEVBQU9xQixDQUFxQixFQUM1RDFELEVBQU96QixHQUFRQyxDQUFTLEVBQ3hCVyxFQUFZVixHQUFhRCxDQUFTLEVBQ2xDaUgsRUFBVTNHLEdBQVlOLENBQVMsSUFBTSxJQUNyQyxDQUNKLE1BQUFrQyxFQUNBLE9BQUFDLENBQ1IsRUFBVTFCLEVBQU0sU0FDVixJQUFJeUcsRUFDQUMsRUFDQTNGLElBQVMsT0FBU0EsSUFBUyxVQUM3QjBGLEVBQWExRixFQUNiMkYsRUFBWXhHLEtBQWdCLE1BQU93QyxFQUFTLE9BQVMsS0FBTyxPQUFTQSxFQUFTLE1BQU1ZLEVBQVMsUUFBUSxHQUFNLFFBQVUsT0FBUyxPQUFTLFVBRXZJb0QsRUFBWTNGLEVBQ1owRixFQUFhdkcsSUFBYyxNQUFRLE1BQVEsVUFFN0MsTUFBTXlHLEVBQXdCakYsRUFBU3FELEVBQVMsSUFBTUEsRUFBUyxPQUN6RDZCLEVBQXVCbkYsRUFBUXNELEVBQVMsS0FBT0EsRUFBUyxNQUN4RDhCLEVBQTBCcEksR0FBSWlELEVBQVNxRCxFQUFTMEIsQ0FBVSxFQUFHRSxDQUFxQixFQUNsRkcsRUFBeUJySSxHQUFJZ0QsRUFBUXNELEVBQVMyQixDQUFTLEVBQUdFLENBQW9CLEVBQzlFRyxFQUFVLENBQUMzRCxFQUFNLGVBQWUsTUFDdEMsSUFBSTRELEVBQWtCSCxFQUNsQkksRUFBaUJILEVBT3JCLElBTktULEVBQXdCakQsRUFBTSxlQUFlLFFBQVUsTUFBUWlELEVBQXNCLFFBQVEsSUFDaEdZLEVBQWlCTCxJQUVkTixFQUF5QmxELEVBQU0sZUFBZSxRQUFVLE1BQVFrRCxFQUF1QixRQUFRLElBQ2xHVSxFQUFrQkwsR0FFaEJJLEdBQVcsQ0FBQzdHLEVBQVcsQ0FDekIsTUFBTWdILEVBQU94SSxFQUFJcUcsRUFBUyxLQUFNLENBQUMsRUFDM0JvQyxFQUFPekksRUFBSXFHLEVBQVMsTUFBTyxDQUFDLEVBQzVCcUMsRUFBTzFJLEVBQUlxRyxFQUFTLElBQUssQ0FBQyxFQUMxQnNDLEdBQU8zSSxFQUFJcUcsRUFBUyxPQUFRLENBQUMsRUFDL0J5QixFQUNGUyxFQUFpQnhGLEVBQVEsR0FBS3lGLElBQVMsR0FBS0MsSUFBUyxFQUFJRCxFQUFPQyxFQUFPekksRUFBSXFHLEVBQVMsS0FBTUEsRUFBUyxLQUFLLEdBRXhHaUMsRUFBa0J0RixFQUFTLEdBQUswRixJQUFTLEdBQUtDLEtBQVMsRUFBSUQsRUFBT0MsR0FBTzNJLEVBQUlxRyxFQUFTLElBQUtBLEVBQVMsTUFBTSxFQUU5RyxDQUNBLE1BQU13QixFQUFNLENBQ1YsR0FBR25ELEVBQ0gsZUFBQTZELEVBQ0EsZ0JBQUFELENBQ1IsQ0FBTyxFQUNELE1BQU1NLEVBQWlCLE1BQU01RSxFQUFTLGNBQWNZLEVBQVMsUUFBUSxFQUNyRSxPQUFJN0IsSUFBVTZGLEVBQWUsT0FBUzVGLElBQVc0RixFQUFlLE9BQ3ZELENBQ0wsTUFBTyxDQUNMLE1BQU8sRUFDbkIsQ0FDQSxFQUVhLENBQUEsQ0FDVCxDQUNKLENBQ0EsRUN0aENBLFNBQVNDLElBQVksQ0FDbkIsT0FBTyxPQUFPLE9BQVcsR0FDM0IsQ0FDQSxTQUFTQyxHQUFZbFIsRUFBTSxDQUN6QixPQUFJbVIsR0FBT25SLENBQUksR0FDTEEsRUFBSyxVQUFZLElBQUksWUFBVyxFQUtuQyxXQUNULENBQ0EsU0FBU29SLEVBQVVwUixFQUFNLENBQ3ZCLElBQUlxUixFQUNKLE9BQVFyUixHQUFRLE9BQVNxUixFQUFzQnJSLEVBQUssZ0JBQWtCLEtBQU8sT0FBU3FSLEVBQW9CLGNBQWdCLE1BQzVILENBQ0EsU0FBU0MsRUFBbUJ0UixFQUFNLENBQ2hDLElBQUlzTCxFQUNKLE9BQVFBLEdBQVE2RixHQUFPblIsQ0FBSSxFQUFJQSxFQUFLLGNBQWdCQSxFQUFLLFdBQWEsT0FBTyxXQUFhLEtBQU8sT0FBU3NMLEVBQUssZUFDakgsQ0FDQSxTQUFTNkYsR0FBT2xULEVBQU8sQ0FDckIsT0FBS2dULEdBQVMsRUFHUGhULGFBQWlCLE1BQVFBLGFBQWlCbVQsRUFBVW5ULENBQUssRUFBRSxLQUZ6RCxFQUdYLENBQ0EsU0FBU3NULEVBQVV0VCxFQUFPLENBQ3hCLE9BQUtnVCxHQUFTLEVBR1BoVCxhQUFpQixTQUFXQSxhQUFpQm1ULEVBQVVuVCxDQUFLLEVBQUUsUUFGNUQsRUFHWCxDQUNBLFNBQVN1VCxFQUFjdlQsRUFBTyxDQUM1QixPQUFLZ1QsR0FBUyxFQUdQaFQsYUFBaUIsYUFBZUEsYUFBaUJtVCxFQUFVblQsQ0FBSyxFQUFFLFlBRmhFLEVBR1gsQ0FDQSxTQUFTd1QsR0FBYXhULEVBQU8sQ0FDM0IsTUFBSSxDQUFDZ1QsR0FBUyxHQUFNLE9BQU8sV0FBZSxJQUNqQyxHQUVGaFQsYUFBaUIsWUFBY0EsYUFBaUJtVCxFQUFVblQsQ0FBSyxFQUFFLFVBQzFFLENBQ0EsTUFBTXlULEdBQTRDLElBQUksSUFBSSxDQUFDLFNBQVUsVUFBVSxDQUFDLEVBQ2hGLFNBQVNDLEdBQWtCelMsRUFBUyxDQUNsQyxLQUFNLENBQ0osU0FBQXVQLEVBQ0EsVUFBQW1ELEVBQ0EsVUFBQUMsRUFDQSxRQUFBQyxDQUNKLEVBQU1DLEVBQWlCN1MsQ0FBTyxFQUM1QixNQUFPLGtDQUFrQyxLQUFLdVAsRUFBV29ELEVBQVlELENBQVMsR0FBSyxDQUFDRixHQUE2QixJQUFJSSxDQUFPLENBQzlILENBQ0EsTUFBTUUsR0FBNkIsSUFBSSxJQUFJLENBQUMsUUFBUyxLQUFNLElBQUksQ0FBQyxFQUNoRSxTQUFTQyxHQUFlL1MsRUFBUyxDQUMvQixPQUFPOFMsR0FBYyxJQUFJZCxHQUFZaFMsQ0FBTyxDQUFDLENBQy9DLENBQ0EsTUFBTWdULEdBQW9CLENBQUMsZ0JBQWlCLFFBQVEsRUFDcEQsU0FBU0MsR0FBV2pULEVBQVMsQ0FDM0IsT0FBT2dULEdBQWtCLEtBQUtFLEdBQVksQ0FDeEMsR0FBSSxDQUNGLE9BQU9sVCxFQUFRLFFBQVFrVCxDQUFRLENBQ2pDLE1BQWEsQ0FDWCxNQUFPLEVBQ1QsQ0FDRixDQUFDLENBQ0gsQ0FDQSxNQUFNQyxHQUFzQixDQUFDLFlBQWEsWUFBYSxRQUFTLFNBQVUsYUFBYSxFQUNqRkMsR0FBbUIsQ0FBQyxZQUFhLFlBQWEsUUFBUyxTQUFVLGNBQWUsUUFBUSxFQUN4RkMsR0FBZ0IsQ0FBQyxRQUFTLFNBQVUsU0FBVSxTQUFTLEVBQzdELFNBQVNDLEdBQWtCQyxFQUFjLENBQ3ZDLE1BQU1DLEVBQVNDLEdBQVEsRUFDakJqTSxFQUFNNkssRUFBVWtCLENBQVksRUFBSVYsRUFBaUJVLENBQVksRUFBSUEsRUFJdkUsT0FBT0osR0FBb0IsS0FBS3BVLEdBQVN5SSxFQUFJekksQ0FBSyxFQUFJeUksRUFBSXpJLENBQUssSUFBTSxPQUFTLEVBQUssSUFBTXlJLEVBQUksY0FBZ0JBLEVBQUksZ0JBQWtCLFNBQVcsS0FBVSxDQUFDZ00sSUFBV2hNLEVBQUksZUFBaUJBLEVBQUksaUJBQW1CLE9BQVMsS0FBVSxDQUFDZ00sSUFBV2hNLEVBQUksT0FBU0EsRUFBSSxTQUFXLE9BQVMsS0FBVTRMLEdBQWlCLEtBQUtyVSxJQUFVeUksRUFBSSxZQUFjLElBQUksU0FBU3pJLENBQUssQ0FBQyxHQUFLc1UsR0FBYyxLQUFLdFUsSUFBVXlJLEVBQUksU0FBVyxJQUFJLFNBQVN6SSxDQUFLLENBQUMsQ0FDemEsQ0FDQSxTQUFTMlUsR0FBbUIxVCxFQUFTLENBQ25DLElBQUkyVCxFQUFjQyxHQUFjNVQsQ0FBTyxFQUN2QyxLQUFPc1MsRUFBY3FCLENBQVcsR0FBSyxDQUFDRSxHQUFzQkYsQ0FBVyxHQUFHLENBQ3hFLEdBQUlMLEdBQWtCSyxDQUFXLEVBQy9CLE9BQU9BLEVBQ0YsR0FBSVYsR0FBV1UsQ0FBVyxFQUMvQixPQUFPLEtBRVRBLEVBQWNDLEdBQWNELENBQVcsQ0FDekMsQ0FDQSxPQUFPLElBQ1QsQ0FDQSxTQUFTRixJQUFXLENBQ2xCLE9BQUksT0FBTyxJQUFRLEtBQWUsQ0FBQyxJQUFJLFNBQWlCLEdBQ2pELElBQUksU0FBUywwQkFBMkIsTUFBTSxDQUN2RCxDQUNBLE1BQU1LLEdBQXdDLElBQUksSUFBSSxDQUFDLE9BQVEsT0FBUSxXQUFXLENBQUMsRUFDbkYsU0FBU0QsR0FBc0IvUyxFQUFNLENBQ25DLE9BQU9nVCxHQUF5QixJQUFJOUIsR0FBWWxSLENBQUksQ0FBQyxDQUN2RCxDQUNBLFNBQVMrUixFQUFpQjdTLEVBQVMsQ0FDakMsT0FBT2tTLEVBQVVsUyxDQUFPLEVBQUUsaUJBQWlCQSxDQUFPLENBQ3BELENBQ0EsU0FBUytULEdBQWMvVCxFQUFTLENBQzlCLE9BQUlxUyxFQUFVclMsQ0FBTyxFQUNaLENBQ0wsV0FBWUEsRUFBUSxXQUNwQixVQUFXQSxFQUFRLFNBQ3pCLEVBRVMsQ0FDTCxXQUFZQSxFQUFRLFFBQ3BCLFVBQVdBLEVBQVEsT0FDdkIsQ0FDQSxDQUNBLFNBQVM0VCxHQUFjOVMsRUFBTSxDQUMzQixHQUFJa1IsR0FBWWxSLENBQUksSUFBTSxPQUN4QixPQUFPQSxFQUVULE1BQU1rVCxFQUVObFQsRUFBSyxjQUVMQSxFQUFLLFlBRUx5UixHQUFhelIsQ0FBSSxHQUFLQSxFQUFLLE1BRTNCc1IsRUFBbUJ0UixDQUFJLEVBQ3ZCLE9BQU95UixHQUFheUIsQ0FBTSxFQUFJQSxFQUFPLEtBQU9BLENBQzlDLENBQ0EsU0FBU0MsR0FBMkJuVCxFQUFNLENBQ3hDLE1BQU1vVCxFQUFhTixHQUFjOVMsQ0FBSSxFQUNyQyxPQUFJK1MsR0FBc0JLLENBQVUsRUFDM0JwVCxFQUFLLGNBQWdCQSxFQUFLLGNBQWMsS0FBT0EsRUFBSyxLQUV6RHdSLEVBQWM0QixDQUFVLEdBQUt6QixHQUFrQnlCLENBQVUsRUFDcERBLEVBRUZELEdBQTJCQyxDQUFVLENBQzlDLENBQ0EsU0FBU0MsR0FBcUJyVCxFQUFNdUQsRUFBTStQLEVBQWlCLENBQ3pELElBQUlDLEVBQ0FoUSxJQUFTLFNBQ1hBLEVBQU8sQ0FBQSxHQUVMK1AsSUFBb0IsU0FDdEJBLEVBQWtCLElBRXBCLE1BQU1FLEVBQXFCTCxHQUEyQm5ULENBQUksRUFDcER5VCxFQUFTRCxNQUF5QkQsRUFBdUJ2VCxFQUFLLGdCQUFrQixLQUFPLE9BQVN1VCxFQUFxQixNQUNySEcsRUFBTXRDLEVBQVVvQyxDQUFrQixFQUN4QyxHQUFJQyxFQUFRLENBQ1YsTUFBTUUsRUFBZUMsR0FBZ0JGLENBQUcsRUFDeEMsT0FBT25RLEVBQUssT0FBT21RLEVBQUtBLEVBQUksZ0JBQWtCLENBQUEsRUFBSS9CLEdBQWtCNkIsQ0FBa0IsRUFBSUEsRUFBcUIsQ0FBQSxFQUFJRyxHQUFnQkwsRUFBa0JELEdBQXFCTSxDQUFZLEVBQUksRUFBRSxDQUM5TCxDQUNBLE9BQU9wUSxFQUFLLE9BQU9pUSxFQUFvQkgsR0FBcUJHLEVBQW9CLENBQUEsRUFBSUYsQ0FBZSxDQUFDLENBQ3RHLENBQ0EsU0FBU00sR0FBZ0JGLEVBQUssQ0FDNUIsT0FBT0EsRUFBSSxRQUFVLE9BQU8sZUFBZUEsRUFBSSxNQUFNLEVBQUlBLEVBQUksYUFBZSxJQUM5RSxDQ3pKQSxTQUFTRyxHQUFpQjNVLEVBQVMsQ0FDakMsTUFBTXdILEVBQU1vTixFQUFtQjVVLENBQU8sRUFHdEMsSUFBSWlNLEVBQVEsV0FBV3pFLEVBQUksS0FBSyxHQUFLLEVBQ2pDMEUsRUFBUyxXQUFXMUUsRUFBSSxNQUFNLEdBQUssRUFDdkMsTUFBTXFOLEVBQVl2QyxFQUFjdFMsQ0FBTyxFQUNqQzhVLEVBQWNELEVBQVk3VSxFQUFRLFlBQWNpTSxFQUNoRDhJLEVBQWVGLEVBQVk3VSxFQUFRLGFBQWVrTSxFQUNsRDhJLEVBQWlCN0wsR0FBTThDLENBQUssSUFBTTZJLEdBQWUzTCxHQUFNK0MsQ0FBTSxJQUFNNkksRUFDekUsT0FBSUMsSUFDRi9JLEVBQVE2SSxFQUNSNUksRUFBUzZJLEdBRUosQ0FDTCxNQUFBOUksRUFDQSxPQUFBQyxFQUNBLEVBQUc4SSxDQUNQLENBQ0EsQ0FFQSxTQUFTQyxHQUFjalYsRUFBUyxDQUM5QixPQUFRcVMsRUFBVXJTLENBQU8sRUFBNkJBLEVBQXpCQSxFQUFRLGNBQ3ZDLENBRUEsU0FBU2tWLEdBQVNsVixFQUFTLENBQ3pCLE1BQU1tVixFQUFhRixHQUFjalYsQ0FBTyxFQUN4QyxHQUFJLENBQUNzUyxFQUFjNkMsQ0FBVSxFQUMzQixPQUFPOUwsRUFBYSxDQUFDLEVBRXZCLE1BQU0yQyxFQUFPbUosRUFBVyxzQkFBcUIsRUFDdkMsQ0FDSixNQUFBbEosRUFDQSxPQUFBQyxFQUNBLEVBQUFrSixDQUNKLEVBQU1ULEdBQWlCUSxDQUFVLEVBQy9CLElBQUkxTyxHQUFLMk8sRUFBSWpNLEdBQU02QyxFQUFLLEtBQUssRUFBSUEsRUFBSyxPQUFTQyxFQUMzQ3ZGLEdBQUswTyxFQUFJak0sR0FBTTZDLEVBQUssTUFBTSxFQUFJQSxFQUFLLFFBQVVFLEVBSWpELE9BQUksQ0FBQ3pGLEdBQUssQ0FBQyxPQUFPLFNBQVNBLENBQUMsS0FDMUJBLEVBQUksSUFFRixDQUFDQyxHQUFLLENBQUMsT0FBTyxTQUFTQSxDQUFDLEtBQzFCQSxFQUFJLEdBRUMsQ0FDTCxFQUFBRCxFQUNBLEVBQUFDLENBQ0osQ0FDQSxDQUVBLE1BQU0yTyxHQUF5QmhNLEVBQWEsQ0FBQyxFQUM3QyxTQUFTaU0sR0FBaUJ0VixFQUFTLENBQ2pDLE1BQU13VSxFQUFNdEMsRUFBVWxTLENBQU8sRUFDN0IsTUFBSSxDQUFDeVQsR0FBUSxHQUFNLENBQUNlLEVBQUksZUFDZmEsR0FFRixDQUNMLEVBQUdiLEVBQUksZUFBZSxXQUN0QixFQUFHQSxFQUFJLGVBQWUsU0FDMUIsQ0FDQSxDQUNBLFNBQVNlLEdBQXVCdlYsRUFBU3dWLEVBQVNDLEVBQXNCLENBSXRFLE9BSElELElBQVksU0FDZEEsRUFBVSxJQUVSLENBQUNDLEdBQXdCRCxHQUFXQyxJQUF5QnZELEVBQVVsUyxDQUFPLEVBQ3pFLEdBRUZ3VixDQUNULENBRUEsU0FBU0UsR0FBc0IxVixFQUFTMlYsRUFBY0MsRUFBaUJ2SCxFQUFjLENBQy9Fc0gsSUFBaUIsU0FDbkJBLEVBQWUsSUFFYkMsSUFBb0IsU0FDdEJBLEVBQWtCLElBRXBCLE1BQU1DLEVBQWE3VixFQUFRLHNCQUFxQixFQUMxQ21WLEVBQWFGLEdBQWNqVixDQUFPLEVBQ3hDLElBQUk4VixFQUFRek0sRUFBYSxDQUFDLEVBQ3RCc00sSUFDRXRILEVBQ0VnRSxFQUFVaEUsQ0FBWSxJQUN4QnlILEVBQVFaLEdBQVM3RyxDQUFZLEdBRy9CeUgsRUFBUVosR0FBU2xWLENBQU8sR0FHNUIsTUFBTStWLEVBQWdCUixHQUF1QkosRUFBWVMsRUFBaUJ2SCxDQUFZLEVBQUlpSCxHQUFpQkgsQ0FBVSxFQUFJOUwsRUFBYSxDQUFDLEVBQ3ZJLElBQUk1QyxHQUFLb1AsRUFBVyxLQUFPRSxFQUFjLEdBQUtELEVBQU0sRUFDaERwUCxHQUFLbVAsRUFBVyxJQUFNRSxFQUFjLEdBQUtELEVBQU0sRUFDL0M3SixFQUFRNEosRUFBVyxNQUFRQyxFQUFNLEVBQ2pDNUosRUFBUzJKLEVBQVcsT0FBU0MsRUFBTSxFQUN2QyxHQUFJWCxFQUFZLENBQ2QsTUFBTVgsRUFBTXRDLEVBQVVpRCxDQUFVLEVBQzFCYSxFQUFZM0gsR0FBZ0JnRSxFQUFVaEUsQ0FBWSxFQUFJNkQsRUFBVTdELENBQVksRUFBSUEsRUFDdEYsSUFBSTRILEVBQWF6QixFQUNiMEIsRUFBZ0J4QixHQUFnQnVCLENBQVUsRUFDOUMsS0FBT0MsR0FBaUI3SCxHQUFnQjJILElBQWNDLEdBQVksQ0FDaEUsTUFBTUUsRUFBY2pCLEdBQVNnQixDQUFhLEVBQ3BDRSxFQUFhRixFQUFjLHNCQUFxQixFQUNoRDFPLEVBQU1vTixFQUFtQnNCLENBQWEsRUFDdENuUCxFQUFPcVAsRUFBVyxNQUFRRixFQUFjLFdBQWEsV0FBVzFPLEVBQUksV0FBVyxHQUFLMk8sRUFBWSxFQUNoR3ZQLEVBQU13UCxFQUFXLEtBQU9GLEVBQWMsVUFBWSxXQUFXMU8sRUFBSSxVQUFVLEdBQUsyTyxFQUFZLEVBQ2xHMVAsR0FBSzBQLEVBQVksRUFDakJ6UCxHQUFLeVAsRUFBWSxFQUNqQmxLLEdBQVNrSyxFQUFZLEVBQ3JCakssR0FBVWlLLEVBQVksRUFDdEIxUCxHQUFLTSxFQUNMTCxHQUFLRSxFQUNMcVAsRUFBYS9ELEVBQVVnRSxDQUFhLEVBQ3BDQSxFQUFnQnhCLEdBQWdCdUIsQ0FBVSxDQUM1QyxDQUNGLENBQ0EsT0FBT2xLLEdBQWlCLENBQ3RCLE1BQUFFLEVBQ0EsT0FBQUMsRUFDQSxFQUFBekYsRUFDQSxFQUFBQyxDQUNKLENBQUcsQ0FDSCxDQUlBLFNBQVMyUCxHQUFvQnJXLEVBQVNnTSxFQUFNLENBQzFDLE1BQU1zSyxFQUFhdkMsR0FBYy9ULENBQU8sRUFBRSxXQUMxQyxPQUFLZ00sRUFHRUEsRUFBSyxLQUFPc0ssRUFGVlosR0FBc0J0RCxFQUFtQnBTLENBQU8sQ0FBQyxFQUFFLEtBQU9zVyxDQUdyRSxDQUVBLFNBQVNDLEdBQWNDLEVBQWlCQyxFQUFRLENBQzlDLE1BQU1DLEVBQVdGLEVBQWdCLHNCQUFxQixFQUNoRC9QLEVBQUlpUSxFQUFTLEtBQU9ELEVBQU8sV0FBYUosR0FBb0JHLEVBQWlCRSxDQUFRLEVBQ3JGaFEsRUFBSWdRLEVBQVMsSUFBTUQsRUFBTyxVQUNoQyxNQUFPLENBQ0wsRUFBQWhRLEVBQ0EsRUFBQUMsQ0FDSixDQUNBLENBRUEsU0FBU2lRLEdBQXNEdkssRUFBTSxDQUNuRSxHQUFJLENBQ0YsU0FBQTBCLEVBQ0EsS0FBQTlCLEVBQ0EsYUFBQXFDLEVBQ0EsU0FBQXJCLENBQ0osRUFBTVosRUFDSixNQUFNb0osRUFBVXhJLElBQWEsUUFDdkJ3SixFQUFrQnBFLEVBQW1CL0QsQ0FBWSxFQUNqRHVJLEVBQVc5SSxFQUFXbUYsR0FBV25GLEVBQVMsUUFBUSxFQUFJLEdBQzVELEdBQUlPLElBQWlCbUksR0FBbUJJLEdBQVlwQixFQUNsRCxPQUFPeEosRUFFVCxJQUFJeUssRUFBUyxDQUNYLFdBQVksRUFDWixVQUFXLENBQ2YsRUFDTVgsRUFBUXpNLEVBQWEsQ0FBQyxFQUMxQixNQUFNd04sRUFBVXhOLEVBQWEsQ0FBQyxFQUN4QnlOLEVBQTBCeEUsRUFBY2pFLENBQVksRUFDMUQsSUFBSXlJLEdBQTJCLENBQUNBLEdBQTJCLENBQUN0QixNQUN0RHhELEdBQVkzRCxDQUFZLElBQU0sUUFBVW9FLEdBQWtCK0QsQ0FBZSxLQUMzRUMsRUFBUzFDLEdBQWMxRixDQUFZLEdBRWpDaUUsRUFBY2pFLENBQVksR0FBRyxDQUMvQixNQUFNMEksRUFBYXJCLEdBQXNCckgsQ0FBWSxFQUNyRHlILEVBQVFaLEdBQVM3RyxDQUFZLEVBQzdCd0ksRUFBUSxFQUFJRSxFQUFXLEVBQUkxSSxFQUFhLFdBQ3hDd0ksRUFBUSxFQUFJRSxFQUFXLEVBQUkxSSxFQUFhLFNBQzFDLENBRUYsTUFBTTJJLEVBQWFSLEdBQW1CLENBQUNNLEdBQTJCLENBQUN0QixFQUFVZSxHQUFjQyxFQUFpQkMsQ0FBTSxFQUFJcE4sRUFBYSxDQUFDLEVBQ3BJLE1BQU8sQ0FDTCxNQUFPMkMsRUFBSyxNQUFROEosRUFBTSxFQUMxQixPQUFROUosRUFBSyxPQUFTOEosRUFBTSxFQUM1QixFQUFHOUosRUFBSyxFQUFJOEosRUFBTSxFQUFJVyxFQUFPLFdBQWFYLEVBQU0sRUFBSWUsRUFBUSxFQUFJRyxFQUFXLEVBQzNFLEVBQUdoTCxFQUFLLEVBQUk4SixFQUFNLEVBQUlXLEVBQU8sVUFBWVgsRUFBTSxFQUFJZSxFQUFRLEVBQUlHLEVBQVcsQ0FDOUUsQ0FDQSxDQUVBLFNBQVNDLEdBQWVqWCxFQUFTLENBQy9CLE9BQU8sTUFBTSxLQUFLQSxFQUFRLGVBQWMsQ0FBRSxDQUM1QyxDQUlBLFNBQVNrWCxHQUFnQmxYLEVBQVMsQ0FDaEMsTUFBTW1YLEVBQU8vRSxFQUFtQnBTLENBQU8sRUFDakN5VyxFQUFTMUMsR0FBYy9ULENBQU8sRUFDOUJvWCxFQUFPcFgsRUFBUSxjQUFjLEtBQzdCaU0sRUFBUS9DLEVBQUlpTyxFQUFLLFlBQWFBLEVBQUssWUFBYUMsRUFBSyxZQUFhQSxFQUFLLFdBQVcsRUFDbEZsTCxFQUFTaEQsRUFBSWlPLEVBQUssYUFBY0EsRUFBSyxhQUFjQyxFQUFLLGFBQWNBLEVBQUssWUFBWSxFQUM3RixJQUFJM1EsRUFBSSxDQUFDZ1EsRUFBTyxXQUFhSixHQUFvQnJXLENBQU8sRUFDeEQsTUFBTTBHLEVBQUksQ0FBQytQLEVBQU8sVUFDbEIsT0FBSTdCLEVBQW1Cd0MsQ0FBSSxFQUFFLFlBQWMsUUFDekMzUSxHQUFLeUMsRUFBSWlPLEVBQUssWUFBYUMsRUFBSyxXQUFXLEVBQUluTCxHQUUxQyxDQUNMLE1BQUFBLEVBQ0EsT0FBQUMsRUFDQSxFQUFBekYsRUFDQSxFQUFBQyxDQUNKLENBQ0EsQ0FLQSxNQUFNMlEsR0FBZ0IsR0FDdEIsU0FBU0MsR0FBZ0J0WCxFQUFTZ04sRUFBVSxDQUMxQyxNQUFNd0gsRUFBTXRDLEVBQVVsUyxDQUFPLEVBQ3ZCbVgsRUFBTy9FLEVBQW1CcFMsQ0FBTyxFQUNqQ3VYLEVBQWlCL0MsRUFBSSxlQUMzQixJQUFJdkksRUFBUWtMLEVBQUssWUFDYmpMLEVBQVNpTCxFQUFLLGFBQ2QxUSxFQUFJLEVBQ0pDLEVBQUksRUFDUixHQUFJNlEsRUFBZ0IsQ0FDbEJ0TCxFQUFRc0wsRUFBZSxNQUN2QnJMLEVBQVNxTCxFQUFlLE9BQ3hCLE1BQU1DLEVBQXNCL0QsR0FBUSxHQUNoQyxDQUFDK0QsR0FBdUJBLEdBQXVCeEssSUFBYSxXQUM5RHZHLEVBQUk4USxFQUFlLFdBQ25CN1EsRUFBSTZRLEVBQWUsVUFFdkIsQ0FDQSxNQUFNRSxFQUFtQnBCLEdBQW9CYyxDQUFJLEVBSWpELEdBQUlNLEdBQW9CLEVBQUcsQ0FDekIsTUFBTUMsRUFBTVAsRUFBSyxjQUNYQyxFQUFPTSxFQUFJLEtBQ1hDLEVBQWEsaUJBQWlCUCxDQUFJLEVBQ2xDUSxFQUFtQkYsRUFBSSxhQUFlLGNBQWUsV0FBV0MsRUFBVyxVQUFVLEVBQUksV0FBV0EsRUFBVyxXQUFXLEdBQUssRUFDL0hFLEVBQStCLEtBQUssSUFBSVYsRUFBSyxZQUFjQyxFQUFLLFlBQWNRLENBQWdCLEVBQ2hHQyxHQUFnQ1IsS0FDbENwTCxHQUFTNEwsRUFFYixNQUFXSixHQUFvQkosS0FHN0JwTCxHQUFTd0wsR0FFWCxNQUFPLENBQ0wsTUFBQXhMLEVBQ0EsT0FBQUMsRUFDQSxFQUFBekYsRUFDQSxFQUFBQyxDQUNKLENBQ0EsQ0FFQSxNQUFNb1IsR0FBK0IsSUFBSSxJQUFJLENBQUMsV0FBWSxPQUFPLENBQUMsRUFFbEUsU0FBU0MsR0FBMkIvWCxFQUFTZ04sRUFBVSxDQUNyRCxNQUFNNkksRUFBYUgsR0FBc0IxVixFQUFTLEdBQU1nTixJQUFhLE9BQU8sRUFDdEVwRyxFQUFNaVAsRUFBVyxJQUFNN1YsRUFBUSxVQUMvQitHLEVBQU84TyxFQUFXLEtBQU83VixFQUFRLFdBQ2pDOFYsRUFBUXhELEVBQWN0UyxDQUFPLEVBQUlrVixHQUFTbFYsQ0FBTyxFQUFJcUosRUFBYSxDQUFDLEVBQ25FNEMsRUFBUWpNLEVBQVEsWUFBYzhWLEVBQU0sRUFDcEM1SixFQUFTbE0sRUFBUSxhQUFlOFYsRUFBTSxFQUN0Q3JQLEVBQUlNLEVBQU8rTyxFQUFNLEVBQ2pCcFAsRUFBSUUsRUFBTWtQLEVBQU0sRUFDdEIsTUFBTyxDQUNMLE1BQUE3SixFQUNBLE9BQUFDLEVBQ0EsRUFBQXpGLEVBQ0EsRUFBQUMsQ0FDSixDQUNBLENBQ0EsU0FBU3NSLEdBQWtDaFksRUFBU2lZLEVBQWtCakwsRUFBVSxDQUM5RSxJQUFJaEIsRUFDSixHQUFJaU0sSUFBcUIsV0FDdkJqTSxFQUFPc0wsR0FBZ0J0WCxFQUFTZ04sQ0FBUSxVQUMvQmlMLElBQXFCLFdBQzlCak0sRUFBT2tMLEdBQWdCOUUsRUFBbUJwUyxDQUFPLENBQUMsVUFDekNxUyxFQUFVNEYsQ0FBZ0IsRUFDbkNqTSxFQUFPK0wsR0FBMkJFLEVBQWtCakwsQ0FBUSxNQUN2RCxDQUNMLE1BQU0rSSxFQUFnQlQsR0FBaUJ0VixDQUFPLEVBQzlDZ00sRUFBTyxDQUNMLEVBQUdpTSxFQUFpQixFQUFJbEMsRUFBYyxFQUN0QyxFQUFHa0MsRUFBaUIsRUFBSWxDLEVBQWMsRUFDdEMsTUFBT2tDLEVBQWlCLE1BQ3hCLE9BQVFBLEVBQWlCLE1BQy9CLENBQ0UsQ0FDQSxPQUFPbE0sR0FBaUJDLENBQUksQ0FDOUIsQ0FDQSxTQUFTa00sR0FBeUJsWSxFQUFTbVksRUFBVSxDQUNuRCxNQUFNakUsRUFBYU4sR0FBYzVULENBQU8sRUFDeEMsT0FBSWtVLElBQWVpRSxHQUFZLENBQUM5RixFQUFVNkIsQ0FBVSxHQUFLTCxHQUFzQkssQ0FBVSxFQUNoRixHQUVGVSxFQUFtQlYsQ0FBVSxFQUFFLFdBQWEsU0FBV2dFLEdBQXlCaEUsRUFBWWlFLENBQVEsQ0FDN0csQ0FLQSxTQUFTQyxHQUE0QnBZLEVBQVNxWSxFQUFPLENBQ25ELE1BQU1DLEVBQWVELEVBQU0sSUFBSXJZLENBQU8sRUFDdEMsR0FBSXNZLEVBQ0YsT0FBT0EsRUFFVCxJQUFJdEUsRUFBU0csR0FBcUJuVSxFQUFTLENBQUEsRUFBSSxFQUFLLEVBQUUsT0FBT0osR0FBTXlTLEVBQVV6UyxDQUFFLEdBQUtvUyxHQUFZcFMsQ0FBRSxJQUFNLE1BQU0sRUFDMUcyWSxFQUFzQyxLQUMxQyxNQUFNQyxFQUFpQjVELEVBQW1CNVUsQ0FBTyxFQUFFLFdBQWEsUUFDaEUsSUFBSTJULEVBQWM2RSxFQUFpQjVFLEdBQWM1VCxDQUFPLEVBQUlBLEVBRzVELEtBQU9xUyxFQUFVc0IsQ0FBVyxHQUFLLENBQUNFLEdBQXNCRixDQUFXLEdBQUcsQ0FDcEUsTUFBTThFLEVBQWdCN0QsRUFBbUJqQixDQUFXLEVBQzlDK0UsRUFBMEJwRixHQUFrQkssQ0FBVyxFQUN6RCxDQUFDK0UsR0FBMkJELEVBQWMsV0FBYSxVQUN6REYsRUFBc0MsT0FFVkMsRUFBaUIsQ0FBQ0UsR0FBMkIsQ0FBQ0gsRUFBc0MsQ0FBQ0csR0FBMkJELEVBQWMsV0FBYSxVQUFZLENBQUMsQ0FBQ0YsR0FBdUNULEdBQWdCLElBQUlTLEVBQW9DLFFBQVEsR0FBSzlGLEdBQWtCa0IsQ0FBVyxHQUFLLENBQUMrRSxHQUEyQlIsR0FBeUJsWSxFQUFTMlQsQ0FBVyxHQUc1WUssRUFBU0EsRUFBTyxPQUFPMkUsR0FBWUEsSUFBYWhGLENBQVcsRUFHM0Q0RSxFQUFzQ0UsRUFFeEM5RSxFQUFjQyxHQUFjRCxDQUFXLENBQ3pDLENBQ0EsT0FBQTBFLEVBQU0sSUFBSXJZLEVBQVNnVSxDQUFNLEVBQ2xCQSxDQUNULENBSUEsU0FBUzRFLEdBQWdCeE0sRUFBTSxDQUM3QixHQUFJLENBQ0YsUUFBQXBNLEVBQ0EsU0FBQStOLEVBQ0EsYUFBQUMsRUFDQSxTQUFBaEIsQ0FDSixFQUFNWixFQUVKLE1BQU15TSxFQUFvQixDQUFDLEdBRE05SyxJQUFhLG9CQUFzQmtGLEdBQVdqVCxDQUFPLEVBQUksQ0FBQSxFQUFLb1ksR0FBNEJwWSxFQUFTLEtBQUssRUFBRSxFQUFJLENBQUEsRUFBRyxPQUFPK04sQ0FBUSxFQUN6R0MsQ0FBWSxFQUM5RDhLLEVBQXdCRCxFQUFrQixDQUFDLEVBQzNDRSxFQUFlRixFQUFrQixPQUFPLENBQUNHLEVBQVNmLElBQXFCLENBQzNFLE1BQU1qTSxFQUFPZ00sR0FBa0NoWSxFQUFTaVksRUFBa0JqTCxDQUFRLEVBQ2xGLE9BQUFnTSxFQUFRLElBQU05UCxFQUFJOEMsRUFBSyxJQUFLZ04sRUFBUSxHQUFHLEVBQ3ZDQSxFQUFRLE1BQVEvUCxHQUFJK0MsRUFBSyxNQUFPZ04sRUFBUSxLQUFLLEVBQzdDQSxFQUFRLE9BQVMvUCxHQUFJK0MsRUFBSyxPQUFRZ04sRUFBUSxNQUFNLEVBQ2hEQSxFQUFRLEtBQU85UCxFQUFJOEMsRUFBSyxLQUFNZ04sRUFBUSxJQUFJLEVBQ25DQSxDQUNULEVBQUdoQixHQUFrQ2hZLEVBQVM4WSxFQUF1QjlMLENBQVEsQ0FBQyxFQUM5RSxNQUFPLENBQ0wsTUFBTytMLEVBQWEsTUFBUUEsRUFBYSxLQUN6QyxPQUFRQSxFQUFhLE9BQVNBLEVBQWEsSUFDM0MsRUFBR0EsRUFBYSxLQUNoQixFQUFHQSxFQUFhLEdBQ3BCLENBQ0EsQ0FFQSxTQUFTRSxHQUFjalosRUFBUyxDQUM5QixLQUFNLENBQ0osTUFBQWlNLEVBQ0EsT0FBQUMsQ0FDSixFQUFNeUksR0FBaUIzVSxDQUFPLEVBQzVCLE1BQU8sQ0FDTCxNQUFBaU0sRUFDQSxPQUFBQyxDQUNKLENBQ0EsQ0FFQSxTQUFTZ04sR0FBOEJsWixFQUFTcU8sRUFBY3JCLEVBQVUsQ0FDdEUsTUFBTThKLEVBQTBCeEUsRUFBY2pFLENBQVksRUFDcERtSSxFQUFrQnBFLEVBQW1CL0QsQ0FBWSxFQUNqRG1ILEVBQVV4SSxJQUFhLFFBQ3ZCaEIsRUFBTzBKLEdBQXNCMVYsRUFBUyxHQUFNd1YsRUFBU25ILENBQVksRUFDdkUsSUFBSW9JLEVBQVMsQ0FDWCxXQUFZLEVBQ1osVUFBVyxDQUNmLEVBQ0UsTUFBTUksRUFBVXhOLEVBQWEsQ0FBQyxFQUk5QixTQUFTOFAsR0FBNEIsQ0FDbkN0QyxFQUFRLEVBQUlSLEdBQW9CRyxDQUFlLENBQ2pELENBQ0EsR0FBSU0sR0FBMkIsQ0FBQ0EsR0FBMkIsQ0FBQ3RCLEVBSTFELElBSEl4RCxHQUFZM0QsQ0FBWSxJQUFNLFFBQVVvRSxHQUFrQitELENBQWUsS0FDM0VDLEVBQVMxQyxHQUFjMUYsQ0FBWSxHQUVqQ3lJLEVBQXlCLENBQzNCLE1BQU1DLEVBQWFyQixHQUFzQnJILEVBQWMsR0FBTW1ILEVBQVNuSCxDQUFZLEVBQ2xGd0ksRUFBUSxFQUFJRSxFQUFXLEVBQUkxSSxFQUFhLFdBQ3hDd0ksRUFBUSxFQUFJRSxFQUFXLEVBQUkxSSxFQUFhLFNBQzFDLE1BQVdtSSxHQUNUMkMsRUFBeUIsRUFHekIzRCxHQUFXLENBQUNzQixHQUEyQk4sR0FDekMyQyxFQUF5QixFQUUzQixNQUFNbkMsRUFBYVIsR0FBbUIsQ0FBQ00sR0FBMkIsQ0FBQ3RCLEVBQVVlLEdBQWNDLEVBQWlCQyxDQUFNLEVBQUlwTixFQUFhLENBQUMsRUFDOUg1QyxFQUFJdUYsRUFBSyxLQUFPeUssRUFBTyxXQUFhSSxFQUFRLEVBQUlHLEVBQVcsRUFDM0R0USxFQUFJc0YsRUFBSyxJQUFNeUssRUFBTyxVQUFZSSxFQUFRLEVBQUlHLEVBQVcsRUFDL0QsTUFBTyxDQUNMLEVBQUF2USxFQUNBLEVBQUFDLEVBQ0EsTUFBT3NGLEVBQUssTUFDWixPQUFRQSxFQUFLLE1BQ2pCLENBQ0EsQ0FFQSxTQUFTb04sR0FBbUJwWixFQUFTLENBQ25DLE9BQU80VSxFQUFtQjVVLENBQU8sRUFBRSxXQUFhLFFBQ2xELENBRUEsU0FBU3FaLEdBQW9CclosRUFBU3NaLEVBQVUsQ0FDOUMsR0FBSSxDQUFDaEgsRUFBY3RTLENBQU8sR0FBSzRVLEVBQW1CNVUsQ0FBTyxFQUFFLFdBQWEsUUFDdEUsT0FBTyxLQUVULEdBQUlzWixFQUNGLE9BQU9BLEVBQVN0WixDQUFPLEVBRXpCLElBQUl1WixFQUFrQnZaLEVBQVEsYUFNOUIsT0FBSW9TLEVBQW1CcFMsQ0FBTyxJQUFNdVosSUFDbENBLEVBQWtCQSxFQUFnQixjQUFjLE1BRTNDQSxDQUNULENBSUEsU0FBU0MsR0FBZ0J4WixFQUFTc1osRUFBVSxDQUMxQyxNQUFNOUUsRUFBTXRDLEVBQVVsUyxDQUFPLEVBQzdCLEdBQUlpVCxHQUFXalQsQ0FBTyxFQUNwQixPQUFPd1UsRUFFVCxHQUFJLENBQUNsQyxFQUFjdFMsQ0FBTyxFQUFHLENBQzNCLElBQUl5WixFQUFrQjdGLEdBQWM1VCxDQUFPLEVBQzNDLEtBQU95WixHQUFtQixDQUFDNUYsR0FBc0I0RixDQUFlLEdBQUcsQ0FDakUsR0FBSXBILEVBQVVvSCxDQUFlLEdBQUssQ0FBQ0wsR0FBbUJLLENBQWUsRUFDbkUsT0FBT0EsRUFFVEEsRUFBa0I3RixHQUFjNkYsQ0FBZSxDQUNqRCxDQUNBLE9BQU9qRixDQUNULENBQ0EsSUFBSW5HLEVBQWVnTCxHQUFvQnJaLEVBQVNzWixDQUFRLEVBQ3hELEtBQU9qTCxHQUFnQjBFLEdBQWUxRSxDQUFZLEdBQUsrSyxHQUFtQi9LLENBQVksR0FDcEZBLEVBQWVnTCxHQUFvQmhMLEVBQWNpTCxDQUFRLEVBRTNELE9BQUlqTCxHQUFnQndGLEdBQXNCeEYsQ0FBWSxHQUFLK0ssR0FBbUIvSyxDQUFZLEdBQUssQ0FBQ2lGLEdBQWtCakYsQ0FBWSxFQUNySG1HLEVBRUZuRyxHQUFnQnFGLEdBQW1CMVQsQ0FBTyxHQUFLd1UsQ0FDeEQsQ0FFQSxNQUFNa0YsR0FBa0IsZUFBZ0JyWCxFQUFNLENBQzVDLE1BQU1zWCxFQUFvQixLQUFLLGlCQUFtQkgsR0FDNUNJLEVBQWtCLEtBQUssY0FDdkJDLEVBQXFCLE1BQU1ELEVBQWdCdlgsRUFBSyxRQUFRLEVBQzlELE1BQU8sQ0FDTCxVQUFXNlcsR0FBOEI3VyxFQUFLLFVBQVcsTUFBTXNYLEVBQWtCdFgsRUFBSyxRQUFRLEVBQUdBLEVBQUssUUFBUSxFQUM5RyxTQUFVLENBQ1IsRUFBRyxFQUNILEVBQUcsRUFDSCxNQUFPd1gsRUFBbUIsTUFDMUIsT0FBUUEsRUFBbUIsTUFDakMsQ0FDQSxDQUNBLEVBRUEsU0FBU0MsR0FBTTlaLEVBQVMsQ0FDdEIsT0FBTzRVLEVBQW1CNVUsQ0FBTyxFQUFFLFlBQWMsS0FDbkQsQ0FFQSxNQUFNa04sR0FBVyxDQUNmLHNEQUFBeUosR0FDQSxtQkFBQXZFLEVBQ0EsZ0JBQUF3RyxHQUNBLGdCQUFBWSxHQUNBLGdCQUFBRSxHQUNBLGVBQUF6QyxHQUNBLGNBQUFnQyxHQUNBLFNBQUEvRCxHQUNBLFVBQUE3QyxFQUNBLE1BQUF5SCxFQUNGLEVBRUEsU0FBU0MsR0FBYzlhLEVBQUdDLEVBQUcsQ0FDM0IsT0FBT0QsRUFBRSxJQUFNQyxFQUFFLEdBQUtELEVBQUUsSUFBTUMsRUFBRSxHQUFLRCxFQUFFLFFBQVVDLEVBQUUsT0FBU0QsRUFBRSxTQUFXQyxFQUFFLE1BQzdFLENBR0EsU0FBUzhhLEdBQVloYSxFQUFTaWEsRUFBUSxDQUNwQyxJQUFJQyxFQUFLLEtBQ0xDLEVBQ0osTUFBTW5aLEVBQU9vUixFQUFtQnBTLENBQU8sRUFDdkMsU0FBU29hLEdBQVUsQ0FDakIsSUFBSUMsRUFDSixhQUFhRixDQUFTLEdBQ3JCRSxFQUFNSCxJQUFPLE1BQVFHLEVBQUksV0FBVSxFQUNwQ0gsRUFBSyxJQUNQLENBQ0EsU0FBU0ksRUFBUUMsRUFBTUMsRUFBVyxDQUM1QkQsSUFBUyxTQUNYQSxFQUFPLElBRUxDLElBQWMsU0FDaEJBLEVBQVksR0FFZEosRUFBTyxFQUNQLE1BQU1LLEVBQTJCemEsRUFBUSxzQkFBcUIsRUFDeEQsQ0FDSixLQUFBK0csRUFDQSxJQUFBSCxFQUNBLE1BQUFxRixFQUNBLE9BQUFDLENBQ04sRUFBUXVPLEVBSUosR0FIS0YsR0FDSE4sRUFBTSxFQUVKLENBQUNoTyxHQUFTLENBQUNDLEVBQ2IsT0FFRixNQUFNd08sRUFBV3RSLEdBQU14QyxDQUFHLEVBQ3BCK1QsRUFBYXZSLEdBQU1wSSxFQUFLLGFBQWUrRixFQUFPa0YsRUFBTSxFQUNwRDJPLEVBQWN4UixHQUFNcEksRUFBSyxjQUFnQjRGLEVBQU1zRixFQUFPLEVBQ3REMk8sRUFBWXpSLEdBQU1yQyxDQUFJLEVBRXRCeEcsRUFBVSxDQUNkLFdBRmlCLENBQUNtYSxFQUFXLE1BQVEsQ0FBQ0MsRUFBYSxNQUFRLENBQUNDLEVBQWMsTUFBUSxDQUFDQyxFQUFZLEtBRy9GLFVBQVczUixFQUFJLEVBQUdELEdBQUksRUFBR3VSLENBQVMsQ0FBQyxHQUFLLENBQzlDLEVBQ0ksSUFBSU0sRUFBZ0IsR0FDcEIsU0FBU0MsRUFBY0MsRUFBUyxDQUM5QixNQUFNQyxFQUFRRCxFQUFRLENBQUMsRUFBRSxrQkFDekIsR0FBSUMsSUFBVVQsRUFBVyxDQUN2QixHQUFJLENBQUNNLEVBQ0gsT0FBT1IsRUFBTyxFQUVYVyxFQU9IWCxFQUFRLEdBQU9XLENBQUssRUFKcEJkLEVBQVksV0FBVyxJQUFNLENBQzNCRyxFQUFRLEdBQU8sSUFBSSxDQUNyQixFQUFHLEdBQUksQ0FJWCxDQUNJVyxJQUFVLEdBQUssQ0FBQ2xCLEdBQWNVLEVBQTBCemEsRUFBUSxzQkFBcUIsQ0FBRSxHQVF6RnNhLEVBQU8sRUFFVFEsRUFBZ0IsRUFDbEIsQ0FJQSxHQUFJLENBQ0ZaLEVBQUssSUFBSSxxQkFBcUJhLEVBQWUsQ0FDM0MsR0FBR3hhLEVBRUgsS0FBTVMsRUFBSyxhQUNuQixDQUFPLENBQ0gsTUFBYSxDQUNYa1osRUFBSyxJQUFJLHFCQUFxQmEsRUFBZXhhLENBQU8sQ0FDdEQsQ0FDQTJaLEVBQUcsUUFBUWxhLENBQU8sQ0FDcEIsQ0FDQSxPQUFBc2EsRUFBUSxFQUFJLEVBQ0xGLENBQ1QsQ0FVQSxTQUFTYyxHQUFXN08sRUFBV0MsRUFBVTZPLEVBQVE1YSxFQUFTLENBQ3BEQSxJQUFZLFNBQ2RBLEVBQVUsQ0FBQSxHQUVaLEtBQU0sQ0FDSixlQUFBNmEsRUFBaUIsR0FDakIsZUFBQUMsRUFBaUIsR0FDakIsY0FBQUMsRUFBZ0IsT0FBTyxnQkFBbUIsV0FDMUMsWUFBQUMsRUFBYyxPQUFPLHNCQUF5QixXQUM5QyxlQUFBQyxFQUFpQixFQUNyQixFQUFNamIsRUFDRWtiLEVBQWN4RyxHQUFjNUksQ0FBUyxFQUNyQ3FQLEVBQVlOLEdBQWtCQyxFQUFpQixDQUFDLEdBQUlJLEVBQWN0SCxHQUFxQnNILENBQVcsRUFBSSxDQUFBLEVBQUssR0FBR3RILEdBQXFCN0gsQ0FBUSxDQUFDLEVBQUksQ0FBQSxFQUN0Sm9QLEVBQVUsUUFBUS9DLEdBQVksQ0FDNUJ5QyxHQUFrQnpDLEVBQVMsaUJBQWlCLFNBQVV3QyxFQUFRLENBQzVELFFBQVMsRUFDZixDQUFLLEVBQ0RFLEdBQWtCMUMsRUFBUyxpQkFBaUIsU0FBVXdDLENBQU0sQ0FDOUQsQ0FBQyxFQUNELE1BQU1RLEVBQVlGLEdBQWVGLEVBQWN2QixHQUFZeUIsRUFBYU4sQ0FBTSxFQUFJLEtBQ2xGLElBQUlTLEVBQWlCLEdBQ2pCQyxFQUFpQixLQUNqQlAsSUFDRk8sRUFBaUIsSUFBSSxlQUFlelAsR0FBUSxDQUMxQyxHQUFJLENBQUMwUCxDQUFVLEVBQUkxUCxFQUNmMFAsR0FBY0EsRUFBVyxTQUFXTCxHQUFlSSxJQUdyREEsRUFBZSxVQUFVdlAsQ0FBUSxFQUNqQyxxQkFBcUJzUCxDQUFjLEVBQ25DQSxFQUFpQixzQkFBc0IsSUFBTSxDQUMzQyxJQUFJRyxHQUNIQSxFQUFrQkYsSUFBbUIsTUFBUUUsRUFBZ0IsUUFBUXpQLENBQVEsQ0FDaEYsQ0FBQyxHQUVINk8sRUFBTSxDQUNSLENBQUMsRUFDR00sR0FBZSxDQUFDRCxHQUNsQkssRUFBZSxRQUFRSixDQUFXLEVBRXBDSSxFQUFlLFFBQVF2UCxDQUFRLEdBRWpDLElBQUkwUCxFQUNBQyxFQUFjVCxFQUFpQjlGLEdBQXNCckosQ0FBUyxFQUFJLEtBQ2xFbVAsR0FDRlUsRUFBUyxFQUVYLFNBQVNBLEdBQVksQ0FDbkIsTUFBTUMsRUFBY3pHLEdBQXNCckosQ0FBUyxFQUMvQzRQLEdBQWUsQ0FBQ2xDLEdBQWNrQyxFQUFhRSxDQUFXLEdBQ3hEaEIsRUFBTSxFQUVSYyxFQUFjRSxFQUNkSCxFQUFVLHNCQUFzQkUsQ0FBUyxDQUMzQyxDQUNBLE9BQUFmLEVBQU0sRUFDQyxJQUFNLENBQ1gsSUFBSWlCLEVBQ0pWLEVBQVUsUUFBUS9DLEdBQVksQ0FDNUJ5QyxHQUFrQnpDLEVBQVMsb0JBQW9CLFNBQVV3QyxDQUFNLEVBQy9ERSxHQUFrQjFDLEVBQVMsb0JBQW9CLFNBQVV3QyxDQUFNLENBQ2pFLENBQUMsRUFDb0JRLElBQVMsR0FDN0JTLEVBQW1CUCxJQUFtQixNQUFRTyxFQUFpQixXQUFVLEVBQzFFUCxFQUFpQixLQUNiTCxHQUNGLHFCQUFxQlEsQ0FBTyxDQUVoQyxDQUNGLENBa0NBLE1BQU03TCxHQUFRa00sR0FRUjdOLEdBQU84TixHQVFQMUwsR0FBTzJMLEdBZ0NQelAsR0FBa0IsQ0FBQ1QsRUFBV0MsRUFBVS9MLElBQVksQ0FJeEQsTUFBTThYLEVBQVEsSUFBSSxJQUNabUUsRUFBZ0IsQ0FDcEIsU0FBQXRQLEdBQ0EsR0FBRzNNLENBQ1AsRUFDUWtjLEVBQW9CLENBQ3hCLEdBQUdELEVBQWMsU0FDakIsR0FBSW5FLENBQ1IsRUFDRSxPQUFPcUUsR0FBa0JyUSxFQUFXQyxFQUFVLENBQzVDLEdBQUdrUSxFQUNILFNBQVVDLENBQ2QsQ0FBRyxDQUNILEVDcHdCYUUsRUFBYyxDQUFFLFFBQVMsR0FBTSxRQUFTLEVBQUEsRUFDeEN2ZCxHQUNaLE9BQU8sT0FBVyxLQUFlLE9BQU8sU0FBYSxJQVkvQyxTQUFTd2QsR0FDZkMsRUFDQUMsRUFDQyxDQUNELElBQUlDLEVBRUosTUFBTyxJQUFJQyxJQUFZLENBQ3RCLGFBQWFELENBQUssRUFDbEJBLEVBQVEsV0FBVyxJQUFNRixFQUFTLEdBQUdHLENBQUksRUFBR0YsQ0FBSyxDQUNsRCxDQUNELENBU08sU0FBU25kLEVBQ2ZDLEVBQ0FDLEVBQ0FkLEVBQ2dCLENBQ2hCLE9BQUlBLElBQVUsT0FBa0JhLEVBQUcsYUFBYUMsQ0FBSSxHQUFLLE1BQ3JEZCxJQUFVLEtBQU1hLEVBQUcsZ0JBQWdCQyxDQUFJLEVBQ2xDRCxFQUFHLGFBQWFDLENBQUksSUFBTWQsR0FBT2EsRUFBRyxhQUFhQyxFQUFNZCxDQUFLLEVBQzlELEtBQ1IsQ0FNQSxJQUFJa0MsR0FBSyxFQUNULE1BQU1nYyxHQUFPLEdBQUcsS0FBSyxNQUFNLFNBQVMsRUFBRSxDQUFDLEdBQUcsS0FBSyxPQUFBLEVBQVMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFHLENBQUMsQ0FBQyxHQUN6RSxTQUFTL2IsR0FBTXRCLEVBQWEsQ0FDbEMsT0FBS0EsRUFBRyxLQUFJQSxFQUFHLEdBQUssR0FBR3FkLEVBQUksR0FBRyxFQUFFaGMsRUFBRSxJQUMzQnJCLEVBQUcsRUFDWCxDQUdBLE1BQU1FLEdBQVMsQ0FDZEMsRUFDQUMsRUFDQSxLQUFRLElBQ0UsQ0FDVixVQUFXRSxLQUFRRCxFQUFLLENBQUMsRUFBRSxNQUFNLEdBQUcsRUFDbkNBLEVBQUssQ0FBQyxFQUFJQyxFQUNWRixFQUFRLEdBQUdELENBQU0sZUFBZSxFQUFFLEdBQUdFLENBQUksQ0FFM0MsRUFRYUUsRUFBSyxDQUNqQkgsS0FDR0MsSUFDTyxDQUNOaWQsS0FBV2xkLElBQVksUUFBVUEsSUFBWSxXQUNoRGtkLEdBQU8sS0FBSyxJQUFNOWMsR0FBSUosRUFBUyxHQUFHQyxDQUFJLENBQUMsRUFDeENILEdBQU8sTUFBT0UsRUFBU0MsQ0FBSSxDQUM1QixFQVFhRyxHQUFNLENBQ2xCSixLQUNHQyxJQUNPSCxHQUFPLFNBQVVFLEVBQVNDLENBQUksRUFhekMsSUFBSWlkLEdBQW1DLEtBQ2hDLE1BQU1DLEVBQVlOLEdBQXlCLENBQ2pELEdBQUksQ0FBQ3pkLElBQWMsQ0FBQyxPQUFPLHNCQUF1QixPQUM3QyxPQUFPLG9CQUFtQixPQUFPLHNCQUF3QixLQUU5RCxNQUFNZ2UsRUFBTSxJQUNYLHNCQUFzQixJQUFNLENBQzNCLE1BQU10ZSxFQUFNLE9BQU8rZCxDQUFRLEVBQUUsUUFBUSxXQUFZLEVBQUUsRUFDbkQsT0FBTyxtQkFBbUIsSUFBSS9kLENBQUcsR0FBRyxJQUFLdWUsR0FBV0EsR0FBUSxFQUM1REgsR0FBUyxDQUFBLEVBQ1RMLEVBQUEsRUFDQSxPQUFPLG1CQUFtQixJQUFJL2QsRUFBS29lLElBQVEsTUFBTSxDQUFDLENBQUMsRUFDbkRBLEdBQVMsSUFDVixDQUFDLEVBRUUsU0FBUyxhQUFlLFdBQVlFLEVBQUEsRUFDbkNqZCxFQUFHLE9BQVEsT0FBUWlkLENBQUcsQ0FDNUIsRUFFTUUsT0FBZSxRQUNkLFNBQVNDLEdBQ2ZqYSxFQUNBa2EsRUFDQWpkLEVBQ0MsQ0FDRCtjLEdBQVMsSUFBSWhhLENBQU0sSUFBQSxFQUNuQmdhLEdBQVMsT0FBT2hhLENBQU0sRUFFbEJrYSxHQUNIRixHQUFTLElBQ1JoYSxFQUNBNFgsR0FBV3NDLEVBQVFsYSxFQUFRLElBQU0sQ0FDaEMsR0FBSSxDQUFDQSxFQUFPLGFBQWUsQ0FBQ2thLEVBQU8sYUFBZWxhLEVBQU8sT0FDeEQsT0FBT2lhLEdBQWVqYSxFQUFRLEVBQUssRUFDcEN3SixHQUFnQjBRLEVBQVFsYSxFQUFRL0MsQ0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFFLEVBQUFrRyxFQUFHLEVBQUFDLEtBQVEsQ0FDM0RwRCxFQUFPLE1BQU0sS0FBTyxHQUFHbUQsQ0FBQyxLQUN4Qm5ELEVBQU8sTUFBTSxJQUFNLEdBQUdvRCxDQUFDLElBQ3hCLENBQUMsQ0FDRixDQUFDLENBQUEsQ0FFSixDQU1PLFNBQVMrVyxHQUFnQ1osRUFBNEIsQ0FDM0UsSUFBSWEsRUFBUSxFQUVaLE1BQU1DLEVBQVUsSUFBTSxXQUFXQyxFQUFTLEdBQUcsRUFDdkNBLEVBQVUsSUFBTSxDQUNyQmYsRUFBUyxDQUFBLEVBQUlyYyxDQUFRLEVBQ3JCQSxFQUFTLFlBQUEsRUFDVGtkLEVBQVEsQ0FDVCxFQUNNbGQsRUFBVyxJQUFJLGlCQUFpQixJQUFNLENBQ3RDa2QsSUFBT0EsRUFBUSxzQkFBc0JDLENBQU8sRUFDbEQsQ0FBQyxFQUVELE9BQU9uZCxDQUNSLENBU0EsTUFBTXFkLE9BQWUsUUFDUkMsR0FBYSxDQUN6QmxlLEVBQ0FtZSxFQUNBbEIsSUFDSSxDQUNKLEdBQUksQ0FBQ3pkLElBQWMsQ0FBQyxPQUFPLHNCQUF1QixPQUNsRCxNQUFNNGUsRUFBUXBlLEVBQUcsdUJBQXVCbWUsQ0FBUyxFQUMzQ0UsRUFBVUosR0FBUyxJQUFJamUsQ0FBRSxHQUFLLENBQUEsRUFFL0JxZSxFQUFRLFNBQ1pKLEdBQVMsSUFBSWplLEVBQUlxZSxDQUFPLEVBQ3hCUixHQUFnQyxDQUFDcGEsRUFBRzdDLElBQWEsQ0FDaEQsR0FBSVosRUFBRyxhQUFlcWUsR0FBUyxPQUM5QixVQUFXcEIsS0FBWW9CLEVBQVNwQixFQUFBQSxPQUVoQ3JjLEdBQVUsV0FBQSxFQUNWcWQsR0FBUyxPQUFPamUsQ0FBRSxDQUVwQixDQUFDLEVBQUUsUUFBUUEsRUFBSSxDQUNkLGdCQUFpQixDQUFDLFFBQVMsUUFBUSxFQUNuQyxXQUFZLEdBQ1osVUFBVyxHQUNYLFFBQVMsRUFBQSxDQUNULEdBRUZxZSxFQUFRLEtBQUssSUFBTXBCLEVBQVNtQixDQUE0QixDQUFDLENBQzFELEVBUWFFLEdBQWV0ZSxHQUMzQkEsYUFBYyxhQUNkLGFBQWNBLEdBQ2QsRUFBRUEsYUFBYyxtQkNsTlh1ZSxHQUFrQixJQUFJQyxFQUFPLFlBQVksTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQ3REQyxHQUFXLElBQUlELEVBQU8sS0FBSyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FDeENFLEdBQVcsSUFBSUYsRUFBTyxLQUFLLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUN4Q0csR0FBZSxJQUFJSCxFQUFPLFNBQVMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQ2hESSxHQUFpQixJQUFJSixFQUFPLFdBQVcsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQ3BESyxHQUFTLDBEQUNUOWIsR0FBUyw2QkFDVCtiLEdBQVMsMkJBQ1RDLEVBQVMsd0JBQ1RDLEdBQ0wscUZBbURNLFNBQVNDLEdBQ2Y5ZSxFQUNBaWQsRUFBTyxHQUNOLENBQ0QsR0FBSzVkLEdBWUwsSUFYSyxPQUFPLE9BQ1gsT0FBTyxLQUFPLENBQUEsRUFDZCxPQUFPLEtBQUssS0FBSyxDQUFDLGtDQUFrQyxDQUFDLEVBQ3JELE9BQU8sS0FBSyxLQUFLLENBQUMsb0JBQW9CLENBQUMsRUFDdkMsT0FBTyxLQUFLLEtBQUssQ0FBQyxnQkFBaUIsV0FBV3NmLEVBQU0sYUFBYSxDQUFDLEdBRTlELE9BQU8sT0FDWCxPQUFPLEtBQU8sT0FBTyxNQUFRLENBQUEsRUFDN0IsT0FBTyxLQUFLLEtBQUssQ0FBRSxnQkFBaUIsS0FBSyxJQUFBLEVBQU8sTUFBTyxZQUFhLEdBR2pFM2UsSUFBVyxPQUFRLENBQ3RCLE9BQU8sY0FBZ0IsQ0FDdEIsUUFBUyxPQUFPLFNBQVMsV0FBYSxZQUN0QyxHQUFHLE9BQU8sY0FDVixHQUFHaWQsQ0FBQSxFQUVKLEtBQU0sQ0FBRSxRQUFBOEIsRUFBUyxRQUFBQyxFQUFTLFNBQUFDLEVBQVUsbUJBQUFDLENBQUEsRUFDbkMsT0FBTyxjQUdSLEdBRElELEdBQVUsT0FBTyxLQUFLLEtBQUssQ0FBQyxZQUFhQSxDQUFRLENBQUMsRUFDbERELEVBQVMsQ0FDUkQsSUFBWSxVQUFVSSxHQUFBLEVBQzFCLE1BQU1DLEVBQU1GLEVBQ1QsNEJBQTRCUCxFQUFNLGNBQWNPLENBQWtCLE1BQ2xFLDRCQUE0QlAsRUFBTSxhQUVyQyxTQUFTLGNBQWMsZUFBZVMsQ0FBRyxJQUFJLEdBQzVDLFNBQVMsS0FBSyxPQUNiLE9BQU8sT0FBTyxTQUFTLGNBQWMsUUFBUSxFQUFHLENBQy9DLE1BQU8sR0FDUCxJQUFBQSxDQUFBLENBQ0EsQ0FBQSxDQUVKLENBQ0QsQ0FFQSxHQUFJLE9BQU8sZUFBZSxVQUFZLEdBQ3RDLElBQUksT0FBTyxlQUFlLFVBQVksUUFDckMsT0FBTyxRQUFRLEtBQUssY0FBY3BmLENBQU0sTUFBT2lkLEVBQU0sR0FBRyxFQUV6RCxHQUFJamQsSUFBVyxXQUFZLENBQzFCLEtBQU0sQ0FBRSxJQUFBcWYsRUFBSyxNQUFBQyxDQUFBLEVBQVVyQyxFQUN2QixPQUFPLEtBQUssS0FBSyxDQUFDLGVBQWdCb0MsR0FBTyxTQUFTLElBQUksQ0FBQyxFQUN2RCxPQUFPLEtBQUssS0FBSyxDQUFDLG1CQUFvQkMsR0FBUyxTQUFTLEtBQUssQ0FBQyxFQUM5RCxPQUFPLEtBQUssS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUNuQyxTQUFXdGYsSUFBVyxRQUFTLENBQzlCLEtBQU0sQ0FBRSxTQUFBdWYsRUFBVSxPQUFBdmYsRUFBUSxLQUFBRixFQUFNLE1BQUFkLEdBQVVpZSxFQUNwQ3JjLEVBQVEsQ0FBQyxhQUFjMmUsRUFBVXZmLEVBQVFGLEVBQU1kLENBQUssRUFJMUQsSUFBSXFnQixFQUFNLFNBQVMsS0FDbkIsT0FBTyxLQUFLLEtBQUssQ0FDaEIsVUFBWSxDQUNYQSxFQUFNLEtBQUssY0FBQSxDQUNaLENBQUEsQ0FDQSxFQUNELE9BQU8sS0FBSyxLQUFLLENBQUMsZUFBZ0JBLEVBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDcEQsT0FBTyxLQUFLLEtBQUt6ZSxFQUFNLE9BQVEySSxHQUFNQSxJQUFNLE1BQVMsQ0FBQyxFQUNyRCxPQUFPLEtBQUssS0FBSyxDQUFDLGVBQWdCOFYsQ0FBRyxDQUFDLENBQ3ZDLFNBQVdyZixJQUFXLFNBQVUsQ0FDL0IsS0FBTSxDQUNMLE1BQUFrRyxFQUNBLFNBQUFxWixFQUFXLEdBQ1gsUUFBQUMsRUFBVSxFQUFBLEVBQ1B2QyxFQUNKLE9BQU8sS0FBSyxLQUFLLENBQUMsa0JBQW1CL1csRUFBT3FaLEVBQVVDLENBQU8sQ0FBQyxDQUMvRCxNQUFXeGYsSUFBVyxVQUNyQixPQUFPLEtBQUssS0FBS2lkLENBQWtDLEdBRXJELENBRUEsU0FBU2tDLElBQWUsQ0FJdkIsR0FGQyxTQUFTLGVBQWVQLENBQU0sR0FBSyxPQUFPLGFBQWEsUUFBUUEsQ0FBTSxFQUVuRCxPQUVuQixTQUFTLEtBQUssbUJBQ2IsYUFDQSxlQUFlQSxDQUFNO0FBQUEsT0FDaEJBLENBQU07QUFBQSxPQUNOQSxDQUFNO0FBQUEsT0FDTkEsQ0FBTTtBQUFBLE9BQ05BLENBQU07QUFBQSxPQUNOQSxDQUFNO0FBQUEsT0FDTkEsQ0FBTTtBQUFBO0FBQUEsMkJBRWNDLEVBQVU7QUFBQTtBQUFBLFlBQUEsRUFJcEMsTUFBTVksRUFBUyxTQUFTLGVBQWViLENBQU0sRUFDdkNjLEVBQVUsSUFBTSxPQUFPLGFBQWEsUUFBUWQsRUFBUSxNQUFNLEVBQ2hFYSxFQUFPLGlCQUFpQixRQUFTQyxFQUFTLENBQUUsS0FBTSxHQUFNLEVBQ3hERCxFQUFPLEtBQUEsQ0FDUixDQUVBLFNBQVNFLEdBQVkvZSxFQUFjLENBQzlCLE9BQU8sZUFBZSxTQUFTLFdBQVdnZixHQUFjLEVBQUdoZixDQUFLLENBQ3JFLENBRUEsU0FBU2dmLEdBQWEsQ0FBRSxLQUFBemYsRUFBTSxPQUFBb0QsR0FBaUIsQ0FDOUMsTUFBTTFELEVBQUtNLElBQVMsUUFBV29ELEdBQW9CLFVBQVVtYixFQUFNLEVBQUluYixFQUN2RSxHQUFJLEVBQUUxRCxhQUFjLFVBQVlBLEVBQUcsUUFBUSwyQkFBMkIsRUFDckUsT0FFRCxJQUFJRyxFQUFTLFFBQ1R1ZixFQUFXLFNBQ1h6ZixFQUFPOEIsR0FBTS9CLENBQUUsR0FBS2dnQixHQUFRaGdCLENBQUUsR0FBS0QsRUFBS0MsRUFBSSxjQUFjLEdBQUssR0FFbkUsR0FBSU0sSUFBUyxTQUNab2YsRUFBVyxPQUNYdmYsRUFBUyxTQUNURixFQUFPQSxHQUFRLFNBQVMsY0FDZEssSUFBUyxTQUFVLENBQzdCLEdBQUksQ0FBQ04sRUFBRyxRQUFRLGNBQWMsRUFBRyxPQUNqQzBmLEVBQVcsU0FDWHZmLEVBQVMsTUFDVixTQUFXRyxJQUFTLFNBQVUsQ0FDN0IsTUFBTUEsRUFBT1AsRUFBS0MsRUFBSSxNQUFNLEVBQ3RCaWdCLEVBQ0wzZixJQUFTLFlBQWNBLElBQVMsUUFBVU4sRUFBRyxRQUFRLFVBQVUsRUFBSSxLQUVwRTBmLEVBQVcsT0FDWHZmLEVBQVMsU0FDVEYsRUFDQzhCLEdBQU1rZSxHQUFTamdCLENBQUUsR0FDakJrRSxHQUFLK2IsR0FBTyxjQUFjLFFBQVEsQ0FBQyxHQUNuQy9iLEdBQU1sRSxHQUF5QixTQUFTLENBQUMsQ0FBQyxDQUM1QyxTQUFXRCxFQUFLQyxFQUFJLE1BQU0sSUFBTSxNQUMvQjBmLEVBQVcsTUFDWHZmLEVBQVMsbUJBQ0NKLEVBQUtDLEVBQUksZUFBZSxFQUFHLENBQ3JDLEdBQUksQ0FBQ2tnQixHQUFRbGdCLENBQUUsR0FBRyxRQUFRLGVBQWUsRUFBRyxPQUM1QzBmLEVBQVcxZixFQUFHLFFBQVEyZSxFQUFZLEVBQUksV0FBYSxVQUNuRHhlLEVBQVMsTUFDVixTQUFXSCxFQUFHLFNBQVMsU0FBUyxTQUFTLEVBQUcsQ0FDM0MsR0FBSSxDQUFFQSxFQUFHLGNBQXFDLEtBQU0sT0FDcEQwZixFQUFXLFVBQ1h2ZixFQUFTLE1BQ1YsU0FBV0osRUFBS0MsRUFBSSxjQUFjLElBQU0sc0JBQXVCLENBQzlELE1BQU1tZ0IsRUFBT0MsR0FBTXBnQixFQUFJLHlCQUF5QixJQUFNLE9BQ3REMGYsRUFBVyxVQUNYdmYsRUFBU2dnQixFQUFPLFNBQVcsV0FDM0JsZ0IsRUFBUWtnQixHQUFRcGdCLEVBQUtDLEVBQUksY0FBYyxHQUFNa0UsR0FBS2xFLENBQUUsQ0FDckQsU0FBV0EsRUFBRyxRQUFRdWUsRUFBZSxFQUNwQ21CLEVBQVcsY0FDWHZmLEVBQVMsbUJBQ0NILEVBQUcsUUFBUTRlLEVBQWMsRUFDbkNjLEVBQVcsY0FDWHZmLEVBQVMsbUJBQ0NILEVBQUcsUUFBUXllLEVBQVEsRUFDN0JpQixFQUFXLE9BQ1h2ZixFQUFTSCxhQUFjLGtCQUFvQixXQUFhLGdCQUM5Q0EsRUFBRyxRQUFRMGUsRUFBUSxFQUM3QmdCLEVBQVcsT0FDWHZmLEVBQVNILEVBQUcsYUFBYSxnQkFBZ0IsRUFBSSxTQUFXLGdCQUM5Q0EsRUFBRyxRQUFRLGVBQWUsRUFDcEMwZixFQUFXLFFBQ1h2ZixFQUFTLGVBQ0NILGFBQWMsa0JBQ3hCMGYsRUFBVyxPQUNYdmYsRUFBU0gsRUFBRyxXQUFhLFVBQVksUUFBVSxXQUMzQ0EsRUFBRyxhQUFhLFVBQVUsRUFBR0csRUFBUyxXQUNqQ0gsRUFBRyxNQUFRQSxFQUFHLEtBQUssV0FBVyxTQUFTLEtBQUssTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQ2pFRyxFQUFTLGtCQUNBSCxFQUFHLGFBQWEsZUFBZSxFQUFHLENBQzVDLEdBQUlELEVBQUtDLEVBQUksZUFBZSxJQUFNLE9BQVEsT0FDMUMwZixFQUFXLFNBQ1h2ZixFQUFTLE1BQ1YsQ0FHQThlLEdBQVUsUUFBUyxDQUNsQixTQUFVbGYsRUFBS0MsRUFBSSx5QkFBeUIsR0FBSzBmLEVBQ2pELE9BQVEzZixFQUFLQyxFQUFJLHVCQUF1QixHQUFLRyxFQUM3QyxLQUFNSixFQUFLQyxFQUFJLHFCQUFxQixHQUFLQyxDQUFBLENBQ3pDLENBQ0YsQ0FHQSxNQUFNaUUsR0FBUWxFLEdBQXdCQSxHQUFJLGFBQWEsUUFBVSxHQUMzRCtCLEdBQVMvQixHQUF5QkEsR0FBTUQsRUFBS0MsRUFBSSxZQUFZLEdBQU0sR0FDbkVrZ0IsR0FBV2xnQixHQUNoQixTQUFTLGVBQWVELEVBQUtDLEVBQUksZUFBZSxHQUFLLEVBQUUsRUFDbERvZ0IsR0FBUSxDQUFDcGdCLEVBQWFkLElBQzNCLE9BQU8saUJBQWlCYyxDQUFFLEVBQUUsaUJBQWlCZCxDQUFHLEdBQUcsS0FBQSxFQUM5QzhnQixHQUFXaGdCLEdBQWdCLENBQ2hDLE1BQU13WCxFQUFPdFQsR0FBS2xFLENBQUUsRUFDZHFnQixFQUFPbmMsR0FBS2xFLEVBQUcsY0FBYyxtQkFBbUIsQ0FBQyxFQUN2RCxPQUFRd1gsRUFBSyxXQUFXNkksQ0FBSSxHQUFLQSxHQUFTN0ksRUFBSyxNQUFNLEVBQUcsR0FBRyxFQUFFLEtBQUEsQ0FDOUQsRUFFQStGLEVBQVMsSUFBTWhkLEVBQUcsU0FBVXdDLEdBQVErYyxHQUFhL0MsQ0FBVyxDQUFDLEVDdlE1RCxPQUFPLE9BQVcsS0FDbEIsT0FBTyxlQUNQLFNBQVMscUJBRVIsSUFBTSxDQUNOLE1BQU03ZCxFQUFNLHNCQUNOb2hCLEVBQVEsSUFBSSxjQUNaM2IsRUFBTyxJQUFNLENBQUMsT0FBTyxhQUFhLFFBQVF6RixDQUFHLEdBQUcsU0FBUyxPQUFPLEVBRXRFLFNBQVMsbUJBQW1CLEtBQUtvaEIsQ0FBSyxFQUN0QyxPQUFPLHNCQUF5QkMsR0FBVSxDQUN6QyxHQUFJLENBQ0gsTUFBTTNiLEVBQU8yYixHQUFTLENBQUM1YixFQUFJLEVBQzNCMmIsRUFBTSxjQUFjLFdBQVdwaEIsQ0FBRyxTQUFTQSxDQUFHLEtBQUswRixDQUFJLElBQUksRUFDM0QsT0FBTyxhQUFhLFFBQVExRixFQUFLMEYsQ0FBSSxDQUN0QyxNQUFlLENBQUMsQ0FDakIsRUFHQSxPQUFPLHNCQUFzQkQsR0FBTSxDQUNwQyxHQUFDLEVDakJGLE1BQU02YixHQUFVaEMsRUFBTyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFDakNpQyxHQUFhakMsRUFBTyxPQUFPLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFDdkNrQyxHQUFhLHVDQUNiQyxHQUFjLElBQUlILEVBQU8sY0FBY0EsRUFBTyxpQkFFOUNJLEdBQWlCM0QsR0FBeUIsQ0FDMUMsU0FBUyxvQkFDVCxTQUFTLG9CQUFvQkEsQ0FBUSxFQURQQSxFQUFBLENBRXBDLEVBRWE0RCxHQUFxQk4sR0FFakNLLEdBQWMsSUFBTSxPQUFPLHdCQUF3QkwsQ0FBSyxDQUFDLEVBRTFELFNBQVNPLEdBQXFCLENBQUUsT0FBUTlnQixFQUFJLGlCQUFrQitnQixHQUFlLENBQzVFLE1BQU1DLEVBQVFoaEIsR0FBZ0IsVUFBVSxHQUFHLEVBQzNDLEdBQUlnaEIsR0FBTSxRQUFRLFFBQVEsR0FBS0EsR0FBTSxRQUFRTCxFQUFXLEVBQ3ZELE9BQU9NLEdBQUEsRUFFUixHQUFJRixHQUFRLEVBQUUvZ0IsYUFBYyxvQkFBc0IsQ0FBQ0EsRUFBRyxRQUFRMGdCLEVBQVUsRUFDdkUsT0FDaUIsaUJBQWlCMWdCLENBQUUsRUFBRSxXQUFhLFNBRXJDNmdCLEdBQUEsRUFFZEQsR0FBYyxJQUFNLENBQ25CLE1BQU1NLEVBQVUsU0FBUyxjQUFpQ1AsRUFBVyxFQUNyRU8sR0FBUyxhQUFhLGdCQUFpQixLQUFLLEVBQzVDQSxHQUFTLFVBQUEsQ0FDVixDQUFDLENBQ0gsQ0FFQSxTQUFTRCxJQUFlLENBQ3ZCLFNBQVMsY0FBaUNOLEVBQVcsR0FBRyxNQUFBLENBQ3pELENBR0EsSUFBSVEsR0FBUSxFQUNSQyxHQUNBQyxHQUFRLEVBQ1JDLEVBQ0FDLEdBQVUsRUFDVkMsR0FBVSxFQUNWQyxHQUFRLEdBQ1JDLEdBQVEsRUFDUkMsR0FBUSxFQUVaLFNBQVNDLEdBQWUsQ0FBQ0MsQ0FBTSxFQUFrQyxDQUNoRVAsRUFBV08sRUFDWEMsR0FBQSxDQUNELENBRUEsU0FBU0EsSUFBa0IsQ0FDMUIsR0FBSSxDQUFDUixHQUFVLFlBQWEsT0FDNUIsTUFBTVMsRUFBUyxPQUFPLFFBQ2hCQyxFQUFVRCxFQUFTSixHQUN6QkEsR0FBUUksRUFHSkMsSUFBWVosS0FDZkQsSUFBU0csRUFBUyxlQUFlLHNCQUFBLEVBQXdCLEtBQU8sR0FBS0ssR0FDckVQLEdBQVlZLEVBQ1pULEdBQVVELEVBQVMsYUFDbkJFLEdBQVVGLEVBQVMsc0JBQUEsRUFBd0IsSUFBTUssR0FDakRGLEdBQVFILEVBQVMsY0FBZ0IsT0FBTyxZQUN4Q0ksR0FBUSxPQUFPLGFBR1osRUFBQUwsS0FBVSxJQUFNSSxNQUNoQkosS0FBVSxLQUFPSSxJQUFVTCxJQUFhTyxJQUFTSCxLQUNwREYsRUFBUyxNQUFNLFlBQVksUUFBUyxRQUFRLEVBQzVDQSxFQUFTLE1BQU0sWUFBWSxRQUFTLEtBQUssRUFDekNELEdBQVEsSUFDRUEsS0FBVSxJQUFNLENBQUNELElBQzNCRSxFQUFTLE1BQU0sWUFBWSxRQUFTLFVBQVUsRUFDOUNBLEVBQVMsTUFBTSxZQUFZLFFBQVMsR0FBRyxLQUFLLElBQUksRUFBR0ssR0FBUVIsRUFBSyxDQUFDLElBQUksRUFDckVFLEdBQVEsR0FDRUEsS0FBVSxHQUFLLENBQUNELElBQWFPLEdBQVFELElBQVNGLEdBQVVELElBQ2xFRCxFQUFTLE1BQU0sWUFBWSxRQUFTLFFBQVEsRUFDNUNBLEVBQVMsTUFBTSxZQUFZLFFBQVMsR0FBR0ksR0FBUUgsRUFBTyxJQUFJLEVBQzFERixHQUFRLEdBQ0VBLEtBQVUsR0FBS0QsS0FDekJFLEVBQVMsTUFBTSxZQUFZLFFBQVMsVUFBVSxFQUM5Q0EsRUFBUyxNQUFNLFlBQVksUUFBUyxHQUFHRSxHQUFVTCxFQUFLLElBQUksRUFDMURFLEdBQVEsR0FFVixDQUVBOUQsRUFBUyxJQUFNLENBQ2RXLEdBQVcsU0FBUyxnQkFBaUJ1QyxHQUFZbUIsRUFBYyxFQUMvRHJoQixFQUFHLFNBQVUsUUFBU3VnQixHQUFzQi9ELENBQVcsRUFDdkR4YyxFQUFHLE9BQVEsU0FBVXljLEdBQVNpRSxHQUFjLEdBQUcsRUFBR2xFLENBQVcsRUFDN0R4YyxFQUFHLE9BQVEsU0FBVXVoQixHQUFpQi9FLENBQVcsQ0FDbEQsQ0FBQyxFQ2pHRCxNQUFNa0YsR0FBVyxDQUNoQkMsRUFDQTVZLEVBQ0E2WSxFQUFPLE9BQU8sb0JBQ1YsQ0FDSixNQUFNQyxHQUFVRCxFQUFPLEdBQUssRUFDdEJyWSxFQUFRLEtBQUssSUFBSSxLQUFLLElBQUlvWSxFQUFNLEtBQUssTUFBTUUsQ0FBTSxFQUFHOVksRUFBTTZZLEVBQU8sQ0FBQyxFQUFHLENBQUMsRUFDdEVwWSxFQUFNLEtBQUssSUFBSSxLQUFLLElBQUltWSxFQUFNLEtBQUssS0FBS0UsQ0FBTSxFQUFHRCxDQUFJLEVBQUc3WSxDQUFHLEVBQzNEK1ksRUFBUSxNQUFNLEtBQUssQ0FBRSxPQUFRdFksRUFBTSxFQUFJRCxDQUFBLEVBQVMsQ0FBQ3JHLEVBQUdrRCxJQUFNQSxFQUFJbUQsQ0FBSyxFQUV6RSxPQUFJcVksRUFBTyxHQUFLclksRUFBUSxLQUFTLE9BQU8sRUFBRyxFQUFHLEVBQUcsQ0FBQyxFQUM5Q3FZLEVBQU8sR0FBS3BZLEVBQU1ULEtBQVcsT0FBTyxHQUFJLEVBQUcsRUFBR0EsQ0FBRyxFQUM5QytZLENBQ1IsRUFFYUMsR0FBYSxDQUFDLENBQUUsUUFBQUMsRUFBVSxFQUFHLE1BQUFDLEVBQVEsR0FBSSxLQUFBTCxFQUFPLE1BQVMsQ0FDckUsS0FBTUksRUFBVSxFQUFJQSxFQUFVLEVBQUksRUFDbEMsS0FBTUEsRUFBVUMsRUFBUUQsRUFBVSxFQUFJLEVBQ3RDLE1BQU9OLEdBQVNNLEVBQVNDLEVBQU9MLENBQUksRUFBRSxJQUFJLENBQUNNLEVBQU1sYixLQUFXLENBQzNELFFBQVNrYixJQUFTRixHQUFZLE9BQzlCLElBQUssT0FBT0UsQ0FBSSxJQUFJbGIsQ0FBSyxHQUN6QixLQUFBa2IsQ0FBQSxFQUNDLENBQ0gsR0N2QkEsU0FBU0MsR0FBRUMsRUFBRSxDQUFDLElBQUlDLEVBQUVDLEVBQUVDLEVBQUUsR0FBRyxHQUFhLE9BQU9ILEdBQWpCLFVBQThCLE9BQU9BLEdBQWpCLFNBQW1CRyxHQUFHSCxVQUFvQixPQUFPQSxHQUFqQixTQUFtQixHQUFHLE1BQU0sUUFBUUEsQ0FBQyxFQUFFLENBQUMsSUFBSXBjLEVBQUVvYyxFQUFFLE9BQU8sSUFBSUMsRUFBRSxFQUFFQSxFQUFFcmMsRUFBRXFjLElBQUlELEVBQUVDLENBQUMsSUFBSUMsRUFBRUgsR0FBRUMsRUFBRUMsQ0FBQyxDQUFDLEtBQUtFLElBQUlBLEdBQUcsS0FBS0EsR0FBR0QsRUFBRSxLQUFNLEtBQUlBLEtBQUtGLEVBQUVBLEVBQUVFLENBQUMsSUFBSUMsSUFBSUEsR0FBRyxLQUFLQSxHQUFHRCxHQUFHLE9BQU9DLENBQUMsQ0FBUSxTQUFTQyxJQUFNLENBQUMsUUFBUUosRUFBRUMsRUFBRUMsRUFBRSxFQUFFQyxFQUFFLEdBQUd2YyxFQUFFLFVBQVUsT0FBT3NjLEVBQUV0YyxFQUFFc2MsS0FBS0YsRUFBRSxVQUFVRSxDQUFDLEtBQUtELEVBQUVGLEdBQUVDLENBQUMsS0FBS0csSUFBSUEsR0FBRyxLQUFLQSxHQUFHRixHQUFHLE9BQU9FLENBQUMsQ0NleFcsU0FBU0UsR0FBTUMsRUFBaUJyZCxFQUFvQixHQUFJLENBQzlELE1BQU1zZCxFQUNMLFNBQVMsZUFBZXRkLEVBQUksSUFBTSxFQUFFLEdBQUssU0FBUyxjQUFjLFFBQVEsRUFFekU3RixPQUFBQSxFQUFLbWpCLEVBQVEsWUFBYXRkLEVBQUksS0FBTyxPQUFTLElBQUksRUFDbEQ3RixFQUFLbWpCLEVBQVEsUUFBU0gsR0FBS3ZFLEVBQU8sTUFBTzVZLEVBQUksU0FBUyxDQUFDLEVBQ3ZEN0YsRUFBS21qQixFQUFRLGdCQUFpQnRkLEVBQUksVUFBWSxJQUFJLEVBQ2xEN0YsRUFBS21qQixFQUFRLGFBQWN0ZCxFQUFJLE9BQVMsSUFBSSxFQUM1QzdGLEVBQUttakIsRUFBUSxZQUFhLEdBQUd0ZCxFQUFJLE1BQVEsRUFBRSxJQUFNLElBQUksRUFDckQ3RixFQUFLbWpCLEVBQVEsZUFBZ0IsR0FBR3RkLEVBQUksU0FBVyxFQUFFLElBQU0sSUFBSSxFQUMzRDdGLEVBQUttakIsRUFBUSxLQUFNdGQsRUFBSSxJQUFNLEdBQUcsS0FBSyxJQUFBLENBQUssRUFBRSxFQUM1QzdGLEVBQUttakIsRUFBUSxPQUFRdGQsRUFBSSxPQUFTLEdBQVEsS0FBTyxFQUFFLEVBRW5Ec2QsRUFBTyxVQUFZRCxFQUNuQkMsRUFBTyxpQkFBaUIsZUFBZ0JDLEdBQWtCLENBQUUsS0FBTSxHQUFNLEVBQ3hFLFNBQVMsS0FBSyxZQUFZRCxDQUFNLEVBQ3pCQSxFQUFPLEVBQ2YsQ0FFQSxTQUFTQyxHQUFpQixDQUFFLGNBQUFDLEVBQWUsT0FBQTFmLEdBQW1DLENBQ3pFMGYsSUFBa0I1RSxFQUFPLGFBQzNCOWEsRUFBNkIsT0FBQSxDQUNoQyxDQ2xDQSxNQUFNNmEsR0FBa0JDLEVBQU8sWUFBWSxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBRXZELFNBQVM2RSxHQUEwQkMsRUFBNEMsQ0FDOUUsVUFBV0MsS0FBY0QsRUFDeEJDLEVBQVcsaUJBQWlCLE1BQU0sRUFBRSxRQUFRLENBQUNDLEVBQU9qYyxFQUFPLENBQUUsT0FBQXlELEtBQWEsQ0FDekVqTCxFQUFLeWpCLEVBQU8sZUFBZ0JqYyxJQUFVeUQsRUFBUyxFQUFJLE9BQVMsSUFBSSxDQUNqRSxDQUFDLENBQ0gsQ0FFQXVTLEVBQVMsSUFDUlcsR0FDQyxTQUFTLGdCQUNUSyxHQUNBOEUsRUFBQSxDQUVGLEVDbEJBLE1BQUF6YixHQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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aEMsRUFBSyxLQUFNLGtCQUFtQixJQUFJLEVBQ2xDQSxFQUFLLEtBQU0sZ0JBQWlCLEtBQUssRUFDakNBLEVBQUssS0FBTSxnQkFBaUIsR0FBRyxFQUMvQkEsRUFBSyxLQUFNLGdCQUFpQixHQUFHZ3ZCLENBQVUsRUFBRSxFQUMzQ2h2QixFQUFLLEtBQU0sT0FBUSt1QixFQUFZLE1BQVEsYUFBYSxFQUNwRHBtQixHQUFtQixFQUNyQixDQUNBLElBQUksUUFBUyxDQUNYLE1BQU0zRyxFQUFRLEtBQUssUUFBUSxrQkFBa0IsRUFDdkNDLEVBQU1WLEdBQU0sSUFBSSxFQUN0QixPQUFJUyxJQUFPQSxFQUFNLFFBQVVDLEdBQ2hCZixHQUFRLElBQUksRUFBRSxpQkFDdkIsY0FBY2UsQ0FBRyxJQUN2QixDQUVFLENBQ0EsSUFBSSxVQUFXLENBQ2IsT0FBTyxLQUFLLFFBQVUsS0FBTyxHQUFLLEtBQUssSUFBSSxLQUFLLE1BQVEsS0FBSyxJQUFLLENBQUMsQ0FDckUsQ0FDQSxJQUFJLE9BQVEsQ0FDVixPQUFPZ3RCLEdBQVUsS0FBTSxPQUFPLENBQ2hDLENBQ0EsSUFBSSxNQUFNN3ZCLEVBQU8sQ0FDZjh2QixHQUFVLEtBQU0sUUFBUzl2QixDQUFLLENBQ2hDLENBQ0EsSUFBSSxLQUFNLENBQ1IsT0FBTzZ2QixHQUFVLEtBQU0sS0FBSyxHQUFLLENBQ25DLENBQ0EsSUFBSSxJQUFJMWxCLEVBQUssQ0FDWDJsQixHQUFVLEtBQU0sTUFBTzNsQixDQUFHLENBQzVCLENBQ0YsRUFFQXVsQixHQUFxQixlQUFpQixHQUN0QyxJQUFJSyxHQUFhL3ZCLEdBQVUsQ0FBQyxPQUFPLE1BQU0sT0FBTyxXQUFXLEdBQUdBLENBQUssRUFBRSxDQUFDLEdBQUssT0FBTyxTQUFTLE9BQU9BLENBQUssQ0FBQyxFQUNwRzZ2QixHQUFZLENBQUNodkIsRUFBSWQsSUFBUSxDQUMzQixNQUFNQyxFQUFRWSxFQUFLQyxFQUFJZCxDQUFHLEVBQzFCLE9BQU9nd0IsR0FBVS92QixDQUFLLEVBQUksS0FBSyxJQUFJLEVBQUcsT0FBTyxXQUFXQSxDQUFLLENBQUMsRUFBSSxJQUNwRSxFQUNJOHZCLEdBQVksQ0FBQ2p2QixFQUFJZCxFQUFLeUMsSUFBUSxDQUNoQyxHQUFJQSxJQUFRLE1BQVF1dEIsR0FBVXZ0QixDQUFHLEVBQUc1QixFQUFLQyxFQUFJZCxFQUFLLEdBQUd5QyxDQUFHLEVBQUUsTUFDckQsT0FBTSxJQUFJLE1BQU0sOEJBQThCNUIsQ0FBSSxPQUFPNEIsQ0FBRyxHQUFHLENBQ3RFLEVBQ0EsT0FBQUMsR0FBZSxPQUFPLGFBQWNpdEIsRUFBb0IiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsMTEsMTgsMjcsMjhdfQ==