@mattilsynet/design 1.3.0 → 1.3.2

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 (92) hide show
  1. package/mtds/alert/alert.stories.d.ts +2 -2
  2. package/mtds/app/app-observer.js +1 -1
  3. package/mtds/app/app-toggle.js +26 -14
  4. package/mtds/app/app-toggle.js.map +1 -1
  5. package/mtds/app/app-toggle2.js +14 -26
  6. package/mtds/app/app-toggle2.js.map +1 -1
  7. package/mtds/app/app.js +1 -1
  8. package/mtds/app/app.stories.d.ts +2 -2
  9. package/mtds/avatar/avatar.stories.d.ts +2 -2
  10. package/mtds/badge/badge.stories.d.ts +2 -2
  11. package/mtds/breadcrumbs/breadcrumbs.stories.d.ts +2 -2
  12. package/mtds/button/button.stories.d.ts +2 -2
  13. package/mtds/card/card.stories.d.ts +2 -2
  14. package/mtds/chip/chip.stories.d.ts +2 -2
  15. package/mtds/details/details.stories.d.ts +1 -1
  16. package/mtds/dialog/dialog.stories.d.ts +1 -1
  17. package/mtds/divider/divider.stories.d.ts +1 -1
  18. package/mtds/errorsummary/errorsummary.stories.d.ts +2 -2
  19. package/mtds/external/@u-elements/u-combobox/dist/u-combobox.js +151 -152
  20. package/mtds/external/@u-elements/u-combobox/dist/u-combobox.js.map +1 -1
  21. package/mtds/external/@u-elements/u-datalist/dist/u-datalist.js +55 -57
  22. package/mtds/external/@u-elements/u-datalist/dist/u-datalist.js.map +1 -1
  23. package/mtds/field/field-observer.js +22 -22
  24. package/mtds/field/field-observer.js.map +1 -1
  25. package/mtds/field/field.js +4 -3
  26. package/mtds/field/field.js.map +1 -1
  27. package/mtds/field/field.stories.d.ts +3 -2
  28. package/mtds/fieldset/fieldset-observer.js +20 -15
  29. package/mtds/fieldset/fieldset-observer.js.map +1 -1
  30. package/mtds/fieldset/fieldset.stories.d.ts +1 -1
  31. package/mtds/helptext/helptext.stories.d.ts +1 -1
  32. package/mtds/illustrations/bread.svg +1 -0
  33. package/mtds/illustrations/drop-apple-bread.svg +1 -0
  34. package/mtds/illustrations/drop-apple.svg +1 -0
  35. package/mtds/illustrations/fork-knife-spoon.svg +1 -0
  36. package/mtds/illustrations/fork-knife.svg +1 -0
  37. package/mtds/illustrations/fork.svg +1 -0
  38. package/mtds/illustrations/heart-cat.svg +1 -0
  39. package/mtds/illustrations/heart.svg +1 -0
  40. package/mtds/illustrations/hearts-blue.svg +1 -0
  41. package/mtds/illustrations/hearts-green.svg +1 -0
  42. package/mtds/illustrations/hearts-red.svg +1 -0
  43. package/mtds/illustrations/{illustrations.json → index.json} +139 -1
  44. package/mtds/illustrations/inspector-ai.svg +1 -0
  45. package/mtds/illustrations/inspector-cow.svg +1 -0
  46. package/mtds/illustrations/knife.svg +1 -0
  47. package/mtds/illustrations/person-flask-water-fish-pig.svg +1 -0
  48. package/mtds/illustrations/plane.svg +1 -0
  49. package/mtds/illustrations/plant-dog-fish.svg +1 -0
  50. package/mtds/illustrations/postits.svg +1 -0
  51. package/mtds/illustrations/pregnant-fork-plant.svg +1 -0
  52. package/mtds/illustrations/pregnant-fork.svg +1 -0
  53. package/mtds/illustrations/ship.svg +1 -0
  54. package/mtds/illustrations/spoon.svg +1 -0
  55. package/mtds/illustrations/star-1.svg +1 -0
  56. package/mtds/illustrations/star-2.svg +1 -0
  57. package/mtds/illustrations/stars.svg +1 -0
  58. package/mtds/illustrations/turnip-meat.svg +1 -0
  59. package/mtds/index.d.ts +1 -0
  60. package/mtds/index.iife.js +8 -7
  61. package/mtds/input/input.stories.d.ts +2 -2
  62. package/mtds/layout/layout.stories.d.ts +2 -2
  63. package/mtds/link/link.stories.d.ts +1 -1
  64. package/mtds/logo/logo.stories.d.ts +2 -2
  65. package/mtds/package.json.js +1 -1
  66. package/mtds/pagination/pagination.stories.d.ts +1 -1
  67. package/mtds/popover/popover.stories.d.ts +1 -1
  68. package/mtds/progress/progress.stories.d.ts +2 -2
  69. package/mtds/react.d.ts +2 -1
  70. package/mtds/react.js +48 -46
  71. package/mtds/react.js.map +1 -1
  72. package/mtds/skeleton/skeleton.stories.d.ts +1 -1
  73. package/mtds/spinner/spinner.stories.d.ts +2 -2
  74. package/mtds/steps/steps-observer.d.ts +1 -0
  75. package/mtds/steps/steps.d.ts +8 -0
  76. package/mtds/steps/steps.js +11 -0
  77. package/mtds/steps/steps.js.map +1 -0
  78. package/mtds/steps/steps.stories.d.ts +20 -0
  79. package/mtds/styles.css +1 -1
  80. package/mtds/styles.json +40 -39
  81. package/mtds/styles.module.css.js +40 -38
  82. package/mtds/styles.module.css.js.map +1 -1
  83. package/mtds/table/table.stories.d.ts +2 -2
  84. package/mtds/tabs/tabs.stories.d.ts +3 -1
  85. package/mtds/tag/tag.stories.d.ts +2 -2
  86. package/mtds/togglegroup/togglegroup.stories.d.ts +1 -1
  87. package/mtds/tooltip/tooltip.stories.d.ts +2 -2
  88. package/mtds/typography/typography.d.ts +1 -0
  89. package/mtds/typography/typography.js.map +1 -1
  90. package/mtds/typography/typography.stories.d.ts +2 -2
  91. package/mtds/validation/validation.stories.d.ts +1 -1
  92. package/package.json +10 -14
@@ -1,21 +1,22 @@
1
- var mtds=function(S){"use strict";var Tt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",ao=Tt&&/android/i.test(navigator.userAgent),te;Tt&&/^Mac/i.test(((te=navigator.userAgentData)==null?void 0:te.platform)||navigator.platform);var ro=`${ao?"data":"aria"}-labelledby`,xt=":host(:not([hidden])) { display: block }",ot=typeof HTMLElement>"u"?class{}:HTMLElement;function T(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var ee=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},lo=(t,...e)=>ee("add",t,e),co=(t,...e)=>ee("remove",t,e),it=(t,e)=>t.attachShadow({mode:"open"}).append(se("slot"),se("style",e)),st=new WeakMap,ne=(t,e)=>{if(e===void 0)return st.get(t);try{st.get(t).disconnect(),st.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),st.set(t,n)}},uo=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},oe=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},fo=0,ie=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++fo).toString(32)}`),t.id):"",se=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},at={define:(t,e)=>!Tt||window.customElements.get(t)||window.customElements.define(t,e)},rt="aria-controls",F="aria-selected",ae=class extends ot{constructor(){super(),it(this,xt)}get tabList(){return lt("u-tablist",this)[0]||null}get selectedIndex(){return dt(this.tabs)}set selectedIndex(t){At(this.tabs[t])}get tabs(){return lt("u-tab",this)}get panels(){return lt("u-tabpanel",this)}},re=class extends ot{constructor(){super(),it(this,xt)}connectedCallback(){T(this,"role","tablist"),lo(this,"click,keydown",this),ne(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){co(this,"click,keydown",this),ne(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s==null?void 0:s.setAttribute(F,"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"&&At(n[o]),t.type==="keydown"&&!uo(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=dt(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 dt(this.tabs)}set selectedIndex(t){At(this.tabs[t])}},Ct=!1,le=class extends ot{static get observedAttributes(){return["id",F,rt]}constructor(){super(),it(this,":host(:not([hidden])) { cursor: pointer; display: inline-block }")}connectedCallback(){T(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!Ct&&this.selected&&this.tabList){Ct=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=lt("u-tabpanel",this.tabsElement||this),n=kt(this,e[t.indexOf(this)]);n&&T(n,ro,ie(this)),t.forEach((o,i)=>{const s=kt(o,e[i]);o.tabIndex=o===this?0:-1,T(o,F,`${o===this}`),s&&(s.hidden=s!==n),s&&T(o,rt,s.id)}),Ct=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return(t==null?void 0:t.nodeName)==="U-TABLIST"?t:null}get selected(){return T(this,F)==="true"}set selected(t){T(this,F,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return kt(this)}},de=class extends ot{static get observedAttributes(){return["hidden"]}constructor(){super(),it(this,xt)}connectedCallback(){T(this,"role","tabpanel"),this.hidden=dt(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){this.hidden||po(this.firstChild)?T(this,"tabindex",null):this.tabIndex=0}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${rt}="${this.id}"]`;return oe(this).querySelectorAll(t)}},lt=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),kt=(t,e)=>{const n=T(t,rt)||ie(e),o=oe(t).getElementById(n);return(o==null?void 0:o.nodeName)==="U-TABPANEL"?o:null},dt=t=>[...t].findIndex(e=>T(e,F)==="true"),At=t=>t&&T(t,"aria-selected","true"),po=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');at.define("u-tabs",ae),at.define("u-tablist",re),at.define("u-tab",le),at.define("u-tabpanel",de);var mo=Object.defineProperty,ce=Object.getOwnPropertySymbols,ho=Object.prototype.hasOwnProperty,bo=Object.prototype.propertyIsEnumerable,ue=(t,e,n)=>e in t?mo(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,vo=(t,e)=>{for(var n in e||(e={}))ho.call(e,n)&&ue(t,n,e[n]);if(ce)for(var n of ce(e))bo.call(e,n)&&ue(t,n,e[n]);return t},X=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",fe=X&&/android/i.test(navigator.userAgent),_o=X&&/firefox/i.test(navigator.userAgent),go=X&&/iPad|iPhone|iPod/.test(navigator.userAgent),pe;X&&/^Mac/i.test(((pe=navigator.userAgentData)==null?void 0:pe.platform)||navigator.platform);var yo="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",Eo=typeof HTMLElement>"u"?class{}:HTMLElement;function f(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var me=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},It=(t,...e)=>me("add",t,e),wo=(t,...e)=>me("remove",t,e),ct=new WeakMap,Lt=(t,e)=>{if(e===void 0)return ct.get(t);try{ct.get(t).disconnect(),ct.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),ct.set(t,n)}},$o=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},So=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},To=0,xo=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++To).toString(32)}`),t.id):"",z=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))f(o,i,s);return o},Co={define:(t,e)=>!X||window.customElements.get(t)||window.customElements.define(t,e)},ko=t=>{const e=z("div");return e.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",f(e,"aria-live",t),e},he=(t,e,n="")=>{var o,i;const s={bubbles:!0,composed:!0,data:e,inputType:n},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(o=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:o.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},H,Ao=0,Mt=!1,be="beforeinput,blur,focus,click,input,keydown,mousedown,mouseup",ve={once:!0,passive:!0},Io=_o&&!fe,Lo=fe||go,ut="false",Mo="insertReplacementText",ft={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},pt=class extends Eo{constructor(){super(),this._speak="",this._texts=vo({},ft),this._value="",this.attachShadow({mode:"open"}).append(z("slot"),z("style",`:host(:not([hidden])) { display: block; cursor: pointer; -webkit-tap-highlight-color: rgba(0, 0, 0, 0) } /* Must be display block in Safari to allow focus inside */
1
+ var mtds=function($){"use strict";var _t=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",ao=_t&&/android/i.test(navigator.userAgent),jt;_t&&/^Mac/i.test(((jt=navigator.userAgentData)==null?void 0:jt.platform)||navigator.platform);var ro=`${ao?"data":"aria"}-labelledby`,bt=":host(:not([hidden])) { display: block }",X=typeof HTMLElement>"u"?class{}:HTMLElement;function S(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var Kt=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},lo=(t,...e)=>Kt("add",t,e),co=(t,...e)=>Kt("remove",t,e),z=(t,e)=>t.attachShadow({mode:"open"}).append(Qt("slot"),Qt("style",e)),Q=new WeakMap,Gt=(t,e)=>{if(e===void 0)return Q.get(t);try{Q.get(t).disconnect(),Q.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),Q.set(t,n)}},uo=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Xt=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},po=0,zt=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++po).toString(32)}`),t.id):"",Qt=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},J={define:(t,e)=>!_t||window.customElements.get(t)||window.customElements.define(t,e)},Z="aria-controls",R="aria-selected",Jt=class extends X{constructor(){super(),z(this,bt)}get tabList(){return tt("u-tablist",this)[0]||null}get selectedIndex(){return et(this.tabs)}set selectedIndex(t){wt(this.tabs[t])}get tabs(){return tt("u-tab",this)}get panels(){return tt("u-tabpanel",this)}},Zt=class extends X{constructor(){super(),z(this,bt)}connectedCallback(){S(this,"role","tablist"),lo(this,"click,keydown",this),Gt(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){co(this,"click,keydown",this),Gt(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s==null?void 0:s.setAttribute(R,"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"&&wt(n[o]),t.type==="keydown"&&!uo(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=et(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 et(this.tabs)}set selectedIndex(t){wt(this.tabs[t])}},gt=!1,te=class extends X{static get observedAttributes(){return["id",R,Z]}constructor(){super(),z(this,":host(:not([hidden])) { cursor: pointer; display: inline-block }")}connectedCallback(){S(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!gt&&this.selected&&this.tabList){gt=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=tt("u-tabpanel",this.tabsElement||this),n=yt(this,e[t.indexOf(this)]);n&&S(n,ro,zt(this)),t.forEach((o,i)=>{const s=yt(o,e[i]);o.tabIndex=o===this?0:-1,S(o,R,`${o===this}`),s&&(s.hidden=s!==n),s&&S(o,Z,s.id)}),gt=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return(t==null?void 0:t.nodeName)==="U-TABLIST"?t:null}get selected(){return S(this,R)==="true"}set selected(t){S(this,R,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return yt(this)}},ee=class extends X{static get observedAttributes(){return["hidden"]}constructor(){super(),z(this,bt)}connectedCallback(){S(this,"role","tabpanel"),this.hidden=et(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){this.hidden||fo(this.firstChild)?S(this,"tabindex",null):this.tabIndex=0}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${Z}="${this.id}"]`;return Xt(this).querySelectorAll(t)}},tt=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),yt=(t,e)=>{const n=S(t,Z)||zt(e),o=Xt(t).getElementById(n);return(o==null?void 0:o.nodeName)==="U-TABPANEL"?o:null},et=t=>[...t].findIndex(e=>S(e,R)==="true"),wt=t=>t&&S(t,"aria-selected","true"),fo=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');J.define("u-tabs",Jt),J.define("u-tablist",Zt),J.define("u-tab",te),J.define("u-tabpanel",ee);var ho=Object.defineProperty,ne=Object.getOwnPropertySymbols,mo=Object.prototype.hasOwnProperty,vo=Object.prototype.propertyIsEnumerable,oe=(t,e,n)=>e in t?ho(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,_o=(t,e)=>{for(var n in e||(e={}))mo.call(e,n)&&oe(t,n,e[n]);if(ne)for(var n of ne(e))vo.call(e,n)&&oe(t,n,e[n]);return t},W=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",ie=W&&/android/i.test(navigator.userAgent),bo=W&&/firefox/i.test(navigator.userAgent),go=W&&/iPad|iPhone|iPod/.test(navigator.userAgent),se;W&&/^Mac/i.test(((se=navigator.userAgentData)==null?void 0:se.platform)||navigator.platform);var yo="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",wo=typeof HTMLElement>"u"?class{}:HTMLElement;function f(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var ae=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Et=(t,...e)=>ae("add",t,e),Eo=(t,...e)=>ae("remove",t,e),nt=new WeakMap,re=(t,e)=>{if(e===void 0)return nt.get(t);try{nt.get(t).disconnect(),nt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),nt.set(t,n)}},$o=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},So=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},To=0,xo=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++To).toString(32)}`),t.id):"",ot=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))f(o,i,s);return o},Co={define:(t,e)=>!W||window.customElements.get(t)||window.customElements.define(t,e)},D,ko=0,$t=t=>{D||(D=ot("div"),D.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",f(D,"aria-live","assertive")),D.isConnected||document.body.append(D),t&&(D.textContent=`${t}${ko++%2?" ":""}`)},le=(t,e,n="")=>{var o,i;const s={bubbles:!0,composed:!0,data:e,inputType:n},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(o=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:o.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},St=!1,ce="beforeinput,blur,focus,click,input,keydown,mousedown,mouseup",de={once:!0,passive:!0},Io=bo&&!ie,Ao=ie||go,it="false",Lo="insertReplacementText",st={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},at=class extends wo{constructor(){super(),this._speak="",this._texts=_o({},st),this._value="",this.attachShadow({mode:"open"}).append(ot("slot"),ot("style",`:host(:not([hidden])) { display: block; cursor: pointer; -webkit-tap-highlight-color: rgba(0, 0, 0, 0) } /* Must be display block in Safari to allow focus inside */
2
2
  :host(:not([data-multiple])) ::slotted(data),
3
3
  :host([data-multiple="false"]) ::slotted(data) { display: none } /* Hide data if not multiple */
4
+ ::slotted(input[inputmode="none"]) { outline: none } /* Hide temporary foucs outline flash */
4
5
  ::slotted(del) { text-decoration: none }
5
- ::slotted(data) { display: inline-block; pointer-events: none }
6
+ ::slotted(data:not([hidden])) { display: inline-block; pointer-events: none }
6
7
  ::slotted(data)::after { content: '\\00D7'; content: '\\00D7' / ''; padding-inline: .5ch; pointer-events: auto }
7
- ::slotted(data:focus) { ${yo} }`))}static get observedAttributes(){return Object.keys(ft).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=So(this),It(this,be,this,!0),Lt(this,{childList:!0}),setTimeout(V,0,this),setTimeout(mt,0,this)}attributeChangedCallback(t,e,n){const o=t.split("data-sr-")[1];ft[o]&&(this._texts[o]=n||ft[o])}disconnectedCallback(){_e(this),Lt(this,!1),wo(this,be,this,!0),this._root=void 0}handleEvent(t){const e=t.target;t.type==="beforeinput"&&(this._value=(e==null?void 0:e.value)||""),t.type==="blur"&&Po(this),t.type==="click"&&No(this,t),t.type==="focus"&&Oo(this,t),t.type==="input"&&Ho(this,t),t.type==="keydown"&&Ro(this,t),t.type==="mousedown"&&(Mt=this.contains(e)),t.type==="mouseup"&&(Mt=!1),t.type==="mutation"&&V(this,t)}get multiple(){var t;return((t=f(this,"data-multiple"))!=null?t:ut)!==ut}set multiple(t){f(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=f(this,"data-creatable"))!=null?t:ut)!==ut}set creatable(t){f(this,"data-creatable",t?"":null)}get control(){return this._control||this.querySelector("input")}get list(){return this._list||this.querySelector("u-datalist,datalist")||null}get items(){return this._items||this.getElementsByTagName("data")}get options(){var t,e;const n=`${((t=this.list)==null?void 0:t.nodeName)==="U-DATALIST"?"u-":""}option`;return this._options||((e=this.list)==null?void 0:e.getElementsByTagName(n))}get values(){return[...this.items].map(({value:t})=>t)}add(t){var e;const n=Ot(t);this.values.includes(n.value)||((e=this.control)==null||e.insertAdjacentElement("beforebegin",n))}},R=t=>{var e;return((e=t==null?void 0:t.textContent)==null?void 0:e.trim())||""},Ot=t=>typeof t=="string"?z("data",t,{value:t}):t instanceof HTMLDataElement?t:z("data",t.label||t.value,{value:t.value||t.label||""}),_e=t=>{t._focus=t._control=t._items=t._list=t._options=void 0},V=(t,e)=>{var n,o,i;let{_focus:s,_speak:a,_texts:r,items:d,control:l,list:u,multiple:m}=t;const{addedNodes:v,removedNodes:_}=(e==null?void 0:e.detail[0])||{},I=(e==null?void 0:e.detail[1])||(v==null?void 0:v[1])||(v==null?void 0:v[1])?null:(v==null?void 0:v[0])||(_==null?void 0:_[0]),et=m?d.length:1,nt=[];let St=`${a}${R((n=l==null?void 0:l.labels)==null?void 0:n[0])}, ${m?et?r.found.replace("%d",`${et}`):r.empty:""}`;if(l&&(I==null?void 0:I.nodeName)==="DATA"&&(m?s:I===s)){const h=f(l,"inputmode"),x=(s==null?void 0:s.nodeName)==="DATA"?l:s;a=`${r[I.isConnected?"added":"removed"]} ${R(I)}, `,(Lo||s===l)&&(H.textContent=a),l!==x&&(f(l,"aria-expanded",null),f(l,"inputmode","none"),St=" ",l.focus()),setTimeout(()=>{var N;f(l,"aria-expanded","true"),f(l,"inputmode",h),(N=x==null?void 0:x.focus)==null||N.call(x),t._speak="",Io?It(t,"blur",()=>V(t),ve):setTimeout(V,100,t)},100)}const Jt=I!=null&&I.isConnected?I:d[0];Array.from(d,h=>{if(!m&&h!==Jt)return h.remove();const x=R(h),N=h.value||x,Zt=`${a}${x}, ${r.remove}, ${nt.push(N)} ${r.of} ${et}`;f(h,"role","button"),f(h,"value",N),f(h,"tabindex","-1"),f(h,"aria-label",Zt)});for(const h of t.options||[]){const x=(o=f(h,"value"))!=null?o:R(h);f(h,"aria-label",a?`${a}${R(h)}`:null),f(h,"selected",nt.includes(x)?"":null)}u&&f(u,"aria-multiselectable",`${m}`),l&&f(l,"list",xo(u)),l&&f(l,"aria-label",St),t._value=(l==null?void 0:l.value)||"";const q=t.querySelector("del");q&&f(q,"role","button"),q&&(q.hidden=!(l!=null&&l.value));const D=t.querySelector("select");D&&(D.multiple=m),D&&(D.textContent=""),D==null||D.append(...nt.map(h=>new Option("",h,!0,!0))),(i=Lt(t))==null||i.takeRecords()},mt=(t,e)=>{const{multiple:n,control:o,items:i}=t;if(!(n||!o||!i[0])){if(e)return he(o,R(t.items[0]),"insertText");o.value=R(t.items[0])}},ge=t=>{var e;const{options:n=[],creatable:o,control:i,items:s,multiple:a}=t,r=((e=i==null?void 0:i.value)==null?void 0:e.trim())||"",d=r.toLowerCase()||null;let l=[...n].find(m=>m.label.trim().toLowerCase()===d);const u={bubbles:!0,cancelable:!0,detail:l};if(t.dispatchEvent(new CustomEvent("beforematch",u)))for(const m of n)m.selected=m===l;if(l=[...n].find(m=>m.selected),!l&&o&&r)return Y(t,Ot(r),!1);if(!l&&!a&&s[0])return Y(t,s[0]);if(!l||t.values.includes(l.value))return V(t);Y(t,l,!1)},Y=(t,e,n=!0)=>{const o=Ot(e),i=[...t.items].find(a=>a.value===e.value),s={bubbles:!0,cancelable:!0,detail:i||o};if(!(i&&!n)){if(!t.dispatchEvent(new CustomEvent("beforechange",s)))return V(t);i?i.remove():t.add(o),t.dispatchEvent(new CustomEvent("afterchange",s))}},Oo=(t,{target:e})=>{H||(H=ko("assertive")),H.isConnected||document.body.appendChild(H),e instanceof HTMLElement&&(t._focus=e),t._items||(t._control=t.control||void 0,t._items=t.items,t._list=t.list||void 0,t._options=t.options||void 0)},Po=t=>Mt||setTimeout(Do,0,t),Do=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(mt(t,!0),_e(t))},No=(t,e)=>{var n,o;const i=(o=(n=e.target)==null?void 0:n.closest)==null?void 0:o.call(n,"del"),{clientX:s,clientY:a,target:r}=e,{control:d,items:l}=t;if(i&&d)return e.preventDefault(),he(d,"","deleteContentBackward"),d.focus();for(const u of l){const{top:m,right:v,bottom:_,left:A}=u.getBoundingClientRect();if(u.contains(r))return Y(t,u);if(a>=m&&a<=_&&s>=A&&s<=v)return u.focus()}r===t&&(d==null||d.focus())},Ho=(t,e)=>{var n;const{options:o=[],control:i,multiple:s}=t,a=((n=i==null?void 0:i.value)==null?void 0:n.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType===Mo:!!a){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const d of o)if(d.value&&d.value===a)return Y(t,d,s),setTimeout(mt,0,t,!0)}else{const d=t.querySelector("del");return d&&(d.hidden=!a),s||ge(t)}},Ro=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const{_texts:o,control:i,items:s,multiple:a}=t,{key:r,repeat:d,target:l}=e,u=i&&i===l,m=u&&(i==null?void 0:i.selectionEnd),v=u&&r==="Tab"&&t.querySelector("del");let _=u?s.length:[...s].indexOf(l);if(v&&!v.hidden&&(e.preventDefault(),v.tabIndex=-1,v.focus(),It(v,"blur",()=>f(v,"tabindex",null),ve)),!(!u&&$o(e)||_===-1)){if(r==="ArrowRight"&&!u)_+=1;else if(r==="ArrowLeft"&&!m)_-=1;else if(r==="Enter"&&u){const A=f(i,"form");return f(i,"form","#"),requestAnimationFrame(()=>f(i,"form",A)),a?ge(t):!t.items[0]&&H&&(H.textContent=`${o.invalid}${++Ao%2?" ":""}`),mt(t,!0)}else if((r==="Backspace"||r==="Delete")&&!m){if(e.preventDefault(),!d&&s[_])return Y(t,s[_]);u&&(_-=1)}else return u||(i==null?void 0:i.focus());e.preventDefault(),(n=s[Math.max(0,_)]||i)==null||n.focus()}};Co.define("u-combobox",pt);const Bo="1.3.0",$={capture:!0,passive:!0},Q=typeof window<"u"&&typeof document<"u";function Uo(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function c(t,e,n){return n===void 0?t.getAttribute(e)??null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}let qo=0;const Fo=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function Pt(t){return t.id||(t.id=`${Fo}${++qo}`),t.id}const Vo=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},b=(t,...e)=>Vo("add",t,e),L=Q?document.createElement("div"):null,ht=new Map,Yo=()=>{for(const[t,e]of ht)e()};L&&(L.style.cssText="position:absolute;padding:1px;top:0;left:0px",b(window,"load,resize,scroll",Yo,$));const j={top:0,right:1,bottom:2,left:3};function P(t,e,n,o){var N;if(e===!1||!e.isConnected||!t.isConnected)return ht.delete(t);if(L!=null&&L.isConnected||document.body.append(L||""),!ht.has(t)){const Zt=j[n]??j.bottom;return(N=ht.set(t,()=>P(t,e,Zt,o)).get(t))==null?void 0:N()}const i=e instanceof HTMLElement,{offsetWidth:s,offsetHeight:a}=t,r=i?e.offsetWidth:e.clientWidth,d=i?e.offsetHeight:e.clientHeight,{width:l,height:u,left:m,top:v}=e.getBoundingClientRect(),_=Math.round(m-(r-l)/2),A=Math.round(v-(d-u)/2),I=_-s>0,et=r+r+s<window.innerWidth,nt=A-a>0,St=A+d+a<window.innerHeight,Jt=n===j.right&&(o||et)||!I,q=n===j.bottom&&(o||St)||!nt,D=Math.min(Math.max(10,_-(s-r)/2),window.innerWidth-s-10),h=Math.min(Math.max(10,A-(a-d)/2),window.innerHeight-a-10),x=n===j.top||n===j.bottom;t.style.left=`${Math.round(x?D:Jt?_+r:_-s)}px`,t.style.top=`${Math.round(x?q?A+d:A-a:h)}px`,L==null||L.style.setProperty("translate",`0px ${Math.round(q?window.scrollY+A+d+a+30:0)}px`)}function ye(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 Dt=new WeakMap,W=(t,e,n)=>{const o=t.getElementsByClassName(e),i=Dt.get(t)||[];i.length||(Dt.set(t,i),ye((s,a)=>{if(t.isConnected&&(i!=null&&i.length))for(const r of i)r();else a==null||a.disconnect(),Dt.delete(t)}).observe(t,{attributeFilter:["class"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>n(o))},C=t=>{if(!Q)return;const e=()=>requestAnimationFrame(t);document.readyState==="complete"?e():b(window,"load",e)},Nt=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),Ee="mattilsynet.matomo.cloud";let Ht=!0;function jo(t,e={}){if(Q){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${Ee}/matomo.php`]),document.querySelector('script[src*="matomo.js"]')||document.documentElement.append(Object.assign(document.createElement("script"),{async:!0,src:`https://cdn.matomo.cloud/${Ee}/matomo.js`}))),t==="init"){const{matomoId:n,enabled:o=!0}=e;Ht=o,window._paq.push(["setSiteId",n])}if(Ht==="debug")return console.info(`Analytics: "${t}"`,e);if(!(Ht===!1||window.location.hostname==="localhost"))if(t==="pageview"){const{url:n,title:o}=e;window._paq.push(["setCustomUrl",n||location.href]),window._paq.push(["setDocumentTitle",o||document.title]),window._paq.push(["trackPageView"])}else if(t==="event"){const{category:n,action:o,name:i,value:s}=e,a=["trackEvent",n,o,i,s];window._paq.push(a.filter(r=>r!==void 0))}else if(t==="search"){const{query:n,category:o=!1,results:i=!1}=e;window._paq.push(["trackSiteSearch",n,o,i])}else t==="matomo"&&window._paq.push(e)}}const Wo=(t,e,n=Number.POSITIVE_INFINITY)=>{const o=(n-1)/2,i=Math.max(Math.min(t-Math.floor(o),e-n+1),1),s=Math.min(Math.max(t+Math.ceil(o),n),e),a=Array.from({length:s+1-i},(r,d)=>d+i);return n>4&&i>1&&a.splice(0,2,1,0),n>3&&s<e&&a.splice(-2,2,0,e),a},Ko=({current:t=1,total:e=10,show:n=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:Wo(t,e,n).map((o,i)=>({current:o===t&&"page",key:`key-${o}-${i}`,page:o}))}),we="_alert_1ib74_1 _ds-alert_1efle_1",$e="_app_1ib74_1",Se="_sticky_1ib74_1",Te="_avatar_1ib74_1 _ds-avatar_1efle_1",xe="_badge_1ib74_1",Ce="_breadcrumbs_1ib74_1 _ds-breadcrumbs_1efle_1",ke="_button_1ib74_1 _ds-button_1efle_1",Ae="_card_1ib74_1",Ie="_group_1ib74_1",Le="_chip_1ib74_1 _ds-chip_1efle_1",Me="_details_1ib74_1 _ds-details_1efle_1",Oe="_dialog_1ib74_1 _ds-dialog_1efle_1",Pe="_divider_1ib74_1",De="_errorsummary_1ib74_1 _ds-error-summary_1efle_1",Ne="__errorsummary_1ib74_1",He="_field_1ib74_1 _ds-field_1efle_1",Re="_affixes_1ib74_1 _ds-field-affixes_1efle_1",Be="_fieldset_1ib74_1 _ds-fieldset_1efle_1",Ue="_heading_1ib74_1 _ds-heading_1efle_1",qe="_ingress_1ib74_1",Fe="_muted_1ib74_1",Ve="_info_1ib74_1",Ye="_prose_1ib74_1",je="_helptext_1ib74_1 _ds-focus_1efle_1",We="_input_1ib74_1 _ds-input_1efle_1",Ke="_grid_1ib74_1",Ge="_flex_1ib74_1",Xe="_link_1ib74_1",ze="_logo_1ib74_1",Qe="_pagination_1ib74_1 _ds-pagination_1efle_1",Je="_popover_1ib74_1",Ze="_progress_1ib74_1",tn="__indeterminate_1ib74_1",en="_skeleton_1ib74_1 _ds-skeleton_1efle_1",nn="__skeleton_1ib74_1",on="_spinner_1ib74_1",sn="_table_1ib74_1 _ds-table_1efle_1",an="__scrollShadow_1ib74_1",rn="_tabs_1ib74_1 _ds-tabs_1efle_1",ln="__scrollMask_1ib74_1",dn="_tag_1ib74_1 _ds-tag_1efle_1",cn="_togglegroup_1ib74_1",un="__tooltip_1ib74_1",fn="_validation_1ib74_1 _ds-validation-message_1efle_1",pn="_body_1ib74_150",E={alert:we,app:$e,sticky:Se,avatar:Te,badge:xe,breadcrumbs:Ce,button:ke,card:Ae,group:Ie,chip:Le,details:Me,dialog:Oe,divider:Pe,errorsummary:De,_errorsummary:Ne,field:He,affixes:Re,fieldset:Be,heading:Ue,ingress:qe,muted:Fe,info:Ve,prose:Ye,helptext:je,input:We,grid:Ke,flex:Ge,link:Xe,logo:ze,pagination:Qe,popover:Je,progress:Ze,_indeterminate:tn,skeleton:en,_skeleton:nn,spinner:on,table:sn,_scrollShadow:an,tabs:rn,_scrollMask:ln,tag:dn,togglegroup:cn,_tooltip:un,validation:fn,body:pn},Go=Object.freeze(Object.defineProperty({__proto__:null,_errorsummary:Ne,_indeterminate:tn,_scrollMask:ln,_scrollShadow:an,_skeleton:nn,_tooltip:un,affixes:Re,alert:we,app:$e,avatar:Te,badge:xe,body:pn,breadcrumbs:Ce,button:ke,card:Ae,chip:Le,default:E,details:Me,dialog:Oe,divider:Pe,errorsummary:De,field:He,fieldset:Be,flex:Ge,grid:Ke,group:Ie,heading:Ue,helptext:je,info:Ve,ingress:qe,input:We,link:Xe,logo:ze,muted:Fe,pagination:Qe,popover:Je,progress:Ze,prose:Ye,skeleton:en,spinner:on,sticky:Se,table:sn,tabs:rn,tag:dn,togglegroup:cn,validation:fn},Symbol.toStringTag,{value:"Module"}));typeof window<"u"&&window.CSSStyleSheet&&document.adoptedStyleSheets&&(()=>{const t="--mtds-app-expanded",e=new CSSStyleSheet,n=()=>{var o;return!((o=window.localStorage.getItem(t))!=null&&o.includes("false"))};document.adoptedStyleSheets.push(e),window.mtdsToggleAppExpanded=o=>{var i;try{const s=o??!n();(i=e.replaceSync)==null||i.call(e,`:root { ${t}: var(${t}--${s})}`),window.localStorage.setItem(t,s)}catch{}},window.mtdsToggleAppExpanded(n())})();const mn=E.app.split(" ")[0],Xo=E.sticky.split(" ")[0],zo='[data-command="toggle-app-expanded"]',hn=`.${mn} > dialog,.${mn} dialog ~ main`,bn=t=>{document.startViewTransition?document.startViewTransition(t):t()},vn=t=>bn(()=>{var e;return(e=window.mtdsToggleAppExpanded)==null?void 0:e.call(window,t)});function Qo({target:t}){if(!(!(t instanceof HTMLButtonElement)||!t.matches(zo))){if(getComputedStyle(t).position==="sticky")return vn();bn(()=>{const e=document.querySelector(hn);e==null||e.setAttribute("data-closedby","any"),e==null||e.showModal()})}}function Jo(){var t;(t=document.querySelector(hn))==null||t.close()}let Rt=0,K,M=0,g,Bt=0,bt=0,Ut=!1,qt=0,B=0;function Zo([t]){g=t,_n()}function _n(){var n;if(!(g!=null&&g.isConnected))return;const t=window.scrollY,e=t<B;B=t,e!==K&&(Rt=(((n=g.parentElement)==null?void 0:n.getBoundingClientRect().top)||0)+B,K=e,Bt=g.offsetHeight,bt=g.getBoundingClientRect().top+B,Ut=g.offsetHeight<=window.innerHeight,qt=window.innerHeight),!(M===-1&&Ut)&&(M!==-1&&(Ut||K&&B<=bt)?(g.style.setProperty("--pos","sticky"),g.style.setProperty("--top","0px"),M=-1):M===-1&&!K?(g.style.setProperty("--pos","relative"),g.style.setProperty("--top",`${Math.max(0,B-Rt)}px`),M=0):M!==1&&!K&&B+qt>=bt+Bt?(g.style.setProperty("--pos","sticky"),g.style.setProperty("--top",`${qt-Bt}px`),M=1):M===1&&K&&(g.style.setProperty("--pos","relative"),g.style.setProperty("--top",`${bt-Rt}px`),M=0))}C(()=>{W(document.documentElement,Xo,Zo),b(document,"click",Qo,$),b(window,"resize",Uo(Jo,100),$),b(window,"scroll",_n,$)});const ti=E.breadcrumbs.split(" ")[0];function ei(t){for(const e of t)e.querySelectorAll("li a").forEach((n,o,{length:i})=>{c(n,"aria-current",o===i-1?"page":null)})}C(()=>W(document.documentElement,ti,ei));const ni=E.dialog.split(" ")[0],oi=Q?document.getElementsByClassName(ni):[],ii=()=>{for(const t of oi)t.isConnected&&t.showModal&&t.close&&(t.matches('[open]:not([data-modal="false"]):not(:modal)')?(c(t,"open",null),t.showModal()):t.matches(":modal:not([open])")&&(c(t,"open",""),t.close()))},si=({clientX:t,clientY:e,target:n})=>{var o;if(n instanceof HTMLDialogElement&&c(n,"data-closedby")==="any"){const{top:i,right:s,bottom:a,left:r}=n.getBoundingClientRect();i<=e&&e<=a&&r<=t&&t<=s||n.close()}else n instanceof Element&&n.closest('button[data-command="close"]')&&((o=n==null?void 0:n.closest("dialog"))==null||o.close())};C(()=>{b(document,"click",si,$),ye(ii).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function ai(t){var n;if(t.animationName!==E._errorsummary)return;const e=(n=t.target)==null?void 0:n.firstElementChild;e instanceof HTMLHeadingElement&&(c(e,"tabindex","-1"),e.focus())}C(()=>b(document,"animationend",ai,$));var ri=Object.defineProperty,gn=Object.getOwnPropertySymbols,li=Object.prototype.hasOwnProperty,di=Object.prototype.propertyIsEnumerable,yn=(t,e,n)=>e in t?ri(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,ci=(t,e)=>{for(var n in e||(e={}))li.call(e,n)&&yn(t,n,e[n]);if(gn)for(var n of gn(e))di.call(e,n)&&yn(t,n,e[n]);return t},J=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",vt=J&&/android/i.test(navigator.userAgent),Ft=J&&/iPad|iPhone|iPod/.test(navigator.userAgent),En;J&&/^Mac/i.test(((En=navigator.userAgentData)==null?void 0:En.platform)||navigator.platform);var ui=`${vt?"data":"aria"}-labelledby`,fi=":host(:not([hidden])) { display: block }",pi="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",wn=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 $n=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},_t=(t,...e)=>$n("add",t,e),gt=(t,...e)=>$n("remove",t,e),mi=(t,e)=>t.attachShadow({mode:"open"}).append(Yt("slot"),Yt("style",e)),yt=new WeakMap,Sn=(t,e)=>{if(e===void 0)return yt.get(t);try{yt.get(t).disconnect(),yt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),yt.set(t,n)}},Tn=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},hi=0,Vt=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++hi).toString(32)}`),t.id):"",Yt=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},xn={define:(t,e)=>!J||window.customElements.get(t)||window.customElements.define(t,e)},bi=t=>{const e=Yt("div");return e.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",p(e,"aria-live",t),e},vi=(t,e,n="")=>{var o,i;const s={bubbles:!0,composed:!0,data:e,inputType:n},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(o=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:o.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},jt="disabled",Z="selected",_i=class extends wn{static get observedAttributes(){return[jt,Z]}connectedCallback(){Ft||(this.tabIndex=-1),this.hasAttribute("role")||p(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){p(this,"aria-disabled",`${this.disabled}`),p(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[Z]}set defaultSelected(t){this[Z]=t}get disabled(){return p(this,jt)!==null}set disabled(t){p(this,jt,t?"":null)}get form(){return this.closest("form")}get index(){var t;return[...((t=this.parentElement)==null?void 0:t.options)||[this]].indexOf(this)}get label(){var t;return(t=p(this,"label"))!=null?t:this.text}set label(t){p(this,"label",t)}get selected(){return p(this,Z)!==null}set selected(t){p(this,Z,t?"":null)}get text(){var t;return((t=this.textContent)==null?void 0:t.trim())||""}set text(t){this.textContent=t}get value(){var t;return(t=p(this,"value"))!=null?t:this.text}set value(t){p(this,"value",t)}};xn.define("u-option",_i);var Cn,gi=0,G,kn=0,Wt=!1,yi=Ft||vt,An="click,focusout,input,keydown,mousedown,mouseup",In="focus,focusin,blur,focusout",Et={singular:"%d hit",plural:"%d hits"},Ln=class extends wn{constructor(){super(),this._texts=ci({},Et),this._value="",mi(this,`${fi}
8
+ ::slotted(data:focus) { ${yo} }`))}static get observedAttributes(){return Object.keys(st).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=So(this),Et(this,ce,this,!0),re(this,{childList:!0}),setTimeout(rt,0,this),setTimeout(xt,0,this)}attributeChangedCallback(t,e,n){const o=t.split("data-sr-")[1];st[o]&&(this._texts[o]=n||st[o])}disconnectedCallback(){re(this,!1),Eo(this,ce,this,!0),this._items=this._clear=this._focus=this._control=void 0,this._list=this._options=this._root=void 0}handleEvent(t){const e=t.target;t.type==="beforeinput"&&(this._value=(e==null?void 0:e.value)||""),t.type==="blur"&&Oo(this),t.type==="click"&&Po(this,t),t.type==="focus"&&Mo(this,t),t.type==="input"&&Ho(this,t),t.type==="keydown"&&No(this,t),t.type==="mousedown"&&(St=this.contains(e)),t.type==="mouseup"&&(St=!1),t.type==="mutation"&&rt(this,t)}get multiple(){var t;return((t=f(this,"data-multiple"))!=null?t:it)!==it}set multiple(t){f(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=f(this,"data-creatable"))!=null?t:it)!==it}set creatable(t){f(this,"data-creatable",t?"":null)}get control(){var t;return(t=this._control)!=null&&t.isConnected||(this._control=this.querySelector("input")),this._control}get list(){var t;return(t=this._list)!=null&&t.isConnected||(this._list=this.querySelector("u-datalist,datalist")),this._list}get clear(){var t;return(t=this._clear)!=null&&t.isConnected||(this._clear=this.querySelector("del")),this._clear}get items(){return this._items||(this._items=this.getElementsByTagName("data")),this._items}get options(){var t,e;if(!this._options){const 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)}},B=t=>{var e;return((e=t==null?void 0:t.textContent)==null?void 0:e.trim())||""},Tt=t=>t instanceof HTMLDataElement,rt=(t,e)=>{var n;const{_focus:o,_texts:i,items:s,control:a,list:r,multiple:l}=t;let d=`${B((n=a==null?void 0:a.labels)==null?void 0:n[0])}, ${l?s.length?i.found.replace("%d",`${s.length}`):i.empty:""}`;const p=[];for(const{addedNodes:m,removedNodes:k}of(e==null?void 0:e.detail)||[]){for(const T of m)Tt(T)&&p.unshift(T);for(const T of k)Tt(T)&&p.push(T)}const u=l?p.length===1:p[0]===o;if(o&&a&&u){const m=f(a,"inputmode"),k=Tt(o)?a:o;t._speak=`${i[p[0].isConnected?"added":"removed"]} ${B(p[0])}, `,(Ao||o===a)&&$t(t._speak),a!==k&&(f(a,"aria-expanded",null),f(a,"inputmode","none"),d=" ",a.focus()),setTimeout(()=>{var T;f(a,"aria-expanded","true"),f(a,"inputmode",m),(T=k==null?void 0:k.focus)==null||T.call(k),t._speak="",Io?Et(t,"blur",()=>rt(t),de):setTimeout(rt,100,t)},100)}let I=0;for(const m of s){const k=B(m),T=m.value||k,Yt=`${t._speak}${k}, ${i.remove}, ${++I} ${i.of} ${s.length}`;f(m,"role","button"),f(m,"value",T),f(m,"tabindex","-1"),f(m,"aria-label",Yt)}!l&&I>1&&console.warn("u-combobox: Multiple <data> found in single mode."),r&&f(r,"aria-multiselectable",`${l}`),a&&f(a,"list",xo(r)),a&&f(a,"aria-label",`${t._speak}${d}`);const v=t.querySelector("select");v&&(v.multiple=l),v&&(v.textContent=""),v==null||v.append(...t.values.map(m=>new Option(m,m,!0,!0))),ue(t),pe(t)},ue=t=>{var e;t.clear&&f(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value))},pe=t=>{var e;const{_speak:n,options:o=[],values:i}=t;for(const s of o){const a=(e=f(s,"value"))!=null?e:B(s);f(s,"aria-label",n?`${n}${B(s)}`:null),f(s,"selected",i.includes(a)?"":null)}},xt=t=>{const{multiple:e,control:n,items:o}=t,i=B(o[0]);!e&&n&&i!==n.value&&le(n,i,"insertText")},fe=(t,e=!0)=>{var n;const{_texts:o,options:i=[],creatable:s,control:a,items:r,multiple:l}=t,d=((n=a==null?void 0:a.value)==null?void 0:n.trim())||"",p=d.toLowerCase()||null;let u=[...i].find(v=>v.label.trim().toLowerCase()===p);const I={bubbles:!0,cancelable:!0,detail:u};if(t.dispatchEvent(new CustomEvent("beforematch",I)))for(const v of i)v.selected=v===u;if(u=[...i].find(v=>v.selected),pe(t),u)return U(t,u,!1,!!e);if(s&&d)return U(t,{value:d},!1);!l&&r[0]&&U(t,r[0],!0,!1),e&&$t(o.invalid)},U=(t,e,n=!0,o=!0)=>{const{control:i,items:s,multiple:a}=t,r=ot("data",e.label||e.value,{value:e.value}),l=[...s].find(u=>u.value===e.value),d={bubbles:!0,cancelable:!0,detail:l||r};if(!(l&&!n)&&t.dispatchEvent(new CustomEvent("beforechange",d))){if(!a)for(const u of[...s])u.remove();l?l.remove():i==null||i.insertAdjacentElement("beforebegin",r),t.dispatchEvent(new CustomEvent("afterchange",d))}o&&setTimeout(xt,10,t)},Mo=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),$t()},Oo=t=>St||setTimeout(Do,0,t),Do=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||xt(t)},Po=(t,e)=>{const{clientX:n,clientY:o,target:i}=e,{clear:s,control:a,items:r}=t;if(s!=null&&s.contains(i))return a&&le(a,"","deleteContentBackward"),a==null?void 0:a.focus();for(const l of r){const{top:d,right:p,bottom:u,left:I}=l.getBoundingClientRect();if(l.contains(i))return U(t,l);if(o>=d&&o<=u&&n>=I&&n<=p)return l.focus()}i===t&&(a==null||a.focus())},Ho=(t,e)=>{var n;const{options:o=[],control:i,multiple:s}=t,a=((n=i==null?void 0:i.value)==null?void 0:n.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType===Lo:!!a){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const l of o)if(l.value&&l.value===a)return U(t,l,s)}else s||fe(t,!1);ue(t)},No=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const{clear:o,control:i,items:s}=t,{key:a,repeat:r,target:l}=e,d=i&&i===l,p=d&&(i==null?void 0:i.selectionEnd);let u=d?s.length:[...s].indexOf(l);if(d&&a==="Tab"&&o&&!o.hidden&&(e.preventDefault(),o.tabIndex=-1,o.focus(),Et(o,"blur",()=>f(o,"tabindex",null),de)),!(!d&&$o(e)||u===-1)){if(a==="ArrowRight"&&!d)u+=1;else if(a==="ArrowLeft"&&!p)u-=1;else if(a==="Enter"&&d){const I=f(i,"form");return f(i,"form","#"),requestAnimationFrame(()=>f(i,"form",I)),fe(t)}else if((a==="Backspace"||a==="Delete")&&!p){if(e.preventDefault(),!r&&s[u])return U(t,s[u]);d&&(u-=1)}else return d||(i==null?void 0:i.focus());e.preventDefault(),(n=s[Math.max(0,u)]||i)==null||n.focus()}};Co.define("u-combobox",at);const Ro="1.3.2",E={capture:!0,passive:!0},Y=typeof window<"u"&&typeof document<"u";function Bo(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function c(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 Uo=0;const qo=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function Ct(t){return t.id||(t.id=`${qo}${++Uo}`),t.id}const Fo=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},_=(t,...e)=>Fo("add",t,e),A=Y?document.createElement("div"):null,lt=new Map,Vo=()=>{for(const[t,e]of lt)e()};A&&(A.style.cssText="position:absolute;padding:1px;top:0;left:0px",_(window,"load,resize,scroll",Vo,E));const q={top:0,right:1,bottom:2,left:3};function O(t,e,n,o){var so;if(e===!1||!e.isConnected||!t.isConnected)return lt.delete(t);if(A!=null&&A.isConnected||document.body.append(A||""),!lt.has(t)){const as=q[n]??q.bottom;return(so=lt.set(t,()=>O(t,e,as,o)).get(t))==null?void 0:so()}const i=e instanceof HTMLElement,{offsetWidth:s,offsetHeight:a}=t,r=i?e.offsetWidth:e.clientWidth,l=i?e.offsetHeight:e.clientHeight,{width:d,height:p,left:u,top:I}=e.getBoundingClientRect(),v=Math.round(u-(r-d)/2),m=Math.round(I-(l-p)/2),k=v-s>0,T=r+r+s<window.innerWidth,Yt=m-a>0,ns=m+l+a<window.innerHeight,os=n===q.right&&(o||T)||!k,oo=n===q.bottom&&(o||ns)||!Yt,is=Math.min(Math.max(10,v-(s-r)/2),window.innerWidth-s-10),ss=Math.min(Math.max(10,m-(a-l)/2),window.innerHeight-a-10),io=n===q.top||n===q.bottom;t.style.left=`${Math.round(io?is:os?v+r:v-s)}px`,t.style.top=`${Math.round(io?oo?m+l:m-a:ss)}px`,A==null||A.style.setProperty("translate",`0px ${Math.round(oo?window.scrollY+m+l+a+30:0)}px`)}function he(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 kt=new WeakMap,F=(t,e,n)=>{const o=t.getElementsByClassName(e),i=kt.get(t)||[];i.length||(kt.set(t,i),he((s,a)=>{if(t.isConnected&&(i!=null&&i.length))for(const r of i)r();else a==null||a.disconnect(),kt.delete(t)}).observe(t,{attributeFilter:["class"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>n(o))},x=t=>{if(!Y)return;const e=()=>requestAnimationFrame(t);document.readyState==="complete"?e():_(window,"load",e)},It=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),me="mattilsynet.matomo.cloud";let At=!0;function Wo(t,e={}){if(Y){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${me}/matomo.php`]),document.querySelector('script[src*="matomo.js"]')||document.documentElement.append(Object.assign(document.createElement("script"),{async:!0,src:`https://cdn.matomo.cloud/${me}/matomo.js`}))),t==="init"){const{matomoId:n,enabled:o=!0}=e;At=o,window._paq.push(["setSiteId",n])}if(At==="debug")return console.info(`Analytics: "${t}"`,e);if(!(At===!1||window.location.hostname==="localhost"))if(t==="pageview"){const{url:n,title:o}=e;window._paq.push(["setCustomUrl",n||location.href]),window._paq.push(["setDocumentTitle",o||document.title]),window._paq.push(["trackPageView"])}else if(t==="event"){const{category:n,action:o,name:i,value:s}=e,a=["trackEvent",n,o,i,s];window._paq.push(a.filter(r=>r!==void 0))}else if(t==="search"){const{query:n,category:o=!1,results:i=!1}=e;window._paq.push(["trackSiteSearch",n,o,i])}else t==="matomo"&&window._paq.push(e)}}const Yo=(t,e,n=Number.POSITIVE_INFINITY)=>{const o=(n-1)/2,i=Math.max(Math.min(t-Math.floor(o),e-n+1),1),s=Math.min(Math.max(t+Math.ceil(o),n),e),a=Array.from({length:s+1-i},(r,l)=>l+i);return n>4&&i>1&&a.splice(0,2,1,0),n>3&&s<e&&a.splice(-2,2,0,e),a},jo=({current:t=1,total:e=10,show:n=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:Yo(t,e,n).map((o,i)=>({current:o===t&&"page",key:`key-${o}-${i}`,page:o}))}),ve="_alert_ip922_1 _ds-alert_1efle_1",_e="_app_ip922_1",be="_sticky_ip922_1",ge="_avatar_ip922_1 _ds-avatar_1efle_1",ye="_badge_ip922_1",we="_breadcrumbs_ip922_1 _ds-breadcrumbs_1efle_1",Ee="_button_ip922_1 _ds-button_1efle_1",$e="_card_ip922_1",Se="_group_ip922_1",Te="_chip_ip922_1 _ds-chip_1efle_1",xe="_details_ip922_1 _ds-details_1efle_1",Ce="_dialog_ip922_1 _ds-dialog_1efle_1",ke="_divider_ip922_1",Ie="_errorsummary_ip922_1 _ds-error-summary_1efle_1",Ae="__errorsummary_ip922_1",Le="_field_ip922_1 _ds-field_1efle_1",Me="_affixes_ip922_1 _ds-field-affixes_1efle_1",Oe="_fieldset_ip922_1 _ds-fieldset_1efle_1",De="_heading_ip922_1 _ds-heading_1efle_1",Pe="_ingress_ip922_1",He="_muted_ip922_1",Ne="_info_ip922_1",Re="_prose_ip922_1",Be="_helptext_ip922_1 _ds-focus_1efle_1",Ue="_input_ip922_1 _ds-input_1efle_1",qe="_grid_ip922_1",Fe="_flex_ip922_1",Ve="_link_ip922_1",We="_logo_ip922_1",Ye="_pagination_ip922_1 _ds-pagination_1efle_1",je="_popover_ip922_1",Ke="_progress_ip922_1",Ge="__indeterminate_ip922_1",Xe="_skeleton_ip922_1 _ds-skeleton_1efle_1",ze="__skeleton_ip922_1",Qe="_spinner_ip922_1",Je="_steps_ip922_1",Ze="_table_ip922_1 _ds-table_1efle_1",tn="__scrollShadow_ip922_1",en="_tabs_ip922_1 _ds-tabs_1efle_1",nn="__scrollMask_ip922_1",on="_tag_ip922_1 _ds-tag_1efle_1",sn="_togglegroup_ip922_1",an="__tooltip_ip922_1",rn="_validation_ip922_1 _ds-validation-message_1efle_1",ln="_body_ip922_153",y={alert:ve,app:_e,sticky:be,avatar:ge,badge:ye,breadcrumbs:we,button:Ee,card:$e,group:Se,chip:Te,details:xe,dialog:Ce,divider:ke,errorsummary:Ie,_errorsummary:Ae,field:Le,affixes:Me,fieldset:Oe,heading:De,ingress:Pe,muted:He,info:Ne,prose:Re,helptext:Be,input:Ue,grid:qe,flex:Fe,link:Ve,logo:We,pagination:Ye,popover:je,progress:Ke,_indeterminate:Ge,skeleton:Xe,_skeleton:ze,spinner:Qe,steps:Je,table:Ze,_scrollShadow:tn,tabs:en,_scrollMask:nn,tag:on,togglegroup:sn,_tooltip:an,validation:rn,body:ln},Ko=Object.freeze(Object.defineProperty({__proto__:null,_errorsummary:Ae,_indeterminate:Ge,_scrollMask:nn,_scrollShadow:tn,_skeleton:ze,_tooltip:an,affixes:Me,alert:ve,app:_e,avatar:ge,badge:ye,body:ln,breadcrumbs:we,button:Ee,card:$e,chip:Te,default:y,details:xe,dialog:Ce,divider:ke,errorsummary:Ie,field:Le,fieldset:Oe,flex:Fe,grid:qe,group:Se,heading:De,helptext:Be,info:Ne,ingress:Pe,input:Ue,link:Ve,logo:We,muted:He,pagination:Ye,popover:je,progress:Ke,prose:Re,skeleton:Xe,spinner:Qe,steps:Je,sticky:be,table:Ze,tabs:en,tag:on,togglegroup:sn,validation:rn},Symbol.toStringTag,{value:"Module"}));typeof window<"u"&&window.CSSStyleSheet&&document.adoptedStyleSheets&&(()=>{const t="--mtds-app-expanded",e=new CSSStyleSheet,n=()=>{var o;return!((o=window.localStorage.getItem(t))!=null&&o.includes("false"))};document.adoptedStyleSheets.push(e),window.mtdsToggleAppExpanded=o=>{var i;try{const s=o??!n();(i=e.replaceSync)==null||i.call(e,`:root { ${t}: var(${t}--${s})}`),window.localStorage.setItem(t,s)}catch{}},window.mtdsToggleAppExpanded(n())})();const cn=y.app.split(" ")[0],Go=y.sticky.split(" ")[0],Xo='[data-command="toggle-app-expanded"]',dn=`.${cn} > dialog,.${cn} dialog ~ main`,un=t=>{document.startViewTransition?document.startViewTransition(t):t()},pn=t=>un(()=>{var e;return(e=window.mtdsToggleAppExpanded)==null?void 0:e.call(window,t)});function zo({target:t}){if(!(!(t instanceof HTMLButtonElement)||!t.matches(Xo))){if(getComputedStyle(t).position==="sticky")return pn();un(()=>{const e=document.querySelector(dn);e==null||e.setAttribute("data-closedby","any"),e==null||e.showModal()})}}function Qo(){var t;(t=document.querySelector(dn))==null||t.close()}let Lt=0,V,L=0,b,Mt=0,ct=0,Ot=!1,Dt=0,P=0;function Jo([t]){b=t,fn()}function fn(){var n;if(!(b!=null&&b.isConnected))return;const t=window.scrollY,e=t<P;P=t,e!==V&&(Lt=(((n=b.parentElement)==null?void 0:n.getBoundingClientRect().top)||0)+P,V=e,Mt=b.offsetHeight,ct=b.getBoundingClientRect().top+P,Ot=b.offsetHeight<=window.innerHeight,Dt=window.innerHeight),!(L===-1&&Ot)&&(L!==-1&&(Ot||V&&P<=ct)?(b.style.setProperty("--pos","sticky"),b.style.setProperty("--top","0px"),L=-1):L===-1&&!V?(b.style.setProperty("--pos","relative"),b.style.setProperty("--top",`${Math.max(0,P-Lt)}px`),L=0):L!==1&&!V&&P+Dt>=ct+Mt?(b.style.setProperty("--pos","sticky"),b.style.setProperty("--top",`${Dt-Mt}px`),L=1):L===1&&V&&(b.style.setProperty("--pos","relative"),b.style.setProperty("--top",`${ct-Lt}px`),L=0))}x(()=>{F(document.documentElement,Go,Jo),_(document,"click",zo,E),_(window,"resize",Bo(Qo,100),E),_(window,"scroll",fn,E)});const Zo=y.breadcrumbs.split(" ")[0];function ti(t){for(const e of t)e.querySelectorAll("li a").forEach((n,o,{length:i})=>{c(n,"aria-current",o===i-1?"page":null)})}x(()=>F(document.documentElement,Zo,ti));const ei=y.dialog.split(" ")[0],ni=Y?document.getElementsByClassName(ei):[],oi=()=>{for(const t of ni)t.isConnected&&t.showModal&&t.close&&(t.matches('[open]:not([data-modal="false"]):not(:modal)')?(c(t,"open",null),t.showModal()):t.matches(":modal:not([open])")&&(c(t,"open",""),t.close()))},ii=({clientX:t,clientY:e,target:n})=>{var o;if(n instanceof HTMLDialogElement&&c(n,"data-closedby")==="any"){const{top:i,right:s,bottom:a,left:r}=n.getBoundingClientRect();i<=e&&e<=a&&r<=t&&t<=s||n.close()}else n instanceof Element&&n.closest('button[data-command="close"]')&&((o=n==null?void 0:n.closest("dialog"))==null||o.close())};x(()=>{_(document,"click",ii,E),he(oi).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function si(t){var n;if(t.animationName!==y._errorsummary)return;const e=(n=t.target)==null?void 0:n.firstElementChild;e instanceof HTMLHeadingElement&&(c(e,"tabindex","-1"),e.focus())}x(()=>_(document,"animationend",si,E));var ai=Object.defineProperty,hn=Object.getOwnPropertySymbols,ri=Object.prototype.hasOwnProperty,li=Object.prototype.propertyIsEnumerable,mn=(t,e,n)=>e in t?ai(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,ci=(t,e)=>{for(var n in e||(e={}))ri.call(e,n)&&mn(t,n,e[n]);if(hn)for(var n of hn(e))li.call(e,n)&&mn(t,n,e[n]);return t},j=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",dt=j&&/android/i.test(navigator.userAgent),Pt=j&&/iPad|iPhone|iPod/.test(navigator.userAgent),vn;j&&/^Mac/i.test(((vn=navigator.userAgentData)==null?void 0:vn.platform)||navigator.platform);var di=`${dt?"data":"aria"}-labelledby`,ui=":host(:not([hidden])) { display: block }",pi="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",_n=typeof HTMLElement>"u"?class{}:HTMLElement;function h(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 bn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},ut=(t,...e)=>bn("add",t,e),pt=(t,...e)=>bn("remove",t,e),fi=(t,e)=>t.attachShadow({mode:"open"}).append(Nt("slot"),Nt("style",e)),ft=new WeakMap,gn=(t,e)=>{if(e===void 0)return ft.get(t);try{ft.get(t).disconnect(),ft.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),ft.set(t,n)}},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},hi=0,Ht=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++hi).toString(32)}`),t.id):"",Nt=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},wn={define:(t,e)=>!j||window.customElements.get(t)||window.customElements.define(t,e)},H,mi=0,En=t=>{H||(H=Nt("div"),H.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",h(H,"aria-live","assertive")),H.isConnected||document.body.append(H),t&&(H.textContent=`${t}${mi++%2?" ":""}`)},vi=(t,e,n="")=>{var o,i;const s={bubbles:!0,composed:!0,data:e,inputType:n},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(o=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:o.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},Rt="disabled",K="selected",_i=class extends _n{static get observedAttributes(){return[Rt,K]}connectedCallback(){Pt||(this.tabIndex=-1),this.hasAttribute("role")||h(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){h(this,"aria-disabled",`${this.disabled}`),h(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[K]}set defaultSelected(t){this[K]=t}get disabled(){return h(this,Rt)!==null}set disabled(t){h(this,Rt,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=h(this,"label"))!=null?t:this.text}set label(t){h(this,"label",t)}get selected(){return h(this,K)!==null}set selected(t){h(this,K,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=h(this,"value"))!=null?t:this.text}set value(t){h(this,"value",t)}};wn.define("u-option",_i);var $n,Sn=0,Bt=!1,bi=Pt||dt,Tn="click,focusout,input,keydown,mousedown,mouseup",xn="focus,focusin,blur,focusout",ht={singular:"%d hit",plural:"%d hits"},Cn=class extends _n{constructor(){super(),this._texts=ci({},ht),this._value="",fi(this,`${ui}
8
9
  ::slotted(u-option) { display: block; cursor: pointer }
9
10
  ::slotted(u-option:focus) { ${pi} }
10
11
  ::slotted(u-option[aria-hidden="true"]),
11
12
  ::slotted(u-option[disabled]),
12
- ::slotted(u-option[hidden]) { display: none !important }`)}static get observedAttributes(){return["id",...Object.keys(Et).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=Tn(this),p(this,"role","listbox"),p(this,"tabindex","-1"),_t(this._root,"focusin",this),_t(this._root,"focus",this,!0),Sn(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){gt(this._root||this,"focus",this,!0),gt(this._root||this,"focusin",this),Sn(this,!1),Kt(this),this._root=void 0}attributeChangedCallback(t,e,n){const o=t==null?void 0:t.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(Et[o])this._texts[o]=n||Et[o];else if(this._root)for(const s of this._root.querySelectorAll(i))On(this,s)}handleEvent(t){const{target:e,type:n}=t;t.defaultPrevented||(n==="click"&&$i(this,t),(n==="focus"||n==="focusin")&&Ei(this,t),(n==="blur"||n==="focusout")&&wi(this,t),n==="keydown"&&Si(this,t),n==="mousedown"&&(Wt=this.contains(e)),n==="mouseup"&&(Wt=!1),(n==="mutation"||n==="input")&&(clearTimeout(kn),kn=setTimeout(Dn,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},Mn=t=>t.checkVisibility?t.checkVisibility():!!(t.offsetHeight&&t.offsetHeight),tt=(t,e)=>{var n;t.hidden===e&&(t.hidden=!e,t._input&&On(t,t._input,e),t.popover&&((n=t._input)!=null&&n.isConnected)&&(p(t._input,"popovertarget",Vt(t)),p(t,"popover","manual"),t.togglePopover(e)),e&&Dn(t))},Kt=t=>{t._input&&(gt(t._input||t,In,t),gt(t._root||t,An,t),tt(t,!1),t._input=void 0)},On=(t,e,n=!1)=>{_t(e,In,t,!0),p(e,"aria-autocomplete","list"),p(e,"aria-controls",Vt(t)),p(e,"aria-expanded",`${yi?n:"true"}`),p(e,"autocomplete","off"),p(e,"role","combobox")},Ei=(t,e)=>{var n;const o=e.target instanceof HTMLInputElement;o&&e.isTrusted&&e.stopImmediatePropagation(),G||(G=bi("assertive")),G.isConnected||document.body.appendChild(G),t._input!==e.target&&o&&e.target.list===t&&(t._input&&Kt(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),p(t,ui,Vt((n=t._input.labels)==null?void 0:n[0])),_t(t._root||t,An,t),tt(t,!0))},wi=(t,e)=>{!vt&&!Wt&&t._input&&setTimeout(Pn,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},Pn=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})),Kt(t))},$i=(t,{target:e})=>{var n;if(!t._input||t._input===e)return tt(t,!0);for(const o of t.options)if(o.contains(e))return p(t,"aria-multiselectable")!=="true"&&((n=t._input)==null||n.focus(),tt(t,!1)),vi(t._input,o.value);vt&&Pn(t)},Si=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey||e.key==="Tab")return;tt(t,e.key!=="Escape");const{key:o,target:i}=e,s=[...t.options].filter(Mn),a=s.indexOf(i);let r=-1;if(o==="ArrowDown"&&(r=(a+1)%s.length),o==="ArrowUp"&&(r=(~a?a:s.length)-1),~a&&((o==="Home"||o==="PageUp")&&(r=0),(o==="End"||o==="PageDown")&&(r=s.length-1),o==="Enter"))return s[a].click(),e.preventDefault();if(s[r])for(const d of s)d.tabIndex=-1;s[r]&&e.preventDefault(),(n=s[r]||t._input)==null||n.focus()},Dn=(t,e)=>{const{_texts:n,_root:o,_input:i,options:s}=t,a=(i==null?void 0:i.value.toLowerCase().trim())||"",r=!t.hasAttribute("data-nofilter"),d=[];for(const u of s){const m=`${u.disabled||u.hidden||r&&!u.label.toLowerCase().includes(a)}`;p(u,"aria-hidden",m),Mn(u)&&d.push(u)}const{length:l}=d;clearTimeout(Cn),Cn=setTimeout(()=>{if(t.hidden||(e==null?void 0:e.type)!=="input"||(o==null?void 0:o.activeElement)!==i)return;const u=`${`${n[l===1?"singular":"plural"]}`.replace("%d",`${l}`)}`,m=`${!l&&t.innerText.trim()||u}${++gi%2?" ":""}`;a!==t._value&&G&&(G.textContent=m),t._value=a},1e3),Ft&&d.forEach((u,m)=>p(u,"title",`${m+1}/${l}`))};J&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return Tn(this).getElementById(p(this,"list")||"")}}),xn.define("u-datalist",Ln);const Nn=E.field.split(" ")[0],Ti="--mtds-text-count-over",xi="--mtds-text-count-under",Hn=E.validation.split(" "),Ci=Hn[0],k=(t,e)=>{var n;return((n=t.getPropertyValue(`--mtds-text-${e}`))==null?void 0:n.slice(1,-1))||""};function ki(t){for(const e of t)if(e.isConnected){const n=[],o=[];let i=null,s=null,a=!0;for(const r of e.getElementsByTagName("*"))r instanceof HTMLLabelElement?n.push(r):r instanceof pt?i=r:Nt(r)?s=r:r.hasAttribute("data-description")?o.push(r):r.classList.contains(Ci)?(a=c(r,"data-color")==="success"||!r.clientWidth||!r.clientHeight,o.unshift(r)):r instanceof HTMLParagraphElement&&(o.some(d=>d.contains(r))||o.push(r));if(s){for(const r of n)r.htmlFor=Pt(s);Ai(i),Bn(s),Rn(s),c(s,"aria-describedby",o.map(Pt).join(" ")||null),c(s,"aria-invalid",`${!a}`)}}}function Rn(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function Ai(t){var n;if(!(t!=null&&t.list)||(n=t.list)!=null&&n.hasAttribute("popover"))return;const e=window.getComputedStyle(t);c(t,"data-sr-added",k(e,"combobox-added")),c(t,"data-sr-empty",k(e,"combobox-empty")),c(t,"data-sr-found",k(e,"combobox-found")),c(t,"data-sr-invalid",k(e,"combobox-invalid")),c(t,"data-sr-of",k(e,"combobox-of")),c(t,"data-sr-remove",k(e,"combobox-remove")),c(t,"data-sr-removed",k(e,"combobox-removed")),c(t.list,"data-sr-plural",k(e,"datalist-plural")),c(t.list,"data-sr-singular",k(e,"datalist-singular")),c(t.list,"popover","manual")}function Bn(t){const e=t==null?void 0:t.nextElementSibling,n=e&&c(e,"data-count");if(e&&n){const o=Number(n)-t.value.length,i=o<0,s=c(e,"aria-live")==="polite",a=window.getComputedStyle(e||t),r=k(a,Ti),d=k(a,xi);if(s!==i){c(e,"aria-live",i?"polite":"off");for(const l of Hn)e.classList.toggle(l,i)}e.textContent=(i?r:d).replace("%d",`${Math.abs(o)}`)}}function Ii({target:t,newState:e}){if(t instanceof Ln){const n=t.getRootNode(),o=n==null?void 0:n.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?P(t,!1):o&&(t.style.width=`${o.clientWidth}px`,P(t,o,"bottom",!0))}}function Li({target:t}){Nt(t)&&(Bn(t),Rn(t))}function Mi(t){var e,n;(n=(e=t.target)==null?void 0:e.closest)!=null&&n.call(e,`.${Nn}`)&&t.preventDefault()}function Oi({target:t}){const e=t instanceof pt&&t.list;e&&!(e!=null&&e.hidden)&&setTimeout(()=>P(e,t,2,!0),10)}C(()=>{W(document.documentElement,Nn,ki),b(document,"beforechange",Oi,$),b(document,"input",Li,$),b(document,"invalid",Mi,!0),b(document,"toggle",Ii,$)});const Pi=E.fieldset.split(" ")[0],Di=E.validation.split(" ")[0];function Ni(t){for(const e of t)if(e.isConnected){const n=[];let o=null;for(const i of e.getElementsByTagName("*"))i.classList.contains(Di)?o=Pt(i):Nt(i)&&n.push(i);for(const i of n)c(i,"aria-describedby",o),c(i,"aria-invalid",`${!!o}`)}}C(()=>W(document.documentElement,Pi,Ni));const Hi=E.logo.split(" ")[0];function Ri([t]){if(t!=null&&t.isConnected&&(t==null?void 0:t.firstElementChild)instanceof SVGSVGElement){for(const r of document.head.querySelectorAll("link[rel~='icon']"))r.setAttribute("rel","disabled");const e=t.firstElementChild,n=t==null?void 0:t.hasAttribute("data-env"),o=window.getComputedStyle(e),i=o.getPropertyValue("color"),s=o.getPropertyValue("--mtds-logo-color"),a=e.outerHTML.replace(/\n+/g," ").replace(/(fill|width|height|xmlns)="[^"]+"/gi,"").replace("<svg",`<svg width="40" height="40" fill="${i}"`);document.head.appendChild(Object.assign(document.createElement("link"),{href:`data:image/svg+xml,${encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 55 55'><rect fill='${n?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${n?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${a}</g></svg>`)}`,rel:"icon"}))}}C(()=>W(document.documentElement,Hi,Ri));const Un=E.popover.split(" ")[0];let Gt=0;function Bi({target:t,newState:e}){var n;if(t instanceof HTMLElement&&t.classList.contains(Un)){const o=(n=t.getRootNode())==null?void 0:n.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?(Gt-=1,P(t,!1)):o&&(Gt+=1,P(t,o,c(t,"data-position")||"bottom"))}}function Ui({target:t}){var n;const e=Gt&&((n=t==null?void 0:t.closest)==null?void 0:n.call(t,"a,[popovertargetaction]"));if(e){const o=c(e,"popovertargetaction")||"toggle",i=o==="show"||(o==="hide"?!1:void 0),a=(document.getElementById(c(e,"popovertarget")||"")||e).closest(`.${Un}`);a!=null&&a.isConnected&&(a!=null&&a.togglePopover)&&a.togglePopover(i)}}C(()=>{b(document,"toggle",Bi,$),b(document,"click",Ui)});const qi=E.table.split(" ")[0];function Fi(t){for(const e of t){const n=[];c(e,"role","table"),e.caption&&c(e.caption,"role","caption");for(const o of[e.tHead,e.tFoot,...e.tBodies])if(o){c(o,"role","rowgroup");const i=o.nodeName==="TBODY";for(const s of o.rows){c(s,"role","row");for(const a of s.cells)i?c(a,"data-th",n[a.cellIndex]||":empty"):n.push(a.innerText.trim()),a.nodeName==="TD"?c(a,"role","cell"):(c(a,"role",i?"rowheader":"columnheader"),c(a,"scope",i?"row":"col"))}}}}C(()=>W(document.documentElement,qi,Fi));const Vi=`.${E.togglegroup.split(" ")[0]}`;function Yi(t){var i;const{key:e,target:n}=t,o=n instanceof HTMLInputElement&&n.closest(Vi);if(o&&(e==="Enter"&&n.click(),e!=null&&e.startsWith("Arrow"))){t.preventDefault();const s=o.getElementsByTagName("input"),a=[...s].indexOf(n),r=e.match(/Arrow(Right|Down)/)?1:-1;(i=s[(s.length+a+r)%s.length])==null||i.focus()}}C(()=>b(document,"keydown",Yi));const qn="aria-describedby",Fn="Escape",wt="aria-labelledby",ji="--mtds-tooltip-position",Wi=300,y=Q?Object.assign(document.createElement("div"),{className:E._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let O=null,Vn=Number.NEGATIVE_INFINITY,Yn=0;function Xt({target:t,type:e,key:n}){if(e==="keydown"&&n!==Fn)return;const o=Vn+Wi-Date.now();clearTimeout(Yn),Yn=setTimeout(Ki,Math.max(o,0),n===Fn?null:t)}function Ki(t){var r,d,l;if(Vn=Date.now(),!y||t===y)return;y!=null&&y.isConnected||document.body.append(y);let e=((r=t==null?void 0:t.closest)==null?void 0:r.call(t,"[data-tooltip]"))||null;if(e===O)return;const n=e&&c(e,"data-tooltip")||"",o=e&&c(e,"data-tooltip-position")||((d=window.getComputedStyle(e||document.body).getPropertyValue(ji))==null?void 0:d.trim())||"top";(!n||n==="false"||n==="true"||o==="none")&&(e=null),e&&(y.textContent=n);const s=O&&c(O,wt)===(y==null?void 0:y.id),a=((l=e instanceof HTMLElement?e.innerText:e==null?void 0:e.textContent)==null?void 0:l.trim())||(e==null?void 0:e.hasAttribute(wt))||(e==null?void 0:e.hasAttribute("aria-label"));O==null||O.removeAttribute(s?wt:qn),P(y,!1),O=e,O&&c(O,a?qn:wt,y==null?void 0:y.id),y.togglePopover(!!e),P(y,e||!1,o)}C(()=>{b(document,"blur,focus,mouseout,mouseover",Xt,$),b(window,"keydown",Xt,$),b(window,"blur",Xt,$)});var jn=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Wn;jn&&/^Mac/i.test(((Wn=navigator.userAgentData)==null?void 0:Wn.platform)||navigator.platform);var Gi=":host(:not([hidden])) { display: block }",Kn=typeof HTMLElement>"u"?class{}:HTMLElement;function U(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var Gn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Xn=(t,...e)=>Gn("add",t,e),zn=(t,...e)=>Gn("remove",t,e),Xi=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},zi=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},zt=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))U(o,i,s);return o},Qn={define:(t,e)=>!jn||window.customElements.get(t)||window.customElements.define(t,e)},Qi=class extends Kn{constructor(){super(),this._content=null,this.attachShadow({mode:"open"}).append(zt("slot",null,{name:"summary"}),zt("slot",null,{part:"details-content"}),zt("style",`${Gi}
13
+ ::slotted(u-option[hidden]) { display: none !important }`)}static get observedAttributes(){return["id",...Object.keys(ht).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=yn(this),h(this,"role","listbox"),h(this,"tabindex","-1"),ut(this._root,"focusin",this),ut(this._root,"focus",this,!0),gn(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){pt(this._root||this,"focus",this,!0),pt(this._root||this,"focusin",this),gn(this,!1),Ut(this),this._root=void 0}attributeChangedCallback(t,e,n){const o=t==null?void 0:t.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(ht[o])this._texts[o]=n||ht[o];else if(this._root)for(const s of this._root.querySelectorAll(i))In(this,s)}handleEvent(t){const{target:e,type:n}=t;t.defaultPrevented||(n==="click"&&wi(this,t),(n==="focus"||n==="focusin")&&gi(this,t),(n==="blur"||n==="focusout")&&yi(this,t),n==="keydown"&&Ei(this,t),n==="mousedown"&&(Bt=this.contains(e)),n==="mouseup"&&(Bt=!1),(n==="mutation"||n==="input")&&(clearTimeout(Sn),Sn=setTimeout(Ln,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},kn=t=>t.checkVisibility?t.checkVisibility():!!(t.offsetHeight&&t.offsetHeight),G=(t,e)=>{var n;t.hidden===e&&(t.hidden=!e,t._input&&In(t,t._input,e),t.popover&&((n=t._input)!=null&&n.isConnected)&&(h(t._input,"popovertarget",Ht(t)),h(t,"popover","manual"),t.togglePopover(e)),e&&Ln(t))},Ut=t=>{t._input&&(pt(t._input||t,xn,t),pt(t._root||t,Tn,t),G(t,!1),t._input=void 0)},In=(t,e,n=!1)=>{ut(e,xn,t,!0),h(e,"aria-autocomplete","list"),h(e,"aria-controls",Ht(t)),h(e,"aria-expanded",`${bi?n:"true"}`),h(e,"autocomplete","off"),h(e,"role","combobox")},gi=(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&&Ut(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),h(t,di,Ht((n=t._input.labels)==null?void 0:n[0])),ut(t._root||t,Tn,t),G(t,!0),En())},yi=(t,e)=>{!dt&&!Bt&&t._input&&setTimeout(An,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},An=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})),Ut(t))},wi=(t,{target:e})=>{var n;if(!t._input||t._input===e)return G(t,!0);for(const o of t.options)if(o.contains(e))return h(t,"aria-multiselectable")!=="true"&&((n=t._input)==null||n.focus(),G(t,!1)),vi(t._input,o.value);dt&&An(t)},Ei=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey||e.key==="Tab")return;G(t,e.key!=="Escape");const{key:o,target:i}=e,s=[...t.options].filter(kn),a=s.indexOf(i);let r=-1;if(o==="ArrowDown"&&(r=(a+1)%s.length),o==="ArrowUp"&&(r=(~a?a:s.length)-1),~a&&((o==="Home"||o==="PageUp")&&(r=0),(o==="End"||o==="PageDown")&&(r=s.length-1),o==="Enter"))return s[a].click(),e.preventDefault();if(s[r])for(const l of s)l.tabIndex=-1;s[r]&&e.preventDefault(),(n=s[r]||t._input)==null||n.focus()},Ln=(t,e)=>{const{_texts:n,_root:o,_input:i,options:s}=t,a=(i==null?void 0:i.value.toLowerCase().trim())||"",r=!t.hasAttribute("data-nofilter"),l=[];for(const p of s){const u=`${p.disabled||p.hidden||r&&!p.label.toLowerCase().includes(a)}`;h(p,"aria-hidden",u),kn(p)&&l.push(p)}const{length:d}=l;clearTimeout($n),$n=setTimeout(()=>{const p=`${!d&&t.innerText.trim()||`${n[d===1?"singular":"plural"]}`.replace("%d",`${d}`)}`;(e==null?void 0:e.type)==="input"&&a!==t._value&&!t.hidden&&(o==null?void 0:o.activeElement)===i&&En(p),t._value=a},1e3),Pt&&l.forEach((p,u)=>h(p,"title",`${u+1}/${d}`))};j&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return yn(this).getElementById(h(this,"list")||"")}}),wn.define("u-datalist",Cn);const Mn=y.field.split(" ")[0],On=y.validation.split(" "),$i=On[0],C=(t,e)=>{var n;return((n=t.getPropertyValue(`--mtds-text-${e}`))==null?void 0:n.slice(1,-1))||""};function Si(t){for(const e of t)if(e.isConnected){const n=[],o=[];let i=null,s=null,a=!0;for(const r of e.getElementsByTagName("*"))r instanceof HTMLLabelElement?n.push(r):r instanceof at?i=r:It(r)?s=r:r.hasAttribute("data-description")?o.push(r):r.classList.contains($i)?(a=c(r,"data-color")==="success"||!r.clientWidth||!r.clientHeight,o.unshift(r)):r instanceof HTMLParagraphElement&&(o.some(l=>l.contains(r))||o.push(r));if(s){for(const r of n)r.htmlFor=Ct(s);Ti(i),Pn(s),Dn(s),c(s,"aria-describedby",o.map(Ct).join(" ")||null),c(s,"aria-invalid",`${!a}`)}}}function Dn(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function Ti(t){var n;if(!(t!=null&&t.list)||(n=t.list)!=null&&n.hasAttribute("popover"))return;const e=window.getComputedStyle(t);c(t,"data-sr-added",C(e,"combobox-added")),c(t,"data-sr-empty",C(e,"combobox-empty")),c(t,"data-sr-found",C(e,"combobox-found")),c(t,"data-sr-invalid",C(e,"combobox-invalid")),c(t,"data-sr-of",C(e,"combobox-of")),c(t,"data-sr-remove",C(e,"combobox-remove")),c(t,"data-sr-removed",C(e,"combobox-removed")),c(t.list,"data-sr-plural",C(e,"datalist-plural")),c(t.list,"data-sr-singular",C(e,"datalist-singular")),c(t.list,"popover","manual")}function Pn(t){const e=t==null?void 0:t.nextElementSibling,n=e&&c(e,"data-count");if(e&&n){const o=Number(n)-t.value.length,i=o<0,s=c(e,"aria-live")==="polite",a=window.getComputedStyle(e||t),r=C(a,"count-over"),l=C(a,"count-under");if(s!==i){c(e,"aria-live",i?"polite":"off");for(const d of On)e.classList.toggle(d,i)}e.textContent=(i?r:l).replace("%d",`${Math.abs(o)}`)}}function xi({target:t,newState:e}){if(t instanceof Cn){const n=t.getRootNode(),o=n==null?void 0:n.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?O(t,!1):o&&(t.style.width=`${o.clientWidth}px`,O(t,o,"bottom",!0))}}function Ci({target:t}){It(t)&&(Pn(t),Dn(t))}function ki(t){var e,n;(n=(e=t.target)==null?void 0:e.closest)!=null&&n.call(e,`.${Mn}`)&&t.preventDefault()}function Ii({target:t}){const e=t instanceof at&&t.list;e&&!(e!=null&&e.hidden)&&setTimeout(()=>O(e,t,2,!0),10)}x(()=>{F(document.documentElement,Mn,Si),_(document,"beforechange",Ii,E),_(document,"input",Ci,E),_(document,"invalid",ki,!0),_(document,"toggle",xi,E)});const Ai=y.fieldset.split(" ")[0],Li=y.validation.split(" ")[0],Hn="aria-describedby",Mi="aria-invalid";function Oi(t){requestAnimationFrame(()=>{var e;for(const n of t)if(n.isConnected){const o=[];let i=null;for(const s of n.getElementsByTagName("*"))s.classList.contains(Li)?i=Ct(s):It(s)&&o.push(s);for(const s of o){const a=(e=c(s,Hn))==null?void 0:e.replace(i||"#","");c(s,Hn,`${i||""} ${a||""}`.trim()),c(s,Mi,`${!!i}`)}}})}x(()=>F(document.documentElement,Ai,Oi));const Di=y.logo.split(" ")[0];function Pi([t]){if(t!=null&&t.isConnected&&(t==null?void 0:t.firstElementChild)instanceof SVGSVGElement){for(const r of document.head.querySelectorAll("link[rel~='icon']"))r.setAttribute("rel","disabled");const e=t.firstElementChild,n=t==null?void 0:t.hasAttribute("data-env"),o=window.getComputedStyle(e),i=o.getPropertyValue("color"),s=o.getPropertyValue("--mtds-logo-color"),a=e.outerHTML.replace(/\n+/g," ").replace(/(fill|width|height|xmlns)="[^"]+"/gi,"").replace("<svg",`<svg width="40" height="40" fill="${i}"`);document.head.appendChild(Object.assign(document.createElement("link"),{href:`data:image/svg+xml,${encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 55 55'><rect fill='${n?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${n?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${a}</g></svg>`)}`,rel:"icon"}))}}x(()=>F(document.documentElement,Di,Pi));const Nn=y.popover.split(" ")[0];let qt=0;function Hi({target:t,newState:e}){var n;if(t instanceof HTMLElement&&t.classList.contains(Nn)){const o=(n=t.getRootNode())==null?void 0:n.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?(qt-=1,O(t,!1)):o&&(qt+=1,O(t,o,c(t,"data-position")||"bottom"))}}function Ni({target:t}){var n;const e=qt&&((n=t==null?void 0:t.closest)==null?void 0:n.call(t,"a,[popovertargetaction]"));if(e){const o=c(e,"popovertargetaction")||"toggle",i=o==="show"||(o==="hide"?!1:void 0),a=(document.getElementById(c(e,"popovertarget")||"")||e).closest(`.${Nn}`);a!=null&&a.isConnected&&(a!=null&&a.togglePopover)&&a.togglePopover(i)}}x(()=>{_(document,"toggle",Hi,E),_(document,"click",Ni)});const Ri=y.table.split(" ")[0];function Bi(t){for(const e of t){const n=[];c(e,"role","table"),e.caption&&c(e.caption,"role","caption");for(const o of[e.tHead,e.tFoot,...e.tBodies])if(o){c(o,"role","rowgroup");const i=o.nodeName==="TBODY";for(const s of o.rows){c(s,"role","row");for(const a of s.cells)i?c(a,"data-th",n[a.cellIndex]||":empty"):n.push(a.innerText.trim()),a.nodeName==="TD"?c(a,"role","cell"):(c(a,"role",i?"rowheader":"columnheader"),c(a,"scope",i?"row":"col"))}}}}x(()=>F(document.documentElement,Ri,Bi));const Ui=`.${y.togglegroup.split(" ")[0]}`;function qi(t){var i;const{key:e,target:n}=t,o=n instanceof HTMLInputElement&&n.closest(Ui);if(o&&(e==="Enter"&&n.click(),e!=null&&e.startsWith("Arrow"))){t.preventDefault();const s=o.getElementsByTagName("input"),a=[...s].indexOf(n),r=e.match(/Arrow(Right|Down)/)?1:-1;(i=s[(s.length+a+r)%s.length])==null||i.focus()}}x(()=>_(document,"keydown",qi));const Rn="aria-describedby",Bn="Escape",mt="aria-labelledby",Fi="--mtds-tooltip-position",Vi=300,g=Y?Object.assign(document.createElement("div"),{className:y._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let M=null,Un=Number.NEGATIVE_INFINITY,qn=0;function Ft({target:t,type:e,key:n}){if(e==="keydown"&&n!==Bn)return;const o=Un+Vi-Date.now();clearTimeout(qn),qn=setTimeout(Wi,Math.max(o,0),n===Bn?null:t)}function Wi(t){var r,l,d;if(Un=Date.now(),!g||t===g)return;g!=null&&g.isConnected||document.body.append(g);let e=((r=t==null?void 0:t.closest)==null?void 0:r.call(t,"[data-tooltip]"))||null;if(e===M)return;const n=e&&c(e,"data-tooltip")||"",o=e&&c(e,"data-tooltip-position")||((l=window.getComputedStyle(e||document.body).getPropertyValue(Fi))==null?void 0:l.trim())||"top";(!n||n==="false"||n==="true"||o==="none")&&(e=null),e&&(g.textContent=n);const s=M&&c(M,mt)===(g==null?void 0:g.id),a=((d=e instanceof HTMLElement?e.innerText:e==null?void 0:e.textContent)==null?void 0:d.trim())||(e==null?void 0:e.hasAttribute(mt))||(e==null?void 0:e.hasAttribute("aria-label"));M==null||M.removeAttribute(s?mt:Rn),O(g,!1),M=e,M&&c(M,a?Rn:mt,g==null?void 0:g.id),g.togglePopover(!!e),O(g,e||!1,o)}x(()=>{_(document,"blur,focus,mouseout,mouseover",Ft,E),_(window,"keydown",Ft,E),_(window,"blur",Ft,E)});var Fn=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Vn;Fn&&/^Mac/i.test(((Vn=navigator.userAgentData)==null?void 0:Vn.platform)||navigator.platform);var Yi=":host(:not([hidden])) { display: block }",Wn=typeof HTMLElement>"u"?class{}:HTMLElement;function N(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var Yn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},jn=(t,...e)=>Yn("add",t,e),Kn=(t,...e)=>Yn("remove",t,e),ji=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Ki=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},Vt=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))N(o,i,s);return o},Gn={define:(t,e)=>!Fn||window.customElements.get(t)||window.customElements.define(t,e)},Gi=class extends Wn{constructor(){super(),this._content=null,this.attachShadow({mode:"open"}).append(Vt("slot",null,{name:"summary"}),Vt("slot",null,{part:"details-content"}),Vt("style",`${Yi}
13
14
  ::slotted(u-summary) { cursor: pointer; display: block }
14
15
  ::slotted(u-summary)::before { content: ''; display: inline-block; vertical-align: middle; margin-inline: .05em .3125em; border-block: .3125em solid transparent; border-inline-start: .5em solid }
15
16
  ::slotted(u-summary[aria-expanded="true"])::before { rotate: 90deg }
16
- :host > [part="details-content"]:not([hidden=""]) { display: block }`))}static get observedAttributes(){return["open"]}connectedCallback(){var t;this._content=(t=this.shadowRoot)==null?void 0:t.children[1],Xn(this._content,"beforematch",this),Xn(this,"click,keydown",this),this.attributeChangedCallback()}disconnectedCallback(){this._content&&zn(this._content,"beforematch",this),zn(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"&&U(s,"aria-expanded",`${i}`);if(this._content&&(U(this._content,"aria-hidden",`${!i}`),this._content.hidden=i?!1:o),i&&this.name){const s=zi(this).querySelectorAll(`${this.nodeName}[name="${this.name}"]`);for(const a of s)a!==this&&(a.open=!1)}t==="open"&&e===null!=(n===null)&&this.dispatchEvent(new Event("toggle"))}handleEvent(t){const e=this.querySelector(":scope > u-summary"),n=e==null?void 0:e.contains(t.target);t.defaultPrevented||(t.type==="beforematch"&&(this.open=!0),n&&t.type==="keydown"&&Xi(t),n&&t.type==="click"&&(this.open=!this.open))}get open(){return this.hasAttribute("open")}set open(t){U(this,"open",t?"":null)}get name(){return U(this,"name")||""}set name(t){U(this,"name",t)}},Ji=class extends Kn{connectedCallback(){U(this,"role","button"),this.slot="summary",this.tabIndex=0}};Qn.define("u-details",Qi),Qn.define("u-summary",Ji);var $t=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Jn=$t&&/firefox/i.test(navigator.userAgent),Zi=$t&&/iPad|iPhone|iPod/.test(navigator.userAgent),Zn;$t&&/^Mac/i.test(((Zn=navigator.userAgentData)==null?void 0:Zn.platform)||navigator.platform);var ts=typeof HTMLElement>"u"?class{}:HTMLElement;function w(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var to=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},es=0,ns=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++es).toString(32)}`),t.id):"",eo=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))w(o,i,s);return o},os={define:(t,e)=>!$t||window.customElements.get(t)||window.customElements.define(t,e)},is=t=>{var e;const n=to(t),o=w(t,"aria-label")||"";return[...(((e=w(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(s=>n==null?void 0:n.querySelector(`[id="${s}"]`)),...Array.from(t.labels||[])].reduce((s,a)=>{var r;return s||((r=a==null?void 0:a.innerText)==null?void 0:r.trim())||""},o)},Qt=!1,no=class extends ts{static get observedAttributes(){return["aria-label","aria-labelledby","value","max"]}constructor(){super(),this.attachShadow({mode:"open"}).append(eo("slot",null,{hidden:""}),eo("style",`:host(:not([hidden])) { box-sizing: border-box; border: 1px solid; display: inline-block; height: .5em; width: 10em; overflow: hidden }
17
+ :host > [part="details-content"]:not([hidden=""]) { display: block }`))}static get observedAttributes(){return["open"]}connectedCallback(){var t;this._content=(t=this.shadowRoot)==null?void 0:t.children[1],jn(this._content,"beforematch",this),jn(this,"click,keydown",this),this.attributeChangedCallback()}disconnectedCallback(){this._content&&Kn(this._content,"beforematch",this),Kn(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"&&N(s,"aria-expanded",`${i}`);if(this._content&&(N(this._content,"aria-hidden",`${!i}`),this._content.hidden=i?!1:o),i&&this.name){const s=Ki(this).querySelectorAll(`${this.nodeName}[name="${this.name}"]`);for(const a of s)a!==this&&(a.open=!1)}t==="open"&&e===null!=(n===null)&&this.dispatchEvent(new Event("toggle"))}handleEvent(t){const e=this.querySelector(":scope > u-summary"),n=e==null?void 0:e.contains(t.target);t.defaultPrevented||(t.type==="beforematch"&&(this.open=!0),n&&t.type==="keydown"&&ji(t),n&&t.type==="click"&&(this.open=!this.open))}get open(){return this.hasAttribute("open")}set open(t){N(this,"open",t?"":null)}get name(){return N(this,"name")||""}set name(t){N(this,"name",t)}},Xi=class extends Wn{connectedCallback(){N(this,"role","button"),this.slot="summary",this.tabIndex=0}};Gn.define("u-details",Gi),Gn.define("u-summary",Xi);var vt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Xn=vt&&/firefox/i.test(navigator.userAgent),zi=vt&&/iPad|iPhone|iPod/.test(navigator.userAgent),zn;vt&&/^Mac/i.test(((zn=navigator.userAgentData)==null?void 0:zn.platform)||navigator.platform);var Qi=typeof HTMLElement>"u"?class{}:HTMLElement;function w(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var Qn=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},Ji=0,Zi=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Ji).toString(32)}`),t.id):"",Jn=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))w(o,i,s);return o},ts={define:(t,e)=>!vt||window.customElements.get(t)||window.customElements.define(t,e)},es=t=>{var e;const n=Qn(t),o=w(t,"aria-label")||"";return[...(((e=w(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(s=>n==null?void 0:n.querySelector(`[id="${s}"]`)),...Array.from(t.labels||[])].reduce((s,a)=>{var r;return s||((r=a==null?void 0:a.innerText)==null?void 0:r.trim())||""},o)},Wt=!1,Zn=class extends Qi{static get observedAttributes(){return["aria-label","aria-labelledby","value","max"]}constructor(){super(),this.attachShadow({mode:"open"}).append(Jn("slot",null,{hidden:""}),Jn("style",`:host(:not([hidden])) { box-sizing: border-box; border: 1px solid; display: inline-block; height: .5em; width: 10em; overflow: hidden }
17
18
  :host::before { content: ''; display: block; height: 100%; background: currentColor; width: var(--percentage, 0%); transition: width .2s }
18
19
  :host(:not([value])) { background: linear-gradient(90deg,currentColor 25%, transparent 50%, currentColor 75%) 50%/400% }
19
20
  @media (prefers-reduced-motion: no-preference) { :host { animation: indeterminate 2s linear infinite } }
20
- @keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(Qt)return;Qt=!0;const t=Zi||Jn,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let n=is(this);if(t&&(n=`${n.replace(/\d+%$/,"")} ${e}%`),Jn)for(const o of this.labels)w(o,"aria-label",n);w(this,"aria-busy",`${this.position===-1}`),w(this,"aria-label",n.trim()),w(this,"aria-labelledby",null),w(this,"aria-valuemax","100"),w(this,"aria-valuemin","0"),w(this,"aria-valuenow",`${e}`),w(this,"role",t?"img":"progressbar"),Qt=!1}get labels(){const t=this.closest("label:not([for])"),e=ns(this);return t&&(t.htmlFor=e),to(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return io(this,"value")}set value(t){so(this,"value",t)}get max(){return io(this,"max")||1}set max(t){so(this,"max",t)}};no.formAssociated=!0;var oo=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),io=(t,e)=>{const n=w(t,e);return oo(n)?Math.max(0,Number.parseFloat(n)):null},so=(t,e,n)=>{if(n===null||oo(n))w(t,e,`${n}`);else throw new Error(`Failed to set non-numeric '${w}': '${n}'`)};return os.define("u-progress",no),S.UHTMLComboboxElement=pt,S.UHTMLTabElement=le,S.UHTMLTabListElement=re,S.UHTMLTabPanelElement=de,S.UHTMLTabsElement=ae,S.analytics=jo,S.pagination=Ko,S.styles=Go,S.toggleAppExpanded=vn,S.version=Bo,Object.defineProperty(S,Symbol.toStringTag,{value:"Module"}),S}({});
21
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWNvbWJvYm94L2Rpc3QvdS1jb21ib2JveC5qcyIsIi4uL2Rlc2lnbnN5c3RlbS91dGlscy50cyIsIi4uL2Rlc2lnbnN5c3RlbS9hbmFseXRpY3MvYW5hbHl0aWNzLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BhZ2luYXRpb24vcGFnaW5hdGlvbi1oZWxwZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC10b2dnbGUuanMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9icmVhZGNydW1icy9icmVhZGNydW1icy1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9kaWFsb2cvZGlhbG9nLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2Vycm9yc3VtbWFyeS9lcnJvcnN1bW1hcnktb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kYXRhbGlzdC9kaXN0L3UtZGF0YWxpc3QuanMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGQvZmllbGQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGRzZXQvZmllbGRzZXQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vbG9nby9sb2dvLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BvcG92ZXIvcG9wb3Zlci1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90YWJsZS90YWJsZS1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b2dnbGVncm91cC90b2dnbGVncm91cC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b29sdGlwL3Rvb2x0aXAtb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kZXRhaWxzL2Rpc3QvdS1kZXRhaWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtcHJvZ3Jlc3MvZGlzdC91LXByb2dyZXNzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xuXG4vLyB1LXRhYnMudHNcbnZhciBBUklBX0NPTlRST0xTID0gXCJhcmlhLWNvbnRyb2xzXCI7XG52YXIgQVJJQV9TRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xudmFyIFVIVE1MVGFic0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgRElTUExBWV9CTE9DSyk7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFibGlzdFwiLCB0aGlzKVswXSB8fCBudWxsO1xuICB9XG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICBzZXRTZWxlY3RlZCh0aGlzLnRhYnNbaW5kZXhdKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJcIiwgdGhpcyk7XG4gIH1cbiAgZ2V0IHBhbmVscygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJwYW5lbFwiLCB0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYkxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFibGlzdFwiKTtcbiAgICBvbih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCkgdGhpcy5oYW5kbGVFdmVudCgpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LnR5cGUgPT09IFwibXV0YXRpb25cIikge1xuICAgICAgY29uc3QgdGFiID0gdGhpcy50YWJzW01hdGgubWF4KHRoaXMuc2VsZWN0ZWRJbmRleCwgMCldO1xuICAgICAgcmV0dXJuIHRhYiA9PSBudWxsID8gdm9pZCAwIDogdGFiLnNldEF0dHJpYnV0ZShBUklBX1NFTEVDVEVELCBcInRydWVcIik7XG4gICAgfVxuICAgIGNvbnN0IHsga2V5IH0gPSBldmVudDtcbiAgICBjb25zdCB0YWJzID0gWy4uLnRoaXMudGFic107XG4gICAgY29uc3QgcHJldiA9IHRhYnMuZmluZEluZGV4KCh0YWIpID0+IHRhYi5jb250YWlucyhldmVudC50YXJnZXQpKTtcbiAgICBsZXQgbmV4dCA9IHByZXY7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgcHJldiA9PT0gLTEpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSBzZXRTZWxlY3RlZCh0YWJzW3ByZXZdKTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIgJiYgIWFzQnV0dG9uKGV2ZW50KSkge1xuICAgICAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIiB8fCBrZXkgPT09IFwiQXJyb3dSaWdodFwiKVxuICAgICAgICBuZXh0ID0gKHByZXYgKyAxKSAlIHRhYnMubGVuZ3RoO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93VXBcIiB8fCBrZXkgPT09IFwiQXJyb3dMZWZ0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiB8fCB0YWJzLmxlbmd0aCkgLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkVuZFwiKSBuZXh0ID0gdGFicy5sZW5ndGggLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkhvbWVcIikgbmV4dCA9IDA7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiVGFiXCIpIG5leHQgPSBnZXRTZWxlY3RlZEluZGV4KHRhYnMpO1xuICAgICAgZWxzZSByZXR1cm47XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGFic1twcmV2XS50YWJJbmRleCA9IC0xO1xuICAgICAgICB0YWJzW25leHRdLnRhYkluZGV4ID0gMDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGtleSAhPT0gXCJUYWJcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0YWJzW25leHRdLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJzKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbn07XG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MVGFiRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIEFSSUFfU0VMRUNURUQsIEFSSUFfQ09OVFJPTFNdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jayB9XCJcbiAgICApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFiXCIpO1xuICAgIHRoaXMudGFiSW5kZXggPSB0aGlzLnNlbGVjdGVkID8gMCA6IC0xO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoIVNLSVBfQVRUUl9DSEFOR0UgJiYgdGhpcy5zZWxlY3RlZCAmJiB0aGlzLnRhYkxpc3QpIHtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgICAgY29uc3QgdGFicyA9IFsuLi50aGlzLnRhYkxpc3QucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpXTtcbiAgICAgIGNvbnN0IHBhbmVscyA9IHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFicGFuZWxcIiwgdGhpcy50YWJzRWxlbWVudCB8fCB0aGlzKTtcbiAgICAgIGNvbnN0IG5leHRQYW5lbCA9IGdldFBhbmVsKHRoaXMsIHBhbmVsc1t0YWJzLmluZGV4T2YodGhpcyldKTtcbiAgICAgIGlmIChuZXh0UGFuZWwpIGF0dHIobmV4dFBhbmVsLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKHRoaXMpKTtcbiAgICAgIHRhYnMuZm9yRWFjaCgodGFiLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBwYW5lbCA9IGdldFBhbmVsKHRhYiwgcGFuZWxzW2luZGV4XSk7XG4gICAgICAgIHRhYi50YWJJbmRleCA9IHRhYiA9PT0gdGhpcyA/IDAgOiAtMTtcbiAgICAgICAgYXR0cih0YWIsIEFSSUFfU0VMRUNURUQsIGAke3RhYiA9PT0gdGhpc31gKTtcbiAgICAgICAgaWYgKHBhbmVsKSBwYW5lbC5oaWRkZW4gPSBwYW5lbCAhPT0gbmV4dFBhbmVsO1xuICAgICAgICBpZiAocGFuZWwpIGF0dHIodGFiLCBBUklBX0NPTlRST0xTLCBwYW5lbC5pZCk7XG4gICAgICB9KTtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgY29uc3QgdGFibGlzdCA9IHRoaXMucGFyZW50RWxlbWVudDtcbiAgICByZXR1cm4gKHRhYmxpc3QgPT0gbnVsbCA/IHZvaWQgMCA6IHRhYmxpc3Qubm9kZU5hbWUpID09PSBcIlUtVEFCTElTVFwiID8gdGFibGlzdCA6IG51bGw7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQpID09PSBcInRydWVcIjtcbiAgfVxuICBzZXQgc2VsZWN0ZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQsIGAkeyEhdmFsdWV9YCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiB0YWIgaW4gYSB0YWJsaXN0LiAqL1xuICBnZXQgaW5kZXgoKSB7XG4gICAgY29uc3QgdGFiTGlzdCA9IHRoaXMudGFiTGlzdDtcbiAgICByZXR1cm4gdGFiTGlzdCA/IFsuLi50YWJMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKV0uaW5kZXhPZih0aGlzKSA6IDA7XG4gIH1cbiAgZ2V0IHBhbmVsKCkge1xuICAgIHJldHVybiBnZXRQYW5lbCh0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYlBhbmVsRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImhpZGRlblwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFicGFuZWxcIik7XG4gICAgdGhpcy5oaWRkZW4gPSBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicykgPT09IC0xO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLmhpZGRlbiB8fCBpc0ZvY3VzYWJsZSh0aGlzLmZpcnN0Q2hpbGQpKVxuICAgICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIG51bGwpO1xuICAgIGVsc2UgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgY29uc3QgY3NzID0gYHUtdGFiWyR7QVJJQV9DT05UUk9MU309XCIke3RoaXMuaWR9XCJdYDtcbiAgICByZXR1cm4gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKGNzcyk7XG4gIH1cbn07XG52YXIgcXVlcnlXaXRob3V0TmVzdGVkID0gKHRhZywgc2VsZikgPT4gc2VsZi5xdWVyeVNlbGVjdG9yQWxsKGAke3RhZ306bm90KDpzY29wZSB1LXRhYnBhbmVsICR7dGFnfSlgKTtcbnZhciBnZXRQYW5lbCA9ICh0YWIsIHBhbmVsKSA9PiB7XG4gIGNvbnN0IGlkMiA9IGF0dHIodGFiLCBBUklBX0NPTlRST0xTKSB8fCB1c2VJZChwYW5lbCk7XG4gIGNvbnN0IGVsID0gZ2V0Um9vdCh0YWIpLmdldEVsZW1lbnRCeUlkKGlkMik7XG4gIHJldHVybiAoZWwgPT0gbnVsbCA/IHZvaWQgMCA6IGVsLm5vZGVOYW1lKSA9PT0gXCJVLVRBQlBBTkVMXCIgPyBlbCA6IG51bGw7XG59O1xudmFyIGdldFNlbGVjdGVkSW5kZXggPSAodGFicykgPT4gWy4uLnRhYnNdLmZpbmRJbmRleCgodGFiKSA9PiBhdHRyKHRhYiwgQVJJQV9TRUxFQ1RFRCkgPT09IFwidHJ1ZVwiKTtcbnZhciBzZXRTZWxlY3RlZCA9ICh0YWIpID0+IHRhYiAmJiBhdHRyKHRhYiwgXCJhcmlhLXNlbGVjdGVkXCIsIFwidHJ1ZVwiKTtcbnZhciBpc0ZvY3VzYWJsZSA9IChlbCkgPT4gZWwgaW5zdGFuY2VvZiBFbGVtZW50ICYmICFlbC5tYXRjaGVzKCc6ZGlzYWJsZWQsW3RhYmluZGV4Xj1cIi1cIl0nKSAmJiBlbC5tYXRjaGVzKFxuICBgW2NvbnRlbnRlZGl0YWJsZV0sW2NvbnRyb2xzXSxbaHJlZl0sW3RhYmluZGV4XSxpbnB1dDpub3QoW3R5cGU9XCJoaWRkZW5cIl0pLHNlbGVjdCx0ZXh0YXJlYSxidXR0b24sc3VtbWFyeSxpZnJhbWVgXG4pO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJzXCIsIFVIVE1MVGFic0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJsaXN0XCIsIFVIVE1MVGFiTGlzdEVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJcIiwgVUhUTUxUYWJFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFicGFuZWxcIiwgVUhUTUxUYWJQYW5lbEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTFRhYkVsZW1lbnQsIFVIVE1MVGFiTGlzdEVsZW1lbnQsIFVIVE1MVGFiUGFuZWxFbGVtZW50LCBVSFRNTFRhYnNFbGVtZW50IH07XG4iLCJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5cbi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfRklSRUZPWCA9IElTX0JST1dTRVIgJiYgL2ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIEZPQ1VTX09VVExJTkUgPSBcIm91dGxpbmU6IDFweCBkb3R0ZWQ7IG91dGxpbmU6IDVweCBhdXRvIEhpZ2hsaWdodDsgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2JzZXJ2ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgbXV0YXRpb25PYnNlcnZlciA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHJldHVybiBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICB0cnkge1xuICAgIG9ic2VydmVycy5nZXQoZWxlbWVudCkuZGlzY29ubmVjdCgpO1xuICAgIG9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQyLCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0MikgZWwudGV4dENvbnRlbnQgPSB0ZXh0MjtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIGNyZWF0ZUFyaWFMaXZlID0gKG1vZGUpID0+IHtcbiAgY29uc3QgbGl2ZSA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGxpdmUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246Zml4ZWQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXBcIjtcbiAgYXR0cihsaXZlLCBcImFyaWEtbGl2ZVwiLCBtb2RlKTtcbiAgcmV0dXJuIGxpdmU7XG59O1xudmFyIHNldFZhbHVlID0gKGlucHV0LCBkYXRhLCB0eXBlID0gXCJcIikgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlLCBkYXRhLCBpbnB1dFR5cGU6IHR5cGUgfTtcbiAgY29uc3QgcHJvdG8gPSBIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImJlZm9yZWlucHV0XCIsIGV2ZW50KSk7XG4gIChfYiA9IChfYTIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBcInZhbHVlXCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoaW5wdXQsIGRhdGEpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiaW5wdXRcIiwgZXZlbnQpKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbn07XG5cbi8vIHUtY29tYm9ib3gudHNcbnZhciBMSVZFO1xudmFyIExJVkVfU1JfRklYID0gMDtcbnZhciBJU19QUkVTUyA9IGZhbHNlO1xudmFyIEVWRU5UUyA9IFwiYmVmb3JlaW5wdXQsYmx1cixmb2N1cyxjbGljayxpbnB1dCxrZXlkb3duLG1vdXNlZG93bixtb3VzZXVwXCI7XG52YXIgRVZFTlRfT05DRSA9IHsgb25jZTogdHJ1ZSwgcGFzc2l2ZTogdHJ1ZSB9O1xudmFyIElTX0ZJUkVGT1hfTUFDID0gSVNfRklSRUZPWCAmJiAhSVNfQU5EUk9JRDtcbnZhciBJU19NT0JJTEUgPSBJU19BTkRST0lEIHx8IElTX0lPUztcbnZhciBGQUxTRSA9IFwiZmFsc2VcIjtcbnZhciBDTElDSyA9IFwiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0XCI7XG52YXIgVEVYVFMgPSB7XG4gIGFkZGVkOiBcIkFkZGVkXCIsXG4gIGVtcHR5OiBcIk5vIHNlbGVjdGVkXCIsXG4gIGZvdW5kOiBcIk5hdmlnYXRlIGxlZnQgdG8gZmluZCAlZCBzZWxlY3RlZFwiLFxuICBpbnZhbGlkOiBcIkludmFsaWQgdmFsdWVcIixcbiAgb2Y6IFwib2ZcIixcbiAgcmVtb3ZlOiBcIlByZXNzIHRvIHJlbW92ZVwiLFxuICByZW1vdmVkOiBcIlJlbW92ZWRcIlxufTtcbnZhciBVSFRNTENvbWJvYm94RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9zcGVhayA9IFwiXCI7XG4gICAgdGhpcy5fdGV4dHMgPSBfX3NwcmVhZFZhbHVlcyh7fSwgVEVYVFMpO1xuICAgIHRoaXMuX3ZhbHVlID0gXCJcIjtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAgICAgLy8gQ29udGVudCBzbG90XG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGA6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jazsgY3Vyc29yOiBwb2ludGVyOyAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCkgfSAvKiBNdXN0IGJlIGRpc3BsYXkgYmxvY2sgaW4gU2FmYXJpIHRvIGFsbG93IGZvY3VzIGluc2lkZSAqL1xuXHRcdFx0XHQ6aG9zdCg6bm90KFtkYXRhLW11bHRpcGxlXSkpIDo6c2xvdHRlZChkYXRhKSxcblx0XHRcdFx0Omhvc3QoW2RhdGEtbXVsdGlwbGU9XCJmYWxzZVwiXSkgOjpzbG90dGVkKGRhdGEpIHsgZGlzcGxheTogbm9uZSB9IC8qIEhpZGUgZGF0YSBpZiBub3QgbXVsdGlwbGUgKi9cblx0XHRcdFx0OjpzbG90dGVkKGRlbCkgeyB0ZXh0LWRlY29yYXRpb246IG5vbmUgfVxuXHRcdFx0XHQ6OnNsb3R0ZWQoZGF0YSkgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBvaW50ZXItZXZlbnRzOiBub25lIH1cbiAgICAgICAgOjpzbG90dGVkKGRhdGEpOjphZnRlciB7IGNvbnRlbnQ6ICdcXFxcMDBENyc7IGNvbnRlbnQ6ICdcXFxcMDBENycgLyAnJzsgcGFkZGluZy1pbmxpbmU6IC41Y2g7IHBvaW50ZXItZXZlbnRzOiBhdXRvIH1cbiAgICAgICAgOjpzbG90dGVkKGRhdGE6Zm9jdXMpIHsgJHtGT0NVU19PVVRMSU5FfSB9YFxuICAgICAgICAvLyBTaG93IGZvY3VzIG91dGxpbmUgYXJvdW5kIDo6YWZ0ZXIgb25seVxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgLy8gTG9jYWxseSBzdG9yZSB2YWx1ZSB0byBzdG9yZSB2YWx1ZSBiZWZvcmUgaW5wdXQtY2xpY2tcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKFRFWFRTKS5tYXAoKGtleSkgPT4gYGRhdGEtc3ItJHtrZXl9YCk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgb24odGhpcywgRVZFTlRTLCB0aGlzLCB0cnVlKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICAgIHNldFRpbWVvdXQocmVuZGVyLCAwLCB0aGlzKTtcbiAgICBzZXRUaW1lb3V0KHN5bmNJbnB1dFZhbHVlLCAwLCB0aGlzKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socHJvcCwgXywgdmFsKSB7XG4gICAgY29uc3QgdGV4dDIgPSBwcm9wLnNwbGl0KFwiZGF0YS1zci1cIilbMV07XG4gICAgaWYgKFRFWFRTW3RleHQyXSkgdGhpcy5fdGV4dHNbdGV4dDJdID0gdmFsIHx8IFRFWFRTW3RleHQyXTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBkaXNjb25uZWN0Q2FjaGUodGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gICAgb2ZmKHRoaXMsIEVWRU5UUywgdGhpcywgdHJ1ZSk7XG4gICAgdGhpcy5fcm9vdCA9IHZvaWQgMDtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJiZWZvcmVpbnB1dFwiKSB0aGlzLl92YWx1ZSA9ICh0YXJnZXQgPT0gbnVsbCA/IHZvaWQgMCA6IHRhcmdldC52YWx1ZSkgfHwgXCJcIjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJibHVyXCIpIG9uQmx1cih0aGlzKTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSBvbkNsaWNrKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJmb2N1c1wiKSBvbkZvY3VzKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJpbnB1dFwiKSBvbklucHV0KHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIG9uS2V5RG93bih0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwibW91c2Vkb3duXCIpIElTX1BSRVNTID0gdGhpcy5jb250YWlucyh0YXJnZXQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcIm1vdXNldXBcIikgSVNfUFJFU1MgPSBmYWxzZTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJtdXRhdGlvblwiKSByZW5kZXIodGhpcywgZXZlbnQpO1xuICB9XG4gIGdldCBtdWx0aXBsZSgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IGF0dHIodGhpcywgXCJkYXRhLW11bHRpcGxlXCIpKSAhPSBudWxsID8gX2EyIDogRkFMU0UpICE9PSBGQUxTRTtcbiAgfVxuICBzZXQgbXVsdGlwbGUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwiZGF0YS1tdWx0aXBsZVwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgY3JlYXRhYmxlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gYXR0cih0aGlzLCBcImRhdGEtY3JlYXRhYmxlXCIpKSAhPSBudWxsID8gX2EyIDogRkFMU0UpICE9PSBGQUxTRTtcbiAgfVxuICBzZXQgY3JlYXRhYmxlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImRhdGEtY3JlYXRhYmxlXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBjb250cm9sKCkge1xuICAgIHJldHVybiB0aGlzLl9jb250cm9sIHx8IHRoaXMucXVlcnlTZWxlY3RvcihcImlucHV0XCIpO1xuICB9XG4gIGdldCBsaXN0KCkge1xuICAgIHJldHVybiB0aGlzLl9saXN0IHx8IHRoaXMucXVlcnlTZWxlY3RvcihcInUtZGF0YWxpc3QsZGF0YWxpc3RcIikgfHwgbnVsbDtcbiAgfVxuICBnZXQgaXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zIHx8IHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJkYXRhXCIpO1xuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHZhciBfYTIsIF9iO1xuICAgIGNvbnN0IHRhZyA9IGAkeygoX2EyID0gdGhpcy5saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLm5vZGVOYW1lKSA9PT0gXCJVLURBVEFMSVNUXCIgPyBcInUtXCIgOiBcIlwifW9wdGlvbmA7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMgfHwgKChfYiA9IHRoaXMubGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZykpO1xuICB9XG4gIGdldCB2YWx1ZXMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLml0ZW1zXS5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpO1xuICB9XG4gIGFkZCh2YWx1ZSkge1xuICAgIHZhciBfYTI7XG4gICAgY29uc3QgaXRlbSA9IGNyZWF0ZUl0ZW0odmFsdWUpO1xuICAgIHRoaXMudmFsdWVzLmluY2x1ZGVzKGl0ZW0udmFsdWUpIHx8IC8vIFByZXZlbnQgZHVwbGljYXRlc1xuICAgICgoX2EyID0gdGhpcy5jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmluc2VydEFkamFjZW50RWxlbWVudChcImJlZm9yZWJlZ2luXCIsIGl0ZW0pKTtcbiAgfVxufTtcbnZhciB0ZXh0ID0gKGVsKSA9PiB7XG4gIHZhciBfYTI7XG4gIHJldHVybiAoKF9hMiA9IGVsID09IG51bGwgPyB2b2lkIDAgOiBlbC50ZXh0Q29udGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG59O1xudmFyIGNyZWF0ZUl0ZW0gPSAodmFsdWUpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXCJkYXRhXCIsIHZhbHVlLCB7IHZhbHVlIH0pO1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBIVE1MRGF0YUVsZW1lbnQpIHJldHVybiB2YWx1ZTtcbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXCJkYXRhXCIsIHZhbHVlLmxhYmVsIHx8IHZhbHVlLnZhbHVlLCB7XG4gICAgdmFsdWU6IHZhbHVlLnZhbHVlIHx8IHZhbHVlLmxhYmVsIHx8IFwiXCJcbiAgfSk7XG59O1xudmFyIGRpc2Nvbm5lY3RDYWNoZSA9IChlbCkgPT4ge1xuICBlbC5fZm9jdXMgPSBlbC5fY29udHJvbCA9IGVsLl9pdGVtcyA9IGVsLl9saXN0ID0gZWwuX29wdGlvbnMgPSB2b2lkIDA7XG59O1xudmFyIHJlbmRlciA9IChzZWxmLCBlKSA9PiB7XG4gIHZhciBfYTIsIF9iLCBfYztcbiAgbGV0IHsgX2ZvY3VzLCBfc3BlYWssIF90ZXh0cywgaXRlbXMsIGNvbnRyb2wsIGxpc3QsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB7IGFkZGVkTm9kZXMsIHJlbW92ZWROb2RlcyB9ID0gKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZGV0YWlsWzBdKSB8fCB7fTtcbiAgY29uc3QgaXNNdWx0aUVkaXQgPSAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5kZXRhaWxbMV0pIHx8IChhZGRlZE5vZGVzID09IG51bGwgPyB2b2lkIDAgOiBhZGRlZE5vZGVzWzFdKSB8fCAoYWRkZWROb2RlcyA9PSBudWxsID8gdm9pZCAwIDogYWRkZWROb2Rlc1sxXSk7XG4gIGNvbnN0IGVkaXQgPSBpc011bHRpRWRpdCA/IG51bGwgOiAoYWRkZWROb2RlcyA9PSBudWxsID8gdm9pZCAwIDogYWRkZWROb2Rlc1swXSkgfHwgKHJlbW92ZWROb2RlcyA9PSBudWxsID8gdm9pZCAwIDogcmVtb3ZlZE5vZGVzWzBdKTtcbiAgY29uc3QgdG90YWwgPSBtdWx0aXBsZSA/IGl0ZW1zLmxlbmd0aCA6IDE7XG4gIGNvbnN0IHZhbHVlcyA9IFtdO1xuICBsZXQgbGFiZWwgPSBgJHtfc3BlYWt9JHt0ZXh0KChfYTIgPSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmxhYmVscykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMlswXSl9LCAke211bHRpcGxlID8gdG90YWwgPyBfdGV4dHMuZm91bmQucmVwbGFjZShcIiVkXCIsIGAke3RvdGFsfWApIDogX3RleHRzLmVtcHR5IDogXCJcIn1gO1xuICBpZiAoY29udHJvbCAmJiAoZWRpdCA9PSBudWxsID8gdm9pZCAwIDogZWRpdC5ub2RlTmFtZSkgPT09IFwiREFUQVwiICYmIC8vIEFubm91bmNlIGlmIG9ubHkgb25lIGl0ZW0gaGFzIGNoYW5nZWQuLi5cbiAgKG11bHRpcGxlID8gX2ZvY3VzIDogZWRpdCA9PT0gX2ZvY3VzKSkge1xuICAgIGNvbnN0IGlucHV0TW9kZSA9IGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIik7XG4gICAgY29uc3QgbmV4dEZvY3VzID0gKF9mb2N1cyA9PSBudWxsID8gdm9pZCAwIDogX2ZvY3VzLm5vZGVOYW1lKSA9PT0gXCJEQVRBXCIgPyBjb250cm9sIDogX2ZvY3VzO1xuICAgIF9zcGVhayA9IGAke190ZXh0c1tlZGl0LmlzQ29ubmVjdGVkID8gXCJhZGRlZFwiIDogXCJyZW1vdmVkXCJdfSAke3RleHQoZWRpdCl9LCBgO1xuICAgIGlmIChJU19NT0JJTEUgfHwgX2ZvY3VzID09PSBjb250cm9sKSBMSVZFLnRleHRDb250ZW50ID0gX3NwZWFrO1xuICAgIGlmIChjb250cm9sICE9PSBuZXh0Rm9jdXMpIHtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJhcmlhLWV4cGFuZGVkXCIsIG51bGwpO1xuICAgICAgYXR0cihjb250cm9sLCBcImlucHV0bW9kZVwiLCBcIm5vbmVcIik7XG4gICAgICBsYWJlbCA9IFwiXFx4QTBcIjtcbiAgICAgIGNvbnRyb2wuZm9jdXMoKTtcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB2YXIgX2EzO1xuICAgICAgYXR0cihjb250cm9sLCBcImFyaWEtZXhwYW5kZWRcIiwgXCJ0cnVlXCIpO1xuICAgICAgYXR0cihjb250cm9sLCBcImlucHV0bW9kZVwiLCBpbnB1dE1vZGUpO1xuICAgICAgKF9hMyA9IG5leHRGb2N1cyA9PSBudWxsID8gdm9pZCAwIDogbmV4dEZvY3VzLmZvY3VzKSA9PSBudWxsID8gdm9pZCAwIDogX2EzLmNhbGwobmV4dEZvY3VzKTtcbiAgICAgIHNlbGYuX3NwZWFrID0gXCJcIjtcbiAgICAgIGlmIChJU19GSVJFRk9YX01BQykgb24oc2VsZiwgXCJibHVyXCIsICgpID0+IHJlbmRlcihzZWxmKSwgRVZFTlRfT05DRSk7XG4gICAgICBlbHNlIHNldFRpbWVvdXQocmVuZGVyLCAxMDAsIHNlbGYpO1xuICAgIH0sIDEwMCk7XG4gIH1cbiAgY29uc3Qga2VlcCA9IChlZGl0ID09IG51bGwgPyB2b2lkIDAgOiBlZGl0LmlzQ29ubmVjdGVkKSA/IGVkaXQgOiBpdGVtc1swXTtcbiAgQXJyYXkuZnJvbShpdGVtcywgKGl0ZW0pID0+IHtcbiAgICBpZiAoIW11bHRpcGxlICYmIGl0ZW0gIT09IGtlZXApIHJldHVybiBpdGVtLnJlbW92ZSgpO1xuICAgIGNvbnN0IGxhYmVsMiA9IHRleHQoaXRlbSk7XG4gICAgY29uc3QgdmFsdWUgPSBpdGVtLnZhbHVlIHx8IGxhYmVsMjtcbiAgICBjb25zdCBhcmlhID0gYCR7X3NwZWFrfSR7bGFiZWwyfSwgJHtfdGV4dHMucmVtb3ZlfSwgJHt2YWx1ZXMucHVzaCh2YWx1ZSl9ICR7X3RleHRzLm9mfSAke3RvdGFsfWA7XG4gICAgYXR0cihpdGVtLCBcInJvbGVcIiwgXCJidXR0b25cIik7XG4gICAgYXR0cihpdGVtLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgICBhdHRyKGl0ZW0sIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICBhdHRyKGl0ZW0sIFwiYXJpYS1sYWJlbFwiLCBhcmlhKTtcbiAgfSk7XG4gIGZvciAoY29uc3Qgb3B0IG9mIHNlbGYub3B0aW9ucyB8fCBbXSkge1xuICAgIGNvbnN0IHZhbHVlID0gKF9iID0gYXR0cihvcHQsIFwidmFsdWVcIikpICE9IG51bGwgPyBfYiA6IHRleHQob3B0KTtcbiAgICBhdHRyKG9wdCwgXCJhcmlhLWxhYmVsXCIsIF9zcGVhayA/IGAke19zcGVha30ke3RleHQob3B0KX1gIDogbnVsbCk7XG4gICAgYXR0cihvcHQsIFwic2VsZWN0ZWRcIiwgdmFsdWVzLmluY2x1ZGVzKHZhbHVlKSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBpZiAobGlzdCkgYXR0cihsaXN0LCBcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCIsIGAke211bHRpcGxlfWApO1xuICBpZiAoY29udHJvbCkgYXR0cihjb250cm9sLCBcImxpc3RcIiwgdXNlSWQobGlzdCkpO1xuICBpZiAoY29udHJvbCkgYXR0cihjb250cm9sLCBcImFyaWEtbGFiZWxcIiwgbGFiZWwpO1xuICBzZWxmLl92YWx1ZSA9IChjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLnZhbHVlKSB8fCBcIlwiO1xuICBjb25zdCBkZWwgPSBzZWxmLnF1ZXJ5U2VsZWN0b3IoXCJkZWxcIik7XG4gIGlmIChkZWwpIGF0dHIoZGVsLCBcInJvbGVcIiwgXCJidXR0b25cIik7XG4gIGlmIChkZWwpIGRlbC5oaWRkZW4gPSAhKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wudmFsdWUpO1xuICBjb25zdCBzZWxlY3QgPSBzZWxmLnF1ZXJ5U2VsZWN0b3IoXCJzZWxlY3RcIik7XG4gIGlmIChzZWxlY3QpIHNlbGVjdC5tdWx0aXBsZSA9IG11bHRpcGxlO1xuICBpZiAoc2VsZWN0KSBzZWxlY3QudGV4dENvbnRlbnQgPSBcIlwiO1xuICBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5hcHBlbmQoLi4udmFsdWVzLm1hcCgodmFsdWUpID0+IG5ldyBPcHRpb24oXCJcIiwgdmFsdWUsIHRydWUsIHRydWUpKSk7XG4gIChfYyA9IG11dGF0aW9uT2JzZXJ2ZXIoc2VsZikpID09IG51bGwgPyB2b2lkIDAgOiBfYy50YWtlUmVjb3JkcygpO1xufTtcbnZhciBzeW5jSW5wdXRWYWx1ZSA9IChzZWxmLCB3aXRoRXZlbnQpID0+IHtcbiAgY29uc3QgeyBtdWx0aXBsZSwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGlmIChtdWx0aXBsZSB8fCAhY29udHJvbCB8fCAhaXRlbXNbMF0pIHJldHVybjtcbiAgaWYgKHdpdGhFdmVudCkgcmV0dXJuIHNldFZhbHVlKGNvbnRyb2wsIHRleHQoc2VsZi5pdGVtc1swXSksIFwiaW5zZXJ0VGV4dFwiKTtcbiAgY29udHJvbC52YWx1ZSA9IHRleHQoc2VsZi5pdGVtc1swXSk7XG59O1xudmFyIGRpc3BhdGNoTWF0Y2ggPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IG9wdGlvbnMgPSBbXSwgY3JlYXRhYmxlLCBjb250cm9sLCBpdGVtcywgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gKChfYTIgPSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKSkgfHwgXCJcIjtcbiAgY29uc3QgcXVlcnkgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpIHx8IG51bGw7XG4gIGxldCBtYXRjaCA9IFsuLi5vcHRpb25zXS5maW5kKChvKSA9PiBvLmxhYmVsLnRyaW0oKS50b0xvd2VyQ2FzZSgpID09PSBxdWVyeSk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IG1hdGNoIH07XG4gIGlmIChzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiYmVmb3JlbWF0Y2hcIiwgZXZlbnQpKSlcbiAgICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKSBvcHQuc2VsZWN0ZWQgPSBvcHQgPT09IG1hdGNoO1xuICBtYXRjaCA9IFsuLi5vcHRpb25zXS5maW5kKChvKSA9PiBvLnNlbGVjdGVkKTtcbiAgaWYgKCFtYXRjaCAmJiBjcmVhdGFibGUgJiYgdmFsdWUpXG4gICAgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGNyZWF0ZUl0ZW0odmFsdWUpLCBmYWxzZSk7XG4gIGlmICghbWF0Y2ggJiYgIW11bHRpcGxlICYmIGl0ZW1zWzBdKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgaXRlbXNbMF0pO1xuICBpZiAoIW1hdGNoIHx8IHNlbGYudmFsdWVzLmluY2x1ZGVzKG1hdGNoLnZhbHVlKSkgcmV0dXJuIHJlbmRlcihzZWxmKTtcbiAgZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgbWF0Y2gsIGZhbHNlKTtcbn07XG52YXIgZGlzcGF0Y2hDaGFuZ2UgPSAoc2VsZiwgaXRlbSwgcmVtb3ZlYWJsZSA9IHRydWUpID0+IHtcbiAgY29uc3QgYWRkID0gY3JlYXRlSXRlbShpdGVtKTtcbiAgY29uc3QgcmVtb3ZlID0gWy4uLnNlbGYuaXRlbXNdLmZpbmQoKGkpID0+IGkudmFsdWUgPT09IGl0ZW0udmFsdWUpO1xuICBjb25zdCBldmVudCA9IHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSwgZGV0YWlsOiByZW1vdmUgfHwgYWRkIH07XG4gIGlmIChyZW1vdmUgJiYgIXJlbW92ZWFibGUpIHJldHVybjtcbiAgaWYgKCFzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiYmVmb3JlY2hhbmdlXCIsIGV2ZW50KSkpXG4gICAgcmV0dXJuIHJlbmRlcihzZWxmKTtcbiAgcmVtb3ZlID8gcmVtb3ZlLnJlbW92ZSgpIDogc2VsZi5hZGQoYWRkKTtcbiAgc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImFmdGVyY2hhbmdlXCIsIGV2ZW50KSk7XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgeyB0YXJnZXQgfSkgPT4ge1xuICBpZiAoIUxJVkUpIExJVkUgPSBjcmVhdGVBcmlhTGl2ZShcImFzc2VydGl2ZVwiKTtcbiAgaWYgKCFMSVZFLmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKExJVkUpO1xuICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHNlbGYuX2ZvY3VzID0gdGFyZ2V0O1xuICBpZiAoIXNlbGYuX2l0ZW1zKSB7XG4gICAgc2VsZi5fY29udHJvbCA9IHNlbGYuY29udHJvbCB8fCB2b2lkIDA7XG4gICAgc2VsZi5faXRlbXMgPSBzZWxmLml0ZW1zO1xuICAgIHNlbGYuX2xpc3QgPSBzZWxmLmxpc3QgfHwgdm9pZCAwO1xuICAgIHNlbGYuX29wdGlvbnMgPSBzZWxmLm9wdGlvbnMgfHwgdm9pZCAwO1xuICB9XG59O1xudmFyIG9uQmx1ciA9IChzZWxmKSA9PiBJU19QUkVTUyB8fCBzZXRUaW1lb3V0KG9uQmx1cnJlZCwgMCwgc2VsZik7XG52YXIgb25CbHVycmVkID0gKHNlbGYpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9mb2N1cyB8fCBzZWxmLmNvbnRhaW5zKChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpKSByZXR1cm47XG4gIHN5bmNJbnB1dFZhbHVlKHNlbGYsIHRydWUpO1xuICBkaXNjb25uZWN0Q2FjaGUoc2VsZik7XG59O1xudmFyIG9uQ2xpY2sgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IGNsZWFyID0gKF9iID0gKF9hMiA9IGV2ZW50LnRhcmdldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jbG9zZXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChfYTIsIFwiZGVsXCIpO1xuICBjb25zdCB7IGNsaWVudFg6IHgsIGNsaWVudFk6IHksIHRhcmdldCB9ID0gZXZlbnQ7XG4gIGNvbnN0IHsgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGlmIChjbGVhciAmJiBjb250cm9sKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBzZXRWYWx1ZShjb250cm9sLCBcIlwiLCBcImRlbGV0ZUNvbnRlbnRCYWNrd2FyZFwiKTtcbiAgICByZXR1cm4gY29udHJvbC5mb2N1cygpO1xuICB9XG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChpdGVtLmNvbnRhaW5zKHRhcmdldCkpIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtKTtcbiAgICBpZiAoeSA+PSB0b3AgJiYgeSA8PSBib3R0b20gJiYgeCA+PSBsZWZ0ICYmIHggPD0gcmlnaHQpIHJldHVybiBpdGVtLmZvY3VzKCk7XG4gIH1cbiAgaWYgKHRhcmdldCA9PT0gc2VsZikgY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgb3B0aW9ucyA9IFtdLCBjb250cm9sLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBpc0NsaWNrID0gZXZlbnQgaW5zdGFuY2VvZiBJbnB1dEV2ZW50ID8gIWV2ZW50LmlucHV0VHlwZSB8fCBldmVudC5pbnB1dFR5cGUgPT09IENMSUNLIDogISF2YWx1ZTtcbiAgaWYgKGlzQ2xpY2spIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoY29udHJvbCkgY29udHJvbC52YWx1ZSA9IHNlbGYuX3ZhbHVlO1xuICAgIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpXG4gICAgICBpZiAob3B0LnZhbHVlICYmIG9wdC52YWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgb3B0LCBtdWx0aXBsZSk7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KHN5bmNJbnB1dFZhbHVlLCAwLCBzZWxmLCB0cnVlKTtcbiAgICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkZWwgPSBzZWxmLnF1ZXJ5U2VsZWN0b3IoXCJkZWxcIik7XG4gICAgaWYgKGRlbCkgZGVsLmhpZGRlbiA9ICF2YWx1ZTtcbiAgICByZXR1cm4gbXVsdGlwbGUgfHwgZGlzcGF0Y2hNYXRjaChzZWxmKTtcbiAgfVxufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkpIHJldHVybjtcbiAgY29uc3QgeyBfdGV4dHMsIGNvbnRyb2wsIGl0ZW1zLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgeyBrZXksIHJlcGVhdCwgdGFyZ2V0IH0gPSBldmVudDtcbiAgY29uc3QgaXNDb250cm9sID0gY29udHJvbCAmJiBjb250cm9sID09PSB0YXJnZXQ7XG4gIGNvbnN0IGluVGV4dCA9IGlzQ29udHJvbCAmJiAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5zZWxlY3Rpb25FbmQpO1xuICBjb25zdCBjbGVhciA9IGlzQ29udHJvbCAmJiBrZXkgPT09IFwiVGFiXCIgJiYgc2VsZi5xdWVyeVNlbGVjdG9yKFwiZGVsXCIpO1xuICBsZXQgaW5kZXggPSBpc0NvbnRyb2wgPyBpdGVtcy5sZW5ndGggOiBbLi4uaXRlbXNdLmluZGV4T2YodGFyZ2V0KTtcbiAgaWYgKGNsZWFyICYmICFjbGVhci5oaWRkZW4pIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNsZWFyLnRhYkluZGV4ID0gLTE7XG4gICAgY2xlYXIuZm9jdXMoKTtcbiAgICBvbihjbGVhciwgXCJibHVyXCIsICgpID0+IGF0dHIoY2xlYXIsIFwidGFiaW5kZXhcIiwgbnVsbCksIEVWRU5UX09OQ0UpO1xuICB9XG4gIGlmICghaXNDb250cm9sICYmIGFzQnV0dG9uKGV2ZW50KSB8fCBpbmRleCA9PT0gLTEpIHJldHVybjtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIgJiYgIWlzQ29udHJvbCkgaW5kZXggKz0gMTtcbiAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93TGVmdFwiICYmICFpblRleHQpIGluZGV4IC09IDE7XG4gIGVsc2UgaWYgKGtleSA9PT0gXCJFbnRlclwiICYmIGlzQ29udHJvbCkge1xuICAgIGNvbnN0IGZvcm0gPSBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiKTtcbiAgICBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiLCBcIiNcIik7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IGF0dHIoY29udHJvbCwgXCJmb3JtXCIsIGZvcm0pKTtcbiAgICBpZiAobXVsdGlwbGUpIGRpc3BhdGNoTWF0Y2goc2VsZik7XG4gICAgZWxzZSBpZiAoIXNlbGYuaXRlbXNbMF0gJiYgTElWRSlcbiAgICAgIExJVkUudGV4dENvbnRlbnQgPSBgJHtfdGV4dHMuaW52YWxpZH0keysrTElWRV9TUl9GSVggJSAyID8gXCJcXHhBMFwiIDogXCJcIn1gO1xuICAgIHJldHVybiBzeW5jSW5wdXRWYWx1ZShzZWxmLCB0cnVlKTtcbiAgfSBlbHNlIGlmICgoa2V5ID09PSBcIkJhY2tzcGFjZVwiIHx8IGtleSA9PT0gXCJEZWxldGVcIikgJiYgIWluVGV4dCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCFyZXBlYXQgJiYgaXRlbXNbaW5kZXhdKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgaXRlbXNbaW5kZXhdKTtcbiAgICBpZiAoaXNDb250cm9sKSBpbmRleCAtPSAxO1xuICB9IGVsc2UgcmV0dXJuIGlzQ29udHJvbCB8fCAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpKTtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgKF9hMiA9IGl0ZW1zW01hdGgubWF4KDAsIGluZGV4KV0gfHwgY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtY29tYm9ib3hcIiwgVUhUTUxDb21ib2JveEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTENvbWJvYm94RWxlbWVudCB9O1xuIiwiaW1wb3J0IHsgY2xzeCB9IGZyb20gXCJjbHN4XCI7XG5cbmV4cG9ydCBjb25zdCBRVUlDS19FVkVOVCA9IHsgY2FwdHVyZTogdHJ1ZSwgcGFzc2l2ZTogdHJ1ZSB9O1xuZXhwb3J0IGNvbnN0IElTX0JST1dTRVIgPVxuXHR0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIjtcblxuLy8gVE9ETzogRG9jdW1lbnRhdGlvbiBmb3IgcHJldHR5TnVtYmVyXG5sZXQgSU5UTF9OVU06IEludGwuTnVtYmVyRm9ybWF0IHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHByZXR0eU51bWJlcihudW1iZXI6IG51bWJlciB8IHN0cmluZykge1xuXHRpZiAoIUlOVExfTlVNKVxuXHRcdElOVExfTlVNID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KFxuXHRcdFx0KElTX0JST1dTRVIgJiYgYXR0cihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIFwibGFuZ1wiKSkgfHwgXCJub1wiLFxuXHRcdCk7XG5cdHJldHVybiBJTlRMX05VTS5mb3JtYXQoTnVtYmVyKG51bWJlcikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVib3VuY2U8VCBleHRlbmRzIHVua25vd25bXT4oXG5cdGNhbGxiYWNrOiAoLi4uYXJnczogVCkgPT4gdm9pZCxcblx0ZGVsYXk6IG51bWJlcixcbikge1xuXHRsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuXG5cdHJldHVybiAoLi4uYXJnczogVCkgPT4ge1xuXHRcdGNsZWFyVGltZW91dCh0aW1lcik7XG5cdFx0dGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGNhbGxiYWNrKC4uLmFyZ3MpLCBkZWxheSk7XG5cdH07XG59XG5cbi8qKlxuICogYXR0clxuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBnZXQsIHNldCBhbmQgcmVtb3ZlIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSBlbCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSBuYW1lIFRoZSBhdHRyaWJ1dGUgbmFtZSB0byBnZXQsIHNldCBvciByZW1vdmUsIG9yIGEgb2JqZWN0IHRvIHNldCBtdWx0aXBsZSBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gdmFsdWUgQSB2YWxpZCBhdHRyaWJ1dGUgdmFsdWUgb3IgbnVsbCB0byByZW1vdmUgYXR0cmlidXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRyKFxuXHRlbDogRWxlbWVudCxcblx0bmFtZTogc3RyaW5nLFxuXHR2YWx1ZT86IHN0cmluZyB8IG51bGwsXG4pOiBzdHJpbmcgfCBudWxsIHtcblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSkgPz8gbnVsbDsgLy8gRmFsbGJhY2sgdG8gbnVsbCBvbmx5IGlmIGVsIGlzIHVuZGVmaW5lZFxuXHRpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblx0ZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcblx0cmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogdXNlSWRcbiAqIEByZXR1cm4gQSBnZW5lcmF0ZWQgdW5pcXVlIElEXG4gKi9cbmxldCBpZCA9IDA7XG5jb25zdCBVVUlEID0gYCR7RGF0ZS5ub3coKS50b1N0cmluZygzNil9JHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCA1KX1gO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlkKGVsOiBFbGVtZW50KSB7XG5cdGlmICghZWwuaWQpIGVsLmlkID0gYCR7VVVJRH0keysraWR9YDtcblx0cmV0dXJuIGVsLmlkO1xufVxuXG4vLyBJbnRlcm5hbCBoZWxwZXIgZm9yIG9uIC8gb2ZmXG5jb25zdCBldmVudHMgPSAoXG5cdGFjdGlvbjogXCJhZGRcIiB8IFwicmVtb3ZlXCIsXG5cdGVsZW1lbnQ6IE5vZGUgfCBXaW5kb3csXG5cdHJlc3Q6IFBhcmFtZXRlcnM8dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI+LFxuKTogdm9pZCA9PiB7XG5cdGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuXHRcdHJlc3RbMF0gPSB0eXBlO1xuXHRcdGVsZW1lbnRbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXSguLi5yZXN0KTtcblx0fVxufTtcblxuLyoqXG4gKiBvblxuICogQHBhcmFtIGVsZW1lbnQgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gdHlwZXMgQSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGV2ZW50IHR5cGVzXG4gKiBAcGFyYW0gbGlzdGVuZXIgQW4gZXZlbnQgbGlzdGVuZXIgZnVuY3Rpb24gb3IgbGlzdGVuZXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBvbiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xuXG4vKipcbiAqIG9mZlxuICogQHBhcmFtIGVsZW1lbnQgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gdHlwZXMgQSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGV2ZW50IHR5cGVzXG4gKiBAcGFyYW0gbGlzdGVuZXIgQW4gZXZlbnQgbGlzdGVuZXIgZnVuY3Rpb24gb3IgbGlzdGVuZXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBvZmYgPSAoXG5cdGVsZW1lbnQ6IE5vZGUgfCBXaW5kb3csXG5cdC4uLnJlc3Q6IFBhcmFtZXRlcnM8dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI+XG4pOiB2b2lkID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcblxuLyoqXG4gKiBTY3JvbGxlciB0YXJnZXMgaGVscGluZyBhbmNob3JQb3NpdGlvblxuICovXG5jb25zdCBTQ1JPTExFUiA9IElTX0JST1dTRVIgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpIDogbnVsbDsgLy8gVXNlZCB0byBlbnN1cmUgd2UgaGF2ZSBzY3JvbGxhYmlsaXR5IHVuZGVyXG5jb25zdCBUQVJHRVRTID0gbmV3IE1hcDxFbGVtZW50LCAoKSA9PiB2b2lkPigpOyAvLyBTdG9yZSBjdXJyZW50IG9wZW4gcG9wcGVycyBhbmQgdGhlaXIgdXBkYXRlIGZ1bmN0aW9uc1xuY29uc3QgVEFSR0VUU19VUERBVEUgPSAoKSA9PiB7XG5cdGZvciAoY29uc3QgW18sIHVwZGF0ZV0gb2YgVEFSR0VUUykgdXBkYXRlKCk7XG59O1xuXG5pZiAoU0NST0xMRVIpIHtcblx0U0NST0xMRVIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7cGFkZGluZzoxcHg7dG9wOjA7bGVmdDowcHhcIjtcblx0b24od2luZG93LCBcImxvYWQscmVzaXplLHNjcm9sbFwiLCBUQVJHRVRTX1VQREFURSwgUVVJQ0tfRVZFTlQpO1xufVxuXG4vKipcbiAqIGFuY2hvclBvc2l0aW9uXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSBFbGVtZW50IHRvIHBvc2l0aW9uXG4gKiBAcGFyYW0gYW5jaG9yIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBhbmNob3JcbiAqL1xuY29uc3QgUE9TSVRJT04gPSB7IHRvcDogMCwgcmlnaHQ6IDEsIGJvdHRvbTogMiwgbGVmdDogMyB9OyAvLyBTcGVlZCB1cCBieSB1c2luZyBhIGNvbnN0IG1hcFxuXG5leHBvcnQgZnVuY3Rpb24gYW5jaG9yUG9zaXRpb24oXG5cdHRhcmdldDogSFRNTEVsZW1lbnQsXG5cdGFuY2hvcjogRWxlbWVudCB8IGZhbHNlLFxuXHRwb3NpdGlvbj86IHN0cmluZyB8IG51bWJlcixcblx0Zm9yY2U/OiBib29sZWFuLFxuKSB7XG5cdGlmIChhbmNob3IgPT09IGZhbHNlIHx8ICFhbmNob3IuaXNDb25uZWN0ZWQgfHwgIXRhcmdldC5pc0Nvbm5lY3RlZClcblx0XHRyZXR1cm4gVEFSR0VUUy5kZWxldGUodGFyZ2V0KTsgLy8gU3RvcCB3YXRjaGluZyBpZiBhbmNob3IgaXMgcmVtb3ZlZCBmcm9tIERPTVxuXHRpZiAoIVNDUk9MTEVSPy5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoU0NST0xMRVIgfHwgXCJcIik7IC8vIEVuc3VyZSB3ZSBoYXZlIHRoZSBzY3JvbGxlclxuXHRpZiAoIVRBUkdFVFMuaGFzKHRhcmdldCkpIHtcblx0XHQvLyBTZXR1cCBuZXcgdGFyZ2V0IG9yIHVwZGF0ZSBwb3NpdGlvblxuXHRcdGNvbnN0IHBsYWNlID1cblx0XHRcdFBPU0lUSU9OW3Bvc2l0aW9uIGFzIGtleW9mIHR5cGVvZiBQT1NJVElPTl0gPz8gUE9TSVRJT04uYm90dG9tOyAvLyBVc2UgQ1NTIHByb3BlcnR5IHRvIHN0b3JlIHBvc2l0aW9uIGZvciBtb3JlIGZsZXhpYmlsaXR5XG5cdFx0cmV0dXJuIFRBUkdFVFMuc2V0KHRhcmdldCwgKCkgPT5cblx0XHRcdGFuY2hvclBvc2l0aW9uKHRhcmdldCwgYW5jaG9yLCBwbGFjZSwgZm9yY2UpLFxuXHRcdCkuZ2V0KHRhcmdldCk/LigpOyAvLyBTdGFydCB3YXRjaGluZyBpZiBub3QgYWxyZWFkeSB3YXRjaGluZ1xuXHR9XG5cblx0Y29uc3QgaXNIVE1MQW5jaG9yID0gYW5jaG9yIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7IC8vIFNWRyBvciBYTUwgZWxlbWVudHMgZG9lcyBub3QgaGF2ZSBvZmZzZXRXaWR0aCBvciBvZmZzZXRIZWlnaHRcblx0Y29uc3QgeyBvZmZzZXRXaWR0aDogdGFyZ2V0Vywgb2Zmc2V0SGVpZ2h0OiB0YXJnZXRIIH0gPSB0YXJnZXQ7XG5cdGNvbnN0IGFuY2hvclcgPSBpc0hUTUxBbmNob3IgPyBhbmNob3Iub2Zmc2V0V2lkdGggOiBhbmNob3IuY2xpZW50V2lkdGg7XG5cdGNvbnN0IGFuY2hvckggPSBpc0hUTUxBbmNob3IgPyBhbmNob3Iub2Zmc2V0SGVpZ2h0IDogYW5jaG9yLmNsaWVudEhlaWdodDtcblx0Y29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3AgfSA9IGFuY2hvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0Y29uc3QgYW5jaG9yWCA9IE1hdGgucm91bmQobGVmdCAtIChhbmNob3JXIC0gd2lkdGgpIC8gMik7IC8vIENvcnJlY3QgZm9yIENTUyB0cmFuc2Zvcm0gc2NhbGVcblx0Y29uc3QgYW5jaG9yWSA9IE1hdGgucm91bmQodG9wIC0gKGFuY2hvckggLSBoZWlnaHQpIC8gMik7IC8vIENvcnJlY3QgZm9yIENTUyB0cmFuc2Zvcm0gc2NhbGVcblxuXHRjb25zdCBoYXNTcGFjZUxlZnQgPSBhbmNob3JYIC0gdGFyZ2V0VyA+IDA7XG5cdGNvbnN0IGhhc1NwYWNlUmlnaHQgPSBhbmNob3JXICsgYW5jaG9yVyArIHRhcmdldFcgPCB3aW5kb3cuaW5uZXJXaWR0aDtcblx0Y29uc3QgaGFzU3BhY2VPdmVyID0gYW5jaG9yWSAtIHRhcmdldEggPiAwO1xuXHRjb25zdCBoYXNTcGFjZVVuZGVyID0gYW5jaG9yWSArIGFuY2hvckggKyB0YXJnZXRIIDwgd2luZG93LmlubmVySGVpZ2h0O1xuXHRjb25zdCBwb3NpdGlvblJpZ2h0ID1cblx0XHQocG9zaXRpb24gPT09IFBPU0lUSU9OLnJpZ2h0ICYmIChmb3JjZSB8fCBoYXNTcGFjZVJpZ2h0KSkgfHwgIWhhc1NwYWNlTGVmdDsgLy8gQWx3YXlzIHBvc2l0aW9uIHJpZ2h0IHdoZW4gbm8gaGFzU3BhY2VMZWZ0LCBhcyBubyBPUyBzY3JvbGxzIGZ1cnRoZXIgdXAgdGhhbiAwXG5cdGNvbnN0IHBvc2l0aW9uVW5kZXIgPVxuXHRcdChwb3NpdGlvbiA9PT0gUE9TSVRJT04uYm90dG9tICYmIChmb3JjZSB8fCBoYXNTcGFjZVVuZGVyKSkgfHwgIWhhc1NwYWNlT3ZlcjsgLy8gQWx3YXlzIHBvc2l0aW9uIHVuZGVyIHdoZW4gbm8gaGFzU3BhY2VPdmVyLCBhcyBubyBPUyBzY3JvbGxzIGZ1cnRoZXIgdXAgdGhhbiAwXG5cdGNvbnN0IGNlbnRlclggPSBNYXRoLm1pbihcblx0XHRNYXRoLm1heCgxMCwgYW5jaG9yWCAtICh0YXJnZXRXIC0gYW5jaG9yVykgLyAyKSxcblx0XHR3aW5kb3cuaW5uZXJXaWR0aCAtIHRhcmdldFcgLSAxMCxcblx0KTtcblx0Y29uc3QgY2VudGVyWSA9IE1hdGgubWluKFxuXHRcdE1hdGgubWF4KDEwLCBhbmNob3JZIC0gKHRhcmdldEggLSBhbmNob3JIKSAvIDIpLFxuXHRcdHdpbmRvdy5pbm5lckhlaWdodCAtIHRhcmdldEggLSAxMCxcblx0KTtcblx0Y29uc3QgaXNWZXJ0aWNhbCA9IHBvc2l0aW9uID09PSBQT1NJVElPTi50b3AgfHwgcG9zaXRpb24gPT09IFBPU0lUSU9OLmJvdHRvbTtcblxuXHR0YXJnZXQuc3R5bGUubGVmdCA9IGAke01hdGgucm91bmQoaXNWZXJ0aWNhbCA/IGNlbnRlclggOiBwb3NpdGlvblJpZ2h0ID8gYW5jaG9yWCArIGFuY2hvclcgOiBhbmNob3JYIC0gdGFyZ2V0Vyl9cHhgO1xuXHR0YXJnZXQuc3R5bGUudG9wID0gYCR7TWF0aC5yb3VuZChpc1ZlcnRpY2FsID8gKHBvc2l0aW9uVW5kZXIgPyBhbmNob3JZICsgYW5jaG9ySCA6IGFuY2hvclkgLSB0YXJnZXRIKSA6IGNlbnRlclkpfXB4YDtcblx0U0NST0xMRVI/LnN0eWxlLnNldFByb3BlcnR5KFxuXHRcdFwidHJhbnNsYXRlXCIsXG5cdFx0YDBweCAke01hdGgucm91bmQocG9zaXRpb25VbmRlciA/IHdpbmRvdy5zY3JvbGxZICsgYW5jaG9yWSArIGFuY2hvckggKyB0YXJnZXRIICsgMzAgOiAwKX1weGAsXG5cdCk7XG59XG5cbi8qKlxuICogU3BlZWQgdXAgTXV0YXRpb25PYnNlcnZlciBieSBkZWJvdW5jaW5nIGFuZCBvbmx5IHJ1bm5pbmcgd2hlbiBwYWdlIGlzIHZpc2libGVcbiAqIEByZXR1cm4gbmV3IE11dGFpb25PYnNlcnZlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjazogTXV0YXRpb25DYWxsYmFjaykge1xuXHRsZXQgcXVldWUgPSAwO1xuXG5cdGNvbnN0IG9uRnJhbWUgPSAoKSA9PiBzZXRUaW1lb3V0KG9uVGltZXIsIDIwMCk7IC8vIFVzZSBib3RoIHJlcXVlc3RBbmltYXRpb25GcmFtZSBhbmQgc2V0VGltZW91dCB0byBkZWJvdW5jZSBhbmQgb25seSBydW4gd2hlbiB2aXNpYmxlXG5cdGNvbnN0IG9uVGltZXIgPSAoKSA9PiB7XG5cdFx0Y2FsbGJhY2soW10sIG9ic2VydmVyKTtcblx0XHRvYnNlcnZlci50YWtlUmVjb3JkcygpOyAvLyBDbGVhciByZWNvcmRzIHRvIGF2b2lkIHJ1bm5pbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcblx0XHRxdWV1ZSA9IDA7XG5cdH07XG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdGlmICghcXVldWUpIHF1ZXVlID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKG9uRnJhbWUpO1xuXHR9KTtcblxuXHRyZXR1cm4gb2JzZXJ2ZXI7XG59XG5cbi8qKlxuICogb25NdXRhdGlvblxuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBvYnNlcnZlIG11dGF0aW9ucyBvbiBhIHNwZWNpZmljIGNsYXNzIG5hbWVcbiAqIEBwYXJhbSBlbCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSBjbGFzc05hbWUgVGhlIGNsYXNzIG5hbWUgdG8gb2JzZXJ2ZVxuICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBydW4gd2hlbiBtdXRhdGlvbnMgYXJlIGRldGVjdGVkXG4gKi9cbmNvbnN0IE1VVEFUT1JTID0gbmV3IFdlYWtNYXA8RWxlbWVudCwgQXJyYXk8KCkgPT4gdm9pZD4+KCk7XG5leHBvcnQgY29uc3Qgb25NdXRhdGlvbiA9IDxUIGV4dGVuZHMgRWxlbWVudD4oXG5cdGVsOiBFbGVtZW50LFxuXHRjbGFzc05hbWU6IHN0cmluZyxcblx0Y2FsbGJhY2s6IChlbGVtczogSFRNTENvbGxlY3Rpb25PZjxUPikgPT4gdm9pZCxcbikgPT4ge1xuXHRjb25zdCBlbGVtcyA9IGVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcblx0Y29uc3QgbXV0YXRvciA9IE1VVEFUT1JTLmdldChlbCkgfHwgW107XG5cblx0aWYgKCFtdXRhdG9yLmxlbmd0aCkge1xuXHRcdE1VVEFUT1JTLnNldChlbCwgbXV0YXRvcik7XG5cdFx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcigoXywgb2JzZXJ2ZXIpID0+IHtcblx0XHRcdGlmIChlbC5pc0Nvbm5lY3RlZCAmJiBtdXRhdG9yPy5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBjYWxsYmFjayBvZiBtdXRhdG9yKSBjYWxsYmFjaygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0TVVUQVRPUlMuZGVsZXRlKGVsKTtcblx0XHRcdH1cblx0XHR9KS5vYnNlcnZlKGVsLCB7XG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFtcImNsYXNzXCJdLFxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0fSk7XG5cdH1cblx0bXV0YXRvci5wdXNoKCgpID0+IGNhbGxiYWNrKGVsZW1zIGFzIEhUTUxDb2xsZWN0aW9uT2Y8VD4pKTtcbn07XG5cbi8qKlxuICogb25Mb2FkZWRcbiAqIEBkZXNjcmlwdGlvbiBSdW5zIGEgY2FsbGJhY2sgd2hlbiB3aW5kb3cgaXMgbG9hZGVkIGluIGJyb3dzZXJcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gdGhlIHBhZ2UgaXMgcmVhZHlcbiAqL1xuZXhwb3J0IGNvbnN0IG9uTG9hZGVkID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XG5cdGlmICghSVNfQlJPV1NFUikgcmV0dXJuO1xuXHRjb25zdCBydW4gPSAoKSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spOyAvLyBFbnN1cmUgd2UgcnVuIGFmdGVyIGFsbCBvdGhlciBsb2FkIGV2ZW50c1xuXHRpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSBydW4oKTtcblx0ZWxzZSBvbih3aW5kb3csIFwibG9hZFwiLCBydW4pO1xufTtcblxuLyoqXG4gKiBpc0lucHV0TGlrZVxuICogQGRlc2NyaXB0aW9uIENoZWNrIGlmIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKiBAcGFyYW0gZWwgVGhlIGVsZW1lbnQgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKi9cbmV4cG9ydCBjb25zdCBpc0lucHV0TGlrZSA9IChlbDogdW5rbm93bik6IGVsIGlzIEhUTUxJbnB1dEVsZW1lbnQgPT5cblx0ZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcInZhbGlkaXR5XCIgaW4gZWwgJiZcblx0IShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KTtcblxuLyoqXG4gKiB0b0N1c3RvbUVsZW1lbnRQcm9wc1xuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBjb252ZXJ0IHByb3BzIHRvIGN1c3RvbSBlbGVtZW50IGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcHMgdG8gY29udmVydFxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBwcm9wc1xuICovXG5leHBvcnQgY29uc3QgdG9DdXN0b21FbGVtZW50UHJvcHMgPSAoXG5cdHsgY2xhc3NOYW1lLCBoaWRkZW4sIG9wZW4sIC4uLnJlc3QgfTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGtsYXNzPzogc3RyaW5nLFxuKSA9PiB7XG5cdHJlc3Quc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nID0gdHJ1ZTsgLy8gTWFrZSBOZXh0LmpzIGhhcHB5XG5cdHJlc3QuY2xhc3MgPSBjbHN4KGtsYXNzLCBjbGFzc05hbWUgfHwgXCJcIikgfHwgdW5kZWZpbmVkOyAvLyBVc2UgY2xhc3MgaW5zdGVhZCBvZiBjbGFzc05hbWVcblx0aWYgKGhpZGRlbikgcmVzdC5oaWRkZW4gPSB0cnVlOyAvLyBFbnN1cmUgYm9vbGVhbiBwcm9wIGJlaGF2aW91clxuXHRpZiAob3BlbikgcmVzdC5vcGVuID0gdHJ1ZTsgLy8gRW5zdXJlIGJvb2xlYW4gcHJvcCBiZWhhdmlvdXJcblx0cmV0dXJuIHJlc3Q7XG59O1xuIiwiaW1wb3J0IHsgSVNfQlJPV1NFUiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBNQVRPTU8gPSBcIm1hdHRpbHN5bmV0Lm1hdG9tby5jbG91ZFwiO1xubGV0IEVOQUJMRUQ6IEFuYWx5dGljc0FjdGlvbnNbXCJpbml0XCJdW1wiZW5hYmxlZFwiXSA9IHRydWU7XG5cbnR5cGUgTWF0b21vID0gKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4pW107XG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBXaW5kb3cge1xuXHRcdF9wYXE/OiBNYXRvbW9bXTtcblx0fVxufVxuXG5leHBvcnQgdHlwZSBBbmFseXRpY3NBY3Rpb25zID0ge1xuXHRpbml0OiB7XG5cdFx0bWF0b21vSWQ6IG51bWJlciB8IHN0cmluZztcblx0XHRlbmFibGVkPzogYm9vbGVhbiB8IFwiZGVidWdcIjtcblx0fTtcblx0cGFnZXZpZXc6IHtcblx0XHR1cmw/OiBzdHJpbmc7XG5cdFx0dGl0bGU/OiBzdHJpbmc7XG5cdH07XG5cdGV2ZW50OiB7XG5cdFx0Y2F0ZWdvcnk6IHN0cmluZztcblx0XHRhY3Rpb246IHN0cmluZztcblx0XHRuYW1lPzogc3RyaW5nO1xuXHRcdHZhbHVlPzogbnVtYmVyO1xuXHR9O1xuXHRzZWFyY2g6IHtcblx0XHRxdWVyeTogc3RyaW5nO1xuXHRcdGNhdGVnb3J5Pzogc3RyaW5nO1xuXHRcdHJlc3VsdHM/OiBudW1iZXI7XG5cdH07XG5cdG1hdG9tbzogTWF0b21vO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFuYWx5dGljczxBY3Rpb24gZXh0ZW5kcyBrZXlvZiBBbmFseXRpY3NBY3Rpb25zPihcblx0YWN0aW9uOiBBY3Rpb24sXG5cdGFyZ3MgPSB7fSBhcyBBbmFseXRpY3NBY3Rpb25zW0FjdGlvbl0sXG4pIHtcblx0aWYgKCFJU19CUk9XU0VSKSByZXR1cm47XG5cdGlmICghd2luZG93Ll9wYXEpIHtcblx0XHR3aW5kb3cuX3BhcSA9IFtdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wiSGVhdG1hcFNlc3Npb25SZWNvcmRpbmc6OmRpc2FibGVcIl0pOyAvLyBEaXNhYmxlIGhlYXRtYXBzIGJ5IGRlZmF1bHQgYXMgdGhpcyByZXF1aXJlIGNvb2tpZXNcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcImVuYWJsZUxpbmtUcmFja2luZ1wiXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRUcmFja2VyVXJsXCIsIGBodHRwczovLyR7TUFUT01PfS9tYXRvbW8ucGhwYF0pO1xuXHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3NjcmlwdFtzcmMqPVwibWF0b21vLmpzXCJdJykgfHxcblx0XHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hcHBlbmQoXG5cdFx0XHRcdE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSwge1xuXHRcdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRcdHNyYzogYGh0dHBzOi8vY2RuLm1hdG9tby5jbG91ZC8ke01BVE9NT30vbWF0b21vLmpzYCxcblx0XHRcdFx0fSksXG5cdFx0XHQpO1xuXHR9XG5cdGlmIChhY3Rpb24gPT09IFwiaW5pdFwiKSB7XG5cdFx0Y29uc3QgeyBtYXRvbW9JZCwgZW5hYmxlZCA9IHRydWUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcImluaXRcIl07XG5cdFx0RU5BQkxFRCA9IGVuYWJsZWQ7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRTaXRlSWRcIiwgbWF0b21vSWRdKTtcblx0fVxuXG5cdGlmIChFTkFCTEVEID09PSBcImRlYnVnXCIpIHJldHVybiBjb25zb2xlLmluZm8oYEFuYWx5dGljczogXCIke2FjdGlvbn1cImAsIGFyZ3MpO1xuXHRpZiAoRU5BQkxFRCA9PT0gZmFsc2UgfHwgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lID09PSBcImxvY2FsaG9zdFwiKSByZXR1cm47XG5cblx0aWYgKGFjdGlvbiA9PT0gXCJwYWdldmlld1wiKSB7XG5cdFx0Y29uc3QgeyB1cmwsIHRpdGxlIH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJwYWdldmlld1wiXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCB1cmwgfHwgbG9jYXRpb24uaHJlZl0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0RG9jdW1lbnRUaXRsZVwiLCB0aXRsZSB8fCBkb2N1bWVudC50aXRsZV0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1widHJhY2tQYWdlVmlld1wiXSk7XG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcImV2ZW50XCIpIHtcblx0XHRjb25zdCB7IGNhdGVnb3J5LCBhY3Rpb24sIG5hbWUsIHZhbHVlIH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJldmVudFwiXTtcblx0XHRjb25zdCBldmVudCA9IFtcInRyYWNrRXZlbnRcIiwgY2F0ZWdvcnksIGFjdGlvbiwgbmFtZSwgdmFsdWVdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goZXZlbnQuZmlsdGVyKCh2KSA9PiB2ICE9PSB1bmRlZmluZWQpKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwic2VhcmNoXCIpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRxdWVyeSxcblx0XHRcdGNhdGVnb3J5ID0gZmFsc2UsXG5cdFx0XHRyZXN1bHRzID0gZmFsc2UsXG5cdFx0fSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInNlYXJjaFwiXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInRyYWNrU2l0ZVNlYXJjaFwiLCBxdWVyeSwgY2F0ZWdvcnksIHJlc3VsdHNdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwibWF0b21vXCIpIHtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcIm1hdG9tb1wiXSk7XG5cdH1cbn1cbiIsImNvbnN0IGdldFN0ZXBzID0gKFxuXHRub3c6IG51bWJlcixcblx0bWF4OiBudW1iZXIsXG5cdHNob3cgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXG4pID0+IHtcblx0Y29uc3Qgb2Zmc2V0ID0gKHNob3cgLSAxKSAvIDI7XG5cdGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoTWF0aC5taW4obm93IC0gTWF0aC5mbG9vcihvZmZzZXQpLCBtYXggLSBzaG93ICsgMSksIDEpO1xuXHRjb25zdCBlbmQgPSBNYXRoLm1pbihNYXRoLm1heChub3cgKyBNYXRoLmNlaWwob2Zmc2V0KSwgc2hvdyksIG1heCk7XG5cdGNvbnN0IHBhZ2VzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogZW5kICsgMSAtIHN0YXJ0IH0sIChfLCBpKSA9PiBpICsgc3RhcnQpO1xuXG5cdGlmIChzaG93ID4gNCAmJiBzdGFydCA+IDEpIHBhZ2VzLnNwbGljZSgwLCAyLCAxLCAwKTtcblx0aWYgKHNob3cgPiAzICYmIGVuZCA8IG1heCkgcGFnZXMuc3BsaWNlKC0yLCAyLCAwLCBtYXgpO1xuXHRyZXR1cm4gcGFnZXM7XG59O1xuXG5leHBvcnQgY29uc3QgcGFnaW5hdGlvbiA9ICh7IGN1cnJlbnQgPSAxLCB0b3RhbCA9IDEwLCBzaG93ID0gNyB9KSA9PiAoe1xuXHRwcmV2OiBjdXJyZW50ID4gMSA/IGN1cnJlbnQgLSAxIDogMCxcblx0bmV4dDogY3VycmVudCA8IHRvdGFsID8gY3VycmVudCArIDEgOiAwLFxuXHRwYWdlczogZ2V0U3RlcHMoY3VycmVudCwgdG90YWwsIHNob3cpLm1hcCgocGFnZSwgaW5kZXgpID0+ICh7XG5cdFx0Y3VycmVudDogcGFnZSA9PT0gY3VycmVudCAmJiAoXCJwYWdlXCIgYXMgY29uc3QpLFxuXHRcdGtleTogYGtleS0ke3BhZ2V9LSR7aW5kZXh9YCxcblx0XHRwYWdlLFxuXHR9KSksXG59KTtcbiIsImlmIChcblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHR3aW5kb3cuQ1NTU3R5bGVTaGVldCAmJlxuXHRkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHNcbilcblx0KCgpID0+IHtcblx0XHRjb25zdCBrZXkgPSBcIi0tbXRkcy1hcHAtZXhwYW5kZWRcIjtcblx0XHRjb25zdCBzaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cdFx0Y29uc3QgcHJldiA9ICgpID0+ICF3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KT8uaW5jbHVkZXMoXCJmYWxzZVwiKTtcblxuXHRcdGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKHNoZWV0KTtcblx0XHR3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkID0gKGZvcmNlKSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBuZXh0ID0gZm9yY2UgPz8gIXByZXYoKTtcblx0XHRcdFx0c2hlZXQucmVwbGFjZVN5bmM/LihgOnJvb3QgeyAke2tleX06IHZhcigke2tleX0tLSR7bmV4dH0pfWApO1xuXHRcdFx0XHR3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBuZXh0KTtcblx0XHRcdH0gY2F0Y2ggKGVycikge30gLy8gbG9jYWxTdG9yYWdlIGlzIGZ1bGwgb3IgcmVwbGFjZVN5bmMgaXMgbm90IHN1cHBvcnRlZFxuXHRcdH07XG5cblx0XHQvLyBTZXQgYW5kIHN0b3JlIGluaXRpYWwgc3RhdGVcblx0XHR3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkKHByZXYoKSk7XG5cdH0pKCk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgUVVJQ0tfRVZFTlQsIGRlYm91bmNlLCBvbiwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCBcIi4vYXBwLXRvZ2dsZVwiO1xuXG5jb25zdCBDU1NfQVBQID0gc3R5bGVzLmFwcC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfU1RJQ0tZID0gc3R5bGVzLnN0aWNreS5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVE9HR0xFID0gJ1tkYXRhLWNvbW1hbmQ9XCJ0b2dnbGUtYXBwLWV4cGFuZGVkXCJdJztcbmNvbnN0IENTU19TSURFQkFSID0gYC4ke0NTU19BUFB9ID4gZGlhbG9nLC4ke0NTU19BUFB9IGRpYWxvZyB+IG1haW5gO1xuXG5jb25zdCB1c2VUcmFuc2l0aW9uID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XG5cdGlmICghZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbikgY2FsbGJhY2soKTtcblx0ZWxzZSBkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0b2dnbGVBcHBFeHBhbmRlZCA9IChmb3JjZT86IGJvb2xlYW4pID0+XG5cdC8vIEB0cy1leHBlY3QtZXJyb3Igd2luZG93Lm10ZHNBcHBUb2dnbGUgY29tZXMgZnJvbSBhcHAtdG9nZ2xlLmpzXG5cdHVzZVRyYW5zaXRpb24oKCkgPT4gd2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZD8uKGZvcmNlKSk7XG5cbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZUNsaWNrKHsgdGFyZ2V0OiBlbCB9OiBFdmVudCkge1xuXHRpZiAoIShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSB8fCAhZWwubWF0Y2hlcyhDU1NfVE9HR0xFKSkgcmV0dXJuO1xuXHRpZiAoZ2V0Q29tcHV0ZWRTdHlsZShlbCkucG9zaXRpb24gPT09IFwic3RpY2t5XCIpIHJldHVybiB0b2dnbGVBcHBFeHBhbmRlZCgpO1xuXHR1c2VUcmFuc2l0aW9uKCgpID0+IHtcblx0XHRjb25zdCBzaWRlYmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGlhbG9nRWxlbWVudD4oQ1NTX1NJREVCQVIpO1xuXHRcdHNpZGViYXI/LnNldEF0dHJpYnV0ZShcImRhdGEtY2xvc2VkYnlcIiwgXCJhbnlcIik7IC8vIEFsbG93IGNsb3NpbmcgYnkgY2xpY2tpbmcgb3V0c2lkZVxuXHRcdHNpZGViYXI/LnNob3dNb2RhbCgpO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlUmVzaXplKCkge1xuXHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaWFsb2dFbGVtZW50PihDU1NfU0lERUJBUik/LmNsb3NlKCk7XG59XG5cbi8vIFNjcm9sbCBzdGF0ZVxubGV0IE1JTl9ZID0gMDsgLy8gT2Zmc2V0IHRvIGF2b2lkIHNjcm9sbCBqdW1wIHdoZW4gc3RpY2t5IGlzIHNldCB0byByZWxhdGl2ZVxubGV0IFNDUk9MTF9VUDogYm9vbGVhbjtcbmxldCBTVElDSyA9IDA7IC8vIC0xID0gc3RpY2sgdG9wLCAwID0gcmVsYXRpdmUsIDEgPSBzdGljayBib3R0b21cbmxldCBTVElDS19FTDogSFRNTEVsZW1lbnQ7XG5sZXQgU1RJQ0tfSCA9IDA7XG5sZXQgU1RJQ0tfWSA9IDA7XG5sZXQgU1RVQ0sgPSBmYWxzZTsgLy8gVXNlZCB0byBmaWd1cmUgaWYgbmF2IGlzIGxhcmdlciB0aGFuIHZpZXdwb3J0XG5sZXQgV0lOX0ggPSAwO1xubGV0IFdJTl9ZID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oW3N0aWNreV06IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdFNUSUNLX0VMID0gc3RpY2t5O1xuXHRoYW5kbGVTY3JvbGwoKTsgLy8gUnVuIG9uIGNvbm5lY3Rcbn1cblxuZnVuY3Rpb24gaGFuZGxlU2Nyb2xsKCkge1xuXHRpZiAoIVNUSUNLX0VMPy5pc0Nvbm5lY3RlZCkgcmV0dXJuO1xuXHRjb25zdCBORVhUX1kgPSB3aW5kb3cuc2Nyb2xsWTtcblx0Y29uc3QgTkVYVF9VUCA9IE5FWFRfWSA8IFdJTl9ZO1xuXHRXSU5fWSA9IE5FWFRfWTtcblxuXHQvLyBPbmx5IGNhbGN1bGF0ZSBpZiBzY3JvbGwgZGlyZWN0aW9uIGhhcyBjaGFuZ2VkXG5cdGlmIChORVhUX1VQICE9PSBTQ1JPTExfVVApIHtcblx0XHRNSU5fWSA9IChTVElDS19FTC5wYXJlbnRFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgfHwgMCkgKyBXSU5fWTtcblx0XHRTQ1JPTExfVVAgPSBORVhUX1VQO1xuXHRcdFNUSUNLX0ggPSBTVElDS19FTC5vZmZzZXRIZWlnaHQ7XG5cdFx0U1RJQ0tfWSA9IFNUSUNLX0VMLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIFdJTl9ZO1xuXHRcdFNUVUNLID0gU1RJQ0tfRUwub2Zmc2V0SGVpZ2h0IDw9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0XHRXSU5fSCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0fVxuXG5cdGlmIChTVElDSyA9PT0gLTEgJiYgU1RVQ0spIHJldHVybjsgLy8gQWxsd2F5cyBzdGlja3kgd2hlbiBzaWRlYmFyIGlzIHNtYWxsZXIgdGhhbiB2aWV3cG9ydFxuXHRpZiAoU1RJQ0sgIT09IC0xICYmIChTVFVDSyB8fCAoU0NST0xMX1VQICYmIFdJTl9ZIDw9IFNUSUNLX1kpKSkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJzdGlja3lcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBcIjBweFwiKTtcblx0XHRTVElDSyA9IC0xOyAvLyBOb3Qgc3RpY2tpbmcgdG8gdG9wIGFuZCBzaWRlYmFyIGlzIHNtYWxsZXIgdGhhbiB2aWV3cG9ydCBvciBzY3JvbGxpbmcgdXBcblx0fSBlbHNlIGlmIChTVElDSyA9PT0gLTEgJiYgIVNDUk9MTF9VUCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJyZWxhdGl2ZVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke01hdGgubWF4KDAsIFdJTl9ZIC0gTUlOX1kpfXB4YCk7XG5cdFx0U1RJQ0sgPSAwOyAvLyBTdGlja2luZyB0byB0b3AgYW5kIHNjcm9sbGluZyBkb3duXG5cdH0gZWxzZSBpZiAoU1RJQ0sgIT09IDEgJiYgIVNDUk9MTF9VUCAmJiBXSU5fWSArIFdJTl9IID49IFNUSUNLX1kgKyBTVElDS19IKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInN0aWNreVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke1dJTl9IIC0gU1RJQ0tfSH1weGApO1xuXHRcdFNUSUNLID0gMTsgLy8gTm90IHN0aWNraW5nIHRvIGJvdHRvbSBhbmQgc2Nyb2xsaW5nIGRvd25cblx0fSBlbHNlIGlmIChTVElDSyA9PT0gMSAmJiBTQ1JPTExfVVApIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwicmVsYXRpdmVcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtTVElDS19ZIC0gTUlOX1l9cHhgKTtcblx0XHRTVElDSyA9IDA7IC8vIFN0aWNraW5nIHRvIGJvdHRvbSBhbmQgc2Nyb2xsaW5nIHVwXG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX1NUSUNLWSwgaGFuZGxlTXV0YXRpb24pO1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVUb2dnbGVDbGljaywgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwicmVzaXplXCIsIGRlYm91bmNlKGhhbmRsZVJlc2l6ZSwgMTAwKSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwic2Nyb2xsXCIsIGhhbmRsZVNjcm9sbCwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0JSRUFEQ1JVTUJTID0gc3R5bGVzLmJyZWFkY3J1bWJzLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oYnJlYWRjcnVtYnM6IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgYnJlYWRjdW1icyBvZiBicmVhZGNydW1icylcblx0XHRicmVhZGN1bWJzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaSBhXCIpLmZvckVhY2goKGNydW1iLCBpbmRleCwgeyBsZW5ndGggfSkgPT4ge1xuXHRcdFx0YXR0cihjcnVtYiwgXCJhcmlhLWN1cnJlbnRcIiwgaW5kZXggPT09IGxlbmd0aCAtIDEgPyBcInBhZ2VcIiA6IG51bGwpO1xuXHRcdH0pO1xufVxuXG5vbkxvYWRlZCgoKSA9PlxuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0JSRUFEQ1JVTUJTLCBoYW5kbGVNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdElTX0JST1dTRVIsXG5cdFFVSUNLX0VWRU5ULFxuXHRhdHRyLFxuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyLFxuXHRvbixcblx0b25Mb2FkZWQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRElBTE9HID0gc3R5bGVzLmRpYWxvZy5zcGxpdChcIiBcIilbMF07XG5jb25zdCBESUFMT0dTID0gSVNfQlJPV1NFUlxuXHQ/IChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuXHRcdFx0Q1NTX0RJQUxPRyxcblx0XHQpIGFzIEhUTUxDb2xsZWN0aW9uT2Y8SFRNTERpYWxvZ0VsZW1lbnQ+KVxuXHQ6IFtdO1xuXG5jb25zdCBoYW5kbGVNb2RhbCA9ICgpID0+IHtcblx0Zm9yIChjb25zdCBkaWFsb2cgb2YgRElBTE9HUylcblx0XHRpZiAoZGlhbG9nLmlzQ29ubmVjdGVkICYmIGRpYWxvZy5zaG93TW9kYWwgJiYgZGlhbG9nLmNsb3NlKSB7XG5cdFx0XHRpZiAoZGlhbG9nLm1hdGNoZXMoJ1tvcGVuXTpub3QoW2RhdGEtbW9kYWw9XCJmYWxzZVwiXSk6bm90KDptb2RhbCknKSkge1xuXHRcdFx0XHRhdHRyKGRpYWxvZywgXCJvcGVuXCIsIG51bGwpOyAvLyBVc2luZyBhdHRyaWJ1dGUgaW5zdGVhZCBvZiAuY2xvc2UgdG8gYXZvaWQgYGNsb3NlYCBldmVudFxuXHRcdFx0XHRkaWFsb2cuc2hvd01vZGFsKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGRpYWxvZy5tYXRjaGVzKFwiOm1vZGFsOm5vdChbb3Blbl0pXCIpKSB7XG5cdFx0XHRcdGF0dHIoZGlhbG9nLCBcIm9wZW5cIiwgXCJcIik7IC8vIFNldCBhcyBvcGVuXG5cdFx0XHRcdGRpYWxvZy5jbG9zZSgpOyAvLyBTbyB3ZSBjb3JyZWNsdHkgY2FuIGNhbGwgLmNsb3NlLCByZW1vdmluZyA8ZGlhbG9nPiBmcm9tICN0b3AtbGF5ZXJcblx0XHRcdH1cblx0XHR9XG59O1xuXG5jb25zdCBoYW5kbGVDbGljayA9ICh7IGNsaWVudFg6IHgsIGNsaWVudFk6IHksIHRhcmdldDogZWwgfTogTW91c2VFdmVudCkgPT4ge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRGlhbG9nRWxlbWVudCAmJiBhdHRyKGVsLCBcImRhdGEtY2xvc2VkYnlcIikgPT09IFwiYW55XCIpIHtcblx0XHRjb25zdCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0Y29uc3QgaXNJbnNpZGUgPSB0b3AgPD0geSAmJiB5IDw9IGJvdHRvbSAmJiBsZWZ0IDw9IHggJiYgeCA8PSByaWdodDtcblxuXHRcdGlmICghaXNJbnNpZGUpIGVsLmNsb3NlKCk7XG5cdH0gZWxzZSBpZiAoXG5cdFx0ZWwgaW5zdGFuY2VvZiBFbGVtZW50ICYmXG5cdFx0ZWwuY2xvc2VzdCgnYnV0dG9uW2RhdGEtY29tbWFuZD1cImNsb3NlXCJdJylcblx0KSB7XG5cdFx0ZWw/LmNsb3Nlc3QoXCJkaWFsb2dcIik/LmNsb3NlKCk7XG5cdH1cbn07XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlQ2xpY2sgYXMgRXZlbnRMaXN0ZW5lciwgUVVJQ0tfRVZFTlQpO1xuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKGhhbmRsZU1vZGFsKS5vYnNlcnZlKFxuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHR7XG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFtcIm9wZW5cIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0c3VidHJlZTogdHJ1ZSxcblx0XHR9LFxuXHQpO1xufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgUVVJQ0tfRVZFTlQsIGF0dHIsIG9uLCBvbkxvYWRlZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5mdW5jdGlvbiBoYW5kbGVJbmplY3QoZXZlbnQ6IEV2ZW50ICYgeyBhbmltYXRpb25OYW1lPzogc3RyaW5nIH0pIHtcblx0aWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgIT09IHN0eWxlcy5fZXJyb3JzdW1tYXJ5KSByZXR1cm47XG5cdGNvbnN0IGZpcnN0ID0gKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KT8uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cblx0aWYgKGZpcnN0IGluc3RhbmNlb2YgSFRNTEhlYWRpbmdFbGVtZW50KSB7XG5cdFx0YXR0cihmaXJzdCwgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuXHRcdGZpcnN0LmZvY3VzKCk7IC8vIEF1dG9mb2N1cyBmaXJzdCBoZWFkaW5nXG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb24oZG9jdW1lbnQsIFwiYW5pbWF0aW9uZW5kXCIsIGhhbmRsZUluamVjdCwgUVVJQ0tfRVZFTlQpKTtcbiIsInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcblxuLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBTQUZFX0xBQkVMTEVEQlkgPSBgJHtJU19BTkRST0lEID8gXCJkYXRhXCIgOiBcImFyaWFcIn0tbGFiZWxsZWRieWA7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIEZPQ1VTX09VVExJTkUgPSBcIm91dGxpbmU6IDFweCBkb3R0ZWQ7IG91dGxpbmU6IDVweCBhdXRvIEhpZ2hsaWdodDsgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXR0YWNoU3R5bGUgPSAoZWxlbWVudCwgY3NzKSA9PiBlbGVtZW50LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gIC8vIFVubmFtZWQgc2xvdCBkb2VzIGF1dG9tYXRpY2FsbHkgcmVuZGVyIGFsbCB0b3AgZWxlbWVudCBub2Rlc1xuICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgY3NzKVxuKTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gIH1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgKGRldGFpbCkgPT4gZWxlbWVudC5oYW5kbGVFdmVudCh7IHR5cGU6IFwibXV0YXRpb25cIiwgZGV0YWlsIH0pXG4gICAgKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIG9ic2VydmVycy5zZXQoZWxlbWVudCwgb2JzZXJ2ZXIpO1xuICB9XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBjcmVhdGVBcmlhTGl2ZSA9IChtb2RlKSA9PiB7XG4gIGNvbnN0IGxpdmUgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBsaXZlLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gIGF0dHIobGl2ZSwgXCJhcmlhLWxpdmVcIiwgbW9kZSk7XG4gIHJldHVybiBsaXZlO1xufTtcbnZhciBzZXRWYWx1ZSA9IChpbnB1dCwgZGF0YSwgdHlwZSA9IFwiXCIpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSwgZGF0YSwgaW5wdXRUeXBlOiB0eXBlIH07XG4gIGNvbnN0IHByb3RvID0gSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGU7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJiZWZvcmVpbnB1dFwiLCBldmVudCkpO1xuICAoX2IgPSAoX2EyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgXCJ2YWx1ZVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5zZXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKGlucHV0LCBkYXRhKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImlucHV0XCIsIGV2ZW50KSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG59O1xuXG4vLyB1LW9wdGlvbi50c1xudmFyIERJU0FCTEVEID0gXCJkaXNhYmxlZFwiO1xudmFyIFNFTEVDVEVEID0gXCJzZWxlY3RlZFwiO1xudmFyIFVIVE1MT3B0aW9uRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtESVNBQkxFRCwgU0VMRUNURURdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICghSVNfSU9TKSB0aGlzLnRhYkluZGV4ID0gLTE7XG4gICAgaWYgKCF0aGlzLmhhc0F0dHJpYnV0ZShcInJvbGVcIikpIGF0dHIodGhpcywgXCJyb2xlXCIsIFwib3B0aW9uXCIpO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWRpc2FibGVkXCIsIGAke3RoaXMuZGlzYWJsZWR9YCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtc2VsZWN0ZWRcIiwgYCR7dGhpcy5zZWxlY3RlZH1gKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgd2hldGhlciB0aGUgb3B0aW9uIGluIHRoZSBsaXN0IGJveCBpcyB0aGUgZGVmYXVsdCBpdGVtLiAqL1xuICBnZXQgZGVmYXVsdFNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzW1NFTEVDVEVEXTtcbiAgfVxuICBzZXQgZGVmYXVsdFNlbGVjdGVkKHZhbHVlKSB7XG4gICAgdGhpc1tTRUxFQ1RFRF0gPSB2YWx1ZTtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgRElTQUJMRUQpICE9PSBudWxsO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgRElTQUJMRUQsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIC8qKiBSZXRyaWV2ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGZvcm0gdGhhdCB0aGUgb2JqZWN0IGlzIGVtYmVkZGVkIGluLiAqL1xuICBnZXQgZm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwiZm9ybVwiKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIG9yZGluYWwgcG9zaXRpb24gb2YgYW4gb3B0aW9uIGluIGEgbGlzdCBib3guICovXG4gIGdldCBpbmRleCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oKF9hMiA9IHRoaXMucGFyZW50RWxlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5vcHRpb25zKSB8fCBbdGhpc11cbiAgICBdLmluZGV4T2YodGhpcyk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIGEgdmFsdWUgdGhhdCB5b3UgY2FuIHVzZSB0byBpbXBsZW1lbnQgeW91ciBvd24gbGFiZWwgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIG9iamVjdC4gKi9cbiAgZ2V0IGxhYmVsKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIChfYTIgPSBhdHRyKHRoaXMsIFwibGFiZWxcIikpICE9IG51bGwgPyBfYTIgOiB0aGlzLnRleHQ7XG4gIH1cbiAgc2V0IGxhYmVsKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImxhYmVsXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgU0VMRUNURUQpICE9PSBudWxsO1xuICB9XG4gIHNldCBzZWxlY3RlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgU0VMRUNURUQsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdGV4dCBzdHJpbmcgc3BlY2lmaWVkIGJ5IHRoZSBvcHRpb24gdGFnLiAqL1xuICBnZXQgdGV4dCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IHRoaXMudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICB9XG4gIHNldCB0ZXh0KHRleHQpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIHZhbHVlIHdoaWNoIGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIgd2hlbiB0aGUgZm9ybSBjb250cm9sIGlzIHN1Ym1pdHRlZC4gKi9cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIChfYTIgPSBhdHRyKHRoaXMsIFwidmFsdWVcIikpICE9IG51bGwgPyBfYTIgOiB0aGlzLnRleHQ7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgfVxufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtb3B0aW9uXCIsIFVIVE1MT3B0aW9uRWxlbWVudCk7XG5cbi8vIHUtZGF0YWxpc3QudHNcbnZhciBMSVZFX1RJTUVSO1xudmFyIExJVkVfU1JfRklYID0gMDtcbnZhciBMSVZFO1xudmFyIElOUFVUX0RFQk9VTkNFID0gMDtcbnZhciBJU19QUkVTUyA9IGZhbHNlO1xudmFyIElTX01PQklMRSA9IElTX0lPUyB8fCBJU19BTkRST0lEO1xudmFyIEVWRU5UUyA9IFwiY2xpY2ssZm9jdXNvdXQsaW5wdXQsa2V5ZG93bixtb3VzZWRvd24sbW91c2V1cFwiO1xudmFyIEVWRU5UU19JTlBVVCA9IFwiZm9jdXMsZm9jdXNpbixibHVyLGZvY3Vzb3V0XCI7XG52YXIgVEVYVFMgPSB7XG4gIHNpbmd1bGFyOiBcIiVkIGhpdFwiLFxuICBwbHVyYWw6IFwiJWQgaGl0c1wiXG59O1xudmFyIFVIVE1MRGF0YUxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3RleHRzID0gX19zcHJlYWRWYWx1ZXMoe30sIFRFWFRTKTtcbiAgICB0aGlzLl92YWx1ZSA9IFwiXCI7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgYCR7RElTUExBWV9CTE9DS31cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbikgeyBkaXNwbGF5OiBibG9jazsgY3Vyc29yOiBwb2ludGVyIH1cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbjpmb2N1cykgeyAke0ZPQ1VTX09VVExJTkV9IH1cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvblthcmlhLWhpZGRlbj1cInRydWVcIl0pLFxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uW2Rpc2FibGVkXSksXG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb25baGlkZGVuXSkgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQgfWBcbiAgICApO1xuICB9XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJpZFwiLCAuLi5PYmplY3Qua2V5cyhURVhUUykubWFwKChrZXkpID0+IGBkYXRhLXNyLSR7a2V5fWApXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmhpZGRlbiA9IHRydWU7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJsaXN0Ym94XCIpO1xuICAgIGF0dHIodGhpcywgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBvbih0aGlzLl9yb290LCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywge1xuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbXCJkaXNhYmxlZFwiLCBcImhpZGRlblwiLCBcImxhYmVsXCIsIFwidmFsdWVcIl0sXG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgb2ZmKHRoaXMuX3Jvb3QgfHwgdGhpcywgXCJmb2N1c1wiLCB0aGlzLCB0cnVlKTtcbiAgICBvZmYodGhpcy5fcm9vdCB8fCB0aGlzLCBcImZvY3VzaW5cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gICAgZGlzY29ubmVjdElucHV0KHRoaXMpO1xuICAgIHRoaXMuX3Jvb3QgPSB2b2lkIDA7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIF9wcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgdGV4dCA9IHByb3AgPT0gbnVsbCA/IHZvaWQgMCA6IHByb3Auc3BsaXQoXCJkYXRhLXNyLVwiKVsxXTtcbiAgICBjb25zdCBjc3MgPSBgaW5wdXRbbGlzdD1cIiR7dGhpcy5pZH1cIl1gO1xuICAgIGlmIChURVhUU1t0ZXh0XSkgdGhpcy5fdGV4dHNbdGV4dF0gPSBuZXh0IHx8IFRFWFRTW3RleHRdO1xuICAgIGVsc2UgaWYgKHRoaXMuX3Jvb3QpXG4gICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHRoaXMuX3Jvb3QucXVlcnlTZWxlY3RvckFsbChjc3MpKVxuICAgICAgICBzZXR1cElucHV0KHRoaXMsIGlucHV0KTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHsgdGFyZ2V0LCB0eXBlIH0gPSBldmVudDtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmICh0eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImZvY3VzXCIgfHwgdHlwZSA9PT0gXCJmb2N1c2luXCIpIG9uRm9jdXModGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImJsdXJcIiB8fCB0eXBlID09PSBcImZvY3Vzb3V0XCIpIG9uQmx1cih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwia2V5ZG93blwiKSBvbktleURvd24odGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiKSBJU19QUkVTUyA9IHRoaXMuY29udGFpbnModGFyZ2V0KTtcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIpIElTX1BSRVNTID0gZmFsc2U7XG4gICAgaWYgKHR5cGUgPT09IFwibXV0YXRpb25cIiB8fCB0eXBlID09PSBcImlucHV0XCIpIHtcbiAgICAgIGNsZWFyVGltZW91dChJTlBVVF9ERUJPVU5DRSk7XG4gICAgICBJTlBVVF9ERUJPVU5DRSA9IHNldFRpbWVvdXQob25JbnB1dCwgMCwgdGhpcywgZXZlbnQpO1xuICAgIH1cbiAgfVxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcInUtb3B0aW9uXCIpO1xuICB9XG59O1xudmFyIGlzVmlzaWJsZSA9IChlbCkgPT4gZWwuY2hlY2tWaXNpYmlsaXR5ID8gZWwuY2hlY2tWaXNpYmlsaXR5KCkgOiAhIShlbC5vZmZzZXRIZWlnaHQgJiYgZWwub2Zmc2V0SGVpZ2h0KTtcbnZhciBzZXRFeHBhbmRlZCA9IChzZWxmLCBvcGVuKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChzZWxmLmhpZGRlbiAhPT0gb3BlbikgcmV0dXJuO1xuICBzZWxmLmhpZGRlbiA9ICFvcGVuO1xuICBpZiAoc2VsZi5faW5wdXQpIHNldHVwSW5wdXQoc2VsZiwgc2VsZi5faW5wdXQsIG9wZW4pO1xuICBpZiAoc2VsZi5wb3BvdmVyICYmICgoX2EyID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKSB7XG4gICAgYXR0cihzZWxmLl9pbnB1dCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKHNlbGYpKTtcbiAgICBhdHRyKHNlbGYsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcbiAgICBzZWxmLnRvZ2dsZVBvcG92ZXIob3Blbik7XG4gIH1cbiAgaWYgKG9wZW4pIG9uSW5wdXQoc2VsZik7XG59O1xudmFyIGRpc2Nvbm5lY3RJbnB1dCA9IChzZWxmKSA9PiB7XG4gIGlmICghc2VsZi5faW5wdXQpIHJldHVybjtcbiAgb2ZmKHNlbGYuX2lucHV0IHx8IHNlbGYsIEVWRU5UU19JTlBVVCwgc2VsZik7XG4gIG9mZihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gIHNldEV4cGFuZGVkKHNlbGYsIGZhbHNlKTtcbiAgc2VsZi5faW5wdXQgPSB2b2lkIDA7XG59O1xudmFyIHNldHVwSW5wdXQgPSAoc2VsZiwgaW5wdXQsIG9wZW4gPSBmYWxzZSkgPT4ge1xuICBvbihpbnB1dCwgRVZFTlRTX0lOUFVULCBzZWxmLCB0cnVlKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWF1dG9jb21wbGV0ZVwiLCBcImxpc3RcIik7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1jb250cm9sc1wiLCB1c2VJZChzZWxmKSk7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1leHBhbmRlZFwiLCBgJHtJU19NT0JJTEUgPyBvcGVuIDogXCJ0cnVlXCJ9YCk7XG4gIGF0dHIoaW5wdXQsIFwiYXV0b2NvbXBsZXRlXCIsIFwib2ZmXCIpO1xuICBhdHRyKGlucHV0LCBcInJvbGVcIiwgXCJjb21ib2JveFwiKTtcbn07XG52YXIgb25Gb2N1cyA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCBpc0lucHV0ID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudDtcbiAgaWYgKGlzSW5wdXQgJiYgZXZlbnQuaXNUcnVzdGVkKSBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgaWYgKCFMSVZFKSBMSVZFID0gY3JlYXRlQXJpYUxpdmUoXCJhc3NlcnRpdmVcIik7XG4gIGlmICghTElWRS5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChMSVZFKTtcbiAgaWYgKHNlbGYuX2lucHV0ICE9PSBldmVudC50YXJnZXQgJiYgaXNJbnB1dCAmJiBldmVudC50YXJnZXQubGlzdCA9PT0gc2VsZikge1xuICAgIGlmIChzZWxmLl9pbnB1dCkgZGlzY29ubmVjdElucHV0KHNlbGYpO1xuICAgIHNlbGYuX2lucHV0ID0gZXZlbnQudGFyZ2V0O1xuICAgIHNlbGYuX2lucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJmb2N1c1wiKSk7XG4gICAgc2VsZi5faW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImZvY3VzaW5cIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICBhdHRyKHNlbGYsIFNBRkVfTEFCRUxMRURCWSwgdXNlSWQoKF9hMiA9IHNlbGYuX2lucHV0LmxhYmVscykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMlswXSkpO1xuICAgIG9uKHNlbGYuX3Jvb3QgfHwgc2VsZiwgRVZFTlRTLCBzZWxmKTtcbiAgICBzZXRFeHBhbmRlZChzZWxmLCB0cnVlKTtcbiAgfVxufTtcbnZhciBvbkJsdXIgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgaWYgKCFJU19BTkRST0lEICYmICFJU19QUkVTUyAmJiBzZWxmLl9pbnB1dCkgc2V0VGltZW91dChvbkJsdXJyZWQsIDAsIHNlbGYpO1xuICBpZiAoZXZlbnQudGFyZ2V0ID09PSBzZWxmLl9pbnB1dCAmJiBldmVudC5pc1RydXN0ZWQpXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59O1xudmFyIG9uQmx1cnJlZCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSAoKF9hMiA9IHNlbGYuX3Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuYWN0aXZlRWxlbWVudCkgfHwgbnVsbDtcbiAgY29uc3QgaW5wdXQgPSBzZWxmLl9pbnB1dDtcbiAgaWYgKGlucHV0ICYmIGlucHV0ICE9PSByZWxhdGVkVGFyZ2V0ICYmICFzZWxmLmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImJsdXJcIiwgeyByZWxhdGVkVGFyZ2V0IH0pKTtcbiAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEZvY3VzRXZlbnQoXCJmb2N1c291dFwiLCB7IGJ1YmJsZXM6IHRydWUsIHJlbGF0ZWRUYXJnZXQgfSlcbiAgICApO1xuICAgIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgfVxufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9pbnB1dCB8fCBzZWxmLl9pbnB1dCA9PT0gdGFyZ2V0KSByZXR1cm4gc2V0RXhwYW5kZWQoc2VsZiwgdHJ1ZSk7XG4gIGZvciAoY29uc3Qgb3B0IG9mIHNlbGYub3B0aW9ucylcbiAgICBpZiAob3B0LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgIGlmIChhdHRyKHNlbGYsIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIikgIT09IFwidHJ1ZVwiKSB7XG4gICAgICAgIChfYTIgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xuICAgICAgICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2V0VmFsdWUoc2VsZi5faW5wdXQsIG9wdC52YWx1ZSk7XG4gICAgfVxuICBpZiAoSVNfQU5EUk9JRCkgb25CbHVycmVkKHNlbGYpO1xufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZSkgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoZS5hbHRLZXkgfHwgZS5jdHJsS2V5IHx8IGUubWV0YUtleSB8fCBlLnNoaWZ0S2V5IHx8IGUua2V5ID09PSBcIlRhYlwiKVxuICAgIHJldHVybjtcbiAgc2V0RXhwYW5kZWQoc2VsZiwgZS5rZXkgIT09IFwiRXNjYXBlXCIpO1xuICBjb25zdCB7IGtleSwgdGFyZ2V0IH0gPSBlO1xuICBjb25zdCBvcHRpb25zID0gWy4uLnNlbGYub3B0aW9uc10uZmlsdGVyKGlzVmlzaWJsZSk7XG4gIGNvbnN0IHByZXYgPSBvcHRpb25zLmluZGV4T2YodGFyZ2V0KTtcbiAgbGV0IG5leHQgPSAtMTtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIikgbmV4dCA9IChwcmV2ICsgMSkgJSBvcHRpb25zLmxlbmd0aDtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1VwXCIpIG5leHQgPSAofnByZXYgPyBwcmV2IDogb3B0aW9ucy5sZW5ndGgpIC0gMTtcbiAgaWYgKH5wcmV2KSB7XG4gICAgaWYgKGtleSA9PT0gXCJIb21lXCIgfHwga2V5ID09PSBcIlBhZ2VVcFwiKSBuZXh0ID0gMDtcbiAgICBpZiAoa2V5ID09PSBcIkVuZFwiIHx8IGtleSA9PT0gXCJQYWdlRG93blwiKSBuZXh0ID0gb3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIGlmIChrZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgb3B0aW9uc1twcmV2XS5jbGljaygpO1xuICAgICAgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbiAgaWYgKG9wdGlvbnNbbmV4dF0pIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIG9wdGlvbi50YWJJbmRleCA9IC0xO1xuICBpZiAob3B0aW9uc1tuZXh0XSkgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAoX2EyID0gb3B0aW9uc1tuZXh0XSB8fCBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGUpID0+IHtcbiAgY29uc3QgeyBfdGV4dHMsIF9yb290LCBfaW5wdXQsIG9wdGlvbnMgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gKF9pbnB1dCA9PSBudWxsID8gdm9pZCAwIDogX2lucHV0LnZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBmaWx0ZXIgPSAhc2VsZi5oYXNBdHRyaWJ1dGUoXCJkYXRhLW5vZmlsdGVyXCIpO1xuICBjb25zdCB2aXNpYmxlID0gW107XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIHtcbiAgICBjb25zdCBoaWRkZW4gPSBgJHtvcHQuZGlzYWJsZWQgfHwgb3B0LmhpZGRlbiB8fCBmaWx0ZXIgJiYgIW9wdC5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZhbHVlKX1gO1xuICAgIGF0dHIob3B0LCBcImFyaWEtaGlkZGVuXCIsIGhpZGRlbik7XG4gICAgaWYgKGlzVmlzaWJsZShvcHQpKSB2aXNpYmxlLnB1c2gob3B0KTtcbiAgfVxuICBjb25zdCB7IGxlbmd0aDogdG90YWwgfSA9IHZpc2libGU7XG4gIGNsZWFyVGltZW91dChMSVZFX1RJTUVSKTtcbiAgTElWRV9USU1FUiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGlmIChzZWxmLmhpZGRlbiB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS50eXBlKSAhPT0gXCJpbnB1dFwiIHx8IChfcm9vdCA9PSBudWxsID8gdm9pZCAwIDogX3Jvb3QuYWN0aXZlRWxlbWVudCkgIT09IF9pbnB1dClcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCBoaXRzVGV4dCA9IGAke2Ake190ZXh0c1t0b3RhbCA9PT0gMSA/IFwic2luZ3VsYXJcIiA6IFwicGx1cmFsXCJdfWAucmVwbGFjZShcIiVkXCIsIGAke3RvdGFsfWApfWA7XG4gICAgY29uc3QgbGl2ZVRleHQgPSBgJHshdG90YWwgJiYgc2VsZi5pbm5lclRleHQudHJpbSgpIHx8IGhpdHNUZXh0fSR7KytMSVZFX1NSX0ZJWCAlIDIgPyBcIlxceEEwXCIgOiBcIlwifWA7XG4gICAgaWYgKHZhbHVlICE9PSBzZWxmLl92YWx1ZSAmJiBMSVZFKSBMSVZFLnRleHRDb250ZW50ID0gbGl2ZVRleHQ7XG4gICAgc2VsZi5fdmFsdWUgPSB2YWx1ZTtcbiAgfSwgMWUzKTtcbiAgaWYgKElTX0lPUylcbiAgICB2aXNpYmxlLmZvckVhY2goKG9wdCwgaWR4KSA9PiBhdHRyKG9wdCwgXCJ0aXRsZVwiLCBgJHtpZHggKyAxfS8ke3RvdGFsfWApKTtcbn07XG5pZiAoSVNfQlJPV1NFUilcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcImxpc3RcIiwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBnZXRSb290KHRoaXMpLmdldEVsZW1lbnRCeUlkKGF0dHIodGhpcywgXCJsaXN0XCIpIHx8IFwiXCIpO1xuICAgIH1cbiAgfSk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWRhdGFsaXN0XCIsIFVIVE1MRGF0YUxpc3RFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxEYXRhTGlzdEVsZW1lbnQgfTtcbiIsImltcG9ydCB7IFVIVE1MQ29tYm9ib3hFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtY29tYm9ib3hcIjtcbmltcG9ydCB7IFVIVE1MRGF0YUxpc3RFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtZGF0YWxpc3RcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRRVUlDS19FVkVOVCxcblx0YW5jaG9yUG9zaXRpb24sXG5cdGF0dHIsXG5cdGlzSW5wdXRMaWtlLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdG9uTXV0YXRpb24sXG5cdHVzZUlkLFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0ZJRUxEID0gc3R5bGVzLmZpZWxkLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19QUk9QRVJUWV9PVkVSID0gXCItLW10ZHMtdGV4dC1jb3VudC1vdmVyXCI7XG5jb25zdCBDU1NfUFJPUEVSVFlfVU5ERVIgPSBcIi0tbXRkcy10ZXh0LWNvdW50LXVuZGVyXCI7XG5jb25zdCBDU1NfVkFMSURBVElPTlMgPSBzdHlsZXMudmFsaWRhdGlvbi5zcGxpdChcIiBcIik7XG5jb25zdCBDU1NfVkFMSURBVElPTiA9IENTU19WQUxJREFUSU9OU1swXTtcblxuY29uc3QgZ2V0VGV4dCA9IChzdHlsZTogQ1NTU3R5bGVEZWNsYXJhdGlvbiwga2V5OiBzdHJpbmcpID0+XG5cdHN0eWxlLmdldFByb3BlcnR5VmFsdWUoYC0tbXRkcy10ZXh0LSR7a2V5fWApPy5zbGljZSgxLCAtMSkgfHwgXCJcIjsgLy8gc2xpY2UgdG8gdHJpbSBxdW90ZXNcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oZmllbGRzOiBIVE1MQ29sbGVjdGlvbk9mPEVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKVxuXHRcdGlmIChmaWVsZC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0Y29uc3QgbGFiZWxzOiBIVE1MTGFiZWxFbGVtZW50W10gPSBbXTtcblx0XHRcdGNvbnN0IGRlc2NzOiBFbGVtZW50W10gPSBbXTtcblx0XHRcdGxldCBjb21ib2JveDogVUhUTUxDb21ib2JveEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblx0XHRcdGxldCBpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IHZhbGlkID0gdHJ1ZTtcblxuXHRcdFx0Zm9yIChjb25zdCBlbCBvZiBmaWVsZC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpIHtcblx0XHRcdFx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTExhYmVsRWxlbWVudCkgbGFiZWxzLnB1c2goZWwpO1xuXHRcdFx0XHRlbHNlIGlmIChlbCBpbnN0YW5jZW9mIFVIVE1MQ29tYm9ib3hFbGVtZW50KSBjb21ib2JveCA9IGVsO1xuXHRcdFx0XHRlbHNlIGlmIChpc0lucHV0TGlrZShlbCkpIGlucHV0ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGVsLmhhc0F0dHJpYnV0ZShcImRhdGEtZGVzY3JpcHRpb25cIikpIGRlc2NzLnB1c2goZWwpO1xuXHRcdFx0XHRlbHNlIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1ZBTElEQVRJT04pKSB7XG5cdFx0XHRcdFx0dmFsaWQgPVxuXHRcdFx0XHRcdFx0YXR0cihlbCwgXCJkYXRhLWNvbG9yXCIpID09PSBcInN1Y2Nlc3NcIiB8fFxuXHRcdFx0XHRcdFx0IWVsLmNsaWVudFdpZHRoIHx8XG5cdFx0XHRcdFx0XHQhZWwuY2xpZW50SGVpZ2h0OyAvLyBPbmx5IHNldCBpbnZhbGlkIGlmIFZhbGlkYXRpb24gaXMgdmlzaWJsZVxuXHRcdFx0XHRcdGRlc2NzLnVuc2hpZnQoZWwpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgSFRNTFBhcmFncmFwaEVsZW1lbnQpXG5cdFx0XHRcdFx0ZGVzY3Muc29tZSgoZGVzYykgPT4gZGVzYy5jb250YWlucyhlbCkpIHx8IGRlc2NzLnB1c2goZWwpOyAvLyBPbmx5IGFkZCBpZiBub3QgYWxyZWFkeSBpbnNpZGUgZGVzY3JpcHRpb25cblx0XHRcdH1cblxuXHRcdFx0aWYgKGlucHV0KSB7XG5cdFx0XHRcdGZvciAoY29uc3QgbGFiZWwgb2YgbGFiZWxzKSBsYWJlbC5odG1sRm9yID0gdXNlSWQoaW5wdXQpO1xuXHRcdFx0XHRyZW5kZXJDb21ib2JveChjb21ib2JveCk7XG5cdFx0XHRcdHJlbmRlckNvdW50ZXIoaW5wdXQpO1xuXHRcdFx0XHRyZW5kZXJUZXh0YXJlYVNpemUoaW5wdXQpO1xuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgZGVzY3MubWFwKHVzZUlkKS5qb2luKFwiIFwiKSB8fCBudWxsKTsgLy8gUmVtb3ZlIGlmIGVtcHR5XG5cdFx0XHRcdGF0dHIoaW5wdXQsIFwiYXJpYS1pbnZhbGlkXCIsIGAkeyF2YWxpZH1gKTtcblx0XHRcdH1cblx0XHR9XG59XG5cbi8vIGlPUyBkb2VzIG5vdCBzdXBwb3J0IGZpZWxkLXNpemluZzogY29udGVudCwgc28gd2UgbmVlZCB0byBtYW51YWxseSByZXNpemVcbmZ1bmN0aW9uIHJlbmRlclRleHRhcmVhU2l6ZSh0ZXh0YXJlYTogRWxlbWVudCkge1xuXHRpZiAodGV4dGFyZWEgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG5cdFx0dGV4dGFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXCItLW10ZHMtdGV4dGFyZWEtaGVpZ2h0XCIsIFwiYXV0b1wiKTtcblx0XHR0ZXh0YXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcdFwiLS1tdGRzLXRleHRhcmVhLWhlaWdodFwiLFxuXHRcdFx0YCR7dGV4dGFyZWEuc2Nyb2xsSGVpZ2h0fXB4YCxcblx0XHQpO1xuXHR9XG59XG5cbi8vIFNldHVwIHRyYW5zbGF0aW9ucyBmcm9tIENTUyBjdXN0b20gcHJvcGVydGllc1xuZnVuY3Rpb24gcmVuZGVyQ29tYm9ib3goZWw6IFVIVE1MQ29tYm9ib3hFbGVtZW50IHwgbnVsbCkge1xuXHRpZiAoIWVsPy5saXN0IHx8IGVsLmxpc3Q/Lmhhc0F0dHJpYnV0ZShcInBvcG92ZXJcIikpIHJldHVybjtcblx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1hZGRlZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWFkZGVkXCIpKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLWVtcHR5XCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtZW1wdHlcIikpO1xuXHRhdHRyKGVsLCBcImRhdGEtc3ItZm91bmRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1mb3VuZFwiKSk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1pbnZhbGlkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtaW52YWxpZFwiKSk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1vZlwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LW9mXCIpKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLXJlbW92ZVwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LXJlbW92ZVwiKSk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1yZW1vdmVkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtcmVtb3ZlZFwiKSk7XG5cdGF0dHIoZWwubGlzdCwgXCJkYXRhLXNyLXBsdXJhbFwiLCBnZXRUZXh0KHN0eWxlLCBcImRhdGFsaXN0LXBsdXJhbFwiKSk7XG5cdGF0dHIoZWwubGlzdCwgXCJkYXRhLXNyLXNpbmd1bGFyXCIsIGdldFRleHQoc3R5bGUsIFwiZGF0YWxpc3Qtc2luZ3VsYXJcIikpO1xuXHRhdHRyKGVsLmxpc3QsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyQ291bnRlcihpbnB1dDogSFRNTElucHV0RWxlbWVudCkge1xuXHRjb25zdCBlbCA9IGlucHV0Py5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdGNvbnN0IGxpbWl0ID0gZWwgJiYgYXR0cihlbCwgXCJkYXRhLWNvdW50XCIpO1xuXG5cdGlmIChlbCAmJiBsaW1pdCkge1xuXHRcdGNvbnN0IHJlbWFpbmRlciA9IE51bWJlcihsaW1pdCkgLSBpbnB1dC52YWx1ZS5sZW5ndGg7XG5cdFx0Y29uc3QgbmV4dEludmFsaWQgPSByZW1haW5kZXIgPCAwO1xuXHRcdGNvbnN0IHByZXZJbnZhbGlkID0gYXR0cihlbCwgXCJhcmlhLWxpdmVcIikgPT09IFwicG9saXRlXCI7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCB8fCBpbnB1dCk7XG5cdFx0Y29uc3Qgb3ZlciA9IGdldFRleHQoc3R5bGUsIENTU19QUk9QRVJUWV9PVkVSKTtcblx0XHRjb25zdCB1bmRlciA9IGdldFRleHQoc3R5bGUsIENTU19QUk9QRVJUWV9VTkRFUik7XG5cblx0XHRpZiAocHJldkludmFsaWQgIT09IG5leHRJbnZhbGlkKSB7XG5cdFx0XHRhdHRyKGVsLCBcImFyaWEtbGl2ZVwiLCBuZXh0SW52YWxpZCA/IFwicG9saXRlXCIgOiBcIm9mZlwiKTtcblx0XHRcdGZvciAoY29uc3QgY3NzIG9mIENTU19WQUxJREFUSU9OUykgZWwuY2xhc3NMaXN0LnRvZ2dsZShjc3MsIG5leHRJbnZhbGlkKTtcblx0XHR9XG5cdFx0ZWwudGV4dENvbnRlbnQgPSAobmV4dEludmFsaWQgPyBvdmVyIDogdW5kZXIpLnJlcGxhY2UoXG5cdFx0XHRcIiVkXCIsXG5cdFx0XHRgJHtNYXRoLmFicyhyZW1haW5kZXIpfWAsXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGVUb2dnbGUoeyB0YXJnZXQ6IGVsLCBuZXdTdGF0ZSB9OiBFdmVudCAmIHsgbmV3U3RhdGU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBVSFRNTERhdGFMaXN0RWxlbWVudCkge1xuXHRcdGNvbnN0IHJvb3QgPSBlbC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QgfCBudWxsO1xuXHRcdGNvbnN0IGFuY2hvciA9IHJvb3Q/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuXHRcdFx0YFtwb3BvdmVydGFyZ2V0PVwiJHtlbC5pZH1cIl1gLFxuXHRcdCk7XG5cblx0XHRpZiAobmV3U3RhdGUgPT09IFwiY2xvc2VkXCIpIGFuY2hvclBvc2l0aW9uKGVsLCBmYWxzZSk7XG5cdFx0ZWxzZSBpZiAoYW5jaG9yKSB7XG5cdFx0XHRlbC5zdHlsZS53aWR0aCA9IGAke2FuY2hvci5jbGllbnRXaWR0aH1weGA7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgYW5jaG9yLCBcImJvdHRvbVwiLCB0cnVlKTtcblx0XHR9XG5cdH1cbn1cbi8vIFVwZGF0ZSB3aGVuIHR5cGluZ1xuZnVuY3Rpb24gaGFuZGxlSW5wdXQoeyB0YXJnZXQgfTogRXZlbnQpIHtcblx0aWYgKGlzSW5wdXRMaWtlKHRhcmdldCkpIHtcblx0XHRyZW5kZXJDb3VudGVyKHRhcmdldCk7XG5cdFx0cmVuZGVyVGV4dGFyZWFTaXplKHRhcmdldCk7XG5cdH1cbn1cblxuLy8gUHJldmVudCBicm93c2VycyBmcm9tIHNob3dpbmcgZGVmYXVsdCB2YWxpZGF0aW9uIGJ1YmJsZXNcbmZ1bmN0aW9uIGhhbmRsZUludmFsaWQoZXZlbnQ6IEV2ZW50KSB7XG5cdGlmICgoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oYC4ke0NTU19GSUVMRH1gKSlcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufVxuXG4vLyBQb3NpdGlvbiBjb21ib2JveCB3aGVuIGNoYW5naW5nIGNvbnRlbnRcbmZ1bmN0aW9uIGhhbmRsZUJlZm9yZUNoYW5nZSh7IHRhcmdldDogZWwgfTogRXZlbnQpIHtcblx0Y29uc3QgbGlzdCA9IGVsIGluc3RhbmNlb2YgVUhUTUxDb21ib2JveEVsZW1lbnQgJiYgZWwubGlzdDtcblx0aWYgKGxpc3QgJiYgIWxpc3Q/LmhpZGRlbilcblx0XHRzZXRUaW1lb3V0KCgpID0+IGFuY2hvclBvc2l0aW9uKGxpc3QsIGVsLCAyLCB0cnVlKSwgMTApOyAvLyBSZXBvc2l0aW9uIGxpc3QgaWYgbm90IGhpZGRlblxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfRklFTEQsIGhhbmRsZU11dGF0aW9uKTtcblx0b24oZG9jdW1lbnQsIFwiYmVmb3JlY2hhbmdlXCIsIGhhbmRsZUJlZm9yZUNoYW5nZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbihkb2N1bWVudCwgXCJpbnB1dFwiLCBoYW5kbGVJbnB1dCwgUVVJQ0tfRVZFTlQpO1xuXHRvbihkb2N1bWVudCwgXCJpbnZhbGlkXCIsIGhhbmRsZUludmFsaWQsIHRydWUpOyAvLyBVc2UgY2FwdHVyZSBhcyBpbnZhbGlkIGRvZXMgbm9lIGJ1YmJsZVxuXHRvbihkb2N1bWVudCwgXCJ0b2dnbGVcIiwgaGFuZGxlVG9nZ2xlLCBRVUlDS19FVkVOVCk7IC8vIFVzZSBjYXB0dXJlIHNpbmNlIHRvZ2dsZSBkb2VzIG5vdCBidWJibGVcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIGlzSW5wdXRMaWtlLCBvbkxvYWRlZCwgb25NdXRhdGlvbiwgdXNlSWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0ZJRUxEU0VUID0gc3R5bGVzLmZpZWxkc2V0LnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19WQUxJREFUSU9OID0gc3R5bGVzLnZhbGlkYXRpb24uc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihmaWVsZHNldHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCBmaWVsZHNldCBvZiBmaWVsZHNldHMpXG5cdFx0aWYgKGZpZWxkc2V0LmlzQ29ubmVjdGVkKSB7XG5cdFx0XHRjb25zdCBpbnB1dHM6IEhUTUxJbnB1dEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0bGV0IHZhbGlkYXRpb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cblx0XHRcdGZvciAoY29uc3QgZWwgb2YgZmllbGRzZXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpKSB7XG5cdFx0XHRcdGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1ZBTElEQVRJT04pKSB2YWxpZGF0aW9uSWQgPSB1c2VJZChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSkgaW5wdXRzLnB1c2goZWwpO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykge1xuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgdmFsaWRhdGlvbklkKTtcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWludmFsaWRcIiwgYCR7ISF2YWxpZGF0aW9uSWR9YCk7XG5cdFx0XHR9XG5cdFx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PlxuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0ZJRUxEU0VULCBoYW5kbGVNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19MT0dPID0gc3R5bGVzLmxvZ28uc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihbbG9nb106IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdGlmIChsb2dvPy5pc0Nvbm5lY3RlZCAmJiBsb2dvPy5maXJzdEVsZW1lbnRDaGlsZCBpbnN0YW5jZW9mIFNWR1NWR0VsZW1lbnQpIHtcblx0XHRmb3IgKGNvbnN0IGljb24gb2YgZG9jdW1lbnQuaGVhZC5xdWVyeVNlbGVjdG9yQWxsKFwibGlua1tyZWx+PSdpY29uJ11cIikpXG5cdFx0XHRpY29uLnNldEF0dHJpYnV0ZShcInJlbFwiLCBcImRpc2FibGVkXCIpOyAvLyBEaXNhYmxlIHByZXZpb3VzIGljb24gKGJ1dCBub3QgcmVtb3ZlIGlzIGFzIHRoaXMgbWFrZXMgTmV4dC5qcyBzYWQpXG5cblx0XHRjb25zdCBzdmcgPSBsb2dvLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdGNvbnN0IGlzRG90ID0gbG9nbz8uaGFzQXR0cmlidXRlKFwiZGF0YS1lbnZcIik7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzdmcpO1xuXHRcdGNvbnN0IHRleHQgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sb3JcIik7XG5cdFx0Y29uc3QgYmFjayA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCItLW10ZHMtbG9nby1jb2xvclwiKTtcblx0XHRjb25zdCBpY29uID0gc3ZnLm91dGVySFRNTFxuXHRcdFx0LnJlcGxhY2UoL1xcbisvZywgXCIgXCIpIC8vIFByZXZlbnQgbGluZSBicmVha3Ncblx0XHRcdC5yZXBsYWNlKC8oZmlsbHx3aWR0aHxoZWlnaHR8eG1sbnMpPVwiW15cIl0rXCIvZ2ksIFwiXCIpXG5cdFx0XHQucmVwbGFjZShcIjxzdmdcIiwgYDxzdmcgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgZmlsbD1cIiR7dGV4dH1cImApO1xuXG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChcblx0XHRcdE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIiksIHtcblx0XHRcdFx0aHJlZjogYGRhdGE6aW1hZ2Uvc3ZnK3htbCwke2VuY29kZVVSSUNvbXBvbmVudChgPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA1NSA1NSc+PHJlY3QgZmlsbD0nJHtpc0RvdCA/IFwibm9uZVwiIDogYmFja30nIHdpZHRoPSc1MScgaGVpZ2h0PSc1MScgeD0nMicgeT0nMicgc3Ryb2tlPScke3RleHR9JyBzdHJva2UtZGFzaGFycmF5PScwLjA5IDYuMzgnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW9wYWNpdHk9JyR7aXNEb3QgPyAwLjYgOiAwfScgc3Ryb2tlLXdpZHRoPScyLjMnIHJ4PScyNS41Jy8+PGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDcuNSA3LjUpXCI+JHtpY29ufTwvZz48L3N2Zz5gKX1gLFxuXHRcdFx0XHRyZWw6IFwiaWNvblwiLFxuXHRcdFx0fSksXG5cdFx0KTtcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiBvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0xPR08sIGhhbmRsZU11dGF0aW9uKSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgUVVJQ0tfRVZFTlQsIGFuY2hvclBvc2l0aW9uLCBhdHRyLCBvbiwgb25Mb2FkZWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1BPUE9WRVIgPSBzdHlsZXMucG9wb3Zlci5zcGxpdChcIiBcIilbMF07XG5sZXQgT1BFTl9QT1BPVkVSUyA9IDA7IC8vIFNwZWVkIHVwIGJ5IG9ubHkgY2hlY2tpbmcgY2xpY2tzIGlmIHdlIGhhdmUgb3BlbiBwb3BvdmVyc1xuXG5mdW5jdGlvbiBoYW5kbGVUb2dnbGUoeyB0YXJnZXQ6IGVsLCBuZXdTdGF0ZSB9OiBFdmVudCAmIHsgbmV3U3RhdGU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1BPUE9WRVIpKSB7XG5cdFx0Y29uc3QgYW5jaG9yID0gKGVsLmdldFJvb3ROb2RlKCkgYXMgU2hhZG93Um9vdCk/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuXHRcdFx0YFtwb3BvdmVydGFyZ2V0PVwiJHtlbC5pZH1cIl1gLFxuXHRcdCk7XG5cblx0XHRpZiAobmV3U3RhdGUgPT09IFwiY2xvc2VkXCIpIHtcblx0XHRcdE9QRU5fUE9QT1ZFUlMgLT0gMTtcblx0XHRcdGFuY2hvclBvc2l0aW9uKGVsLCBmYWxzZSk7XG5cdFx0fSBlbHNlIGlmIChhbmNob3IpIHtcblx0XHRcdE9QRU5fUE9QT1ZFUlMgKz0gMTtcblx0XHRcdGFuY2hvclBvc2l0aW9uKGVsLCBhbmNob3IsIGF0dHIoZWwsIFwiZGF0YS1wb3NpdGlvblwiKSB8fCBcImJvdHRvbVwiKTtcblx0XHR9XG5cdH1cbn1cblxuLy8gUG9seWZpbGwgcG9wb3ZlcnRhcmdldCBmb3IgPGE+IChub3Qgc3VwcG9ydGVkIGJ5IG5hdGl2ZSlcbi8vIGFuZCBhdXRvbWF0aWNhbGx5IGFzc3VtZSBwb3BvdmVydGFyZ2V0IGlzIHRoZSBjbG9zZXN0IHBhcmVudCBwb3BvdmVyXG4vLyBidXQgcmVzcGVjdCB0aGUgcG9wb3ZlcnRhcmdldCBhbmQgcG9wb3ZlcnRhcmdldGFjdGlvbiBhdHRyaWJ1dGVcbmZ1bmN0aW9uIGhhbmRsZUxpbmtDbGljayh7IHRhcmdldCB9OiBFdmVudCkge1xuXHRjb25zdCBjbG9zZSA9XG5cdFx0T1BFTl9QT1BPVkVSUyAmJiAodGFyZ2V0IGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oXCJhLFtwb3BvdmVydGFyZ2V0YWN0aW9uXVwiKTtcblxuXHRpZiAoY2xvc2UpIHtcblx0XHRjb25zdCBhY3Rpb24gPSBhdHRyKGNsb3NlLCBcInBvcG92ZXJ0YXJnZXRhY3Rpb25cIikgfHwgXCJ0b2dnbGVcIjtcblx0XHRjb25zdCBvcGVuID0gYWN0aW9uID09PSBcInNob3dcIiB8fCAoYWN0aW9uID09PSBcImhpZGVcIiA/IGZhbHNlIDogdW5kZWZpbmVkKTtcblx0XHRjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhdHRyKGNsb3NlLCBcInBvcG92ZXJ0YXJnZXRcIikgfHwgXCJcIik7XG5cdFx0Y29uc3QgcG9wb3ZlciA9ICh0YXJnZXQgfHwgY2xvc2UpLmNsb3Nlc3Q8SFRNTEVsZW1lbnQ+KGAuJHtDU1NfUE9QT1ZFUn1gKTtcblxuXHRcdC8vIFBvcG92ZXIgY2FuIGJlIGRpc2Nvbm5ldGVkIGJ5IGNsaWNrIGhhbmRsZXIgZGVlcGVyIGRvd24gaW4gdGhlIERPTSB0aHJlZSBiZWZvcmUgcmVhY2hpbmcgZG9jdW1lbnRcblx0XHRpZiAocG9wb3Zlcj8uaXNDb25uZWN0ZWQgJiYgcG9wb3Zlcj8udG9nZ2xlUG9wb3Zlcilcblx0XHRcdHBvcG92ZXIudG9nZ2xlUG9wb3ZlcihvcGVuKTtcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcInRvZ2dsZVwiLCBoYW5kbGVUb2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVMaW5rQ2xpY2spOyAvLyBBbGxvdyBgPGE+YCB0byB1c2UgYHBvcG92ZXJ0YXJnZXRgIGFzIHdlbGxcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UQUJMRSA9IHN0eWxlcy50YWJsZS5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKHRhYmxlczogSFRNTENvbGxlY3Rpb25PZjxIVE1MVGFibGVFbGVtZW50Pikge1xuXHRmb3IgKGNvbnN0IHRhYmxlIG9mIHRhYmxlcykge1xuXHRcdGNvbnN0IHRoczogc3RyaW5nW10gPSBbXTsgLy8gQWRkIGRhdGEtdGg9XCJcIiB0byBlYWNoIGNlbGwgdG8gc3VwcG9ydCBkYXRhLW1vYmlsZSBkZXNpZ25zXG5cblx0XHRhdHRyKHRhYmxlLCBcInJvbGVcIiwgXCJ0YWJsZVwiKTsgLy8gQWRkIGhlbHBpbmcgcm9sZT1cIlwiIHRvIGVuc3VyZSBzY3JlZW4gcmVhZGVycyB1bmRlcnN0YW5kIHRoZSB0YWJsZSByZWdhcmRsZXNzIG9mIENTUyBkaXNwbGF5XG5cdFx0aWYgKHRhYmxlLmNhcHRpb24pIGF0dHIodGFibGUuY2FwdGlvbiwgXCJyb2xlXCIsIFwiY2FwdGlvblwiKTtcblx0XHRmb3IgKGNvbnN0IGdyb3VwIG9mIFt0YWJsZS50SGVhZCwgdGFibGUudEZvb3QsIC4uLnRhYmxlLnRCb2RpZXNdKVxuXHRcdFx0aWYgKGdyb3VwKSB7XG5cdFx0XHRcdGF0dHIoZ3JvdXAsIFwicm9sZVwiLCBcInJvd2dyb3VwXCIpO1xuXHRcdFx0XHRjb25zdCBpc1Rib2R5ID0gZ3JvdXAubm9kZU5hbWUgPT09IFwiVEJPRFlcIjtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHJvdyBvZiBncm91cC5yb3dzKSB7XG5cdFx0XHRcdFx0YXR0cihyb3csIFwicm9sZVwiLCBcInJvd1wiKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGNlbGwgb2Ygcm93LmNlbGxzKSB7XG5cdFx0XHRcdFx0XHRpZiAoaXNUYm9keSkgYXR0cihjZWxsLCBcImRhdGEtdGhcIiwgdGhzW2NlbGwuY2VsbEluZGV4XSB8fCBcIjplbXB0eVwiKTtcblx0XHRcdFx0XHRcdGVsc2UgdGhzLnB1c2goY2VsbC5pbm5lclRleHQudHJpbSgpKTsgLy8gVXNpbmcgaW5uZXJUZXh0IHRvIG9ubHkgaW5jbHVkZSB2aXNpYmxlIHRleHRcblx0XHRcdFx0XHRcdGlmIChjZWxsLm5vZGVOYW1lID09PSBcIlREXCIpIGF0dHIoY2VsbCwgXCJyb2xlXCIsIFwiY2VsbFwiKTtcblx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhdHRyKGNlbGwsIFwicm9sZVwiLCBpc1Rib2R5ID8gXCJyb3doZWFkZXJcIiA6IFwiY29sdW1uaGVhZGVyXCIpO1xuXHRcdFx0XHRcdFx0XHRhdHRyKGNlbGwsIFwic2NvcGVcIiwgaXNUYm9keSA/IFwicm93XCIgOiBcImNvbFwiKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiBvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX1RBQkxFLCBoYW5kbGVNdXRhdGlvbikpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uLCBvbkxvYWRlZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfVE9HR0xFR1JPVVAgPSBgLiR7c3R5bGVzLnRvZ2dsZWdyb3VwLnNwbGl0KFwiIFwiKVswXX1gO1xuXG4vLyBQcmV2ZW50IGJyb3dzZXJzIGZyb20gc2hvd2luZyBkZWZhdWx0IHZhbGlkYXRpb24gYnViYmxlc1xuZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudDogRXZlbnQgJiBQYXJ0aWFsPEtleWJvYXJkRXZlbnQ+KSB7XG5cdGNvbnN0IHsga2V5LCB0YXJnZXQ6IGVsIH0gPSBldmVudDtcblx0Y29uc3QgZ3JvdXAgPSBlbCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgZWwuY2xvc2VzdChDU1NfVE9HR0xFR1JPVVApO1xuXG5cdGlmICghZ3JvdXApIHJldHVybjtcblx0aWYgKGtleSA9PT0gXCJFbnRlclwiKSBlbC5jbGljaygpO1xuXHRpZiAoa2V5Py5zdGFydHNXaXRoKFwiQXJyb3dcIikpIHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGNvbnN0IGlucHV0cyA9IGdyb3VwLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIik7XG5cdFx0Y29uc3QgaW5kZXggPSBbLi4uaW5wdXRzXS5pbmRleE9mKGVsKTtcblx0XHRjb25zdCBtb3ZlID0ga2V5Lm1hdGNoKC9BcnJvdyhSaWdodHxEb3duKS8pID8gMSA6IC0xO1xuXHRcdGlucHV0c1soaW5wdXRzLmxlbmd0aCArIGluZGV4ICsgbW92ZSkgJSBpbnB1dHMubGVuZ3RoXT8uZm9jdXMoKTtcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiBvbihkb2N1bWVudCwgXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRJU19CUk9XU0VSLFxuXHRRVUlDS19FVkVOVCxcblx0YW5jaG9yUG9zaXRpb24sXG5cdGF0dHIsXG5cdG9uLFxuXHRvbkxvYWRlZCxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IERFU0NSSUJFREJZID0gXCJhcmlhLWRlc2NyaWJlZGJ5XCI7XG5jb25zdCBFU0MgPSBcIkVzY2FwZVwiO1xuY29uc3QgTEFCRUxMRURCWSA9IFwiYXJpYS1sYWJlbGxlZGJ5XCI7XG5jb25zdCBQT1NJVElPTl9DU1NfUFJPUEVSVFkgPSBcIi0tbXRkcy10b29sdGlwLXBvc2l0aW9uXCI7XG5jb25zdCBUSFJPVFRMRV9ERUxBWSA9IDMwMDtcbmNvbnN0IFRPT0xUSVAgPSBJU19CUk9XU0VSXG5cdD8gT2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCB7XG5cdFx0XHRjbGFzc05hbWU6IHN0eWxlcy5fdG9vbHRpcCxcblx0XHRcdGlkOiBcIm10ZHMtdG9vbHRpcFwiLFxuXHRcdFx0cG9wb3ZlcjogXCJtYW51YWxcIixcblx0XHR9KVxuXHQ6IG51bGw7IC8vIENyZWF0ZSBhIGR1bW15IGVsZW1lbnQgdG8gYXZvaWQgbnVsbCBjaGVja3NcblxubGV0IEFOQ0hPUjogRWxlbWVudCB8IG51bGwgPSBudWxsO1xubGV0IExBU1RfQ0FMTCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbmxldCBUSFJPVFRMRTogbnVtYmVyIHwgUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gPSAwO1xuXG5mdW5jdGlvbiBoYW5kbGVNb3ZlKHsgdGFyZ2V0LCB0eXBlLCBrZXkgfTogRXZlbnQgJiB7IGtleT86IHN0cmluZyB9KSB7XG5cdGlmICh0eXBlID09PSBcImtleWRvd25cIiAmJiBrZXkgIT09IEVTQykgcmV0dXJuOyAvLyBBbGxvdyBFU0MgZGlzbWlzcyB0byBmb2xsb3cgaHR0cHM6Ly93d3cudzMub3JnL1dBSS9BUklBL2FwZy9wYXR0ZXJucy90b29sdGlwL1xuXHRjb25zdCB3YWl0ID0gTEFTVF9DQUxMICsgVEhST1RUTEVfREVMQVkgLSBEYXRlLm5vdygpO1xuXHRjbGVhclRpbWVvdXQoVEhST1RUTEUpO1xuXHRUSFJPVFRMRSA9IHNldFRpbWVvdXQoXG5cdFx0aGFuZGxlTW92ZVRocm90dGxlZCxcblx0XHRNYXRoLm1heCh3YWl0LCAwKSxcblx0XHRrZXkgPT09IEVTQyA/IG51bGwgOiB0YXJnZXQsXG5cdCk7XG59XG5cbi8vIFVzaW5nIGEgdGhyb3R0bGVkIGZ1bmN0aW9uIHRvIGF2b2lkIHBlcmZvcm1hbmNlIGlzc3Vlc1xuZnVuY3Rpb24gaGFuZGxlTW92ZVRocm90dGxlZCh0YXJnZXQ6IEVsZW1lbnQgfCBudWxsKSB7XG5cdExBU1RfQ0FMTCA9IERhdGUubm93KCk7XG5cblx0Ly8gQnVpbGQgYW5kIGFwcGVuZCB0b29sdGlwIGlmIG5vdCBleGlzdGluZ1xuXHRpZiAoIVRPT0xUSVAgfHwgdGFyZ2V0ID09PSBUT09MVElQKSByZXR1cm47IC8vIEFsbG93IHRvb2x0aXAgdG8gYmUgaG92ZXJlZCwgZm9sbG93aW5nIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjEvI2NvbnRlbnQtb24taG92ZXItb3ItZm9jdXNcblx0aWYgKCFUT09MVElQPy5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoVE9PTFRJUCk7IC8vIEVuc3VyZSBjb25uZWN0ZWRcblx0bGV0IGFuY2hvciA9IHRhcmdldD8uY2xvc2VzdD8uPEVsZW1lbnQ+KFwiW2RhdGEtdG9vbHRpcF1cIikgfHwgbnVsbDtcblxuXHQvLyBObyBuZWVkIHRvIHVwZGF0ZVxuXHRpZiAoYW5jaG9yID09PSBBTkNIT1IpIHJldHVybjtcblxuXHRjb25zdCBjb250ZW50ID0gKGFuY2hvciAmJiBhdHRyKGFuY2hvciwgXCJkYXRhLXRvb2x0aXBcIikpIHx8IFwiXCI7XG5cdGNvbnN0IHBvc2l0aW9uID1cblx0XHQoYW5jaG9yICYmIGF0dHIoYW5jaG9yLCBcImRhdGEtdG9vbHRpcC1wb3NpdGlvblwiKSkgfHxcblx0XHR3aW5kb3dcblx0XHRcdC5nZXRDb21wdXRlZFN0eWxlKGFuY2hvciB8fCBkb2N1bWVudC5ib2R5KVxuXHRcdFx0LmdldFByb3BlcnR5VmFsdWUoUE9TSVRJT05fQ1NTX1BST1BFUlRZKVxuXHRcdFx0Py50cmltKCkgfHxcblx0XHRcInRvcFwiO1xuXG5cdGNvbnN0IGlzSGlkZGVuID1cblx0XHQhY29udGVudCB8fFxuXHRcdGNvbnRlbnQgPT09IFwiZmFsc2VcIiB8fFxuXHRcdGNvbnRlbnQgPT09IFwidHJ1ZVwiIHx8XG5cdFx0cG9zaXRpb24gPT09IFwibm9uZVwiO1xuXG5cdGlmIChpc0hpZGRlbikgYW5jaG9yID0gbnVsbDsgLy8gRG8gbm90IHNob3cgdG9vbHRpcCBpZiBib29saXNoIHZhbHVlXG5cdGlmIChhbmNob3IpIFRPT0xUSVAudGV4dENvbnRlbnQgPSBjb250ZW50OyAvLyBPbmx5IHVwZGF0ZSBjb250ZW50IGlmIG5ldyBhbmNob3JcblxuXHRjb25zdCBoYWRMYWJlbCA9IEFOQ0hPUiAmJiBhdHRyKEFOQ0hPUiwgTEFCRUxMRURCWSkgPT09IFRPT0xUSVA/LmlkO1xuXHRjb25zdCBoYXNMYWJlbCA9XG5cdFx0KGFuY2hvciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50XG5cdFx0XHQ/IGFuY2hvci5pbm5lclRleHRcblx0XHRcdDogYW5jaG9yPy50ZXh0Q29udGVudFxuXHRcdCk/LnRyaW0oKSB8fFxuXHRcdGFuY2hvcj8uaGFzQXR0cmlidXRlKExBQkVMTEVEQlkpIHx8XG5cdFx0YW5jaG9yPy5oYXNBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIpO1xuXG5cdEFOQ0hPUj8ucmVtb3ZlQXR0cmlidXRlKGhhZExhYmVsID8gTEFCRUxMRURCWSA6IERFU0NSSUJFREJZKTsgLy8gVW5saW5rIHByZXZpb3VzIGFuY2hvclxuXHRhbmNob3JQb3NpdGlvbihUT09MVElQLCBmYWxzZSk7IC8vIFJlc2V0IGFuY2hvciBwb3NpdGlvblxuXG5cdEFOQ0hPUiA9IGFuY2hvcjsgLy8gU3RvcmUgbmV3IGFuY2hvciAtIG1pZ2h0IGJlIG51bGwgaWYgbm8gbmV3IGFuY2hvclxuXHRpZiAoQU5DSE9SKSBhdHRyKEFOQ0hPUiwgaGFzTGFiZWwgPyBERVNDUklCRURCWSA6IExBQkVMTEVEQlksIFRPT0xUSVA/LmlkKTsgLy8gVXNlIHRvb2x0aXAgYXMgZGVzY3JpcHRpb24gaWYgYWxscmVhZHkgaGFzIGxhYmVsXG5cdFRPT0xUSVAudG9nZ2xlUG9wb3ZlcighIWFuY2hvcik7XG5cdGFuY2hvclBvc2l0aW9uKFRPT0xUSVAsIGFuY2hvciB8fCBmYWxzZSwgcG9zaXRpb24pO1xufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcImJsdXIsZm9jdXMsbW91c2VvdXQsbW91c2VvdmVyXCIsIGhhbmRsZU1vdmUsIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcImtleWRvd25cIiwgaGFuZGxlTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwiYmx1clwiLCBoYW5kbGVNb3ZlLCBRVUlDS19FVkVOVCk7XG59KTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBfYTI7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gKF9hMiA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKSkgIT0gbnVsbCA/IF9hMiA6IG51bGw7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xuXG4vLyB1LWRldGFpbHMudHNcbnZhciBVSFRNTERldGFpbHNFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIFVzaW5nIHVuZGVyc2NvcmUgaW5zdGVhZCBvZiBwcml2YXRlIGZpZWxkcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLl9jb250ZW50ID0gbnVsbDtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgbmFtZTogXCJzdW1tYXJ5XCIgfSksXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IHBhcnQ6IFwiZGV0YWlscy1jb250ZW50XCIgfSksXG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGAke0RJU1BMQVlfQkxPQ0t9XG4gICAgICAgIDo6c2xvdHRlZCh1LXN1bW1hcnkpIHsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBibG9jayB9XG5cdFx0XHRcdDo6c2xvdHRlZCh1LXN1bW1hcnkpOjpiZWZvcmUgeyBjb250ZW50OiAnJzsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBtYXJnaW4taW5saW5lOiAuMDVlbSAuMzEyNWVtOyBib3JkZXItYmxvY2s6IC4zMTI1ZW0gc29saWQgdHJhbnNwYXJlbnQ7IGJvcmRlci1pbmxpbmUtc3RhcnQ6IC41ZW0gc29saWQgfVxuXHRcdFx0XHQ6OnNsb3R0ZWQodS1zdW1tYXJ5W2FyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJdKTo6YmVmb3JlIHsgcm90YXRlOiA5MGRlZyB9XG5cdFx0XHRcdDpob3N0ID4gW3BhcnQ9XCJkZXRhaWxzLWNvbnRlbnRcIl06bm90KFtoaWRkZW49XCJcIl0pIHsgZGlzcGxheTogYmxvY2sgfWBcbiAgICAgIClcbiAgICApO1xuICB9XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJvcGVuXCJdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHZhciBfYTI7XG4gICAgdGhpcy5fY29udGVudCA9IChfYTIgPSB0aGlzLnNoYWRvd1Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2hpbGRyZW5bMV07XG4gICAgb24odGhpcy5fY29udGVudCwgXCJiZWZvcmVtYXRjaFwiLCB0aGlzKTtcbiAgICBvbih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBpZiAodGhpcy5fY29udGVudCkgb2ZmKHRoaXMuX2NvbnRlbnQsIFwiYmVmb3JlbWF0Y2hcIiwgdGhpcyk7XG4gICAgb2ZmKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICB0aGlzLl9jb250ZW50ID0gbnVsbDtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socHJvcCwgcHJldiwgbmV4dCkge1xuICAgIGNvbnN0IGhpZGUgPSBcIm9uYmVmb3JlbWF0Y2hcIiBpbiB0aGlzID8gXCJ1bnRpbC1mb3VuZFwiIDogdHJ1ZTtcbiAgICBjb25zdCBvcGVuID0gdGhpcy5vcGVuO1xuICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5jaGlsZHJlbilcbiAgICAgIGlmIChlbC5ub2RlTmFtZSA9PT0gXCJVLVNVTU1BUllcIikgYXR0cihlbCwgXCJhcmlhLWV4cGFuZGVkXCIsIGAke29wZW59YCk7XG4gICAgaWYgKHRoaXMuX2NvbnRlbnQpIHtcbiAgICAgIGF0dHIodGhpcy5fY29udGVudCwgXCJhcmlhLWhpZGRlblwiLCBgJHshb3Blbn1gKTtcbiAgICAgIHRoaXMuX2NvbnRlbnQuaGlkZGVuID0gb3BlbiA/IGZhbHNlIDogaGlkZTtcbiAgICB9XG4gICAgaWYgKG9wZW4gJiYgdGhpcy5uYW1lKSB7XG4gICAgICBjb25zdCB1RGV0YWlsc0xpc3QgPSBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAke3RoaXMubm9kZU5hbWV9W25hbWU9XCIke3RoaXMubmFtZX1cIl1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCB1RGV0YWlscyBvZiB1RGV0YWlsc0xpc3QpXG4gICAgICAgIGlmICh1RGV0YWlscyAhPT0gdGhpcykgdURldGFpbHMub3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAocHJvcCA9PT0gXCJvcGVuXCIgJiYgcHJldiA9PT0gbnVsbCAhPT0gKG5leHQgPT09IG51bGwpKVxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInRvZ2dsZVwiKSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiOnNjb3BlID4gdS1zdW1tYXJ5XCIpO1xuICAgIGNvbnN0IGlzU3VtbWFyeSA9IHN1bW1hcnkgPT0gbnVsbCA/IHZvaWQgMCA6IHN1bW1hcnkuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJlZm9yZW1hdGNoXCIpIHRoaXMub3BlbiA9IHRydWU7XG4gICAgaWYgKGlzU3VtbWFyeSAmJiBldmVudC50eXBlID09PSBcImtleWRvd25cIikgYXNCdXR0b24oZXZlbnQpO1xuICAgIGlmIChpc1N1bW1hcnkgJiYgZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xuICB9XG4gIGdldCBvcGVuKCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcIm9wZW5cIik7XG4gIH1cbiAgc2V0IG9wZW4odmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwib3BlblwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBcIm5hbWVcIikgfHwgXCJcIjtcbiAgfVxuICBzZXQgbmFtZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJuYW1lXCIsIHZhbHVlKTtcbiAgfVxufTtcbnZhciBVSFRNTFN1bW1hcnlFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgICB0aGlzLnNsb3QgPSBcInN1bW1hcnlcIjtcbiAgICB0aGlzLnRhYkluZGV4ID0gMDtcbiAgfVxufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGV0YWlsc1wiLCBVSFRNTERldGFpbHNFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtc3VtbWFyeVwiLCBVSFRNTFN1bW1hcnlFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxEZXRhaWxzRWxlbWVudCwgVUhUTUxTdW1tYXJ5RWxlbWVudCB9O1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0ZJUkVGT1ggPSBJU19CUk9XU0VSICYmIC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgX2EyO1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIChfYTIgPSBlbC5nZXRBdHRyaWJ1dGUobmFtZSkpICE9IG51bGwgPyBfYTIgOiBudWxsO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIGlmIChhdHRycykgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkgYXR0cihlbCwga2V5LCB2YWwpO1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBnZXRMYWJlbCA9IChlbCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gZ2V0Um9vdChlbCk7XG4gIGNvbnN0IGxhYmVsID0gYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIpIHx8IFwiXCI7XG4gIGNvbnN0IGxhYmVscyA9ICgoX2EyID0gYXR0cihlbCwgXCJhcmlhLWxhYmVsbGVkYnlcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpLnNwbGl0KC9cXHMrLykpIHx8IFtdO1xuICByZXR1cm4gW1xuICAgIC4uLmxhYmVscy5tYXAoKGlkMikgPT4gcm9vdCA9PSBudWxsID8gdm9pZCAwIDogcm9vdC5xdWVyeVNlbGVjdG9yKGBbaWQ9XCIke2lkMn1cIl1gKSksXG4gICAgLy8gR2V0IGFsbCBsYWJlbGxlZGJ5IGVsZW1lbnRzXG4gICAgLi4uQXJyYXkuZnJvbShlbC5sYWJlbHMgfHwgW10pXG4gICAgLy8gR2V0IGFsbCA8bGFiZWw+IGVsZW1lbnRzXG4gIF0ucmVkdWNlKChhY2MsIGVsMikgPT4ge1xuICAgIHZhciBfYTM7XG4gICAgcmV0dXJuIGFjYyB8fCAoKF9hMyA9IGVsMiA9PSBudWxsID8gdm9pZCAwIDogZWwyLmlubmVyVGV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy50cmltKCkpIHx8IFwiXCI7XG4gIH0sIGxhYmVsKTtcbn07XG5cbi8vIHUtcHJvZ3Jlc3MudHNcbnZhciBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG52YXIgVUhUTUxQcm9ncmVzc0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIFwidmFsdWVcIiwgXCJtYXhcIl07XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgaGlkZGVuOiBcIlwiIH0pLFxuICAgICAgLy8gU2xvdCBoaWRpbmcgY29udGVudCBhbGxvd3MgbGVnYWN5IGJyb3dzZXIgdG8gZGlzcGxheSBmYWxsYmFjayB0ZXh0XG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGA6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBib3JkZXI6IDFweCBzb2xpZDsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBoZWlnaHQ6IC41ZW07IHdpZHRoOiAxMGVtOyBvdmVyZmxvdzogaGlkZGVuIH1cbiAgICAgICAgOmhvc3Q6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiAxMDAlOyBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7IHdpZHRoOiB2YXIoLS1wZXJjZW50YWdlLCAwJSk7IHRyYW5zaXRpb246IHdpZHRoIC4ycyB9XG4gICAgICAgIDpob3N0KDpub3QoW3ZhbHVlXSkpIHsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLGN1cnJlbnRDb2xvciAyNSUsIHRyYW5zcGFyZW50IDUwJSwgY3VycmVudENvbG9yIDc1JSkgNTAlLzQwMCUgfVxuICAgICAgICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IG5vLXByZWZlcmVuY2UpIHsgOmhvc3QgeyBhbmltYXRpb246IGluZGV0ZXJtaW5hdGUgMnMgbGluZWFyIGluZmluaXRlIH0gIH1cbiAgICAgICAgQGtleWZyYW1lcyBpbmRldGVybWluYXRlIHsgZnJvbSB7IGJhY2tncm91bmQtcG9zaXRpb24teDogMTAwJSB9IHRvIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAwIH0gfWBcbiAgICAgIClcbiAgICApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmIChTS0lQX0FUVFJfQ0hBTkdFKSByZXR1cm47XG4gICAgU0tJUF9BVFRSX0NIQU5HRSA9IHRydWU7XG4gICAgY29uc3Qgcm9sZUltYWdlID0gSVNfSU9TIHx8IElTX0ZJUkVGT1g7XG4gICAgY29uc3QgcGVyY2VudGFnZSA9IE1hdGgubWF4KDAsIE1hdGgucm91bmQodGhpcy5wb3NpdGlvbiAqIDEwMCkpO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBlcmNlbnRhZ2VcIiwgYCR7cGVyY2VudGFnZX0lYCk7XG4gICAgbGV0IGxhYmVsID0gZ2V0TGFiZWwodGhpcyk7XG4gICAgaWYgKHJvbGVJbWFnZSkgbGFiZWwgPSBgJHtsYWJlbC5yZXBsYWNlKC9cXGQrJSQvLCBcIlwiKX0gJHtwZXJjZW50YWdlfSVgO1xuICAgIGlmIChJU19GSVJFRk9YKSBmb3IgKGNvbnN0IGVsIG9mIHRoaXMubGFiZWxzKSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIiwgbGFiZWwpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWJ1c3lcIiwgYCR7dGhpcy5wb3NpdGlvbiA9PT0gLTF9YCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtbGFiZWxcIiwgbGFiZWwudHJpbSgpKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIG51bGwpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbWF4XCIsIFwiMTAwXCIpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbWluXCIsIFwiMFwiKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW5vd1wiLCBgJHtwZXJjZW50YWdlfWApO1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIHJvbGVJbWFnZSA/IFwiaW1nXCIgOiBcInByb2dyZXNzYmFyXCIpO1xuICAgIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbiAgfVxuICBnZXQgbGFiZWxzKCkge1xuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5jbG9zZXN0KFwibGFiZWw6bm90KFtmb3JdKVwiKTtcbiAgICBjb25zdCBpZDIgPSB1c2VJZCh0aGlzKTtcbiAgICBpZiAobGFiZWwpIGxhYmVsLmh0bWxGb3IgPSBpZDI7XG4gICAgY29uc3QgZWwgPSBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgbGFiZWxbZm9yPVwiJHtpZDJ9XCJdYFxuICAgICk7XG4gICAgcmV0dXJuIGVsO1xuICB9XG4gIGdldCBwb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSA9PT0gbnVsbCA/IC0xIDogTWF0aC5taW4odGhpcy52YWx1ZSAvIHRoaXMubWF4LCAxKTtcbiAgfVxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIGdldE51bWJlcih0aGlzLCBcInZhbHVlXCIpO1xuICB9XG4gIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgIHNldE51bWJlcih0aGlzLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbWF4KCkge1xuICAgIHJldHVybiBnZXROdW1iZXIodGhpcywgXCJtYXhcIikgfHwgMTtcbiAgfVxuICBzZXQgbWF4KG1heCkge1xuICAgIHNldE51bWJlcih0aGlzLCBcIm1heFwiLCBtYXgpO1xuICB9XG59O1xuLy8gUHJldmVudCBDaHJvbWUgRGV2VG9vbHMgd2FybmluZyBhYm91dCA8bGFiZWwgZm9yPVwiXCI+IHBvaW50aW5nIHRvIDx1LXByb2dyZXNzPlxuVUhUTUxQcm9ncmVzc0VsZW1lbnQuZm9ybUFzc29jaWF0ZWQgPSB0cnVlO1xudmFyIGlzTnVtZXJpYyA9ICh2YWx1ZSkgPT4gIU51bWJlci5pc05hTihOdW1iZXIucGFyc2VGbG9hdChgJHt2YWx1ZX1gKSkgJiYgTnVtYmVyLmlzRmluaXRlKE51bWJlcih2YWx1ZSkpO1xudmFyIGdldE51bWJlciA9IChlbCwga2V5KSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gYXR0cihlbCwga2V5KTtcbiAgcmV0dXJuIGlzTnVtZXJpYyh2YWx1ZSkgPyBNYXRoLm1heCgwLCBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZSkpIDogbnVsbDtcbn07XG52YXIgc2V0TnVtYmVyID0gKGVsLCBrZXksIHZhbCkgPT4ge1xuICBpZiAodmFsID09PSBudWxsIHx8IGlzTnVtZXJpYyh2YWwpKSBhdHRyKGVsLCBrZXksIGAke3ZhbH1gKTtcbiAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBzZXQgbm9uLW51bWVyaWMgJyR7YXR0cn0nOiAnJHt2YWx9J2ApO1xufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtcHJvZ3Jlc3NcIiwgVUhUTUxQcm9ncmVzc0VsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTFByb2dyZXNzRWxlbWVudCB9O1xuIl0sIm5hbWVzIjpbIklTX0JST1dTRVIiLCJJU19BTkRST0lEIiwiX2EiLCJJU19CUk9XU0VSJDUiLCJTQUZFX0xBQkVMTEVEQlkiLCJESVNQTEFZX0JMT0NLIiwiVUhUTUxFbGVtZW50IiwiYXR0ciIsImVsIiwibmFtZSIsInZhbHVlIiwiX2EyIiwiZXZlbnRzIiwiYWN0aW9uIiwiZWxlbWVudCIsInJlc3QiLCJ0eXBlIiwib24iLCJvZmYiLCJhdHRhY2hTdHlsZSIsImNzcyIsImNyZWF0ZUVsZW1lbnQiLCJvYnNlcnZlcnMiLCJtdXRhdGlvbk9ic2VydmVyIiwib3B0aW9ucyIsIm9ic2VydmVyIiwiZGV0YWlsIiwiYXNCdXR0b24iLCJldmVudCIsImlzQ2xpY2siLCJnZXRSb290Iiwibm9kZSIsInJvb3QiLCJpZCIsInVzZUlkIiwidGFnTmFtZSIsInRleHQiLCJhdHRycyIsImN1c3RvbUVsZW1lbnRzIiwiaW5zdGFuY2UiLCJBUklBX0NPTlRST0xTIiwiQVJJQV9TRUxFQ1RFRCIsIlVIVE1MVGFic0VsZW1lbnQiLCJxdWVyeVdpdGhvdXROZXN0ZWQiLCJnZXRTZWxlY3RlZEluZGV4IiwiaW5kZXgiLCJzZXRTZWxlY3RlZCIsIlVIVE1MVGFiTGlzdEVsZW1lbnQiLCJ0YWIiLCJrZXkiLCJ0YWJzIiwicHJldiIsIm5leHQiLCJTS0lQX0FUVFJfQ0hBTkdFIiwiVUhUTUxUYWJFbGVtZW50IiwicGFuZWxzIiwibmV4dFBhbmVsIiwiZ2V0UGFuZWwiLCJwYW5lbCIsInRhYmxpc3QiLCJ0YWJMaXN0IiwiVUhUTUxUYWJQYW5lbEVsZW1lbnQiLCJpc0ZvY3VzYWJsZSIsInRhZyIsInNlbGYiLCJpZDIiLCJfX2RlZlByb3AiLCJfX2dldE93blByb3BTeW1ib2xzIiwiX19oYXNPd25Qcm9wIiwiX19wcm9wSXNFbnVtIiwiX19kZWZOb3JtYWxQcm9wIiwib2JqIiwiX19zcHJlYWRWYWx1ZXMiLCJhIiwiYiIsInByb3AiLCJJU19GSVJFRk9YIiwiSVNfSU9TIiwiSVNfQlJPV1NFUiQ0IiwiRk9DVVNfT1VUTElORSIsInRleHQyIiwidmFsIiwiY3JlYXRlQXJpYUxpdmUiLCJtb2RlIiwibGl2ZSIsInNldFZhbHVlIiwiaW5wdXQiLCJkYXRhIiwiX2IiLCJwcm90byIsIkxJVkUiLCJMSVZFX1NSX0ZJWCIsIklTX1BSRVNTIiwiRVZFTlRTIiwiRVZFTlRfT05DRSIsIklTX0ZJUkVGT1hfTUFDIiwiSVNfTU9CSUxFIiwiRkFMU0UiLCJDTElDSyIsIlRFWFRTIiwiVUhUTUxDb21ib2JveEVsZW1lbnQiLCJyZW5kZXIiLCJzeW5jSW5wdXRWYWx1ZSIsIl8iLCJkaXNjb25uZWN0Q2FjaGUiLCJ0YXJnZXQiLCJvbkJsdXIiLCJvbkNsaWNrIiwib25Gb2N1cyIsIm9uSW5wdXQiLCJvbktleURvd24iLCJpdGVtIiwiY3JlYXRlSXRlbSIsIl9jIiwiX2ZvY3VzIiwiX3NwZWFrIiwiX3RleHRzIiwiaXRlbXMiLCJjb250cm9sIiwibGlzdCIsIm11bHRpcGxlIiwiYWRkZWROb2RlcyIsInJlbW92ZWROb2RlcyIsImVkaXQiLCJ0b3RhbCIsInZhbHVlcyIsImxhYmVsIiwiaW5wdXRNb2RlIiwibmV4dEZvY3VzIiwiX2EzIiwia2VlcCIsImxhYmVsMiIsImFyaWEiLCJvcHQiLCJkZWwiLCJzZWxlY3QiLCJ3aXRoRXZlbnQiLCJkaXNwYXRjaE1hdGNoIiwiY3JlYXRhYmxlIiwicXVlcnkiLCJtYXRjaCIsIm8iLCJkaXNwYXRjaENoYW5nZSIsInJlbW92ZWFibGUiLCJhZGQiLCJyZW1vdmUiLCJpIiwib25CbHVycmVkIiwiY2xlYXIiLCJ4IiwieSIsInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsInJlcGVhdCIsImlzQ29udHJvbCIsImluVGV4dCIsImZvcm0iLCJRVUlDS19FVkVOVCIsImRlYm91bmNlIiwiY2FsbGJhY2siLCJkZWxheSIsInRpbWVyIiwiYXJncyIsIlVVSUQiLCJTQ1JPTExFUiIsIlRBUkdFVFMiLCJUQVJHRVRTX1VQREFURSIsInVwZGF0ZSIsIlBPU0lUSU9OIiwiYW5jaG9yUG9zaXRpb24iLCJhbmNob3IiLCJwb3NpdGlvbiIsImZvcmNlIiwicGxhY2UiLCJpc0hUTUxBbmNob3IiLCJ0YXJnZXRXIiwidGFyZ2V0SCIsImFuY2hvclciLCJhbmNob3JIIiwid2lkdGgiLCJoZWlnaHQiLCJhbmNob3JYIiwiYW5jaG9yWSIsImhhc1NwYWNlTGVmdCIsImhhc1NwYWNlUmlnaHQiLCJoYXNTcGFjZU92ZXIiLCJoYXNTcGFjZVVuZGVyIiwicG9zaXRpb25SaWdodCIsInBvc2l0aW9uVW5kZXIiLCJjZW50ZXJYIiwiY2VudGVyWSIsImlzVmVydGljYWwiLCJjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyIiwicXVldWUiLCJvbkZyYW1lIiwib25UaW1lciIsIk1VVEFUT1JTIiwib25NdXRhdGlvbiIsImNsYXNzTmFtZSIsImVsZW1zIiwibXV0YXRvciIsIm9uTG9hZGVkIiwicnVuIiwiaXNJbnB1dExpa2UiLCJNQVRPTU8iLCJFTkFCTEVEIiwiYW5hbHl0aWNzIiwibWF0b21vSWQiLCJlbmFibGVkIiwidXJsIiwidGl0bGUiLCJjYXRlZ29yeSIsInYiLCJyZXN1bHRzIiwiZ2V0U3RlcHMiLCJub3ciLCJtYXgiLCJzaG93Iiwib2Zmc2V0Iiwic3RhcnQiLCJlbmQiLCJwYWdlcyIsInBhZ2luYXRpb24iLCJjdXJyZW50IiwicGFnZSIsInNoZWV0IiwiQ1NTX0FQUCIsInN0eWxlcyIsIkNTU19TVElDS1kiLCJDU1NfVE9HR0xFIiwiQ1NTX1NJREVCQVIiLCJ1c2VUcmFuc2l0aW9uIiwidG9nZ2xlQXBwRXhwYW5kZWQiLCJoYW5kbGVUb2dnbGVDbGljayIsInNpZGViYXIiLCJoYW5kbGVSZXNpemUiLCJNSU5fWSIsIlNDUk9MTF9VUCIsIlNUSUNLIiwiU1RJQ0tfRUwiLCJTVElDS19IIiwiU1RJQ0tfWSIsIlNUVUNLIiwiV0lOX0giLCJXSU5fWSIsImhhbmRsZU11dGF0aW9uIiwic3RpY2t5IiwiaGFuZGxlU2Nyb2xsIiwiTkVYVF9ZIiwiTkVYVF9VUCIsIkNTU19CUkVBRENSVU1CUyIsImJyZWFkY3J1bWJzIiwiYnJlYWRjdW1icyIsImNydW1iIiwibGVuZ3RoIiwiQ1NTX0RJQUxPRyIsIkRJQUxPR1MiLCJoYW5kbGVNb2RhbCIsImRpYWxvZyIsImhhbmRsZUNsaWNrIiwiaGFuZGxlSW5qZWN0IiwiZmlyc3QiLCJJU19CUk9XU0VSJDIiLCJESVNBQkxFRCIsIlNFTEVDVEVEIiwiVUhUTUxPcHRpb25FbGVtZW50IiwiTElWRV9USU1FUiIsIklOUFVUX0RFQk9VTkNFIiwiRVZFTlRTX0lOUFVUIiwiVUhUTUxEYXRhTGlzdEVsZW1lbnQiLCJkaXNjb25uZWN0SW5wdXQiLCJfcHJldiIsInNldHVwSW5wdXQiLCJpc1Zpc2libGUiLCJzZXRFeHBhbmRlZCIsIm9wZW4iLCJpc0lucHV0IiwicmVsYXRlZFRhcmdldCIsIm9wdGlvbiIsIl9yb290IiwiX2lucHV0IiwiZmlsdGVyIiwidmlzaWJsZSIsImhpZGRlbiIsImhpdHNUZXh0IiwibGl2ZVRleHQiLCJpZHgiLCJDU1NfRklFTEQiLCJDU1NfUFJPUEVSVFlfT1ZFUiIsIkNTU19QUk9QRVJUWV9VTkRFUiIsIkNTU19WQUxJREFUSU9OUyIsIkNTU19WQUxJREFUSU9OIiwiZ2V0VGV4dCIsInN0eWxlIiwiZmllbGRzIiwiZmllbGQiLCJsYWJlbHMiLCJkZXNjcyIsImNvbWJvYm94IiwidmFsaWQiLCJkZXNjIiwicmVuZGVyQ29tYm9ib3giLCJyZW5kZXJDb3VudGVyIiwicmVuZGVyVGV4dGFyZWFTaXplIiwidGV4dGFyZWEiLCJsaW1pdCIsInJlbWFpbmRlciIsIm5leHRJbnZhbGlkIiwicHJldkludmFsaWQiLCJvdmVyIiwidW5kZXIiLCJoYW5kbGVUb2dnbGUiLCJuZXdTdGF0ZSIsImhhbmRsZUlucHV0IiwiaGFuZGxlSW52YWxpZCIsImhhbmRsZUJlZm9yZUNoYW5nZSIsIkNTU19GSUVMRFNFVCIsImZpZWxkc2V0cyIsImZpZWxkc2V0IiwiaW5wdXRzIiwidmFsaWRhdGlvbklkIiwiQ1NTX0xPR08iLCJsb2dvIiwiaWNvbiIsInN2ZyIsImlzRG90IiwiYmFjayIsIkNTU19QT1BPVkVSIiwiT1BFTl9QT1BPVkVSUyIsImhhbmRsZUxpbmtDbGljayIsImNsb3NlIiwicG9wb3ZlciIsIkNTU19UQUJMRSIsInRhYmxlcyIsInRhYmxlIiwidGhzIiwiZ3JvdXAiLCJpc1Rib2R5Iiwicm93IiwiY2VsbCIsIkNTU19UT0dHTEVHUk9VUCIsImhhbmRsZUtleURvd24iLCJtb3ZlIiwiREVTQ1JJQkVEQlkiLCJFU0MiLCJMQUJFTExFREJZIiwiUE9TSVRJT05fQ1NTX1BST1BFUlRZIiwiVEhST1RUTEVfREVMQVkiLCJUT09MVElQIiwiQU5DSE9SIiwiTEFTVF9DQUxMIiwiVEhST1RUTEUiLCJoYW5kbGVNb3ZlIiwid2FpdCIsImhhbmRsZU1vdmVUaHJvdHRsZWQiLCJjb250ZW50IiwiaGFkTGFiZWwiLCJoYXNMYWJlbCIsIklTX0JST1dTRVIkMSIsIlVIVE1MRGV0YWlsc0VsZW1lbnQiLCJoaWRlIiwidURldGFpbHNMaXN0IiwidURldGFpbHMiLCJzdW1tYXJ5IiwiaXNTdW1tYXJ5IiwiVUhUTUxTdW1tYXJ5RWxlbWVudCIsImdldExhYmVsIiwiYWNjIiwiZWwyIiwiVUhUTUxQcm9ncmVzc0VsZW1lbnQiLCJyb2xlSW1hZ2UiLCJwZXJjZW50YWdlIiwiZ2V0TnVtYmVyIiwic2V0TnVtYmVyIiwiaXNOdW1lcmljIl0sIm1hcHBpbmdzIjoia0NBQ0EsSUFBSUEsR0FBYSxPQUFPLE9BQVcsS0FBZSxPQUFPLE9BQU8sU0FBYSxLQUFlLE9BQU8sT0FBTyxVQUFjLElBQ3BIQyxHQUFhRCxJQUFjLFdBQVcsS0FBSyxVQUFVLFNBQVMsRUFDOURFLEdBQ01DLElBQ1YsUUFBUSxPQUFPRCxHQUFLLFVBQVUsZ0JBQWtCLEtBQU8sT0FBU0EsR0FBRyxXQUFhLFVBQVUsUUFBUSxFQUNsRyxJQUFJRSxHQUFrQixHQUFHSCxHQUFhLE9BQVMsTUFBTSxjQUNqREksR0FBZ0IsMkNBQ2hCQyxHQUFlLE9BQU8sWUFBZ0IsSUFBYyxLQUFNLENBQzlELEVBQUksWUFDSixTQUFTQyxFQUFLQyxFQUFJQyxFQUFNQyxFQUFPLENBQzdCLElBQUlDLEVBQ0osT0FBSUQsSUFBVSxRQUFnQkMsRUFBTUgsRUFBRyxhQUFhQyxDQUFJLElBQU0sS0FBT0UsRUFBTSxNQUN2RUQsSUFBVSxLQUFNRixFQUFHLGdCQUFnQkMsQ0FBSSxFQUNsQ0QsRUFBRyxhQUFh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
21
+ @keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(Wt)return;Wt=!0;const t=zi||Xn,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let n=es(this);if(t&&(n=`${n.replace(/\d+%$/,"")} ${e}%`),Xn)for(const o of this.labels)w(o,"aria-label",n);w(this,"aria-busy",`${this.position===-1}`),w(this,"aria-label",n.trim()),w(this,"aria-labelledby",null),w(this,"aria-valuemax","100"),w(this,"aria-valuemin","0"),w(this,"aria-valuenow",`${e}`),w(this,"role",t?"img":"progressbar"),Wt=!1}get labels(){const t=this.closest("label:not([for])"),e=Zi(this);return t&&(t.htmlFor=e),Qn(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return eo(this,"value")}set value(t){no(this,"value",t)}get max(){return eo(this,"max")||1}set max(t){no(this,"max",t)}};Zn.formAssociated=!0;var to=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),eo=(t,e)=>{const n=w(t,e);return to(n)?Math.max(0,Number.parseFloat(n)):null},no=(t,e,n)=>{if(n===null||to(n))w(t,e,`${n}`);else throw new Error(`Failed to set non-numeric '${w}': '${n}'`)};return ts.define("u-progress",Zn),$.UHTMLComboboxElement=at,$.UHTMLTabElement=te,$.UHTMLTabListElement=Zt,$.UHTMLTabPanelElement=ee,$.UHTMLTabsElement=Jt,$.analytics=Wo,$.pagination=jo,$.styles=Ko,$.toggleAppExpanded=pn,$.version=Ro,Object.defineProperty($,Symbol.toStringTag,{value:"Module"}),$}({});
22
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWNvbWJvYm94L2Rpc3QvdS1jb21ib2JveC5qcyIsIi4uL2Rlc2lnbnN5c3RlbS91dGlscy50cyIsIi4uL2Rlc2lnbnN5c3RlbS9hbmFseXRpY3MvYW5hbHl0aWNzLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BhZ2luYXRpb24vcGFnaW5hdGlvbi1oZWxwZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC10b2dnbGUuanMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9icmVhZGNydW1icy9icmVhZGNydW1icy1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9kaWFsb2cvZGlhbG9nLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2Vycm9yc3VtbWFyeS9lcnJvcnN1bW1hcnktb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kYXRhbGlzdC9kaXN0L3UtZGF0YWxpc3QuanMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGQvZmllbGQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGRzZXQvZmllbGRzZXQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vbG9nby9sb2dvLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BvcG92ZXIvcG9wb3Zlci1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90YWJsZS90YWJsZS1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b2dnbGVncm91cC90b2dnbGVncm91cC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b29sdGlwL3Rvb2x0aXAtb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kZXRhaWxzL2Rpc3QvdS1kZXRhaWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtcHJvZ3Jlc3MvZGlzdC91LXByb2dyZXNzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xuXG4vLyB1LXRhYnMudHNcbnZhciBBUklBX0NPTlRST0xTID0gXCJhcmlhLWNvbnRyb2xzXCI7XG52YXIgQVJJQV9TRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xudmFyIFVIVE1MVGFic0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgRElTUExBWV9CTE9DSyk7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFibGlzdFwiLCB0aGlzKVswXSB8fCBudWxsO1xuICB9XG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICBzZXRTZWxlY3RlZCh0aGlzLnRhYnNbaW5kZXhdKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJcIiwgdGhpcyk7XG4gIH1cbiAgZ2V0IHBhbmVscygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJwYW5lbFwiLCB0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYkxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFibGlzdFwiKTtcbiAgICBvbih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCkgdGhpcy5oYW5kbGVFdmVudCgpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LnR5cGUgPT09IFwibXV0YXRpb25cIikge1xuICAgICAgY29uc3QgdGFiID0gdGhpcy50YWJzW01hdGgubWF4KHRoaXMuc2VsZWN0ZWRJbmRleCwgMCldO1xuICAgICAgcmV0dXJuIHRhYiA9PSBudWxsID8gdm9pZCAwIDogdGFiLnNldEF0dHJpYnV0ZShBUklBX1NFTEVDVEVELCBcInRydWVcIik7XG4gICAgfVxuICAgIGNvbnN0IHsga2V5IH0gPSBldmVudDtcbiAgICBjb25zdCB0YWJzID0gWy4uLnRoaXMudGFic107XG4gICAgY29uc3QgcHJldiA9IHRhYnMuZmluZEluZGV4KCh0YWIpID0+IHRhYi5jb250YWlucyhldmVudC50YXJnZXQpKTtcbiAgICBsZXQgbmV4dCA9IHByZXY7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgcHJldiA9PT0gLTEpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSBzZXRTZWxlY3RlZCh0YWJzW3ByZXZdKTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIgJiYgIWFzQnV0dG9uKGV2ZW50KSkge1xuICAgICAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIiB8fCBrZXkgPT09IFwiQXJyb3dSaWdodFwiKVxuICAgICAgICBuZXh0ID0gKHByZXYgKyAxKSAlIHRhYnMubGVuZ3RoO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93VXBcIiB8fCBrZXkgPT09IFwiQXJyb3dMZWZ0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiB8fCB0YWJzLmxlbmd0aCkgLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkVuZFwiKSBuZXh0ID0gdGFicy5sZW5ndGggLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkhvbWVcIikgbmV4dCA9IDA7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiVGFiXCIpIG5leHQgPSBnZXRTZWxlY3RlZEluZGV4KHRhYnMpO1xuICAgICAgZWxzZSByZXR1cm47XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGFic1twcmV2XS50YWJJbmRleCA9IC0xO1xuICAgICAgICB0YWJzW25leHRdLnRhYkluZGV4ID0gMDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGtleSAhPT0gXCJUYWJcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0YWJzW25leHRdLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJzKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbn07XG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MVGFiRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIEFSSUFfU0VMRUNURUQsIEFSSUFfQ09OVFJPTFNdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jayB9XCJcbiAgICApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFiXCIpO1xuICAgIHRoaXMudGFiSW5kZXggPSB0aGlzLnNlbGVjdGVkID8gMCA6IC0xO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoIVNLSVBfQVRUUl9DSEFOR0UgJiYgdGhpcy5zZWxlY3RlZCAmJiB0aGlzLnRhYkxpc3QpIHtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgICAgY29uc3QgdGFicyA9IFsuLi50aGlzLnRhYkxpc3QucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpXTtcbiAgICAgIGNvbnN0IHBhbmVscyA9IHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFicGFuZWxcIiwgdGhpcy50YWJzRWxlbWVudCB8fCB0aGlzKTtcbiAgICAgIGNvbnN0IG5leHRQYW5lbCA9IGdldFBhbmVsKHRoaXMsIHBhbmVsc1t0YWJzLmluZGV4T2YodGhpcyldKTtcbiAgICAgIGlmIChuZXh0UGFuZWwpIGF0dHIobmV4dFBhbmVsLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKHRoaXMpKTtcbiAgICAgIHRhYnMuZm9yRWFjaCgodGFiLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBwYW5lbCA9IGdldFBhbmVsKHRhYiwgcGFuZWxzW2luZGV4XSk7XG4gICAgICAgIHRhYi50YWJJbmRleCA9IHRhYiA9PT0gdGhpcyA/IDAgOiAtMTtcbiAgICAgICAgYXR0cih0YWIsIEFSSUFfU0VMRUNURUQsIGAke3RhYiA9PT0gdGhpc31gKTtcbiAgICAgICAgaWYgKHBhbmVsKSBwYW5lbC5oaWRkZW4gPSBwYW5lbCAhPT0gbmV4dFBhbmVsO1xuICAgICAgICBpZiAocGFuZWwpIGF0dHIodGFiLCBBUklBX0NPTlRST0xTLCBwYW5lbC5pZCk7XG4gICAgICB9KTtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgY29uc3QgdGFibGlzdCA9IHRoaXMucGFyZW50RWxlbWVudDtcbiAgICByZXR1cm4gKHRhYmxpc3QgPT0gbnVsbCA/IHZvaWQgMCA6IHRhYmxpc3Qubm9kZU5hbWUpID09PSBcIlUtVEFCTElTVFwiID8gdGFibGlzdCA6IG51bGw7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQpID09PSBcInRydWVcIjtcbiAgfVxuICBzZXQgc2VsZWN0ZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQsIGAkeyEhdmFsdWV9YCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiB0YWIgaW4gYSB0YWJsaXN0LiAqL1xuICBnZXQgaW5kZXgoKSB7XG4gICAgY29uc3QgdGFiTGlzdCA9IHRoaXMudGFiTGlzdDtcbiAgICByZXR1cm4gdGFiTGlzdCA/IFsuLi50YWJMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKV0uaW5kZXhPZih0aGlzKSA6IDA7XG4gIH1cbiAgZ2V0IHBhbmVsKCkge1xuICAgIHJldHVybiBnZXRQYW5lbCh0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYlBhbmVsRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImhpZGRlblwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFicGFuZWxcIik7XG4gICAgdGhpcy5oaWRkZW4gPSBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicykgPT09IC0xO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLmhpZGRlbiB8fCBpc0ZvY3VzYWJsZSh0aGlzLmZpcnN0Q2hpbGQpKVxuICAgICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIG51bGwpO1xuICAgIGVsc2UgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgY29uc3QgY3NzID0gYHUtdGFiWyR7QVJJQV9DT05UUk9MU309XCIke3RoaXMuaWR9XCJdYDtcbiAgICByZXR1cm4gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKGNzcyk7XG4gIH1cbn07XG52YXIgcXVlcnlXaXRob3V0TmVzdGVkID0gKHRhZywgc2VsZikgPT4gc2VsZi5xdWVyeVNlbGVjdG9yQWxsKGAke3RhZ306bm90KDpzY29wZSB1LXRhYnBhbmVsICR7dGFnfSlgKTtcbnZhciBnZXRQYW5lbCA9ICh0YWIsIHBhbmVsKSA9PiB7XG4gIGNvbnN0IGlkMiA9IGF0dHIodGFiLCBBUklBX0NPTlRST0xTKSB8fCB1c2VJZChwYW5lbCk7XG4gIGNvbnN0IGVsID0gZ2V0Um9vdCh0YWIpLmdldEVsZW1lbnRCeUlkKGlkMik7XG4gIHJldHVybiAoZWwgPT0gbnVsbCA/IHZvaWQgMCA6IGVsLm5vZGVOYW1lKSA9PT0gXCJVLVRBQlBBTkVMXCIgPyBlbCA6IG51bGw7XG59O1xudmFyIGdldFNlbGVjdGVkSW5kZXggPSAodGFicykgPT4gWy4uLnRhYnNdLmZpbmRJbmRleCgodGFiKSA9PiBhdHRyKHRhYiwgQVJJQV9TRUxFQ1RFRCkgPT09IFwidHJ1ZVwiKTtcbnZhciBzZXRTZWxlY3RlZCA9ICh0YWIpID0+IHRhYiAmJiBhdHRyKHRhYiwgXCJhcmlhLXNlbGVjdGVkXCIsIFwidHJ1ZVwiKTtcbnZhciBpc0ZvY3VzYWJsZSA9IChlbCkgPT4gZWwgaW5zdGFuY2VvZiBFbGVtZW50ICYmICFlbC5tYXRjaGVzKCc6ZGlzYWJsZWQsW3RhYmluZGV4Xj1cIi1cIl0nKSAmJiBlbC5tYXRjaGVzKFxuICBgW2NvbnRlbnRlZGl0YWJsZV0sW2NvbnRyb2xzXSxbaHJlZl0sW3RhYmluZGV4XSxpbnB1dDpub3QoW3R5cGU9XCJoaWRkZW5cIl0pLHNlbGVjdCx0ZXh0YXJlYSxidXR0b24sc3VtbWFyeSxpZnJhbWVgXG4pO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJzXCIsIFVIVE1MVGFic0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJsaXN0XCIsIFVIVE1MVGFiTGlzdEVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJcIiwgVUhUTUxUYWJFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFicGFuZWxcIiwgVUhUTUxUYWJQYW5lbEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTFRhYkVsZW1lbnQsIFVIVE1MVGFiTGlzdEVsZW1lbnQsIFVIVE1MVGFiUGFuZWxFbGVtZW50LCBVSFRNTFRhYnNFbGVtZW50IH07XG4iLCJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5cbi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfRklSRUZPWCA9IElTX0JST1dTRVIgJiYgL2ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIEZPQ1VTX09VVExJTkUgPSBcIm91dGxpbmU6IDFweCBkb3R0ZWQ7IG91dGxpbmU6IDVweCBhdXRvIEhpZ2hsaWdodDsgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2JzZXJ2ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgbXV0YXRpb25PYnNlcnZlciA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHJldHVybiBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICB0cnkge1xuICAgIG9ic2VydmVycy5nZXQoZWxlbWVudCkuZGlzY29ubmVjdCgpO1xuICAgIG9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQyLCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0MikgZWwudGV4dENvbnRlbnQgPSB0ZXh0MjtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIExJVkU7XG52YXIgTElWRV9TUl9GSVggPSAwO1xudmFyIHNwZWFrID0gKHRleHQyKSA9PiB7XG4gIGlmICghTElWRSkge1xuICAgIExJVkUgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIExJVkUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246Zml4ZWQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXBcIjtcbiAgICBhdHRyKExJVkUsIFwiYXJpYS1saXZlXCIsIFwiYXNzZXJ0aXZlXCIpO1xuICB9XG4gIGlmICghTElWRS5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoTElWRSk7XG4gIGlmICh0ZXh0MikgTElWRS50ZXh0Q29udGVudCA9IGAke3RleHQyfSR7TElWRV9TUl9GSVgrKyAlIDIgPyBcIlxceEEwXCIgOiBcIlwifWA7XG59O1xudmFyIHNldFZhbHVlID0gKGlucHV0LCBkYXRhLCB0eXBlID0gXCJcIikgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlLCBkYXRhLCBpbnB1dFR5cGU6IHR5cGUgfTtcbiAgY29uc3QgcHJvdG8gPSBIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImJlZm9yZWlucHV0XCIsIGV2ZW50KSk7XG4gIChfYiA9IChfYTIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBcInZhbHVlXCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoaW5wdXQsIGRhdGEpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiaW5wdXRcIiwgZXZlbnQpKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbn07XG5cbi8vIHUtY29tYm9ib3gudHNcbnZhciBJU19QUkVTUyA9IGZhbHNlO1xudmFyIEVWRU5UUyA9IFwiYmVmb3JlaW5wdXQsYmx1cixmb2N1cyxjbGljayxpbnB1dCxrZXlkb3duLG1vdXNlZG93bixtb3VzZXVwXCI7XG52YXIgRVZFTlRfT05DRSA9IHsgb25jZTogdHJ1ZSwgcGFzc2l2ZTogdHJ1ZSB9O1xudmFyIElTX0ZJUkVGT1hfTUFDID0gSVNfRklSRUZPWCAmJiAhSVNfQU5EUk9JRDtcbnZhciBJU19NT0JJTEUgPSBJU19BTkRST0lEIHx8IElTX0lPUztcbnZhciBGQUxTRSA9IFwiZmFsc2VcIjtcbnZhciBDTElDSyA9IFwiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0XCI7XG52YXIgVEVYVFMgPSB7XG4gIGFkZGVkOiBcIkFkZGVkXCIsXG4gIGVtcHR5OiBcIk5vIHNlbGVjdGVkXCIsXG4gIGZvdW5kOiBcIk5hdmlnYXRlIGxlZnQgdG8gZmluZCAlZCBzZWxlY3RlZFwiLFxuICBpbnZhbGlkOiBcIkludmFsaWQgdmFsdWVcIixcbiAgb2Y6IFwib2ZcIixcbiAgcmVtb3ZlOiBcIlByZXNzIHRvIHJlbW92ZVwiLFxuICByZW1vdmVkOiBcIlJlbW92ZWRcIlxufTtcbnZhciBVSFRNTENvbWJvYm94RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9zcGVhayA9IFwiXCI7XG4gICAgdGhpcy5fdGV4dHMgPSBfX3NwcmVhZFZhbHVlcyh7fSwgVEVYVFMpO1xuICAgIHRoaXMuX3ZhbHVlID0gXCJcIjtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAgICAgLy8gQ29udGVudCBzbG90XG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGA6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jazsgY3Vyc29yOiBwb2ludGVyOyAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCkgfSAvKiBNdXN0IGJlIGRpc3BsYXkgYmxvY2sgaW4gU2FmYXJpIHRvIGFsbG93IGZvY3VzIGluc2lkZSAqL1xuXHRcdFx0XHQ6aG9zdCg6bm90KFtkYXRhLW11bHRpcGxlXSkpIDo6c2xvdHRlZChkYXRhKSxcblx0XHRcdFx0Omhvc3QoW2RhdGEtbXVsdGlwbGU9XCJmYWxzZVwiXSkgOjpzbG90dGVkKGRhdGEpIHsgZGlzcGxheTogbm9uZSB9IC8qIEhpZGUgZGF0YSBpZiBub3QgbXVsdGlwbGUgKi9cblx0XHRcdFx0OjpzbG90dGVkKGlucHV0W2lucHV0bW9kZT1cIm5vbmVcIl0pIHsgb3V0bGluZTogbm9uZSB9IC8qIEhpZGUgdGVtcG9yYXJ5IGZvdWNzIG91dGxpbmUgZmxhc2ggKi9cblx0XHRcdFx0OjpzbG90dGVkKGRlbCkgeyB0ZXh0LWRlY29yYXRpb246IG5vbmUgfVxuXHRcdFx0XHQ6OnNsb3R0ZWQoZGF0YTpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcG9pbnRlci1ldmVudHM6IG5vbmUgfVxuICAgICAgICA6OnNsb3R0ZWQoZGF0YSk6OmFmdGVyIHsgY29udGVudDogJ1xcXFwwMEQ3JzsgY29udGVudDogJ1xcXFwwMEQ3JyAvICcnOyBwYWRkaW5nLWlubGluZTogLjVjaDsgcG9pbnRlci1ldmVudHM6IGF1dG8gfVxuICAgICAgICA6OnNsb3R0ZWQoZGF0YTpmb2N1cykgeyAke0ZPQ1VTX09VVExJTkV9IH1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuICAvLyBMb2NhbGx5IHN0b3JlIHZhbHVlIHRvIHN0b3JlIHZhbHVlIGJlZm9yZSBpbnB1dC1jbGlja1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoVEVYVFMpLm1hcCgoa2V5KSA9PiBgZGF0YS1zci0ke2tleX1gKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLl9yb290ID0gZ2V0Um9vdCh0aGlzKTtcbiAgICBvbih0aGlzLCBFVkVOVFMsIHRoaXMsIHRydWUpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgeyBjaGlsZExpc3Q6IHRydWUgfSk7XG4gICAgc2V0VGltZW91dChyZW5kZXIsIDAsIHRoaXMpO1xuICAgIHNldFRpbWVvdXQoc3luY0lucHV0VmFsdWUsIDAsIHRoaXMpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBfLCB2YWwpIHtcbiAgICBjb25zdCB0ZXh0MiA9IHByb3Auc3BsaXQoXCJkYXRhLXNyLVwiKVsxXTtcbiAgICBpZiAoVEVYVFNbdGV4dDJdKSB0aGlzLl90ZXh0c1t0ZXh0Ml0gPSB2YWwgfHwgVEVYVFNbdGV4dDJdO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIG9mZih0aGlzLCBFVkVOVFMsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fY2xlYXIgPSB0aGlzLl9mb2N1cyA9IHRoaXMuX2NvbnRyb2wgPSB2b2lkIDA7XG4gICAgdGhpcy5fbGlzdCA9IHRoaXMuX29wdGlvbnMgPSB0aGlzLl9yb290ID0gdm9pZCAwO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJlZm9yZWlucHV0XCIpIHRoaXMuX3ZhbHVlID0gKHRhcmdldCA9PSBudWxsID8gdm9pZCAwIDogdGFyZ2V0LnZhbHVlKSB8fCBcIlwiO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJsdXJcIikgb25CbHVyKHRoaXMpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImZvY3VzXCIpIG9uRm9jdXModGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImlucHV0XCIpIG9uSW5wdXQodGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgb25LZXlEb3duKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgSVNfUFJFU1MgPSB0aGlzLmNvbnRhaW5zKHRhcmdldCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwibW91c2V1cFwiKSBJU19QUkVTUyA9IGZhbHNlO1xuICAgIGlmIChldmVudC50eXBlID09PSBcIm11dGF0aW9uXCIpIHJlbmRlcih0aGlzLCBldmVudCk7XG4gIH1cbiAgZ2V0IG11bHRpcGxlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gYXR0cih0aGlzLCBcImRhdGEtbXVsdGlwbGVcIikpICE9IG51bGwgPyBfYTIgOiBGQUxTRSkgIT09IEZBTFNFO1xuICB9XG4gIHNldCBtdWx0aXBsZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJkYXRhLW11bHRpcGxlXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBjcmVhdGFibGUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSBhdHRyKHRoaXMsIFwiZGF0YS1jcmVhdGFibGVcIikpICE9IG51bGwgPyBfYTIgOiBGQUxTRSkgIT09IEZBTFNFO1xuICB9XG4gIHNldCBjcmVhdGFibGUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwiZGF0YS1jcmVhdGFibGVcIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IGNvbnRyb2woKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpXG4gICAgICB0aGlzLl9jb250cm9sID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2w7XG4gIH1cbiAgZ2V0IGxpc3QoKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fbGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpXG4gICAgICB0aGlzLl9saXN0ID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwidS1kYXRhbGlzdCxkYXRhbGlzdFwiKTtcbiAgICByZXR1cm4gdGhpcy5fbGlzdDtcbiAgfVxuICBnZXQgY2xlYXIoKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fY2xlYXIpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKSB0aGlzLl9jbGVhciA9IHRoaXMucXVlcnlTZWxlY3RvcihcImRlbFwiKTtcbiAgICByZXR1cm4gdGhpcy5fY2xlYXI7XG4gIH1cbiAgZ2V0IGl0ZW1zKCkge1xuICAgIGlmICghdGhpcy5faXRlbXMpIHRoaXMuX2l0ZW1zID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRhdGFcIik7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHZhciBfYTIsIF9iO1xuICAgIGlmICghdGhpcy5fb3B0aW9ucykge1xuICAgICAgY29uc3QgdGFnID0gKChfYTIgPSB0aGlzLmxpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIubm9kZU5hbWUpID09PSBcIlUtREFUQUxJU1RcIiA/IFwidS1vcHRpb25cIiA6IFwib3B0aW9uXCI7XG4gICAgICB0aGlzLl9vcHRpb25zID0gKF9iID0gdGhpcy5saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cbiAgZ2V0IHZhbHVlcygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuaXRlbXNdLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSk7XG4gIH1cbn07XG52YXIgdGV4dCA9IChlbCkgPT4ge1xuICB2YXIgX2EyO1xuICByZXR1cm4gKChfYTIgPSBlbCA9PSBudWxsID8gdm9pZCAwIDogZWwudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xufTtcbnZhciBpc0RhdGEgPSAoZWwpID0+IGVsIGluc3RhbmNlb2YgSFRNTERhdGFFbGVtZW50O1xudmFyIHJlbmRlciA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF9mb2N1cywgX3RleHRzLCBpdGVtcywgY29udHJvbCwgbGlzdCwgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGxldCBsYWJlbCA9IGAke3RleHQoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wubGFiZWxzKSA9PSBudWxsID8gdm9pZCAwIDogX2EyWzBdKX0sICR7bXVsdGlwbGUgPyBpdGVtcy5sZW5ndGggPyBfdGV4dHMuZm91bmQucmVwbGFjZShcIiVkXCIsIGAke2l0ZW1zLmxlbmd0aH1gKSA6IF90ZXh0cy5lbXB0eSA6IFwiXCJ9YDtcbiAgY29uc3QgZWRpdHMgPSBbXTtcbiAgZm9yIChjb25zdCB7IGFkZGVkTm9kZXMsIHJlbW92ZWROb2RlcyB9IG9mIChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQuZGV0YWlsKSB8fCBbXSkge1xuICAgIGZvciAoY29uc3QgZWwgb2YgYWRkZWROb2RlcykgaWYgKGlzRGF0YShlbCkpIGVkaXRzLnVuc2hpZnQoZWwpO1xuICAgIGZvciAoY29uc3QgZWwgb2YgcmVtb3ZlZE5vZGVzKSBpZiAoaXNEYXRhKGVsKSkgZWRpdHMucHVzaChlbCk7XG4gIH1cbiAgY29uc3Qgc2hvdWxkQW5ub3VuY2UgPSBtdWx0aXBsZSA/IGVkaXRzLmxlbmd0aCA9PT0gMSA6IGVkaXRzWzBdID09PSBfZm9jdXM7XG4gIGlmIChfZm9jdXMgJiYgY29udHJvbCAmJiBzaG91bGRBbm5vdW5jZSkge1xuICAgIGNvbnN0IGlucHV0TW9kZSA9IGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIik7XG4gICAgY29uc3QgbmV4dEZvY3VzID0gaXNEYXRhKF9mb2N1cykgPyBjb250cm9sIDogX2ZvY3VzO1xuICAgIHNlbGYuX3NwZWFrID0gYCR7X3RleHRzW2VkaXRzWzBdLmlzQ29ubmVjdGVkID8gXCJhZGRlZFwiIDogXCJyZW1vdmVkXCJdfSAke3RleHQoZWRpdHNbMF0pfSwgYDtcbiAgICBpZiAoSVNfTU9CSUxFIHx8IF9mb2N1cyA9PT0gY29udHJvbCkgc3BlYWsoc2VsZi5fc3BlYWspO1xuICAgIGlmIChjb250cm9sICE9PSBuZXh0Rm9jdXMpIHtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJhcmlhLWV4cGFuZGVkXCIsIG51bGwpO1xuICAgICAgYXR0cihjb250cm9sLCBcImlucHV0bW9kZVwiLCBcIm5vbmVcIik7XG4gICAgICBsYWJlbCA9IFwiXFx4QTBcIjtcbiAgICAgIGNvbnRyb2wuZm9jdXMoKTtcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB2YXIgX2EzO1xuICAgICAgYXR0cihjb250cm9sLCBcImFyaWEtZXhwYW5kZWRcIiwgXCJ0cnVlXCIpO1xuICAgICAgYXR0cihjb250cm9sLCBcImlucHV0bW9kZVwiLCBpbnB1dE1vZGUpO1xuICAgICAgKF9hMyA9IG5leHRGb2N1cyA9PSBudWxsID8gdm9pZCAwIDogbmV4dEZvY3VzLmZvY3VzKSA9PSBudWxsID8gdm9pZCAwIDogX2EzLmNhbGwobmV4dEZvY3VzKTtcbiAgICAgIHNlbGYuX3NwZWFrID0gXCJcIjtcbiAgICAgIGlmIChJU19GSVJFRk9YX01BQykgb24oc2VsZiwgXCJibHVyXCIsICgpID0+IHJlbmRlcihzZWxmKSwgRVZFTlRfT05DRSk7XG4gICAgICBlbHNlIHNldFRpbWVvdXQocmVuZGVyLCAxMDAsIHNlbGYpO1xuICAgIH0sIDEwMCk7XG4gIH1cbiAgbGV0IGlkeCA9IDA7XG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IGxhYmVsMiA9IHRleHQoaXRlbSk7XG4gICAgY29uc3QgdmFsdWUgPSBpdGVtLnZhbHVlIHx8IGxhYmVsMjtcbiAgICBjb25zdCBhcmlhID0gYCR7c2VsZi5fc3BlYWt9JHtsYWJlbDJ9LCAke190ZXh0cy5yZW1vdmV9LCAkeysraWR4fSAke190ZXh0cy5vZn0gJHtpdGVtcy5sZW5ndGh9YDtcbiAgICBhdHRyKGl0ZW0sIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgICBhdHRyKGl0ZW0sIFwidmFsdWVcIiwgdmFsdWUpO1xuICAgIGF0dHIoaXRlbSwgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuICAgIGF0dHIoaXRlbSwgXCJhcmlhLWxhYmVsXCIsIGFyaWEpO1xuICB9XG4gIGlmICghbXVsdGlwbGUgJiYgaWR4ID4gMSlcbiAgICBjb25zb2xlLndhcm4oXCJ1LWNvbWJvYm94OiBNdWx0aXBsZSA8ZGF0YT4gZm91bmQgaW4gc2luZ2xlIG1vZGUuXCIpO1xuICBpZiAobGlzdCkgYXR0cihsaXN0LCBcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCIsIGAke211bHRpcGxlfWApO1xuICBpZiAoY29udHJvbCkgYXR0cihjb250cm9sLCBcImxpc3RcIiwgdXNlSWQobGlzdCkpO1xuICBpZiAoY29udHJvbCkgYXR0cihjb250cm9sLCBcImFyaWEtbGFiZWxcIiwgYCR7c2VsZi5fc3BlYWt9JHtsYWJlbH1gKTtcbiAgY29uc3Qgc2VsZWN0ID0gc2VsZi5xdWVyeVNlbGVjdG9yKFwic2VsZWN0XCIpO1xuICBpZiAoc2VsZWN0KSBzZWxlY3QubXVsdGlwbGUgPSBtdWx0aXBsZTtcbiAgaWYgKHNlbGVjdCkgc2VsZWN0LnRleHRDb250ZW50ID0gXCJcIjtcbiAgc2VsZWN0ID09IG51bGwgPyB2b2lkIDAgOiBzZWxlY3QuYXBwZW5kKC4uLnNlbGYudmFsdWVzLm1hcCgodmFsKSA9PiBuZXcgT3B0aW9uKHZhbCwgdmFsLCB0cnVlLCB0cnVlKSkpO1xuICBzeW5jQ2xlYXJXaXRoSW5wdXQoc2VsZik7XG4gIHN5bmNPcHRpb25zV2l0aEl0ZW1zKHNlbGYpO1xufTtcbnZhciBzeW5jQ2xlYXJXaXRoSW5wdXQgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoc2VsZi5jbGVhcikgYXR0cihzZWxmLmNsZWFyLCBcInJvbGVcIiwgXCJidXR0b25cIik7XG4gIGlmIChzZWxmLmNsZWFyKSBzZWxmLmNsZWFyLmhpZGRlbiA9ICEoKF9hMiA9IHNlbGYuY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi52YWx1ZSk7XG59O1xudmFyIHN5bmNPcHRpb25zV2l0aEl0ZW1zID0gKHNlbGYpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgeyBfc3BlYWssIG9wdGlvbnMgPSBbXSwgdmFsdWVzIH0gPSBzZWxmO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsdWUgPSAoX2EyID0gYXR0cihvcHQsIFwidmFsdWVcIikpICE9IG51bGwgPyBfYTIgOiB0ZXh0KG9wdCk7XG4gICAgYXR0cihvcHQsIFwiYXJpYS1sYWJlbFwiLCBfc3BlYWsgPyBgJHtfc3BlYWt9JHt0ZXh0KG9wdCl9YCA6IG51bGwpO1xuICAgIGF0dHIob3B0LCBcInNlbGVjdGVkXCIsIHZhbHVlcy5pbmNsdWRlcyh2YWx1ZSkgPyBcIlwiIDogbnVsbCk7XG4gIH1cbn07XG52YXIgc3luY0lucHV0VmFsdWUgPSAoc2VsZikgPT4ge1xuICBjb25zdCB7IG11bHRpcGxlLCBjb250cm9sLCBpdGVtcyB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSB0ZXh0KGl0ZW1zWzBdKTtcbiAgaWYgKCFtdWx0aXBsZSAmJiBjb250cm9sICYmIHZhbHVlICE9PSBjb250cm9sLnZhbHVlKVxuICAgIHNldFZhbHVlKGNvbnRyb2wsIHZhbHVlLCBcImluc2VydFRleHRcIik7XG59O1xudmFyIGRpc3BhdGNoTWF0Y2ggPSAoc2VsZiwgc3luYyA9IHRydWUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgeyBfdGV4dHMsIG9wdGlvbnMgPSBbXSwgY3JlYXRhYmxlLCBjb250cm9sLCBpdGVtcywgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gKChfYTIgPSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKSkgfHwgXCJcIjtcbiAgY29uc3QgcXVlcnkgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpIHx8IG51bGw7XG4gIGxldCBtYXRjaCA9IFsuLi5vcHRpb25zXS5maW5kKChvKSA9PiBvLmxhYmVsLnRyaW0oKS50b0xvd2VyQ2FzZSgpID09PSBxdWVyeSk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IG1hdGNoIH07XG4gIGlmIChzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiYmVmb3JlbWF0Y2hcIiwgZXZlbnQpKSlcbiAgICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKSBvcHQuc2VsZWN0ZWQgPSBvcHQgPT09IG1hdGNoO1xuICBtYXRjaCA9IFsuLi5vcHRpb25zXS5maW5kKChvKSA9PiBvLnNlbGVjdGVkKTtcbiAgc3luY09wdGlvbnNXaXRoSXRlbXMoc2VsZik7XG4gIGlmIChtYXRjaCkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIG1hdGNoLCBmYWxzZSwgISFzeW5jKTtcbiAgaWYgKGNyZWF0YWJsZSAmJiB2YWx1ZSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIHsgdmFsdWUgfSwgZmFsc2UpO1xuICBpZiAoIW11bHRpcGxlICYmIGl0ZW1zWzBdKSBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtc1swXSwgdHJ1ZSwgZmFsc2UpO1xuICBpZiAoc3luYykgc3BlYWsoX3RleHRzLmludmFsaWQpO1xufTtcbnZhciBkaXNwYXRjaENoYW5nZSA9IChzZWxmLCBpdGVtLCByZW1vdmFibGUgPSB0cnVlLCBzeW5jID0gdHJ1ZSkgPT4ge1xuICBjb25zdCB7IGNvbnRyb2wsIGl0ZW1zLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgYWRkID0gY3JlYXRlRWxlbWVudChcImRhdGFcIiwgaXRlbS5sYWJlbCB8fCBpdGVtLnZhbHVlLCB7XG4gICAgdmFsdWU6IGl0ZW0udmFsdWVcbiAgfSk7XG4gIGNvbnN0IHJlbW92ZSA9IFsuLi5pdGVtc10uZmluZCgoaSkgPT4gaS52YWx1ZSA9PT0gaXRlbS52YWx1ZSk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IHJlbW92ZSB8fCBhZGQgfTtcbiAgY29uc3Qgc2tpcCA9IHJlbW92ZSAmJiAhcmVtb3ZhYmxlO1xuICBpZiAoIXNraXAgJiYgc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImJlZm9yZWNoYW5nZVwiLCBldmVudCkpKSB7XG4gICAgaWYgKCFtdWx0aXBsZSkgZm9yIChjb25zdCBpdGVtMiBvZiBbLi4uaXRlbXNdKSBpdGVtMi5yZW1vdmUoKTtcbiAgICBpZiAocmVtb3ZlKSByZW1vdmUucmVtb3ZlKCk7XG4gICAgZWxzZSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmluc2VydEFkamFjZW50RWxlbWVudChcImJlZm9yZWJlZ2luXCIsIGFkZCk7XG4gICAgc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImFmdGVyY2hhbmdlXCIsIGV2ZW50KSk7XG4gIH1cbiAgaWYgKHN5bmMpIHNldFRpbWVvdXQoc3luY0lucHV0VmFsdWUsIDEwLCBzZWxmKTtcbn07XG52YXIgb25Gb2N1cyA9IChzZWxmLCB7IHRhcmdldCB9KSA9PiB7XG4gIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgc2VsZi5fZm9jdXMgPSB0YXJnZXQ7XG4gIHNwZWFrKCk7XG59O1xudmFyIG9uQmx1ciA9IChzZWxmKSA9PiBJU19QUkVTUyB8fCBzZXRUaW1lb3V0KG9uQmx1cnJlZCwgMCwgc2VsZik7XG52YXIgb25CbHVycmVkID0gKHNlbGYpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9mb2N1cyB8fCBzZWxmLmNvbnRhaW5zKChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpKSByZXR1cm47XG4gIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIGNvbnN0IHsgY2xpZW50WDogeCwgY2xpZW50WTogeSwgdGFyZ2V0IH0gPSBldmVudDtcbiAgY29uc3QgeyBjbGVhciwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGlmIChjbGVhciA9PSBudWxsID8gdm9pZCAwIDogY2xlYXIuY29udGFpbnModGFyZ2V0KSkge1xuICAgIGlmIChjb250cm9sKSBzZXRWYWx1ZShjb250cm9sLCBcIlwiLCBcImRlbGV0ZUNvbnRlbnRCYWNrd2FyZFwiKTtcbiAgICByZXR1cm4gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpO1xuICB9XG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChpdGVtLmNvbnRhaW5zKHRhcmdldCkpIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtKTtcbiAgICBpZiAoeSA+PSB0b3AgJiYgeSA8PSBib3R0b20gJiYgeCA+PSBsZWZ0ICYmIHggPD0gcmlnaHQpIHJldHVybiBpdGVtLmZvY3VzKCk7XG4gIH1cbiAgaWYgKHRhcmdldCA9PT0gc2VsZikgY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgb3B0aW9ucyA9IFtdLCBjb250cm9sLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBpc0NsaWNrID0gZXZlbnQgaW5zdGFuY2VvZiBJbnB1dEV2ZW50ID8gIWV2ZW50LmlucHV0VHlwZSB8fCBldmVudC5pbnB1dFR5cGUgPT09IENMSUNLIDogISF2YWx1ZTtcbiAgaWYgKGlzQ2xpY2spIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoY29udHJvbCkgY29udHJvbC52YWx1ZSA9IHNlbGYuX3ZhbHVlO1xuICAgIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpXG4gICAgICBpZiAob3B0LnZhbHVlICYmIG9wdC52YWx1ZSA9PT0gdmFsdWUpXG4gICAgICAgIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBvcHQsIG11bHRpcGxlKTtcbiAgfSBlbHNlIGlmICghbXVsdGlwbGUpIGRpc3BhdGNoTWF0Y2goc2VsZiwgZmFsc2UpO1xuICBzeW5jQ2xlYXJXaXRoSW5wdXQoc2VsZik7XG59O1xudmFyIG9uS2V5RG93biA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSkgcmV0dXJuO1xuICBjb25zdCB7IGNsZWFyLCBjb250cm9sLCBpdGVtcyB9ID0gc2VsZjtcbiAgY29uc3QgeyBrZXksIHJlcGVhdCwgdGFyZ2V0IH0gPSBldmVudDtcbiAgY29uc3QgaXNDb250cm9sID0gY29udHJvbCAmJiBjb250cm9sID09PSB0YXJnZXQ7XG4gIGNvbnN0IGluVGV4dCA9IGlzQ29udHJvbCAmJiAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5zZWxlY3Rpb25FbmQpO1xuICBsZXQgaW5kZXggPSBpc0NvbnRyb2wgPyBpdGVtcy5sZW5ndGggOiBbLi4uaXRlbXNdLmluZGV4T2YodGFyZ2V0KTtcbiAgaWYgKGlzQ29udHJvbCAmJiBrZXkgPT09IFwiVGFiXCIgJiYgY2xlYXIgJiYgIWNsZWFyLmhpZGRlbikge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY2xlYXIudGFiSW5kZXggPSAtMTtcbiAgICBjbGVhci5mb2N1cygpO1xuICAgIG9uKGNsZWFyLCBcImJsdXJcIiwgKCkgPT4gYXR0cihjbGVhciwgXCJ0YWJpbmRleFwiLCBudWxsKSwgRVZFTlRfT05DRSk7XG4gIH1cbiAgaWYgKCFpc0NvbnRyb2wgJiYgYXNCdXR0b24oZXZlbnQpIHx8IGluZGV4ID09PSAtMSkgcmV0dXJuO1xuICBpZiAoa2V5ID09PSBcIkFycm93UmlnaHRcIiAmJiAhaXNDb250cm9sKSBpbmRleCArPSAxO1xuICBlbHNlIGlmIChrZXkgPT09IFwiQXJyb3dMZWZ0XCIgJiYgIWluVGV4dCkgaW5kZXggLT0gMTtcbiAgZWxzZSBpZiAoa2V5ID09PSBcIkVudGVyXCIgJiYgaXNDb250cm9sKSB7XG4gICAgY29uc3QgZm9ybSA9IGF0dHIoY29udHJvbCwgXCJmb3JtXCIpO1xuICAgIGF0dHIoY29udHJvbCwgXCJmb3JtXCIsIFwiI1wiKTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gYXR0cihjb250cm9sLCBcImZvcm1cIiwgZm9ybSkpO1xuICAgIHJldHVybiBkaXNwYXRjaE1hdGNoKHNlbGYpO1xuICB9IGVsc2UgaWYgKChrZXkgPT09IFwiQmFja3NwYWNlXCIgfHwga2V5ID09PSBcIkRlbGV0ZVwiKSAmJiAhaW5UZXh0KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoIXJlcGVhdCAmJiBpdGVtc1tpbmRleF0pIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtc1tpbmRleF0pO1xuICAgIGlmIChpc0NvbnRyb2wpIGluZGV4IC09IDE7XG4gIH0gZWxzZSByZXR1cm4gaXNDb250cm9sIHx8IChjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCkpO1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAoX2EyID0gaXRlbXNbTWF0aC5tYXgoMCwgaW5kZXgpXSB8fCBjb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1jb21ib2JveFwiLCBVSFRNTENvbWJvYm94RWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MQ29tYm9ib3hFbGVtZW50IH07XG4iLCJpbXBvcnQgeyBjbHN4IH0gZnJvbSBcImNsc3hcIjtcblxuZXhwb3J0IGNvbnN0IFFVSUNLX0VWRU5UID0geyBjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG5leHBvcnQgY29uc3QgSVNfQlJPV1NFUiA9XG5cdHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiO1xuXG4vLyBUT0RPOiBEb2N1bWVudGF0aW9uIGZvciBwcmV0dHlOdW1iZXJcbmxldCBJTlRMX05VTTogSW50bC5OdW1iZXJGb3JtYXQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcHJldHR5TnVtYmVyKG51bWJlcjogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdGlmICghSU5UTF9OVU0pXG5cdFx0SU5UTF9OVU0gPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXG5cdFx0XHQoSVNfQlJPV1NFUiAmJiBhdHRyKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgXCJsYW5nXCIpKSB8fCBcIm5vXCIsXG5cdFx0KTtcblx0cmV0dXJuIElOVExfTlVNLmZvcm1hdChOdW1iZXIobnVtYmVyKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZTxUIGV4dGVuZHMgdW5rbm93bltdPihcblx0Y2FsbGJhY2s6ICguLi5hcmdzOiBUKSA9PiB2b2lkLFxuXHRkZWxheTogbnVtYmVyLFxuKSB7XG5cdGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cblx0cmV0dXJuICguLi5hcmdzOiBUKSA9PiB7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0XHR0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gY2FsbGJhY2soLi4uYXJncyksIGRlbGF5KTtcblx0fTtcbn1cblxuLyoqXG4gKiBhdHRyXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IGdldCwgc2V0IGFuZCByZW1vdmUgYXR0cmlidXRlc1xuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIG5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lIHRvIGdldCwgc2V0IG9yIHJlbW92ZSwgb3IgYSBvYmplY3QgdG8gc2V0IG11bHRpcGxlIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB2YWx1ZSBBIHZhbGlkIGF0dHJpYnV0ZSB2YWx1ZSBvciBudWxsIHRvIHJlbW92ZSBhdHRyaWJ1dGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dHIoXG5cdGVsOiBFbGVtZW50LFxuXHRuYW1lOiBzdHJpbmcsXG5cdHZhbHVlPzogc3RyaW5nIHwgbnVsbCxcbik6IHN0cmluZyB8IG51bGwge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKSA/PyBudWxsOyAvLyBGYWxsYmFjayB0byBudWxsIG9ubHkgaWYgZWwgaXMgdW5kZWZpbmVkXG5cdGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuXHRyZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiB1c2VJZFxuICogQHJldHVybiBBIGdlbmVyYXRlZCB1bmlxdWUgSURcbiAqL1xubGV0IGlkID0gMDtcbmNvbnN0IFVVSUQgPSBgJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDUpfWA7XG5leHBvcnQgZnVuY3Rpb24gdXNlSWQoZWw6IEVsZW1lbnQpIHtcblx0aWYgKCFlbC5pZCkgZWwuaWQgPSBgJHtVVUlEfSR7KytpZH1gO1xuXHRyZXR1cm4gZWwuaWQ7XG59XG5cbi8vIEludGVybmFsIGhlbHBlciBmb3Igb24gLyBvZmZcbmNvbnN0IGV2ZW50cyA9IChcblx0YWN0aW9uOiBcImFkZFwiIHwgXCJyZW1vdmVcIixcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0cmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj4sXG4pOiB2b2lkID0+IHtcblx0Zm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG5cdFx0cmVzdFswXSA9IHR5cGU7XG5cdFx0ZWxlbWVudFtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdKC4uLnJlc3QpO1xuXHR9XG59O1xuXG4vKipcbiAqIG9uXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9uID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG5cbi8qKlxuICogb2ZmXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9mZiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xuXG4vKipcbiAqIFNjcm9sbGVyIHRhcmdlcyBoZWxwaW5nIGFuY2hvclBvc2l0aW9uXG4gKi9cbmNvbnN0IFNDUk9MTEVSID0gSVNfQlJPV1NFUiA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikgOiBudWxsOyAvLyBVc2VkIHRvIGVuc3VyZSB3ZSBoYXZlIHNjcm9sbGFiaWxpdHkgdW5kZXJcbmNvbnN0IFRBUkdFVFMgPSBuZXcgTWFwPEVsZW1lbnQsICgpID0+IHZvaWQ+KCk7IC8vIFN0b3JlIGN1cnJlbnQgb3BlbiBwb3BwZXJzIGFuZCB0aGVpciB1cGRhdGUgZnVuY3Rpb25zXG5jb25zdCBUQVJHRVRTX1VQREFURSA9ICgpID0+IHtcblx0Zm9yIChjb25zdCBbXywgdXBkYXRlXSBvZiBUQVJHRVRTKSB1cGRhdGUoKTtcbn07XG5cbmlmIChTQ1JPTExFUikge1xuXHRTQ1JPTExFUi5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtwYWRkaW5nOjFweDt0b3A6MDtsZWZ0OjBweFwiO1xuXHRvbih3aW5kb3csIFwibG9hZCxyZXNpemUsc2Nyb2xsXCIsIFRBUkdFVFNfVVBEQVRFLCBRVUlDS19FVkVOVCk7XG59XG5cbi8qKlxuICogYW5jaG9yUG9zaXRpb25cbiAqIEBwYXJhbSB0YXJnZXQgVGhlIEVsZW1lbnQgdG8gcG9zaXRpb25cbiAqIEBwYXJhbSBhbmNob3IgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIGFuY2hvclxuICovXG5jb25zdCBQT1NJVElPTiA9IHsgdG9wOiAwLCByaWdodDogMSwgYm90dG9tOiAyLCBsZWZ0OiAzIH07IC8vIFNwZWVkIHVwIGJ5IHVzaW5nIGEgY29uc3QgbWFwXG5cbmV4cG9ydCBmdW5jdGlvbiBhbmNob3JQb3NpdGlvbihcblx0dGFyZ2V0OiBIVE1MRWxlbWVudCxcblx0YW5jaG9yOiBFbGVtZW50IHwgZmFsc2UsXG5cdHBvc2l0aW9uPzogc3RyaW5nIHwgbnVtYmVyLFxuXHRmb3JjZT86IGJvb2xlYW4sXG4pIHtcblx0aWYgKGFuY2hvciA9PT0gZmFsc2UgfHwgIWFuY2hvci5pc0Nvbm5lY3RlZCB8fCAhdGFyZ2V0LmlzQ29ubmVjdGVkKVxuXHRcdHJldHVybiBUQVJHRVRTLmRlbGV0ZSh0YXJnZXQpOyAvLyBTdG9wIHdhdGNoaW5nIGlmIGFuY2hvciBpcyByZW1vdmVkIGZyb20gRE9NXG5cdGlmICghU0NST0xMRVI/LmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChTQ1JPTExFUiB8fCBcIlwiKTsgLy8gRW5zdXJlIHdlIGhhdmUgdGhlIHNjcm9sbGVyXG5cdGlmICghVEFSR0VUUy5oYXModGFyZ2V0KSkge1xuXHRcdC8vIFNldHVwIG5ldyB0YXJnZXQgb3IgdXBkYXRlIHBvc2l0aW9uXG5cdFx0Y29uc3QgcGxhY2UgPVxuXHRcdFx0UE9TSVRJT05bcG9zaXRpb24gYXMga2V5b2YgdHlwZW9mIFBPU0lUSU9OXSA/PyBQT1NJVElPTi5ib3R0b207IC8vIFVzZSBDU1MgcHJvcGVydHkgdG8gc3RvcmUgcG9zaXRpb24gZm9yIG1vcmUgZmxleGliaWxpdHlcblx0XHRyZXR1cm4gVEFSR0VUUy5zZXQodGFyZ2V0LCAoKSA9PlxuXHRcdFx0YW5jaG9yUG9zaXRpb24odGFyZ2V0LCBhbmNob3IsIHBsYWNlLCBmb3JjZSksXG5cdFx0KS5nZXQodGFyZ2V0KT8uKCk7IC8vIFN0YXJ0IHdhdGNoaW5nIGlmIG5vdCBhbHJlYWR5IHdhdGNoaW5nXG5cdH1cblxuXHRjb25zdCBpc0hUTUxBbmNob3IgPSBhbmNob3IgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDsgLy8gU1ZHIG9yIFhNTCBlbGVtZW50cyBkb2VzIG5vdCBoYXZlIG9mZnNldFdpZHRoIG9yIG9mZnNldEhlaWdodFxuXHRjb25zdCB7IG9mZnNldFdpZHRoOiB0YXJnZXRXLCBvZmZzZXRIZWlnaHQ6IHRhcmdldEggfSA9IHRhcmdldDtcblx0Y29uc3QgYW5jaG9yVyA9IGlzSFRNTEFuY2hvciA/IGFuY2hvci5vZmZzZXRXaWR0aCA6IGFuY2hvci5jbGllbnRXaWR0aDtcblx0Y29uc3QgYW5jaG9ySCA9IGlzSFRNTEFuY2hvciA/IGFuY2hvci5vZmZzZXRIZWlnaHQgOiBhbmNob3IuY2xpZW50SGVpZ2h0O1xuXHRjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCB9ID0gYW5jaG9yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRjb25zdCBhbmNob3JYID0gTWF0aC5yb3VuZChsZWZ0IC0gKGFuY2hvclcgLSB3aWR0aCkgLyAyKTsgLy8gQ29ycmVjdCBmb3IgQ1NTIHRyYW5zZm9ybSBzY2FsZVxuXHRjb25zdCBhbmNob3JZID0gTWF0aC5yb3VuZCh0b3AgLSAoYW5jaG9ySCAtIGhlaWdodCkgLyAyKTsgLy8gQ29ycmVjdCBmb3IgQ1NTIHRyYW5zZm9ybSBzY2FsZVxuXG5cdGNvbnN0IGhhc1NwYWNlTGVmdCA9IGFuY2hvclggLSB0YXJnZXRXID4gMDtcblx0Y29uc3QgaGFzU3BhY2VSaWdodCA9IGFuY2hvclcgKyBhbmNob3JXICsgdGFyZ2V0VyA8IHdpbmRvdy5pbm5lcldpZHRoO1xuXHRjb25zdCBoYXNTcGFjZU92ZXIgPSBhbmNob3JZIC0gdGFyZ2V0SCA+IDA7XG5cdGNvbnN0IGhhc1NwYWNlVW5kZXIgPSBhbmNob3JZICsgYW5jaG9ySCArIHRhcmdldEggPCB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdGNvbnN0IHBvc2l0aW9uUmlnaHQgPVxuXHRcdChwb3NpdGlvbiA9PT0gUE9TSVRJT04ucmlnaHQgJiYgKGZvcmNlIHx8IGhhc1NwYWNlUmlnaHQpKSB8fCAhaGFzU3BhY2VMZWZ0OyAvLyBBbHdheXMgcG9zaXRpb24gcmlnaHQgd2hlbiBubyBoYXNTcGFjZUxlZnQsIGFzIG5vIE9TIHNjcm9sbHMgZnVydGhlciB1cCB0aGFuIDBcblx0Y29uc3QgcG9zaXRpb25VbmRlciA9XG5cdFx0KHBvc2l0aW9uID09PSBQT1NJVElPTi5ib3R0b20gJiYgKGZvcmNlIHx8IGhhc1NwYWNlVW5kZXIpKSB8fCAhaGFzU3BhY2VPdmVyOyAvLyBBbHdheXMgcG9zaXRpb24gdW5kZXIgd2hlbiBubyBoYXNTcGFjZU92ZXIsIGFzIG5vIE9TIHNjcm9sbHMgZnVydGhlciB1cCB0aGFuIDBcblx0Y29uc3QgY2VudGVyWCA9IE1hdGgubWluKFxuXHRcdE1hdGgubWF4KDEwLCBhbmNob3JYIC0gKHRhcmdldFcgLSBhbmNob3JXKSAvIDIpLFxuXHRcdHdpbmRvdy5pbm5lcldpZHRoIC0gdGFyZ2V0VyAtIDEwLFxuXHQpO1xuXHRjb25zdCBjZW50ZXJZID0gTWF0aC5taW4oXG5cdFx0TWF0aC5tYXgoMTAsIGFuY2hvclkgLSAodGFyZ2V0SCAtIGFuY2hvckgpIC8gMiksXG5cdFx0d2luZG93LmlubmVySGVpZ2h0IC0gdGFyZ2V0SCAtIDEwLFxuXHQpO1xuXHRjb25zdCBpc1ZlcnRpY2FsID0gcG9zaXRpb24gPT09IFBPU0lUSU9OLnRvcCB8fCBwb3NpdGlvbiA9PT0gUE9TSVRJT04uYm90dG9tO1xuXG5cdHRhcmdldC5zdHlsZS5sZWZ0ID0gYCR7TWF0aC5yb3VuZChpc1ZlcnRpY2FsID8gY2VudGVyWCA6IHBvc2l0aW9uUmlnaHQgPyBhbmNob3JYICsgYW5jaG9yVyA6IGFuY2hvclggLSB0YXJnZXRXKX1weGA7XG5cdHRhcmdldC5zdHlsZS50b3AgPSBgJHtNYXRoLnJvdW5kKGlzVmVydGljYWwgPyAocG9zaXRpb25VbmRlciA/IGFuY2hvclkgKyBhbmNob3JIIDogYW5jaG9yWSAtIHRhcmdldEgpIDogY2VudGVyWSl9cHhgO1xuXHRTQ1JPTExFUj8uc3R5bGUuc2V0UHJvcGVydHkoXG5cdFx0XCJ0cmFuc2xhdGVcIixcblx0XHRgMHB4ICR7TWF0aC5yb3VuZChwb3NpdGlvblVuZGVyID8gd2luZG93LnNjcm9sbFkgKyBhbmNob3JZICsgYW5jaG9ySCArIHRhcmdldEggKyAzMCA6IDApfXB4YCxcblx0KTtcbn1cblxuLyoqXG4gKiBTcGVlZCB1cCBNdXRhdGlvbk9ic2VydmVyIGJ5IGRlYm91bmNpbmcgYW5kIG9ubHkgcnVubmluZyB3aGVuIHBhZ2UgaXMgdmlzaWJsZVxuICogQHJldHVybiBuZXcgTXV0YWlvbk9ic2VydmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrOiBNdXRhdGlvbkNhbGxiYWNrKSB7XG5cdGxldCBxdWV1ZSA9IDA7XG5cblx0Y29uc3Qgb25GcmFtZSA9ICgpID0+IHNldFRpbWVvdXQob25UaW1lciwgMjAwKTsgLy8gVXNlIGJvdGggcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGFuZCBzZXRUaW1lb3V0IHRvIGRlYm91bmNlIGFuZCBvbmx5IHJ1biB3aGVuIHZpc2libGVcblx0Y29uc3Qgb25UaW1lciA9ICgpID0+IHtcblx0XHRjYWxsYmFjayhbXSwgb2JzZXJ2ZXIpO1xuXHRcdG9ic2VydmVyLnRha2VSZWNvcmRzKCk7IC8vIENsZWFyIHJlY29yZHMgdG8gYXZvaWQgcnVubmluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuXHRcdHF1ZXVlID0gMDtcblx0fTtcblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG5cdFx0aWYgKCFxdWV1ZSkgcXVldWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUob25GcmFtZSk7XG5cdH0pO1xuXG5cdHJldHVybiBvYnNlcnZlcjtcbn1cblxuLyoqXG4gKiBvbk11dGF0aW9uXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IG9ic2VydmUgbXV0YXRpb25zIG9uIGEgc3BlY2lmaWMgY2xhc3MgbmFtZVxuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgY2xhc3MgbmFtZSB0byBvYnNlcnZlXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHJ1biB3aGVuIG11dGF0aW9ucyBhcmUgZGV0ZWN0ZWRcbiAqL1xuY29uc3QgTVVUQVRPUlMgPSBuZXcgV2Vha01hcDxFbGVtZW50LCBBcnJheTwoKSA9PiB2b2lkPj4oKTtcbmV4cG9ydCBjb25zdCBvbk11dGF0aW9uID0gPFQgZXh0ZW5kcyBFbGVtZW50Pihcblx0ZWw6IEVsZW1lbnQsXG5cdGNsYXNzTmFtZTogc3RyaW5nLFxuXHRjYWxsYmFjazogKGVsZW1zOiBIVE1MQ29sbGVjdGlvbk9mPFQ+KSA9PiB2b2lkLFxuKSA9PiB7XG5cdGNvbnN0IGVsZW1zID0gZWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpO1xuXHRjb25zdCBtdXRhdG9yID0gTVVUQVRPUlMuZ2V0KGVsKSB8fCBbXTtcblxuXHRpZiAoIW11dGF0b3IubGVuZ3RoKSB7XG5cdFx0TVVUQVRPUlMuc2V0KGVsLCBtdXRhdG9yKTtcblx0XHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKChfLCBvYnNlcnZlcikgPT4ge1xuXHRcdFx0aWYgKGVsLmlzQ29ubmVjdGVkICYmIG11dGF0b3I/Lmxlbmd0aCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIG11dGF0b3IpIGNhbGxiYWNrKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRNVVRBVE9SUy5kZWxldGUoZWwpO1xuXHRcdFx0fVxuXHRcdH0pLm9ic2VydmUoZWwsIHtcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wiY2xhc3NcIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0c3VidHJlZTogdHJ1ZSxcblx0XHR9KTtcblx0fVxuXHRtdXRhdG9yLnB1c2goKCkgPT4gY2FsbGJhY2soZWxlbXMgYXMgSFRNTENvbGxlY3Rpb25PZjxUPikpO1xufTtcblxuLyoqXG4gKiBvbkxvYWRlZFxuICogQGRlc2NyaXB0aW9uIFJ1bnMgYSBjYWxsYmFjayB3aGVuIHdpbmRvdyBpcyBsb2FkZWQgaW4gYnJvd3NlclxuICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBydW4gd2hlbiB0aGUgcGFnZSBpcyByZWFkeVxuICovXG5leHBvcnQgY29uc3Qgb25Mb2FkZWQgPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcblx0aWYgKCFJU19CUk9XU0VSKSByZXR1cm47XG5cdGNvbnN0IHJ1biA9ICgpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7IC8vIEVuc3VyZSB3ZSBydW4gYWZ0ZXIgYWxsIG90aGVyIGxvYWQgZXZlbnRzXG5cdGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHJ1bigpO1xuXHRlbHNlIG9uKHdpbmRvdywgXCJsb2FkXCIsIHJ1bik7XG59O1xuXG4vKipcbiAqIGlzSW5wdXRMaWtlXG4gKiBAZGVzY3JpcHRpb24gQ2hlY2sgaWYgZWxlbWVudCBpcyBhbiBpbnB1dCBsaWtlIGVsZW1lbnRcbiAqIEBwYXJhbSBlbCBUaGUgZWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBhbiBpbnB1dCBsaWtlIGVsZW1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGlzSW5wdXRMaWtlID0gKGVsOiB1bmtub3duKTogZWwgaXMgSFRNTElucHV0RWxlbWVudCA9PlxuXHRlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG5cdFwidmFsaWRpdHlcIiBpbiBlbCAmJlxuXHQhKGVsIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpO1xuXG4vKipcbiAqIHRvQ3VzdG9tRWxlbWVudFByb3BzXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IGNvbnZlcnQgcHJvcHMgdG8gY3VzdG9tIGVsZW1lbnQgYXR0cmlidXRlc1xuICogQHBhcmFtIHByb3BzIFRoZSBwcm9wcyB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIHByb3BzXG4gKi9cbmV4cG9ydCBjb25zdCB0b0N1c3RvbUVsZW1lbnRQcm9wcyA9IChcblx0eyBjbGFzc05hbWUsIGhpZGRlbiwgb3BlbiwgLi4ucmVzdCB9OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0a2xhc3M/OiBzdHJpbmcsXG4pID0+IHtcblx0cmVzdC5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgPSB0cnVlOyAvLyBNYWtlIE5leHQuanMgaGFwcHlcblx0cmVzdC5jbGFzcyA9IGNsc3goa2xhc3MsIGNsYXNzTmFtZSB8fCBcIlwiKSB8fCB1bmRlZmluZWQ7IC8vIFVzZSBjbGFzcyBpbnN0ZWFkIG9mIGNsYXNzTmFtZVxuXHRpZiAoaGlkZGVuKSByZXN0LmhpZGRlbiA9IHRydWU7IC8vIEVuc3VyZSBib29sZWFuIHByb3AgYmVoYXZpb3VyXG5cdGlmIChvcGVuKSByZXN0Lm9wZW4gPSB0cnVlOyAvLyBFbnN1cmUgYm9vbGVhbiBwcm9wIGJlaGF2aW91clxuXHRyZXR1cm4gcmVzdDtcbn07XG4iLCJpbXBvcnQgeyBJU19CUk9XU0VSIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IE1BVE9NTyA9IFwibWF0dGlsc3luZXQubWF0b21vLmNsb3VkXCI7XG5sZXQgRU5BQkxFRDogQW5hbHl0aWNzQWN0aW9uc1tcImluaXRcIl1bXCJlbmFibGVkXCJdID0gdHJ1ZTtcblxudHlwZSBNYXRvbW8gPSAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbilbXTtcbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIFdpbmRvdyB7XG5cdFx0X3BhcT86IE1hdG9tb1tdO1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIEFuYWx5dGljc0FjdGlvbnMgPSB7XG5cdGluaXQ6IHtcblx0XHRtYXRvbW9JZDogbnVtYmVyIHwgc3RyaW5nO1xuXHRcdGVuYWJsZWQ/OiBib29sZWFuIHwgXCJkZWJ1Z1wiO1xuXHR9O1xuXHRwYWdldmlldzoge1xuXHRcdHVybD86IHN0cmluZztcblx0XHR0aXRsZT86IHN0cmluZztcblx0fTtcblx0ZXZlbnQ6IHtcblx0XHRjYXRlZ29yeTogc3RyaW5nO1xuXHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdG5hbWU/OiBzdHJpbmc7XG5cdFx0dmFsdWU/OiBudW1iZXI7XG5cdH07XG5cdHNlYXJjaDoge1xuXHRcdHF1ZXJ5OiBzdHJpbmc7XG5cdFx0Y2F0ZWdvcnk/OiBzdHJpbmc7XG5cdFx0cmVzdWx0cz86IG51bWJlcjtcblx0fTtcblx0bWF0b21vOiBNYXRvbW87XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYW5hbHl0aWNzPEFjdGlvbiBleHRlbmRzIGtleW9mIEFuYWx5dGljc0FjdGlvbnM+KFxuXHRhY3Rpb246IEFjdGlvbixcblx0YXJncyA9IHt9IGFzIEFuYWx5dGljc0FjdGlvbnNbQWN0aW9uXSxcbikge1xuXHRpZiAoIUlTX0JST1dTRVIpIHJldHVybjtcblx0aWYgKCF3aW5kb3cuX3BhcSkge1xuXHRcdHdpbmRvdy5fcGFxID0gW107XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJIZWF0bWFwU2Vzc2lvblJlY29yZGluZzo6ZGlzYWJsZVwiXSk7IC8vIERpc2FibGUgaGVhdG1hcHMgYnkgZGVmYXVsdCBhcyB0aGlzIHJlcXVpcmUgY29va2llc1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wiZW5hYmxlTGlua1RyYWNraW5nXCJdKTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldFRyYWNrZXJVcmxcIiwgYGh0dHBzOi8vJHtNQVRPTU99L21hdG9tby5waHBgXSk7XG5cdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc2NyaXB0W3NyYyo9XCJtYXRvbW8uanNcIl0nKSB8fFxuXHRcdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZChcblx0XHRcdFx0T2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpLCB7XG5cdFx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdFx0c3JjOiBgaHR0cHM6Ly9jZG4ubWF0b21vLmNsb3VkLyR7TUFUT01PfS9tYXRvbW8uanNgLFxuXHRcdFx0XHR9KSxcblx0XHRcdCk7XG5cdH1cblx0aWYgKGFjdGlvbiA9PT0gXCJpbml0XCIpIHtcblx0XHRjb25zdCB7IG1hdG9tb0lkLCBlbmFibGVkID0gdHJ1ZSB9ID0gYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wiaW5pdFwiXTtcblx0XHRFTkFCTEVEID0gZW5hYmxlZDtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldFNpdGVJZFwiLCBtYXRvbW9JZF0pO1xuXHR9XG5cblx0aWYgKEVOQUJMRUQgPT09IFwiZGVidWdcIikgcmV0dXJuIGNvbnNvbGUuaW5mbyhgQW5hbHl0aWNzOiBcIiR7YWN0aW9ufVwiYCwgYXJncyk7XG5cdGlmIChFTkFCTEVEID09PSBmYWxzZSB8fCB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgPT09IFwibG9jYWxob3N0XCIpIHJldHVybjtcblxuXHRpZiAoYWN0aW9uID09PSBcInBhZ2V2aWV3XCIpIHtcblx0XHRjb25zdCB7IHVybCwgdGl0bGUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInBhZ2V2aWV3XCJdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0Q3VzdG9tVXJsXCIsIHVybCB8fCBsb2NhdGlvbi5ocmVmXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXREb2N1bWVudFRpdGxlXCIsIHRpdGxlIHx8IGRvY3VtZW50LnRpdGxlXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJ0cmFja1BhZ2VWaWV3XCJdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwiZXZlbnRcIikge1xuXHRcdGNvbnN0IHsgY2F0ZWdvcnksIGFjdGlvbiwgbmFtZSwgdmFsdWUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcImV2ZW50XCJdO1xuXHRcdGNvbnN0IGV2ZW50ID0gW1widHJhY2tFdmVudFwiLCBjYXRlZ29yeSwgYWN0aW9uLCBuYW1lLCB2YWx1ZV07XG5cdFx0d2luZG93Ll9wYXEucHVzaChldmVudC5maWx0ZXIoKHYpID0+IHYgIT09IHVuZGVmaW5lZCkpO1xuXHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJzZWFyY2hcIikge1xuXHRcdGNvbnN0IHtcblx0XHRcdHF1ZXJ5LFxuXHRcdFx0Y2F0ZWdvcnkgPSBmYWxzZSxcblx0XHRcdHJlc3VsdHMgPSBmYWxzZSxcblx0XHR9ID0gYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wic2VhcmNoXCJdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1widHJhY2tTaXRlU2VhcmNoXCIsIHF1ZXJ5LCBjYXRlZ29yeSwgcmVzdWx0c10pO1xuXHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJtYXRvbW9cIikge1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wibWF0b21vXCJdKTtcblx0fVxufVxuIiwiY29uc3QgZ2V0U3RlcHMgPSAoXG5cdG5vdzogbnVtYmVyLFxuXHRtYXg6IG51bWJlcixcblx0c2hvdyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbikgPT4ge1xuXHRjb25zdCBvZmZzZXQgPSAoc2hvdyAtIDEpIC8gMjtcblx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heChNYXRoLm1pbihub3cgLSBNYXRoLmZsb29yKG9mZnNldCksIG1heCAtIHNob3cgKyAxKSwgMSk7XG5cdGNvbnN0IGVuZCA9IE1hdGgubWluKE1hdGgubWF4KG5vdyArIE1hdGguY2VpbChvZmZzZXQpLCBzaG93KSwgbWF4KTtcblx0Y29uc3QgcGFnZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBlbmQgKyAxIC0gc3RhcnQgfSwgKF8sIGkpID0+IGkgKyBzdGFydCk7XG5cblx0aWYgKHNob3cgPiA0ICYmIHN0YXJ0ID4gMSkgcGFnZXMuc3BsaWNlKDAsIDIsIDEsIDApO1xuXHRpZiAoc2hvdyA+IDMgJiYgZW5kIDwgbWF4KSBwYWdlcy5zcGxpY2UoLTIsIDIsIDAsIG1heCk7XG5cdHJldHVybiBwYWdlcztcbn07XG5cbmV4cG9ydCBjb25zdCBwYWdpbmF0aW9uID0gKHsgY3VycmVudCA9IDEsIHRvdGFsID0gMTAsIHNob3cgPSA3IH0pID0+ICh7XG5cdHByZXY6IGN1cnJlbnQgPiAxID8gY3VycmVudCAtIDEgOiAwLFxuXHRuZXh0OiBjdXJyZW50IDwgdG90YWwgPyBjdXJyZW50ICsgMSA6IDAsXG5cdHBhZ2VzOiBnZXRTdGVwcyhjdXJyZW50LCB0b3RhbCwgc2hvdykubWFwKChwYWdlLCBpbmRleCkgPT4gKHtcblx0XHRjdXJyZW50OiBwYWdlID09PSBjdXJyZW50ICYmIChcInBhZ2VcIiBhcyBjb25zdCksXG5cdFx0a2V5OiBga2V5LSR7cGFnZX0tJHtpbmRleH1gLFxuXHRcdHBhZ2UsXG5cdH0pKSxcbn0pO1xuIiwiaWYgKFxuXHR0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdHdpbmRvdy5DU1NTdHlsZVNoZWV0ICYmXG5cdGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0c1xuKVxuXHQoKCkgPT4ge1xuXHRcdGNvbnN0IGtleSA9IFwiLS1tdGRzLWFwcC1leHBhbmRlZFwiO1xuXHRcdGNvbnN0IHNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblx0XHRjb25zdCBwcmV2ID0gKCkgPT4gIXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpPy5pbmNsdWRlcyhcImZhbHNlXCIpO1xuXG5cdFx0ZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLnB1c2goc2hlZXQpO1xuXHRcdHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQgPSAoZm9yY2UpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IG5leHQgPSBmb3JjZSA/PyAhcHJldigpO1xuXHRcdFx0XHRzaGVldC5yZXBsYWNlU3luYz8uKGA6cm9vdCB7ICR7a2V5fTogdmFyKCR7a2V5fS0tJHtuZXh0fSl9YCk7XG5cdFx0XHRcdHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIG5leHQpO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7fSAvLyBsb2NhbFN0b3JhZ2UgaXMgZnVsbCBvciByZXBsYWNlU3luYyBpcyBub3Qgc3VwcG9ydGVkXG5cdFx0fTtcblxuXHRcdC8vIFNldCBhbmQgc3RvcmUgaW5pdGlhbCBzdGF0ZVxuXHRcdHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQocHJldigpKTtcblx0fSkoKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBRVUlDS19FVkVOVCwgZGVib3VuY2UsIG9uLCBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IFwiLi9hcHAtdG9nZ2xlXCI7XG5cbmNvbnN0IENTU19BUFAgPSBzdHlsZXMuYXBwLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19TVElDS1kgPSBzdHlsZXMuc3RpY2t5LnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19UT0dHTEUgPSAnW2RhdGEtY29tbWFuZD1cInRvZ2dsZS1hcHAtZXhwYW5kZWRcIl0nO1xuY29uc3QgQ1NTX1NJREVCQVIgPSBgLiR7Q1NTX0FQUH0gPiBkaWFsb2csLiR7Q1NTX0FQUH0gZGlhbG9nIH4gbWFpbmA7XG5cbmNvbnN0IHVzZVRyYW5zaXRpb24gPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcblx0aWYgKCFkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKSBjYWxsYmFjaygpO1xuXHRlbHNlIGRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24oY2FsbGJhY2spO1xufTtcblxuZXhwb3J0IGNvbnN0IHRvZ2dsZUFwcEV4cGFuZGVkID0gKGZvcmNlPzogYm9vbGVhbikgPT5cblx0Ly8gQHRzLWV4cGVjdC1lcnJvciB3aW5kb3cubXRkc0FwcFRvZ2dsZSBjb21lcyBmcm9tIGFwcC10b2dnbGUuanNcblx0dXNlVHJhbnNpdGlvbigoKSA9PiB3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkPy4oZm9yY2UpKTtcblxuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlQ2xpY2soeyB0YXJnZXQ6IGVsIH06IEV2ZW50KSB7XG5cdGlmICghKGVsIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpIHx8ICFlbC5tYXRjaGVzKENTU19UT0dHTEUpKSByZXR1cm47XG5cdGlmIChnZXRDb21wdXRlZFN0eWxlKGVsKS5wb3NpdGlvbiA9PT0gXCJzdGlja3lcIikgcmV0dXJuIHRvZ2dsZUFwcEV4cGFuZGVkKCk7XG5cdHVzZVRyYW5zaXRpb24oKCkgPT4ge1xuXHRcdGNvbnN0IHNpZGViYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaWFsb2dFbGVtZW50PihDU1NfU0lERUJBUik7XG5cdFx0c2lkZWJhcj8uc2V0QXR0cmlidXRlKFwiZGF0YS1jbG9zZWRieVwiLCBcImFueVwiKTsgLy8gQWxsb3cgY2xvc2luZyBieSBjbGlja2luZyBvdXRzaWRlXG5cdFx0c2lkZWJhcj8uc2hvd01vZGFsKCk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVSZXNpemUoKSB7XG5cdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpYWxvZ0VsZW1lbnQ+KENTU19TSURFQkFSKT8uY2xvc2UoKTtcbn1cblxuLy8gU2Nyb2xsIHN0YXRlXG5sZXQgTUlOX1kgPSAwOyAvLyBPZmZzZXQgdG8gYXZvaWQgc2Nyb2xsIGp1bXAgd2hlbiBzdGlja3kgaXMgc2V0IHRvIHJlbGF0aXZlXG5sZXQgU0NST0xMX1VQOiBib29sZWFuO1xubGV0IFNUSUNLID0gMDsgLy8gLTEgPSBzdGljayB0b3AsIDAgPSByZWxhdGl2ZSwgMSA9IHN0aWNrIGJvdHRvbVxubGV0IFNUSUNLX0VMOiBIVE1MRWxlbWVudDtcbmxldCBTVElDS19IID0gMDtcbmxldCBTVElDS19ZID0gMDtcbmxldCBTVFVDSyA9IGZhbHNlOyAvLyBVc2VkIHRvIGZpZ3VyZSBpZiBuYXYgaXMgbGFyZ2VyIHRoYW4gdmlld3BvcnRcbmxldCBXSU5fSCA9IDA7XG5sZXQgV0lOX1kgPSAwO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihbc3RpY2t5XTogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0U1RJQ0tfRUwgPSBzdGlja3k7XG5cdGhhbmRsZVNjcm9sbCgpOyAvLyBSdW4gb24gY29ubmVjdFxufVxuXG5mdW5jdGlvbiBoYW5kbGVTY3JvbGwoKSB7XG5cdGlmICghU1RJQ0tfRUw/LmlzQ29ubmVjdGVkKSByZXR1cm47XG5cdGNvbnN0IE5FWFRfWSA9IHdpbmRvdy5zY3JvbGxZO1xuXHRjb25zdCBORVhUX1VQID0gTkVYVF9ZIDwgV0lOX1k7XG5cdFdJTl9ZID0gTkVYVF9ZO1xuXG5cdC8vIE9ubHkgY2FsY3VsYXRlIGlmIHNjcm9sbCBkaXJlY3Rpb24gaGFzIGNoYW5nZWRcblx0aWYgKE5FWFRfVVAgIT09IFNDUk9MTF9VUCkge1xuXHRcdE1JTl9ZID0gKFNUSUNLX0VMLnBhcmVudEVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCB8fCAwKSArIFdJTl9ZO1xuXHRcdFNDUk9MTF9VUCA9IE5FWFRfVVA7XG5cdFx0U1RJQ0tfSCA9IFNUSUNLX0VMLm9mZnNldEhlaWdodDtcblx0XHRTVElDS19ZID0gU1RJQ0tfRUwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgV0lOX1k7XG5cdFx0U1RVQ0sgPSBTVElDS19FTC5vZmZzZXRIZWlnaHQgPD0gd2luZG93LmlubmVySGVpZ2h0O1xuXHRcdFdJTl9IID0gd2luZG93LmlubmVySGVpZ2h0O1xuXHR9XG5cblx0aWYgKFNUSUNLID09PSAtMSAmJiBTVFVDSykgcmV0dXJuOyAvLyBBbGx3YXlzIHN0aWNreSB3aGVuIHNpZGViYXIgaXMgc21hbGxlciB0aGFuIHZpZXdwb3J0XG5cdGlmIChTVElDSyAhPT0gLTEgJiYgKFNUVUNLIHx8IChTQ1JPTExfVVAgJiYgV0lOX1kgPD0gU1RJQ0tfWSkpKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInN0aWNreVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIFwiMHB4XCIpO1xuXHRcdFNUSUNLID0gLTE7IC8vIE5vdCBzdGlja2luZyB0byB0b3AgYW5kIHNpZGViYXIgaXMgc21hbGxlciB0aGFuIHZpZXdwb3J0IG9yIHNjcm9sbGluZyB1cFxuXHR9IGVsc2UgaWYgKFNUSUNLID09PSAtMSAmJiAhU0NST0xMX1VQKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInJlbGF0aXZlXCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7TWF0aC5tYXgoMCwgV0lOX1kgLSBNSU5fWSl9cHhgKTtcblx0XHRTVElDSyA9IDA7IC8vIFN0aWNraW5nIHRvIHRvcCBhbmQgc2Nyb2xsaW5nIGRvd25cblx0fSBlbHNlIGlmIChTVElDSyAhPT0gMSAmJiAhU0NST0xMX1VQICYmIFdJTl9ZICsgV0lOX0ggPj0gU1RJQ0tfWSArIFNUSUNLX0gpIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwic3RpY2t5XCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7V0lOX0ggLSBTVElDS19IfXB4YCk7XG5cdFx0U1RJQ0sgPSAxOyAvLyBOb3Qgc3RpY2tpbmcgdG8gYm90dG9tIGFuZCBzY3JvbGxpbmcgZG93blxuXHR9IGVsc2UgaWYgKFNUSUNLID09PSAxICYmIFNDUk9MTF9VUCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJyZWxhdGl2ZVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke1NUSUNLX1kgLSBNSU5fWX1weGApO1xuXHRcdFNUSUNLID0gMDsgLy8gU3RpY2tpbmcgdG8gYm90dG9tIGFuZCBzY3JvbGxpbmcgdXBcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfU1RJQ0tZLCBoYW5kbGVNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZVRvZ2dsZUNsaWNrLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJyZXNpemVcIiwgZGVib3VuY2UoaGFuZGxlUmVzaXplLCAxMDApLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJzY3JvbGxcIiwgaGFuZGxlU2Nyb2xsLCBRVUlDS19FVkVOVCk7XG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfQlJFQURDUlVNQlMgPSBzdHlsZXMuYnJlYWRjcnVtYnMuc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihicmVhZGNydW1iczogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCBicmVhZGN1bWJzIG9mIGJyZWFkY3J1bWJzKVxuXHRcdGJyZWFkY3VtYnMucXVlcnlTZWxlY3RvckFsbChcImxpIGFcIikuZm9yRWFjaCgoY3J1bWIsIGluZGV4LCB7IGxlbmd0aCB9KSA9PiB7XG5cdFx0XHRhdHRyKGNydW1iLCBcImFyaWEtY3VycmVudFwiLCBpbmRleCA9PT0gbGVuZ3RoIC0gMSA/IFwicGFnZVwiIDogbnVsbCk7XG5cdFx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfQlJFQURDUlVNQlMsIGhhbmRsZU11dGF0aW9uKSxcbik7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0SVNfQlJPV1NFUixcblx0UVVJQ0tfRVZFTlQsXG5cdGF0dHIsXG5cdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIsXG5cdG9uLFxuXHRvbkxvYWRlZCxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19ESUFMT0cgPSBzdHlsZXMuZGlhbG9nLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IERJQUxPR1MgPSBJU19CUk9XU0VSXG5cdD8gKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG5cdFx0XHRDU1NfRElBTE9HLFxuXHRcdCkgYXMgSFRNTENvbGxlY3Rpb25PZjxIVE1MRGlhbG9nRWxlbWVudD4pXG5cdDogW107XG5cbmNvbnN0IGhhbmRsZU1vZGFsID0gKCkgPT4ge1xuXHRmb3IgKGNvbnN0IGRpYWxvZyBvZiBESUFMT0dTKVxuXHRcdGlmIChkaWFsb2cuaXNDb25uZWN0ZWQgJiYgZGlhbG9nLnNob3dNb2RhbCAmJiBkaWFsb2cuY2xvc2UpIHtcblx0XHRcdGlmIChkaWFsb2cubWF0Y2hlcygnW29wZW5dOm5vdChbZGF0YS1tb2RhbD1cImZhbHNlXCJdKTpub3QoOm1vZGFsKScpKSB7XG5cdFx0XHRcdGF0dHIoZGlhbG9nLCBcIm9wZW5cIiwgbnVsbCk7IC8vIFVzaW5nIGF0dHJpYnV0ZSBpbnN0ZWFkIG9mIC5jbG9zZSB0byBhdm9pZCBgY2xvc2VgIGV2ZW50XG5cdFx0XHRcdGRpYWxvZy5zaG93TW9kYWwoKTtcblx0XHRcdH0gZWxzZSBpZiAoZGlhbG9nLm1hdGNoZXMoXCI6bW9kYWw6bm90KFtvcGVuXSlcIikpIHtcblx0XHRcdFx0YXR0cihkaWFsb2csIFwib3BlblwiLCBcIlwiKTsgLy8gU2V0IGFzIG9wZW5cblx0XHRcdFx0ZGlhbG9nLmNsb3NlKCk7IC8vIFNvIHdlIGNvcnJlY2x0eSBjYW4gY2FsbCAuY2xvc2UsIHJlbW92aW5nIDxkaWFsb2c+IGZyb20gI3RvcC1sYXllclxuXHRcdFx0fVxuXHRcdH1cbn07XG5cbmNvbnN0IGhhbmRsZUNsaWNrID0gKHsgY2xpZW50WDogeCwgY2xpZW50WTogeSwgdGFyZ2V0OiBlbCB9OiBNb3VzZUV2ZW50KSA9PiB7XG5cdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxEaWFsb2dFbGVtZW50ICYmIGF0dHIoZWwsIFwiZGF0YS1jbG9zZWRieVwiKSA9PT0gXCJhbnlcIikge1xuXHRcdGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRjb25zdCBpc0luc2lkZSA9IHRvcCA8PSB5ICYmIHkgPD0gYm90dG9tICYmIGxlZnQgPD0geCAmJiB4IDw9IHJpZ2h0O1xuXG5cdFx0aWYgKCFpc0luc2lkZSkgZWwuY2xvc2UoKTtcblx0fSBlbHNlIGlmIChcblx0XHRlbCBpbnN0YW5jZW9mIEVsZW1lbnQgJiZcblx0XHRlbC5jbG9zZXN0KCdidXR0b25bZGF0YS1jb21tYW5kPVwiY2xvc2VcIl0nKVxuXHQpIHtcblx0XHRlbD8uY2xvc2VzdChcImRpYWxvZ1wiKT8uY2xvc2UoKTtcblx0fVxufTtcblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVDbGljayBhcyBFdmVudExpc3RlbmVyLCBRVUlDS19FVkVOVCk7XG5cdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoaGFuZGxlTW9kYWwpLm9ic2VydmUoXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRcdHtcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wib3BlblwiXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdH0sXG5cdCk7XG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBRVUlDS19FVkVOVCwgYXR0ciwgb24sIG9uTG9hZGVkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmZ1bmN0aW9uIGhhbmRsZUluamVjdChldmVudDogRXZlbnQgJiB7IGFuaW1hdGlvbk5hbWU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSAhPT0gc3R5bGVzLl9lcnJvcnN1bW1hcnkpIHJldHVybjtcblx0Y29uc3QgZmlyc3QgPSAoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpPy5maXJzdEVsZW1lbnRDaGlsZDtcblxuXHRpZiAoZmlyc3QgaW5zdGFuY2VvZiBIVE1MSGVhZGluZ0VsZW1lbnQpIHtcblx0XHRhdHRyKGZpcnN0LCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG5cdFx0Zmlyc3QuZm9jdXMoKTsgLy8gQXV0b2ZvY3VzIGZpcnN0IGhlYWRpbmdcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiBvbihkb2N1bWVudCwgXCJhbmltYXRpb25lbmRcIiwgaGFuZGxlSW5qZWN0LCBRVUlDS19FVkVOVCkpO1xuIiwidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuXG4vLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgRk9DVVNfT1VUTElORSA9IFwib3V0bGluZTogMXB4IGRvdHRlZDsgb3V0bGluZTogNXB4IGF1dG8gSGlnaGxpZ2h0OyBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3JcIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIExJVkU7XG52YXIgTElWRV9TUl9GSVggPSAwO1xudmFyIHNwZWFrID0gKHRleHQpID0+IHtcbiAgaWYgKCFMSVZFKSB7XG4gICAgTElWRSA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgTElWRS5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjpmaXhlZDtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcFwiO1xuICAgIGF0dHIoTElWRSwgXCJhcmlhLWxpdmVcIiwgXCJhc3NlcnRpdmVcIik7XG4gIH1cbiAgaWYgKCFMSVZFLmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChMSVZFKTtcbiAgaWYgKHRleHQpIExJVkUudGV4dENvbnRlbnQgPSBgJHt0ZXh0fSR7TElWRV9TUl9GSVgrKyAlIDIgPyBcIlxceEEwXCIgOiBcIlwifWA7XG59O1xudmFyIHNldFZhbHVlID0gKGlucHV0LCBkYXRhLCB0eXBlID0gXCJcIikgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlLCBkYXRhLCBpbnB1dFR5cGU6IHR5cGUgfTtcbiAgY29uc3QgcHJvdG8gPSBIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImJlZm9yZWlucHV0XCIsIGV2ZW50KSk7XG4gIChfYiA9IChfYTIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBcInZhbHVlXCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoaW5wdXQsIGRhdGEpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiaW5wdXRcIiwgZXZlbnQpKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbn07XG5cbi8vIHUtb3B0aW9uLnRzXG52YXIgRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG52YXIgU0VMRUNURUQgPSBcInNlbGVjdGVkXCI7XG52YXIgVUhUTUxPcHRpb25FbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW0RJU0FCTEVELCBTRUxFQ1RFRF07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFJU19JT1MpIHRoaXMudGFiSW5kZXggPSAtMTtcbiAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKFwicm9sZVwiKSkgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJvcHRpb25cIik7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtZGlzYWJsZWRcIiwgYCR7dGhpcy5kaXNhYmxlZH1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1zZWxlY3RlZFwiLCBgJHt0aGlzLnNlbGVjdGVkfWApO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB3aGV0aGVyIHRoZSBvcHRpb24gaW4gdGhlIGxpc3QgYm94IGlzIHRoZSBkZWZhdWx0IGl0ZW0uICovXG4gIGdldCBkZWZhdWx0U2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXNbU0VMRUNURURdO1xuICB9XG4gIHNldCBkZWZhdWx0U2VsZWN0ZWQodmFsdWUpIHtcbiAgICB0aGlzW1NFTEVDVEVEXSA9IHZhbHVlO1xuICB9XG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBESVNBQkxFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBESVNBQkxFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyBhIHJlZmVyZW5jZSB0byB0aGUgZm9ybSB0aGF0IHRoZSBvYmplY3QgaXMgZW1iZWRkZWQgaW4uICovXG4gIGdldCBmb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJmb3JtXCIpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiBvcHRpb24gaW4gYSBsaXN0IGJveC4gKi9cbiAgZ2V0IGluZGV4KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLigoX2EyID0gdGhpcy5wYXJlbnRFbGVtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLm9wdGlvbnMpIHx8IFt0aGlzXVxuICAgIF0uaW5kZXhPZih0aGlzKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgYSB2YWx1ZSB0aGF0IHlvdSBjYW4gdXNlIHRvIGltcGxlbWVudCB5b3VyIG93biBsYWJlbCBmdW5jdGlvbmFsaXR5IGZvciB0aGUgb2JqZWN0LiAqL1xuICBnZXQgbGFiZWwoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJsYWJlbFwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgbGFiZWwodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwibGFiZWxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBTRUxFQ1RFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBTRUxFQ1RFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSB0ZXh0IHN0cmluZyBzcGVjaWZpZWQgYnkgdGhlIG9wdGlvbiB0YWcuICovXG4gIGdldCB0ZXh0KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gdGhpcy50ZXh0Q29udGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIH1cbiAgc2V0IHRleHQodGV4dCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdmFsdWUgd2hpY2ggaXMgcmV0dXJuZWQgdG8gdGhlIHNlcnZlciB3aGVuIHRoZSBmb3JtIGNvbnRyb2wgaXMgc3VibWl0dGVkLiAqL1xuICBnZXQgdmFsdWUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1vcHRpb25cIiwgVUhUTUxPcHRpb25FbGVtZW50KTtcblxuLy8gdS1kYXRhbGlzdC50c1xudmFyIExJVkVfVElNRVI7XG52YXIgSU5QVVRfREVCT1VOQ0UgPSAwO1xudmFyIElTX1BSRVNTID0gZmFsc2U7XG52YXIgSVNfTU9CSUxFID0gSVNfSU9TIHx8IElTX0FORFJPSUQ7XG52YXIgRVZFTlRTID0gXCJjbGljayxmb2N1c291dCxpbnB1dCxrZXlkb3duLG1vdXNlZG93bixtb3VzZXVwXCI7XG52YXIgRVZFTlRTX0lOUFVUID0gXCJmb2N1cyxmb2N1c2luLGJsdXIsZm9jdXNvdXRcIjtcbnZhciBURVhUUyA9IHtcbiAgc2luZ3VsYXI6IFwiJWQgaGl0XCIsXG4gIHBsdXJhbDogXCIlZCBoaXRzXCJcbn07XG52YXIgVUhUTUxEYXRhTGlzdEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fdGV4dHMgPSBfX3NwcmVhZFZhbHVlcyh7fSwgVEVYVFMpO1xuICAgIHRoaXMuX3ZhbHVlID0gXCJcIjtcbiAgICBhdHRhY2hTdHlsZShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtESVNQTEFZX0JMT0NLfVxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uKSB7IGRpc3BsYXk6IGJsb2NrOyBjdXJzb3I6IHBvaW50ZXIgfVxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uOmZvY3VzKSB7ICR7Rk9DVVNfT1VUTElORX0gfVxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uW2FyaWEtaGlkZGVuPVwidHJ1ZVwiXSksXG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb25bZGlzYWJsZWRdKSxcblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbltoaWRkZW5dKSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudCB9YFxuICAgICk7XG4gIH1cbiAgLy8gVXNlZCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IGFubm91bmNlbWVudHNcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIC4uLk9iamVjdC5rZXlzKFRFWFRTKS5tYXAoKGtleSkgPT4gYGRhdGEtc3ItJHtrZXl9YCldO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuaGlkZGVuID0gdHJ1ZTtcbiAgICB0aGlzLl9yb290ID0gZ2V0Um9vdCh0aGlzKTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcImxpc3Rib3hcIik7XG4gICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG4gICAgb24odGhpcy5fcm9vdCwgXCJmb2N1c2luXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNcIiwgdGhpcywgdHJ1ZSk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7XG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFtcImRpc2FibGVkXCIsIFwiaGlkZGVuXCIsIFwibGFiZWxcIiwgXCJ2YWx1ZVwiXSxcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpKTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBvZmYodGhpcy5fcm9vdCB8fCB0aGlzLCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIG9mZih0aGlzLl9yb290IHx8IHRoaXMsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIGZhbHNlKTtcbiAgICBkaXNjb25uZWN0SW5wdXQodGhpcyk7XG4gICAgdGhpcy5fcm9vdCA9IHZvaWQgMDtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socHJvcCwgX3ByZXYsIG5leHQpIHtcbiAgICBjb25zdCB0ZXh0ID0gcHJvcCA9PSBudWxsID8gdm9pZCAwIDogcHJvcC5zcGxpdChcImRhdGEtc3ItXCIpWzFdO1xuICAgIGNvbnN0IGNzcyA9IGBpbnB1dFtsaXN0PVwiJHt0aGlzLmlkfVwiXWA7XG4gICAgaWYgKFRFWFRTW3RleHRdKSB0aGlzLl90ZXh0c1t0ZXh0XSA9IG5leHQgfHwgVEVYVFNbdGV4dF07XG4gICAgZWxzZSBpZiAodGhpcy5fcm9vdClcbiAgICAgIGZvciAoY29uc3QgaW5wdXQgb2YgdGhpcy5fcm9vdC5xdWVyeVNlbGVjdG9yQWxsKGNzcykpXG4gICAgICAgIHNldHVwSW5wdXQodGhpcywgaW5wdXQpO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgeyB0YXJnZXQsIHR5cGUgfSA9IGV2ZW50O1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKHR5cGUgPT09IFwiY2xpY2tcIikgb25DbGljayh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiZm9jdXNcIiB8fCB0eXBlID09PSBcImZvY3VzaW5cIikgb25Gb2N1cyh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiYmx1clwiIHx8IHR5cGUgPT09IFwiZm9jdXNvdXRcIikgb25CbHVyKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIG9uS2V5RG93bih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIElTX1BSRVNTID0gdGhpcy5jb250YWlucyh0YXJnZXQpO1xuICAgIGlmICh0eXBlID09PSBcIm1vdXNldXBcIikgSVNfUFJFU1MgPSBmYWxzZTtcbiAgICBpZiAodHlwZSA9PT0gXCJtdXRhdGlvblwiIHx8IHR5cGUgPT09IFwiaW5wdXRcIikge1xuICAgICAgY2xlYXJUaW1lb3V0KElOUFVUX0RFQk9VTkNFKTtcbiAgICAgIElOUFVUX0RFQk9VTkNFID0gc2V0VGltZW91dChvbklucHV0LCAwLCB0aGlzLCBldmVudCk7XG4gICAgfVxuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidS1vcHRpb25cIik7XG4gIH1cbn07XG52YXIgaXNWaXNpYmxlID0gKGVsKSA9PiBlbC5jaGVja1Zpc2liaWxpdHkgPyBlbC5jaGVja1Zpc2liaWxpdHkoKSA6ICEhKGVsLm9mZnNldEhlaWdodCAmJiBlbC5vZmZzZXRIZWlnaHQpO1xudmFyIHNldEV4cGFuZGVkID0gKHNlbGYsIG9wZW4pID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKHNlbGYuaGlkZGVuICE9PSBvcGVuKSByZXR1cm47XG4gIHNlbGYuaGlkZGVuID0gIW9wZW47XG4gIGlmIChzZWxmLl9pbnB1dCkgc2V0dXBJbnB1dChzZWxmLCBzZWxmLl9pbnB1dCwgb3Blbik7XG4gIGlmIChzZWxmLnBvcG92ZXIgJiYgKChfYTIgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpIHtcbiAgICBhdHRyKHNlbGYuX2lucHV0LCBcInBvcG92ZXJ0YXJnZXRcIiwgdXNlSWQoc2VsZikpO1xuICAgIGF0dHIoc2VsZiwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpO1xuICAgIHNlbGYudG9nZ2xlUG9wb3ZlcihvcGVuKTtcbiAgfVxuICBpZiAob3Blbikgb25JbnB1dChzZWxmKTtcbn07XG52YXIgZGlzY29ubmVjdElucHV0ID0gKHNlbGYpID0+IHtcbiAgaWYgKCFzZWxmLl9pbnB1dCkgcmV0dXJuO1xuICBvZmYoc2VsZi5faW5wdXQgfHwgc2VsZiwgRVZFTlRTX0lOUFVULCBzZWxmKTtcbiAgb2ZmKHNlbGYuX3Jvb3QgfHwgc2VsZiwgRVZFTlRTLCBzZWxmKTtcbiAgc2V0RXhwYW5kZWQoc2VsZiwgZmFsc2UpO1xuICBzZWxmLl9pbnB1dCA9IHZvaWQgMDtcbn07XG52YXIgc2V0dXBJbnB1dCA9IChzZWxmLCBpbnB1dCwgb3BlbiA9IGZhbHNlKSA9PiB7XG4gIG9uKGlucHV0LCBFVkVOVFNfSU5QVVQsIHNlbGYsIHRydWUpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtYXV0b2NvbXBsZXRlXCIsIFwibGlzdFwiKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWNvbnRyb2xzXCIsIHVzZUlkKHNlbGYpKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWV4cGFuZGVkXCIsIGAke0lTX01PQklMRSA/IG9wZW4gOiBcInRydWVcIn1gKTtcbiAgYXR0cihpbnB1dCwgXCJhdXRvY29tcGxldGVcIiwgXCJvZmZcIik7XG4gIGF0dHIoaW5wdXQsIFwicm9sZVwiLCBcImNvbWJvYm94XCIpO1xufTtcbnZhciBvbkZvY3VzID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IGlzSW5wdXQgPSBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50O1xuICBpZiAoaXNJbnB1dCAmJiBldmVudC5pc1RydXN0ZWQpIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICBpZiAoc2VsZi5faW5wdXQgIT09IGV2ZW50LnRhcmdldCAmJiBpc0lucHV0ICYmIGV2ZW50LnRhcmdldC5saXN0ID09PSBzZWxmKSB7XG4gICAgaWYgKHNlbGYuX2lucHV0KSBkaXNjb25uZWN0SW5wdXQoc2VsZik7XG4gICAgc2VsZi5faW5wdXQgPSBldmVudC50YXJnZXQ7XG4gICAgc2VsZi5faW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImZvY3VzXCIpKTtcbiAgICBzZWxmLl9pbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNpblwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgIGF0dHIoc2VsZiwgU0FGRV9MQUJFTExFREJZLCB1c2VJZCgoX2EyID0gc2VsZi5faW5wdXQubGFiZWxzKSA9PSBudWxsID8gdm9pZCAwIDogX2EyWzBdKSk7XG4gICAgb24oc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICAgIHNldEV4cGFuZGVkKHNlbGYsIHRydWUpO1xuICAgIHNwZWFrKCk7XG4gIH1cbn07XG52YXIgb25CbHVyID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIGlmICghSVNfQU5EUk9JRCAmJiAhSVNfUFJFU1MgJiYgc2VsZi5faW5wdXQpIHNldFRpbWVvdXQob25CbHVycmVkLCAwLCBzZWxmKTtcbiAgaWYgKGV2ZW50LnRhcmdldCA9PT0gc2VsZi5faW5wdXQgJiYgZXZlbnQuaXNUcnVzdGVkKVxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufTtcbnZhciBvbkJsdXJyZWQgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByZWxhdGVkVGFyZ2V0ID0gKChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpIHx8IG51bGw7XG4gIGNvbnN0IGlucHV0ID0gc2VsZi5faW5wdXQ7XG4gIGlmIChpbnB1dCAmJiBpbnB1dCAhPT0gcmVsYXRlZFRhcmdldCAmJiAhc2VsZi5jb250YWlucyhyZWxhdGVkVGFyZ2V0KSkge1xuICAgIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJibHVyXCIsIHsgcmVsYXRlZFRhcmdldCB9KSk7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNvdXRcIiwgeyBidWJibGVzOiB0cnVlLCByZWxhdGVkVGFyZ2V0IH0pXG4gICAgKTtcbiAgICBkaXNjb25uZWN0SW5wdXQoc2VsZik7XG4gIH1cbn07XG52YXIgb25DbGljayA9IChzZWxmLCB7IHRhcmdldCB9KSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmICghc2VsZi5faW5wdXQgfHwgc2VsZi5faW5wdXQgPT09IHRhcmdldCkgcmV0dXJuIHNldEV4cGFuZGVkKHNlbGYsIHRydWUpO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBzZWxmLm9wdGlvbnMpXG4gICAgaWYgKG9wdC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICBpZiAoYXR0cihzZWxmLCBcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCIpICE9PSBcInRydWVcIikge1xuICAgICAgICAoX2EyID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbiAgICAgICAgc2V0RXhwYW5kZWQoc2VsZiwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldFZhbHVlKHNlbGYuX2lucHV0LCBvcHQudmFsdWUpO1xuICAgIH1cbiAgaWYgKElTX0FORFJPSUQpIG9uQmx1cnJlZChzZWxmKTtcbn07XG52YXIgb25LZXlEb3duID0gKHNlbGYsIGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKGUuYWx0S2V5IHx8IGUuY3RybEtleSB8fCBlLm1ldGFLZXkgfHwgZS5zaGlmdEtleSB8fCBlLmtleSA9PT0gXCJUYWJcIilcbiAgICByZXR1cm47XG4gIHNldEV4cGFuZGVkKHNlbGYsIGUua2V5ICE9PSBcIkVzY2FwZVwiKTtcbiAgY29uc3QgeyBrZXksIHRhcmdldCB9ID0gZTtcbiAgY29uc3Qgb3B0aW9ucyA9IFsuLi5zZWxmLm9wdGlvbnNdLmZpbHRlcihpc1Zpc2libGUpO1xuICBjb25zdCBwcmV2ID0gb3B0aW9ucy5pbmRleE9mKHRhcmdldCk7XG4gIGxldCBuZXh0ID0gLTE7XG4gIGlmIChrZXkgPT09IFwiQXJyb3dEb3duXCIpIG5leHQgPSAocHJldiArIDEpICUgb3B0aW9ucy5sZW5ndGg7XG4gIGlmIChrZXkgPT09IFwiQXJyb3dVcFwiKSBuZXh0ID0gKH5wcmV2ID8gcHJldiA6IG9wdGlvbnMubGVuZ3RoKSAtIDE7XG4gIGlmICh+cHJldikge1xuICAgIGlmIChrZXkgPT09IFwiSG9tZVwiIHx8IGtleSA9PT0gXCJQYWdlVXBcIikgbmV4dCA9IDA7XG4gICAgaWYgKGtleSA9PT0gXCJFbmRcIiB8fCBrZXkgPT09IFwiUGFnZURvd25cIikgbmV4dCA9IG9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICBpZiAoa2V5ID09PSBcIkVudGVyXCIpIHtcbiAgICAgIG9wdGlvbnNbcHJldl0uY2xpY2soKTtcbiAgICAgIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG4gIGlmIChvcHRpb25zW25leHRdKSBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSBvcHRpb24udGFiSW5kZXggPSAtMTtcbiAgaWYgKG9wdGlvbnNbbmV4dF0pIGUucHJldmVudERlZmF1bHQoKTtcbiAgKF9hMiA9IG9wdGlvbnNbbmV4dF0gfHwgc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbn07XG52YXIgb25JbnB1dCA9IChzZWxmLCBlKSA9PiB7XG4gIGNvbnN0IHsgX3RleHRzLCBfcm9vdCwgX2lucHV0LCBvcHRpb25zIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9IChfaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IF9pbnB1dC52YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKSkgfHwgXCJcIjtcbiAgY29uc3QgZmlsdGVyID0gIXNlbGYuaGFzQXR0cmlidXRlKFwiZGF0YS1ub2ZpbHRlclwiKTtcbiAgY29uc3QgdmlzaWJsZSA9IFtdO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKSB7XG4gICAgY29uc3QgaGlkZGVuID0gYCR7b3B0LmRpc2FibGVkIHx8IG9wdC5oaWRkZW4gfHwgZmlsdGVyICYmICFvcHQubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh2YWx1ZSl9YDtcbiAgICBhdHRyKG9wdCwgXCJhcmlhLWhpZGRlblwiLCBoaWRkZW4pO1xuICAgIGlmIChpc1Zpc2libGUob3B0KSkgdmlzaWJsZS5wdXNoKG9wdCk7XG4gIH1cbiAgY29uc3QgeyBsZW5ndGg6IHRvdGFsIH0gPSB2aXNpYmxlO1xuICBjbGVhclRpbWVvdXQoTElWRV9USU1FUik7XG4gIExJVkVfVElNRVIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBjb25zdCB0ZXh0ID0gYCR7IXRvdGFsICYmIHNlbGYuaW5uZXJUZXh0LnRyaW0oKSB8fCBgJHtfdGV4dHNbdG90YWwgPT09IDEgPyBcInNpbmd1bGFyXCIgOiBcInBsdXJhbFwiXX1gLnJlcGxhY2UoXCIlZFwiLCBgJHt0b3RhbH1gKX1gO1xuICAgIGNvbnN0IGlzVHlwZSA9IChlID09IG51bGwgPyB2b2lkIDAgOiBlLnR5cGUpID09PSBcImlucHV0XCIgJiYgdmFsdWUgIT09IHNlbGYuX3ZhbHVlO1xuICAgIGlmIChpc1R5cGUgJiYgIXNlbGYuaGlkZGVuICYmIChfcm9vdCA9PSBudWxsID8gdm9pZCAwIDogX3Jvb3QuYWN0aXZlRWxlbWVudCkgPT09IF9pbnB1dCkgc3BlYWsodGV4dCk7XG4gICAgc2VsZi5fdmFsdWUgPSB2YWx1ZTtcbiAgfSwgMWUzKTtcbiAgaWYgKElTX0lPUylcbiAgICB2aXNpYmxlLmZvckVhY2goKG9wdCwgaWR4KSA9PiBhdHRyKG9wdCwgXCJ0aXRsZVwiLCBgJHtpZHggKyAxfS8ke3RvdGFsfWApKTtcbn07XG5pZiAoSVNfQlJPV1NFUilcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcImxpc3RcIiwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBnZXRSb290KHRoaXMpLmdldEVsZW1lbnRCeUlkKGF0dHIodGhpcywgXCJsaXN0XCIpIHx8IFwiXCIpO1xuICAgIH1cbiAgfSk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWRhdGFsaXN0XCIsIFVIVE1MRGF0YUxpc3RFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxEYXRhTGlzdEVsZW1lbnQgfTtcbiIsImltcG9ydCB7IFVIVE1MQ29tYm9ib3hFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtY29tYm9ib3hcIjtcbmltcG9ydCB7IFVIVE1MRGF0YUxpc3RFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtZGF0YWxpc3RcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRRVUlDS19FVkVOVCxcblx0YW5jaG9yUG9zaXRpb24sXG5cdGF0dHIsXG5cdGlzSW5wdXRMaWtlLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdG9uTXV0YXRpb24sXG5cdHVzZUlkLFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0ZJRUxEID0gc3R5bGVzLmZpZWxkLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19WQUxJREFUSU9OUyA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKTtcbmNvbnN0IENTU19WQUxJREFUSU9OID0gQ1NTX1ZBTElEQVRJT05TWzBdO1xuXG5jb25zdCBnZXRUZXh0ID0gKHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uLCBrZXk6IHN0cmluZykgPT5cblx0c3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShgLS1tdGRzLXRleHQtJHtrZXl9YCk/LnNsaWNlKDEsIC0xKSB8fCBcIlwiOyAvLyBzbGljZSB0byB0cmltIHF1b3Rlc1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihmaWVsZHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpXG5cdFx0aWYgKGZpZWxkLmlzQ29ubmVjdGVkKSB7XG5cdFx0XHRjb25zdCBsYWJlbHM6IEhUTUxMYWJlbEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0Y29uc3QgZGVzY3M6IEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0bGV0IGNvbWJvYm94OiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGVsIG9mIGZpZWxkLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSkge1xuXHRcdFx0XHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MTGFiZWxFbGVtZW50KSBsYWJlbHMucHVzaChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgVUhUTUxDb21ib2JveEVsZW1lbnQpIGNvbWJvYm94ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSkgaW5wdXQgPSBlbDtcblx0XHRcdFx0ZWxzZSBpZiAoZWwuaGFzQXR0cmlidXRlKFwiZGF0YS1kZXNjcmlwdGlvblwiKSkgZGVzY3MucHVzaChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhDU1NfVkFMSURBVElPTikpIHtcblx0XHRcdFx0XHR2YWxpZCA9XG5cdFx0XHRcdFx0XHRhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8XG5cdFx0XHRcdFx0XHQhZWwuY2xpZW50V2lkdGggfHxcblx0XHRcdFx0XHRcdCFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0ZGVzY3MudW5zaGlmdChlbCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBIVE1MUGFyYWdyYXBoRWxlbWVudClcblx0XHRcdFx0XHRkZXNjcy5zb21lKChkZXNjKSA9PiBkZXNjLmNvbnRhaW5zKGVsKSkgfHwgZGVzY3MucHVzaChlbCk7IC8vIE9ubHkgYWRkIGlmIG5vdCBhbHJlYWR5IGluc2lkZSBkZXNjcmlwdGlvblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaW5wdXQpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBsYWJlbCBvZiBsYWJlbHMpIGxhYmVsLmh0bWxGb3IgPSB1c2VJZChpbnB1dCk7XG5cdFx0XHRcdHJlbmRlckNvbWJvYm94KGNvbWJvYm94KTtcblx0XHRcdFx0cmVuZGVyQ291bnRlcihpbnB1dCk7XG5cdFx0XHRcdHJlbmRlclRleHRhcmVhU2l6ZShpbnB1dCk7XG5cdFx0XHRcdGF0dHIoaW5wdXQsIFwiYXJpYS1kZXNjcmliZWRieVwiLCBkZXNjcy5tYXAodXNlSWQpLmpvaW4oXCIgXCIpIHx8IG51bGwpOyAvLyBSZW1vdmUgaWYgZW1wdHlcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWludmFsaWRcIiwgYCR7IXZhbGlkfWApO1xuXHRcdFx0fVxuXHRcdH1cbn1cblxuLy8gaU9TIGRvZXMgbm90IHN1cHBvcnQgZmllbGQtc2l6aW5nOiBjb250ZW50LCBzbyB3ZSBuZWVkIHRvIG1hbnVhbGx5IHJlc2l6ZVxuZnVuY3Rpb24gcmVuZGVyVGV4dGFyZWFTaXplKHRleHRhcmVhOiBFbGVtZW50KSB7XG5cdGlmICh0ZXh0YXJlYSBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcblx0XHR0ZXh0YXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tbXRkcy10ZXh0YXJlYS1oZWlnaHRcIiwgXCJhdXRvXCIpO1xuXHRcdHRleHRhcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuXHRcdFx0XCItLW10ZHMtdGV4dGFyZWEtaGVpZ2h0XCIsXG5cdFx0XHRgJHt0ZXh0YXJlYS5zY3JvbGxIZWlnaHR9cHhgLFxuXHRcdCk7XG5cdH1cbn1cblxuLy8gU2V0dXAgdHJhbnNsYXRpb25zIGZyb20gQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzXG5mdW5jdGlvbiByZW5kZXJDb21ib2JveChlbDogVUhUTUxDb21ib2JveEVsZW1lbnQgfCBudWxsKSB7XG5cdGlmICghZWw/Lmxpc3QgfHwgZWwubGlzdD8uaGFzQXR0cmlidXRlKFwicG9wb3ZlclwiKSkgcmV0dXJuO1xuXHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLWFkZGVkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtYWRkZWRcIikpO1xuXHRhdHRyKGVsLCBcImRhdGEtc3ItZW1wdHlcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1lbXB0eVwiKSk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1mb3VuZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWZvdW5kXCIpKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLWludmFsaWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1pbnZhbGlkXCIpKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLW9mXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtb2ZcIikpO1xuXHRhdHRyKGVsLCBcImRhdGEtc3ItcmVtb3ZlXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtcmVtb3ZlXCIpKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLXJlbW92ZWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1yZW1vdmVkXCIpKTtcblx0YXR0cihlbC5saXN0LCBcImRhdGEtc3ItcGx1cmFsXCIsIGdldFRleHQoc3R5bGUsIFwiZGF0YWxpc3QtcGx1cmFsXCIpKTtcblx0YXR0cihlbC5saXN0LCBcImRhdGEtc3Itc2luZ3VsYXJcIiwgZ2V0VGV4dChzdHlsZSwgXCJkYXRhbGlzdC1zaW5ndWxhclwiKSk7XG5cdGF0dHIoZWwubGlzdCwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJDb3VudGVyKGlucHV0OiBIVE1MSW5wdXRFbGVtZW50KSB7XG5cdGNvbnN0IGVsID0gaW5wdXQ/Lm5leHRFbGVtZW50U2libGluZztcblx0Y29uc3QgbGltaXQgPSBlbCAmJiBhdHRyKGVsLCBcImRhdGEtY291bnRcIik7XG5cblx0aWYgKGVsICYmIGxpbWl0KSB7XG5cdFx0Y29uc3QgcmVtYWluZGVyID0gTnVtYmVyKGxpbWl0KSAtIGlucHV0LnZhbHVlLmxlbmd0aDtcblx0XHRjb25zdCBuZXh0SW52YWxpZCA9IHJlbWFpbmRlciA8IDA7XG5cdFx0Y29uc3QgcHJldkludmFsaWQgPSBhdHRyKGVsLCBcImFyaWEtbGl2ZVwiKSA9PT0gXCJwb2xpdGVcIjtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsIHx8IGlucHV0KTtcblx0XHRjb25zdCBvdmVyID0gZ2V0VGV4dChzdHlsZSwgXCJjb3VudC1vdmVyXCIpO1xuXHRcdGNvbnN0IHVuZGVyID0gZ2V0VGV4dChzdHlsZSwgXCJjb3VudC11bmRlclwiKTtcblxuXHRcdGlmIChwcmV2SW52YWxpZCAhPT0gbmV4dEludmFsaWQpIHtcblx0XHRcdGF0dHIoZWwsIFwiYXJpYS1saXZlXCIsIG5leHRJbnZhbGlkID8gXCJwb2xpdGVcIiA6IFwib2ZmXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBjc3Mgb2YgQ1NTX1ZBTElEQVRJT05TKSBlbC5jbGFzc0xpc3QudG9nZ2xlKGNzcywgbmV4dEludmFsaWQpO1xuXHRcdH1cblx0XHRlbC50ZXh0Q29udGVudCA9IChuZXh0SW52YWxpZCA/IG92ZXIgOiB1bmRlcikucmVwbGFjZShcblx0XHRcdFwiJWRcIixcblx0XHRcdGAke01hdGguYWJzKHJlbWFpbmRlcil9YCxcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZSh7IHRhcmdldDogZWwsIG5ld1N0YXRlIH06IEV2ZW50ICYgeyBuZXdTdGF0ZT86IHN0cmluZyB9KSB7XG5cdGlmIChlbCBpbnN0YW5jZW9mIFVIVE1MRGF0YUxpc3RFbGVtZW50KSB7XG5cdFx0Y29uc3Qgcm9vdCA9IGVsLmdldFJvb3ROb2RlKCkgYXMgU2hhZG93Um9vdCB8IG51bGw7XG5cdFx0Y29uc3QgYW5jaG9yID0gcm9vdD8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG5cdFx0XHRgW3BvcG92ZXJ0YXJnZXQ9XCIke2VsLmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJjbG9zZWRcIikgYW5jaG9yUG9zaXRpb24oZWwsIGZhbHNlKTtcblx0XHRlbHNlIGlmIChhbmNob3IpIHtcblx0XHRcdGVsLnN0eWxlLndpZHRoID0gYCR7YW5jaG9yLmNsaWVudFdpZHRofXB4YDtcblx0XHRcdGFuY2hvclBvc2l0aW9uKGVsLCBhbmNob3IsIFwiYm90dG9tXCIsIHRydWUpO1xuXHRcdH1cblx0fVxufVxuLy8gVXBkYXRlIHdoZW4gdHlwaW5nXG5mdW5jdGlvbiBoYW5kbGVJbnB1dCh7IHRhcmdldCB9OiBFdmVudCkge1xuXHRpZiAoaXNJbnB1dExpa2UodGFyZ2V0KSkge1xuXHRcdHJlbmRlckNvdW50ZXIodGFyZ2V0KTtcblx0XHRyZW5kZXJUZXh0YXJlYVNpemUodGFyZ2V0KTtcblx0fVxufVxuXG4vLyBQcmV2ZW50IGJyb3dzZXJzIGZyb20gc2hvd2luZyBkZWZhdWx0IHZhbGlkYXRpb24gYnViYmxlc1xuZnVuY3Rpb24gaGFuZGxlSW52YWxpZChldmVudDogRXZlbnQpIHtcblx0aWYgKChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihgLiR7Q1NTX0ZJRUxEfWApKVxuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59XG5cbi8vIFBvc2l0aW9uIGNvbWJvYm94IHdoZW4gY2hhbmdpbmcgY29udGVudFxuZnVuY3Rpb24gaGFuZGxlQmVmb3JlQ2hhbmdlKHsgdGFyZ2V0OiBlbCB9OiBFdmVudCkge1xuXHRjb25zdCBsaXN0ID0gZWwgaW5zdGFuY2VvZiBVSFRNTENvbWJvYm94RWxlbWVudCAmJiBlbC5saXN0O1xuXHRpZiAobGlzdCAmJiAhbGlzdD8uaGlkZGVuKVxuXHRcdHNldFRpbWVvdXQoKCkgPT4gYW5jaG9yUG9zaXRpb24obGlzdCwgZWwsIDIsIHRydWUpLCAxMCk7IC8vIFJlcG9zaXRpb24gbGlzdCBpZiBub3QgaGlkZGVuXG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRCwgaGFuZGxlTXV0YXRpb24pO1xuXHRvbihkb2N1bWVudCwgXCJiZWZvcmVjaGFuZ2VcIiwgaGFuZGxlQmVmb3JlQ2hhbmdlLCBRVUlDS19FVkVOVCk7XG5cdG9uKGRvY3VtZW50LCBcImlucHV0XCIsIGhhbmRsZUlucHV0LCBRVUlDS19FVkVOVCk7XG5cdG9uKGRvY3VtZW50LCBcImludmFsaWRcIiwgaGFuZGxlSW52YWxpZCwgdHJ1ZSk7IC8vIFVzZSBjYXB0dXJlIGFzIGludmFsaWQgZG9lcyBub2UgYnViYmxlXG5cdG9uKGRvY3VtZW50LCBcInRvZ2dsZVwiLCBoYW5kbGVUb2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgaXNJbnB1dExpa2UsIG9uTG9hZGVkLCBvbk11dGF0aW9uLCB1c2VJZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRklFTERTRVQgPSBzdHlsZXMuZmllbGRzZXQuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1ZBTElEQVRJT04gPSBzdHlsZXMudmFsaWRhdGlvbi5zcGxpdChcIiBcIilbMF07XG5jb25zdCBBUklBX0RFU0MgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEFSSUFfSU5WQUxJRCA9IFwiYXJpYS1pbnZhbGlkXCI7XG5cbi8vIFVzaW5nIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0byBlbnN1cmUgaXQgcnVucyBhZnRlciBmaWVsZC1vYnNlcnZlclxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oZmllbGRzZXRzOiBIVE1MQ29sbGVjdGlvbk9mPEVsZW1lbnQ+KSB7XG5cdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBmaWVsZHNldCBvZiBmaWVsZHNldHMpXG5cdFx0XHRpZiAoZmllbGRzZXQuaXNDb25uZWN0ZWQpIHtcblx0XHRcdFx0Y29uc3QgaW5wdXRzOiBIVE1MSW5wdXRFbGVtZW50W10gPSBbXTtcblx0XHRcdFx0bGV0IHZhbGlkYXRpb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiBmaWVsZHNldC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpIHtcblx0XHRcdFx0XHRpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkgdmFsaWRhdGlvbklkID0gdXNlSWQoZWwpO1xuXHRcdFx0XHRcdGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSkgaW5wdXRzLnB1c2goZWwpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dHMpIHtcblx0XHRcdFx0XHRjb25zdCBkZXNjID0gYXR0cihpbnB1dCwgQVJJQV9ERVNDKT8ucmVwbGFjZSh2YWxpZGF0aW9uSWQgfHwgXCIjXCIsIFwiXCIpO1xuXG5cdFx0XHRcdFx0YXR0cihpbnB1dCwgQVJJQV9ERVNDLCBgJHt2YWxpZGF0aW9uSWQgfHwgXCJcIn0gJHtkZXNjIHx8IFwiXCJ9YC50cmltKCkpO1xuXHRcdFx0XHRcdGF0dHIoaW5wdXQsIEFSSUFfSU5WQUxJRCwgYCR7ISF2YWxpZGF0aW9uSWR9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfRklFTERTRVQsIGhhbmRsZU11dGF0aW9uKSxcbik7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0xPR08gPSBzdHlsZXMubG9nby5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKFtsb2dvXTogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0aWYgKGxvZ28/LmlzQ29ubmVjdGVkICYmIGxvZ28/LmZpcnN0RWxlbWVudENoaWxkIGluc3RhbmNlb2YgU1ZHU1ZHRWxlbWVudCkge1xuXHRcdGZvciAoY29uc3QgaWNvbiBvZiBkb2N1bWVudC5oZWFkLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaW5rW3JlbH49J2ljb24nXVwiKSlcblx0XHRcdGljb24uc2V0QXR0cmlidXRlKFwicmVsXCIsIFwiZGlzYWJsZWRcIik7IC8vIERpc2FibGUgcHJldmlvdXMgaWNvbiAoYnV0IG5vdCByZW1vdmUgaXMgYXMgdGhpcyBtYWtlcyBOZXh0LmpzIHNhZClcblxuXHRcdGNvbnN0IHN2ZyA9IGxvZ28uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0Y29uc3QgaXNEb3QgPSBsb2dvPy5oYXNBdHRyaWJ1dGUoXCJkYXRhLWVudlwiKTtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHN2Zyk7XG5cdFx0Y29uc3QgdGV4dCA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJjb2xvclwiKTtcblx0XHRjb25zdCBiYWNrID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIi0tbXRkcy1sb2dvLWNvbG9yXCIpO1xuXHRcdGNvbnN0IGljb24gPSBzdmcub3V0ZXJIVE1MXG5cdFx0XHQucmVwbGFjZSgvXFxuKy9nLCBcIiBcIikgLy8gUHJldmVudCBsaW5lIGJyZWFrc1xuXHRcdFx0LnJlcGxhY2UoLyhmaWxsfHdpZHRofGhlaWdodHx4bWxucyk9XCJbXlwiXStcIi9naSwgXCJcIilcblx0XHRcdC5yZXBsYWNlKFwiPHN2Z1wiLCBgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiBmaWxsPVwiJHt0ZXh0fVwiYCk7XG5cblx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFxuXHRcdFx0T2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKSwge1xuXHRcdFx0XHRocmVmOiBgZGF0YTppbWFnZS9zdmcreG1sLCR7ZW5jb2RlVVJJQ29tcG9uZW50KGA8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDU1IDU1Jz48cmVjdCBmaWxsPScke2lzRG90ID8gXCJub25lXCIgOiBiYWNrfScgd2lkdGg9JzUxJyBoZWlnaHQ9JzUxJyB4PScyJyB5PScyJyBzdHJva2U9JyR7dGV4dH0nIHN0cm9rZS1kYXNoYXJyYXk9JzAuMDkgNi4zOCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2Utb3BhY2l0eT0nJHtpc0RvdCA/IDAuNiA6IDB9JyBzdHJva2Utd2lkdGg9JzIuMycgcng9JzI1LjUnLz48ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNy41IDcuNSlcIj4ke2ljb259PC9nPjwvc3ZnPmApfWAsXG5cdFx0XHRcdHJlbDogXCJpY29uXCIsXG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfTE9HTywgaGFuZGxlTXV0YXRpb24pKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBRVUlDS19FVkVOVCwgYW5jaG9yUG9zaXRpb24sIGF0dHIsIG9uLCBvbkxvYWRlZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfUE9QT1ZFUiA9IHN0eWxlcy5wb3BvdmVyLnNwbGl0KFwiIFwiKVswXTtcbmxldCBPUEVOX1BPUE9WRVJTID0gMDsgLy8gU3BlZWQgdXAgYnkgb25seSBjaGVja2luZyBjbGlja3MgaWYgd2UgaGF2ZSBvcGVuIHBvcG92ZXJzXG5cbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZSh7IHRhcmdldDogZWwsIG5ld1N0YXRlIH06IEV2ZW50ICYgeyBuZXdTdGF0ZT86IHN0cmluZyB9KSB7XG5cdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGVsLmNsYXNzTGlzdC5jb250YWlucyhDU1NfUE9QT1ZFUikpIHtcblx0XHRjb25zdCBhbmNob3IgPSAoZWwuZ2V0Um9vdE5vZGUoKSBhcyBTaGFkb3dSb290KT8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG5cdFx0XHRgW3BvcG92ZXJ0YXJnZXQ9XCIke2VsLmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJjbG9zZWRcIikge1xuXHRcdFx0T1BFTl9QT1BPVkVSUyAtPSAxO1xuXHRcdFx0YW5jaG9yUG9zaXRpb24oZWwsIGZhbHNlKTtcblx0XHR9IGVsc2UgaWYgKGFuY2hvcikge1xuXHRcdFx0T1BFTl9QT1BPVkVSUyArPSAxO1xuXHRcdFx0YW5jaG9yUG9zaXRpb24oZWwsIGFuY2hvciwgYXR0cihlbCwgXCJkYXRhLXBvc2l0aW9uXCIpIHx8IFwiYm90dG9tXCIpO1xuXHRcdH1cblx0fVxufVxuXG4vLyBQb2x5ZmlsbCBwb3BvdmVydGFyZ2V0IGZvciA8YT4gKG5vdCBzdXBwb3J0ZWQgYnkgbmF0aXZlKVxuLy8gYW5kIGF1dG9tYXRpY2FsbHkgYXNzdW1lIHBvcG92ZXJ0YXJnZXQgaXMgdGhlIGNsb3Nlc3QgcGFyZW50IHBvcG92ZXJcbi8vIGJ1dCByZXNwZWN0IHRoZSBwb3BvdmVydGFyZ2V0IGFuZCBwb3BvdmVydGFyZ2V0YWN0aW9uIGF0dHJpYnV0ZVxuZnVuY3Rpb24gaGFuZGxlTGlua0NsaWNrKHsgdGFyZ2V0IH06IEV2ZW50KSB7XG5cdGNvbnN0IGNsb3NlID1cblx0XHRPUEVOX1BPUE9WRVJTICYmICh0YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImEsW3BvcG92ZXJ0YXJnZXRhY3Rpb25dXCIpO1xuXG5cdGlmIChjbG9zZSkge1xuXHRcdGNvbnN0IGFjdGlvbiA9IGF0dHIoY2xvc2UsIFwicG9wb3ZlcnRhcmdldGFjdGlvblwiKSB8fCBcInRvZ2dsZVwiO1xuXHRcdGNvbnN0IG9wZW4gPSBhY3Rpb24gPT09IFwic2hvd1wiIHx8IChhY3Rpb24gPT09IFwiaGlkZVwiID8gZmFsc2UgOiB1bmRlZmluZWQpO1xuXHRcdGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGF0dHIoY2xvc2UsIFwicG9wb3ZlcnRhcmdldFwiKSB8fCBcIlwiKTtcblx0XHRjb25zdCBwb3BvdmVyID0gKHRhcmdldCB8fCBjbG9zZSkuY2xvc2VzdDxIVE1MRWxlbWVudD4oYC4ke0NTU19QT1BPVkVSfWApO1xuXG5cdFx0Ly8gUG9wb3ZlciBjYW4gYmUgZGlzY29ubmV0ZWQgYnkgY2xpY2sgaGFuZGxlciBkZWVwZXIgZG93biBpbiB0aGUgRE9NIHRocmVlIGJlZm9yZSByZWFjaGluZyBkb2N1bWVudFxuXHRcdGlmIChwb3BvdmVyPy5pc0Nvbm5lY3RlZCAmJiBwb3BvdmVyPy50b2dnbGVQb3BvdmVyKVxuXHRcdFx0cG9wb3Zlci50b2dnbGVQb3BvdmVyKG9wZW4pO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwidG9nZ2xlXCIsIGhhbmRsZVRvZ2dsZSwgUVVJQ0tfRVZFTlQpOyAvLyBVc2UgY2FwdHVyZSBzaW5jZSB0b2dnbGUgZG9lcyBub3QgYnViYmxlXG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZUxpbmtDbGljayk7IC8vIEFsbG93IGA8YT5gIHRvIHVzZSBgcG9wb3ZlcnRhcmdldGAgYXMgd2VsbFxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1RBQkxFID0gc3R5bGVzLnRhYmxlLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24odGFibGVzOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxUYWJsZUVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgdGFibGUgb2YgdGFibGVzKSB7XG5cdFx0Y29uc3QgdGhzOiBzdHJpbmdbXSA9IFtdOyAvLyBBZGQgZGF0YS10aD1cIlwiIHRvIGVhY2ggY2VsbCB0byBzdXBwb3J0IGRhdGEtbW9iaWxlIGRlc2lnbnNcblxuXHRcdGF0dHIodGFibGUsIFwicm9sZVwiLCBcInRhYmxlXCIpOyAvLyBBZGQgaGVscGluZyByb2xlPVwiXCIgdG8gZW5zdXJlIHNjcmVlbiByZWFkZXJzIHVuZGVyc3RhbmQgdGhlIHRhYmxlIHJlZ2FyZGxlc3Mgb2YgQ1NTIGRpc3BsYXlcblx0XHRpZiAodGFibGUuY2FwdGlvbikgYXR0cih0YWJsZS5jYXB0aW9uLCBcInJvbGVcIiwgXCJjYXB0aW9uXCIpO1xuXHRcdGZvciAoY29uc3QgZ3JvdXAgb2YgW3RhYmxlLnRIZWFkLCB0YWJsZS50Rm9vdCwgLi4udGFibGUudEJvZGllc10pXG5cdFx0XHRpZiAoZ3JvdXApIHtcblx0XHRcdFx0YXR0cihncm91cCwgXCJyb2xlXCIsIFwicm93Z3JvdXBcIik7XG5cdFx0XHRcdGNvbnN0IGlzVGJvZHkgPSBncm91cC5ub2RlTmFtZSA9PT0gXCJUQk9EWVwiO1xuXG5cdFx0XHRcdGZvciAoY29uc3Qgcm93IG9mIGdyb3VwLnJvd3MpIHtcblx0XHRcdFx0XHRhdHRyKHJvdywgXCJyb2xlXCIsIFwicm93XCIpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgY2VsbCBvZiByb3cuY2VsbHMpIHtcblx0XHRcdFx0XHRcdGlmIChpc1Rib2R5KSBhdHRyKGNlbGwsIFwiZGF0YS10aFwiLCB0aHNbY2VsbC5jZWxsSW5kZXhdIHx8IFwiOmVtcHR5XCIpO1xuXHRcdFx0XHRcdFx0ZWxzZSB0aHMucHVzaChjZWxsLmlubmVyVGV4dC50cmltKCkpOyAvLyBVc2luZyBpbm5lclRleHQgdG8gb25seSBpbmNsdWRlIHZpc2libGUgdGV4dFxuXHRcdFx0XHRcdFx0aWYgKGNlbGwubm9kZU5hbWUgPT09IFwiVERcIikgYXR0cihjZWxsLCBcInJvbGVcIiwgXCJjZWxsXCIpO1xuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJyb2xlXCIsIGlzVGJvZHkgPyBcInJvd2hlYWRlclwiIDogXCJjb2x1bW5oZWFkZXJcIik7XG5cdFx0XHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJzY29wZVwiLCBpc1Rib2R5ID8gXCJyb3dcIiA6IFwiY29sXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfVEFCTEUsIGhhbmRsZU11dGF0aW9uKSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgb24sIG9uTG9hZGVkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UT0dHTEVHUk9VUCA9IGAuJHtzdHlsZXMudG9nZ2xlZ3JvdXAuc3BsaXQoXCIgXCIpWzBdfWA7XG5cbi8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBzaG93aW5nIGRlZmF1bHQgdmFsaWRhdGlvbiBidWJibGVzXG5mdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50OiBFdmVudCAmIFBhcnRpYWw8S2V5Ym9hcmRFdmVudD4pIHtcblx0Y29uc3QgeyBrZXksIHRhcmdldDogZWwgfSA9IGV2ZW50O1xuXHRjb25zdCBncm91cCA9IGVsIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBlbC5jbG9zZXN0KENTU19UT0dHTEVHUk9VUCk7XG5cblx0aWYgKCFncm91cCkgcmV0dXJuO1xuXHRpZiAoa2V5ID09PSBcIkVudGVyXCIpIGVsLmNsaWNrKCk7XG5cdGlmIChrZXk/LnN0YXJ0c1dpdGgoXCJBcnJvd1wiKSkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0Y29uc3QgaW5wdXRzID0gZ3JvdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKTtcblx0XHRjb25zdCBpbmRleCA9IFsuLi5pbnB1dHNdLmluZGV4T2YoZWwpO1xuXHRcdGNvbnN0IG1vdmUgPSBrZXkubWF0Y2goL0Fycm93KFJpZ2h0fERvd24pLykgPyAxIDogLTE7XG5cdFx0aW5wdXRzWyhpbnB1dHMubGVuZ3RoICsgaW5kZXggKyBtb3ZlKSAlIGlucHV0cy5sZW5ndGhdPy5mb2N1cygpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bikpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdElTX0JST1dTRVIsXG5cdFFVSUNLX0VWRU5ULFxuXHRhbmNob3JQb3NpdGlvbixcblx0YXR0cixcblx0b24sXG5cdG9uTG9hZGVkLFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgREVTQ1JJQkVEQlkgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEVTQyA9IFwiRXNjYXBlXCI7XG5jb25zdCBMQUJFTExFREJZID0gXCJhcmlhLWxhYmVsbGVkYnlcIjtcbmNvbnN0IFBPU0lUSU9OX0NTU19QUk9QRVJUWSA9IFwiLS1tdGRzLXRvb2x0aXAtcG9zaXRpb25cIjtcbmNvbnN0IFRIUk9UVExFX0RFTEFZID0gMzAwO1xuY29uc3QgVE9PTFRJUCA9IElTX0JST1dTRVJcblx0PyBPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIHtcblx0XHRcdGNsYXNzTmFtZTogc3R5bGVzLl90b29sdGlwLFxuXHRcdFx0aWQ6IFwibXRkcy10b29sdGlwXCIsXG5cdFx0XHRwb3BvdmVyOiBcIm1hbnVhbFwiLFxuXHRcdH0pXG5cdDogbnVsbDsgLy8gQ3JlYXRlIGEgZHVtbXkgZWxlbWVudCB0byBhdm9pZCBudWxsIGNoZWNrc1xuXG5sZXQgQU5DSE9SOiBFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5sZXQgTEFTVF9DQUxMID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xubGV0IFRIUk9UVExFOiBudW1iZXIgfCBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiA9IDA7XG5cbmZ1bmN0aW9uIGhhbmRsZU1vdmUoeyB0YXJnZXQsIHR5cGUsIGtleSB9OiBFdmVudCAmIHsga2V5Pzogc3RyaW5nIH0pIHtcblx0aWYgKHR5cGUgPT09IFwia2V5ZG93blwiICYmIGtleSAhPT0gRVNDKSByZXR1cm47IC8vIEFsbG93IEVTQyBkaXNtaXNzIHRvIGZvbGxvdyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL3Rvb2x0aXAvXG5cdGNvbnN0IHdhaXQgPSBMQVNUX0NBTEwgKyBUSFJPVFRMRV9ERUxBWSAtIERhdGUubm93KCk7XG5cdGNsZWFyVGltZW91dChUSFJPVFRMRSk7XG5cdFRIUk9UVExFID0gc2V0VGltZW91dChcblx0XHRoYW5kbGVNb3ZlVGhyb3R0bGVkLFxuXHRcdE1hdGgubWF4KHdhaXQsIDApLFxuXHRcdGtleSA9PT0gRVNDID8gbnVsbCA6IHRhcmdldCxcblx0KTtcbn1cblxuLy8gVXNpbmcgYSB0aHJvdHRsZWQgZnVuY3Rpb24gdG8gYXZvaWQgcGVyZm9ybWFuY2UgaXNzdWVzXG5mdW5jdGlvbiBoYW5kbGVNb3ZlVGhyb3R0bGVkKHRhcmdldDogRWxlbWVudCB8IG51bGwpIHtcblx0TEFTVF9DQUxMID0gRGF0ZS5ub3coKTtcblxuXHQvLyBCdWlsZCBhbmQgYXBwZW5kIHRvb2x0aXAgaWYgbm90IGV4aXN0aW5nXG5cdGlmICghVE9PTFRJUCB8fCB0YXJnZXQgPT09IFRPT0xUSVApIHJldHVybjsgLy8gQWxsb3cgdG9vbHRpcCB0byBiZSBob3ZlcmVkLCBmb2xsb3dpbmcgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMS8jY29udGVudC1vbi1ob3Zlci1vci1mb2N1c1xuXHRpZiAoIVRPT0xUSVA/LmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChUT09MVElQKTsgLy8gRW5zdXJlIGNvbm5lY3RlZFxuXHRsZXQgYW5jaG9yID0gdGFyZ2V0Py5jbG9zZXN0Py48RWxlbWVudD4oXCJbZGF0YS10b29sdGlwXVwiKSB8fCBudWxsO1xuXG5cdC8vIE5vIG5lZWQgdG8gdXBkYXRlXG5cdGlmIChhbmNob3IgPT09IEFOQ0hPUikgcmV0dXJuO1xuXG5cdGNvbnN0IGNvbnRlbnQgPSAoYW5jaG9yICYmIGF0dHIoYW5jaG9yLCBcImRhdGEtdG9vbHRpcFwiKSkgfHwgXCJcIjtcblx0Y29uc3QgcG9zaXRpb24gPVxuXHRcdChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwLXBvc2l0aW9uXCIpKSB8fFxuXHRcdHdpbmRvd1xuXHRcdFx0LmdldENvbXB1dGVkU3R5bGUoYW5jaG9yIHx8IGRvY3VtZW50LmJvZHkpXG5cdFx0XHQuZ2V0UHJvcGVydHlWYWx1ZShQT1NJVElPTl9DU1NfUFJPUEVSVFkpXG5cdFx0XHQ/LnRyaW0oKSB8fFxuXHRcdFwidG9wXCI7XG5cblx0Y29uc3QgaXNIaWRkZW4gPVxuXHRcdCFjb250ZW50IHx8XG5cdFx0Y29udGVudCA9PT0gXCJmYWxzZVwiIHx8XG5cdFx0Y29udGVudCA9PT0gXCJ0cnVlXCIgfHxcblx0XHRwb3NpdGlvbiA9PT0gXCJub25lXCI7XG5cblx0aWYgKGlzSGlkZGVuKSBhbmNob3IgPSBudWxsOyAvLyBEbyBub3Qgc2hvdyB0b29sdGlwIGlmIGJvb2xpc2ggdmFsdWVcblx0aWYgKGFuY2hvcikgVE9PTFRJUC50ZXh0Q29udGVudCA9IGNvbnRlbnQ7IC8vIE9ubHkgdXBkYXRlIGNvbnRlbnQgaWYgbmV3IGFuY2hvclxuXG5cdGNvbnN0IGhhZExhYmVsID0gQU5DSE9SICYmIGF0dHIoQU5DSE9SLCBMQUJFTExFREJZKSA9PT0gVE9PTFRJUD8uaWQ7XG5cdGNvbnN0IGhhc0xhYmVsID1cblx0XHQoYW5jaG9yIGluc3RhbmNlb2YgSFRNTEVsZW1lbnRcblx0XHRcdD8gYW5jaG9yLmlubmVyVGV4dFxuXHRcdFx0OiBhbmNob3I/LnRleHRDb250ZW50XG5cdFx0KT8udHJpbSgpIHx8XG5cdFx0YW5jaG9yPy5oYXNBdHRyaWJ1dGUoTEFCRUxMRURCWSkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShcImFyaWEtbGFiZWxcIik7XG5cblx0QU5DSE9SPy5yZW1vdmVBdHRyaWJ1dGUoaGFkTGFiZWwgPyBMQUJFTExFREJZIDogREVTQ1JJQkVEQlkpOyAvLyBVbmxpbmsgcHJldmlvdXMgYW5jaG9yXG5cdGFuY2hvclBvc2l0aW9uKFRPT0xUSVAsIGZhbHNlKTsgLy8gUmVzZXQgYW5jaG9yIHBvc2l0aW9uXG5cblx0QU5DSE9SID0gYW5jaG9yOyAvLyBTdG9yZSBuZXcgYW5jaG9yIC0gbWlnaHQgYmUgbnVsbCBpZiBubyBuZXcgYW5jaG9yXG5cdGlmIChBTkNIT1IpIGF0dHIoQU5DSE9SLCBoYXNMYWJlbCA/IERFU0NSSUJFREJZIDogTEFCRUxMRURCWSwgVE9PTFRJUD8uaWQpOyAvLyBVc2UgdG9vbHRpcCBhcyBkZXNjcmlwdGlvbiBpZiBhbGxyZWFkeSBoYXMgbGFiZWxcblx0VE9PTFRJUC50b2dnbGVQb3BvdmVyKCEhYW5jaG9yKTtcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgYW5jaG9yIHx8IGZhbHNlLCBwb3NpdGlvbik7XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwiYmx1cixmb2N1cyxtb3VzZW91dCxtb3VzZW92ZXJcIiwgaGFuZGxlTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwia2V5ZG93blwiLCBoYW5kbGVNb3ZlLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJibHVyXCIsIGhhbmRsZU1vdmUsIFFVSUNLX0VWRU5UKTtcbn0pO1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG5cbi8vIHUtZGV0YWlscy50c1xudmFyIFVIVE1MRGV0YWlsc0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgLy8gVXNpbmcgdW5kZXJzY29yZSBpbnN0ZWFkIG9mIHByaXZhdGUgZmllbGRzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBuYW1lOiBcInN1bW1hcnlcIiB9KSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgcGFydDogXCJkZXRhaWxzLWNvbnRlbnRcIiB9KSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYCR7RElTUExBWV9CTE9DS31cbiAgICAgICAgOjpzbG90dGVkKHUtc3VtbWFyeSkgeyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGJsb2NrIH1cblx0XHRcdFx0OjpzbG90dGVkKHUtc3VtbWFyeSk6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi1pbmxpbmU6IC4wNWVtIC4zMTI1ZW07IGJvcmRlci1ibG9jazogLjMxMjVlbSBzb2xpZCB0cmFuc3BhcmVudDsgYm9yZGVyLWlubGluZS1zdGFydDogLjVlbSBzb2xpZCB9XG5cdFx0XHRcdDo6c2xvdHRlZCh1LXN1bW1hcnlbYXJpYS1leHBhbmRlZD1cInRydWVcIl0pOjpiZWZvcmUgeyByb3RhdGU6IDkwZGVnIH1cblx0XHRcdFx0Omhvc3QgPiBbcGFydD1cImRldGFpbHMtY29udGVudFwiXTpub3QoW2hpZGRlbj1cIlwiXSkgeyBkaXNwbGF5OiBibG9jayB9YFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcIm9wZW5cIl07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdmFyIF9hMjtcbiAgICB0aGlzLl9jb250ZW50ID0gKF9hMiA9IHRoaXMuc2hhZG93Um9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jaGlsZHJlblsxXTtcbiAgICBvbih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLl9jb250ZW50KSBvZmYodGhpcy5fY29udGVudCwgXCJiZWZvcmVtYXRjaFwiLCB0aGlzKTtcbiAgICBvZmYodGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBwcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgaGlkZSA9IFwib25iZWZvcmVtYXRjaFwiIGluIHRoaXMgPyBcInVudGlsLWZvdW5kXCIgOiB0cnVlO1xuICAgIGNvbnN0IG9wZW4gPSB0aGlzLm9wZW47XG4gICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLmNoaWxkcmVuKVxuICAgICAgaWYgKGVsLm5vZGVOYW1lID09PSBcIlUtU1VNTUFSWVwiKSBhdHRyKGVsLCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7b3Blbn1gKTtcbiAgICBpZiAodGhpcy5fY29udGVudCkge1xuICAgICAgYXR0cih0aGlzLl9jb250ZW50LCBcImFyaWEtaGlkZGVuXCIsIGAkeyFvcGVufWApO1xuICAgICAgdGhpcy5fY29udGVudC5oaWRkZW4gPSBvcGVuID8gZmFsc2UgOiBoaWRlO1xuICAgIH1cbiAgICBpZiAob3BlbiAmJiB0aGlzLm5hbWUpIHtcbiAgICAgIGNvbnN0IHVEZXRhaWxzTGlzdCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYCR7dGhpcy5ub2RlTmFtZX1bbmFtZT1cIiR7dGhpcy5uYW1lfVwiXWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IHVEZXRhaWxzIG9mIHVEZXRhaWxzTGlzdClcbiAgICAgICAgaWYgKHVEZXRhaWxzICE9PSB0aGlzKSB1RGV0YWlscy5vcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChwcm9wID09PSBcIm9wZW5cIiAmJiBwcmV2ID09PSBudWxsICE9PSAobmV4dCA9PT0gbnVsbCkpXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwidG9nZ2xlXCIpKTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCI6c2NvcGUgPiB1LXN1bW1hcnlcIik7XG4gICAgY29uc3QgaXNTdW1tYXJ5ID0gc3VtbWFyeSA9PSBudWxsID8gdm9pZCAwIDogc3VtbWFyeS5jb250YWlucyhldmVudC50YXJnZXQpO1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmVmb3JlbWF0Y2hcIikgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICBpZiAoaXNTdW1tYXJ5ICYmIGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiKSBhc0J1dHRvbihldmVudCk7XG4gICAgaWYgKGlzU3VtbWFyeSAmJiBldmVudC50eXBlID09PSBcImNsaWNrXCIpIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG4gIH1cbiAgZ2V0IG9wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwib3BlblwiKTtcbiAgfVxuICBzZXQgb3Blbih2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJvcGVuXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFwibmFtZVwiKSB8fCBcIlwiO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcIm5hbWVcIiwgdmFsdWUpO1xuICB9XG59O1xudmFyIFVIVE1MU3VtbWFyeUVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIHRoaXMuc2xvdCA9IFwic3VtbWFyeVwiO1xuICAgIHRoaXMudGFiSW5kZXggPSAwO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1kZXRhaWxzXCIsIFVIVE1MRGV0YWlsc0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1zdW1tYXJ5XCIsIFVIVE1MU3VtbWFyeUVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERldGFpbHNFbGVtZW50LCBVSFRNTFN1bW1hcnlFbGVtZW50IH07XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfRklSRUZPWCA9IElTX0JST1dTRVIgJiYgL2ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBfYTI7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gKF9hMiA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKSkgIT0gbnVsbCA/IF9hMiA6IG51bGw7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIGdldExhYmVsID0gKGVsKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSBnZXRSb290KGVsKTtcbiAgY29uc3QgbGFiZWwgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikgfHwgXCJcIjtcbiAgY29uc3QgbGFiZWxzID0gKChfYTIgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxsZWRieVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkuc3BsaXQoL1xccysvKSkgfHwgW107XG4gIHJldHVybiBbXG4gICAgLi4ubGFiZWxzLm1hcCgoaWQyKSA9PiByb290ID09IG51bGwgPyB2b2lkIDAgOiByb290LnF1ZXJ5U2VsZWN0b3IoYFtpZD1cIiR7aWQyfVwiXWApKSxcbiAgICAvLyBHZXQgYWxsIGxhYmVsbGVkYnkgZWxlbWVudHNcbiAgICAuLi5BcnJheS5mcm9tKGVsLmxhYmVscyB8fCBbXSlcbiAgICAvLyBHZXQgYWxsIDxsYWJlbD4gZWxlbWVudHNcbiAgXS5yZWR1Y2UoKGFjYywgZWwyKSA9PiB7XG4gICAgdmFyIF9hMztcbiAgICByZXR1cm4gYWNjIHx8ICgoX2EzID0gZWwyID09IG51bGwgPyB2b2lkIDAgOiBlbDIuaW5uZXJUZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnRyaW0oKSkgfHwgXCJcIjtcbiAgfSwgbGFiZWwpO1xufTtcblxuLy8gdS1wcm9ncmVzcy50c1xudmFyIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbnZhciBVSFRNTFByb2dyZXNzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIiwgXCJ2YWx1ZVwiLCBcIm1heFwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBoaWRkZW46IFwiXCIgfSksXG4gICAgICAvLyBTbG90IGhpZGluZyBjb250ZW50IGFsbG93cyBsZWdhY3kgYnJvd3NlciB0byBkaXNwbGF5IGZhbGxiYWNrIHRleHRcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYDpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGJvcmRlcjogMXB4IHNvbGlkOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGhlaWdodDogLjVlbTsgd2lkdGg6IDEwZW07IG92ZXJmbG93OiBoaWRkZW4gfVxuICAgICAgICA6aG9zdDo6YmVmb3JlIHsgY29udGVudDogJyc7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDEwMCU7IGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsgd2lkdGg6IHZhcigtLXBlcmNlbnRhZ2UsIDAlKTsgdHJhbnNpdGlvbjogd2lkdGggLjJzIH1cbiAgICAgICAgOmhvc3QoOm5vdChbdmFsdWVdKSkgeyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsY3VycmVudENvbG9yIDI1JSwgdHJhbnNwYXJlbnQgNTAlLCBjdXJyZW50Q29sb3IgNzUlKSA1MCUvNDAwJSB9XG4gICAgICAgIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSkgeyA6aG9zdCB7IGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZSAycyBsaW5lYXIgaW5maW5pdGUgfSAgfVxuICAgICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUgeyBmcm9tIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAxMDAlIH0gdG8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDAgfSB9YFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKFNLSVBfQVRUUl9DSEFOR0UpIHJldHVybjtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gdHJ1ZTtcbiAgICBjb25zdCByb2xlSW1hZ2UgPSBJU19JT1MgfHwgSVNfRklSRUZPWDtcbiAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCh0aGlzLnBvc2l0aW9uICogMTAwKSk7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcGVyY2VudGFnZVwiLCBgJHtwZXJjZW50YWdlfSVgKTtcbiAgICBsZXQgbGFiZWwgPSBnZXRMYWJlbCh0aGlzKTtcbiAgICBpZiAocm9sZUltYWdlKSBsYWJlbCA9IGAke2xhYmVsLnJlcGxhY2UoL1xcZCslJC8sIFwiXCIpfSAke3BlcmNlbnRhZ2V9JWA7XG4gICAgaWYgKElTX0ZJUkVGT1gpIGZvciAoY29uc3QgZWwgb2YgdGhpcy5sYWJlbHMpIGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtYnVzeVwiLCBgJHt0aGlzLnBvc2l0aW9uID09PSAtMX1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbC50cmltKCkpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsbGVkYnlcIiwgbnVsbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtYXhcIiwgXCIxMDBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtaW5cIiwgXCIwXCIpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbm93XCIsIGAke3BlcmNlbnRhZ2V9YCk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgcm9sZUltYWdlID8gXCJpbWdcIiA6IFwicHJvZ3Jlc3NiYXJcIik7XG4gICAgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xuICB9XG4gIGdldCBsYWJlbHMoKSB7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLmNsb3Nlc3QoXCJsYWJlbDpub3QoW2Zvcl0pXCIpO1xuICAgIGNvbnN0IGlkMiA9IHVzZUlkKHRoaXMpO1xuICAgIGlmIChsYWJlbCkgbGFiZWwuaHRtbEZvciA9IGlkMjtcbiAgICBjb25zdCBlbCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGBsYWJlbFtmb3I9XCIke2lkMn1cIl1gXG4gICAgKTtcbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgZ2V0IHBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlID09PSBudWxsID8gLTEgOiBNYXRoLm1pbih0aGlzLnZhbHVlIC8gdGhpcy5tYXgsIDEpO1xuICB9XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIik7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBtYXgoKSB7XG4gICAgcmV0dXJuIGdldE51bWJlcih0aGlzLCBcIm1heFwiKSB8fCAxO1xuICB9XG4gIHNldCBtYXgobWF4KSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwibWF4XCIsIG1heCk7XG4gIH1cbn07XG4vLyBQcmV2ZW50IENocm9tZSBEZXZUb29scyB3YXJuaW5nIGFib3V0IDxsYWJlbCBmb3I9XCJcIj4gcG9pbnRpbmcgdG8gPHUtcHJvZ3Jlc3M+XG5VSFRNTFByb2dyZXNzRWxlbWVudC5mb3JtQXNzb2NpYXRlZCA9IHRydWU7XG52YXIgaXNOdW1lcmljID0gKHZhbHVlKSA9PiAhTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUZsb2F0KGAke3ZhbHVlfWApKSAmJiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKHZhbHVlKSk7XG52YXIgZ2V0TnVtYmVyID0gKGVsLCBrZXkpID0+IHtcbiAgY29uc3QgdmFsdWUgPSBhdHRyKGVsLCBrZXkpO1xuICByZXR1cm4gaXNOdW1lcmljKHZhbHVlKSA/IE1hdGgubWF4KDAsIE51bWJlci5wYXJzZUZsb2F0KHZhbHVlKSkgOiBudWxsO1xufTtcbnZhciBzZXROdW1iZXIgPSAoZWwsIGtleSwgdmFsKSA9PiB7XG4gIGlmICh2YWwgPT09IG51bGwgfHwgaXNOdW1lcmljKHZhbCkpIGF0dHIoZWwsIGtleSwgYCR7dmFsfWApO1xuICBlbHNlIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCBub24tbnVtZXJpYyAnJHthdHRyfSc6ICcke3ZhbH0nYCk7XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1wcm9ncmVzc1wiLCBVSFRNTFByb2dyZXNzRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MUHJvZ3Jlc3NFbGVtZW50IH07XG4iXSwibmFtZXMiOlsiSVNfQlJPV1NFUiIsIklTX0FORFJPSUQiLCJfYSIsIklTX0JST1dTRVIkNSIsIlNBRkVfTEFCRUxMRURCWSIsIkRJU1BMQVlfQkxPQ0siLCJVSFRNTEVsZW1lbnQiLCJhdHRyIiwiZWwiLCJuYW1lIiwidmFsdWUiLCJfYTIiLCJldmVudHMiLCJhY3Rpb24iLCJlbGVtZW50IiwicmVzdCIsInR5cGUiLCJvbiIsIm9mZiIsImF0dGFjaFN0eWxlIiwiY3NzIiwiY3JlYXRlRWxlbWVudCIsIm9ic2VydmVycyIsIm11dGF0aW9uT2JzZXJ2ZXIiLCJvcHRpb25zIiwib2JzZXJ2ZXIiLCJkZXRhaWwiLCJhc0J1dHRvbiIsImV2ZW50IiwiaXNDbGljayIsImdldFJvb3QiLCJub2RlIiwicm9vdCIsImlkIiwidXNlSWQiLCJ0YWdOYW1lIiwidGV4dCIsImF0dHJzIiwiY3VzdG9tRWxlbWVudHMiLCJpbnN0YW5jZSIsIkFSSUFfQ09OVFJPTFMiLCJBUklBX1NFTEVDVEVEIiwiVUhUTUxUYWJzRWxlbWVudCIsInF1ZXJ5V2l0aG91dE5lc3RlZCIsImdldFNlbGVjdGVkSW5kZXgiLCJpbmRleCIsInNldFNlbGVjdGVkIiwiVUhUTUxUYWJMaXN0RWxlbWVudCIsInRhYiIsImtleSIsInRhYnMiLCJwcmV2IiwibmV4dCIsIlNLSVBfQVRUUl9DSEFOR0UiLCJVSFRNTFRhYkVsZW1lbnQiLCJwYW5lbHMiLCJuZXh0UGFuZWwiLCJnZXRQYW5lbCIsInBhbmVsIiwidGFibGlzdCIsInRhYkxpc3QiLCJVSFRNTFRhYlBhbmVsRWxlbWVudCIsImlzRm9jdXNhYmxlIiwidGFnIiwic2VsZiIsImlkMiIsIl9fZGVmUHJvcCIsIl9fZ2V0T3duUHJvcFN5bWJvbHMiLCJfX2hhc093blByb3AiLCJfX3Byb3BJc0VudW0iLCJfX2RlZk5vcm1hbFByb3AiLCJvYmoiLCJfX3NwcmVhZFZhbHVlcyIsImEiLCJiIiwicHJvcCIsIklTX0ZJUkVGT1giLCJJU19JT1MiLCJJU19CUk9XU0VSJDQiLCJGT0NVU19PVVRMSU5FIiwidGV4dDIiLCJ2YWwiLCJMSVZFIiwiTElWRV9TUl9GSVgiLCJzcGVhayIsInNldFZhbHVlIiwiaW5wdXQiLCJkYXRhIiwiX2IiLCJwcm90byIsIklTX1BSRVNTIiwiRVZFTlRTIiwiRVZFTlRfT05DRSIsIklTX0ZJUkVGT1hfTUFDIiwiSVNfTU9CSUxFIiwiRkFMU0UiLCJDTElDSyIsIlRFWFRTIiwiVUhUTUxDb21ib2JveEVsZW1lbnQiLCJyZW5kZXIiLCJzeW5jSW5wdXRWYWx1ZSIsIl8iLCJ0YXJnZXQiLCJvbkJsdXIiLCJvbkNsaWNrIiwib25Gb2N1cyIsIm9uSW5wdXQiLCJvbktleURvd24iLCJpc0RhdGEiLCJfZm9jdXMiLCJfdGV4dHMiLCJpdGVtcyIsImNvbnRyb2wiLCJsaXN0IiwibXVsdGlwbGUiLCJsYWJlbCIsImVkaXRzIiwiYWRkZWROb2RlcyIsInJlbW92ZWROb2RlcyIsInNob3VsZEFubm91bmNlIiwiaW5wdXRNb2RlIiwibmV4dEZvY3VzIiwiX2EzIiwiaWR4IiwiaXRlbSIsImxhYmVsMiIsImFyaWEiLCJzZWxlY3QiLCJzeW5jQ2xlYXJXaXRoSW5wdXQiLCJzeW5jT3B0aW9uc1dpdGhJdGVtcyIsIl9zcGVhayIsInZhbHVlcyIsIm9wdCIsImRpc3BhdGNoTWF0Y2giLCJzeW5jIiwiY3JlYXRhYmxlIiwicXVlcnkiLCJtYXRjaCIsIm8iLCJkaXNwYXRjaENoYW5nZSIsInJlbW92YWJsZSIsImFkZCIsInJlbW92ZSIsImkiLCJpdGVtMiIsIm9uQmx1cnJlZCIsIngiLCJ5IiwiY2xlYXIiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJyZXBlYXQiLCJpc0NvbnRyb2wiLCJpblRleHQiLCJmb3JtIiwiUVVJQ0tfRVZFTlQiLCJkZWJvdW5jZSIsImNhbGxiYWNrIiwiZGVsYXkiLCJ0aW1lciIsImFyZ3MiLCJVVUlEIiwiU0NST0xMRVIiLCJUQVJHRVRTIiwiVEFSR0VUU19VUERBVEUiLCJ1cGRhdGUiLCJQT1NJVElPTiIsImFuY2hvclBvc2l0aW9uIiwiYW5jaG9yIiwicG9zaXRpb24iLCJmb3JjZSIsInBsYWNlIiwiaXNIVE1MQW5jaG9yIiwidGFyZ2V0VyIsInRhcmdldEgiLCJhbmNob3JXIiwiYW5jaG9ySCIsIndpZHRoIiwiaGVpZ2h0IiwiYW5jaG9yWCIsImFuY2hvclkiLCJoYXNTcGFjZUxlZnQiLCJoYXNTcGFjZVJpZ2h0IiwiaGFzU3BhY2VPdmVyIiwiaGFzU3BhY2VVbmRlciIsInBvc2l0aW9uUmlnaHQiLCJwb3NpdGlvblVuZGVyIiwiY2VudGVyWCIsImNlbnRlclkiLCJpc1ZlcnRpY2FsIiwiY3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlciIsInF1ZXVlIiwib25GcmFtZSIsIm9uVGltZXIiLCJNVVRBVE9SUyIsIm9uTXV0YXRpb24iLCJjbGFzc05hbWUiLCJlbGVtcyIsIm11dGF0b3IiLCJvbkxvYWRlZCIsInJ1biIsImlzSW5wdXRMaWtlIiwiTUFUT01PIiwiRU5BQkxFRCIsImFuYWx5dGljcyIsIm1hdG9tb0lkIiwiZW5hYmxlZCIsInVybCIsInRpdGxlIiwiY2F0ZWdvcnkiLCJ2IiwicmVzdWx0cyIsImdldFN0ZXBzIiwibm93IiwibWF4Iiwic2hvdyIsIm9mZnNldCIsInN0YXJ0IiwiZW5kIiwicGFnZXMiLCJwYWdpbmF0aW9uIiwiY3VycmVudCIsInRvdGFsIiwicGFnZSIsInNoZWV0IiwiQ1NTX0FQUCIsInN0eWxlcyIsIkNTU19TVElDS1kiLCJDU1NfVE9HR0xFIiwiQ1NTX1NJREVCQVIiLCJ1c2VUcmFuc2l0aW9uIiwidG9nZ2xlQXBwRXhwYW5kZWQiLCJoYW5kbGVUb2dnbGVDbGljayIsInNpZGViYXIiLCJoYW5kbGVSZXNpemUiLCJNSU5fWSIsIlNDUk9MTF9VUCIsIlNUSUNLIiwiU1RJQ0tfRUwiLCJTVElDS19IIiwiU1RJQ0tfWSIsIlNUVUNLIiwiV0lOX0giLCJXSU5fWSIsImhhbmRsZU11dGF0aW9uIiwic3RpY2t5IiwiaGFuZGxlU2Nyb2xsIiwiTkVYVF9ZIiwiTkVYVF9VUCIsIkNTU19CUkVBRENSVU1CUyIsImJyZWFkY3J1bWJzIiwiYnJlYWRjdW1icyIsImNydW1iIiwibGVuZ3RoIiwiQ1NTX0RJQUxPRyIsIkRJQUxPR1MiLCJoYW5kbGVNb2RhbCIsImRpYWxvZyIsImhhbmRsZUNsaWNrIiwiaGFuZGxlSW5qZWN0IiwiZmlyc3QiLCJJU19CUk9XU0VSJDIiLCJESVNBQkxFRCIsIlNFTEVDVEVEIiwiVUhUTUxPcHRpb25FbGVtZW50IiwiTElWRV9USU1FUiIsIklOUFVUX0RFQk9VTkNFIiwiRVZFTlRTX0lOUFVUIiwiVUhUTUxEYXRhTGlzdEVsZW1lbnQiLCJkaXNjb25uZWN0SW5wdXQiLCJfcHJldiIsInNldHVwSW5wdXQiLCJpc1Zpc2libGUiLCJzZXRFeHBhbmRlZCIsIm9wZW4iLCJpc0lucHV0IiwicmVsYXRlZFRhcmdldCIsIm9wdGlvbiIsIl9yb290IiwiX2lucHV0IiwiZmlsdGVyIiwidmlzaWJsZSIsImhpZGRlbiIsIkNTU19GSUVMRCIsIkNTU19WQUxJREFUSU9OUyIsIkNTU19WQUxJREFUSU9OIiwiZ2V0VGV4dCIsInN0eWxlIiwiZmllbGRzIiwiZmllbGQiLCJsYWJlbHMiLCJkZXNjcyIsImNvbWJvYm94IiwidmFsaWQiLCJkZXNjIiwicmVuZGVyQ29tYm9ib3giLCJyZW5kZXJDb3VudGVyIiwicmVuZGVyVGV4dGFyZWFTaXplIiwidGV4dGFyZWEiLCJsaW1pdCIsInJlbWFpbmRlciIsIm5leHRJbnZhbGlkIiwicHJldkludmFsaWQiLCJvdmVyIiwidW5kZXIiLCJoYW5kbGVUb2dnbGUiLCJuZXdTdGF0ZSIsImhhbmRsZUlucHV0IiwiaGFuZGxlSW52YWxpZCIsImhhbmRsZUJlZm9yZUNoYW5nZSIsIkNTU19GSUVMRFNFVCIsIkFSSUFfREVTQyIsIkFSSUFfSU5WQUxJRCIsImZpZWxkc2V0cyIsImZpZWxkc2V0IiwiaW5wdXRzIiwidmFsaWRhdGlvbklkIiwiQ1NTX0xPR08iLCJsb2dvIiwiaWNvbiIsInN2ZyIsImlzRG90IiwiYmFjayIsIkNTU19QT1BPVkVSIiwiT1BFTl9QT1BPVkVSUyIsImhhbmRsZUxpbmtDbGljayIsImNsb3NlIiwicG9wb3ZlciIsIkNTU19UQUJMRSIsInRhYmxlcyIsInRhYmxlIiwidGhzIiwiZ3JvdXAiLCJpc1Rib2R5Iiwicm93IiwiY2VsbCIsIkNTU19UT0dHTEVHUk9VUCIsImhhbmRsZUtleURvd24iLCJtb3ZlIiwiREVTQ1JJQkVEQlkiLCJFU0MiLCJMQUJFTExFREJZIiwiUE9TSVRJT05fQ1NTX1BST1BFUlRZIiwiVEhST1RUTEVfREVMQVkiLCJUT09MVElQIiwiQU5DSE9SIiwiTEFTVF9DQUxMIiwiVEhST1RUTEUiLCJoYW5kbGVNb3ZlIiwid2FpdCIsImhhbmRsZU1vdmVUaHJvdHRsZWQiLCJjb250ZW50IiwiaGFkTGFiZWwiLCJoYXNMYWJlbCIsIl9jIiwiSVNfQlJPV1NFUiQxIiwiVUhUTUxEZXRhaWxzRWxlbWVudCIsImhpZGUiLCJ1RGV0YWlsc0xpc3QiLCJ1RGV0YWlscyIsInN1bW1hcnkiLCJpc1N1bW1hcnkiLCJVSFRNTFN1bW1hcnlFbGVtZW50IiwiZ2V0TGFiZWwiLCJhY2MiLCJlbDIiLCJVSFRNTFByb2dyZXNzRWxlbWVudCIsInJvbGVJbWFnZSIsInBlcmNlbnRhZ2UiLCJnZXROdW1iZXIiLCJzZXROdW1iZXIiLCJpc051bWVyaWMiXSwibWFwcGluZ3MiOiJrQ0FDQSxJQUFJQSxHQUFhLE9BQU8sT0FBVyxLQUFlLE9BQU8sT0FBTyxTQUFhLEtBQWUsT0FBTyxPQUFPLFVBQWMsSUFDcEhDLEdBQWFELElBQWMsV0FBVyxLQUFLLFVBQVUsU0FBUyxFQUM5REUsR0FDTUMsSUFDVixRQUFRLE9BQU9ELEdBQUssVUFBVSxnQkFBa0IsS0FBTyxPQUFTQSxHQUFHLFdBQWEsVUFBVSxRQUFRLEVBQ2xHLElBQUlFLEdBQWtCLEdBQUdILEdBQWEsT0FBUyxNQUFNLGNBQ2pESSxHQUFnQiwyQ0FDaEJDLEVBQWUsT0FBTyxZQUFnQixJQUFjLEtBQU0sQ0FDOUQsRUFBSSxZQUNKLFNBQVNDLEVBQUtDLEVBQUlDLEVBQU1DLEVBQU8sQ0FDN0IsSUFBSUMsRUFDSixPQUFJRCxJQUFVLFFBQWdCQyxFQUFNSCxFQUFHLGFBQWFDLENBQUksSUFBTSxLQUFPRSxFQUFNLE1BQ3ZFRCxJQUFVLEtBQU1GLEVBQUcsZ0JBQWdCQyxDQUFJLEVBQ2xDRCxFQUFHLGFBQWFDLENBQUksSUFBTUMsR0FBT0YsRUFBRyxhQUFhQyxFQUFNQyxDQUFLLEVBQzlELEtBQ1QsQ0FDQSxJQUFJRSxHQUFTLENBQUNDLEVBQVFDLEVBQVNDLElBQVMsQ0FDdEMsVUFBV0MsS0FBUUQsRUFBSyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQ2xDQSxFQUFLLENBQUMsRUFBSUMsRUFDVixRQUFRLFVBQVUsR0FBR0gsQ0FBTSxlQUFlLEVBQUUsTUFBTUMsRUFBU0MsQ0FBSSxDQUVuRSxFQUNJRSxHQUFLLENBQUNILEtBQVlDLElBQVNILEdBQU8sTUFBT0UsRUFBU0MsQ0FBSSxFQUN0REcsR0FBTSxDQUFDSixLQUFZQyxJQUFTSCxHQUFPLFNBQVVFLEVBQVNDLENBQUksRUFDMURJLEVBQWMsQ0FBQ0wsRUFBU00sSUFBUU4sRUFB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S0FBTSxnQkFBaUIsR0FBRzJXLENBQVUsRUFBRSxFQUMzQzNXLEVBQUssS0FBTSxPQUFRMFcsRUFBWSxNQUFRLGFBQWEsRUFDcEQ1VCxHQUFtQixFQUN2QixDQUNFLElBQUksUUFBUyxDQUNYLE1BQU04RCxFQUFRLEtBQUssUUFBUSxrQkFBa0IsRUFDdkNsRCxFQUFNL0IsR0FBTSxJQUFJLEVBQ3RCLE9BQUlpRixJQUFPQSxFQUFNLFFBQVVsRCxHQUNoQm5DLEdBQVEsSUFBSSxFQUFFLGlCQUN2QixjQUFjbUMsQ0FBRyxJQUNsQixDQUVMLENBQ0UsSUFBSSxVQUFXLENBQ2IsT0FBTyxLQUFLLFFBQVUsS0FBTyxHQUFLLEtBQUssSUFBSSxLQUFLLE1BQVEsS0FBSyxJQUFLLENBQUMsQ0FDdkUsQ0FDRSxJQUFJLE9BQVEsQ0FDVixPQUFPa1QsR0FBVSxLQUFNLE9BQU8sQ0FDbEMsQ0FDRSxJQUFJLE1BQU16VyxFQUFPLENBQ2YwVyxHQUFVLEtBQU0sUUFBUzFXLENBQUssQ0FDbEMsQ0FDRSxJQUFJLEtBQU0sQ0FDUixPQUFPeVcsR0FBVSxLQUFNLEtBQUssR0FBSyxDQUNyQyxDQUNFLElBQUksSUFBSTNKLEVBQUssQ0FDWDRKLEdBQVUsS0FBTSxNQUFPNUosQ0FBRyxDQUM5QixDQUNBLEVBRUF3SixHQUFxQixlQUFpQixHQUN0QyxJQUFJSyxHQUFhM1csR0FBVSxDQUFDLE9BQU8sTUFBTSxPQUFPLFdBQVcsR0FBR0EsQ0FBSyxFQUFFLENBQUMsR0FBSyxPQUFPLFNBQVMsT0FBT0EsQ0FBSyxDQUFDLEVBQ3BHeVcsR0FBWSxDQUFDM1csRUFBSXlDLElBQVEsQ0FDM0IsTUFBTXZDLEVBQVFILEVBQUtDLEVBQUl5QyxDQUFHLEVBQzFCLE9BQU9vVSxHQUFVM1csQ0FBSyxFQUFJLEtBQUssSUFBSSxFQUFHLE9BQU8sV0FBV0EsQ0FBSyxDQUFDLEVBQUksSUFDcEUsRUFDSTBXLEdBQVksQ0FBQzVXLEVBQUl5QyxFQUFLZ0MsSUFBUSxDQUNoQyxHQUFJQSxJQUFRLE1BQVFvUyxHQUFVcFMsQ0FBRyxFQUFHMUUsRUFBS0MsRUFBSXlDLEVBQUssR0FBR2dDLENBQUcsRUFBRSxNQUNyRCxPQUFNLElBQUksTUFBTSw4QkFBOEIxRSxDQUFJLE9BQU8wRSxDQUFHLEdBQUcsQ0FDdEUsRUFDQSxPQUFBM0MsR0FBZSxPQUFPLGFBQWMwVSxFQUFvQiIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMTAsMTgsMTldfQ==