pup-recorder 0.4.4 → 0.4.5

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
- 'use strict';require('source-map-support/register.js');function v(){if(window.__pup_tick__)return;let n=Date,t=n.now(),e=0,r=0,o=[],s={},a=1,u=()=>(r+=.01,r);function m(...i){return this instanceof m?i.length?new(Function.prototype.bind.apply(n,[null,...i])):new n(t+e+u()):new n(t+e).toString()}m.prototype=n.prototype,m.now=()=>t+e+u(),m.parse=n.parse,m.UTC=n.UTC,window.Date=m,performance.now=()=>e+u(),window.requestAnimationFrame=i=>{let c=a++;return o.push({id:c,cb:i}),c},window.cancelAnimationFrame=i=>{o=o.filter(c=>c.id!==i);},window.setTimeout=(i,c)=>{let d=a++;return s[d]={type:"timeout",cb:i,delay:c||0,next:e+(c||0)},d},window.clearTimeout=i=>{typeof i=="number"&&delete s[i];},window.setInterval=(i,c)=>{let d=a++,f=Math.max(c||0,1);return s[d]={type:"interval",cb:i,delay:f,next:e+f},d},window.clearInterval=i=>{typeof i=="number"&&delete s[i];};function g(i){try{typeof i=="string"?new Function(i)():i();}catch(c){console.error("[Tick] error:",c instanceof Error&&c.stack||c);}}function p(i,c){try{i(c);}catch(d){console.error("[Tick] error:",d instanceof Error&&d.stack||d);}}let T=new WeakMap;function h(i){let c;try{c=document.getAnimations();}catch{return}for(let d of c){let f=d.playState;if(f==="idle"||f==="finished"){T.delete(d);continue}let E=typeof d.playbackRate=="number"?d.playbackRate:1;if(E===0)continue;let w=T.get(d);if(!w){let N=typeof d.currentTime=="number"?d.currentTime:0;w={startMs:i-N/E,pausedAccum:0,pausedAt:-1},T.set(d,w);}if(f==="paused"){w.pausedAt<0&&(w.pausedAt=i);continue}w.pausedAt>=0&&(w.pausedAccum+=i-w.pausedAt,w.pausedAt=-1),d.currentTime=(i-w.startMs-w.pausedAccum)*E;}}function b(i){e=i,r=0;for(let d of Object.keys(s)){let f=s[Number(d)];if(f)for(;f.next<=e;){if(g(f.cb),f.type==="timeout"){delete s[Number(d)];break}f.next+=f.delay;}}let c=o.splice(0);for(let d of c)p(d.cb,e);h(e);}window.__pup_tick__={process:b};}var $=["borderRadius","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","transform","transformOrigin","filter","clipPath","boxShadow","opacity","mixBlendMode","mask","zIndex","position","left","top","right","bottom"];function R(n){return n.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}function _(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 u of $){if(u==="position"||u==="left"||u==="top"||u==="right"||u==="bottom")continue;let m=e.getPropertyValue(R(u));m&&t.style.setProperty(R(u),m);}let r=n.getBoundingClientRect(),o=window.devicePixelRatio||1,s=Math.max(1,Math.round(r.width*o)),a=Math.max(1,Math.round(r.height*o));t.width!==s&&(t.width=s),t.height!==a&&(t.height=a);}function H(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),_(n,e),t)try{e.getContext("2d").drawImage(t,0,0,e.width,e.height);}catch{}return e}function A(n,t,e,r,o){if(o==="none")return [(e-n)/2,(r-t)/2,n,t];if(o==="contain"||o==="scale-down"){let s=Math.min(e/n,r/t),a=o==="scale-down"?Math.min(1,s):s,u=a*n,m=a*t;return [(e-u)/2,(r-m)/2,u,m]}if(o==="cover"){let s=Math.max(e/n,r/t),a=s*n,u=s*t;return [(e-a)/2,(r-u)/2,a,u]}return [0,0,e,r]}var M="pup-frame://";var L="[VideoHook]";function V(n){return {length:n>0?1:0,start:()=>0,end:()=>n}}function l(n,t){n.dispatchEvent(new Event(t));}function j(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 o of t)o(e,r);}async function W(n,t,e,r){let o=n.cache.cacheOf(e.meta.id);o.readers.set(e,r);let s=o.bitmaps.get(r);if(!s){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}s=m;}e.waiting&&(e.waiting=false,e.paused||l(t,"playing"));let a=e.cv,u=A(s.width,s.height,a.width,a.height,e.objectFit);e.ctx.clearRect(0,0,a.width,a.height),e.ctx.drawImage(s,u[0],u[1],u[2],u[3]),e.lastDrawnIdx=r,e.presentedFrames++,j(e),n.cache.prefetch(e,r+1,10),n.cache.evict(o);}function C(n,t){let e=Math.max(0,t-n.currMs)/1e3;n.currMs=t;let r=[];return document.querySelectorAll("video").forEach(o=>{let s=o,a=n.sessions.get(s);if(!a||a.dead||(_(s,a.cv),!a.meta))return;if(a.meta.frameWidth<a.meta.width&&a.cv.width>a.meta.frameWidth*1.05&&!n.attaching.has(s)){n.reattach(s,a);return}!a.paused&&!a.ended&&(a.currentTime+=e*(s.playbackRate||1),a.maxReached=Math.max(a.maxReached,a.currentTime),a.currentTime>=a.meta.duration?s.loop?a.currentTime=a.currentTime%a.meta.duration:(a.currentTime=a.meta.duration,a.paused=true,a.ended=true,l(s,"ended")):l(s,"timeupdate"));let u=Math.max(1,Math.round(a.currentTime*a.meta.fps));u!==a.lastDrawnIdx&&r.push(W(n,s,a,u));}),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 o=this.cacheOf(r.id),s=o.inFlight.get(e);if(s)return s;let a=o.bitmaps.get(e);if(a)return Promise.resolve(a);let u=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===u*m*4?createImageBitmap(new ImageData(new Uint8ClampedArray(p),u,m)):void 0).then(p=>(o.inFlight.delete(e),p&&o.bitmaps.set(e,p),p)).catch(()=>{o.inFlight.delete(e);});return o.inFlight.set(e,g),g}prefetch(t,e,r){let o=t.meta;if(!o)return;let s=Math.max(1,Math.round(o.duration*o.fps));for(let a=e;a<e+r;a++)a<1||a>s||this.fetch(t,a);}evict(t){let e=1/0;if(t.readers.forEach(o=>{o<e&&(e=o);}),!Number.isFinite(e))return;let r=e-2;t.bitmaps.forEach((o,s)=>{s<r&&(o.close(),t.bitmaps.delete(s));});}release(t,e){let r=this._caches.get(t);r&&(r.readers.delete(e),!(r.readers.size>0)&&(r.bitmaps.forEach(o=>{o.close();}),this._caches.delete(t),fetch(`${M}close?id=${t}`,{keepalive:true})));}};function O(n){let t=HTMLVideoElement.prototype,e=HTMLMediaElement.prototype,r=i=>Object.getOwnPropertyDescriptor(t,i)||Object.getOwnPropertyDescriptor(e,i),o=r("currentTime"),s=r("src"),a=r("playbackRate"),u=t.pause,m=t.requestVideoFrameCallback,g=t.cancelVideoFrameCallback,p=t.getVideoPlaybackQuality,T=t.load,h=n.sessions,b=(i,c)=>{let d=r(i)?.get;if(!d)throw new Error(`media_shim: no native getter for ${i}`);Object.defineProperty(t,i,{configurable:true,get(){let f=h.get(this);return f?c(f):d.call(this)}});};if(b("paused",i=>i.paused),b("ended",i=>i.ended),b("readyState",i=>i.readyState),b("networkState",i=>i.networkState),b("error",i=>i.error??null),b("seeking",i=>i.seeking),b("buffered",i=>V(i.meta?i.meta.duration:0)),b("seekable",i=>V(i.meta?i.meta.duration:0)),b("played",i=>V(i.maxReached)),t.play=function(){let i=h.get(this);return i?(n.resume(this,i),Promise.resolve()):n.attach(this).then(c=>{c&&n.resume(this,c);})},t.pause=function(){let i=h.get(this);if(!i){u.call(this);return}i.paused||(i.paused=true,l(this,"pause"));},o?.get&&o.set){let i=o.get,c=o.set;Object.defineProperty(t,"currentTime",{configurable:true,get(){let d=h.get(this);return d?d.currentTime:i.call(this)},set(d){let f=h.get(this);if(!f){c.call(this,d);return}let E=f.meta?f.meta.duration:d;f.currentTime=Math.max(0,Math.min(d,E)),f.maxReached=Math.max(f.maxReached,f.currentTime),f.currentTime<E&&(f.ended=false),f.seeking=true,l(this,"seeking"),f.seeking=false,l(this,"seeked"),l(this,"timeupdate");}});}if(a?.set){let i=a.set;Object.defineProperty(t,"playbackRate",{configurable:true,get:a.get,set(c){i.call(this,c),h.has(this)&&l(this,"ratechange");}});}if(t.requestVideoFrameCallback=function(i){let c=h.get(this);if(!c)return m.call(this,i);let d=++n.rvfcSeq;return c.rvfc.set(d,i),d},t.cancelVideoFrameCallback=function(i){let c=h.get(this);if(!c){g.call(this,i);return}c.rvfc.delete(i);},t.getVideoPlaybackQuality=function(){let i=h.get(this);return i?{creationTime:performance.now(),totalVideoFrames:i.presentedFrames,droppedVideoFrames:0,corruptedVideoFrames:0}:p.call(this)},t.load=function(){if(!h.has(this))return T.call(this);n.detach(this),l(this,"emptied"),this.__pupLastSrc=void 0,n.attach(this);},s?.set){let i=s.set;Object.defineProperty(t,"src",{configurable:true,get:s.get,set(c){i.call(this,c),n.onSrcChange(this);}});}}function D(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 F(n,t,e){t.dead=true,t.error=e,t.networkState=3,console.error(L,`${e.message} src=${n.src||n.currentSrc}`),l(n,"error");}async function P(n,t){let{video:e,state:r,src:o,birthMs:s,native:a}=t,u=Number.parseInt(e.dataset.pupFps||"30",10);r.networkState=2,l(e,"loadstart");let m;try{let p=a?"":`&w=${r.cv.width}&h=${r.cv.height}&fit=${encodeURIComponent(r.objectFit)}`;m=await fetch(`${M}open?src=${encodeURIComponent(o)}&fps=${u}${p}`);}catch(p){return F(e,r,{code:2,message:`open failed: ${p instanceof Error?p.message:String(p)}`})}if(n.sessions.get(e)!==r)return;if(!m.ok)return F(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-s)/1e3),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,l(e,"durationchange"),l(e,"loadedmetadata"),r.readyState=4,l(e,"loadeddata"),l(e,"canplay"),l(e,"canplaythrough"),r.networkState=1,l(e,"suspend"),r.paused||(l(e,"play"),l(e,"playing")),n.cache.prefetch(r,1,10),r}var k=class{sessions=new WeakMap;attaching=new WeakMap;opening=new Set;cache=new x;rvfcSeq=0;currMs=0;_lastSnapshot=new WeakMap;install(){O(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=>C(this,t),ready:()=>this.ready()};}attach(t,e=false){let r=this.sessions.get(t);if(r)return Promise.resolve(r);let o=this.attaching.get(t);if(o)return o;let s=t.src||t.currentSrc;if(!s||/^(blob:|data:|mediastream:)/i.test(s))return Promise.resolve(void 0);let a=H(t,this._lastSnapshot.get(t)),u=D(t,a);this.sessions.set(t,u);let m=P(this,{video:t,state:u,src:s,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),o=r.getContext("2d");if(!o)throw new Error("no 2d context");o.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,o=e.paused,s=e.ended;this.detach(t),this.attach(t,true).then(a=>{a&&(a.currentTime=r,a.paused=o,a.ended=s);});}scan(t){t&&(t.tagName==="VIDEO"&&this.attach(t),t.querySelectorAll&&t.querySelectorAll("video").forEach(e=>{this.attach(e);}));}};function I(){window.__pup_video__||new k().install();}window.self!==window.top&&(v(),I());
1
+ 'use strict';require('source-map-support/register.js');function k(){if(window.__pup_tick__)return;let n=Date,t=n.now(),e=0,r=0,o=[],s={},a=1,u=()=>(r+=.01,r);function m(...i){return this instanceof m?i.length?new(Function.prototype.bind.apply(n,[null,...i])):new n(t+e+u()):new n(t+e).toString()}m.prototype=n.prototype,m.now=()=>t+e+u(),m.parse=n.parse,m.UTC=n.UTC,window.Date=m,performance.now=()=>e+u(),window.requestAnimationFrame=i=>{let c=a++;return o.push({id:c,cb:i}),c},window.cancelAnimationFrame=i=>{o=o.filter(c=>c.id!==i);},window.setTimeout=(i,c)=>{let d=a++;return s[d]={type:"timeout",cb:i,delay:c||0,next:e+(c||0)},d},window.clearTimeout=i=>{typeof i=="number"&&delete s[i];},window.setInterval=(i,c)=>{let d=a++,f=Math.max(c||0,1);return s[d]={type:"interval",cb:i,delay:f,next:e+f},d},window.clearInterval=i=>{typeof i=="number"&&delete s[i];};function g(i){try{typeof i=="string"?new Function(i)():i();}catch(c){console.error("[Tick] error:",c instanceof Error&&c.stack||c);}}function p(i,c){try{i(c);}catch(d){console.error("[Tick] error:",d instanceof Error&&d.stack||d);}}let b=new WeakMap;function h(i){let c;try{c=document.getAnimations();}catch{return}for(let d of c){let f=d.playState;if(f==="idle"||f==="finished"){b.delete(d);continue}let T=typeof d.playbackRate=="number"?d.playbackRate:1;if(T===0)continue;let y=b.get(d);if(!y){let N=typeof d.currentTime=="number"?d.currentTime:0;y={startMs:i-N/T,pausedAccum:0,pausedAt:-1},b.set(d,y);}if(f==="paused"){y.pausedAt<0&&(y.pausedAt=i);continue}y.pausedAt>=0&&(y.pausedAccum+=i-y.pausedAt,y.pausedAt=-1),d.currentTime=(i-y.startMs-y.pausedAccum)*T;}}function w(i){e=i,r=0;for(let d of Object.keys(s)){let f=s[Number(d)];if(f)for(;f.next<=e;){if(g(f.cb),f.type==="timeout"){delete s[Number(d)];break}f.next+=f.delay;}}let c=o.splice(0);for(let d of c)p(d.cb,e);h(e);}window.__pup_tick__={process:w};}var $=["borderRadius","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","transform","transformOrigin","filter","clipPath","boxShadow","opacity","mixBlendMode","mask","zIndex","position","left","top","right","bottom"];function R(n){return n.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}function _(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 u of $){if(u==="position"||u==="left"||u==="top"||u==="right"||u==="bottom")continue;let m=e.getPropertyValue(R(u));m&&t.style.setProperty(R(u),m);}let r=n.getBoundingClientRect(),o=window.devicePixelRatio||1,s=Math.max(1,Math.round(r.width*o)),a=Math.max(1,Math.round(r.height*o));t.width!==s&&(t.width=s),t.height!==a&&(t.height=a);}function H(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),_(n,e),t)try{e.getContext("2d").drawImage(t,0,0,e.width,e.height);}catch{}return e}function A(n,t,e,r,o){if(o==="none")return [(e-n)/2,(r-t)/2,n,t];if(o==="contain"||o==="scale-down"){let s=Math.min(e/n,r/t),a=o==="scale-down"?Math.min(1,s):s,u=a*n,m=a*t;return [(e-u)/2,(r-m)/2,u,m]}if(o==="cover"){let s=Math.max(e/n,r/t),a=s*n,u=s*t;return [(e-a)/2,(r-u)/2,a,u]}return [0,0,e,r]}var M="pup-frame://";var L="[VideoHook]";function V(n){return {length:n>0?1:0,start:()=>0,end:()=>n}}function l(n,t){n.dispatchEvent(new Event(t));}function j(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 o of t)o(e,r);}async function W(n,t,e,r){let o=n.cache.cacheOf(e.meta.id);o.readers.set(e,r);let s=o.bitmaps.get(r);if(!s){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}s=m;}e.waiting&&(e.waiting=false,e.paused||l(t,"playing"));let a=e.cv,u=A(s.width,s.height,a.width,a.height,e.objectFit);e.ctx.clearRect(0,0,a.width,a.height),e.ctx.drawImage(s,u[0],u[1],u[2],u[3]),e.lastDrawnIdx=r,e.presentedFrames++,j(e),n.cache.prefetch(e,r+1,10),n.cache.evict(o);}function C(n,t){let e=Math.max(0,t-n.currMs)/1e3;n.currMs=t;let r=[];return document.querySelectorAll("video").forEach(o=>{let s=o,a=n.sessions.get(s);if(!a||a.dead||(_(s,a.cv),!a.meta))return;if(a.meta.frameWidth<a.meta.width&&a.cv.width>a.meta.frameWidth*1.05&&!n.attaching.has(s)){n.reattach(s,a);return}!a.paused&&!a.ended&&(a.currentTime+=e*(s.playbackRate||1),a.maxReached=Math.max(a.maxReached,a.currentTime),a.currentTime>=a.meta.duration?s.loop?a.currentTime=a.currentTime%a.meta.duration:(a.currentTime=a.meta.duration,a.paused=true,a.ended=true,l(s,"ended")):l(s,"timeupdate"));let u=Math.max(1,Math.round(a.currentTime*a.meta.fps));u!==a.lastDrawnIdx&&r.push(W(n,s,a,u));}),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 o=this.cacheOf(r.id),s=o.inFlight.get(e);if(s)return s;let a=o.bitmaps.get(e);if(a)return Promise.resolve(a);let u=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===u*m*4?createImageBitmap(new ImageData(new Uint8ClampedArray(p),u,m)):void 0).then(p=>(o.inFlight.delete(e),p&&o.bitmaps.set(e,p),p)).catch(()=>{o.inFlight.delete(e);});return o.inFlight.set(e,g),g}prefetch(t,e,r){let o=t.meta;if(!o)return;let s=Math.max(1,Math.round(o.duration*o.fps));for(let a=e;a<e+r;a++)a<1||a>s||this.fetch(t,a);}evict(t){let e=1/0;if(t.readers.forEach(o=>{o<e&&(e=o);}),!Number.isFinite(e))return;let r=e-2;t.bitmaps.forEach((o,s)=>{s<r&&(o.close(),t.bitmaps.delete(s));});}release(t,e){let r=this._caches.get(t);r&&(r.readers.delete(e),!(r.readers.size>0)&&(r.bitmaps.forEach(o=>{o.close();}),this._caches.delete(t),fetch(`${M}close?id=${t}`,{keepalive:true})));}};function O(n){let t=HTMLVideoElement.prototype,e=HTMLMediaElement.prototype,r=i=>Object.getOwnPropertyDescriptor(t,i)||Object.getOwnPropertyDescriptor(e,i),o=r("currentTime"),s=r("src"),a=r("playbackRate"),u=t.pause,m=t.requestVideoFrameCallback,g=t.cancelVideoFrameCallback,p=t.getVideoPlaybackQuality,b=t.load,h=n.sessions,w=(i,c)=>{let d=r(i)?.get;if(!d)throw new Error(`media_shim: no native getter for ${i}`);Object.defineProperty(t,i,{configurable:true,get(){let f=h.get(this);return f?c(f):d.call(this)}});};if(w("paused",i=>i.paused),w("ended",i=>i.ended),w("readyState",i=>i.readyState),w("networkState",i=>i.networkState),w("error",i=>i.error??null),w("seeking",i=>i.seeking),w("buffered",i=>V(i.meta?i.meta.duration:0)),w("seekable",i=>V(i.meta?i.meta.duration:0)),w("played",i=>V(i.maxReached)),t.play=function(){let i=h.get(this);return i?(n.resume(this,i),Promise.resolve()):n.attach(this).then(c=>{c&&n.resume(this,c);})},t.pause=function(){let i=h.get(this);if(!i){u.call(this);return}i.paused||(i.paused=true,l(this,"pause"));},o?.get&&o.set){let i=o.get,c=o.set;Object.defineProperty(t,"currentTime",{configurable:true,get(){let d=h.get(this);return d?d.currentTime:i.call(this)},set(d){let f=h.get(this);if(!f){c.call(this,d);return}let T=f.meta?f.meta.duration:d;f.currentTime=Math.max(0,Math.min(d,T)),f.maxReached=Math.max(f.maxReached,f.currentTime),f.currentTime<T&&(f.ended=false),f.seeking=true,l(this,"seeking"),f.seeking=false,l(this,"seeked"),l(this,"timeupdate");}});}if(a?.set){let i=a.set;Object.defineProperty(t,"playbackRate",{configurable:true,get:a.get,set(c){i.call(this,c),h.has(this)&&l(this,"ratechange");}});}if(t.requestVideoFrameCallback=function(i){let c=h.get(this);if(!c)return m.call(this,i);let d=++n.rvfcSeq;return c.rvfc.set(d,i),d},t.cancelVideoFrameCallback=function(i){let c=h.get(this);if(!c){g.call(this,i);return}c.rvfc.delete(i);},t.getVideoPlaybackQuality=function(){let i=h.get(this);return i?{creationTime:performance.now(),totalVideoFrames:i.presentedFrames,droppedVideoFrames:0,corruptedVideoFrames:0}:p.call(this)},t.load=function(){if(!h.has(this))return b.call(this);n.detach(this),l(this,"emptied"),this.__pupLastSrc=void 0,n.attach(this);},s?.set){let i=s.set;Object.defineProperty(t,"src",{configurable:true,get:s.get,set(c){i.call(this,c),n.onSrcChange(this);}});}}function D(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 F(n,t,e){t.dead=true,t.error=e,t.networkState=3,console.error(L,`${e.message} src=${n.src||n.currentSrc}`),l(n,"error");}async function P(n,t){let{video:e,state:r,src:o,birthMs:s,native:a}=t,u=Number.parseInt(e.dataset.pupFps||"30",10);r.networkState=2,l(e,"loadstart");let m;try{let b=a?"":`&w=${r.cv.width}&h=${r.cv.height}&fit=${encodeURIComponent(r.objectFit)}`;m=await fetch(`${M}open?src=${encodeURIComponent(o)}&fps=${u}${b}`);}catch(b){return F(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 F(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-s)/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 v=class{sessions=new WeakMap;attaching=new WeakMap;opening=new Set;cache=new x;rvfcSeq=0;currMs=0;_lastSnapshot=new WeakMap;install(){O(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=>C(this,t),ready:()=>this.ready()};}attach(t,e=false){let r=this.sessions.get(t);if(r)return Promise.resolve(r);let o=this.attaching.get(t);if(o)return o;let s=t.src||t.currentSrc;if(!s||/^(blob:|data:|mediastream:)/i.test(s))return Promise.resolve(void 0);let a=H(t,this._lastSnapshot.get(t)),u=D(t,a);this.sessions.set(t,u);let m=P(this,{video:t,state:u,src:s,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),o=r.getContext("2d");if(!o)throw new Error("no 2d context");o.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,o=e.paused,s=e.ended;this.detach(t),this.attach(t,true).then(a=>{a&&(a.currentTime=r,a.paused=o,a.ended=s);});}scan(t){t&&(t.tagName==="VIDEO"&&this.attach(t),t.querySelectorAll&&t.querySelectorAll("video").forEach(e=>{this.attach(e);}));}};function I(){window.__pup_video__||new v().install();}window.self!==window.top&&(k(),I());
2
2
  //# sourceMappingURL=iframe_preload.cjs.map
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2lmcmFtZV9ob29rLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vb3ZlcmxheS50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3ZpZGVvL3R5cGVzLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vZHJpdmVyLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vZnJhbWVfY2FjaGUudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9tZWRpYV9zaGltLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vc2Vzc2lvbi50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3ZpZGVvL2hvb2sudHMiLCIuLi8uLi9zcmMvcnVudGltZS9pZnJhbWVfcHJlbG9hZC50cyJdLCJuYW1lcyI6WyJpbnN0YWxsVGlja0hvb2siLCJSRUFMX0RBVEUiLCJkYXRlT3JpZ2luIiwiY3Vyck1zIiwidGltZU9mZnNldCIsInJhZlF1ZXVlIiwidGltZXJzIiwibmV4dElkIiwidGljayIsIkZha2VEYXRlIiwiYXJncyIsImNiIiwiaWQiLCJyIiwiZGVsYXkiLCJkIiwic2FmZUludm9rZVRpbWVyIiwiZm4iLCJlIiwic2FmZUludm9rZVJhZiIsInRzIiwiYW5pbVN0YXRlIiwic3luY0FuaW1hdGlvbnMiLCJtcyIsImFuaW1zIiwiYSIsInN0YXRlIiwicmF0ZSIsInMiLCJjdDAiLCJwcm9jZXNzIiwidGltZXN0YW1wTXMiLCJ0IiwicmFmcyIsIk1JUlJPUl9QUk9QUyIsImNzc0Nhc2UiLCJjIiwic3luY092ZXJsYXkiLCJ2aWRlbyIsImN2IiwiY3MiLCJwIiwidiIsInZyIiwiZHByIiwidyIsImgiLCJzZXR1cENhbnZhcyIsInNuYXAiLCJmaXRSZWN0Iiwic3JjVyIsInNyY0giLCJkc3RXIiwiZHN0SCIsImZpdCIsInNjIiwiayIsIndzIiwiaHMiLCJzYzIiLCJ3czIiLCJoczIiLCJTQ0hFTUUiLCJUQUciLCJ0aW1lUmFuZ2VzIiwiZW5kIiwiZmlyZSIsImVsIiwidHlwZSIsImZpcmVGcmFtZUNhbGxiYWNrcyIsImNicyIsIm5vdyIsIm1ldGEiLCJwYWludCIsImhvb2siLCJpZHgiLCJibSIsImZldGNoZWQiLCJhZHZhbmNlIiwiZHQiLCJwcyIsIkZyYW1lQ2FjaGUiLCJleGlzdGluZyIsImNhY2hlZCIsImJ1ZiIsImZyb21JZHgiLCJjb3VudCIsIm1heElkeCIsImkiLCJtaW5JZHgiLCJmbG9vciIsImluc3RhbGxNZWRpYVNoaW0iLCJIVkUiLCJNRURJQSIsIm1kZXNjIiwiY3REZXNjIiwic3JjRGVzYyIsInJhdGVEZXNjIiwib3JpZ1BhdXNlIiwib3JpZ1JWRkMiLCJvcmlnQ2FuY2VsUlZGQyIsIm9yaWdRdWFsaXR5Iiwib3JpZ0xvYWQiLCJzZXNzaW9ucyIsImRlZiIsInByb3AiLCJwaWNrIiwibmF0aXZlR2V0IiwibnMiLCJjdEdldCIsImN0U2V0IiwiZHVyIiwicmF0ZVNldCIsInNyY1NldCIsIm5ld1ZpZGVvU3RhdGUiLCJmYWlsT3BlbiIsImVycm9yIiwib3BlblNlc3Npb24iLCJzcmMiLCJiaXJ0aE1zIiwibmF0aXZlIiwiZnBzIiwicmVzIiwicSIsIlZpZGVvSG9vayIsIm11dHMiLCJtIiwibiIsInBlbmRpbmciLCJzY3R4IiwicGF1c2VkIiwiZW5kZWQiLCJyb290IiwiaW5zdGFsbFZpZGVvSG9vayJdLCJtYXBwaW5ncyI6InVEQXdCTyxTQUFTQSxHQUF3QixDQUN0QyxHQUFJLE9BQU8sWUFBQSxDQUNULE9BR0YsSUFBTUMsQ0FBQUEsQ0FBWSxJQUFBLENBQ1pDLENBQUFBLENBQWFELENBQUFBLENBQVUsS0FBSSxDQUM3QkUsQ0FBQUEsQ0FBUyxFQUNUQyxDQUFBQSxDQUFhLENBQUEsQ0FDYkMsRUFBdUIsRUFBQyxDQUN0QkMsQ0FBQUEsQ0FBNEMsR0FDOUNDLENBQUFBLENBQVMsQ0FBQSxDQUNQQyxFQUFPLEtBQ1hKLENBQUFBLEVBQWMsSUFDUEEsQ0FBQUEsQ0FBQUEsQ0FHVCxTQUFTSyxDQUFBQSxDQUFBQSxHQUEyQkMsQ0FBQUEsQ0FBZ0Ms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QUFNc0UsQ0FBQUEsRUFBTyxDQUNwQ0EsSUFHTEEsQ0FBQUEsQ0FBRyxXQUFBLENBQWM1RSxFQUNqQjRFLENBQUFBLENBQUcsTUFBQSxDQUFTc0IsRUFDWnRCLENBQUFBLENBQUcsS0FBQSxDQUFRdUIsR0FDYixDQUFDLEVBQ0gsQ0FFUSxJQUFBLENBQUtDLENBQUFBLENBQTRCLENBQ2xDQSxDQUFBQSxHQUdEQSxFQUFLLE9BQUEsR0FBWSxPQUFBLEVBQ25CLEtBQUssTUFBQSxDQUFPQSxDQUF3QixFQUVsQ0EsQ0FBQUEsQ0FBSyxnQkFBQSxFQUNQQSxDQUFBQSxDQUFLLGdCQUFBLENBQWlCLE9BQU8sQ0FBQSxDQUFFLE9BQUEsQ0FBUzFGLEdBQU0sQ0FDNUMsSUFBQSxDQUFLLE9BQU9BLENBQUMsRUFDZixDQUFDLENBQUEsRUFFTCxDQUNGLENBQUEsQ0FFTyxTQUFTMkYsR0FBeUIsQ0FDbkMsTUFBQSxDQUFPLGVBR1gsSUFBSVQsQ0FBQUEsR0FBWSxPQUFBLEdBQ2xCLENDbEtJLE1BQUEsQ0FBTyxJQUFBLEdBQVMsT0FBTyxHQUFBLEdBQ3pCNUgsQ0FBQUEsR0FDQXFJLENBQUFBLEVBQWlCLENBQUEiLCJmaWxlIjoiaWZyYW1lX3ByZWxvYWQuY2pzIiwic291cmNlc0NvbnRlbnQiOlsiZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX3B1cF90aWNrX18/OiB7IHByb2Nlc3M6IChtczogbnVtYmVyKSA9PiB2b2lkIH07XG4gIH1cbn1cblxuaW50ZXJmYWNlIFRpbWVyIHtcbiAgdHlwZTogXCJ0aW1lb3V0XCIgfCBcImludGVydmFsXCI7XG4gIGNiOiBUaW1lckhhbmRsZXI7XG4gIGRlbGF5OiBudW1iZXI7XG4gIG5leHQ6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFJhZkVudHJ5IHtcbiAgaWQ6IG51bWJlcjtcbiAgY2I6IEZyYW1lUmVxdWVzdENhbGxiYWNrO1xufVxuXG5pbnRlcmZhY2UgQW5pbUVudHJ5IHtcbiAgc3RhcnRNczogbnVtYmVyO1xuICBwYXVzZWRBY2N1bTogbnVtYmVyO1xuICBwYXVzZWRBdDogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbFRpY2tIb29rKCk6IHZvaWQge1xuICBpZiAod2luZG93Ll9fcHVwX3RpY2tfXykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IFJFQUxfREFURSA9IERhdGU7XG4gIGNvbnN0IGRhdGVPcmlnaW4gPSBSRUFMX0RBVEUubm93KCk7XG4gIGxldCBjdXJyTXMgPSAwO1xuICBsZXQgdGltZU9mZnNldCA9IDA7XG4gIGxldCByYWZRdWV1ZTogUmFmRW50cnlbXSA9IFtdO1xuICBjb25zdCB0aW1lcnM6IFJlY29yZDxudW1iZXIsIFRpbWVyIHwgdW5kZWZpbmVkPiA9IHt9O1xuICBsZXQgbmV4dElkID0gMTtcbiAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICB0aW1lT2Zmc2V0ICs9IDAuMDE7XG4gICAgcmV0dXJuIHRpbWVPZmZzZXQ7XG4gIH07XG5cbiAgZnVuY3Rpb24gRmFrZURhdGUodGhpczogdW5rbm93biwgLi4uYXJnczogdW5rbm93bltdKTogRGF0ZSB8IHN0cmluZyB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEZha2VEYXRlKSkge1xuICAgICAgcmV0dXJuIG5ldyBSRUFMX0RBVEUoZGF0ZU9yaWdpbiArIGN1cnJNcykudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3MubGVuZ3RoXG4gICAgICA/IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoUkVBTF9EQVRFLCBbbnVsbCwgLi4uYXJnc10pKSgpXG4gICAgICA6IG5ldyBSRUFMX0RBVEUoZGF0ZU9yaWdpbiArIGN1cnJNcyArIHRpY2soKSk7XG4gIH1cbiAgRmFrZURhdGUucHJvdG90eXBlID0gUkVBTF9EQVRFLnByb3RvdHlwZTtcbiAgRmFrZURhdGUubm93ID0gKCkgPT4gZGF0ZU9yaWdpbiArIGN1cnJNcyArIHRpY2soKTtcbiAgRmFrZURhdGUucGFyc2UgPSBSRUFMX0RBVEUucGFyc2U7XG4gIEZha2VEYXRlLlVUQyA9IFJFQUxfREFURS5VVEM7XG4gICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IERhdGU6IHVua25vd24gfSkuRGF0ZSA9IEZha2VEYXRlO1xuICBwZXJmb3JtYW5jZS5ub3cgPSAoKSA9PiBjdXJyTXMgKyB0aWNrKCk7XG5cbiAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IChjYikgPT4ge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgcmFmUXVldWUucHVzaCh7IGlkLCBjYiB9KTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IChpZCkgPT4ge1xuICAgIHJhZlF1ZXVlID0gcmFmUXVldWUuZmlsdGVyKChyKSA9PiByLmlkICE9PSBpZCk7XG4gIH07XG4gICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IHNldFRpbWVvdXQ6IHVua25vd24gfSkuc2V0VGltZW91dCA9IChjYjogVGltZXJIYW5kbGVyLCBkZWxheT86IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgdGltZXJzW2lkXSA9IHsgdHlwZTogXCJ0aW1lb3V0XCIsIGNiLCBkZWxheTogZGVsYXkgfHwgMCwgbmV4dDogY3Vyck1zICsgKGRlbGF5IHx8IDApIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJUaW1lb3V0ID0gKGlkKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBpZCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgZGVsZXRlIHRpbWVyc1tpZF07XG4gICAgfVxuICB9O1xuICAod2luZG93IGFzIHVua25vd24gYXMgeyBzZXRJbnRlcnZhbDogdW5rbm93biB9KS5zZXRJbnRlcnZhbCA9IChjYjogVGltZXJIYW5kbGVyLCBkZWxheT86IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgY29uc3QgZCA9IE1hdGgubWF4KGRlbGF5IHx8IDAsIDEpO1xuICAgIHRpbWVyc1tpZF0gPSB7IHR5cGU6IFwiaW50ZXJ2YWxcIiwgY2IsIGRlbGF5OiBkLCBuZXh0OiBjdXJyTXMgKyBkIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJJbnRlcnZhbCA9IChpZCkgPT4ge1xuICAgIGlmICh0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGRlbGV0ZSB0aW1lcnNbaWRdO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBzYWZlSW52b2tlVGltZXIoZm46IFRpbWVySGFuZGxlcikge1xuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIGZuID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIC8vIFN0cmluZyB0aW1lciBoYW5kbGVyIHJ1bnMgYXMgcGFnZSBzY3JpcHQgaW4gZ2xvYmFsIHNjb3BlIChIVE1MIHNwZWMpOyBGdW5jdGlvbiBjdG9yIG1hdGNoZXMgdGhhdCwgYXZvaWRzIGV2YWwuXG4gICAgICAgIG5ldyBGdW5jdGlvbihmbikoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIltUaWNrXSBlcnJvcjpcIiwgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLnN0YWNrKSB8fCBlKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gc2FmZUludm9rZVJhZihjYjogRnJhbWVSZXF1ZXN0Q2FsbGJhY2ssIHRzOiBudW1iZXIpIHtcbiAgICB0cnkge1xuICAgICAgY2IodHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJbVGlja10gZXJyb3I6XCIsIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5zdGFjaykgfHwgZSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYW5pbVN0YXRlID0gbmV3IFdlYWtNYXA8QW5pbWF0aW9uLCBBbmltRW50cnk+KCk7XG4gIGZ1bmN0aW9uIHN5bmNBbmltYXRpb25zKG1zOiBudW1iZXIpIHtcbiAgICBsZXQgYW5pbXM6IEFuaW1hdGlvbltdO1xuICAgIHRyeSB7XG4gICAgICBhbmltcyA9IGRvY3VtZW50LmdldEFuaW1hdGlvbnMoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBhIG9mIGFuaW1zKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IGEucGxheVN0YXRlO1xuICAgICAgaWYgKHN0YXRlID09PSBcImlkbGVcIiB8fCBzdGF0ZSA9PT0gXCJmaW5pc2hlZFwiKSB7XG4gICAgICAgIGFuaW1TdGF0ZS5kZWxldGUoYSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmF0ZSA9IHR5cGVvZiBhLnBsYXliYWNrUmF0ZSA9PT0gXCJudW1iZXJcIiA/IGEucGxheWJhY2tSYXRlIDogMTtcbiAgICAgIGlmIChyYXRlID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IHMgPSBhbmltU3RhdGUuZ2V0KGEpO1xuICAgICAgaWYgKCFzKSB7XG4gICAgICAgIGNvbnN0IGN0MCA9IHR5cGVvZiBhLmN1cnJlbnRUaW1lID09PSBcIm51bWJlclwiID8gYS5jdXJyZW50VGltZSA6IDA7XG4gICAgICAgIHMgPSB7IHN0YXJ0TXM6IG1zIC0gY3QwIC8gcmF0ZSwgcGF1c2VkQWNjdW06IDAsIHBhdXNlZEF0OiAtMSB9O1xuICAgICAgICBhbmltU3RhdGUuc2V0KGEsIHMpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlID09PSBcInBhdXNlZFwiKSB7XG4gICAgICAgIGlmIChzLnBhdXNlZEF0IDwgMCkge1xuICAgICAgICAgIHMucGF1c2VkQXQgPSBtcztcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzLnBhdXNlZEF0ID49IDApIHtcbiAgICAgICAgcy5wYXVzZWRBY2N1bSArPSBtcyAtIHMucGF1c2VkQXQ7XG4gICAgICAgIHMucGF1c2VkQXQgPSAtMTtcbiAgICAgIH1cbiAgICAgIGEuY3VycmVudFRpbWUgPSAobXMgLSBzLnN0YXJ0TXMgLSBzLnBhdXNlZEFjY3VtKSAqIHJhdGU7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHJvY2Vzcyh0aW1lc3RhbXBNczogbnVtYmVyKSB7XG4gICAgY3Vyck1zID0gdGltZXN0YW1wTXM7XG4gICAgdGltZU9mZnNldCA9IDA7XG4gICAgZm9yIChjb25zdCBpZCBvZiBPYmplY3Qua2V5cyh0aW1lcnMpKSB7XG4gICAgICBjb25zdCB0ID0gdGltZXJzW051bWJlcihpZCldO1xuICAgICAgaWYgKCF0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHQubmV4dCA8PSBjdXJyTXMpIHtcbiAgICAgICAgc2FmZUludm9rZVRpbWVyKHQuY2IpO1xuICAgICAgICBpZiAodC50eXBlID09PSBcInRpbWVvdXRcIikge1xuICAgICAgICAgIGRlbGV0ZSB0aW1lcnNbTnVtYmVyKGlkKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdC5uZXh0ICs9IHQuZGVsYXk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJhZnMgPSByYWZRdWV1ZS5zcGxpY2UoMCk7XG4gICAgZm9yIChjb25zdCByIG9mIHJhZnMpIHtcbiAgICAgIHNhZmVJbnZva2VSYWYoci5jYiwgY3Vyck1zKTtcbiAgICB9XG4gICAgc3luY0FuaW1hdGlvbnMoY3Vyck1zKTtcbiAgfVxuXG4gIHdpbmRvdy5fX3B1cF90aWNrX18gPSB7IHByb2Nlc3MgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbnR5cGUgVmVjNCA9IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG5jb25zdCBNSVJST1JfUFJPUFMgPSBbXG4gIFwiYm9yZGVyUmFkaXVzXCIsXG4gIFwiYm9yZGVyVG9wTGVmdFJhZGl1c1wiLFxuICBcImJvcmRlclRvcFJpZ2h0UmFkaXVzXCIsXG4gIFwiYm9yZGVyQm90dG9tTGVmdFJhZGl1c1wiLFxuICBcImJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzXCIsXG4gIFwidHJhbnNmb3JtXCIsXG4gIFwidHJhbnNmb3JtT3JpZ2luXCIsXG4gIFwiZmlsdGVyXCIsXG4gIFwiY2xpcFBhdGhcIixcbiAgXCJib3hTaGFkb3dcIixcbiAgXCJvcGFjaXR5XCIsXG4gIFwibWl4QmxlbmRNb2RlXCIsXG4gIFwibWFza1wiLFxuICBcInpJbmRleFwiLFxuICBcInBvc2l0aW9uXCIsXG4gIFwibGVmdFwiLFxuICBcInRvcFwiLFxuICBcInJpZ2h0XCIsXG4gIFwiYm90dG9tXCIsXG5dIGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBjc3NDYXNlKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzLnJlcGxhY2UoL1tBLVpdL2csIChjKSA9PiBgLSR7Yy50b0xvd2VyQ2FzZSgpfWApO1xufVxuXG4vLyBUcmFjayB0aGUgb3ZlcmxheSBjYW52YXMgdG8gdGhlIHZpZGVvIGVsZW1lbnQncyBsaXZlIGJveCAocG9zaXRpb24sIHNpemXDl2RwciwgbWlycm9yZWQgdmlzdWFsIHN0eWxlcykuXG5leHBvcnQgZnVuY3Rpb24gc3luY092ZXJsYXkodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIGN2OiBIVE1MQ2FudmFzRWxlbWVudCk6IHZvaWQge1xuICBjb25zdCBjcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHZpZGVvKTtcbiAgY3Yuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gIC8vIG9mZnNldCogYXJlIHByZS10cmFuc2Zvcm0gY29vcmRzIGZyb20gb2Zmc2V0UGFyZW50J3MgcGFkZGluZyBlZGdlID0gdGhlIGFicyBjb250YWluaW5nLWJsb2NrIG9yaWdpbjsgbWFwIGRpcmVjdC5cbiAgY3Yuc3R5bGUubGVmdCA9IGAke3ZpZGVvLm9mZnNldExlZnR9cHhgO1xuICBjdi5zdHlsZS50b3AgPSBgJHt2aWRlby5vZmZzZXRUb3B9cHhgO1xuICBjdi5zdHlsZS53aWR0aCA9IGAke3ZpZGVvLm9mZnNldFdpZHRofXB4YDtcbiAgY3Yuc3R5bGUuaGVpZ2h0ID0gYCR7dmlkZW8ub2Zmc2V0SGVpZ2h0fXB4YDtcbiAgZm9yIChjb25zdCBwIG9mIE1JUlJPUl9QUk9QUykge1xuICAgIGlmIChwID09PSBcInBvc2l0aW9uXCIgfHwgcCA9PT0gXCJsZWZ0XCIgfHwgcCA9PT0gXCJ0b3BcIiB8fCBwID09PSBcInJpZ2h0XCIgfHwgcCA9PT0gXCJib3R0b21cIikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHYgPSBjcy5nZXRQcm9wZXJ0eVZhbHVlKGNzc0Nhc2UocCkpO1xuICAgIGlmICh2KSB7XG4gICAgICBjdi5zdHlsZS5zZXRQcm9wZXJ0eShjc3NDYXNlKHApLCB2KTtcbiAgICB9XG4gIH1cbiAgLy8gQmFja2luZyBzdG9yZSBhdCBvbi1zY3JlZW4gcGl4ZWwgc2l6ZSAocG9zdC10cmFuc2Zvcm0pIHNvIGRlY29kZSByZXNvbHV0aW9uIG1hdGNoZXMgZGlzcGxheWVkIHBpeGVscy5cbiAgY29uc3QgdnIgPSB2aWRlby5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgY29uc3QgdyA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQodnIud2lkdGggKiBkcHIpKTtcbiAgY29uc3QgaCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQodnIuaGVpZ2h0ICogZHByKSk7XG4gIGlmIChjdi53aWR0aCAhPT0gdykge1xuICAgIGN2LndpZHRoID0gdztcbiAgfVxuICBpZiAoY3YuaGVpZ2h0ICE9PSBoKSB7XG4gICAgY3YuaGVpZ2h0ID0gaDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBDYW52YXModmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHNuYXA6IE9mZnNjcmVlbkNhbnZhcyB8IHVuZGVmaW5lZCk6IEhUTUxDYW52YXNFbGVtZW50IHtcbiAgY29uc3QgY3YgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICBjdi5kYXRhc2V0W1wicHVwVmlkZW9PdmVybGF5XCJdID0gXCIxXCI7XG4gIGN2LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcIm5vbmVcIjtcbiAgdmlkZW8uc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gIHZpZGVvLm11dGVkID0gdHJ1ZTtcbiAgY29uc3QgcGFyZW50ID0gdmlkZW8ucGFyZW50Tm9kZSB8fCBkb2N1bWVudC5ib2R5O1xuICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGN2LCB2aWRlby5uZXh0U2libGluZyk7XG4gIHN5bmNPdmVybGF5KHZpZGVvLCBjdik7XG4gIGlmIChzbmFwKSB7XG4gICAgdHJ5IHtcbiAgICAgIGN2LmdldENvbnRleHQoXCIyZFwiKSEuZHJhd0ltYWdlKHNuYXAsIDAsIDAsIGN2LndpZHRoLCBjdi5oZWlnaHQpO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuICByZXR1cm4gY3Y7XG59XG5cbi8vIERyYXcgcmVjdCBmb3IgdGhlIGJpdG1hcCB3aXRoaW4gdGhlIGNhbnZhcyBwZXIgb2JqZWN0Rml0LlxuZXhwb3J0IGZ1bmN0aW9uIGZpdFJlY3Qoc3JjVzogbnVtYmVyLCBzcmNIOiBudW1iZXIsIGRzdFc6IG51bWJlciwgZHN0SDogbnVtYmVyLCBmaXQ6IHN0cmluZyk6IFZlYzQge1xuICBpZiAoZml0ID09PSBcIm5vbmVcIikge1xuICAgIHJldHVybiBbKGRzdFcgLSBzcmNXKSAvIDIsIChkc3RIIC0gc3JjSCkgLyAyLCBzcmNXLCBzcmNIXTtcbiAgfVxuICBpZiAoZml0ID09PSBcImNvbnRhaW5cIiB8fCBmaXQgPT09IFwic2NhbGUtZG93blwiKSB7XG4gICAgY29uc3Qgc2MgPSBNYXRoLm1pbihkc3RXIC8gc3JjVywgZHN0SCAvIHNyY0gpO1xuICAgIGNvbnN0IGsgPSBmaXQgPT09IFwic2NhbGUtZG93blwiID8gTWF0aC5taW4oMSwgc2MpIDogc2M7XG4gICAgY29uc3Qgd3MgPSBrICogc3JjVztcbiAgICBjb25zdCBocyA9IGsgKiBzcmNIO1xuICAgIHJldHVybiBbKGRzdFcgLSB3cykgLyAyLCAoZHN0SCAtIGhzKSAvIDIsIHdzLCBoc107XG4gIH1cbiAgaWYgKGZpdCA9PT0gXCJjb3ZlclwiKSB7XG4gICAgY29uc3Qgc2MyID0gTWF0aC5tYXgoZHN0VyAvIHNyY1csIGRzdEggLyBzcmNIKTtcbiAgICBjb25zdCB3czIgPSBzYzIgKiBzcmNXO1xuICAgIGNvbnN0IGhzMiA9IHNjMiAqIHNyY0g7XG4gICAgcmV0dXJuIFsoZHN0VyAtIHdzMikgLyAyLCAoZHN0SCAtIGhzMikgLyAyLCB3czIsIGhzMl07XG4gIH1cbiAgcmV0dXJuIFswLCAwLCBkc3RXLCBkc3RIXTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmV4cG9ydCBjb25zdCBTQ0hFTUUgPSBcInB1cC1mcmFtZTovL1wiO1xuZXhwb3J0IGNvbnN0IEFIRUFEID0gMTA7XG5leHBvcnQgY29uc3QgVEFHID0gXCJbVmlkZW9Ib29rXVwiO1xuXG5leHBvcnQgY29uc3QgTUVESUFfRVJSX05FVFdPUksgPSAyO1xuZXhwb3J0IGNvbnN0IE1FRElBX0VSUl9ERUNPREUgPSAzO1xuZXhwb3J0IGNvbnN0IEhBVkVfTk9USElORyA9IDA7XG5leHBvcnQgY29uc3QgSEFWRV9NRVRBREFUQSA9IDE7XG5leHBvcnQgY29uc3QgSEFWRV9FTk9VR0hfREFUQSA9IDQ7XG5leHBvcnQgY29uc3QgTkVUV09SS19FTVBUWSA9IDA7XG5leHBvcnQgY29uc3QgTkVUV09SS19JRExFID0gMTtcbmV4cG9ydCBjb25zdCBORVRXT1JLX0xPQURJTkcgPSAyO1xuZXhwb3J0IGNvbnN0IE5FVFdPUktfTk9fU09VUkNFID0gMztcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb01ldGEge1xuICBpZDogc3RyaW5nO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnJhbWVXaWR0aDogbnVtYmVyO1xuICBmcmFtZUhlaWdodDogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0ZyYW1lTWV0YSB7XG4gIHByZXNlbnRhdGlvblRpbWU6IG51bWJlcjtcbiAgZXhwZWN0ZWREaXNwbGF5VGltZTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgbWVkaWFUaW1lOiBudW1iZXI7XG4gIHByZXNlbnRlZEZyYW1lczogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBGcmFtZUNiID0gKG5vdzogbnVtYmVyLCBtZXRhOiBWaWRlb0ZyYW1lTWV0YSkgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBNZWRpYUVycm9yTGlrZSB7XG4gIGNvZGU6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ2FjaGUge1xuICBiaXRtYXBzOiBNYXA8bnVtYmVyLCBJbWFnZUJpdG1hcD47XG4gIGluRmxpZ2h0OiBNYXA8bnVtYmVyLCBQcm9taXNlPEltYWdlQml0bWFwIHwgdW5kZWZpbmVkPj47XG4gIHJlYWRlcnM6IE1hcDxWaWRlb1N0YXRlLCBudW1iZXI+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvU3RhdGUge1xuICBtZXRhPzogVmlkZW9NZXRhO1xuICBjdjogSFRNTENhbnZhc0VsZW1lbnQ7XG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICBwYXVzZWQ6IGJvb2xlYW47XG4gIGN1cnJlbnRUaW1lOiBudW1iZXI7XG4gIGVuZGVkOiBib29sZWFuO1xuICBsYXN0RHJhd25JZHg6IG51bWJlcjtcbiAgZGVhZDogYm9vbGVhbjtcbiAgb2JqZWN0Rml0OiBzdHJpbmc7XG4gIHJlYWR5U3RhdGU6IG51bWJlcjtcbiAgbmV0d29ya1N0YXRlOiBudW1iZXI7XG4gIHNlZWtpbmc6IGJvb2xlYW47XG4gIHdhaXRpbmc6IGJvb2xlYW47XG4gIGVycm9yOiBNZWRpYUVycm9yTGlrZSB8IHVuZGVmaW5lZDtcbiAgcHJlc2VudGVkRnJhbWVzOiBudW1iZXI7XG4gIG1heFJlYWNoZWQ6IG51bWJlcjtcbiAgcnZmYzogTWFwPG51bWJlciwgRnJhbWVDYj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGltZVJhbmdlc0xpa2Uge1xuICBsZW5ndGg6IG51bWJlcjtcbiAgc3RhcnQoaTogbnVtYmVyKTogbnVtYmVyO1xuICBlbmQoaTogbnVtYmVyKTogbnVtYmVyO1xufVxuXG4vLyBXaG9sZSBjbGlwIGlzIGRlY29kZS1vbi1kZW1hbmQsIHNvIHRoZSBhdmFpbGFibGUgcmFuZ2UgaXMgYWx3YXlzIFswLCBlbmRdIChvbmUgVGltZVJhbmdlcyBlbnRyeSkuXG5leHBvcnQgZnVuY3Rpb24gdGltZVJhbmdlcyhlbmQ6IG51bWJlcik6IFRpbWVSYW5nZXNMaWtlIHtcbiAgcmV0dXJuIHsgbGVuZ3RoOiBlbmQgPiAwID8gMSA6IDAsIHN0YXJ0OiAoKSA9PiAwLCBlbmQ6ICgpID0+IGVuZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyZShlbDogRXZlbnRUYXJnZXQsIHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCh0eXBlKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgdHlwZSB7IFZpZGVvSG9vayB9IGZyb20gXCIuL2hvb2tcIjtcbmltcG9ydCB7IGZpdFJlY3QsIHN5bmNPdmVybGF5IH0gZnJvbSBcIi4vb3ZlcmxheVwiO1xuaW1wb3J0IHsgQUhFQUQsIGZpcmUsIHR5cGUgVmlkZW9GcmFtZU1ldGEsIHR5cGUgVmlkZW9TdGF0ZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIGZpcmVGcmFtZUNhbGxiYWNrcyhzdGF0ZTogVmlkZW9TdGF0ZSk6IHZvaWQge1xuICBpZiAoc3RhdGUucnZmYy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGNicyA9IFsuLi5zdGF0ZS5ydmZjLnZhbHVlcygpXTtcbiAgc3RhdGUucnZmYy5jbGVhcigpO1xuICBjb25zdCBub3cgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgY29uc3QgbWV0YTogVmlkZW9GcmFtZU1ldGEgPSB7XG4gICAgcHJlc2VudGF0aW9uVGltZTogbm93LFxuICAgIGV4cGVjdGVkRGlzcGxheVRpbWU6IG5vdyxcbiAgICB3aWR0aDogc3RhdGUubWV0YSEuZnJhbWVXaWR0aCxcbiAgICBoZWlnaHQ6IHN0YXRlLm1ldGEhLmZyYW1lSGVpZ2h0LFxuICAgIG1lZGlhVGltZTogc3RhdGUuY3VycmVudFRpbWUsXG4gICAgcHJlc2VudGVkRnJhbWVzOiBzdGF0ZS5wcmVzZW50ZWRGcmFtZXMsXG4gIH07XG4gIGZvciAoY29uc3QgY2Igb2YgY2JzKSB7XG4gICAgY2Iobm93LCBtZXRhKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBwYWludChob29rOiBWaWRlb0hvb2ssIHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzdGF0ZTogVmlkZW9TdGF0ZSwgaWR4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYyA9IGhvb2suY2FjaGUuY2FjaGVPZihzdGF0ZS5tZXRhIS5pZCk7XG4gIGMucmVhZGVycy5zZXQoc3RhdGUsIGlkeCk7XG4gIGxldCBibSA9IGMuYml0bWFwcy5nZXQoaWR4KTtcbiAgaWYgKCFibSkge1xuICAgIGhvb2suY2FjaGUucHJlZmV0Y2goc3RhdGUsIGlkeCArIDEsIEFIRUFEIC0gMSk7XG4gICAgY29uc3QgZmV0Y2hlZCA9IGF3YWl0IGhvb2suY2FjaGUuZmV0Y2goc3RhdGUsIGlkeCk7XG4gICAgaWYgKGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKSAhPT0gc3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFmZXRjaGVkKSB7XG4gICAgICBpZiAoIXN0YXRlLnBhdXNlZCAmJiAhc3RhdGUud2FpdGluZykge1xuICAgICAgICBzdGF0ZS53YWl0aW5nID0gdHJ1ZTtcbiAgICAgICAgZmlyZSh2aWRlbywgXCJ3YWl0aW5nXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBibSA9IGZldGNoZWQ7XG4gIH1cbiAgaWYgKHN0YXRlLndhaXRpbmcpIHtcbiAgICBzdGF0ZS53YWl0aW5nID0gZmFsc2U7XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQpIHtcbiAgICAgIGZpcmUodmlkZW8sIFwicGxheWluZ1wiKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY3YgPSBzdGF0ZS5jdjtcbiAgY29uc3QgciA9IGZpdFJlY3QoYm0ud2lkdGgsIGJtLmhlaWdodCwgY3Yud2lkdGgsIGN2LmhlaWdodCwgc3RhdGUub2JqZWN0Rml0KTtcbiAgc3RhdGUuY3R4LmNsZWFyUmVjdCgwLCAwLCBjdi53aWR0aCwgY3YuaGVpZ2h0KTtcbiAgc3RhdGUuY3R4LmRyYXdJbWFnZShibSwgclswXSwgclsxXSwgclsyXSwgclszXSk7XG4gIHN0YXRlLmxhc3REcmF3bklkeCA9IGlkeDtcbiAgc3RhdGUucHJlc2VudGVkRnJhbWVzKys7XG4gIGZpcmVGcmFtZUNhbGxiYWNrcyhzdGF0ZSk7XG4gIGhvb2suY2FjaGUucHJlZmV0Y2goc3RhdGUsIGlkeCArIDEsIEFIRUFEKTtcbiAgaG9vay5jYWNoZS5ldmljdChjKTtcbn1cblxuLy8gVmlydHVhbC10aW1lIHRpY2s6IHN5bmMgb3ZlcmxheXMsIGFkdmFuY2UgZWFjaCBob29rZWQgdmlkZW8ncyBjbG9jayAobG9vcC9lbmQpLCBwYWludCB0aGUgZHVlIGZyYW1lLlxuZXhwb3J0IGZ1bmN0aW9uIGFkdmFuY2UoaG9vazogVmlkZW9Ib29rLCB0aW1lc3RhbXBNczogbnVtYmVyKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIGNvbnN0IGR0ID0gTWF0aC5tYXgoMCwgdGltZXN0YW1wTXMgLSBob29rLmN1cnJNcykgLyAxMDAwO1xuICBob29rLmN1cnJNcyA9IHRpbWVzdGFtcE1zO1xuICBjb25zdCBwczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ2aWRlb1wiKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgIGNvbnN0IHZpZGVvID0gZWwgYXMgSFRNTFZpZGVvRWxlbWVudDtcbiAgICBjb25zdCBzdGF0ZSA9IGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKTtcbiAgICBpZiAoIXN0YXRlIHx8IHN0YXRlLmRlYWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3luY092ZXJsYXkodmlkZW8sIHN0YXRlLmN2KTtcbiAgICBpZiAoIXN0YXRlLm1ldGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gRWxlbWVudCBncmV3IHBhc3QgdGhlIGRlY29kZWQgKGRvd25zY2FsZWQpIHJlcyDihpIgcmUtZGVjb2RlIGF0IG5hdGl2ZSwgb25lLXNob3QgKGNvdmVycyB6b29tKS5cbiAgICBpZiAoXG4gICAgICBzdGF0ZS5tZXRhLmZyYW1lV2lkdGggPCBzdGF0ZS5tZXRhLndpZHRoICYmXG4gICAgICBzdGF0ZS5jdi53aWR0aCA+IHN0YXRlLm1ldGEuZnJhbWVXaWR0aCAqIDEuMDUgJiZcbiAgICAgICFob29rLmF0dGFjaGluZy5oYXModmlkZW8pXG4gICAgKSB7XG4gICAgICBob29rLnJlYXR0YWNoKHZpZGVvLCBzdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghc3RhdGUucGF1c2VkICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgc3RhdGUuY3VycmVudFRpbWUgKz0gZHQgKiAodmlkZW8ucGxheWJhY2tSYXRlIHx8IDEpO1xuICAgICAgc3RhdGUubWF4UmVhY2hlZCA9IE1hdGgubWF4KHN0YXRlLm1heFJlYWNoZWQsIHN0YXRlLmN1cnJlbnRUaW1lKTtcbiAgICAgIGlmIChzdGF0ZS5jdXJyZW50VGltZSA+PSBzdGF0ZS5tZXRhLmR1cmF0aW9uKSB7XG4gICAgICAgIGlmICh2aWRlby5sb29wKSB7XG4gICAgICAgICAgc3RhdGUuY3VycmVudFRpbWUgPSBzdGF0ZS5jdXJyZW50VGltZSAlIHN0YXRlLm1ldGEuZHVyYXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUuY3VycmVudFRpbWUgPSBzdGF0ZS5tZXRhLmR1cmF0aW9uO1xuICAgICAgICAgIHN0YXRlLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgICAgICAgIGZpcmUodmlkZW8sIFwiZW5kZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpcmUodmlkZW8sIFwidGltZXVwZGF0ZVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaWR4ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChzdGF0ZS5jdXJyZW50VGltZSAqIHN0YXRlLm1ldGEuZnBzKSk7XG4gICAgaWYgKGlkeCA9PT0gc3RhdGUubGFzdERyYXduSWR4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHBzLnB1c2gocGFpbnQoaG9vaywgdmlkZW8sIHN0YXRlLCBpZHgpKTtcbiAgfSk7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgeyBTQ0hFTUUsIHR5cGUgVmlkZW9DYWNoZSwgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLy8gUGVyLXNlc3Npb24gYml0bWFwIGNhY2hlOiBmZXRjaGVzIFJHQkEgZnJhbWVzIGZyb20gdGhlIGZyYW1lIHByb3RvY29sLCBkZWR1cGVzIGluLWZsaWdodCwgZXZpY3RzIGJlaGluZCByZWFkZXJzLlxuZXhwb3J0IGNsYXNzIEZyYW1lQ2FjaGUge1xuICBwcml2YXRlIF9jYWNoZXMgPSBuZXcgTWFwPHN0cmluZywgVmlkZW9DYWNoZT4oKTtcblxuICBjYWNoZU9mKGlkOiBzdHJpbmcpOiBWaWRlb0NhY2hlIHtcbiAgICBsZXQgYyA9IHRoaXMuX2NhY2hlcy5nZXQoaWQpO1xuICAgIGlmICghYykge1xuICAgICAgYyA9IHsgYml0bWFwczogbmV3IE1hcCgpLCBpbkZsaWdodDogbmV3IE1hcCgpLCByZWFkZXJzOiBuZXcgTWFwKCkgfTtcbiAgICAgIHRoaXMuX2NhY2hlcy5zZXQoaWQsIGMpO1xuICAgIH1cbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIGZldGNoKHN0YXRlOiBWaWRlb1N0YXRlLCBpZHg6IG51bWJlcik6IFByb21pc2U8SW1hZ2VCaXRtYXAgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBtZXRhID0gc3RhdGUubWV0YTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgY29uc3QgYyA9IHRoaXMuY2FjaGVPZihtZXRhLmlkKTtcbiAgICBjb25zdCBleGlzdGluZyA9IGMuaW5GbGlnaHQuZ2V0KGlkeCk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIGNvbnN0IGNhY2hlZCA9IGMuYml0bWFwcy5nZXQoaWR4KTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNhY2hlZCk7XG4gICAgfVxuICAgIGNvbnN0IHcgPSBtZXRhLmZyYW1lV2lkdGg7XG4gICAgY29uc3QgaCA9IG1ldGEuZnJhbWVIZWlnaHQ7XG4gICAgY29uc3QgcCA9IGZldGNoKGAke1NDSEVNRX1mcmFtZT9pZD0ke21ldGEuaWR9JmlkeD0ke2lkeH1gKVxuICAgICAgLnRoZW4oKHIpID0+IChyLm9rID8gci5hcnJheUJ1ZmZlcigpIDogdW5kZWZpbmVkKSlcbiAgICAgIC50aGVuKChidWYpID0+XG4gICAgICAgIGJ1ZiAmJiBidWYuYnl0ZUxlbmd0aCA9PT0gdyAqIGggKiA0XG4gICAgICAgICAgPyBjcmVhdGVJbWFnZUJpdG1hcChuZXcgSW1hZ2VEYXRhKG5ldyBVaW50OENsYW1wZWRBcnJheShidWYpLCB3LCBoKSlcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIClcbiAgICAgIC50aGVuKChibSkgPT4ge1xuICAgICAgICBjLmluRmxpZ2h0LmRlbGV0ZShpZHgpO1xuICAgICAgICBpZiAoYm0pIHtcbiAgICAgICAgICBjLmJpdG1hcHMuc2V0KGlkeCwgYm0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBibTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICBjLmluRmxpZ2h0LmRlbGV0ZShpZHgpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG4gICAgYy5pbkZsaWdodC5zZXQoaWR4LCBwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIHByZWZldGNoKHN0YXRlOiBWaWRlb1N0YXRlLCBmcm9tSWR4OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRhID0gc3RhdGUubWV0YTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWF4SWR4ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChtZXRhLmR1cmF0aW9uICogbWV0YS5mcHMpKTtcbiAgICBmb3IgKGxldCBpID0gZnJvbUlkeDsgaSA8IGZyb21JZHggKyBjb3VudDsgaSsrKSB7XG4gICAgICBpZiAoaSA8IDEgfHwgaSA+IG1heElkeCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZvaWQgdGhpcy5mZXRjaChzdGF0ZSwgaSk7XG4gICAgfVxuICB9XG5cbiAgZXZpY3QoYzogVmlkZW9DYWNoZSk6IHZvaWQge1xuICAgIGxldCBtaW5JZHggPSBJbmZpbml0eTtcbiAgICBjLnJlYWRlcnMuZm9yRWFjaCgoaWR4KSA9PiB7XG4gICAgICBpZiAoaWR4IDwgbWluSWR4KSB7XG4gICAgICAgIG1pbklkeCA9IGlkeDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtaW5JZHgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZsb29yID0gbWluSWR4IC0gMjtcbiAgICBjLmJpdG1hcHMuZm9yRWFjaCgoYm0sIGlkeCkgPT4ge1xuICAgICAgaWYgKGlkeCA8IGZsb29yKSB7XG4gICAgICAgIGJtLmNsb3NlKCk7XG4gICAgICAgIGMuYml0bWFwcy5kZWxldGUoaWR4KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIERyb3AgYSByZWFkZXI7IHdoZW4gdGhlIGxhc3QgbGVhdmVzLCBjbG9zZSBiaXRtYXBzIGFuZCB0ZWxsIHRoZSBzZXJ2ZXIgdG8gcmVsZWFzZSB0aGUgZGVjb2RlIHNlc3Npb24uXG4gIHJlbGVhc2UoaWQ6IHN0cmluZywgc3RhdGU6IFZpZGVvU3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBjID0gdGhpcy5fY2FjaGVzLmdldChpZCk7XG4gICAgaWYgKCFjKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGMucmVhZGVycy5kZWxldGUoc3RhdGUpO1xuICAgIGlmIChjLnJlYWRlcnMuc2l6ZSA+IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYy5iaXRtYXBzLmZvckVhY2goKGJtKSA9PiB7XG4gICAgICBibS5jbG9zZSgpO1xuICAgIH0pO1xuICAgIHRoaXMuX2NhY2hlcy5kZWxldGUoaWQpO1xuICAgIGZldGNoKGAke1NDSEVNRX1jbG9zZT9pZD0ke2lkfWAsIHsga2VlcGFsaXZlOiB0cnVlIH0pO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgdHlwZSB7IFZpZGVvSG9vayB9IGZyb20gXCIuL2hvb2tcIjtcbmltcG9ydCB7IHR5cGUgRnJhbWVDYiwgZmlyZSwgdGltZVJhbmdlcywgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLy8gT3ZlcnJpZGUgdGhlIEhUTUxNZWRpYUVsZW1lbnQgc3VyZmFjZSBmb3IgaG9va2VkIDx2aWRlbz47IHVuaG9va2VkIGVsZW1lbnRzIGZhbGwgdGhyb3VnaCB0byBuYXRpdmUuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbE1lZGlhU2hpbShob29rOiBWaWRlb0hvb2spOiB2b2lkIHtcbiAgY29uc3QgSFZFID0gSFRNTFZpZGVvRWxlbWVudC5wcm90b3R5cGU7XG4gIGNvbnN0IE1FRElBID0gSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGU7XG4gIGNvbnN0IG1kZXNjID0gKHA6IHN0cmluZykgPT4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVkUsIHApIHx8IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTUVESUEsIHApO1xuICBjb25zdCBjdERlc2MgPSBtZGVzYyhcImN1cnJlbnRUaW1lXCIpO1xuICBjb25zdCBzcmNEZXNjID0gbWRlc2MoXCJzcmNcIik7XG4gIGNvbnN0IHJhdGVEZXNjID0gbWRlc2MoXCJwbGF5YmFja1JhdGVcIik7XG4gIGNvbnN0IG9yaWdQYXVzZSA9IEhWRS5wYXVzZTtcbiAgY29uc3Qgb3JpZ1JWRkMgPSBIVkUucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjaztcbiAgY29uc3Qgb3JpZ0NhbmNlbFJWRkMgPSBIVkUuY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrO1xuICBjb25zdCBvcmlnUXVhbGl0eSA9IEhWRS5nZXRWaWRlb1BsYXliYWNrUXVhbGl0eTtcbiAgY29uc3Qgb3JpZ0xvYWQgPSBIVkUubG9hZDtcbiAgY29uc3Qgc2Vzc2lvbnMgPSBob29rLnNlc3Npb25zO1xuXG4gIC8vIFNlc3Npb24tYmFja2VkIHJlYWQtb25seSBwcm9wZXJ0eSB3aXRoIG5hdGl2ZSBmYWxsYmFjayB3aGVuIHRoZSBlbGVtZW50IGlzbid0IGhvb2tlZC5cbiAgY29uc3QgZGVmID0gKHByb3A6IHN0cmluZywgcGljazogKHM6IFZpZGVvU3RhdGUpID0+IHVua25vd24pID0+IHtcbiAgICBjb25zdCBuYXRpdmVHZXQgPSBtZGVzYyhwcm9wKT8uZ2V0O1xuICAgIGlmICghbmF0aXZlR2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG1lZGlhX3NoaW06IG5vIG5hdGl2ZSBnZXR0ZXIgZm9yICR7cHJvcH1gKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgcHJvcCwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHMgPyBwaWNrKHMpIDogbmF0aXZlR2V0LmNhbGwodGhpcyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xuICBkZWYoXCJwYXVzZWRcIiwgKHMpID0+IHMucGF1c2VkKTtcbiAgZGVmKFwiZW5kZWRcIiwgKHMpID0+IHMuZW5kZWQpO1xuICBkZWYoXCJyZWFkeVN0YXRlXCIsIChzKSA9PiBzLnJlYWR5U3RhdGUpO1xuICBkZWYoXCJuZXR3b3JrU3RhdGVcIiwgKHMpID0+IHMubmV0d29ya1N0YXRlKTtcbiAgZGVmKFwiZXJyb3JcIiwgKHMpID0+IHMuZXJyb3IgPz8gbnVsbCk7XG4gIGRlZihcInNlZWtpbmdcIiwgKHMpID0+IHMuc2Vla2luZyk7XG4gIGRlZihcImJ1ZmZlcmVkXCIsIChzKSA9PiB0aW1lUmFuZ2VzKHMubWV0YSA/IHMubWV0YS5kdXJhdGlvbiA6IDApKTtcbiAgZGVmKFwic2Vla2FibGVcIiwgKHMpID0+IHRpbWVSYW5nZXMocy5tZXRhID8gcy5tZXRhLmR1cmF0aW9uIDogMCkpO1xuICBkZWYoXCJwbGF5ZWRcIiwgKHMpID0+IHRpbWVSYW5nZXMocy5tYXhSZWFjaGVkKSk7XG5cbiAgSFZFLnBsYXkgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICByZXR1cm4gaG9vay5hdHRhY2godGhpcykudGhlbigobnMpID0+IHtcbiAgICAgICAgaWYgKG5zKSB7XG4gICAgICAgICAgaG9vay5yZXN1bWUodGhpcywgbnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaG9vay5yZXN1bWUodGhpcywgcyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9O1xuICBIVkUucGF1c2UgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICBvcmlnUGF1c2UuY2FsbCh0aGlzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFzLnBhdXNlZCkge1xuICAgICAgcy5wYXVzZWQgPSB0cnVlO1xuICAgICAgZmlyZSh0aGlzLCBcInBhdXNlXCIpO1xuICAgIH1cbiAgfTtcbiAgaWYgKGN0RGVzYz8uZ2V0ICYmIGN0RGVzYy5zZXQpIHtcbiAgICBjb25zdCBjdEdldCA9IGN0RGVzYy5nZXQ7XG4gICAgY29uc3QgY3RTZXQgPSBjdERlc2Muc2V0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsIFwiY3VycmVudFRpbWVcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHMgPyBzLmN1cnJlbnRUaW1lIDogY3RHZXQuY2FsbCh0aGlzKTtcbiAgICAgIH0sXG4gICAgICBzZXQodGhpczogSFRNTFZpZGVvRWxlbWVudCwgdDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgICAgIGlmICghcykge1xuICAgICAgICAgIGN0U2V0LmNhbGwodGhpcywgdCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGR1ciA9IHMubWV0YSA/IHMubWV0YS5kdXJhdGlvbiA6IHQ7XG4gICAgICAgIHMuY3VycmVudFRpbWUgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0LCBkdXIpKTtcbiAgICAgICAgcy5tYXhSZWFjaGVkID0gTWF0aC5tYXgocy5tYXhSZWFjaGVkLCBzLmN1cnJlbnRUaW1lKTtcbiAgICAgICAgaWYgKHMuY3VycmVudFRpbWUgPCBkdXIpIHtcbiAgICAgICAgICBzLmVuZGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcy5zZWVraW5nID0gdHJ1ZTtcbiAgICAgICAgZmlyZSh0aGlzLCBcInNlZWtpbmdcIik7XG4gICAgICAgIHMuc2Vla2luZyA9IGZhbHNlO1xuICAgICAgICBmaXJlKHRoaXMsIFwic2Vla2VkXCIpO1xuICAgICAgICBmaXJlKHRoaXMsIFwidGltZXVwZGF0ZVwiKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgaWYgKHJhdGVEZXNjPy5zZXQpIHtcbiAgICBjb25zdCByYXRlU2V0ID0gcmF0ZURlc2Muc2V0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsIFwicGxheWJhY2tSYXRlXCIsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogcmF0ZURlc2MuZ2V0LFxuICAgICAgc2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIHI6IG51bWJlcikge1xuICAgICAgICByYXRlU2V0LmNhbGwodGhpcywgcik7XG4gICAgICAgIGlmIChzZXNzaW9ucy5oYXModGhpcykpIHtcbiAgICAgICAgICBmaXJlKHRoaXMsIFwicmF0ZWNoYW5nZVwiKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBIVkUucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50LCBjYik6IG51bWJlciB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIHJldHVybiBvcmlnUlZGQy5jYWxsKHRoaXMsIGNiKTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSArK2hvb2sucnZmY1NlcTtcbiAgICBzLnJ2ZmMuc2V0KGlkLCBjYiBhcyBGcmFtZUNiKTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIEhWRS5jYW5jZWxWaWRlb0ZyYW1lQ2FsbGJhY2sgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCwgaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICBvcmlnQ2FuY2VsUlZGQy5jYWxsKHRoaXMsIGlkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcy5ydmZjLmRlbGV0ZShpZCk7XG4gIH07XG4gIEhWRS5nZXRWaWRlb1BsYXliYWNrUXVhbGl0eSA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIHJldHVybiBvcmlnUXVhbGl0eS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRpb25UaW1lOiBwZXJmb3JtYW5jZS5ub3coKSxcbiAgICAgIHRvdGFsVmlkZW9GcmFtZXM6IHMucHJlc2VudGVkRnJhbWVzLFxuICAgICAgZHJvcHBlZFZpZGVvRnJhbWVzOiAwLFxuICAgICAgY29ycnVwdGVkVmlkZW9GcmFtZXM6IDAsXG4gICAgfSBhcyBWaWRlb1BsYXliYWNrUXVhbGl0eTtcbiAgfTtcbiAgSFZFLmxvYWQgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGlmICghc2Vzc2lvbnMuaGFzKHRoaXMpKSB7XG4gICAgICByZXR1cm4gb3JpZ0xvYWQuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgaG9vay5kZXRhY2godGhpcyk7XG4gICAgZmlyZSh0aGlzLCBcImVtcHRpZWRcIik7XG4gICAgdGhpcy5fX3B1cExhc3RTcmMgPSB1bmRlZmluZWQ7XG4gICAgaG9vay5hdHRhY2godGhpcyk7XG4gIH07XG4gIGlmIChzcmNEZXNjPy5zZXQpIHtcbiAgICBjb25zdCBzcmNTZXQgPSBzcmNEZXNjLnNldDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFZFLCBcInNyY1wiLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IHNyY0Rlc2MuZ2V0LFxuICAgICAgc2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIHY6IHN0cmluZykge1xuICAgICAgICBzcmNTZXQuY2FsbCh0aGlzLCB2KTtcbiAgICAgICAgaG9vay5vblNyY0NoYW5nZSh0aGlzKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmltcG9ydCB0eXBlIHsgVmlkZW9Ib29rIH0gZnJvbSBcIi4vaG9va1wiO1xuaW1wb3J0IHtcbiAgQUhFQUQsXG4gIGZpcmUsXG4gIEhBVkVfRU5PVUdIX0RBVEEsXG4gIEhBVkVfTUVUQURBVEEsXG4gIEhBVkVfTk9USElORyxcbiAgTUVESUFfRVJSX0RFQ09ERSxcbiAgTUVESUFfRVJSX05FVFdPUkssXG4gIHR5cGUgTWVkaWFFcnJvckxpa2UsXG4gIE5FVFdPUktfRU1QVFksXG4gIE5FVFdPUktfSURMRSxcbiAgTkVUV09SS19MT0FESU5HLFxuICBORVRXT1JLX05PX1NPVVJDRSxcbiAgU0NIRU1FLFxuICBUQUcsXG4gIHR5cGUgVmlkZW9NZXRhLFxuICB0eXBlIFZpZGVvU3RhdGUsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNoQXJncyB7XG4gIHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50O1xuICBzdGF0ZTogVmlkZW9TdGF0ZTtcbiAgc3JjOiBzdHJpbmc7XG4gIGJpcnRoTXM6IG51bWJlcjtcbiAgbmF0aXZlOiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV3VmlkZW9TdGF0ZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgY3Y6IEhUTUxDYW52YXNFbGVtZW50KTogVmlkZW9TdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgbWV0YTogdW5kZWZpbmVkLFxuICAgIGN2LFxuICAgIGN0eDogY3YuZ2V0Q29udGV4dChcIjJkXCIpISxcbiAgICBwYXVzZWQ6ICEodmlkZW8uYXV0b3BsYXkgfHwgIXZpZGVvLnBhdXNlZCksXG4gICAgY3VycmVudFRpbWU6IDAsXG4gICAgZW5kZWQ6IGZhbHNlLFxuICAgIGxhc3REcmF3bklkeDogLTEsXG4gICAgZGVhZDogZmFsc2UsXG4gICAgb2JqZWN0Rml0OiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh2aWRlbykub2JqZWN0Rml0IHx8IFwiZmlsbFwiLFxuICAgIHJlYWR5U3RhdGU6IEhBVkVfTk9USElORyxcbiAgICBuZXR3b3JrU3RhdGU6IE5FVFdPUktfRU1QVFksXG4gICAgc2Vla2luZzogZmFsc2UsXG4gICAgd2FpdGluZzogZmFsc2UsXG4gICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICBwcmVzZW50ZWRGcmFtZXM6IDAsXG4gICAgbWF4UmVhY2hlZDogMCxcbiAgICBydmZjOiBuZXcgTWFwKCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZhaWxPcGVuKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzdGF0ZTogVmlkZW9TdGF0ZSwgZXJyb3I6IE1lZGlhRXJyb3JMaWtlKTogdW5kZWZpbmVkIHtcbiAgc3RhdGUuZGVhZCA9IHRydWU7XG4gIHN0YXRlLmVycm9yID0gZXJyb3I7XG4gIHN0YXRlLm5ldHdvcmtTdGF0ZSA9IE5FVFdPUktfTk9fU09VUkNFO1xuICBjb25zb2xlLmVycm9yKFRBRywgYCR7ZXJyb3IubWVzc2FnZX0gc3JjPSR7dmlkZW8uc3JjIHx8IHZpZGVvLmN1cnJlbnRTcmN9YCk7XG4gIGZpcmUodmlkZW8sIFwiZXJyb3JcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIE9wZW4gdGhlIGZyYW1lIHNlcnZlciBzZXNzaW9uLCB0aGVuIGVtaXQgdGhlIEhUTUxNZWRpYUVsZW1lbnQgbG9hZCBzZXF1ZW5jZSAocmVhZHlTdGF0ZS9uZXR3b3JrU3RhdGUgKyBldmVudHMpLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5TZXNzaW9uKGhvb2s6IFZpZGVvSG9vaywgYXJnczogQXR0YWNoQXJncyk6IFByb21pc2U8VmlkZW9TdGF0ZSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IHZpZGVvLCBzdGF0ZSwgc3JjLCBiaXJ0aE1zLCBuYXRpdmUgfSA9IGFyZ3M7XG4gIGNvbnN0IGZwcyA9IE51bWJlci5wYXJzZUludCh2aWRlby5kYXRhc2V0W1wicHVwRnBzXCJdIHx8IFwiMzBcIiwgMTApO1xuICBzdGF0ZS5uZXR3b3JrU3RhdGUgPSBORVRXT1JLX0xPQURJTkc7XG4gIGZpcmUodmlkZW8sIFwibG9hZHN0YXJ0XCIpO1xuICBsZXQgcmVzOiBSZXNwb25zZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBxID0gbmF0aXZlID8gXCJcIiA6IGAmdz0ke3N0YXRlLmN2LndpZHRofSZoPSR7c3RhdGUuY3YuaGVpZ2h0fSZmaXQ9JHtlbmNvZGVVUklDb21wb25lbnQoc3RhdGUub2JqZWN0Rml0KX1gO1xuICAgIHJlcyA9IGF3YWl0IGZldGNoKGAke1NDSEVNRX1vcGVuP3NyYz0ke2VuY29kZVVSSUNvbXBvbmVudChzcmMpfSZmcHM9JHtmcHN9JHtxfWApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhaWxPcGVuKHZpZGVvLCBzdGF0ZSwge1xuICAgICAgY29kZTogTUVESUFfRVJSX05FVFdPUkssXG4gICAgICBtZXNzYWdlOiBgb3BlbiBmYWlsZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWAsXG4gICAgfSk7XG4gIH1cbiAgaWYgKGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKSAhPT0gc3RhdGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghcmVzLm9rKSB7XG4gICAgcmV0dXJuIGZhaWxPcGVuKHZpZGVvLCBzdGF0ZSwge1xuICAgICAgY29kZTogTUVESUFfRVJSX0RFQ09ERSxcbiAgICAgIG1lc3NhZ2U6IGBvcGVuICR7cmVzLnN0YXR1c306ICR7YXdhaXQgcmVzLnRleHQoKX1gLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1ldGEgPSAoYXdhaXQgcmVzLmpzb24oKSkgYXMgVmlkZW9NZXRhO1xuICBpZiAoaG9vay5zZXNzaW9ucy5nZXQodmlkZW8pICE9PSBzdGF0ZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgc3RhdGUubWV0YSA9IG1ldGE7XG4gIHN0YXRlLmN1cnJlbnRUaW1lID0gc3RhdGUucGF1c2VkID8gMCA6IE1hdGgubWF4KDAsIChob29rLmN1cnJNcyAtIGJpcnRoTXMpIC8gMTAwMCk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgXCJ2aWRlb1dpZHRoXCIsIHsgdmFsdWU6IG1ldGEud2lkdGgsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZGVvLCBcInZpZGVvSGVpZ2h0XCIsIHsgdmFsdWU6IG1ldGEuaGVpZ2h0LCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgXCJkdXJhdGlvblwiLCB7IHZhbHVlOiBtZXRhLmR1cmF0aW9uLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIHN0YXRlLnJlYWR5U3RhdGUgPSBIQVZFX01FVEFEQVRBO1xuICBmaXJlKHZpZGVvLCBcImR1cmF0aW9uY2hhbmdlXCIpO1xuICBmaXJlKHZpZGVvLCBcImxvYWRlZG1ldGFkYXRhXCIpO1xuICBzdGF0ZS5yZWFkeVN0YXRlID0gSEFWRV9FTk9VR0hfREFUQTtcbiAgZmlyZSh2aWRlbywgXCJsb2FkZWRkYXRhXCIpO1xuICBmaXJlKHZpZGVvLCBcImNhbnBsYXlcIik7XG4gIGZpcmUodmlkZW8sIFwiY2FucGxheXRocm91Z2hcIik7XG4gIHN0YXRlLm5ldHdvcmtTdGF0ZSA9IE5FVFdPUktfSURMRTtcbiAgZmlyZSh2aWRlbywgXCJzdXNwZW5kXCIpO1xuICBpZiAoIXN0YXRlLnBhdXNlZCkge1xuICAgIGZpcmUodmlkZW8sIFwicGxheVwiKTtcbiAgICBmaXJlKHZpZGVvLCBcInBsYXlpbmdcIik7XG4gIH1cbiAgaG9vay5jYWNoZS5wcmVmZXRjaChzdGF0ZSwgMSwgQUhFQUQpO1xuICByZXR1cm4gc3RhdGU7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgeyBhZHZhbmNlIH0gZnJvbSBcIi4vZHJpdmVyXCI7XG5pbXBvcnQgeyBGcmFtZUNhY2hlIH0gZnJvbSBcIi4vZnJhbWVfY2FjaGVcIjtcbmltcG9ydCB7IGluc3RhbGxNZWRpYVNoaW0gfSBmcm9tIFwiLi9tZWRpYV9zaGltXCI7XG5pbXBvcnQgeyBzZXR1cENhbnZhcyB9IGZyb20gXCIuL292ZXJsYXlcIjtcbmltcG9ydCB7IG5ld1ZpZGVvU3RhdGUsIG9wZW5TZXNzaW9uIH0gZnJvbSBcIi4vc2Vzc2lvblwiO1xuaW1wb3J0IHsgZmlyZSwgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX3B1cF92aWRlb19fPzogeyBhZHZhbmNlOiAobXM6IG51bWJlcikgPT4gUHJvbWlzZTx1bmtub3duPjsgcmVhZHk6ICgpID0+IFByb21pc2U8dm9pZD4gfTtcbiAgfVxuICBpbnRlcmZhY2UgSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgX19wdXBMYXN0U3JjPzogc3RyaW5nO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb0hvb2sge1xuICByZWFkb25seSBzZXNzaW9ucyA9IG5ldyBXZWFrTWFwPEhUTUxWaWRlb0VsZW1lbnQsIFZpZGVvU3RhdGU+KCk7XG4gIHJlYWRvbmx5IGF0dGFjaGluZyA9IG5ldyBXZWFrTWFwPEhUTUxWaWRlb0VsZW1lbnQsIFByb21pc2U8VmlkZW9TdGF0ZSB8IHVuZGVmaW5lZD4+KCk7XG4gIC8vIEVudW1lcmFibGUgbWlycm9yIG9mIGluLWZsaWdodCBvcGVucyAoV2Vha01hcCBpc24ndCBpdGVyYWJsZSkgc28gcmVhZHkoKSBjYW4gYXdhaXQgdGhlbS5cbiAgcmVhZG9ubHkgb3BlbmluZyA9IG5ldyBTZXQ8UHJvbWlzZTx1bmtub3duPj4oKTtcbiAgcmVhZG9ubHkgY2FjaGUgPSBuZXcgRnJhbWVDYWNoZSgpO1xuICBydmZjU2VxID0gMDtcbiAgY3Vyck1zID0gMDtcbiAgcHJpdmF0ZSBfbGFzdFNuYXBzaG90ID0gbmV3IFdlYWtNYXA8SFRNTFZpZGVvRWxlbWVudCwgT2Zmc2NyZWVuQ2FudmFzPigpO1xuXG4gIGluc3RhbGwoKTogdm9pZCB7XG4gICAgaW5zdGFsbE1lZGlhU2hpbSh0aGlzKTtcbiAgICB0aGlzLnNjYW4oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0cykgPT4ge1xuICAgICAgZm9yIChjb25zdCBtIG9mIG11dHMpIHtcbiAgICAgICAgaWYgKG0udHlwZSA9PT0gXCJhdHRyaWJ1dGVzXCIgJiYgbS50YXJnZXQgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50ICYmIG0uYXR0cmlidXRlTmFtZSA9PT0gXCJzcmNcIikge1xuICAgICAgICAgIHRoaXMub25TcmNDaGFuZ2UobS50YXJnZXQpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIG0uYWRkZWROb2Rlcy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNjYW4obik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbS5yZW1vdmVkTm9kZXMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICAgIGlmIChuIGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5kZXRhY2gobik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KS5vYnNlcnZlKGRvY3VtZW50LCB7IHN1YnRyZWU6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZSwgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbXCJzcmNcIl0gfSk7XG4gICAgd2luZG93Ll9fcHVwX3ZpZGVvX18gPSB7IGFkdmFuY2U6IChtcykgPT4gYWR2YW5jZSh0aGlzLCBtcyksIHJlYWR5OiAoKSA9PiB0aGlzLnJlYWR5KCkgfTtcbiAgfVxuXG4gIGF0dGFjaCh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgbmF0aXZlID0gZmFsc2UpOiBQcm9taXNlPFZpZGVvU3RhdGUgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuc2Vzc2lvbnMuZ2V0KHZpZGVvKTtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZXhpc3RpbmcpO1xuICAgIH1cbiAgICBjb25zdCBwZW5kaW5nID0gdGhpcy5hdHRhY2hpbmcuZ2V0KHZpZGVvKTtcbiAgICBpZiAocGVuZGluZykge1xuICAgICAgcmV0dXJuIHBlbmRpbmc7XG4gICAgfVxuICAgIGNvbnN0IHNyYyA9IHZpZGVvLnNyYyB8fCB2aWRlby5jdXJyZW50U3JjO1xuICAgIGlmICghc3JjKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGlmICgvXihibG9iOnxkYXRhOnxtZWRpYXN0cmVhbTopL2kudGVzdChzcmMpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGNvbnN0IGN2ID0gc2V0dXBDYW52YXModmlkZW8sIHRoaXMuX2xhc3RTbmFwc2hvdC5nZXQodmlkZW8pKTtcbiAgICBjb25zdCBzdGF0ZSA9IG5ld1ZpZGVvU3RhdGUodmlkZW8sIGN2KTtcbiAgICB0aGlzLnNlc3Npb25zLnNldCh2aWRlbywgc3RhdGUpO1xuICAgIGNvbnN0IHAgPSBvcGVuU2Vzc2lvbih0aGlzLCB7IHZpZGVvLCBzdGF0ZSwgc3JjLCBiaXJ0aE1zOiB0aGlzLmN1cnJNcywgbmF0aXZlIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5hdHRhY2hpbmcuZGVsZXRlKHZpZGVvKTtcbiAgICAgIHRoaXMub3BlbmluZy5kZWxldGUocCk7XG4gICAgfSk7XG4gICAgdGhpcy5hdHRhY2hpbmcuc2V0KHZpZGVvLCBwKTtcbiAgICB0aGlzLm9wZW5pbmcuYWRkKHApO1xuICAgIHJldHVybiBwO1xuICB9XG5cbiAgLy8gQXdhaXQgb25seSB0aGUgb3BlbnMgaW4gZmxpZ2h0IHJpZ2h0IG5vdyDigJQgbmV2ZXIgY2hhc2UgbmV3bHktc3Bhd25lZCBvbmVzLCBvciBhIHJldHJ5aW5nIHBhZ2UgbG9vcHMgZm9yZXZlci5cbiAgYXN5bmMgcmVhZHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFsuLi50aGlzLm9wZW5pbmddKTtcbiAgfVxuXG4gIHJlc3VtZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgc3RhdGU6IFZpZGVvU3RhdGUpOiB2b2lkIHtcbiAgICBpZiAoIXN0YXRlLnBhdXNlZCAmJiAhc3RhdGUuZW5kZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RhdGUucGF1c2VkID0gZmFsc2U7XG4gICAgc3RhdGUuZW5kZWQgPSBmYWxzZTtcbiAgICBmaXJlKHZpZGVvLCBcInBsYXlcIik7XG4gICAgZmlyZSh2aWRlbywgXCJwbGF5aW5nXCIpO1xuICB9XG5cbiAgZGV0YWNoKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnNlc3Npb25zLmdldCh2aWRlbyk7XG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc3RhdGUubWV0YSkge1xuICAgICAgaWYgKHN0YXRlLmxhc3REcmF3bklkeCA+PSAwKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc25hcCA9IG5ldyBPZmZzY3JlZW5DYW52YXMoc3RhdGUuY3Yud2lkdGgsIHN0YXRlLmN2LmhlaWdodCk7XG4gICAgICAgICAgY29uc3Qgc2N0eCA9IHNuYXAuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgICAgIGlmICghc2N0eCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm8gMmQgY29udGV4dFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2N0eC5kcmF3SW1hZ2Uoc3RhdGUuY3YsIDAsIDApO1xuICAgICAgICAgIHRoaXMuX2xhc3RTbmFwc2hvdC5zZXQodmlkZW8sIHNuYXApO1xuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9XG4gICAgICB0aGlzLmNhY2hlLnJlbGVhc2Uoc3RhdGUubWV0YS5pZCwgc3RhdGUpO1xuICAgIH1cbiAgICBzdGF0ZS5jdi5yZW1vdmUoKTtcbiAgICB0aGlzLnNlc3Npb25zLmRlbGV0ZSh2aWRlbyk7XG4gICAgdGhpcy5hdHRhY2hpbmcuZGVsZXRlKHZpZGVvKTtcbiAgfVxuXG4gIG9uU3JjQ2hhbmdlKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc3JjID0gdmlkZW8uc3JjIHx8IHZpZGVvLmN1cnJlbnRTcmMgfHwgXCJcIjtcbiAgICBpZiAodmlkZW8uX19wdXBMYXN0U3JjID09PSBzcmMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmlkZW8uX19wdXBMYXN0U3JjID0gc3JjO1xuICAgIGlmICh0aGlzLnNlc3Npb25zLmhhcyh2aWRlbykpIHtcbiAgICAgIHRoaXMuZGV0YWNoKHZpZGVvKTtcbiAgICB9XG4gICAgdGhpcy5hdHRhY2godmlkZW8pO1xuICB9XG5cbiAgLy8gUmUtb3BlbiBhdCBuYXRpdmUgcmVzb2x1dGlvbiAodGhlIGVsZW1lbnQgb3V0Z3JldyB0aGUgZG93bnNjYWxlZCBkZWNvZGUpLCBwcmVzZXJ2aW5nIHBsYXliYWNrIHN0YXRlLlxuICByZWF0dGFjaCh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgc3RhdGU6IFZpZGVvU3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCB0ID0gc3RhdGUuY3VycmVudFRpbWU7XG4gICAgY29uc3QgcGF1c2VkID0gc3RhdGUucGF1c2VkO1xuICAgIGNvbnN0IGVuZGVkID0gc3RhdGUuZW5kZWQ7XG4gICAgdGhpcy5kZXRhY2godmlkZW8pO1xuICAgIHZvaWQgdGhpcy5hdHRhY2godmlkZW8sIHRydWUpLnRoZW4oKG5zKSA9PiB7XG4gICAgICBpZiAoIW5zKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5zLmN1cnJlbnRUaW1lID0gdDtcbiAgICAgIG5zLnBhdXNlZCA9IHBhdXNlZDtcbiAgICAgIG5zLmVuZGVkID0gZW5kZWQ7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNjYW4ocm9vdDogRWxlbWVudCB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJvb3QudGFnTmFtZSA9PT0gXCJWSURFT1wiKSB7XG4gICAgICB0aGlzLmF0dGFjaChyb290IGFzIEhUTUxWaWRlb0VsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAocm9vdC5xdWVyeVNlbGVjdG9yQWxsKSB7XG4gICAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ2aWRlb1wiKS5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgIHRoaXMuYXR0YWNoKHYpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsVmlkZW9Ib29rKCk6IHZvaWQge1xuICBpZiAod2luZG93Ll9fcHVwX3ZpZGVvX18pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbmV3IFZpZGVvSG9vaygpLmluc3RhbGwoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMjYuXG5cbmltcG9ydCB7IGluc3RhbGxUaWNrSG9vayB9IGZyb20gXCIuL2lmcmFtZV9ob29rXCI7XG5pbXBvcnQgeyBpbnN0YWxsVmlkZW9Ib29rIH0gZnJvbSBcIi4vdmlkZW8vaG9va1wiO1xuXG5pZiAod2luZG93LnNlbGYgIT09IHdpbmRvdy50b3ApIHtcbiAgaW5zdGFsbFRpY2tIb29rKCk7XG4gIGluc3RhbGxWaWRlb0hvb2soKTtcbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2lmcmFtZV9ob29rLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vb3ZlcmxheS50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3ZpZGVvL3R5cGVzLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vZHJpdmVyLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vZnJhbWVfY2FjaGUudHMiLCIuLi8uLi9zcmMvcnVudGltZS92aWRlby9tZWRpYV9zaGltLnRzIiwiLi4vLi4vc3JjL3J1bnRpbWUvdmlkZW8vc2Vzc2lvbi50cyIsIi4uLy4uL3NyYy9ydW50aW1lL3ZpZGVvL2hvb2sudHMiLCIuLi8uLi9zcmMvcnVudGltZS9pZnJhbWVfcHJlbG9hZC50cyJdLCJuYW1lcyI6WyJpbnN0YWxsVGlja0hvb2siLCJSRUFMX0RBVEUiLCJkYXRlT3JpZ2luIiwiY3Vyck1zIiwidGltZU9mZnNldCIsInJhZlF1ZXVlIiwidGltZXJzIiwibmV4dElkIiwidGljayIsIkZha2VEYXRlIiwiYXJncyIsImNiIiwiaWQiLCJyIiwiZGVsYXkiLCJkIiwic2FmZUludm9rZVRpbWVyIiwiZm4iLCJlIiwic2FmZUludm9rZVJhZiIsInRzIiwiYW5pbVN0YXRlIiwic3luY0FuaW1hdGlvbnMiLCJtcyIsImFuaW1zIiwiYSIsInN0YXRlIiwicmF0ZSIsInMiLCJjdDAiLCJwcm9jZXNzIiwidGltZXN0YW1wTXMiLCJ0IiwicmFmcyIsIk1JUlJPUl9QUk9QUyIsImNzc0Nhc2UiLCJjIiwic3luY092ZXJsYXkiLCJ2aWRlbyIsImN2IiwiY3MiLCJwIiwidiIsInZyIiwiZHByIiwidyIsImgiLCJzZXR1cENhbnZhcyIsInNuYXAiLCJmaXRSZWN0Iiwic3JjVyIsInNyY0giLCJkc3RXIiwiZHN0SCIsImZpdCIsInNjIiwiayIsIndzIiwiaHMiLCJzYzIiLCJ3czIiLCJoczIiLCJTQ0hFTUUiLCJUQUciLCJ0aW1lUmFuZ2VzIiwiZW5kIiwiZmlyZSIsImVsIiwidHlwZSIsImZpcmVGcmFtZUNhbGxiYWNrcyIsImNicyIsIm5vdyIsIm1ldGEiLCJwYWludCIsImhvb2siLCJpZHgiLCJibSIsImZldGNoZWQiLCJhZHZhbmNlIiwiZHQiLCJwcyIsIkZyYW1lQ2FjaGUiLCJleGlzdGluZyIsImNhY2hlZCIsImJ1ZiIsImZyb21JZHgiLCJjb3VudCIsIm1heElkeCIsImkiLCJtaW5JZHgiLCJmbG9vciIsImluc3RhbGxNZWRpYVNoaW0iLCJIVkUiLCJNRURJQSIsIm1kZXNjIiwiY3REZXNjIiwic3JjRGVzYyIsInJhdGVEZXNjIiwib3JpZ1BhdXNlIiwib3JpZ1JWRkMiLCJvcmlnQ2FuY2VsUlZGQyIsIm9yaWdRdWFsaXR5Iiwib3JpZ0xvYWQiLCJzZXNzaW9ucyIsImRlZiIsInByb3AiLCJwaWNrIiwibmF0aXZlR2V0IiwibnMiLCJjdEdldCIsImN0U2V0IiwiZHVyIiwicmF0ZVNldCIsInNyY1NldCIsIm5ld1ZpZGVvU3RhdGUiLCJmYWlsT3BlbiIsImVycm9yIiwib3BlblNlc3Npb24iLCJzcmMiLCJiaXJ0aE1zIiwibmF0aXZlIiwiZnBzIiwicmVzIiwicSIsIm5hdGl2ZU1ldGEiLCJWaWRlb0hvb2siLCJtdXRzIiwibSIsIm4iLCJwZW5kaW5nIiwic2N0eCIsInBhdXNlZCIsImVuZGVkIiwicm9vdCIsImluc3RhbGxWaWRlb0hvb2siXSwibWFwcGluZ3MiOiJ1REF3Qk8sU0FBU0EsR0FBd0IsQ0FDdEMsR0FBSSxPQUFPLFlBQUEsQ0FDVCxPQUdGLElBQU1DLENBQUFBLENBQVksSUFBQSxDQUNaQyxDQUFBQSxDQUFhRCxDQUFBQSxDQUFVLEtBQUksQ0FDN0JFLENBQUFBLENBQVMsRUFDVEMsQ0FBQUEsQ0FBYSxDQUFBLENBQ2JDLEVBQXVCLEVBQUMsQ0FDdEJDLENBQUFBLENBQTRDLEdBQzlDQyxDQUFBQSxDQUFTLENBQUEsQ0FDUEMsRUFBTyxLQUNYSixDQUFBQSxFQUFjLElBQ1BBLENBQUFBLENBQUFBLENBR1QsU0FBU0ssS0FBMkJDLENBQUFBLENBQWdD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Q0FBSU4sQ0FBQUEsQ0FBTSxXQUFBLENBQ1Z5RyxFQUFTekcsQ0FBQUEsQ0FBTSxNQUFBLENBQ2YwRyxFQUFRMUcsQ0FBQUEsQ0FBTSxLQUFBLENBQ3BCLEtBQUssTUFBQSxDQUFPWSxDQUFLLENBQUEsQ0FDWixJQUFBLENBQUssT0FBT0EsQ0FBQUEsQ0FBTyxJQUFJLEVBQUUsSUFBQSxDQUFNc0UsQ0FBQUEsRUFBTyxDQUNwQ0EsQ0FBQUEsR0FHTEEsQ0FBQUEsQ0FBRyxZQUFjNUUsQ0FBQUEsQ0FDakI0RSxDQUFBQSxDQUFHLE9BQVN1QixDQUFBQSxDQUNadkIsQ0FBQUEsQ0FBRyxNQUFRd0IsQ0FBQUEsRUFDYixDQUFDLEVBQ0gsQ0FFUSxJQUFBLENBQUtDLENBQUFBLENBQTRCLENBQ2xDQSxJQUdEQSxDQUFBQSxDQUFLLE9BQUEsR0FBWSxTQUNuQixJQUFBLENBQUssTUFBQSxDQUFPQSxDQUF3QixDQUFBLENBRWxDQSxDQUFBQSxDQUFLLGtCQUNQQSxDQUFBQSxDQUFLLGdCQUFBLENBQWlCLE9BQU8sQ0FBQSxDQUFFLE9BQUEsQ0FBUzNGLEdBQU0sQ0FDNUMsSUFBQSxDQUFLLE9BQU9BLENBQUMsRUFDZixDQUFDLENBQUEsRUFFTCxDQUNGLENBQUEsQ0FFTyxTQUFTNEYsR0FBeUIsQ0FDbkMsTUFBQSxDQUFPLGVBR1gsSUFBSVQsQ0FBQUEsR0FBWSxPQUFBLEdBQ2xCLENDbEtJLE1BQUEsQ0FBTyxJQUFBLEdBQVMsT0FBTyxHQUFBLEdBQ3pCN0gsQ0FBQUEsR0FDQXNJLENBQUFBLEVBQWlCLENBQUEiLCJmaWxlIjoiaWZyYW1lX3ByZWxvYWQuY2pzIiwic291cmNlc0NvbnRlbnQiOlsiZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX3B1cF90aWNrX18/OiB7IHByb2Nlc3M6IChtczogbnVtYmVyKSA9PiB2b2lkIH07XG4gIH1cbn1cblxuaW50ZXJmYWNlIFRpbWVyIHtcbiAgdHlwZTogXCJ0aW1lb3V0XCIgfCBcImludGVydmFsXCI7XG4gIGNiOiBUaW1lckhhbmRsZXI7XG4gIGRlbGF5OiBudW1iZXI7XG4gIG5leHQ6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFJhZkVudHJ5IHtcbiAgaWQ6IG51bWJlcjtcbiAgY2I6IEZyYW1lUmVxdWVzdENhbGxiYWNrO1xufVxuXG5pbnRlcmZhY2UgQW5pbUVudHJ5IHtcbiAgc3RhcnRNczogbnVtYmVyO1xuICBwYXVzZWRBY2N1bTogbnVtYmVyO1xuICBwYXVzZWRBdDogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbFRpY2tIb29rKCk6IHZvaWQge1xuICBpZiAod2luZG93Ll9fcHVwX3RpY2tfXykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IFJFQUxfREFURSA9IERhdGU7XG4gIGNvbnN0IGRhdGVPcmlnaW4gPSBSRUFMX0RBVEUubm93KCk7XG4gIGxldCBjdXJyTXMgPSAwO1xuICBsZXQgdGltZU9mZnNldCA9IDA7XG4gIGxldCByYWZRdWV1ZTogUmFmRW50cnlbXSA9IFtdO1xuICBjb25zdCB0aW1lcnM6IFJlY29yZDxudW1iZXIsIFRpbWVyIHwgdW5kZWZpbmVkPiA9IHt9O1xuICBsZXQgbmV4dElkID0gMTtcbiAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICB0aW1lT2Zmc2V0ICs9IDAuMDE7XG4gICAgcmV0dXJuIHRpbWVPZmZzZXQ7XG4gIH07XG5cbiAgZnVuY3Rpb24gRmFrZURhdGUodGhpczogdW5rbm93biwgLi4uYXJnczogdW5rbm93bltdKTogRGF0ZSB8IHN0cmluZyB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEZha2VEYXRlKSkge1xuICAgICAgcmV0dXJuIG5ldyBSRUFMX0RBVEUoZGF0ZU9yaWdpbiArIGN1cnJNcykudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3MubGVuZ3RoXG4gICAgICA/IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoUkVBTF9EQVRFLCBbbnVsbCwgLi4uYXJnc10pKSgpXG4gICAgICA6IG5ldyBSRUFMX0RBVEUoZGF0ZU9yaWdpbiArIGN1cnJNcyArIHRpY2soKSk7XG4gIH1cbiAgRmFrZURhdGUucHJvdG90eXBlID0gUkVBTF9EQVRFLnByb3RvdHlwZTtcbiAgRmFrZURhdGUubm93ID0gKCkgPT4gZGF0ZU9yaWdpbiArIGN1cnJNcyArIHRpY2soKTtcbiAgRmFrZURhdGUucGFyc2UgPSBSRUFMX0RBVEUucGFyc2U7XG4gIEZha2VEYXRlLlVUQyA9IFJFQUxfREFURS5VVEM7XG4gICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IERhdGU6IHVua25vd24gfSkuRGF0ZSA9IEZha2VEYXRlO1xuICBwZXJmb3JtYW5jZS5ub3cgPSAoKSA9PiBjdXJyTXMgKyB0aWNrKCk7XG5cbiAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IChjYikgPT4ge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgcmFmUXVldWUucHVzaCh7IGlkLCBjYiB9KTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IChpZCkgPT4ge1xuICAgIHJhZlF1ZXVlID0gcmFmUXVldWUuZmlsdGVyKChyKSA9PiByLmlkICE9PSBpZCk7XG4gIH07XG4gICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IHNldFRpbWVvdXQ6IHVua25vd24gfSkuc2V0VGltZW91dCA9IChjYjogVGltZXJIYW5kbGVyLCBkZWxheT86IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgdGltZXJzW2lkXSA9IHsgdHlwZTogXCJ0aW1lb3V0XCIsIGNiLCBkZWxheTogZGVsYXkgfHwgMCwgbmV4dDogY3Vyck1zICsgKGRlbGF5IHx8IDApIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJUaW1lb3V0ID0gKGlkKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBpZCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgZGVsZXRlIHRpbWVyc1tpZF07XG4gICAgfVxuICB9O1xuICAod2luZG93IGFzIHVua25vd24gYXMgeyBzZXRJbnRlcnZhbDogdW5rbm93biB9KS5zZXRJbnRlcnZhbCA9IChjYjogVGltZXJIYW5kbGVyLCBkZWxheT86IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgY29uc3QgZCA9IE1hdGgubWF4KGRlbGF5IHx8IDAsIDEpO1xuICAgIHRpbWVyc1tpZF0gPSB7IHR5cGU6IFwiaW50ZXJ2YWxcIiwgY2IsIGRlbGF5OiBkLCBuZXh0OiBjdXJyTXMgKyBkIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJJbnRlcnZhbCA9IChpZCkgPT4ge1xuICAgIGlmICh0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGRlbGV0ZSB0aW1lcnNbaWRdO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBzYWZlSW52b2tlVGltZXIoZm46IFRpbWVySGFuZGxlcikge1xuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIGZuID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIC8vIFN0cmluZyB0aW1lciBoYW5kbGVyIHJ1bnMgYXMgcGFnZSBzY3JpcHQgaW4gZ2xvYmFsIHNjb3BlIChIVE1MIHNwZWMpOyBGdW5jdGlvbiBjdG9yIG1hdGNoZXMgdGhhdCwgYXZvaWRzIGV2YWwuXG4gICAgICAgIG5ldyBGdW5jdGlvbihmbikoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIltUaWNrXSBlcnJvcjpcIiwgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLnN0YWNrKSB8fCBlKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gc2FmZUludm9rZVJhZihjYjogRnJhbWVSZXF1ZXN0Q2FsbGJhY2ssIHRzOiBudW1iZXIpIHtcbiAgICB0cnkge1xuICAgICAgY2IodHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJbVGlja10gZXJyb3I6XCIsIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5zdGFjaykgfHwgZSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYW5pbVN0YXRlID0gbmV3IFdlYWtNYXA8QW5pbWF0aW9uLCBBbmltRW50cnk+KCk7XG4gIGZ1bmN0aW9uIHN5bmNBbmltYXRpb25zKG1zOiBudW1iZXIpIHtcbiAgICBsZXQgYW5pbXM6IEFuaW1hdGlvbltdO1xuICAgIHRyeSB7XG4gICAgICBhbmltcyA9IGRvY3VtZW50LmdldEFuaW1hdGlvbnMoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBhIG9mIGFuaW1zKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IGEucGxheVN0YXRlO1xuICAgICAgaWYgKHN0YXRlID09PSBcImlkbGVcIiB8fCBzdGF0ZSA9PT0gXCJmaW5pc2hlZFwiKSB7XG4gICAgICAgIGFuaW1TdGF0ZS5kZWxldGUoYSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmF0ZSA9IHR5cGVvZiBhLnBsYXliYWNrUmF0ZSA9PT0gXCJudW1iZXJcIiA/IGEucGxheWJhY2tSYXRlIDogMTtcbiAgICAgIGlmIChyYXRlID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IHMgPSBhbmltU3RhdGUuZ2V0KGEpO1xuICAgICAgaWYgKCFzKSB7XG4gICAgICAgIGNvbnN0IGN0MCA9IHR5cGVvZiBhLmN1cnJlbnRUaW1lID09PSBcIm51bWJlclwiID8gYS5jdXJyZW50VGltZSA6IDA7XG4gICAgICAgIHMgPSB7IHN0YXJ0TXM6IG1zIC0gY3QwIC8gcmF0ZSwgcGF1c2VkQWNjdW06IDAsIHBhdXNlZEF0OiAtMSB9O1xuICAgICAgICBhbmltU3RhdGUuc2V0KGEsIHMpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlID09PSBcInBhdXNlZFwiKSB7XG4gICAgICAgIGlmIChzLnBhdXNlZEF0IDwgMCkge1xuICAgICAgICAgIHMucGF1c2VkQXQgPSBtcztcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzLnBhdXNlZEF0ID49IDApIHtcbiAgICAgICAgcy5wYXVzZWRBY2N1bSArPSBtcyAtIHMucGF1c2VkQXQ7XG4gICAgICAgIHMucGF1c2VkQXQgPSAtMTtcbiAgICAgIH1cbiAgICAgIGEuY3VycmVudFRpbWUgPSAobXMgLSBzLnN0YXJ0TXMgLSBzLnBhdXNlZEFjY3VtKSAqIHJhdGU7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHJvY2Vzcyh0aW1lc3RhbXBNczogbnVtYmVyKSB7XG4gICAgY3Vyck1zID0gdGltZXN0YW1wTXM7XG4gICAgdGltZU9mZnNldCA9IDA7XG4gICAgZm9yIChjb25zdCBpZCBvZiBPYmplY3Qua2V5cyh0aW1lcnMpKSB7XG4gICAgICBjb25zdCB0ID0gdGltZXJzW051bWJlcihpZCldO1xuICAgICAgaWYgKCF0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHQubmV4dCA8PSBjdXJyTXMpIHtcbiAgICAgICAgc2FmZUludm9rZVRpbWVyKHQuY2IpO1xuICAgICAgICBpZiAodC50eXBlID09PSBcInRpbWVvdXRcIikge1xuICAgICAgICAgIGRlbGV0ZSB0aW1lcnNbTnVtYmVyKGlkKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdC5uZXh0ICs9IHQuZGVsYXk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJhZnMgPSByYWZRdWV1ZS5zcGxpY2UoMCk7XG4gICAgZm9yIChjb25zdCByIG9mIHJhZnMpIHtcbiAgICAgIHNhZmVJbnZva2VSYWYoci5jYiwgY3Vyck1zKTtcbiAgICB9XG4gICAgc3luY0FuaW1hdGlvbnMoY3Vyck1zKTtcbiAgfVxuXG4gIHdpbmRvdy5fX3B1cF90aWNrX18gPSB7IHByb2Nlc3MgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbnR5cGUgVmVjNCA9IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG5jb25zdCBNSVJST1JfUFJPUFMgPSBbXG4gIFwiYm9yZGVyUmFkaXVzXCIsXG4gIFwiYm9yZGVyVG9wTGVmdFJhZGl1c1wiLFxuICBcImJvcmRlclRvcFJpZ2h0UmFkaXVzXCIsXG4gIFwiYm9yZGVyQm90dG9tTGVmdFJhZGl1c1wiLFxuICBcImJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzXCIsXG4gIFwidHJhbnNmb3JtXCIsXG4gIFwidHJhbnNmb3JtT3JpZ2luXCIsXG4gIFwiZmlsdGVyXCIsXG4gIFwiY2xpcFBhdGhcIixcbiAgXCJib3hTaGFkb3dcIixcbiAgXCJvcGFjaXR5XCIsXG4gIFwibWl4QmxlbmRNb2RlXCIsXG4gIFwibWFza1wiLFxuICBcInpJbmRleFwiLFxuICBcInBvc2l0aW9uXCIsXG4gIFwibGVmdFwiLFxuICBcInRvcFwiLFxuICBcInJpZ2h0XCIsXG4gIFwiYm90dG9tXCIsXG5dIGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBjc3NDYXNlKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzLnJlcGxhY2UoL1tBLVpdL2csIChjKSA9PiBgLSR7Yy50b0xvd2VyQ2FzZSgpfWApO1xufVxuXG4vLyBUcmFjayB0aGUgb3ZlcmxheSBjYW52YXMgdG8gdGhlIHZpZGVvIGVsZW1lbnQncyBsaXZlIGJveCAocG9zaXRpb24sIHNpemXDl2RwciwgbWlycm9yZWQgdmlzdWFsIHN0eWxlcykuXG5leHBvcnQgZnVuY3Rpb24gc3luY092ZXJsYXkodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIGN2OiBIVE1MQ2FudmFzRWxlbWVudCk6IHZvaWQge1xuICBjb25zdCBjcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHZpZGVvKTtcbiAgY3Yuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gIC8vIG9mZnNldCogYXJlIHByZS10cmFuc2Zvcm0gY29vcmRzIGZyb20gb2Zmc2V0UGFyZW50J3MgcGFkZGluZyBlZGdlID0gdGhlIGFicyBjb250YWluaW5nLWJsb2NrIG9yaWdpbjsgbWFwIGRpcmVjdC5cbiAgY3Yuc3R5bGUubGVmdCA9IGAke3ZpZGVvLm9mZnNldExlZnR9cHhgO1xuICBjdi5zdHlsZS50b3AgPSBgJHt2aWRlby5vZmZzZXRUb3B9cHhgO1xuICBjdi5zdHlsZS53aWR0aCA9IGAke3ZpZGVvLm9mZnNldFdpZHRofXB4YDtcbiAgY3Yuc3R5bGUuaGVpZ2h0ID0gYCR7dmlkZW8ub2Zmc2V0SGVpZ2h0fXB4YDtcbiAgZm9yIChjb25zdCBwIG9mIE1JUlJPUl9QUk9QUykge1xuICAgIGlmIChwID09PSBcInBvc2l0aW9uXCIgfHwgcCA9PT0gXCJsZWZ0XCIgfHwgcCA9PT0gXCJ0b3BcIiB8fCBwID09PSBcInJpZ2h0XCIgfHwgcCA9PT0gXCJib3R0b21cIikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHYgPSBjcy5nZXRQcm9wZXJ0eVZhbHVlKGNzc0Nhc2UocCkpO1xuICAgIGlmICh2KSB7XG4gICAgICBjdi5zdHlsZS5zZXRQcm9wZXJ0eShjc3NDYXNlKHApLCB2KTtcbiAgICB9XG4gIH1cbiAgLy8gQmFja2luZyBzdG9yZSBhdCBvbi1zY3JlZW4gcGl4ZWwgc2l6ZSAocG9zdC10cmFuc2Zvcm0pIHNvIGRlY29kZSByZXNvbHV0aW9uIG1hdGNoZXMgZGlzcGxheWVkIHBpeGVscy5cbiAgY29uc3QgdnIgPSB2aWRlby5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgY29uc3QgdyA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQodnIud2lkdGggKiBkcHIpKTtcbiAgY29uc3QgaCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQodnIuaGVpZ2h0ICogZHByKSk7XG4gIGlmIChjdi53aWR0aCAhPT0gdykge1xuICAgIGN2LndpZHRoID0gdztcbiAgfVxuICBpZiAoY3YuaGVpZ2h0ICE9PSBoKSB7XG4gICAgY3YuaGVpZ2h0ID0gaDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBDYW52YXModmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHNuYXA6IE9mZnNjcmVlbkNhbnZhcyB8IHVuZGVmaW5lZCk6IEhUTUxDYW52YXNFbGVtZW50IHtcbiAgY29uc3QgY3YgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICBjdi5kYXRhc2V0W1wicHVwVmlkZW9PdmVybGF5XCJdID0gXCIxXCI7XG4gIGN2LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcIm5vbmVcIjtcbiAgdmlkZW8uc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gIHZpZGVvLm11dGVkID0gdHJ1ZTtcbiAgY29uc3QgcGFyZW50ID0gdmlkZW8ucGFyZW50Tm9kZSB8fCBkb2N1bWVudC5ib2R5O1xuICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGN2LCB2aWRlby5uZXh0U2libGluZyk7XG4gIHN5bmNPdmVybGF5KHZpZGVvLCBjdik7XG4gIGlmIChzbmFwKSB7XG4gICAgdHJ5IHtcbiAgICAgIGN2LmdldENvbnRleHQoXCIyZFwiKSEuZHJhd0ltYWdlKHNuYXAsIDAsIDAsIGN2LndpZHRoLCBjdi5oZWlnaHQpO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuICByZXR1cm4gY3Y7XG59XG5cbi8vIERyYXcgcmVjdCBmb3IgdGhlIGJpdG1hcCB3aXRoaW4gdGhlIGNhbnZhcyBwZXIgb2JqZWN0Rml0LlxuZXhwb3J0IGZ1bmN0aW9uIGZpdFJlY3Qoc3JjVzogbnVtYmVyLCBzcmNIOiBudW1iZXIsIGRzdFc6IG51bWJlciwgZHN0SDogbnVtYmVyLCBmaXQ6IHN0cmluZyk6IFZlYzQge1xuICBpZiAoZml0ID09PSBcIm5vbmVcIikge1xuICAgIHJldHVybiBbKGRzdFcgLSBzcmNXKSAvIDIsIChkc3RIIC0gc3JjSCkgLyAyLCBzcmNXLCBzcmNIXTtcbiAgfVxuICBpZiAoZml0ID09PSBcImNvbnRhaW5cIiB8fCBmaXQgPT09IFwic2NhbGUtZG93blwiKSB7XG4gICAgY29uc3Qgc2MgPSBNYXRoLm1pbihkc3RXIC8gc3JjVywgZHN0SCAvIHNyY0gpO1xuICAgIGNvbnN0IGsgPSBmaXQgPT09IFwic2NhbGUtZG93blwiID8gTWF0aC5taW4oMSwgc2MpIDogc2M7XG4gICAgY29uc3Qgd3MgPSBrICogc3JjVztcbiAgICBjb25zdCBocyA9IGsgKiBzcmNIO1xuICAgIHJldHVybiBbKGRzdFcgLSB3cykgLyAyLCAoZHN0SCAtIGhzKSAvIDIsIHdzLCBoc107XG4gIH1cbiAgaWYgKGZpdCA9PT0gXCJjb3ZlclwiKSB7XG4gICAgY29uc3Qgc2MyID0gTWF0aC5tYXgoZHN0VyAvIHNyY1csIGRzdEggLyBzcmNIKTtcbiAgICBjb25zdCB3czIgPSBzYzIgKiBzcmNXO1xuICAgIGNvbnN0IGhzMiA9IHNjMiAqIHNyY0g7XG4gICAgcmV0dXJuIFsoZHN0VyAtIHdzMikgLyAyLCAoZHN0SCAtIGhzMikgLyAyLCB3czIsIGhzMl07XG4gIH1cbiAgcmV0dXJuIFswLCAwLCBkc3RXLCBkc3RIXTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmV4cG9ydCBjb25zdCBTQ0hFTUUgPSBcInB1cC1mcmFtZTovL1wiO1xuZXhwb3J0IGNvbnN0IEFIRUFEID0gMTA7XG5leHBvcnQgY29uc3QgVEFHID0gXCJbVmlkZW9Ib29rXVwiO1xuXG5leHBvcnQgY29uc3QgTUVESUFfRVJSX05FVFdPUksgPSAyO1xuZXhwb3J0IGNvbnN0IE1FRElBX0VSUl9ERUNPREUgPSAzO1xuZXhwb3J0IGNvbnN0IEhBVkVfTk9USElORyA9IDA7XG5leHBvcnQgY29uc3QgSEFWRV9NRVRBREFUQSA9IDE7XG5leHBvcnQgY29uc3QgSEFWRV9FTk9VR0hfREFUQSA9IDQ7XG5leHBvcnQgY29uc3QgTkVUV09SS19FTVBUWSA9IDA7XG5leHBvcnQgY29uc3QgTkVUV09SS19JRExFID0gMTtcbmV4cG9ydCBjb25zdCBORVRXT1JLX0xPQURJTkcgPSAyO1xuZXhwb3J0IGNvbnN0IE5FVFdPUktfTk9fU09VUkNFID0gMztcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb01ldGEge1xuICBpZDogc3RyaW5nO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnJhbWVXaWR0aDogbnVtYmVyO1xuICBmcmFtZUhlaWdodDogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0ZyYW1lTWV0YSB7XG4gIHByZXNlbnRhdGlvblRpbWU6IG51bWJlcjtcbiAgZXhwZWN0ZWREaXNwbGF5VGltZTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgbWVkaWFUaW1lOiBudW1iZXI7XG4gIHByZXNlbnRlZEZyYW1lczogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBGcmFtZUNiID0gKG5vdzogbnVtYmVyLCBtZXRhOiBWaWRlb0ZyYW1lTWV0YSkgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBNZWRpYUVycm9yTGlrZSB7XG4gIGNvZGU6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ2FjaGUge1xuICBiaXRtYXBzOiBNYXA8bnVtYmVyLCBJbWFnZUJpdG1hcD47XG4gIGluRmxpZ2h0OiBNYXA8bnVtYmVyLCBQcm9taXNlPEltYWdlQml0bWFwIHwgdW5kZWZpbmVkPj47XG4gIHJlYWRlcnM6IE1hcDxWaWRlb1N0YXRlLCBudW1iZXI+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvU3RhdGUge1xuICBtZXRhPzogVmlkZW9NZXRhO1xuICBjdjogSFRNTENhbnZhc0VsZW1lbnQ7XG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICBwYXVzZWQ6IGJvb2xlYW47XG4gIGN1cnJlbnRUaW1lOiBudW1iZXI7XG4gIGVuZGVkOiBib29sZWFuO1xuICBsYXN0RHJhd25JZHg6IG51bWJlcjtcbiAgZGVhZDogYm9vbGVhbjtcbiAgb2JqZWN0Rml0OiBzdHJpbmc7XG4gIHJlYWR5U3RhdGU6IG51bWJlcjtcbiAgbmV0d29ya1N0YXRlOiBudW1iZXI7XG4gIHNlZWtpbmc6IGJvb2xlYW47XG4gIHdhaXRpbmc6IGJvb2xlYW47XG4gIGVycm9yOiBNZWRpYUVycm9yTGlrZSB8IHVuZGVmaW5lZDtcbiAgcHJlc2VudGVkRnJhbWVzOiBudW1iZXI7XG4gIG1heFJlYWNoZWQ6IG51bWJlcjtcbiAgcnZmYzogTWFwPG51bWJlciwgRnJhbWVDYj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGltZVJhbmdlc0xpa2Uge1xuICBsZW5ndGg6IG51bWJlcjtcbiAgc3RhcnQoaTogbnVtYmVyKTogbnVtYmVyO1xuICBlbmQoaTogbnVtYmVyKTogbnVtYmVyO1xufVxuXG4vLyBXaG9sZSBjbGlwIGlzIGRlY29kZS1vbi1kZW1hbmQsIHNvIHRoZSBhdmFpbGFibGUgcmFuZ2UgaXMgYWx3YXlzIFswLCBlbmRdIChvbmUgVGltZVJhbmdlcyBlbnRyeSkuXG5leHBvcnQgZnVuY3Rpb24gdGltZVJhbmdlcyhlbmQ6IG51bWJlcik6IFRpbWVSYW5nZXNMaWtlIHtcbiAgcmV0dXJuIHsgbGVuZ3RoOiBlbmQgPiAwID8gMSA6IDAsIHN0YXJ0OiAoKSA9PiAwLCBlbmQ6ICgpID0+IGVuZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyZShlbDogRXZlbnRUYXJnZXQsIHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCh0eXBlKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgdHlwZSB7IFZpZGVvSG9vayB9IGZyb20gXCIuL2hvb2tcIjtcbmltcG9ydCB7IGZpdFJlY3QsIHN5bmNPdmVybGF5IH0gZnJvbSBcIi4vb3ZlcmxheVwiO1xuaW1wb3J0IHsgQUhFQUQsIGZpcmUsIHR5cGUgVmlkZW9GcmFtZU1ldGEsIHR5cGUgVmlkZW9TdGF0ZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIGZpcmVGcmFtZUNhbGxiYWNrcyhzdGF0ZTogVmlkZW9TdGF0ZSk6IHZvaWQge1xuICBpZiAoc3RhdGUucnZmYy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGNicyA9IFsuLi5zdGF0ZS5ydmZjLnZhbHVlcygpXTtcbiAgc3RhdGUucnZmYy5jbGVhcigpO1xuICBjb25zdCBub3cgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgY29uc3QgbWV0YTogVmlkZW9GcmFtZU1ldGEgPSB7XG4gICAgcHJlc2VudGF0aW9uVGltZTogbm93LFxuICAgIGV4cGVjdGVkRGlzcGxheVRpbWU6IG5vdyxcbiAgICB3aWR0aDogc3RhdGUubWV0YSEuZnJhbWVXaWR0aCxcbiAgICBoZWlnaHQ6IHN0YXRlLm1ldGEhLmZyYW1lSGVpZ2h0LFxuICAgIG1lZGlhVGltZTogc3RhdGUuY3VycmVudFRpbWUsXG4gICAgcHJlc2VudGVkRnJhbWVzOiBzdGF0ZS5wcmVzZW50ZWRGcmFtZXMsXG4gIH07XG4gIGZvciAoY29uc3QgY2Igb2YgY2JzKSB7XG4gICAgY2Iobm93LCBtZXRhKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBwYWludChob29rOiBWaWRlb0hvb2ssIHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzdGF0ZTogVmlkZW9TdGF0ZSwgaWR4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYyA9IGhvb2suY2FjaGUuY2FjaGVPZihzdGF0ZS5tZXRhIS5pZCk7XG4gIGMucmVhZGVycy5zZXQoc3RhdGUsIGlkeCk7XG4gIGxldCBibSA9IGMuYml0bWFwcy5nZXQoaWR4KTtcbiAgaWYgKCFibSkge1xuICAgIGhvb2suY2FjaGUucHJlZmV0Y2goc3RhdGUsIGlkeCArIDEsIEFIRUFEIC0gMSk7XG4gICAgY29uc3QgZmV0Y2hlZCA9IGF3YWl0IGhvb2suY2FjaGUuZmV0Y2goc3RhdGUsIGlkeCk7XG4gICAgaWYgKGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKSAhPT0gc3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFmZXRjaGVkKSB7XG4gICAgICBpZiAoIXN0YXRlLnBhdXNlZCAmJiAhc3RhdGUud2FpdGluZykge1xuICAgICAgICBzdGF0ZS53YWl0aW5nID0gdHJ1ZTtcbiAgICAgICAgZmlyZSh2aWRlbywgXCJ3YWl0aW5nXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBibSA9IGZldGNoZWQ7XG4gIH1cbiAgaWYgKHN0YXRlLndhaXRpbmcpIHtcbiAgICBzdGF0ZS53YWl0aW5nID0gZmFsc2U7XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQpIHtcbiAgICAgIGZpcmUodmlkZW8sIFwicGxheWluZ1wiKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY3YgPSBzdGF0ZS5jdjtcbiAgY29uc3QgciA9IGZpdFJlY3QoYm0ud2lkdGgsIGJtLmhlaWdodCwgY3Yud2lkdGgsIGN2LmhlaWdodCwgc3RhdGUub2JqZWN0Rml0KTtcbiAgc3RhdGUuY3R4LmNsZWFyUmVjdCgwLCAwLCBjdi53aWR0aCwgY3YuaGVpZ2h0KTtcbiAgc3RhdGUuY3R4LmRyYXdJbWFnZShibSwgclswXSwgclsxXSwgclsyXSwgclszXSk7XG4gIHN0YXRlLmxhc3REcmF3bklkeCA9IGlkeDtcbiAgc3RhdGUucHJlc2VudGVkRnJhbWVzKys7XG4gIGZpcmVGcmFtZUNhbGxiYWNrcyhzdGF0ZSk7XG4gIGhvb2suY2FjaGUucHJlZmV0Y2goc3RhdGUsIGlkeCArIDEsIEFIRUFEKTtcbiAgaG9vay5jYWNoZS5ldmljdChjKTtcbn1cblxuLy8gVmlydHVhbC10aW1lIHRpY2s6IHN5bmMgb3ZlcmxheXMsIGFkdmFuY2UgZWFjaCBob29rZWQgdmlkZW8ncyBjbG9jayAobG9vcC9lbmQpLCBwYWludCB0aGUgZHVlIGZyYW1lLlxuZXhwb3J0IGZ1bmN0aW9uIGFkdmFuY2UoaG9vazogVmlkZW9Ib29rLCB0aW1lc3RhbXBNczogbnVtYmVyKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIGNvbnN0IGR0ID0gTWF0aC5tYXgoMCwgdGltZXN0YW1wTXMgLSBob29rLmN1cnJNcykgLyAxMDAwO1xuICBob29rLmN1cnJNcyA9IHRpbWVzdGFtcE1zO1xuICBjb25zdCBwczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ2aWRlb1wiKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgIGNvbnN0IHZpZGVvID0gZWwgYXMgSFRNTFZpZGVvRWxlbWVudDtcbiAgICBjb25zdCBzdGF0ZSA9IGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKTtcbiAgICBpZiAoIXN0YXRlIHx8IHN0YXRlLmRlYWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3luY092ZXJsYXkodmlkZW8sIHN0YXRlLmN2KTtcbiAgICBpZiAoIXN0YXRlLm1ldGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gRWxlbWVudCBncmV3IHBhc3QgdGhlIGRlY29kZWQgKGRvd25zY2FsZWQpIHJlcyDihpIgcmUtZGVjb2RlIGF0IG5hdGl2ZSwgb25lLXNob3QgKGNvdmVycyB6b29tKS5cbiAgICBpZiAoXG4gICAgICBzdGF0ZS5tZXRhLmZyYW1lV2lkdGggPCBzdGF0ZS5tZXRhLndpZHRoICYmXG4gICAgICBzdGF0ZS5jdi53aWR0aCA+IHN0YXRlLm1ldGEuZnJhbWVXaWR0aCAqIDEuMDUgJiZcbiAgICAgICFob29rLmF0dGFjaGluZy5oYXModmlkZW8pXG4gICAgKSB7XG4gICAgICBob29rLnJlYXR0YWNoKHZpZGVvLCBzdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghc3RhdGUucGF1c2VkICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgc3RhdGUuY3VycmVudFRpbWUgKz0gZHQgKiAodmlkZW8ucGxheWJhY2tSYXRlIHx8IDEpO1xuICAgICAgc3RhdGUubWF4UmVhY2hlZCA9IE1hdGgubWF4KHN0YXRlLm1heFJlYWNoZWQsIHN0YXRlLmN1cnJlbnRUaW1lKTtcbiAgICAgIGlmIChzdGF0ZS5jdXJyZW50VGltZSA+PSBzdGF0ZS5tZXRhLmR1cmF0aW9uKSB7XG4gICAgICAgIGlmICh2aWRlby5sb29wKSB7XG4gICAgICAgICAgc3RhdGUuY3VycmVudFRpbWUgPSBzdGF0ZS5jdXJyZW50VGltZSAlIHN0YXRlLm1ldGEuZHVyYXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUuY3VycmVudFRpbWUgPSBzdGF0ZS5tZXRhLmR1cmF0aW9uO1xuICAgICAgICAgIHN0YXRlLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgICAgICAgIGZpcmUodmlkZW8sIFwiZW5kZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpcmUodmlkZW8sIFwidGltZXVwZGF0ZVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaWR4ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChzdGF0ZS5jdXJyZW50VGltZSAqIHN0YXRlLm1ldGEuZnBzKSk7XG4gICAgaWYgKGlkeCA9PT0gc3RhdGUubGFzdERyYXduSWR4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHBzLnB1c2gocGFpbnQoaG9vaywgdmlkZW8sIHN0YXRlLCBpZHgpKTtcbiAgfSk7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgeyBTQ0hFTUUsIHR5cGUgVmlkZW9DYWNoZSwgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLy8gUGVyLXNlc3Npb24gYml0bWFwIGNhY2hlOiBmZXRjaGVzIFJHQkEgZnJhbWVzIGZyb20gdGhlIGZyYW1lIHByb3RvY29sLCBkZWR1cGVzIGluLWZsaWdodCwgZXZpY3RzIGJlaGluZCByZWFkZXJzLlxuZXhwb3J0IGNsYXNzIEZyYW1lQ2FjaGUge1xuICBwcml2YXRlIF9jYWNoZXMgPSBuZXcgTWFwPHN0cmluZywgVmlkZW9DYWNoZT4oKTtcblxuICBjYWNoZU9mKGlkOiBzdHJpbmcpOiBWaWRlb0NhY2hlIHtcbiAgICBsZXQgYyA9IHRoaXMuX2NhY2hlcy5nZXQoaWQpO1xuICAgIGlmICghYykge1xuICAgICAgYyA9IHsgYml0bWFwczogbmV3IE1hcCgpLCBpbkZsaWdodDogbmV3IE1hcCgpLCByZWFkZXJzOiBuZXcgTWFwKCkgfTtcbiAgICAgIHRoaXMuX2NhY2hlcy5zZXQoaWQsIGMpO1xuICAgIH1cbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIGZldGNoKHN0YXRlOiBWaWRlb1N0YXRlLCBpZHg6IG51bWJlcik6IFByb21pc2U8SW1hZ2VCaXRtYXAgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBtZXRhID0gc3RhdGUubWV0YTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgY29uc3QgYyA9IHRoaXMuY2FjaGVPZihtZXRhLmlkKTtcbiAgICBjb25zdCBleGlzdGluZyA9IGMuaW5GbGlnaHQuZ2V0KGlkeCk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIGNvbnN0IGNhY2hlZCA9IGMuYml0bWFwcy5nZXQoaWR4KTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNhY2hlZCk7XG4gICAgfVxuICAgIGNvbnN0IHcgPSBtZXRhLmZyYW1lV2lkdGg7XG4gICAgY29uc3QgaCA9IG1ldGEuZnJhbWVIZWlnaHQ7XG4gICAgY29uc3QgcCA9IGZldGNoKGAke1NDSEVNRX1mcmFtZT9pZD0ke21ldGEuaWR9JmlkeD0ke2lkeH1gKVxuICAgICAgLnRoZW4oKHIpID0+IChyLm9rID8gci5hcnJheUJ1ZmZlcigpIDogdW5kZWZpbmVkKSlcbiAgICAgIC50aGVuKChidWYpID0+XG4gICAgICAgIGJ1ZiAmJiBidWYuYnl0ZUxlbmd0aCA9PT0gdyAqIGggKiA0XG4gICAgICAgICAgPyBjcmVhdGVJbWFnZUJpdG1hcChuZXcgSW1hZ2VEYXRhKG5ldyBVaW50OENsYW1wZWRBcnJheShidWYpLCB3LCBoKSlcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIClcbiAgICAgIC50aGVuKChibSkgPT4ge1xuICAgICAgICBjLmluRmxpZ2h0LmRlbGV0ZShpZHgpO1xuICAgICAgICBpZiAoYm0pIHtcbiAgICAgICAgICBjLmJpdG1hcHMuc2V0KGlkeCwgYm0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBibTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICBjLmluRmxpZ2h0LmRlbGV0ZShpZHgpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG4gICAgYy5pbkZsaWdodC5zZXQoaWR4LCBwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIHByZWZldGNoKHN0YXRlOiBWaWRlb1N0YXRlLCBmcm9tSWR4OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRhID0gc3RhdGUubWV0YTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWF4SWR4ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChtZXRhLmR1cmF0aW9uICogbWV0YS5mcHMpKTtcbiAgICBmb3IgKGxldCBpID0gZnJvbUlkeDsgaSA8IGZyb21JZHggKyBjb3VudDsgaSsrKSB7XG4gICAgICBpZiAoaSA8IDEgfHwgaSA+IG1heElkeCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZvaWQgdGhpcy5mZXRjaChzdGF0ZSwgaSk7XG4gICAgfVxuICB9XG5cbiAgZXZpY3QoYzogVmlkZW9DYWNoZSk6IHZvaWQge1xuICAgIGxldCBtaW5JZHggPSBJbmZpbml0eTtcbiAgICBjLnJlYWRlcnMuZm9yRWFjaCgoaWR4KSA9PiB7XG4gICAgICBpZiAoaWR4IDwgbWluSWR4KSB7XG4gICAgICAgIG1pbklkeCA9IGlkeDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtaW5JZHgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZsb29yID0gbWluSWR4IC0gMjtcbiAgICBjLmJpdG1hcHMuZm9yRWFjaCgoYm0sIGlkeCkgPT4ge1xuICAgICAgaWYgKGlkeCA8IGZsb29yKSB7XG4gICAgICAgIGJtLmNsb3NlKCk7XG4gICAgICAgIGMuYml0bWFwcy5kZWxldGUoaWR4KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIERyb3AgYSByZWFkZXI7IHdoZW4gdGhlIGxhc3QgbGVhdmVzLCBjbG9zZSBiaXRtYXBzIGFuZCB0ZWxsIHRoZSBzZXJ2ZXIgdG8gcmVsZWFzZSB0aGUgZGVjb2RlIHNlc3Npb24uXG4gIHJlbGVhc2UoaWQ6IHN0cmluZywgc3RhdGU6IFZpZGVvU3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBjID0gdGhpcy5fY2FjaGVzLmdldChpZCk7XG4gICAgaWYgKCFjKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGMucmVhZGVycy5kZWxldGUoc3RhdGUpO1xuICAgIGlmIChjLnJlYWRlcnMuc2l6ZSA+IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYy5iaXRtYXBzLmZvckVhY2goKGJtKSA9PiB7XG4gICAgICBibS5jbG9zZSgpO1xuICAgIH0pO1xuICAgIHRoaXMuX2NhY2hlcy5kZWxldGUoaWQpO1xuICAgIGZldGNoKGAke1NDSEVNRX1jbG9zZT9pZD0ke2lkfWAsIHsga2VlcGFsaXZlOiB0cnVlIH0pO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzAyLlxuXG5pbXBvcnQgdHlwZSB7IFZpZGVvSG9vayB9IGZyb20gXCIuL2hvb2tcIjtcbmltcG9ydCB7IHR5cGUgRnJhbWVDYiwgZmlyZSwgdGltZVJhbmdlcywgdHlwZSBWaWRlb1N0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLy8gT3ZlcnJpZGUgdGhlIEhUTUxNZWRpYUVsZW1lbnQgc3VyZmFjZSBmb3IgaG9va2VkIDx2aWRlbz47IHVuaG9va2VkIGVsZW1lbnRzIGZhbGwgdGhyb3VnaCB0byBuYXRpdmUuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbE1lZGlhU2hpbShob29rOiBWaWRlb0hvb2spOiB2b2lkIHtcbiAgY29uc3QgSFZFID0gSFRNTFZpZGVvRWxlbWVudC5wcm90b3R5cGU7XG4gIGNvbnN0IE1FRElBID0gSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGU7XG4gIGNvbnN0IG1kZXNjID0gKHA6IHN0cmluZykgPT4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVkUsIHApIHx8IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTUVESUEsIHApO1xuICBjb25zdCBjdERlc2MgPSBtZGVzYyhcImN1cnJlbnRUaW1lXCIpO1xuICBjb25zdCBzcmNEZXNjID0gbWRlc2MoXCJzcmNcIik7XG4gIGNvbnN0IHJhdGVEZXNjID0gbWRlc2MoXCJwbGF5YmFja1JhdGVcIik7XG4gIGNvbnN0IG9yaWdQYXVzZSA9IEhWRS5wYXVzZTtcbiAgY29uc3Qgb3JpZ1JWRkMgPSBIVkUucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjaztcbiAgY29uc3Qgb3JpZ0NhbmNlbFJWRkMgPSBIVkUuY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrO1xuICBjb25zdCBvcmlnUXVhbGl0eSA9IEhWRS5nZXRWaWRlb1BsYXliYWNrUXVhbGl0eTtcbiAgY29uc3Qgb3JpZ0xvYWQgPSBIVkUubG9hZDtcbiAgY29uc3Qgc2Vzc2lvbnMgPSBob29rLnNlc3Npb25zO1xuXG4gIC8vIFNlc3Npb24tYmFja2VkIHJlYWQtb25seSBwcm9wZXJ0eSB3aXRoIG5hdGl2ZSBmYWxsYmFjayB3aGVuIHRoZSBlbGVtZW50IGlzbid0IGhvb2tlZC5cbiAgY29uc3QgZGVmID0gKHByb3A6IHN0cmluZywgcGljazogKHM6IFZpZGVvU3RhdGUpID0+IHVua25vd24pID0+IHtcbiAgICBjb25zdCBuYXRpdmVHZXQgPSBtZGVzYyhwcm9wKT8uZ2V0O1xuICAgIGlmICghbmF0aXZlR2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG1lZGlhX3NoaW06IG5vIG5hdGl2ZSBnZXR0ZXIgZm9yICR7cHJvcH1gKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgcHJvcCwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHMgPyBwaWNrKHMpIDogbmF0aXZlR2V0LmNhbGwodGhpcyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xuICBkZWYoXCJwYXVzZWRcIiwgKHMpID0+IHMucGF1c2VkKTtcbiAgZGVmKFwiZW5kZWRcIiwgKHMpID0+IHMuZW5kZWQpO1xuICBkZWYoXCJyZWFkeVN0YXRlXCIsIChzKSA9PiBzLnJlYWR5U3RhdGUpO1xuICBkZWYoXCJuZXR3b3JrU3RhdGVcIiwgKHMpID0+IHMubmV0d29ya1N0YXRlKTtcbiAgZGVmKFwiZXJyb3JcIiwgKHMpID0+IHMuZXJyb3IgPz8gbnVsbCk7XG4gIGRlZihcInNlZWtpbmdcIiwgKHMpID0+IHMuc2Vla2luZyk7XG4gIGRlZihcImJ1ZmZlcmVkXCIsIChzKSA9PiB0aW1lUmFuZ2VzKHMubWV0YSA/IHMubWV0YS5kdXJhdGlvbiA6IDApKTtcbiAgZGVmKFwic2Vla2FibGVcIiwgKHMpID0+IHRpbWVSYW5nZXMocy5tZXRhID8gcy5tZXRhLmR1cmF0aW9uIDogMCkpO1xuICBkZWYoXCJwbGF5ZWRcIiwgKHMpID0+IHRpbWVSYW5nZXMocy5tYXhSZWFjaGVkKSk7XG5cbiAgSFZFLnBsYXkgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICByZXR1cm4gaG9vay5hdHRhY2godGhpcykudGhlbigobnMpID0+IHtcbiAgICAgICAgaWYgKG5zKSB7XG4gICAgICAgICAgaG9vay5yZXN1bWUodGhpcywgbnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaG9vay5yZXN1bWUodGhpcywgcyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9O1xuICBIVkUucGF1c2UgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICBvcmlnUGF1c2UuY2FsbCh0aGlzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFzLnBhdXNlZCkge1xuICAgICAgcy5wYXVzZWQgPSB0cnVlO1xuICAgICAgZmlyZSh0aGlzLCBcInBhdXNlXCIpO1xuICAgIH1cbiAgfTtcbiAgaWYgKGN0RGVzYz8uZ2V0ICYmIGN0RGVzYy5zZXQpIHtcbiAgICBjb25zdCBjdEdldCA9IGN0RGVzYy5nZXQ7XG4gICAgY29uc3QgY3RTZXQgPSBjdERlc2Muc2V0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsIFwiY3VycmVudFRpbWVcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHMgPyBzLmN1cnJlbnRUaW1lIDogY3RHZXQuY2FsbCh0aGlzKTtcbiAgICAgIH0sXG4gICAgICBzZXQodGhpczogSFRNTFZpZGVvRWxlbWVudCwgdDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgICAgIGlmICghcykge1xuICAgICAgICAgIGN0U2V0LmNhbGwodGhpcywgdCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGR1ciA9IHMubWV0YSA/IHMubWV0YS5kdXJhdGlvbiA6IHQ7XG4gICAgICAgIHMuY3VycmVudFRpbWUgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0LCBkdXIpKTtcbiAgICAgICAgcy5tYXhSZWFjaGVkID0gTWF0aC5tYXgocy5tYXhSZWFjaGVkLCBzLmN1cnJlbnRUaW1lKTtcbiAgICAgICAgaWYgKHMuY3VycmVudFRpbWUgPCBkdXIpIHtcbiAgICAgICAgICBzLmVuZGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcy5zZWVraW5nID0gdHJ1ZTtcbiAgICAgICAgZmlyZSh0aGlzLCBcInNlZWtpbmdcIik7XG4gICAgICAgIHMuc2Vla2luZyA9IGZhbHNlO1xuICAgICAgICBmaXJlKHRoaXMsIFwic2Vla2VkXCIpO1xuICAgICAgICBmaXJlKHRoaXMsIFwidGltZXVwZGF0ZVwiKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgaWYgKHJhdGVEZXNjPy5zZXQpIHtcbiAgICBjb25zdCByYXRlU2V0ID0gcmF0ZURlc2Muc2V0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsIFwicGxheWJhY2tSYXRlXCIsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogcmF0ZURlc2MuZ2V0LFxuICAgICAgc2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIHI6IG51bWJlcikge1xuICAgICAgICByYXRlU2V0LmNhbGwodGhpcywgcik7XG4gICAgICAgIGlmIChzZXNzaW9ucy5oYXModGhpcykpIHtcbiAgICAgICAgICBmaXJlKHRoaXMsIFwicmF0ZWNoYW5nZVwiKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBIVkUucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50LCBjYik6IG51bWJlciB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIHJldHVybiBvcmlnUlZGQy5jYWxsKHRoaXMsIGNiKTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSArK2hvb2sucnZmY1NlcTtcbiAgICBzLnJ2ZmMuc2V0KGlkLCBjYiBhcyBGcmFtZUNiKTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIEhWRS5jYW5jZWxWaWRlb0ZyYW1lQ2FsbGJhY2sgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCwgaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzKSB7XG4gICAgICBvcmlnQ2FuY2VsUlZGQy5jYWxsKHRoaXMsIGlkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcy5ydmZjLmRlbGV0ZShpZCk7XG4gIH07XG4gIEhWRS5nZXRWaWRlb1BsYXliYWNrUXVhbGl0eSA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIHJldHVybiBvcmlnUXVhbGl0eS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRpb25UaW1lOiBwZXJmb3JtYW5jZS5ub3coKSxcbiAgICAgIHRvdGFsVmlkZW9GcmFtZXM6IHMucHJlc2VudGVkRnJhbWVzLFxuICAgICAgZHJvcHBlZFZpZGVvRnJhbWVzOiAwLFxuICAgICAgY29ycnVwdGVkVmlkZW9GcmFtZXM6IDAsXG4gICAgfSBhcyBWaWRlb1BsYXliYWNrUXVhbGl0eTtcbiAgfTtcbiAgSFZFLmxvYWQgPSBmdW5jdGlvbiAodGhpczogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGlmICghc2Vzc2lvbnMuaGFzKHRoaXMpKSB7XG4gICAgICByZXR1cm4gb3JpZ0xvYWQuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgaG9vay5kZXRhY2godGhpcyk7XG4gICAgZmlyZSh0aGlzLCBcImVtcHRpZWRcIik7XG4gICAgdGhpcy5fX3B1cExhc3RTcmMgPSB1bmRlZmluZWQ7XG4gICAgaG9vay5hdHRhY2godGhpcyk7XG4gIH07XG4gIGlmIChzcmNEZXNjPy5zZXQpIHtcbiAgICBjb25zdCBzcmNTZXQgPSBzcmNEZXNjLnNldDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFZFLCBcInNyY1wiLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IHNyY0Rlc2MuZ2V0LFxuICAgICAgc2V0KHRoaXM6IEhUTUxWaWRlb0VsZW1lbnQsIHY6IHN0cmluZykge1xuICAgICAgICBzcmNTZXQuY2FsbCh0aGlzLCB2KTtcbiAgICAgICAgaG9vay5vblNyY0NoYW5nZSh0aGlzKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmltcG9ydCB0eXBlIHsgVmlkZW9Ib29rIH0gZnJvbSBcIi4vaG9va1wiO1xuaW1wb3J0IHtcbiAgQUhFQUQsXG4gIGZpcmUsXG4gIEhBVkVfRU5PVUdIX0RBVEEsXG4gIEhBVkVfTUVUQURBVEEsXG4gIEhBVkVfTk9USElORyxcbiAgTUVESUFfRVJSX0RFQ09ERSxcbiAgTUVESUFfRVJSX05FVFdPUkssXG4gIHR5cGUgTWVkaWFFcnJvckxpa2UsXG4gIE5FVFdPUktfRU1QVFksXG4gIE5FVFdPUktfSURMRSxcbiAgTkVUV09SS19MT0FESU5HLFxuICBORVRXT1JLX05PX1NPVVJDRSxcbiAgU0NIRU1FLFxuICBUQUcsXG4gIHR5cGUgVmlkZW9NZXRhLFxuICB0eXBlIFZpZGVvU3RhdGUsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNoQXJncyB7XG4gIHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50O1xuICBzdGF0ZTogVmlkZW9TdGF0ZTtcbiAgc3JjOiBzdHJpbmc7XG4gIGJpcnRoTXM6IG51bWJlcjtcbiAgbmF0aXZlOiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV3VmlkZW9TdGF0ZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgY3Y6IEhUTUxDYW52YXNFbGVtZW50KTogVmlkZW9TdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgbWV0YTogdW5kZWZpbmVkLFxuICAgIGN2LFxuICAgIGN0eDogY3YuZ2V0Q29udGV4dChcIjJkXCIpISxcbiAgICBwYXVzZWQ6ICEodmlkZW8uYXV0b3BsYXkgfHwgIXZpZGVvLnBhdXNlZCksXG4gICAgY3VycmVudFRpbWU6IDAsXG4gICAgZW5kZWQ6IGZhbHNlLFxuICAgIGxhc3REcmF3bklkeDogLTEsXG4gICAgZGVhZDogZmFsc2UsXG4gICAgb2JqZWN0Rml0OiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh2aWRlbykub2JqZWN0Rml0IHx8IFwiZmlsbFwiLFxuICAgIHJlYWR5U3RhdGU6IEhBVkVfTk9USElORyxcbiAgICBuZXR3b3JrU3RhdGU6IE5FVFdPUktfRU1QVFksXG4gICAgc2Vla2luZzogZmFsc2UsXG4gICAgd2FpdGluZzogZmFsc2UsXG4gICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICBwcmVzZW50ZWRGcmFtZXM6IDAsXG4gICAgbWF4UmVhY2hlZDogMCxcbiAgICBydmZjOiBuZXcgTWFwKCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZhaWxPcGVuKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzdGF0ZTogVmlkZW9TdGF0ZSwgZXJyb3I6IE1lZGlhRXJyb3JMaWtlKTogdW5kZWZpbmVkIHtcbiAgc3RhdGUuZGVhZCA9IHRydWU7XG4gIHN0YXRlLmVycm9yID0gZXJyb3I7XG4gIHN0YXRlLm5ldHdvcmtTdGF0ZSA9IE5FVFdPUktfTk9fU09VUkNFO1xuICBjb25zb2xlLmVycm9yKFRBRywgYCR7ZXJyb3IubWVzc2FnZX0gc3JjPSR7dmlkZW8uc3JjIHx8IHZpZGVvLmN1cnJlbnRTcmN9YCk7XG4gIGZpcmUodmlkZW8sIFwiZXJyb3JcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIE9wZW4gdGhlIGZyYW1lIHNlcnZlciBzZXNzaW9uLCB0aGVuIGVtaXQgdGhlIEhUTUxNZWRpYUVsZW1lbnQgbG9hZCBzZXF1ZW5jZSAocmVhZHlTdGF0ZS9uZXR3b3JrU3RhdGUgKyBldmVudHMpLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5TZXNzaW9uKGhvb2s6IFZpZGVvSG9vaywgYXJnczogQXR0YWNoQXJncyk6IFByb21pc2U8VmlkZW9TdGF0ZSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IHZpZGVvLCBzdGF0ZSwgc3JjLCBiaXJ0aE1zLCBuYXRpdmUgfSA9IGFyZ3M7XG4gIGNvbnN0IGZwcyA9IE51bWJlci5wYXJzZUludCh2aWRlby5kYXRhc2V0W1wicHVwRnBzXCJdIHx8IFwiMzBcIiwgMTApO1xuICBzdGF0ZS5uZXR3b3JrU3RhdGUgPSBORVRXT1JLX0xPQURJTkc7XG4gIGZpcmUodmlkZW8sIFwibG9hZHN0YXJ0XCIpO1xuICBsZXQgcmVzOiBSZXNwb25zZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBxID0gbmF0aXZlID8gXCJcIiA6IGAmdz0ke3N0YXRlLmN2LndpZHRofSZoPSR7c3RhdGUuY3YuaGVpZ2h0fSZmaXQ9JHtlbmNvZGVVUklDb21wb25lbnQoc3RhdGUub2JqZWN0Rml0KX1gO1xuICAgIHJlcyA9IGF3YWl0IGZldGNoKGAke1NDSEVNRX1vcGVuP3NyYz0ke2VuY29kZVVSSUNvbXBvbmVudChzcmMpfSZmcHM9JHtmcHN9JHtxfWApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhaWxPcGVuKHZpZGVvLCBzdGF0ZSwge1xuICAgICAgY29kZTogTUVESUFfRVJSX05FVFdPUkssXG4gICAgICBtZXNzYWdlOiBgb3BlbiBmYWlsZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWAsXG4gICAgfSk7XG4gIH1cbiAgaWYgKGhvb2suc2Vzc2lvbnMuZ2V0KHZpZGVvKSAhPT0gc3RhdGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghcmVzLm9rKSB7XG4gICAgcmV0dXJuIGZhaWxPcGVuKHZpZGVvLCBzdGF0ZSwge1xuICAgICAgY29kZTogTUVESUFfRVJSX0RFQ09ERSxcbiAgICAgIG1lc3NhZ2U6IGBvcGVuICR7cmVzLnN0YXR1c306ICR7YXdhaXQgcmVzLnRleHQoKX1gLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1ldGEgPSAoYXdhaXQgcmVzLmpzb24oKSkgYXMgVmlkZW9NZXRhO1xuICBpZiAoaG9vay5zZXNzaW9ucy5nZXQodmlkZW8pICE9PSBzdGF0ZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgc3RhdGUubWV0YSA9IG1ldGE7XG4gIHN0YXRlLmN1cnJlbnRUaW1lID0gc3RhdGUucGF1c2VkID8gMCA6IE1hdGgubWF4KDAsIChob29rLmN1cnJNcyAtIGJpcnRoTXMpIC8gMTAwMCk7XG4gIC8vIFRoZSBzdHViIG1lZGlhIHVzdWFsbHkgbG9hZHMgbmF0aXZlbHkgZmlyc3Q7IEJsaW5rIHRoZW4gb3ducyB0aGUgcmVhbCBldmVudCBzZXF1ZW5jZSDigJQgZG9uJ3QgZHVwbGljYXRlIGl0LlxuICBjb25zdCBuYXRpdmVNZXRhID0gdmlkZW8udmlkZW9XaWR0aCA+IDA7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgXCJ2aWRlb1dpZHRoXCIsIHtcbiAgICB2YWx1ZTogbWV0YS53aWR0aCxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmlkZW8sIFwidmlkZW9IZWlnaHRcIiwge1xuICAgIHZhbHVlOiBtZXRhLmhlaWdodCxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmlkZW8sIFwiZHVyYXRpb25cIiwge1xuICAgIHZhbHVlOiBtZXRhLmR1cmF0aW9uLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgfSk7XG4gIHN0YXRlLnJlYWR5U3RhdGUgPSBIQVZFX01FVEFEQVRBO1xuICBpZiAoIW5hdGl2ZU1ldGEpIHtcbiAgICBmaXJlKHZpZGVvLCBcImR1cmF0aW9uY2hhbmdlXCIpO1xuICAgIGZpcmUodmlkZW8sIFwibG9hZGVkbWV0YWRhdGFcIik7XG4gIH1cbiAgc3RhdGUucmVhZHlTdGF0ZSA9IEhBVkVfRU5PVUdIX0RBVEE7XG4gIGlmICghbmF0aXZlTWV0YSkge1xuICAgIGZpcmUodmlkZW8sIFwibG9hZGVkZGF0YVwiKTtcbiAgICBmaXJlKHZpZGVvLCBcImNhbnBsYXlcIik7XG4gICAgZmlyZSh2aWRlbywgXCJjYW5wbGF5dGhyb3VnaFwiKTtcbiAgfVxuICBzdGF0ZS5uZXR3b3JrU3RhdGUgPSBORVRXT1JLX0lETEU7XG4gIGlmICghbmF0aXZlTWV0YSkge1xuICAgIGZpcmUodmlkZW8sIFwic3VzcGVuZFwiKTtcbiAgICBpZiAoIXN0YXRlLnBhdXNlZCkge1xuICAgICAgZmlyZSh2aWRlbywgXCJwbGF5XCIpO1xuICAgICAgZmlyZSh2aWRlbywgXCJwbGF5aW5nXCIpO1xuICAgIH1cbiAgfVxuICBob29rLmNhY2hlLnByZWZldGNoKHN0YXRlLCAxLCBBSEVBRCk7XG4gIHJldHVybiBzdGF0ZTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmltcG9ydCB7IGFkdmFuY2UgfSBmcm9tIFwiLi9kcml2ZXJcIjtcbmltcG9ydCB7IEZyYW1lQ2FjaGUgfSBmcm9tIFwiLi9mcmFtZV9jYWNoZVwiO1xuaW1wb3J0IHsgaW5zdGFsbE1lZGlhU2hpbSB9IGZyb20gXCIuL21lZGlhX3NoaW1cIjtcbmltcG9ydCB7IHNldHVwQ2FudmFzIH0gZnJvbSBcIi4vb3ZlcmxheVwiO1xuaW1wb3J0IHsgbmV3VmlkZW9TdGF0ZSwgb3BlblNlc3Npb24gfSBmcm9tIFwiLi9zZXNzaW9uXCI7XG5pbXBvcnQgeyBmaXJlLCB0eXBlIFZpZGVvU3RhdGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIF9fcHVwX3ZpZGVvX18/OiB7IGFkdmFuY2U6IChtczogbnVtYmVyKSA9PiBQcm9taXNlPHVua25vd24+OyByZWFkeTogKCkgPT4gUHJvbWlzZTx2b2lkPiB9O1xuICB9XG4gIGludGVyZmFjZSBIVE1MVmlkZW9FbGVtZW50IHtcbiAgICBfX3B1cExhc3RTcmM/OiBzdHJpbmc7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvSG9vayB7XG4gIHJlYWRvbmx5IHNlc3Npb25zID0gbmV3IFdlYWtNYXA8SFRNTFZpZGVvRWxlbWVudCwgVmlkZW9TdGF0ZT4oKTtcbiAgcmVhZG9ubHkgYXR0YWNoaW5nID0gbmV3IFdlYWtNYXA8SFRNTFZpZGVvRWxlbWVudCwgUHJvbWlzZTxWaWRlb1N0YXRlIHwgdW5kZWZpbmVkPj4oKTtcbiAgLy8gRW51bWVyYWJsZSBtaXJyb3Igb2YgaW4tZmxpZ2h0IG9wZW5zIChXZWFrTWFwIGlzbid0IGl0ZXJhYmxlKSBzbyByZWFkeSgpIGNhbiBhd2FpdCB0aGVtLlxuICByZWFkb25seSBvcGVuaW5nID0gbmV3IFNldDxQcm9taXNlPHVua25vd24+PigpO1xuICByZWFkb25seSBjYWNoZSA9IG5ldyBGcmFtZUNhY2hlKCk7XG4gIHJ2ZmNTZXEgPSAwO1xuICBjdXJyTXMgPSAwO1xuICBwcml2YXRlIF9sYXN0U25hcHNob3QgPSBuZXcgV2Vha01hcDxIVE1MVmlkZW9FbGVtZW50LCBPZmZzY3JlZW5DYW52YXM+KCk7XG5cbiAgaW5zdGFsbCgpOiB2b2lkIHtcbiAgICBpbnN0YWxsTWVkaWFTaGltKHRoaXMpO1xuICAgIHRoaXMuc2Nhbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpO1xuICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRzKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IG0gb2YgbXV0cykge1xuICAgICAgICBpZiAobS50eXBlID09PSBcImF0dHJpYnV0ZXNcIiAmJiBtLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQgJiYgbS5hdHRyaWJ1dGVOYW1lID09PSBcInNyY1wiKSB7XG4gICAgICAgICAgdGhpcy5vblNyY0NoYW5nZShtLnRhcmdldCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbS5hZGRlZE5vZGVzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbihuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBtLnJlbW92ZWROb2Rlcy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRldGFjaChuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pLm9ic2VydmUoZG9jdW1lbnQsIHsgc3VidHJlZTogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlLCBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFtcInNyY1wiXSB9KTtcbiAgICB3aW5kb3cuX19wdXBfdmlkZW9fXyA9IHsgYWR2YW5jZTogKG1zKSA9PiBhZHZhbmNlKHRoaXMsIG1zKSwgcmVhZHk6ICgpID0+IHRoaXMucmVhZHkoKSB9O1xuICB9XG5cbiAgYXR0YWNoKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBuYXRpdmUgPSBmYWxzZSk6IFByb21pc2U8VmlkZW9TdGF0ZSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5zZXNzaW9ucy5nZXQodmlkZW8pO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShleGlzdGluZyk7XG4gICAgfVxuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLmF0dGFjaGluZy5nZXQodmlkZW8pO1xuICAgIGlmIChwZW5kaW5nKSB7XG4gICAgICByZXR1cm4gcGVuZGluZztcbiAgICB9XG4gICAgY29uc3Qgc3JjID0gdmlkZW8uc3JjIHx8IHZpZGVvLmN1cnJlbnRTcmM7XG4gICAgaWYgKCFzcmMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgaWYgKC9eKGJsb2I6fGRhdGE6fG1lZGlhc3RyZWFtOikvaS50ZXN0KHNyYykpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgY29uc3QgY3YgPSBzZXR1cENhbnZhcyh2aWRlbywgdGhpcy5fbGFzdFNuYXBzaG90LmdldCh2aWRlbykpO1xuICAgIGNvbnN0IHN0YXRlID0gbmV3VmlkZW9TdGF0ZSh2aWRlbywgY3YpO1xuICAgIHRoaXMuc2Vzc2lvbnMuc2V0KHZpZGVvLCBzdGF0ZSk7XG4gICAgY29uc3QgcCA9IG9wZW5TZXNzaW9uKHRoaXMsIHsgdmlkZW8sIHN0YXRlLCBzcmMsIGJpcnRoTXM6IHRoaXMuY3Vyck1zLCBuYXRpdmUgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICB0aGlzLmF0dGFjaGluZy5kZWxldGUodmlkZW8pO1xuICAgICAgdGhpcy5vcGVuaW5nLmRlbGV0ZShwKTtcbiAgICB9KTtcbiAgICB0aGlzLmF0dGFjaGluZy5zZXQodmlkZW8sIHApO1xuICAgIHRoaXMub3BlbmluZy5hZGQocCk7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICAvLyBBd2FpdCBvbmx5IHRoZSBvcGVucyBpbiBmbGlnaHQgcmlnaHQgbm93IOKAlCBuZXZlciBjaGFzZSBuZXdseS1zcGF3bmVkIG9uZXMsIG9yIGEgcmV0cnlpbmcgcGFnZSBsb29wcyBmb3JldmVyLlxuICBhc3luYyByZWFkeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoWy4uLnRoaXMub3BlbmluZ10pO1xuICB9XG5cbiAgcmVzdW1lKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzdGF0ZTogVmlkZW9TdGF0ZSk6IHZvaWQge1xuICAgIGlmICghc3RhdGUucGF1c2VkICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdGF0ZS5wYXVzZWQgPSBmYWxzZTtcbiAgICBzdGF0ZS5lbmRlZCA9IGZhbHNlO1xuICAgIGZpcmUodmlkZW8sIFwicGxheVwiKTtcbiAgICBmaXJlKHZpZGVvLCBcInBsYXlpbmdcIik7XG4gIH1cblxuICBkZXRhY2godmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc2Vzc2lvbnMuZ2V0KHZpZGVvKTtcbiAgICBpZiAoIXN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzdGF0ZS5tZXRhKSB7XG4gICAgICBpZiAoc3RhdGUubGFzdERyYXduSWR4ID49IDApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzbmFwID0gbmV3IE9mZnNjcmVlbkNhbnZhcyhzdGF0ZS5jdi53aWR0aCwgc3RhdGUuY3YuaGVpZ2h0KTtcbiAgICAgICAgICBjb25zdCBzY3R4ID0gc25hcC5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICAgICAgaWYgKCFzY3R4KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJubyAyZCBjb250ZXh0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzY3R4LmRyYXdJbWFnZShzdGF0ZS5jdiwgMCwgMCk7XG4gICAgICAgICAgdGhpcy5fbGFzdFNuYXBzaG90LnNldCh2aWRlbywgc25hcCk7XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH1cbiAgICAgIHRoaXMuY2FjaGUucmVsZWFzZShzdGF0ZS5tZXRhLmlkLCBzdGF0ZSk7XG4gICAgfVxuICAgIHN0YXRlLmN2LnJlbW92ZSgpO1xuICAgIHRoaXMuc2Vzc2lvbnMuZGVsZXRlKHZpZGVvKTtcbiAgICB0aGlzLmF0dGFjaGluZy5kZWxldGUodmlkZW8pO1xuICB9XG5cbiAgb25TcmNDaGFuZ2UodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzcmMgPSB2aWRlby5zcmMgfHwgdmlkZW8uY3VycmVudFNyYyB8fCBcIlwiO1xuICAgIGlmICh2aWRlby5fX3B1cExhc3RTcmMgPT09IHNyYykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2aWRlby5fX3B1cExhc3RTcmMgPSBzcmM7XG4gICAgaWYgKHRoaXMuc2Vzc2lvbnMuaGFzKHZpZGVvKSkge1xuICAgICAgdGhpcy5kZXRhY2godmlkZW8pO1xuICAgIH1cbiAgICB0aGlzLmF0dGFjaCh2aWRlbyk7XG4gIH1cblxuICAvLyBSZS1vcGVuIGF0IG5hdGl2ZSByZXNvbHV0aW9uICh0aGUgZWxlbWVudCBvdXRncmV3IHRoZSBkb3duc2NhbGVkIGRlY29kZSksIHByZXNlcnZpbmcgcGxheWJhY2sgc3RhdGUuXG4gIHJlYXR0YWNoKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBzdGF0ZTogVmlkZW9TdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IHQgPSBzdGF0ZS5jdXJyZW50VGltZTtcbiAgICBjb25zdCBwYXVzZWQgPSBzdGF0ZS5wYXVzZWQ7XG4gICAgY29uc3QgZW5kZWQgPSBzdGF0ZS5lbmRlZDtcbiAgICB0aGlzLmRldGFjaCh2aWRlbyk7XG4gICAgdm9pZCB0aGlzLmF0dGFjaCh2aWRlbywgdHJ1ZSkudGhlbigobnMpID0+IHtcbiAgICAgIGlmICghbnMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbnMuY3VycmVudFRpbWUgPSB0O1xuICAgICAgbnMucGF1c2VkID0gcGF1c2VkO1xuICAgICAgbnMuZW5kZWQgPSBlbmRlZDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2Nhbihyb290OiBFbGVtZW50IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghcm9vdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocm9vdC50YWdOYW1lID09PSBcIlZJREVPXCIpIHtcbiAgICAgIHRoaXMuYXR0YWNoKHJvb3QgYXMgSFRNTFZpZGVvRWxlbWVudCk7XG4gICAgfVxuICAgIGlmIChyb290LnF1ZXJ5U2VsZWN0b3JBbGwpIHtcbiAgICAgIHJvb3QucXVlcnlTZWxlY3RvckFsbChcInZpZGVvXCIpLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgdGhpcy5hdHRhY2godik7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxWaWRlb0hvb2soKTogdm9pZCB7XG4gIGlmICh3aW5kb3cuX19wdXBfdmlkZW9fXykge1xuICAgIHJldHVybjtcbiAgfVxuICBuZXcgVmlkZW9Ib29rKCkuaW5zdGFsbCgpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8yNi5cblxuaW1wb3J0IHsgaW5zdGFsbFRpY2tIb29rIH0gZnJvbSBcIi4vaWZyYW1lX2hvb2tcIjtcbmltcG9ydCB7IGluc3RhbGxWaWRlb0hvb2sgfSBmcm9tIFwiLi92aWRlby9ob29rXCI7XG5cbmlmICh3aW5kb3cuc2VsZiAhPT0gd2luZG93LnRvcCkge1xuICBpbnN0YWxsVGlja0hvb2soKTtcbiAgaW5zdGFsbFZpZGVvSG9vaygpO1xufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pup-recorder",
3
- "version": "0.4.4",
3
+ "version": "0.4.5",
4
4
  "description": "Record web pages as video",
5
5
  "repository": {
6
6
  "type": "git",