Free javascript Hosting


sbwebembed.js

Uploaded on Mar 01 2022 05:51 by manuel.o.pineyro

(()=>{var e={303:(e,n,t)=>{t(457)},402:e=>{!function(n){if("undefined"!=typeof window){var t=!0,o="",i=0,r="",a=null,s="",u=!1,c={resize:1,click:1},d=128,l=!0,f=1,m="bodyOffset",g=m,h=!0,p="",w={},y=32,b=null,v=!1,T=!1,M="[iFrameSizer]",E=M.length,O="",I={max:1,min:1,bodyScroll:1,documentElementScroll:1},x="child",S=window.parent,k="*",z=0,N=!1,F=null,R=16,C=1,A="scroll",W=A,P=window,L=function(){re("onMessage function not defined")},H=function(){},j=function(){},B={height:function(){return re("Custom height calculation function not defined"),document.documentElement.offsetHeight},width:function(){return re("Custom width calculation function not defined"),document.body.scrollWidth}},q={},D=!1;try{var U=Object.create({},{passive:{get:function(){D=!0}}});window.addEventListener("test",ee,U),window.removeEventListener("test",ee,U)}catch(e){}var V,J,X,Y,Q,K,G,Z={bodyOffset:function(){return document.body.offsetHeight+he("marginTop")+he("marginBottom")},offset:function(){return Z.bodyOffset()},bodyScroll:function(){return document.body.scrollHeight},custom:function(){return B.height()},documentElementOffset:function(){return document.documentElement.offsetHeight},documentElementScroll:function(){return document.documentElement.scrollHeight},max:function(){return Math.max.apply(null,we(Z))},min:function(){return Math.min.apply(null,we(Z))},grow:function(){return Z.max()},lowestElement:function(){return Math.max(Z.bodyOffset()||Z.documentElementOffset(),pe("bottom",be()))},taggedElement:function(){return ye("bottom","data-iframe-height")}},$={bodyScroll:function(){return document.body.scrollWidth},bodyOffset:function(){return document.body.offsetWidth},custom:function(){return B.width()},documentElementScroll:function(){return document.documentElement.scrollWidth},documentElementOffset:function(){return document.documentElement.offsetWidth},scroll:function(){return Math.max($.bodyScroll(),$.documentElementScroll())},max:function(){return Math.max.apply(null,we($))},min:function(){return Math.min.apply(null,we($))},rightMostElement:function(){return pe("right",be())},taggedElement:function(){return ye("right","data-iframe-width")}},_=(V=ve,Q=null,K=0,G=function(){K=Date.now(),Q=null,Y=V.apply(J,X),Q||(J=X=null)},function(){var e=Date.now();K||(K=e);var n=R-(e-K);return J=this,X=arguments,n<=0||n>R?(Q&&(clearTimeout(Q),Q=null),K=e,Y=V.apply(J,X),Q||(J=X=null)):Q||(Q=setTimeout(G,n)),Y});ne(window,"message",(function(c){var f,m={init:function(){var e,f,m;p=c.data,S=c.source,function(){function e(e){return"true"===e}var a=p.substr(E).split(":");O=a[0],i=n!==a[1]?Number(a[1]):i,u=n!==a[2]?e(a[2]):u,v=n!==a[3]?e(a[3]):v,y=n!==a[4]?Number(a[4]):y,t=n!==a[6]?e(a[6]):t,r=a[7],g=n!==a[8]?a[8]:g,o=a[9],s=a[10],z=n!==a[11]?Number(a[11]):z,w.enable=n!==a[12]&&e(a[12]),x=n!==a[13]?a[13]:x,W=n!==a[14]?a[14]:W,T=n!==a[15]?Boolean(a[15]):T}(),ie("Initialising iFrame ("+window.location.href+")"),function(){function e(){var e=window.iFrameResizer;ie("Reading data from page: "+JSON.stringify(e)),Object.keys(e).forEach(ae,e),L="onMessage"in e?e.onMessage:L,H="onReady"in e?e.onReady:H,k="targetOrigin"in e?e.targetOrigin:k,g="heightCalculationMethod"in e?e.heightCalculationMethod:g,W="widthCalculationMethod"in e?e.widthCalculationMethod:W}function n(e,n){return"function"==typeof e&&(ie("Setup custom "+n+"CalcMethod"),B[n]=e,e="custom"),e}"iFrameResizer"in window&&Object===window.iFrameResizer.constructor&&(e(),g=n(g,"height"),W=n(W,"width")),ie("TargetOrigin for parent set to: "+k)}(),n===r&&(r=i+"px"),se("margin",(f="margin",-1!==(m=r).indexOf("-")&&(re("Negative CSS value ignored for "+f),m=""),m)),se("background",o),se("padding",s),(e=document.createElement("div")).style.clear="both",e.style.display="block",e.style.height="0",document.body.appendChild(e),le(),fe(),document.documentElement.style.height="",document.body.style.height="",ie('HTML & body height set to "auto"'),ie("Enable public methods"),P.parentIFrame={autoResize:function(e){return!0===e&&!1===t?(t=!0,me()):!1===e&&!0===t&&(t=!1,ce("remove"),null!==a&&a.disconnect(),clearInterval(b)),Ie(0,0,"autoResize",JSON.stringify(t)),t},close:function(){Ie(0,0,"close")},getId:function(){return O},getPageInfo:function(e){"function"==typeof e?(j=e,Ie(0,0,"pageInfo")):(j=function(){},Ie(0,0,"pageInfoStop"))},moveToAnchor:function(e){w.findTarget(e)},reset:function(){Oe("parentIFrame.reset")},scrollTo:function(e,n){Ie(n,e,"scrollTo")},scrollToOffset:function(e,n){Ie(n,e,"scrollToOffset")},sendMessage:function(e,n){Ie(0,0,"message",JSON.stringify(e),n)},setHeightCalculationMethod:function(e){g=e,le()},setWidthCalculationMethod:function(e){W=e,fe()},setTargetOrigin:function(e){ie("Set targetOrigin: "+e),k=e},size:function(e,n){Te("size","parentIFrame.size("+(e||"")+(n?","+n:"")+")",e,n)}},function(){function e(e){Ie(0,0,e.type,e.screenY+":"+e.screenX)}function n(n,t){ie("Add event listener: "+t),ne(window.document,n,e)}!0===T&&(n("mouseenter","Mouse Enter"),n("mouseleave","Mouse Leave"))}(),me(),w=function(){function e(){return{x:window.pageXOffset!==n?window.pageXOffset:document.documentElement.scrollLeft,y:window.pageYOffset!==n?window.pageYOffset:document.documentElement.scrollTop}}function t(n){var t=n.getBoundingClientRect(),o=e();return{x:parseInt(t.left,10)+parseInt(o.x,10),y:parseInt(t.top,10)+parseInt(o.y,10)}}function o(e){function o(e){var n=t(e);ie("Moving to in page link (#"+i+") at x: "+n.x+" y: "+n.y),Ie(n.y,n.x,"scrollToOffset")}var i=e.split("#")[1]||e,r=decodeURIComponent(i),a=document.getElementById(r)||document.getElementsByName(r)[0];n!==a?o(a):(ie("In page link (#"+i+") not found in iFrame, so sending to parent"),Ie(0,0,"inPageLink","#"+i))}function i(){var e=window.location.hash,n=window.location.href;""!==e&&"#"!==e&&o(n)}function r(){function e(e){function n(e){e.preventDefault(),o(this.getAttribute("href"))}"#"!==e.getAttribute("href")&&ne(e,"click",n)}Array.prototype.forEach.call(document.querySelectorAll('a[href^="#"]'),e)}function a(){ne(window,"hashchange",i)}function s(){setTimeout(i,d)}function u(){Array.prototype.forEach&&document.querySelectorAll?(ie("Setting up location.hash handlers"),r(),a(),s()):re("In page linking not fully supported in this browser! (See README.md for IE8 workaround)")}return w.enable?u():ie("In page linking not enabled"),{findTarget:o}}(),Te("init","Init message from host page"),H(),l=!1,setTimeout((function(){h=!1}),d)},reset:function(){h?ie("Page reset ignored by init"):(ie("Page size reset by host page"),Ee("resetPage"))},resize:function(){Te("resizeParent","Parent window requested size check")},moveToAnchor:function(){w.findTarget(N())},inPageLink:function(){this.moveToAnchor()},pageInfo:function(){var e=N();ie("PageInfoFromParent called from parent: "+e),j(JSON.parse(e)),ie(" --")},message:function(){var e=N();ie("onMessage called from parent: "+e),L(JSON.parse(e)),ie(" --")}};function I(){return c.data.split("]")[1].split(":")[0]}function N(){return c.data.substr(c.data.indexOf(":")+1)}function F(){return c.data.split(":")[2]in{true:1,false:1}}M===(""+c.data).substr(0,E)&&(!1===l?(f=I())in m?m[f]():!e.exports&&"iFrameResize"in window||"jQuery"in window&&"iFrameResize"in window.jQuery.prototype||F()||re("Unexpected message ("+c.data+")"):F()?m.init():ie('Ignored message of type "'+I()+'". Received before initialization.'))})),ne(window,"readystatechange",xe),xe()}function ee(){}function ne(e,n,t,o){e.addEventListener(n,t,!!D&&(o||{}))}function te(e){return e.charAt(0).toUpperCase()+e.slice(1)}function oe(e){return M+"["+O+"] "+e}function ie(e){v&&"object"==typeof window.console&&console.log(oe(e))}function re(e){"object"==typeof window.console&&console.warn(oe(e))}function ae(e){var n=e.split("Callback");if(2===n.length){var t="on"+n[0].charAt(0).toUpperCase()+n[0].slice(1);this[t]=this[e],delete this[e],re("Deprecated: '"+e+"' has been renamed '"+t+"'. The old method will be removed in the next major version.")}}function se(e,t){n!==t&&""!==t&&"null"!==t&&(document.body.style[e]=t,ie("Body "+e+' set to "'+t+'"'))}function ue(e){var n={add:function(n){function t(){Te(e.eventName,e.eventType)}q[n]=t,ne(window,n,t,{passive:!0})},remove:function(e){var n,t,o=q[e];delete q[e],n=e,t=o,window.removeEventListener(n,t,!1)}};e.eventNames&&Array.prototype.map?(e.eventName=e.eventNames[0],e.eventNames.map(n[e.method])):n[e.method](e.eventName),ie(te(e.method)+" event listener: "+e.eventType)}function ce(e){ue({method:e,eventType:"Animation Start",eventNames:["animationstart","webkitAnimationStart"]}),ue({method:e,eventType:"Animation Iteration",eventNames:["animationiteration","webkitAnimationIteration"]}),ue({method:e,eventType:"Animation End",eventNames:["animationend","webkitAnimationEnd"]}),ue({method:e,eventType:"Input",eventName:"input"}),ue({method:e,eventType:"Mouse Up",eventName:"mouseup"}),ue({method:e,eventType:"Mouse Down",eventName:"mousedown"}),ue({method:e,eventType:"Orientation Change",eventName:"orientationchange"}),ue({method:e,eventType:"Print",eventName:["afterprint","beforeprint"]}),ue({method:e,eventType:"Ready State Change",eventName:"readystatechange"}),ue({method:e,eventType:"Touch Start",eventName:"touchstart"}),ue({method:e,eventType:"Touch End",eventName:"touchend"}),ue({method:e,eventType:"Touch Cancel",eventName:"touchcancel"}),ue({method:e,eventType:"Transition Start",eventNames:["transitionstart","webkitTransitionStart","MSTransitionStart","oTransitionStart","otransitionstart"]}),ue({method:e,eventType:"Transition Iteration",eventNames:["transitioniteration","webkitTransitionIteration","MSTransitionIteration","oTransitionIteration","otransitioniteration"]}),ue({method:e,eventType:"Transition End",eventNames:["transitionend","webkitTransitionEnd","MSTransitionEnd","oTransitionEnd","otransitionend"]}),"child"===x&&ue({method:e,eventType:"IFrame Resized",eventName:"resize"})}function de(e,n,t,o){return n!==e&&(e in t||(re(e+" is not a valid option for "+o+"CalculationMethod."),e=n),ie(o+' calculation method set to "'+e+'"')),e}function le(){g=de(g,m,Z,"height")}function fe(){W=de(W,A,$,"width")}function me(){var e;!0===t?(ce("add"),e=0>y,window.MutationObserver||window.WebKitMutationObserver?e?ge():a=function(){function e(e){function n(e){!1===e.complete&&(ie("Attach listeners to "+e.src),e.addEventListener("load",o,!1),e.addEventListener("error",i,!1),a.push(e))}"attributes"===e.type&&"src"===e.attributeName?n(e.target):"childList"===e.type&&Array.prototype.forEach.call(e.target.querySelectorAll("img"),n)}function n(e){ie("Remove listeners from "+e.src),e.removeEventListener("load",o,!1),e.removeEventListener("error",i,!1),function(e){a.splice(a.indexOf(e),1)}(e)}function t(e,t,o){n(e.target),Te(t,o+": "+e.target.src)}function o(e){t(e,"imageLoad","Image loaded")}function i(e){t(e,"imageLoadFailed","Image load failed")}function r(n){Te("mutationObserver","mutationObserver: "+n[0].target+" "+n[0].type),n.forEach(e)}var a=[],s=window.MutationObserver||window.WebKitMutationObserver,u=function(){var e=document.querySelector("body");return u=new s(r),ie("Create body MutationObserver"),u.observe(e,{attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0}),u}();return{disconnect:function(){"disconnect"in u&&(ie("Disconnect body MutationObserver"),u.disconnect(),a.forEach(n))}}}():(ie("MutationObserver not supported in this browser!"),ge())):ie("Auto Resize disabled")}function ge(){0!==y&&(ie("setInterval: "+y+"ms"),b=setInterval((function(){Te("interval","setInterval: "+y)}),Math.abs(y)))}function he(e,n){var t=0;return n=n||document.body,t=null!==(t=document.defaultView.getComputedStyle(n,null))?t[e]:0,parseInt(t,10)}function pe(e,n){for(var t=n.length,o=0,i=0,r=te(e),a=Date.now(),s=0;s<t;s++)(o=n[s].getBoundingClientRect()[e]+he("margin"+r,n[s]))>i&&(i=o);return a=Date.now()-a,ie("Parsed "+t+" HTML elements"),ie("Element position calculated in "+a+"ms"),function(e){e>R/2&&ie("Event throttle increased to "+(R=2*e)+"ms")}(a),i}function we(e){return[e.bodyOffset(),e.bodyScroll(),e.documentElementOffset(),e.documentElementScroll()]}function ye(e,n){var t=document.querySelectorAll("["+n+"]");return 0===t.length&&(re("No tagged elements ("+n+") found on page"),document.querySelectorAll("body *")),pe(e,t)}function be(){return document.querySelectorAll("body *")}function ve(e,t,o,i){var r,a;!function(){function e(e,n){return!(Math.abs(e-n)<=z)}return r=n!==o?o:Z[g](),a=n!==i?i:$[W](),e(f,r)||u&&e(C,a)}()&&"init"!==e?!(e in{init:1,interval:1,size:1})&&(g in I||u&&W in I)?Oe(t):e in{interval:1}||ie("No change in size detected"):(Me(),Ie(f=r,C=a,e))}function Te(e,n,t,o){N&&e in c?ie("Trigger event cancelled: "+e):(e in{reset:1,resetPage:1,init:1}||ie("Trigger event: "+n),"init"===e?ve(e,n,t,o):_(e,n,t,o))}function Me(){N||(N=!0,ie("Trigger event lock on")),clearTimeout(F),F=setTimeout((function(){N=!1,ie("Trigger event lock off"),ie("--")}),d)}function Ee(e){f=Z[g](),C=$[W](),Ie(f,C,e)}function Oe(e){var n=g;g=m,ie("Reset trigger event: "+e),Me(),Ee("reset"),g=n}function Ie(e,t,o,i,r){var a;n===r?r=k:ie("Message targetOrigin: "+r),ie("Sending message to host page ("+(a=O+":"+e+":"+t+":"+o+(n!==i?":"+i:""))+")"),S.postMessage(M+a,r)}function xe(){"loading"!==document.readyState&&window.parent.postMessage("[iFrameResizerChild]Ready","*")}}()},702:(e,n)=>{var t,o,i;!function(r){if("undefined"!=typeof window){var a,s=0,u=!1,c=!1,d="message".length,l="[iFrameSizer]",f=l.length,m=null,g=window.requestAnimationFrame,h={max:1,scroll:1,bodyScroll:1,documentElementScroll:1},p={},w=null,y={autoResize:!0,bodyBackground:null,bodyMargin:null,bodyMarginV1:8,bodyPadding:null,checkOrigin:!0,inPageLinks:!1,enablePublicMethods:!0,heightCalculationMethod:"bodyOffset",id:"iFrameResizer",interval:32,log:!1,maxHeight:1/0,maxWidth:1/0,minHeight:0,minWidth:0,mouseEvents:!0,resizeFrom:"parent",scrolling:!1,sizeHeight:!0,sizeWidth:!1,warningTimeout:5e3,tolerance:0,widthCalculationMethod:"scroll",onClose:function(){return!0},onClosed:function(){},onInit:function(){},onMessage:function(){x("onMessage function not defined")},onMouseEnter:function(){},onMouseLeave:function(){},onResized:function(){},onScroll:function(){return!0}},b={};window.jQuery&&((a=window.jQuery).fn?a.fn.iFrameResize||(a.fn.iFrameResize=function(e){return this.filter("iframe").each((function(n,t){B(t,e)})).end()}):I("","Unable to bind to jQuery, it is not fully loaded.")),o=[],(i="function"==typeof(t=V)?t.apply(n,o):t)===r||(e.exports=i),window.iFrameResize=window.iFrameResize||V()}function v(){return window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver}function T(e,n,t){e.addEventListener(n,t,!1)}function M(e,n,t){e.removeEventListener(n,t,!1)}function E(e){return p[e]?p[e].log:u}function O(e,n){S("log",e,n,E(e))}function I(e,n){S("info",e,n,E(e))}function x(e,n){S("warn",e,n,!0)}function S(e,n,t,o){!0===o&&"object"==typeof window.console&&console[e](function(e){return l+"["+function(e){var n="Host page: "+e;return window.top!==window.self&&(n=window.parentIFrame&&window.parentIFrame.getId?window.parentIFrame.getId()+": "+e:"Nested host page: "+e),n}(e)+"]"}(n),t)}function k(e){function n(){t("Height"),t("Width"),L((function(){P(k),C(N),c("onResized",k)}),k,"init")}function t(e){var n=Number(p[N]["max"+e]),t=Number(p[N]["min"+e]),o=e.toLowerCase(),i=Number(k[o]);O(N,"Checking "+o+" is in range "+t+"-"+n),i<t&&(i=t,O(N,"Set "+o+" to min value")),i>n&&(i=n,O(N,"Set "+o+" to max value")),k[o]=""+i}function o(e){return S.substr(S.indexOf(":")+d+e)}function i(e,n){var t,o;t=function(){var t,o;H("Send Page Info","pageInfo:"+(t=document.body.getBoundingClientRect(),o=k.iframe.getBoundingClientRect(),JSON.stringify({iframeHeight:o.height,iframeWidth:o.width,clientHeight:Math.max(document.documentElement.clientHeight,window.innerHeight||0),clientWidth:Math.max(document.documentElement.clientWidth,window.innerWidth||0),offsetTop:parseInt(o.top-t.top,10),offsetLeft:parseInt(o.left-t.left,10),scrollTop:window.pageYOffset,scrollLeft:window.pageXOffset,documentHeight:document.documentElement.clientHeight,documentWidth:document.documentElement.clientWidth,windowHeight:window.innerHeight,windowWidth:window.innerWidth})),e,n)},b[o=n]||(b[o]=setTimeout((function(){b[o]=null,t()}),32))}function r(e){var n=e.getBoundingClientRect();return R(N),{x:Math.floor(Number(n.left)+Number(m.x)),y:Math.floor(Number(n.top)+Number(m.y))}}function a(e){var n=e?r(k.iframe):{x:0,y:0},t={x:Number(k.width)+n.x,y:Number(k.height)+n.y};O(N,"Reposition requested from iFrame (offset x:"+n.x+" y:"+n.y+")"),window.top!==window.self?window.parentIFrame?window.parentIFrame["scrollTo"+(e?"Offset":"")](t.x,t.y):x(N,"Unable to scroll to requested position, window.parentIFrame not found"):(m=t,s(),O(N,"--"))}function s(){!1!==c("onScroll",m)?C(N):A()}function u(e){var n={};if(0===Number(k.width)&&0===Number(k.height)){var t=o(9).split(":");n={x:t[1],y:t[0]}}else n={x:k.width,y:k.height};c(e,{iframe:k.iframe,screenX:Number(n.x),screenY:Number(n.y),type:k.type})}function c(e,n){return z(N,e,n)}var g,h,w,y,v,E,S=e.data,k={},N=null;"[iFrameResizerChild]Ready"===S?function(){for(var e in p)H("iFrame requested init",j(e),p[e].iframe,e)}():l===(""+S).substr(0,f)&&S.substr(f).split(":")[0]in p?(y=(w=S.substr(f).split(":"))[1]?parseInt(w[1],10):0,v=p[w[0]]&&p[w[0]].iframe,E=getComputedStyle(v),k={iframe:v,id:w[0],height:y+function(e){return"border-box"!==e.boxSizing?0:(e.paddingTop?parseInt(e.paddingTop,10):0)+(e.paddingBottom?parseInt(e.paddingBottom,10):0)}(E)+function(e){return"border-box"!==e.boxSizing?0:(e.borderTopWidth?parseInt(e.borderTopWidth,10):0)+(e.borderBottomWidth?parseInt(e.borderBottomWidth,10):0)}(E),width:w[2],type:w[3]},N=k.id,p[N]&&(p[N].loaded=!0),(h=k.type in{true:1,false:1,undefined:1})&&O(N,"Ignoring init message from meta parent page"),!h&&function(e){var n=!0;return p[e]||(n=!1,x(k.type+" No settings for "+e+". Message was: "+S)),n}(N)&&(O(N,"Received: "+S),g=!0,null===k.iframe&&(x(N,"IFrame ("+k.id+") not found"),g=!1),g&&function(){var n,t=e.origin,o=p[N]&&p[N].checkOrigin;if(o&&""+t!="null"&&!(o.constructor===Array?function(){var e=0,n=!1;for(O(N,"Checking connection is from allowed list of origins: "+o);e<o.length;e++)if(o[e]===t){n=!0;break}return n}():(n=p[N]&&p[N].remoteHost,O(N,"Checking connection is from: "+n),t===n)))throw new Error("Unexpected message received from: "+t+" for "+k.iframe.id+". Message was: "+e.data+". This error can be disabled by setting the checkOrigin: false option or by providing of array of trusted domains.");return!0}()&&function(){switch(p[N]&&p[N].firstRun&&p[N]&&(p[N].firstRun=!1),k.type){case"close":F(k.iframe);break;case"message":f=o(6),O(N,"onMessage passed: {iframe: "+k.iframe.id+", message: "+f+"}"),c("onMessage",{iframe:k.iframe,message:JSON.parse(f)}),O(N,"--");break;case"mouseenter":u("onMouseEnter");break;case"mouseleave":u("onMouseLeave");break;case"autoResize":p[N].autoResize=JSON.parse(o(9));break;case"scrollTo":a(!1);break;case"scrollToOffset":a(!0);break;case"pageInfo":i(p[N]&&p[N].iframe,N),function(){function e(e,o){function r(){p[t]?i(p[t].iframe,t):n()}["scroll","resize"].forEach((function(n){O(t,e+n+" listener for sendPageInfo"),o(window,n,r)}))}function n(){e("Remove ",M)}var t=N;e("Add ",T),p[t]&&(p[t].stopPageInfo=n)}();break;case"pageInfoStop":p[N]&&p[N].stopPageInfo&&(p[N].stopPageInfo(),delete p[N].stopPageInfo);break;case"inPageLink":t=o(9).split("#")[1]||"",d=decodeURIComponent(t),(l=document.getElementById(d)||document.getElementsByName(d)[0])?(e=r(l),O(N,"Moving to in page link (#"+t+") at x: "+e.x+" y: "+e.y),m={x:e.x,y:e.y},s(),O(N,"--")):window.top!==window.self?window.parentIFrame?window.parentIFrame.moveToAnchor(t):O(N,"In page link #"+t+" not found and window.parentIFrame not found"):O(N,"In page link #"+t+" not found");break;case"reset":W(k);break;case"init":n(),c("onInit",k.iframe);break;default:0===Number(k.width)&&0===Number(k.height)?x("Unsupported message received ("+k.type+"), this is likely due to the iframe containing a later version of iframe-resizer than the parent page"):n()}var e,t,d,l,f}())):I(N,"Ignored: "+S)}function z(e,n,t){var o=null,i=null;if(p[e]){if("function"!=typeof(o=p[e][n]))throw new TypeError(n+" on iFrame["+e+"] is not a function");i=o(t)}return i}function N(e){var n=e.id;delete p[n]}function F(e){var n=e.id;if(!1!==z(n,"onClose",n)){O(n,"Removing iFrame: "+n);try{e.parentNode&&e.parentNode.removeChild(e)}catch(e){x(e)}z(n,"onClosed",n),O(n,"--"),N(e)}else O(n,"Close iframe cancelled by onClose event")}function R(e){null===m&&O(e,"Get page position: "+(m={x:window.pageXOffset!==r?window.pageXOffset:document.documentElement.scrollLeft,y:window.pageYOffset!==r?window.pageYOffset:document.documentElement.scrollTop}).x+","+m.y)}function C(e){null!==m&&(window.scrollTo(m.x,m.y),O(e,"Set page position: "+m.x+","+m.y),A())}function A(){m=null}function W(e){O(e.id,"Size reset requested by "+("init"===e.type?"host page":"iFrame")),R(e.id),L((function(){P(e),H("reset","reset",e.iframe,e.id)}),e,"reset")}function P(e){function n(n){c||"0"!==e[n]||(c=!0,O(o,"Hidden iFrame detected, creating visibility listener"),function(){function e(){Object.keys(p).forEach((function(e){!function(e){function n(n){return"0px"===(p[e]&&p[e].iframe.style[n])}p[e]&&null!==p[e].iframe.offsetParent&&(n("height")||n("width"))&&H("Visibility change","resize",p[e].iframe,e)}(e)}))}function n(n){O("window","Mutation observed: "+n[0].target+" "+n[0].type),q(e,16)}var t,o=v();o&&(t=document.querySelector("body"),new o(n).observe(t,{attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0}))}())}function t(t){!function(n){e.id?(e.iframe.style[n]=e[n]+"px",O(e.id,"IFrame ("+o+") "+n+" set to "+e[n]+"px")):O("undefined","messageData id not set")}(t),n(t)}var o=e.iframe.id;p[o]&&(p[o].sizeHeight&&t("height"),p[o].sizeWidth&&t("width"))}function L(e,n,t){t!==n.type&&g&&!window.jasmine?(O(n.id,"Requesting animation frame"),g(e)):e()}function H(e,n,t,o,i){var r,a=!1;o=o||t.id,p[o]&&(t&&"contentWindow"in t&&null!==t.contentWindow?(r=p[o]&&p[o].targetOrigin,O(o,"["+e+"] Sending msg to iframe["+o+"] ("+n+") targetOrigin: "+r),t.contentWindow.postMessage(l+n,r)):x(o,"["+e+"] IFrame("+o+") not found"),i&&p[o]&&p[o].warningTimeout&&(p[o].msgTimeout=setTimeout((function(){!p[o]||p[o].loaded||a||(a=!0,x(o,"IFrame has not responded within "+p[o].warningTimeout/1e3+" seconds. Check iFrameResizer.contentWindow.js has been loaded in iFrame. This message can be ignored if everything is working, or you can set the warningTimeout option to a higher value or zero to suppress this warning."))}),p[o].warningTimeout)))}function j(e){return e+":"+p[e].bodyMarginV1+":"+p[e].sizeWidth+":"+p[e].log+":"+p[e].interval+":"+p[e].enablePublicMethods+":"+p[e].autoResize+":"+p[e].bodyMargin+":"+p[e].heightCalculationMethod+":"+p[e].bodyBackground+":"+p[e].bodyPadding+":"+p[e].tolerance+":"+p[e].inPageLinks+":"+p[e].resizeFrom+":"+p[e].widthCalculationMethod+":"+p[e].mouseEvents}function B(e,n){function t(e){var n=e.split("Callback");if(2===n.length){var t="on"+n[0].charAt(0).toUpperCase()+n[0].slice(1);this[t]=this[e],delete this[e],x(a,"Deprecated: '"+e+"' has been renamed '"+t+"'. The old method will be removed in the next major version.")}}var o,i,a=function(t){var o;return""===t&&(e.id=(o=n&&n.id||y.id+s++,null!==document.getElementById(o)&&(o+=s++),t=o),u=(n||{}).log,O(t,"Added missing iframe ID: "+t+" ("+e.src+")")),t}(e.id);a in p&&"iFrameResizer"in e?x(a,"Ignored iFrame, already setup."):(function(n){var o;n=n||{},p[a]={firstRun:!0,iframe:e,remoteHost:e.src&&e.src.split("/").slice(0,3).join("/")},function(e){if("object"!=typeof e)throw new TypeError("Options is not an object")}(n),Object.keys(n).forEach(t,n),function(e){for(var n in y)Object.prototype.hasOwnProperty.call(y,n)&&(p[a][n]=Object.prototype.hasOwnProperty.call(e,n)?e[n]:y[n])}(n),p[a]&&(p[a].targetOrigin=!0===p[a].checkOrigin?""===(o=p[a].remoteHost)||null!==o.match(/^(about:blank|javascript:|file:\/\/)/)?"*":o:"*")}(n),function(){switch(O(a,"IFrame scrolling "+(p[a]&&p[a].scrolling?"enabled":"disabled")+" for "+a),e.style.overflow=!1===(p[a]&&p[a].scrolling)?"hidden":"auto",p[a]&&p[a].scrolling){case"omit":break;case!0:e.scrolling="yes";break;case!1:e.scrolling="no";break;default:e.scrolling=p[a]?p[a].scrolling:"no"}}(),function(){function n(n){var t=p[a][n];1/0!==t&&0!==t&&(e.style[n]="number"==typeof t?t+"px":t,O(a,"Set "+n+" = "+e.style[n]))}function t(e){if(p[a]["min"+e]>p[a]["max"+e])throw new Error("Value for min"+e+" can not be greater than max"+e)}t("Height"),t("Width"),n("maxHeight"),n("minHeight"),n("maxWidth"),n("minWidth")}(),"number"!=typeof(p[a]&&p[a].bodyMargin)&&"0"!==(p[a]&&p[a].bodyMargin)||(p[a].bodyMarginV1=p[a].bodyMargin,p[a].bodyMargin=p[a].bodyMargin+"px"),o=j(a),(i=v())&&function(n){e.parentNode&&new n((function(n){n.forEach((function(n){Array.prototype.slice.call(n.removedNodes).forEach((function(n){n===e&&F(e)}))}))})).observe(e.parentNode,{childList:!0})}(i),T(e,"load",(function(){var n,t;H("iFrame.onload",o,e,r,!0),n=p[a]&&p[a].firstRun,t=p[a]&&p[a].heightCalculationMethod in h,!n&&t&&W({iframe:e,height:0,width:0,type:"init"})})),H("init",o,e,r,!0),p[a]&&(p[a].iframe.iFrameResizer={close:F.bind(null,p[a].iframe),removeListeners:N.bind(null,p[a].iframe),resize:H.bind(null,"Window resize","resize",p[a].iframe),moveToAnchor:function(e){H("Move to anchor","moveToAnchor:"+e,p[a].iframe,a)},sendMessage:function(e){H("Send Message","message:"+(e=JSON.stringify(e)),p[a].iframe,a)}}))}function q(e,n){null===w&&(w=setTimeout((function(){w=null,e()}),n))}function D(){"hidden"!==document.visibilityState&&(O("document","Trigger event: Visiblity change"),q((function(){U("Tab Visable","resize")}),16))}function U(e,n){Object.keys(p).forEach((function(t){(function(e){return p[e]&&"parent"===p[e].resizeFrom&&p[e].autoResize&&!p[e].firstRun})(t)&&H(e,n,p[t].iframe,t)}))}function V(){function e(e,t){t&&(function(){if(!t.tagName)throw new TypeError("Object is not a valid DOM element");if("IFRAME"!==t.tagName.toUpperCase())throw new TypeError("Expected <IFRAME> tag, found <"+t.tagName+">")}(),B(t,e),n.push(t))}var n;return function(){var e,n=["moz","webkit","o","ms"];for(e=0;e<n.length&&!g;e+=1)g=window[n[e]+"RequestAnimationFrame"];g?g=g.bind(window):O("setup","RequestAnimationFrame not supported")}(),T(window,"message",k),T(window,"resize",(function(){O("window","Trigger event: resize"),q((function(){U("Window resize","resize")}),16)})),T(document,"visibilitychange",D),T(document,"-webkit-visibilitychange",D),function(t,o){switch(n=[],function(e){e&&e.enablePublicMethods&&x("enablePublicMethods option has been removed, public methods are now always available in the iFrame")}(t),typeof o){case"undefined":case"string":Array.prototype.forEach.call(document.querySelectorAll(o||"iframe"),e.bind(r,t));break;case"object":e(t,o);break;default:throw new TypeError("Unexpected data type ("+typeof o+")")}return n}}}()},457:(e,n,t)=>{t(702);t(402)}},n={};function t(o){var i=n[o];if(void 0!==i)return i.exports;var r=n[o]={exports:{}};return e[o](r,r.exports,t),r.exports}t.d=(e,n)=>{for(var o in n)t.o(n,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:n[o]})},t.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),(()=>{"use strict";t(303)})()})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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T0FBTzRiLElBeDNDWixJLGNDWGtCLEVBQVEsS0FJM0IsU0NISUksRUFBMkIsR0FHL0IsU0FBU0MsRUFBb0JDLEdBRTVCLElBQUlDLEVBQWVILEVBQXlCRSxHQUM1QyxRQUFxQnBlLElBQWpCcWUsRUFDSCxPQUFPQSxFQUFhalEsUUFHckIsSUFBSUQsRUFBUytQLEVBQXlCRSxHQUFZLENBR2pEaFEsUUFBUyxJQU9WLE9BSEFrUSxFQUFvQkYsR0FBVWpRLEVBQVFBLEVBQU9DLFFBQVMrUCxHQUcvQ2hRLEVBQU9DLFFDcEJmK1AsRUFBb0JJLEVBQUksQ0FBQ25RLEVBQVNvUSxLQUNqQyxJQUFJLElBQUkxUCxLQUFPMFAsRUFDWEwsRUFBb0JNLEVBQUVELEVBQVkxUCxLQUFTcVAsRUFBb0JNLEVBQUVyUSxFQUFTVSxJQUM1RXBMLE9BQU9nYixlQUFldFEsRUFBU1UsRUFBSyxDQUFFNlAsWUFBWSxFQUFNOWEsSUFBSzJhLEVBQVcxUCxNQ0ozRXFQLEVBQW9CTSxFQUFJLENBQUNHLEVBQUs1TSxJQUFVdE8sT0FBT3VKLFVBQVVxUCxlQUFlcFAsS0FBSzBSLEVBQUs1TSxHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vd2F0Y2hfYmV0Ly4vbm9kZV9tb2R1bGVzL2lmcmFtZS1yZXNpemVyL2luZGV4LmpzIiwid2VicGFjazovL3dhdGNoX2JldC8uL25vZGVfbW9kdWxlcy9pZnJhbWUtcmVzaXplci9qcy9pZnJhbWVSZXNpemVyLmNvbnRlbnRXaW5kb3cuanMiLCJ3ZWJwYWNrOi8vd2F0Y2hfYmV0Ly4vbm9kZV9tb2R1bGVzL2lmcmFtZS1yZXNpemVyL2pzL2lmcmFtZVJlc2l6ZXIuanMiLCJ3ZWJwYWNrOi8vd2F0Y2hfYmV0Ly4vbm9kZV9tb2R1bGVzL2lmcmFtZS1yZXNpemVyL2pzL2luZGV4LmpzIiwid2VicGFjazovL3dhdGNoX2JldC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly93YXRjaF9iZXQvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3dhdGNoX2JldC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9qcycpXG4iLCIvKlxuICogRmlsZTogaWZyYW1lUmVzaXplci5jb250ZW50V2luZG93LmpzXG4gKiBEZXNjOiBJbmNsdWRlIHRoaXMgZmlsZSBpbiBhbnkgcGFnZSBiZWluZyBsb2FkZWQgaW50byBhbiBpZnJhbWVcbiAqICAgICAgIHRvIGZvcmNlIHRoZSBpZnJhbWUgdG8gcmVzaXplIHRvIHRoZSBjb250ZW50IHNpemUuXG4gKiBSZXF1aXJlczogaWZyYW1lUmVzaXplci5qcyBvbiBob3N0IHBhZ2UuXG4gKiBEb2M6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZGpicmFkc2hhdy9pZnJhbWUtcmVzaXplclxuICogQXV0aG9yOiBEYXZpZCBKLiBCcmFkc2hhdyAtIGRhdmVAYnJhZHNoYXcubmV0XG4gKlxuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL2NvZ25pdGl2ZS1jb21wbGV4aXR5LCBuby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lc1xuOyhmdW5jdGlvbiAodW5kZWZpbmVkKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIC8vIGRvbid0IHJ1biBmb3Igc2VydmVyIHNpZGUgcmVuZGVyXG5cbiAgdmFyIGF1dG9SZXNpemUgPSB0cnVlLFxuICAgIGJhc2UgPSAxMCxcbiAgICBib2R5QmFja2dyb3VuZCA9ICcnLFxuICAgIGJvZHlNYXJnaW4gPSAwLFxuICAgIGJvZHlNYXJnaW5TdHIgPSAnJyxcbiAgICBib2R5T2JzZXJ2ZXIgPSBudWxsLFxuICAgIGJvZHlQYWRkaW5nID0gJycsXG4gICAgY2FsY3VsYXRlV2lkdGggPSBmYWxzZSxcbiAgICBkb3VibGVFdmVudExpc3QgPSB7IHJlc2l6ZTogMSwgY2xpY2s6IDEgfSxcbiAgICBldmVudENhbmNlbFRpbWVyID0gMTI4LFxuICAgIGZpcnN0UnVuID0gdHJ1ZSxcbiAgICBoZWlnaHQgPSAxLFxuICAgIGhlaWdodENhbGNNb2RlRGVmYXVsdCA9ICdib2R5T2Zmc2V0JyxcbiAgICBoZWlnaHRDYWxjTW9kZSA9IGhlaWdodENhbGNNb2RlRGVmYXVsdCxcbiAgICBpbml0TG9jayA9IHRydWUsXG4gICAgaW5pdE1zZyA9ICcnLFxuICAgIGluUGFnZUxpbmtzID0ge30sXG4gICAgaW50ZXJ2YWwgPSAzMixcbiAgICBpbnRlcnZhbFRpbWVyID0gbnVsbCxcbiAgICBsb2dnaW5nID0gZmFsc2UsXG4gICAgbW91c2VFdmVudHMgPSBmYWxzZSxcbiAgICBtc2dJRCA9ICdbaUZyYW1lU2l6ZXJdJywgLy8gTXVzdCBtYXRjaCBob3N0IHBhZ2UgbXNnIElEXG4gICAgbXNnSWRMZW4gPSBtc2dJRC5sZW5ndGgsXG4gICAgbXlJRCA9ICcnLFxuICAgIHJlc2V0UmVxdWlyZWRNZXRob2RzID0ge1xuICAgICAgbWF4OiAxLFxuICAgICAgbWluOiAxLFxuICAgICAgYm9keVNjcm9sbDogMSxcbiAgICAgIGRvY3VtZW50RWxlbWVudFNjcm9sbDogMVxuICAgIH0sXG4gICAgcmVzaXplRnJvbSA9ICdjaGlsZCcsXG4gICAgc2VuZFBlcm1pdCA9IHRydWUsXG4gICAgdGFyZ2V0ID0gd2luZG93LnBhcmVudCxcbiAgICB0YXJnZXRPcmlnaW5EZWZhdWx0ID0gJyonLFxuICAgIHRvbGVyYW5jZSA9IDAsXG4gICAgdHJpZ2dlckxvY2tlZCA9IGZhbHNlLFxuICAgIHRyaWdnZXJMb2NrZWRUaW1lciA9IG51bGwsXG4gICAgdGhyb3R0bGVkVGltZXIgPSAxNixcbiAgICB3aWR0aCA9IDEsXG4gICAgd2lkdGhDYWxjTW9kZURlZmF1bHQgPSAnc2Nyb2xsJyxcbiAgICB3aWR0aENhbGNNb2RlID0gd2lkdGhDYWxjTW9kZURlZmF1bHQsXG4gICAgd2luID0gd2luZG93LFxuICAgIG9uTWVzc2FnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oJ29uTWVzc2FnZSBmdW5jdGlvbiBub3QgZGVmaW5lZCcpXG4gICAgfSxcbiAgICBvblJlYWR5ID0gZnVuY3Rpb24gKCkge30sXG4gICAgb25QYWdlSW5mbyA9IGZ1bmN0aW9uICgpIHt9LFxuICAgIGN1c3RvbUNhbGNNZXRob2RzID0ge1xuICAgICAgaGVpZ2h0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhcm4oJ0N1c3RvbSBoZWlnaHQgY2FsY3VsYXRpb24gZnVuY3Rpb24gbm90IGRlZmluZWQnKVxuICAgICAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEhlaWdodFxuICAgICAgfSxcbiAgICAgIHdpZHRoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhcm4oJ0N1c3RvbSB3aWR0aCBjYWxjdWxhdGlvbiBmdW5jdGlvbiBub3QgZGVmaW5lZCcpXG4gICAgICAgIHJldHVybiBkb2N1bWVudC5ib2R5LnNjcm9sbFdpZHRoXG4gICAgICB9XG4gICAgfSxcbiAgICBldmVudEhhbmRsZXJzQnlOYW1lID0ge30sXG4gICAgcGFzc2l2ZVN1cHBvcnRlZCA9IGZhbHNlXG5cbiAgZnVuY3Rpb24gbm9vcCgpIHt9XG5cbiAgdHJ5IHtcbiAgICB2YXIgb3B0aW9ucyA9IE9iamVjdC5jcmVhdGUoXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgcGFzc2l2ZToge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcGFzc2l2ZVN1cHBvcnRlZCA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBub29wLCBvcHRpb25zKVxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0ZXN0Jywgbm9vcCwgb3B0aW9ucylcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvKiAqL1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihlbCwgZXZ0LCBmdW5jLCBvcHRpb25zKSB7XG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihldnQsIGZ1bmMsIHBhc3NpdmVTdXBwb3J0ZWQgPyBvcHRpb25zIHx8IHt9IDogZmFsc2UpXG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKGVsLCBldnQsIGZ1bmMpIHtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2dCwgZnVuYywgZmFsc2UpXG4gIH1cblxuICBmdW5jdGlvbiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKVxuICB9XG5cbiAgLy8gQmFzZWQgb24gdW5kZXJzY29yZS5qc1xuICBmdW5jdGlvbiB0aHJvdHRsZShmdW5jKSB7XG4gICAgdmFyIGNvbnRleHQsXG4gICAgICBhcmdzLFxuICAgICAgcmVzdWx0LFxuICAgICAgdGltZW91dCA9IG51bGwsXG4gICAgICBwcmV2aW91cyA9IDAsXG4gICAgICBsYXRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcHJldmlvdXMgPSBEYXRlLm5vdygpXG4gICAgICAgIHRpbWVvdXQgPSBudWxsXG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncylcbiAgICAgICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW11bHRpLWFzc2lnblxuICAgICAgICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG5vdyA9IERhdGUubm93KClcblxuICAgICAgaWYgKCFwcmV2aW91cykge1xuICAgICAgICBwcmV2aW91cyA9IG5vd1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVtYWluaW5nID0gdGhyb3R0bGVkVGltZXIgLSAobm93IC0gcHJldmlvdXMpXG5cbiAgICAgIGNvbnRleHQgPSB0aGlzXG4gICAgICBhcmdzID0gYXJndW1lbnRzXG5cbiAgICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiB0aHJvdHRsZWRUaW1lcikge1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KVxuICAgICAgICAgIHRpbWVvdXQgPSBudWxsXG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91cyA9IG5vd1xuICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpXG5cbiAgICAgICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW11bHRpLWFzc2lnblxuICAgICAgICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCF0aW1lb3V0KSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRMb2dNc2cobXNnKSB7XG4gICAgcmV0dXJuIG1zZ0lEICsgJ1snICsgbXlJRCArICddICcgKyBtc2dcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvZyhtc2cpIHtcbiAgICBpZiAobG9nZ2luZyAmJiAnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdy5jb25zb2xlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5sb2coZm9ybWF0TG9nTXNnKG1zZykpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gd2Fybihtc2cpIHtcbiAgICBpZiAoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cuY29uc29sZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2Fybihmb3JtYXRMb2dNc2cobXNnKSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0KCkge1xuICAgIHJlYWREYXRhRnJvbVBhcmVudCgpXG4gICAgbG9nKCdJbml0aWFsaXNpbmcgaUZyYW1lICgnICsgd2luZG93LmxvY2F0aW9uLmhyZWYgKyAnKScpXG4gICAgcmVhZERhdGFGcm9tUGFnZSgpXG4gICAgc2V0TWFyZ2luKClcbiAgICBzZXRCb2R5U3R5bGUoJ2JhY2tncm91bmQnLCBib2R5QmFja2dyb3VuZClcbiAgICBzZXRCb2R5U3R5bGUoJ3BhZGRpbmcnLCBib2R5UGFkZGluZylcbiAgICBpbmplY3RDbGVhckZpeEludG9Cb2R5RWxlbWVudCgpXG4gICAgY2hlY2tIZWlnaHRNb2RlKClcbiAgICBjaGVja1dpZHRoTW9kZSgpXG4gICAgc3RvcEluZmluaXRlUmVzaXppbmdPZklGcmFtZSgpXG4gICAgc2V0dXBQdWJsaWNNZXRob2RzKClcbiAgICBzZXR1cE1vdXNlRXZlbnRzKClcbiAgICBzdGFydEV2ZW50TGlzdGVuZXJzKClcbiAgICBpblBhZ2VMaW5rcyA9IHNldHVwSW5QYWdlTGlua3MoKVxuICAgIHNlbmRTaXplKCdpbml0JywgJ0luaXQgbWVzc2FnZSBmcm9tIGhvc3QgcGFnZScpXG4gICAgb25SZWFkeSgpXG4gIH1cblxuICBmdW5jdGlvbiByZWFkRGF0YUZyb21QYXJlbnQoKSB7XG4gICAgZnVuY3Rpb24gc3RyQm9vbChzdHIpIHtcbiAgICAgIHJldHVybiAndHJ1ZScgPT09IHN0clxuICAgIH1cblxuICAgIHZhciBkYXRhID0gaW5pdE1zZy5zdWJzdHIobXNnSWRMZW4pLnNwbGl0KCc6JylcblxuICAgIG15SUQgPSBkYXRhWzBdXG4gICAgYm9keU1hcmdpbiA9IHVuZGVmaW5lZCAhPT0gZGF0YVsxXSA/IE51bWJlcihkYXRhWzFdKSA6IGJvZHlNYXJnaW4gLy8gRm9yIFYxIGNvbXBhdGliaWxpdHlcbiAgICBjYWxjdWxhdGVXaWR0aCA9IHVuZGVmaW5lZCAhPT0gZGF0YVsyXSA/IHN0ckJvb2woZGF0YVsyXSkgOiBjYWxjdWxhdGVXaWR0aFxuICAgIGxvZ2dpbmcgPSB1bmRlZmluZWQgIT09IGRhdGFbM10gPyBzdHJCb29sKGRhdGFbM10pIDogbG9nZ2luZ1xuICAgIGludGVydmFsID0gdW5kZWZpbmVkICE9PSBkYXRhWzRdID8gTnVtYmVyKGRhdGFbNF0pIDogaW50ZXJ2YWxcbiAgICBhdXRvUmVzaXplID0gdW5kZWZpbmVkICE9PSBkYXRhWzZdID8gc3RyQm9vbChkYXRhWzZdKSA6IGF1dG9SZXNpemVcbiAgICBib2R5TWFyZ2luU3RyID0gZGF0YVs3XVxuICAgIGhlaWdodENhbGNNb2RlID0gdW5kZWZpbmVkICE9PSBkYXRhWzhdID8gZGF0YVs4XSA6IGhlaWdodENhbGNNb2RlXG4gICAgYm9keUJhY2tncm91bmQgPSBkYXRhWzldXG4gICAgYm9keVBhZGRpbmcgPSBkYXRhWzEwXVxuICAgIHRvbGVyYW5jZSA9IHVuZGVmaW5lZCAhPT0gZGF0YVsxMV0gPyBOdW1iZXIoZGF0YVsxMV0pIDogdG9sZXJhbmNlXG4gICAgaW5QYWdlTGlua3MuZW5hYmxlID0gdW5kZWZpbmVkICE9PSBkYXRhWzEyXSA/IHN0ckJvb2woZGF0YVsxMl0pIDogZmFsc2VcbiAgICByZXNpemVGcm9tID0gdW5kZWZpbmVkICE9PSBkYXRhWzEzXSA/IGRhdGFbMTNdIDogcmVzaXplRnJvbVxuICAgIHdpZHRoQ2FsY01vZGUgPSB1bmRlZmluZWQgIT09IGRhdGFbMTRdID8gZGF0YVsxNF0gOiB3aWR0aENhbGNNb2RlXG4gICAgbW91c2VFdmVudHMgPSB1bmRlZmluZWQgIT09IGRhdGFbMTVdID8gQm9vbGVhbihkYXRhWzE1XSkgOiBtb3VzZUV2ZW50c1xuICB9XG5cbiAgZnVuY3Rpb24gZGVwcmljYXRlKGtleSkge1xuICAgIHZhciBzcGxpdE5hbWUgPSBrZXkuc3BsaXQoJ0NhbGxiYWNrJylcblxuICAgIGlmIChzcGxpdE5hbWUubGVuZ3RoID09PSAyKSB7XG4gICAgICB2YXIgbmFtZSA9XG4gICAgICAgICdvbicgKyBzcGxpdE5hbWVbMF0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzcGxpdE5hbWVbMF0uc2xpY2UoMSlcbiAgICAgIHRoaXNbbmFtZV0gPSB0aGlzW2tleV1cbiAgICAgIGRlbGV0ZSB0aGlzW2tleV1cbiAgICAgIHdhcm4oXG4gICAgICAgIFwiRGVwcmVjYXRlZDogJ1wiICtcbiAgICAgICAgICBrZXkgK1xuICAgICAgICAgIFwiJyBoYXMgYmVlbiByZW5hbWVkICdcIiArXG4gICAgICAgICAgbmFtZSArXG4gICAgICAgICAgXCInLiBUaGUgb2xkIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbi5cIlxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWREYXRhRnJvbVBhZ2UoKSB7XG4gICAgZnVuY3Rpb24gcmVhZERhdGEoKSB7XG4gICAgICB2YXIgZGF0YSA9IHdpbmRvdy5pRnJhbWVSZXNpemVyXG5cbiAgICAgIGxvZygnUmVhZGluZyBkYXRhIGZyb20gcGFnZTogJyArIEpTT04uc3RyaW5naWZ5KGRhdGEpKVxuICAgICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaChkZXByaWNhdGUsIGRhdGEpXG5cbiAgICAgIG9uTWVzc2FnZSA9ICdvbk1lc3NhZ2UnIGluIGRhdGEgPyBkYXRhLm9uTWVzc2FnZSA6IG9uTWVzc2FnZVxuICAgICAgb25SZWFkeSA9ICdvblJlYWR5JyBpbiBkYXRhID8gZGF0YS5vblJlYWR5IDogb25SZWFkeVxuICAgICAgdGFyZ2V0T3JpZ2luRGVmYXVsdCA9XG4gICAgICAgICd0YXJnZXRPcmlnaW4nIGluIGRhdGEgPyBkYXRhLnRhcmdldE9yaWdpbiA6IHRhcmdldE9yaWdpbkRlZmF1bHRcbiAgICAgIGhlaWdodENhbGNNb2RlID1cbiAgICAgICAgJ2hlaWdodENhbGN1bGF0aW9uTWV0aG9kJyBpbiBkYXRhXG4gICAgICAgICAgPyBkYXRhLmhlaWdodENhbGN1bGF0aW9uTWV0aG9kXG4gICAgICAgICAgOiBoZWlnaHRDYWxjTW9kZVxuICAgICAgd2lkdGhDYWxjTW9kZSA9XG4gICAgICAgICd3aWR0aENhbGN1bGF0aW9uTWV0aG9kJyBpbiBkYXRhXG4gICAgICAgICAgPyBkYXRhLndpZHRoQ2FsY3VsYXRpb25NZXRob2RcbiAgICAgICAgICA6IHdpZHRoQ2FsY01vZGVcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXR1cEN1c3RvbUNhbGNNZXRob2RzKGNhbGNNb2RlLCBjYWxjRnVuYykge1xuICAgICAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBjYWxjTW9kZSkge1xuICAgICAgICBsb2coJ1NldHVwIGN1c3RvbSAnICsgY2FsY0Z1bmMgKyAnQ2FsY01ldGhvZCcpXG4gICAgICAgIGN1c3RvbUNhbGNNZXRob2RzW2NhbGNGdW5jXSA9IGNhbGNNb2RlXG4gICAgICAgIGNhbGNNb2RlID0gJ2N1c3RvbSdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNhbGNNb2RlXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgJ2lGcmFtZVJlc2l6ZXInIGluIHdpbmRvdyAmJlxuICAgICAgT2JqZWN0ID09PSB3aW5kb3cuaUZyYW1lUmVzaXplci5jb25zdHJ1Y3RvclxuICAgICkge1xuICAgICAgcmVhZERhdGEoKVxuICAgICAgaGVpZ2h0Q2FsY01vZGUgPSBzZXR1cEN1c3RvbUNhbGNNZXRob2RzKGhlaWdodENhbGNNb2RlLCAnaGVpZ2h0JylcbiAgICAgIHdpZHRoQ2FsY01vZGUgPSBzZXR1cEN1c3RvbUNhbGNNZXRob2RzKHdpZHRoQ2FsY01vZGUsICd3aWR0aCcpXG4gICAgfVxuXG4gICAgbG9nKCdUYXJnZXRPcmlnaW4gZm9yIHBhcmVudCBzZXQgdG86ICcgKyB0YXJnZXRPcmlnaW5EZWZhdWx0KVxuICB9XG5cbiAgZnVuY3Rpb24gY2hrQ1NTKGF0dHIsIHZhbHVlKSB7XG4gICAgaWYgKC0xICE9PSB2YWx1ZS5pbmRleE9mKCctJykpIHtcbiAgICAgIHdhcm4oJ05lZ2F0aXZlIENTUyB2YWx1ZSBpZ25vcmVkIGZvciAnICsgYXR0cilcbiAgICAgIHZhbHVlID0gJydcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICBmdW5jdGlvbiBzZXRCb2R5U3R5bGUoYXR0ciwgdmFsdWUpIHtcbiAgICBpZiAodW5kZWZpbmVkICE9PSB2YWx1ZSAmJiAnJyAhPT0gdmFsdWUgJiYgJ251bGwnICE9PSB2YWx1ZSkge1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZVthdHRyXSA9IHZhbHVlXG4gICAgICBsb2coJ0JvZHkgJyArIGF0dHIgKyAnIHNldCB0byBcIicgKyB2YWx1ZSArICdcIicpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0TWFyZ2luKCkge1xuICAgIC8vIElmIGNhbGxlZCB2aWEgVjEgc2NyaXB0LCBjb252ZXJ0IGJvZHlNYXJnaW4gZnJvbSBpbnQgdG8gc3RyXG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gYm9keU1hcmdpblN0cikge1xuICAgICAgYm9keU1hcmdpblN0ciA9IGJvZHlNYXJnaW4gKyAncHgnXG4gICAgfVxuXG4gICAgc2V0Qm9keVN0eWxlKCdtYXJnaW4nLCBjaGtDU1MoJ21hcmdpbicsIGJvZHlNYXJnaW5TdHIpKVxuICB9XG5cbiAgZnVuY3Rpb24gc3RvcEluZmluaXRlUmVzaXppbmdPZklGcmFtZSgpIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJydcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmhlaWdodCA9ICcnXG4gICAgbG9nKCdIVE1MICYgYm9keSBoZWlnaHQgc2V0IHRvIFwiYXV0b1wiJylcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hbmFnZVRyaWdnZXJFdmVudChvcHRpb25zKSB7XG4gICAgdmFyIGxpc3RlbmVyID0ge1xuICAgICAgYWRkOiBmdW5jdGlvbiAoZXZlbnROYW1lKSB7XG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZUV2ZW50KCkge1xuICAgICAgICAgIHNlbmRTaXplKG9wdGlvbnMuZXZlbnROYW1lLCBvcHRpb25zLmV2ZW50VHlwZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50SGFuZGxlcnNCeU5hbWVbZXZlbnROYW1lXSA9IGhhbmRsZUV2ZW50XG5cbiAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csIGV2ZW50TmFtZSwgaGFuZGxlRXZlbnQsIHsgcGFzc2l2ZTogdHJ1ZSB9KVxuICAgICAgfSxcbiAgICAgIHJlbW92ZTogZnVuY3Rpb24gKGV2ZW50TmFtZSkge1xuICAgICAgICB2YXIgaGFuZGxlRXZlbnQgPSBldmVudEhhbmRsZXJzQnlOYW1lW2V2ZW50TmFtZV1cbiAgICAgICAgZGVsZXRlIGV2ZW50SGFuZGxlcnNCeU5hbWVbZXZlbnROYW1lXVxuXG4gICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIod2luZG93LCBldmVudE5hbWUsIGhhbmRsZUV2ZW50KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmV2ZW50TmFtZXMgJiYgQXJyYXkucHJvdG90eXBlLm1hcCkge1xuICAgICAgb3B0aW9ucy5ldmVudE5hbWUgPSBvcHRpb25zLmV2ZW50TmFtZXNbMF1cbiAgICAgIG9wdGlvbnMuZXZlbnROYW1lcy5tYXAobGlzdGVuZXJbb3B0aW9ucy5tZXRob2RdKVxuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0ZW5lcltvcHRpb25zLm1ldGhvZF0ob3B0aW9ucy5ldmVudE5hbWUpXG4gICAgfVxuXG4gICAgbG9nKFxuICAgICAgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKG9wdGlvbnMubWV0aG9kKSArXG4gICAgICAgICcgZXZlbnQgbGlzdGVuZXI6ICcgK1xuICAgICAgICBvcHRpb25zLmV2ZW50VHlwZVxuICAgIClcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hbmFnZUV2ZW50TGlzdGVuZXJzKG1ldGhvZCkge1xuICAgIG1hbmFnZVRyaWdnZXJFdmVudCh7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGV2ZW50VHlwZTogJ0FuaW1hdGlvbiBTdGFydCcsXG4gICAgICBldmVudE5hbWVzOiBbJ2FuaW1hdGlvbnN0YXJ0JywgJ3dlYmtpdEFuaW1hdGlvblN0YXJ0J11cbiAgICB9KVxuICAgIG1hbmFnZVRyaWdnZXJFdmVudCh7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGV2ZW50VHlwZTogJ0FuaW1hdGlvbiBJdGVyYXRpb24nLFxuICAgICAgZXZlbnROYW1lczogWydhbmltYXRpb25pdGVyYXRpb24nLCAnd2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uJ11cbiAgICB9KVxuICAgIG1hbmFnZVRyaWdnZXJFdmVudCh7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGV2ZW50VHlwZTogJ0FuaW1hdGlvbiBFbmQnLFxuICAgICAgZXZlbnROYW1lczogWydhbmltYXRpb25lbmQnLCAnd2Via2l0QW5pbWF0aW9uRW5kJ11cbiAgICB9KVxuICAgIG1hbmFnZVRyaWdnZXJFdmVudCh7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGV2ZW50VHlwZTogJ0lucHV0JyxcbiAgICAgIGV2ZW50TmFtZTogJ2lucHV0J1xuICAgIH0pXG4gICAgbWFuYWdlVHJpZ2dlckV2ZW50KHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgZXZlbnRUeXBlOiAnTW91c2UgVXAnLFxuICAgICAgZXZlbnROYW1lOiAnbW91c2V1cCdcbiAgICB9KVxuICAgIG1hbmFnZVRyaWdnZXJFdmVudCh7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGV2ZW50VHlwZTogJ01vdXNlIERvd24nLFxuICAgICAgZXZlbnROYW1lOiAnbW91c2Vkb3duJ1xuICAgIH0pXG4gICAgbWFuYWdlVHJpZ2dlckV2ZW50KHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgZXZlbnRUeXBlOiAnT3JpZW50YXRpb24gQ2hhbmdlJyxcbiAgICAgIGV2ZW50TmFtZTogJ29yaWVudGF0aW9uY2hhbmdlJ1xuICAgIH0pXG4gICAgbWFuYWdlVHJpZ2dlckV2ZW50KHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgZXZlbnRUeXBlOiAnUHJpbnQnLFxuICAgICAgZXZlbnROYW1lOiBbJ2FmdGVycHJpbnQnLCAnYmVmb3JlcHJpbnQnXVxuICAgIH0pXG4gICAgbWFuYWdlVHJpZ2dlckV2ZW50KHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgZXZlbnRUeXBlOiAnUmVhZHkgU3RhdGUgQ2hhbmdlJyxcbiAgICAgIGV2ZW50TmFtZTogJ3JlYWR5c3RhdGVjaGFuZ2UnXG4gICAgfSlcbiAgICBtYW5hZ2VUcmlnZ2VyRXZlbnQoe1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBldmVudFR5cGU6ICdUb3VjaCBTdGFydCcsXG4gICAgICBldmVudE5hbWU6ICd0b3VjaHN0YXJ0J1xuICAgIH0pXG4gICAgbWFuYWdlVHJpZ2dlckV2ZW50KHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgZXZlbnRUeXBlOiAnVG91Y2ggRW5kJyxcbiAgICAgIGV2ZW50TmFtZTogJ3RvdWNoZW5kJ1xuICAgIH0pXG4gICAgbWFuYWdlVHJpZ2dlckV2ZW50KHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgZXZlbnRUeXBlOiAnVG91Y2ggQ2FuY2VsJyxcbiAgICAgIGV2ZW50TmFtZTogJ3RvdWNoY2FuY2VsJ1xuICAgIH0pXG4gICAgbWFuYWdlVHJpZ2dlckV2ZW50KHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgZXZlbnRUeXBlOiAnVHJhbnNpdGlvbiBTdGFydCcsXG4gICAgICBldmVudE5hbWVzOiBbXG4gICAgICAgICd0cmFuc2l0aW9uc3RhcnQnLFxuICAgICAgICAnd2Via2l0VHJhbnNpdGlvblN0YXJ0JyxcbiAgICAgICAgJ01TVHJhbnNpdGlvblN0YXJ0JyxcbiAgICAgICAgJ29UcmFuc2l0aW9uU3RhcnQnLFxuICAgICAgICAnb3RyYW5zaXRpb25zdGFydCdcbiAgICAgIF1cbiAgICB9KVxuICAgIG1hbmFnZVRyaWdnZXJFdmVudCh7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGV2ZW50VHlwZTogJ1RyYW5zaXRpb24gSXRlcmF0aW9uJyxcbiAgICAgIGV2ZW50TmFtZXM6IFtcbiAgICAgICAgJ3RyYW5zaXRpb25pdGVyYXRpb24nLFxuICAgICAgICAnd2Via2l0VHJhbnNpdGlvbkl0ZXJhdGlvbicsXG4gICAgICAgICdNU1RyYW5zaXRpb25JdGVyYXRpb24nLFxuICAgICAgICAnb1RyYW5zaXRpb25JdGVyYXRpb24nLFxuICAgICAgICAnb3RyYW5zaXRpb25pdGVyYXRpb24nXG4gICAgICBdXG4gICAgfSlcbiAgICBtYW5hZ2VUcmlnZ2VyRXZlbnQoe1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBldmVudFR5cGU6ICdUcmFuc2l0aW9uIEVuZCcsXG4gICAgICBldmVudE5hbWVzOiBbXG4gICAgICAgICd0cmFuc2l0aW9uZW5kJyxcbiAgICAgICAgJ3dlYmtpdFRyYW5zaXRpb25FbmQnLFxuICAgICAgICAnTVNUcmFuc2l0aW9uRW5kJyxcbiAgICAgICAgJ29UcmFuc2l0aW9uRW5kJyxcbiAgICAgICAgJ290cmFuc2l0aW9uZW5kJ1xuICAgICAgXVxuICAgIH0pXG4gICAgaWYgKCdjaGlsZCcgPT09IHJlc2l6ZUZyb20pIHtcbiAgICAgIG1hbmFnZVRyaWdnZXJFdmVudCh7XG4gICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICBldmVudFR5cGU6ICdJRnJhbWUgUmVzaXplZCcsXG4gICAgICAgIGV2ZW50TmFtZTogJ3Jlc2l6ZSdcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tDYWxjTW9kZShjYWxjTW9kZSwgY2FsY01vZGVEZWZhdWx0LCBtb2RlcywgdHlwZSkge1xuICAgIGlmIChjYWxjTW9kZURlZmF1bHQgIT09IGNhbGNNb2RlKSB7XG4gICAgICBpZiAoIShjYWxjTW9kZSBpbiBtb2RlcykpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBjYWxjTW9kZSArICcgaXMgbm90IGEgdmFsaWQgb3B0aW9uIGZvciAnICsgdHlwZSArICdDYWxjdWxhdGlvbk1ldGhvZC4nXG4gICAgICAgIClcbiAgICAgICAgY2FsY01vZGUgPSBjYWxjTW9kZURlZmF1bHRcbiAgICAgIH1cbiAgICAgIGxvZyh0eXBlICsgJyBjYWxjdWxhdGlvbiBtZXRob2Qgc2V0IHRvIFwiJyArIGNhbGNNb2RlICsgJ1wiJylcbiAgICB9XG5cbiAgICByZXR1cm4gY2FsY01vZGVcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrSGVpZ2h0TW9kZSgpIHtcbiAgICBoZWlnaHRDYWxjTW9kZSA9IGNoZWNrQ2FsY01vZGUoXG4gICAgICBoZWlnaHRDYWxjTW9kZSxcbiAgICAgIGhlaWdodENhbGNNb2RlRGVmYXVsdCxcbiAgICAgIGdldEhlaWdodCxcbiAgICAgICdoZWlnaHQnXG4gICAgKVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tXaWR0aE1vZGUoKSB7XG4gICAgd2lkdGhDYWxjTW9kZSA9IGNoZWNrQ2FsY01vZGUoXG4gICAgICB3aWR0aENhbGNNb2RlLFxuICAgICAgd2lkdGhDYWxjTW9kZURlZmF1bHQsXG4gICAgICBnZXRXaWR0aCxcbiAgICAgICd3aWR0aCdcbiAgICApXG4gIH1cblxuICBmdW5jdGlvbiBzdGFydEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGlmICh0cnVlID09PSBhdXRvUmVzaXplKSB7XG4gICAgICBtYW5hZ2VFdmVudExpc3RlbmVycygnYWRkJylcbiAgICAgIHNldHVwTXV0YXRpb25PYnNlcnZlcigpXG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZygnQXV0byBSZXNpemUgZGlzYWJsZWQnKVxuICAgIH1cbiAgfVxuXG4gIC8vICAgZnVuY3Rpb24gc3RvcE1zZ3NUb1BhcmVudCgpIHtcbiAgLy8gICAgIGxvZygnRGlzYWJsZSBvdXRnb2luZyBtZXNzYWdlcycpXG4gIC8vICAgICBzZW5kUGVybWl0ID0gZmFsc2VcbiAgLy8gICB9XG5cbiAgLy8gICBmdW5jdGlvbiByZW1vdmVNc2dMaXN0ZW5lcigpIHtcbiAgLy8gICAgIGxvZygnUmVtb3ZlIGV2ZW50IGxpc3RlbmVyOiBNZXNzYWdlJylcbiAgLy8gICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIod2luZG93LCAnbWVzc2FnZScsIHJlY2VpdmVyKVxuICAvLyAgIH1cblxuICBmdW5jdGlvbiBkaXNjb25uZWN0TXV0YXRpb25PYnNlcnZlcigpIHtcbiAgICBpZiAobnVsbCAhPT0gYm9keU9ic2VydmVyKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyAvLyBOb3QgdGVzdGFibGUgaW4gUGhhbnRvbkpTXG4gICAgICBib2R5T2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RvcEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIG1hbmFnZUV2ZW50TGlzdGVuZXJzKCdyZW1vdmUnKVxuICAgIGRpc2Nvbm5lY3RNdXRhdGlvbk9ic2VydmVyKClcbiAgICBjbGVhckludGVydmFsKGludGVydmFsVGltZXIpXG4gIH1cblxuICAvLyAgIGZ1bmN0aW9uIHRlYXJkb3duKCkge1xuICAvLyAgICAgc3RvcE1zZ3NUb1BhcmVudCgpXG4gIC8vICAgICByZW1vdmVNc2dMaXN0ZW5lcigpXG4gIC8vICAgICBpZiAodHJ1ZSA9PT0gYXV0b1Jlc2l6ZSkgc3RvcEV2ZW50TGlzdGVuZXJzKClcbiAgLy8gICB9XG5cbiAgZnVuY3Rpb24gaW5qZWN0Q2xlYXJGaXhJbnRvQm9keUVsZW1lbnQoKSB7XG4gICAgdmFyIGNsZWFyRml4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBjbGVhckZpeC5zdHlsZS5jbGVhciA9ICdib3RoJ1xuICAgIC8vIEd1YXJkIGFnYWluc3QgdGhlIGZvbGxvd2luZyBoYXZpbmcgYmVlbiBnbG9iYWxseSByZWRlZmluZWQgaW4gQ1NTLlxuICAgIGNsZWFyRml4LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXG4gICAgY2xlYXJGaXguc3R5bGUuaGVpZ2h0ID0gJzAnXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjbGVhckZpeClcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldHVwSW5QYWdlTGlua3MoKSB7XG4gICAgZnVuY3Rpb24gZ2V0UGFnZVBvc2l0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDpcbiAgICAgICAgICB3aW5kb3cucGFnZVhPZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB3aW5kb3cucGFnZVhPZmZzZXRcbiAgICAgICAgICAgIDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQsXG4gICAgICAgIHk6XG4gICAgICAgICAgd2luZG93LnBhZ2VZT2Zmc2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gd2luZG93LnBhZ2VZT2Zmc2V0XG4gICAgICAgICAgICA6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3BcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFbGVtZW50UG9zaXRpb24oZWwpIHtcbiAgICAgIHZhciBlbFBvc2l0aW9uID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgIHBhZ2VQb3NpdGlvbiA9IGdldFBhZ2VQb3NpdGlvbigpXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHBhcnNlSW50KGVsUG9zaXRpb24ubGVmdCwgMTApICsgcGFyc2VJbnQocGFnZVBvc2l0aW9uLngsIDEwKSxcbiAgICAgICAgeTogcGFyc2VJbnQoZWxQb3NpdGlvbi50b3AsIDEwKSArIHBhcnNlSW50KHBhZ2VQb3NpdGlvbi55LCAxMClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5kVGFyZ2V0KGxvY2F0aW9uKSB7XG4gICAgICBmdW5jdGlvbiBqdW1wVG9UYXJnZXQodGFyZ2V0KSB7XG4gICAgICAgIHZhciBqdW1wUG9zaXRpb24gPSBnZXRFbGVtZW50UG9zaXRpb24odGFyZ2V0KVxuXG4gICAgICAgIGxvZyhcbiAgICAgICAgICAnTW92aW5nIHRvIGluIHBhZ2UgbGluayAoIycgK1xuICAgICAgICAgICAgaGFzaCArXG4gICAgICAgICAgICAnKSBhdCB4OiAnICtcbiAgICAgICAgICAgIGp1bXBQb3NpdGlvbi54ICtcbiAgICAgICAgICAgICcgeTogJyArXG4gICAgICAgICAgICBqdW1wUG9zaXRpb24ueVxuICAgICAgICApXG4gICAgICAgIHNlbmRNc2coanVtcFBvc2l0aW9uLnksIGp1bXBQb3NpdGlvbi54LCAnc2Nyb2xsVG9PZmZzZXQnKSAvLyBYJlkgcmV2ZXJzZWQgYXQgc2VuZE1zZyB1c2VzIGhlaWdodC93aWR0aFxuICAgICAgfVxuXG4gICAgICB2YXIgaGFzaCA9IGxvY2F0aW9uLnNwbGl0KCcjJylbMV0gfHwgbG9jYXRpb24sIC8vIFJlbW92ZSAjIGlmIHByZXNlbnRcbiAgICAgICAgaGFzaERhdGEgPSBkZWNvZGVVUklDb21wb25lbnQoaGFzaCksXG4gICAgICAgIHRhcmdldCA9XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGFzaERhdGEpIHx8XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoaGFzaERhdGEpWzBdXG5cbiAgICAgIGlmICh1bmRlZmluZWQgIT09IHRhcmdldCkge1xuICAgICAgICBqdW1wVG9UYXJnZXQodGFyZ2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nKFxuICAgICAgICAgICdJbiBwYWdlIGxpbmsgKCMnICtcbiAgICAgICAgICAgIGhhc2ggK1xuICAgICAgICAgICAgJykgbm90IGZvdW5kIGluIGlGcmFtZSwgc28gc2VuZGluZyB0byBwYXJlbnQnXG4gICAgICAgIClcbiAgICAgICAgc2VuZE1zZygwLCAwLCAnaW5QYWdlTGluaycsICcjJyArIGhhc2gpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tMb2NhdGlvbkhhc2goKSB7XG4gICAgICB2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoXG4gICAgICB2YXIgaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmXG5cbiAgICAgIGlmICgnJyAhPT0gaGFzaCAmJiAnIycgIT09IGhhc2gpIHtcbiAgICAgICAgZmluZFRhcmdldChocmVmKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJpbmRBbmNob3JzKCkge1xuICAgICAgZnVuY3Rpb24gc2V0dXBMaW5rKGVsKSB7XG4gICAgICAgIGZ1bmN0aW9uIGxpbmtDbGlja2VkKGUpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcblxuICAgICAgICAgIC8qIGpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICAgICAgICAgIGZpbmRUYXJnZXQodGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnIycgIT09IGVsLmdldEF0dHJpYnV0ZSgnaHJlZicpKSB7XG4gICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ2NsaWNrJywgbGlua0NsaWNrZWQpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYVtocmVmXj1cIiNcIl0nKSxcbiAgICAgICAgc2V0dXBMaW5rXG4gICAgICApXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYmluZExvY2F0aW9uSGFzaCgpIHtcbiAgICAgIGFkZEV2ZW50TGlzdGVuZXIod2luZG93LCAnaGFzaGNoYW5nZScsIGNoZWNrTG9jYXRpb25IYXNoKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluaXRDaGVjaygpIHtcbiAgICAgIC8vIENoZWNrIGlmIHBhZ2UgbG9hZGVkIHdpdGggbG9jYXRpb24gaGFzaCBhZnRlciBpbml0IHJlc2l6ZVxuICAgICAgc2V0VGltZW91dChjaGVja0xvY2F0aW9uSGFzaCwgZXZlbnRDYW5jZWxUaW1lcilcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmFibGVJblBhZ2VMaW5rcygpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovIC8vIE5vdCB0ZXN0YWJsZSBpbiBwaGFudG9uSlNcbiAgICAgIGlmIChBcnJheS5wcm90b3R5cGUuZm9yRWFjaCAmJiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKSB7XG4gICAgICAgIGxvZygnU2V0dGluZyB1cCBsb2NhdGlvbi5oYXNoIGhhbmRsZXJzJylcbiAgICAgICAgYmluZEFuY2hvcnMoKVxuICAgICAgICBiaW5kTG9jYXRpb25IYXNoKClcbiAgICAgICAgaW5pdENoZWNrKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ0luIHBhZ2UgbGlua2luZyBub3QgZnVsbHkgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlciEgKFNlZSBSRUFETUUubWQgZm9yIElFOCB3b3JrYXJvdW5kKSdcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpblBhZ2VMaW5rcy5lbmFibGUpIHtcbiAgICAgIGVuYWJsZUluUGFnZUxpbmtzKClcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nKCdJbiBwYWdlIGxpbmtpbmcgbm90IGVuYWJsZWQnKVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmaW5kVGFyZ2V0OiBmaW5kVGFyZ2V0XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0dXBNb3VzZUV2ZW50cygpIHtcbiAgICBpZiAobW91c2VFdmVudHMgIT09IHRydWUpIHJldHVyblxuXG4gICAgZnVuY3Rpb24gc2VuZE1vdXNlKGUpIHtcbiAgICAgIHNlbmRNc2coMCwgMCwgZS50eXBlLCBlLnNjcmVlblkgKyAnOicgKyBlLnNjcmVlblgpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkTW91c2VMaXN0ZW5lcihldnQsIG5hbWUpIHtcbiAgICAgIGxvZygnQWRkIGV2ZW50IGxpc3RlbmVyOiAnICsgbmFtZSlcbiAgICAgIGFkZEV2ZW50TGlzdGVuZXIod2luZG93LmRvY3VtZW50LCBldnQsIHNlbmRNb3VzZSlcbiAgICB9XG5cbiAgICBhZGRNb3VzZUxpc3RlbmVyKCdtb3VzZWVudGVyJywgJ01vdXNlIEVudGVyJylcbiAgICBhZGRNb3VzZUxpc3RlbmVyKCdtb3VzZWxlYXZlJywgJ01vdXNlIExlYXZlJylcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldHVwUHVibGljTWV0aG9kcygpIHtcbiAgICBsb2coJ0VuYWJsZSBwdWJsaWMgbWV0aG9kcycpXG5cbiAgICB3aW4ucGFyZW50SUZyYW1lID0ge1xuICAgICAgYXV0b1Jlc2l6ZTogZnVuY3Rpb24gYXV0b1Jlc2l6ZUYocmVzaXplKSB7XG4gICAgICAgIGlmICh0cnVlID09PSByZXNpemUgJiYgZmFsc2UgPT09IGF1dG9SZXNpemUpIHtcbiAgICAgICAgICBhdXRvUmVzaXplID0gdHJ1ZVxuICAgICAgICAgIHN0YXJ0RXZlbnRMaXN0ZW5lcnMoKVxuICAgICAgICB9IGVsc2UgaWYgKGZhbHNlID09PSByZXNpemUgJiYgdHJ1ZSA9PT0gYXV0b1Jlc2l6ZSkge1xuICAgICAgICAgIGF1dG9SZXNpemUgPSBmYWxzZVxuICAgICAgICAgIHN0b3BFdmVudExpc3RlbmVycygpXG4gICAgICAgIH1cbiAgICAgICAgc2VuZE1zZygwLCAwLCAnYXV0b1Jlc2l6ZScsIEpTT04uc3RyaW5naWZ5KGF1dG9SZXNpemUpKVxuICAgICAgICByZXR1cm4gYXV0b1Jlc2l6ZVxuICAgICAgfSxcblxuICAgICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlRigpIHtcbiAgICAgICAgc2VuZE1zZygwLCAwLCAnY2xvc2UnKVxuICAgICAgICAvLyB0ZWFyZG93bigpXG4gICAgICB9LFxuXG4gICAgICBnZXRJZDogZnVuY3Rpb24gZ2V0SWRGKCkge1xuICAgICAgICByZXR1cm4gbXlJRFxuICAgICAgfSxcblxuICAgICAgZ2V0UGFnZUluZm86IGZ1bmN0aW9uIGdldFBhZ2VJbmZvRihjYWxsYmFjaykge1xuICAgICAgICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGNhbGxiYWNrKSB7XG4gICAgICAgICAgb25QYWdlSW5mbyA9IGNhbGxiYWNrXG4gICAgICAgICAgc2VuZE1zZygwLCAwLCAncGFnZUluZm8nKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9uUGFnZUluZm8gPSBmdW5jdGlvbiAoKSB7fVxuICAgICAgICAgIHNlbmRNc2coMCwgMCwgJ3BhZ2VJbmZvU3RvcCcpXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIG1vdmVUb0FuY2hvcjogZnVuY3Rpb24gbW92ZVRvQW5jaG9yRihoYXNoKSB7XG4gICAgICAgIGluUGFnZUxpbmtzLmZpbmRUYXJnZXQoaGFzaClcbiAgICAgIH0sXG5cbiAgICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldEYoKSB7XG4gICAgICAgIHJlc2V0SUZyYW1lKCdwYXJlbnRJRnJhbWUucmVzZXQnKVxuICAgICAgfSxcblxuICAgICAgc2Nyb2xsVG86IGZ1bmN0aW9uIHNjcm9sbFRvRih4LCB5KSB7XG4gICAgICAgIHNlbmRNc2coeSwgeCwgJ3Njcm9sbFRvJykgLy8gWCZZIHJldmVyc2VkIGF0IHNlbmRNc2cgdXNlcyBoZWlnaHQvd2lkdGhcbiAgICAgIH0sXG5cbiAgICAgIHNjcm9sbFRvT2Zmc2V0OiBmdW5jdGlvbiBzY3JvbGxUb0YoeCwgeSkge1xuICAgICAgICBzZW5kTXNnKHksIHgsICdzY3JvbGxUb09mZnNldCcpIC8vIFgmWSByZXZlcnNlZCBhdCBzZW5kTXNnIHVzZXMgaGVpZ2h0L3dpZHRoXG4gICAgICB9LFxuXG4gICAgICBzZW5kTWVzc2FnZTogZnVuY3Rpb24gc2VuZE1lc3NhZ2VGKG1zZywgdGFyZ2V0T3JpZ2luKSB7XG4gICAgICAgIHNlbmRNc2coMCwgMCwgJ21lc3NhZ2UnLCBKU09OLnN0cmluZ2lmeShtc2cpLCB0YXJnZXRPcmlnaW4pXG4gICAgICB9LFxuXG4gICAgICBzZXRIZWlnaHRDYWxjdWxhdGlvbk1ldGhvZDogZnVuY3Rpb24gc2V0SGVpZ2h0Q2FsY3VsYXRpb25NZXRob2RGKFxuICAgICAgICBoZWlnaHRDYWxjdWxhdGlvbk1ldGhvZFxuICAgICAgKSB7XG4gICAgICAgIGhlaWdodENhbGNNb2RlID0gaGVpZ2h0Q2FsY3VsYXRpb25NZXRob2RcbiAgICAgICAgY2hlY2tIZWlnaHRNb2RlKClcbiAgICAgIH0sXG5cbiAgICAgIHNldFdpZHRoQ2FsY3VsYXRpb25NZXRob2Q6IGZ1bmN0aW9uIHNldFdpZHRoQ2FsY3VsYXRpb25NZXRob2RGKFxuICAgICAgICB3aWR0aENhbGN1bGF0aW9uTWV0aG9kXG4gICAgICApIHtcbiAgICAgICAgd2lkdGhDYWxjTW9kZSA9IHdpZHRoQ2FsY3VsYXRpb25NZXRob2RcbiAgICAgICAgY2hlY2tXaWR0aE1vZGUoKVxuICAgICAgfSxcblxuICAgICAgc2V0VGFyZ2V0T3JpZ2luOiBmdW5jdGlvbiBzZXRUYXJnZXRPcmlnaW5GKHRhcmdldE9yaWdpbikge1xuICAgICAgICBsb2coJ1NldCB0YXJnZXRPcmlnaW46ICcgKyB0YXJnZXRPcmlnaW4pXG4gICAgICAgIHRhcmdldE9yaWdpbkRlZmF1bHQgPSB0YXJnZXRPcmlnaW5cbiAgICAgIH0sXG5cbiAgICAgIHNpemU6IGZ1bmN0aW9uIHNpemVGKGN1c3RvbUhlaWdodCwgY3VzdG9tV2lkdGgpIHtcbiAgICAgICAgdmFyIHZhbFN0cmluZyA9XG4gICAgICAgICAgJycgKyAoY3VzdG9tSGVpZ2h0IHx8ICcnKSArIChjdXN0b21XaWR0aCA/ICcsJyArIGN1c3RvbVdpZHRoIDogJycpXG4gICAgICAgIHNlbmRTaXplKFxuICAgICAgICAgICdzaXplJyxcbiAgICAgICAgICAncGFyZW50SUZyYW1lLnNpemUoJyArIHZhbFN0cmluZyArICcpJyxcbiAgICAgICAgICBjdXN0b21IZWlnaHQsXG4gICAgICAgICAgY3VzdG9tV2lkdGhcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRJbnRlcnZhbCgpIHtcbiAgICBpZiAoMCAhPT0gaW50ZXJ2YWwpIHtcbiAgICAgIGxvZygnc2V0SW50ZXJ2YWw6ICcgKyBpbnRlcnZhbCArICdtcycpXG4gICAgICBpbnRlcnZhbFRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgICBzZW5kU2l6ZSgnaW50ZXJ2YWwnLCAnc2V0SW50ZXJ2YWw6ICcgKyBpbnRlcnZhbClcbiAgICAgIH0sIE1hdGguYWJzKGludGVydmFsKSlcbiAgICB9XG4gIH1cblxuICAvLyBOb3QgdGVzdGFibGUgaW4gUGhhbnRvbUpTXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGZ1bmN0aW9uIHNldHVwQm9keU11dGF0aW9uT2JzZXJ2ZXIoKSB7XG4gICAgZnVuY3Rpb24gYWRkSW1hZ2VMb2FkTGlzdG5lcnMobXV0YXRpb24pIHtcbiAgICAgIGZ1bmN0aW9uIGFkZEltYWdlTG9hZExpc3RlbmVyKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGZhbHNlID09PSBlbGVtZW50LmNvbXBsZXRlKSB7XG4gICAgICAgICAgbG9nKCdBdHRhY2ggbGlzdGVuZXJzIHRvICcgKyBlbGVtZW50LnNyYylcbiAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBpbWFnZUxvYWRlZCwgZmFsc2UpXG4gICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGltYWdlRXJyb3IsIGZhbHNlKVxuICAgICAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobXV0YXRpb24udHlwZSA9PT0gJ2F0dHJpYnV0ZXMnICYmIG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUgPT09ICdzcmMnKSB7XG4gICAgICAgIGFkZEltYWdlTG9hZExpc3RlbmVyKG11dGF0aW9uLnRhcmdldClcbiAgICAgIH0gZWxzZSBpZiAobXV0YXRpb24udHlwZSA9PT0gJ2NoaWxkTGlzdCcpIHtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChcbiAgICAgICAgICBtdXRhdGlvbi50YXJnZXQucXVlcnlTZWxlY3RvckFsbCgnaW1nJyksXG4gICAgICAgICAgYWRkSW1hZ2VMb2FkTGlzdGVuZXJcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZUZyb21BcnJheShlbGVtZW50KSB7XG4gICAgICBlbGVtZW50cy5zcGxpY2UoZWxlbWVudHMuaW5kZXhPZihlbGVtZW50KSwgMSlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVJbWFnZUxvYWRMaXN0ZW5lcihlbGVtZW50KSB7XG4gICAgICBsb2coJ1JlbW92ZSBsaXN0ZW5lcnMgZnJvbSAnICsgZWxlbWVudC5zcmMpXG4gICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBpbWFnZUxvYWRlZCwgZmFsc2UpXG4gICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgaW1hZ2VFcnJvciwgZmFsc2UpXG4gICAgICByZW1vdmVGcm9tQXJyYXkoZWxlbWVudClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbWFnZUV2ZW50VHJpZ2dlcmVkKGV2ZW50LCB0eXBlLCB0eXBlRGVzYykge1xuICAgICAgcmVtb3ZlSW1hZ2VMb2FkTGlzdGVuZXIoZXZlbnQudGFyZ2V0KVxuICAgICAgc2VuZFNpemUodHlwZSwgdHlwZURlc2MgKyAnOiAnICsgZXZlbnQudGFyZ2V0LnNyYylcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbWFnZUxvYWRlZChldmVudCkge1xuICAgICAgaW1hZ2VFdmVudFRyaWdnZXJlZChldmVudCwgJ2ltYWdlTG9hZCcsICdJbWFnZSBsb2FkZWQnKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGltYWdlRXJyb3IoZXZlbnQpIHtcbiAgICAgIGltYWdlRXZlbnRUcmlnZ2VyZWQoZXZlbnQsICdpbWFnZUxvYWRGYWlsZWQnLCAnSW1hZ2UgbG9hZCBmYWlsZWQnKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG11dGF0aW9uT2JzZXJ2ZWQobXV0YXRpb25zKSB7XG4gICAgICBzZW5kU2l6ZShcbiAgICAgICAgJ211dGF0aW9uT2JzZXJ2ZXInLFxuICAgICAgICAnbXV0YXRpb25PYnNlcnZlcjogJyArIG11dGF0aW9uc1swXS50YXJnZXQgKyAnICcgKyBtdXRhdGlvbnNbMF0udHlwZVxuICAgICAgKVxuXG4gICAgICAvLyBEZWFsIHdpdGggV2ViS2l0IC8gQmxpbmsgYXN5bmNpbmcgaW1hZ2UgbG9hZGluZyB3aGVuIHRhZ3MgYXJlIGluamVjdGVkIGludG8gdGhlIHBhZ2VcbiAgICAgIG11dGF0aW9ucy5mb3JFYWNoKGFkZEltYWdlTG9hZExpc3RuZXJzKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZU11dGF0aW9uT2JzZXJ2ZXIoKSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpLFxuICAgICAgICBjb25maWcgPSB7XG4gICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgICBhdHRyaWJ1dGVPbGRWYWx1ZTogZmFsc2UsXG4gICAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgICAgICBjaGFyYWN0ZXJEYXRhT2xkVmFsdWU6IGZhbHNlLFxuICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgICAgIH1cblxuICAgICAgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihtdXRhdGlvbk9ic2VydmVkKVxuXG4gICAgICBsb2coJ0NyZWF0ZSBib2R5IE11dGF0aW9uT2JzZXJ2ZXInKVxuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXQsIGNvbmZpZylcblxuICAgICAgcmV0dXJuIG9ic2VydmVyXG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnRzID0gW10sXG4gICAgICBNdXRhdGlvbk9ic2VydmVyID1cbiAgICAgICAgd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIgfHwgd2luZG93LldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsXG4gICAgICBvYnNlcnZlciA9IGNyZWF0ZU11dGF0aW9uT2JzZXJ2ZXIoKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc2Nvbm5lY3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCdkaXNjb25uZWN0JyBpbiBvYnNlcnZlcikge1xuICAgICAgICAgIGxvZygnRGlzY29ubmVjdCBib2R5IE11dGF0aW9uT2JzZXJ2ZXInKVxuICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2gocmVtb3ZlSW1hZ2VMb2FkTGlzdGVuZXIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXR1cE11dGF0aW9uT2JzZXJ2ZXIoKSB7XG4gICAgdmFyIGZvcmNlSW50ZXJ2YWxUaW1lciA9IDAgPiBpbnRlcnZhbFxuXG4gICAgLy8gTm90IHRlc3RhYmxlIGluIFBoYW50b21KU1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLyBpZiAoXG4gICAgICB3aW5kb3cuTXV0YXRpb25PYnNlcnZlciB8fFxuICAgICAgd2luZG93LldlYktpdE11dGF0aW9uT2JzZXJ2ZXJcbiAgICApIHtcbiAgICAgIGlmIChmb3JjZUludGVydmFsVGltZXIpIHtcbiAgICAgICAgaW5pdEludGVydmFsKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJvZHlPYnNlcnZlciA9IHNldHVwQm9keU11dGF0aW9uT2JzZXJ2ZXIoKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2coJ011dGF0aW9uT2JzZXJ2ZXIgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXIhJylcbiAgICAgIGluaXRJbnRlcnZhbCgpXG4gICAgfVxuICB9XG5cbiAgLy8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEhlaWdodCBpcyBub3QgcmVsaWFibGUsIHNvXG4gIC8vIHdlIGhhdmUgdG8ganVtcCB0aHJvdWdoIGhvb3BzIHRvIGdldCBhIGJldHRlciB2YWx1ZS5cbiAgZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShwcm9wLCBlbCkge1xuICAgIHZhciByZXRWYWwgPSAwXG4gICAgZWwgPSBlbCB8fCBkb2N1bWVudC5ib2R5IC8vIE5vdCB0ZXN0YWJsZSBpbiBwaGFudG9uSlNcblxuICAgIHJldFZhbCA9IGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWwsIG51bGwpXG4gICAgcmV0VmFsID0gbnVsbCAhPT0gcmV0VmFsID8gcmV0VmFsW3Byb3BdIDogMFxuXG4gICAgcmV0dXJuIHBhcnNlSW50KHJldFZhbCwgYmFzZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoa0V2ZW50VGhvdHRsZSh0aW1lcikge1xuICAgIGlmICh0aW1lciA+IHRocm90dGxlZFRpbWVyIC8gMikge1xuICAgICAgdGhyb3R0bGVkVGltZXIgPSAyICogdGltZXJcbiAgICAgIGxvZygnRXZlbnQgdGhyb3R0bGUgaW5jcmVhc2VkIHRvICcgKyB0aHJvdHRsZWRUaW1lciArICdtcycpXG4gICAgfVxuICB9XG5cbiAgLy8gSWRlYSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ndWFyZGlhbi9pZnJhbWUtbWVzc2VuZ2VyXG4gIGZ1bmN0aW9uIGdldE1heEVsZW1lbnQoc2lkZSwgZWxlbWVudHMpIHtcbiAgICB2YXIgZWxlbWVudHNMZW5ndGggPSBlbGVtZW50cy5sZW5ndGgsXG4gICAgICBlbFZhbCA9IDAsXG4gICAgICBtYXhWYWwgPSAwLFxuICAgICAgU2lkZSA9IGNhcGl0YWxpemVGaXJzdExldHRlcihzaWRlKSxcbiAgICAgIHRpbWVyID0gRGF0ZS5ub3coKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50c0xlbmd0aDsgaSsrKSB7XG4gICAgICBlbFZhbCA9XG4gICAgICAgIGVsZW1lbnRzW2ldLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3NpZGVdICtcbiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZSgnbWFyZ2luJyArIFNpZGUsIGVsZW1lbnRzW2ldKVxuICAgICAgaWYgKGVsVmFsID4gbWF4VmFsKSB7XG4gICAgICAgIG1heFZhbCA9IGVsVmFsXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGltZXIgPSBEYXRlLm5vdygpIC0gdGltZXJcblxuICAgIGxvZygnUGFyc2VkICcgKyBlbGVtZW50c0xlbmd0aCArICcgSFRNTCBlbGVtZW50cycpXG4gICAgbG9nKCdFbGVtZW50IHBvc2l0aW9uIGNhbGN1bGF0ZWQgaW4gJyArIHRpbWVyICsgJ21zJylcblxuICAgIGNoa0V2ZW50VGhvdHRsZSh0aW1lcilcblxuICAgIHJldHVybiBtYXhWYWxcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFsbE1lYXN1cmVtZW50cyhkaW1lbnNpb25zKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGRpbWVuc2lvbnMuYm9keU9mZnNldCgpLFxuICAgICAgZGltZW5zaW9ucy5ib2R5U2Nyb2xsKCksXG4gICAgICBkaW1lbnNpb25zLmRvY3VtZW50RWxlbWVudE9mZnNldCgpLFxuICAgICAgZGltZW5zaW9ucy5kb2N1bWVudEVsZW1lbnRTY3JvbGwoKVxuICAgIF1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFRhZ2dlZEVsZW1lbnRzKHNpZGUsIHRhZykge1xuICAgIGZ1bmN0aW9uIG5vVGFnZ2VkRWxlbWVudHNGb3VuZCgpIHtcbiAgICAgIHdhcm4oJ05vIHRhZ2dlZCBlbGVtZW50cyAoJyArIHRhZyArICcpIGZvdW5kIG9uIHBhZ2UnKVxuICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2JvZHkgKicpXG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnWycgKyB0YWcgKyAnXScpXG5cbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAwKSBub1RhZ2dlZEVsZW1lbnRzRm91bmQoKVxuXG4gICAgcmV0dXJuIGdldE1heEVsZW1lbnQoc2lkZSwgZWxlbWVudHMpXG4gIH1cblxuICBmdW5jdGlvbiBnZXRBbGxFbGVtZW50cygpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYm9keSAqJylcbiAgfVxuXG4gIHZhciBnZXRIZWlnaHQgPSB7XG4gICAgICBib2R5T2Zmc2V0OiBmdW5jdGlvbiBnZXRCb2R5T2Zmc2V0SGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0ICtcbiAgICAgICAgICBnZXRDb21wdXRlZFN0eWxlKCdtYXJnaW5Ub3AnKSArXG4gICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZSgnbWFyZ2luQm90dG9tJylcbiAgICAgICAgKVxuICAgICAgfSxcblxuICAgICAgb2Zmc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRIZWlnaHQuYm9keU9mZnNldCgpIC8vIEJhY2t3YXJkcyBjb21wYXRhYmlsaXR5XG4gICAgICB9LFxuXG4gICAgICBib2R5U2Nyb2xsOiBmdW5jdGlvbiBnZXRCb2R5U2Nyb2xsSGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHRcbiAgICAgIH0sXG5cbiAgICAgIGN1c3RvbTogZnVuY3Rpb24gZ2V0Q3VzdG9tV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiBjdXN0b21DYWxjTWV0aG9kcy5oZWlnaHQoKVxuICAgICAgfSxcblxuICAgICAgZG9jdW1lbnRFbGVtZW50T2Zmc2V0OiBmdW5jdGlvbiBnZXRERU9mZnNldEhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHRcbiAgICAgIH0sXG5cbiAgICAgIGRvY3VtZW50RWxlbWVudFNjcm9sbDogZnVuY3Rpb24gZ2V0REVTY3JvbGxIZWlnaHQoKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0XG4gICAgICB9LFxuXG4gICAgICBtYXg6IGZ1bmN0aW9uIGdldE1heEhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsIGdldEFsbE1lYXN1cmVtZW50cyhnZXRIZWlnaHQpKVxuICAgICAgfSxcblxuICAgICAgbWluOiBmdW5jdGlvbiBnZXRNaW5IZWlnaHQoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbi5hcHBseShudWxsLCBnZXRBbGxNZWFzdXJlbWVudHMoZ2V0SGVpZ2h0KSlcbiAgICAgIH0sXG5cbiAgICAgIGdyb3c6IGZ1bmN0aW9uIGdyb3dIZWlnaHQoKSB7XG4gICAgICAgIHJldHVybiBnZXRIZWlnaHQubWF4KCkgLy8gUnVuIG1heCB3aXRob3V0IHRoZSBmb3JjZWQgZG93bnNpemluZ1xuICAgICAgfSxcblxuICAgICAgbG93ZXN0RWxlbWVudDogZnVuY3Rpb24gZ2V0QmVzdEhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICAgIGdldEhlaWdodC5ib2R5T2Zmc2V0KCkgfHwgZ2V0SGVpZ2h0LmRvY3VtZW50RWxlbWVudE9mZnNldCgpLFxuICAgICAgICAgIGdldE1heEVsZW1lbnQoJ2JvdHRvbScsIGdldEFsbEVsZW1lbnRzKCkpXG4gICAgICAgIClcbiAgICAgIH0sXG5cbiAgICAgIHRhZ2dlZEVsZW1lbnQ6IGZ1bmN0aW9uIGdldFRhZ2dlZEVsZW1lbnRzSGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gZ2V0VGFnZ2VkRWxlbWVudHMoJ2JvdHRvbScsICdkYXRhLWlmcmFtZS1oZWlnaHQnKVxuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0V2lkdGggPSB7XG4gICAgICBib2R5U2Nyb2xsOiBmdW5jdGlvbiBnZXRCb2R5U2Nyb2xsV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5ib2R5LnNjcm9sbFdpZHRoXG4gICAgICB9LFxuXG4gICAgICBib2R5T2Zmc2V0OiBmdW5jdGlvbiBnZXRCb2R5T2Zmc2V0V2lkdGgoKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoXG4gICAgICB9LFxuXG4gICAgICBjdXN0b206IGZ1bmN0aW9uIGdldEN1c3RvbVdpZHRoKCkge1xuICAgICAgICByZXR1cm4gY3VzdG9tQ2FsY01ldGhvZHMud2lkdGgoKVxuICAgICAgfSxcblxuICAgICAgZG9jdW1lbnRFbGVtZW50U2Nyb2xsOiBmdW5jdGlvbiBnZXRERVNjcm9sbFdpZHRoKCkge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFdpZHRoXG4gICAgICB9LFxuXG4gICAgICBkb2N1bWVudEVsZW1lbnRPZmZzZXQ6IGZ1bmN0aW9uIGdldERFT2Zmc2V0V2lkdGgoKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGhcbiAgICAgIH0sXG5cbiAgICAgIHNjcm9sbDogZnVuY3Rpb24gZ2V0TWF4V2lkdGgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChnZXRXaWR0aC5ib2R5U2Nyb2xsKCksIGdldFdpZHRoLmRvY3VtZW50RWxlbWVudFNjcm9sbCgpKVxuICAgICAgfSxcblxuICAgICAgbWF4OiBmdW5jdGlvbiBnZXRNYXhXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsIGdldEFsbE1lYXN1cmVtZW50cyhnZXRXaWR0aCkpXG4gICAgICB9LFxuXG4gICAgICBtaW46IGZ1bmN0aW9uIGdldE1pbldpZHRoKCkge1xuICAgICAgICByZXR1cm4gTWF0aC5taW4uYXBwbHkobnVsbCwgZ2V0QWxsTWVhc3VyZW1lbnRzKGdldFdpZHRoKSlcbiAgICAgIH0sXG5cbiAgICAgIHJpZ2h0TW9zdEVsZW1lbnQ6IGZ1bmN0aW9uIHJpZ2h0TW9zdEVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiBnZXRNYXhFbGVtZW50KCdyaWdodCcsIGdldEFsbEVsZW1lbnRzKCkpXG4gICAgICB9LFxuXG4gICAgICB0YWdnZWRFbGVtZW50OiBmdW5jdGlvbiBnZXRUYWdnZWRFbGVtZW50c1dpZHRoKCkge1xuICAgICAgICByZXR1cm4gZ2V0VGFnZ2VkRWxlbWVudHMoJ3JpZ2h0JywgJ2RhdGEtaWZyYW1lLXdpZHRoJylcbiAgICAgIH1cbiAgICB9XG5cbiAgZnVuY3Rpb24gc2l6ZUlGcmFtZShcbiAgICB0cmlnZ2VyRXZlbnQsXG4gICAgdHJpZ2dlckV2ZW50RGVzYyxcbiAgICBjdXN0b21IZWlnaHQsXG4gICAgY3VzdG9tV2lkdGhcbiAgKSB7XG4gICAgZnVuY3Rpb24gcmVzaXplSUZyYW1lKCkge1xuICAgICAgaGVpZ2h0ID0gY3VycmVudEhlaWdodFxuICAgICAgd2lkdGggPSBjdXJyZW50V2lkdGhcblxuICAgICAgc2VuZE1zZyhoZWlnaHQsIHdpZHRoLCB0cmlnZ2VyRXZlbnQpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTaXplQ2hhbmdlRGV0ZWN0ZWQoKSB7XG4gICAgICBmdW5jdGlvbiBjaGVja1RvbGFyYW5jZShhLCBiKSB7XG4gICAgICAgIHZhciByZXRWYWwgPSBNYXRoLmFicyhhIC0gYikgPD0gdG9sZXJhbmNlXG4gICAgICAgIHJldHVybiAhcmV0VmFsXG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRIZWlnaHQgPVxuICAgICAgICB1bmRlZmluZWQgIT09IGN1c3RvbUhlaWdodCA/IGN1c3RvbUhlaWdodCA6IGdldEhlaWdodFtoZWlnaHRDYWxjTW9kZV0oKVxuICAgICAgY3VycmVudFdpZHRoID1cbiAgICAgICAgdW5kZWZpbmVkICE9PSBjdXN0b21XaWR0aCA/IGN1c3RvbVdpZHRoIDogZ2V0V2lkdGhbd2lkdGhDYWxjTW9kZV0oKVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBjaGVja1RvbGFyYW5jZShoZWlnaHQsIGN1cnJlbnRIZWlnaHQpIHx8XG4gICAgICAgIChjYWxjdWxhdGVXaWR0aCAmJiBjaGVja1RvbGFyYW5jZSh3aWR0aCwgY3VycmVudFdpZHRoKSlcbiAgICAgIClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0ZvcmNlUmVzaXphYmxlRXZlbnQoKSB7XG4gICAgICByZXR1cm4gISh0cmlnZ2VyRXZlbnQgaW4geyBpbml0OiAxLCBpbnRlcnZhbDogMSwgc2l6ZTogMSB9KVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRm9yY2VSZXNpemFibGVDYWxjTW9kZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGhlaWdodENhbGNNb2RlIGluIHJlc2V0UmVxdWlyZWRNZXRob2RzIHx8XG4gICAgICAgIChjYWxjdWxhdGVXaWR0aCAmJiB3aWR0aENhbGNNb2RlIGluIHJlc2V0UmVxdWlyZWRNZXRob2RzKVxuICAgICAgKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvZ0lnbm9yZWQoKSB7XG4gICAgICBsb2coJ05vIGNoYW5nZSBpbiBzaXplIGRldGVjdGVkJylcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja0Rvd25TaXppbmcoKSB7XG4gICAgICBpZiAoaXNGb3JjZVJlc2l6YWJsZUV2ZW50KCkgJiYgaXNGb3JjZVJlc2l6YWJsZUNhbGNNb2RlKCkpIHtcbiAgICAgICAgcmVzZXRJRnJhbWUodHJpZ2dlckV2ZW50RGVzYylcbiAgICAgIH0gZWxzZSBpZiAoISh0cmlnZ2VyRXZlbnQgaW4geyBpbnRlcnZhbDogMSB9KSkge1xuICAgICAgICBsb2dJZ25vcmVkKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY3VycmVudEhlaWdodCwgY3VycmVudFdpZHRoXG5cbiAgICBpZiAoaXNTaXplQ2hhbmdlRGV0ZWN0ZWQoKSB8fCAnaW5pdCcgPT09IHRyaWdnZXJFdmVudCkge1xuICAgICAgbG9ja1RyaWdnZXIoKVxuICAgICAgcmVzaXplSUZyYW1lKClcbiAgICB9IGVsc2Uge1xuICAgICAgY2hlY2tEb3duU2l6aW5nKClcbiAgICB9XG4gIH1cblxuICB2YXIgc2l6ZUlGcmFtZVRocm90dGxlZCA9IHRocm90dGxlKHNpemVJRnJhbWUpXG5cbiAgZnVuY3Rpb24gc2VuZFNpemUodHJpZ2dlckV2ZW50LCB0cmlnZ2VyRXZlbnREZXNjLCBjdXN0b21IZWlnaHQsIGN1c3RvbVdpZHRoKSB7XG4gICAgZnVuY3Rpb24gcmVjb3JkVHJpZ2dlcigpIHtcbiAgICAgIGlmICghKHRyaWdnZXJFdmVudCBpbiB7IHJlc2V0OiAxLCByZXNldFBhZ2U6IDEsIGluaXQ6IDEgfSkpIHtcbiAgICAgICAgbG9nKCdUcmlnZ2VyIGV2ZW50OiAnICsgdHJpZ2dlckV2ZW50RGVzYylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RvdWJsZUZpcmVkRXZlbnQoKSB7XG4gICAgICByZXR1cm4gdHJpZ2dlckxvY2tlZCAmJiB0cmlnZ2VyRXZlbnQgaW4gZG91YmxlRXZlbnRMaXN0XG4gICAgfVxuXG4gICAgaWYgKCFpc0RvdWJsZUZpcmVkRXZlbnQoKSkge1xuICAgICAgcmVjb3JkVHJpZ2dlcigpXG4gICAgICBpZiAodHJpZ2dlckV2ZW50ID09PSAnaW5pdCcpIHtcbiAgICAgICAgc2l6ZUlGcmFtZSh0cmlnZ2VyRXZlbnQsIHRyaWdnZXJFdmVudERlc2MsIGN1c3RvbUhlaWdodCwgY3VzdG9tV2lkdGgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaXplSUZyYW1lVGhyb3R0bGVkKFxuICAgICAgICAgIHRyaWdnZXJFdmVudCxcbiAgICAgICAgICB0cmlnZ2VyRXZlbnREZXNjLFxuICAgICAgICAgIGN1c3RvbUhlaWdodCxcbiAgICAgICAgICBjdXN0b21XaWR0aFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZygnVHJpZ2dlciBldmVudCBjYW5jZWxsZWQ6ICcgKyB0cmlnZ2VyRXZlbnQpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbG9ja1RyaWdnZXIoKSB7XG4gICAgaWYgKCF0cmlnZ2VyTG9ja2VkKSB7XG4gICAgICB0cmlnZ2VyTG9ja2VkID0gdHJ1ZVxuICAgICAgbG9nKCdUcmlnZ2VyIGV2ZW50IGxvY2sgb24nKVxuICAgIH1cbiAgICBjbGVhclRpbWVvdXQodHJpZ2dlckxvY2tlZFRpbWVyKVxuICAgIHRyaWdnZXJMb2NrZWRUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgdHJpZ2dlckxvY2tlZCA9IGZhbHNlXG4gICAgICBsb2coJ1RyaWdnZXIgZXZlbnQgbG9jayBvZmYnKVxuICAgICAgbG9nKCctLScpXG4gICAgfSwgZXZlbnRDYW5jZWxUaW1lcilcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyaWdnZXJSZXNldCh0cmlnZ2VyRXZlbnQpIHtcbiAgICBoZWlnaHQgPSBnZXRIZWlnaHRbaGVpZ2h0Q2FsY01vZGVdKClcbiAgICB3aWR0aCA9IGdldFdpZHRoW3dpZHRoQ2FsY01vZGVdKClcblxuICAgIHNlbmRNc2coaGVpZ2h0LCB3aWR0aCwgdHJpZ2dlckV2ZW50KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRJRnJhbWUodHJpZ2dlckV2ZW50RGVzYykge1xuICAgIHZhciBoY20gPSBoZWlnaHRDYWxjTW9kZVxuICAgIGhlaWdodENhbGNNb2RlID0gaGVpZ2h0Q2FsY01vZGVEZWZhdWx0XG5cbiAgICBsb2coJ1Jlc2V0IHRyaWdnZXIgZXZlbnQ6ICcgKyB0cmlnZ2VyRXZlbnREZXNjKVxuICAgIGxvY2tUcmlnZ2VyKClcbiAgICB0cmlnZ2VyUmVzZXQoJ3Jlc2V0JylcblxuICAgIGhlaWdodENhbGNNb2RlID0gaGNtXG4gIH1cblxuICBmdW5jdGlvbiBzZW5kTXNnKGhlaWdodCwgd2lkdGgsIHRyaWdnZXJFdmVudCwgbXNnLCB0YXJnZXRPcmlnaW4pIHtcbiAgICBmdW5jdGlvbiBzZXRUYXJnZXRPcmlnaW4oKSB7XG4gICAgICBpZiAodW5kZWZpbmVkID09PSB0YXJnZXRPcmlnaW4pIHtcbiAgICAgICAgdGFyZ2V0T3JpZ2luID0gdGFyZ2V0T3JpZ2luRGVmYXVsdFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nKCdNZXNzYWdlIHRhcmdldE9yaWdpbjogJyArIHRhcmdldE9yaWdpbilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZW5kVG9QYXJlbnQoKSB7XG4gICAgICB2YXIgc2l6ZSA9IGhlaWdodCArICc6JyArIHdpZHRoLFxuICAgICAgICBtZXNzYWdlID1cbiAgICAgICAgICBteUlEICtcbiAgICAgICAgICAnOicgK1xuICAgICAgICAgIHNpemUgK1xuICAgICAgICAgICc6JyArXG4gICAgICAgICAgdHJpZ2dlckV2ZW50ICtcbiAgICAgICAgICAodW5kZWZpbmVkICE9PSBtc2cgPyAnOicgKyBtc2cgOiAnJylcblxuICAgICAgbG9nKCdTZW5kaW5nIG1lc3NhZ2UgdG8gaG9zdCBwYWdlICgnICsgbWVzc2FnZSArICcpJylcbiAgICAgIHRhcmdldC5wb3N0TWVzc2FnZShtc2dJRCArIG1lc3NhZ2UsIHRhcmdldE9yaWdpbilcbiAgICB9XG5cbiAgICBpZiAodHJ1ZSA9PT0gc2VuZFBlcm1pdCkge1xuICAgICAgc2V0VGFyZ2V0T3JpZ2luKClcbiAgICAgIHNlbmRUb1BhcmVudCgpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVjZWl2ZXIoZXZlbnQpIHtcbiAgICB2YXIgcHJvY2Vzc1JlcXVlc3RGcm9tUGFyZW50ID0ge1xuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdEZyb21QYXJlbnQoKSB7XG4gICAgICAgIGluaXRNc2cgPSBldmVudC5kYXRhXG4gICAgICAgIHRhcmdldCA9IGV2ZW50LnNvdXJjZVxuXG4gICAgICAgIGluaXQoKVxuICAgICAgICBmaXJzdFJ1biA9IGZhbHNlXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGluaXRMb2NrID0gZmFsc2VcbiAgICAgICAgfSwgZXZlbnRDYW5jZWxUaW1lcilcbiAgICAgIH0sXG5cbiAgICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldEZyb21QYXJlbnQoKSB7XG4gICAgICAgIGlmICghaW5pdExvY2spIHtcbiAgICAgICAgICBsb2coJ1BhZ2Ugc2l6ZSByZXNldCBieSBob3N0IHBhZ2UnKVxuICAgICAgICAgIHRyaWdnZXJSZXNldCgncmVzZXRQYWdlJylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2coJ1BhZ2UgcmVzZXQgaWdub3JlZCBieSBpbml0JylcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgcmVzaXplOiBmdW5jdGlvbiByZXNpemVGcm9tUGFyZW50KCkge1xuICAgICAgICBzZW5kU2l6ZSgncmVzaXplUGFyZW50JywgJ1BhcmVudCB3aW5kb3cgcmVxdWVzdGVkIHNpemUgY2hlY2snKVxuICAgICAgfSxcblxuICAgICAgbW92ZVRvQW5jaG9yOiBmdW5jdGlvbiBtb3ZlVG9BbmNob3JGKCkge1xuICAgICAgICBpblBhZ2VMaW5rcy5maW5kVGFyZ2V0KGdldERhdGEoKSlcbiAgICAgIH0sXG4gICAgICBpblBhZ2VMaW5rOiBmdW5jdGlvbiBpblBhZ2VMaW5rRigpIHtcbiAgICAgICAgdGhpcy5tb3ZlVG9BbmNob3IoKVxuICAgICAgfSwgLy8gQmFja3dhcmQgY29tcGF0YWJpbGl0eVxuXG4gICAgICBwYWdlSW5mbzogZnVuY3Rpb24gcGFnZUluZm9Gcm9tUGFyZW50KCkge1xuICAgICAgICB2YXIgbXNnQm9keSA9IGdldERhdGEoKVxuICAgICAgICBsb2coJ1BhZ2VJbmZvRnJvbVBhcmVudCBjYWxsZWQgZnJvbSBwYXJlbnQ6ICcgKyBtc2dCb2R5KVxuICAgICAgICBvblBhZ2VJbmZvKEpTT04ucGFyc2UobXNnQm9keSkpXG4gICAgICAgIGxvZygnIC0tJylcbiAgICAgIH0sXG5cbiAgICAgIG1lc3NhZ2U6IGZ1bmN0aW9uIG1lc3NhZ2VGcm9tUGFyZW50KCkge1xuICAgICAgICB2YXIgbXNnQm9keSA9IGdldERhdGEoKVxuXG4gICAgICAgIGxvZygnb25NZXNzYWdlIGNhbGxlZCBmcm9tIHBhcmVudDogJyArIG1zZ0JvZHkpXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL25vLWV4dHJhLWFyZ3VtZW50c1xuICAgICAgICBvbk1lc3NhZ2UoSlNPTi5wYXJzZShtc2dCb2R5KSlcbiAgICAgICAgbG9nKCcgLS0nKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTWVzc2FnZUZvclVzKCkge1xuICAgICAgcmV0dXJuIG1zZ0lEID09PSAoJycgKyBldmVudC5kYXRhKS5zdWJzdHIoMCwgbXNnSWRMZW4pIC8vICcnKyBQcm90ZWN0cyBhZ2FpbnN0IG5vbi1zdHJpbmcgbWVzc2FnZXNcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRNZXNzYWdlVHlwZSgpIHtcbiAgICAgIHJldHVybiBldmVudC5kYXRhLnNwbGl0KCddJylbMV0uc3BsaXQoJzonKVswXVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERhdGEoKSB7XG4gICAgICByZXR1cm4gZXZlbnQuZGF0YS5zdWJzdHIoZXZlbnQuZGF0YS5pbmRleE9mKCc6JykgKyAxKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTWlkZGxlVGllcigpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICghKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSAmJlxuICAgICAgICAgICdpRnJhbWVSZXNpemUnIGluIHdpbmRvdykgfHxcbiAgICAgICAgKCdqUXVlcnknIGluIHdpbmRvdyAmJiAnaUZyYW1lUmVzaXplJyBpbiB3aW5kb3cualF1ZXJ5LnByb3RvdHlwZSlcbiAgICAgIClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0luaXRNc2coKSB7XG4gICAgICAvLyBUZXN0IGlmIHRoaXMgbWVzc2FnZSBpcyBmcm9tIGEgY2hpbGQgYmVsb3cgdXMuIFRoaXMgaXMgYW4gdWdseSB0ZXN0LCBob3dldmVyLCB1cGRhdGluZ1xuICAgICAgLy8gdGhlIG1lc3NhZ2UgZm9ybWF0IHdvdWxkIGJyZWFrIGJhY2t3YXJkcyBjb21wYXRpYml0eS5cbiAgICAgIHJldHVybiBldmVudC5kYXRhLnNwbGl0KCc6JylbMl0gaW4geyB0cnVlOiAxLCBmYWxzZTogMSB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsbEZyb21QYXJlbnQoKSB7XG4gICAgICB2YXIgbWVzc2FnZVR5cGUgPSBnZXRNZXNzYWdlVHlwZSgpXG5cbiAgICAgIGlmIChtZXNzYWdlVHlwZSBpbiBwcm9jZXNzUmVxdWVzdEZyb21QYXJlbnQpIHtcbiAgICAgICAgcHJvY2Vzc1JlcXVlc3RGcm9tUGFyZW50W21lc3NhZ2VUeXBlXSgpXG4gICAgICB9IGVsc2UgaWYgKCFpc01pZGRsZVRpZXIoKSAmJiAhaXNJbml0TXNnKCkpIHtcbiAgICAgICAgd2FybignVW5leHBlY3RlZCBtZXNzYWdlICgnICsgZXZlbnQuZGF0YSArICcpJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzTWVzc2FnZSgpIHtcbiAgICAgIGlmIChmYWxzZSA9PT0gZmlyc3RSdW4pIHtcbiAgICAgICAgY2FsbEZyb21QYXJlbnQoKVxuICAgICAgfSBlbHNlIGlmIChpc0luaXRNc2coKSkge1xuICAgICAgICBwcm9jZXNzUmVxdWVzdEZyb21QYXJlbnQuaW5pdCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coXG4gICAgICAgICAgJ0lnbm9yZWQgbWVzc2FnZSBvZiB0eXBlIFwiJyArXG4gICAgICAgICAgICBnZXRNZXNzYWdlVHlwZSgpICtcbiAgICAgICAgICAgICdcIi4gUmVjZWl2ZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uLidcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc01lc3NhZ2VGb3JVcygpKSB7XG4gICAgICBwcm9jZXNzTWVzc2FnZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gTm9ybWFsbHkgdGhlIHBhcmVudCBraWNrcyB0aGluZ3Mgb2ZmIHdoZW4gaXQgZGV0ZWN0cyB0aGUgaUZyYW1lIGhhcyBsb2FkZWQuXG4gIC8vIElmIHRoaXMgc2NyaXB0IGlzIGFzeW5jLWxvYWRlZCwgdGhlbiB0ZWxsIHBhcmVudCBwYWdlIHRvIHJldHJ5IGluaXQuXG4gIGZ1bmN0aW9uIGNoa0xhdGVMb2FkZWQoKSB7XG4gICAgaWYgKCdsb2FkaW5nJyAhPT0gZG9jdW1lbnQucmVhZHlTdGF0ZSkge1xuICAgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSgnW2lGcmFtZVJlc2l6ZXJDaGlsZF1SZWFkeScsICcqJylcbiAgICB9XG4gIH1cblxuICBhZGRFdmVudExpc3RlbmVyKHdpbmRvdywgJ21lc3NhZ2UnLCByZWNlaXZlcilcbiAgYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csICdyZWFkeXN0YXRlY2hhbmdlJywgY2hrTGF0ZUxvYWRlZClcbiAgY2hrTGF0ZUxvYWRlZCgpXG5cbiAgXG59KSgpXG4iLCIvKlxuICogRmlsZTogaWZyYW1lUmVzaXplci5qc1xuICogRGVzYzogRm9yY2UgaWZyYW1lcyB0byBzaXplIHRvIGNvbnRlbnQuXG4gKiBSZXF1aXJlczogaWZyYW1lUmVzaXplci5jb250ZW50V2luZG93LmpzIHRvIGJlIGxvYWRlZCBpbnRvIHRoZSB0YXJnZXQgZnJhbWUuXG4gKiBEb2M6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZGpicmFkc2hhdy9pZnJhbWUtcmVzaXplclxuICogQXV0aG9yOiBEYXZpZCBKLiBCcmFkc2hhdyAtIGRhdmVAYnJhZHNoYXcubmV0XG4gKiBDb250cmlidXRvcjogSnVyZSBNYXYgLSBqdXJlLm1hdkBnbWFpbC5jb21cbiAqIENvbnRyaWJ1dG9yOiBSZWVkIERhZG91bmUgLSByZWVkQGRhZG91bmUuY29tXG4gKi9cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvbmFyanMvY29nbml0aXZlLWNvbXBsZXhpdHksIG5vLXNoYWRvdy1yZXN0cmljdGVkLW5hbWVzXG47KGZ1bmN0aW9uICh1bmRlZmluZWQpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gLy8gZG9uJ3QgcnVuIGZvciBzZXJ2ZXIgc2lkZSByZW5kZXJcblxuICB2YXIgY291bnQgPSAwLFxuICAgIGxvZ0VuYWJsZWQgPSBmYWxzZSxcbiAgICBoaWRkZW5DaGVja0VuYWJsZWQgPSBmYWxzZSxcbiAgICBtc2dIZWFkZXIgPSAnbWVzc2FnZScsXG4gICAgbXNnSGVhZGVyTGVuID0gbXNnSGVhZGVyLmxlbmd0aCxcbiAgICBtc2dJZCA9ICdbaUZyYW1lU2l6ZXJdJywgLy8gTXVzdCBtYXRjaCBpZnJhbWUgbXNnIElEXG4gICAgbXNnSWRMZW4gPSBtc2dJZC5sZW5ndGgsXG4gICAgcGFnZVBvc2l0aW9uID0gbnVsbCxcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLFxuICAgIHJlc2V0UmVxdWlyZWRNZXRob2RzID0ge1xuICAgICAgbWF4OiAxLFxuICAgICAgc2Nyb2xsOiAxLFxuICAgICAgYm9keVNjcm9sbDogMSxcbiAgICAgIGRvY3VtZW50RWxlbWVudFNjcm9sbDogMVxuICAgIH0sXG4gICAgc2V0dGluZ3MgPSB7fSxcbiAgICB0aW1lciA9IG51bGwsXG4gICAgZGVmYXVsdHMgPSB7XG4gICAgICBhdXRvUmVzaXplOiB0cnVlLFxuICAgICAgYm9keUJhY2tncm91bmQ6IG51bGwsXG4gICAgICBib2R5TWFyZ2luOiBudWxsLFxuICAgICAgYm9keU1hcmdpblYxOiA4LFxuICAgICAgYm9keVBhZGRpbmc6IG51bGwsXG4gICAgICBjaGVja09yaWdpbjogdHJ1ZSxcbiAgICAgIGluUGFnZUxpbmtzOiBmYWxzZSxcbiAgICAgIGVuYWJsZVB1YmxpY01ldGhvZHM6IHRydWUsXG4gICAgICBoZWlnaHRDYWxjdWxhdGlvbk1ldGhvZDogJ2JvZHlPZmZzZXQnLFxuICAgICAgaWQ6ICdpRnJhbWVSZXNpemVyJyxcbiAgICAgIGludGVydmFsOiAzMixcbiAgICAgIGxvZzogZmFsc2UsXG4gICAgICBtYXhIZWlnaHQ6IEluZmluaXR5LFxuICAgICAgbWF4V2lkdGg6IEluZmluaXR5LFxuICAgICAgbWluSGVpZ2h0OiAwLFxuICAgICAgbWluV2lkdGg6IDAsXG4gICAgICBtb3VzZUV2ZW50czogdHJ1ZSxcbiAgICAgIHJlc2l6ZUZyb206ICdwYXJlbnQnLFxuICAgICAgc2Nyb2xsaW5nOiBmYWxzZSxcbiAgICAgIHNpemVIZWlnaHQ6IHRydWUsXG4gICAgICBzaXplV2lkdGg6IGZhbHNlLFxuICAgICAgd2FybmluZ1RpbWVvdXQ6IDUwMDAsXG4gICAgICB0b2xlcmFuY2U6IDAsXG4gICAgICB3aWR0aENhbGN1bGF0aW9uTWV0aG9kOiAnc2Nyb2xsJyxcbiAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0sXG4gICAgICBvbkNsb3NlZDogZnVuY3Rpb24gKCkge30sXG4gICAgICBvbkluaXQ6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25NZXNzYWdlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhcm4oJ29uTWVzc2FnZSBmdW5jdGlvbiBub3QgZGVmaW5lZCcpXG4gICAgICB9LFxuICAgICAgb25Nb3VzZUVudGVyOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uTW91c2VMZWF2ZTogZnVuY3Rpb24gKCkge30sXG4gICAgICBvblJlc2l6ZWQ6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25TY3JvbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgZnVuY3Rpb24gZ2V0TXV0YXRpb25PYnNlcnZlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIgfHxcbiAgICAgIHdpbmRvdy5XZWJLaXRNdXRhdGlvbk9ic2VydmVyIHx8XG4gICAgICB3aW5kb3cuTW96TXV0YXRpb25PYnNlcnZlclxuICAgIClcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIoZWwsIGV2dCwgZnVuYykge1xuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZ0LCBmdW5jLCBmYWxzZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIoZWwsIGV2dCwgZnVuYykge1xuICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZ0LCBmdW5jLCBmYWxzZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldHVwUmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkge1xuICAgIHZhciB2ZW5kb3JzID0gWydtb3onLCAnd2Via2l0JywgJ28nLCAnbXMnXVxuICAgIHZhciB4XG5cbiAgICAvLyBSZW1vdmUgdmVuZG9yIHByZWZpeGluZyBpZiBwcmVmaXhlZCBhbmQgYnJlYWsgZWFybHkgaWYgbm90XG4gICAgZm9yICh4ID0gMDsgeCA8IHZlbmRvcnMubGVuZ3RoICYmICFyZXF1ZXN0QW5pbWF0aW9uRnJhbWU7IHggKz0gMSkge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93W3ZlbmRvcnNbeF0gKyAnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ11cbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgICAgbG9nKCdzZXR1cCcsICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgbm90IHN1cHBvcnRlZCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZpcmVmb3ggZXh0ZW5zaW9uIGNvbnRlbnQtc2NyaXB0cyBoYXZlIGEgZ2xvYmFsVGhpcyBvYmplY3QgdGhhdCBpcyBub3QgdGhlIHNhbWUgYXMgd2luZG93LlxuICAgICAgLy8gQmluZGluZyBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYCB0byB3aW5kb3cgYWxsb3dzIHRoZSBmdW5jdGlvbiB0byB3b3JrIGFuZCBwcmV2ZW50cyBlcnJvcnNcbiAgICAgIC8vIGJlaW5nIHRocm93biB3aGVuIHJ1biBpbiB0aGF0IGNvbnRleHQsIGFuZCBzaG91bGQgYmUgYSBuby1vcCBpbiBldmVyeSBvdGhlciBjb250ZXh0LlxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE15SUQoaWZyYW1lSWQpIHtcbiAgICB2YXIgcmV0U3RyID0gJ0hvc3QgcGFnZTogJyArIGlmcmFtZUlkXG5cbiAgICBpZiAod2luZG93LnRvcCAhPT0gd2luZG93LnNlbGYpIHtcbiAgICAgIHJldFN0ciA9XG4gICAgICAgIHdpbmRvdy5wYXJlbnRJRnJhbWUgJiYgd2luZG93LnBhcmVudElGcmFtZS5nZXRJZFxuICAgICAgICAgID8gd2luZG93LnBhcmVudElGcmFtZS5nZXRJZCgpICsgJzogJyArIGlmcmFtZUlkXG4gICAgICAgICAgOiAnTmVzdGVkIGhvc3QgcGFnZTogJyArIGlmcmFtZUlkXG4gICAgfVxuXG4gICAgcmV0dXJuIHJldFN0clxuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0TG9nSGVhZGVyKGlmcmFtZUlkKSB7XG4gICAgcmV0dXJuIG1zZ0lkICsgJ1snICsgZ2V0TXlJRChpZnJhbWVJZCkgKyAnXSdcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTG9nRW5hYmxlZChpZnJhbWVJZCkge1xuICAgIHJldHVybiBzZXR0aW5nc1tpZnJhbWVJZF0gPyBzZXR0aW5nc1tpZnJhbWVJZF0ubG9nIDogbG9nRW5hYmxlZFxuICB9XG5cbiAgZnVuY3Rpb24gbG9nKGlmcmFtZUlkLCBtc2cpIHtcbiAgICBvdXRwdXQoJ2xvZycsIGlmcmFtZUlkLCBtc2csIGlzTG9nRW5hYmxlZChpZnJhbWVJZCkpXG4gIH1cblxuICBmdW5jdGlvbiBpbmZvKGlmcmFtZUlkLCBtc2cpIHtcbiAgICBvdXRwdXQoJ2luZm8nLCBpZnJhbWVJZCwgbXNnLCBpc0xvZ0VuYWJsZWQoaWZyYW1lSWQpKVxuICB9XG5cbiAgZnVuY3Rpb24gd2FybihpZnJhbWVJZCwgbXNnKSB7XG4gICAgb3V0cHV0KCd3YXJuJywgaWZyYW1lSWQsIG1zZywgdHJ1ZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIG91dHB1dCh0eXBlLCBpZnJhbWVJZCwgbXNnLCBlbmFibGVkKSB7XG4gICAgaWYgKHRydWUgPT09IGVuYWJsZWQgJiYgJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cuY29uc29sZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGVbdHlwZV0oZm9ybWF0TG9nSGVhZGVyKGlmcmFtZUlkKSwgbXNnKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlGcmFtZUxpc3RlbmVyKGV2ZW50KSB7XG4gICAgZnVuY3Rpb24gcmVzaXplSUZyYW1lKCkge1xuICAgICAgZnVuY3Rpb24gcmVzaXplKCkge1xuICAgICAgICBzZXRTaXplKG1lc3NhZ2VEYXRhKVxuICAgICAgICBzZXRQYWdlUG9zaXRpb24oaWZyYW1lSWQpXG4gICAgICAgIG9uKCdvblJlc2l6ZWQnLCBtZXNzYWdlRGF0YSlcbiAgICAgIH1cblxuICAgICAgZW5zdXJlSW5SYW5nZSgnSGVpZ2h0JylcbiAgICAgIGVuc3VyZUluUmFuZ2UoJ1dpZHRoJylcblxuICAgICAgc3luY1Jlc2l6ZShyZXNpemUsIG1lc3NhZ2VEYXRhLCAnaW5pdCcpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc01zZygpIHtcbiAgICAgIHZhciBkYXRhID0gbXNnLnN1YnN0cihtc2dJZExlbikuc3BsaXQoJzonKVxuICAgICAgdmFyIGhlaWdodCA9IGRhdGFbMV0gPyBwYXJzZUludChkYXRhWzFdLCAxMCkgOiAwXG4gICAgICB2YXIgaWZyYW1lID0gc2V0dGluZ3NbZGF0YVswXV0gJiYgc2V0dGluZ3NbZGF0YVswXV0uaWZyYW1lXG4gICAgICB2YXIgY29tcFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShpZnJhbWUpXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlmcmFtZTogaWZyYW1lLFxuICAgICAgICBpZDogZGF0YVswXSxcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQgKyBnZXRQYWRkaW5nRW5kcyhjb21wU3R5bGUpICsgZ2V0Qm9yZGVyRW5kcyhjb21wU3R5bGUpLFxuICAgICAgICB3aWR0aDogZGF0YVsyXSxcbiAgICAgICAgdHlwZTogZGF0YVszXVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhZGRpbmdFbmRzKGNvbXBTdHlsZSkge1xuICAgICAgaWYgKGNvbXBTdHlsZS5ib3hTaXppbmcgIT09ICdib3JkZXItYm94Jykge1xuICAgICAgICByZXR1cm4gMFxuICAgICAgfVxuICAgICAgdmFyIHRvcCA9IGNvbXBTdHlsZS5wYWRkaW5nVG9wID8gcGFyc2VJbnQoY29tcFN0eWxlLnBhZGRpbmdUb3AsIDEwKSA6IDBcbiAgICAgIHZhciBib3QgPSBjb21wU3R5bGUucGFkZGluZ0JvdHRvbVxuICAgICAgICA/IHBhcnNlSW50KGNvbXBTdHlsZS5wYWRkaW5nQm90dG9tLCAxMClcbiAgICAgICAgOiAwXG4gICAgICByZXR1cm4gdG9wICsgYm90XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Qm9yZGVyRW5kcyhjb21wU3R5bGUpIHtcbiAgICAgIGlmIChjb21wU3R5bGUuYm94U2l6aW5nICE9PSAnYm9yZGVyLWJveCcpIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH1cbiAgICAgIHZhciB0b3AgPSBjb21wU3R5bGUuYm9yZGVyVG9wV2lkdGhcbiAgICAgICAgPyBwYXJzZUludChjb21wU3R5bGUuYm9yZGVyVG9wV2lkdGgsIDEwKVxuICAgICAgICA6IDBcbiAgICAgIHZhciBib3QgPSBjb21wU3R5bGUuYm9yZGVyQm90dG9tV2lkdGhcbiAgICAgICAgPyBwYXJzZUludChjb21wU3R5bGUuYm9yZGVyQm90dG9tV2lkdGgsIDEwKVxuICAgICAgICA6IDBcbiAgICAgIHJldHVybiB0b3AgKyBib3RcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVJblJhbmdlKERpbWVuc2lvbikge1xuICAgICAgdmFyIG1heCA9IE51bWJlcihzZXR0aW5nc1tpZnJhbWVJZF1bJ21heCcgKyBEaW1lbnNpb25dKSxcbiAgICAgICAgbWluID0gTnVtYmVyKHNldHRpbmdzW2lmcmFtZUlkXVsnbWluJyArIERpbWVuc2lvbl0pLFxuICAgICAgICBkaW1lbnNpb24gPSBEaW1lbnNpb24udG9Mb3dlckNhc2UoKSxcbiAgICAgICAgc2l6ZSA9IE51bWJlcihtZXNzYWdlRGF0YVtkaW1lbnNpb25dKVxuXG4gICAgICBsb2coaWZyYW1lSWQsICdDaGVja2luZyAnICsgZGltZW5zaW9uICsgJyBpcyBpbiByYW5nZSAnICsgbWluICsgJy0nICsgbWF4KVxuXG4gICAgICBpZiAoc2l6ZSA8IG1pbikge1xuICAgICAgICBzaXplID0gbWluXG4gICAgICAgIGxvZyhpZnJhbWVJZCwgJ1NldCAnICsgZGltZW5zaW9uICsgJyB0byBtaW4gdmFsdWUnKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2l6ZSA+IG1heCkge1xuICAgICAgICBzaXplID0gbWF4XG4gICAgICAgIGxvZyhpZnJhbWVJZCwgJ1NldCAnICsgZGltZW5zaW9uICsgJyB0byBtYXggdmFsdWUnKVxuICAgICAgfVxuXG4gICAgICBtZXNzYWdlRGF0YVtkaW1lbnNpb25dID0gJycgKyBzaXplXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNNZXNzYWdlRnJvbUlGcmFtZSgpIHtcbiAgICAgIGZ1bmN0aW9uIGNoZWNrQWxsb3dlZE9yaWdpbigpIHtcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tMaXN0KCkge1xuICAgICAgICAgIHZhciBpID0gMCxcbiAgICAgICAgICAgIHJldENvZGUgPSBmYWxzZVxuXG4gICAgICAgICAgbG9nKFxuICAgICAgICAgICAgaWZyYW1lSWQsXG4gICAgICAgICAgICAnQ2hlY2tpbmcgY29ubmVjdGlvbiBpcyBmcm9tIGFsbG93ZWQgbGlzdCBvZiBvcmlnaW5zOiAnICtcbiAgICAgICAgICAgICAgY2hlY2tPcmlnaW5cbiAgICAgICAgICApXG5cbiAgICAgICAgICBmb3IgKDsgaSA8IGNoZWNrT3JpZ2luLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2tPcmlnaW5baV0gPT09IG9yaWdpbikge1xuICAgICAgICAgICAgICByZXRDb2RlID0gdHJ1ZVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmV0Q29kZVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gY2hlY2tTaW5nbGUoKSB7XG4gICAgICAgICAgdmFyIHJlbW90ZUhvc3QgPSBzZXR0aW5nc1tpZnJhbWVJZF0gJiYgc2V0dGluZ3NbaWZyYW1lSWRdLnJlbW90ZUhvc3RcbiAgICAgICAgICBsb2coaWZyYW1lSWQsICdDaGVja2luZyBjb25uZWN0aW9uIGlzIGZyb206ICcgKyByZW1vdGVIb3N0KVxuICAgICAgICAgIHJldHVybiBvcmlnaW4gPT09IHJlbW90ZUhvc3RcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaGVja09yaWdpbi5jb25zdHJ1Y3RvciA9PT0gQXJyYXkgPyBjaGVja0xpc3QoKSA6IGNoZWNrU2luZ2xlKClcbiAgICAgIH1cblxuICAgICAgdmFyIG9yaWdpbiA9IGV2ZW50Lm9yaWdpbixcbiAgICAgICAgY2hlY2tPcmlnaW4gPSBzZXR0aW5nc1tpZnJhbWVJZF0gJiYgc2V0dGluZ3NbaWZyYW1lSWRdLmNoZWNrT3JpZ2luXG5cbiAgICAgIGlmIChjaGVja09yaWdpbiAmJiAnJyArIG9yaWdpbiAhPT0gJ251bGwnICYmICFjaGVja0FsbG93ZWRPcmlnaW4oKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1VuZXhwZWN0ZWQgbWVzc2FnZSByZWNlaXZlZCBmcm9tOiAnICtcbiAgICAgICAgICAgIG9yaWdpbiArXG4gICAgICAgICAgICAnIGZvciAnICtcbiAgICAgICAgICAgIG1lc3NhZ2VEYXRhLmlmcmFtZS5pZCArXG4gICAgICAgICAgICAnLiBNZXNzYWdlIHdhczogJyArXG4gICAgICAgICAgICBldmVudC5kYXRhICtcbiAgICAgICAgICAgICcuIFRoaXMgZXJyb3IgY2FuIGJlIGRpc2FibGVkIGJ5IHNldHRpbmcgdGhlIGNoZWNrT3JpZ2luOiBmYWxzZSBvcHRpb24gb3IgYnkgcHJvdmlkaW5nIG9mIGFycmF5IG9mIHRydXN0ZWQgZG9tYWlucy4nXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01lc3NhZ2VGb3JVcygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIG1zZ0lkID09PSAoJycgKyBtc2cpLnN1YnN0cigwLCBtc2dJZExlbikgJiZcbiAgICAgICAgbXNnLnN1YnN0cihtc2dJZExlbikuc3BsaXQoJzonKVswXSBpbiBzZXR0aW5nc1xuICAgICAgKSAvLyAnJytQcm90ZWN0cyBhZ2FpbnN0IG5vbi1zdHJpbmcgbXNnXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNNZXNzYWdlRnJvbU1ldGFQYXJlbnQoKSB7XG4gICAgICAvLyBUZXN0IGlmIHRoaXMgbWVzc2FnZSBpcyBmcm9tIGEgcGFyZW50IGFib3ZlIHVzLiBUaGlzIGlzIGFuIHVnbHkgdGVzdCwgaG93ZXZlciwgdXBkYXRpbmdcbiAgICAgIC8vIHRoZSBtZXNzYWdlIGZvcm1hdCB3b3VsZCBicmVhayBiYWNrd2FyZHMgY29tcGF0aWJpdHkuXG4gICAgICB2YXIgcmV0Q29kZSA9IG1lc3NhZ2VEYXRhLnR5cGUgaW4geyB0cnVlOiAxLCBmYWxzZTogMSwgdW5kZWZpbmVkOiAxIH1cblxuICAgICAgaWYgKHJldENvZGUpIHtcbiAgICAgICAgbG9nKGlmcmFtZUlkLCAnSWdub3JpbmcgaW5pdCBtZXNzYWdlIGZyb20gbWV0YSBwYXJlbnQgcGFnZScpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXRDb2RlXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0TXNnQm9keShvZmZzZXQpIHtcbiAgICAgIHJldHVybiBtc2cuc3Vic3RyKG1zZy5pbmRleE9mKCc6JykgKyBtc2dIZWFkZXJMZW4gKyBvZmZzZXQpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9yd2FyZE1zZ0Zyb21JRnJhbWUobXNnQm9keSkge1xuICAgICAgbG9nKFxuICAgICAgICBpZnJhbWVJZCxcbiAgICAgICAgJ29uTWVzc2FnZSBwYXNzZWQ6IHtpZnJhbWU6ICcgK1xuICAgICAgICAgIG1lc3NhZ2VEYXRhLmlmcmFtZS5pZCArXG4gICAgICAgICAgJywgbWVzc2FnZTogJyArXG4gICAgICAgICAgbXNnQm9keSArXG4gICAgICAgICAgJ30nXG4gICAgICApXG5cbiAgICAgIG9uKCdvbk1lc3NhZ2UnLCB7XG4gICAgICAgIGlmcmFtZTogbWVzc2FnZURhdGEuaWZyYW1lLFxuICAgICAgICBtZXNzYWdlOiBKU09OLnBhcnNlKG1zZ0JvZHkpXG4gICAgICB9KVxuXG4gICAgICBsb2coaWZyYW1lSWQsICctLScpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFnZUluZm8oKSB7XG4gICAgICB2YXIgYm9keVBvc2l0aW9uID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgaUZyYW1lUG9zaXRpb24gPSBtZXNzYWdlRGF0YS5pZnJhbWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcblxuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgaWZyYW1lSGVpZ2h0OiBpRnJhbWVQb3NpdGlvbi5oZWlnaHQsXG4gICAgICAgIGlmcmFtZVdpZHRoOiBpRnJhbWVQb3NpdGlvbi53aWR0aCxcbiAgICAgICAgY2xpZW50SGVpZ2h0OiBNYXRoLm1heChcbiAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LFxuICAgICAgICAgIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwXG4gICAgICAgICksXG4gICAgICAgIGNsaWVudFdpZHRoOiBNYXRoLm1heChcbiAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsXG4gICAgICAgICAgd2luZG93LmlubmVyV2lkdGggfHwgMFxuICAgICAgICApLFxuICAgICAgICBvZmZzZXRUb3A6IHBhcnNlSW50KGlGcmFtZVBvc2l0aW9uLnRvcCAtIGJvZHlQb3NpdGlvbi50b3AsIDEwKSxcbiAgICAgICAgb2Zmc2V0TGVmdDogcGFyc2VJbnQoaUZyYW1lUG9zaXRpb24ubGVmdCAtIGJvZHlQb3NpdGlvbi5sZWZ0LCAxMCksXG4gICAgICAgIHNjcm9sbFRvcDogd2luZG93LnBhZ2VZT2Zmc2V0LFxuICAgICAgICBzY3JvbGxMZWZ0OiB3aW5kb3cucGFnZVhPZmZzZXQsXG4gICAgICAgIGRvY3VtZW50SGVpZ2h0OiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LFxuICAgICAgICBkb2N1bWVudFdpZHRoOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsXG4gICAgICAgIHdpbmRvd0hlaWdodDogd2luZG93LmlubmVySGVpZ2h0LFxuICAgICAgICB3aW5kb3dXaWR0aDogd2luZG93LmlubmVyV2lkdGhcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2VuZFBhZ2VJbmZvVG9JZnJhbWUoaWZyYW1lLCBpZnJhbWVJZCkge1xuICAgICAgZnVuY3Rpb24gZGVib3VuY2VkVHJpZ2dlcigpIHtcbiAgICAgICAgdHJpZ2dlcignU2VuZCBQYWdlIEluZm8nLCAncGFnZUluZm86JyArIGdldFBhZ2VJbmZvKCksIGlmcmFtZSwgaWZyYW1lSWQpXG4gICAgICB9XG4gICAgICBkZWJvdW5jZUZyYW1lRXZlbnRzKGRlYm91bmNlZFRyaWdnZXIsIDMyLCBpZnJhbWVJZClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdGFydFBhZ2VJbmZvTW9uaXRvcigpIHtcbiAgICAgIGZ1bmN0aW9uIHNldExpc3RlbmVyKHR5cGUsIGZ1bmMpIHtcbiAgICAgICAgZnVuY3Rpb24gc2VuZFBhZ2VJbmZvKCkge1xuICAgICAgICAgIGlmIChzZXR0aW5nc1tpZF0pIHtcbiAgICAgICAgICAgIHNlbmRQYWdlSW5mb1RvSWZyYW1lKHNldHRpbmdzW2lkXS5pZnJhbWUsIGlkKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdG9wKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICA7WydzY3JvbGwnLCAncmVzaXplJ10uZm9yRWFjaChmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAgICAgbG9nKGlkLCB0eXBlICsgZXZ0ICsgJyBsaXN0ZW5lciBmb3Igc2VuZFBhZ2VJbmZvJylcbiAgICAgICAgICBmdW5jKHdpbmRvdywgZXZ0LCBzZW5kUGFnZUluZm8pXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICAgIHNldExpc3RlbmVyKCdSZW1vdmUgJywgcmVtb3ZlRXZlbnRMaXN0ZW5lcilcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gc3RhcnQoKSB7XG4gICAgICAgIHNldExpc3RlbmVyKCdBZGQgJywgYWRkRXZlbnRMaXN0ZW5lcilcbiAgICAgIH1cblxuICAgICAgdmFyIGlkID0gaWZyYW1lSWQgLy8gQ3JlYXRlIGxvY2FsbHkgc2NvcGVkIGNvcHkgb2YgaUZyYW1lIElEXG5cbiAgICAgIHN0YXJ0KClcblxuICAgICAgaWYgKHNldHRpbmdzW2lkXSkge1xuICAgICAgICBzZXR0aW5nc1tpZF0uc3RvcFBhZ2VJbmZvID0gc3RvcFxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0b3BQYWdlSW5mb01vbml0b3IoKSB7XG4gICAgICBpZiAoc2V0dGluZ3NbaWZyYW1lSWRdICYmIHNldHRpbmdzW2lmcmFtZUlkXS5zdG9wUGFnZUluZm8pIHtcbiAgICAgICAgc2V0dGluZ3NbaWZyYW1lSWRdLnN0b3BQYWdlSW5mbygpXG4gICAgICAgIGRlbGV0ZSBzZXR0aW5nc1tpZnJhbWVJZF0uc3RvcFBhZ2VJbmZvXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tJRnJhbWVFeGlzdHMoKSB7XG4gICAgICB2YXIgcmV0Qm9vbCA9IHRydWVcblxuICAgICAgaWYgKG51bGwgPT09IG1lc3NhZ2VEYXRhLmlmcmFtZSkge1xuICAgICAgICB3YXJuKGlmcmFtZUlkLCAnSUZyYW1lICgnICsgbWVzc2FnZURhdGEuaWQgKyAnKSBub3QgZm91bmQnKVxuICAgICAgICByZXRCb29sID0gZmFsc2VcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXRCb29sXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RWxlbWVudFBvc2l0aW9uKHRhcmdldCkge1xuICAgICAgdmFyIGlGcmFtZVBvc2l0aW9uID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG5cbiAgICAgIGdldFBhZ2VQb3NpdGlvbihpZnJhbWVJZClcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogTWF0aC5mbG9vcihOdW1iZXIoaUZyYW1lUG9zaXRpb24ubGVmdCkgKyBOdW1iZXIocGFnZVBvc2l0aW9uLngpKSxcbiAgICAgICAgeTogTWF0aC5mbG9vcihOdW1iZXIoaUZyYW1lUG9zaXRpb24udG9wKSArIE51bWJlcihwYWdlUG9zaXRpb24ueSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2Nyb2xsUmVxdWVzdEZyb21DaGlsZChhZGRPZmZzZXQpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIC8vIE5vdCB0ZXN0YWJsZSBpbiBLYXJtYVxuICAgICAgZnVuY3Rpb24gcmVwb3NpdGlvbigpIHtcbiAgICAgICAgcGFnZVBvc2l0aW9uID0gbmV3UG9zaXRpb25cbiAgICAgICAgc2Nyb2xsVG8oKVxuICAgICAgICBsb2coaWZyYW1lSWQsICctLScpXG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGNhbGNPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeDogTnVtYmVyKG1lc3NhZ2VEYXRhLndpZHRoKSArIG9mZnNldC54LFxuICAgICAgICAgIHk6IE51bWJlcihtZXNzYWdlRGF0YS5oZWlnaHQpICsgb2Zmc2V0LnlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBzY3JvbGxQYXJlbnQoKSB7XG4gICAgICAgIGlmICh3aW5kb3cucGFyZW50SUZyYW1lKSB7XG4gICAgICAgICAgd2luZG93LnBhcmVudElGcmFtZVsnc2Nyb2xsVG8nICsgKGFkZE9mZnNldCA/ICdPZmZzZXQnIDogJycpXShcbiAgICAgICAgICAgIG5ld1Bvc2l0aW9uLngsXG4gICAgICAgICAgICBuZXdQb3NpdGlvbi55XG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICBpZnJhbWVJZCxcbiAgICAgICAgICAgICdVbmFibGUgdG8gc2Nyb2xsIHRvIHJlcXVlc3RlZCBwb3NpdGlvbiwgd2luZG93LnBhcmVudElGcmFtZSBub3QgZm91bmQnXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBvZmZzZXQgPSBhZGRPZmZzZXRcbiAgICAgICAgICA/IGdldEVsZW1lbnRQb3NpdGlvbihtZXNzYWdlRGF0YS5pZnJhbWUpXG4gICAgICAgICAgOiB7IHg6IDAsIHk6IDAgfSxcbiAgICAgICAgbmV3UG9zaXRpb24gPSBjYWxjT2Zmc2V0KClcblxuICAgICAgbG9nKFxuICAgICAgICBpZnJhbWVJZCxcbiAgICAgICAgJ1JlcG9zaXRpb24gcmVxdWVzdGVkIGZyb20gaUZyYW1lIChvZmZzZXQgeDonICtcbiAgICAgICAgICBvZmZzZXQueCArXG4gICAgICAgICAgJyB5OicgK1xuICAgICAgICAgIG9mZnNldC55ICtcbiAgICAgICAgICAnKSdcbiAgICAgIClcblxuICAgICAgaWYgKHdpbmRvdy50b3AgIT09IHdpbmRvdy5zZWxmKSB7XG4gICAgICAgIHNjcm9sbFBhcmVudCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXBvc2l0aW9uKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzY3JvbGxUbygpIHtcbiAgICAgIGlmIChmYWxzZSAhPT0gb24oJ29uU2Nyb2xsJywgcGFnZVBvc2l0aW9uKSkge1xuICAgICAgICBzZXRQYWdlUG9zaXRpb24oaWZyYW1lSWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1bnNldFBhZ2VQb3NpdGlvbigpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmluZFRhcmdldChsb2NhdGlvbikge1xuICAgICAgZnVuY3Rpb24ganVtcFRvVGFyZ2V0KCkge1xuICAgICAgICB2YXIganVtcFBvc2l0aW9uID0gZ2V0RWxlbWVudFBvc2l0aW9uKHRhcmdldClcblxuICAgICAgICBsb2coXG4gICAgICAgICAgaWZyYW1lSWQsXG4gICAgICAgICAgJ01vdmluZyB0byBpbiBwYWdlIGxpbmsgKCMnICtcbiAgICAgICAgICAgIGhhc2ggK1xuICAgICAgICAgICAgJykgYXQgeDogJyArXG4gICAgICAgICAgICBqdW1wUG9zaXRpb24ueCArXG4gICAgICAgICAgICAnIHk6ICcgK1xuICAgICAgICAgICAganVtcFBvc2l0aW9uLnlcbiAgICAgICAgKVxuICAgICAgICBwYWdlUG9zaXRpb24gPSB7XG4gICAgICAgICAgeDoganVtcFBvc2l0aW9uLngsXG4gICAgICAgICAgeToganVtcFBvc2l0aW9uLnlcbiAgICAgICAgfVxuXG4gICAgICAgIHNjcm9sbFRvKClcbiAgICAgICAgbG9nKGlmcmFtZUlkLCAnLS0nKVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBqdW1wVG9QYXJlbnQoKSB7XG4gICAgICAgIGlmICh3aW5kb3cucGFyZW50SUZyYW1lKSB7XG4gICAgICAgICAgd2luZG93LnBhcmVudElGcmFtZS5tb3ZlVG9BbmNob3IoaGFzaClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2coXG4gICAgICAgICAgICBpZnJhbWVJZCxcbiAgICAgICAgICAgICdJbiBwYWdlIGxpbmsgIycgK1xuICAgICAgICAgICAgICBoYXNoICtcbiAgICAgICAgICAgICAgJyBub3QgZm91bmQgYW5kIHdpbmRvdy5wYXJlbnRJRnJhbWUgbm90IGZvdW5kJ1xuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgaGFzaCA9IGxvY2F0aW9uLnNwbGl0KCcjJylbMV0gfHwgJycsXG4gICAgICAgIGhhc2hEYXRhID0gZGVjb2RlVVJJQ29tcG9uZW50KGhhc2gpLFxuICAgICAgICB0YXJnZXQgPVxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGhhc2hEYXRhKSB8fFxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGhhc2hEYXRhKVswXVxuXG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGp1bXBUb1RhcmdldCgpXG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy50b3AgIT09IHdpbmRvdy5zZWxmKSB7XG4gICAgICAgIGp1bXBUb1BhcmVudCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coaWZyYW1lSWQsICdJbiBwYWdlIGxpbmsgIycgKyBoYXNoICsgJyBub3QgZm91bmQnKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uTW91c2UoZXZlbnQpIHtcbiAgICAgIHZhciBtb3VzZVBvcyA9IHt9XG5cbiAgICAgIGlmIChOdW1iZXIobWVzc2FnZURhdGEud2lkdGgpID09PSAwICYmIE51bWJlcihtZXNzYWdlRGF0YS5oZWlnaHQpID09PSAwKSB7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0TXNnQm9keSg5KS5zcGxpdCgnOicpXG4gICAgICAgIG1vdXNlUG9zID0ge1xuICAgICAgICAgIHg6IGRhdGFbMV0sXG4gICAgICAgICAgeTogZGF0YVswXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtb3VzZVBvcyA9IHtcbiAgICAgICAgICB4OiBtZXNzYWdlRGF0YS53aWR0aCxcbiAgICAgICAgICB5OiBtZXNzYWdlRGF0YS5oZWlnaHRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBvbihldmVudCwge1xuICAgICAgICBpZnJhbWU6IG1lc3NhZ2VEYXRhLmlmcmFtZSxcbiAgICAgICAgc2NyZWVuWDogTnVtYmVyKG1vdXNlUG9zLngpLFxuICAgICAgICBzY3JlZW5ZOiBOdW1iZXIobW91c2VQb3MueSksXG4gICAgICAgIHR5cGU6IG1lc3NhZ2VEYXRhLnR5cGVcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb24oZnVuY05hbWUsIHZhbCkge1xuICAgICAgcmV0dXJuIGNoa0V2ZW50KGlmcmFtZUlkLCBmdW5jTmFtZSwgdmFsKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFjdGlvbk1zZygpIHtcbiAgICAgIGlmIChzZXR0aW5nc1tpZnJhbWVJZF0gJiYgc2V0dGluZ3NbaWZyYW1lSWRdLmZpcnN0UnVuKSBmaXJzdFJ1bigpXG5cbiAgICAgIHN3aXRjaCAobWVzc2FnZURhdGEudHlwZSkge1xuICAgICAgICBjYXNlICdjbG9zZSc6XG4gICAgICAgICAgY2xvc2VJRnJhbWUobWVzc2FnZURhdGEuaWZyYW1lKVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnbWVzc2FnZSc6XG4gICAgICAgICAgZm9yd2FyZE1zZ0Zyb21JRnJhbWUoZ2V0TXNnQm9keSg2KSlcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ21vdXNlZW50ZXInOlxuICAgICAgICAgIG9uTW91c2UoJ29uTW91c2VFbnRlcicpXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdtb3VzZWxlYXZlJzpcbiAgICAgICAgICBvbk1vdXNlKCdvbk1vdXNlTGVhdmUnKVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnYXV0b1Jlc2l6ZSc6XG4gICAgICAgICAgc2V0dGluZ3NbaWZyYW1lSWRdLmF1dG9SZXNpemUgPSBKU09OLnBhcnNlKGdldE1zZ0JvZHkoOSkpXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdzY3JvbGxUbyc6XG4gICAgICAgICAgc2Nyb2xsUmVxdWVzdEZyb21DaGlsZChmYWxzZSlcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ3Njcm9sbFRvT2Zmc2V0JzpcbiAgICAgICAgICBzY3JvbGxSZXF1ZXN0RnJvbUNoaWxkKHRydWUpXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdwYWdlSW5mbyc6XG4gICAgICAgICAgc2VuZFBhZ2VJbmZvVG9JZnJhbWUoXG4gICAgICAgICAgICBzZXR0aW5nc1tpZnJhbWVJZF0gJiYgc2V0dGluZ3NbaWZyYW1lSWRdLmlmcmFtZSxcbiAgICAgICAgICAgIGlmcmFtZUlkXG4gICAgICAgICAgKVxuICAgICAgICAgIHN0YXJ0UGFnZUluZm9Nb25pdG9yKClcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ3BhZ2VJbmZvU3RvcCc6XG4gICAgICAgICAgc3RvcFBhZ2VJbmZvTW9uaXRvcigpXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdpblBhZ2VMaW5rJzpcbiAgICAgICAgICBmaW5kVGFyZ2V0KGdldE1zZ0JvZHkoOSkpXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdyZXNldCc6XG4gICAgICAgICAgcmVzZXRJRnJhbWUobWVzc2FnZURhdGEpXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdpbml0JzpcbiAgICAgICAgICByZXNpemVJRnJhbWUoKVxuICAgICAgICAgIG9uKCdvbkluaXQnLCBtZXNzYWdlRGF0YS5pZnJhbWUpXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIE51bWJlcihtZXNzYWdlRGF0YS53aWR0aCkgPT09IDAgJiZcbiAgICAgICAgICAgIE51bWJlcihtZXNzYWdlRGF0YS5oZWlnaHQpID09PSAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAnVW5zdXBwb3J0ZWQgbWVzc2FnZSByZWNlaXZlZCAoJyArXG4gICAgICAgICAgICAgICAgbWVzc2FnZURhdGEudHlwZSArXG4gICAgICAgICAgICAgICAgJyksIHRoaXMgaXMgbGlrZWx5IGR1ZSB0byB0aGUgaWZyYW1lIGNvbnRhaW5pbmcgYSBsYXRlciAnICtcbiAgICAgICAgICAgICAgICAndmVyc2lvbiBvZiBpZnJhbWUtcmVzaXplciB0aGFuIHRoZSBwYXJlbnQgcGFnZSdcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzaXplSUZyYW1lKClcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzU2V0dGluZ3MoaWZyYW1lSWQpIHtcbiAgICAgIHZhciByZXRCb29sID0gdHJ1ZVxuXG4gICAgICBpZiAoIXNldHRpbmdzW2lmcmFtZUlkXSkge1xuICAgICAgICByZXRCb29sID0gZmFsc2VcbiAgICAgICAgd2FybihcbiAgICAgICAgICBtZXNzYWdlRGF0YS50eXBlICtcbiAgICAgICAgICAgICcgTm8gc2V0dGluZ3MgZm9yICcgK1xuICAgICAgICAgICAgaWZyYW1lSWQgK1xuICAgICAgICAgICAgJy4gTWVzc2FnZSB3YXM6ICcgK1xuICAgICAgICAgICAgbXNnXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldEJvb2xcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpRnJhbWVSZWFkeU1zZ1JlY2VpdmVkKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBndWFyZC1mb3ItaW5cbiAgICAgIGZvciAodmFyIGlmcmFtZUlkIGluIHNldHRpbmdzKSB7XG4gICAgICAgIHRyaWdnZXIoXG4gICAgICAgICAgJ2lGcmFtZSByZXF1ZXN0ZWQgaW5pdCcsXG4gICAgICAgICAgY3JlYXRlT3V0Z29pbmdNc2coaWZyYW1lSWQpLFxuICAgICAgICAgIHNldHRpbmdzW2lmcmFtZUlkXS5pZnJhbWUsXG4gICAgICAgICAgaWZyYW1lSWRcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpcnN0UnVuKCkge1xuICAgICAgaWYgKHNldHRpbmdzW2lmcmFtZUlkXSkge1xuICAgICAgICBzZXR0aW5nc1tpZnJhbWVJZF0uZmlyc3RSdW4gPSBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBtc2cgPSBldmVudC5kYXRhLFxuICAgICAgbWVzc2FnZURhdGEgPSB7fSxcbiAgICAgIGlmcmFtZUlkID0gbnVsbFxuXG4gICAgaWYgKCdbaUZyYW1lUmVzaXplckNoaWxkXVJlYWR5JyA9PT0gbXNnKSB7XG4gICAgICBpRnJhbWVSZWFkeU1zZ1JlY2VpdmVkKClcbiAgICB9IGVsc2UgaWYgKGlzTWVzc2FnZUZvclVzKCkpIHtcbiAgICAgIG1lc3NhZ2VEYXRhID0gcHJvY2Vzc01zZygpXG4gICAgICBpZnJhbWVJZCA9IG1lc3NhZ2VEYXRhLmlkXG4gICAgICBpZiAoc2V0dGluZ3NbaWZyYW1lSWRdKSB7XG4gICAgICAgIHNldHRpbmdzW2lmcmFtZUlkXS5sb2FkZWQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmICghaXNNZXNzYWdlRnJvbU1ldGFQYXJlbnQoKSAmJiBoYXNTZXR0aW5ncyhpZnJhbWVJZCkpIHtcbiAgICAgICAgbG9nKGlmcmFtZUlkLCAnUmVjZWl2ZWQ6ICcgKyBtc2cpXG5cbiAgICAgICAgaWYgKGNoZWNrSUZyYW1lRXhpc3RzKCkgJiYgaXNNZXNzYWdlRnJvbUlGcmFtZSgpKSB7XG4gICAgICAgICAgYWN0aW9uTXNnKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpbmZvKGlmcmFtZUlkLCAnSWdub3JlZDogJyArIG1zZylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGtFdmVudChpZnJhbWVJZCwgZnVuY05hbWUsIHZhbCkge1xuICAgIHZhciBmdW5jID0gbnVsbCxcbiAgICAgIHJldFZhbCA9IG51bGxcblxuICAgIGlmIChzZXR0aW5nc1tpZnJhbWVJZF0pIHtcbiAgICAgIGZ1bmMgPSBzZXR0aW5nc1tpZnJhbWVJZF1bZnVuY05hbWVdXG5cbiAgICAgIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgZnVuYykge1xuICAgICAgICByZXRWYWwgPSBmdW5jKHZhbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgZnVuY05hbWUgKyAnIG9uIGlGcmFtZVsnICsgaWZyYW1lSWQgKyAnXSBpcyBub3QgYSBmdW5jdGlvbidcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXRWYWxcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUlmcmFtZUxpc3RlbmVycyhpZnJhbWUpIHtcbiAgICB2YXIgaWZyYW1lSWQgPSBpZnJhbWUuaWRcbiAgICBkZWxldGUgc2V0dGluZ3NbaWZyYW1lSWRdXG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZUlGcmFtZShpZnJhbWUpIHtcbiAgICB2YXIgaWZyYW1lSWQgPSBpZnJhbWUuaWRcbiAgICBpZiAoY2hrRXZlbnQoaWZyYW1lSWQsICdvbkNsb3NlJywgaWZyYW1lSWQpID09PSBmYWxzZSkge1xuICAgICAgbG9nKGlmcmFtZUlkLCAnQ2xvc2UgaWZyYW1lIGNhbmNlbGxlZCBieSBvbkNsb3NlIGV2ZW50JylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBsb2coaWZyYW1lSWQsICdSZW1vdmluZyBpRnJhbWU6ICcgKyBpZnJhbWVJZClcblxuICAgIHRyeSB7XG4gICAgICAvLyBDYXRjaCByYWNlIGNvbmRpdGlvbiBlcnJvciB3aXRoIFJlYWN0XG4gICAgICBpZiAoaWZyYW1lLnBhcmVudE5vZGUpIHtcbiAgICAgICAgaWZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaWZyYW1lKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB3YXJuKGVycm9yKVxuICAgIH1cblxuICAgIGNoa0V2ZW50KGlmcmFtZUlkLCAnb25DbG9zZWQnLCBpZnJhbWVJZClcbiAgICBsb2coaWZyYW1lSWQsICctLScpXG4gICAgcmVtb3ZlSWZyYW1lTGlzdGVuZXJzKGlmcmFtZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFBhZ2VQb3NpdGlvbihpZnJhbWVJZCkge1xuICAgIGlmIChudWxsID09PSBwYWdlUG9zaXRpb24pIHtcbiAgICAgIHBhZ2VQb3NpdGlvbiA9IHtcbiAgICAgICAgeDpcbiAgICAgICAgICB3aW5kb3cucGFnZVhPZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB3aW5kb3cucGFnZVhPZmZzZXRcbiAgICAgICAgICAgIDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQsXG4gICAgICAgIHk6XG4gICAgICAgICAgd2luZG93LnBhZ2VZT2Zmc2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gd2luZG93LnBhZ2VZT2Zmc2V0XG4gICAgICAgICAgICA6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3BcbiAgICAgIH1cbiAgICAgIGxvZyhcbiAgICAgICAgaWZyYW1lSWQsXG4gICAgICAgICdHZXQgcGFnZSBwb3NpdGlvbjogJyArIHBhZ2VQb3NpdGlvbi54ICsgJywnICsgcGFnZVBvc2l0aW9uLnlcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXRQYWdlUG9zaXRpb24oaWZyYW1lSWQpIHtcbiAgICBpZiAobnVsbCAhPT0gcGFnZVBvc2l0aW9uKSB7XG4gICAgICB3aW5kb3cuc2Nyb2xsVG8ocGFnZVBvc2l0aW9uLngsIHBhZ2VQb3NpdGlvbi55KVxuICAgICAgbG9nKFxuICAgICAgICBpZnJhbWVJZCxcbiAgICAgICAgJ1NldCBwYWdlIHBvc2l0aW9uOiAnICsgcGFnZVBvc2l0aW9uLnggKyAnLCcgKyBwYWdlUG9zaXRpb24ueVxuICAgICAgKVxuICAgICAgdW5zZXRQYWdlUG9zaXRpb24oKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVuc2V0UGFnZVBvc2l0aW9uKCkge1xuICAgIHBhZ2VQb3NpdGlvbiA9IG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0SUZyYW1lKG1lc3NhZ2VEYXRhKSB7XG4gICAgZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICBzZXRTaXplKG1lc3NhZ2VEYXRhKVxuICAgICAgdHJpZ2dlcigncmVzZXQnLCAncmVzZXQnLCBtZXNzYWdlRGF0YS5pZnJhbWUsIG1lc3NhZ2VEYXRhLmlkKVxuICAgIH1cblxuICAgIGxvZyhcbiAgICAgIG1lc3NhZ2VEYXRhLmlkLFxuICAgICAgJ1NpemUgcmVzZXQgcmVxdWVzdGVkIGJ5ICcgK1xuICAgICAgICAoJ2luaXQnID09PSBtZXNzYWdlRGF0YS50eXBlID8gJ2hvc3QgcGFnZScgOiAnaUZyYW1lJylcbiAgICApXG4gICAgZ2V0UGFnZVBvc2l0aW9uKG1lc3NhZ2VEYXRhLmlkKVxuICAgIHN5bmNSZXNpemUocmVzZXQsIG1lc3NhZ2VEYXRhLCAncmVzZXQnKVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0U2l6ZShtZXNzYWdlRGF0YSkge1xuICAgIGZ1bmN0aW9uIHNldERpbWVuc2lvbihkaW1lbnNpb24pIHtcbiAgICAgIGlmICghbWVzc2FnZURhdGEuaWQpIHtcbiAgICAgICAgbG9nKCd1bmRlZmluZWQnLCAnbWVzc2FnZURhdGEgaWQgbm90IHNldCcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgbWVzc2FnZURhdGEuaWZyYW1lLnN0eWxlW2RpbWVuc2lvbl0gPSBtZXNzYWdlRGF0YVtkaW1lbnNpb25dICsgJ3B4J1xuICAgICAgbG9nKFxuICAgICAgICBtZXNzYWdlRGF0YS5pZCxcbiAgICAgICAgJ0lGcmFtZSAoJyArXG4gICAgICAgICAgaWZyYW1lSWQgK1xuICAgICAgICAgICcpICcgK1xuICAgICAgICAgIGRpbWVuc2lvbiArXG4gICAgICAgICAgJyBzZXQgdG8gJyArXG4gICAgICAgICAgbWVzc2FnZURhdGFbZGltZW5zaW9uXSArXG4gICAgICAgICAgJ3B4J1xuICAgICAgKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoa1plcm8oZGltZW5zaW9uKSB7XG4gICAgICAvLyBGaXJlRm94IHNldHMgZGltZW5zaW9uIG9mIGhpZGRlbiBpRnJhbWVzIHRvIHplcm8uXG4gICAgICAvLyBTbyBpZiB3ZSBkZXRlY3QgdGhhdCBzZXQgdXAgYW4gZXZlbnQgdG8gY2hlY2sgZm9yXG4gICAgICAvLyB3aGVuIGlGcmFtZSBiZWNvbWVzIHZpc2libGUuXG5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIC8vIE5vdCB0ZXN0YWJsZSBpbiBQaGFudG9tSlNcbiAgICAgIGlmICghaGlkZGVuQ2hlY2tFbmFibGVkICYmICcwJyA9PT0gbWVzc2FnZURhdGFbZGltZW5zaW9uXSkge1xuICAgICAgICBoaWRkZW5DaGVja0VuYWJsZWQgPSB0cnVlXG4gICAgICAgIGxvZyhpZnJhbWVJZCwgJ0hpZGRlbiBpRnJhbWUgZGV0ZWN0ZWQsIGNyZWF0aW5nIHZpc2liaWxpdHkgbGlzdGVuZXInKVxuICAgICAgICBmaXhIaWRkZW5JRnJhbWVzKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzRGltZW5zaW9uKGRpbWVuc2lvbikge1xuICAgICAgc2V0RGltZW5zaW9uKGRpbWVuc2lvbilcbiAgICAgIGNoa1plcm8oZGltZW5zaW9uKVxuICAgIH1cblxuICAgIHZhciBpZnJhbWVJZCA9IG1lc3NhZ2VEYXRhLmlmcmFtZS5pZFxuXG4gICAgaWYgKHNldHRpbmdzW2lmcmFtZUlkXSkge1xuICAgICAgaWYgKHNldHRpbmdzW2lmcmFtZUlkXS5zaXplSGVpZ2h0KSB7XG4gICAgICAgIHByb2Nlc3NEaW1lbnNpb24oJ2hlaWdodCcpXG4gICAgICB9XG4gICAgICBpZiAoc2V0dGluZ3NbaWZyYW1lSWRdLnNpemVXaWR0aCkge1xuICAgICAgICBwcm9jZXNzRGltZW5zaW9uKCd3aWR0aCcpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3luY1Jlc2l6ZShmdW5jLCBtZXNzYWdlRGF0YSwgZG9Ob3RTeW5jKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovIC8vIE5vdCB0ZXN0YWJsZSBpbiBQaGFudG9tSlNcbiAgICBpZiAoXG4gICAgICBkb05vdFN5bmMgIT09IG1lc3NhZ2VEYXRhLnR5cGUgJiZcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSAmJlxuICAgICAgLy8gaW5jbHVkaW5nIGNoZWNrIGZvciBqYXNtaW5lIGJlY2F1c2UgaGFkIHRyb3VibGUgZ2V0dGluZyBzcHkgdG8gd29yayBpbiB1bml0IHRlc3QgdXNpbmcgcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgICAhd2luZG93Lmphc21pbmVcbiAgICApIHtcbiAgICAgIGxvZyhtZXNzYWdlRGF0YS5pZCwgJ1JlcXVlc3RpbmcgYW5pbWF0aW9uIGZyYW1lJylcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jKVxuICAgIH0gZWxzZSB7XG4gICAgICBmdW5jKClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0cmlnZ2VyKGNhbGxlZU1zZywgbXNnLCBpZnJhbWUsIGlkLCBub1Jlc3BvbnNlV2FybmluZykge1xuICAgIGZ1bmN0aW9uIHBvc3RNZXNzYWdlVG9JRnJhbWUoKSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gc2V0dGluZ3NbaWRdICYmIHNldHRpbmdzW2lkXS50YXJnZXRPcmlnaW5cbiAgICAgIGxvZyhcbiAgICAgICAgaWQsXG4gICAgICAgICdbJyArXG4gICAgICAgICAgY2FsbGVlTXNnICtcbiAgICAgICAgICAnXSBTZW5kaW5nIG1zZyB0byBpZnJhbWVbJyArXG4gICAgICAgICAgaWQgK1xuICAgICAgICAgICddICgnICtcbiAgICAgICAgICBtc2cgK1xuICAgICAgICAgICcpIHRhcmdldE9yaWdpbjogJyArXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICApXG4gICAgICBpZnJhbWUuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZShtc2dJZCArIG1zZywgdGFyZ2V0KVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlGcmFtZU5vdEZvdW5kKCkge1xuICAgICAgd2FybihpZCwgJ1snICsgY2FsbGVlTXNnICsgJ10gSUZyYW1lKCcgKyBpZCArICcpIG5vdCBmb3VuZCcpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hrQW5kU2VuZCgpIHtcbiAgICAgIGlmIChcbiAgICAgICAgaWZyYW1lICYmXG4gICAgICAgICdjb250ZW50V2luZG93JyBpbiBpZnJhbWUgJiZcbiAgICAgICAgbnVsbCAhPT0gaWZyYW1lLmNvbnRlbnRXaW5kb3dcbiAgICAgICkge1xuICAgICAgICAvLyBOdWxsIHRlc3QgZm9yIFBoYW50b21KU1xuICAgICAgICBwb3N0TWVzc2FnZVRvSUZyYW1lKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlGcmFtZU5vdEZvdW5kKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuT25Ob1Jlc3BvbnNlKCkge1xuICAgICAgZnVuY3Rpb24gd2FybmluZygpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzW2lkXSAmJiAhc2V0dGluZ3NbaWRdLmxvYWRlZCAmJiAhZXJyb3JTaG93bikge1xuICAgICAgICAgIGVycm9yU2hvd24gPSB0cnVlXG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgJ0lGcmFtZSBoYXMgbm90IHJlc3BvbmRlZCB3aXRoaW4gJyArXG4gICAgICAgICAgICAgIHNldHRpbmdzW2lkXS53YXJuaW5nVGltZW91dCAvIDEwMDAgK1xuICAgICAgICAgICAgICAnIHNlY29uZHMuIENoZWNrIGlGcmFtZVJlc2l6ZXIuY29udGVudFdpbmRvdy5qcyBoYXMgYmVlbiBsb2FkZWQgaW4gaUZyYW1lLiBUaGlzIG1lc3NhZ2UgY2FuIGJlIGlnbm9yZWQgaWYgZXZlcnl0aGluZyBpcyB3b3JraW5nLCBvciB5b3UgY2FuIHNldCB0aGUgd2FybmluZ1RpbWVvdXQgb3B0aW9uIHRvIGEgaGlnaGVyIHZhbHVlIG9yIHplcm8gdG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nLidcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAhIW5vUmVzcG9uc2VXYXJuaW5nICYmXG4gICAgICAgIHNldHRpbmdzW2lkXSAmJlxuICAgICAgICAhIXNldHRpbmdzW2lkXS53YXJuaW5nVGltZW91dFxuICAgICAgKSB7XG4gICAgICAgIHNldHRpbmdzW2lkXS5tc2dUaW1lb3V0ID0gc2V0VGltZW91dChcbiAgICAgICAgICB3YXJuaW5nLFxuICAgICAgICAgIHNldHRpbmdzW2lkXS53YXJuaW5nVGltZW91dFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGVycm9yU2hvd24gPSBmYWxzZVxuXG4gICAgaWQgPSBpZCB8fCBpZnJhbWUuaWRcblxuICAgIGlmIChzZXR0aW5nc1tpZF0pIHtcbiAgICAgIGNoa0FuZFNlbmQoKVxuICAgICAgd2Fybk9uTm9SZXNwb25zZSgpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT3V0Z29pbmdNc2coaWZyYW1lSWQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgaWZyYW1lSWQgK1xuICAgICAgJzonICtcbiAgICAgIHNldHRpbmdzW2lmcmFtZUlkXS5ib2R5TWFyZ2luVjEgK1xuICAgICAgJzonICtcbiAgICAgIHNldHRpbmdzW2lmcmFtZUlkXS5zaXplV2lkdGggK1xuICAgICAgJzonICtcbiAgICAgIHNldHRpbmdzW2lmcmFtZUlkXS5sb2cgK1xuICAgICAgJzonICtcbiAgICAgIHNldHRpbmdzW2lmcmFtZUlkXS5pbnRlcnZhbCArXG4gICAgICAnOicgK1xuICAgICAgc2V0dGluZ3NbaWZyYW1lSWRdLmVuYWJsZVB1YmxpY01ldGhvZHMgK1xuICAgICAgJzonICtcbiAgICAgIHNldHRpbmdzW2lmcmFtZUlkXS5hdXRvUmVzaXplICtcbiAgICAgICc6JyArXG4gICAgICBzZXR0aW5nc1tpZnJhbWVJZF0uYm9keU1hcmdpbiArXG4gICAgICAnOicgK1xuICAgICAgc2V0dGluZ3NbaWZyYW1lSWRdLmhlaWdodENhbGN1bGF0aW9uTWV0aG9kICtcbiAgICAgICc6JyArXG4gICAgICBzZXR0aW5nc1tpZnJhbWVJZF0uYm9keUJhY2tncm91bmQgK1xuICAgICAgJzonICtcbiAgICAgIHNldHRpbmdzW2lmcmFtZUlkXS5ib2R5UGFkZGluZyArXG4gICAgICAnOicgK1xuICAgICAgc2V0dGluZ3NbaWZyYW1lSWRdLnRvbGVyYW5jZSArXG4gICAgICAnOicgK1xuICAgICAgc2V0dGluZ3NbaWZyYW1lSWRdLmluUGFnZUxpbmtzICtcbiAgICAgICc6JyArXG4gICAgICBzZXR0aW5nc1tpZnJhbWVJZF0ucmVzaXplRnJvbSArXG4gICAgICAnOicgK1xuICAgICAgc2V0dGluZ3NbaWZyYW1lSWRdLndpZHRoQ2FsY3VsYXRpb25NZXRob2QgK1xuICAgICAgJzonICtcbiAgICAgIHNldHRpbmdzW2lmcmFtZUlkXS5tb3VzZUV2ZW50c1xuICAgIClcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcidcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldHVwSUZyYW1lKGlmcmFtZSwgb3B0aW9ucykge1xuICAgIGZ1bmN0aW9uIHNldExpbWl0cygpIHtcbiAgICAgIGZ1bmN0aW9uIGFkZFN0eWxlKHN0eWxlKSB7XG4gICAgICAgIHZhciBzdHlsZVZhbHVlID0gc2V0dGluZ3NbaWZyYW1lSWRdW3N0eWxlXVxuICAgICAgICBpZiAoSW5maW5pdHkgIT09IHN0eWxlVmFsdWUgJiYgMCAhPT0gc3R5bGVWYWx1ZSkge1xuICAgICAgICAgIGlmcmFtZS5zdHlsZVtzdHlsZV0gPSBpc051bWJlcihzdHlsZVZhbHVlKVxuICAgICAgICAgICAgPyBzdHlsZVZhbHVlICsgJ3B4J1xuICAgICAgICAgICAgOiBzdHlsZVZhbHVlXG4gICAgICAgICAgbG9nKGlmcmFtZUlkLCAnU2V0ICcgKyBzdHlsZSArICcgPSAnICsgaWZyYW1lLnN0eWxlW3N0eWxlXSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBjaGtNaW5NYXgoZGltZW5zaW9uKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzZXR0aW5nc1tpZnJhbWVJZF1bJ21pbicgKyBkaW1lbnNpb25dID5cbiAgICAgICAgICBzZXR0aW5nc1tpZnJhbWVJZF1bJ21heCcgKyBkaW1lbnNpb25dXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdWYWx1ZSBmb3IgbWluJyArXG4gICAgICAgICAgICAgIGRpbWVuc2lvbiArXG4gICAgICAgICAgICAgICcgY2FuIG5vdCBiZSBncmVhdGVyIHRoYW4gbWF4JyArXG4gICAgICAgICAgICAgIGRpbWVuc2lvblxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjaGtNaW5NYXgoJ0hlaWdodCcpXG4gICAgICBjaGtNaW5NYXgoJ1dpZHRoJylcblxuICAgICAgYWRkU3R5bGUoJ21heEhlaWdodCcpXG4gICAgICBhZGRTdHlsZSgnbWluSGVpZ2h0JylcbiAgICAgIGFkZFN0eWxlKCdtYXhXaWR0aCcpXG4gICAgICBhZGRTdHlsZSgnbWluV2lkdGgnKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5ld0lkKCkge1xuICAgICAgdmFyIGlkID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5pZCkgfHwgZGVmYXVsdHMuaWQgKyBjb3VudCsrXG4gICAgICBpZiAobnVsbCAhPT0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpKSB7XG4gICAgICAgIGlkICs9IGNvdW50KytcbiAgICAgIH1cbiAgICAgIHJldHVybiBpZFxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuc3VyZUhhc0lkKGlmcmFtZUlkKSB7XG4gICAgICBpZiAoJycgPT09IGlmcmFtZUlkKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tdWx0aS1hc3NpZ25cbiAgICAgICAgaWZyYW1lLmlkID0gaWZyYW1lSWQgPSBuZXdJZCgpXG4gICAgICAgIGxvZ0VuYWJsZWQgPSAob3B0aW9ucyB8fCB7fSkubG9nXG4gICAgICAgIGxvZyhcbiAgICAgICAgICBpZnJhbWVJZCxcbiAgICAgICAgICAnQWRkZWQgbWlzc2luZyBpZnJhbWUgSUQ6ICcgKyBpZnJhbWVJZCArICcgKCcgKyBpZnJhbWUuc3JjICsgJyknXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGlmcmFtZUlkXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0U2Nyb2xsaW5nKCkge1xuICAgICAgbG9nKFxuICAgICAgICBpZnJhbWVJZCxcbiAgICAgICAgJ0lGcmFtZSBzY3JvbGxpbmcgJyArXG4gICAgICAgICAgKHNldHRpbmdzW2lmcmFtZUlkXSAmJiBzZXR0aW5nc1tpZnJhbWVJZF0uc2Nyb2xsaW5nXG4gICAgICAgICAgICA/ICdlbmFibGVkJ1xuICAgICAgICAgICAgOiAnZGlzYWJsZWQnKSArXG4gICAgICAgICAgJyBmb3IgJyArXG4gICAgICAgICAgaWZyYW1lSWRcbiAgICAgIClcbiAgICAgIGlmcmFtZS5zdHlsZS5vdmVyZmxvdyA9XG4gICAgICAgIGZhbHNlID09PSAoc2V0dGluZ3NbaWZyYW1lSWRdICYmIHNldHRpbmdzW2lmcmFtZUlkXS5zY3JvbGxpbmcpXG4gICAgICAgICAgPyAnaGlkZGVuJ1xuICAgICAgICAgIDogJ2F1dG8nXG4gICAgICBzd2l0Y2ggKHNldHRpbmdzW2lmcmFtZUlkXSAmJiBzZXR0aW5nc1tpZnJhbWVJZF0uc2Nyb2xsaW5nKSB7XG4gICAgICAgIGNhc2UgJ29taXQnOlxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSB0cnVlOlxuICAgICAgICAgIGlmcmFtZS5zY3JvbGxpbmcgPSAneWVzJ1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBmYWxzZTpcbiAgICAgICAgICBpZnJhbWUuc2Nyb2xsaW5nID0gJ25vJ1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZnJhbWUuc2Nyb2xsaW5nID0gc2V0dGluZ3NbaWZyYW1lSWRdXG4gICAgICAgICAgICA/IHNldHRpbmdzW2lmcmFtZUlkXS5zY3JvbGxpbmdcbiAgICAgICAgICAgIDogJ25vJ1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoZSBWMSBpRnJhbWUgc2NyaXB0IGV4cGVjdHMgYW4gaW50LCB3aGVyZSBhcyBpbiBWMiBleHBlY3RzIGEgQ1NTXG4gICAgLy8gc3RyaW5nIHZhbHVlIHN1Y2ggYXMgJzFweCAzZW0nLCBzbyBpZiB3ZSBoYXZlIGFuIGludCBmb3IgVjIsIHNldCBWMT1WMlxuICAgIC8vIGFuZCB0aGVuIGNvbnZlcnQgVjIgdG8gYSBzdHJpbmcgUFggdmFsdWUuXG4gICAgZnVuY3Rpb24gc2V0dXBCb2R5TWFyZ2luVmFsdWVzKCkge1xuICAgICAgaWYgKFxuICAgICAgICAnbnVtYmVyJyA9PT1cbiAgICAgICAgICB0eXBlb2YgKHNldHRpbmdzW2lmcmFtZUlkXSAmJiBzZXR0aW5nc1tpZnJhbWVJZF0uYm9keU1hcmdpbikgfHxcbiAgICAgICAgJzAnID09PSAoc2V0dGluZ3NbaWZyYW1lSWRdICYmIHNldHRpbmdzW2lmcmFtZUlkXS5ib2R5TWFyZ2luKVxuICAgICAgKSB7XG4gICAgICAgIHNldHRpbmdzW2lmcmFtZUlkXS5ib2R5TWFyZ2luVjEgPSBzZXR0aW5nc1tpZnJhbWVJZF0uYm9keU1hcmdpblxuICAgICAgICBzZXR0aW5nc1tpZnJhbWVJZF0uYm9keU1hcmdpbiA9XG4gICAgICAgICAgJycgKyBzZXR0aW5nc1tpZnJhbWVJZF0uYm9keU1hcmdpbiArICdweCdcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja1Jlc2V0KCkge1xuICAgICAgLy8gUmVkdWNlIHNjb3BlIG9mIGZpcnN0UnVuIHRvIGZ1bmN0aW9uLCBiZWNhdXNlIElFOCdzIEpTIGV4ZWN1dGlvblxuICAgICAgLy8gY29udGV4dCBzdGFjayBpcyBib3JrZWQgYW5kIHRoaXMgdmFsdWUgZ2V0cyBleHRlcm5hbGx5XG4gICAgICAvLyBjaGFuZ2VkIG1pZHdheSB0aHJvdWdoIHJ1bm5pbmcgdGhpcyBmdW5jdGlvbiEhIVxuICAgICAgdmFyIGZpcnN0UnVuID0gc2V0dGluZ3NbaWZyYW1lSWRdICYmIHNldHRpbmdzW2lmcmFtZUlkXS5maXJzdFJ1bixcbiAgICAgICAgcmVzZXRSZXF1ZXJ0TWV0aG9kID1cbiAgICAgICAgICBzZXR0aW5nc1tpZnJhbWVJZF0gJiZcbiAgICAgICAgICBzZXR0aW5nc1tpZnJhbWVJZF0uaGVpZ2h0Q2FsY3VsYXRpb25NZXRob2QgaW4gcmVzZXRSZXF1aXJlZE1ldGhvZHNcblxuICAgICAgaWYgKCFmaXJzdFJ1biAmJiByZXNldFJlcXVlcnRNZXRob2QpIHtcbiAgICAgICAgcmVzZXRJRnJhbWUoeyBpZnJhbWU6IGlmcmFtZSwgaGVpZ2h0OiAwLCB3aWR0aDogMCwgdHlwZTogJ2luaXQnIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0dXBJRnJhbWVPYmplY3QoKSB7XG4gICAgICBpZiAoc2V0dGluZ3NbaWZyYW1lSWRdKSB7XG4gICAgICAgIHNldHRpbmdzW2lmcmFtZUlkXS5pZnJhbWUuaUZyYW1lUmVzaXplciA9IHtcbiAgICAgICAgICBjbG9zZTogY2xvc2VJRnJhbWUuYmluZChudWxsLCBzZXR0aW5nc1tpZnJhbWVJZF0uaWZyYW1lKSxcblxuICAgICAgICAgIHJlbW92ZUxpc3RlbmVyczogcmVtb3ZlSWZyYW1lTGlzdGVuZXJzLmJpbmQoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgc2V0dGluZ3NbaWZyYW1lSWRdLmlmcmFtZVxuICAgICAgICAgICksXG5cbiAgICAgICAgICByZXNpemU6IHRyaWdnZXIuYmluZChcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAnV2luZG93IHJlc2l6ZScsXG4gICAgICAgICAgICAncmVzaXplJyxcbiAgICAgICAgICAgIHNldHRpbmdzW2lmcmFtZUlkXS5pZnJhbWVcbiAgICAgICAgICApLFxuXG4gICAgICAgICAgbW92ZVRvQW5jaG9yOiBmdW5jdGlvbiAoYW5jaG9yKSB7XG4gICAgICAgICAgICB0cmlnZ2VyKFxuICAgICAgICAgICAgICAnTW92ZSB0byBhbmNob3InLFxuICAgICAgICAgICAgICAnbW92ZVRvQW5jaG9yOicgKyBhbmNob3IsXG4gICAgICAgICAgICAgIHNldHRpbmdzW2lmcmFtZUlkXS5pZnJhbWUsXG4gICAgICAgICAgICAgIGlmcmFtZUlkXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIHNlbmRNZXNzYWdlOiBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgICAgICAgbWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpXG4gICAgICAgICAgICB0cmlnZ2VyKFxuICAgICAgICAgICAgICAnU2VuZCBNZXNzYWdlJyxcbiAgICAgICAgICAgICAgJ21lc3NhZ2U6JyArIG1lc3NhZ2UsXG4gICAgICAgICAgICAgIHNldHRpbmdzW2lmcmFtZUlkXS5pZnJhbWUsXG4gICAgICAgICAgICAgIGlmcmFtZUlkXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2UgaGF2ZSB0byBjYWxsIHRyaWdnZXIgdHdpY2UsIGFzIHdlIGNhbiBub3QgYmUgc3VyZSBpZiBhbGxcbiAgICAvLyBpZnJhbWVzIGhhdmUgY29tcGxldGVkIGxvYWRpbmcgd2hlbiB0aGlzIGNvZGUgcnVucy4gVGhlXG4gICAgLy8gZXZlbnQgbGlzdGVuZXIgYWxzbyBjYXRjaGVzIHRoZSBwYWdlIGNoYW5naW5nIGluIHRoZSBpRnJhbWUuXG4gICAgZnVuY3Rpb24gaW5pdChtc2cpIHtcbiAgICAgIGZ1bmN0aW9uIGlGcmFtZUxvYWRlZCgpIHtcbiAgICAgICAgdHJpZ2dlcignaUZyYW1lLm9ubG9hZCcsIG1zZywgaWZyYW1lLCB1bmRlZmluZWQsIHRydWUpXG4gICAgICAgIGNoZWNrUmVzZXQoKVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBjcmVhdGVEZXN0cm95T2JzZXJ2ZXIoTXV0YXRpb25PYnNlcnZlcikge1xuICAgICAgICBpZiAoIWlmcmFtZS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGVzdHJveU9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuICAgICAgICAgIG11dGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgICAgICAgdmFyIHJlbW92ZWROb2RlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG11dGF0aW9uLnJlbW92ZWROb2RlcykgLy8gVHJhbnNmb3JtIE5vZGVMaXN0IGludG8gYW4gQXJyYXlcbiAgICAgICAgICAgIHJlbW92ZWROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChyZW1vdmVkTm9kZSkge1xuICAgICAgICAgICAgICBpZiAocmVtb3ZlZE5vZGUgPT09IGlmcmFtZSkge1xuICAgICAgICAgICAgICAgIGNsb3NlSUZyYW1lKGlmcmFtZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgICBkZXN0cm95T2JzZXJ2ZXIub2JzZXJ2ZShpZnJhbWUucGFyZW50Tm9kZSwge1xuICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICB2YXIgTXV0YXRpb25PYnNlcnZlciA9IGdldE11dGF0aW9uT2JzZXJ2ZXIoKVxuICAgICAgaWYgKE11dGF0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgICAgY3JlYXRlRGVzdHJveU9ic2VydmVyKE11dGF0aW9uT2JzZXJ2ZXIpXG4gICAgICB9XG5cbiAgICAgIGFkZEV2ZW50TGlzdGVuZXIoaWZyYW1lLCAnbG9hZCcsIGlGcmFtZUxvYWRlZClcbiAgICAgIHRyaWdnZXIoJ2luaXQnLCBtc2csIGlmcmFtZSwgdW5kZWZpbmVkLCB0cnVlKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICBpZiAoJ29iamVjdCcgIT09IHR5cGVvZiBvcHRpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09wdGlvbnMgaXMgbm90IGFuIG9iamVjdCcpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29weU9wdGlvbnMob3B0aW9ucykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICBmb3IgKHZhciBvcHRpb24gaW4gZGVmYXVsdHMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkZWZhdWx0cywgb3B0aW9uKSkge1xuICAgICAgICAgIHNldHRpbmdzW2lmcmFtZUlkXVtvcHRpb25dID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvblxuICAgICAgICAgIClcbiAgICAgICAgICAgID8gb3B0aW9uc1tvcHRpb25dXG4gICAgICAgICAgICA6IGRlZmF1bHRzW29wdGlvbl1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFRhcmdldE9yaWdpbihyZW1vdGVIb3N0KSB7XG4gICAgICByZXR1cm4gJycgPT09IHJlbW90ZUhvc3QgfHxcbiAgICAgICAgbnVsbCAhPT0gcmVtb3RlSG9zdC5tYXRjaCgvXihhYm91dDpibGFua3xqYXZhc2NyaXB0OnxmaWxlOlxcL1xcLykvKVxuICAgICAgICA/ICcqJ1xuICAgICAgICA6IHJlbW90ZUhvc3RcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXByaWNhdGUoa2V5KSB7XG4gICAgICB2YXIgc3BsaXROYW1lID0ga2V5LnNwbGl0KCdDYWxsYmFjaycpXG5cbiAgICAgIGlmIChzcGxpdE5hbWUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIHZhciBuYW1lID1cbiAgICAgICAgICAnb24nICsgc3BsaXROYW1lWzBdLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3BsaXROYW1lWzBdLnNsaWNlKDEpXG4gICAgICAgIHRoaXNbbmFtZV0gPSB0aGlzW2tleV1cbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XVxuICAgICAgICB3YXJuKFxuICAgICAgICAgIGlmcmFtZUlkLFxuICAgICAgICAgIFwiRGVwcmVjYXRlZDogJ1wiICtcbiAgICAgICAgICAgIGtleSArXG4gICAgICAgICAgICBcIicgaGFzIGJlZW4gcmVuYW1lZCAnXCIgK1xuICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICBcIicuIFRoZSBvbGQgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uLlwiXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICAgICAgc2V0dGluZ3NbaWZyYW1lSWRdID0ge1xuICAgICAgICBmaXJzdFJ1bjogdHJ1ZSxcbiAgICAgICAgaWZyYW1lOiBpZnJhbWUsXG4gICAgICAgIHJlbW90ZUhvc3Q6IGlmcmFtZS5zcmMgJiYgaWZyYW1lLnNyYy5zcGxpdCgnLycpLnNsaWNlKDAsIDMpLmpvaW4oJy8nKVxuICAgICAgfVxuXG4gICAgICBjaGVja09wdGlvbnMob3B0aW9ucylcbiAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goZGVwcmljYXRlLCBvcHRpb25zKVxuICAgICAgY29weU9wdGlvbnMob3B0aW9ucylcblxuICAgICAgaWYgKHNldHRpbmdzW2lmcmFtZUlkXSkge1xuICAgICAgICBzZXR0aW5nc1tpZnJhbWVJZF0udGFyZ2V0T3JpZ2luID1cbiAgICAgICAgICB0cnVlID09PSBzZXR0aW5nc1tpZnJhbWVJZF0uY2hlY2tPcmlnaW5cbiAgICAgICAgICAgID8gZ2V0VGFyZ2V0T3JpZ2luKHNldHRpbmdzW2lmcmFtZUlkXS5yZW1vdGVIb3N0KVxuICAgICAgICAgICAgOiAnKidcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBiZWVuSGVyZSgpIHtcbiAgICAgIHJldHVybiBpZnJhbWVJZCBpbiBzZXR0aW5ncyAmJiAnaUZyYW1lUmVzaXplcicgaW4gaWZyYW1lXG4gICAgfVxuXG4gICAgdmFyIGlmcmFtZUlkID0gZW5zdXJlSGFzSWQoaWZyYW1lLmlkKVxuXG4gICAgaWYgKCFiZWVuSGVyZSgpKSB7XG4gICAgICBwcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuICAgICAgc2V0U2Nyb2xsaW5nKClcbiAgICAgIHNldExpbWl0cygpXG4gICAgICBzZXR1cEJvZHlNYXJnaW5WYWx1ZXMoKVxuICAgICAgaW5pdChjcmVhdGVPdXRnb2luZ01zZyhpZnJhbWVJZCkpXG4gICAgICBzZXR1cElGcmFtZU9iamVjdCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHdhcm4oaWZyYW1lSWQsICdJZ25vcmVkIGlGcmFtZSwgYWxyZWFkeSBzZXR1cC4nKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlYm91Y2UoZm4sIHRpbWUpIHtcbiAgICBpZiAobnVsbCA9PT0gdGltZXIpIHtcbiAgICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRpbWVyID0gbnVsbFxuICAgICAgICBmbigpXG4gICAgICB9LCB0aW1lKVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcmFtZVRpbWVyID0ge31cbiAgZnVuY3Rpb24gZGVib3VuY2VGcmFtZUV2ZW50cyhmbiwgdGltZSwgZnJhbWVJZCkge1xuICAgIGlmICghZnJhbWVUaW1lcltmcmFtZUlkXSkge1xuICAgICAgZnJhbWVUaW1lcltmcmFtZUlkXSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBmcmFtZVRpbWVyW2ZyYW1lSWRdID0gbnVsbFxuICAgICAgICBmbigpXG4gICAgICB9LCB0aW1lKVxuICAgIH1cbiAgfVxuXG4gIC8vIE5vdCB0ZXN0YWJsZSBpbiBQaGFudG9tSlNcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuICBmdW5jdGlvbiBmaXhIaWRkZW5JRnJhbWVzKCkge1xuICAgIGZ1bmN0aW9uIGNoZWNrSUZyYW1lcygpIHtcbiAgICAgIGZ1bmN0aW9uIGNoZWNrSUZyYW1lKHNldHRpbmdJZCkge1xuICAgICAgICBmdW5jdGlvbiBjaGtEaW1lbnNpb24oZGltZW5zaW9uKSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcwcHgnID09PVxuICAgICAgICAgICAgKHNldHRpbmdzW3NldHRpbmdJZF0gJiYgc2V0dGluZ3Nbc2V0dGluZ0lkXS5pZnJhbWUuc3R5bGVbZGltZW5zaW9uXSlcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpc1Zpc2libGUoZWwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbCAhPT0gZWwub2Zmc2V0UGFyZW50XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgc2V0dGluZ3Nbc2V0dGluZ0lkXSAmJlxuICAgICAgICAgIGlzVmlzaWJsZShzZXR0aW5nc1tzZXR0aW5nSWRdLmlmcmFtZSkgJiZcbiAgICAgICAgICAoY2hrRGltZW5zaW9uKCdoZWlnaHQnKSB8fCBjaGtEaW1lbnNpb24oJ3dpZHRoJykpXG4gICAgICAgICkge1xuICAgICAgICAgIHRyaWdnZXIoXG4gICAgICAgICAgICAnVmlzaWJpbGl0eSBjaGFuZ2UnLFxuICAgICAgICAgICAgJ3Jlc2l6ZScsXG4gICAgICAgICAgICBzZXR0aW5nc1tzZXR0aW5nSWRdLmlmcmFtZSxcbiAgICAgICAgICAgIHNldHRpbmdJZFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBPYmplY3Qua2V5cyhzZXR0aW5ncykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGNoZWNrSUZyYW1lKGtleSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbXV0YXRpb25PYnNlcnZlZChtdXRhdGlvbnMpIHtcbiAgICAgIGxvZyhcbiAgICAgICAgJ3dpbmRvdycsXG4gICAgICAgICdNdXRhdGlvbiBvYnNlcnZlZDogJyArIG11dGF0aW9uc1swXS50YXJnZXQgKyAnICcgKyBtdXRhdGlvbnNbMF0udHlwZVxuICAgICAgKVxuICAgICAgZGVib3VjZShjaGVja0lGcmFtZXMsIDE2KVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZU11dGF0aW9uT2JzZXJ2ZXIoKSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpLFxuICAgICAgICBjb25maWcgPSB7XG4gICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgICBhdHRyaWJ1dGVPbGRWYWx1ZTogZmFsc2UsXG4gICAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgICAgICBjaGFyYWN0ZXJEYXRhT2xkVmFsdWU6IGZhbHNlLFxuICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobXV0YXRpb25PYnNlcnZlZClcblxuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXQsIGNvbmZpZylcbiAgICB9XG5cbiAgICB2YXIgTXV0YXRpb25PYnNlcnZlciA9IGdldE11dGF0aW9uT2JzZXJ2ZXIoKVxuICAgIGlmIChNdXRhdGlvbk9ic2VydmVyKSB7XG4gICAgICBjcmVhdGVNdXRhdGlvbk9ic2VydmVyKClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZXNpemVJRnJhbWVzKGV2ZW50KSB7XG4gICAgZnVuY3Rpb24gcmVzaXplKCkge1xuICAgICAgc2VuZFRyaWdnZXJNc2coJ1dpbmRvdyAnICsgZXZlbnQsICdyZXNpemUnKVxuICAgIH1cblxuICAgIGxvZygnd2luZG93JywgJ1RyaWdnZXIgZXZlbnQ6ICcgKyBldmVudClcbiAgICBkZWJvdWNlKHJlc2l6ZSwgMTYpXG4gIH1cblxuICAvLyBOb3QgdGVzdGFibGUgaW4gUGhhbnRvbUpTXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGZ1bmN0aW9uIHRhYlZpc2libGUoKSB7XG4gICAgZnVuY3Rpb24gcmVzaXplKCkge1xuICAgICAgc2VuZFRyaWdnZXJNc2coJ1RhYiBWaXNhYmxlJywgJ3Jlc2l6ZScpXG4gICAgfVxuXG4gICAgaWYgKCdoaWRkZW4nICE9PSBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUpIHtcbiAgICAgIGxvZygnZG9jdW1lbnQnLCAnVHJpZ2dlciBldmVudDogVmlzaWJsaXR5IGNoYW5nZScpXG4gICAgICBkZWJvdWNlKHJlc2l6ZSwgMTYpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2VuZFRyaWdnZXJNc2coZXZlbnROYW1lLCBldmVudCkge1xuICAgIGZ1bmN0aW9uIGlzSUZyYW1lUmVzaXplRW5hYmxlZChpZnJhbWVJZCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgc2V0dGluZ3NbaWZyYW1lSWRdICYmXG4gICAgICAgICdwYXJlbnQnID09PSBzZXR0aW5nc1tpZnJhbWVJZF0ucmVzaXplRnJvbSAmJlxuICAgICAgICBzZXR0aW5nc1tpZnJhbWVJZF0uYXV0b1Jlc2l6ZSAmJlxuICAgICAgICAhc2V0dGluZ3NbaWZyYW1lSWRdLmZpcnN0UnVuXG4gICAgICApXG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMoc2V0dGluZ3MpLmZvckVhY2goZnVuY3Rpb24gKGlmcmFtZUlkKSB7XG4gICAgICBpZiAoaXNJRnJhbWVSZXNpemVFbmFibGVkKGlmcmFtZUlkKSkge1xuICAgICAgICB0cmlnZ2VyKGV2ZW50TmFtZSwgZXZlbnQsIHNldHRpbmdzW2lmcmFtZUlkXS5pZnJhbWUsIGlmcmFtZUlkKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBzZXR1cEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGFkZEV2ZW50TGlzdGVuZXIod2luZG93LCAnbWVzc2FnZScsIGlGcmFtZUxpc3RlbmVyKVxuXG4gICAgYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csICdyZXNpemUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXNpemVJRnJhbWVzKCdyZXNpemUnKVxuICAgIH0pXG5cbiAgICBhZGRFdmVudExpc3RlbmVyKGRvY3VtZW50LCAndmlzaWJpbGl0eWNoYW5nZScsIHRhYlZpc2libGUpXG5cbiAgICBhZGRFdmVudExpc3RlbmVyKGRvY3VtZW50LCAnLXdlYmtpdC12aXNpYmlsaXR5Y2hhbmdlJywgdGFiVmlzaWJsZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGZhY3RvcnkoKSB7XG4gICAgZnVuY3Rpb24gaW5pdChvcHRpb25zLCBlbGVtZW50KSB7XG4gICAgICBmdW5jdGlvbiBjaGtUeXBlKCkge1xuICAgICAgICBpZiAoIWVsZW1lbnQudGFnTmFtZSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCBpcyBub3QgYSB2YWxpZCBET00gZWxlbWVudCcpXG4gICAgICAgIH0gZWxzZSBpZiAoJ0lGUkFNRScgIT09IGVsZW1lbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICdFeHBlY3RlZCA8SUZSQU1FPiB0YWcsIGZvdW5kIDwnICsgZWxlbWVudC50YWdOYW1lICsgJz4nXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGNoa1R5cGUoKVxuICAgICAgICBzZXR1cElGcmFtZShlbGVtZW50LCBvcHRpb25zKVxuICAgICAgICBpRnJhbWVzLnB1c2goZWxlbWVudClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuRGVwcmVjYXRlZE9wdGlvbnMob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lbmFibGVQdWJsaWNNZXRob2RzKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ2VuYWJsZVB1YmxpY01ldGhvZHMgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWQsIHB1YmxpYyBtZXRob2RzIGFyZSBub3cgYWx3YXlzIGF2YWlsYWJsZSBpbiB0aGUgaUZyYW1lJ1xuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGlGcmFtZXNcblxuICAgIHNldHVwUmVxdWVzdEFuaW1hdGlvbkZyYW1lKClcbiAgICBzZXR1cEV2ZW50TGlzdGVuZXJzKClcblxuICAgIHJldHVybiBmdW5jdGlvbiBpRnJhbWVSZXNpemVGKG9wdGlvbnMsIHRhcmdldCkge1xuICAgICAgaUZyYW1lcyA9IFtdIC8vIE9ubHkgcmV0dXJuIGlGcmFtZXMgcGFzdCBpbiBvbiB0aGlzIGNhbGxcblxuICAgICAgd2FybkRlcHJlY2F0ZWRPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAgIHN3aXRjaCAodHlwZW9mIHRhcmdldCkge1xuICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHRhcmdldCB8fCAnaWZyYW1lJyksXG4gICAgICAgICAgICBpbml0LmJpbmQodW5kZWZpbmVkLCBvcHRpb25zKVxuICAgICAgICAgIClcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgaW5pdChvcHRpb25zLCB0YXJnZXQpXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgZGF0YSB0eXBlICgnICsgdHlwZW9mIHRhcmdldCArICcpJylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGlGcmFtZXNcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVKUXVlcnlQdWJsaWNNZXRob2QoJCkge1xuICAgIGlmICghJC5mbikge1xuICAgICAgaW5mbygnJywgJ1VuYWJsZSB0byBiaW5kIHRvIGpRdWVyeSwgaXQgaXMgbm90IGZ1bGx5IGxvYWRlZC4nKVxuICAgIH0gZWxzZSBpZiAoISQuZm4uaUZyYW1lUmVzaXplKSB7XG4gICAgICAkLmZuLmlGcmFtZVJlc2l6ZSA9IGZ1bmN0aW9uICRpRnJhbWVSZXNpemVGKG9wdGlvbnMpIHtcbiAgICAgICAgZnVuY3Rpb24gaW5pdChpbmRleCwgZWxlbWVudCkge1xuICAgICAgICAgIHNldHVwSUZyYW1lKGVsZW1lbnQsIG9wdGlvbnMpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoJ2lmcmFtZScpLmVhY2goaW5pdCkuZW5kKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAod2luZG93LmpRdWVyeSkge1xuICAgIGNyZWF0ZUpRdWVyeVB1YmxpY01ldGhvZCh3aW5kb3cualF1ZXJ5KVxuICB9XG5cbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShbXSwgZmFjdG9yeSlcbiAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgLy8gTm9kZSBmb3IgYnJvd3NlcmZ5XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KClcbiAgfVxuICB3aW5kb3cuaUZyYW1lUmVzaXplID0gd2luZG93LmlGcmFtZVJlc2l6ZSB8fCBmYWN0b3J5KClcbn0pKClcbiIsInZhciBpZnJhbWVSZXNpemUgPSByZXF1aXJlKCcuL2lmcmFtZVJlc2l6ZXInKVxuXG5leHBvcnRzLmlmcmFtZVJlc2l6ZSA9IGlmcmFtZVJlc2l6ZVxuZXhwb3J0cy5pZnJhbWVSZXNpemVyID0gaWZyYW1lUmVzaXplIC8vIEJhY2t3YXJkcyBjb21wYXRhYmlsaXR5XG5leHBvcnRzLmlmcmFtZVJlc2l6ZXJDb250ZW50V2luZG93ID0gcmVxdWlyZSgnLi9pZnJhbWVSZXNpemVyLmNvbnRlbnRXaW5kb3cnKVxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiXSwibmFtZXMiOlsidW5kZWZpbmVkIiwid2luZG93IiwiYXV0b1Jlc2l6ZSIsImJvZHlCYWNrZ3JvdW5kIiwiYm9keU1hcmdpbiIsImJvZHlNYXJnaW5TdHIiLCJib2R5T2JzZXJ2ZXIiLCJib2R5UGFkZGluZyIsImNhbGN1bGF0ZVdpZHRoIiwiZG91YmxlRXZlbnRMaXN0IiwicmVzaXplIiwiY2xpY2siLCJldmVudENhbmNlbFRpbWVyIiwiZmlyc3RSdW4iLCJoZWlnaHQiLCJoZWlnaHRDYWxjTW9kZURlZmF1bHQiLCJoZWlnaHRDYWxjTW9kZSIsImluaXRMb2NrIiwiaW5pdE1zZyIsImluUGFnZUxpbmtzIiwiaW50ZXJ2YWwiLCJpbnRlcnZhbFRpbWVyIiwibG9nZ2luZyIsIm1vdXNlRXZlbnRzIiwibXNnSUQiLCJtc2dJZExlbiIsImxlbmd0aCIsIm15SUQiLCJyZXNldFJlcXVpcmVkTWV0aG9kcyIsIm1heCIsIm1pbiIsImJvZHlTY3JvbGwiLCJkb2N1bWVudEVsZW1lbnRTY3JvbGwiLCJyZXNpemVGcm9tIiwidGFyZ2V0IiwicGFyZW50IiwidGFyZ2V0T3JpZ2luRGVmYXVsdCIsInRvbGVyYW5jZSIsInRyaWdnZXJMb2NrZWQiLCJ0cmlnZ2VyTG9ja2VkVGltZXIiLCJ0aHJvdHRsZWRUaW1lciIsIndpZHRoIiwid2lkdGhDYWxjTW9kZURlZmF1bHQiLCJ3aWR0aENhbGNNb2RlIiwid2luIiwib25NZXNzYWdlIiwid2FybiIsIm9uUmVhZHkiLCJvblBhZ2VJbmZvIiwiY3VzdG9tQ2FsY01ldGhvZHMiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsIm9mZnNldEhlaWdodCIsImJvZHkiLCJzY3JvbGxXaWR0aCIsImV2ZW50SGFuZGxlcnNCeU5hbWUiLCJwYXNzaXZlU3VwcG9ydGVkIiwib3B0aW9ucyIsIk9iamVjdCIsImNyZWF0ZSIsInBhc3NpdmUiLCJnZXQiLCJhZGRFdmVudExpc3RlbmVyIiwibm9vcCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJlcnJvciIsImZ1bmMiLCJjb250ZXh0IiwiYXJncyIsInJlc3VsdCIsInRpbWVvdXQiLCJwcmV2aW91cyIsImxhdGVyIiwiZ2V0SGVpZ2h0IiwiYm9keU9mZnNldCIsImdldENvbXB1dGVkU3R5bGUiLCJvZmZzZXQiLCJzY3JvbGxIZWlnaHQiLCJjdXN0b20iLCJkb2N1bWVudEVsZW1lbnRPZmZzZXQiLCJNYXRoIiwiYXBwbHkiLCJnZXRBbGxNZWFzdXJlbWVudHMiLCJncm93IiwibG93ZXN0RWxlbWVudCIsImdldE1heEVsZW1lbnQiLCJnZXRBbGxFbGVtZW50cyIsInRhZ2dlZEVsZW1lbnQiLCJnZXRUYWdnZWRFbGVtZW50cyIsImdldFdpZHRoIiwib2Zmc2V0V2lkdGgiLCJzY3JvbGwiLCJyaWdodE1vc3RFbGVtZW50Iiwic2l6ZUlGcmFtZVRocm90dGxlZCIsInNpemVJRnJhbWUiLCJEYXRlIiwibm93IiwicmVtYWluaW5nIiwidGhpcyIsImFyZ3VtZW50cyIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJldmVudCIsIm1lc3NhZ2VUeXBlIiwicHJvY2Vzc1JlcXVlc3RGcm9tUGFyZW50IiwiaW5pdCIsImNsZWFyRml4IiwiYXR0ciIsInZhbHVlIiwiZGF0YSIsInNvdXJjZSIsInN0ckJvb2wiLCJzdHIiLCJzdWJzdHIiLCJzcGxpdCIsIk51bWJlciIsImVuYWJsZSIsIkJvb2xlYW4iLCJyZWFkRGF0YUZyb21QYXJlbnQiLCJsb2ciLCJsb2NhdGlvbiIsImhyZWYiLCJyZWFkRGF0YSIsImlGcmFtZVJlc2l6ZXIiLCJKU09OIiwic3RyaW5naWZ5Iiwia2V5cyIsImZvckVhY2giLCJkZXByaWNhdGUiLCJ0YXJnZXRPcmlnaW4iLCJoZWlnaHRDYWxjdWxhdGlvbk1ldGhvZCIsIndpZHRoQ2FsY3VsYXRpb25NZXRob2QiLCJzZXR1cEN1c3RvbUNhbGNNZXRob2RzIiwiY2FsY01vZGUiLCJjYWxjRnVuYyIsImNvbnN0cnVjdG9yIiwicmVhZERhdGFGcm9tUGFnZSIsInNldEJvZHlTdHlsZSIsImluZGV4T2YiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJjbGVhciIsImRpc3BsYXkiLCJhcHBlbmRDaGlsZCIsImNoZWNrSGVpZ2h0TW9kZSIsImNoZWNrV2lkdGhNb2RlIiwicGFyZW50SUZyYW1lIiwic3RhcnRFdmVudExpc3RlbmVycyIsIm1hbmFnZUV2ZW50TGlzdGVuZXJzIiwiZGlzY29ubmVjdCIsImNsZWFySW50ZXJ2YWwiLCJzZW5kTXNnIiwiY2xvc2UiLCJnZXRJZCIsImdldFBhZ2VJbmZvIiwiY2FsbGJhY2siLCJtb3ZlVG9BbmNob3IiLCJoYXNoIiwiZmluZFRhcmdldCIsInJlc2V0IiwicmVzZXRJRnJhbWUiLCJzY3JvbGxUbyIsIngiLCJ5Iiwic2Nyb2xsVG9PZmZzZXQiLCJzZW5kTWVzc2FnZSIsIm1zZyIsInNldEhlaWdodENhbGN1bGF0aW9uTWV0aG9kIiwic2V0V2lkdGhDYWxjdWxhdGlvbk1ldGhvZCIsInNldFRhcmdldE9yaWdpbiIsInNpemUiLCJjdXN0b21IZWlnaHQiLCJjdXN0b21XaWR0aCIsInNlbmRTaXplIiwic2VuZE1vdXNlIiwiZSIsInR5cGUiLCJzY3JlZW5ZIiwic2NyZWVuWCIsImFkZE1vdXNlTGlzdGVuZXIiLCJldnQiLCJuYW1lIiwic2V0dXBNb3VzZUV2ZW50cyIsImdldFBhZ2VQb3NpdGlvbiIsInBhZ2VYT2Zmc2V0Iiwic2Nyb2xsTGVmdCIsInBhZ2VZT2Zmc2V0Iiwic2Nyb2xsVG9wIiwiZ2V0RWxlbWVudFBvc2l0aW9uIiwiZWwiLCJlbFBvc2l0aW9uIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwicGFnZVBvc2l0aW9uIiwicGFyc2VJbnQiLCJsZWZ0IiwidG9wIiwianVtcFRvVGFyZ2V0IiwianVtcFBvc2l0aW9uIiwiaGFzaERhdGEiLCJkZWNvZGVVUklDb21wb25lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldEVsZW1lbnRzQnlOYW1lIiwiY2hlY2tMb2NhdGlvbkhhc2giLCJiaW5kQW5jaG9ycyIsInNldHVwTGluayIsImxpbmtDbGlja2VkIiwicHJldmVudERlZmF1bHQiLCJnZXRBdHRyaWJ1dGUiLCJBcnJheSIsInByb3RvdHlwZSIsImNhbGwiLCJxdWVyeVNlbGVjdG9yQWxsIiwiYmluZExvY2F0aW9uSGFzaCIsImluaXRDaGVjayIsImVuYWJsZUluUGFnZUxpbmtzIiwic2V0dXBJblBhZ2VMaW5rcyIsInRyaWdnZXJSZXNldCIsImdldERhdGEiLCJpblBhZ2VMaW5rIiwicGFnZUluZm8iLCJtc2dCb2R5IiwicGFyc2UiLCJtZXNzYWdlIiwiZ2V0TWVzc2FnZVR5cGUiLCJpc0luaXRNc2ciLCJ0cnVlIiwiZmFsc2UiLCJtb2R1bGUiLCJleHBvcnRzIiwialF1ZXJ5IiwiY2hrTGF0ZUxvYWRlZCIsImNhcGl0YWxpemVGaXJzdExldHRlciIsInN0cmluZyIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJmb3JtYXRMb2dNc2ciLCJjb25zb2xlIiwia2V5Iiwic3BsaXROYW1lIiwibWFuYWdlVHJpZ2dlckV2ZW50IiwibGlzdGVuZXIiLCJhZGQiLCJldmVudE5hbWUiLCJoYW5kbGVFdmVudCIsImV2ZW50VHlwZSIsInJlbW92ZSIsImV2ZW50TmFtZXMiLCJtYXAiLCJtZXRob2QiLCJjaGVja0NhbGNNb2RlIiwiY2FsY01vZGVEZWZhdWx0IiwibW9kZXMiLCJmb3JjZUludGVydmFsVGltZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwiV2ViS2l0TXV0YXRpb25PYnNlcnZlciIsImluaXRJbnRlcnZhbCIsImFkZEltYWdlTG9hZExpc3RuZXJzIiwibXV0YXRpb24iLCJhZGRJbWFnZUxvYWRMaXN0ZW5lciIsImVsZW1lbnQiLCJjb21wbGV0ZSIsInNyYyIsImltYWdlTG9hZGVkIiwiaW1hZ2VFcnJvciIsImVsZW1lbnRzIiwicHVzaCIsImF0dHJpYnV0ZU5hbWUiLCJyZW1vdmVJbWFnZUxvYWRMaXN0ZW5lciIsInNwbGljZSIsInJlbW92ZUZyb21BcnJheSIsImltYWdlRXZlbnRUcmlnZ2VyZWQiLCJ0eXBlRGVzYyIsIm11dGF0aW9uT2JzZXJ2ZWQiLCJtdXRhdGlvbnMiLCJvYnNlcnZlciIsInF1ZXJ5U2VsZWN0b3IiLCJvYnNlcnZlIiwiYXR0cmlidXRlcyIsImF0dHJpYnV0ZU9sZFZhbHVlIiwiY2hhcmFjdGVyRGF0YSIsImNoYXJhY3RlckRhdGFPbGRWYWx1ZSIsImNoaWxkTGlzdCIsInN1YnRyZWUiLCJjcmVhdGVNdXRhdGlvbk9ic2VydmVyIiwic2V0dXBCb2R5TXV0YXRpb25PYnNlcnZlciIsInNldEludGVydmFsIiwiYWJzIiwicHJvcCIsInJldFZhbCIsImRlZmF1bHRWaWV3Iiwic2lkZSIsImVsZW1lbnRzTGVuZ3RoIiwiZWxWYWwiLCJtYXhWYWwiLCJTaWRlIiwidGltZXIiLCJpIiwiY2hrRXZlbnRUaG90dGxlIiwiZGltZW5zaW9ucyIsInRhZyIsInRyaWdnZXJFdmVudCIsInRyaWdnZXJFdmVudERlc2MiLCJjdXJyZW50SGVpZ2h0IiwiY3VycmVudFdpZHRoIiwiY2hlY2tUb2xhcmFuY2UiLCJhIiwiYiIsImlzU2l6ZUNoYW5nZURldGVjdGVkIiwibG9ja1RyaWdnZXIiLCJyZXNldFBhZ2UiLCJoY20iLCJwb3N0TWVzc2FnZSIsInJlYWR5U3RhdGUiLCIkIiwiY291bnQiLCJsb2dFbmFibGVkIiwiaGlkZGVuQ2hlY2tFbmFibGVkIiwibXNnSGVhZGVyTGVuIiwibXNnSWQiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzZXR0aW5ncyIsImRlZmF1bHRzIiwiYm9keU1hcmdpblYxIiwiY2hlY2tPcmlnaW4iLCJlbmFibGVQdWJsaWNNZXRob2RzIiwiaWQiLCJtYXhIZWlnaHQiLCJJbmZpbml0eSIsIm1heFdpZHRoIiwibWluSGVpZ2h0IiwibWluV2lkdGgiLCJzY3JvbGxpbmciLCJzaXplSGVpZ2h0Iiwic2l6ZVdpZHRoIiwid2FybmluZ1RpbWVvdXQiLCJvbkNsb3NlIiwib25DbG9zZWQiLCJvbkluaXQiLCJvbk1vdXNlRW50ZXIiLCJvbk1vdXNlTGVhdmUiLCJvblJlc2l6ZWQiLCJvblNjcm9sbCIsImZyYW1lVGltZXIiLCJmbiIsImlGcmFtZVJlc2l6ZSIsImZpbHRlciIsImVhY2giLCJpbmRleCIsInNldHVwSUZyYW1lIiwiZW5kIiwiaW5mbyIsImZhY3RvcnkiLCJnZXRNdXRhdGlvbk9ic2VydmVyIiwiTW96TXV0YXRpb25PYnNlcnZlciIsImlzTG9nRW5hYmxlZCIsImlmcmFtZUlkIiwib3V0cHV0IiwiZW5hYmxlZCIsInJldFN0ciIsInNlbGYiLCJnZXRNeUlEIiwiZm9ybWF0TG9nSGVhZGVyIiwiaUZyYW1lTGlzdGVuZXIiLCJyZXNpemVJRnJhbWUiLCJlbnN1cmVJblJhbmdlIiwic3luY1Jlc2l6ZSIsInNldFNpemUiLCJtZXNzYWdlRGF0YSIsInNldFBhZ2VQb3NpdGlvbiIsIm9uIiwiRGltZW5zaW9uIiwiZGltZW5zaW9uIiwidG9Mb3dlckNhc2UiLCJnZXRNc2dCb2R5Iiwic2VuZFBhZ2VJbmZvVG9JZnJhbWUiLCJpZnJhbWUiLCJmcmFtZUlkIiwiYm9keVBvc2l0aW9uIiwiaUZyYW1lUG9zaXRpb24iLCJ0cmlnZ2VyIiwiaWZyYW1lSGVpZ2h0IiwiaWZyYW1lV2lkdGgiLCJjbGllbnRIZWlnaHQiLCJpbm5lckhlaWdodCIsImNsaWVudFdpZHRoIiwiaW5uZXJXaWR0aCIsIm9mZnNldFRvcCIsIm9mZnNldExlZnQiLCJkb2N1bWVudEhlaWdodCIsImRvY3VtZW50V2lkdGgiLCJ3aW5kb3dIZWlnaHQiLCJ3aW5kb3dXaWR0aCIsImZsb29yIiwic2Nyb2xsUmVxdWVzdEZyb21DaGlsZCIsImFkZE9mZnNldCIsIm5ld1Bvc2l0aW9uIiwidW5zZXRQYWdlUG9zaXRpb24iLCJvbk1vdXNlIiwibW91c2VQb3MiLCJmdW5jTmFtZSIsInZhbCIsImNoa0V2ZW50IiwicmV0Qm9vbCIsInJldENvZGUiLCJjb21wU3R5bGUiLCJjcmVhdGVPdXRnb2luZ01zZyIsImlGcmFtZVJlYWR5TXNnUmVjZWl2ZWQiLCJib3hTaXppbmciLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSIsImdldFBhZGRpbmdFbmRzIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsImdldEJvcmRlckVuZHMiLCJsb2FkZWQiLCJoYXNTZXR0aW5ncyIsInJlbW90ZUhvc3QiLCJvcmlnaW4iLCJjaGVja0xpc3QiLCJFcnJvciIsImlzTWVzc2FnZUZyb21JRnJhbWUiLCJjbG9zZUlGcmFtZSIsInNldExpc3RlbmVyIiwic2VuZFBhZ2VJbmZvIiwic3RvcCIsInN0b3BQYWdlSW5mbyIsInN0YXJ0UGFnZUluZm9Nb25pdG9yIiwiYWN0aW9uTXNnIiwiVHlwZUVycm9yIiwicmVtb3ZlSWZyYW1lTGlzdGVuZXJzIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwiY2hrWmVybyIsImNoZWNrSUZyYW1lcyIsInNldHRpbmdJZCIsImNoa0RpbWVuc2lvbiIsIm9mZnNldFBhcmVudCIsImNoZWNrSUZyYW1lIiwiZGVib3VjZSIsImZpeEhpZGRlbklGcmFtZXMiLCJwcm9jZXNzRGltZW5zaW9uIiwic2V0RGltZW5zaW9uIiwiZG9Ob3RTeW5jIiwiamFzbWluZSIsImNhbGxlZU1zZyIsIm5vUmVzcG9uc2VXYXJuaW5nIiwiZXJyb3JTaG93biIsImNvbnRlbnRXaW5kb3ciLCJtc2dUaW1lb3V0IiwiZW5zdXJlSGFzSWQiLCJqb2luIiwiY2hlY2tPcHRpb25zIiwib3B0aW9uIiwiaGFzT3duUHJvcGVydHkiLCJjb3B5T3B0aW9ucyIsIm1hdGNoIiwicHJvY2Vzc09wdGlvbnMiLCJvdmVyZmxvdyIsInNldFNjcm9sbGluZyIsImFkZFN0eWxlIiwic3R5bGVWYWx1ZSIsImNoa01pbk1heCIsInNldExpbWl0cyIsInJlbW92ZWROb2RlcyIsInJlbW92ZWROb2RlIiwiY3JlYXRlRGVzdHJveU9ic2VydmVyIiwicmVzZXRSZXF1ZXJ0TWV0aG9kIiwiYmluZCIsInJlbW92ZUxpc3RlbmVycyIsImFuY2hvciIsInRpbWUiLCJ0YWJWaXNpYmxlIiwidmlzaWJpbGl0eVN0YXRlIiwic2VuZFRyaWdnZXJNc2ciLCJpc0lGcmFtZVJlc2l6ZUVuYWJsZWQiLCJ0YWdOYW1lIiwiY2hrVHlwZSIsImlGcmFtZXMiLCJ2ZW5kb3JzIiwic2V0dXBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ3YXJuRGVwcmVjYXRlZE9wdGlvbnMiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiZCIsImRlZmluaXRpb24iLCJvIiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwib2JqIl0sInNvdXJjZVJvb3QiOiIifQ==

Back to list