pup-recorder 0.6.2 → 0.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
- (function(){'use strict';function v(n){queueMicrotask(()=>{Object.defineProperty(n,"error",{configurable:true,value:{code:4,message:"audio disabled in deterministic mode"}}),n.dispatchEvent(new Event("error"));});}function U(n){let t=document.createElement("audio");return t.preload="none",n&&(t.src=n,v(t)),t}function L(){let n=window.Audio;window.Audio=U,window.Audio.prototype=n.prototype;let t=HTMLAudioElement.prototype;t.load=function(){v(this);},t.play=function(){return v(this),Promise.reject(new DOMException("audio disabled in deterministic mode","NotSupportedError"))};}function O(){window.__HF_MODE__="export";}function C(){if(window.__pup_tick__)return;let n=Date,t=n.now(),e=0,r=0,a=[],o={},i=1,f=()=>(r+=.01,r);function m(...c){return this instanceof m?c.length?new(Function.prototype.bind.apply(n,[null,...c])):new n(t+e+f()):new n(t+e).toString()}m.prototype=n.prototype,m.now=()=>t+e+f(),m.parse=n.parse,m.UTC=n.UTC,window.Date=m,performance.now=()=>e+f(),window.requestAnimationFrame=c=>{let u=i++;return a.push({id:u,cb:c}),u},window.cancelAnimationFrame=c=>{a=a.filter(u=>u.id!==c);},window.setTimeout=(c,u)=>{let d=i++;return o[d]={type:"timeout",cb:c,delay:u||0,next:e+(u||0)},d},window.clearTimeout=c=>{typeof c=="number"&&delete o[c];},window.setInterval=(c,u)=>{let d=i++,h=Math.max(u||0,1);return o[d]={type:"interval",cb:c,delay:h,next:e+h},d},window.clearInterval=c=>{typeof c=="number"&&delete o[c];};function g(c){try{typeof c=="string"?new Function(c)():c();}catch(u){console.error("[Tick] error:",u instanceof Error&&u.stack||u);}}function p(c,u){try{c(u);}catch(d){console.error("[Tick] error:",d instanceof Error&&d.stack||d);}}let b=new WeakMap;function w(c){try{let u=c.effect?.getComputedTiming().endTime;return typeof u=="number"&&Number.isFinite(u)?u:void 0}catch{return}}function y(c){let u;try{u=document.getAnimations();}catch{return}for(let d of u){let h=d.playState;if(h==="idle"||h==="finished"){b.delete(d);continue}let T=typeof d.playbackRate=="number"?d.playbackRate:1;if(T===0)continue;let E=b.get(d);if(E){if(!E.adopted&&h!=="paused"){let H=typeof d.currentTime=="number"?d.currentTime:0;E.startMs=c-H/T,E.adopted=true;try{d.pause();}catch{}}}else {let H=typeof d.currentTime=="number"?d.currentTime:0;if(E={startMs:c-H/T,adopted:h!=="paused"},b.set(d,E),E.adopted)try{d.pause();}catch{}}if(!E.adopted)continue;let x=(c-E.startMs)*T,A=w(d);if(T>0?A!==void 0&&x>=A:x<=0){b.delete(d);try{d.finish();}catch{}continue}d.currentTime=x;}}function s(c){e=c,r=0;for(let d of Object.keys(o)){let h=o[Number(d)];if(h)for(;h.next<=e;){if(g(h.cb),h.type==="timeout"){delete o[Number(d)];break}h.next+=h.delay;}}let u=a.splice(0);for(let d of u)p(d.cb,e);y(e);}window.__pup_tick__={process:s};}var G=["borderRadius","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","transform","transformOrigin","filter","clipPath","boxShadow","opacity","mixBlendMode","mask","zIndex","position","left","top","right","bottom"];function F(n){return n.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}function k(n,t){let e=window.getComputedStyle(n);t.style.position="absolute",t.style.left=`${n.offsetLeft}px`,t.style.top=`${n.offsetTop}px`,t.style.width=`${n.offsetWidth}px`,t.style.height=`${n.offsetHeight}px`;for(let m of G){if(m==="position"||m==="left"||m==="top"||m==="right"||m==="bottom")continue;let g=e.getPropertyValue(F(m));g&&t.style.setProperty(F(m),g);}let r=n.getBoundingClientRect(),a=window.devicePixelRatio||1,o=Math.max(1,Math.round(r.width*a)),i=Math.max(1,Math.round(r.height*a)),f=false;return t.width!==o&&(t.width=o,f=true),t.height!==i&&(t.height=i,f=true),f}function D(n,t){let e=document.createElement("canvas");if(e.dataset.pupVideoOverlay="1",e.style.pointerEvents="none",n.style.visibility="hidden",n.muted=true,(n.parentNode||document.body).insertBefore(e,n.nextSibling),k(n,e),t)try{e.getContext("2d").drawImage(t,0,0,e.width,e.height);}catch{}return e}function P(n,t,e,r,a){if(a==="none")return [(e-n)/2,(r-t)/2,n,t];if(a==="contain"||a==="scale-down"){let o=Math.min(e/n,r/t),i=a==="scale-down"?Math.min(1,o):o,f=i*n,m=i*t;return [(e-f)/2,(r-m)/2,f,m]}if(a==="cover"){let o=Math.max(e/n,r/t),i=o*n,f=o*t;return [(e-i)/2,(r-f)/2,i,f]}return [0,0,e,r]}var M="pup-frame://";var I="[VideoHook]";function V(n){return {length:n>0?1:0,start:()=>0,end:()=>n}}function l(n,t){n.dispatchEvent(new Event(t));}function K(n){if(n.rvfc.size===0)return;let t=[...n.rvfc.values()];n.rvfc.clear();let e=performance.now(),r={presentationTime:e,expectedDisplayTime:e,width:n.meta.frameWidth,height:n.meta.frameHeight,mediaTime:n.currentTime,presentedFrames:n.presentedFrames};for(let a of t)a(e,r);}async function Q(n,t,e,r){let a=n.cache.cacheOf(e.meta.id);a.readers.set(e,r);let o=a.bitmaps.get(r);if(!o){n.cache.prefetch(e,r+1,9);let m=await n.cache.fetch(e,r);if(n.sessions.get(t)!==e)return;if(!m){!e.paused&&!e.waiting&&(e.waiting=true,l(t,"waiting"));return}o=m;}e.waiting&&(e.waiting=false,e.paused||l(t,"playing"));let i=e.cv,f=P(o.width,o.height,i.width,i.height,e.objectFit);e.ctx.clearRect(0,0,i.width,i.height),e.ctx.drawImage(o,f[0],f[1],f[2],f[3]),e.lastDrawnIdx=r,e.presentedFrames++,K(e),n.cache.prefetch(e,r+1,10),n.cache.evict(a);}function N(n,t){let e=Math.max(0,t-n.currMs)/1e3;n.currMs=t;let r=[];return document.querySelectorAll("video").forEach(a=>{let o=a,i=n.sessions.get(o);if(!i||i.dead||(k(o,i.cv)&&(i.lastDrawnIdx=-1),!i.meta))return;if(i.meta.frameWidth<i.meta.width&&i.cv.width>i.meta.frameWidth*1.05&&!n.attaching.has(o)){n.reattach(o,i);return}!i.paused&&!i.ended&&(i.currentTime+=e*(o.playbackRate||1),i.maxReached=Math.max(i.maxReached,i.currentTime),i.currentTime>=i.meta.duration?o.loop?i.currentTime=i.currentTime%i.meta.duration:(i.currentTime=i.meta.duration,i.paused=true,i.ended=true,l(o,"ended")):l(o,"timeupdate"));let f=Math.max(1,Math.round(i.currentTime*i.meta.fps));f!==i.lastDrawnIdx&&r.push(Q(n,o,i,f));}),Promise.all(r)}var S=class{_caches=new Map;cacheOf(t){let e=this._caches.get(t);return e||(e={bitmaps:new Map,inFlight:new Map,readers:new Map},this._caches.set(t,e)),e}fetch(t,e){let r=t.meta;if(!r)return Promise.resolve(void 0);let a=this.cacheOf(r.id),o=a.inFlight.get(e);if(o)return o;let i=a.bitmaps.get(e);if(i)return Promise.resolve(i);let f=r.frameWidth,m=r.frameHeight,g=fetch(`${M}frame?id=${r.id}&idx=${e}`).then(p=>p.ok?p.arrayBuffer():void 0).then(p=>p&&p.byteLength===f*m*4?createImageBitmap(new ImageData(new Uint8ClampedArray(p),f,m)):void 0).then(p=>(a.inFlight.delete(e),p&&a.bitmaps.set(e,p),p)).catch(()=>{a.inFlight.delete(e);});return a.inFlight.set(e,g),g}prefetch(t,e,r){let a=t.meta;if(!a)return;let o=Math.max(1,Math.round(a.duration*a.fps));for(let i=e;i<e+r;i++)i<1||i>o||this.fetch(t,i);}evict(t){let e=1/0;if(t.readers.forEach(a=>{a<e&&(e=a);}),!Number.isFinite(e))return;let r=e-2;t.bitmaps.forEach((a,o)=>{o<r&&(a.close(),t.bitmaps.delete(o));});}release(t,e){let r=this._caches.get(t);r&&(r.readers.delete(e),!(r.readers.size>0)&&(r.bitmaps.forEach(a=>{a.close();}),this._caches.delete(t),fetch(`${M}close?id=${t}`,{keepalive:true})));}};function $(n){let t=HTMLVideoElement.prototype,e=HTMLMediaElement.prototype,r=s=>Object.getOwnPropertyDescriptor(t,s)||Object.getOwnPropertyDescriptor(e,s),a=r("currentTime"),o=r("src"),i=r("playbackRate"),f=t.pause,m=t.requestVideoFrameCallback,g=t.cancelVideoFrameCallback,p=t.getVideoPlaybackQuality,b=t.load,w=n.sessions,y=(s,c)=>{let u=r(s)?.get;if(!u)throw new Error(`media_shim: no native getter for ${s}`);Object.defineProperty(t,s,{configurable:true,get(){let d=w.get(this);return d?c(d):u.call(this)}});};if(y("paused",s=>s.paused),y("ended",s=>s.ended),y("readyState",s=>s.readyState),y("networkState",s=>s.networkState),y("error",s=>s.error??null),y("seeking",s=>s.seeking),y("buffered",s=>V(s.meta?s.meta.duration:0)),y("seekable",s=>V(s.meta?s.meta.duration:0)),y("played",s=>V(s.maxReached)),t.play=function(){let s=w.get(this);return s?(n.resume(this,s),Promise.resolve()):n.attach(this).then(c=>{c&&n.resume(this,c);})},t.pause=function(){let s=w.get(this);if(!s){f.call(this);return}s.paused||(s.paused=true,l(this,"pause"));},a?.get&&a.set){let s=a.get,c=a.set;Object.defineProperty(t,"currentTime",{configurable:true,get(){let u=w.get(this);return u?u.currentTime:s.call(this)},set(u){let d=w.get(this);if(!d){c.call(this,u);return}let h=d.meta?d.meta.duration:u;d.currentTime=Math.max(0,Math.min(u,h)),d.maxReached=Math.max(d.maxReached,d.currentTime),d.currentTime<h&&(d.ended=false),d.seeking=true,l(this,"seeking"),d.seeking=false,l(this,"seeked"),l(this,"timeupdate");}});}if(i?.set){let s=i.set;Object.defineProperty(t,"playbackRate",{configurable:true,get:i.get,set(c){s.call(this,c),w.has(this)&&l(this,"ratechange");}});}if(t.requestVideoFrameCallback=function(s){let c=w.get(this);if(!c)return m.call(this,s);let u=++n.rvfcSeq;return c.rvfc.set(u,s),u},t.cancelVideoFrameCallback=function(s){let c=w.get(this);if(!c){g.call(this,s);return}c.rvfc.delete(s);},t.getVideoPlaybackQuality=function(){let s=w.get(this);return s?{creationTime:performance.now(),totalVideoFrames:s.presentedFrames,droppedVideoFrames:0,corruptedVideoFrames:0}:p.call(this)},t.load=function(){if(!w.has(this))return b.call(this);n.detach(this),l(this,"emptied"),this.__pupLastSrc=void 0,n.attach(this);},o?.set){let s=o.set;Object.defineProperty(t,"src",{configurable:true,get:o.get,set(c){s.call(this,c),n.onSrcChange(this);}});}}function W(n,t){return {meta:void 0,cv:t,ctx:t.getContext("2d"),paused:!(n.autoplay||!n.paused),currentTime:0,ended:false,lastDrawnIdx:-1,dead:false,objectFit:window.getComputedStyle(n).objectFit||"fill",readyState:0,networkState:0,seeking:false,waiting:false,error:void 0,presentedFrames:0,maxReached:0,rvfc:new Map}}function j(n,t,e){t.dead=true,t.error=e,t.networkState=3,console.error(I,`${e.message} src=${n.src||n.currentSrc}`),l(n,"error");}async function q(n,t){let{video:e,state:r,src:a,birthMs:o,native:i}=t,f=Number.parseInt(e.dataset.pupFps||"30",10);r.networkState=2,l(e,"loadstart");let m;try{let b=i?"":`&w=${r.cv.width}&h=${r.cv.height}&fit=${encodeURIComponent(r.objectFit)}`;m=await fetch(`${M}open?src=${encodeURIComponent(a)}&fps=${f}${b}`);}catch(b){return j(e,r,{code:2,message:`open failed: ${b instanceof Error?b.message:String(b)}`})}if(n.sessions.get(e)!==r)return;if(!m.ok)return j(e,r,{code:3,message:`open ${m.status}: ${await m.text()}`});let g=await m.json();if(n.sessions.get(e)!==r)return;r.meta=g,r.currentTime=r.paused?0:Math.max(0,(n.currMs-o)/1e3);let p=e.videoWidth>0;return Object.defineProperty(e,"videoWidth",{value:g.width,configurable:true}),Object.defineProperty(e,"videoHeight",{value:g.height,configurable:true}),Object.defineProperty(e,"duration",{value:g.duration,configurable:true}),r.readyState=1,p||(l(e,"durationchange"),l(e,"loadedmetadata")),r.readyState=4,p||(l(e,"loadeddata"),l(e,"canplay"),l(e,"canplaythrough")),r.networkState=1,p||(l(e,"suspend"),r.paused||(l(e,"play"),l(e,"playing"))),n.cache.prefetch(r,1,10),r}var R=class{sessions=new WeakMap;attaching=new WeakMap;opening=new Set;cache=new S;rvfcSeq=0;currMs=0;_lastSnapshot=new WeakMap;install(){$(this),this.scan(document.documentElement),new MutationObserver(t=>{for(let e of t){if(e.type==="attributes"&&e.target instanceof HTMLVideoElement&&e.attributeName==="src"){this.onSrcChange(e.target);continue}e.addedNodes.forEach(r=>{r instanceof Element&&this.scan(r);}),e.removedNodes.forEach(r=>{r instanceof HTMLVideoElement&&this.detach(r);});}}).observe(document,{subtree:true,childList:true,attributes:true,attributeFilter:["src"]}),window.__pup_video__={advance:t=>N(this,t),ready:()=>this.ready()};}attach(t,e=false){let r=this.sessions.get(t);if(r)return Promise.resolve(r);let a=this.attaching.get(t);if(a)return a;let o=t.src||t.currentSrc;if(!o||/^(blob:|data:|mediastream:)/i.test(o))return Promise.resolve(void 0);let i=D(t,this._lastSnapshot.get(t)),f=W(t,i);this.sessions.set(t,f);let m=q(this,{video:t,state:f,src:o,birthMs:this.currMs,native:e}).finally(()=>{this.attaching.delete(t),this.opening.delete(m);});return this.attaching.set(t,m),this.opening.add(m),m}async ready(){await Promise.allSettled([...this.opening]);}resume(t,e){!e.paused&&!e.ended||(e.paused=false,e.ended=false,l(t,"play"),l(t,"playing"));}detach(t){let e=this.sessions.get(t);if(e){if(e.meta){if(e.lastDrawnIdx>=0)try{let r=new OffscreenCanvas(e.cv.width,e.cv.height),a=r.getContext("2d");if(!a)throw new Error("no 2d context");a.drawImage(e.cv,0,0),this._lastSnapshot.set(t,r);}catch{}this.cache.release(e.meta.id,e);}e.cv.remove(),this.sessions.delete(t),this.attaching.delete(t);}}onSrcChange(t){let e=t.src||t.currentSrc||"";t.__pupLastSrc!==e&&(t.__pupLastSrc=e,this.sessions.has(t)&&this.detach(t),this.attach(t));}reattach(t,e){let r=e.currentTime,a=e.paused,o=e.ended;this.detach(t),this.attach(t,true).then(i=>{i&&(i.currentTime=r,i.paused=a,i.ended=o);});}scan(t){t&&(t.tagName==="VIDEO"&&this.attach(t),t.querySelectorAll&&t.querySelectorAll("video").forEach(e=>{this.attach(e);}));}};function B(){window.__pup_video__||new R().install();}window.self!==window.top&&(L(),O(),C(),B());
1
+ (function(){'use strict';function v(n){queueMicrotask(()=>{Object.defineProperty(n,"error",{configurable:true,value:{code:4,message:"audio disabled in deterministic mode"}}),n.dispatchEvent(new Event("error"));});}function U(n){let t=document.createElement("audio");return t.preload="none",n&&(t.src=n,v(t)),t}function L(){let n=window.Audio;window.Audio=U,window.Audio.prototype=n.prototype;let t=HTMLAudioElement.prototype;t.load=function(){v(this);},t.play=function(){return v(this),Promise.reject(new DOMException("audio disabled in deterministic mode","NotSupportedError"))};}function O(){window.__HF_MODE__="export";}function C(){if(window.__pup_tick__)return;let n=Date,t=n.now(),e=0,r=0,a=[],o={},i=1,l=()=>(r+=.01,r);function m(...c){return this instanceof m?c.length?new(Function.prototype.bind.apply(n,[null,...c])):new n(t+e+l()):new n(t+e).toString()}m.prototype=n.prototype,m.now=()=>t+e+l(),m.parse=n.parse,m.UTC=n.UTC,window.Date=m,performance.now=()=>e+l(),window.requestAnimationFrame=c=>{let u=i++;return a.push({id:u,cb:c}),u},window.cancelAnimationFrame=c=>{a=a.filter(u=>u.id!==c);},window.setTimeout=(c,u)=>{let d=i++;return o[d]={type:"timeout",cb:c,delay:u||0,next:e+(u||0)},d},window.clearTimeout=c=>{typeof c=="number"&&delete o[c];},window.setInterval=(c,u)=>{let d=i++,h=Math.max(u||0,1);return o[d]={type:"interval",cb:c,delay:h,next:e+h},d},window.clearInterval=c=>{typeof c=="number"&&delete o[c];};function g(c){try{typeof c=="string"?new Function(c)():c();}catch(u){console.error("[Tick] error:",u instanceof Error&&u.stack||u);}}function p(c,u){try{c(u);}catch(d){console.error("[Tick] error:",d instanceof Error&&d.stack||d);}}let b=new WeakMap;function w(c){try{let u=c.effect?.getComputedTiming().endTime;return typeof u=="number"&&Number.isFinite(u)?u:void 0}catch{return}}function y(c){let u;try{u=document.getAnimations();}catch{return}for(let d of u){let h=d.playState;if(h==="idle"||h==="finished"){b.delete(d);continue}let T=typeof d.playbackRate=="number"?d.playbackRate:1;if(T===0)continue;let E=b.get(d);if(E){if(!E.adopted&&h!=="paused"){let H=typeof d.currentTime=="number"?d.currentTime:0;E.startMs=c-H/T,E.adopted=true;try{d.pause();}catch{}}}else {let H=typeof d.currentTime=="number"?d.currentTime:0;if(E={startMs:c-H/T,adopted:h!=="paused"},b.set(d,E),E.adopted)try{d.pause();}catch{}}if(!E.adopted)continue;let S=(c-E.startMs)*T,A=w(d);if(T>0?A!==void 0&&S>=A:S<=0){b.delete(d);try{d.finish();}catch{}continue}d.currentTime=S;}}function s(c){e=c,r=0;for(let d of Object.keys(o)){let h=o[Number(d)];if(h)for(;h.next<=e;){if(g(h.cb),h.type==="timeout"){delete o[Number(d)];break}h.next+=h.delay;}}let u=a.splice(0);for(let d of u)p(d.cb,e);y(e);}window.__pup_tick__={process:s};}var G=["borderRadius","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","transform","transformOrigin","filter","clipPath","boxShadow","opacity","mixBlendMode","mask","zIndex","position","left","top","right","bottom"];function F(n){return n.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}function k(n,t){let e=window.getComputedStyle(n);t.style.position="absolute",t.style.left=`${n.offsetLeft}px`,t.style.top=`${n.offsetTop}px`,t.style.width=`${n.offsetWidth}px`,t.style.height=`${n.offsetHeight}px`;for(let m of G){if(m==="position"||m==="left"||m==="top"||m==="right"||m==="bottom")continue;let g=e.getPropertyValue(F(m));g&&t.style.setProperty(F(m),g);}let r=n.getBoundingClientRect(),a=window.devicePixelRatio||1,o=Math.max(1,Math.round(r.width*a)),i=Math.max(1,Math.round(r.height*a)),l=false;return t.width!==o&&(t.width=o,l=true),t.height!==i&&(t.height=i,l=true),l}function D(n,t){let e=document.createElement("canvas");if(e.dataset.pupVideoOverlay="1",e.style.pointerEvents="none",n.style.visibility="hidden",n.muted=true,(n.parentNode||document.body).insertBefore(e,n.nextSibling),k(n,e),t)try{e.getContext("2d").drawImage(t,0,0,e.width,e.height);}catch{}return e}function P(n,t,e,r,a){if(a==="none")return [(e-n)/2,(r-t)/2,n,t];if(a==="contain"||a==="scale-down"){let o=Math.min(e/n,r/t),i=a==="scale-down"?Math.min(1,o):o,l=i*n,m=i*t;return [(e-l)/2,(r-m)/2,l,m]}if(a==="cover"){let o=Math.max(e/n,r/t),i=o*n,l=o*t;return [(e-i)/2,(r-l)/2,i,l]}return [0,0,e,r]}var M="pup-frame://";var I="[VideoHook]";function _(n){return {length:n>0?1:0,start:()=>0,end:()=>n}}function f(n,t){n.dispatchEvent(new Event(t));}function K(n){if(n.rvfc.size===0)return;let t=[...n.rvfc.values()];n.rvfc.clear();let e=performance.now(),r={presentationTime:e,expectedDisplayTime:e,width:n.meta.frameWidth,height:n.meta.frameHeight,mediaTime:n.currentTime,presentedFrames:n.presentedFrames};for(let a of t)a(e,r);}async function Q(n,t,e,r){let a=n.cache.cacheOf(e.meta.id);a.readers.set(e,r);let o=a.bitmaps.get(r);if(!o){n.cache.prefetch(e,r+1,9);let m=await n.cache.fetch(e,r);if(n.sessions.get(t)!==e)return;if(!m){!e.paused&&!e.waiting&&(e.waiting=true,f(t,"waiting"));return}o=m;}e.waiting&&(e.waiting=false,e.paused||f(t,"playing"));let i=e.cv,l=P(o.width,o.height,i.width,i.height,e.objectFit);e.ctx.clearRect(0,0,i.width,i.height),e.ctx.drawImage(o,l[0],l[1],l[2],l[3]),e.lastDrawnIdx=r,e.presentedFrames++,K(e),n.cache.prefetch(e,r+1,10),n.cache.evict(a);}function N(n,t){let e=Math.max(0,t-n.currMs)/1e3;n.currMs=t;let r=[];return document.querySelectorAll("video").forEach(a=>{let o=a,i=n.sessions.get(o);if(!i||i.dead||(k(o,i.cv)&&(i.lastDrawnIdx=-1),!i.meta))return;if(i.meta.frameWidth<i.meta.width&&i.cv.width>i.meta.frameWidth*1.05&&!n.attaching.has(o)){n.reattach(o,i);return}!i.paused&&!i.ended&&(i.currentTime+=e*(o.playbackRate||1),i.maxReached=Math.max(i.maxReached,i.currentTime),i.currentTime>=i.meta.duration?o.loop?i.currentTime=i.currentTime%i.meta.duration:(i.currentTime=i.meta.duration,i.paused=true,i.ended=true,f(o,"ended")):f(o,"timeupdate"));let l=Math.max(1,Math.round(i.currentTime*i.meta.fps));l!==i.lastDrawnIdx&&r.push(Q(n,o,i,l));}),Promise.all(r)}var x=class{_caches=new Map;cacheOf(t){let e=this._caches.get(t);return e||(e={bitmaps:new Map,inFlight:new Map,readers:new Map},this._caches.set(t,e)),e}fetch(t,e){let r=t.meta;if(!r)return Promise.resolve(void 0);let a=this.cacheOf(r.id),o=a.inFlight.get(e);if(o)return o;let i=a.bitmaps.get(e);if(i)return Promise.resolve(i);let l=r.frameWidth,m=r.frameHeight,g=fetch(`${M}frame?id=${r.id}&idx=${e}`).then(p=>p.ok?p.arrayBuffer():void 0).then(p=>p&&p.byteLength===l*m*4?createImageBitmap(new ImageData(new Uint8ClampedArray(p),l,m)):void 0).then(p=>(a.inFlight.delete(e),p&&a.bitmaps.set(e,p),p)).catch(()=>{a.inFlight.delete(e);});return a.inFlight.set(e,g),g}prefetch(t,e,r){let a=t.meta;if(!a)return;let o=Math.max(1,Math.round(a.duration*a.fps));for(let i=e;i<e+r;i++)i<1||i>o||this.fetch(t,i);}evict(t){let e=1/0;if(t.readers.forEach(a=>{a<e&&(e=a);}),!Number.isFinite(e))return;let r=e-2;t.bitmaps.forEach((a,o)=>{o<r&&(a.close(),t.bitmaps.delete(o));});}release(t,e){let r=this._caches.get(t);r&&(r.readers.delete(e),!(r.readers.size>0)&&(r.bitmaps.forEach(a=>{a.close();}),this._caches.delete(t),fetch(`${M}close?id=${t}`,{keepalive:true})));}};function $(n){let t=HTMLVideoElement.prototype,e=HTMLMediaElement.prototype,r=s=>Object.getOwnPropertyDescriptor(t,s)||Object.getOwnPropertyDescriptor(e,s),a=r("currentTime"),o=r("src"),i=r("playbackRate"),l=t.pause,m=t.requestVideoFrameCallback,g=t.cancelVideoFrameCallback,p=t.getVideoPlaybackQuality,b=t.load,w=n.sessions,y=(s,c)=>{let u=r(s)?.get;if(!u)throw new Error(`media_shim: no native getter for ${s}`);Object.defineProperty(t,s,{configurable:true,get(){let d=w.get(this);return d?c(d):u.call(this)}});};if(y("paused",s=>s.paused),y("ended",s=>s.ended),y("readyState",s=>s.readyState),y("networkState",s=>s.networkState),y("error",s=>s.error??null),y("seeking",s=>s.seeking),y("buffered",s=>_(s.meta?s.meta.duration:0)),y("seekable",s=>_(s.meta?s.meta.duration:0)),y("played",s=>_(s.maxReached)),t.play=function(){let s=w.get(this);return s?(n.resume(this,s),Promise.resolve()):n.attach(this).then(c=>{c&&n.resume(this,c);})},t.pause=function(){let s=w.get(this);if(!s){l.call(this);return}s.paused||(s.paused=true,f(this,"pause"));},a?.get&&a.set){let s=a.get,c=a.set;Object.defineProperty(t,"currentTime",{configurable:true,get(){let u=w.get(this);return u?u.currentTime:s.call(this)},set(u){let d=w.get(this);if(!d){c.call(this,u);return}let h=d.meta?d.meta.duration:u;d.currentTime=Math.max(0,Math.min(u,h)),d.maxReached=Math.max(d.maxReached,d.currentTime),d.currentTime<h&&(d.ended=false),d.seeking=true,f(this,"seeking"),d.seeking=false,f(this,"seeked"),f(this,"timeupdate");}});}if(i?.set){let s=i.set;Object.defineProperty(t,"playbackRate",{configurable:true,get:i.get,set(c){s.call(this,c),w.has(this)&&f(this,"ratechange");}});}if(t.requestVideoFrameCallback=function(s){let c=w.get(this);if(!c)return m.call(this,s);let u=++n.rvfcSeq;return c.rvfc.set(u,s),u},t.cancelVideoFrameCallback=function(s){let c=w.get(this);if(!c){g.call(this,s);return}c.rvfc.delete(s);},t.getVideoPlaybackQuality=function(){let s=w.get(this);return s?{creationTime:performance.now(),totalVideoFrames:s.presentedFrames,droppedVideoFrames:0,corruptedVideoFrames:0}:p.call(this)},t.load=function(){if(!w.has(this))return b.call(this);n.detach(this),f(this,"emptied"),this.__pup_last_src__=void 0,n.attach(this);},o?.set){let s=o.set;Object.defineProperty(t,"src",{configurable:true,get:o.get,set(c){s.call(this,c),n.onSrcChange(this);}});}}function W(n,t){return {meta:void 0,cv:t,ctx:t.getContext("2d"),paused:!(n.autoplay||!n.paused),currentTime:0,ended:false,lastDrawnIdx:-1,dead:false,objectFit:window.getComputedStyle(n).objectFit||"fill",readyState:0,networkState:0,seeking:false,waiting:false,error:void 0,presentedFrames:0,maxReached:0,rvfc:new Map}}function j(n,t,e){t.dead=true,t.error=e,t.networkState=3,console.error(I,`${e.message} src=${n.src||n.currentSrc}`),f(n,"error");}async function q(n,t){let{video:e,state:r,src:a,birthMs:o,native:i}=t,l=Number.parseInt(e.dataset.pupFps||"30",10);r.networkState=2,f(e,"loadstart");let m;try{let b=i?"":`&w=${r.cv.width}&h=${r.cv.height}&fit=${encodeURIComponent(r.objectFit)}`;m=await fetch(`${M}open?src=${encodeURIComponent(a)}&fps=${l}${b}`);}catch(b){return j(e,r,{code:2,message:`open failed: ${b instanceof Error?b.message:String(b)}`})}if(n.sessions.get(e)!==r)return;if(!m.ok)return j(e,r,{code:3,message:`open ${m.status}: ${await m.text()}`});let g=await m.json();if(n.sessions.get(e)!==r)return;r.meta=g,r.currentTime=r.paused?0:Math.max(0,(n.currMs-o)/1e3);let p=e.videoWidth>0;return Object.defineProperty(e,"videoWidth",{value:g.width,configurable:true}),Object.defineProperty(e,"videoHeight",{value:g.height,configurable:true}),Object.defineProperty(e,"duration",{value:g.duration,configurable:true}),r.readyState=1,p||(f(e,"durationchange"),f(e,"loadedmetadata")),r.readyState=4,p||(f(e,"loadeddata"),f(e,"canplay"),f(e,"canplaythrough")),r.networkState=1,p||(f(e,"suspend"),r.paused||(f(e,"play"),f(e,"playing"))),n.cache.prefetch(r,1,10),r}var R=class{sessions=new WeakMap;attaching=new WeakMap;opening=new Set;cache=new x;rvfcSeq=0;currMs=0;_lastSnapshot=new WeakMap;install(){$(this),this.scan(document.documentElement),new MutationObserver(t=>{for(let e of t){if(e.type==="attributes"&&e.target instanceof HTMLVideoElement&&e.attributeName==="src"){this.onSrcChange(e.target);continue}e.addedNodes.forEach(r=>{r instanceof Element&&this.scan(r);}),e.removedNodes.forEach(r=>{r instanceof HTMLVideoElement&&this.detach(r);});}}).observe(document,{subtree:true,childList:true,attributes:true,attributeFilter:["src"]}),window.__pup_video__={advance:t=>N(this,t),ready:()=>this.ready()};}attach(t,e=false){let r=this.sessions.get(t);if(r)return Promise.resolve(r);let a=this.attaching.get(t);if(a)return a;let o=t.src||t.currentSrc;if(!o||/^(blob:|data:|mediastream:)/i.test(o))return Promise.resolve(void 0);let i=D(t,this._lastSnapshot.get(t)),l=W(t,i);this.sessions.set(t,l);let m=q(this,{video:t,state:l,src:o,birthMs:this.currMs,native:e}).finally(()=>{this.attaching.delete(t),this.opening.delete(m);});return this.attaching.set(t,m),this.opening.add(m),m}async ready(){await Promise.allSettled([...this.opening]);}resume(t,e){!e.paused&&!e.ended||(e.paused=false,e.ended=false,f(t,"play"),f(t,"playing"));}detach(t){let e=this.sessions.get(t);if(e){if(e.meta){if(e.lastDrawnIdx>=0)try{let r=new OffscreenCanvas(e.cv.width,e.cv.height),a=r.getContext("2d");if(!a)throw new Error("no 2d context");a.drawImage(e.cv,0,0),this._lastSnapshot.set(t,r);}catch{}this.cache.release(e.meta.id,e);}e.cv.remove(),this.sessions.delete(t),this.attaching.delete(t);}}onSrcChange(t){let e=t.src||t.currentSrc||"";t.__pup_last_src__!==e&&(t.__pup_last_src__=e,this.sessions.has(t)&&this.detach(t),this.attach(t));}reattach(t,e){let r=e.currentTime,a=e.paused,o=e.ended;this.detach(t),this.attach(t,true).then(i=>{i&&(i.currentTime=r,i.paused=a,i.ended=o);});}scan(t){t&&(t.tagName==="VIDEO"&&this.attach(t),t.querySelectorAll&&t.querySelectorAll("video").forEach(e=>{this.attach(e);}));}};function B(){window.__pup_video__||new R().install();}window.self!==window.top&&(L(),O(),C(),B());
2
2
  })();//# sourceMappingURL=shoot.global.js.map
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2F1ZGlvL3NoaW0udHMiLCIuLi8uLi9zcmMvcnVudGltZS9oeXBlcmZyYW1lcy50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3RpY2sudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9vdmVybGF5LnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vdHlwZXMudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9kcml2ZXIudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9mcmFtZV9jYWNoZS50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3ZpZGVvL21lZGlhX3NoaW0udHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9zZXNzaW9uLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vaG9vay50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3Nob290LnRzIl0sIm5hbWVzIjpbImZhaWwiLCJlbCIsIkF1ZGlvU2hpbSIsInVybCIsImluc3RhbGxBdWRpb1NoaW0iLCJOYXRpdmVBdWRpbyIsIkhBRSIsImluc3RhbGxIZkhvb2siLCJpbnN0YWxsVGlja0hvb2siLCJSRUFMX0RBVEUiLCJkYXRlT3JpZ2luIiwiY3Vyck1zIiwidGltZU9mZnNldCIsInJhZlF1ZXVlIiwidGltZXJzIiwibmV4dElkIiwidGljayIsIkZha2VEYXRlIiwiYXJncyIsImNiIiwiaWQiLCJyIiwiZGVsYXkiLCJkIiwic2FmZUludm9rZVRpbWVyIiwiZm4iLCJlIiwic2FmZUludm9rZVJhZiIsInRzIiwiYW5pbVN0YXRlIiwiZW5kQm91bmRhcnkiLCJhIiwidCIsInN5bmNBbmltYXRpb25zIiwibXMiLCJhbmltcyIsInN0YXRlIiwicmF0ZSIsInMiLCJjdCIsImN0MCIsInRhcmdldCIsImVuZCIsInByb2Nlc3MiLCJ0aW1lc3RhbXBNcyIsInJhZnMiLCJNSVJST1JfUFJPUFMiLCJjc3NDYXNlIiwiYyIsInN5bmNPdmVybGF5IiwidmlkZW8iLCJjdiIsImNzIiwicCIsInYiLCJ2ciIsImRwciIsInciLCJoIiwicmVzaXplZCIsInNldHVwQ2FudmFzIiwic25hcCIsImZpdFJlY3QiLCJzcmNXIiwic3JjSCIsImRzdFciLCJkc3RIIiwiZml0Iiwic2MiLCJrIiwid3MiLCJocyIsInNjMiIsIndzMiIsImhzMiIsIlNDSEVNRSIsIlRBRyIsInRpbWVSYW5nZXMiLCJmaXJlIiwidHlwZSIsImZpcmVGcmFtZUNhbGxiYWNrcyIsImNicyIsIm5vdyIsIm1ldGEiLCJwYWludCIsImhvb2siLCJpZHgiLCJibSIsImZldGNoZWQiLCJhZHZhbmNlIiwiZHQiLCJwcyIsIkZyYW1lQ2FjaGUiLCJleGlzdGluZyIsImNhY2hlZCIsImJ1ZiIsImZyb21JZHgiLCJjb3VudCIsIm1heElkeCIsIm1pbklkeCIsImZsb29yIiwiaW5zdGFsbE1lZGlhU2hpbSIsIkhWRSIsIk1FRElBIiwibWRlc2MiLCJjdERlc2MiLCJzcmNEZXNjIiwicmF0ZURlc2MiLCJvcmlnUGF1c2UiLCJvcmlnUlZGQyIsIm9yaWdDYW5jZWxSVkZDIiwib3JpZ1F1YWxpdHkiLCJvcmlnTG9hZCIsInNlc3Npb25zIiwiZGVmIiwicHJvcCIsInBpY2siLCJuYXRpdmVHZXQiLCJucyIsImN0R2V0IiwiY3RTZXQiLCJkdXIiLCJyYXRlU2V0Iiwic3JjU2V0IiwibmV3VmlkZW9TdGF0ZSIsImZhaWxPcGVuIiwiZXJyb3IiLCJvcGVuU2Vzc2lvbiIsInNyYyIsImJpcnRoTXMiLCJuYXRpdmUiLCJmcHMiLCJyZXMiLCJxIiwibmF0aXZlTWV0YSIsIlZpZGVvSG9vayIsIm11dHMiLCJtIiwibiIsInBlbmRpbmciLCJzY3R4IiwicGF1c2VkIiwiZW5kZWQiLCJyb290IiwiaW5zdGFsbFZpZGVvSG9vayJdLCJtYXBwaW5ncyI6InlCQUtBLFNBQVNBLENBQUFBLENBQUtDLEVBQTRCLENBQ3hDLGNBQUEsQ0FBZSxJQUFNLENBQ25CLE1BQUEsQ0FBTyxlQUFlQSxDQUFBQSxDQUFJLE9BQUEsQ0FBUyxDQUNqQyxZQUFBLENBQWMsSUFB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ZSI6InNob290Lmdsb2JhbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC1kIGNhcHR1cmVzIG5vIGF1ZGlvOyBhIGxvYWRpbmcgPGF1ZGlvPiB3b3VsZCBoaXQgdGhlIG1lZGlh4oaSc3R1YiByZWRpcmVjdCwgd2hpY2ggc2VydmVzIHZpZGVvIHN0dWJzIG9ubHkuXG5cbmNvbnN0IFNSQ19OT1RfU1VQUE9SVEVEID0gNDsgLy8gTUVESUFfRVJSX1NSQ19OT1RfU1VQUE9SVEVEXG5cbi8vIE1pcnJvciBhIGZhaWxlZCBuYXRpdmUgbG9hZCBzbyBlcnJvci1oYW5kbGluZyBwYWdlcyBwcm9jZWVkIGV4YWN0bHkgYXMgdGhleSBkbyB3aGVuIHRoZSBzb3VyY2UgaXMgYnJva2VuLlxuZnVuY3Rpb24gZmFpbChlbDogSFRNTEF1ZGlvRWxlbWVudCk6IHZvaWQge1xuICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsLCBcImVycm9yXCIsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiB7IGNvZGU6IFNSQ19OT1RfU1VQUE9SVEVELCBtZXNzYWdlOiBcImF1ZGlvIGRpc2FibGVkIGluIGRldGVybWluaXN0aWMgbW9kZVwiIH0sXG4gICAgfSk7XG4gICAgZWwuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJlcnJvclwiKSk7XG4gIH0pO1xufVxuXG4vLyBUaGUgbmF0aXZlIEF1ZGlvKCkgY29uc3RydWN0b3IgaW52b2tlcyB0aGUgbG9hZCBhbGdvcml0aG0gaW50ZXJuYWxseSwgc28gb25seSBhIGNvbnN0cnVjdG9yIHN3YXAgY2FuIHByZWVtcHQgdGhlIGZldGNoLlxuZnVuY3Rpb24gQXVkaW9TaGltKHVybD86IHN0cmluZyk6IEhUTUxBdWRpb0VsZW1lbnQge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhdWRpb1wiKTtcbiAgZWwucHJlbG9hZCA9IFwibm9uZVwiO1xuICBpZiAodXJsKSB7XG4gICAgZWwuc3JjID0gdXJsO1xuICAgIGZhaWwoZWwpO1xuICB9XG4gIHJldHVybiBlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxBdWRpb1NoaW0oKTogdm9pZCB7XG4gIGNvbnN0IE5hdGl2ZUF1ZGlvID0gd2luZG93LkF1ZGlvO1xuICB3aW5kb3cuQXVkaW8gPSBBdWRpb1NoaW0gYXMgdW5rbm93biBhcyB0eXBlb2YgQXVkaW87XG4gIHdpbmRvdy5BdWRpby5wcm90b3R5cGUgPSBOYXRpdmVBdWRpby5wcm90b3R5cGU7XG5cbiAgY29uc3QgSEFFID0gSFRNTEF1ZGlvRWxlbWVudC5wcm90b3R5cGU7XG4gIEhBRS5sb2FkID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxBdWRpb0VsZW1lbnQpIHtcbiAgICBmYWlsKHRoaXMpO1xuICB9O1xuICBIQUUucGxheSA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MQXVkaW9FbGVtZW50KSB7XG4gICAgZmFpbCh0aGlzKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IERPTUV4Y2VwdGlvbihcImF1ZGlvIGRpc2FibGVkIGluIGRldGVybWluaXN0aWMgbW9kZVwiLCBcIk5vdFN1cHBvcnRlZEVycm9yXCIpKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDcvMTYuXG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX19IRl9NT0RFX18/OiBzdHJpbmc7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxIZkhvb2soKSB7XG4gIHdpbmRvdy5fX0hGX01PREVfXyA9IFwiZXhwb3J0XCI7XG59XG4iLCJkZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIF9fcHVwX3RpY2tfXz86IHsgcHJvY2VzczogKG1zOiBudW1iZXIpID0+IHZvaWQgfTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgVGltZXIge1xuICB0eXBlOiBcInRpbWVvdXRcIiB8IFwiaW50ZXJ2YWxcIjtcbiAgY2I6IFRpbWVySGFuZGxlcjtcbiAgZGVsYXk6IG51bWJlcjtcbiAgbmV4dDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUmFmRW50cnkge1xuICBpZDogbnVtYmVyO1xuICBjYjogRnJhbWVSZXF1ZXN0Q2FsbGJhY2s7XG59XG5cbmludGVyZmFjZSBBbmltRW50cnkge1xuICBzdGFydE1zOiBudW1iZXI7XG4gIGFkb3B0ZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsVGlja0hvb2soKTogdm9pZCB7XG4gIGlmICh3aW5kb3cuX19wdXBfdGlja19fKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgUkVBTF9EQVRFID0gRGF0ZTtcbiAgY29uc3QgZGF0ZU9yaWdpbiA9IFJFQUxfREFURS5ub3coKTtcbiAgbGV0IGN1cnJNcyA9IDA7XG4gIGxldCB0aW1lT2Zmc2V0ID0gMDtcbiAgbGV0IHJhZlF1ZXVlOiBSYWZFbnRyeVtdID0gW107XG4gIGNvbnN0IHRpbWVyczogUmVjb3JkPG51bWJlciwgVGltZXIgfCB1bmRlZmluZWQ+ID0ge307XG4gIGxldCBuZXh0SWQgPSAxO1xuICBjb25zdCB0aWNrID0gKCkgPT4ge1xuICAgIHRpbWVPZmZzZXQgKz0gMC4wMTtcbiAgICByZXR1cm4gdGltZU9mZnNldDtcbiAgfTtcblxuICBmdW5jdGlvbiBGYWtlRGF0ZSh0aGlzOiB1bmtub3duLCAuLi5hcmdzOiB1bmtub3duW10pOiBEYXRlIHwgc3RyaW5nIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRmFrZURhdGUpKSB7XG4gICAgICByZXR1cm4gbmV3IFJFQUxfREFURShkYXRlT3JpZ2luICsgY3Vyck1zKS50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncy5sZW5ndGhcbiAgICAgID8gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShSRUFMX0RBVEUsIFtudWxsLCAuLi5hcmdzXSkpKClcbiAgICAgIDogbmV3IFJFQUxfREFURShkYXRlT3JpZ2luICsgY3Vyck1zICsgdGljaygpKTtcbiAgfVxuICBGYWtlRGF0ZS5wcm90b3R5cGUgPSBSRUFMX0RBVEUucHJvdG90eXBlO1xuICBGYWtlRGF0ZS5ub3cgPSAoKSA9PiBkYXRlT3JpZ2luICsgY3Vyck1zICsgdGljaygpO1xuICBGYWtlRGF0ZS5wYXJzZSA9IFJFQUxfREFURS5wYXJzZTtcbiAgRmFrZURhdGUuVVRDID0gUkVBTF9EQVRFLlVUQztcbiAgKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgRGF0ZTogdW5rbm93biB9KS5EYXRlID0gRmFrZURhdGU7XG4gIHBlcmZvcm1hbmNlLm5vdyA9ICgpID0+IGN1cnJNcyArIHRpY2soKTtcblxuICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gKGNiKSA9PiB7XG4gICAgY29uc3QgaWQgPSBuZXh0SWQrKztcbiAgICByYWZRdWV1ZS5wdXNoKHsgaWQsIGNiIH0pO1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gKGlkKSA9PiB7XG4gICAgcmFmUXVldWUgPSByYWZRdWV1ZS5maWx0ZXIoKHIpID0+IHIuaWQgIT09IGlkKTtcbiAgfTtcbiAgKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgc2V0VGltZW91dDogdW5rbm93biB9KS5zZXRUaW1lb3V0ID0gKGNiOiBUaW1lckhhbmRsZXIsIGRlbGF5PzogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgaWQgPSBuZXh0SWQrKztcbiAgICB0aW1lcnNbaWRdID0geyB0eXBlOiBcInRpbWVvdXRcIiwgY2IsIGRlbGF5OiBkZWxheSB8fCAwLCBuZXh0OiBjdXJyTXMgKyAoZGVsYXkgfHwgMCkgfTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jbGVhclRpbWVvdXQgPSAoaWQpID0+IHtcbiAgICBpZiAodHlwZW9mIGlkID09PSBcIm51bWJlclwiKSB7XG4gICAgICBkZWxldGUgdGltZXJzW2lkXTtcbiAgICB9XG4gIH07XG4gICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IHNldEludGVydmFsOiB1bmtub3duIH0pLnNldEludGVydmFsID0gKGNiOiBUaW1lckhhbmRsZXIsIGRlbGF5PzogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgaWQgPSBuZXh0SWQrKztcbiAgICBjb25zdCBkID0gTWF0aC5tYXgoZGVsYXkgfHwgMCwgMSk7XG4gICAgdGltZXJzW2lkXSA9IHsgdHlwZTogXCJpbnRlcnZhbFwiLCBjYiwgZGVsYXk6IGQsIG5leHQ6IGN1cnJNcyArIGQgfTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jbGVhckludGVydmFsID0gKGlkKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBpZCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgZGVsZXRlIHRpbWVyc1tpZF07XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHNhZmVJbnZva2VUaW1lcihmbjogVGltZXJIYW5kbGVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgZm4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgLy8gU3RyaW5nIHRpbWVyIGhhbmRsZXIgcnVucyBhcyBwYWdlIHNjcmlwdCBpbiBnbG9iYWwgc2NvcGUgKEhUTUwgc3BlYyk7IEZ1bmN0aW9uIGN0b3IgbWF0Y2hlcyB0aGF0LCBhdm9pZHMgZXZhbC5cbiAgICAgICAgbmV3IEZ1bmN0aW9uKGZuKSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW1RpY2tdIGVycm9yOlwiLCAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUuc3RhY2spIHx8IGUpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBzYWZlSW52b2tlUmFmKGNiOiBGcmFtZVJlcXVlc3RDYWxsYmFjaywgdHM6IG51bWJlcikge1xuICAgIHRyeSB7XG4gICAgICBjYih0cyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIltUaWNrXSBlcnJvcjpcIiwgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLnN0YWNrKSB8fCBlKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBhbmltU3RhdGUgPSBuZXcgV2Vha01hcDxBbmltYXRpb24sIEFuaW1FbnRyeT4oKTtcbiAgZnVuY3Rpb24gZW5kQm91bmRhcnkoYTogQW5pbWF0aW9uKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdCA9IGEuZWZmZWN0Py5nZXRDb21wdXRlZFRpbWluZygpLmVuZFRpbWU7XG4gICAgICByZXR1cm4gdHlwZW9mIHQgPT09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzRmluaXRlKHQpID8gdCA6IHVuZGVmaW5lZDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIERldGFjaGVkL2ZvcmVpZ24gZWZmZWN0cyBoYXZlIG5vIHRpbWluZzsgdHJlYXQgYXMgdW5ib3VuZGVkLlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgLy8gQWRvcHQgcnVubmluZyBhbmltYXRpb25zIChwYXVzZSArIGRyaXZlIGN1cnJlbnRUaW1lIG9mZiB0aGUgdmlydHVhbCBjbG9jayk6IGFuIGluZmluaXRlIGNvbXBvc2l0b3IgYW5pbWF0aW9uIG90aGVyd2lzZSBrZWVwcyB2aXogZnJlZS1ydW5uaW5nIGF0IFJFTkRFUl9GUFMsIHN0YXJ2aW5nIENEUCBldmFscy5cbiAgZnVuY3Rpb24gc3luY0FuaW1hdGlvbnMobXM6IG51bWJlcikge1xuICAgIGxldCBhbmltczogQW5pbWF0aW9uW107XG4gICAgdHJ5IHtcbiAgICAgIGFuaW1zID0gZG9jdW1lbnQuZ2V0QW5pbWF0aW9ucygpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGEgb2YgYW5pbXMpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gYS5wbGF5U3RhdGU7XG4gICAgICBpZiAoc3RhdGUgPT09IFwiaWRsZVwiIHx8IHN0YXRlID09PSBcImZpbmlzaGVkXCIpIHtcbiAgICAgICAgYW5pbVN0YXRlLmRlbGV0ZShhKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByYXRlID0gdHlwZW9mIGEucGxheWJhY2tSYXRlID09PSBcIm51bWJlclwiID8gYS5wbGF5YmFja1JhdGUgOiAxO1xuICAgICAgaWYgKHJhdGUgPT09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBsZXQgcyA9IGFuaW1TdGF0ZS5nZXQoYSk7XG4gICAgICBpZiAoIXMpIHtcbiAgICAgICAgY29uc3QgY3QwID0gdHlwZW9mIGEuY3VycmVudFRpbWUgPT09IFwibnVtYmVyXCIgPyBhLmN1cnJlbnRUaW1lIDogMDtcbiAgICAgICAgcyA9IHsgc3RhcnRNczogbXMgLSBjdDAgLyByYXRlLCBhZG9wdGVkOiBzdGF0ZSAhPT0gXCJwYXVzZWRcIiB9O1xuICAgICAgICBhbmltU3RhdGUuc2V0KGEsIHMpO1xuICAgICAgICBpZiAocy5hZG9wdGVkKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGEucGF1c2UoKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIFBhdXNlLXJlamVjdGluZyBzdGF0ZXMgKGUuZy4gbWlkLWNhbmNlbCkgc3RpbGwgYWNjZXB0IGN1cnJlbnRUaW1lIHdyaXRlcyBiZWxvdy5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXMuYWRvcHRlZCAmJiBzdGF0ZSAhPT0gXCJwYXVzZWRcIikge1xuICAgICAgICBjb25zdCBjdCA9IHR5cGVvZiBhLmN1cnJlbnRUaW1lID09PSBcIm51bWJlclwiID8gYS5jdXJyZW50VGltZSA6IDA7XG4gICAgICAgIHMuc3RhcnRNcyA9IG1zIC0gY3QgLyByYXRlO1xuICAgICAgICBzLmFkb3B0ZWQgPSB0cnVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGEucGF1c2UoKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gU2FtZSBhcyBhZG9wdGlvbiBhYm92ZTogZHJpdmUgYnkgY3VycmVudFRpbWUgcmVnYXJkbGVzcy5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFzLmFkb3B0ZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCB0YXJnZXQgPSAobXMgLSBzLnN0YXJ0TXMpICogcmF0ZTtcbiAgICAgIGNvbnN0IGVuZCA9IGVuZEJvdW5kYXJ5KGEpO1xuICAgICAgLy8gZmluaXNoKCkgc2Vla3MgdG8gdGhlIHJhdGUtYXBwcm9wcmlhdGUgYm91bmRhcnkgYW5kIGFwcGxpZXMgZmlsbCBtb2RlOyBwYXVzZWQgaG9sZHMgd291bGQgbWlzcmVuZGVyIGZpbGw6bm9uZS5cbiAgICAgIGlmIChyYXRlID4gMCA/IGVuZCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldCA+PSBlbmQgOiB0YXJnZXQgPD0gMCkge1xuICAgICAgICBhbmltU3RhdGUuZGVsZXRlKGEpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGEuZmluaXNoKCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIEluZmluaXRlLWR1cmF0aW9uIHJldmVyc2Ugb3IgZGV0YWNoZWQgZWZmZWN0OiBsZWF2ZSBhcy1pcy5cbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGEuY3VycmVudFRpbWUgPSB0YXJnZXQ7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHJvY2Vzcyh0aW1lc3RhbXBNczogbnVtYmVyKSB7XG4gICAgY3Vyck1zID0gdGltZXN0YW1wTXM7XG4gICAgdGltZU9mZnNldCA9IDA7XG4gICAgZm9yIChjb25zdCBpZCBvZiBPYmplY3Qua2V5cyh0aW1lcnMpKSB7XG4gICAgICBjb25zdCB0ID0gdGltZXJzW051bWJlcihpZCldO1xuICAgICAgaWYgKCF0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHQubmV4dCA8PSBjdXJyTXMpIHtcbiAgICAgICAgc2FmZUludm9rZVRpbWVyKHQuY2IpO1xuICAgICAgICBpZiAodC50eXBlID09PSBcInRpbWVvdXRcIikge1xuICAgICAgICAgIGRlbGV0ZSB0aW1lcnNbTnVtYmVyKGlkKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdC5uZXh0ICs9IHQuZGVsYXk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJhZnMgPSByYWZRdWV1ZS5zcGxpY2UoMCk7XG4gICAgZm9yIChjb25zdCByIG9mIHJhZnMpIHtcbiAgICAgIHNhZmVJbnZva2VSYWYoci5jYiwgY3Vyck1zKTtcbiAgICB9XG4gICAgc3luY0FuaW1hdGlvbnMoY3Vyck1zKTtcbiAgfVxuXG4gIHdpbmRvdy5fX3B1cF90aWNrX18gPSB7IHByb2Nlc3MgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbnR5cGUgVmVjNCA9IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG5jb25zdCBNSVJST1JfUFJPUFMgPSBbXG4gIFwiYm9yZGVyUmFkaXVzXCIsXG4gIFwiYm9yZGVyVG9wTGVmdFJhZGl1c1wiLFxuICBcImJvcmRlclRvcFJpZ2h0UmFkaXVzXCIsXG4gIFwiYm9yZGVyQm90dG9tTGVmdFJhZGl1c1wiLFxuICBcImJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzXCIsXG4gIFwidHJhbnNmb3JtXCIsXG4gIFwidHJhbnNmb3JtT3JpZ2luXCIsXG4gIFwiZmlsdGVyXCIsXG4gIFwiY2xpcFBhdGhcIixcbiAgXCJib3hTaGFkb3dcIixcbiAgXCJvcGFjaXR5XCIsXG4gIFwibWl4QmxlbmRNb2RlXCIsXG4gIFwibWFza1wiLFxuICBcInpJbmRleFwiLFxuICBcInBvc2l0aW9uXCIsXG4gIFwibGVmdFwiLFxuICBcInRvcFwiLFxuICBcInJpZ2h0XCIsXG4gIFwiYm90dG9tXCIsXG5dIGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBjc3NDYXNlKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzLnJlcGxhY2UoL1tBLVpdL2csIChjKSA9PiBgLSR7Yy50b0xvd2VyQ2FzZSgpfWApO1xufVxuXG4vLyBUcmFjayB0aGUgb3ZlcmxheSBjYW52YXMgdG8gdGhlIHZpZGVvIGVsZW1lbnQncyBsaXZlIGJveDsgdHJ1ZSA9IGJhY2tpbmcgc3RvcmUgcmVzaXplZCAod2hpY2ggd2lwZXMgdGhlIGNhbnZhcykuXG5leHBvcnQgZnVuY3Rpb24gc3luY092ZXJsYXkodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIGN2OiBIVE1MQ2FudmFzRWxlbWVudCk6IGJvb2xlYW4ge1xuICBjb25zdCBjcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHZpZGVvKTtcbiAgY3Yuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gIC8vIG9mZnNldCogYXJlIHByZS10cmFuc2Zvcm0gY29vcmRzIGZyb20gb2Zmc2V0UGFyZW50J3MgcGFkZGluZyBlZGdlID0gdGhlIGFicyBjb250YWluaW5nLWJsb2NrIG9yaWdpbjsgbWFwIGRpcmVjdC5cbiAgY3Yuc3R5bGUubGVmdCA9IGAke3ZpZGVvLm9mZnNldExlZnR9cHhgO1xuICBjdi5zdHlsZS50b3AgPSBgJHt2aWRlby5vZmZzZXRUb3B9cHhgO1xuICBjdi5zdHlsZS53aWR0aCA9IGAke3ZpZGVvLm9mZnNldFdpZHRofXB4YDtcbiAgY3Yuc3R5bGUuaGVpZ2h0ID0gYCR7dmlkZW8ub2Zmc2V0SGVpZ2h0fXB4YDtcbiAgZm9yIChjb25zdCBwIG9mIE1JUlJPUl9QUk9QUykge1xuICAgIGlmIChwID09PSBcInBvc2l0aW9uXCIgfHwgcCA9PT0gXCJsZWZ0XCIgfHwgcCA9PT0gXCJ0b3BcIiB8fCBwID09PSBcInJpZ2h0XCIgfHwgcCA9PT0gXCJib3R0b21cIikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHYgPSBjcy5nZXRQcm9wZXJ0eVZhbHVlKGNzc0Nhc2UocCkpO1xuICAgIGlmICh2KSB7XG4gICAgICBjdi5zdHlsZS5zZXRQcm9wZXJ0eShjc3NDYXNlKHApLCB2KTtcbiAgICB9XG4gIH1cbiAgLy8gQmFja2luZyBzdG9yZSBhdCBvbi1zY3JlZW4gcGl4ZWwgc2l6ZSAocG9zdC10cmFuc2Zvcm0pIHNvIGRlY29kZSByZXNvbHV0aW9uIG1hdGNoZXMgZGlzcGxheWVkIHBpeGVscy5cbiAgY29uc3QgdnIgPSB2aWRlby5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgY29uc3QgdyA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQodnIud2lkdGggKiBkcHIpKTtcbiAgY29uc3QgaCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQodnIuaGVpZ2h0ICogZHByKSk7XG4gIGxldCByZXNpemVkID0gZmFsc2U7XG4gIGlmIChjdi53aWR0aCAhPT0gdykge1xuICAgIGN2LndpZHRoID0gdztcbiAgICByZXNpemVkID0gdHJ1ZTtcbiAgfVxuICBpZiAoY3YuaGVpZ2h0ICE9PSBoKSB7XG4gICAgY3YuaGVpZ2h0ID0gaDtcbiAgICByZXNpemVkID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gcmVzaXplZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwQ2FudmFzKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzbmFwOiBPZmZzY3JlZW5DYW52YXMgfCB1bmRlZmluZWQpOiBIVE1MQ2FudmFzRWxlbWVudCB7XG4gIGNvbnN0IGN2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY3YuZGF0YXNldFtcInB1cFZpZGVvT3ZlcmxheVwiXSA9IFwiMVwiO1xuICBjdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJub25lXCI7XG4gIHZpZGVvLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuICB2aWRlby5tdXRlZCA9IHRydWU7XG4gIGNvbnN0IHBhcmVudCA9IHZpZGVvLnBhcmVudE5vZGUgfHwgZG9jdW1lbnQuYm9keTtcbiAgcGFyZW50Lmluc2VydEJlZm9yZShjdiwgdmlkZW8ubmV4dFNpYmxpbmcpO1xuICBzeW5jT3ZlcmxheSh2aWRlbywgY3YpO1xuICBpZiAoc25hcCkge1xuICAgIHRyeSB7XG4gICAgICBjdi5nZXRDb250ZXh0KFwiMmRcIikhLmRyYXdJbWFnZShzbmFwLCAwLCAwLCBjdi53aWR0aCwgY3YuaGVpZ2h0KTtcbiAgICB9IGNhdGNoIHt9XG4gIH1cbiAgcmV0dXJuIGN2O1xufVxuXG4vLyBEcmF3IHJlY3QgZm9yIHRoZSBiaXRtYXAgd2l0aGluIHRoZSBjYW52YXMgcGVyIG9iamVjdEZpdC5cbmV4cG9ydCBmdW5jdGlvbiBmaXRSZWN0KHNyY1c6IG51bWJlciwgc3JjSDogbnVtYmVyLCBkc3RXOiBudW1iZXIsIGRzdEg6IG51bWJlciwgZml0OiBzdHJpbmcpOiBWZWM0IHtcbiAgaWYgKGZpdCA9PT0gXCJub25lXCIpIHtcbiAgICByZXR1cm4gWyhkc3RXIC0gc3JjVykgLyAyLCAoZHN0SCAtIHNyY0gpIC8gMiwgc3JjVywgc3JjSF07XG4gIH1cbiAgaWYgKGZpdCA9PT0gXCJjb250YWluXCIgfHwgZml0ID09PSBcInNjYWxlLWRvd25cIikge1xuICAgIGNvbnN0IHNjID0gTWF0aC5taW4oZHN0VyAvIHNyY1csIGRzdEggLyBzcmNIKTtcbiAgICBjb25zdCBrID0gZml0ID09PSBcInNjYWxlLWRvd25cIiA/IE1hdGgubWluKDEsIHNjKSA6IHNjO1xuICAgIGNvbnN0IHdzID0gayAqIHNyY1c7XG4gICAgY29uc3QgaHMgPSBrICogc3JjSDtcbiAgICByZXR1cm4gWyhkc3RXIC0gd3MpIC8gMiwgKGRzdEggLSBocykgLyAyLCB3cywgaHNdO1xuICB9XG4gIGlmIChmaXQgPT09IFwiY292ZXJcIikge1xuICAgIGNvbnN0IHNjMiA9IE1hdGgubWF4KGRzdFcgLyBzcmNXLCBkc3RIIC8gc3JjSCk7XG4gICAgY29uc3Qgd3MyID0gc2MyICogc3JjVztcbiAgICBjb25zdCBoczIgPSBzYzIgKiBzcmNIO1xuICAgIHJldHVybiBbKGRzdFcgLSB3czIpIC8gMiwgKGRzdEggLSBoczIpIC8gMiwgd3MyLCBoczJdO1xuICB9XG4gIHJldHVybiBbMCwgMCwgZHN0VywgZHN0SF07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5leHBvcnQgY29uc3QgU0NIRU1FID0gXCJwdXAtZnJhbWU6Ly9cIjtcbmV4cG9ydCBjb25zdCBBSEVBRCA9IDEwO1xuZXhwb3J0IGNvbnN0IFRBRyA9IFwiW1ZpZGVvSG9va11cIjtcblxuZXhwb3J0IGNvbnN0IE1FRElBX0VSUl9ORVRXT1JLID0gMjtcbmV4cG9ydCBjb25zdCBNRURJQV9FUlJfREVDT0RFID0gMztcbmV4cG9ydCBjb25zdCBIQVZFX05PVEhJTkcgPSAwO1xuZXhwb3J0IGNvbnN0IEhBVkVfTUVUQURBVEEgPSAxO1xuZXhwb3J0IGNvbnN0IEhBVkVfRU5PVUdIX0RBVEEgPSA0O1xuZXhwb3J0IGNvbnN0IE5FVFdPUktfRU1QVFkgPSAwO1xuZXhwb3J0IGNvbnN0IE5FVFdPUktfSURMRSA9IDE7XG5leHBvcnQgY29uc3QgTkVUV09SS19MT0FESU5HID0gMjtcbmV4cG9ydCBjb25zdCBORVRXT1JLX05PX1NPVVJDRSA9IDM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9NZXRhIHtcbiAgaWQ6IHN0cmluZztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZyYW1lV2lkdGg6IG51bWJlcjtcbiAgZnJhbWVIZWlnaHQ6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9GcmFtZU1ldGEge1xuICBwcmVzZW50YXRpb25UaW1lOiBudW1iZXI7XG4gIGV4cGVjdGVkRGlzcGxheVRpbWU6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIG1lZGlhVGltZTogbnVtYmVyO1xuICBwcmVzZW50ZWRGcmFtZXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgRnJhbWVDYiA9IChub3c6IG51bWJlciwgbWV0YTogVmlkZW9GcmFtZU1ldGEpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFFcnJvckxpa2Uge1xuICBjb2RlOiBudW1iZXI7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0NhY2hlIHtcbiAgYml0bWFwczogTWFwPG51bWJlciwgSW1hZ2VCaXRtYXA+O1xuICBpbkZsaWdodDogTWFwPG51bWJlciwgUHJvbWlzZTxJbWFnZUJpdG1hcCB8IHVuZGVmaW5lZD4+O1xuICByZWFkZXJzOiBNYXA8VmlkZW9TdGF0ZSwgbnVtYmVyPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb1N0YXRlIHtcbiAgbWV0YT86IFZpZGVvTWV0YTtcbiAgY3Y6IEhUTUxDYW52YXNFbGVtZW50O1xuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgcGF1c2VkOiBib29sZWFuO1xuICBjdXJyZW50VGltZTogbnVtYmVyO1xuICBlbmRlZDogYm9vbGVhbjtcbiAgbGFzdERyYXduSWR4OiBudW1iZXI7XG4gIGRlYWQ6IGJvb2xlYW47XG4gIG9iamVjdEZpdDogc3RyaW5nO1xuICByZWFkeVN0YXRlOiBudW1iZXI7XG4gIG5ldHdvcmtTdGF0ZTogbnVtYmVyO1xuICBzZWVraW5nOiBib29sZWFuO1xuICB3YWl0aW5nOiBib29sZWFuO1xuICBlcnJvcjogTWVkaWFFcnJvckxpa2UgfCB1bmRlZmluZWQ7XG4gIHByZXNlbnRlZEZyYW1lczogbnVtYmVyO1xuICBtYXhSZWFjaGVkOiBudW1iZXI7XG4gIHJ2ZmM6IE1hcDxudW1iZXIsIEZyYW1lQ2I+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVSYW5nZXNMaWtlIHtcbiAgbGVuZ3RoOiBudW1iZXI7XG4gIHN0YXJ0KGk6IG51bWJlcik6IG51bWJlcjtcbiAgZW5kKGk6IG51bWJlcik6IG51bWJlcjtcbn1cblxuLy8gV2hvbGUgY2xpcCBpcyBkZWNvZGUtb24tZGVtYW5kLCBzbyB0aGUgYXZhaWxhYmxlIHJhbmdlIGlzIGFsd2F5cyBbMCwgZW5kXSAob25lIFRpbWVSYW5nZXMgZW50cnkpLlxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVSYW5nZXMoZW5kOiBudW1iZXIpOiBUaW1lUmFuZ2VzTGlrZSB7XG4gIHJldHVybiB7IGxlbmd0aDogZW5kID4gMCA/IDEgOiAwLCBzdGFydDogKCkgPT4gMCwgZW5kOiAoKSA9PiBlbmQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpcmUoZWw6IEV2ZW50VGFyZ2V0LCB0eXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgZWwuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQodHlwZSkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHR5cGUgeyBWaWRlb0hvb2sgfSBmcm9tIFwiLi9ob29rXCI7XG5pbXBvcnQgeyBmaXRSZWN0LCBzeW5jT3ZlcmxheSB9IGZyb20gXCIuL292ZXJsYXlcIjtcbmltcG9ydCB7IEFIRUFELCBmaXJlLCB0eXBlIFZpZGVvRnJhbWVNZXRhLCB0eXBlIFZpZGVvU3RhdGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5mdW5jdGlvbiBmaXJlRnJhbWVDYWxsYmFja3Moc3RhdGU6IFZpZGVvU3RhdGUpOiB2b2lkIHtcbiAgaWYgKHN0YXRlLnJ2ZmMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBjYnMgPSBbLi4uc3RhdGUucnZmYy52YWx1ZXMoKV07XG4gIHN0YXRlLnJ2ZmMuY2xlYXIoKTtcbiAgY29uc3Qgbm93ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGNvbnN0IG1ldGE6IFZpZGVvRnJhbWVNZXRhID0ge1xuICAgIHByZXNlbnRhdGlvblRpbWU6IG5vdyxcbiAgICBleHBlY3RlZERpc3BsYXlUaW1lOiBub3csXG4gICAgd2lkdGg6IHN0YXRlLm1ldGEhLmZyYW1lV2lkdGgsXG4gICAgaGVpZ2h0OiBzdGF0ZS5tZXRhIS5mcmFtZUhlaWdodCxcbiAgICBtZWRpYVRpbWU6IHN0YXRlLmN1cnJlbnRUaW1lLFxuICAgIHByZXNlbnRlZEZyYW1lczogc3RhdGUucHJlc2VudGVkRnJhbWVzLFxuICB9O1xuICBmb3IgKGNvbnN0IGNiIG9mIGNicykge1xuICAgIGNiKG5vdywgbWV0YSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFpbnQoaG9vazogVmlkZW9Ib29rLCB2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgc3RhdGU6IFZpZGVvU3RhdGUsIGlkeDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGMgPSBob29rLmNhY2hlLmNhY2hlT2Yoc3RhdGUubWV0YSEuaWQpO1xuICBjLnJlYWRlcnMuc2V0KHN0YXRlLCBpZHgpO1xuICBsZXQgYm0gPSBjLmJpdG1hcHMuZ2V0KGlkeCk7XG4gIGlmICghYm0pIHtcbiAgICBob29rLmNhY2hlLnByZWZldGNoKHN0YXRlLCBpZHggKyAxLCBBSEVBRCAtIDEpO1xuICAgIGNvbnN0IGZldGNoZWQgPSBhd2FpdCBob29rLmNhY2hlLmZldGNoKHN0YXRlLCBpZHgpO1xuICAgIGlmIChob29rLnNlc3Npb25zLmdldCh2aWRlbykgIT09IHN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghZmV0Y2hlZCkge1xuICAgICAgaWYgKCFzdGF0ZS5wYXVzZWQgJiYgIXN0YXRlLndhaXRpbmcpIHtcbiAgICAgICAgc3RhdGUud2FpdGluZyA9IHRydWU7XG4gICAgICAgIGZpcmUodmlkZW8sIFwid2FpdGluZ1wiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYm0gPSBmZXRjaGVkO1xuICB9XG4gIGlmIChzdGF0ZS53YWl0aW5nKSB7XG4gICAgc3RhdGUud2FpdGluZyA9IGZhbHNlO1xuICAgIGlmICghc3RhdGUucGF1c2VkKSB7XG4gICAgICBmaXJlKHZpZGVvLCBcInBsYXlpbmdcIik7XG4gICAgfVxuICB9XG4gIGNvbnN0IGN2ID0gc3RhdGUuY3Y7XG4gIGNvbnN0IHIgPSBmaXRSZWN0KGJtLndpZHRoLCBibS5oZWlnaHQsIGN2LndpZHRoLCBjdi5oZWlnaHQsIHN0YXRlLm9iamVjdEZpdCk7XG4gIHN0YXRlLmN0eC5jbGVhclJlY3QoMCwgMCwgY3Yud2lkdGgsIGN2LmhlaWdodCk7XG4gIHN0YXRlLmN0eC5kcmF3SW1hZ2UoYm0sIHJbMF0sIHJbMV0sIHJbMl0sIHJbM10pO1xuICBzdGF0ZS5sYXN0RHJhd25JZHggPSBpZHg7XG4gIHN0YXRlLnByZXNlbnRlZEZyYW1lcysrO1xuICBmaXJlRnJhbWVDYWxsYmFja3Moc3RhdGUpO1xuICBob29rLmNhY2hlLnByZWZldGNoKHN0YXRlLCBpZHggKyAxLCBBSEVBRCk7XG4gIGhvb2suY2FjaGUuZXZpY3QoYyk7XG59XG5cbi8vIFZpcnR1YWwtdGltZSB0aWNrOiBzeW5jIG92ZXJsYXlzLCBhZHZhbmNlIGVhY2ggaG9va2VkIHZpZGVvJ3MgY2xvY2sgKGxvb3AvZW5kKSwgcGFpbnQgdGhlIGR1ZSBmcmFtZS5cbmV4cG9ydCBmdW5jdGlvbiBhZHZhbmNlKGhvb2s6IFZpZGVvSG9vaywgdGltZXN0YW1wTXM6IG51bWJlcik6IFByb21pc2U8dW5rbm93bj4ge1xuICBjb25zdCBkdCA9IE1hdGgubWF4KDAsIHRpbWVzdGFtcE1zIC0gaG9vay5jdXJyTXMpIC8gMTAwMDtcbiAgaG9vay5jdXJyTXMgPSB0aW1lc3RhbXBNcztcbiAgY29uc3QgcHM6IFByb21pc2U8dW5rbm93bj5bXSA9IFtdO1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwidmlkZW9cIikuZm9yRWFjaCgoZWwpID0+IHtcbiAgICBjb25zdCB2aWRlbyA9IGVsIGFzIEhUTUxWaWRlb0VsZW1lbnQ7XG4gICAgY29uc3Qgc3RhdGUgPSBob29rLnNlc3Npb25zLmdldCh2aWRlbyk7XG4gICAgaWYgKCFzdGF0ZSB8fCBzdGF0ZS5kZWFkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEEgYmFja2luZy1zdG9yZSByZXNpemUgKGFuaW1hdGVkIGNvbnRhaW5lcikgd2lwZXMgdGhlIGNhbnZhczsgZm9yY2UgYSByZWRyYXcgZXZlbiBvbiBhbiB1bmNoYW5nZWQgZnJhbWUgaWR4LlxuICAgIGlmIChzeW5jT3ZlcmxheSh2aWRlbywgc3RhdGUuY3YpKSB7XG4gICAgICBzdGF0ZS5sYXN0RHJhd25JZHggPSAtMTtcbiAgICB9XG4gICAgaWYgKCFzdGF0ZS5tZXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEVsZW1lbnQgZ3JldyBwYXN0IHRoZSBkZWNvZGVkIChkb3duc2NhbGVkKSByZXMg4oaSIHJlLWRlY29kZSBhdCBuYXRpdmUsIG9uZS1zaG90IChjb3ZlcnMgem9vbSkuXG4gICAgaWYgKFxuICAgICAgc3RhdGUubWV0YS5mcmFtZVdpZHRoIDwgc3RhdGUubWV0YS53aWR0aCAmJlxuICAgICAgc3RhdGUuY3Yud2lkdGggPiBzdGF0ZS5tZXRhLmZyYW1lV2lkdGggKiAxLjA1ICYmXG4gICAgICAhaG9vay5hdHRhY2hpbmcuaGFzKHZpZGVvKVxuICAgICkge1xuICAgICAgaG9vay5yZWF0dGFjaCh2aWRlbywgc3RhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXN0YXRlLnBhdXNlZCAmJiAhc3RhdGUuZW5kZWQpIHtcbiAgICAgIHN0YXRlLmN1cnJlbnRUaW1lICs9IGR0ICogKHZpZGVvLnBsYXliYWNrUmF0ZSB8fCAxKTtcbiAgICAgIHN0YXRlLm1heFJlYWNoZWQgPSBNYXRoLm1heChzdGF0ZS5tYXhSZWFjaGVkLCBzdGF0ZS5jdXJyZW50VGltZSk7XG4gICAgICBpZiAoc3RhdGUuY3VycmVudFRpbWUgPj0gc3RhdGUubWV0YS5kdXJhdGlvbikge1xuICAgICAgICBpZiAodmlkZW8ubG9vcCkge1xuICAgICAgICAgIHN0YXRlLmN1cnJlbnRUaW1lID0gc3RhdGUuY3VycmVudFRpbWUgJSBzdGF0ZS5tZXRhLmR1cmF0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLmN1cnJlbnRUaW1lID0gc3RhdGUubWV0YS5kdXJhdGlvbjtcbiAgICAgICAgICBzdGF0ZS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgICAgICAgICBmaXJlKHZpZGVvLCBcImVuZGVkXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaXJlKHZpZGVvLCBcInRpbWV1cGRhdGVcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGlkeCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoc3RhdGUuY3VycmVudFRpbWUgKiBzdGF0ZS5tZXRhLmZwcykpO1xuICAgIGlmIChpZHggPT09IHN0YXRlLmxhc3REcmF3bklkeCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwcy5wdXNoKHBhaW50KGhvb2ssIHZpZGVvLCBzdGF0ZSwgaWR4KSk7XG4gIH0pO1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHMpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHsgU0NIRU1FLCB0eXBlIFZpZGVvQ2FjaGUsIHR5cGUgVmlkZW9TdGF0ZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8vIFBlci1zZXNzaW9uIGJpdG1hcCBjYWNoZTogZmV0Y2hlcyBSR0JBIGZyYW1lcyBmcm9tIHRoZSBmcmFtZSBwcm90b2NvbCwgZGVkdXBlcyBpbi1mbGlnaHQsIGV2aWN0cyBiZWhpbmQgcmVhZGVycy5cbmV4cG9ydCBjbGFzcyBGcmFtZUNhY2hlIHtcbiAgcHJpdmF0ZSBfY2FjaGVzID0gbmV3IE1hcDxzdHJpbmcsIFZpZGVvQ2FjaGU+KCk7XG5cbiAgY2FjaGVPZihpZDogc3RyaW5nKTogVmlkZW9DYWNoZSB7XG4gICAgbGV0IGMgPSB0aGlzLl9jYWNoZXMuZ2V0KGlkKTtcbiAgICBpZiAoIWMpIHtcbiAgICAgIGMgPSB7IGJpdG1hcHM6IG5ldyBNYXAoKSwgaW5GbGlnaHQ6IG5ldyBNYXAoKSwgcmVhZGVyczogbmV3IE1hcCgpIH07XG4gICAgICB0aGlzLl9jYWNoZXMuc2V0KGlkLCBjKTtcbiAgICB9XG4gICAgcmV0dXJuIGM7XG4gIH1cblxuICBmZXRjaChzdGF0ZTogVmlkZW9TdGF0ZSwgaWR4OiBudW1iZXIpOiBQcm9taXNlPEltYWdlQml0bWFwIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgbWV0YSA9IHN0YXRlLm1ldGE7XG4gICAgaWYgKCFtZXRhKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGNvbnN0IGMgPSB0aGlzLmNhY2hlT2YobWV0YS5pZCk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBjLmluRmxpZ2h0LmdldChpZHgpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgICBjb25zdCBjYWNoZWQgPSBjLmJpdG1hcHMuZ2V0KGlkeCk7XG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjYWNoZWQpO1xuICAgIH1cbiAgICBjb25zdCB3ID0gbWV0YS5mcmFtZVdpZHRoO1xuICAgIGNvbnN0IGggPSBtZXRhLmZyYW1lSGVpZ2h0O1xuICAgIGNvbnN0IHAgPSBmZXRjaChgJHtTQ0hFTUV9ZnJhbWU/aWQ9JHttZXRhLmlkfSZpZHg9JHtpZHh9YClcbiAgICAgIC50aGVuKChyKSA9PiAoci5vayA/IHIuYXJyYXlCdWZmZXIoKSA6IHVuZGVmaW5lZCkpXG4gICAgICAudGhlbigoYnVmKSA9PlxuICAgICAgICBidWYgJiYgYnVmLmJ5dGVMZW5ndGggPT09IHcgKiBoICogNFxuICAgICAgICAgID8gY3JlYXRlSW1hZ2VCaXRtYXAobmV3IEltYWdlRGF0YShuZXcgVWludDhDbGFtcGVkQXJyYXkoYnVmKSwgdywgaCkpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICApXG4gICAgICAudGhlbigoYm0pID0+IHtcbiAgICAgICAgYy5pbkZsaWdodC5kZWxldGUoaWR4KTtcbiAgICAgICAgaWYgKGJtKSB7XG4gICAgICAgICAgYy5iaXRtYXBzLnNldChpZHgsIGJtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYm07XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgYy5pbkZsaWdodC5kZWxldGUoaWR4KTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuICAgIGMuaW5GbGlnaHQuc2V0KGlkeCwgcCk7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBwcmVmZXRjaChzdGF0ZTogVmlkZW9TdGF0ZSwgZnJvbUlkeDogbnVtYmVyLCBjb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgbWV0YSA9IHN0YXRlLm1ldGE7XG4gICAgaWYgKCFtZXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1heElkeCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQobWV0YS5kdXJhdGlvbiAqIG1ldGEuZnBzKSk7XG4gICAgZm9yIChsZXQgaSA9IGZyb21JZHg7IGkgPCBmcm9tSWR4ICsgY291bnQ7IGkrKykge1xuICAgICAgaWYgKGkgPCAxIHx8IGkgPiBtYXhJZHgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2b2lkIHRoaXMuZmV0Y2goc3RhdGUsIGkpO1xuICAgIH1cbiAgfVxuXG4gIGV2aWN0KGM6IFZpZGVvQ2FjaGUpOiB2b2lkIHtcbiAgICBsZXQgbWluSWR4ID0gSW5maW5pdHk7XG4gICAgYy5yZWFkZXJzLmZvckVhY2goKGlkeCkgPT4ge1xuICAgICAgaWYgKGlkeCA8IG1pbklkeCkge1xuICAgICAgICBtaW5JZHggPSBpZHg7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobWluSWR4KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmbG9vciA9IG1pbklkeCAtIDI7XG4gICAgYy5iaXRtYXBzLmZvckVhY2goKGJtLCBpZHgpID0+IHtcbiAgICAgIGlmIChpZHggPCBmbG9vcikge1xuICAgICAgICBibS5jbG9zZSgpO1xuICAgICAgICBjLmJpdG1hcHMuZGVsZXRlKGlkeCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBEcm9wIGEgcmVhZGVyOyB3aGVuIHRoZSBsYXN0IGxlYXZlcywgY2xvc2UgYml0bWFwcyBhbmQgdGVsbCB0aGUgc2VydmVyIHRvIHJlbGVhc2UgdGhlIGRlY29kZSBzZXNzaW9uLlxuICByZWxlYXNlKGlkOiBzdHJpbmcsIHN0YXRlOiBWaWRlb1N0YXRlKTogdm9pZCB7XG4gICAgY29uc3QgYyA9IHRoaXMuX2NhY2hlcy5nZXQoaWQpO1xuICAgIGlmICghYykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjLnJlYWRlcnMuZGVsZXRlKHN0YXRlKTtcbiAgICBpZiAoYy5yZWFkZXJzLnNpemUgPiAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGMuYml0bWFwcy5mb3JFYWNoKChibSkgPT4ge1xuICAgICAgYm0uY2xvc2UoKTtcbiAgICB9KTtcbiAgICB0aGlzLl9jYWNoZXMuZGVsZXRlKGlkKTtcbiAgICBmZXRjaChgJHtTQ0hFTUV9Y2xvc2U/aWQ9JHtpZH1gLCB7IGtlZXBhbGl2ZTogdHJ1ZSB9KTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHR5cGUgeyBWaWRlb0hvb2sgfSBmcm9tIFwiLi9ob29rXCI7XG5pbXBvcnQgeyB0eXBlIEZyYW1lQ2IsIGZpcmUsIHRpbWVSYW5nZXMsIHR5cGUgVmlkZW9TdGF0ZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8vIE92ZXJyaWRlIHRoZSBIVE1MTWVkaWFFbGVtZW50IHN1cmZhY2UgZm9yIGhvb2tlZCA8dmlkZW8+OyB1bmhvb2tlZCBlbGVtZW50cyBmYWxsIHRocm91Z2ggdG8gbmF0aXZlLlxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxNZWRpYVNoaW0oaG9vazogVmlkZW9Ib29rKTogdm9pZCB7XG4gIGNvbnN0IEhWRSA9IEhUTUxWaWRlb0VsZW1lbnQucHJvdG90eXBlO1xuICBjb25zdCBNRURJQSA9IEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlO1xuICBjb25zdCBtZGVzYyA9IChwOiBzdHJpbmcpID0+IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFZFLCBwKSB8fCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE1FRElBLCBwKTtcbiAgY29uc3QgY3REZXNjID0gbWRlc2MoXCJjdXJyZW50VGltZVwiKTtcbiAgY29uc3Qgc3JjRGVzYyA9IG1kZXNjKFwic3JjXCIpO1xuICBjb25zdCByYXRlRGVzYyA9IG1kZXNjKFwicGxheWJhY2tSYXRlXCIpO1xuICBjb25zdCBvcmlnUGF1c2UgPSBIVkUucGF1c2U7XG4gIGNvbnN0IG9yaWdSVkZDID0gSFZFLnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2s7XG4gIGNvbnN0IG9yaWdDYW5jZWxSVkZDID0gSFZFLmNhbmNlbFZpZGVvRnJhbWVDYWxsYmFjaztcbiAgY29uc3Qgb3JpZ1F1YWxpdHkgPSBIVkUuZ2V0VmlkZW9QbGF5YmFja1F1YWxpdHk7XG4gIGNvbnN0IG9yaWdMb2FkID0gSFZFLmxvYWQ7XG4gIGNvbnN0IHNlc3Npb25zID0gaG9vay5zZXNzaW9ucztcblxuICAvLyBTZXNzaW9uLWJhY2tlZCByZWFkLW9ubHkgcHJvcGVydHkgd2l0aCBuYXRpdmUgZmFsbGJhY2sgd2hlbiB0aGUgZWxlbWVudCBpc24ndCBob29rZWQuXG4gIGNvbnN0IGRlZiA9IChwcm9wOiBzdHJpbmcsIHBpY2s6IChzOiBWaWRlb1N0YXRlKSA9PiB1bmtub3duKSA9PiB7XG4gICAgY29uc3QgbmF0aXZlR2V0ID0gbWRlc2MocHJvcCk/LmdldDtcbiAgICBpZiAoIW5hdGl2ZUdldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBtZWRpYV9zaGltOiBubyBuYXRpdmUgZ2V0dGVyIGZvciAke3Byb3B9YCk7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsIHByb3AsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldCh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgICAgIHJldHVybiBzID8gcGljayhzKSA6IG5hdGl2ZUdldC5jYWxsKHRoaXMpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfTtcbiAgZGVmKFwicGF1c2VkXCIsIChzKSA9PiBzLnBhdXNlZCk7XG4gIGRlZihcImVuZGVkXCIsIChzKSA9PiBzLmVuZGVkKTtcbiAgZGVmKFwicmVhZHlTdGF0ZVwiLCAocykgPT4gcy5yZWFkeVN0YXRlKTtcbiAgZGVmKFwibmV0d29ya1N0YXRlXCIsIChzKSA9PiBzLm5ldHdvcmtTdGF0ZSk7XG4gIGRlZihcImVycm9yXCIsIChzKSA9PiBzLmVycm9yID8/IG51bGwpO1xuICBkZWYoXCJzZWVraW5nXCIsIChzKSA9PiBzLnNlZWtpbmcpO1xuICBkZWYoXCJidWZmZXJlZFwiLCAocykgPT4gdGltZVJhbmdlcyhzLm1ldGEgPyBzLm1ldGEuZHVyYXRpb24gOiAwKSk7XG4gIGRlZihcInNlZWthYmxlXCIsIChzKSA9PiB0aW1lUmFuZ2VzKHMubWV0YSA/IHMubWV0YS5kdXJhdGlvbiA6IDApKTtcbiAgZGVmKFwicGxheWVkXCIsIChzKSA9PiB0aW1lUmFuZ2VzKHMubWF4UmVhY2hlZCkpO1xuXG4gIEhWRS5wbGF5ID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgIGlmICghcykge1xuICAgICAgcmV0dXJuIGhvb2suYXR0YWNoKHRoaXMpLnRoZW4oKG5zKSA9PiB7XG4gICAgICAgIGlmIChucykge1xuICAgICAgICAgIGhvb2sucmVzdW1lKHRoaXMsIG5zKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGhvb2sucmVzdW1lKHRoaXMsIHMpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfTtcbiAgSFZFLnBhdXNlID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgIGlmICghcykge1xuICAgICAgb3JpZ1BhdXNlLmNhbGwodGhpcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghcy5wYXVzZWQpIHtcbiAgICAgIHMucGF1c2VkID0gdHJ1ZTtcbiAgICAgIGZpcmUodGhpcywgXCJwYXVzZVwiKTtcbiAgICB9XG4gIH07XG4gIGlmIChjdERlc2M/LmdldCAmJiBjdERlc2Muc2V0KSB7XG4gICAgY29uc3QgY3RHZXQgPSBjdERlc2MuZ2V0O1xuICAgIGNvbnN0IGN0U2V0ID0gY3REZXNjLnNldDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFZFLCBcImN1cnJlbnRUaW1lXCIsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldCh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgICAgIHJldHVybiBzID8gcy5jdXJyZW50VGltZSA6IGN0R2V0LmNhbGwodGhpcyk7XG4gICAgICB9LFxuICAgICAgc2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIHQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgICAgICBpZiAoIXMpIHtcbiAgICAgICAgICBjdFNldC5jYWxsKHRoaXMsIHQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkdXIgPSBzLm1ldGEgPyBzLm1ldGEuZHVyYXRpb24gOiB0O1xuICAgICAgICBzLmN1cnJlbnRUaW1lID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odCwgZHVyKSk7XG4gICAgICAgIHMubWF4UmVhY2hlZCA9IE1hdGgubWF4KHMubWF4UmVhY2hlZCwgcy5jdXJyZW50VGltZSk7XG4gICAgICAgIGlmIChzLmN1cnJlbnRUaW1lIDwgZHVyKSB7XG4gICAgICAgICAgcy5lbmRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHMuc2Vla2luZyA9IHRydWU7XG4gICAgICAgIGZpcmUodGhpcywgXCJzZWVraW5nXCIpO1xuICAgICAgICBzLnNlZWtpbmcgPSBmYWxzZTtcbiAgICAgICAgZmlyZSh0aGlzLCBcInNlZWtlZFwiKTtcbiAgICAgICAgZmlyZSh0aGlzLCBcInRpbWV1cGRhdGVcIik7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIGlmIChyYXRlRGVzYz8uc2V0KSB7XG4gICAgY29uc3QgcmF0ZVNldCA9IHJhdGVEZXNjLnNldDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFZFLCBcInBsYXliYWNrUmF0ZVwiLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IHJhdGVEZXNjLmdldCxcbiAgICAgIHNldCh0aGlzOiBIVE1MVmlkZW9FbGVtZW50LCByOiBudW1iZXIpIHtcbiAgICAgICAgcmF0ZVNldC5jYWxsKHRoaXMsIHIpO1xuICAgICAgICBpZiAoc2Vzc2lvbnMuaGFzKHRoaXMpKSB7XG4gICAgICAgICAgZmlyZSh0aGlzLCBcInJhdGVjaGFuZ2VcIik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgSFZFLnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2sgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCwgY2IpOiBudW1iZXIge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICByZXR1cm4gb3JpZ1JWRkMuY2FsbCh0aGlzLCBjYik7XG4gICAgfVxuICAgIGNvbnN0IGlkID0gKytob29rLnJ2ZmNTZXE7XG4gICAgcy5ydmZjLnNldChpZCwgY2IgYXMgRnJhbWVDYik7XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICBIVkUuY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIGlkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgIGlmICghcykge1xuICAgICAgb3JpZ0NhbmNlbFJWRkMuY2FsbCh0aGlzLCBpZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHMucnZmYy5kZWxldGUoaWQpO1xuICB9O1xuICBIVkUuZ2V0VmlkZW9QbGF5YmFja1F1YWxpdHkgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICByZXR1cm4gb3JpZ1F1YWxpdHkuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0aW9uVGltZTogcGVyZm9ybWFuY2Uubm93KCksXG4gICAgICB0b3RhbFZpZGVvRnJhbWVzOiBzLnByZXNlbnRlZEZyYW1lcyxcbiAgICAgIGRyb3BwZWRWaWRlb0ZyYW1lczogMCxcbiAgICAgIGNvcnJ1cHRlZFZpZGVvRnJhbWVzOiAwLFxuICAgIH0gYXMgVmlkZW9QbGF5YmFja1F1YWxpdHk7XG4gIH07XG4gIEhWRS5sb2FkID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBpZiAoIXNlc3Npb25zLmhhcyh0aGlzKSkge1xuICAgICAgcmV0dXJuIG9yaWdMb2FkLmNhbGwodGhpcyk7XG4gICAgfVxuICAgIGhvb2suZGV0YWNoKHRoaXMpO1xuICAgIGZpcmUodGhpcywgXCJlbXB0aWVkXCIpO1xuICAgIHRoaXMuX19wdXBMYXN0U3JjID0gdW5kZWZpbmVkO1xuICAgIGhvb2suYXR0YWNoKHRoaXMpO1xuICB9O1xuICBpZiAoc3JjRGVzYz8uc2V0KSB7XG4gICAgY29uc3Qgc3JjU2V0ID0gc3JjRGVzYy5zZXQ7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgXCJzcmNcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBzcmNEZXNjLmdldCxcbiAgICAgIHNldCh0aGlzOiBIVE1MVmlkZW9FbGVtZW50LCB2OiBzdHJpbmcpIHtcbiAgICAgICAgc3JjU2V0LmNhbGwodGhpcywgdik7XG4gICAgICAgIGhvb2sub25TcmNDaGFuZ2UodGhpcyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgdHlwZSB7IFZpZGVvSG9vayB9IGZyb20gXCIuL2hvb2tcIjtcbmltcG9ydCB7XG4gIEFIRUFELFxuICBmaXJlLFxuICBIQVZFX0VOT1VHSF9EQVRBLFxuICBIQVZFX01FVEFEQVRBLFxuICBIQVZFX05PVEhJTkcsXG4gIE1FRElBX0VSUl9ERUNPREUsXG4gIE1FRElBX0VSUl9ORVRXT1JLLFxuICB0eXBlIE1lZGlhRXJyb3JMaWtlLFxuICBORVRXT1JLX0VNUFRZLFxuICBORVRXT1JLX0lETEUsXG4gIE5FVFdPUktfTE9BRElORyxcbiAgTkVUV09SS19OT19TT1VSQ0UsXG4gIFNDSEVNRSxcbiAgVEFHLFxuICB0eXBlIFZpZGVvTWV0YSxcbiAgdHlwZSBWaWRlb1N0YXRlLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF0dGFjaEFyZ3Mge1xuICB2aWRlbzogSFRNTFZpZGVvRWxlbWVudDtcbiAgc3RhdGU6IFZpZGVvU3RhdGU7XG4gIHNyYzogc3RyaW5nO1xuICBiaXJ0aE1zOiBudW1iZXI7XG4gIG5hdGl2ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5ld1ZpZGVvU3RhdGUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIGN2OiBIVE1MQ2FudmFzRWxlbWVudCk6IFZpZGVvU3RhdGUge1xuICByZXR1cm4ge1xuICAgIG1ldGE6IHVuZGVmaW5lZCxcbiAgICBjdixcbiAgICBjdHg6IGN2LmdldENvbnRleHQoXCIyZFwiKSEsXG4gICAgcGF1c2VkOiAhKHZpZGVvLmF1dG9wbGF5IHx8ICF2aWRlby5wYXVzZWQpLFxuICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgIGVuZGVkOiBmYWxzZSxcbiAgICBsYXN0RHJhd25JZHg6IC0xLFxuICAgIGRlYWQ6IGZhbHNlLFxuICAgIG9iamVjdEZpdDogd2luZG93LmdldENvbXB1dGVkU3R5bGUodmlkZW8pLm9iamVjdEZpdCB8fCBcImZpbGxcIixcbiAgICByZWFkeVN0YXRlOiBIQVZFX05PVEhJTkcsXG4gICAgbmV0d29ya1N0YXRlOiBORVRXT1JLX0VNUFRZLFxuICAgIHNlZWtpbmc6IGZhbHNlLFxuICAgIHdhaXRpbmc6IGZhbHNlLFxuICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgcHJlc2VudGVkRnJhbWVzOiAwLFxuICAgIG1heFJlYWNoZWQ6IDAsXG4gICAgcnZmYzogbmV3IE1hcCgpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBmYWlsT3Blbih2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgc3RhdGU6IFZpZGVvU3RhdGUsIGVycm9yOiBNZWRpYUVycm9yTGlrZSk6IHVuZGVmaW5lZCB7XG4gIHN0YXRlLmRlYWQgPSB0cnVlO1xuICBzdGF0ZS5lcnJvciA9IGVycm9yO1xuICBzdGF0ZS5uZXR3b3JrU3RhdGUgPSBORVRXT1JLX05PX1NPVVJDRTtcbiAgY29uc29sZS5lcnJvcihUQUcsIGAke2Vycm9yLm1lc3NhZ2V9IHNyYz0ke3ZpZGVvLnNyYyB8fCB2aWRlby5jdXJyZW50U3JjfWApO1xuICBmaXJlKHZpZGVvLCBcImVycm9yXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyBPcGVuIHRoZSBmcmFtZSBzZXJ2ZXIgc2Vzc2lvbiwgdGhlbiBlbWl0IHRoZSBIVE1MTWVkaWFFbGVtZW50IGxvYWQgc2VxdWVuY2UgKHJlYWR5U3RhdGUvbmV0d29ya1N0YXRlICsgZXZlbnRzKS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuU2Vzc2lvbihob29rOiBWaWRlb0hvb2ssIGFyZ3M6IEF0dGFjaEFyZ3MpOiBQcm9taXNlPFZpZGVvU3RhdGUgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgeyB2aWRlbywgc3RhdGUsIHNyYywgYmlydGhNcywgbmF0aXZlIH0gPSBhcmdzO1xuICBjb25zdCBmcHMgPSBOdW1iZXIucGFyc2VJbnQodmlkZW8uZGF0YXNldFtcInB1cEZwc1wiXSB8fCBcIjMwXCIsIDEwKTtcbiAgc3RhdGUubmV0d29ya1N0YXRlID0gTkVUV09SS19MT0FESU5HO1xuICBmaXJlKHZpZGVvLCBcImxvYWRzdGFydFwiKTtcbiAgbGV0IHJlczogUmVzcG9uc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgcSA9IG5hdGl2ZSA/IFwiXCIgOiBgJnc9JHtzdGF0ZS5jdi53aWR0aH0maD0ke3N0YXRlLmN2LmhlaWdodH0mZml0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHN0YXRlLm9iamVjdEZpdCl9YDtcbiAgICByZXMgPSBhd2FpdCBmZXRjaChgJHtTQ0hFTUV9b3Blbj9zcmM9JHtlbmNvZGVVUklDb21wb25lbnQoc3JjKX0mZnBzPSR7ZnBzfSR7cX1gKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWlsT3Blbih2aWRlbywgc3RhdGUsIHtcbiAgICAgIGNvZGU6IE1FRElBX0VSUl9ORVRXT1JLLFxuICAgICAgbWVzc2FnZTogYG9wZW4gZmFpbGVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gLFxuICAgIH0pO1xuICB9XG4gIGlmIChob29rLnNlc3Npb25zLmdldCh2aWRlbykgIT09IHN0YXRlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXJlcy5vaykge1xuICAgIHJldHVybiBmYWlsT3Blbih2aWRlbywgc3RhdGUsIHtcbiAgICAgIGNvZGU6IE1FRElBX0VSUl9ERUNPREUsXG4gICAgICBtZXNzYWdlOiBgb3BlbiAke3Jlcy5zdGF0dXN9OiAke2F3YWl0IHJlcy50ZXh0KCl9YCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXRhID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIFZpZGVvTWV0YTtcbiAgaWYgKGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKSAhPT0gc3RhdGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHN0YXRlLm1ldGEgPSBtZXRhO1xuICBzdGF0ZS5jdXJyZW50VGltZSA9IHN0YXRlLnBhdXNlZCA/IDAgOiBNYXRoLm1heCgwLCAoaG9vay5jdXJyTXMgLSBiaXJ0aE1zKSAvIDEwMDApO1xuICAvLyBUaGUgc3R1YiBtZWRpYSB1c3VhbGx5IGxvYWRzIG5hdGl2ZWx5IGZpcnN0OyBCbGluayB0aGVuIG93bnMgdGhlIHJlYWwgZXZlbnQgc2VxdWVuY2Ug4oCUIGRvbid0IGR1cGxpY2F0ZSBpdC5cbiAgY29uc3QgbmF0aXZlTWV0YSA9IHZpZGVvLnZpZGVvV2lkdGggPiAwO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmlkZW8sIFwidmlkZW9XaWR0aFwiLCB7XG4gICAgdmFsdWU6IG1ldGEud2lkdGgsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZGVvLCBcInZpZGVvSGVpZ2h0XCIsIHtcbiAgICB2YWx1ZTogbWV0YS5oZWlnaHQsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZGVvLCBcImR1cmF0aW9uXCIsIHtcbiAgICB2YWx1ZTogbWV0YS5kdXJhdGlvbixcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gIH0pO1xuICBzdGF0ZS5yZWFkeVN0YXRlID0gSEFWRV9NRVRBREFUQTtcbiAgaWYgKCFuYXRpdmVNZXRhKSB7XG4gICAgZmlyZSh2aWRlbywgXCJkdXJhdGlvbmNoYW5nZVwiKTtcbiAgICBmaXJlKHZpZGVvLCBcImxvYWRlZG1ldGFkYXRhXCIpO1xuICB9XG4gIHN0YXRlLnJlYWR5U3RhdGUgPSBIQVZFX0VOT1VHSF9EQVRBO1xuICBpZiAoIW5hdGl2ZU1ldGEpIHtcbiAgICBmaXJlKHZpZGVvLCBcImxvYWRlZGRhdGFcIik7XG4gICAgZmlyZSh2aWRlbywgXCJjYW5wbGF5XCIpO1xuICAgIGZpcmUodmlkZW8sIFwiY2FucGxheXRocm91Z2hcIik7XG4gIH1cbiAgc3RhdGUubmV0d29ya1N0YXRlID0gTkVUV09SS19JRExFO1xuICBpZiAoIW5hdGl2ZU1ldGEpIHtcbiAgICBmaXJlKHZpZGVvLCBcInN1c3BlbmRcIik7XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQpIHtcbiAgICAgIGZpcmUodmlkZW8sIFwicGxheVwiKTtcbiAgICAgIGZpcmUodmlkZW8sIFwicGxheWluZ1wiKTtcbiAgICB9XG4gIH1cbiAgaG9vay5jYWNoZS5wcmVmZXRjaChzdGF0ZSwgMSwgQUhFQUQpO1xuICByZXR1cm4gc3RhdGU7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgeyBhZHZhbmNlIH0gZnJvbSBcIi4vZHJpdmVyXCI7XG5pbXBvcnQgeyBGcmFtZUNhY2hlIH0gZnJvbSBcIi4vZnJhbWVfY2FjaGVcIjtcbmltcG9ydCB7IGluc3RhbGxNZWRpYVNoaW0gfSBmcm9tIFwiLi9tZWRpYV9zaGltXCI7XG5pbXBvcnQgeyBzZXR1cENhbnZhcyB9IGZyb20gXCIuL292ZXJsYXlcIjtcbmltcG9ydCB7IG5ld1ZpZGVvU3RhdGUsIG9wZW5TZXNzaW9uIH0gZnJvbSBcIi4vc2Vzc2lvblwiO1xuaW1wb3J0IHsgZmlyZSwgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX3B1cF92aWRlb19fPzogeyBhZHZhbmNlOiAobXM6IG51bWJlcikgPT4gUHJvbWlzZTx1bmtub3duPjsgcmVhZHk6ICgpID0+IFByb21pc2U8dm9pZD4gfTtcbiAgfVxuICBpbnRlcmZhY2UgSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgX19wdXBMYXN0U3JjPzogc3RyaW5nO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb0hvb2sge1xuICByZWFkb25seSBzZXNzaW9ucyA9IG5ldyBXZWFrTWFwPEhUTUxWaWRlb0VsZW1lbnQsIFZpZGVvU3RhdGU+KCk7XG4gIHJlYWRvbmx5IGF0dGFjaGluZyA9IG5ldyBXZWFrTWFwPEhUTUxWaWRlb0VsZW1lbnQsIFByb21pc2U8VmlkZW9TdGF0ZSB8IHVuZGVmaW5lZD4+KCk7XG4gIC8vIEVudW1lcmFibGUgbWlycm9yIG9mIGluLWZsaWdodCBvcGVucyAoV2Vha01hcCBpc24ndCBpdGVyYWJsZSkgc28gcmVhZHkoKSBjYW4gYXdhaXQgdGhlbS5cbiAgcmVhZG9ubHkgb3BlbmluZyA9IG5ldyBTZXQ8UHJvbWlzZTx1bmtub3duPj4oKTtcbiAgcmVhZG9ubHkgY2FjaGUgPSBuZXcgRnJhbWVDYWNoZSgpO1xuICBydmZjU2VxID0gMDtcbiAgY3Vyck1zID0gMDtcbiAgcHJpdmF0ZSBfbGFzdFNuYXBzaG90ID0gbmV3IFdlYWtNYXA8SFRNTFZpZGVvRWxlbWVudCwgT2Zmc2NyZWVuQ2FudmFzPigpO1xuXG4gIGluc3RhbGwoKTogdm9pZCB7XG4gICAgaW5zdGFsbE1lZGlhU2hpbSh0aGlzKTtcbiAgICB0aGlzLnNjYW4oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0cykgPT4ge1xuICAgICAgZm9yIChjb25zdCBtIG9mIG11dHMpIHtcbiAgICAgICAgaWYgKG0udHlwZSA9PT0gXCJhdHRyaWJ1dGVzXCIgJiYgbS50YXJnZXQgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50ICYmIG0uYXR0cmlidXRlTmFtZSA9PT0gXCJzcmNcIikge1xuICAgICAgICAgIHRoaXMub25TcmNDaGFuZ2UobS50YXJnZXQpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIG0uYWRkZWROb2Rlcy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNjYW4obik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbS5yZW1vdmVkTm9kZXMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICAgIGlmIChuIGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5kZXRhY2gobik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KS5vYnNlcnZlKGRvY3VtZW50LCB7IHN1YnRyZWU6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZSwgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbXCJzcmNcIl0gfSk7XG4gICAgd2luZG93Ll9fcHVwX3ZpZGVvX18gPSB7IGFkdmFuY2U6IChtcykgPT4gYWR2YW5jZSh0aGlzLCBtcyksIHJlYWR5OiAoKSA9PiB0aGlzLnJlYWR5KCkgfTtcbiAgfVxuXG4gIGF0dGFjaCh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgbmF0aXZlID0gZmFsc2UpOiBQcm9taXNlPFZpZGVvU3RhdGUgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuc2Vzc2lvbnMuZ2V0KHZpZGVvKTtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZXhpc3RpbmcpO1xuICAgIH1cbiAgICBjb25zdCBwZW5kaW5nID0gdGhpcy5hdHRhY2hpbmcuZ2V0KHZpZGVvKTtcbiAgICBpZiAocGVuZGluZykge1xuICAgICAgcmV0dXJuIHBlbmRpbmc7XG4gICAgfVxuICAgIGNvbnN0IHNyYyA9IHZpZGVvLnNyYyB8fCB2aWRlby5jdXJyZW50U3JjO1xuICAgIGlmICghc3JjKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGlmICgvXihibG9iOnxkYXRhOnxtZWRpYXN0cmVhbTopL2kudGVzdChzcmMpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGNvbnN0IGN2ID0gc2V0dXBDYW52YXModmlkZW8sIHRoaXMuX2xhc3RTbmFwc2hvdC5nZXQodmlkZW8pKTtcbiAgICBjb25zdCBzdGF0ZSA9IG5ld1ZpZGVvU3RhdGUodmlkZW8sIGN2KTtcbiAgICB0aGlzLnNlc3Npb25zLnNldCh2aWRlbywgc3RhdGUpO1xuICAgIGNvbnN0IHAgPSBvcGVuU2Vzc2lvbih0aGlzLCB7IHZpZGVvLCBzdGF0ZSwgc3JjLCBiaXJ0aE1zOiB0aGlzLmN1cnJNcywgbmF0aXZlIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5hdHRhY2hpbmcuZGVsZXRlKHZpZGVvKTtcbiAgICAgIHRoaXMub3BlbmluZy5kZWxldGUocCk7XG4gICAgfSk7XG4gICAgdGhpcy5hdHRhY2hpbmcuc2V0KHZpZGVvLCBwKTtcbiAgICB0aGlzLm9wZW5pbmcuYWRkKHApO1xuICAgIHJldHVybiBwO1xuICB9XG5cbiAgLy8gQXdhaXQgb25seSB0aGUgb3BlbnMgaW4gZmxpZ2h0IHJpZ2h0IG5vdyDigJQgbmV2ZXIgY2hhc2UgbmV3bHktc3Bhd25lZCBvbmVzLCBvciBhIHJldHJ5aW5nIHBhZ2UgbG9vcHMgZm9yZXZlci5cbiAgYXN5bmMgcmVhZHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFsuLi50aGlzLm9wZW5pbmddKTtcbiAgfVxuXG4gIHJlc3VtZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgc3RhdGU6IFZpZGVvU3RhdGUpOiB2b2lkIHtcbiAgICBpZiAoIXN0YXRlLnBhdXNlZCAmJiAhc3RhdGUuZW5kZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RhdGUucGF1c2VkID0gZmFsc2U7XG4gICAgc3RhdGUuZW5kZWQgPSBmYWxzZTtcbiAgICBmaXJlKHZpZGVvLCBcInBsYXlcIik7XG4gICAgZmlyZSh2aWRlbywgXCJwbGF5aW5nXCIpO1xuICB9XG5cbiAgZGV0YWNoKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnNlc3Npb25zLmdldCh2aWRlbyk7XG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc3RhdGUubWV0YSkge1xuICAgICAgaWYgKHN0YXRlLmxhc3REcmF3bklkeCA+PSAwKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc25hcCA9IG5ldyBPZmZzY3JlZW5DYW52YXMoc3RhdGUuY3Yud2lkdGgsIHN0YXRlLmN2LmhlaWdodCk7XG4gICAgICAgICAgY29uc3Qgc2N0eCA9IHNuYXAuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgICAgIGlmICghc2N0eCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm8gMmQgY29udGV4dFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2N0eC5kcmF3SW1hZ2Uoc3RhdGUuY3YsIDAsIDApO1xuICAgICAgICAgIHRoaXMuX2xhc3RTbmFwc2hvdC5zZXQodmlkZW8sIHNuYXApO1xuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9XG4gICAgICB0aGlzLmNhY2hlLnJlbGVhc2Uoc3RhdGUubWV0YS5pZCwgc3RhdGUpO1xuICAgIH1cbiAgICBzdGF0ZS5jdi5yZW1vdmUoKTtcbiAgICB0aGlzLnNlc3Npb25zLmRlbGV0ZSh2aWRlbyk7XG4gICAgdGhpcy5hdHRhY2hpbmcuZGVsZXRlKHZpZGVvKTtcbiAgfVxuXG4gIG9uU3JjQ2hhbmdlKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc3JjID0gdmlkZW8uc3JjIHx8IHZpZGVvLmN1cnJlbnRTcmMgfHwgXCJcIjtcbiAgICBpZiAodmlkZW8uX19wdXBMYXN0U3JjID09PSBzcmMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmlkZW8uX19wdXBMYXN0U3JjID0gc3JjO1xuICAgIGlmICh0aGlzLnNlc3Npb25zLmhhcyh2aWRlbykpIHtcbiAgICAgIHRoaXMuZGV0YWNoKHZpZGVvKTtcbiAgICB9XG4gICAgdGhpcy5hdHRhY2godmlkZW8pO1xuICB9XG5cbiAgLy8gUmUtb3BlbiBhdCBuYXRpdmUgcmVzb2x1dGlvbiAodGhlIGVsZW1lbnQgb3V0Z3JldyB0aGUgZG93bnNjYWxlZCBkZWNvZGUpLCBwcmVzZXJ2aW5nIHBsYXliYWNrIHN0YXRlLlxuICByZWF0dGFjaCh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgc3RhdGU6IFZpZGVvU3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCB0ID0gc3RhdGUuY3VycmVudFRpbWU7XG4gICAgY29uc3QgcGF1c2VkID0gc3RhdGUucGF1c2VkO1xuICAgIGNvbnN0IGVuZGVkID0gc3RhdGUuZW5kZWQ7XG4gICAgdGhpcy5kZXRhY2godmlkZW8pO1xuICAgIHZvaWQgdGhpcy5hdHRhY2godmlkZW8sIHRydWUpLnRoZW4oKG5zKSA9PiB7XG4gICAgICBpZiAoIW5zKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5zLmN1cnJlbnRUaW1lID0gdDtcbiAgICAgIG5zLnBhdXNlZCA9IHBhdXNlZDtcbiAgICAgIG5zLmVuZGVkID0gZW5kZWQ7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNjYW4ocm9vdDogRWxlbWVudCB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJvb3QudGFnTmFtZSA9PT0gXCJWSURFT1wiKSB7XG4gICAgICB0aGlzLmF0dGFjaChyb290IGFzIEhUTUxWaWRlb0VsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAocm9vdC5xdWVyeVNlbGVjdG9yQWxsKSB7XG4gICAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ2aWRlb1wiKS5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgIHRoaXMuYXR0YWNoKHYpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsVmlkZW9Ib29rKCk6IHZvaWQge1xuICBpZiAod2luZG93Ll9fcHVwX3ZpZGVvX18pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbmV3IFZpZGVvSG9vaygpLmluc3RhbGwoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDcvMjcuXG5cbmltcG9ydCB7IGluc3RhbGxBdWRpb1NoaW0gfSBmcm9tIFwiLi9hdWRpby9zaGltXCI7XG5pbXBvcnQgeyBpbnN0YWxsSGZIb29rIH0gZnJvbSBcIi4vaHlwZXJmcmFtZXNcIjtcbmltcG9ydCB7IGluc3RhbGxUaWNrSG9vayB9IGZyb20gXCIuL3RpY2tcIjtcbmltcG9ydCB7IGluc3RhbGxWaWRlb0hvb2sgfSBmcm9tIFwiLi92aWRlby9ob29rXCI7XG5cbmlmICh3aW5kb3cuc2VsZiAhPT0gd2luZG93LnRvcCkge1xuICBpbnN0YWxsQXVkaW9TaGltKCk7XG4gIGluc3RhbGxIZkhvb2soKTtcbiAgaW5zdGFsbFRpY2tIb29rKCk7XG4gIGluc3RhbGxWaWRlb0hvb2soKTtcbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2F1ZGlvL3NoaW0udHMiLCIuLi8uLi9zcmMvcnVudGltZS9oeXBlcmZyYW1lcy50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3RpY2sudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9vdmVybGF5LnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vdHlwZXMudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9kcml2ZXIudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9mcmFtZV9jYWNoZS50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3ZpZGVvL21lZGlhX3NoaW0udHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9zZXNzaW9uLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vaG9vay50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3Nob290LnRzIl0sIm5hbWVzIjpbImZhaWwiLCJlbCIsIkF1ZGlvU2hpbSIsInVybCIsImluc3RhbGxBdWRpb1NoaW0iLCJOYXRpdmVBdWRpbyIsIkhBRSIsImluc3RhbGxIZkhvb2siLCJpbnN0YWxsVGlja0hvb2siLCJSRUFMX0RBVEUiLCJkYXRlT3JpZ2luIiwiY3Vyck1zIiwidGltZU9mZnNldCIsInJhZlF1ZXVlIiwidGltZXJzIiwibmV4dElkIiwidGljayIsIkZha2VEYXRlIiwiYXJncyIsImNiIiwiaWQiLCJyIiwiZGVsYXkiLCJkIiwic2FmZUludm9rZVRpbWVyIiwiZm4iLCJlIiwic2FmZUludm9rZVJhZiIsInRzIiwiYW5pbVN0YXRlIiwiZW5kQm91bmRhcnkiLCJhIiwidCIsInN5bmNBbmltYXRpb25zIiwibXMiLCJhbmltcyIsInN0YXRlIiwicmF0ZSIsInMiLCJjdCIsImN0MCIsInRhcmdldCIsImVuZCIsInByb2Nlc3MiLCJ0aW1lc3RhbXBNcyIsInJhZnMiLCJNSVJST1JfUFJPUFMiLCJjc3NDYXNlIiwiYyIsInN5bmNPdmVybGF5IiwidmlkZW8iLCJjdiIsImNzIiwicCIsInYiLCJ2ciIsImRwciIsInciLCJoIiwicmVzaXplZCIsInNldHVwQ2FudmFzIiwic25hcCIsImZpdFJlY3QiLCJzcmNXIiwic3JjSCIsImRzdFciLCJkc3RIIiwiZml0Iiwic2MiLCJrIiwid3MiLCJocyIsInNjMiIsIndzMiIsImhzMiIsIlNDSEVNRSIsIlRBRyIsInRpbWVSYW5nZXMiLCJmaXJlIiwidHlwZSIsImZpcmVGcmFtZUNhbGxiYWNrcyIsImNicyIsIm5vdyIsIm1ldGEiLCJwYWludCIsImhvb2siLCJpZHgiLCJibSIsImZldGNoZWQiLCJhZHZhbmNlIiwiZHQiLCJwcyIsIkZyYW1lQ2FjaGUiLCJleGlzdGluZyIsImNhY2hlZCIsImJ1ZiIsImZyb21JZHgiLCJjb3VudCIsIm1heElkeCIsIm1pbklkeCIsImZsb29yIiwiaW5zdGFsbE1lZGlhU2hpbSIsIkhWRSIsIk1FRElBIiwibWRlc2MiLCJjdERlc2MiLCJzcmNEZXNjIiwicmF0ZURlc2MiLCJvcmlnUGF1c2UiLCJvcmlnUlZGQyIsIm9yaWdDYW5jZWxSVkZDIiwib3JpZ1F1YWxpdHkiLCJvcmlnTG9hZCIsInNlc3Npb25zIiwiZGVmIiwicHJvcCIsInBpY2siLCJuYXRpdmVHZXQiLCJucyIsImN0R2V0IiwiY3RTZXQiLCJkdXIiLCJyYXRlU2V0Iiwic3JjU2V0IiwibmV3VmlkZW9TdGF0ZSIsImZhaWxPcGVuIiwiZXJyb3IiLCJvcGVuU2Vzc2lvbiIsInNyYyIsImJpcnRoTXMiLCJuYXRpdmUiLCJmcHMiLCJyZXMiLCJxIiwibmF0aXZlTWV0YSIsIlZpZGVvSG9vayIsIm11dHMiLCJtIiwibiIsInBlbmRpbmciLCJzY3R4IiwicGF1c2VkIiwiZW5kZWQiLCJyb290IiwiaW5zdGFsbFZpZGVvSG9vayJdLCJtYXBwaW5ncyI6InlCQUtBLFNBQVNBLENBQUFBLENBQUtDLEVBQTRCLENBQ3hDLGNBQUEsQ0FBZSxJQUFNLENBQ25CLE1BQUEsQ0FBTyxlQUFlQSxDQUFBQSxDQUFJLE9BQUEsQ0FBUyxDQUNqQyxZQUFBLENBQWMsSUFB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LCJmaWxlIjoic2hvb3QuZ2xvYmFsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLWQgY2FwdHVyZXMgbm8gYXVkaW87IGEgbG9hZGluZyA8YXVkaW8+IHdvdWxkIGhpdCB0aGUgbWVkaWHihpJzdHViIHJlZGlyZWN0LCB3aGljaCBzZXJ2ZXMgdmlkZW8gc3R1YnMgb25seS5cblxuY29uc3QgU1JDX05PVF9TVVBQT1JURUQgPSA0OyAvLyBNRURJQV9FUlJfU1JDX05PVF9TVVBQT1JURURcblxuLy8gTWlycm9yIGEgZmFpbGVkIG5hdGl2ZSBsb2FkIHNvIGVycm9yLWhhbmRsaW5nIHBhZ2VzIHByb2NlZWQgZXhhY3RseSBhcyB0aGV5IGRvIHdoZW4gdGhlIHNvdXJjZSBpcyBicm9rZW4uXG5mdW5jdGlvbiBmYWlsKGVsOiBIVE1MQXVkaW9FbGVtZW50KTogdm9pZCB7XG4gIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWwsIFwiZXJyb3JcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IHsgY29kZTogU1JDX05PVF9TVVBQT1JURUQsIG1lc3NhZ2U6IFwiYXVkaW8gZGlzYWJsZWQgaW4gZGV0ZXJtaW5pc3RpYyBtb2RlXCIgfSxcbiAgICB9KTtcbiAgICBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImVycm9yXCIpKTtcbiAgfSk7XG59XG5cbi8vIFRoZSBuYXRpdmUgQXVkaW8oKSBjb25zdHJ1Y3RvciBpbnZva2VzIHRoZSBsb2FkIGFsZ29yaXRobSBpbnRlcm5hbGx5LCBzbyBvbmx5IGEgY29uc3RydWN0b3Igc3dhcCBjYW4gcHJlZW1wdCB0aGUgZmV0Y2guXG5mdW5jdGlvbiBBdWRpb1NoaW0odXJsPzogc3RyaW5nKTogSFRNTEF1ZGlvRWxlbWVudCB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImF1ZGlvXCIpO1xuICBlbC5wcmVsb2FkID0gXCJub25lXCI7XG4gIGlmICh1cmwpIHtcbiAgICBlbC5zcmMgPSB1cmw7XG4gICAgZmFpbChlbCk7XG4gIH1cbiAgcmV0dXJuIGVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbEF1ZGlvU2hpbSgpOiB2b2lkIHtcbiAgY29uc3QgTmF0aXZlQXVkaW8gPSB3aW5kb3cuQXVkaW87XG4gIHdpbmRvdy5BdWRpbyA9IEF1ZGlvU2hpbSBhcyB1bmtub3duIGFzIHR5cGVvZiBBdWRpbztcbiAgd2luZG93LkF1ZGlvLnByb3RvdHlwZSA9IE5hdGl2ZUF1ZGlvLnByb3RvdHlwZTtcblxuICBjb25zdCBIQUUgPSBIVE1MQXVkaW9FbGVtZW50LnByb3RvdHlwZTtcbiAgSEFFLmxvYWQgPSBmdW5jdGlvbiAodGhpczogSFRNTEF1ZGlvRWxlbWVudCkge1xuICAgIGZhaWwodGhpcyk7XG4gIH07XG4gIEhBRS5wbGF5ID0gZnVuY3Rpb24gKHRoaXM6IEhUTUxBdWRpb0VsZW1lbnQpIHtcbiAgICBmYWlsKHRoaXMpO1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRE9NRXhjZXB0aW9uKFwiYXVkaW8gZGlzYWJsZWQgaW4gZGV0ZXJtaW5pc3RpYyBtb2RlXCIsIFwiTm90U3VwcG9ydGVkRXJyb3JcIikpO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNy8xNi5cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX0hGX01PREVfXz86IHN0cmluZztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbEhmSG9vaygpIHtcbiAgd2luZG93Ll9fSEZfTU9ERV9fID0gXCJleHBvcnRcIjtcbn1cbiIsImRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX19wdXBfdGlja19fPzogeyBwcm9jZXNzOiAobXM6IG51bWJlcikgPT4gdm9pZCB9O1xuICB9XG59XG5cbmludGVyZmFjZSBUaW1lciB7XG4gIHR5cGU6IFwidGltZW91dFwiIHwgXCJpbnRlcnZhbFwiO1xuICBjYjogVGltZXJIYW5kbGVyO1xuICBkZWxheTogbnVtYmVyO1xuICBuZXh0OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBSYWZFbnRyeSB7XG4gIGlkOiBudW1iZXI7XG4gIGNiOiBGcmFtZVJlcXVlc3RDYWxsYmFjaztcbn1cblxuaW50ZXJmYWNlIEFuaW1FbnRyeSB7XG4gIHN0YXJ0TXM6IG51bWJlcjtcbiAgYWRvcHRlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxUaWNrSG9vaygpOiB2b2lkIHtcbiAgaWYgKHdpbmRvdy5fX3B1cF90aWNrX18pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBSRUFMX0RBVEUgPSBEYXRlO1xuICBjb25zdCBkYXRlT3JpZ2luID0gUkVBTF9EQVRFLm5vdygpO1xuICBsZXQgY3Vyck1zID0gMDtcbiAgbGV0IHRpbWVPZmZzZXQgPSAwO1xuICBsZXQgcmFmUXVldWU6IFJhZkVudHJ5W10gPSBbXTtcbiAgY29uc3QgdGltZXJzOiBSZWNvcmQ8bnVtYmVyLCBUaW1lciB8IHVuZGVmaW5lZD4gPSB7fTtcbiAgbGV0IG5leHRJZCA9IDE7XG4gIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgdGltZU9mZnNldCArPSAwLjAxO1xuICAgIHJldHVybiB0aW1lT2Zmc2V0O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEZha2VEYXRlKHRoaXM6IHVua25vd24sIC4uLmFyZ3M6IHVua25vd25bXSk6IERhdGUgfCBzdHJpbmcge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBGYWtlRGF0ZSkpIHtcbiAgICAgIHJldHVybiBuZXcgUkVBTF9EQVRFKGRhdGVPcmlnaW4gKyBjdXJyTXMpLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzLmxlbmd0aFxuICAgICAgPyBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KFJFQUxfREFURSwgW251bGwsIC4uLmFyZ3NdKSkoKVxuICAgICAgOiBuZXcgUkVBTF9EQVRFKGRhdGVPcmlnaW4gKyBjdXJyTXMgKyB0aWNrKCkpO1xuICB9XG4gIEZha2VEYXRlLnByb3RvdHlwZSA9IFJFQUxfREFURS5wcm90b3R5cGU7XG4gIEZha2VEYXRlLm5vdyA9ICgpID0+IGRhdGVPcmlnaW4gKyBjdXJyTXMgKyB0aWNrKCk7XG4gIEZha2VEYXRlLnBhcnNlID0gUkVBTF9EQVRFLnBhcnNlO1xuICBGYWtlRGF0ZS5VVEMgPSBSRUFMX0RBVEUuVVRDO1xuICAod2luZG93IGFzIHVua25vd24gYXMgeyBEYXRlOiB1bmtub3duIH0pLkRhdGUgPSBGYWtlRGF0ZTtcbiAgcGVyZm9ybWFuY2Uubm93ID0gKCkgPT4gY3Vyck1zICsgdGljaygpO1xuXG4gIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSAoY2IpID0+IHtcbiAgICBjb25zdCBpZCA9IG5leHRJZCsrO1xuICAgIHJhZlF1ZXVlLnB1c2goeyBpZCwgY2IgfSk7XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSAoaWQpID0+IHtcbiAgICByYWZRdWV1ZSA9IHJhZlF1ZXVlLmZpbHRlcigocikgPT4gci5pZCAhPT0gaWQpO1xuICB9O1xuICAod2luZG93IGFzIHVua25vd24gYXMgeyBzZXRUaW1lb3V0OiB1bmtub3duIH0pLnNldFRpbWVvdXQgPSAoY2I6IFRpbWVySGFuZGxlciwgZGVsYXk/OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBpZCA9IG5leHRJZCsrO1xuICAgIHRpbWVyc1tpZF0gPSB7IHR5cGU6IFwidGltZW91dFwiLCBjYiwgZGVsYXk6IGRlbGF5IHx8IDAsIG5leHQ6IGN1cnJNcyArIChkZWxheSB8fCAwKSB9O1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNsZWFyVGltZW91dCA9IChpZCkgPT4ge1xuICAgIGlmICh0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGRlbGV0ZSB0aW1lcnNbaWRdO1xuICAgIH1cbiAgfTtcbiAgKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgc2V0SW50ZXJ2YWw6IHVua25vd24gfSkuc2V0SW50ZXJ2YWwgPSAoY2I6IFRpbWVySGFuZGxlciwgZGVsYXk/OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBpZCA9IG5leHRJZCsrO1xuICAgIGNvbnN0IGQgPSBNYXRoLm1heChkZWxheSB8fCAwLCAxKTtcbiAgICB0aW1lcnNbaWRdID0geyB0eXBlOiBcImludGVydmFsXCIsIGNiLCBkZWxheTogZCwgbmV4dDogY3Vyck1zICsgZCB9O1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNsZWFySW50ZXJ2YWwgPSAoaWQpID0+IHtcbiAgICBpZiAodHlwZW9mIGlkID09PSBcIm51bWJlclwiKSB7XG4gICAgICBkZWxldGUgdGltZXJzW2lkXTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gc2FmZUludm9rZVRpbWVyKGZuOiBUaW1lckhhbmRsZXIpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAvLyBTdHJpbmcgdGltZXIgaGFuZGxlciBydW5zIGFzIHBhZ2Ugc2NyaXB0IGluIGdsb2JhbCBzY29wZSAoSFRNTCBzcGVjKTsgRnVuY3Rpb24gY3RvciBtYXRjaGVzIHRoYXQsIGF2b2lkcyBldmFsLlxuICAgICAgICBuZXcgRnVuY3Rpb24oZm4pKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmbigpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJbVGlja10gZXJyb3I6XCIsIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5zdGFjaykgfHwgZSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHNhZmVJbnZva2VSYWYoY2I6IEZyYW1lUmVxdWVzdENhbGxiYWNrLCB0czogbnVtYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNiKHRzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW1RpY2tdIGVycm9yOlwiLCAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUuc3RhY2spIHx8IGUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFuaW1TdGF0ZSA9IG5ldyBXZWFrTWFwPEFuaW1hdGlvbiwgQW5pbUVudHJ5PigpO1xuICBmdW5jdGlvbiBlbmRCb3VuZGFyeShhOiBBbmltYXRpb24pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ID0gYS5lZmZlY3Q/LmdldENvbXB1dGVkVGltaW5nKCkuZW5kVGltZTtcbiAgICAgIHJldHVybiB0eXBlb2YgdCA9PT0gXCJudW1iZXJcIiAmJiBOdW1iZXIuaXNGaW5pdGUodCkgPyB0IDogdW5kZWZpbmVkO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRGV0YWNoZWQvZm9yZWlnbiBlZmZlY3RzIGhhdmUgbm8gdGltaW5nOyB0cmVhdCBhcyB1bmJvdW5kZWQuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICAvLyBBZG9wdCBydW5uaW5nIGFuaW1hdGlvbnMgKHBhdXNlICsgZHJpdmUgY3VycmVudFRpbWUgb2ZmIHRoZSB2aXJ0dWFsIGNsb2NrKTogYW4gaW5maW5pdGUgY29tcG9zaXRvciBhbmltYXRpb24gb3RoZXJ3aXNlIGtlZXBzIHZpeiBmcmVlLXJ1bm5pbmcgYXQgUkVOREVSX0ZQUywgc3RhcnZpbmcgQ0RQIGV2YWxzLlxuICBmdW5jdGlvbiBzeW5jQW5pbWF0aW9ucyhtczogbnVtYmVyKSB7XG4gICAgbGV0IGFuaW1zOiBBbmltYXRpb25bXTtcbiAgICB0cnkge1xuICAgICAgYW5pbXMgPSBkb2N1bWVudC5nZXRBbmltYXRpb25zKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgYSBvZiBhbmltcykge1xuICAgICAgY29uc3Qgc3RhdGUgPSBhLnBsYXlTdGF0ZTtcbiAgICAgIGlmIChzdGF0ZSA9PT0gXCJpZGxlXCIgfHwgc3RhdGUgPT09IFwiZmluaXNoZWRcIikge1xuICAgICAgICBhbmltU3RhdGUuZGVsZXRlKGEpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJhdGUgPSB0eXBlb2YgYS5wbGF5YmFja1JhdGUgPT09IFwibnVtYmVyXCIgPyBhLnBsYXliYWNrUmF0ZSA6IDE7XG4gICAgICBpZiAocmF0ZSA9PT0gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBzID0gYW5pbVN0YXRlLmdldChhKTtcbiAgICAgIGlmICghcykge1xuICAgICAgICBjb25zdCBjdDAgPSB0eXBlb2YgYS5jdXJyZW50VGltZSA9PT0gXCJudW1iZXJcIiA/IGEuY3VycmVudFRpbWUgOiAwO1xuICAgICAgICBzID0geyBzdGFydE1zOiBtcyAtIGN0MCAvIHJhdGUsIGFkb3B0ZWQ6IHN0YXRlICE9PSBcInBhdXNlZFwiIH07XG4gICAgICAgIGFuaW1TdGF0ZS5zZXQoYSwgcyk7XG4gICAgICAgIGlmIChzLmFkb3B0ZWQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYS5wYXVzZSgpO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gUGF1c2UtcmVqZWN0aW5nIHN0YXRlcyAoZS5nLiBtaWQtY2FuY2VsKSBzdGlsbCBhY2NlcHQgY3VycmVudFRpbWUgd3JpdGVzIGJlbG93LlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghcy5hZG9wdGVkICYmIHN0YXRlICE9PSBcInBhdXNlZFwiKSB7XG4gICAgICAgIGNvbnN0IGN0ID0gdHlwZW9mIGEuY3VycmVudFRpbWUgPT09IFwibnVtYmVyXCIgPyBhLmN1cnJlbnRUaW1lIDogMDtcbiAgICAgICAgcy5zdGFydE1zID0gbXMgLSBjdCAvIHJhdGU7XG4gICAgICAgIHMuYWRvcHRlZCA9IHRydWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYS5wYXVzZSgpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBTYW1lIGFzIGFkb3B0aW9uIGFib3ZlOiBkcml2ZSBieSBjdXJyZW50VGltZSByZWdhcmRsZXNzLlxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXMuYWRvcHRlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRhcmdldCA9IChtcyAtIHMuc3RhcnRNcykgKiByYXRlO1xuICAgICAgY29uc3QgZW5kID0gZW5kQm91bmRhcnkoYSk7XG4gICAgICAvLyBmaW5pc2goKSBzZWVrcyB0byB0aGUgcmF0ZS1hcHByb3ByaWF0ZSBib3VuZGFyeSBhbmQgYXBwbGllcyBmaWxsIG1vZGU7IHBhdXNlZCBob2xkcyB3b3VsZCBtaXNyZW5kZXIgZmlsbDpub25lLlxuICAgICAgaWYgKHJhdGUgPiAwID8gZW5kICE9PSB1bmRlZmluZWQgJiYgdGFyZ2V0ID49IGVuZCA6IHRhcmdldCA8PSAwKSB7XG4gICAgICAgIGFuaW1TdGF0ZS5kZWxldGUoYSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYS5maW5pc2goKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gSW5maW5pdGUtZHVyYXRpb24gcmV2ZXJzZSBvciBkZXRhY2hlZCBlZmZlY3Q6IGxlYXZlIGFzLWlzLlxuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYS5jdXJyZW50VGltZSA9IHRhcmdldDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzKHRpbWVzdGFtcE1zOiBudW1iZXIpIHtcbiAgICBjdXJyTXMgPSB0aW1lc3RhbXBNcztcbiAgICB0aW1lT2Zmc2V0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIE9iamVjdC5rZXlzKHRpbWVycykpIHtcbiAgICAgIGNvbnN0IHQgPSB0aW1lcnNbTnVtYmVyKGlkKV07XG4gICAgICBpZiAoIXQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB3aGlsZSAodC5uZXh0IDw9IGN1cnJNcykge1xuICAgICAgICBzYWZlSW52b2tlVGltZXIodC5jYik7XG4gICAgICAgIGlmICh0LnR5cGUgPT09IFwidGltZW91dFwiKSB7XG4gICAgICAgICAgZGVsZXRlIHRpbWVyc1tOdW1iZXIoaWQpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0Lm5leHQgKz0gdC5kZWxheTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmFmcyA9IHJhZlF1ZXVlLnNwbGljZSgwKTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgcmFmcykge1xuICAgICAgc2FmZUludm9rZVJhZihyLmNiLCBjdXJyTXMpO1xuICAgIH1cbiAgICBzeW5jQW5pbWF0aW9ucyhjdXJyTXMpO1xuICB9XG5cbiAgd2luZG93Ll9fcHVwX3RpY2tfXyA9IHsgcHJvY2VzcyB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxudHlwZSBWZWM0ID0gW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5cbmNvbnN0IE1JUlJPUl9QUk9QUyA9IFtcbiAgXCJib3JkZXJSYWRpdXNcIixcbiAgXCJib3JkZXJUb3BMZWZ0UmFkaXVzXCIsXG4gIFwiYm9yZGVyVG9wUmlnaHRSYWRpdXNcIixcbiAgXCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzXCIsXG4gIFwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXNcIixcbiAgXCJ0cmFuc2Zvcm1cIixcbiAgXCJ0cmFuc2Zvcm1PcmlnaW5cIixcbiAgXCJmaWx0ZXJcIixcbiAgXCJjbGlwUGF0aFwiLFxuICBcImJveFNoYWRvd1wiLFxuICBcIm9wYWNpdHlcIixcbiAgXCJtaXhCbGVuZE1vZGVcIixcbiAgXCJtYXNrXCIsXG4gIFwiekluZGV4XCIsXG4gIFwicG9zaXRpb25cIixcbiAgXCJsZWZ0XCIsXG4gIFwidG9wXCIsXG4gIFwicmlnaHRcIixcbiAgXCJib3R0b21cIixcbl0gYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIGNzc0Nhc2Uoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHMucmVwbGFjZSgvW0EtWl0vZywgKGMpID0+IGAtJHtjLnRvTG93ZXJDYXNlKCl9YCk7XG59XG5cbi8vIFRyYWNrIHRoZSBvdmVybGF5IGNhbnZhcyB0byB0aGUgdmlkZW8gZWxlbWVudCdzIGxpdmUgYm94OyB0cnVlID0gYmFja2luZyBzdG9yZSByZXNpemVkICh3aGljaCB3aXBlcyB0aGUgY2FudmFzKS5cbmV4cG9ydCBmdW5jdGlvbiBzeW5jT3ZlcmxheSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgY3Y6IEhUTUxDYW52YXNFbGVtZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IGNzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodmlkZW8pO1xuICBjdi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgLy8gb2Zmc2V0KiBhcmUgcHJlLXRyYW5zZm9ybSBjb29yZHMgZnJvbSBvZmZzZXRQYXJlbnQncyBwYWRkaW5nIGVkZ2UgPSB0aGUgYWJzIGNvbnRhaW5pbmctYmxvY2sgb3JpZ2luOyBtYXAgZGlyZWN0LlxuICBjdi5zdHlsZS5sZWZ0ID0gYCR7dmlkZW8ub2Zmc2V0TGVmdH1weGA7XG4gIGN2LnN0eWxlLnRvcCA9IGAke3ZpZGVvLm9mZnNldFRvcH1weGA7XG4gIGN2LnN0eWxlLndpZHRoID0gYCR7dmlkZW8ub2Zmc2V0V2lkdGh9cHhgO1xuICBjdi5zdHlsZS5oZWlnaHQgPSBgJHt2aWRlby5vZmZzZXRIZWlnaHR9cHhgO1xuICBmb3IgKGNvbnN0IHAgb2YgTUlSUk9SX1BST1BTKSB7XG4gICAgaWYgKHAgPT09IFwicG9zaXRpb25cIiB8fCBwID09PSBcImxlZnRcIiB8fCBwID09PSBcInRvcFwiIHx8IHAgPT09IFwicmlnaHRcIiB8fCBwID09PSBcImJvdHRvbVwiKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgdiA9IGNzLmdldFByb3BlcnR5VmFsdWUoY3NzQ2FzZShwKSk7XG4gICAgaWYgKHYpIHtcbiAgICAgIGN2LnN0eWxlLnNldFByb3BlcnR5KGNzc0Nhc2UocCksIHYpO1xuICAgIH1cbiAgfVxuICAvLyBCYWNraW5nIHN0b3JlIGF0IG9uLXNjcmVlbiBwaXhlbCBzaXplIChwb3N0LXRyYW5zZm9ybSkgc28gZGVjb2RlIHJlc29sdXRpb24gbWF0Y2hlcyBkaXNwbGF5ZWQgcGl4ZWxzLlxuICBjb25zdCB2ciA9IHZpZGVvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBkcHIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICBjb25zdCB3ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZCh2ci53aWR0aCAqIGRwcikpO1xuICBjb25zdCBoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZCh2ci5oZWlnaHQgKiBkcHIpKTtcbiAgbGV0IHJlc2l6ZWQgPSBmYWxzZTtcbiAgaWYgKGN2LndpZHRoICE9PSB3KSB7XG4gICAgY3Yud2lkdGggPSB3O1xuICAgIHJlc2l6ZWQgPSB0cnVlO1xuICB9XG4gIGlmIChjdi5oZWlnaHQgIT09IGgpIHtcbiAgICBjdi5oZWlnaHQgPSBoO1xuICAgIHJlc2l6ZWQgPSB0cnVlO1xuICB9XG4gIHJldHVybiByZXNpemVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBDYW52YXModmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHNuYXA6IE9mZnNjcmVlbkNhbnZhcyB8IHVuZGVmaW5lZCk6IEhUTUxDYW52YXNFbGVtZW50IHtcbiAgY29uc3QgY3YgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICBjdi5kYXRhc2V0W1wicHVwVmlkZW9PdmVybGF5XCJdID0gXCIxXCI7XG4gIGN2LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcIm5vbmVcIjtcbiAgdmlkZW8uc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gIHZpZGVvLm11dGVkID0gdHJ1ZTtcbiAgY29uc3QgcGFyZW50ID0gdmlkZW8ucGFyZW50Tm9kZSB8fCBkb2N1bWVudC5ib2R5O1xuICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGN2LCB2aWRlby5uZXh0U2libGluZyk7XG4gIHN5bmNPdmVybGF5KHZpZGVvLCBjdik7XG4gIGlmIChzbmFwKSB7XG4gICAgdHJ5IHtcbiAgICAgIGN2LmdldENvbnRleHQoXCIyZFwiKSEuZHJhd0ltYWdlKHNuYXAsIDAsIDAsIGN2LndpZHRoLCBjdi5oZWlnaHQpO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuICByZXR1cm4gY3Y7XG59XG5cbi8vIERyYXcgcmVjdCBmb3IgdGhlIGJpdG1hcCB3aXRoaW4gdGhlIGNhbnZhcyBwZXIgb2JqZWN0Rml0LlxuZXhwb3J0IGZ1bmN0aW9uIGZpdFJlY3Qoc3JjVzogbnVtYmVyLCBzcmNIOiBudW1iZXIsIGRzdFc6IG51bWJlciwgZHN0SDogbnVtYmVyLCBmaXQ6IHN0cmluZyk6IFZlYzQge1xuICBpZiAoZml0ID09PSBcIm5vbmVcIikge1xuICAgIHJldHVybiBbKGRzdFcgLSBzcmNXKSAvIDIsIChkc3RIIC0gc3JjSCkgLyAyLCBzcmNXLCBzcmNIXTtcbiAgfVxuICBpZiAoZml0ID09PSBcImNvbnRhaW5cIiB8fCBmaXQgPT09IFwic2NhbGUtZG93blwiKSB7XG4gICAgY29uc3Qgc2MgPSBNYXRoLm1pbihkc3RXIC8gc3JjVywgZHN0SCAvIHNyY0gpO1xuICAgIGNvbnN0IGsgPSBmaXQgPT09IFwic2NhbGUtZG93blwiID8gTWF0aC5taW4oMSwgc2MpIDogc2M7XG4gICAgY29uc3Qgd3MgPSBrICogc3JjVztcbiAgICBjb25zdCBocyA9IGsgKiBzcmNIO1xuICAgIHJldHVybiBbKGRzdFcgLSB3cykgLyAyLCAoZHN0SCAtIGhzKSAvIDIsIHdzLCBoc107XG4gIH1cbiAgaWYgKGZpdCA9PT0gXCJjb3ZlclwiKSB7XG4gICAgY29uc3Qgc2MyID0gTWF0aC5tYXgoZHN0VyAvIHNyY1csIGRzdEggLyBzcmNIKTtcbiAgICBjb25zdCB3czIgPSBzYzIgKiBzcmNXO1xuICAgIGNvbnN0IGhzMiA9IHNjMiAqIHNyY0g7XG4gICAgcmV0dXJuIFsoZHN0VyAtIHdzMikgLyAyLCAoZHN0SCAtIGhzMikgLyAyLCB3czIsIGhzMl07XG4gIH1cbiAgcmV0dXJuIFswLCAwLCBkc3RXLCBkc3RIXTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmV4cG9ydCBjb25zdCBTQ0hFTUUgPSBcInB1cC1mcmFtZTovL1wiO1xuZXhwb3J0IGNvbnN0IEFIRUFEID0gMTA7XG5leHBvcnQgY29uc3QgVEFHID0gXCJbVmlkZW9Ib29rXVwiO1xuXG5leHBvcnQgY29uc3QgTUVESUFfRVJSX05FVFdPUksgPSAyO1xuZXhwb3J0IGNvbnN0IE1FRElBX0VSUl9ERUNPREUgPSAzO1xuZXhwb3J0IGNvbnN0IEhBVkVfTk9USElORyA9IDA7XG5leHBvcnQgY29uc3QgSEFWRV9NRVRBREFUQSA9IDE7XG5leHBvcnQgY29uc3QgSEFWRV9FTk9VR0hfREFUQSA9IDQ7XG5leHBvcnQgY29uc3QgTkVUV09SS19FTVBUWSA9IDA7XG5leHBvcnQgY29uc3QgTkVUV09SS19JRExFID0gMTtcbmV4cG9ydCBjb25zdCBORVRXT1JLX0xPQURJTkcgPSAyO1xuZXhwb3J0IGNvbnN0IE5FVFdPUktfTk9fU09VUkNFID0gMztcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb01ldGEge1xuICBpZDogc3RyaW5nO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnJhbWVXaWR0aDogbnVtYmVyO1xuICBmcmFtZUhlaWdodDogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0ZyYW1lTWV0YSB7XG4gIHByZXNlbnRhdGlvblRpbWU6IG51bWJlcjtcbiAgZXhwZWN0ZWREaXNwbGF5VGltZTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgbWVkaWFUaW1lOiBudW1iZXI7XG4gIHByZXNlbnRlZEZyYW1lczogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBGcmFtZUNiID0gKG5vdzogbnVtYmVyLCBtZXRhOiBWaWRlb0ZyYW1lTWV0YSkgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBNZWRpYUVycm9yTGlrZSB7XG4gIGNvZGU6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ2FjaGUge1xuICBiaXRtYXBzOiBNYXA8bnVtYmVyLCBJbWFnZUJpdG1hcD47XG4gIGluRmxpZ2h0OiBNYXA8bnVtYmVyLCBQcm9taXNlPEltYWdlQml0bWFwIHwgdW5kZWZpbmVkPj47XG4gIHJlYWRlcnM6IE1hcDxWaWRlb1N0YXRlLCBudW1iZXI+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvU3RhdGUge1xuICBtZXRhPzogVmlkZW9NZXRhO1xuICBjdjogSFRNTENhbnZhc0VsZW1lbnQ7XG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICBwYXVzZWQ6IGJvb2xlYW47XG4gIGN1cnJlbnRUaW1lOiBudW1iZXI7XG4gIGVuZGVkOiBib29sZWFuO1xuICBsYXN0RHJhd25JZHg6IG51bWJlcjtcbiAgZGVhZDogYm9vbGVhbjtcbiAgb2JqZWN0Rml0OiBzdHJpbmc7XG4gIHJlYWR5U3RhdGU6IG51bWJlcjtcbiAgbmV0d29ya1N0YXRlOiBudW1iZXI7XG4gIHNlZWtpbmc6IGJvb2xlYW47XG4gIHdhaXRpbmc6IGJvb2xlYW47XG4gIGVycm9yOiBNZWRpYUVycm9yTGlrZSB8IHVuZGVmaW5lZDtcbiAgcHJlc2VudGVkRnJhbWVzOiBudW1iZXI7XG4gIG1heFJlYWNoZWQ6IG51bWJlcjtcbiAgcnZmYzogTWFwPG51bWJlciwgRnJhbWVDYj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGltZVJhbmdlc0xpa2Uge1xuICBsZW5ndGg6IG51bWJlcjtcbiAgc3RhcnQoaTogbnVtYmVyKTogbnVtYmVyO1xuICBlbmQoaTogbnVtYmVyKTogbnVtYmVyO1xufVxuXG4vLyBXaG9sZSBjbGlwIGlzIGRlY29kZS1vbi1kZW1hbmQsIHNvIHRoZSBhdmFpbGFibGUgcmFuZ2UgaXMgYWx3YXlzIFswLCBlbmRdIChvbmUgVGltZVJhbmdlcyBlbnRyeSkuXG5leHBvcnQgZnVuY3Rpb24gdGltZVJhbmdlcyhlbmQ6IG51bWJlcik6IFRpbWVSYW5nZXNMaWtlIHtcbiAgcmV0dXJuIHsgbGVuZ3RoOiBlbmQgPiAwID8gMSA6IDAsIHN0YXJ0OiAoKSA9PiAwLCBlbmQ6ICgpID0+IGVuZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyZShlbDogRXZlbnRUYXJnZXQsIHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCh0eXBlKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgdHlwZSB7IFZpZGVvSG9vayB9IGZyb20gXCIuL2hvb2tcIjtcbmltcG9ydCB7IGZpdFJlY3QsIHN5bmNPdmVybGF5IH0gZnJvbSBcIi4vb3ZlcmxheVwiO1xuaW1wb3J0IHsgQUhFQUQsIGZpcmUsIHR5cGUgVmlkZW9GcmFtZU1ldGEsIHR5cGUgVmlkZW9TdGF0ZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIGZpcmVGcmFtZUNhbGxiYWNrcyhzdGF0ZTogVmlkZW9TdGF0ZSk6IHZvaWQge1xuICBpZiAoc3RhdGUucnZmYy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGNicyA9IFsuLi5zdGF0ZS5ydmZjLnZhbHVlcygpXTtcbiAgc3RhdGUucnZmYy5jbGVhcigpO1xuICBjb25zdCBub3cgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgY29uc3QgbWV0YTogVmlkZW9GcmFtZU1ldGEgPSB7XG4gICAgcHJlc2VudGF0aW9uVGltZTogbm93LFxuICAgIGV4cGVjdGVkRGlzcGxheVRpbWU6IG5vdyxcbiAgICB3aWR0aDogc3RhdGUubWV0YSEuZnJhbWVXaWR0aCxcbiAgICBoZWlnaHQ6IHN0YXRlLm1ldGEhLmZyYW1lSGVpZ2h0LFxuICAgIG1lZGlhVGltZTogc3RhdGUuY3VycmVudFRpbWUsXG4gICAgcHJlc2VudGVkRnJhbWVzOiBzdGF0ZS5wcmVzZW50ZWRGcmFtZXMsXG4gIH07XG4gIGZvciAoY29uc3QgY2Igb2YgY2JzKSB7XG4gICAgY2Iobm93LCBtZXRhKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBwYWludChob29rOiBWaWRlb0hvb2ssIHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzdGF0ZTogVmlkZW9TdGF0ZSwgaWR4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYyA9IGhvb2suY2FjaGUuY2FjaGVPZihzdGF0ZS5tZXRhIS5pZCk7XG4gIGMucmVhZGVycy5zZXQoc3RhdGUsIGlkeCk7XG4gIGxldCBibSA9IGMuYml0bWFwcy5nZXQoaWR4KTtcbiAgaWYgKCFibSkge1xuICAgIGhvb2suY2FjaGUucHJlZmV0Y2goc3RhdGUsIGlkeCArIDEsIEFIRUFEIC0gMSk7XG4gICAgY29uc3QgZmV0Y2hlZCA9IGF3YWl0IGhvb2suY2FjaGUuZmV0Y2goc3RhdGUsIGlkeCk7XG4gICAgaWYgKGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKSAhPT0gc3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFmZXRjaGVkKSB7XG4gICAgICBpZiAoIXN0YXRlLnBhdXNlZCAmJiAhc3RhdGUud2FpdGluZykge1xuICAgICAgICBzdGF0ZS53YWl0aW5nID0gdHJ1ZTtcbiAgICAgICAgZmlyZSh2aWRlbywgXCJ3YWl0aW5nXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBibSA9IGZldGNoZWQ7XG4gIH1cbiAgaWYgKHN0YXRlLndhaXRpbmcpIHtcbiAgICBzdGF0ZS53YWl0aW5nID0gZmFsc2U7XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQpIHtcbiAgICAgIGZpcmUodmlkZW8sIFwicGxheWluZ1wiKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY3YgPSBzdGF0ZS5jdjtcbiAgY29uc3QgciA9IGZpdFJlY3QoYm0ud2lkdGgsIGJtLmhlaWdodCwgY3Yud2lkdGgsIGN2LmhlaWdodCwgc3RhdGUub2JqZWN0Rml0KTtcbiAgc3RhdGUuY3R4LmNsZWFyUmVjdCgwLCAwLCBjdi53aWR0aCwgY3YuaGVpZ2h0KTtcbiAgc3RhdGUuY3R4LmRyYXdJbWFnZShibSwgclswXSwgclsxXSwgclsyXSwgclszXSk7XG4gIHN0YXRlLmxhc3REcmF3bklkeCA9IGlkeDtcbiAgc3RhdGUucHJlc2VudGVkRnJhbWVzKys7XG4gIGZpcmVGcmFtZUNhbGxiYWNrcyhzdGF0ZSk7XG4gIGhvb2suY2FjaGUucHJlZmV0Y2goc3RhdGUsIGlkeCArIDEsIEFIRUFEKTtcbiAgaG9vay5jYWNoZS5ldmljdChjKTtcbn1cblxuLy8gVmlydHVhbC10aW1lIHRpY2s6IHN5bmMgb3ZlcmxheXMsIGFkdmFuY2UgZWFjaCBob29rZWQgdmlkZW8ncyBjbG9jayAobG9vcC9lbmQpLCBwYWludCB0aGUgZHVlIGZyYW1lLlxuZXhwb3J0IGZ1bmN0aW9uIGFkdmFuY2UoaG9vazogVmlkZW9Ib29rLCB0aW1lc3RhbXBNczogbnVtYmVyKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIGNvbnN0IGR0ID0gTWF0aC5tYXgoMCwgdGltZXN0YW1wTXMgLSBob29rLmN1cnJNcykgLyAxMDAwO1xuICBob29rLmN1cnJNcyA9IHRpbWVzdGFtcE1zO1xuICBjb25zdCBwczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ2aWRlb1wiKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgIGNvbnN0IHZpZGVvID0gZWwgYXMgSFRNTFZpZGVvRWxlbWVudDtcbiAgICBjb25zdCBzdGF0ZSA9IGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKTtcbiAgICBpZiAoIXN0YXRlIHx8IHN0YXRlLmRlYWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gQSBiYWNraW5nLXN0b3JlIHJlc2l6ZSAoYW5pbWF0ZWQgY29udGFpbmVyKSB3aXBlcyB0aGUgY2FudmFzOyBmb3JjZSBhIHJlZHJhdyBldmVuIG9uIGFuIHVuY2hhbmdlZCBmcmFtZSBpZHguXG4gICAgaWYgKHN5bmNPdmVybGF5KHZpZGVvLCBzdGF0ZS5jdikpIHtcbiAgICAgIHN0YXRlLmxhc3REcmF3bklkeCA9IC0xO1xuICAgIH1cbiAgICBpZiAoIXN0YXRlLm1ldGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gRWxlbWVudCBncmV3IHBhc3QgdGhlIGRlY29kZWQgKGRvd25zY2FsZWQpIHJlcyDihpIgcmUtZGVjb2RlIGF0IG5hdGl2ZSwgb25lLXNob3QgKGNvdmVycyB6b29tKS5cbiAgICBpZiAoXG4gICAgICBzdGF0ZS5tZXRhLmZyYW1lV2lkdGggPCBzdGF0ZS5tZXRhLndpZHRoICYmXG4gICAgICBzdGF0ZS5jdi53aWR0aCA+IHN0YXRlLm1ldGEuZnJhbWVXaWR0aCAqIDEuMDUgJiZcbiAgICAgICFob29rLmF0dGFjaGluZy5oYXModmlkZW8pXG4gICAgKSB7XG4gICAgICBob29rLnJlYXR0YWNoKHZpZGVvLCBzdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghc3RhdGUucGF1c2VkICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgc3RhdGUuY3VycmVudFRpbWUgKz0gZHQgKiAodmlkZW8ucGxheWJhY2tSYXRlIHx8IDEpO1xuICAgICAgc3RhdGUubWF4UmVhY2hlZCA9IE1hdGgubWF4KHN0YXRlLm1heFJlYWNoZWQsIHN0YXRlLmN1cnJlbnRUaW1lKTtcbiAgICAgIGlmIChzdGF0ZS5jdXJyZW50VGltZSA+PSBzdGF0ZS5tZXRhLmR1cmF0aW9uKSB7XG4gICAgICAgIGlmICh2aWRlby5sb29wKSB7XG4gICAgICAgICAgc3RhdGUuY3VycmVudFRpbWUgPSBzdGF0ZS5jdXJyZW50VGltZSAlIHN0YXRlLm1ldGEuZHVyYXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUuY3VycmVudFRpbWUgPSBzdGF0ZS5tZXRhLmR1cmF0aW9uO1xuICAgICAgICAgIHN0YXRlLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgICAgICAgIGZpcmUodmlkZW8sIFwiZW5kZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpcmUodmlkZW8sIFwidGltZXVwZGF0ZVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaWR4ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChzdGF0ZS5jdXJyZW50VGltZSAqIHN0YXRlLm1ldGEuZnBzKSk7XG4gICAgaWYgKGlkeCA9PT0gc3RhdGUubGFzdERyYXduSWR4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHBzLnB1c2gocGFpbnQoaG9vaywgdmlkZW8sIHN0YXRlLCBpZHgpKTtcbiAgfSk7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgeyBTQ0hFTUUsIHR5cGUgVmlkZW9DYWNoZSwgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLy8gUGVyLXNlc3Npb24gYml0bWFwIGNhY2hlOiBmZXRjaGVzIFJHQkEgZnJhbWVzIGZyb20gdGhlIGZyYW1lIHByb3RvY29sLCBkZWR1cGVzIGluLWZsaWdodCwgZXZpY3RzIGJlaGluZCByZWFkZXJzLlxuZXhwb3J0IGNsYXNzIEZyYW1lQ2FjaGUge1xuICBwcml2YXRlIF9jYWNoZXMgPSBuZXcgTWFwPHN0cmluZywgVmlkZW9DYWNoZT4oKTtcblxuICBjYWNoZU9mKGlkOiBzdHJpbmcpOiBWaWRlb0NhY2hlIHtcbiAgICBsZXQgYyA9IHRoaXMuX2NhY2hlcy5nZXQoaWQpO1xuICAgIGlmICghYykge1xuICAgICAgYyA9IHsgYml0bWFwczogbmV3IE1hcCgpLCBpbkZsaWdodDogbmV3IE1hcCgpLCByZWFkZXJzOiBuZXcgTWFwKCkgfTtcbiAgICAgIHRoaXMuX2NhY2hlcy5zZXQoaWQsIGMpO1xuICAgIH1cbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIGZldGNoKHN0YXRlOiBWaWRlb1N0YXRlLCBpZHg6IG51bWJlcik6IFByb21pc2U8SW1hZ2VCaXRtYXAgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBtZXRhID0gc3RhdGUubWV0YTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgY29uc3QgYyA9IHRoaXMuY2FjaGVPZihtZXRhLmlkKTtcbiAgICBjb25zdCBleGlzdGluZyA9IGMuaW5GbGlnaHQuZ2V0KGlkeCk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIGNvbnN0IGNhY2hlZCA9IGMuYml0bWFwcy5nZXQoaWR4KTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNhY2hlZCk7XG4gICAgfVxuICAgIGNvbnN0IHcgPSBtZXRhLmZyYW1lV2lkdGg7XG4gICAgY29uc3QgaCA9IG1ldGEuZnJhbWVIZWlnaHQ7XG4gICAgY29uc3QgcCA9IGZldGNoKGAke1NDSEVNRX1mcmFtZT9pZD0ke21ldGEuaWR9JmlkeD0ke2lkeH1gKVxuICAgICAgLnRoZW4oKHIpID0+IChyLm9rID8gci5hcnJheUJ1ZmZlcigpIDogdW5kZWZpbmVkKSlcbiAgICAgIC50aGVuKChidWYpID0+XG4gICAgICAgIGJ1ZiAmJiBidWYuYnl0ZUxlbmd0aCA9PT0gdyAqIGggKiA0XG4gICAgICAgICAgPyBjcmVhdGVJbWFnZUJpdG1hcChuZXcgSW1hZ2VEYXRhKG5ldyBVaW50OENsYW1wZWRBcnJheShidWYpLCB3LCBoKSlcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIClcbiAgICAgIC50aGVuKChibSkgPT4ge1xuICAgICAgICBjLmluRmxpZ2h0LmRlbGV0ZShpZHgpO1xuICAgICAgICBpZiAoYm0pIHtcbiAgICAgICAgICBjLmJpdG1hcHMuc2V0KGlkeCwgYm0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBibTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICBjLmluRmxpZ2h0LmRlbGV0ZShpZHgpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG4gICAgYy5pbkZsaWdodC5zZXQoaWR4LCBwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIHByZWZldGNoKHN0YXRlOiBWaWRlb1N0YXRlLCBmcm9tSWR4OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRhID0gc3RhdGUubWV0YTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWF4SWR4ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChtZXRhLmR1cmF0aW9uICogbWV0YS5mcHMpKTtcbiAgICBmb3IgKGxldCBpID0gZnJvbUlkeDsgaSA8IGZyb21JZHggKyBjb3VudDsgaSsrKSB7XG4gICAgICBpZiAoaSA8IDEgfHwgaSA+IG1heElkeCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZvaWQgdGhpcy5mZXRjaChzdGF0ZSwgaSk7XG4gICAgfVxuICB9XG5cbiAgZXZpY3QoYzogVmlkZW9DYWNoZSk6IHZvaWQge1xuICAgIGxldCBtaW5JZHggPSBJbmZpbml0eTtcbiAgICBjLnJlYWRlcnMuZm9yRWFjaCgoaWR4KSA9PiB7XG4gICAgICBpZiAoaWR4IDwgbWluSWR4KSB7XG4gICAgICAgIG1pbklkeCA9IGlkeDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtaW5JZHgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZsb29yID0gbWluSWR4IC0gMjtcbiAgICBjLmJpdG1hcHMuZm9yRWFjaCgoYm0sIGlkeCkgPT4ge1xuICAgICAgaWYgKGlkeCA8IGZsb29yKSB7XG4gICAgICAgIGJtLmNsb3NlKCk7XG4gICAgICAgIGMuYml0bWFwcy5kZWxldGUoaWR4KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIERyb3AgYSByZWFkZXI7IHdoZW4gdGhlIGxhc3QgbGVhdmVzLCBjbG9zZSBiaXRtYXBzIGFuZCB0ZWxsIHRoZSBzZXJ2ZXIgdG8gcmVsZWFzZSB0aGUgZGVjb2RlIHNlc3Npb24uXG4gIHJlbGVhc2UoaWQ6IHN0cmluZywgc3RhdGU6IFZpZGVvU3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBjID0gdGhpcy5fY2FjaGVzLmdldChpZCk7XG4gICAgaWYgKCFjKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGMucmVhZGVycy5kZWxldGUoc3RhdGUpO1xuICAgIGlmIChjLnJlYWRlcnMuc2l6ZSA+IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYy5iaXRtYXBzLmZvckVhY2goKGJtKSA9PiB7XG4gICAgICBibS5jbG9zZSgpO1xuICAgIH0pO1xuICAgIHRoaXMuX2NhY2hlcy5kZWxldGUoaWQpO1xuICAgIGZldGNoKGAke1NDSEVNRX1jbG9zZT9pZD0ke2lkfWAsIHsga2VlcGFsaXZlOiB0cnVlIH0pO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgdHlwZSB7IFZpZGVvSG9vayB9IGZyb20gXCIuL2hvb2tcIjtcbmltcG9ydCB7IHR5cGUgRnJhbWVDYiwgZmlyZSwgdGltZVJhbmdlcywgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLy8gT3ZlcnJpZGUgdGhlIEhUTUxNZWRpYUVsZW1lbnQgc3VyZmFjZSBmb3IgaG9va2VkIDx2aWRlbz47IHVuaG9va2VkIGVsZW1lbnRzIGZhbGwgdGhyb3VnaCB0byBuYXRpdmUuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbE1lZGlhU2hpbShob29rOiBWaWRlb0hvb2spOiB2b2lkIHtcbiAgY29uc3QgSFZFID0gSFRNTFZpZGVvRWxlbWVudC5wcm90b3R5cGU7XG4gIGNvbnN0IE1FRElBID0gSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGU7XG4gIGNvbnN0IG1kZXNjID0gKHA6IHN0cmluZykgPT4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVkUsIHApIHx8IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTUVESUEsIHApO1xuICBjb25zdCBjdERlc2MgPSBtZGVzYyhcImN1cnJlbnRUaW1lXCIpO1xuICBjb25zdCBzcmNEZXNjID0gbWRlc2MoXCJzcmNcIik7XG4gIGNvbnN0IHJhdGVEZXNjID0gbWRlc2MoXCJwbGF5YmFja1JhdGVcIik7XG4gIGNvbnN0IG9yaWdQYXVzZSA9IEhWRS5wYXVzZTtcbiAgY29uc3Qgb3JpZ1JWRkMgPSBIVkUucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjaztcbiAgY29uc3Qgb3JpZ0NhbmNlbFJWRkMgPSBIVkUuY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrO1xuICBjb25zdCBvcmlnUXVhbGl0eSA9IEhWRS5nZXRWaWRlb1BsYXliYWNrUXVhbGl0eTtcbiAgY29uc3Qgb3JpZ0xvYWQgPSBIVkUubG9hZDtcbiAgY29uc3Qgc2Vzc2lvbnMgPSBob29rLnNlc3Npb25zO1xuXG4gIC8vIFNlc3Npb24tYmFja2VkIHJlYWQtb25seSBwcm9wZXJ0eSB3aXRoIG5hdGl2ZSBmYWxsYmFjayB3aGVuIHRoZSBlbGVtZW50IGlzbid0IGhvb2tlZC5cbiAgY29uc3QgZGVmID0gKHByb3A6IHN0cmluZywgcGljazogKHM6IFZpZGVvU3RhdGUpID0+IHVua25vd24pID0+IHtcbiAgICBjb25zdCBuYXRpdmVHZXQgPSBtZGVzYyhwcm9wKT8uZ2V0O1xuICAgIGlmICghbmF0aXZlR2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG1lZGlhX3NoaW06IG5vIG5hdGl2ZSBnZXR0ZXIgZm9yICR7cHJvcH1gKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgcHJvcCwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHMgPyBwaWNrKHMpIDogbmF0aXZlR2V0LmNhbGwodGhpcyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xuICBkZWYoXCJwYXVzZWRcIiwgKHMpID0+IHMucGF1c2VkKTtcbiAgZGVmKFwiZW5kZWRcIiwgKHMpID0+IHMuZW5kZWQpO1xuICBkZWYoXCJyZWFkeVN0YXRlXCIsIChzKSA9PiBzLnJlYWR5U3RhdGUpO1xuICBkZWYoXCJuZXR3b3JrU3RhdGVcIiwgKHMpID0+IHMubmV0d29ya1N0YXRlKTtcbiAgZGVmKFwiZXJyb3JcIiwgKHMpID0+IHMuZXJyb3IgPz8gbnVsbCk7XG4gIGRlZihcInNlZWtpbmdcIiwgKHMpID0+IHMuc2Vla2luZyk7XG4gIGRlZihcImJ1ZmZlcmVkXCIsIChzKSA9PiB0aW1lUmFuZ2VzKHMubWV0YSA/IHMubWV0YS5kdXJhdGlvbiA6IDApKTtcbiAgZGVmKFwic2Vla2FibGVcIiwgKHMpID0+IHRpbWVSYW5nZXMocy5tZXRhID8gcy5tZXRhLmR1cmF0aW9uIDogMCkpO1xuICBkZWYoXCJwbGF5ZWRcIiwgKHMpID0+IHRpbWVSYW5nZXMocy5tYXhSZWFjaGVkKSk7XG5cbiAgSFZFLnBsYXkgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICByZXR1cm4gaG9vay5hdHRhY2godGhpcykudGhlbigobnMpID0+IHtcbiAgICAgICAgaWYgKG5zKSB7XG4gICAgICAgICAgaG9vay5yZXN1bWUodGhpcywgbnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaG9vay5yZXN1bWUodGhpcywgcyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9O1xuICBIVkUucGF1c2UgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICBvcmlnUGF1c2UuY2FsbCh0aGlzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFzLnBhdXNlZCkge1xuICAgICAgcy5wYXVzZWQgPSB0cnVlO1xuICAgICAgZmlyZSh0aGlzLCBcInBhdXNlXCIpO1xuICAgIH1cbiAgfTtcbiAgaWYgKGN0RGVzYz8uZ2V0ICYmIGN0RGVzYy5zZXQpIHtcbiAgICBjb25zdCBjdEdldCA9IGN0RGVzYy5nZXQ7XG4gICAgY29uc3QgY3RTZXQgPSBjdERlc2Muc2V0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsIFwiY3VycmVudFRpbWVcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHMgPyBzLmN1cnJlbnRUaW1lIDogY3RHZXQuY2FsbCh0aGlzKTtcbiAgICAgIH0sXG4gICAgICBzZXQodGhpczogSFRNTFZpZGVvRWxlbWVudCwgdDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgICAgIGlmICghcykge1xuICAgICAgICAgIGN0U2V0LmNhbGwodGhpcywgdCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGR1ciA9IHMubWV0YSA/IHMubWV0YS5kdXJhdGlvbiA6IHQ7XG4gICAgICAgIHMuY3VycmVudFRpbWUgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0LCBkdXIpKTtcbiAgICAgICAgcy5tYXhSZWFjaGVkID0gTWF0aC5tYXgocy5tYXhSZWFjaGVkLCBzLmN1cnJlbnRUaW1lKTtcbiAgICAgICAgaWYgKHMuY3VycmVudFRpbWUgPCBkdXIpIHtcbiAgICAgICAgICBzLmVuZGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcy5zZWVraW5nID0gdHJ1ZTtcbiAgICAgICAgZmlyZSh0aGlzLCBcInNlZWtpbmdcIik7XG4gICAgICAgIHMuc2Vla2luZyA9IGZhbHNlO1xuICAgICAgICBmaXJlKHRoaXMsIFwic2Vla2VkXCIpO1xuICAgICAgICBmaXJlKHRoaXMsIFwidGltZXVwZGF0ZVwiKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgaWYgKHJhdGVEZXNjPy5zZXQpIHtcbiAgICBjb25zdCByYXRlU2V0ID0gcmF0ZURlc2Muc2V0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsIFwicGxheWJhY2tSYXRlXCIsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogcmF0ZURlc2MuZ2V0LFxuICAgICAgc2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIHI6IG51bWJlcikge1xuICAgICAgICByYXRlU2V0LmNhbGwodGhpcywgcik7XG4gICAgICAgIGlmIChzZXNzaW9ucy5oYXModGhpcykpIHtcbiAgICAgICAgICBmaXJlKHRoaXMsIFwicmF0ZWNoYW5nZVwiKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBIVkUucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50LCBjYik6IG51bWJlciB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIHJldHVybiBvcmlnUlZGQy5jYWxsKHRoaXMsIGNiKTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSArK2hvb2sucnZmY1NlcTtcbiAgICBzLnJ2ZmMuc2V0KGlkLCBjYiBhcyBGcmFtZUNiKTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIEhWRS5jYW5jZWxWaWRlb0ZyYW1lQ2FsbGJhY2sgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCwgaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICBvcmlnQ2FuY2VsUlZGQy5jYWxsKHRoaXMsIGlkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcy5ydmZjLmRlbGV0ZShpZCk7XG4gIH07XG4gIEhWRS5nZXRWaWRlb1BsYXliYWNrUXVhbGl0eSA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIHJldHVybiBvcmlnUXVhbGl0eS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRpb25UaW1lOiBwZXJmb3JtYW5jZS5ub3coKSxcbiAgICAgIHRvdGFsVmlkZW9GcmFtZXM6IHMucHJlc2VudGVkRnJhbWVzLFxuICAgICAgZHJvcHBlZFZpZGVvRnJhbWVzOiAwLFxuICAgICAgY29ycnVwdGVkVmlkZW9GcmFtZXM6IDAsXG4gICAgfSBhcyBWaWRlb1BsYXliYWNrUXVhbGl0eTtcbiAgfTtcbiAgSFZFLmxvYWQgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGlmICghc2Vzc2lvbnMuaGFzKHRoaXMpKSB7XG4gICAgICByZXR1cm4gb3JpZ0xvYWQuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgaG9vay5kZXRhY2godGhpcyk7XG4gICAgZmlyZSh0aGlzLCBcImVtcHRpZWRcIik7XG4gICAgdGhpcy5fX3B1cF9sYXN0X3NyY19fID0gdW5kZWZpbmVkO1xuICAgIGhvb2suYXR0YWNoKHRoaXMpO1xuICB9O1xuICBpZiAoc3JjRGVzYz8uc2V0KSB7XG4gICAgY29uc3Qgc3JjU2V0ID0gc3JjRGVzYy5zZXQ7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgXCJzcmNcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBzcmNEZXNjLmdldCxcbiAgICAgIHNldCh0aGlzOiBIVE1MVmlkZW9FbGVtZW50LCB2OiBzdHJpbmcpIHtcbiAgICAgICAgc3JjU2V0LmNhbGwodGhpcywgdik7XG4gICAgICAgIGhvb2sub25TcmNDaGFuZ2UodGhpcyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgdHlwZSB7IFZpZGVvSG9vayB9IGZyb20gXCIuL2hvb2tcIjtcbmltcG9ydCB7XG4gIEFIRUFELFxuICBmaXJlLFxuICBIQVZFX0VOT1VHSF9EQVRBLFxuICBIQVZFX01FVEFEQVRBLFxuICBIQVZFX05PVEhJTkcsXG4gIE1FRElBX0VSUl9ERUNPREUsXG4gIE1FRElBX0VSUl9ORVRXT1JLLFxuICB0eXBlIE1lZGlhRXJyb3JMaWtlLFxuICBORVRXT1JLX0VNUFRZLFxuICBORVRXT1JLX0lETEUsXG4gIE5FVFdPUktfTE9BRElORyxcbiAgTkVUV09SS19OT19TT1VSQ0UsXG4gIFNDSEVNRSxcbiAgVEFHLFxuICB0eXBlIFZpZGVvTWV0YSxcbiAgdHlwZSBWaWRlb1N0YXRlLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF0dGFjaEFyZ3Mge1xuICB2aWRlbzogSFRNTFZpZGVvRWxlbWVudDtcbiAgc3RhdGU6IFZpZGVvU3RhdGU7XG4gIHNyYzogc3RyaW5nO1xuICBiaXJ0aE1zOiBudW1iZXI7XG4gIG5hdGl2ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5ld1ZpZGVvU3RhdGUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIGN2OiBIVE1MQ2FudmFzRWxlbWVudCk6IFZpZGVvU3RhdGUge1xuICByZXR1cm4ge1xuICAgIG1ldGE6IHVuZGVmaW5lZCxcbiAgICBjdixcbiAgICBjdHg6IGN2LmdldENvbnRleHQoXCIyZFwiKSEsXG4gICAgcGF1c2VkOiAhKHZpZGVvLmF1dG9wbGF5IHx8ICF2aWRlby5wYXVzZWQpLFxuICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgIGVuZGVkOiBmYWxzZSxcbiAgICBsYXN0RHJhd25JZHg6IC0xLFxuICAgIGRlYWQ6IGZhbHNlLFxuICAgIG9iamVjdEZpdDogd2luZG93LmdldENvbXB1dGVkU3R5bGUodmlkZW8pLm9iamVjdEZpdCB8fCBcImZpbGxcIixcbiAgICByZWFkeVN0YXRlOiBIQVZFX05PVEhJTkcsXG4gICAgbmV0d29ya1N0YXRlOiBORVRXT1JLX0VNUFRZLFxuICAgIHNlZWtpbmc6IGZhbHNlLFxuICAgIHdhaXRpbmc6IGZhbHNlLFxuICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgcHJlc2VudGVkRnJhbWVzOiAwLFxuICAgIG1heFJlYWNoZWQ6IDAsXG4gICAgcnZmYzogbmV3IE1hcCgpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBmYWlsT3Blbih2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgc3RhdGU6IFZpZGVvU3RhdGUsIGVycm9yOiBNZWRpYUVycm9yTGlrZSk6IHVuZGVmaW5lZCB7XG4gIHN0YXRlLmRlYWQgPSB0cnVlO1xuICBzdGF0ZS5lcnJvciA9IGVycm9yO1xuICBzdGF0ZS5uZXR3b3JrU3RhdGUgPSBORVRXT1JLX05PX1NPVVJDRTtcbiAgY29uc29sZS5lcnJvcihUQUcsIGAke2Vycm9yLm1lc3NhZ2V9IHNyYz0ke3ZpZGVvLnNyYyB8fCB2aWRlby5jdXJyZW50U3JjfWApO1xuICBmaXJlKHZpZGVvLCBcImVycm9yXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyBPcGVuIHRoZSBmcmFtZSBzZXJ2ZXIgc2Vzc2lvbiwgdGhlbiBlbWl0IHRoZSBIVE1MTWVkaWFFbGVtZW50IGxvYWQgc2VxdWVuY2UgKHJlYWR5U3RhdGUvbmV0d29ya1N0YXRlICsgZXZlbnRzKS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuU2Vzc2lvbihob29rOiBWaWRlb0hvb2ssIGFyZ3M6IEF0dGFjaEFyZ3MpOiBQcm9taXNlPFZpZGVvU3RhdGUgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgeyB2aWRlbywgc3RhdGUsIHNyYywgYmlydGhNcywgbmF0aXZlIH0gPSBhcmdzO1xuICBjb25zdCBmcHMgPSBOdW1iZXIucGFyc2VJbnQodmlkZW8uZGF0YXNldFtcInB1cEZwc1wiXSB8fCBcIjMwXCIsIDEwKTtcbiAgc3RhdGUubmV0d29ya1N0YXRlID0gTkVUV09SS19MT0FESU5HO1xuICBmaXJlKHZpZGVvLCBcImxvYWRzdGFydFwiKTtcbiAgbGV0IHJlczogUmVzcG9uc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgcSA9IG5hdGl2ZSA/IFwiXCIgOiBgJnc9JHtzdGF0ZS5jdi53aWR0aH0maD0ke3N0YXRlLmN2LmhlaWdodH0mZml0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHN0YXRlLm9iamVjdEZpdCl9YDtcbiAgICByZXMgPSBhd2FpdCBmZXRjaChgJHtTQ0hFTUV9b3Blbj9zcmM9JHtlbmNvZGVVUklDb21wb25lbnQoc3JjKX0mZnBzPSR7ZnBzfSR7cX1gKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWlsT3Blbih2aWRlbywgc3RhdGUsIHtcbiAgICAgIGNvZGU6IE1FRElBX0VSUl9ORVRXT1JLLFxuICAgICAgbWVzc2FnZTogYG9wZW4gZmFpbGVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gLFxuICAgIH0pO1xuICB9XG4gIGlmIChob29rLnNlc3Npb25zLmdldCh2aWRlbykgIT09IHN0YXRlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXJlcy5vaykge1xuICAgIHJldHVybiBmYWlsT3Blbih2aWRlbywgc3RhdGUsIHtcbiAgICAgIGNvZGU6IE1FRElBX0VSUl9ERUNPREUsXG4gICAgICBtZXNzYWdlOiBgb3BlbiAke3Jlcy5zdGF0dXN9OiAke2F3YWl0IHJlcy50ZXh0KCl9YCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXRhID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIFZpZGVvTWV0YTtcbiAgaWYgKGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKSAhPT0gc3RhdGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHN0YXRlLm1ldGEgPSBtZXRhO1xuICBzdGF0ZS5jdXJyZW50VGltZSA9IHN0YXRlLnBhdXNlZCA/IDAgOiBNYXRoLm1heCgwLCAoaG9vay5jdXJyTXMgLSBiaXJ0aE1zKSAvIDEwMDApO1xuICAvLyBUaGUgc3R1YiBtZWRpYSB1c3VhbGx5IGxvYWRzIG5hdGl2ZWx5IGZpcnN0OyBCbGluayB0aGVuIG93bnMgdGhlIHJlYWwgZXZlbnQgc2VxdWVuY2Ug4oCUIGRvbid0IGR1cGxpY2F0ZSBpdC5cbiAgY29uc3QgbmF0aXZlTWV0YSA9IHZpZGVvLnZpZGVvV2lkdGggPiAwO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmlkZW8sIFwidmlkZW9XaWR0aFwiLCB7XG4gICAgdmFsdWU6IG1ldGEud2lkdGgsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZGVvLCBcInZpZGVvSGVpZ2h0XCIsIHtcbiAgICB2YWx1ZTogbWV0YS5oZWlnaHQsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZGVvLCBcImR1cmF0aW9uXCIsIHtcbiAgICB2YWx1ZTogbWV0YS5kdXJhdGlvbixcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gIH0pO1xuICBzdGF0ZS5yZWFkeVN0YXRlID0gSEFWRV9NRVRBREFUQTtcbiAgaWYgKCFuYXRpdmVNZXRhKSB7XG4gICAgZmlyZSh2aWRlbywgXCJkdXJhdGlvbmNoYW5nZVwiKTtcbiAgICBmaXJlKHZpZGVvLCBcImxvYWRlZG1ldGFkYXRhXCIpO1xuICB9XG4gIHN0YXRlLnJlYWR5U3RhdGUgPSBIQVZFX0VOT1VHSF9EQVRBO1xuICBpZiAoIW5hdGl2ZU1ldGEpIHtcbiAgICBmaXJlKHZpZGVvLCBcImxvYWRlZGRhdGFcIik7XG4gICAgZmlyZSh2aWRlbywgXCJjYW5wbGF5XCIpO1xuICAgIGZpcmUodmlkZW8sIFwiY2FucGxheXRocm91Z2hcIik7XG4gIH1cbiAgc3RhdGUubmV0d29ya1N0YXRlID0gTkVUV09SS19JRExFO1xuICBpZiAoIW5hdGl2ZU1ldGEpIHtcbiAgICBmaXJlKHZpZGVvLCBcInN1c3BlbmRcIik7XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQpIHtcbiAgICAgIGZpcmUodmlkZW8sIFwicGxheVwiKTtcbiAgICAgIGZpcmUodmlkZW8sIFwicGxheWluZ1wiKTtcbiAgICB9XG4gIH1cbiAgaG9vay5jYWNoZS5wcmVmZXRjaChzdGF0ZSwgMSwgQUhFQUQpO1xuICByZXR1cm4gc3RhdGU7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgeyBhZHZhbmNlIH0gZnJvbSBcIi4vZHJpdmVyXCI7XG5pbXBvcnQgeyBGcmFtZUNhY2hlIH0gZnJvbSBcIi4vZnJhbWVfY2FjaGVcIjtcbmltcG9ydCB7IGluc3RhbGxNZWRpYVNoaW0gfSBmcm9tIFwiLi9tZWRpYV9zaGltXCI7XG5pbXBvcnQgeyBzZXR1cENhbnZhcyB9IGZyb20gXCIuL292ZXJsYXlcIjtcbmltcG9ydCB7IG5ld1ZpZGVvU3RhdGUsIG9wZW5TZXNzaW9uIH0gZnJvbSBcIi4vc2Vzc2lvblwiO1xuaW1wb3J0IHsgZmlyZSwgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX3B1cF92aWRlb19fPzogeyBhZHZhbmNlOiAobXM6IG51bWJlcikgPT4gUHJvbWlzZTx1bmtub3duPjsgcmVhZHk6ICgpID0+IFByb21pc2U8dm9pZD4gfTtcbiAgfVxuICBpbnRlcmZhY2UgSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgX19wdXBfbGFzdF9zcmNfXz86IHN0cmluZztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmlkZW9Ib29rIHtcbiAgcmVhZG9ubHkgc2Vzc2lvbnMgPSBuZXcgV2Vha01hcDxIVE1MVmlkZW9FbGVtZW50LCBWaWRlb1N0YXRlPigpO1xuICByZWFkb25seSBhdHRhY2hpbmcgPSBuZXcgV2Vha01hcDxIVE1MVmlkZW9FbGVtZW50LCBQcm9taXNlPFZpZGVvU3RhdGUgfCB1bmRlZmluZWQ+PigpO1xuICAvLyBFbnVtZXJhYmxlIG1pcnJvciBvZiBpbi1mbGlnaHQgb3BlbnMgKFdlYWtNYXAgaXNuJ3QgaXRlcmFibGUpIHNvIHJlYWR5KCkgY2FuIGF3YWl0IHRoZW0uXG4gIHJlYWRvbmx5IG9wZW5pbmcgPSBuZXcgU2V0PFByb21pc2U8dW5rbm93bj4+KCk7XG4gIHJlYWRvbmx5IGNhY2hlID0gbmV3IEZyYW1lQ2FjaGUoKTtcbiAgcnZmY1NlcSA9IDA7XG4gIGN1cnJNcyA9IDA7XG4gIHByaXZhdGUgX2xhc3RTbmFwc2hvdCA9IG5ldyBXZWFrTWFwPEhUTUxWaWRlb0VsZW1lbnQsIE9mZnNjcmVlbkNhbnZhcz4oKTtcblxuICBpbnN0YWxsKCk6IHZvaWQge1xuICAgIGluc3RhbGxNZWRpYVNoaW0odGhpcyk7XG4gICAgdGhpcy5zY2FuKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7XG4gICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dHMpID0+IHtcbiAgICAgIGZvciAoY29uc3QgbSBvZiBtdXRzKSB7XG4gICAgICAgIGlmIChtLnR5cGUgPT09IFwiYXR0cmlidXRlc1wiICYmIG0udGFyZ2V0IGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCAmJiBtLmF0dHJpYnV0ZU5hbWUgPT09IFwic3JjXCIpIHtcbiAgICAgICAgICB0aGlzLm9uU3JjQ2hhbmdlKG0udGFyZ2V0KTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBtLmFkZGVkTm9kZXMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICAgIGlmIChuIGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5zY2FuKG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG0ucmVtb3ZlZE5vZGVzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZGV0YWNoKG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkub2JzZXJ2ZShkb2N1bWVudCwgeyBzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUsIGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogW1wic3JjXCJdIH0pO1xuICAgIHdpbmRvdy5fX3B1cF92aWRlb19fID0geyBhZHZhbmNlOiAobXMpID0+IGFkdmFuY2UodGhpcywgbXMpLCByZWFkeTogKCkgPT4gdGhpcy5yZWFkeSgpIH07XG4gIH1cblxuICBhdHRhY2godmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIG5hdGl2ZSA9IGZhbHNlKTogUHJvbWlzZTxWaWRlb1N0YXRlIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLnNlc3Npb25zLmdldCh2aWRlbyk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGV4aXN0aW5nKTtcbiAgICB9XG4gICAgY29uc3QgcGVuZGluZyA9IHRoaXMuYXR0YWNoaW5nLmdldCh2aWRlbyk7XG4gICAgaWYgKHBlbmRpbmcpIHtcbiAgICAgIHJldHVybiBwZW5kaW5nO1xuICAgIH1cbiAgICBjb25zdCBzcmMgPSB2aWRlby5zcmMgfHwgdmlkZW8uY3VycmVudFNyYztcbiAgICBpZiAoIXNyYykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cbiAgICBpZiAoL14oYmxvYjp8ZGF0YTp8bWVkaWFzdHJlYW06KS9pLnRlc3Qoc3JjKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cbiAgICBjb25zdCBjdiA9IHNldHVwQ2FudmFzKHZpZGVvLCB0aGlzLl9sYXN0U25hcHNob3QuZ2V0KHZpZGVvKSk7XG4gICAgY29uc3Qgc3RhdGUgPSBuZXdWaWRlb1N0YXRlKHZpZGVvLCBjdik7XG4gICAgdGhpcy5zZXNzaW9ucy5zZXQodmlkZW8sIHN0YXRlKTtcbiAgICBjb25zdCBwID0gb3BlblNlc3Npb24odGhpcywgeyB2aWRlbywgc3RhdGUsIHNyYywgYmlydGhNczogdGhpcy5jdXJyTXMsIG5hdGl2ZSB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMuYXR0YWNoaW5nLmRlbGV0ZSh2aWRlbyk7XG4gICAgICB0aGlzLm9wZW5pbmcuZGVsZXRlKHApO1xuICAgIH0pO1xuICAgIHRoaXMuYXR0YWNoaW5nLnNldCh2aWRlbywgcCk7XG4gICAgdGhpcy5vcGVuaW5nLmFkZChwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIC8vIEF3YWl0IG9ubHkgdGhlIG9wZW5zIGluIGZsaWdodCByaWdodCBub3cg4oCUIG5ldmVyIGNoYXNlIG5ld2x5LXNwYXduZWQgb25lcywgb3IgYSByZXRyeWluZyBwYWdlIGxvb3BzIGZvcmV2ZXIuXG4gIGFzeW5jIHJlYWR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbLi4udGhpcy5vcGVuaW5nXSk7XG4gIH1cblxuICByZXN1bWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHN0YXRlOiBWaWRlb1N0YXRlKTogdm9pZCB7XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQgJiYgIXN0YXRlLmVuZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXRlLnBhdXNlZCA9IGZhbHNlO1xuICAgIHN0YXRlLmVuZGVkID0gZmFsc2U7XG4gICAgZmlyZSh2aWRlbywgXCJwbGF5XCIpO1xuICAgIGZpcmUodmlkZW8sIFwicGxheWluZ1wiKTtcbiAgfVxuXG4gIGRldGFjaCh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zZXNzaW9ucy5nZXQodmlkZW8pO1xuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHN0YXRlLm1ldGEpIHtcbiAgICAgIGlmIChzdGF0ZS5sYXN0RHJhd25JZHggPj0gMCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNuYXAgPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHN0YXRlLmN2LndpZHRoLCBzdGF0ZS5jdi5oZWlnaHQpO1xuICAgICAgICAgIGNvbnN0IHNjdHggPSBzbmFwLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgICAgICBpZiAoIXNjdHgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vIDJkIGNvbnRleHRcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNjdHguZHJhd0ltYWdlKHN0YXRlLmN2LCAwLCAwKTtcbiAgICAgICAgICB0aGlzLl9sYXN0U25hcHNob3Quc2V0KHZpZGVvLCBzbmFwKTtcbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfVxuICAgICAgdGhpcy5jYWNoZS5yZWxlYXNlKHN0YXRlLm1ldGEuaWQsIHN0YXRlKTtcbiAgICB9XG4gICAgc3RhdGUuY3YucmVtb3ZlKCk7XG4gICAgdGhpcy5zZXNzaW9ucy5kZWxldGUodmlkZW8pO1xuICAgIHRoaXMuYXR0YWNoaW5nLmRlbGV0ZSh2aWRlbyk7XG4gIH1cblxuICBvblNyY0NoYW5nZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IHNyYyA9IHZpZGVvLnNyYyB8fCB2aWRlby5jdXJyZW50U3JjIHx8IFwiXCI7XG4gICAgaWYgKHZpZGVvLl9fcHVwX2xhc3Rfc3JjX18gPT09IHNyYykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2aWRlby5fX3B1cF9sYXN0X3NyY19fID0gc3JjO1xuICAgIGlmICh0aGlzLnNlc3Npb25zLmhhcyh2aWRlbykpIHtcbiAgICAgIHRoaXMuZGV0YWNoKHZpZGVvKTtcbiAgICB9XG4gICAgdGhpcy5hdHRhY2godmlkZW8pO1xuICB9XG5cbiAgLy8gUmUtb3BlbiBhdCBuYXRpdmUgcmVzb2x1dGlvbiAodGhlIGVsZW1lbnQgb3V0Z3JldyB0aGUgZG93bnNjYWxlZCBkZWNvZGUpLCBwcmVzZXJ2aW5nIHBsYXliYWNrIHN0YXRlLlxuICByZWF0dGFjaCh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgc3RhdGU6IFZpZGVvU3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCB0ID0gc3RhdGUuY3VycmVudFRpbWU7XG4gICAgY29uc3QgcGF1c2VkID0gc3RhdGUucGF1c2VkO1xuICAgIGNvbnN0IGVuZGVkID0gc3RhdGUuZW5kZWQ7XG4gICAgdGhpcy5kZXRhY2godmlkZW8pO1xuICAgIHZvaWQgdGhpcy5hdHRhY2godmlkZW8sIHRydWUpLnRoZW4oKG5zKSA9PiB7XG4gICAgICBpZiAoIW5zKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5zLmN1cnJlbnRUaW1lID0gdDtcbiAgICAgIG5zLnBhdXNlZCA9IHBhdXNlZDtcbiAgICAgIG5zLmVuZGVkID0gZW5kZWQ7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNjYW4ocm9vdDogRWxlbWVudCB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJvb3QudGFnTmFtZSA9PT0gXCJWSURFT1wiKSB7XG4gICAgICB0aGlzLmF0dGFjaChyb290IGFzIEhUTUxWaWRlb0VsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAocm9vdC5xdWVyeVNlbGVjdG9yQWxsKSB7XG4gICAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ2aWRlb1wiKS5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgIHRoaXMuYXR0YWNoKHYpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsVmlkZW9Ib29rKCk6IHZvaWQge1xuICBpZiAod2luZG93Ll9fcHVwX3ZpZGVvX18pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbmV3IFZpZGVvSG9vaygpLmluc3RhbGwoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDcvMjcuXG5cbmltcG9ydCB7IGluc3RhbGxBdWRpb1NoaW0gfSBmcm9tIFwiLi9hdWRpby9zaGltXCI7XG5pbXBvcnQgeyBpbnN0YWxsSGZIb29rIH0gZnJvbSBcIi4vaHlwZXJmcmFtZXNcIjtcbmltcG9ydCB7IGluc3RhbGxUaWNrSG9vayB9IGZyb20gXCIuL3RpY2tcIjtcbmltcG9ydCB7IGluc3RhbGxWaWRlb0hvb2sgfSBmcm9tIFwiLi92aWRlby9ob29rXCI7XG5cbmlmICh3aW5kb3cuc2VsZiAhPT0gd2luZG93LnRvcCkge1xuICBpbnN0YWxsQXVkaW9TaGltKCk7XG4gIGluc3RhbGxIZkhvb2soKTtcbiAgaW5zdGFsbFRpY2tIb29rKCk7XG4gIGluc3RhbGxWaWRlb0hvb2soKTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pup-recorder",
3
- "version": "0.6.2",
3
+ "version": "0.6.4",
4
4
  "description": "Record web pages as video",
5
5
  "repository": {
6
6
  "type": "git",