Current File : /data/web/virtuals/215191/virtual/www/domains/gryna2.com.pl/ruffle/ruffle.js.map |
{"version":3,"sources":["webpack://ruffle-selfhosted/webpack/runtime/create fake namespace object","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/webpack/runtime/jsonp chunk loading","webpack://ruffle-selfhosted/./js/ruffle.js"],"names":["leafPrototypes","getProto","copyToAudioBuffer","audioBuffer","leftData","rightData","getChannelData","set","lAudioContext","AudioContext","webkitAudioContext","undefined","wasm","heap","Array","fill","getObject","idx","push","heap_next","length","takeObject","ret","dropObject","cachedTextDecoder","TextDecoder","ignoreBOM","fatal","decode","cachegetUint8Memory0","getUint8Memory0","buffer","memory","Uint8Array","getStringFromWasm0","ptr","len","subarray","addHeapObject","obj","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_34","arg2","_dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h166602be110b18e3","__wbg_adapter_37","__wbg_adapter_40","__wbg_adapter_43","_dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h9aa9399bed533a60","__wbg_adapter_46","_dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hc97237e4ab4442a6","__wbg_adapter_49","__wbg_adapter_52","__wbg_adapter_55","__wbg_adapter_58","_dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hd78e0317014e7e8b","cachegetFloat32Memory0","getArrayF32FromWasm0","Float32Array","handleError","apply","this","arguments","e","__wbindgen_exn_store","stack_pointer","addBorrowedObject","cachegetUint32Memory0","getArrayU8FromWasm0","Ruffle","Object","create","prototype","__destroy_into_raw","__wbg_ruffle_free","parent","js_player","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_is_playing","ruffle_prepare_context_menu","index","ruffle_run_context_menu_callback","ruffle_clear_custom_menu_items","ruffle_destroy","ptr1","array","Uint32Array","passArrayJsValueToWasm0","len1","ruffle_call_exposed_callback","observer","ruffle_set_trace_observer","ruffle_audio_context","async","init","input","URL","imports","wbg","__wbindgen_object_drop_ref","__wbindgen_cb_drop","__wbindgen_is_function","__wbindgen_json_parse","parse","__wbindgen_json_serialize","__wbindgen_string_new","__wbindgen_object_clone_ref","__wbg_isFullscreen_96b85640554e160d","isFullscreen","__wbg_displayUnsupportedMessage_a8f81a8e054e5e91","displayUnsupportedMessage","__wbg_displayMessage_c57c20204892da2b","displayMessage","__wbg_new_df6e6ab7a65c4c4d","__wbg_panic_bbc809dd04a12c60","panic","__wbg_copyToAudioBuffer_58f244be94bac1d2","arg3","arg4","__wbg_setMetadata_bbaeaee7f48274e6","setMetadata","__wbg_onCallbackAvailable_3a48fae397926c96","onCallbackAvailable","__wbg_onFSCommand_fb2f94653f71796e","onFSCommand","__wbindgen_number_new","__wbg_new_59cb74e423758ede","__wbg_stack_558ba5917b466edd","__wbg_error_4bb6c2a97407129a","console","error","__wbindgen_free","__wbindgen_is_undefined","__wbg_instanceof_WebGl2RenderingContext_61a66a1af6516586","WebGL2RenderingContext","__wbg_bindVertexArray_808c39d3c0f17264","bindVertexArray","__wbg_blitFramebuffer_3b625df19331f21c","arg5","arg6","arg7","arg8","arg9","arg10","blitFramebuffer","__wbg_createVertexArray_855d59250230c563","createVertexArray","__wbg_renderbufferStorageMultisample_bbeb2b87cb14307f","renderbufferStorageMultisample","__wbg_texImage2D_173d216c50e54701","texImage2D","__wbg_bindFramebuffer_ce3cfcfec4aa02cc","bindFramebuffer","__wbg_bindRenderbuffer_35f3639b7da4e4c7","bindRenderbuffer","__wbg_bindTexture_f2a0487a487a78d9","bindTexture","__wbg_createFramebuffer_7fd863d54241be81","createFramebuffer","__wbg_createRenderbuffer_52ebc0325ed6e885","createRenderbuffer","__wbg_createTexture_a46f881a1c96b496","createTexture","__wbg_deleteFramebuffer_867aba8474910f62","deleteFramebuffer","__wbg_deleteRenderbuffer_eb162fd0beb632da","deleteRenderbuffer","__wbg_deleteTexture_1affe310edd12b75","deleteTexture","__wbg_framebufferRenderbuffer_7bb033ee5a2eca8c","framebufferRenderbuffer","__wbg_framebufferTexture2D_9a77a023fd4aedcc","framebufferTexture2D","__wbg_getError_142acae679908a25","getError","__wbg_getParameter_34e9af6606eb8544","getParameter","__wbg_texParameteri_e99b48aa90ae569b","texParameteri","__wbg_instanceof_Window_9c4fd26090e1d029","Window","__wbg_document_249e9cf340780f93","document","__wbg_location_cf542a8f458da7b4","location","__wbg_navigator_fdf3521d0e190a9b","navigator","__wbg_devicePixelRatio_ea9c0157a379b3ec","devicePixelRatio","__wbg_performance_e029cf47e1c47c09","performance","__wbg_localStorage_884d77b5cedf820a","localStorage","__wbg_cancelAnimationFrame_28c6665c9b2a3944","cancelAnimationFrame","__wbg_focus_b5729f61a3280cbc","focus","__wbg_open_313f5801aab5e2f1","open","__wbg_requestAnimationFrame_aa3bab1f9557a4da","requestAnimationFrame","__wbg_fetch_eaee025997e4cd56","fetch","__wbg_destination_c5ce4ac317c9219f","destination","__wbg_sampleRate_cc13fe55474678eb","sampleRate","__wbg_currentTime_ae061c195387b7ac","currentTime","__wbg_new_29e8884899ea6ee2","__wbg_suspend_4b5d3b7ee1f4a3ec","suspend","__wbg_createBuffer_53c7286e081d0b3e","createBuffer","__wbg_createBufferSource_8b7fd8bc4222b208","createBufferSource","__wbg_createChannelMerger_c059636adf34e09d","createChannelMerger","__wbg_createChannelSplitter_68062f62d4d66ed8","createChannelSplitter","__wbg_createGain_7b6dadac3a6522d6","createGain","__wbg_createScriptProcessor_bce5438a51faa41d","createScriptProcessor","__wbg_decodeAudioData_81b31c0703465a21","decodeAudioData","__wbg_resume_2c75f8fc1fd26d4b","resume","__wbg_gain_b3536e37256053f5","gain","__wbg_baseURI_6a10de9fa3003a69","baseURI","__wbg_appendChild_6ae001e6d3556190","appendChild","__wbg_get_36b7a676e4c8aee9","__wbg_set_ad2026ce7b489f96","__wbg_delete_9614de882c9a0cf5","__wbg_instanceof_SvgsvgElement_28ef05afde3449f9","SVGSVGElement","__wbg_createSVGMatrix_43815bd5777c567f","createSVGMatrix","__wbg_setProperty_84c0a22125c731d6","setProperty","__wbg_protocol_2d293dcd35a07041","protocol","__wbg_assign_fc277322e1a88614","assign","__wbg_new_3c2bf2a5257369ec","Path2D","__wbg_addPath_cf691ede06f38917","addPath","__wbg_closePath_48f860f5bcbc79f3","closePath","__wbg_lineTo_7fd48462a80ac962","lineTo","__wbg_moveTo_62ea44f899317925","moveTo","__wbg_quadraticCurveTo_6f746087da5a242c","quadraticCurveTo","__wbg_length_914ec377666a1fb8","__wbg_connect_3a117c24756fdf62","connect","__wbg_connect_3a51bca7e31cd323","__wbg_connect_52449bed6e387d23","__wbg_disconnect_b101656fb34b9fa3","disconnect","__wbg_setTransform_4c6870c885e2b89e","setTransform","__wbg_offsetX_951495e9516f0aeb","offsetX","__wbg_offsetY_0377a1f53f902a1e","offsetY","__wbg_button_c35922e0098b9cda","button","__wbg_outputBuffer_7e7061041aa8a304","outputBuffer","__wbg_bindVertexArrayOES_bb8a104f35d5cf4f","bindVertexArrayOES","__wbg_createVertexArrayOES_51a703442a9d8099","createVertexArrayOES","__wbg_instanceof_Response_8295bf7aacde3233","Response","__wbg_ok_e1e8f70fbf7c1fdc","ok","__wbg_statusText_c5b7d9b4bc84d715","statusText","__wbg_arrayBuffer_a98df6d58bb5ea26","arrayBuffer","__wbg_seta_5138c769bc027dee","__wbg_setb_d92c5b9331343d2e","__wbg_setc_c6fbbb68c7ba4693","c","__wbg_setd_42dcf42c3ceabc9b","d","__wbg_sete_49250c2d46b375b3","__wbg_setf_12cb2512fe19ba3f","__wbg_deltaY_49d792c5901e3fc1","deltaY","__wbg_deltaMode_7ed5ee895d112617","deltaMode","__wbg_setbuffer_5aca59a6f26d3307","__wbg_setloop_710fa1431c2bc494","loop","__wbg_setloopStart_988c5aad78cc446c","loopStart","__wbg_setloopEnd_fcc6c08574ca8ae5","loopEnd","__wbg_setonended_0efd780b31d16bbf","onended","__wbg_start_e92060130d43d928","start","__wbg_start_a8d199336331f3a5","__wbg_stop_37842cd5a56a341c","stop","__wbg_instanceof_HtmlFormElement_de39c8070c818493","HTMLFormElement","__wbg_submit_e668f2e6a4582aa6","submit","__wbg_now_4abbca4ef2aba8d6","now","__wbg_pointerId_e68d773decdc9224","pointerId","__wbg_setonaudioprocess_9d6a213da205ae4d","onaudioprocess","__wbg_newwithbuffersourcesequenceandoptions_689c4999a01e0d8c","Blob","__wbg_instanceof_HtmlCanvasElement_e0e251da2aa0b541","HTMLCanvasElement","__wbg_width_5843e31ec081f978","width","__wbg_setwidth_fd251e9da5abcced","__wbg_height_872c06b1bc666dd9","height","__wbg_setheight_5b882973e84fa13c","__wbg_getContext_d778ffc8203f64ae","getContext","__wbg_getContext_4678c25f580222b0","__wbg_key_97a48109ce6890c4","key","__wbg_code_e70e2272901f086c","__wbg_newwithstrandinit_a58924208f457f33","Request","__wbg_body_0d97f334de622953","body","__wbg_createElement_ba61aad8af6be7f4","createElement","__wbg_createElementNS_c951238dc260501e","createElementNS","__wbg_setid_16518c90432c2f8e","id","__wbg_clientWidth_405142b36824cd4f","clientWidth","__wbg_clientHeight_645231c9da3480a9","clientHeight","__wbg_querySelector_6c8f27227fc14315","querySelector","__wbg_releasePointerCapture_758b760808d6ce02","releasePointerCapture","__wbg_setAttribute_0b50656f1ccc45bf","setAttribute","__wbg_setAttributeNS_d31649e78e2cf95c","setAttributeNS","__wbg_setPointerCapture_6f31425163cf44a1","setPointerCapture","__wbg_remove_eabff3d9e444a826","remove","__wbg_instanceof_WebGlRenderingContext_5671fd2c102046b1","WebGLRenderingContext","__wbg_drawingBufferWidth_0f8ef2b95bb66c81","drawingBufferWidth","__wbg_drawingBufferHeight_04a3507b6fb21bac","drawingBufferHeight","__wbg_bufferData_9f09145baa3273f9","bufferData","__wbg_texImage2D_48722cf9f95c8df8","__wbg_uniform1fv_0b5950d4f588ac7e","uniform1fv","__wbg_uniform4fv_8fa4c0052d79aed2","uniform4fv","__wbg_uniformMatrix3fv_c4a15deb8d8fbd61","uniformMatrix3fv","__wbg_uniformMatrix4fv_62951f66fbf764cd","uniformMatrix4fv","__wbg_activeTexture_790fa161eaf8dcb0","activeTexture","__wbg_attachShader_5446231928034874","attachShader","__wbg_bindBuffer_5b0bd39cdc9f3c91","bindBuffer","__wbg_bindFramebuffer_9490ff183a431d0d","__wbg_bindRenderbuffer_86495e658e23020f","__wbg_bindTexture_6df7d2262019c813","__wbg_blendFunc_c91f929b64e24ca6","blendFunc","__wbg_clear_216e95e64c0ce688","clear","__wbg_clearColor_f7316ccd75b2a3b1","clearColor","__wbg_colorMask_cc8730de91ea02ce","colorMask","__wbg_compileShader_749eb91c541c360c","compileShader","__wbg_createBuffer_8ae1735de737ca21","__wbg_createProgram_28f1378728397a46","createProgram","__wbg_createShader_f6da8384be38c095","createShader","__wbg_createTexture_be549d53d11ebf83","__wbg_disable_b2672dfd98db0d2c","disable","__wbg_disableVertexAttribArray_f5154961c6bbc61f","disableVertexAttribArray","__wbg_drawElements_19a4ea67a2f14d44","drawElements","__wbg_enable_9c5b69ae0579565d","enable","__wbg_enableVertexAttribArray_eff1f71734ec0c24","enableVertexAttribArray","__wbg_getAttribLocation_7321b82ba20f42ed","getAttribLocation","__wbg_getExtension_29e749f65dd345b5","getExtension","__wbg_getParameter_e02390c31b2aedb9","__wbg_getProgramInfoLog_89c655cf7d3deb29","getProgramInfoLog","__wbg_getProgramParameter_97fb617622a1e9c6","getProgramParameter","__wbg_getShaderInfoLog_8fbfc8052cd2a5c2","getShaderInfoLog","__wbg_getUniformLocation_8ef86decd2ceb6a0","getUniformLocation","__wbg_linkProgram_b060b6f5c6419695","linkProgram","__wbg_pixelStorei_1e9534b41710bd3f","pixelStorei","__wbg_shaderSource_e00c8c2b41679a01","shaderSource","__wbg_stencilFunc_eeb2374a49160e1e","stencilFunc","__wbg_stencilMask_8383787c8968e634","stencilMask","__wbg_stencilOp_d618117604d44e35","stencilOp","__wbg_texParameteri_58c0d4e82f062e6f","__wbg_uniform1f_affc2490c2cff524","uniform1f","__wbg_uniform1i_584ce89a2fa7078d","uniform1i","__wbg_useProgram_ad5593b87b2aec4f","useProgram","__wbg_vertexAttribPointer_3e272f16a22bb68c","vertexAttribPointer","__wbg_viewport_40ac6422fa7e7109","viewport","__wbg_debug_3c0b82934d1dd91e","__wbg_error_9ff84d33a850b1ef","__wbg_info_3b2058a219fa31b9","info","__wbg_log_386a8115a84a780d","log","__wbg_warn_5fc232d538408d4a","warn","__wbg_style_9290c51fe7cb7783","style","__wbg_setvalue_e8ff05630a7ffecb","value","__wbg_linearRampToValueAtTime_0245aa9e5d87776f","linearRampToValueAtTime","__wbg_setValueAtTime_b4a172acdfc9830f","setValueAtTime","__wbg_currentTarget_a3b06d00ff76859b","currentTarget","__wbg_preventDefault_19876bf3a4179b34","preventDefault","__wbg_addEventListener_b334b84e6525699c","addEventListener","__wbg_addEventListener_502683a26945b1a5","__wbg_addEventListener_b88d8dd107ce2f39","__wbg_removeEventListener_380d0ebdf9cd12ba","removeEventListener","__wbg_removeEventListener_1f30d3e3ef4ee58e","__wbg_setsrc_21ed0b40d0ff0413","src","__wbg_new_0891fac076d9e6b3","Image","__wbg_newwithwidthandheight_045e54743ae79290","__wbg_data_7db9e348ce1855fa","passArray8ToWasm0","data","__wbg_userAgent_89e0d93ea0bfe354","userAgent","__wbg_instanceof_CanvasRenderingContext2d_eea9cd931eb496b7","CanvasRenderingContext2D","__wbg_setglobalAlpha_6b6fb9a57a09df9d","globalAlpha","__wbg_setglobalCompositeOperation_e404daf7e6bb63e4","globalCompositeOperation","__wbg_setstrokeStyle_72f1ad8117744d41","strokeStyle","__wbg_setfillStyle_5306396b0368ba08","fillStyle","__wbg_setfilter_fa947e793349a2de","filter","__wbg_setlineWidth_9f25e0ceca65a4d7","lineWidth","__wbg_setlineCap_6c7169ac07a6349e","lineCap","__wbg_setlineJoin_d6311997533dcdbf","lineJoin","__wbg_setmiterLimit_cd181ac4dc64fc1d","miterLimit","__wbg_drawImage_ff0075aa41bc6155","drawImage","__wbg_drawImage_b43cf9d292491493","__wbg_fill_a928208ebdb3fecc","__wbg_stroke_c19677a93050ef02","stroke","__wbg_createPattern_a737181b452c0941","createPattern","__wbg_getImageData_6e56dc172cd2ed36","getImageData","__wbg_clearRect_dbb56982eff2a250","clearRect","__wbg_fillRect_33b210367d4a0063","fillRect","__wbg_resetTransform_09cd4a47a1d0fc9c","resetTransform","__wbg_setTransform_36254c0c8f264eee","__wbg_get_f099d98ea7d68360","__wbg_next_9d10ccb28a5fd327","next","__wbg_done_faa42c8d1dd8ca9e","done","__wbg_value_9befa7ab4a7326bf","__wbg_get_0c6963cbab34fbb6","Reflect","__wbg_call_cb478d88f3068c91","__wbg_new_8528c110a833413f","__wbg_isArray_bccef1135dd559c1","__wbg_of_1988d238bc84b807","of","__wbg_push_17a514d8ab666103","__wbg_instanceof_ArrayBuffer_ee6a79eaea0f4f5b","ArrayBuffer","__wbg_new_66923a754de9cf28","__wbg_slice_1b99bf7e559f62b2","__wbg_values_0e37ea0767d5caba","values","__wbg_newnoargs_3efc7bfa69a681f9","Function","__wbg_apply_2d67e7379df5344f","__wbg_call_f5e0576f61ee7461","__wbg_getTime_135e6afc6013ba72","getTime","__wbg_getTimezoneOffset_39fb6af112fac02f","getTimezoneOffset","__wbg_new0_8e8ab0e7714cf1dd","Date","__wbg_instanceof_Object_d6b4e933180fbb26","__wbg_entries_a9881e0ca10e3cb2","entries","__wbg_fromEntries_8be754b4532b35f4","fromEntries","__wbg_is_573b30cf06a763fb","is","__wbg_new_d14bf16e62c6b3d5","__wbg_resolve_778af3f90b8e2b59","Promise","resolve","__wbg_then_367b3e718069cfb9","then","__wbg_then_ac66ca61394bfd21","__wbg_self_05c54dcacb623b9a","self","__wbg_window_9777ce446d12989f","window","__wbg_globalThis_f0ca0bbb0149cf3d","globalThis","__wbg_global_c3c8325ae8c7f1a9","g","global","__wbg_buffer_ebc6c8e75510eae3","__wbg_newwithbyteoffsetandlength_ca3d3d8811ecb569","__wbg_length_317f0dd77f7a6673","__wbg_new_135e963dedf67b22","__wbg_set_4a5072a31008e0cb","__wbg_fill_f08a873179c69e31","__wbg_buffer_3580452571655bd0","__wbg_byteLength_7d55aca7ec6c42cb","byteLength","__wbg_byteOffset_2ebe3f5c421f3a99","byteOffset","__wbg_ownKeys_b6c8becb6576203e","ownKeys","__wbg_set_61642586f7156f4a","__wbindgen_number_get","Float64Array","__wbindgen_string_get","__wbindgen_boolean_get","v","__wbindgen_debug_string","__wbindgen_throw","__wbindgen_rethrow","__wbindgen_memory","__wbindgen_closure_wrapper399","__wbindgen_closure_wrapper401","__wbindgen_closure_wrapper403","__wbindgen_closure_wrapper405","__wbindgen_closure_wrapper407","__wbindgen_closure_wrapper409","__wbindgen_closure_wrapper411","__wbindgen_closure_wrapper413","__wbindgen_closure_wrapper1770","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","target","ruffleWasm","default","P","reject","fulfilled","step","rejected","result","fetchRuffle","RuffleMimeTypeArray","native_mimetype_array","__mimetypes","__named_mimetypes","install","mimetype","Symbol","iterator","RufflePlugin","filename","mimetypes","super","RufflePluginArray","native_plugin_array","__plugins","__named_plugins","plugin","FLASH_PLUGIN","installPlugin","plugins","writable","mimeTypes","suffixes","enabledPlugin","ruffleShadowTemplate","innerHTML","privateRegistry","lookupElement","elementName","internalName","class","registerElement","elementClass","tries","customElements","externalName","define","AutoPlay","Letterbox","UnmuteOverlay","LogLevel","FLASH_MIMETYPE","FUTURESPLASH_MIMETYPE","FLASH7_AND_8_MIMETYPE","FLASH_MOVIE_MIMETYPE","FLASH_ACTIVEX_CLASSID","RUFFLE_ORIGIN","DIMENSION_REGEX","PanicError","ReadyState","sanitizeParameters","URLSearchParams","output","RufflePlayer","HTMLElement","hasContextMenu","isTouch","panicked","shadow","attachShadow","mode","content","cloneNode","dynamicStyles","getElementById","container","playButton","playButtonClicked","bind","unmuteOverlay","contextMenuElement","showContextMenu","pointerDown","hideContextMenu","options","_trace_observer","_readyState","HaveNothing","_metadata","ruffleConstructor","lastActivePlayingState","setupPauseOnTabHidden","hidden","is_playing","pause","play","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","CSPConflict","InvalidWasm","JavascriptConflict","audioState","visibility","setTimeout","autoplay","Auto","unmuteVisibility","Visible","On","display","unmuteOverlayClicked","once","audioContext","audio_context","onstatechange","_b","optionsError","url","JavascriptConfiguration","isConnected","isUnusedFallbackObject","allowScriptAccess","contextMenu","backgroundColor","ensureFreshInstance","swfUrl","href","_c","substring","stream_from","load_data","err","fullscreenEnabled","webkitFullscreenEnabled","fullscreenElement","webkitFullscreenElement","navigationUI","requestFullscreen","webkitRequestFullscreen","webkitRequestFullScreen","exitFullscreen","webkitExitFullscreen","webkitCancelFullScreen","event","pointerType","CHECKMARK","fromCharCode","items","prepare_context_menu","forEach","item","separatorBefore","text","caption","checked","onClick","run_context_menu_callback","enabled","enterFullscreen","firstChild","removeChild","contextMenuItems","lastElementChild","classList","contains","menuSeparator","hr","menuItem","textContent","add","left","top","rect","getBoundingClientRect","clientX","y","clientY","maxX","maxY","Math","floor","min","clear_custom_menu_items","elem","attrib","specified","node","from","children","attribute","match","out","call_exposed_callback","set_trace_observer","errorIndex","Unknown","errorArray","stackIndex","debugPlayerInfo","platform","errorText","join","pageUrl","split","errorBody","errorFooter","issueLink","encodeURIComponent","issueBody","viewDetails","onclick","panicBody","div","prepend","metadata","Loaded","dispatchEvent","Event","LOADED_METADATA","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","isExtension","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","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","cachedModule","__webpack_modules__","m","getPrototypeOf","t","__esModule","ns","r","def","current","getOwnPropertyNames","definition","enumerable","prop","toStringTag","p","negotiate"],"mappings":"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","file":"ruffle.js","sourcesContent":["var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","/**\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 : (typeof webkitAudioContext !== 'undefined' ? webkitAudioContext : undefined));\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\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\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 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_34(arg0, arg1, arg2) {\n wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h166602be110b18e3(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_37(arg0, arg1, arg2) {\n wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h166602be110b18e3(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_40(arg0, arg1, arg2) {\n wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h166602be110b18e3(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_43(arg0, arg1, arg2) {\n wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h9aa9399bed533a60(arg0, arg1, arg2);\n}\n\nfunction __wbg_adapter_46(arg0, arg1) {\n wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hc97237e4ab4442a6(arg0, arg1);\n}\n\nfunction __wbg_adapter_49(arg0, arg1, arg2) {\n wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h166602be110b18e3(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_52(arg0, arg1, arg2) {\n wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h166602be110b18e3(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_55(arg0, arg1, arg2) {\n wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h166602be110b18e3(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_58(arg0, arg1, arg2) {\n wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hd78e0317014e7e8b(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\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\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 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 __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_ruffle_free(ptr);\n }\n /**\n * @param {HTMLElement} parent\n * @param {any} js_player\n * @param {any} config\n */\n constructor(parent, js_player, config) {\n try {\n var ret = wasm.ruffle_new(addHeapObject(parent), addHeapObject(js_player), 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 * @returns {boolean}\n */\n is_playing() {\n var ret = wasm.ruffle_is_playing(this.ptr);\n return ret !== 0;\n }\n /**\n * @returns {any}\n */\n prepare_context_menu() {\n var ret = wasm.ruffle_prepare_context_menu(this.ptr);\n return takeObject(ret);\n }\n /**\n * @param {number} index\n */\n run_context_menu_callback(index) {\n wasm.ruffle_run_context_menu_callback(this.ptr, index);\n }\n /**\n */\n clear_custom_menu_items() {\n wasm.ruffle_clear_custom_menu_items(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 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 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 = new URL('ruffle_web_bg.wasm', import.meta.url);\n }\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbindgen_object_drop_ref = function(arg0) {\n takeObject(arg0);\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.__wbindgen_is_function = function(arg0) {\n var ret = typeof(getObject(arg0)) === 'function';\n return ret;\n };\n imports.wbg.__wbindgen_json_parse = function(arg0, arg1) {\n var ret = JSON.parse(getStringFromWasm0(arg0, arg1));\n return addHeapObject(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.__wbindgen_string_new = function(arg0, arg1) {\n var ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_object_clone_ref = function(arg0) {\n var ret = getObject(arg0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_isFullscreen_96b85640554e160d = function(arg0) {\n var ret = getObject(arg0).isFullscreen;\n return ret;\n };\n imports.wbg.__wbg_displayUnsupportedMessage_a8f81a8e054e5e91 = function(arg0) {\n getObject(arg0).displayUnsupportedMessage();\n };\n imports.wbg.__wbg_displayMessage_c57c20204892da2b = function(arg0, arg1, arg2) {\n getObject(arg0).displayMessage(getStringFromWasm0(arg1, arg2));\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.__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.__wbg_setMetadata_bbaeaee7f48274e6 = function(arg0, arg1) {\n getObject(arg0).setMetadata(takeObject(arg1));\n };\n imports.wbg.__wbg_onCallbackAvailable_3a48fae397926c96 = function(arg0, arg1, arg2) {\n getObject(arg0).onCallbackAvailable(getStringFromWasm0(arg1, arg2));\n };\n imports.wbg.__wbg_onFSCommand_fb2f94653f71796e = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n var ret = getObject(arg0).onFSCommand(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n return ret;\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_61a66a1af6516586 = function(arg0) {\n var ret = getObject(arg0) instanceof WebGL2RenderingContext;\n return ret;\n };\n imports.wbg.__wbg_bindVertexArray_808c39d3c0f17264 = function(arg0, arg1) {\n getObject(arg0).bindVertexArray(getObject(arg1));\n };\n imports.wbg.__wbg_blitFramebuffer_3b625df19331f21c = 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_855d59250230c563 = function(arg0) {\n var ret = getObject(arg0).createVertexArray();\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_renderbufferStorageMultisample_bbeb2b87cb14307f = function(arg0, arg1, arg2, arg3, arg4, arg5) {\n getObject(arg0).renderbufferStorageMultisample(arg1 >>> 0, arg2, arg3 >>> 0, arg4, arg5);\n };\n imports.wbg.__wbg_texImage2D_173d216c50e54701 = 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_ce3cfcfec4aa02cc = function(arg0, arg1, arg2) {\n getObject(arg0).bindFramebuffer(arg1 >>> 0, getObject(arg2));\n };\n imports.wbg.__wbg_bindRenderbuffer_35f3639b7da4e4c7 = function(arg0, arg1, arg2) {\n getObject(arg0).bindRenderbuffer(arg1 >>> 0, getObject(arg2));\n };\n imports.wbg.__wbg_bindTexture_f2a0487a487a78d9 = function(arg0, arg1, arg2) {\n getObject(arg0).bindTexture(arg1 >>> 0, getObject(arg2));\n };\n imports.wbg.__wbg_createFramebuffer_7fd863d54241be81 = function(arg0) {\n var ret = getObject(arg0).createFramebuffer();\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_createRenderbuffer_52ebc0325ed6e885 = function(arg0) {\n var ret = getObject(arg0).createRenderbuffer();\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_createTexture_a46f881a1c96b496 = function(arg0) {\n var ret = getObject(arg0).createTexture();\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_deleteFramebuffer_867aba8474910f62 = function(arg0, arg1) {\n getObject(arg0).deleteFramebuffer(getObject(arg1));\n };\n imports.wbg.__wbg_deleteRenderbuffer_eb162fd0beb632da = function(arg0, arg1) {\n getObject(arg0).deleteRenderbuffer(getObject(arg1));\n };\n imports.wbg.__wbg_deleteTexture_1affe310edd12b75 = function(arg0, arg1) {\n getObject(arg0).deleteTexture(getObject(arg1));\n };\n imports.wbg.__wbg_framebufferRenderbuffer_7bb033ee5a2eca8c = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).framebufferRenderbuffer(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, getObject(arg4));\n };\n imports.wbg.__wbg_framebufferTexture2D_9a77a023fd4aedcc = 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_142acae679908a25 = function(arg0) {\n var ret = getObject(arg0).getError();\n return ret;\n };\n imports.wbg.__wbg_getParameter_34e9af6606eb8544 = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).getParameter(arg1 >>> 0);\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_texParameteri_e99b48aa90ae569b = function(arg0, arg1, arg2, arg3) {\n getObject(arg0).texParameteri(arg1 >>> 0, arg2 >>> 0, arg3);\n };\n imports.wbg.__wbg_instanceof_Window_9c4fd26090e1d029 = function(arg0) {\n var ret = getObject(arg0) instanceof Window;\n return ret;\n };\n imports.wbg.__wbg_document_249e9cf340780f93 = function(arg0) {\n var ret = getObject(arg0).document;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_location_cf542a8f458da7b4 = function(arg0) {\n var ret = getObject(arg0).location;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_navigator_fdf3521d0e190a9b = function(arg0) {\n var ret = getObject(arg0).navigator;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_devicePixelRatio_ea9c0157a379b3ec = function(arg0) {\n var ret = getObject(arg0).devicePixelRatio;\n return ret;\n };\n imports.wbg.__wbg_performance_e029cf47e1c47c09 = function(arg0) {\n var ret = getObject(arg0).performance;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_localStorage_884d77b5cedf820a = handleError(function(arg0) {\n var ret = getObject(arg0).localStorage;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n });\n imports.wbg.__wbg_cancelAnimationFrame_28c6665c9b2a3944 = handleError(function(arg0, arg1) {\n getObject(arg0).cancelAnimationFrame(arg1);\n });\n imports.wbg.__wbg_focus_b5729f61a3280cbc = handleError(function(arg0) {\n getObject(arg0).focus();\n });\n imports.wbg.__wbg_open_313f5801aab5e2f1 = 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_aa3bab1f9557a4da = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).requestAnimationFrame(getObject(arg1));\n return ret;\n });\n imports.wbg.__wbg_fetch_eaee025997e4cd56 = function(arg0, arg1) {\n var ret = getObject(arg0).fetch(getObject(arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_destination_c5ce4ac317c9219f = function(arg0) {\n var ret = getObject(arg0).destination;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_sampleRate_cc13fe55474678eb = function(arg0) {\n var ret = getObject(arg0).sampleRate;\n return ret;\n };\n imports.wbg.__wbg_currentTime_ae061c195387b7ac = function(arg0) {\n var ret = getObject(arg0).currentTime;\n return ret;\n };\n imports.wbg.__wbg_new_29e8884899ea6ee2 = handleError(function() {\n var ret = new lAudioContext();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_suspend_4b5d3b7ee1f4a3ec = handleError(function(arg0) {\n var ret = getObject(arg0).suspend();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_createBuffer_53c7286e081d0b3e = 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_8b7fd8bc4222b208 = handleError(function(arg0) {\n var ret = getObject(arg0).createBufferSource();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_createChannelMerger_c059636adf34e09d = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).createChannelMerger(arg1 >>> 0);\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_createChannelSplitter_68062f62d4d66ed8 = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).createChannelSplitter(arg1 >>> 0);\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_createGain_7b6dadac3a6522d6 = handleError(function(arg0) {\n var ret = getObject(arg0).createGain();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_createScriptProcessor_bce5438a51faa41d = 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_81b31c0703465a21 = 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_2c75f8fc1fd26d4b = handleError(function(arg0) {\n var ret = getObject(arg0).resume();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_gain_b3536e37256053f5 = function(arg0) {\n var ret = getObject(arg0).gain;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_baseURI_6a10de9fa3003a69 = 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_6ae001e6d3556190 = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).appendChild(getObject(arg1));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_get_36b7a676e4c8aee9 = 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_ad2026ce7b489f96 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0)[getStringFromWasm0(arg1, arg2)] = getStringFromWasm0(arg3, arg4);\n });\n imports.wbg.__wbg_delete_9614de882c9a0cf5 = handleError(function(arg0, arg1, arg2) {\n delete getObject(arg0)[getStringFromWasm0(arg1, arg2)];\n });\n imports.wbg.__wbg_instanceof_SvgsvgElement_28ef05afde3449f9 = function(arg0) {\n var ret = getObject(arg0) instanceof SVGSVGElement;\n return ret;\n };\n imports.wbg.__wbg_createSVGMatrix_43815bd5777c567f = function(arg0) {\n var ret = getObject(arg0).createSVGMatrix();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_setProperty_84c0a22125c731d6 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).setProperty(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n });\n imports.wbg.__wbg_protocol_2d293dcd35a07041 = 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_fc277322e1a88614 = handleError(function(arg0, arg1, arg2) {\n getObject(arg0).assign(getStringFromWasm0(arg1, arg2));\n });\n imports.wbg.__wbg_new_3c2bf2a5257369ec = handleError(function() {\n var ret = new Path2D();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_addPath_cf691ede06f38917 = function(arg0, arg1, arg2) {\n getObject(arg0).addPath(getObject(arg1), getObject(arg2));\n };\n imports.wbg.__wbg_closePath_48f860f5bcbc79f3 = function(arg0) {\n getObject(arg0).closePath();\n };\n imports.wbg.__wbg_lineTo_7fd48462a80ac962 = function(arg0, arg1, arg2) {\n getObject(arg0).lineTo(arg1, arg2);\n };\n imports.wbg.__wbg_moveTo_62ea44f899317925 = function(arg0, arg1, arg2) {\n getObject(arg0).moveTo(arg1, arg2);\n };\n imports.wbg.__wbg_quadraticCurveTo_6f746087da5a242c = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).quadraticCurveTo(arg1, arg2, arg3, arg4);\n };\n imports.wbg.__wbg_length_914ec377666a1fb8 = function(arg0) {\n var ret = getObject(arg0).length;\n return ret;\n };\n imports.wbg.__wbg_connect_3a117c24756fdf62 = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).connect(getObject(arg1));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_connect_3a51bca7e31cd323 = 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_52449bed6e387d23 = 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_b101656fb34b9fa3 = handleError(function(arg0) {\n getObject(arg0).disconnect();\n });\n imports.wbg.__wbg_setTransform_4c6870c885e2b89e = function(arg0, arg1) {\n getObject(arg0).setTransform(getObject(arg1));\n };\n imports.wbg.__wbg_offsetX_951495e9516f0aeb = function(arg0) {\n var ret = getObject(arg0).offsetX;\n return ret;\n };\n imports.wbg.__wbg_offsetY_0377a1f53f902a1e = function(arg0) {\n var ret = getObject(arg0).offsetY;\n return ret;\n };\n imports.wbg.__wbg_button_c35922e0098b9cda = function(arg0) {\n var ret = getObject(arg0).button;\n return ret;\n };\n imports.wbg.__wbg_outputBuffer_7e7061041aa8a304 = handleError(function(arg0) {\n var ret = getObject(arg0).outputBuffer;\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_bindVertexArrayOES_bb8a104f35d5cf4f = function(arg0, arg1) {\n getObject(arg0).bindVertexArrayOES(getObject(arg1));\n };\n imports.wbg.__wbg_createVertexArrayOES_51a703442a9d8099 = function(arg0) {\n var ret = getObject(arg0).createVertexArrayOES();\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_instanceof_Response_8295bf7aacde3233 = function(arg0) {\n var ret = getObject(arg0) instanceof Response;\n return ret;\n };\n imports.wbg.__wbg_ok_e1e8f70fbf7c1fdc = function(arg0) {\n var ret = getObject(arg0).ok;\n return ret;\n };\n imports.wbg.__wbg_statusText_c5b7d9b4bc84d715 = function(arg0, arg1) {\n var ret = getObject(arg1).statusText;\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_arrayBuffer_a98df6d58bb5ea26 = handleError(function(arg0) {\n var ret = getObject(arg0).arrayBuffer();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_seta_5138c769bc027dee = function(arg0, arg1) {\n getObject(arg0).a = arg1;\n };\n imports.wbg.__wbg_setb_d92c5b9331343d2e = function(arg0, arg1) {\n getObject(arg0).b = arg1;\n };\n imports.wbg.__wbg_setc_c6fbbb68c7ba4693 = function(arg0, arg1) {\n getObject(arg0).c = arg1;\n };\n imports.wbg.__wbg_setd_42dcf42c3ceabc9b = function(arg0, arg1) {\n getObject(arg0).d = arg1;\n };\n imports.wbg.__wbg_sete_49250c2d46b375b3 = function(arg0, arg1) {\n getObject(arg0).e = arg1;\n };\n imports.wbg.__wbg_setf_12cb2512fe19ba3f = function(arg0, arg1) {\n getObject(arg0).f = arg1;\n };\n imports.wbg.__wbg_deltaY_49d792c5901e3fc1 = function(arg0) {\n var ret = getObject(arg0).deltaY;\n return ret;\n };\n imports.wbg.__wbg_deltaMode_7ed5ee895d112617 = function(arg0) {\n var ret = getObject(arg0).deltaMode;\n return ret;\n };\n imports.wbg.__wbg_setbuffer_5aca59a6f26d3307 = function(arg0, arg1) {\n getObject(arg0).buffer = getObject(arg1);\n };\n imports.wbg.__wbg_setloop_710fa1431c2bc494 = function(arg0, arg1) {\n getObject(arg0).loop = arg1 !== 0;\n };\n imports.wbg.__wbg_setloopStart_988c5aad78cc446c = function(arg0, arg1) {\n getObject(arg0).loopStart = arg1;\n };\n imports.wbg.__wbg_setloopEnd_fcc6c08574ca8ae5 = function(arg0, arg1) {\n getObject(arg0).loopEnd = arg1;\n };\n imports.wbg.__wbg_setonended_0efd780b31d16bbf = function(arg0, arg1) {\n getObject(arg0).onended = getObject(arg1);\n };\n imports.wbg.__wbg_start_e92060130d43d928 = handleError(function(arg0) {\n getObject(arg0).start();\n });\n imports.wbg.__wbg_start_a8d199336331f3a5 = handleError(function(arg0, arg1, arg2) {\n getObject(arg0).start(arg1, arg2);\n });\n imports.wbg.__wbg_stop_37842cd5a56a341c = handleError(function(arg0, arg1) {\n getObject(arg0).stop(arg1);\n });\n imports.wbg.__wbg_instanceof_HtmlFormElement_de39c8070c818493 = function(arg0) {\n var ret = getObject(arg0) instanceof HTMLFormElement;\n return ret;\n };\n imports.wbg.__wbg_submit_e668f2e6a4582aa6 = handleError(function(arg0) {\n getObject(arg0).submit();\n });\n imports.wbg.__wbg_now_4abbca4ef2aba8d6 = function(arg0) {\n var ret = getObject(arg0).now();\n return ret;\n };\n imports.wbg.__wbg_pointerId_e68d773decdc9224 = function(arg0) {\n var ret = getObject(arg0).pointerId;\n return ret;\n };\n imports.wbg.__wbg_setonaudioprocess_9d6a213da205ae4d = function(arg0, arg1) {\n getObject(arg0).onaudioprocess = getObject(arg1);\n };\n imports.wbg.__wbg_newwithbuffersourcesequenceandoptions_689c4999a01e0d8c = handleError(function(arg0, arg1) {\n var ret = new Blob(getObject(arg0), getObject(arg1));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_instanceof_HtmlCanvasElement_e0e251da2aa0b541 = function(arg0) {\n var ret = getObject(arg0) instanceof HTMLCanvasElement;\n return ret;\n };\n imports.wbg.__wbg_width_5843e31ec081f978 = function(arg0) {\n var ret = getObject(arg0).width;\n return ret;\n };\n imports.wbg.__wbg_setwidth_fd251e9da5abcced = function(arg0, arg1) {\n getObject(arg0).width = arg1 >>> 0;\n };\n imports.wbg.__wbg_height_872c06b1bc666dd9 = function(arg0) {\n var ret = getObject(arg0).height;\n return ret;\n };\n imports.wbg.__wbg_setheight_5b882973e84fa13c = function(arg0, arg1) {\n getObject(arg0).height = arg1 >>> 0;\n };\n imports.wbg.__wbg_getContext_d778ffc8203f64ae = 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_4678c25f580222b0 = 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_key_97a48109ce6890c4 = 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_e70e2272901f086c = 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_newwithstrandinit_a58924208f457f33 = handleError(function(arg0, arg1, arg2) {\n var ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_body_0d97f334de622953 = function(arg0) {\n var ret = getObject(arg0).body;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_createElement_ba61aad8af6be7f4 = handleError(function(arg0, arg1, arg2) {\n var ret = getObject(arg0).createElement(getStringFromWasm0(arg1, arg2));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_createElementNS_c951238dc260501e = 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_16518c90432c2f8e = function(arg0, arg1, arg2) {\n getObject(arg0).id = getStringFromWasm0(arg1, arg2);\n };\n imports.wbg.__wbg_clientWidth_405142b36824cd4f = function(arg0) {\n var ret = getObject(arg0).clientWidth;\n return ret;\n };\n imports.wbg.__wbg_clientHeight_645231c9da3480a9 = function(arg0) {\n var ret = getObject(arg0).clientHeight;\n return ret;\n };\n imports.wbg.__wbg_querySelector_6c8f27227fc14315 = 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_758b760808d6ce02 = handleError(function(arg0, arg1) {\n getObject(arg0).releasePointerCapture(arg1);\n });\n imports.wbg.__wbg_setAttribute_0b50656f1ccc45bf = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).setAttribute(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n });\n imports.wbg.__wbg_setAttributeNS_d31649e78e2cf95c = 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_6f31425163cf44a1 = handleError(function(arg0, arg1) {\n getObject(arg0).setPointerCapture(arg1);\n });\n imports.wbg.__wbg_remove_eabff3d9e444a826 = function(arg0) {\n getObject(arg0).remove();\n };\n imports.wbg.__wbg_instanceof_WebGlRenderingContext_5671fd2c102046b1 = function(arg0) {\n var ret = getObject(arg0) instanceof WebGLRenderingContext;\n return ret;\n };\n imports.wbg.__wbg_drawingBufferWidth_0f8ef2b95bb66c81 = function(arg0) {\n var ret = getObject(arg0).drawingBufferWidth;\n return ret;\n };\n imports.wbg.__wbg_drawingBufferHeight_04a3507b6fb21bac = function(arg0) {\n var ret = getObject(arg0).drawingBufferHeight;\n return ret;\n };\n imports.wbg.__wbg_bufferData_9f09145baa3273f9 = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).bufferData(arg1 >>> 0, getArrayU8FromWasm0(arg2, arg3), arg4 >>> 0);\n };\n imports.wbg.__wbg_texImage2D_48722cf9f95c8df8 = 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_0b5950d4f588ac7e = function(arg0, arg1, arg2, arg3) {\n getObject(arg0).uniform1fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3));\n };\n imports.wbg.__wbg_uniform4fv_8fa4c0052d79aed2 = function(arg0, arg1, arg2, arg3) {\n getObject(arg0).uniform4fv(getObject(arg1), getArrayF32FromWasm0(arg2, arg3));\n };\n imports.wbg.__wbg_uniformMatrix3fv_c4a15deb8d8fbd61 = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).uniformMatrix3fv(getObject(arg1), arg2 !== 0, getArrayF32FromWasm0(arg3, arg4));\n };\n imports.wbg.__wbg_uniformMatrix4fv_62951f66fbf764cd = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).uniformMatrix4fv(getObject(arg1), arg2 !== 0, getArrayF32FromWasm0(arg3, arg4));\n };\n imports.wbg.__wbg_activeTexture_790fa161eaf8dcb0 = function(arg0, arg1) {\n getObject(arg0).activeTexture(arg1 >>> 0);\n };\n imports.wbg.__wbg_attachShader_5446231928034874 = function(arg0, arg1, arg2) {\n getObject(arg0).attachShader(getObject(arg1), getObject(arg2));\n };\n imports.wbg.__wbg_bindBuffer_5b0bd39cdc9f3c91 = function(arg0, arg1, arg2) {\n getObject(arg0).bindBuffer(arg1 >>> 0, getObject(arg2));\n };\n imports.wbg.__wbg_bindFramebuffer_9490ff183a431d0d = function(arg0, arg1, arg2) {\n getObject(arg0).bindFramebuffer(arg1 >>> 0, getObject(arg2));\n };\n imports.wbg.__wbg_bindRenderbuffer_86495e658e23020f = function(arg0, arg1, arg2) {\n getObject(arg0).bindRenderbuffer(arg1 >>> 0, getObject(arg2));\n };\n imports.wbg.__wbg_bindTexture_6df7d2262019c813 = function(arg0, arg1, arg2) {\n getObject(arg0).bindTexture(arg1 >>> 0, getObject(arg2));\n };\n imports.wbg.__wbg_blendFunc_c91f929b64e24ca6 = function(arg0, arg1, arg2) {\n getObject(arg0).blendFunc(arg1 >>> 0, arg2 >>> 0);\n };\n imports.wbg.__wbg_clear_216e95e64c0ce688 = function(arg0, arg1) {\n getObject(arg0).clear(arg1 >>> 0);\n };\n imports.wbg.__wbg_clearColor_f7316ccd75b2a3b1 = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).clearColor(arg1, arg2, arg3, arg4);\n };\n imports.wbg.__wbg_colorMask_cc8730de91ea02ce = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).colorMask(arg1 !== 0, arg2 !== 0, arg3 !== 0, arg4 !== 0);\n };\n imports.wbg.__wbg_compileShader_749eb91c541c360c = function(arg0, arg1) {\n getObject(arg0).compileShader(getObject(arg1));\n };\n imports.wbg.__wbg_createBuffer_8ae1735de737ca21 = function(arg0) {\n var ret = getObject(arg0).createBuffer();\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_createProgram_28f1378728397a46 = function(arg0) {\n var ret = getObject(arg0).createProgram();\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_createShader_f6da8384be38c095 = function(arg0, arg1) {\n var ret = getObject(arg0).createShader(arg1 >>> 0);\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_createTexture_be549d53d11ebf83 = function(arg0) {\n var ret = getObject(arg0).createTexture();\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_disable_b2672dfd98db0d2c = function(arg0, arg1) {\n getObject(arg0).disable(arg1 >>> 0);\n };\n imports.wbg.__wbg_disableVertexAttribArray_f5154961c6bbc61f = function(arg0, arg1) {\n getObject(arg0).disableVertexAttribArray(arg1 >>> 0);\n };\n imports.wbg.__wbg_drawElements_19a4ea67a2f14d44 = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).drawElements(arg1 >>> 0, arg2, arg3 >>> 0, arg4);\n };\n imports.wbg.__wbg_enable_9c5b69ae0579565d = function(arg0, arg1) {\n getObject(arg0).enable(arg1 >>> 0);\n };\n imports.wbg.__wbg_enableVertexAttribArray_eff1f71734ec0c24 = function(arg0, arg1) {\n getObject(arg0).enableVertexAttribArray(arg1 >>> 0);\n };\n imports.wbg.__wbg_getAttribLocation_7321b82ba20f42ed = 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_29e749f65dd345b5 = 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_e02390c31b2aedb9 = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).getParameter(arg1 >>> 0);\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_getProgramInfoLog_89c655cf7d3deb29 = 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_97fb617622a1e9c6 = function(arg0, arg1, arg2) {\n var ret = getObject(arg0).getProgramParameter(getObject(arg1), arg2 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_getShaderInfoLog_8fbfc8052cd2a5c2 = 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_8ef86decd2ceb6a0 = 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_b060b6f5c6419695 = function(arg0, arg1) {\n getObject(arg0).linkProgram(getObject(arg1));\n };\n imports.wbg.__wbg_pixelStorei_1e9534b41710bd3f = function(arg0, arg1, arg2) {\n getObject(arg0).pixelStorei(arg1 >>> 0, arg2);\n };\n imports.wbg.__wbg_shaderSource_e00c8c2b41679a01 = function(arg0, arg1, arg2, arg3) {\n getObject(arg0).shaderSource(getObject(arg1), getStringFromWasm0(arg2, arg3));\n };\n imports.wbg.__wbg_stencilFunc_eeb2374a49160e1e = function(arg0, arg1, arg2, arg3) {\n getObject(arg0).stencilFunc(arg1 >>> 0, arg2, arg3 >>> 0);\n };\n imports.wbg.__wbg_stencilMask_8383787c8968e634 = function(arg0, arg1) {\n getObject(arg0).stencilMask(arg1 >>> 0);\n };\n imports.wbg.__wbg_stencilOp_d618117604d44e35 = function(arg0, arg1, arg2, arg3) {\n getObject(arg0).stencilOp(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0);\n };\n imports.wbg.__wbg_texParameteri_58c0d4e82f062e6f = function(arg0, arg1, arg2, arg3) {\n getObject(arg0).texParameteri(arg1 >>> 0, arg2 >>> 0, arg3);\n };\n imports.wbg.__wbg_uniform1f_affc2490c2cff524 = function(arg0, arg1, arg2) {\n getObject(arg0).uniform1f(getObject(arg1), arg2);\n };\n imports.wbg.__wbg_uniform1i_584ce89a2fa7078d = function(arg0, arg1, arg2) {\n getObject(arg0).uniform1i(getObject(arg1), arg2);\n };\n imports.wbg.__wbg_useProgram_ad5593b87b2aec4f = function(arg0, arg1) {\n getObject(arg0).useProgram(getObject(arg1));\n };\n imports.wbg.__wbg_vertexAttribPointer_3e272f16a22bb68c = 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_40ac6422fa7e7109 = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).viewport(arg1, arg2, arg3, arg4);\n };\n imports.wbg.__wbg_debug_3c0b82934d1dd91e = function(arg0) {\n console.debug(getObject(arg0));\n };\n imports.wbg.__wbg_error_9ff84d33a850b1ef = function(arg0) {\n console.error(getObject(arg0));\n };\n imports.wbg.__wbg_info_3b2058a219fa31b9 = function(arg0) {\n console.info(getObject(arg0));\n };\n imports.wbg.__wbg_log_386a8115a84a780d = function(arg0) {\n console.log(getObject(arg0));\n };\n imports.wbg.__wbg_warn_5fc232d538408d4a = function(arg0) {\n console.warn(getObject(arg0));\n };\n imports.wbg.__wbg_style_9290c51fe7cb7783 = function(arg0) {\n var ret = getObject(arg0).style;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_setvalue_e8ff05630a7ffecb = function(arg0, arg1) {\n getObject(arg0).value = arg1;\n };\n imports.wbg.__wbg_linearRampToValueAtTime_0245aa9e5d87776f = handleError(function(arg0, arg1, arg2) {\n var ret = getObject(arg0).linearRampToValueAtTime(arg1, arg2);\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_setValueAtTime_b4a172acdfc9830f = handleError(function(arg0, arg1, arg2) {\n var ret = getObject(arg0).setValueAtTime(arg1, arg2);\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_currentTarget_a3b06d00ff76859b = function(arg0) {\n var ret = getObject(arg0).currentTarget;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_preventDefault_19876bf3a4179b34 = function(arg0) {\n getObject(arg0).preventDefault();\n };\n imports.wbg.__wbg_addEventListener_b334b84e6525699c = handleError(function(arg0, arg1, arg2, arg3) {\n getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n });\n imports.wbg.__wbg_addEventListener_502683a26945b1a5 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4));\n });\n imports.wbg.__wbg_addEventListener_b88d8dd107ce2f39 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);\n });\n imports.wbg.__wbg_removeEventListener_380d0ebdf9cd12ba = handleError(function(arg0, arg1, arg2, arg3) {\n getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n });\n imports.wbg.__wbg_removeEventListener_1f30d3e3ef4ee58e = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);\n });\n imports.wbg.__wbg_setsrc_21ed0b40d0ff0413 = function(arg0, arg1, arg2) {\n getObject(arg0).src = getStringFromWasm0(arg1, arg2);\n };\n imports.wbg.__wbg_new_0891fac076d9e6b3 = handleError(function() {\n var ret = new Image();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_newwithwidthandheight_045e54743ae79290 = handleError(function(arg0, arg1) {\n var ret = new Image(arg0 >>> 0, arg1 >>> 0);\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_data_7db9e348ce1855fa = 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_userAgent_89e0d93ea0bfe354 = 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_instanceof_CanvasRenderingContext2d_eea9cd931eb496b7 = function(arg0) {\n var ret = getObject(arg0) instanceof CanvasRenderingContext2D;\n return ret;\n };\n imports.wbg.__wbg_setglobalAlpha_6b6fb9a57a09df9d = function(arg0, arg1) {\n getObject(arg0).globalAlpha = arg1;\n };\n imports.wbg.__wbg_setglobalCompositeOperation_e404daf7e6bb63e4 = handleError(function(arg0, arg1, arg2) {\n getObject(arg0).globalCompositeOperation = getStringFromWasm0(arg1, arg2);\n });\n imports.wbg.__wbg_setstrokeStyle_72f1ad8117744d41 = function(arg0, arg1) {\n getObject(arg0).strokeStyle = getObject(arg1);\n };\n imports.wbg.__wbg_setfillStyle_5306396b0368ba08 = function(arg0, arg1) {\n getObject(arg0).fillStyle = getObject(arg1);\n };\n imports.wbg.__wbg_setfilter_fa947e793349a2de = function(arg0, arg1, arg2) {\n getObject(arg0).filter = getStringFromWasm0(arg1, arg2);\n };\n imports.wbg.__wbg_setlineWidth_9f25e0ceca65a4d7 = function(arg0, arg1) {\n getObject(arg0).lineWidth = arg1;\n };\n imports.wbg.__wbg_setlineCap_6c7169ac07a6349e = function(arg0, arg1, arg2) {\n getObject(arg0).lineCap = getStringFromWasm0(arg1, arg2);\n };\n imports.wbg.__wbg_setlineJoin_d6311997533dcdbf = function(arg0, arg1, arg2) {\n getObject(arg0).lineJoin = getStringFromWasm0(arg1, arg2);\n };\n imports.wbg.__wbg_setmiterLimit_cd181ac4dc64fc1d = function(arg0, arg1) {\n getObject(arg0).miterLimit = arg1;\n };\n imports.wbg.__wbg_drawImage_ff0075aa41bc6155 = handleError(function(arg0, arg1, arg2, arg3) {\n getObject(arg0).drawImage(getObject(arg1), arg2, arg3);\n });\n imports.wbg.__wbg_drawImage_b43cf9d292491493 = handleError(function(arg0, arg1, arg2, arg3) {\n getObject(arg0).drawImage(getObject(arg1), arg2, arg3);\n });\n imports.wbg.__wbg_fill_a928208ebdb3fecc = function(arg0, arg1) {\n getObject(arg0).fill(getObject(arg1));\n };\n imports.wbg.__wbg_stroke_c19677a93050ef02 = function(arg0, arg1) {\n getObject(arg0).stroke(getObject(arg1));\n };\n imports.wbg.__wbg_createPattern_a737181b452c0941 = 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_6e56dc172cd2ed36 = 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_dbb56982eff2a250 = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).clearRect(arg1, arg2, arg3, arg4);\n };\n imports.wbg.__wbg_fillRect_33b210367d4a0063 = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).fillRect(arg1, arg2, arg3, arg4);\n };\n imports.wbg.__wbg_resetTransform_09cd4a47a1d0fc9c = handleError(function(arg0) {\n getObject(arg0).resetTransform();\n });\n imports.wbg.__wbg_setTransform_36254c0c8f264eee = 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_f099d98ea7d68360 = function(arg0, arg1) {\n var ret = getObject(arg0)[arg1 >>> 0];\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_next_9d10ccb28a5fd327 = handleError(function(arg0) {\n var ret = getObject(arg0).next();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_done_faa42c8d1dd8ca9e = function(arg0) {\n var ret = getObject(arg0).done;\n return ret;\n };\n imports.wbg.__wbg_value_9befa7ab4a7326bf = function(arg0) {\n var ret = getObject(arg0).value;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_get_0c6963cbab34fbb6 = handleError(function(arg0, arg1) {\n var ret = Reflect.get(getObject(arg0), getObject(arg1));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_call_cb478d88f3068c91 = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_new_8528c110a833413f = function() {\n var ret = new Array();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_isArray_bccef1135dd559c1 = function(arg0) {\n var ret = Array.isArray(getObject(arg0));\n return ret;\n };\n imports.wbg.__wbg_of_1988d238bc84b807 = function(arg0, arg1) {\n var ret = Array.of(getObject(arg0), getObject(arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_push_17a514d8ab666103 = function(arg0, arg1) {\n var ret = getObject(arg0).push(getObject(arg1));\n return ret;\n };\n imports.wbg.__wbg_instanceof_ArrayBuffer_ee6a79eaea0f4f5b = function(arg0) {\n var ret = getObject(arg0) instanceof ArrayBuffer;\n return ret;\n };\n imports.wbg.__wbg_new_66923a754de9cf28 = function(arg0) {\n var ret = new ArrayBuffer(arg0 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_slice_1b99bf7e559f62b2 = function(arg0, arg1, arg2) {\n var ret = getObject(arg0).slice(arg1 >>> 0, arg2 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_values_0e37ea0767d5caba = function(arg0) {\n var ret = getObject(arg0).values();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_newnoargs_3efc7bfa69a681f9 = function(arg0, arg1) {\n var ret = new Function(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_apply_2d67e7379df5344f = 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_f5e0576f61ee7461 = 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_135e6afc6013ba72 = function(arg0) {\n var ret = getObject(arg0).getTime();\n return ret;\n };\n imports.wbg.__wbg_getTimezoneOffset_39fb6af112fac02f = function(arg0) {\n var ret = getObject(arg0).getTimezoneOffset();\n return ret;\n };\n imports.wbg.__wbg_new0_8e8ab0e7714cf1dd = function() {\n var ret = new Date();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_instanceof_Object_d6b4e933180fbb26 = function(arg0) {\n var ret = getObject(arg0) instanceof Object;\n return ret;\n };\n imports.wbg.__wbg_entries_a9881e0ca10e3cb2 = function(arg0) {\n var ret = Object.entries(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_fromEntries_8be754b4532b35f4 = handleError(function(arg0) {\n var ret = Object.fromEntries(getObject(arg0));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_is_573b30cf06a763fb = function(arg0, arg1) {\n var ret = Object.is(getObject(arg0), getObject(arg1));\n return ret;\n };\n imports.wbg.__wbg_new_d14bf16e62c6b3d5 = function() {\n var ret = new Object();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_resolve_778af3f90b8e2b59 = function(arg0) {\n var ret = Promise.resolve(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_then_367b3e718069cfb9 = function(arg0, arg1) {\n var ret = getObject(arg0).then(getObject(arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_then_ac66ca61394bfd21 = function(arg0, arg1, arg2) {\n var ret = getObject(arg0).then(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_self_05c54dcacb623b9a = handleError(function() {\n var ret = self.self;\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_window_9777ce446d12989f = handleError(function() {\n var ret = window.window;\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_globalThis_f0ca0bbb0149cf3d = handleError(function() {\n var ret = globalThis.globalThis;\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_global_c3c8325ae8c7f1a9 = handleError(function() {\n var ret = global.global;\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_buffer_ebc6c8e75510eae3 = function(arg0) {\n var ret = getObject(arg0).buffer;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_newwithbyteoffsetandlength_ca3d3d8811ecb569 = 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_317f0dd77f7a6673 = function(arg0) {\n var ret = getObject(arg0).length;\n return ret;\n };\n imports.wbg.__wbg_new_135e963dedf67b22 = function(arg0) {\n var ret = new Uint8Array(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_set_4a5072a31008e0cb = function(arg0, arg1, arg2) {\n getObject(arg0).set(getObject(arg1), arg2 >>> 0);\n };\n imports.wbg.__wbg_fill_f08a873179c69e31 = 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_3580452571655bd0 = function(arg0) {\n var ret = getObject(arg0).buffer;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_byteLength_7d55aca7ec6c42cb = function(arg0) {\n var ret = getObject(arg0).byteLength;\n return ret;\n };\n imports.wbg.__wbg_byteOffset_2ebe3f5c421f3a99 = function(arg0) {\n var ret = getObject(arg0).byteOffset;\n return ret;\n };\n imports.wbg.__wbg_ownKeys_b6c8becb6576203e = handleError(function(arg0) {\n var ret = Reflect.ownKeys(getObject(arg0));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_set_61642586f7156f4a = 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_wrapper399 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 4, __wbg_adapter_34);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper401 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 4, __wbg_adapter_37);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper403 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 4, __wbg_adapter_40);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper405 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 4, __wbg_adapter_43);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper407 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 4, __wbg_adapter_46);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper409 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 4, __wbg_adapter_49);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper411 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 4, __wbg_adapter_52);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper413 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 4, __wbg_adapter_55);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper1770 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 859, __wbg_adapter_58);\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\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","/**\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(...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 * Polyfills the `Reflect` object and members.\n *\n * Currently it's a minimal implementation with only `get` and `set`\n * just enough for wasm-bindgen's stdlib to not crash on pages I've found.\n *\n */\nfunction tryPolyfillReflect() {\n if (window.Reflect == undefined) {\n // @ts-expect-error: {} indeed doesn't implement Reflect's interface.\n window.Reflect = {};\n }\n if (typeof Reflect.get !== \"function\") {\n Object.defineProperty(Reflect, \"get\", {\n value(target, key) {\n return target[key];\n },\n });\n }\n if (typeof Reflect.set !== \"function\") {\n Object.defineProperty(Reflect, \"set\", {\n value(target, key, value) {\n target[key] = value;\n },\n });\n }\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 */\n// eslint-disable-next-line @typescript-eslint/ban-types\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 // Some pages override native `Reflect` with a new object without some properties,\n // which causes issues for wasm-bindgen's stdlib implementation.\n tryPolyfillReflect();\n}\n","/**\n * Conditional ruffle loader\n */\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};\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 // wasm files are set to be resource assets,\n // so this import 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 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 --ruffle-blue: #37528c;\n --ruffle-orange: #ffad33;\n\n display: inline-block;\n position: relative;\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 }\n \n /* Ruffle's width/height CSS interferes Safari fullscreen CSS. */\n /* Ensure that Safari's fullscreen mode actually fills the screen. */\n :host(:-webkit-full-screen) {\n display: block;\n width: 100% !important;\n height: 100% !important;\n }\n\n /* All of these use the dimensions specified by the embed. */\n #container,\n #play_button,\n #unmute_overlay,\n #unmute_overlay .background,\n #panic,\n #message_overlay {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n }\n\n #container {\n overflow: hidden;\n }\n\n #container canvas {\n width: 100%;\n height: 100%;\n }\n\n #play_button,\n #unmute_overlay {\n cursor: pointer;\n display: none;\n }\n\n #unmute_overlay .background {\n background: black;\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 font-size: 20px;\n text-align: center;\n /* Inverted colors from play button! */\n background: linear-gradient(180deg, #fd3a40 0%, #fda138 100%);\n color: white;\n display: flex;\n flex-flow: column;\n justify-content: space-around;\n }\n\n #panic a {\n color: var(--ruffle-blue);\n font-weight: bold;\n }\n\n #panic-title {\n font-size: xxx-large;\n font-weight: bold;\n }\n\n #panic-body.details {\n flex: 0.9;\n margin: 0 10px;\n }\n\n #panic-body textarea {\n width: 100%;\n height: 100%;\n resize: none;\n }\n\n #panic ul {\n padding: 0;\n display: flex;\n list-style-type: none;\n justify-content: space-evenly;\n }\n\n #message_overlay {\n position: absolute;\n background: var(--ruffle-blue);\n color: var(--ruffle-orange);\n opacity: 1;\n z-index: 2;\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: auto;\n }\n\n #message_overlay .message {\n text-align: center;\n max-height: 100%;\n max-width: 100%;\n padding: 5%;\n }\n\n #message_overlay p {\n margin: 0.5em 0;\n }\n\n #message_overlay .message div {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n column-gap: 1em;\n }\n\n #message_overlay a, #message_overlay button {\n cursor: pointer;\n background: var(--ruffle-blue);\n color: var(--ruffle-orange);\n border: 2px solid var(--ruffle-orange);\n font-weight: bold;\n font-size: 1.25em;\n border-radius: 0.6em;\n padding: 10px;\n text-decoration: none;\n margin: 2% 0;\n }\n\n #message_overlay a:hover, #message_overlay button:hover {\n background: #ffffff4c;\n }\n\n #continue-btn {\n cursor: pointer;\n background: var(--ruffle-blue);\n color: var(--ruffle-orange);\n border: 2px solid var(--ruffle-orange);\n font-weight: bold;\n font-size: 20px;\n border-radius: 20px;\n padding: 10px;\n }\n\n #continue-btn:hover {\n background: #ffffff4c;\n }\n\n #context-menu {\n display: none;\n color: black;\n background: #fafafa;\n border: 1px solid gray;\n box-shadow: 0px 5px 10px -5px black;\n position: absolute;\n font-size: 14px;\n text-align: left;\n list-style: none;\n padding: 0;\n margin: 0;\n }\n\n #context-menu .menu_item {\n padding: 5px 10px;\n }\n\n #context-menu .active {\n cursor: pointer;\n color: black;\n }\n\n #context-menu .disabled {\n cursor: default;\n color: gray;\n }\n\n #context-menu .active:hover {\n background: lightgray;\n }\n\n #context-menu .menu_separator hr {\n border: none;\n border-bottom: 1px solid lightgray;\n margin: 2px;\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=\"context-menu\"></ul>\n`;\n","/**\n * Number of times to try defining a custom element.\n */\nconst MAX_TRIES = 999;\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 if (window.customElements !== undefined) {\n while (tries < MAX_TRIES) {\n let externalName = elementName;\n if (tries > 0) {\n externalName = externalName + \"-\" + tries;\n }\n if (window.customElements.get(externalName) !== undefined) {\n tries += 1;\n continue;\n }\n else {\n window.customElements.define(externalName, elementClass);\n }\n privateRegistry[elementName] = {\n class: elementClass,\n name: externalName,\n internalName: elementName,\n };\n return externalName;\n }\n }\n throw new Error(\"Failed to assign custom element \" + elementName);\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[\"CSPConflict\"] = 1] = \"CSPConflict\";\n PanicError[PanicError[\"FileProtocol\"] = 2] = \"FileProtocol\";\n PanicError[PanicError[\"InvalidWasm\"] = 3] = \"InvalidWasm\";\n PanicError[PanicError[\"JavascriptConfiguration\"] = 4] = \"JavascriptConfiguration\";\n PanicError[PanicError[\"JavascriptConflict\"] = 5] = \"JavascriptConflict\";\n PanicError[PanicError[\"WasmCors\"] = 6] = \"WasmCors\";\n PanicError[PanicError[\"WasmMimeType\"] = 7] = \"WasmMimeType\";\n PanicError[PanicError[\"WasmNotFound\"] = 8] = \"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.hasContextMenu = false;\n // Whether this device is a touch device.\n // Set to true when a touch event is encountered.\n this.isTouch = false;\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.contextMenuElement = this.shadow.getElementById(\"context-menu\");\n this.addEventListener(\"contextmenu\", this.showContextMenu.bind(this));\n this.addEventListener(\"pointerdown\", this.pointerDown.bind(this));\n window.addEventListener(\"click\", this.hideContextMenu.bind(this));\n this.instance = null;\n this.options = null;\n this.onFSCommand = null;\n this._trace_observer = null;\n this._readyState = ReadyState.HaveNothing;\n this._metadata = null;\n this.ruffleConstructor = loadRuffle();\n this.lastActivePlayingState = false;\n this.setupPauseOnTabHidden();\n return this;\n }\n /**\n * Indicates the readiness of the playing movie.\n *\n * @returns The `ReadyState` of the player.\n */\n get readyState() {\n return this._readyState;\n }\n /**\n * The metadata of the playing movie (such as movie width and height).\n * These are inherent properties stored in the SWF file and are not affected by runtime changes.\n * For example, `metadata.width` is the width of the SWF file, and not the width of the Ruffle player.\n *\n * @returns The metadata of the movie, or `null` if the movie metadata has not yet loaded.\n */\n get metadata() {\n return this._metadata;\n }\n /**\n * Setup event listener to detect when tab is not active to pause instance playback.\n * this.instance.play() is called when the tab becomes visible only if the\n * the instance was not paused before tab became hidden.\n *\n * See:\n * https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API\n * @ignore\n * @internal\n */\n setupPauseOnTabHidden() {\n document.addEventListener(\"visibilitychange\", () => {\n if (!this.instance)\n return;\n // Tab just changed to be inactive. Record whether instance was playing.\n if (document.hidden) {\n this.lastActivePlayingState = this.instance.is_playing();\n this.instance.pause();\n }\n // Play only if instance was playing originally.\n if (!document.hidden && this.lastActivePlayingState === true) {\n this.instance.play();\n }\n }, false);\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 this.destroy();\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 this.destroy();\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 {\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(\"disallowed by embedder\")) {\n e.ruffleIndexError = PanicError.CSPConflict;\n }\n else if (message.includes(\"webassembly.instantiate\") &&\n e.name === \"CompileError\") {\n e.ruffleIndexError = PanicError.InvalidWasm;\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, 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 if (unmuteVisibility === UnmuteOverlay.Visible) {\n this.unmuteOverlay.style.display = \"block\";\n }\n this.container.addEventListener(\"click\", this.unmuteOverlayClicked.bind(this), {\n once: true,\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 * Destroys the currently running instance of Ruffle.\n */\n destroy() {\n if (this.instance) {\n this.instance.destroy();\n this.instance = null;\n this._metadata = null;\n this._readyState = ReadyState.HaveNothing;\n console.log(\"Ruffle instance destroyed.\");\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 if (!this.isConnected || this.isUnusedFallbackObject()) {\n console.warn(\"Ignoring attempt to play a disconnected or suspended Ruffle element\");\n return;\n }\n try {\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 // `allowScriptAccess` can only be set in `options`.\n config.allowScriptAccess = options.allowScriptAccess;\n this.options = options;\n this.hasContextMenu = config.contextMenu !== false;\n // Pre-emptively set background color of container while Ruffle/SWF loads.\n if (config.backgroundColor) {\n this.container.style.backgroundColor = 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 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 const options = {\n navigationUI: \"hide\",\n };\n if (this.requestFullscreen) {\n this.requestFullscreen(options);\n }\n else if (this.webkitRequestFullscreen) {\n this.webkitRequestFullscreen(options);\n }\n else if (this.webkitRequestFullScreen) {\n this.webkitRequestFullScreen(options);\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.webkitExitFullscreen) {\n document.webkitExitFullscreen();\n }\n else if (document.webkitCancelFullScreen) {\n document.webkitCancelFullScreen();\n }\n }\n pointerDown(event) {\n // Disable context menu when touch support is being used\n // to avoid a long press triggering the context menu. (#1972)\n if (event.pointerType === \"touch\" || event.pointerType === \"pen\") {\n this.isTouch = true;\n }\n }\n contextMenuItems() {\n const CHECKMARK = String.fromCharCode(0x2713);\n const items = [];\n if (this.instance) {\n const customItems = this.instance.prepare_context_menu();\n customItems.forEach((item, index) => {\n if (item.separatorBefore)\n items.push(null);\n items.push({\n // TODO: better checkboxes\n text: item.caption + (item.checked ? ` (${CHECKMARK})` : ``),\n onClick: () => { var _a; return (_a = this.instance) === null || _a === void 0 ? void 0 : _a.run_context_menu_callback(index); },\n enabled: item.enabled,\n });\n });\n }\n items.push(null);\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(null);\n items.push({\n text: `About Ruffle (nightly 2021-06-22)`,\n onClick() {\n window.open(RUFFLE_ORIGIN, \"_blank\");\n },\n });\n return items;\n }\n showContextMenu(e) {\n e.preventDefault();\n if (!this.hasContextMenu || this.isTouch) {\n return;\n }\n // Clear all context menu items.\n while (this.contextMenuElement.firstChild) {\n this.contextMenuElement.removeChild(this.contextMenuElement.firstChild);\n }\n // Populate context menu items.\n for (const item of this.contextMenuItems()) {\n if (item === null) {\n if (!this.contextMenuElement.lastElementChild)\n continue; // don't start with separators\n if (this.contextMenuElement.lastElementChild.classList.contains(\"menu_separator\"))\n continue; // don't repeat separators\n const menuSeparator = document.createElement(\"li\");\n menuSeparator.className = \"menu_separator\";\n const hr = document.createElement(\"hr\");\n menuSeparator.appendChild(hr);\n this.contextMenuElement.appendChild(menuSeparator);\n }\n else {\n const { text, onClick, enabled } = item;\n const menuItem = document.createElement(\"li\");\n menuItem.className = \"menu_item active\";\n menuItem.textContent = text;\n this.contextMenuElement.appendChild(menuItem);\n if (enabled !== false) {\n menuItem.addEventListener(\"click\", onClick);\n }\n else {\n menuItem.classList.add(\"disabled\");\n }\n }\n }\n // Place a context menu in the top-left corner, so\n // its `clientWidth` and `clientHeight` are not clamped.\n this.contextMenuElement.style.left = \"0\";\n this.contextMenuElement.style.top = \"0\";\n this.contextMenuElement.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.contextMenuElement.clientWidth - 1;\n const maxY = rect.height - this.contextMenuElement.clientHeight - 1;\n this.contextMenuElement.style.left =\n Math.floor(Math.min(x, maxX)) + \"px\";\n this.contextMenuElement.style.top =\n Math.floor(Math.min(y, maxY)) + \"px\";\n }\n hideContextMenu() {\n var _a;\n (_a = this.instance) === null || _a === void 0 ? void 0 : _a.clear_custom_menu_items();\n this.contextMenuElement.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-06-22\\n`);\n errorArray.push(`Channel: nightly\\n`);\n errorArray.push(`Built: 2021-06-22T00:10:37.922Z\\n`);\n errorArray.push(`Commit: e0107750996b5b3724680ead1acda0124002baea\\n`);\n const errorText = errorArray.join(\"\");\n // Remove query params for the issue title.\n const pageUrl = document.location.href.split(/[?#]/)[0];\n const issueTitle = `Error on ${pageUrl}`;\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.InvalidWasm:\n // Self hosted: Cannot load `.wasm` file - incorrect configuration or missing files\n errorBody = `\n <p>Ruffle has encountered a major issue whilst trying to initialize.</p>\n <p>It seems like this page has missing or invalid files for running Ruffle.</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#addressing-a-compileerror\">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 case PanicError.CSPConflict:\n // General error: 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>This web server's Content Security Policy does not allow the required \".wasm\" component to run.</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-wasm-csp\">View Ruffle Wiki</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 const panicBody = (this.container.querySelector(\"#panic-body\"));\n panicBody.classList.add(\"details\");\n panicBody.innerHTML = `<textarea>${errorText}</textarea>`;\n return false;\n };\n }\n // Do this last, just in case it causes any cascading issues.\n this.destroy();\n }\n displayUnsupportedMessage() {\n const div = document.createElement(\"div\");\n div.id = \"message_overlay\";\n // TODO: Change link to https://ruffle.rs/faq or similar\n // TODO: Pause content until message is dismissed\n div.innerHTML = `<div class=\"message\">\n <p>Flash Player has been removed from browsers in 2021.</p>\n <p>This content is not yet supported by the Ruffle emulator and will likely not run as intended.</p>\n <div>\n <a target=\"_top\" class=\"more-info-link\" href=\"https://github.com/ruffle-rs/ruffle/wiki/Frequently-Asked-Questions-For-Users\">More info</a>\n <button id=\"run-anyway-btn\">Run anyway</button>\n </div>\n </div>`;\n this.container.prepend(div);\n const button = div.querySelector(\"#run-anyway-btn\");\n button.onclick = () => {\n div.parentNode.removeChild(div);\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 <p>${message}</p>\n <div>\n <button id=\"continue-btn\">continue</button>\n </div>\n </div>`;\n this.container.prepend(div);\n (this.container.querySelector(\"#continue-btn\")).onclick = () => {\n div.parentNode.removeChild(div);\n };\n }\n debugPlayerInfo() {\n var _a, _b;\n return `Allows script access: ${(_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.allowScriptAccess) !== null && _b !== void 0 ? _b : false}\\n`;\n }\n setMetadata(metadata) {\n this._metadata = metadata;\n // TODO: Switch this to ReadyState.Loading when we have streaming support.\n this._readyState = ReadyState.Loaded;\n this.dispatchEvent(new Event(RufflePlayer.LOADED_METADATA));\n }\n}\n/**\n * Triggered when a movie metadata has been loaded (such as movie width and height).\n *\n * @event RufflePlayer#loadedmetadata\n */\nRufflePlayer.LOADED_METADATA = \"loadedmetadata\";\n/**\n * Describes the loading state of an SWF movie.\n */\nexport var ReadyState;\n(function (ReadyState) {\n /**\n * No movie is loaded, or no information is yet available about the movie.\n */\n ReadyState[ReadyState[\"HaveNothing\"] = 0] = \"HaveNothing\";\n /**\n * The movie is still loading, but it has started playback, and metadata is available.\n */\n ReadyState[ReadyState[\"Loading\"] = 1] = \"Loading\";\n /**\n * The movie has completely loaded.\n */\n ReadyState[ReadyState[\"Loaded\"] = 2] = \"Loaded\";\n})(ReadyState || (ReadyState = {}));\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 // Kick off the SWF download.\n this.load({\n url: src.value,\n allowScriptAccess: isScriptAccessAllowed(allowScriptAccess, 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 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 allowScriptAccess = findCaseInsensitive(this.params, \"allowScriptAccess\", null);\n const parameters = findCaseInsensitive(this.params, \"flashvars\", this.getAttribute(\"flashvars\"));\n const backgroundColor = findCaseInsensitive(this.params, \"bgcolor\", this.getAttribute(\"bgcolor\"));\n if (url) {\n const options = { url };\n options.allowScriptAccess = isScriptAccessAllowed(allowScriptAccess, url);\n if (parameters) {\n options.parameters = parameters;\n }\n if (backgroundColor) {\n options.backgroundColor = backgroundColor;\n }\n // Kick off the SWF download.\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\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.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// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\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 = \"\";","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// no jsonp function","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":""}