"use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[756],{3470:(e,t,n)=>{n.d(t,{i:()=>c});var r=n(7294),o=n(3703),l=n(2690),s=n(5893);const i=["input","select","textarea","a[href]","button","[tabindex]","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable="false"])'].join(",");function a(e){const t=[],n=[];return Array.from(e.querySelectorAll(i)).forEach(((e,r)=>{const o=function(e){const t=parseInt(e.getAttribute("tabindex")||"",10);return Number.isNaN(t)?"true"===e.contentEditable||("AUDIO"===e.nodeName||"VIDEO"===e.nodeName||"DETAILS"===e.nodeName)&&null===e.getAttribute("tabindex")?0:e.tabIndex:t}(e);-1!==o&&function(e){return!(e.disabled||"INPUT"===e.tagName&&"hidden"===e.type||function(e){if("INPUT"!==e.tagName||"radio"!==e.type)return!1;if(!e.name)return!1;const t=t=>e.ownerDocument.querySelector(`input[type="radio"]${t}`);let n=t(`[name="${e.name}"]:checked`);return n||(n=t(`[name="${e.name}"]`)),n!==e}(e))}(e)&&(0===o?t.push(e):n.push({documentOrder:r,tabIndex:o,node:e}))})),n.sort(((e,t)=>e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex)).map((e=>e.node)).concat(t)}function u(){return!0}function c(e){const{children:t,disableAutoFocus:n=!1,disableEnforceFocus:i=!1,disableRestoreFocus:c=!1,getTabbable:d=a,isEnabled:f=u,open:h}=e,m=r.useRef(!1),p=r.useRef(null),v=r.useRef(null),y=r.useRef(null),g=r.useRef(null),b=r.useRef(!1),E=r.useRef(null),x=(0,o.Z)(t.ref,E),R=r.useRef(null);r.useEffect((()=>{h&&E.current&&(b.current=!n)}),[n,h]),r.useEffect((()=>{if(!h||!E.current)return;const e=(0,l.Z)(E.current);return E.current.contains(e.activeElement)||(E.current.hasAttribute("tabIndex")||E.current.setAttribute("tabIndex","-1"),b.current&&E.current.focus()),()=>{c||(y.current&&y.current.focus&&(m.current=!0,y.current.focus()),y.current=null)}}),[h]),r.useEffect((()=>{if(!h||!E.current)return;const e=(0,l.Z)(E.current),t=t=>{R.current=t,!i&&f()&&"Tab"===t.key&&e.activeElement===E.current&&t.shiftKey&&(m.current=!0,v.current&&v.current.focus())},n=()=>{const t=E.current;if(null===t)return;if(!e.hasFocus()||!f()||m.current)return void(m.current=!1);if(t.contains(e.activeElement))return;if(i&&e.activeElement!==p.current&&e.activeElement!==v.current)return;if(e.activeElement!==g.current)g.current=null;else if(null!==g.current)return;if(!b.current)return;let n=[];if(e.activeElement!==p.current&&e.activeElement!==v.current||(n=d(E.current)),n.length>0){var r,o;const e=Boolean((null==(r=R.current)?void 0:r.shiftKey)&&"Tab"===(null==(o=R.current)?void 0:o.key)),t=n[0],l=n[n.length-1];"string"!=typeof t&&"string"!=typeof l&&(e?l.focus():t.focus())}else t.focus()};e.addEventListener("focusin",n),e.addEventListener("keydown",t,!0);const r=setInterval((()=>{e.activeElement&&"BODY"===e.activeElement.tagName&&n()}),50);return()=>{clearInterval(r),e.removeEventListener("focusin",n),e.removeEventListener("keydown",t,!0)}}),[n,i,c,f,h,d]);const Z=e=>{null===y.current&&(y.current=e.relatedTarget),b.current=!0};return(0,s.jsxs)(r.Fragment,{children:[(0,s.jsx)("div",{tabIndex:h?0:-1,onFocus:Z,ref:p,"data-testid":"sentinelStart"}),r.cloneElement(t,{ref:x,onFocus:e=>{null===y.current&&(y.current=e.relatedTarget),b.current=!0,g.current=e.target;const n=t.props.onFocus;n&&n(e)}}),(0,s.jsx)("div",{tabIndex:h?0:-1,onFocus:Z,ref:v,"data-testid":"sentinelEnd"})]})}},8385:(e,t,n)=>{n.d(t,{h:()=>u});var r=n(7294),o=n(3935),l=n(3703),s=n(3546),i=n(7960),a=n(5893);const u=r.forwardRef((function(e,t){const{children:n,container:u,disablePortal:c=!1}=e,[d,f]=r.useState(null),h=(0,l.Z)(r.isValidElement(n)?n.ref:null,t);if((0,s.Z)((()=>{c||f(function(e){return"function"==typeof e?e():e}(u)||document.body)}),[u,c]),(0,s.Z)((()=>{if(d&&!c)return(0,i.Z)(t,d),()=>{(0,i.Z)(t,null)}}),[t,d,c]),c){if(r.isValidElement(n)){const e={ref:h};return r.cloneElement(n,e)}return(0,a.jsx)(r.Fragment,{children:n})}return(0,a.jsx)(r.Fragment,{children:d?o.createPortal(n,d):d})}))},7598:(e,t,n)=>{n.d(t,{u:()=>v});var r=n(7462),o=n(3366),l=n(7294),s=n(3935),i=n(3703),a=n(4161),u=n(3546),c=n(9336),d=n(5893);const f=["onChange","maxRows","minRows","style","value"];function h(e){return parseInt(e,10)||0}const m={visibility:"hidden",position:"absolute",overflow:"hidden",height:0,top:0,left:0,transform:"translateZ(0)"};function p(e){return null==e||0===Object.keys(e).length||0===e.outerHeightStyle&&!e.overflow}const v=l.forwardRef((function(e,t){const{onChange:n,maxRows:v,minRows:y=1,style:g,value:b}=e,E=(0,o.Z)(e,f),{current:x}=l.useRef(null!=b),R=l.useRef(null),Z=(0,i.Z)(t,R),w=l.useRef(null),S=l.useRef(0),[T,N]=l.useState({outerHeightStyle:0}),k=l.useCallback((()=>{const t=R.current,n=(0,a.Z)(t).getComputedStyle(t);if("0px"===n.width)return{outerHeightStyle:0};const r=w.current;r.style.width=n.width,r.value=t.value||e.placeholder||"x","\n"===r.value.slice(-1)&&(r.value+=" ");const o=n.boxSizing,l=h(n.paddingBottom)+h(n.paddingTop),s=h(n.borderBottomWidth)+h(n.borderTopWidth),i=r.scrollHeight;r.value="x";const u=r.scrollHeight;let c=i;return y&&(c=Math.max(Number(y)*u,c)),v&&(c=Math.min(Number(v)*u,c)),c=Math.max(c,u),{outerHeightStyle:c+("border-box"===o?l+s:0),overflow:Math.abs(c-i)<=1}}),[v,y,e.placeholder]),P=(e,t)=>{const{outerHeightStyle:n,overflow:r}=t;return S.current<20&&(n>0&&Math.abs((e.outerHeightStyle||0)-n)>1||e.overflow!==r)?(S.current+=1,{overflow:r,outerHeightStyle:n}):e},O=l.useCallback((()=>{const e=k();p(e)||N((t=>P(t,e)))}),[k]);return(0,u.Z)((()=>{const e=()=>{S.current=0,(()=>{const e=k();p(e)||s.flushSync((()=>{N((t=>P(t,e)))}))})()};const t=(0,c.Z)(e),n=R.current,r=(0,a.Z)(n);let o;return r.addEventListener("resize",t),"undefined"!=typeof ResizeObserver&&(o=new ResizeObserver(e),o.observe(n)),()=>{t.clear(),cancelAnimationFrame(undefined),r.removeEventListener("resize",t),o&&o.disconnect()}}),[k]),(0,u.Z)((()=>{O()})),l.useEffect((()=>{S.current=0}),[b]),(0,d.jsxs)(l.Fragment,{children:[(0,d.jsx)("textarea",(0,r.Z)({value:b,onChange:e=>{S.current=0,x||O(),n&&n(e)},ref:Z,rows:y,style:(0,r.Z)({height:T.outerHeightStyle,overflow:T.overflow?"hidden":void 0},g)},E)),(0,d.jsx)("textarea",{"aria-hidden":!0,className:e.className,readOnly:!0,ref:w,tabIndex:-1,style:(0,r.Z)({},m,g,{paddingTop:0,paddingBottom:0})})]})}))},6556:(e,t,n)=>{n.d(t,{d:()=>y});var r=n(7462),o=n(7294),l=n(3703),s=n(2690),i=n(9948),a=n(9064),u=n(437),c=n(4161),d=n(5806);function f(e,t){t?e.setAttribute("aria-hidden","true"):e.removeAttribute("aria-hidden")}function h(e){return parseInt((0,c.Z)(e).getComputedStyle(e).paddingRight,10)||0}function m(e,t,n,r,o){const l=[t,n,...r];[].forEach.call(e.children,(e=>{const t=-1===l.indexOf(e),n=!function(e){const t=-1!==["TEMPLATE","SCRIPT","STYLE","LINK","MAP","META","NOSCRIPT","PICTURE","COL","COLGROUP","PARAM","SLOT","SOURCE","TRACK"].indexOf(e.tagName),n="INPUT"===e.tagName&&"hidden"===e.getAttribute("type");return t||n}(e);t&&n&&f(e,o)}))}function p(e,t){let n=-1;return e.some(((e,r)=>!!t(e)&&(n=r,!0))),n}const v=new class{constructor(){this.containers=void 0,this.modals=void 0,this.modals=[],this.containers=[]}add(e,t){let n=this.modals.indexOf(e);if(-1!==n)return n;n=this.modals.length,this.modals.push(e),e.modalRef&&f(e.modalRef,!1);const r=function(e){const t=[];return[].forEach.call(e.children,(e=>{"true"===e.getAttribute("aria-hidden")&&t.push(e)})),t}(t);m(t,e.mount,e.modalRef,r,!0);const o=p(this.containers,(e=>e.container===t));return-1!==o?(this.containers[o].modals.push(e),n):(this.containers.push({modals:[e],container:t,restore:null,hiddenSiblings:r}),n)}mount(e,t){const n=p(this.containers,(t=>-1!==t.modals.indexOf(e))),r=this.containers[n];r.restore||(r.restore=function(e,t){const n=[],r=e.container;if(!t.disableScrollLock){if(function(e){const t=(0,s.Z)(e);return t.body===e?(0,c.Z)(e).innerWidth>t.documentElement.clientWidth:e.scrollHeight>e.clientHeight}(r)){const e=(0,d.Z)((0,s.Z)(r));n.push({value:r.style.paddingRight,property:"padding-right",el:r}),r.style.paddingRight=`${h(r)+e}px`;const t=(0,s.Z)(r).querySelectorAll(".mui-fixed");[].forEach.call(t,(t=>{n.push({value:t.style.paddingRight,property:"padding-right",el:t}),t.style.paddingRight=`${h(t)+e}px`}))}let e;if(r.parentNode instanceof DocumentFragment)e=(0,s.Z)(r).body;else{const t=r.parentElement,n=(0,c.Z)(r);e="HTML"===(null==t?void 0:t.nodeName)&&"scroll"===n.getComputedStyle(t).overflowY?t:r}n.push({value:e.style.overflow,property:"overflow",el:e},{value:e.style.overflowX,property:"overflow-x",el:e},{value:e.style.overflowY,property:"overflow-y",el:e}),e.style.overflow="hidden"}return()=>{n.forEach((({value:e,el:t,property:n})=>{e?t.style.setProperty(n,e):t.style.removeProperty(n)}))}}(r,t))}remove(e,t=!0){const n=this.modals.indexOf(e);if(-1===n)return n;const r=p(this.containers,(t=>-1!==t.modals.indexOf(e))),o=this.containers[r];if(o.modals.splice(o.modals.indexOf(e),1),this.modals.splice(n,1),0===o.modals.length)o.restore&&o.restore(),e.modalRef&&f(e.modalRef,t),m(o.container,e.mount,e.modalRef,o.hiddenSiblings,!1),this.containers.splice(r,1);else{const e=o.modals[o.modals.length-1];e.modalRef&&f(e.modalRef,!1)}return n}isTopModal(e){return this.modals.length>0&&this.modals[this.modals.length-1]===e}};function y(e){const{container:t,disableEscapeKeyDown:n=!1,disableScrollLock:c=!1,manager:d=v,closeAfterTransition:h=!1,onTransitionEnter:m,onTransitionExited:p,children:y,onClose:g,open:b,rootRef:E}=e,x=o.useRef({}),R=o.useRef(null),Z=o.useRef(null),w=(0,l.Z)(Z,E),[S,T]=o.useState(!b),N=function(e){return!!e&&e.props.hasOwnProperty("in")}(y);let k=!0;"false"!==e["aria-hidden"]&&!1!==e["aria-hidden"]||(k=!1);const P=()=>(x.current.modalRef=Z.current,x.current.mount=R.current,x.current),O=()=>{d.mount(P(),{disableScrollLock:c}),Z.current&&(Z.current.scrollTop=0)},I=(0,i.Z)((()=>{const e=function(e){return"function"==typeof e?e():e}(t)||(0,s.Z)(R.current).body;d.add(P(),e),Z.current&&O()})),A=o.useCallback((()=>d.isTopModal(P())),[d]),C=(0,i.Z)((e=>{R.current=e,e&&(b&&A()?O():Z.current&&f(Z.current,k))})),L=o.useCallback((()=>{d.remove(P(),k)}),[k,d]);o.useEffect((()=>()=>{L()}),[L]),o.useEffect((()=>{b?I():N&&h||L()}),[b,L,N,h,I]);const F=e=>t=>{var r;null==(r=e.onKeyDown)||r.call(e,t),"Escape"===t.key&&229!==t.which&&A()&&(n||(t.stopPropagation(),g&&g(t,"escapeKeyDown")))},j=e=>t=>{var n;null==(n=e.onClick)||n.call(e,t),t.target===t.currentTarget&&g&&g(t,"backdropClick")};return{getRootProps:(t={})=>{const n=(0,u._)(e);delete n.onTransitionEnter,delete n.onTransitionExited;const o=(0,r.Z)({},n,t);return(0,r.Z)({role:"presentation"},o,{onKeyDown:F(o),ref:w})},getBackdropProps:(e={})=>{const t=e;return(0,r.Z)({"aria-hidden":!0},t,{onClick:j(t),open:b})},getTransitionProps:()=>({onEnter:(0,a.Z)((()=>{T(!1),m&&m()}),null==y?void 0:y.props.onEnter),onExited:(0,a.Z)((()=>{T(!0),p&&p(),h&&L()}),null==y?void 0:y.props.onExited)}),rootRef:w,portalRef:C,isTopModal:A,exited:S,hasTransition:N}}},437:(e,t,n)=>{function r(e,t=[]){if(void 0===e)return{};const n={};return Object.keys(e).filter((n=>n.match(/^on[A-Z]/)&&"function"==typeof e[n]&&!t.includes(n))).forEach((t=>{n[t]=e[t]})),n}n.d(t,{_:()=>r})},8442:(e,t,n)=>{function r(e){return"string"==typeof e}n.d(t,{X:()=>r})},4391:(e,t,n)=>{n.d(t,{y:()=>d});var r=n(7462),o=n(3366),l=n(3703),s=n(8442),i=n(512),a=n(437);function u(e){if(void 0===e)return{};const t={};return Object.keys(e).filter((t=>!(t.match(/^on[A-Z]/)&&"function"==typeof e[t]))).forEach((n=>{t[n]=e[n]})),t}const c=["elementType","externalSlotProps","ownerState","skipResolvingSlotProps"];function d(e){var t;const{elementType:n,externalSlotProps:d,ownerState:f,skipResolvingSlotProps:h=!1}=e,m=(0,o.Z)(e,c),p=h?{}:function(e,t,n){return"function"==typeof e?e(t,void 0):e}(d,f),{props:v,internalRef:y}=function(e){const{getSlotProps:t,additionalProps:n,externalSlotProps:o,externalForwardedProps:l,className:s}=e;if(!t){const e=(0,i.Z)(null==n?void 0:n.className,s,null==l?void 0:l.className,null==o?void 0:o.className),t=(0,r.Z)({},null==n?void 0:n.style,null==l?void 0:l.style,null==o?void 0:o.style),a=(0,r.Z)({},n,l,o);return e.length>0&&(a.className=e),Object.keys(t).length>0&&(a.style=t),{props:a,internalRef:void 0}}const c=(0,a._)((0,r.Z)({},l,o)),d=u(o),f=u(l),h=t(c),m=(0,i.Z)(null==h?void 0:h.className,null==n?void 0:n.className,s,null==l?void 0:l.className,null==o?void 0:o.className),p=(0,r.Z)({},null==h?void 0:h.style,null==n?void 0:n.style,null==l?void 0:l.style,null==o?void 0:o.style),v=(0,r.Z)({},h,n,f,d);return m.length>0&&(v.className=m),Object.keys(p).length>0&&(v.style=p),{props:v,internalRef:h.ref}}((0,r.Z)({},m,{externalSlotProps:p})),g=(0,l.Z)(y,null==p?void 0:p.ref,null==(t=e.additionalProps)?void 0:t.ref),b=function(e,t,n){return void 0===e||(0,s.X)(e)?t:(0,r.Z)({},t,{ownerState:(0,r.Z)({},t.ownerState,n)})}(n,(0,r.Z)({},v,{ref:g}),f);return b}}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzU2LmY4ZTZhZmExLmpzIiwibWFwcGluZ3MiOiJ3S0FTQSxNQUFNQSxFQUFxQixDQUFDLFFBQVMsU0FBVSxXQUFZLFVBQVcsU0FBVSxhQUFjLGtCQUFtQixrQkFBbUIsb0RBQW9EQyxLQUFLLEtBd0M3TCxTQUFTQyxFQUFtQkMsR0FDMUIsTUFBTUMsRUFBa0IsR0FDbEJDLEVBQWtCLEdBZ0J4QixPQWZBQyxNQUFNQyxLQUFLSixFQUFLSyxpQkFBaUJSLElBQXFCUyxTQUFRLENBQUNDLEVBQU1DLEtBQ25FLE1BQU1DLEVBM0NWLFNBQXFCRixHQUNuQixNQUFNRyxFQUFlQyxTQUFTSixFQUFLSyxhQUFhLGFBQWUsR0FBSSxJQUNuRSxPQUFLQyxPQUFPQyxNQUFNSixHQVlXLFNBQXpCSCxFQUFLUSxrQkFBaUQsVUFBbEJSLEVBQUtTLFVBQTBDLFVBQWxCVCxFQUFLUyxVQUEwQyxZQUFsQlQsRUFBS1MsV0FBNkQsT0FBbENULEVBQUtLLGFBQWEsWUFDM0ksRUFFRkwsRUFBS1UsU0FkSFAsQ0FlWCxDQXlCeUJRLENBQVlYLElBQ1gsSUFBbEJFLEdBWFIsU0FBeUNGLEdBQ3ZDLFFBQUlBLEVBQUtZLFVBQTZCLFVBQWpCWixFQUFLYSxTQUFxQyxXQUFkYixFQUFLYyxNQWZ4RCxTQUE0QmQsR0FDMUIsR0FBcUIsVUFBakJBLEVBQUthLFNBQXFDLFVBQWRiLEVBQUtjLEtBQ25DLE9BQU8sRUFFVCxJQUFLZCxFQUFLZSxLQUNSLE9BQU8sRUFFVCxNQUFNQyxFQUFXQyxHQUFZakIsRUFBS2tCLGNBQWNDLGNBQWMsc0JBQXNCRixLQUNwRixJQUFJRyxFQUFTSixFQUFTLFVBQVVoQixFQUFLZSxrQkFJckMsT0FIS0ssSUFDSEEsRUFBU0osRUFBUyxVQUFVaEIsRUFBS2UsV0FFNUJLLElBQVdwQixDQUNwQixDQUU2RXFCLENBQW1CckIsR0FJaEcsQ0FNZ0NzQixDQUFnQ3RCLEtBR3ZDLElBQWpCRSxFQUNGUixFQUFnQjZCLEtBQUt2QixHQUVyQkwsRUFBZ0I0QixLQUFLLENBQ25CQyxjQUFldkIsRUFDZlMsU0FBVVIsRUFDVkYsS0FBTUEsSUFFVixJQUVLTCxFQUFnQjhCLE1BQUssQ0FBQ0MsRUFBR0MsSUFBTUQsRUFBRWhCLFdBQWFpQixFQUFFakIsU0FBV2dCLEVBQUVGLGNBQWdCRyxFQUFFSCxjQUFnQkUsRUFBRWhCLFNBQVdpQixFQUFFakIsV0FBVWtCLEtBQUlGLEdBQUtBLEVBQUUxQixPQUFNNkIsT0FBT25DLEVBQ3pKLENBQ0EsU0FBU29DLElBQ1AsT0FBTyxDQUNULENBYUEsU0FBU0MsRUFBVUMsR0FDakIsTUFBTSxTQUNKQyxFQUFRLGlCQUNSQyxHQUFtQixFQUFLLG9CQUN4QkMsR0FBc0IsRUFBSyxvQkFDM0JDLEdBQXNCLEVBQUssWUFDM0JDLEVBQWM3QyxFQUFrQixVQUNoQzhDLEVBQVlSLEVBQWdCLEtBQzVCUyxHQUNFUCxFQUNFUSxFQUF5QixVQUFhLEdBQ3RDQyxFQUFnQixTQUFhLE1BQzdCQyxFQUFjLFNBQWEsTUFDM0JDLEVBQWdCLFNBQWEsTUFDN0JDLEVBQXdCLFNBQWEsTUFHckNDLEVBQVksVUFBYSxHQUN6QkMsRUFBVSxTQUFhLE1BRXZCQyxHQUFZLE9BQVdkLEVBQVNlLElBQUtGLEdBQ3JDRyxFQUFjLFNBQWEsTUFDakMsYUFBZ0IsS0FFVFYsR0FBU08sRUFBUUksVUFHdEJMLEVBQVVLLFNBQVdoQixFQUFnQixHQUNwQyxDQUFDQSxFQUFrQkssSUFDdEIsYUFBZ0IsS0FFZCxJQUFLQSxJQUFTTyxFQUFRSSxRQUNwQixPQUVGLE1BQU1DLEdBQU0sT0FBY0wsRUFBUUksU0FZbEMsT0FYS0osRUFBUUksUUFBUUUsU0FBU0QsRUFBSUUsaUJBQzNCUCxFQUFRSSxRQUFRSSxhQUFhLGFBSWhDUixFQUFRSSxRQUFRSyxhQUFhLFdBQVksTUFFdkNWLEVBQVVLLFNBQ1pKLEVBQVFJLFFBQVFNLFNBR2IsS0FFQXBCLElBS0NPLEVBQWNPLFNBQVdQLEVBQWNPLFFBQVFNLFFBQ2pEaEIsRUFBdUJVLFNBQVUsRUFDakNQLEVBQWNPLFFBQVFNLFNBRXhCYixFQUFjTyxRQUFVLEtBQzFCLENBQ0QsR0FJQSxDQUFDWCxJQUNKLGFBQWdCLEtBRWQsSUFBS0EsSUFBU08sRUFBUUksUUFDcEIsT0FFRixNQUFNQyxHQUFNLE9BQWNMLEVBQVFJLFNBQzVCTyxFQUFZQyxJQUNoQlQsRUFBWUMsUUFBVVEsR0FDbEJ2QixHQUF3QkcsS0FBbUMsUUFBcEJvQixFQUFZQyxLQU1uRFIsRUFBSUUsZ0JBQWtCUCxFQUFRSSxTQUFXUSxFQUFZRSxXQUd2RHBCLEVBQXVCVSxTQUFVLEVBQzdCUixFQUFZUSxTQUNkUixFQUFZUSxRQUFRTSxRQUV4QixFQUVJSyxFQUFVLEtBQ2QsTUFBTUMsRUFBY2hCLEVBQVFJLFFBSTVCLEdBQW9CLE9BQWhCWSxFQUNGLE9BRUYsSUFBS1gsRUFBSVksYUFBZXpCLEtBQWVFLEVBQXVCVSxRQUU1RCxZQURBVixFQUF1QlUsU0FBVSxHQUtuQyxHQUFJWSxFQUFZVixTQUFTRCxFQUFJRSxlQUMzQixPQUlGLEdBQUlsQixHQUF1QmdCLEVBQUlFLGdCQUFrQlosRUFBY1MsU0FBV0MsRUFBSUUsZ0JBQWtCWCxFQUFZUSxRQUMxRyxPQUlGLEdBQUlDLEVBQUlFLGdCQUFrQlQsRUFBc0JNLFFBQzlDTixFQUFzQk0sUUFBVSxVQUMzQixHQUFzQyxPQUFsQ04sRUFBc0JNLFFBQy9CLE9BRUYsSUFBS0wsRUFBVUssUUFDYixPQUVGLElBQUljLEVBQVcsR0FPZixHQU5JYixFQUFJRSxnQkFBa0JaLEVBQWNTLFNBQVdDLEVBQUlFLGdCQUFrQlgsRUFBWVEsVUFDbkZjLEVBQVczQixFQUFZUyxFQUFRSSxVQUs3QmMsRUFBU0MsT0FBUyxFQUFHLENBQ3ZCLElBQUlDLEVBQXNCQyxFQUMxQixNQUFNQyxFQUFhQyxTQUF5RCxPQUEvQ0gsRUFBdUJqQixFQUFZQyxjQUFtQixFQUFTZ0IsRUFBcUJOLFdBQThHLFNBQS9DLE9BQWhETyxFQUF3QmxCLEVBQVlDLGNBQW1CLEVBQVNpQixFQUFzQlIsTUFDaE5XLEVBQVlOLEVBQVMsR0FDckJPLEVBQWdCUCxFQUFTQSxFQUFTQyxPQUFTLEdBQ3hCLGlCQUFkSyxHQUFtRCxpQkFBbEJDLElBQ3RDSCxFQUNGRyxFQUFjZixRQUVkYyxFQUFVZCxRQUloQixNQUNFTSxFQUFZTixPQUNkLEVBRUZMLEVBQUlxQixpQkFBaUIsVUFBV1gsR0FDaENWLEVBQUlxQixpQkFBaUIsVUFBV2YsR0FBVyxHQVEzQyxNQUFNZ0IsRUFBV0MsYUFBWSxLQUN2QnZCLEVBQUlFLGVBQStDLFNBQTlCRixFQUFJRSxjQUFjeEMsU0FDekNnRCxHQUNGLEdBQ0MsSUFDSCxNQUFPLEtBQ0xjLGNBQWNGLEdBQ2R0QixFQUFJeUIsb0JBQW9CLFVBQVdmLEdBQ25DVixFQUFJeUIsb0JBQW9CLFVBQVduQixHQUFXLEVBQUssQ0FDcEQsR0FDQSxDQUFDdkIsRUFBa0JDLEVBQXFCQyxFQUFxQkUsRUFBV0MsRUFBTUYsSUFDakYsTUFXTXdDLEVBQXNCQyxJQUNJLE9BQTFCbkMsRUFBY08sVUFDaEJQLEVBQWNPLFFBQVU0QixFQUFNQyxlQUVoQ2xDLEVBQVVLLFNBQVUsQ0FBSSxFQUUxQixPQUFvQixVQUFNLFdBQWdCLENBQ3hDakIsU0FBVSxFQUFjLFNBQUssTUFBTyxDQUNsQ3ZCLFNBQVU2QixFQUFPLEdBQUssRUFDdEJ5QyxRQUFTSCxFQUNUN0IsSUFBS1AsRUFDTCxjQUFlLGtCQUNBLGVBQW1CUixFQUFVLENBQzVDZSxJQUFLRCxFQUNMaUMsUUF6QllGLElBQ2dCLE9BQTFCbkMsRUFBY08sVUFDaEJQLEVBQWNPLFFBQVU0QixFQUFNQyxlQUVoQ2xDLEVBQVVLLFNBQVUsRUFDcEJOLEVBQXNCTSxRQUFVNEIsRUFBTUcsT0FDdEMsTUFBTUMsRUFBdUJqRCxFQUFTRCxNQUFNZ0QsUUFDeENFLEdBQ0ZBLEVBQXFCSixFQUN2QixLQWlCaUIsU0FBSyxNQUFPLENBQzNCcEUsU0FBVTZCLEVBQU8sR0FBSyxFQUN0QnlDLFFBQVNILEVBQ1Q3QixJQUFLTixFQUNMLGNBQWUsa0JBR3JCLEMsa0dDalFBLE1BQU15QyxFQUFzQixjQUFpQixTQUFnQm5ELEVBQU9vRCxHQUNsRSxNQUFNLFNBQ0puRCxFQUFRLFVBQ1JvRCxFQUFTLGNBQ1RDLEdBQWdCLEdBQ2R0RCxHQUNHdUQsRUFBV0MsR0FBZ0IsV0FBZSxNQUUzQ3pDLEdBQVksT0FBeUIsaUJBQXFCZCxHQUFZQSxFQUFTZSxJQUFNLEtBQU1vQyxHQWVqRyxJQWRBLFFBQWtCLEtBQ1hFLEdBQ0hFLEVBM0JOLFNBQXNCSCxHQUNwQixNQUE0QixtQkFBZEEsRUFBMkJBLElBQWNBLENBQ3pELENBeUJtQkksQ0FBYUosSUFBY0ssU0FBU0MsS0FDbkQsR0FDQyxDQUFDTixFQUFXQyxLQUNmLFFBQWtCLEtBQ2hCLEdBQUlDLElBQWNELEVBRWhCLE9BREEsT0FBT0YsRUFBY0csR0FDZCxNQUNMLE9BQU9ILEVBQWMsS0FBSyxDQUdkLEdBQ2YsQ0FBQ0EsRUFBY0csRUFBV0QsSUFDekJBLEVBQWUsQ0FDakIsR0FBa0IsaUJBQXFCckQsR0FBVyxDQUNoRCxNQUFNMkQsRUFBVyxDQUNmNUMsSUFBS0QsR0FFUCxPQUFvQixlQUFtQmQsRUFBVTJELEVBQ25ELENBQ0EsT0FBb0IsU0FBSyxXQUFnQixDQUN2QzNELFNBQVVBLEdBRWQsQ0FDQSxPQUFvQixTQUFLLFdBQWdCLENBQ3ZDQSxTQUFVc0QsRUFBeUIsZUFBc0J0RCxFQUFVc0QsR0FBYUEsR0FFcEYsRyxnSUN4REEsTUFBTU0sRUFBWSxDQUFDLFdBQVksVUFBVyxVQUFXLFFBQVMsU0FPOUQsU0FBU0MsRUFBY0MsR0FDckIsT0FBTzNGLFNBQVMyRixFQUFPLEtBQU8sQ0FDaEMsQ0FDQSxNQUFNQyxFQUNJLENBRU5DLFdBQVksU0FFWkMsU0FBVSxXQUVWQyxTQUFVLFNBQ1ZDLE9BQVEsRUFDUkMsSUFBSyxFQUNMQyxLQUFNLEVBRU5DLFVBQVcsaUJBR2YsU0FBU0MsRUFBUUMsR0FDZixPQUFPQSxTQUFpRSxJQUE1QkMsT0FBT0MsS0FBS0YsR0FBS3hDLFFBQXlDLElBQXpCd0MsRUFBSUcsbUJBQTJCSCxFQUFJTixRQUNsSCxDQWFBLE1BQU1VLEVBQWdDLGNBQWlCLFNBQTBCN0UsRUFBT29ELEdBQ3RGLE1BQU0sU0FDRjBCLEVBQVEsUUFDUkMsRUFBTyxRQUNQQyxFQUFVLEVBQUMsTUFDWEMsRUFBSyxNQUNMbEIsR0FDRS9ELEVBQ0prRixHQUFRLE9BQThCbEYsRUFBTzZELElBRTdDM0MsUUFBU2lFLEdBQ1AsU0FBc0IsTUFBVHBCLEdBQ1hxQixFQUFXLFNBQWEsTUFDeEJyRSxHQUFZLE9BQVdxQyxFQUFjZ0MsR0FDckNDLEVBQVksU0FBYSxNQUN6QkMsRUFBVSxTQUFhLElBQ3RCQyxFQUFPQyxHQUFZLFdBQWUsQ0FDdkNaLGlCQUFrQixJQUVkYSxFQUFrQixlQUFrQixLQUN4QyxNQUFNQyxFQUFRTixFQUFTbEUsUUFFakJ5RSxHQURrQixPQUFZRCxHQUNFRSxpQkFBaUJGLEdBR3ZELEdBQTRCLFFBQXhCQyxFQUFjRSxNQUNoQixNQUFPLENBQ0xqQixpQkFBa0IsR0FHdEIsTUFBTWtCLEVBQWVULEVBQVVuRSxRQUMvQjRFLEVBQWFiLE1BQU1ZLE1BQVFGLEVBQWNFLE1BQ3pDQyxFQUFhL0IsTUFBUTJCLEVBQU0zQixPQUFTL0QsRUFBTStGLGFBQWUsSUFDcEIsT0FBakNELEVBQWEvQixNQUFNaUMsT0FBTyxLQUk1QkYsRUFBYS9CLE9BQVMsS0FFeEIsTUFBTWtDLEVBQVlOLEVBQWNNLFVBQzFCQyxFQUFVcEMsRUFBYzZCLEVBQWNRLGVBQWlCckMsRUFBYzZCLEVBQWNTLFlBQ25GQyxFQUFTdkMsRUFBYzZCLEVBQWNXLG1CQUFxQnhDLEVBQWM2QixFQUFjWSxnQkFHdEZDLEVBQWNWLEVBQWFXLGFBR2pDWCxFQUFhL0IsTUFBUSxJQUNyQixNQUFNMkMsRUFBa0JaLEVBQWFXLGFBR3JDLElBQUlFLEVBQWNILEVBWWxCLE9BWEl4QixJQUNGMkIsRUFBY0MsS0FBS0MsSUFBSXZJLE9BQU8wRyxHQUFXMEIsRUFBaUJDLElBRXhENUIsSUFDRjRCLEVBQWNDLEtBQUtFLElBQUl4SSxPQUFPeUcsR0FBVzJCLEVBQWlCQyxJQUU1REEsRUFBY0MsS0FBS0MsSUFBSUYsRUFBYUQsR0FLN0IsQ0FDTDlCLGlCQUh1QitCLEdBQTZCLGVBQWRWLEVBQTZCQyxFQUFVRyxFQUFTLEdBSXRGbEMsU0FIZXlDLEtBQUtHLElBQUlKLEVBQWNILElBQWdCLEVBSXZELEdBQ0EsQ0FBQ3pCLEVBQVNDLEVBQVNoRixFQUFNK0YsY0FDdEJpQixFQUFjLENBQUNDLEVBQVdDLEtBQzlCLE1BQU0saUJBQ0p0QyxFQUFnQixTQUNoQlQsR0FDRStDLEVBR0osT0FBSTVCLEVBQVFwRSxRQUFVLEtBQU8wRCxFQUFtQixHQUFLZ0MsS0FBS0csS0FBS0UsRUFBVXJDLGtCQUFvQixHQUFLQSxHQUFvQixHQUFLcUMsRUFBVTlDLFdBQWFBLElBQ2hKbUIsRUFBUXBFLFNBQVcsRUFDWixDQUNMaUQsV0FDQVMscUJBUUdxQyxDQUFTLEVBRVpFLEVBQWEsZUFBa0IsS0FDbkMsTUFBTUQsRUFBV3pCLElBQ2JqQixFQUFRMEMsSUFHWjFCLEdBQVN5QixHQUFhRCxFQUFZQyxFQUFXQyxJQUFVLEdBQ3RELENBQUN6QixJQWlFSixPQWhFQSxRQUFrQixLQUNoQixNQWVNMkIsRUFBZSxLQUNuQjlCLEVBQVFwRSxRQUFVLEVBaEJZLE1BQzlCLE1BQU1nRyxFQUFXekIsSUFDYmpCLEVBQVEwQyxJQVNaLGFBQW1CLEtBQ2pCMUIsR0FBU3lCLEdBQWFELEVBQVlDLEVBQVdDLElBQVUsR0FDdkQsRUFJRkcsRUFBeUIsRUFPM0IsTUFNTUMsR0FBdUIsT0FBU0YsR0FDaEMxQixFQUFRTixFQUFTbEUsUUFDakJxRyxHQUFrQixPQUFZN0IsR0FFcEMsSUFBSThCLEVBS0osT0FOQUQsRUFBZ0IvRSxpQkFBaUIsU0FBVThFLEdBRWIsb0JBQW5CRyxpQkFDVEQsRUFBaUIsSUFBSUMsZUFBbUVMLEdBQ3hGSSxFQUFlRSxRQUFRaEMsSUFFbEIsS0FDTDRCLEVBQXFCSyxRQUNyQkMscUJBbEJFQyxXQW1CRk4sRUFBZ0IzRSxvQkFBb0IsU0FBVTBFLEdBQzFDRSxHQUNGQSxFQUFlTSxZQUNqQixDQUNELEdBQ0EsQ0FBQ3JDLEtBQ0osUUFBa0IsS0FDaEIwQixHQUFZLElBRWQsYUFBZ0IsS0FDZDdCLEVBQVFwRSxRQUFVLENBQUMsR0FDbEIsQ0FBQzZDLEtBVWdCLFVBQU0sV0FBZ0IsQ0FDeEM5RCxTQUFVLEVBQWMsU0FBSyxZQUFZLE9BQVMsQ0FDaEQ4RCxNQUFPQSxFQUNQZSxTQVppQmhDLElBQ25Cd0MsRUFBUXBFLFFBQVUsRUFDYmlFLEdBQ0hnQyxJQUVFckMsR0FDRkEsRUFBU2hDLEVBQ1gsRUFNRTlCLElBQUtELEVBR0xnSCxLQUFNL0MsRUFDTkMsT0FBTyxPQUFTLENBQ2RiLE9BQVFtQixFQUFNWCxpQkFHZFQsU0FBVW9CLEVBQU1wQixTQUFXLGNBQVc2RCxHQUNyQy9DLElBQ0ZDLEtBQXNCLFNBQUssV0FBWSxDQUN4QyxlQUFlLEVBQ2YrQyxVQUFXakksRUFBTWlJLFVBQ2pCQyxVQUFVLEVBQ1ZsSCxJQUFLcUUsRUFDTDNHLFVBQVcsRUFDWHVHLE9BQU8sT0FBUyxDQUFDLEVBQUdqQixFQUFlaUIsRUFBTyxDQUN4Q21CLFdBQVksRUFDWkQsY0FBZSxRQUl2QixHLCtIQzdOTyxTQUFTZ0MsRUFBV0MsRUFBU0MsR0FDOUJBLEVBQ0ZELEVBQVE3RyxhQUFhLGNBQWUsUUFFcEM2RyxFQUFRRSxnQkFBZ0IsY0FFNUIsQ0FDQSxTQUFTQyxFQUFnQkgsR0FDdkIsT0FBT2hLLFVBQVMsRUFBQW9LLEVBQUEsR0FBWUosR0FBU3hDLGlCQUFpQndDLEdBQVNLLGFBQWMsS0FBTyxDQUN0RixDQVVBLFNBQVNDLEVBQW1CckYsRUFBV3NGLEVBQWNDLEVBQWdCQyxFQUFtQlIsR0FDdEYsTUFBTVMsRUFBWSxDQUFDSCxFQUFjQyxLQUFtQkMsR0FDcEQsR0FBRzlLLFFBQVFnTCxLQUFLMUYsRUFBVXBELFVBQVVtSSxJQUNsQyxNQUFNWSxHQUF1RCxJQUFoQ0YsRUFBVUcsUUFBUWIsR0FDekNjLEdBYlYsU0FBd0NkLEdBSXRDLE1BQ01lLEdBQXFFLElBRGpELENBQUMsV0FBWSxTQUFVLFFBQVMsT0FBUSxNQUFPLE9BQVEsV0FBWSxVQUFXLE1BQU8sV0FBWSxRQUFTLE9BQVEsU0FBVSxTQUN6R0YsUUFBUWIsRUFBUXZKLFNBQ3ZEdUssRUFBb0MsVUFBcEJoQixFQUFRdkosU0FBd0QsV0FBakN1SixFQUFRL0osYUFBYSxRQUMxRSxPQUFPOEssR0FBc0JDLENBQy9CLENBS21DQyxDQUErQmpCLEdBQzFEWSxHQUF3QkUsR0FDMUJmLEVBQVdDLEVBQVNDLEVBQ3RCLEdBRUosQ0FDQSxTQUFTaUIsRUFBWUMsRUFBT0MsR0FDMUIsSUFBSUMsR0FBTyxFQVFYLE9BUEFGLEVBQU1HLE1BQUssQ0FBQ0MsRUFBTUMsTUFDWkosRUFBU0csS0FDWEYsRUFBTUcsR0FDQyxLQUlKSCxDQUNULENDaENBLE1BQU1JLEVBQWlCLElEc0hoQixNQUNMLFdBQUFDLEdBQ0VDLEtBQUtDLGdCQUFhLEVBQ2xCRCxLQUFLRSxZQUFTLEVBQ2RGLEtBQUtFLE9BQVMsR0FDZEYsS0FBS0MsV0FBYSxFQUNwQixDQUNBLEdBQUFFLENBQUlDLEVBQU85RyxHQUNULElBQUkrRyxFQUFhTCxLQUFLRSxPQUFPaEIsUUFBUWtCLEdBQ3JDLElBQW9CLElBQWhCQyxFQUNGLE9BQU9BLEVBRVRBLEVBQWFMLEtBQUtFLE9BQU9oSSxPQUN6QjhILEtBQUtFLE9BQU8xSyxLQUFLNEssR0FHYkEsRUFBTUUsVUFDUmxDLEVBQVdnQyxFQUFNRSxVQUFVLEdBRTdCLE1BQU1DLEVBbkNWLFNBQTJCakgsR0FDekIsTUFBTWlILEVBQWlCLEdBTXZCLE1BTEEsR0FBR3ZNLFFBQVFnTCxLQUFLMUYsRUFBVXBELFVBQVVtSSxJQUNVLFNBQXhDQSxFQUFRL0osYUFBYSxnQkFDdkJpTSxFQUFlL0ssS0FBSzZJLEVBQ3RCLElBRUtrQyxDQUNULENBMkIyQkMsQ0FBa0JsSCxHQUN6Q3FGLEVBQW1CckYsRUFBVzhHLEVBQU1LLE1BQU9MLEVBQU1FLFNBQVVDLEdBQWdCLEdBQzNFLE1BQU1HLEVBQWlCbkIsRUFBWVMsS0FBS0MsWUFBWUwsR0FBUUEsRUFBS3RHLFlBQWNBLElBQy9FLE9BQXdCLElBQXBCb0gsR0FDRlYsS0FBS0MsV0FBV1MsR0FBZ0JSLE9BQU8xSyxLQUFLNEssR0FDckNDLElBRVRMLEtBQUtDLFdBQVd6SyxLQUFLLENBQ25CMEssT0FBUSxDQUFDRSxHQUNUOUcsWUFDQXFILFFBQVMsS0FDVEosbUJBRUtGLEVBQ1QsQ0FDQSxLQUFBSSxDQUFNTCxFQUFPbkssR0FDWCxNQUFNeUssRUFBaUJuQixFQUFZUyxLQUFLQyxZQUFZTCxJQUF3QyxJQUFoQ0EsRUFBS00sT0FBT2hCLFFBQVFrQixLQUMxRVEsRUFBZ0JaLEtBQUtDLFdBQVdTLEdBQ2pDRSxFQUFjRCxVQUNqQkMsRUFBY0QsUUEzSHBCLFNBQXlCQyxFQUFlM0ssR0FDdEMsTUFBTTRLLEVBQWUsR0FDZnZILEVBQVlzSCxFQUFjdEgsVUFDaEMsSUFBS3JELEVBQU02SyxrQkFBbUIsQ0FDNUIsR0FuREosU0FBdUJ4SCxHQUNyQixNQUFNbEMsR0FBTSxFQUFBakMsRUFBQSxHQUFjbUUsR0FDMUIsT0FBSWxDLEVBQUl3QyxPQUFTTixHQUNSLEVBQUFtRixFQUFBLEdBQVluRixHQUFXeUgsV0FBYTNKLEVBQUk0SixnQkFBZ0JDLFlBRTFEM0gsRUFBVW9ELGFBQWVwRCxFQUFVNEgsWUFDNUMsQ0E2Q1FDLENBQWM3SCxHQUFZLENBRTVCLE1BQU04SCxHQUFnQixFQUFBQyxFQUFBLElBQWlCLEVBQUFsTSxFQUFBLEdBQWNtRSxJQUNyRHVILEVBQWFyTCxLQUFLLENBQ2hCd0UsTUFBT1YsRUFBVTRCLE1BQU13RCxhQUN2QjRDLFNBQVUsZ0JBQ1ZDLEdBQUlqSSxJQUdOQSxFQUFVNEIsTUFBTXdELGFBQWUsR0FBR0YsRUFBZ0JsRixHQUFhOEgsTUFHL0QsTUFBTUksR0FBZ0IsRUFBQXJNLEVBQUEsR0FBY21FLEdBQVd2RixpQkFBaUIsY0FDaEUsR0FBR0MsUUFBUWdMLEtBQUt3QyxHQUFlbkQsSUFDN0J3QyxFQUFhckwsS0FBSyxDQUNoQndFLE1BQU9xRSxFQUFRbkQsTUFBTXdELGFBQ3JCNEMsU0FBVSxnQkFDVkMsR0FBSWxELElBRU5BLEVBQVFuRCxNQUFNd0QsYUFBZSxHQUFHRixFQUFnQkgsR0FBVytDLEtBQWlCLEdBRWhGLENBQ0EsSUFBSUssRUFDSixHQUFJbkksRUFBVW9JLHNCQUFzQkMsaUJBQ2xDRixHQUFrQixFQUFBdE0sRUFBQSxHQUFjbUUsR0FBV00sU0FDdEMsQ0FHTCxNQUFNZ0ksRUFBU3RJLEVBQVV1SSxjQUNuQnJFLEdBQWtCLEVBQUFpQixFQUFBLEdBQVluRixHQUNwQ21JLEVBQWtFLFVBQXJDLE1BQVZHLE9BQWlCLEVBQVNBLEVBQU9sTixXQUErRSxXQUF2RDhJLEVBQWdCM0IsaUJBQWlCK0YsR0FBUUUsVUFBeUJGLEVBQVN0SSxDQUN6SixDQUlBdUgsRUFBYXJMLEtBQUssQ0FDaEJ3RSxNQUFPeUgsRUFBZ0J2RyxNQUFNZCxTQUM3QmtILFNBQVUsV0FDVkMsR0FBSUUsR0FDSCxDQUNEekgsTUFBT3lILEVBQWdCdkcsTUFBTTZHLFVBQzdCVCxTQUFVLGFBQ1ZDLEdBQUlFLEdBQ0gsQ0FDRHpILE1BQU95SCxFQUFnQnZHLE1BQU00RyxVQUM3QlIsU0FBVSxhQUNWQyxHQUFJRSxJQUVOQSxFQUFnQnZHLE1BQU1kLFNBQVcsUUFDbkMsQ0FjQSxNQWJnQixLQUNkeUcsRUFBYTdNLFNBQVEsRUFDbkJnRyxRQUNBdUgsS0FDQUQsZUFFSXRILEVBQ0Z1SCxFQUFHckcsTUFBTThHLFlBQVlWLEVBQVV0SCxHQUUvQnVILEVBQUdyRyxNQUFNK0csZUFBZVgsRUFDMUIsR0FDQSxDQUdOLENBdUQ4QlksQ0FBZ0J0QixFQUFlM0ssR0FFM0QsQ0FDQSxNQUFBa00sQ0FBTy9CLEVBQU9nQyxHQUFrQixHQUM5QixNQUFNL0IsRUFBYUwsS0FBS0UsT0FBT2hCLFFBQVFrQixHQUN2QyxJQUFvQixJQUFoQkMsRUFDRixPQUFPQSxFQUVULE1BQU1LLEVBQWlCbkIsRUFBWVMsS0FBS0MsWUFBWUwsSUFBd0MsSUFBaENBLEVBQUtNLE9BQU9oQixRQUFRa0IsS0FDMUVRLEVBQWdCWixLQUFLQyxXQUFXUyxHQUt0QyxHQUpBRSxFQUFjVixPQUFPbUMsT0FBT3pCLEVBQWNWLE9BQU9oQixRQUFRa0IsR0FBUSxHQUNqRUosS0FBS0UsT0FBT21DLE9BQU9oQyxFQUFZLEdBR0ssSUFBaENPLEVBQWNWLE9BQU9oSSxPQUVuQjBJLEVBQWNELFNBQ2hCQyxFQUFjRCxVQUVaUCxFQUFNRSxVQUVSbEMsRUFBV2dDLEVBQU1FLFNBQVU4QixHQUU3QnpELEVBQW1CaUMsRUFBY3RILFVBQVc4RyxFQUFNSyxNQUFPTCxFQUFNRSxTQUFVTSxFQUFjTCxnQkFBZ0IsR0FDdkdQLEtBQUtDLFdBQVdvQyxPQUFPM0IsRUFBZ0IsT0FDbEMsQ0FFTCxNQUFNNEIsRUFBVTFCLEVBQWNWLE9BQU9VLEVBQWNWLE9BQU9oSSxPQUFTLEdBSS9Eb0ssRUFBUWhDLFVBQ1ZsQyxFQUFXa0UsRUFBUWhDLFVBQVUsRUFFakMsQ0FDQSxPQUFPRCxDQUNULENBQ0EsVUFBQWtDLENBQVduQyxHQUNULE9BQU9KLEtBQUtFLE9BQU9oSSxPQUFTLEdBQUs4SCxLQUFLRSxPQUFPRixLQUFLRSxPQUFPaEksT0FBUyxLQUFPa0ksQ0FDM0UsR0N4TEssU0FBU29DLEVBQVNDLEdBQ3ZCLE1BQU0sVUFDSm5KLEVBQVMscUJBQ1RvSixHQUF1QixFQUFLLGtCQUM1QjVCLEdBQW9CLEVBQUssUUFFekI2QixFQUFVN0MsRUFBYyxxQkFDeEI4QyxHQUF1QixFQUFLLGtCQUM1QkMsRUFBaUIsbUJBQ2pCQyxFQUFrQixTQUNsQjVNLEVBQVEsUUFDUjZNLEVBQU8sS0FDUHZNLEVBQUksUUFDSk8sR0FDRTBMLEVBR0VyQyxFQUFRLFNBQWEsQ0FBQyxHQUN0QjRDLEVBQWUsU0FBYSxNQUM1QjFDLEVBQVcsU0FBYSxNQUN4QnRKLEdBQVksRUFBQWlNLEVBQUEsR0FBVzNDLEVBQVV2SixJQUNoQ21NLEVBQVFDLEdBQWEsWUFBZ0IzTSxHQUN0QzRNLEVBdkNSLFNBQTBCbE4sR0FDeEIsUUFBT0EsR0FBV0EsRUFBU0QsTUFBTW9OLGVBQWUsS0FDbEQsQ0FxQ3dCQyxDQUFpQnBOLEdBQ3ZDLElBQUlxTixHQUFpQixFQUNhLFVBQTlCZCxFQUFXLGlCQUE0RCxJQUE5QkEsRUFBVyxpQkFDdERjLEdBQWlCLEdBRW5CLE1BQ01DLEVBQVcsS0FDZnBELEVBQU1qSixRQUFRbUosU0FBV0EsRUFBU25KLFFBQ2xDaUosRUFBTWpKLFFBQVFzSixNQUFRdUMsRUFBYTdMLFFBQzVCaUosRUFBTWpKLFNBRVRzTSxFQUFnQixLQUNwQmQsRUFBUWxDLE1BQU0rQyxJQUFZLENBQ3hCMUMsc0JBSUVSLEVBQVNuSixVQUNYbUosRUFBU25KLFFBQVF1TSxVQUFZLEVBQy9CLEVBRUlDLEdBQWEsRUFBQUMsRUFBQSxJQUFpQixLQUNsQyxNQUFNQyxFQWhFVixTQUFzQnZLLEdBQ3BCLE1BQTRCLG1CQUFkQSxFQUEyQkEsSUFBY0EsQ0FDekQsQ0E4RDhCSSxDQUFhSixLQWpCcEIsRUFBQW5FLEVBQUEsR0FBYzZOLEVBQWE3TCxTQWlCZ0J5QyxLQUM5RCtJLEVBQVF4QyxJQUFJcUQsSUFBWUssR0FHcEJ2RCxFQUFTbkosU0FDWHNNLEdBQ0YsSUFFSWxCLEVBQWEsZUFBa0IsSUFBTUksRUFBUUosV0FBV2lCLE1BQWEsQ0FBQ2IsSUFDdEVtQixHQUFrQixFQUFBRixFQUFBLElBQWlCM1AsSUFDdkMrTyxFQUFhN0wsUUFBVWxELEVBQ2xCQSxJQUdEdUMsR0FBUStMLElBQ1ZrQixJQUNTbkQsRUFBU25KLFNBQ2xCaUgsRUFBV2tDLEVBQVNuSixRQUFTb00sR0FDL0IsSUFFSVEsRUFBYyxlQUFrQixLQUNwQ3BCLEVBQVFSLE9BQU9xQixJQUFZRCxFQUFlLEdBQ3pDLENBQUNBLEVBQWdCWixJQUNwQixhQUFnQixJQUNQLEtBQ0xvQixHQUFhLEdBRWQsQ0FBQ0EsSUFDSixhQUFnQixLQUNWdk4sRUFDRm1OLElBQ1VQLEdBQWtCUixHQUM1Qm1CLEdBQ0YsR0FDQyxDQUFDdk4sRUFBTXVOLEVBQWFYLEVBQWVSLEVBQXNCZSxJQUM1RCxNQUFNSyxFQUFzQkMsR0FBaUJsTCxJQUMzQyxJQUFJbUwsRUFDaUQsT0FBcERBLEVBQXdCRCxFQUFjRSxZQUFzQkQsRUFBc0JsRixLQUFLaUYsRUFBZWxMLEdBUXJGLFdBQWRBLEVBQU1uQixLQUFvQyxNQUFoQm1CLEVBQU1xTCxPQUVuQzdCLE1BR0lHLElBRUgzSixFQUFNc0wsa0JBQ0Z0QixHQUNGQSxFQUFRaEssRUFBTyxrQkFFbkIsRUFFSXVMLEVBQTRCTCxHQUFpQmxMLElBQ2pELElBQUl3TCxFQUMrQyxPQUFsREEsRUFBd0JOLEVBQWNPLFVBQW9CRCxFQUFzQnZGLEtBQUtpRixFQUFlbEwsR0FDakdBLEVBQU1HLFNBQVdILEVBQU0wTCxlQUd2QjFCLEdBQ0ZBLEVBQVFoSyxFQUFPLGdCQUNqQixFQThDRixNQUFPLENBQ0wyTCxhQTdDbUIsQ0FBQ1QsRUFBZ0IsQ0FBQyxLQUNyQyxNQUFNVSxHQUFxQixFQUFBQyxFQUFBLEdBQXFCbkMsVUFHekNrQyxFQUFtQjlCLHlCQUNuQjhCLEVBQW1CN0IsbUJBQzFCLE1BQU0rQixHQUF3QixPQUFTLENBQUMsRUFBR0YsRUFBb0JWLEdBQy9ELE9BQU8sT0FBUyxDQUNkYSxLQUFNLGdCQUNMRCxFQUF1QixDQUN4QlYsVUFBV0gsRUFBb0JhLEdBQy9CNU4sSUFBS0QsR0FDTCxFQWtDRitOLGlCQWhDdUIsQ0FBQ2QsRUFBZ0IsQ0FBQyxLQUN6QyxNQUFNWSxFQUF3QlosRUFDOUIsT0FBTyxPQUFTLENBQ2QsZUFBZSxHQUNkWSxFQUF1QixDQUN4QkwsUUFBU0YsRUFBMEJPLEdBQ25Dck8sUUFDQSxFQTBCRndPLG1CQXhCeUIsS0FnQmxCLENBQ0xDLFNBQVMsRUFBQUMsRUFBQSxJQWhCUyxLQUNsQi9CLEdBQVUsR0FDTk4sR0FDRkEsR0FDRixHQVl3RCxNQUFaM00sT0FBbUIsRUFBU0EsRUFBU0QsTUFBTWdQLFNBQ3ZGRSxVQUFVLEVBQUFELEVBQUEsSUFYUyxLQUNuQi9CLEdBQVUsR0FDTkwsR0FDRkEsSUFFRUYsR0FDRm1CLEdBQ0YsR0FJMEQsTUFBWjdOLE9BQW1CLEVBQVNBLEVBQVNELE1BQU1rUCxZQU8zRnBPLFFBQVNDLEVBQ1RvTyxVQUFXdEIsRUFDWHZCLGFBQ0FXLFNBQ0FFLGdCQUVKLEMsZ0JDMUxPLFNBQVN3QixFQUFxQlMsRUFBUUMsRUFBYyxJQUN6RCxRQUFlckgsSUFBWG9ILEVBQ0YsTUFBTyxDQUFDLEVBRVYsTUFBTUUsRUFBUyxDQUFDLEVBSWhCLE9BSEE1SyxPQUFPQyxLQUFLeUssR0FBUUcsUUFBT0MsR0FBUUEsRUFBS0MsTUFBTSxhQUF1QyxtQkFBakJMLEVBQU9JLEtBQXlCSCxFQUFZSyxTQUFTRixLQUFPelIsU0FBUXlSLElBQ3RJRixFQUFPRSxHQUFRSixFQUFPSSxFQUFLLElBRXRCRixDQUNULEMsaUNDYk8sU0FBU0ssRUFBZ0J2SCxHQUM5QixNQUEwQixpQkFBWkEsQ0FDaEIsQyxnSENFTyxTQUFTd0gsRUFBa0JSLEdBQ2hDLFFBQWVwSCxJQUFYb0gsRUFDRixNQUFPLENBQUMsRUFFVixNQUFNRSxFQUFTLENBQUMsRUFJaEIsT0FIQTVLLE9BQU9DLEtBQUt5SyxHQUFRRyxRQUFPQyxLQUFVQSxFQUFLQyxNQUFNLGFBQXVDLG1CQUFqQkwsRUFBT0ksTUFBdUJ6UixTQUFReVIsSUFDMUdGLEVBQU9FLEdBQVFKLEVBQU9JLEVBQUssSUFFdEJGLENBQ1QsQ0NaQSxNQUFNekwsRUFBWSxDQUFDLGNBQWUsb0JBQXFCLGFBQWMsMEJBYTlELFNBQVNnTSxFQUFhckQsR0FDM0IsSUFBSXNELEVBQ0osTUFBTSxZQUNGQyxFQUFXLGtCQUNYQyxFQUFpQixXQUNqQkMsRUFBVSx1QkFDVkMsR0FBeUIsR0FDdkIxRCxFQUNKMkQsR0FBTyxPQUE4QjNELEVBQVkzSSxHQUM3Q3VNLEVBQTBCRixFQUF5QixDQUFDLEVDdEJyRCxTQUErQkcsRUFBZ0JKLEVBQVlLLEdBQ2hFLE1BQThCLG1CQUFuQkQsRUFDRkEsRUFBZUosT0RvQnNDTSxHQ2xCdkRGLENBQ1QsQ0RpQmdFRSxDQUFzQlAsRUFBbUJDLElBRXJHalEsTUFBT3dRLEVBQVcsWUFDbEJDLEdFWkcsU0FBd0JqRSxHQUM3QixNQUFNLGFBQ0prRSxFQUFZLGdCQUNaQyxFQUFlLGtCQUNmWCxFQUFpQix1QkFDakJZLEVBQXNCLFVBQ3RCM0ksR0FDRXVFLEVBQ0osSUFBS2tFLEVBQWMsQ0FHakIsTUFBTUcsR0FBZ0IsRUFBQUMsRUFBQSxHQUF3QixNQUFuQkgsT0FBMEIsRUFBU0EsRUFBZ0IxSSxVQUFXQSxFQUFxQyxNQUExQjJJLE9BQWlDLEVBQVNBLEVBQXVCM0ksVUFBZ0MsTUFBckIrSCxPQUE0QixFQUFTQSxFQUFrQi9ILFdBQ2pPOEksR0FBYyxPQUFTLENBQUMsRUFBc0IsTUFBbkJKLE9BQTBCLEVBQVNBLEVBQWdCMUwsTUFBaUMsTUFBMUIyTCxPQUFpQyxFQUFTQSxFQUF1QjNMLE1BQTRCLE1BQXJCK0ssT0FBNEIsRUFBU0EsRUFBa0IvSyxPQUNwTmpGLEdBQVEsT0FBUyxDQUFDLEVBQUcyUSxFQUFpQkMsRUFBd0JaLEdBT3BFLE9BTklhLEVBQWM1TyxPQUFTLElBQ3pCakMsRUFBTWlJLFVBQVk0SSxHQUVoQm5NLE9BQU9DLEtBQUtvTSxHQUFhOU8sT0FBUyxJQUNwQ2pDLEVBQU1pRixNQUFROEwsR0FFVCxDQUNML1EsUUFDQXlRLGlCQUFhekksRUFFakIsQ0FLQSxNQUFNZ0osR0FBZ0IsRUFBQXJDLEVBQUEsSUFBcUIsT0FBUyxDQUFDLEVBQUdpQyxFQUF3QlosSUFDMUVpQixFQUFzQ3JCLEVBQWtCSSxHQUN4RGtCLEVBQWlDdEIsRUFBa0JnQixHQUNuRE8sRUFBb0JULEVBQWFNLEdBTWpDSCxHQUFnQixFQUFBQyxFQUFBLEdBQTBCLE1BQXJCSyxPQUE0QixFQUFTQSxFQUFrQmxKLFVBQThCLE1BQW5CMEksT0FBMEIsRUFBU0EsRUFBZ0IxSSxVQUFXQSxFQUFxQyxNQUExQjJJLE9BQWlDLEVBQVNBLEVBQXVCM0ksVUFBZ0MsTUFBckIrSCxPQUE0QixFQUFTQSxFQUFrQi9ILFdBQ25TOEksR0FBYyxPQUFTLENBQUMsRUFBd0IsTUFBckJJLE9BQTRCLEVBQVNBLEVBQWtCbE0sTUFBMEIsTUFBbkIwTCxPQUEwQixFQUFTQSxFQUFnQjFMLE1BQWlDLE1BQTFCMkwsT0FBaUMsRUFBU0EsRUFBdUIzTCxNQUE0QixNQUFyQitLLE9BQTRCLEVBQVNBLEVBQWtCL0ssT0FDbFJqRixHQUFRLE9BQVMsQ0FBQyxFQUFHbVIsRUFBbUJSLEVBQWlCTyxFQUFnQ0QsR0FPL0YsT0FOSUosRUFBYzVPLE9BQVMsSUFDekJqQyxFQUFNaUksVUFBWTRJLEdBRWhCbk0sT0FBT0MsS0FBS29NLEdBQWE5TyxPQUFTLElBQ3BDakMsRUFBTWlGLE1BQVE4TCxHQUVULENBQ0wvUSxRQUNBeVEsWUFBYVUsRUFBa0JuUSxJQUVuQyxDRnRDTW9RLEVBQWUsT0FBUyxDQUFDLEVBQUdqQixFQUFNLENBQ3BDSCxrQkFBbUJJLEtBRWZwUCxHQUFNLEVBQUFnTSxFQUFBLEdBQVd5RCxFQUF3QyxNQUEzQkwsT0FBa0MsRUFBU0EsRUFBd0JwUCxJQUE2RCxPQUF2RDhPLEVBQXdCdEQsRUFBV21FLHNCQUEyQixFQUFTYixFQUFzQjlPLEtBQ3BNaEIsRUdsQkQsU0FBMEIrUCxFQUFhc0IsRUFBWXBCLEdBQ3hELFlBQW9CakksSUFBaEIrSCxJQUE2QixFQUFBSixFQUFBLEdBQWdCSSxHQUN4Q3NCLEdBRUYsT0FBUyxDQUFDLEVBQUdBLEVBQVksQ0FDOUJwQixZQUFZLE9BQVMsQ0FBQyxFQUFHb0IsRUFBV3BCLFdBQVlBLElBRXBELENIV2dCcUIsQ0FBaUJ2QixHQUFhLE9BQVMsQ0FBQyxFQUFHUyxFQUFhLENBQ3BFeFAsUUFDRWlQLEdBQ0osT0FBT2pRLENBQ1QsQyIsInNvdXJjZXMiOlsid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL2Jhc2UvRm9jdXNUcmFwL0ZvY3VzVHJhcC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9iYXNlL1BvcnRhbC9Qb3J0YWwuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS9UZXh0YXJlYUF1dG9zaXplL1RleHRhcmVhQXV0b3NpemUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS91bnN0YWJsZV91c2VNb2RhbC9Nb2RhbE1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS91bnN0YWJsZV91c2VNb2RhbC91c2VNb2RhbC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9iYXNlL3V0aWxzL2V4dHJhY3RFdmVudEhhbmRsZXJzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL2Jhc2UvdXRpbHMvaXNIb3N0Q29tcG9uZW50LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL2Jhc2UvdXRpbHMvb21pdEV2ZW50SGFuZGxlcnMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS91dGlscy91c2VTbG90UHJvcHMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS91dGlscy9yZXNvbHZlQ29tcG9uZW50UHJvcHMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS91dGlscy9tZXJnZVNsb3RQcm9wcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9iYXNlL3V0aWxzL2FwcGVuZE93bmVyU3RhdGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBjb25zaXN0ZW50LXJldHVybiwganN4LWExMXkvbm8tbm9uaW50ZXJhY3RpdmUtdGFiaW5kZXggKi9cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBleGFjdFByb3AsIGVsZW1lbnRBY2NlcHRpbmdSZWYsIHVuc3RhYmxlX3VzZUZvcmtSZWYgYXMgdXNlRm9ya1JlZiwgdW5zdGFibGVfb3duZXJEb2N1bWVudCBhcyBvd25lckRvY3VtZW50IH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2ZvY3VzLXRyYXAvdGFiYmFibGVcbmNvbnN0IGNhbmRpZGF0ZXNTZWxlY3RvciA9IFsnaW5wdXQnLCAnc2VsZWN0JywgJ3RleHRhcmVhJywgJ2FbaHJlZl0nLCAnYnV0dG9uJywgJ1t0YWJpbmRleF0nLCAnYXVkaW9bY29udHJvbHNdJywgJ3ZpZGVvW2NvbnRyb2xzXScsICdbY29udGVudGVkaXRhYmxlXTpub3QoW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdKSddLmpvaW4oJywnKTtcbmZ1bmN0aW9uIGdldFRhYkluZGV4KG5vZGUpIHtcbiAgY29uc3QgdGFiaW5kZXhBdHRyID0gcGFyc2VJbnQobm9kZS5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHwgJycsIDEwKTtcbiAgaWYgKCFOdW1iZXIuaXNOYU4odGFiaW5kZXhBdHRyKSkge1xuICAgIHJldHVybiB0YWJpbmRleEF0dHI7XG4gIH1cblxuICAvLyBCcm93c2VycyBkbyBub3QgcmV0dXJuIGB0YWJJbmRleGAgY29ycmVjdGx5IGZvciBjb250ZW50RWRpdGFibGUgbm9kZXM7XG4gIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTY2MTEwOCZxPWNvbnRlbnRlZGl0YWJsZSUyMHRhYmluZGV4JmNhbj0yXG4gIC8vIHNvIGlmIHRoZXkgZG9uJ3QgaGF2ZSBhIHRhYmluZGV4IGF0dHJpYnV0ZSBzcGVjaWZpY2FsbHkgc2V0LCBhc3N1bWUgaXQncyAwLlxuICAvLyBpbiBDaHJvbWUsIDxkZXRhaWxzLz4sIDxhdWRpbyBjb250cm9scy8+IGFuZCA8dmlkZW8gY29udHJvbHMvPiBlbGVtZW50cyBnZXQgYSBkZWZhdWx0XG4gIC8vICBgdGFiSW5kZXhgIG9mIC0xIHdoZW4gdGhlICd0YWJpbmRleCcgYXR0cmlidXRlIGlzbid0IHNwZWNpZmllZCBpbiB0aGUgRE9NLFxuICAvLyAgeWV0IHRoZXkgYXJlIHN0aWxsIHBhcnQgb2YgdGhlIHJlZ3VsYXIgdGFiIG9yZGVyOyBpbiBGRiwgdGhleSBnZXQgYSBkZWZhdWx0XG4gIC8vICBgdGFiSW5kZXhgIG9mIDA7IHNpbmNlIENocm9tZSBzdGlsbCBwdXRzIHRob3NlIGVsZW1lbnRzIGluIHRoZSByZWd1bGFyIHRhYlxuICAvLyAgb3JkZXIsIGNvbnNpZGVyIHRoZWlyIHRhYiBpbmRleCB0byBiZSAwLlxuICBpZiAobm9kZS5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJyB8fCAobm9kZS5ub2RlTmFtZSA9PT0gJ0FVRElPJyB8fCBub2RlLm5vZGVOYW1lID09PSAnVklERU8nIHx8IG5vZGUubm9kZU5hbWUgPT09ICdERVRBSUxTJykgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JykgPT09IG51bGwpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICByZXR1cm4gbm9kZS50YWJJbmRleDtcbn1cbmZ1bmN0aW9uIGlzTm9uVGFiYmFibGVSYWRpbyhub2RlKSB7XG4gIGlmIChub2RlLnRhZ05hbWUgIT09ICdJTlBVVCcgfHwgbm9kZS50eXBlICE9PSAncmFkaW8nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghbm9kZS5uYW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGdldFJhZGlvID0gc2VsZWN0b3IgPT4gbm9kZS5vd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYGlucHV0W3R5cGU9XCJyYWRpb1wiXSR7c2VsZWN0b3J9YCk7XG4gIGxldCByb3ZpbmcgPSBnZXRSYWRpbyhgW25hbWU9XCIke25vZGUubmFtZX1cIl06Y2hlY2tlZGApO1xuICBpZiAoIXJvdmluZykge1xuICAgIHJvdmluZyA9IGdldFJhZGlvKGBbbmFtZT1cIiR7bm9kZS5uYW1lfVwiXWApO1xuICB9XG4gIHJldHVybiByb3ZpbmcgIT09IG5vZGU7XG59XG5mdW5jdGlvbiBpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlKG5vZGUpIHtcbiAgaWYgKG5vZGUuZGlzYWJsZWQgfHwgbm9kZS50YWdOYW1lID09PSAnSU5QVVQnICYmIG5vZGUudHlwZSA9PT0gJ2hpZGRlbicgfHwgaXNOb25UYWJiYWJsZVJhZGlvKG5vZGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZGVmYXVsdEdldFRhYmJhYmxlKHJvb3QpIHtcbiAgY29uc3QgcmVndWxhclRhYk5vZGVzID0gW107XG4gIGNvbnN0IG9yZGVyZWRUYWJOb2RlcyA9IFtdO1xuICBBcnJheS5mcm9tKHJvb3QucXVlcnlTZWxlY3RvckFsbChjYW5kaWRhdGVzU2VsZWN0b3IpKS5mb3JFYWNoKChub2RlLCBpKSA9PiB7XG4gICAgY29uc3Qgbm9kZVRhYkluZGV4ID0gZ2V0VGFiSW5kZXgobm9kZSk7XG4gICAgaWYgKG5vZGVUYWJJbmRleCA9PT0gLTEgfHwgIWlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUobm9kZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG5vZGVUYWJJbmRleCA9PT0gMCkge1xuICAgICAgcmVndWxhclRhYk5vZGVzLnB1c2gobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9yZGVyZWRUYWJOb2Rlcy5wdXNoKHtcbiAgICAgICAgZG9jdW1lbnRPcmRlcjogaSxcbiAgICAgICAgdGFiSW5kZXg6IG5vZGVUYWJJbmRleCxcbiAgICAgICAgbm9kZTogbm9kZVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG9yZGVyZWRUYWJOb2Rlcy5zb3J0KChhLCBiKSA9PiBhLnRhYkluZGV4ID09PSBiLnRhYkluZGV4ID8gYS5kb2N1bWVudE9yZGVyIC0gYi5kb2N1bWVudE9yZGVyIDogYS50YWJJbmRleCAtIGIudGFiSW5kZXgpLm1hcChhID0+IGEubm9kZSkuY29uY2F0KHJlZ3VsYXJUYWJOb2Rlcyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0SXNFbmFibGVkKCkge1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBVdGlsaXR5IGNvbXBvbmVudCB0aGF0IGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgY29tcG9uZW50LlxuICpcbiAqIERlbW9zOlxuICpcbiAqIC0gW0ZvY3VzIFRyYXBdKGh0dHBzOi8vbXVpLmNvbS9iYXNlLXVpL3JlYWN0LWZvY3VzLXRyYXAvKVxuICpcbiAqIEFQSTpcbiAqXG4gKiAtIFtGb2N1c1RyYXAgQVBJXShodHRwczovL211aS5jb20vYmFzZS11aS9yZWFjdC1mb2N1cy10cmFwL2NvbXBvbmVudHMtYXBpLyNmb2N1cy10cmFwKVxuICovXG5mdW5jdGlvbiBGb2N1c1RyYXAocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGRpc2FibGVBdXRvRm9jdXMgPSBmYWxzZSxcbiAgICBkaXNhYmxlRW5mb3JjZUZvY3VzID0gZmFsc2UsXG4gICAgZGlzYWJsZVJlc3RvcmVGb2N1cyA9IGZhbHNlLFxuICAgIGdldFRhYmJhYmxlID0gZGVmYXVsdEdldFRhYmJhYmxlLFxuICAgIGlzRW5hYmxlZCA9IGRlZmF1bHRJc0VuYWJsZWQsXG4gICAgb3BlblxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGlnbm9yZU5leHRFbmZvcmNlRm9jdXMgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCBzZW50aW5lbFN0YXJ0ID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBzZW50aW5lbEVuZCA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3Qgbm9kZVRvUmVzdG9yZSA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgcmVhY3RGb2N1c0V2ZW50VGFyZ2V0ID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICAvLyBUaGlzIHZhcmlhYmxlIGlzIHVzZWZ1bCB3aGVuIGRpc2FibGVBdXRvRm9jdXMgaXMgdHJ1ZS5cbiAgLy8gSXQgd2FpdHMgZm9yIHRoZSBhY3RpdmUgZWxlbWVudCB0byBtb3ZlIGludG8gdGhlIGNvbXBvbmVudCB0byBhY3RpdmF0ZS5cbiAgY29uc3QgYWN0aXZhdGVkID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgcm9vdFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBUT0RPIHVwc3RyZWFtIGZpeFxuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKGNoaWxkcmVuLnJlZiwgcm9vdFJlZik7XG4gIGNvbnN0IGxhc3RLZXlkb3duID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFdlIG1pZ2h0IHJlbmRlciBhbiBlbXB0eSBjaGlsZC5cbiAgICBpZiAoIW9wZW4gfHwgIXJvb3RSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhY3RpdmF0ZWQuY3VycmVudCA9ICFkaXNhYmxlQXV0b0ZvY3VzO1xuICB9LCBbZGlzYWJsZUF1dG9Gb2N1cywgb3Blbl0pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFdlIG1pZ2h0IHJlbmRlciBhbiBlbXB0eSBjaGlsZC5cbiAgICBpZiAoIW9wZW4gfHwgIXJvb3RSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkb2MgPSBvd25lckRvY3VtZW50KHJvb3RSZWYuY3VycmVudCk7XG4gICAgaWYgKCFyb290UmVmLmN1cnJlbnQuY29udGFpbnMoZG9jLmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICBpZiAoIXJvb3RSZWYuY3VycmVudC5oYXNBdHRyaWJ1dGUoJ3RhYkluZGV4JykpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGUgbW9kYWwgY29udGVudCBub2RlIGRvZXMgbm90IGFjY2VwdCBmb2N1cy4nLCAnRm9yIHRoZSBiZW5lZml0IG9mIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMsICcgKyAndGhlIHRhYkluZGV4IG9mIHRoZSBub2RlIGlzIGJlaW5nIHNldCB0byBcIi0xXCIuJ10uam9pbignXFxuJykpO1xuICAgICAgICB9XG4gICAgICAgIHJvb3RSZWYuY3VycmVudC5zZXRBdHRyaWJ1dGUoJ3RhYkluZGV4JywgJy0xJyk7XG4gICAgICB9XG4gICAgICBpZiAoYWN0aXZhdGVkLmN1cnJlbnQpIHtcbiAgICAgICAgcm9vdFJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAvLyByZXN0b3JlTGFzdEZvY3VzKClcbiAgICAgIGlmICghZGlzYWJsZVJlc3RvcmVGb2N1cykge1xuICAgICAgICAvLyBJbiBJRTExIGl0IGlzIHBvc3NpYmxlIGZvciBkb2N1bWVudC5hY3RpdmVFbGVtZW50IHRvIGJlIG51bGwgcmVzdWx0aW5nXG4gICAgICAgIC8vIGluIG5vZGVUb1Jlc3RvcmUuY3VycmVudCBiZWluZyBudWxsLlxuICAgICAgICAvLyBOb3QgYWxsIGVsZW1lbnRzIGluIElFMTEgaGF2ZSBhIGZvY3VzIG1ldGhvZC5cbiAgICAgICAgLy8gT25jZSBJRTExIHN1cHBvcnQgaXMgZHJvcHBlZCB0aGUgZm9jdXMoKSBjYWxsIGNhbiBiZSB1bmNvbmRpdGlvbmFsLlxuICAgICAgICBpZiAobm9kZVRvUmVzdG9yZS5jdXJyZW50ICYmIG5vZGVUb1Jlc3RvcmUuY3VycmVudC5mb2N1cykge1xuICAgICAgICAgIGlnbm9yZU5leHRFbmZvcmNlRm9jdXMuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgbm9kZVRvUmVzdG9yZS5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZVRvUmVzdG9yZS5jdXJyZW50ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuICAgIC8vIE1pc3NpbmcgYGRpc2FibGVSZXN0b3JlRm9jdXNgIHdoaWNoIGlzIGZpbmUuXG4gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBjaGFuZ2luZyB0aGF0IHByb3Agb24gYW4gb3BlbiBGb2N1c1RyYXBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtvcGVuXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gV2UgbWlnaHQgcmVuZGVyIGFuIGVtcHR5IGNoaWxkLlxuICAgIGlmICghb3BlbiB8fCAhcm9vdFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRvYyA9IG93bmVyRG9jdW1lbnQocm9vdFJlZi5jdXJyZW50KTtcbiAgICBjb25zdCBsb29wRm9jdXMgPSBuYXRpdmVFdmVudCA9PiB7XG4gICAgICBsYXN0S2V5ZG93bi5jdXJyZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICBpZiAoZGlzYWJsZUVuZm9yY2VGb2N1cyB8fCAhaXNFbmFibGVkKCkgfHwgbmF0aXZlRXZlbnQua2V5ICE9PSAnVGFiJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmV4dCB0YWIgc3RhcnRzIGZyb20gdGhlIHJpZ2h0IHBsYWNlLlxuICAgICAgLy8gZG9jLmFjdGl2ZUVsZW1lbnQgcmVmZXJzIHRvIHRoZSBvcmlnaW4uXG4gICAgICBpZiAoZG9jLmFjdGl2ZUVsZW1lbnQgPT09IHJvb3RSZWYuY3VycmVudCAmJiBuYXRpdmVFdmVudC5zaGlmdEtleSkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGlnbm9yZSB0aGUgbmV4dCBjb250YWluIGFzXG4gICAgICAgIC8vIGl0IHdpbGwgdHJ5IHRvIG1vdmUgdGhlIGZvY3VzIGJhY2sgdG8gdGhlIHJvb3RSZWYgZWxlbWVudC5cbiAgICAgICAgaWdub3JlTmV4dEVuZm9yY2VGb2N1cy5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgaWYgKHNlbnRpbmVsRW5kLmN1cnJlbnQpIHtcbiAgICAgICAgICBzZW50aW5lbEVuZC5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNvbnRhaW4gPSAoKSA9PiB7XG4gICAgICBjb25zdCByb290RWxlbWVudCA9IHJvb3RSZWYuY3VycmVudDtcblxuICAgICAgLy8gQ2xlYW51cCBmdW5jdGlvbnMgYXJlIGV4ZWN1dGVkIGxhemlseSBpbiBSZWFjdCAxNy5cbiAgICAgIC8vIENvbnRhaW4gY2FuIGJlIGNhbGxlZCBiZXR3ZWVuIHRoZSBjb21wb25lbnQgYmVpbmcgdW5tb3VudGVkIGFuZCBpdHMgY2xlYW51cCBmdW5jdGlvbiBiZWluZyBydW4uXG4gICAgICBpZiAocm9vdEVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFkb2MuaGFzRm9jdXMoKSB8fCAhaXNFbmFibGVkKCkgfHwgaWdub3JlTmV4dEVuZm9yY2VGb2N1cy5jdXJyZW50KSB7XG4gICAgICAgIGlnbm9yZU5leHRFbmZvcmNlRm9jdXMuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBmb2N1cyBpcyBhbHJlYWR5IGluc2lkZVxuICAgICAgaWYgKHJvb3RFbGVtZW50LmNvbnRhaW5zKGRvYy5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBkaXNhYmxlRW5mb3JjZUZvY3VzIGlzIHNldCBhbmQgdGhlIGZvY3VzIGlzIG91dHNpZGUgb2YgdGhlIGZvY3VzIHRyYXAgKGFuZCBzZW50aW5lbCBub2RlcylcbiAgICAgIGlmIChkaXNhYmxlRW5mb3JjZUZvY3VzICYmIGRvYy5hY3RpdmVFbGVtZW50ICE9PSBzZW50aW5lbFN0YXJ0LmN1cnJlbnQgJiYgZG9jLmFjdGl2ZUVsZW1lbnQgIT09IHNlbnRpbmVsRW5kLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgZm9jdXMgZXZlbnQgaXMgbm90IGNvbWluZyBmcm9tIGluc2lkZSB0aGUgY2hpbGRyZW4ncyByZWFjdCB0cmVlLCByZXNldCB0aGUgcmVmc1xuICAgICAgaWYgKGRvYy5hY3RpdmVFbGVtZW50ICE9PSByZWFjdEZvY3VzRXZlbnRUYXJnZXQuY3VycmVudCkge1xuICAgICAgICByZWFjdEZvY3VzRXZlbnRUYXJnZXQuY3VycmVudCA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHJlYWN0Rm9jdXNFdmVudFRhcmdldC5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghYWN0aXZhdGVkLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IHRhYmJhYmxlID0gW107XG4gICAgICBpZiAoZG9jLmFjdGl2ZUVsZW1lbnQgPT09IHNlbnRpbmVsU3RhcnQuY3VycmVudCB8fCBkb2MuYWN0aXZlRWxlbWVudCA9PT0gc2VudGluZWxFbmQuY3VycmVudCkge1xuICAgICAgICB0YWJiYWJsZSA9IGdldFRhYmJhYmxlKHJvb3RSZWYuY3VycmVudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIG9uZSBvZiB0aGUgc2VudGluZWwgbm9kZXMgd2FzIGZvY3VzZWQsIHNvIG1vdmUgdGhlIGZvY3VzXG4gICAgICAvLyB0byB0aGUgZmlyc3QvbGFzdCB0YWJiYWJsZSBlbGVtZW50IGluc2lkZSB0aGUgZm9jdXMgdHJhcFxuICAgICAgaWYgKHRhYmJhYmxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIF9sYXN0S2V5ZG93biRjdXJyZW50LCBfbGFzdEtleWRvd24kY3VycmVudDI7XG4gICAgICAgIGNvbnN0IGlzU2hpZnRUYWIgPSBCb29sZWFuKCgoX2xhc3RLZXlkb3duJGN1cnJlbnQgPSBsYXN0S2V5ZG93bi5jdXJyZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2xhc3RLZXlkb3duJGN1cnJlbnQuc2hpZnRLZXkpICYmICgoX2xhc3RLZXlkb3duJGN1cnJlbnQyID0gbGFzdEtleWRvd24uY3VycmVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9sYXN0S2V5ZG93biRjdXJyZW50Mi5rZXkpID09PSAnVGFiJyk7XG4gICAgICAgIGNvbnN0IGZvY3VzTmV4dCA9IHRhYmJhYmxlWzBdO1xuICAgICAgICBjb25zdCBmb2N1c1ByZXZpb3VzID0gdGFiYmFibGVbdGFiYmFibGUubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0eXBlb2YgZm9jdXNOZXh0ICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgZm9jdXNQcmV2aW91cyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpZiAoaXNTaGlmdFRhYikge1xuICAgICAgICAgICAgZm9jdXNQcmV2aW91cy5mb2N1cygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb2N1c05leHQuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm8gdGFiYmFibGUgZWxlbWVudHMgaW4gdGhlIHRyYXAgZm9jdXMgb3IgdGhlIGZvY3VzIHdhcyBvdXRzaWRlIG9mIHRoZSBmb2N1cyB0cmFwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb290RWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH07XG4gICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBjb250YWluKTtcbiAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGxvb3BGb2N1cywgdHJ1ZSk7XG5cbiAgICAvLyBXaXRoIEVkZ2UsIFNhZmFyaSBhbmQgRmlyZWZveCwgbm8gZm9jdXMgcmVsYXRlZCBldmVudHMgYXJlIGZpcmVkIHdoZW4gdGhlIGZvY3VzZWQgYXJlYSBzdG9wcyBiZWluZyBhIGZvY3VzZWQgYXJlYS5cbiAgICAvLyBlLmcuIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTU1OTU2MS5cbiAgICAvLyBJbnN0ZWFkLCB3ZSBjYW4gbG9vayBpZiB0aGUgYWN0aXZlIGVsZW1lbnQgd2FzIHJlc3RvcmVkIG9uIHRoZSBCT0RZIGVsZW1lbnQuXG4gICAgLy9cbiAgICAvLyBUaGUgd2hhdHdnIHNwZWMgZGVmaW5lcyBob3cgdGhlIGJyb3dzZXIgc2hvdWxkIGJlaGF2ZSBidXQgZG9lcyBub3QgZXhwbGljaXRseSBtZW50aW9uIGFueSBldmVudHM6XG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW50ZXJhY3Rpb24uaHRtbCNmb2N1cy1maXh1cC1ydWxlLlxuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYgKGRvYy5hY3RpdmVFbGVtZW50ICYmIGRvYy5hY3RpdmVFbGVtZW50LnRhZ05hbWUgPT09ICdCT0RZJykge1xuICAgICAgICBjb250YWluKCk7XG4gICAgICB9XG4gICAgfSwgNTApO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c2luJywgY29udGFpbik7XG4gICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGxvb3BGb2N1cywgdHJ1ZSk7XG4gICAgfTtcbiAgfSwgW2Rpc2FibGVBdXRvRm9jdXMsIGRpc2FibGVFbmZvcmNlRm9jdXMsIGRpc2FibGVSZXN0b3JlRm9jdXMsIGlzRW5hYmxlZCwgb3BlbiwgZ2V0VGFiYmFibGVdKTtcbiAgY29uc3Qgb25Gb2N1cyA9IGV2ZW50ID0+IHtcbiAgICBpZiAobm9kZVRvUmVzdG9yZS5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICBub2RlVG9SZXN0b3JlLmN1cnJlbnQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgIH1cbiAgICBhY3RpdmF0ZWQuY3VycmVudCA9IHRydWU7XG4gICAgcmVhY3RGb2N1c0V2ZW50VGFyZ2V0LmN1cnJlbnQgPSBldmVudC50YXJnZXQ7XG4gICAgY29uc3QgY2hpbGRyZW5Qcm9wc0hhbmRsZXIgPSBjaGlsZHJlbi5wcm9wcy5vbkZvY3VzO1xuICAgIGlmIChjaGlsZHJlblByb3BzSGFuZGxlcikge1xuICAgICAgY2hpbGRyZW5Qcm9wc0hhbmRsZXIoZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlRm9jdXNTZW50aW5lbCA9IGV2ZW50ID0+IHtcbiAgICBpZiAobm9kZVRvUmVzdG9yZS5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICBub2RlVG9SZXN0b3JlLmN1cnJlbnQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgIH1cbiAgICBhY3RpdmF0ZWQuY3VycmVudCA9IHRydWU7XG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KFwiZGl2XCIsIHtcbiAgICAgIHRhYkluZGV4OiBvcGVuID8gMCA6IC0xLFxuICAgICAgb25Gb2N1czogaGFuZGxlRm9jdXNTZW50aW5lbCxcbiAgICAgIHJlZjogc2VudGluZWxTdGFydCxcbiAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJzZW50aW5lbFN0YXJ0XCJcbiAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgcmVmOiBoYW5kbGVSZWYsXG4gICAgICBvbkZvY3VzXG4gICAgfSksIC8qI19fUFVSRV9fKi9fanN4KFwiZGl2XCIsIHtcbiAgICAgIHRhYkluZGV4OiBvcGVuID8gMCA6IC0xLFxuICAgICAgb25Gb2N1czogaGFuZGxlRm9jdXNTZW50aW5lbCxcbiAgICAgIHJlZjogc2VudGluZWxFbmQsXG4gICAgICBcImRhdGEtdGVzdGlkXCI6IFwic2VudGluZWxFbmRcIlxuICAgIH0pXVxuICB9KTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZvY3VzVHJhcC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgVHlwZVNjcmlwdCB0eXBlcyBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBjaGlsZCBjb250ZW50IGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZixcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGZvY3VzIHRyYXAgd2lsbCBub3QgYXV0b21hdGljYWxseSBzaGlmdCBmb2N1cyB0byBpdHNlbGYgd2hlbiBpdCBvcGVucywgYW5kXG4gICAqIHJlcGxhY2UgaXQgdG8gdGhlIGxhc3QgZm9jdXNlZCBlbGVtZW50IHdoZW4gaXQgY2xvc2VzLlxuICAgKiBUaGlzIGFsc28gd29ya3MgY29ycmVjdGx5IHdpdGggYW55IGZvY3VzIHRyYXAgY2hpbGRyZW4gdGhhdCBoYXZlIHRoZSBgZGlzYWJsZUF1dG9Gb2N1c2AgcHJvcC5cbiAgICpcbiAgICogR2VuZXJhbGx5IHRoaXMgc2hvdWxkIG5ldmVyIGJlIHNldCB0byBgdHJ1ZWAgYXMgaXQgbWFrZXMgdGhlIGZvY3VzIHRyYXAgbGVzc1xuICAgKiBhY2Nlc3NpYmxlIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMsIGxpa2Ugc2NyZWVuIHJlYWRlcnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlQXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGZvY3VzIHRyYXAgd2lsbCBub3QgcHJldmVudCBmb2N1cyBmcm9tIGxlYXZpbmcgdGhlIGZvY3VzIHRyYXAgd2hpbGUgb3Blbi5cbiAgICpcbiAgICogR2VuZXJhbGx5IHRoaXMgc2hvdWxkIG5ldmVyIGJlIHNldCB0byBgdHJ1ZWAgYXMgaXQgbWFrZXMgdGhlIGZvY3VzIHRyYXAgbGVzc1xuICAgKiBhY2Nlc3NpYmxlIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMsIGxpa2Ugc2NyZWVuIHJlYWRlcnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlRW5mb3JjZUZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGZvY3VzIHRyYXAgd2lsbCBub3QgcmVzdG9yZSBmb2N1cyB0byBwcmV2aW91c2x5IGZvY3VzZWQgZWxlbWVudCBvbmNlXG4gICAqIGZvY3VzIHRyYXAgaXMgaGlkZGVuIG9yIHVubW91bnRlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSZXN0b3JlRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBvcmRlcmVkIHRhYmJhYmxlIG5vZGVzIChpLmUuIGluIHRhYiBvcmRlcikgd2l0aGluIHRoZSByb290LlxuICAgKiBGb3IgaW5zdGFuY2UsIHlvdSBjYW4gcHJvdmlkZSB0aGUgXCJ0YWJiYWJsZVwiIG5wbSBkZXBlbmRlbmN5LlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByb290XG4gICAqL1xuICBnZXRUYWJiYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgZXh0ZW5kcyB0aGUgYG9wZW5gIHByb3AuXG4gICAqIEl0IGFsbG93cyB0byB0b2dnbGUgdGhlIG9wZW4gc3RhdGUgd2l0aG91dCBoYXZpbmcgdG8gd2FpdCBmb3IgYSByZXJlbmRlciB3aGVuIGNoYW5naW5nIHRoZSBgb3BlbmAgcHJvcC5cbiAgICogVGhpcyBwcm9wIHNob3VsZCBiZSBtZW1vaXplZC5cbiAgICogSXQgY2FuIGJlIHVzZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBmb2N1cyB0cmFwIG1vdW50ZWQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICogQGRlZmF1bHQgZnVuY3Rpb24gZGVmYXVsdElzRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICogICByZXR1cm4gdHJ1ZTtcbiAgICogfVxuICAgKi9cbiAgaXNFbmFibGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgZm9jdXMgaXMgbG9ja2VkLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZFxufSA6IHZvaWQgMDtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBGb2N1c1RyYXBbJ3Byb3BUeXBlcycgKyAnJ10gPSBleGFjdFByb3AoRm9jdXNUcmFwLnByb3BUeXBlcyk7XG59XG5leHBvcnQgeyBGb2N1c1RyYXAgfTsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCAqIGFzIFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgZXhhY3RQcm9wLCBIVE1MRWxlbWVudFR5cGUsIHVuc3RhYmxlX3VzZUVuaGFuY2VkRWZmZWN0IGFzIHVzZUVuaGFuY2VkRWZmZWN0LCB1bnN0YWJsZV91c2VGb3JrUmVmIGFzIHVzZUZvcmtSZWYsIHVuc3RhYmxlX3NldFJlZiBhcyBzZXRSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBnZXRDb250YWluZXIoY29udGFpbmVyKSB7XG4gIHJldHVybiB0eXBlb2YgY29udGFpbmVyID09PSAnZnVuY3Rpb24nID8gY29udGFpbmVyKCkgOiBjb250YWluZXI7XG59XG5cbi8qKlxuICogUG9ydGFscyBwcm92aWRlIGEgZmlyc3QtY2xhc3Mgd2F5IHRvIHJlbmRlciBjaGlsZHJlbiBpbnRvIGEgRE9NIG5vZGVcbiAqIHRoYXQgZXhpc3RzIG91dHNpZGUgdGhlIERPTSBoaWVyYXJjaHkgb2YgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gKlxuICogRGVtb3M6XG4gKlxuICogLSBbUG9ydGFsXShodHRwczovL211aS5jb20vYmFzZS11aS9yZWFjdC1wb3J0YWwvKVxuICpcbiAqIEFQSTpcbiAqXG4gKiAtIFtQb3J0YWwgQVBJXShodHRwczovL211aS5jb20vYmFzZS11aS9yZWFjdC1wb3J0YWwvY29tcG9uZW50cy1hcGkvI3BvcnRhbClcbiAqL1xuY29uc3QgUG9ydGFsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gUG9ydGFsKHByb3BzLCBmb3J3YXJkZWRSZWYpIHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGNvbnRhaW5lcixcbiAgICBkaXNhYmxlUG9ydGFsID0gZmFsc2VcbiAgfSA9IHByb3BzO1xuICBjb25zdCBbbW91bnROb2RlLCBzZXRNb3VudE5vZGVdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETyB1cHN0cmVhbSBmaXhcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZiggLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSA/IGNoaWxkcmVuLnJlZiA6IG51bGwsIGZvcndhcmRlZFJlZik7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWRpc2FibGVQb3J0YWwpIHtcbiAgICAgIHNldE1vdW50Tm9kZShnZXRDb250YWluZXIoY29udGFpbmVyKSB8fCBkb2N1bWVudC5ib2R5KTtcbiAgICB9XG4gIH0sIFtjb250YWluZXIsIGRpc2FibGVQb3J0YWxdKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtb3VudE5vZGUgJiYgIWRpc2FibGVQb3J0YWwpIHtcbiAgICAgIHNldFJlZihmb3J3YXJkZWRSZWYsIG1vdW50Tm9kZSk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBzZXRSZWYoZm9yd2FyZGVkUmVmLCBudWxsKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtmb3J3YXJkZWRSZWYsIG1vdW50Tm9kZSwgZGlzYWJsZVBvcnRhbF0pO1xuICBpZiAoZGlzYWJsZVBvcnRhbCkge1xuICAgIGlmICggLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgICAgY29uc3QgbmV3UHJvcHMgPSB7XG4gICAgICAgIHJlZjogaGFuZGxlUmVmXG4gICAgICB9O1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIG5ld1Byb3BzKTtcbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFJlYWN0LkZyYWdtZW50LCB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogbW91bnROb2RlID8gLyojX19QVVJFX18qL1JlYWN0RE9NLmNyZWF0ZVBvcnRhbChjaGlsZHJlbiwgbW91bnROb2RlKSA6IG1vdW50Tm9kZVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUG9ydGFsLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCBUeXBlU2NyaXB0IHR5cGVzIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjaGlsZHJlbiB0byByZW5kZXIgaW50byB0aGUgYGNvbnRhaW5lcmAuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBBbiBIVE1MIGVsZW1lbnQgb3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9uZS5cbiAgICogVGhlIGBjb250YWluZXJgIHdpbGwgaGF2ZSB0aGUgcG9ydGFsIGNoaWxkcmVuIGFwcGVuZGVkIHRvIGl0LlxuICAgKlxuICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIGNhbGxiYWNrLCB3aGljaCBpcyBjYWxsZWQgaW4gYSBSZWFjdCBsYXlvdXQgZWZmZWN0LlxuICAgKiBUaGlzIGxldHMgeW91IHNldCB0aGUgY29udGFpbmVyIGZyb20gYSByZWYsIGFuZCBhbHNvIG1ha2VzIHNlcnZlci1zaWRlIHJlbmRlcmluZyBwb3NzaWJsZS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgdG9wLWxldmVsIGRvY3VtZW50IG9iamVjdCxcbiAgICogc28gaXQncyBzaW1wbHkgYGRvY3VtZW50LmJvZHlgIG1vc3Qgb2YgdGhlIHRpbWUuXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMuZnVuY10pLFxuICAvKipcbiAgICogVGhlIGBjaGlsZHJlbmAgd2lsbCBiZSB1bmRlciB0aGUgRE9NIGhpZXJhcmNoeSBvZiB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQb3J0YWw6IFByb3BUeXBlcy5ib29sXG59IDogdm9pZCAwO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIFBvcnRhbFsncHJvcFR5cGVzJyArICcnXSA9IGV4YWN0UHJvcChQb3J0YWwucHJvcFR5cGVzKTtcbn1cbmV4cG9ydCB7IFBvcnRhbCB9OyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm9uQ2hhbmdlXCIsIFwibWF4Um93c1wiLCBcIm1pblJvd3NcIiwgXCJzdHlsZVwiLCBcInZhbHVlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCAqIGFzIFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyB1bnN0YWJsZV9kZWJvdW5jZSBhcyBkZWJvdW5jZSwgdW5zdGFibGVfdXNlRm9ya1JlZiBhcyB1c2VGb3JrUmVmLCB1bnN0YWJsZV91c2VFbmhhbmNlZEVmZmVjdCBhcyB1c2VFbmhhbmNlZEVmZmVjdCwgdW5zdGFibGVfb3duZXJXaW5kb3cgYXMgb3duZXJXaW5kb3cgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBnZXRTdHlsZVZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApIHx8IDA7XG59XG5jb25zdCBzdHlsZXMgPSB7XG4gIHNoYWRvdzoge1xuICAgIC8vIFZpc2liaWxpdHkgbmVlZGVkIHRvIGhpZGUgdGhlIGV4dHJhIHRleHQgYXJlYSBvbiBpUGFkc1xuICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgIC8vIFJlbW92ZSBmcm9tIHRoZSBjb250ZW50IGZsb3dcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAvLyBJZ25vcmUgdGhlIHNjcm9sbGJhciB3aWR0aFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBoZWlnaHQ6IDAsXG4gICAgdG9wOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgLy8gQ3JlYXRlIGEgbmV3IGxheWVyLCBpbmNyZWFzZSB0aGUgaXNvbGF0aW9uIG9mIHRoZSBjb21wdXRlZCB2YWx1ZXNcbiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVaKDApJ1xuICB9XG59O1xuZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCB8fCBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMCB8fCBvYmoub3V0ZXJIZWlnaHRTdHlsZSA9PT0gMCAmJiAhb2JqLm92ZXJmbG93O1xufVxuXG4vKipcbiAqXG4gKiBEZW1vczpcbiAqXG4gKiAtIFtUZXh0YXJlYSBBdXRvc2l6ZV0oaHR0cHM6Ly9tdWkuY29tL2Jhc2UtdWkvcmVhY3QtdGV4dGFyZWEtYXV0b3NpemUvKVxuICogLSBbVGV4dGFyZWEgQXV0b3NpemVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9yZWFjdC10ZXh0YXJlYS1hdXRvc2l6ZS8pXG4gKlxuICogQVBJOlxuICpcbiAqIC0gW1RleHRhcmVhQXV0b3NpemUgQVBJXShodHRwczovL211aS5jb20vYmFzZS11aS9yZWFjdC10ZXh0YXJlYS1hdXRvc2l6ZS9jb21wb25lbnRzLWFwaS8jdGV4dGFyZWEtYXV0b3NpemUpXG4gKi9cbmNvbnN0IFRleHRhcmVhQXV0b3NpemUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUZXh0YXJlYUF1dG9zaXplKHByb3BzLCBmb3J3YXJkZWRSZWYpIHtcbiAgY29uc3Qge1xuICAgICAgb25DaGFuZ2UsXG4gICAgICBtYXhSb3dzLFxuICAgICAgbWluUm93cyA9IDEsXG4gICAgICBzdHlsZSxcbiAgICAgIHZhbHVlXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHtcbiAgICBjdXJyZW50OiBpc0NvbnRyb2xsZWRcbiAgfSA9IFJlYWN0LnVzZVJlZih2YWx1ZSAhPSBudWxsKTtcbiAgY29uc3QgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYoZm9yd2FyZGVkUmVmLCBpbnB1dFJlZik7XG4gIGNvbnN0IHNoYWRvd1JlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgcmVuZGVycyA9IFJlYWN0LnVzZVJlZigwKTtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgb3V0ZXJIZWlnaHRTdHlsZTogMFxuICB9KTtcbiAgY29uc3QgZ2V0VXBkYXRlZFN0YXRlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gaW5wdXRSZWYuY3VycmVudDtcbiAgICBjb25zdCBjb250YWluZXJXaW5kb3cgPSBvd25lcldpbmRvdyhpbnB1dCk7XG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IGNvbnRhaW5lcldpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGlucHV0KTtcblxuICAgIC8vIElmIGlucHV0J3Mgd2lkdGggaXMgc2hydW5rIGFuZCBpdCdzIG5vdCB2aXNpYmxlLCBkb24ndCBzeW5jIGhlaWdodC5cbiAgICBpZiAoY29tcHV0ZWRTdHlsZS53aWR0aCA9PT0gJzBweCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dGVySGVpZ2h0U3R5bGU6IDBcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGlucHV0U2hhbGxvdyA9IHNoYWRvd1JlZi5jdXJyZW50O1xuICAgIGlucHV0U2hhbGxvdy5zdHlsZS53aWR0aCA9IGNvbXB1dGVkU3R5bGUud2lkdGg7XG4gICAgaW5wdXRTaGFsbG93LnZhbHVlID0gaW5wdXQudmFsdWUgfHwgcHJvcHMucGxhY2Vob2xkZXIgfHwgJ3gnO1xuICAgIGlmIChpbnB1dFNoYWxsb3cudmFsdWUuc2xpY2UoLTEpID09PSAnXFxuJykge1xuICAgICAgLy8gQ2VydGFpbiBmb250cyB3aGljaCBvdmVyZmxvdyB0aGUgbGluZSBoZWlnaHQgd2lsbCBjYXVzZSB0aGUgdGV4dGFyZWFcbiAgICAgIC8vIHRvIHJlcG9ydCBhIGRpZmZlcmVudCBzY3JvbGxIZWlnaHQgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGxhc3QgbGluZVxuICAgICAgLy8gaXMgZW1wdHkuIE1ha2UgaXQgbm9uLWVtcHR5IHRvIGF2b2lkIHRoaXMgaXNzdWUuXG4gICAgICBpbnB1dFNoYWxsb3cudmFsdWUgKz0gJyAnO1xuICAgIH1cbiAgICBjb25zdCBib3hTaXppbmcgPSBjb21wdXRlZFN0eWxlLmJveFNpemluZztcbiAgICBjb25zdCBwYWRkaW5nID0gZ2V0U3R5bGVWYWx1ZShjb21wdXRlZFN0eWxlLnBhZGRpbmdCb3R0b20pICsgZ2V0U3R5bGVWYWx1ZShjb21wdXRlZFN0eWxlLnBhZGRpbmdUb3ApO1xuICAgIGNvbnN0IGJvcmRlciA9IGdldFN0eWxlVmFsdWUoY29tcHV0ZWRTdHlsZS5ib3JkZXJCb3R0b21XaWR0aCkgKyBnZXRTdHlsZVZhbHVlKGNvbXB1dGVkU3R5bGUuYm9yZGVyVG9wV2lkdGgpO1xuXG4gICAgLy8gVGhlIGhlaWdodCBvZiB0aGUgaW5uZXIgY29udGVudFxuICAgIGNvbnN0IGlubmVySGVpZ2h0ID0gaW5wdXRTaGFsbG93LnNjcm9sbEhlaWdodDtcblxuICAgIC8vIE1lYXN1cmUgaGVpZ2h0IG9mIGEgdGV4dGFyZWEgd2l0aCBhIHNpbmdsZSByb3dcbiAgICBpbnB1dFNoYWxsb3cudmFsdWUgPSAneCc7XG4gICAgY29uc3Qgc2luZ2xlUm93SGVpZ2h0ID0gaW5wdXRTaGFsbG93LnNjcm9sbEhlaWdodDtcblxuICAgIC8vIFRoZSBoZWlnaHQgb2YgdGhlIG91dGVyIGNvbnRlbnRcbiAgICBsZXQgb3V0ZXJIZWlnaHQgPSBpbm5lckhlaWdodDtcbiAgICBpZiAobWluUm93cykge1xuICAgICAgb3V0ZXJIZWlnaHQgPSBNYXRoLm1heChOdW1iZXIobWluUm93cykgKiBzaW5nbGVSb3dIZWlnaHQsIG91dGVySGVpZ2h0KTtcbiAgICB9XG4gICAgaWYgKG1heFJvd3MpIHtcbiAgICAgIG91dGVySGVpZ2h0ID0gTWF0aC5taW4oTnVtYmVyKG1heFJvd3MpICogc2luZ2xlUm93SGVpZ2h0LCBvdXRlckhlaWdodCk7XG4gICAgfVxuICAgIG91dGVySGVpZ2h0ID0gTWF0aC5tYXgob3V0ZXJIZWlnaHQsIHNpbmdsZVJvd0hlaWdodCk7XG5cbiAgICAvLyBUYWtlIHRoZSBib3ggc2l6aW5nIGludG8gYWNjb3VudCBmb3IgYXBwbHlpbmcgdGhpcyB2YWx1ZSBhcyBhIHN0eWxlLlxuICAgIGNvbnN0IG91dGVySGVpZ2h0U3R5bGUgPSBvdXRlckhlaWdodCArIChib3hTaXppbmcgPT09ICdib3JkZXItYm94JyA/IHBhZGRpbmcgKyBib3JkZXIgOiAwKTtcbiAgICBjb25zdCBvdmVyZmxvdyA9IE1hdGguYWJzKG91dGVySGVpZ2h0IC0gaW5uZXJIZWlnaHQpIDw9IDE7XG4gICAgcmV0dXJuIHtcbiAgICAgIG91dGVySGVpZ2h0U3R5bGUsXG4gICAgICBvdmVyZmxvd1xuICAgIH07XG4gIH0sIFttYXhSb3dzLCBtaW5Sb3dzLCBwcm9wcy5wbGFjZWhvbGRlcl0pO1xuICBjb25zdCB1cGRhdGVTdGF0ZSA9IChwcmV2U3RhdGUsIG5ld1N0YXRlKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3V0ZXJIZWlnaHRTdHlsZSxcbiAgICAgIG92ZXJmbG93XG4gICAgfSA9IG5ld1N0YXRlO1xuICAgIC8vIE5lZWQgYSBsYXJnZSBlbm91Z2ggZGlmZmVyZW5jZSB0byB1cGRhdGUgdGhlIGhlaWdodC5cbiAgICAvLyBUaGlzIHByZXZlbnRzIGluZmluaXRlIHJlbmRlcmluZyBsb29wLlxuICAgIGlmIChyZW5kZXJzLmN1cnJlbnQgPCAyMCAmJiAob3V0ZXJIZWlnaHRTdHlsZSA+IDAgJiYgTWF0aC5hYnMoKHByZXZTdGF0ZS5vdXRlckhlaWdodFN0eWxlIHx8IDApIC0gb3V0ZXJIZWlnaHRTdHlsZSkgPiAxIHx8IHByZXZTdGF0ZS5vdmVyZmxvdyAhPT0gb3ZlcmZsb3cpKSB7XG4gICAgICByZW5kZXJzLmN1cnJlbnQgKz0gMTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG92ZXJmbG93LFxuICAgICAgICBvdXRlckhlaWdodFN0eWxlXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHJlbmRlcnMuY3VycmVudCA9PT0gMjApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogVG9vIG1hbnkgcmUtcmVuZGVycy4gVGhlIGxheW91dCBpcyB1bnN0YWJsZS4nLCAnVGV4dGFyZWFBdXRvc2l6ZSBsaW1pdHMgdGhlIG51bWJlciBvZiByZW5kZXJzIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcmV2U3RhdGU7XG4gIH07XG4gIGNvbnN0IHN5bmNIZWlnaHQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSBnZXRVcGRhdGVkU3RhdGUoKTtcbiAgICBpZiAoaXNFbXB0eShuZXdTdGF0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0U3RhdGUocHJldlN0YXRlID0+IHVwZGF0ZVN0YXRlKHByZXZTdGF0ZSwgbmV3U3RhdGUpKTtcbiAgfSwgW2dldFVwZGF0ZWRTdGF0ZV0pO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc3luY0hlaWdodFdpdGhGbHVzaFN5bmMgPSAoKSA9PiB7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IGdldFVwZGF0ZWRTdGF0ZSgpO1xuICAgICAgaWYgKGlzRW1wdHkobmV3U3RhdGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gSW4gUmVhY3QgMTgsIHN0YXRlIHVwZGF0ZXMgaW4gYSBSZXNpemVPYnNlcnZlcidzIGNhbGxiYWNrIGFyZSBoYXBwZW5pbmcgYWZ0ZXJcbiAgICAgIC8vIHRoZSBwYWludCwgdGhpcyBsZWFkcyB0byBhbiBpbmZpbml0ZSByZW5kZXJpbmcuXG4gICAgICAvL1xuICAgICAgLy8gVXNpbmcgZmx1c2hTeW5jIGVuc3VyZXMgdGhhdCB0aGUgc3RhdGVzIGlzIHVwZGF0ZWQgYmVmb3JlIHRoZSBuZXh0IHBhaW4uXG4gICAgICAvLyBSZWxhdGVkIGlzc3VlIC0gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8yNDMzMVxuICAgICAgUmVhY3RET00uZmx1c2hTeW5jKCgpID0+IHtcbiAgICAgICAgc2V0U3RhdGUocHJldlN0YXRlID0+IHVwZGF0ZVN0YXRlKHByZXZTdGF0ZSwgbmV3U3RhdGUpKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlUmVzaXplID0gKCkgPT4ge1xuICAgICAgcmVuZGVycy5jdXJyZW50ID0gMDtcbiAgICAgIHN5bmNIZWlnaHRXaXRoRmx1c2hTeW5jKCk7XG4gICAgfTtcbiAgICAvLyBXb3JrYXJvdW5kIGEgXCJSZXNpemVPYnNlcnZlciBsb29wIGNvbXBsZXRlZCB3aXRoIHVuZGVsaXZlcmVkIG5vdGlmaWNhdGlvbnNcIiBlcnJvclxuICAgIC8vIGluIHRlc3QuXG4gICAgLy8gTm90ZSB0aGF0IHdlIG1pZ2h0IG5lZWQgdG8gdXNlIHRoaXMgbG9naWMgaW4gcHJvZHVjdGlvbiBwZXIgaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvcmVzaXplLW9ic2VydmVyL2lzc3Vlcy8zOFxuICAgIC8vIEFsc28gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbXVpLXgvaXNzdWVzLzg3MzNcbiAgICBsZXQgckFGO1xuICAgIGNvbnN0IHJBRkhhbmRsZVJlc2l6ZSA9ICgpID0+IHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJBRik7XG4gICAgICByQUYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBoYW5kbGVSZXNpemUoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgZGVib3VuY2VIYW5kbGVSZXNpemUgPSBkZWJvdW5jZShoYW5kbGVSZXNpemUpO1xuICAgIGNvbnN0IGlucHV0ID0gaW5wdXRSZWYuY3VycmVudDtcbiAgICBjb25zdCBjb250YWluZXJXaW5kb3cgPSBvd25lcldpbmRvdyhpbnB1dCk7XG4gICAgY29udGFpbmVyV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGRlYm91bmNlSGFuZGxlUmVzaXplKTtcbiAgICBsZXQgcmVzaXplT2JzZXJ2ZXI7XG4gICAgaWYgKHR5cGVvZiBSZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcgPyByQUZIYW5kbGVSZXNpemUgOiBoYW5kbGVSZXNpemUpO1xuICAgICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShpbnB1dCk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkZWJvdW5jZUhhbmRsZVJlc2l6ZS5jbGVhcigpO1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUockFGKTtcbiAgICAgIGNvbnRhaW5lcldpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBkZWJvdW5jZUhhbmRsZVJlc2l6ZSk7XG4gICAgICBpZiAocmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtnZXRVcGRhdGVkU3RhdGVdKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIHN5bmNIZWlnaHQoKTtcbiAgfSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmVuZGVycy5jdXJyZW50ID0gMDtcbiAgfSwgW3ZhbHVlXSk7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IGV2ZW50ID0+IHtcbiAgICByZW5kZXJzLmN1cnJlbnQgPSAwO1xuICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICBzeW5jSGVpZ2h0KCk7XG4gICAgfVxuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgb25DaGFuZ2UoZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhSZWFjdC5GcmFnbWVudCwge1xuICAgIGNoaWxkcmVuOiBbLyojX19QVVJFX18qL19qc3goXCJ0ZXh0YXJlYVwiLCBfZXh0ZW5kcyh7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgICAgcmVmOiBoYW5kbGVSZWZcbiAgICAgIC8vIEFwcGx5IHRoZSByb3dzIHByb3AgdG8gZ2V0IGEgXCJjb3JyZWN0XCIgZmlyc3QgU1NSIHBhaW50XG4gICAgICAsXG4gICAgICByb3dzOiBtaW5Sb3dzLFxuICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgaGVpZ2h0OiBzdGF0ZS5vdXRlckhlaWdodFN0eWxlLFxuICAgICAgICAvLyBOZWVkIGEgbGFyZ2UgZW5vdWdoIGRpZmZlcmVuY2UgdG8gYWxsb3cgc2Nyb2xsaW5nLlxuICAgICAgICAvLyBUaGlzIHByZXZlbnRzIGluZmluaXRlIHJlbmRlcmluZyBsb29wLlxuICAgICAgICBvdmVyZmxvdzogc3RhdGUub3ZlcmZsb3cgPyAnaGlkZGVuJyA6IHVuZGVmaW5lZFxuICAgICAgfSwgc3R5bGUpXG4gICAgfSwgb3RoZXIpKSwgLyojX19QVVJFX18qL19qc3goXCJ0ZXh0YXJlYVwiLCB7XG4gICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICBjbGFzc05hbWU6IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgcmVmOiBzaGFkb3dSZWYsXG4gICAgICB0YWJJbmRleDogLTEsXG4gICAgICBzdHlsZTogX2V4dGVuZHMoe30sIHN0eWxlcy5zaGFkb3csIHN0eWxlLCB7XG4gICAgICAgIHBhZGRpbmdUb3A6IDAsXG4gICAgICAgIHBhZGRpbmdCb3R0b206IDBcbiAgICAgIH0pXG4gICAgfSldXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUZXh0YXJlYUF1dG9zaXplLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCBUeXBlU2NyaXB0IHR5cGVzIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheS5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgbWluUm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IHsgVGV4dGFyZWFBdXRvc2l6ZSB9OyIsImltcG9ydCB7IHVuc3RhYmxlX293bmVyV2luZG93IGFzIG93bmVyV2luZG93LCB1bnN0YWJsZV9vd25lckRvY3VtZW50IGFzIG93bmVyRG9jdW1lbnQsIHVuc3RhYmxlX2dldFNjcm9sbGJhclNpemUgYXMgZ2V0U2Nyb2xsYmFyU2l6ZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuLy8gSXMgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIgZGlzcGxheWVkP1xuZnVuY3Rpb24gaXNPdmVyZmxvd2luZyhjb250YWluZXIpIHtcbiAgY29uc3QgZG9jID0gb3duZXJEb2N1bWVudChjb250YWluZXIpO1xuICBpZiAoZG9jLmJvZHkgPT09IGNvbnRhaW5lcikge1xuICAgIHJldHVybiBvd25lcldpbmRvdyhjb250YWluZXIpLmlubmVyV2lkdGggPiBkb2MuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICB9XG4gIHJldHVybiBjb250YWluZXIuc2Nyb2xsSGVpZ2h0ID4gY29udGFpbmVyLmNsaWVudEhlaWdodDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhcmlhSGlkZGVuKGVsZW1lbnQsIHNob3cpIHtcbiAgaWYgKHNob3cpIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xuICB9XG59XG5mdW5jdGlvbiBnZXRQYWRkaW5nUmlnaHQoZWxlbWVudCkge1xuICByZXR1cm4gcGFyc2VJbnQob3duZXJXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wYWRkaW5nUmlnaHQsIDEwKSB8fCAwO1xufVxuZnVuY3Rpb24gaXNBcmlhSGlkZGVuRm9yYmlkZGVuT25FbGVtZW50KGVsZW1lbnQpIHtcbiAgLy8gVGhlIGZvcmJpZGRlbiBIVE1MIHRhZ3MgYXJlIHRoZSBvbmVzIGZyb20gQVJJQSBzcGVjaWZpY2F0aW9uIHRoYXRcbiAgLy8gY2FuIGJlIGNoaWxkcmVuIG9mIGJvZHkgYW5kIGNhbid0IGhhdmUgYXJpYS1oaWRkZW4gYXR0cmlidXRlLlxuICAvLyBjZi4gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWwtYXJpYS8jZG9jY29uZm9ybWFuY2VcbiAgY29uc3QgZm9yYmlkZGVuVGFnTmFtZXMgPSBbJ1RFTVBMQVRFJywgJ1NDUklQVCcsICdTVFlMRScsICdMSU5LJywgJ01BUCcsICdNRVRBJywgJ05PU0NSSVBUJywgJ1BJQ1RVUkUnLCAnQ09MJywgJ0NPTEdST1VQJywgJ1BBUkFNJywgJ1NMT1QnLCAnU09VUkNFJywgJ1RSQUNLJ107XG4gIGNvbnN0IGlzRm9yYmlkZGVuVGFnTmFtZSA9IGZvcmJpZGRlblRhZ05hbWVzLmluZGV4T2YoZWxlbWVudC50YWdOYW1lKSAhPT0gLTE7XG4gIGNvbnN0IGlzSW5wdXRIaWRkZW4gPSBlbGVtZW50LnRhZ05hbWUgPT09ICdJTlBVVCcgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PT0gJ2hpZGRlbic7XG4gIHJldHVybiBpc0ZvcmJpZGRlblRhZ05hbWUgfHwgaXNJbnB1dEhpZGRlbjtcbn1cbmZ1bmN0aW9uIGFyaWFIaWRkZW5TaWJsaW5ncyhjb250YWluZXIsIG1vdW50RWxlbWVudCwgY3VycmVudEVsZW1lbnQsIGVsZW1lbnRzVG9FeGNsdWRlLCBzaG93KSB7XG4gIGNvbnN0IGJsYWNrbGlzdCA9IFttb3VudEVsZW1lbnQsIGN1cnJlbnRFbGVtZW50LCAuLi5lbGVtZW50c1RvRXhjbHVkZV07XG4gIFtdLmZvckVhY2guY2FsbChjb250YWluZXIuY2hpbGRyZW4sIGVsZW1lbnQgPT4ge1xuICAgIGNvbnN0IGlzTm90RXhjbHVkZWRFbGVtZW50ID0gYmxhY2tsaXN0LmluZGV4T2YoZWxlbWVudCkgPT09IC0xO1xuICAgIGNvbnN0IGlzTm90Rm9yYmlkZGVuRWxlbWVudCA9ICFpc0FyaWFIaWRkZW5Gb3JiaWRkZW5PbkVsZW1lbnQoZWxlbWVudCk7XG4gICAgaWYgKGlzTm90RXhjbHVkZWRFbGVtZW50ICYmIGlzTm90Rm9yYmlkZGVuRWxlbWVudCkge1xuICAgICAgYXJpYUhpZGRlbihlbGVtZW50LCBzaG93KTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gZmluZEluZGV4T2YoaXRlbXMsIGNhbGxiYWNrKSB7XG4gIGxldCBpZHggPSAtMTtcbiAgaXRlbXMuc29tZSgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBpZiAoY2FsbGJhY2soaXRlbSkpIHtcbiAgICAgIGlkeCA9IGluZGV4O1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG4gIHJldHVybiBpZHg7XG59XG5mdW5jdGlvbiBoYW5kbGVDb250YWluZXIoY29udGFpbmVySW5mbywgcHJvcHMpIHtcbiAgY29uc3QgcmVzdG9yZVN0eWxlID0gW107XG4gIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRhaW5lckluZm8uY29udGFpbmVyO1xuICBpZiAoIXByb3BzLmRpc2FibGVTY3JvbGxMb2NrKSB7XG4gICAgaWYgKGlzT3ZlcmZsb3dpbmcoY29udGFpbmVyKSkge1xuICAgICAgLy8gQ29tcHV0ZSB0aGUgc2l6ZSBiZWZvcmUgYXBwbHlpbmcgb3ZlcmZsb3cgaGlkZGVuIHRvIGF2b2lkIGFueSBzY3JvbGwganVtcHMuXG4gICAgICBjb25zdCBzY3JvbGxiYXJTaXplID0gZ2V0U2Nyb2xsYmFyU2l6ZShvd25lckRvY3VtZW50KGNvbnRhaW5lcikpO1xuICAgICAgcmVzdG9yZVN0eWxlLnB1c2goe1xuICAgICAgICB2YWx1ZTogY29udGFpbmVyLnN0eWxlLnBhZGRpbmdSaWdodCxcbiAgICAgICAgcHJvcGVydHk6ICdwYWRkaW5nLXJpZ2h0JyxcbiAgICAgICAgZWw6IGNvbnRhaW5lclxuICAgICAgfSk7XG4gICAgICAvLyBVc2UgY29tcHV0ZWQgc3R5bGUsIGhlcmUgdG8gZ2V0IHRoZSByZWFsIHBhZGRpbmcgdG8gYWRkIG91ciBzY3JvbGxiYXIgd2lkdGguXG4gICAgICBjb250YWluZXIuc3R5bGUucGFkZGluZ1JpZ2h0ID0gYCR7Z2V0UGFkZGluZ1JpZ2h0KGNvbnRhaW5lcikgKyBzY3JvbGxiYXJTaXplfXB4YDtcblxuICAgICAgLy8gLm11aS1maXhlZCBpcyBhIGdsb2JhbCBoZWxwZXIuXG4gICAgICBjb25zdCBmaXhlZEVsZW1lbnRzID0gb3duZXJEb2N1bWVudChjb250YWluZXIpLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tdWktZml4ZWQnKTtcbiAgICAgIFtdLmZvckVhY2guY2FsbChmaXhlZEVsZW1lbnRzLCBlbGVtZW50ID0+IHtcbiAgICAgICAgcmVzdG9yZVN0eWxlLnB1c2goe1xuICAgICAgICAgIHZhbHVlOiBlbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCxcbiAgICAgICAgICBwcm9wZXJ0eTogJ3BhZGRpbmctcmlnaHQnLFxuICAgICAgICAgIGVsOiBlbGVtZW50XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IGAke2dldFBhZGRpbmdSaWdodChlbGVtZW50KSArIHNjcm9sbGJhclNpemV9cHhgO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGxldCBzY3JvbGxDb250YWluZXI7XG4gICAgaWYgKGNvbnRhaW5lci5wYXJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgc2Nyb2xsQ29udGFpbmVyID0gb3duZXJEb2N1bWVudChjb250YWluZXIpLmJvZHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN1cHBvcnQgaHRtbCBvdmVyZmxvdy15OiBhdXRvIGZvciBzY3JvbGwgc3RhYmlsaXR5IGJldHdlZW4gcGFnZXNcbiAgICAgIC8vIGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvY3NzL2ZvcmNlLXZlcnRpY2FsLXNjcm9sbGJhci9cbiAgICAgIGNvbnN0IHBhcmVudCA9IGNvbnRhaW5lci5wYXJlbnRFbGVtZW50O1xuICAgICAgY29uc3QgY29udGFpbmVyV2luZG93ID0gb3duZXJXaW5kb3coY29udGFpbmVyKTtcbiAgICAgIHNjcm9sbENvbnRhaW5lciA9IChwYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBhcmVudC5ub2RlTmFtZSkgPT09ICdIVE1MJyAmJiBjb250YWluZXJXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnQpLm92ZXJmbG93WSA9PT0gJ3Njcm9sbCcgPyBwYXJlbnQgOiBjb250YWluZXI7XG4gICAgfVxuXG4gICAgLy8gQmxvY2sgdGhlIHNjcm9sbCBldmVuIGlmIG5vIHNjcm9sbGJhciBpcyB2aXNpYmxlIHRvIGFjY291bnQgZm9yIG1vYmlsZSBrZXlib2FyZFxuICAgIC8vIHNjcmVlbnNpemUgc2hyaW5rLlxuICAgIHJlc3RvcmVTdHlsZS5wdXNoKHtcbiAgICAgIHZhbHVlOiBzY3JvbGxDb250YWluZXIuc3R5bGUub3ZlcmZsb3csXG4gICAgICBwcm9wZXJ0eTogJ292ZXJmbG93JyxcbiAgICAgIGVsOiBzY3JvbGxDb250YWluZXJcbiAgICB9LCB7XG4gICAgICB2YWx1ZTogc2Nyb2xsQ29udGFpbmVyLnN0eWxlLm92ZXJmbG93WCxcbiAgICAgIHByb3BlcnR5OiAnb3ZlcmZsb3cteCcsXG4gICAgICBlbDogc2Nyb2xsQ29udGFpbmVyXG4gICAgfSwge1xuICAgICAgdmFsdWU6IHNjcm9sbENvbnRhaW5lci5zdHlsZS5vdmVyZmxvd1ksXG4gICAgICBwcm9wZXJ0eTogJ292ZXJmbG93LXknLFxuICAgICAgZWw6IHNjcm9sbENvbnRhaW5lclxuICAgIH0pO1xuICAgIHNjcm9sbENvbnRhaW5lci5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICB9XG4gIGNvbnN0IHJlc3RvcmUgPSAoKSA9PiB7XG4gICAgcmVzdG9yZVN0eWxlLmZvckVhY2goKHtcbiAgICAgIHZhbHVlLFxuICAgICAgZWwsXG4gICAgICBwcm9wZXJ0eVxuICAgIH0pID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWwuc3R5bGUucmVtb3ZlUHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gcmVzdG9yZTtcbn1cbmZ1bmN0aW9uIGdldEhpZGRlblNpYmxpbmdzKGNvbnRhaW5lcikge1xuICBjb25zdCBoaWRkZW5TaWJsaW5ncyA9IFtdO1xuICBbXS5mb3JFYWNoLmNhbGwoY29udGFpbmVyLmNoaWxkcmVuLCBlbGVtZW50ID0+IHtcbiAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJykgPT09ICd0cnVlJykge1xuICAgICAgaGlkZGVuU2libGluZ3MucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaGlkZGVuU2libGluZ3M7XG59XG4vKipcbiAqIEBpZ25vcmUgLSBkbyBub3QgZG9jdW1lbnQuXG4gKlxuICogUHJvcGVyIHN0YXRlIG1hbmFnZW1lbnQgZm9yIGNvbnRhaW5lcnMgYW5kIHRoZSBtb2RhbHMgaW4gdGhvc2UgY29udGFpbmVycy5cbiAqIFNpbXBsaWZpZWQsIGJ1dCBpbnNwaXJlZCBieSByZWFjdC1vdmVybGF5J3MgTW9kYWxNYW5hZ2VyIGNsYXNzLlxuICogVXNlZCBieSB0aGUgTW9kYWwgdG8gZW5zdXJlIHByb3BlciBzdHlsaW5nIG9mIGNvbnRhaW5lcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBNb2RhbE1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lcnMgPSB2b2lkIDA7XG4gICAgdGhpcy5tb2RhbHMgPSB2b2lkIDA7XG4gICAgdGhpcy5tb2RhbHMgPSBbXTtcbiAgICB0aGlzLmNvbnRhaW5lcnMgPSBbXTtcbiAgfVxuICBhZGQobW9kYWwsIGNvbnRhaW5lcikge1xuICAgIGxldCBtb2RhbEluZGV4ID0gdGhpcy5tb2RhbHMuaW5kZXhPZihtb2RhbCk7XG4gICAgaWYgKG1vZGFsSW5kZXggIT09IC0xKSB7XG4gICAgICByZXR1cm4gbW9kYWxJbmRleDtcbiAgICB9XG4gICAgbW9kYWxJbmRleCA9IHRoaXMubW9kYWxzLmxlbmd0aDtcbiAgICB0aGlzLm1vZGFscy5wdXNoKG1vZGFsKTtcblxuICAgIC8vIElmIHRoZSBtb2RhbCB3ZSBhcmUgYWRkaW5nIGlzIGFscmVhZHkgaW4gdGhlIERPTS5cbiAgICBpZiAobW9kYWwubW9kYWxSZWYpIHtcbiAgICAgIGFyaWFIaWRkZW4obW9kYWwubW9kYWxSZWYsIGZhbHNlKTtcbiAgICB9XG4gICAgY29uc3QgaGlkZGVuU2libGluZ3MgPSBnZXRIaWRkZW5TaWJsaW5ncyhjb250YWluZXIpO1xuICAgIGFyaWFIaWRkZW5TaWJsaW5ncyhjb250YWluZXIsIG1vZGFsLm1vdW50LCBtb2RhbC5tb2RhbFJlZiwgaGlkZGVuU2libGluZ3MsIHRydWUpO1xuICAgIGNvbnN0IGNvbnRhaW5lckluZGV4ID0gZmluZEluZGV4T2YodGhpcy5jb250YWluZXJzLCBpdGVtID0+IGl0ZW0uY29udGFpbmVyID09PSBjb250YWluZXIpO1xuICAgIGlmIChjb250YWluZXJJbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyc1tjb250YWluZXJJbmRleF0ubW9kYWxzLnB1c2gobW9kYWwpO1xuICAgICAgcmV0dXJuIG1vZGFsSW5kZXg7XG4gICAgfVxuICAgIHRoaXMuY29udGFpbmVycy5wdXNoKHtcbiAgICAgIG1vZGFsczogW21vZGFsXSxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHJlc3RvcmU6IG51bGwsXG4gICAgICBoaWRkZW5TaWJsaW5nc1xuICAgIH0pO1xuICAgIHJldHVybiBtb2RhbEluZGV4O1xuICB9XG4gIG1vdW50KG1vZGFsLCBwcm9wcykge1xuICAgIGNvbnN0IGNvbnRhaW5lckluZGV4ID0gZmluZEluZGV4T2YodGhpcy5jb250YWluZXJzLCBpdGVtID0+IGl0ZW0ubW9kYWxzLmluZGV4T2YobW9kYWwpICE9PSAtMSk7XG4gICAgY29uc3QgY29udGFpbmVySW5mbyA9IHRoaXMuY29udGFpbmVyc1tjb250YWluZXJJbmRleF07XG4gICAgaWYgKCFjb250YWluZXJJbmZvLnJlc3RvcmUpIHtcbiAgICAgIGNvbnRhaW5lckluZm8ucmVzdG9yZSA9IGhhbmRsZUNvbnRhaW5lcihjb250YWluZXJJbmZvLCBwcm9wcyk7XG4gICAgfVxuICB9XG4gIHJlbW92ZShtb2RhbCwgYXJpYUhpZGRlblN0YXRlID0gdHJ1ZSkge1xuICAgIGNvbnN0IG1vZGFsSW5kZXggPSB0aGlzLm1vZGFscy5pbmRleE9mKG1vZGFsKTtcbiAgICBpZiAobW9kYWxJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBtb2RhbEluZGV4O1xuICAgIH1cbiAgICBjb25zdCBjb250YWluZXJJbmRleCA9IGZpbmRJbmRleE9mKHRoaXMuY29udGFpbmVycywgaXRlbSA9PiBpdGVtLm1vZGFscy5pbmRleE9mKG1vZGFsKSAhPT0gLTEpO1xuICAgIGNvbnN0IGNvbnRhaW5lckluZm8gPSB0aGlzLmNvbnRhaW5lcnNbY29udGFpbmVySW5kZXhdO1xuICAgIGNvbnRhaW5lckluZm8ubW9kYWxzLnNwbGljZShjb250YWluZXJJbmZvLm1vZGFscy5pbmRleE9mKG1vZGFsKSwgMSk7XG4gICAgdGhpcy5tb2RhbHMuc3BsaWNlKG1vZGFsSW5kZXgsIDEpO1xuXG4gICAgLy8gSWYgdGhhdCB3YXMgdGhlIGxhc3QgbW9kYWwgaW4gYSBjb250YWluZXIsIGNsZWFuIHVwIHRoZSBjb250YWluZXIuXG4gICAgaWYgKGNvbnRhaW5lckluZm8ubW9kYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gVGhlIG1vZGFsIG1pZ2h0IGJlIGNsb3NlZCBiZWZvcmUgaXQgaGFkIHRoZSBjaGFuY2UgdG8gYmUgbW91bnRlZCBpbiB0aGUgRE9NLlxuICAgICAgaWYgKGNvbnRhaW5lckluZm8ucmVzdG9yZSkge1xuICAgICAgICBjb250YWluZXJJbmZvLnJlc3RvcmUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChtb2RhbC5tb2RhbFJlZikge1xuICAgICAgICAvLyBJbiBjYXNlIHRoZSBtb2RhbCB3YXNuJ3QgaW4gdGhlIERPTSB5ZXQuXG4gICAgICAgIGFyaWFIaWRkZW4obW9kYWwubW9kYWxSZWYsIGFyaWFIaWRkZW5TdGF0ZSk7XG4gICAgICB9XG4gICAgICBhcmlhSGlkZGVuU2libGluZ3MoY29udGFpbmVySW5mby5jb250YWluZXIsIG1vZGFsLm1vdW50LCBtb2RhbC5tb2RhbFJlZiwgY29udGFpbmVySW5mby5oaWRkZW5TaWJsaW5ncywgZmFsc2UpO1xuICAgICAgdGhpcy5jb250YWluZXJzLnNwbGljZShjb250YWluZXJJbmRleCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSBtYWtlIHN1cmUgdGhlIG5leHQgdG9wIG1vZGFsIGlzIHZpc2libGUgdG8gYSBzY3JlZW4gcmVhZGVyLlxuICAgICAgY29uc3QgbmV4dFRvcCA9IGNvbnRhaW5lckluZm8ubW9kYWxzW2NvbnRhaW5lckluZm8ubW9kYWxzLmxlbmd0aCAtIDFdO1xuICAgICAgLy8gYXMgc29vbiBhcyBhIG1vZGFsIGlzIGFkZGluZyBpdHMgbW9kYWxSZWYgaXMgdW5kZWZpbmVkLiBpdCBjYW4ndCBzZXRcbiAgICAgIC8vIGFyaWEtaGlkZGVuIGJlY2F1c2UgdGhlIGRvbSBlbGVtZW50IGRvZXNuJ3QgZXhpc3QgZWl0aGVyXG4gICAgICAvLyB3aGVuIG1vZGFsIHdhcyB1bm1vdW50ZWQgYmVmb3JlIG1vZGFsUmVmIGdldHMgbnVsbFxuICAgICAgaWYgKG5leHRUb3AubW9kYWxSZWYpIHtcbiAgICAgICAgYXJpYUhpZGRlbihuZXh0VG9wLm1vZGFsUmVmLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtb2RhbEluZGV4O1xuICB9XG4gIGlzVG9wTW9kYWwobW9kYWwpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RhbHMubGVuZ3RoID4gMCAmJiB0aGlzLm1vZGFsc1t0aGlzLm1vZGFscy5sZW5ndGggLSAxXSA9PT0gbW9kYWw7XG4gIH1cbn0iLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdW5zdGFibGVfb3duZXJEb2N1bWVudCBhcyBvd25lckRvY3VtZW50LCB1bnN0YWJsZV91c2VGb3JrUmVmIGFzIHVzZUZvcmtSZWYsIHVuc3RhYmxlX3VzZUV2ZW50Q2FsbGJhY2sgYXMgdXNlRXZlbnRDYWxsYmFjaywgdW5zdGFibGVfY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIGFzIGNyZWF0ZUNoYWluZWRGdW5jdGlvbiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgZXh0cmFjdEV2ZW50SGFuZGxlcnMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBNb2RhbE1hbmFnZXIsIGFyaWFIaWRkZW4gfSBmcm9tICcuL01vZGFsTWFuYWdlcic7XG5mdW5jdGlvbiBnZXRDb250YWluZXIoY29udGFpbmVyKSB7XG4gIHJldHVybiB0eXBlb2YgY29udGFpbmVyID09PSAnZnVuY3Rpb24nID8gY29udGFpbmVyKCkgOiBjb250YWluZXI7XG59XG5mdW5jdGlvbiBnZXRIYXNUcmFuc2l0aW9uKGNoaWxkcmVuKSB7XG4gIHJldHVybiBjaGlsZHJlbiA/IGNoaWxkcmVuLnByb3BzLmhhc093blByb3BlcnR5KCdpbicpIDogZmFsc2U7XG59XG5cbi8vIEEgbW9kYWwgbWFuYWdlciB1c2VkIHRvIHRyYWNrIGFuZCBtYW5hZ2UgdGhlIHN0YXRlIG9mIG9wZW4gTW9kYWxzLlxuLy8gTW9kYWxzIGRvbid0IG9wZW4gb24gdGhlIHNlcnZlciBzbyB0aGlzIHdvbid0IGNvbmZsaWN0IHdpdGggY29uY3VycmVudCByZXF1ZXN0cy5cbmNvbnN0IGRlZmF1bHRNYW5hZ2VyID0gbmV3IE1vZGFsTWFuYWdlcigpO1xuLyoqXG4gKlxuICogRGVtb3M6XG4gKlxuICogLSBbTW9kYWxdKGh0dHBzOi8vbXVpLmNvbS9iYXNlLXVpL3JlYWN0LW1vZGFsLyNob29rKVxuICpcbiAqIEFQSTpcbiAqXG4gKiAtIFt1c2VNb2RhbCBBUEldKGh0dHBzOi8vbXVpLmNvbS9iYXNlLXVpL3JlYWN0LW1vZGFsL2hvb2tzLWFwaS8jdXNlLW1vZGFsKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTW9kYWwocGFyYW1ldGVycykge1xuICBjb25zdCB7XG4gICAgY29udGFpbmVyLFxuICAgIGRpc2FibGVFc2NhcGVLZXlEb3duID0gZmFsc2UsXG4gICAgZGlzYWJsZVNjcm9sbExvY2sgPSBmYWxzZSxcbiAgICAvLyBAdHMtaWdub3JlIGludGVybmFsIGxvZ2ljIC0gQmFzZSBVSSBzdXBwb3J0cyB0aGUgbWFuYWdlciBhcyBhIHByb3AgdG9vXG4gICAgbWFuYWdlciA9IGRlZmF1bHRNYW5hZ2VyLFxuICAgIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uID0gZmFsc2UsXG4gICAgb25UcmFuc2l0aW9uRW50ZXIsXG4gICAgb25UcmFuc2l0aW9uRXhpdGVkLFxuICAgIGNoaWxkcmVuLFxuICAgIG9uQ2xvc2UsXG4gICAgb3BlbixcbiAgICByb290UmVmXG4gIH0gPSBwYXJhbWV0ZXJzO1xuXG4gIC8vIEB0cy1pZ25vcmUgaW50ZXJuYWwgbG9naWNcbiAgY29uc3QgbW9kYWwgPSBSZWFjdC51c2VSZWYoe30pO1xuICBjb25zdCBtb3VudE5vZGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IG1vZGFsUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKG1vZGFsUmVmLCByb290UmVmKTtcbiAgY29uc3QgW2V4aXRlZCwgc2V0RXhpdGVkXSA9IFJlYWN0LnVzZVN0YXRlKCFvcGVuKTtcbiAgY29uc3QgaGFzVHJhbnNpdGlvbiA9IGdldEhhc1RyYW5zaXRpb24oY2hpbGRyZW4pO1xuICBsZXQgYXJpYUhpZGRlblByb3AgPSB0cnVlO1xuICBpZiAocGFyYW1ldGVyc1snYXJpYS1oaWRkZW4nXSA9PT0gJ2ZhbHNlJyB8fCBwYXJhbWV0ZXJzWydhcmlhLWhpZGRlbiddID09PSBmYWxzZSkge1xuICAgIGFyaWFIaWRkZW5Qcm9wID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgZ2V0RG9jID0gKCkgPT4gb3duZXJEb2N1bWVudChtb3VudE5vZGVSZWYuY3VycmVudCk7XG4gIGNvbnN0IGdldE1vZGFsID0gKCkgPT4ge1xuICAgIG1vZGFsLmN1cnJlbnQubW9kYWxSZWYgPSBtb2RhbFJlZi5jdXJyZW50O1xuICAgIG1vZGFsLmN1cnJlbnQubW91bnQgPSBtb3VudE5vZGVSZWYuY3VycmVudDtcbiAgICByZXR1cm4gbW9kYWwuY3VycmVudDtcbiAgfTtcbiAgY29uc3QgaGFuZGxlTW91bnRlZCA9ICgpID0+IHtcbiAgICBtYW5hZ2VyLm1vdW50KGdldE1vZGFsKCksIHtcbiAgICAgIGRpc2FibGVTY3JvbGxMb2NrXG4gICAgfSk7XG5cbiAgICAvLyBGaXggYSBidWcgb24gQ2hyb21lIHdoZXJlIHRoZSBzY3JvbGwgaXNuJ3QgaW5pdGlhbGx5IDAuXG4gICAgaWYgKG1vZGFsUmVmLmN1cnJlbnQpIHtcbiAgICAgIG1vZGFsUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZU9wZW4gPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCByZXNvbHZlZENvbnRhaW5lciA9IGdldENvbnRhaW5lcihjb250YWluZXIpIHx8IGdldERvYygpLmJvZHk7XG4gICAgbWFuYWdlci5hZGQoZ2V0TW9kYWwoKSwgcmVzb2x2ZWRDb250YWluZXIpO1xuXG4gICAgLy8gVGhlIGVsZW1lbnQgd2FzIGFscmVhZHkgbW91bnRlZC5cbiAgICBpZiAobW9kYWxSZWYuY3VycmVudCkge1xuICAgICAgaGFuZGxlTW91bnRlZCgpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGlzVG9wTW9kYWwgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiBtYW5hZ2VyLmlzVG9wTW9kYWwoZ2V0TW9kYWwoKSksIFttYW5hZ2VyXSk7XG4gIGNvbnN0IGhhbmRsZVBvcnRhbFJlZiA9IHVzZUV2ZW50Q2FsbGJhY2sobm9kZSA9PiB7XG4gICAgbW91bnROb2RlUmVmLmN1cnJlbnQgPSBub2RlO1xuICAgIGlmICghbm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob3BlbiAmJiBpc1RvcE1vZGFsKCkpIHtcbiAgICAgIGhhbmRsZU1vdW50ZWQoKTtcbiAgICB9IGVsc2UgaWYgKG1vZGFsUmVmLmN1cnJlbnQpIHtcbiAgICAgIGFyaWFIaWRkZW4obW9kYWxSZWYuY3VycmVudCwgYXJpYUhpZGRlblByb3ApO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG1hbmFnZXIucmVtb3ZlKGdldE1vZGFsKCksIGFyaWFIaWRkZW5Qcm9wKTtcbiAgfSwgW2FyaWFIaWRkZW5Qcm9wLCBtYW5hZ2VyXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGhhbmRsZUNsb3NlKCk7XG4gICAgfTtcbiAgfSwgW2hhbmRsZUNsb3NlXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIGhhbmRsZU9wZW4oKTtcbiAgICB9IGVsc2UgaWYgKCFoYXNUcmFuc2l0aW9uIHx8ICFjbG9zZUFmdGVyVHJhbnNpdGlvbikge1xuICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICB9XG4gIH0sIFtvcGVuLCBoYW5kbGVDbG9zZSwgaGFzVHJhbnNpdGlvbiwgY2xvc2VBZnRlclRyYW5zaXRpb24sIGhhbmRsZU9wZW5dKTtcbiAgY29uc3QgY3JlYXRlSGFuZGxlS2V5RG93biA9IG90aGVySGFuZGxlcnMgPT4gZXZlbnQgPT4ge1xuICAgIHZhciBfb3RoZXJIYW5kbGVycyRvbktleUQ7XG4gICAgKF9vdGhlckhhbmRsZXJzJG9uS2V5RCA9IG90aGVySGFuZGxlcnMub25LZXlEb3duKSA9PSBudWxsIHx8IF9vdGhlckhhbmRsZXJzJG9uS2V5RC5jYWxsKG90aGVySGFuZGxlcnMsIGV2ZW50KTtcblxuICAgIC8vIFRoZSBoYW5kbGVyIGRvZXNuJ3QgdGFrZSBldmVudC5kZWZhdWx0UHJldmVudGVkIGludG8gYWNjb3VudDpcbiAgICAvL1xuICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCkgaXMgbWVhbnQgdG8gc3RvcCBkZWZhdWx0IGJlaGF2aW9ycyBsaWtlXG4gICAgLy8gY2xpY2tpbmcgYSBjaGVja2JveCB0byBjaGVjayBpdCwgaGl0dGluZyBhIGJ1dHRvbiB0byBzdWJtaXQgYSBmb3JtLFxuICAgIC8vIGFuZCBoaXR0aW5nIGxlZnQgYXJyb3cgdG8gbW92ZSB0aGUgY3Vyc29yIGluIGEgdGV4dCBpbnB1dCBldGMuXG4gICAgLy8gT25seSBzcGVjaWFsIEhUTUwgZWxlbWVudHMgaGF2ZSB0aGVzZSBkZWZhdWx0IGJlaGF2aW9ycy5cbiAgICBpZiAoZXZlbnQua2V5ICE9PSAnRXNjYXBlJyB8fCBldmVudC53aGljaCA9PT0gMjI5IHx8XG4gICAgLy8gV2FpdCB1bnRpbCBJTUUgaXMgc2V0dGxlZC5cbiAgICAhaXNUb3BNb2RhbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghZGlzYWJsZUVzY2FwZUtleURvd24pIHtcbiAgICAgIC8vIFN3YWxsb3cgdGhlIGV2ZW50LCBpbiBjYXNlIHNvbWVvbmUgaXMgbGlzdGVuaW5nIGZvciB0aGUgZXNjYXBlIGtleSBvbiB0aGUgYm9keS5cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgICAgb25DbG9zZShldmVudCwgJ2VzY2FwZUtleURvd24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IGNyZWF0ZUhhbmRsZUJhY2tkcm9wQ2xpY2sgPSBvdGhlckhhbmRsZXJzID0+IGV2ZW50ID0+IHtcbiAgICB2YXIgX290aGVySGFuZGxlcnMkb25DbGljO1xuICAgIChfb3RoZXJIYW5kbGVycyRvbkNsaWMgPSBvdGhlckhhbmRsZXJzLm9uQ2xpY2spID09IG51bGwgfHwgX290aGVySGFuZGxlcnMkb25DbGljLmNhbGwob3RoZXJIYW5kbGVycywgZXZlbnQpO1xuICAgIGlmIChldmVudC50YXJnZXQgIT09IGV2ZW50LmN1cnJlbnRUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgIG9uQ2xvc2UoZXZlbnQsICdiYWNrZHJvcENsaWNrJyk7XG4gICAgfVxuICB9O1xuICBjb25zdCBnZXRSb290UHJvcHMgPSAob3RoZXJIYW5kbGVycyA9IHt9KSA9PiB7XG4gICAgY29uc3QgcHJvcHNFdmVudEhhbmRsZXJzID0gZXh0cmFjdEV2ZW50SGFuZGxlcnMocGFyYW1ldGVycyk7XG5cbiAgICAvLyBUaGUgY3VzdG9tIGV2ZW50IGhhbmRsZXJzIHNob3VsZG4ndCBiZSBzcHJlYWQgb24gdGhlIHJvb3QgZWxlbWVudFxuICAgIGRlbGV0ZSBwcm9wc0V2ZW50SGFuZGxlcnMub25UcmFuc2l0aW9uRW50ZXI7XG4gICAgZGVsZXRlIHByb3BzRXZlbnRIYW5kbGVycy5vblRyYW5zaXRpb25FeGl0ZWQ7XG4gICAgY29uc3QgZXh0ZXJuYWxFdmVudEhhbmRsZXJzID0gX2V4dGVuZHMoe30sIHByb3BzRXZlbnRIYW5kbGVycywgb3RoZXJIYW5kbGVycyk7XG4gICAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICAgIHJvbGU6ICdwcmVzZW50YXRpb24nXG4gICAgfSwgZXh0ZXJuYWxFdmVudEhhbmRsZXJzLCB7XG4gICAgICBvbktleURvd246IGNyZWF0ZUhhbmRsZUtleURvd24oZXh0ZXJuYWxFdmVudEhhbmRsZXJzKSxcbiAgICAgIHJlZjogaGFuZGxlUmVmXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldEJhY2tkcm9wUHJvcHMgPSAob3RoZXJIYW5kbGVycyA9IHt9KSA9PiB7XG4gICAgY29uc3QgZXh0ZXJuYWxFdmVudEhhbmRsZXJzID0gb3RoZXJIYW5kbGVycztcbiAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgJ2FyaWEtaGlkZGVuJzogdHJ1ZVxuICAgIH0sIGV4dGVybmFsRXZlbnRIYW5kbGVycywge1xuICAgICAgb25DbGljazogY3JlYXRlSGFuZGxlQmFja2Ryb3BDbGljayhleHRlcm5hbEV2ZW50SGFuZGxlcnMpLFxuICAgICAgb3BlblxuICAgIH0pO1xuICB9O1xuICBjb25zdCBnZXRUcmFuc2l0aW9uUHJvcHMgPSAoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlRW50ZXIgPSAoKSA9PiB7XG4gICAgICBzZXRFeGl0ZWQoZmFsc2UpO1xuICAgICAgaWYgKG9uVHJhbnNpdGlvbkVudGVyKSB7XG4gICAgICAgIG9uVHJhbnNpdGlvbkVudGVyKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVFeGl0ZWQgPSAoKSA9PiB7XG4gICAgICBzZXRFeGl0ZWQodHJ1ZSk7XG4gICAgICBpZiAob25UcmFuc2l0aW9uRXhpdGVkKSB7XG4gICAgICAgIG9uVHJhbnNpdGlvbkV4aXRlZCgpO1xuICAgICAgfVxuICAgICAgaWYgKGNsb3NlQWZ0ZXJUcmFuc2l0aW9uKSB7XG4gICAgICAgIGhhbmRsZUNsb3NlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgb25FbnRlcjogY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKGhhbmRsZUVudGVyLCBjaGlsZHJlbiA9PSBudWxsID8gdm9pZCAwIDogY2hpbGRyZW4ucHJvcHMub25FbnRlciksXG4gICAgICBvbkV4aXRlZDogY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKGhhbmRsZUV4aXRlZCwgY2hpbGRyZW4gPT0gbnVsbCA/IHZvaWQgMCA6IGNoaWxkcmVuLnByb3BzLm9uRXhpdGVkKVxuICAgIH07XG4gIH07XG4gIHJldHVybiB7XG4gICAgZ2V0Um9vdFByb3BzLFxuICAgIGdldEJhY2tkcm9wUHJvcHMsXG4gICAgZ2V0VHJhbnNpdGlvblByb3BzLFxuICAgIHJvb3RSZWY6IGhhbmRsZVJlZixcbiAgICBwb3J0YWxSZWY6IGhhbmRsZVBvcnRhbFJlZixcbiAgICBpc1RvcE1vZGFsLFxuICAgIGV4aXRlZCxcbiAgICBoYXNUcmFuc2l0aW9uXG4gIH07XG59IiwiLyoqXG4gKiBFeHRyYWN0cyBldmVudCBoYW5kbGVycyBmcm9tIGEgZ2l2ZW4gb2JqZWN0LlxuICogQSBwcm9wIGlzIGNvbnNpZGVyZWQgYW4gZXZlbnQgaGFuZGxlciBpZiBpdCBpcyBhIGZ1bmN0aW9uIGFuZCBpdHMgbmFtZSBzdGFydHMgd2l0aCBgb25gLlxuICpcbiAqIEBwYXJhbSBvYmplY3QgQW4gb2JqZWN0IHRvIGV4dHJhY3QgZXZlbnQgaGFuZGxlcnMgZnJvbS5cbiAqIEBwYXJhbSBleGNsdWRlS2V5cyBBbiBhcnJheSBvZiBrZXlzIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgcmV0dXJuZWQgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEV2ZW50SGFuZGxlcnMob2JqZWN0LCBleGNsdWRlS2V5cyA9IFtdKSB7XG4gIGlmIChvYmplY3QgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgT2JqZWN0LmtleXMob2JqZWN0KS5maWx0ZXIocHJvcCA9PiBwcm9wLm1hdGNoKC9eb25bQS1aXS8pICYmIHR5cGVvZiBvYmplY3RbcHJvcF0gPT09ICdmdW5jdGlvbicgJiYgIWV4Y2x1ZGVLZXlzLmluY2x1ZGVzKHByb3ApKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgIHJlc3VsdFtwcm9wXSA9IG9iamVjdFtwcm9wXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59IiwiLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gZWxlbWVudCBpcyBhIERPTSBlbGVtZW50IG5hbWUgKGkuZS4gbm90IGEgUmVhY3QgY29tcG9uZW50KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSG9zdENvbXBvbmVudChlbGVtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZyc7XG59IiwiLyoqXG4gKiBSZW1vdmVzIGV2ZW50IGhhbmRsZXJzIGZyb20gdGhlIGdpdmVuIG9iamVjdC5cbiAqIEEgZmllbGQgaXMgY29uc2lkZXJlZCBhbiBldmVudCBoYW5kbGVyIGlmIGl0IGlzIGEgZnVuY3Rpb24gd2l0aCBhIG5hbWUgYmVnaW5uaW5nIHdpdGggYG9uYC5cbiAqXG4gKiBAcGFyYW0gb2JqZWN0IE9iamVjdCB0byByZW1vdmUgZXZlbnQgaGFuZGxlcnMgZnJvbS5cbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIGV2ZW50IGhhbmRsZXJzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbWl0RXZlbnRIYW5kbGVycyhvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBPYmplY3Qua2V5cyhvYmplY3QpLmZpbHRlcihwcm9wID0+ICEocHJvcC5tYXRjaCgvXm9uW0EtWl0vKSAmJiB0eXBlb2Ygb2JqZWN0W3Byb3BdID09PSAnZnVuY3Rpb24nKSkuZm9yRWFjaChwcm9wID0+IHtcbiAgICByZXN1bHRbcHJvcF0gPSBvYmplY3RbcHJvcF07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImVsZW1lbnRUeXBlXCIsIFwiZXh0ZXJuYWxTbG90UHJvcHNcIiwgXCJvd25lclN0YXRlXCIsIFwic2tpcFJlc29sdmluZ1Nsb3RQcm9wc1wiXTtcbmltcG9ydCB7IHVuc3RhYmxlX3VzZUZvcmtSZWYgYXMgdXNlRm9ya1JlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgYXBwZW5kT3duZXJTdGF0ZSB9IGZyb20gJy4vYXBwZW5kT3duZXJTdGF0ZSc7XG5pbXBvcnQgeyBtZXJnZVNsb3RQcm9wcyB9IGZyb20gJy4vbWVyZ2VTbG90UHJvcHMnO1xuaW1wb3J0IHsgcmVzb2x2ZUNvbXBvbmVudFByb3BzIH0gZnJvbSAnLi9yZXNvbHZlQ29tcG9uZW50UHJvcHMnO1xuLyoqXG4gKiBAaWdub3JlIC0gZG8gbm90IGRvY3VtZW50LlxuICogQnVpbGRzIHRoZSBwcm9wcyB0byBiZSBwYXNzZWQgaW50byB0aGUgc2xvdCBvZiBhbiB1bnN0eWxlZCBjb21wb25lbnQuXG4gKiBJdCBtZXJnZXMgdGhlIGludGVybmFsIHByb3BzIG9mIHRoZSBjb21wb25lbnQgd2l0aCB0aGUgb25lcyBzdXBwbGllZCBieSB0aGUgdXNlciwgYWxsb3dpbmcgdG8gY3VzdG9taXplIHRoZSBiZWhhdmlvci5cbiAqIElmIHRoZSBzbG90IGNvbXBvbmVudCBpcyBub3QgYSBob3N0IGNvbXBvbmVudCwgaXQgYWxzbyBtZXJnZXMgaW4gdGhlIGBvd25lclN0YXRlYC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1ldGVycy5nZXRTbG90UHJvcHMgLSBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcHJvcHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBzbG90IGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNsb3RQcm9wcyhwYXJhbWV0ZXJzKSB7XG4gIHZhciBfcGFyYW1ldGVycyRhZGRpdGlvbmE7XG4gIGNvbnN0IHtcbiAgICAgIGVsZW1lbnRUeXBlLFxuICAgICAgZXh0ZXJuYWxTbG90UHJvcHMsXG4gICAgICBvd25lclN0YXRlLFxuICAgICAgc2tpcFJlc29sdmluZ1Nsb3RQcm9wcyA9IGZhbHNlXG4gICAgfSA9IHBhcmFtZXRlcnMsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHBhcmFtZXRlcnMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHJlc29sdmVkQ29tcG9uZW50c1Byb3BzID0gc2tpcFJlc29sdmluZ1Nsb3RQcm9wcyA/IHt9IDogcmVzb2x2ZUNvbXBvbmVudFByb3BzKGV4dGVybmFsU2xvdFByb3BzLCBvd25lclN0YXRlKTtcbiAgY29uc3Qge1xuICAgIHByb3BzOiBtZXJnZWRQcm9wcyxcbiAgICBpbnRlcm5hbFJlZlxuICB9ID0gbWVyZ2VTbG90UHJvcHMoX2V4dGVuZHMoe30sIHJlc3QsIHtcbiAgICBleHRlcm5hbFNsb3RQcm9wczogcmVzb2x2ZWRDb21wb25lbnRzUHJvcHNcbiAgfSkpO1xuICBjb25zdCByZWYgPSB1c2VGb3JrUmVmKGludGVybmFsUmVmLCByZXNvbHZlZENvbXBvbmVudHNQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogcmVzb2x2ZWRDb21wb25lbnRzUHJvcHMucmVmLCAoX3BhcmFtZXRlcnMkYWRkaXRpb25hID0gcGFyYW1ldGVycy5hZGRpdGlvbmFsUHJvcHMpID09IG51bGwgPyB2b2lkIDAgOiBfcGFyYW1ldGVycyRhZGRpdGlvbmEucmVmKTtcbiAgY29uc3QgcHJvcHMgPSBhcHBlbmRPd25lclN0YXRlKGVsZW1lbnRUeXBlLCBfZXh0ZW5kcyh7fSwgbWVyZ2VkUHJvcHMsIHtcbiAgICByZWZcbiAgfSksIG93bmVyU3RhdGUpO1xuICByZXR1cm4gcHJvcHM7XG59IiwiLyoqXG4gKiBJZiBgY29tcG9uZW50UHJvcHNgIGlzIGEgZnVuY3Rpb24sIGNhbGxzIGl0IHdpdGggdGhlIHByb3ZpZGVkIGBvd25lclN0YXRlYC5cbiAqIE90aGVyd2lzZSwganVzdCByZXR1cm5zIGBjb21wb25lbnRQcm9wc2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQ29tcG9uZW50UHJvcHMoY29tcG9uZW50UHJvcHMsIG93bmVyU3RhdGUsIHNsb3RTdGF0ZSkge1xuICBpZiAodHlwZW9mIGNvbXBvbmVudFByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudFByb3BzKG93bmVyU3RhdGUsIHNsb3RTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudFByb3BzO1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBleHRyYWN0RXZlbnRIYW5kbGVycyB9IGZyb20gJy4vZXh0cmFjdEV2ZW50SGFuZGxlcnMnO1xuaW1wb3J0IHsgb21pdEV2ZW50SGFuZGxlcnMgfSBmcm9tICcuL29taXRFdmVudEhhbmRsZXJzJztcbi8qKlxuICogTWVyZ2VzIHRoZSBzbG90IGNvbXBvbmVudCBpbnRlcm5hbCBwcm9wcyAodXN1YWxseSBjb21pbmcgZnJvbSBhIGhvb2spXG4gKiB3aXRoIHRoZSBleHRlcm5hbGx5IHByb3ZpZGVkIG9uZXMuXG4gKlxuICogVGhlIG1lcmdlIG9yZGVyIGlzICh0aGUgbGF0dGVyIG92ZXJyaWRlcyB0aGUgZm9ybWVyKTpcbiAqIDEuIFRoZSBpbnRlcm5hbCBwcm9wcyAoc3BlY2lmaWVkIGFzIGEgZ2V0dGVyIGZ1bmN0aW9uIHRvIHdvcmsgd2l0aCBnZXQqUHJvcHMgaG9vayByZXN1bHQpXG4gKiAyLiBBZGRpdGlvbmFsIHByb3BzIChzcGVjaWZpZWQgaW50ZXJuYWxseSBvbiBhIEJhc2UgVUkgY29tcG9uZW50KVxuICogMy4gRXh0ZXJuYWwgcHJvcHMgc3BlY2lmaWVkIG9uIHRoZSBvd25lciBjb21wb25lbnQuIFRoZXNlIHNob3VsZCBvbmx5IGJlIHVzZWQgb24gYSByb290IHNsb3QuXG4gKiA0LiBFeHRlcm5hbCBwcm9wcyBzcGVjaWZpZWQgaW4gdGhlIGBzbG90UHJvcHMuKmAgcHJvcC5cbiAqIDUuIFRoZSBgY2xhc3NOYW1lYCBwcm9wIC0gY29tYmluZWQgZnJvbSBhbGwgdGhlIGFib3ZlLlxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVNsb3RQcm9wcyhwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHtcbiAgICBnZXRTbG90UHJvcHMsXG4gICAgYWRkaXRpb25hbFByb3BzLFxuICAgIGV4dGVybmFsU2xvdFByb3BzLFxuICAgIGV4dGVybmFsRm9yd2FyZGVkUHJvcHMsXG4gICAgY2xhc3NOYW1lXG4gIH0gPSBwYXJhbWV0ZXJzO1xuICBpZiAoIWdldFNsb3RQcm9wcykge1xuICAgIC8vIFRoZSBzaW1wbGVyIGNhc2UgLSBnZXRTbG90UHJvcHMgaXMgbm90IGRlZmluZWQsIHNvIG5vIGludGVybmFsIGV2ZW50IGhhbmRsZXJzIGFyZSBkZWZpbmVkLFxuICAgIC8vIHNvIHdlIGNhbiBzaW1wbHkgbWVyZ2UgYWxsIHRoZSBwcm9wcyB3aXRob3V0IGhhdmluZyB0byB3b3JyeSBhYm91dCBleHRyYWN0aW5nIGV2ZW50IGhhbmRsZXJzLlxuICAgIGNvbnN0IGpvaW5lZENsYXNzZXMgPSBjbHN4KGFkZGl0aW9uYWxQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogYWRkaXRpb25hbFByb3BzLmNsYXNzTmFtZSwgY2xhc3NOYW1lLCBleHRlcm5hbEZvcndhcmRlZFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBleHRlcm5hbEZvcndhcmRlZFByb3BzLmNsYXNzTmFtZSwgZXh0ZXJuYWxTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGV4dGVybmFsU2xvdFByb3BzLmNsYXNzTmFtZSk7XG4gICAgY29uc3QgbWVyZ2VkU3R5bGUgPSBfZXh0ZW5kcyh7fSwgYWRkaXRpb25hbFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBhZGRpdGlvbmFsUHJvcHMuc3R5bGUsIGV4dGVybmFsRm9yd2FyZGVkUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGV4dGVybmFsRm9yd2FyZGVkUHJvcHMuc3R5bGUsIGV4dGVybmFsU2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBleHRlcm5hbFNsb3RQcm9wcy5zdHlsZSk7XG4gICAgY29uc3QgcHJvcHMgPSBfZXh0ZW5kcyh7fSwgYWRkaXRpb25hbFByb3BzLCBleHRlcm5hbEZvcndhcmRlZFByb3BzLCBleHRlcm5hbFNsb3RQcm9wcyk7XG4gICAgaWYgKGpvaW5lZENsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgcHJvcHMuY2xhc3NOYW1lID0gam9pbmVkQ2xhc3NlcztcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKG1lcmdlZFN0eWxlKS5sZW5ndGggPiAwKSB7XG4gICAgICBwcm9wcy5zdHlsZSA9IG1lcmdlZFN0eWxlO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcHJvcHMsXG4gICAgICBpbnRlcm5hbFJlZjogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIC8vIEluIHRoaXMgY2FzZSwgZ2V0U2xvdFByb3BzIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHRoZSBleHRlcm5hbCBldmVudCBoYW5kbGVycy5cbiAgLy8gV2UgZG9uJ3QgbmVlZCB0byBpbmNsdWRlIHRoZW0gaW4gdGhlIG1lcmdlZCBwcm9wcyBiZWNhdXNlIG9mIHRoaXMuXG5cbiAgY29uc3QgZXZlbnRIYW5kbGVycyA9IGV4dHJhY3RFdmVudEhhbmRsZXJzKF9leHRlbmRzKHt9LCBleHRlcm5hbEZvcndhcmRlZFByb3BzLCBleHRlcm5hbFNsb3RQcm9wcykpO1xuICBjb25zdCBjb21wb25lbnRzUHJvcHNXaXRob3V0RXZlbnRIYW5kbGVycyA9IG9taXRFdmVudEhhbmRsZXJzKGV4dGVybmFsU2xvdFByb3BzKTtcbiAgY29uc3Qgb3RoZXJQcm9wc1dpdGhvdXRFdmVudEhhbmRsZXJzID0gb21pdEV2ZW50SGFuZGxlcnMoZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcyk7XG4gIGNvbnN0IGludGVybmFsU2xvdFByb3BzID0gZ2V0U2xvdFByb3BzKGV2ZW50SGFuZGxlcnMpO1xuXG4gIC8vIFRoZSBvcmRlciBvZiBjbGFzc2VzIGlzIGltcG9ydGFudCBoZXJlLlxuICAvLyBFbW90aW9uICh0aGF0IHdlIHVzZSBpbiBsaWJyYXJpZXMgY29uc3VtaW5nIEJhc2UgVUkpIGRlcGVuZHMgb24gdGhpcyBvcmRlclxuICAvLyB0byBwcm9wZXJseSBvdmVycmlkZSBzdHlsZS4gSXQgcmVxdWlyZXMgdGhlIG1vc3QgaW1wb3J0YW50IGNsYXNzZXMgdG8gYmUgbGFzdFxuICAvLyAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zMzIwNSkgZm9yIHRoZSByZWxhdGVkIGRpc2N1c3Npb24uXG4gIGNvbnN0IGpvaW5lZENsYXNzZXMgPSBjbHN4KGludGVybmFsU2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBpbnRlcm5hbFNsb3RQcm9wcy5jbGFzc05hbWUsIGFkZGl0aW9uYWxQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogYWRkaXRpb25hbFByb3BzLmNsYXNzTmFtZSwgY2xhc3NOYW1lLCBleHRlcm5hbEZvcndhcmRlZFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBleHRlcm5hbEZvcndhcmRlZFByb3BzLmNsYXNzTmFtZSwgZXh0ZXJuYWxTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGV4dGVybmFsU2xvdFByb3BzLmNsYXNzTmFtZSk7XG4gIGNvbnN0IG1lcmdlZFN0eWxlID0gX2V4dGVuZHMoe30sIGludGVybmFsU2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBpbnRlcm5hbFNsb3RQcm9wcy5zdHlsZSwgYWRkaXRpb25hbFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBhZGRpdGlvbmFsUHJvcHMuc3R5bGUsIGV4dGVybmFsRm9yd2FyZGVkUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGV4dGVybmFsRm9yd2FyZGVkUHJvcHMuc3R5bGUsIGV4dGVybmFsU2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBleHRlcm5hbFNsb3RQcm9wcy5zdHlsZSk7XG4gIGNvbnN0IHByb3BzID0gX2V4dGVuZHMoe30sIGludGVybmFsU2xvdFByb3BzLCBhZGRpdGlvbmFsUHJvcHMsIG90aGVyUHJvcHNXaXRob3V0RXZlbnRIYW5kbGVycywgY29tcG9uZW50c1Byb3BzV2l0aG91dEV2ZW50SGFuZGxlcnMpO1xuICBpZiAoam9pbmVkQ2xhc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgcHJvcHMuY2xhc3NOYW1lID0gam9pbmVkQ2xhc3NlcztcbiAgfVxuICBpZiAoT2JqZWN0LmtleXMobWVyZ2VkU3R5bGUpLmxlbmd0aCA+IDApIHtcbiAgICBwcm9wcy5zdHlsZSA9IG1lcmdlZFN0eWxlO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHJvcHMsXG4gICAgaW50ZXJuYWxSZWY6IGludGVybmFsU2xvdFByb3BzLnJlZlxuICB9O1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgaXNIb3N0Q29tcG9uZW50IH0gZnJvbSAnLi9pc0hvc3RDb21wb25lbnQnO1xuXG4vKipcbiAqIFR5cGUgb2YgdGhlIG93bmVyU3RhdGUgYmFzZWQgb24gdGhlIHR5cGUgb2YgYW4gZWxlbWVudCBpdCBhcHBsaWVzIHRvLlxuICogVGhpcyByZXNvbHZlcyB0byB0aGUgcHJvdmlkZWQgT3duZXJTdGF0ZSBmb3IgUmVhY3QgY29tcG9uZW50cyBhbmQgYHVuZGVmaW5lZGAgZm9yIGhvc3QgY29tcG9uZW50cy5cbiAqIEZhbGxzIGJhY2sgdG8gYE93bmVyU3RhdGUgfCB1bmRlZmluZWRgIHdoZW4gdGhlIGV4YWN0IHR5cGUgY2FuJ3QgYmUgZGV0ZXJtaW5lZCBpbiBkZXZlbG9wbWVudCB0aW1lLlxuICovXG5cbi8qKlxuICogQXBwZW5kcyB0aGUgb3duZXJTdGF0ZSBvYmplY3QgdG8gdGhlIHByb3BzLCBtZXJnaW5nIHdpdGggdGhlIGV4aXN0aW5nIG9uZSBpZiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIGVsZW1lbnRUeXBlIFR5cGUgb2YgdGhlIGVsZW1lbnQgdGhhdCBvd25zIHRoZSBgZXhpc3RpbmdQcm9wc2AuIElmIHRoZSBlbGVtZW50IGlzIGEgRE9NIG5vZGUgb3IgdW5kZWZpbmVkLCBgb3duZXJTdGF0ZWAgaXMgbm90IGFwcGxpZWQuXG4gKiBAcGFyYW0gb3RoZXJQcm9wcyBQcm9wcyBvZiB0aGUgZWxlbWVudC5cbiAqIEBwYXJhbSBvd25lclN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRPd25lclN0YXRlKGVsZW1lbnRUeXBlLCBvdGhlclByb3BzLCBvd25lclN0YXRlKSB7XG4gIGlmIChlbGVtZW50VHlwZSA9PT0gdW5kZWZpbmVkIHx8IGlzSG9zdENvbXBvbmVudChlbGVtZW50VHlwZSkpIHtcbiAgICByZXR1cm4gb3RoZXJQcm9wcztcbiAgfVxuICByZXR1cm4gX2V4dGVuZHMoe30sIG90aGVyUHJvcHMsIHtcbiAgICBvd25lclN0YXRlOiBfZXh0ZW5kcyh7fSwgb3RoZXJQcm9wcy5vd25lclN0YXRlLCBvd25lclN0YXRlKVxuICB9KTtcbn0iXSwibmFtZXMiOlsiY2FuZGlkYXRlc1NlbGVjdG9yIiwiam9pbiIsImRlZmF1bHRHZXRUYWJiYWJsZSIsInJvb3QiLCJyZWd1bGFyVGFiTm9kZXMiLCJvcmRlcmVkVGFiTm9kZXMiLCJBcnJheSIsImZyb20iLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsIm5vZGUiLCJpIiwibm9kZVRhYkluZGV4IiwidGFiaW5kZXhBdHRyIiwicGFyc2VJbnQiLCJnZXRBdHRyaWJ1dGUiLCJOdW1iZXIiLCJpc05hTiIsImNvbnRlbnRFZGl0YWJsZSIsIm5vZGVOYW1lIiwidGFiSW5kZXgiLCJnZXRUYWJJbmRleCIsImRpc2FibGVkIiwidGFnTmFtZSIsInR5cGUiLCJuYW1lIiwiZ2V0UmFkaW8iLCJzZWxlY3RvciIsIm93bmVyRG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwicm92aW5nIiwiaXNOb25UYWJiYWJsZVJhZGlvIiwiaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZSIsInB1c2giLCJkb2N1bWVudE9yZGVyIiwic29ydCIsImEiLCJiIiwibWFwIiwiY29uY2F0IiwiZGVmYXVsdElzRW5hYmxlZCIsIkZvY3VzVHJhcCIsInByb3BzIiwiY2hpbGRyZW4iLCJkaXNhYmxlQXV0b0ZvY3VzIiwiZGlzYWJsZUVuZm9yY2VGb2N1cyIsImRpc2FibGVSZXN0b3JlRm9jdXMiLCJnZXRUYWJiYWJsZSIsImlzRW5hYmxlZCIsIm9wZW4iLCJpZ25vcmVOZXh0RW5mb3JjZUZvY3VzIiwic2VudGluZWxTdGFydCIsInNlbnRpbmVsRW5kIiwibm9kZVRvUmVzdG9yZSIsInJlYWN0Rm9jdXNFdmVudFRhcmdldCIsImFjdGl2YXRlZCIsInJvb3RSZWYiLCJoYW5kbGVSZWYiLCJyZWYiLCJsYXN0S2V5ZG93biIsImN1cnJlbnQiLCJkb2MiLCJjb250YWlucyIsImFjdGl2ZUVsZW1lbnQiLCJoYXNBdHRyaWJ1dGUiLCJzZXRBdHRyaWJ1dGUiLCJmb2N1cyIsImxvb3BGb2N1cyIsIm5hdGl2ZUV2ZW50Iiwia2V5Iiwic2hpZnRLZXkiLCJjb250YWluIiwicm9vdEVsZW1lbnQiLCJoYXNGb2N1cyIsInRhYmJhYmxlIiwibGVuZ3RoIiwiX2xhc3RLZXlkb3duJGN1cnJlbnQiLCJfbGFzdEtleWRvd24kY3VycmVudDIiLCJpc1NoaWZ0VGFiIiwiQm9vbGVhbiIsImZvY3VzTmV4dCIsImZvY3VzUHJldmlvdXMiLCJhZGRFdmVudExpc3RlbmVyIiwiaW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlRm9jdXNTZW50aW5lbCIsImV2ZW50IiwicmVsYXRlZFRhcmdldCIsIm9uRm9jdXMiLCJ0YXJnZXQiLCJjaGlsZHJlblByb3BzSGFuZGxlciIsIlBvcnRhbCIsImZvcndhcmRlZFJlZiIsImNvbnRhaW5lciIsImRpc2FibGVQb3J0YWwiLCJtb3VudE5vZGUiLCJzZXRNb3VudE5vZGUiLCJnZXRDb250YWluZXIiLCJkb2N1bWVudCIsImJvZHkiLCJuZXdQcm9wcyIsIl9leGNsdWRlZCIsImdldFN0eWxlVmFsdWUiLCJ2YWx1ZSIsInN0eWxlcyIsInZpc2liaWxpdHkiLCJwb3NpdGlvbiIsIm92ZXJmbG93IiwiaGVpZ2h0IiwidG9wIiwibGVmdCIsInRyYW5zZm9ybSIsImlzRW1wdHkiLCJvYmoiLCJPYmplY3QiLCJrZXlzIiwib3V0ZXJIZWlnaHRTdHlsZSIsIlRleHRhcmVhQXV0b3NpemUiLCJvbkNoYW5nZSIsIm1heFJvd3MiLCJtaW5Sb3dzIiwic3R5bGUiLCJvdGhlciIsImlzQ29udHJvbGxlZCIsImlucHV0UmVmIiwic2hhZG93UmVmIiwicmVuZGVycyIsInN0YXRlIiwic2V0U3RhdGUiLCJnZXRVcGRhdGVkU3RhdGUiLCJpbnB1dCIsImNvbXB1dGVkU3R5bGUiLCJnZXRDb21wdXRlZFN0eWxlIiwid2lkdGgiLCJpbnB1dFNoYWxsb3ciLCJwbGFjZWhvbGRlciIsInNsaWNlIiwiYm94U2l6aW5nIiwicGFkZGluZyIsInBhZGRpbmdCb3R0b20iLCJwYWRkaW5nVG9wIiwiYm9yZGVyIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsImlubmVySGVpZ2h0Iiwic2Nyb2xsSGVpZ2h0Iiwic2luZ2xlUm93SGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJNYXRoIiwibWF4IiwibWluIiwiYWJzIiwidXBkYXRlU3RhdGUiLCJwcmV2U3RhdGUiLCJuZXdTdGF0ZSIsInN5bmNIZWlnaHQiLCJoYW5kbGVSZXNpemUiLCJzeW5jSGVpZ2h0V2l0aEZsdXNoU3luYyIsImRlYm91bmNlSGFuZGxlUmVzaXplIiwiY29udGFpbmVyV2luZG93IiwicmVzaXplT2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsIm9ic2VydmUiLCJjbGVhciIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwickFGIiwiZGlzY29ubmVjdCIsInJvd3MiLCJ1bmRlZmluZWQiLCJjbGFzc05hbWUiLCJyZWFkT25seSIsImFyaWFIaWRkZW4iLCJlbGVtZW50Iiwic2hvdyIsInJlbW92ZUF0dHJpYnV0ZSIsImdldFBhZGRpbmdSaWdodCIsIm93bmVyV2luZG93IiwicGFkZGluZ1JpZ2h0IiwiYXJpYUhpZGRlblNpYmxpbmdzIiwibW91bnRFbGVtZW50IiwiY3VycmVudEVsZW1lbnQiLCJlbGVtZW50c1RvRXhjbHVkZSIsImJsYWNrbGlzdCIsImNhbGwiLCJpc05vdEV4Y2x1ZGVkRWxlbWVudCIsImluZGV4T2YiLCJpc05vdEZvcmJpZGRlbkVsZW1lbnQiLCJpc0ZvcmJpZGRlblRhZ05hbWUiLCJpc0lucHV0SGlkZGVuIiwiaXNBcmlhSGlkZGVuRm9yYmlkZGVuT25FbGVtZW50IiwiZmluZEluZGV4T2YiLCJpdGVtcyIsImNhbGxiYWNrIiwiaWR4Iiwic29tZSIsIml0ZW0iLCJpbmRleCIsImRlZmF1bHRNYW5hZ2VyIiwiY29uc3RydWN0b3IiLCJ0aGlzIiwiY29udGFpbmVycyIsIm1vZGFscyIsImFkZCIsIm1vZGFsIiwibW9kYWxJbmRleCIsIm1vZGFsUmVmIiwiaGlkZGVuU2libGluZ3MiLCJnZXRIaWRkZW5TaWJsaW5ncyIsIm1vdW50IiwiY29udGFpbmVySW5kZXgiLCJyZXN0b3JlIiwiY29udGFpbmVySW5mbyIsInJlc3RvcmVTdHlsZSIsImRpc2FibGVTY3JvbGxMb2NrIiwiaW5uZXJXaWR0aCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0IiwiaXNPdmVyZmxvd2luZyIsInNjcm9sbGJhclNpemUiLCJnZXRTY3JvbGxiYXJTaXplIiwicHJvcGVydHkiLCJlbCIsImZpeGVkRWxlbWVudHMiLCJzY3JvbGxDb250YWluZXIiLCJwYXJlbnROb2RlIiwiRG9jdW1lbnRGcmFnbWVudCIsInBhcmVudCIsInBhcmVudEVsZW1lbnQiLCJvdmVyZmxvd1kiLCJvdmVyZmxvd1giLCJzZXRQcm9wZXJ0eSIsInJlbW92ZVByb3BlcnR5IiwiaGFuZGxlQ29udGFpbmVyIiwicmVtb3ZlIiwiYXJpYUhpZGRlblN0YXRlIiwic3BsaWNlIiwibmV4dFRvcCIsImlzVG9wTW9kYWwiLCJ1c2VNb2RhbCIsInBhcmFtZXRlcnMiLCJkaXNhYmxlRXNjYXBlS2V5RG93biIsIm1hbmFnZXIiLCJjbG9zZUFmdGVyVHJhbnNpdGlvbiIsIm9uVHJhbnNpdGlvbkVudGVyIiwib25UcmFuc2l0aW9uRXhpdGVkIiwib25DbG9zZSIsIm1vdW50Tm9kZVJlZiIsInVzZUZvcmtSZWYiLCJleGl0ZWQiLCJzZXRFeGl0ZWQiLCJoYXNUcmFuc2l0aW9uIiwiaGFzT3duUHJvcGVydHkiLCJnZXRIYXNUcmFuc2l0aW9uIiwiYXJpYUhpZGRlblByb3AiLCJnZXRNb2RhbCIsImhhbmRsZU1vdW50ZWQiLCJzY3JvbGxUb3AiLCJoYW5kbGVPcGVuIiwidXNlRXZlbnRDYWxsYmFjayIsInJlc29sdmVkQ29udGFpbmVyIiwiaGFuZGxlUG9ydGFsUmVmIiwiaGFuZGxlQ2xvc2UiLCJjcmVhdGVIYW5kbGVLZXlEb3duIiwib3RoZXJIYW5kbGVycyIsIl9vdGhlckhhbmRsZXJzJG9uS2V5RCIsIm9uS2V5RG93biIsIndoaWNoIiwic3RvcFByb3BhZ2F0aW9uIiwiY3JlYXRlSGFuZGxlQmFja2Ryb3BDbGljayIsIl9vdGhlckhhbmRsZXJzJG9uQ2xpYyIsIm9uQ2xpY2siLCJjdXJyZW50VGFyZ2V0IiwiZ2V0Um9vdFByb3BzIiwicHJvcHNFdmVudEhhbmRsZXJzIiwiZXh0cmFjdEV2ZW50SGFuZGxlcnMiLCJleHRlcm5hbEV2ZW50SGFuZGxlcnMiLCJyb2xlIiwiZ2V0QmFja2Ryb3BQcm9wcyIsImdldFRyYW5zaXRpb25Qcm9wcyIsIm9uRW50ZXIiLCJjcmVhdGVDaGFpbmVkRnVuY3Rpb24iLCJvbkV4aXRlZCIsInBvcnRhbFJlZiIsIm9iamVjdCIsImV4Y2x1ZGVLZXlzIiwicmVzdWx0IiwiZmlsdGVyIiwicHJvcCIsIm1hdGNoIiwiaW5jbHVkZXMiLCJpc0hvc3RDb21wb25lbnQiLCJvbWl0RXZlbnRIYW5kbGVycyIsInVzZVNsb3RQcm9wcyIsIl9wYXJhbWV0ZXJzJGFkZGl0aW9uYSIsImVsZW1lbnRUeXBlIiwiZXh0ZXJuYWxTbG90UHJvcHMiLCJvd25lclN0YXRlIiwic2tpcFJlc29sdmluZ1Nsb3RQcm9wcyIsInJlc3QiLCJyZXNvbHZlZENvbXBvbmVudHNQcm9wcyIsImNvbXBvbmVudFByb3BzIiwic2xvdFN0YXRlIiwicmVzb2x2ZUNvbXBvbmVudFByb3BzIiwibWVyZ2VkUHJvcHMiLCJpbnRlcm5hbFJlZiIsImdldFNsb3RQcm9wcyIsImFkZGl0aW9uYWxQcm9wcyIsImV4dGVybmFsRm9yd2FyZGVkUHJvcHMiLCJqb2luZWRDbGFzc2VzIiwiY2xzeCIsIm1lcmdlZFN0eWxlIiwiZXZlbnRIYW5kbGVycyIsImNvbXBvbmVudHNQcm9wc1dpdGhvdXRFdmVudEhhbmRsZXJzIiwib3RoZXJQcm9wc1dpdGhvdXRFdmVudEhhbmRsZXJzIiwiaW50ZXJuYWxTbG90UHJvcHMiLCJtZXJnZVNsb3RQcm9wcyIsIm90aGVyUHJvcHMiLCJhcHBlbmRPd25lclN0YXRlIl0sInNvdXJjZVJvb3QiOiIifQ==