let SubtitlesOctopus=function(options){let supportsWebAssembly=!1;try{var module;"object"==typeof WebAssembly&&"function"==typeof WebAssembly.instantiate&&(module=new WebAssembly.Module(Uint8Array.of(0,97,115,109,1,0,0,0)))instanceof WebAssembly.Module&&(supportsWebAssembly=new WebAssembly.Instance(module)instanceof WebAssembly.Instance)}catch(e){}console.log("WebAssembly support detected: "+(supportsWebAssembly?"yes":"no"));let self=this;function renderFrames(){var data=self.renderFramesData,beforeDrawTime=performance.now();self.ctx.clearRect(0,0,self.canvas.width,self.canvas.height);for(let i=0;i{if("function"==typeof ImageData.prototype.constructor)try{return new window.ImageData(new Uint8ClampedArray([0,0,0,0]),1,1)}catch(e){console.log("detected that ImageData is not constructable despite browser saying so")}let ctx=document.createElement("canvas").getContext("2d");window.ImageData=function(){let i=0,data;arguments[0]instanceof Uint8ClampedArray&&(data=arguments[i++]);var width=arguments[i++],height=arguments[i],width=ctx.createImageData(width,height);return data&&width.data.set(data),width}})(),self.workerError=function(error){if(console.error("Worker error: ",error),self.onErrorEvent&&self.onErrorEvent(error),!self.debug)throw self.dispose(),new Error("Worker error: "+error)},self.init=function(){window.Worker?(self.worker||(self.worker=new Worker(self.workerUrl),self.worker.onmessage=self.onWorkerMessage,self.worker.onerror=self.workerError),self.workerActive=!1,self.createCanvas(),self.setVideo(options.video),self.setSubUrl(options.subUrl),self.worker.postMessage({target:"worker-init",width:self.canvas.width,height:self.canvas.height,URL:document.URL,currentScript:self.workerUrl,preMain:!0,fastRender:self.lossyRender,subUrl:self.subUrl,subContent:self.subContent,fonts:self.fonts,availableFonts:self.availableFonts,debug:self.debug})):self.workerError("worker not supported")},self.createCanvas=function(){if(self.canvas?self.canvasParent=self.canvas.parentNode:self.video?(self.isOurCanvas=!0,self.canvas=document.createElement("canvas"),self.canvas.className="libassjs-canvas",self.canvas.style.display="none",self.canvasParent=document.createElement("div"),self.canvasParent.className="libassjs-canvas-parent",self.canvasParent.appendChild(self.canvas),self.video.nextSibling?self.video.parentNode.insertBefore(self.canvasParent,self.video.nextSibling):self.video.parentNode.appendChild(self.canvasParent)):self.canvas||self.workerError("Don't know where to render: you should give video or canvas in options."),self.ctx=self.canvas.getContext("2d"),self.bufferCanvas=document.createElement("canvas"),self.bufferCanvasCtx=self.bufferCanvas.getContext("2d"),self.detectAlphaBug){var savedHasAlphaBug=(()=>{try{return localStorage.getItem("canvas_hasalphabug")}catch(err){console.log("error reading from storage")}return null})();if("true"===savedHasAlphaBug)self.hasAlphaBug=!0;else if("false"===savedHasAlphaBug)self.hasAlphaBug=!1;else{self.bufferCanvas.width=1,self.bufferCanvas.height=1;var savedHasAlphaBug=new Uint8ClampedArray([0,255,0,0]),savedHasAlphaBug=new ImageData(savedHasAlphaBug,1,1),prePut=(self.bufferCanvasCtx.clearRect(0,0,1,1),self.ctx.clearRect(0,0,1,1),self.ctx.getImageData(0,0,1,1).data),savedHasAlphaBug=(self.bufferCanvasCtx.putImageData(savedHasAlphaBug,0,0),self.ctx.drawImage(self.bufferCanvas,0,0),self.ctx.getImageData(0,0,1,1).data),prePut=(self.hasAlphaBug=prePut[1]!=savedHasAlphaBug[1],self.hasAlphaBug&&console.log("Detected a browser having issue with transparent pixels, applying workaround"),self.hasAlphaBug);try{localStorage.setItem("canvas_hasalphabug",prePut)}catch(err){console.log("error saving to local storage")}}}},self.setVideo=function(video){if(self.video=video,self.video){let timeupdate=function(){self.setCurrentTime(video.currentTime+self.timeOffset)};self.video.addEventListener("timeupdate",timeupdate,!1),self.video.addEventListener("playing",function(){self.setIsPaused(!1,video.currentTime+self.timeOffset)},!1),self.video.addEventListener("pause",function(){self.setIsPaused(!0,video.currentTime+self.timeOffset)},!1),self.video.addEventListener("seeking",function(){self.video.removeEventListener("timeupdate",timeupdate)},!1),self.video.addEventListener("seeked",function(){self.video.addEventListener("timeupdate",timeupdate,!1),self.setCurrentTime(video.currentTime+self.timeOffset)},!1),self.video.addEventListener("ratechange",function(){self.setRate(video.playbackRate)},!1),self.video.addEventListener("timeupdate",function(){self.setCurrentTime(video.currentTime+self.timeOffset)},!1),self.video.addEventListener("waiting",function(){self.setIsPaused(!0,video.currentTime+self.timeOffset)},!1),0