{"version":3,"sources":["webpack://ruffle-selfhosted/../core/pkg/ruffle_web_bg.wasm","webpack://ruffle-selfhosted/../core/pkg/ruffle-imports.js","webpack://ruffle-selfhosted/../core/pkg/ruffle_web.js","webpack://ruffle-selfhosted/../core/pkg/js-polyfills.js","webpack://ruffle-selfhosted/../core/pkg/load-ruffle.js","webpack://ruffle-selfhosted/../core/pkg/plugin-polyfill.js","webpack://ruffle-selfhosted/../core/pkg/shadow-template.js","webpack://ruffle-selfhosted/../core/pkg/register-element.js","webpack://ruffle-selfhosted/../core/pkg/load-options.js","webpack://ruffle-selfhosted/../core/pkg/ruffle-player.js","webpack://ruffle-selfhosted/../core/pkg/ruffle-embed.js","webpack://ruffle-selfhosted/../core/pkg/ruffle-object.js","webpack://ruffle-selfhosted/../core/pkg/public-path.js","webpack://ruffle-selfhosted/../core/pkg/polyfills.js","webpack://ruffle-selfhosted/../core/pkg/version.js","webpack://ruffle-selfhosted/../core/pkg/version-range.js","webpack://ruffle-selfhosted/../core/pkg/public-api.js","webpack://ruffle-selfhosted/../core/pkg/source-api.js","webpack://ruffle-selfhosted/webpack/bootstrap","webpack://ruffle-selfhosted/webpack/runtime/define property getters","webpack://ruffle-selfhosted/webpack/runtime/global","webpack://ruffle-selfhosted/webpack/runtime/hasOwnProperty shorthand","webpack://ruffle-selfhosted/webpack/runtime/make namespace object","webpack://ruffle-selfhosted/webpack/runtime/publicPath","webpack://ruffle-selfhosted/./js/ruffle.js"],"names":["copyToAudioBuffer","audioBuffer","leftData","rightData","getChannelData","set","lAudioContext","AudioContext","webkitAudioContext","wasm","heap","Array","fill","undefined","getObject","idx","push","heap_next","length","takeObject","ret","dropObject","addHeapObject","obj","cachedTextDecoder","TextDecoder","ignoreBOM","fatal","decode","cachegetUint8Memory0","getUint8Memory0","buffer","memory","Uint8Array","getStringFromWasm0","ptr","len","subarray","WASM_VECTOR_LEN","cachedTextEncoder","TextEncoder","encodeString","encodeInto","arg","view","buf","encode","read","written","passStringToWasm0","malloc","realloc","mem","offset","code","charCodeAt","slice","cachegetInt32Memory0","getInt32Memory0","Int32Array","isLikeNone","x","cachegetFloat64Memory0","debugString","val","type","description","name","isArray","debug","i","builtInMatches","exec","toString","call","className","JSON","stringify","_","Error","message","stack","makeMutClosure","arg0","arg1","dtor","f","state","a","b","cnt","real","args","__wbindgen_export_2","get","original","__wbg_adapter_32","arg2","_dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h0eb418e044fe8e5c","__wbg_adapter_35","__wbg_adapter_38","__wbg_adapter_41","__wbg_adapter_44","__wbg_adapter_47","_dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hf43929b52814893c","__wbg_adapter_50","_dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h291967fc56df1dbd","__wbg_adapter_53","__wbg_adapter_56","_dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h82a10ca5ab1cea38","cachegetFloat32Memory0","getArrayF32FromWasm0","Float32Array","stack_pointer","addBorrowedObject","cachegetUint32Memory0","getArrayU8FromWasm0","handleError","apply","this","arguments","e","__wbindgen_exn_store","Ruffle","Object","create","prototype","__wbg_ruffle_free","parent","js_player","allow_script_access","config","ruffle_new","__wrap","movie_url","parameters","ptr0","__wbindgen_malloc","__wbindgen_realloc","len0","ruffle_stream_from","swf_data","ruffle_load_data","ruffle_play","ruffle_pause","ruffle_destroy","ptr1","array","Uint32Array","passArrayJsValueToWasm0","len1","ruffle_call_exposed_callback","observer","ruffle_set_trace_observer","ruffle_audio_context","async","init","input","replace","imports","wbg","__wbindgen_object_drop_ref","__wbindgen_object_clone_ref","__wbindgen_cb_drop","__wbg_copyToAudioBuffer_58f244be94bac1d2","arg3","arg4","__wbindgen_string_new","__wbg_new_df6e6ab7a65c4c4d","__wbg_panic_bbc809dd04a12c60","panic","__wbindgen_is_function","__wbindgen_json_serialize","__wbg_isFullscreen_96b85640554e160d","isFullscreen","__wbg_displayMessage_c57c20204892da2b","displayMessage","__wbg_onCallbackAvailable_3a48fae397926c96","onCallbackAvailable","__wbindgen_number_new","__wbg_new_59cb74e423758ede","__wbg_stack_558ba5917b466edd","__wbg_error_4bb6c2a97407129a","console","error","__wbindgen_free","__wbindgen_is_undefined","__wbg_instanceof_WebGl2RenderingContext_9818b789249374d3","WebGL2RenderingContext","__wbg_bindVertexArray_569f8b5466293fb0","bindVertexArray","__wbg_blitFramebuffer_4b472bb45062bd6e","arg5","arg6","arg7","arg8","arg9","arg10","blitFramebuffer","__wbg_createVertexArray_1f35f6d163bbae13","createVertexArray","__wbg_renderbufferStorageMultisample_0426ba65de4885db","renderbufferStorageMultisample","__wbg_texImage2D_79c0e000ef5e1b0a","texImage2D","__wbg_bindFramebuffer_4a37c2a7678c0994","bindFramebuffer","__wbg_bindRenderbuffer_203ad50a30ad3c0d","bindRenderbuffer","__wbg_bindTexture_f3ab6393f75a763f","bindTexture","__wbg_createFramebuffer_d01ac1b4f7c704e5","createFramebuffer","__wbg_createRenderbuffer_c008c3bb50dfff9d","createRenderbuffer","__wbg_createTexture_151a385cd028c893","createTexture","__wbg_deleteFramebuffer_acd92acda81356e9","deleteFramebuffer","__wbg_deleteRenderbuffer_b67ff9026d2be0fd","deleteRenderbuffer","__wbg_deleteTexture_125ab82d8330e268","deleteTexture","__wbg_framebufferRenderbuffer_5293612146bd869a","framebufferRenderbuffer","__wbg_framebufferTexture2D_5b8575bda5aeceeb","framebufferTexture2D","__wbg_getError_609a7fa815fd3d84","getError","__wbg_getParameter_be1e4b3ba2c0c339","getParameter","__wbg_texParameteri_6e7ba8c54bb639f2","texParameteri","__wbg_instanceof_Window_49f532f06a9786ee","Window","__wbg_document_c0366b39e4f4c89a","document","__wbg_location_c1e50a6e4c53d45c","location","__wbg_navigator_95ba9cd684cf90aa","navigator","__wbg_devicePixelRatio_268c49438a600d53","devicePixelRatio","__wbg_performance_87e4f3b6f966469f","performance","__wbg_localStorage_a6fd83fc300473fc","localStorage","__wbg_cancelAnimationFrame_60f9cf59ec1c0125","cancelAnimationFrame","__wbg_focus_ab7792954990fdb9","focus","__wbg_open_f355af0fd051a9d8","open","__wbg_requestAnimationFrame_ef0e2294dc8b1088","requestAnimationFrame","__wbg_fetch_f532e04b8fe49aa0","fetch","__wbg_destination_4b8bc48ce4ebcd6c","destination","__wbg_sampleRate_0d2637cc084b2eaf","sampleRate","__wbg_currentTime_1bc83619afbf9e72","currentTime","__wbg_new_2f70ca6da1976429","__wbg_suspend_ad6a97ee4bac3247","suspend","__wbg_createBuffer_48e051aa20c4ba3e","createBuffer","__wbg_createBufferSource_0e160528349a924b","createBufferSource","__wbg_createChannelMerger_8e8d29d53323df91","createChannelMerger","__wbg_createChannelSplitter_10fc5fe404818afc","createChannelSplitter","__wbg_createGain_a6211e4c615a1141","createGain","__wbg_createScriptProcessor_e755612398f80dd4","createScriptProcessor","__wbg_decodeAudioData_1a1e91ec5cd60d59","decodeAudioData","__wbg_resume_6dd89ae2f9b0bef3","resume","__wbg_linearRampToValueAtTime_02ce948b9b4323e0","linearRampToValueAtTime","__wbg_setValueAtTime_788b65cf85b7ba6a","setValueAtTime","__wbg_userAgent_b9c7a338061adca8","userAgent","__wbg_baseURI_1fe61dc0a39a61ed","baseURI","__wbg_appendChild_7c45aeccd496f2a5","appendChild","__wbg_removeChild_1e1942a296b255c1","removeChild","__wbg_gain_688543a4eee1eece","gain","__wbg_protocol_791396029743ce88","protocol","__wbg_assign_8948549eb7c584b7","assign","__wbg_new_0af3e1641443f13d","Path2D","__wbg_addPath_0b9c6299797f0772","addPath","__wbg_closePath_6e9529e4d6da5e83","closePath","__wbg_lineTo_2157bf4d1b0ce0d3","lineTo","__wbg_moveTo_fb2215902520c649","moveTo","__wbg_quadraticCurveTo_9c392c57a794a2d2","quadraticCurveTo","__wbg_get_29a9ce40981b8710","__wbg_set_13ecdf3c7967382d","__wbg_delete_2c0adda5d0edea03","__wbg_length_da24898717a463e0","__wbg_setProperty_46b9bd1b0fad730b","setProperty","__wbg_offsetX_4bd8c9fcb457cf0b","offsetX","__wbg_offsetY_0dde12490e8ebfba","offsetY","__wbg_button_9e74bd912190b055","button","__wbg_instanceof_SvgsvgElement_aa3f79a2638c5f44","SVGSVGElement","__wbg_createSVGMatrix_9088b605b3cbb935","createSVGMatrix","__wbg_connect_607a0c51b546a3db","connect","__wbg_connect_a4236fe1b645b8fb","__wbg_connect_db97a7bc9cd258c6","__wbg_disconnect_1f5d0443b0bca9c8","disconnect","__wbg_outputBuffer_1fc843f5ddfd743b","outputBuffer","__wbg_setTransform_041d67e3d6972fd7","setTransform","__wbg_bindVertexArrayOES_17e98f43d896f40b","bindVertexArrayOES","__wbg_createVertexArrayOES_393e00fa6f931f59","createVertexArrayOES","__wbg_seta_6c309b33d9a4fb29","__wbg_setb_378147d7ba767ab1","__wbg_setc_cc36b264b7a1ae60","c","__wbg_setd_998c5989f5780653","d","__wbg_sete_42bf2f390f25e536","__wbg_setf_df5aef1469b0c50b","__wbg_deltaY_2722120e563d3160","deltaY","__wbg_deltaMode_3db3c9c4bedf191d","deltaMode","__wbg_setbuffer_8c396e74724eda12","__wbg_setloop_1e141edefc26db22","loop","__wbg_setloopStart_4162b0a533fbc0d5","loopStart","__wbg_setloopEnd_e81eb72ea2277d88","loopEnd","__wbg_setonended_f6f3e04e13c07db4","onended","__wbg_start_f5e66921db9afaee","start","__wbg_start_0237410bb20c6213","__wbg_stop_5765c7cac3ec1564","stop","__wbg_instanceof_HtmlFormElement_26283084b0956b17","HTMLFormElement","__wbg_submit_121b8e3bd960f229","submit","__wbg_pointerId_602db5c989b38cc0","pointerId","__wbg_instanceof_Response_f52c65c389890639","Response","__wbg_arrayBuffer_0ba17dfaad804b6f","arrayBuffer","__wbg_key_d9b602f48baca7bc","key","__wbg_code_cbf76ad384ae1179","__wbg_now_7628760b7b640632","now","__wbg_newwithstrandinit_11debb554792e043","Request","__wbg_setonaudioprocess_66d0b1fa0dd39606","onaudioprocess","__wbg_body_c8cb19d760637268","body","__wbg_createElement_99351c8bf0efac6e","createElement","__wbg_createElementNS_a7ef126eff5022c2","createElementNS","__wbg_setid_f33ce4e43b43f57a","id","__wbg_clientWidth_2c84a7ebc75dd4f0","clientWidth","__wbg_clientHeight_f56dfe03d1c42f3e","clientHeight","__wbg_setinnerHTML_79084edd97462c07","innerHTML","__wbg_querySelector_155b00165b78a12f","querySelector","__wbg_releasePointerCapture_4b78cb9c51d4a539","releasePointerCapture","__wbg_setAttribute_e71b9086539f06a1","setAttribute","__wbg_setAttributeNS_a66240d5c750d0fa","setAttributeNS","__wbg_setPointerCapture_54ee987062d42d03","setPointerCapture","__wbg_remove_0639495587b1aaeb","remove","__wbg_instanceof_WebGlRenderingContext_ef4e51c6e4133d85","WebGLRenderingContext","__wbg_drawingBufferWidth_fab3e20dd1ba5d4e","drawingBufferWidth","__wbg_drawingBufferHeight_31bc93d4dc3a0dcc","drawingBufferHeight","__wbg_bufferData_d47c8467e443121d","bufferData","__wbg_texImage2D_a4011abffe0229fb","__wbg_uniform1fv_cd9d2dea0641919d","uniform1fv","__wbg_uniform4fv_24ef46675c137552","uniform4fv","__wbg_uniformMatrix3fv_a0a261980af4587d","uniformMatrix3fv","__wbg_uniformMatrix4fv_088c96db8ee28c1d","uniformMatrix4fv","__wbg_activeTexture_a51ec6273de88bc6","activeTexture","__wbg_attachShader_0dd248f6ab98fcf2","attachShader","__wbg_bindBuffer_1ceb83e9674e812a","bindBuffer","__wbg_bindFramebuffer_d8f98d1a7f6d67d1","__wbg_bindRenderbuffer_1ba9206d5f319ae1","__wbg_bindTexture_6121e6db3f879582","__wbg_blendFunc_34a6bb31770822c5","blendFunc","__wbg_clear_f6b2dd48aeed2752","clear","__wbg_clearColor_89f7819aa9f80129","clearColor","__wbg_colorMask_88ebee15531b14ef","colorMask","__wbg_compileShader_28bdbafe4445d24b","compileShader","__wbg_createBuffer_acedc3831832a280","__wbg_createProgram_7e2f44b7b74694d4","createProgram","__wbg_createShader_64c474f1d1d0c1f8","createShader","__wbg_createTexture_0a156dab1efc3499","__wbg_disable_5b9c6f74d5efd3a5","disable","__wbg_disableVertexAttribArray_ba8f39ecd28c601b","disableVertexAttribArray","__wbg_drawElements_3eb5ba8a511ce0f0","drawElements","__wbg_enable_87f39f6396535e1f","enable","__wbg_enableVertexAttribArray_f29c8dde9c8c5cf5","enableVertexAttribArray","__wbg_getAttribLocation_ba61f837da80e249","getAttribLocation","__wbg_getExtension_c6863c255090d82f","getExtension","__wbg_getParameter_ff687a6ea303e551","__wbg_getProgramInfoLog_aacf06c959070653","getProgramInfoLog","__wbg_getProgramParameter_a89bf14502c109f7","getProgramParameter","__wbg_getShaderInfoLog_1eb885f2468e2429","getShaderInfoLog","__wbg_getUniformLocation_ca853de4f2f9270d","getUniformLocation","__wbg_linkProgram_46a36cb158f10676","linkProgram","__wbg_pixelStorei_31f6dc244bf4cd5b","pixelStorei","__wbg_shaderSource_700ae72fca39850d","shaderSource","__wbg_stencilFunc_cc85d77d2098446b","stencilFunc","__wbg_stencilMask_ed2cded2c2b0b72c","stencilMask","__wbg_stencilOp_1b3529546c1fdcc2","stencilOp","__wbg_texParameteri_e45f3977eb998137","__wbg_uniform1f_3eb09312a513b94a","uniform1f","__wbg_uniform1i_e76b668973ae0655","uniform1i","__wbg_useProgram_d63a57db0571e803","useProgram","__wbg_vertexAttribPointer_b4b829a4f5a3778e","vertexAttribPointer","__wbg_viewport_54305c74f5668b33","viewport","__wbg_debug_146b863607d79e9d","__wbg_error_e325755affc8634b","__wbg_info_d60054f760c729cc","info","__wbg_log_f2e13ca55da8bad3","log","__wbg_warn_9e92ccdc67085e1b","warn","__wbg_style_9b773f0fc441eddc","style","__wbg_newwithbuffersourcesequenceandoptions_03294a518a0bd99a","Blob","__wbg_currentTarget_b545d0d803b3a62e","currentTarget","__wbg_preventDefault_9aab6c264e5df3ee","preventDefault","__wbg_addEventListener_6a37bc32387cb66d","addEventListener","__wbg_addEventListener_a422088e686210b5","__wbg_addEventListener_50b4229556ab0b83","__wbg_removeEventListener_70dfb387da1982ac","removeEventListener","__wbg_removeEventListener_4448b273b47328f8","__wbg_instanceof_HtmlCanvasElement_7bd3ee7838f11fc3","HTMLCanvasElement","__wbg_width_0efa4604d41c58c5","width","__wbg_setwidth_1d0e975feecff3ef","__wbg_height_aa24e3fef658c4a8","height","__wbg_setheight_7758ee3ff5c65474","__wbg_getContext_3db9399e6dc524ff","getContext","__wbg_getContext_93be69215ea9dbbf","__wbg_setsrc_ca894d724570195d","src","__wbg_new_1f2ded01c889cd38","Image","__wbg_newwithwidthandheight_0f3a13502ca94c49","__wbg_data_55e064fddf34cf3b","passArray8ToWasm0","data","__wbg_instanceof_CanvasRenderingContext2d_1d38418d1d6c8b34","CanvasRenderingContext2D","__wbg_setglobalAlpha_b4134dbd884b4d37","globalAlpha","__wbg_setglobalCompositeOperation_557a59a0ccf673d6","globalCompositeOperation","__wbg_setstrokeStyle_7f507e0d838e3dcf","strokeStyle","__wbg_setfillStyle_bbe97cb93eb1b55c","fillStyle","__wbg_setfilter_df75805bea0a8415","filter","__wbg_setlineWidth_61de9d1eb4e9f8a6","lineWidth","__wbg_setlineCap_bff1a8858c9f067e","lineCap","__wbg_setlineJoin_de47815c918d7874","lineJoin","__wbg_setmiterLimit_84b1a1dbddcd456a","miterLimit","__wbg_drawImage_b8dec9034bf1d116","drawImage","__wbg_drawImage_801ad094f4734689","__wbg_fill_6c721ab8eec90f70","__wbg_stroke_e25cf47e0d9a36c3","stroke","__wbg_createPattern_006b6402db95df36","createPattern","__wbg_getImageData_dd3caac873bf461f","getImageData","__wbg_clearRect_6af85454d06df5fa","clearRect","__wbg_fillRect_c79d1b386c04efed","fillRect","__wbg_resetTransform_f78edb82fd1f7239","resetTransform","__wbg_setTransform_5f5f19301b76a8d6","__wbg_get_5fa3f454aa041e6e","__wbg_next_373211328013f949","next","__wbg_done_49c598117f977077","done","__wbg_value_c9ae6368b110a068","value","__wbg_get_85e0a3b459845fe2","Reflect","__wbg_call_951bd0c6d815d6f1","__wbg_new_9dff83a08f5994f3","__wbg_isArray_cf56c8363b1b35d9","__wbg_of_3a4bb382824dd437","of","__wbg_push_3ddd8187ff2ff82d","__wbg_instanceof_ArrayBuffer_3a0fa134e6809d57","ArrayBuffer","__wbg_new_24c0ca5f23ee2dd9","__wbg_slice_a498e5bb17f253f3","__wbg_values_f28e313e2260a03a","values","__wbg_newnoargs_7c6bd521992b4022","Function","__wbg_apply_4e68243803368d89","__wbg_call_bf745b1758bb6693","__wbg_getTime_cf686ab22ab03a3e","getTime","__wbg_getTimezoneOffset_b9f3c4664b1a35ae","getTimezoneOffset","__wbg_new0_abd359df4aeb5b55","Date","__wbg_instanceof_Object_cdaa71ad2ca2f4c5","__wbg_entries_7144a7309b22df64","entries","__wbg_fromEntries_cc1186a09f1ec7f2","fromEntries","__wbg_is_049b1aece40b5301","is","__wbg_new_ba07d0daa0e4677e","__wbg_resolve_6e61e640925a0db9","Promise","resolve","__wbg_then_dd3785597974798a","then","__wbg_then_0f957e0f4c3e537a","__wbg_self_6baf3a3aa7b63415","self","__wbg_window_63fc4027b66c265b","window","__wbg_globalThis_513fb247e8e4e6d2","globalThis","__wbg_global_b87245cd886d7113","g","global","__wbg_buffer_3f12a1c608c6d04e","__wbg_newwithbyteoffsetandlength_4c51342f87299c5a","__wbg_length_c645e7c02233b440","__wbg_new_c6c0228e6d22a2f9","__wbg_set_b91afac9fd216d99","__wbg_fill_f49407f577541856","__wbg_buffer_c385539cb4060297","__wbg_byteLength_11e6bdc2fac53a3c","byteLength","__wbg_byteOffset_5db4e07752c85395","byteOffset","__wbg_ownKeys_d44c25f33e28bfab","ownKeys","__wbg_set_9bdd413385146137","__wbindgen_number_get","Float64Array","__wbindgen_string_get","__wbindgen_boolean_get","v","__wbindgen_debug_string","__wbindgen_throw","__wbindgen_rethrow","__wbindgen_memory","__wbindgen_closure_wrapper720","__wbindgen_closure_wrapper722","__wbindgen_closure_wrapper724","__wbindgen_closure_wrapper726","__wbindgen_closure_wrapper728","__wbindgen_closure_wrapper730","__wbindgen_closure_wrapper732","__wbindgen_closure_wrapper734","__wbindgen_closure_wrapper1332","URL","instance","module","WebAssembly","instantiateStreaming","headers","bytes","instantiate","Instance","load","exports","__wbindgen_wasm_module","isNativeFunction","func","indexOf","lastLoaded","loadRuffle","thisArg","_arguments","generator","reduce","defineProperty","Prototype","Version","callback","TypeError","o","k","constructor","isExtension","ruffleRuntimePath","ReferenceError","ruffleWasm","default","ruffleIsExtension","P","reject","fulfilled","step","rejected","result","fetchRuffle","RuffleMimeTypeArray","native_mimetype_array","__mimetypes","__named_mimetypes","install","mimetype","index","Symbol","iterator","RufflePlugin","filename","mimetypes","super","RufflePluginArray","native_plugin_array","__plugins","__named_plugins","plugin","FLASH_PLUGIN","installPlugin","plugins","writable","mimeTypes","suffixes","enabledPlugin","ruffleShadowTemplate","privateRegistry","lookupElement","elementName","internalName","class","registerElement","elementClass","tries","externalName","customElements","define","AutoPlay","Letterbox","UnmuteOverlay","LogLevel","FLASH_MIMETYPE","FUTURESPLASH_MIMETYPE","FLASH7_AND_8_MIMETYPE","FLASH_MOVIE_MIMETYPE","FLASH_ACTIVEX_CLASSID","RUFFLE_ORIGIN","DIMENSION_REGEX","PanicError","sanitizeParameters","URLSearchParams","output","RufflePlayer","HTMLElement","panicked","shadow","attachShadow","mode","content","cloneNode","dynamicStyles","getElementById","container","playButton","playButtonClicked","bind","unmuteOverlay","unmuteOverlayClicked","rightClickMenu","openRightClickMenu","hideRightClickMenu","allowScriptAccess","_trace_observer","ruffleConstructor","updateStyles","_oldValue","_newValue","destroy","sheet","rules","deleteRule","widthAttr","attributes","getNamedItem","htmlDimensionToCssDimension","insertRule","heightAttr","parentNode","element","nodeName","_a","catch","ruffleIndexError","FileProtocol","WasmNotFound","String","toLowerCase","includes","WasmMimeType","WasmCors","JavascriptConflict","audioState","visibility","setTimeout","autoplay","Auto","unmuteVisibility","Visible","On","play","display","childNodes","forEach","node","audioContext","audio_context","onstatechange","options","_b","optionsError","url","JavascriptConfiguration","isConnected","isUnusedFallbackObject","backgroundColor","ensureFreshInstance","swfUrl","href","_c","substring","stream_from","load_data","err","fullscreenEnabled","webkitFullscreenEnabled","fullscreenElement","webkitFullscreenElement","requestFullscreen","webkitRequestFullScreen","exitFullscreen","webkitCancelFullScreen","items","text","onClick","enterFullscreen","firstChild","contextMenuItems","textContent","left","top","rect","getBoundingClientRect","clientX","y","clientY","maxX","maxY","Math","floor","min","pause","elem","attrib","specified","from","children","attribute","match","out","call_exposed_callback","set_trace_observer","errorIndex","Unknown","errorArray","stackIndex","debugPlayerInfo","platform","errorText","join","issueTitle","errorBody","errorFooter","issueLink","encodeURIComponent","issueBody","viewDetails","onclick","div","prepend","isScriptAccessAllowed","access","origin","isSwfFilename","pathname","extension","RuffleEmbed","_d","connectedCallback","srcval","attr","createAttribute","setNamedItem","removeNamedItem","oldValue","newValue","attributeChangedCallback","flashvars","getAttribute","ruffleObj","copyElement","findCaseInsensitive","defaultValue","hasOwnProperty","paramsOf","params","param","HTMLParamElement","RuffleObject","movie","keys","getElementsByTagName","isSwf","classid","some","isInterdictable","embedElem","objectElem","publicPath","source_name","path","publicPaths","currentScript","endsWith","globalConfig","jsScriptUrl","objects","iframes","polyfillFlashInstances","ruffleObject","fromNativeObjectElement","replaceWith","ruffleEmbed","fromNativeEmbedElement","polyfillFrames","elementsList","dataset","rufflePolyfilled","elementWindow","contentWindow","errorMessage","tagName","readyState","injectRuffle","elementDocument","documentElement","ruffleOptout","script","onload","head","pluginPolyfill","polyfill","isExt","MutationObserver","mutationsList","mutation","addedNodes","observe","childList","subtree","major","minor","patch","prIdent","buildIdent","versionString","buildSplit","split","prSplit","versionSplit","parseInt","other","isNumeric","test","VersionRange","requirements","fver","matches","j","comparator","version","isStableOrCompatiblePrerelease","isEqual","hasPrecedenceOver","isCompatibleWith","requirement","components","trim","fromSemver","PublicAPI","prev","sources","invoked","newestName","conflict","superseded","api","newestVersion","kVersion","newestSourceName","polyfills","ver_requirement","fromRequirementString","valid","satisfiedBy","local","satisfying","newest","prevRuffle","sourceName","sourceAPI","publicAPI","registerSource","SourceAPI","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__","definition","enumerable","prop","r","toStringTag","p","negotiate"],"mappings":"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","file":"ruffle.js","sourcesContent":["export default __webpack_public_path__ + \"40caf2b45c20a1522895df5ec7f369c3.wasm\";","/**\n * Functions imported from JS into Ruffle.\n *\n * @ignore\n * @internal\n */\n/**\n * Copies data into the given audio channel.\n * This is necessary because Safari does not support `AudioBuffer.copyToChannel`.\n *\n * @internal\n */\nexport function copyToAudioBuffer(audioBuffer, leftData, rightData) {\n    if (leftData) {\n        const dstBuffer = audioBuffer.getChannelData(0);\n        dstBuffer.set(leftData);\n    }\n    if (rightData) {\n        const dstBuffer = audioBuffer.getChannelData(1);\n        dstBuffer.set(rightData);\n    }\n}\n","import { copyToAudioBuffer } from './ruffle-imports.js';\n\nconst lAudioContext = (typeof AudioContext !== 'undefined' ? AudioContext : webkitAudioContext);\nlet wasm;\n\nconst heap = new Array(32).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet heap_next = heap.length;\n\nfunction dropObject(idx) {\n    if (idx < 36) return;\n    heap[idx] = heap_next;\n    heap_next = idx;\n}\n\nfunction takeObject(idx) {\n    const ret = getObject(idx);\n    dropObject(idx);\n    return ret;\n}\n\nfunction addHeapObject(obj) {\n    if (heap_next === heap.length) heap.push(heap.length + 1);\n    const idx = heap_next;\n    heap_next = heap[idx];\n\n    heap[idx] = obj;\n    return idx;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nlet cachegetUint8Memory0 = null;\nfunction getUint8Memory0() {\n    if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n        cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n    }\n    return cachegetUint8Memory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n    return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet cachedTextEncoder = new TextEncoder('utf-8');\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n    ? function (arg, view) {\n    return cachedTextEncoder.encodeInto(arg, view);\n}\n    : function (arg, view) {\n    const buf = cachedTextEncoder.encode(arg);\n    view.set(buf);\n    return {\n        read: arg.length,\n        written: buf.length\n    };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n    if (realloc === undefined) {\n        const buf = cachedTextEncoder.encode(arg);\n        const ptr = malloc(buf.length);\n        getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n        WASM_VECTOR_LEN = buf.length;\n        return ptr;\n    }\n\n    let len = arg.length;\n    let ptr = malloc(len);\n\n    const mem = getUint8Memory0();\n\n    let offset = 0;\n\n    for (; offset < len; offset++) {\n        const code = arg.charCodeAt(offset);\n        if (code > 0x7F) break;\n        mem[ptr + offset] = code;\n    }\n\n    if (offset !== len) {\n        if (offset !== 0) {\n            arg = arg.slice(offset);\n        }\n        ptr = realloc(ptr, len, len = offset + arg.length * 3);\n        const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n        const ret = encodeString(arg, view);\n\n        offset += ret.written;\n    }\n\n    WASM_VECTOR_LEN = offset;\n    return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\nfunction getInt32Memory0() {\n    if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n        cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n    }\n    return cachegetInt32Memory0;\n}\n\nfunction isLikeNone(x) {\n    return x === undefined || x === null;\n}\n\nlet cachegetFloat64Memory0 = null;\nfunction getFloat64Memory0() {\n    if (cachegetFloat64Memory0 === null || cachegetFloat64Memory0.buffer !== wasm.memory.buffer) {\n        cachegetFloat64Memory0 = new Float64Array(wasm.memory.buffer);\n    }\n    return cachegetFloat64Memory0;\n}\n\nfunction debugString(val) {\n    // primitive types\n    const type = typeof val;\n    if (type == 'number' || type == 'boolean' || val == null) {\n        return  `${val}`;\n    }\n    if (type == 'string') {\n        return `\"${val}\"`;\n    }\n    if (type == 'symbol') {\n        const description = val.description;\n        if (description == null) {\n            return 'Symbol';\n        } else {\n            return `Symbol(${description})`;\n        }\n    }\n    if (type == 'function') {\n        const name = val.name;\n        if (typeof name == 'string' && name.length > 0) {\n            return `Function(${name})`;\n        } else {\n            return 'Function';\n        }\n    }\n    // objects\n    if (Array.isArray(val)) {\n        const length = val.length;\n        let debug = '[';\n        if (length > 0) {\n            debug += debugString(val[0]);\n        }\n        for(let i = 1; i < length; i++) {\n            debug += ', ' + debugString(val[i]);\n        }\n        debug += ']';\n        return debug;\n    }\n    // Test for built-in\n    const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n    let className;\n    if (builtInMatches.length > 1) {\n        className = builtInMatches[1];\n    } else {\n        // Failed to match the standard '[object ClassName]'\n        return toString.call(val);\n    }\n    if (className == 'Object') {\n        // we're a user defined class or Object\n        // JSON.stringify avoids problems with cycles, and is generally much\n        // easier than looping through ownProperties of `val`.\n        try {\n            return 'Object(' + JSON.stringify(val) + ')';\n        } catch (_) {\n            return 'Object';\n        }\n    }\n    // errors\n    if (val instanceof Error) {\n        return `${val.name}: ${val.message}\\n${val.stack}`;\n    }\n    // TODO we could test for more things here, like `Set`s and `Map`s.\n    return className;\n}\n\nfunction makeMutClosure(arg0, arg1, dtor, f) {\n    const state = { a: arg0, b: arg1, cnt: 1, dtor };\n    const real = (...args) => {\n        // First up with a closure we increment the internal reference\n        // count. This ensures that the Rust closure environment won't\n        // be deallocated while we're invoking it.\n        state.cnt++;\n        const a = state.a;\n        state.a = 0;\n        try {\n            return f(a, state.b, ...args);\n        } finally {\n            if (--state.cnt === 0) {\n                wasm.__wbindgen_export_2.get(state.dtor)(a, state.b);\n\n            } else {\n                state.a = a;\n            }\n        }\n    };\n    real.original = state;\n\n    return real;\n}\nfunction __wbg_adapter_32(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h0eb418e044fe8e5c(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_35(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h0eb418e044fe8e5c(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_38(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h0eb418e044fe8e5c(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_41(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h0eb418e044fe8e5c(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_44(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h0eb418e044fe8e5c(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_47(arg0, arg1) {\n    wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hf43929b52814893c(arg0, arg1);\n}\n\nfunction __wbg_adapter_50(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h291967fc56df1dbd(arg0, arg1, arg2);\n}\n\nfunction __wbg_adapter_53(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h0eb418e044fe8e5c(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_56(arg0, arg1, arg2) {\n    wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h82a10ca5ab1cea38(arg0, arg1, addHeapObject(arg2));\n}\n\nlet cachegetFloat32Memory0 = null;\nfunction getFloat32Memory0() {\n    if (cachegetFloat32Memory0 === null || cachegetFloat32Memory0.buffer !== wasm.memory.buffer) {\n        cachegetFloat32Memory0 = new Float32Array(wasm.memory.buffer);\n    }\n    return cachegetFloat32Memory0;\n}\n\nfunction getArrayF32FromWasm0(ptr, len) {\n    return getFloat32Memory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nlet stack_pointer = 32;\n\nfunction addBorrowedObject(obj) {\n    if (stack_pointer == 1) throw new Error('out of js stack');\n    heap[--stack_pointer] = obj;\n    return stack_pointer;\n}\n\nlet cachegetUint32Memory0 = null;\nfunction getUint32Memory0() {\n    if (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) {\n        cachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer);\n    }\n    return cachegetUint32Memory0;\n}\n\nfunction passArrayJsValueToWasm0(array, malloc) {\n    const ptr = malloc(array.length * 4);\n    const mem = getUint32Memory0();\n    for (let i = 0; i < array.length; i++) {\n        mem[ptr / 4 + i] = addHeapObject(array[i]);\n    }\n    WASM_VECTOR_LEN = array.length;\n    return ptr;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n    return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nfunction handleError(f) {\n    return function () {\n        try {\n            return f.apply(this, arguments);\n\n        } catch (e) {\n            wasm.__wbindgen_exn_store(addHeapObject(e));\n        }\n    };\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n    const ptr = malloc(arg.length * 1);\n    getUint8Memory0().set(arg, ptr / 1);\n    WASM_VECTOR_LEN = arg.length;\n    return ptr;\n}\n/**\n* An opaque handle to a `RuffleInstance` inside the pool.\n*\n* This type is exported to JS, and is used to interact with the library.\n*/\nexport class Ruffle {\n\n    static __wrap(ptr) {\n        const obj = Object.create(Ruffle.prototype);\n        obj.ptr = ptr;\n\n        return obj;\n    }\n\n    free() {\n        const ptr = this.ptr;\n        this.ptr = 0;\n\n        wasm.__wbg_ruffle_free(ptr);\n    }\n    /**\n    * @param {HTMLElement} parent\n    * @param {any} js_player\n    * @param {boolean} allow_script_access\n    * @param {any} config\n    */\n    constructor(parent, js_player, allow_script_access, config) {\n        try {\n            var ret = wasm.ruffle_new(addHeapObject(parent), addHeapObject(js_player), allow_script_access, addBorrowedObject(config));\n            return Ruffle.__wrap(ret);\n        } finally {\n            heap[stack_pointer++] = undefined;\n        }\n    }\n    /**\n    * Stream an arbitrary movie file from (presumably) the Internet.\n    *\n    * This method should only be called once per player.\n    * @param {string} movie_url\n    * @param {any} parameters\n    */\n    stream_from(movie_url, parameters) {\n        try {\n            var ptr0 = passStringToWasm0(movie_url, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n            var len0 = WASM_VECTOR_LEN;\n            wasm.ruffle_stream_from(this.ptr, ptr0, len0, addBorrowedObject(parameters));\n        } finally {\n            heap[stack_pointer++] = undefined;\n        }\n    }\n    /**\n    * Play an arbitrary movie on this instance.\n    *\n    * This method should only be called once per player.\n    * @param {Uint8Array} swf_data\n    * @param {any} parameters\n    */\n    load_data(swf_data, parameters) {\n        try {\n            wasm.ruffle_load_data(this.ptr, addHeapObject(swf_data), addBorrowedObject(parameters));\n        } finally {\n            heap[stack_pointer++] = undefined;\n        }\n    }\n    /**\n    */\n    play() {\n        wasm.ruffle_play(this.ptr);\n    }\n    /**\n    */\n    pause() {\n        wasm.ruffle_pause(this.ptr);\n    }\n    /**\n    */\n    destroy() {\n        wasm.ruffle_destroy(this.ptr);\n    }\n    /**\n    * @param {string} name\n    * @param {any[]} args\n    * @returns {any}\n    */\n    call_exposed_callback(name, args) {\n        var ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        var ptr1 = passArrayJsValueToWasm0(args, wasm.__wbindgen_malloc);\n        var len1 = WASM_VECTOR_LEN;\n        var ret = wasm.ruffle_call_exposed_callback(this.ptr, ptr0, len0, ptr1, len1);\n        return takeObject(ret);\n    }\n    /**\n    * @param {any} observer\n    */\n    set_trace_observer(observer) {\n        wasm.ruffle_set_trace_observer(this.ptr, addHeapObject(observer));\n    }\n    /**\n    * Returns the web AudioContext used by this player.\n    * Returns `None` if the audio backend does not use Web Audio.\n    * @returns {AudioContext | undefined}\n    */\n    audio_context() {\n        var ret = wasm.ruffle_audio_context(this.ptr);\n        return takeObject(ret);\n    }\n}\n\nasync function load(module, imports) {\n    if (typeof Response === 'function' && module instanceof Response) {\n\n        if (typeof WebAssembly.instantiateStreaming === 'function') {\n            try {\n                return await WebAssembly.instantiateStreaming(module, imports);\n\n            } catch (e) {\n                if (module.headers.get('Content-Type') != 'application/wasm') {\n                    console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n                } else {\n                    throw e;\n                }\n            }\n        }\n\n        const bytes = await module.arrayBuffer();\n        return await WebAssembly.instantiate(bytes, imports);\n\n    } else {\n\n        const instance = await WebAssembly.instantiate(module, imports);\n\n        if (instance instanceof WebAssembly.Instance) {\n            return { instance, module };\n\n        } else {\n            return instance;\n        }\n    }\n}\n\nasync function init(input) {\n    if (typeof input === 'undefined') {\n        input = import.meta.url.replace(/\\.js$/, '_bg.wasm');\n    }\n    const imports = {};\n    imports.wbg = {};\n    imports.wbg.__wbindgen_object_drop_ref = function(arg0) {\n        takeObject(arg0);\n    };\n    imports.wbg.__wbindgen_object_clone_ref = function(arg0) {\n        var ret = getObject(arg0);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_cb_drop = function(arg0) {\n        const obj = takeObject(arg0).original;\n        if (obj.cnt-- == 1) {\n            obj.a = 0;\n            return true;\n        }\n        var ret = false;\n        return ret;\n    };\n    imports.wbg.__wbg_copyToAudioBuffer_58f244be94bac1d2 = function(arg0, arg1, arg2, arg3, arg4) {\n        copyToAudioBuffer(getObject(arg0), arg1 === 0 ? undefined : getArrayF32FromWasm0(arg1, arg2), arg3 === 0 ? undefined : getArrayF32FromWasm0(arg3, arg4));\n    };\n    imports.wbg.__wbindgen_string_new = function(arg0, arg1) {\n        var ret = getStringFromWasm0(arg0, arg1);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_new_df6e6ab7a65c4c4d = function(arg0, arg1) {\n        var ret = new Error(getStringFromWasm0(arg0, arg1));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_panic_bbc809dd04a12c60 = function(arg0, arg1) {\n        getObject(arg0).panic(getObject(arg1));\n    };\n    imports.wbg.__wbindgen_is_function = function(arg0) {\n        var ret = typeof(getObject(arg0)) === 'function';\n        return ret;\n    };\n    imports.wbg.__wbindgen_json_serialize = function(arg0, arg1) {\n        const obj = getObject(arg1);\n        var ret = JSON.stringify(obj === undefined ? null : obj);\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbg_isFullscreen_96b85640554e160d = function(arg0) {\n        var ret = getObject(arg0).isFullscreen;\n        return ret;\n    };\n    imports.wbg.__wbg_displayMessage_c57c20204892da2b = function(arg0, arg1, arg2) {\n        getObject(arg0).displayMessage(getStringFromWasm0(arg1, arg2));\n    };\n    imports.wbg.__wbg_onCallbackAvailable_3a48fae397926c96 = function(arg0, arg1, arg2) {\n        getObject(arg0).onCallbackAvailable(getStringFromWasm0(arg1, arg2));\n    };\n    imports.wbg.__wbindgen_number_new = function(arg0) {\n        var ret = arg0;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_new_59cb74e423758ede = function() {\n        var ret = new Error();\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_stack_558ba5917b466edd = function(arg0, arg1) {\n        var ret = getObject(arg1).stack;\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbg_error_4bb6c2a97407129a = function(arg0, arg1) {\n        try {\n            console.error(getStringFromWasm0(arg0, arg1));\n        } finally {\n            wasm.__wbindgen_free(arg0, arg1);\n        }\n    };\n    imports.wbg.__wbindgen_is_undefined = function(arg0) {\n        var ret = getObject(arg0) === undefined;\n        return ret;\n    };\n    imports.wbg.__wbg_instanceof_WebGl2RenderingContext_9818b789249374d3 = function(arg0) {\n        var ret = getObject(arg0) instanceof WebGL2RenderingContext;\n        return ret;\n    };\n    imports.wbg.__wbg_bindVertexArray_569f8b5466293fb0 = function(arg0, arg1) {\n        getObject(arg0).bindVertexArray(getObject(arg1));\n    };\n    imports.wbg.__wbg_blitFramebuffer_4b472bb45062bd6e = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) {\n        getObject(arg0).blitFramebuffer(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9 >>> 0, arg10 >>> 0);\n    };\n    imports.wbg.__wbg_createVertexArray_1f35f6d163bbae13 = function(arg0) {\n        var ret = getObject(arg0).createVertexArray();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_renderbufferStorageMultisample_0426ba65de4885db = function(arg0, arg1, arg2, arg3, arg4, arg5) {\n        getObject(arg0).renderbufferStorageMultisample(arg1 >>> 0, arg2, arg3 >>> 0, arg4, arg5);\n    };\n    imports.wbg.__wbg_texImage2D_79c0e000ef5e1b0a = handleError(function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) {\n        getObject(arg0).texImage2D(arg1 >>> 0, arg2, arg3, arg4, arg5, arg6, arg7 >>> 0, arg8 >>> 0, arg9 === 0 ? undefined : getArrayU8FromWasm0(arg9, arg10));\n    });\n    imports.wbg.__wbg_bindFramebuffer_4a37c2a7678c0994 = function(arg0, arg1, arg2) {\n        getObject(arg0).bindFramebuffer(arg1 >>> 0, getObject(arg2));\n    };\n    imports.wbg.__wbg_bindRenderbuffer_203ad50a30ad3c0d = function(arg0, arg1, arg2) {\n        getObject(arg0).bindRenderbuffer(arg1 >>> 0, getObject(arg2));\n    };\n    imports.wbg.__wbg_bindTexture_f3ab6393f75a763f = function(arg0, arg1, arg2) {\n        getObject(arg0).bindTexture(arg1 >>> 0, getObject(arg2));\n    };\n    imports.wbg.__wbg_createFramebuffer_d01ac1b4f7c704e5 = function(arg0) {\n        var ret = getObject(arg0).createFramebuffer();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_createRenderbuffer_c008c3bb50dfff9d = function(arg0) {\n        var ret = getObject(arg0).createRenderbuffer();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_createTexture_151a385cd028c893 = function(arg0) {\n        var ret = getObject(arg0).createTexture();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_deleteFramebuffer_acd92acda81356e9 = function(arg0, arg1) {\n        getObject(arg0).deleteFramebuffer(getObject(arg1));\n    };\n    imports.wbg.__wbg_deleteRenderbuffer_b67ff9026d2be0fd = function(arg0, arg1) {\n        getObject(arg0).deleteRenderbuffer(getObject(arg1));\n    };\n    imports.wbg.__wbg_deleteTexture_125ab82d8330e268 = function(arg0, arg1) {\n        getObject(arg0).deleteTexture(getObject(arg1));\n    };\n    imports.wbg.__wbg_framebufferRenderbuffer_5293612146bd869a = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).framebufferRenderbuffer(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, getObject(arg4));\n    };\n    imports.wbg.__wbg_framebufferTexture2D_5b8575bda5aeceeb = function(arg0, arg1, arg2, arg3, arg4, arg5) {\n        getObject(arg0).framebufferTexture2D(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, getObject(arg4), arg5);\n    };\n    imports.wbg.__wbg_getError_609a7fa815fd3d84 = function(arg0) {\n        var ret = getObject(arg0).getError();\n        return ret;\n    };\n    imports.wbg.__wbg_getParameter_be1e4b3ba2c0c339 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).getParameter(arg1 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_texParameteri_6e7ba8c54bb639f2 = function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).texParameteri(arg1 >>> 0, arg2 >>> 0, arg3);\n    };\n    imports.wbg.__wbg_instanceof_Window_49f532f06a9786ee = function(arg0) {\n        var ret = getObject(arg0) instanceof Window;\n        return ret;\n    };\n    imports.wbg.__wbg_document_c0366b39e4f4c89a = function(arg0) {\n        var ret = getObject(arg0).document;\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_location_c1e50a6e4c53d45c = function(arg0) {\n        var ret = getObject(arg0).location;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_navigator_95ba9cd684cf90aa = function(arg0) {\n        var ret = getObject(arg0).navigator;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_devicePixelRatio_268c49438a600d53 = function(arg0) {\n        var ret = getObject(arg0).devicePixelRatio;\n        return ret;\n    };\n    imports.wbg.__wbg_performance_87e4f3b6f966469f = function(arg0) {\n        var ret = getObject(arg0).performance;\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_localStorage_a6fd83fc300473fc = handleError(function(arg0) {\n        var ret = getObject(arg0).localStorage;\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    });\n    imports.wbg.__wbg_cancelAnimationFrame_60f9cf59ec1c0125 = handleError(function(arg0, arg1) {\n        getObject(arg0).cancelAnimationFrame(arg1);\n    });\n    imports.wbg.__wbg_focus_ab7792954990fdb9 = handleError(function(arg0) {\n        getObject(arg0).focus();\n    });\n    imports.wbg.__wbg_open_f355af0fd051a9d8 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        var ret = getObject(arg0).open(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    });\n    imports.wbg.__wbg_requestAnimationFrame_ef0e2294dc8b1088 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).requestAnimationFrame(getObject(arg1));\n        return ret;\n    });\n    imports.wbg.__wbg_fetch_f532e04b8fe49aa0 = function(arg0, arg1) {\n        var ret = getObject(arg0).fetch(getObject(arg1));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_destination_4b8bc48ce4ebcd6c = function(arg0) {\n        var ret = getObject(arg0).destination;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_sampleRate_0d2637cc084b2eaf = function(arg0) {\n        var ret = getObject(arg0).sampleRate;\n        return ret;\n    };\n    imports.wbg.__wbg_currentTime_1bc83619afbf9e72 = function(arg0) {\n        var ret = getObject(arg0).currentTime;\n        return ret;\n    };\n    imports.wbg.__wbg_new_2f70ca6da1976429 = handleError(function() {\n        var ret = new lAudioContext();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_suspend_ad6a97ee4bac3247 = handleError(function(arg0) {\n        var ret = getObject(arg0).suspend();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_createBuffer_48e051aa20c4ba3e = handleError(function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).createBuffer(arg1 >>> 0, arg2 >>> 0, arg3);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_createBufferSource_0e160528349a924b = handleError(function(arg0) {\n        var ret = getObject(arg0).createBufferSource();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_createChannelMerger_8e8d29d53323df91 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).createChannelMerger(arg1 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_createChannelSplitter_10fc5fe404818afc = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).createChannelSplitter(arg1 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_createGain_a6211e4c615a1141 = handleError(function(arg0) {\n        var ret = getObject(arg0).createGain();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_createScriptProcessor_e755612398f80dd4 = handleError(function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).createScriptProcessor(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_decodeAudioData_1a1e91ec5cd60d59 = handleError(function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).decodeAudioData(getObject(arg1), getObject(arg2), getObject(arg3));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_resume_6dd89ae2f9b0bef3 = handleError(function(arg0) {\n        var ret = getObject(arg0).resume();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_linearRampToValueAtTime_02ce948b9b4323e0 = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).linearRampToValueAtTime(arg1, arg2);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_setValueAtTime_788b65cf85b7ba6a = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).setValueAtTime(arg1, arg2);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_userAgent_b9c7a338061adca8 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg1).userAgent;\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    });\n    imports.wbg.__wbg_baseURI_1fe61dc0a39a61ed = handleError(function(arg0, arg1) {\n        var ret = getObject(arg1).baseURI;\n        var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    });\n    imports.wbg.__wbg_appendChild_7c45aeccd496f2a5 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).appendChild(getObject(arg1));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_removeChild_1e1942a296b255c1 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).removeChild(getObject(arg1));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_gain_688543a4eee1eece = function(arg0) {\n        var ret = getObject(arg0).gain;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_protocol_791396029743ce88 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg1).protocol;\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    });\n    imports.wbg.__wbg_assign_8948549eb7c584b7 = handleError(function(arg0, arg1, arg2) {\n        getObject(arg0).assign(getStringFromWasm0(arg1, arg2));\n    });\n    imports.wbg.__wbg_new_0af3e1641443f13d = handleError(function() {\n        var ret = new Path2D();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_addPath_0b9c6299797f0772 = function(arg0, arg1, arg2) {\n        getObject(arg0).addPath(getObject(arg1), getObject(arg2));\n    };\n    imports.wbg.__wbg_closePath_6e9529e4d6da5e83 = function(arg0) {\n        getObject(arg0).closePath();\n    };\n    imports.wbg.__wbg_lineTo_2157bf4d1b0ce0d3 = function(arg0, arg1, arg2) {\n        getObject(arg0).lineTo(arg1, arg2);\n    };\n    imports.wbg.__wbg_moveTo_fb2215902520c649 = function(arg0, arg1, arg2) {\n        getObject(arg0).moveTo(arg1, arg2);\n    };\n    imports.wbg.__wbg_quadraticCurveTo_9c392c57a794a2d2 = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).quadraticCurveTo(arg1, arg2, arg3, arg4);\n    };\n    imports.wbg.__wbg_get_29a9ce40981b8710 = handleError(function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg1)[getStringFromWasm0(arg2, arg3)];\n        var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    });\n    imports.wbg.__wbg_set_13ecdf3c7967382d = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0)[getStringFromWasm0(arg1, arg2)] = getStringFromWasm0(arg3, arg4);\n    });\n    imports.wbg.__wbg_delete_2c0adda5d0edea03 = handleError(function(arg0, arg1, arg2) {\n        delete getObject(arg0)[getStringFromWasm0(arg1, arg2)];\n    });\n    imports.wbg.__wbg_length_da24898717a463e0 = function(arg0) {\n        var ret = getObject(arg0).length;\n        return ret;\n    };\n    imports.wbg.__wbg_setProperty_46b9bd1b0fad730b = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).setProperty(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n    });\n    imports.wbg.__wbg_offsetX_4bd8c9fcb457cf0b = function(arg0) {\n        var ret = getObject(arg0).offsetX;\n        return ret;\n    };\n    imports.wbg.__wbg_offsetY_0dde12490e8ebfba = function(arg0) {\n        var ret = getObject(arg0).offsetY;\n        return ret;\n    };\n    imports.wbg.__wbg_button_9e74bd912190b055 = function(arg0) {\n        var ret = getObject(arg0).button;\n        return ret;\n    };\n    imports.wbg.__wbg_instanceof_SvgsvgElement_aa3f79a2638c5f44 = function(arg0) {\n        var ret = getObject(arg0) instanceof SVGSVGElement;\n        return ret;\n    };\n    imports.wbg.__wbg_createSVGMatrix_9088b605b3cbb935 = function(arg0) {\n        var ret = getObject(arg0).createSVGMatrix();\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_connect_607a0c51b546a3db = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).connect(getObject(arg1));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_connect_a4236fe1b645b8fb = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).connect(getObject(arg1), arg2 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_connect_db97a7bc9cd258c6 = handleError(function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).connect(getObject(arg1), arg2 >>> 0, arg3 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_disconnect_1f5d0443b0bca9c8 = handleError(function(arg0) {\n        getObject(arg0).disconnect();\n    });\n    imports.wbg.__wbg_outputBuffer_1fc843f5ddfd743b = handleError(function(arg0) {\n        var ret = getObject(arg0).outputBuffer;\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_setTransform_041d67e3d6972fd7 = function(arg0, arg1) {\n        getObject(arg0).setTransform(getObject(arg1));\n    };\n    imports.wbg.__wbg_bindVertexArrayOES_17e98f43d896f40b = function(arg0, arg1) {\n        getObject(arg0).bindVertexArrayOES(getObject(arg1));\n    };\n    imports.wbg.__wbg_createVertexArrayOES_393e00fa6f931f59 = function(arg0) {\n        var ret = getObject(arg0).createVertexArrayOES();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_seta_6c309b33d9a4fb29 = function(arg0, arg1) {\n        getObject(arg0).a = arg1;\n    };\n    imports.wbg.__wbg_setb_378147d7ba767ab1 = function(arg0, arg1) {\n        getObject(arg0).b = arg1;\n    };\n    imports.wbg.__wbg_setc_cc36b264b7a1ae60 = function(arg0, arg1) {\n        getObject(arg0).c = arg1;\n    };\n    imports.wbg.__wbg_setd_998c5989f5780653 = function(arg0, arg1) {\n        getObject(arg0).d = arg1;\n    };\n    imports.wbg.__wbg_sete_42bf2f390f25e536 = function(arg0, arg1) {\n        getObject(arg0).e = arg1;\n    };\n    imports.wbg.__wbg_setf_df5aef1469b0c50b = function(arg0, arg1) {\n        getObject(arg0).f = arg1;\n    };\n    imports.wbg.__wbg_deltaY_2722120e563d3160 = function(arg0) {\n        var ret = getObject(arg0).deltaY;\n        return ret;\n    };\n    imports.wbg.__wbg_deltaMode_3db3c9c4bedf191d = function(arg0) {\n        var ret = getObject(arg0).deltaMode;\n        return ret;\n    };\n    imports.wbg.__wbg_setbuffer_8c396e74724eda12 = function(arg0, arg1) {\n        getObject(arg0).buffer = getObject(arg1);\n    };\n    imports.wbg.__wbg_setloop_1e141edefc26db22 = function(arg0, arg1) {\n        getObject(arg0).loop = arg1 !== 0;\n    };\n    imports.wbg.__wbg_setloopStart_4162b0a533fbc0d5 = function(arg0, arg1) {\n        getObject(arg0).loopStart = arg1;\n    };\n    imports.wbg.__wbg_setloopEnd_e81eb72ea2277d88 = function(arg0, arg1) {\n        getObject(arg0).loopEnd = arg1;\n    };\n    imports.wbg.__wbg_setonended_f6f3e04e13c07db4 = function(arg0, arg1) {\n        getObject(arg0).onended = getObject(arg1);\n    };\n    imports.wbg.__wbg_start_f5e66921db9afaee = handleError(function(arg0) {\n        getObject(arg0).start();\n    });\n    imports.wbg.__wbg_start_0237410bb20c6213 = handleError(function(arg0, arg1, arg2) {\n        getObject(arg0).start(arg1, arg2);\n    });\n    imports.wbg.__wbg_stop_5765c7cac3ec1564 = handleError(function(arg0, arg1) {\n        getObject(arg0).stop(arg1);\n    });\n    imports.wbg.__wbg_instanceof_HtmlFormElement_26283084b0956b17 = function(arg0) {\n        var ret = getObject(arg0) instanceof HTMLFormElement;\n        return ret;\n    };\n    imports.wbg.__wbg_submit_121b8e3bd960f229 = handleError(function(arg0) {\n        getObject(arg0).submit();\n    });\n    imports.wbg.__wbg_pointerId_602db5c989b38cc0 = function(arg0) {\n        var ret = getObject(arg0).pointerId;\n        return ret;\n    };\n    imports.wbg.__wbg_instanceof_Response_f52c65c389890639 = function(arg0) {\n        var ret = getObject(arg0) instanceof Response;\n        return ret;\n    };\n    imports.wbg.__wbg_arrayBuffer_0ba17dfaad804b6f = handleError(function(arg0) {\n        var ret = getObject(arg0).arrayBuffer();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_key_d9b602f48baca7bc = function(arg0, arg1) {\n        var ret = getObject(arg1).key;\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbg_code_cbf76ad384ae1179 = function(arg0, arg1) {\n        var ret = getObject(arg1).code;\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbg_now_7628760b7b640632 = function(arg0) {\n        var ret = getObject(arg0).now();\n        return ret;\n    };\n    imports.wbg.__wbg_newwithstrandinit_11debb554792e043 = handleError(function(arg0, arg1, arg2) {\n        var ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_setonaudioprocess_66d0b1fa0dd39606 = function(arg0, arg1) {\n        getObject(arg0).onaudioprocess = getObject(arg1);\n    };\n    imports.wbg.__wbg_body_c8cb19d760637268 = function(arg0) {\n        var ret = getObject(arg0).body;\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_createElement_99351c8bf0efac6e = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).createElement(getStringFromWasm0(arg1, arg2));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_createElementNS_a7ef126eff5022c2 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        var ret = getObject(arg0).createElementNS(arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_setid_f33ce4e43b43f57a = function(arg0, arg1, arg2) {\n        getObject(arg0).id = getStringFromWasm0(arg1, arg2);\n    };\n    imports.wbg.__wbg_clientWidth_2c84a7ebc75dd4f0 = function(arg0) {\n        var ret = getObject(arg0).clientWidth;\n        return ret;\n    };\n    imports.wbg.__wbg_clientHeight_f56dfe03d1c42f3e = function(arg0) {\n        var ret = getObject(arg0).clientHeight;\n        return ret;\n    };\n    imports.wbg.__wbg_setinnerHTML_79084edd97462c07 = function(arg0, arg1, arg2) {\n        getObject(arg0).innerHTML = getStringFromWasm0(arg1, arg2);\n    };\n    imports.wbg.__wbg_querySelector_155b00165b78a12f = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).querySelector(getStringFromWasm0(arg1, arg2));\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    });\n    imports.wbg.__wbg_releasePointerCapture_4b78cb9c51d4a539 = handleError(function(arg0, arg1) {\n        getObject(arg0).releasePointerCapture(arg1);\n    });\n    imports.wbg.__wbg_setAttribute_e71b9086539f06a1 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).setAttribute(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n    });\n    imports.wbg.__wbg_setAttributeNS_a66240d5c750d0fa = handleError(function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {\n        getObject(arg0).setAttributeNS(arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4), getStringFromWasm0(arg5, arg6));\n    });\n    imports.wbg.__wbg_setPointerCapture_54ee987062d42d03 = handleError(function(arg0, arg1) {\n        getObject(arg0).setPointerCapture(arg1);\n    });\n    imports.wbg.__wbg_remove_0639495587b1aaeb = function(arg0) {\n        getObject(arg0).remove();\n    };\n    imports.wbg.__wbg_instanceof_WebGlRenderingContext_ef4e51c6e4133d85 = function(arg0) {\n        var ret = getObject(arg0) instanceof WebGLRenderingContext;\n        return ret;\n    };\n    imports.wbg.__wbg_drawingBufferWidth_fab3e20dd1ba5d4e = function(arg0) {\n        var ret = getObject(arg0).drawingBufferWidth;\n        return ret;\n    };\n    imports.wbg.__wbg_drawingBufferHeight_31bc93d4dc3a0dcc = function(arg0) {\n        var ret = getObject(arg0).drawingBufferHeight;\n        return ret;\n    };\n    imports.wbg.__wbg_bufferData_d47c8467e443121d = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).bufferData(arg1 >>> 0, getArrayU8FromWasm0(arg2, arg3), arg4 >>> 0);\n    };\n    imports.wbg.__wbg_texImage2D_a4011abffe0229fb = handleError(function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) {\n        getObject(arg0).texImage2D(arg1 >>> 0, arg2, arg3, arg4, arg5, arg6, arg7 >>> 0, arg8 >>> 0, arg9 === 0 ? undefined : getArrayU8FromWasm0(arg9, arg10));\n    });\n    imports.wbg.__wbg_uniform1fv_cd9d2dea0641919d = function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).uniform1fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3));\n    };\n    imports.wbg.__wbg_uniform4fv_24ef46675c137552 = function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).uniform4fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3));\n    };\n    imports.wbg.__wbg_uniformMatrix3fv_a0a261980af4587d = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).uniformMatrix3fv(getObject(arg1), arg2 !== 0, getArrayF32FromWasm0(arg3, arg4));\n    };\n    imports.wbg.__wbg_uniformMatrix4fv_088c96db8ee28c1d = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).uniformMatrix4fv(getObject(arg1), arg2 !== 0, getArrayF32FromWasm0(arg3, arg4));\n    };\n    imports.wbg.__wbg_activeTexture_a51ec6273de88bc6 = function(arg0, arg1) {\n        getObject(arg0).activeTexture(arg1 >>> 0);\n    };\n    imports.wbg.__wbg_attachShader_0dd248f6ab98fcf2 = function(arg0, arg1, arg2) {\n        getObject(arg0).attachShader(getObject(arg1), getObject(arg2));\n    };\n    imports.wbg.__wbg_bindBuffer_1ceb83e9674e812a = function(arg0, arg1, arg2) {\n        getObject(arg0).bindBuffer(arg1 >>> 0, getObject(arg2));\n    };\n    imports.wbg.__wbg_bindFramebuffer_d8f98d1a7f6d67d1 = function(arg0, arg1, arg2) {\n        getObject(arg0).bindFramebuffer(arg1 >>> 0, getObject(arg2));\n    };\n    imports.wbg.__wbg_bindRenderbuffer_1ba9206d5f319ae1 = function(arg0, arg1, arg2) {\n        getObject(arg0).bindRenderbuffer(arg1 >>> 0, getObject(arg2));\n    };\n    imports.wbg.__wbg_bindTexture_6121e6db3f879582 = function(arg0, arg1, arg2) {\n        getObject(arg0).bindTexture(arg1 >>> 0, getObject(arg2));\n    };\n    imports.wbg.__wbg_blendFunc_34a6bb31770822c5 = function(arg0, arg1, arg2) {\n        getObject(arg0).blendFunc(arg1 >>> 0, arg2 >>> 0);\n    };\n    imports.wbg.__wbg_clear_f6b2dd48aeed2752 = function(arg0, arg1) {\n        getObject(arg0).clear(arg1 >>> 0);\n    };\n    imports.wbg.__wbg_clearColor_89f7819aa9f80129 = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).clearColor(arg1, arg2, arg3, arg4);\n    };\n    imports.wbg.__wbg_colorMask_88ebee15531b14ef = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).colorMask(arg1 !== 0, arg2 !== 0, arg3 !== 0, arg4 !== 0);\n    };\n    imports.wbg.__wbg_compileShader_28bdbafe4445d24b = function(arg0, arg1) {\n        getObject(arg0).compileShader(getObject(arg1));\n    };\n    imports.wbg.__wbg_createBuffer_acedc3831832a280 = function(arg0) {\n        var ret = getObject(arg0).createBuffer();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_createProgram_7e2f44b7b74694d4 = function(arg0) {\n        var ret = getObject(arg0).createProgram();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_createShader_64c474f1d1d0c1f8 = function(arg0, arg1) {\n        var ret = getObject(arg0).createShader(arg1 >>> 0);\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_createTexture_0a156dab1efc3499 = function(arg0) {\n        var ret = getObject(arg0).createTexture();\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_disable_5b9c6f74d5efd3a5 = function(arg0, arg1) {\n        getObject(arg0).disable(arg1 >>> 0);\n    };\n    imports.wbg.__wbg_disableVertexAttribArray_ba8f39ecd28c601b = function(arg0, arg1) {\n        getObject(arg0).disableVertexAttribArray(arg1 >>> 0);\n    };\n    imports.wbg.__wbg_drawElements_3eb5ba8a511ce0f0 = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).drawElements(arg1 >>> 0, arg2, arg3 >>> 0, arg4);\n    };\n    imports.wbg.__wbg_enable_87f39f6396535e1f = function(arg0, arg1) {\n        getObject(arg0).enable(arg1 >>> 0);\n    };\n    imports.wbg.__wbg_enableVertexAttribArray_f29c8dde9c8c5cf5 = function(arg0, arg1) {\n        getObject(arg0).enableVertexAttribArray(arg1 >>> 0);\n    };\n    imports.wbg.__wbg_getAttribLocation_ba61f837da80e249 = function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).getAttribLocation(getObject(arg1), getStringFromWasm0(arg2, arg3));\n        return ret;\n    };\n    imports.wbg.__wbg_getExtension_c6863c255090d82f = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).getExtension(getStringFromWasm0(arg1, arg2));\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    });\n    imports.wbg.__wbg_getParameter_ff687a6ea303e551 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).getParameter(arg1 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_getProgramInfoLog_aacf06c959070653 = function(arg0, arg1, arg2) {\n        var ret = getObject(arg1).getProgramInfoLog(getObject(arg2));\n        var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbg_getProgramParameter_a89bf14502c109f7 = function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).getProgramParameter(getObject(arg1), arg2 >>> 0);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_getShaderInfoLog_1eb885f2468e2429 = function(arg0, arg1, arg2) {\n        var ret = getObject(arg1).getShaderInfoLog(getObject(arg2));\n        var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbg_getUniformLocation_ca853de4f2f9270d = function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).getUniformLocation(getObject(arg1), getStringFromWasm0(arg2, arg3));\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_linkProgram_46a36cb158f10676 = function(arg0, arg1) {\n        getObject(arg0).linkProgram(getObject(arg1));\n    };\n    imports.wbg.__wbg_pixelStorei_31f6dc244bf4cd5b = function(arg0, arg1, arg2) {\n        getObject(arg0).pixelStorei(arg1 >>> 0, arg2);\n    };\n    imports.wbg.__wbg_shaderSource_700ae72fca39850d = function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).shaderSource(getObject(arg1), getStringFromWasm0(arg2, arg3));\n    };\n    imports.wbg.__wbg_stencilFunc_cc85d77d2098446b = function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).stencilFunc(arg1 >>> 0, arg2, arg3 >>> 0);\n    };\n    imports.wbg.__wbg_stencilMask_ed2cded2c2b0b72c = function(arg0, arg1) {\n        getObject(arg0).stencilMask(arg1 >>> 0);\n    };\n    imports.wbg.__wbg_stencilOp_1b3529546c1fdcc2 = function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).stencilOp(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0);\n    };\n    imports.wbg.__wbg_texParameteri_e45f3977eb998137 = function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).texParameteri(arg1 >>> 0, arg2 >>> 0, arg3);\n    };\n    imports.wbg.__wbg_uniform1f_3eb09312a513b94a = function(arg0, arg1, arg2) {\n        getObject(arg0).uniform1f(getObject(arg1), arg2);\n    };\n    imports.wbg.__wbg_uniform1i_e76b668973ae0655 = function(arg0, arg1, arg2) {\n        getObject(arg0).uniform1i(getObject(arg1), arg2);\n    };\n    imports.wbg.__wbg_useProgram_d63a57db0571e803 = function(arg0, arg1) {\n        getObject(arg0).useProgram(getObject(arg1));\n    };\n    imports.wbg.__wbg_vertexAttribPointer_b4b829a4f5a3778e = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {\n        getObject(arg0).vertexAttribPointer(arg1 >>> 0, arg2, arg3 >>> 0, arg4 !== 0, arg5, arg6);\n    };\n    imports.wbg.__wbg_viewport_54305c74f5668b33 = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).viewport(arg1, arg2, arg3, arg4);\n    };\n    imports.wbg.__wbg_debug_146b863607d79e9d = function(arg0) {\n        console.debug(getObject(arg0));\n    };\n    imports.wbg.__wbg_error_e325755affc8634b = function(arg0) {\n        console.error(getObject(arg0));\n    };\n    imports.wbg.__wbg_info_d60054f760c729cc = function(arg0) {\n        console.info(getObject(arg0));\n    };\n    imports.wbg.__wbg_log_f2e13ca55da8bad3 = function(arg0) {\n        console.log(getObject(arg0));\n    };\n    imports.wbg.__wbg_warn_9e92ccdc67085e1b = function(arg0) {\n        console.warn(getObject(arg0));\n    };\n    imports.wbg.__wbg_style_9b773f0fc441eddc = function(arg0) {\n        var ret = getObject(arg0).style;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_newwithbuffersourcesequenceandoptions_03294a518a0bd99a = handleError(function(arg0, arg1) {\n        var ret = new Blob(getObject(arg0), getObject(arg1));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_currentTarget_b545d0d803b3a62e = function(arg0) {\n        var ret = getObject(arg0).currentTarget;\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    };\n    imports.wbg.__wbg_preventDefault_9aab6c264e5df3ee = function(arg0) {\n        getObject(arg0).preventDefault();\n    };\n    imports.wbg.__wbg_addEventListener_6a37bc32387cb66d = handleError(function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n    });\n    imports.wbg.__wbg_addEventListener_a422088e686210b5 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4));\n    });\n    imports.wbg.__wbg_addEventListener_50b4229556ab0b83 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);\n    });\n    imports.wbg.__wbg_removeEventListener_70dfb387da1982ac = handleError(function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n    });\n    imports.wbg.__wbg_removeEventListener_4448b273b47328f8 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);\n    });\n    imports.wbg.__wbg_instanceof_HtmlCanvasElement_7bd3ee7838f11fc3 = function(arg0) {\n        var ret = getObject(arg0) instanceof HTMLCanvasElement;\n        return ret;\n    };\n    imports.wbg.__wbg_width_0efa4604d41c58c5 = function(arg0) {\n        var ret = getObject(arg0).width;\n        return ret;\n    };\n    imports.wbg.__wbg_setwidth_1d0e975feecff3ef = function(arg0, arg1) {\n        getObject(arg0).width = arg1 >>> 0;\n    };\n    imports.wbg.__wbg_height_aa24e3fef658c4a8 = function(arg0) {\n        var ret = getObject(arg0).height;\n        return ret;\n    };\n    imports.wbg.__wbg_setheight_7758ee3ff5c65474 = function(arg0, arg1) {\n        getObject(arg0).height = arg1 >>> 0;\n    };\n    imports.wbg.__wbg_getContext_3db9399e6dc524ff = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).getContext(getStringFromWasm0(arg1, arg2));\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    });\n    imports.wbg.__wbg_getContext_93be69215ea9dbbf = handleError(function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).getContext(getStringFromWasm0(arg1, arg2), getObject(arg3));\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    });\n    imports.wbg.__wbg_setsrc_ca894d724570195d = function(arg0, arg1, arg2) {\n        getObject(arg0).src = getStringFromWasm0(arg1, arg2);\n    };\n    imports.wbg.__wbg_new_1f2ded01c889cd38 = handleError(function() {\n        var ret = new Image();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_newwithwidthandheight_0f3a13502ca94c49 = handleError(function(arg0, arg1) {\n        var ret = new Image(arg0 >>> 0, arg1 >>> 0);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_data_55e064fddf34cf3b = function(arg0, arg1) {\n        var ret = getObject(arg1).data;\n        var ptr0 = passArray8ToWasm0(ret, wasm.__wbindgen_malloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbg_instanceof_CanvasRenderingContext2d_1d38418d1d6c8b34 = function(arg0) {\n        var ret = getObject(arg0) instanceof CanvasRenderingContext2D;\n        return ret;\n    };\n    imports.wbg.__wbg_setglobalAlpha_b4134dbd884b4d37 = function(arg0, arg1) {\n        getObject(arg0).globalAlpha = arg1;\n    };\n    imports.wbg.__wbg_setglobalCompositeOperation_557a59a0ccf673d6 = handleError(function(arg0, arg1, arg2) {\n        getObject(arg0).globalCompositeOperation = getStringFromWasm0(arg1, arg2);\n    });\n    imports.wbg.__wbg_setstrokeStyle_7f507e0d838e3dcf = function(arg0, arg1) {\n        getObject(arg0).strokeStyle = getObject(arg1);\n    };\n    imports.wbg.__wbg_setfillStyle_bbe97cb93eb1b55c = function(arg0, arg1) {\n        getObject(arg0).fillStyle = getObject(arg1);\n    };\n    imports.wbg.__wbg_setfilter_df75805bea0a8415 = function(arg0, arg1, arg2) {\n        getObject(arg0).filter = getStringFromWasm0(arg1, arg2);\n    };\n    imports.wbg.__wbg_setlineWidth_61de9d1eb4e9f8a6 = function(arg0, arg1) {\n        getObject(arg0).lineWidth = arg1;\n    };\n    imports.wbg.__wbg_setlineCap_bff1a8858c9f067e = function(arg0, arg1, arg2) {\n        getObject(arg0).lineCap = getStringFromWasm0(arg1, arg2);\n    };\n    imports.wbg.__wbg_setlineJoin_de47815c918d7874 = function(arg0, arg1, arg2) {\n        getObject(arg0).lineJoin = getStringFromWasm0(arg1, arg2);\n    };\n    imports.wbg.__wbg_setmiterLimit_84b1a1dbddcd456a = function(arg0, arg1) {\n        getObject(arg0).miterLimit = arg1;\n    };\n    imports.wbg.__wbg_drawImage_b8dec9034bf1d116 = handleError(function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).drawImage(getObject(arg1), arg2, arg3);\n    });\n    imports.wbg.__wbg_drawImage_801ad094f4734689 = handleError(function(arg0, arg1, arg2, arg3) {\n        getObject(arg0).drawImage(getObject(arg1), arg2, arg3);\n    });\n    imports.wbg.__wbg_fill_6c721ab8eec90f70 = function(arg0, arg1) {\n        getObject(arg0).fill(getObject(arg1));\n    };\n    imports.wbg.__wbg_stroke_e25cf47e0d9a36c3 = function(arg0, arg1) {\n        getObject(arg0).stroke(getObject(arg1));\n    };\n    imports.wbg.__wbg_createPattern_006b6402db95df36 = handleError(function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).createPattern(getObject(arg1), getStringFromWasm0(arg2, arg3));\n        return isLikeNone(ret) ? 0 : addHeapObject(ret);\n    });\n    imports.wbg.__wbg_getImageData_dd3caac873bf461f = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n        var ret = getObject(arg0).getImageData(arg1, arg2, arg3, arg4);\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_clearRect_6af85454d06df5fa = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).clearRect(arg1, arg2, arg3, arg4);\n    };\n    imports.wbg.__wbg_fillRect_c79d1b386c04efed = function(arg0, arg1, arg2, arg3, arg4) {\n        getObject(arg0).fillRect(arg1, arg2, arg3, arg4);\n    };\n    imports.wbg.__wbg_resetTransform_f78edb82fd1f7239 = handleError(function(arg0) {\n        getObject(arg0).resetTransform();\n    });\n    imports.wbg.__wbg_setTransform_5f5f19301b76a8d6 = handleError(function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {\n        getObject(arg0).setTransform(arg1, arg2, arg3, arg4, arg5, arg6);\n    });\n    imports.wbg.__wbg_get_5fa3f454aa041e6e = function(arg0, arg1) {\n        var ret = getObject(arg0)[arg1 >>> 0];\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_next_373211328013f949 = handleError(function(arg0) {\n        var ret = getObject(arg0).next();\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_done_49c598117f977077 = function(arg0) {\n        var ret = getObject(arg0).done;\n        return ret;\n    };\n    imports.wbg.__wbg_value_c9ae6368b110a068 = function(arg0) {\n        var ret = getObject(arg0).value;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_get_85e0a3b459845fe2 = handleError(function(arg0, arg1) {\n        var ret = Reflect.get(getObject(arg0), getObject(arg1));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_call_951bd0c6d815d6f1 = handleError(function(arg0, arg1) {\n        var ret = getObject(arg0).call(getObject(arg1));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_new_9dff83a08f5994f3 = function() {\n        var ret = new Array();\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_isArray_cf56c8363b1b35d9 = function(arg0) {\n        var ret = Array.isArray(getObject(arg0));\n        return ret;\n    };\n    imports.wbg.__wbg_of_3a4bb382824dd437 = function(arg0, arg1) {\n        var ret = Array.of(getObject(arg0), getObject(arg1));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_push_3ddd8187ff2ff82d = function(arg0, arg1) {\n        var ret = getObject(arg0).push(getObject(arg1));\n        return ret;\n    };\n    imports.wbg.__wbg_instanceof_ArrayBuffer_3a0fa134e6809d57 = function(arg0) {\n        var ret = getObject(arg0) instanceof ArrayBuffer;\n        return ret;\n    };\n    imports.wbg.__wbg_new_24c0ca5f23ee2dd9 = function(arg0) {\n        var ret = new ArrayBuffer(arg0 >>> 0);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_slice_a498e5bb17f253f3 = function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).slice(arg1 >>> 0, arg2 >>> 0);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_values_f28e313e2260a03a = function(arg0) {\n        var ret = getObject(arg0).values();\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_newnoargs_7c6bd521992b4022 = function(arg0, arg1) {\n        var ret = new Function(getStringFromWasm0(arg0, arg1));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_apply_4e68243803368d89 = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).apply(getObject(arg1), getObject(arg2));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_call_bf745b1758bb6693 = handleError(function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).call(getObject(arg1), getObject(arg2));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_getTime_cf686ab22ab03a3e = function(arg0) {\n        var ret = getObject(arg0).getTime();\n        return ret;\n    };\n    imports.wbg.__wbg_getTimezoneOffset_b9f3c4664b1a35ae = function(arg0) {\n        var ret = getObject(arg0).getTimezoneOffset();\n        return ret;\n    };\n    imports.wbg.__wbg_new0_abd359df4aeb5b55 = function() {\n        var ret = new Date();\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_instanceof_Object_cdaa71ad2ca2f4c5 = function(arg0) {\n        var ret = getObject(arg0) instanceof Object;\n        return ret;\n    };\n    imports.wbg.__wbg_entries_7144a7309b22df64 = function(arg0) {\n        var ret = Object.entries(getObject(arg0));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_fromEntries_cc1186a09f1ec7f2 = handleError(function(arg0) {\n        var ret = Object.fromEntries(getObject(arg0));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_is_049b1aece40b5301 = function(arg0, arg1) {\n        var ret = Object.is(getObject(arg0), getObject(arg1));\n        return ret;\n    };\n    imports.wbg.__wbg_new_ba07d0daa0e4677e = function() {\n        var ret = new Object();\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_resolve_6e61e640925a0db9 = function(arg0) {\n        var ret = Promise.resolve(getObject(arg0));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_then_dd3785597974798a = function(arg0, arg1) {\n        var ret = getObject(arg0).then(getObject(arg1));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_then_0f957e0f4c3e537a = function(arg0, arg1, arg2) {\n        var ret = getObject(arg0).then(getObject(arg1), getObject(arg2));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_self_6baf3a3aa7b63415 = handleError(function() {\n        var ret = self.self;\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_window_63fc4027b66c265b = handleError(function() {\n        var ret = window.window;\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_globalThis_513fb247e8e4e6d2 = handleError(function() {\n        var ret = globalThis.globalThis;\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_global_b87245cd886d7113 = handleError(function() {\n        var ret = global.global;\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_buffer_3f12a1c608c6d04e = function(arg0) {\n        var ret = getObject(arg0).buffer;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_newwithbyteoffsetandlength_4c51342f87299c5a = function(arg0, arg1, arg2) {\n        var ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_length_c645e7c02233b440 = function(arg0) {\n        var ret = getObject(arg0).length;\n        return ret;\n    };\n    imports.wbg.__wbg_new_c6c0228e6d22a2f9 = function(arg0) {\n        var ret = new Uint8Array(getObject(arg0));\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_set_b91afac9fd216d99 = function(arg0, arg1, arg2) {\n        getObject(arg0).set(getObject(arg1), arg2 >>> 0);\n    };\n    imports.wbg.__wbg_fill_f49407f577541856 = function(arg0, arg1, arg2, arg3) {\n        var ret = getObject(arg0).fill(arg1, arg2 >>> 0, arg3 >>> 0);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_buffer_c385539cb4060297 = function(arg0) {\n        var ret = getObject(arg0).buffer;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbg_byteLength_11e6bdc2fac53a3c = function(arg0) {\n        var ret = getObject(arg0).byteLength;\n        return ret;\n    };\n    imports.wbg.__wbg_byteOffset_5db4e07752c85395 = function(arg0) {\n        var ret = getObject(arg0).byteOffset;\n        return ret;\n    };\n    imports.wbg.__wbg_ownKeys_d44c25f33e28bfab = handleError(function(arg0) {\n        var ret = Reflect.ownKeys(getObject(arg0));\n        return addHeapObject(ret);\n    });\n    imports.wbg.__wbg_set_9bdd413385146137 = handleError(function(arg0, arg1, arg2) {\n        var ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2));\n        return ret;\n    });\n    imports.wbg.__wbindgen_number_get = function(arg0, arg1) {\n        const obj = getObject(arg1);\n        var ret = typeof(obj) === 'number' ? obj : undefined;\n        getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret;\n        getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);\n    };\n    imports.wbg.__wbindgen_string_get = function(arg0, arg1) {\n        const obj = getObject(arg1);\n        var ret = typeof(obj) === 'string' ? obj : undefined;\n        var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbindgen_boolean_get = function(arg0) {\n        const v = getObject(arg0);\n        var ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2;\n        return ret;\n    };\n    imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {\n        var ret = debugString(getObject(arg1));\n        var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len0 = WASM_VECTOR_LEN;\n        getInt32Memory0()[arg0 / 4 + 1] = len0;\n        getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n    };\n    imports.wbg.__wbindgen_throw = function(arg0, arg1) {\n        throw new Error(getStringFromWasm0(arg0, arg1));\n    };\n    imports.wbg.__wbindgen_rethrow = function(arg0) {\n        throw takeObject(arg0);\n    };\n    imports.wbg.__wbindgen_memory = function() {\n        var ret = wasm.memory;\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper720 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 148, __wbg_adapter_32);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper722 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 148, __wbg_adapter_35);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper724 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 148, __wbg_adapter_38);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper726 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 148, __wbg_adapter_41);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper728 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 148, __wbg_adapter_44);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper730 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 148, __wbg_adapter_47);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper732 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 148, __wbg_adapter_50);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper734 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 148, __wbg_adapter_53);\n        return addHeapObject(ret);\n    };\n    imports.wbg.__wbindgen_closure_wrapper1332 = function(arg0, arg1, arg2) {\n        var ret = makeMutClosure(arg0, arg1, 541, __wbg_adapter_56);\n        return addHeapObject(ret);\n    };\n\n    if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) {\n        input = fetch(input);\n    }\n\n    const { instance, module } = await load(await input, imports);\n\n    wasm = instance.exports;\n    init.__wbindgen_wasm_module = module;\n\n    return wasm;\n}\n\nexport default init;\n\n","/* eslint @typescript-eslint/no-explicit-any: \"off\" */\n/* eslint @typescript-eslint/ban-types: \"off\" */\n/**\n * Polyfills the `Array.prototype.reduce` method.\n *\n * Production steps of ECMA-262, Edition 5, 15.4.4.21\n * Reference: https://es5.github.io/#x15.4.4.21\n * https://tc39.github.io/ecma262/#sec-array.prototype.reduce\n *\n */\nfunction polyfillArrayPrototypeReduce() {\n    Object.defineProperty(Array.prototype, \"reduce\", {\n        value: function (...args) {\n            if (args.length === 0 &&\n                window.Prototype &&\n                window.Prototype.Version &&\n                window.Prototype.Version < \"1.6.1\") {\n                // Off-spec: compatibility with prototype.js\n                return this.length > 1 ? this : this[0];\n            }\n            const callback = args[0];\n            if (this === null) {\n                throw new TypeError(\"Array.prototype.reduce called on null or undefined\");\n            }\n            if (typeof callback !== \"function\") {\n                throw new TypeError(`${callback} is not a function`);\n            }\n            const o = Object(this);\n            const len = o.length >>> 0;\n            let k = 0;\n            let value;\n            if (args.length >= 2) {\n                value = args[1];\n            }\n            else {\n                while (k < len && !(k in o)) {\n                    k++;\n                }\n                if (k >= len) {\n                    throw new TypeError(\"Reduce of empty array with no initial value\");\n                }\n                value = o[k++];\n            }\n            while (k < len) {\n                if (k in o) {\n                    value = callback(value, o[k], k, o);\n                }\n                k++;\n            }\n            return value;\n        },\n    });\n}\n/**\n * Polyfills the `Window` function.\n *\n */\nfunction polyfillWindow() {\n    if (typeof window.constructor !== \"function\" ||\n        !isNativeFunction(window.constructor)) {\n        // Don't polyfill `Window` if `window.constructor` has been overridden.\n        return;\n    }\n    // @ts-expect-error: `Function not assignable to { new (): Window; prototype: Window; }`\n    window.Window = window.constructor;\n}\n/**\n * Determines whether a function is native or not.\n *\n * @param func The function to test.\n * @returns True if the function hasn't been overridden.\n */\nfunction isNativeFunction(func) {\n    const val = typeof Function.prototype.toString === \"function\"\n        ? Function.prototype.toString()\n        : null;\n    if (typeof val === \"string\" && val.indexOf(\"[native code]\") >= 0) {\n        return (Function.prototype.toString.call(func).indexOf(\"[native code]\") >= 0);\n    }\n    return false;\n}\n/**\n * Checks and applies the polyfills to the current window, if needed.\n *\n */\nexport function setPolyfillsOnLoad() {\n    if (typeof Array.prototype.reduce !== \"function\" ||\n        !isNativeFunction(Array.prototype.reduce)) {\n        // Some external libraries override the `Array.prototype.reduce` method in a way\n        // that causes Webpack to crash (#1507, #1865), so we need to override it again.\n        polyfillArrayPrototypeReduce();\n    }\n    if (typeof Window !== \"function\" || !isNativeFunction(Window)) {\n        // Overriding the native `Window` function causes issues in wasm-bindgen, as a\n        // code like `window instanceof Window` will no longer work.\n        polyfillWindow();\n    }\n}\n","/* eslint @typescript-eslint/no-explicit-any: \"off\" */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\n/**\n * Conditional ruffle loader\n */\nimport init, { Ruffle } from \"../pkg/ruffle_web\";\nimport { setPolyfillsOnLoad } from \"./js-polyfills\";\n/**\n * Load ruffle from an automatically-detected location.\n *\n * This function returns a new instance of Ruffle and downloads it every time.\n * You should not use it directly; this module will memoize the resource\n * download.\n *\n * @returns A ruffle constructor that may be used to create new Ruffle\n * instances.\n */\nfunction fetchRuffle() {\n    return __awaiter(this, void 0, void 0, function* () {\n        // Apply some pure JavaScript polyfills to prevent conflicts with external\n        // libraries, if needed.\n        setPolyfillsOnLoad();\n        let isExtension = true;\n        try {\n            // If ruffleRuntimePath is defined then we are executing inside the extension\n            // closure. In that case, we configure our local Webpack instance.\n            __webpack_public_path__ = ruffleRuntimePath + \"dist/\";\n        }\n        catch (e) {\n            // Checking an undefined closure variable usually throws ReferenceError,\n            // so we need to catch it here and continue onward.\n            if (!(e instanceof ReferenceError)) {\n                throw e;\n            }\n            isExtension = false;\n        }\n        // We currently assume that if we are not executing inside the extension,\n        // then we can use webpack to get Ruffle.\n        try {\n            // wasm files are set to use file-loader,\n            // so this package will resolve to the URL of the wasm file.\n            const ruffleWasm = yield import(\n            /* webpackMode: \"eager\" */\n            \"../pkg/ruffle_web_bg.wasm\");\n            yield init(ruffleWasm.default);\n        }\n        catch (e) {\n            e.ruffleIsExtension = isExtension;\n            throw e;\n        }\n        return Ruffle;\n    });\n}\nlet lastLoaded = null;\n/**\n * Obtain an instance of `Ruffle`.\n *\n * This function returns a promise which yields `Ruffle` asynchronously.\n *\n * @returns A ruffle constructor that may be used to create new Ruffle\n * instances.\n */\nexport function loadRuffle() {\n    if (lastLoaded == null) {\n        lastLoaded = fetchRuffle();\n    }\n    return lastLoaded;\n}\n","/**\n * Replacement object for `MimeTypeArray` that lets us install new fake mime\n * types.\n *\n * Unlike plugins we can at least enumerate mime types in Firefox, so we don't\n * lose data.\n *\n * We also expose a method called `install` which adds a new plugin. This is\n * used to falsify Flash detection. If the existing `navigator.mimeTypes` has an\n * `install` method, you should not use `RuffleMimeTypeArray` as some other\n * plugin emulator is already present.\n */\nclass RuffleMimeTypeArray {\n    constructor(native_mimetype_array) {\n        this.__mimetypes = [];\n        this.__named_mimetypes = {};\n        if (native_mimetype_array) {\n            for (let i = 0; i < native_mimetype_array.length; i++) {\n                this.install(native_mimetype_array[i]);\n            }\n        }\n    }\n    /**\n     * Install a MIME Type into the array.\n     *\n     * @param mimetype The mimetype to install\n     */\n    install(mimetype) {\n        const id = this.__mimetypes.length;\n        this.__mimetypes.push(mimetype);\n        this.__named_mimetypes[mimetype.type] = mimetype;\n        this[mimetype.type] = mimetype;\n        this[id] = mimetype;\n    }\n    item(index) {\n        return this.__mimetypes[index];\n    }\n    namedItem(name) {\n        return this.__named_mimetypes[name];\n    }\n    get length() {\n        return this.__mimetypes.length;\n    }\n    [Symbol.iterator]() {\n        return this.__mimetypes[Symbol.iterator]();\n    }\n}\n/**\n * Equivalent object to `Plugin` that allows us to falsify plugins.\n */\nclass RufflePlugin extends RuffleMimeTypeArray {\n    constructor(name, description, filename, mimetypes) {\n        super(mimetypes);\n        this.name = name;\n        this.description = description;\n        this.filename = filename;\n    }\n    install(mimetype) {\n        super.install(mimetype);\n    }\n    [Symbol.iterator]() {\n        return super[Symbol.iterator]();\n    }\n}\n/**\n * Replacement object for `PluginArray` that lets us install new fake plugins.\n *\n * This object needs to wrap the native plugin array, since the user might have\n * actual plugins installed. Firefox doesn't let us enumerate the array, though,\n * which has some consequences. Namely, we can't actually perfectly wrap the\n * native plugin array, at least unless there's some secret \"unresolved object\n * property name handler\" that I've never known before in JS...\n *\n * We can still wrap `namedItem` perfectly at least.\n *\n * We also expose a method called `install` which adds a new plugin. This is\n * used to falsify Flash detection. If the existing `navigator.plugins` has an\n * `install` method, you should not use `RufflePluginArray` as some other plugin\n * emulator is already present.\n */\nclass RufflePluginArray {\n    constructor(native_plugin_array) {\n        this.__plugins = [];\n        this.__named_plugins = {};\n        for (let i = 0; i < native_plugin_array.length; i++) {\n            this.install(native_plugin_array[i]);\n        }\n    }\n    install(plugin) {\n        const id = this.__plugins.length;\n        this.__plugins.push(plugin);\n        this.__named_plugins[plugin.name] = plugin;\n        this[plugin.name] = plugin;\n        this[id] = plugin;\n    }\n    item(index) {\n        return this.__plugins[index];\n    }\n    namedItem(name) {\n        return this.__named_plugins[name];\n    }\n    get length() {\n        return this.__plugins.length;\n    }\n}\n/**\n * A fake plugin designed to trigger Flash detection scripts.\n */\nexport const FLASH_PLUGIN = new RufflePlugin(\"Shockwave Flash\", \"Shockwave Flash 32.0 r0\", \"ruffle.js\", null);\nFLASH_PLUGIN.install({\n    type: \"application/futuresplash\",\n    description: \"Shockwave Flash\",\n    suffixes: \"spl\",\n    enabledPlugin: FLASH_PLUGIN,\n});\nFLASH_PLUGIN.install({\n    type: \"application/x-shockwave-flash\",\n    description: \"Shockwave Flash\",\n    suffixes: \"swf\",\n    enabledPlugin: FLASH_PLUGIN,\n});\nFLASH_PLUGIN.install({\n    type: \"application/x-shockwave-flash2-preview\",\n    description: \"Shockwave Flash\",\n    suffixes: \"swf\",\n    enabledPlugin: FLASH_PLUGIN,\n});\nFLASH_PLUGIN.install({\n    type: \"application/vnd.adobe.flash-movie\",\n    description: \"Shockwave Flash\",\n    suffixes: \"swf\",\n    enabledPlugin: FLASH_PLUGIN,\n});\n/**\n * Install a fake plugin such that detectors will see it in `navigator.plugins`.\n *\n * This function takes care to check if the existing implementation of\n * `navigator.plugins` already accepts fake plugin entries. If so, it will use\n * that version of the plugin array. This allows the plugin polyfill to compose\n * across multiple plugin emulators with the first emulator's polyfill winning.\n *\n * @param plugin The plugin to install\n */\nexport function installPlugin(plugin) {\n    if (!(\"install\" in navigator.plugins) || !navigator.plugins[\"install\"]) {\n        Object.defineProperty(navigator, \"plugins\", {\n            value: new RufflePluginArray(navigator.plugins),\n            writable: false,\n        });\n    }\n    const plugins = navigator.plugins;\n    plugins.install(plugin);\n    if (plugin.length > 0 &&\n        (!(\"install\" in navigator.mimeTypes) || !navigator.mimeTypes[\"install\"])) {\n        Object.defineProperty(navigator, \"mimeTypes\", {\n            value: new RuffleMimeTypeArray(navigator.mimeTypes),\n            writable: false,\n        });\n    }\n    const mimeTypes = navigator.mimeTypes;\n    for (let i = 0; i < plugin.length; i += 1) {\n        mimeTypes.install(plugin[i]);\n    }\n}\n","/**\n * The shadow template which is used to fill the actual Ruffle player element\n * on the page.\n */\nexport const ruffleShadowTemplate = document.createElement(\"template\");\nruffleShadowTemplate.innerHTML = `\n    <style>\n        :host {\n            display: inline-block;\n            /* Default width/height; this will get overridden by user styles/attributes */\n            width: 550px;\n            height: 400px;\n            font-family: Arial, sans-serif;\n            letter-spacing: 0.4px;\n            touch-action: none;\n            user-select: none;\n            -webkit-user-select: none;\n            -webkit-tap-highlight-color: transparent;\n            position: relative;\n        }\n\n        /* All of these use the dimensions specified by the embed */\n        #container,\n        #container canvas,\n        #play_button,\n        #unmute_overlay,\n        #unmute_overlay .background,\n        #panic,\n        #message_overlay {\n            width: inherit;\n            height: inherit;\n        }\n\n        #container {\n            position: relative;\n            overflow: hidden;\n        }\n\n        #play_button,\n        #unmute_overlay {\n            position: absolute;\n            cursor: pointer;\n            display: none;\n        }\n\n        #unmute_overlay .background {\n            position: absolute;\n            background-color: #000;\n            opacity: 0.7;\n        }\n\n        #play_button .icon,\n        #unmute_overlay .icon {\n            position: absolute;\n            top: 50%;\n            left: 50%;\n            width: 50%;\n            height: 50%;\n            max-width: 384px;\n            max-height: 384px;\n            transform: translate(-50%, -50%);\n            opacity: 0.8;\n        }\n\n        #play_button:hover .icon,\n        #unmute_overlay:hover .icon {\n            opacity: 1;\n        }\n\n        #panic {\n            position: absolute;\n            font-size: 20px;\n            text-align: center;\n            /* Inverted colours from play button! */\n            background: linear-gradient(180deg, rgba(253,58,64,1) 0%, rgba(253,161,56,1) 100%);\n            color: #FFF;\n        }\n\n        #panic a {\n            color: #37528C;\n            font-weight: bold;\n        }\n\n        #panic > div {\n            position: absolute;\n        }\n\n        #panic-title {\n            width: inherit;\n            top: 30px;\n            font-size: 42px;\n            font-weight: bold;\n        }\n\n        #panic-body {\n            top: 100px;\n            bottom: 80px;\n            left: 50px;\n            right: 50px;\n        }\n\n        #panic-body textarea {\n            width: 100%;\n            height: 100%;\n        }\n\n        #panic-footer {\n            bottom: 30px;\n            width: inherit;\n        }\n\n        #panic ul {\n            margin-top: 35px;\n            padding: 0;\n            width: inherit;\n            display: flex;\n            list-style-type: none;\n            justify-content: center;\n            align-items: center;\n        }\n\n        #panic li {\n            padding: 10px 50px;\n        }\n\n        #message_overlay {\n            position: absolute;\n            background-color: #37528C;\n            color: #FFAD33;\n            opacity: 1.0;\n            z-index: 2;\n            text-align: center;\n        }\n\n        #message_overlay .message {\n            position: absolute;\n            top: 50%;\n            left: 50%;\n            width: 100%;\n            padding: 20px;\n            transform: translate(-50%, -50%);\n        }\n\n        #continue-btn {\n             cursor: pointer;\n             background-color: #37528C;\n             color: #FFAD33;\n             border: 2px solid #FFAD33;\n             font-weight: bold;\n             font-size: 20px;\n             border-radius: 20px;\n             padding: 10px;\n        }\n\n        #continue-btn:hover {\n            background-color: rgba(255, 255, 255, 0.3);\n        }\n\n        #right_click_menu {\n            color: #FFAD33;\n            background-color: #37528c;\n            border-radius: 5px;\n            box-shadow: 0px 5px 15px -5px #000;\n            position: absolute;\n            font-size: 16px;\n            text-align: left;\n            list-style: none;\n            padding: 0;\n            margin: 0;\n        }\n\n        #right_click_menu .menu_item {\n            padding: 5px 10px;\n        }\n\n        #right_click_menu .menu_separator {\n            padding: 5px 5px;\n        }\n\n        #right_click_menu .active {\n            cursor: pointer;\n            color: #FFAD33;\n        }\n\n        #right_click_menu .disabled {\n            cursor: default;\n            color: #94672F;\n        }\n\n        #right_click_menu .active:hover {\n            background-color: #184778;\n        }\n\n        #right_click_menu hr {\n            color: #FFAD33;\n        }\n\n        #right_click_menu > :first-child {\n            border-top-right-radius: 5px;\n            border-top-left-radius: 5px;\n        }\n\n        #right_click_menu > :last-child {\n            border-bottom-right-radius: 5px;\n            border-bottom-left-radius: 5px;\n        }\n    </style>\n    <style id=\"dynamic_styles\"></style>\n\n    <div id=\"container\">\n        <div id=\"play_button\"><div class=\"icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" preserveAspectRatio=\"xMidYMid\" viewBox=\"0 0 250 250\" style=\"width:100%;height:100%;\"><defs><linearGradient id=\"a\" gradientUnits=\"userSpaceOnUse\" x1=\"125\" y1=\"0\" x2=\"125\" y2=\"250\" spreadMethod=\"pad\"><stop offset=\"0%\" stop-color=\"#FDA138\"/><stop offset=\"100%\" stop-color=\"#FD3A40\"/></linearGradient><g id=\"b\"><path fill=\"url(#a)\" d=\"M250 125q0-52-37-88-36-37-88-37T37 37Q0 73 0 125t37 88q36 37 88 37t88-37q37-36 37-88M87 195V55l100 70-100 70z\"/><path fill=\"#FFF\" d=\"M87 55v140l100-70L87 55z\"/></g></defs><use xlink:href=\"#b\"/></svg></div></div>\n        <div id=\"unmute_overlay\"><div class=\"background\"></div><div class=\"icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" preserveAspectRatio=\"xMidYMid\" viewBox=\"0 0 512 584\" style=\"width:100%;height:100%;scale:0.8;\"><path fill=\"#FFF\" stroke=\"#FFF\" d=\"m457.941 256 47.029-47.029c9.372-9.373 9.372-24.568 0-33.941-9.373-9.373-24.568-9.373-33.941 0l-47.029 47.029-47.029-47.029c-9.373-9.373-24.568-9.373-33.941 0-9.372 9.373-9.372 24.568 0 33.941l47.029 47.029-47.029 47.029c-9.372 9.373-9.372 24.568 0 33.941 4.686 4.687 10.827 7.03 16.97 7.03s12.284-2.343 16.971-7.029l47.029-47.03 47.029 47.029c4.687 4.687 10.828 7.03 16.971 7.03s12.284-2.343 16.971-7.029c9.372-9.373 9.372-24.568 0-33.941z\"/><path fill=\"#FFF\" stroke=\"#FFF\" d=\"m99 160h-55c-24.301 0-44 19.699-44 44v104c0 24.301 19.699 44 44 44h55c2.761 0 5-2.239 5-5v-182c0-2.761-2.239-5-5-5z\"/><path fill=\"#FFF\" stroke=\"#FFF\" d=\"m280 56h-24c-5.269 0-10.392 1.734-14.578 4.935l-103.459 79.116c-1.237.946-1.963 2.414-1.963 3.972v223.955c0 1.557.726 3.026 1.963 3.972l103.459 79.115c4.186 3.201 9.309 4.936 14.579 4.936h23.999c13.255 0 24-10.745 24-24v-352.001c0-13.255-10.745-24-24-24z\"/><text x=\"256\" y=\"560\" text-anchor=\"middle\" style=\"font-size:60px;fill:#FFF;stroke:#FFF;\">Click to unmute</text></svg></div></div>\n    </div>\n\n    <ul id=\"right_click_menu\" style=\"display: none\"></ul>\n`;\n","/**\n * A mapping between internal element IDs and DOM element IDs.\n */\nconst privateRegistry = {};\n/**\n * Lookup a previously registered custom element.\n *\n * The returned object will have `name`, `class`, and `internal_name`\n * properties listing the external name, implementing class, and internal name\n * respectively.\n *\n * @param elementName The internal element name, previously used to\n * register the element with the private registry.\n *\n * @returns The element data in the registry, or null if there is\n * no such element name registered.\n */\nexport function lookupElement(elementName) {\n    const data = privateRegistry[elementName];\n    if (data !== undefined) {\n        return {\n            internalName: elementName,\n            name: data.name,\n            class: data.class,\n        };\n    }\n    else {\n        return null;\n    }\n}\n/**\n * Register a custom element.\n *\n * This function is designed to be tolerant of naming conflicts. If\n * registration fails, we modify the name, and try again. As a result, this\n * function returns the real element name to use.\n *\n * Calling this function multiple times will *not* register multiple elements.\n * We store a private registry mapping internal element names to DOM names.\n * Thus, the proper way to use this function is to call it every time you are\n * about to work with custom element names.\n *\n * @param elementName The internal name of the element.\n * @param elementClass The class of the element.\n *\n * You must call this function with the same class every time.\n *\n * @returns The actual element name.\n * @throws Throws an error if two different elements were registered with the\n * same internal name.\n */\nexport function registerElement(elementName, elementClass) {\n    if (privateRegistry[elementName] !== undefined) {\n        if (privateRegistry[elementName].class !== elementClass) {\n            throw new Error(\"Internal naming conflict on \" + elementName);\n        }\n        else {\n            return privateRegistry[elementName].name;\n        }\n    }\n    let tries = 0;\n    while (true) {\n        try {\n            let externalName = elementName;\n            if (tries > 0) {\n                externalName = externalName + \"-\" + tries;\n            }\n            window.customElements.define(externalName, elementClass);\n            privateRegistry[elementName] = {\n                class: elementClass,\n                name: externalName,\n                internalName: elementName,\n            };\n            return externalName;\n        }\n        catch (e) {\n            if (e.name === \"NotSupportedError\") {\n                tries += 1;\n            }\n        }\n    }\n}\n","export var AutoPlay;\n(function (AutoPlay) {\n    /**\n     * The player should automatically play the movie as soon as it is loaded.\n     *\n     * If the browser does not support automatic audio, the movie will begin\n     * muted.\n     */\n    AutoPlay[\"On\"] = \"on\";\n    /**\n     * The player should not attempt to automatically play the movie.\n     *\n     * This will leave it to the user or API to actually play when appropriate.\n     */\n    AutoPlay[\"Off\"] = \"off\";\n    /**\n     * The player should automatically play the movie as soon as it is deemed\n     * \"appropriate\" to do so.\n     *\n     * The exact behaviour depends on the browser, but commonly requires some\n     * form of user interaction on the page in order to allow auto playing videos\n     * with sound.\n     */\n    AutoPlay[\"Auto\"] = \"auto\";\n})(AutoPlay || (AutoPlay = {}));\n/**\n * Controls whether the content is letterboxed or pillarboxed when the\n * player's aspect ratio does not match the movie's aspect ratio.\n *\n * When letterboxed, black bars will be rendered around the exterior\n * margins of the content.\n */\nexport var Letterbox;\n(function (Letterbox) {\n    /**\n     * The content will never be letterboxed.\n     */\n    Letterbox[\"Off\"] = \"off\";\n    /**\n     * The content will only be letterboxed if the content is running fullscreen.\n     */\n    Letterbox[\"Fullscreen\"] = \"fullscreen\";\n    /**\n     * The content will always be letterboxed.\n     */\n    Letterbox[\"On\"] = \"on\";\n})(Letterbox || (Letterbox = {}));\n/**\n * When the player is muted, this controls whether or not Ruffle will show a\n * \"click to unmute\" overlay on top of the movie.\n */\nexport var UnmuteOverlay;\n(function (UnmuteOverlay) {\n    /**\n     * Show an overlay explaining that the movie is muted.\n     */\n    UnmuteOverlay[\"Visible\"] = \"visible\";\n    /**\n     * Don't show an overlay and pretend that everything is fine.\n     */\n    UnmuteOverlay[\"Hidden\"] = \"hidden\";\n})(UnmuteOverlay || (UnmuteOverlay = {}));\n/**\n * Console logging level.\n */\nexport var LogLevel;\n(function (LogLevel) {\n    LogLevel[\"Error\"] = \"error\";\n    LogLevel[\"Warn\"] = \"warn\";\n    LogLevel[\"Info\"] = \"info\";\n    LogLevel[\"Debug\"] = \"debug\";\n    LogLevel[\"Trace\"] = \"trace\";\n})(LogLevel || (LogLevel = {}));\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { loadRuffle } from \"./load-ruffle\";\nimport { ruffleShadowTemplate } from \"./shadow-template\";\nimport { lookupElement } from \"./register-element\";\nimport { AutoPlay, UnmuteOverlay, } from \"./load-options\";\nexport const FLASH_MIMETYPE = \"application/x-shockwave-flash\";\nexport const FUTURESPLASH_MIMETYPE = \"application/futuresplash\";\nexport const FLASH7_AND_8_MIMETYPE = \"application/x-shockwave-flash2-preview\";\nexport const FLASH_MOVIE_MIMETYPE = \"application/vnd.adobe.flash-movie\";\nexport const FLASH_ACTIVEX_CLASSID = \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\";\nconst RUFFLE_ORIGIN = \"https://ruffle.rs\";\nconst DIMENSION_REGEX = /^\\s*(\\d+(\\.\\d+)?(%)?)/;\nvar PanicError;\n(function (PanicError) {\n    PanicError[PanicError[\"Unknown\"] = 0] = \"Unknown\";\n    PanicError[PanicError[\"FileProtocol\"] = 1] = \"FileProtocol\";\n    PanicError[PanicError[\"JavascriptConfiguration\"] = 2] = \"JavascriptConfiguration\";\n    PanicError[PanicError[\"JavascriptConflict\"] = 3] = \"JavascriptConflict\";\n    PanicError[PanicError[\"WasmCors\"] = 4] = \"WasmCors\";\n    PanicError[PanicError[\"WasmMimeType\"] = 5] = \"WasmMimeType\";\n    PanicError[PanicError[\"WasmNotFound\"] = 6] = \"WasmNotFound\";\n})(PanicError || (PanicError = {}));\n/**\n * Converts arbitrary input to an easy to use record object.\n *\n * @param parameters Parameters to sanitize\n * @returns A sanitized map of param name to param value\n */\nfunction sanitizeParameters(parameters) {\n    if (parameters === null || parameters === undefined) {\n        return {};\n    }\n    if (!(parameters instanceof URLSearchParams)) {\n        parameters = new URLSearchParams(parameters);\n    }\n    const output = {};\n    for (const [key, value] of parameters) {\n        // Every value must be type of string\n        output[key] = value.toString();\n    }\n    return output;\n}\n/**\n * The ruffle player element that should be inserted onto the page.\n *\n * This element will represent the rendered and intractable flash movie.\n */\nexport class RufflePlayer extends HTMLElement {\n    /**\n     * Constructs a new Ruffle flash player for insertion onto the page.\n     */\n    constructor() {\n        super();\n        this.panicked = false;\n        /**\n         * Any configuration that should apply to this specific player.\n         * This will be defaulted with any global configuration.\n         */\n        this.config = {};\n        this.shadow = this.attachShadow({ mode: \"open\" });\n        this.shadow.appendChild(ruffleShadowTemplate.content.cloneNode(true));\n        this.dynamicStyles = (this.shadow.getElementById(\"dynamic_styles\"));\n        this.container = this.shadow.getElementById(\"container\");\n        this.playButton = this.shadow.getElementById(\"play_button\");\n        if (this.playButton) {\n            this.playButton.addEventListener(\"click\", this.playButtonClicked.bind(this));\n        }\n        this.unmuteOverlay = this.shadow.getElementById(\"unmute_overlay\");\n        this.unmuteOverlay.addEventListener(\"click\", this.unmuteOverlayClicked.bind(this));\n        this.rightClickMenu = this.shadow.getElementById(\"right_click_menu\");\n        this.addEventListener(\"contextmenu\", this.openRightClickMenu.bind(this));\n        window.addEventListener(\"click\", this.hideRightClickMenu.bind(this));\n        this.instance = null;\n        this.allowScriptAccess = false;\n        this._trace_observer = null;\n        this.ruffleConstructor = loadRuffle();\n        return this;\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    connectedCallback() {\n        this.updateStyles();\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    static get observedAttributes() {\n        return [\"width\", \"height\"];\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    attributeChangedCallback(name, _oldValue, _newValue) {\n        if (name === \"width\" || name === \"height\") {\n            this.updateStyles();\n        }\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    disconnectedCallback() {\n        if (this.instance) {\n            this.instance.destroy();\n            this.instance = null;\n            console.log(\"Ruffle instance destroyed.\");\n        }\n    }\n    /**\n     * Updates the internal shadow DOM to reflect any set attributes from\n     * this element.\n     *\n     * @protected\n     */\n    updateStyles() {\n        if (this.dynamicStyles.sheet) {\n            if (this.dynamicStyles.sheet.rules) {\n                for (let i = 0; i < this.dynamicStyles.sheet.rules.length; i++) {\n                    this.dynamicStyles.sheet.deleteRule(i);\n                }\n            }\n            const widthAttr = this.attributes.getNamedItem(\"width\");\n            if (widthAttr !== undefined && widthAttr !== null) {\n                const width = RufflePlayer.htmlDimensionToCssDimension(widthAttr.value);\n                if (width !== null) {\n                    this.dynamicStyles.sheet.insertRule(`:host { width: ${width}; }`);\n                }\n            }\n            const heightAttr = this.attributes.getNamedItem(\"height\");\n            if (heightAttr !== undefined && heightAttr !== null) {\n                const height = RufflePlayer.htmlDimensionToCssDimension(heightAttr.value);\n                if (height !== null) {\n                    this.dynamicStyles.sheet.insertRule(`:host { height: ${height}; }`);\n                }\n            }\n        }\n    }\n    /**\n     * Determine if this element is the fallback content of another Ruffle\n     * player.\n     *\n     * This heuristic assumes Ruffle objects will never use their fallback\n     * content. If this changes, then this code also needs to change.\n     *\n     * @private\n     */\n    isUnusedFallbackObject() {\n        let parent = this.parentNode;\n        const element = lookupElement(\"ruffle-object\");\n        if (element !== null) {\n            while (parent != document && parent != null) {\n                if (parent.nodeName === element.name) {\n                    return true;\n                }\n                parent = parent.parentNode;\n            }\n        }\n        return false;\n    }\n    /**\n     * Ensure a fresh Ruffle instance is ready on this player before continuing.\n     *\n     * @throws Any exceptions generated by loading Ruffle Core will be logged\n     * and passed on.\n     *\n     * @private\n     */\n    ensureFreshInstance(config) {\n        var _a;\n        return __awaiter(this, void 0, void 0, function* () {\n            if (this.instance) {\n                this.instance.destroy();\n                this.instance = null;\n                console.log(\"Ruffle instance destroyed.\");\n            }\n            const ruffleConstructor = yield this.ruffleConstructor.catch((e) => {\n                console.error(`Serious error loading Ruffle: ${e}`);\n                // Serious duck typing. In error conditions, let's not make assumptions.\n                if (window.location.protocol === \"file:\") {\n                    e.ruffleIndexError = PanicError.FileProtocol;\n                }\n                else if (!e.ruffleIsExtension) {\n                    e.ruffleIndexError = PanicError.WasmNotFound;\n                    const message = String(e.message).toLowerCase();\n                    if (message.includes(\"mime\")) {\n                        e.ruffleIndexError = PanicError.WasmMimeType;\n                    }\n                    else if (message.includes(\"networkerror\") ||\n                        message.includes(\"failed to fetch\")) {\n                        e.ruffleIndexError = PanicError.WasmCors;\n                    }\n                    else if (!message.includes(\"magic\") &&\n                        (e.name === \"CompileError\" || e.name === \"TypeError\")) {\n                        e.ruffleIndexError = PanicError.JavascriptConflict;\n                    }\n                }\n                this.panic(e);\n                throw e;\n            });\n            this.instance = new ruffleConstructor(this.container, this, this.allowScriptAccess, config);\n            console.log(\"New Ruffle instance created.\");\n            // In Firefox, AudioContext.state is always \"suspended\" when the object has just been created.\n            // It may change by itself to \"running\" some milliseconds later. So we need to wait a little\n            // bit before checking if autoplay is supported and applying the instance config.\n            if (this.audioState() !== \"running\") {\n                this.container.style.visibility = \"hidden\";\n                yield new Promise((resolve) => {\n                    window.setTimeout(() => {\n                        resolve();\n                    }, 200);\n                });\n                this.container.style.visibility = \"\";\n            }\n            const autoplay = Object.values(Object(AutoPlay)).includes(config.autoplay)\n                ? config.autoplay\n                : AutoPlay.Auto;\n            const unmuteVisibility = Object.values(Object(UnmuteOverlay)).includes(config.unmuteOverlay)\n                ? config.unmuteOverlay\n                : UnmuteOverlay.Visible;\n            if (autoplay == AutoPlay.On ||\n                (autoplay == AutoPlay.Auto && this.audioState() === \"running\")) {\n                this.play();\n                if (this.audioState() !== \"running\") {\n                    this.unmuteOverlay.style.display = \"block\";\n                    // We need to mark each child as hidden or visible, as we want an overlay even if it's \"hidden\".\n                    // We need to undo this later if the config changed back to visible, but we already hid them.\n                    this.unmuteOverlay.childNodes.forEach((node) => {\n                        if (\"style\" in node) {\n                            const style = node.style;\n                            style.visibility =\n                                unmuteVisibility == UnmuteOverlay.Visible\n                                    ? \"\"\n                                    : \"hidden\";\n                        }\n                    });\n                    const audioContext = (_a = this.instance) === null || _a === void 0 ? void 0 : _a.audio_context();\n                    if (audioContext) {\n                        audioContext.onstatechange = () => {\n                            if (audioContext.state === \"running\") {\n                                this.unmuteOverlayClicked();\n                            }\n                            audioContext.onstatechange = null;\n                        };\n                    }\n                }\n            }\n            else {\n                this.playButton.style.display = \"block\";\n            }\n        });\n    }\n    /**\n     * Loads a specified movie into this player.\n     *\n     * This will replace any existing movie that may be playing.\n     *\n     * @param options One of the following:\n     * - A URL, passed as a string, which will load a URL with default options.\n     * - A [[URLLoadOptions]] object, to load a URL with options.\n     * - A [[DataLoadOptions]] object, to load data with options.\n     *\n     * The options will be defaulted by the [[config]] field, which itself\n     * is defaulted by a global `window.RufflePlayer.config`.\n     */\n    load(options) {\n        var _a, _b;\n        return __awaiter(this, void 0, void 0, function* () {\n            let optionsError = \"\";\n            switch (typeof options) {\n                case \"string\":\n                    options = { url: options };\n                    break;\n                case \"object\":\n                    if (options === null) {\n                        optionsError = \"Argument 0 must be a string or object\";\n                    }\n                    else if (!(\"url\" in options) && !(\"data\" in options)) {\n                        optionsError =\n                            \"Argument 0 must contain a `url` or `data` key\";\n                    }\n                    else if (\"url\" in options &&\n                        typeof options.url !== \"string\") {\n                        optionsError = \"`url` must be a string\";\n                    }\n                    break;\n                default:\n                    optionsError = \"Argument 0 must be a string or object\";\n                    break;\n            }\n            if (optionsError.length > 0) {\n                const error = new TypeError(optionsError);\n                error.ruffleIndexError = PanicError.JavascriptConfiguration;\n                this.panic(error);\n                throw error;\n            }\n            //TODO: Actually stream files...\n            try {\n                if (this.isConnected && !this.isUnusedFallbackObject()) {\n                    const config = Object.assign(Object.assign(Object.assign({}, ((_b = (_a = window.RufflePlayer) === null || _a === void 0 ? void 0 : _a.config) !== null && _b !== void 0 ? _b : {})), this.config), options);\n                    // Pre-emptively set background color of container while Ruffle/SWF loads.\n                    if (config.backgroundColor) {\n                        this.container.style.backgroundColor =\n                            config.backgroundColor;\n                    }\n                    yield this.ensureFreshInstance(config);\n                    if (\"url\" in options) {\n                        console.log(`Loading SWF file ${options.url}`);\n                        try {\n                            this.swfUrl = new URL(options.url, document.location.href).href;\n                        }\n                        catch (_c) {\n                            this.swfUrl = options.url;\n                        }\n                        const parameters = Object.assign(Object.assign({}, sanitizeParameters(options.url.substring(options.url.indexOf(\"?\")))), sanitizeParameters(options.parameters));\n                        this.instance.stream_from(options.url, parameters);\n                    }\n                    else if (\"data\" in options) {\n                        console.log(\"Loading SWF data\");\n                        this.instance.load_data(new Uint8Array(options.data), sanitizeParameters(options.parameters));\n                    }\n                }\n                else {\n                    console.warn(\"Ignoring attempt to play a disconnected or suspended Ruffle element\");\n                }\n            }\n            catch (err) {\n                console.error(`Serious error occurred loading SWF file: ${err}`);\n                throw err;\n            }\n        });\n    }\n    playButtonClicked() {\n        this.play();\n    }\n    /**\n     * Plays or resumes the movie.\n     */\n    play() {\n        if (this.instance) {\n            this.instance.play();\n            if (this.playButton) {\n                this.playButton.style.display = \"none\";\n            }\n        }\n    }\n    /**\n     * Checks if this player is allowed to be fullscreen by the browser.\n     *\n     * @returns True if you may call [[enterFullscreen]].\n     */\n    get fullscreenEnabled() {\n        return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled);\n    }\n    /**\n     * Checks if this player is currently fullscreen inside the browser.\n     *\n     * @returns True if it is fullscreen.\n     */\n    get isFullscreen() {\n        return ((document.fullscreenElement || document.webkitFullscreenElement) ===\n            this);\n    }\n    /**\n     * Requests the browser to make this player fullscreen.\n     *\n     * This is not guaranteed to succeed, please check [[fullscreenEnabled]] first.\n     */\n    enterFullscreen() {\n        if (this.requestFullscreen) {\n            this.requestFullscreen();\n        }\n        else if (this.webkitRequestFullScreen) {\n            this.webkitRequestFullScreen();\n        }\n    }\n    /**\n     * Requests the browser to no longer make this player fullscreen.\n     */\n    exitFullscreen() {\n        if (document.exitFullscreen) {\n            document.exitFullscreen();\n        }\n        else if (document.webkitCancelFullScreen) {\n            document.webkitCancelFullScreen();\n        }\n    }\n    contextMenuItems() {\n        const items = [];\n        if (this.fullscreenEnabled) {\n            if (this.isFullscreen) {\n                items.push({\n                    text: \"Exit fullscreen\",\n                    onClick: this.exitFullscreen.bind(this),\n                });\n            }\n            else {\n                items.push({\n                    text: \"Enter fullscreen\",\n                    onClick: this.enterFullscreen.bind(this),\n                });\n            }\n        }\n        items.push({\n            text: `Ruffle nightly 2021-01-25`,\n            onClick() {\n                window.open(RUFFLE_ORIGIN, \"_blank\");\n            },\n        });\n        return items;\n    }\n    openRightClickMenu(e) {\n        e.preventDefault();\n        // Clear all `right_click_menu` items.\n        while (this.rightClickMenu.firstChild) {\n            this.rightClickMenu.removeChild(this.rightClickMenu.firstChild);\n        }\n        // Populate `right_click_menu` items.\n        for (const { text, onClick } of this.contextMenuItems()) {\n            const element = document.createElement(\"li\");\n            element.className = \"menu_item active\";\n            element.textContent = text;\n            element.addEventListener(\"click\", onClick);\n            this.rightClickMenu.appendChild(element);\n        }\n        // Place `right_click_menu` in the top-left corner, so\n        // its `clientWidth` and `clientHeight` are not clamped.\n        this.rightClickMenu.style.left = \"0\";\n        this.rightClickMenu.style.top = \"0\";\n        this.rightClickMenu.style.display = \"block\";\n        const rect = this.getBoundingClientRect();\n        const x = e.clientX - rect.x;\n        const y = e.clientY - rect.y;\n        const maxX = rect.width - this.rightClickMenu.clientWidth - 1;\n        const maxY = rect.height - this.rightClickMenu.clientHeight - 1;\n        this.rightClickMenu.style.left = Math.floor(Math.min(x, maxX)) + \"px\";\n        this.rightClickMenu.style.top = Math.floor(Math.min(y, maxY)) + \"px\";\n    }\n    hideRightClickMenu() {\n        this.rightClickMenu.style.display = \"none\";\n    }\n    /**\n     * Pauses this player.\n     *\n     * No more frames, scripts or sounds will be executed.\n     * This movie will be considered inactive and will not wake up until resumed.\n     */\n    pause() {\n        if (this.instance) {\n            this.instance.pause();\n            if (this.playButton) {\n                this.playButton.style.display = \"block\";\n            }\n        }\n    }\n    audioState() {\n        if (this.instance) {\n            const audioContext = this.instance.audio_context();\n            return (audioContext && audioContext.state) || \"running\";\n        }\n        return \"suspended\";\n    }\n    unmuteOverlayClicked() {\n        if (this.instance) {\n            if (this.audioState() !== \"running\") {\n                const audioContext = this.instance.audio_context();\n                if (audioContext) {\n                    audioContext.resume();\n                }\n            }\n            if (this.unmuteOverlay) {\n                this.unmuteOverlay.style.display = \"none\";\n            }\n        }\n    }\n    /**\n     * Copies attributes and children from another element to this player element.\n     * Used by the polyfill elements, RuffleObject and RuffleEmbed.\n     *\n     * @param elem The element to copy all attributes from.\n     *\n     * @protected\n     */\n    copyElement(elem) {\n        if (elem) {\n            for (let i = 0; i < elem.attributes.length; i++) {\n                const attrib = elem.attributes[i];\n                if (attrib.specified) {\n                    // Issue 468: Chrome \"Click to Active Flash\" box stomps on title attribute\n                    if (attrib.name === \"title\" &&\n                        attrib.value === \"Adobe Flash Player\") {\n                        continue;\n                    }\n                    try {\n                        this.setAttribute(attrib.name, attrib.value);\n                    }\n                    catch (err) {\n                        // The embed may have invalid attributes, so handle these gracefully.\n                        console.warn(`Unable to set attribute ${attrib.name} on Ruffle instance`);\n                    }\n                }\n            }\n            for (const node of Array.from(elem.children)) {\n                this.appendChild(node);\n            }\n        }\n    }\n    /**\n     * Converts a dimension attribute on an HTML embed/object element to a valid CSS dimension.\n     * HTML element dimensions are unitless, but can also be percentages.\n     * Add a 'px' unit unless the value is a percentage.\n     * Returns null if this is not a valid dimension.\n     *\n     * @param attribute The attribute to convert\n     *\n     * @private\n     */\n    static htmlDimensionToCssDimension(attribute) {\n        if (attribute) {\n            const match = attribute.match(DIMENSION_REGEX);\n            if (match) {\n                let out = match[1];\n                if (!match[3]) {\n                    // Unitless -- add px for CSS.\n                    out += \"px\";\n                }\n                return out;\n            }\n        }\n        return null;\n    }\n    /**\n     * When a movie presents a new callback through `ExternalInterface.addCallback`,\n     * we are informed so that we can expose the method on any relevant DOM element.\n     *\n     * This should only be called by Ruffle itself and not by users.\n     *\n     * @param name The name of the callback that is now available.\n     *\n     * @internal\n     * @ignore\n     */\n    onCallbackAvailable(name) {\n        const instance = this.instance;\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        this[name] = (...args) => {\n            return instance === null || instance === void 0 ? void 0 : instance.call_exposed_callback(name, args);\n        };\n    }\n    /**\n     * Sets a trace observer on this flash player.\n     *\n     * The observer will be called, as a function, for each message that the playing movie will \"trace\" (output).\n     *\n     * @param observer The observer that will be called for each trace.\n     */\n    set traceObserver(observer) {\n        var _a;\n        (_a = this.instance) === null || _a === void 0 ? void 0 : _a.set_trace_observer(observer);\n    }\n    /**\n     * Panics this specific player, forcefully destroying all resources and displays an error message to the user.\n     *\n     * This should be called when something went absolutely, incredibly and disastrously wrong and there is no chance\n     * of recovery.\n     *\n     * Ruffle will attempt to isolate all damage to this specific player instance, but no guarantees can be made if there\n     * was a core issue which triggered the panic. If Ruffle is unable to isolate the cause to a specific player, then\n     * all players will panic and Ruffle will become \"poisoned\" - no more players will run on this page until it is\n     * reloaded fresh.\n     *\n     * @param error The error, if any, that triggered this panic.\n     */\n    panic(error) {\n        var _a;\n        if (this.panicked) {\n            // Only show the first major error, not any repeats - they aren't as important\n            return;\n        }\n        this.panicked = true;\n        if (error instanceof Error &&\n            (error.name === \"AbortError\" ||\n                error.message.includes(\"AbortError\"))) {\n            // Firefox: Don't display the panic screen if the user leaves the page while something is still loading\n            return;\n        }\n        const errorIndex = (_a = error === null || error === void 0 ? void 0 : error.ruffleIndexError) !== null && _a !== void 0 ? _a : PanicError.Unknown;\n        const errorArray = Object.assign([], {\n            stackIndex: -1,\n        });\n        errorArray.push(\"# Error Info\\n\");\n        if (error instanceof Error) {\n            errorArray.push(`Error name: ${error.name}\\n`);\n            errorArray.push(`Error message: ${error.message}\\n`);\n            if (error.stack) {\n                const stackIndex = errorArray.push(`Error stack:\\n\\`\\`\\`\\n${error.stack}\\n\\`\\`\\`\\n`) - 1;\n                errorArray.stackIndex = stackIndex;\n            }\n        }\n        else {\n            errorArray.push(`Error: ${error}\\n`);\n        }\n        errorArray.push(\"\\n# Player Info\\n\");\n        errorArray.push(this.debugPlayerInfo());\n        errorArray.push(\"\\n# Page Info\\n\");\n        errorArray.push(`Page URL: ${document.location.href}\\n`);\n        if (this.swfUrl)\n            errorArray.push(`SWF URL: ${this.swfUrl}\\n`);\n        errorArray.push(\"\\n# Browser Info\\n\");\n        errorArray.push(`Useragent: ${window.navigator.userAgent}\\n`);\n        errorArray.push(`OS: ${window.navigator.platform}\\n`);\n        errorArray.push(\"\\n# Ruffle Info\\n\");\n        errorArray.push(`Version: 0.1.0\\n`);\n        errorArray.push(`Name: nightly 2021-01-25\\n`);\n        errorArray.push(`Channel: nightly\\n`);\n        errorArray.push(`Built: 2021-01-25T01:05:41.178Z\\n`);\n        errorArray.push(`Commit: 32fd3fb71befbceecbba7c73d08af5ddd0f5a3d0\\n`);\n        const errorText = errorArray.join(\"\");\n        const issueTitle = `Error on ${document.location.href}`;\n        let issueLink = `https://github.com/ruffle-rs/ruffle/issues/new?title=${encodeURIComponent(issueTitle)}&body=`;\n        let issueBody = encodeURIComponent(errorText);\n        if (errorArray.stackIndex > -1 &&\n            String(issueLink + issueBody).length > 8195) {\n            // Strip the stack error from the array when the produced URL is way too long.\n            // This should prevent \"414 Request-URI Too Large\" errors on Github.\n            errorArray[errorArray.stackIndex] = null;\n            issueBody = encodeURIComponent(errorArray.join(\"\"));\n        }\n        issueLink += issueBody;\n        // Clears out any existing content (ie play button or canvas) and replaces it with the error screen\n        let errorBody, errorFooter;\n        switch (errorIndex) {\n            case PanicError.FileProtocol:\n                // General error: Running on the `file:` protocol\n                errorBody = `\n                    <p>It appears you are running Ruffle on the \"file:\" protocol.</p>\n                    <p>This doesn't work as browsers block many features from working for security reasons.</p>\n                    <p>Instead, we invite you to setup a local server or either use the web demo or the desktop application.</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"${RUFFLE_ORIGIN}/demo\">Web Demo</a></li>\n                    <li><a target=\"_top\" href=\"https://github.com/ruffle-rs/ruffle/tags\">Desktop Application</a></li>\n                `;\n                break;\n            case PanicError.JavascriptConfiguration:\n                // General error: Incorrect JavaScript configuration\n                errorBody = `\n                    <p>Ruffle has encountered a major issue due to an incorrect JavaScript configuration.</p>\n                    <p>If you are the server administrator, we invite you to check the error details to find out which parameter is at fault.</p>\n                    <p>You can also consult the Ruffle wiki for help.</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle#javascript-api\">View Ruffle Wiki</a></li>\n                    <li><a href=\"#\" id=\"panic-view-details\">View Error Details</a></li>\n                `;\n                break;\n            case PanicError.WasmNotFound:\n                // Self hosted: Cannot load `.wasm` file - file not found\n                errorBody = `\n                    <p>Ruffle failed to load the required \".wasm\" file component.</p>\n                    <p>If you are the server administrator, please ensure the file has correctly been uploaded.</p>\n                    <p>If the issue persists, you may need to use the \"publicPath\" setting: please consult the Ruffle wiki for help.</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle#configuration-options\">View Ruffle Wiki</a></li>\n                    <li><a href=\"#\" id=\"panic-view-details\">View Error Details</a></li>\n                `;\n                break;\n            case PanicError.WasmMimeType:\n                // Self hosted: Cannot load `.wasm` file - incorrect MIME type\n                errorBody = `\n                    <p>Ruffle has encountered a major issue whilst trying to initialize.</p>\n                    <p>This web server is not serving \".wasm\" files with the correct MIME type.</p>\n                    <p>If you are the server administrator, please consult the Ruffle wiki for help.</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle#configure-webassembly-mime-type\">View Ruffle Wiki</a></li>\n                    <li><a href=\"#\" id=\"panic-view-details\">View Error Details</a></li>\n                `;\n                break;\n            case PanicError.WasmCors:\n                // Self hosted: Cannot load `.wasm` file - CORS issues\n                errorBody = `\n                    <p>Ruffle failed to load the required \".wasm\" file component.</p>\n                    <p>Access to fetch has likely been blocked by CORS policy.</p>\n                    <p>If you are the server administrator, please consult the Ruffle wiki for help.</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle#web\">View Ruffle Wiki</a></li>\n                    <li><a href=\"#\" id=\"panic-view-details\">View Error Details</a></li>\n                `;\n                break;\n            case PanicError.JavascriptConflict:\n                // Self hosted: Cannot load `.wasm` file - a native object / function is overriden\n                errorBody = `\n                    <p>Ruffle has encountered a major issue whilst trying to initialize.</p>\n                    <p>It seems like this page uses JavaScript code that conflicts with Ruffle.</p>\n                    <p>If you are the server administrator, we invite you to try loading the file on a blank page.</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"${issueLink}\">Report Bug</a></li>\n                    <li><a href=\"#\" id=\"panic-view-details\">View Error Details</a></li>\n                `;\n                break;\n            default:\n                // Unknown error\n                errorBody = `\n                    <p>Ruffle has encountered a major issue whilst trying to display this Flash content.</p>\n                    <p>This isn't supposed to happen, so we'd really appreciate if you could file a bug!</p>\n                `;\n                errorFooter = `\n                    <li><a target=\"_top\" href=\"${issueLink}\">Report Bug</a></li>\n                    <li><a href=\"#\" id=\"panic-view-details\">View Error Details</a></li>\n                `;\n                break;\n        }\n        this.container.innerHTML = `\n            <div id=\"panic\">\n                <div id=\"panic-title\">Something went wrong :(</div>\n                <div id=\"panic-body\">${errorBody}</div>\n                <div id=\"panic-footer\">\n                    <ul>${errorFooter}</ul>\n                </div>\n            </div>\n        `;\n        const viewDetails = (this.container.querySelector(\"#panic-view-details\"));\n        if (viewDetails) {\n            viewDetails.onclick = () => {\n                this.container.querySelector(\"#panic-body\").innerHTML = `<textarea>${errorText}</textarea>`;\n                return false;\n            };\n        }\n        // Do this last, just in case it causes any cascading issues.\n        if (this.instance) {\n            this.instance.destroy();\n            this.instance = null;\n        }\n    }\n    displayMessage(message) {\n        // Show a dismissible message in front of the player\n        const div = document.createElement(\"div\");\n        div.id = \"message_overlay\";\n        div.innerHTML = `<div class=\"message\">\n            <div>\n                <p>${message}</p>\n            </div>\n            <div>\n                <button id=\"continue-btn\">continue</button>\n            </div>`;\n        this.container.prepend(div);\n        (this.container.querySelector(\"#continue-btn\")).onclick = () => {\n            div.remove();\n        };\n    }\n    debugPlayerInfo() {\n        return `Allows script access: ${this.allowScriptAccess}\\n`;\n    }\n}\n/**\n * Returns whether a SWF file can call JavaScript code in the surrounding HTML file.\n *\n * @param access The value of the `allowScriptAccess` attribute.\n * @param url The URL of the SWF file.\n * @returns True if script access is allowed.\n */\nexport function isScriptAccessAllowed(access, url) {\n    if (!access) {\n        access = \"sameDomain\";\n    }\n    switch (access.toLowerCase()) {\n        case \"always\":\n            return true;\n        case \"never\":\n            return false;\n        case \"samedomain\":\n        default:\n            try {\n                return (new URL(window.location.href).origin ===\n                    new URL(url, window.location.href).origin);\n            }\n            catch (_a) {\n                return false;\n            }\n    }\n}\n/**\n * Returns whether the given filename ends in a known flash extension.\n *\n * @param filename The filename to test.\n * @returns True if the filename is a flash movie (swf or spl).\n */\nexport function isSwfFilename(filename) {\n    if (filename) {\n        let pathname = \"\";\n        try {\n            // A base URL is required if `filename` is a relative URL, but we don't need to detect the real URL origin.\n            pathname = new URL(filename, RUFFLE_ORIGIN).pathname;\n        }\n        catch (err) {\n            // Some invalid filenames, like `///`, could raise a TypeError. Let's fail silently in this situation.\n        }\n        if (pathname && pathname.length >= 4) {\n            const extension = pathname.slice(-4).toLowerCase();\n            if (extension === \".swf\" || extension === \".spl\") {\n                return true;\n            }\n        }\n    }\n    return false;\n}\n","import { FLASH_MIMETYPE, FUTURESPLASH_MIMETYPE, FLASH7_AND_8_MIMETYPE, FLASH_MOVIE_MIMETYPE, isScriptAccessAllowed, isSwfFilename, RufflePlayer, } from \"./ruffle-player\";\nimport { registerElement } from \"./register-element\";\n/**\n * A polyfill html element.\n *\n * This specific class tries to polyfill existing `<embed>` tags,\n * and should not be used. Prefer [[RufflePlayer]] instead.\n *\n * @internal\n */\nexport class RuffleEmbed extends RufflePlayer {\n    /**\n     * Constructs a new Ruffle flash player for insertion onto the page.\n     *\n     * This specific class tries to polyfill existing `<embed>` tags,\n     * and should not be used. Prefer [[RufflePlayer]] instead.\n     */\n    constructor() {\n        super();\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    connectedCallback() {\n        var _a, _b, _c, _d;\n        super.connectedCallback();\n        const src = this.attributes.getNamedItem(\"src\");\n        if (src) {\n            const allowScriptAccess = (_b = (_a = this.attributes.getNamedItem(\"allowScriptAccess\")) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : null;\n            this.allowScriptAccess = isScriptAccessAllowed(allowScriptAccess, src.value);\n            this.load({\n                url: src.value,\n                parameters: (_c = this.attributes.getNamedItem(\"flashvars\")) === null || _c === void 0 ? void 0 : _c.value,\n                backgroundColor: (_d = this.attributes.getNamedItem(\"bgcolor\")) === null || _d === void 0 ? void 0 : _d.value,\n            });\n        }\n    }\n    /**\n     * Polyfill of HTMLObjectElement.\n     *\n     * @ignore\n     * @internal\n     */\n    get src() {\n        var _a;\n        return (_a = this.attributes.getNamedItem(\"src\")) === null || _a === void 0 ? void 0 : _a.value;\n    }\n    /**\n     * Polyfill of HTMLObjectElement.\n     *\n     * @ignore\n     * @internal\n     */\n    set src(srcval) {\n        if (srcval != undefined) {\n            const attr = document.createAttribute(\"src\");\n            attr.value = srcval;\n            this.attributes.setNamedItem(attr);\n        }\n        else {\n            this.attributes.removeNamedItem(\"src\");\n        }\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    static get observedAttributes() {\n        return [\"src\", \"width\", \"height\"];\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    attributeChangedCallback(name, oldValue, newValue) {\n        super.attributeChangedCallback(name, oldValue, newValue);\n        if (this.isConnected && name === \"src\") {\n            let parameters;\n            const flashvars = this.attributes.getNamedItem(\"flashvars\");\n            if (flashvars) {\n                parameters = flashvars.value;\n            }\n            const src = this.attributes.getNamedItem(\"src\");\n            if (src) {\n                this.load({ url: src.value, parameters });\n            }\n        }\n    }\n    /**\n     * Checks if the given element may be polyfilled with this one.\n     *\n     * @param elem Element to check.\n     * @returns True if the element looks like a flash embed.\n     */\n    static isInterdictable(elem) {\n        var _a;\n        if (!elem.getAttribute(\"src\")) {\n            return false;\n        }\n        const type = (_a = elem.getAttribute(\"type\")) === null || _a === void 0 ? void 0 : _a.toLowerCase();\n        if (type === FLASH_MIMETYPE.toLowerCase() ||\n            type === FUTURESPLASH_MIMETYPE.toLowerCase() ||\n            type === FLASH7_AND_8_MIMETYPE.toLowerCase() ||\n            type === FLASH_MOVIE_MIMETYPE.toLowerCase()) {\n            return true;\n        }\n        else if (type == null || type === \"\") {\n            return isSwfFilename(elem.getAttribute(\"src\"));\n        }\n        return false;\n    }\n    /**\n     * Creates a RuffleEmbed that will polyfill and replace the given element.\n     *\n     * @param elem Element to replace.\n     * @returns Created RuffleEmbed.\n     */\n    static fromNativeEmbedElement(elem) {\n        const externalName = registerElement(\"ruffle-embed\", RuffleEmbed);\n        const ruffleObj = document.createElement(externalName);\n        ruffleObj.copyElement(elem);\n        return ruffleObj;\n    }\n}\n","import { FLASH_MIMETYPE, FUTURESPLASH_MIMETYPE, FLASH7_AND_8_MIMETYPE, FLASH_MOVIE_MIMETYPE, FLASH_ACTIVEX_CLASSID, isScriptAccessAllowed, isSwfFilename, RufflePlayer, } from \"./ruffle-player\";\nimport { registerElement } from \"./register-element\";\nimport { RuffleEmbed } from \"./ruffle-embed\";\n/**\n * Find and return the first value in obj with the given key.\n * Many Flash params were case insensitive, so we use this when checking for them.\n *\n * @param obj Object to check\n * @param key Key to find\n * @param defaultValue Value if not found\n * @returns Value if found, else [[defaultValue]]\n */\nfunction findCaseInsensitive(obj, key, defaultValue) {\n    key = key.toLowerCase();\n    for (const k in obj) {\n        if (Object.hasOwnProperty.call(obj, k) && key === k.toLowerCase()) {\n            return obj[k];\n        }\n    }\n    return defaultValue;\n}\n/**\n * Returns all flash params ([[HTMLParamElement]]) that are for the given object.\n *\n * @param elem Element to check.\n * @returns A record of every parameter.\n */\nfunction paramsOf(elem) {\n    var _a, _b;\n    const params = {};\n    for (const param of elem.children) {\n        if (param instanceof HTMLParamElement) {\n            const key = (_a = param.attributes.getNamedItem(\"name\")) === null || _a === void 0 ? void 0 : _a.value;\n            const value = (_b = param.attributes.getNamedItem(\"value\")) === null || _b === void 0 ? void 0 : _b.value;\n            if (key && value) {\n                params[key] = value;\n            }\n        }\n    }\n    return params;\n}\n/**\n * A polyfill html element.\n *\n * This specific class tries to polyfill existing `<object>` tags,\n * and should not be used. Prefer [[RufflePlayer]] instead.\n *\n * @internal\n */\nexport class RuffleObject extends RufflePlayer {\n    /**\n     * Constructs a new Ruffle flash player for insertion onto the page.\n     *\n     * This specific class tries to polyfill existing `<object>` tags,\n     * and should not be used. Prefer [[RufflePlayer]] instead.\n     */\n    constructor() {\n        super();\n        this.params = {};\n    }\n    /**\n     * @ignore\n     * @internal\n     */\n    connectedCallback() {\n        var _a;\n        super.connectedCallback();\n        this.params = paramsOf(this);\n        const allowScriptAccess = findCaseInsensitive(this.params, \"allowScriptAccess\", null);\n        let url = null;\n        if (this.attributes.getNamedItem(\"data\")) {\n            url = (_a = this.attributes.getNamedItem(\"data\")) === null || _a === void 0 ? void 0 : _a.value;\n        }\n        else if (this.params.movie) {\n            url = this.params.movie;\n        }\n        const parameters = findCaseInsensitive(this.params, \"flashvars\", this.getAttribute(\"flashvars\"));\n        const backgroundColor = findCaseInsensitive(this.params, \"bgcolor\", this.getAttribute(\"bgcolor\"));\n        if (url) {\n            this.allowScriptAccess = isScriptAccessAllowed(allowScriptAccess, url);\n            // Kick off the SWF download.\n            const options = { url };\n            if (parameters) {\n                options.parameters = parameters;\n            }\n            if (backgroundColor) {\n                options.backgroundColor = backgroundColor;\n            }\n            this.load(options);\n        }\n    }\n    debugPlayerInfo() {\n        var _a;\n        let errorText = super.debugPlayerInfo();\n        errorText += \"Player type: Object\\n\";\n        let url = null;\n        if (this.attributes.getNamedItem(\"data\")) {\n            url = (_a = this.attributes.getNamedItem(\"data\")) === null || _a === void 0 ? void 0 : _a.value;\n        }\n        else if (this.params.movie) {\n            url = this.params.movie;\n        }\n        errorText += `SWF URL: ${url}\\n`;\n        Object.keys(this.params).forEach((key) => {\n            errorText += `Param ${key}: ${this.params[key]}\\n`;\n        });\n        Object.keys(this.attributes).forEach((key) => {\n            var _a;\n            errorText += `Attribute ${key}: ${(_a = this.attributes.getNamedItem(key)) === null || _a === void 0 ? void 0 : _a.value}\\n`;\n        });\n        return errorText;\n    }\n    /**\n     * Polyfill of HTMLObjectElement.\n     *\n     * @ignore\n     * @internal\n     */\n    get data() {\n        return this.getAttribute(\"data\");\n    }\n    /**\n     * Polyfill of HTMLObjectElement.\n     *\n     * @ignore\n     * @internal\n     */\n    set data(href) {\n        if (href != undefined) {\n            const attr = document.createAttribute(\"data\");\n            attr.value = href;\n            this.attributes.setNamedItem(attr);\n        }\n        else {\n            this.attributes.removeNamedItem(\"data\");\n        }\n    }\n    /**\n     * Checks if the given element may be polyfilled with this one.\n     *\n     * @param elem Element to check.\n     * @returns True if the element looks like a flash object.\n     */\n    static isInterdictable(elem) {\n        var _a, _b, _c;\n        // Don't polyfill if there's already a <ruffle-embed> inside the <object>.\n        if (elem.getElementsByTagName(\"ruffle-embed\").length > 0) {\n            return false;\n        }\n        // Don't polyfill if no movie specified.\n        const data = (_a = elem.attributes.getNamedItem(\"data\")) === null || _a === void 0 ? void 0 : _a.value.toLowerCase();\n        const params = paramsOf(elem);\n        let isSwf;\n        // Check for SWF file.\n        if (data) {\n            isSwf = isSwfFilename(data);\n        }\n        else if (params && params.movie) {\n            isSwf = isSwfFilename(params.movie);\n        }\n        else {\n            // Don't polyfill when no file is specified.\n            return false;\n        }\n        // Check ActiveX class ID.\n        const classid = (_b = elem.attributes\n            .getNamedItem(\"classid\")) === null || _b === void 0 ? void 0 : _b.value.toLowerCase();\n        if (classid === FLASH_ACTIVEX_CLASSID.toLowerCase()) {\n            // classid is an old-IE style embed that would not work on modern browsers.\n            // Often there will be an <embed> inside the <object> that would take precedence.\n            // Only polyfill this <object> if it doesn't contain a polyfillable <embed>.\n            return !Array.from(elem.getElementsByTagName(\"embed\")).some(RuffleEmbed.isInterdictable);\n        }\n        else if (classid != null && classid !== \"\") {\n            // Non-Flash classid.\n            return false;\n        }\n        // Check for MIME type.\n        const type = (_c = elem.attributes.getNamedItem(\"type\")) === null || _c === void 0 ? void 0 : _c.value.toLowerCase();\n        if (type === FLASH_MIMETYPE.toLowerCase() ||\n            type === FUTURESPLASH_MIMETYPE.toLowerCase() ||\n            type === FLASH7_AND_8_MIMETYPE.toLowerCase() ||\n            type === FLASH_MOVIE_MIMETYPE.toLowerCase()) {\n            return true;\n        }\n        else if (type != null && type !== \"\") {\n            return false;\n        }\n        // If no MIME/class type is specified, polyfill if movie is an SWF file.\n        return isSwf;\n    }\n    /**\n     * Creates a RuffleObject that will polyfill and replace the given element.\n     *\n     * @param elem Element to replace.\n     * @returns Created RuffleObject.\n     */\n    static fromNativeObjectElement(elem) {\n        const externalName = registerElement(\"ruffle-object\", RuffleObject);\n        const ruffleObj = (document.createElement(externalName));\n        // Avoid copying embeds-inside-objects to avoid double polyfilling.\n        for (const embedElem of Array.from(elem.getElementsByTagName(\"embed\"))) {\n            if (RuffleEmbed.isInterdictable(embedElem)) {\n                embedElem.remove();\n            }\n        }\n        // Avoid copying objects-inside-objects to avoid double polyfilling.\n        // This may happen when Internet Explorer's conditional comments are used.\n        for (const objectElem of Array.from(elem.getElementsByTagName(\"object\"))) {\n            if (RuffleObject.isInterdictable(objectElem)) {\n                objectElem.remove();\n            }\n        }\n        ruffleObj.copyElement(elem);\n        return ruffleObj;\n    }\n}\n","/**\n * Attempt to discover the public path of the current Ruffle source. This can\n * be used to configure Webpack.\n *\n * We have several points of configuration for how the Ruffle public path can\n * be determined:\n *\n * 1. The public path can be specified on a per-source basis using the\n * RufflePlayer config, for example:\n * `window.RufflePlayer.config.publicPaths.local = \"/dist/\";`\n * 2. A global public path can be specified for all sources, also in config.\n * `window.RufflePlayer.config.publicPath = \"/dist/\";`\n * 3. If there is absolutely no configuration that yields a public path then we\n * return the parent path of where this script is hosted, which should be\n * the correct default in most cases.\n *\n * @param config The `window.RufflePlayer.config` object.\n * @param source_name The name of the source.\n * @returns The public path for the given source.\n */\nexport function publicPath(config, source_name) {\n    let path = \"\";\n    if (config !== undefined &&\n        config.publicPaths !== undefined &&\n        config.publicPaths[source_name] !== undefined) {\n        path = config.publicPaths[source_name];\n    }\n    else if (config !== undefined && config.publicPath !== undefined) {\n        path = config.publicPath;\n    }\n    else if (document.currentScript !== undefined &&\n        document.currentScript !== null &&\n        \"src\" in document.currentScript &&\n        document.currentScript.src !== \"\") {\n        // Default to the directory where this script resides.\n        try {\n            path = new URL(\".\", document.currentScript.src).href;\n        }\n        catch (e) {\n            console.warn(\"Unable to get currentScript URL\");\n        }\n    }\n    // Webpack expects the paths to end with a /.\n    if (path !== \"\" && !path.endsWith(\"/\")) {\n        path += \"/\";\n    }\n    return path;\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar _a, _b;\nimport { RuffleObject } from \"./ruffle-object\";\nimport { RuffleEmbed } from \"./ruffle-embed\";\nimport { installPlugin, FLASH_PLUGIN } from \"./plugin-polyfill\";\nimport { publicPath } from \"./public-path\";\nlet isExtension;\nconst globalConfig = (_b = (_a = window.RufflePlayer) === null || _a === void 0 ? void 0 : _a.config) !== null && _b !== void 0 ? _b : {};\nconst jsScriptUrl = publicPath(globalConfig, \"ruffle.js\") + \"ruffle.js\";\n/**\n * Polyfill native Flash elements with Ruffle equivalents.\n *\n * This polyfill isn't fool-proof: If there's a chance site JavaScript has\n * access to a pre-polyfill element, then this will break horribly. We can\n * keep native objects out of the DOM, and thus out of JavaScript's grubby\n * little hands, but only if we load first.\n */\nlet objects;\nlet embeds;\n/**\n *\n */\nfunction polyfillFlashInstances() {\n    try {\n        // Create live collections to track embed tags.\n        objects = objects !== null && objects !== void 0 ? objects : document.getElementsByTagName(\"object\");\n        embeds = embeds !== null && embeds !== void 0 ? embeds : document.getElementsByTagName(\"embed\");\n        // Replace <object> first, because <object> often wraps <embed>.\n        for (const elem of Array.from(objects)) {\n            if (RuffleObject.isInterdictable(elem)) {\n                const ruffleObject = RuffleObject.fromNativeObjectElement(elem);\n                elem.replaceWith(ruffleObject);\n            }\n        }\n        for (const elem of Array.from(embeds)) {\n            if (RuffleEmbed.isInterdictable(elem)) {\n                const ruffleEmbed = RuffleEmbed.fromNativeEmbedElement(elem);\n                elem.replaceWith(ruffleEmbed);\n            }\n        }\n    }\n    catch (err) {\n        console.error(`Serious error encountered when polyfilling native Flash elements: ${err}`);\n    }\n}\n/**\n * Inject Ruffle into <iframe> and <frame> elements.\n *\n * This polyfill isn't fool-proof either: On self-hosted builds, it may\n * not work due to browsers CORS policy or be loaded too late for some\n * libraries like SWFObject. These should be less of a problem on the\n * web extension. This polyfill should, however, do the trick in most\n * cases, but users should be aware of its natural limits.\n */\nlet iframes;\nlet frames;\n/**\n *\n */\nfunction polyfillFrames() {\n    // Create live collections to track embed tags.\n    iframes = iframes !== null && iframes !== void 0 ? iframes : document.getElementsByTagName(\"iframe\");\n    frames = frames !== null && frames !== void 0 ? frames : document.getElementsByTagName(\"frame\");\n    [iframes, frames].forEach((elementsList) => {\n        for (let i = 0; i < elementsList.length; i++) {\n            const element = elementsList[i];\n            if (element.dataset.rufflePolyfilled !== undefined) {\n                // Don't re-polyfill elements with the \"data-ruffle-polyfilled\" attribute.\n                continue;\n            }\n            element.dataset.rufflePolyfilled = \"\";\n            const elementWindow = element.contentWindow;\n            // Cross origin requests may reach an exception, so let's prepare for this eventuality.\n            const errorMessage = `Couldn't load Ruffle into ${element.tagName}[${element.src}]: `;\n            try {\n                if (elementWindow.document.readyState === \"complete\") {\n                    injectRuffle(elementWindow, errorMessage);\n                }\n            }\n            catch (err) {\n                if (!isExtension) {\n                    // The web extension should be able to load Ruffle into cross origin frames\n                    // because it has \"all_frames\" set to true in its manifest.json: RufflePlayer\n                    // config won't be injected but it's not worth showing an error.\n                    console.warn(errorMessage + err);\n                }\n            }\n            // Attach listener to the element to handle frame navigation.\n            element.addEventListener(\"load\", () => {\n                injectRuffle(elementWindow, errorMessage);\n            }, false);\n        }\n    });\n}\n/**\n * @param elementWindow The (i)frame's window object.\n * @param errorMessage The message to log when Ruffle cannot access the (i)frame's document.\n */\nfunction injectRuffle(elementWindow, errorMessage) {\n    var _a;\n    return __awaiter(this, void 0, void 0, function* () {\n        // The document is supposed to be completely loaded when this function is run.\n        // As Chrome may be unable to access the document properties, we have to delay the execution a little bit.\n        yield new Promise((resolve) => {\n            window.setTimeout(() => {\n                resolve();\n            }, 100);\n        });\n        let elementDocument;\n        try {\n            elementDocument = elementWindow.document;\n            if (!elementDocument) {\n                // Don't polyfill if the window has no document: the element may have been removed from the parent window.\n                return;\n            }\n        }\n        catch (err) {\n            if (!isExtension) {\n                console.warn(errorMessage + err);\n            }\n            return;\n        }\n        if (!isExtension &&\n            elementDocument.documentElement.dataset.ruffleOptout !== undefined) {\n            // Don't polyfill elements with the \"data-ruffle-optout\" attribute.\n            return;\n        }\n        if (!isExtension) {\n            if (!elementWindow.RufflePlayer) {\n                const script = elementDocument.createElement(\"script\");\n                script.setAttribute(\"src\", jsScriptUrl);\n                script.onload = () => {\n                    // Inject parent configuration once the script is loaded, preventing it from being ignored.\n                    elementWindow.RufflePlayer = {};\n                    elementWindow.RufflePlayer.config = globalConfig;\n                };\n                elementDocument.head.appendChild(script);\n            }\n        }\n        else {\n            if (!elementWindow.RufflePlayer) {\n                elementWindow.RufflePlayer = {};\n            }\n            // Merge parent window and frame configurations, will likely be applied too late though.\n            elementWindow.RufflePlayer.config = Object.assign(Object.assign({}, globalConfig), ((_a = elementWindow.RufflePlayer.config) !== null && _a !== void 0 ? _a : {}));\n        }\n    });\n}\n/**\n * Listen for changes to the DOM.\n *\n */\nfunction initMutationObserver() {\n    const observer = new MutationObserver(function (mutationsList) {\n        // If any nodes were added, re-run the polyfill to detect any new instances.\n        const nodesAdded = mutationsList.some((mutation) => mutation.addedNodes.length > 0);\n        if (nodesAdded) {\n            polyfillFlashInstances();\n            polyfillFrames();\n        }\n    });\n    observer.observe(document, { childList: true, subtree: true });\n}\n/**\n * Polyfills the detection of Flash plugins in the browser.\n */\nexport function pluginPolyfill() {\n    installPlugin(FLASH_PLUGIN);\n}\n/**\n * Polyfills legacy Flash content on the page.\n *\n * @param isExt Whether or not Ruffle is running as a browser's extension.\n */\nexport function polyfill(isExt) {\n    isExtension = isExt;\n    polyfillFlashInstances();\n    polyfillFrames();\n    initMutationObserver();\n}\n","/**\n * A representation of a semver 2 compliant version string\n */\nexport class Version {\n    /**\n     * Construct a Version from specific components.\n     *\n     * If you wish to parse a string into a Version then please use [[fromSemver]].\n     *\n     * @param major The major version component.\n     * @param minor The minor version component.\n     * @param patch The patch version component.\n     * @param prIdent A list of pre-release identifiers, if any\n     * @param buildIdent A list of build identifiers, if any\n     */\n    constructor(major, minor, patch, prIdent, buildIdent) {\n        this.major = major;\n        this.minor = minor;\n        this.patch = patch;\n        this.prIdent = prIdent;\n        this.buildIdent = buildIdent;\n    }\n    /**\n     * Construct a version from a semver 2 compliant string.\n     *\n     * This function is intended for use with semver 2 compliant strings.\n     * Malformed strings may still parse correctly, but this result is not\n     * guaranteed.\n     *\n     * @param versionString A semver 2.0.0 compliant version string\n     * @returns A version object\n     */\n    static fromSemver(versionString) {\n        const buildSplit = versionString.split(\"+\"), prSplit = buildSplit[0].split(\"-\"), versionSplit = prSplit[0].split(\".\");\n        const major = parseInt(versionSplit[0], 10);\n        let minor = 0;\n        let patch = 0;\n        let prIdent = null;\n        let buildIdent = null;\n        if (versionSplit[1] != undefined) {\n            minor = parseInt(versionSplit[1], 10);\n        }\n        if (versionSplit[2] != undefined) {\n            patch = parseInt(versionSplit[2], 10);\n        }\n        if (prSplit[1] != undefined) {\n            prIdent = prSplit[1].split(\".\");\n        }\n        if (buildSplit[1] != undefined) {\n            buildIdent = buildSplit[1].split(\".\");\n        }\n        return new Version(major, minor, patch, prIdent, buildIdent);\n    }\n    /**\n     * Returns true if a given version is compatible with this one.\n     *\n     * Compatibility is defined as having the same nonzero major version\n     * number, or if both major versions are zero, the same nonzero minor\n     * version number, or if both minor versions are zero, the same nonzero\n     * patch version number.\n     *\n     * This implements the ^ operator in npm's semver package, with the\n     * exception of the prerelease exclusion rule.\n     *\n     * @param other The other version to test against\n     * @returns True if compatible\n     */\n    isCompatibleWith(other) {\n        return ((this.major !== 0 && this.major === other.major) ||\n            (this.major === 0 &&\n                other.major === 0 &&\n                this.minor !== 0 &&\n                this.minor === other.minor) ||\n            (this.major === 0 &&\n                other.major === 0 &&\n                this.minor === 0 &&\n                other.minor === 0 &&\n                this.patch !== 0 &&\n                this.patch === other.patch));\n    }\n    /**\n     * Returns true if this version has precedence over (is newer than) another\n     * version.\n     *\n     * Precedence is defined as in the Semver 2 spec. This implements the >\n     * operator in npm's semver package, with the exception of the prerelease\n     * exclusion rule.\n     *\n     * @param other The other version to test against\n     * @returns True if this version has precedence over the other one\n     */\n    hasPrecedenceOver(other) {\n        if (this.major > other.major) {\n            return true;\n        }\n        else if (this.major < other.major) {\n            return false;\n        }\n        if (this.minor > other.minor) {\n            return true;\n        }\n        else if (this.minor < other.minor) {\n            return false;\n        }\n        if (this.patch > other.patch) {\n            return true;\n        }\n        else if (this.patch < other.patch) {\n            return false;\n        }\n        if (this.prIdent == null && other.prIdent != null) {\n            return true;\n        }\n        else if (this.prIdent != null && other.prIdent != null) {\n            const isNumeric = /^[0-9]*$/;\n            for (let i = 0; i < this.prIdent.length && i < other.prIdent.length; i += 1) {\n                if (!isNumeric.test(this.prIdent[i]) &&\n                    isNumeric.test(other.prIdent[i])) {\n                    return true;\n                }\n                else if (isNumeric.test(this.prIdent[i]) &&\n                    isNumeric.test(other.prIdent[i])) {\n                    if (parseInt(this.prIdent[i], 10) >\n                        parseInt(other.prIdent[i], 10)) {\n                        return true;\n                    }\n                    else if (parseInt(this.prIdent[i], 10) <\n                        parseInt(other.prIdent[i], 10)) {\n                        return false;\n                    }\n                }\n                else if (isNumeric.test(this.prIdent[i]) &&\n                    !isNumeric.test(other.prIdent[i])) {\n                    return false;\n                }\n                else if (!isNumeric.test(this.prIdent[i]) &&\n                    !isNumeric.test(other.prIdent[i])) {\n                    if (this.prIdent[i] > other.prIdent[i]) {\n                        return true;\n                    }\n                    else if (this.prIdent[i] < other.prIdent[i]) {\n                        return false;\n                    }\n                }\n            }\n            return this.prIdent.length > other.prIdent.length;\n        }\n        return false;\n    }\n    /**\n     * Tests if a given version is equivalent to this one.\n     *\n     * Build and prerelease tags are ignored.\n     *\n     * @param other The other version to test against\n     * @returns True if the given version is equivalent\n     */\n    isEqual(other) {\n        return (this.major === other.major &&\n            this.minor === other.minor &&\n            this.patch === other.patch);\n    }\n    /**\n     * Tests if a given version is stable or a compatible prerelease for this\n     * version.\n     *\n     * This implements the prerelease exclusion rule of NPM semver: a\n     * prerelease version can only pass this check if the major/minor/patch\n     * components of both versions are the same. Otherwise, the prerelease\n     * version always fails.\n     *\n     * @param other The other version to test against\n     * @returns True if the given version is either stable, or a\n     * prerelease in the same series as this one.\n     */\n    isStableOrCompatiblePrerelease(other) {\n        if (other.prIdent == null) {\n            return true;\n        }\n        else {\n            return (this.major === other.major &&\n                this.minor === other.minor &&\n                this.patch === other.patch);\n        }\n    }\n}\n","import { Version } from \"./version\";\n/**\n * Represents a set of version requirements.\n */\nexport class VersionRange {\n    /**\n     * Constructs a range of versions as specified by the given requirements.\n     *\n     * If you wish to construct this object from a string representation,\n     * then use [[fromRequirementString]].\n     *\n     * @param requirements Requirements to set this range by\n     */\n    constructor(requirements) {\n        this.requirements = requirements;\n    }\n    /**\n     * Determine if a given version satisfies this range.\n     *\n     * @param fver A version object to test against.\n     * @returns Whether or not the given version matches this range\n     */\n    satisfiedBy(fver) {\n        for (let i = 0; i < this.requirements.length; i += 1) {\n            let matches = true;\n            for (let j = 0; j < this.requirements[i].length; j += 1) {\n                const comparator = this.requirements[i][j].comparator;\n                const version = this.requirements[i][j].version;\n                matches =\n                    matches && version.isStableOrCompatiblePrerelease(fver);\n                if (comparator === \"\" || comparator === \"=\") {\n                    matches = matches && version.isEqual(fver);\n                }\n                else if (comparator === \">\") {\n                    matches = matches && fver.hasPrecedenceOver(version);\n                }\n                else if (comparator === \">=\") {\n                    matches =\n                        matches &&\n                            (fver.hasPrecedenceOver(version) ||\n                                version.isEqual(fver));\n                }\n                else if (comparator === \"<\") {\n                    matches = matches && version.hasPrecedenceOver(fver);\n                }\n                else if (comparator === \"<=\") {\n                    matches =\n                        matches &&\n                            (version.hasPrecedenceOver(fver) ||\n                                version.isEqual(fver));\n                }\n                else if (comparator === \"^\") {\n                    matches = matches && version.isCompatibleWith(fver);\n                }\n            }\n            if (matches) {\n                return true;\n            }\n        }\n        return false;\n    }\n    /**\n     * Parse a requirement string into a version range.\n     *\n     * @param requirement The version requirements, consisting of a\n     * series of space-separated strings, each one being a semver version\n     * optionally prefixed by a comparator or a separator.\n     *\n     * Valid comparators are:\n     * - `\"\"` or `\"=\"`: Precisely this version\n     * - `\">`\": A version newer than this one\n     * - `\">`=\": A version newer or equal to this one\n     * - `\"<\"`: A version older than this one\n     * - `\"<=\"`: A version older or equal to this one\n     * - `\"^\"`: A version that is compatible with this one\n     *\n     * A separator is `\"||`\" which splits the requirement string into\n     * left OR right.\n     *\n     * @returns A version range object.\n     */\n    static fromRequirementString(requirement) {\n        const components = requirement.split(\" \");\n        let set = [];\n        const requirements = [];\n        for (let i = 0; i < components.length; i += 1) {\n            if (components[i] === \"||\") {\n                if (set.length > 0) {\n                    requirements.push(set);\n                    set = [];\n                }\n            }\n            else if (components[i].length > 0) {\n                const match = /[0-9]/.exec(components[i]);\n                if (match) {\n                    const comparator = components[i]\n                        .slice(0, match.index)\n                        .trim();\n                    const version = Version.fromSemver(components[i].slice(match.index).trim());\n                    set.push({ comparator, version });\n                }\n            }\n        }\n        if (set.length > 0) {\n            requirements.push(set);\n        }\n        return new VersionRange(requirements);\n    }\n}\n","import { Version } from \"./version\";\nimport { VersionRange } from \"./version-range\";\n/**\n * Represents the Ruffle public API.\n *\n * The public API exists primarily to allow multiple installs of Ruffle on a\n * page (e.g. an extension install and a local one) to cooperate. In an ideal\n * situation, all Ruffle sources on the page install themselves into a single\n * public API, and then the public API picks the newest version by default.\n *\n * This API *is* versioned, in case we need to upgrade it. However, it must be\n * backwards- and forwards-compatible with all known sources.\n */\nexport class PublicAPI {\n    /**\n     * Construct the Ruffle public API.\n     *\n     * Do not use this function to negotiate a public API. Instead, use\n     * `public_api` to register your Ruffle source with an existing public API\n     * if it exists.\n     *\n     * Constructing a Public API will also trigger it to initialize Ruffle once\n     * the page loads, if the API has not already been superseded.\n     *\n     * @param prev What used to be in the public API slot.\n     *\n     * This is used to upgrade from a prior version of the public API, or from\n     * a user-defined configuration object placed in the public API slot.\n     *\n     * @protected\n     */\n    constructor(prev) {\n        this.sources = {};\n        this.config = {};\n        this.invoked = false;\n        this.newestName = null;\n        this.conflict = null;\n        if (prev !== undefined && prev !== null) {\n            if (prev instanceof PublicAPI) {\n                /// We're upgrading from a previous API to a new one.\n                this.sources = prev.sources;\n                this.config = prev.config;\n                this.invoked = prev.invoked;\n                this.conflict = prev.conflict;\n                this.newestName = prev.newestName;\n                prev.superseded();\n            }\n            else if (prev.constructor === Object &&\n                prev.config instanceof Object) {\n                /// We're the first, install user configuration\n                this.config = prev.config;\n            }\n            else {\n                /// We're the first, but conflicting with someone else.\n                this.conflict = prev;\n            }\n        }\n        if (document.readyState === \"loading\") {\n            window.addEventListener(\"DOMContentLoaded\", this.init.bind(this));\n        }\n        else {\n            window.setTimeout(this.init.bind(this), 0);\n        }\n    }\n    /**\n     * The version of the public API.\n     *\n     * This is *not* the version of Ruffle itself.\n     *\n     * This allows a page with an old version of the Public API to be upgraded\n     * to a new version of the API. The public API is intended to be changed\n     * very infrequently, if at all, but this provides an escape mechanism for\n     * newer Ruffle sources to upgrade older installations.\n     *\n     * @returns The version of this public API.\n     */\n    get version() {\n        return \"0.1.0\";\n    }\n    /**\n     * Register a given source with the Ruffle Public API.\n     *\n     * @param name The name of the source.\n     * @param api The public API object. This must conform to the shape\n     * of `SourceAPI`.\n     */\n    registerSource(name, api) {\n        this.sources[name] = api;\n    }\n    /**\n     * Determine the name of the newest registered source in the Public API.\n     *\n     * @returns The name of the source, or `null` if no source\n     * has yet to be registered.\n     */\n    newestSourceName() {\n        let newestName = null, newestVersion = Version.fromSemver(\"0.0.0\");\n        for (const k in this.sources) {\n            if (Object.prototype.hasOwnProperty.call(this.sources, k)) {\n                const kVersion = Version.fromSemver(this.sources[k].version);\n                if (kVersion.hasPrecedenceOver(newestVersion)) {\n                    newestName = k;\n                    newestVersion = kVersion;\n                }\n            }\n        }\n        return newestName;\n    }\n    /**\n     * Negotiate and start Ruffle.\n     *\n     * This function reads the config parameter to determine which polyfills\n     * should be enabled. If the configuration parameter is missing, then we\n     * use a built-in set of defaults sufficient to fool sites with static\n     * content and weak plugin detection.\n     */\n    init() {\n        if (!this.invoked) {\n            this.invoked = true;\n            this.newestName = this.newestSourceName();\n            if (this.newestName === null) {\n                throw new Error(\"No registered Ruffle source!\");\n            }\n            const polyfills = this.config.polyfills;\n            if (polyfills !== false) {\n                this.sources[this.newestName].polyfill(this.newestName === \"extension\");\n            }\n        }\n    }\n    /**\n     * Look up the newest Ruffle source and return it's API.\n     *\n     * @returns An instance of the Source API.\n     */\n    newest() {\n        const name = this.newestSourceName();\n        return name != null ? this.sources[name] : null;\n    }\n    /**\n     * Look up a specific Ruffle version (or any version satisfying a given set\n     * of requirements) and return it's API.\n     *\n     * @param ver_requirement A set of semantic version requirement\n     * strings that the player version must satisfy.\n     *\n     * @returns An instance of the Source API, if one or more\n     * sources satisfied the requirement.\n     */\n    satisfying(ver_requirement) {\n        const requirement = VersionRange.fromRequirementString(ver_requirement);\n        let valid = null;\n        for (const k in this.sources) {\n            if (Object.prototype.hasOwnProperty.call(this.sources, k)) {\n                const version = Version.fromSemver(this.sources[k].version);\n                if (requirement.satisfiedBy(version)) {\n                    valid = this.sources[k];\n                }\n            }\n        }\n        return valid;\n    }\n    /**\n     * Look up the newest Ruffle version compatible with the `local` source, if\n     * it's installed. Otherwise, use the latest version.\n     *\n     * @returns An instance of the Source API\n     */\n    localCompatible() {\n        if (this.sources.local !== undefined) {\n            return this.satisfying(\"^\" + this.sources.local.version);\n        }\n        else {\n            return this.newest();\n        }\n    }\n    /**\n     * Look up the newest Ruffle version with the exact same version as the\n     * `local` source, if it's installed. Otherwise, use the latest version.\n     *\n     * @returns An instance of the Source API\n     */\n    local() {\n        if (this.sources.local !== undefined) {\n            return this.satisfying(\"=\" + this.sources.local.version);\n        }\n        else {\n            return this.newest();\n        }\n    }\n    /**\n     * Indicates that this version of the public API has been superseded by a\n     * newer version.\n     *\n     * This should only be called by a newer version of the Public API.\n     * Identical versions of the Public API should not supersede older versions\n     * of that same API.\n     *\n     * Unfortunately, we can't disable polyfills after-the-fact, so this\n     * only lets you disable the init event...\n     *\n     * @protected\n     */\n    superseded() {\n        this.invoked = true;\n    }\n    /**\n     * Join a source into the public API, if it doesn't already exist.\n     *\n     * @param prevRuffle The previous iteration of the Ruffle API.\n     *\n     * The `prevRuffle` param lists the previous object in the RufflePlayer\n     * slot. We perform some checks to see if this is a Ruffle public API or a\n     * conflicting object. If this is conflicting, then a new public API will\n     * be constructed (see the constructor information for what happens to\n     * `prevRuffle`).\n     *\n     * Note that Public API upgrades are deliberately not enabled in this\n     * version of Ruffle, since there is no Public API to upgrade from.\n     *\n     * @param sourceName The name of this particular\n     * Ruffle source.\n     *\n     * @param sourceAPI The Ruffle source to add.\n     *\n     * If both parameters are provided they will be used to define a new Ruffle\n     * source to register with the public API.\n     *\n     * @returns The Ruffle Public API.\n     */\n    static negotiate(prevRuffle, sourceName, sourceAPI) {\n        let publicAPI;\n        if (prevRuffle instanceof PublicAPI) {\n            publicAPI = prevRuffle;\n        }\n        else {\n            publicAPI = new PublicAPI(prevRuffle);\n        }\n        if (sourceName !== undefined && sourceAPI !== undefined) {\n            publicAPI.registerSource(sourceName, sourceAPI);\n            // Install the faux plugin detection immediately.\n            // This is necessary because scripts such as SWFObject check for the\n            // Flash Player immediately when they load.\n            // TODO: Maybe there's a better place for this.\n            const polyfills = publicAPI.config.polyfills;\n            if (polyfills !== false) {\n                sourceAPI.pluginPolyfill();\n            }\n        }\n        return publicAPI;\n    }\n}\n","import { pluginPolyfill, polyfill } from \"./polyfills\";\nimport { registerElement } from \"./register-element\";\nimport { RufflePlayer } from \"./ruffle-player\";\n/**\n * Represents this particular version of Ruffle.\n *\n * Multiple APIs can be instantiated from different sources; e.g. an \"extension\"\n * version, versus a \"local\" version. This expresses to the Public API\n * negotiator (see [[PublicAPI]]) what this particular version of Ruffle is and\n * how to control it.\n */\nexport class SourceAPI {\n    /**\n     * Construct a Source API.\n     *\n     * @param name The name of this particular source.\n     */\n    constructor(name) {\n        this.name = name;\n    }\n    /**\n     * The version of this particular API.\n     *\n     * This is returned as a string in a semver compatible format.\n     *\n     * @returns The version of this Ruffle source\n     */\n    get version() {\n        return \"0.1.0\";\n    }\n    /**\n     * Start up the polyfills.\n     *\n     * Do not run polyfills for more than one Ruffle source at a time.\n     *\n     * @param isExt Whether or not Ruffle is running as a browser's extension.\n     */\n    polyfill(isExt) {\n        polyfill(isExt);\n    }\n    /**\n     * Polyfill the plugin detection.\n     *\n     * This needs to run before any plugin detection script does.\n     */\n    pluginPolyfill() {\n        pluginPolyfill();\n    }\n    /**\n     * Create a Ruffle player element using this particular version of Ruffle.\n     *\n     * @returns The player element. This is a DOM element that may be inserted\n     * into the current page as you wish.\n     */\n    createPlayer() {\n        const name = registerElement(\"ruffle-player\", RufflePlayer);\n        return document.createElement(name);\n    }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop)","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"\";","const { PublicAPI, SourceAPI, publicPath } = require(\"ruffle-core\");\n\nwindow.RufflePlayer = PublicAPI.negotiate(\n    window.RufflePlayer,\n    \"local\",\n    new SourceAPI(\"local\")\n);\n__webpack_public_path__ = publicPath(window.RufflePlayer.config, \"local\");\n"],"sourceRoot":""}