HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/veltech.komma.pro/wwwroot/js/site/app.js
(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{0:function(e,t,n){n("pjEF"),n("mf46"),e.exports=n("o6KM")},"8Lci":function(e,t){var n={time:Date.now(),timeout:null,waitThrottle:1e3,waitDebounce:300,lastScrollTopPosition:0,scrollDirectionDown:!0,scrollDirectionUp:!1,init:function(){n.triggerOnInit(),window.addEventListener("scroll",function(){n.time+n.waitThrottle-Date.now()<0&&(n.triggerThrottle(),n.time=Date.now())}),window.addEventListener("scroll",function(){n.triggerSmooth()}),window.addEventListener("scroll",function(){isset(n.timeout)&&clearTimeout(n.timeout),n.timeout=setTimeout(n.triggerDebounce,n.waitDebounce)})},triggerOnInit:function(){n.triggerElementInViewportAnimation()},triggerThrottle:function(){n.triggerElementInViewportAnimation()},triggerDebounce:function(){},triggerSmooth:function(){n.detectScrollDirection(),n.toggleStickyHeader()},detectIfElementIsPartlyInViewport:function(e){if(isset(e)){var t=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,i=window.innerWidth||document.documentElement.clientWidth,o=t.top<=n&&t.top+t.height>=0,r=t.left<=i&&t.left+t.width>=0;return o&&r}},detectIfElementIsFullyInViewport:function(e){if(isset(e)){var t=e.getBoundingClientRect();return t.top>=0&&t.bottom<=window.innerHeight}},detectScrollDirection:function(){var e=window.pageYOffset||document.documentElement.scrollTop;e>=n.lastScrollTopPosition?(n.scrollDirectionDown=!0,n.scrollDirectionUp=!1):(n.scrollDirectionDown=!1,n.scrollDirectionUp=!0),n.lastScrollTopPosition=e},triggerElementInViewportAnimation:function(){for(var e=document.querySelectorAll(".element-in-viewport"),t=e.length,i=0;i<t;i++){var o=e[i];n.detectIfElementIsPartlyInViewport(o)&&o.classList.remove("element-in-viewport")}},toggleStickyHeader:function(){var e=document.querySelector(".js-sticky-header"),t=document.querySelectorAll(".js-subnav"),i=!1;e.hidden=!1;for(var o=0;o<t.length;o++)if("visible"==window.getComputedStyle(t[o],null).visibility)return!0;isset(e)&&!i&&(n.scrollDirectionDown||n.lastScrollTopPosition<110?document.body.classList.remove("is-sticky-header-visible"):document.body.classList.add("is-sticky-header-visible"))}};n.init()},"8oxB":function(e,t){var n,i,o=e.exports={};function r(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===r||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:r}catch(e){n=r}try{i="function"==typeof clearTimeout?clearTimeout:a}catch(e){i=a}}();var l,c=[],u=!1,d=-1;function f(){u&&l&&(u=!1,l.length?c=l.concat(c):d=-1,c.length&&h())}function h(){if(!u){var e=s(f);u=!0;for(var t=c.length;t;){for(l=c,c=[];++d<t;)l&&l[d].run();d=-1,t=c.length}l=null,u=!1,function(e){if(i===clearTimeout)return clearTimeout(e);if((i===a||!i)&&clearTimeout)return i=clearTimeout,clearTimeout(e);try{i(e)}catch(t){try{return i.call(null,e)}catch(t){return i.call(this,e)}}}(e)}}function p(e,t){this.fun=e,this.array=t}function g(){}o.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];c.push(new p(e,t)),1!==c.length||u||s(h)},p.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=g,o.addListener=g,o.once=g,o.off=g,o.removeListener=g,o.removeAllListeners=g,o.emit=g,o.prependListener=g,o.prependOnceListener=g,o.listeners=function(e){return[]},o.binding=function(e){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(e){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}},Jxke:function(e,t,n){var i=n("x0D+"),o={init:function(){var e=document.querySelectorAll(".js-overlay-menu-trigger"),t=e.length;if(isset(e)&&0!==t)for(var n=0;n<t;n++){var i=e[n];o.initOverlayMenu(i)}},initOverlayMenu:function(e){e.addEventListener("click",o.toggleOverlayMenu,!1)},toggleOverlayMenu:function(e){var t=document.querySelector(".js-overlay-menu");if(t){if(i.enableBodyScroll(t),document.body.classList.contains("is-overlay-menu-active"))return t.querySelectorAll('[tabindex="0"]').forEach(function(e){e.tabIndex=-1}),void document.body.classList.remove("is-overlay-menu-active");i.disableBodyScroll(t),t.querySelectorAll('[tabindex="-1"]').forEach(function(e){e.tabIndex=0}),document.body.classList.toggle("is-overlay-menu-active"),t.hidden=!1}}};o.init()},K6O8:function(e,t){var n={youtubeClass:".js-youtube-player",players:[],init:function(){for(var e=document.querySelectorAll(n.youtubeClass),t=e.length,i=0;i<t;i++){var o=e[i];if(null!==o.getAttribute("id")){var r={id:o.getAttribute("id"),link:o.getAttribute("data-youtube-link"),autoPlay:parseInt(o.getAttribute("data-auto-play"))};n.players.push(r)}else console.log("Element not include because there isn't a id on the player"),console.log(o)}t>=1&&n.initYoutube()},initYoutube:function(){"undefined"==typeof YT||void 0===YT.Player?(window.onYouTubePlayerAPIReady=function(){n.loadPlayers()},getScript("https://www.youtube.com/iframe_api")):n.loadPlayers()},loadPlayers:function(){for(var e=[],t=n.players.length,i=0;i<t;i++){var o=n.players[i];o.player=new YT.Player(o.id,{height:200,width:200,videoId:o.link,host:"https://www.youtube-nocookie.com",playerVars:{modestbranding:0,rel:0,disablekb:1,autoplay:o.autoPlay},events:{onStateChange:n.onStateChange}}),e[o.id]=o}n.players=e},onReady:function(e){var t=e.target.getIframe().getAttribute("id");n.players[t].player},onStateChange:function(e){var t=e.target.getIframe().getAttribute("id"),i=n.players[t].player;e.data;e.data===YT.PlayerState.ENDED&&i.playVideo()}};n.init()},NzwN:function(e,t){var n={offset:60,duration:1400,body:null,start:0,change:0,currentTime:0,allowAnimation:!1,scrollToAnimation:null,easing:"easeInOutQuad",init:function(){for(var e=document.querySelectorAll(".js-scroll-to-target"),t=e.length,i=0;i<t;i++){e[i].addEventListener("click",function(e){n.prepareScrollTo(this.getAttribute("href")),e.preventDefault()})}},prepareScrollTo:function(e){e=e.substr(e.indexOf("#")+1);var t=document.getElementById(e).getBoundingClientRect();n.body=document.documentElement,n.start=Math.max(n.body.scrollTop,document.body.scrollTop,window.pageYOffset),n.change=t.top+n.start-n.start-n.offset,n.startTime="now"in window.performance?performance.now():(new Date).getTime(),n.allowAnimation=!0,scrollToAnimation=requestAnimationFrame(n.animateScroll),window.addEventListener("mousedown",n.abortScrollAnimation),window.addEventListener("wheel",n.abortScrollAnimation),window.addEventListener("DOMMouseScroll",n.abortScrollAnimation),window.addEventListener("mousewheel",n.abortScrollAnimation),window.addEventListener("keyup",n.abortScrollAnimation),window.addEventListener("touchmove",n.abortScrollAnimation)},animateScroll:function(e){var t=Math.min(1,(e-n.startTime)/n.duration);t<0&&(t=0),t=EasingFunctions[n.easing](t);var i=n.start+n.change*t;n.body.scrollTop=i,0===n.body.scrollTop&&(document.body.scrollTop=i),t<1&&n.allowAnimation&&(scrollToAnimation=requestAnimationFrame(n.animateScroll))},abortScrollAnimation:function(e){n.allowAnimation=!1,cancelAnimationFrame(n.scrollToAnimation)}};n.init()},QZD3:function(e,t,n){(function(i,o){var r,a,s;function l(e){return(l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}s=function(){"use strict";function e(e){var t=this.constructor;return this.then(function(n){return t.resolve(e()).then(function(){return n})},function(n){return t.resolve(e()).then(function(){return t.reject(n)})})}var t=setTimeout;function n(){}function r(e){if(!(this instanceof r))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],f(e,this)}function a(e,t){for(;3===e._state;)e=e._value;0!==e._state?(e._handled=!0,r._immediateFn(function(){var n=1===e._state?t.onFulfilled:t.onRejected;if(null!==n){var i;try{i=n(e._value)}catch(e){return void c(t.promise,e)}s(t.promise,i)}else(1===e._state?s:c)(t.promise,e._value)})):e._deferreds.push(t)}function s(e,t){try{if(t===e)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"===l(t)||"function"==typeof t)){var n=t.then;if(t instanceof r)return e._state=3,e._value=t,void u(e);if("function"==typeof n)return void f((i=n,o=t,function(){i.apply(o,arguments)}),e)}e._state=1,e._value=t,u(e)}catch(t){c(e,t)}var i,o}function c(e,t){e._state=2,e._value=t,u(e)}function u(e){2===e._state&&0===e._deferreds.length&&r._immediateFn(function(){e._handled||r._unhandledRejectionFn(e._value)});for(var t=0,n=e._deferreds.length;t<n;t++)a(e,e._deferreds[t]);e._deferreds=null}function d(e,t,n){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.promise=n}function f(e,t){var n=!1;try{e(function(e){n||(n=!0,s(t,e))},function(e){n||(n=!0,c(t,e))})}catch(e){if(n)return;n=!0,c(t,e)}}r.prototype.catch=function(e){return this.then(null,e)},r.prototype.then=function(e,t){var i=new this.constructor(n);return a(this,new d(e,t,i)),i},r.prototype.finally=e,r.all=function(e){return new r(function(t,n){if(!e||void 0===e.length)throw new TypeError("Promise.all accepts an array");var i=Array.prototype.slice.call(e);if(0===i.length)return t([]);var o=i.length;function r(e,a){try{if(a&&("object"===l(a)||"function"==typeof a)){var s=a.then;if("function"==typeof s)return void s.call(a,function(t){r(e,t)},n)}i[e]=a,0==--o&&t(i)}catch(e){n(e)}}for(var a=0;a<i.length;a++)r(a,i[a])})},r.resolve=function(e){return e&&"object"===l(e)&&e.constructor===r?e:new r(function(t){t(e)})},r.reject=function(e){return new r(function(t,n){n(e)})},r.race=function(e){return new r(function(t,n){for(var i=0,o=e.length;i<o;i++)e[i].then(t,n)})},r._immediateFn="function"==typeof i&&function(e){i(e)}||function(e){t(e,0)},r._unhandledRejectionFn=function(e){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)};var h=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==o)return o;throw new Error("unable to locate global object")}();"Promise"in h?h.Promise.prototype.finally||(h.Promise.prototype.finally=e):h.Promise=r},"object"===l(t)&&void 0!==e?s():void 0===(a="function"==typeof(r=s)?r.call(t,n,t,e):r)||(e.exports=a)}).call(this,n("URgk").setImmediate,n("yLpj"))},Qr8U:function(e,t){Number.isInteger=Number.isInteger||function(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}},T9bL:function(e,t){for(var n=[],i=document.querySelectorAll(".js-slider"),o=i.length,r=0;r<o;r++){var a=i[r].getAttribute("id");if(null!==a){var s=new l({sliderId:a,slideQuery:"#"+a+" .js-slider-slide",navigationButtons:"#"+a+" .js-slider-button",dots:"#"+a+" .js-slider-indicator"});n.push(new c(s.prepareParameters()).init())}else console.log("An image slider has no id...")}function l(e){var t=this;return this.sliderId="",this.definedPreviousNext=!0,this.autoSlider=!1,this.sliderInterval=4e3,this.navigationButtons="",this.dots="",this.slideQuery="",this.setSliderId=function(e){return this.sliderId=e,this},this.setDefinedPreviousNext=function(e){return this.definedPreviousNext=e,this},this.setAutoSlider=function(e){return this.autoSlider=e,this},this.setSliderInterval=function(e){return this.sliderInterval=e,this},this.setSlideQuery=function(e){return this.slideQuery=e,this},this.setNavigationButtons=function(e){return this.navigationButtons=e,this},this.setDots=function(e){return this.dots=e,this},this.getSliderId=function(){return this.sliderId},this.getDefinedPreviousNext=function(){return this.definedPreviousNext},this.getAutoSlider=function(){return this.autoSlider},this.getSliderInterval=function(){return this.sliderInterval},this.getSlideQuery=function(){return this.slideQuery},this.getNavigationButtons=function(){return this.navigationButtons},this.getDots=function(){return this.dots},this.prepareParameters=function(){return{sliderId:t.getSliderId(),definedPreviousNext:t.getDefinedPreviousNext(),autoSlider:t.getAutoSlider(),sliderInterval:t.getSliderInterval(),navigationButtons:t.getNavigationButtons(),dots:t.getDots(),slideQuery:t.getSlideQuery()}},this.fill=function(){for(var n=Object.keys(e),i=n.length,o=0;o<i;o++){var r=n[o];t[r]=e[r]}},this.fill(),{sliderId:t.setSliderId,definedPreviousNext:t.setDefinedPreviousNext,autoSlider:t.setAutoSlider,sliderInterval:t.setSliderInterval,navigationButtons:t.setNavigationButtons,dots:t.setDots,slideQuery:t.setSlideQuery,prepareParameters:t.prepareParameters}}function c(e){var t=this;this.sliderObject="",this.activeSlideId=0,this.previousSlideId=0,this.nextSlideId=0,this.availableSlides=1,this.slides=[],this.autoSliderInterval=null,this.settings={},this.init=function(){this.settings=e,this.sliderObject=document.getElementById(this.settings.sliderId),this.slides=document.querySelectorAll(this.settings.slideQuery),this.availableSlides=this.slides.length,this.activeSlideId=0,t.settings.definedPreviousNext&&this.setPreviousAndNextSlide(),this.setSlide();var n=new Hammer(this.sliderObject);if(n.on("swipeleft",function(){t.resetAutoSlider(),t.nextSlide(),t.setSlide()}),n.on("swiperight",function(){t.resetAutoSlider(),t.previousSlide(),t.setSlide()}),""!==this.settings.navigationButtons)for(var i=document.querySelectorAll(this.settings.navigationButtons),o=i.length,r=0;r<o;r++){i[r].addEventListener("click",function(){t.clickNavigationButton(this)})}if(""!==this.settings.dots)for(var a=document.querySelectorAll(this.settings.dots),s=a.length,l=0;l<s;l++){a[l].addEventListener("click",function(){t.clickDot(this)})}t.autoSlider()},this.autoSlider=function(){null!==this.autoSliderInterval&&clearInterval(this.autoSliderInterval),this.settings.autoSlider&&Number.isInteger(this.settings.sliderInterval)&&(this.autoSliderInterval=setInterval(function(){t.nextSlide(),t.setSlide()},this.settings.sliderInterval))},this.resetAutoSlider=t.autoSlider,this.nextSlide=function(){this.activeSlideId++,this.activeSlideId>=this.availableSlides&&(this.activeSlideId=0),t.settings.definedPreviousNext&&this.setPreviousAndNextSlide()},this.previousSlide=function(){this.activeSlideId--,this.activeSlideId<0&&(this.activeSlideId=this.availableSlides-1),t.settings.definedPreviousNext&&this.setPreviousAndNextSlide()},this.setPreviousAndNextSlide=function(){this.nextSlideId=this.activeSlideId+1,this.nextSlideId>=this.availableSlides&&(this.nextSlideId=0),this.previousSlideId=this.activeSlideId-1,this.previousSlideId<0&&(this.previousSlideId=this.availableSlides-1)},this.setSlide=function(){for(var e=t.slides.length,n=0;n<e;n++){var i=t.slides[n];i.style.pointerEvents="none";var o=parseInt(i.getAttribute("data-order"));o!==t.activeSlideId?i.classList.remove("is-active"):i.classList.add("is-active"),t.settings.definedPreviousNext&&(o!==t.previousSlideId?i.classList.remove("previous"):i.classList.add("previous"),o!==t.nextSlideId?i.classList.remove("next"):i.classList.add("next"))}""!==t.settings.dots&&t.setActiveDot()},this.clickNavigationButton=function(e){t.activeSlideId=parseInt(e.getAttribute("data-order")),t.settings.definedPreviousNext&&t.setPreviousAndNextSlide(),t.setSlide();var n=document.querySelector(t.settings.navigationButtons+".next"),i=document.querySelector(t.settings.navigationButtons+".previous");n.setAttribute("data-order",t.nextSlideId),i.setAttribute("data-order",t.previousSlideId),t.resetAutoSlider()},this.clickDot=function(e){t.activeSlideId=parseInt(e.getAttribute("data-order")),t.setSlide(),t.resetAutoSlider()},this.setActiveDot=function(){for(var e=document.querySelectorAll(this.settings.dots),n=e.length,i=0;i<n;i++){var o=e[i];dotOrder=parseInt(o.getAttribute("data-order")),dotOrder!==t.activeSlideId?(o.classList.remove("is-active"),o.tabIndex=0):(o.classList.add("is-active"),o.tabIndex=-1)}}}},URgk:function(e,t,n){(function(e){var i=void 0!==e&&e||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function r(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new r(o.call(setTimeout,i,arguments),clearTimeout)},t.setInterval=function(){return new r(o.call(setInterval,i,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},r.prototype.unref=r.prototype.ref=function(){},r.prototype.close=function(){this._clearFn.call(i,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},n("YBdB"),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n("yLpj"))},YBdB:function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var i,o,r,a,s,l=1,c={},u=!1,d=e.document,f=Object.getPrototypeOf&&Object.getPrototypeOf(e);f=f&&f.setTimeout?f:e,"[object process]"==={}.toString.call(e.process)?i=function(e){t.nextTick(function(){p(e)})}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?e.MessageChannel?((r=new MessageChannel).port1.onmessage=function(e){p(e.data)},i=function(e){r.port2.postMessage(e)}):d&&"onreadystatechange"in d.createElement("script")?(o=d.documentElement,i=function(e){var t=d.createElement("script");t.onreadystatechange=function(){p(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):i=function(e){setTimeout(p,0,e)}:(a="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(a)&&p(+t.data.slice(a.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),i=function(t){e.postMessage(a+t,"*")}),f.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n<t.length;n++)t[n]=arguments[n+1];var o={callback:e,args:t};return c[l]=o,i(l),l++},f.clearImmediate=h}function h(e){delete c[e]}function p(e){if(u)setTimeout(p,0,e);else{var t=c[e];if(t){u=!0;try{!function(e){var t=e.callback,i=e.args;switch(i.length){case 0:t();break;case 1:t(i[0]);break;case 2:t(i[0],i[1]);break;case 3:t(i[0],i[1],i[2]);break;default:t.apply(n,i)}}(t)}finally{h(e),u=!1}}}}}("undefined"==typeof self?void 0===e?this:e:self)}).call(this,n("yLpj"),n("8oxB"))},YuTi:function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},kdf5:function(e,t){var n={map:"",key:"AIzaSyCVGPUmRmQRxXvzzWu3Xyu77XebQxQ-f4Y",location:{lat:51.219899,lng:5.283881},styling:"",init:function(){n.map=document.querySelector(".js-google-map"),isset(n.map)&&(n.map.hasAttribute("data-google-lat")&&(n.location.lat=parseFloat(n.map.getAttribute("data-google-lat"))),n.map.hasAttribute("data-google-lng")&&(n.location.lng=parseFloat(n.map.getAttribute("data-google-lng"))),n.setCustomStyling(),"undefined"==typeof google||void 0===google.maps?getScript("https://maps.googleapis.com/maps/api/js?key="+n.key,n.drawMap):n.drawMap())},drawMap:function(){var e=new google.maps.Map(n.map,{zoom:14,center:n.location,disableDefaultUI:!0,styles:n.styling}),t='<div><p>Plan een route op <a target="_blank" href="https://www.google.com/maps/dir/?api=1&destination='+n.location.lat+","+n.location.lng+'" class="link">google maps</a> </p></div>',i=new google.maps.InfoWindow({content:t}),o=new google.maps.Marker({position:n.location,map:e});o.addListener("click",function(){i.open(e,o)})},setCustomStyling:function(){n.styling=[{featureType:"water",elementType:"geometry",stylers:[{color:"#e9e9e9"},{lightness:17}]},{featureType:"landscape",elementType:"geometry",stylers:[{color:"#f5f5f5"},{lightness:20}]},{featureType:"road.highway",elementType:"geometry.fill",stylers:[{color:"#ffffff"},{lightness:17}]},{featureType:"road.highway",elementType:"geometry.stroke",stylers:[{color:"#ffffff"},{lightness:29},{weight:.2}]},{featureType:"road.arterial",elementType:"geometry",stylers:[{color:"#ffffff"},{lightness:18}]},{featureType:"road.local",elementType:"geometry",stylers:[{color:"#ffffff"},{lightness:16}]},{featureType:"poi",elementType:"geometry",stylers:[{color:"#f5f5f5"},{lightness:21}]},{featureType:"poi.park",elementType:"geometry",stylers:[{color:"#dedede"},{lightness:21}]},{elementType:"labels.text.stroke",stylers:[{visibility:"on"},{color:"#ffffff"},{lightness:16}]},{elementType:"labels.text.fill",stylers:[{saturation:36},{color:"#333333"},{lightness:40}]},{elementType:"labels.icon",stylers:[{visibility:"off"}]},{featureType:"transit",elementType:"geometry",stylers:[{color:"#f2f2f2"},{lightness:19}]},{featureType:"administrative",elementType:"geometry.fill",stylers:[{color:"#fefefe"},{lightness:20}]},{featureType:"administrative",elementType:"geometry.stroke",stylers:[{color:"#fefefe"},{lightness:17},{weight:1.2}]}]}};n.init()},mBdS:function(e,t){},mf46:function(e,t){},o5AR:function(e,t){var n={bannedVisitor:[],enter:function(){var e=document.querySelectorAll(".js-chocolate-factory");if(isset(e))for(var t=e.length,i=0;i<t;i++){var o=e[i];n._flashTicket(o)}},_flashTicket:function(e){var t=e.querySelector(".js-golden-ticket");isset(t)?t.addEventListener("click",function(){n.enjoyTheTour(e)}):console.log("To bad, no golden tickets has been found.")},enjoyTheTour:function(e){var t=e.querySelectorAll("input, textarea");if(isset(t)){for(var i={},o=0,r=t.length,a=0;a<r;a++){var s=t[a],l=s.getAttribute("name");n._isVisitorBanned(l)||(i[l]=n._getArrangement(s),o++)}if(0===o)return;n._finishTour(i,e)}else console.log("To bad, no members to visit this factory")},_isVisitorBanned:function(e){return-1!==n.bannedVisitor.indexOf(e)},_getArrangement:function(e){e.nodeName;return e.value},_finishTour:function(e,t){e=n._addWillieWonka(e);try{Ajax.post("/contact/process",e,function(e){var i=JSON.parse(e.response);switch(e.status){case 200:return n._thanksForVisiting(i.redirectUrl);case 422:return n._giveFeedbackToMembers(i.errors,t)}return n._unknownGapInFactory(t)})}catch(e){return n._unknownGapInFactory(t)}},_addWillieWonka:function(e){return e._willie="wonka",e},_giveFeedbackToMembers:function(e,t){var i=t.querySelector(".js-error-area");isset(i)&&(i.innerHTML=""),n._clearPreviousMarkedJackets(t),Object.keys(e).forEach(function(o){var r=null,a=null;if("_honey"!==o&&"_secretCode"!==o){var s=t.querySelector("#"+o);r=n._grabVisitorJacket(s),isset(r)&&(a=r.querySelector(".js-form-group-error")),isset(a)&&(a.innerHTML="")}for(var l=e[o],c=l.length,u=0;u<c;u++){var d=l[u];if(console.log(o,d),"_honey"!==o&&"_secretCode"!==o&&(isset(r)&&r.classList.add("has-error"),isset(a)&&d.length>0)){var f=a.innerHTML;f+="<span>"+capitalizeFirstLetter(d)+"</span>",a.innerHTML=f}if(isset(i)&&d.length>0){var h=i.innerHTML;h+="<li>"+capitalizeFirstLetter(d)+"</li>",i.innerHTML=h}}})},_clearPreviousMarkedJackets:function(e){for(var t=e.querySelectorAll(".has-error"),n=t.length,i=0;i<n;i++)t[i].classList.remove("has-error")},_grabVisitorJacket:function(e){if(!isset(e))return null;currentLayer=e,safetyBreak=0;do{if(safetyBreak++,currentLayer=currentLayer.parentNode,currentLayer.classList.contains("js-form-group"))return currentLayer}while("BODY"!==currentLayer.tagName&&safetyBreak<=10);return null},_thanksForVisiting:function(e){window.location=e},_unknownGapInFactory:function(e){console.log(e),console.log("ChocolateFactory: Unkown Error")}};n.enter()},o6KM:function(e,t){},pjEF:function(e,t,n){n("yLV6"),n("eCb9"),n("mBdS"),n("Qr8U"),n("QZD3"),n("wLoJ"),n("yFlJ"),n("q2ye"),n("8Lci"),n("o5AR"),n("yQ37"),n("kdf5"),n("Jxke"),n("T9bL"),n("NzwN"),n("K6O8")},q2ye:function(e,t){var n={userAgent:"",browserInfo:"",init:function(){n.userAgent=window.navigator.userAgent,n.browserInfo=n.getBrowserInfo(),n.handleIE(),n.handleSafari()},handleIE:function(){var e=n.userAgent.indexOf("MSIE "),t=e>0,i=!!navigator.userAgent.match(/Trident.*rv\:11\./);if(t||i){var o="11";t&&(o=parseInt(n.userAgent.substring(e+5,n.userAgent.indexOf(".",e)))),document.body.classList.add("ie"),document.body.classList.add("v"+o)}},handleSafari:function(){"Safari"===n.browserInfo.name&&n.browserInfo.version<=10&&document.getElementsByTagName("html")[0].classList.add("ie")},getBrowserInfo:function(){var e,t=navigator.userAgent,n=t.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i)||[];return/trident/i.test(n[1])?{name:"IE ",version:(e=/\brv[ :]+(\d+)/g.exec(t)||[])[1]||""}:"Chrome"===n[1]&&null!=(e=t.match(/\bOPR\/(\d+)/))?{name:"Opera",version:e[1]}:(n=n[2]?[n[1],n[2]]:[navigator.appName,navigator.appVersion,"-?"],null!=(e=t.match(/version\/(\d+)/i))&&n.splice(1,1,e[1]),{name:n[0],version:n[1]})}};n.init()},wLoJ:function(e,t,n){(function(e,t){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}!function(e,i){"use strict";"object"==n(t)&&"object"==n(t.exports)?t.exports=i(e):i(e)}("undefined"!=typeof window?window:e,function(e){"use strict";var t=Object.defineProperty,i=Object.defineProperties,o=0,r=[],a=Array.prototype.slice,s="object"==n(e.ES6)?e.ES6:e.ES6={},l=Array.isArray,c=Object.prototype.toString,u=Array.prototype.push,d=function(){},f=function(e){return e},h=function(e){return"function"==typeof e},p=function(){},g=function(e,t){this._array=e,this._flag=t,this._nextIndex=0},y=function(e,t){this._string=e,this._flag=t,this._nextIndex=0},m=function(e){return null!==e&&("object"==n(e)||"function"==typeof e)},v=function(e,t){if("number"==typeof e.length&&e.length>=0&&"number"==typeof t.length&&t.length>=0){var n=Math.floor(e.length),i=Math.floor(t.length),o=0;for(e.length=n+i;o<i;++o)t.hasOwnProperty(o)&&(e[n+o]=t[o])}},w=function(e,t){if("function"!=typeof e||"function"!=typeof t)throw new TypeError("Child and Parent must be function type");e.prototype=Object.create(t.prototype),e.prototype.constructor=e},b=function e(t){if(t=void 0===t?"":String(t),this instanceof e)throw new TypeError("Symbol is not a constructor");return function(e,t){return i(e,{_description:{value:t},_isSymbol:{value:!0},_id:{value:o++}}),e}(Object.create(e.prototype),t)};i(b,{for:{value:function(e){e=String(e);for(var t,n=r.length,i=0;i<n;++i)if((t=r[i]).key===e)return t.symbol;return t={key:e,symbol:b(e)},r.push(t),t.symbol},writable:!0,configurable:!0},keyFor:{value:function(e){if(!s.isSymbol(e))throw new TypeError(String(e)+" is not a symbol");for(var t,n=r.length,i=0;i<n;++i)if((t=r[i]).symbol===e)return t.key},writable:!0,configurable:!0},hasInstance:{value:b("Symbol.hasInstance")},isConcatSpreadable:{value:b("Symbol.isConcatSpreadable")},iterator:{value:b("Symbol.iterator")},toStringTag:{value:b("Symbol.toStringTag")}}),b.prototype.toString=function(){return"@@_____"+this._id+"_____"},b.prototype.valueOf=function(){return this},t(p.prototype,b.iterator.toString(),{value:function(){return this},writable:!0,configurable:!0}),w(g,p),w(y,p),t(g.prototype,b.toStringTag.toString(),{value:"Array Iterator",configurable:!0}),t(y.prototype,b.toStringTag.toString(),{value:"String Iterator",configurable:!0}),g.prototype.next=function(){if(!(this instanceof g))throw new TypeError("Method Array Iterator.prototype.next called on incompatible receiver "+String(this));var e;return-1===this._nextIndex?{done:!0,value:void 0}:"number"==typeof this._array.length&&this._array.length>=0&&this._nextIndex<Math.floor(this._array.length)?(1===this._flag?e=[this._nextIndex,this._array[this._nextIndex]]:2===this._flag?e=this._array[this._nextIndex]:3===this._flag&&(e=this._nextIndex),this._nextIndex++,{done:!1,value:e}):(this._nextIndex=-1,{done:!0,value:void 0})},y.prototype.next=function(){if(!(this instanceof y))throw new TypeError("Method String Iterator.prototype.next called on incompatible receiver "+String(this));var e,t=new String(this._string);return-1===this._nextIndex?{done:!0,value:void 0}:this._nextIndex<t.length?(e=t[this._nextIndex],this._nextIndex++,{done:!1,value:e}):(this._nextIndex=-1,{done:!0,value:void 0})};var S=function(e,t){this._target=e,this._values=[],this._thisArg=t};return S.prototype.spread=function(){var e=this;return a.call(arguments).forEach(function(t){s.forOf(t,function(t){e._values.push(t)})}),e},S.prototype.add=function(){var e=this;return a.call(arguments).forEach(function(t){e._values.push(t)}),e},S.prototype.call=function(e){if("function"!=typeof this._target)throw new TypeError("Target is not a function");return e=arguments.length<=0?this._thisArg:e,this._target.apply(e,this._values)},S.prototype.new=function(){if("function"!=typeof this._target)throw new TypeError("Target is not a constructor");var e,t;return e=Object.create(this._target.prototype),t=this._target.apply(e,this._values),m(t)?t:e},S.prototype.array=function(){if(!l(this._target))throw new TypeError("Target is not a array");return u.apply(this._target,this._values),this._target},i(s,{isSymbol:{value:function(e){return e instanceof b&&function(e){return!0===e._isSymbol&&"number"==typeof e._id&&"string"==typeof e._description}(e)},writable:!0,configurable:!0},instanceOf:{value:function(e,t){if(!m(t))throw new TypeError("Right-hand side of 'instanceof' is not an object");var i=t[b.hasInstance];if(void 0===i)return e instanceof t;if("function"!=typeof i)throw new TypeError(n(i)+" is not a function");return i.call(t,e)},writable:!0,configurable:!0},forOf:{value:function(e,t,n){if(t="function"!=typeof t?d:t,"function"!=typeof e[b.iterator])throw new TypeError("Iterable[Symbol.iterator] is not a function");var i,o=e[b.iterator]();if("function"!=typeof o.next)throw new TypeError(".iterator.next is not a function");for(;;){if(i=o.next(),!m(i))throw new TypeError("Iterator result "+i+" is not an object");if(i.done)break;t.call(n,i.value)}},writable:!0,configurable:!0},spreadOperator:{value:function(e,t){if("function"!=typeof e&&!l(e))throw new TypeError("Spread operator only supports on array and function objects at this moment");return new S(e,t)},writable:!0,configurable:!0}}),t(e,"Symbol",{value:b,writable:!0,configurable:!0}),t(Function.prototype,b.hasInstance.toString(),{value:function(e){return"function"==typeof this&&e instanceof this}}),t(Array.prototype,"concat",{value:function(){if(null==this)throw new TypeError("Array.prototype.concat called on null or undefined");var e=Object(this),t=a.call(arguments),n=[];return t.unshift(e),t.forEach(function(e){m(e)?void 0!==e[b.isConcatSpreadable]?e[b.isConcatSpreadable]?v(n,e):n.push(e):l(e)?v(n,e):n.push(e):n.push(e)}),n},writable:!0,configurable:!0}),t(Object.prototype,"toString",{value:function(){return null==this?c.call(this):"string"==typeof this[b.toStringTag]?"[object "+this[b.toStringTag]+"]":c.call(this)},writable:!0,configurable:!0}),t(Array.prototype,b.iterator.toString(),{value:function(){if(null==this)throw new TypeError("Cannot convert undefined or null to object");var e=Object(this);return new g(e,2)},writable:!0,configurable:!0}),t(Array,"from",{value:function(e,t,n){var i,o,r,a=0;if(i=h(this)?this:Array,null==e)throw new TypeError("Cannot convert undefined or null to object");if(e=Object(e),void 0===t)t=f;else if(!h(t))throw new TypeError(t+" is not a function");if(void 0===e[b.iterator]){if(!("number"==typeof e.length&&e.length>=0))return(r=new i(0)).length=0,r;for(o=Math.floor(e.length),(r=new i(o)).length=o;a<o;++a)r[a]=t.call(n,e[a])}else(r=new i).length=0,s.forOf(e,function(e){r.length++,r[r.length-1]=t.call(n,e)});return r},writable:!0,configurable:!0}),t(Array.prototype,"entries",{value:function(){if(null==this)throw new TypeError("Cannot convert undefined or null to object");var e=Object(this);return new g(e,1)},writable:!0,configurable:!0}),t(Array.prototype,"keys",{value:function(){if(null==this)throw new TypeError("Cannot convert undefined or null to object");var e=Object(this);return new g(e,3)},writable:!0,configurable:!0}),t(String.prototype,b.iterator.toString(),{value:function(){if(null==this)throw new TypeError("String.prototype[Symbol.iterator] called on null or undefined");return new y(String(this),0)},writable:!0,configurable:!0}),s})}).call(this,n("yLpj"),n("YuTi")(e))},yFlJ:function(e,t){window.isset=function(e){return null!=e},window.EasingFunctions={linear:function(e){return e},easeInQuad:function(e){return e*e},easeOutQuad:function(e){return e*(2-e)},easeInOutQuad:function(e){return e<.5?2*e*e:(4-2*e)*e-1},easeInCubic:function(e){return e*e*e},easeOutCubic:function(e){return--e*e*e+1},easeInOutCubic:function(e){return e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1},easeInQuart:function(e){return e*e*e*e},easeOutQuart:function(e){return 1- --e*e*e*e},easeInOutQuart:function(e){return e<.5?8*e*e*e*e:1-8*--e*e*e*e},easeInQuint:function(e){return e*e*e*e*e},easeOutQuint:function(e){return 1+--e*e*e*e*e},easeInOutQuint:function(e){return e<.5?16*e*e*e*e*e:1+16*--e*e*e*e*e}},window.getScript=function(e,t){var n=document.createElement("script");n.async=1;var i=document.getElementsByTagName("script"),o=i[i.length-1];n.onload=n.onreadystatechange=function(e,i){(i||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n=void 0,i||t&&t())},n.src=e,o.parentNode.insertBefore(n,o)},window.debounce=function(e,t,n){var i;return function(){var o=this,r=arguments,a=function(){i=null,n||e.apply(o,r)},s=n&&!i;clearTimeout(i),i=setTimeout(a,t),s&&e.apply(o,r)}},window.Cookie={set:function(e,t,n){var i,o,r,a,s;n?((r=new Date).setTime(r.getTime()+24*n*60*60*1e3),a="; expires="+r.toGMTString()):a="",1===(s=location.host).split(".").length?document.cookie=e+"="+t+a+"; path=/":((o=s.split(".")).shift(),i="."+o.join("."),document.cookie=e+"="+t+a+"; path=/; domain="+i,null!=Cookie.get(e)&&Cookie.get(e)==t||(i="."+s,document.cookie=e+"="+t+a+"; path=/; domain="+i))},get:function(e){for(var t=e+"=",n=document.cookie.split(";"),i=0;i<n.length;i++){for(var o=n[i];" "===o.charAt(0);)o=o.substring(1,o.length);if(0===o.indexOf(t))return o.substring(t.length,o.length)}return null},erase:function(e){Cookie.set(e,"",-1)}},window.number_format=function(e,t,n,i){e=(e+"").replace(/[^0-9+\-Ee.]/g,"");var o=isFinite(+e)?+e:0,r=isFinite(+t)?Math.abs(t):0,a=void 0===i?",":i,s=void 0===n?".":n,l="";return(l=(r?function(e,t){var n=Math.pow(10,t);return""+Math.round(e*n)/n}(o,r):""+Math.round(o)).split("."))[0].length>3&&(l[0]=l[0].replace(/\B(?=(?:\d{3})+(?!\d))/g,a)),(l[1]||"").length<r&&(l[1]=l[1]||"",l[1]+=new Array(r-l[1].length+1).join("0")),l.join(s)},Element.prototype.closest||(Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),Element.prototype.closest=function(e){var t=this;if(!document.documentElement.contains(this))return null;do{if(t.matches(e))return t;t=t.parentElement}while(null!==t);return null}),window.Ajax={get:function(e,t){var n=new XMLHttpRequest,i=document.querySelector('meta[name="csrf-token"]').content;n.open("get",e,!0),n.setRequestHeader("Content-Type","application/json"),n.setRequestHeader("X-CSRF-TOKEN",i),n.setRequestHeader("X-Requested-With","XMLHttpRequest"),n.onreadystatechange=function(){4===n.readyState&&t(n)},n.send()},post:function(e,t,n){var i=new XMLHttpRequest,o=document.querySelector('meta[name="csrf-token"]').content;i.open("post",e,!0),i.setRequestHeader("Content-Type","application/json"),i.setRequestHeader("X-CSRF-TOKEN",o),i.setRequestHeader("X-Requested-With","XMLHttpRequest"),i.onreadystatechange=function(){4===i.readyState&&n(i)},i.send(JSON.stringify(t))}},window.capitalizeFirstLetter=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},window.snakeToCamel=function(e){return e.replace(/(\-\w)/g,function(e){return e[1].toUpperCase()})},window.indexInParent=function(e){for(var t=e.parentNode.childNodes,n=0,i=0;i<t.length;i++){if(t[i]==e)return n;1==t[i].nodeType&&n++}return-1},window.copyToClipboard=function(e){if(e="string"==typeof e?document.querySelector(e):e,navigator.userAgent.match(/ipad|ipod|iphone/i)){var t=e.contentEditable,n=e.readOnly;e.contentEditable=!0,e.readOnly=!0;var i=document.createRange();i.selectNodeContents(e);var o=window.getSelection();o.removeAllRanges(),o.addRange(i),e.setSelectionRange(0,999999),e.contentEditable=t,e.readOnly=n}else e.select();document.execCommand("copy")},window.bodyOffset=function(e){var t=e.getBoundingClientRect(),n=window.pageXOffset||document.documentElement.scrollLeft,i=window.pageYOffset||document.documentElement.scrollTop;return{top:t.top+i,left:t.left+n}}},yLpj:function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},yQ37:function(e,t){var n={cookieBar:null,cookieOverlay:null,cookieMessage:null,cookieSwitch:null,cookieFadeOutAnimationDuration:400,acceptTracking:!1,init:function(){n.cookieMessage=document.querySelector(".js-cookie-bar, .js-cookie-overlay"),n.cookieBar=document.querySelector(".js-cookie-bar"),isset(n.cookieBar)?n.initCookieBar():(n.cookieOverlay=document.querySelector(".js-cookie-overlay"),isset(n.cookieOverlay)&&n.initCookieOverlay()),isset(n.cookieMessage)&&n.checkForCookieSettings(),n.cookieSwitch=document.querySelector(".js-cookie-switch"),isset(n.cookieSwitch)&&n.initCookieSwitch()},initCookieBar:function(){var e=n.cookieBar.querySelector(".js-disable-cookie-bar");isset(e)&&e.addEventListener("click",n.closeCookieMessage)},initCookieOverlay:function(){var e=n.cookieMessage.querySelector(".js-change-cookies-settings");isset(e)&&e.addEventListener("click",n.openCookieSettings);var t=n.cookieMessage.querySelector(".c-cookie-type__input--tracking");isset(t)&&(!0===t.checked&&(n.acceptTracking=!0),t.addEventListener("change",n.toggleTrackingSetting));var i=n.cookieMessage.querySelector(".js-accept-cookies");isset(i)&&i.addEventListener("click",n.setCookieSettings)},initCookieSwitch:function(){var e=n.cookieSwitch.querySelector(".c-cookie-type__input--tracking");isset(e)&&(!0===e.checked?n.acceptTracking=!0:n.acceptTracking=!1,e.addEventListener("change",n.toggleTrackingSetting));var t=n.cookieSwitch.querySelector(".js-save-cookie-settings");isset(t)&&t.addEventListener("click",function(){n.cookieFadeOutAnimationDuration=0,n.setCookieSettings()})},checkForCookieSettings:function(){Cookie.get("cookieMessage")?(n.cookieMessage.classList.add("is-accepted"),document.body.classList.add("is-cookies-accepted")):(n.cookieMessage.classList.remove("is-accepted"),document.body.classList.remove("is-cookies-accepted"))},closeCookieMessage:function(){Cookie.set("cookieMessage",!0,90),n.cookieMessage.classList.add("is-transitioning-out"),document.body.classList.add("is-cookies-accepted")},openCookieSettings:function(){n.cookieOverlay.querySelector(".js-cookie-settings").classList.remove("is-hidden"),n.cookieOverlay.querySelector(".js-cookie-info").classList.add("is-hidden")},toggleTrackingSetting:function(){n.acceptTracking?n.acceptTracking=!1:n.acceptTracking=!0},setCookieSettings:function(){n.acceptTracking?Cookie.set("trackingCookieAccepted","true",90):Cookie.get("trackingCookieAccepted")&&Cookie.erase("trackingCookieAccepted"),n.closeCookieMessage(),setTimeout(function(){location.reload()},n.cookieFadeOutAnimationDuration)}};n.init()}},[[0,1,2]]]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvc2l0ZS9nbG9iYWwvc2Nyb2xsSGFuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9zaXRlL2NvbXBvbmVudHMvb3ZlcmxheU1lbnVIYW5kbGVyLmpzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9zaXRlL2NvbXBvbmVudHMveW91dHViZUhhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3NpdGUvY29tcG9uZW50cy9zY3JvbGxUb0hhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2dsb2JhbC9wb2x5ZmlsbHMvcHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvZ2xvYmFsL3BvbHlmaWxscy9pc0ludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3NpdGUvY29tcG9uZW50cy9zbGlkZXJIYW5kbGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zZXRpbW1lZGlhdGUvc2V0SW1tZWRpYXRlLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3NpdGUvY29tcG9uZW50cy9tYXBzSGFuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvc2l0ZS9jb21wb25lbnRzL2Nob2NvbGF0ZUZhY3RvcnkuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3NpdGUvYXBwLmpzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9zaXRlL2dsb2JhbC9icm93c2VySGFuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvZ2xvYmFsL3BvbHlmaWxscy9zeW1ib2wtZXM2Lm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvc2l0ZS9nbG9iYWwvaGVscGVycy5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9zaXRlL2NvbXBvbmVudHMvY29va2llSGFuZGxlci5qcyJdLCJuYW1lcyI6WyJTY3JvbGxIYW5kbGVyIiwidGltZSIsIkRhdGUiLCJub3ciLCJ0aW1lb3V0Iiwid2FpdFRocm90dGxlIiwid2FpdERlYm91bmNlIiwibGFzdFNjcm9sbFRvcFBvc2l0aW9uIiwic2Nyb2xsRGlyZWN0aW9uRG93biIsInNjcm9sbERpcmVjdGlvblVwIiwiaW5pdCIsInRyaWdnZXJPbkluaXQiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwidHJpZ2dlclRocm90dGxlIiwidHJpZ2dlclNtb290aCIsImlzc2V0IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsInRyaWdnZXJEZWJvdW5jZSIsInRyaWdnZXJFbGVtZW50SW5WaWV3cG9ydEFuaW1hdGlvbiIsImRldGVjdFNjcm9sbERpcmVjdGlvbiIsInRvZ2dsZVN0aWNreUhlYWRlciIsImRldGVjdElmRWxlbWVudElzUGFydGx5SW5WaWV3cG9ydCIsImVsIiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpbmRvd0hlaWdodCIsImlubmVySGVpZ2h0IiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJjbGllbnRIZWlnaHQiLCJ3aW5kb3dXaWR0aCIsImlubmVyV2lkdGgiLCJjbGllbnRXaWR0aCIsInZlcnRpY2FsSW5WaWV3IiwidG9wIiwiaGVpZ2h0IiwiaG9yaXpvbnRhbEluVmlldyIsImxlZnQiLCJ3aWR0aCIsImRldGVjdElmRWxlbWVudElzRnVsbHlJblZpZXdwb3J0IiwiYm90dG9tIiwic2Nyb2xsVG9wUG9zaXRpb24iLCJwYWdlWU9mZnNldCIsInNjcm9sbFRvcCIsImVsZW1lbnRzIiwicXVlcnlTZWxlY3RvckFsbCIsImVsZW1lbnRzTGVuZ3RoIiwibGVuZ3RoIiwiZSIsImVsZW1lbnQiLCJjbGFzc0xpc3QiLCJyZW1vdmUiLCJzdGlja3lIZWFkZXIiLCJxdWVyeVNlbGVjdG9yIiwic3VibmF2TGlzdCIsInN1Yk5hdklzVmlzaWJsZSIsImhpZGRlbiIsImkiLCJnZXRDb21wdXRlZFN0eWxlIiwidmlzaWJpbGl0eSIsImJvZHkiLCJhZGQiLCJjYWNoZWRTZXRUaW1lb3V0IiwiY2FjaGVkQ2xlYXJUaW1lb3V0IiwicHJvY2VzcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0U2V0VGltb3V0IiwiRXJyb3IiLCJkZWZhdWx0Q2xlYXJUaW1lb3V0IiwicnVuVGltZW91dCIsImZ1biIsImNhbGwiLCJ0aGlzIiwiY3VycmVudFF1ZXVlIiwicXVldWUiLCJkcmFpbmluZyIsInF1ZXVlSW5kZXgiLCJjbGVhblVwTmV4dFRpY2siLCJjb25jYXQiLCJkcmFpblF1ZXVlIiwibGVuIiwicnVuIiwibWFya2VyIiwicnVuQ2xlYXJUaW1lb3V0IiwiSXRlbSIsImFycmF5Iiwibm9vcCIsIm5leHRUaWNrIiwiYXJncyIsIkFycmF5IiwiYXJndW1lbnRzIiwicHVzaCIsInByb3RvdHlwZSIsImFwcGx5IiwidGl0bGUiLCJicm93c2VyIiwiZW52IiwiYXJndiIsInZlcnNpb24iLCJ2ZXJzaW9ucyIsIm9uIiwiYWRkTGlzdGVuZXIiLCJvbmNlIiwib2ZmIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJlbWl0IiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImxpc3RlbmVycyIsIm5hbWUiLCJiaW5kaW5nIiwiY3dkIiwiY2hkaXIiLCJkaXIiLCJ1bWFzayIsImJvZHlTY3JvbGxMb2NrIiwicmVxdWlyZSIsIk92ZXJsYXlNZW51SGFuZGxlciIsIm92ZXJsYXlNZW51VHJpZ2dlckxpc3QiLCJvdmVybGF5TWVudVRyaWdnZXJMaXN0Q291bnQiLCJvdmVybGF5TWVudVRyaWdnZXIiLCJpbml0T3ZlcmxheU1lbnUiLCJ0b2dnbGVPdmVybGF5TWVudSIsImV2ZW50Iiwib3ZlcmxheU1lbnVOYXYiLCJlbmFibGVCb2R5U2Nyb2xsIiwiY29udGFpbnMiLCJmb3JFYWNoIiwiZWxlbSIsInRhYkluZGV4IiwiZGlzYWJsZUJvZHlTY3JvbGwiLCJ0b2dnbGUiLCJZb3V0dWJlSGFuZGxlciIsInlvdXR1YmVDbGFzcyIsInBsYXllcnMiLCJ5b3V0dWJlUGxheWVycyIsInlvdXR1YmVQbGF5ZXJzQW1vdW50IiwieW91dHViZVBsYXllciIsImdldEF0dHJpYnV0ZSIsInlvdXR1YmVFbGVtZW50IiwiaWQiLCJsaW5rIiwiYXV0b1BsYXkiLCJwYXJzZUludCIsImNvbnNvbGUiLCJsb2ciLCJpbml0WW91dHViZSIsIllUIiwiUGxheWVyIiwib25Zb3VUdWJlUGxheWVyQVBJUmVhZHkiLCJsb2FkUGxheWVycyIsImdldFNjcmlwdCIsInBsYXllciIsInZpZGVvSWQiLCJob3N0IiwicGxheWVyVmFycyIsIm1vZGVzdGJyYW5kaW5nIiwicmVsIiwiZGlzYWJsZWtiIiwiYXV0b3BsYXkiLCJldmVudHMiLCJvblN0YXRlQ2hhbmdlIiwib25SZWFkeSIsInBsYXllckNvbnRhaW5lcklkIiwidGFyZ2V0IiwiZ2V0SWZyYW1lIiwiZGF0YSIsIlBsYXllclN0YXRlIiwiRU5ERUQiLCJwbGF5VmlkZW8iLCJTY3JvbGxUb0hhbmRsZXIiLCJvZmZzZXQiLCJkdXJhdGlvbiIsInN0YXJ0IiwiY2hhbmdlIiwiY3VycmVudFRpbWUiLCJhbGxvd0FuaW1hdGlvbiIsInNjcm9sbFRvQW5pbWF0aW9uIiwiZWFzaW5nIiwiYW5jaG9yTGlua3MiLCJhbmNob3JMaW5rc0Ftb3VudCIsInByZXBhcmVTY3JvbGxUbyIsInByZXZlbnREZWZhdWx0IiwiZWxlbWVudElkIiwic3Vic3RyIiwiaW5kZXhPZiIsInNjcm9sbFRvRWxlbWVudFBvc2l0aW9uIiwiZ2V0RWxlbWVudEJ5SWQiLCJNYXRoIiwibWF4Iiwic3RhcnRUaW1lIiwicGVyZm9ybWFuY2UiLCJnZXRUaW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiYW5pbWF0ZVNjcm9sbCIsImFib3J0U2Nyb2xsQW5pbWF0aW9uIiwidGltZXN0YW1wIiwicHJvZ3Jlc3MiLCJtaW4iLCJFYXNpbmdGdW5jdGlvbnMiLCJuZXdTY3JvbGxUb3AiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImZhY3RvcnkiLCJmaW5hbGx5Q29uc3RydWN0b3IiLCJjYWxsYmFjayIsImNvbnN0cnVjdG9yIiwidGhlbiIsInZhbHVlIiwicmVzb2x2ZSIsInJlYXNvbiIsInJlamVjdCIsInNldFRpbWVvdXRGdW5jIiwiUHJvbWlzZSIsImZuIiwiVHlwZUVycm9yIiwiX3N0YXRlIiwiX2hhbmRsZWQiLCJfdmFsdWUiLCJ1bmRlZmluZWQiLCJfZGVmZXJyZWRzIiwiZG9SZXNvbHZlIiwiaGFuZGxlIiwic2VsZiIsImRlZmVycmVkIiwiX2ltbWVkaWF0ZUZuIiwiY2IiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJyZXQiLCJwcm9taXNlIiwibmV3VmFsdWUiLCJfdHlwZW9mIiwiZmluYWxlIiwidGhpc0FyZyIsIl91bmhhbmRsZWRSZWplY3Rpb25GbiIsIkhhbmRsZXIiLCJkb25lIiwiZXgiLCJwcm9tIiwiYWxsIiwiYXJyIiwic2xpY2UiLCJyZW1haW5pbmciLCJyZXMiLCJ2YWwiLCJyYWNlIiwidmFsdWVzIiwic2V0SW1tZWRpYXRlIiwiZXJyIiwid2FybiIsImdsb2JhbE5TIiwiZ2xvYmFsIiwiX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18iLCJkZWZpbmUiLCJfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwiaXNGaW5pdGUiLCJmbG9vciIsIlNsaWRlcnMiLCJzbGlkZXJDb250YWluZXJzIiwic2xpZGVyQ29udGFpbmVyc0xlbmd0aCIsInNsaWRlcklkIiwiU2xpZGVyc2V0dGluZyIsIlNsaWRlclNldHRpbmciLCJzbGlkZVF1ZXJ5IiwibmF2aWdhdGlvbkJ1dHRvbnMiLCJkb3RzIiwiU2xpZGVyIiwicHJlcGFyZVBhcmFtZXRlcnMiLCJzZXR0aW5nc09iamVjdCIsImRlZmluZWRQcmV2aW91c05leHQiLCJhdXRvU2xpZGVyIiwic2xpZGVySW50ZXJ2YWwiLCJzZXRTbGlkZXJJZCIsInN0cmluZyIsInNldERlZmluZWRQcmV2aW91c05leHQiLCJib29sZWFuIiwic2V0QXV0b1NsaWRlciIsInNldFNsaWRlckludGVydmFsIiwiaW50ZWdlciIsInNldFNsaWRlUXVlcnkiLCJzZXROYXZpZ2F0aW9uQnV0dG9ucyIsInNldERvdHMiLCJnZXRTbGlkZXJJZCIsImdldERlZmluZWRQcmV2aW91c05leHQiLCJnZXRBdXRvU2xpZGVyIiwiZ2V0U2xpZGVySW50ZXJ2YWwiLCJnZXRTbGlkZVF1ZXJ5IiwiZ2V0TmF2aWdhdGlvbkJ1dHRvbnMiLCJnZXREb3RzIiwiZmlsbCIsInNldHRpbmdzT2JqZWN0S2V5cyIsIk9iamVjdCIsImtleXMiLCJzZXR0aW5nc09iamVjdExlbmd0aCIsImtleSIsInNldHRpbmdzIiwic2xpZGVyT2JqZWN0IiwiYWN0aXZlU2xpZGVJZCIsInByZXZpb3VzU2xpZGVJZCIsIm5leHRTbGlkZUlkIiwiYXZhaWxhYmxlU2xpZGVzIiwic2xpZGVzIiwiYXV0b1NsaWRlckludGVydmFsIiwic2V0UHJldmlvdXNBbmROZXh0U2xpZGUiLCJzZXRTbGlkZSIsInN3aXBlR2VzdHVyZXMiLCJIYW1tZXIiLCJyZXNldEF1dG9TbGlkZXIiLCJuZXh0U2xpZGUiLCJwcmV2aW91c1NsaWRlIiwibmF2aWdhdGlvbkJ1dHRvbnNMZW5ndGgiLCJjbGlja05hdmlnYXRpb25CdXR0b24iLCJkb3RzTGVuZ3RoIiwiY2xpY2tEb3QiLCJjbGVhckludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJzbGlkZXNMZW5ndGgiLCJzbGlkZSIsInN0eWxlIiwicG9pbnRlckV2ZW50cyIsInNsaWRlT3JkZXIiLCJzZXRBY3RpdmVEb3QiLCJuYXZCdXR0b24iLCJuZXh0IiwicHJldmlvdXMiLCJzZXRBdHRyaWJ1dGUiLCJjbGlja2VkRG90IiwiZG90IiwiZG90T3JkZXIiLCJzY29wZSIsIkZ1bmN0aW9uIiwiVGltZW91dCIsImNsZWFyRm4iLCJfaWQiLCJfY2xlYXJGbiIsImNsb3NlIiwidW5yZWYiLCJyZWYiLCJlbnJvbGwiLCJpdGVtIiwibXNlY3MiLCJfaWRsZVRpbWVvdXRJZCIsIl9pZGxlVGltZW91dCIsInVuZW5yb2xsIiwiX3VucmVmQWN0aXZlIiwiYWN0aXZlIiwiX29uVGltZW91dCIsImNsZWFySW1tZWRpYXRlIiwicmVnaXN0ZXJJbW1lZGlhdGUiLCJodG1sIiwiY2hhbm5lbCIsIm1lc3NhZ2VQcmVmaXgiLCJvbkdsb2JhbE1lc3NhZ2UiLCJuZXh0SGFuZGxlIiwidGFza3NCeUhhbmRsZSIsImN1cnJlbnRseVJ1bm5pbmdBVGFzayIsImRvYyIsImF0dGFjaFRvIiwiZ2V0UHJvdG90eXBlT2YiLCJ0b1N0cmluZyIsInJ1bklmUHJlc2VudCIsInBvc3RNZXNzYWdlIiwiaW1wb3J0U2NyaXB0cyIsInBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMiLCJvbGRPbk1lc3NhZ2UiLCJvbm1lc3NhZ2UiLCJjYW5Vc2VQb3N0TWVzc2FnZSIsIk1lc3NhZ2VDaGFubmVsIiwicG9ydDEiLCJwb3J0MiIsImNyZWF0ZUVsZW1lbnQiLCJzY3JpcHQiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZW1vdmVDaGlsZCIsImFwcGVuZENoaWxkIiwicmFuZG9tIiwic291cmNlIiwiYXR0YWNoRXZlbnQiLCJ0YXNrIiwid2VicGFja1BvbHlmaWxsIiwiZGVwcmVjYXRlIiwicGF0aHMiLCJjaGlsZHJlbiIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImwiLCJNYXBzSGFuZGxlciIsIm1hcCIsImxvY2F0aW9uIiwibGF0IiwibG5nIiwic3R5bGluZyIsImhhc0F0dHJpYnV0ZSIsInBhcnNlRmxvYXQiLCJzZXRDdXN0b21TdHlsaW5nIiwiZ29vZ2xlIiwibWFwcyIsImRyYXdNYXAiLCJNYXAiLCJ6b29tIiwiY2VudGVyIiwiZGlzYWJsZURlZmF1bHRVSSIsInN0eWxlcyIsImNvbnRlbnRTdHJpbmciLCJpbmZvd2luZG93IiwiSW5mb1dpbmRvdyIsImNvbnRlbnQiLCJNYXJrZXIiLCJwb3NpdGlvbiIsIm9wZW4iLCJmZWF0dXJlVHlwZSIsImVsZW1lbnRUeXBlIiwic3R5bGVycyIsImNvbG9yIiwibGlnaHRuZXNzIiwid2VpZ2h0Iiwic2F0dXJhdGlvbiIsIkNob2NvbGF0ZUZhY3RvcnkiLCJiYW5uZWRWaXNpdG9yIiwiZW50ZXIiLCJjaG9jb2xhdGVGYWN0b3JpZXMiLCJhbW91bnRPZkNob2NvbGF0ZUZhY3RvcmllcyIsIkNob2NvbGF0ZUJhciIsIl9mbGFzaFRpY2tldCIsImNob2NvbGF0ZUJhciIsImdvbGRlblRpY2tldCIsImVuam95VGhlVG91ciIsImNob2NvbGF0ZUZhY3RvcnkiLCJ0b3VyR3JvdXAiLCJvb21wYUxvb21wYXMiLCJhbW91bnRPZk9vbXBhTG9vbXBhcyIsInRvdXJHcm91cFNpemUiLCJ2aXNpdG9yIiwidmlzaXRvck5hbWUiLCJfaXNWaXNpdG9yQmFubmVkIiwiX2dldEFycmFuZ2VtZW50IiwiX2ZpbmlzaFRvdXIiLCJub2RlTmFtZSIsImdyb3VwIiwiX2FkZFdpbGxpZVdvbmthIiwiQWpheCIsInBvc3QiLCJIdHRwUmVxdWVzdCIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwic3RhdHVzIiwiX3RoYW5rc0ZvclZpc2l0aW5nIiwicmVkaXJlY3RVcmwiLCJfZ2l2ZUZlZWRiYWNrVG9NZW1iZXJzIiwiZXJyb3JzIiwiX3Vua25vd25HYXBJbkZhY3RvcnkiLCJfd2lsbGllIiwiZmVlZGJhY2tBcmVhIiwiaW5uZXJIVE1MIiwiX2NsZWFyUHJldmlvdXNNYXJrZWRKYWNrZXRzIiwiamFja2V0IiwidmlzaXRvckZlZWRiYWNrQXJlYSIsInZpc2l0b3JOb2RlIiwiX2dyYWJWaXNpdG9ySmFja2V0IiwidmlzaXRvckZlZWRiYWNrIiwidmlzaXRvckZlZWRiYWNrQW1vdW50IiwidmlzaXRvckZlZWRiYWNrTGluZSIsImN1cnJlbnRGZWVkYmFja0FyZWEiLCJjYXBpdGFsaXplRmlyc3RMZXR0ZXIiLCJtYXJrZWRKYWNrZXRzIiwibWFya2VkSmFja2V0c0Ftb3VudCIsImN1cnJlbnRMYXllciIsInNhZmV0eUJyZWFrIiwicGFyZW50Tm9kZSIsInRhZ05hbWUiLCJuZXh0U3RvcCIsIkJyb3dzZXJIYW5kbGVyIiwidXNlckFnZW50IiwiYnJvd3NlckluZm8iLCJuYXZpZ2F0b3IiLCJnZXRCcm93c2VySW5mbyIsImhhbmRsZUlFIiwiaGFuZGxlU2FmYXJpIiwibXNpZSIsImllbHQxMSIsImllMTEiLCJtYXRjaCIsInN1YnN0cmluZyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwidGVtIiwidWEiLCJNIiwidGVzdCIsImV4ZWMiLCJhcHBOYW1lIiwiYXBwVmVyc2lvbiIsInNwbGljZSIsImRlZmluZVByb3BlcnRpZXMiLCJzeW1ib2xIaWRkZW5Db3VudGVyIiwiZ2xvYmFsU3ltYm9sUmVnaXN0cnkiLCJFUzYiLCJpc0FycmF5Iiwib2JqZWN0VG9TdHJpbmciLCJlbXB0eUZ1bmN0aW9uIiwic2ltcGxlRnVuY3Rpb24iLCJhcmciLCJpc0NhbGxhYmxlIiwiSXRlcmF0b3IiLCJBcnJheUl0ZXJhdG9yIiwiZmxhZyIsIl9hcnJheSIsIl9mbGFnIiwiX25leHRJbmRleCIsIlN0cmluZ0l0ZXJhdG9yIiwiX3N0cmluZyIsImlzT2JqZWN0IiwiYXBwZW5kQXJyYXkiLCJhcnJheTEiLCJhcnJheTIiLCJsZW5ndGgxIiwibGVuZ3RoMiIsImhhc093blByb3BlcnR5Iiwic2ltcGxlSW5oZXJpdGFuY2UiLCJjaGlsZCIsInBhcmVudCIsImNyZWF0ZSIsIlN5bWJvbCIsImRlc2MiLCJTdHJpbmciLCJzeW1ib2wiLCJfZGVzY3JpcHRpb24iLCJfaXNTeW1ib2wiLCJzZXR1cFN5bWJvbEludGVybmFscyIsImZvciIsInJlY29yZCIsInJlZ2lzdHJ5TGVuZ3RoIiwid3JpdGFibGUiLCJjb25maWd1cmFibGUiLCJrZXlGb3IiLCJpc1N5bWJvbCIsImhhc0luc3RhbmNlIiwiaXNDb25jYXRTcHJlYWRhYmxlIiwiaXRlcmF0b3IiLCJ0b1N0cmluZ1RhZyIsInZhbHVlT2YiLCJuZXh0VmFsdWUiLCJzdHJpbmdPYmplY3QiLCJTcHJlYWRPcGVyYXRvckltcGwiLCJfdGFyZ2V0IiwiX3ZhbHVlcyIsIl90aGlzQXJnIiwic3ByZWFkIiwiaXRlcmFibGUiLCJmb3JPZiIsInRlbXAiLCJyZXR1cm5WYWx1ZSIsImluc3RhbmNlT2YiLCJvYmplY3QiLCJoYXNJbnN0YW5jZVN5bWJvbFByb3AiLCJpdGVyYXRpb25SZXN1bHQiLCJzcHJlYWRPcGVyYXRvciIsImluc3RhbmNlIiwidGFyZ2V0cyIsIm91dHB1dHMiLCJ1bnNoaWZ0IiwiYXJyYXlMaWtlIiwibWFwRm4iLCJvYmoiLCJsaW5lYXIiLCJ0IiwiZWFzZUluUXVhZCIsImVhc2VPdXRRdWFkIiwiZWFzZUluT3V0UXVhZCIsImVhc2VJbkN1YmljIiwiZWFzZU91dEN1YmljIiwiZWFzZUluT3V0Q3ViaWMiLCJlYXNlSW5RdWFydCIsImVhc2VPdXRRdWFydCIsImVhc2VJbk91dFF1YXJ0IiwiZWFzZUluUXVpbnQiLCJlYXNlT3V0UXVpbnQiLCJlYXNlSW5PdXRRdWludCIsImFzeW5jIiwic2NyaXB0cyIsInByaW9yIiwib25sb2FkIiwiXyIsImlzQWJvcnQiLCJyZWFkeVN0YXRlIiwic3JjIiwiaW5zZXJ0QmVmb3JlIiwiZGVib3VuY2UiLCJmdW5jIiwid2FpdCIsImltbWVkaWF0ZSIsImNvbnRleHQiLCJsYXRlciIsImNhbGxOb3ciLCJDb29raWUiLCJzZXQiLCJkYXlzIiwiZG9tYWluIiwiZG9tYWluUGFydHMiLCJkYXRlIiwiZXhwaXJlcyIsInNldFRpbWUiLCJ0b0dNVFN0cmluZyIsInNwbGl0IiwiY29va2llIiwic2hpZnQiLCJqb2luIiwibmFtZUVRIiwiY2EiLCJjIiwiY2hhckF0IiwiZXJhc2UiLCJudW1iZXJfZm9ybWF0IiwibnVtYmVyIiwiZGVjaW1hbHMiLCJkZWNfcG9pbnQiLCJ0aG91c2FuZHNfc2VwIiwicmVwbGFjZSIsIm4iLCJwcmVjIiwiYWJzIiwic2VwIiwiZGVjIiwicyIsImsiLCJwb3ciLCJyb3VuZCIsInRvRml4ZWRGaXgiLCJFbGVtZW50IiwiY2xvc2VzdCIsIm1hdGNoZXMiLCJtc01hdGNoZXNTZWxlY3RvciIsIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsImFuY2VzdG9yIiwicGFyZW50RWxlbWVudCIsInVybCIsInhociIsIlhNTEh0dHBSZXF1ZXN0IiwidG9rZW4iLCJzZXRSZXF1ZXN0SGVhZGVyIiwic2VuZCIsInN0cmluZ2lmeSIsInRvVXBwZXJDYXNlIiwic25ha2VUb0NhbWVsIiwibSIsImluZGV4SW5QYXJlbnQiLCJub2RlIiwiY2hpbGROb2RlcyIsIm51bSIsIm5vZGVUeXBlIiwiY29weVRvQ2xpcGJvYXJkIiwiZWRpdGFibGUiLCJjb250ZW50RWRpdGFibGUiLCJyZWFkT25seSIsInJhbmdlIiwiY3JlYXRlUmFuZ2UiLCJzZWxlY3ROb2RlQ29udGVudHMiLCJzZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJyZW1vdmVBbGxSYW5nZXMiLCJhZGRSYW5nZSIsInNldFNlbGVjdGlvblJhbmdlIiwic2VsZWN0IiwiZXhlY0NvbW1hbmQiLCJib2R5T2Zmc2V0Iiwic2Nyb2xsTGVmdCIsInBhZ2VYT2Zmc2V0IiwiZyIsIkNvb2tpZUhhbmRsZXIiLCJjb29raWVCYXIiLCJjb29raWVPdmVybGF5IiwiY29va2llTWVzc2FnZSIsImNvb2tpZVN3aXRjaCIsImNvb2tpZUZhZGVPdXRBbmltYXRpb25EdXJhdGlvbiIsImFjY2VwdFRyYWNraW5nIiwiaW5pdENvb2tpZUJhciIsImluaXRDb29raWVPdmVybGF5IiwiY2hlY2tGb3JDb29raWVTZXR0aW5ncyIsImluaXRDb29raWVTd2l0Y2giLCJjbG9zZUJ1dHRvbiIsImNsb3NlQ29va2llTWVzc2FnZSIsIm9wZW5Db29raWVTZXR0aW5nc0J1dHRvbiIsIm9wZW5Db29raWVTZXR0aW5ncyIsInRvZ2dsZVRyYWNraW5nSW5wdXQiLCJjaGVja2VkIiwidG9nZ2xlVHJhY2tpbmdTZXR0aW5nIiwiYWNjZXB0QnV0dG9uIiwic2V0Q29va2llU2V0dGluZ3MiLCJzYXZlQnV0dG9uIiwicmVsb2FkIl0sIm1hcHBpbmdzIjoieUlBS0EsSUFBTUEsRUFBZ0IsQ0FHbEJDLEtBQU1DLEtBQUtDLE1BQ1hDLFFBQVMsS0FDVEMsYUFBYyxJQUNkQyxhQUFjLElBR2RDLHNCQUF1QixFQUN2QkMscUJBQXFCLEVBQ3JCQyxtQkFBbUIsRUFHbkJDLEtBQU0sV0FHRlYsRUFBY1csZ0JBR2RDLE9BQU9DLGlCQUFpQixTQUFVLFdBQ3pCYixFQUFjQyxLQUFPRCxFQUFjSyxhQUFlSCxLQUFLQyxNQUFTLElBQ2pFSCxFQUFjYyxrQkFDZGQsRUFBY0MsS0FBT0MsS0FBS0MsU0FLbENTLE9BQU9DLGlCQUFpQixTQUFVLFdBQzlCYixFQUFjZSxrQkFJbEJILE9BQU9DLGlCQUFpQixTQUFVLFdBQzNCRyxNQUFNaEIsRUFBY0ksVUFBVWEsYUFBYWpCLEVBQWNJLFNBQzVESixFQUFjSSxRQUFVYyxXQUFXbEIsRUFBY21CLGdCQUFpQm5CLEVBQWNNLGlCQUt4RkssY0FBZSxXQUNYWCxFQUFjb0IscUNBSWxCTixnQkFBaUIsV0FFYmQsRUFBY29CLHFDQUlsQkQsZ0JBQWlCLGFBS2pCSixjQUFlLFdBRVhmLEVBQWNxQix3QkFDZHJCLEVBQWNzQixzQkFLbEJDLGtDQUFtQyxTQUFTQyxHQUV4QyxHQUFHUixNQUFNUSxHQUFJLENBRVQsSUFBTUMsRUFBT0QsRUFBR0Usd0JBRVZDLEVBQWdCZixPQUFPZ0IsYUFBZUMsU0FBU0MsZ0JBQWdCQyxhQUMvREMsRUFBZXBCLE9BQU9xQixZQUFjSixTQUFTQyxnQkFBZ0JJLFlBRTdEQyxFQUFrQlYsRUFBS1csS0FBUVQsR0FBb0JGLEVBQUtXLElBQU1YLEVBQUtZLFFBQVcsRUFDOUVDLEVBQW9CYixFQUFLYyxNQUFRUCxH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QUFjRyxjQUFjbm5CLFVBQVVXLElBQUksd0JBQzFDbEMsU0FBU2lDLEtBQUtWLFVBQVVXLElBQUksd0JBR2hDbW5CLG1CQUFvQixXQUNoQmQsRUFBY0UsY0FBYy9tQixjQUFjLHVCQUF1QkgsVUFBVUMsT0FBTyxhQUNsRittQixFQUFjRSxjQUFjL21CLGNBQWMsbUJBQW1CSCxVQUFVVyxJQUFJLGNBRy9Fc25CLHNCQUF1QixXQUNoQmpCLEVBQWNNLGVBQ2JOLEVBQWNNLGdCQUFpQixFQUcvQk4sRUFBY00sZ0JBQWlCLEdBSXZDYSxrQkFBbUIsV0FHWm5CLEVBQWNNLGVBQ2JoRixPQUFPQyxJQUFJLHlCQUEwQixPQUFRLElBRzFDRCxPQUFPbE4sSUFBSSwyQkFDVmtOLE9BQU9pQixNQUFNLDBCQUlyQnlELEVBQWNZLHFCQUdkOXBCLFdBQVcsV0FDUDBYLFNBQVM2UyxVQUNWckIsRUFBY0ssa0NBS3pCTCxFQUFjMXBCIiwiZmlsZSI6Ii9qcy9zaXRlL2FwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBTY3JvbGwgaGFuZGxlclxuICAgLSBIYW5kbGVyIHRoZSBvYmplY3RzIHdoaWNoIGFyZSBiaW5kIG9uIHNjcm9sbCBldmVudHMgb3IgdmlzaWJsZSBpbiB2aWV3cG9ydFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbmNvbnN0IFNjcm9sbEhhbmRsZXIgPSB7XG5cbiAgICAvLyBWYXJpYWJsZXMgZm9yIGRlYm91bmNlIGFuZCB0aHJvdHRsZSBlZmZlY3RzXG4gICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICB0aW1lb3V0OiBudWxsLFxuICAgIHdhaXRUaHJvdHRsZTogMTAwMCxcbiAgICB3YWl0RGVib3VuY2U6IDMwMCxcblxuICAgIC8vIFZhcmlhYmxlcyBmb3Igc2Nyb2xsIGRpcmVjdGlvblxuICAgIGxhc3RTY3JvbGxUb3BQb3NpdGlvbjogMCxcbiAgICBzY3JvbGxEaXJlY3Rpb25Eb3duOiB0cnVlLFxuICAgIHNjcm9sbERpcmVjdGlvblVwOiBmYWxzZSxcblxuICAgIC8vSW5pdGlhbGlzYXRpb25cbiAgICBpbml0OiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgLy8gVHJpZ2dlciBzdGFydCBvbiBzdGFydCB1cFxuICAgICAgICBTY3JvbGxIYW5kbGVyLnRyaWdnZXJPbkluaXQoKTtcblxuICAgICAgICAvLyBUaHJvdHRsZSBzY3JvbGxcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICgoU2Nyb2xsSGFuZGxlci50aW1lICsgU2Nyb2xsSGFuZGxlci53YWl0VGhyb3R0bGUgLSBEYXRlLm5vdygpKSA8IDApIHtcbiAgICAgICAgICAgICAgICBTY3JvbGxIYW5kbGVyLnRyaWdnZXJUaHJvdHRsZSgpO1xuICAgICAgICAgICAgICAgIFNjcm9sbEhhbmRsZXIudGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNtb290aCBzY3JvbGxcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFNjcm9sbEhhbmRsZXIudHJpZ2dlclNtb290aCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBEZWJvdW5jZSBzY3JvbGxcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmKGlzc2V0KFNjcm9sbEhhbmRsZXIudGltZW91dCkpIGNsZWFyVGltZW91dChTY3JvbGxIYW5kbGVyLnRpbWVvdXQpO1xuICAgICAgICAgICAgU2Nyb2xsSGFuZGxlci50aW1lb3V0ID0gc2V0VGltZW91dChTY3JvbGxIYW5kbGVyLnRyaWdnZXJEZWJvdW5jZSwgU2Nyb2xsSGFuZGxlci53YWl0RGVib3VuY2UpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgLy8gVHJpZ2dlciBvbiBzdGFydCB1cFxuICAgIHRyaWdnZXJPbkluaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgU2Nyb2xsSGFuZGxlci50cmlnZ2VyRWxlbWVudEluVmlld3BvcnRBbmltYXRpb24oKTtcbiAgICB9LFxuXG4gICAgLy8gVHJpZ2dlciBzY3JvbGwgZnVuY3Rpb25zIHdpdGggdGhyb3R0bGUgKHByZWZlcnJlZClcbiAgICB0cmlnZ2VyVGhyb3R0bGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1Rocm90dGxlZCBzY3JvbGwnKTtcbiAgICAgICAgU2Nyb2xsSGFuZGxlci50cmlnZ2VyRWxlbWVudEluVmlld3BvcnRBbmltYXRpb24oKTtcbiAgICB9LFxuXG4gICAgLy8gVHJpZ2dlciBzY3JvbGwgb24gZGVib3VuY2VcbiAgICB0cmlnZ2VyRGVib3VuY2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ0RlYm91bmNlIHNjcm9sbCcpO1xuICAgIH0sXG5cbiAgICAvLyBUcmlnZ2VyIHNjcm9sbCBvbiB0aGUgZmxpZ2h0XG4gICAgdHJpZ2dlclNtb290aDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnU21vb3RoIHNjcm9sbCcpO1xuICAgICAgICBTY3JvbGxIYW5kbGVyLmRldGVjdFNjcm9sbERpcmVjdGlvbigpO1xuICAgICAgICBTY3JvbGxIYW5kbGVyLnRvZ2dsZVN0aWNreUhlYWRlcigpO1xuICAgIH0sXG5cbiAgICAvLyBEZXRlY3QgaWYgcGFydCBvZiBhIGdpdmVuIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiB0aGUgdmlld3BvcnRcbiAgICAvLyBFbCBtdXN0IGJlIGEgbm9kZSBlbGVtZW50XG4gICAgZGV0ZWN0SWZFbGVtZW50SXNQYXJ0bHlJblZpZXdwb3J0OiBmdW5jdGlvbihlbClcbiAgICB7XG4gICAgICAgIGlmKGlzc2V0KGVsKSl7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIC8vIERPTVJlY3QgeyB4OiA4LCB5OiA4LCB3aWR0aDogMTAwLCBoZWlnaHQ6IDEwMCwgdG9wOiA4LCByaWdodDogMTA4LCBib3R0b206IDEwOCwgbGVmdDogOCB9XG4gICAgICAgICAgICBjb25zdCB3aW5kb3dIZWlnaHQgPSAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpO1xuICAgICAgICAgICAgY29uc3Qgd2luZG93V2lkdGggPSAod2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKTtcblxuICAgICAgICAgICAgY29uc3QgdmVydGljYWxJblZpZXcgPSAocmVjdC50b3AgPD0gKHdpbmRvd0hlaWdodCkpICYmICgocmVjdC50b3AgKyByZWN0LmhlaWdodCkgPj0gMCk7XG4gICAgICAgICAgICBjb25zdCBob3Jpem9udGFsSW5WaWV3ID0gKHJlY3QubGVmdCA8PSB3aW5kb3dXaWR0aCkgJiYgKChyZWN0LmxlZnQgKyByZWN0LndpZHRoKSA+PSAwKTtcblxuICAgICAgICAgICAgcmV0dXJuICh2ZXJ0aWNhbEluVmlldyAmJiBob3Jpem9udGFsSW5WaWV3KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBEZXRlY3QgaWYgYSBnaXZlbiBlbGVtZW50IGlzIGZ1bGx5IHZpc2libGUgaW4gdGhlIHZpZXdwb3J0XG4gICAgLy8gRWwgbXVzdCBiZSBhIG5vZGUgZWxlbWVudFxuICAgIGRldGVjdElmRWxlbWVudElzRnVsbHlJblZpZXdwb3J0OiBmdW5jdGlvbihlbClcbiAgICB7XG4gICAgICAgIGlmKGlzc2V0KGVsKSl7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgcmVjdC50b3AgPj0gMCAmJlxuICAgICAgICAgICAgICAgIHJlY3QuYm90dG9tIDw9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBkZXRlY3RTY3JvbGxEaXJlY3Rpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsVG9wUG9zaXRpb24gPSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDsgLy8gQ3JlZGl0czogXCJodHRwczovL2dpdGh1Yi5jb20vcWVyZW15L3NvL2Jsb2IvbWFzdGVyL3NvLmRvbS5qcyNMNDI2XCJcbiAgICAgICAgaWYgKHNjcm9sbFRvcFBvc2l0aW9uID49IFNjcm9sbEhhbmRsZXIubGFzdFNjcm9sbFRvcFBvc2l0aW9uKXtcbiAgICAgICAgICAgIFNjcm9sbEhhbmRsZXIuc2Nyb2xsRGlyZWN0aW9uRG93biA9IHRydWU7XG4gICAgICAgICAgICBTY3JvbGxIYW5kbGVyLnNjcm9sbERpcmVjdGlvblVwID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBTY3JvbGxIYW5kbGVyLnNjcm9sbERpcmVjdGlvbkRvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIFNjcm9sbEhhbmRsZXIuc2Nyb2xsRGlyZWN0aW9uVXAgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIFNjcm9sbEhhbmRsZXIubGFzdFNjcm9sbFRvcFBvc2l0aW9uID0gc2Nyb2xsVG9wUG9zaXRpb247XG4gICAgfSxcblxuICAgIC8vIFRyaWdnZXIgYW5pbWF0aW9uIG9uIGVsZW1lbnRzIHRoYXQgaGF2ZSAnZWxlbWVudC1pbi12aWV3cG9ydCcgYW5kIHRoYXQgYXJlIGluIHRoZSB2aWV3cG9ydFxuICAgIC8vIFRoZXNlIGFuaW1hdGlvbiBjYW4gb25seSBiZSB0cmlnZ2VyZWQgb25jZSwgaWYgeW91IHdhbnQgbW9yZSB0aGVuIHRoYXQgeW91IHNob3VsZCB3cml0ZSBhbiBzcGVjaWZpYyBmdW5jdGlvbiBmb3IgdGhpc1xuICAgIHRyaWdnZXJFbGVtZW50SW5WaWV3cG9ydEFuaW1hdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5lbGVtZW50LWluLXZpZXdwb3J0Jyk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzTGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xuXG4gICAgICAgIGZvcihsZXQgZSA9IDA7IGUgPCBlbGVtZW50c0xlbmd0aDsgZSsrKXtcblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2VdO1xuICAgICAgICAgICAgaWYoU2Nyb2xsSGFuZGxlci5kZXRlY3RJZkVsZW1lbnRJc1BhcnRseUluVmlld3BvcnQoZWxlbWVudCkpe1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZWxlbWVudC1pbi12aWV3cG9ydCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9LFxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENVU1RPTSBTQ1JPTEwgSEFORExFUlMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvLyBIaWRlIG9yIHNob3cgc3RpY2t5IG5hdmlnYXRpb24gd2hlbiBoZWFkZXIgaXNuJ3QgdmlzaWJsZVxuICAgIHRvZ2dsZVN0aWNreUhlYWRlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzdGlja3lIZWFkZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtc3RpY2t5LWhlYWRlcicpO1xuICAgICAgICBjb25zdCB2aXNpYmxlU3RpY2t5SGVhZGVyQ2xhc3MgPSAnaXMtc3RpY2t5LWhlYWRlci12aXNpYmxlJztcbiAgICAgICAgY29uc3Qgc3VibmF2TGlzdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5qcy1zdWJuYXYnKTtcbiAgICAgICAgdmFyIHN1Yk5hdklzVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICBzdGlja3lIZWFkZXIuaGlkZGVuID0gZmFsc2U7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdWJuYXZMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUoc3VibmF2TGlzdFtpXSwgbnVsbCkudmlzaWJpbGl0eSA9PSBcInZpc2libGVcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdWJOYXZJc1Zpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoaXNzZXQoc3RpY2t5SGVhZGVyKSAmJiAhc3ViTmF2SXNWaXNpYmxlKXtcbiAgICAgICAgICAgIC8vIEhpZGUgd2hlbiBzY3JvbGxpbmcgRE9XTiAoT1Igd2l0aGluIG9mZnNldClcbiAgICAgICAgICAgIGlmKFNjcm9sbEhhbmRsZXIuc2Nyb2xsRGlyZWN0aW9uRG93biB8fCBTY3JvbGxIYW5kbGVyLmxhc3RTY3JvbGxUb3BQb3NpdGlvbiA8IDExMCl7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKHZpc2libGVTdGlja3lIZWFkZXJDbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTaG93IHdoZW4gc2Nyb2xsaW5nIFVQIGFuZCBvdXRzaWRlIG9mIG9mZnNldFxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKHZpc2libGVTdGlja3lIZWFkZXJDbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG59O1xuXG5TY3JvbGxIYW5kbGVyLmluaXQoKTsiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIE5hdmlnYXRpb24gaGFuZGxlclxuICAgLSBIYW5kbGVzIHRoZSBzaG93aW5nIGFuZCBoaWRpbmcgb2YgdGhlIG92ZXJsYXktbWVudSBjb21wb25lbnQgd2hpY2ggaGFzIHRoZSBwcm9wZXIgY2xhc3Nlcy5cbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5jb25zdCBib2R5U2Nyb2xsTG9jayA9IHJlcXVpcmUoJ2JvZHktc2Nyb2xsLWxvY2snKTtcblxuY29uc3QgT3ZlcmxheU1lbnVIYW5kbGVyID0ge1xuXG4gICAgLy8gaW5pdDogZnVuY3Rpb24gKCkge1xuICAgIC8vICAgICBjb25zdCBvdmVybGF5TWVudVRyaWdnZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtb3ZlcmxheS1tZW51LXRyaWdnZXInKTtcbiAgICAvLyAgICAgT3ZlcmxheU1lbnVIYW5kbGVyLmluaXRPdmVybGF5TWVudShvdmVybGF5TWVudVRyaWdnZXIpO1xuICAgIC8vIH0sXG5cbiAgICBpbml0OiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3Qgb3ZlcmxheU1lbnVUcmlnZ2VyTGlzdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5qcy1vdmVybGF5LW1lbnUtdHJpZ2dlcicpO1xuICAgICAgICBjb25zdCBvdmVybGF5TWVudVRyaWdnZXJMaXN0Q291bnQgPSBvdmVybGF5TWVudVRyaWdnZXJMaXN0Lmxlbmd0aDtcblxuICAgICAgICBpZihpc3NldChvdmVybGF5TWVudVRyaWdnZXJMaXN0KSAmJiBvdmVybGF5TWVudVRyaWdnZXJMaXN0Q291bnQgIT09IDApe1xuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IG92ZXJsYXlNZW51VHJpZ2dlckxpc3RDb3VudDsgaSsrKXtcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVybGF5TWVudVRyaWdnZXIgPSBvdmVybGF5TWVudVRyaWdnZXJMaXN0W2ldO1xuICAgICAgICAgICAgICAgIE92ZXJsYXlNZW51SGFuZGxlci5pbml0T3ZlcmxheU1lbnUob3ZlcmxheU1lbnVUcmlnZ2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBpbml0T3ZlcmxheU1lbnU6IGZ1bmN0aW9uIChvdmVybGF5TWVudVRyaWdnZXIpIHtcbiAgICAgICAgb3ZlcmxheU1lbnVUcmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgT3ZlcmxheU1lbnVIYW5kbGVyLnRvZ2dsZU92ZXJsYXlNZW51LCBmYWxzZSk7XG4gICAgfSxcblxuICAgIHRvZ2dsZU92ZXJsYXlNZW51OiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgY29uc3Qgb3ZlcmxheU1lbnVOYXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtb3ZlcmxheS1tZW51Jyk7XG4gICAgICAgIC8vIGNvbnN0IG92ZXJsYXlNZW51Qm9keSA9IG92ZXJsYXlNZW51LnF1ZXJ5U2VsZWN0b3IoJy5qcy1vdmVybGF5LW1lbnUtcGVyc2lzdC1zY3JvbGxpbmcnKTtcblxuICAgICAgICAvLyBCYWlsIGlmIG92ZXJsYXlNZW51IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgaWYgKCFvdmVybGF5TWVudU5hdikgcmV0dXJuO1xuXG4gICAgICAgIC8vIENsZWFyIHByZXZpb3VzbHkgbG9ja2VkIHNjcm9sbCBvbiB0aGUgYm9keVxuICAgICAgICBib2R5U2Nyb2xsTG9jay5lbmFibGVCb2R5U2Nyb2xsKG92ZXJsYXlNZW51TmF2KTtcblxuICAgICAgICAvLyBJZiB0aGUgb3ZlcmxheU1lbnUgaXMgYWxyZWFkeSBhY3RpdmUsIGNvbGxhcHNlIGl0IGFuZCBxdWl0XG4gICAgICAgIGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygnaXMtb3ZlcmxheS1tZW51LWFjdGl2ZScpKSB7XG4gICAgICAgICAgICBvdmVybGF5TWVudU5hdi5xdWVyeVNlbGVjdG9yQWxsKCdbdGFiaW5kZXg9XCIwXCJdJykuZm9yRWFjaChmdW5jdGlvbihlbGVtKSB7XG4gICAgICAgICAgICAgICAgZWxlbS50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnaXMtb3ZlcmxheS1tZW51LWFjdGl2ZScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTG9jayBzY3JvbGxpbmcgb24gdGhlIGJvZHlcbiAgICAgICAgYm9keVNjcm9sbExvY2suZGlzYWJsZUJvZHlTY3JvbGwob3ZlcmxheU1lbnVOYXYpO1xuXG4gICAgICAgIG92ZXJsYXlNZW51TmF2LnF1ZXJ5U2VsZWN0b3JBbGwoJ1t0YWJpbmRleD1cIi0xXCJdJykuZm9yRWFjaChmdW5jdGlvbihlbGVtKSB7XG4gICAgICAgICAgICBlbGVtLnRhYkluZGV4ID0gMDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVG9nZ2xlIGFjdGl2ZSBvdmVybGF5TWVudSBieSBzZXR0aW5nIGEgY2xhc3Mgb24gdGhlIGJvZHlcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdpcy1vdmVybGF5LW1lbnUtYWN0aXZlJyk7XG4gICAgICAgIG92ZXJsYXlNZW51TmF2LmhpZGRlbiA9IGZhbHNlO1xuICAgIH1cbn07XG5cbk92ZXJsYXlNZW51SGFuZGxlci5pbml0KCk7IiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBZb3V0dWJlIGhhbmRsZXJcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5jb25zdCBZb3V0dWJlSGFuZGxlciA9IHtcblxuICAgIHlvdXR1YmVDbGFzcyA6ICcuanMteW91dHViZS1wbGF5ZXInLFxuICAgIHBsYXllcnM6IFtdLFxuXG4gICAgaW5pdCA6IGZ1bmN0aW9uKClcbiAgICB7XG4gICAgICAgIC8vIEdldCB0aGUgeW91dHViZSBwbGF5ZXJzIGNvbnRhaW5lcnNcbiAgICAgICAgY29uc3QgeW91dHViZVBsYXllcnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFlvdXR1YmVIYW5kbGVyLnlvdXR1YmVDbGFzcyk7XG4gICAgICAgIGNvbnN0IHlvdXR1YmVQbGF5ZXJzQW1vdW50ID0geW91dHViZVBsYXllcnMubGVuZ3RoO1xuXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB5b3V0dWJlUGxheWVyc0Ftb3VudDsgaSsrKXtcblxuICAgICAgICAgICAgY29uc3QgeW91dHViZVBsYXllciA9IHlvdXR1YmVQbGF5ZXJzW2ldO1xuXG5cbiAgICAgICAgICAgIGNvbnN0IHlvdXR1YmVQbGF5ZXJJZCA9IHlvdXR1YmVQbGF5ZXIuZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICAgICAgaWYoeW91dHViZVBsYXllcklkICE9PSBudWxsIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBTdHJpcCB0aGUgbmVjZXNzYXJ5IGRhdGEgZnJvbSB0aGUgaHRtbCBhbmQgY3JlYXRlIG9iamVjdHMgZnJvbSBpdFxuICAgICAgICAgICAgICAgIGNvbnN0IHlvdXR1YmVFbGVtZW50ID0ge1xuICAgICAgICAgICAgICAgICAgICBpZDogeW91dHViZVBsYXllci5nZXRBdHRyaWJ1dGUoJ2lkJyksXG4gICAgICAgICAgICAgICAgICAgIGxpbms6IHlvdXR1YmVQbGF5ZXIuZ2V0QXR0cmlidXRlKCdkYXRhLXlvdXR1YmUtbGluaycpLFxuICAgICAgICAgICAgICAgICAgICBhdXRvUGxheTogcGFyc2VJbnQoeW91dHViZVBsYXllci5nZXRBdHRyaWJ1dGUoJ2RhdGEtYXV0by1wbGF5JykpLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBZb3V0dWJlSGFuZGxlci5wbGF5ZXJzLnB1c2goeW91dHViZUVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVsZW1lbnQgbm90IGluY2x1ZGUgYmVjYXVzZSB0aGVyZSBpc24ndCBhIGlkIG9uIHRoZSBwbGF5ZXJcIik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coeW91dHViZVBsYXllcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZih5b3V0dWJlUGxheWVyc0Ftb3VudCA+PSAxKSBZb3V0dWJlSGFuZGxlci5pbml0WW91dHViZSgpO1xuXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGV4dGVybmFsIHNjcmlwdCBpcyBsb2FkZWRcbiAgICAgKlxuICAgICAqL1xuICAgIGluaXRZb3V0dWJlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gU2VlIGlmIFlUIHZhcmlhYmxlIGV4aXN0c1xuICAgICAgICBpZiAodHlwZW9mKFlUKSA9PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YoWVQuUGxheWVyKSA9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgLy8gU2V0dXAgQVBJIHJlYWR5IGZ1bmN0aW9uXG4gICAgICAgICAgICB3aW5kb3cub25Zb3VUdWJlUGxheWVyQVBJUmVhZHkgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBZb3V0dWJlSGFuZGxlci5sb2FkUGxheWVycygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIExvYWQgZXh0ZXJuYWwgc2NyaXB0XG4gICAgICAgICAgICBnZXRTY3JpcHQoJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2lmcmFtZV9hcGknKTtcbiAgICAgICAgICAgIC8vIElmIFlUIGFscmVhZHkgZXhpc3RzIGxvYWQgcGxheWVyXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBZb3V0dWJlSGFuZGxlci5sb2FkUGxheWVycygpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSB0aGUgWW91dHViZSBwbGF5ZXIocykgd2l0aCBwYXJhbWV0ZXJzXG4gICAgICogQW5kIHJld3JpdGUgdGhlIHBsYXllcnMgdG8ga2V5IHRoZW0gYnkgdGhlIGVsZW1lbnQgaWRcbiAgICAgKlxuICAgICAqL1xuICAgIGxvYWRQbGF5ZXJzOiBmdW5jdGlvbigpIHtcblxuICAgICAgICBsZXQgcGxheWVycyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IHlvdXR1YmVQbGF5ZXJzQW1vdW50ID0gWW91dHViZUhhbmRsZXIucGxheWVycy5sZW5ndGg7XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB5b3V0dWJlUGxheWVyc0Ftb3VudDsgaSsrKXtcblxuICAgICAgICAgICAgbGV0IHlvdXR1YmVQbGF5ZXIgPSBZb3V0dWJlSGFuZGxlci5wbGF5ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBMb2FkIHBsYXllclxuICAgICAgICAgICAgeW91dHViZVBsYXllci5wbGF5ZXIgPSBuZXcgWVQuUGxheWVyKHlvdXR1YmVQbGF5ZXIuaWQse1xuICAgICAgICAgICAgICAgIGhlaWdodDogMjAwLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAyMDAsXG4gICAgICAgICAgICAgICAgdmlkZW9JZDogeW91dHViZVBsYXllci5saW5rLFxuICAgICAgICAgICAgICAgIGhvc3Q6ICdodHRwczovL3d3dy55b3V0dWJlLW5vY29va2llLmNvbScsXG4gICAgICAgICAgICAgICAgcGxheWVyVmFyczoge1xuICAgICAgICAgICAgICAgICAgICBtb2Rlc3RicmFuZGluZzogMCxcbiAgICAgICAgICAgICAgICAgICAgcmVsOiAwLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxla2I6IDEsXG4gICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5OiB5b3V0dWJlUGxheWVyLmF1dG9QbGF5XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gJ29uUmVhZHknOiBZb3V0dWJlSGFuZGxlci5vblJlYWR5LFxuICAgICAgICAgICAgICAgICAgICAnb25TdGF0ZUNoYW5nZSc6IFlvdXR1YmVIYW5kbGVyLm9uU3RhdGVDaGFuZ2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcGxheWVyc1t5b3V0dWJlUGxheWVyLmlkXSA9IHlvdXR1YmVQbGF5ZXI7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIFlvdXR1YmVIYW5kbGVyLnBsYXllcnMgPSBwbGF5ZXJzO1xuXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdoZW4gcGxheWVyIGlzIHJlYWR5IHRvIHBsYXlcbiAgICAgKi9cbiAgICBvblJlYWR5IDogZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgICAgICBjb25zdCBwbGF5ZXJDb250YWluZXJJZCA9IGV2ZW50LnRhcmdldC5nZXRJZnJhbWUoKS5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgIGNvbnN0IHBsYXllciA9IFlvdXR1YmVIYW5kbGVyLnBsYXllcnNbcGxheWVyQ29udGFpbmVySWRdLnBsYXllcjtcblxuICAgICAgICAvLyBTaG93IHZpZGVvXG4gICAgICAgIC8vIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgJCgnIycgKyBwbGF5ZXJDb250YWluZXJJZCkuc3RvcCgpLmFuaW1hdGUoeyBvcGFjaXR5OiAxIH0sMTAwMCkgfSw4MDApO1xuXG4gICAgICAgIC8vIElmIG5vdCBvbiB0YWJsZXQgb3IgbW9iaWxlLCBwbGF5IG9uIGhpZ2ggcXVhbGl0eVxuICAgICAgICAvLyBwbGF5ZXIubXV0ZSgpO1xuICAgICAgICAvLyBwbGF5ZXIucGxheVZpZGVvKCk7XG4gICAgICAgIC8vIHBsYXllci5zZXRQbGF5YmFja1F1YWxpdHkoJ2hkMTA4MCcpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBMaXN0ZW5lciBmb3IgWW91dHViZSBzdGF0ZSBjaGFuZ2VcbiAgICAgKi9cbiAgICBvblN0YXRlQ2hhbmdlIDogZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgICAgICBjb25zdCBwbGF5ZXJDb250YWluZXJJZCA9IGV2ZW50LnRhcmdldC5nZXRJZnJhbWUoKS5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgIGNvbnN0IHBsYXllciA9IFlvdXR1YmVIYW5kbGVyLnBsYXllcnNbcGxheWVyQ29udGFpbmVySWRdLnBsYXllcjtcblxuICAgICAgICBjb25zdCB2aWRlb1N0YXRlID0gZXZlbnQuZGF0YTtcblxuICAgICAgICAvLyBMb29wIHZpZGVvXG4gICAgICAgIGlmIChldmVudC5kYXRhID09PSBZVC5QbGF5ZXJTdGF0ZS5FTkRFRCApIHtcbiAgICAgICAgICAgIHBsYXllci5wbGF5VmlkZW8oKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbllvdXR1YmVIYW5kbGVyLmluaXQoKTsiLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIFNjcm9sbCBUbyBDbGljayBoYW5kbGVyXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuY29uc3QgU2Nyb2xsVG9IYW5kbGVyID0ge1xuXG4gICAgLy8gQW5pbWF0aW9uIHNldHRpbmdzXG4gICAgb2Zmc2V0IDogNjAsIC8vcGl4ZWxcbiAgICBkdXJhdGlvbiA6IDE0MDAsIC8vbXNcblxuICAgIC8vIEFuaW1hdGlvbiB2YXJpYWJsZXNcbiAgICBib2R5IDogbnVsbCxcbiAgICBzdGFydCA6IDAsXG4gICAgY2hhbmdlIDogMCxcbiAgICBjdXJyZW50VGltZSA6IDAsXG4gICAgYWxsb3dBbmltYXRpb24gOiBmYWxzZSxcbiAgICBzY3JvbGxUb0FuaW1hdGlvbiA6IG51bGwsXG5cbiAgICAvLyBXYXRjaCB0aGUgRWFzaW5nRnVuY3Rpb24gaGVscGVyIGZvciB0aGUgYXZhaWxhYmxlIG1ldGhvZHNcbiAgICBlYXNpbmc6ICdlYXNlSW5PdXRRdWFkJyxcblxuICAgIGluaXQgOiBmdW5jdGlvbigpe1xuXG4gICAgICAgIGNvbnN0IGFuY2hvckxpbmtzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmpzLXNjcm9sbC10by10YXJnZXQnKTtcbiAgICAgICAgY29uc3QgYW5jaG9yTGlua3NBbW91bnQgPSBhbmNob3JMaW5rcy5sZW5ndGg7XG5cbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGFuY2hvckxpbmtzQW1vdW50OyBpKyspIHtcblxuICAgICAgICAgICAgY29uc3QgYW5jaG9yTGluayA9IGFuY2hvckxpbmtzW2ldO1xuXG4gICAgICAgICAgICBhbmNob3JMaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgU2Nyb2xsVG9IYW5kbGVyLnByZXBhcmVTY3JvbGxUbyh0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicpKTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUHJlcGFyZSB0aGUgSGFuZGxlciBmb3IgdGhlIGFuaW1hdGlvblxuICAgICAqL1xuICAgIHByZXBhcmVTY3JvbGxUbyA6IGZ1bmN0aW9uKGVsZW1lbnRJZCl7XG5cbiAgICAgICAgLy8gR2V0IHRoZSBzY3JvbGwgdG8gZWxlbWVudFxuICAgICAgICBlbGVtZW50SWQgPSBlbGVtZW50SWQuc3Vic3RyKGVsZW1lbnRJZC5pbmRleE9mKCcjJykrMSk7XG4gICAgICAgIGNvbnN0IHNjcm9sbFRvRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XG4gICAgICAgIGNvbnN0IHNjcm9sbFRvRWxlbWVudFBvc2l0aW9uID0gc2Nyb2xsVG9FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIC8vIFJlc2V0IG9yIGRlZmluZSB0aGUgSGFuZGxlciB2YXJpYWJsZXNcbiAgICAgICAgU2Nyb2xsVG9IYW5kbGVyLmJvZHkgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIFNjcm9sbFRvSGFuZGxlci5zdGFydCA9IE1hdGgubWF4KFNjcm9sbFRvSGFuZGxlci5ib2R5LnNjcm9sbFRvcCwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AsIHdpbmRvdy5wYWdlWU9mZnNldCk7IC8vVXNlIE1hdGgubWF4IGJlY2F1c2Ugc2FmYXJpIGRvZXNuJ3Qgc3VwcG9ydCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgICAgIFNjcm9sbFRvSGFuZGxlci5jaGFuZ2UgPSAoKHNjcm9sbFRvRWxlbWVudFBvc2l0aW9uLnRvcCArIFNjcm9sbFRvSGFuZGxlci5zdGFydCkgLSBTY3JvbGxUb0hhbmRsZXIuc3RhcnQpIC0gU2Nyb2xsVG9IYW5kbGVyLm9mZnNldDtcbiAgICAgICAgU2Nyb2xsVG9IYW5kbGVyLnN0YXJ0VGltZSA9ICdub3cnIGluIHdpbmRvdy5wZXJmb3JtYW5jZSA/IHBlcmZvcm1hbmNlLm5vdygpIDogbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIFNjcm9sbFRvSGFuZGxlci5hbGxvd0FuaW1hdGlvbiA9IHRydWU7XG5cbiAgICAgICAgLy8gVHJpZ2dlciBhbmltYXRpb25cbiAgICAgICAgc2Nyb2xsVG9BbmltYXRpb24gPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoU2Nyb2xsVG9IYW5kbGVyLmFuaW1hdGVTY3JvbGwpO1xuXG4gICAgICAgIC8vIFN0b3Agb24gc2Nyb2xsXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBTY3JvbGxUb0hhbmRsZXIuYWJvcnRTY3JvbGxBbmltYXRpb24pO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBTY3JvbGxUb0hhbmRsZXIuYWJvcnRTY3JvbGxBbmltYXRpb24pO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NTW91c2VTY3JvbGwnLCBTY3JvbGxUb0hhbmRsZXIuYWJvcnRTY3JvbGxBbmltYXRpb24pO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V3aGVlbCcsIFNjcm9sbFRvSGFuZGxlci5hYm9ydFNjcm9sbEFuaW1hdGlvbik7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIFNjcm9sbFRvSGFuZGxlci5hYm9ydFNjcm9sbEFuaW1hdGlvbik7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBTY3JvbGxUb0hhbmRsZXIuYWJvcnRTY3JvbGxBbmltYXRpb24pO1xuXG4gICAgfSxcblxuICAgIC8qXG4gICAgICogQW5pbWF0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uXG4gICAgICovXG4gICAgYW5pbWF0ZVNjcm9sbCA6IGZ1bmN0aW9uICh0aW1lc3RhbXApIHtcblxuICAgICAgICAvLyBDYWxjdWxhdGUgcHJvZ3Jlc3MgZnJvbSAwIC0gMVxuICAgICAgICBsZXQgcHJvZ3Jlc3MgPSBNYXRoLm1pbigxLCAodGltZXN0YW1wIC0gIFNjcm9sbFRvSGFuZGxlci5zdGFydFRpbWUpIC8gU2Nyb2xsVG9IYW5kbGVyLmR1cmF0aW9uKTtcbiAgICAgICAgaWYocHJvZ3Jlc3MgPCAwKSBwcm9ncmVzcyA9IDA7XG5cbiAgICAgICAgLy8gQ29udmVydCBwcm9ncmVzcyB3aXRoIGVhc2luZyBmdW5jdGlvblxuICAgICAgICBwcm9ncmVzcyA9IEVhc2luZ0Z1bmN0aW9uc1tTY3JvbGxUb0hhbmRsZXIuZWFzaW5nXShwcm9ncmVzcyk7XG5cbiAgICAgICAgY29uc3QgbmV3U2Nyb2xsVG9wID0gU2Nyb2xsVG9IYW5kbGVyLnN0YXJ0ICsgKCBTY3JvbGxUb0hhbmRsZXIuY2hhbmdlICogcHJvZ3Jlc3MgKTtcblxuICAgICAgICBTY3JvbGxUb0hhbmRsZXIuYm9keS5zY3JvbGxUb3AgPSBuZXdTY3JvbGxUb3A7XG4gICAgICAgIGlmKCBTY3JvbGxUb0hhbmRsZXIuYm9keS5zY3JvbGxUb3AgPT09IDAgKSBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCA9IG5ld1Njcm9sbFRvcDsgLy8gU2FmYXJpIGRvZXNuJ3Qgc3VwcG9ydCBzbyBpZiBTY3JvbGxUb0hhbmRsZXIuYm9keS5zY3JvbGxUb3AgaXMgMCBmb3JjZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIHRocm91Z2ggZG9jdW1lbnQuYm9keS5zY3JvbGxUb3BcblxuICAgICAgICBpZihwcm9ncmVzcyA8IDEgJiYgU2Nyb2xsVG9IYW5kbGVyLmFsbG93QW5pbWF0aW9uKXtcbiAgICAgICAgICAgIHNjcm9sbFRvQW5pbWF0aW9uID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFNjcm9sbFRvSGFuZGxlci5hbmltYXRlU2Nyb2xsKTtcbiAgICAgICAgfVxuXG4gICAgfSxcblxuICAgIC8qXG4gICAgICogQWJvcnQgdGhlIHNjcm9sbCBhbmltYXRpb25cbiAgICAgKi9cbiAgICBhYm9ydFNjcm9sbEFuaW1hdGlvbiA6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBTY3JvbGxUb0hhbmRsZXIuYWxsb3dBbmltYXRpb24gPSBmYWxzZTtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoU2Nyb2xsVG9IYW5kbGVyLnNjcm9sbFRvQW5pbWF0aW9uKTtcbiAgICB9XG5cbn07XG5cblNjcm9sbFRvSGFuZGxlci5pbml0KCk7IiwiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KCkgOlxuICAgICAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgICAgICAgICAgKGZhY3RvcnkoKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIEB0aGlzIHtQcm9taXNlfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmFsbHlDb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuICAgICAgICB2YXIgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgICAgICByZXR1cm4gdGhpcy50aGVuKFxuICAgICAgICAgICAgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLnJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuLy8gU3RvcmUgc2V0VGltZW91dCByZWZlcmVuY2Ugc28gcHJvbWlzZS1wb2x5ZmlsbCB3aWxsIGJlIHVuYWZmZWN0ZWQgYnlcbi8vIG90aGVyIGNvZGUgbW9kaWZ5aW5nIHNldFRpbWVvdXQgKGxpa2Ugc2lub24udXNlRmFrZVRpbWVycygpKVxuICAgIHZhciBzZXRUaW1lb3V0RnVuYyA9IHNldFRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBub29wKCkge31cblxuLy8gUG9seWZpbGwgZm9yIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4gICAgZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gICAgICovXG4gICAgZnVuY3Rpb24gUHJvbWlzZShmbikge1xuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUHJvbWlzZSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9taXNlcyBtdXN0IGJlIGNvbnN0cnVjdGVkIHZpYSBuZXcnKTtcbiAgICAgICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcignbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgLyoqIEB0eXBlIHshbnVtYmVyfSAqL1xuICAgICAgICB0aGlzLl9zdGF0ZSA9IDA7XG4gICAgICAgIC8qKiBAdHlwZSB7IWJvb2xlYW59ICovXG4gICAgICAgIHRoaXMuX2hhbmRsZWQgPSBmYWxzZTtcbiAgICAgICAgLyoqIEB0eXBlIHtQcm9taXNlfHVuZGVmaW5lZH0gKi9cbiAgICAgICAgdGhpcy5fdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIC8qKiBAdHlwZSB7IUFycmF5PCFGdW5jdGlvbj59ICovXG4gICAgICAgIHRoaXMuX2RlZmVycmVkcyA9IFtdO1xuXG4gICAgICAgIGRvUmVzb2x2ZShmbiwgdGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlKHNlbGYsIGRlZmVycmVkKSB7XG4gICAgICAgIHdoaWxlIChzZWxmLl9zdGF0ZSA9PT0gMykge1xuICAgICAgICAgICAgc2VsZiA9IHNlbGYuX3ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLl9zdGF0ZSA9PT0gMCkge1xuICAgICAgICAgICAgc2VsZi5fZGVmZXJyZWRzLnB1c2goZGVmZXJyZWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuX2hhbmRsZWQgPSB0cnVlO1xuICAgICAgICBQcm9taXNlLl9pbW1lZGlhdGVGbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBjYiA9IHNlbGYuX3N0YXRlID09PSAxID8gZGVmZXJyZWQub25GdWxmaWxsZWQgOiBkZWZlcnJlZC5vblJlamVjdGVkO1xuICAgICAgICAgICAgaWYgKGNiID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgKHNlbGYuX3N0YXRlID09PSAxID8gcmVzb2x2ZSA6IHJlamVjdCkoZGVmZXJyZWQucHJvbWlzZSwgc2VsZi5fdmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciByZXQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldCA9IGNiKHNlbGYuX3ZhbHVlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZGVmZXJyZWQucHJvbWlzZSwgZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShkZWZlcnJlZC5wcm9taXNlLCByZXQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlKHNlbGYsIG5ld1ZhbHVlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBQcm9taXNlIFJlc29sdXRpb24gUHJvY2VkdXJlOiBodHRwczovL2dpdGh1Yi5jb20vcHJvbWlzZXMtYXBsdXMvcHJvbWlzZXMtc3BlYyN0aGUtcHJvbWlzZS1yZXNvbHV0aW9uLXByb2NlZHVyZVxuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSBzZWxmKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0EgcHJvbWlzZSBjYW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBpdHNlbGYuJyk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgJiZcbiAgICAgICAgICAgICAgICAodHlwZW9mIG5ld1ZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV3VmFsdWUgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhlbiA9IG5ld1ZhbHVlLnRoZW47XG4gICAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IDM7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsZShzZWxmKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9SZXNvbHZlKGJpbmQodGhlbiwgbmV3VmFsdWUpLCBzZWxmKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gMTtcbiAgICAgICAgICAgIHNlbGYuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgICBmaW5hbGUoc2VsZik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlamVjdChzZWxmLCBlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlamVjdChzZWxmLCBuZXdWYWx1ZSkge1xuICAgICAgICBzZWxmLl9zdGF0ZSA9IDI7XG4gICAgICAgIHNlbGYuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIGZpbmFsZShzZWxmKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5hbGUoc2VsZikge1xuICAgICAgICBpZiAoc2VsZi5fc3RhdGUgPT09IDIgJiYgc2VsZi5fZGVmZXJyZWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgUHJvbWlzZS5faW1tZWRpYXRlRm4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzZWxmLl9oYW5kbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIFByb21pc2UuX3VuaGFuZGxlZFJlamVjdGlvbkZuKHNlbGYuX3ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzZWxmLl9kZWZlcnJlZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGhhbmRsZShzZWxmLCBzZWxmLl9kZWZlcnJlZHNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuX2RlZmVycmVkcyA9IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgZnVuY3Rpb24gSGFuZGxlcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkge1xuICAgICAgICB0aGlzLm9uRnVsZmlsbGVkID0gdHlwZW9mIG9uRnVsZmlsbGVkID09PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiBudWxsO1xuICAgICAgICB0aGlzLm9uUmVqZWN0ZWQgPSB0eXBlb2Ygb25SZWplY3RlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uUmVqZWN0ZWQgOiBudWxsO1xuICAgICAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRha2UgYSBwb3RlbnRpYWxseSBtaXNiZWhhdmluZyByZXNvbHZlciBmdW5jdGlvbiBhbmQgbWFrZSBzdXJlXG4gICAgICogb25GdWxmaWxsZWQgYW5kIG9uUmVqZWN0ZWQgYXJlIG9ubHkgY2FsbGVkIG9uY2UuXG4gICAgICpcbiAgICAgKiBNYWtlcyBubyBndWFyYW50ZWVzIGFib3V0IGFzeW5jaHJvbnkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZG9SZXNvbHZlKGZuLCBzZWxmKSB7XG4gICAgICAgIHZhciBkb25lID0gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmbihcbiAgICAgICAgICAgICAgICBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzZWxmLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChzZWxmLCByZWFzb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICByZWplY3Qoc2VsZiwgZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgUHJvbWlzZS5wcm90b3R5cGVbJ2NhdGNoJ10gPSBmdW5jdGlvbihvblJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG4gICAgfTtcblxuICAgIFByb21pc2UucHJvdG90eXBlLnRoZW4gPSBmdW5jdGlvbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHZhciBwcm9tID0gbmV3IHRoaXMuY29uc3RydWN0b3Iobm9vcCk7XG5cbiAgICAgICAgaGFuZGxlKHRoaXMsIG5ldyBIYW5kbGVyKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9tKSk7XG4gICAgICAgIHJldHVybiBwcm9tO1xuICAgIH07XG5cbiAgICBQcm9taXNlLnByb3RvdHlwZVsnZmluYWxseSddID0gZmluYWxseUNvbnN0cnVjdG9yO1xuXG4gICAgUHJvbWlzZS5hbGwgPSBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgaWYgKCFhcnIgfHwgdHlwZW9mIGFyci5sZW5ndGggPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UuYWxsIGFjY2VwdHMgYW4gYXJyYXknKTtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyKTtcbiAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJlc29sdmUoW10pO1xuICAgICAgICAgICAgdmFyIHJlbWFpbmluZyA9IGFyZ3MubGVuZ3RoO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiByZXMoaSwgdmFsKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCAmJiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aGVuID0gdmFsLnRoZW47XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMoaSwgdmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJnc1tpXSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC0tcmVtYWluaW5nID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHJlcyhpLCBhcmdzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIFByb21pc2UucmVzb2x2ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBQcm9taXNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBQcm9taXNlLnJlamVjdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHJlamVjdCh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBQcm9taXNlLnJhY2UgPSBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHZhbHVlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIHZhbHVlc1tpXS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbi8vIFVzZSBwb2x5ZmlsbCBmb3Igc2V0SW1tZWRpYXRlIGZvciBwZXJmb3JtYW5jZSBnYWluc1xuICAgIFByb21pc2UuX2ltbWVkaWF0ZUZuID1cbiAgICAgICAgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICAgIGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH0pIHx8XG4gICAgICAgIGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0RnVuYyhmbiwgMCk7XG4gICAgICAgIH07XG5cbiAgICBQcm9taXNlLl91bmhhbmRsZWRSZWplY3Rpb25GbiA9IGZ1bmN0aW9uIF91bmhhbmRsZWRSZWplY3Rpb25GbihlcnIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Bvc3NpYmxlIFVuaGFuZGxlZCBQcm9taXNlIFJlamVjdGlvbjonLCBlcnIpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKiogQHN1cHByZXNzIHt1bmRlZmluZWRWYXJzfSAqL1xuICAgIHZhciBnbG9iYWxOUyA9IChmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gdGhlIG9ubHkgcmVsaWFibGUgbWVhbnMgdG8gZ2V0IHRoZSBnbG9iYWwgb2JqZWN0IGlzXG4gICAgICAgIC8vIGBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpYFxuICAgICAgICAvLyBIb3dldmVyLCB0aGlzIGNhdXNlcyBDU1AgdmlvbGF0aW9ucyBpbiBDaHJvbWUgYXBwcy5cbiAgICAgICAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gd2luZG93O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbDtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdCcpO1xuICAgIH0pKCk7XG5cbiAgICBpZiAoISgnUHJvbWlzZScgaW4gZ2xvYmFsTlMpKSB7XG4gICAgICAgIGdsb2JhbE5TWydQcm9taXNlJ10gPSBQcm9taXNlO1xuICAgIH0gZWxzZSBpZiAoIWdsb2JhbE5TLlByb21pc2UucHJvdG90eXBlWydmaW5hbGx5J10pIHtcbiAgICAgICAgZ2xvYmFsTlMuUHJvbWlzZS5wcm90b3R5cGVbJ2ZpbmFsbHknXSA9IGZpbmFsbHlDb25zdHJ1Y3RvcjtcbiAgICB9XG5cbn0pKSk7IiwiTnVtYmVyLmlzSW50ZWdlciA9IE51bWJlci5pc0ludGVnZXIgfHwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiICYmXG4gICAgICAgIGlzRmluaXRlKHZhbHVlKSAmJlxuICAgICAgICBNYXRoLmZsb29yKHZhbHVlKSA9PT0gdmFsdWU7XG59OyIsIlxuLyogRXhhbXBsZVxuXG5jb25zdCBoZWFkZXJJbWFnZVNsaWRlclNldHRpbmcgPSBuZXcgU2xpZGVyUHJvamVjdG9yU2V0dGluZyh7XG4gICAgc2xpZGVyUHJvamVjdG9ySWQ6ICdoZWFkZXItaW1hZ2Utc2xpZGVyJyxcbiAgICBzbGlkZVF1ZXJ5OiAnI2hlYWRlci1pbWFnZS1zbGlkZXIgLnBsYWNlaG9sZGVyIGZpZ3VyZScsXG4gICAgZG90czogJyNoZWFkZXItaW1hZ2Utc2xpZGVyIC5zbGlkZXItbmF2aWdhdGlvbi1sYWJlbHMgLm5hdmlnYXRpb24gc3BhbicsXG4gICAgYXV0b1NsaWRlcjogdHJ1ZSxcbiAgICBzbGlkZXJJbnRlcnZhbDogNDAwMFxufSk7XG5oZWFkZXJJbWFnZVNsaWRlclNldHRpbmcgPSBoZWFkZXJJbWFnZVNsaWRlclNldHRpbmcucHJlcGFyZVBhcmFtZXRlcnMoKTtcblxuY29uc3QgaGVhZGVySW1hZ2VTbGlkZXIgPSBuZXcgU2xpZGVyUHJvamVjdG9yKGhlYWRlckltYWdlU2xpZGVyU2V0dGluZykuaW5pdCgpO1xuXG4gKi9cblxuXG5sZXQgU2xpZGVycyA9IFtdO1xuXG5jb25zdCBzbGlkZXJDb250YWluZXJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmpzLXNsaWRlcicpO1xuY29uc3Qgc2xpZGVyQ29udGFpbmVyc0xlbmd0aCA9IHNsaWRlckNvbnRhaW5lcnMubGVuZ3RoO1xuXG5mb3IobGV0IGkgPTA7IGkgPCBzbGlkZXJDb250YWluZXJzTGVuZ3RoOyBpKyspe1xuXG4gICAgY29uc3Qgc2xpZGVyID0gc2xpZGVyQ29udGFpbmVyc1tpXTtcbiAgICBjb25zdCBzbGlkZXJJZCA9IHNsaWRlci5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG5cbiAgICBpZihzbGlkZXJJZCAhPT0gbnVsbCl7XG5cbiAgICAgICAgY29uc3QgU2xpZGVyc2V0dGluZyA9IG5ldyBTbGlkZXJTZXR0aW5nKHtcbiAgICAgICAgICAgIHNsaWRlcklkOiBzbGlkZXJJZCxcbiAgICAgICAgICAgIHNsaWRlUXVlcnk6ICcjJyArIHNsaWRlcklkICsnIC5qcy1zbGlkZXItc2xpZGUnLFxuICAgICAgICAgICAgbmF2aWdhdGlvbkJ1dHRvbnM6ICcjJyArIHNsaWRlcklkICsnIC5qcy1zbGlkZXItYnV0dG9uJyxcbiAgICAgICAgICAgIGRvdHM6ICcjJyArIHNsaWRlcklkICsnIC5qcy1zbGlkZXItaW5kaWNhdG9yJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgU2xpZGVycy5wdXNoKCBuZXcgU2xpZGVyKFNsaWRlcnNldHRpbmcucHJlcGFyZVBhcmFtZXRlcnMoKSkuaW5pdCgpICk7XG4gICAgfVxuICAgIGVsc2UgY29uc29sZS5sb2coJ0FuIGltYWdlIHNsaWRlciBoYXMgbm8gaWQuLi4nKTtcbn1cblxuXG5mdW5jdGlvbiBTbGlkZXJTZXR0aW5nKHNldHRpbmdzT2JqZWN0KSB7XG5cbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIHRoaXMuc2xpZGVySWQgPSAnJztcbiAgICB0aGlzLmRlZmluZWRQcmV2aW91c05leHQgPSB0cnVlO1xuICAgIHRoaXMuYXV0b1NsaWRlciA9IGZhbHNlO1xuICAgIHRoaXMuc2xpZGVySW50ZXJ2YWwgPSA0MDAwO1xuICAgIHRoaXMubmF2aWdhdGlvbkJ1dHRvbnMgPSAnJztcbiAgICB0aGlzLmRvdHMgPSAnJztcbiAgICB0aGlzLnNsaWRlUXVlcnkgPSAnJztcblxuICAgIHRoaXMuc2V0U2xpZGVySWQgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2xpZGVySWQgPSBzdHJpbmc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgdGhpcy5zZXREZWZpbmVkUHJldmlvdXNOZXh0ID0gZnVuY3Rpb24gKGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5kZWZpbmVkUHJldmlvdXNOZXh0ID0gYm9vbGVhbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICB0aGlzLnNldEF1dG9TbGlkZXIgPSBmdW5jdGlvbiAoYm9vbGVhbikge1xuICAgICAgICB0aGlzLmF1dG9TbGlkZXIgPSBib29sZWFuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHRoaXMuc2V0U2xpZGVySW50ZXJ2YWwgPSBmdW5jdGlvbiAoaW50ZWdlcikge1xuICAgICAgICB0aGlzLnNsaWRlckludGVydmFsID0gaW50ZWdlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICB0aGlzLnNldFNsaWRlUXVlcnkgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2xpZGVRdWVyeSA9IHN0cmluZztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICB0aGlzLnNldE5hdmlnYXRpb25CdXR0b25zID0gZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25CdXR0b25zID0gc3RyaW5nO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHRoaXMuc2V0RG90cyA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5kb3RzID0gc3RyaW5nO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHRoaXMuZ2V0U2xpZGVySWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNsaWRlcklkO1xuICAgIH07XG4gICAgdGhpcy5nZXREZWZpbmVkUHJldmlvdXNOZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZpbmVkUHJldmlvdXNOZXh0O1xuICAgIH07XG4gICAgdGhpcy5nZXRBdXRvU2xpZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hdXRvU2xpZGVyO1xuICAgIH07XG4gICAgdGhpcy5nZXRTbGlkZXJJbnRlcnZhbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVySW50ZXJ2YWw7XG4gICAgfTtcbiAgICB0aGlzLmdldFNsaWRlUXVlcnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNsaWRlUXVlcnk7XG4gICAgfTtcbiAgICB0aGlzLmdldE5hdmlnYXRpb25CdXR0b25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uQnV0dG9ucztcbiAgICB9O1xuICAgIHRoaXMuZ2V0RG90cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG90cztcbiAgICB9O1xuXG4gICAgLy8gSW52ZXJ0IHNldHRlcnMgdG8gZ2V0dGVyc1xuICAgIHRoaXMucHJlcGFyZVBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNsaWRlcklkOiBzZWxmLmdldFNsaWRlcklkKCksXG4gICAgICAgICAgICBkZWZpbmVkUHJldmlvdXNOZXh0OiBzZWxmLmdldERlZmluZWRQcmV2aW91c05leHQoKSxcbiAgICAgICAgICAgIGF1dG9TbGlkZXI6IHNlbGYuZ2V0QXV0b1NsaWRlcigpLFxuICAgICAgICAgICAgc2xpZGVySW50ZXJ2YWw6IHNlbGYuZ2V0U2xpZGVySW50ZXJ2YWwoKSxcbiAgICAgICAgICAgIG5hdmlnYXRpb25CdXR0b25zOiBzZWxmLmdldE5hdmlnYXRpb25CdXR0b25zKCksXG4gICAgICAgICAgICBkb3RzOiBzZWxmLmdldERvdHMoKSxcbiAgICAgICAgICAgIHNsaWRlUXVlcnk6IHNlbGYuZ2V0U2xpZGVRdWVyeSgpXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICAvLyBNYXNzIGFzc2lnbiBzZXR0aW5nc1xuICAgIHRoaXMuZmlsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gT2JqZWN0LmtleXMoc2V0dGluZ3NPYmplY3QpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAvLyAgICAgc2VsZltrZXldID0gc2V0dGluZ3NPYmplY3Rba2V5XTtcbiAgICAgICAgLy8gfSk7XG5cbiAgICAgICAgY29uc3Qgc2V0dGluZ3NPYmplY3RLZXlzID0gT2JqZWN0LmtleXMoc2V0dGluZ3NPYmplY3QpO1xuICAgICAgICBjb25zdCBzZXR0aW5nc09iamVjdExlbmd0aCA9IHNldHRpbmdzT2JqZWN0S2V5cy5sZW5ndGg7XG5cbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHNldHRpbmdzT2JqZWN0TGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gc2V0dGluZ3NPYmplY3RLZXlzW2ldO1xuICAgICAgICAgICAgc2VsZltrZXldID0gc2V0dGluZ3NPYmplY3Rba2V5XTtcbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIHRoaXMuZmlsbCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2xpZGVySWQ6IHNlbGYuc2V0U2xpZGVySWQsXG4gICAgICAgIGRlZmluZWRQcmV2aW91c05leHQ6IHNlbGYuc2V0RGVmaW5lZFByZXZpb3VzTmV4dCxcbiAgICAgICAgYXV0b1NsaWRlcjogc2VsZi5zZXRBdXRvU2xpZGVyLFxuICAgICAgICBzbGlkZXJJbnRlcnZhbDogc2VsZi5zZXRTbGlkZXJJbnRlcnZhbCxcbiAgICAgICAgbmF2aWdhdGlvbkJ1dHRvbnM6IHNlbGYuc2V0TmF2aWdhdGlvbkJ1dHRvbnMsXG4gICAgICAgIGRvdHM6IHNlbGYuc2V0RG90cyxcbiAgICAgICAgc2xpZGVRdWVyeTogc2VsZi5zZXRTbGlkZVF1ZXJ5LFxuICAgICAgICBwcmVwYXJlUGFyYW1ldGVyczogc2VsZi5wcmVwYXJlUGFyYW1ldGVyc1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIFNsaWRlcihzZXR0aW5ncykge1xuXG4gICAgLy9EZWZpbmUgU2xpZGVyIG9iamVjdFxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuc2xpZGVyT2JqZWN0ID0gJyc7XG5cbiAgICAvL1NsaWRlUGFyYW1ldGVyc1xuICAgIHRoaXMuYWN0aXZlU2xpZGVJZCA9IDA7XG4gICAgdGhpcy5wcmV2aW91c1NsaWRlSWQgPSAwO1xuICAgIHRoaXMubmV4dFNsaWRlSWQgPSAwO1xuICAgIHRoaXMuYXZhaWxhYmxlU2xpZGVzID0gMTtcbiAgICB0aGlzLnNsaWRlcyA9IFtdO1xuICAgIHRoaXMuYXV0b1NsaWRlckludGVydmFsID0gbnVsbDtcblxuICAgIHRoaXMuc2V0dGluZ3MgPSB7fTtcblxuICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAvL0FwcGVuZCBzZXR0aW5ncyB0byBzZWxmXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcblxuICAgICAgICAvL0Fzc2lnbiBuZWVkZWQgZWxlbWVudHMgYW5kIGNhbGN1bGF0aW9uc1xuICAgICAgICB0aGlzLnNsaWRlck9iamVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc2V0dGluZ3Muc2xpZGVySWQpO1xuICAgICAgICB0aGlzLnNsaWRlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5zZXR0aW5ncy5zbGlkZVF1ZXJ5KTtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVTbGlkZXMgPSB0aGlzLnNsaWRlcy5sZW5ndGg7XG4gICAgICAgIHRoaXMuYWN0aXZlU2xpZGVJZCA9IDA7XG5cbiAgICAgICAgLy9EZWZpbmUgcHJldmlvdXMgYW5kIG5leHQgaWYgd2Ugd2FudCB0byB1c2UgdGhvc2VcbiAgICAgICAgaWYgKHNlbGYuc2V0dGluZ3MuZGVmaW5lZFByZXZpb3VzTmV4dCkgdGhpcy5zZXRQcmV2aW91c0FuZE5leHRTbGlkZSgpO1xuXG4gICAgICAgIC8vIFNldCBhY3RpdmUgc2xpZGUgKGFuZCBwb3NzaWJsZSBwcmV2aW91cyBhbmQgbmV4dCBjbGFzc2VzKVxuICAgICAgICB0aGlzLnNldFNsaWRlKCk7XG5cbiAgICAgICAgLy8gU3dpcGUgaW50ZXJhY3Rpb25cbiAgICAgICAgY29uc3Qgc3dpcGVHZXN0dXJlcyA9IG5ldyBIYW1tZXIodGhpcy5zbGlkZXJPYmplY3QpO1xuICAgICAgICBzd2lwZUdlc3R1cmVzLm9uKCdzd2lwZWxlZnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZWxmLnJlc2V0QXV0b1NsaWRlcigpO1xuICAgICAgICAgICAgc2VsZi5uZXh0U2xpZGUoKTtcbiAgICAgICAgICAgIHNlbGYuc2V0U2xpZGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN3aXBlR2VzdHVyZXMub24oJ3N3aXBlcmlnaHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZWxmLnJlc2V0QXV0b1NsaWRlcigpO1xuICAgICAgICAgICAgc2VsZi5wcmV2aW91c1NsaWRlKCk7XG4gICAgICAgICAgICBzZWxmLnNldFNsaWRlKCk7XG4gICAgICAgIH0pO1xuXG5cblxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5uYXZpZ2F0aW9uQnV0dG9ucyAhPT0gJycpIHtcblxuICAgICAgICAgICAgLy8gQ2xpY2sgaW50ZXJhY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25CdXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLnNldHRpbmdzLm5hdmlnYXRpb25CdXR0b25zKTtcbiAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25CdXR0b25zTGVuZ3RoID0gbmF2aWdhdGlvbkJ1dHRvbnMubGVuZ3RoO1xuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IG5hdmlnYXRpb25CdXR0b25zTGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25CdXR0b24gPSBuYXZpZ2F0aW9uQnV0dG9uc1tpXTtcbiAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNsaWNrTmF2aWdhdGlvbkJ1dHRvbih0aGlzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZG90cyAhPT0gJycpIHtcbiAgICAgICAgICAgIC8vIENsaWNrIGludGVyYWN0aW9uXG4gICAgICAgICAgICBjb25zdCBkb3RzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLnNldHRpbmdzLmRvdHMpO1xuICAgICAgICAgICAgY29uc3QgZG90c0xlbmd0aCA9IGRvdHMubGVuZ3RoO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5zZXR0aW5ncy5kb3RzKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGRvdHMpO1xuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGRvdHNMZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICAgICAgY29uc3QgZG90ID0gZG90c1tpXTtcbiAgICAgICAgICAgICAgICBkb3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2xpY2tEb3QodGhpcyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYuYXV0b1NsaWRlcigpO1xuICAgIH07XG5cblxuICAgIHRoaXMuYXV0b1NsaWRlciA9IGZ1bmN0aW9uICgpe1xuXG4gICAgICAgIGlmKHRoaXMuYXV0b1NsaWRlckludGVydmFsICE9PSBudWxsKSBjbGVhckludGVydmFsKHRoaXMuYXV0b1NsaWRlckludGVydmFsKTtcblxuICAgICAgICBpZih0aGlzLnNldHRpbmdzLmF1dG9TbGlkZXIgJiYgTnVtYmVyLmlzSW50ZWdlcih0aGlzLnNldHRpbmdzLnNsaWRlckludGVydmFsKSApe1xuXG4gICAgICAgICAgICB0aGlzLmF1dG9TbGlkZXJJbnRlcnZhbCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm5leHRTbGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNldFNsaWRlKCk7XG4gICAgICAgICAgICAgICAgfSwgdGhpcy5zZXR0aW5ncy5zbGlkZXJJbnRlcnZhbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLnJlc2V0QXV0b1NsaWRlciA9IHNlbGYuYXV0b1NsaWRlcjtcblxuXG4gICAgdGhpcy5uZXh0U2xpZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlU2xpZGVJZCsrO1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVTbGlkZUlkID49IHRoaXMuYXZhaWxhYmxlU2xpZGVzKSB0aGlzLmFjdGl2ZVNsaWRlSWQgPSAwO1xuXG4gICAgICAgIGlmIChzZWxmLnNldHRpbmdzLmRlZmluZWRQcmV2aW91c05leHQpIHRoaXMuc2V0UHJldmlvdXNBbmROZXh0U2xpZGUoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5wcmV2aW91c1NsaWRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmFjdGl2ZVNsaWRlSWQtLTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlU2xpZGVJZCA8IDApIHRoaXMuYWN0aXZlU2xpZGVJZCA9IHRoaXMuYXZhaWxhYmxlU2xpZGVzIC0gMTtcblxuICAgICAgICBpZiAoc2VsZi5zZXR0aW5ncy5kZWZpbmVkUHJldmlvdXNOZXh0KSB0aGlzLnNldFByZXZpb3VzQW5kTmV4dFNsaWRlKCk7XG4gICAgfTtcblxuICAgIHRoaXMuc2V0UHJldmlvdXNBbmROZXh0U2xpZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubmV4dFNsaWRlSWQgPSB0aGlzLmFjdGl2ZVNsaWRlSWQgKyAxO1xuICAgICAgICBpZiAodGhpcy5uZXh0U2xpZGVJZCA+PSB0aGlzLmF2YWlsYWJsZVNsaWRlcykgdGhpcy5uZXh0U2xpZGVJZCA9IDA7XG5cbiAgICAgICAgdGhpcy5wcmV2aW91c1NsaWRlSWQgPSB0aGlzLmFjdGl2ZVNsaWRlSWQgLSAxO1xuICAgICAgICBpZiAodGhpcy5wcmV2aW91c1NsaWRlSWQgPCAwKSB0aGlzLnByZXZpb3VzU2xpZGVJZCA9IHRoaXMuYXZhaWxhYmxlU2xpZGVzIC0gMTtcbiAgICB9O1xuXG4gICAgdGhpcy5zZXRTbGlkZSA9IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAvLyBMb29wIHRocm91Z2ggdGhlIGZvcm0gZWxlbWVudHNcbiAgICAgICAgY29uc3Qgc2xpZGVzTGVuZ3RoID0gc2VsZi5zbGlkZXMubGVuZ3RoO1xuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgc2xpZGVzTGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgY29uc3Qgc2xpZGUgPSBzZWxmLnNsaWRlc1tpXTtcblxuICAgICAgICAgICAgc2xpZGUuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwibm9uZVwiOyAvLyBOZWVkZWQgZm9yIHN3aXBlIGZ1bmN0aW9uYWxpdHlcblxuICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIHNldCBhdHRyaWJ1dGUgdG8gZGVzaXJlZCB0eXBlXG4gICAgICAgICAgICBjb25zdCBzbGlkZU9yZGVyID0gcGFyc2VJbnQoc2xpZGUuZ2V0QXR0cmlidXRlKCdkYXRhLW9yZGVyJykpO1xuXG4gICAgICAgICAgICAvLyBSZW1vdmUgYW5kIHNldCBhY3RpdmUgZm9yIGFsbCBzbGlkZXNcbiAgICAgICAgICAgIGlmIChzbGlkZU9yZGVyICE9PSBzZWxmLmFjdGl2ZVNsaWRlSWQpIHNsaWRlLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFjdGl2ZScpO1xuICAgICAgICAgICAgZWxzZSBzbGlkZS5jbGFzc0xpc3QuYWRkKCdpcy1hY3RpdmUnKTtcblxuICAgICAgICAgICAgLy8gSWYgd2UgdXNlIHRoZSBwcmV2aW91cyBhbmQgbmV4dCwgYWxzbyBzZXQgdGhvc2UgY2xhc3Nlc1xuICAgICAgICAgICAgaWYgKHNlbGYuc2V0dGluZ3MuZGVmaW5lZFByZXZpb3VzTmV4dCkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHNsaWRlT3JkZXIgIT09IHNlbGYucHJldmlvdXNTbGlkZUlkKSBzbGlkZS5jbGFzc0xpc3QucmVtb3ZlKCdwcmV2aW91cycpO1xuICAgICAgICAgICAgICAgIGVsc2Ugc2xpZGUuY2xhc3NMaXN0LmFkZCgncHJldmlvdXMnKTtcblxuICAgICAgICAgICAgICAgIGlmIChzbGlkZU9yZGVyICE9PSBzZWxmLm5leHRTbGlkZUlkKSBzbGlkZS5jbGFzc0xpc3QucmVtb3ZlKCduZXh0Jyk7XG4gICAgICAgICAgICAgICAgZWxzZSBzbGlkZS5jbGFzc0xpc3QuYWRkKCduZXh0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VsZi5zZXR0aW5ncy5kb3RzICE9PSAnJykgeyBzZWxmLnNldEFjdGl2ZURvdCgpOyB9XG4gICAgfTtcblxuICAgIHRoaXMuY2xpY2tOYXZpZ2F0aW9uQnV0dG9uID0gZnVuY3Rpb24gKG5hdkJ1dHRvbikge1xuICAgICAgICBzZWxmLmFjdGl2ZVNsaWRlSWQgPSBwYXJzZUludChuYXZCdXR0b24uZ2V0QXR0cmlidXRlKCdkYXRhLW9yZGVyJykpO1xuICAgICAgICBpZiAoc2VsZi5zZXR0aW5ncy5kZWZpbmVkUHJldmlvdXNOZXh0KSBzZWxmLnNldFByZXZpb3VzQW5kTmV4dFNsaWRlKCk7XG4gICAgICAgIHNlbGYuc2V0U2xpZGUoKTtcblxuICAgICAgICBjb25zdCBuZXh0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxmLnNldHRpbmdzLm5hdmlnYXRpb25CdXR0b25zICsgJy5uZXh0Jyk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxmLnNldHRpbmdzLm5hdmlnYXRpb25CdXR0b25zICsgJy5wcmV2aW91cycpO1xuXG4gICAgICAgIG5leHQuc2V0QXR0cmlidXRlKCdkYXRhLW9yZGVyJywgc2VsZi5uZXh0U2xpZGVJZCk7XG4gICAgICAgIHByZXZpb3VzLnNldEF0dHJpYnV0ZSgnZGF0YS1vcmRlcicsIHNlbGYucHJldmlvdXNTbGlkZUlkKTtcblxuICAgICAgICBzZWxmLnJlc2V0QXV0b1NsaWRlcigpO1xuXG4gICAgICAgIC8vIG5leHQucXVlcnlTZWxlY3RvcigncCcpLmlubmVySFRNTCA9IHNlbGYuc2xpZGVzW3NlbGYubmV4dFNsaWRlSWRdLmRhdGFzZXQubmFtZTtcbiAgICAgICAgLy8gcHJldmlvdXMucXVlcnlTZWxlY3RvcigncCcpLmlubmVySFRNTCA9IHNlbGYuc2xpZGVzW3NlbGYucHJldmlvdXNTbGlkZUlkXS5kYXRhc2V0Lm5hbWU7XG4gICAgfTtcblxuICAgIHRoaXMuY2xpY2tEb3QgPSBmdW5jdGlvbiAoY2xpY2tlZERvdCkge1xuICAgICAgICBzZWxmLmFjdGl2ZVNsaWRlSWQgPSBwYXJzZUludChjbGlja2VkRG90LmdldEF0dHJpYnV0ZSgnZGF0YS1vcmRlcicpKTtcbiAgICAgICAgc2VsZi5zZXRTbGlkZSgpO1xuICAgICAgICBzZWxmLnJlc2V0QXV0b1NsaWRlcigpO1xuICAgIH07XG5cbiAgICB0aGlzLnNldEFjdGl2ZURvdCA9IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCBkb3RzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLnNldHRpbmdzLmRvdHMpO1xuICAgICAgICBjb25zdCBkb3RzTGVuZ3RoID0gZG90cy5sZW5ndGg7XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBkb3RzTGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgY29uc3QgZG90ID0gZG90c1tpXTtcbiAgICAgICAgICAgIGRvdE9yZGVyID0gcGFyc2VJbnQoZG90LmdldEF0dHJpYnV0ZSgnZGF0YS1vcmRlcicpKTtcblxuICAgICAgICAgICAgaWYoZG90T3JkZXIgIT09IHNlbGYuYWN0aXZlU2xpZGVJZCkge1xuICAgICAgICAgICAgICAgIGRvdC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICBkb3QudGFiSW5kZXggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZG90LmNsYXNzTGlzdC5hZGQoJ2lzLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIGRvdC50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn0iLCJ2YXIgc2NvcGUgPSAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwpIHx8XG4gICAgICAgICAgICAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZikgfHxcbiAgICAgICAgICAgIHdpbmRvdztcbnZhciBhcHBseSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtcblxuLy8gRE9NIEFQSXMsIGZvciBjb21wbGV0ZW5lc3NcblxuZXhwb3J0cy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldFRpbWVvdXQsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhclRpbWVvdXQpO1xufTtcbmV4cG9ydHMuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0SW50ZXJ2YWwsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhckludGVydmFsKTtcbn07XG5leHBvcnRzLmNsZWFyVGltZW91dCA9XG5leHBvcnRzLmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbih0aW1lb3V0KSB7XG4gIGlmICh0aW1lb3V0KSB7XG4gICAgdGltZW91dC5jbG9zZSgpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBUaW1lb3V0KGlkLCBjbGVhckZuKSB7XG4gIHRoaXMuX2lkID0gaWQ7XG4gIHRoaXMuX2NsZWFyRm4gPSBjbGVhckZuO1xufVxuVGltZW91dC5wcm90b3R5cGUudW5yZWYgPSBUaW1lb3V0LnByb3RvdHlwZS5yZWYgPSBmdW5jdGlvbigpIHt9O1xuVGltZW91dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY2xlYXJGbi5jYWxsKHNjb3BlLCB0aGlzLl9pZCk7XG59O1xuXG4vLyBEb2VzIG5vdCBzdGFydCB0aGUgdGltZSwganVzdCBzZXRzIHVwIHRoZSBtZW1iZXJzIG5lZWRlZC5cbmV4cG9ydHMuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSwgbXNlY3MpIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IG1zZWNzO1xufTtcblxuZXhwb3J0cy51bmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IC0xO1xufTtcblxuZXhwb3J0cy5fdW5yZWZBY3RpdmUgPSBleHBvcnRzLmFjdGl2ZSA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuXG4gIHZhciBtc2VjcyA9IGl0ZW0uX2lkbGVUaW1lb3V0O1xuICBpZiAobXNlY3MgPj0gMCkge1xuICAgIGl0ZW0uX2lkbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIG9uVGltZW91dCgpIHtcbiAgICAgIGlmIChpdGVtLl9vblRpbWVvdXQpXG4gICAgICAgIGl0ZW0uX29uVGltZW91dCgpO1xuICAgIH0sIG1zZWNzKTtcbiAgfVxufTtcblxuLy8gc2V0aW1tZWRpYXRlIGF0dGFjaGVzIGl0c2VsZiB0byB0aGUgZ2xvYmFsIG9iamVjdFxucmVxdWlyZShcInNldGltbWVkaWF0ZVwiKTtcbi8vIE9uIHNvbWUgZXhvdGljIGVudmlyb25tZW50cywgaXQncyBub3QgY2xlYXIgd2hpY2ggb2JqZWN0IGBzZXRpbW1lZGlhdGVgIHdhc1xuLy8gYWJsZSB0byBpbnN0YWxsIG9udG8uICBTZWFyY2ggZWFjaCBwb3NzaWJpbGl0eSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGVcbi8vIGBzZXRpbW1lZGlhdGVgIGxpYnJhcnkuXG5leHBvcnRzLnNldEltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5zZXRJbW1lZGlhdGUpO1xuZXhwb3J0cy5jbGVhckltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLmNsZWFySW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcyAmJiB0aGlzLmNsZWFySW1tZWRpYXRlKTtcbiIsIihmdW5jdGlvbiAoZ2xvYmFsLCB1bmRlZmluZWQpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgIGlmIChnbG9iYWwuc2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbmV4dEhhbmRsZSA9IDE7IC8vIFNwZWMgc2F5cyBncmVhdGVyIHRoYW4gemVyb1xuICAgIHZhciB0YXNrc0J5SGFuZGxlID0ge307XG4gICAgdmFyIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgIHZhciBkb2MgPSBnbG9iYWwuZG9jdW1lbnQ7XG4gICAgdmFyIHJlZ2lzdGVySW1tZWRpYXRlO1xuXG4gICAgZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGNhbGxiYWNrKSB7XG4gICAgICAvLyBDYWxsYmFjayBjYW4gZWl0aGVyIGJlIGEgZnVuY3Rpb24gb3IgYSBzdHJpbmdcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjYWxsYmFjayA9IG5ldyBGdW5jdGlvbihcIlwiICsgY2FsbGJhY2spO1xuICAgICAgfVxuICAgICAgLy8gQ29weSBmdW5jdGlvbiBhcmd1bWVudHNcbiAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDFdO1xuICAgICAgfVxuICAgICAgLy8gU3RvcmUgYW5kIHJlZ2lzdGVyIHRoZSB0YXNrXG4gICAgICB2YXIgdGFzayA9IHsgY2FsbGJhY2s6IGNhbGxiYWNrLCBhcmdzOiBhcmdzIH07XG4gICAgICB0YXNrc0J5SGFuZGxlW25leHRIYW5kbGVdID0gdGFzaztcbiAgICAgIHJlZ2lzdGVySW1tZWRpYXRlKG5leHRIYW5kbGUpO1xuICAgICAgcmV0dXJuIG5leHRIYW5kbGUrKztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShoYW5kbGUpIHtcbiAgICAgICAgZGVsZXRlIHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW4odGFzaykge1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSB0YXNrLmNhbGxiYWNrO1xuICAgICAgICB2YXIgYXJncyA9IHRhc2suYXJncztcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW5JZlByZXNlbnQoaGFuZGxlKSB7XG4gICAgICAgIC8vIEZyb20gdGhlIHNwZWM6IFwiV2FpdCB1bnRpbCBhbnkgaW52b2NhdGlvbnMgb2YgdGhpcyBhbGdvcml0aG0gc3RhcnRlZCBiZWZvcmUgdGhpcyBvbmUgaGF2ZSBjb21wbGV0ZWQuXCJcbiAgICAgICAgLy8gU28gaWYgd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgYSB0YXNrLCB3ZSdsbCBuZWVkIHRvIGRlbGF5IHRoaXMgaW52b2NhdGlvbi5cbiAgICAgICAgaWYgKGN1cnJlbnRseVJ1bm5pbmdBVGFzaykge1xuICAgICAgICAgICAgLy8gRGVsYXkgYnkgZG9pbmcgYSBzZXRUaW1lb3V0LiBzZXRJbW1lZGlhdGUgd2FzIHRyaWVkIGluc3RlYWQsIGJ1dCBpbiBGaXJlZm94IDcgaXQgZ2VuZXJhdGVkIGFcbiAgICAgICAgICAgIC8vIFwidG9vIG11Y2ggcmVjdXJzaW9uXCIgZXJyb3IuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgICAgICAgICAgaWYgKHRhc2spIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bih0YXNrKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckltbWVkaWF0ZShoYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkgeyBydW5JZlByZXNlbnQoaGFuZGxlKTsgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FuVXNlUG9zdE1lc3NhZ2UoKSB7XG4gICAgICAgIC8vIFRoZSB0ZXN0IGFnYWluc3QgYGltcG9ydFNjcmlwdHNgIHByZXZlbnRzIHRoaXMgaW1wbGVtZW50YXRpb24gZnJvbSBiZWluZyBpbnN0YWxsZWQgaW5zaWRlIGEgd2ViIHdvcmtlcixcbiAgICAgICAgLy8gd2hlcmUgYGdsb2JhbC5wb3N0TWVzc2FnZWAgbWVhbnMgc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50IGFuZCBjYW4ndCBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuXG4gICAgICAgIGlmIChnbG9iYWwucG9zdE1lc3NhZ2UgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgICAgICAgICB2YXIgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IHRydWU7XG4gICAgICAgICAgICB2YXIgb2xkT25NZXNzYWdlID0gZ2xvYmFsLm9ubWVzc2FnZTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gZmFsc2U7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKFwiXCIsIFwiKlwiKTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBvbGRPbk1lc3NhZ2U7XG4gICAgICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICAvLyBJbnN0YWxscyBhbiBldmVudCBoYW5kbGVyIG9uIGBnbG9iYWxgIGZvciB0aGUgYG1lc3NhZ2VgIGV2ZW50OiBzZWVcbiAgICAgICAgLy8gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9ET00vd2luZG93LnBvc3RNZXNzYWdlXG4gICAgICAgIC8vICogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvY29tbXMuaHRtbCNjcm9zc0RvY3VtZW50TWVzc2FnZXNcblxuICAgICAgICB2YXIgbWVzc2FnZVByZWZpeCA9IFwic2V0SW1tZWRpYXRlJFwiICsgTWF0aC5yYW5kb20oKSArIFwiJFwiO1xuICAgICAgICB2YXIgb25HbG9iYWxNZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5zb3VyY2UgPT09IGdsb2JhbCAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBldmVudC5kYXRhID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5pbmRleE9mKG1lc3NhZ2VQcmVmaXgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KCtldmVudC5kYXRhLnNsaWNlKG1lc3NhZ2VQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbG9iYWwuYXR0YWNoRXZlbnQoXCJvbm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UobWVzc2FnZVByZWZpeCArIGhhbmRsZSwgXCIqXCIpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlID0gZXZlbnQuZGF0YTtcbiAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGh0bWwgPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgPHNjcmlwdD4gZWxlbWVudDsgaXRzIHJlYWR5c3RhdGVjaGFuZ2UgZXZlbnQgd2lsbCBiZSBmaXJlZCBhc3luY2hyb25vdXNseSBvbmNlIGl0IGlzIGluc2VydGVkXG4gICAgICAgICAgICAvLyBpbnRvIHRoZSBkb2N1bWVudC4gRG8gc28sIHRodXMgcXVldWluZyB1cCB0aGUgdGFzay4gUmVtZW1iZXIgdG8gY2xlYW4gdXAgb25jZSBpdCdzIGJlZW4gY2FsbGVkLlxuICAgICAgICAgICAgdmFyIHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICAgICAgc2NyaXB0ID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBodG1sLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIElmIHN1cHBvcnRlZCwgd2Ugc2hvdWxkIGF0dGFjaCB0byB0aGUgcHJvdG90eXBlIG9mIGdsb2JhbCwgc2luY2UgdGhhdCBpcyB3aGVyZSBzZXRUaW1lb3V0IGV0IGFsLiBsaXZlLlxuICAgIHZhciBhdHRhY2hUbyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZ2xvYmFsKTtcbiAgICBhdHRhY2hUbyA9IGF0dGFjaFRvICYmIGF0dGFjaFRvLnNldFRpbWVvdXQgPyBhdHRhY2hUbyA6IGdsb2JhbDtcblxuICAgIC8vIERvbid0IGdldCBmb29sZWQgYnkgZS5nLiBicm93c2VyaWZ5IGVudmlyb25tZW50cy5cbiAgICBpZiAoe30udG9TdHJpbmcuY2FsbChnbG9iYWwucHJvY2VzcykgPT09IFwiW29iamVjdCBwcm9jZXNzXVwiKSB7XG4gICAgICAgIC8vIEZvciBOb2RlLmpzIGJlZm9yZSAwLjlcbiAgICAgICAgaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoY2FuVXNlUG9zdE1lc3NhZ2UoKSkge1xuICAgICAgICAvLyBGb3Igbm9uLUlFMTAgbW9kZXJuIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGdsb2JhbC5NZXNzYWdlQ2hhbm5lbCkge1xuICAgICAgICAvLyBGb3Igd2ViIHdvcmtlcnMsIHdoZXJlIHN1cHBvcnRlZFxuICAgICAgICBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChkb2MgJiYgXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIiBpbiBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSkge1xuICAgICAgICAvLyBGb3IgSUUgNuKAkzhcbiAgICAgICAgaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIG9sZGVyIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKTtcbiAgICB9XG5cbiAgICBhdHRhY2hUby5zZXRJbW1lZGlhdGUgPSBzZXRJbW1lZGlhdGU7XG4gICAgYXR0YWNoVG8uY2xlYXJJbW1lZGlhdGUgPSBjbGVhckltbWVkaWF0ZTtcbn0odHlwZW9mIHNlbGYgPT09IFwidW5kZWZpbmVkXCIgPyB0eXBlb2YgZ2xvYmFsID09PSBcInVuZGVmaW5lZFwiID8gdGhpcyA6IGdsb2JhbCA6IHNlbGYpKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obW9kdWxlKSB7XG5cdGlmICghbW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xuXHRcdG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9O1xuXHRcdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxuXHRcdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImxvYWRlZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5sO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiaWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUuaTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcblx0fVxuXHRyZXR1cm4gbW9kdWxlO1xufTtcbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgR29vZ2xlIE1hcHMgaGFuZGxlclxuICAgIC0gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvYWRkaW5nLWEtZ29vZ2xlLW1hcFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbmNvbnN0IE1hcHNIYW5kbGVyID0ge1xuXG4gICAgbWFwOiAnJyxcbiAgICBrZXk6ICdBSXphU3lDVkdQVW1SbVFSeFh2enpXdTNYeXU3N1hlYlF4US1mNFknLFxuICAgIGxvY2F0aW9uOiB7bGF0OiA1MS4yMTk4OTksIGxuZzogNS4yODM4ODF9LFxuICAgIHN0eWxpbmc6ICcnLFxuXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBHZXQgbWFwIGJ5IGlkXG4gICAgICAgIE1hcHNIYW5kbGVyLm1hcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qcy1nb29nbGUtbWFwJyk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgYSBtYXAgaXMgZGVmaW5lZFxuICAgICAgICBpZiAoaXNzZXQoTWFwc0hhbmRsZXIubWFwKSkge1xuXG4gICAgICAgICAgICBpZihNYXBzSGFuZGxlci5tYXAuaGFzQXR0cmlidXRlKCdkYXRhLWdvb2dsZS1sYXQnKSkgTWFwc0hhbmRsZXIubG9jYXRpb24ubGF0ID0gcGFyc2VGbG9hdChNYXBzSGFuZGxlci5tYXAuZ2V0QXR0cmlidXRlKCdkYXRhLWdvb2dsZS1sYXQnKSk7XG4gICAgICAgICAgICBpZihNYXBzSGFuZGxlci5tYXAuaGFzQXR0cmlidXRlKCdkYXRhLWdvb2dsZS1sbmcnKSkgTWFwc0hhbmRsZXIubG9jYXRpb24ubG5nID0gcGFyc2VGbG9hdChNYXBzSGFuZGxlci5tYXAuZ2V0QXR0cmlidXRlKCdkYXRhLWdvb2dsZS1sbmcnKSk7XG5cbiAgICAgICAgICAgIE1hcHNIYW5kbGVyLnNldEN1c3RvbVN0eWxpbmcoKTtcblxuICAgICAgICAgICAgLy8gU2VlIGlmIGdvb2dsZSB2YXJpYWJsZSBleGlzdHNcbiAgICAgICAgICAgIGlmICh0eXBlb2YoZ29vZ2xlKSA9PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YoZ29vZ2xlLm1hcHMpID09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgLy8gTG9hZCBleHRlcm5hbCBzY3JpcHRcbiAgICAgICAgICAgICAgICBnZXRTY3JpcHQoJ2h0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS9qcz9rZXk9JyArIE1hcHNIYW5kbGVyLmtleSwgTWFwc0hhbmRsZXIuZHJhd01hcCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIE1hcHNIYW5kbGVyLmRyYXdNYXAoKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZHJhd01hcDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBDcmVhdGUgYSBtYXBcbiAgICAgICAgbGV0IG1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoTWFwc0hhbmRsZXIubWFwLCB7XG4gICAgICAgICAgICB6b29tOiAxNCxcbiAgICAgICAgICAgIGNlbnRlcjogTWFwc0hhbmRsZXIubG9jYXRpb24sXG4gICAgICAgICAgICBkaXNhYmxlRGVmYXVsdFVJOiB0cnVlLFxuICAgICAgICAgICAgc3R5bGVzOiBNYXBzSGFuZGxlci5zdHlsaW5nXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjb250ZW50U3RyaW5nID0gJzxkaXY+PHA+UGxhbiBlZW4gcm91dGUgb3AgJytcbiAgICAgICAgICAgICc8YSB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL2Rpci8/YXBpPTEmZGVzdGluYXRpb249JyArIE1hcHNIYW5kbGVyLmxvY2F0aW9uLmxhdCArICcsJyArIE1hcHNIYW5kbGVyLmxvY2F0aW9uLmxuZyArJ1wiIGNsYXNzPVwibGlua1wiPicrXG4gICAgICAgICAgICAnZ29vZ2xlIG1hcHM8L2E+ICcrXG4gICAgICAgICAgICAnPC9wPjwvZGl2Pic7XG5cbiAgICAgICAgdmFyIGluZm93aW5kb3cgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7XG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50U3RyaW5nXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEFkZCBhIG1hcmtlclxuICAgICAgICBsZXQgbWFya2VyID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7XG4gICAgICAgICAgICBwb3NpdGlvbjogTWFwc0hhbmRsZXIubG9jYXRpb24sXG4gICAgICAgICAgICBtYXA6IG1hcCxcbiAgICAgICAgICAgIC8vIGxhYmVsOiAnQSdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbWFya2VyLmFkZExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaW5mb3dpbmRvdy5vcGVuKG1hcCwgbWFya2VyKTtcbiAgICAgICAgfSk7XG5cbiAgICB9LFxuXG4gICAgc2V0Q3VzdG9tU3R5bGluZzogZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIE1hcHNIYW5kbGVyLnN0eWxpbmcgPVxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJmZWF0dXJlVHlwZVwiOiBcIndhdGVyXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJnZW9tZXRyeVwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjZTllOWU5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaWdodG5lc3NcIjogMTdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwibGFuZHNjYXBlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJnZW9tZXRyeVwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjZjVmNWY1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaWdodG5lc3NcIjogMjBcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwicm9hZC5oaWdod2F5XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJnZW9tZXRyeS5maWxsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNmZmZmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpZ2h0bmVzc1wiOiAxN1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZmVhdHVyZVR5cGVcIjogXCJyb2FkLmhpZ2h3YXlcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImdlb21ldHJ5LnN0cm9rZVwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjZmZmZmZmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaWdodG5lc3NcIjogMjlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogMC4yXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJmZWF0dXJlVHlwZVwiOiBcInJvYWQuYXJ0ZXJpYWxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImdlb21ldHJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNmZmZmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpZ2h0bmVzc1wiOiAxOFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZmVhdHVyZVR5cGVcIjogXCJyb2FkLmxvY2FsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJnZW9tZXRyeVwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjZmZmZmZmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaWdodG5lc3NcIjogMTZcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwicG9pXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJnZW9tZXRyeVwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjZjVmNWY1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaWdodG5lc3NcIjogMjFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwicG9pLnBhcmtcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImdlb21ldHJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNkZWRlZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpZ2h0bmVzc1wiOiAyMVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJsYWJlbHMudGV4dC5zdHJva2VcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZpc2liaWxpdHlcIjogXCJvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjZmZmZmZmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaWdodG5lc3NcIjogMTZcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwibGFiZWxzLnRleHQuZmlsbFwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2F0dXJhdGlvblwiOiAzNlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiIzMzMzMzM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlnaHRuZXNzXCI6IDQwXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImxhYmVscy5pY29uXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aXNpYmlsaXR5XCI6IFwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwidHJhbnNpdFwiLFxuICAgICAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwiZ2VvbWV0cnlcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiI2YyZjJmMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlnaHRuZXNzXCI6IDE5XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJmZWF0dXJlVHlwZVwiOiBcImFkbWluaXN0cmF0aXZlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJnZW9tZXRyeS5maWxsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNmZWZlZmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpZ2h0bmVzc1wiOiAyMFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZmVhdHVyZVR5cGVcIjogXCJhZG1pbmlzdHJhdGl2ZVwiLFxuICAgICAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwiZ2VvbWV0cnkuc3Ryb2tlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNmZWZlZmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpZ2h0bmVzc1wiOiAxN1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIndlaWdodFwiOiAxLjJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF07XG5cbiAgICB9XG59O1xuXG5NYXBzSGFuZGxlci5pbml0KCk7IiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiB8IFByZXZlbnQgQm90cyBoYW5kbGVyXG4gfFxuIHwgV2UgbmFtZWQgdGhpcyBjaG9jb2xhdGUgZmFjdG9yeSBhbmQgYmVsb25naW5nIGNvbmZ1c2luZyBqcyBob29rc1xuIHwgdG8gcHJldmVudCBzbWFydCBib3RzIGZyb20gYmxvY2tpbmcgdGhlc2UgdmFyaWFibGUgb3IgZnVuY3Rpb25zLlxuIHxcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5jb25zdCBDaG9jb2xhdGVGYWN0b3J5ID0ge1xuXG4gICAgYmFubmVkVmlzaXRvcjogW10sXG5cbiAgICAvKiogR2V0IGFsbCB0aGUgY2hvY29sYXRlIGZhY3RvcnkgYW5kIHN0YXJ0XG4gICAgICogIExvb3BpbmcgdGhyb3VnaCB0aG9zZSBzdGFydCBmbGFzaGluZyB0aWNrZXRzXG4gICAgICovXG4gICAgZW50ZXI6IGZ1bmN0aW9uKClcbiAgICB7XG5cbiAgICAgICAgY29uc3QgY2hvY29sYXRlRmFjdG9yaWVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmpzLWNob2NvbGF0ZS1mYWN0b3J5Jyk7XG5cbiAgICAgICAgaWYoaXNzZXQoY2hvY29sYXRlRmFjdG9yaWVzKSl7XG5cbiAgICAgICAgICAgIGNvbnN0IGFtb3VudE9mQ2hvY29sYXRlRmFjdG9yaWVzID0gY2hvY29sYXRlRmFjdG9yaWVzLmxlbmd0aDtcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBhbW91bnRPZkNob2NvbGF0ZUZhY3RvcmllczsgaSsrKXtcblxuICAgICAgICAgICAgICAgIGNvbnN0IENob2NvbGF0ZUJhciA9IGNob2NvbGF0ZUZhY3Rvcmllc1tpXTtcbiAgICAgICAgICAgICAgICBDaG9jb2xhdGVGYWN0b3J5Ll9mbGFzaFRpY2tldChDaG9jb2xhdGVCYXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIElmIGZhY3RvcnkgaGFzIGEgZ29sZGVuIHRpY2tldFxuICAgICAqIFRoZW4gd2UgY2FuIG1ha2UgdGhlbSBnbyBvbiB0aGUgdG91ciBpZiB0aGVyZSBoYXMgYmVlbiBjbGljayBvbiB0aGUgdGlja2V0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2hvY29sYXRlQmFyXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfZmxhc2hUaWNrZXQ6IGZ1bmN0aW9uIChjaG9jb2xhdGVCYXIpIHtcblxuICAgICAgICAvLyBUcnkgZ2V0IHRoZSB0aWNrZXQgZnJvbSB0aGUgY2hvY29sYXRlQmFyXG4gICAgICAgIGNvbnN0IGdvbGRlblRpY2tldCA9IGNob2NvbGF0ZUJhci5xdWVyeVNlbGVjdG9yKCcuanMtZ29sZGVuLXRpY2tldCcpO1xuXG4gICAgICAgIC8vIE9ubHkgY29udGludWUgaWYgY2hvY29sYXRlIGJhciBoYXMgYSBnb2xkZW4gdGlja2V0XG4gICAgICAgIGlmKGlzc2V0KGdvbGRlblRpY2tldCkpe1xuXG4gICAgICAgICAgICBnb2xkZW5UaWNrZXQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgQ2hvY29sYXRlRmFjdG9yeS5lbmpveVRoZVRvdXIoY2hvY29sYXRlQmFyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnVG8gYmFkLCBubyBnb2xkZW4gdGlja2V0cyBoYXMgYmVlbiBmb3VuZC4nKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTdGFydCB0aGUgdG91ciB0aHJvdWdoIHRoZSBmYWN0b3J5XG4gICAgICogQW5kIGdldCB0aGUgbmFtZXMgYW5kIHByb3BlcnRpZXMgb2YgdGhlIG1lbWJlcnMgb2YgdGhlIGdyb3VwXG4gICAgICogSWYgdGhlcmUgYXJlIG1lbWJlcnMgaW4gdGhlIGdyb3VwIG9mIGNvdXJzZVxuICAgICAqXG4gICAgICogQHBhcmFtIGNob2NvbGF0ZUZhY3RvcnlcbiAgICAgKi9cbiAgICBlbmpveVRoZVRvdXIoY2hvY29sYXRlRmFjdG9yeSl7XG5cbiAgICAgICAgLy8gQXNrIGZvciB0aGUgdG91ciBncm91cFxuICAgICAgICBjb25zdCB0b3VyR3JvdXAgPSBjaG9jb2xhdGVGYWN0b3J5LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LCB0ZXh0YXJlYScpO1xuXG4gICAgICAgIGlmKGlzc2V0KHRvdXJHcm91cCkpe1xuXG4gICAgICAgICAgICAvLyBGb3IgZWFjaCB2aXNpdG9yIHdlIHdhbnQgYSBiZWxvbmdpbmcgT29tcGEgTG9vbXBhXG4gICAgICAgICAgICBsZXQgb29tcGFMb29tcGFzID0ge307XG4gICAgICAgICAgICBsZXQgYW1vdW50T2ZPb21wYUxvb21wYXMgPSAwO1xuXG4gICAgICAgICAgICBjb25zdCB0b3VyR3JvdXBTaXplID0gdG91ckdyb3VwLmxlbmd0aDtcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0b3VyR3JvdXBTaXplOyBpKyspe1xuXG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSB2aXNpdG9yIGZyb20gdGhlIGdyb3VwXG4gICAgICAgICAgICAgICAgY29uc3QgdmlzaXRvciA9IHRvdXJHcm91cFtpXTtcblxuICAgICAgICAgICAgICAgIC8vIEFzayBmb3IgaXRzIG5hbWVcbiAgICAgICAgICAgICAgICBjb25zdCB2aXNpdG9yTmFtZSA9IHZpc2l0b3IuZ2V0QXR0cmlidXRlKCduYW1lJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgdmlzaXRvciBpcyBiYW5uZWRcbiAgICAgICAgICAgICAgICBpZiggQ2hvY29sYXRlRmFjdG9yeS5faXNWaXNpdG9yQmFubmVkKHZpc2l0b3JOYW1lKSkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICBvb21wYUxvb21wYXNbIHZpc2l0b3JOYW1lIF0gPSBDaG9jb2xhdGVGYWN0b3J5Ll9nZXRBcnJhbmdlbWVudCh2aXNpdG9yKTtcbiAgICAgICAgICAgICAgICBhbW91bnRPZk9vbXBhTG9vbXBhcysrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgaW5zdXJhbmNlIHRoYXQgdGhlcmUgYXJlIG9vbXBhIGxvb21wYXNcbiAgICAgICAgICAgIGlmKGFtb3VudE9mT29tcGFMb29tcGFzID09PSAwKSByZXR1cm47XG5cbiAgICAgICAgICAgIC8vIFNlbmQgc3VibWl0IHJlcXVlc3RcbiAgICAgICAgICAgIENob2NvbGF0ZUZhY3RvcnkuX2ZpbmlzaFRvdXIob29tcGFMb29tcGFzLCBjaG9jb2xhdGVGYWN0b3J5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RvIGJhZCwgbm8gbWVtYmVycyB0byB2aXNpdCB0aGlzIGZhY3RvcnknKVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSB2aXNpdG9yIG5hbWUgaXNuJ3QgYWxsb3dcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2aXNpdG9yTmFtZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2lzVmlzaXRvckJhbm5lZDogZnVuY3Rpb24odmlzaXRvck5hbWUpe1xuICAgICAgICBpZihDaG9jb2xhdGVGYWN0b3J5LmJhbm5lZFZpc2l0b3IuaW5kZXhPZih2aXNpdG9yTmFtZSkgIT09IC0xKXtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTW9zdCBnZXQgdmlzaXRvciBoYXZlIGEgbm9ybWFsIGFycmFuZ2VtZW50XG4gICAgICogQnV0IHNvbWV0aW1lcyB0aGVyZSBhcmUgc3BlY2lhbCBjYXNlc1xuICAgICAqIExpa2UgYSBTZWxlY3RvciBvciBjaGVja2JveFxuICAgICAqXG4gICAgICogQHBhcmFtIHZpc2l0b3JcbiAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9nZXRBcnJhbmdlbWVudDogZnVuY3Rpb24odmlzaXRvcilcbiAgICB7XG5cbiAgICAgICAgY29uc3QgdmlzaXRvclR5cGUgPSB2aXNpdG9yLm5vZGVOYW1lO1xuXG4gICAgICAgIHN3aXRjaCAodmlzaXRvclR5cGUpIHtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZpc2l0b3IudmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRmluaXNoIHRoZSB0b3VyXG4gICAgICogSWYgc3VjY2Vzc2Z1bCBzaG93IHRoYW5rcyBtZXNzYWdlXG4gICAgICogT3Igc2hvdyBkZWZpbmVkIGVycm9yIG1lc3NhZ2Ugb3IgZmFsbGJhY2tcbiAgICAgKlxuICAgICAqIEBwYXJhbSBncm91cFxuICAgICAqIEBwYXJhbSBjaG9jb2xhdGVGYWN0b3J5XG4gICAgICogQHJldHVybnMgeyp8dm9pZH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9maW5pc2hUb3VyOiBmdW5jdGlvbihncm91cCwgY2hvY29sYXRlRmFjdG9yeSlcbiAgICB7XG4gICAgICAgIC8vIEFkZCB3aWxsaWUgdG8gdGhlIGdyb3VwXG4gICAgICAgIGdyb3VwID0gQ2hvY29sYXRlRmFjdG9yeS5fYWRkV2lsbGllV29ua2EoZ3JvdXApO1xuXG4gICAgICAgIC8vIEdldCB0aGUgZ2F0ZSBmb3IgZmluaXNoIHRoZSB0b3VyXG4gICAgICAgIGNvbnN0IGdhdGUgPSAnL2NvbnRhY3QvcHJvY2Vzcyc7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIEFqYXgucG9zdChnYXRlLCBncm91cCwgZnVuY3Rpb24gKEh0dHBSZXF1ZXN0KSB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoSHR0cFJlcXVlc3QucmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChIdHRwUmVxdWVzdC5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyMDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ2hvY29sYXRlRmFjdG9yeS5fdGhhbmtzRm9yVmlzaXRpbmcocmVzcG9uc2UucmVkaXJlY3RVcmwpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQyMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDaG9jb2xhdGVGYWN0b3J5Ll9naXZlRmVlZGJhY2tUb01lbWJlcnMocmVzcG9uc2UuZXJyb3JzLCBjaG9jb2xhdGVGYWN0b3J5KTtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBDaG9jb2xhdGVGYWN0b3J5Ll91bmtub3duR2FwSW5GYWN0b3J5KGNob2NvbGF0ZUZhY3RvcnkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBDaG9jb2xhdGVGYWN0b3J5Ll91bmtub3duR2FwSW5GYWN0b3J5KGNob2NvbGF0ZUZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFkZCB3aWxsaWUgd29ua2EgdG8gdGhlIGdyb3VwXG4gICAgICogUHMuLi4gaXQgYWN0dWFsbHkgdGhlIHNlY3JldCBjb2RlIVxuICAgICAqXG4gICAgICogQHBhcmFtIGdyb3VwXG4gICAgICogQHJldHVybnMgeyp9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfYWRkV2lsbGllV29ua2E6IGZ1bmN0aW9uKGdyb3VwKXtcbiAgICAgICAgZ3JvdXAuX3dpbGxpZSA9ICd3b25rYSc7XG4gICAgICAgIHJldHVybiBncm91cDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWRkIHRoZSBmZWVkYmFjayB0byB0aGUgZGVzaXJlZCBhcmVhLlxuICAgICAqIE1vc3QgbGlrZWx5IHRvIHRoZSB2aXNpdG9yIGRpcmVjdGx5LCBidXQgc29tZXRpbWUgdG8gdGhlIGZhY3RvcnkgZGVzaXJlZCBmZWVkYmFjayBhcmVhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXJyb3JzXG4gICAgICogQHBhcmFtIGNob2NvbGF0ZUZhY3RvcnlcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9naXZlRmVlZGJhY2tUb01lbWJlcnM6IGZ1bmN0aW9uKGVycm9ycywgY2hvY29sYXRlRmFjdG9yeSl7XG5cbiAgICAgICAgLy8gR3JhYiB0aGUgZmFjdG9yeSBmZWVkYmFjayBhcmVhXG4gICAgICAgIGNvbnN0IGZlZWRiYWNrQXJlYSA9IGNob2NvbGF0ZUZhY3RvcnkucXVlcnlTZWxlY3RvcignLmpzLWVycm9yLWFyZWEnKTtcblxuICAgICAgICAvLyBDbGVhciB0aGUgY3VycmVudCBodG1sXG4gICAgICAgIGlmKGlzc2V0KGZlZWRiYWNrQXJlYSkpIGZlZWRiYWNrQXJlYS5pbm5lckhUTUwgPSAnJztcblxuICAgICAgICAvLyBDbGVhciB0aGUgcHJldmlvdXMgbWFya2VkIGphY2tldHNcbiAgICAgICAgQ2hvY29sYXRlRmFjdG9yeS5fY2xlYXJQcmV2aW91c01hcmtlZEphY2tldHMoY2hvY29sYXRlRmFjdG9yeSk7XG5cbiAgICAgICAgT2JqZWN0LmtleXMoZXJyb3JzKS5mb3JFYWNoKGZ1bmN0aW9uKHZpc2l0b3IpIHtcblxuICAgICAgICAgICAgbGV0IGphY2tldCA9IG51bGw7XG4gICAgICAgICAgICBsZXQgdmlzaXRvckZlZWRiYWNrQXJlYSA9IG51bGw7XG5cbiAgICAgICAgICAgIC8vIEhvbmV5IGVsZW1lbnRzIGRvZXNuJ3QgaGFzIGEgYWNjZXNzaWJsZSBlbGVtZW50XG4gICAgICAgICAgICBpZih2aXNpdG9yICE9PSAnX2hvbmV5JyAmJiB2aXNpdG9yICE9PSAnX3NlY3JldENvZGUnKSB7XG5cbiAgICAgICAgICAgICAgICAvLyBHcmFiIHRoZSB2aXNpdG9yXG4gICAgICAgICAgICAgICAgY29uc3QgdmlzaXRvck5vZGUgPSBjaG9jb2xhdGVGYWN0b3J5LnF1ZXJ5U2VsZWN0b3IoJyMnICsgdmlzaXRvcik7XG5cbiAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBqYWNrZXQgb2YgYSB2aXNpdG9yXG4gICAgICAgICAgICAgICAgamFja2V0ID0gQ2hvY29sYXRlRmFjdG9yeS5fZ3JhYlZpc2l0b3JKYWNrZXQodmlzaXRvck5vZGUpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgZm91bmQgZ2V0IHRoZSBkZXNpcmVkIGFyZWFcbiAgICAgICAgICAgICAgICBpZihpc3NldChqYWNrZXQpKSB2aXNpdG9yRmVlZGJhY2tBcmVhID0gamFja2V0LnF1ZXJ5U2VsZWN0b3IoJy5qcy1mb3JtLWdyb3VwLWVycm9yJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBDbGVhciB0aGUgY3VycmVudCBodG1sXG4gICAgICAgICAgICAgICAgaWYoaXNzZXQodmlzaXRvckZlZWRiYWNrQXJlYSkpIHZpc2l0b3JGZWVkYmFja0FyZWEuaW5uZXJIVE1MID0gJyc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IHRoZSBmZWVkYmFjayBmb3IgdGhpcyB2aXNpdG9yXG4gICAgICAgICAgICBjb25zdCB2aXNpdG9yRmVlZGJhY2sgPSBlcnJvcnNbdmlzaXRvcl07XG5cbiAgICAgICAgICAgIC8vIFNwaXQgb3V0IGVhY2ggbGluZVxuICAgICAgICAgICAgY29uc3QgdmlzaXRvckZlZWRiYWNrQW1vdW50ID0gdmlzaXRvckZlZWRiYWNrLmxlbmd0aDtcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB2aXNpdG9yRmVlZGJhY2tBbW91bnQ7IGkrKyl7XG4gICAgICAgICAgICAgICAgY29uc3QgdmlzaXRvckZlZWRiYWNrTGluZSA9IHZpc2l0b3JGZWVkYmFja1tpXTtcblxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHZpc2l0b3IsIHZpc2l0b3JGZWVkYmFja0xpbmUpO1xuXG4gICAgICAgICAgICAgICAgLy8gSG9uZXkgZWxlbWVudHMgZG9lc24ndCBoYXMgYSBhY2Nlc3NpYmxlIGVsZW1lbnQgYXJlYVxuICAgICAgICAgICAgICAgIGlmKHZpc2l0b3IgIT09ICdfaG9uZXknICYmIHZpc2l0b3IgIT09ICdfc2VjcmV0Q29kZScpIHtcblxuICAgICAgICAgICAgICAgICAgICAvLyBNYXJrIHRoZSBqYWNrZXRcbiAgICAgICAgICAgICAgICAgICAgaWYoaXNzZXQoamFja2V0KSkgamFja2V0LmNsYXNzTGlzdC5hZGQoJ2hhcy1lcnJvcicpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCBmZWVkYmFjayB0byB2aXNpdG9yIGZlZWRiYWNrIGFyZWEgaWYgZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICBpZihpc3NldCh2aXNpdG9yRmVlZGJhY2tBcmVhKSAmJiB2aXNpdG9yRmVlZGJhY2tMaW5lLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50RmVlZGJhY2tBcmVhID0gdmlzaXRvckZlZWRiYWNrQXJlYS5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmVlZGJhY2tBcmVhICs9ICc8c3Bhbj4nICsgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHZpc2l0b3JGZWVkYmFja0xpbmUpICsgJzwvc3Bhbj4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvckZlZWRiYWNrQXJlYS5pbm5lckhUTUwgPSBjdXJyZW50RmVlZGJhY2tBcmVhO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQXBwZW5kIGZlZWRiYWNrIHRvIGZhY3RvcnkgZmVlZGJhY2sgYXJlYSBpZiBkZWZpbmVkXG4gICAgICAgICAgICAgICAgaWYoaXNzZXQoZmVlZGJhY2tBcmVhKSAmJiB2aXNpdG9yRmVlZGJhY2tMaW5lLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudEZlZWRiYWNrQXJlYSA9IGZlZWRiYWNrQXJlYS5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGZWVkYmFja0FyZWEgKz0gJzxsaT4nICsgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHZpc2l0b3JGZWVkYmFja0xpbmUpICsgJzwvbGk+JztcbiAgICAgICAgICAgICAgICAgICAgZmVlZGJhY2tBcmVhLmlubmVySFRNTCA9IGN1cnJlbnRGZWVkYmFja0FyZWE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgdGhlIHByZXZpb3VzIG1hcmtlZCBqYWNrZXRzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2hvY29sYXRlRmFjdG9yeVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2NsZWFyUHJldmlvdXNNYXJrZWRKYWNrZXRzKGNob2NvbGF0ZUZhY3RvcnkpIHtcblxuICAgICAgICBjb25zdCBtYXJrZWRKYWNrZXRzID0gY2hvY29sYXRlRmFjdG9yeS5xdWVyeVNlbGVjdG9yQWxsKCcuaGFzLWVycm9yJyk7XG4gICAgICAgIGNvbnN0IG1hcmtlZEphY2tldHNBbW91bnQgPSBtYXJrZWRKYWNrZXRzLmxlbmd0aDtcblxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbWFya2VkSmFja2V0c0Ftb3VudDsgaSsrKXtcbiAgICAgICAgICAgIG1hcmtlZEphY2tldHNbaV0uY2xhc3NMaXN0LnJlbW92ZSgnaGFzLWVycm9yJyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR3JhYiB0aGUgamFja2V0IG9mIHRoZSB2aXNpdG9yXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmlzaXRvclxuICAgICAqIEByZXR1cm5zIHtudWxsfCp8KCgpID0+IChOb2RlIHwgbnVsbCkpfEFjdGl2ZVguSVhNTERPTU5vZGV8KE5vZGUgJiBQYXJlbnROb2RlKX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9ncmFiVmlzaXRvckphY2tldDogZnVuY3Rpb24odmlzaXRvcil7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdmlzaXRvciBpcyBkZWZpbmVkXG4gICAgICAgIGlmICghaXNzZXQodmlzaXRvcikpIHJldHVybiBudWxsO1xuXG4gICAgICAgIC8vIERvIGxvb3Agc2V0dGluZ3NcbiAgICAgICAgY3VycmVudExheWVyID0gdmlzaXRvcjtcbiAgICAgICAgc2FmZXR5QnJlYWsgPSAwO1xuXG4gICAgICAgIC8vIEdyYWIgdGhlIG5leHQgbGF5ZXIgdGlsbCBpdCBpcyB0aGUgamFja2V0IChvciBzYWZldHlCcmVhayBoYXMgYmVlbiByZWFjaGVkXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHNhZmV0eUJyZWFrKys7XG4gICAgICAgICAgICBjdXJyZW50TGF5ZXIgPSBjdXJyZW50TGF5ZXIucGFyZW50Tm9kZTtcbiAgICAgICAgICAgIGlmKGN1cnJlbnRMYXllci5jbGFzc0xpc3QuY29udGFpbnMoJ2pzLWZvcm0tZ3JvdXAnKSkgcmV0dXJuIGN1cnJlbnRMYXllcjtcbiAgICAgICAgfSB3aGlsZSAoY3VycmVudExheWVyLnRhZ05hbWUgIT09ICdCT0RZJyAmJiBzYWZldHlCcmVhayA8PSAxMCk7XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlZGlyZWN0IHRoZSB2aXNpdG9yIHRvIHRoZSB0aGFua3MgcGFnZVxuICAgICAqXG4gICAgICogQHBhcmFtIG5leHRTdG9wXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdGhhbmtzRm9yVmlzaXRpbmc6IGZ1bmN0aW9uIChuZXh0U3RvcCkge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24gPSBuZXh0U3RvcDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVW5rbm93biBlcnJvciBvY2N1cnJlZCwgbG9nIHRoZSBlcnJvclxuICAgICAqXG4gICAgICogQHBhcmFtIGNob2NvbGF0ZUZhY3RvcnlcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF91bmtub3duR2FwSW5GYWN0b3J5OiBmdW5jdGlvbiAoY2hvY29sYXRlRmFjdG9yeSkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaG9jb2xhdGVGYWN0b3J5KTtcbiAgICAgICAgY29uc29sZS5sb2coJ0Nob2NvbGF0ZUZhY3Rvcnk6IFVua293biBFcnJvcicpO1xuICAgIH0sXG59O1xuXG5DaG9jb2xhdGVGYWN0b3J5LmVudGVyKCk7IiwiLyoqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiAgRGVwZW5kZW5jaWVzXG4gKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG5cbi8qKlxuICogRXh0ZXJuYWxcbiAqL1xucmVxdWlyZSgnaGFtbWVyanMnKTtcbnJlcXVpcmUoJ29iamVjdEZpdFBvbHlmaWxsJyk7XG5cbi8qKlxuICogR2xvYmFsIC8gU2hhcmVkIHdpdGggS01TXG4gKi9cbnJlcXVpcmUoJy4vLi4vZ2xvYmFsL3BvbHlmaWxscy9ldmVudFBvbHlGaWxsJyk7XG5yZXF1aXJlKCcuLy4uL2dsb2JhbC9wb2x5ZmlsbHMvaXNJbnRlZ2VyJyk7XG5yZXF1aXJlKCcuLy4uL2dsb2JhbC9wb2x5ZmlsbHMvcHJvbWlzZScpO1xucmVxdWlyZSgnLi8uLi9nbG9iYWwvcG9seWZpbGxzL3N5bWJvbC1lczYubWluJyk7XG5cblxuLyoqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiAgR2xvYmFsIGZ1bmN0aW9uYWxpdGllc1xuICogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5yZXF1aXJlKCcuL2dsb2JhbC9oZWxwZXJzJyk7IC8vIFNob3VsZCBiZSBmaXJzdFxucmVxdWlyZSgnLi9nbG9iYWwvYnJvd3NlckhhbmRsZXInKTtcbi8vIHJlcXVpcmUoJy4vZ2xvYmFsL3BhZ2V0cmFuc2l0aW9uSGFuZGxlcicpO1xuLy8gcmVxdWlyZSgnLi9nbG9iYWwvcmVzaXplSGFuZGxlcicpO1xucmVxdWlyZSgnLi9nbG9iYWwvc2Nyb2xsSGFuZGxlcicpO1xuXG5cbi8qKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogIENvbXBvbmVudCBmdW5jdGlvbmFsaXRpZXNcbiAqICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxucmVxdWlyZSgnLi9jb21wb25lbnRzL2Nob2NvbGF0ZUZhY3RvcnknKTtcbnJlcXVpcmUoJy4vY29tcG9uZW50cy9jb29raWVIYW5kbGVyJyk7XG4vLyByZXF1aXJlKCcuL2NvbXBvbmVudHMvSW5wdXRIYW5kbGVyJyk7XG5yZXF1aXJlKCcuL2NvbXBvbmVudHMvbWFwc0hhbmRsZXInKTtcbnJlcXVpcmUoJy4vY29tcG9uZW50cy9vdmVybGF5TWVudUhhbmRsZXInKTtcbnJlcXVpcmUoJy4vY29tcG9uZW50cy9zbGlkZXJIYW5kbGVyJyk7XG5yZXF1aXJlKCcuL2NvbXBvbmVudHMvc2Nyb2xsVG9IYW5kbGVyJyk7XG4vLyByZXF1aXJlKCcuL2NvbXBvbmVudHMvc2VhcmNoSGFuZGxlcicpO1xuLy8gcmVxdWlyZSgnLi9jb21wb25lbnRzL3NoYXJlQnV0dG9uc0hhbmRsZXInKTtcbnJlcXVpcmUoJy4vY29tcG9uZW50cy95b3V0dWJlSGFuZGxlcicpO1xuXG4vKiogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqICBTaG9wIENvbXBvbmVudCBmdW5jdGlvbmFsaXRpZXNcbiAqICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuLy8gcmVxdWlyZSgnLi8uLi9zaG9wL2NvbXBvbmVudHMvc2hvcHBpbmdjYXJ0SGFuZGxlcicpOyIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBCcm93c2VyIEhhbmRsZXJcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5jb25zdCBCcm93c2VySGFuZGxlciA9IHtcblxuICAgIHVzZXJBZ2VudDogJycsXG4gICAgYnJvd3NlckluZm86ICcnLFxuXG5cbiAgICBpbml0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIEJyb3dzZXJIYW5kbGVyLnVzZXJBZ2VudCA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuICAgICAgICBCcm93c2VySGFuZGxlci5icm93c2VySW5mbyA9IEJyb3dzZXJIYW5kbGVyLmdldEJyb3dzZXJJbmZvKCk7XG4gICAgICAgIEJyb3dzZXJIYW5kbGVyLmhhbmRsZUlFKCk7XG4gICAgICAgIEJyb3dzZXJIYW5kbGVyLmhhbmRsZVNhZmFyaSgpO1xuICAgIH0sXG5cbiAgICBoYW5kbGVJRTogZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIC8vIERldGVjdCB2ZXJzaW9ucyBiZWxvdyBpZTExXG4gICAgICAgIGxldCBtc2llID0gQnJvd3NlckhhbmRsZXIudXNlckFnZW50LmluZGV4T2YoJ01TSUUgJyk7XG4gICAgICAgIGNvbnN0IGllbHQxMSA9IG1zaWUgPiAwO1xuXG4gICAgICAgIC8vIERldGVjdCBpZTExXG4gICAgICAgIGNvbnN0IGllMTEgPSAhIW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1RyaWRlbnQuKnJ2XFw6MTFcXC4vKTtcblxuICAgICAgICAvLyBJZiBJbnRlcm5ldCBFeHBsb3JlclxuICAgICAgICBpZiAoaWVsdDExIHx8IGllMTEpIHtcbiAgICAgICAgICAgIC8vIERlZmF1bHQgdmVyc2lvblxuICAgICAgICAgICAgbGV0IHZlcnNpb24gPSAnMTEnO1xuXG4gICAgICAgICAgICAvLyBXYXkgdG8gZGV0ZWN0IHZlcnNpb24gPCAxMVxuICAgICAgICAgICAgaWYgKGllbHQxMSkgdmVyc2lvbiA9IHBhcnNlSW50KEJyb3dzZXJIYW5kbGVyLnVzZXJBZ2VudC5zdWJzdHJpbmcoXG4gICAgICAgICAgICAgICAgbXNpZSArIDUsXG4gICAgICAgICAgICAgICAgQnJvd3NlckhhbmRsZXIudXNlckFnZW50LmluZGV4T2YoXCIuXCIsIG1zaWUpXG4gICAgICAgICAgICApKTtcblxuICAgICAgICAgICAgLy8gQXBwZW5kIGNsYXNzZXMgdG8gSFRNTCAod2UgaGF2ZSB0byBkbyB0aGlzIHNlcGFyYXRlbHkgYmVjYXVzZSBlbHNlIGllIHdpbGwgZmFpbClcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnaWUnKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgndicrdmVyc2lvbik7XG4gICAgICAgIH1cblxuICAgIH0sXG5cbiAgICAvLyBGYWxsYmFjayBmb3Igb2xkZXIgc2FmYXJpIHZlcnNpb25cbiAgICBoYW5kbGVTYWZhcmk6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpZihCcm93c2VySGFuZGxlci5icm93c2VySW5mby5uYW1lID09PSAnU2FmYXJpJyAmJiBCcm93c2VySGFuZGxlci5icm93c2VySW5mby52ZXJzaW9uIDw9IDEwKXtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdodG1sJylbMF0uY2xhc3NMaXN0LmFkZCgnaWUnKTtcbiAgICAgICAgfVxuXG4gICAgfSxcblxuICAgIGdldEJyb3dzZXJJbmZvOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCB1YT1uYXZpZ2F0b3IudXNlckFnZW50LHRlbSxNPXVhLm1hdGNoKC8ob3BlcmF8Y2hyb21lfHNhZmFyaXxmaXJlZm94fG1zaWV8dHJpZGVudCg/PVxcLykpXFwvP1xccyooXFxkKykvaSkgfHwgW107XG4gICAgICAgIGlmKC90cmlkZW50L2kudGVzdChNWzFdKSl7XG4gICAgICAgICAgICB0ZW09L1xcYnJ2WyA6XSsoXFxkKykvZy5leGVjKHVhKSB8fCBbXTtcbiAgICAgICAgICAgIHJldHVybiB7bmFtZTonSUUgJyx2ZXJzaW9uOih0ZW1bMV18fCcnKX07XG4gICAgICAgIH1cbiAgICAgICAgaWYoTVsxXT09PSdDaHJvbWUnKXtcbiAgICAgICAgICAgIHRlbT11YS5tYXRjaCgvXFxiT1BSXFwvKFxcZCspLylcbiAgICAgICAgICAgIGlmKHRlbSE9bnVsbCkgICB7cmV0dXJuIHtuYW1lOidPcGVyYScsIHZlcnNpb246dGVtWzFdfTt9XG4gICAgICAgIH1cbiAgICAgICAgTT1NWzJdPyBbTVsxXSwgTVsyXV06IFtuYXZpZ2F0b3IuYXBwTmFtZSwgbmF2aWdhdG9yLmFwcFZlcnNpb24sICctPyddO1xuICAgICAgICBpZigodGVtPXVhLm1hdGNoKC92ZXJzaW9uXFwvKFxcZCspL2kpKSE9bnVsbCkge00uc3BsaWNlKDEsMSx0ZW1bMV0pO31cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IE1bMF0sXG4gICAgICAgICAgICB2ZXJzaW9uOiBNWzFdXG4gICAgICAgIH07XG4gICAgfVxufTtcblxuQnJvd3NlckhhbmRsZXIuaW5pdCgpOyIsIiFmdW5jdGlvbihnbG9iYWwsZmFjdG9yeSl7XCJ1c2Ugc3RyaWN0XCI7XCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWZhY3RvcnkoZ2xvYmFsKTpmYWN0b3J5KGdsb2JhbCl9KFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Omdsb2JhbCxmdW5jdGlvbihnbG9iYWwpe1widXNlIHN0cmljdFwiO3ZhciBkZWZpbmVQcm9wZXJ0eT1PYmplY3QuZGVmaW5lUHJvcGVydHksZGVmaW5lUHJvcGVydGllcz1PYmplY3QuZGVmaW5lUHJvcGVydGllcyxzeW1ib2xIaWRkZW5Db3VudGVyPTAsZ2xvYmFsU3ltYm9sUmVnaXN0cnk9W10sc2xpY2U9QXJyYXkucHJvdG90eXBlLnNsaWNlLEVTNj1cIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsLkVTNj9nbG9iYWwuRVM2Omdsb2JhbC5FUzY9e30saXNBcnJheT1BcnJheS5pc0FycmF5LG9iamVjdFRvU3RyaW5nPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcscHVzaD1BcnJheS5wcm90b3R5cGUucHVzaCxlbXB0eUZ1bmN0aW9uPWZ1bmN0aW9uKCl7fSxzaW1wbGVGdW5jdGlvbj1mdW5jdGlvbihhcmcpe3JldHVybiBhcmd9LGlzQ2FsbGFibGU9ZnVuY3Rpb24oZm4pe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGZufSxJdGVyYXRvcj1mdW5jdGlvbigpe30sQXJyYXlJdGVyYXRvcj1mdW5jdGlvbihhcnJheSxmbGFnKXt0aGlzLl9hcnJheT1hcnJheSx0aGlzLl9mbGFnPWZsYWcsdGhpcy5fbmV4dEluZGV4PTB9LFN0cmluZ0l0ZXJhdG9yPWZ1bmN0aW9uKHN0cmluZyxmbGFnKXt0aGlzLl9zdHJpbmc9c3RyaW5nLHRoaXMuX2ZsYWc9ZmxhZyx0aGlzLl9uZXh0SW5kZXg9MH0saXNPYmplY3Q9ZnVuY3Rpb24odmFsdWUpe3JldHVybiBudWxsIT09dmFsdWUmJihcIm9iamVjdFwiPT10eXBlb2YgdmFsdWV8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHZhbHVlKX0sc2V0dXBTeW1ib2xJbnRlcm5hbHM9ZnVuY3Rpb24oc3ltYm9sLGRlc2Mpe3JldHVybiBkZWZpbmVQcm9wZXJ0aWVzKHN5bWJvbCx7X2Rlc2NyaXB0aW9uOnt2YWx1ZTpkZXNjfSxfaXNTeW1ib2w6e3ZhbHVlOiEwfSxfaWQ6e3ZhbHVlOnN5bWJvbEhpZGRlbkNvdW50ZXIrK319KSxzeW1ib2x9LGFwcGVuZEFycmF5PWZ1bmN0aW9uKGFycmF5MSxhcnJheTIpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBhcnJheTEubGVuZ3RoJiZhcnJheTEubGVuZ3RoPj0wJiZcIm51bWJlclwiPT10eXBlb2YgYXJyYXkyLmxlbmd0aCYmYXJyYXkyLmxlbmd0aD49MCl7dmFyIGxlbmd0aDE9TWF0aC5mbG9vcihhcnJheTEubGVuZ3RoKSxsZW5ndGgyPU1hdGguZmxvb3IoYXJyYXkyLmxlbmd0aCksaT0wO2ZvcihhcnJheTEubGVuZ3RoPWxlbmd0aDErbGVuZ3RoMjtpPGxlbmd0aDI7KytpKWFycmF5Mi5oYXNPd25Qcm9wZXJ0eShpKSYmKGFycmF5MVtsZW5ndGgxK2ldPWFycmF5MltpXSl9fSxzaW1wbGVJbmhlcml0YW5jZT1mdW5jdGlvbihjaGlsZCxwYXJlbnQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGNoaWxkfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBwYXJlbnQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNoaWxkIGFuZCBQYXJlbnQgbXVzdCBiZSBmdW5jdGlvbiB0eXBlXCIpO2NoaWxkLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHBhcmVudC5wcm90b3R5cGUpLGNoaWxkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jaGlsZH0sU3ltYm9sPWZ1bmN0aW9uIFN5bWJvbChkZXNjKXtpZihkZXNjPXZvaWQgMD09PWRlc2M/XCJcIjpTdHJpbmcoZGVzYyksdGhpcyBpbnN0YW5jZW9mIFN5bWJvbCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yXCIpO3JldHVybiBzZXR1cFN5bWJvbEludGVybmFscyhPYmplY3QuY3JlYXRlKFN5bWJvbC5wcm90b3R5cGUpLGRlc2MpfTtkZWZpbmVQcm9wZXJ0aWVzKFN5bWJvbCx7Zm9yOnt2YWx1ZTpmdW5jdGlvbihrZXkpe2tleT1TdHJpbmcoa2V5KTtmb3IodmFyIHJlY29yZCxyZWdpc3RyeUxlbmd0aD1nbG9iYWxTeW1ib2xSZWdpc3RyeS5sZW5ndGgsaT0wO2k8cmVnaXN0cnlMZW5ndGg7KytpKWlmKChyZWNvcmQ9Z2xvYmFsU3ltYm9sUmVnaXN0cnlbaV0pLmtleT09PWtleSlyZXR1cm4gcmVjb3JkLnN5bWJvbDtyZXR1cm4gcmVjb3JkPXtrZXk6a2V5LHN5bWJvbDpTeW1ib2woa2V5KX0sZ2xvYmFsU3ltYm9sUmVnaXN0cnkucHVzaChyZWNvcmQpLHJlY29yZC5zeW1ib2x9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sa2V5Rm9yOnt2YWx1ZTpmdW5jdGlvbihzeW1ib2wpe2lmKCFFUzYuaXNTeW1ib2woc3ltYm9sKSl0aHJvdyBuZXcgVHlwZUVycm9yKFN0cmluZyhzeW1ib2wpK1wiIGlzIG5vdCBhIHN5bWJvbFwiKTtmb3IodmFyIHJlY29yZCxyZWdpc3RyeUxlbmd0aD1nbG9iYWxTeW1ib2xSZWdpc3RyeS5sZW5ndGgsaT0wO2k8cmVnaXN0cnlMZW5ndGg7KytpKWlmKChyZWNvcmQ9Z2xvYmFsU3ltYm9sUmVnaXN0cnlbaV0pLnN5bWJvbD09PXN5bWJvbClyZXR1cm4gcmVjb3JkLmtleX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxoYXNJbnN0YW5jZTp7dmFsdWU6U3ltYm9sKFwiU3ltYm9sLmhhc0luc3RhbmNlXCIpfSxpc0NvbmNhdFNwcmVhZGFibGU6e3ZhbHVlOlN5bWJvbChcIlN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGVcIil9LGl0ZXJhdG9yOnt2YWx1ZTpTeW1ib2woXCJTeW1ib2wuaXRlcmF0b3JcIil9LHRvU3RyaW5nVGFnOnt2YWx1ZTpTeW1ib2woXCJTeW1ib2wudG9TdHJpbmdUYWdcIil9fSksU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiQEBfX19fX1wiK3RoaXMuX2lkK1wiX19fX19cIn0sU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRlZmluZVByb3BlcnR5KEl0ZXJhdG9yLnByb3RvdHlwZSxTeW1ib2wuaXRlcmF0b3IudG9TdHJpbmcoKSx7dmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksc2ltcGxlSW5oZXJpdGFuY2UoQXJyYXlJdGVyYXRvcixJdGVyYXRvciksc2ltcGxlSW5oZXJpdGFuY2UoU3RyaW5nSXRlcmF0b3IsSXRlcmF0b3IpLGRlZmluZVByb3BlcnR5KEFycmF5SXRlcmF0b3IucHJvdG90eXBlLFN5bWJvbC50b1N0cmluZ1RhZy50b1N0cmluZygpLHt2YWx1ZTpcIkFycmF5IEl0ZXJhdG9yXCIsY29uZmlndXJhYmxlOiEwfSksZGVmaW5lUHJvcGVydHkoU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLFN5bWJvbC50b1N0cmluZ1RhZy50b1N0cmluZygpLHt2YWx1ZTpcIlN0cmluZyBJdGVyYXRvclwiLGNvbmZpZ3VyYWJsZTohMH0pLEFycmF5SXRlcmF0b3IucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBBcnJheUl0ZXJhdG9yKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiTWV0aG9kIEFycmF5IEl0ZXJhdG9yLnByb3RvdHlwZS5uZXh0IGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXIgXCIrU3RyaW5nKHRoaXMpKTt2YXIgbmV4dFZhbHVlO3JldHVybi0xPT09dGhpcy5fbmV4dEluZGV4P3tkb25lOiEwLHZhbHVlOnZvaWQgMH06XCJudW1iZXJcIj09dHlwZW9mIHRoaXMuX2FycmF5Lmxlbmd0aCYmdGhpcy5fYXJyYXkubGVuZ3RoPj0wJiZ0aGlzLl9uZXh0SW5kZXg8TWF0aC5mbG9vcih0aGlzLl9hcnJheS5sZW5ndGgpPygxPT09dGhpcy5fZmxhZz9uZXh0VmFsdWU9W3RoaXMuX25leHRJbmRleCx0aGlzLl9hcnJheVt0aGlzLl9uZXh0SW5kZXhdXToyPT09dGhpcy5fZmxhZz9uZXh0VmFsdWU9dGhpcy5fYXJyYXlbdGhpcy5fbmV4dEluZGV4XTozPT09dGhpcy5fZmxhZyYmKG5leHRWYWx1ZT10aGlzLl9uZXh0SW5kZXgpLHRoaXMuX25leHRJbmRleCsrLHtkb25lOiExLHZhbHVlOm5leHRWYWx1ZX0pOih0aGlzLl9uZXh0SW5kZXg9LTEse2RvbmU6ITAsdmFsdWU6dm9pZCAwfSl9LFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgU3RyaW5nSXRlcmF0b3IpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJNZXRob2QgU3RyaW5nIEl0ZXJhdG9yLnByb3RvdHlwZS5uZXh0IGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXIgXCIrU3RyaW5nKHRoaXMpKTt2YXIgbmV4dFZhbHVlLHN0cmluZ09iamVjdD1uZXcgU3RyaW5nKHRoaXMuX3N0cmluZyk7cmV0dXJuLTE9PT10aGlzLl9uZXh0SW5kZXg/e2RvbmU6ITAsdmFsdWU6dm9pZCAwfTp0aGlzLl9uZXh0SW5kZXg8c3RyaW5nT2JqZWN0Lmxlbmd0aD8obmV4dFZhbHVlPXN0cmluZ09iamVjdFt0aGlzLl9uZXh0SW5kZXhdLHRoaXMuX25leHRJbmRleCsrLHtkb25lOiExLHZhbHVlOm5leHRWYWx1ZX0pOih0aGlzLl9uZXh0SW5kZXg9LTEse2RvbmU6ITAsdmFsdWU6dm9pZCAwfSl9O3ZhciBTcHJlYWRPcGVyYXRvckltcGw9ZnVuY3Rpb24odGFyZ2V0LHRoaXNBcmcpe3RoaXMuX3RhcmdldD10YXJnZXQsdGhpcy5fdmFsdWVzPVtdLHRoaXMuX3RoaXNBcmc9dGhpc0FyZ307U3ByZWFkT3BlcmF0b3JJbXBsLnByb3RvdHlwZS5zcHJlYWQ9ZnVuY3Rpb24oKXt2YXIgc2VsZj10aGlzO3JldHVybiBzbGljZS5jYWxsKGFyZ3VtZW50cykuZm9yRWFjaChmdW5jdGlvbihpdGVyYWJsZSl7RVM2LmZvck9mKGl0ZXJhYmxlLGZ1bmN0aW9uKHZhbHVlKXtzZWxmLl92YWx1ZXMucHVzaCh2YWx1ZSl9KX0pLHNlbGZ9LFNwcmVhZE9wZXJhdG9ySW1wbC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dmFyIHNlbGY9dGhpcztyZXR1cm4gc2xpY2UuY2FsbChhcmd1bWVudHMpLmZvckVhY2goZnVuY3Rpb24odmFsdWUpe3NlbGYuX3ZhbHVlcy5wdXNoKHZhbHVlKX0pLHNlbGZ9LFNwcmVhZE9wZXJhdG9ySW1wbC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0aGlzQXJnKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0aGlzLl90YXJnZXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRhcmdldCBpcyBub3QgYSBmdW5jdGlvblwiKTtyZXR1cm4gdGhpc0FyZz1hcmd1bWVudHMubGVuZ3RoPD0wP3RoaXMuX3RoaXNBcmc6dGhpc0FyZyx0aGlzLl90YXJnZXQuYXBwbHkodGhpc0FyZyx0aGlzLl92YWx1ZXMpfSxTcHJlYWRPcGVyYXRvckltcGwucHJvdG90eXBlLm5ldz1mdW5jdGlvbigpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHRoaXMuX3RhcmdldCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGFyZ2V0IGlzIG5vdCBhIGNvbnN0cnVjdG9yXCIpO3ZhciB0ZW1wLHJldHVyblZhbHVlO3JldHVybiB0ZW1wPU9iamVjdC5jcmVhdGUodGhpcy5fdGFyZ2V0LnByb3RvdHlwZSkscmV0dXJuVmFsdWU9dGhpcy5fdGFyZ2V0LmFwcGx5KHRlbXAsdGhpcy5fdmFsdWVzKSxpc09iamVjdChyZXR1cm5WYWx1ZSk/cmV0dXJuVmFsdWU6dGVtcH0sU3ByZWFkT3BlcmF0b3JJbXBsLnByb3RvdHlwZS5hcnJheT1mdW5jdGlvbigpe2lmKCFpc0FycmF5KHRoaXMuX3RhcmdldCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRhcmdldCBpcyBub3QgYSBhcnJheVwiKTtyZXR1cm4gcHVzaC5hcHBseSh0aGlzLl90YXJnZXQsdGhpcy5fdmFsdWVzKSx0aGlzLl90YXJnZXR9O3JldHVybiBkZWZpbmVQcm9wZXJ0aWVzKEVTNix7aXNTeW1ib2w6e3ZhbHVlOmZ1bmN0aW9uKHN5bWJvbCl7cmV0dXJuIHN5bWJvbCBpbnN0YW5jZW9mIFN5bWJvbCYmZnVuY3Rpb24oc3ltYm9sKXtyZXR1cm4hMD09PXN5bWJvbC5faXNTeW1ib2wmJlwibnVtYmVyXCI9PXR5cGVvZiBzeW1ib2wuX2lkJiZcInN0cmluZ1wiPT10eXBlb2Ygc3ltYm9sLl9kZXNjcmlwdGlvbn0oc3ltYm9sKX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxpbnN0YW5jZU9mOnt2YWx1ZTpmdW5jdGlvbihvYmplY3QsY29uc3RydWN0b3Ipe2lmKCFpc09iamVjdChjb25zdHJ1Y3RvcikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJpZ2h0LWhhbmQgc2lkZSBvZiAnaW5zdGFuY2VvZicgaXMgbm90IGFuIG9iamVjdFwiKTt2YXIgaGFzSW5zdGFuY2VTeW1ib2xQcm9wPWNvbnN0cnVjdG9yW1N5bWJvbC5oYXNJbnN0YW5jZV07aWYodm9pZCAwPT09aGFzSW5zdGFuY2VTeW1ib2xQcm9wKXJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBjb25zdHJ1Y3RvcjtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBoYXNJbnN0YW5jZVN5bWJvbFByb3ApdGhyb3cgbmV3IFR5cGVFcnJvcih0eXBlb2YgaGFzSW5zdGFuY2VTeW1ib2xQcm9wK1wiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO3JldHVybiBoYXNJbnN0YW5jZVN5bWJvbFByb3AuY2FsbChjb25zdHJ1Y3RvcixvYmplY3QpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9LGZvck9mOnt2YWx1ZTpmdW5jdGlvbihpdGVyYWJsZSxjYWxsYmFjayx0aGlzQXJnKXtpZihjYWxsYmFjaz1cImZ1bmN0aW9uXCIhPXR5cGVvZiBjYWxsYmFjaz9lbXB0eUZ1bmN0aW9uOmNhbGxiYWNrLFwiZnVuY3Rpb25cIiE9dHlwZW9mIGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0pdGhyb3cgbmV3IFR5cGVFcnJvcihcIkl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0gaXMgbm90IGEgZnVuY3Rpb25cIik7dmFyIGl0ZXJhdGlvblJlc3VsdCxpdGVyYXRvcj1pdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKCk7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgaXRlcmF0b3IubmV4dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiLml0ZXJhdG9yLm5leHQgaXMgbm90IGEgZnVuY3Rpb25cIik7Zm9yKDs7KXtpZihpdGVyYXRpb25SZXN1bHQ9aXRlcmF0b3IubmV4dCgpLCFpc09iamVjdChpdGVyYXRpb25SZXN1bHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJJdGVyYXRvciByZXN1bHQgXCIraXRlcmF0aW9uUmVzdWx0K1wiIGlzIG5vdCBhbiBvYmplY3RcIik7aWYoaXRlcmF0aW9uUmVzdWx0LmRvbmUpYnJlYWs7Y2FsbGJhY2suY2FsbCh0aGlzQXJnLGl0ZXJhdGlvblJlc3VsdC52YWx1ZSl9fSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9LHNwcmVhZE9wZXJhdG9yOnt2YWx1ZTpmdW5jdGlvbih0YXJnZXQsdGhpc0FyZyl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdGFyZ2V0JiYhaXNBcnJheSh0YXJnZXQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTcHJlYWQgb3BlcmF0b3Igb25seSBzdXBwb3J0cyBvbiBhcnJheSBhbmQgZnVuY3Rpb24gb2JqZWN0cyBhdCB0aGlzIG1vbWVudFwiKTtyZXR1cm4gbmV3IFNwcmVhZE9wZXJhdG9ySW1wbCh0YXJnZXQsdGhpc0FyZyl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxkZWZpbmVQcm9wZXJ0eShnbG9iYWwsXCJTeW1ib2xcIix7dmFsdWU6U3ltYm9sLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSxTeW1ib2wuaGFzSW5zdGFuY2UudG9TdHJpbmcoKSx7dmFsdWU6ZnVuY3Rpb24oaW5zdGFuY2Upe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMmJmluc3RhbmNlIGluc3RhbmNlb2YgdGhpc319KSxkZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsXCJjb25jYXRcIix7dmFsdWU6ZnVuY3Rpb24oKXtpZih2b2lkIDA9PT10aGlzfHxudWxsPT09dGhpcyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJyYXkucHJvdG90eXBlLmNvbmNhdCBjYWxsZWQgb24gbnVsbCBvciB1bmRlZmluZWRcIik7dmFyIHNlbGY9T2JqZWN0KHRoaXMpLHRhcmdldHM9c2xpY2UuY2FsbChhcmd1bWVudHMpLG91dHB1dHM9W107cmV0dXJuIHRhcmdldHMudW5zaGlmdChzZWxmKSx0YXJnZXRzLmZvckVhY2goZnVuY3Rpb24odGFyZ2V0KXtpc09iamVjdCh0YXJnZXQpP3ZvaWQgMCE9PXRhcmdldFtTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlXT90YXJnZXRbU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZV0/YXBwZW5kQXJyYXkob3V0cHV0cyx0YXJnZXQpOm91dHB1dHMucHVzaCh0YXJnZXQpOmlzQXJyYXkodGFyZ2V0KT9hcHBlbmRBcnJheShvdXRwdXRzLHRhcmdldCk6b3V0cHV0cy5wdXNoKHRhcmdldCk6b3V0cHV0cy5wdXNoKHRhcmdldCl9KSxvdXRwdXRzfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxkZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLFwidG9TdHJpbmdcIix7dmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpc3x8bnVsbD09PXRoaXM/b2JqZWN0VG9TdHJpbmcuY2FsbCh0aGlzKTpcInN0cmluZ1wiPT10eXBlb2YgdGhpc1tTeW1ib2wudG9TdHJpbmdUYWddP1wiW29iamVjdCBcIit0aGlzW1N5bWJvbC50b1N0cmluZ1RhZ10rXCJdXCI6b2JqZWN0VG9TdHJpbmcuY2FsbCh0aGlzKX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLFN5bWJvbC5pdGVyYXRvci50b1N0cmluZygpLHt2YWx1ZTpmdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXN8fG51bGw9PT10aGlzKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3RcIik7dmFyIHNlbGY9T2JqZWN0KHRoaXMpO3JldHVybiBuZXcgQXJyYXlJdGVyYXRvcihzZWxmLDIpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxkZWZpbmVQcm9wZXJ0eShBcnJheSxcImZyb21cIix7dmFsdWU6ZnVuY3Rpb24oYXJyYXlMaWtlLG1hcEZuLHRoaXNBcmcpe3ZhciBjb25zdHJ1Y3RvcixsZW5ndGgsb3V0cHV0cyxpPTA7aWYoY29uc3RydWN0b3I9aXNDYWxsYWJsZSh0aGlzKT90aGlzOkFycmF5LHZvaWQgMD09PWFycmF5TGlrZXx8bnVsbD09PWFycmF5TGlrZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0XCIpO2lmKGFycmF5TGlrZT1PYmplY3QoYXJyYXlMaWtlKSx2b2lkIDA9PT1tYXBGbiltYXBGbj1zaW1wbGVGdW5jdGlvbjtlbHNlIGlmKCFpc0NhbGxhYmxlKG1hcEZuKSl0aHJvdyBuZXcgVHlwZUVycm9yKG1hcEZuK1wiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO2lmKHZvaWQgMD09PWFycmF5TGlrZVtTeW1ib2wuaXRlcmF0b3JdKXtpZighKFwibnVtYmVyXCI9PXR5cGVvZiBhcnJheUxpa2UubGVuZ3RoJiZhcnJheUxpa2UubGVuZ3RoPj0wKSlyZXR1cm4ob3V0cHV0cz1uZXcgY29uc3RydWN0b3IoMCkpLmxlbmd0aD0wLG91dHB1dHM7Zm9yKGxlbmd0aD1NYXRoLmZsb29yKGFycmF5TGlrZS5sZW5ndGgpLChvdXRwdXRzPW5ldyBjb25zdHJ1Y3RvcihsZW5ndGgpKS5sZW5ndGg9bGVuZ3RoO2k8bGVuZ3RoOysraSlvdXRwdXRzW2ldPW1hcEZuLmNhbGwodGhpc0FyZyxhcnJheUxpa2VbaV0pfWVsc2Uob3V0cHV0cz1uZXcgY29uc3RydWN0b3IpLmxlbmd0aD0wLEVTNi5mb3JPZihhcnJheUxpa2UsZnVuY3Rpb24odmFsdWUpe291dHB1dHMubGVuZ3RoKyssb3V0cHV0c1tvdXRwdXRzLmxlbmd0aC0xXT1tYXBGbi5jYWxsKHRoaXNBcmcsdmFsdWUpfSk7cmV0dXJuIG91dHB1dHN9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSxcImVudHJpZXNcIix7dmFsdWU6ZnVuY3Rpb24oKXtpZih2b2lkIDA9PT10aGlzfHxudWxsPT09dGhpcyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0XCIpO3ZhciBzZWxmPU9iamVjdCh0aGlzKTtyZXR1cm4gbmV3IEFycmF5SXRlcmF0b3Ioc2VsZiwxKX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLFwia2V5c1wiLHt2YWx1ZTpmdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXN8fG51bGw9PT10aGlzKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3RcIik7dmFyIHNlbGY9T2JqZWN0KHRoaXMpO3JldHVybiBuZXcgQXJyYXlJdGVyYXRvcihzZWxmLDMpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxkZWZpbmVQcm9wZXJ0eShTdHJpbmcucHJvdG90eXBlLFN5bWJvbC5pdGVyYXRvci50b1N0cmluZygpLHt2YWx1ZTpmdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXN8fG51bGw9PT10aGlzKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdHJpbmcucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gY2FsbGVkIG9uIG51bGwgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBuZXcgU3RyaW5nSXRlcmF0b3IoU3RyaW5nKHRoaXMpLDApfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxFUzZ9KTsiLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIEhlbHBlciBmdW5jdGlvbnNcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKlxuICogU2ltcGxlIGlzc2V0IG1ldGhvZCBmb3IgdGhpcyBkb2VzIG5vdCBleGlzdCBpbiBqYXZhc2NyaXB0XG4gKi9cbndpbmRvdy5pc3NldCA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiAhPT0gJ3VuZGVmaW5lZCcgJiYgb2JqICE9PSBudWxsO1xufTtcblxuLypcbiAqIEVhc2luZyBGdW5jdGlvbnMgLSBpbnNwaXJlZCBmcm9tIGh0dHA6Ly9naXptYS5jb20vZWFzaW5nL1xuICogb25seSBjb25zaWRlcmluZyB0aGUgdCB2YWx1ZSBmb3IgdGhlIHJhbmdlIFswLCAxXSA9PiBbMCwgMV1cbiAqL1xud2luZG93LkVhc2luZ0Z1bmN0aW9ucyA9IHtcbiAgICAvLyBubyBlYXNpbmcsIG5vIGFjY2VsZXJhdGlvblxuICAgIGxpbmVhcjogZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHRcbiAgICB9LFxuICAgIC8vIGFjY2VsZXJhdGluZyBmcm9tIHplcm8gdmVsb2NpdHlcbiAgICBlYXNlSW5RdWFkOiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdCAqIHRcbiAgICB9LFxuICAgIC8vIGRlY2VsZXJhdGluZyB0byB6ZXJvIHZlbG9jaXR5XG4gICAgZWFzZU91dFF1YWQ6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0ICogKDIgLSB0KVxuICAgIH0sXG4gICAgLy8gYWNjZWxlcmF0aW9uIHVudGlsIGhhbGZ3YXksIHRoZW4gZGVjZWxlcmF0aW9uXG4gICAgZWFzZUluT3V0UXVhZDogZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHQgPCAuNSA/IDIgKiB0ICogdCA6IC0xICsgKDQgLSAyICogdCkgKiB0XG4gICAgfSxcbiAgICAvLyBhY2NlbGVyYXRpbmcgZnJvbSB6ZXJvIHZlbG9jaXR5XG4gICAgZWFzZUluQ3ViaWM6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0ICogdCAqIHRcbiAgICB9LFxuICAgIC8vIGRlY2VsZXJhdGluZyB0byB6ZXJvIHZlbG9jaXR5XG4gICAgZWFzZU91dEN1YmljOiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gKC0tdCkgKiB0ICogdCArIDFcbiAgICB9LFxuICAgIC8vIGFjY2VsZXJhdGlvbiB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGlvblxuICAgIGVhc2VJbk91dEN1YmljOiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdCA8IC41ID8gNCAqIHQgKiB0ICogdCA6ICh0IC0gMSkgKiAoMiAqIHQgLSAyKSAqICgyICogdCAtIDIpICsgMVxuICAgIH0sXG4gICAgLy8gYWNjZWxlcmF0aW5nIGZyb20gemVybyB2ZWxvY2l0eVxuICAgIGVhc2VJblF1YXJ0OiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogdFxuICAgIH0sXG4gICAgLy8gZGVjZWxlcmF0aW5nIHRvIHplcm8gdmVsb2NpdHlcbiAgICBlYXNlT3V0UXVhcnQ6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiAxIC0gKC0tdCkgKiB0ICogdCAqIHRcbiAgICB9LFxuICAgIC8vIGFjY2VsZXJhdGlvbiB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGlvblxuICAgIGVhc2VJbk91dFF1YXJ0OiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdCA8IC41ID8gOCAqIHQgKiB0ICogdCAqIHQgOiAxIC0gOCAqICgtLXQpICogdCAqIHQgKiB0XG4gICAgfSxcbiAgICAvLyBhY2NlbGVyYXRpbmcgZnJvbSB6ZXJvIHZlbG9jaXR5XG4gICAgZWFzZUluUXVpbnQ6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0ICogdFxuICAgIH0sXG4gICAgLy8gZGVjZWxlcmF0aW5nIHRvIHplcm8gdmVsb2NpdHlcbiAgICBlYXNlT3V0UXVpbnQ6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiAxICsgKC0tdCkgKiB0ICogdCAqIHQgKiB0XG4gICAgfSxcbiAgICAvLyBhY2NlbGVyYXRpb24gdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRpb25cbiAgICBlYXNlSW5PdXRRdWludDogZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHQgPCAuNSA/IDE2ICogdCAqIHQgKiB0ICogdCAqIHQgOiAxICsgMTYgKiAoLS10KSAqIHQgKiB0ICogdCAqIHRcbiAgICB9XG59O1xuXG4vKlxuICogVmFuaWxsYSB2ZXJzaW9uIG9mIHRoZSAkLmdldFNjcmlwdFxuICovXG53aW5kb3cuZ2V0U2NyaXB0ID0gZnVuY3Rpb24gKHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgc2NyaXB0LmFzeW5jID0gMTtcblxuICAgIGNvbnN0IHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7XG4gICAgbGV0IHByaW9yID0gc2NyaXB0c1tzY3JpcHRzLmxlbmd0aCAtIDFdO1xuXG4gICAgc2NyaXB0Lm9ubG9hZCA9IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoXywgaXNBYm9ydCkge1xuICAgICAgICBpZiAoaXNBYm9ydCB8fCAhc2NyaXB0LnJlYWR5U3RhdGUgfHwgL2xvYWRlZHxjb21wbGV0ZS8udGVzdChzY3JpcHQucmVhZHlTdGF0ZSkpIHtcbiAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgIHNjcmlwdCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgaWYgKCFpc0Fib3J0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHNjcmlwdC5zcmMgPSBzb3VyY2U7XG4gICAgcHJpb3IucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2NyaXB0LCBwcmlvcik7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3RcbiAqIGJlIHRyaWdnZXJlZC4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGl0IHN0b3BzIGJlaW5nIGNhbGxlZCBmb3JcbiAqIE4gbWlsbGlzZWNvbmRzLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRyaWdnZXIgdGhlIGZ1bmN0aW9uIG9uIHRoZVxuICogbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy5cbiAqIEBwYXJhbSBmdW5jXG4gKiBAcGFyYW0gd2FpdFxuICogQHBhcmFtIGltbWVkaWF0ZVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG53aW5kb3cuZGVib3VuY2UgPSBmdW5jdGlvbihmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgICBsZXQgdGltZW91dDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIGxldCBsYXRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKCFpbW1lZGlhdGUpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIH07XG4gICAgICAgIGxldCBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgICAgaWYgKGNhbGxOb3cpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfTtcbn07XG5cbi8qXG4gKiBDb29raWUgaGVscGVyIGNsYXNzXG4gKi9cbndpbmRvdy5Db29raWUgPSB7XG4gICAgc2V0OiBmdW5jdGlvbiAobmFtZSwgdmFsdWUsIGRheXMpIHtcbiAgICAgICAgbGV0IGRvbWFpbiwgZG9tYWluUGFydHMsIGRhdGUsIGV4cGlyZXMsIGhvc3Q7XG5cbiAgICAgICAgaWYgKGRheXMpIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgKGRheXMgKiAyNCAqIDYwICogNjAgKiAxMDAwKSk7XG4gICAgICAgICAgICBleHBpcmVzID0gXCI7IGV4cGlyZXM9XCIgKyBkYXRlLnRvR01UU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBleHBpcmVzID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGhvc3QgPSBsb2NhdGlvbi5ob3N0O1xuICAgICAgICBpZiAoaG9zdC5zcGxpdCgnLicpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgLy8gbm8gXCIuXCIgaW4gYSBkb21haW4gLSBpdCdzIGxvY2FsaG9zdCBvciBzb21ldGhpbmcgc2ltaWxhclxuICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArIFwiPVwiICsgdmFsdWUgKyBleHBpcmVzICsgXCI7IHBhdGg9L1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhlIGNvb2tpZSBvbiBhbGwgc3ViIGRvbWFpbnMuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gU3RhcnQgd2l0aCB0cnlpbmcgdG8gc2V0IGNvb2tpZSB0byB0aGUgdG9wIGRvbWFpbi5cbiAgICAgICAgICAgIC8vIChleGFtcGxlOiBpZiB1c2VyIGlzIG9uIGZvby5jb20sIHRyeSB0byBzZXRcbiAgICAgICAgICAgIC8vICBjb29raWUgdG8gZG9tYWluIFwiLmNvbVwiKVxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIElmIHRoZSBjb29raWUgd2lsbCBub3QgYmUgc2V0LCBpdCBtZWFucyBcIi5jb21cIlxuICAgICAgICAgICAgLy8gaXMgYSB0b3AgbGV2ZWwgZG9tYWluIGFuZCB3ZSBuZWVkIHRvXG4gICAgICAgICAgICAvLyBzZXQgdGhlIGNvb2tpZSB0byBcIi5mb28uY29tXCJcbiAgICAgICAgICAgIGRvbWFpblBhcnRzID0gaG9zdC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgZG9tYWluUGFydHMuc2hpZnQoKTtcbiAgICAgICAgICAgIGRvbWFpbiA9ICcuJyArIGRvbWFpblBhcnRzLmpvaW4oJy4nKTtcblxuICAgICAgICAgICAgLy8gRm9yIGRldmVsb3BtZW50IHB1cnBvc2UsIHJlbW92ZSB0aGlzIHdoZW4gbW92aW5nIHRvIHByb2R1Y3Rpb25cbiAgICAgICAgICAgIC8vIGRvbWFpbiA9ICcua29tbWEucHJvJztcblxuICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArIFwiPVwiICsgdmFsdWUgKyBleHBpcmVzICsgXCI7IHBhdGg9LzsgZG9tYWluPVwiICsgZG9tYWluO1xuXG4gICAgICAgICAgICAvLyBjaGVjayBpZiBjb29raWUgd2FzIHN1Y2Nlc3NmdWx5IHNldCB0byB0aGUgZ2l2ZW4gZG9tYWluXG4gICAgICAgICAgICAvLyAob3RoZXJ3aXNlIGl0IHdhcyBhIFRvcC1MZXZlbCBEb21haW4pXG4gICAgICAgICAgICBpZiAoQ29va2llLmdldChuYW1lKSA9PSBudWxsIHx8IENvb2tpZS5nZXQobmFtZSkgIT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyBhcHBlbmQgXCIuXCIgdG8gY3VycmVudCBkb21haW5cbiAgICAgICAgICAgICAgICBkb21haW4gPSAnLicgKyBob3N0O1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IG5hbWUgKyBcIj1cIiArIHZhbHVlICsgZXhwaXJlcyArIFwiOyBwYXRoPS87IGRvbWFpbj1cIiArIGRvbWFpbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIGNvbnN0IG5hbWVFUSA9IG5hbWUgKyBcIj1cIjtcbiAgICAgICAgY29uc3QgY2EgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGMgPSBjYVtpXTtcbiAgICAgICAgICAgIHdoaWxlIChjLmNoYXJBdCgwKSA9PT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgYyA9IGMuc3Vic3RyaW5nKDEsIGMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGMuaW5kZXhPZihuYW1lRVEpID09PSAwKSByZXR1cm4gYy5zdWJzdHJpbmcobmFtZUVRLmxlbmd0aCwgYy5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG5cbiAgICBlcmFzZTogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgQ29va2llLnNldChuYW1lLCAnJywgLTEpO1xuICAgIH1cbn07XG5cbi8qXG4gKiBKYXZhc2NyaXB0IHZlcnNpb24gb2YgdGhlIG51bWJlcl9mb3JtYXQgbWV0aG9kIG9mIFBIUFxuICovXG53aW5kb3cubnVtYmVyX2Zvcm1hdCA9IGZ1bmN0aW9uIChudW1iZXIsIGRlY2ltYWxzLCBkZWNfcG9pbnQsIHRob3VzYW5kc19zZXApIHtcbiAgICAvLyBTdHJpcCBhbGwgY2hhcmFjdGVycyBidXQgbnVtZXJpY2FsIG9uZXMuXG4gICAgbnVtYmVyID0gKG51bWJlciArICcnKS5yZXBsYWNlKC9bXjAtOStcXC1FZS5dL2csICcnKTtcbiAgICBsZXQgbiA9ICFpc0Zpbml0ZSgrbnVtYmVyKSA/IDAgOiArbnVtYmVyLFxuICAgICAgICBwcmVjID0gIWlzRmluaXRlKCtkZWNpbWFscykgPyAwIDogTWF0aC5hYnMoZGVjaW1hbHMpLFxuICAgICAgICBzZXAgPSAodHlwZW9mIHRob3VzYW5kc19zZXAgPT09ICd1bmRlZmluZWQnKSA/ICcsJyA6IHRob3VzYW5kc19zZXAsXG4gICAgICAgIGRlYyA9ICh0eXBlb2YgZGVjX3BvaW50ID09PSAndW5kZWZpbmVkJykgPyAnLicgOiBkZWNfcG9pbnQsXG4gICAgICAgIHMgPSAnJyxcbiAgICAgICAgdG9GaXhlZEZpeCA9IGZ1bmN0aW9uIChuLCBwcmVjKSB7XG4gICAgICAgICAgICB2YXIgayA9IE1hdGgucG93KDEwLCBwcmVjKTtcbiAgICAgICAgICAgIHJldHVybiAnJyArIE1hdGgucm91bmQobiAqIGspIC8gaztcbiAgICAgICAgfTtcbiAgICAvLyBGaXggZm9yIElFIHBhcnNlRmxvYXQoMC41NSkudG9GaXhlZCgwKSA9IDA7XG4gICAgcyA9IChwcmVjID8gdG9GaXhlZEZpeChuLCBwcmVjKSA6ICcnICsgTWF0aC5yb3VuZChuKSkuc3BsaXQoJy4nKTtcbiAgICBpZiAoc1swXS5sZW5ndGggPiAzKSB7XG4gICAgICAgIHNbMF0gPSBzWzBdLnJlcGxhY2UoL1xcQig/PSg/OlxcZHszfSkrKD8hXFxkKSkvZywgc2VwKTtcbiAgICB9XG4gICAgaWYgKChzWzFdIHx8ICcnKS5sZW5ndGggPCBwcmVjKSB7XG4gICAgICAgIHNbMV0gPSBzWzFdIHx8ICcnO1xuICAgICAgICBzWzFdICs9IG5ldyBBcnJheShwcmVjIC0gc1sxXS5sZW5ndGggKyAxKS5qb2luKCcwJyk7XG4gICAgfVxuICAgIHJldHVybiBzLmpvaW4oZGVjKTtcbn07XG5cblxuLyoqXG4gKiBFbGVtZW50LmNsb3Nlc3QoKSBwb2x5ZmlsbFxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvY2xvc2VzdCNQb2x5ZmlsbFxuICovXG5pZiAoIUVsZW1lbnQucHJvdG90eXBlLmNsb3Nlc3QpIHtcbiAgICBpZiAoIUVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMpIHtcbiAgICAgICAgRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyA9IEVsZW1lbnQucHJvdG90eXBlLm1zTWF0Y2hlc1NlbGVjdG9yIHx8IEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3RvcjtcbiAgICB9XG4gICAgRWxlbWVudC5wcm90b3R5cGUuY2xvc2VzdCA9IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgIHZhciBlbCA9IHRoaXM7XG4gICAgICAgIHZhciBhbmNlc3RvciA9IHRoaXM7XG4gICAgICAgIGlmICghZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKGVsKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmIChhbmNlc3Rvci5tYXRjaGVzKHMpKSByZXR1cm4gYW5jZXN0b3I7XG4gICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH0gd2hpbGUgKGFuY2VzdG9yICE9PSBudWxsKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbn1cblxud2luZG93LkFqYXggPSB7XG5cbiAgICAvL1RPRE86IENhbiB3ZSBjcmVhdGUgYSBwcmVwYXJlIHJlcXVlc3QgZnVuY3Rpb24gPz9cblxuICAgIGdldDogZnVuY3Rpb24odXJsLCBjYWxsYmFjaykge1xuICAgICAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIGxldCB0b2tlbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT1cImNzcmYtdG9rZW5cIl0nKS5jb250ZW50O1xuXG4gICAgICAgIHhoci5vcGVuKCdnZXQnLCB1cmwsIHRydWUpO1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ1gtQ1NSRi1UT0tFTicsIHRva2VuKTtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ1gtUmVxdWVzdGVkLVdpdGgnLCAnWE1MSHR0cFJlcXVlc3QnKTtcbiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soeGhyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgeGhyLnNlbmQoKTtcbiAgICB9LFxuXG4gICAgcG9zdDogZnVuY3Rpb24odXJsLCBkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIGxldCB0b2tlbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT1cImNzcmYtdG9rZW5cIl0nKS5jb250ZW50O1xuXG4gICAgICAgIHhoci5vcGVuKCdwb3N0JywgdXJsLCB0cnVlKTtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdYLUNTUkYtVE9LRU4nLCB0b2tlbik7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdYLVJlcXVlc3RlZC1XaXRoJywgJ1hNTEh0dHBSZXF1ZXN0Jyk7XG4gICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHhocik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHhoci5zZW5kKCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYXBpdGFsaXplIHRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIHN0cmluZ1xuICogQHBhcmFtIHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xud2luZG93LmNhcGl0YWxpemVGaXJzdExldHRlciA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0IHNuYWtlIGNhc2UgaW50byBjYW1lbGNhc2VcbiAqXG4gKiBAcGFyYW0gc3RyaW5nXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xud2luZG93LnNuYWtlVG9DYW1lbCA9IGZ1bmN0aW9uIChzdHJpbmcpe1xuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvKFxcLVxcdykvZywgZnVuY3Rpb24obSl7cmV0dXJuIG1bMV0udG9VcHBlckNhc2UoKTt9KTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBpbmRleCBvZiBhbiBlbGVtZW50IGluc2lkZSBpdHMgcGFyZW50XG4gKi9cbndpbmRvdy5pbmRleEluUGFyZW50PSBmdW5jdGlvbiAobm9kZSkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gbm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXM7XG4gICAgbGV0IG51bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY2hpbGRyZW5baV0gPT0gbm9kZSkgcmV0dXJuIG51bTtcbiAgICAgICAgaWYgKGNoaWxkcmVuW2ldLm5vZGVUeXBlID09IDEpIG51bSsrO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG59O1xuXG4vKipcbiAqIEZvciBzZWN1cml0eSByZWFzb25zIGlPUyBTYWZhcmkgb25seSBhbGxvd3MgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKSBmb3IgdGV4dCB3aXRoaW4gYSBjb250ZW50RWRpdGFibGUgY29udGFpbmVyLlxuICogVGhlIHdvcmthcm91bmQgaXMgdG8gZGV0ZWN0IGlPUyBTYWZhcmkgYW5kIHF1aWNrbHkgdG9nZ2xlIGNvbnRlbnRFZGl0YWJsZSBiZWZvcmUgZXhlY3V0aW5nIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5JykuXG4gKiBXaGViIGlucHV0IG9yIHRleHRhcmVhIGlzIFJFQURPTkxZIHlvdSBjYW4gcHJldmVudCB0aGUgdW53YW50ZWQgcG9wdXAgd2l0aCBjb3B5L3Bhc3RlIGZ1bmN0aW9ucyBhbmQgdGhlIGlucHV0IGtleWJvYXJkXG4gKiBDb2RlIGZyb206IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80Njk4MTg0N1xuICovXG53aW5kb3cuY29weVRvQ2xpcGJvYXJkID0gZnVuY3Rpb24gKGVsKSB7XG5cbiAgICAvLyByZXNvbHZlIHRoZSBlbGVtZW50XG4gICAgZWwgPSAodHlwZW9mIGVsID09PSAnc3RyaW5nJykgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKSA6IGVsO1xuXG4gICAgLy8gaGFuZGxlIGlPUyBhcyBhIHNwZWNpYWwgY2FzZVxuICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pcGFkfGlwb2R8aXBob25lL2kpKSB7XG5cbiAgICAgICAgLy8gc2F2ZSBjdXJyZW50IGNvbnRlbnRFZGl0YWJsZS9yZWFkT25seSBzdGF0dXNcbiAgICAgICAgY29uc3QgZWRpdGFibGUgPSBlbC5jb250ZW50RWRpdGFibGU7XG4gICAgICAgIGNvbnN0IHJlYWRPbmx5ID0gZWwucmVhZE9ubHk7XG5cbiAgICAgICAgLy8gY29udmVydCB0byBlZGl0YWJsZSB3aXRoIHJlYWRvbmx5IHRvIHN0b3AgaU9TIGtleWJvYXJkIG9wZW5pbmdcbiAgICAgICAgZWwuY29udGVudEVkaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgZWwucmVhZE9ubHkgPSB0cnVlO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBhIHNlbGVjdGFibGUgcmFuZ2VcbiAgICAgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsKTtcblxuICAgICAgICAvLyBzZWxlY3QgdGhlIHJhbmdlXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICBlbC5zZXRTZWxlY3Rpb25SYW5nZSgwLCA5OTk5OTkpO1xuXG4gICAgICAgIC8vIHJlc3RvcmUgY29udGVudEVkaXRhYmxlL3JlYWRPbmx5IHRvIG9yaWdpbmFsIHN0YXRlXG4gICAgICAgIGVsLmNvbnRlbnRFZGl0YWJsZSA9IGVkaXRhYmxlO1xuICAgICAgICBlbC5yZWFkT25seSA9IHJlYWRPbmx5O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZWwuc2VsZWN0KCk7XG4gICAgfVxuXG4gICAgLy8gZXhlY3V0ZSBjb3B5IGNvbW1hbmRcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50IHJlbGF0ZWQgdG8gdGhlIGJvZHlcbiAqXG4gKiBAcGFyYW0gZWxcbiAqIEByZXR1cm5zIHt7dG9wOiBudW1iZXIsIGxlZnQ6IG51bWJlcn19XG4gKi9cbndpbmRvdy5ib2R5T2Zmc2V0ID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgICBzY3JvbGxMZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgICAgICBzY3JvbGxUb3AgPSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcbiAgICByZXR1cm4geyB0b3A6IHJlY3QudG9wICsgc2Nyb2xsVG9wLCBsZWZ0OiByZWN0LmxlZnQgKyBzY3JvbGxMZWZ0IH1cbn07IiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIENvb2tpZSBoYW5kbGVyXG4gICAtIFByaW1hcnkgdXNhZ2UgZm9yIHRvZ2dsaW5nIHRoZSBjb29raWUgbWVzc2FnZSBhbmQvb3Igc3dpdGNoXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuY29uc3QgQ29va2llSGFuZGxlciA9IHtcblxuICAgIGNvb2tpZUJhciA6IG51bGwsXG4gICAgY29va2llT3ZlcmxheSA6IG51bGwsXG4gICAgY29va2llTWVzc2FnZSA6IG51bGwsXG5cbiAgICBjb29raWVTd2l0Y2ggOiBudWxsLFxuXG4gICAgY29va2llRmFkZU91dEFuaW1hdGlvbkR1cmF0aW9uIDogNDAwLFxuICAgIGFjY2VwdFRyYWNraW5nIDogZmFsc2UsXG5cbiAgICAvLyBJbml0aWFsaXplIGNvb2tpZSBoYW5kbGVyXG4gICAgaW5pdCA6IGZ1bmN0aW9uKClcbiAgICB7XG4gICAgICAgIC8vIEJpbmQgY29va2llIGJhciBvciBvdmVybGF5IHRvIGNvb2tpZU1lc3NhZ2VcbiAgICAgICAgQ29va2llSGFuZGxlci5jb29raWVNZXNzYWdlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLWNvb2tpZS1iYXIsIC5qcy1jb29raWUtb3ZlcmxheScpO1xuXG4gICAgICAgIC8vIEJpbmQgY29va2llIGJhciB0byBjb29raWVCYXJcbiAgICAgICAgQ29va2llSGFuZGxlci5jb29raWVCYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtY29va2llLWJhcicpO1xuXG4gICAgICAgIC8vIElmIGlzc2V0IGluaXQgdGhlIGZ1bmN0aW9ucyBmb3IgY29va2llIGJhclxuICAgICAgICBpZihpc3NldChDb29raWVIYW5kbGVyLmNvb2tpZUJhcikpe1xuICAgICAgICAgICAgQ29va2llSGFuZGxlci5pbml0Q29va2llQmFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIC8vIEVsc2UgdHJ5IHRvIGNvbm5lY3QgY29va2llIG92ZXJsYXkgd2l0aCB0cmFja2luZyB0byBjb29raWVPdmVybGF5XG4gICAgICAgICAgICBDb29raWVIYW5kbGVyLmNvb2tpZU92ZXJsYXkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtY29va2llLW92ZXJsYXknKTtcblxuICAgICAgICAgICAgLy8gSWYgaXNzZXQgaW5pdCB0aGUgZnVuY3Rpb25zIGZvciBjb29raWUgb3ZlcmxheVxuICAgICAgICAgICAgaWYoaXNzZXQoQ29va2llSGFuZGxlci5jb29raWVPdmVybGF5KSl7XG4gICAgICAgICAgICAgICAgQ29va2llSGFuZGxlci5pbml0Q29va2llT3ZlcmxheSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgZWl0aGVyIHR5cGUgb2YgY29va2llIGhhcyBiZWVuIGZvdW5kIGNoZWNrIGlmIHNldHRpbmdzIGFyZSBkZWZpbmVkXG4gICAgICAgIGlmKGlzc2V0KENvb2tpZUhhbmRsZXIuY29va2llTWVzc2FnZSkpe1xuICAgICAgICAgICAgQ29va2llSGFuZGxlci5jaGVja0ZvckNvb2tpZVNldHRpbmdzKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCaW5kIGNvb2tpZSBzd2l0Y2ggdG8gSGFuZGxlclxuICAgICAgICBDb29raWVIYW5kbGVyLmNvb2tpZVN3aXRjaCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qcy1jb29raWUtc3dpdGNoJyk7XG4gICAgICAgIC8vIElmIGlzc2V0IGluaXQgdGhlIGZ1bmN0aW9ucyBmb3IgY29va2llIHN3aXRjaFxuICAgICAgICBpZihpc3NldChDb29raWVIYW5kbGVyLmNvb2tpZVN3aXRjaCkpe1xuICAgICAgICAgICAgQ29va2llSGFuZGxlci5pbml0Q29va2llU3dpdGNoKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gSW5pdCB0aGUgY29va2llIGJhciBhY3Rpb25zXG4gICAgaW5pdENvb2tpZUJhcjogZnVuY3Rpb24oKXtcbiAgICAgICAgY29uc3QgY2xvc2VCdXR0b24gPSBDb29raWVIYW5kbGVyLmNvb2tpZUJhci5xdWVyeVNlbGVjdG9yKCcuanMtZGlzYWJsZS1jb29raWUtYmFyJyk7XG4gICAgICAgIGlmKGlzc2V0KGNsb3NlQnV0dG9uKSl7XG4gICAgICAgICAgICBjbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIENvb2tpZUhhbmRsZXIuY2xvc2VDb29raWVNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBJbml0IHRoZSBjb29raWUgb3ZlcmxheSBhY3Rpb25zXG4gICAgaW5pdENvb2tpZU92ZXJsYXk6IGZ1bmN0aW9uKCl7XG5cbiAgICAgICAgLy8gT3BlbiB0aGUgY29va2llIHNldHRpbmdzIGV2ZW50XG4gICAgICAgIGNvbnN0IG9wZW5Db29raWVTZXR0aW5nc0J1dHRvbiA9IENvb2tpZUhhbmRsZXIuY29va2llTWVzc2FnZS5xdWVyeVNlbGVjdG9yKCcuanMtY2hhbmdlLWNvb2tpZXMtc2V0dGluZ3MnKTtcbiAgICAgICAgaWYoaXNzZXQob3BlbkNvb2tpZVNldHRpbmdzQnV0dG9uKSl7XG4gICAgICAgICAgICBvcGVuQ29va2llU2V0dGluZ3NCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBDb29raWVIYW5kbGVyLm9wZW5Db29raWVTZXR0aW5ncyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUb2dnbGUgb2YgdGhlIHRyYWNraW5nIGlucHV0XG4gICAgICAgIGNvbnN0IHRvZ2dsZVRyYWNraW5nSW5wdXQgPSBDb29raWVIYW5kbGVyLmNvb2tpZU1lc3NhZ2UucXVlcnlTZWxlY3RvcignLmMtY29va2llLXR5cGVfX2lucHV0LS10cmFja2luZycpO1xuICAgICAgICBpZihpc3NldCh0b2dnbGVUcmFja2luZ0lucHV0KSl7XG5cbiAgICAgICAgICAgIGlmKHRvZ2dsZVRyYWNraW5nSW5wdXQuY2hlY2tlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIENvb2tpZUhhbmRsZXIuYWNjZXB0VHJhY2tpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b2dnbGVUcmFja2luZ0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIENvb2tpZUhhbmRsZXIudG9nZ2xlVHJhY2tpbmdTZXR0aW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFjY2VwdCAvIFNhdmUgY29va2llcyBidXR0b24gZXZlbnRcbiAgICAgICAgY29uc3QgYWNjZXB0QnV0dG9uID0gQ29va2llSGFuZGxlci5jb29raWVNZXNzYWdlLnF1ZXJ5U2VsZWN0b3IoJy5qcy1hY2NlcHQtY29va2llcycpO1xuICAgICAgICBpZihpc3NldChhY2NlcHRCdXR0b24pKXtcbiAgICAgICAgICAgIGFjY2VwdEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIENvb2tpZUhhbmRsZXIuc2V0Q29va2llU2V0dGluZ3MpO1xuICAgICAgICB9XG5cbiAgICB9LFxuXG4gICAgLy8gSW5pdCB0aGUgY29va2llIHN3aXRjaCBhY3Rpb25zXG4gICAgaW5pdENvb2tpZVN3aXRjaDogZnVuY3Rpb24oKXtcblxuICAgICAgICAvLyBUb2dnbGUgb2YgdGhlIHRyYWNraW5nIGlucHV0XG4gICAgICAgIGNvbnN0IHRvZ2dsZVRyYWNraW5nSW5wdXQgPSBDb29raWVIYW5kbGVyLmNvb2tpZVN3aXRjaC5xdWVyeVNlbGVjdG9yKCcuYy1jb29raWUtdHlwZV9faW5wdXQtLXRyYWNraW5nJyk7XG4gICAgICAgIGlmKGlzc2V0KHRvZ2dsZVRyYWNraW5nSW5wdXQpKXtcblxuICAgICAgICAgICAgLy8gRm9yY2UgdGhlIHN0YXRlIG9mIHRoZSBjb29raWUgc3dpdGNoIGlucHV0IGJlY2F1c2UgdGhlIHBvcC11cCBpcyBmb3JjZWQgb24gY2hlY2tlZFxuICAgICAgICAgICAgLy8gd2hpbGUgdGhlIHN3aXRjaCBjaGVja3MgYnkgcGhwIGlmIHRoZSBjb29raWUgcmVhbGx5IGV4aXN0IG9yIG5vdFxuICAgICAgICAgICAgaWYodG9nZ2xlVHJhY2tpbmdJbnB1dC5jaGVja2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgQ29va2llSGFuZGxlci5hY2NlcHRUcmFja2luZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIENvb2tpZUhhbmRsZXIuYWNjZXB0VHJhY2tpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG9nZ2xlVHJhY2tpbmdJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBDb29raWVIYW5kbGVyLnRvZ2dsZVRyYWNraW5nU2V0dGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTYXZlIGNvb2tpZXMgYnV0dG9uIGV2ZW50XG4gICAgICAgIGNvbnN0IHNhdmVCdXR0b24gPSBDb29raWVIYW5kbGVyLmNvb2tpZVN3aXRjaC5xdWVyeVNlbGVjdG9yKCcuanMtc2F2ZS1jb29raWUtc2V0dGluZ3MnKTtcbiAgICAgICAgaWYoaXNzZXQoc2F2ZUJ1dHRvbikpe1xuICAgICAgICAgICAgc2F2ZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgQ29va2llSGFuZGxlci5jb29raWVGYWRlT3V0QW5pbWF0aW9uRHVyYXRpb24gPSAwOyAvLyBPbiB0aGUgc3dpdGNoIGNsaWNrIHdlIHdhbnQgbm8gZGVsYXkgOilcbiAgICAgICAgICAgICAgICBDb29raWVIYW5kbGVyLnNldENvb2tpZVNldHRpbmdzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgfSxcblxuICAgIGNoZWNrRm9yQ29va2llU2V0dGluZ3M6IGZ1bmN0aW9uKCl7XG4gICAgICAgIGlmIChDb29raWUuZ2V0KCdjb29raWVNZXNzYWdlJykpIHtcbiAgICAgICAgICAgIENvb2tpZUhhbmRsZXIuY29va2llTWVzc2FnZS5jbGFzc0xpc3QuYWRkKCdpcy1hY2NlcHRlZCcpO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdpcy1jb29raWVzLWFjY2VwdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBDb29raWVIYW5kbGVyLmNvb2tpZU1lc3NhZ2UuY2xhc3NMaXN0LnJlbW92ZSgnaXMtYWNjZXB0ZWQnKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnaXMtY29va2llcy1hY2NlcHRlZCcpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGNsb3NlQ29va2llTWVzc2FnZTogZnVuY3Rpb24gKCl7XG4gICAgICAgIENvb2tpZS5zZXQoJ2Nvb2tpZU1lc3NhZ2UnLCB0cnVlLCA5MCk7XG4gICAgICAgIENvb2tpZUhhbmRsZXIuY29va2llTWVzc2FnZS5jbGFzc0xpc3QuYWRkKCdpcy10cmFuc2l0aW9uaW5nLW91dCcpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2lzLWNvb2tpZXMtYWNjZXB0ZWQnKTtcbiAgICB9LFxuXG4gICAgb3BlbkNvb2tpZVNldHRpbmdzOiBmdW5jdGlvbiAoKXtcbiAgICAgICAgQ29va2llSGFuZGxlci5jb29raWVPdmVybGF5LnF1ZXJ5U2VsZWN0b3IoJy5qcy1jb29raWUtc2V0dGluZ3MnKS5jbGFzc0xpc3QucmVtb3ZlKCdpcy1oaWRkZW4nKTtcbiAgICAgICAgQ29va2llSGFuZGxlci5jb29raWVPdmVybGF5LnF1ZXJ5U2VsZWN0b3IoJy5qcy1jb29raWUtaW5mbycpLmNsYXNzTGlzdC5hZGQoJ2lzLWhpZGRlbicpO1xuICAgIH0sXG5cbiAgICB0b2dnbGVUcmFja2luZ1NldHRpbmc6IGZ1bmN0aW9uKCl7XG4gICAgICAgIGlmKENvb2tpZUhhbmRsZXIuYWNjZXB0VHJhY2tpbmcpe1xuICAgICAgICAgICAgQ29va2llSGFuZGxlci5hY2NlcHRUcmFja2luZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgICBDb29raWVIYW5kbGVyLmFjY2VwdFRyYWNraW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRDb29raWVTZXR0aW5nczogZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIC8vIFNldCB0cmFja2luZyBjb29raWUgb3IgZGVsZXRlIGl0IGlmIGlzc2V0IGFjY29yZGluZyB0byB0aGUgZGVzaXJlZCBzZXR0aW5nc1xuICAgICAgICBpZihDb29raWVIYW5kbGVyLmFjY2VwdFRyYWNraW5nKXtcbiAgICAgICAgICAgIENvb2tpZS5zZXQoJ3RyYWNraW5nQ29va2llQWNjZXB0ZWQnLCAndHJ1ZScsIDkwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgICAgaWYoQ29va2llLmdldCgndHJhY2tpbmdDb29raWVBY2NlcHRlZCcpKXtcbiAgICAgICAgICAgICAgICBDb29raWUuZXJhc2UoJ3RyYWNraW5nQ29va2llQWNjZXB0ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIENvb2tpZUhhbmRsZXIuY2xvc2VDb29raWVNZXNzYWdlKCk7XG5cbiAgICAgICAgLy8gUmVsb2FkIGFmdGVyIGFuaW1hdGlvbiB0byBhdXRvbWF0aWNhbGx5IHRyaWdnZXIgdGhlIHRyYWNraW5nIGFmdGVyIGFjY2VwdGluZyBpdFxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKVxuICAgICAgICB9LCBDb29raWVIYW5kbGVyLmNvb2tpZUZhZGVPdXRBbmltYXRpb25EdXJhdGlvbik7XG4gICAgfSxcblxufTtcblxuQ29va2llSGFuZGxlci5pbml0KCk7Il0sInNvdXJjZVJvb3QiOiIifQ==